<?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>213828</bug_id>
          
          <creation_ts>2020-06-30 22:20:53 -0700</creation_ts>
          <short_desc>[CG] Implement image transcoding</short_desc>
          <delta_ts>2022-02-10 16:49:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>213347</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>213347</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1667836</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-06-30 22:20:53 -0700</bug_when>
    <thetext>Implement a function that transcodes an image.

Source: one of the formats that CG supports for decoding.
Destination: one of the formats that CG supports for encoding.

The output will be a temporary file with the preferred extension of the destination type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667878</commentid>
    <comment_count>1</comment_count>
      <attachid>403280</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-07-01 02:29:53 -0700</bug_when>
    <thetext>Created attachment 403280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668011</commentid>
    <comment_count>2</comment_count>
      <attachid>403305</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-07-01 11:28:12 -0700</bug_when>
    <thetext>Created attachment 403305
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668016</commentid>
    <comment_count>3</comment_count>
      <attachid>403305</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-01 11:53:34 -0700</bug_when>
    <thetext>Comment on attachment 403305
Patch

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

&gt; Source/WTF/wtf/cocoa/FileSystemCocoa.mm:116
&gt; +    if (pathMinusPrefixLength &gt; PATH_MAX)

I believe there can be limits on filenames that are much more restrictive than PATH_MAX, which is a limit on the length of a full path passed to POSIX API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668019</commentid>
    <comment_count>4</comment_count>
      <attachid>403305</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-07-01 12:04:06 -0700</bug_when>
    <thetext>Comment on attachment 403305
Patch

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

&gt;&gt; Source/WTF/wtf/cocoa/FileSystemCocoa.mm:116
&gt;&gt; +    if (pathMinusPrefixLength &gt; PATH_MAX)
&gt; 
&gt; I believe there can be limits on filenames that are much more restrictive than PATH_MAX, which is a limit on the length of a full path passed to POSIX API.

What are these limits? Can you please explain? I thought I was fixing a bug in the existing code based on your review in https://bugs.webkit.org/show_bug.cgi?id=213347#c23.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668034</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-01 13:06:50 -0700</bug_when>
    <thetext>For example, the historical &quot;HFS+&quot; file system on macOS had a limit of 255 UTF-16 characters for filenames. That can’t be turned into a specific limit on UTF-8, because it depends on which character. PATH_MAX is way higher than 255. Older Mac file systems had even shorter limits. If the data is in a directory not guaranteed to be on the boot volume, there could be even more variation in what kind of file system it’s on and what the limits are.

Here’s a page talking a little bit about this just on Mac.

https://apple.stackexchange.com/questions/86611/does-os-x-enforce-a-maximum-filename-length-or-character-restriction

Seems possible this changed with APFS. Also, not sure where this directory is. Probably less risk of different types of file systems if the file is on the boot volume, but also if the name comes from a different file system, then they name might *already* be too long to just reuse it on the boot volume.

Generally we can’t take an existing file name and make it longer and expect it to still work. There’s no trivial &quot;this is the length maximum&quot; trick that I know of either. Safest is to find a way to never invent a filename based on another filename. If we really have to translate one into another we can probably find some technique that prevents us from hitting limits, but we probably need to test at the edge cases. Maybe construct the longest possible UTF-16 filename, and also the longest possible UTF-8 filename. Unfortunately even making those tests work portably can be a pain.

I would typically sidestep this by trying to make sure that the local filename for any temporary file is randomly generated and does not have any effect on what the user sees. But maybe that’s not practical either!

Maybe we can just stick with this &quot;make the filename longer&quot; thing because it won’t be a headache in practice, but then we have to still test the edge case to see that the error handling code doesn’t do anything crazy. Ideally it makes it clear that the length of the name is the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668054</commentid>
    <comment_count>6</comment_count>
      <attachid>403305</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-01 13:38:34 -0700</bug_when>
    <thetext>Comment on attachment 403305
Patch

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

&gt;&gt;&gt; Source/WTF/wtf/cocoa/FileSystemCocoa.mm:116
&gt;&gt;&gt; +    if (pathMinusPrefixLength &gt; PATH_MAX)
&gt;&gt; 
&gt;&gt; I believe there can be limits on filenames that are much more restrictive than PATH_MAX, which is a limit on the length of a full path passed to POSIX API.
&gt; 
&gt; What are these limits? Can you please explain? I thought I was fixing a bug in the existing code based on your review in https://bugs.webkit.org/show_bug.cgi?id=213347#c23.

Added some more comments in the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668865</commentid>
    <comment_count>7</comment_count>
      <attachid>403545</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-07-04 20:22:24 -0700</bug_when>
    <thetext>Created attachment 403545
Patch 212489 213828</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668866</commentid>
    <comment_count>8</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-07-04 20:31:05 -0700</bug_when>
    <thetext>The reasons for trying to create the temporary file with a prefix derived from the original file with the extension of the transcoded image were to be able to recognize it in Finder while debugging and be able to preview it. But there is no actual technical reason to stick with this plan since CG is capable of determining the right format of the image even if the file has no file extension or if it has the wrong file extension.

So I changed the patch to create the temporary file the same way other places are doing. A literal prefix is passed without any file extension to FileSystem::openTemporaryFile().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668868</commentid>
    <comment_count>9</comment_count>
      <attachid>403546</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-07-04 21:40:53 -0700</bug_when>
    <thetext>Created attachment 403546
Patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669134</commentid>
    <comment_count>10</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-07-06 13:21:05 -0700</bug_when>
    <thetext>No code is using the new function. So I combined transcoding function with the patch of bug 213347. So I am resolving the bug as a dupe of the other bug.

*** This bug has been marked as a duplicate of bug 213347 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403280</attachid>
            <date>2020-07-01 02:29:53 -0700</date>
            <delta_ts>2020-07-01 11:28:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213828-20200701022952.patch</filename>
            <type>text/plain</type>
            <size>11114</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjM2NjYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDIwLTA3LTAxICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgW0NHXSBJbXBsZW1lbnQgaW1hZ2Ug
dHJhbnNjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxMzgyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogd3RmL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om9w
ZW5UZW1wb3JhcnlGaWxlKToKKyAgICAgICAgKiB3dGYvY29jb2EvRmlsZVN5c3RlbUNvY29hLm1t
OgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6b3BlblRlbXBvcmFyeUZpbGUpOgorICAg
ICAgICAqIHd0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcDoKKyAgICAgICAgKFdURjo6RmlsZVN5
c3RlbUltcGw6Om9wZW5UZW1wb3JhcnlGaWxlKToKKyAgICAgICAgKiB3dGYvcG9zaXgvRmlsZVN5
c3RlbVBPU0lYLmNwcDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om9wZW5UZW1wb3Jh
cnlGaWxlKToKKyAgICAgICAgKiB3dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorICAgICAgICAo
V1RGOjpGaWxlU3lzdGVtSW1wbDo6b3BlblRlbXBvcmFyeUZpbGUpOgorCiAyMDIwLTA2LTI5ICBZ
dXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dURl0gQWRkIG1v
cmUgU3RyaW5nVmlldyAvIEFTQ0lJTGl0ZXJhbCBoZWxwZXIgZnVuY3Rpb25zIGFuZCBhZGQgSUNV
RGVsZXRlcgpJbmRleDogU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMjYzNjY2KQorKysgU291cmNl
L1dURi93dGYvRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAg
V1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBzdHJpbmdGcm9tRmlsZQogaW5saW5lIGJvb2wgaXNI
YW5kbGVWYWxpZChjb25zdCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkgeyByZXR1cm4gaGFu
ZGxlICE9IGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7IH0KIAogLy8gUHJlZml4IGlzIHdoYXQg
dGhlIGZpbGVuYW1lIHNob3VsZCBiZSBwcmVmaXhlZCB3aXRoLCBub3QgdGhlIGZ1bGwgcGF0aC4K
LVdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5n
JiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYpOworV1RGX0VYUE9SVF9QUklWQVRFIFN0cmlu
ZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFu
ZGxlJiwgY29uc3QgU3RyaW5nJiBzdWZmaXggPSB7IH0pOwogV1RGX0VYUE9SVF9QUklWQVRFIFBs
YXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9k
ZSwgRmlsZUFjY2Vzc1Blcm1pc3Npb24gPSBGaWxlQWNjZXNzUGVybWlzc2lvbjo6QWxsLCBib29s
IGZhaWxJZkZpbGVFeGlzdHMgPSBmYWxzZSk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbG9z
ZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJik7CiAvLyBSZXR1cm5zIHRoZSByZXN1bHRpbmcgb2Zm
c2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSBpZiBzdWNjZXNzZnVsLCAtMSBvdGhl
cndpc2UuCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9jb2NvYS9GaWxlU3lzdGVtQ29jb2EubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvY29jb2EvRmlsZVN5c3RlbUNvY29hLm1tCShyZXZp
c2lvbiAyNjM2NjYpCisrKyBTb3VyY2UvV1RGL3d0Zi9jb2NvYS9GaWxlU3lzdGVtQ29jb2EubW0J
KHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRo
KCkKICAgICByZXR1cm4gTlNIb21lRGlyZWN0b3J5KCk7CiB9CiAKLVN0cmluZyBvcGVuVGVtcG9y
YXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBwbGF0Zm9y
bUZpbGVIYW5kbGUpCitTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVm
aXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgcGxhdGZvcm1GaWxlSGFuZGxlLCBjb25zdCBTdHJpbmcm
IHN1ZmZpeCkKIHsKICAgICBwbGF0Zm9ybUZpbGVIYW5kbGUgPSBpbnZhbGlkUGxhdGZvcm1GaWxl
SGFuZGxlOwogCkBAIC0xMDgsMTQgKzEwOCwyNyBAQCBTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUo
Y29uc3QgU3RyaW5nJiBwCiAgICAgLy8gZml4ZWQgaW4gYWxsIGlPUyBTaW11bGF0b3IgdmVyc2lv
bnMgdGhhdCB3ZSB1c2UuCiAgICAgaWYgKHRlbXBvcmFyeUZpbGVQYXRoLmxhc3QoKSAhPSAnLycp
CiAgICAgICAgIHRlbXBvcmFyeUZpbGVQYXRoLmFwcGVuZCgnLycpOworICAgIAorICAgIENTdHJp
bmcgcHJlZml4VXRmOCA9IHByZWZpeC51dGY4KCk7CisgICAgQ1N0cmluZyBzdWZmaXhVdGY4ID0g
c3VmZml4LnV0ZjgoKTsKKyAgICBzaXplX3QgcGF0aE1pbnVzUHJlZml4TGVuZ3RoID0gdGVtcG9y
YXJ5RmlsZVBhdGguc2l6ZSgpICsgNiArIHN1ZmZpeFV0ZjgubGVuZ3RoKCkgKyAxOworCisgICAg
Ly8gVGhlIHByZWZpeCBjYW4gYmUgaWdub3JlZCBjb21wbGV0ZWx5IGJ1dCB0aGUgd2hvbGUgc3Vm
Zml4IGhhcyB0byBiZSBpbmNsdWRlZC4KKyAgICBpZiAocGF0aE1pbnVzUHJlZml4TGVuZ3RoID4g
UEFUSF9NQVgpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAorICAgIC8vIE1ha2Ugc3VyZSB0
aGUgbGVuZ3RoIG9mIHRlbXBvcmFyeUZpbGVQYXRoIGRvZXMgbm90IGV4Y2VlZCBQQVRIX01BWC4K
KyAgICBzaXplX3QgcHJlZml4TGVuZ3RoID0gc3RkOjptaW4ocHJlZml4VXRmOC5sZW5ndGgoKSwg
UEFUSF9NQVggLSBwYXRoTWludXNQcmVmaXhMZW5ndGgpOworICAgIAogICAgIC8vIEFwcGVuZCB0
aGUgZmlsZSBuYW1lLgotICAgIENTdHJpbmcgcHJlZml4VXRmOCA9IHByZWZpeC51dGY4KCk7Ci0g
ICAgdGVtcG9yYXJ5RmlsZVBhdGguYXBwZW5kKHByZWZpeFV0ZjguZGF0YSgpLCBwcmVmaXhVdGY4
Lmxlbmd0aCgpKTsKKyAgICB0ZW1wb3JhcnlGaWxlUGF0aC5hcHBlbmQocHJlZml4VXRmOC5kYXRh
KCksIHByZWZpeExlbmd0aCk7CiAgICAgdGVtcG9yYXJ5RmlsZVBhdGguYXBwZW5kKCJYWFhYWFgi
LCA2KTsKKworICAgIC8vIEFwcGVuZCB0aGUgZmlsZSBuYW1lIHN1ZmZpeC4KKyAgICB0ZW1wb3Jh
cnlGaWxlUGF0aC5hcHBlbmQoc3VmZml4VXRmOC5kYXRhKCksIHN1ZmZpeFV0ZjgubGVuZ3RoKCkp
OwogICAgIHRlbXBvcmFyeUZpbGVQYXRoLmFwcGVuZCgnXDAnKTsKIAotICAgIHBsYXRmb3JtRmls
ZUhhbmRsZSA9IG1rc3RlbXAodGVtcG9yYXJ5RmlsZVBhdGguZGF0YSgpKTsKKyAgICBwbGF0Zm9y
bUZpbGVIYW5kbGUgPSBta3N0ZW1wcyh0ZW1wb3JhcnlGaWxlUGF0aC5kYXRhKCksIHN1ZmZpeFV0
ZjgubGVuZ3RoKCkpOwogICAgIGlmIChwbGF0Zm9ybUZpbGVIYW5kbGUgPT0gaW52YWxpZFBsYXRm
b3JtRmlsZUhhbmRsZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcAkocmV2aXNpb24gMjYzNjY2KQorKysgU291cmNl
L1dURi93dGYvZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw3
ICszMjYsNyBAQCBWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluCiAgICAg
cmV0dXJuIGVudHJpZXM7CiB9CiAKLVN0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJp
bmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCitTdHJpbmcgb3BlblRlbXBv
cmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxl
LCBjb25zdCBTdHJpbmcmKQogewogICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGZpbGVuYW1lKGdfc3Ry
ZHVwX3ByaW50ZigiJXMlcyIsIHByZWZpeC51dGY4KCkuZGF0YSgpLCBjcmVhdGVDYW5vbmljYWxV
VUlEU3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpOwogICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHRlbXBQ
YXRoKGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdG1wX2RpcigpLCBmaWxlbmFtZS5nZXQoKSwgbnVs
bHB0cikpOwpJbmRleDogU291cmNlL1dURi93dGYvcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCShy
ZXZpc2lvbiAyNjM2NjYpCisrKyBTb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVgu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDIsNyArNDQyLDcgQEAgYm9vbCBnZXRWb2x1bWVGcmVl
U3BhY2UoY29uc3QgU3RyaW5nJiBwYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotU3RyaW5nIG9w
ZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUm
IGhhbmRsZSkKK1N0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwg
UGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgY2hhciBi
dWZmZXJbUEFUSF9NQVhdOwogICAgIGNvbnN0IGNoYXIqIHRtcERpciA9IGdldGVudigiVE1QRElS
Iik7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCShyZXZpc2lvbiAyNjM2
NjYpCisrKyBTb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwNCw3ICs0MDQsNyBAQCBzdGF0aWMgU3RyaW5nIGdlbmVyYXRlVGVtcG9yYXJ5UGF0
aChjb25zCiAgICAgcmV0dXJuIHByb3Bvc2VkUGF0aDsKIH0KIAotU3RyaW5nIG9wZW5UZW1wb3Jh
cnlGaWxlKGNvbnN0IFN0cmluZyYsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQorU3RyaW5n
IG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFu
ZGxlLCBjb25zdCBTdHJpbmcmKQogewogICAgIGhhbmRsZSA9IElOVkFMSURfSEFORExFX1ZBTFVF
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjYzNzkwKQorKysgU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAyMC0wNy0wMSAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFtDR10gSW1w
bGVtZW50IGltYWdlIHRyYW5zY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTM4MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtL2NnL0NHVXRpbGl0aWVzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6dHJhbnNjb2RlSW1hZ2UpOgorICAgICAgICAoV2ViS2l0Ojp0cmFuc2NvZGVJbWFn
ZXMpOgorICAgICAgICAqIFBsYXRmb3JtL2NnL0NHVXRpbGl0aWVzLmg6CisKIDIwMjAtMDctMDEg
IFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgTmV0d29y
a1JUQ1Byb3ZpZGVyIHJlY2VpdmUgSVBDIG1lc3NhZ2VzIGZyb20gYSBiYWNrZ3JvdW5kIHRocmVh
ZApJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jZy9DR1V0aWxpdGllcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jZy9DR1V0aWxpdGllcy5jcHAJKHJldmlz
aW9uIDI2MzY2NikKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2cvQ0dVdGlsaXRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkNHVXRpbGl0aWVzLmgiCiAKKyNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1VUSVV0aWxpdGllcy5oPgorI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBwYWludElt
YWdlKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0ltYWdlUmVmIGltYWdlLCBDR0Zsb2F0IHNjYWxl
RmFjdG9yLCBDR1BvaW50IGRlc3RpbmF0aW9uLCBDR1JlY3Qgc291cmNlKQpAQCAtNDYsNCArNTIs
ODIgQEAgdm9pZCBwYWludEltYWdlKENHQ29udGV4dFJlZiBjb250ZXh0LCBDRwogICAgIENHQ29u
dGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiB9CiAKK1N0cmluZyB0cmFuc2NvZGVJbWFnZShj
b25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgQVNTRVJU
KG1pbWVUeXBlLnN0YXJ0c1dpdGgoImltYWdlLyJfcykpOworCisgICAgLy8gQ3JlYXRlIHRoZSBp
bWFnZSBzb3VyY2UuCisgICAgYXV0byBzb3VyY2VVUkwgPSBhZG9wdENGKENGVVJMQ3JlYXRlV2l0
aEZpbGVTeXN0ZW1QYXRoKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBhdGguY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIGZhbHNlKSk7CisgICAgYXV0byBzb3VyY2Ug
PSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVXaXRoVVJMKHNvdXJjZVVSTC5nZXQoKSwgbnVs
bHB0cikpOworICAgIGlmICghc291cmNlKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRF9X
SVRIX01FU1NBR0UoIlNvdXJjZSBwYXRoIGlzIG5vdCBhIHZhbGlkIGltYWdlLiIpOworICAgICAg
ICByZXR1cm4gcGF0aDsKKyAgICB9CisKKyAgICBhdXRvIHNvdXJjZVVUSSA9IFN0cmluZyhDR0lt
YWdlU291cmNlR2V0VHlwZShzb3VyY2UuZ2V0KCkpKTsKKyAgICBhdXRvIHJlcGxhY2VtZW50VVRJ
ID0gV2ViQ29yZTo6VVRJRnJvbU1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBpZiAoc291cmNlVVRJ
ID09IHJlcGxhY2VtZW50VVRJKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRF9XSVRIX01F
U1NBR0UoIlNvdXJjZSBpbWFnZSBhbHJlYWR5IGhhcyB0aGUgcmVwbGFjZW1lbnQgTUlNRSB0eXBl
LiIpOworICAgICAgICByZXR1cm4gcGF0aDsKKyAgICB9CisKKyAgICAvLyBDb21wdXRlIHRoZSB0
ZW1wb3JhcnkgZmlsZSBuYW1lIHByZWZpeCBhbmQgZmlsZSBleHRlbnNpb24uCisgICAgYXV0byBj
b21wb25lbnRzID0gRmlsZVN5c3RlbTo6cGF0aEdldEZpbGVOYW1lKHBhdGgpLnNwbGl0KCcuJyk7
CisgICAgYXV0byBleHRlbnNpb24gPSBXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVm
ZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgYXV0byBwcmVmaXggPSBt
YWtlU3RyaW5nKGNvbXBvbmVudHMuZmlyc3QoKSwgIl8iX3MpOworICAgIGF1dG8gc3VmZml4ID0g
bWFrZVN0cmluZygiLiJfcywgZXh0ZW5zaW9uKTsKKworICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFy
eSBmaWxlLgorICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSByZXBsYWNlbWVudEZp
bGVIYW5kbGU7CisgICAgU3RyaW5nIHJlcGxhY2VtZW50UGF0aCA9IEZpbGVTeXN0ZW06Om9wZW5U
ZW1wb3JhcnlGaWxlKHByZWZpeCwgcmVwbGFjZW1lbnRGaWxlSGFuZGxlLCBzdWZmaXgpOworICAg
IGlmIChyZXBsYWNlbWVudEZpbGVIYW5kbGUgPT0gRmlsZVN5c3RlbTo6aW52YWxpZFBsYXRmb3Jt
RmlsZUhhbmRsZSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRURfV0lUSF9NRVNTQUdFKCJS
ZXBsYWNlbWVudCBpbWFnZSBjYW4ndCBiZSBjcmVhdGVkLiIpOworICAgICAgICByZXR1cm4gcGF0
aDsKKyAgICB9CisKKyAgICAvLyBDcmVhdGUgdGhlIGRhdGEgY29uc3VtZXIuCisgICAgQ0dEYXRh
Q29uc3VtZXJDYWxsYmFja3MgY2FsbGJhY2tzID0geyBbXSh2b2lkICppbmZvLCBjb25zdCB2b2lk
KiBidWZmZXIsIHNpemVfdCBjb3VudCkgLT4gc2l6ZV90IHsKKyAgICAgICAgYXV0byBwbGF0Zm9y
bUZpbGVIYW5kbGUgPSAqc3RhdGljX2Nhc3Q8RmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxl
Kj4oaW5mbyk7CisgICAgICAgIHJldHVybiBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShwbGF0Zm9y
bUZpbGVIYW5kbGUsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihidWZmZXIpLCBjb3VudCk7Cisg
ICAgfSwgbnVsbHB0ciB9OworCisgICAgLy8gQ3JlYXRlIHRoZSBpbWFnZSByZXBsYWNlbWVudC4K
KyAgICBhdXRvIGNvbnN1bWVyID0gYWRvcHRDRihDR0RhdGFDb25zdW1lckNyZWF0ZSgmcmVwbGFj
ZW1lbnRGaWxlSGFuZGxlLCAmY2FsbGJhY2tzKSk7CisgICAgYXV0byByZXBsYWNlbWVudCA9IGFk
b3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGFDb25zdW1lcihjb25zdW1lci5n
ZXQoKSwgcmVwbGFjZW1lbnRVVEkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgMSwgbnVsbHB0cikp
OworCisgICAgLy8gV3JpdGUgdGhlIHNvdXJjZSBpbWFnZSB0byB0aGUgcmVwbGFjZW1lbnQgaW1h
Z2UuCisgICAgc2l6ZV90IGluZGV4ID0gQ0dJbWFnZVNvdXJjZUdldFByaW1hcnlJbWFnZUluZGV4
KHNvdXJjZS5nZXQoKSk7CisgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2VGcm9tU291cmNl
KHJlcGxhY2VtZW50LmdldCgpLCBzb3VyY2UuZ2V0KCksIGluZGV4LCBudWxscHRyKTsKKyAgICBD
R0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShyZXBsYWNlbWVudC5nZXQoKSk7CisgICAgRmlsZVN5
c3RlbTo6Y2xvc2VGaWxlKHJlcGxhY2VtZW50RmlsZUhhbmRsZSk7CisKKyAgICByZXR1cm4gcmVw
bGFjZW1lbnRQYXRoOworfQorCitWZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGVJbWFnZXMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWxsb3dlZE1JTUVU
eXBlcykKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiByZXBsYWNlbWVudFBhdGhzOworICAgIFN0cmlu
ZyBwcmVmZXJyZWRFbmNvZGluZ01JTUVUeXBlOworCisgICAgZm9yIChhdXRvIG1pbWVUeXBlIDog
YWxsb3dlZE1JTUVUeXBlcykgeworICAgICAgICBpZiAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3Ry
eTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKSB7CisgICAg
ICAgICAgICBwcmVmZXJyZWRFbmNvZGluZ01JTUVUeXBlID0gbWltZVR5cGU7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChwcmVmZXJyZWRFbmNvZGluZ01J
TUVUeXBlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnRQYXRoczsKKworICAg
IGZvciAoYXV0byYgcGF0aCA6IHBhdGhzKSB7CisgICAgICAgIGF1dG8gbWltZVR5cGUgPSBXZWJD
b3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgocGF0aCk7CisgICAgICAg
IGlmIChhbGxvd2VkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSkKKyAgICAgICAgICAgIHJl
cGxhY2VtZW50UGF0aHMuYXBwZW5kKG51bGxTdHJpbmcoKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHJlcGxhY2VtZW50UGF0aHMuYXBwZW5kKHRyYW5zY29kZUltYWdlKHBhdGgsIHByZWZl
cnJlZEVuY29kaW5nTUlNRVR5cGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVwbGFjZW1lbnRQ
YXRoczsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL2NnL0NHVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9jZy9DR1V0aWxpdGllcy5oCShyZXZpc2lvbiAyNjM2NjYpCisrKyBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL2NnL0NHVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEzICsyMywx
MiBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYg
Q0dVdGlsaXRpZXNfaAotI2RlZmluZSBDR1V0aWxpdGllc19oCisjcHJhZ21hIG9uY2UKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgcGFpbnRJbWFnZShDR0NvbnRleHRSZWYsIENHSW1hZ2VS
ZWYsIENHRmxvYXQgc2NhbGVGYWN0b3IsIENHUG9pbnQgZGVzdGluYXRpb24sIENHUmVjdCBzb3Vy
Y2UpOworU3RyaW5nIHRyYW5zY29kZUltYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSk7CitWZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGVJbWFnZXMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWxsb3dlZE1JTUVUeXBl
cyk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gQ0dVdGlsaXRpZXNfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403305</attachid>
            <date>2020-07-01 11:28:12 -0700</date>
            <delta_ts>2020-07-04 20:22:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213828-20200701112811.patch</filename>
            <type>text/plain</type>
            <size>11858</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjM2NjYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDIwLTA3LTAxICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgW0NHXSBJbXBsZW1lbnQgaW1hZ2Ug
dHJhbnNjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxMzgyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFsbG93IGEgc3VmZml4IHRvIGJlIGluY2x1ZGVkIGluIHRoZSB0ZW1wb3JhcnkgZmlsZSBu
YW1lLiBUaGUgZ29hbCBpcyB0bworICAgICAgICBtYWtlIGl0IHBvc3NpYmxlIHRvIGNyZWF0ZSB0
ZW1wb3JhcnkgaW1hZ2UgZmlsZXMgd2l0aCB2YWxpZCBleHRlbnNpb25zLgorCisgICAgICAgICog
d3RmL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdURjo6RmlsZVN5c3RlbUltcGw6Om9wZW5UZW1w
b3JhcnlGaWxlKToKKyAgICAgICAgKiB3dGYvY29jb2EvRmlsZVN5c3RlbUNvY29hLm1tOgorICAg
ICAgICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6b3BlblRlbXBvcmFyeUZpbGUpOgorICAgICAgICBF
bnN1cmUgdGhlIGxlbmd0aCBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUgZG9lcyBub3QgZXhjZWVkIFBB
VEhfTUFYLgorCisgICAgICAgICogd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwOgorICAgICAg
ICAoV1RGOjpGaWxlU3lzdGVtSW1wbDo6b3BlblRlbXBvcmFyeUZpbGUpOgorICAgICAgICAqIHd0
Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwOgorICAgICAgICAoV1RGOjpGaWxlU3lzdGVtSW1w
bDo6b3BlblRlbXBvcmFyeUZpbGUpOgorICAgICAgICAqIHd0Zi93aW4vRmlsZVN5c3RlbVdpbi5j
cHA6CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW1JbXBsOjpvcGVuVGVtcG9yYXJ5RmlsZSk6CisK
IDIwMjAtMDYtMjkgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbV1RGXSBBZGQgbW9yZSBTdHJpbmdWaWV3IC8gQVNDSUlMaXRlcmFsIGhlbHBlciBmdW5jdGlv
bnMgYW5kIGFkZCBJQ1VEZWxldGVyCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmlsZVN5c3RlbS5oCShyZXZpc2lvbiAyNjM2
NjYpCisrKyBTb3VyY2UvV1RGL3d0Zi9GaWxlU3lzdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
NSw3ICsxNDUsNyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHN0cmluZ0Zyb21GaWxlCiBp
bmxpbmUgYm9vbCBpc0hhbmRsZVZhbGlkKGNvbnN0IFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxl
KSB7IHJldHVybiBoYW5kbGUgIT0gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsgfQogCiAvLyBQ
cmVmaXggaXMgd2hhdCB0aGUgZmlsZW5hbWUgc2hvdWxkIGJlIHByZWZpeGVkIHdpdGgsIG5vdCB0
aGUgZnVsbCBwYXRoLgotV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBvcGVuVGVtcG9yYXJ5Rmls
ZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJik7CitXVEZfRVhQT1JU
X1BSSVZBVEUgU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBQ
bGF0Zm9ybUZpbGVIYW5kbGUmLCBjb25zdCBTdHJpbmcmIHN1ZmZpeCA9IHsgfSk7CiBXVEZfRVhQ
T1JUX1BSSVZBVEUgUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0
aCwgRmlsZU9wZW5Nb2RlLCBGaWxlQWNjZXNzUGVybWlzc2lvbiA9IEZpbGVBY2Nlc3NQZXJtaXNz
aW9uOjpBbGwsIGJvb2wgZmFpbElmRmlsZUV4aXN0cyA9IGZhbHNlKTsKIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmKTsKIC8vIFJldHVybnMgdGhl
IHJlc3VsdGluZyBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIGlmIHN1Y2Nl
c3NmdWwsIC0xIG90aGVyd2lzZS4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL2NvY29hL0ZpbGVTeXN0
ZW1Db2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9jb2NvYS9GaWxlU3lzdGVt
Q29jb2EubW0JKHJldmlzaW9uIDI2MzY2NikKKysrIFNvdXJjZS9XVEYvd3RmL2NvY29hL0ZpbGVT
eXN0ZW1Db2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCBTdHJpbmcgaG9t
ZURpcmVjdG9yeVBhdGgoKQogICAgIHJldHVybiBOU0hvbWVEaXJlY3RvcnkoKTsKIH0KIAotU3Ry
aW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBQbGF0Zm9ybUZpbGVI
YW5kbGUmIHBsYXRmb3JtRmlsZUhhbmRsZSkKK1N0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25z
dCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBwbGF0Zm9ybUZpbGVIYW5kbGUs
IGNvbnN0IFN0cmluZyYgc3VmZml4KQogewogICAgIHBsYXRmb3JtRmlsZUhhbmRsZSA9IGludmFs
aWRQbGF0Zm9ybUZpbGVIYW5kbGU7CiAKQEAgLTEwOCwxNCArMTA4LDI3IEBAIFN0cmluZyBvcGVu
VGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHAKICAgICAvLyBmaXhlZCBpbiBhbGwgaU9TIFNp
bXVsYXRvciB2ZXJzaW9ucyB0aGF0IHdlIHVzZS4KICAgICBpZiAodGVtcG9yYXJ5RmlsZVBhdGgu
bGFzdCgpICE9ICcvJykKICAgICAgICAgdGVtcG9yYXJ5RmlsZVBhdGguYXBwZW5kKCcvJyk7Cisg
ICAgCisgICAgQ1N0cmluZyBzdWZmaXhVdGY4ID0gc3VmZml4LnV0ZjgoKTsKKyAgICBzaXplX3Qg
cGF0aE1pbnVzUHJlZml4TGVuZ3RoID0gdGVtcG9yYXJ5RmlsZVBhdGguc2l6ZSgpICsgNiArIHN1
ZmZpeFV0ZjgubGVuZ3RoKCkgKyAxOwogCi0gICAgLy8gQXBwZW5kIHRoZSBmaWxlIG5hbWUuCisg
ICAgLy8gVGhlIHByZWZpeCBjYW4gYmUgaWdub3JlZCBjb21wbGV0ZWx5IGJ1dCBldmVyeXRoaW5n
IGVsc2UgaGFzIHRvIGJlIGluY2x1ZGVkLgorICAgIGlmIChwYXRoTWludXNQcmVmaXhMZW5ndGgg
PiBQQVRIX01BWCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gTWFrZSBzdXJl
IHRoZSBsZW5ndGggb2YgdGVtcG9yYXJ5RmlsZVBhdGggZG9lcyBub3QgZXhjZWVkIFBBVEhfTUFY
LgogICAgIENTdHJpbmcgcHJlZml4VXRmOCA9IHByZWZpeC51dGY4KCk7Ci0gICAgdGVtcG9yYXJ5
RmlsZVBhdGguYXBwZW5kKHByZWZpeFV0ZjguZGF0YSgpLCBwcmVmaXhVdGY4Lmxlbmd0aCgpKTsK
KyAgICBzaXplX3QgcHJlZml4TGVuZ3RoID0gc3RkOjptaW4ocHJlZml4VXRmOC5sZW5ndGgoKSwg
UEFUSF9NQVggLSBwYXRoTWludXNQcmVmaXhMZW5ndGgpOworICAgIAorICAgIC8vIEFwcGVuZCB0
aGUgZmlsZSBuYW1lLgorICAgIHRlbXBvcmFyeUZpbGVQYXRoLmFwcGVuZChwcmVmaXhVdGY4LmRh
dGEoKSwgcHJlZml4TGVuZ3RoKTsKICAgICB0ZW1wb3JhcnlGaWxlUGF0aC5hcHBlbmQoIlhYWFhY
WCIsIDYpOworCisgICAgLy8gQXBwZW5kIHRoZSBmaWxlIG5hbWUgc3VmZml4LgorICAgIHRlbXBv
cmFyeUZpbGVQYXRoLmFwcGVuZChzdWZmaXhVdGY4LmRhdGEoKSwgc3VmZml4VXRmOC5sZW5ndGgo
KSk7CiAgICAgdGVtcG9yYXJ5RmlsZVBhdGguYXBwZW5kKCdcMCcpOwogCi0gICAgcGxhdGZvcm1G
aWxlSGFuZGxlID0gbWtzdGVtcCh0ZW1wb3JhcnlGaWxlUGF0aC5kYXRhKCkpOworICAgIHBsYXRm
b3JtRmlsZUhhbmRsZSA9IG1rc3RlbXBzKHRlbXBvcmFyeUZpbGVQYXRoLmRhdGEoKSwgc3VmZml4
VXRmOC5sZW5ndGgoKSk7CiAgICAgaWYgKHBsYXRmb3JtRmlsZUhhbmRsZSA9PSBpbnZhbGlkUGxh
dGZvcm1GaWxlSGFuZGxlKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCShyZXZpc2lvbiAyNjM2NjYpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9nbGliL0ZpbGVTeXN0ZW1HbGliLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI2
LDcgKzMyNiw3IEBAIFZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29uc3QgU3RyaW4KICAg
ICByZXR1cm4gZW50cmllczsKIH0KIAotU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0
cmluZyYgcHJlZml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKK1N0cmluZyBvcGVuVGVt
cG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5k
bGUsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmlsZW5hbWUoZ19z
dHJkdXBfcHJpbnRmKCIlcyVzIiwgcHJlZml4LnV0ZjgoKS5kYXRhKCksIGNyZWF0ZUNhbm9uaWNh
bFVVSURTdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CiAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gdGVt
cFBhdGgoZ19idWlsZF9maWxlbmFtZShnX2dldF90bXBfZGlyKCksIGZpbGVuYW1lLmdldCgpLCBu
dWxscHRyKSk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAJ
KHJldmlzaW9uIDI2MzY2NikKKysrIFNvdXJjZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJ
WC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0Miw3ICs0NDIsNyBAQCBib29sIGdldFZvbHVtZUZy
ZWVTcGFjZShjb25zdCBTdHJpbmcmIHBhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1TdHJpbmcg
b3BlblRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRs
ZSYgaGFuZGxlKQorU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4
LCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSwgY29uc3QgU3RyaW5nJikKIHsKICAgICBjaGFy
IGJ1ZmZlcltQQVRIX01BWF07CiAgICAgY29uc3QgY2hhciogdG1wRGlyID0gZ2V0ZW52KCJUTVBE
SVIiKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJldmlzaW9uIDI2
MzY2NikKKysrIFNvdXJjZS9XVEYvd3RmL3dpbi9GaWxlU3lzdGVtV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDA0LDcgKzQwNCw3IEBAIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVUZW1wb3JhcnlQ
YXRoKGNvbnMKICAgICByZXR1cm4gcHJvcG9zZWRQYXRoOwogfQogCi1TdHJpbmcgb3BlblRlbXBv
cmFyeUZpbGUoY29uc3QgU3RyaW5nJiwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCitTdHJp
bmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiwgUGxhdGZvcm1GaWxlSGFuZGxlJiBo
YW5kbGUsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgaGFuZGxlID0gSU5WQUxJRF9IQU5ETEVfVkFM
VUU7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjM3OTApCisrKyBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDIwLTA3LTAxICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgW0NHXSBJ
bXBsZW1lbnQgaW1hZ2UgdHJhbnNjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMzgyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBhIGZ1bmN0aW9uIHRoYXQgdHJhbnNjb2RlcyBh
biBpbWFnZSBnaXZlbiB0aGUgc291cmNlIGlzIG9uZSBvZgorICAgICAgICB0aGUgZm9ybWF0cyB0
aGF0IENHIHN1cHBvcnRzIGZvciBkZWNvZGluZyBhbmQgdGhlIGRlc3RpbmF0aW9uIGlzIG9uZSBv
ZgorICAgICAgICB0aGUgZm9ybWF0cyB0aGF0IENHIHN1cHBvcnRzIGZvciBlbmNvZGluZy4KKwor
ICAgICAgICAqIFBsYXRmb3JtL2NnL0NHVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
dHJhbnNjb2RlSW1hZ2UpOgorICAgICAgICAoV2ViS2l0Ojp0cmFuc2NvZGVJbWFnZXMpOgorICAg
ICAgICAqIFBsYXRmb3JtL2NnL0NHVXRpbGl0aWVzLmg6CisKIDIwMjAtMDctMDEgIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgTmV0d29ya1JUQ1Byb3Zp
ZGVyIHJlY2VpdmUgSVBDIG1lc3NhZ2VzIGZyb20gYSBiYWNrZ3JvdW5kIHRocmVhZApJbmRleDog
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9jZy9DR1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9jZy9DR1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI2MzY2
NikKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2cvQ0dVdGlsaXRpZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw2ICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkNHVXRpbGl0aWVzLmgiCiAKKyNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VUSVV0aWxp
dGllcy5oPgorI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBwYWludEltYWdlKENHQ29u
dGV4dFJlZiBjb250ZXh0LCBDR0ltYWdlUmVmIGltYWdlLCBDR0Zsb2F0IHNjYWxlRmFjdG9yLCBD
R1BvaW50IGRlc3RpbmF0aW9uLCBDR1JlY3Qgc291cmNlKQpAQCAtNDYsNCArNTIsODYgQEAgdm9p
ZCBwYWludEltYWdlKENHQ29udGV4dFJlZiBjb250ZXh0LCBDRwogICAgIENHQ29udGV4dFJlc3Rv
cmVHU3RhdGUoY29udGV4dCk7CiB9CiAKK1N0cmluZyB0cmFuc2NvZGVJbWFnZShjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgQVNTRVJUKG1pbWVUeXBl
LnN0YXJ0c1dpdGgoImltYWdlLyJfcykpOworCisgICAgLy8gVGhpcyBmdW5jdGlvbiB0cmFuc2Nv
ZGVzIGZpbGVzIG9ubHkuCisgICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShwYXRo
LCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMpKQorICAgICAgICBy
ZXR1cm4gbnVsbFN0cmluZygpOworCisgICAgLy8gQ3JlYXRlIHRoZSBpbWFnZSBzb3VyY2UuIEVu
c3VyZSB0aGUgJ3BhdGgnIGlzIGFjdHVhbGx5IGFuIGltYWdlIGZpbGUuCisgICAgYXV0byBzb3Vy
Y2VVUkwgPSBhZG9wdENGKENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRoKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIHBhdGguY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5
bGUsIGZhbHNlKSk7CisgICAgYXV0byBzb3VyY2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVh
dGVXaXRoVVJMKHNvdXJjZVVSTC5nZXQoKSwgbnVsbHB0cikpOworICAgIGlmICghc291cmNlKQor
ICAgICAgICByZXR1cm4gbnVsbFN0cmluZygpOworCisgICAgLy8gRW5zdXJlIHRoZSBmb3JtYXQg
b2YgdGhlIGltYWdlIHNvdXJjZSBpcyBkaWZmZXJlbnQgZnJvbSAnbWltZVR5cGUnLgorICAgIGF1
dG8gc291cmNlVVRJID0gU3RyaW5nKENHSW1hZ2VTb3VyY2VHZXRUeXBlKHNvdXJjZS5nZXQoKSkp
OworICAgIGF1dG8gcmVwbGFjZW1lbnRVVEkgPSBXZWJDb3JlOjpVVElGcm9tTUlNRVR5cGUobWlt
ZVR5cGUpOworICAgIGlmIChzb3VyY2VVVEkgPT0gcmVwbGFjZW1lbnRVVEkpCisgICAgICAgIHJl
dHVybiBudWxsU3RyaW5nKCk7CisKKyAgICAvLyBDb21wdXRlIHRoZSB0ZW1wb3JhcnkgZmlsZSBu
YW1lIHByZWZpeCBhbmQgZmlsZSBleHRlbnNpb24uCisgICAgYXV0byBjb21wb25lbnRzID0gRmls
ZVN5c3RlbTo6cGF0aEdldEZpbGVOYW1lKHBhdGgpLnNwbGl0KCcuJyk7CisgICAgYXV0byBleHRl
bnNpb24gPSBXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25G
b3JNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgYXV0byBwcmVmaXggPSBtYWtlU3RyaW5nKGNvbXBv
bmVudHMuZmlyc3QoKSwgIl8iX3MpOworICAgIGF1dG8gc3VmZml4ID0gbWFrZVN0cmluZygiLiJf
cywgZXh0ZW5zaW9uKTsKKworICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlLgorICAgIEZp
bGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSByZXBsYWNlbWVudEZpbGVIYW5kbGU7CisgICAg
U3RyaW5nIHJlcGxhY2VtZW50UGF0aCA9IEZpbGVTeXN0ZW06Om9wZW5UZW1wb3JhcnlGaWxlKHBy
ZWZpeCwgcmVwbGFjZW1lbnRGaWxlSGFuZGxlLCBzdWZmaXgpOworICAgIGlmIChyZXBsYWNlbWVu
dEZpbGVIYW5kbGUgPT0gRmlsZVN5c3RlbTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkgewor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRURfV0lUSF9NRVNTQUdFKCJSZXBsYWNlbWVudCBpbWFn
ZSBjb3VsZCBub3QgYmUgY3JlYXRlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsK
KyAgICB9CisKKyAgICAvLyBDcmVhdGUgdGhlIGRhdGEgY29uc3VtZXIuCisgICAgQ0dEYXRhQ29u
c3VtZXJDYWxsYmFja3MgY2FsbGJhY2tzID0geyBbXSh2b2lkICppbmZvLCBjb25zdCB2b2lkKiBi
dWZmZXIsIHNpemVfdCBjb3VudCkgLT4gc2l6ZV90IHsKKyAgICAgICAgYXV0byBwbGF0Zm9ybUZp
bGVIYW5kbGUgPSAqc3RhdGljX2Nhc3Q8RmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlKj4o
aW5mbyk7CisgICAgICAgIHJldHVybiBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShwbGF0Zm9ybUZp
bGVIYW5kbGUsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihidWZmZXIpLCBjb3VudCk7CisgICAg
fSwgbnVsbHB0ciB9OworCisgICAgLy8gQ3JlYXRlIHRoZSBpbWFnZSByZXBsYWNlbWVudC4KKyAg
ICBhdXRvIGNvbnN1bWVyID0gYWRvcHRDRihDR0RhdGFDb25zdW1lckNyZWF0ZSgmcmVwbGFjZW1l
bnRGaWxlSGFuZGxlLCAmY2FsbGJhY2tzKSk7CisgICAgYXV0byByZXBsYWNlbWVudCA9IGFkb3B0
Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGFDb25zdW1lcihjb25zdW1lci5nZXQo
KSwgcmVwbGFjZW1lbnRVVEkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgMSwgbnVsbHB0cikpOwor
CisgICAgLy8gV3JpdGUgdGhlIHNvdXJjZSBpbWFnZSB0byB0aGUgcmVwbGFjZW1lbnQgaW1hZ2Uu
CisgICAgc2l6ZV90IGluZGV4ID0gQ0dJbWFnZVNvdXJjZUdldFByaW1hcnlJbWFnZUluZGV4KHNv
dXJjZS5nZXQoKSk7CisgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2VGcm9tU291cmNlKHJl
cGxhY2VtZW50LmdldCgpLCBzb3VyY2UuZ2V0KCksIGluZGV4LCBudWxscHRyKTsKKyAgICBDR0lt
YWdlRGVzdGluYXRpb25GaW5hbGl6ZShyZXBsYWNlbWVudC5nZXQoKSk7CisgICAgRmlsZVN5c3Rl
bTo6Y2xvc2VGaWxlKHJlcGxhY2VtZW50RmlsZUhhbmRsZSk7CisKKyAgICByZXR1cm4gcmVwbGFj
ZW1lbnRQYXRoOworfQorCitWZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGVJbWFnZXMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWxsb3dlZE1JTUVUeXBl
cykKK3sKKyAgICBTdHJpbmcgcHJlZmVycmVkRW5jb2RpbmdNSU1FVHlwZTsKKworICAgIC8vIENv
bXB1dGUgdGhlIHByZWZlcnJlZCBNSU1FVHlwZSBmb3IgdHJhbnNjb2RpbmcgYW55IGltYWdlIHdo
b3NlIHR5cGUgaXMgbm90IGluICdhbGxvd2VkTUlNRVR5cGVzJy4KKyAgICBmb3IgKGF1dG8gbWlt
ZVR5cGUgOiBhbGxvd2VkTUlNRVR5cGVzKSB7CisgICAgICAgIGlmIChXZWJDb3JlOjpNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkp
IHsKKyAgICAgICAgICAgIHByZWZlcnJlZEVuY29kaW5nTUlNRVR5cGUgPSBtaW1lVHlwZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHByZWZlcnJlZEVu
Y29kaW5nTUlNRVR5cGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBWZWN0
b3I8U3RyaW5nPiByZXBsYWNlbWVudFBhdGhzOworICAgIHJlcGxhY2VtZW50UGF0aHMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShwYXRocy5zaXplKCkpOworICAgIAorICAgIGZvciAoYXV0byYgcGF0
aCA6IHBhdGhzKSB7CisgICAgICAgIGF1dG8gbWltZVR5cGUgPSBXZWJDb3JlOjpNSU1FVHlwZVJl
Z2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgocGF0aCk7CisgICAgICAgIGlmIChhbGxvd2VkTUlN
RVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSkKKyAgICAgICAgICAgIHJlcGxhY2VtZW50UGF0aHMu
dW5jaGVja2VkQXBwZW5kKG51bGxTdHJpbmcoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHJlcGxhY2VtZW50UGF0aHMudW5jaGVja2VkQXBwZW5kKHRyYW5zY29kZUltYWdlKHBhdGgsIHBy
ZWZlcnJlZEVuY29kaW5nTUlNRVR5cGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVwbGFjZW1l
bnRQYXRoczsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL2NnL0NHVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9jZy9DR1V0aWxpdGllcy5oCShyZXZpc2lvbiAyNjM2NjYpCisrKyBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL2NnL0NHVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEzICsy
MywxMiBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5k
ZWYgQ0dVdGlsaXRpZXNfaAotI2RlZmluZSBDR1V0aWxpdGllc19oCisjcHJhZ21hIG9uY2UKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgcGFpbnRJbWFnZShDR0NvbnRleHRSZWYsIENHSW1h
Z2VSZWYsIENHRmxvYXQgc2NhbGVGYWN0b3IsIENHUG9pbnQgZGVzdGluYXRpb24sIENHUmVjdCBz
b3VyY2UpOworU3RyaW5nIHRyYW5zY29kZUltYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSk7CitWZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGVJbWFnZXMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWxsb3dlZE1JTUVU
eXBlcyk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gQ0dVdGlsaXRpZXNf
aAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403545</attachid>
            <date>2020-07-04 20:22:24 -0700</date>
            <delta_ts>2020-07-04 20:22:24 -0700</delta_ts>
            <desc>Patch 212489 213828</desc>
            <filename>bug-213828-20200704202223.patch</filename>
            <type>text/plain</type>
            <size>31222</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzOTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWEwOWJlMmYyZTE2ZmFi
MTIwY2JmNGUyOTIwZDA4NzQ0OGQ3Nzc4Ny4uODVlMjMxYzQ3ZjRjN2VmMDIzZjdkOTA3NWQ5NTYz
OWViZTVhZGZjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDIwLTA3LTA0ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgW21hY09T
XSBBbGxvdyBzZWxlY3RpbmcgSEVJRiBpbWFnZXMgaWYgdGhlICdhY2NlcHQnIGF0dHJpYnV0ZSBp
bmNsdWRlcyBhbiBpbWFnZSBNSU1FIHR5cGUgdGhhdCB0aGUgcGxhdGZvcm0gY2FuIHRyYW5zY29k
ZSB0aGUgSEVJRiB0bworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjEyNDg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMgdG8gTUlNRVR5cGVSZWdpc3RyeS4gVGhl
c2UgbmV3IGZ1bmN0aW9ucyB3aWxsCisgICAgICAgIGRlYWwgd2l0aCBhIGxpc3Qgb2YgTUlNRSB0
eXBlcyBjb21iaW5lZCB3aXRoIGEgbGlzdCBvZiBmaWxlIGV4dGVuc2lvbnMuCisgICAgICAgIFRo
ZXkgYXJlIGdvaW5nIHRvIGJlIHVzZWQgdGhlIEZpbGVDaG9vc2VyU2V0dGluZ3Mgd2hpY2ggcmVm
bGVjdHMgdGhlIAorICAgICAgICAnYWNjZXB0JyBhdHRyaWJ1dGUgb2YgdGhlIDxpbnB1dD4gZmls
ZSBlbGVtZW50LgorCisgICAgICAgICogcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjp0cmltbWVkRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1J
TUVUeXBlUmVnaXN0cnk6OnByZWZlcnJlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5Ojpjb250YWluc0ltYWdlTUlNRVR5cGVGb3JF
bmNvZGluZyk6CisKKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmFsbG93ZWRN
SU1FVHlwZXMpOgorICAgICAgICBJdCByZXR1cm5zIHRoZSBzZXQgb2YgbWltZSB0eXBlcyB3aGlj
aCBpcyBzdGF0ZWQgYnkgYSBsaXN0IG9mIG1pbWUgdHlwZXMKKyAgICAgICAgYW5kIGEgbGlzdCBv
ZiBmaWxlIGV4dGVuc2lvbnMuCisKKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6
OmFsbG93ZWRGaWxlRXh0ZW5zaW9ucyk6CisgICAgICAgIEl0IHJldHVybnMgdGhlIHNldCBvZiBl
eHRlbnNpb25zIHdoaWNoIGlzIHN0YXRlZCBieSBhIGxpc3Qgb2YgbWltZSB0eXBlcworICAgICAg
ICBhbmQgYSBsaXN0IG9mIGZpbGUgZXh0ZW5zaW9ucy4KKworICAgICAgICAqIHBsYXRmb3JtL01J
TUVUeXBlUmVnaXN0cnkuaDoKKwogMjAyMC0wNy0wNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBSZW1vdmUgYWxsIGZlYXR1cmVzIGZyb20gRmVhdHVy
ZURlZmluZXMueGNjb25maWcgdGhhdCBhcmUgYWxyZWFkeSBtZW50aW9uZWQgaW4gUGxhdGZvcm1F
bmFibGVDb2NvYS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGIwMjI2YTEyMmJhMTAwMTA4ZDU3ZWM3MDhjMTA2Nzg5
ZjU3YmVkMWEuLmIxYjQxMjA2ZmNhYjVjODhjYWFlZjhiZTRlZTM2MzA0NjA0ZDAzNDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMjAtMDctMDQgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fi
b3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBbQ0ddIEltcGxlbWVudCBpbWFnZSB0cmFu
c2NvZGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjEzODI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1wbGVtZW50IGEgZnVuY3Rpb24gdGhhdCB0cmFuc2NvZGVzIGltYWdlcyBhbW9uZyBhIHNldCBv
ZiBmaWxlcyBnaXZlbgorICAgICAgICB0aGUgYWxsb3dlZE1JTUVUeXBlcy4gVGhlIGRlc3RpbmF0
aW9uIE1JTUUgdHlwZSBvZiB0aGVzZSBpbWFnZXMgaXMgdGhlCisgICAgICAgIGZpcnN0IE1JTUUg
dHlwZSBpbiB0aGUgYWxsb3dlZE1JTUVUeXBlcyB3aGljaCBDRyBzdXBwb3J0cyBlbmNvZGluZyB0
by4KKworICAgICAgICAqIFBsYXRmb3JtL2NnL0NHVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6dHJhbnNjb2RlSW1hZ2UpOgorICAgICAgICAoV2ViS2l0Ojp0cmFuc2NvZGVJbWFnZXMp
OgorICAgICAgICAqIFBsYXRmb3JtL2NnL0NHVXRpbGl0aWVzLmg6CisKKzIwMjAtMDctMDQgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBbbWFj
T1NdIEFsbG93IHNlbGVjdGluZyBIRUlGIGltYWdlcyBpZiB0aGUgJ2FjY2VwdCcgYXR0cmlidXRl
IGluY2x1ZGVzIGFuIGltYWdlIE1JTUUgdHlwZSB0aGF0IHRoZSBwbGF0Zm9ybSBjYW4gdHJhbnNj
b2RlIHRoZSBIRUlGIHRvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTI0ODkKKworICAgICAgICBNYWtlIFdLT3BlblBhbmVsUGFyYW1ldGVycyBjYWxs
IGFsbG93ZWRGaWxlRXh0ZW5zaW9ucygpIGFuZCBhbGxvd2VkTUlNRVR5cGVzKCkKKyAgICAgICAg
b2YgTUlNRVR5cGVSZWdpc3RyeSB2aWEgT3BlblBhbmVsUGFyYW1ldGVycy4KKworICAgICAgICBV
SURlbGVnYXRlIHdpbGwgZ2V0IGFsbG93ZWRNSU1FVHlwZXMoKSBhbmQgcGFzcyBpdCB0byBXZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5CisgICAgICAgIHdoaWNoIHdpbGwgcGFzcyBpdCB0
byBXZWJQYWdlUHJveHkuIEluIGEgZm9sbG93aW5nIHBhdGNoLCBXZWJQYWdlUHJveHkKKyAgICAg
ICAgd2lsbCB1c2UgYWxsb3dlZE1JTUVUeXBlcyB0byB0cmFuc2NvZGUgdGhlIHNlbGVjdGVkIGlt
YWdlcyBiZWZvcmUgc2VuZGluZworICAgICAgICB0aGVtIHRvIFdlYlBhZ2UuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0FQSU9wZW5QYW5lbFBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoQVBJ
OjpPcGVuUGFuZWxQYXJhbWV0ZXJzOjphbGxvd2VkTUlNRVR5cGVzIGNvbnN0KToKKyAgICAgICAg
KEFQSTo6T3BlblBhbmVsUGFyYW1ldGVyczo6YWxsb3dlZEZpbGVFeHRlbnNpb25zIGNvbnN0KToK
KyAgICAgICAgKEFQSTo6T3BlblBhbmVsUGFyYW1ldGVyczo6bWVkaWFDYXB0dXJlVHlwZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElPcGVuUGFuZWxQYXJhbWV0
ZXJzLmg6CisgICAgICAgIChBUEk6Ok9wZW5QYW5lbFBhcmFtZXRlcnM6Om1lZGlhQ2FwdHVyZVR5
cGUgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tPcGVuUGFuZWxQYXJh
bWV0ZXJzLm1tOgorICAgICAgICAoLVtXS09wZW5QYW5lbFBhcmFtZXRlcnMgX2FsbG93ZWRGaWxl
RXh0ZW5zaW9uc10pOgorICAgICAgICAoLVtXS09wZW5QYW5lbFBhcmFtZXRlcnMgX2FsbG93ZWRG
aWxlRXh0ZW5zaW9uc1RpdGxlc10pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tPcGVuUGFuZWxQYXJhbWV0ZXJzUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9Db2NvYS9VSURlbGVnYXRlLm1tOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNs
aWVudDo6cnVuT3BlblBhbmVsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViT3BlblBhbmVsUmVz
dWx0TGlzdGVuZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYk9wZW5QYW5lbFJlc3Vs
dExpc3RlbmVyUHJveHk6OmNob29zZUZpbGVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViT3Bl
blBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lclByb3h5OjpjaG9vc2VGaWxlcyk6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ2hv
b3NlRmlsZXNGb3JPcGVuUGFuZWwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKwogMjAyMC0wNy0wNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgW0NvY29hXSBSZW1vdmUgYWxsIGZlYXR1cmVzIGZyb20gRmVhdHVyZURlZmluZXMueGNjb25m
aWcgdGhhdCBhcmUgYWxyZWFkeSBtZW50aW9uZWQgaW4gUGxhdGZvcm1FbmFibGVDb2NvYS5oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCmluZGV4IGQ5MWQy
ZmRmM2UwNWM4MzhiMzYxNDM5NzI2MWVlNjg3MmQ1YzBhODcuLjllMGUxNmQxYWU0MjUwN2QxMWFi
M2Y0MjBlZDEyYjE0NGMxY2IxMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L01JTUVUeXBlUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVU
eXBlUmVnaXN0cnkuY3BwCkBAIC03ODgsNCArNzg4LDU3IEBAIFN0cmluZyBNSU1FVHlwZVJlZ2lz
dHJ5OjphcHBlbmRGaWxlRXh0ZW5zaW9uSWZOZWNlc3NhcnkoY29uc3QgU3RyaW5nJiBmaWxlbmFt
ZSwKICAgICByZXR1cm4gbWFrZVN0cmluZyhmaWxlbmFtZSwgJy4nLCBwcmVmZXJyZWRFeHRlbnNp
b24pOwogfQogCitzdGF0aWMgaW5saW5lIFN0cmluZyB0cmltbWVkRXh0ZW5zaW9uKGNvbnN0IFN0
cmluZyYgZXh0ZW5zaW9uKQoreworICAgIHJldHVybiBleHRlbnNpb24uc3RhcnRzV2l0aCgnLicp
ID8gZXh0ZW5zaW9uLnJpZ2h0KGV4dGVuc2lvbi5sZW5ndGgoKSAtIDEpIDogZXh0ZW5zaW9uOwor
fQorCitTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6cHJlZmVycmVkSW1hZ2VNSU1FVHlwZUZvckVu
Y29kaW5nKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBtaW1lVHlwZXMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBleHRlbnNpb25zKQoreworICAgIGF1dG8gYWxsb3dlZE1JTUVUeXBlcyA9IE1JTUVUeXBl
UmVnaXN0cnk6OmFsbG93ZWRNSU1FVHlwZXMobWltZVR5cGVzLCBleHRlbnNpb25zKTsKKworICAg
IGF1dG8gcG9zaXRpb24gPSBhbGxvd2VkTUlNRVR5cGVzLmZpbmRNYXRjaGluZyhbXShjb25zdCBh
dXRvJiBtaW1lVHlwZSkgeworICAgICAgICByZXR1cm4gTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpOworICAgIH0pOworICAgIAor
ICAgIHJldHVybiBwb3NpdGlvbiAhPSBub3RGb3VuZCA/IGFsbG93ZWRNSU1FVHlwZXNbcG9zaXRp
b25dIDogbnVsbFN0cmluZygpOworfQorCitib29sIE1JTUVUeXBlUmVnaXN0cnk6OmNvbnRhaW5z
SW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBtaW1lVHlwZXMs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNpb25zKQoreworICAgIHJldHVybiAhTUlNRVR5
cGVSZWdpc3RyeTo6cHJlZmVycmVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlcywg
ZXh0ZW5zaW9ucykuaXNOdWxsKCk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IE1JTUVUeXBlUmVnaXN0
cnk6OmFsbG93ZWRNSU1FVHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG1pbWVUeXBlcywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGV4dGVuc2lvbnMpCit7CisgICAgVmVjdG9yPFN0cmluZz4gYWxs
b3dlZE1JTUVUeXBlczsKKworICAgIGZvciAoYXV0byYgbWltZVR5cGUgOiBtaW1lVHlwZXMpCisg
ICAgICAgIGFsbG93ZWRNSU1FVHlwZXMuYXBwZW5kSWZOb3RDb250YWlucyhtaW1lVHlwZSk7CisK
KyAgICBmb3IgKGF1dG8mIGV4dGVuc2lvbiA6IGV4dGVuc2lvbnMpIHsKKyAgICAgICAgYXV0byBt
aW1lVHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6Om1pbWVUeXBlRm9yRXh0ZW5zaW9uKHRyaW1tZWRF
eHRlbnNpb24oZXh0ZW5zaW9uKSk7CisgICAgICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYWxsb3dlZE1JTUVUeXBlcy5hcHBlbmRJZk5v
dENvbnRhaW5zKG1pbWVUeXBlKTsKKyAgICB9CisKKyAgICByZXR1cm4gYWxsb3dlZE1JTUVUeXBl
czsKK30KKworVmVjdG9yPFN0cmluZz4gTUlNRVR5cGVSZWdpc3RyeTo6YWxsb3dlZEZpbGVFeHRl
bnNpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBtaW1lVHlwZXMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBleHRlbnNpb25zKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGFsbG93ZWRGaWxlRXh0ZW5z
aW9uczsKKworICAgIGZvciAoYXV0byYgbWltZVR5cGUgOiBtaW1lVHlwZXMpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBleHRlbnNpb24gOiBNSU1FVHlwZVJlZ2lzdHJ5OjpleHRlbnNpb25zRm9yTUlN
RVR5cGUobWltZVR5cGUpKQorICAgICAgICAgICAgYWxsb3dlZEZpbGVFeHRlbnNpb25zLmFwcGVu
ZElmTm90Q29udGFpbnMoZXh0ZW5zaW9uKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGV4dGVu
c2lvbiA6IGV4dGVuc2lvbnMpCisgICAgICAgIGFsbG93ZWRGaWxlRXh0ZW5zaW9ucy5hcHBlbmRJ
Zk5vdENvbnRhaW5zKHRyaW1tZWRFeHRlbnNpb24oZXh0ZW5zaW9uKSk7CisKKyAgICByZXR1cm4g
YWxsb3dlZEZpbGVFeHRlbnNpb25zOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmgKaW5kZXggNWIyOWNmMjQyMzNh
OGUwYTE0OWM4YzhiZWQ2OTIzOTc0MmY5OWJiNi4uMjE5ZWUxOTU5NzEzNDIxZWNkMGNkMjllMjJk
NWIxN2E1NTVmMTgwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5
cGVSZWdpc3RyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0
cnkuaApAQCAtMTQyLDYgKzE0MiwxMSBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgU3RyaW5nIGFwcGVuZEZpbGVFeHRlbnNpb25JZk5lY2Vzc2FyeShjb25zdCBTdHJpbmcm
IGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKIAorICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBTdHJpbmcgcHJlZmVycmVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBtaW1lVHlwZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNpb25z
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBjb250YWluc0ltYWdlTUlNRVR5cGVG
b3JFbmNvZGluZyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbWltZVR5cGVzLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZXh0ZW5zaW9ucyk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZlY3RvcjxT
dHJpbmc+IGFsbG93ZWRNSU1FVHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG1pbWVUeXBlcywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGV4dGVuc2lvbnMpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBWZWN0b3I8U3RyaW5nPiBhbGxvd2VkRmlsZUV4dGVuc2lvbnMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIG1pbWVUeXBlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGV4dGVuc2lvbnMpOworICAg
IAogcHJpdmF0ZToKICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIE1JTUUgdHlwZSBpcyBub3Qg
c3VpdGFibGUgZm9yIGJlaW5nIGxvYWRlZCBhcyBhIHRleHQKICAgICAvLyBkb2N1bWVudCBpbiBh
IGZyYW1lLiBPbmx5IHZhbGlkIGZvciBNSU1FIHR5cGVzIGJlZ2luaW5nIHdpdGggInRleHQvIi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2cvQ0dVdGlsaXRpZXMuY3BwIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9jZy9DR1V0aWxpdGllcy5jcHAKaW5kZXggYWYwOGY2ZDVl
ZmI0YWFhODZiMTA0YTQ5Yzk4NTVmMjA3MjViNjgwOC4uMzhhMjRiYTU3MjcxOTU3NTA0NDUwYzk2
ODhiMzgwOGY2NjE3MTEzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jZy9D
R1V0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jZy9DR1V0aWxpdGll
cy5jcHAKQEAgLTI2LDYgKzI2LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
Q0dVdGlsaXRpZXMuaCIKIAorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVVRJVXRpbGl0
aWVzLmg+CisjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIHBhaW50SW1hZ2UoQ0dDb250
ZXh0UmVmIGNvbnRleHQsIENHSW1hZ2VSZWYgaW1hZ2UsIENHRmxvYXQgc2NhbGVGYWN0b3IsIENH
UG9pbnQgZGVzdGluYXRpb24sIENHUmVjdCBzb3VyY2UpCkBAIC00Niw0ICs1Miw3MSBAQCB2b2lk
IHBhaW50SW1hZ2UoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHSW1hZ2VSZWYgaW1hZ2UsIENHRmxv
YXQgc2NhbGVGYWN0b3IsIENHUAogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7
CiB9CiAKK3N0YXRpYyBTdHJpbmcgdHJhbnNjb2RlSW1hZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIEFTU0VSVChtaW1lVHlwZS5zdGFydHNXaXRo
KCJpbWFnZS8iX3MpKTsKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gdHJhbnNjb2RlcyBmaWxlcyBv
bmx5LgorICAgIGlmIChGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkocGF0aCwgRmlsZVN5c3Rl
bTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSkKKyAgICAgICAgcmV0dXJuIG51bGxT
dHJpbmcoKTsKKworICAgIC8vIENyZWF0ZSB0aGUgaW1hZ2Ugc291cmNlLiBFbnN1cmUgdGhlICdw
YXRoJyBpcyBhY3R1YWxseSBhbiBpbWFnZSBmaWxlLgorICAgIGF1dG8gc291cmNlVVJMID0gYWRv
cHRDRihDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBw
YXRoLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCBmYWxzZSkp
OworICAgIGF1dG8gc291cmNlID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlV2l0aFVSTChz
b3VyY2VVUkwuZ2V0KCksIG51bGxwdHIpKTsKKyAgICBpZiAoIXNvdXJjZSkKKyAgICAgICAgcmV0
dXJuIG51bGxTdHJpbmcoKTsKKworICAgIC8vIEVuc3VyZSB0aGUgZm9ybWF0IG9mIHRoZSBpbWFn
ZSBzb3VyY2UgaXMgZGlmZmVyZW50IGZyb20gJ21pbWVUeXBlJy4KKyAgICBhdXRvIHNvdXJjZVVU
SSA9IFN0cmluZyhDR0ltYWdlU291cmNlR2V0VHlwZShzb3VyY2UuZ2V0KCkpKTsKKyAgICBhdXRv
IHJlcGxhY2VtZW50VVRJID0gV2ViQ29yZTo6VVRJRnJvbU1JTUVUeXBlKG1pbWVUeXBlKTsKKyAg
ICBpZiAoc291cmNlVVRJID09IHJlcGxhY2VtZW50VVRJKQorICAgICAgICByZXR1cm4gbnVsbFN0
cmluZygpOworCisgICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUuCisgICAgRmlsZVN5c3Rl
bTo6UGxhdGZvcm1GaWxlSGFuZGxlIHJlcGxhY2VtZW50RmlsZUhhbmRsZTsKKyAgICBTdHJpbmcg
cmVwbGFjZW1lbnRQYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBvcmFyeUZpbGUoInRlbXBJbWFn
ZSJfcywgcmVwbGFjZW1lbnRGaWxlSGFuZGxlKTsKKyAgICBpZiAocmVwbGFjZW1lbnRGaWxlSGFu
ZGxlID09IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEX1dJVEhfTUVTU0FHRSgiUmVwbGFjZW1lbnQgaW1hZ2UgY291bGQg
bm90IGJlIGNyZWF0ZWQuIik7CisgICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7CisgICAgfQor
CisgICAgLy8gQ3JlYXRlIHRoZSBkYXRhIGNvbnN1bWVyLgorICAgIENHRGF0YUNvbnN1bWVyQ2Fs
bGJhY2tzIGNhbGxiYWNrcyA9IHsgW10odm9pZCAqaW5mbywgY29uc3Qgdm9pZCogYnVmZmVyLCBz
aXplX3QgY291bnQpIC0+IHNpemVfdCB7CisgICAgICAgIGF1dG8gcGxhdGZvcm1GaWxlSGFuZGxl
ID0gKnN0YXRpY19jYXN0PEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSo+KGluZm8pOwor
ICAgICAgICByZXR1cm4gRmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUocGxhdGZvcm1GaWxlSGFuZGxl
LCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYnVmZmVyKSwgY291bnQpOworICAgIH0sIG51bGxw
dHIgfTsKKworICAgIC8vIENyZWF0ZSB0aGUgaW1hZ2UgcmVwbGFjZW1lbnQuCisgICAgYXV0byBj
b25zdW1lciA9IGFkb3B0Q0YoQ0dEYXRhQ29uc3VtZXJDcmVhdGUoJnJlcGxhY2VtZW50RmlsZUhh
bmRsZSwgJmNhbGxiYWNrcykpOworICAgIGF1dG8gcmVwbGFjZW1lbnQgPSBhZG9wdENGKENHSW1h
Z2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhQ29uc3VtZXIoY29uc3VtZXIuZ2V0KCksIHJlcGxh
Y2VtZW50VVRJLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIDEsIG51bGxwdHIpKTsKKworICAgIC8v
IFdyaXRlIHRoZSBzb3VyY2UgaW1hZ2UgdG8gdGhlIHJlcGxhY2VtZW50IGltYWdlLgorICAgIHNp
emVfdCBpbmRleCA9IENHSW1hZ2VTb3VyY2VHZXRQcmltYXJ5SW1hZ2VJbmRleChzb3VyY2UuZ2V0
KCkpOworICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlRnJvbVNvdXJjZShyZXBsYWNlbWVu
dC5nZXQoKSwgc291cmNlLmdldCgpLCBpbmRleCwgbnVsbHB0cik7CisgICAgQ0dJbWFnZURlc3Rp
bmF0aW9uRmluYWxpemUocmVwbGFjZW1lbnQuZ2V0KCkpOworICAgIEZpbGVTeXN0ZW06OmNsb3Nl
RmlsZShyZXBsYWNlbWVudEZpbGVIYW5kbGUpOworCisgICAgcmV0dXJuIHJlcGxhY2VtZW50UGF0
aDsKK30KKworVmVjdG9yPFN0cmluZz4gdHJhbnNjb2RlSW1hZ2VzKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXRocywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsbG93ZWRNSU1FVHlwZXMpCit7Cisg
ICAgU3RyaW5nIG1pbWVUeXBlRm9yRW5jb2RpbmcgPSBXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5
OjpwcmVmZXJyZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcoYWxsb3dlZE1JTUVUeXBlcywgeyB9
KTsKKyAgICBpZiAobWltZVR5cGVGb3JFbmNvZGluZy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIFZlY3RvcjxTdHJpbmc+IHJlcGxhY2VtZW50UGF0aHM7CisgICAgcmVwbGFj
ZW1lbnRQYXRocy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhdGhzLnNpemUoKSk7CisKKyAgICBm
b3IgKGF1dG8mIHBhdGggOiBwYXRocykgeworICAgICAgICBhdXRvIG1pbWVUeXBlID0gV2ViQ29y
ZTo6TUlNRVR5cGVSZWdpc3RyeTo6bWltZVR5cGVGb3JQYXRoKHBhdGgpOworICAgICAgICBpZiAo
YWxsb3dlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpCisgICAgICAgICAgICByZXBsYWNl
bWVudFBhdGhzLnVuY2hlY2tlZEFwcGVuZChudWxsU3RyaW5nKCkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICByZXBsYWNlbWVudFBhdGhzLnVuY2hlY2tlZEFwcGVuZCh0cmFuc2NvZGVJbWFn
ZShwYXRoLCBtaW1lVHlwZUZvckVuY29kaW5nKSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlcGxh
Y2VtZW50UGF0aHM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9jZy9DR1V0aWxpdGllcy5oIGIvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9jZy9DR1V0aWxpdGllcy5oCmluZGV4IDg1MWQxODFhOGZjNzU3M2M5MzBjZmM2MDNiMGY0
MTQyODc0N2IyMmQuLjU1NTI2NTVkMjU5MGIxYzk0NDQzNzFkYzk5MDA5ODhjNjNjZWUwZjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2cvQ0dVdGlsaXRpZXMuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NnL0NHVXRpbGl0aWVzLmgKQEAgLTIzLDEzICsyMywxMSBA
QAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgQ0dV
dGlsaXRpZXNfaAotI2RlZmluZSBDR1V0aWxpdGllc19oCisjcHJhZ21hIG9uY2UKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKIHZvaWQgcGFpbnRJbWFnZShDR0NvbnRleHRSZWYsIENHSW1hZ2VSZWYs
IENHRmxvYXQgc2NhbGVGYWN0b3IsIENHUG9pbnQgZGVzdGluYXRpb24sIENHUmVjdCBzb3VyY2Up
OworVmVjdG9yPFN0cmluZz4gdHJhbnNjb2RlSW1hZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXRocywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsbG93ZWRNSU1FVHlwZXMpOwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIENHVXRpbGl0aWVzX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElPcGVuUGFuZWxQYXJhbWV0ZXJzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElPcGVuUGFuZWxQYXJhbWV0ZXJzLmNwcAppbmRl
eCA4NTFlYmY1YzAzOWU3YjI4OTE5YWY5MTBiMDJmZWEwMGNlZWVkZjQ3Li40MzViNWRmZjJlZDhj
YzUwYzM5YjYzMTBiMGYzOGQ1M2MxNGQyMWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJT3BlblBhbmVsUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSU9wZW5QYW5lbFBhcmFtZXRlcnMuY3BwCkBAIC0yOSw2ICsyOSw3
IEBACiAKICNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQSVN0cmluZy5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIEFQSSB7CkBAIC01OCwxMiArNTksMjggQEAgUmVmPEFQSTo6QXJyYXk+
IE9wZW5QYW5lbFBhcmFtZXRlcnM6OmFjY2VwdEZpbGVFeHRlbnNpb25zKCkgY29uc3QKICAgICBy
ZXR1cm4gQVBJOjpBcnJheTo6Y3JlYXRlU3RyaW5nQXJyYXkobV9zZXR0aW5ncy5hY2NlcHRGaWxl
RXh0ZW5zaW9ucyk7CiB9CiAKLSNpZiBFTkFCTEUoTUVESUFfQ0FQVFVSRSkKLVdlYkNvcmU6Ok1l
ZGlhQ2FwdHVyZVR5cGUgT3BlblBhbmVsUGFyYW1ldGVyczo6bWVkaWFDYXB0dXJlVHlwZSgpIGNv
bnN0CitSZWY8QVBJOjpBcnJheT4gT3BlblBhbmVsUGFyYW1ldGVyczo6YWxsb3dlZE1JTUVUeXBl
cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc2V0dGluZ3MubWVkaWFDYXB0dXJlVHlwZTsKKyAg
ICByZXR1cm4gQVBJOjpBcnJheTo6Y3JlYXRlU3RyaW5nQXJyYXkoV2ViQ29yZTo6TUlNRVR5cGVS
ZWdpc3RyeTo6YWxsb3dlZE1JTUVUeXBlcyhtX3NldHRpbmdzLmFjY2VwdE1JTUVUeXBlcywgbV9z
ZXR0aW5ncy5hY2NlcHRGaWxlRXh0ZW5zaW9ucykpOwogfQorCitSZWY8QVBJOjpBcnJheT4gT3Bl
blBhbmVsUGFyYW1ldGVyczo6YWxsb3dlZEZpbGVFeHRlbnNpb25zKCkgY29uc3QKK3sKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgYXV0byBhY2NlcHRNSU1FVHlwZXMgPSBtX3NldHRpbmdzLmFjY2Vw
dE1JTUVUeXBlczsKKworICAgIC8vIE9uIG1hY09TIGFsbG93IHNlbGVjdGluZyBIRUlGL0hFSUMg
aW1hZ2VzIGlmIGFjY2VwdE1JTUVUeXBlcyBvciBhY2NlcHRGaWxlRXh0ZW5zaW9ucyBpbmNsdWRl
IGF0IGxlYXN0CisgICAgLy8gb25lIE1JTUUgdHlwZSB3aGljaCBDRyBzdXBwb3J0cyBlbmNvZGlu
ZyB0by4KKyAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6Y29udGFpbnNJbWFnZU1JTUVUeXBlRm9y
RW5jb2RpbmcoYWNjZXB0TUlNRVR5cGVzLCBtX3NldHRpbmdzLmFjY2VwdEZpbGVFeHRlbnNpb25z
KSkgeworICAgICAgICBhY2NlcHRNSU1FVHlwZXMuYXBwZW5kKCJpbWFnZS9oZWlmIl9zKTsKKyAg
ICAgICAgYWNjZXB0TUlNRVR5cGVzLmFwcGVuZCgiaW1hZ2UvaGVpYyJfcyk7CisgICAgfQorICAg
IAorICAgIHJldHVybiBBUEk6OkFycmF5OjpjcmVhdGVTdHJpbmdBcnJheShXZWJDb3JlOjpNSU1F
VHlwZVJlZ2lzdHJ5OjphbGxvd2VkRmlsZUV4dGVuc2lvbnMoYWNjZXB0TUlNRVR5cGVzLCBtX3Nl
dHRpbmdzLmFjY2VwdEZpbGVFeHRlbnNpb25zKSk7CisjZWxzZQorICAgIHJldHVybiBBUEk6OkFy
cmF5OjpjcmVhdGVTdHJpbmdBcnJheShXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjphbGxvd2Vk
RmlsZUV4dGVuc2lvbnMobV9zZXR0aW5ncy5hY2NlcHRNSU1FVHlwZXMsIG1fc2V0dGluZ3MuYWNj
ZXB0RmlsZUV4dGVuc2lvbnMpKTsKICNlbmRpZgorfQogCiBSZWY8QVBJOjpBcnJheT4gT3BlblBh
bmVsUGFyYW1ldGVyczo6c2VsZWN0ZWRGaWxlTmFtZXMoKSBjb25zdAogewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU9wZW5QYW5lbFBhcmFtZXRlcnMuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElPcGVuUGFuZWxQYXJhbWV0ZXJzLmgKaW5kZXgg
NzMwZTVkNWVlZmYyYmEwYmU0ODk0N2IwZDc5N2U2MzE1YzMyNmI5MS4uODBlMTFiMDZkZDczMzJh
YmQ4ZjcyMTU5NjNkMjdmMThkZDIyNzNjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSU9wZW5QYW5lbFBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJT3BlblBhbmVsUGFyYW1ldGVycy5oCkBAIC00Miw5ICs0MiwxMSBAQCBw
dWJsaWM6CiAgICAgYm9vbCBhbGxvd011bHRpcGxlRmlsZXMoKSBjb25zdCB7IHJldHVybiBtX3Nl
dHRpbmdzLmFsbG93c011bHRpcGxlRmlsZXM7IH0KICAgICBSZWY8QVBJOjpBcnJheT4gYWNjZXB0
TUlNRVR5cGVzKCkgY29uc3Q7CiAgICAgUmVmPEFQSTo6QXJyYXk+IGFjY2VwdEZpbGVFeHRlbnNp
b25zKCkgY29uc3Q7CisgICAgUmVmPEFQSTo6QXJyYXk+IGFsbG93ZWRNSU1FVHlwZXMoKSBjb25z
dDsKKyAgICBSZWY8QVBJOjpBcnJheT4gYWxsb3dlZEZpbGVFeHRlbnNpb25zKCkgY29uc3Q7CiAg
ICAgUmVmPEFQSTo6QXJyYXk+IHNlbGVjdGVkRmlsZU5hbWVzKCkgY29uc3Q7CiAjaWYgRU5BQkxF
KE1FRElBX0NBUFRVUkUpCi0gICAgV2ViQ29yZTo6TWVkaWFDYXB0dXJlVHlwZSBtZWRpYUNhcHR1
cmVUeXBlKCkgY29uc3Q7CisgICAgV2ViQ29yZTo6TWVkaWFDYXB0dXJlVHlwZSBtZWRpYUNhcHR1
cmVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0aW5ncy5tZWRpYUNhcHR1cmVUeXBlOyB9CiAj
ZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS09wZW5QYW5lbFBhcmFtZXRlcnMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tPcGVuUGFuZWxQYXJhbWV0ZXJzLm1tCmluZGV4IGFiZmY1MzNmZjYzZWE4
NmJmZmMwZTM4ODVhYWM4MWYxYzcyMTYxYWEuLjk0NzYxNWU0MjlmMWQ4OWIxODNmZDUzZjE0Mjk3
ZDAzMGJhOGRmMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS09wZW5QYW5lbFBhcmFtZXRlcnMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLT3BlblBhbmVsUGFyYW1ldGVycy5tbQpAQCAtNjYsNTkgKzY2LDcgQEAKIAog
LSAoTlNBcnJheTxOU1N0cmluZyAqPiAqKV9hbGxvd2VkRmlsZUV4dGVuc2lvbnMKIHsKLSAgICAv
LyBBZ2dyZWdhdGUgZXh0ZW5zaW9ucyBiYXNlZCBvbiBzcGVjaWZpZWQgTUlNRSB0eXBlcy4KLSAg
ICBhdXRvIGFjY2VwdGVkTUlNRVR5cGVzID0gW3NlbGYgX2FjY2VwdGVkTUlNRVR5cGVzXTsKLSAg
ICBhdXRvIGFjY2VwdGVkRmlsZUV4dGVuc2lvbnMgPSBbc2VsZiBfYWNjZXB0ZWRGaWxlRXh0ZW5z
aW9uc107Ci0KLSAgICBhdXRvIGFsbG93ZWRGaWxlRXh0ZW5zaW9ucyA9IGFkb3B0TlMoW1tOU011
dGFibGVTZXQgYWxsb2NdIGluaXRdKTsKLQotICAgIFthY2NlcHRlZE1JTUVUeXBlcyBlbnVtZXJh
dGVPYmplY3RzVXNpbmdCbG9jazpeKE5TU3RyaW5nICptaW1lVHlwZSwgTlNVSW50ZWdlciBpbmRl
eCwgQk9PTCogc3RvcCkgewotICAgICAgICBBU1NFUlQoW21pbWVUeXBlIGNvbnRhaW5zU3RyaW5n
OkAiLyJdKTsKLSAgICAgICAgYXV0byBleHRlbnNpb25zID0gQVBJOjpBcnJheTo6Y3JlYXRlU3Ry
aW5nQXJyYXkoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6ZXh0ZW5zaW9uc0Zvck1JTUVUeXBl
KG1pbWVUeXBlKSk7Ci0gICAgICAgIFthbGxvd2VkRmlsZUV4dGVuc2lvbnMgYWRkT2JqZWN0c0Zy
b21BcnJheTp3cmFwcGVyKGV4dGVuc2lvbnMpXTsKLSAgICB9XTsKLQotICAgIGF1dG8gYWRkaXRp
b25hbEFsbG93ZWRGaWxlRXh0ZW5zaW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdF0pOwotCi0gICAgW2FjY2VwdGVkRmlsZUV4dGVuc2lvbnMgZW51bWVyYXRlT2JqZWN0
c1VzaW5nQmxvY2s6XihOU1N0cmluZyAqZXh0ZW5zaW9uLCBOU1VJbnRlZ2VyIGluZGV4LCBCT09M
ICpzdG9wKSB7Ci0gICAgICAgIEFTU0VSVChbZXh0ZW5zaW9uIGNoYXJhY3RlckF0SW5kZXg6MF0g
PT0gJy4nKTsKLSAgICAgICAgW2FkZGl0aW9uYWxBbGxvd2VkRmlsZUV4dGVuc2lvbnMgYWRkT2Jq
ZWN0OltleHRlbnNpb24gc3Vic3RyaW5nRnJvbUluZGV4OjFdXTsKLSAgICB9XTsKLSAgICAKLSAg
ICBbYWxsb3dlZEZpbGVFeHRlbnNpb25zIGFkZE9iamVjdHNGcm9tQXJyYXk6YWRkaXRpb25hbEFs
bG93ZWRGaWxlRXh0ZW5zaW9ucy5nZXQoKV07Ci0gICAgcmV0dXJuIFthbGxvd2VkRmlsZUV4dGVu
c2lvbnMgYWxsT2JqZWN0c107Ci19Ci0KLS0gKE5TQXJyYXk8TlNTdHJpbmcgKj4gKilfYWxsb3dl
ZEZpbGVFeHRlbnNpb25zVGl0bGVzCi17Ci0gICAgYXV0byBhY2NlcHRlZE1JTUVUeXBlcyA9IFtz
ZWxmIF9hY2NlcHRlZE1JTUVUeXBlc107Ci0gICAgYXV0byBhY2NlcHRlZEZpbGVFeHRlbnNpb25z
ID0gW3NlbGYgX2FjY2VwdGVkRmlsZUV4dGVuc2lvbnNdOwotCi0gICAgY29uc3RleHByIGF1dG8g
QWxsRmlsZXNUaXRsZSA9IEAiQWxsIEZpbGVzIjsKLSAgICBjb25zdGV4cHIgYXV0byBDdXN0b21G
aWxlc1RpdGxlID0gQCJDdXN0b20gRmlsZXMiOwotICAgIAotICAgIGlmICghW2FjY2VwdGVkTUlN
RVR5cGVzIGNvdW50XSAmJiAhW2FjY2VwdGVkRmlsZUV4dGVuc2lvbnMgY291bnRdKQotICAgICAg
ICByZXR1cm4gQFtBbGxGaWxlc1RpdGxlXTsKLQotICAgIGlmICghKFthY2NlcHRlZE1JTUVUeXBl
cyBjb3VudF0gPT0gMSAmJiAhW2FjY2VwdGVkRmlsZUV4dGVuc2lvbnMgY291bnRdKSkKLSAgICAg
ICAgcmV0dXJuIEBbQ3VzdG9tRmlsZXNUaXRsZSwgQWxsRmlsZXNUaXRsZV07Ci0KLSAgICBhdXRv
IG1pbWVUeXBlID0gW2FjY2VwdGVkTUlNRVR5cGVzIGZpcnN0T2JqZWN0XTsKLSAgICBhdXRvIHJh
bmdlID0gW21pbWVUeXBlIHJhbmdlT2ZTdHJpbmc6QCIvIl07Ci0gICAgCi0gICAgaWYgKCFyYW5n
ZS5sZW5ndGgpCi0gICAgICAgIHJldHVybiBAW0N1c3RvbUZpbGVzVGl0bGUsIEFsbEZpbGVzVGl0
bGVdOwotICAgIAotICAgIGF1dG8gbWltZVR5cGVQcmVmaXggPSBbbWltZVR5cGUgc3Vic3RyaW5n
VG9JbmRleDpyYW5nZS5sb2NhdGlvbl07Ci0gICAgYXV0byBtaW1lVHlwZVN1ZmZpeCA9IFttaW1l
VHlwZSBzdWJzdHJpbmdGcm9tSW5kZXg6cmFuZ2UubG9jYXRpb24gKyAxXTsKLSAgICAKLSAgICBp
ZiAoW21pbWVUeXBlU3VmZml4IGlzRXF1YWxUb1N0cmluZzpAIioiXSkKLSAgICAgICAgcmV0dXJu
IEBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCVAIEZpbGVzIiwgW1ttaW1lVHlwZVBy
ZWZpeCBzdWJzdHJpbmdUb0luZGV4OjFdIHVwcGVyY2FzZVN0cmluZ10sIFttaW1lVHlwZVByZWZp
eCBzdWJzdHJpbmdGcm9tSW5kZXg6MV1dLCBBbGxGaWxlc1RpdGxlXTsKLQotICAgIGlmIChbbWlt
ZVR5cGVTdWZmaXggbGVuZ3RoXSA8PSA0KQotICAgICAgICByZXR1cm4gQFtbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAIiVAICVAIiwgW21pbWVUeXBlU3VmZml4IHVwcGVyY2FzZVN0cmluZ10s
IG1pbWVUeXBlUHJlZml4XSwgQWxsRmlsZXNUaXRsZV07Ci0KLSAgICByZXR1cm4gQFtbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAICVAIiwgbWltZVR5cGVTdWZmaXgsIG1pbWVUeXBlUHJl
Zml4XSwgQWxsRmlsZXNUaXRsZV07CisgICAgcmV0dXJuIHdyYXBwZXIoX29wZW5QYW5lbFBhcmFt
ZXRlcnMtPmFsbG93ZWRGaWxlRXh0ZW5zaW9ucygpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLT3BlblBhbmVsUGFyYW1ldGVyc1By
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS09wZW5QYW5lbFBh
cmFtZXRlcnNQcml2YXRlLmgKaW5kZXggMjllZTgxMjBlNGFmMWJhZWEyMmMwNjI0YWMyZTIzYjRl
MWJkNGFkNi4uN2NkNDQxYzJjZTJlNTgwNmNmMzRkOGMwMTI5YjExZTkxNTAxNGFkMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLT3BlblBhbmVsUGFyYW1l
dGVyc1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tP
cGVuUGFuZWxQYXJhbWV0ZXJzUHJpdmF0ZS5oCkBAIC0zMSw4ICszMSw3IEBACiAKIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNBcnJheTxOU1N0cmluZyAqPiAqX2FjY2Vw
dGVkTUlNRVR5cGVzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwogQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU0FycmF5PE5TU3RyaW5nICo+ICpfYWNjZXB0
ZWRGaWxlRXh0ZW5zaW9ucyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNBcnJheTxOU1N0cmluZyAqPiAqX2Fs
bG93ZWRGaWxlRXh0ZW5zaW9ucyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLUBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNBcnJheTxOU1N0cmluZyAqPiAq
X2FsbG93ZWRGaWxlRXh0ZW5zaW9uc1RpdGxlcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEz
LjQpKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNBcnJheTxOU1N0
cmluZyAqPiAqX2FsbG93ZWRGaWxlRXh0ZW5zaW9ucyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdL
X01BQ19UQkEpKTsKIAogQGVuZAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9VSURlbGVnYXRlLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlE
ZWxlZ2F0ZS5tbQppbmRleCA0OWM3MTQyNzg1ZWMyOWI0NDZmZDk1Njk3ODE5NWExOTdkMzliOTNm
Li4wYTAxYmQxZTcxMDRiNmZmYjgzYmZmZTM1ZjM0NGYxNzliZmE5YzIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUubW0KQEAgLTI2LDYgKzI2LDcgQEAKICNp
bXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiVUlEZWxlZ2F0ZS5oIgogCisjaW1wb3J0ICJBUElB
cnJheS5oIgogI2ltcG9ydCAiQVBJRnJhbWVJbmZvLmgiCiAjaW1wb3J0ICJBUElIaXRUZXN0UmVz
dWx0LmgiCiAjaW1wb3J0ICJDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyLmgiCkBAIC04MjYs
NyArODI3LDcgQEAgYm9vbCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cnVuT3BlblBhbmVsKFdlYlBh
Z2VQcm94eSYgcGFnZSwgV2ViRnJhbWVQcm94eSogd2ViRnIKIAogICAgIGF1dG8gY2hlY2tlciA9
IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNl
bGVjdG9yKHdlYlZpZXc6cnVuT3BlblBhbmVsV2l0aFBhcmFtZXRlcnM6aW5pdGlhdGVkQnlGcmFt
ZTpjb21wbGV0aW9uSGFuZGxlcjopKTsKIAotICAgIFtkZWxlZ2F0ZSB3ZWJWaWV3Om1fdWlEZWxl
Z2F0ZS5tX3dlYlZpZXcgcnVuT3BlblBhbmVsV2l0aFBhcmFtZXRlcnM6d3JhcHBlcigqb3BlblBh
bmVsUGFyYW1ldGVycykgaW5pdGlhdGVkQnlGcmFtZTp3cmFwcGVyKGZyYW1lKSBjb21wbGV0aW9u
SGFuZGxlcjptYWtlQmxvY2tQdHIoW2NoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpLCBsaXN0ZW5l
ciA9IFdURk1vdmUobGlzdGVuZXIpXSAoTlNBcnJheSAqVVJMcykgbXV0YWJsZSB7CisgICAgW2Rl
bGVnYXRlIHdlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBydW5PcGVuUGFuZWxXaXRoUGFy
YW1ldGVyczp3cmFwcGVyKCpvcGVuUGFuZWxQYXJhbWV0ZXJzKSBpbml0aWF0ZWRCeUZyYW1lOndy
YXBwZXIoZnJhbWUpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY2hlY2tlciA9IFdU
Rk1vdmUoY2hlY2tlciksIG9wZW5QYW5lbFBhcmFtZXRlcnMgPSBtYWtlUmVmKCpvcGVuUGFuZWxQ
YXJhbWV0ZXJzKSwgbGlzdGVuZXIgPSBXVEZNb3ZlKGxpc3RlbmVyKV0gKE5TQXJyYXkgKlVSTHMp
IG11dGFibGUgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVu
Q2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoZWNrZXItPmRpZENhbGxD
b21wbGV0aW9uSGFuZGxlcigpOwpAQCAtODQwLDcgKzg0MSw3IEBAIGJvb2wgVUlEZWxlZ2F0ZTo6
VUlDbGllbnQ6OnJ1bk9wZW5QYW5lbChXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYkZyYW1lUHJveHkq
IHdlYkZyCiAgICAgICAgIGZvciAoTlNVUkwgKnVybCBpbiBVUkxzKQogICAgICAgICAgICAgZmls
ZW5hbWVzLmFwcGVuZCh1cmwucGF0aCk7CiAKLSAgICAgICAgbGlzdGVuZXItPmNob29zZUZpbGVz
KGZpbGVuYW1lcyk7CisgICAgICAgIGxpc3RlbmVyLT5jaG9vc2VGaWxlcyhmaWxlbmFtZXMsIG9w
ZW5QYW5lbFBhcmFtZXRlcnMtPmFsbG93ZWRNSU1FVHlwZXMoKS0+dG9TdHJpbmdWZWN0b3IoKSk7
CiAgICAgfSkuZ2V0KCldOwogCiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkuY3Bw
CmluZGV4IDg1NzQ2NTE1ZGE2N2QxNDJhZjdkZmFkODhkZThhNDhhODNmNjFjMTAuLmQxNWZlZTJm
ZDkxYjM3ZTA3MzE5NDVkNTRlM2E0MzMzNTdmMTBiODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkuY3Bw
CkBAIC01NCwxMiArNTQsMTIgQEAgdm9pZCBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5
OjpjaG9vc2VGaWxlcyhjb25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBmaWwKIH0KICNlbmRpZgog
Ci12b2lkIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHk6OmNob29zZUZpbGVzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCit2b2lkIFdlYk9wZW5QYW5lbFJlc3VsdExpc3Rl
bmVyUHJveHk6OmNob29zZUZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBhbGxvd2VkTUlNRVR5cGVzKQogewogICAgIGlmICghbV9wYWdl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3BhZ2UtPmRpZENob29zZUZpbGVzRm9yT3BlblBh
bmVsKGZpbGVuYW1lcyk7CisgICAgbV9wYWdlLT5kaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbChm
aWxlbmFtZXMsIGFsbG93ZWRNSU1FVHlwZXMpOwogfQogCiB2b2lkIFdlYk9wZW5QYW5lbFJlc3Vs
dExpc3RlbmVyUHJveHk6OmNhbmNlbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5LmgKaW5kZXggMWVlY2RjYTE3
ZGMzOGRhZTk1ZTI4OWNhYWY3MDg2MWNkMGI3NmM1Zi4uM2E5OGE0NDYzNGQ2OWQ1NThlODI2YzBl
Y2EzYzc2NWQ5Yzg1MjJkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkuaApAQCAtNTAsNyArNTAsNyBAQCBw
dWJsaWM6CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICB2b2lkIGNob29zZUZpbGVzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0IFN0cmluZyYgZGlzcGxheVN0cmlu
ZywgY29uc3QgQVBJOjpEYXRhKiBpY29uSW1hZ2VEYXRhKTsKICNlbmRpZgotICAgIHZvaWQgY2hv
b3NlRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcyk7CisgICAgdm9pZCBjaG9v
c2VGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgYWxsb3dlZE1JTUVUeXBlcyA9IHsgfSk7CiAgICAgdm9pZCBjYW5jZWwoKTsKIAogICAg
IHZvaWQgaW52YWxpZGF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAKaW5kZXggMWRiY2M3NWEyY2VmZDhjY2RlYjJmNTZmYTNmNjI2NjcyNGM2MzY3OS4uMWQxMmE1
ODBlNWEwNDk1ZWY2YWVhNWFkMzI3N2I4NzViZTdiZTgxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC02NjkwLDcgKzY2OTAsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6ZGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWxXaXRoRGlzcGxheVN0cmluZ0FuZEljb24o
Y29uc3QgVmVjdAogfQogI2VuZGlmCiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRDaG9vc2VGaWxl
c0Zvck9wZW5QYW5lbChjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZVVSTHMpCit2b2lkIFdlYlBh
Z2VQcm94eTo6ZGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWwoY29uc3QgVmVjdG9yPFN0cmluZz4m
IGZpbGVVUkxzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpCiB7CiAgICAgaWYgKCFoYXNSdW5uaW5n
UHJvY2VzcygpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCmluZGV4IGY4Y2U1MDhlYTE3NzhiZDVkNTQ4ODEyYTYwMzA1ZDE4OWUxMjgzZTEuLjVh
NzZlZDdmMDk3NDY2NTAxMzVjOWE4NTAzNjczNGU4MThkMGZhM2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0xMjU3LDcgKzEyNTcsNyBAQCBwdWJsaWM6CiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICB2b2lkIGRpZENob29zZUZpbGVzRm9yT3BlblBhbmVs
V2l0aERpc3BsYXlTdHJpbmdBbmRJY29uKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3Ry
aW5nJiBkaXNwbGF5U3RyaW5nLCBjb25zdCBBUEk6OkRhdGEqIGljb25EYXRhKTsKICNlbmRpZgot
ICAgIHZvaWQgZGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWwoY29uc3QgVmVjdG9yPFN0cmluZz4m
KTsKKyAgICB2b2lkIGRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBmaWxlVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsbG93ZWRNSU1FVHlwZXMpOwog
ICAgIHZvaWQgZGlkQ2FuY2VsRm9yT3BlblBhbmVsKCk7CiAKICAgICBXZWJQYWdlQ3JlYXRpb25Q
YXJhbWV0ZXJzIGNyZWF0aW9uUGFyYW1ldGVycyhXZWJQcm9jZXNzUHJveHkmLCBEcmF3aW5nQXJl
YVByb3h5JiwgUmVmUHRyPEFQSTo6V2Vic2l0ZVBvbGljaWVzPiYmID0gbnVsbHB0cik7CmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggM2IxZWRhNzYx
Njg4MWVkMzg5YzM1YmMxMjUzN2RiOWUxNzA4YjA3Zi4uNDg3ZDA3NTFhZjQ0N2RkZWE1ZjRlNDk2
MWJiNDJmZmM4ZGZiOWU0ZSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDIwLTA3LTA0ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgW21hY09TXSBBbGxvdyBzZWxl
Y3RpbmcgSEVJRiBpbWFnZXMgaWYgdGhlICdhY2NlcHQnIGF0dHJpYnV0ZSBpbmNsdWRlcyBhbiBp
bWFnZSBNSU1FIHR5cGUgdGhhdCB0aGUgcGxhdGZvcm0gY2FuIHRyYW5zY29kZSB0aGUgSEVJRiB0
bworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNDg5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHNj
b3BlIG9mIHRoaXMgZW5oYW5jZW1lbnQgd2lsbCBiZSBzY2FsZWQgZG93bi4gTm8gVUkgY2hhbmdl
IHdpbGwgYmUKKyAgICAgICAgZG9uZSBmb3Igbm93LiBPbmx5IGFsbG93IEhFSUYvSEVJQyBpbWFn
ZXMgdG8gYmUgc2VsZWN0ZWQgaWYgdGhlICdhY2NlcHQnCisgICAgICAgIGF0dHJpYnV0ZSBpbmNs
dWRlIGEgbWltZSB0eXBlIHdoaWNoIENHIHN1cHBvcnRzIHRyYW5zY29kaW5nIHRoZSBIRUlGL0hF
SUMKKyAgICAgICAgaW1hZ2VzIHRvLgorCisgICAgICAgICogTWluaUJyb3dzZXIvbWFjL1dLMkJy
b3dzZXJXaW5kb3dDb250cm9sbGVyLm06CisgICAgICAgICgtW1dLMkJyb3dzZXJXaW5kb3dDb250
cm9sbGVyIGRlYWxsb2NdKToKKyAgICAgICAgKC1bV0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIg
d2ViVmlldzpydW5PcGVuUGFuZWxXaXRoUGFyYW1ldGVyczppbml0aWF0ZWRCeUZyYW1lOmNvbXBs
ZXRpb25IYW5kbGVyOndlYlZpZXc6cnVuT3BlblBhbmVsV2l0aFBhcmFtZXRlcnM6aW5pdGlhdGVk
QnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bRmlsZUV4dGVuc2lvbnNQ
b3B1cFRhcmdldCBpbml0V2l0aE9wZW5QYW5lbDphbGxvd2VkRmlsZUV4dGVuc2lvbnM6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW0ZpbGVFeHRlbnNpb25zUG9wdXBUYXJnZXQgcG9wdXBBY3Rpb246
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW0ZpbGVFeHRlbnNpb25zUG9wdXBUYXJnZXQgZGVhbGxv
Y10pOiBEZWxldGVkLgorICAgICAgICAoLVtXSzJCcm93c2VyV2luZG93Q29udHJvbGxlciBjcmVh
dGVGaWx0ZXJWaWV3OnBvcHVwVGFyZ2V0Ol0pOiBEZWxldGVkLgorCiAyMDIwLTA3LTA0ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIFJlbW92ZSBhbGwg
ZmVhdHVyZXMgZnJvbSBGZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyB0aGF0IGFyZSBhbHJlYWR5IG1l
bnRpb25lZCBpbiBQbGF0Zm9ybUVuYWJsZUNvY29hLmgKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlC
cm93c2VyL21hYy9XSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5tIGIvVG9vbHMvTWluaUJyb3dz
ZXIvbWFjL1dLMkJyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0KaW5kZXggNTcwYWFhNTRkYjk3MGU0
NzQyNDg5NGY3YmQ4NzFhNzNmMmM3ZGQwZS4uM2RmOTlkNTM3MjdlNDg5NGI3NDU2ZjcyZGZkZjdi
MmQ2YTA3N2I3ZSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvbWFjL1dLMkJyb3dzZXJX
aW5kb3dDb250cm9sbGVyLm0KKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvbWFjL1dLMkJyb3dzZXJX
aW5kb3dDb250cm9sbGVyLm0KQEAgLTcyLDQ1ICs3Miw2IEBAIC0gKHZvaWQpcGVyZm9ybUFjdGlv
bjooTlNUZXh0RmluZGVyQWN0aW9uKW9wCiAKIEBlbmQKIAotLy8gVGFyZ2V0IGZvciB0aGUgRmls
ZUV4dGVuc2lvbnMgTlNQb3B1cEJ1dHRvbiBpbiB0aGUgT3BlblBhbmVsJ3MgQWNjZXNzb3J5Vmll
dy4KLUBpbnRlcmZhY2UgRmlsZUV4dGVuc2lvbnNQb3B1cFRhcmdldCA6IE5TT2JqZWN0IHsKLUBw
cml2YXRlCi0gICAgTlNPcGVuUGFuZWwgKl9vcGVuUGFuZWw7Ci0gICAgTlNBcnJheTxOU1N0cmlu
ZyAqPiAqX2FsbG93ZWRGaWxlRXh0ZW5zaW9uczsKLX0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IEZpbGVFeHRlbnNpb25zUG9wdXBUYXJnZXQKLQotLSAoaWQpaW5pdFdpdGhPcGVuUGFuZWw6KE5T
T3BlblBhbmVsKilvcGVuUGFuZWwgYWxsb3dlZEZpbGVFeHRlbnNpb25zOihOU0FycmF5PE5TU3Ry
aW5nICo+ICopYWxsb3dlZEZpbGVFeHRlbnNpb25zIHsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKSB7Ci0gICAgICAgIF9vcGVuUGFuZWwgPSBvcGVuUGFuZWw7Ci0gICAgICAgIF9hbGxv
d2VkRmlsZUV4dGVuc2lvbnMgPSBbYWxsb3dlZEZpbGVFeHRlbnNpb25zIGNvcHldOwotICAgIH0K
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClwb3B1cEFjdGlvbjooaWQpc2VuZGVyIHsK
LSAgICAvLyBMYXN0IGl0ZW0uCi0gICAgaWYgKFtzZW5kZXIgaW5kZXhPZlNlbGVjdGVkSXRlbV0g
PT0gW3NlbmRlciBudW1iZXJPZkl0ZW1zXSAtIDEpCi0gICAgICAgIFtfb3BlblBhbmVsIHNldEFs
bG93ZWRGaWxlVHlwZXM6bmlsXTsKLSAgICBlbHNlIGlmICghW3NlbmRlciBpbmRleE9mU2VsZWN0
ZWRJdGVtXSkgewotICAgICAgICAvLyBGaXJzdCBpdGVtLgotICAgICAgICBpZiAoIVtfYWxsb3dl
ZEZpbGVFeHRlbnNpb25zIGNvdW50XSkKLSAgICAgICAgICAgIFtfb3BlblBhbmVsIHNldEFsbG93
ZWRGaWxlVHlwZXM6QFtAIiJdXTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgW19vcGVuUGFu
ZWwgc2V0QWxsb3dlZEZpbGVUeXBlczpfYWxsb3dlZEZpbGVFeHRlbnNpb25zXTsKLSAgICB9Ci19
Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfYWxsb3dlZEZpbGVFeHRlbnNpb25zIHJlbGVh
c2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCiBAaW50ZXJmYWNlIFdLMkJy
b3dzZXJXaW5kb3dDb250cm9sbGVyICgpIDxOU1RleHRGaW5kZXJCYXJDb250YWluZXIsIFdLTmF2
aWdhdGlvbkRlbGVnYXRlLCBXS1VJRGVsZWdhdGUsIF9XS0ljb25Mb2FkaW5nRGVsZWdhdGU+CiBA
ZW5kCiAKQEAgLTEyNSw3ICs4Niw2IEBAIEBpbXBsZW1lbnRhdGlvbiBXSzJCcm93c2VyV2luZG93
Q29udHJvbGxlciB7CiAgICAgTWluaUJyb3dzZXJOU1RleHRGaW5kZXIgKl90ZXh0RmluZGVyOwog
ICAgIE5TVmlldyAqX3RleHRGaW5kQmFyVmlldzsKICAgICBCT09MIF9maW5kQmFyVmlzaWJsZTsK
LSAgICBGaWxlRXh0ZW5zaW9uc1BvcHVwVGFyZ2V0ICpfZmlsZUV4dGVuc2lvbnNQb3B1cFRhcmdl
dDsKIH0KIAogLSAodm9pZClhd2FrZUZyb21OaWIKQEAgLTIxMSw3ICsxNzEsNiBAQCAtICh2b2lk
KWRlYWxsb2MKIAogICAgIFtfd2ViVmlldyByZWxlYXNlXTsKICAgICBbX2NvbmZpZ3VyYXRpb24g
cmVsZWFzZV07Ci0gICAgW19maWxlRXh0ZW5zaW9uc1BvcHVwVGFyZ2V0IHJlbGVhc2VdOwogCiAg
ICAgW3N1cGVyIGRlYWxsb2NdOwogfQpAQCAtNjI5LDU0ICs1ODgsNiBAQCAtICh2b2lkKXdlYlZp
ZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsV2l0aFBy
b21wdDooTlNTdAogICAgIH1dOwogfQogCi0tIChudWxsYWJsZSBOU1ZpZXcgKiljcmVhdGVGaWx0
ZXJWaWV3OihOU0FycmF5ICopdGl0bGVzIHBvcHVwVGFyZ2V0OihGaWxlRXh0ZW5zaW9uc1BvcHVw
VGFyZ2V0Kilwb3B1cFRhcmdldAotewotICAgIE5TVGV4dEZpZWxkKiBsYWJlbCA9IFtbW05TVGV4
dEZpZWxkIGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TWmVyb1JlY3RdIGF1dG9yZWxlYXNlXTsKLSAg
ICBbbGFiZWwgc2V0U3RyaW5nVmFsdWU6QCJGb3JtYXQ6Il07Ci0gICAgW2xhYmVsIHNldEVkaXRh
YmxlOk5PXTsKLSAgICBbbGFiZWwgc2V0U2VsZWN0YWJsZTpOT107Ci0gICAgW2xhYmVsIHNldEJv
cmRlcmVkOk5PXTsKLSAgICBbbGFiZWwgc2V0QmFja2dyb3VuZENvbG9yOltOU0NvbG9yIGNsZWFy
Q29sb3JdXTsKLSAgICBbbGFiZWwgc2l6ZVRvRml0XTsKLQotICAgIE5TUG9wVXBCdXR0b24gKmJ1
dHRvbiA9IFtbW05TUG9wVXBCdXR0b24gYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNaZXJvUmVjdCBw
dWxsc0Rvd246Tk9dIGF1dG9yZWxlYXNlXTsKLSAgICBbYnV0dG9uIGFkZEl0ZW1zV2l0aFRpdGxl
czp0aXRsZXNdOwotICAgIFtidXR0b24gc2V0VGFyZ2V0OnBvcHVwVGFyZ2V0XTsKLSAgICBbYnV0
dG9uIHNldEFjdGlvbjpAc2VsZWN0b3IocG9wdXBBY3Rpb246KV07Ci0gICAgW2J1dHRvbiBzaXpl
VG9GaXRdOwotICAgIFtidXR0b24gc2VsZWN0SXRlbUF0SW5kZXg6MF07Ci0gICAgW3BvcHVwVGFy
Z2V0IHBvcHVwQWN0aW9uOmJ1dHRvbl07Ci0gICAgCi0gICAgTlNWaWV3KiBmaWx0ZXJWaWV3ID0g
W1tbTlNWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TWmVyb1JlY3RdIGF1dG9yZWxlYXNlXTsK
LSAgICBbZmlsdGVyVmlldyBhZGRTdWJ2aWV3OmxhYmVsXTsKLSAgICBbZmlsdGVyVmlldyBhZGRT
dWJ2aWV3OmJ1dHRvbl07Ci0KLSAgICBjb25zdCBDR0Zsb2F0IG1hcmdpbiA9IDIwOwotICAgIGNv
bnN0IENHRmxvYXQgc3BhY2luZyA9IDI7Ci0gICAgY29uc3QgQ0dGbG9hdCBtaW5CdXR0b25XaWR0
aCA9IDIzMDsKLQotICAgIE5TUmVjdCBsYWJlbEZyYW1lID0gW2xhYmVsIGZyYW1lXTsKLSAgICBO
U1JlY3QgYnV0dG9uRnJhbWUgPSBbYnV0dG9uIGZyYW1lXTsKLSAgICBOU1JlY3QgZmlsdGVyVmll
d0ZyYW1lID0gW2ZpbHRlclZpZXcgZnJhbWVdOwotCi0gICAgLy8gU2V0IGEgbWluaW11bSB3aWR0
aCBmb3IgJ2J1dHRvbicuCi0gICAgYnV0dG9uRnJhbWUuc2l6ZSA9IE5TTWFrZVNpemUoTUFYKE5T
V2lkdGgoYnV0dG9uRnJhbWUpLCBtaW5CdXR0b25XaWR0aCksIE5TSGVpZ2h0KGJ1dHRvbkZyYW1l
KSk7Ci0gICAgCi0gICAgLy8gRmlsdGVyVmlldyB3aWxsIGxheSBvdXQgJ2xhYmVsJyBhbmQgJ2J1
dHRvbicgaG9yaXpvbnRhbGx5IGFuZCBoYXZlIGEgdmVydGljYWwgbWFyZ2lucy4KLSAgICBmaWx0
ZXJWaWV3RnJhbWUuc2l6ZSA9IE5TTWFrZVNpemUoTlNXaWR0aChsYWJlbEZyYW1lKSArIE5TV2lk
dGgoYnV0dG9uRnJhbWUpICsgc3BhY2luZywgTUFYKE5TSGVpZ2h0KGxhYmVsRnJhbWUpLCBOU0hl
aWdodChidXR0b25GcmFtZSkpICsgbWFyZ2luICogMik7Ci0gICAgW2ZpbHRlclZpZXcgc2V0RnJh
bWU6ZmlsdGVyVmlld0ZyYW1lXTsKLQotICAgIC8vICdsYWJlbCcgd2lsbCBiZSBsYWlkIG91dCBj
ZW50ZXIgdmVydGljYWxseS4KLSAgICBsYWJlbEZyYW1lLm9yaWdpbiA9IE5TTWFrZVBvaW50KE5T
TWluWChsYWJlbEZyYW1lKSwgKE5TSGVpZ2h0KGZpbHRlclZpZXdGcmFtZSkgLSBOU0hlaWdodChs
YWJlbEZyYW1lKSkgLyAyKTsKLSAgICBbbGFiZWwgc2V0RnJhbWU6bGFiZWxGcmFtZV07Ci0gICAg
Ci0gICAgLy8gJ2J1dHRvbicgd2lsbCBiZSBsYWlkIG91dCBjZW50ZXIgdmVydGljYWxseSBhbmQg
aXQgd2lsbCBjb21lIGFmdGVyICdsYWJlbCcgaG9yaXpvbnRhbGx5LgotICAgIGJ1dHRvbkZyYW1l
Lm9yaWdpbiA9IE5TTWFrZVBvaW50KE5TTWF4WChsYWJlbEZyYW1lKSArIHNwYWNpbmcsIChOU0hl
aWdodChmaWx0ZXJWaWV3RnJhbWUpIC0gTlNIZWlnaHQoYnV0dG9uRnJhbWUpKSAvIDIpOwotICAg
IFtidXR0b24gc2V0RnJhbWU6YnV0dG9uRnJhbWVdOwotCi0gICAgcmV0dXJuIGZpbHRlclZpZXc7
Ci19Ci0KICNpZiBfX2hhc19mZWF0dXJlKG9iamNfZ2VuZXJpY3MpCiAtICh2b2lkKXdlYlZpZXc6
KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuT3BlblBhbmVsV2l0aFBhcmFtZXRlcnM6KFdLT3BlblBh
bmVsUGFyYW1ldGVycyAqKXBhcmFtZXRlcnMgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8g
KilmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBcnJheTxOU1VSTCAqPiAqIFVS
THMpKWNvbXBsZXRpb25IYW5kbGVyCiAjZWxzZQpAQCAtNjg2LDE0ICs1OTcsNyBAQCAtICh2b2lk
KXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuT3BlblBhbmVsV2l0aFBhcmFtZXRlcnM6
KFdLT3BlblBhbmVsUGFyYQogICAgIE5TT3BlblBhbmVsICpvcGVuUGFuZWwgPSBbTlNPcGVuUGFu
ZWwgb3BlblBhbmVsXTsKIAogICAgIG9wZW5QYW5lbC5hbGxvd3NNdWx0aXBsZVNlbGVjdGlvbiA9
IHBhcmFtZXRlcnMuYWxsb3dzTXVsdGlwbGVTZWxlY3Rpb247Ci0KLSAgICBbX2ZpbGVFeHRlbnNp
b25zUG9wdXBUYXJnZXQgcmVsZWFzZV07Ci0gICAgX2ZpbGVFeHRlbnNpb25zUG9wdXBUYXJnZXQg
PSBbW0ZpbGVFeHRlbnNpb25zUG9wdXBUYXJnZXQgYWxsb2NdIGluaXRXaXRoT3BlblBhbmVsOiBv
cGVuUGFuZWwgYWxsb3dlZEZpbGVFeHRlbnNpb25zOiBwYXJhbWV0ZXJzLl9hbGxvd2VkRmlsZUV4
dGVuc2lvbnNdOwotCi0gICAgTlNBcnJheSAqYWxsb3dlZEZpbGVFeHRlbnNpb25zVGl0bGVzID0g
cGFyYW1ldGVycy5fYWxsb3dlZEZpbGVFeHRlbnNpb25zVGl0bGVzOwotICAgIE5TVmlldyAqZmls
dGVyVmlldyA9IFtzZWxmIGNyZWF0ZUZpbHRlclZpZXc6YWxsb3dlZEZpbGVFeHRlbnNpb25zVGl0
bGVzIHBvcHVwVGFyZ2V0Ol9maWxlRXh0ZW5zaW9uc1BvcHVwVGFyZ2V0XTsKLSAgICBpZiAoZmls
dGVyVmlldykKLSAgICAgICAgW29wZW5QYW5lbCBzZXRBY2Nlc3NvcnlWaWV3OmZpbHRlclZpZXdd
OworICAgIFtvcGVuUGFuZWwgc2V0QWxsb3dlZEZpbGVUeXBlczpwYXJhbWV0ZXJzLl9hbGxvd2Vk
RmlsZUV4dGVuc2lvbnNdOwogCiAgICAgW29wZW5QYW5lbCBiZWdpblNoZWV0TW9kYWxGb3JXaW5k
b3c6d2ViVmlldy53aW5kb3cgY29tcGxldGlvbkhhbmRsZXI6XihOU0ludGVnZXIgcmVzdWx0KSB7
CiAgICAgICAgIGlmIChyZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNlT0spCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403546</attachid>
            <date>2020-07-04 21:40:53 -0700</date>
            <delta_ts>2022-02-10 16:49:35 -0800</delta_ts>
            <desc>Patch for review</desc>
            <filename>bug213828.patch</filename>
            <type>text/plain</type>
            <size>5400</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggY2Y0YzJiNTk5NTAuLmIxYjQxMjA2ZmNhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE5IEBACisyMDIwLTA3LTA0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0NHXSBJbXBsZW1lbnQgaW1hZ2UgdHJhbnNjb2RpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzgyOAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBhIGZ1
