<?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>176293</bug_id>
          
          <creation_ts>2017-09-02 23:05:59 -0700</creation_ts>
          <short_desc>Have getFileMetadata() return a std::optional&lt;FileMetadata&gt;</short_desc>
          <delta_ts>2017-09-27 12:41:25 -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>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1344928</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-09-02 23:05:59 -0700</bug_when>
    <thetext>Have getFileMetadata() returns a std::optional&lt;FileMetadata&gt; instead of using an out parameter for the metadata.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344929</commentid>
    <comment_count>1</comment_count>
      <attachid>319761</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-09-02 23:07:09 -0700</bug_when>
    <thetext>Created attachment 319761
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344930</commentid>
    <comment_count>2</comment_count>
      <attachid>319762</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-09-02 23:18:57 -0700</bug_when>
    <thetext>Created attachment 319762
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344992</commentid>
    <comment_count>3</comment_count>
      <attachid>319787</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-09-03 10:39:55 -0700</bug_when>
    <thetext>Created attachment 319787
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344994</commentid>
    <comment_count>4</comment_count>
      <attachid>319762</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-03 10:46:43 -0700</bug_when>
    <thetext>Comment on attachment 319762
Patch

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

Looks great. I have many small gripes about this and the surrounding code.

&gt; Source/WebCore/ChangeLog:9
&gt; +        Have getFileMetadata() returns a std::optional&lt;FileMetadata&gt; instead of
&gt; +        using an out parameter for the metadata.

The word &quot;get&quot; roughly means &quot;out parameter&quot; in WebKit code since we don’t use it when the return value is the thing being &quot;gotten&quot;. Because of this, the function should probably also be renamed to fileMetadata, readFileMetadata, or something with a word other than get. The word &quot;get&quot; goes along with the old interface.

Also on the subject of naming, I think we should have two different named functions rather than a single function with an enum argument telling it whether to follow symbolic links or not. There is only one call site in all of WebKit that passes something other than a constant to that argument, and that call site is *inside* the FileSystem.cpp file.

&gt; Source/WebCore/Modules/entriesapi/DOMFileSystem.cpp:168
&gt; +    if (!metadata)
&gt;          return Exception { NotFoundError, ASCIILiteral(&quot;Path does not exist&quot;) };

Seems oversimpified to report all errors as &quot;does not exist&quot;. The actual stat call in POSIX has many other error codes for failures other than EENOENT (does not exist).

This is why we might need std::expected rather than std::optional for this. Not sure what the intention of the DOMFileSystem specification is for such things.

&gt; Source/WebCore/Modules/entriesapi/DOMFileSystem.cpp:300
&gt; +        auto metadata = getFileMetadata(fullPath, ShouldFollowSymbolicLinks::No).value_or(FileMetadata { });

I think it would be better to not construct an entire FileMetadata for the failure case, just because we know it will give us a type other than file or directory. I think I would probably write something more like this:

auto type = metadata.has_value() ? metadata.value().type : FileMetadata::TypeUnknown;:

Although as I mention below I am not sure why FileMetadata::Type has a special value for this, so maybe it should be a std::optional in the future.

&gt; Source/WebCore/platform/FileSystem.h:103
&gt; +WEBCORE_EXPORT std::optional&lt;FileMetadata&gt; getFileMetadata(const String&amp;, ShouldFollowSymbolicLinks);

I don’t think it’s obvious that the string argument is a filename/pathname from the function name and type of the argument alone. Maybe to others this is obvious from context, but not to me.

&gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:258
&gt; +    FileMetadata metadata;

My first thought is that I would use construction or aggregate initialization rather than defining the structure and then setting values of the fields. But I guess setting values of fields is better because you can see the field names, but otherwise it’s not my favorite idiom.

&gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:270
&gt; +    return metadata;

Since the return value is std::optional&lt;FileMetadata&gt; rather than just FileMetadata, the return-value optimization does not kick in. Thus when just reading the source code it looks like it would be slightly more efficient if this said WTFMove(metadata) if there were any non-scalar fields in the FileMetadata struct. But I see now that is not true at the moment; no strings or anything like that.

FileMetadata.h does have many, many tiny defects, though. It has not yet been converted to #pragma once. It includes WTFString.h but there is no use of String in the file. It has a Type enum where all the values have Type as a prefix; that should be enum class instead. It uses &quot;-1&quot; for &quot;length not set&quot; but instead should use std::optional for that. The modification time field has a comment says &quot;0.0&quot; means time is not set, is initialized to invalidFileTime (NaN and not 0.0); we should almost certainly use std::optional&lt;WallTime&gt; or std::optional&lt;Seconds&gt; rather than double. Also not too fond of &quot;TypeUnknown&quot;. Do we really need it? Are we using it to indicate &quot;other&quot;, or actually using it to indicate &quot;unknown&quot;? Does FileMetadata really need to be default-initializable to something distinct like this? Why is it OK for isHidden to be definitively &quot;false&quot; in a newly allocated FileMetadata, but for type we feed the need to use &quot;unknown&quot; rather than &quot;file&quot; (knowing it might be inaccurate).

The special values like -1 don’t seem to necessarily be fully supported; for example most call sites use the length without checking for -1.

&gt; Tools/TestWebKitAPI/Tests/WebCore/FileSystem.cpp:132
&gt; +    ASSERT_TRUE(!!symlinkMetadata);

I prefer has_value() to !! for this operation.

&gt; Tools/TestWebKitAPI/Tests/WebCore/FileSystem.cpp:137
&gt; +    ASSERT_TRUE(!!targetMetadata);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344995</commentid>
    <comment_count>5</comment_count>
      <attachid>319787</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-03 10:47:00 -0700</bug_when>
    <thetext>Comment on attachment 319787
Patch

See my comments on the earlier version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345001</commentid>
    <comment_count>6</comment_count>
      <attachid>319762</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-09-03 11:09:43 -0700</bug_when>
    <thetext>Comment on attachment 319762
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        using an out parameter for the metadata.
&gt; 
&gt; The word &quot;get&quot; roughly means &quot;out parameter&quot; in WebKit code since we don’t use it when the return value is the thing being &quot;gotten&quot;. Because of this, the function should probably also be renamed to fileMetadata, readFileMetadata, or something with a word other than get. The word &quot;get&quot; goes along with the old interface.
&gt; 
&gt; Also on the subject of naming, I think we should have two different named functions rather than a single function with an enum argument telling it whether to follow symbolic links or not. There is only one call site in all of WebKit that passes something other than a constant to that argument, and that call site is *inside* the FileSystem.cpp file.

Ok.

&gt;&gt; Source/WebCore/Modules/entriesapi/DOMFileSystem.cpp:168
&gt;&gt;          return Exception { NotFoundError, ASCIILiteral(&quot;Path does not exist&quot;) };
&gt; 
&gt; Seems oversimpified to report all errors as &quot;does not exist&quot;. The actual stat call in POSIX has many other error codes for failures other than EENOENT (does not exist).
&gt; 
&gt; This is why we might need std::expected rather than std::optional for this. Not sure what the intention of the DOMFileSystem specification is for such things.

The spec says we can throw either NotFoundError or TypeMismatchError. The most likely reason for getFileMetata to fails is that the file does not exist, which is why I chose NotFoundError. Other reasons may be:
 - Bad input (unlikely here)
- Permission problems, in which case I think reporting NotFoundError to the Web is still the right behavior.
- For other errors types, I still think NotFoundError is the right behavior here given our 2 choices.

&gt;&gt; Source/WebCore/Modules/entriesapi/DOMFileSystem.cpp:300
&gt;&gt; +        auto metadata = getFileMetadata(fullPath, ShouldFollowSymbolicLinks::No).value_or(FileMetadata { });
&gt; 
&gt; I think it would be better to not construct an entire FileMetadata for the failure case, just because we know it will give us a type other than file or directory. I think I would probably write something more like this:
&gt; 
&gt; auto type = metadata.has_value() ? metadata.value().type : FileMetadata::TypeUnknown;:
&gt; 
&gt; Although as I mention below I am not sure why FileMetadata::Type has a special value for this, so maybe it should be a std::optional in the future.

Ok

&gt;&gt; Source/WebCore/platform/FileSystem.h:103
&gt;&gt; +WEBCORE_EXPORT std::optional&lt;FileMetadata&gt; getFileMetadata(const String&amp;, ShouldFollowSymbolicLinks);
&gt; 
&gt; I don’t think it’s obvious that the string argument is a filename/pathname from the function name and type of the argument alone. Maybe to others this is obvious from context, but not to me.

Ok.

&gt;&gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:270
&gt;&gt; +    return metadata;
&gt; 
&gt; Since the return value is std::optional&lt;FileMetadata&gt; rather than just FileMetadata, the return-value optimization does not kick in. Thus when just reading the source code it looks like it would be slightly more efficient if this said WTFMove(metadata) if there were any non-scalar fields in the FileMetadata struct. But I see now that is not true at the moment; no strings or anything like that.
&gt; 
&gt; FileMetadata.h does have many, many tiny defects, though. It has not yet been converted to #pragma once. It includes WTFString.h but there is no use of String in the file. It has a Type enum where all the values have Type as a prefix; that should be enum class instead. It uses &quot;-1&quot; for &quot;length not set&quot; but instead should use std::optional for that. The modification time field has a comment says &quot;0.0&quot; means time is not set, is initialized to invalidFileTime (NaN and not 0.0); we should almost certainly use std::optional&lt;WallTime&gt; or std::optional&lt;Seconds&gt; rather than double. Also not too fond of &quot;TypeUnknown&quot;. Do we really need it? Are we using it to indicate &quot;other&quot;, or actually using it to indicate &quot;unknown&quot;? Does FileMetadata really need to be default-initializable to something distinct like this? Why is it OK for isHidden to be definitively &quot;false&quot; in a newly allocated FileMetadata, but for type we feed the need to use &quot;unknown&quot; rather than &quot;file&quot; (knowing it might be inaccurate).
&gt; 
&gt; The special values like -1 don’t seem to necessarily be fully supported; for example most call sites use the length without checking for -1.

Ok.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebCore/FileSystem.cpp:132
&gt;&gt; +    ASSERT_TRUE(!!symlinkMetadata);
&gt; 
&gt; I prefer has_value() to !! for this operation.

Ok.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebCore/FileSystem.cpp:137
&gt;&gt; +    ASSERT_TRUE(!!targetMetadata);
&gt; 
&gt; Ditto.

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345038</commentid>
    <comment_count>7</comment_count>
      <attachid>319798</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-09-03 13:25:59 -0700</bug_when>
    <thetext>Created attachment 319798
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345040</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-09-03 13:27:04 -0700</bug_when>
    <thetext>Requesting review again given the amount of changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345060</commentid>
    <comment_count>9</comment_count>
      <attachid>319798</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-03 15:03:37 -0700</bug_when>
    <thetext>Comment on attachment 319798
Patch

Clearing flags on attachment: 319798

Committed r221558: &lt;http://trac.webkit.org/changeset/221558&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345061</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-03 15:03:38 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353599</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:41:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/34693762&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319761</attachid>
            <date>2017-09-02 23:07:09 -0700</date>
            <delta_ts>2017-09-02 23:18:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176293-20170902230707.patch</filename>
            <type>text/plain</type>
            <size>17187</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGYxMmU3N2U0MWE4YjMy
