<?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>78879</bug_id>
          
          <creation_ts>2012-02-16 23:24:18 -0800</creation_ts>
          <short_desc>Allow FileSystem API implementation to pass snapshot metadata at File creation time</short_desc>
          <delta_ts>2012-05-17 09:53:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>86745</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kinuko Yasuda">kinuko</reporter>
          <assigned_to name="Kinuko Yasuda">kinuko</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>ericu</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>fishd</cc>
    
    <cc>gustavo</cc>
    
    <cc>jianli</cc>
    
    <cc>michaeln</cc>
    
    <cc>pnormand</cc>
    
    <cc>satorux</cc>
    
    <cc>tzik</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>558955</commentid>
    <comment_count>0</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-02-16 23:24:18 -0800</bug_when>
    <thetext>Capture File snapshot at its creation time for files from FileSystem API.

We roughly consider File object as a &apos;snapshot&apos; of the underlying file, though we do not strictly force the model in normal use cases (e.g. for non-sliced, non-concatenated single files).

We should probably tighten this concept for files from FileSystem API, since we want to get rid of the possibility of making synchronous file operations on unknown sandboxed filesystems (e.g. the filesystem could be a remote filesystem), and also have another non-snapshot type of file object in the API (i.e. FileEntry).  Also it&apos;ll be much safer to change (fix) the behavior for FileSystem files than regular files since the API is still new.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558987</commentid>
    <comment_count>1</comment_count>
      <attachid>127541</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-02-17 00:09:25 -0800</bug_when>
    <thetext>Created attachment 127541
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558995</commentid>
    <comment_count>2</comment_count>
      <attachid>127541</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-17 00:24:50 -0800</bug_when>
    <thetext>Comment on attachment 127541
Patch

Attachment 127541 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11540386</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559030</commentid>
    <comment_count>3</comment_count>
      <attachid>127541</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-17 01:29:10 -0800</bug_when>
    <thetext>Comment on attachment 127541
Patch

Attachment 127541 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11536503</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559044</commentid>
    <comment_count>4</comment_count>
      <attachid>127551</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-02-17 01:56:00 -0800</bug_when>
    <thetext>Created attachment 127551
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559626</commentid>
    <comment_count>5</comment_count>
      <attachid>127551</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2012-02-17 16:17:07 -0800</bug_when>
    <thetext>Comment on attachment 127551
Patch

Do you have the test for FileSystem snapshot?

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

&gt; Source/WebCore/fileapi/Blob.cpp:97
&gt; +    if (asFile())

Can you cache asFile since it is accessed more than once?

&gt; Source/WebCore/fileapi/File.h:108
&gt; +    mutable double m_snapshotModificationTime;

m_snapshotTimestamp? I think we do not care if the timestamp is created from modification time or not.

&gt; Source/WebCore/fileapi/WebKitBlobBuilder.cpp:104
&gt; +    if (blob-&gt;asFile()) {

ditto.

&gt; Source/WebCore/fileapi/WebKitBlobBuilder.cpp:107
&gt; +        blob-&gt;asFile()-&gt;maybeCaptureSnapshot();

This seems to change the semantics. We used to capture and use the latest snapshot when the blob is appended to the BlobBuilder. But now we use the same snapshot the first time that the blob is added to the builder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560158</commentid>
    <comment_count>6</comment_count>
      <attachid>127801</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-02-20 03:48:44 -0800</bug_when>
    <thetext>Created attachment 127801
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560162</commentid>
    <comment_count>7</comment_count>
      <attachid>127551</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-02-20 03:59:04 -0800</bug_when>
    <thetext>Comment on attachment 127551
Patch

Thanks for reviewing!

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

&gt;&gt; Source/WebCore/fileapi/Blob.cpp:97
&gt;&gt; +    if (asFile())
&gt; 
&gt; Can you cache asFile since it is accessed more than once?

Done.  (Though compiler will likely produce the same code for both)

&gt;&gt; Source/WebCore/fileapi/File.h:108
&gt;&gt; +    mutable double m_snapshotModificationTime;
&gt; 
&gt; m_snapshotTimestamp? I think we do not care if the timestamp is created from modification time or not.

Sounds good, but in the current code we specifically set this value from metadata.modificationTime and return the value for lastModifiedDate so probably it&apos;d be clearer to keep this as is.

&gt;&gt; Source/WebCore/fileapi/WebKitBlobBuilder.cpp:104
&gt;&gt; +    if (blob-&gt;asFile()) {
&gt; 
&gt; ditto.

Done.

&gt;&gt; Source/WebCore/fileapi/WebKitBlobBuilder.cpp:107
&gt;&gt; +        blob-&gt;asFile()-&gt;maybeCaptureSnapshot();
&gt; 
&gt; This seems to change the semantics. We used to capture and use the latest snapshot when the blob is appended to the BlobBuilder. But now we use the same snapshot the first time that the blob is added to the builder.

Right.  I made the change since the File API seems to be going to include more specific error for modified-after-snapshot cases and slice/BlobBuilder usage looked relatively safe to change (since we already take snapshot approach for them).
...but I don&apos;t want to introduce unwanted regressions either, so I just removed the line 138 in File.cpp.  (TL;DR: Fixed.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560446</commentid>
    <comment_count>8</comment_count>
      <attachid>127867</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-02-20 16:22:39 -0800</bug_when>
    <thetext>Created attachment 127867
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560448</commentid>
    <comment_count>9</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-02-20 16:24:22 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=127867) [details]
&gt; Patch

Removed some duplicated code and simplified the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562385</commentid>
    <comment_count>10</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-02-22 14:18:07 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Created an attachment (id=127867) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; Removed some duplicated code and simplified the patch.

Friendly ping.  Jian could you take another look?  Thanks very much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563321</commentid>
    <comment_count>11</comment_count>
      <attachid>128519</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-02-23 11:49:03 -0800</bug_when>
    <thetext>Created attachment 128519
Patch

Added a test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563491</commentid>
    <comment_count>12</comment_count>
      <attachid>128519</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2012-02-23 14:32:54 -0800</bug_when>
    <thetext>Comment on attachment 128519
Patch

It seems that we now have 2 different semantics when slicing a file into blob. For file-system file, we always use the snapshot that is obtained at the File object creation time. For real file, we always obtain and use the latest snapshot. Is this slicing behavior for file-system file somewhere described in the FileSystem spec? If not, can we also try to use the same behavior for file-system file?

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

&gt; Source/WebCore/fileapi/Blob.cpp:70
&gt; +    // FIXME: Calling size() and lastModifiedTimeInMicroseconds() may involve synchronous file operation. We need to figure out how to make it asynchronous or make File/Blob act as snapshot all the time as the new draft specifies.

Now you split the call of captureSnapshot into 2 calls: size() and lastModifiedTimeInMicroseconds() and this might not guarantee that size and lastModifiedTime are for the same snapshot when slicing a file. Though current implementation of captureSnapshot also has this problem but we has a FIXME for this, your current change exaggerates this problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564624</commentid>
    <comment_count>13</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-02-24 14:08:25 -0800</bug_when>
    <thetext>Thanks.  After some discussion this patch is no longer in a critical path for M19, so I&apos;d like to revisit this sometime later.

(In reply to comment #12)
&gt; (From update of attachment 128519 [details])
&gt; It seems that we now have 2 different semantics when slicing a file into blob. For file-system file, we always use the snapshot that is obtained at the File object creation time. For real file, we always obtain and use the latest snapshot. Is this slicing behavior for file-system file somewhere described in the FileSystem spec? If not, can we also try to use the same behavior for file-system file?

It&apos;s not really the spec&apos;ed behavior, though I hoped changing only for files from FileSystem, possibly with some noisy FIXME comment, would be probably acceptable (at least it&apos;d be harmless).

&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=128519&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/fileapi/Blob.cpp:70
&gt; &gt; +    // FIXME: Calling size() and lastModifiedTimeInMicroseconds() may involve synchronous file operation. We need to figure out how to make it asynchronous or make File/Blob act as snapshot all the time as the new draft specifies.
&gt; 
&gt; Now you split the call of captureSnapshot into 2 calls: size() and lastModifiedTimeInMicroseconds() and this might not guarantee that size and lastModifiedTime are for the same snapshot when slicing a file. Though current implementation of captureSnapshot also has this problem but we has a FIXME for this, your current change exaggerates this problem.

Ok, I&apos;ll revert the change when I resume working on this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621403</commentid>
    <comment_count>14</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-05-11 02:01:34 -0700</bug_when>
    <thetext>Changed summary text.  In general we should query File metadata (e.g. size and modifiedTime) on the fly, i.e. when it is queried, to keep the File semantics, but for some platform-specific filesystems it may not be feasible since synchronous metadata query could take very long time.

We should allow each FileSystem API implementation to pass snapshot metadata so that File object could cache the given metadata not to make synchronous query.

This should NOT be allowed for regular FileSystem types (i.e. Temporary or Persistent) not to break File API semantics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621466</commentid>
    <comment_count>15</comment_count>
      <attachid>141372</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-05-11 03:44:41 -0700</bug_when>
    <thetext>Created attachment 141372
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623393</commentid>
    <comment_count>16</comment_count>
      <attachid>141372</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2012-05-14 15:46:06 -0700</bug_when>
    <thetext>Comment on attachment 141372
Patch

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

&gt; Source/WebCore/Modules/filesystem/DOMFileSystem.cpp:126
&gt; +class GetSnapshotFileCallback : public FileSystemCallbacksBase {

I think it&apos;d better to call it as GetMetadataCallback since we&apos;re only creating snapshot for certain scenario.

&gt; Source/WebCore/Modules/filesystem/DOMFileSystem.cpp:139
&gt; +        // For regular filesystem types (temporary or persistent) we should not cache file metadata as it could change File semantics.

Add comma before we.

&gt; Source/WebCore/Modules/filesystem/DOMFileSystem.cpp:140
&gt; +        // For other filesystem types (which could be platform-specific ones) there&apos;s a chance that the files are on remote filesystem. If the port has returned metadata just pass it to File constructor (so we may cache the metadata).

ditto.

&gt; Source/WebCore/Modules/filesystem/DOMFileSystemSync.cpp:118
&gt; +        // For regular filesystem types (temporary or persistent) we should not cache file metadata as it could change File semantics.

ditto.

&gt; Source/WebCore/Modules/filesystem/DOMFileSystemSync.cpp:119
&gt; +        // For other filesystem types (which could be platform-specific ones) there&apos;s a chance that the files are on remote filesystem. If the port has returned metadata just pass it to File constructor (so we may cache the metadata).

ditto.

&gt; Source/WebCore/Modules/mediastream/PeerConnection00.cpp:99
&gt; +    dictionary.get(&quot;has_video&quot;, audio);

??

&gt; Source/WebCore/fileapi/Blob.cpp:78
&gt; +    long long size = m_size;

It seems the original code is a bit more efficient. What do you need to change that?

&gt; Source/WebCore/fileapi/Blob.h:44
&gt; +class File;

Is this forward declaration needed?

&gt; Source/WebCore/fileapi/File.cpp:97
&gt; +    : Blob(createBlobDataForFileWithName(metadata.platformPath, name), -1)

Should we also store both size and modification time, if provided by the remote system, in the blob data? Should we not pass -1 when caching the metadata?

&gt; Source/WebCore/fileapi/File.cpp:157
&gt; +bool File::hasValidSnapshotMetadata() const

It seems that hasValidSnapshotMetadata might&apos;d better be exposed in FileMetadata.

&gt; Source/WebCore/fileapi/File.h:57
&gt; +    // For filesystem files. It takes metadata which could optionally give valid snapshot metadata, which will suppress future metadata query on this File object. The metadata argument must be used carefully if and only if it is infeasible to query file metadata on the fly (e.g. file is on remote filesystem).

nit: grammar error.

&gt; Source/WebCore/fileapi/File.h:105
&gt; +    const FileMetadata m_snapshotMetadata;

This might be duplicate. We could probable get the metadata directly out of the blob data. It seems that we can use a boolean flag to denote a snapshot file case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623935</commentid>
    <comment_count>17</comment_count>
      <attachid>141933</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-05-15 05:38:00 -0700</bug_when>
    <thetext>Created attachment 141933
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623943</commentid>
    <comment_count>18</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-05-15 05:44:10 -0700</bug_when>
    <thetext>Thanks, I updated the patch.

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

&gt;&gt; Source/WebCore/Modules/filesystem/DOMFileSystem.cpp:126
&gt;&gt; +class GetSnapshotFileCallback : public FileSystemCallbacksBase {
&gt; 
&gt; I think it&apos;d better to call it as GetMetadataCallback since we&apos;re only creating snapshot for certain scenario.

Fixed.

&gt;&gt; Source/WebCore/Modules/filesystem/DOMFileSystem.cpp:139
&gt;&gt; +        // For regular filesystem types (temporary or persistent) we should not cache file metadata as it could change File semantics.
&gt; 
&gt; Add comma before we.

Done.

&gt;&gt; Source/WebCore/Modules/filesystem/DOMFileSystem.cpp:140
&gt;&gt; +        // For other filesystem types (which could be platform-specific ones) there&apos;s a chance that the files are on remote filesystem. If the port has returned metadata just pass it to File constructor (so we may cache the metadata).
&gt; 
&gt; ditto.

Done.

&gt;&gt; Source/WebCore/Modules/filesystem/DOMFileSystemSync.cpp:118
&gt;&gt; +        // For regular filesystem types (temporary or persistent) we should not cache file metadata as it could change File semantics.
&gt; 
&gt; ditto.

Done.

&gt;&gt; Source/WebCore/Modules/filesystem/DOMFileSystemSync.cpp:119
&gt;&gt; +        // For other filesystem types (which could be platform-specific ones) there&apos;s a chance that the files are on remote filesystem. If the port has returned metadata just pass it to File constructor (so we may cache the metadata).
&gt; 
&gt; ditto.

Done.

&gt;&gt; Source/WebCore/Modules/mediastream/PeerConnection00.cpp:99
&gt;&gt; +    dictionary.get(&quot;has_video&quot;, audio);
&gt; 
&gt; ??

Bad merge... dropped.

&gt;&gt; Source/WebCore/fileapi/Blob.cpp:78
&gt;&gt; +    long long size = m_size;
&gt; 
&gt; It seems the original code is a bit more efficient. What do you need to change that?

It doesn&apos;t make difference in binaries with most compilers. Anyway this change isn&apos;t really necessary so I reverted it.

&gt;&gt; Source/WebCore/fileapi/Blob.h:44
&gt;&gt; +class File;
&gt; 
&gt; Is this forward declaration needed?

Nope, removed.

&gt;&gt; Source/WebCore/fileapi/File.cpp:97
&gt;&gt; +    : Blob(createBlobDataForFileWithName(metadata.platformPath, name), -1)
&gt; 
&gt; Should we also store both size and modification time, if provided by the remote system, in the blob data? Should we not pass -1 when caching the metadata?

Good point. I updated the code along with the line.

&gt;&gt; Source/WebCore/fileapi/File.cpp:157
&gt;&gt; +bool File::hasValidSnapshotMetadata() const
&gt; 
&gt; It seems that hasValidSnapshotMetadata might&apos;d better be exposed in FileMetadata.

I removed this method.  (Now the validation check is a bit relaxed than the previous patch but I think it&apos;d be ok)

&gt;&gt; Source/WebCore/fileapi/File.h:57
&gt;&gt; +    // For filesystem files. It takes metadata which could optionally give valid snapshot metadata, which will suppress future metadata query on this File object. The metadata argument must be used carefully if and only if it is infeasible to query file metadata on the fly (e.g. file is on remote filesystem).
&gt; 
&gt; nit: grammar error.

I revised the comment trying to make the sentence simpler.  (Sorry I wasn&apos;t sure which part was particularly wrong)

&gt;&gt; Source/WebCore/fileapi/File.h:105
&gt;&gt; +    const FileMetadata m_snapshotMetadata;
&gt; 
&gt; This might be duplicate. We could probable get the metadata directly out of the blob data. It seems that we can use a boolean flag to denote a snapshot file case.

I changed the code  to use Blob::m_size and only cache snapshot modificationTime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623949</commentid>
    <comment_count>19</comment_count>
      <attachid>141933</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-15 05:54:16 -0700</bug_when>
    <thetext>Comment on attachment 141933
Patch

Attachment 141933 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12685746</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623956</commentid>
    <comment_count>20</comment_count>
      <attachid>141940</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-05-15 05:59:54 -0700</bug_when>
    <thetext>Created attachment 141940
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624728</commentid>
    <comment_count>21</comment_count>
      <attachid>141940</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2012-05-15 16:40:27 -0700</bug_when>
    <thetext>Comment on attachment 141940
Patch

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

&gt; Source/WebCore/fileapi/File.cpp:68
&gt; +        contentType = MIMETypeRegistry::getWellKnownMIMETypeForExtension(fileSystemName.substring(index + 1));

Can this content type extraction code be shared among all these 3 static methods?

&gt; Source/WebCore/fileapi/File.cpp:146
&gt; +    if (m_size &gt;= 0)

Though this logic works, I think it is inclined to mistakes in the future since m_size is indeed defined and initialized in Blob. Suppose someone changes the default value for m_size or assign some value for m_size in Blob implementation, we will return m_size without doing query for normal filesystem files. I think it is safer to explicitly define a boolean flag in File to mean that a snapshot is provided. Or, can we solely use m_snapshotModificationTime to find out if the snapshot is valid?

&gt; Source/WebCore/fileapi/File.h:30
&gt; +#include &quot;FileMetadata.h&quot;

It seems that we can use forward declaration instead.

&gt; Source/WebCore/fileapi/File.h:57
&gt; +    // For filesystem files. It takes metadata argument, which may suppress future metadata query on this File object if it has valid information (i.e. non-zero modificationTime and/or non-negative file length). The metadata argument must be given carefully only when it is infeasible to query file metadata on the fly (e.g. file is on remote filesystem).

Maybe simpler and easier to understand if this is rephrased to something like:
  If filesystem files lives in the remote filesystem, the port might pass the valid metadata (non-zero modificationTime and/or non-negative file size) and cache it in the File object.

&gt; LayoutTests/ChangeLog:9
&gt; +        * fast/filesystem/file-read-after-write.html: Added.

This tests seems to purely verify that the metadata is not cached, right?

&gt; LayoutTests/fast/filesystem/file-metadata-after-write.html:59
&gt; +function test(expect, actual)

Can we rely on those test utils provided by js-test-pre.js?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625000</commentid>
    <comment_count>22</comment_count>
      <attachid>142155</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-05-15 22:50:13 -0700</bug_when>
    <thetext>Created attachment 142155
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625008</commentid>
    <comment_count>23</comment_count>
      <attachid>141940</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-05-15 22:56:16 -0700</bug_when>
    <thetext>Comment on attachment 141940
Patch

Thanks, I updated the patch.

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

&gt;&gt; Source/WebCore/fileapi/File.cpp:68
&gt;&gt; +        contentType = MIMETypeRegistry::getWellKnownMIMETypeForExtension(fileSystemName.substring(index + 1));
&gt; 
&gt; Can this content type extraction code be shared among all these 3 static methods?

Done.

&gt;&gt; Source/WebCore/fileapi/File.cpp:146
&gt;&gt; +    if (m_size &gt;= 0)
&gt; 
&gt; Though this logic works, I think it is inclined to mistakes in the future since m_size is indeed defined and initialized in Blob. Suppose someone changes the default value for m_size or assign some value for m_size in Blob implementation, we will return m_size without doing query for normal filesystem files. I think it is safer to explicitly define a boolean flag in File to mean that a snapshot is provided. Or, can we solely use m_snapshotModificationTime to find out if the snapshot is valid?

Good point.  Adding a flag sounds good, but it still may not stop Blob to assign some value in the future...
To make it explicit and parallel to snapshotModificationTime I just added snapshotSize field, assuming 64-bit increase per File object will be ok.

&gt;&gt; Source/WebCore/fileapi/File.h:30
&gt;&gt; +#include &quot;FileMetadata.h&quot;
&gt; 
&gt; It seems that we can use forward declaration instead.

Done.

&gt;&gt; Source/WebCore/fileapi/File.h:57
&gt;&gt; +    // For filesystem files. It takes metadata argument, which may suppress future metadata query on this File object if it has valid information (i.e. non-zero modificationTime and/or non-negative file length). The metadata argument must be given carefully only when it is infeasible to query file metadata on the fly (e.g. file is on remote filesystem).
&gt; 
&gt; Maybe simpler and easier to understand if this is rephrased to something like:
&gt;   If filesystem files lives in the remote filesystem, the port might pass the valid metadata (non-zero modificationTime and/or non-negative file size) and cache it in the File object.

Sounds good!  Updated.

&gt;&gt; LayoutTests/ChangeLog:9
&gt;&gt; +        * fast/filesystem/file-read-after-write.html: Added.
&gt; 
&gt; This tests seems to purely verify that the metadata is not cached, right?

Yes.  I added the explanation in the ChangeLog.

&gt;&gt; LayoutTests/fast/filesystem/file-metadata-after-write.html:59
&gt;&gt; +function test(expect, actual)
&gt; 
&gt; Can we rely on those test utils provided by js-test-pre.js?

This is a tiny piece of code and I prefer making this test standalone, but if using it is still a recommended way I&apos;ll follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626273</commentid>
    <comment_count>24</comment_count>
      <attachid>142414</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-05-16 22:47:19 -0700</bug_when>
    <thetext>Created attachment 142414
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626276</commentid>
    <comment_count>25</comment_count>
      <attachid>141940</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-05-16 22:50:12 -0700</bug_when>
    <thetext>Comment on attachment 141940
Patch

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

&gt;&gt;&gt; LayoutTests/fast/filesystem/file-metadata-after-write.html:59
&gt;&gt;&gt; +function test(expect, actual)
&gt;&gt; 
&gt;&gt; Can we rely on those test utils provided by js-test-pre.js?
&gt; 
&gt; This is a tiny piece of code and I prefer making this test standalone, but if using it is still a recommended way I&apos;ll follow.

On the second thought using existing function would be always nice, I updated the patch to use js-test-pre.js.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626327</commentid>
    <comment_count>26</comment_count>
      <attachid>142414</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2012-05-17 00:22:02 -0700</bug_when>
    <thetext>Comment on attachment 142414
Patch

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

&gt; Source/WebCore/fileapi/File.cpp:163
&gt; +    if (m_snapshotSize &gt;= 0 &amp;&amp; m_snapshotModificationTime) {

This seems a bit inconsistent w/ if checks in lastModifiedDate() and size(). Your comment below says valid metadata is meant by non-zero modificationTime and/or non-negative file size. Can we have &quot;or&quot; scenario? If yes, please change &amp;&amp; to ||. Otherwise, please always use &quot;m_snapshotSize &gt;= 0 &amp;&amp; m_snapshotModificationTime&quot; for all 3 checks.

&gt; Source/WebCore/fileapi/File.h:57
&gt; +    // If filesystem files live in the remote filesystem, the port might pass the valid metdata (non-zero modificationTime and/or non-negative file size) and cache in the File object.

typo: metdata

&gt; Source/WebCore/fileapi/File.h:102
&gt; +#if ENABLE(FILE_SYSTEM)

Please comment that what scenario these 2 members should be used. Also please illustrate the default values.

&gt; LayoutTests/fast/filesystem/file-metadata-after-write-expected.txt:1
&gt; +Writing 1234567890 to the file...

Better to output a line of description to explain what we want to test here:
  Test that metadata is not cached in the regular temporary filesystem.

&gt; LayoutTests/fast/filesystem/file-metadata-after-write.html:84
&gt; +      layoutTestController.notifyDone();

nit: wrong indenting.

&gt; LayoutTests/fast/filesystem/file-metadata-after-write.html:90
&gt; +

nit: extra line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626342</commentid>
    <comment_count>27</comment_count>
      <attachid>142414</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-05-17 00:40:11 -0700</bug_when>
    <thetext>Comment on attachment 142414
Patch

Thanks!

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

&gt;&gt; Source/WebCore/fileapi/File.cpp:163
&gt;&gt; +    if (m_snapshotSize &gt;= 0 &amp;&amp; m_snapshotModificationTime) {
&gt; 
&gt; This seems a bit inconsistent w/ if checks in lastModifiedDate() and size(). Your comment below says valid metadata is meant by non-zero modificationTime and/or non-negative file size. Can we have &quot;or&quot; scenario? If yes, please change &amp;&amp; to ||. Otherwise, please always use &quot;m_snapshotSize &gt;= 0 &amp;&amp; m_snapshotModificationTime&quot; for all 3 checks.

By the comment I meant we check two values with &apos;&amp;&amp;&apos; for snapshot but only check each value in size()/lastModifiedDate().

For better consistency I&apos;ll change the code to always check with &apos;&amp;&amp;&apos; in all cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626467</commentid>
    <comment_count>28</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-05-17 05:07:15 -0700</bug_when>
    <thetext>Committed r117432: &lt;http://trac.webkit.org/changeset/117432&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626614</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-17 08:51:19 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 86745</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626650</commentid>
    <comment_count>30</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-05-17 09:53:34 -0700</bug_when>
    <thetext>Looks ok now.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127541</attachid>
            <date>2012-02-17 00:09:25 -0800</date>
            <delta_ts>2012-02-17 01:55:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78879-20120217170924.patch</filename>
            <type>text/plain</type>
            <size>27137</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3ODc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjkxYTNkYmJkMTY5MDcx
MTAwZGJmMTc3N2YxNGUyMmFmNjUyODMyYi4uM2I2NjYzYzNhZjYzMTRmMjgzNjc2YzJjMTIxMzQ1
ZmY1M2VjNGRhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEyLTAyLTE2ICBLaW51
a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAgICAgICBDYXB0dXJlIEZpbGUg
c25hcHNob3QgYXQgaXRzIGNyZWF0aW9uIHRpbWUgZm9yIGZpbGVzIGZyb20gRmlsZVN5c3RlbSBB
UEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODc5
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbmNsdWRlcyBmb2xsb3dpbmcgY2hhbmdlczoKKyAgICAg
ICAgLSBDaGFuZ2VkIHRoZSBGaWxlIGNvbnN0cnVjdG9yIGZvciBmaWxlcyBpbiBGaWxlU3lzdGVt
IEFQSSB0byB0YWtlIGl0cworICAgICAgICAgIG1ldGFkYXRhIChpbmNsdWRpbmcgc2l6ZSBhbmQg
bGFzdE1vZGlmaWVkVGltZSkgc28gdGhhdCBhY2Nlc3NpbmcKKyAgICAgICAgICBCbG9iLnNpemUg
YW5kIEZpbGUubGFzdE1vZGlmaWVkRGF0ZSB3b24ndCB0cmlnZ2VyIHN5bmNocm9ub3VzIGZpbGUK
KyAgICAgICAgICBvcGVyYXRpb25zIGZvciB0aGVtLiAgKFRoaXMgc2hvdWxkIGJlIG9rIGFzIEZp
bGUgb2JqZWN0IGlzCisgICAgICAgICAgY29uc2lkZXJlZCBhcyAnc25hcHNob3QnIG9mIHRoZSBm
aWxlKQorICAgICAgICAtIEFsc28gbWFkZSBvdGhlciBtaW5vciByZWZhY3RvcmluZy9jbGVhbnVw
cy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHM6IGV4aXN0aW5nIHRlc3RzIHNob3VsZCBwYXNzLgorCisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4QmxvYkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToK
KyAgICAgICAgKiBmaWxlYXBpL0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6d2Vi
a2l0U2xpY2UpOgorICAgICAgICAqIGZpbGVhcGkvQmxvYi5oOgorICAgICAgICAoV2ViQ29yZTo6
QmxvYjo6YXNGaWxlKTogQWRkZWQgKG9ic29sZXRpbmcgaXNGaWxlKCkgYm9vbGVhbiBtZXRob2Qp
CisgICAgICAgIChXZWJDb3JlOjpET01GaWxlU3lzdGVtOjpjcmVhdGVGaWxlKToKKyAgICAgICAg
KiBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZp
bGVTeXN0ZW1TeW5jOjpjcmVhdGVGaWxlKToKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQmxvYkRhdGFGb3JGaWxlU3lzdGVtRmlsZSk6IENoYW5n
ZWQgdG8gdGFrZSBzbmFwc2hvdCBtZXRhZGF0YSBpbmZvLgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZTo6c2l6ZSk6IENoYW5nZWQgdG8gdXNlIHNuYXBzaG90IGRhdGEgaWYgYXZhaWxhYmxlLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZTo6bGFzdE1vZGlmaWVkVGltZUluTWljcm9zZWNvbmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbGU6Om1heWJlQ2FwdHVyZVNuYXBzaG90KToKKyAgICAgICAgKiBm
aWxlYXBpL0ZpbGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OmNyZWF0ZUZvckZpbGVTeXN0
ZW1GaWxlKTogQWRkZWQgKHJlbmFtZWQgZnJvbSBjcmVhdGVXaXRoTmFtZSgpKQorICAgICAgICAo
V2ViQ29yZTo6RmlsZTo6YXNGaWxlKTogQWRkZWQgKG9ic29sZXRpbmcgaXNGaWxlKCkgYm9vbGVh
biBtZXRob2QpCisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpsYXN0TW9kaWZpZWREYXRlKTogQ2hh
bmdlZCB0byB1c2Ugc25hcHNob3QgZGF0YSBpZiBhdmFpbGFibGUuCisgICAgICAgICogZmlsZWFw
aS9GaWxlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRBc0Fy
cmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRBc0JpbmFyeVN0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkQXNUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRBc0RhdGFVUkwpOgorICAgICAgICAqIGZpbGVh
cGkvV2ViS2l0QmxvYkJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0QmxvYkJ1
aWxkZXI6OmFwcGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVy
SXRlbUxpc3RDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVt
TGlzdENocm9taXVtOjpkZWxldGVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRLZXlWYWx1ZVBh
aXJJdGVtcyk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKwogMjAxMi0wMi0xNSAgRGFuIEJlcm5zdGVp
biAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxMDc4MzYpOiBmYXN0
L2JveC1zaGFkb3cvc3ByZWFkLmh0bWwgYW5kIGZhc3Qvd3JpdGluZy1tb2RlL2JveC1zaGFkb3ct
Ki5odG1sIHRlc3RzIGZhaWxpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4QmxvYkN1c3RvbS5jcHAKaW5kZXggNjg1MzU3OGU5MjdhN2U5MjNhMzBiNGQ3MTZh
YzJlYzhjMzc0ZmMwMS4uZTkzZmQwM2NjMWE2MWIxYjI5MDQ5YTBjMjVjNTlkMWYyMmQwMTAxZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmxvYkN1c3Rv
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmxvYkN1c3Rv
bS5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoQmxvYiog
aW1wbCkKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwogCi0gICAg
aWYgKGltcGwtPmlzRmlsZSgpKQorICAgIGlmIChpbXBsLT5hc0ZpbGUoKSkKICAgICAgICAgcmV0
dXJuIHRvVjgoc3RhdGljX2Nhc3Q8RmlsZSo+KGltcGwpKTsKIAogICAgIHJldHVybiBWOEJsb2I6
OndyYXAoaW1wbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAppbmRleCAzYjMzY2Q2NmRlOGRiYTc5
MWQ2ZmQ1YzkzNDUxZDNjMGRmN2VlZDJkLi5hNmMzN2Q1ODVmYzk1NjdjNWY5NjAyNWE5NGJjZjU2
ZjhhODRkYThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKQEAgLTY3LDE1ICs2NywxMCBAQCBQ
YXNzUmVmUHRyPEJsb2I+IEJsb2I6OndlYmtpdFNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBs
b25nIGVuZCwgY29uc3QgU3RyaW5nJgogewogICAgIC8vIFdoZW4gd2Ugc2xpY2UgYSBmaWxlIGZv
ciB0aGUgZmlyc3QgdGltZSwgd2Ugb2J0YWluIGEgc25hcHNob3Qgb2YgdGhlIGZpbGUgYnkgY2Fw
dHVyaW5nIGl0cyBjdXJyZW50IHNpemUgYW5kIG1vZGlmaWNhdGlvbiB0aW1lLgogICAgIC8vIFRo
ZSBtb2RpZmljYXRpb24gdGltZSB3aWxsIGJlIHVzZWQgdG8gdmVyaWZ5IGlmIHRoZSBmaWxlIGhh
cyBiZWVuIGNoYW5nZWQgb3Igbm90LCB3aGVuIHRoZSB1bmRlcmx5aW5nIGRhdGEgYXJlIGFjY2Vz
c2VkLgotICAgIGxvbmcgbG9uZyBzaXplOwotICAgIGRvdWJsZSBtb2RpZmljYXRpb25UaW1lOwot
ICAgIGlmIChpc0ZpbGUoKSkKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgaW52b2x2ZXMgc3luY2hy
b25vdXMgZmlsZSBvcGVyYXRpb24uIFdlIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gbWFrZSBp
dCBhc3luY2hyb25vdXMuCi0gICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IEZpbGUqPih0aGlzKS0+
Y2FwdHVyZVNuYXBzaG90KHNpemUsIG1vZGlmaWNhdGlvblRpbWUpOwotICAgIGVsc2UgewotICAg
ICAgICBBU1NFUlQobV9zaXplICE9IC0xKTsKLSAgICAgICAgc2l6ZSA9IG1fc2l6ZTsKLSAgICB9
CisgICAgLy8gRklYTUU6IFRoaXMgbWF5IGludm9sdmUgc3luY2hyb25vdXMgZmlsZSBvcGVyYXRp
b24uIFdlIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gbWFrZSBpdCBhc3luY2hyb25vdXMuCisg
ICAgaWYgKGFzRmlsZSgpKQorICAgICAgICBhc0ZpbGUoKS0+bWF5YmVDYXB0dXJlU25hcHNob3Qo
KTsKKyAgICBjb25zdCBsb25nIGxvbmcgc2l6ZSA9IHRoaXMtPnNpemUoKTsKIAogICAgIC8vIENv
bnZlcnQgdGhlIG5lZ2F0aXZlIHZhbHVlIHRoYXQgaXMgdXNlZCB0byBzZWxlY3QgZnJvbSB0aGUg
ZW5kLgogICAgIGlmIChzdGFydCA8IDApCkBAIC05OSw4ICs5NCw4IEBAIFBhc3NSZWZQdHI8Qmxv
Yj4gQmxvYjo6d2Via2l0U2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgZW5kLCBjb25z
dCBTdHJpbmcmCiAgICAgbG9uZyBsb25nIGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgIE93blB0
cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRlKCk7CiAgICAgYmxvYkRhdGEt
PnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKTsKLSAgICBpZiAoaXNGaWxlKCkpCi0gICAgICAg
IGJsb2JEYXRhLT5hcHBlbmRGaWxlKHN0YXRpY19jYXN0PGNvbnN0IEZpbGUqPih0aGlzKS0+cGF0
aCgpLCBzdGFydCwgbGVuZ3RoLCBtb2RpZmljYXRpb25UaW1lKTsKKyAgICBpZiAoYXNGaWxlKCkp
CisgICAgICAgIGJsb2JEYXRhLT5hcHBlbmRGaWxlKGFzRmlsZSgpLT5wYXRoKCksIHN0YXJ0LCBs
ZW5ndGgsIGFzRmlsZSgpLT5sYXN0TW9kaWZpZWRUaW1lSW5NaWNyb3NlY29uZHMoKSk7CiAgICAg
ZWxzZQogICAgICAgICBibG9iRGF0YS0+YXBwZW5kQmxvYihtX2ludGVybmFsVVJMLCBzdGFydCwg
bGVuZ3RoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmggYi9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaAppbmRleCBiY2E5Mzk4MjM2ZDg2ZWI0YThkNDM0
ODYxMjc4MDMyZWM1MDJiZGM2Li44MzgxMDVhZTU5NjNlZTAyZDAyNDM5MzgyM2NkNTIwNDIxMzcw
ODljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaApAQCAtNDEsNiArNDEsOCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIEZpbGU7CisKIGNsYXNzIEJsb2IgOiBwdWJsaWMgUmVmQ291bnRl
ZDxCbG9iPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKFBh
c3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhLCBsb25nIGxvbmcgc2l6ZSkKQEAgLTYwLDcgKzYy
LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZTsgfQogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obV9zaXplKTsgfQotICAgIHZp
cnR1YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Y29uc3QgRmlsZSogYXNGaWxlKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAjaWYgRU5BQkxFKEJM
T0IpCiAgICAgUGFzc1JlZlB0cjxCbG9iPiB3ZWJraXRTbGljZShsb25nIGxvbmcgc3RhcnQgPSAw
LCBsb25nIGxvbmcgZW5kID0gc3RkOjpudW1lcmljX2xpbWl0czxsb25nIGxvbmc+OjptYXgoKSwg
Y29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSA9IFN0cmluZygpKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0uY3BwCmluZGV4IDk3OTllMTIwNzllOGFlZDQyMzU3YTgx
NmZiYzYxNWJkOWJiYTBiNDQuLjM5N2Y5YTUzMDI2NWMyNTNlNWRhYzU2NjE5MDM5MDZkNzNiYzJm
NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtLmNwcApAQCAtMTIzLDIx
ICsxMjMsMjIgQEAgdm9pZCBET01GaWxlU3lzdGVtOjpjcmVhdGVXcml0ZXIoY29uc3QgRmlsZUVu
dHJ5KiBmaWxlRW50cnksIFBhc3NSZWZQdHI8RmlsZVdyaXQKIAogbmFtZXNwYWNlIHsKIAotY2xh
c3MgR2V0UGF0aENhbGxiYWNrIDogcHVibGljIEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlIHsKK2Ns
YXNzIEdldE1ldGFkYXRhQ2FsbGJhY2sgOiBwdWJsaWMgRmlsZVN5c3RlbUNhbGxiYWNrc0Jhc2Ug
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEdldFBhdGhDYWxsYmFjaz4gY3JlYXRl
KFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZXN5c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCisgICAgc3RhdGljIFBhc3NPd25QdHI8R2V0TWV0
YWRhdGFDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZXN5c3Rl
bSwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4gc3VjY2Vzc0Nh
bGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdldFBhdGhDYWxsYmFjayhmaWxlc3lzdGVtLCBu
YW1lLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBHZXRNZXRhZGF0YUNhbGxiYWNrKGZpbGVzeXN0ZW0sIG5hbWUsIHN1Y2Nlc3ND
YWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWFkTWV0YWRhdGEoY29uc3QgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSkKICAgICB7CiAgICAgICAg
IEFTU0VSVCghbWV0YWRhdGEucGxhdGZvcm1QYXRoLmlzRW1wdHkoKSk7Ci0gICAgICAgIG1fZmls
ZXN5c3RlbS0+c2NoZWR1bGVDYWxsYmFjayhtX3N1Y2Nlc3NDYWxsYmFjay5yZWxlYXNlKCksIEZp
bGU6OmNyZWF0ZVdpdGhOYW1lKG1ldGFkYXRhLnBsYXRmb3JtUGF0aCwgbV9uYW1lKSk7CisgICAg
ICAgIEFTU0VSVChtZXRhZGF0YS50eXBlID09IEZpbGVNZXRhZGF0YTo6VHlwZUZpbGUpOworICAg
ICAgICBtX2ZpbGVzeXN0ZW0tPnNjaGVkdWxlQ2FsbGJhY2sobV9zdWNjZXNzQ2FsbGJhY2sucmVs
ZWFzZSgpLCBGaWxlOjpjcmVhdGVGb3JGaWxlU3lzdGVtRmlsZShtX25hbWUsIG1ldGFkYXRhKSk7
CiAgICAgfQogCiBwcml2YXRlOgotICAgIEdldFBhdGhDYWxsYmFjayhQYXNzUmVmUHRyPERPTUZp
bGVTeXN0ZW0+IGZpbGVzeXN0ZW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgIFBhc3NSZWZQdHI8Rmls
ZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJy
b3JDYWxsYmFjaykKKyAgICBHZXRNZXRhZGF0YUNhbGxiYWNrKFBhc3NSZWZQdHI8RE9NRmlsZVN5
c3RlbT4gZmlsZXN5c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCAgUGFzc1JlZlB0cjxGaWxlQ2Fs
bGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNh
bGxiYWNrKQogICAgICAgICA6IEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlKGVycm9yQ2FsbGJhY2sp
CiAgICAgICAgICwgbV9maWxlc3lzdGVtKGZpbGVzeXN0ZW0pCiAgICAgICAgICwgbV9uYW1lKG5h
bWUpCkBAIC0xNTQsNyArMTU1LDcgQEAgcHJpdmF0ZToKIAogdm9pZCBET01GaWxlU3lzdGVtOjpj
cmVhdGVGaWxlKGNvbnN0IEZpbGVFbnRyeSogZmlsZUVudHJ5LCBQYXNzUmVmUHRyPEZpbGVDYWxs
YmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2Fs
bGJhY2spCiB7Ci0gICAgbV9hc3luY0ZpbGVTeXN0ZW0tPnJlYWRNZXRhZGF0YShmaWxlRW50cnkt
PmZ1bGxQYXRoKCksIEdldFBhdGhDYWxsYmFjazo6Y3JlYXRlKHRoaXMsIGZpbGVFbnRyeS0+bmFt
ZSgpLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKKyAgICBtX2FzeW5jRmlsZVN5
c3RlbS0+cmVhZE1ldGFkYXRhKGZpbGVFbnRyeS0+ZnVsbFBhdGgoKSwgR2V0TWV0YWRhdGFDYWxs
YmFjazo6Y3JlYXRlKHRoaXMsIGZpbGVFbnRyeS0+bmFtZSgpLCBzdWNjZXNzQ2FsbGJhY2ssIGVy
cm9yQ2FsbGJhY2spKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcAppbmRleCBlN2E4Y2E3MGJmNTc3Y2U0
ZDQ3ZTgzYmNkZmYwYTJkOTc3NzYyNmQ1Li40YzgwMGM5NmY0YWFhYTAwZGJlNGNiZGZmN2E3ZjI5
MGNjNjI3NzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0
ZW1TeW5jLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5j
LmNwcApAQCAtNzIsMzUgKzcyLDM1IEBAIFBhc3NSZWZQdHI8RGlyZWN0b3J5RW50cnlTeW5jPiBE
T01GaWxlU3lzdGVtU3luYzo6cm9vdCgpCiAKIG5hbWVzcGFjZSB7CiAKLWNsYXNzIEdldFBhdGhI
ZWxwZXIgOiBwdWJsaWMgQXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzIHsKK2NsYXNzIEdldE1ldGFk
YXRhSGVscGVyIDogcHVibGljIEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcyB7CiBwdWJsaWM6Ci0g
ICAgY2xhc3MgR2V0UGF0aFJlc3VsdCA6IHB1YmxpYyBSZWZDb3VudGVkPEdldFBhdGhSZXN1bHQ+
IHsKKyAgICBjbGFzcyBHZXRNZXRhZGF0YVJlc3VsdCA6IHB1YmxpYyBSZWZDb3VudGVkPEdldE1l
dGFkYXRhUmVzdWx0PiB7CiAgICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEdldFBhdGhSZXN1bHQ+IGNyZWF0ZSgpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdldE1l
dGFkYXRhUmVzdWx0PiBjcmVhdGUoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEdldFBhdGhSZXN1bHQoKSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEdldE1ldGFkYXRhUmVzdWx0KCkpOwogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBtX2Zh
aWxlZDsKICAgICAgICAgaW50IG1fY29kZTsKLSAgICAgICAgU3RyaW5nIG1fcGF0aDsKKyAgICAg
ICAgRmlsZU1ldGFkYXRhIG1fbWV0YWRhdGE7CiAKICAgICAgIHByaXZhdGU6Ci0gICAgICAgIEdl
dFBhdGhSZXN1bHQoKQorICAgICAgICBHZXRNZXRhZGF0YVJlc3VsdCgpCiAgICAgICAgICAgICA6
IG1fZmFpbGVkKGZhbHNlKQogICAgICAgICAgICAgLCBtX2NvZGUoMCkKICAgICAgICAgewogICAg
ICAgICB9CiAKLSAgICAgICAgfkdldFBhdGhSZXN1bHQoKQorICAgICAgICB+R2V0TWV0YWRhdGFS
ZXN1bHQoKQogICAgICAgICB7CiAgICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIFdURjo6
UmVmQ291bnRlZDxHZXRQYXRoUmVzdWx0PjsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFdURjo6UmVm
Q291bnRlZDxHZXRNZXRhZGF0YVJlc3VsdD47CiAgICAgfTsKIAotICAgIHN0YXRpYyBQYXNzT3du
UHRyPEdldFBhdGhIZWxwZXI+IGNyZWF0ZShQYXNzUmVmUHRyPEdldFBhdGhSZXN1bHQ+IHJlc3Vs
dCkKKyAgICBzdGF0aWMgUGFzc093blB0cjxHZXRNZXRhZGF0YUhlbHBlcj4gY3JlYXRlKFBhc3NS
ZWZQdHI8R2V0TWV0YWRhdGFSZXN1bHQ+IHJlc3VsdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgR2V0UGF0aEhlbHBlcihyZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBHZXRNZXRhZGF0YUhlbHBlcihyZXN1bHQpKTsKICAgICB9CiAKICAgICB2aXJ0dWFs
IHZvaWQgZGlkU3VjY2VlZCgpCkBAIC0xMzQsMjEgKzEzNCwyMSBAQCBwdWJsaWM6CiAgICAgICAg
IG1fcmVzdWx0LT5tX2NvZGUgPSBjb2RlOwogICAgIH0KIAotICAgIHZpcnR1YWwgfkdldFBhdGhI
ZWxwZXIoKQorICAgIHZpcnR1YWwgfkdldE1ldGFkYXRhSGVscGVyKCkKICAgICB7CiAgICAgfQog
CiAgICAgdm9pZCBkaWRSZWFkTWV0YWRhdGEoY29uc3QgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSkK
ICAgICB7Ci0gICAgICAgIG1fcmVzdWx0LT5tX3BhdGggPSBtZXRhZGF0YS5wbGF0Zm9ybVBhdGg7
CisgICAgICAgIG1fcmVzdWx0LT5tX21ldGFkYXRhID0gbWV0YWRhdGE7CiAgICAgfQogcHJpdmF0
ZToKLSAgICBHZXRQYXRoSGVscGVyKFBhc3NSZWZQdHI8R2V0UGF0aFJlc3VsdD4gcmVzdWx0KQor
ICAgIEdldE1ldGFkYXRhSGVscGVyKFBhc3NSZWZQdHI8R2V0TWV0YWRhdGFSZXN1bHQ+IHJlc3Vs
dCkKICAgICAgICAgOiBtX3Jlc3VsdChyZXN1bHQpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0
cjxHZXRQYXRoUmVzdWx0PiBtX3Jlc3VsdDsKKyAgICBSZWZQdHI8R2V0TWV0YWRhdGFSZXN1bHQ+
IG1fcmVzdWx0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UKQEAgLTE1Niw4ICsxNTYsOCBAQCBwcml2
YXRlOgogUGFzc1JlZlB0cjxGaWxlPiBET01GaWxlU3lzdGVtU3luYzo6Y3JlYXRlRmlsZShjb25z
dCBGaWxlRW50cnlTeW5jKiBmaWxlRW50cnksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVj
ID0gMDsKLSAgICBSZWZQdHI8R2V0UGF0aEhlbHBlcjo6R2V0UGF0aFJlc3VsdD4gcmVzdWx0KEdl
dFBhdGhIZWxwZXI6OkdldFBhdGhSZXN1bHQ6OmNyZWF0ZSgpKTsKLSAgICBtX2FzeW5jRmlsZVN5
c3RlbS0+cmVhZE1ldGFkYXRhKGZpbGVFbnRyeS0+ZnVsbFBhdGgoKSwgR2V0UGF0aEhlbHBlcjo6
Y3JlYXRlKHJlc3VsdCkpOworICAgIFJlZlB0cjxHZXRNZXRhZGF0YUhlbHBlcjo6R2V0TWV0YWRh
dGFSZXN1bHQ+IHJlc3VsdChHZXRNZXRhZGF0YUhlbHBlcjo6R2V0TWV0YWRhdGFSZXN1bHQ6OmNy
ZWF0ZSgpKTsKKyAgICBtX2FzeW5jRmlsZVN5c3RlbS0+cmVhZE1ldGFkYXRhKGZpbGVFbnRyeS0+
ZnVsbFBhdGgoKSwgR2V0TWV0YWRhdGFIZWxwZXI6OmNyZWF0ZShyZXN1bHQpKTsKICAgICBpZiAo
IW1fYXN5bmNGaWxlU3lzdGVtLT53YWl0Rm9yT3BlcmF0aW9uVG9Db21wbGV0ZSgpKSB7CiAgICAg
ICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6QUJPUlRfRVJSOwogICAgICAgICByZXR1cm4gMDsKQEAg
LTE2Niw4ICsxNjYsOCBAQCBQYXNzUmVmUHRyPEZpbGU+IERPTUZpbGVTeXN0ZW1TeW5jOjpjcmVh
dGVGaWxlKGNvbnN0IEZpbGVFbnRyeVN5bmMqIGZpbGVFbnRyeSwgRQogICAgICAgICBlYyA9IHJl
c3VsdC0+bV9jb2RlOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgQVNTRVJUKCFyZXN1
bHQtPm1fcGF0aC5pc0VtcHR5KCkpOwotICAgIHJldHVybiBGaWxlOjpjcmVhdGVXaXRoTmFtZShy
ZXN1bHQtPm1fcGF0aCwgZmlsZUVudHJ5LT5uYW1lKCkpOworICAgIEFTU0VSVCghcmVzdWx0LT5t
X21ldGFkYXRhLnBsYXRmb3JtUGF0aC5pc0VtcHR5KCkpOworICAgIHJldHVybiBGaWxlOjpjcmVh
dGVGb3JGaWxlU3lzdGVtRmlsZShmaWxlRW50cnktPm5hbWUoKSwgcmVzdWx0LT5tX21ldGFkYXRh
KTsKIH0KIAogbmFtZXNwYWNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
RmlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuY3BwCmluZGV4IGQ0MDliOTcx
OTMzNTk1MTllMzAwYTAzMjk0OTcwNGZhZWY1ZjNlODIuLjhlNjZhNjhhZmQ0YmEzMjlhOGYzOWJk
ZTgwNjY4MjY1YTFiN2JiMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmls
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmNwcApAQCAtNTEsMTMgKzUx
LDEzIEBAIHN0YXRpYyBQYXNzT3duUHRyPEJsb2JEYXRhPiBjcmVhdGVCbG9iRGF0YUZvckZpbGUo
Y29uc3QgU3RyaW5nJiBwYXRoKQogfQogCiAjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotc3RhdGlj
IFBhc3NPd25QdHI8QmxvYkRhdGE+IGNyZWF0ZUJsb2JEYXRhRm9yRmlsZVN5c3RlbUZpbGUoY29u
c3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbGVTeXN0ZW1OYW1lKQorc3RhdGljIFBh
c3NPd25QdHI8QmxvYkRhdGE+IGNyZWF0ZUJsb2JEYXRhRm9yRmlsZVN5c3RlbUZpbGUoY29uc3Qg
U3RyaW5nJiBmaWxlU3lzdGVtTmFtZSwgY29uc3QgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSkKIHsK
ICAgICBTdHJpbmcgdHlwZTsKICAgICBpbnQgaW5kZXggPSBmaWxlU3lzdGVtTmFtZS5yZXZlcnNl
RmluZCgnLicpOwogICAgIGlmIChpbmRleCAhPSAtMSkKICAgICAgICAgdHlwZSA9IE1JTUVUeXBl
UmVnaXN0cnk6OmdldFdlbGxLbm93bk1JTUVUeXBlRm9yRXh0ZW5zaW9uKGZpbGVTeXN0ZW1OYW1l
LnN1YnN0cmluZyhpbmRleCArIDEpKTsKLSAgICByZXR1cm4gY3JlYXRlQmxvYkRhdGFGb3JGaWxl
V2l0aFR5cGUocGF0aCwgdHlwZSk7CisgICAgcmV0dXJuIGNyZWF0ZUJsb2JEYXRhRm9yRmlsZVdp
dGhUeXBlKG1ldGFkYXRhLnBsYXRmb3JtUGF0aCwgdHlwZSk7CiB9CiAjZW5kaWYKIApAQCAtNzQs
MTIgKzc0LDE0IEBAIEZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIDogQmxvYihj
cmVhdGVCbG9iRGF0YUZvckZpbGUocGF0aCksIC0xKQogICAgICwgbV9wYXRoKHBhdGgpCiAgICAg
LCBtX25hbWUocGF0aEdldEZpbGVOYW1lKHBhdGgpKQorICAgICwgbV9zbmFwc2hvdFRha2VuKGZh
bHNlKQogewogfQogCiBGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgOiBCbG9iKHVybCwgdHlwZSwgLTEpCiAgICAg
LCBtX3BhdGgocGF0aCkKKyAgICAsIG1fc25hcHNob3RUYWtlbihmYWxzZSkKIHsKICAgICBtX25h
bWUgPSBwYXRoR2V0RmlsZU5hbWUocGF0aCk7CiAgICAgLy8gRklYTUU6IEZpbGUgb2JqZWN0IHNl
cmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIGRvZXMgbm90IGluY2x1ZGUKQEAgLTg4LDI2ICs5
MCwyMyBAQCBGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIHR5cGUpCiB9CiAKICNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi1GaWxlOjpG
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIDogQmxvYihj
cmVhdGVCbG9iRGF0YUZvckZpbGVTeXN0ZW1GaWxlKHBhdGgsIG5hbWUpLCAtMSkKLSAgICAsIG1f
cGF0aChwYXRoKQorRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZpbGVNZXRh
ZGF0YSYgbWV0YWRhdGEpCisgICAgOiBCbG9iKGNyZWF0ZUJsb2JEYXRhRm9yRmlsZVN5c3RlbUZp
bGUobmFtZSwgbWV0YWRhdGEpLCAtMSkKKyAgICAsIG1fcGF0aChtZXRhZGF0YS5wbGF0Zm9ybVBh
dGgpCiAgICAgLCBtX25hbWUobmFtZSkKKyAgICAsIG1fc25hcHNob3RUYWtlbih0cnVlKQorICAg
ICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUobWV0YWRhdGEubW9kaWZpY2F0aW9uVGltZSkK
KyAgICAsIG1fc25hcHNob3RTaXplKG1ldGFkYXRhLmxlbmd0aCkKIHsKIH0KICNlbmRpZgogCi1k
b3VibGUgRmlsZTo6bGFzdE1vZGlmaWVkRGF0ZSgpIGNvbnN0Ci17Ci0gICAgdGltZV90IG1vZGlm
aWNhdGlvblRpbWU7Ci0gICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShtX3BhdGgsIG1v
ZGlmaWNhdGlvblRpbWUpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIE5lZWRzIHRvIHJl
dHVybiBlcG9jaCB0aW1lIGluIG1pbGxpc2Vjb25kcyBmb3IgRGF0ZS4KLSAgICByZXR1cm4gbW9k
aWZpY2F0aW9uVGltZSAqIDEwMDAuMDsKLX0KLQogdW5zaWduZWQgbG9uZyBsb25nIEZpbGU6OnNp
emUoKSBjb25zdAogeworICAgIGlmIChtX3NuYXBzaG90VGFrZW4pCisgICAgICAgIHJldHVybiBt
X3NuYXBzaG90U2l6ZTsKKworICAgIC8vIEZvciBub24tc2xpY2VkL25vbi1zbmFwc2hvdCBmaWxl
cyBjaGFuZ2luZyB0aGlzIG1heSBicmVhayB0aGUgZXhpc3RpbmcgY29kZSBiZWhhdmlvciwgc28g
Zm9yIG5vdyB3ZSBtYWtlIHN5bmNocm9ub3VzIGNhbGwgdG8gZ2V0IHRoZSBmcmVzaCBpbmZvcm1h
dGlvbi4KICAgICAvLyBGSVhNRTogSmF2YVNjcmlwdCBjYW5ub3QgcmVwcmVzZW50IHNpemVzIGFz
IGxhcmdlIGFzIHVuc2lnbmVkIGxvbmcgbG9uZywgd2UgbmVlZCB0bwogICAgIC8vIGNvbWUgdXAg
d2l0aCBhbiBleGNlcHRpb24gdG8gdGhyb3cgaWYgZmlsZSBzaXplIGlzIG5vdCByZXByZXNlbnRh
YmxlLgogICAgIGxvbmcgbG9uZyBzaXplOwpAQCAtMTE2LDE3ICsxMTUsMzcgQEAgdW5zaWduZWQg
bG9uZyBsb25nIEZpbGU6OnNpemUoKSBjb25zdAogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBsb25nIGxvbmc+KHNpemUpOwogfQogCi12b2lkIEZpbGU6OmNhcHR1cmVTbmFwc2hvdChs
b25nIGxvbmcmIHNuYXBzaG90U2l6ZSwgZG91YmxlJiBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUp
IGNvbnN0Citkb3VibGUgRmlsZTo6bGFzdE1vZGlmaWVkVGltZUluTWljcm9zZWNvbmRzKCkgY29u
c3QKK3sKKyAgICBpZiAobV9zbmFwc2hvdFRha2VuKQorICAgICAgICByZXR1cm4gbV9zbmFwc2hv
dE1vZGlmaWNhdGlvblRpbWU7CisKKyAgICAvLyBGb3Igbm9uLXNsaWNlZC9ub24tc25hcHNob3Qg
ZmlsZXMgY2hhbmdpbmcgdGhpcyBtYXkgYnJlYWsgdGhlIGV4aXN0aW5nIGNvZGUgYmVoYXZpb3Is
IHNvIGZvciBub3cgd2UgbWFrZSBzeW5jaHJvbm91cyBjYWxsIHRvIGdldCB0aGUgZnJlc2ggaW5m
b3JtYXRpb24uCisgICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7CisgICAgaWYgKCFnZXRGaWxl
TW9kaWZpY2F0aW9uVGltZShtX3BhdGgsIG1vZGlmaWNhdGlvblRpbWUpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gbW9kaWZpY2F0aW9uVGltZTsKK30KKwordm9pZCBGaWxlOjptYXli
ZUNhcHR1cmVTbmFwc2hvdCgpIGNvbnN0CiB7CiAgICAgLy8gT2J0YWlucyBhIHNuYXBzaG90IG9m
IHRoZSBmaWxlIGJ5IGNhcHR1cmluZyBpdHMgY3VycmVudCBzaXplIGFuZCBtb2RpZmljYXRpb24g
dGltZS4gVGhpcyBpcyB1c2VkIHdoZW4gd2Ugc2xpY2UgYSBmaWxlIGZvciB0aGUgZmlyc3QgdGlt
ZS4KICAgICAvLyBJZiB3ZSBmYWlsIHRvIHJldHJpZXZlIHRoZSBzaXplIG9yIG1vZGlmaWNhdGlv
biB0aW1lLCBwcm9iYWJseSBkdWUgdG8gdGhhdCB0aGUgZmlsZSBoYXMgYmVlbiBkZWxldGVkLCAw
IHNpemUgaXMgcmV0dXJuZWQuCiAgICAgLy8gRklYTUU6IENvbWJpbmUgZ2V0RmlsZVNpemUgYW5k
IGdldEZpbGVNb2RpZmljYXRpb25UaW1lIGludG8gb25lIGZpbGUgc3lzdGVtIGNhbGwuCisgICAg
aWYgKG1fc25hcHNob3RUYWtlbikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zbmFwc2hvdFRh
a2VuID0gdHJ1ZTsKKworICAgIGxvbmcgbG9uZyBzbmFwc2hvdFNpemU7CiAgICAgdGltZV90IG1v
ZGlmaWNhdGlvblRpbWU7CiAgICAgaWYgKCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNuYXBzaG90U2l6
ZSkgfHwgIWdldEZpbGVNb2RpZmljYXRpb25UaW1lKG1fcGF0aCwgbW9kaWZpY2F0aW9uVGltZSkp
IHsKLSAgICAgICAgc25hcHNob3RTaXplID0gMDsKLSAgICAgICAgc25hcHNob3RNb2RpZmljYXRp
b25UaW1lID0gMDsKLSAgICB9IGVsc2UKLSAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1l
ID0gbW9kaWZpY2F0aW9uVGltZTsKKyAgICAgICAgbV9zbmFwc2hvdFNpemUgPSAwOworICAgICAg
ICBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgbV9zbmFwc2hvdFNpemUgPSBzbmFwc2hvdFNpemU7CisgICAgbV9zbmFwc2hvdE1vZGlm
aWNhdGlvblRpbWUgPSBtb2RpZmljYXRpb25UaW1lOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvRmlsZS5oCmluZGV4IDEzYTkxZmUzZTQxZjk1ZmI5YjIzYWNkNmIwZWVi
ZGMxNTQ0M2Q0ZTMuLjZiOWYzMWVlZWE0MjcxZDg2OTU2NjEwNDZiNzhlZTY2ZmYzODU4ODEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZS5oCkBAIC0yNywxMiArMjcsMTQgQEAKICNkZWZpbmUgRmlsZV9oCiAK
ICNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAiRmlsZU1ldGFkYXRhLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRmlsZU1l
dGFkYXRhOwogY2xhc3MgS1VSTDsKIAogY2xhc3MgRmlsZSA6IHB1YmxpYyBCbG9iIHsKQEAgLTUz
LDI2ICs1NSwzMyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkK
LSAgICAvLyBDcmVhdGUgYSBmaWxlIHdpdGggYSBuYW1lIGV4cG9zZWQgdG8gdGhlIGF1dGhvciAo
dmlhIEZpbGUubmFtZSBhbmQgYXNzb2NpYXRlZCBET00gcHJvcGVydGllcykgdGhhdCBkaWZmZXJz
IGZyb20gdGhlIG9uZSBwcm92aWRlZCBpbiB0aGUgcGF0aC4KLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxGaWxlPiBjcmVhdGVXaXRoTmFtZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYg
bmFtZSkKKyAgICAvLyBDcmVhdGUgYSBmaWxlIGZvciBGaWxlU3lzdGVtIEFQSSB3aXRoIGEgc25h
cHNob3QgbWV0YWRhdGEgYW5kIGEgbmFtZSBleHBvc2VkIHRvIHRoZSBhdXRob3IgKHZpYSBGaWxl
Lm5hbWUgYW5kIGFzc29jaWF0ZWQgRE9NIHByb3BlcnRpZXMpIHRoYXQgbWF5IGRpZmZlciBmcm9t
IHRoZSBvbmUgcHJvdmlkZWQgaW4gdGhlIHBhdGguCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Rmls
ZT4gY3JlYXRlRm9yRmlsZVN5c3RlbUZpbGUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGaWxl
TWV0YWRhdGEmIG1ldGFkYXRhKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBG
aWxlKHBhdGgsIG5hbWUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlKG5hbWUs
IG1ldGFkYXRhKSk7CiAgICAgfQogI2VuZGlmCiAKKyAgICAvLyBUaGlzIG1heSBpbnZvbHZlIHN5
bmNocm9ub3VzIGZpbGUgb3BlcmF0aW9uIGlmIHRoZSBmaWxlIGRvZXMgbm90IGhhdmUgYSBzbmFw
c2hvdCBpbmZvLgogICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgaXNGaWxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
dmlydHVhbCBjb25zdCBGaWxlKiBhc0ZpbGUoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CiAKICAg
ICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KICAgICBjb25z
dCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICBkb3VibGUgbGFz
dE1vZGlmaWVkRGF0ZSgpIGNvbnN0OworICAgIGRvdWJsZSBsYXN0TW9kaWZpZWREYXRlKCkgY29u
c3QgeyByZXR1cm4gbGFzdE1vZGlmaWVkVGltZUluTWljcm9zZWNvbmRzKCkgKiAxMDAwLjA7IH0K
KworICAgIC8vIFRoaXMgbWF5IGludm9sdmUgc3luY2hyb25vdXMgZmlsZSBvcGVyYXRpb24gaWYg
dGhlIGZpbGUgZG9lcyBub3QgaGF2ZSBhIHNuYXBzaG90IGluZm8uCisgICAgZG91YmxlIGxhc3RN
b2RpZmllZFRpbWVJbk1pY3Jvc2Vjb25kcygpIGNvbnN0OworCiAjaWYgRU5BQkxFKERJUkVDVE9S
WV9VUExPQUQpCiAgICAgLy8gUmV0dXJucyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGlzIGZpbGUg
aW4gdGhlIGNvbnRleHQgb2YgYSBkaXJlY3Rvcnkgc2VsZWN0aW9uLgogICAgIGNvbnN0IFN0cmlu
ZyYgd2Via2l0UmVsYXRpdmVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGl2ZVBhdGg7IH0K
ICNlbmRpZgogCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgaW52b2x2ZXMgc3luY2hyb25vdXMgZmls
ZSBvcGVyYXRpb24uIFRoaW5rIHR3aWNlIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCi0g
ICAgdm9pZCBjYXB0dXJlU25hcHNob3QobG9uZyBsb25nJiBzbmFwc2hvdFNpemUsIGRvdWJsZSYg
c25hcHNob3RNb2RpZmljYXRpb25UaW1lKSBjb25zdDsKKyAgICAvLyBDYXB0dXJlcyB0aGUgY3Vy
cmVudCBmaWxlIHNpemUgYW5kIGxhc3RNb2RpZmljYXRpb25UaW1lIGlmIGl0IGlzIG5vdCB0YWtl
biAob3Igbm90IGdpdmVuIGF0IHRoZSBjcmVhdGlvbiB0aW1lKS4KKyAgICAvLyBOb3RlIHRoYXQg
dGhpcyBtYXkgaW52b2x2ZSBzeW5jaHJvbm91cyBmaWxlIG9wZXJhdGlvbiBpZiBhIHNuYXBzaG90
IGZvciB0aGlzIGZpbGUgb2JqZWN0IGhhcyBub3QgYmVlbiB0YWtlbi4gVGhpbmsgdHdpY2UgYmVm
b3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAgICB2b2lkIG1heWJlQ2FwdHVyZVNuYXBzaG90
KCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogb2Jzb2xldGUgYXR0cmlidXRlcy4gVG8gYmUgcmVt
b3ZlZC4KICAgICBjb25zdCBTdHJpbmcmIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbmFtZSgp
OyB9CkBAIC04NSw3ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgRmlsZShjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IEtVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlKTsKIAogI2lmIEVOQUJM
RShGSUxFX1NZU1RFTSkKLSAgICBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5n
JiBuYW1lKTsKKyAgICBGaWxlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmlsZU1ldGFkYXRh
Jik7CiAjZW5kaWYKIAogICAgIFN0cmluZyBtX3BhdGg7CkBAIC05Myw2ICsxMDIsMTEgQEAgcHJp
dmF0ZToKICNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKICAgICBTdHJpbmcgbV9yZWxhdGl2
ZVBhdGg7CiAjZW5kaWYKKworICAgIC8vIEtlZXBzIGFyb3VuZCB0aGUgbWV0YWRhdGEgaW5mb3Jt
YXRpb24gZm9yIGEgc25hcHNob3QgZmlsZS9zbGljZS4KKyAgICBtdXRhYmxlIGJvb2wgbV9zbmFw
c2hvdFRha2VuOworICAgIG11dGFibGUgZG91YmxlIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1l
OworICAgIG11dGFibGUgbG9uZyBsb25nIG1fc25hcHNob3RTaXplOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVh
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKaW5kZXggMDdj
NGI2NzQ2MTExMTYxZWZmMjk5NTlhYjFkMmZiZGMxYzAxMzEyZi4uNGRiY2U3ZGZiN2Q3MmIyZDJk
NjhjZTcxM2I0YWFmM2MzZGQ2ZjAxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9GaWxlUmVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIu
Y3BwCkBAIC05NSw3ICs5NSw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6cmVhZEFzQXJyYXlCdWZmZXIo
QmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgaWYgKCFibG9iKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgYXJyYXkg
YnVmZmVyOiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgYmxv
Yi0+aXNGaWxlKCkgPyBzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYiktPnBhdGgoKS51dGY4KCkuZGF0
YSgpIDogIiIpOworICAgIExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyBhcnJh
eSBidWZmZXI6ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBi
bG9iLT5hc0ZpbGUoKSA/IGJsb2ItPmFzRmlsZSgpLT5wYXRoKCkudXRmOCgpLmRhdGEoKSA6ICIi
KTsKIAogICAgIHJlYWRJbnRlcm5hbChibG9iLCBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkQXNBcnJh
eUJ1ZmZlciwgZWMpOwogfQpAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6cmVh
ZEFzQmluYXJ5U3RyaW5nKEJsb2IqIGJsb2IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGlmICgh
YmxvYikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9HKEZpbGVBUEksICJGaWxlUmVhZGVyOiBy
ZWFkaW5nIGFzIGJpbmFyeTogJXMgJXNcbiIsIGJsb2ItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIGJsb2ItPmlzRmlsZSgpID8gc3RhdGljX2Nhc3Q8RmlsZSo+KGJsb2IpLT5wYXRoKCku
dXRmOCgpLmRhdGEoKSA6ICIiKTsKKyAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRp
bmcgYXMgYmluYXJ5OiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSwgYmxvYi0+YXNGaWxlKCkgPyBibG9iLT5hc0ZpbGUoKS0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkg
OiAiIik7CiAKICAgICByZWFkSW50ZXJuYWwoYmxvYiwgRmlsZVJlYWRlckxvYWRlcjo6UmVhZEFz
QmluYXJ5U3RyaW5nLCBlYyk7CiB9CkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBGaWxlUmVhZGVy
OjpyZWFkQXNUZXh0KEJsb2IqIGJsb2IsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcsIEV4Y2VwdGlv
bkNvZGUmIGUKICAgICBpZiAoIWJsb2IpCiAgICAgICAgIHJldHVybjsKIAotICAgIExPRyhGaWxl
QVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyB0ZXh0OiAlcyAlc1xuIiwgYmxvYi0+dXJsKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgYmxvYi0+aXNGaWxlKCkgPyBzdGF0aWNfY2FzdDxGaWxl
Kj4oYmxvYiktPnBhdGgoKS51dGY4KCkuZGF0YSgpIDogIiIpOworICAgIExPRyhGaWxlQVBJLCAi
RmlsZVJlYWRlcjogcmVhZGluZyBhcyB0ZXh0OiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgYmxvYi0+YXNGaWxlKCkgPyBibG9iLT5hc0ZpbGUoKS0+cGF0aCgp
LnV0ZjgoKS5kYXRhKCkgOiAiIik7CiAKICAgICBtX2VuY29kaW5nID0gZW5jb2Rpbmc7CiAgICAg
cmVhZEludGVybmFsKGJsb2IsIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRBc1RleHQsIGVjKTsKQEAg
LTEzMSw3ICsxMzEsNyBAQCB2b2lkIEZpbGVSZWFkZXI6OnJlYWRBc0RhdGFVUkwoQmxvYiogYmxv
YiwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgaWYgKCFibG9iKQogICAgICAgICByZXR1cm47CiAK
LSAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgZGF0YSBVUkw6ICVzICVz
XG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBibG9iLT5pc0ZpbGUoKSA/
IHN0YXRpY19jYXN0PEZpbGUqPihibG9iKS0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkgOiAiIik7Cisg
ICAgTE9HKEZpbGVBUEksICJGaWxlUmVhZGVyOiByZWFkaW5nIGFzIGRhdGEgVVJMOiAlcyAlc1xu
IiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgYmxvYi0+YXNGaWxlKCkgPyBi
bG9iLT5hc0ZpbGUoKS0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkgOiAiIik7CiAKICAgICByZWFkSW50
ZXJuYWwoYmxvYiwgRmlsZVJlYWRlckxvYWRlcjo6UmVhZEFzRGF0YVVSTCwgZWMpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmNwcAppbmRleCBhODEwYWQ4
ZjU0MmQxOWYxNmM1M2NhMTc3ZGQzMGQ1NTYxZjFlMTk2Li4xMjg1MGJjNGEzNDQ4YWIwMjY3YThi
YWJiYjA4NWE5YTg0YjZmMDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dl
YktpdEJsb2JCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJs
b2JCdWlsZGVyLmNwcApAQCAtMTAxLDIxICsxMDEsMTkgQEAgdm9pZCBXZWJLaXRCbG9iQnVpbGRl
cjo6YXBwZW5kKEJsb2IqIGJsb2IpCiB7CiAgICAgaWYgKCFibG9iKQogICAgICAgICByZXR1cm47
Ci0gICAgaWYgKGJsb2ItPmlzRmlsZSgpKSB7CisgICAgaWYgKGJsb2ItPmFzRmlsZSgpKSB7CiAg
ICAgICAgIC8vIElmIHRoZSBibG9iIGlzIGZpbGUgdGhhdCBpcyBub3Qgc25hcHNob3RlZCwgY2Fw
dHVyZSB0aGUgc25hcHNob3Qgbm93LgogICAgICAgICAvLyBGSVhNRTogVGhpcyBpbnZvbHZlcyBz
eW5jaHJvbm91cyBmaWxlIG9wZXJhdGlvbi4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBt
YWtlIGl0IGFzeW5jaHJvbm91cy4KLSAgICAgICAgRmlsZSogZmlsZSA9IHN0YXRpY19jYXN0PEZp
bGUqPihibG9iKTsKLSAgICAgICAgbG9uZyBsb25nIHNuYXBzaG90U2l6ZTsKLSAgICAgICAgZG91
YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKLSAgICAgICAgZmlsZS0+Y2FwdHVyZVNuYXBz
aG90KHNuYXBzaG90U2l6ZSwgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKLQotICAgICAgICBt
X3NpemUgKz0gc25hcHNob3RTaXplOwotICAgICAgICBtX2l0ZW1zLmFwcGVuZChCbG9iRGF0YUl0
ZW0oZmlsZS0+cGF0aCgpLCAwLCBzbmFwc2hvdFNpemUsIHNuYXBzaG90TW9kaWZpY2F0aW9uVGlt
ZSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGxvbmcgbG9uZyBibG9iU2l6ZSA9IHN0YXRpY19j
YXN0PGxvbmcgbG9uZz4oYmxvYi0+c2l6ZSgpKTsKLSAgICAgICAgbV9zaXplICs9IGJsb2JTaXpl
OwotICAgICAgICBtX2l0ZW1zLmFwcGVuZChCbG9iRGF0YUl0ZW0oYmxvYi0+dXJsKCksIDAsIGJs
b2JTaXplKSk7CisgICAgICAgIGJsb2ItPmFzRmlsZSgpLT5tYXliZUNhcHR1cmVTbmFwc2hvdCgp
OwogICAgIH0KKworICAgIGxvbmcgbG9uZyBibG9iU2l6ZSA9IHN0YXRpY19jYXN0PGxvbmcgbG9u
Zz4oYmxvYi0+c2l6ZSgpKTsKKyAgICBtX3NpemUgKz0gYmxvYlNpemU7CisKKyAgICBpZiAoYmxv
Yi0+YXNGaWxlKCkpCisgICAgICAgIG1faXRlbXMuYXBwZW5kKEJsb2JEYXRhSXRlbShibG9iLT5h
c0ZpbGUoKS0+cGF0aCgpLCAwLCBibG9iU2l6ZSwgYmxvYi0+YXNGaWxlKCktPmxhc3RNb2RpZmll
ZFRpbWVJbk1pY3Jvc2Vjb25kcygpKSk7CisgICAgZWxzZQorICAgICAgICBtX2l0ZW1zLmFwcGVu
ZChCbG9iRGF0YUl0ZW0oYmxvYi0+dXJsKCksIDAsIGJsb2JTaXplKSk7CiB9CiAKIFBhc3NSZWZQ
dHI8QmxvYj4gV2ViS2l0QmxvYkJ1aWxkZXI6OmdldEJsb2IoY29uc3QgU3RyaW5nJiBjb250ZW50
VHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFU
cmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHAKaW5kZXggM2EyODBmZTNiNTQw
ZDJlYzhmY2Y3YjljYTkxOThkMjYzMDE4NmY3Ny4uYTViZmI4OGRmYjVjYjI4ZDhhM2RjMjQ0YTUx
ZjE0Nzk3ZDYzMmFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHAKQEAgLTkx
LDE1ICs5MSwxNSBAQCB2b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmRlbGV0ZUl0
ZW0odW5zaWduZWQgbG9uZyBpbmRleCwgRXhjZXB0aW9uQ29kZQogCiAgICAgQVNTRVJUKGl0ZW0t
PmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSk7CiAgICAgUmVmUHRyPEJsb2I+
IGJsb2IgPSBpdGVtLT5nZXRBc0ZpbGUoKTsKLSAgICBpZiAoIWJsb2IgfHwgIWJsb2ItPmlzRmls
ZSgpKQorICAgIGlmICghYmxvYiB8fCAhYmxvYi0+YXNGaWxlKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1faXRlbXMuY2xlYXIoKTsKICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5h
bWVzID0gZGF0YU9iamVjdC0+ZmlsZW5hbWVzKCk7CiAgICAgVmVjdG9yPFN0cmluZz4gY29waWVk
RmlsZW5hbWVzOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGlmIChmaWxlbmFtZXNbaV0gIT0gc3RhdGljX2Nhc3Q8RmlsZSo+KGJs
b2IuZ2V0KCkpLT5wYXRoKCkpCi0gICAgICAgICAgICBjb3BpZWRGaWxlbmFtZXMuYXBwZW5kKHN0
YXRpY19jYXN0PEZpbGUqPihibG9iLmdldCgpKS0+cGF0aCgpKTsKKyAgICAgICAgaWYgKGZpbGVu
YW1lc1tpXSAhPSBibG9iLT5hc0ZpbGUoKS0+cGF0aCgpKQorICAgICAgICAgICAgY29waWVkRmls
ZW5hbWVzLmFwcGVuZChibG9iLT5hc0ZpbGUoKS0+cGF0aCgpKTsKICAgICB9CiAgICAgZGF0YU9i
amVjdC0+c2V0RmlsZW5hbWVzKGNvcGllZEZpbGVuYW1lcyk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCmluZGV4IDk2NjViYmQxYzRkOGY1MjdlYjIw
ZDgzM2Y4MmZkYjlkZTY4NDRhZjYuLjM3ODVkYzM4MzUzZGNiNGE4Y2Y4OThmNjZkOWMyMmQ3MjEx
YTU1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURh
dGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3Bw
CkBAIC0yMDIsOSArMjAyLDkgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kS2V5VmFsdWVQYWlySXRl
bXMoY29uc3QgRm9ybURhdGFMaXN0JiBsaXN0LCBjb25zdCBUZXh0RW5jb2QKICAgICAgICAgICAg
IC8vIElmIHRoZSBjdXJyZW50IHR5cGUgaXMgYmxvYiwgdGhlbiB3ZSBhbHNvIG5lZWQgdG8gaW5j
bHVkZSB0aGUgZmlsZW5hbWUKICAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCkpIHsKICAgICAg
ICAgICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmxvYigp
LT5pc0ZpbGUoKSkgeworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCktPmFzRmlsZSgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBmaWxlIGJsb2IsIHVzZSB0aGUgZmlsZW5h
bWUgKG9yIHJlbGF0aXZlIHBhdGggaWYgaXQgaXMgcHJlc2VudCkgYXMgdGhlIG5hbWUuCi0gICAg
ICAgICAgICAgICAgICAgIEZpbGUqIGZpbGUgPSBzdGF0aWNfY2FzdDxGaWxlKj4odmFsdWUuYmxv
YigpKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZSogZmlsZSA9IHZhbHVlLmJsb2Io
KS0+YXNGaWxlKCk7CiAjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBuYW1lID0gZmlsZS0+d2Via2l0UmVsYXRpdmVQYXRoKCku
aXNFbXB0eSgpID8gZmlsZS0+bmFtZSgpIDogZmlsZS0+d2Via2l0UmVsYXRpdmVQYXRoKCk7CiAj
ZWxzZQpAQCAtMjQ1LDkgKzI0NSw5IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZEtleVZhbHVlUGFp
ckl0ZW1zKGNvbnN0IEZvcm1EYXRhTGlzdCYgbGlzdCwgY29uc3QgVGV4dEVuY29kCiAgICAgICAg
ICAgICAvLyBBcHBlbmQgYm9keQogICAgICAgICAgICAgYXBwZW5kRGF0YShoZWFkZXIuZGF0YSgp
LCBoZWFkZXIuc2l6ZSgpKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAodmFsdWUuYmxvYigpLT5pc0ZpbGUoKSkgeworICAgICAgICAgICAgICAg
IGlmICh2YWx1ZS5ibG9iKCktPmFzRmlsZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIERv
IG5vdCBhZGQgdGhlIGZpbGUgaWYgdGhlIHBhdGggaXMgZW1wdHkuCi0gICAgICAgICAgICAgICAg
ICAgIGlmICghc3RhdGljX2Nhc3Q8RmlsZSo+KHZhbHVlLmJsb2IoKSktPnBhdGgoKS5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUuYmxvYigpLT5hc0ZpbGUoKS0+cGF0
aCgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEZpbGUoc3RhdGlj
X2Nhc3Q8RmlsZSo+KHZhbHVlLmJsb2IoKSktPnBhdGgoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsK
ICAgICAgICAgICAgICAgICB9CiAjaWYgRU5BQkxFKEJMT0IpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcAppbmRleCAxZWE2ZGQ0NWE1MDhjOWU0YmNhODRmODkzMTZlMjRhMWFjMjM2
YzdkLi44M2UyYjliMzEyNDE0ZGEyOWQzMDkyZjhiNjhhODU0NWU4YmFmYTJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTU5Miw4ICs1OTIsOCBAQCB2b2lkIFhNTEh0
dHBSZXF1ZXN0OjpzZW5kKEJsb2IqIGJvZHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAv
LyBGSVhNRTogU2hvdWxkIHdlIHNldCBhIENvbnRlbnQtVHlwZSBpZiBvbmUgaXMgbm90IHNldC4K
ICAgICAgICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0IGZvciB1cGxvYWRpbmcgYnVuZGxlcy4KICAg
ICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keSA9IEZvcm1EYXRhOjpjcmVhdGUoKTsKLSAgICAgICAg
aWYgKGJvZHktPmlzRmlsZSgpKQotICAgICAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBw
ZW5kRmlsZShzdGF0aWNfY2FzdDxGaWxlKj4oYm9keSktPnBhdGgoKSk7CisgICAgICAgIGlmIChi
b2R5LT5hc0ZpbGUoKSkKKyAgICAgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHktPmFwcGVuZEZp
bGUoYm9keS0+YXNGaWxlKCktPnBhdGgoKSk7CiAjaWYgRU5BQkxFKEJMT0IpCiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHktPmFwcGVuZEJsb2IoYm9keS0+dXJs
KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127551</attachid>
            <date>2012-02-17 01:56:00 -0800</date>
            <delta_ts>2012-02-20 03:59:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78879-20120217185559.patch</filename>
            <type>text/plain</type>
            <size>27757</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3ODc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjkxYTNkYmJkMTY5MDcx
MTAwZGJmMTc3N2YxNGUyMmFmNjUyODMyYi4uM2I2NjYzYzNhZjYzMTRmMjgzNjc2YzJjMTIxMzQ1
ZmY1M2VjNGRhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEyLTAyLTE2ICBLaW51
a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAgICAgICBDYXB0dXJlIEZpbGUg
c25hcHNob3QgYXQgaXRzIGNyZWF0aW9uIHRpbWUgZm9yIGZpbGVzIGZyb20gRmlsZVN5c3RlbSBB
UEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODc5
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbmNsdWRlcyBmb2xsb3dpbmcgY2hhbmdlczoKKyAgICAg
ICAgLSBDaGFuZ2VkIHRoZSBGaWxlIGNvbnN0cnVjdG9yIGZvciBmaWxlcyBpbiBGaWxlU3lzdGVt
IEFQSSB0byB0YWtlIGl0cworICAgICAgICAgIG1ldGFkYXRhIChpbmNsdWRpbmcgc2l6ZSBhbmQg
bGFzdE1vZGlmaWVkVGltZSkgc28gdGhhdCBhY2Nlc3NpbmcKKyAgICAgICAgICBCbG9iLnNpemUg
YW5kIEZpbGUubGFzdE1vZGlmaWVkRGF0ZSB3b24ndCB0cmlnZ2VyIHN5bmNocm9ub3VzIGZpbGUK
KyAgICAgICAgICBvcGVyYXRpb25zIGZvciB0aGVtLiAgKFRoaXMgc2hvdWxkIGJlIG9rIGFzIEZp
bGUgb2JqZWN0IGlzCisgICAgICAgICAgY29uc2lkZXJlZCBhcyAnc25hcHNob3QnIG9mIHRoZSBm
aWxlKQorICAgICAgICAtIEFsc28gbWFkZSBvdGhlciBtaW5vciByZWZhY3RvcmluZy9jbGVhbnVw
cy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHM6IGV4aXN0aW5nIHRlc3RzIHNob3VsZCBwYXNzLgorCisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4QmxvYkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToK
KyAgICAgICAgKiBmaWxlYXBpL0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6d2Vi
a2l0U2xpY2UpOgorICAgICAgICAqIGZpbGVhcGkvQmxvYi5oOgorICAgICAgICAoV2ViQ29yZTo6
QmxvYjo6YXNGaWxlKTogQWRkZWQgKG9ic29sZXRpbmcgaXNGaWxlKCkgYm9vbGVhbiBtZXRob2Qp
CisgICAgICAgIChXZWJDb3JlOjpET01GaWxlU3lzdGVtOjpjcmVhdGVGaWxlKToKKyAgICAgICAg
KiBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZp
bGVTeXN0ZW1TeW5jOjpjcmVhdGVGaWxlKToKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQmxvYkRhdGFGb3JGaWxlU3lzdGVtRmlsZSk6IENoYW5n
ZWQgdG8gdGFrZSBzbmFwc2hvdCBtZXRhZGF0YSBpbmZvLgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZTo6c2l6ZSk6IENoYW5nZWQgdG8gdXNlIHNuYXBzaG90IGRhdGEgaWYgYXZhaWxhYmxlLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZTo6bGFzdE1vZGlmaWVkVGltZUluTWljcm9zZWNvbmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbGU6Om1heWJlQ2FwdHVyZVNuYXBzaG90KToKKyAgICAgICAgKiBm
aWxlYXBpL0ZpbGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OmNyZWF0ZUZvckZpbGVTeXN0
ZW1GaWxlKTogQWRkZWQgKHJlbmFtZWQgZnJvbSBjcmVhdGVXaXRoTmFtZSgpKQorICAgICAgICAo
V2ViQ29yZTo6RmlsZTo6YXNGaWxlKTogQWRkZWQgKG9ic29sZXRpbmcgaXNGaWxlKCkgYm9vbGVh
biBtZXRob2QpCisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpsYXN0TW9kaWZpZWREYXRlKTogQ2hh
bmdlZCB0byB1c2Ugc25hcHNob3QgZGF0YSBpZiBhdmFpbGFibGUuCisgICAgICAgICogZmlsZWFw
aS9GaWxlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRBc0Fy
cmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRBc0JpbmFyeVN0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkQXNUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRBc0RhdGFVUkwpOgorICAgICAgICAqIGZpbGVh
cGkvV2ViS2l0QmxvYkJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0QmxvYkJ1
aWxkZXI6OmFwcGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVy
SXRlbUxpc3RDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVt
TGlzdENocm9taXVtOjpkZWxldGVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRLZXlWYWx1ZVBh
aXJJdGVtcyk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKwogMjAxMi0wMi0xNSAgRGFuIEJlcm5zdGVp
biAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxMDc4MzYpOiBmYXN0
L2JveC1zaGFkb3cvc3ByZWFkLmh0bWwgYW5kIGZhc3Qvd3JpdGluZy1tb2RlL2JveC1zaGFkb3ct
Ki5odG1sIHRlc3RzIGZhaWxpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQmxvYkN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JD
dXN0b20uY3BwCmluZGV4IDA0OTQ1NjA0MzhjMzMyMjZkMTA3OWM5YjA4Y2UzZjJlYmFlOGUwMzUu
LmJhMDhkZDkxM2IzYWNhNTQxZTdlYmEwMjY3MDA5MDI0MDllMDFkOTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcApAQCAtNDUsNyArNDUsNyBAQCBKU1Zh
bHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBCbG9iKiBibG9iKQogICAgIGlmICghYmxvYikKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwog
Ci0gICAgaWYgKGJsb2ItPmlzRmlsZSgpKQorICAgIGlmIChibG9iLT5hc0ZpbGUoKSkKICAgICAg
ICAgcmV0dXJuIENSRUFURV9ET01fV1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIEZpbGUsIGJs
b2IpOwogCiAgICAgcmV0dXJuIENSRUFURV9ET01fV1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3Qs
IEJsb2IsIGJsb2IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4QmxvYkN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhCbG9iQ3VzdG9tLmNwcAppbmRleCA2ODUzNTc4ZTkyN2E3ZTkyM2EzMGI0ZDcxNmFjMmVjOGMz
NzRmYzAxLi5lOTNmZDAzY2MxYTYxYjFiMjkwNDlhMGMyNWM1OWQxZjIyZDAxMDFmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhCbG9iQ3VzdG9tLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhCbG9iQ3VzdG9tLmNwcApA
QCAtNDMsNyArNDMsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChCbG9iKiBpbXBsKQog
ICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CiAKLSAgICBpZiAoaW1w
bC0+aXNGaWxlKCkpCisgICAgaWYgKGltcGwtPmFzRmlsZSgpKQogICAgICAgICByZXR1cm4gdG9W
OChzdGF0aWNfY2FzdDxGaWxlKj4oaW1wbCkpOwogCiAgICAgcmV0dXJuIFY4QmxvYjo6d3JhcChp
bXBsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwCmluZGV4IDNiMzNjZDY2ZGU4ZGJhNzkxZDZmZDVj
OTM0NTFkM2MwZGY3ZWVkMmQuLmE2YzM3ZDU4NWZjOTU2N2M1Zjk2MDI1YTk0YmNmNTZmOGE4NGRh
OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcApAQCAtNjcsMTUgKzY3LDEwIEBAIFBhc3NSZWZQ
dHI8QmxvYj4gQmxvYjo6d2Via2l0U2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgZW5k
LCBjb25zdCBTdHJpbmcmCiB7CiAgICAgLy8gV2hlbiB3ZSBzbGljZSBhIGZpbGUgZm9yIHRoZSBm
aXJzdCB0aW1lLCB3ZSBvYnRhaW4gYSBzbmFwc2hvdCBvZiB0aGUgZmlsZSBieSBjYXB0dXJpbmcg
aXRzIGN1cnJlbnQgc2l6ZSBhbmQgbW9kaWZpY2F0aW9uIHRpbWUuCiAgICAgLy8gVGhlIG1vZGlm
aWNhdGlvbiB0aW1lIHdpbGwgYmUgdXNlZCB0byB2ZXJpZnkgaWYgdGhlIGZpbGUgaGFzIGJlZW4g
Y2hhbmdlZCBvciBub3QsIHdoZW4gdGhlIHVuZGVybHlpbmcgZGF0YSBhcmUgYWNjZXNzZWQuCi0g
ICAgbG9uZyBsb25nIHNpemU7Ci0gICAgZG91YmxlIG1vZGlmaWNhdGlvblRpbWU7Ci0gICAgaWYg
KGlzRmlsZSgpKQotICAgICAgICAvLyBGSVhNRTogVGhpcyBpbnZvbHZlcyBzeW5jaHJvbm91cyBm
aWxlIG9wZXJhdGlvbi4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBtYWtlIGl0IGFzeW5j
aHJvbm91cy4KLSAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgRmlsZSo+KHRoaXMpLT5jYXB0dXJl
U25hcHNob3Qoc2l6ZSwgbW9kaWZpY2F0aW9uVGltZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFT
U0VSVChtX3NpemUgIT0gLTEpOwotICAgICAgICBzaXplID0gbV9zaXplOwotICAgIH0KKyAgICAv
LyBGSVhNRTogVGhpcyBtYXkgaW52b2x2ZSBzeW5jaHJvbm91cyBmaWxlIG9wZXJhdGlvbi4gV2Ug
bmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBtYWtlIGl0IGFzeW5jaHJvbm91cy4KKyAgICBpZiAo
YXNGaWxlKCkpCisgICAgICAgIGFzRmlsZSgpLT5tYXliZUNhcHR1cmVTbmFwc2hvdCgpOworICAg
IGNvbnN0IGxvbmcgbG9uZyBzaXplID0gdGhpcy0+c2l6ZSgpOwogCiAgICAgLy8gQ29udmVydCB0
aGUgbmVnYXRpdmUgdmFsdWUgdGhhdCBpcyB1c2VkIHRvIHNlbGVjdCBmcm9tIHRoZSBlbmQuCiAg
ICAgaWYgKHN0YXJ0IDwgMCkKQEAgLTk5LDggKzk0LDggQEAgUGFzc1JlZlB0cjxCbG9iPiBCbG9i
Ojp3ZWJraXRTbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBlbmQsIGNvbnN0IFN0cmlu
ZyYKICAgICBsb25nIGxvbmcgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICAgT3duUHRyPEJsb2JE
YXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsKICAgICBibG9iRGF0YS0+c2V0Q29u
dGVudFR5cGUoY29udGVudFR5cGUpOwotICAgIGlmIChpc0ZpbGUoKSkKLSAgICAgICAgYmxvYkRh
dGEtPmFwcGVuZEZpbGUoc3RhdGljX2Nhc3Q8Y29uc3QgRmlsZSo+KHRoaXMpLT5wYXRoKCksIHN0
YXJ0LCBsZW5ndGgsIG1vZGlmaWNhdGlvblRpbWUpOworICAgIGlmIChhc0ZpbGUoKSkKKyAgICAg
ICAgYmxvYkRhdGEtPmFwcGVuZEZpbGUoYXNGaWxlKCktPnBhdGgoKSwgc3RhcnQsIGxlbmd0aCwg
YXNGaWxlKCktPmxhc3RNb2RpZmllZFRpbWVJbk1pY3Jvc2Vjb25kcygpKTsKICAgICBlbHNlCiAg
ICAgICAgIGJsb2JEYXRhLT5hcHBlbmRCbG9iKG1faW50ZXJuYWxVUkwsIHN0YXJ0LCBsZW5ndGgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaCBiL1NvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCmluZGV4IGJjYTkzOTgyMzZkODZlYjRhOGQ0MzQ4NjEyNzgw
MzJlYzUwMmJkYzYuLjgzODEwNWFlNTk2M2VlMDJkMDI0MzkzODIzY2Q1MjA0MjEzNzA4OWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvQmxvYi5oCkBAIC00MSw2ICs0MSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgRmlsZTsKKwogY2xhc3MgQmxvYiA6IHB1YmxpYyBSZWZDb3VudGVkPEJsb2I+
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUoUGFzc093blB0
cjxCbG9iRGF0YT4gYmxvYkRhdGEsIGxvbmcgbG9uZyBzaXplKQpAQCAtNjAsNyArNjIsNyBAQCBw
dWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihtX3NpemUpOyB9Ci0gICAgdmlydHVhbCBi
b29sIGlzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBjb25zdCBG
aWxlKiBhc0ZpbGUoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICNpZiBFTkFCTEUoQkxPQikKICAg
ICBQYXNzUmVmUHRyPEJsb2I+IHdlYmtpdFNsaWNlKGxvbmcgbG9uZyBzdGFydCA9IDAsIGxvbmcg
bG9uZyBlbmQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz46Om1heCgpLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnRUeXBlID0gU3RyaW5nKCkpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvRE9NRmlsZVN5c3RlbS5jcHAKaW5kZXggOTc5OWUxMjA3OWU4YWVkNDIzNTdhODE2ZmJjNjE1
YmQ5YmJhMGI0NC4uMzk3ZjlhNTMwMjY1YzI1M2U1ZGFjNTY2MTkwMzkwNmQ3M2JjMmY1NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0uY3BwCkBAIC0xMjMsMjEgKzEyMywy
MiBAQCB2b2lkIERPTUZpbGVTeXN0ZW06OmNyZWF0ZVdyaXRlcihjb25zdCBGaWxlRW50cnkqIGZp
bGVFbnRyeSwgUGFzc1JlZlB0cjxGaWxlV3JpdAogCiBuYW1lc3BhY2UgewogCi1jbGFzcyBHZXRQ
YXRoQ2FsbGJhY2sgOiBwdWJsaWMgRmlsZVN5c3RlbUNhbGxiYWNrc0Jhc2UgeworY2xhc3MgR2V0
TWV0YWRhdGFDYWxsYmFjayA6IHB1YmxpYyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8R2V0UGF0aENhbGxiYWNrPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlc3lzdGVtLCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NS
ZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxs
YmFjaz4gZXJyb3JDYWxsYmFjaykKKyAgICBzdGF0aWMgUGFzc093blB0cjxHZXRNZXRhZGF0YUNh
bGxiYWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlc3lzdGVtLCBjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ss
IFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgR2V0UGF0aENhbGxiYWNrKGZpbGVzeXN0ZW0sIG5hbWUsIHN1
Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEdldE1ldGFkYXRhQ2FsbGJhY2soZmlsZXN5c3RlbSwgbmFtZSwgc3VjY2Vzc0NhbGxiYWNr
LCBlcnJvckNhbGxiYWNrKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlYWRNZXRh
ZGF0YShjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQogICAgIHsKICAgICAgICAgQVNTRVJU
KCFtZXRhZGF0YS5wbGF0Zm9ybVBhdGguaXNFbXB0eSgpKTsKLSAgICAgICAgbV9maWxlc3lzdGVt
LT5zY2hlZHVsZUNhbGxiYWNrKG1fc3VjY2Vzc0NhbGxiYWNrLnJlbGVhc2UoKSwgRmlsZTo6Y3Jl
YXRlV2l0aE5hbWUobWV0YWRhdGEucGxhdGZvcm1QYXRoLCBtX25hbWUpKTsKKyAgICAgICAgQVNT
RVJUKG1ldGFkYXRhLnR5cGUgPT0gRmlsZU1ldGFkYXRhOjpUeXBlRmlsZSk7CisgICAgICAgIG1f
ZmlsZXN5c3RlbS0+c2NoZWR1bGVDYWxsYmFjayhtX3N1Y2Nlc3NDYWxsYmFjay5yZWxlYXNlKCks
IEZpbGU6OmNyZWF0ZUZvckZpbGVTeXN0ZW1GaWxlKG1fbmFtZSwgbWV0YWRhdGEpKTsKICAgICB9
CiAKIHByaXZhdGU6Ci0gICAgR2V0UGF0aENhbGxiYWNrKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3Rl
bT4gZmlsZXN5c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCAgUGFzc1JlZlB0cjxGaWxlQ2FsbGJh
Y2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxi
YWNrKQorICAgIEdldE1ldGFkYXRhQ2FsbGJhY2soUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBm
aWxlc3lzdGVtLCBjb25zdCBTdHJpbmcmIG5hbWUsICBQYXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4g
c3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sp
CiAgICAgICAgIDogRmlsZVN5c3RlbUNhbGxiYWNrc0Jhc2UoZXJyb3JDYWxsYmFjaykKICAgICAg
ICAgLCBtX2ZpbGVzeXN0ZW0oZmlsZXN5c3RlbSkKICAgICAgICAgLCBtX25hbWUobmFtZSkKQEAg
LTE1NCw3ICsxNTUsNyBAQCBwcml2YXRlOgogCiB2b2lkIERPTUZpbGVTeXN0ZW06OmNyZWF0ZUZp
bGUoY29uc3QgRmlsZUVudHJ5KiBmaWxlRW50cnksIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBz
dWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykK
IHsKLSAgICBtX2FzeW5jRmlsZVN5c3RlbS0+cmVhZE1ldGFkYXRhKGZpbGVFbnRyeS0+ZnVsbFBh
dGgoKSwgR2V0UGF0aENhbGxiYWNrOjpjcmVhdGUodGhpcywgZmlsZUVudHJ5LT5uYW1lKCksIHN1
Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOworICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5y
ZWFkTWV0YWRhdGEoZmlsZUVudHJ5LT5mdWxsUGF0aCgpLCBHZXRNZXRhZGF0YUNhbGxiYWNrOjpj
cmVhdGUodGhpcywgZmlsZUVudHJ5LT5uYW1lKCksIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxs
YmFjaykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuY3BwCmluZGV4IGU3YThjYTcwYmY1NzdjZTRkNDdlODNi
Y2RmZjBhMmQ5Nzc3NjI2ZDUuLjRjODAwYzk2ZjRhYWFhMDBkYmU0Y2JkZmY3YTdmMjkwY2M2Mjc3
ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuY3BwCkBA
IC03MiwzNSArNzIsMzUgQEAgUGFzc1JlZlB0cjxEaXJlY3RvcnlFbnRyeVN5bmM+IERPTUZpbGVT
eXN0ZW1TeW5jOjpyb290KCkKIAogbmFtZXNwYWNlIHsKIAotY2xhc3MgR2V0UGF0aEhlbHBlciA6
IHB1YmxpYyBBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3MgeworY2xhc3MgR2V0TWV0YWRhdGFIZWxw
ZXIgOiBwdWJsaWMgQXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzIHsKIHB1YmxpYzoKLSAgICBjbGFz
cyBHZXRQYXRoUmVzdWx0IDogcHVibGljIFJlZkNvdW50ZWQ8R2V0UGF0aFJlc3VsdD4geworICAg
IGNsYXNzIEdldE1ldGFkYXRhUmVzdWx0IDogcHVibGljIFJlZkNvdW50ZWQ8R2V0TWV0YWRhdGFS
ZXN1bHQ+IHsKICAgICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8R2V0UGF0
aFJlc3VsdD4gY3JlYXRlKCkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8R2V0TWV0YWRhdGFS
ZXN1bHQ+IGNyZWF0ZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgR2V0UGF0aFJlc3VsdCgpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2V0
TWV0YWRhdGFSZXN1bHQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIG1fZmFpbGVkOwog
ICAgICAgICBpbnQgbV9jb2RlOwotICAgICAgICBTdHJpbmcgbV9wYXRoOworICAgICAgICBGaWxl
TWV0YWRhdGEgbV9tZXRhZGF0YTsKIAogICAgICAgcHJpdmF0ZToKLSAgICAgICAgR2V0UGF0aFJl
c3VsdCgpCisgICAgICAgIEdldE1ldGFkYXRhUmVzdWx0KCkKICAgICAgICAgICAgIDogbV9mYWls
ZWQoZmFsc2UpCiAgICAgICAgICAgICAsIG1fY29kZSgwKQogICAgICAgICB7CiAgICAgICAgIH0K
IAotICAgICAgICB+R2V0UGF0aFJlc3VsdCgpCisgICAgICAgIH5HZXRNZXRhZGF0YVJlc3VsdCgp
CiAgICAgICAgIHsKICAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgV1RGOjpSZWZDb3Vu
dGVkPEdldFBhdGhSZXN1bHQ+OworICAgICAgICBmcmllbmQgY2xhc3MgV1RGOjpSZWZDb3VudGVk
PEdldE1ldGFkYXRhUmVzdWx0PjsKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NPd25QdHI8R2V0
UGF0aEhlbHBlcj4gY3JlYXRlKFBhc3NSZWZQdHI8R2V0UGF0aFJlc3VsdD4gcmVzdWx0KQorICAg
IHN0YXRpYyBQYXNzT3duUHRyPEdldE1ldGFkYXRhSGVscGVyPiBjcmVhdGUoUGFzc1JlZlB0cjxH
ZXRNZXRhZGF0YVJlc3VsdD4gcmVzdWx0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBHZXRQYXRoSGVscGVyKHJlc3VsdCkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IEdldE1ldGFkYXRhSGVscGVyKHJlc3VsdCkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBk
aWRTdWNjZWVkKCkKQEAgLTEzNCwyMSArMTM0LDIxIEBAIHB1YmxpYzoKICAgICAgICAgbV9yZXN1
bHQtPm1fY29kZSA9IGNvZGU7CiAgICAgfQogCi0gICAgdmlydHVhbCB+R2V0UGF0aEhlbHBlcigp
CisgICAgdmlydHVhbCB+R2V0TWV0YWRhdGFIZWxwZXIoKQogICAgIHsKICAgICB9CiAKICAgICB2
b2lkIGRpZFJlYWRNZXRhZGF0YShjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQogICAgIHsK
LSAgICAgICAgbV9yZXN1bHQtPm1fcGF0aCA9IG1ldGFkYXRhLnBsYXRmb3JtUGF0aDsKKyAgICAg
ICAgbV9yZXN1bHQtPm1fbWV0YWRhdGEgPSBtZXRhZGF0YTsKICAgICB9CiBwcml2YXRlOgotICAg
IEdldFBhdGhIZWxwZXIoUGFzc1JlZlB0cjxHZXRQYXRoUmVzdWx0PiByZXN1bHQpCisgICAgR2V0
TWV0YWRhdGFIZWxwZXIoUGFzc1JlZlB0cjxHZXRNZXRhZGF0YVJlc3VsdD4gcmVzdWx0KQogICAg
ICAgICA6IG1fcmVzdWx0KHJlc3VsdCkKICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPEdldFBh
dGhSZXN1bHQ+IG1fcmVzdWx0OworICAgIFJlZlB0cjxHZXRNZXRhZGF0YVJlc3VsdD4gbV9yZXN1
bHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZQpAQCAtMTU2LDggKzE1Niw4IEBAIHByaXZhdGU6CiBQ
YXNzUmVmUHRyPEZpbGU+IERPTUZpbGVTeXN0ZW1TeW5jOjpjcmVhdGVGaWxlKGNvbnN0IEZpbGVF
bnRyeVN5bmMqIGZpbGVFbnRyeSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwot
ICAgIFJlZlB0cjxHZXRQYXRoSGVscGVyOjpHZXRQYXRoUmVzdWx0PiByZXN1bHQoR2V0UGF0aEhl
bHBlcjo6R2V0UGF0aFJlc3VsdDo6Y3JlYXRlKCkpOwotICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5y
ZWFkTWV0YWRhdGEoZmlsZUVudHJ5LT5mdWxsUGF0aCgpLCBHZXRQYXRoSGVscGVyOjpjcmVhdGUo
cmVzdWx0KSk7CisgICAgUmVmUHRyPEdldE1ldGFkYXRhSGVscGVyOjpHZXRNZXRhZGF0YVJlc3Vs
dD4gcmVzdWx0KEdldE1ldGFkYXRhSGVscGVyOjpHZXRNZXRhZGF0YVJlc3VsdDo6Y3JlYXRlKCkp
OworICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5yZWFkTWV0YWRhdGEoZmlsZUVudHJ5LT5mdWxsUGF0
aCgpLCBHZXRNZXRhZGF0YUhlbHBlcjo6Y3JlYXRlKHJlc3VsdCkpOwogICAgIGlmICghbV9hc3lu
Y0ZpbGVTeXN0ZW0tPndhaXRGb3JPcGVyYXRpb25Ub0NvbXBsZXRlKCkpIHsKICAgICAgICAgZWMg
PSBGaWxlRXhjZXB0aW9uOjpBQk9SVF9FUlI7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTY2LDgg
KzE2Niw4IEBAIFBhc3NSZWZQdHI8RmlsZT4gRE9NRmlsZVN5c3RlbVN5bmM6OmNyZWF0ZUZpbGUo
Y29uc3QgRmlsZUVudHJ5U3luYyogZmlsZUVudHJ5LCBFCiAgICAgICAgIGVjID0gcmVzdWx0LT5t
X2NvZGU7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBBU1NFUlQoIXJlc3VsdC0+bV9w
YXRoLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEZpbGU6OmNyZWF0ZVdpdGhOYW1lKHJlc3VsdC0+
bV9wYXRoLCBmaWxlRW50cnktPm5hbWUoKSk7CisgICAgQVNTRVJUKCFyZXN1bHQtPm1fbWV0YWRh
dGEucGxhdGZvcm1QYXRoLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIEZpbGU6OmNyZWF0ZUZvckZp
bGVTeXN0ZW1GaWxlKGZpbGVFbnRyeS0+bmFtZSgpLCByZXN1bHQtPm1fbWV0YWRhdGEpOwogfQog
CiBuYW1lc3BhY2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAKaW5kZXggZDQwOWI5NzE5MzM1OTUx
OWUzMDBhMDMyOTQ5NzA0ZmFlZjVmM2U4Mi4uOGU2NmE2OGFmZDRiYTMyOWE4ZjM5YmRlODA2Njgy
NjVhMWI3YmIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuY3BwCkBAIC01MSwxMyArNTEsMTMgQEAg
c3RhdGljIFBhc3NPd25QdHI8QmxvYkRhdGE+IGNyZWF0ZUJsb2JEYXRhRm9yRmlsZShjb25zdCBT
dHJpbmcmIHBhdGgpCiB9CiAKICNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi1zdGF0aWMgUGFzc093
blB0cjxCbG9iRGF0YT4gY3JlYXRlQmxvYkRhdGFGb3JGaWxlU3lzdGVtRmlsZShjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsZVN5c3RlbU5hbWUpCitzdGF0aWMgUGFzc093blB0
cjxCbG9iRGF0YT4gY3JlYXRlQmxvYkRhdGFGb3JGaWxlU3lzdGVtRmlsZShjb25zdCBTdHJpbmcm
IGZpbGVTeXN0ZW1OYW1lLCBjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQogewogICAgIFN0
cmluZyB0eXBlOwogICAgIGludCBpbmRleCA9IGZpbGVTeXN0ZW1OYW1lLnJldmVyc2VGaW5kKCcu
Jyk7CiAgICAgaWYgKGluZGV4ICE9IC0xKQogICAgICAgICB0eXBlID0gTUlNRVR5cGVSZWdpc3Ry
eTo6Z2V0V2VsbEtub3duTUlNRVR5cGVGb3JFeHRlbnNpb24oZmlsZVN5c3RlbU5hbWUuc3Vic3Ry
aW5nKGluZGV4ICsgMSkpOwotICAgIHJldHVybiBjcmVhdGVCbG9iRGF0YUZvckZpbGVXaXRoVHlw
ZShwYXRoLCB0eXBlKTsKKyAgICByZXR1cm4gY3JlYXRlQmxvYkRhdGFGb3JGaWxlV2l0aFR5cGUo
bWV0YWRhdGEucGxhdGZvcm1QYXRoLCB0eXBlKTsKIH0KICNlbmRpZgogCkBAIC03NCwxMiArNzQs
MTQgQEAgRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgOiBCbG9iKGNyZWF0ZUJs
b2JEYXRhRm9yRmlsZShwYXRoKSwgLTEpCiAgICAgLCBtX3BhdGgocGF0aCkKICAgICAsIG1fbmFt
ZShwYXRoR2V0RmlsZU5hbWUocGF0aCkpCisgICAgLCBtX3NuYXBzaG90VGFrZW4oZmFsc2UpCiB7
CiB9CiAKIEZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgdHlwZSkKICAgICA6IEJsb2IodXJsLCB0eXBlLCAtMSkKICAgICAsIG1fcGF0
aChwYXRoKQorICAgICwgbV9zbmFwc2hvdFRha2VuKGZhbHNlKQogewogICAgIG1fbmFtZSA9IHBh
dGhHZXRGaWxlTmFtZShwYXRoKTsKICAgICAvLyBGSVhNRTogRmlsZSBvYmplY3Qgc2VyaWFsaXph
dGlvbi9kZXNlcmlhbGl6YXRpb24gZG9lcyBub3QgaW5jbHVkZQpAQCAtODgsMjYgKzkwLDIzIEBA
IEZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgdHlwZSkKIH0KIAogI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKLUZpbGU6OkZpbGUoY29u
c3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgOiBCbG9iKGNyZWF0ZUJs
b2JEYXRhRm9yRmlsZVN5c3RlbUZpbGUocGF0aCwgbmFtZSksIC0xKQotICAgICwgbV9wYXRoKHBh
dGgpCitGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmlsZU1ldGFkYXRhJiBt
ZXRhZGF0YSkKKyAgICA6IEJsb2IoY3JlYXRlQmxvYkRhdGFGb3JGaWxlU3lzdGVtRmlsZShuYW1l
LCBtZXRhZGF0YSksIC0xKQorICAgICwgbV9wYXRoKG1ldGFkYXRhLnBsYXRmb3JtUGF0aCkKICAg
ICAsIG1fbmFtZShuYW1lKQorICAgICwgbV9zbmFwc2hvdFRha2VuKHRydWUpCisgICAgLCBtX3Nu
YXBzaG90TW9kaWZpY2F0aW9uVGltZShtZXRhZGF0YS5tb2RpZmljYXRpb25UaW1lKQorICAgICwg
bV9zbmFwc2hvdFNpemUobWV0YWRhdGEubGVuZ3RoKQogewogfQogI2VuZGlmCiAKLWRvdWJsZSBG
aWxlOjpsYXN0TW9kaWZpZWREYXRlKCkgY29uc3QKLXsKLSAgICB0aW1lX3QgbW9kaWZpY2F0aW9u
VGltZTsKLSAgICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25UaW1lKG1fcGF0aCwgbW9kaWZpY2F0
aW9uVGltZSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gTmVlZHMgdG8gcmV0dXJuIGVw
b2NoIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGZvciBEYXRlLgotICAgIHJldHVybiBtb2RpZmljYXRp
b25UaW1lICogMTAwMC4wOwotfQotCiB1bnNpZ25lZCBsb25nIGxvbmcgRmlsZTo6c2l6ZSgpIGNv
bnN0CiB7CisgICAgaWYgKG1fc25hcHNob3RUYWtlbikKKyAgICAgICAgcmV0dXJuIG1fc25hcHNo
b3RTaXplOworCisgICAgLy8gRm9yIG5vbi1zbGljZWQvbm9uLXNuYXBzaG90IGZpbGVzIGNoYW5n
aW5nIHRoaXMgbWF5IGJyZWFrIHRoZSBleGlzdGluZyBjb2RlIGJlaGF2aW9yLCBzbyBmb3Igbm93
IHdlIG1ha2Ugc3luY2hyb25vdXMgY2FsbCB0byBnZXQgdGhlIGZyZXNoIGluZm9ybWF0aW9uLgog
ICAgIC8vIEZJWE1FOiBKYXZhU2NyaXB0IGNhbm5vdCByZXByZXNlbnQgc2l6ZXMgYXMgbGFyZ2Ug
YXMgdW5zaWduZWQgbG9uZyBsb25nLCB3ZSBuZWVkIHRvCiAgICAgLy8gY29tZSB1cCB3aXRoIGFu
IGV4Y2VwdGlvbiB0byB0aHJvdyBpZiBmaWxlIHNpemUgaXMgbm90IHJlcHJlc2VudGFibGUuCiAg
ICAgbG9uZyBsb25nIHNpemU7CkBAIC0xMTYsMTcgKzExNSwzNyBAQCB1bnNpZ25lZCBsb25nIGxv
bmcgRmlsZTo6c2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmcgbG9uZz4oc2l6ZSk7CiB9CiAKLXZvaWQgRmlsZTo6Y2FwdHVyZVNuYXBzaG90KGxvbmcgbG9u
ZyYgc25hcHNob3RTaXplLCBkb3VibGUmIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkgY29uc3QK
K2RvdWJsZSBGaWxlOjpsYXN0TW9kaWZpZWRUaW1lSW5NaWNyb3NlY29uZHMoKSBjb25zdAorewor
ICAgIGlmIChtX3NuYXBzaG90VGFrZW4pCisgICAgICAgIHJldHVybiBtX3NuYXBzaG90TW9kaWZp
Y2F0aW9uVGltZTsKKworICAgIC8vIEZvciBub24tc2xpY2VkL25vbi1zbmFwc2hvdCBmaWxlcyBj
aGFuZ2luZyB0aGlzIG1heSBicmVhayB0aGUgZXhpc3RpbmcgY29kZSBiZWhhdmlvciwgc28gZm9y
IG5vdyB3ZSBtYWtlIHN5bmNocm9ub3VzIGNhbGwgdG8gZ2V0IHRoZSBmcmVzaCBpbmZvcm1hdGlv
bi4KKyAgICB0aW1lX3QgbW9kaWZpY2F0aW9uVGltZTsKKyAgICBpZiAoIWdldEZpbGVNb2RpZmlj
YXRpb25UaW1lKG1fcGF0aCwgbW9kaWZpY2F0aW9uVGltZSkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBtb2RpZmljYXRpb25UaW1lOworfQorCit2b2lkIEZpbGU6Om1heWJlQ2FwdHVy
ZVNuYXBzaG90KCkgY29uc3QKIHsKICAgICAvLyBPYnRhaW5zIGEgc25hcHNob3Qgb2YgdGhlIGZp
bGUgYnkgY2FwdHVyaW5nIGl0cyBjdXJyZW50IHNpemUgYW5kIG1vZGlmaWNhdGlvbiB0aW1lLiBU
aGlzIGlzIHVzZWQgd2hlbiB3ZSBzbGljZSBhIGZpbGUgZm9yIHRoZSBmaXJzdCB0aW1lLgogICAg
IC8vIElmIHdlIGZhaWwgdG8gcmV0cmlldmUgdGhlIHNpemUgb3IgbW9kaWZpY2F0aW9uIHRpbWUs
IHByb2JhYmx5IGR1ZSB0byB0aGF0IHRoZSBmaWxlIGhhcyBiZWVuIGRlbGV0ZWQsIDAgc2l6ZSBp
cyByZXR1cm5lZC4KICAgICAvLyBGSVhNRTogQ29tYmluZSBnZXRGaWxlU2l6ZSBhbmQgZ2V0Rmls
ZU1vZGlmaWNhdGlvblRpbWUgaW50byBvbmUgZmlsZSBzeXN0ZW0gY2FsbC4KKyAgICBpZiAobV9z
bmFwc2hvdFRha2VuKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NuYXBzaG90VGFrZW4gPSB0
cnVlOworCisgICAgbG9uZyBsb25nIHNuYXBzaG90U2l6ZTsKICAgICB0aW1lX3QgbW9kaWZpY2F0
aW9uVGltZTsKICAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0aCwgc25hcHNob3RTaXplKSB8fCAh
Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUobV9wYXRoLCBtb2RpZmljYXRpb25UaW1lKSkgewotICAg
ICAgICBzbmFwc2hvdFNpemUgPSAwOwotICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUg
PSAwOwotICAgIH0gZWxzZQotICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSBtb2Rp
ZmljYXRpb25UaW1lOworICAgICAgICBtX3NuYXBzaG90U2l6ZSA9IDA7CisgICAgICAgIG1fc25h
cHNob3RNb2RpZmljYXRpb25UaW1lID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBt
X3NuYXBzaG90U2l6ZSA9IHNuYXBzaG90U2l6ZTsKKyAgICBtX3NuYXBzaG90TW9kaWZpY2F0aW9u
VGltZSA9IG1vZGlmaWNhdGlvblRpbWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5oIGIvU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlLmgKaW5kZXggMTNhOTFmZTNlNDFmOTVmYjliMjNhY2Q2YjBlZWJkYzE1NDQz
ZDRlMy4uNmI5ZjMxZWVlYTQyNzFkODY5NTY2MTA0NmI3OGVlNjZmZjM4NTg4MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9GaWxlLmgKQEAgLTI3LDEyICsyNywxNCBAQAogI2RlZmluZSBGaWxlX2gKIAogI2luY2x1
ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGaWxlTWV0YWRhdGE7
CiBjbGFzcyBLVVJMOwogCiBjbGFzcyBGaWxlIDogcHVibGljIEJsb2IgewpAQCAtNTMsMjYgKzU1
LDMzIEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotICAgIC8v
IENyZWF0ZSBhIGZpbGUgd2l0aCBhIG5hbWUgZXhwb3NlZCB0byB0aGUgYXV0aG9yICh2aWEgRmls
ZS5uYW1lIGFuZCBhc3NvY2lhdGVkIERPTSBwcm9wZXJ0aWVzKSB0aGF0IGRpZmZlcnMgZnJvbSB0
aGUgb25lIHByb3ZpZGVkIGluIHRoZSBwYXRoLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGU+
IGNyZWF0ZVdpdGhOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBuYW1lKQor
ICAgIC8vIENyZWF0ZSBhIGZpbGUgZm9yIEZpbGVTeXN0ZW0gQVBJIHdpdGggYSBzbmFwc2hvdCBt
ZXRhZGF0YSBhbmQgYSBuYW1lIGV4cG9zZWQgdG8gdGhlIGF1dGhvciAodmlhIEZpbGUubmFtZSBh
bmQgYXNzb2NpYXRlZCBET00gcHJvcGVydGllcykgdGhhdCBtYXkgZGlmZmVyIGZyb20gdGhlIG9u
ZSBwcm92aWRlZCBpbiB0aGUgcGF0aC4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlPiBjcmVh
dGVGb3JGaWxlU3lzdGVtRmlsZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZpbGVNZXRhZGF0
YSYgbWV0YWRhdGEpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUocGF0
aCwgbmFtZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUobmFtZSwgbWV0YWRh
dGEpKTsKICAgICB9CiAjZW5kaWYKIAorICAgIC8vIFRoaXMgbWF5IGludm9sdmUgc3luY2hyb25v
dXMgZmlsZSBvcGVyYXRpb24gaWYgdGhlIGZpbGUgZG9lcyBub3QgaGF2ZSBhIHNuYXBzaG90IGlu
Zm8uCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFs
IGNvbnN0IEZpbGUqIGFzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KIAogICAgIGNvbnN0
IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogICAgIGNvbnN0IFN0cmlu
ZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIGRvdWJsZSBsYXN0TW9kaWZp
ZWREYXRlKCkgY29uc3Q7CisgICAgZG91YmxlIGxhc3RNb2RpZmllZERhdGUoKSBjb25zdCB7IHJl
dHVybiBsYXN0TW9kaWZpZWRUaW1lSW5NaWNyb3NlY29uZHMoKSAqIDEwMDAuMDsgfQorCisgICAg
Ly8gVGhpcyBtYXkgaW52b2x2ZSBzeW5jaHJvbm91cyBmaWxlIG9wZXJhdGlvbiBpZiB0aGUgZmls
ZSBkb2VzIG5vdCBoYXZlIGEgc25hcHNob3QgaW5mby4KKyAgICBkb3VibGUgbGFzdE1vZGlmaWVk
VGltZUluTWljcm9zZWNvbmRzKCkgY29uc3Q7CisKICNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9B
RCkKICAgICAvLyBSZXR1cm5zIHRoZSByZWxhdGl2ZSBwYXRoIG9mIHRoaXMgZmlsZSBpbiB0aGUg
Y29udGV4dCBvZiBhIGRpcmVjdG9yeSBzZWxlY3Rpb24uCiAgICAgY29uc3QgU3RyaW5nJiB3ZWJr
aXRSZWxhdGl2ZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3JlbGF0aXZlUGF0aDsgfQogI2VuZGlm
CiAKLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBpbnZvbHZlcyBzeW5jaHJvbm91cyBmaWxlIG9wZXJh
dGlvbi4gVGhpbmsgdHdpY2UgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAgICB2b2lk
IGNhcHR1cmVTbmFwc2hvdChsb25nIGxvbmcmIHNuYXBzaG90U2l6ZSwgZG91YmxlJiBzbmFwc2hv
dE1vZGlmaWNhdGlvblRpbWUpIGNvbnN0OworICAgIC8vIENhcHR1cmVzIHRoZSBjdXJyZW50IGZp
bGUgc2l6ZSBhbmQgbGFzdE1vZGlmaWNhdGlvblRpbWUgaWYgaXQgaXMgbm90IHRha2VuIChvciBu
b3QgZ2l2ZW4gYXQgdGhlIGNyZWF0aW9uIHRpbWUpLgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIG1h
eSBpbnZvbHZlIHN5bmNocm9ub3VzIGZpbGUgb3BlcmF0aW9uIGlmIGEgc25hcHNob3QgZm9yIHRo
aXMgZmlsZSBvYmplY3QgaGFzIG5vdCBiZWVuIHRha2VuLiBUaGluayB0d2ljZSBiZWZvcmUgY2Fs
bGluZyB0aGlzIGZ1bmN0aW9uLgorICAgIHZvaWQgbWF5YmVDYXB0dXJlU25hcHNob3QoKSBjb25z
dDsKIAogICAgIC8vIEZJWE1FOiBvYnNvbGV0ZSBhdHRyaWJ1dGVzLiBUbyBiZSByZW1vdmVkLgog
ICAgIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lKCk7IH0KQEAg
LTg1LDcgKzk0LDcgQEAgcHJpdmF0ZToKICAgICBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgS1VSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5cGUpOwogCiAjaWYgRU5BQkxFKEZJTEVf
U1lTVEVNKQotICAgIEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIG5hbWUp
OworICAgIEZpbGUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGaWxlTWV0YWRhdGEmKTsKICNl
bmRpZgogCiAgICAgU3RyaW5nIG1fcGF0aDsKQEAgLTkzLDYgKzEwMiwxMSBAQCBwcml2YXRlOgog
I2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQogICAgIFN0cmluZyBtX3JlbGF0aXZlUGF0aDsK
ICNlbmRpZgorCisgICAgLy8gS2VlcHMgYXJvdW5kIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiBm
b3IgYSBzbmFwc2hvdCBmaWxlL3NsaWNlLgorICAgIG11dGFibGUgYm9vbCBtX3NuYXBzaG90VGFr
ZW47CisgICAgbXV0YWJsZSBkb3VibGUgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7CisgICAg
bXV0YWJsZSBsb25nIGxvbmcgbV9zbmFwc2hvdFNpemU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAppbmRleCAwN2M0YjY3NDYx
MTExNjFlZmYyOTk1OWFiMWQyZmJkYzFjMDEzMTJmLi40ZGJjZTdkZmI3ZDcyYjJkMmQ2OGNlNzEz
YjRhYWYzYzNkZDZmMDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVS
ZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKQEAg
LTk1LDcgKzk1LDcgQEAgdm9pZCBGaWxlUmVhZGVyOjpyZWFkQXNBcnJheUJ1ZmZlcihCbG9iKiBi
bG9iLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBpZiAoIWJsb2IpCiAgICAgICAgIHJldHVybjsK
IAotICAgIExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyBhcnJheSBidWZmZXI6
ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBibG9iLT5pc0Zp
bGUoKSA/IHN0YXRpY19jYXN0PEZpbGUqPihibG9iKS0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkgOiAi
Iik7CisgICAgTE9HKEZpbGVBUEksICJGaWxlUmVhZGVyOiByZWFkaW5nIGFzIGFycmF5IGJ1ZmZl
cjogJXMgJXNcbiIsIGJsb2ItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGJsb2ItPmFz
RmlsZSgpID8gYmxvYi0+YXNGaWxlKCktPnBhdGgoKS51dGY4KCkuZGF0YSgpIDogIiIpOwogCiAg
ICAgcmVhZEludGVybmFsKGJsb2IsIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRBc0FycmF5QnVmZmVy
LCBlYyk7CiB9CkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBGaWxlUmVhZGVyOjpyZWFkQXNCaW5h
cnlTdHJpbmcoQmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgaWYgKCFibG9iKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcg
YXMgYmluYXJ5OiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
YmxvYi0+aXNGaWxlKCkgPyBzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYiktPnBhdGgoKS51dGY4KCku
ZGF0YSgpIDogIiIpOworICAgIExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyBi
aW5hcnk6ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBibG9i
LT5hc0ZpbGUoKSA/IGJsb2ItPmFzRmlsZSgpLT5wYXRoKCkudXRmOCgpLmRhdGEoKSA6ICIiKTsK
IAogICAgIHJlYWRJbnRlcm5hbChibG9iLCBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkQXNCaW5hcnlT
dHJpbmcsIGVjKTsKIH0KQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEZpbGVSZWFkZXI6OnJlYWRB
c1RleHQoQmxvYiogYmxvYiwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgRXhjZXB0aW9uQ29kZSYg
ZQogICAgIGlmICghYmxvYikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9HKEZpbGVBUEksICJG
aWxlUmVhZGVyOiByZWFkaW5nIGFzIHRleHQ6ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpLCBibG9iLT5pc0ZpbGUoKSA/IHN0YXRpY19jYXN0PEZpbGUqPihibG9i
KS0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkgOiAiIik7CisgICAgTE9HKEZpbGVBUEksICJGaWxlUmVh
ZGVyOiByZWFkaW5nIGFzIHRleHQ6ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCBibG9iLT5hc0ZpbGUoKSA/IGJsb2ItPmFzRmlsZSgpLT5wYXRoKCkudXRmOCgp
LmRhdGEoKSA6ICIiKTsKIAogICAgIG1fZW5jb2RpbmcgPSBlbmNvZGluZzsKICAgICByZWFkSW50
ZXJuYWwoYmxvYiwgRmlsZVJlYWRlckxvYWRlcjo6UmVhZEFzVGV4dCwgZWMpOwpAQCAtMTMxLDcg
KzEzMSw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6cmVhZEFzRGF0YVVSTChCbG9iKiBibG9iLCBFeGNl
cHRpb25Db2RlJiBlYykKICAgICBpZiAoIWJsb2IpCiAgICAgICAgIHJldHVybjsKIAotICAgIExP
RyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyBkYXRhIFVSTDogJXMgJXNcbiIsIGJs
b2ItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGJsb2ItPmlzRmlsZSgpID8gc3RhdGlj
X2Nhc3Q8RmlsZSo+KGJsb2IpLT5wYXRoKCkudXRmOCgpLmRhdGEoKSA6ICIiKTsKKyAgICBMT0co
RmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgZGF0YSBVUkw6ICVzICVzXG4iLCBibG9i
LT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBibG9iLT5hc0ZpbGUoKSA/IGJsb2ItPmFz
RmlsZSgpLT5wYXRoKCkudXRmOCgpLmRhdGEoKSA6ICIiKTsKIAogICAgIHJlYWRJbnRlcm5hbChi
bG9iLCBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkQXNEYXRhVVJMLCBlYyk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuY3BwCmluZGV4IGE4MTBhZDhmNTQyZDE5
ZjE2YzUzY2ExNzdkZDMwZDU1NjFmMWUxOTYuLjEyODUwYmM0YTM0NDhhYjAyNjdhOGJhYmJiMDg1
YTlhODRiNmYwM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0Qmxv
YkJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxk
ZXIuY3BwCkBAIC0xMDEsMjEgKzEwMSwxOSBAQCB2b2lkIFdlYktpdEJsb2JCdWlsZGVyOjphcHBl
bmQoQmxvYiogYmxvYikKIHsKICAgICBpZiAoIWJsb2IpCiAgICAgICAgIHJldHVybjsKLSAgICBp
ZiAoYmxvYi0+aXNGaWxlKCkpIHsKKyAgICBpZiAoYmxvYi0+YXNGaWxlKCkpIHsKICAgICAgICAg
Ly8gSWYgdGhlIGJsb2IgaXMgZmlsZSB0aGF0IGlzIG5vdCBzbmFwc2hvdGVkLCBjYXB0dXJlIHRo
ZSBzbmFwc2hvdCBub3cuCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGludm9sdmVzIHN5bmNocm9u
b3VzIGZpbGUgb3BlcmF0aW9uLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIG1ha2UgaXQg
YXN5bmNocm9ub3VzLgotICAgICAgICBGaWxlKiBmaWxlID0gc3RhdGljX2Nhc3Q8RmlsZSo+KGJs
b2IpOwotICAgICAgICBsb25nIGxvbmcgc25hcHNob3RTaXplOwotICAgICAgICBkb3VibGUgc25h
cHNob3RNb2RpZmljYXRpb25UaW1lOwotICAgICAgICBmaWxlLT5jYXB0dXJlU25hcHNob3Qoc25h
cHNob3RTaXplLCBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpOwotCi0gICAgICAgIG1fc2l6ZSAr
PSBzbmFwc2hvdFNpemU7Ci0gICAgICAgIG1faXRlbXMuYXBwZW5kKEJsb2JEYXRhSXRlbShmaWxl
LT5wYXRoKCksIDAsIHNuYXBzaG90U2l6ZSwgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgbG9uZyBsb25nIGJsb2JTaXplID0gc3RhdGljX2Nhc3Q8bG9u
ZyBsb25nPihibG9iLT5zaXplKCkpOwotICAgICAgICBtX3NpemUgKz0gYmxvYlNpemU7Ci0gICAg
ICAgIG1faXRlbXMuYXBwZW5kKEJsb2JEYXRhSXRlbShibG9iLT51cmwoKSwgMCwgYmxvYlNpemUp
KTsKKyAgICAgICAgYmxvYi0+YXNGaWxlKCktPm1heWJlQ2FwdHVyZVNuYXBzaG90KCk7CiAgICAg
fQorCisgICAgbG9uZyBsb25nIGJsb2JTaXplID0gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihibG9i
LT5zaXplKCkpOworICAgIG1fc2l6ZSArPSBibG9iU2l6ZTsKKworICAgIGlmIChibG9iLT5hc0Zp
bGUoKSkKKyAgICAgICAgbV9pdGVtcy5hcHBlbmQoQmxvYkRhdGFJdGVtKGJsb2ItPmFzRmlsZSgp
LT5wYXRoKCksIDAsIGJsb2JTaXplLCBibG9iLT5hc0ZpbGUoKS0+bGFzdE1vZGlmaWVkVGltZUlu
TWljcm9zZWNvbmRzKCkpKTsKKyAgICBlbHNlCisgICAgICAgIG1faXRlbXMuYXBwZW5kKEJsb2JE
YXRhSXRlbShibG9iLT51cmwoKSwgMCwgYmxvYlNpemUpKTsKIH0KIAogUGFzc1JlZlB0cjxCbG9i
PiBXZWJLaXRCbG9iQnVpbGRlcjo6Z2V0QmxvYihjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVy
SXRlbUxpc3RDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9E
YXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmNwcAppbmRleCAzYTI4MGZlM2I1NDBkMmVjOGZj
ZjdiOWNhOTE5OGQyNjMwMTg2Zjc3Li5hNWJmYjg4ZGZiNWNiMjhkOGEzZGMyNDRhNTFmMTQ3OTdk
NjMyYWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRh
VHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmNwcApAQCAtOTEsMTUgKzkx
LDE1IEBAIHZvaWQgRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6ZGVsZXRlSXRlbSh1bnNp
Z25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlCiAKICAgICBBU1NFUlQoaXRlbS0+a2luZCgp
ID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRGaWxlKTsKICAgICBSZWZQdHI8QmxvYj4gYmxvYiA9
IGl0ZW0tPmdldEFzRmlsZSgpOwotICAgIGlmICghYmxvYiB8fCAhYmxvYi0+aXNGaWxlKCkpCisg
ICAgaWYgKCFibG9iIHx8ICFibG9iLT5hc0ZpbGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
bV9pdGVtcy5jbGVhcigpOwogICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMgPSBk
YXRhT2JqZWN0LT5maWxlbmFtZXMoKTsKICAgICBWZWN0b3I8U3RyaW5nPiBjb3BpZWRGaWxlbmFt
ZXM7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgaWYgKGZpbGVuYW1lc1tpXSAhPSBzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYi5nZXQo
KSktPnBhdGgoKSkKLSAgICAgICAgICAgIGNvcGllZEZpbGVuYW1lcy5hcHBlbmQoc3RhdGljX2Nh
c3Q8RmlsZSo+KGJsb2IuZ2V0KCkpLT5wYXRoKCkpOworICAgICAgICBpZiAoZmlsZW5hbWVzW2ld
ICE9IGJsb2ItPmFzRmlsZSgpLT5wYXRoKCkpCisgICAgICAgICAgICBjb3BpZWRGaWxlbmFtZXMu
YXBwZW5kKGJsb2ItPmFzRmlsZSgpLT5wYXRoKCkpOwogICAgIH0KICAgICBkYXRhT2JqZWN0LT5z
ZXRGaWxlbmFtZXMoY29waWVkRmlsZW5hbWVzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKaW5kZXggOTY2NWJiZDFjNGQ4ZjUyN2ViMjBkODMzZjgy
ZmRiOWRlNjg0NGFmNi4uMzc4NWRjMzgzNTNkY2I0YThjZjg5OGY2NmQ5YzIyZDcyMTFhNTU3MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKQEAgLTIw
Miw5ICsyMDIsOSBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhjb25z
dCBGb3JtRGF0YUxpc3QmIGxpc3QsIGNvbnN0IFRleHRFbmNvZAogICAgICAgICAgICAgLy8gSWYg
dGhlIGN1cnJlbnQgdHlwZSBpcyBibG9iLCB0aGVuIHdlIGFsc28gbmVlZCB0byBpbmNsdWRlIHRo
ZSBmaWxlbmFtZQogICAgICAgICAgICAgaWYgKHZhbHVlLmJsb2IoKSkgewogICAgICAgICAgICAg
ICAgIFN0cmluZyBuYW1lOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCktPmlzRmls
ZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJsb2IoKS0+YXNGaWxlKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gRm9yIGZpbGUgYmxvYiwgdXNlIHRoZSBmaWxlbmFtZSAob3Ig
cmVsYXRpdmUgcGF0aCBpZiBpdCBpcyBwcmVzZW50KSBhcyB0aGUgbmFtZS4KLSAgICAgICAgICAg
ICAgICAgICAgRmlsZSogZmlsZSA9IHN0YXRpY19jYXN0PEZpbGUqPih2YWx1ZS5ibG9iKCkpOwor
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxlKiBmaWxlID0gdmFsdWUuYmxvYigpLT5hc0Zp
bGUoKTsKICNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIG5hbWUgPSBmaWxlLT53ZWJraXRSZWxhdGl2ZVBhdGgoKS5pc0VtcHR5
KCkgPyBmaWxlLT5uYW1lKCkgOiBmaWxlLT53ZWJraXRSZWxhdGl2ZVBhdGgoKTsKICNlbHNlCkBA
IC0yNDUsOSArMjQ1LDkgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMo
Y29uc3QgRm9ybURhdGFMaXN0JiBsaXN0LCBjb25zdCBUZXh0RW5jb2QKICAgICAgICAgICAgIC8v
IEFwcGVuZCBib2R5CiAgICAgICAgICAgICBhcHBlbmREYXRhKGhlYWRlci5kYXRhKCksIGhlYWRl
ci5zaXplKCkpOwogICAgICAgICAgICAgaWYgKHZhbHVlLmJsb2IoKSkgewotICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZS5ibG9iKCktPmlzRmlsZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZh
bHVlLmJsb2IoKS0+YXNGaWxlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IGFk
ZCB0aGUgZmlsZSBpZiB0aGUgcGF0aCBpcyBlbXB0eS4KLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFzdGF0aWNfY2FzdDxGaWxlKj4odmFsdWUuYmxvYigpKS0+cGF0aCgpLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5ibG9iKCktPmFzRmlsZSgpLT5wYXRoKCkuaXNF
bXB0eSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kRmlsZShzdGF0aWNfY2FzdDxG
aWxlKj4odmFsdWUuYmxvYigpKS0+cGF0aCgpLCBzaG91bGRHZW5lcmF0ZUZpbGUpOwogICAgICAg
ICAgICAgICAgIH0KICNpZiBFTkFCTEUoQkxPQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuY3BwCmluZGV4IDFlYTZkZDQ1YTUwOGM5ZTRiY2E4NGY4OTMxNmUyNGExYWMyMzZjN2QuLjgz
ZTJiOWIzMTI0MTRkYTI5ZDMwOTJmOGI2OGE4NTQ1ZThiYWZhMmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtNTkyLDggKzU5Miw4IEBAIHZvaWQgWE1MSHR0cFJlcXVl
c3Q6OnNlbmQoQmxvYiogYm9keSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIC8vIEZJWE1F
OiBTaG91bGQgd2Ugc2V0IGEgQ29udGVudC1UeXBlIGlmIG9uZSBpcyBub3Qgc2V0LgogICAgICAg
ICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIHVwbG9hZGluZyBidW5kbGVzLgogICAgICAgICBt
X3JlcXVlc3RFbnRpdHlCb2R5ID0gRm9ybURhdGE6OmNyZWF0ZSgpOwotICAgICAgICBpZiAoYm9k
eS0+aXNGaWxlKCkpCi0gICAgICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxl
KHN0YXRpY19jYXN0PEZpbGUqPihib2R5KS0+cGF0aCgpKTsKKyAgICAgICAgaWYgKGJvZHktPmFz
RmlsZSgpKQorICAgICAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5kRmlsZShib2R5
LT5hc0ZpbGUoKS0+cGF0aCgpKTsKICNpZiBFTkFCTEUoQkxPQikKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5kQmxvYihib2R5LT51cmwoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127801</attachid>
            <date>2012-02-20 03:48:44 -0800</date>
            <delta_ts>2012-02-20 16:22:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78879-20120220204842.patch</filename>
            <type>text/plain</type>
            <size>27969</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZlYTAzYzY5MmE4Mjg1
YzliMzFkOWEzNjEwNTE1MDM3MDNlMjAyMS4uM2Q2ZjFlOTRkMjcxMzczODYyY2JkNGU5YzBjM2Q5
Mzg1YTI5ZDE0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEyLTAyLTIwICBLaW51
a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAgICAgICBDYXB0dXJlIEZpbGUg
c25hcHNob3QgYXQgaXRzIGNyZWF0aW9uIHRpbWUgZm9yIGZpbGVzIGZyb20gRmlsZVN5c3RlbSBB
UEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODc5
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbmNsdWRlcyBmb2xsb3dpbmcgY2hhbmdlczoKKyAgICAg
ICAgLSBDaGFuZ2VkIHRoZSBGaWxlIGNvbnN0cnVjdG9yIGZvciBmaWxlcyBpbiBGaWxlU3lzdGVt
IEFQSSB0byB0YWtlIGl0cworICAgICAgICAgIG1ldGFkYXRhIChpbmNsdWRpbmcgc2l6ZSBhbmQg
bGFzdE1vZGlmaWVkVGltZSkgc28gdGhhdCBhY2Nlc3NpbmcKKyAgICAgICAgICBCbG9iLnNpemUg
YW5kIEZpbGUubGFzdE1vZGlmaWVkRGF0ZSB3b24ndCB0cmlnZ2VyIHN5bmNocm9ub3VzIGZpbGUK
KyAgICAgICAgICBvcGVyYXRpb25zIGZvciB0aGVtLiAgKFRoaXMgc2hvdWxkIGJlIG9rIGFzIEZp
bGUgb2JqZWN0IGlzCisgICAgICAgICAgY29uc2lkZXJlZCBhcyAnc25hcHNob3QnIG9mIHRoZSBm
aWxlKQorICAgICAgICAtIEFsc28gbWFkZSBvdGhlciBtaW5vciByZWZhY3RvcmluZy9jbGVhbnVw
cy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHM6IGV4aXN0aW5nIHRlc3RzIHNob3VsZCBwYXNzLgorCisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4QmxvYkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToK
KyAgICAgICAgKiBmaWxlYXBpL0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6d2Vi
a2l0U2xpY2UpOgorICAgICAgICAqIGZpbGVhcGkvQmxvYi5oOgorICAgICAgICAoV2ViQ29yZTo6
QmxvYjo6YXNGaWxlKTogQWRkZWQgKG9ic29sZXRpbmcgaXNGaWxlKCkgYm9vbGVhbiBtZXRob2Qp
CisgICAgICAgIChXZWJDb3JlOjpET01GaWxlU3lzdGVtOjpjcmVhdGVGaWxlKToKKyAgICAgICAg
KiBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZp
bGVTeXN0ZW1TeW5jOjpjcmVhdGVGaWxlKToKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQmxvYkRhdGFGb3JGaWxlU3lzdGVtRmlsZSk6IENoYW5n
ZWQgdG8gdGFrZSBzbmFwc2hvdCBtZXRhZGF0YSBpbmZvLgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZTo6c2l6ZSk6IENoYW5nZWQgdG8gdXNlIHNuYXBzaG90IGRhdGEgaWYgYXZhaWxhYmxlLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZTo6bGFzdE1vZGlmaWVkVGltZUluTWljcm9zZWNvbmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbGU6Om1heWJlQ2FwdHVyZVNuYXBzaG90KToKKyAgICAgICAgKiBm
aWxlYXBpL0ZpbGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OmNyZWF0ZUZvckZpbGVTeXN0
ZW1GaWxlKTogQWRkZWQgKHJlbmFtZWQgZnJvbSBjcmVhdGVXaXRoTmFtZSgpKQorICAgICAgICAo
V2ViQ29yZTo6RmlsZTo6YXNGaWxlKTogQWRkZWQgKG9ic29sZXRpbmcgaXNGaWxlKCkgYm9vbGVh
biBtZXRob2QpCisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpsYXN0TW9kaWZpZWREYXRlKTogQ2hh
bmdlZCB0byB1c2Ugc25hcHNob3QgZGF0YSBpZiBhdmFpbGFibGUuCisgICAgICAgICogZmlsZWFw
aS9GaWxlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRBc0Fy
cmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRBc0JpbmFyeVN0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkQXNUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRBc0RhdGFVUkwpOgorICAgICAgICAqIGZpbGVh
cGkvV2ViS2l0QmxvYkJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0QmxvYkJ1
aWxkZXI6OmFwcGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVy
SXRlbUxpc3RDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVt
TGlzdENocm9taXVtOjpkZWxldGVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRLZXlWYWx1ZVBh
aXJJdGVtcyk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKwogMjAxMi0wMi0xOSAgS2Vpc2hpIEhhdHRv
cmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBVc2Ugc2hhZG93Um9vdExpc3QgZm9y
IENvbG9ySW5wdXRUeXBlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0Jsb2JDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9t
LmNwcAppbmRleCAwNDk0NTYwNDM4YzMzMjI2ZDEwNzljOWIwOGNlM2YyZWJhZThlMDM1Li5iYTA4
ZGQ5MTNiM2FjYTU0MWU3ZWJhMDI2NzAwOTAyNDA5ZTAxZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAgSlNWYWx1ZSB0
b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmxv
YiogYmxvYikKICAgICBpZiAoIWJsb2IpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAg
IGlmIChibG9iLT5pc0ZpbGUoKSkKKyAgICBpZiAoYmxvYi0+YXNGaWxlKCkpCiAgICAgICAgIHJl
dHVybiBDUkVBVEVfRE9NX1dSQVBQRVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBGaWxlLCBibG9iKTsK
IAogICAgIHJldHVybiBDUkVBVEVfRE9NX1dSQVBQRVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBCbG9i
LCBibG9iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEJsb2JDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Qmxv
YkN1c3RvbS5jcHAKaW5kZXggNjg1MzU3OGU5MjdhN2U5MjNhMzBiNGQ3MTZhYzJlYzhjMzc0ZmMw
MS4uZTkzZmQwM2NjMWE2MWIxYjI5MDQ5YTBjMjVjNTlkMWYyMmQwMTAxZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmxvYkN1c3RvbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmxvYkN1c3RvbS5jcHAKQEAgLTQz
LDcgKzQzLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoQmxvYiogaW1wbCkKICAgICBp
ZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwogCi0gICAgaWYgKGltcGwtPmlz
RmlsZSgpKQorICAgIGlmIChpbXBsLT5hc0ZpbGUoKSkKICAgICAgICAgcmV0dXJuIHRvVjgoc3Rh
dGljX2Nhc3Q8RmlsZSo+KGltcGwpKTsKIAogICAgIHJldHVybiBWOEJsb2I6OndyYXAoaW1wbCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwIGIvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9CbG9iLmNwcAppbmRleCAzYjMzY2Q2NmRlOGRiYTc5MWQ2ZmQ1YzkzNDUx
ZDNjMGRmN2VlZDJkLi5hYzhmOTgyNWRmMDIxODQ0YjViMTMwZTQ1MTUwZmY3MzQ4YzdlZmUyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKQEAgLTY3LDE1ICs2NywxMSBAQCBQYXNzUmVmUHRyPEJs
b2I+IEJsb2I6OndlYmtpdFNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGVuZCwgY29u
c3QgU3RyaW5nJgogewogICAgIC8vIFdoZW4gd2Ugc2xpY2UgYSBmaWxlIGZvciB0aGUgZmlyc3Qg
dGltZSwgd2Ugb2J0YWluIGEgc25hcHNob3Qgb2YgdGhlIGZpbGUgYnkgY2FwdHVyaW5nIGl0cyBj
dXJyZW50IHNpemUgYW5kIG1vZGlmaWNhdGlvbiB0aW1lLgogICAgIC8vIFRoZSBtb2RpZmljYXRp
b24gdGltZSB3aWxsIGJlIHVzZWQgdG8gdmVyaWZ5IGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5n
ZWQgb3Igbm90LCB3aGVuIHRoZSB1bmRlcmx5aW5nIGRhdGEgYXJlIGFjY2Vzc2VkLgotICAgIGxv
bmcgbG9uZyBzaXplOwotICAgIGRvdWJsZSBtb2RpZmljYXRpb25UaW1lOwotICAgIGlmIChpc0Zp
bGUoKSkKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgaW52b2x2ZXMgc3luY2hyb25vdXMgZmlsZSBv
cGVyYXRpb24uIFdlIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gbWFrZSBpdCBhc3luY2hyb25v
dXMuCi0gICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IEZpbGUqPih0aGlzKS0+Y2FwdHVyZVNuYXBz
aG90KHNpemUsIG1vZGlmaWNhdGlvblRpbWUpOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQo
bV9zaXplICE9IC0xKTsKLSAgICAgICAgc2l6ZSA9IG1fc2l6ZTsKLSAgICB9CisgICAgLy8gRklY
TUU6IFRoaXMgbWF5IGludm9sdmUgc3luY2hyb25vdXMgZmlsZSBvcGVyYXRpb24uIFdlIG5lZWQg
dG8gZmlndXJlIG91dCBob3cgdG8gbWFrZSBpdCBhc3luY2hyb25vdXMuCisgICAgY29uc3QgRmls
ZSogZmlsZSA9IGFzRmlsZSgpOworICAgIGlmIChmaWxlKQorICAgICAgICBmaWxlLT5tYXliZUNh
cHR1cmVTbmFwc2hvdCgpOworICAgIGNvbnN0IGxvbmcgbG9uZyBzaXplID0gdGhpcy0+c2l6ZSgp
OwogCiAgICAgLy8gQ29udmVydCB0aGUgbmVnYXRpdmUgdmFsdWUgdGhhdCBpcyB1c2VkIHRvIHNl
bGVjdCBmcm9tIHRoZSBlbmQuCiAgICAgaWYgKHN0YXJ0IDwgMCkKQEAgLTk5LDggKzk1LDggQEAg
UGFzc1JlZlB0cjxCbG9iPiBCbG9iOjp3ZWJraXRTbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcg
bG9uZyBlbmQsIGNvbnN0IFN0cmluZyYKICAgICBsb25nIGxvbmcgbGVuZ3RoID0gZW5kIC0gc3Rh
cnQ7CiAgICAgT3duUHRyPEJsb2JEYXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsK
ICAgICBibG9iRGF0YS0+c2V0Q29udGVudFR5cGUoY29udGVudFR5cGUpOwotICAgIGlmIChpc0Zp
bGUoKSkKLSAgICAgICAgYmxvYkRhdGEtPmFwcGVuZEZpbGUoc3RhdGljX2Nhc3Q8Y29uc3QgRmls
ZSo+KHRoaXMpLT5wYXRoKCksIHN0YXJ0LCBsZW5ndGgsIG1vZGlmaWNhdGlvblRpbWUpOworICAg
IGlmIChmaWxlKQorICAgICAgICBibG9iRGF0YS0+YXBwZW5kRmlsZShmaWxlLT5wYXRoKCksIHN0
YXJ0LCBsZW5ndGgsIGZpbGUtPmxhc3RNb2RpZmllZFRpbWVJbk1pY3Jvc2Vjb25kcygpKTsKICAg
ICBlbHNlCiAgICAgICAgIGJsb2JEYXRhLT5hcHBlbmRCbG9iKG1faW50ZXJuYWxVUkwsIHN0YXJ0
LCBsZW5ndGgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaCBi
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCmluZGV4IGJjYTkzOTgyMzZkODZlYjRhOGQ0
MzQ4NjEyNzgwMzJlYzUwMmJkYzYuLjU4YWE3ZTY3YmNhOTA5NTgwZDQ3MDhkNTRjNDEzYmZhZTNm
YWM5ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCkBAIC00MSw2ICs0MSw4IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgRmlsZTsKKwogY2xhc3MgQmxvYiA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEJsb2I+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUo
UGFzc093blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEsIGxvbmcgbG9uZyBzaXplKQpAQCAtNjAsNyAr
NjIsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihtX3NpemUpOyB9Ci0gICAg
dmlydHVhbCBib29sIGlzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBjb25zdCBGaWxlKiBhc0ZpbGUoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICNpZiBFTkFCTEUo
QkxPQikKICAgICBQYXNzUmVmUHRyPEJsb2I+IHdlYmtpdFNsaWNlKGxvbmcgbG9uZyBzdGFydCA9
IDAsIGxvbmcgbG9uZyBlbmQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz46Om1heCgp
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlID0gU3RyaW5nKCkpIGNvbnN0OwpAQCAtNzYsNyAr
NzgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gYXMgYW4gaWRlbnRpZmllciBmb3IgdGhpcyBibG9i
LiBUaGUgaW50ZXJuYWwgVVJMIGlzIG5ldmVyIHVzZWQgdG8gc291cmNlIHRoZSBibG9iJ3MgY29u
dGVudAogICAgIC8vIGludG8gYW4gSFRNTCBvciBmb3IgRmlsZVJlYWQnaW5nLCBwdWJsaWMgYmxv
YiBVUkxzIG11c3QgYmUgdXNlZCBmb3IgdGhvc2UgcHVycG9zZXMuCiAgICAgS1VSTCBtX2ludGVy
bmFsVVJMOwotICAgIAorCiAgICAgU3RyaW5nIG1fdHlwZTsKICAgICBsb25nIGxvbmcgbV9zaXpl
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0uY3BwCmluZGV4IDk3OTll
MTIwNzllOGFlZDQyMzU3YTgxNmZiYzYxNWJkOWJiYTBiNDQuLjM5N2Y5YTUzMDI2NWMyNTNlNWRh
YzU2NjE5MDM5MDZkNzNiYzJmNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
RE9NRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lz
dGVtLmNwcApAQCAtMTIzLDIxICsxMjMsMjIgQEAgdm9pZCBET01GaWxlU3lzdGVtOjpjcmVhdGVX
cml0ZXIoY29uc3QgRmlsZUVudHJ5KiBmaWxlRW50cnksIFBhc3NSZWZQdHI8RmlsZVdyaXQKIAog
bmFtZXNwYWNlIHsKIAotY2xhc3MgR2V0UGF0aENhbGxiYWNrIDogcHVibGljIEZpbGVTeXN0ZW1D
YWxsYmFja3NCYXNlIHsKK2NsYXNzIEdldE1ldGFkYXRhQ2FsbGJhY2sgOiBwdWJsaWMgRmlsZVN5
c3RlbUNhbGxiYWNrc0Jhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEdldFBh
dGhDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZXN5c3RlbSwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4gc3VjY2Vzc0NhbGxi
YWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCisgICAgc3RhdGlj
IFBhc3NPd25QdHI8R2V0TWV0YWRhdGFDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RE9NRmls
ZVN5c3RlbT4gZmlsZXN5c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEZpbGVD
YWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9y
Q2FsbGJhY2spCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdldFBhdGhDYWxs
YmFjayhmaWxlc3lzdGVtLCBuYW1lLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXRNZXRhZGF0YUNhbGxiYWNrKGZpbGVzeXN0
ZW0sIG5hbWUsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOwogICAgIH0KIAogICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWFkTWV0YWRhdGEoY29uc3QgRmlsZU1ldGFkYXRhJiBtZXRhZGF0
YSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghbWV0YWRhdGEucGxhdGZvcm1QYXRoLmlzRW1wdHko
KSk7Ci0gICAgICAgIG1fZmlsZXN5c3RlbS0+c2NoZWR1bGVDYWxsYmFjayhtX3N1Y2Nlc3NDYWxs
YmFjay5yZWxlYXNlKCksIEZpbGU6OmNyZWF0ZVdpdGhOYW1lKG1ldGFkYXRhLnBsYXRmb3JtUGF0
aCwgbV9uYW1lKSk7CisgICAgICAgIEFTU0VSVChtZXRhZGF0YS50eXBlID09IEZpbGVNZXRhZGF0
YTo6VHlwZUZpbGUpOworICAgICAgICBtX2ZpbGVzeXN0ZW0tPnNjaGVkdWxlQ2FsbGJhY2sobV9z
dWNjZXNzQ2FsbGJhY2sucmVsZWFzZSgpLCBGaWxlOjpjcmVhdGVGb3JGaWxlU3lzdGVtRmlsZSht
X25hbWUsIG1ldGFkYXRhKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEdldFBhdGhDYWxsYmFj
ayhQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVzeXN0ZW0sIGNvbnN0IFN0cmluZyYgbmFt
ZSwgIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8
RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKKyAgICBHZXRNZXRhZGF0YUNhbGxiYWNrKFBh
c3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZXN5c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCAg
UGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJv
ckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQogICAgICAgICA6IEZpbGVTeXN0ZW1DYWxsYmFja3NC
YXNlKGVycm9yQ2FsbGJhY2spCiAgICAgICAgICwgbV9maWxlc3lzdGVtKGZpbGVzeXN0ZW0pCiAg
ICAgICAgICwgbV9uYW1lKG5hbWUpCkBAIC0xNTQsNyArMTU1LDcgQEAgcHJpdmF0ZToKIAogdm9p
ZCBET01GaWxlU3lzdGVtOjpjcmVhdGVGaWxlKGNvbnN0IEZpbGVFbnRyeSogZmlsZUVudHJ5LCBQ
YXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9y
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCiB7Ci0gICAgbV9hc3luY0ZpbGVTeXN0ZW0tPnJlYWRN
ZXRhZGF0YShmaWxlRW50cnktPmZ1bGxQYXRoKCksIEdldFBhdGhDYWxsYmFjazo6Y3JlYXRlKHRo
aXMsIGZpbGVFbnRyeS0+bmFtZSgpLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsK
KyAgICBtX2FzeW5jRmlsZVN5c3RlbS0+cmVhZE1ldGFkYXRhKGZpbGVFbnRyeS0+ZnVsbFBhdGgo
KSwgR2V0TWV0YWRhdGFDYWxsYmFjazo6Y3JlYXRlKHRoaXMsIGZpbGVFbnRyeS0+bmFtZSgpLCBz
dWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3lu
Yy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcAppbmRl
eCBlN2E4Y2E3MGJmNTc3Y2U0ZDQ3ZTgzYmNkZmYwYTJkOTc3NzYyNmQ1Li40YzgwMGM5NmY0YWFh
YTAwZGJlNGNiZGZmN2E3ZjI5MGNjNjI3NzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0RPTUZpbGVTeXN0ZW1TeW5jLmNwcApAQCAtNzIsMzUgKzcyLDM1IEBAIFBhc3NSZWZQdHI8RGly
ZWN0b3J5RW50cnlTeW5jPiBET01GaWxlU3lzdGVtU3luYzo6cm9vdCgpCiAKIG5hbWVzcGFjZSB7
CiAKLWNsYXNzIEdldFBhdGhIZWxwZXIgOiBwdWJsaWMgQXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tz
IHsKK2NsYXNzIEdldE1ldGFkYXRhSGVscGVyIDogcHVibGljIEFzeW5jRmlsZVN5c3RlbUNhbGxi
YWNrcyB7CiBwdWJsaWM6Ci0gICAgY2xhc3MgR2V0UGF0aFJlc3VsdCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEdldFBhdGhSZXN1bHQ+IHsKKyAgICBjbGFzcyBHZXRNZXRhZGF0YVJlc3VsdCA6IHB1Ymxp
YyBSZWZDb3VudGVkPEdldE1ldGFkYXRhUmVzdWx0PiB7CiAgICAgICBwdWJsaWM6Ci0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEdldFBhdGhSZXN1bHQ+IGNyZWF0ZSgpCisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEdldE1ldGFkYXRhUmVzdWx0PiBjcmVhdGUoKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdldFBhdGhSZXN1bHQoKSk7CisgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEdldE1ldGFkYXRhUmVzdWx0KCkpOwogICAgICAgICB9CiAK
ICAgICAgICAgYm9vbCBtX2ZhaWxlZDsKICAgICAgICAgaW50IG1fY29kZTsKLSAgICAgICAgU3Ry
aW5nIG1fcGF0aDsKKyAgICAgICAgRmlsZU1ldGFkYXRhIG1fbWV0YWRhdGE7CiAKICAgICAgIHBy
aXZhdGU6Ci0gICAgICAgIEdldFBhdGhSZXN1bHQoKQorICAgICAgICBHZXRNZXRhZGF0YVJlc3Vs
dCgpCiAgICAgICAgICAgICA6IG1fZmFpbGVkKGZhbHNlKQogICAgICAgICAgICAgLCBtX2NvZGUo
MCkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgfkdldFBhdGhSZXN1bHQoKQorICAg
ICAgICB+R2V0TWV0YWRhdGFSZXN1bHQoKQogICAgICAgICB7CiAgICAgICAgIH0KLSAgICAgICAg
ZnJpZW5kIGNsYXNzIFdURjo6UmVmQ291bnRlZDxHZXRQYXRoUmVzdWx0PjsKKyAgICAgICAgZnJp
ZW5kIGNsYXNzIFdURjo6UmVmQ291bnRlZDxHZXRNZXRhZGF0YVJlc3VsdD47CiAgICAgfTsKIAot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPEdldFBhdGhIZWxwZXI+IGNyZWF0ZShQYXNzUmVmUHRyPEdl
dFBhdGhSZXN1bHQ+IHJlc3VsdCkKKyAgICBzdGF0aWMgUGFzc093blB0cjxHZXRNZXRhZGF0YUhl
bHBlcj4gY3JlYXRlKFBhc3NSZWZQdHI8R2V0TWV0YWRhdGFSZXN1bHQ+IHJlc3VsdCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgR2V0UGF0aEhlbHBlcihyZXN1bHQpKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXRNZXRhZGF0YUhlbHBlcihyZXN1bHQpKTsKICAg
ICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkU3VjY2VlZCgpCkBAIC0xMzQsMjEgKzEzNCwyMSBA
QCBwdWJsaWM6CiAgICAgICAgIG1fcmVzdWx0LT5tX2NvZGUgPSBjb2RlOwogICAgIH0KIAotICAg
IHZpcnR1YWwgfkdldFBhdGhIZWxwZXIoKQorICAgIHZpcnR1YWwgfkdldE1ldGFkYXRhSGVscGVy
KCkKICAgICB7CiAgICAgfQogCiAgICAgdm9pZCBkaWRSZWFkTWV0YWRhdGEoY29uc3QgRmlsZU1l
dGFkYXRhJiBtZXRhZGF0YSkKICAgICB7Ci0gICAgICAgIG1fcmVzdWx0LT5tX3BhdGggPSBtZXRh
ZGF0YS5wbGF0Zm9ybVBhdGg7CisgICAgICAgIG1fcmVzdWx0LT5tX21ldGFkYXRhID0gbWV0YWRh
dGE7CiAgICAgfQogcHJpdmF0ZToKLSAgICBHZXRQYXRoSGVscGVyKFBhc3NSZWZQdHI8R2V0UGF0
aFJlc3VsdD4gcmVzdWx0KQorICAgIEdldE1ldGFkYXRhSGVscGVyKFBhc3NSZWZQdHI8R2V0TWV0
YWRhdGFSZXN1bHQ+IHJlc3VsdCkKICAgICAgICAgOiBtX3Jlc3VsdChyZXN1bHQpCiAgICAgewog
ICAgIH0KIAotICAgIFJlZlB0cjxHZXRQYXRoUmVzdWx0PiBtX3Jlc3VsdDsKKyAgICBSZWZQdHI8
R2V0TWV0YWRhdGFSZXN1bHQ+IG1fcmVzdWx0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UKQEAgLTE1
Niw4ICsxNTYsOCBAQCBwcml2YXRlOgogUGFzc1JlZlB0cjxGaWxlPiBET01GaWxlU3lzdGVtU3lu
Yzo6Y3JlYXRlRmlsZShjb25zdCBGaWxlRW50cnlTeW5jKiBmaWxlRW50cnksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIGVjID0gMDsKLSAgICBSZWZQdHI8R2V0UGF0aEhlbHBlcjo6R2V0UGF0
aFJlc3VsdD4gcmVzdWx0KEdldFBhdGhIZWxwZXI6OkdldFBhdGhSZXN1bHQ6OmNyZWF0ZSgpKTsK
LSAgICBtX2FzeW5jRmlsZVN5c3RlbS0+cmVhZE1ldGFkYXRhKGZpbGVFbnRyeS0+ZnVsbFBhdGgo
KSwgR2V0UGF0aEhlbHBlcjo6Y3JlYXRlKHJlc3VsdCkpOworICAgIFJlZlB0cjxHZXRNZXRhZGF0
YUhlbHBlcjo6R2V0TWV0YWRhdGFSZXN1bHQ+IHJlc3VsdChHZXRNZXRhZGF0YUhlbHBlcjo6R2V0
TWV0YWRhdGFSZXN1bHQ6OmNyZWF0ZSgpKTsKKyAgICBtX2FzeW5jRmlsZVN5c3RlbS0+cmVhZE1l
dGFkYXRhKGZpbGVFbnRyeS0+ZnVsbFBhdGgoKSwgR2V0TWV0YWRhdGFIZWxwZXI6OmNyZWF0ZShy
ZXN1bHQpKTsKICAgICBpZiAoIW1fYXN5bmNGaWxlU3lzdGVtLT53YWl0Rm9yT3BlcmF0aW9uVG9D
b21wbGV0ZSgpKSB7CiAgICAgICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6QUJPUlRfRVJSOwogICAg
ICAgICByZXR1cm4gMDsKQEAgLTE2Niw4ICsxNjYsOCBAQCBQYXNzUmVmUHRyPEZpbGU+IERPTUZp
bGVTeXN0ZW1TeW5jOjpjcmVhdGVGaWxlKGNvbnN0IEZpbGVFbnRyeVN5bmMqIGZpbGVFbnRyeSwg
RQogICAgICAgICBlYyA9IHJlc3VsdC0+bV9jb2RlOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
Ci0gICAgQVNTRVJUKCFyZXN1bHQtPm1fcGF0aC5pc0VtcHR5KCkpOwotICAgIHJldHVybiBGaWxl
OjpjcmVhdGVXaXRoTmFtZShyZXN1bHQtPm1fcGF0aCwgZmlsZUVudHJ5LT5uYW1lKCkpOworICAg
IEFTU0VSVCghcmVzdWx0LT5tX21ldGFkYXRhLnBsYXRmb3JtUGF0aC5pc0VtcHR5KCkpOworICAg
IHJldHVybiBGaWxlOjpjcmVhdGVGb3JGaWxlU3lzdGVtRmlsZShmaWxlRW50cnktPm5hbWUoKSwg
cmVzdWx0LT5tX21ldGFkYXRhKTsKIH0KIAogbmFtZXNwYWNlIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUu
Y3BwCmluZGV4IGQ0MDliOTcxOTMzNTk1MTllMzAwYTAzMjk0OTcwNGZhZWY1ZjNlODIuLjRiNmZi
MjJhMTg5ZTFiOGE4MzQ2ODhiZTA5ZTRhYmNlZTA4Njc3ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxl
LmNwcApAQCAtNTEsMTMgKzUxLDEzIEBAIHN0YXRpYyBQYXNzT3duUHRyPEJsb2JEYXRhPiBjcmVh
dGVCbG9iRGF0YUZvckZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQogfQogCiAjaWYgRU5BQkxFKEZJ
TEVfU1lTVEVNKQotc3RhdGljIFBhc3NPd25QdHI8QmxvYkRhdGE+IGNyZWF0ZUJsb2JEYXRhRm9y
RmlsZVN5c3RlbUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbGVTeXN0
ZW1OYW1lKQorc3RhdGljIFBhc3NPd25QdHI8QmxvYkRhdGE+IGNyZWF0ZUJsb2JEYXRhRm9yRmls
ZVN5c3RlbUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlU3lzdGVtTmFtZSwgY29uc3QgRmlsZU1ldGFk
YXRhJiBtZXRhZGF0YSkKIHsKICAgICBTdHJpbmcgdHlwZTsKICAgICBpbnQgaW5kZXggPSBmaWxl
U3lzdGVtTmFtZS5yZXZlcnNlRmluZCgnLicpOwogICAgIGlmIChpbmRleCAhPSAtMSkKICAgICAg
ICAgdHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldFdlbGxLbm93bk1JTUVUeXBlRm9yRXh0ZW5z
aW9uKGZpbGVTeXN0ZW1OYW1lLnN1YnN0cmluZyhpbmRleCArIDEpKTsKLSAgICByZXR1cm4gY3Jl
YXRlQmxvYkRhdGFGb3JGaWxlV2l0aFR5cGUocGF0aCwgdHlwZSk7CisgICAgcmV0dXJuIGNyZWF0
ZUJsb2JEYXRhRm9yRmlsZVdpdGhUeXBlKG1ldGFkYXRhLnBsYXRmb3JtUGF0aCwgdHlwZSk7CiB9
CiAjZW5kaWYKIApAQCAtNzQsMTIgKzc0LDE0IEBAIEZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoKQogICAgIDogQmxvYihjcmVhdGVCbG9iRGF0YUZvckZpbGUocGF0aCksIC0xKQogICAgICwg
bV9wYXRoKHBhdGgpCiAgICAgLCBtX25hbWUocGF0aEdldEZpbGVOYW1lKHBhdGgpKQorICAgICwg
bV9zbmFwc2hvdFRha2VuKGZhbHNlKQogewogfQogCiBGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgOiBCbG9iKHVy
bCwgdHlwZSwgLTEpCiAgICAgLCBtX3BhdGgocGF0aCkKKyAgICAsIG1fc25hcHNob3RUYWtlbihm
YWxzZSkKIHsKICAgICBtX25hbWUgPSBwYXRoR2V0RmlsZU5hbWUocGF0aCk7CiAgICAgLy8gRklY
TUU6IEZpbGUgb2JqZWN0IHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIGRvZXMgbm90IGlu
Y2x1ZGUKQEAgLTg4LDI2ICs5MCwyMyBAQCBGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHR5cGUpCiB9CiAKICNpZiBFTkFCTEUoRklM
RV9TWVNURU0pCi1GaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBu
YW1lKQotICAgIDogQmxvYihjcmVhdGVCbG9iRGF0YUZvckZpbGVTeXN0ZW1GaWxlKHBhdGgsIG5h
bWUpLCAtMSkKLSAgICAsIG1fcGF0aChwYXRoKQorRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEpCisgICAgOiBCbG9iKGNyZWF0ZUJsb2JE
YXRhRm9yRmlsZVN5c3RlbUZpbGUobmFtZSwgbWV0YWRhdGEpLCAtMSkKKyAgICAsIG1fcGF0aCht
ZXRhZGF0YS5wbGF0Zm9ybVBhdGgpCiAgICAgLCBtX25hbWUobmFtZSkKKyAgICAsIG1fc25hcHNo
b3RUYWtlbih0cnVlKQorICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUobWV0YWRhdGEu
bW9kaWZpY2F0aW9uVGltZSkKKyAgICAsIG1fc25hcHNob3RTaXplKG1ldGFkYXRhLmxlbmd0aCkK
IHsKIH0KICNlbmRpZgogCi1kb3VibGUgRmlsZTo6bGFzdE1vZGlmaWVkRGF0ZSgpIGNvbnN0Ci17
Ci0gICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7Ci0gICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0
aW9uVGltZShtX3BhdGgsIG1vZGlmaWNhdGlvblRpbWUpKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIC8vIE5lZWRzIHRvIHJldHVybiBlcG9jaCB0aW1lIGluIG1pbGxpc2Vjb25kcyBmb3IgRGF0
ZS4KLSAgICByZXR1cm4gbW9kaWZpY2F0aW9uVGltZSAqIDEwMDAuMDsKLX0KLQogdW5zaWduZWQg
bG9uZyBsb25nIEZpbGU6OnNpemUoKSBjb25zdAogeworICAgIGlmIChtX3NuYXBzaG90VGFrZW4p
CisgICAgICAgIHJldHVybiBtX3NuYXBzaG90U2l6ZTsKKworICAgIC8vIEZvciBub24tc2xpY2Vk
L25vbi1zbmFwc2hvdCBmaWxlcyBjaGFuZ2luZyB0aGlzIG1heSBicmVhayB0aGUgZXhpc3Rpbmcg
Y29kZSBiZWhhdmlvciwgc28gZm9yIG5vdyB3ZSBtYWtlIHN5bmNocm9ub3VzIGNhbGwgdG8gZ2V0
IHRoZSBmcmVzaCBpbmZvcm1hdGlvbi4KICAgICAvLyBGSVhNRTogSmF2YVNjcmlwdCBjYW5ub3Qg
cmVwcmVzZW50IHNpemVzIGFzIGxhcmdlIGFzIHVuc2lnbmVkIGxvbmcgbG9uZywgd2UgbmVlZCB0
bwogICAgIC8vIGNvbWUgdXAgd2l0aCBhbiBleGNlcHRpb24gdG8gdGhyb3cgaWYgZmlsZSBzaXpl
IGlzIG5vdCByZXByZXNlbnRhYmxlLgogICAgIGxvbmcgbG9uZyBzaXplOwpAQCAtMTE2LDE3ICsx
MTUsMzUgQEAgdW5zaWduZWQgbG9uZyBsb25nIEZpbGU6OnNpemUoKSBjb25zdAogICAgIHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNpemUpOwogfQogCi12b2lkIEZpbGU6
OmNhcHR1cmVTbmFwc2hvdChsb25nIGxvbmcmIHNuYXBzaG90U2l6ZSwgZG91YmxlJiBzbmFwc2hv
dE1vZGlmaWNhdGlvblRpbWUpIGNvbnN0Citkb3VibGUgRmlsZTo6bGFzdE1vZGlmaWVkVGltZUlu
TWljcm9zZWNvbmRzKCkgY29uc3QKK3sKKyAgICBpZiAobV9zbmFwc2hvdFRha2VuKQorICAgICAg
ICByZXR1cm4gbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7CisKKyAgICAvLyBGb3Igbm9uLXNs
aWNlZC9ub24tc25hcHNob3QgZmlsZXMgY2hhbmdpbmcgdGhpcyBtYXkgYnJlYWsgdGhlIGV4aXN0
aW5nIGNvZGUgYmVoYXZpb3IsIHNvIGZvciBub3cgd2UgbWFrZSBzeW5jaHJvbm91cyBjYWxsIHRv
IGdldCB0aGUgZnJlc2ggaW5mb3JtYXRpb24uCisgICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7
CisgICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShtX3BhdGgsIG1vZGlmaWNhdGlvblRp
bWUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbW9kaWZpY2F0aW9uVGltZTsKK30K
Kwordm9pZCBGaWxlOjptYXliZUNhcHR1cmVTbmFwc2hvdCgpIGNvbnN0CiB7CiAgICAgLy8gT2J0
YWlucyBhIHNuYXBzaG90IG9mIHRoZSBmaWxlIGJ5IGNhcHR1cmluZyBpdHMgY3VycmVudCBzaXpl
IGFuZCBtb2RpZmljYXRpb24gdGltZS4gVGhpcyBpcyB1c2VkIHdoZW4gd2Ugc2xpY2UgYSBmaWxl
IGZvciB0aGUgZmlyc3QgdGltZS4KICAgICAvLyBJZiB3ZSBmYWlsIHRvIHJldHJpZXZlIHRoZSBz
aXplIG9yIG1vZGlmaWNhdGlvbiB0aW1lLCBwcm9iYWJseSBkdWUgdG8gdGhhdCB0aGUgZmlsZSBo
YXMgYmVlbiBkZWxldGVkLCAwIHNpemUgaXMgcmV0dXJuZWQuCiAgICAgLy8gRklYTUU6IENvbWJp
bmUgZ2V0RmlsZVNpemUgYW5kIGdldEZpbGVNb2RpZmljYXRpb25UaW1lIGludG8gb25lIGZpbGUg
c3lzdGVtIGNhbGwuCisgICAgaWYgKG1fc25hcHNob3RUYWtlbikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbG9uZyBsb25nIHNuYXBzaG90U2l6ZTsKICAgICB0aW1lX3QgbW9kaWZpY2F0aW9uVGlt
ZTsKICAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0aCwgc25hcHNob3RTaXplKSB8fCAhZ2V0Rmls
ZU1vZGlmaWNhdGlvblRpbWUobV9wYXRoLCBtb2RpZmljYXRpb25UaW1lKSkgewotICAgICAgICBz
bmFwc2hvdFNpemUgPSAwOwotICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSAwOwot
ICAgIH0gZWxzZQotICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSBtb2RpZmljYXRp
b25UaW1lOworICAgICAgICBtX3NuYXBzaG90U2l6ZSA9IDA7CisgICAgICAgIG1fc25hcHNob3RN
b2RpZmljYXRpb25UaW1lID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3NuYXBz
aG90U2l6ZSA9IHNuYXBzaG90U2l6ZTsKKyAgICBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9
IG1vZGlmaWNhdGlvblRpbWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9GaWxlLmgKaW5kZXggMTNhOTFmZTNlNDFmOTVmYjliMjNhY2Q2YjBlZWJkYzE1NDQzZDRlMy4u
NmI5ZjMxZWVlYTQyNzFkODY5NTY2MTA0NmI3OGVlNjZmZjM4NTg4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9G
aWxlLmgKQEAgLTI3LDEyICsyNywxNCBAQAogI2RlZmluZSBGaWxlX2gKIAogI2luY2x1ZGUgIkJs
b2IuaCIKKyNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGaWxlTWV0YWRhdGE7CiBjbGFz
cyBLVVJMOwogCiBjbGFzcyBGaWxlIDogcHVibGljIEJsb2IgewpAQCAtNTMsMjYgKzU1LDMzIEBA
IHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotICAgIC8vIENyZWF0
ZSBhIGZpbGUgd2l0aCBhIG5hbWUgZXhwb3NlZCB0byB0aGUgYXV0aG9yICh2aWEgRmlsZS5uYW1l
IGFuZCBhc3NvY2lhdGVkIERPTSBwcm9wZXJ0aWVzKSB0aGF0IGRpZmZlcnMgZnJvbSB0aGUgb25l
IHByb3ZpZGVkIGluIHRoZSBwYXRoLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGU+IGNyZWF0
ZVdpdGhOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIC8v
IENyZWF0ZSBhIGZpbGUgZm9yIEZpbGVTeXN0ZW0gQVBJIHdpdGggYSBzbmFwc2hvdCBtZXRhZGF0
YSBhbmQgYSBuYW1lIGV4cG9zZWQgdG8gdGhlIGF1dGhvciAodmlhIEZpbGUubmFtZSBhbmQgYXNz
b2NpYXRlZCBET00gcHJvcGVydGllcykgdGhhdCBtYXkgZGlmZmVyIGZyb20gdGhlIG9uZSBwcm92
aWRlZCBpbiB0aGUgcGF0aC4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlPiBjcmVhdGVGb3JG
aWxlU3lzdGVtRmlsZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZpbGVNZXRhZGF0YSYgbWV0
YWRhdGEpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUocGF0aCwgbmFt
ZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUobmFtZSwgbWV0YWRhdGEpKTsK
ICAgICB9CiAjZW5kaWYKIAorICAgIC8vIFRoaXMgbWF5IGludm9sdmUgc3luY2hyb25vdXMgZmls
ZSBvcGVyYXRpb24gaWYgdGhlIGZpbGUgZG9lcyBub3QgaGF2ZSBhIHNuYXBzaG90IGluZm8uCiAg
ICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0
IEZpbGUqIGFzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KIAogICAgIGNvbnN0IFN0cmlu
ZyYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogICAgIGNvbnN0IFN0cmluZyYgbmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIGRvdWJsZSBsYXN0TW9kaWZpZWREYXRl
KCkgY29uc3Q7CisgICAgZG91YmxlIGxhc3RNb2RpZmllZERhdGUoKSBjb25zdCB7IHJldHVybiBs
YXN0TW9kaWZpZWRUaW1lSW5NaWNyb3NlY29uZHMoKSAqIDEwMDAuMDsgfQorCisgICAgLy8gVGhp
cyBtYXkgaW52b2x2ZSBzeW5jaHJvbm91cyBmaWxlIG9wZXJhdGlvbiBpZiB0aGUgZmlsZSBkb2Vz
IG5vdCBoYXZlIGEgc25hcHNob3QgaW5mby4KKyAgICBkb3VibGUgbGFzdE1vZGlmaWVkVGltZUlu
TWljcm9zZWNvbmRzKCkgY29uc3Q7CisKICNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKICAg
ICAvLyBSZXR1cm5zIHRoZSByZWxhdGl2ZSBwYXRoIG9mIHRoaXMgZmlsZSBpbiB0aGUgY29udGV4
dCBvZiBhIGRpcmVjdG9yeSBzZWxlY3Rpb24uCiAgICAgY29uc3QgU3RyaW5nJiB3ZWJraXRSZWxh
dGl2ZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3JlbGF0aXZlUGF0aDsgfQogI2VuZGlmCiAKLSAg
ICAvLyBOb3RlIHRoYXQgdGhpcyBpbnZvbHZlcyBzeW5jaHJvbm91cyBmaWxlIG9wZXJhdGlvbi4g
VGhpbmsgdHdpY2UgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAgICB2b2lkIGNhcHR1
cmVTbmFwc2hvdChsb25nIGxvbmcmIHNuYXBzaG90U2l6ZSwgZG91YmxlJiBzbmFwc2hvdE1vZGlm
aWNhdGlvblRpbWUpIGNvbnN0OworICAgIC8vIENhcHR1cmVzIHRoZSBjdXJyZW50IGZpbGUgc2l6
ZSBhbmQgbGFzdE1vZGlmaWNhdGlvblRpbWUgaWYgaXQgaXMgbm90IHRha2VuIChvciBub3QgZ2l2
ZW4gYXQgdGhlIGNyZWF0aW9uIHRpbWUpLgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBpbnZv
bHZlIHN5bmNocm9ub3VzIGZpbGUgb3BlcmF0aW9uIGlmIGEgc25hcHNob3QgZm9yIHRoaXMgZmls
ZSBvYmplY3QgaGFzIG5vdCBiZWVuIHRha2VuLiBUaGluayB0d2ljZSBiZWZvcmUgY2FsbGluZyB0
aGlzIGZ1bmN0aW9uLgorICAgIHZvaWQgbWF5YmVDYXB0dXJlU25hcHNob3QoKSBjb25zdDsKIAog
ICAgIC8vIEZJWE1FOiBvYnNvbGV0ZSBhdHRyaWJ1dGVzLiBUbyBiZSByZW1vdmVkLgogICAgIGNv
bnN0IFN0cmluZyYgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lKCk7IH0KQEAgLTg1LDcg
Kzk0LDcgQEAgcHJpdmF0ZToKICAgICBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgS1VS
TCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5cGUpOwogCiAjaWYgRU5BQkxFKEZJTEVfU1lTVEVN
KQotICAgIEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAg
IEZpbGUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGaWxlTWV0YWRhdGEmKTsKICNlbmRpZgog
CiAgICAgU3RyaW5nIG1fcGF0aDsKQEAgLTkzLDYgKzEwMiwxMSBAQCBwcml2YXRlOgogI2lmIEVO
QUJMRShESVJFQ1RPUllfVVBMT0FEKQogICAgIFN0cmluZyBtX3JlbGF0aXZlUGF0aDsKICNlbmRp
ZgorCisgICAgLy8gS2VlcHMgYXJvdW5kIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiBmb3IgYSBz
bmFwc2hvdCBmaWxlL3NsaWNlLgorICAgIG11dGFibGUgYm9vbCBtX3NuYXBzaG90VGFrZW47Cisg
ICAgbXV0YWJsZSBkb3VibGUgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7CisgICAgbXV0YWJs
ZSBsb25nIGxvbmcgbV9zbmFwc2hvdFNpemU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAppbmRleCAwN2M0YjY3NDYxMTExNjFl
ZmYyOTk1OWFiMWQyZmJkYzFjMDEzMTJmLi40ZGJjZTdkZmI3ZDcyYjJkMmQ2OGNlNzEzYjRhYWYz
YzNkZDZmMDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKQEAgLTk1LDcg
Kzk1LDcgQEAgdm9pZCBGaWxlUmVhZGVyOjpyZWFkQXNBcnJheUJ1ZmZlcihCbG9iKiBibG9iLCBF
eGNlcHRpb25Db2RlJiBlYykKICAgICBpZiAoIWJsb2IpCiAgICAgICAgIHJldHVybjsKIAotICAg
IExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyBhcnJheSBidWZmZXI6ICVzICVz
XG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBibG9iLT5pc0ZpbGUoKSA/
IHN0YXRpY19jYXN0PEZpbGUqPihibG9iKS0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkgOiAiIik7Cisg
ICAgTE9HKEZpbGVBUEksICJGaWxlUmVhZGVyOiByZWFkaW5nIGFzIGFycmF5IGJ1ZmZlcjogJXMg
JXNcbiIsIGJsb2ItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGJsb2ItPmFzRmlsZSgp
ID8gYmxvYi0+YXNGaWxlKCktPnBhdGgoKS51dGY4KCkuZGF0YSgpIDogIiIpOwogCiAgICAgcmVh
ZEludGVybmFsKGJsb2IsIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRBc0FycmF5QnVmZmVyLCBlYyk7
CiB9CkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBGaWxlUmVhZGVyOjpyZWFkQXNCaW5hcnlTdHJp
bmcoQmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgaWYgKCFibG9iKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgYmlu
YXJ5OiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgYmxvYi0+
aXNGaWxlKCkgPyBzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYiktPnBhdGgoKS51dGY4KCkuZGF0YSgp
IDogIiIpOworICAgIExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyBiaW5hcnk6
ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBibG9iLT5hc0Zp
bGUoKSA/IGJsb2ItPmFzRmlsZSgpLT5wYXRoKCkudXRmOCgpLmRhdGEoKSA6ICIiKTsKIAogICAg
IHJlYWRJbnRlcm5hbChibG9iLCBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkQXNCaW5hcnlTdHJpbmcs
IGVjKTsKIH0KQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEZpbGVSZWFkZXI6OnJlYWRBc1RleHQo
QmxvYiogYmxvYiwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgRXhjZXB0aW9uQ29kZSYgZQogICAg
IGlmICghYmxvYikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9HKEZpbGVBUEksICJGaWxlUmVh
ZGVyOiByZWFkaW5nIGFzIHRleHQ6ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCBibG9iLT5pc0ZpbGUoKSA/IHN0YXRpY19jYXN0PEZpbGUqPihibG9iKS0+cGF0
aCgpLnV0ZjgoKS5kYXRhKCkgOiAiIik7CisgICAgTE9HKEZpbGVBUEksICJGaWxlUmVhZGVyOiBy
ZWFkaW5nIGFzIHRleHQ6ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpLCBibG9iLT5hc0ZpbGUoKSA/IGJsb2ItPmFzRmlsZSgpLT5wYXRoKCkudXRmOCgpLmRhdGEo
KSA6ICIiKTsKIAogICAgIG1fZW5jb2RpbmcgPSBlbmNvZGluZzsKICAgICByZWFkSW50ZXJuYWwo
YmxvYiwgRmlsZVJlYWRlckxvYWRlcjo6UmVhZEFzVGV4dCwgZWMpOwpAQCAtMTMxLDcgKzEzMSw3
IEBAIHZvaWQgRmlsZVJlYWRlcjo6cmVhZEFzRGF0YVVSTChCbG9iKiBibG9iLCBFeGNlcHRpb25D
b2RlJiBlYykKICAgICBpZiAoIWJsb2IpCiAgICAgICAgIHJldHVybjsKIAotICAgIExPRyhGaWxl
QVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyBkYXRhIFVSTDogJXMgJXNcbiIsIGJsb2ItPnVy
bCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGJsb2ItPmlzRmlsZSgpID8gc3RhdGljX2Nhc3Q8
RmlsZSo+KGJsb2IpLT5wYXRoKCkudXRmOCgpLmRhdGEoKSA6ICIiKTsKKyAgICBMT0coRmlsZUFQ
SSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgZGF0YSBVUkw6ICVzICVzXG4iLCBibG9iLT51cmwo
KS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBibG9iLT5hc0ZpbGUoKSA/IGJsb2ItPmFzRmlsZSgp
LT5wYXRoKCkudXRmOCgpLmRhdGEoKSA6ICIiKTsKIAogICAgIHJlYWRJbnRlcm5hbChibG9iLCBG
aWxlUmVhZGVyTG9hZGVyOjpSZWFkQXNEYXRhVVJMLCBlYyk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuY3BwCmluZGV4IGE4MTBhZDhmNTQyZDE5ZjE2YzUz
Y2ExNzdkZDMwZDU1NjFmMWUxOTYuLjMwMThmMTdkZThlMDA5NTg0ZTE1YWI3ZGZhMGJjZTVkNDA3
NWRkY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuY3Bw
CkBAIC0xMDEsMjEgKzEwMSwyMCBAQCB2b2lkIFdlYktpdEJsb2JCdWlsZGVyOjphcHBlbmQoQmxv
YiogYmxvYikKIHsKICAgICBpZiAoIWJsb2IpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoYmxv
Yi0+aXNGaWxlKCkpIHsKKyAgICBjb25zdCBGaWxlKiBmaWxlID0gYmxvYi0+YXNGaWxlKCk7Cisg
ICAgaWYgKGZpbGUpIHsKICAgICAgICAgLy8gSWYgdGhlIGJsb2IgaXMgZmlsZSB0aGF0IGlzIG5v
dCBzbmFwc2hvdGVkLCBjYXB0dXJlIHRoZSBzbmFwc2hvdCBub3cuCiAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGludm9sdmVzIHN5bmNocm9ub3VzIGZpbGUgb3BlcmF0aW9uLiBXZSBuZWVkIHRvIGZp
Z3VyZSBvdXQgaG93IHRvIG1ha2UgaXQgYXN5bmNocm9ub3VzLgotICAgICAgICBGaWxlKiBmaWxl
ID0gc3RhdGljX2Nhc3Q8RmlsZSo+KGJsb2IpOwotICAgICAgICBsb25nIGxvbmcgc25hcHNob3RT
aXplOwotICAgICAgICBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lOwotICAgICAgICBm
aWxlLT5jYXB0dXJlU25hcHNob3Qoc25hcHNob3RTaXplLCBzbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUpOwotCi0gICAgICAgIG1fc2l6ZSArPSBzbmFwc2hvdFNpemU7Ci0gICAgICAgIG1faXRlbXMu
YXBwZW5kKEJsb2JEYXRhSXRlbShmaWxlLT5wYXRoKCksIDAsIHNuYXBzaG90U2l6ZSwgc25hcHNo
b3RNb2RpZmljYXRpb25UaW1lKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbG9uZyBsb25nIGJs
b2JTaXplID0gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihibG9iLT5zaXplKCkpOwotICAgICAgICBt
X3NpemUgKz0gYmxvYlNpemU7Ci0gICAgICAgIG1faXRlbXMuYXBwZW5kKEJsb2JEYXRhSXRlbShi
bG9iLT51cmwoKSwgMCwgYmxvYlNpemUpKTsKKyAgICAgICAgZmlsZS0+bWF5YmVDYXB0dXJlU25h
cHNob3QoKTsKICAgICB9CisKKyAgICBsb25nIGxvbmcgYmxvYlNpemUgPSBzdGF0aWNfY2FzdDxs
b25nIGxvbmc+KGJsb2ItPnNpemUoKSk7CisgICAgbV9zaXplICs9IGJsb2JTaXplOworCisgICAg
aWYgKGZpbGUpCisgICAgICAgIG1faXRlbXMuYXBwZW5kKEJsb2JEYXRhSXRlbShmaWxlLT5wYXRo
KCksIDAsIGJsb2JTaXplLCBmaWxlLT5sYXN0TW9kaWZpZWRUaW1lSW5NaWNyb3NlY29uZHMoKSkp
OworICAgIGVsc2UKKyAgICAgICAgbV9pdGVtcy5hcHBlbmQoQmxvYkRhdGFJdGVtKGJsb2ItPnVy
bCgpLCAwLCBibG9iU2l6ZSkpOwogfQogCiBQYXNzUmVmUHRyPEJsb2I+IFdlYktpdEJsb2JCdWls
ZGVyOjpnZXRCbG9iKGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1M
aXN0Q2hyb21pdW0uY3BwCmluZGV4IDNhMjgwZmUzYjU0MGQyZWM4ZmNmN2I5Y2E5MTk4ZDI2MzAx
ODZmNzcuLmE1YmZiODhkZmI1Y2IyOGQ4YTNkYzI0NGE1MWYxNDc5N2Q2MzJhZGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFU
cmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uY3BwCkBAIC05MSwxNSArOTEsMTUgQEAgdm9pZCBEYXRh
VHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgs
IEV4Y2VwdGlvbkNvZGUKIAogICAgIEFTU0VSVChpdGVtLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVy
SXRlbTo6a2luZEZpbGUpOwogICAgIFJlZlB0cjxCbG9iPiBibG9iID0gaXRlbS0+Z2V0QXNGaWxl
KCk7Ci0gICAgaWYgKCFibG9iIHx8ICFibG9iLT5pc0ZpbGUoKSkKKyAgICBpZiAoIWJsb2IgfHwg
IWJsb2ItPmFzRmlsZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2l0ZW1zLmNsZWFyKCk7
CiAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcyA9IGRhdGFPYmplY3QtPmZpbGVu
YW1lcygpOwogICAgIFZlY3RvcjxTdHJpbmc+IGNvcGllZEZpbGVuYW1lczsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoZmls
ZW5hbWVzW2ldICE9IHN0YXRpY19jYXN0PEZpbGUqPihibG9iLmdldCgpKS0+cGF0aCgpKQotICAg
ICAgICAgICAgY29waWVkRmlsZW5hbWVzLmFwcGVuZChzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYi5n
ZXQoKSktPnBhdGgoKSk7CisgICAgICAgIGlmIChmaWxlbmFtZXNbaV0gIT0gYmxvYi0+YXNGaWxl
KCktPnBhdGgoKSkKKyAgICAgICAgICAgIGNvcGllZEZpbGVuYW1lcy5hcHBlbmQoYmxvYi0+YXNG
aWxlKCktPnBhdGgoKSk7CiAgICAgfQogICAgIGRhdGFPYmplY3QtPnNldEZpbGVuYW1lcyhjb3Bp
ZWRGaWxlbmFtZXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9Gb3JtRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhLmNwcAppbmRleCA5NjY1YmJkMWM0ZDhmNTI3ZWIyMGQ4MzNmODJmZGI5ZGU2ODQ0YWY2Li4z
Nzg1ZGMzODM1M2RjYjRhOGNmODk4ZjY2ZDljMjJkNzIxMWE1NTczIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcApAQCAtMjAyLDkgKzIwMiw5IEBAIHZv
aWQgRm9ybURhdGE6OmFwcGVuZEtleVZhbHVlUGFpckl0ZW1zKGNvbnN0IEZvcm1EYXRhTGlzdCYg
bGlzdCwgY29uc3QgVGV4dEVuY29kCiAgICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCB0eXBl
IGlzIGJsb2IsIHRoZW4gd2UgYWxzbyBuZWVkIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lCiAgICAg
ICAgICAgICBpZiAodmFsdWUuYmxvYigpKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWU7
Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJsb2IoKS0+aXNGaWxlKCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodmFsdWUuYmxvYigpLT5hc0ZpbGUoKSkgewogICAgICAgICAgICAgICAgICAg
ICAvLyBGb3IgZmlsZSBibG9iLCB1c2UgdGhlIGZpbGVuYW1lIChvciByZWxhdGl2ZSBwYXRoIGlm
IGl0IGlzIHByZXNlbnQpIGFzIHRoZSBuYW1lLgotICAgICAgICAgICAgICAgICAgICBGaWxlKiBm
aWxlID0gc3RhdGljX2Nhc3Q8RmlsZSo+KHZhbHVlLmJsb2IoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZpbGUqIGZpbGUgPSB2YWx1ZS5ibG9iKCktPmFzRmlsZSgpOwogI2lmIEVOQUJM
RShESVJFQ1RPUllfVVBMT0FEKSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
bmFtZSA9IGZpbGUtPndlYmtpdFJlbGF0aXZlUGF0aCgpLmlzRW1wdHkoKSA/IGZpbGUtPm5hbWUo
KSA6IGZpbGUtPndlYmtpdFJlbGF0aXZlUGF0aCgpOwogI2Vsc2UKQEAgLTI0NSw5ICsyNDUsOSBA
QCB2b2lkIEZvcm1EYXRhOjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhjb25zdCBGb3JtRGF0YUxp
c3QmIGxpc3QsIGNvbnN0IFRleHRFbmNvZAogICAgICAgICAgICAgLy8gQXBwZW5kIGJvZHkKICAg
ICAgICAgICAgIGFwcGVuZERhdGEoaGVhZGVyLmRhdGEoKSwgaGVhZGVyLnNpemUoKSk7CiAgICAg
ICAgICAgICBpZiAodmFsdWUuYmxvYigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJs
b2IoKS0+aXNGaWxlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmxvYigpLT5hc0Zp
bGUoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3QgYWRkIHRoZSBmaWxlIGlmIHRo
ZSBwYXRoIGlzIGVtcHR5LgotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXRpY19jYXN0PEZp
bGUqPih2YWx1ZS5ibG9iKCkpLT5wYXRoKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAg
ICBpZiAoIXZhbHVlLmJsb2IoKS0+YXNGaWxlKCktPnBhdGgoKS5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRGaWxlKHN0YXRpY19jYXN0PEZpbGUqPih2YWx1ZS5ibG9i
KCkpLT5wYXRoKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7CiAgICAgICAgICAgICAgICAgfQogI2lm
IEVOQUJMRShCTE9CKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKaW5kZXggMWVh
NmRkNDVhNTA4YzllNGJjYTg0Zjg5MzE2ZTI0YTFhYzIzNmM3ZC4uODNlMmI5YjMxMjQxNGRhMjlk
MzA5MmY4YjY4YTg1NDVlOGJhZmEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCkBAIC01OTIsOCArNTkyLDggQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChCbG9iKiBi
b2R5LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBzZXQg
YSBDb250ZW50LVR5cGUgaWYgb25lIGlzIG5vdCBzZXQuCiAgICAgICAgIC8vIEZJWE1FOiBhZGQg
c3VwcG9ydCBmb3IgdXBsb2FkaW5nIGJ1bmRsZXMuCiAgICAgICAgIG1fcmVxdWVzdEVudGl0eUJv
ZHkgPSBGb3JtRGF0YTo6Y3JlYXRlKCk7Ci0gICAgICAgIGlmIChib2R5LT5pc0ZpbGUoKSkKLSAg
ICAgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHktPmFwcGVuZEZpbGUoc3RhdGljX2Nhc3Q8Rmls
ZSo+KGJvZHkpLT5wYXRoKCkpOworICAgICAgICBpZiAoYm9keS0+YXNGaWxlKCkpCisgICAgICAg
ICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxlKGJvZHktPmFzRmlsZSgpLT5wYXRo
KCkpOwogI2lmIEVOQUJMRShCTE9CKQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3JlcXVl
c3RFbnRpdHlCb2R5LT5hcHBlbmRCbG9iKGJvZHktPnVybCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127867</attachid>
            <date>2012-02-20 16:22:39 -0800</date>
            <delta_ts>2012-02-23 11:48:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78879-20120221092238.patch</filename>
            <type>text/plain</type>
            <size>27835</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZlYTAzYzY5MmE4Mjg1
YzliMzFkOWEzNjEwNTE1MDM3MDNlMjAyMS4uY2E4MDI4ZTQ3NjJiNjVmYzkyOGJlMDMxZWU5MjYw
NDVjYWZiMzA1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTAyLTIwICBLaW51
a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAgICAgICBDYXB0dXJlIEZpbGUg
c25hcHNob3QgYXQgaXRzIGNyZWF0aW9uIHRpbWUgZm9yIGZpbGVzIGZyb20gRmlsZVN5c3RlbSBB
UEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODc5
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbmNsdWRlcyBmb2xsb3dpbmcgY2hhbmdlczoKKyAgICAg
ICAgLSBDaGFuZ2VkIHRoZSBGaWxlIGNvbnN0cnVjdG9yIGZvciBmaWxlcyBpbiBGaWxlU3lzdGVt
IEFQSSB0byB0YWtlIGl0cworICAgICAgICAgIG1ldGFkYXRhIChpbmNsdWRpbmcgc2l6ZSBhbmQg
bGFzdE1vZGlmaWVkVGltZSkgc28gdGhhdCBhY2Nlc3NpbmcKKyAgICAgICAgICBCbG9iLnNpemUg
YW5kIEZpbGUubGFzdE1vZGlmaWVkRGF0ZSB3b24ndCB0cmlnZ2VyIHN5bmNocm9ub3VzIGZpbGUK
KyAgICAgICAgICBvcGVyYXRpb25zIGZvciB0aGVtLiAgKFRoaXMgc2hvdWxkIGJlIG9rIGFzIEZp
bGUgb2JqZWN0IGlzCisgICAgICAgICAgY29uc2lkZXJlZCBhcyAnc25hcHNob3QnIG9mIHRoZSBm
aWxlKQorICAgICAgICAtIEFsc28gbWFkZSBvdGhlciBtaW5vciByZWZhY3RvcmluZy9jbGVhbnVw
cy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHM6IGV4aXN0aW5nIHRlc3RzIHNob3VsZCBwYXNzLgorCisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4QmxvYkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToK
KyAgICAgICAgKiBmaWxlYXBpL0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6d2Vi
a2l0U2xpY2UpOgorICAgICAgICAqIGZpbGVhcGkvQmxvYi5oOgorICAgICAgICAoV2ViQ29yZTo6
QmxvYjo6YXNGaWxlKTogQWRkZWQgKG9ic29sZXRpbmcgaXNGaWxlKCkgYm9vbGVhbiBtZXRob2Qp
CisgICAgICAgIChXZWJDb3JlOjpET01GaWxlU3lzdGVtOjpjcmVhdGVGaWxlKToKKyAgICAgICAg
KiBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZp
bGVTeXN0ZW1TeW5jOjpjcmVhdGVGaWxlKToKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQmxvYkRhdGFGb3JGaWxlU3lzdGVtRmlsZSk6IENoYW5n
ZWQgdG8gdGFrZSBzbmFwc2hvdCBtZXRhZGF0YSBpbmZvLgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZTo6c2l6ZSk6IENoYW5nZWQgdG8gdXNlIHNuYXBzaG90IGRhdGEgaWYgYXZhaWxhYmxlLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZTo6bGFzdE1vZGlmaWVkVGltZUluTWljcm9zZWNvbmRzKToKKyAg
ICAgICAgKiBmaWxlYXBpL0ZpbGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OmNyZWF0ZUZv
ckZpbGVTeXN0ZW1GaWxlKTogQWRkZWQgKHJlbmFtZWQgZnJvbSBjcmVhdGVXaXRoTmFtZSgpKQor
ICAgICAgICAoV2ViQ29yZTo6RmlsZTo6YXNGaWxlKTogQWRkZWQgKG9ic29sZXRpbmcgaXNGaWxl
KCkgYm9vbGVhbiBtZXRob2QpCisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpsYXN0TW9kaWZpZWRE
YXRlKTogQ2hhbmdlZCB0byB1c2Ugc25hcHNob3QgZGF0YSBpZiBhdmFpbGFibGUuCisgICAgICAg
ICogZmlsZWFwaS9GaWxlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6
OnJlYWRBc0FycmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRB
c0JpbmFyeVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkQXNUZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRBc0RhdGFVUkwpOgorICAgICAg
ICAqIGZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
S2l0QmxvYkJ1aWxkZXI6OmFwcGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRGF0
YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJh
bnNmZXJJdGVtTGlzdENocm9taXVtOjpkZWxldGVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRL
ZXlWYWx1ZVBhaXJJdGVtcyk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKwogMjAxMi0wMi0xOSAgS2Vp
c2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBVc2Ugc2hhZG93Um9v
dExpc3QgZm9yIENvbG9ySW5wdXRUeXBlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNC
bG9iQ3VzdG9tLmNwcAppbmRleCAwNDk0NTYwNDM4YzMzMjI2ZDEwNzljOWIwOGNlM2YyZWJhZThl
MDM1Li5iYTA4ZGQ5MTNiM2FjYTU0MWU3ZWJhMDI2NzAwOTAyNDA5ZTAxZDk3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAg
SlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQmxvYiogYmxvYikKICAgICBpZiAoIWJsb2IpCiAgICAgICAgIHJldHVybiBqc051bGwo
KTsKIAotICAgIGlmIChibG9iLT5pc0ZpbGUoKSkKKyAgICBpZiAoYmxvYi0+YXNGaWxlKCkpCiAg
ICAgICAgIHJldHVybiBDUkVBVEVfRE9NX1dSQVBQRVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBGaWxl
LCBibG9iKTsKIAogICAgIHJldHVybiBDUkVBVEVfRE9NX1dSQVBQRVIoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBCbG9iLCBibG9iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4QmxvYkN1c3RvbS5jcHAKaW5kZXggNjg1MzU3OGU5MjdhN2U5MjNhMzBiNGQ3MTZhYzJl
YzhjMzc0ZmMwMS4uZTkzZmQwM2NjMWE2MWIxYjI5MDQ5YTBjMjVjNTlkMWYyMmQwMTAxZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmxvYkN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmxvYkN1c3RvbS5j
cHAKQEAgLTQzLDcgKzQzLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoQmxvYiogaW1w
bCkKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwogCi0gICAgaWYg
KGltcGwtPmlzRmlsZSgpKQorICAgIGlmIChpbXBsLT5hc0ZpbGUoKSkKICAgICAgICAgcmV0dXJu
IHRvVjgoc3RhdGljX2Nhc3Q8RmlsZSo+KGltcGwpKTsKIAogICAgIHJldHVybiBWOEJsb2I6Ondy
YXAoaW1wbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwIGIv
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAppbmRleCAzYjMzY2Q2NmRlOGRiYTc5MWQ2
ZmQ1YzkzNDUxZDNjMGRmN2VlZDJkLi4zYTJiMjZkYTFmMGZlZmVjN2VjOWJhZTcwMjM4ZDA0Mjg1
MTExZmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKQEAgLTY1LDE3ICs2NSwxMSBAQCBCbG9i
Ojp+QmxvYigpCiAjaWYgRU5BQkxFKEJMT0IpCiBQYXNzUmVmUHRyPEJsb2I+IEJsb2I6OndlYmtp
dFNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGVuZCwgY29uc3QgU3RyaW5nJiBjb250
ZW50VHlwZSkgY29uc3QKIHsKLSAgICAvLyBXaGVuIHdlIHNsaWNlIGEgZmlsZSBmb3IgdGhlIGZp
cnN0IHRpbWUsIHdlIG9idGFpbiBhIHNuYXBzaG90IG9mIHRoZSBmaWxlIGJ5IGNhcHR1cmluZyBp
dHMgY3VycmVudCBzaXplIGFuZCBtb2RpZmljYXRpb24gdGltZS4KKyAgICAvLyBXaGVuIHdlIHNs
aWNlIGEgZmlsZSAoaS5lLiBhc0ZpbGUoKSAhPSAwKSB3ZSBvYnRhaW4gYSBzbmFwc2hvdCBzdGF0
ZSBvZiB0aGUgZmlsZSBieSBjYXB0dXJpbmcgaXRzIGN1cnJlbnQgc2l6ZSBhbmQgbGFzdCBtb2Rp
ZmljYXRpb24gdGltZS4KICAgICAvLyBUaGUgbW9kaWZpY2F0aW9uIHRpbWUgd2lsbCBiZSB1c2Vk
IHRvIHZlcmlmeSBpZiB0aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIG9yIG5vdCwgd2hlbiB0aGUg
dW5kZXJseWluZyBkYXRhIGFyZSBhY2Nlc3NlZC4KLSAgICBsb25nIGxvbmcgc2l6ZTsKLSAgICBk
b3VibGUgbW9kaWZpY2F0aW9uVGltZTsKLSAgICBpZiAoaXNGaWxlKCkpCi0gICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGludm9sdmVzIHN5bmNocm9ub3VzIGZpbGUgb3BlcmF0aW9uLiBXZSBuZWVkIHRv
IGZpZ3VyZSBvdXQgaG93IHRvIG1ha2UgaXQgYXN5bmNocm9ub3VzLgotICAgICAgICBzdGF0aWNf
Y2FzdDxjb25zdCBGaWxlKj4odGhpcyktPmNhcHR1cmVTbmFwc2hvdChzaXplLCBtb2RpZmljYXRp
b25UaW1lKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fc2l6ZSAhPSAtMSk7Ci0gICAg
ICAgIHNpemUgPSBtX3NpemU7Ci0gICAgfQorICAgIC8vIEZJWE1FOiBDYWxsaW5nIHNpemUoKSBh
bmQgbGFzdE1vZGlmaWVkVGltZUluTWljcm9zZWNvbmRzKCkgbWF5IGludm9sdmUgc3luY2hyb25v
dXMgZmlsZSBvcGVyYXRpb24uIFdlIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gbWFrZSBpdCBh
c3luY2hyb25vdXMgb3IgbWFrZSBGaWxlL0Jsb2IgYWN0IGFzIHNuYXBzaG90IGFsbCB0aGUgdGlt
ZSBhcyB0aGUgbmV3IGRyYWZ0IHNwZWNpZmllcy4KKworICAgIGNvbnN0IGxvbmcgbG9uZyBzaXpl
ID0gdGhpcy0+c2l6ZSgpOwogCiAgICAgLy8gQ29udmVydCB0aGUgbmVnYXRpdmUgdmFsdWUgdGhh
dCBpcyB1c2VkIHRvIHNlbGVjdCBmcm9tIHRoZSBlbmQuCiAgICAgaWYgKHN0YXJ0IDwgMCkKQEAg
LTk5LDggKzkzLDkgQEAgUGFzc1JlZlB0cjxCbG9iPiBCbG9iOjp3ZWJraXRTbGljZShsb25nIGxv
bmcgc3RhcnQsIGxvbmcgbG9uZyBlbmQsIGNvbnN0IFN0cmluZyYKICAgICBsb25nIGxvbmcgbGVu
Z3RoID0gZW5kIC0gc3RhcnQ7CiAgICAgT3duUHRyPEJsb2JEYXRhPiBibG9iRGF0YSA9IEJsb2JE
YXRhOjpjcmVhdGUoKTsKICAgICBibG9iRGF0YS0+c2V0Q29udGVudFR5cGUoY29udGVudFR5cGUp
OwotICAgIGlmIChpc0ZpbGUoKSkKLSAgICAgICAgYmxvYkRhdGEtPmFwcGVuZEZpbGUoc3RhdGlj
X2Nhc3Q8Y29uc3QgRmlsZSo+KHRoaXMpLT5wYXRoKCksIHN0YXJ0LCBsZW5ndGgsIG1vZGlmaWNh
dGlvblRpbWUpOworICAgIGNvbnN0IEZpbGUqIGZpbGUgPSBhc0ZpbGUoKTsKKyAgICBpZiAoZmls
ZSkKKyAgICAgICAgYmxvYkRhdGEtPmFwcGVuZEZpbGUoZmlsZS0+cGF0aCgpLCBzdGFydCwgbGVu
Z3RoLCBmaWxlLT5sYXN0TW9kaWZpZWRUaW1lSW5NaWNyb3NlY29uZHMoKSk7CiAgICAgZWxzZQog
ICAgICAgICBibG9iRGF0YS0+YXBwZW5kQmxvYihtX2ludGVybmFsVVJMLCBzdGFydCwgbGVuZ3Ro
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmggYi9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0Jsb2IuaAppbmRleCBiY2E5Mzk4MjM2ZDg2ZWI0YThkNDM0ODYxMjc4
MDMyZWM1MDJiZGM2Li41OGFhN2U2N2JjYTkwOTU4MGQ0NzA4ZDU0YzQxM2JmYWUzZmFjOWQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0Jsb2IuaApAQCAtNDEsNiArNDEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIEZpbGU7CisKIGNsYXNzIEJsb2IgOiBwdWJsaWMgUmVmQ291bnRlZDxCbG9i
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKFBhc3NPd25Q
dHI8QmxvYkRhdGE+IGJsb2JEYXRhLCBsb25nIGxvbmcgc2l6ZSkKQEAgLTYwLDcgKzYyLDcgQEAg
cHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obV9zaXplKTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgY29uc3Qg
RmlsZSogYXNGaWxlKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAjaWYgRU5BQkxFKEJMT0IpCiAg
ICAgUGFzc1JlZlB0cjxCbG9iPiB3ZWJraXRTbGljZShsb25nIGxvbmcgc3RhcnQgPSAwLCBsb25n
IGxvbmcgZW5kID0gc3RkOjpudW1lcmljX2xpbWl0czxsb25nIGxvbmc+OjptYXgoKSwgY29uc3Qg
U3RyaW5nJiBjb250ZW50VHlwZSA9IFN0cmluZygpKSBjb25zdDsKQEAgLTc2LDcgKzc4LDcgQEAg
cHJvdGVjdGVkOgogICAgIC8vIGFzIGFuIGlkZW50aWZpZXIgZm9yIHRoaXMgYmxvYi4gVGhlIGlu
dGVybmFsIFVSTCBpcyBuZXZlciB1c2VkIHRvIHNvdXJjZSB0aGUgYmxvYidzIGNvbnRlbnQKICAg
ICAvLyBpbnRvIGFuIEhUTUwgb3IgZm9yIEZpbGVSZWFkJ2luZywgcHVibGljIGJsb2IgVVJMcyBt
dXN0IGJlIHVzZWQgZm9yIHRob3NlIHB1cnBvc2VzLgogICAgIEtVUkwgbV9pbnRlcm5hbFVSTDsK
LSAgICAKKwogICAgIFN0cmluZyBtX3R5cGU7CiAgICAgbG9uZyBsb25nIG1fc2l6ZTsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtLmNwcAppbmRleCA5Nzk5ZTEyMDc5ZThh
ZWQ0MjM1N2E4MTZmYmM2MTViZDliYmEwYjQ0Li4zOTdmOWE1MzAyNjVjMjUzZTVkYWM1NjYxOTAz
OTA2ZDczYmMyZjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVT
eXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5jcHAK
QEAgLTEyMywyMSArMTIzLDIyIEBAIHZvaWQgRE9NRmlsZVN5c3RlbTo6Y3JlYXRlV3JpdGVyKGNv
bnN0IEZpbGVFbnRyeSogZmlsZUVudHJ5LCBQYXNzUmVmUHRyPEZpbGVXcml0CiAKIG5hbWVzcGFj
ZSB7CiAKLWNsYXNzIEdldFBhdGhDYWxsYmFjayA6IHB1YmxpYyBGaWxlU3lzdGVtQ2FsbGJhY2tz
QmFzZSB7CitjbGFzcyBHZXRNZXRhZGF0YUNhbGxiYWNrIDogcHVibGljIEZpbGVTeXN0ZW1DYWxs
YmFja3NCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxHZXRQYXRoQ2FsbGJh
Y2s+IGNyZWF0ZShQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVzeXN0ZW0sIGNvbnN0IFN0
cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFz
c1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQorICAgIHN0YXRpYyBQYXNzT3du
UHRyPEdldE1ldGFkYXRhQ2FsbGJhY2s+IGNyZWF0ZShQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+
IGZpbGVzeXN0ZW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+
IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNr
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXRQYXRoQ2FsbGJhY2soZmls
ZXN5c3RlbSwgbmFtZSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSk7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgR2V0TWV0YWRhdGFDYWxsYmFjayhmaWxlc3lzdGVtLCBuYW1l
LCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKICAgICB9CiAKICAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVhZE1ldGFkYXRhKGNvbnN0IEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEpCiAgICAg
ewogICAgICAgICBBU1NFUlQoIW1ldGFkYXRhLnBsYXRmb3JtUGF0aC5pc0VtcHR5KCkpOwotICAg
ICAgICBtX2ZpbGVzeXN0ZW0tPnNjaGVkdWxlQ2FsbGJhY2sobV9zdWNjZXNzQ2FsbGJhY2sucmVs
ZWFzZSgpLCBGaWxlOjpjcmVhdGVXaXRoTmFtZShtZXRhZGF0YS5wbGF0Zm9ybVBhdGgsIG1fbmFt
ZSkpOworICAgICAgICBBU1NFUlQobWV0YWRhdGEudHlwZSA9PSBGaWxlTWV0YWRhdGE6OlR5cGVG
aWxlKTsKKyAgICAgICAgbV9maWxlc3lzdGVtLT5zY2hlZHVsZUNhbGxiYWNrKG1fc3VjY2Vzc0Nh
bGxiYWNrLnJlbGVhc2UoKSwgRmlsZTo6Y3JlYXRlRm9yRmlsZVN5c3RlbUZpbGUobV9uYW1lLCBt
ZXRhZGF0YSkpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBHZXRQYXRoQ2FsbGJhY2soUGFzc1Jl
ZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlc3lzdGVtLCBjb25zdCBTdHJpbmcmIG5hbWUsICBQYXNz
UmVmUHRyPEZpbGVDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2Fs
bGJhY2s+IGVycm9yQ2FsbGJhY2spCisgICAgR2V0TWV0YWRhdGFDYWxsYmFjayhQYXNzUmVmUHRy
PERPTUZpbGVTeXN0ZW0+IGZpbGVzeXN0ZW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgIFBhc3NSZWZQ
dHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFj
az4gZXJyb3JDYWxsYmFjaykKICAgICAgICAgOiBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZShlcnJv
ckNhbGxiYWNrKQogICAgICAgICAsIG1fZmlsZXN5c3RlbShmaWxlc3lzdGVtKQogICAgICAgICAs
IG1fbmFtZShuYW1lKQpAQCAtMTU0LDcgKzE1NSw3IEBAIHByaXZhdGU6CiAKIHZvaWQgRE9NRmls
ZVN5c3RlbTo6Y3JlYXRlRmlsZShjb25zdCBGaWxlRW50cnkqIGZpbGVFbnRyeSwgUGFzc1JlZlB0
cjxGaWxlQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrKQogewotICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5yZWFkTWV0YWRhdGEo
ZmlsZUVudHJ5LT5mdWxsUGF0aCgpLCBHZXRQYXRoQ2FsbGJhY2s6OmNyZWF0ZSh0aGlzLCBmaWxl
RW50cnktPm5hbWUoKSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSk7CisgICAgbV9h
c3luY0ZpbGVTeXN0ZW0tPnJlYWRNZXRhZGF0YShmaWxlRW50cnktPmZ1bGxQYXRoKCksIEdldE1l
dGFkYXRhQ2FsbGJhY2s6OmNyZWF0ZSh0aGlzLCBmaWxlRW50cnktPm5hbWUoKSwgc3VjY2Vzc0Nh
bGxiYWNrLCBlcnJvckNhbGxiYWNrKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuY3BwIGIv
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5jcHAKaW5kZXggZTdhOGNh
NzBiZjU3N2NlNGQ0N2U4M2JjZGZmMGEyZDk3Nzc2MjZkNS4uNGM4MDBjOTZmNGFhYWEwMGRiZTRj
YmRmZjdhN2YyOTBjYzYyNzc4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9E
T01GaWxlU3lzdGVtU3luYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxl
U3lzdGVtU3luYy5jcHAKQEAgLTcyLDM1ICs3MiwzNSBAQCBQYXNzUmVmUHRyPERpcmVjdG9yeUVu
dHJ5U3luYz4gRE9NRmlsZVN5c3RlbVN5bmM6OnJvb3QoKQogCiBuYW1lc3BhY2UgewogCi1jbGFz
cyBHZXRQYXRoSGVscGVyIDogcHVibGljIEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcyB7CitjbGFz
cyBHZXRNZXRhZGF0YUhlbHBlciA6IHB1YmxpYyBBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3Mgewog
cHVibGljOgotICAgIGNsYXNzIEdldFBhdGhSZXN1bHQgOiBwdWJsaWMgUmVmQ291bnRlZDxHZXRQ
YXRoUmVzdWx0PiB7CisgICAgY2xhc3MgR2V0TWV0YWRhdGFSZXN1bHQgOiBwdWJsaWMgUmVmQ291
bnRlZDxHZXRNZXRhZGF0YVJlc3VsdD4gewogICAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxHZXRQYXRoUmVzdWx0PiBjcmVhdGUoKQorICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxHZXRNZXRhZGF0YVJlc3VsdD4gY3JlYXRlKCkKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBHZXRQYXRoUmVzdWx0KCkpOworICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBHZXRNZXRhZGF0YVJlc3VsdCgpKTsKICAgICAgICAgfQogCiAgICAgICAg
IGJvb2wgbV9mYWlsZWQ7CiAgICAgICAgIGludCBtX2NvZGU7Ci0gICAgICAgIFN0cmluZyBtX3Bh
dGg7CisgICAgICAgIEZpbGVNZXRhZGF0YSBtX21ldGFkYXRhOwogCiAgICAgICBwcml2YXRlOgot
ICAgICAgICBHZXRQYXRoUmVzdWx0KCkKKyAgICAgICAgR2V0TWV0YWRhdGFSZXN1bHQoKQogICAg
ICAgICAgICAgOiBtX2ZhaWxlZChmYWxzZSkKICAgICAgICAgICAgICwgbV9jb2RlKDApCiAgICAg
ICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIH5HZXRQYXRoUmVzdWx0KCkKKyAgICAgICAgfkdl
dE1ldGFkYXRhUmVzdWx0KCkKICAgICAgICAgewogICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBj
bGFzcyBXVEY6OlJlZkNvdW50ZWQ8R2V0UGF0aFJlc3VsdD47CisgICAgICAgIGZyaWVuZCBjbGFz
cyBXVEY6OlJlZkNvdW50ZWQ8R2V0TWV0YWRhdGFSZXN1bHQ+OwogICAgIH07CiAKLSAgICBzdGF0
aWMgUGFzc093blB0cjxHZXRQYXRoSGVscGVyPiBjcmVhdGUoUGFzc1JlZlB0cjxHZXRQYXRoUmVz
dWx0PiByZXN1bHQpCisgICAgc3RhdGljIFBhc3NPd25QdHI8R2V0TWV0YWRhdGFIZWxwZXI+IGNy
ZWF0ZShQYXNzUmVmUHRyPEdldE1ldGFkYXRhUmVzdWx0PiByZXN1bHQpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEdldFBhdGhIZWxwZXIocmVzdWx0KSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgR2V0TWV0YWRhdGFIZWxwZXIocmVzdWx0KSk7CiAgICAgfQogCiAg
ICAgdmlydHVhbCB2b2lkIGRpZFN1Y2NlZWQoKQpAQCAtMTM0LDIxICsxMzQsMjEgQEAgcHVibGlj
OgogICAgICAgICBtX3Jlc3VsdC0+bV9jb2RlID0gY29kZTsKICAgICB9CiAKLSAgICB2aXJ0dWFs
IH5HZXRQYXRoSGVscGVyKCkKKyAgICB2aXJ0dWFsIH5HZXRNZXRhZGF0YUhlbHBlcigpCiAgICAg
ewogICAgIH0KIAogICAgIHZvaWQgZGlkUmVhZE1ldGFkYXRhKGNvbnN0IEZpbGVNZXRhZGF0YSYg
bWV0YWRhdGEpCiAgICAgewotICAgICAgICBtX3Jlc3VsdC0+bV9wYXRoID0gbWV0YWRhdGEucGxh
dGZvcm1QYXRoOworICAgICAgICBtX3Jlc3VsdC0+bV9tZXRhZGF0YSA9IG1ldGFkYXRhOwogICAg
IH0KIHByaXZhdGU6Ci0gICAgR2V0UGF0aEhlbHBlcihQYXNzUmVmUHRyPEdldFBhdGhSZXN1bHQ+
IHJlc3VsdCkKKyAgICBHZXRNZXRhZGF0YUhlbHBlcihQYXNzUmVmUHRyPEdldE1ldGFkYXRhUmVz
dWx0PiByZXN1bHQpCiAgICAgICAgIDogbV9yZXN1bHQocmVzdWx0KQogICAgIHsKICAgICB9CiAK
LSAgICBSZWZQdHI8R2V0UGF0aFJlc3VsdD4gbV9yZXN1bHQ7CisgICAgUmVmUHRyPEdldE1ldGFk
YXRhUmVzdWx0PiBtX3Jlc3VsdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlCkBAIC0xNTYsOCArMTU2
LDggQEAgcHJpdmF0ZToKIFBhc3NSZWZQdHI8RmlsZT4gRE9NRmlsZVN5c3RlbVN5bmM6OmNyZWF0
ZUZpbGUoY29uc3QgRmlsZUVudHJ5U3luYyogZmlsZUVudHJ5LCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBlYyA9IDA7Ci0gICAgUmVmUHRyPEdldFBhdGhIZWxwZXI6OkdldFBhdGhSZXN1bHQ+
IHJlc3VsdChHZXRQYXRoSGVscGVyOjpHZXRQYXRoUmVzdWx0OjpjcmVhdGUoKSk7Ci0gICAgbV9h
c3luY0ZpbGVTeXN0ZW0tPnJlYWRNZXRhZGF0YShmaWxlRW50cnktPmZ1bGxQYXRoKCksIEdldFBh
dGhIZWxwZXI6OmNyZWF0ZShyZXN1bHQpKTsKKyAgICBSZWZQdHI8R2V0TWV0YWRhdGFIZWxwZXI6
OkdldE1ldGFkYXRhUmVzdWx0PiByZXN1bHQoR2V0TWV0YWRhdGFIZWxwZXI6OkdldE1ldGFkYXRh
UmVzdWx0OjpjcmVhdGUoKSk7CisgICAgbV9hc3luY0ZpbGVTeXN0ZW0tPnJlYWRNZXRhZGF0YShm
aWxlRW50cnktPmZ1bGxQYXRoKCksIEdldE1ldGFkYXRhSGVscGVyOjpjcmVhdGUocmVzdWx0KSk7
CiAgICAgaWYgKCFtX2FzeW5jRmlsZVN5c3RlbS0+d2FpdEZvck9wZXJhdGlvblRvQ29tcGxldGUo
KSkgewogICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246OkFCT1JUX0VSUjsKICAgICAgICAgcmV0
dXJuIDA7CkBAIC0xNjYsOCArMTY2LDggQEAgUGFzc1JlZlB0cjxGaWxlPiBET01GaWxlU3lzdGVt
U3luYzo6Y3JlYXRlRmlsZShjb25zdCBGaWxlRW50cnlTeW5jKiBmaWxlRW50cnksIEUKICAgICAg
ICAgZWMgPSByZXN1bHQtPm1fY29kZTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIEFT
U0VSVCghcmVzdWx0LT5tX3BhdGguaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gRmlsZTo6Y3JlYXRl
V2l0aE5hbWUocmVzdWx0LT5tX3BhdGgsIGZpbGVFbnRyeS0+bmFtZSgpKTsKKyAgICBBU1NFUlQo
IXJlc3VsdC0+bV9tZXRhZGF0YS5wbGF0Zm9ybVBhdGguaXNFbXB0eSgpKTsKKyAgICByZXR1cm4g
RmlsZTo6Y3JlYXRlRm9yRmlsZVN5c3RlbUZpbGUoZmlsZUVudHJ5LT5uYW1lKCksIHJlc3VsdC0+
bV9tZXRhZGF0YSk7CiB9CiAKIG5hbWVzcGFjZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0ZpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmNwcAppbmRl
eCBkNDA5Yjk3MTkzMzU5NTE5ZTMwMGEwMzI5NDk3MDRmYWVmNWYzZTgyLi5kMDBjY2QzNTFmODAx
ZDRiZDllNzJmMmRjNjhiOTViNzI5NGQzMDg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0ZpbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAKQEAg
LTUxLDEzICs1MSwxMyBAQCBzdGF0aWMgUGFzc093blB0cjxCbG9iRGF0YT4gY3JlYXRlQmxvYkRh
dGFGb3JGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKIH0KIAogI2lmIEVOQUJMRShGSUxFX1NZU1RF
TSkKLXN0YXRpYyBQYXNzT3duUHRyPEJsb2JEYXRhPiBjcmVhdGVCbG9iRGF0YUZvckZpbGVTeXN0
ZW1GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWxlU3lzdGVtTmFtZSkK
K3N0YXRpYyBQYXNzT3duUHRyPEJsb2JEYXRhPiBjcmVhdGVCbG9iRGF0YUZvckZpbGVTeXN0ZW1G
aWxlKGNvbnN0IFN0cmluZyYgZmlsZVN5c3RlbU5hbWUsIGNvbnN0IEZpbGVNZXRhZGF0YSYgbWV0
YWRhdGEpCiB7CiAgICAgU3RyaW5nIHR5cGU7CiAgICAgaW50IGluZGV4ID0gZmlsZVN5c3RlbU5h
bWUucmV2ZXJzZUZpbmQoJy4nKTsKICAgICBpZiAoaW5kZXggIT0gLTEpCiAgICAgICAgIHR5cGUg
PSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRXZWxsS25vd25NSU1FVHlwZUZvckV4dGVuc2lvbihmaWxl
U3lzdGVtTmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZUJsb2JE
YXRhRm9yRmlsZVdpdGhUeXBlKHBhdGgsIHR5cGUpOworICAgIHJldHVybiBjcmVhdGVCbG9iRGF0
YUZvckZpbGVXaXRoVHlwZShtZXRhZGF0YS5wbGF0Zm9ybVBhdGgsIHR5cGUpOwogfQogI2VuZGlm
CiAKQEAgLTc0LDEyICs3NCwxNCBAQCBGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKICAg
ICA6IEJsb2IoY3JlYXRlQmxvYkRhdGFGb3JGaWxlKHBhdGgpLCAtMSkKICAgICAsIG1fcGF0aChw
YXRoKQogICAgICwgbV9uYW1lKHBhdGhHZXRGaWxlTmFtZShwYXRoKSkKKyAgICAsIG1fc25hcHNo
b3RUYWtlbihmYWxzZSkKIHsKIH0KIAogRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0eXBlKQogICAgIDogQmxvYih1cmwsIHR5cGUs
IC0xKQogICAgICwgbV9wYXRoKHBhdGgpCisgICAgLCBtX3NuYXBzaG90VGFrZW4oZmFsc2UpCiB7
CiAgICAgbV9uYW1lID0gcGF0aEdldEZpbGVOYW1lKHBhdGgpOwogICAgIC8vIEZJWE1FOiBGaWxl
IG9iamVjdCBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbiBkb2VzIG5vdCBpbmNsdWRlCkBA
IC04OCwyNiArOTAsMjMgQEAgRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiB0eXBlKQogfQogCiAjaWYgRU5BQkxFKEZJTEVfU1lTVEVN
KQotRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbmFtZSkKLSAg
ICA6IEJsb2IoY3JlYXRlQmxvYkRhdGFGb3JGaWxlU3lzdGVtRmlsZShwYXRoLCBuYW1lKSwgLTEp
Ci0gICAgLCBtX3BhdGgocGF0aCkKK0ZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQorICAgIDogQmxvYihjcmVhdGVCbG9iRGF0YUZvckZp
bGVTeXN0ZW1GaWxlKG5hbWUsIG1ldGFkYXRhKSwgLTEpCisgICAgLCBtX3BhdGgobWV0YWRhdGEu
cGxhdGZvcm1QYXRoKQogICAgICwgbV9uYW1lKG5hbWUpCisgICAgLCBtX3NuYXBzaG90VGFrZW4o
dHJ1ZSkKKyAgICAsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKG1ldGFkYXRhLm1vZGlmaWNh
dGlvblRpbWUpCisgICAgLCBtX3NuYXBzaG90U2l6ZShtZXRhZGF0YS5sZW5ndGgpCiB7CiB9CiAj
ZW5kaWYKIAotZG91YmxlIEZpbGU6Omxhc3RNb2RpZmllZERhdGUoKSBjb25zdAotewotICAgIHRp
bWVfdCBtb2RpZmljYXRpb25UaW1lOwotICAgIGlmICghZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUo
bV9wYXRoLCBtb2RpZmljYXRpb25UaW1lKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBO
ZWVkcyB0byByZXR1cm4gZXBvY2ggdGltZSBpbiBtaWxsaXNlY29uZHMgZm9yIERhdGUuCi0gICAg
cmV0dXJuIG1vZGlmaWNhdGlvblRpbWUgKiAxMDAwLjA7Ci19Ci0KIHVuc2lnbmVkIGxvbmcgbG9u
ZyBGaWxlOjpzaXplKCkgY29uc3QKIHsKKyAgICBpZiAobV9zbmFwc2hvdFRha2VuKQorICAgICAg
ICByZXR1cm4gbV9zbmFwc2hvdFNpemU7CisKKyAgICAvLyBGb3Igbm9uLXNsaWNlZC9ub24tc25h
cHNob3QgZmlsZXMgY2hhbmdpbmcgdGhpcyBtYXkgYnJlYWsgdGhlIGV4aXN0aW5nIGNvZGUgYmVo
YXZpb3IsIHNvIGZvciBub3cgd2UgbWFrZSBzeW5jaHJvbm91cyBjYWxsIHRvIGdldCB0aGUgZnJl
c2ggaW5mb3JtYXRpb24uCiAgICAgLy8gRklYTUU6IEphdmFTY3JpcHQgY2Fubm90IHJlcHJlc2Vu
dCBzaXplcyBhcyBsYXJnZSBhcyB1bnNpZ25lZCBsb25nIGxvbmcsIHdlIG5lZWQgdG8KICAgICAv
LyBjb21lIHVwIHdpdGggYW4gZXhjZXB0aW9uIHRvIHRocm93IGlmIGZpbGUgc2l6ZSBpcyBub3Qg
cmVwcmVzZW50YWJsZS4KICAgICBsb25nIGxvbmcgc2l6ZTsKQEAgLTExNiwxNyArMTE1LDE2IEBA
IHVuc2lnbmVkIGxvbmcgbG9uZyBGaWxlOjpzaXplKCkgY29uc3QKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXplKTsKIH0KIAotdm9pZCBGaWxlOjpjYXB0dXJl
U25hcHNob3QobG9uZyBsb25nJiBzbmFwc2hvdFNpemUsIGRvdWJsZSYgc25hcHNob3RNb2RpZmlj
YXRpb25UaW1lKSBjb25zdAorZG91YmxlIEZpbGU6Omxhc3RNb2RpZmllZFRpbWVJbk1pY3Jvc2Vj
b25kcygpIGNvbnN0CiB7Ci0gICAgLy8gT2J0YWlucyBhIHNuYXBzaG90IG9mIHRoZSBmaWxlIGJ5
IGNhcHR1cmluZyBpdHMgY3VycmVudCBzaXplIGFuZCBtb2RpZmljYXRpb24gdGltZS4gVGhpcyBp
cyB1c2VkIHdoZW4gd2Ugc2xpY2UgYSBmaWxlIGZvciB0aGUgZmlyc3QgdGltZS4KLSAgICAvLyBJ
ZiB3ZSBmYWlsIHRvIHJldHJpZXZlIHRoZSBzaXplIG9yIG1vZGlmaWNhdGlvbiB0aW1lLCBwcm9i
YWJseSBkdWUgdG8gdGhhdCB0aGUgZmlsZSBoYXMgYmVlbiBkZWxldGVkLCAwIHNpemUgaXMgcmV0
dXJuZWQuCi0gICAgLy8gRklYTUU6IENvbWJpbmUgZ2V0RmlsZVNpemUgYW5kIGdldEZpbGVNb2Rp
ZmljYXRpb25UaW1lIGludG8gb25lIGZpbGUgc3lzdGVtIGNhbGwuCisgICAgaWYgKG1fc25hcHNo
b3RUYWtlbikKKyAgICAgICAgcmV0dXJuIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOworCisg
ICAgLy8gRm9yIG5vbi1zbGljZWQvbm9uLXNuYXBzaG90IGZpbGVzIGNoYW5naW5nIHRoaXMgbWF5
IGJyZWFrIHRoZSBleGlzdGluZyBjb2RlIGJlaGF2aW9yLCBzbyBmb3Igbm93IHdlIG1ha2Ugc3lu
Y2hyb25vdXMgY2FsbCB0byBnZXQgdGhlIGZyZXNoIGluZm9ybWF0aW9uLgogICAgIHRpbWVfdCBt
b2RpZmljYXRpb25UaW1lOwotICAgIGlmICghZ2V0RmlsZVNpemUobV9wYXRoLCBzbmFwc2hvdFNp
emUpIHx8ICFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShtX3BhdGgsIG1vZGlmaWNhdGlvblRpbWUp
KSB7Ci0gICAgICAgIHNuYXBzaG90U2l6ZSA9IDA7Ci0gICAgICAgIHNuYXBzaG90TW9kaWZpY2F0
aW9uVGltZSA9IDA7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGlt
ZSA9IG1vZGlmaWNhdGlvblRpbWU7CisgICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZSht
X3BhdGgsIG1vZGlmaWNhdGlvblRpbWUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
bW9kaWZpY2F0aW9uVGltZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0ZpbGUuaAppbmRleCAxM2E5MWZlM2U0MWY5NWZiOWIyM2FjZDZiMGVlYmRjMTU0NDNkNGUzLi5l
NmFkNzg4ZWYxZTk3OGRkMGY0YzE0YTUwZGIwZTBlM2U0MGFhYzU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Zp
bGUuaApAQCAtMjcsMTIgKzI3LDE0IEBACiAjZGVmaW5lIEZpbGVfaAogCiAjaW5jbHVkZSAiQmxv
Yi5oIgorI2luY2x1ZGUgIkZpbGVNZXRhZGF0YS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZpbGVNZXRhZGF0YTsKIGNsYXNz
IEtVUkw7CiAKIGNsYXNzIEZpbGUgOiBwdWJsaWMgQmxvYiB7CkBAIC01MywyNyArNTUsMzAgQEAg
cHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi0gICAgLy8gQ3JlYXRl
IGEgZmlsZSB3aXRoIGEgbmFtZSBleHBvc2VkIHRvIHRoZSBhdXRob3IgKHZpYSBGaWxlLm5hbWUg
YW5kIGFzc29jaWF0ZWQgRE9NIHByb3BlcnRpZXMpIHRoYXQgZGlmZmVycyBmcm9tIHRoZSBvbmUg
cHJvdmlkZWQgaW4gdGhlIHBhdGguCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZT4gY3JlYXRl
V2l0aE5hbWUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgLy8g
Q3JlYXRlIGEgZmlsZSBmb3IgRmlsZVN5c3RlbSBBUEkgd2l0aCBhIHNuYXBzaG90IG1ldGFkYXRh
IGFuZCBhIG5hbWUgZXhwb3NlZCB0byB0aGUgYXV0aG9yICh2aWEgRmlsZS5uYW1lIGFuZCBhc3Nv
Y2lhdGVkIERPTSBwcm9wZXJ0aWVzKSB0aGF0IG1heSBkaWZmZXIgZnJvbSB0aGUgb25lIHByb3Zp
ZGVkIGluIHRoZSBwYXRoLgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGU+IGNyZWF0ZUZvckZp
bGVTeXN0ZW1GaWxlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmlsZU1ldGFkYXRhJiBtZXRh
ZGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsZShwYXRoLCBuYW1l
KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsZShuYW1lLCBtZXRhZGF0YSkpOwog
ICAgIH0KICNlbmRpZgogCisgICAgLy8gVGhpcyBtYXkgaW52b2x2ZSBzeW5jaHJvbm91cyBmaWxl
IG9wZXJhdGlvbiBpZiB0aGUgZmlsZSBkb2VzIG5vdCBoYXZlIGEgc25hcHNob3QgaW5mby4KICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBi
b29sIGlzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgY29uc3Qg
RmlsZSogYXNGaWxlKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQogCiAgICAgY29uc3QgU3RyaW5n
JiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CiAgICAgY29uc3QgU3RyaW5nJiBuYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgZG91YmxlIGxhc3RNb2RpZmllZERhdGUo
KSBjb25zdDsKKyAgICBkb3VibGUgbGFzdE1vZGlmaWVkRGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGxh
c3RNb2RpZmllZFRpbWVJbk1pY3Jvc2Vjb25kcygpICogMTAwMC4wOyB9CisKKyAgICAvLyBUaGlz
IG1heSBpbnZvbHZlIHN5bmNocm9ub3VzIGZpbGUgb3BlcmF0aW9uIGlmIHRoZSBmaWxlIGRvZXMg
bm90IGhhdmUgYSBzbmFwc2hvdCBpbmZvLgorICAgIGRvdWJsZSBsYXN0TW9kaWZpZWRUaW1lSW5N
aWNyb3NlY29uZHMoKSBjb25zdDsKKwogI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQogICAg
IC8vIFJldHVybnMgdGhlIHJlbGF0aXZlIHBhdGggb2YgdGhpcyBmaWxlIGluIHRoZSBjb250ZXh0
IG9mIGEgZGlyZWN0b3J5IHNlbGVjdGlvbi4KICAgICBjb25zdCBTdHJpbmcmIHdlYmtpdFJlbGF0
aXZlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRpdmVQYXRoOyB9CiAjZW5kaWYKIAotICAg
IC8vIE5vdGUgdGhhdCB0aGlzIGludm9sdmVzIHN5bmNocm9ub3VzIGZpbGUgb3BlcmF0aW9uLiBU
aGluayB0d2ljZSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgotICAgIHZvaWQgY2FwdHVy
ZVNuYXBzaG90KGxvbmcgbG9uZyYgc25hcHNob3RTaXplLCBkb3VibGUmIHNuYXBzaG90TW9kaWZp
Y2F0aW9uVGltZSkgY29uc3Q7Ci0KICAgICAvLyBGSVhNRTogb2Jzb2xldGUgYXR0cmlidXRlcy4g
VG8gYmUgcmVtb3ZlZC4KICAgICBjb25zdCBTdHJpbmcmIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1
cm4gbmFtZSgpOyB9CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIGZpbGVTaXplKCkgY29uc3QgeyBy
ZXR1cm4gc2l6ZSgpOyB9CkBAIC04NSw3ICs5MCw3IEBAIHByaXZhdGU6CiAgICAgRmlsZShjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IEtVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlKTsK
IAogI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKLSAgICBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBGaWxlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
RmlsZU1ldGFkYXRhJik7CiAjZW5kaWYKIAogICAgIFN0cmluZyBtX3BhdGg7CkBAIC05Myw2ICs5
OCwxMSBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQogICAgIFN0cmlu
ZyBtX3JlbGF0aXZlUGF0aDsKICNlbmRpZgorCisgICAgLy8gS2VlcHMgYXJvdW5kIHRoZSBtZXRh
ZGF0YSBpbmZvcm1hdGlvbiBmb3IgYSBzbmFwc2hvdCBmaWxlLgorICAgIG11dGFibGUgYm9vbCBt
X3NuYXBzaG90VGFrZW47CisgICAgbXV0YWJsZSBkb3VibGUgbV9zbmFwc2hvdE1vZGlmaWNhdGlv
blRpbWU7CisgICAgbXV0YWJsZSBsb25nIGxvbmcgbV9zbmFwc2hvdFNpemU7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAppbmRl
eCAwN2M0YjY3NDYxMTExNjFlZmYyOTk1OWFiMWQyZmJkYzFjMDEzMTJmLi40ZGJjZTdkZmI3ZDcy
YjJkMmQ2OGNlNzEzYjRhYWYzYzNkZDZmMDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0ZpbGVSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJl
YWRlci5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBGaWxlUmVhZGVyOjpyZWFkQXNBcnJheUJ1
ZmZlcihCbG9iKiBibG9iLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBpZiAoIWJsb2IpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyBh
cnJheSBidWZmZXI6ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
LCBibG9iLT5pc0ZpbGUoKSA/IHN0YXRpY19jYXN0PEZpbGUqPihibG9iKS0+cGF0aCgpLnV0Zjgo
KS5kYXRhKCkgOiAiIik7CisgICAgTE9HKEZpbGVBUEksICJGaWxlUmVhZGVyOiByZWFkaW5nIGFz
IGFycmF5IGJ1ZmZlcjogJXMgJXNcbiIsIGJsb2ItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksIGJsb2ItPmFzRmlsZSgpID8gYmxvYi0+YXNGaWxlKCktPnBhdGgoKS51dGY4KCkuZGF0YSgp
IDogIiIpOwogCiAgICAgcmVhZEludGVybmFsKGJsb2IsIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRB
c0FycmF5QnVmZmVyLCBlYyk7CiB9CkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBGaWxlUmVhZGVy
OjpyZWFkQXNCaW5hcnlTdHJpbmcoQmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAg
aWYgKCFibG9iKQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFk
ZXI6IHJlYWRpbmcgYXMgYmluYXJ5OiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgYmxvYi0+aXNGaWxlKCkgPyBzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYiktPnBh
dGgoKS51dGY4KCkuZGF0YSgpIDogIiIpOworICAgIExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjog
cmVhZGluZyBhcyBiaW5hcnk6ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCBibG9iLT5hc0ZpbGUoKSA/IGJsb2ItPmFzRmlsZSgpLT5wYXRoKCkudXRmOCgpLmRh
dGEoKSA6ICIiKTsKIAogICAgIHJlYWRJbnRlcm5hbChibG9iLCBGaWxlUmVhZGVyTG9hZGVyOjpS
ZWFkQXNCaW5hcnlTdHJpbmcsIGVjKTsKIH0KQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEZpbGVS
ZWFkZXI6OnJlYWRBc1RleHQoQmxvYiogYmxvYiwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgRXhj
ZXB0aW9uQ29kZSYgZQogICAgIGlmICghYmxvYikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9H
KEZpbGVBUEksICJGaWxlUmVhZGVyOiByZWFkaW5nIGFzIHRleHQ6ICVzICVzXG4iLCBibG9iLT51
cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBibG9iLT5pc0ZpbGUoKSA/IHN0YXRpY19jYXN0
PEZpbGUqPihibG9iKS0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkgOiAiIik7CisgICAgTE9HKEZpbGVB
UEksICJGaWxlUmVhZGVyOiByZWFkaW5nIGFzIHRleHQ6ICVzICVzXG4iLCBibG9iLT51cmwoKS5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCBibG9iLT5hc0ZpbGUoKSA/IGJsb2ItPmFzRmlsZSgpLT5w
YXRoKCkudXRmOCgpLmRhdGEoKSA6ICIiKTsKIAogICAgIG1fZW5jb2RpbmcgPSBlbmNvZGluZzsK
ICAgICByZWFkSW50ZXJuYWwoYmxvYiwgRmlsZVJlYWRlckxvYWRlcjo6UmVhZEFzVGV4dCwgZWMp
OwpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6cmVhZEFzRGF0YVVSTChCbG9i
KiBibG9iLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBpZiAoIWJsb2IpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyBkYXRhIFVSTDog
JXMgJXNcbiIsIGJsb2ItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGJsb2ItPmlzRmls
ZSgpID8gc3RhdGljX2Nhc3Q8RmlsZSo+KGJsb2IpLT5wYXRoKCkudXRmOCgpLmRhdGEoKSA6ICIi
KTsKKyAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgZGF0YSBVUkw6ICVz
ICVzXG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBibG9iLT5hc0ZpbGUo
KSA/IGJsb2ItPmFzRmlsZSgpLT5wYXRoKCkudXRmOCgpLmRhdGEoKSA6ICIiKTsKIAogICAgIHJl
YWRJbnRlcm5hbChibG9iLCBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkQXNEYXRhVVJMLCBlYyk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuY3BwCmluZGV4IGE4
MTBhZDhmNTQyZDE5ZjE2YzUzY2ExNzdkZDMwZDU1NjFmMWUxOTYuLjk4YTg5YjIzODZmMWVhNzZl
NjgwM2YzZTQ2ODE0YWMzOWYzYzgxMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvV2ViS2l0QmxvYkJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2Vi
S2l0QmxvYkJ1aWxkZXIuY3BwCkBAIC0xMDEsMjEgKzEwMSwxOCBAQCB2b2lkIFdlYktpdEJsb2JC
dWlsZGVyOjphcHBlbmQoQmxvYiogYmxvYikKIHsKICAgICBpZiAoIWJsb2IpCiAgICAgICAgIHJl
dHVybjsKLSAgICBpZiAoYmxvYi0+aXNGaWxlKCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIGJsb2Ig
aXMgZmlsZSB0aGF0IGlzIG5vdCBzbmFwc2hvdGVkLCBjYXB0dXJlIHRoZSBzbmFwc2hvdCBub3cu
Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGludm9sdmVzIHN5bmNocm9ub3VzIGZpbGUgb3BlcmF0
aW9uLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIG1ha2UgaXQgYXN5bmNocm9ub3VzLgot
ICAgICAgICBGaWxlKiBmaWxlID0gc3RhdGljX2Nhc3Q8RmlsZSo+KGJsb2IpOwotICAgICAgICBs
b25nIGxvbmcgc25hcHNob3RTaXplOwotICAgICAgICBkb3VibGUgc25hcHNob3RNb2RpZmljYXRp
b25UaW1lOwotICAgICAgICBmaWxlLT5jYXB0dXJlU25hcHNob3Qoc25hcHNob3RTaXplLCBzbmFw
c2hvdE1vZGlmaWNhdGlvblRpbWUpOwotCi0gICAgICAgIG1fc2l6ZSArPSBzbmFwc2hvdFNpemU7
Ci0gICAgICAgIG1faXRlbXMuYXBwZW5kKEJsb2JEYXRhSXRlbShmaWxlLT5wYXRoKCksIDAsIHNu
YXBzaG90U2l6ZSwgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgbG9uZyBsb25nIGJsb2JTaXplID0gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihibG9iLT5z
aXplKCkpOwotICAgICAgICBtX3NpemUgKz0gYmxvYlNpemU7CisgICAgY29uc3QgRmlsZSogZmls
ZSA9IGJsb2ItPmFzRmlsZSgpOworCisgICAgLy8gSWYgdGhlIGJsb2IgaXMgZmlsZSB0aGF0IGlz
IG5vdCBzbmFwc2hvdGVkLCBvYnRhaW4gdGhlIHNpemUgYW5kIGxhc3QgbW9kaWZpY2F0aW9uIHRp
bWUgYXR0YWNoIHRoZSBpbmZvIHRvIHRoZSBibG9iIGRhdGEgaXRlbS4KKyAgICAvLyBGSVhNRTog
Q2FsbGluZyBzaXplKCkgYW5kIGxhc3RNb2RpZmllZFRpbWVJbk1pY3Jvc2Vjb25kcygpIG1heSBp
bnZvbHZlIHN5bmNocm9ub3VzIGZpbGUgb3BlcmF0aW9uLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQg
aG93IHRvIG1ha2UgaXQgYXN5bmNocm9ub3VzIG9yIG1ha2UgRmlsZS9CbG9iIGFjdCBhcyBzbmFw
c2hvdCBhbGwgdGhlIHRpbWUgYXMgdGhlIG5ldyBkcmFmdCBzcGVjaWZpZXMuCisKKyAgICBsb25n
IGxvbmcgYmxvYlNpemUgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGJsb2ItPnNpemUoKSk7Cisg
ICAgbV9zaXplICs9IGJsb2JTaXplOworCisgICAgaWYgKGZpbGUpCisgICAgICAgIG1faXRlbXMu
YXBwZW5kKEJsb2JEYXRhSXRlbShmaWxlLT5wYXRoKCksIDAsIGJsb2JTaXplLCBmaWxlLT5sYXN0
TW9kaWZpZWRUaW1lSW5NaWNyb3NlY29uZHMoKSkpOworICAgIGVsc2UKICAgICAgICAgbV9pdGVt
cy5hcHBlbmQoQmxvYkRhdGFJdGVtKGJsb2ItPnVybCgpLCAwLCBibG9iU2l6ZSkpOwotICAgIH0K
IH0KIAogUGFzc1JlZlB0cjxCbG9iPiBXZWJLaXRCbG9iQnVpbGRlcjo6Z2V0QmxvYihjb25zdCBT
dHJpbmcmIGNvbnRlbnRUeXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmNwcAppbmRl
eCAzYTI4MGZlM2I1NDBkMmVjOGZjZjdiOWNhOTE5OGQyNjMwMTg2Zjc3Li5hNWJmYjg4ZGZiNWNi
MjhkOGEzZGMyNDRhNTFmMTQ3OTdkNjMyYWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9t
aXVtLmNwcApAQCAtOTEsMTUgKzkxLDE1IEBAIHZvaWQgRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJv
bWl1bTo6ZGVsZXRlSXRlbSh1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlCiAKICAg
ICBBU1NFUlQoaXRlbS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRGaWxlKTsKICAg
ICBSZWZQdHI8QmxvYj4gYmxvYiA9IGl0ZW0tPmdldEFzRmlsZSgpOwotICAgIGlmICghYmxvYiB8
fCAhYmxvYi0+aXNGaWxlKCkpCisgICAgaWYgKCFibG9iIHx8ICFibG9iLT5hc0ZpbGUoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgbV9pdGVtcy5jbGVhcigpOwogICAgIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBmaWxlbmFtZXMgPSBkYXRhT2JqZWN0LT5maWxlbmFtZXMoKTsKICAgICBWZWN0b3I8
U3RyaW5nPiBjb3BpZWRGaWxlbmFtZXM7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxl
bmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGZpbGVuYW1lc1tpXSAhPSBzdGF0aWNf
Y2FzdDxGaWxlKj4oYmxvYi5nZXQoKSktPnBhdGgoKSkKLSAgICAgICAgICAgIGNvcGllZEZpbGVu
YW1lcy5hcHBlbmQoc3RhdGljX2Nhc3Q8RmlsZSo+KGJsb2IuZ2V0KCkpLT5wYXRoKCkpOworICAg
ICAgICBpZiAoZmlsZW5hbWVzW2ldICE9IGJsb2ItPmFzRmlsZSgpLT5wYXRoKCkpCisgICAgICAg
ICAgICBjb3BpZWRGaWxlbmFtZXMuYXBwZW5kKGJsb2ItPmFzRmlsZSgpLT5wYXRoKCkpOwogICAg
IH0KICAgICBkYXRhT2JqZWN0LT5zZXRGaWxlbmFtZXMoY29waWVkRmlsZW5hbWVzKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKaW5kZXggOTY2NWJi
ZDFjNGQ4ZjUyN2ViMjBkODMzZjgyZmRiOWRlNjg0NGFmNi4uMzc4NWRjMzgzNTNkY2I0YThjZjg5
OGY2NmQ5YzIyZDcyMTFhNTU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9Gb3JtRGF0YS5jcHAKQEAgLTIwMiw5ICsyMDIsOSBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmRL
ZXlWYWx1ZVBhaXJJdGVtcyhjb25zdCBGb3JtRGF0YUxpc3QmIGxpc3QsIGNvbnN0IFRleHRFbmNv
ZAogICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBibG9iLCB0aGVuIHdlIGFs
c28gbmVlZCB0byBpbmNsdWRlIHRoZSBmaWxlbmFtZQogICAgICAgICAgICAgaWYgKHZhbHVlLmJs
b2IoKSkgewogICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZS5ibG9iKCktPmlzRmlsZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJs
b2IoKS0+YXNGaWxlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGZpbGUgYmxvYiwg
dXNlIHRoZSBmaWxlbmFtZSAob3IgcmVsYXRpdmUgcGF0aCBpZiBpdCBpcyBwcmVzZW50KSBhcyB0
aGUgbmFtZS4KLSAgICAgICAgICAgICAgICAgICAgRmlsZSogZmlsZSA9IHN0YXRpY19jYXN0PEZp
bGUqPih2YWx1ZS5ibG9iKCkpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxlKiBmaWxl
ID0gdmFsdWUuYmxvYigpLT5hc0ZpbGUoKTsKICNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBmaWxlLT53ZWJraXRS
ZWxhdGl2ZVBhdGgoKS5pc0VtcHR5KCkgPyBmaWxlLT5uYW1lKCkgOiBmaWxlLT53ZWJraXRSZWxh
dGl2ZVBhdGgoKTsKICNlbHNlCkBAIC0yNDUsOSArMjQ1LDkgQEAgdm9pZCBGb3JtRGF0YTo6YXBw
ZW5kS2V5VmFsdWVQYWlySXRlbXMoY29uc3QgRm9ybURhdGFMaXN0JiBsaXN0LCBjb25zdCBUZXh0
RW5jb2QKICAgICAgICAgICAgIC8vIEFwcGVuZCBib2R5CiAgICAgICAgICAgICBhcHBlbmREYXRh
KGhlYWRlci5kYXRhKCksIGhlYWRlci5zaXplKCkpOwogICAgICAgICAgICAgaWYgKHZhbHVlLmJs
b2IoKSkgewotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCktPmlzRmlsZSgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJsb2IoKS0+YXNGaWxlKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gRG8gbm90IGFkZCB0aGUgZmlsZSBpZiB0aGUgcGF0aCBpcyBlbXB0eS4KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNfY2FzdDxGaWxlKj4odmFsdWUuYmxvYigpKS0+
cGF0aCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5ibG9iKCkt
PmFzRmlsZSgpLT5wYXRoKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kRmlsZShzdGF0aWNfY2FzdDxGaWxlKj4odmFsdWUuYmxvYigpKS0+cGF0aCgpLCBzaG91bGRH
ZW5lcmF0ZUZpbGUpOwogICAgICAgICAgICAgICAgIH0KICNpZiBFTkFCTEUoQkxPQikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IDFlYTZkZDQ1YTUwOGM5ZTRiY2E4NGY4
OTMxNmUyNGExYWMyMzZjN2QuLjgzZTJiOWIzMTI0MTRkYTI5ZDMwOTJmOGI2OGE4NTQ1ZThiYWZh
MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtNTkyLDggKzU5Miw4
IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoQmxvYiogYm9keSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ugc2V0IGEgQ29udGVudC1UeXBlIGlmIG9u
ZSBpcyBub3Qgc2V0LgogICAgICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIHVwbG9hZGlu
ZyBidW5kbGVzLgogICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5ID0gRm9ybURhdGE6OmNyZWF0
ZSgpOwotICAgICAgICBpZiAoYm9keS0+aXNGaWxlKCkpCi0gICAgICAgICAgICBtX3JlcXVlc3RF
bnRpdHlCb2R5LT5hcHBlbmRGaWxlKHN0YXRpY19jYXN0PEZpbGUqPihib2R5KS0+cGF0aCgpKTsK
KyAgICAgICAgaWYgKGJvZHktPmFzRmlsZSgpKQorICAgICAgICAgICAgbV9yZXF1ZXN0RW50aXR5
Qm9keS0+YXBwZW5kRmlsZShib2R5LT5hc0ZpbGUoKS0+cGF0aCgpKTsKICNpZiBFTkFCTEUoQkxP
QikKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5k
QmxvYihib2R5LT51cmwoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128519</attachid>
            <date>2012-02-23 11:49:03 -0800</date>
            <delta_ts>2012-05-11 03:44:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78879-20120224044901.patch</filename>
            <type>text/plain</type>
            <size>32153</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NTEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjRmNTIxOGQzY2UxNTE4
MWU2NzFmMDg0OWI4MDFjYmFlNDY4N2UyMC4uYTNhNjcyMjRlODE3NzAzNmQ2ZjJjNGU3YmViZjgx
ZTk1NDNjMDFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEyLTAyLTIzICBLaW51
a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAgICAgICBDYXB0dXJlIEZpbGUg
c25hcHNob3QgaW5mbyBhdCBpdHMgY3JlYXRpb24gdGltZSBmb3IgZmlsZXMgZnJvbSBGaWxlU3lz
dGVtIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Nzg4NzkKKworICAgICAgICBUaGlzIHBhdGNoIGluY2x1ZGVzIGZvbGxvd2luZyBjaGFuZ2VzOgor
ICAgICAgICAtIENoYW5nZWQgdGhlIEZpbGUgY29uc3RydWN0b3IgZm9yIGZpbGVzIGluIEZpbGVT
eXN0ZW0gQVBJIHRvIHRha2UgaXRzCisgICAgICAgICAgbWV0YWRhdGEgKGluY2x1ZGluZyBzaXpl
IGFuZCBsYXN0TW9kaWZpZWRUaW1lKSBzbyB0aGF0IGFjY2Vzc2luZworICAgICAgICAgIEJsb2Iu
c2l6ZSBhbmQgRmlsZS5sYXN0TW9kaWZpZWREYXRlIHdvbid0IHRyaWdnZXIgc3luY2hyb25vdXMg
ZmlsZQorICAgICAgICAgIG9wZXJhdGlvbnMgZm9yIHRoZW0uICAoVGhpcyBzaG91bGQgYmUgb2sg
YXMgRmlsZSBvYmplY3QgaXMKKyAgICAgICAgICBjb25zaWRlcmVkIGFzICdzbmFwc2hvdCcgb2Yg
dGhlIGZpbGUpCisgICAgICAgIC0gUmVtb3ZlZCBjYXB0dXJlU25hcHNob3QoKSBtZXRob2Qgc2lu
Y2UgY2FsbGluZyBzaXplKCkgYW5kIGxhc3RNb2RpZmllZERhdGUoKSBjb3VsZCBkbyB0aGUgc2Ft
ZS4KKyAgICAgICAgLSBBbHNvIG1hZGUgb3RoZXIgbWlub3IgcmVmYWN0b3JpbmcvY2xlYW51cHMu
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDog
ZmFzdC9maWxlc3lzdGVtL2ZpbGUtcmVhZC1hZnRlci13cml0ZS5odG1sCisKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhCbG9iQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRv
VjgpOgorICAgICAgICAqIGZpbGVhcGkvQmxvYi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9i
Ojp3ZWJraXRTbGljZSk6CisgICAgICAgICogZmlsZWFwaS9CbG9iLmg6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iOjphc0ZpbGUpOiBBZGRlZCAob2Jzb2xldGluZyBpc0ZpbGUoKSBib29sZWFuIG1l
dGhvZCkKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZpbGVTeXN0ZW06OmNyZWF0ZUZpbGUpOgorICAg
ICAgICAqIGZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RE9NRmlsZVN5c3RlbVN5bmM6OmNyZWF0ZUZpbGUpOgorICAgICAgICAqIGZpbGVhcGkvRmlsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCbG9iRGF0YUZvckZpbGVTeXN0ZW1GaWxlKTog
Q2hhbmdlZCB0byB0YWtlIHNuYXBzaG90IG1ldGFkYXRhIGluZm8uCisgICAgICAgIChXZWJDb3Jl
OjpGaWxlOjpzaXplKTogQ2hhbmdlZCB0byB1c2Ugc25hcHNob3QgZGF0YSBpZiBhdmFpbGFibGUu
CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpsYXN0TW9kaWZpZWRUaW1lSW5NaWNyb3NlY29uZHMp
OgorICAgICAgICAqIGZpbGVhcGkvRmlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6Y3Jl
YXRlRm9yRmlsZVN5c3RlbUZpbGUpOiBBZGRlZCAocmVuYW1lZCBmcm9tIGNyZWF0ZVdpdGhOYW1l
KCkpCisgICAgICAgIChXZWJDb3JlOjpGaWxlOjphc0ZpbGUpOiBBZGRlZCAob2Jzb2xldGluZyBp
c0ZpbGUoKSBib29sZWFuIG1ldGhvZCkKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6Omxhc3RNb2Rp
ZmllZERhdGUpOiBDaGFuZ2VkIHRvIHVzZSBzbmFwc2hvdCBkYXRhIGlmIGF2YWlsYWJsZS4KKyAg
ICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJl
YWRlcjo6cmVhZEFzQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6
cmVhZEFzQmluYXJ5U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRB
c1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6cmVhZEFzRGF0YVVSTCk6Cisg
ICAgICAgICogZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJLaXRCbG9iQnVpbGRlcjo6YXBwZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmRlbGV0ZUl0ZW0pOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFw
cGVuZEtleVZhbHVlUGFpckl0ZW1zKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNlbmQpOgorCiAyMDEyLTAyLTIy
ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiBjb25zb2xlIGRvZXNuJ3Qgc2hvdyBwcm9wZXJseSBhcnJheXMgZnJvbSB3aGljaCB0
YWlsIHZhbHVlcyBoYXZlIGJlZW4gZGVsZXRlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQmxvYkN1c3RvbS5jcHAKaW5kZXggMDQ5NDU2MDQzOGMzMzIyNmQxMDc5YzliMDhjZTNmMmVi
YWU4ZTAzNS4uYmEwOGRkOTEzYjNhY2E1NDFlN2ViYTAyNjcwMDkwMjQwOWUwMWQ5NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCkBAIC00NSw3ICs0NSw3
IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEJsb2IqIGJsb2IpCiAgICAgaWYgKCFibG9iKQogICAgICAgICByZXR1cm4ganNO
dWxsKCk7CiAKLSAgICBpZiAoYmxvYi0+aXNGaWxlKCkpCisgICAgaWYgKGJsb2ItPmFzRmlsZSgp
KQogICAgICAgICByZXR1cm4gQ1JFQVRFX0RPTV9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwg
RmlsZSwgYmxvYik7CiAKICAgICByZXR1cm4gQ1JFQVRFX0RPTV9XUkFQUEVSKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgQmxvYiwgYmxvYik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhCbG9iQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwCmluZGV4IDY4NTM1NzhlOTI3YTdlOTIzYTMwYjRkNzE2
YWMyZWM4YzM3NGZjMDEuLmU5M2ZkMDNjYzFhNjFiMWIyOTA0OWEwYzI1YzU5ZDFmMjJkMDEwMWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0
b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0
b20uY3BwCkBAIC00Myw3ICs0Myw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEJsb2Iq
IGltcGwpCiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKIAotICAg
IGlmIChpbXBsLT5pc0ZpbGUoKSkKKyAgICBpZiAoaW1wbC0+YXNGaWxlKCkpCiAgICAgICAgIHJl
dHVybiB0b1Y4KHN0YXRpY19jYXN0PEZpbGUqPihpbXBsKSk7CiAKICAgICByZXR1cm4gVjhCbG9i
Ojp3cmFwKGltcGwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKaW5kZXggM2IzM2NkNjZkZThkYmE3
OTFkNmZkNWM5MzQ1MWQzYzBkZjdlZWQyZC4uM2EyYjI2ZGExZjBmZWZlYzdlYzliYWU3MDIzOGQw
NDI4NTExMWZiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwCkBAIC02NSwxNyArNjUsMTEgQEAg
QmxvYjo6fkJsb2IoKQogI2lmIEVOQUJMRShCTE9CKQogUGFzc1JlZlB0cjxCbG9iPiBCbG9iOjp3
ZWJraXRTbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBlbmQsIGNvbnN0IFN0cmluZyYg
Y29udGVudFR5cGUpIGNvbnN0CiB7Ci0gICAgLy8gV2hlbiB3ZSBzbGljZSBhIGZpbGUgZm9yIHRo
ZSBmaXJzdCB0aW1lLCB3ZSBvYnRhaW4gYSBzbmFwc2hvdCBvZiB0aGUgZmlsZSBieSBjYXB0dXJp
bmcgaXRzIGN1cnJlbnQgc2l6ZSBhbmQgbW9kaWZpY2F0aW9uIHRpbWUuCisgICAgLy8gV2hlbiB3
ZSBzbGljZSBhIGZpbGUgKGkuZS4gYXNGaWxlKCkgIT0gMCkgd2Ugb2J0YWluIGEgc25hcHNob3Qg
c3RhdGUgb2YgdGhlIGZpbGUgYnkgY2FwdHVyaW5nIGl0cyBjdXJyZW50IHNpemUgYW5kIGxhc3Qg
bW9kaWZpY2F0aW9uIHRpbWUuCiAgICAgLy8gVGhlIG1vZGlmaWNhdGlvbiB0aW1lIHdpbGwgYmUg
dXNlZCB0byB2ZXJpZnkgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3QsIHdoZW4g
dGhlIHVuZGVybHlpbmcgZGF0YSBhcmUgYWNjZXNzZWQuCi0gICAgbG9uZyBsb25nIHNpemU7Ci0g
ICAgZG91YmxlIG1vZGlmaWNhdGlvblRpbWU7Ci0gICAgaWYgKGlzRmlsZSgpKQotICAgICAgICAv
LyBGSVhNRTogVGhpcyBpbnZvbHZlcyBzeW5jaHJvbm91cyBmaWxlIG9wZXJhdGlvbi4gV2UgbmVl
ZCB0byBmaWd1cmUgb3V0IGhvdyB0byBtYWtlIGl0IGFzeW5jaHJvbm91cy4KLSAgICAgICAgc3Rh
dGljX2Nhc3Q8Y29uc3QgRmlsZSo+KHRoaXMpLT5jYXB0dXJlU25hcHNob3Qoc2l6ZSwgbW9kaWZp
Y2F0aW9uVGltZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX3NpemUgIT0gLTEpOwot
ICAgICAgICBzaXplID0gbV9zaXplOwotICAgIH0KKyAgICAvLyBGSVhNRTogQ2FsbGluZyBzaXpl
KCkgYW5kIGxhc3RNb2RpZmllZFRpbWVJbk1pY3Jvc2Vjb25kcygpIG1heSBpbnZvbHZlIHN5bmNo
cm9ub3VzIGZpbGUgb3BlcmF0aW9uLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIG1ha2Ug
aXQgYXN5bmNocm9ub3VzIG9yIG1ha2UgRmlsZS9CbG9iIGFjdCBhcyBzbmFwc2hvdCBhbGwgdGhl
IHRpbWUgYXMgdGhlIG5ldyBkcmFmdCBzcGVjaWZpZXMuCisKKyAgICBjb25zdCBsb25nIGxvbmcg
c2l6ZSA9IHRoaXMtPnNpemUoKTsKIAogICAgIC8vIENvbnZlcnQgdGhlIG5lZ2F0aXZlIHZhbHVl
IHRoYXQgaXMgdXNlZCB0byBzZWxlY3QgZnJvbSB0aGUgZW5kLgogICAgIGlmIChzdGFydCA8IDAp
CkBAIC05OSw4ICs5Myw5IEBAIFBhc3NSZWZQdHI8QmxvYj4gQmxvYjo6d2Via2l0U2xpY2UobG9u
ZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgZW5kLCBjb25zdCBTdHJpbmcmCiAgICAgbG9uZyBsb25n
IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgIE93blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBC
bG9iRGF0YTo6Y3JlYXRlKCk7CiAgICAgYmxvYkRhdGEtPnNldENvbnRlbnRUeXBlKGNvbnRlbnRU
eXBlKTsKLSAgICBpZiAoaXNGaWxlKCkpCi0gICAgICAgIGJsb2JEYXRhLT5hcHBlbmRGaWxlKHN0
YXRpY19jYXN0PGNvbnN0IEZpbGUqPih0aGlzKS0+cGF0aCgpLCBzdGFydCwgbGVuZ3RoLCBtb2Rp
ZmljYXRpb25UaW1lKTsKKyAgICBjb25zdCBGaWxlKiBmaWxlID0gYXNGaWxlKCk7CisgICAgaWYg
KGZpbGUpCisgICAgICAgIGJsb2JEYXRhLT5hcHBlbmRGaWxlKGZpbGUtPnBhdGgoKSwgc3RhcnQs
IGxlbmd0aCwgZmlsZS0+bGFzdE1vZGlmaWVkVGltZUluTWljcm9zZWNvbmRzKCkpOwogICAgIGVs
c2UKICAgICAgICAgYmxvYkRhdGEtPmFwcGVuZEJsb2IobV9pbnRlcm5hbFVSTCwgc3RhcnQsIGxl
bmd0aCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oIGIvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgKaW5kZXggYmNhOTM5ODIzNmQ4NmViNGE4ZDQzNDg2
MTI3ODAzMmVjNTAyYmRjNi4uNThhYTdlNjdiY2E5MDk1ODBkNDcwOGQ1NGM0MTNiZmFlM2ZhYzlk
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgKQEAgLTQxLDYgKzQxLDggQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitjbGFzcyBGaWxlOworCiBjbGFzcyBCbG9iIDogcHVibGljIFJlZkNvdW50ZWQ8
QmxvYj4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShQYXNz
T3duUHRyPEJsb2JEYXRhPiBibG9iRGF0YSwgbG9uZyBsb25nIHNpemUpCkBAIC02MCw3ICs2Miw3
IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KIAogICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KG1fc2l6ZSk7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNGaWxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGNv
bnN0IEZpbGUqIGFzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogI2lmIEVOQUJMRShCTE9C
KQogICAgIFBhc3NSZWZQdHI8QmxvYj4gd2Via2l0U2xpY2UobG9uZyBsb25nIHN0YXJ0ID0gMCwg
bG9uZyBsb25nIGVuZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8bG9uZyBsb25nPjo6bWF4KCksIGNv
bnN0IFN0cmluZyYgY29udGVudFR5cGUgPSBTdHJpbmcoKSkgY29uc3Q7CkBAIC03Niw3ICs3OCw3
IEBAIHByb3RlY3RlZDoKICAgICAvLyBhcyBhbiBpZGVudGlmaWVyIGZvciB0aGlzIGJsb2IuIFRo
ZSBpbnRlcm5hbCBVUkwgaXMgbmV2ZXIgdXNlZCB0byBzb3VyY2UgdGhlIGJsb2IncyBjb250ZW50
CiAgICAgLy8gaW50byBhbiBIVE1MIG9yIGZvciBGaWxlUmVhZCdpbmcsIHB1YmxpYyBibG9iIFVS
THMgbXVzdCBiZSB1c2VkIGZvciB0aG9zZSBwdXJwb3Nlcy4KICAgICBLVVJMIG1faW50ZXJuYWxV
Ukw7Ci0gICAgCisKICAgICBTdHJpbmcgbV90eXBlOwogICAgIGxvbmcgbG9uZyBtX3NpemU7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5jcHAKaW5kZXggOTc5OWUxMjA3
OWU4YWVkNDIzNTdhODE2ZmJjNjE1YmQ5YmJhMGI0NC4uMzk3ZjlhNTMwMjY1YzI1M2U1ZGFjNTY2
MTkwMzkwNmQ3M2JjMmY1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01G
aWxlU3lzdGVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0u
Y3BwCkBAIC0xMjMsMjEgKzEyMywyMiBAQCB2b2lkIERPTUZpbGVTeXN0ZW06OmNyZWF0ZVdyaXRl
cihjb25zdCBGaWxlRW50cnkqIGZpbGVFbnRyeSwgUGFzc1JlZlB0cjxGaWxlV3JpdAogCiBuYW1l
c3BhY2UgewogCi1jbGFzcyBHZXRQYXRoQ2FsbGJhY2sgOiBwdWJsaWMgRmlsZVN5c3RlbUNhbGxi
YWNrc0Jhc2UgeworY2xhc3MgR2V0TWV0YWRhdGFDYWxsYmFjayA6IHB1YmxpYyBGaWxlU3lzdGVt
Q2FsbGJhY2tzQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8R2V0UGF0aENh
bGxiYWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlc3lzdGVtLCBjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ss
IFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKKyAgICBzdGF0aWMgUGFz
c093blB0cjxHZXRNZXRhZGF0YUNhbGxiYWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxET01GaWxlU3lz
dGVtPiBmaWxlc3lzdGVtLCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8RmlsZUNhbGxi
YWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxs
YmFjaykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgR2V0UGF0aENhbGxiYWNr
KGZpbGVzeXN0ZW0sIG5hbWUsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdldE1ldGFkYXRhQ2FsbGJhY2soZmlsZXN5c3RlbSwg
bmFtZSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSk7CiAgICAgfQogCiAgICAgdmly
dHVhbCB2b2lkIGRpZFJlYWRNZXRhZGF0YShjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKCFtZXRhZGF0YS5wbGF0Zm9ybVBhdGguaXNFbXB0eSgpKTsK
LSAgICAgICAgbV9maWxlc3lzdGVtLT5zY2hlZHVsZUNhbGxiYWNrKG1fc3VjY2Vzc0NhbGxiYWNr
LnJlbGVhc2UoKSwgRmlsZTo6Y3JlYXRlV2l0aE5hbWUobWV0YWRhdGEucGxhdGZvcm1QYXRoLCBt
X25hbWUpKTsKKyAgICAgICAgQVNTRVJUKG1ldGFkYXRhLnR5cGUgPT0gRmlsZU1ldGFkYXRhOjpU
eXBlRmlsZSk7CisgICAgICAgIG1fZmlsZXN5c3RlbS0+c2NoZWR1bGVDYWxsYmFjayhtX3N1Y2Nl
c3NDYWxsYmFjay5yZWxlYXNlKCksIEZpbGU6OmNyZWF0ZUZvckZpbGVTeXN0ZW1GaWxlKG1fbmFt
ZSwgbWV0YWRhdGEpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgR2V0UGF0aENhbGxiYWNrKFBh
c3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZXN5c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCAg
UGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJv
ckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQorICAgIEdldE1ldGFkYXRhQ2FsbGJhY2soUGFzc1Jl
ZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlc3lzdGVtLCBjb25zdCBTdHJpbmcmIG5hbWUsICBQYXNz
UmVmUHRyPEZpbGVDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2Fs
bGJhY2s+IGVycm9yQ2FsbGJhY2spCiAgICAgICAgIDogRmlsZVN5c3RlbUNhbGxiYWNrc0Jhc2Uo
ZXJyb3JDYWxsYmFjaykKICAgICAgICAgLCBtX2ZpbGVzeXN0ZW0oZmlsZXN5c3RlbSkKICAgICAg
ICAgLCBtX25hbWUobmFtZSkKQEAgLTE1NCw3ICsxNTUsNyBAQCBwcml2YXRlOgogCiB2b2lkIERP
TUZpbGVTeXN0ZW06OmNyZWF0ZUZpbGUoY29uc3QgRmlsZUVudHJ5KiBmaWxlRW50cnksIFBhc3NS
ZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxs
YmFjaz4gZXJyb3JDYWxsYmFjaykKIHsKLSAgICBtX2FzeW5jRmlsZVN5c3RlbS0+cmVhZE1ldGFk
YXRhKGZpbGVFbnRyeS0+ZnVsbFBhdGgoKSwgR2V0UGF0aENhbGxiYWNrOjpjcmVhdGUodGhpcywg
ZmlsZUVudHJ5LT5uYW1lKCksIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOworICAg
IG1fYXN5bmNGaWxlU3lzdGVtLT5yZWFkTWV0YWRhdGEoZmlsZUVudHJ5LT5mdWxsUGF0aCgpLCBH
ZXRNZXRhZGF0YUNhbGxiYWNrOjpjcmVhdGUodGhpcywgZmlsZUVudHJ5LT5uYW1lKCksIHN1Y2Nl
c3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuY3BwCmluZGV4IGU3
YThjYTcwYmY1NzdjZTRkNDdlODNiY2RmZjBhMmQ5Nzc3NjI2ZDUuLjRjODAwYzk2ZjRhYWFhMDBk
YmU0Y2JkZmY3YTdmMjkwY2M2Mjc3ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvRE9NRmlsZVN5c3RlbVN5bmMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9N
RmlsZVN5c3RlbVN5bmMuY3BwCkBAIC03MiwzNSArNzIsMzUgQEAgUGFzc1JlZlB0cjxEaXJlY3Rv
cnlFbnRyeVN5bmM+IERPTUZpbGVTeXN0ZW1TeW5jOjpyb290KCkKIAogbmFtZXNwYWNlIHsKIAot
Y2xhc3MgR2V0UGF0aEhlbHBlciA6IHB1YmxpYyBBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3Mgewor
Y2xhc3MgR2V0TWV0YWRhdGFIZWxwZXIgOiBwdWJsaWMgQXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tz
IHsKIHB1YmxpYzoKLSAgICBjbGFzcyBHZXRQYXRoUmVzdWx0IDogcHVibGljIFJlZkNvdW50ZWQ8
R2V0UGF0aFJlc3VsdD4geworICAgIGNsYXNzIEdldE1ldGFkYXRhUmVzdWx0IDogcHVibGljIFJl
ZkNvdW50ZWQ8R2V0TWV0YWRhdGFSZXN1bHQ+IHsKICAgICAgIHB1YmxpYzoKLSAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8R2V0UGF0aFJlc3VsdD4gY3JlYXRlKCkKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8R2V0TWV0YWRhdGFSZXN1bHQ+IGNyZWF0ZSgpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2V0UGF0aFJlc3VsdCgpKTsKKyAgICAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgR2V0TWV0YWRhdGFSZXN1bHQoKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBib29sIG1fZmFpbGVkOwogICAgICAgICBpbnQgbV9jb2RlOwotICAgICAgICBTdHJpbmcg
bV9wYXRoOworICAgICAgICBGaWxlTWV0YWRhdGEgbV9tZXRhZGF0YTsKIAogICAgICAgcHJpdmF0
ZToKLSAgICAgICAgR2V0UGF0aFJlc3VsdCgpCisgICAgICAgIEdldE1ldGFkYXRhUmVzdWx0KCkK
ICAgICAgICAgICAgIDogbV9mYWlsZWQoZmFsc2UpCiAgICAgICAgICAgICAsIG1fY29kZSgwKQog
ICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB+R2V0UGF0aFJlc3VsdCgpCisgICAgICAg
IH5HZXRNZXRhZGF0YVJlc3VsdCgpCiAgICAgICAgIHsKICAgICAgICAgfQotICAgICAgICBmcmll
bmQgY2xhc3MgV1RGOjpSZWZDb3VudGVkPEdldFBhdGhSZXN1bHQ+OworICAgICAgICBmcmllbmQg
Y2xhc3MgV1RGOjpSZWZDb3VudGVkPEdldE1ldGFkYXRhUmVzdWx0PjsKICAgICB9OwogCi0gICAg
c3RhdGljIFBhc3NPd25QdHI8R2V0UGF0aEhlbHBlcj4gY3JlYXRlKFBhc3NSZWZQdHI8R2V0UGF0
aFJlc3VsdD4gcmVzdWx0KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPEdldE1ldGFkYXRhSGVscGVy
PiBjcmVhdGUoUGFzc1JlZlB0cjxHZXRNZXRhZGF0YVJlc3VsdD4gcmVzdWx0KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXRQYXRoSGVscGVyKHJlc3VsdCkpOworICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEdldE1ldGFkYXRhSGVscGVyKHJlc3VsdCkpOwogICAgIH0K
IAogICAgIHZpcnR1YWwgdm9pZCBkaWRTdWNjZWVkKCkKQEAgLTEzNCwyMSArMTM0LDIxIEBAIHB1
YmxpYzoKICAgICAgICAgbV9yZXN1bHQtPm1fY29kZSA9IGNvZGU7CiAgICAgfQogCi0gICAgdmly
dHVhbCB+R2V0UGF0aEhlbHBlcigpCisgICAgdmlydHVhbCB+R2V0TWV0YWRhdGFIZWxwZXIoKQog
ICAgIHsKICAgICB9CiAKICAgICB2b2lkIGRpZFJlYWRNZXRhZGF0YShjb25zdCBGaWxlTWV0YWRh
dGEmIG1ldGFkYXRhKQogICAgIHsKLSAgICAgICAgbV9yZXN1bHQtPm1fcGF0aCA9IG1ldGFkYXRh
LnBsYXRmb3JtUGF0aDsKKyAgICAgICAgbV9yZXN1bHQtPm1fbWV0YWRhdGEgPSBtZXRhZGF0YTsK
ICAgICB9CiBwcml2YXRlOgotICAgIEdldFBhdGhIZWxwZXIoUGFzc1JlZlB0cjxHZXRQYXRoUmVz
dWx0PiByZXN1bHQpCisgICAgR2V0TWV0YWRhdGFIZWxwZXIoUGFzc1JlZlB0cjxHZXRNZXRhZGF0
YVJlc3VsdD4gcmVzdWx0KQogICAgICAgICA6IG1fcmVzdWx0KHJlc3VsdCkKICAgICB7CiAgICAg
fQogCi0gICAgUmVmUHRyPEdldFBhdGhSZXN1bHQ+IG1fcmVzdWx0OworICAgIFJlZlB0cjxHZXRN
ZXRhZGF0YVJlc3VsdD4gbV9yZXN1bHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZQpAQCAtMTU2LDgg
KzE1Niw4IEBAIHByaXZhdGU6CiBQYXNzUmVmUHRyPEZpbGU+IERPTUZpbGVTeXN0ZW1TeW5jOjpj
cmVhdGVGaWxlKGNvbnN0IEZpbGVFbnRyeVN5bmMqIGZpbGVFbnRyeSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgZWMgPSAwOwotICAgIFJlZlB0cjxHZXRQYXRoSGVscGVyOjpHZXRQYXRoUmVz
dWx0PiByZXN1bHQoR2V0UGF0aEhlbHBlcjo6R2V0UGF0aFJlc3VsdDo6Y3JlYXRlKCkpOwotICAg
IG1fYXN5bmNGaWxlU3lzdGVtLT5yZWFkTWV0YWRhdGEoZmlsZUVudHJ5LT5mdWxsUGF0aCgpLCBH
ZXRQYXRoSGVscGVyOjpjcmVhdGUocmVzdWx0KSk7CisgICAgUmVmUHRyPEdldE1ldGFkYXRhSGVs
cGVyOjpHZXRNZXRhZGF0YVJlc3VsdD4gcmVzdWx0KEdldE1ldGFkYXRhSGVscGVyOjpHZXRNZXRh
ZGF0YVJlc3VsdDo6Y3JlYXRlKCkpOworICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5yZWFkTWV0YWRh
dGEoZmlsZUVudHJ5LT5mdWxsUGF0aCgpLCBHZXRNZXRhZGF0YUhlbHBlcjo6Y3JlYXRlKHJlc3Vs
dCkpOwogICAgIGlmICghbV9hc3luY0ZpbGVTeXN0ZW0tPndhaXRGb3JPcGVyYXRpb25Ub0NvbXBs
ZXRlKCkpIHsKICAgICAgICAgZWMgPSBGaWxlRXhjZXB0aW9uOjpBQk9SVF9FUlI7CiAgICAgICAg
IHJldHVybiAwOwpAQCAtMTY2LDggKzE2Niw4IEBAIFBhc3NSZWZQdHI8RmlsZT4gRE9NRmlsZVN5
c3RlbVN5bmM6OmNyZWF0ZUZpbGUoY29uc3QgRmlsZUVudHJ5U3luYyogZmlsZUVudHJ5LCBFCiAg
ICAgICAgIGVjID0gcmVzdWx0LT5tX2NvZGU7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAg
ICBBU1NFUlQoIXJlc3VsdC0+bV9wYXRoLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEZpbGU6OmNy
ZWF0ZVdpdGhOYW1lKHJlc3VsdC0+bV9wYXRoLCBmaWxlRW50cnktPm5hbWUoKSk7CisgICAgQVNT
RVJUKCFyZXN1bHQtPm1fbWV0YWRhdGEucGxhdGZvcm1QYXRoLmlzRW1wdHkoKSk7CisgICAgcmV0
dXJuIEZpbGU6OmNyZWF0ZUZvckZpbGVTeXN0ZW1GaWxlKGZpbGVFbnRyeS0+bmFtZSgpLCByZXN1
bHQtPm1fbWV0YWRhdGEpOwogfQogCiBuYW1lc3BhY2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9GaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAK
aW5kZXggZDQwOWI5NzE5MzM1OTUxOWUzMDBhMDMyOTQ5NzA0ZmFlZjVmM2U4Mi4uZDAwY2NkMzUx
ZjgwMWQ0YmQ5ZTcyZjJkYzY4Yjk1YjcyOTRkMzA4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9GaWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuY3Bw
CkBAIC01MSwxMyArNTEsMTMgQEAgc3RhdGljIFBhc3NPd25QdHI8QmxvYkRhdGE+IGNyZWF0ZUJs
b2JEYXRhRm9yRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiB9CiAKICNpZiBFTkFCTEUoRklMRV9T
WVNURU0pCi1zdGF0aWMgUGFzc093blB0cjxCbG9iRGF0YT4gY3JlYXRlQmxvYkRhdGFGb3JGaWxl
U3lzdGVtRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsZVN5c3RlbU5h
bWUpCitzdGF0aWMgUGFzc093blB0cjxCbG9iRGF0YT4gY3JlYXRlQmxvYkRhdGFGb3JGaWxlU3lz
dGVtRmlsZShjb25zdCBTdHJpbmcmIGZpbGVTeXN0ZW1OYW1lLCBjb25zdCBGaWxlTWV0YWRhdGEm
IG1ldGFkYXRhKQogewogICAgIFN0cmluZyB0eXBlOwogICAgIGludCBpbmRleCA9IGZpbGVTeXN0
ZW1OYW1lLnJldmVyc2VGaW5kKCcuJyk7CiAgICAgaWYgKGluZGV4ICE9IC0xKQogICAgICAgICB0
eXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0V2VsbEtub3duTUlNRVR5cGVGb3JFeHRlbnNpb24o
ZmlsZVN5c3RlbU5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSkpOwotICAgIHJldHVybiBjcmVhdGVC
bG9iRGF0YUZvckZpbGVXaXRoVHlwZShwYXRoLCB0eXBlKTsKKyAgICByZXR1cm4gY3JlYXRlQmxv
YkRhdGFGb3JGaWxlV2l0aFR5cGUobWV0YWRhdGEucGxhdGZvcm1QYXRoLCB0eXBlKTsKIH0KICNl
bmRpZgogCkBAIC03NCwxMiArNzQsMTQgQEAgRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgp
CiAgICAgOiBCbG9iKGNyZWF0ZUJsb2JEYXRhRm9yRmlsZShwYXRoKSwgLTEpCiAgICAgLCBtX3Bh
dGgocGF0aCkKICAgICAsIG1fbmFtZShwYXRoR2V0RmlsZU5hbWUocGF0aCkpCisgICAgLCBtX3Nu
YXBzaG90VGFrZW4oZmFsc2UpCiB7CiB9CiAKIEZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICA6IEJsb2IodXJsLCB0
eXBlLCAtMSkKICAgICAsIG1fcGF0aChwYXRoKQorICAgICwgbV9zbmFwc2hvdFRha2VuKGZhbHNl
KQogewogICAgIG1fbmFtZSA9IHBhdGhHZXRGaWxlTmFtZShwYXRoKTsKICAgICAvLyBGSVhNRTog
RmlsZSBvYmplY3Qgc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24gZG9lcyBub3QgaW5jbHVk
ZQpAQCAtODgsMjYgKzkwLDIzIEBAIEZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdHlwZSkKIH0KIAogI2lmIEVOQUJMRShGSUxFX1NZ
U1RFTSkKLUZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIG5hbWUp
Ci0gICAgOiBCbG9iKGNyZWF0ZUJsb2JEYXRhRm9yRmlsZVN5c3RlbUZpbGUocGF0aCwgbmFtZSks
IC0xKQotICAgICwgbV9wYXRoKHBhdGgpCitGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSkKKyAgICA6IEJsb2IoY3JlYXRlQmxvYkRhdGFG
b3JGaWxlU3lzdGVtRmlsZShuYW1lLCBtZXRhZGF0YSksIC0xKQorICAgICwgbV9wYXRoKG1ldGFk
YXRhLnBsYXRmb3JtUGF0aCkKICAgICAsIG1fbmFtZShuYW1lKQorICAgICwgbV9zbmFwc2hvdFRh
a2VuKHRydWUpCisgICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShtZXRhZGF0YS5tb2Rp
ZmljYXRpb25UaW1lKQorICAgICwgbV9zbmFwc2hvdFNpemUobWV0YWRhdGEubGVuZ3RoKQogewog
fQogI2VuZGlmCiAKLWRvdWJsZSBGaWxlOjpsYXN0TW9kaWZpZWREYXRlKCkgY29uc3QKLXsKLSAg
ICB0aW1lX3QgbW9kaWZpY2F0aW9uVGltZTsKLSAgICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25U
aW1lKG1fcGF0aCwgbW9kaWZpY2F0aW9uVGltZSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
Ly8gTmVlZHMgdG8gcmV0dXJuIGVwb2NoIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGZvciBEYXRlLgot
ICAgIHJldHVybiBtb2RpZmljYXRpb25UaW1lICogMTAwMC4wOwotfQotCiB1bnNpZ25lZCBsb25n
IGxvbmcgRmlsZTo6c2l6ZSgpIGNvbnN0CiB7CisgICAgaWYgKG1fc25hcHNob3RUYWtlbikKKyAg
ICAgICAgcmV0dXJuIG1fc25hcHNob3RTaXplOworCisgICAgLy8gRm9yIG5vbi1zbGljZWQvbm9u
LXNuYXBzaG90IGZpbGVzIGNoYW5naW5nIHRoaXMgbWF5IGJyZWFrIHRoZSBleGlzdGluZyBjb2Rl
IGJlaGF2aW9yLCBzbyBmb3Igbm93IHdlIG1ha2Ugc3luY2hyb25vdXMgY2FsbCB0byBnZXQgdGhl
IGZyZXNoIGluZm9ybWF0aW9uLgogICAgIC8vIEZJWE1FOiBKYXZhU2NyaXB0IGNhbm5vdCByZXBy
ZXNlbnQgc2l6ZXMgYXMgbGFyZ2UgYXMgdW5zaWduZWQgbG9uZyBsb25nLCB3ZSBuZWVkIHRvCiAg
ICAgLy8gY29tZSB1cCB3aXRoIGFuIGV4Y2VwdGlvbiB0byB0aHJvdyBpZiBmaWxlIHNpemUgaXMg
bm90IHJlcHJlc2VudGFibGUuCiAgICAgbG9uZyBsb25nIHNpemU7CkBAIC0xMTYsMTcgKzExNSwx
NiBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRmlsZTo6c2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSk7CiB9CiAKLXZvaWQgRmlsZTo6Y2Fw
dHVyZVNuYXBzaG90KGxvbmcgbG9uZyYgc25hcHNob3RTaXplLCBkb3VibGUmIHNuYXBzaG90TW9k
aWZpY2F0aW9uVGltZSkgY29uc3QKK2RvdWJsZSBGaWxlOjpsYXN0TW9kaWZpZWRUaW1lSW5NaWNy
b3NlY29uZHMoKSBjb25zdAogewotICAgIC8vIE9idGFpbnMgYSBzbmFwc2hvdCBvZiB0aGUgZmls
ZSBieSBjYXB0dXJpbmcgaXRzIGN1cnJlbnQgc2l6ZSBhbmQgbW9kaWZpY2F0aW9uIHRpbWUuIFRo
aXMgaXMgdXNlZCB3aGVuIHdlIHNsaWNlIGEgZmlsZSBmb3IgdGhlIGZpcnN0IHRpbWUuCi0gICAg
Ly8gSWYgd2UgZmFpbCB0byByZXRyaWV2ZSB0aGUgc2l6ZSBvciBtb2RpZmljYXRpb24gdGltZSwg
cHJvYmFibHkgZHVlIHRvIHRoYXQgdGhlIGZpbGUgaGFzIGJlZW4gZGVsZXRlZCwgMCBzaXplIGlz
IHJldHVybmVkLgotICAgIC8vIEZJWE1FOiBDb21iaW5lIGdldEZpbGVTaXplIGFuZCBnZXRGaWxl
TW9kaWZpY2F0aW9uVGltZSBpbnRvIG9uZSBmaWxlIHN5c3RlbSBjYWxsLgorICAgIGlmIChtX3Nu
YXBzaG90VGFrZW4pCisgICAgICAgIHJldHVybiBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsK
KworICAgIC8vIEZvciBub24tc2xpY2VkL25vbi1zbmFwc2hvdCBmaWxlcyBjaGFuZ2luZyB0aGlz
IG1heSBicmVhayB0aGUgZXhpc3RpbmcgY29kZSBiZWhhdmlvciwgc28gZm9yIG5vdyB3ZSBtYWtl
IHN5bmNocm9ub3VzIGNhbGwgdG8gZ2V0IHRoZSBmcmVzaCBpbmZvcm1hdGlvbi4KICAgICB0aW1l
X3QgbW9kaWZpY2F0aW9uVGltZTsKLSAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0aCwgc25hcHNo
b3RTaXplKSB8fCAhZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUobV9wYXRoLCBtb2RpZmljYXRpb25U
aW1lKSkgewotICAgICAgICBzbmFwc2hvdFNpemUgPSAwOwotICAgICAgICBzbmFwc2hvdE1vZGlm
aWNhdGlvblRpbWUgPSAwOwotICAgIH0gZWxzZQotICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlv
blRpbWUgPSBtb2RpZmljYXRpb25UaW1lOworICAgIGlmICghZ2V0RmlsZU1vZGlmaWNhdGlvblRp
bWUobV9wYXRoLCBtb2RpZmljYXRpb25UaW1lKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIG1vZGlmaWNhdGlvblRpbWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5oIGIvU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9GaWxlLmgKaW5kZXggMTNhOTFmZTNlNDFmOTVmYjliMjNhY2Q2YjBlZWJkYzE1NDQzZDRl
My4uZTZhZDc4OGVmMWU5NzhkZDBmNGMxNGE1MGRiMGUwZTNlNDBhYWM1NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9GaWxlLmgKQEAgLTI3LDEyICsyNywxNCBAQAogI2RlZmluZSBGaWxlX2gKIAogI2luY2x1ZGUg
IkJsb2IuaCIKKyNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGaWxlTWV0YWRhdGE7CiBj
bGFzcyBLVVJMOwogCiBjbGFzcyBGaWxlIDogcHVibGljIEJsb2IgewpAQCAtNTMsMjcgKzU1LDMw
IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotICAgIC8vIENy
ZWF0ZSBhIGZpbGUgd2l0aCBhIG5hbWUgZXhwb3NlZCB0byB0aGUgYXV0aG9yICh2aWEgRmlsZS5u
YW1lIGFuZCBhc3NvY2lhdGVkIERPTSBwcm9wZXJ0aWVzKSB0aGF0IGRpZmZlcnMgZnJvbSB0aGUg
b25lIHByb3ZpZGVkIGluIHRoZSBwYXRoLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGU+IGNy
ZWF0ZVdpdGhOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAg
IC8vIENyZWF0ZSBhIGZpbGUgZm9yIEZpbGVTeXN0ZW0gQVBJIHdpdGggYSBzbmFwc2hvdCBtZXRh
ZGF0YSBhbmQgYSBuYW1lIGV4cG9zZWQgdG8gdGhlIGF1dGhvciAodmlhIEZpbGUubmFtZSBhbmQg
YXNzb2NpYXRlZCBET00gcHJvcGVydGllcykgdGhhdCBtYXkgZGlmZmVyIGZyb20gdGhlIG9uZSBw
cm92aWRlZCBpbiB0aGUgcGF0aC4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlPiBjcmVhdGVG
b3JGaWxlU3lzdGVtRmlsZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZpbGVNZXRhZGF0YSYg
bWV0YWRhdGEpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUocGF0aCwg
bmFtZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUobmFtZSwgbWV0YWRhdGEp
KTsKICAgICB9CiAjZW5kaWYKIAorICAgIC8vIFRoaXMgbWF5IGludm9sdmUgc3luY2hyb25vdXMg
ZmlsZSBvcGVyYXRpb24gaWYgdGhlIGZpbGUgZG9lcyBub3QgaGF2ZSBhIHNuYXBzaG90IGluZm8u
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1
YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGNv
bnN0IEZpbGUqIGFzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KIAogICAgIGNvbnN0IFN0
cmluZyYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogICAgIGNvbnN0IFN0cmluZyYg
bmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIGRvdWJsZSBsYXN0TW9kaWZpZWRE
YXRlKCkgY29uc3Q7CisgICAgZG91YmxlIGxhc3RNb2RpZmllZERhdGUoKSBjb25zdCB7IHJldHVy
biBsYXN0TW9kaWZpZWRUaW1lSW5NaWNyb3NlY29uZHMoKSAqIDEwMDAuMDsgfQorCisgICAgLy8g
VGhpcyBtYXkgaW52b2x2ZSBzeW5jaHJvbm91cyBmaWxlIG9wZXJhdGlvbiBpZiB0aGUgZmlsZSBk
b2VzIG5vdCBoYXZlIGEgc25hcHNob3QgaW5mby4KKyAgICBkb3VibGUgbGFzdE1vZGlmaWVkVGlt
ZUluTWljcm9zZWNvbmRzKCkgY29uc3Q7CisKICNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkK
ICAgICAvLyBSZXR1cm5zIHRoZSByZWxhdGl2ZSBwYXRoIG9mIHRoaXMgZmlsZSBpbiB0aGUgY29u
dGV4dCBvZiBhIGRpcmVjdG9yeSBzZWxlY3Rpb24uCiAgICAgY29uc3QgU3RyaW5nJiB3ZWJraXRS
ZWxhdGl2ZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3JlbGF0aXZlUGF0aDsgfQogI2VuZGlmCiAK
LSAgICAvLyBOb3RlIHRoYXQgdGhpcyBpbnZvbHZlcyBzeW5jaHJvbm91cyBmaWxlIG9wZXJhdGlv
bi4gVGhpbmsgdHdpY2UgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAgICB2b2lkIGNh
cHR1cmVTbmFwc2hvdChsb25nIGxvbmcmIHNuYXBzaG90U2l6ZSwgZG91YmxlJiBzbmFwc2hvdE1v
ZGlmaWNhdGlvblRpbWUpIGNvbnN0OwotCiAgICAgLy8gRklYTUU6IG9ic29sZXRlIGF0dHJpYnV0
ZXMuIFRvIGJlIHJlbW92ZWQuCiAgICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG5hbWUoKTsgfQogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBmaWxlU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIHNpemUoKTsgfQpAQCAtODUsNyArOTAsNyBAQCBwcml2YXRlOgogICAgIEZpbGUo
Y29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlw
ZSk7CiAKICNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi0gICAgRmlsZShjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgRmlsZShjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IEZpbGVNZXRhZGF0YSYpOwogI2VuZGlmCiAKICAgICBTdHJpbmcgbV9wYXRoOwpAQCAtOTMs
NiArOTgsMTEgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKICAgICBT
dHJpbmcgbV9yZWxhdGl2ZVBhdGg7CiAjZW5kaWYKKworICAgIC8vIEtlZXBzIGFyb3VuZCB0aGUg
bWV0YWRhdGEgaW5mb3JtYXRpb24gZm9yIGEgc25hcHNob3QgZmlsZS4KKyAgICBtdXRhYmxlIGJv
b2wgbV9zbmFwc2hvdFRha2VuOworICAgIG11dGFibGUgZG91YmxlIG1fc25hcHNob3RNb2RpZmlj
YXRpb25UaW1lOworICAgIG11dGFibGUgbG9uZyBsb25nIG1fc25hcHNob3RTaXplOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9GaWxlUmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAK
aW5kZXggMDdjNGI2NzQ2MTExMTYxZWZmMjk5NTlhYjFkMmZiZGMxYzAxMzEyZi4uNGRiY2U3ZGZi
N2Q3MmIyZDJkNjhjZTcxM2I0YWFmM2MzZGQ2ZjAxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXIuY3BwCkBAIC05NSw3ICs5NSw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6cmVhZEFzQXJy
YXlCdWZmZXIoQmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgaWYgKCFibG9iKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcg
YXMgYXJyYXkgYnVmZmVyOiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSwgYmxvYi0+aXNGaWxlKCkgPyBzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYiktPnBhdGgoKS51
dGY4KCkuZGF0YSgpIDogIiIpOworICAgIExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGlu
ZyBhcyBhcnJheSBidWZmZXI6ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCBibG9iLT5hc0ZpbGUoKSA/IGJsb2ItPmFzRmlsZSgpLT5wYXRoKCkudXRmOCgpLmRh
dGEoKSA6ICIiKTsKIAogICAgIHJlYWRJbnRlcm5hbChibG9iLCBGaWxlUmVhZGVyTG9hZGVyOjpS
ZWFkQXNBcnJheUJ1ZmZlciwgZWMpOwogfQpAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgRmlsZVJl
YWRlcjo6cmVhZEFzQmluYXJ5U3RyaW5nKEJsb2IqIGJsb2IsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ICAgIGlmICghYmxvYikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9HKEZpbGVBUEksICJGaWxl
UmVhZGVyOiByZWFkaW5nIGFzIGJpbmFyeTogJXMgJXNcbiIsIGJsb2ItPnVybCgpLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCksIGJsb2ItPmlzRmlsZSgpID8gc3RhdGljX2Nhc3Q8RmlsZSo+KGJsb2Ip
LT5wYXRoKCkudXRmOCgpLmRhdGEoKSA6ICIiKTsKKyAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFk
ZXI6IHJlYWRpbmcgYXMgYmluYXJ5OiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgYmxvYi0+YXNGaWxlKCkgPyBibG9iLT5hc0ZpbGUoKS0+cGF0aCgpLnV0Zjgo
KS5kYXRhKCkgOiAiIik7CiAKICAgICByZWFkSW50ZXJuYWwoYmxvYiwgRmlsZVJlYWRlckxvYWRl
cjo6UmVhZEFzQmluYXJ5U3RyaW5nLCBlYyk7CiB9CkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBG
aWxlUmVhZGVyOjpyZWFkQXNUZXh0KEJsb2IqIGJsb2IsIGNvbnN0IFN0cmluZyYgZW5jb2Rpbmcs
IEV4Y2VwdGlvbkNvZGUmIGUKICAgICBpZiAoIWJsb2IpCiAgICAgICAgIHJldHVybjsKIAotICAg
IExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyB0ZXh0OiAlcyAlc1xuIiwgYmxv
Yi0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgYmxvYi0+aXNGaWxlKCkgPyBzdGF0aWNf
Y2FzdDxGaWxlKj4oYmxvYiktPnBhdGgoKS51dGY4KCkuZGF0YSgpIDogIiIpOworICAgIExPRyhG
aWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyB0ZXh0OiAlcyAlc1xuIiwgYmxvYi0+dXJs
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgYmxvYi0+YXNGaWxlKCkgPyBibG9iLT5hc0ZpbGUo
KS0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkgOiAiIik7CiAKICAgICBtX2VuY29kaW5nID0gZW5jb2Rp
bmc7CiAgICAgcmVhZEludGVybmFsKGJsb2IsIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRBc1RleHQs
IGVjKTsKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIEZpbGVSZWFkZXI6OnJlYWRBc0RhdGFVUkwo
QmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgaWYgKCFibG9iKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgZGF0YSBV
Ukw6ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBibG9iLT5p
c0ZpbGUoKSA/IHN0YXRpY19jYXN0PEZpbGUqPihibG9iKS0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkg
OiAiIik7CisgICAgTE9HKEZpbGVBUEksICJGaWxlUmVhZGVyOiByZWFkaW5nIGFzIGRhdGEgVVJM
OiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgYmxvYi0+YXNG
aWxlKCkgPyBibG9iLT5hc0ZpbGUoKS0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkgOiAiIik7CiAKICAg
ICByZWFkSW50ZXJuYWwoYmxvYiwgRmlsZVJlYWRlckxvYWRlcjo6UmVhZEFzRGF0YVVSTCwgZWMp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmNwcAppbmRl
eCBhODEwYWQ4ZjU0MmQxOWYxNmM1M2NhMTc3ZGQzMGQ1NTYxZjFlMTk2Li45OGE4OWIyMzg2ZjFl
YTc2ZTY4MDNmM2U0NjgxNGFjMzlmM2M4MTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L1dlYktpdEJsb2JCdWlsZGVyLmNwcApAQCAtMTAxLDIxICsxMDEsMTggQEAgdm9pZCBXZWJLaXRC
bG9iQnVpbGRlcjo6YXBwZW5kKEJsb2IqIGJsb2IpCiB7CiAgICAgaWYgKCFibG9iKQogICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKGJsb2ItPmlzRmlsZSgpKSB7Ci0gICAgICAgIC8vIElmIHRoZSBi
bG9iIGlzIGZpbGUgdGhhdCBpcyBub3Qgc25hcHNob3RlZCwgY2FwdHVyZSB0aGUgc25hcHNob3Qg
bm93LgotICAgICAgICAvLyBGSVhNRTogVGhpcyBpbnZvbHZlcyBzeW5jaHJvbm91cyBmaWxlIG9w
ZXJhdGlvbi4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBtYWtlIGl0IGFzeW5jaHJvbm91
cy4KLSAgICAgICAgRmlsZSogZmlsZSA9IHN0YXRpY19jYXN0PEZpbGUqPihibG9iKTsKLSAgICAg
ICAgbG9uZyBsb25nIHNuYXBzaG90U2l6ZTsKLSAgICAgICAgZG91YmxlIHNuYXBzaG90TW9kaWZp
Y2F0aW9uVGltZTsKLSAgICAgICAgZmlsZS0+Y2FwdHVyZVNuYXBzaG90KHNuYXBzaG90U2l6ZSwg
c25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKLQotICAgICAgICBtX3NpemUgKz0gc25hcHNob3RT
aXplOwotICAgICAgICBtX2l0ZW1zLmFwcGVuZChCbG9iRGF0YUl0ZW0oZmlsZS0+cGF0aCgpLCAw
LCBzbmFwc2hvdFNpemUsIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGxvbmcgbG9uZyBibG9iU2l6ZSA9IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oYmxv
Yi0+c2l6ZSgpKTsKLSAgICAgICAgbV9zaXplICs9IGJsb2JTaXplOworICAgIGNvbnN0IEZpbGUq
IGZpbGUgPSBibG9iLT5hc0ZpbGUoKTsKKworICAgIC8vIElmIHRoZSBibG9iIGlzIGZpbGUgdGhh
dCBpcyBub3Qgc25hcHNob3RlZCwgb2J0YWluIHRoZSBzaXplIGFuZCBsYXN0IG1vZGlmaWNhdGlv
biB0aW1lIGF0dGFjaCB0aGUgaW5mbyB0byB0aGUgYmxvYiBkYXRhIGl0ZW0uCisgICAgLy8gRklY
TUU6IENhbGxpbmcgc2l6ZSgpIGFuZCBsYXN0TW9kaWZpZWRUaW1lSW5NaWNyb3NlY29uZHMoKSBt
YXkgaW52b2x2ZSBzeW5jaHJvbm91cyBmaWxlIG9wZXJhdGlvbi4gV2UgbmVlZCB0byBmaWd1cmUg
b3V0IGhvdyB0byBtYWtlIGl0IGFzeW5jaHJvbm91cyBvciBtYWtlIEZpbGUvQmxvYiBhY3QgYXMg
c25hcHNob3QgYWxsIHRoZSB0aW1lIGFzIHRoZSBuZXcgZHJhZnQgc3BlY2lmaWVzLgorCisgICAg
bG9uZyBsb25nIGJsb2JTaXplID0gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihibG9iLT5zaXplKCkp
OworICAgIG1fc2l6ZSArPSBibG9iU2l6ZTsKKworICAgIGlmIChmaWxlKQorICAgICAgICBtX2l0
ZW1zLmFwcGVuZChCbG9iRGF0YUl0ZW0oZmlsZS0+cGF0aCgpLCAwLCBibG9iU2l6ZSwgZmlsZS0+
bGFzdE1vZGlmaWVkVGltZUluTWljcm9zZWNvbmRzKCkpKTsKKyAgICBlbHNlCiAgICAgICAgIG1f
aXRlbXMuYXBwZW5kKEJsb2JEYXRhSXRlbShibG9iLT51cmwoKSwgMCwgYmxvYlNpemUpKTsKLSAg
ICB9CiB9CiAKIFBhc3NSZWZQdHI8QmxvYj4gV2ViS2l0QmxvYkJ1aWxkZXI6OmdldEJsb2IoY29u
c3QgU3RyaW5nJiBjb250ZW50VHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHAK
aW5kZXggM2EyODBmZTNiNTQwZDJlYzhmY2Y3YjljYTkxOThkMjYzMDE4NmY3Ny4uYTViZmI4OGRm
YjVjYjI4ZDhhM2RjMjQ0YTUxZjE0Nzk3ZDYzMmFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RD
aHJvbWl1bS5jcHAKQEAgLTkxLDE1ICs5MSwxNSBAQCB2b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0
Q2hyb21pdW06OmRlbGV0ZUl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCwgRXhjZXB0aW9uQ29kZQog
CiAgICAgQVNTRVJUKGl0ZW0tPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSk7
CiAgICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBpdGVtLT5nZXRBc0ZpbGUoKTsKLSAgICBpZiAoIWJs
b2IgfHwgIWJsb2ItPmlzRmlsZSgpKQorICAgIGlmICghYmxvYiB8fCAhYmxvYi0+YXNGaWxlKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1faXRlbXMuY2xlYXIoKTsKICAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgZmlsZW5hbWVzID0gZGF0YU9iamVjdC0+ZmlsZW5hbWVzKCk7CiAgICAgVmVj
dG9yPFN0cmluZz4gY29waWVkRmlsZW5hbWVzOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZmlsZW5hbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChmaWxlbmFtZXNbaV0gIT0gc3Rh
dGljX2Nhc3Q8RmlsZSo+KGJsb2IuZ2V0KCkpLT5wYXRoKCkpCi0gICAgICAgICAgICBjb3BpZWRG
aWxlbmFtZXMuYXBwZW5kKHN0YXRpY19jYXN0PEZpbGUqPihibG9iLmdldCgpKS0+cGF0aCgpKTsK
KyAgICAgICAgaWYgKGZpbGVuYW1lc1tpXSAhPSBibG9iLT5hc0ZpbGUoKS0+cGF0aCgpKQorICAg
ICAgICAgICAgY29waWVkRmlsZW5hbWVzLmFwcGVuZChibG9iLT5hc0ZpbGUoKS0+cGF0aCgpKTsK
ICAgICB9CiAgICAgZGF0YU9iamVjdC0+c2V0RmlsZW5hbWVzKGNvcGllZEZpbGVuYW1lcyk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCmluZGV4IDk2
NjViYmQxYzRkOGY1MjdlYjIwZDgzM2Y4MmZkYjlkZTY4NDRhZjYuLjM3ODVkYzM4MzUzZGNiNGE4
Y2Y4OThmNjZkOWMyMmQ3MjExYTU1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvRm9ybURhdGEuY3BwCkBAIC0yMDIsOSArMjAyLDkgQEAgdm9pZCBGb3JtRGF0YTo6YXBw
ZW5kS2V5VmFsdWVQYWlySXRlbXMoY29uc3QgRm9ybURhdGFMaXN0JiBsaXN0LCBjb25zdCBUZXh0
RW5jb2QKICAgICAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IHR5cGUgaXMgYmxvYiwgdGhlbiB3
ZSBhbHNvIG5lZWQgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWUKICAgICAgICAgICAgIGlmICh2YWx1
ZS5ibG9iKCkpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgICAgICAg
ICBpZiAodmFsdWUuYmxvYigpLT5pc0ZpbGUoKSkgeworICAgICAgICAgICAgICAgIGlmICh2YWx1
ZS5ibG9iKCktPmFzRmlsZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBmaWxlIGJs
b2IsIHVzZSB0aGUgZmlsZW5hbWUgKG9yIHJlbGF0aXZlIHBhdGggaWYgaXQgaXMgcHJlc2VudCkg
YXMgdGhlIG5hbWUuCi0gICAgICAgICAgICAgICAgICAgIEZpbGUqIGZpbGUgPSBzdGF0aWNfY2Fz
dDxGaWxlKj4odmFsdWUuYmxvYigpKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsZSog
ZmlsZSA9IHZhbHVlLmJsb2IoKS0+YXNGaWxlKCk7CiAjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExP
QUQpICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBuYW1lID0gZmlsZS0+d2Vi
a2l0UmVsYXRpdmVQYXRoKCkuaXNFbXB0eSgpID8gZmlsZS0+bmFtZSgpIDogZmlsZS0+d2Via2l0
UmVsYXRpdmVQYXRoKCk7CiAjZWxzZQpAQCAtMjQ1LDkgKzI0NSw5IEBAIHZvaWQgRm9ybURhdGE6
OmFwcGVuZEtleVZhbHVlUGFpckl0ZW1zKGNvbnN0IEZvcm1EYXRhTGlzdCYgbGlzdCwgY29uc3Qg
VGV4dEVuY29kCiAgICAgICAgICAgICAvLyBBcHBlbmQgYm9keQogICAgICAgICAgICAgYXBwZW5k
RGF0YShoZWFkZXIuZGF0YSgpLCBoZWFkZXIuc2l6ZSgpKTsKICAgICAgICAgICAgIGlmICh2YWx1
ZS5ibG9iKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmxvYigpLT5pc0ZpbGUoKSkg
eworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCktPmFzRmlsZSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIERvIG5vdCBhZGQgdGhlIGZpbGUgaWYgdGhlIHBhdGggaXMgZW1wdHku
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGljX2Nhc3Q8RmlsZSo+KHZhbHVlLmJsb2Io
KSktPnBhdGgoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUuYmxv
YigpLT5hc0ZpbGUoKS0+cGF0aCgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZEZpbGUoc3RhdGljX2Nhc3Q8RmlsZSo+KHZhbHVlLmJsb2IoKSktPnBhdGgoKSwgc2hv
dWxkR2VuZXJhdGVGaWxlKTsKICAgICAgICAgICAgICAgICB9CiAjaWYgRU5BQkxFKEJMT0IpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIvU291cmNl
L1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAppbmRleCA3ZWQ4MjEyZWVlYzBkZmMxMWRi
YThlOGJkNWU5YzZlNGYzODZiNjY5Li40MDVmN2JkYzdiNjkyMzgxYzkxZDg2NjRkMzVlNjRmMmQ1
OTM1YjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTU5Miw4ICs1
OTIsOCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKEJsb2IqIGJvZHksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHNldCBhIENvbnRlbnQtVHlwZSBp
ZiBvbmUgaXMgbm90IHNldC4KICAgICAgICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0IGZvciB1cGxv
YWRpbmcgYnVuZGxlcy4KICAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keSA9IEZvcm1EYXRhOjpj
cmVhdGUoKTsKLSAgICAgICAgaWYgKGJvZHktPmlzRmlsZSgpKQotICAgICAgICAgICAgbV9yZXF1
ZXN0RW50aXR5Qm9keS0+YXBwZW5kRmlsZShzdGF0aWNfY2FzdDxGaWxlKj4oYm9keSktPnBhdGgo
KSk7CisgICAgICAgIGlmIChib2R5LT5hc0ZpbGUoKSkKKyAgICAgICAgICAgIG1fcmVxdWVzdEVu
dGl0eUJvZHktPmFwcGVuZEZpbGUoYm9keS0+YXNGaWxlKCktPnBhdGgoKSk7CiAjaWYgRU5BQkxF
KEJMT0IpCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHktPmFw
cGVuZEJsb2IoYm9keS0+dXJsKCkpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdlYjYyMmFhMDM4YzU2ZjZjYzkxMTVjMDQ4
N2VjMjRmODFhNDViZjcuLmE5MzE1NjkyNWUzOTJjNDJhN2U1MTgwOWRhZWM3ZWM5YzEyNWI2N2Qg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wMi0yMyAgS2ludWtvIFlhc3VkYSAgPGtpbnVr
b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ2FwdHVyZSBGaWxlIHNuYXBzaG90IGluZm8gYXQg
aXRzIGNyZWF0aW9uIHRpbWUgZm9yIGZpbGVzIGZyb20gRmlsZVN5c3RlbSBBUEkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODc5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0v
ZmlsZS1yZWFkLWFmdGVyLXdyaXRlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9maWxlc3lzdGVtL2ZpbGUtcmVhZC1hZnRlci13cml0ZS5odG1sOiBBZGRlZC4KKwogMjAxMi0w
Mi0yMiAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogY29uc29sZSBkb2Vzbid0IHNob3cgcHJvcGVybHkgYXJyYXlzIGZyb20gd2hp
Y2ggdGFpbCB2YWx1ZXMgaGF2ZSBiZWVuIGRlbGV0ZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXN5c3RlbS9maWxlLXJlYWQtYWZ0ZXItd3JpdGUtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtcmVhZC1hZnRlci13cml0ZS1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDRjMjI5M2JmZGI2OTgwMzYzMmJkNDdjN2MyYzA1N2YyMWQ4NzQ5ZQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXJlYWQt
YWZ0ZXItd3JpdGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1dyaXRpbmcgMTIzNDU2
Nzg5MCB0byB0aGUgZmlsZS4uLgorQ3JlYXRlZCBhIHdyaXRlci4KK1dyaXRlIHN1Y2NlZWRlZC4K
K1BBU1M6ICIxMCIgPT0gIjEwIgorV3JpdGluZyBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiB0
byB0aGUgZmlsZS4uLgorQ3JlYXRlZCBhIHdyaXRlci4KK1dyaXRlIHN1Y2NlZWRlZC4KK1BBU1M6
ICIxMCIgPT0gIjEwIgorUEFTUzogIjI2IiA9PSAiMjYiCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXJlYWQtYWZ0ZXItd3JpdGUuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLXJlYWQtYWZ0ZXItd3JpdGUuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mNmY0NGFlZTc0YTNmZmNjYTA3ZjYxZWZkMTI0NWQxOGFlMDhjM2Q1Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtcmVhZC1hZnRlci13cml0ZS5o
dG1sCkBAIC0wLDAgKzEsOTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxk
aXYgaWQ9J2NvbnNvbGUnPjwvZGl2PgorPHNjcmlwdD4KKworaWYgKCF3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgcmV0dXJuOworCitsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CitsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK3ZhciBmaWxl
RW50cnlGb3JDbGVhbnVwOwordmFyIHRlc3RUZXh0MSA9ICcxMjM0NTY3ODkwJzsKK3ZhciB0ZXN0
VGV4dDIgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonOworCit3ZWJraXRSZXF1ZXN0Rmls
ZVN5c3RlbSgKKyAgICB3aW5kb3cuVEVNUE9SQVJZLCAxMDAsIGZ1bmN0aW9uKGZzKSB7CisgICAg
ICAgIGZzLnJvb3QuZ2V0RmlsZSgndGVzdCcsIHtjcmVhdGU6dHJ1ZX0sIGZ1bmN0aW9uKGVudHJ5
KSB7CisgICAgICAgICAgICB3cml0ZVRleHRUb0ZpbGUoZW50cnksIHRlc3RUZXh0MSwgZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgbG9nKCdXcml0ZSBzdWNjZWVkZWQuJyk7CisgICAgICAg
ICAgICAgICAgZW50cnkuZmlsZShvbkNyZWF0ZUZpbGUuYmluZCh0aGlzLCBlbnRyeSksIG9uRXJy
b3IpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0sIG9uRXJyb3IpOworICAgIH0sIG9uRXJy
b3IpOworCitmdW5jdGlvbiBvbkNyZWF0ZUZpbGUoZW50cnksIGZpbGUpIHsKKyAgICB0ZXN0KHRl
c3RUZXh0MS5sZW5ndGgsIGZpbGUuc2l6ZSk7CisgICAgdmFyIGxhc3RPYnRhaW5lZEZpbGVTaXpl
ID0gZmlsZS5zaXplOworICAgIC8vIFdyaXRlIGludG8gdGhpcyBmaWxlIGFnYWluLgorICAgIHdy
aXRlVGV4dFRvRmlsZShlbnRyeSwgdGVzdFRleHQyLCBmdW5jdGlvbigpIHsKKyAgICAgICAgbG9n
KCdXcml0ZSBzdWNjZWVkZWQuJyk7CisgICAgICAgIGVudHJ5LmZpbGUoZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICAvLyBXZSBzaG91bGQgY29udGludWUgdG8gZ2V0IHRoZSBzYW1lIChzdGFsZSkg
ZmlsZSBzaXplIGFuZAorICAgICAgICAgICAgLy8gdGhhdCBpcyB0aGUgZXhwZWN0ZWQgcmVzdWx0
LgorICAgICAgICAgICAgdGVzdChsYXN0T2J0YWluZWRGaWxlU2l6ZSwgZmlsZS5zaXplKTsKKyAg
ICAgICAgICAgIGVudHJ5LmZpbGUoZnVuY3Rpb24oZmlsZSkgeworICAgICAgICAgICAgICAgIC8v
IE5vdyB3ZSBjcmVhdGVkIGEgbmV3IGZpbGUsIHRoZSBmaWxlIHNpemUgc2hvdWxkIGJlIHVwZGF0
ZWQuCisgICAgICAgICAgICAgICAgdGVzdCh0ZXN0VGV4dDIubGVuZ3RoLCBmaWxlLnNpemUpOwor
ICAgICAgICAgICAgICAgIGNsZWFudXAoKTsKKyAgICAgICAgICAgICAgICAvLyBFbmQgb2YgdGhl
IHRlc3QuCisgICAgICAgICAgICB9LCBvbkVycm9yKTsKKyAgICAgICAgfSwgb25FcnJvcik7Cisg
ICAgfSk7Cit9CisKK2Z1bmN0aW9uIHdyaXRlVGV4dFRvRmlsZShlbnRyeSwgY29udGVudHMsIHN1
Y2Nlc3NDYWxsYmFjaykKK3sKKyAgICBsb2coJ1dyaXRpbmcgJyArIGNvbnRlbnRzICsgJyB0byB0
aGUgZmlsZS4uLicpOworICAgIGVudHJ5LmNyZWF0ZVdyaXRlcihmdW5jdGlvbih3cml0ZXIpIHsK
KyAgICAgICAgbG9nKCdDcmVhdGVkIGEgd3JpdGVyLicpOworICAgICAgICB2YXIgYnVpbGRlciA9
IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOworICAgICAgICBidWlsZGVyLmFwcGVuZChjb250ZW50
cyk7CisgICAgICAgIHdyaXRlci53cml0ZShidWlsZGVyLmdldEJsb2IoJ3BsYWluL3RleHQnKSk7
CisgICAgICAgIHdyaXRlci5vbndyaXRlZW5kID0gc3VjY2Vzc0NhbGxiYWNrOworICAgICAgICB3
cml0ZXIub25lcnJvciA9IG9uRXJyb3I7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIGxvZyh0ZXh0
KQoreworICAgIHZhciBjb25zb2xlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUn
KTsKKyAgICBjb25zb2xlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQp
KTsKKyAgICBjb25zb2xlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykp
OworfQorCitmdW5jdGlvbiB0ZXN0KGV4cGVjdCwgYWN0dWFsKQoreworICAgIGxvZygoZXhwZWN0
ID09IGFjdHVhbCA/ICdQQVNTJyA6ICdGQUlMJykgKyAnOiAiJyArIGV4cGVjdCArICciID09ICIn
ICsgYWN0dWFsICsgJyInKTsKK30KKworZnVuY3Rpb24gb25FcnJvcihlKQoreworICAgIGxvZygn
RVJST1I6ICcgKyBlKTsKKyAgICBjbGVhbnVwKCk7Cit9CisKK2Z1bmN0aW9uIGNsZWFudXAoKQor
eworICAgIGlmIChmaWxlRW50cnlGb3JDbGVhbnVwKSB7CisgICAgICAgIGZpbGVFbnRyeUZvckNs
ZWFudXAucmVtb3ZlKGVuZFRlc3QsIGVuZFRlc3QpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGVuZFRlc3QoKTsKK30KKworZnVuY3Rpb24gZW5kVGVzdCgpCit7CisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141372</attachid>
            <date>2012-05-11 03:44:41 -0700</date>
            <delta_ts>2012-05-15 05:37:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78879-20120511194440.patch</filename>
            <type>text/plain</type>
            <size>20281</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2Njc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmMxYWIxNzkyYzk3N2Vm
MzViZWM5Mjc1ZTkwYTAxMzIzYjMzZGM1ZS4uYzIzZDFmODBlNmU1MWI5ZWZiZDk4MTAwNTY1NDVi
MGFmMTMwYWUyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA1LTExICBLaW51
a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAgICAgICBBbGxvdyBGaWxlU3lz
dGVtIEFQSSBpbXBsZW1lbnRhdGlvbiB0byBwYXNzIHNuYXBzaG90IG1ldGFkYXRhIGF0IEZpbGUg
Y3JlYXRpb24gdGltZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Nzg4NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBXZSBxdWVyeSBGaWxlIG1ldGFkYXRhIChlLmcuIHNpemUgYW5kIG1vZGlmaWVkVGltZSkg
d2hlbiBGaWxlLnNpemUsCisgICAgICAgIGxhc3RNb2RpZmllZFRpbWUgb3Igd2Via2l0U2xpY2Uo
KSBpcyBhY2Nlc3NlZCAvIGNhbGxlZCwgYnV0IGluIHNvbWUKKyAgICAgICAgcGxhdGZvcm0tc3Bl
Y2lmaWMgZmlsZXN5c3RlbXMgaXQgbWF5IG5vdCBiZSBmZWFzaWJsZSBzaW5jZSBzeW5jaHJvbm91
cworICAgICAgICBtZXRhZGF0YSBxdWVyeSBjb3VsZCB0YWtlIHZlcnkgbG9uZyB0aW1lLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBuZXcgRmlsZSBjb25zdHJ1Y3RvciB3aGljaCB0YWtlcyBt
ZXRhZGF0YSBhcmd1bWVudAorICAgICAgICB0byBhbGxvdyBlYWNoIEZpbGVTeXN0ZW0gQVBJIGlt
cGxlbWVudGF0aW9uIHRvIHBhc3Mgc25hcHNob3QgbWV0YWRhdGEKKyAgICAgICAgc28gdGhhdCBG
aWxlIG9iamVjdCBjb3VsZCBjYWNoZSB0aGUgZ2l2ZW4gbWV0YWRhdGEgbm90IHRvIG1ha2UKKyAg
ICAgICAgc3luY2hyb25vdXMgcXVlcnkuCisKKyAgICAgICAgV2Ugb25seSBjYWxsIHRoaXMgY29u
c3RydWN0b3IgaWYgdGhlIGZpbGVzeXN0ZW0gdHlwZSBpcyBuZWl0aGVyCisgICAgICAgIFRlbXBv
cmFyeSBub3IgUGVyc2lzdGVudCwgdGhlcmVmb3JlIHRoaXMgcGF0Y2ggc2hvdWxkIG5vdCBhZmZl
Y3QKKyAgICAgICAgZXhpc3RpbmcgY29kZSBiZWhhdmlvci4KKworICAgICAgICBUZXN0OiBmYXN0
L2ZpbGVzeXN0ZW0vZmlsZS1yZWFkLWFmdGVyLXdyaXRlLmh0bWwKKworICAgICAgICAqIE1vZHVs
ZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZp
bGVTeXN0ZW06OmNyZWF0ZUZpbGUpOgorICAgICAgICAqIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01G
aWxlU3lzdGVtU3luYy5jcHA6CisgICAgICAgICogZmlsZWFwaS9CbG9iLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkJsb2I6OndlYmtpdFNsaWNlKTogVXBkYXRlZCBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgKiBmaWxlYXBpL0Jsb2IuaDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZTo6RmlsZSk6IEFkZGVkIG5ldyBjb25zdHJ1Y3Rvci4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGU6Omxhc3RNb2RpZmllZERhdGUpOiBVcGRhdGVkIGltcGxlbWVudGF0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6c2l6ZSk6IFVwZGF0ZWQgaW1wbGVtZW50YXRp
b24uCisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpjYXB0dXJlU25hcHNob3QpOiBVcGRhdGVkIGlt
cGxlbWVudGF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6aGFzVmFsaWRTbmFwc2hvdE1l
dGFkYXRhKTogQWRkZWQuCisgICAgICAgICogZmlsZWFwaS9GaWxlLmg6CisgICAgICAgIChXZWJD
b3JlOjpGaWxlOjpjcmVhdGVGb3JGaWxlU3lzdGVtRmlsZSk6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oOgorICAgICAgICAoQXN5bmNGaWxlU3lzdGVtKTogVXBk
YXRlZCBjb21tZW50LgorCiAyMDEyLTA1LTEwICBUb21teSBXaWRlbmZseWNodCAgPHRvbW15d0Bn
b29nbGUuY29tPgogCiAgICAgICAgIE1lZGlhU3RyZWFtIEFQSTogRml4IE1lZGlhSGludHMgcGFy
c2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZp
bGVTeXN0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVT
eXN0ZW0uY3BwCmluZGV4IDA5MGJjYzA1MjBkMDcyMDYxYTdiMTRlM2JkNTQ3YzA1OGJjMGE4NzAu
LjIyYzkzMWNhZGUyN2Q5NmEzNjQ0YWVlZDJiMTU0Mzg3YTAyY2JlMTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5jcHAKQEAgLTEy
MywxMSArMTIzLDExIEBAIHZvaWQgRE9NRmlsZVN5c3RlbTo6Y3JlYXRlV3JpdGVyKGNvbnN0IEZp
bGVFbnRyeSogZmlsZUVudHJ5LCBQYXNzUmVmUHRyPEZpbGVXcml0CiAKIG5hbWVzcGFjZSB7CiAK
LWNsYXNzIEdldFBhdGhDYWxsYmFjayA6IHB1YmxpYyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7
CitjbGFzcyBHZXRTbmFwc2hvdEZpbGVDYWxsYmFjayA6IHB1YmxpYyBGaWxlU3lzdGVtQ2FsbGJh
Y2tzQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8R2V0UGF0aENhbGxiYWNr
PiBjcmVhdGUoUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlc3lzdGVtLCBjb25zdCBTdHJp
bmcmIG5hbWUsIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKKyAgICBzdGF0aWMgUGFzc093blB0
cjxHZXRTbmFwc2hvdEZpbGVDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3Rl
bT4gZmlsZXN5c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEZpbGVDYWxsYmFj
az4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJh
Y2spCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdldFBhdGhDYWxsYmFjayhm
aWxlc3lzdGVtLCBuYW1lLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXRTbmFwc2hvdEZpbGVDYWxsYmFjayhmaWxlc3lzdGVt
LCBuYW1lLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKICAgICB9CiAKICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVhZE1ldGFkYXRhKGNvbnN0IEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEp
CkBAIC0xMzYsMTIgKzEzNiwxOCBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghbV9zdWNjZXNzQ2Fs
bGJhY2spCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9zdWNjZXNzQ2FsbGJhY2st
PmhhbmRsZUV2ZW50KEZpbGU6OmNyZWF0ZVdpdGhOYW1lKG1ldGFkYXRhLnBsYXRmb3JtUGF0aCwg
bV9uYW1lKS5nZXQoKSk7CisgICAgICAgIC8vIEZvciByZWd1bGFyIGZpbGVzeXN0ZW0gdHlwZXMg
KHRlbXBvcmFyeSBvciBwZXJzaXN0ZW50KSB3ZSBzaG91bGQgbm90IGNhY2hlIGZpbGUgbWV0YWRh
dGEgYXMgaXQgY291bGQgY2hhbmdlIEZpbGUgc2VtYW50aWNzLgorICAgICAgICAvLyBGb3Igb3Ro
ZXIgZmlsZXN5c3RlbSB0eXBlcyAod2hpY2ggY291bGQgYmUgcGxhdGZvcm0tc3BlY2lmaWMgb25l
cykgdGhlcmUncyBhIGNoYW5jZSB0aGF0IHRoZSBmaWxlcyBhcmUgb24gcmVtb3RlIGZpbGVzeXN0
ZW0uIElmIHRoZSBwb3J0IGhhcyByZXR1cm5lZCBtZXRhZGF0YSBqdXN0IHBhc3MgaXQgdG8gRmls
ZSBjb25zdHJ1Y3RvciAoc28gd2UgbWF5IGNhY2hlIHRoZSBtZXRhZGF0YSkuCisgICAgICAgIGlm
IChtX2ZpbGVzeXN0ZW0tPnR5cGUoKSA9PSBGaWxlU3lzdGVtVHlwZVRlbXBvcmFyeSB8fCBtX2Zp
bGVzeXN0ZW0tPnR5cGUoKSA9PSBGaWxlU3lzdGVtVHlwZVBlcnNpc3RlbnQpCisgICAgICAgICAg
ICBtX3N1Y2Nlc3NDYWxsYmFjay0+aGFuZGxlRXZlbnQoRmlsZTo6Y3JlYXRlV2l0aE5hbWUobWV0
YWRhdGEucGxhdGZvcm1QYXRoLCBtX25hbWUpLmdldCgpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9zdWNjZXNzQ2FsbGJhY2stPmhhbmRsZUV2ZW50KEZpbGU6OmNyZWF0ZUZvckZpbGVT
eXN0ZW1GaWxlKG1fbmFtZSwgbWV0YWRhdGEpLmdldCgpKTsKKwogICAgICAgICBtX3N1Y2Nlc3ND
YWxsYmFjay5yZWxlYXNlKCk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEdldFBhdGhDYWxsYmFj
ayhQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVzeXN0ZW0sIGNvbnN0IFN0cmluZyYgbmFt
ZSwgIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8
RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKKyAgICBHZXRTbmFwc2hvdEZpbGVDYWxsYmFj
ayhQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVzeXN0ZW0sIGNvbnN0IFN0cmluZyYgbmFt
ZSwgIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8
RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKICAgICAgICAgOiBGaWxlU3lzdGVtQ2FsbGJh
Y2tzQmFzZShlcnJvckNhbGxiYWNrKQogICAgICAgICAsIG1fZmlsZXN5c3RlbShmaWxlc3lzdGVt
KQogICAgICAgICAsIG1fbmFtZShuYW1lKQpAQCAtMTU4LDcgKzE2NCw3IEBAIHByaXZhdGU6CiAK
IHZvaWQgRE9NRmlsZVN5c3RlbTo6Y3JlYXRlRmlsZShjb25zdCBGaWxlRW50cnkqIGZpbGVFbnRy
eSwgUGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxF
cnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQogewotICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5j
cmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEoY3JlYXRlRmlsZVN5c3RlbVVSTChmaWxl
RW50cnkpLCBHZXRQYXRoQ2FsbGJhY2s6OmNyZWF0ZSh0aGlzLCBmaWxlRW50cnktPm5hbWUoKSwg
c3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSk7CisgICAgbV9hc3luY0ZpbGVTeXN0ZW0t
PmNyZWF0ZVNuYXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YShjcmVhdGVGaWxlU3lzdGVtVVJMKGZp
bGVFbnRyeSksIEdldFNuYXBzaG90RmlsZUNhbGxiYWNrOjpjcmVhdGUodGhpcywgZmlsZUVudHJ5
LT5uYW1lKCksIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVz
eXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxl
c3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcAppbmRleCA4YTU3ZDAwNWU2MzJjN2FjYTYwMzdl
ODQzMDBkMDZlNzY3ZTUxZTM2Li44NjA1NGU2NGJlNjE4ZGYwZWI4ZTYyMTg0NjA0MjI2MWUyZWIy
OTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmls
ZVN5c3RlbVN5bmMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9E
T01GaWxlU3lzdGVtU3luYy5jcHAKQEAgLTk4LDkgKzk4LDkgQEAgcHVibGljOgogICAgICAgICBm
cmllbmQgY2xhc3MgV1RGOjpSZWZDb3VudGVkPENyZWF0ZUZpbGVSZXN1bHQ+OwogICAgIH07CiAK
LSAgICBzdGF0aWMgUGFzc093blB0cjxDcmVhdGVGaWxlSGVscGVyPiBjcmVhdGUoUGFzc1JlZlB0
cjxDcmVhdGVGaWxlUmVzdWx0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICBzdGF0
aWMgUGFzc093blB0cjxDcmVhdGVGaWxlSGVscGVyPiBjcmVhdGUoUGFzc1JlZlB0cjxDcmVhdGVG
aWxlUmVzdWx0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgRmlsZVN5c3RlbVR5cGUgdHlw
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlRmlsZUhlbHBlcihy
ZXN1bHQsIG5hbWUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVGaWxlSGVs
cGVyKHJlc3VsdCwgbmFtZSwgdHlwZSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaWRG
YWlsKGludCBjb2RlKQpAQCAtMTE1LDE3ICsxMTUsMjQgQEAgcHVibGljOgogCiAgICAgdm9pZCBk
aWRSZWFkTWV0YWRhdGEoY29uc3QgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSkKICAgICB7Ci0gICAg
ICAgIG1fcmVzdWx0LT5tX2ZpbGUgPSBGaWxlOjpjcmVhdGVXaXRoTmFtZShtZXRhZGF0YS5wbGF0
Zm9ybVBhdGgsIG1fbmFtZSk7CisgICAgICAgIC8vIEZvciByZWd1bGFyIGZpbGVzeXN0ZW0gdHlw
ZXMgKHRlbXBvcmFyeSBvciBwZXJzaXN0ZW50KSB3ZSBzaG91bGQgbm90IGNhY2hlIGZpbGUgbWV0
YWRhdGEgYXMgaXQgY291bGQgY2hhbmdlIEZpbGUgc2VtYW50aWNzLgorICAgICAgICAvLyBGb3Ig
b3RoZXIgZmlsZXN5c3RlbSB0eXBlcyAod2hpY2ggY291bGQgYmUgcGxhdGZvcm0tc3BlY2lmaWMg
b25lcykgdGhlcmUncyBhIGNoYW5jZSB0aGF0IHRoZSBmaWxlcyBhcmUgb24gcmVtb3RlIGZpbGVz
eXN0ZW0uIElmIHRoZSBwb3J0IGhhcyByZXR1cm5lZCBtZXRhZGF0YSBqdXN0IHBhc3MgaXQgdG8g
RmlsZSBjb25zdHJ1Y3RvciAoc28gd2UgbWF5IGNhY2hlIHRoZSBtZXRhZGF0YSkuCisgICAgICAg
IGlmIChtX3R5cGUgPT0gRmlsZVN5c3RlbVR5cGVUZW1wb3JhcnkgfHwgbV90eXBlID09IEZpbGVT
eXN0ZW1UeXBlUGVyc2lzdGVudCkKKyAgICAgICAgICAgIG1fcmVzdWx0LT5tX2ZpbGUgPSBGaWxl
OjpjcmVhdGVXaXRoTmFtZShtZXRhZGF0YS5wbGF0Zm9ybVBhdGgsIG1fbmFtZSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fcmVzdWx0LT5tX2ZpbGUgPSBGaWxlOjpjcmVhdGVGb3JGaWxl
U3lzdGVtRmlsZShtX25hbWUsIG1ldGFkYXRhKTsKICAgICB9CiBwcml2YXRlOgotICAgIENyZWF0
ZUZpbGVIZWxwZXIoUGFzc1JlZlB0cjxDcmVhdGVGaWxlUmVzdWx0PiByZXN1bHQsIGNvbnN0IFN0
cmluZyYgbmFtZSkKKyAgICBDcmVhdGVGaWxlSGVscGVyKFBhc3NSZWZQdHI8Q3JlYXRlRmlsZVJl
c3VsdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIG5hbWUsIEZpbGVTeXN0ZW1UeXBlIHR5cGUpCiAg
ICAgICAgIDogbV9yZXN1bHQocmVzdWx0KQogICAgICAgICAsIG1fbmFtZShuYW1lKQorICAgICAg
ICAsIG1fdHlwZSh0eXBlKQogICAgIHsKICAgICB9CiAKICAgICBSZWZQdHI8Q3JlYXRlRmlsZVJl
c3VsdD4gbV9yZXN1bHQ7CiAgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBGaWxlU3lzdGVtVHlwZSBt
X3R5cGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZQpAQCAtMTM0LDcgKzE0MSw3IEBAIFBhc3NSZWZQ
dHI8RmlsZT4gRE9NRmlsZVN5c3RlbVN5bmM6OmNyZWF0ZUZpbGUoY29uc3QgRmlsZUVudHJ5U3lu
YyogZmlsZUVudHJ5LCBFCiB7CiAgICAgZWMgPSAwOwogICAgIFJlZlB0cjxDcmVhdGVGaWxlSGVs
cGVyOjpDcmVhdGVGaWxlUmVzdWx0PiByZXN1bHQoQ3JlYXRlRmlsZUhlbHBlcjo6Q3JlYXRlRmls
ZVJlc3VsdDo6Y3JlYXRlKCkpOwotICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5jcmVhdGVTbmFwc2hv
dEZpbGVBbmRSZWFkTWV0YWRhdGEoY3JlYXRlRmlsZVN5c3RlbVVSTChmaWxlRW50cnkpLCBDcmVh
dGVGaWxlSGVscGVyOjpjcmVhdGUocmVzdWx0LCBmaWxlRW50cnktPm5hbWUoKSkpOworICAgIG1f
YXN5bmNGaWxlU3lzdGVtLT5jcmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEoY3JlYXRl
RmlsZVN5c3RlbVVSTChmaWxlRW50cnkpLCBDcmVhdGVGaWxlSGVscGVyOjpjcmVhdGUocmVzdWx0
LCBmaWxlRW50cnktPm5hbWUoKSwgdHlwZSgpKSk7CiAgICAgaWYgKCFtX2FzeW5jRmlsZVN5c3Rl
bS0+d2FpdEZvck9wZXJhdGlvblRvQ29tcGxldGUoKSkgewogICAgICAgICBlYyA9IEZpbGVFeGNl
cHRpb246OkFCT1JUX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uMDAuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbjAwLmNwcAppbmRleCAy
MDU2MTZkMjQzZTI2ZmM1M2UxNTc4NjU3MTUxNzU0ZmY2ZmRhZmEyLi4xZjgyMjU1NmYzMzc3M2I4
NWI3NDYxY2IwM2U1OGRiNTY3YTgxNTVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uMDAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24wMC5jcHAKQEAgLTk2LDcgKzk2LDcg
QEAgUGFzc1JlZlB0cjxNZWRpYUhpbnRzPiBQZWVyQ29ubmVjdGlvbjAwOjpjcmVhdGVNZWRpYUhp
bnRzKGNvbnN0IERpY3Rpb25hcnkmIGRpY3QKICAgICBib29sIGF1ZGlvID0gaGFzTG9jYWxBdWRp
b1RyYWNrKCk7CiAgICAgYm9vbCB2aWRlbyA9IGhhc0xvY2FsVmlkZW9UcmFjaygpOwogICAgIGRp
Y3Rpb25hcnkuZ2V0KCJoYXNfYXVkaW8iLCBhdWRpbyk7Ci0gICAgZGljdGlvbmFyeS5nZXQoImhh
c192aWRlbyIsIHZpZGVvKTsKKyAgICBkaWN0aW9uYXJ5LmdldCgiaGFzX3ZpZGVvIiwgYXVkaW8p
OwogICAgIHJldHVybiBNZWRpYUhpbnRzOjpjcmVhdGUoYXVkaW8sIHZpZGVvKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvQmxvYi5jcHAKaW5kZXggMTk3YTI2MThmZGEzMThiMDYzZWMzYmIyNzFjNjRmYjVk
NzM0NWJlNi4uMmZhYWI4NDY0MzMwYzkzNDRiYjYzYTYxYTc1NzM2M2ZmMGJmZmI1ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0Jsb2IuY3BwCkBAIC03NSwxOCArNzUsMTggQEAgQmxvYjo6fkJsb2IoKQogI2lm
IEVOQUJMRShCTE9CKQogUGFzc1JlZlB0cjxCbG9iPiBCbG9iOjp3ZWJraXRTbGljZShsb25nIGxv
bmcgc3RhcnQsIGxvbmcgbG9uZyBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpIGNvbnN0
CiB7Ci0gICAgLy8gV2hlbiB3ZSBzbGljZSBhIGZpbGUgZm9yIHRoZSBmaXJzdCB0aW1lLCB3ZSBv
YnRhaW4gYSBzbmFwc2hvdCBvZiB0aGUgZmlsZSBieSBjYXB0dXJpbmcgaXRzIGN1cnJlbnQgc2l6
ZSBhbmQgbW9kaWZpY2F0aW9uIHRpbWUuCi0gICAgLy8gVGhlIG1vZGlmaWNhdGlvbiB0aW1lIHdp
bGwgYmUgdXNlZCB0byB2ZXJpZnkgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3Qs
IHdoZW4gdGhlIHVuZGVybHlpbmcgZGF0YSBhcmUgYWNjZXNzZWQuCi0gICAgbG9uZyBsb25nIHNp
emU7CisgICAgbG9uZyBsb25nIHNpemUgPSBtX3NpemU7CiAgICAgZG91YmxlIG1vZGlmaWNhdGlv
blRpbWU7Ci0gICAgaWYgKGlzRmlsZSgpKQorCisgICAgaWYgKGlzRmlsZSgpKSB7CisgICAgICAg
IC8vIFdoZW4gd2Ugc2xpY2UgYSBmaWxlIGZvciB0aGUgZmlyc3QgdGltZSwgd2Ugb2J0YWluIGEg
c25hcHNob3Qgb2YgdGhlIGZpbGUgYnkgY2FwdHVyaW5nIGl0cyBjdXJyZW50IHNpemUgYW5kIG1v
ZGlmaWNhdGlvbiB0aW1lLgorICAgICAgICAvLyBUaGUgbW9kaWZpY2F0aW9uIHRpbWUgd2lsbCBi
ZSB1c2VkIHRvIHZlcmlmeSBpZiB0aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIG9yIG5vdCwgd2hl
biB0aGUgdW5kZXJseWluZyBkYXRhIGFyZSBhY2Nlc3NlZC4KICAgICAgICAgLy8gRklYTUU6IFRo
aXMgaW52b2x2ZXMgc3luY2hyb25vdXMgZmlsZSBvcGVyYXRpb24uIFdlIG5lZWQgdG8gZmlndXJl
IG91dCBob3cgdG8gbWFrZSBpdCBhc3luY2hyb25vdXMuCiAgICAgICAgIHN0YXRpY19jYXN0PGNv
bnN0IEZpbGUqPih0aGlzKS0+Y2FwdHVyZVNuYXBzaG90KHNpemUsIG1vZGlmaWNhdGlvblRpbWUp
OwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQobV9zaXplICE9IC0xKTsKLSAgICAgICAgc2l6
ZSA9IG1fc2l6ZTsKICAgICB9CiAKKyAgICBBU1NFUlQoc2l6ZSAhPSAtMSk7CisKICAgICAvLyBD
b252ZXJ0IHRoZSBuZWdhdGl2ZSB2YWx1ZSB0aGF0IGlzIHVzZWQgdG8gc2VsZWN0IGZyb20gdGhl
IGVuZC4KICAgICBpZiAoc3RhcnQgPCAwKQogICAgICAgICBzdGFydCA9IHN0YXJ0ICsgc2l6ZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oIGIvU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9CbG9iLmgKaW5kZXggZjVmMTg1MmY4ZDUyNzRiYzRjNzBhYWQxNzkxOTlkZTY0
ODJmMjc3MC4uZDFlMzBhMThhZGJlNzIyNjUzM2ZlMDFhZDFhODRlOGE3YjlkZTRhYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9CbG9iLmgKQEAgLTQxLDYgKzQxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBGaWxlOworCiBjbGFzcyBCbG9iIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYj4gewog
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZSgpCkBAIC04Miw3ICs4
NCw3IEBAIHByb3RlY3RlZDoKICAgICAvLyBhcyBhbiBpZGVudGlmaWVyIGZvciB0aGlzIGJsb2Iu
IFRoZSBpbnRlcm5hbCBVUkwgaXMgbmV2ZXIgdXNlZCB0byBzb3VyY2UgdGhlIGJsb2IncyBjb250
ZW50CiAgICAgLy8gaW50byBhbiBIVE1MIG9yIGZvciBGaWxlUmVhZCdpbmcsIHB1YmxpYyBibG9i
IFVSTHMgbXVzdCBiZSB1c2VkIGZvciB0aG9zZSBwdXJwb3Nlcy4KICAgICBLVVJMIG1faW50ZXJu
YWxVUkw7Ci0gICAgCisKICAgICBTdHJpbmcgbV90eXBlOwogICAgIGxvbmcgbG9uZyBtX3NpemU7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAKaW5kZXggOTA1MjkxYjJkZDc1OTNlNWM2MDgwOTg2
MTg0ZjhjNDNlMTZlOWY2MS4uYTE3ODQ3ZDUwMzEyNWIyN2JiZTg4OTEzNWRmOTJiMmRlZDIzZDgz
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuY3BwCkBAIC05Miw4ICs5MiwyMyBAQCBGaWxlOjpGaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogfQogCisjaWYgRU5B
QkxFKEZJTEVfU1lTVEVNKQorRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZp
bGVNZXRhZGF0YSYgbWV0YWRhdGEpCisgICAgOiBCbG9iKGNyZWF0ZUJsb2JEYXRhRm9yRmlsZVdp
dGhOYW1lKG1ldGFkYXRhLnBsYXRmb3JtUGF0aCwgbmFtZSksIC0xKQorICAgICwgbV9wYXRoKG1l
dGFkYXRhLnBsYXRmb3JtUGF0aCkKKyAgICAsIG1fbmFtZShuYW1lKQorICAgICwgbV9zbmFwc2hv
dE1ldGFkYXRhKG1ldGFkYXRhKQoreworfQorI2VuZGlmCisKIGRvdWJsZSBGaWxlOjpsYXN0TW9k
aWZpZWREYXRlKCkgY29uc3QKIHsKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgaWYgKGhh
c1ZhbGlkU25hcHNob3RNZXRhZGF0YSgpKQorICAgICAgICByZXR1cm4gbV9zbmFwc2hvdE1ldGFk
YXRhLm1vZGlmaWNhdGlvblRpbWUgKiAxMDAwLjA7CisjZW5kaWYKKwogICAgIHRpbWVfdCBtb2Rp
ZmljYXRpb25UaW1lOwogICAgIGlmICghZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUobV9wYXRoLCBt
b2RpZmljYXRpb25UaW1lKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMDQsNiArMTE5LDExIEBA
IGRvdWJsZSBGaWxlOjpsYXN0TW9kaWZpZWREYXRlKCkgY29uc3QKIAogdW5zaWduZWQgbG9uZyBs
b25nIEZpbGU6OnNpemUoKSBjb25zdAogeworI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKKyAgICBp
ZiAoaGFzVmFsaWRTbmFwc2hvdE1ldGFkYXRhKCkpCisgICAgICAgIHJldHVybiBtX3NuYXBzaG90
TWV0YWRhdGEubGVuZ3RoOworI2VuZGlmCisKICAgICAvLyBGSVhNRTogSmF2YVNjcmlwdCBjYW5u
b3QgcmVwcmVzZW50IHNpemVzIGFzIGxhcmdlIGFzIHVuc2lnbmVkIGxvbmcgbG9uZywgd2UgbmVl
ZCB0bwogICAgIC8vIGNvbWUgdXAgd2l0aCBhbiBleGNlcHRpb24gdG8gdGhyb3cgaWYgZmlsZSBz
aXplIGlzIG5vdCByZXByZXNlbnRhYmxlLgogICAgIGxvbmcgbG9uZyBzaXplOwpAQCAtMTE0LDYg
KzEzNCwxNCBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRmlsZTo6c2l6ZSgpIGNvbnN0CiAKIHZvaWQg
RmlsZTo6Y2FwdHVyZVNuYXBzaG90KGxvbmcgbG9uZyYgc25hcHNob3RTaXplLCBkb3VibGUmIHNu
YXBzaG90TW9kaWZpY2F0aW9uVGltZSkgY29uc3QKIHsKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0p
CisgICAgaWYgKGhhc1ZhbGlkU25hcHNob3RNZXRhZGF0YSgpKSB7CisgICAgICAgIHNuYXBzaG90
U2l6ZSA9IG1fc25hcHNob3RNZXRhZGF0YS5sZW5ndGg7CisgICAgICAgIHNuYXBzaG90TW9kaWZp
Y2F0aW9uVGltZSA9IG1fc25hcHNob3RNZXRhZGF0YS5tb2RpZmljYXRpb25UaW1lOworICAgICAg
ICByZXR1cm47CisgICAgfQorI2VuZGlmCisKICAgICAvLyBPYnRhaW5zIGEgc25hcHNob3Qgb2Yg
dGhlIGZpbGUgYnkgY2FwdHVyaW5nIGl0cyBjdXJyZW50IHNpemUgYW5kIG1vZGlmaWNhdGlvbiB0
aW1lLiBUaGlzIGlzIHVzZWQgd2hlbiB3ZSBzbGljZSBhIGZpbGUgZm9yIHRoZSBmaXJzdCB0aW1l
LgogICAgIC8vIElmIHdlIGZhaWwgdG8gcmV0cmlldmUgdGhlIHNpemUgb3IgbW9kaWZpY2F0aW9u
IHRpbWUsIHByb2JhYmx5IGR1ZSB0byB0aGF0IHRoZSBmaWxlIGhhcyBiZWVuIGRlbGV0ZWQsIDAg
c2l6ZSBpcyByZXR1cm5lZC4KICAgICAvLyBGSVhNRTogQ29tYmluZSBnZXRGaWxlU2l6ZSBhbmQg
Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUgaW50byBvbmUgZmlsZSBzeXN0ZW0gY2FsbC4KQEAgLTEy
NSw0ICsxNTMsMTEgQEAgdm9pZCBGaWxlOjpjYXB0dXJlU25hcHNob3QobG9uZyBsb25nJiBzbmFw
c2hvdFNpemUsIGRvdWJsZSYgc25hcHNob3RNb2RpZmljYXRpb24KICAgICAgICAgc25hcHNob3RN
b2RpZmljYXRpb25UaW1lID0gbW9kaWZpY2F0aW9uVGltZTsKIH0KIAorI2lmIEVOQUJMRShGSUxF
X1NZU1RFTSkKK2Jvb2wgRmlsZTo6aGFzVmFsaWRTbmFwc2hvdE1ldGFkYXRhKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zbmFwc2hvdE1ldGFkYXRhLmxlbmd0aCA+PSAwICYmIG1fc25hcHNob3RN
ZXRhZGF0YS5tb2RpZmljYXRpb25UaW1lOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5oIGIvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9GaWxlLmgKaW5kZXggODM3NTY3MTFjZmY1NGNmYmVhM2FmZTM0YjFi
ZDYxYWJmMjI1ZjMyOC4uODgxNjA1MDljYWYyNmFjMzcyMjg1YTAxODk5Y2RmYTI1ZWEyNDI5YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9GaWxlLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgRmlsZV9oCiAK
ICNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAiRmlsZU1ldGFkYXRhLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CkBAIC01Miw2ICs1MywxNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RmlsZT4gY3JlYXRlV2l0aFJlbGF0aXZlUGF0aChjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKEZJ
TEVfU1lTVEVNKQorICAgIC8vIEZvciBmaWxlc3lzdGVtIGZpbGVzLiBJdCB0YWtlcyBtZXRhZGF0
YSB3aGljaCBjb3VsZCBvcHRpb25hbGx5IGdpdmUgdmFsaWQgc25hcHNob3QgbWV0YWRhdGEsIHdo
aWNoIHdpbGwgc3VwcHJlc3MgZnV0dXJlIG1ldGFkYXRhIHF1ZXJ5IG9uIHRoaXMgRmlsZSBvYmpl
Y3QuIFRoZSBtZXRhZGF0YSBhcmd1bWVudCBtdXN0IGJlIHVzZWQgY2FyZWZ1bGx5IGlmIGFuZCBv
bmx5IGlmIGl0IGlzIGluZmVhc2libGUgdG8gcXVlcnkgZmlsZSBtZXRhZGF0YSBvbiB0aGUgZmx5
IChlLmcuIGZpbGUgaXMgb24gcmVtb3RlIGZpbGVzeXN0ZW0pLgorICAgIC8vCisgICAgLy8gR2l2
ZW4gc25hcHNob3QgbWV0YWRhdGEgaXMgY29uc2lkZXJlZCB2YWxpZCBpZiBpdCBoYXMgbm9uLW5l
Z2F0aXZlIHNpemUgdmFsdWUgYW5kIG5vbi16ZXJvIG1vZGlmaWNhdGlvblRpbWUuCisgICAgLy8g
T3RoZXJ3aXNlIGNhbGxpbmcgc2l6ZSgpLCBsYXN0TW9kaWZpZWRUaW1lKCkgb3Igd2Via2l0U2xp
Y2UoKSB3aWxsIHN5bmNocm9ub3VzbHkgcXVlcnkgdGhlIGZpbGUgbWV0YWRhdGEuCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RmlsZT4gY3JlYXRlRm9yRmlsZVN5c3RlbUZpbGUoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBGaWxlKG5hbWUsIG1ldGFkYXRhKSk7CisgICAgfQorI2VuZGlmCisK
ICAgICAvLyBDcmVhdGUgYSBmaWxlIHdpdGggYSBuYW1lIGV4cG9zZWQgdG8gdGhlIGF1dGhvciAo
dmlhIEZpbGUubmFtZSBhbmQgYXNzb2NpYXRlZCBET00gcHJvcGVydGllcykgdGhhdCBkaWZmZXJz
IGZyb20gdGhlIG9uZSBwcm92aWRlZCBpbiB0aGUgcGF0aC4KICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxGaWxlPiBjcmVhdGVXaXRoTmFtZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYg
bmFtZSkKICAgICB7CkBAIC04MSw4ICs5MywxOCBAQCBwcml2YXRlOgogICAgIEZpbGUoY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlwZSk7CiAg
ICAgRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKKyMgaWYg
RU5BQkxFKEZJTEVfU1lTVEVNKQorICAgIEZpbGUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBG
aWxlTWV0YWRhdGEmKTsKKyAgICBib29sIGhhc1ZhbGlkU25hcHNob3RNZXRhZGF0YSgpIGNvbnN0
OworI2VuZGlmCisKICAgICBTdHJpbmcgbV9wYXRoOwogICAgIFN0cmluZyBtX25hbWU7CisKKyNp
ZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgY29uc3QgRmlsZU1ldGFkYXRhIG1fc25hcHNob3RN
ZXRhZGF0YTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCiAgICAgU3Ry
aW5nIG1fcmVsYXRpdmVQYXRoOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5j
RmlsZVN5c3RlbS5oCmluZGV4IDZlNTNhOWFhNWYzZDc5MDg5YTFiZTZmZDZkNDUxNGQ5NDM2YmU2
YmEuLmMzM2Q2YTBmMmIzM2YzYjRmNzI2NWU3MTg2MDg0ZDNhYjYzYjBkNGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oCkBAIC0xMjcsNiArMTI3LDggQEAgcHVi
bGljOgogICAgIC8vIHdoaWxlIGluIHJlbW90ZSBmaWxlc3lzdGVtIGNhc2UgdGhlIGJhY2tlbmQg
bWF5IGRvd25sb2FkIHRoZSBmaWxlIGludG8gYSB0ZW1wb3Jhcnkgc25hcHNob3QgZmlsZSBhbmQg
cmV0dXJuIHRoZSBtZXRhZGF0YSBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUuCiAgICAgLy8gQXN5bmNG
aWxlU3lzdGVtQ2FsbGJhY2tzOjpkaWRSZWFkTWV0YWRhdGEoKSBpcyBjYWxsZWQgd2hlbiB0aGUg
bWV0YWRhdGEgZm9yIHRoZSBzbmFwc2hvdCBmaWxlIGlzIHN1Y2Nlc3NmdWxseSByZXR1cm5lZC4K
ICAgICAvLyBBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M6OmRpZEZhaWwoKSBpcyBjYWxsZWQgb3Ro
ZXJ3aXNlLgorICAgIC8vCisgICAgLy8gTm90ZTogdGhlIHJldHVybmVkIG1ldGFkYXRhIGluZm8g
aXMgY2FjaGVkIGluIHRoZSBGaWxlIG9iamVjdCBmb3Igbm9uLXJlZ3VsYXIgZmlsZXN5c3RlbSB0
eXBlcyAobmVpdGhlciBUZW1wb3Jhcnkgbm9yIFBlcnNpc3RlbnQpLiBUaGUgcG9ydCBjb3VsZCBy
ZXR1cm4gdmFsaWQgbWV0YWRhdGEgaWYgaXQgd2FudHMgRmlsZSBvYmplY3QgdG8gY2FjaGUgbWV0
YWRhdGEgKGUuZy4gaWYgdGhlIGZpbGUgYm9keSBpcyBvbiBhIHJlbW90ZSBzZXJ2ZXIpLCBidXQg
b3RoZXJ3aXNlIHNob3VsZCBOT1QgcmV0dXJuIHZhbGlkIG1ldGFkYXRhLgogICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEoY29uc3QgS1VSTCYgcGF0aCwg
UGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KSA9IDA7CiAKIHByb3RlY3RlZDoK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1YTY4N2I4ZTQ2ZjlkNGIwN2YxMWIzNTM3ZGQ5NDAzMDdhYjM2NDc5Li45Mzg3ZjVi
YmY2ZTRjMmNkYjQ1NjViZTYxYjJmY2U4N2EzYzI5MmRkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTItMDUtMTEgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIEFsbG93IEZpbGVTeXN0ZW0gQVBJIGltcGxlbWVudGF0aW9uIHRvIHBhc3Mgc25hcHNob3Qg
bWV0YWRhdGEgYXQgRmlsZSBjcmVhdGlvbiB0aW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODg3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL2ZpbGUtcmVhZC1hZnRlci13
cml0ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9maWxl
LXJlYWQtYWZ0ZXItd3JpdGUuaHRtbDogQWRkZWQuCisKIDIwMTItMDUtMTAgIFZhcnVuIEphaW4g
IDx2YXJ1bmphaW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIFRyaWdnZXIgY29u
dGV4dCBtZW51IGZvciBsb25nIHByZXNzIGdlc3R1cmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXN5c3RlbS9maWxlLW1ldGFkYXRhLWFmdGVyLXdyaXRlLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLW1ldGFkYXRhLWFmdGVyLXdyaXRlLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mODE0ZmZkMGZhMDVkNDRjMGY3YTc1NjVhN2Y2ODljZTFm
YzFlNjBlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2Zp
bGUtbWV0YWRhdGEtYWZ0ZXItd3JpdGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorV3Jp
dGluZyAxMjM0NTY3ODkwIHRvIHRoZSBmaWxlLi4uCitDcmVhdGVkIGEgd3JpdGVyLgorV3JpdGUg
c3VjY2VlZGVkLgorUEFTUzogIjEwIiA9PSAiMTAiCitXcml0aW5nIGFiY2RlZmdoaWprbG1ub3Bx
cnN0dXZ3eHl6IHRvIHRoZSBmaWxlLi4uCitDcmVhdGVkIGEgd3JpdGVyLgorV3JpdGUgc3VjY2Vl
ZGVkLgorUEFTUzogIjI2IiA9PSAiMjYiCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXN5c3RlbS9maWxlLW1ldGFkYXRhLWFmdGVyLXdyaXRlLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzeXN0ZW0vZmlsZS1tZXRhZGF0YS1hZnRlci13cml0ZS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmI5Y2FiZWYwZjFlOWM4YzRjNzQ2ZGU1NTY3OWE2ZmRhMTlmYmZlYzcKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS1tZXRhZGF0YS1hZnRlci13cml0
ZS5odG1sCkBAIC0wLDAgKzEsODkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4K
KzxkaXYgaWQ9J2NvbnNvbGUnPjwvZGl2PgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cisg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFyIGZpbGVFbnRy
eUZvckNsZWFudXA7Cit2YXIgdGVzdFRleHQxID0gJzEyMzQ1Njc4OTAnOwordmFyIHRlc3RUZXh0
MiA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic7CisKK3dlYmtpdFJlcXVlc3RGaWxlU3lz
dGVtKAorICAgIHdpbmRvdy5URU1QT1JBUlksIDEwMCwgZnVuY3Rpb24oZnMpIHsKKyAgICAgICAg
ZnMucm9vdC5nZXRGaWxlKCd0ZXN0Jywge2NyZWF0ZTp0cnVlfSwgZnVuY3Rpb24oZW50cnkpIHsK
KyAgICAgICAgICAgIHdyaXRlVGV4dFRvRmlsZShlbnRyeSwgdGVzdFRleHQxLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICBsb2coJ1dyaXRlIHN1Y2NlZWRlZC4nKTsKKyAgICAgICAgICAg
ICAgICBlbnRyeS5maWxlKG9uQ3JlYXRlRmlsZS5iaW5kKHRoaXMsIGVudHJ5KSwgb25FcnJvcik7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwgb25FcnJvcik7CisgICAgfSwgb25FcnJvcik7
CisKK2Z1bmN0aW9uIG9uQ3JlYXRlRmlsZShlbnRyeSwgZmlsZSkgeworICAgIHRlc3QodGVzdFRl
eHQxLmxlbmd0aCwgZmlsZS5zaXplKTsKKyAgICAvLyBXcml0ZSBpbnRvIHRoaXMgZmlsZSBhZ2Fp
bi4KKyAgICB3cml0ZVRleHRUb0ZpbGUoZW50cnksIHRlc3RUZXh0MiwgZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGxvZygnV3JpdGUgc3VjY2VlZGVkLicpOworICAgICAgICBlbnRyeS5maWxlKGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgLy8gVGhlIGZpbGUgc2l6ZSBzaG91bGQgYmUgdXBkYXRlZC4K
KyAgICAgICAgICAgIHRlc3QodGVzdFRleHQyLmxlbmd0aCwgZmlsZS5zaXplKTsKKyAgICAgICAg
ICAgIGVuZFRlc3QoKTsKKyAgICAgICAgfSwgb25FcnJvcik7CisgICAgfSk7Cit9CisKK2Z1bmN0
aW9uIHdyaXRlVGV4dFRvRmlsZShlbnRyeSwgY29udGVudHMsIHN1Y2Nlc3NDYWxsYmFjaykKK3sK
KyAgICBsb2coJ1dyaXRpbmcgJyArIGNvbnRlbnRzICsgJyB0byB0aGUgZmlsZS4uLicpOworICAg
IGVudHJ5LmNyZWF0ZVdyaXRlcihmdW5jdGlvbih3cml0ZXIpIHsKKyAgICAgICAgbG9nKCdDcmVh
dGVkIGEgd3JpdGVyLicpOworICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVp
bGRlcigpOworICAgICAgICBidWlsZGVyLmFwcGVuZChjb250ZW50cyk7CisgICAgICAgIHdyaXRl
ci53cml0ZShidWlsZGVyLmdldEJsb2IoJ3BsYWluL3RleHQnKSk7CisgICAgICAgIHdyaXRlci5v
bndyaXRlZW5kID0gc3VjY2Vzc0NhbGxiYWNrOworICAgICAgICB3cml0ZXIub25lcnJvciA9IG9u
RXJyb3I7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIGxvZyh0ZXh0KQoreworICAgIHZhciBjb25z
b2xlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKTsKKyAgICBjb25zb2xlLmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKTsKKyAgICBjb25zb2xlLmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOworfQorCitmdW5jdGlvbiB0
ZXN0KGV4cGVjdCwgYWN0dWFsKQoreworICAgIGxvZygoZXhwZWN0ID09IGFjdHVhbCA/ICdQQVNT
JyA6ICdGQUlMJykgKyAnOiAiJyArIGV4cGVjdCArICciID09ICInICsgYWN0dWFsICsgJyInKTsK
K30KKworZnVuY3Rpb24gb25FcnJvcihlKQoreworICAgIGxvZygnRVJST1I6ICcgKyBlLmNvZGUp
OworICAgIGNvbnNvbGUubG9nKGUpOworICAgIGNsZWFudXAoKTsKK30KKworZnVuY3Rpb24gY2xl
YW51cCgpCit7CisgICAgaWYgKGZpbGVFbnRyeUZvckNsZWFudXApIHsKKyAgICAgICAgZmlsZUVu
dHJ5Rm9yQ2xlYW51cC5yZW1vdmUoZW5kVGVzdCwgZW5kVGVzdCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgZW5kVGVzdCgpOworfQorCitmdW5jdGlvbiBlbmRUZXN0KCkKK3sKKyAgICBp
ZiAobGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7Cit9CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141933</attachid>
            <date>2012-05-15 05:38:00 -0700</date>
            <delta_ts>2012-05-15 05:59:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78879-20120515213758.patch</filename>
            <type>text/plain</type>
            <size>18353</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE3MDA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE0M2YzMWIwZDI5OWQw
ODAyZTM2OGIxYjM3YjdmOTliNjY1MjZhZi4uOTVhZWFjMzkxZTI5ZTgzYjlmMTYzMzVkOWMzMjY4
N2ZmYmFkYzYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTA1LTExICBLaW51
a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAgICAgICBBbGxvdyBGaWxlU3lz
dGVtIEFQSSBpbXBsZW1lbnRhdGlvbiB0byBwYXNzIHNuYXBzaG90IG1ldGFkYXRhIGF0IEZpbGUg
Y3JlYXRpb24gdGltZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Nzg4NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBXZSBxdWVyeSBGaWxlIG1ldGFkYXRhIChlLmcuIHNpemUgYW5kIG1vZGlmaWVkVGltZSkg
d2hlbiBGaWxlLnNpemUsCisgICAgICAgIGxhc3RNb2RpZmllZFRpbWUgb3Igd2Via2l0U2xpY2Uo
KSBpcyBhY2Nlc3NlZCAvIGNhbGxlZCwgYnV0IGluIHNvbWUKKyAgICAgICAgcGxhdGZvcm0tc3Bl
Y2lmaWMgZmlsZXN5c3RlbXMgaXQgbWF5IG5vdCBiZSBmZWFzaWJsZSBzaW5jZSBzeW5jaHJvbm91
cworICAgICAgICBtZXRhZGF0YSBxdWVyeSBjb3VsZCB0YWtlIHZlcnkgbG9uZyB0aW1lLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBuZXcgRmlsZSBjb25zdHJ1Y3RvciB3aGljaCB0YWtlcyBt
ZXRhZGF0YSBhcmd1bWVudAorICAgICAgICB0byBhbGxvdyBlYWNoIEZpbGVTeXN0ZW0gQVBJIGlt
cGxlbWVudGF0aW9uIHRvIHBhc3Mgc25hcHNob3QgbWV0YWRhdGEKKyAgICAgICAgc28gdGhhdCBG
aWxlIG9iamVjdCBjb3VsZCBjYWNoZSB0aGUgZ2l2ZW4gbWV0YWRhdGEgbm90IHRvIG1ha2UKKyAg
ICAgICAgc3luY2hyb25vdXMgcXVlcnkuCisKKyAgICAgICAgV2Ugb25seSBjYWxsIHRoaXMgY29u
c3RydWN0b3IgaWYgdGhlIGZpbGVzeXN0ZW0gdHlwZSBpcyBuZWl0aGVyCisgICAgICAgIFRlbXBv
cmFyeSBub3IgUGVyc2lzdGVudCwgdGhlcmVmb3JlIHRoaXMgcGF0Y2ggc2hvdWxkIG5vdCBhZmZl
Y3QKKyAgICAgICAgZXhpc3RpbmcgY29kZSBiZWhhdmlvci4KKworICAgICAgICBUZXN0OiBmYXN0
L2ZpbGVzeXN0ZW0vZmlsZS1yZWFkLWFmdGVyLXdyaXRlLmh0bWwKKworICAgICAgICAqIE1vZHVs
ZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZp
bGVTeXN0ZW06OmNyZWF0ZUZpbGUpOgorICAgICAgICAqIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01G
aWxlU3lzdGVtU3luYy5jcHA6CisgICAgICAgICogZmlsZWFwaS9CbG9iLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkJsb2I6OndlYmtpdFNsaWNlKTogVXBkYXRlZCBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgKiBmaWxlYXBpL0Jsb2IuaDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZTo6RmlsZSk6IEFkZGVkIG5ldyBjb25zdHJ1Y3Rvci4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGU6Omxhc3RNb2RpZmllZERhdGUpOiBVcGRhdGVkIGltcGxlbWVudGF0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6c2l6ZSk6IFVwZGF0ZWQgaW1wbGVtZW50YXRp
b24uCisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpjYXB0dXJlU25hcHNob3QpOiBVcGRhdGVkIGlt
cGxlbWVudGF0aW9uLgorICAgICAgICAqIGZpbGVhcGkvRmlsZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZTo6Y3JlYXRlRm9yRmlsZVN5c3RlbUZpbGUpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKEFzeW5jRmlsZVN5c3RlbSk6IFVwZGF0
ZWQgY29tbWVudC4KKwogMjAxMi0wNS0xNCAgTWlrZSBXZXN0ICA8bWlrZUBtaWtld2VzdC5vcmc+
CiAKICAgICAgICAgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgY29uc29sZSBlcnJvcnMgaW5jbHVk
ZSB2aW9sYXRlZCBkaXJlY3RpdmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zp
bGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5jcHAKaW5kZXggMDkwYmNjMDUyMGQwNzIwNjFhN2IxNGUz
YmQ1NDdjMDU4YmMwYTg3MC4uN2JiMGE2NzU3NjdkNWVkZWJmY2NkYzdlZTNmZGMwODIyOWVlNDkw
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVT
eXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
U3lzdGVtLmNwcApAQCAtMTIzLDExICsxMjMsMTEgQEAgdm9pZCBET01GaWxlU3lzdGVtOjpjcmVh
dGVXcml0ZXIoY29uc3QgRmlsZUVudHJ5KiBmaWxlRW50cnksIFBhc3NSZWZQdHI8RmlsZVdyaXQK
IAogbmFtZXNwYWNlIHsKIAotY2xhc3MgR2V0UGF0aENhbGxiYWNrIDogcHVibGljIEZpbGVTeXN0
ZW1DYWxsYmFja3NCYXNlIHsKK2NsYXNzIEdldE1ldGFkYXRhQ2FsbGJhY2sgOiBwdWJsaWMgRmls
ZVN5c3RlbUNhbGxiYWNrc0Jhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEdl
dFBhdGhDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZXN5c3Rl
bSwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4gc3VjY2Vzc0Nh
bGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCisgICAgc3Rh
dGljIFBhc3NPd25QdHI8R2V0TWV0YWRhdGFDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RE9N
RmlsZVN5c3RlbT4gZmlsZXN5c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEZp
bGVDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVy
cm9yQ2FsbGJhY2spCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdldFBhdGhD
YWxsYmFjayhmaWxlc3lzdGVtLCBuYW1lLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2sp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXRNZXRhZGF0YUNhbGxiYWNrKGZpbGVz
eXN0ZW0sIG5hbWUsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOwogICAgIH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkTWV0YWRhdGEoY29uc3QgRmlsZU1ldGFkYXRhJiBtZXRh
ZGF0YSkKQEAgLTEzNiwxMiArMTM2LDE4IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFtX3N1Y2Nl
c3NDYWxsYmFjaykKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBtX3N1Y2Nlc3NDYWxs
YmFjay0+aGFuZGxlRXZlbnQoRmlsZTo6Y3JlYXRlV2l0aE5hbWUobWV0YWRhdGEucGxhdGZvcm1Q
YXRoLCBtX25hbWUpLmdldCgpKTsKKyAgICAgICAgLy8gRm9yIHJlZ3VsYXIgZmlsZXN5c3RlbSB0
eXBlcyAodGVtcG9yYXJ5IG9yIHBlcnNpc3RlbnQpLCB3ZSBzaG91bGQgbm90IGNhY2hlIGZpbGUg
bWV0YWRhdGEgYXMgaXQgY291bGQgY2hhbmdlIEZpbGUgc2VtYW50aWNzLgorICAgICAgICAvLyBG
b3Igb3RoZXIgZmlsZXN5c3RlbSB0eXBlcyAod2hpY2ggY291bGQgYmUgcGxhdGZvcm0tc3BlY2lm
aWMgb25lcyksIHRoZXJlJ3MgYSBjaGFuY2UgdGhhdCB0aGUgZmlsZXMgYXJlIG9uIHJlbW90ZSBm
aWxlc3lzdGVtLiBJZiB0aGUgcG9ydCBoYXMgcmV0dXJuZWQgbWV0YWRhdGEganVzdCBwYXNzIGl0
IHRvIEZpbGUgY29uc3RydWN0b3IgKHNvIHdlIG1heSBjYWNoZSB0aGUgbWV0YWRhdGEpLgorICAg
ICAgICBpZiAobV9maWxlc3lzdGVtLT50eXBlKCkgPT0gRmlsZVN5c3RlbVR5cGVUZW1wb3Jhcnkg
fHwgbV9maWxlc3lzdGVtLT50eXBlKCkgPT0gRmlsZVN5c3RlbVR5cGVQZXJzaXN0ZW50KQorICAg
ICAgICAgICAgbV9zdWNjZXNzQ2FsbGJhY2stPmhhbmRsZUV2ZW50KEZpbGU6OmNyZWF0ZVdpdGhO
YW1lKG1ldGFkYXRhLnBsYXRmb3JtUGF0aCwgbV9uYW1lKS5nZXQoKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1fc3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVFdmVudChGaWxlOjpjcmVhdGVG
b3JGaWxlU3lzdGVtRmlsZShtX25hbWUsIG1ldGFkYXRhKS5nZXQoKSk7CisKICAgICAgICAgbV9z
dWNjZXNzQ2FsbGJhY2sucmVsZWFzZSgpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBHZXRQYXRo
Q2FsbGJhY2soUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlc3lzdGVtLCBjb25zdCBTdHJp
bmcmIG5hbWUsICBQYXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNz
UmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCisgICAgR2V0TWV0YWRhdGFDYWxs
YmFjayhQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVzeXN0ZW0sIGNvbnN0IFN0cmluZyYg
bmFtZSwgIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQ
dHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKICAgICAgICAgOiBGaWxlU3lzdGVtQ2Fs
bGJhY2tzQmFzZShlcnJvckNhbGxiYWNrKQogICAgICAgICAsIG1fZmlsZXN5c3RlbShmaWxlc3lz
dGVtKQogICAgICAgICAsIG1fbmFtZShuYW1lKQpAQCAtMTU4LDcgKzE2NCw3IEBAIHByaXZhdGU6
CiAKIHZvaWQgRE9NRmlsZVN5c3RlbTo6Y3JlYXRlRmlsZShjb25zdCBGaWxlRW50cnkqIGZpbGVF
bnRyeSwgUGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0
cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQogewotICAgIG1fYXN5bmNGaWxlU3lzdGVt
LT5jcmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEoY3JlYXRlRmlsZVN5c3RlbVVSTChm
aWxlRW50cnkpLCBHZXRQYXRoQ2FsbGJhY2s6OmNyZWF0ZSh0aGlzLCBmaWxlRW50cnktPm5hbWUo
KSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSk7CisgICAgbV9hc3luY0ZpbGVTeXN0
ZW0tPmNyZWF0ZVNuYXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YShjcmVhdGVGaWxlU3lzdGVtVVJM
KGZpbGVFbnRyeSksIEdldE1ldGFkYXRhQ2FsbGJhY2s6OmNyZWF0ZSh0aGlzLCBmaWxlRW50cnkt
Pm5hbWUoKSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5
c3RlbS9ET01GaWxlU3lzdGVtU3luYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVz
eXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMuY3BwCmluZGV4IDhhNTdkMDA1ZTYzMmM3YWNhNjAzN2U4
NDMwMGQwNmU3NjdlNTFlMzYuLmJjMzZjYWVkZGM3ZGZhOTY3NzExMDkyYjAzZGU1ODQ2MDcwNjYy
OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
U3lzdGVtU3luYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RP
TUZpbGVTeXN0ZW1TeW5jLmNwcApAQCAtOTgsOSArOTgsOSBAQCBwdWJsaWM6CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBXVEY6OlJlZkNvdW50ZWQ8Q3JlYXRlRmlsZVJlc3VsdD47CiAgICAgfTsKIAot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENyZWF0ZUZpbGVIZWxwZXI+IGNyZWF0ZShQYXNzUmVmUHRy
PENyZWF0ZUZpbGVSZXN1bHQ+IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIHN0YXRp
YyBQYXNzT3duUHRyPENyZWF0ZUZpbGVIZWxwZXI+IGNyZWF0ZShQYXNzUmVmUHRyPENyZWF0ZUZp
bGVSZXN1bHQ+IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBGaWxlU3lzdGVtVHlwZSB0eXBl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVGaWxlSGVscGVyKHJl
c3VsdCwgbmFtZSkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZUZpbGVIZWxw
ZXIocmVzdWx0LCBuYW1lLCB0eXBlKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpZEZh
aWwoaW50IGNvZGUpCkBAIC0xMTUsMTcgKzExNSwyNCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRp
ZFJlYWRNZXRhZGF0YShjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQogICAgIHsKLSAgICAg
ICAgbV9yZXN1bHQtPm1fZmlsZSA9IEZpbGU6OmNyZWF0ZVdpdGhOYW1lKG1ldGFkYXRhLnBsYXRm
b3JtUGF0aCwgbV9uYW1lKTsKKyAgICAgICAgLy8gRm9yIHJlZ3VsYXIgZmlsZXN5c3RlbSB0eXBl
cyAodGVtcG9yYXJ5IG9yIHBlcnNpc3RlbnQpLCB3ZSBzaG91bGQgbm90IGNhY2hlIGZpbGUgbWV0
YWRhdGEgYXMgaXQgY291bGQgY2hhbmdlIEZpbGUgc2VtYW50aWNzLgorICAgICAgICAvLyBGb3Ig
b3RoZXIgZmlsZXN5c3RlbSB0eXBlcyAod2hpY2ggY291bGQgYmUgcGxhdGZvcm0tc3BlY2lmaWMg
b25lcyksIHRoZXJlJ3MgYSBjaGFuY2UgdGhhdCB0aGUgZmlsZXMgYXJlIG9uIHJlbW90ZSBmaWxl
c3lzdGVtLiBJZiB0aGUgcG9ydCBoYXMgcmV0dXJuZWQgbWV0YWRhdGEganVzdCBwYXNzIGl0IHRv
IEZpbGUgY29uc3RydWN0b3IgKHNvIHdlIG1heSBjYWNoZSB0aGUgbWV0YWRhdGEpLgorICAgICAg
ICBpZiAobV90eXBlID09IEZpbGVTeXN0ZW1UeXBlVGVtcG9yYXJ5IHx8IG1fdHlwZSA9PSBGaWxl
U3lzdGVtVHlwZVBlcnNpc3RlbnQpCisgICAgICAgICAgICBtX3Jlc3VsdC0+bV9maWxlID0gRmls
ZTo6Y3JlYXRlV2l0aE5hbWUobWV0YWRhdGEucGxhdGZvcm1QYXRoLCBtX25hbWUpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX3Jlc3VsdC0+bV9maWxlID0gRmlsZTo6Y3JlYXRlRm9yRmls
ZVN5c3RlbUZpbGUobV9uYW1lLCBtZXRhZGF0YSk7CiAgICAgfQogcHJpdmF0ZToKLSAgICBDcmVh
dGVGaWxlSGVscGVyKFBhc3NSZWZQdHI8Q3JlYXRlRmlsZVJlc3VsdD4gcmVzdWx0LCBjb25zdCBT
dHJpbmcmIG5hbWUpCisgICAgQ3JlYXRlRmlsZUhlbHBlcihQYXNzUmVmUHRyPENyZWF0ZUZpbGVS
ZXN1bHQ+IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBGaWxlU3lzdGVtVHlwZSB0eXBlKQog
ICAgICAgICA6IG1fcmVzdWx0KHJlc3VsdCkKICAgICAgICAgLCBtX25hbWUobmFtZSkKKyAgICAg
ICAgLCBtX3R5cGUodHlwZSkKICAgICB7CiAgICAgfQogCiAgICAgUmVmUHRyPENyZWF0ZUZpbGVS
ZXN1bHQ+IG1fcmVzdWx0OwogICAgIFN0cmluZyBtX25hbWU7CisgICAgRmlsZVN5c3RlbVR5cGUg
bV90eXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UKQEAgLTEzNCw3ICsxNDEsNyBAQCBQYXNzUmVm
UHRyPEZpbGU+IERPTUZpbGVTeXN0ZW1TeW5jOjpjcmVhdGVGaWxlKGNvbnN0IEZpbGVFbnRyeVN5
bmMqIGZpbGVFbnRyeSwgRQogewogICAgIGVjID0gMDsKICAgICBSZWZQdHI8Q3JlYXRlRmlsZUhl
bHBlcjo6Q3JlYXRlRmlsZVJlc3VsdD4gcmVzdWx0KENyZWF0ZUZpbGVIZWxwZXI6OkNyZWF0ZUZp
bGVSZXN1bHQ6OmNyZWF0ZSgpKTsKLSAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNo
b3RGaWxlQW5kUmVhZE1ldGFkYXRhKGNyZWF0ZUZpbGVTeXN0ZW1VUkwoZmlsZUVudHJ5KSwgQ3Jl
YXRlRmlsZUhlbHBlcjo6Y3JlYXRlKHJlc3VsdCwgZmlsZUVudHJ5LT5uYW1lKCkpKTsKKyAgICBt
X2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKGNyZWF0
ZUZpbGVTeXN0ZW1VUkwoZmlsZUVudHJ5KSwgQ3JlYXRlRmlsZUhlbHBlcjo6Y3JlYXRlKHJlc3Vs
dCwgZmlsZUVudHJ5LT5uYW1lKCksIHR5cGUoKSkpOwogICAgIGlmICghbV9hc3luY0ZpbGVTeXN0
ZW0tPndhaXRGb3JPcGVyYXRpb25Ub0NvbXBsZXRlKCkpIHsKICAgICAgICAgZWMgPSBGaWxlRXhj
ZXB0aW9uOjpBQk9SVF9FUlI7CiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9GaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5j
cHAKaW5kZXggOTA1MjkxYjJkZDc1OTNlNWM2MDgwOTg2MTg0ZjhjNDNlMTZlOWY2MS4uYjA2ZjM4
MmEzZWQyNDgxNWEyYzUxYmQyZWMyNTU3MzlhZGMwYjY4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9GaWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUu
Y3BwCkBAIC01OSw2ICs1OSwyMCBAQCBzdGF0aWMgUGFzc093blB0cjxCbG9iRGF0YT4gY3JlYXRl
QmxvYkRhdGFGb3JGaWxlV2l0aE5hbWUoY29uc3QgU3RyaW5nJiBwYXRoLCBjbwogICAgIHJldHVy
biBjcmVhdGVCbG9iRGF0YUZvckZpbGVXaXRoVHlwZShwYXRoLCB0eXBlKTsKIH0KIAorI2lmIEVO
QUJMRShGSUxFX1NZU1RFTSkKK3N0YXRpYyBQYXNzT3duUHRyPEJsb2JEYXRhPiBjcmVhdGVCbG9i
RGF0YUZvckZpbGVXaXRoTWV0YWRhdGEoY29uc3QgU3RyaW5nJiBmaWxlU3lzdGVtTmFtZSwgY29u
c3QgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSkKK3sKKyAgICBTdHJpbmcgY29udGVudFR5cGU7Cisg
ICAgaW50IGluZGV4ID0gZmlsZVN5c3RlbU5hbWUucmV2ZXJzZUZpbmQoJy4nKTsKKyAgICBpZiAo
aW5kZXggIT0gLTEpCisgICAgICAgIGNvbnRlbnRUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0
V2VsbEtub3duTUlNRVR5cGVGb3JFeHRlbnNpb24oZmlsZVN5c3RlbU5hbWUuc3Vic3RyaW5nKGlu
ZGV4ICsgMSkpOworICAgIE93blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3Jl
YXRlKCk7CisgICAgYmxvYkRhdGEtPnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKTsKKyAgICBi
bG9iRGF0YS0+YXBwZW5kRmlsZShtZXRhZGF0YS5wbGF0Zm9ybVBhdGgsIDAsIG1ldGFkYXRhLmxl
bmd0aCwgbWV0YWRhdGEubW9kaWZpY2F0aW9uVGltZSk7CisgICAgcmV0dXJuIGJsb2JEYXRhLnJl
bGVhc2UoKTsKK30KKyNlbmRpZgorCiAjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCiBQYXNz
UmVmUHRyPEZpbGU+IEZpbGU6OmNyZWF0ZVdpdGhSZWxhdGl2ZVBhdGgoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCkKIHsKQEAgLTcyLDEyICs4NiwxNCBAQCBG
aWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICA6IEJsb2IoY3JlYXRlQmxvYkRhdGFG
b3JGaWxlKHBhdGgpLCAtMSkKICAgICAsIG1fcGF0aChwYXRoKQogICAgICwgbV9uYW1lKHBhdGhH
ZXRGaWxlTmFtZShwYXRoKSkKKyAgICAsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKDApCiB7
CiB9CiAKIEZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgdHlwZSkKICAgICA6IEJsb2IodXJsLCB0eXBlLCAtMSkKICAgICAsIG1fcGF0
aChwYXRoKQorICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoMCkKIHsKICAgICBtX25h
bWUgPSBwYXRoR2V0RmlsZU5hbWUocGF0aCk7CiAgICAgLy8gRklYTUU6IEZpbGUgb2JqZWN0IHNl
cmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIGRvZXMgbm90IGluY2x1ZGUKQEAgLTg5LDExICsx
MDUsMjcgQEAgRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbmFt
ZSkKICAgICA6IEJsb2IoY3JlYXRlQmxvYkRhdGFGb3JGaWxlV2l0aE5hbWUocGF0aCwgbmFtZSks
IC0xKQogICAgICwgbV9wYXRoKHBhdGgpCiAgICAgLCBtX25hbWUobmFtZSkKKyAgICAsIG1fc25h
cHNob3RNb2RpZmljYXRpb25UaW1lKDApCit7Cit9CisKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0p
CitGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmlsZU1ldGFkYXRhJiBtZXRh
ZGF0YSkKKyAgICA6IEJsb2IoY3JlYXRlQmxvYkRhdGFGb3JGaWxlV2l0aE1ldGFkYXRhKG5hbWUs
IG1ldGFkYXRhKSwgbWV0YWRhdGEubGVuZ3RoKQorICAgICwgbV9wYXRoKG1ldGFkYXRhLnBsYXRm
b3JtUGF0aCkKKyAgICAsIG1fbmFtZShuYW1lKQorICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlv
blRpbWUobWV0YWRhdGEubW9kaWZpY2F0aW9uVGltZSkKIHsKIH0KKyNlbmRpZgogCiBkb3VibGUg
RmlsZTo6bGFzdE1vZGlmaWVkRGF0ZSgpIGNvbnN0CiB7CisjaWYgRU5BQkxFKEZJTEVfU1lTVEVN
KQorICAgIGlmIChtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKKyAgICAgICAgcmV0dXJuIG1f
c25hcHNob3RNb2RpZmljYXRpb25UaW1lICogMTAwMC4wOworI2VuZGlmCisKICAgICB0aW1lX3Qg
bW9kaWZpY2F0aW9uVGltZTsKICAgICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25UaW1lKG1fcGF0
aCwgbW9kaWZpY2F0aW9uVGltZSkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTA0LDYgKzEzNiwx
MSBAQCBkb3VibGUgRmlsZTo6bGFzdE1vZGlmaWVkRGF0ZSgpIGNvbnN0CiAKIHVuc2lnbmVkIGxv
bmcgbG9uZyBGaWxlOjpzaXplKCkgY29uc3QKIHsKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisg
ICAgaWYgKG1fc2l6ZSA+PSAwKQorICAgICAgICByZXR1cm4gbV9zaXplOworI2VuZGlmCisKICAg
ICAvLyBGSVhNRTogSmF2YVNjcmlwdCBjYW5ub3QgcmVwcmVzZW50IHNpemVzIGFzIGxhcmdlIGFz
IHVuc2lnbmVkIGxvbmcgbG9uZywgd2UgbmVlZCB0bwogICAgIC8vIGNvbWUgdXAgd2l0aCBhbiBl
eGNlcHRpb24gdG8gdGhyb3cgaWYgZmlsZSBzaXplIGlzIG5vdCByZXByZXNlbnRhYmxlLgogICAg
IGxvbmcgbG9uZyBzaXplOwpAQCAtMTE0LDYgKzE1MSwxNCBAQCB1bnNpZ25lZCBsb25nIGxvbmcg
RmlsZTo6c2l6ZSgpIGNvbnN0CiAKIHZvaWQgRmlsZTo6Y2FwdHVyZVNuYXBzaG90KGxvbmcgbG9u
ZyYgc25hcHNob3RTaXplLCBkb3VibGUmIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkgY29uc3QK
IHsKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgaWYgKG1fc2l6ZSA+PSAwICYmIG1fc25h
cHNob3RNb2RpZmljYXRpb25UaW1lKSB7CisgICAgICAgIHNuYXBzaG90U2l6ZSA9IG1fc2l6ZTsK
KyAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1lID0gbV9zbmFwc2hvdE1vZGlmaWNhdGlv
blRpbWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKwogICAgIC8vIE9idGFpbnMg
YSBzbmFwc2hvdCBvZiB0aGUgZmlsZSBieSBjYXB0dXJpbmcgaXRzIGN1cnJlbnQgc2l6ZSBhbmQg
bW9kaWZpY2F0aW9uIHRpbWUuIFRoaXMgaXMgdXNlZCB3aGVuIHdlIHNsaWNlIGEgZmlsZSBmb3Ig
dGhlIGZpcnN0IHRpbWUuCiAgICAgLy8gSWYgd2UgZmFpbCB0byByZXRyaWV2ZSB0aGUgc2l6ZSBv
ciBtb2RpZmljYXRpb24gdGltZSwgcHJvYmFibHkgZHVlIHRvIHRoYXQgdGhlIGZpbGUgaGFzIGJl
ZW4gZGVsZXRlZCwgMCBzaXplIGlzIHJldHVybmVkLgogICAgIC8vIEZJWE1FOiBDb21iaW5lIGdl
dEZpbGVTaXplIGFuZCBnZXRGaWxlTW9kaWZpY2F0aW9uVGltZSBpbnRvIG9uZSBmaWxlIHN5c3Rl
bSBjYWxsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuaAppbmRleCA4Mzc1NjcxMWNmZjU0Y2ZiZWEzYWZlMzRi
MWJkNjFhYmYyMjVmMzI4Li4zNjU4ZmNjNGUzZGVjOWExNjA2MWJkMWNhM2Q3ZTk1MzE1YmIzMjNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0ZpbGUuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBGaWxlX2gK
IAogI2luY2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTUyLDYgKzUzLDE2IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxGaWxlPiBjcmVhdGVXaXRoUmVsYXRpdmVQYXRoKGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
RklMRV9TWVNURU0pCisgICAgLy8gRm9yIGZpbGVzeXN0ZW0gZmlsZXMuIEl0IHRha2VzIG1ldGFk
YXRhIGFyZ3VtZW50LCB3aGljaCBtYXkgc3VwcHJlc3MgZnV0dXJlIG1ldGFkYXRhIHF1ZXJ5IG9u
IHRoaXMgRmlsZSBvYmplY3QgaWYgaXQgaGFzIHZhbGlkIGluZm9ybWF0aW9uIChpLmUuIG5vbi16
ZXJvIG1vZGlmaWNhdGlvblRpbWUgYW5kL29yIG5vbi1uZWdhdGl2ZSBmaWxlIGxlbmd0aCkuIFRo
ZSBtZXRhZGF0YSBhcmd1bWVudCBtdXN0IGJlIGdpdmVuIGNhcmVmdWxseSBvbmx5IHdoZW4gaXQg
aXMgaW5mZWFzaWJsZSB0byBxdWVyeSBmaWxlIG1ldGFkYXRhIG9uIHRoZSBmbHkgKGUuZy4gZmls
ZSBpcyBvbiByZW1vdGUgZmlsZXN5c3RlbSkuCisgICAgLy8KKyAgICAvLyBPdGhlcndpc2UgY2Fs
bGluZyBzaXplKCksIGxhc3RNb2RpZmllZFRpbWUoKSBvciB3ZWJraXRTbGljZSgpIHdpbGwgc3lu
Y2hyb25vdXNseSBxdWVyeSB0aGUgZmlsZSBtZXRhZGF0YS4KKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxGaWxlPiBjcmVhdGVGb3JGaWxlU3lzdGVtRmlsZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEZpbGUobmFtZSwgbWV0YWRhdGEpKTsKKyAgICB9CisjZW5kaWYKKwogICAgIC8vIENyZWF0
ZSBhIGZpbGUgd2l0aCBhIG5hbWUgZXhwb3NlZCB0byB0aGUgYXV0aG9yICh2aWEgRmlsZS5uYW1l
IGFuZCBhc3NvY2lhdGVkIERPTSBwcm9wZXJ0aWVzKSB0aGF0IGRpZmZlcnMgZnJvbSB0aGUgb25l
IHByb3ZpZGVkIGluIHRoZSBwYXRoLgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGU+IGNyZWF0
ZVdpdGhOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBuYW1lKQogICAgIHsK
QEAgLTgxLDggKzkyLDE3IEBAIHByaXZhdGU6CiAgICAgRmlsZShjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IEtVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlKTsKICAgICBGaWxlKGNvbnN0
IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAorIyBpZiBFTkFCTEUoRklMRV9T
WVNURU0pCisgICAgRmlsZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZpbGVNZXRhZGF0YSYp
OworI2VuZGlmCisKICAgICBTdHJpbmcgbV9wYXRoOwogICAgIFN0cmluZyBtX25hbWU7CisKKyNp
ZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgY29uc3QgZG91YmxlIG1fc25hcHNob3RNb2RpZmlj
YXRpb25UaW1lOworI2VuZGlmCisKICNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKICAgICBT
dHJpbmcgbV9yZWxhdGl2ZVBhdGg7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5
bmNGaWxlU3lzdGVtLmgKaW5kZXggNmU1M2E5YWE1ZjNkNzkwODlhMWJlNmZkNmQ0NTE0ZDk0MzZi
ZTZiYS4uYzMzZDZhMGYyYjMzZjNiNGY3MjY1ZTcxODYwODRkM2FiNjNiMGQ0YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmgKQEAgLTEyNyw2ICsxMjcsOCBAQCBw
dWJsaWM6CiAgICAgLy8gd2hpbGUgaW4gcmVtb3RlIGZpbGVzeXN0ZW0gY2FzZSB0aGUgYmFja2Vu
ZCBtYXkgZG93bmxvYWQgdGhlIGZpbGUgaW50byBhIHRlbXBvcmFyeSBzbmFwc2hvdCBmaWxlIGFu
ZCByZXR1cm4gdGhlIG1ldGFkYXRhIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZS4KICAgICAvLyBBc3lu
Y0ZpbGVTeXN0ZW1DYWxsYmFja3M6OmRpZFJlYWRNZXRhZGF0YSgpIGlzIGNhbGxlZCB3aGVuIHRo
ZSBtZXRhZGF0YSBmb3IgdGhlIHNuYXBzaG90IGZpbGUgaXMgc3VjY2Vzc2Z1bGx5IHJldHVybmVk
LgogICAgIC8vIEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrczo6ZGlkRmFpbCgpIGlzIGNhbGxlZCBv
dGhlcndpc2UuCisgICAgLy8KKyAgICAvLyBOb3RlOiB0aGUgcmV0dXJuZWQgbWV0YWRhdGEgaW5m
byBpcyBjYWNoZWQgaW4gdGhlIEZpbGUgb2JqZWN0IGZvciBub24tcmVndWxhciBmaWxlc3lzdGVt
IHR5cGVzIChuZWl0aGVyIFRlbXBvcmFyeSBub3IgUGVyc2lzdGVudCkuIFRoZSBwb3J0IGNvdWxk
IHJldHVybiB2YWxpZCBtZXRhZGF0YSBpZiBpdCB3YW50cyBGaWxlIG9iamVjdCB0byBjYWNoZSBt
ZXRhZGF0YSAoZS5nLiBpZiB0aGUgZmlsZSBib2R5IGlzIG9uIGEgcmVtb3RlIHNlcnZlciksIGJ1
dCBvdGhlcndpc2Ugc2hvdWxkIE5PVCByZXR1cm4gdmFsaWQgbWV0YWRhdGEuCiAgICAgdmlydHVh
bCB2b2lkIGNyZWF0ZVNuYXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YShjb25zdCBLVVJMJiBwYXRo
LCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pID0gMDsKIAogcHJvdGVjdGVk
OgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDJhMjJhMzhmNzhjYWZhNDdkNzdkOWE0NTVlMWU3Mzg5ODNkMWMyYjcuLjE4OTkz
NmE2ZWE4ODFmYjU2ZDgyMGNiZDgyZTE1YmViMDFlYjM4MDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBA
QAorMjAxMi0wNS0xMSAgS2ludWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgQWxsb3cgRmlsZVN5c3RlbSBBUEkgaW1wbGVtZW50YXRpb24gdG8gcGFzcyBzbmFwc2hv
dCBtZXRhZGF0YSBhdCBGaWxlIGNyZWF0aW9uIHRpbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS1yZWFkLWFmdGVy
LXdyaXRlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL2Zp
bGUtcmVhZC1hZnRlci13cml0ZS5odG1sOiBBZGRlZC4KKwogMjAxMi0wNS0xNCAgTWlrZSBXZXN0
ICA8bWlrZUBtaWtld2VzdC5vcmc+CiAKICAgICAgICAgQ29udGVudCBTZWN1cml0eSBQb2xpY3kg
Y29uc29sZSBlcnJvcnMgaW5jbHVkZSB2aW9sYXRlZCBkaXJlY3RpdmUuCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS1tZXRhZGF0YS1hZnRlci13cml0ZS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS1tZXRhZGF0YS1hZnRl
ci13cml0ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjgxNGZmZDBmYTA1ZDQ0YzBmN2E3NTY1
YTdmNjg5Y2UxZmMxZTYwZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9maWxlLW1ldGFkYXRhLWFmdGVyLXdyaXRlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDkgQEAKK1dyaXRpbmcgMTIzNDU2Nzg5MCB0byB0aGUgZmlsZS4uLgorQ3JlYXRlZCBhIHdyaXRl
ci4KK1dyaXRlIHN1Y2NlZWRlZC4KK1BBU1M6ICIxMCIgPT0gIjEwIgorV3JpdGluZyBhYmNkZWZn
aGlqa2xtbm9wcXJzdHV2d3h5eiB0byB0aGUgZmlsZS4uLgorQ3JlYXRlZCBhIHdyaXRlci4KK1dy
aXRlIHN1Y2NlZWRlZC4KK1BBU1M6ICIyNiIgPT0gIjI2IgorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS1tZXRhZGF0YS1hZnRlci13cml0ZS5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtbWV0YWRhdGEtYWZ0ZXItd3JpdGUuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iOWNhYmVmMGYxZTljOGM0Yzc0NmRlNTU2NzlhNmZkYTE5ZmJmZWM3Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtbWV0YWRhdGEt
YWZ0ZXItd3JpdGUuaHRtbApAQCAtMCwwICsxLDg5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGJvZHk+Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKzxzY3JpcHQ+CisKK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3Zh
ciBmaWxlRW50cnlGb3JDbGVhbnVwOwordmFyIHRlc3RUZXh0MSA9ICcxMjM0NTY3ODkwJzsKK3Zh
ciB0ZXN0VGV4dDIgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonOworCit3ZWJraXRSZXF1
ZXN0RmlsZVN5c3RlbSgKKyAgICB3aW5kb3cuVEVNUE9SQVJZLCAxMDAsIGZ1bmN0aW9uKGZzKSB7
CisgICAgICAgIGZzLnJvb3QuZ2V0RmlsZSgndGVzdCcsIHtjcmVhdGU6dHJ1ZX0sIGZ1bmN0aW9u
KGVudHJ5KSB7CisgICAgICAgICAgICB3cml0ZVRleHRUb0ZpbGUoZW50cnksIHRlc3RUZXh0MSwg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgbG9nKCdXcml0ZSBzdWNjZWVkZWQuJyk7Cisg
ICAgICAgICAgICAgICAgZW50cnkuZmlsZShvbkNyZWF0ZUZpbGUuYmluZCh0aGlzLCBlbnRyeSks
IG9uRXJyb3IpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0sIG9uRXJyb3IpOworICAgIH0s
IG9uRXJyb3IpOworCitmdW5jdGlvbiBvbkNyZWF0ZUZpbGUoZW50cnksIGZpbGUpIHsKKyAgICB0
ZXN0KHRlc3RUZXh0MS5sZW5ndGgsIGZpbGUuc2l6ZSk7CisgICAgLy8gV3JpdGUgaW50byB0aGlz
IGZpbGUgYWdhaW4uCisgICAgd3JpdGVUZXh0VG9GaWxlKGVudHJ5LCB0ZXN0VGV4dDIsIGZ1bmN0
aW9uKCkgeworICAgICAgICBsb2coJ1dyaXRlIHN1Y2NlZWRlZC4nKTsKKyAgICAgICAgZW50cnku
ZmlsZShmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIC8vIFRoZSBmaWxlIHNpemUgc2hvdWxkIGJl
IHVwZGF0ZWQuCisgICAgICAgICAgICB0ZXN0KHRlc3RUZXh0Mi5sZW5ndGgsIGZpbGUuc2l6ZSk7
CisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgIH0sIG9uRXJyb3IpOworICAgIH0pOwor
fQorCitmdW5jdGlvbiB3cml0ZVRleHRUb0ZpbGUoZW50cnksIGNvbnRlbnRzLCBzdWNjZXNzQ2Fs
bGJhY2spCit7CisgICAgbG9nKCdXcml0aW5nICcgKyBjb250ZW50cyArICcgdG8gdGhlIGZpbGUu
Li4nKTsKKyAgICBlbnRyeS5jcmVhdGVXcml0ZXIoZnVuY3Rpb24od3JpdGVyKSB7CisgICAgICAg
IGxvZygnQ3JlYXRlZCBhIHdyaXRlci4nKTsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2Vi
S2l0QmxvYkJ1aWxkZXIoKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoY29udGVudHMpOworICAg
ICAgICB3cml0ZXIud3JpdGUoYnVpbGRlci5nZXRCbG9iKCdwbGFpbi90ZXh0JykpOworICAgICAg
ICB3cml0ZXIub253cml0ZWVuZCA9IHN1Y2Nlc3NDYWxsYmFjazsKKyAgICAgICAgd3JpdGVyLm9u
ZXJyb3IgPSBvbkVycm9yOworICAgIH0pOworfQorCitmdW5jdGlvbiBsb2codGV4dCkKK3sKKyAg
ICB2YXIgY29uc29sZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyk7CisgICAg
Y29uc29sZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7CisgICAg
Y29uc29sZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKK30KKwor
ZnVuY3Rpb24gdGVzdChleHBlY3QsIGFjdHVhbCkKK3sKKyAgICBsb2coKGV4cGVjdCA9PSBhY3R1
YWwgPyAnUEFTUycgOiAnRkFJTCcpICsgJzogIicgKyBleHBlY3QgKyAnIiA9PSAiJyArIGFjdHVh
bCArICciJyk7Cit9CisKK2Z1bmN0aW9uIG9uRXJyb3IoZSkKK3sKKyAgICBsb2coJ0VSUk9SOiAn
ICsgZS5jb2RlKTsKKyAgICBjb25zb2xlLmxvZyhlKTsKKyAgICBjbGVhbnVwKCk7Cit9CisKK2Z1
bmN0aW9uIGNsZWFudXAoKQoreworICAgIGlmIChmaWxlRW50cnlGb3JDbGVhbnVwKSB7CisgICAg
ICAgIGZpbGVFbnRyeUZvckNsZWFudXAucmVtb3ZlKGVuZFRlc3QsIGVuZFRlc3QpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGVuZFRlc3QoKTsKK30KKworZnVuY3Rpb24gZW5kVGVzdCgp
Cit7CisgICAgaWYgKGxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141940</attachid>
            <date>2012-05-15 05:59:54 -0700</date>
            <delta_ts>2012-05-16 22:50:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78879-20120515215953.patch</filename>
            <type>text/plain</type>
            <size>18452</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE3MDA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE0M2YzMWIwZDI5OWQw
ODAyZTM2OGIxYjM3YjdmOTliNjY1MjZhZi4uOTVhZWFjMzkxZTI5ZTgzYjlmMTYzMzVkOWMzMjY4
N2ZmYmFkYzYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTA1LTExICBLaW51
a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAgICAgICBBbGxvdyBGaWxlU3lz
dGVtIEFQSSBpbXBsZW1lbnRhdGlvbiB0byBwYXNzIHNuYXBzaG90IG1ldGFkYXRhIGF0IEZpbGUg
Y3JlYXRpb24gdGltZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Nzg4NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBXZSBxdWVyeSBGaWxlIG1ldGFkYXRhIChlLmcuIHNpemUgYW5kIG1vZGlmaWVkVGltZSkg
d2hlbiBGaWxlLnNpemUsCisgICAgICAgIGxhc3RNb2RpZmllZFRpbWUgb3Igd2Via2l0U2xpY2Uo
KSBpcyBhY2Nlc3NlZCAvIGNhbGxlZCwgYnV0IGluIHNvbWUKKyAgICAgICAgcGxhdGZvcm0tc3Bl
Y2lmaWMgZmlsZXN5c3RlbXMgaXQgbWF5IG5vdCBiZSBmZWFzaWJsZSBzaW5jZSBzeW5jaHJvbm91
cworICAgICAgICBtZXRhZGF0YSBxdWVyeSBjb3VsZCB0YWtlIHZlcnkgbG9uZyB0aW1lLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBuZXcgRmlsZSBjb25zdHJ1Y3RvciB3aGljaCB0YWtlcyBt
ZXRhZGF0YSBhcmd1bWVudAorICAgICAgICB0byBhbGxvdyBlYWNoIEZpbGVTeXN0ZW0gQVBJIGlt
cGxlbWVudGF0aW9uIHRvIHBhc3Mgc25hcHNob3QgbWV0YWRhdGEKKyAgICAgICAgc28gdGhhdCBG
aWxlIG9iamVjdCBjb3VsZCBjYWNoZSB0aGUgZ2l2ZW4gbWV0YWRhdGEgbm90IHRvIG1ha2UKKyAg
ICAgICAgc3luY2hyb25vdXMgcXVlcnkuCisKKyAgICAgICAgV2Ugb25seSBjYWxsIHRoaXMgY29u
c3RydWN0b3IgaWYgdGhlIGZpbGVzeXN0ZW0gdHlwZSBpcyBuZWl0aGVyCisgICAgICAgIFRlbXBv
cmFyeSBub3IgUGVyc2lzdGVudCwgdGhlcmVmb3JlIHRoaXMgcGF0Y2ggc2hvdWxkIG5vdCBhZmZl
Y3QKKyAgICAgICAgZXhpc3RpbmcgY29kZSBiZWhhdmlvci4KKworICAgICAgICBUZXN0OiBmYXN0
L2ZpbGVzeXN0ZW0vZmlsZS1yZWFkLWFmdGVyLXdyaXRlLmh0bWwKKworICAgICAgICAqIE1vZHVs
ZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZp
bGVTeXN0ZW06OmNyZWF0ZUZpbGUpOgorICAgICAgICAqIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01G
aWxlU3lzdGVtU3luYy5jcHA6CisgICAgICAgICogZmlsZWFwaS9CbG9iLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkJsb2I6OndlYmtpdFNsaWNlKTogVXBkYXRlZCBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgKiBmaWxlYXBpL0Jsb2IuaDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZTo6RmlsZSk6IEFkZGVkIG5ldyBjb25zdHJ1Y3Rvci4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGU6Omxhc3RNb2RpZmllZERhdGUpOiBVcGRhdGVkIGltcGxlbWVudGF0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6c2l6ZSk6IFVwZGF0ZWQgaW1wbGVtZW50YXRp
b24uCisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpjYXB0dXJlU25hcHNob3QpOiBVcGRhdGVkIGlt
cGxlbWVudGF0aW9uLgorICAgICAgICAqIGZpbGVhcGkvRmlsZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZTo6Y3JlYXRlRm9yRmlsZVN5c3RlbUZpbGUpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKEFzeW5jRmlsZVN5c3RlbSk6IFVwZGF0
ZWQgY29tbWVudC4KKwogMjAxMi0wNS0xNCAgTWlrZSBXZXN0ICA8bWlrZUBtaWtld2VzdC5vcmc+
CiAKICAgICAgICAgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgY29uc29sZSBlcnJvcnMgaW5jbHVk
ZSB2aW9sYXRlZCBkaXJlY3RpdmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zp
bGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5jcHAKaW5kZXggMDkwYmNjMDUyMGQwNzIwNjFhN2IxNGUz
YmQ1NDdjMDU4YmMwYTg3MC4uN2JiMGE2NzU3NjdkNWVkZWJmY2NkYzdlZTNmZGMwODIyOWVlNDkw
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVT
eXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
U3lzdGVtLmNwcApAQCAtMTIzLDExICsxMjMsMTEgQEAgdm9pZCBET01GaWxlU3lzdGVtOjpjcmVh
dGVXcml0ZXIoY29uc3QgRmlsZUVudHJ5KiBmaWxlRW50cnksIFBhc3NSZWZQdHI8RmlsZVdyaXQK
IAogbmFtZXNwYWNlIHsKIAotY2xhc3MgR2V0UGF0aENhbGxiYWNrIDogcHVibGljIEZpbGVTeXN0
ZW1DYWxsYmFja3NCYXNlIHsKK2NsYXNzIEdldE1ldGFkYXRhQ2FsbGJhY2sgOiBwdWJsaWMgRmls
ZVN5c3RlbUNhbGxiYWNrc0Jhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEdl
dFBhdGhDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZXN5c3Rl
bSwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4gc3VjY2Vzc0Nh
bGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCisgICAgc3Rh
dGljIFBhc3NPd25QdHI8R2V0TWV0YWRhdGFDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RE9N
RmlsZVN5c3RlbT4gZmlsZXN5c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEZp
bGVDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVy
cm9yQ2FsbGJhY2spCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdldFBhdGhD
YWxsYmFjayhmaWxlc3lzdGVtLCBuYW1lLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2sp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXRNZXRhZGF0YUNhbGxiYWNrKGZpbGVz
eXN0ZW0sIG5hbWUsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOwogICAgIH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkTWV0YWRhdGEoY29uc3QgRmlsZU1ldGFkYXRhJiBtZXRh
ZGF0YSkKQEAgLTEzNiwxMiArMTM2LDE4IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFtX3N1Y2Nl
c3NDYWxsYmFjaykKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBtX3N1Y2Nlc3NDYWxs
YmFjay0+aGFuZGxlRXZlbnQoRmlsZTo6Y3JlYXRlV2l0aE5hbWUobWV0YWRhdGEucGxhdGZvcm1Q
YXRoLCBtX25hbWUpLmdldCgpKTsKKyAgICAgICAgLy8gRm9yIHJlZ3VsYXIgZmlsZXN5c3RlbSB0
eXBlcyAodGVtcG9yYXJ5IG9yIHBlcnNpc3RlbnQpLCB3ZSBzaG91bGQgbm90IGNhY2hlIGZpbGUg
bWV0YWRhdGEgYXMgaXQgY291bGQgY2hhbmdlIEZpbGUgc2VtYW50aWNzLgorICAgICAgICAvLyBG
b3Igb3RoZXIgZmlsZXN5c3RlbSB0eXBlcyAod2hpY2ggY291bGQgYmUgcGxhdGZvcm0tc3BlY2lm
aWMgb25lcyksIHRoZXJlJ3MgYSBjaGFuY2UgdGhhdCB0aGUgZmlsZXMgYXJlIG9uIHJlbW90ZSBm
aWxlc3lzdGVtLiBJZiB0aGUgcG9ydCBoYXMgcmV0dXJuZWQgbWV0YWRhdGEganVzdCBwYXNzIGl0
IHRvIEZpbGUgY29uc3RydWN0b3IgKHNvIHdlIG1heSBjYWNoZSB0aGUgbWV0YWRhdGEpLgorICAg
ICAgICBpZiAobV9maWxlc3lzdGVtLT50eXBlKCkgPT0gRmlsZVN5c3RlbVR5cGVUZW1wb3Jhcnkg
fHwgbV9maWxlc3lzdGVtLT50eXBlKCkgPT0gRmlsZVN5c3RlbVR5cGVQZXJzaXN0ZW50KQorICAg
ICAgICAgICAgbV9zdWNjZXNzQ2FsbGJhY2stPmhhbmRsZUV2ZW50KEZpbGU6OmNyZWF0ZVdpdGhO
YW1lKG1ldGFkYXRhLnBsYXRmb3JtUGF0aCwgbV9uYW1lKS5nZXQoKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1fc3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVFdmVudChGaWxlOjpjcmVhdGVG
b3JGaWxlU3lzdGVtRmlsZShtX25hbWUsIG1ldGFkYXRhKS5nZXQoKSk7CisKICAgICAgICAgbV9z
dWNjZXNzQ2FsbGJhY2sucmVsZWFzZSgpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBHZXRQYXRo
Q2FsbGJhY2soUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlc3lzdGVtLCBjb25zdCBTdHJp
bmcmIG5hbWUsICBQYXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNz
UmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCisgICAgR2V0TWV0YWRhdGFDYWxs
YmFjayhQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVzeXN0ZW0sIGNvbnN0IFN0cmluZyYg
bmFtZSwgIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQ
dHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKICAgICAgICAgOiBGaWxlU3lzdGVtQ2Fs
bGJhY2tzQmFzZShlcnJvckNhbGxiYWNrKQogICAgICAgICAsIG1fZmlsZXN5c3RlbShmaWxlc3lz
dGVtKQogICAgICAgICAsIG1fbmFtZShuYW1lKQpAQCAtMTU4LDcgKzE2NCw3IEBAIHByaXZhdGU6
CiAKIHZvaWQgRE9NRmlsZVN5c3RlbTo6Y3JlYXRlRmlsZShjb25zdCBGaWxlRW50cnkqIGZpbGVF
bnRyeSwgUGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0
cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQogewotICAgIG1fYXN5bmNGaWxlU3lzdGVt
LT5jcmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEoY3JlYXRlRmlsZVN5c3RlbVVSTChm
aWxlRW50cnkpLCBHZXRQYXRoQ2FsbGJhY2s6OmNyZWF0ZSh0aGlzLCBmaWxlRW50cnktPm5hbWUo
KSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSk7CisgICAgbV9hc3luY0ZpbGVTeXN0
ZW0tPmNyZWF0ZVNuYXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YShjcmVhdGVGaWxlU3lzdGVtVVJM
KGZpbGVFbnRyeSksIEdldE1ldGFkYXRhQ2FsbGJhY2s6OmNyZWF0ZSh0aGlzLCBmaWxlRW50cnkt
Pm5hbWUoKSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5
c3RlbS9ET01GaWxlU3lzdGVtU3luYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVz
eXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMuY3BwCmluZGV4IDhhNTdkMDA1ZTYzMmM3YWNhNjAzN2U4
NDMwMGQwNmU3NjdlNTFlMzYuLmJjMzZjYWVkZGM3ZGZhOTY3NzExMDkyYjAzZGU1ODQ2MDcwNjYy
OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
U3lzdGVtU3luYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RP
TUZpbGVTeXN0ZW1TeW5jLmNwcApAQCAtOTgsOSArOTgsOSBAQCBwdWJsaWM6CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBXVEY6OlJlZkNvdW50ZWQ8Q3JlYXRlRmlsZVJlc3VsdD47CiAgICAgfTsKIAot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENyZWF0ZUZpbGVIZWxwZXI+IGNyZWF0ZShQYXNzUmVmUHRy
PENyZWF0ZUZpbGVSZXN1bHQ+IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIHN0YXRp
YyBQYXNzT3duUHRyPENyZWF0ZUZpbGVIZWxwZXI+IGNyZWF0ZShQYXNzUmVmUHRyPENyZWF0ZUZp
bGVSZXN1bHQ+IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBGaWxlU3lzdGVtVHlwZSB0eXBl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVGaWxlSGVscGVyKHJl
c3VsdCwgbmFtZSkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZUZpbGVIZWxw
ZXIocmVzdWx0LCBuYW1lLCB0eXBlKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpZEZh
aWwoaW50IGNvZGUpCkBAIC0xMTUsMTcgKzExNSwyNCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRp
ZFJlYWRNZXRhZGF0YShjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQogICAgIHsKLSAgICAg
ICAgbV9yZXN1bHQtPm1fZmlsZSA9IEZpbGU6OmNyZWF0ZVdpdGhOYW1lKG1ldGFkYXRhLnBsYXRm
b3JtUGF0aCwgbV9uYW1lKTsKKyAgICAgICAgLy8gRm9yIHJlZ3VsYXIgZmlsZXN5c3RlbSB0eXBl
cyAodGVtcG9yYXJ5IG9yIHBlcnNpc3RlbnQpLCB3ZSBzaG91bGQgbm90IGNhY2hlIGZpbGUgbWV0
YWRhdGEgYXMgaXQgY291bGQgY2hhbmdlIEZpbGUgc2VtYW50aWNzLgorICAgICAgICAvLyBGb3Ig
b3RoZXIgZmlsZXN5c3RlbSB0eXBlcyAod2hpY2ggY291bGQgYmUgcGxhdGZvcm0tc3BlY2lmaWMg
b25lcyksIHRoZXJlJ3MgYSBjaGFuY2UgdGhhdCB0aGUgZmlsZXMgYXJlIG9uIHJlbW90ZSBmaWxl
c3lzdGVtLiBJZiB0aGUgcG9ydCBoYXMgcmV0dXJuZWQgbWV0YWRhdGEganVzdCBwYXNzIGl0IHRv
IEZpbGUgY29uc3RydWN0b3IgKHNvIHdlIG1heSBjYWNoZSB0aGUgbWV0YWRhdGEpLgorICAgICAg
ICBpZiAobV90eXBlID09IEZpbGVTeXN0ZW1UeXBlVGVtcG9yYXJ5IHx8IG1fdHlwZSA9PSBGaWxl
U3lzdGVtVHlwZVBlcnNpc3RlbnQpCisgICAgICAgICAgICBtX3Jlc3VsdC0+bV9maWxlID0gRmls
ZTo6Y3JlYXRlV2l0aE5hbWUobWV0YWRhdGEucGxhdGZvcm1QYXRoLCBtX25hbWUpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX3Jlc3VsdC0+bV9maWxlID0gRmlsZTo6Y3JlYXRlRm9yRmls
ZVN5c3RlbUZpbGUobV9uYW1lLCBtZXRhZGF0YSk7CiAgICAgfQogcHJpdmF0ZToKLSAgICBDcmVh
dGVGaWxlSGVscGVyKFBhc3NSZWZQdHI8Q3JlYXRlRmlsZVJlc3VsdD4gcmVzdWx0LCBjb25zdCBT
dHJpbmcmIG5hbWUpCisgICAgQ3JlYXRlRmlsZUhlbHBlcihQYXNzUmVmUHRyPENyZWF0ZUZpbGVS
ZXN1bHQ+IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBGaWxlU3lzdGVtVHlwZSB0eXBlKQog
ICAgICAgICA6IG1fcmVzdWx0KHJlc3VsdCkKICAgICAgICAgLCBtX25hbWUobmFtZSkKKyAgICAg
ICAgLCBtX3R5cGUodHlwZSkKICAgICB7CiAgICAgfQogCiAgICAgUmVmUHRyPENyZWF0ZUZpbGVS
ZXN1bHQ+IG1fcmVzdWx0OwogICAgIFN0cmluZyBtX25hbWU7CisgICAgRmlsZVN5c3RlbVR5cGUg
bV90eXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UKQEAgLTEzNCw3ICsxNDEsNyBAQCBQYXNzUmVm
UHRyPEZpbGU+IERPTUZpbGVTeXN0ZW1TeW5jOjpjcmVhdGVGaWxlKGNvbnN0IEZpbGVFbnRyeVN5
bmMqIGZpbGVFbnRyeSwgRQogewogICAgIGVjID0gMDsKICAgICBSZWZQdHI8Q3JlYXRlRmlsZUhl
bHBlcjo6Q3JlYXRlRmlsZVJlc3VsdD4gcmVzdWx0KENyZWF0ZUZpbGVIZWxwZXI6OkNyZWF0ZUZp
bGVSZXN1bHQ6OmNyZWF0ZSgpKTsKLSAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNo
b3RGaWxlQW5kUmVhZE1ldGFkYXRhKGNyZWF0ZUZpbGVTeXN0ZW1VUkwoZmlsZUVudHJ5KSwgQ3Jl
YXRlRmlsZUhlbHBlcjo6Y3JlYXRlKHJlc3VsdCwgZmlsZUVudHJ5LT5uYW1lKCkpKTsKKyAgICBt
X2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKGNyZWF0
ZUZpbGVTeXN0ZW1VUkwoZmlsZUVudHJ5KSwgQ3JlYXRlRmlsZUhlbHBlcjo6Y3JlYXRlKHJlc3Vs
dCwgZmlsZUVudHJ5LT5uYW1lKCksIHR5cGUoKSkpOwogICAgIGlmICghbV9hc3luY0ZpbGVTeXN0
ZW0tPndhaXRGb3JPcGVyYXRpb25Ub0NvbXBsZXRlKCkpIHsKICAgICAgICAgZWMgPSBGaWxlRXhj
ZXB0aW9uOjpBQk9SVF9FUlI7CiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9GaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5j
cHAKaW5kZXggOTA1MjkxYjJkZDc1OTNlNWM2MDgwOTg2MTg0ZjhjNDNlMTZlOWY2MS4uYjdmNDZj
ZDNhMTk0YzBmZTQzNzA3NmI3NmM3ZTQ4ZGJhNWUwNDc5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9GaWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUu
Y3BwCkBAIC01OSw2ICs1OSwyMCBAQCBzdGF0aWMgUGFzc093blB0cjxCbG9iRGF0YT4gY3JlYXRl
QmxvYkRhdGFGb3JGaWxlV2l0aE5hbWUoY29uc3QgU3RyaW5nJiBwYXRoLCBjbwogICAgIHJldHVy
biBjcmVhdGVCbG9iRGF0YUZvckZpbGVXaXRoVHlwZShwYXRoLCB0eXBlKTsKIH0KIAorI2lmIEVO
QUJMRShGSUxFX1NZU1RFTSkKK3N0YXRpYyBQYXNzT3duUHRyPEJsb2JEYXRhPiBjcmVhdGVCbG9i
RGF0YUZvckZpbGVXaXRoTWV0YWRhdGEoY29uc3QgU3RyaW5nJiBmaWxlU3lzdGVtTmFtZSwgY29u
c3QgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSkKK3sKKyAgICBTdHJpbmcgY29udGVudFR5cGU7Cisg
ICAgaW50IGluZGV4ID0gZmlsZVN5c3RlbU5hbWUucmV2ZXJzZUZpbmQoJy4nKTsKKyAgICBpZiAo
aW5kZXggIT0gLTEpCisgICAgICAgIGNvbnRlbnRUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0
V2VsbEtub3duTUlNRVR5cGVGb3JFeHRlbnNpb24oZmlsZVN5c3RlbU5hbWUuc3Vic3RyaW5nKGlu
ZGV4ICsgMSkpOworICAgIE93blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3Jl
YXRlKCk7CisgICAgYmxvYkRhdGEtPnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKTsKKyAgICBi
bG9iRGF0YS0+YXBwZW5kRmlsZShtZXRhZGF0YS5wbGF0Zm9ybVBhdGgsIDAsIG1ldGFkYXRhLmxl
bmd0aCwgbWV0YWRhdGEubW9kaWZpY2F0aW9uVGltZSk7CisgICAgcmV0dXJuIGJsb2JEYXRhLnJl
bGVhc2UoKTsKK30KKyNlbmRpZgorCiAjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCiBQYXNz
UmVmUHRyPEZpbGU+IEZpbGU6OmNyZWF0ZVdpdGhSZWxhdGl2ZVBhdGgoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCkKIHsKQEAgLTcyLDEyICs4NiwxOCBAQCBG
aWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICA6IEJsb2IoY3JlYXRlQmxvYkRhdGFG
b3JGaWxlKHBhdGgpLCAtMSkKICAgICAsIG1fcGF0aChwYXRoKQogICAgICwgbV9uYW1lKHBhdGhH
ZXRGaWxlTmFtZShwYXRoKSkKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgLCBtX3NuYXBz
aG90TW9kaWZpY2F0aW9uVGltZSgwKQorI2VuZGlmCiB7CiB9CiAKIEZpbGU6OkZpbGUoY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICA6
IEJsb2IodXJsLCB0eXBlLCAtMSkKICAgICAsIG1fcGF0aChwYXRoKQorI2lmIEVOQUJMRShGSUxF
X1NZU1RFTSkKKyAgICAsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKDApCisjZW5kaWYKIHsK
ICAgICBtX25hbWUgPSBwYXRoR2V0RmlsZU5hbWUocGF0aCk7CiAgICAgLy8gRklYTUU6IEZpbGUg
b2JqZWN0IHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIGRvZXMgbm90IGluY2x1ZGUKQEAg
LTg5LDExICsxMDksMjkgQEAgRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0
cmluZyYgbmFtZSkKICAgICA6IEJsb2IoY3JlYXRlQmxvYkRhdGFGb3JGaWxlV2l0aE5hbWUocGF0
aCwgbmFtZSksIC0xKQogICAgICwgbV9wYXRoKHBhdGgpCiAgICAgLCBtX25hbWUobmFtZSkKKyNp
ZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSgw
KQorI2VuZGlmCiB7CiB9CiAKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCitGaWxlOjpGaWxlKGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSkKKyAgICA6IEJs
b2IoY3JlYXRlQmxvYkRhdGFGb3JGaWxlV2l0aE1ldGFkYXRhKG5hbWUsIG1ldGFkYXRhKSwgbWV0
YWRhdGEubGVuZ3RoKQorICAgICwgbV9wYXRoKG1ldGFkYXRhLnBsYXRmb3JtUGF0aCkKKyAgICAs
IG1fbmFtZShuYW1lKQorICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUobWV0YWRhdGEu
bW9kaWZpY2F0aW9uVGltZSkKK3sKK30KKyNlbmRpZgorCiBkb3VibGUgRmlsZTo6bGFzdE1vZGlm
aWVkRGF0ZSgpIGNvbnN0CiB7CisjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorICAgIGlmIChtX3Nu
YXBzaG90TW9kaWZpY2F0aW9uVGltZSkKKyAgICAgICAgcmV0dXJuIG1fc25hcHNob3RNb2RpZmlj
YXRpb25UaW1lICogMTAwMC4wOworI2VuZGlmCisKICAgICB0aW1lX3QgbW9kaWZpY2F0aW9uVGlt
ZTsKICAgICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25UaW1lKG1fcGF0aCwgbW9kaWZpY2F0aW9u
VGltZSkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTA0LDYgKzE0MiwxMSBAQCBkb3VibGUgRmls
ZTo6bGFzdE1vZGlmaWVkRGF0ZSgpIGNvbnN0CiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBGaWxlOjpz
aXplKCkgY29uc3QKIHsKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgaWYgKG1fc2l6ZSA+
PSAwKQorICAgICAgICByZXR1cm4gbV9zaXplOworI2VuZGlmCisKICAgICAvLyBGSVhNRTogSmF2
YVNjcmlwdCBjYW5ub3QgcmVwcmVzZW50IHNpemVzIGFzIGxhcmdlIGFzIHVuc2lnbmVkIGxvbmcg
bG9uZywgd2UgbmVlZCB0bwogICAgIC8vIGNvbWUgdXAgd2l0aCBhbiBleGNlcHRpb24gdG8gdGhy
b3cgaWYgZmlsZSBzaXplIGlzIG5vdCByZXByZXNlbnRhYmxlLgogICAgIGxvbmcgbG9uZyBzaXpl
OwpAQCAtMTE0LDYgKzE1NywxNCBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRmlsZTo6c2l6ZSgpIGNv
bnN0CiAKIHZvaWQgRmlsZTo6Y2FwdHVyZVNuYXBzaG90KGxvbmcgbG9uZyYgc25hcHNob3RTaXpl
LCBkb3VibGUmIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkgY29uc3QKIHsKKyNpZiBFTkFCTEUo
RklMRV9TWVNURU0pCisgICAgaWYgKG1fc2l6ZSA+PSAwICYmIG1fc25hcHNob3RNb2RpZmljYXRp
b25UaW1lKSB7CisgICAgICAgIHNuYXBzaG90U2l6ZSA9IG1fc2l6ZTsKKyAgICAgICAgc25hcHNo
b3RNb2RpZmljYXRpb25UaW1lID0gbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYKKwogICAgIC8vIE9idGFpbnMgYSBzbmFwc2hvdCBvZiB0
aGUgZmlsZSBieSBjYXB0dXJpbmcgaXRzIGN1cnJlbnQgc2l6ZSBhbmQgbW9kaWZpY2F0aW9uIHRp
bWUuIFRoaXMgaXMgdXNlZCB3aGVuIHdlIHNsaWNlIGEgZmlsZSBmb3IgdGhlIGZpcnN0IHRpbWUu
CiAgICAgLy8gSWYgd2UgZmFpbCB0byByZXRyaWV2ZSB0aGUgc2l6ZSBvciBtb2RpZmljYXRpb24g
dGltZSwgcHJvYmFibHkgZHVlIHRvIHRoYXQgdGhlIGZpbGUgaGFzIGJlZW4gZGVsZXRlZCwgMCBz
aXplIGlzIHJldHVybmVkLgogICAgIC8vIEZJWE1FOiBDb21iaW5lIGdldEZpbGVTaXplIGFuZCBn
ZXRGaWxlTW9kaWZpY2F0aW9uVGltZSBpbnRvIG9uZSBmaWxlIHN5c3RlbSBjYWxsLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0ZpbGUuaAppbmRleCA4Mzc1NjcxMWNmZjU0Y2ZiZWEzYWZlMzRiMWJkNjFhYmYyMjVmMzI4
Li4zNjU4ZmNjNGUzZGVjOWExNjA2MWJkMWNhM2Q3ZTk1MzE1YmIzMjNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0ZpbGUuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBGaWxlX2gKIAogI2luY2x1ZGUgIkJs
b2IuaCIKKyNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KQEAgLTUyLDYgKzUzLDE2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxG
aWxlPiBjcmVhdGVXaXRoUmVsYXRpdmVQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3Ry
aW5nJiByZWxhdGl2ZVBhdGgpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisg
ICAgLy8gRm9yIGZpbGVzeXN0ZW0gZmlsZXMuIEl0IHRha2VzIG1ldGFkYXRhIGFyZ3VtZW50LCB3
aGljaCBtYXkgc3VwcHJlc3MgZnV0dXJlIG1ldGFkYXRhIHF1ZXJ5IG9uIHRoaXMgRmlsZSBvYmpl
Y3QgaWYgaXQgaGFzIHZhbGlkIGluZm9ybWF0aW9uIChpLmUuIG5vbi16ZXJvIG1vZGlmaWNhdGlv
blRpbWUgYW5kL29yIG5vbi1uZWdhdGl2ZSBmaWxlIGxlbmd0aCkuIFRoZSBtZXRhZGF0YSBhcmd1
bWVudCBtdXN0IGJlIGdpdmVuIGNhcmVmdWxseSBvbmx5IHdoZW4gaXQgaXMgaW5mZWFzaWJsZSB0
byBxdWVyeSBmaWxlIG1ldGFkYXRhIG9uIHRoZSBmbHkgKGUuZy4gZmlsZSBpcyBvbiByZW1vdGUg
ZmlsZXN5c3RlbSkuCisgICAgLy8KKyAgICAvLyBPdGhlcndpc2UgY2FsbGluZyBzaXplKCksIGxh
c3RNb2RpZmllZFRpbWUoKSBvciB3ZWJraXRTbGljZSgpIHdpbGwgc3luY2hyb25vdXNseSBxdWVy
eSB0aGUgZmlsZSBtZXRhZGF0YS4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlPiBjcmVhdGVG
b3JGaWxlU3lzdGVtRmlsZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZpbGVNZXRhZGF0YSYg
bWV0YWRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUobmFtZSwg
bWV0YWRhdGEpKTsKKyAgICB9CisjZW5kaWYKKwogICAgIC8vIENyZWF0ZSBhIGZpbGUgd2l0aCBh
IG5hbWUgZXhwb3NlZCB0byB0aGUgYXV0aG9yICh2aWEgRmlsZS5uYW1lIGFuZCBhc3NvY2lhdGVk
IERPTSBwcm9wZXJ0aWVzKSB0aGF0IGRpZmZlcnMgZnJvbSB0aGUgb25lIHByb3ZpZGVkIGluIHRo
ZSBwYXRoLgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGU+IGNyZWF0ZVdpdGhOYW1lKGNvbnN0
IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBuYW1lKQogICAgIHsKQEAgLTgxLDggKzkyLDE3
IEBAIHByaXZhdGU6CiAgICAgRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEtVUkwmIHNy
Y1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlKTsKICAgICBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgU3RyaW5nJiBuYW1lKTsKIAorIyBpZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgRmls
ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZpbGVNZXRhZGF0YSYpOworI2VuZGlmCisKICAg
ICBTdHJpbmcgbV9wYXRoOwogICAgIFN0cmluZyBtX25hbWU7CisKKyNpZiBFTkFCTEUoRklMRV9T
WVNURU0pCisgICAgY29uc3QgZG91YmxlIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOworI2Vu
ZGlmCisKICNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKICAgICBTdHJpbmcgbV9yZWxhdGl2
ZVBhdGg7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5j
RmlsZVN5c3RlbS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmgK
aW5kZXggNmU1M2E5YWE1ZjNkNzkwODlhMWJlNmZkNmQ0NTE0ZDk0MzZiZTZiYS4uYzMzZDZhMGYy
YjMzZjNiNGY3MjY1ZTcxODYwODRkM2FiNjNiMGQ0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQXN5bmNGaWxlU3lzdGVtLmgKQEAgLTEyNyw2ICsxMjcsOCBAQCBwdWJsaWM6CiAgICAgLy8g
d2hpbGUgaW4gcmVtb3RlIGZpbGVzeXN0ZW0gY2FzZSB0aGUgYmFja2VuZCBtYXkgZG93bmxvYWQg
dGhlIGZpbGUgaW50byBhIHRlbXBvcmFyeSBzbmFwc2hvdCBmaWxlIGFuZCByZXR1cm4gdGhlIG1l
dGFkYXRhIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZS4KICAgICAvLyBBc3luY0ZpbGVTeXN0ZW1DYWxs
YmFja3M6OmRpZFJlYWRNZXRhZGF0YSgpIGlzIGNhbGxlZCB3aGVuIHRoZSBtZXRhZGF0YSBmb3Ig
dGhlIHNuYXBzaG90IGZpbGUgaXMgc3VjY2Vzc2Z1bGx5IHJldHVybmVkLgogICAgIC8vIEFzeW5j
RmlsZVN5c3RlbUNhbGxiYWNrczo6ZGlkRmFpbCgpIGlzIGNhbGxlZCBvdGhlcndpc2UuCisgICAg
Ly8KKyAgICAvLyBOb3RlOiB0aGUgcmV0dXJuZWQgbWV0YWRhdGEgaW5mbyBpcyBjYWNoZWQgaW4g
dGhlIEZpbGUgb2JqZWN0IGZvciBub24tcmVndWxhciBmaWxlc3lzdGVtIHR5cGVzIChuZWl0aGVy
IFRlbXBvcmFyeSBub3IgUGVyc2lzdGVudCkuIFRoZSBwb3J0IGNvdWxkIHJldHVybiB2YWxpZCBt
ZXRhZGF0YSBpZiBpdCB3YW50cyBGaWxlIG9iamVjdCB0byBjYWNoZSBtZXRhZGF0YSAoZS5nLiBp
ZiB0aGUgZmlsZSBib2R5IGlzIG9uIGEgcmVtb3RlIHNlcnZlciksIGJ1dCBvdGhlcndpc2Ugc2hv
dWxkIE5PVCByZXR1cm4gdmFsaWQgbWV0YWRhdGEuCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVNu
YXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFz
eW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pID0gMDsKIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDJhMjJh
MzhmNzhjYWZhNDdkNzdkOWE0NTVlMWU3Mzg5ODNkMWMyYjcuLjE4OTkzNmE2ZWE4ODFmYjU2ZDgy
MGNiZDgyZTE1YmViMDFlYjM4MDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wNS0xMSAg
S2ludWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWxsb3cgRmls
ZVN5c3RlbSBBUEkgaW1wbGVtZW50YXRpb24gdG8gcGFzcyBzbmFwc2hvdCBtZXRhZGF0YSBhdCBG
aWxlIGNyZWF0aW9uIHRpbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc4ODc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS1yZWFkLWFmdGVyLXdyaXRlLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL2ZpbGUtcmVhZC1hZnRlci13
cml0ZS5odG1sOiBBZGRlZC4KKwogMjAxMi0wNS0xNCAgTWlrZSBXZXN0ICA8bWlrZUBtaWtld2Vz
dC5vcmc+CiAKICAgICAgICAgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgY29uc29sZSBlcnJvcnMg
aW5jbHVkZSB2aW9sYXRlZCBkaXJlY3RpdmUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzeXN0ZW0vZmlsZS1tZXRhZGF0YS1hZnRlci13cml0ZS1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS1tZXRhZGF0YS1hZnRlci13cml0ZS1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjgxNGZmZDBmYTA1ZDQ0YzBmN2E3NTY1YTdmNjg5Y2UxZmMxZTYw
ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLW1l
dGFkYXRhLWFmdGVyLXdyaXRlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKK1dyaXRpbmcg
MTIzNDU2Nzg5MCB0byB0aGUgZmlsZS4uLgorQ3JlYXRlZCBhIHdyaXRlci4KK1dyaXRlIHN1Y2Nl
ZWRlZC4KK1BBU1M6ICIxMCIgPT0gIjEwIgorV3JpdGluZyBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2
d3h5eiB0byB0aGUgZmlsZS4uLgorQ3JlYXRlZCBhIHdyaXRlci4KK1dyaXRlIHN1Y2NlZWRlZC4K
K1BBU1M6ICIyNiIgPT0gIjI2IgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
eXN0ZW0vZmlsZS1tZXRhZGF0YS1hZnRlci13cml0ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlc3lzdGVtL2ZpbGUtbWV0YWRhdGEtYWZ0ZXItd3JpdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOWNh
YmVmMGYxZTljOGM0Yzc0NmRlNTU2NzlhNmZkYTE5ZmJmZWM3Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtbWV0YWRhdGEtYWZ0ZXItd3JpdGUuaHRt
bApAQCAtMCwwICsxLDg5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8ZGl2
IGlkPSdjb25zb2xlJz48L2Rpdj4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBmaWxlRW50cnlGb3JD
bGVhbnVwOwordmFyIHRlc3RUZXh0MSA9ICcxMjM0NTY3ODkwJzsKK3ZhciB0ZXN0VGV4dDIgPSAn
YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonOworCit3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbSgK
KyAgICB3aW5kb3cuVEVNUE9SQVJZLCAxMDAsIGZ1bmN0aW9uKGZzKSB7CisgICAgICAgIGZzLnJv
b3QuZ2V0RmlsZSgndGVzdCcsIHtjcmVhdGU6dHJ1ZX0sIGZ1bmN0aW9uKGVudHJ5KSB7CisgICAg
ICAgICAgICB3cml0ZVRleHRUb0ZpbGUoZW50cnksIHRlc3RUZXh0MSwgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICAgICAgbG9nKCdXcml0ZSBzdWNjZWVkZWQuJyk7CisgICAgICAgICAgICAgICAg
ZW50cnkuZmlsZShvbkNyZWF0ZUZpbGUuYmluZCh0aGlzLCBlbnRyeSksIG9uRXJyb3IpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0sIG9uRXJyb3IpOworICAgIH0sIG9uRXJyb3IpOworCitm
dW5jdGlvbiBvbkNyZWF0ZUZpbGUoZW50cnksIGZpbGUpIHsKKyAgICB0ZXN0KHRlc3RUZXh0MS5s
ZW5ndGgsIGZpbGUuc2l6ZSk7CisgICAgLy8gV3JpdGUgaW50byB0aGlzIGZpbGUgYWdhaW4uCisg
ICAgd3JpdGVUZXh0VG9GaWxlKGVudHJ5LCB0ZXN0VGV4dDIsIGZ1bmN0aW9uKCkgeworICAgICAg
ICBsb2coJ1dyaXRlIHN1Y2NlZWRlZC4nKTsKKyAgICAgICAgZW50cnkuZmlsZShmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIC8vIFRoZSBmaWxlIHNpemUgc2hvdWxkIGJlIHVwZGF0ZWQuCisgICAg
ICAgICAgICB0ZXN0KHRlc3RUZXh0Mi5sZW5ndGgsIGZpbGUuc2l6ZSk7CisgICAgICAgICAgICBl
bmRUZXN0KCk7CisgICAgICAgIH0sIG9uRXJyb3IpOworICAgIH0pOworfQorCitmdW5jdGlvbiB3
cml0ZVRleHRUb0ZpbGUoZW50cnksIGNvbnRlbnRzLCBzdWNjZXNzQ2FsbGJhY2spCit7CisgICAg
bG9nKCdXcml0aW5nICcgKyBjb250ZW50cyArICcgdG8gdGhlIGZpbGUuLi4nKTsKKyAgICBlbnRy
eS5jcmVhdGVXcml0ZXIoZnVuY3Rpb24od3JpdGVyKSB7CisgICAgICAgIGxvZygnQ3JlYXRlZCBh
IHdyaXRlci4nKTsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIo
KTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoY29udGVudHMpOworICAgICAgICB3cml0ZXIud3Jp
dGUoYnVpbGRlci5nZXRCbG9iKCdwbGFpbi90ZXh0JykpOworICAgICAgICB3cml0ZXIub253cml0
ZWVuZCA9IHN1Y2Nlc3NDYWxsYmFjazsKKyAgICAgICAgd3JpdGVyLm9uZXJyb3IgPSBvbkVycm9y
OworICAgIH0pOworfQorCitmdW5jdGlvbiBsb2codGV4dCkKK3sKKyAgICB2YXIgY29uc29sZSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyk7CisgICAgY29uc29sZS5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7CisgICAgY29uc29sZS5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKK30KKworZnVuY3Rpb24gdGVzdChl
eHBlY3QsIGFjdHVhbCkKK3sKKyAgICBsb2coKGV4cGVjdCA9PSBhY3R1YWwgPyAnUEFTUycgOiAn
RkFJTCcpICsgJzogIicgKyBleHBlY3QgKyAnIiA9PSAiJyArIGFjdHVhbCArICciJyk7Cit9CisK
K2Z1bmN0aW9uIG9uRXJyb3IoZSkKK3sKKyAgICBsb2coJ0VSUk9SOiAnICsgZS5jb2RlKTsKKyAg
ICBjb25zb2xlLmxvZyhlKTsKKyAgICBjbGVhbnVwKCk7Cit9CisKK2Z1bmN0aW9uIGNsZWFudXAo
KQoreworICAgIGlmIChmaWxlRW50cnlGb3JDbGVhbnVwKSB7CisgICAgICAgIGZpbGVFbnRyeUZv
ckNsZWFudXAucmVtb3ZlKGVuZFRlc3QsIGVuZFRlc3QpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGVuZFRlc3QoKTsKK30KKworZnVuY3Rpb24gZW5kVGVzdCgpCit7CisgICAgaWYgKGxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142155</attachid>
            <date>2012-05-15 22:50:13 -0700</date>
            <delta_ts>2012-05-16 22:47:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78879-20120516145012.patch</filename>
            <type>text/plain</type>
            <size>19762</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE3MDA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE0M2YzMWIwZDI5OWQw
ODAyZTM2OGIxYjM3YjdmOTliNjY1MjZhZi4uOTVhZWFjMzkxZTI5ZTgzYjlmMTYzMzVkOWMzMjY4
N2ZmYmFkYzYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTA1LTExICBLaW51
a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAgICAgICBBbGxvdyBGaWxlU3lz
dGVtIEFQSSBpbXBsZW1lbnRhdGlvbiB0byBwYXNzIHNuYXBzaG90IG1ldGFkYXRhIGF0IEZpbGUg
Y3JlYXRpb24gdGltZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Nzg4NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBXZSBxdWVyeSBGaWxlIG1ldGFkYXRhIChlLmcuIHNpemUgYW5kIG1vZGlmaWVkVGltZSkg
d2hlbiBGaWxlLnNpemUsCisgICAgICAgIGxhc3RNb2RpZmllZFRpbWUgb3Igd2Via2l0U2xpY2Uo
KSBpcyBhY2Nlc3NlZCAvIGNhbGxlZCwgYnV0IGluIHNvbWUKKyAgICAgICAgcGxhdGZvcm0tc3Bl
Y2lmaWMgZmlsZXN5c3RlbXMgaXQgbWF5IG5vdCBiZSBmZWFzaWJsZSBzaW5jZSBzeW5jaHJvbm91
cworICAgICAgICBtZXRhZGF0YSBxdWVyeSBjb3VsZCB0YWtlIHZlcnkgbG9uZyB0aW1lLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBuZXcgRmlsZSBjb25zdHJ1Y3RvciB3aGljaCB0YWtlcyBt
ZXRhZGF0YSBhcmd1bWVudAorICAgICAgICB0byBhbGxvdyBlYWNoIEZpbGVTeXN0ZW0gQVBJIGlt
cGxlbWVudGF0aW9uIHRvIHBhc3Mgc25hcHNob3QgbWV0YWRhdGEKKyAgICAgICAgc28gdGhhdCBG
aWxlIG9iamVjdCBjb3VsZCBjYWNoZSB0aGUgZ2l2ZW4gbWV0YWRhdGEgbm90IHRvIG1ha2UKKyAg
ICAgICAgc3luY2hyb25vdXMgcXVlcnkuCisKKyAgICAgICAgV2Ugb25seSBjYWxsIHRoaXMgY29u
c3RydWN0b3IgaWYgdGhlIGZpbGVzeXN0ZW0gdHlwZSBpcyBuZWl0aGVyCisgICAgICAgIFRlbXBv
cmFyeSBub3IgUGVyc2lzdGVudCwgdGhlcmVmb3JlIHRoaXMgcGF0Y2ggc2hvdWxkIG5vdCBhZmZl
Y3QKKyAgICAgICAgZXhpc3RpbmcgY29kZSBiZWhhdmlvci4KKworICAgICAgICBUZXN0OiBmYXN0
L2ZpbGVzeXN0ZW0vZmlsZS1yZWFkLWFmdGVyLXdyaXRlLmh0bWwKKworICAgICAgICAqIE1vZHVs
ZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZp
bGVTeXN0ZW06OmNyZWF0ZUZpbGUpOgorICAgICAgICAqIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01G
aWxlU3lzdGVtU3luYy5jcHA6CisgICAgICAgICogZmlsZWFwaS9CbG9iLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkJsb2I6OndlYmtpdFNsaWNlKTogVXBkYXRlZCBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgKiBmaWxlYXBpL0Jsb2IuaDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZTo6RmlsZSk6IEFkZGVkIG5ldyBjb25zdHJ1Y3Rvci4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGU6Omxhc3RNb2RpZmllZERhdGUpOiBVcGRhdGVkIGltcGxlbWVudGF0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6c2l6ZSk6IFVwZGF0ZWQgaW1wbGVtZW50YXRp
b24uCisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpjYXB0dXJlU25hcHNob3QpOiBVcGRhdGVkIGlt
cGxlbWVudGF0aW9uLgorICAgICAgICAqIGZpbGVhcGkvRmlsZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZTo6Y3JlYXRlRm9yRmlsZVN5c3RlbUZpbGUpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKEFzeW5jRmlsZVN5c3RlbSk6IFVwZGF0
ZWQgY29tbWVudC4KKwogMjAxMi0wNS0xNCAgTWlrZSBXZXN0ICA8bWlrZUBtaWtld2VzdC5vcmc+
CiAKICAgICAgICAgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgY29uc29sZSBlcnJvcnMgaW5jbHVk
ZSB2aW9sYXRlZCBkaXJlY3RpdmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zp
bGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5jcHAKaW5kZXggMDkwYmNjMDUyMGQwNzIwNjFhN2IxNGUz
YmQ1NDdjMDU4YmMwYTg3MC4uN2JiMGE2NzU3NjdkNWVkZWJmY2NkYzdlZTNmZGMwODIyOWVlNDkw
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVT
eXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
U3lzdGVtLmNwcApAQCAtMTIzLDExICsxMjMsMTEgQEAgdm9pZCBET01GaWxlU3lzdGVtOjpjcmVh
dGVXcml0ZXIoY29uc3QgRmlsZUVudHJ5KiBmaWxlRW50cnksIFBhc3NSZWZQdHI8RmlsZVdyaXQK
IAogbmFtZXNwYWNlIHsKIAotY2xhc3MgR2V0UGF0aENhbGxiYWNrIDogcHVibGljIEZpbGVTeXN0
ZW1DYWxsYmFja3NCYXNlIHsKK2NsYXNzIEdldE1ldGFkYXRhQ2FsbGJhY2sgOiBwdWJsaWMgRmls
ZVN5c3RlbUNhbGxiYWNrc0Jhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEdl
dFBhdGhDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZXN5c3Rl
bSwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4gc3VjY2Vzc0Nh
bGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCisgICAgc3Rh
dGljIFBhc3NPd25QdHI8R2V0TWV0YWRhdGFDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RE9N
RmlsZVN5c3RlbT4gZmlsZXN5c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEZp
bGVDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVy
cm9yQ2FsbGJhY2spCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdldFBhdGhD
YWxsYmFjayhmaWxlc3lzdGVtLCBuYW1lLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2sp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXRNZXRhZGF0YUNhbGxiYWNrKGZpbGVz
eXN0ZW0sIG5hbWUsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOwogICAgIH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkTWV0YWRhdGEoY29uc3QgRmlsZU1ldGFkYXRhJiBtZXRh
ZGF0YSkKQEAgLTEzNiwxMiArMTM2LDE4IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFtX3N1Y2Nl
c3NDYWxsYmFjaykKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBtX3N1Y2Nlc3NDYWxs
YmFjay0+aGFuZGxlRXZlbnQoRmlsZTo6Y3JlYXRlV2l0aE5hbWUobWV0YWRhdGEucGxhdGZvcm1Q
YXRoLCBtX25hbWUpLmdldCgpKTsKKyAgICAgICAgLy8gRm9yIHJlZ3VsYXIgZmlsZXN5c3RlbSB0
eXBlcyAodGVtcG9yYXJ5IG9yIHBlcnNpc3RlbnQpLCB3ZSBzaG91bGQgbm90IGNhY2hlIGZpbGUg
bWV0YWRhdGEgYXMgaXQgY291bGQgY2hhbmdlIEZpbGUgc2VtYW50aWNzLgorICAgICAgICAvLyBG
b3Igb3RoZXIgZmlsZXN5c3RlbSB0eXBlcyAod2hpY2ggY291bGQgYmUgcGxhdGZvcm0tc3BlY2lm
aWMgb25lcyksIHRoZXJlJ3MgYSBjaGFuY2UgdGhhdCB0aGUgZmlsZXMgYXJlIG9uIHJlbW90ZSBm
aWxlc3lzdGVtLiBJZiB0aGUgcG9ydCBoYXMgcmV0dXJuZWQgbWV0YWRhdGEganVzdCBwYXNzIGl0
IHRvIEZpbGUgY29uc3RydWN0b3IgKHNvIHdlIG1heSBjYWNoZSB0aGUgbWV0YWRhdGEpLgorICAg
ICAgICBpZiAobV9maWxlc3lzdGVtLT50eXBlKCkgPT0gRmlsZVN5c3RlbVR5cGVUZW1wb3Jhcnkg
fHwgbV9maWxlc3lzdGVtLT50eXBlKCkgPT0gRmlsZVN5c3RlbVR5cGVQZXJzaXN0ZW50KQorICAg
ICAgICAgICAgbV9zdWNjZXNzQ2FsbGJhY2stPmhhbmRsZUV2ZW50KEZpbGU6OmNyZWF0ZVdpdGhO
YW1lKG1ldGFkYXRhLnBsYXRmb3JtUGF0aCwgbV9uYW1lKS5nZXQoKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1fc3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVFdmVudChGaWxlOjpjcmVhdGVG
b3JGaWxlU3lzdGVtRmlsZShtX25hbWUsIG1ldGFkYXRhKS5nZXQoKSk7CisKICAgICAgICAgbV9z
dWNjZXNzQ2FsbGJhY2sucmVsZWFzZSgpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBHZXRQYXRo
Q2FsbGJhY2soUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlc3lzdGVtLCBjb25zdCBTdHJp
bmcmIG5hbWUsICBQYXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNz
UmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCisgICAgR2V0TWV0YWRhdGFDYWxs
YmFjayhQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVzeXN0ZW0sIGNvbnN0IFN0cmluZyYg
bmFtZSwgIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQ
dHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKICAgICAgICAgOiBGaWxlU3lzdGVtQ2Fs
bGJhY2tzQmFzZShlcnJvckNhbGxiYWNrKQogICAgICAgICAsIG1fZmlsZXN5c3RlbShmaWxlc3lz
dGVtKQogICAgICAgICAsIG1fbmFtZShuYW1lKQpAQCAtMTU4LDcgKzE2NCw3IEBAIHByaXZhdGU6
CiAKIHZvaWQgRE9NRmlsZVN5c3RlbTo6Y3JlYXRlRmlsZShjb25zdCBGaWxlRW50cnkqIGZpbGVF
bnRyeSwgUGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0
cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQogewotICAgIG1fYXN5bmNGaWxlU3lzdGVt
LT5jcmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEoY3JlYXRlRmlsZVN5c3RlbVVSTChm
aWxlRW50cnkpLCBHZXRQYXRoQ2FsbGJhY2s6OmNyZWF0ZSh0aGlzLCBmaWxlRW50cnktPm5hbWUo
KSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSk7CisgICAgbV9hc3luY0ZpbGVTeXN0
ZW0tPmNyZWF0ZVNuYXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YShjcmVhdGVGaWxlU3lzdGVtVVJM
KGZpbGVFbnRyeSksIEdldE1ldGFkYXRhQ2FsbGJhY2s6OmNyZWF0ZSh0aGlzLCBmaWxlRW50cnkt
Pm5hbWUoKSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5
c3RlbS9ET01GaWxlU3lzdGVtU3luYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVz
eXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMuY3BwCmluZGV4IDhhNTdkMDA1ZTYzMmM3YWNhNjAzN2U4
NDMwMGQwNmU3NjdlNTFlMzYuLmJjMzZjYWVkZGM3ZGZhOTY3NzExMDkyYjAzZGU1ODQ2MDcwNjYy
OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
U3lzdGVtU3luYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RP
TUZpbGVTeXN0ZW1TeW5jLmNwcApAQCAtOTgsOSArOTgsOSBAQCBwdWJsaWM6CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBXVEY6OlJlZkNvdW50ZWQ8Q3JlYXRlRmlsZVJlc3VsdD47CiAgICAgfTsKIAot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENyZWF0ZUZpbGVIZWxwZXI+IGNyZWF0ZShQYXNzUmVmUHRy
PENyZWF0ZUZpbGVSZXN1bHQ+IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIHN0YXRp
YyBQYXNzT3duUHRyPENyZWF0ZUZpbGVIZWxwZXI+IGNyZWF0ZShQYXNzUmVmUHRyPENyZWF0ZUZp
bGVSZXN1bHQ+IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBGaWxlU3lzdGVtVHlwZSB0eXBl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVGaWxlSGVscGVyKHJl
c3VsdCwgbmFtZSkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZUZpbGVIZWxw
ZXIocmVzdWx0LCBuYW1lLCB0eXBlKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpZEZh
aWwoaW50IGNvZGUpCkBAIC0xMTUsMTcgKzExNSwyNCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRp
ZFJlYWRNZXRhZGF0YShjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQogICAgIHsKLSAgICAg
ICAgbV9yZXN1bHQtPm1fZmlsZSA9IEZpbGU6OmNyZWF0ZVdpdGhOYW1lKG1ldGFkYXRhLnBsYXRm
b3JtUGF0aCwgbV9uYW1lKTsKKyAgICAgICAgLy8gRm9yIHJlZ3VsYXIgZmlsZXN5c3RlbSB0eXBl
cyAodGVtcG9yYXJ5IG9yIHBlcnNpc3RlbnQpLCB3ZSBzaG91bGQgbm90IGNhY2hlIGZpbGUgbWV0
YWRhdGEgYXMgaXQgY291bGQgY2hhbmdlIEZpbGUgc2VtYW50aWNzLgorICAgICAgICAvLyBGb3Ig
b3RoZXIgZmlsZXN5c3RlbSB0eXBlcyAod2hpY2ggY291bGQgYmUgcGxhdGZvcm0tc3BlY2lmaWMg
b25lcyksIHRoZXJlJ3MgYSBjaGFuY2UgdGhhdCB0aGUgZmlsZXMgYXJlIG9uIHJlbW90ZSBmaWxl
c3lzdGVtLiBJZiB0aGUgcG9ydCBoYXMgcmV0dXJuZWQgbWV0YWRhdGEganVzdCBwYXNzIGl0IHRv
IEZpbGUgY29uc3RydWN0b3IgKHNvIHdlIG1heSBjYWNoZSB0aGUgbWV0YWRhdGEpLgorICAgICAg
ICBpZiAobV90eXBlID09IEZpbGVTeXN0ZW1UeXBlVGVtcG9yYXJ5IHx8IG1fdHlwZSA9PSBGaWxl
U3lzdGVtVHlwZVBlcnNpc3RlbnQpCisgICAgICAgICAgICBtX3Jlc3VsdC0+bV9maWxlID0gRmls
ZTo6Y3JlYXRlV2l0aE5hbWUobWV0YWRhdGEucGxhdGZvcm1QYXRoLCBtX25hbWUpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX3Jlc3VsdC0+bV9maWxlID0gRmlsZTo6Y3JlYXRlRm9yRmls
ZVN5c3RlbUZpbGUobV9uYW1lLCBtZXRhZGF0YSk7CiAgICAgfQogcHJpdmF0ZToKLSAgICBDcmVh
dGVGaWxlSGVscGVyKFBhc3NSZWZQdHI8Q3JlYXRlRmlsZVJlc3VsdD4gcmVzdWx0LCBjb25zdCBT
dHJpbmcmIG5hbWUpCisgICAgQ3JlYXRlRmlsZUhlbHBlcihQYXNzUmVmUHRyPENyZWF0ZUZpbGVS
ZXN1bHQ+IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBGaWxlU3lzdGVtVHlwZSB0eXBlKQog
ICAgICAgICA6IG1fcmVzdWx0KHJlc3VsdCkKICAgICAgICAgLCBtX25hbWUobmFtZSkKKyAgICAg
ICAgLCBtX3R5cGUodHlwZSkKICAgICB7CiAgICAgfQogCiAgICAgUmVmUHRyPENyZWF0ZUZpbGVS
ZXN1bHQ+IG1fcmVzdWx0OwogICAgIFN0cmluZyBtX25hbWU7CisgICAgRmlsZVN5c3RlbVR5cGUg
bV90eXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UKQEAgLTEzNCw3ICsxNDEsNyBAQCBQYXNzUmVm
UHRyPEZpbGU+IERPTUZpbGVTeXN0ZW1TeW5jOjpjcmVhdGVGaWxlKGNvbnN0IEZpbGVFbnRyeVN5
bmMqIGZpbGVFbnRyeSwgRQogewogICAgIGVjID0gMDsKICAgICBSZWZQdHI8Q3JlYXRlRmlsZUhl
bHBlcjo6Q3JlYXRlRmlsZVJlc3VsdD4gcmVzdWx0KENyZWF0ZUZpbGVIZWxwZXI6OkNyZWF0ZUZp
bGVSZXN1bHQ6OmNyZWF0ZSgpKTsKLSAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNo
b3RGaWxlQW5kUmVhZE1ldGFkYXRhKGNyZWF0ZUZpbGVTeXN0ZW1VUkwoZmlsZUVudHJ5KSwgQ3Jl
YXRlRmlsZUhlbHBlcjo6Y3JlYXRlKHJlc3VsdCwgZmlsZUVudHJ5LT5uYW1lKCkpKTsKKyAgICBt
X2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKGNyZWF0
ZUZpbGVTeXN0ZW1VUkwoZmlsZUVudHJ5KSwgQ3JlYXRlRmlsZUhlbHBlcjo6Y3JlYXRlKHJlc3Vs
dCwgZmlsZUVudHJ5LT5uYW1lKCksIHR5cGUoKSkpOwogICAgIGlmICghbV9hc3luY0ZpbGVTeXN0
ZW0tPndhaXRGb3JPcGVyYXRpb25Ub0NvbXBsZXRlKCkpIHsKICAgICAgICAgZWMgPSBGaWxlRXhj
ZXB0aW9uOjpBQk9SVF9FUlI7CiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9GaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5j
cHAKaW5kZXggOTA1MjkxYjJkZDc1OTNlNWM2MDgwOTg2MTg0ZjhjNDNlMTZlOWY2MS4uZWFiZTRm
ODY4ZjJhMjA3MGM4OTEzYmY1MTg4NDQ1NTgxMGJlMWYxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9GaWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUu
Y3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmls
ZS5oIgogCisjaW5jbHVkZSAiRmlsZU1ldGFkYXRhLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5o
IgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KQEAgLTMzLDYgKzM0LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGlj
IFN0cmluZyBnZXRDb250ZW50VHlwZUZyb21GaWxlTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7
CisgICAgU3RyaW5nIHR5cGU7CisgICAgaW50IGluZGV4ID0gbmFtZS5yZXZlcnNlRmluZCgnLicp
OworICAgIGlmIChpbmRleCAhPSAtMSkKKyAgICAgICAgdHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6
OmdldFdlbGxLbm93bk1JTUVUeXBlRm9yRXh0ZW5zaW9uKG5hbWUuc3Vic3RyaW5nKGluZGV4ICsg
MSkpOworICAgIHJldHVybiB0eXBlOworfQorCiBzdGF0aWMgUGFzc093blB0cjxCbG9iRGF0YT4g
Y3JlYXRlQmxvYkRhdGFGb3JGaWxlV2l0aFR5cGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnRUeXBlKQogewogICAgIE93blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBC
bG9iRGF0YTo6Y3JlYXRlKCk7CkBAIC00MywyMiArNTMsMjQgQEAgc3RhdGljIFBhc3NPd25QdHI8
QmxvYkRhdGE+IGNyZWF0ZUJsb2JEYXRhRm9yRmlsZVdpdGhUeXBlKGNvbnN0IFN0cmluZyYgcGF0
aCwgY28KIAogc3RhdGljIFBhc3NPd25QdHI8QmxvYkRhdGE+IGNyZWF0ZUJsb2JEYXRhRm9yRmls
ZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgU3RyaW5nIHR5cGU7Ci0gICAgaW50IGluZGV4
ID0gcGF0aC5yZXZlcnNlRmluZCgnLicpOwotICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgICAg
dHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKHBhdGguc3Vi
c3RyaW5nKGluZGV4ICsgMSkpOwotICAgIHJldHVybiBjcmVhdGVCbG9iRGF0YUZvckZpbGVXaXRo
VHlwZShwYXRoLCB0eXBlKTsKKyAgICByZXR1cm4gY3JlYXRlQmxvYkRhdGFGb3JGaWxlV2l0aFR5
cGUocGF0aCwgZ2V0Q29udGVudFR5cGVGcm9tRmlsZU5hbWUocGF0aCkpOwogfQogCiBzdGF0aWMg
UGFzc093blB0cjxCbG9iRGF0YT4gY3JlYXRlQmxvYkRhdGFGb3JGaWxlV2l0aE5hbWUoY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbGVTeXN0ZW1OYW1lKQogewotICAgIFN0cmlu
ZyB0eXBlOwotICAgIGludCBpbmRleCA9IGZpbGVTeXN0ZW1OYW1lLnJldmVyc2VGaW5kKCcuJyk7
Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgICB0eXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6
Z2V0V2VsbEtub3duTUlNRVR5cGVGb3JFeHRlbnNpb24oZmlsZVN5c3RlbU5hbWUuc3Vic3RyaW5n
KGluZGV4ICsgMSkpOwotICAgIHJldHVybiBjcmVhdGVCbG9iRGF0YUZvckZpbGVXaXRoVHlwZShw
YXRoLCB0eXBlKTsKKyAgICByZXR1cm4gY3JlYXRlQmxvYkRhdGFGb3JGaWxlV2l0aFR5cGUocGF0
aCwgZ2V0Q29udGVudFR5cGVGcm9tRmlsZU5hbWUoZmlsZVN5c3RlbU5hbWUpKTsKIH0KIAorI2lm
IEVOQUJMRShGSUxFX1NZU1RFTSkKK3N0YXRpYyBQYXNzT3duUHRyPEJsb2JEYXRhPiBjcmVhdGVC
bG9iRGF0YUZvckZpbGVXaXRoTWV0YWRhdGEoY29uc3QgU3RyaW5nJiBmaWxlU3lzdGVtTmFtZSwg
Y29uc3QgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSkKK3sKKyAgICBPd25QdHI8QmxvYkRhdGE+IGJs
b2JEYXRhID0gQmxvYkRhdGE6OmNyZWF0ZSgpOworICAgIGJsb2JEYXRhLT5zZXRDb250ZW50VHlw
ZShnZXRDb250ZW50VHlwZUZyb21GaWxlTmFtZShmaWxlU3lzdGVtTmFtZSkpOworICAgIGJsb2JE
YXRhLT5hcHBlbmRGaWxlKG1ldGFkYXRhLnBsYXRmb3JtUGF0aCwgMCwgbWV0YWRhdGEubGVuZ3Ro
LCBtZXRhZGF0YS5tb2RpZmljYXRpb25UaW1lKTsKKyAgICByZXR1cm4gYmxvYkRhdGEucmVsZWFz
ZSgpOworfQorI2VuZGlmCisKICNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKIFBhc3NSZWZQ
dHI8RmlsZT4gRmlsZTo6Y3JlYXRlV2l0aFJlbGF0aXZlUGF0aChjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoKQogewpAQCAtNzIsMTIgKzg0LDIwIEBAIEZpbGU6
OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIDogQmxvYihjcmVhdGVCbG9iRGF0YUZvckZp
bGUocGF0aCksIC0xKQogICAgICwgbV9wYXRoKHBhdGgpCiAgICAgLCBtX25hbWUocGF0aEdldEZp
bGVOYW1lKHBhdGgpKQorI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKKyAgICAsIG1fc25hcHNob3RT
aXplKC0xKQorICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoMCkKKyNlbmRpZgogewog
fQogCiBGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHR5cGUpCiAgICAgOiBCbG9iKHVybCwgdHlwZSwgLTEpCiAgICAgLCBtX3BhdGgo
cGF0aCkKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgLCBtX3NuYXBzaG90U2l6ZSgtMSkK
KyAgICAsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKDApCisjZW5kaWYKIHsKICAgICBtX25h
bWUgPSBwYXRoR2V0RmlsZU5hbWUocGF0aCk7CiAgICAgLy8gRklYTUU6IEZpbGUgb2JqZWN0IHNl
cmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIGRvZXMgbm90IGluY2x1ZGUKQEAgLTg5LDExICsx
MDksMzEgQEAgRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbmFt
ZSkKICAgICA6IEJsb2IoY3JlYXRlQmxvYkRhdGFGb3JGaWxlV2l0aE5hbWUocGF0aCwgbmFtZSks
IC0xKQogICAgICwgbV9wYXRoKHBhdGgpCiAgICAgLCBtX25hbWUobmFtZSkKKyNpZiBFTkFCTEUo
RklMRV9TWVNURU0pCisgICAgLCBtX3NuYXBzaG90U2l6ZSgtMSkKKyAgICAsIG1fc25hcHNob3RN
b2RpZmljYXRpb25UaW1lKDApCisjZW5kaWYKK3sKK30KKworI2lmIEVOQUJMRShGSUxFX1NZU1RF
TSkKK0ZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGaWxlTWV0YWRhdGEmIG1l
dGFkYXRhKQorICAgIDogQmxvYihjcmVhdGVCbG9iRGF0YUZvckZpbGVXaXRoTWV0YWRhdGEobmFt
ZSwgbWV0YWRhdGEpLCBtZXRhZGF0YS5sZW5ndGgpCisgICAgLCBtX3BhdGgobWV0YWRhdGEucGxh
dGZvcm1QYXRoKQorICAgICwgbV9uYW1lKG5hbWUpCisgICAgLCBtX3NuYXBzaG90U2l6ZShtZXRh
ZGF0YS5sZW5ndGgpCisgICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShtZXRhZGF0YS5t
b2RpZmljYXRpb25UaW1lKQogewogfQorI2VuZGlmCiAKIGRvdWJsZSBGaWxlOjpsYXN0TW9kaWZp
ZWREYXRlKCkgY29uc3QKIHsKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgaWYgKG1fc25h
cHNob3RNb2RpZmljYXRpb25UaW1lKQorICAgICAgICByZXR1cm4gbV9zbmFwc2hvdE1vZGlmaWNh
dGlvblRpbWUgKiAxMDAwLjA7CisjZW5kaWYKKwogICAgIHRpbWVfdCBtb2RpZmljYXRpb25UaW1l
OwogICAgIGlmICghZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUobV9wYXRoLCBtb2RpZmljYXRpb25U
aW1lKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMDQsNiArMTQ0LDExIEBAIGRvdWJsZSBGaWxl
OjpsYXN0TW9kaWZpZWREYXRlKCkgY29uc3QKIAogdW5zaWduZWQgbG9uZyBsb25nIEZpbGU6OnNp
emUoKSBjb25zdAogeworI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKKyAgICBpZiAobV9zbmFwc2hv
dFNpemUgPj0gMCkKKyAgICAgICAgcmV0dXJuIG1fc25hcHNob3RTaXplOworI2VuZGlmCisKICAg
ICAvLyBGSVhNRTogSmF2YVNjcmlwdCBjYW5ub3QgcmVwcmVzZW50IHNpemVzIGFzIGxhcmdlIGFz
IHVuc2lnbmVkIGxvbmcgbG9uZywgd2UgbmVlZCB0bwogICAgIC8vIGNvbWUgdXAgd2l0aCBhbiBl
eGNlcHRpb24gdG8gdGhyb3cgaWYgZmlsZSBzaXplIGlzIG5vdCByZXByZXNlbnRhYmxlLgogICAg
IGxvbmcgbG9uZyBzaXplOwpAQCAtMTE0LDYgKzE1OSwxNCBAQCB1bnNpZ25lZCBsb25nIGxvbmcg
RmlsZTo6c2l6ZSgpIGNvbnN0CiAKIHZvaWQgRmlsZTo6Y2FwdHVyZVNuYXBzaG90KGxvbmcgbG9u
ZyYgc25hcHNob3RTaXplLCBkb3VibGUmIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkgY29uc3QK
IHsKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgaWYgKG1fc25hcHNob3RTaXplID49IDAg
JiYgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpIHsKKyAgICAgICAgc25hcHNob3RTaXplID0g
bV9zbmFwc2hvdFNpemU7CisgICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IG1fc25h
cHNob3RNb2RpZmljYXRpb25UaW1lOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisK
ICAgICAvLyBPYnRhaW5zIGEgc25hcHNob3Qgb2YgdGhlIGZpbGUgYnkgY2FwdHVyaW5nIGl0cyBj
dXJyZW50IHNpemUgYW5kIG1vZGlmaWNhdGlvbiB0aW1lLiBUaGlzIGlzIHVzZWQgd2hlbiB3ZSBz
bGljZSBhIGZpbGUgZm9yIHRoZSBmaXJzdCB0aW1lLgogICAgIC8vIElmIHdlIGZhaWwgdG8gcmV0
cmlldmUgdGhlIHNpemUgb3IgbW9kaWZpY2F0aW9uIHRpbWUsIHByb2JhYmx5IGR1ZSB0byB0aGF0
IHRoZSBmaWxlIGhhcyBiZWVuIGRlbGV0ZWQsIDAgc2l6ZSBpcyByZXR1cm5lZC4KICAgICAvLyBG
SVhNRTogQ29tYmluZSBnZXRGaWxlU2l6ZSBhbmQgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUgaW50
byBvbmUgZmlsZSBzeXN0ZW0gY2FsbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvRmlsZS5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmgKaW5kZXggODM3NTY3MTFj
ZmY1NGNmYmVhM2FmZTM0YjFiZDYxYWJmMjI1ZjMyOC4uZTgxYzU3N2NmZmExMmUzYWY3NjUxNTA5
MWU5Mzk5NDZhMWQ0YTc0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmgKQEAgLTMzLDYgKzMzLDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGaWxlTWV0YWRhdGE7CiBjbGFzcyBLVVJM
OwogCiBjbGFzcyBGaWxlIDogcHVibGljIEJsb2IgewpAQCAtNTIsNiArNTMsMTYgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGU+IGNyZWF0ZVdpdGhSZWxhdGl2ZVBhdGgoY29u
c3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCk7CiAjZW5kaWYKIAor
I2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKKyAgICAvLyBJZiBmaWxlc3lzdGVtIGZpbGVzIGxpdmUg
aW4gdGhlIHJlbW90ZSBmaWxlc3lzdGVtLCB0aGUgcG9ydCBtaWdodCBwYXNzIHRoZSB2YWxpZCBt
ZXRkYXRhIChub24temVybyBtb2RpZmljYXRpb25UaW1lIGFuZC9vciBub24tbmVnYXRpdmUgZmls
ZSBzaXplKSBhbmQgY2FjaGUgaW4gdGhlIEZpbGUgb2JqZWN0LgorICAgIC8vCisgICAgLy8gT3Ro
ZXJ3aXNlIGNhbGxpbmcgc2l6ZSgpLCBsYXN0TW9kaWZpZWRUaW1lKCkgb3Igd2Via2l0U2xpY2Uo
KSB3aWxsIHN5bmNocm9ub3VzbHkgcXVlcnkgdGhlIGZpbGUgbWV0YWRhdGEuCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RmlsZT4gY3JlYXRlRm9yRmlsZVN5c3RlbUZpbGUoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBGaWxlKG5hbWUsIG1ldGFkYXRhKSk7CisgICAgfQorI2VuZGlmCisKICAg
ICAvLyBDcmVhdGUgYSBmaWxlIHdpdGggYSBuYW1lIGV4cG9zZWQgdG8gdGhlIGF1dGhvciAodmlh
IEZpbGUubmFtZSBhbmQgYXNzb2NpYXRlZCBET00gcHJvcGVydGllcykgdGhhdCBkaWZmZXJzIGZy
b20gdGhlIG9uZSBwcm92aWRlZCBpbiB0aGUgcGF0aC4KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxG
aWxlPiBjcmVhdGVXaXRoTmFtZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbmFt
ZSkKICAgICB7CkBAIC04MSw4ICs5MiwxOCBAQCBwcml2YXRlOgogICAgIEZpbGUoY29uc3QgU3Ry
aW5nJiBwYXRoLCBjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlwZSk7CiAgICAg
RmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKKyMgaWYgRU5B
QkxFKEZJTEVfU1lTVEVNKQorICAgIEZpbGUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGaWxl
TWV0YWRhdGEmKTsKKyNlbmRpZgorCiAgICAgU3RyaW5nIG1fcGF0aDsKICAgICBTdHJpbmcgbV9u
YW1lOworCisjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorICAgIGNvbnN0IGxvbmcgbG9uZyBtX3Nu
YXBzaG90U2l6ZTsKKyAgICBjb25zdCBkb3VibGUgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7
CisjZW5kaWYKKwogI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQogICAgIFN0cmluZyBtX3Jl
bGF0aXZlUGF0aDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
QXN5bmNGaWxlU3lzdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0
ZW0uaAppbmRleCA2ZTUzYTlhYTVmM2Q3OTA4OWExYmU2ZmQ2ZDQ1MTRkOTQzNmJlNmJhLi5jMzNk
NmEwZjJiMzNmM2I0ZjcyNjVlNzE4NjA4NGQzYWI2M2IwZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaApAQCAtMTI3LDYgKzEyNyw4IEBAIHB1YmxpYzoKICAg
ICAvLyB3aGlsZSBpbiByZW1vdGUgZmlsZXN5c3RlbSBjYXNlIHRoZSBiYWNrZW5kIG1heSBkb3du
bG9hZCB0aGUgZmlsZSBpbnRvIGEgdGVtcG9yYXJ5IHNuYXBzaG90IGZpbGUgYW5kIHJldHVybiB0
aGUgbWV0YWRhdGEgb2YgdGhlIHRlbXBvcmFyeSBmaWxlLgogICAgIC8vIEFzeW5jRmlsZVN5c3Rl
bUNhbGxiYWNrczo6ZGlkUmVhZE1ldGFkYXRhKCkgaXMgY2FsbGVkIHdoZW4gdGhlIG1ldGFkYXRh
IGZvciB0aGUgc25hcHNob3QgZmlsZSBpcyBzdWNjZXNzZnVsbHkgcmV0dXJuZWQuCiAgICAgLy8g
QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzOjpkaWRGYWlsKCkgaXMgY2FsbGVkIG90aGVyd2lzZS4K
KyAgICAvLworICAgIC8vIE5vdGU6IHRoZSByZXR1cm5lZCBtZXRhZGF0YSBpbmZvIGlzIGNhY2hl
ZCBpbiB0aGUgRmlsZSBvYmplY3QgZm9yIG5vbi1yZWd1bGFyIGZpbGVzeXN0ZW0gdHlwZXMgKG5l
aXRoZXIgVGVtcG9yYXJ5IG5vciBQZXJzaXN0ZW50KS4gVGhlIHBvcnQgY291bGQgcmV0dXJuIHZh
bGlkIG1ldGFkYXRhIGlmIGl0IHdhbnRzIEZpbGUgb2JqZWN0IHRvIGNhY2hlIG1ldGFkYXRhIChl
LmcuIGlmIHRoZSBmaWxlIGJvZHkgaXMgb24gYSByZW1vdGUgc2VydmVyKSwgYnV0IG90aGVyd2lz
ZSBzaG91bGQgTk9UIHJldHVybiB2YWxpZCBtZXRhZGF0YS4KICAgICB2aXJ0dWFsIHZvaWQgY3Jl
YXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25Q
dHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPikgPSAwOwogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
MmEyMmEzOGY3OGNhZmE0N2Q3N2Q5YTQ1NWUxZTczODk4M2QxYzJiNy4uZDYxZDE1OWNmZjhkNGEx
MDEzYmVhYzE3NWExZWI0ZDQxNDc4MzkzNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEyLTA1
LTExICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAgICAgICBBbGxv
dyBGaWxlU3lzdGVtIEFQSSBpbXBsZW1lbnRhdGlvbiB0byBwYXNzIHNuYXBzaG90IG1ldGFkYXRh
IGF0IEZpbGUgY3JlYXRpb24gdGltZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Nzg4NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRlZCB0ZXN0cyBmb3IgbWFraW5nIHN1cmUgbWV0YWRhdGEgaXMgbm90
IGNhY2hlZCBpbiB0aGUgcmVndWxhcgorICAgICAgICB0ZW1wb3JhcnkgZmlsZXN5c3RlbS4KKwor
ICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9maWxlLXJlYWQtYWZ0ZXItd3JpdGUtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS1yZWFkLWFmdGVyLXdy
aXRlLmh0bWw6IEFkZGVkLgorCiAyMDEyLTA1LTE0ICBNaWtlIFdlc3QgIDxtaWtlQG1pa2V3ZXN0
Lm9yZz4KIAogICAgICAgICBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBjb25zb2xlIGVycm9ycyBp
bmNsdWRlIHZpb2xhdGVkIGRpcmVjdGl2ZS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXN5c3RlbS9maWxlLW1ldGFkYXRhLWFmdGVyLXdyaXRlLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLW1ldGFkYXRhLWFmdGVyLXdyaXRlLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mODE0ZmZkMGZhMDVkNDRjMGY3YTc1NjVhN2Y2ODljZTFmYzFlNjBl
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtbWV0
YWRhdGEtYWZ0ZXItd3JpdGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorV3JpdGluZyAx
MjM0NTY3ODkwIHRvIHRoZSBmaWxlLi4uCitDcmVhdGVkIGEgd3JpdGVyLgorV3JpdGUgc3VjY2Vl
ZGVkLgorUEFTUzogIjEwIiA9PSAiMTAiCitXcml0aW5nIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3
eHl6IHRvIHRoZSBmaWxlLi4uCitDcmVhdGVkIGEgd3JpdGVyLgorV3JpdGUgc3VjY2VlZGVkLgor
UEFTUzogIjI2IiA9PSAiMjYiCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5
c3RlbS9maWxlLW1ldGFkYXRhLWFmdGVyLXdyaXRlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zp
bGVzeXN0ZW0vZmlsZS1tZXRhZGF0YS1hZnRlci13cml0ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI5Y2Fi
ZWYwZjFlOWM4YzRjNzQ2ZGU1NTY3OWE2ZmRhMTlmYmZlYzcKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS1tZXRhZGF0YS1hZnRlci13cml0ZS5odG1s
CkBAIC0wLDAgKzEsODkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxkaXYg
aWQ9J2NvbnNvbGUnPjwvZGl2PgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFyIGZpbGVFbnRyeUZvckNs
ZWFudXA7Cit2YXIgdGVzdFRleHQxID0gJzEyMzQ1Njc4OTAnOwordmFyIHRlc3RUZXh0MiA9ICdh
YmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic7CisKK3dlYmtpdFJlcXVlc3RGaWxlU3lzdGVtKAor
ICAgIHdpbmRvdy5URU1QT1JBUlksIDEwMCwgZnVuY3Rpb24oZnMpIHsKKyAgICAgICAgZnMucm9v
dC5nZXRGaWxlKCd0ZXN0Jywge2NyZWF0ZTp0cnVlfSwgZnVuY3Rpb24oZW50cnkpIHsKKyAgICAg
ICAgICAgIHdyaXRlVGV4dFRvRmlsZShlbnRyeSwgdGVzdFRleHQxLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICBsb2coJ1dyaXRlIHN1Y2NlZWRlZC4nKTsKKyAgICAgICAgICAgICAgICBl
bnRyeS5maWxlKG9uQ3JlYXRlRmlsZS5iaW5kKHRoaXMsIGVudHJ5KSwgb25FcnJvcik7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSwgb25FcnJvcik7CisgICAgfSwgb25FcnJvcik7CisKK2Z1
bmN0aW9uIG9uQ3JlYXRlRmlsZShlbnRyeSwgZmlsZSkgeworICAgIHRlc3QodGVzdFRleHQxLmxl
bmd0aCwgZmlsZS5zaXplKTsKKyAgICAvLyBXcml0ZSBpbnRvIHRoaXMgZmlsZSBhZ2Fpbi4KKyAg
ICB3cml0ZVRleHRUb0ZpbGUoZW50cnksIHRlc3RUZXh0MiwgZnVuY3Rpb24oKSB7CisgICAgICAg
IGxvZygnV3JpdGUgc3VjY2VlZGVkLicpOworICAgICAgICBlbnRyeS5maWxlKGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgLy8gVGhlIGZpbGUgc2l6ZSBzaG91bGQgYmUgdXBkYXRlZC4KKyAgICAg
ICAgICAgIHRlc3QodGVzdFRleHQyLmxlbmd0aCwgZmlsZS5zaXplKTsKKyAgICAgICAgICAgIGVu
ZFRlc3QoKTsKKyAgICAgICAgfSwgb25FcnJvcik7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHdy
aXRlVGV4dFRvRmlsZShlbnRyeSwgY29udGVudHMsIHN1Y2Nlc3NDYWxsYmFjaykKK3sKKyAgICBs
b2coJ1dyaXRpbmcgJyArIGNvbnRlbnRzICsgJyB0byB0aGUgZmlsZS4uLicpOworICAgIGVudHJ5
LmNyZWF0ZVdyaXRlcihmdW5jdGlvbih3cml0ZXIpIHsKKyAgICAgICAgbG9nKCdDcmVhdGVkIGEg
d3JpdGVyLicpOworICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigp
OworICAgICAgICBidWlsZGVyLmFwcGVuZChjb250ZW50cyk7CisgICAgICAgIHdyaXRlci53cml0
ZShidWlsZGVyLmdldEJsb2IoJ3BsYWluL3RleHQnKSk7CisgICAgICAgIHdyaXRlci5vbndyaXRl
ZW5kID0gc3VjY2Vzc0NhbGxiYWNrOworICAgICAgICB3cml0ZXIub25lcnJvciA9IG9uRXJyb3I7
CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIGxvZyh0ZXh0KQoreworICAgIHZhciBjb25zb2xlID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKTsKKyAgICBjb25zb2xlLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKTsKKyAgICBjb25zb2xlLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOworfQorCitmdW5jdGlvbiB0ZXN0KGV4
cGVjdCwgYWN0dWFsKQoreworICAgIGxvZygoZXhwZWN0ID09IGFjdHVhbCA/ICdQQVNTJyA6ICdG
QUlMJykgKyAnOiAiJyArIGV4cGVjdCArICciID09ICInICsgYWN0dWFsICsgJyInKTsKK30KKwor
ZnVuY3Rpb24gb25FcnJvcihlKQoreworICAgIGxvZygnRVJST1I6ICcgKyBlLmNvZGUpOworICAg
IGNvbnNvbGUubG9nKGUpOworICAgIGNsZWFudXAoKTsKK30KKworZnVuY3Rpb24gY2xlYW51cCgp
Cit7CisgICAgaWYgKGZpbGVFbnRyeUZvckNsZWFudXApIHsKKyAgICAgICAgZmlsZUVudHJ5Rm9y
Q2xlYW51cC5yZW1vdmUoZW5kVGVzdCwgZW5kVGVzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgZW5kVGVzdCgpOworfQorCitmdW5jdGlvbiBlbmRUZXN0KCkKK3sKKyAgICBpZiAobGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7Cit9CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgorCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142414</attachid>
            <date>2012-05-16 22:47:19 -0700</date>
            <delta_ts>2012-05-17 00:40:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78879-20120517144718.patch</filename>
            <type>text/plain</type>
            <size>19847</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE3MTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTM5NzUyYzQ0YTc0ZTNh
ZDE1NDc2ODVhZGIwYzdlYTkyNTIwZjA0MC4uYjhhZDkwNGEyNjlkMTBmNTkwY2NlNDBiMjU0ZGMz
Yzc1ZTBkZDMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTA1LTExICBLaW51
a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAgICAgICBBbGxvdyBGaWxlU3lz
dGVtIEFQSSBpbXBsZW1lbnRhdGlvbiB0byBwYXNzIHNuYXBzaG90IG1ldGFkYXRhIGF0IEZpbGUg
Y3JlYXRpb24gdGltZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Nzg4NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBXZSBxdWVyeSBGaWxlIG1ldGFkYXRhIChlLmcuIHNpemUgYW5kIG1vZGlmaWVkVGltZSkg
d2hlbiBGaWxlLnNpemUsCisgICAgICAgIGxhc3RNb2RpZmllZFRpbWUgb3Igd2Via2l0U2xpY2Uo
KSBpcyBhY2Nlc3NlZCAvIGNhbGxlZCwgYnV0IGluIHNvbWUKKyAgICAgICAgcGxhdGZvcm0tc3Bl
Y2lmaWMgZmlsZXN5c3RlbXMgaXQgbWF5IG5vdCBiZSBmZWFzaWJsZSBzaW5jZSBzeW5jaHJvbm91
cworICAgICAgICBtZXRhZGF0YSBxdWVyeSBjb3VsZCB0YWtlIHZlcnkgbG9uZyB0aW1lLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBuZXcgRmlsZSBjb25zdHJ1Y3RvciB3aGljaCB0YWtlcyBt
ZXRhZGF0YSBhcmd1bWVudAorICAgICAgICB0byBhbGxvdyBlYWNoIEZpbGVTeXN0ZW0gQVBJIGlt
cGxlbWVudGF0aW9uIHRvIHBhc3Mgc25hcHNob3QgbWV0YWRhdGEKKyAgICAgICAgc28gdGhhdCBG
aWxlIG9iamVjdCBjb3VsZCBjYWNoZSB0aGUgZ2l2ZW4gbWV0YWRhdGEgbm90IHRvIG1ha2UKKyAg
ICAgICAgc3luY2hyb25vdXMgcXVlcnkuCisKKyAgICAgICAgV2Ugb25seSBjYWxsIHRoaXMgY29u
c3RydWN0b3IgaWYgdGhlIGZpbGVzeXN0ZW0gdHlwZSBpcyBuZWl0aGVyCisgICAgICAgIFRlbXBv
cmFyeSBub3IgUGVyc2lzdGVudCwgdGhlcmVmb3JlIHRoaXMgcGF0Y2ggc2hvdWxkIG5vdCBhZmZl
Y3QKKyAgICAgICAgZXhpc3RpbmcgY29kZSBiZWhhdmlvci4KKworICAgICAgICBUZXN0OiBmYXN0
L2ZpbGVzeXN0ZW0vZmlsZS1yZWFkLWFmdGVyLXdyaXRlLmh0bWwKKworICAgICAgICAqIE1vZHVs
ZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZp
bGVTeXN0ZW06OmNyZWF0ZUZpbGUpOgorICAgICAgICAqIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01G
aWxlU3lzdGVtU3luYy5jcHA6CisgICAgICAgICogZmlsZWFwaS9CbG9iLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkJsb2I6OndlYmtpdFNsaWNlKTogVXBkYXRlZCBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgKiBmaWxlYXBpL0Jsb2IuaDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZTo6RmlsZSk6IEFkZGVkIG5ldyBjb25zdHJ1Y3Rvci4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGU6Omxhc3RNb2RpZmllZERhdGUpOiBVcGRhdGVkIGltcGxlbWVudGF0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6c2l6ZSk6IFVwZGF0ZWQgaW1wbGVtZW50YXRp
b24uCisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpjYXB0dXJlU25hcHNob3QpOiBVcGRhdGVkIGlt
cGxlbWVudGF0aW9uLgorICAgICAgICAqIGZpbGVhcGkvRmlsZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZTo6Y3JlYXRlRm9yRmlsZVN5c3RlbUZpbGUpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKEFzeW5jRmlsZVN5c3RlbSk6IFVwZGF0
ZWQgY29tbWVudC4KKwogMjAxMi0wNS0xNSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLm1t
IGRvZXNuJ3QgY29tcGlsZSB3aXRoIHRoZSAxMC42IFNESyBvbiBtYWMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmNwcAppbmRleCAwOTBi
Y2MwNTIwZDA3MjA2MWE3YjE0ZTNiZDU0N2MwNThiYzBhODcwLi43YmIwYTY3NTc2N2Q1ZWRlYmZj
Y2RjN2VlM2ZkYzA4MjI5ZWU0OTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW0uY3BwCkBAIC0xMjMsMTEgKzEyMywxMSBAQCB2b2lk
IERPTUZpbGVTeXN0ZW06OmNyZWF0ZVdyaXRlcihjb25zdCBGaWxlRW50cnkqIGZpbGVFbnRyeSwg
UGFzc1JlZlB0cjxGaWxlV3JpdAogCiBuYW1lc3BhY2UgewogCi1jbGFzcyBHZXRQYXRoQ2FsbGJh
Y2sgOiBwdWJsaWMgRmlsZVN5c3RlbUNhbGxiYWNrc0Jhc2UgeworY2xhc3MgR2V0TWV0YWRhdGFD
YWxsYmFjayA6IHB1YmxpYyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8R2V0UGF0aENhbGxiYWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxET01G
aWxlU3lzdGVtPiBmaWxlc3lzdGVtLCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8Rmls
ZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJy
b3JDYWxsYmFjaykKKyAgICBzdGF0aWMgUGFzc093blB0cjxHZXRNZXRhZGF0YUNhbGxiYWNrPiBj
cmVhdGUoUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlc3lzdGVtLCBjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQ
dHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgR2V0UGF0aENhbGxiYWNrKGZpbGVzeXN0ZW0sIG5hbWUsIHN1Y2Nlc3NDYWxs
YmFjaywgZXJyb3JDYWxsYmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdldE1l
dGFkYXRhQ2FsbGJhY2soZmlsZXN5c3RlbSwgbmFtZSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNh
bGxiYWNrKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlYWRNZXRhZGF0YShjb25z
dCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQpAQCAtMTM2LDEyICsxMzYsMTggQEAgcHVibGljOgog
ICAgICAgICBpZiAoIW1fc3VjY2Vzc0NhbGxiYWNrKQogICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIG1fc3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVFdmVudChGaWxlOjpjcmVhdGVXaXRoTmFt
ZShtZXRhZGF0YS5wbGF0Zm9ybVBhdGgsIG1fbmFtZSkuZ2V0KCkpOworICAgICAgICAvLyBGb3Ig
cmVndWxhciBmaWxlc3lzdGVtIHR5cGVzICh0ZW1wb3Jhcnkgb3IgcGVyc2lzdGVudCksIHdlIHNo
b3VsZCBub3QgY2FjaGUgZmlsZSBtZXRhZGF0YSBhcyBpdCBjb3VsZCBjaGFuZ2UgRmlsZSBzZW1h
bnRpY3MuCisgICAgICAgIC8vIEZvciBvdGhlciBmaWxlc3lzdGVtIHR5cGVzICh3aGljaCBjb3Vs
ZCBiZSBwbGF0Zm9ybS1zcGVjaWZpYyBvbmVzKSwgdGhlcmUncyBhIGNoYW5jZSB0aGF0IHRoZSBm
aWxlcyBhcmUgb24gcmVtb3RlIGZpbGVzeXN0ZW0uIElmIHRoZSBwb3J0IGhhcyByZXR1cm5lZCBt
ZXRhZGF0YSBqdXN0IHBhc3MgaXQgdG8gRmlsZSBjb25zdHJ1Y3RvciAoc28gd2UgbWF5IGNhY2hl
IHRoZSBtZXRhZGF0YSkuCisgICAgICAgIGlmIChtX2ZpbGVzeXN0ZW0tPnR5cGUoKSA9PSBGaWxl
U3lzdGVtVHlwZVRlbXBvcmFyeSB8fCBtX2ZpbGVzeXN0ZW0tPnR5cGUoKSA9PSBGaWxlU3lzdGVt
VHlwZVBlcnNpc3RlbnQpCisgICAgICAgICAgICBtX3N1Y2Nlc3NDYWxsYmFjay0+aGFuZGxlRXZl
bnQoRmlsZTo6Y3JlYXRlV2l0aE5hbWUobWV0YWRhdGEucGxhdGZvcm1QYXRoLCBtX25hbWUpLmdl
dCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9zdWNjZXNzQ2FsbGJhY2stPmhhbmRs
ZUV2ZW50KEZpbGU6OmNyZWF0ZUZvckZpbGVTeXN0ZW1GaWxlKG1fbmFtZSwgbWV0YWRhdGEpLmdl
dCgpKTsKKwogICAgICAgICBtX3N1Y2Nlc3NDYWxsYmFjay5yZWxlYXNlKCk7CiAgICAgfQogCiBw
cml2YXRlOgotICAgIEdldFBhdGhDYWxsYmFjayhQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZp
bGVzeXN0ZW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBz
dWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykK
KyAgICBHZXRNZXRhZGF0YUNhbGxiYWNrKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZXN5
c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCAgUGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+IHN1Y2Nl
c3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQogICAg
ICAgICA6IEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlKGVycm9yQ2FsbGJhY2spCiAgICAgICAgICwg
bV9maWxlc3lzdGVtKGZpbGVzeXN0ZW0pCiAgICAgICAgICwgbV9uYW1lKG5hbWUpCkBAIC0xNTgs
NyArMTY0LDcgQEAgcHJpdmF0ZToKIAogdm9pZCBET01GaWxlU3lzdGVtOjpjcmVhdGVGaWxlKGNv
bnN0IEZpbGVFbnRyeSogZmlsZUVudHJ5LCBQYXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4gc3VjY2Vz
c0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCiB7Ci0g
ICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmNyZWF0ZVNuYXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YShj
cmVhdGVGaWxlU3lzdGVtVVJMKGZpbGVFbnRyeSksIEdldFBhdGhDYWxsYmFjazo6Y3JlYXRlKHRo
aXMsIGZpbGVFbnRyeS0+bmFtZSgpLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsK
KyAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRh
KGNyZWF0ZUZpbGVTeXN0ZW1VUkwoZmlsZUVudHJ5KSwgR2V0TWV0YWRhdGFDYWxsYmFjazo6Y3Jl
YXRlKHRoaXMsIGZpbGVFbnRyeS0+bmFtZSgpLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJh
Y2spKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtU3luYy5jcHAKaW5kZXggOGE1
N2QwMDVlNjMyYzdhY2E2MDM3ZTg0MzAwZDA2ZTc2N2U1MWUzNi4uYmMzNmNhZWRkYzdkZmE5Njc3
MTEwOTJiMDNkZTU4NDYwNzA2NjI4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMuY3BwCkBAIC05OCw5ICs5OCw5IEBA
IHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIFdURjo6UmVmQ291bnRlZDxDcmVhdGVGaWxl
UmVzdWx0PjsKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NPd25QdHI8Q3JlYXRlRmlsZUhlbHBl
cj4gY3JlYXRlKFBhc3NSZWZQdHI8Q3JlYXRlRmlsZVJlc3VsdD4gcmVzdWx0LCBjb25zdCBTdHJp
bmcmIG5hbWUpCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q3JlYXRlRmlsZUhlbHBlcj4gY3JlYXRl
KFBhc3NSZWZQdHI8Q3JlYXRlRmlsZVJlc3VsdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIG5hbWUs
IEZpbGVTeXN0ZW1UeXBlIHR5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENyZWF0ZUZpbGVIZWxwZXIocmVzdWx0LCBuYW1lKSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQ3JlYXRlRmlsZUhlbHBlcihyZXN1bHQsIG5hbWUsIHR5cGUpKTsKICAgICB9CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChpbnQgY29kZSkKQEAgLTExNSwxNyArMTE1LDI0IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgZGlkUmVhZE1ldGFkYXRhKGNvbnN0IEZpbGVNZXRhZGF0YSYgbWV0
YWRhdGEpCiAgICAgewotICAgICAgICBtX3Jlc3VsdC0+bV9maWxlID0gRmlsZTo6Y3JlYXRlV2l0
aE5hbWUobWV0YWRhdGEucGxhdGZvcm1QYXRoLCBtX25hbWUpOworICAgICAgICAvLyBGb3IgcmVn
dWxhciBmaWxlc3lzdGVtIHR5cGVzICh0ZW1wb3Jhcnkgb3IgcGVyc2lzdGVudCksIHdlIHNob3Vs
ZCBub3QgY2FjaGUgZmlsZSBtZXRhZGF0YSBhcyBpdCBjb3VsZCBjaGFuZ2UgRmlsZSBzZW1hbnRp
Y3MuCisgICAgICAgIC8vIEZvciBvdGhlciBmaWxlc3lzdGVtIHR5cGVzICh3aGljaCBjb3VsZCBi
ZSBwbGF0Zm9ybS1zcGVjaWZpYyBvbmVzKSwgdGhlcmUncyBhIGNoYW5jZSB0aGF0IHRoZSBmaWxl
cyBhcmUgb24gcmVtb3RlIGZpbGVzeXN0ZW0uIElmIHRoZSBwb3J0IGhhcyByZXR1cm5lZCBtZXRh
ZGF0YSBqdXN0IHBhc3MgaXQgdG8gRmlsZSBjb25zdHJ1Y3RvciAoc28gd2UgbWF5IGNhY2hlIHRo
ZSBtZXRhZGF0YSkuCisgICAgICAgIGlmIChtX3R5cGUgPT0gRmlsZVN5c3RlbVR5cGVUZW1wb3Jh
cnkgfHwgbV90eXBlID09IEZpbGVTeXN0ZW1UeXBlUGVyc2lzdGVudCkKKyAgICAgICAgICAgIG1f
cmVzdWx0LT5tX2ZpbGUgPSBGaWxlOjpjcmVhdGVXaXRoTmFtZShtZXRhZGF0YS5wbGF0Zm9ybVBh
dGgsIG1fbmFtZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcmVzdWx0LT5tX2ZpbGUg
PSBGaWxlOjpjcmVhdGVGb3JGaWxlU3lzdGVtRmlsZShtX25hbWUsIG1ldGFkYXRhKTsKICAgICB9
CiBwcml2YXRlOgotICAgIENyZWF0ZUZpbGVIZWxwZXIoUGFzc1JlZlB0cjxDcmVhdGVGaWxlUmVz
dWx0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICBDcmVhdGVGaWxlSGVscGVyKFBh
c3NSZWZQdHI8Q3JlYXRlRmlsZVJlc3VsdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIG5hbWUsIEZp
bGVTeXN0ZW1UeXBlIHR5cGUpCiAgICAgICAgIDogbV9yZXN1bHQocmVzdWx0KQogICAgICAgICAs
IG1fbmFtZShuYW1lKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQogICAgIHsKICAgICB9CiAKICAg
ICBSZWZQdHI8Q3JlYXRlRmlsZVJlc3VsdD4gbV9yZXN1bHQ7CiAgICAgU3RyaW5nIG1fbmFtZTsK
KyAgICBGaWxlU3lzdGVtVHlwZSBtX3R5cGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZQpAQCAtMTM0
LDcgKzE0MSw3IEBAIFBhc3NSZWZQdHI8RmlsZT4gRE9NRmlsZVN5c3RlbVN5bmM6OmNyZWF0ZUZp
bGUoY29uc3QgRmlsZUVudHJ5U3luYyogZmlsZUVudHJ5LCBFCiB7CiAgICAgZWMgPSAwOwogICAg
IFJlZlB0cjxDcmVhdGVGaWxlSGVscGVyOjpDcmVhdGVGaWxlUmVzdWx0PiByZXN1bHQoQ3JlYXRl
RmlsZUhlbHBlcjo6Q3JlYXRlRmlsZVJlc3VsdDo6Y3JlYXRlKCkpOwotICAgIG1fYXN5bmNGaWxl
U3lzdGVtLT5jcmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEoY3JlYXRlRmlsZVN5c3Rl
bVVSTChmaWxlRW50cnkpLCBDcmVhdGVGaWxlSGVscGVyOjpjcmVhdGUocmVzdWx0LCBmaWxlRW50
cnktPm5hbWUoKSkpOworICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5jcmVhdGVTbmFwc2hvdEZpbGVB
bmRSZWFkTWV0YWRhdGEoY3JlYXRlRmlsZVN5c3RlbVVSTChmaWxlRW50cnkpLCBDcmVhdGVGaWxl
SGVscGVyOjpjcmVhdGUocmVzdWx0LCBmaWxlRW50cnktPm5hbWUoKSwgdHlwZSgpKSk7CiAgICAg
aWYgKCFtX2FzeW5jRmlsZVN5c3RlbS0+d2FpdEZvck9wZXJhdGlvblRvQ29tcGxldGUoKSkgewog
ICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246OkFCT1JUX0VSUjsKICAgICAgICAgcmV0dXJuIDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9GaWxlLmNwcAppbmRleCA5MDUyOTFiMmRkNzU5M2U1YzYwODA5ODYxODRm
OGM0M2UxNmU5ZjYxLi5lYWJlNGY4NjhmMmEyMDcwYzg5MTNiZjUxODg0NDU1ODEwYmUxZjFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJGaWxlLmgiCiAKKyNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKICNp
bmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtMzMsNiArMzQsMTUgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitzdGF0aWMgU3RyaW5nIGdldENvbnRlbnRUeXBlRnJvbUZpbGVOYW1lKGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBTdHJpbmcgdHlwZTsKKyAgICBpbnQgaW5kZXggPSBu
YW1lLnJldmVyc2VGaW5kKCcuJyk7CisgICAgaWYgKGluZGV4ICE9IC0xKQorICAgICAgICB0eXBl
ID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0V2VsbEtub3duTUlNRVR5cGVGb3JFeHRlbnNpb24obmFt
ZS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7CisgICAgcmV0dXJuIHR5cGU7Cit9CisKIHN0YXRpYyBQ
YXNzT3duUHRyPEJsb2JEYXRhPiBjcmVhdGVCbG9iRGF0YUZvckZpbGVXaXRoVHlwZShjb25zdCBT
dHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCiB7CiAgICAgT3duUHRyPEJs
b2JEYXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsKQEAgLTQzLDIyICs1MywyNCBA
QCBzdGF0aWMgUGFzc093blB0cjxCbG9iRGF0YT4gY3JlYXRlQmxvYkRhdGFGb3JGaWxlV2l0aFR5
cGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjbwogCiBzdGF0aWMgUGFzc093blB0cjxCbG9iRGF0YT4g
Y3JlYXRlQmxvYkRhdGFGb3JGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICBTdHJpbmcg
dHlwZTsKLSAgICBpbnQgaW5kZXggPSBwYXRoLnJldmVyc2VGaW5kKCcuJyk7Ci0gICAgaWYgKGlu
ZGV4ICE9IC0xKQotICAgICAgICB0eXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVG
b3JFeHRlbnNpb24ocGF0aC5zdWJzdHJpbmcoaW5kZXggKyAxKSk7Ci0gICAgcmV0dXJuIGNyZWF0
ZUJsb2JEYXRhRm9yRmlsZVdpdGhUeXBlKHBhdGgsIHR5cGUpOworICAgIHJldHVybiBjcmVhdGVC
bG9iRGF0YUZvckZpbGVXaXRoVHlwZShwYXRoLCBnZXRDb250ZW50VHlwZUZyb21GaWxlTmFtZShw
YXRoKSk7CiB9CiAKIHN0YXRpYyBQYXNzT3duUHRyPEJsb2JEYXRhPiBjcmVhdGVCbG9iRGF0YUZv
ckZpbGVXaXRoTmFtZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsZVN5c3Rl
bU5hbWUpCiB7Ci0gICAgU3RyaW5nIHR5cGU7Ci0gICAgaW50IGluZGV4ID0gZmlsZVN5c3RlbU5h
bWUucmV2ZXJzZUZpbmQoJy4nKTsKLSAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICAgIHR5cGUg
PSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRXZWxsS25vd25NSU1FVHlwZUZvckV4dGVuc2lvbihmaWxl
U3lzdGVtTmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZUJsb2JE
YXRhRm9yRmlsZVdpdGhUeXBlKHBhdGgsIHR5cGUpOworICAgIHJldHVybiBjcmVhdGVCbG9iRGF0
YUZvckZpbGVXaXRoVHlwZShwYXRoLCBnZXRDb250ZW50VHlwZUZyb21GaWxlTmFtZShmaWxlU3lz
dGVtTmFtZSkpOwogfQogCisjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorc3RhdGljIFBhc3NPd25Q
dHI8QmxvYkRhdGE+IGNyZWF0ZUJsb2JEYXRhRm9yRmlsZVdpdGhNZXRhZGF0YShjb25zdCBTdHJp
bmcmIGZpbGVTeXN0ZW1OYW1lLCBjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQoreworICAg
IE93blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRlKCk7CisgICAgYmxv
YkRhdGEtPnNldENvbnRlbnRUeXBlKGdldENvbnRlbnRUeXBlRnJvbUZpbGVOYW1lKGZpbGVTeXN0
ZW1OYW1lKSk7CisgICAgYmxvYkRhdGEtPmFwcGVuZEZpbGUobWV0YWRhdGEucGxhdGZvcm1QYXRo
LCAwLCBtZXRhZGF0YS5sZW5ndGgsIG1ldGFkYXRhLm1vZGlmaWNhdGlvblRpbWUpOworICAgIHJl
dHVybiBibG9iRGF0YS5yZWxlYXNlKCk7Cit9CisjZW5kaWYKKwogI2lmIEVOQUJMRShESVJFQ1RP
UllfVVBMT0FEKQogUGFzc1JlZlB0cjxGaWxlPiBGaWxlOjpjcmVhdGVXaXRoUmVsYXRpdmVQYXRo
KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgpCiB7CkBAIC03
MiwxMiArODQsMjAgQEAgRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgOiBCbG9i
KGNyZWF0ZUJsb2JEYXRhRm9yRmlsZShwYXRoKSwgLTEpCiAgICAgLCBtX3BhdGgocGF0aCkKICAg
ICAsIG1fbmFtZShwYXRoR2V0RmlsZU5hbWUocGF0aCkpCisjaWYgRU5BQkxFKEZJTEVfU1lTVEVN
KQorICAgICwgbV9zbmFwc2hvdFNpemUoLTEpCisgICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9u
VGltZSgwKQorI2VuZGlmCiB7CiB9CiAKIEZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICA6IEJsb2IodXJsLCB0eXBl
LCAtMSkKICAgICAsIG1fcGF0aChwYXRoKQorI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKKyAgICAs
IG1fc25hcHNob3RTaXplKC0xKQorICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoMCkK
KyNlbmRpZgogewogICAgIG1fbmFtZSA9IHBhdGhHZXRGaWxlTmFtZShwYXRoKTsKICAgICAvLyBG
SVhNRTogRmlsZSBvYmplY3Qgc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24gZG9lcyBub3Qg
aW5jbHVkZQpAQCAtODksMTEgKzEwOSwzMSBAQCBGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgU3RyaW5nJiBuYW1lKQogICAgIDogQmxvYihjcmVhdGVCbG9iRGF0YUZvckZpbGVX
aXRoTmFtZShwYXRoLCBuYW1lKSwgLTEpCiAgICAgLCBtX3BhdGgocGF0aCkKICAgICAsIG1fbmFt
ZShuYW1lKQorI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKKyAgICAsIG1fc25hcHNob3RTaXplKC0x
KQorICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoMCkKKyNlbmRpZgoreworfQorCisj
aWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEpCisgICAgOiBCbG9iKGNyZWF0ZUJsb2JEYXRhRm9y
RmlsZVdpdGhNZXRhZGF0YShuYW1lLCBtZXRhZGF0YSksIG1ldGFkYXRhLmxlbmd0aCkKKyAgICAs
IG1fcGF0aChtZXRhZGF0YS5wbGF0Zm9ybVBhdGgpCisgICAgLCBtX25hbWUobmFtZSkKKyAgICAs
IG1fc25hcHNob3RTaXplKG1ldGFkYXRhLmxlbmd0aCkKKyAgICAsIG1fc25hcHNob3RNb2RpZmlj
YXRpb25UaW1lKG1ldGFkYXRhLm1vZGlmaWNhdGlvblRpbWUpCiB7CiB9CisjZW5kaWYKIAogZG91
YmxlIEZpbGU6Omxhc3RNb2RpZmllZERhdGUoKSBjb25zdAogeworI2lmIEVOQUJMRShGSUxFX1NZ
U1RFTSkKKyAgICBpZiAobV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpCisgICAgICAgIHJldHVy
biBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSAqIDEwMDAuMDsKKyNlbmRpZgorCiAgICAgdGlt
ZV90IG1vZGlmaWNhdGlvblRpbWU7CiAgICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZSht
X3BhdGgsIG1vZGlmaWNhdGlvblRpbWUpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTEwNCw2ICsx
NDQsMTEgQEAgZG91YmxlIEZpbGU6Omxhc3RNb2RpZmllZERhdGUoKSBjb25zdAogCiB1bnNpZ25l
ZCBsb25nIGxvbmcgRmlsZTo6c2l6ZSgpIGNvbnN0CiB7CisjaWYgRU5BQkxFKEZJTEVfU1lTVEVN
KQorICAgIGlmIChtX3NuYXBzaG90U2l6ZSA+PSAwKQorICAgICAgICByZXR1cm4gbV9zbmFwc2hv
dFNpemU7CisjZW5kaWYKKwogICAgIC8vIEZJWE1FOiBKYXZhU2NyaXB0IGNhbm5vdCByZXByZXNl
bnQgc2l6ZXMgYXMgbGFyZ2UgYXMgdW5zaWduZWQgbG9uZyBsb25nLCB3ZSBuZWVkIHRvCiAgICAg
Ly8gY29tZSB1cCB3aXRoIGFuIGV4Y2VwdGlvbiB0byB0aHJvdyBpZiBmaWxlIHNpemUgaXMgbm90
IHJlcHJlc2VudGFibGUuCiAgICAgbG9uZyBsb25nIHNpemU7CkBAIC0xMTQsNiArMTU5LDE0IEBA
IHVuc2lnbmVkIGxvbmcgbG9uZyBGaWxlOjpzaXplKCkgY29uc3QKIAogdm9pZCBGaWxlOjpjYXB0
dXJlU25hcHNob3QobG9uZyBsb25nJiBzbmFwc2hvdFNpemUsIGRvdWJsZSYgc25hcHNob3RNb2Rp
ZmljYXRpb25UaW1lKSBjb25zdAogeworI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKKyAgICBpZiAo
bV9zbmFwc2hvdFNpemUgPj0gMCAmJiBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkgeworICAg
ICAgICBzbmFwc2hvdFNpemUgPSBtX3NuYXBzaG90U2l6ZTsKKyAgICAgICAgc25hcHNob3RNb2Rp
ZmljYXRpb25UaW1lID0gbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisjZW5kaWYKKwogICAgIC8vIE9idGFpbnMgYSBzbmFwc2hvdCBvZiB0aGUgZmls
ZSBieSBjYXB0dXJpbmcgaXRzIGN1cnJlbnQgc2l6ZSBhbmQgbW9kaWZpY2F0aW9uIHRpbWUuIFRo
aXMgaXMgdXNlZCB3aGVuIHdlIHNsaWNlIGEgZmlsZSBmb3IgdGhlIGZpcnN0IHRpbWUuCiAgICAg
Ly8gSWYgd2UgZmFpbCB0byByZXRyaWV2ZSB0aGUgc2l6ZSBvciBtb2RpZmljYXRpb24gdGltZSwg
cHJvYmFibHkgZHVlIHRvIHRoYXQgdGhlIGZpbGUgaGFzIGJlZW4gZGVsZXRlZCwgMCBzaXplIGlz
IHJldHVybmVkLgogICAgIC8vIEZJWE1FOiBDb21iaW5lIGdldEZpbGVTaXplIGFuZCBnZXRGaWxl
TW9kaWZpY2F0aW9uVGltZSBpbnRvIG9uZSBmaWxlIHN5c3RlbSBjYWxsLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Zp
bGUuaAppbmRleCA4Mzc1NjcxMWNmZjU0Y2ZiZWEzYWZlMzRiMWJkNjFhYmYyMjVmMzI4Li5lODFj
NTc3Y2ZmYTEyZTNhZjc2NTE1MDkxZTkzOTk0NmExZDRhNzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0ZpbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUu
aApAQCAtMzMsNiArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZpbGVN
ZXRhZGF0YTsKIGNsYXNzIEtVUkw7CiAKIGNsYXNzIEZpbGUgOiBwdWJsaWMgQmxvYiB7CkBAIC01
Miw2ICs1MywxNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZT4gY3JlYXRl
V2l0aFJlbGF0aXZlUGF0aChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgcmVsYXRp
dmVQYXRoKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorICAgIC8vIElmIGZp
bGVzeXN0ZW0gZmlsZXMgbGl2ZSBpbiB0aGUgcmVtb3RlIGZpbGVzeXN0ZW0sIHRoZSBwb3J0IG1p
Z2h0IHBhc3MgdGhlIHZhbGlkIG1ldGRhdGEgKG5vbi16ZXJvIG1vZGlmaWNhdGlvblRpbWUgYW5k
L29yIG5vbi1uZWdhdGl2ZSBmaWxlIHNpemUpIGFuZCBjYWNoZSBpbiB0aGUgRmlsZSBvYmplY3Qu
CisgICAgLy8KKyAgICAvLyBPdGhlcndpc2UgY2FsbGluZyBzaXplKCksIGxhc3RNb2RpZmllZFRp
bWUoKSBvciB3ZWJraXRTbGljZSgpIHdpbGwgc3luY2hyb25vdXNseSBxdWVyeSB0aGUgZmlsZSBt
ZXRhZGF0YS4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlPiBjcmVhdGVGb3JGaWxlU3lzdGVt
RmlsZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUobmFtZSwgbWV0YWRhdGEpKTsK
KyAgICB9CisjZW5kaWYKKwogICAgIC8vIENyZWF0ZSBhIGZpbGUgd2l0aCBhIG5hbWUgZXhwb3Nl
ZCB0byB0aGUgYXV0aG9yICh2aWEgRmlsZS5uYW1lIGFuZCBhc3NvY2lhdGVkIERPTSBwcm9wZXJ0
aWVzKSB0aGF0IGRpZmZlcnMgZnJvbSB0aGUgb25lIHByb3ZpZGVkIGluIHRoZSBwYXRoLgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEZpbGU+IGNyZWF0ZVdpdGhOYW1lKGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgU3RyaW5nJiBuYW1lKQogICAgIHsKQEAgLTgxLDggKzkyLDE4IEBAIHByaXZhdGU6
CiAgICAgRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEtVUkwmIHNyY1VSTCwgY29uc3Qg
U3RyaW5nJiB0eXBlKTsKICAgICBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5n
JiBuYW1lKTsKIAorIyBpZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgRmlsZShjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IEZpbGVNZXRhZGF0YSYpOworI2VuZGlmCisKICAgICBTdHJpbmcgbV9w
YXRoOwogICAgIFN0cmluZyBtX25hbWU7CisKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAg
Y29uc3QgbG9uZyBsb25nIG1fc25hcHNob3RTaXplOworICAgIGNvbnN0IGRvdWJsZSBtX3NuYXBz
aG90TW9kaWZpY2F0aW9uVGltZTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExP
QUQpCiAgICAgU3RyaW5nIG1fcmVsYXRpdmVQYXRoOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oCmluZGV4IDZlNTNhOWFhNWYzZDc5MDg5YTFiZTZmZDZk
NDUxNGQ5NDM2YmU2YmEuLmMzM2Q2YTBmMmIzM2YzYjRmNzI2NWU3MTg2MDg0ZDNhYjYzYjBkNGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oCkBAIC0xMjcsNiAr
MTI3LDggQEAgcHVibGljOgogICAgIC8vIHdoaWxlIGluIHJlbW90ZSBmaWxlc3lzdGVtIGNhc2Ug
dGhlIGJhY2tlbmQgbWF5IGRvd25sb2FkIHRoZSBmaWxlIGludG8gYSB0ZW1wb3Jhcnkgc25hcHNo
b3QgZmlsZSBhbmQgcmV0dXJuIHRoZSBtZXRhZGF0YSBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUuCiAg
ICAgLy8gQXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzOjpkaWRSZWFkTWV0YWRhdGEoKSBpcyBjYWxs
ZWQgd2hlbiB0aGUgbWV0YWRhdGEgZm9yIHRoZSBzbmFwc2hvdCBmaWxlIGlzIHN1Y2Nlc3NmdWxs
eSByZXR1cm5lZC4KICAgICAvLyBBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M6OmRpZEZhaWwoKSBp
cyBjYWxsZWQgb3RoZXJ3aXNlLgorICAgIC8vCisgICAgLy8gTm90ZTogdGhlIHJldHVybmVkIG1l
dGFkYXRhIGluZm8gaXMgY2FjaGVkIGluIHRoZSBGaWxlIG9iamVjdCBmb3Igbm9uLXJlZ3VsYXIg
ZmlsZXN5c3RlbSB0eXBlcyAobmVpdGhlciBUZW1wb3Jhcnkgbm9yIFBlcnNpc3RlbnQpLiBUaGUg
cG9ydCBjb3VsZCByZXR1cm4gdmFsaWQgbWV0YWRhdGEgaWYgaXQgd2FudHMgRmlsZSBvYmplY3Qg
dG8gY2FjaGUgbWV0YWRhdGEgKGUuZy4gaWYgdGhlIGZpbGUgYm9keSBpcyBvbiBhIHJlbW90ZSBz
ZXJ2ZXIpLCBidXQgb3RoZXJ3aXNlIHNob3VsZCBOT1QgcmV0dXJuIHZhbGlkIG1ldGFkYXRhLgog
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEoY29uc3Qg
S1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KSA9IDA7CiAK
IHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwppbmRleCBiYWFhYzU5ZGJlNDA2OTg0N2FjYzAwN2MyNDZmYzAwZWU3NTcx
ZjFjLi42ZDUzZTEzYzczYjJlYTZjNjNjZTEzMTdlYzc1Y2RmNDA5MDBjOTk3IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTYgQEAKKzIwMTItMDUtMTEgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0u
b3JnPgorCisgICAgICAgIEFsbG93IEZpbGVTeXN0ZW0gQVBJIGltcGxlbWVudGF0aW9uIHRvIHBh
c3Mgc25hcHNob3QgbWV0YWRhdGEgYXQgRmlsZSBjcmVhdGlvbiB0aW1lCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODg3OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHRlc3RzIGZvciBtYWtpbmcg
c3VyZSBtZXRhZGF0YSBpcyBub3QgY2FjaGVkIGluIHRoZSByZWd1bGFyCisgICAgICAgIHRlbXBv
cmFyeSBmaWxlc3lzdGVtLgorCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL2ZpbGUtbWV0YWRh
dGEtYWZ0ZXItd3JpdGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVz
eXN0ZW0vZmlsZS1tZXRhZGF0YS1hZnRlci13cml0ZS5odG1sOiBBZGRlZC4KKwogMjAxMi0wNS0x
NSAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgR1RLIGdhcmRlbmluZy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9maWxlLW1ldGFkYXRhLWFmdGVyLXdyaXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLW1ldGFkYXRhLWFmdGVyLXdyaXRlLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hNDg4Yjc0NjlkMWY5ZjQ1MzdkNjliYTZhNDljMGExNTJmN2RkNWFhCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtbWV0YWRh
dGEtYWZ0ZXItd3JpdGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorV3JpdGluZyAxMjM0
NTY3ODkwIHRvIHRoZSBmaWxlLi4uCitDcmVhdGVkIGEgd3JpdGVyLgorV3JpdGUgc3VjY2VlZGVk
LgorUEFTUyB0ZXN0RmlsZS5zaXplIGlzIHRlc3RUZXh0MS5sZW5ndGgKK1dyaXRpbmcgYWJjZGVm
Z2hpamtsbW5vcHFyc3R1dnd4eXogdG8gdGhlIGZpbGUuLi4KK0NyZWF0ZWQgYSB3cml0ZXIuCitX
cml0ZSBzdWNjZWVkZWQuCitQQVNTIHRlc3RGaWxlLnNpemUgaXMgdGVzdFRleHQyLmxlbmd0aAor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS1tZXRhZGF0YS1h
ZnRlci13cml0ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtbWV0YWRh
dGEtYWZ0ZXItd3JpdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NzRiMDEwMjBiOTVkMDJiZGY5ZGFiZmQx
ODAxYjQ1YTdiM2NlODAwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL2ZpbGUtbWV0YWRhdGEtYWZ0ZXItd3JpdGUuaHRtbApAQCAtMCwwICsxLDkwIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0n
Y29uc29sZSc+PC9kaXY+Cis8c2NyaXB0PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgZmlsZUVudHJ5Rm9yQ2xlYW51
cDsKK3ZhciB0ZXN0RmlsZTsKK3ZhciB0ZXN0VGV4dDEgPSAnMTIzNDU2Nzg5MCc7Cit2YXIgdGVz
dFRleHQyID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JzsKKword2Via2l0UmVxdWVzdEZp
bGVTeXN0ZW0oCisgICAgd2luZG93LlRFTVBPUkFSWSwgMTAwLCBmdW5jdGlvbihmcykgeworICAg
ICAgICBmcy5yb290LmdldEZpbGUoJ3Rlc3QnLCB7Y3JlYXRlOnRydWV9LCBmdW5jdGlvbihlbnRy
eSkgeworICAgICAgICAgICAgZmlsZUVudHJ5Rm9yQ2xlYW51cCA9IGVudHJ5OworICAgICAgICAg
ICAgd3JpdGVUZXh0VG9GaWxlKGVudHJ5LCB0ZXN0VGV4dDEsIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIGxvZygnV3JpdGUgc3VjY2VlZGVkLicpOworICAgICAgICAgICAgICAgIGVudHJ5
LmZpbGUob25Xcml0dGVuRmlsZS5iaW5kKHRoaXMsIGVudHJ5KSwgb25FcnJvcik7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfSwgb25FcnJvcik7CisgICAgfSwgb25FcnJvcik7CisKK2Z1bmN0
aW9uIG9uV3JpdHRlbkZpbGUoZW50cnksIGZpbGUpIHsKKyAgICB0ZXN0RmlsZSA9IGZpbGU7Cisg
ICAgc2hvdWxkQmUoJ3Rlc3RGaWxlLnNpemUnLCAndGVzdFRleHQxLmxlbmd0aCcpOworICAgIC8v
IFdyaXRlIGludG8gdGhpcyBmaWxlIGFnYWluLgorICAgIHdyaXRlVGV4dFRvRmlsZShlbnRyeSwg
dGVzdFRleHQyLCBmdW5jdGlvbigpIHsKKyAgICAgICAgbG9nKCdXcml0ZSBzdWNjZWVkZWQuJyk7
CisgICAgICAgIGVudHJ5LmZpbGUoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAvLyBUaGUgZmls
ZSBzaXplIHNob3VsZCBiZSB1cGRhdGVkLgorICAgICAgICAgICAgc2hvdWxkQmUoJ3Rlc3RGaWxl
LnNpemUnLCAndGVzdFRleHQyLmxlbmd0aCcpOworICAgICAgICAgICAgY2xlYW51cCgpOworICAg
ICAgICB9LCBvbkVycm9yKTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gd3JpdGVUZXh0VG9GaWxl
KGVudHJ5LCBjb250ZW50cywgc3VjY2Vzc0NhbGxiYWNrKQoreworICAgIGxvZygnV3JpdGluZyAn
ICsgY29udGVudHMgKyAnIHRvIHRoZSBmaWxlLi4uJyk7CisgICAgZW50cnkuY3JlYXRlV3JpdGVy
KGZ1bmN0aW9uKHdyaXRlcikgeworICAgICAgICBsb2coJ0NyZWF0ZWQgYSB3cml0ZXIuJyk7Cisg
ICAgICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKGNvbnRlbnRzKTsKKyAgICAgICAgd3JpdGVyLndyaXRlKGJ1aWxkZXIuZ2V0
QmxvYigncGxhaW4vdGV4dCcpKTsKKyAgICAgICAgd3JpdGVyLm9ud3JpdGVlbmQgPSBzdWNjZXNz
Q2FsbGJhY2s7CisgICAgICAgIHdyaXRlci5vbmVycm9yID0gb25FcnJvcjsKKyAgICB9KTsKK30K
KworZnVuY3Rpb24gbG9nKHRleHQpCit7CisgICAgdmFyIGNvbnNvbGUgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnY29uc29sZScpOworICAgIGNvbnNvbGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUodGV4dCkpOworICAgIGNvbnNvbGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnYnInKSk7Cit9CisKK2Z1bmN0aW9uIG9uRXJyb3IoZSkKK3sKKyAgICBs
b2coJ0VSUk9SOiAnICsgZS5jb2RlKTsKKyAgICBjb25zb2xlLmxvZyhlKTsKKyAgICBjbGVhbnVw
KCk7Cit9CisKK2Z1bmN0aW9uIGNsZWFudXAoKQoreworICAgIGlmIChmaWxlRW50cnlGb3JDbGVh
bnVwKSB7CisgICAgICAgIGZpbGVFbnRyeUZvckNsZWFudXAucmVtb3ZlKGVuZFRlc3QsIGVuZFRl
c3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVuZFRlc3QoKTsKK30KKworZnVuY3Rp
b24gZW5kVGVzdCgpCit7CisgICAgaWYgKGxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KKwo=
</data>
<flag name="review"
          id="148742"
          type_id="1"
          status="+"
          setter="jianli"
    />
          </attachment>
      

    </bug>

</bugzilla>