bmN0aW9uIHRoYXQgdHJhbnNjb2RlcyBpbWFnZXMgYW1vbmcgYSBzZXQgb2YgZmlsZXMgZ2l2ZW4K
KyAgICAgICAgdGhlIGFsbG93ZWRNSU1FVHlwZXMuIFRoZSBkZXN0aW5hdGlvbiBNSU1FIHR5cGUg
b2YgdGhlc2UgaW1hZ2VzIGlzIHRoZQorICAgICAgICBmaXJzdCBNSU1FIHR5cGUgaW4gdGhlIGFs
bG93ZWRNSU1FVHlwZXMgd2hpY2ggQ0cgc3VwcG9ydHMgZW5jb2RpbmcgdG8uCisKKyAgICAgICAg
KiBQbGF0Zm9ybS9jZy9DR1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OnRyYW5zY29k
ZUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6dHJhbnNjb2RlSW1hZ2VzKToKKyAgICAgICAgKiBQ
bGF0Zm9ybS9jZy9DR1V0aWxpdGllcy5oOgorCiAyMDIwLTA3LTA0ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBBbGxvdyBzZWxl
Y3RpbmcgSEVJRiBpbWFnZXMgaWYgdGhlICdhY2NlcHQnIGF0dHJpYnV0ZSBpbmNsdWRlcyBhbiBp
bWFnZSBNSU1FIHR5cGUgdGhhdCB0aGUgcGxhdGZvcm0gY2FuIHRyYW5zY29kZSB0aGUgSEVJRiB0
bwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jZy9DR1V0aWxpdGllcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NnL0NHVXRpbGl0aWVzLmNwcAppbmRleCBhZjA4ZjZk
NWVmYi4uMzhhMjRiYTU3MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2cv
Q0dVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2cvQ0dVdGlsaXRp
ZXMuY3BwCkBAIC0yNiw2ICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkNHVXRpbGl0aWVzLmgiCiAKKyNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VUSVV0aWxp
dGllcy5oPgorI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBwYWludEltYWdlKENHQ29u
dGV4dFJlZiBjb250ZXh0LCBDR0ltYWdlUmVmIGltYWdlLCBDR0Zsb2F0IHNjYWxlRmFjdG9yLCBD
R1BvaW50IGRlc3RpbmF0aW9uLCBDR1JlY3Qgc291cmNlKQpAQCAtNDYsNCArNTIsNzEgQEAgdm9p
ZCBwYWludEltYWdlKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0ltYWdlUmVmIGltYWdlLCBDR0Zs
b2F0IHNjYWxlRmFjdG9yLCBDR1AKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQp
OwogfQogCitzdGF0aWMgU3RyaW5nIHRyYW5zY29kZUltYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBBU1NFUlQobWltZVR5cGUuc3RhcnRzV2l0
aCgiaW1hZ2UvIl9zKSk7CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHRyYW5zY29kZXMgZmlsZXMg
b25seS4KKyAgICBpZiAoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHBhdGgsIEZpbGVTeXN0
ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpCisgICAgICAgIHJldHVybiBudWxs
U3RyaW5nKCk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGltYWdlIHNvdXJjZS4gRW5zdXJlIHRoZSAn
cGF0aCcgaXMgYWN0dWFsbHkgYW4gaW1hZ2UgZmlsZS4KKyAgICBhdXRvIHNvdXJjZVVSTCA9IGFk
b3B0Q0YoQ0ZVUkxDcmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
cGF0aC5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBrQ0ZVUkxQT1NJWFBhdGhTdHlsZSwgZmFsc2Up
KTsKKyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZVdpdGhVUkwo
c291cmNlVVJMLmdldCgpLCBudWxscHRyKSk7CisgICAgaWYgKCFzb3VyY2UpCisgICAgICAgIHJl
dHVybiBudWxsU3RyaW5nKCk7CisKKyAgICAvLyBFbnN1cmUgdGhlIGZvcm1hdCBvZiB0aGUgaW1h
Z2Ugc291cmNlIGlzIGRpZmZlcmVudCBmcm9tICdtaW1lVHlwZScuCisgICAgYXV0byBzb3VyY2VV
VEkgPSBTdHJpbmcoQ0dJbWFnZVNvdXJjZUdldFR5cGUoc291cmNlLmdldCgpKSk7CisgICAgYXV0
byByZXBsYWNlbWVudFVUSSA9IFdlYkNvcmU6OlVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSk7Cisg
ICAgaWYgKHNvdXJjZVVUSSA9PSByZXBsYWNlbWVudFVUSSkKKyAgICAgICAgcmV0dXJuIG51bGxT
dHJpbmcoKTsKKworICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlLgorICAgIEZpbGVTeXN0
ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSByZXBsYWNlbWVudEZpbGVIYW5kbGU7CisgICAgU3RyaW5n
IHJlcGxhY2VtZW50UGF0aCA9IEZpbGVTeXN0ZW06Om9wZW5UZW1wb3JhcnlGaWxlKCJ0ZW1wSW1h
Z2UiX3MsIHJlcGxhY2VtZW50RmlsZUhhbmRsZSk7CisgICAgaWYgKHJlcGxhY2VtZW50RmlsZUhh
bmRsZSA9PSBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKSB7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRF9XSVRIX01FU1NBR0UoIlJlcGxhY2VtZW50IGltYWdlIGNvdWxk
IG5vdCBiZSBjcmVhdGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbFN0cmluZygpOworICAgIH0K
KworICAgIC8vIENyZWF0ZSB0aGUgZGF0YSBjb25zdW1lci4KKyAgICBDR0RhdGFDb25zdW1lckNh
bGxiYWNrcyBjYWxsYmFja3MgPSB7IFtdKHZvaWQgKmluZm8sIGNvbnN0IHZvaWQqIGJ1ZmZlciwg
c2l6ZV90IGNvdW50KSAtPiBzaXplX3QgeworICAgICAgICBhdXRvIHBsYXRmb3JtRmlsZUhhbmRs
ZSA9ICpzdGF0aWNfY2FzdDxGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUqPihpbmZvKTsK
KyAgICAgICAgcmV0dXJuIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKHBsYXRmb3JtRmlsZUhhbmRs
ZSwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlciksIGNvdW50KTsKKyAgICB9LCBudWxs
cHRyIH07CisKKyAgICAvLyBDcmVhdGUgdGhlIGltYWdlIHJlcGxhY2VtZW50LgorICAgIGF1dG8g
Y29uc3VtZXIgPSBhZG9wdENGKENHRGF0YUNvbnN1bWVyQ3JlYXRlKCZyZXBsYWNlbWVudEZpbGVI
YW5kbGUsICZjYWxsYmFja3MpKTsKKyAgICBhdXRvIHJlcGxhY2VtZW50ID0gYWRvcHRDRihDR0lt
YWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YUNvbnN1bWVyKGNvbnN1bWVyLmdldCgpLCByZXBs
YWNlbWVudFVUSS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCAxLCBudWxscHRyKSk7CisKKyAgICAv
LyBXcml0ZSB0aGUgc291cmNlIGltYWdlIHRvIHRoZSByZXBsYWNlbWVudCBpbWFnZS4KKyAgICBz
aXplX3QgaW5kZXggPSBDR0ltYWdlU291cmNlR2V0UHJpbWFyeUltYWdlSW5kZXgoc291cmNlLmdl
dCgpKTsKKyAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZUZyb21Tb3VyY2UocmVwbGFjZW1l
bnQuZ2V0KCksIHNvdXJjZS5nZXQoKSwgaW5kZXgsIG51bGxwdHIpOworICAgIENHSW1hZ2VEZXN0
aW5hdGlvbkZpbmFsaXplKHJlcGxhY2VtZW50LmdldCgpKTsKKyAgICBGaWxlU3lzdGVtOjpjbG9z
ZUZpbGUocmVwbGFjZW1lbnRGaWxlSGFuZGxlKTsKKworICAgIHJldHVybiByZXBsYWNlbWVudFBh
dGg7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IHRyYW5zY29kZUltYWdlcyhjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGF0aHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbGxvd2VkTUlNRVR5cGVzKQorewor
ICAgIFN0cmluZyBtaW1lVHlwZUZvckVuY29kaW5nID0gV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3Ry
eTo6cHJlZmVycmVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKGFsbG93ZWRNSU1FVHlwZXMsIHsg
fSk7CisgICAgaWYgKG1pbWVUeXBlRm9yRW5jb2RpbmcuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBWZWN0b3I8U3RyaW5nPiByZXBsYWNlbWVudFBhdGhzOworICAgIHJlcGxh
Y2VtZW50UGF0aHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXRocy5zaXplKCkpOworCisgICAg
Zm9yIChhdXRvJiBwYXRoIDogcGF0aHMpIHsKKyAgICAgICAgYXV0byBtaW1lVHlwZSA9IFdlYkNv
cmU6Ok1JTUVUeXBlUmVnaXN0cnk6Om1pbWVUeXBlRm9yUGF0aChwYXRoKTsKKyAgICAgICAgaWYg
KGFsbG93ZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKQorICAgICAgICAgICAgcmVwbGFj
ZW1lbnRQYXRocy51bmNoZWNrZWRBcHBlbmQobnVsbFN0cmluZygpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmVwbGFjZW1lbnRQYXRocy51bmNoZWNrZWRBcHBlbmQodHJhbnNjb2RlSW1h
Z2UocGF0aCwgbWltZVR5cGVGb3JFbmNvZGluZykpOworICAgIH0KKworICAgIHJldHVybiByZXBs
YWNlbWVudFBhdGhzOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vY2cvQ0dVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vY2cvQ0dVdGlsaXRpZXMuaAppbmRleCA4NTFkMTgxYThmYy4uNTU1MjY1NWQyNTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2cvQ0dVdGlsaXRpZXMuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NnL0NHVXRpbGl0aWVzLmgKQEAgLTIzLDEzICsyMywxMSBA
QAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgQ0dV
dGlsaXRpZXNfaAotI2RlZmluZSBDR1V0aWxpdGllc19oCisjcHJhZ21hIG9uY2UKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKIHZvaWQgcGFpbnRJbWFnZShDR0NvbnRleHRSZWYsIENHSW1hZ2VSZWYs
IENHRmxvYXQgc2NhbGVGYWN0b3IsIENHUG9pbnQgZGVzdGluYXRpb24sIENHUmVjdCBzb3VyY2Up
OworVmVjdG9yPFN0cmluZz4gdHJhbnNjb2RlSW1hZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXRocywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsbG93ZWRNSU1FVHlwZXMpOwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIENHVXRpbGl0aWVzX2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>