YzFjOGY5YmUzMjU4NjE4MmVhODJmMzFiMS4uNGNjMzFiNDcxOGMzYmIwYWU2MDQ4NDdiMDVhM2Yx
Zjk1MTI2YjAyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE3LTA5LTAyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBnZXRGaWxlTWV0YWRh
dGEoKSByZXR1cm5zIGEgc3RkOjpvcHRpb25hbDxGaWxlTWV0YWRhdGE+CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYyOTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIYXZlIGdldEZpbGVNZXRhZGF0YSgp
IHJldHVybnMgYSBzdGQ6Om9wdGlvbmFsPEZpbGVNZXRhZGF0YT4gaW5zdGVhZCBvZgorICAgICAg
ICB1c2luZyBhbiBvdXQgcGFyYW1ldGVyIGZvciB0aGUgbWV0YWRhdGEuCisKKyAgICAgICAgKiBN
b2R1bGVzL2VudHJpZXNhcGkvRE9NRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjps
aXN0RGlyZWN0b3J5V2l0aE1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnZhbGlkYXRlUGF0
aElzRXhwZWN0ZWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZpbGVTeXN0ZW06OmdldEVu
dHJ5KToKKyAgICAgICAgKiBodG1sL0ZpbGVMaXN0Q3JlYXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjphcHBlbmREaXJlY3RvcnlGaWxlcyk6CisgICAgICAgICogcGxhdGZvcm0vRmlsZVN5c3Rl
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaWxlSXNEaXJlY3RvcnkpOgorICAgICAgICAqIHBs
YXRmb3JtL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL0ZpbGVTeXN0ZW1H
bGliLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEZpbGVNZXRhZGF0YSk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YUZpbGVSZWZlcmVuY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QmxvYkRhdGFGaWxlUmVmZXJlbmNlOjpzdGFydFRyYWNraW5nTW9kaWZpY2F0aW9ucyk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvQmxvYkRhdGFGaWxlUmVmZXJlbmNlTWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6QmxvYkRhdGFGaWxlUmVmZXJlbmNlOjpnZW5lcmF0ZVJl
cGxhY2VtZW50RmlsZSk6CisgICAgICAgICogcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lY
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEZpbGVNZXRhZGF0YSk6CisgICAgICAgICogcGxh
dGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RmlsZU1l
dGFkYXRhKToKKwogMjAxNy0wOS0wMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIERPTU1hdHJpeC9ET01NYXRyaXhSZWFkT25seSB2YWxpZGF0aW9uIGlzIGluY29ycmVj
dCBmb3IgTmFOIHZhbHVlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRy
aWVzYXBpL0RPTUZpbGVTeXN0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVz
YXBpL0RPTUZpbGVTeXN0ZW0uY3BwCmluZGV4IGY4YjQ1NjRhOTY1NzQ4OTZmNmJiMzcxZTdmM2Q2
NTNjZDIzNTQ5MTcuLjQ0YjZiOWEyMzAwZWM5MWJjMzFlNDgwNDZlYjE0NzlhNzdjMTcxNGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9ET01GaWxlU3lzdGVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRE9NRmlsZVN5c3Rl
bS5jcHAKQEAgLTU1LDEwICs1NSwxMCBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPExpc3Rl
ZENoaWxkPj4gbGlzdERpcmVjdG9yeVdpdGhNZXRhZGF0YShjb25zdCBTdHJpbmcmCiAgICAgVmVj
dG9yPExpc3RlZENoaWxkPiBsaXN0ZWRDaGlsZHJlbjsKICAgICBsaXN0ZWRDaGlsZHJlbi5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGNoaWxkUGF0aHMuc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIGNo
aWxkUGF0aCA6IGNoaWxkUGF0aHMpIHsKLSAgICAgICAgRmlsZU1ldGFkYXRhIG1ldGFkYXRhOwot
ICAgICAgICBpZiAoIWdldEZpbGVNZXRhZGF0YShjaGlsZFBhdGgsIG1ldGFkYXRhLCBTaG91bGRG
b2xsb3dTeW1ib2xpY0xpbmtzOjpObykpCisgICAgICAgIGF1dG8gbWV0YWRhdGEgPSBnZXRGaWxl
TWV0YWRhdGEoY2hpbGRQYXRoLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObyk7CisgICAg
ICAgIGlmICghbWV0YWRhdGEpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbGlzdGVk
Q2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKExpc3RlZENoaWxkIHsgcGF0aEdldEZpbGVOYW1lKGNo
aWxkUGF0aCksIG1ldGFkYXRhLnR5cGUgfSk7CisgICAgICAgIGxpc3RlZENoaWxkcmVuLnVuY2hl
Y2tlZEFwcGVuZChMaXN0ZWRDaGlsZCB7IHBhdGhHZXRGaWxlTmFtZShjaGlsZFBhdGgpLCBtZXRh
ZGF0YS52YWx1ZSgpLnR5cGUgfSk7CiAgICAgfQogICAgIHJldHVybiBXVEZNb3ZlKGxpc3RlZENo
aWxkcmVuKTsKIH0KQEAgLTE2MywxMSArMTYzLDExIEBAIHN0YXRpYyBFeGNlcHRpb25PcjxTdHJp
bmc+IHZhbGlkYXRlUGF0aElzRXhwZWN0ZWRUeXBlKGNvbnN0IFN0cmluZyYgZnVsbFBhdGgsIFN0
CiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKLSAgICBGaWxlTWV0YWRhdGEgbWV0
YWRhdGE7Ci0gICAgaWYgKCFnZXRGaWxlTWV0YWRhdGEoZnVsbFBhdGgsIG1ldGFkYXRhLCBTaG91
bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpCisgICAgYXV0byBtZXRhZGF0YSA9IGdldEZpbGVN
ZXRhZGF0YShmdWxsUGF0aCwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pOworICAgIGlm
ICghbWV0YWRhdGEpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVycm9yLCBB
U0NJSUxpdGVyYWwoIlBhdGggZG9lcyBub3QgZXhpc3QiKSB9OwogCi0gICAgaWYgKG1ldGFkYXRh
LnR5cGUgIT0gZXhwZWN0ZWRUeXBlKQorICAgIGlmIChtZXRhZGF0YS52YWx1ZSgpLnR5cGUgIT0g
ZXhwZWN0ZWRUeXBlKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZU1pc21hdGNoRXJy
b3IsICJFbnRyeSBhdCBwYXRoIGRvZXMgbm90IGhhdmUgZXhwZWN0ZWQgdHlwZSIgfTsKIAogICAg
IHJldHVybiBXVEZNb3ZlKHZpcnR1YWxQYXRoKTsKQEAgLTI5Nyw4ICsyOTcsNyBAQCB2b2lkIERP
TUZpbGVTeXN0ZW06OmdldEVudHJ5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEZp
bGVTeXN0ZW1EaXJlY3RvcgogICAgIH0KIAogICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbdGhp
cywgY29udGV4dCA9IG1ha2VSZWYoY29udGV4dCksIGZ1bGxQYXRoID0gY3Jvc3NUaHJlYWRDb3B5
KGZ1bGxQYXRoKSwgcmVzb2x2ZWRWaXJ0dWFsUGF0aCA9IGNyb3NzVGhyZWFkQ29weShyZXNvbHZl
ZFZpcnR1YWxQYXRoKSwgY29tcGxldGlvbkNhbGxiYWNrID0gV1RGTW92ZShjb21wbGV0aW9uQ2Fs
bGJhY2spXSgpIG11dGFibGUgewotICAgICAgICBGaWxlTWV0YWRhdGEgbWV0YWRhdGE7Ci0gICAg
ICAgIGdldEZpbGVNZXRhZGF0YShmdWxsUGF0aCwgbWV0YWRhdGEsIFNob3VsZEZvbGxvd1N5bWJv
bGljTGlua3M6Ok5vKTsKKyAgICAgICAgYXV0byBtZXRhZGF0YSA9IGdldEZpbGVNZXRhZGF0YShm
dWxsUGF0aCwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pLnZhbHVlX29yKEZpbGVNZXRh
ZGF0YSB7IH0pOwogICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBjb250ZXh0ID0gV1RG
TW92ZShjb250ZXh0KSwgcmVzb2x2ZWRWaXJ0dWFsUGF0aCA9IGNyb3NzVGhyZWFkQ29weShyZXNv
bHZlZFZpcnR1YWxQYXRoKSwgZW50cnlUeXBlID0gbWV0YWRhdGEudHlwZSwgY29tcGxldGlvbkNh
bGxiYWNrID0gV1RGTW92ZShjb21wbGV0aW9uQ2FsbGJhY2spXSgpIG11dGFibGUgewogICAgICAg
ICAgICAgc3dpdGNoIChlbnRyeVR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgRmlsZU1ldGFkYXRh
OjpUeXBlRGlyZWN0b3J5OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlTGlz
dENyZWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlTGlzdENyZWF0b3IuY3BwCmlu
ZGV4IDQxOTJjNjNkZjE1OWNhMzNmNDcwY2EwZGVkMTI5ODM2MTVjODg2MDMuLmI3YTk4OWEwYzlj
OTAxNGM2NmQ4MzZiNjhkNTZmOWM3MmJiYzQ0MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvRmlsZUxpc3RDcmVhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVM
aXN0Q3JlYXRvci5jcHAKQEAgLTQyLDE3ICs0MiwxNyBAQCBGaWxlTGlzdENyZWF0b3I6On5GaWxl
TGlzdENyZWF0b3IoKQogc3RhdGljIHZvaWQgYXBwZW5kRGlyZWN0b3J5RmlsZXMoY29uc3QgU3Ry
aW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBWZWN0b3I8UmVmUHRy
PEZpbGU+PiYgZmlsZU9iamVjdHMpCiB7CiAgICAgZm9yIChhdXRvJiBjaGlsZFBhdGggOiBsaXN0
RGlyZWN0b3J5KGRpcmVjdG9yeSwgIioiKSkgewotICAgICAgICBGaWxlTWV0YWRhdGEgbWV0YWRh
dGE7Ci0gICAgICAgIGlmICghZ2V0RmlsZU1ldGFkYXRhKGNoaWxkUGF0aCwgbWV0YWRhdGEsIFNo
b3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSkKKyAgICAgICAgYXV0byBtZXRhZGF0YSA9IGdl
dEZpbGVNZXRhZGF0YShjaGlsZFBhdGgsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKTsK
KyAgICAgICAgaWYgKCFtZXRhZGF0YSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IGlmIChtZXRhZGF0YS5pc0hpZGRlbikKKyAgICAgICAgaWYgKG1ldGFkYXRhLnZhbHVlKCkuaXNI
aWRkZW4pCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBTdHJpbmcgY2hpbGRSZWxh
dGl2ZVBhdGggPSByZWxhdGl2ZVBhdGggKyAiLyIgKyBwYXRoR2V0RmlsZU5hbWUoY2hpbGRQYXRo
KTsKLSAgICAgICAgaWYgKG1ldGFkYXRhLnR5cGUgPT0gRmlsZU1ldGFkYXRhOjpUeXBlRGlyZWN0
b3J5KQorICAgICAgICBpZiAobWV0YWRhdGEudmFsdWUoKS50eXBlID09IEZpbGVNZXRhZGF0YTo6
VHlwZURpcmVjdG9yeSkKICAgICAgICAgICAgIGFwcGVuZERpcmVjdG9yeUZpbGVzKGNoaWxkUGF0
aCwgY2hpbGRSZWxhdGl2ZVBhdGgsIGZpbGVPYmplY3RzKTsKLSAgICAgICAgZWxzZSBpZiAobWV0
YWRhdGEudHlwZSA9PSBGaWxlTWV0YWRhdGE6OlR5cGVGaWxlKQorICAgICAgICBlbHNlIGlmICht
ZXRhZGF0YS52YWx1ZSgpLnR5cGUgPT0gRmlsZU1ldGFkYXRhOjpUeXBlRmlsZSkKICAgICAgICAg
ICAgIGZpbGVPYmplY3RzLmFwcGVuZChGaWxlOjpjcmVhdGVXaXRoUmVsYXRpdmVQYXRoKGNoaWxk
UGF0aCwgY2hpbGRSZWxhdGl2ZVBhdGgpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0ZpbGVTeXN0ZW0uY3BwCmluZGV4IGQ1N2EwYmQ3ZTIyZDY4NjYzYTRmYWNhYjBmYzA5YTQ3ZjQ0
MjAyNDkuLmJiNzE0OTI1Y2MwZTg1OGE0ZTY1OGVmNDA4N2IwZDU3OTk5ZGViYzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwCkBAIC0zNTMsMTAgKzM1MywxMCBAQCB2b2lk
IHVubG9ja0FuZENsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlKQogCiBib29sIGZp
bGVJc0RpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlu
a3Mgc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcykKIHsKLSAgICBGaWxlTWV0YWRhdGEgbWV0YWRh
dGE7Ci0gICAgaWYgKCFnZXRGaWxlTWV0YWRhdGEocGF0aCwgbWV0YWRhdGEsIHNob3VsZEZvbGxv
d1N5bWJvbGljTGlua3MpKQorICAgIGF1dG8gbWV0YWRhdGEgPSBnZXRGaWxlTWV0YWRhdGEocGF0
aCwgc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcyk7CisgICAgaWYgKCFtZXRhZGF0YSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtZXRhZGF0YS50eXBlID09IEZpbGVNZXRhZGF0
YTo6VHlwZURpcmVjdG9yeTsKKyAgICByZXR1cm4gbWV0YWRhdGEudmFsdWUoKS50eXBlID09IEZp
bGVNZXRhZGF0YTo6VHlwZURpcmVjdG9yeTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCmluZGV4IDE1OWYxY2JkNWM5YTdkMDc0MTZm
ZWI0ODgzZjFkOTQ3NGM4OTA2YmMuLjRhMTQzOTBmZDZhODQwZWIxYTViNWY5Mjk4MTU0N2JhZTll
MzM4NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKQEAgLTEwMCw3ICsxMDAs
NyBAQCBXRUJDT1JFX0VYUE9SVCBib29sIGdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYsIGxvbmcg
bG9uZyYgcmVzdWx0KTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0RmlsZVNpemUoUGxhdGZvcm1G
aWxlSGFuZGxlLCBsb25nIGxvbmcmIHJlc3VsdCk7CiBXRUJDT1JFX0VYUE9SVCBib29sIGdldEZp
bGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYsIHRpbWVfdCYgcmVzdWx0KTsKIFdFQkNP
UkVfRVhQT1JUIGJvb2wgZ2V0RmlsZUNyZWF0aW9uVGltZShjb25zdCBTdHJpbmcmLCB0aW1lX3Qm
IHJlc3VsdCk7IC8vIE5vdCBhbGwgcGxhdGZvcm1zIHN0b3JlIGZpbGUgY3JlYXRpb24gdGltZS4K
LVdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0RmlsZU1ldGFkYXRhKGNvbnN0IFN0cmluZyYsIEZpbGVN
ZXRhZGF0YSYsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3MpOworV0VCQ09SRV9FWFBPUlQgc3Rk
OjpvcHRpb25hbDxGaWxlTWV0YWRhdGE+IGdldEZpbGVNZXRhZGF0YShjb25zdCBTdHJpbmcmLCBT
aG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzKTsKIGJvb2wgZmlsZUlzRGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3MpOwogV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmlu
ZyYgY29tcG9uZW50KTsKIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnRzKGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGNvbXBvbmVudHMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcAppbmRleCA3N2IwNTU5
YjI5NzQzOWQwNjIyODg4ODRiNjlkOTI4NmNiY2I4MjE3Li41YjNhNTYwYmJmYWIzODYzYTM5YTZl
Y2U3NmVkYzhkYzI1Y2ZhNzM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
bGliL0ZpbGVTeXN0ZW1HbGliLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGli
L0ZpbGVTeXN0ZW1HbGliLmNwcApAQCAtMTY0LDE4ICsxNjQsMTggQEAgYm9vbCBnZXRGaWxlTW9k
aWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgsIHRpbWVfdCYgbW9kaWZpZWRUaW1lKQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGdldEZpbGVNZXRhZGF0YShjb25zdCBTdHJpbmcm
IHBhdGgsIEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3Mg
c2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcykKK3N0ZDo6b3B0aW9uYWw8RmlsZU1ldGFkYXRhPiBn
ZXRGaWxlTWV0YWRhdGEoY29uc3QgU3RyaW5nJiBwYXRoLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xp
bmtzIHNob3VsZEZvbGxvd1N5bWJvbGljTGlua3MpCiB7CiAgICAgR1N0YXRCdWYgc3RhdFJlc3Vs
dDsKLQogICAgIGlmIChzaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzID09IFNob3VsZEZvbGxvd1N5
bWJvbGljTGlua3M6OlllcykgewogICAgICAgICBpZiAoIWdldEZpbGVTdGF0KHBhdGgsICZzdGF0
UmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFnZXRGaWxlTFN0YXQocGF0
aCwgJnN0YXRSZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9CiAKKyAgICBGaWxlTWV0YWRhdGEgbWV0YWRhdGEs
CiAgICAgU3RyaW5nIGZpbGVuYW1lID0gcGF0aEdldEZpbGVOYW1lKHBhdGgpOwogICAgIG1ldGFk
YXRhLmlzSGlkZGVuID0gIWZpbGVuYW1lLmlzRW1wdHkoKSAmJiBmaWxlbmFtZVswXSA9PSAnLic7
CiAgICAgbWV0YWRhdGEubW9kaWZpY2F0aW9uVGltZSA9IHN0YXRSZXN1bHQuc3RfbXRpbWU7CkBA
IC0xODYsNyArMTg2LDcgQEAgYm9vbCBnZXRGaWxlTWV0YWRhdGEoY29uc3QgU3RyaW5nJiBwYXRo
LCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhLCBTaG91bGRGb2xsb3dTeW0KICAgICAgICAgbWV0YWRh
dGEudHlwZSA9IEZpbGVNZXRhZGF0YTo6VHlwZVN5bWJvbGljTGluazsKICAgICBlbHNlCiAgICAg
ICAgIG1ldGFkYXRhLnR5cGUgPSBGaWxlTWV0YWRhdGE6OlR5cGVGaWxlOwotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBtZXRhZGF0YTsKIH0KIAogU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YUZpbGVSZWZl
cmVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YUZpbGVS
ZWZlcmVuY2UuY3BwCmluZGV4IDZkYzZkNjRhZTg3MTg1ZDBmMWNkMWVhODc3NjgwOGRhM2M2NTVk
N2YuLmEyZWM1MmJhYzFhZWRmZDVkYzJkZTFlN2VlNTUxYTNhMmFkNTBmMDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhRmlsZVJlZmVy
ZW5jZS5jcHAKQEAgLTk1LDE4ICs5NSwxOCBAQCB2b2lkIEJsb2JEYXRhRmlsZVJlZmVyZW5jZTo6
c3RhcnRUcmFja2luZ01vZGlmaWNhdGlvbnMoKQogI2VuZGlmCiAKICAgICAvLyBGSVhNRTogU29t
ZSBwbGF0Zm9ybXMgcHJvdmlkZSBiZXR0ZXIgd2F5cyB0byBsaXN0ZW4gZm9yIGZpbGUgc3lzdGVt
IG9iamVjdCBjaGFuZ2VzLCBjb25zaWRlciB1c2luZyB0aGVzZS4KLSAgICBGaWxlTWV0YWRhdGEg
bWV0YWRhdGE7Ci0gICAgaWYgKCFnZXRGaWxlTWV0YWRhdGEobV9wYXRoLCBtZXRhZGF0YSwgU2hv
dWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSkKKyAgICBhdXRvIG1ldGFkYXRhID0gZ2V0Rmls
ZU1ldGFkYXRhKG1fcGF0aCwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKTsKKyAgICBp
ZiAoIW1ldGFkYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2V4cGVjdGVkTW9kaWZpY2F0
aW9uVGltZSA9IG1ldGFkYXRhLm1vZGlmaWNhdGlvblRpbWU7CisgICAgbV9leHBlY3RlZE1vZGlm
aWNhdGlvblRpbWUgPSBtZXRhZGF0YS52YWx1ZSgpLm1vZGlmaWNhdGlvblRpbWU7CiAKICNpZiBF
TkFCTEUoRklMRV9SRVBMQUNFTUVOVCkKICAgICBpZiAobV9yZXBsYWNlbWVudFNob3VsZEJlR2Vu
ZXJhdGVkKQogICAgICAgICByZXR1cm47CiAjZW5kaWYKIAotICAgIG1fc2l6ZSA9IG1ldGFkYXRh
Lmxlbmd0aDsKKyAgICBtX3NpemUgPSBtZXRhZGF0YS52YWx1ZSgpLmxlbmd0aDsKIH0KIAogdm9p
ZCBCbG9iRGF0YUZpbGVSZWZlcmVuY2U6OnByZXBhcmVGb3JGaWxlQWNjZXNzKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Jsb2JEYXRhRmlsZVJlZmVy
ZW5jZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Jsb2JEYXRh
RmlsZVJlZmVyZW5jZU1hYy5tbQppbmRleCA4ZGFjZTdhN2UwMjZhN2JkMjViOWUzYzI4NzE5OGFm
YWI3YzBiNjM1Li4yYjY3MWQ4M2ZiYWJiZTA3YTQyMTgyN2ZlNjhhY2M5OGIyNjM5MGQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9CbG9iRGF0YUZpbGVS
ZWZlcmVuY2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMv
QmxvYkRhdGFGaWxlUmVmZXJlbmNlTWFjLm1tCkBAIC03OSw5ICs3OSw4IEBAIHZvaWQgQmxvYkRh
dGFGaWxlUmVmZXJlbmNlOjpnZW5lcmF0ZVJlcGxhY2VtZW50RmlsZSgpCiAKICAgICBtX3JlcGxh
Y2VtZW50U2hvdWxkQmVHZW5lcmF0ZWQgPSBmYWxzZTsKICAgICBpZiAoIW1fcmVwbGFjZW1lbnRQ
YXRoLmlzTnVsbCgpKSB7Ci0gICAgICAgIEZpbGVNZXRhZGF0YSBtZXRhZGF0YTsKLSAgICAgICAg
aWYgKGdldEZpbGVNZXRhZGF0YShtX3JlcGxhY2VtZW50UGF0aCwgbWV0YWRhdGEsIFNob3VsZEZv
bGxvd1N5bWJvbGljTGlua3M6OlllcykpCi0gICAgICAgICAgICBtX3NpemUgPSBtZXRhZGF0YS5s
ZW5ndGg7CisgICAgICAgIGlmIChhdXRvIG1ldGFkYXRhID0gZ2V0RmlsZU1ldGFkYXRhKG1fcmVw
bGFjZW1lbnRQYXRoLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMpKQorICAgICAgICAg
ICAgbV9zaXplID0gbWV0YWRhdGEudmFsdWUoKS5sZW5ndGg7CiAgICAgfQogCiAgICAgcmV2b2tl
RmlsZUFjY2VzcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgv
RmlsZVN5c3RlbVBPU0lYLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVT
eXN0ZW1QT1NJWC5jcHAKaW5kZXggZjRhYzFkMDdlNzg5MDVjNDc1NDBkMTFiZDgwNjk4ZDNjMDM5
N2Y5MS4uNzYxMmJkYzMzYmI2MWU2MDNjMjFhZTg3NjVhMTJlNDZkZWFlOWE1MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCkBAIC0y
MzksMjYgKzIzOSwyNSBAQCBib29sIGdldEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgdGltZV90JiByZXN1bHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZ2V0
RmlsZU1ldGFkYXRhKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSwg
U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcyBzaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzKQorc3Rk
OjpvcHRpb25hbDxGaWxlTWV0YWRhdGE+IGdldEZpbGVNZXRhZGF0YShjb25zdCBTdHJpbmcmIHBh
dGgsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3Mgc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcykK
IHsKICAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwog
CiAgICAgaWYgKCFmc1JlcC5kYXRhKCkgfHwgZnNSZXAuZGF0YSgpWzBdID09ICdcMCcpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIHN0
cnVjdCBzdGF0IGZpbGVJbmZvOwotCiAgICAgaWYgKHNob3VsZEZvbGxvd1N5bWJvbGljTGlua3Mg
PT0gU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSB7CiAgICAgICAgIGlmIChzdGF0KGZz
UmVwLmRhdGEoKSwgJmZpbGVJbmZvKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGxz
dGF0KGZzUmVwLmRhdGEoKSwgJmZpbGVJbmZvKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgU3RyaW5nIGZp
bGVuYW1lID0gcGF0aEdldEZpbGVOYW1lKHBhdGgpOwotCisgICAgRmlsZU1ldGFkYXRhIG1ldGFk
YXRhOwogICAgIG1ldGFkYXRhLm1vZGlmaWNhdGlvblRpbWUgPSBmaWxlSW5mby5zdF9tdGltZTsK
KyAgICBTdHJpbmcgZmlsZW5hbWUgPSBwYXRoR2V0RmlsZU5hbWUocGF0aCk7CiAgICAgbWV0YWRh
dGEuaXNIaWRkZW4gPSAhZmlsZW5hbWUuaXNFbXB0eSgpICYmIGZpbGVuYW1lWzBdID09ICcuJzsK
ICAgICBtZXRhZGF0YS5sZW5ndGggPSBmaWxlSW5mby5zdF9zaXplOwogICAgIGlmIChTX0lTRElS
KGZpbGVJbmZvLnN0X21vZGUpKQpAQCAtMjY3LDcgKzI2Niw4IEBAIGJvb2wgZ2V0RmlsZU1ldGFk
YXRhKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSwgU2hvdWxkRm9s
bG93U3ltCiAgICAgICAgIG1ldGFkYXRhLnR5cGUgPSBGaWxlTWV0YWRhdGE6OlR5cGVTeW1ib2xp
Y0xpbms7CiAgICAgZWxzZQogICAgICAgICBtZXRhZGF0YS50eXBlID0gRmlsZU1ldGFkYXRhOjpU
eXBlRmlsZTsKLSAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBtZXRhZGF0YTsKIH0KIAog
Ym9vbCBjcmVhdGVTeW1ib2xpY0xpbmsoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBT
dHJpbmcmIHN5bWJvbGljTGlua1BhdGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
RmlsZVN5c3RlbVdpbi5jcHAKaW5kZXggMzVjZDZjYWEyNDkwNmMxYTExYzBjZDhiZTM3MGE5ZTNl
ZDVlNzkzZC4uNDcwMjNiZDAyYjFhZTg4Y2FmMTJmN2FhMjk1NWZiMTM0OTEzOTA2MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcApAQCAtMTU4LDI3
ICsxNTgsMjkgQEAgc3RhdGljIFN0cmluZyBnZXRGaW5hbFBhdGhOYW1lKGNvbnN0IFN0cmluZyYg
cGF0aCkKICAgICByZXR1cm4gU3RyaW5nOjphZG9wdChXVEZNb3ZlKGJ1ZmZlcikpOwogfQogCi1i
b29sIGdldEZpbGVNZXRhZGF0YShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVNZXRhZGF0YSYgbWV0
YWRhdGEsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3Mgc2hvdWxkRm9sbG93U3ltYm9saWNMaW5r
cykKK3N0ZDo6b3B0aW9uYWw8RmlsZU1ldGFkYXRhPiBnZXRGaWxlTWV0YWRhdGEoY29uc3QgU3Ry
aW5nJiBwYXRoLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzIHNob3VsZEZvbGxvd1N5bWJvbGlj
TGlua3MpCiB7CiAgICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRGF0YTsKICAgICBpZiAoIWdldEZp
bmREYXRhKHBhdGgsIGZpbmREYXRhKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgYm9vbCBpc1N5bWJvbGljTGluayA9IGZpbmREYXRh
LmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9SRVBBUlNFX1BPSU5UICYmIGZpbmRE
YXRhLmR3UmVzZXJ2ZWQwID09IElPX1JFUEFSU0VfVEFHX1NZTUxJTks7CiAgICAgaWYgKGlzU3lt
Ym9saWNMaW5rICYmIHNob3VsZEZvbGxvd1N5bWJvbGljTGlua3MgPT0gU2hvdWxkRm9sbG93U3lt
Ym9saWNMaW5rczo6WWVzKSB7CiAgICAgICAgIFN0cmluZyB0YXJnZXRQYXRoID0gZ2V0RmluYWxQ
YXRoTmFtZShwYXRoKTsKICAgICAgICAgaWYgKHRhcmdldFBhdGguaXNOdWxsKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAg
ICAgICBpZiAoIWdldEZpbmREYXRhKHRhcmdldFBhdGgsIGZpbmREYXRhKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAg
IGlzU3ltYm9saWNMaW5rID0gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKCFnZXRGaWxlU2l6ZUZy
b21GaW5kRGF0YShmaW5kRGF0YSwgbWV0YWRhdGEubGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgdGltZV90IG1vZGlmaWNh
dGlvblRpbWU7CiAgICAgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWVGcm9tRmluZERhdGEoZmluZERh
dGEsIG1vZGlmaWNhdGlvblRpbWUpOworCisgICAgRmlsZU1ldGFkYXRhIG1ldGFkYXRhLAogICAg
IG1ldGFkYXRhLm1vZGlmaWNhdGlvblRpbWUgPSBtb2RpZmljYXRpb25UaW1lOwogICAgIG1ldGFk
YXRhLmlzSGlkZGVuID0gZmluZERhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRF
X0hJRERFTjsKICAgICBpZiAoZmluZERhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklC
VVRFX0RJUkVDVE9SWSkKQEAgLTE4OCw3ICsxOTAsNyBAQCBib29sIGdldEZpbGVNZXRhZGF0YShj
b25zdCBTdHJpbmcmIHBhdGgsIEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEsIFNob3VsZEZvbGxvd1N5
bQogICAgIGVsc2UKICAgICAgICAgbWV0YWRhdGEudHlwZSA9IEZpbGVNZXRhZGF0YTo6VHlwZUZp
bGU7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gbWV0YWRhdGE7CiB9CiAKIGJvb2wg
Y3JlYXRlU3ltYm9saWNMaW5rKGNvbnN0IFN0cmluZyYgdGFyZ2V0UGF0aCwgY29uc3QgU3RyaW5n
JiBzeW1ib2xpY0xpbmtQYXRoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IDI5OTQ0NTdlZmFlODY0OTA0ZTMxOTQxMDhhOWFhNzJhNGRjMmI2NDYu
LmI5NGYyMTdkMjJhNjk3MzcyMWJlMDA5NjhmYzY3NzVmNGYxZTkxZjQgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAx
Ny0wOS0wMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEhhdmUg
Z2V0RmlsZU1ldGFkYXRhKCkgcmV0dXJucyBhIHN0ZDo6b3B0aW9uYWw8RmlsZU1ldGFkYXRhPgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MjkzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpURVNUX0YpOgorCiAyMDE3LTA5LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CiAKICAgICAgICAgV1NMIHNob3VsZCBjaGVjayB1bnJlYWNoYWJsZSBjb2RlIGFuZCBubyBy
ZXR1cm5zCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmls
ZVN5c3RlbS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmlsZVN5c3Rl
bS5jcHAKaW5kZXggOWFhNzZmYzRhMzAwZDNlOGQxZjVhOWE0NTliNDM5NDk1MGVlNmU0ZS4uNzcx
ZjdjYjQ3ZWEwNWY3ZGZhYzQzMDQ4MGRjOGIzZmU1NGI1M2UzOCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9GaWxlU3lzdGVtLmNwcApAQCAtMTI4LDE1ICsxMjgs
MTUgQEAgVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBGaWxlc0hhdmVTYW1lVm9sdW1lKQogCiBURVNU
X0YoRmlsZVN5c3RlbVRlc3QsIEdldEZpbGVNZXRhZGF0YVN5bWxpbmspCiB7Ci0gICAgRmlsZU1l
dGFkYXRhIHN5bWxpbmtNZXRhZGF0YTsKLSAgICBFWFBFQ1RfVFJVRShnZXRGaWxlTWV0YWRhdGEo
dGVtcEZpbGVTeW1saW5rUGF0aCgpLCBzeW1saW5rTWV0YWRhdGEsIFNob3VsZEZvbGxvd1N5bWJv
bGljTGlua3M6Ok5vKSk7Ci0gICAgRVhQRUNUX1RSVUUoc3ltbGlua01ldGFkYXRhLnR5cGUgPT0g
RmlsZU1ldGFkYXRhOjpUeXBlU3ltYm9saWNMaW5rKTsKLSAgICBFWFBFQ1RfRkFMU0Uoc3RhdGlj
X2Nhc3Q8c2l6ZV90PihzeW1saW5rTWV0YWRhdGEubGVuZ3RoKSA9PSBzdHJsZW4oRmlsZVN5c3Rl
bVRlc3REYXRhKSk7Ci0KLSAgICBGaWxlTWV0YWRhdGEgdGFyZ2V0TWV0YWRhdGE7Ci0gICAgRVhQ
RUNUX1RSVUUoZ2V0RmlsZU1ldGFkYXRhKHRlbXBGaWxlU3ltbGlua1BhdGgoKSwgdGFyZ2V0TWV0
YWRhdGEsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOwotICAgIEVYUEVDVF9UUlVF
KHRhcmdldE1ldGFkYXRhLnR5cGUgPT0gRmlsZU1ldGFkYXRhOjpUeXBlRmlsZSk7Ci0gICAgRVhQ
RUNUX0VRKHN0cmxlbihGaWxlU3lzdGVtVGVzdERhdGEpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHRh
cmdldE1ldGFkYXRhLmxlbmd0aCkpOworICAgIGF1dG8gc3ltbGlua01ldGFkYXRhID0gZ2V0Rmls
ZU1ldGFkYXRhKHRlbXBGaWxlU3ltbGlua1BhdGgoKSwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5r
czo6Tm8pOworICAgIEFTU0VSVF9UUlVFKCEhc3ltbGlua01ldGFkYXRhKTsKKyAgICBFWFBFQ1Rf
VFJVRShzeW1saW5rTWV0YWRhdGEudmFsdWUoKS50eXBlID09IEZpbGVNZXRhZGF0YTo6VHlwZVN5
bWJvbGljTGluayk7CisgICAgRVhQRUNUX0ZBTFNFKHN0YXRpY19jYXN0PHNpemVfdD4oc3ltbGlu
a01ldGFkYXRhLnZhbHVlKCkubGVuZ3RoKSA9PSBzdHJsZW4oRmlsZVN5c3RlbVRlc3REYXRhKSk7
CisKKyAgICBhdXRvIHRhcmdldE1ldGFkYXRhID0gZ2V0RmlsZU1ldGFkYXRhKHRlbXBGaWxlU3lt
bGlua1BhdGgoKSwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKTsKKyAgICBBU1NFUlRf
VFJVRSghIXRhcmdldE1ldGFkYXRhKTsKKyAgICBFWFBFQ1RfVFJVRSh0YXJnZXRNZXRhZGF0YS52
YWx1ZSgpLnR5cGUgPT0gRmlsZU1ldGFkYXRhOjpUeXBlRmlsZSk7CisgICAgRVhQRUNUX0VRKHN0
cmxlbihGaWxlU3lzdGVtVGVzdERhdGEpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHRhcmdldE1ldGFk
YXRhLnZhbHVlKCkubGVuZ3RoKSk7CiB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319762</attachid>
            <date>2017-09-02 23:18:57 -0700</date>
            <delta_ts>2017-09-03 13:25:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176293-20170902231855.patch</filename>
            <type>text/plain</type>
            <size>17187</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGYxMmU3N2U0MWE4YjMy
YzFjOGY5YmUzMjU4NjE4MmVhODJmMzFiMS4uNGNjMzFiNDcxOGMzYmIwYWU2MDQ4NDdiMDVhM2Yx
Zjk1MTI2YjAyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE3LTA5LTAyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBnZXRGaWxlTWV0YWRh
dGEoKSByZXR1cm5zIGEgc3RkOjpvcHRpb25hbDxGaWxlTWV0YWRhdGE+CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYyOTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIYXZlIGdldEZpbGVNZXRhZGF0YSgp
IHJldHVybnMgYSBzdGQ6Om9wdGlvbmFsPEZpbGVNZXRhZGF0YT4gaW5zdGVhZCBvZgorICAgICAg
ICB1c2luZyBhbiBvdXQgcGFyYW1ldGVyIGZvciB0aGUgbWV0YWRhdGEuCisKKyAgICAgICAgKiBN
b2R1bGVzL2VudHJpZXNhcGkvRE9NRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjps
aXN0RGlyZWN0b3J5V2l0aE1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnZhbGlkYXRlUGF0
aElzRXhwZWN0ZWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZpbGVTeXN0ZW06OmdldEVu
dHJ5KToKKyAgICAgICAgKiBodG1sL0ZpbGVMaXN0Q3JlYXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjphcHBlbmREaXJlY3RvcnlGaWxlcyk6CisgICAgICAgICogcGxhdGZvcm0vRmlsZVN5c3Rl
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaWxlSXNEaXJlY3RvcnkpOgorICAgICAgICAqIHBs
YXRmb3JtL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL0ZpbGVTeXN0ZW1H
bGliLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEZpbGVNZXRhZGF0YSk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YUZpbGVSZWZlcmVuY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QmxvYkRhdGFGaWxlUmVmZXJlbmNlOjpzdGFydFRyYWNraW5nTW9kaWZpY2F0aW9ucyk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvQmxvYkRhdGFGaWxlUmVmZXJlbmNlTWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6QmxvYkRhdGFGaWxlUmVmZXJlbmNlOjpnZW5lcmF0ZVJl
cGxhY2VtZW50RmlsZSk6CisgICAgICAgICogcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lY
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEZpbGVNZXRhZGF0YSk6CisgICAgICAgICogcGxh
dGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RmlsZU1l
dGFkYXRhKToKKwogMjAxNy0wOS0wMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIERPTU1hdHJpeC9ET01NYXRyaXhSZWFkT25seSB2YWxpZGF0aW9uIGlzIGluY29ycmVj
dCBmb3IgTmFOIHZhbHVlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRy
aWVzYXBpL0RPTUZpbGVTeXN0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVz
YXBpL0RPTUZpbGVTeXN0ZW0uY3BwCmluZGV4IGY4YjQ1NjRhOTY1NzQ4OTZmNmJiMzcxZTdmM2Q2
NTNjZDIzNTQ5MTcuLjQ0YjZiOWEyMzAwZWM5MWJjMzFlNDgwNDZlYjE0NzlhNzdjMTcxNGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9ET01GaWxlU3lzdGVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRE9NRmlsZVN5c3Rl
bS5jcHAKQEAgLTU1LDEwICs1NSwxMCBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPExpc3Rl
ZENoaWxkPj4gbGlzdERpcmVjdG9yeVdpdGhNZXRhZGF0YShjb25zdCBTdHJpbmcmCiAgICAgVmVj
dG9yPExpc3RlZENoaWxkPiBsaXN0ZWRDaGlsZHJlbjsKICAgICBsaXN0ZWRDaGlsZHJlbi5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGNoaWxkUGF0aHMuc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIGNo
aWxkUGF0aCA6IGNoaWxkUGF0aHMpIHsKLSAgICAgICAgRmlsZU1ldGFkYXRhIG1ldGFkYXRhOwot
ICAgICAgICBpZiAoIWdldEZpbGVNZXRhZGF0YShjaGlsZFBhdGgsIG1ldGFkYXRhLCBTaG91bGRG
b2xsb3dTeW1ib2xpY0xpbmtzOjpObykpCisgICAgICAgIGF1dG8gbWV0YWRhdGEgPSBnZXRGaWxl
TWV0YWRhdGEoY2hpbGRQYXRoLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObyk7CisgICAg
ICAgIGlmICghbWV0YWRhdGEpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbGlzdGVk
Q2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKExpc3RlZENoaWxkIHsgcGF0aEdldEZpbGVOYW1lKGNo
aWxkUGF0aCksIG1ldGFkYXRhLnR5cGUgfSk7CisgICAgICAgIGxpc3RlZENoaWxkcmVuLnVuY2hl
Y2tlZEFwcGVuZChMaXN0ZWRDaGlsZCB7IHBhdGhHZXRGaWxlTmFtZShjaGlsZFBhdGgpLCBtZXRh
ZGF0YS52YWx1ZSgpLnR5cGUgfSk7CiAgICAgfQogICAgIHJldHVybiBXVEZNb3ZlKGxpc3RlZENo
aWxkcmVuKTsKIH0KQEAgLTE2MywxMSArMTYzLDExIEBAIHN0YXRpYyBFeGNlcHRpb25PcjxTdHJp
bmc+IHZhbGlkYXRlUGF0aElzRXhwZWN0ZWRUeXBlKGNvbnN0IFN0cmluZyYgZnVsbFBhdGgsIFN0
CiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKLSAgICBGaWxlTWV0YWRhdGEgbWV0
YWRhdGE7Ci0gICAgaWYgKCFnZXRGaWxlTWV0YWRhdGEoZnVsbFBhdGgsIG1ldGFkYXRhLCBTaG91
bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpCisgICAgYXV0byBtZXRhZGF0YSA9IGdldEZpbGVN
ZXRhZGF0YShmdWxsUGF0aCwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pOworICAgIGlm
ICghbWV0YWRhdGEpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVycm9yLCBB
U0NJSUxpdGVyYWwoIlBhdGggZG9lcyBub3QgZXhpc3QiKSB9OwogCi0gICAgaWYgKG1ldGFkYXRh
LnR5cGUgIT0gZXhwZWN0ZWRUeXBlKQorICAgIGlmIChtZXRhZGF0YS52YWx1ZSgpLnR5cGUgIT0g
ZXhwZWN0ZWRUeXBlKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZU1pc21hdGNoRXJy
b3IsICJFbnRyeSBhdCBwYXRoIGRvZXMgbm90IGhhdmUgZXhwZWN0ZWQgdHlwZSIgfTsKIAogICAg
IHJldHVybiBXVEZNb3ZlKHZpcnR1YWxQYXRoKTsKQEAgLTI5Nyw4ICsyOTcsNyBAQCB2b2lkIERP
TUZpbGVTeXN0ZW06OmdldEVudHJ5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEZp
bGVTeXN0ZW1EaXJlY3RvcgogICAgIH0KIAogICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbdGhp
cywgY29udGV4dCA9IG1ha2VSZWYoY29udGV4dCksIGZ1bGxQYXRoID0gY3Jvc3NUaHJlYWRDb3B5
KGZ1bGxQYXRoKSwgcmVzb2x2ZWRWaXJ0dWFsUGF0aCA9IGNyb3NzVGhyZWFkQ29weShyZXNvbHZl
ZFZpcnR1YWxQYXRoKSwgY29tcGxldGlvbkNhbGxiYWNrID0gV1RGTW92ZShjb21wbGV0aW9uQ2Fs
bGJhY2spXSgpIG11dGFibGUgewotICAgICAgICBGaWxlTWV0YWRhdGEgbWV0YWRhdGE7Ci0gICAg
ICAgIGdldEZpbGVNZXRhZGF0YShmdWxsUGF0aCwgbWV0YWRhdGEsIFNob3VsZEZvbGxvd1N5bWJv
bGljTGlua3M6Ok5vKTsKKyAgICAgICAgYXV0byBtZXRhZGF0YSA9IGdldEZpbGVNZXRhZGF0YShm
dWxsUGF0aCwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pLnZhbHVlX29yKEZpbGVNZXRh
ZGF0YSB7IH0pOwogICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBjb250ZXh0ID0gV1RG
TW92ZShjb250ZXh0KSwgcmVzb2x2ZWRWaXJ0dWFsUGF0aCA9IGNyb3NzVGhyZWFkQ29weShyZXNv
bHZlZFZpcnR1YWxQYXRoKSwgZW50cnlUeXBlID0gbWV0YWRhdGEudHlwZSwgY29tcGxldGlvbkNh
bGxiYWNrID0gV1RGTW92ZShjb21wbGV0aW9uQ2FsbGJhY2spXSgpIG11dGFibGUgewogICAgICAg
ICAgICAgc3dpdGNoIChlbnRyeVR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgRmlsZU1ldGFkYXRh
OjpUeXBlRGlyZWN0b3J5OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlTGlz
dENyZWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlTGlzdENyZWF0b3IuY3BwCmlu
ZGV4IDQxOTJjNjNkZjE1OWNhMzNmNDcwY2EwZGVkMTI5ODM2MTVjODg2MDMuLmI3YTk4OWEwYzlj
OTAxNGM2NmQ4MzZiNjhkNTZmOWM3MmJiYzQ0MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvRmlsZUxpc3RDcmVhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVM
aXN0Q3JlYXRvci5jcHAKQEAgLTQyLDE3ICs0MiwxNyBAQCBGaWxlTGlzdENyZWF0b3I6On5GaWxl
TGlzdENyZWF0b3IoKQogc3RhdGljIHZvaWQgYXBwZW5kRGlyZWN0b3J5RmlsZXMoY29uc3QgU3Ry
aW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBWZWN0b3I8UmVmUHRy
PEZpbGU+PiYgZmlsZU9iamVjdHMpCiB7CiAgICAgZm9yIChhdXRvJiBjaGlsZFBhdGggOiBsaXN0
RGlyZWN0b3J5KGRpcmVjdG9yeSwgIioiKSkgewotICAgICAgICBGaWxlTWV0YWRhdGEgbWV0YWRh
dGE7Ci0gICAgICAgIGlmICghZ2V0RmlsZU1ldGFkYXRhKGNoaWxkUGF0aCwgbWV0YWRhdGEsIFNo
b3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSkKKyAgICAgICAgYXV0byBtZXRhZGF0YSA9IGdl
dEZpbGVNZXRhZGF0YShjaGlsZFBhdGgsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKTsK
KyAgICAgICAgaWYgKCFtZXRhZGF0YSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IGlmIChtZXRhZGF0YS5pc0hpZGRlbikKKyAgICAgICAgaWYgKG1ldGFkYXRhLnZhbHVlKCkuaXNI
aWRkZW4pCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBTdHJpbmcgY2hpbGRSZWxh
dGl2ZVBhdGggPSByZWxhdGl2ZVBhdGggKyAiLyIgKyBwYXRoR2V0RmlsZU5hbWUoY2hpbGRQYXRo
KTsKLSAgICAgICAgaWYgKG1ldGFkYXRhLnR5cGUgPT0gRmlsZU1ldGFkYXRhOjpUeXBlRGlyZWN0
b3J5KQorICAgICAgICBpZiAobWV0YWRhdGEudmFsdWUoKS50eXBlID09IEZpbGVNZXRhZGF0YTo6
VHlwZURpcmVjdG9yeSkKICAgICAgICAgICAgIGFwcGVuZERpcmVjdG9yeUZpbGVzKGNoaWxkUGF0
aCwgY2hpbGRSZWxhdGl2ZVBhdGgsIGZpbGVPYmplY3RzKTsKLSAgICAgICAgZWxzZSBpZiAobWV0
YWRhdGEudHlwZSA9PSBGaWxlTWV0YWRhdGE6OlR5cGVGaWxlKQorICAgICAgICBlbHNlIGlmICht
ZXRhZGF0YS52YWx1ZSgpLnR5cGUgPT0gRmlsZU1ldGFkYXRhOjpUeXBlRmlsZSkKICAgICAgICAg
ICAgIGZpbGVPYmplY3RzLmFwcGVuZChGaWxlOjpjcmVhdGVXaXRoUmVsYXRpdmVQYXRoKGNoaWxk
UGF0aCwgY2hpbGRSZWxhdGl2ZVBhdGgpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0ZpbGVTeXN0ZW0uY3BwCmluZGV4IGQ1N2EwYmQ3ZTIyZDY4NjYzYTRmYWNhYjBmYzA5YTQ3ZjQ0
MjAyNDkuLmJiNzE0OTI1Y2MwZTg1OGE0ZTY1OGVmNDA4N2IwZDU3OTk5ZGViYzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwCkBAIC0zNTMsMTAgKzM1MywxMCBAQCB2b2lk
IHVubG9ja0FuZENsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlKQogCiBib29sIGZp
bGVJc0RpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlu
a3Mgc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcykKIHsKLSAgICBGaWxlTWV0YWRhdGEgbWV0YWRh
dGE7Ci0gICAgaWYgKCFnZXRGaWxlTWV0YWRhdGEocGF0aCwgbWV0YWRhdGEsIHNob3VsZEZvbGxv
d1N5bWJvbGljTGlua3MpKQorICAgIGF1dG8gbWV0YWRhdGEgPSBnZXRGaWxlTWV0YWRhdGEocGF0
aCwgc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcyk7CisgICAgaWYgKCFtZXRhZGF0YSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtZXRhZGF0YS50eXBlID09IEZpbGVNZXRhZGF0
YTo6VHlwZURpcmVjdG9yeTsKKyAgICByZXR1cm4gbWV0YWRhdGEudmFsdWUoKS50eXBlID09IEZp
bGVNZXRhZGF0YTo6VHlwZURpcmVjdG9yeTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCmluZGV4IDE1OWYxY2JkNWM5YTdkMDc0MTZm
ZWI0ODgzZjFkOTQ3NGM4OTA2YmMuLjRhMTQzOTBmZDZhODQwZWIxYTViNWY5Mjk4MTU0N2JhZTll
MzM4NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKQEAgLTEwMCw3ICsxMDAs
NyBAQCBXRUJDT1JFX0VYUE9SVCBib29sIGdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYsIGxvbmcg
bG9uZyYgcmVzdWx0KTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0RmlsZVNpemUoUGxhdGZvcm1G
aWxlSGFuZGxlLCBsb25nIGxvbmcmIHJlc3VsdCk7CiBXRUJDT1JFX0VYUE9SVCBib29sIGdldEZp
bGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYsIHRpbWVfdCYgcmVzdWx0KTsKIFdFQkNP
UkVfRVhQT1JUIGJvb2wgZ2V0RmlsZUNyZWF0aW9uVGltZShjb25zdCBTdHJpbmcmLCB0aW1lX3Qm
IHJlc3VsdCk7IC8vIE5vdCBhbGwgcGxhdGZvcm1zIHN0b3JlIGZpbGUgY3JlYXRpb24gdGltZS4K
LVdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0RmlsZU1ldGFkYXRhKGNvbnN0IFN0cmluZyYsIEZpbGVN
ZXRhZGF0YSYsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3MpOworV0VCQ09SRV9FWFBPUlQgc3Rk
OjpvcHRpb25hbDxGaWxlTWV0YWRhdGE+IGdldEZpbGVNZXRhZGF0YShjb25zdCBTdHJpbmcmLCBT
aG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzKTsKIGJvb2wgZmlsZUlzRGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3MpOwogV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmlu
ZyYgY29tcG9uZW50KTsKIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnRzKGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGNvbXBvbmVudHMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcAppbmRleCA3N2IwNTU5
YjI5NzQzOWQwNjIyODg4ODRiNjlkOTI4NmNiY2I4MjE3Li4yNGFhMDU5NTlmNjI1YjgwNmRmMDgw
OGVkZjA2NWFmNWFlZTczYWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
bGliL0ZpbGVTeXN0ZW1HbGliLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGli
L0ZpbGVTeXN0ZW1HbGliLmNwcApAQCAtMTY0LDE4ICsxNjQsMTggQEAgYm9vbCBnZXRGaWxlTW9k
aWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgsIHRpbWVfdCYgbW9kaWZpZWRUaW1lKQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGdldEZpbGVNZXRhZGF0YShjb25zdCBTdHJpbmcm
IHBhdGgsIEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3Mg
c2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcykKK3N0ZDo6b3B0aW9uYWw8RmlsZU1ldGFkYXRhPiBn
ZXRGaWxlTWV0YWRhdGEoY29uc3QgU3RyaW5nJiBwYXRoLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xp
bmtzIHNob3VsZEZvbGxvd1N5bWJvbGljTGlua3MpCiB7CiAgICAgR1N0YXRCdWYgc3RhdFJlc3Vs
dDsKLQogICAgIGlmIChzaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzID09IFNob3VsZEZvbGxvd1N5
bWJvbGljTGlua3M6OlllcykgewogICAgICAgICBpZiAoIWdldEZpbGVTdGF0KHBhdGgsICZzdGF0
UmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFnZXRGaWxlTFN0YXQocGF0
aCwgJnN0YXRSZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9CiAKKyAgICBGaWxlTWV0YWRhdGEgbWV0YWRhdGE7
CiAgICAgU3RyaW5nIGZpbGVuYW1lID0gcGF0aEdldEZpbGVOYW1lKHBhdGgpOwogICAgIG1ldGFk
YXRhLmlzSGlkZGVuID0gIWZpbGVuYW1lLmlzRW1wdHkoKSAmJiBmaWxlbmFtZVswXSA9PSAnLic7
CiAgICAgbWV0YWRhdGEubW9kaWZpY2F0aW9uVGltZSA9IHN0YXRSZXN1bHQuc3RfbXRpbWU7CkBA
IC0xODYsNyArMTg2LDcgQEAgYm9vbCBnZXRGaWxlTWV0YWRhdGEoY29uc3QgU3RyaW5nJiBwYXRo
LCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhLCBTaG91bGRGb2xsb3dTeW0KICAgICAgICAgbWV0YWRh
dGEudHlwZSA9IEZpbGVNZXRhZGF0YTo6VHlwZVN5bWJvbGljTGluazsKICAgICBlbHNlCiAgICAg
ICAgIG1ldGFkYXRhLnR5cGUgPSBGaWxlTWV0YWRhdGE6OlR5cGVGaWxlOwotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBtZXRhZGF0YTsKIH0KIAogU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YUZpbGVSZWZl
cmVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YUZpbGVS
ZWZlcmVuY2UuY3BwCmluZGV4IDZkYzZkNjRhZTg3MTg1ZDBmMWNkMWVhODc3NjgwOGRhM2M2NTVk
N2YuLmEyZWM1MmJhYzFhZWRmZDVkYzJkZTFlN2VlNTUxYTNhMmFkNTBmMDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhRmlsZVJlZmVy
ZW5jZS5jcHAKQEAgLTk1LDE4ICs5NSwxOCBAQCB2b2lkIEJsb2JEYXRhRmlsZVJlZmVyZW5jZTo6
c3RhcnRUcmFja2luZ01vZGlmaWNhdGlvbnMoKQogI2VuZGlmCiAKICAgICAvLyBGSVhNRTogU29t
ZSBwbGF0Zm9ybXMgcHJvdmlkZSBiZXR0ZXIgd2F5cyB0byBsaXN0ZW4gZm9yIGZpbGUgc3lzdGVt
IG9iamVjdCBjaGFuZ2VzLCBjb25zaWRlciB1c2luZyB0aGVzZS4KLSAgICBGaWxlTWV0YWRhdGEg
bWV0YWRhdGE7Ci0gICAgaWYgKCFnZXRGaWxlTWV0YWRhdGEobV9wYXRoLCBtZXRhZGF0YSwgU2hv
dWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSkKKyAgICBhdXRvIG1ldGFkYXRhID0gZ2V0Rmls
ZU1ldGFkYXRhKG1fcGF0aCwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKTsKKyAgICBp
ZiAoIW1ldGFkYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2V4cGVjdGVkTW9kaWZpY2F0
aW9uVGltZSA9IG1ldGFkYXRhLm1vZGlmaWNhdGlvblRpbWU7CisgICAgbV9leHBlY3RlZE1vZGlm
aWNhdGlvblRpbWUgPSBtZXRhZGF0YS52YWx1ZSgpLm1vZGlmaWNhdGlvblRpbWU7CiAKICNpZiBF
TkFCTEUoRklMRV9SRVBMQUNFTUVOVCkKICAgICBpZiAobV9yZXBsYWNlbWVudFNob3VsZEJlR2Vu
ZXJhdGVkKQogICAgICAgICByZXR1cm47CiAjZW5kaWYKIAotICAgIG1fc2l6ZSA9IG1ldGFkYXRh
Lmxlbmd0aDsKKyAgICBtX3NpemUgPSBtZXRhZGF0YS52YWx1ZSgpLmxlbmd0aDsKIH0KIAogdm9p
ZCBCbG9iRGF0YUZpbGVSZWZlcmVuY2U6OnByZXBhcmVGb3JGaWxlQWNjZXNzKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Jsb2JEYXRhRmlsZVJlZmVy
ZW5jZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Jsb2JEYXRh
RmlsZVJlZmVyZW5jZU1hYy5tbQppbmRleCA4ZGFjZTdhN2UwMjZhN2JkMjViOWUzYzI4NzE5OGFm
YWI3YzBiNjM1Li4yYjY3MWQ4M2ZiYWJiZTA3YTQyMTgyN2ZlNjhhY2M5OGIyNjM5MGQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9CbG9iRGF0YUZpbGVS
ZWZlcmVuY2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMv
QmxvYkRhdGFGaWxlUmVmZXJlbmNlTWFjLm1tCkBAIC03OSw5ICs3OSw4IEBAIHZvaWQgQmxvYkRh
dGFGaWxlUmVmZXJlbmNlOjpnZW5lcmF0ZVJlcGxhY2VtZW50RmlsZSgpCiAKICAgICBtX3JlcGxh
Y2VtZW50U2hvdWxkQmVHZW5lcmF0ZWQgPSBmYWxzZTsKICAgICBpZiAoIW1fcmVwbGFjZW1lbnRQ
YXRoLmlzTnVsbCgpKSB7Ci0gICAgICAgIEZpbGVNZXRhZGF0YSBtZXRhZGF0YTsKLSAgICAgICAg
aWYgKGdldEZpbGVNZXRhZGF0YShtX3JlcGxhY2VtZW50UGF0aCwgbWV0YWRhdGEsIFNob3VsZEZv
bGxvd1N5bWJvbGljTGlua3M6OlllcykpCi0gICAgICAgICAgICBtX3NpemUgPSBtZXRhZGF0YS5s
ZW5ndGg7CisgICAgICAgIGlmIChhdXRvIG1ldGFkYXRhID0gZ2V0RmlsZU1ldGFkYXRhKG1fcmVw
bGFjZW1lbnRQYXRoLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMpKQorICAgICAgICAg
ICAgbV9zaXplID0gbWV0YWRhdGEudmFsdWUoKS5sZW5ndGg7CiAgICAgfQogCiAgICAgcmV2b2tl
RmlsZUFjY2VzcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgv
RmlsZVN5c3RlbVBPU0lYLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVT
eXN0ZW1QT1NJWC5jcHAKaW5kZXggZjRhYzFkMDdlNzg5MDVjNDc1NDBkMTFiZDgwNjk4ZDNjMDM5
N2Y5MS4uNzYxMmJkYzMzYmI2MWU2MDNjMjFhZTg3NjVhMTJlNDZkZWFlOWE1MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCkBAIC0y
MzksMjYgKzIzOSwyNSBAQCBib29sIGdldEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgdGltZV90JiByZXN1bHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZ2V0
RmlsZU1ldGFkYXRhKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSwg
U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcyBzaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzKQorc3Rk
OjpvcHRpb25hbDxGaWxlTWV0YWRhdGE+IGdldEZpbGVNZXRhZGF0YShjb25zdCBTdHJpbmcmIHBh
dGgsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3Mgc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcykK
IHsKICAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwog
CiAgICAgaWYgKCFmc1JlcC5kYXRhKCkgfHwgZnNSZXAuZGF0YSgpWzBdID09ICdcMCcpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIHN0
cnVjdCBzdGF0IGZpbGVJbmZvOwotCiAgICAgaWYgKHNob3VsZEZvbGxvd1N5bWJvbGljTGlua3Mg
PT0gU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSB7CiAgICAgICAgIGlmIChzdGF0KGZz
UmVwLmRhdGEoKSwgJmZpbGVJbmZvKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGxz
dGF0KGZzUmVwLmRhdGEoKSwgJmZpbGVJbmZvKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgU3RyaW5nIGZp
bGVuYW1lID0gcGF0aEdldEZpbGVOYW1lKHBhdGgpOwotCisgICAgRmlsZU1ldGFkYXRhIG1ldGFk
YXRhOwogICAgIG1ldGFkYXRhLm1vZGlmaWNhdGlvblRpbWUgPSBmaWxlSW5mby5zdF9tdGltZTsK
KyAgICBTdHJpbmcgZmlsZW5hbWUgPSBwYXRoR2V0RmlsZU5hbWUocGF0aCk7CiAgICAgbWV0YWRh
dGEuaXNIaWRkZW4gPSAhZmlsZW5hbWUuaXNFbXB0eSgpICYmIGZpbGVuYW1lWzBdID09ICcuJzsK
ICAgICBtZXRhZGF0YS5sZW5ndGggPSBmaWxlSW5mby5zdF9zaXplOwogICAgIGlmIChTX0lTRElS
KGZpbGVJbmZvLnN0X21vZGUpKQpAQCAtMjY3LDcgKzI2Niw4IEBAIGJvb2wgZ2V0RmlsZU1ldGFk
YXRhKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSwgU2hvdWxkRm9s
bG93U3ltCiAgICAgICAgIG1ldGFkYXRhLnR5cGUgPSBGaWxlTWV0YWRhdGE6OlR5cGVTeW1ib2xp
Y0xpbms7CiAgICAgZWxzZQogICAgICAgICBtZXRhZGF0YS50eXBlID0gRmlsZU1ldGFkYXRhOjpU
eXBlRmlsZTsKLSAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBtZXRhZGF0YTsKIH0KIAog
Ym9vbCBjcmVhdGVTeW1ib2xpY0xpbmsoY29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBT
dHJpbmcmIHN5bWJvbGljTGlua1BhdGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
RmlsZVN5c3RlbVdpbi5jcHAKaW5kZXggMzVjZDZjYWEyNDkwNmMxYTExYzBjZDhiZTM3MGE5ZTNl
ZDVlNzkzZC4uMGUxNzI5NjAzNzc3MzI0MTYzYmQ1NDYzMzY0MjgwMmQyZjE4MWExZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcApAQCAtMTU4LDI3
ICsxNTgsMjkgQEAgc3RhdGljIFN0cmluZyBnZXRGaW5hbFBhdGhOYW1lKGNvbnN0IFN0cmluZyYg
cGF0aCkKICAgICByZXR1cm4gU3RyaW5nOjphZG9wdChXVEZNb3ZlKGJ1ZmZlcikpOwogfQogCi1i
b29sIGdldEZpbGVNZXRhZGF0YShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVNZXRhZGF0YSYgbWV0
YWRhdGEsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3Mgc2hvdWxkRm9sbG93U3ltYm9saWNMaW5r
cykKK3N0ZDo6b3B0aW9uYWw8RmlsZU1ldGFkYXRhPiBnZXRGaWxlTWV0YWRhdGEoY29uc3QgU3Ry
aW5nJiBwYXRoLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzIHNob3VsZEZvbGxvd1N5bWJvbGlj
TGlua3MpCiB7CiAgICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRGF0YTsKICAgICBpZiAoIWdldEZp
bmREYXRhKHBhdGgsIGZpbmREYXRhKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgYm9vbCBpc1N5bWJvbGljTGluayA9IGZpbmREYXRh
LmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9SRVBBUlNFX1BPSU5UICYmIGZpbmRE
YXRhLmR3UmVzZXJ2ZWQwID09IElPX1JFUEFSU0VfVEFHX1NZTUxJTks7CiAgICAgaWYgKGlzU3lt
Ym9saWNMaW5rICYmIHNob3VsZEZvbGxvd1N5bWJvbGljTGlua3MgPT0gU2hvdWxkRm9sbG93U3lt
Ym9saWNMaW5rczo6WWVzKSB7CiAgICAgICAgIFN0cmluZyB0YXJnZXRQYXRoID0gZ2V0RmluYWxQ
YXRoTmFtZShwYXRoKTsKICAgICAgICAgaWYgKHRhcmdldFBhdGguaXNOdWxsKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAg
ICAgICBpZiAoIWdldEZpbmREYXRhKHRhcmdldFBhdGgsIGZpbmREYXRhKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAg
IGlzU3ltYm9saWNMaW5rID0gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKCFnZXRGaWxlU2l6ZUZy
b21GaW5kRGF0YShmaW5kRGF0YSwgbWV0YWRhdGEubGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgdGltZV90IG1vZGlmaWNh
dGlvblRpbWU7CiAgICAgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWVGcm9tRmluZERhdGEoZmluZERh
dGEsIG1vZGlmaWNhdGlvblRpbWUpOworCisgICAgRmlsZU1ldGFkYXRhIG1ldGFkYXRhOwogICAg
IG1ldGFkYXRhLm1vZGlmaWNhdGlvblRpbWUgPSBtb2RpZmljYXRpb25UaW1lOwogICAgIG1ldGFk
YXRhLmlzSGlkZGVuID0gZmluZERhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRF
X0hJRERFTjsKICAgICBpZiAoZmluZERhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklC
VVRFX0RJUkVDVE9SWSkKQEAgLTE4OCw3ICsxOTAsNyBAQCBib29sIGdldEZpbGVNZXRhZGF0YShj
b25zdCBTdHJpbmcmIHBhdGgsIEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEsIFNob3VsZEZvbGxvd1N5
bQogICAgIGVsc2UKICAgICAgICAgbWV0YWRhdGEudHlwZSA9IEZpbGVNZXRhZGF0YTo6VHlwZUZp
bGU7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gbWV0YWRhdGE7CiB9CiAKIGJvb2wg
Y3JlYXRlU3ltYm9saWNMaW5rKGNvbnN0IFN0cmluZyYgdGFyZ2V0UGF0aCwgY29uc3QgU3RyaW5n
JiBzeW1ib2xpY0xpbmtQYXRoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IDI5OTQ0NTdlZmFlODY0OTA0ZTMxOTQxMDhhOWFhNzJhNGRjMmI2NDYu
LmI5NGYyMTdkMjJhNjk3MzcyMWJlMDA5NjhmYzY3NzVmNGYxZTkxZjQgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAx
Ny0wOS0wMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEhhdmUg
Z2V0RmlsZU1ldGFkYXRhKCkgcmV0dXJucyBhIHN0ZDo6b3B0aW9uYWw8RmlsZU1ldGFkYXRhPgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MjkzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpURVNUX0YpOgorCiAyMDE3LTA5LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CiAKICAgICAgICAgV1NMIHNob3VsZCBjaGVjayB1bnJlYWNoYWJsZSBjb2RlIGFuZCBubyBy
ZXR1cm5zCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmls
ZVN5c3RlbS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmlsZVN5c3Rl
bS5jcHAKaW5kZXggOWFhNzZmYzRhMzAwZDNlOGQxZjVhOWE0NTliNDM5NDk1MGVlNmU0ZS4uNzcx
ZjdjYjQ3ZWEwNWY3ZGZhYzQzMDQ4MGRjOGIzZmU1NGI1M2UzOCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9GaWxlU3lzdGVtLmNwcApAQCAtMTI4LDE1ICsxMjgs
MTUgQEAgVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBGaWxlc0hhdmVTYW1lVm9sdW1lKQogCiBURVNU
X0YoRmlsZVN5c3RlbVRlc3QsIEdldEZpbGVNZXRhZGF0YVN5bWxpbmspCiB7Ci0gICAgRmlsZU1l
dGFkYXRhIHN5bWxpbmtNZXRhZGF0YTsKLSAgICBFWFBFQ1RfVFJVRShnZXRGaWxlTWV0YWRhdGEo
dGVtcEZpbGVTeW1saW5rUGF0aCgpLCBzeW1saW5rTWV0YWRhdGEsIFNob3VsZEZvbGxvd1N5bWJv
bGljTGlua3M6Ok5vKSk7Ci0gICAgRVhQRUNUX1RSVUUoc3ltbGlua01ldGFkYXRhLnR5cGUgPT0g
RmlsZU1ldGFkYXRhOjpUeXBlU3ltYm9saWNMaW5rKTsKLSAgICBFWFBFQ1RfRkFMU0Uoc3RhdGlj
X2Nhc3Q8c2l6ZV90PihzeW1saW5rTWV0YWRhdGEubGVuZ3RoKSA9PSBzdHJsZW4oRmlsZVN5c3Rl
bVRlc3REYXRhKSk7Ci0KLSAgICBGaWxlTWV0YWRhdGEgdGFyZ2V0TWV0YWRhdGE7Ci0gICAgRVhQ
RUNUX1RSVUUoZ2V0RmlsZU1ldGFkYXRhKHRlbXBGaWxlU3ltbGlua1BhdGgoKSwgdGFyZ2V0TWV0
YWRhdGEsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOwotICAgIEVYUEVDVF9UUlVF
KHRhcmdldE1ldGFkYXRhLnR5cGUgPT0gRmlsZU1ldGFkYXRhOjpUeXBlRmlsZSk7Ci0gICAgRVhQ
RUNUX0VRKHN0cmxlbihGaWxlU3lzdGVtVGVzdERhdGEpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHRh
cmdldE1ldGFkYXRhLmxlbmd0aCkpOworICAgIGF1dG8gc3ltbGlua01ldGFkYXRhID0gZ2V0Rmls
ZU1ldGFkYXRhKHRlbXBGaWxlU3ltbGlua1BhdGgoKSwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5r
czo6Tm8pOworICAgIEFTU0VSVF9UUlVFKCEhc3ltbGlua01ldGFkYXRhKTsKKyAgICBFWFBFQ1Rf
VFJVRShzeW1saW5rTWV0YWRhdGEudmFsdWUoKS50eXBlID09IEZpbGVNZXRhZGF0YTo6VHlwZVN5
bWJvbGljTGluayk7CisgICAgRVhQRUNUX0ZBTFNFKHN0YXRpY19jYXN0PHNpemVfdD4oc3ltbGlu
a01ldGFkYXRhLnZhbHVlKCkubGVuZ3RoKSA9PSBzdHJsZW4oRmlsZVN5c3RlbVRlc3REYXRhKSk7
CisKKyAgICBhdXRvIHRhcmdldE1ldGFkYXRhID0gZ2V0RmlsZU1ldGFkYXRhKHRlbXBGaWxlU3lt
bGlua1BhdGgoKSwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKTsKKyAgICBBU1NFUlRf
VFJVRSghIXRhcmdldE1ldGFkYXRhKTsKKyAgICBFWFBFQ1RfVFJVRSh0YXJnZXRNZXRhZGF0YS52
YWx1ZSgpLnR5cGUgPT0gRmlsZU1ldGFkYXRhOjpUeXBlRmlsZSk7CisgICAgRVhQRUNUX0VRKHN0
cmxlbihGaWxlU3lzdGVtVGVzdERhdGEpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHRhcmdldE1ldGFk
YXRhLnZhbHVlKCkubGVuZ3RoKSk7CiB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319787</attachid>
            <date>2017-09-03 10:39:55 -0700</date>
            <delta_ts>2017-09-03 13:25:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176293-20170903103954.patch</filename>
            <type>text/plain</type>
            <size>17184</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGYxMmU3N2U0MWE4YjMy
YzFjOGY5YmUzMjU4NjE4MmVhODJmMzFiMS4uNTYwYTkwMTBjMjI0MzQ2NzI5MjIxODIzODU4NjA5
NjFkMjViOTVjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE3LTA5LTAyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBnZXRGaWxlTWV0YWRh
dGEoKSByZXR1cm4gYSBzdGQ6Om9wdGlvbmFsPEZpbGVNZXRhZGF0YT4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjI5MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhhdmUgZ2V0RmlsZU1ldGFkYXRhKCkg
cmV0dXJuIGEgc3RkOjpvcHRpb25hbDxGaWxlTWV0YWRhdGE+IGluc3RlYWQgb2YKKyAgICAgICAg
dXNpbmcgYW4gb3V0IHBhcmFtZXRlciBmb3IgdGhlIG1ldGFkYXRhLgorCisgICAgICAgICogTW9k
dWxlcy9lbnRyaWVzYXBpL0RPTUZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlz
dERpcmVjdG9yeVdpdGhNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjp2YWxpZGF0ZVBhdGhJ
c0V4cGVjdGVkVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpET01GaWxlU3lzdGVtOjpnZXRFbnRy
eSk6CisgICAgICAgICogaHRtbC9GaWxlTGlzdENyZWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6YXBwZW5kRGlyZWN0b3J5RmlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVTeXN0ZW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmlsZUlzRGlyZWN0b3J5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9GaWxlU3lzdGVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9GaWxlU3lzdGVtR2xp
Yi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRGaWxlTWV0YWRhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJsb2JEYXRhRmlsZVJlZmVyZW5jZTo6c3RhcnRUcmFja2luZ01vZGlmaWNhdGlvbnMpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL0Jsb2JEYXRhRmlsZVJlZmVyZW5jZU1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JEYXRhRmlsZVJlZmVyZW5jZTo6Z2VuZXJhdGVSZXBs
YWNlbWVudEZpbGUpOgorICAgICAgICAqIHBsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRGaWxlTWV0YWRhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEZpbGVNZXRh
ZGF0YSk6CisKIDIwMTctMDktMDIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBET01NYXRyaXgvRE9NTWF0cml4UmVhZE9ubHkgdmFsaWRhdGlvbiBpcyBpbmNvcnJlY3Qg
Zm9yIE5hTiB2YWx1ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmll
c2FwaS9ET01GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2Fw
aS9ET01GaWxlU3lzdGVtLmNwcAppbmRleCBmOGI0NTY0YTk2NTc0ODk2ZjZiYjM3MWU3ZjNkNjUz
Y2QyMzU0OTE3Li40NGI2YjlhMjMwMGVjOTFiYzMxZTQ4MDQ2ZWIxNDc5YTc3YzE3MTRhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRE9NRmlsZVN5c3RlbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0RPTUZpbGVTeXN0ZW0u
Y3BwCkBAIC01NSwxMCArNTUsMTAgQEAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3RvcjxMaXN0ZWRD
aGlsZD4+IGxpc3REaXJlY3RvcnlXaXRoTWV0YWRhdGEoY29uc3QgU3RyaW5nJgogICAgIFZlY3Rv
cjxMaXN0ZWRDaGlsZD4gbGlzdGVkQ2hpbGRyZW47CiAgICAgbGlzdGVkQ2hpbGRyZW4ucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShjaGlsZFBhdGhzLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiBjaGls
ZFBhdGggOiBjaGlsZFBhdGhzKSB7Ci0gICAgICAgIEZpbGVNZXRhZGF0YSBtZXRhZGF0YTsKLSAg
ICAgICAgaWYgKCFnZXRGaWxlTWV0YWRhdGEoY2hpbGRQYXRoLCBtZXRhZGF0YSwgU2hvdWxkRm9s
bG93U3ltYm9saWNMaW5rczo6Tm8pKQorICAgICAgICBhdXRvIG1ldGFkYXRhID0gZ2V0RmlsZU1l
dGFkYXRhKGNoaWxkUGF0aCwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pOworICAgICAg
ICBpZiAoIW1ldGFkYXRhKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGxpc3RlZENo
aWxkcmVuLnVuY2hlY2tlZEFwcGVuZChMaXN0ZWRDaGlsZCB7IHBhdGhHZXRGaWxlTmFtZShjaGls
ZFBhdGgpLCBtZXRhZGF0YS50eXBlIH0pOworICAgICAgICBsaXN0ZWRDaGlsZHJlbi51bmNoZWNr
ZWRBcHBlbmQoTGlzdGVkQ2hpbGQgeyBwYXRoR2V0RmlsZU5hbWUoY2hpbGRQYXRoKSwgbWV0YWRh
dGEudmFsdWUoKS50eXBlIH0pOwogICAgIH0KICAgICByZXR1cm4gV1RGTW92ZShsaXN0ZWRDaGls
ZHJlbik7CiB9CkBAIC0xNjMsMTEgKzE2MywxMSBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8U3RyaW5n
PiB2YWxpZGF0ZVBhdGhJc0V4cGVjdGVkVHlwZShjb25zdCBTdHJpbmcmIGZ1bGxQYXRoLCBTdAog
ewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi0gICAgRmlsZU1ldGFkYXRhIG1ldGFk
YXRhOwotICAgIGlmICghZ2V0RmlsZU1ldGFkYXRhKGZ1bGxQYXRoLCBtZXRhZGF0YSwgU2hvdWxk
Rm9sbG93U3ltYm9saWNMaW5rczo6Tm8pKQorICAgIGF1dG8gbWV0YWRhdGEgPSBnZXRGaWxlTWV0
YWRhdGEoZnVsbFBhdGgsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKTsKKyAgICBpZiAo
IW1ldGFkYXRhKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciwgQVND
SUlMaXRlcmFsKCJQYXRoIGRvZXMgbm90IGV4aXN0IikgfTsKIAotICAgIGlmIChtZXRhZGF0YS50
eXBlICE9IGV4cGVjdGVkVHlwZSkKKyAgICBpZiAobWV0YWRhdGEudmFsdWUoKS50eXBlICE9IGV4
cGVjdGVkVHlwZSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVNaXNtYXRjaEVycm9y
LCAiRW50cnkgYXQgcGF0aCBkb2VzIG5vdCBoYXZlIGV4cGVjdGVkIHR5cGUiIH07CiAKICAgICBy
ZXR1cm4gV1RGTW92ZSh2aXJ0dWFsUGF0aCk7CkBAIC0yOTcsOCArMjk3LDcgQEAgdm9pZCBET01G
aWxlU3lzdGVtOjpnZXRFbnRyeShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBGaWxl
U3lzdGVtRGlyZWN0b3IKICAgICB9CiAKICAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2goW3RoaXMs
IGNvbnRleHQgPSBtYWtlUmVmKGNvbnRleHQpLCBmdWxsUGF0aCA9IGNyb3NzVGhyZWFkQ29weShm
dWxsUGF0aCksIHJlc29sdmVkVmlydHVhbFBhdGggPSBjcm9zc1RocmVhZENvcHkocmVzb2x2ZWRW
aXJ0dWFsUGF0aCksIGNvbXBsZXRpb25DYWxsYmFjayA9IFdURk1vdmUoY29tcGxldGlvbkNhbGxi
YWNrKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgRmlsZU1ldGFkYXRhIG1ldGFkYXRhOwotICAgICAg
ICBnZXRGaWxlTWV0YWRhdGEoZnVsbFBhdGgsIG1ldGFkYXRhLCBTaG91bGRGb2xsb3dTeW1ib2xp
Y0xpbmtzOjpObyk7CisgICAgICAgIGF1dG8gbWV0YWRhdGEgPSBnZXRGaWxlTWV0YWRhdGEoZnVs
bFBhdGgsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKS52YWx1ZV9vcihGaWxlTWV0YWRh
dGEgeyB9KTsKICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgY29udGV4dCA9IFdURk1v
dmUoY29udGV4dCksIHJlc29sdmVkVmlydHVhbFBhdGggPSBjcm9zc1RocmVhZENvcHkocmVzb2x2
ZWRWaXJ0dWFsUGF0aCksIGVudHJ5VHlwZSA9IG1ldGFkYXRhLnR5cGUsIGNvbXBsZXRpb25DYWxs
YmFjayA9IFdURk1vdmUoY29tcGxldGlvbkNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKICAgICAgICAg
ICAgIHN3aXRjaCAoZW50cnlUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIEZpbGVNZXRhZGF0YTo6
VHlwZURpcmVjdG9yeToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUxpc3RD
cmVhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUxpc3RDcmVhdG9yLmNwcAppbmRl
eCA0MTkyYzYzZGYxNTljYTMzZjQ3MGNhMGRlZDEyOTgzNjE1Yzg4NjAzLi5iN2E5ODlhMGM5Yzkw
MTRjNjZkODM2YjY4ZDU2ZjljNzJiYmM0NDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0ZpbGVMaXN0Q3JlYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlTGlz
dENyZWF0b3IuY3BwCkBAIC00MiwxNyArNDIsMTcgQEAgRmlsZUxpc3RDcmVhdG9yOjp+RmlsZUxp
c3RDcmVhdG9yKCkKIHN0YXRpYyB2b2lkIGFwcGVuZERpcmVjdG9yeUZpbGVzKGNvbnN0IFN0cmlu
ZyYgZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCwgVmVjdG9yPFJlZlB0cjxG
aWxlPj4mIGZpbGVPYmplY3RzKQogewogICAgIGZvciAoYXV0byYgY2hpbGRQYXRoIDogbGlzdERp
cmVjdG9yeShkaXJlY3RvcnksICIqIikpIHsKLSAgICAgICAgRmlsZU1ldGFkYXRhIG1ldGFkYXRh
OwotICAgICAgICBpZiAoIWdldEZpbGVNZXRhZGF0YShjaGlsZFBhdGgsIG1ldGFkYXRhLCBTaG91
bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpCisgICAgICAgIGF1dG8gbWV0YWRhdGEgPSBnZXRG
aWxlTWV0YWRhdGEoY2hpbGRQYXRoLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObyk7Cisg
ICAgICAgIGlmICghbWV0YWRhdGEpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBp
ZiAobWV0YWRhdGEuaXNIaWRkZW4pCisgICAgICAgIGlmIChtZXRhZGF0YS52YWx1ZSgpLmlzSGlk
ZGVuKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgU3RyaW5nIGNoaWxkUmVsYXRp
dmVQYXRoID0gcmVsYXRpdmVQYXRoICsgIi8iICsgcGF0aEdldEZpbGVOYW1lKGNoaWxkUGF0aCk7
Ci0gICAgICAgIGlmIChtZXRhZGF0YS50eXBlID09IEZpbGVNZXRhZGF0YTo6VHlwZURpcmVjdG9y
eSkKKyAgICAgICAgaWYgKG1ldGFkYXRhLnZhbHVlKCkudHlwZSA9PSBGaWxlTWV0YWRhdGE6OlR5
cGVEaXJlY3RvcnkpCiAgICAgICAgICAgICBhcHBlbmREaXJlY3RvcnlGaWxlcyhjaGlsZFBhdGgs
IGNoaWxkUmVsYXRpdmVQYXRoLCBmaWxlT2JqZWN0cyk7Ci0gICAgICAgIGVsc2UgaWYgKG1ldGFk
YXRhLnR5cGUgPT0gRmlsZU1ldGFkYXRhOjpUeXBlRmlsZSkKKyAgICAgICAgZWxzZSBpZiAobWV0
YWRhdGEudmFsdWUoKS50eXBlID09IEZpbGVNZXRhZGF0YTo6VHlwZUZpbGUpCiAgICAgICAgICAg
ICBmaWxlT2JqZWN0cy5hcHBlbmQoRmlsZTo6Y3JlYXRlV2l0aFJlbGF0aXZlUGF0aChjaGlsZFBh
dGgsIGNoaWxkUmVsYXRpdmVQYXRoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9G
aWxlU3lzdGVtLmNwcAppbmRleCBkNTdhMGJkN2UyMmQ2ODY2M2E0ZmFjYWIwZmMwOWE0N2Y0NDIw
MjQ5Li5iYjcxNDkyNWNjMGU4NThhNGU2NThlZjQwODdiMGQ1Nzk5OWRlYmM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcApAQCAtMzUzLDEwICszNTMsMTAgQEAgdm9pZCB1
bmxvY2tBbmRDbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSkKIAogYm9vbCBmaWxl
SXNEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtz
IHNob3VsZEZvbGxvd1N5bWJvbGljTGlua3MpCiB7Ci0gICAgRmlsZU1ldGFkYXRhIG1ldGFkYXRh
OwotICAgIGlmICghZ2V0RmlsZU1ldGFkYXRhKHBhdGgsIG1ldGFkYXRhLCBzaG91bGRGb2xsb3dT
eW1ib2xpY0xpbmtzKSkKKyAgICBhdXRvIG1ldGFkYXRhID0gZ2V0RmlsZU1ldGFkYXRhKHBhdGgs
IHNob3VsZEZvbGxvd1N5bWJvbGljTGlua3MpOworICAgIGlmICghbWV0YWRhdGEpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbWV0YWRhdGEudHlwZSA9PSBGaWxlTWV0YWRhdGE6
OlR5cGVEaXJlY3Rvcnk7CisgICAgcmV0dXJuIG1ldGFkYXRhLnZhbHVlKCkudHlwZSA9PSBGaWxl
TWV0YWRhdGE6OlR5cGVEaXJlY3Rvcnk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAppbmRleCAxNTlmMWNiZDVjOWE3ZDA3NDE2ZmVi
NDg4M2YxZDk0NzRjODkwNmJjLi40YTE0MzkwZmQ2YTg0MGViMWE1YjVmOTI5ODE1NDdiYWU5ZTMz
ODUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCkBAIC0xMDAsNyArMTAwLDcg
QEAgV0VCQ09SRV9FWFBPUlQgYm9vbCBnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmLCBsb25nIGxv
bmcmIHJlc3VsdCk7CiBXRUJDT1JFX0VYUE9SVCBib29sIGdldEZpbGVTaXplKFBsYXRmb3JtRmls
ZUhhbmRsZSwgbG9uZyBsb25nJiByZXN1bHQpOwogV0VCQ09SRV9FWFBPUlQgYm9vbCBnZXRGaWxl
TW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmLCB0aW1lX3QmIHJlc3VsdCk7CiBXRUJDT1JF
X0VYUE9SVCBib29sIGdldEZpbGVDcmVhdGlvblRpbWUoY29uc3QgU3RyaW5nJiwgdGltZV90JiBy
ZXN1bHQpOyAvLyBOb3QgYWxsIHBsYXRmb3JtcyBzdG9yZSBmaWxlIGNyZWF0aW9uIHRpbWUuCi1X
RUJDT1JFX0VYUE9SVCBib29sIGdldEZpbGVNZXRhZGF0YShjb25zdCBTdHJpbmcmLCBGaWxlTWV0
YWRhdGEmLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzKTsKK1dFQkNPUkVfRVhQT1JUIHN0ZDo6
b3B0aW9uYWw8RmlsZU1ldGFkYXRhPiBnZXRGaWxlTWV0YWRhdGEoY29uc3QgU3RyaW5nJiwgU2hv
dWxkRm9sbG93U3ltYm9saWNMaW5rcyk7CiBib29sIGZpbGVJc0RpcmVjdG9yeShjb25zdCBTdHJp
bmcmLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzKTsKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcm
IGNvbXBvbmVudCk7CiBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50cyhjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb21wb25lbnRzKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKaW5kZXggNzdiMDU1OWIy
OTc0MzlkMDYyMjg4ODg0YjY5ZDkyODZjYmNiODIxNy4uMjRhYTA1OTU5ZjYyNWI4MDZkZjA4MDhl
ZGYwNjVhZjVhZWU3M2FlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xp
Yi9GaWxlU3lzdGVtR2xpYi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9G
aWxlU3lzdGVtR2xpYi5jcHAKQEAgLTE2NCwxOCArMTY0LDE4IEBAIGJvb2wgZ2V0RmlsZU1vZGlm
aWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBwYXRoLCB0aW1lX3QmIG1vZGlmaWVkVGltZSkKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBnZXRGaWxlTWV0YWRhdGEoY29uc3QgU3RyaW5nJiBw
YXRoLCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzIHNo
b3VsZEZvbGxvd1N5bWJvbGljTGlua3MpCitzdGQ6Om9wdGlvbmFsPEZpbGVNZXRhZGF0YT4gZ2V0
RmlsZU1ldGFkYXRhKGNvbnN0IFN0cmluZyYgcGF0aCwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5r
cyBzaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzKQogewogICAgIEdTdGF0QnVmIHN0YXRSZXN1bHQ7
Ci0KICAgICBpZiAoc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcyA9PSBTaG91bGRGb2xsb3dTeW1i
b2xpY0xpbmtzOjpZZXMpIHsKICAgICAgICAgaWYgKCFnZXRGaWxlU3RhdChwYXRoLCAmc3RhdFJl
c3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghZ2V0RmlsZUxTdGF0KHBhdGgs
ICZzdGF0UmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQogCisgICAgRmlsZU1ldGFkYXRhIG1ldGFkYXRhOwog
ICAgIFN0cmluZyBmaWxlbmFtZSA9IHBhdGhHZXRGaWxlTmFtZShwYXRoKTsKICAgICBtZXRhZGF0
YS5pc0hpZGRlbiA9ICFmaWxlbmFtZS5pc0VtcHR5KCkgJiYgZmlsZW5hbWVbMF0gPT0gJy4nOwog
ICAgIG1ldGFkYXRhLm1vZGlmaWNhdGlvblRpbWUgPSBzdGF0UmVzdWx0LnN0X210aW1lOwpAQCAt
MTg2LDcgKzE4Niw3IEBAIGJvb2wgZ2V0RmlsZU1ldGFkYXRhKGNvbnN0IFN0cmluZyYgcGF0aCwg
RmlsZU1ldGFkYXRhJiBtZXRhZGF0YSwgU2hvdWxkRm9sbG93U3ltCiAgICAgICAgIG1ldGFkYXRh
LnR5cGUgPSBGaWxlTWV0YWRhdGE6OlR5cGVTeW1ib2xpY0xpbms7CiAgICAgZWxzZQogICAgICAg
ICBtZXRhZGF0YS50eXBlID0gRmlsZU1ldGFkYXRhOjpUeXBlRmlsZTsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gbWV0YWRhdGE7CiB9CiAKIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGFGaWxlUmVmZXJl
bmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGFGaWxlUmVm
ZXJlbmNlLmNwcAppbmRleCA2ZGM2ZDY0YWU4NzE4NWQwZjFjZDFlYTg3NzY4MDhkYTNjNjU1ZDdm
Li5hMmVjNTJiYWMxYWVkZmQ1ZGMyZGUxZTdlZTU1MWEzYTJhZDUwZjA5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhRmlsZVJlZmVyZW5jZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YUZpbGVSZWZlcmVu
Y2UuY3BwCkBAIC05NSwxOCArOTUsMTggQEAgdm9pZCBCbG9iRGF0YUZpbGVSZWZlcmVuY2U6OnN0
YXJ0VHJhY2tpbmdNb2RpZmljYXRpb25zKCkKICNlbmRpZgogCiAgICAgLy8gRklYTUU6IFNvbWUg
cGxhdGZvcm1zIHByb3ZpZGUgYmV0dGVyIHdheXMgdG8gbGlzdGVuIGZvciBmaWxlIHN5c3RlbSBv
YmplY3QgY2hhbmdlcywgY29uc2lkZXIgdXNpbmcgdGhlc2UuCi0gICAgRmlsZU1ldGFkYXRhIG1l
dGFkYXRhOwotICAgIGlmICghZ2V0RmlsZU1ldGFkYXRhKG1fcGF0aCwgbWV0YWRhdGEsIFNob3Vs
ZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpCisgICAgYXV0byBtZXRhZGF0YSA9IGdldEZpbGVN
ZXRhZGF0YShtX3BhdGgsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Olllcyk7CisgICAgaWYg
KCFtZXRhZGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9leHBlY3RlZE1vZGlmaWNhdGlv
blRpbWUgPSBtZXRhZGF0YS5tb2RpZmljYXRpb25UaW1lOworICAgIG1fZXhwZWN0ZWRNb2RpZmlj
YXRpb25UaW1lID0gbWV0YWRhdGEudmFsdWUoKS5tb2RpZmljYXRpb25UaW1lOwogCiAjaWYgRU5B
QkxFKEZJTEVfUkVQTEFDRU1FTlQpCiAgICAgaWYgKG1fcmVwbGFjZW1lbnRTaG91bGRCZUdlbmVy
YXRlZCkKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAKLSAgICBtX3NpemUgPSBtZXRhZGF0YS5s
ZW5ndGg7CisgICAgbV9zaXplID0gbWV0YWRhdGEudmFsdWUoKS5sZW5ndGg7CiB9CiAKIHZvaWQg
QmxvYkRhdGFGaWxlUmVmZXJlbmNlOjpwcmVwYXJlRm9yRmlsZUFjY2VzcygpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9CbG9iRGF0YUZpbGVSZWZlcmVu
Y2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9CbG9iRGF0YUZp
bGVSZWZlcmVuY2VNYWMubW0KaW5kZXggOGRhY2U3YTdlMDI2YTdiZDI1YjllM2MyODcxOThhZmFi
N2MwYjYzNS4uMmI2NzFkODNmYmFiYmUwN2E0MjE4MjdmZTY4YWNjOThiMjYzOTBkNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQmxvYkRhdGFGaWxlUmVm
ZXJlbmNlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Js
b2JEYXRhRmlsZVJlZmVyZW5jZU1hYy5tbQpAQCAtNzksOSArNzksOCBAQCB2b2lkIEJsb2JEYXRh
RmlsZVJlZmVyZW5jZTo6Z2VuZXJhdGVSZXBsYWNlbWVudEZpbGUoKQogCiAgICAgbV9yZXBsYWNl
bWVudFNob3VsZEJlR2VuZXJhdGVkID0gZmFsc2U7CiAgICAgaWYgKCFtX3JlcGxhY2VtZW50UGF0
aC5pc051bGwoKSkgewotICAgICAgICBGaWxlTWV0YWRhdGEgbWV0YWRhdGE7Ci0gICAgICAgIGlm
IChnZXRGaWxlTWV0YWRhdGEobV9yZXBsYWNlbWVudFBhdGgsIG1ldGFkYXRhLCBTaG91bGRGb2xs
b3dTeW1ib2xpY0xpbmtzOjpZZXMpKQotICAgICAgICAgICAgbV9zaXplID0gbWV0YWRhdGEubGVu
Z3RoOworICAgICAgICBpZiAoYXV0byBtZXRhZGF0YSA9IGdldEZpbGVNZXRhZGF0YShtX3JlcGxh
Y2VtZW50UGF0aCwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSkKKyAgICAgICAgICAg
IG1fc2l6ZSA9IG1ldGFkYXRhLnZhbHVlKCkubGVuZ3RoOwogICAgIH0KIAogICAgIHJldm9rZUZp
bGVBY2Nlc3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0Zp
bGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lz
dGVtUE9TSVguY3BwCmluZGV4IGY0YWMxZDA3ZTc4OTA1YzQ3NTQwZDExYmQ4MDY5OGQzYzAzOTdm
OTEuLjc2MTJiZGMzM2JiNjFlNjAzYzIxYWU4NzY1YTEyZTQ2ZGVhZTlhNTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcApAQCAtMjM5
LDI2ICsyMzksMjUgQEAgYm9vbCBnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcm
IHBhdGgsIHRpbWVfdCYgcmVzdWx0KQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGdldEZp
bGVNZXRhZGF0YShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEsIFNo
b3VsZEZvbGxvd1N5bWJvbGljTGlua3Mgc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcykKK3N0ZDo6
b3B0aW9uYWw8RmlsZU1ldGFkYXRhPiBnZXRGaWxlTWV0YWRhdGEoY29uc3QgU3RyaW5nJiBwYXRo
LCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzIHNob3VsZEZvbGxvd1N5bWJvbGljTGlua3MpCiB7
CiAgICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKIAog
ICAgIGlmICghZnNSZXAuZGF0YSgpIHx8IGZzUmVwLmRhdGEoKVswXSA9PSAnXDAnKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICBzdHJ1
Y3Qgc3RhdCBmaWxlSW5mbzsKLQogICAgIGlmIChzaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzID09
IFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykgewogICAgICAgICBpZiAoc3RhdChmc1Jl
cC5kYXRhKCksICZmaWxlSW5mbykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChsc3Rh
dChmc1JlcC5kYXRhKCksICZmaWxlSW5mbykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KIAotICAgIFN0cmluZyBmaWxl
bmFtZSA9IHBhdGhHZXRGaWxlTmFtZShwYXRoKTsKLQorICAgIEZpbGVNZXRhZGF0YSBtZXRhZGF0
YTsKICAgICBtZXRhZGF0YS5tb2RpZmljYXRpb25UaW1lID0gZmlsZUluZm8uc3RfbXRpbWU7Cisg
ICAgU3RyaW5nIGZpbGVuYW1lID0gcGF0aEdldEZpbGVOYW1lKHBhdGgpOwogICAgIG1ldGFkYXRh
LmlzSGlkZGVuID0gIWZpbGVuYW1lLmlzRW1wdHkoKSAmJiBmaWxlbmFtZVswXSA9PSAnLic7CiAg
ICAgbWV0YWRhdGEubGVuZ3RoID0gZmlsZUluZm8uc3Rfc2l6ZTsKICAgICBpZiAoU19JU0RJUihm
aWxlSW5mby5zdF9tb2RlKSkKQEAgLTI2Nyw3ICsyNjYsOCBAQCBib29sIGdldEZpbGVNZXRhZGF0
YShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEsIFNob3VsZEZvbGxv
d1N5bQogICAgICAgICBtZXRhZGF0YS50eXBlID0gRmlsZU1ldGFkYXRhOjpUeXBlU3ltYm9saWNM
aW5rOwogICAgIGVsc2UKICAgICAgICAgbWV0YWRhdGEudHlwZSA9IEZpbGVNZXRhZGF0YTo6VHlw
ZUZpbGU7Ci0gICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gbWV0YWRhdGE7CiB9CiAKIGJv
b2wgY3JlYXRlU3ltYm9saWNMaW5rKGNvbnN0IFN0cmluZyYgdGFyZ2V0UGF0aCwgY29uc3QgU3Ry
aW5nJiBzeW1ib2xpY0xpbmtQYXRoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0Zp
bGVTeXN0ZW1XaW4uY3BwCmluZGV4IDM1Y2Q2Y2FhMjQ5MDZjMWExMWMwY2Q4YmUzNzBhOWUzZWQ1
ZTc5M2QuLjBlMTcyOTYwMzc3NzMyNDE2M2JkNTQ2MzM2NDI4MDJkMmYxODFhMWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKQEAgLTE1OCwyNyAr
MTU4LDI5IEBAIHN0YXRpYyBTdHJpbmcgZ2V0RmluYWxQYXRoTmFtZShjb25zdCBTdHJpbmcmIHBh
dGgpCiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoV1RGTW92ZShidWZmZXIpKTsKIH0KIAotYm9v
bCBnZXRGaWxlTWV0YWRhdGEoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlTWV0YWRhdGEmIG1ldGFk
YXRhLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzIHNob3VsZEZvbGxvd1N5bWJvbGljTGlua3Mp
CitzdGQ6Om9wdGlvbmFsPEZpbGVNZXRhZGF0YT4gZ2V0RmlsZU1ldGFkYXRhKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcyBzaG91bGRGb2xsb3dTeW1ib2xpY0xp
bmtzKQogewogICAgIFdJTjMyX0ZJTkRfREFUQVcgZmluZERhdGE7CiAgICAgaWYgKCFnZXRGaW5k
RGF0YShwYXRoLCBmaW5kRGF0YSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIGJvb2wgaXNTeW1ib2xpY0xpbmsgPSBmaW5kRGF0YS5k
d0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfUkVQQVJTRV9QT0lOVCAmJiBmaW5kRGF0
YS5kd1Jlc2VydmVkMCA9PSBJT19SRVBBUlNFX1RBR19TWU1MSU5LOwogICAgIGlmIChpc1N5bWJv
bGljTGluayAmJiBzaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzID09IFNob3VsZEZvbGxvd1N5bWJv
bGljTGlua3M6OlllcykgewogICAgICAgICBTdHJpbmcgdGFyZ2V0UGF0aCA9IGdldEZpbmFsUGF0
aE5hbWUocGF0aCk7CiAgICAgICAgIGlmICh0YXJnZXRQYXRoLmlzTnVsbCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAg
ICAgaWYgKCFnZXRGaW5kRGF0YSh0YXJnZXRQYXRoLCBmaW5kRGF0YSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICBp
c1N5bWJvbGljTGluayA9IGZhbHNlOwogICAgIH0KIAogICAgIGlmICghZ2V0RmlsZVNpemVGcm9t
RmluZERhdGEoZmluZERhdGEsIG1ldGFkYXRhLmxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIHRpbWVfdCBtb2RpZmljYXRp
b25UaW1lOwogICAgIGdldEZpbGVNb2RpZmljYXRpb25UaW1lRnJvbUZpbmREYXRhKGZpbmREYXRh
LCBtb2RpZmljYXRpb25UaW1lKTsKKworICAgIEZpbGVNZXRhZGF0YSBtZXRhZGF0YTsKICAgICBt
ZXRhZGF0YS5tb2RpZmljYXRpb25UaW1lID0gbW9kaWZpY2F0aW9uVGltZTsKICAgICBtZXRhZGF0
YS5pc0hpZGRlbiA9IGZpbmREYXRhLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9I
SURERU47CiAgICAgaWYgKGZpbmREYXRhLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVU
RV9ESVJFQ1RPUlkpCkBAIC0xODgsNyArMTkwLDcgQEAgYm9vbCBnZXRGaWxlTWV0YWRhdGEoY29u
c3QgU3RyaW5nJiBwYXRoLCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhLCBTaG91bGRGb2xsb3dTeW0K
ICAgICBlbHNlCiAgICAgICAgIG1ldGFkYXRhLnR5cGUgPSBGaWxlTWV0YWRhdGE6OlR5cGVGaWxl
OwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIG1ldGFkYXRhOwogfQogCiBib29sIGNy
ZWF0ZVN5bWJvbGljTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgsIGNvbnN0IFN0cmluZyYg
c3ltYm9saWNMaW5rUGF0aCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCAyOTk0NDU3ZWZhZTg2NDkwNGUzMTk0MTA4YTlhYTcyYTRkYzJiNjQ2Li5j
NzM3M2ZjYmQyNzJmN2U4MDMzOTE0MGI0YTE5OGE1ODg1ZmU1NmVjIDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTct
MDktMDIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBIYXZlIGdl
dEZpbGVNZXRhZGF0YSgpIHJldHVybiBhIHN0ZDo6b3B0aW9uYWw8RmlsZU1ldGFkYXRhPgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MjkzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUX0YpOgorCiAyMDE3LTA5LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CiAKICAgICAgICAgV1NMIHNob3VsZCBjaGVjayB1bnJlYWNoYWJsZSBjb2RlIGFuZCBubyByZXR1
cm5zCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmlsZVN5
c3RlbS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmlsZVN5c3RlbS5j
cHAKaW5kZXggOWFhNzZmYzRhMzAwZDNlOGQxZjVhOWE0NTliNDM5NDk1MGVlNmU0ZS4uNzcxZjdj
YjQ3ZWEwNWY3ZGZhYzQzMDQ4MGRjOGIzZmU1NGI1M2UzOCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9GaWxlU3lzdGVtLmNwcApAQCAtMTI4LDE1ICsxMjgsMTUg
QEAgVEVTVF9GKEZpbGVTeXN0ZW1UZXN0LCBGaWxlc0hhdmVTYW1lVm9sdW1lKQogCiBURVNUX0Yo
RmlsZVN5c3RlbVRlc3QsIEdldEZpbGVNZXRhZGF0YVN5bWxpbmspCiB7Ci0gICAgRmlsZU1ldGFk
YXRhIHN5bWxpbmtNZXRhZGF0YTsKLSAgICBFWFBFQ1RfVFJVRShnZXRGaWxlTWV0YWRhdGEodGVt
cEZpbGVTeW1saW5rUGF0aCgpLCBzeW1saW5rTWV0YWRhdGEsIFNob3VsZEZvbGxvd1N5bWJvbGlj
TGlua3M6Ok5vKSk7Ci0gICAgRVhQRUNUX1RSVUUoc3ltbGlua01ldGFkYXRhLnR5cGUgPT0gRmls
ZU1ldGFkYXRhOjpUeXBlU3ltYm9saWNMaW5rKTsKLSAgICBFWFBFQ1RfRkFMU0Uoc3RhdGljX2Nh
c3Q8c2l6ZV90PihzeW1saW5rTWV0YWRhdGEubGVuZ3RoKSA9PSBzdHJsZW4oRmlsZVN5c3RlbVRl
c3REYXRhKSk7Ci0KLSAgICBGaWxlTWV0YWRhdGEgdGFyZ2V0TWV0YWRhdGE7Ci0gICAgRVhQRUNU
X1RSVUUoZ2V0RmlsZU1ldGFkYXRhKHRlbXBGaWxlU3ltbGlua1BhdGgoKSwgdGFyZ2V0TWV0YWRh
dGEsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOwotICAgIEVYUEVDVF9UUlVFKHRh
cmdldE1ldGFkYXRhLnR5cGUgPT0gRmlsZU1ldGFkYXRhOjpUeXBlRmlsZSk7Ci0gICAgRVhQRUNU
X0VRKHN0cmxlbihGaWxlU3lzdGVtVGVzdERhdGEpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHRhcmdl
dE1ldGFkYXRhLmxlbmd0aCkpOworICAgIGF1dG8gc3ltbGlua01ldGFkYXRhID0gZ2V0RmlsZU1l
dGFkYXRhKHRlbXBGaWxlU3ltbGlua1BhdGgoKSwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6
Tm8pOworICAgIEFTU0VSVF9UUlVFKCEhc3ltbGlua01ldGFkYXRhKTsKKyAgICBFWFBFQ1RfVFJV
RShzeW1saW5rTWV0YWRhdGEudmFsdWUoKS50eXBlID09IEZpbGVNZXRhZGF0YTo6VHlwZVN5bWJv
bGljTGluayk7CisgICAgRVhQRUNUX0ZBTFNFKHN0YXRpY19jYXN0PHNpemVfdD4oc3ltbGlua01l
dGFkYXRhLnZhbHVlKCkubGVuZ3RoKSA9PSBzdHJsZW4oRmlsZVN5c3RlbVRlc3REYXRhKSk7CisK
KyAgICBhdXRvIHRhcmdldE1ldGFkYXRhID0gZ2V0RmlsZU1ldGFkYXRhKHRlbXBGaWxlU3ltbGlu
a1BhdGgoKSwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKTsKKyAgICBBU1NFUlRfVFJV
RSghIXRhcmdldE1ldGFkYXRhKTsKKyAgICBFWFBFQ1RfVFJVRSh0YXJnZXRNZXRhZGF0YS52YWx1
ZSgpLnR5cGUgPT0gRmlsZU1ldGFkYXRhOjpUeXBlRmlsZSk7CisgICAgRVhQRUNUX0VRKHN0cmxl
bihGaWxlU3lzdGVtVGVzdERhdGEpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHRhcmdldE1ldGFkYXRh
LnZhbHVlKCkubGVuZ3RoKSk7CiB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319798</attachid>
            <date>2017-09-03 13:25:59 -0700</date>
            <delta_ts>2017-09-03 15:03:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176293-20170903132558.patch</filename>
            <type>text/plain</type>
            <size>24946</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTEyZTNhMjAzNGVjZWYw
MTA4ZTJiMGE5MDM1YjQ2ZjM3ZWNjY2EwYy4uYThkYTFjZGJlY2E4Zjg4NTRjNmVjNGY5MmFjZTcy
OTBlMTk0NzcyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE3LTA5LTAyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBnZXRGaWxlTWV0YWRh
dGEoKSByZXR1cm4gYSBzdGQ6Om9wdGlvbmFsPEZpbGVNZXRhZGF0YT4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjI5MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhhdmUgZ2V0RmlsZU1ldGFkYXRhKCkg
cmV0dXJuIGEgc3RkOjpvcHRpb25hbDxGaWxlTWV0YWRhdGE+IGluc3RlYWQgb2YKKyAgICAgICAg
dXNpbmcgYW4gb3V0IHBhcmFtZXRlciBmb3IgdGhlIG1ldGFkYXRhLgorCisgICAgICAgICogTW9k
dWxlcy9lbnRyaWVzYXBpL0RPTUZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlz
dERpcmVjdG9yeVdpdGhNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjp2YWxpZGF0ZVBhdGhJ
c0V4cGVjdGVkVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpET01GaWxlU3lzdGVtOjpnZXRFbnRy
eSk6CisgICAgICAgICogaHRtbC9GaWxlTGlzdENyZWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6YXBwZW5kRGlyZWN0b3J5RmlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVTeXN0ZW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmlsZUlzRGlyZWN0b3J5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9GaWxlU3lzdGVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9GaWxlU3lzdGVtR2xp
Yi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRGaWxlTWV0YWRhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJsb2JEYXRhRmlsZVJlZmVyZW5jZTo6c3RhcnRUcmFja2luZ01vZGlmaWNhdGlvbnMpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL0Jsb2JEYXRhRmlsZVJlZmVyZW5jZU1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JEYXRhRmlsZVJlZmVyZW5jZTo6Z2VuZXJhdGVSZXBs
YWNlbWVudEZpbGUpOgorICAgICAgICAqIHBsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRGaWxlTWV0YWRhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEZpbGVNZXRh
ZGF0YSk6CisKIDIwMTctMDktMDMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZW1vdmUgQ2FudmFzUHJveHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZW50cmllc2FwaS9ET01GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZW50cmllc2FwaS9ET01GaWxlU3lzdGVtLmNwcAppbmRleCBmOGI0NTY0YTk2NTc0ODk2ZjZiYjM3
MWU3ZjNkNjUzY2QyMzU0OTE3Li5hNGIwYzkzY2I4NzVjM2NlOTVjYjQ5ZmMzYTQyNzYzOWMyMWU2
MDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRE9NRmls
ZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0RPTUZp
bGVTeXN0ZW0uY3BwCkBAIC01NSwxMCArNTUsMTAgQEAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rv
cjxMaXN0ZWRDaGlsZD4+IGxpc3REaXJlY3RvcnlXaXRoTWV0YWRhdGEoY29uc3QgU3RyaW5nJgog
ICAgIFZlY3RvcjxMaXN0ZWRDaGlsZD4gbGlzdGVkQ2hpbGRyZW47CiAgICAgbGlzdGVkQ2hpbGRy
ZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjaGlsZFBhdGhzLnNpemUoKSk7CiAgICAgZm9yIChh
dXRvJiBjaGlsZFBhdGggOiBjaGlsZFBhdGhzKSB7Ci0gICAgICAgIEZpbGVNZXRhZGF0YSBtZXRh
ZGF0YTsKLSAgICAgICAgaWYgKCFnZXRGaWxlTWV0YWRhdGEoY2hpbGRQYXRoLCBtZXRhZGF0YSwg
U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pKQorICAgICAgICBhdXRvIG1ldGFkYXRhID0g
ZmlsZU1ldGFkYXRhKGNoaWxkUGF0aCk7CisgICAgICAgIGlmICghbWV0YWRhdGEpCiAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgbGlzdGVkQ2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKExp
c3RlZENoaWxkIHsgcGF0aEdldEZpbGVOYW1lKGNoaWxkUGF0aCksIG1ldGFkYXRhLnR5cGUgfSk7
CisgICAgICAgIGxpc3RlZENoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChMaXN0ZWRDaGlsZCB7IHBh
dGhHZXRGaWxlTmFtZShjaGlsZFBhdGgpLCBtZXRhZGF0YS52YWx1ZSgpLnR5cGUgfSk7CiAgICAg
fQogICAgIHJldHVybiBXVEZNb3ZlKGxpc3RlZENoaWxkcmVuKTsKIH0KQEAgLTc0LDEwICs3NCwx
MCBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPFJlZjxGaWxlU3lzdGVtRW50cnk+Pj4gdG9G
aWxlU3lzdGVtRW50cmllcyhTY3JpcHRFeGVjdQogICAgIGZvciAoYXV0byYgY2hpbGQgOiBsaXN0
ZWRDaGlsZHJlbi5yZXR1cm5WYWx1ZSgpKSB7CiAgICAgICAgIFN0cmluZyB2aXJ0dWFsUGF0aCA9
IHBhcmVudFZpcnR1YWxQYXRoICsgIi8iICsgY2hpbGQuZmlsZW5hbWU7CiAgICAgICAgIHN3aXRj
aCAoY2hpbGQudHlwZSkgewotICAgICAgICBjYXNlIEZpbGVNZXRhZGF0YTo6VHlwZUZpbGU6Cisg
ICAgICAgIGNhc2UgRmlsZU1ldGFkYXRhOjpUeXBlOjpGaWxlOgogICAgICAgICAgICAgZW50cmll
cy51bmNoZWNrZWRBcHBlbmQoRmlsZVN5c3RlbUZpbGVFbnRyeTo6Y3JlYXRlKGNvbnRleHQsIGZp
bGVTeXN0ZW0sIHZpcnR1YWxQYXRoKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBGaWxlTWV0YWRhdGE6OlR5cGVEaXJlY3Rvcnk6CisgICAgICAgIGNhc2UgRmlsZU1ldGFkYXRh
OjpUeXBlOjpEaXJlY3Rvcnk6CiAgICAgICAgICAgICBlbnRyaWVzLnVuY2hlY2tlZEFwcGVuZChG
aWxlU3lzdGVtRGlyZWN0b3J5RW50cnk6OmNyZWF0ZShjb250ZXh0LCBmaWxlU3lzdGVtLCB2aXJ0
dWFsUGF0aCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNjMs
MTEgKzE2MywxMSBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8U3RyaW5nPiB2YWxpZGF0ZVBhdGhJc0V4
cGVjdGVkVHlwZShjb25zdCBTdHJpbmcmIGZ1bGxQYXRoLCBTdAogewogICAgIEFTU0VSVCghaXNN
YWluVGhyZWFkKCkpOwogCi0gICAgRmlsZU1ldGFkYXRhIG1ldGFkYXRhOwotICAgIGlmICghZ2V0
RmlsZU1ldGFkYXRhKGZ1bGxQYXRoLCBtZXRhZGF0YSwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5r
czo6Tm8pKQorICAgIGF1dG8gbWV0YWRhdGEgPSBmaWxlTWV0YWRhdGEoZnVsbFBhdGgpOworICAg
IGlmICghbWV0YWRhdGEpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RGb3VuZEVycm9y
LCBBU0NJSUxpdGVyYWwoIlBhdGggZG9lcyBub3QgZXhpc3QiKSB9OwogCi0gICAgaWYgKG1ldGFk
YXRhLnR5cGUgIT0gZXhwZWN0ZWRUeXBlKQorICAgIGlmIChtZXRhZGF0YS52YWx1ZSgpLnR5cGUg
IT0gZXhwZWN0ZWRUeXBlKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZU1pc21hdGNo
RXJyb3IsICJFbnRyeSBhdCBwYXRoIGRvZXMgbm90IGhhdmUgZXhwZWN0ZWQgdHlwZSIgfTsKIAog
ICAgIHJldHVybiBXVEZNb3ZlKHZpcnR1YWxQYXRoKTsKQEAgLTI1Niw3ICsyNTYsNyBAQCB2b2lk
IERPTUZpbGVTeXN0ZW06OmdldFBhcmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
LCBGaWxlU3lzdGVtRW50cnkmCiAgICAgQVNTRVJUKHZpcnR1YWxQYXRoWzBdID09ICcvJyk7CiAg
ICAgYXV0byBmdWxsUGF0aCA9IGV2YWx1YXRlUGF0aCh2aXJ0dWFsUGF0aCk7CiAgICAgbV93b3Jr
UXVldWUtPmRpc3BhdGNoKFt0aGlzLCBjb250ZXh0ID0gbWFrZVJlZihjb250ZXh0KSwgZnVsbFBh
dGggPSBjcm9zc1RocmVhZENvcHkoZnVsbFBhdGgpLCB2aXJ0dWFsUGF0aCA9IGNyb3NzVGhyZWFk
Q29weSh2aXJ0dWFsUGF0aCksIGNvbXBsZXRpb25DYWxsYmFjayA9IFdURk1vdmUoY29tcGxldGlv
bkNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byB2YWxpZGF0ZWRWaXJ0dWFsUGF0
aCA9IHZhbGlkYXRlUGF0aElzRXhwZWN0ZWRUeXBlKGZ1bGxQYXRoLCBXVEZNb3ZlKHZpcnR1YWxQ
YXRoKSwgRmlsZU1ldGFkYXRhOjpUeXBlRGlyZWN0b3J5KTsKKyAgICAgICAgYXV0byB2YWxpZGF0
ZWRWaXJ0dWFsUGF0aCA9IHZhbGlkYXRlUGF0aElzRXhwZWN0ZWRUeXBlKGZ1bGxQYXRoLCBXVEZN
b3ZlKHZpcnR1YWxQYXRoKSwgRmlsZU1ldGFkYXRhOjpUeXBlOjpEaXJlY3RvcnkpOwogICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBjb250ZXh0ID0gV1RGTW92ZShjb250ZXh0KSwgdmFs
aWRhdGVkVmlydHVhbFBhdGggPSBjcm9zc1RocmVhZENvcHkodmFsaWRhdGVkVmlydHVhbFBhdGgp
LCBjb21wbGV0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGNvbXBsZXRpb25DYWxsYmFjayldKCkgbXV0
YWJsZSB7CiAgICAgICAgICAgICBpZiAodmFsaWRhdGVkVmlydHVhbFBhdGguaGFzRXhjZXB0aW9u
KCkpCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKHZhbGlkYXRlZFZpcnR1YWxQ
YXRoLnJlbGVhc2VFeGNlcHRpb24oKSk7CkBAIC0yOTcsMTQgKzI5NywxOSBAQCB2b2lkIERPTUZp
bGVTeXN0ZW06OmdldEVudHJ5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEZpbGVT
eXN0ZW1EaXJlY3RvcgogICAgIH0KIAogICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbdGhpcywg
Y29udGV4dCA9IG1ha2VSZWYoY29udGV4dCksIGZ1bGxQYXRoID0gY3Jvc3NUaHJlYWRDb3B5KGZ1
bGxQYXRoKSwgcmVzb2x2ZWRWaXJ0dWFsUGF0aCA9IGNyb3NzVGhyZWFkQ29weShyZXNvbHZlZFZp
cnR1YWxQYXRoKSwgY29tcGxldGlvbkNhbGxiYWNrID0gV1RGTW92ZShjb21wbGV0aW9uQ2FsbGJh
Y2spXSgpIG11dGFibGUgewotICAgICAgICBGaWxlTWV0YWRhdGEgbWV0YWRhdGE7Ci0gICAgICAg
IGdldEZpbGVNZXRhZGF0YShmdWxsUGF0aCwgbWV0YWRhdGEsIFNob3VsZEZvbGxvd1N5bWJvbGlj
TGlua3M6Ok5vKTsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgY29udGV4dCA9IFdU
Rk1vdmUoY29udGV4dCksIHJlc29sdmVkVmlydHVhbFBhdGggPSBjcm9zc1RocmVhZENvcHkocmVz
b2x2ZWRWaXJ0dWFsUGF0aCksIGVudHJ5VHlwZSA9IG1ldGFkYXRhLnR5cGUsIGNvbXBsZXRpb25D
YWxsYmFjayA9IFdURk1vdmUoY29tcGxldGlvbkNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAoZW50cnlUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIEZpbGVNZXRhZGF0
YTo6VHlwZURpcmVjdG9yeToKKyAgICAgICAgc3RkOjpvcHRpb25hbDxGaWxlTWV0YWRhdGE6OlR5
cGU+IGVudHJ5VHlwZTsKKyAgICAgICAgaWYgKGF1dG8gbWV0YWRhdGEgPSBmaWxlTWV0YWRhdGEo
ZnVsbFBhdGgpKQorICAgICAgICAgICAgZW50cnlUeXBlID0gbWV0YWRhdGEudmFsdWUoKS50eXBl
OworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBjb250ZXh0ID0gV1RGTW92ZShjb250
ZXh0KSwgcmVzb2x2ZWRWaXJ0dWFsUGF0aCA9IGNyb3NzVGhyZWFkQ29weShyZXNvbHZlZFZpcnR1
YWxQYXRoKSwgZW50cnlUeXBlLCBjb21wbGV0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGNvbXBsZXRp
b25DYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBpZiAoIWVudHJ5VHlwZSkgewor
ICAgICAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhFeGNlcHRpb24geyBOb3RGb3VuZEVy
cm9yLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBmaW5kIGVudHJ5IGF0IGdpdmVuIHBhdGgiKSB9KTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzd2l0
Y2ggKGVudHJ5VHlwZS52YWx1ZSgpKSB7CisgICAgICAgICAgICBjYXNlIEZpbGVNZXRhZGF0YTo6
VHlwZTo6RGlyZWN0b3J5OgogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhSZWY8
RmlsZVN5c3RlbUVudHJ5PiB7IEZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeTo6Y3JlYXRlKGNvbnRl
eHQsICp0aGlzLCByZXNvbHZlZFZpcnR1YWxQYXRoKSB9KTsKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgRmlsZU1ldGFkYXRhOjpUeXBlRmlsZToKKyAgICAgICAgICAg
IGNhc2UgRmlsZU1ldGFkYXRhOjpUeXBlOjpGaWxlOgogICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25DYWxsYmFjayhSZWY8RmlsZVN5c3RlbUVudHJ5PiB7IEZpbGVTeXN0ZW1GaWxlRW50cnk6OmNy
ZWF0ZShjb250ZXh0LCAqdGhpcywgcmVzb2x2ZWRWaXJ0dWFsUGF0aCkgfSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMzIwLDcgKzMyNSw3IEBAIHZv
aWQgRE9NRmlsZVN5c3RlbTo6Z2V0RmlsZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
LCBGaWxlU3lzdGVtRmlsZUVudHJ5CiAgICAgYXV0byB2aXJ0dWFsUGF0aCA9IGZpbGVFbnRyeS52
aXJ0dWFsUGF0aCgpOwogICAgIGF1dG8gZnVsbFBhdGggPSBldmFsdWF0ZVBhdGgodmlydHVhbFBh
dGgpOwogICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgY29udGV4dCA9IG1ha2VSZWYo
Y29udGV4dCksIGZ1bGxQYXRoID0gY3Jvc3NUaHJlYWRDb3B5KGZ1bGxQYXRoKSwgdmlydHVhbFBh
dGggPSBjcm9zc1RocmVhZENvcHkodmlydHVhbFBhdGgpLCBjb21wbGV0aW9uQ2FsbGJhY2sgPSBX
VEZNb3ZlKGNvbXBsZXRpb25DYWxsYmFjayldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8gdmFs
aWRhdGVkVmlydHVhbFBhdGggPSB2YWxpZGF0ZVBhdGhJc0V4cGVjdGVkVHlwZShmdWxsUGF0aCwg
V1RGTW92ZSh2aXJ0dWFsUGF0aCksIEZpbGVNZXRhZGF0YTo6VHlwZUZpbGUpOworICAgICAgICBh
dXRvIHZhbGlkYXRlZFZpcnR1YWxQYXRoID0gdmFsaWRhdGVQYXRoSXNFeHBlY3RlZFR5cGUoZnVs
bFBhdGgsIFdURk1vdmUodmlydHVhbFBhdGgpLCBGaWxlTWV0YWRhdGE6OlR5cGU6OkZpbGUpOwog
ICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBjb250ZXh0ID0gV1RGTW92ZShjb250ZXh0
KSwgZnVsbFBhdGggPSBjcm9zc1RocmVhZENvcHkoZnVsbFBhdGgpLCB2YWxpZGF0ZWRWaXJ0dWFs
UGF0aCA9IGNyb3NzVGhyZWFkQ29weSh2YWxpZGF0ZWRWaXJ0dWFsUGF0aCksIGNvbXBsZXRpb25D
YWxsYmFjayA9IFdURk1vdmUoY29tcGxldGlvbkNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKICAgICAg
ICAgICAgIGlmICh2YWxpZGF0ZWRWaXJ0dWFsUGF0aC5oYXNFeGNlcHRpb24oKSkKICAgICAgICAg
ICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2sodmFsaWRhdGVkVmlydHVhbFBhdGgucmVsZWFzZUV4
Y2VwdGlvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUxpc3RDcmVh
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUxpc3RDcmVhdG9yLmNwcAppbmRleCA0
MTkyYzYzZGYxNTljYTMzZjQ3MGNhMGRlZDEyOTgzNjE1Yzg4NjAzLi5kZWZhNWViMmI4NjUzNjRj
NGE4Nzc5MDU2OGQ5MWI3ZGFkM2ZhOWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0ZpbGVMaXN0Q3JlYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlTGlzdENy
ZWF0b3IuY3BwCkBAIC00MiwxNyArNDIsMTcgQEAgRmlsZUxpc3RDcmVhdG9yOjp+RmlsZUxpc3RD
cmVhdG9yKCkKIHN0YXRpYyB2b2lkIGFwcGVuZERpcmVjdG9yeUZpbGVzKGNvbnN0IFN0cmluZyYg
ZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCwgVmVjdG9yPFJlZlB0cjxGaWxl
Pj4mIGZpbGVPYmplY3RzKQogewogICAgIGZvciAoYXV0byYgY2hpbGRQYXRoIDogbGlzdERpcmVj
dG9yeShkaXJlY3RvcnksICIqIikpIHsKLSAgICAgICAgRmlsZU1ldGFkYXRhIG1ldGFkYXRhOwot
ICAgICAgICBpZiAoIWdldEZpbGVNZXRhZGF0YShjaGlsZFBhdGgsIG1ldGFkYXRhLCBTaG91bGRG
b2xsb3dTeW1ib2xpY0xpbmtzOjpObykpCisgICAgICAgIGF1dG8gbWV0YWRhdGEgPSBmaWxlTWV0
YWRhdGEoY2hpbGRQYXRoKTsKKyAgICAgICAgaWYgKCFtZXRhZGF0YSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgIGlmIChtZXRhZGF0YS5pc0hpZGRlbikKKyAgICAgICAgaWYgKG1l
dGFkYXRhLnZhbHVlKCkuaXNIaWRkZW4pCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAg
ICBTdHJpbmcgY2hpbGRSZWxhdGl2ZVBhdGggPSByZWxhdGl2ZVBhdGggKyAiLyIgKyBwYXRoR2V0
RmlsZU5hbWUoY2hpbGRQYXRoKTsKLSAgICAgICAgaWYgKG1ldGFkYXRhLnR5cGUgPT0gRmlsZU1l
dGFkYXRhOjpUeXBlRGlyZWN0b3J5KQorICAgICAgICBpZiAobWV0YWRhdGEudmFsdWUoKS50eXBl
ID09IEZpbGVNZXRhZGF0YTo6VHlwZTo6RGlyZWN0b3J5KQogICAgICAgICAgICAgYXBwZW5kRGly
ZWN0b3J5RmlsZXMoY2hpbGRQYXRoLCBjaGlsZFJlbGF0aXZlUGF0aCwgZmlsZU9iamVjdHMpOwot
ICAgICAgICBlbHNlIGlmIChtZXRhZGF0YS50eXBlID09IEZpbGVNZXRhZGF0YTo6VHlwZUZpbGUp
CisgICAgICAgIGVsc2UgaWYgKG1ldGFkYXRhLnZhbHVlKCkudHlwZSA9PSBGaWxlTWV0YWRhdGE6
OlR5cGU6OkZpbGUpCiAgICAgICAgICAgICBmaWxlT2JqZWN0cy5hcHBlbmQoRmlsZTo6Y3JlYXRl
V2l0aFJlbGF0aXZlUGF0aChjaGlsZFBhdGgsIGNoaWxkUmVsYXRpdmVQYXRoKSk7CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZU1ldGFkYXRhLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlTWV0YWRhdGEuaAppbmRleCA5N2M0Y2JiNzc1MzUw
ZWJhNzIyM2RlMTk5NDJlYmU2YTZkOTU2N2UxLi44MTY0ZDZkYjhhMDhkZDcyMDA4MTk1Y2MxOTI3
N2ZiODMwN2FiMDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlTWV0
YWRhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlTWV0YWRhdGEuaApAQCAt
MjgsMzEgKzI4LDIxIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgRmlsZU1ldGFk
YXRhX2gKLSNkZWZpbmUgRmlsZU1ldGFkYXRhX2gKLQotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIK
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNwcmFnbWEgb25jZQogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBGaWxlTWV0YWRhdGEgewotICAgIEZpbGVNZXRhZGF0YSgp
ID0gZGVmYXVsdDsKLQogICAgIC8vIFRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIHRoZSBm
aWxlLCBpbiBzZWNvbmRzLgotICAgIC8vIFRoZSB2YWx1ZSAwLjAgbWVhbnMgdGhhdCB0aGUgdGlt
ZSBpcyBub3Qgc2V0LgotICAgIGRvdWJsZSBtb2RpZmljYXRpb25UaW1lIHsgaW52YWxpZEZpbGVU
aW1lKCkgfTsKKyAgICBkb3VibGUgbW9kaWZpY2F0aW9uVGltZTsKIAogICAgIC8vIFRoZSBsZW5n
dGggb2YgdGhlIGZpbGUgaW4gYnl0ZXMuCi0gICAgLy8gVGhlIHZhbHVlIC0xIG1lYW5zIHRoYXQg
dGhlIGxlbmd0aCBpcyBub3Qgc2V0LgotICAgIGxvbmcgbG9uZyBsZW5ndGggeyAtMSB9OworICAg
IGxvbmcgbG9uZyBsZW5ndGg7CiAKLSAgICBib29sIGlzSGlkZGVuIHsgZmFsc2UgfTsKKyAgICBi
b29sIGlzSGlkZGVuOwogCi0gICAgZW51bSBUeXBlIHsgVHlwZVVua25vd24sIFR5cGVGaWxlLCBU
eXBlRGlyZWN0b3J5LCBUeXBlU3ltYm9saWNMaW5rIH07Ci0gICAgVHlwZSB0eXBlIHsgVHlwZVVu
a25vd24gfTsKKyAgICBlbnVtIGNsYXNzIFR5cGUgeyBGaWxlLCBEaXJlY3RvcnksIFN5bWJvbGlj
TGluayB9OworICAgIFR5cGUgdHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEZpbGVNZXRhZGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9GaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0u
Y3BwCmluZGV4IGQ1N2EwYmQ3ZTIyZDY4NjYzYTRmYWNhYjBmYzA5YTQ3ZjQ0MjAyNDkuLmExM2Q2
YmM3YmQ4Y2NlZThjNmEzMmZiMzVhZjI1MjhmYWRhOTRmMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0ZpbGVTeXN0ZW0uY3BwCkBAIC0zNTMsMTAgKzM1MywxMCBAQCB2b2lkIHVubG9ja0FuZENs
b3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlKQogCiBib29sIGZpbGVJc0RpcmVjdG9y
eShjb25zdCBTdHJpbmcmIHBhdGgsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3Mgc2hvdWxkRm9s
bG93U3ltYm9saWNMaW5rcykKIHsKLSAgICBGaWxlTWV0YWRhdGEgbWV0YWRhdGE7Ci0gICAgaWYg
KCFnZXRGaWxlTWV0YWRhdGEocGF0aCwgbWV0YWRhdGEsIHNob3VsZEZvbGxvd1N5bWJvbGljTGlu
a3MpKQorICAgIGF1dG8gbWV0YWRhdGEgPSBzaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzID09IFNo
b3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcyA/IGZpbGVNZXRhZGF0YUZvbGxvd2luZ1N5bWxp
bmtzKHBhdGgpIDogZmlsZU1ldGFkYXRhKHBhdGgpOworICAgIGlmICghbWV0YWRhdGEpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbWV0YWRhdGEudHlwZSA9PSBGaWxlTWV0YWRh
dGE6OlR5cGVEaXJlY3Rvcnk7CisgICAgcmV0dXJuIG1ldGFkYXRhLnZhbHVlKCkudHlwZSA9PSBG
aWxlTWV0YWRhdGE6OlR5cGU6OkRpcmVjdG9yeTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCmluZGV4IDE1OWYxY2JkNWM5YTdkMDc0
MTZmZWI0ODgzZjFkOTQ3NGM4OTA2YmMuLmZmZTNlNGRmOWRjMzk1YzUxMTY4OGUyYzlmMmZmOWRj
NWFmOTk1MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKQEAgLTEwMCw3ICsx
MDAsOCBAQCBXRUJDT1JFX0VYUE9SVCBib29sIGdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYsIGxv
bmcgbG9uZyYgcmVzdWx0KTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0RmlsZVNpemUoUGxhdGZv
cm1GaWxlSGFuZGxlLCBsb25nIGxvbmcmIHJlc3VsdCk7CiBXRUJDT1JFX0VYUE9SVCBib29sIGdl
dEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYsIHRpbWVfdCYgcmVzdWx0KTsKIFdF
QkNPUkVfRVhQT1JUIGJvb2wgZ2V0RmlsZUNyZWF0aW9uVGltZShjb25zdCBTdHJpbmcmLCB0aW1l
X3QmIHJlc3VsdCk7IC8vIE5vdCBhbGwgcGxhdGZvcm1zIHN0b3JlIGZpbGUgY3JlYXRpb24gdGlt
ZS4KLVdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0RmlsZU1ldGFkYXRhKGNvbnN0IFN0cmluZyYsIEZp
bGVNZXRhZGF0YSYsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3MpOworV0VCQ09SRV9FWFBPUlQg
c3RkOjpvcHRpb25hbDxGaWxlTWV0YWRhdGE+IGZpbGVNZXRhZGF0YShjb25zdCBTdHJpbmcmIHBh
dGgpOworV0VCQ09SRV9FWFBPUlQgc3RkOjpvcHRpb25hbDxGaWxlTWV0YWRhdGE+IGZpbGVNZXRh
ZGF0YUZvbGxvd2luZ1N5bWxpbmtzKGNvbnN0IFN0cmluZyYgcGF0aCk7CiBib29sIGZpbGVJc0Rp
cmVjdG9yeShjb25zdCBTdHJpbmcmLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzKTsKIFdFQkNP
UkVfRVhQT1JUIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCk7CiBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50cyhjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb21wb25l
bnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvRmlsZVN5c3Rl
bUdsaWIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9GaWxlU3lzdGVtR2xpYi5j
cHAKaW5kZXggNzdiMDU1OWIyOTc0MzlkMDYyMjg4ODg0YjY5ZDkyODZjYmNiODIxNy4uYjg4NDQ1
YjAwMDM3ZmJlMjllODUzN2M4MTZlMjFiODg4NzVhODY4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKQEAgLTE2NCwyOSArMTY0LDQwIEBA
IGJvb2wgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBwYXRoLCB0aW1lX3Qm
IG1vZGlmaWVkVGltZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBnZXRGaWxlTWV0YWRh
dGEoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhLCBTaG91bGRGb2xs
b3dTeW1ib2xpY0xpbmtzIHNob3VsZEZvbGxvd1N5bWJvbGljTGlua3MpCitzdGF0aWMgRmlsZU1l
dGFkYXRhOjpUeXBlIHRvRmlsZU1ldGF0YVR5cGUoR1N0YXRCdWYgc3RhdFJlc3VsdCkKIHsKLSAg
ICBHU3RhdEJ1ZiBzdGF0UmVzdWx0OworICAgIGlmIChTX0lTRElSKHN0YXRSZXN1bHQuc3RfbW9k
ZSkpCisgICAgICAgIHJldHVybiBGaWxlTWV0YWRhdGE6OlR5cGU6OkRpcmVjdG9yeTsKKyAgICBp
ZiAoU19JU0xOSyhzdGF0UmVzdWx0LnN0X21vZGUpKQorICAgICAgICByZXR1cm4gRmlsZU1ldGFk
YXRhOjpUeXBlOjpTeW1ib2xpY0xpbms7CisgICAgcmV0dXJuIEZpbGVNZXRhZGF0YTo6VHlwZTo6
RmlsZTsKK30KIAotICAgIGlmIChzaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzID09IFNob3VsZEZv
bGxvd1N5bWJvbGljTGlua3M6OlllcykgewotICAgICAgICBpZiAoIWdldEZpbGVTdGF0KHBhdGgs
ICZzdGF0UmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoIWdldEZpbGVMU3RhdChwYXRoLCAmc3RhdFJlc3VsdCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsZU1ldGFkYXRh
PiBmaWxlTWV0YWRhdGFVc2luZ0Z1bmN0aW9uKGNvbnN0IFN0cmluZyYgcGF0aCwgYm9vbCAoKnN0
YXRGdW5jKShjb25zdCBTdHJpbmcmLCBHU3RhdEJ1ZiopKQoreworICAgIEdTdGF0QnVmIHN0YXRS
ZXN1bHQ7CisgICAgaWYgKCFzdGF0RnVuYyhwYXRoLCAmc3RhdFJlc3VsdCkpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICBTdHJpbmcgZmlsZW5hbWUgPSBwYXRoR2V0RmlsZU5h
bWUocGF0aCk7Ci0gICAgbWV0YWRhdGEuaXNIaWRkZW4gPSAhZmlsZW5hbWUuaXNFbXB0eSgpICYm
IGZpbGVuYW1lWzBdID09ICcuJzsKLSAgICBtZXRhZGF0YS5tb2RpZmljYXRpb25UaW1lID0gc3Rh
dFJlc3VsdC5zdF9tdGltZTsKLSAgICBtZXRhZGF0YS5sZW5ndGggPSBzdGF0UmVzdWx0LnN0X3Np
emU7Ci0gICAgaWYgKFNfSVNESVIoc3RhdFJlc3VsdC5zdF9tb2RlKSkKLSAgICAgICAgbWV0YWRh
dGEudHlwZSA9IEZpbGVNZXRhZGF0YTo6VHlwZURpcmVjdG9yeTsKLSAgICBlbHNlIGlmIChTX0lT
TE5LKHN0YXRSZXN1bHQuc3RfbW9kZSkpCi0gICAgICAgIG1ldGFkYXRhLnR5cGUgPSBGaWxlTWV0
YWRhdGE6OlR5cGVTeW1ib2xpY0xpbms7Ci0gICAgZWxzZQotICAgICAgICBtZXRhZGF0YS50eXBl
ID0gRmlsZU1ldGFkYXRhOjpUeXBlRmlsZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBib29sIGlz
SGlkZGVuID0gIWZpbGVuYW1lLmlzRW1wdHkoKSAmJiBmaWxlbmFtZVswXSA9PSAnLic7CisKKyAg
ICByZXR1cm4gRmlsZU1ldGFkYXRhIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGF0
UmVzdWx0LnN0X210aW1lKSwKKyAgICAgICAgc3RhdFJlc3VsdC5zdF9zaXplLAorICAgICAgICBp
c0hpZGRlbiwKKyAgICAgICAgdG9GaWxlTWV0YXRhVHlwZShzdGF0UmVzdWx0KQorICAgIH07Cit9
CisKK3N0ZDo6b3B0aW9uYWw8RmlsZU1ldGFkYXRhPiBmaWxlTWV0YWRhdGEoY29uc3QgU3RyaW5n
JiBwYXRoKQoreworICAgIHJldHVybiBmaWxlTWV0YWRhdGFVc2luZ0Z1bmN0aW9uKHBhdGgsICZn
ZXRGaWxlTFN0YXQpOworfQorCitzdGQ6Om9wdGlvbmFsPEZpbGVNZXRhZGF0YT4gZmlsZU1ldGFk
YXRhRm9sbG93aW5nU3ltbGlua3MoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiBm
aWxlTWV0YWRhdGFVc2luZ0Z1bmN0aW9uKHBhdGgsICZnZXRGaWxlU3RhdCk7CiB9CiAKIFN0cmlu
ZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJp
bmcmIGNvbXBvbmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmNwcAppbmRleCA2ZGM2ZDY0YWU4NzE4NWQwZjFj
ZDFlYTg3NzY4MDhkYTNjNjU1ZDdmLi5jODliNTI4M2UzOWRiNTk4MGJlMmI1ODYzYzhjNmQwMWMx
ZjNmZTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JE
YXRhRmlsZVJlZmVyZW5jZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9CbG9iRGF0YUZpbGVSZWZlcmVuY2UuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRl
ICJGaWxlLmgiCiAjaW5jbHVkZSAiRmlsZU1ldGFkYXRhLmgiCisjaW5jbHVkZSAiRmlsZVN5c3Rl
bS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTk1LDE4ICs5NiwxOCBAQCB2b2lkIEJs
b2JEYXRhRmlsZVJlZmVyZW5jZTo6c3RhcnRUcmFja2luZ01vZGlmaWNhdGlvbnMoKQogI2VuZGlm
CiAKICAgICAvLyBGSVhNRTogU29tZSBwbGF0Zm9ybXMgcHJvdmlkZSBiZXR0ZXIgd2F5cyB0byBs
aXN0ZW4gZm9yIGZpbGUgc3lzdGVtIG9iamVjdCBjaGFuZ2VzLCBjb25zaWRlciB1c2luZyB0aGVz
ZS4KLSAgICBGaWxlTWV0YWRhdGEgbWV0YWRhdGE7Ci0gICAgaWYgKCFnZXRGaWxlTWV0YWRhdGEo
bV9wYXRoLCBtZXRhZGF0YSwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSkKKyAgICBh
dXRvIG1ldGFkYXRhID0gZmlsZU1ldGFkYXRhRm9sbG93aW5nU3ltbGlua3MobV9wYXRoKTsKKyAg
ICBpZiAoIW1ldGFkYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2V4cGVjdGVkTW9kaWZp
Y2F0aW9uVGltZSA9IG1ldGFkYXRhLm1vZGlmaWNhdGlvblRpbWU7CisgICAgbV9leHBlY3RlZE1v
ZGlmaWNhdGlvblRpbWUgPSBtZXRhZGF0YS52YWx1ZSgpLm1vZGlmaWNhdGlvblRpbWU7CiAKICNp
ZiBFTkFCTEUoRklMRV9SRVBMQUNFTUVOVCkKICAgICBpZiAobV9yZXBsYWNlbWVudFNob3VsZEJl
R2VuZXJhdGVkKQogICAgICAgICByZXR1cm47CiAjZW5kaWYKIAotICAgIG1fc2l6ZSA9IG1ldGFk
YXRhLmxlbmd0aDsKKyAgICBtX3NpemUgPSBtZXRhZGF0YS52YWx1ZSgpLmxlbmd0aDsKIH0KIAog
dm9pZCBCbG9iRGF0YUZpbGVSZWZlcmVuY2U6OnByZXBhcmVGb3JGaWxlQWNjZXNzKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Jsb2JEYXRhRmlsZVJl
ZmVyZW5jZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Jsb2JE
YXRhRmlsZVJlZmVyZW5jZU1hYy5tbQppbmRleCA4ZGFjZTdhN2UwMjZhN2JkMjViOWUzYzI4NzE5
OGFmYWI3YzBiNjM1Li41YWFkMjNhNWMyNmMyZGU2ZDgzY2ZkOWM0MTg1M2JmMWUzZTU3NjNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9CbG9iRGF0YUZp
bGVSZWZlcmVuY2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9t
YWMvQmxvYkRhdGFGaWxlUmVmZXJlbmNlTWFjLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5B
QkxFKEZJTEVfUkVQTEFDRU1FTlQpCiAKICNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKKyNpbmNs
dWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSA8d3RmL1NvZnRMaW5raW5nLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC03OSw5ICs4MCw4IEBAIHZvaWQgQmxvYkRhdGFG
aWxlUmVmZXJlbmNlOjpnZW5lcmF0ZVJlcGxhY2VtZW50RmlsZSgpCiAKICAgICBtX3JlcGxhY2Vt
ZW50U2hvdWxkQmVHZW5lcmF0ZWQgPSBmYWxzZTsKICAgICBpZiAoIW1fcmVwbGFjZW1lbnRQYXRo
LmlzTnVsbCgpKSB7Ci0gICAgICAgIEZpbGVNZXRhZGF0YSBtZXRhZGF0YTsKLSAgICAgICAgaWYg
KGdldEZpbGVNZXRhZGF0YShtX3JlcGxhY2VtZW50UGF0aCwgbWV0YWRhdGEsIFNob3VsZEZvbGxv
d1N5bWJvbGljTGlua3M6OlllcykpCi0gICAgICAgICAgICBtX3NpemUgPSBtZXRhZGF0YS5sZW5n
dGg7CisgICAgICAgIGlmIChhdXRvIG1ldGFkYXRhID0gZmlsZU1ldGFkYXRhRm9sbG93aW5nU3lt
bGlua3MobV9yZXBsYWNlbWVudFBhdGgpKQorICAgICAgICAgICAgbV9zaXplID0gbWV0YWRhdGEu
dmFsdWUoKS5sZW5ndGg7CiAgICAgfQogCiAgICAgcmV2b2tlRmlsZUFjY2VzcygpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKaW5kZXgg
ZjRhYzFkMDdlNzg5MDVjNDc1NDBkMTFiZDgwNjk4ZDNjMDM5N2Y5MS4uNjU5ZmY5ZjA4YzA4YzY5
MDQyMzU5NjBkYjNiNmYzMjM3MjY4OWQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCkBAIC0yMzksMzUgKzIzOSw0NCBAQCBib29s
IGdldEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYgcGF0aCwgdGltZV90JiByZXN1
bHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZ2V0RmlsZU1ldGFkYXRhKGNvbnN0IFN0
cmluZyYgcGF0aCwgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSwgU2hvdWxkRm9sbG93U3ltYm9saWNM
aW5rcyBzaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzKQorc3RhdGljIEZpbGVNZXRhZGF0YTo6VHlw
ZSB0b0ZpbGVNZXRhdGFUeXBlKHN0cnVjdCBzdGF0IGZpbGVJbmZvKQoreworICAgIGlmIChTX0lT
RElSKGZpbGVJbmZvLnN0X21vZGUpKQorICAgICAgICByZXR1cm4gRmlsZU1ldGFkYXRhOjpUeXBl
OjpEaXJlY3Rvcnk7CisgICAgaWYgKFNfSVNMTksoZmlsZUluZm8uc3RfbW9kZSkpCisgICAgICAg
IHJldHVybiBGaWxlTWV0YWRhdGE6OlR5cGU6OlN5bWJvbGljTGluazsKKyAgICByZXR1cm4gRmls
ZU1ldGFkYXRhOjpUeXBlOjpGaWxlOworfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxGaWxlTWV0
YWRhdGE+IGZpbGVNZXRhZGF0YVVzaW5nRnVuY3Rpb24oY29uc3QgU3RyaW5nJiBwYXRoLCBpbnQg
KCpzdGF0RnVuYykoY29uc3QgY2hhciosIHN0cnVjdCBzdGF0KikpCiB7CiAgICAgQ1N0cmluZyBm
c1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKIAogICAgIGlmICghZnNSZXAu
ZGF0YSgpIHx8IGZzUmVwLmRhdGEoKVswXSA9PSAnXDAnKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5m
bzsKLQotICAgIGlmIChzaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzID09IFNob3VsZEZvbGxvd1N5
bWJvbGljTGlua3M6OlllcykgewotICAgICAgICBpZiAoc3RhdChmc1JlcC5kYXRhKCksICZmaWxl
SW5mbykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKGxzdGF0KGZzUmVwLmRhdGEoKSwgJmZpbGVJbmZvKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9CisgICAgaWYgKHN0YXRGdW5jKGZzUmVwLmRhdGEoKSwgJmZpbGVJbmZvKSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIFN0cmluZyBmaWxlbmFtZSA9IHBh
dGhHZXRGaWxlTmFtZShwYXRoKTsKKyAgICBib29sIGlzSGlkZGVuID0gIWZpbGVuYW1lLmlzRW1w
dHkoKSAmJiBmaWxlbmFtZVswXSA9PSAnLic7CisgICAgcmV0dXJuIEZpbGVNZXRhZGF0YSB7Cisg
ICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4oZmlsZUluZm8uc3RfbXRpbWUpLAorICAgICAgICBm
aWxlSW5mby5zdF9zaXplLAorICAgICAgICBpc0hpZGRlbiwKKyAgICAgICAgdG9GaWxlTWV0YXRh
VHlwZShmaWxlSW5mbykKKyAgICB9OworfQogCi0gICAgbWV0YWRhdGEubW9kaWZpY2F0aW9uVGlt
ZSA9IGZpbGVJbmZvLnN0X210aW1lOwotICAgIG1ldGFkYXRhLmlzSGlkZGVuID0gIWZpbGVuYW1l
LmlzRW1wdHkoKSAmJiBmaWxlbmFtZVswXSA9PSAnLic7Ci0gICAgbWV0YWRhdGEubGVuZ3RoID0g
ZmlsZUluZm8uc3Rfc2l6ZTsKLSAgICBpZiAoU19JU0RJUihmaWxlSW5mby5zdF9tb2RlKSkKLSAg
ICAgICAgbWV0YWRhdGEudHlwZSA9IEZpbGVNZXRhZGF0YTo6VHlwZURpcmVjdG9yeTsKLSAgICBl
bHNlIGlmIChTX0lTTE5LKGZpbGVJbmZvLnN0X21vZGUpKQotICAgICAgICBtZXRhZGF0YS50eXBl
ID0gRmlsZU1ldGFkYXRhOjpUeXBlU3ltYm9saWNMaW5rOwotICAgIGVsc2UKLSAgICAgICAgbWV0
YWRhdGEudHlwZSA9IEZpbGVNZXRhZGF0YTo6VHlwZUZpbGU7Ci0gICAgcmV0dXJuIHRydWU7Citz
dGQ6Om9wdGlvbmFsPEZpbGVNZXRhZGF0YT4gZmlsZU1ldGFkYXRhKGNvbnN0IFN0cmluZyYgcGF0
aCkKK3sKKyAgICByZXR1cm4gZmlsZU1ldGFkYXRhVXNpbmdGdW5jdGlvbihwYXRoLCAmbHN0YXQp
OworfQorCitzdGQ6Om9wdGlvbmFsPEZpbGVNZXRhZGF0YT4gZmlsZU1ldGFkYXRhRm9sbG93aW5n
U3ltbGlua3MoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiBmaWxlTWV0YWRhdGFV
c2luZ0Z1bmN0aW9uKHBhdGgsICZzdGF0KTsKIH0KIAogYm9vbCBjcmVhdGVTeW1ib2xpY0xpbmso
Y29uc3QgU3RyaW5nJiB0YXJnZXRQYXRoLCBjb25zdCBTdHJpbmcmIHN5bWJvbGljTGlua1BhdGgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKaW5kZXgg
MzVjZDZjYWEyNDkwNmMxYTExYzBjZDhiZTM3MGE5ZTNlZDVlNzkzZC4uYzc3YTkyZmMzNjg2Njg1
YWE1NmU2YzgyMjZhN2U1NTY1NDYwN2JlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9GaWxlU3lzdGVtV2luLmNwcApAQCAtMTU4LDM3ICsxNTgsNjEgQEAgc3RhdGljIFN0cmlu
ZyBnZXRGaW5hbFBhdGhOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1cm4gU3RyaW5n
OjphZG9wdChXVEZNb3ZlKGJ1ZmZlcikpOwogfQogCi1ib29sIGdldEZpbGVNZXRhZGF0YShjb25z
dCBTdHJpbmcmIHBhdGgsIEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEsIFNob3VsZEZvbGxvd1N5bWJv
bGljTGlua3Mgc2hvdWxkRm9sbG93U3ltYm9saWNMaW5rcykKK3N0YXRpYyBpbmxpbmUgaXNTeW1i
b2xpY0xpbmsoV0lOMzJfRklORF9EQVRBVyBmaW5kRGF0YSkKK3sKKyAgICByZXR1cm4gZmluZERh
dGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX1JFUEFSU0VfUE9JTlQgJiYgZmlu
ZERhdGEuZHdSZXNlcnZlZDAgPT0gSU9fUkVQQVJTRV9UQUdfU1lNTElOSzsKK30KKworc3RhdGlj
IEZpbGVNZXRhZGF0YTo6VHlwZSB0b0ZpbGVNZXRhZGF0YVR5cGUoV0lOMzJfRklORF9EQVRBVyBm
aW5kRGF0YSkKK3sKKyAgICBpZiAoZmluZERhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRU
UklCVVRFX0RJUkVDVE9SWSkKKyAgICAgICAgcmV0dXJuIEZpbGVNZXRhZGF0YTo6VHlwZTo6RGly
ZWN0b3J5OworICAgIGlmIChpc1N5bWJvbGljTGluayhmaW5kRGF0YSkpCisgICAgICAgIHJldHVy
biBGaWxlTWV0YWRhdGE6OlR5cGU6OlN5bWJvbGljTGluazsKKyAgICByZXR1cm4gRmlsZU1ldGFk
YXRhOjpUeXBlOjpGaWxlOworfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxGaWxlTWV0YWRhdGE+
IGZpbmREYXRhVG9GaWxlTWV0YWRhdGEoV0lOMzJfRklORF9EQVRBVyBmaW5kRGF0YSkKK3sKKyAg
ICBsb25nIGxvbmcgbGVuZ3RoOworICAgIGlmICghZ2V0RmlsZVNpemVGcm9tRmluZERhdGEoZmlu
ZERhdGEsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICB0aW1l
X3QgbW9kaWZpY2F0aW9uVGltZTsKKyAgICBnZXRGaWxlTW9kaWZpY2F0aW9uVGltZUZyb21GaW5k
RGF0YShmaW5kRGF0YSwgbW9kaWZpY2F0aW9uVGltZSk7CisKKyAgICByZXR1cm4gRmlsZU1ldGFk
YXRhIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtb2RpZmljYXRpb25UaW1lKSwKKyAg
ICAgICAgbGVuZ3RoLAorICAgICAgICBmaW5kRGF0YS5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9B
VFRSSUJVVEVfSElEREVOLAorICAgICAgICB0b0ZpbGVNZXRhZGF0YVR5cGUoZmluZERhdGEpCisg
ICAgfTsKK30KKworc3RkOjpvcHRpb25hbDxGaWxlTWV0YWRhdGE+IGZpbGVNZXRhZGF0YShjb25z
dCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRGF0YTsKICAgICBp
ZiAoIWdldEZpbmREYXRhKHBhdGgsIGZpbmREYXRhKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgYm9vbCBpc1N5bWJvbGljTGluayA9
IGZpbmREYXRhLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9SRVBBUlNFX1BPSU5U
ICYmIGZpbmREYXRhLmR3UmVzZXJ2ZWQwID09IElPX1JFUEFSU0VfVEFHX1NZTUxJTks7Ci0gICAg
aWYgKGlzU3ltYm9saWNMaW5rICYmIHNob3VsZEZvbGxvd1N5bWJvbGljTGlua3MgPT0gU2hvdWxk
Rm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSB7CisgICAgcmV0dXJuIGZpbmREYXRhVG9GaWxlTWV0
YWRhdGEoZmluZERhdGEpOworfQorCitzdGQ6Om9wdGlvbmFsPEZpbGVNZXRhZGF0YT4gZmlsZU1l
dGFkYXRhRm9sbG93aW5nU3ltbGlua3MoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIFdJTjMy
X0ZJTkRfREFUQVcgZmluZERhdGE7CisgICAgaWYgKCFnZXRGaW5kRGF0YShwYXRoLCBmaW5kRGF0
YSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoaXNTeW1ib2xpY0xp
bmsoZmluZERhdGEpKSB7CiAgICAgICAgIFN0cmluZyB0YXJnZXRQYXRoID0gZ2V0RmluYWxQYXRo
TmFtZShwYXRoKTsKICAgICAgICAgaWYgKHRhcmdldFBhdGguaXNOdWxsKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAg
ICBpZiAoIWdldEZpbmREYXRhKHRhcmdldFBhdGgsIGZpbmREYXRhKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaXNTeW1ib2xpY0xpbmsgPSBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgaWYgKCFnZXRGaWxlU2l6ZUZyb21G
aW5kRGF0YShmaW5kRGF0YSwgbWV0YWRhdGEubGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7Ci0gICAgZ2V0RmlsZU1vZGlmaWNhdGlv
blRpbWVGcm9tRmluZERhdGEoZmluZERhdGEsIG1vZGlmaWNhdGlvblRpbWUpOwotICAgIG1ldGFk
YXRhLm1vZGlmaWNhdGlvblRpbWUgPSBtb2RpZmljYXRpb25UaW1lOwotICAgIG1ldGFkYXRhLmlz
SGlkZGVuID0gZmluZERhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0hJRERF
TjsKLSAgICBpZiAoZmluZERhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJ
UkVDVE9SWSkKLSAgICAgICAgbWV0YWRhdGEudHlwZSA9IEZpbGVNZXRhZGF0YTo6VHlwZURpcmVj
dG9yeTsKLSAgICBlbHNlIGlmIChpc1N5bWJvbGljTGluaykKLSAgICAgICAgbWV0YWRhdGEudHlw
ZSA9IEZpbGVNZXRhZGF0YTo6VHlwZVN5bWJvbGljTGluazsKLSAgICBlbHNlCi0gICAgICAgIG1l
dGFkYXRhLnR5cGUgPSBGaWxlTWV0YWRhdGE6OlR5cGVGaWxlOwotCi0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIGZpbmREYXRhVG9GaWxlTWV0YWRhdGEoZmluZERhdGEpOwogfQogCiBib29s
IGNyZWF0ZVN5bWJvbGljTGluayhjb25zdCBTdHJpbmcmIHRhcmdldFBhdGgsIGNvbnN0IFN0cmlu
ZyYgc3ltYm9saWNMaW5rUGF0aCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCBhN2FhMjI4ZjJlOTIzNTE3ZDI4MGFlYTQ0YzU2N2MzYjIyM2YzNDhk
Li44ZjVkZWM5NDg2ZTMyNGZjNDcyNGQzYzI5ZmEyY2I2Zjc2OGFhODk5IDEwMDY0NAotLS0gYS9U
b29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIw
MTctMDktMDIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBIYXZl
IGdldEZpbGVNZXRhZGF0YSgpIHJldHVybiBhIHN0ZDo6b3B0aW9uYWw8RmlsZU1ldGFkYXRhPgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MjkzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpURVNUX0YpOgorCiAyMDE3LTA5LTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CiAKICAgICAgICAgV1NMIHNob3VsZCBzdXBwb3J0IHN0cnVjdHMKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9GaWxlU3lzdGVtLmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9GaWxlU3lzdGVtLmNwcAppbmRleCA5YWE3NmZjNGEz
MDBkM2U4ZDFmNWE5YTQ1OWI0Mzk0OTUwZWU2ZTRlLi43ZjZmOTc0OThkMTc2NTI5ZWE1YmI0OTNl
NDQ0ZmY5ZDQ4MzA2OTdmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvRmlsZVN5c3RlbS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0ZpbGVTeXN0ZW0uY3BwCkBAIC0xMjgsMTUgKzEyOCwxNSBAQCBURVNUX0YoRmlsZVN5c3Rl
bVRlc3QsIEZpbGVzSGF2ZVNhbWVWb2x1bWUpCiAKIFRFU1RfRihGaWxlU3lzdGVtVGVzdCwgR2V0
RmlsZU1ldGFkYXRhU3ltbGluaykKIHsKLSAgICBGaWxlTWV0YWRhdGEgc3ltbGlua01ldGFkYXRh
OwotICAgIEVYUEVDVF9UUlVFKGdldEZpbGVNZXRhZGF0YSh0ZW1wRmlsZVN5bWxpbmtQYXRoKCks
IHN5bWxpbmtNZXRhZGF0YSwgU2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pKTsKLSAgICBF
WFBFQ1RfVFJVRShzeW1saW5rTWV0YWRhdGEudHlwZSA9PSBGaWxlTWV0YWRhdGE6OlR5cGVTeW1i
b2xpY0xpbmspOwotICAgIEVYUEVDVF9GQUxTRShzdGF0aWNfY2FzdDxzaXplX3Q+KHN5bWxpbmtN
ZXRhZGF0YS5sZW5ndGgpID09IHN0cmxlbihGaWxlU3lzdGVtVGVzdERhdGEpKTsKLQotICAgIEZp
bGVNZXRhZGF0YSB0YXJnZXRNZXRhZGF0YTsKLSAgICBFWFBFQ1RfVFJVRShnZXRGaWxlTWV0YWRh
dGEodGVtcEZpbGVTeW1saW5rUGF0aCgpLCB0YXJnZXRNZXRhZGF0YSwgU2hvdWxkRm9sbG93U3lt
Ym9saWNMaW5rczo6WWVzKSk7Ci0gICAgRVhQRUNUX1RSVUUodGFyZ2V0TWV0YWRhdGEudHlwZSA9
PSBGaWxlTWV0YWRhdGE6OlR5cGVGaWxlKTsKLSAgICBFWFBFQ1RfRVEoc3RybGVuKEZpbGVTeXN0
ZW1UZXN0RGF0YSksIHN0YXRpY19jYXN0PHNpemVfdD4odGFyZ2V0TWV0YWRhdGEubGVuZ3RoKSk7
CisgICAgYXV0byBzeW1saW5rTWV0YWRhdGEgPSBmaWxlTWV0YWRhdGEodGVtcEZpbGVTeW1saW5r
UGF0aCgpKTsKKyAgICBBU1NFUlRfVFJVRShzeW1saW5rTWV0YWRhdGEuaGFzX3ZhbHVlKCkpOwor
ICAgIEVYUEVDVF9UUlVFKHN5bWxpbmtNZXRhZGF0YS52YWx1ZSgpLnR5cGUgPT0gRmlsZU1ldGFk
YXRhOjpUeXBlOjpTeW1ib2xpY0xpbmspOworICAgIEVYUEVDVF9GQUxTRShzdGF0aWNfY2FzdDxz
aXplX3Q+KHN5bWxpbmtNZXRhZGF0YS52YWx1ZSgpLmxlbmd0aCkgPT0gc3RybGVuKEZpbGVTeXN0
ZW1UZXN0RGF0YSkpOworCisgICAgYXV0byB0YXJnZXRNZXRhZGF0YSA9IGZpbGVNZXRhZGF0YUZv
bGxvd2luZ1N5bWxpbmtzKHRlbXBGaWxlU3ltbGlua1BhdGgoKSk7CisgICAgQVNTRVJUX1RSVUUo
dGFyZ2V0TWV0YWRhdGEuaGFzX3ZhbHVlKCkpOworICAgIEVYUEVDVF9UUlVFKHRhcmdldE1ldGFk
YXRhLnZhbHVlKCkudHlwZSA9PSBGaWxlTWV0YWRhdGE6OlR5cGU6OkZpbGUpOworICAgIEVYUEVD
VF9FUShzdHJsZW4oRmlsZVN5c3RlbVRlc3REYXRhKSwgc3RhdGljX2Nhc3Q8c2l6ZV90Pih0YXJn
ZXRNZXRhZGF0YS52YWx1ZSgpLmxlbmd0aCkpOwogfQogCiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>