<?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>224591</bug_id>
          
          <creation_ts>2021-04-14 20:34:15 -0700</creation_ts>
          <short_desc>Deploy Ref/RefPtr in ReplaceSelectionCommand</short_desc>
          <delta_ts>2021-04-15 01:30:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>iang</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>julian_a_gonzalez</cc>
    
    <cc>mifenton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1750465</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-14 20:34:15 -0700</bug_when>
    <thetext>We should use smart pointers everywhere in ReplaceSelectionCommand based on the new rule we came up with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750469</commentid>
    <comment_count>1</comment_count>
      <attachid>426071</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-14 20:36:54 -0700</bug_when>
    <thetext>Created attachment 426071
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750470</commentid>
    <comment_count>2</comment_count>
      <attachid>426071</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2021-04-14 20:49:41 -0700</bug_when>
    <thetext>Comment on attachment 426071
Patch

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

LGTM. r=me.

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:562
&gt; +        ScriptDisallowedScope::InMainThread scriptDisallowedScope;

Why do we need this here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750472</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-14 20:52:09 -0700</bug_when>
    <thetext>(In reply to Jiewen Tan from comment #2)
&gt; Comment on attachment 426071 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=426071&amp;action=review
&gt; 
&gt; LGTM. r=me.
&gt; 
&gt; &gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:562
&gt; &gt; +        ScriptDisallowedScope::InMainThread scriptDisallowedScope;
&gt; 
&gt; Why do we need this here?

Because we&apos;re accessing the render objects. We don&apos;t want any script execution to happen there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750473</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-14 20:52:44 -0700</bug_when>
    <thetext>Huh, weird. Not sure why we didn&apos;t hit that compilation error locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750477</commentid>
    <comment_count>5</comment_count>
      <attachid>426072</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-14 21:03:28 -0700</bug_when>
    <thetext>Created attachment 426072
Fixed builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750480</commentid>
    <comment_count>6</comment_count>
      <attachid>426072</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-14 21:04:38 -0700</bug_when>
    <thetext>Comment on attachment 426072
Fixed builds

This has already been reviewed by Jiewen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750513</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-15 00:34:54 -0700</bug_when>
    <thetext>Committed r276006 (236558@main): &lt;https://commits.webkit.org/236558@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750514</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-15 00:35:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/76689476&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426071</attachid>
            <date>2021-04-14 20:36:54 -0700</date>
            <delta_ts>2021-04-14 21:07:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224591-20210414203654.patch</filename>
            <type>text/plain</type>
            <size>31731</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1OTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODgzODE1NjQ0ZWNiNmQ2
MDg4ZWUwOGE1M2ZkZDY0YjU3NGQxYTIyZS4uYjljYjQ1MmQ2OWZhZTQ5Yzg5MDczNjFhYmYxMDVm
ZTU2ZmQ5YmU3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDIxLTA0LTE0ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIERlcGxveSBSZWYvUmVmUHRy
IGluIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ1OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBEZXBsb3llZCBSZWYvUmVmUHRyIGluIFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmNwcCBwZXIgZ3VpZGVsaW5lcyB3ZSBvdXRsaW5lZCBpbgorICAgICAgICBodHRw
czovL2xpc3RzLndlYmtpdC5vcmcvcGlwZXJtYWlsL3dlYmtpdC1kZXYvMjAyMC1TZXB0ZW1iZXIv
MDMxMzg2Lmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Bdm9pZGluZ1ByZWNlZGluZ05vZGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlVW5yZW5k
ZXJlZE5vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92
ZUludGVyY2hhbmdlTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OnNob3VsZE1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmZyYWdtZW50TmVlZHNDb2xv
clRyYW5zZm9ybWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpyZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjptYWtlSW5zZXJ0ZWRDb250ZW50Um91
bmRUcmlwcGFibGVXaXRoSFRNTFRyZWVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjptb3ZlTm9kZU91dE9mQW5jZXN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnBvc2l0aW9uQXRFbmRPZkluc2VydGVkQ29u
dGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVTdHlsZVNwYW5zQmVmb3JlSW5z
ZXJ0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5k
bGVTdHlsZVNwYW5zKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0lubGluZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAg
IChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6c2hvdWxkUGVyZm9ybVNtYXJ0UmVw
bGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
YWRkU3BhY2VzRm9yU21hcnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjptZXJnZVRleHROb2Rlc0Fyb3VuZFBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OnNpbmdsZUNoaWxkTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpkZWVwZXN0U2luZ2xl
Q2hpbGRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpp
bnNlcnRBc0xpc3RJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6cGVyZm9ybVRyaXZpYWxSZXBsYWNlKToKKwogMjAyMS0wNC0xNCAgQW50dGkgS29pdmlz
dG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUnVuSXRlcmF0b3I6OnRyYXZlcnNlTmV4
dC9QcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFrIHNob3VsZCBza2lwIG92ZXIgV0JScwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNw
cAppbmRleCA4NzY0MTE1NDRlNDJlZDMzMGZkNmNmNjdiYjY4OGQ4OWYwZWQ4OGNlLi4zMWYwMWRm
Yzk0MmJhYWI5MzFjMTJiZWNlZjc3YWQ5YzFmYWZhOTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTM1LDcgKzEzNSw3
IEBAIHN0YXRpYyBQb3NpdGlvbiBwb3NpdGlvbkF2b2lkaW5nUHJlY2VkaW5nTm9kZXMoUG9zaXRp
b24gcG9zaXRpb24pCiAgICAgLy8gc2FtZS4gIEUuZy4sCiAgICAgLy8gICA8ZGl2PmZvb148L2Rp
dj5eCiAgICAgLy8gVGhlIHR3byBwb3NpdGlvbnMgYWJvdmUgYXJlIHRoZSBzYW1lIHZpc3VhbCBw
b3NpdGlvbiwgYnV0IHdlIHdhbnQgdG8gc3RheSBpbiB0aGUgc2FtZSBibG9jay4KLSAgICBhdXRv
KiBlbmNsb3NpbmdCbG9ja05vZGUgPSBlbmNsb3NpbmdCbG9jayhwb3NpdGlvbi5jb250YWluZXJO
b2RlKCkpOworICAgIGF1dG8gZW5jbG9zaW5nQmxvY2tOb2RlID0gbWFrZVJlZlB0cihlbmNsb3Np
bmdCbG9jayhwb3NpdGlvbi5jb250YWluZXJOb2RlKCkpKTsKICAgICBmb3IgKFBvc2l0aW9uIG5l
eHRQb3NpdGlvbiA9IHBvc2l0aW9uOyBuZXh0UG9zaXRpb24uY29udGFpbmVyTm9kZSgpICE9IGVu
Y2xvc2luZ0Jsb2NrTm9kZTsgcG9zaXRpb24gPSBuZXh0UG9zaXRpb24pIHsKICAgICAgICAgaWYg
KGxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24ocG9zaXRpb24pKQogICAgICAgICAgICAgYnJlYWs7
CkBAIC0xNzAsNyArMTcwLDcgQEAgUmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFn
bWVudChEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgY29uc3QgVmlzaWIKICAgICBpZiAoIWVk
aXRhYmxlUm9vdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byogc2hhZG93SG9zdCA9IGVk
aXRhYmxlUm9vdC0+c2hhZG93SG9zdCgpOworICAgIGF1dG8gc2hhZG93SG9zdCA9IG1ha2VSZWZQ
dHIoZWRpdGFibGVSb290LT5zaGFkb3dIb3N0KCkpOwogICAgIGlmICghZWRpdGFibGVSb290LT5h
dHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS53ZWJraXRCZWZvcmVUZXh0SW5zZXJ0
ZWRFdmVudCwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpCiAgICAgICAgICYmICEoc2hhZG93SG9z
dCAmJiBzaGFkb3dIb3N0LT5yZW5kZXJlcigpICYmIHNoYWRvd0hvc3QtPnJlbmRlcmVyKCktPmlz
VGV4dENvbnRyb2woKSkKICAgICAgICAgJiYgZWRpdGFibGVSb290LT5oYXNSaWNobHlFZGl0YWJs
ZVN0eWxlKCkpIHsKQEAgLTE3OSw3ICsxNzksNyBAQCBSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBs
YWNlbWVudEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBjb25zdCBWaXNpYgog
ICAgIH0KIAogICAgIGF1dG8gcGFnZSA9IGNyZWF0ZVBhZ2VGb3JTYW5pdGl6aW5nV2ViQ29udGVu
dCgpOwotICAgIERvY3VtZW50KiBzdGFnaW5nRG9jdW1lbnQgPSBwYWdlLT5tYWluRnJhbWUoKS5k
b2N1bWVudCgpOworICAgIGF1dG8gc3RhZ2luZ0RvY3VtZW50ID0gbWFrZVJlZlB0cihwYWdlLT5t
YWluRnJhbWUoKS5kb2N1bWVudCgpKTsKICAgICBBU1NFUlQoc3RhZ2luZ0RvY3VtZW50LT5ib2R5
KCkpOwogCiAgICAgQ29tcHV0ZWRTdHlsZUV4dHJhY3RvciBjb21wdXRlZFN0eWxlT2ZFZGl0YWJs
ZVJvb3QoZWRpdGFibGVSb290LmdldCgpKTsKQEAgLTMyMiw4ICszMjIsOCBAQCB2b2lkIFJlcGxh
Y2VtZW50RnJhZ21lbnQ6OnJlbW92ZVVucmVuZGVyZWROb2RlcyhOb2RlKiBob2xkZXIpCiB7CiAg
ICAgVmVjdG9yPFJlZjxOb2RlPj4gdW5yZW5kZXJlZDsKIAotICAgIGZvciAoTm9kZSogbm9kZSA9
IGhvbGRlci0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgq
bm9kZSwgaG9sZGVyKSkgewotICAgICAgICBpZiAoIWlzTm9kZVJlbmRlcmVkKCpub2RlKSAmJiAh
aXNUYWJsZVN0cnVjdHVyZU5vZGUobm9kZSkpCisgICAgZm9yIChhdXRvIG5vZGUgPSBtYWtlUmVm
UHRyKGhvbGRlci0+Zmlyc3RDaGlsZCgpKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQoKm5vZGUsIGhvbGRlcikpIHsKKyAgICAgICAgaWYgKCFpc05vZGVSZW5kZXJlZCgqbm9kZSkg
JiYgIWlzVGFibGVTdHJ1Y3R1cmVOb2RlKG5vZGUuZ2V0KCkpKQogICAgICAgICAgICAgdW5yZW5k
ZXJlZC5hcHBlbmQoKm5vZGUpOwogICAgIH0KIApAQCAtMzM4LDkgKzMzOCw5IEBAIHZvaWQgUmVw
bGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlSW50ZXJjaGFuZ2VOb2RlcyhOb2RlKiBjb250YWluZXIp
CiAKICAgICAvLyBJbnRlcmNoYW5nZSBuZXdsaW5lcyBhdCB0aGUgInN0YXJ0IiBvZiB0aGUgaW5j
b21pbmcgZnJhZ21lbnQgbXVzdCBiZQogICAgIC8vIGVpdGhlciB0aGUgZmlyc3Qgbm9kZSBpbiB0
aGUgZnJhZ21lbnQgb3IgdGhlIGZpcnN0IGxlYWYgaW4gdGhlIGZyYWdtZW50LgotICAgIE5vZGUq
IG5vZGUgPSBjb250YWluZXItPmZpcnN0Q2hpbGQoKTsKKyAgICBhdXRvIG5vZGUgPSBtYWtlUmVm
UHRyKGNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpKTsKICAgICB3aGlsZSAobm9kZSkgewotICAgICAg
ICBpZiAoaXNJbnRlcmNoYW5nZU5ld2xpbmVOb2RlKG5vZGUpKSB7CisgICAgICAgIGlmIChpc0lu
dGVyY2hhbmdlTmV3bGluZU5vZGUobm9kZS5nZXQoKSkpIHsKICAgICAgICAgICAgIG1faGFzSW50
ZXJjaGFuZ2VOZXdsaW5lQXRTdGFydCA9IHRydWU7CiAgICAgICAgICAgICByZW1vdmVOb2RlKCpu
b2RlKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzUzLDcgKzM1Myw3IEBAIHZvaWQgUmVwbGFj
ZW1lbnRGcmFnbWVudDo6cmVtb3ZlSW50ZXJjaGFuZ2VOb2RlcyhOb2RlKiBjb250YWluZXIpCiAg
ICAgLy8gZWl0aGVyIHRoZSBsYXN0IG5vZGUgaW4gdGhlIGZyYWdtZW50IG9yIHRoZSBsYXN0IGxl
YWYgaW4gdGhlIGZyYWdtZW50LgogICAgIG5vZGUgPSBjb250YWluZXItPmxhc3RDaGlsZCgpOwog
ICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIGlmIChpc0ludGVyY2hhbmdlTmV3bGluZU5vZGUo
bm9kZSkpIHsKKyAgICAgICAgaWYgKGlzSW50ZXJjaGFuZ2VOZXdsaW5lTm9kZShub2RlLmdldCgp
KSkgewogICAgICAgICAgICAgbV9oYXNJbnRlcmNoYW5nZU5ld2xpbmVBdEVuZCA9IHRydWU7CiAg
ICAgICAgICAgICByZW1vdmVOb2RlKCpub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzY0
LDExICszNjQsMTEgQEAgdm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVJbnRlcmNoYW5n
ZU5vZGVzKE5vZGUqIGNvbnRhaW5lcikKICAgICBub2RlID0gY29udGFpbmVyLT5maXJzdENoaWxk
KCk7CiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KCpub2RlKTsKLSAgICAgICAgaWYgKGlzSW50ZXJjaGFuZ2VDb252ZXJ0
ZWRTcGFjZVNwYW4obm9kZSkpIHsKKyAgICAgICAgaWYgKGlzSW50ZXJjaGFuZ2VDb252ZXJ0ZWRT
cGFjZVNwYW4obm9kZS5nZXQoKSkpIHsKICAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbm9kZSk7CiAgICAgICAgICAgICByZW1vdmVOb2RlUHJl
c2VydmluZ0NoaWxkcmVuKCpub2RlKTsKICAgICAgICAgfQotICAgICAgICBub2RlID0gbmV4dC5n
ZXQoKTsKKyAgICAgICAgbm9kZSA9IFdURk1vdmUobmV4dCk7CiAgICAgfQogfQogCkBAIC01MzIs
MjAgKzUzMiwyMCBAQCBib29sIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpzaG91bGRNZXJnZShj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHNvdXJjZSwgY29uc3QgVgogewogICAgIGlmIChzb3VyY2Uu
aXNOdWxsKCkgfHwgZGVzdGluYXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgCi0gICAgYXV0byogc291cmNlTm9kZSA9IHNvdXJjZS5kZWVwRXF1aXZhbGVudCgp
LmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgYXV0byogZGVzdGluYXRpb25Ob2RlID0gZGVzdGluYXRp
b24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOwotICAgIGF1dG8qIHNvdXJjZUJs
b2NrID0gZW5jbG9zaW5nQmxvY2soc291cmNlTm9kZSk7Ci0gICAgYXV0byogZGVzdGluYXRpb25C
bG9jayA9IGVuY2xvc2luZ0Jsb2NrKGRlc3RpbmF0aW9uTm9kZSk7CisKKyAgICBhdXRvIHNvdXJj
ZU5vZGUgPSBtYWtlUmVmUHRyKHNvdXJjZS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2Rl
KCkpOworICAgIGF1dG8gZGVzdGluYXRpb25Ob2RlID0gbWFrZVJlZlB0cihkZXN0aW5hdGlvbi5k
ZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAgIGF1dG8gc291cmNlQmxvY2sg
PSBtYWtlUmVmUHRyKGVuY2xvc2luZ0Jsb2NrKHNvdXJjZU5vZGUuZ2V0KCkpKTsKKyAgICBhdXRv
IGRlc3RpbmF0aW9uQmxvY2sgPSBtYWtlUmVmUHRyKGVuY2xvc2luZ0Jsb2NrKGRlc3RpbmF0aW9u
Tm9kZS5nZXQoKSkpOwogICAgIHJldHVybiAhZW5jbG9zaW5nTm9kZU9mVHlwZShzb3VyY2UuZGVl
cEVxdWl2YWxlbnQoKSwgJmlzTWFpbFBhc3RlQXNRdW90YXRpb25Ob2RlKQogICAgICAgICAmJiBz
b3VyY2VCbG9jawotICAgICAgICAmJiAoIXNvdXJjZUJsb2NrLT5oYXNUYWdOYW1lKGJsb2NrcXVv
dGVUYWcpIHx8IGlzTWFpbEJsb2NrcXVvdGUoc291cmNlQmxvY2spKQotICAgICAgICAmJiBlbmNs
b3NpbmdMaXN0Q2hpbGQoc291cmNlQmxvY2spID09IGVuY2xvc2luZ0xpc3RDaGlsZChkZXN0aW5h
dGlvbk5vZGUpCisgICAgICAgICYmICghc291cmNlQmxvY2stPmhhc1RhZ05hbWUoYmxvY2txdW90
ZVRhZykgfHwgaXNNYWlsQmxvY2txdW90ZShzb3VyY2VCbG9jay5nZXQoKSkpCisgICAgICAgICYm
IGVuY2xvc2luZ0xpc3RDaGlsZChzb3VyY2VCbG9jay5nZXQoKSkgPT0gZW5jbG9zaW5nTGlzdENo
aWxkKGRlc3RpbmF0aW9uTm9kZS5nZXQoKSkKICAgICAgICAgJiYgZW5jbG9zaW5nVGFibGVDZWxs
KHNvdXJjZS5kZWVwRXF1aXZhbGVudCgpKSA9PSBlbmNsb3NpbmdUYWJsZUNlbGwoZGVzdGluYXRp
b24uZGVlcEVxdWl2YWxlbnQoKSkKLSAgICAgICAgJiYgKCFpc0hlYWRlckVsZW1lbnQoc291cmNl
QmxvY2spIHx8IGhhdmVTYW1lVGFnTmFtZShzb3VyY2VCbG9jaywgZGVzdGluYXRpb25CbG9jaykp
CisgICAgICAgICYmICghaXNIZWFkZXJFbGVtZW50KHNvdXJjZUJsb2NrLmdldCgpKSB8fCBoYXZl
U2FtZVRhZ05hbWUoc291cmNlQmxvY2suZ2V0KCksIGRlc3RpbmF0aW9uQmxvY2suZ2V0KCkpKQog
ICAgICAgICAvLyBEb24ndCBtZXJnZSB0byBvciBmcm9tIGEgcG9zaXRpb24gYmVmb3JlIG9yIGFm
dGVyIGEgYmxvY2sgYmVjYXVzZSBpdCB3b3VsZAogICAgICAgICAvLyBiZSBhIG5vLW9wIGFuZCBj
YXVzZSBpbmZpbml0ZSByZWN1cnNpb24uCi0gICAgICAgICYmICFpc0Jsb2NrKHNvdXJjZU5vZGUp
ICYmICFpc0Jsb2NrKGRlc3RpbmF0aW9uTm9kZSk7CisgICAgICAgICYmICFpc0Jsb2NrKHNvdXJj
ZU5vZGUuZ2V0KCkpICYmICFpc0Jsb2NrKGRlc3RpbmF0aW9uTm9kZS5nZXQoKSk7CiB9CiAKIHN0
YXRpYyBib29sIGZyYWdtZW50TmVlZHNDb2xvclRyYW5zZm9ybWVkKFJlcGxhY2VtZW50RnJhZ21l
bnQmIGZyYWdtZW50LCBjb25zdCBQb3NpdGlvbiYgaW5zZXJ0aW9uUG9zKQpAQCAtNTU4LDE0ICs1
NTgsMTggQEAgc3RhdGljIGJvb2wgZnJhZ21lbnROZWVkc0NvbG9yVHJhbnNmb3JtZWQoUmVwbGFj
ZW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIGNvbnN0IFAKICAgICBpZiAoIWVkaXRhYmxlUm9vdCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byogZWRpdGFibGVSb290UmVuZGVyZXIg
PSBlZGl0YWJsZVJvb3QtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFlZGl0YWJsZVJvb3RSZW5kZXJl
ciB8fCAhZWRpdGFibGVSb290UmVuZGVyZXItPnN0eWxlKCkuaGFzQXBwbGVDb2xvckZpbHRlcigp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgeworICAgICAgICBTY3JpcHREaXNhbGxvd2Vk
U2NvcGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNhbGxvd2VkU2NvcGU7CiAKLSAgICBjb25zdCBh
dXRvJiBjb2xvckZpbHRlciA9IGVkaXRhYmxlUm9vdFJlbmRlcmVyLT5zdHlsZSgpLmFwcGxlQ29s
b3JGaWx0ZXIoKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbG9yRmlsdGVyT3BlcmF0aW9uIDog
Y29sb3JGaWx0ZXIub3BlcmF0aW9ucygpKSB7Ci0gICAgICAgIGlmIChjb2xvckZpbHRlck9wZXJh
dGlvbi0+dHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6QVBQTEVfSU5WRVJUX0xJR0hUTkVTUykK
KyAgICAgICAgYXV0byogZWRpdGFibGVSb290UmVuZGVyZXIgPSBlZGl0YWJsZVJvb3QtPnJlbmRl
cmVyKCk7CisgICAgICAgIGlmICghZWRpdGFibGVSb290UmVuZGVyZXIgfHwgIWVkaXRhYmxlUm9v
dFJlbmRlcmVyLT5zdHlsZSgpLmhhc0FwcGxlQ29sb3JGaWx0ZXIoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBjb25zdCBhdXRvJiBjb2xvckZpbHRlciA9IGVkaXRhYmxl
Um9vdFJlbmRlcmVyLT5zdHlsZSgpLmFwcGxlQ29sb3JGaWx0ZXIoKTsKKyAgICAgICAgZm9yIChj
b25zdCBhdXRvJiBjb2xvckZpbHRlck9wZXJhdGlvbiA6IGNvbG9yRmlsdGVyLm9wZXJhdGlvbnMo
KSkgeworICAgICAgICAgICAgaWYgKGNvbG9yRmlsdGVyT3BlcmF0aW9uLT50eXBlKCkgIT0gRmls
dGVyT3BlcmF0aW9uOjpBUFBMRV9JTlZFUlRfTElHSFRORVNTKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGF1dG8gcHJvcGVydHlMaWdodG5l
c3MgPSBbJl0oY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBpbmxpbmVTdHlsZSwgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlEKSAtPiBPcHRpb25hbDxkb3VibGU+IHsKQEAgLTYzNiw4ICs2NDAsOCBAQCB2
b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVw
U3R5bGVTcGFuSW5saW5lKEluc2VydAogCiAgICAgICAgIFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQg
PSBkb3duY2FzdDxTdHlsZWRFbGVtZW50Pihub2RlLmdldCgpKTsKIAotICAgICAgICBjb25zdCBT
dHlsZVByb3BlcnRpZXMqIGlubGluZVN0eWxlID0gZWxlbWVudC0+aW5saW5lU3R5bGUoKTsKLSAg
ICAgICAgYXV0byBuZXdJbmxpbmVTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKGlubGluZVN0
eWxlKTsKKyAgICAgICAgYXV0byBpbmxpbmVTdHlsZSA9IG1ha2VSZWZQdHIoZWxlbWVudC0+aW5s
aW5lU3R5bGUoKSk7CisgICAgICAgIGF1dG8gbmV3SW5saW5lU3R5bGUgPSBFZGl0aW5nU3R5bGU6
OmNyZWF0ZShpbmxpbmVTdHlsZS5nZXQoKSk7CiAgICAgICAgIGlmIChpbmxpbmVTdHlsZSkgewog
ICAgICAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50PigqZWxlbWVudCkpIHsKICAgICAgICAgICAg
ICAgICBWZWN0b3I8UXVhbGlmaWVkTmFtZT4gYXR0cmlidXRlczsKQEAgLTY1NSwxNSArNjU5LDE1
IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxlc0Fu
ZEtlZXBTdHlsZVNwYW5JbmxpbmUoSW5zZXJ0CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBDb250YWluZXJOb2RlKiBjb250ZXh0ID0gZWxlbWVudC0+cGFy
ZW50Tm9kZSgpOworICAgICAgICAgICAgYXV0byBjb250ZXh0ID0gbWFrZVJlZlB0cihlbGVtZW50
LT5wYXJlbnROb2RlKCkpOwogCiAgICAgICAgICAgICAvLyBJZiBNYWlsIHdyYXBzIHRoZSBmcmFn
bWVudCB3aXRoIGEgUGFzdGUgYXMgUXVvdGF0aW9uIGJsb2NrcXVvdGUsIG9yIGlmIHlvdSdyZSBw
YXN0aW5nIGludG8gYSBxdW90ZWQgcmVnaW9uLAogICAgICAgICAgICAgLy8gc3R5bGVzIGZyb20g
YmxvY2txdW90ZU5vZGUgYXJlIGFsbG93ZWQgdG8gb3ZlcnJpZGUgdGhvc2UgZnJvbSB0aGUgc291
cmNlIGRvY3VtZW50LCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzQ5MzA5ODY+IGFuZCA8cmRhcjovL3By
b2JsZW0vNTA4OTMyNz4uCi0gICAgICAgICAgICBOb2RlKiBibG9ja3F1b3RlTm9kZSA9IGlzTWFp
bFBhc3RlQXNRdW90YXRpb25Ob2RlKGNvbnRleHQpID8gY29udGV4dCA6IGVuY2xvc2luZ05vZGVP
ZlR5cGUoZmlyc3RQb3NpdGlvbkluTm9kZShjb250ZXh0KSwgaXNNYWlsQmxvY2txdW90ZSwgQ2Fu
Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOworICAgICAgICAgICAgUmVmUHRyPE5vZGU+IGJsb2NrcXVv
dGVOb2RlID0gaXNNYWlsUGFzdGVBc1F1b3RhdGlvbk5vZGUoY29udGV4dC5nZXQoKSkgPyBjb250
ZXh0LmdldCgpIDogZW5jbG9zaW5nTm9kZU9mVHlwZShmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbnRl
eHQuZ2V0KCkpLCBpc01haWxCbG9ja3F1b3RlLCBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7CiAg
ICAgICAgICAgICBpZiAoYmxvY2txdW90ZU5vZGUpCiAgICAgICAgICAgICAgICAgbmV3SW5saW5l
U3R5bGUtPnJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4dCgqZWxlbWVudCwgZG9jdW1lbnQo
KS5kb2N1bWVudEVsZW1lbnQoKSk7CiAKLSAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5yZW1v
dmVTdHlsZUZyb21SdWxlc0FuZENvbnRleHQoKmVsZW1lbnQsIGNvbnRleHQpOworICAgICAgICAg
ICAgbmV3SW5saW5lU3R5bGUtPnJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4dCgqZWxlbWVu
dCwgY29udGV4dC5nZXQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWlubGluZVN0eWxl
IHx8IG5ld0lubGluZVN0eWxlLT5pc0VtcHR5KCkpIHsKQEAgLTc4NSwyMCArNzg5LDIwIEBAIHZv
aWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1ha2VJbnNlcnRlZENvbnRlbnRSb3VuZFRyaXBw
YWJsZVdpdGhIVE1MVHJlZUJ1aWxkCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBp
ZiAoaXNQcm9oaWJpdGVkUGFyYWdyYXBoQ2hpbGQoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpub2Rl
KS5sb2NhbE5hbWUoKSkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBwYXJhZ3JhcGhFbGVtZW50
ID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcocG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUobm9k
ZS5nZXQoKSksIHBUYWcpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byogcGFyZW50ID0gcGFyYWdy
YXBoRWxlbWVudC0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgaWYgKGF1dG8gcGFyYWdyYXBo
RWxlbWVudCA9IG1ha2VSZWZQdHIoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcocG9zaXRpb25JblBh
cmVudEJlZm9yZU5vZGUobm9kZS5nZXQoKSksIHBUYWcpKSkgeworICAgICAgICAgICAgICAgIGF1
dG8gcGFyZW50ID0gbWFrZVJlZlB0cihwYXJhZ3JhcGhFbGVtZW50LT5wYXJlbnROb2RlKCkpOwog
ICAgICAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkp
CiAgICAgICAgICAgICAgICAgICAgIG1vdmVOb2RlT3V0T2ZBbmNlc3Rvcigqbm9kZSwgKnBhcmFn
cmFwaEVsZW1lbnQsIGluc2VydGVkTm9kZXMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGlzSGVhZGVyRWxlbWVudChub2RlLmdldCgpKSkgewotICAgICAgICAgICAg
aWYgKGF1dG8qIGhlYWRlckVsZW1lbnQgPSBoaWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlwZShwb3Np
dGlvbkluUGFyZW50QmVmb3JlTm9kZShub2RlLmdldCgpKSwgaXNIZWFkZXJFbGVtZW50KSkgewor
ICAgICAgICAgICAgaWYgKGF1dG8gaGVhZGVyRWxlbWVudCA9IG1ha2VSZWZQdHIoaGlnaGVzdEVu
Y2xvc2luZ05vZGVPZlR5cGUocG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUobm9kZS5nZXQoKSks
IGlzSGVhZGVyRWxlbWVudCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGhlYWRlckVsZW1lbnQt
PnBhcmVudE5vZGUoKSAmJiBoZWFkZXJFbGVtZW50LT5wYXJlbnROb2RlKCktPmlzQ29udGVudFJp
Y2hseUVkaXRhYmxlKCkpCiAgICAgICAgICAgICAgICAgICAgIG1vdmVOb2RlT3V0T2ZBbmNlc3Rv
cigqbm9kZSwgKmhlYWRlckVsZW1lbnQsIGluc2VydGVkTm9kZXMpOwogICAgICAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBIVE1MRWxlbWVudCogbmV3U3BhbkVsZW1lbnQg
PSByZXBsYWNlRWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXR0cmlidXRlcyhk
b3duY2FzdDxIVE1MRWxlbWVudD4oKm5vZGUpKTsKLSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
ZWROb2Rlcy5kaWRSZXBsYWNlTm9kZShub2RlLmdldCgpLCBuZXdTcGFuRWxlbWVudCk7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gbmV3U3BhbkVsZW1lbnQgPSBtYWtlUmVmUHRyKHJlcGxhY2VF
bGVtZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdHRyaWJ1dGVzKGRvd25jYXN0PEhU
TUxFbGVtZW50Pigqbm9kZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0ZWROb2Rlcy5k
aWRSZXBsYWNlTm9kZShub2RlLmdldCgpLCBuZXdTcGFuRWxlbWVudC5nZXQoKSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04MzMsNyArODM3LDcgQEAg
dm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bW92ZU5vZGVPdXRPZkFuY2VzdG9yKE5vZGUm
IG5vZGUsIE5vZGUmIGFuY2VzdG9yLAogICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICBib29sIHNhZmVUb1JlbW92ZUFuY2VzdG9yID0g
dHJ1ZTsKLSAgICBmb3IgKGF1dG8qIGNoaWxkID0gYW5jZXN0b3IuZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAoYXV0byBjaGlsZCA9
IG1ha2VSZWZQdHIoYW5jZXN0b3IuZmlyc3RDaGlsZCgpKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGlzPFRleHQ+KGNoaWxkKSAmJiBoYXNSZW5k
ZXJlZFRleHQoZG93bmNhc3Q8VGV4dD4oKmNoaWxkKSkpIHsKICAgICAgICAgICAgIHNhZmVUb1Jl
bW92ZUFuY2VzdG9yID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKQEAgLTg3Nyw4ICs4ODEs
OCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVVbnJlbmRlcmVkVGV4dE5v
ZGVzQXRFbmRzKEluc2VydGVkTm9kZXMmIGlucwogVmlzaWJsZVBvc2l0aW9uIFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpwb3NpdGlvbkF0RW5kT2ZJbnNlcnRlZENvbnRlbnQoKSBjb25zdAogewog
ICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBoYWNrIGhlcmU/ICBXaGF0J3Mgc3BlY2lhbCBhYm91
dCA8c2VsZWN0PiB0YWdzPwotICAgIGF1dG8qIGVuY2xvc2luZ1NlbGVjdCA9IGVuY2xvc2luZ0Vs
ZW1lbnRXaXRoVGFnKG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQsIHNlbGVjdFRhZyk7Ci0gICAgcmV0
dXJuIGVuY2xvc2luZ1NlbGVjdCA/IGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUoZW5jbG9zaW5n
U2VsZWN0KSA6IG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQ7CisgICAgYXV0byBlbmNsb3NpbmdTZWxl
Y3QgPSBtYWtlUmVmUHRyKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZW5kT2ZJbnNlcnRlZENv
bnRlbnQsIHNlbGVjdFRhZykpOworICAgIHJldHVybiBlbmNsb3NpbmdTZWxlY3QgPyBsYXN0UG9z
aXRpb25Jbk9yQWZ0ZXJOb2RlKGVuY2xvc2luZ1NlbGVjdC5nZXQoKSkgOiBtX2VuZE9mSW5zZXJ0
ZWRDb250ZW50OwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OnBvc2l0aW9uQXRTdGFydE9mSW5zZXJ0ZWRDb250ZW50KCkgY29uc3QKQEAgLTg5MCwyOCArODk0
LDI4IEBAIFZpc2libGVQb3NpdGlvbiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cG9zaXRpb25B
dFN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKSBjb25zCiAvLyBhdm9pZCBkb2luZyBhIGxheW91dC4K
IHN0YXRpYyBib29sIGhhbmRsZVN0eWxlU3BhbnNCZWZvcmVJbnNlcnRpb24oUmVwbGFjZW1lbnRG
cmFnbWVudCYgZnJhZ21lbnQsIGNvbnN0IFBvc2l0aW9uJiBpbnNlcnRpb25Qb3MpCiB7Ci0gICAg
Tm9kZSogdG9wTm9kZSA9IGZyYWdtZW50LmZpcnN0Q2hpbGQoKTsKKyAgICBhdXRvIHRvcE5vZGUg
PSBtYWtlUmVmUHRyKGZyYWdtZW50LmZpcnN0Q2hpbGQoKSk7CiAKICAgICAvLyBIYW5kbGluZyB0
aGUgY2FzZSB3aGVyZSB3ZSBhcmUgZG9pbmcgUGFzdGUgYXMgUXVvdGF0aW9uIG9yIHBhc3Rpbmcg
aW50byBxdW90ZWQgY29udGVudCBpcyBtb3JlIGNvbXBsaWNhdGVkIChzZWUgaGFuZGxlU3R5bGVT
cGFucykKICAgICAvLyBhbmQgZG9lc24ndCByZWNlaXZlIHRoZSBvcHRpbWl6YXRpb24uCi0gICAg
aWYgKGlzTWFpbFBhc3RlQXNRdW90YXRpb25Ob2RlKHRvcE5vZGUpIHx8IGVuY2xvc2luZ05vZGVP
ZlR5cGUoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHRvcE5vZGUpLCBpc01haWxCbG9ja3F1
b3RlLCBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSkpCisgICAgaWYgKGlzTWFpbFBhc3RlQXNRdW90
YXRpb25Ob2RlKHRvcE5vZGUuZ2V0KCkpIHx8IGVuY2xvc2luZ05vZGVPZlR5cGUoZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKHRvcE5vZGUuZ2V0KCkpLCBpc01haWxCbG9ja3F1b3RlLCBDYW5D
cm9zc0VkaXRpbmdCb3VuZGFyeSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEVp
dGhlciB0aGVyZSBhcmUgbm8gc3R5bGUgc3BhbnMgaW4gdGhlIGZyYWdtZW50IG9yIGEgV2ViS2l0
IGNsaWVudCBoYXMgYWRkZWQgY29udGVudCB0byB0aGUgZnJhZ21lbnQKICAgICAvLyBiZWZvcmUg
aW5zZXJ0aW5nIGl0LiAgTG9vayBmb3IgYW5kIGhhbmRsZSBzdHlsZSBzcGFucyBhZnRlciBpbnNl
cnRpb24uCi0gICAgaWYgKCFpc0xlZ2FjeUFwcGxlU3R5bGVTcGFuKHRvcE5vZGUpKQorICAgIGlm
ICghaXNMZWdhY3lBcHBsZVN0eWxlU3Bhbih0b3BOb2RlLmdldCgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgTm9kZSogd3JhcHBpbmdTdHlsZVNwYW4gPSB0b3BOb2RlOworICAgIGF1
dG8mIHdyYXBwaW5nU3R5bGVTcGFuID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCp0b3BOb2RlKTsK
ICAgICBhdXRvIHN0eWxlQXRJbnNlcnRpb25Qb3MgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShpbnNl
cnRpb25Qb3MucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwogICAgIFN0cmluZyBzdHlsZVRl
eHQgPSBzdHlsZUF0SW5zZXJ0aW9uUG9zLT5zdHlsZSgpLT5hc1RleHQoKTsKIAogICAgIC8vIEZJ
WE1FOiBUaGlzIHN0cmluZyBjb21wYXJpc29uIGlzIGEgbmFpdmUgd2F5IG9mIGNvbXBhcmluZyB0
d28gc3R5bGVzLgogICAgIC8vIFdlIHNob3VsZCBiZSB0YWtpbmcgdGhlIGRpZmYgYW5kIGNoZWNr
IHRoYXQgdGhlIGRpZmYgaXMgZW1wdHkuCi0gICAgaWYgKHN0eWxlVGV4dCAhPSBkb3duY2FzdDxF
bGVtZW50Pigqd3JhcHBpbmdTdHlsZVNwYW4pLmdldEF0dHJpYnV0ZShzdHlsZUF0dHIpKQorICAg
IGlmIChzdHlsZVRleHQgIT0gd3JhcHBpbmdTdHlsZVNwYW4uZ2V0QXR0cmlidXRlKHN0eWxlQXR0
cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZyYWdtZW50LnJlbW92ZU5vZGVQcmVz
ZXJ2aW5nQ2hpbGRyZW4oKndyYXBwaW5nU3R5bGVTcGFuKTsKKyAgICBmcmFnbWVudC5yZW1vdmVO
b2RlUHJlc2VydmluZ0NoaWxkcmVuKHdyYXBwaW5nU3R5bGVTcGFuKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtOTI1LDEzICs5MjksMTMgQEAgc3RhdGljIGJvb2wgaGFuZGxlU3R5bGVTcGFu
c0JlZm9yZUluc2VydGlvbihSZXBsYWNlbWVudEZyYWdtZW50JiBmcmFnbWVudCwgY29uc3QKIC8v
IG9yIGF0IGNvcHkgdGltZS4KIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0
eWxlU3BhbnMoSW5zZXJ0ZWROb2RlcyYgaW5zZXJ0ZWROb2RlcykKIHsKLSAgICBIVE1MRWxlbWVu
dCogd3JhcHBpbmdTdHlsZVNwYW4gPSBudWxscHRyOworICAgIFJlZlB0cjxIVE1MRWxlbWVudD4g
d3JhcHBpbmdTdHlsZVNwYW47CiAgICAgLy8gVGhlIHN0eWxlIHNwYW4gdGhhdCBjb250YWlucyB0
aGUgc291cmNlIGRvY3VtZW50J3MgZGVmYXVsdCBzdHlsZSBzaG91bGQgYmUgYXQKICAgICAvLyB0
aGUgdG9wIG9mIHRoZSBmcmFnbWVudCwgYnV0IE1haWwgc29tZXRpbWVzIGFkZHMgYSB3cmFwcGVy
IChmb3IgUGFzdGUgQXMgUXVvdGF0aW9uKSwKICAgICAvLyBzbyBzZWFyY2ggZm9yIHRoZSB0b3Ag
bGV2ZWwgc3R5bGUgc3BhbiBpbnN0ZWFkIG9mIGFzc3VtaW5nIGl0J3MgYXQgdGhlIHRvcC4KLSAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBpbnNlcnRlZE5vZGVzLmZpcnN0Tm9kZUluc2VydGVkKCk7IG5v
ZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICBpZiAoaXNM
ZWdhY3lBcHBsZVN0eWxlU3Bhbihub2RlKSkgewotICAgICAgICAgICAgd3JhcHBpbmdTdHlsZVNw
YW4gPSBkb3duY2FzdDxIVE1MRWxlbWVudD4obm9kZSk7CisgICAgZm9yIChhdXRvIG5vZGUgPSBt
YWtlUmVmUHRyKGluc2VydGVkTm9kZXMuZmlyc3ROb2RlSW5zZXJ0ZWQoKSk7IG5vZGU7IG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgeworICAgICAgICBpZiAoaXNMZWdhY3lBcHBs
ZVN0eWxlU3Bhbihub2RlLmdldCgpKSkgeworICAgICAgICAgICAgd3JhcHBpbmdTdHlsZVNwYW4g
PSBzdGF0aWNfcG9pbnRlcl9jYXN0PEhUTUxFbGVtZW50PihXVEZNb3ZlKG5vZGUpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtOTQyLDE2ICs5NDYsMjEgQEAgdm9p
ZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3R5bGVTcGFucyhJbnNlcnRlZE5vZGVz
JiBpbnNlcnRlZE5vZGVzKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHN0eWxlID0gRWRp
dGluZ1N0eWxlOjpjcmVhdGUod3JhcHBpbmdTdHlsZVNwYW4tPmlubGluZVN0eWxlKCkpOwotICAg
IENvbnRhaW5lck5vZGUqIGNvbnRleHQgPSB3cmFwcGluZ1N0eWxlU3Bhbi0+cGFyZW50Tm9kZSgp
OworICAgIGF1dG8gY29udGV4dCA9IG1ha2VSZWZQdHIod3JhcHBpbmdTdHlsZVNwYW4tPnBhcmVu
dE5vZGUoKSk7CiAKICAgICAvLyBJZiBNYWlsIHdyYXBzIHRoZSBmcmFnbWVudCB3aXRoIGEgUGFz
dGUgYXMgUXVvdGF0aW9uIGJsb2NrcXVvdGUsIG9yIGlmIHlvdSdyZSBwYXN0aW5nIGludG8gYSBx
dW90ZWQgcmVnaW9uLAogICAgIC8vIHN0eWxlcyBmcm9tIGJsb2NrcXVvdGVOb2RlIGFyZSBhbGxv
d2VkIHRvIG92ZXJyaWRlIHRob3NlIGZyb20gdGhlIHNvdXJjZSBkb2N1bWVudCwgc2VlIDxyZGFy
Oi8vcHJvYmxlbS80OTMwOTg2PiBhbmQgPHJkYXI6Ly9wcm9ibGVtLzUwODkzMjc+LgotICAgIE5v
ZGUqIGJsb2NrcXVvdGVOb2RlID0gaXNNYWlsUGFzdGVBc1F1b3RhdGlvbk5vZGUoY29udGV4dCkg
PyBjb250ZXh0IDogZW5jbG9zaW5nTm9kZU9mVHlwZShmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbnRl
eHQpLCBpc01haWxCbG9ja3F1b3RlLCBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7CisgICAgUmVm
UHRyPE5vZGU+IGJsb2NrcXVvdGVOb2RlOworICAgIGlmIChpc01haWxQYXN0ZUFzUXVvdGF0aW9u
Tm9kZShjb250ZXh0LmdldCgpKSkKKyAgICAgICAgYmxvY2txdW90ZU5vZGUgPSBjb250ZXh0Owor
ICAgIGVsc2UKKyAgICAgICAgYmxvY2txdW90ZU5vZGUgPSBlbmNsb3NpbmdOb2RlT2ZUeXBlKGZp
cnN0UG9zaXRpb25Jbk5vZGUoY29udGV4dC5nZXQoKSksIGlzTWFpbEJsb2NrcXVvdGUsIENhbkNy
b3NzRWRpdGluZ0JvdW5kYXJ5KTsKKwogICAgIGlmIChibG9ja3F1b3RlTm9kZSkKICAgICAgICAg
Y29udGV4dCA9IGRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCk7CiAKICAgICAvLyBUaGlzIG9w
ZXJhdGlvbiByZXF1aXJlcyB0aGF0IG9ubHkgZWRpdGluZyBzdHlsZXMgdG8gYmUgcmVtb3ZlZCBm
cm9tIHNvdXJjZURvY3VtZW50U3R5bGUuCi0gICAgc3R5bGUtPnByZXBhcmVUb0FwcGx5QXQoZmly
c3RQb3NpdGlvbkluTm9kZShjb250ZXh0KSk7CisgICAgc3R5bGUtPnByZXBhcmVUb0FwcGx5QXQo
Zmlyc3RQb3NpdGlvbkluTm9kZShjb250ZXh0LmdldCgpKSk7CiAKICAgICAvLyBSZW1vdmUgYmxv
Y2sgcHJvcGVydGllcyBpbiB0aGUgc3BhbidzIHN0eWxlLiBUaGlzIHByZXZlbnRzIHByb3BlcnRp
ZXMgdGhhdCBwcm9iYWJseSBoYXZlIG5vIGVmZmVjdCAKICAgICAvLyBjdXJyZW50bHkgZnJvbSBh
ZmZlY3RpbmcgYmxvY2tzIGxhdGVyIGlmIHRoZSBzdHlsZSBpcyBjbG9uZWQgZm9yIGEgbmV3IGJs
b2NrIGVsZW1lbnQgZHVyaW5nIGEgZnV0dXJlIApAQCAtOTYxLDcgKzk3MCw3IEBAIHZvaWQgUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWxlU3BhbnMoSW5zZXJ0ZWROb2RlcyYgaW5z
ZXJ0ZWROb2RlcykKICAgICBzdHlsZS0+cmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CiAKICAgICBp
ZiAoc3R5bGUtPmlzRW1wdHkoKSB8fCAhd3JhcHBpbmdTdHlsZVNwYW4tPmZpcnN0Q2hpbGQoKSkg
ewotICAgICAgICBpbnNlcnRlZE5vZGVzLndpbGxSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVu
KHdyYXBwaW5nU3R5bGVTcGFuKTsKKyAgICAgICAgaW5zZXJ0ZWROb2Rlcy53aWxsUmVtb3ZlTm9k
ZVByZXNlcnZpbmdDaGlsZHJlbih3cmFwcGluZ1N0eWxlU3Bhbi5nZXQoKSk7CiAgICAgICAgIHJl
bW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oKndyYXBwaW5nU3R5bGVTcGFuKTsKICAgICB9IGVs
c2UKICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSgqd3JhcHBpbmdTdHlsZVNwYW4sIHN0eWxlQXR0
ciwgc3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpKTsKQEAgLTEwMTEsMTkgKzEwMjAsMjAgQEAgdm9p
ZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VFbmRJZk5lZWRlZCgpCiAgICAgfQogfQog
Ci1zdGF0aWMgTm9kZSogZW5jbG9zaW5nSW5saW5lKE5vZGUqIG5vZGUpCitzdGF0aWMgUmVmUHRy
PE5vZGU+IGVuY2xvc2luZ0lubGluZShOb2RlKiBub2RlKQogewotICAgIHdoaWxlIChDb250YWlu
ZXJOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICBhdXRvIGN1cnJlbnRO
b2RlID0gbWFrZVJlZlB0cihub2RlKTsKKyAgICB3aGlsZSAoYXV0byBwYXJlbnQgPSBtYWtlUmVm
UHRyKGN1cnJlbnROb2RlLT5wYXJlbnROb2RlKCkpKSB7CiAgICAgICAgIGlmIChpc0Jsb2NrRmxv
d0VsZW1lbnQoKnBhcmVudCkgfHwgcGFyZW50LT5oYXNUYWdOYW1lKGJvZHlUYWcpKQotICAgICAg
ICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICByZXR1cm4gY3VycmVudE5vZGU7CiAgICAg
ICAgIC8vIFN0b3AgaWYgYW55IHByZXZpb3VzIHNpYmxpbmcgaXMgYSBibG9jay4KLSAgICAgICAg
Zm9yIChOb2RlKiBzaWJsaW5nID0gbm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7IHNpYmxpbmc7IHNp
YmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c1NpYmxpbmcoKSkgeworICAgICAgICBmb3IgKGF1dG8g
c2libGluZyA9IG1ha2VSZWZQdHIoY3VycmVudE5vZGUtPnByZXZpb3VzU2libGluZygpKTsgc2li
bGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgICAg
ICBpZiAoaXNCbG9ja0Zsb3dFbGVtZW50KCpzaWJsaW5nKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudE5vZGU7CiAgICAgICAgIH0K
LSAgICAgICAgbm9kZSA9IHBhcmVudDsKKyAgICAgICAgY3VycmVudE5vZGUgPSBwYXJlbnQ7CiAg
ICAgfQotICAgIHJldHVybiBub2RlOworICAgIHJldHVybiBjdXJyZW50Tm9kZTsKIH0KIAogc3Rh
dGljIGJvb2wgaXNJbmxpbmVOb2RlV2l0aFN0eWxlKGNvbnN0IE5vZGUqIG5vZGUpCkBAIC0xMTA1
LDE2ICsxMTE1LDE2IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQog
ICAgIAogICAgIGJvb2wgc2VsZWN0aW9uRW5kV2FzRW5kT2ZQYXJhZ3JhcGggPSBpc0VuZE9mUGFy
YWdyYXBoKHZpc2libGVFbmQpOwogICAgIGJvb2wgc2VsZWN0aW9uU3RhcnRXYXNTdGFydE9mUGFy
YWdyYXBoID0gaXNTdGFydE9mUGFyYWdyYXBoKHZpc2libGVTdGFydCk7Ci0gICAgCi0gICAgTm9k
ZSogc3RhcnRCbG9jayA9IGVuY2xvc2luZ0Jsb2NrKHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVu
dCgpLmRlcHJlY2F0ZWROb2RlKCkpOwotICAgIAorCisgICAgYXV0byBzdGFydEJsb2NrID0gbWFr
ZVJlZlB0cihlbmNsb3NpbmdCbG9jayh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5kZXBy
ZWNhdGVkTm9kZSgpKSk7CisKICAgICBQb3NpdGlvbiBpbnNlcnRpb25Qb3MgPSBzZWxlY3Rpb24u
c3RhcnQoKTsKICAgICBib29sIHNob3VsZEhhbmRsZU1haWxCbG9ja3F1b3RlID0gZW5jbG9zaW5n
Tm9kZU9mVHlwZShpbnNlcnRpb25Qb3MsIGlzTWFpbEJsb2NrcXVvdGUsIENhbkNyb3NzRWRpdGlu
Z0JvdW5kYXJ5KSAmJiAhbV9pZ25vcmVNYWlsQmxvY2txdW90ZTsKICAgICBib29sIHNlbGVjdGlv
bklzUGxhaW5UZXh0ID0gIXNlbGVjdGlvbi5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOwotICAg
IEVsZW1lbnQqIGN1cnJlbnRSb290ID0gc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsK
KyAgICBhdXRvIGN1cnJlbnRSb290ID0gbWFrZVJlZlB0cihzZWxlY3Rpb24ucm9vdEVkaXRhYmxl
RWxlbWVudCgpKTsKIAogICAgIGlmICgoc2VsZWN0aW9uU3RhcnRXYXNTdGFydE9mUGFyYWdyYXBo
ICYmIHNlbGVjdGlvbkVuZFdhc0VuZE9mUGFyYWdyYXBoICYmICFzaG91bGRIYW5kbGVNYWlsQmxv
Y2txdW90ZSkKLSAgICAgICAgfHwgc3RhcnRCbG9jayA9PSBjdXJyZW50Um9vdCB8fCBpc0xpc3RJ
dGVtKHN0YXJ0QmxvY2spIHx8IHNlbGVjdGlvbklzUGxhaW5UZXh0KQorICAgICAgICB8fCBzdGFy
dEJsb2NrID09IGN1cnJlbnRSb290IHx8IGlzTGlzdEl0ZW0oc3RhcnRCbG9jay5nZXQoKSkgfHwg
c2VsZWN0aW9uSXNQbGFpblRleHQpCiAgICAgICAgIG1fcHJldmVudE5lc3RpbmcgPSBmYWxzZTsK
ICAgICAKICAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewpAQCAtMTIzMiw3ICsxMjQyLDcg
QEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgLy8gb3VyIHN0
eWxlIHNwYW5zIGFuZCBmb3IgcG9zaXRpb25zIGluc2lkZSBsaXN0IGl0ZW1zCiAgICAgLy8gc2lu
Y2UgaW5zZXJ0QXNMaXN0SXRlbXMgYWxyZWFkeSBkb2VzIHRoZSByaWdodCB0aGluZy4KICAgICBp
ZiAoIW1fbWF0Y2hTdHlsZSAmJiAhZW5jbG9zaW5nTGlzdChpbnNlcnRpb25Qb3MuY29udGFpbmVy
Tm9kZSgpKSkgewotICAgICAgICBpZiAoYXV0byogY29udGFpbmVyTm9kZSA9IGluc2VydGlvblBv
cy5jb250YWluZXJOb2RlKCkpIHsKKyAgICAgICAgaWYgKGF1dG8gY29udGFpbmVyTm9kZSA9IG1h
a2VSZWZQdHIoaW5zZXJ0aW9uUG9zLmNvbnRhaW5lck5vZGUoKSkpIHsKICAgICAgICAgICAgIGlm
IChjb250YWluZXJOb2RlLT5pc1RleHROb2RlKCkgJiYgaW5zZXJ0aW9uUG9zLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpICYmICFpbnNlcnRpb25Qb3MuYXRMYXN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9k
ZSgpKSB7CiAgICAgICAgICAgICAgICAgc3BsaXRUZXh0Tm9kZSgqaW5zZXJ0aW9uUG9zLmNvbnRh
aW5lclRleHQoKSwgaW5zZXJ0aW9uUG9zLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKICAgICAg
ICAgICAgICAgICBpbnNlcnRpb25Qb3MgPSBmaXJzdFBvc2l0aW9uSW5Ob2RlKGluc2VydGlvblBv
cy5jb250YWluZXJOb2RlKCkpOwpAQCAtMTI0MSw3ICsxMjUxLDcgQEAgdm9pZCBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAKICAgICAgICAgaWYgKFJlZlB0cjxOb2RlPiBub2Rl
VG9TcGxpdFRvID0gbm9kZVRvU3BsaXRUb0F2b2lkUGFzdGluZ0ludG9JbmxpbmVOb2Rlc1dpdGhT
dHlsZShpbnNlcnRpb25Qb3MpKSB7CiAgICAgICAgICAgICBpZiAobm9kZVRvU3BsaXRUby0+cGFy
ZW50Tm9kZSgpICYmIGluc2VydGlvblBvcy5jb250YWluZXJOb2RlKCkgIT0gbm9kZVRvU3BsaXRU
by0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogc3BsaXRTdGFydCA9IGlu
c2VydGlvblBvcy5jb21wdXRlTm9kZUFmdGVyUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICBh
dXRvIHNwbGl0U3RhcnQgPSBtYWtlUmVmUHRyKGluc2VydGlvblBvcy5jb21wdXRlTm9kZUFmdGVy
UG9zaXRpb24oKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFzcGxpdFN0YXJ0KQogICAgICAgICAg
ICAgICAgICAgICBzcGxpdFN0YXJ0ID0gaW5zZXJ0aW9uUG9zLmNvbnRhaW5lck5vZGUoKTsKICAg
ICAgICAgICAgICAgICBBU1NFUlQoc3BsaXRTdGFydCk7CkBAIC0xMjcxLDExICsxMjgxLDExIEBA
IHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmIChyZWZOb2Rl
KQogICAgICAgICBmcmFnbWVudC5yZW1vdmVOb2RlKCpyZWZOb2RlKTsKIAotICAgIE5vZGUqIGJs
b2NrU3RhcnQgPSBlbmNsb3NpbmdCbG9jayhpbnNlcnRpb25Qb3MuZGVwcmVjYXRlZE5vZGUoKSk7
CisgICAgYXV0byBibG9ja1N0YXJ0ID0gbWFrZVJlZlB0cihlbmNsb3NpbmdCbG9jayhpbnNlcnRp
b25Qb3MuZGVwcmVjYXRlZE5vZGUoKSkpOwogICAgIGJvb2wgaXNJbnNlcnRpbmdJbnRvTGlzdCA9
IChpc0xpc3RIVE1MRWxlbWVudChyZWZOb2RlLmdldCgpKSB8fCAoaXNMZWdhY3lBcHBsZVN0eWxl
U3BhbihyZWZOb2RlLmdldCgpKSAmJiBpc0xpc3RIVE1MRWxlbWVudChyZWZOb2RlLT5maXJzdENo
aWxkKCkpKSkKICAgICAmJiBibG9ja1N0YXJ0ICYmIGJsb2NrU3RhcnQtPnJlbmRlcmVyKCktPmlz
TGlzdEl0ZW0oKTsKICAgICBpZiAoaXNJbnNlcnRpbmdJbnRvTGlzdCkKLSAgICAgICAgcmVmTm9k
ZSA9IGluc2VydEFzTGlzdEl0ZW1zKGRvd25jYXN0PEhUTUxFbGVtZW50PigqcmVmTm9kZSksIGJs
b2NrU3RhcnQsIGluc2VydGlvblBvcywgaW5zZXJ0ZWROb2Rlcyk7CisgICAgICAgIHJlZk5vZGUg
PSBpbnNlcnRBc0xpc3RJdGVtcyhkb3duY2FzdDxIVE1MRWxlbWVudD4oKnJlZk5vZGUpLCBibG9j
a1N0YXJ0LmdldCgpLCBpbnNlcnRpb25Qb3MsIGluc2VydGVkTm9kZXMpOwogICAgIGVsc2UgaWYg
KGlzRWRpdGFibGVQb3NpdGlvbihpbnNlcnRpb25Qb3MpKSB7CiAgICAgICAgIGluc2VydE5vZGVB
dCgqcmVmTm9kZSwgaW5zZXJ0aW9uUG9zKTsKICAgICAgICAgaW5zZXJ0ZWROb2Rlcy5yZXNwb25k
VG9Ob2RlSW5zZXJ0aW9uKHJlZk5vZGUuZ2V0KCkpOwpAQCAtMTQwMCw4ICsxNDEwLDggQEAgdm9p
ZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIGlmIChzZWxlY3Rp
b25FbmRXYXNFbmRPZlBhcmFncmFwaCB8fCAhaXNFbmRPZlBhcmFncmFwaChlbmRPZkluc2VydGVk
Q29udGVudCkgfHwgbmV4dC5pc051bGwoKSkgewogICAgICAgICAgICAgaWYgKCFpc1N0YXJ0T2ZQ
YXJhZ3JhcGgoZW5kT2ZJbnNlcnRlZENvbnRlbnQpKSB7CiAgICAgICAgICAgICAgICAgc2V0RW5k
aW5nU2VsZWN0aW9uKGVuZE9mSW5zZXJ0ZWRDb250ZW50KTsKLSAgICAgICAgICAgICAgICBOb2Rl
KiBlbmNsb3NpbmdOb2RlID0gZW5jbG9zaW5nQmxvY2soZW5kT2ZJbnNlcnRlZENvbnRlbnQuZGVl
cEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNM
aXN0SXRlbShlbmNsb3NpbmdOb2RlKSkgeworICAgICAgICAgICAgICAgIGF1dG8gZW5jbG9zaW5n
Tm9kZSA9IG1ha2VSZWZQdHIoZW5jbG9zaW5nQmxvY2soZW5kT2ZJbnNlcnRlZENvbnRlbnQuZGVl
cEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKSk7CisgICAgICAgICAgICAgICAgaWYgKGlz
TGlzdEl0ZW0oZW5jbG9zaW5nTm9kZS5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgYXV0
byBuZXdMaXN0SXRlbSA9IEhUTUxMSUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKG5ld0xpc3RJdGVtLmNvcHlSZWYoKSwgKmVu
Y2xvc2luZ05vZGUpOwogICAgICAgICAgICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlz
aWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUobmV3TGlzdEl0ZW0ucHRyKCkpKSk7CkBA
IC0xNDI0LDcgKzE0MzQsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5
KCkKICAgICB9IGVsc2UKICAgICAgICAgbWVyZ2VFbmRJZk5lZWRlZCgpOwogCi0gICAgaWYgKE5v
ZGUqIG1haWxCbG9ja3F1b3RlID0gZW5jbG9zaW5nTm9kZU9mVHlwZShwb3NpdGlvbkF0U3RhcnRP
Zkluc2VydGVkQ29udGVudCgpLmRlZXBFcXVpdmFsZW50KCksIGlzTWFpbFBhc3RlQXNRdW90YXRp
b25Ob2RlKSkKKyAgICBpZiAoYXV0byBtYWlsQmxvY2txdW90ZSA9IG1ha2VSZWZQdHIoZW5jbG9z
aW5nTm9kZU9mVHlwZShwb3NpdGlvbkF0U3RhcnRPZkluc2VydGVkQ29udGVudCgpLmRlZXBFcXVp
dmFsZW50KCksIGlzTWFpbFBhc3RlQXNRdW90YXRpb25Ob2RlKSkpCiAgICAgICAgIHJlbW92ZU5v
ZGVBdHRyaWJ1dGUoZG93bmNhc3Q8RWxlbWVudD4oKm1haWxCbG9ja3F1b3RlKSwgY2xhc3NBdHRy
KTsKIAogICAgIGlmIChzaG91bGRQZXJmb3JtU21hcnRSZXBsYWNlKCkpCkBAIC0xNDgyLDcgKzE0
OTIsNyBAQCBib29sIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpzaG91bGRQZXJmb3JtU21hcnRS
ZXBsYWNlKCkgY29uc3QKICAgICBpZiAoIW1fc21hcnRSZXBsYWNlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBFbGVtZW50KiB0ZXh0Q29udHJvbCA9IGVuY2xvc2luZ1RleHRGb3JtQ29u
dHJvbChwb3NpdGlvbkF0U3RhcnRPZkluc2VydGVkQ29udGVudCgpLmRlZXBFcXVpdmFsZW50KCkp
OworICAgIGF1dG8gdGV4dENvbnRyb2wgPSBtYWtlUmVmUHRyKGVuY2xvc2luZ1RleHRGb3JtQ29u
dHJvbChwb3NpdGlvbkF0U3RhcnRPZkluc2VydGVkQ29udGVudCgpLmRlZXBFcXVpdmFsZW50KCkp
KTsKICAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4odGV4dENvbnRyb2wpICYmIGRvd25jYXN0
PEhUTUxJbnB1dEVsZW1lbnQ+KCp0ZXh0Q29udHJvbCkuaXNQYXNzd29yZEZpZWxkKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gRGlzYWJsZSBzbWFydCByZXBsYWNlIGZvciBwYXNzd29yZCBm
aWVsZHMuCiAKQEAgLTE1NTEsNyArMTU2MSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OmFkZFNwYWNlc0ZvclNtYXJ0UmVwbGFjZSgpCiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZE9m
SW5zZXJ0ZWRDb250ZW50ID0gcG9zaXRpb25BdEVuZE9mSW5zZXJ0ZWRDb250ZW50KCk7CiAKICAg
ICBQb3NpdGlvbiBlbmRVcHN0cmVhbSA9IGVuZE9mSW5zZXJ0ZWRDb250ZW50LmRlZXBFcXVpdmFs
ZW50KCkudXBzdHJlYW0oKTsKLSAgICBOb2RlKiBlbmROb2RlID0gZW5kVXBzdHJlYW0uY29tcHV0
ZU5vZGVCZWZvcmVQb3NpdGlvbigpOworICAgIGF1dG8gZW5kTm9kZSA9IG1ha2VSZWZQdHIoZW5k
VXBzdHJlYW0uY29tcHV0ZU5vZGVCZWZvcmVQb3NpdGlvbigpKTsKICAgICBpbnQgZW5kT2Zmc2V0
ID0gaXM8VGV4dD4oZW5kTm9kZSkgPyBkb3duY2FzdDxUZXh0PigqZW5kTm9kZSkubGVuZ3RoKCkg
OiAwOwogICAgIGlmIChlbmRVcHN0cmVhbS5hbmNob3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0
aW9uSXNPZmZzZXRJbkFuY2hvcikgewogICAgICAgICBlbmROb2RlID0gZW5kVXBzdHJlYW0uY29u
dGFpbmVyTm9kZSgpOwpAQCAtMTU3NSw3ICsxNTg1LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6YWRkU3BhY2VzRm9yU21hcnRSZXBsYWNlKCkKICAgICBkb2N1bWVudCgpLnVwZGF0
ZUxheW91dCgpOwogCiAgICAgUG9zaXRpb24gc3RhcnREb3duc3RyZWFtID0gc3RhcnRPZkluc2Vy
dGVkQ29udGVudC5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKTsKLSAgICBOb2RlKiBzdGFy
dE5vZGUgPSBzdGFydERvd25zdHJlYW0uY29tcHV0ZU5vZGVBZnRlclBvc2l0aW9uKCk7CisgICAg
YXV0byBzdGFydE5vZGUgPSBtYWtlUmVmUHRyKHN0YXJ0RG93bnN0cmVhbS5jb21wdXRlTm9kZUFm
dGVyUG9zaXRpb24oKSk7CiAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwOwogICAgIGlmIChz
dGFydERvd25zdHJlYW0uYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0
SW5BbmNob3IpIHsKICAgICAgICAgc3RhcnROb2RlID0gc3RhcnREb3duc3RyZWFtLmNvbnRhaW5l
ck5vZGUoKTsKQEAgLTE1OTEsMTEgKzE2MDEsMTAgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6YWRkU3BhY2VzRm9yU21hcnRSZXBsYWNlKCkKICAgICAgICAgICAgICAgICBtX2VuZE9m
SW5zZXJ0ZWRDb250ZW50Lm1vdmVUb09mZnNldChtX2VuZE9mSW5zZXJ0ZWRDb250ZW50Lm9mZnNl
dEluQ29udGFpbmVyTm9kZSgpICsgMSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBh
dXRvIG5vZGUgPSBkb2N1bWVudCgpLmNyZWF0ZUVkaXRpbmdUZXh0Tm9kZShjb2xsYXBzZVdoaXRl
U3BhY2UgPyBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkgOiAiICIpOwotICAgICAgICAgICAgYXV0
byogbm9kZVB0ciA9IG5vZGUucHRyKCk7CiAgICAgICAgICAgICAvLyBEb24ndCB1cGRhdGVOb2Rl
c0luc2VydGVkLiBEb2luZyBzbyB3b3VsZCBzZXQgbV9lbmRPZkluc2VydGVkQ29udGVudCB0byBi
ZSB0aGUgbm9kZSBjb250YWluaW5nIHRoZSBsZWFkaW5nIHNwYWNlLAogICAgICAgICAgICAgLy8g
YnV0IG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQgaXMgc3VwcG9zZWQgdG8gbWFyayB0aGUgZW5kIG9m
IHBhc3RlZCBjb250ZW50LgotICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShXVEZNb3ZlKG5v
ZGUpLCAqc3RhcnROb2RlKTsKLSAgICAgICAgICAgIG1fc3RhcnRPZkluc2VydGVkQ29udGVudCA9
IGZpcnN0UG9zaXRpb25Jbk5vZGUobm9kZVB0cik7CisgICAgICAgICAgICBpbnNlcnROb2RlQmVm
b3JlKG5vZGUsICpzdGFydE5vZGUpOworICAgICAgICAgICAgbV9zdGFydE9mSW5zZXJ0ZWRDb250
ZW50ID0gZmlyc3RQb3NpdGlvbkluTm9kZShub2RlLnB0cigpKTsKICAgICAgICAgfQogICAgIH0K
IH0KQEAgLTE2NTAsMjAgKzE2NTksMTYgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
bWVyZ2VUZXh0Tm9kZXNBcm91bmRQb3NpdGlvbihQb3NpdGlvbiYgcG9zaXRpb24sIFAKICAgICBp
ZiAocG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIGlzPFRleHQ+KHBvc2l0aW9uLmNvbnRhaW5l
ck5vZGUoKSkpCiAgICAgICAgIHRleHQgPSBkb3duY2FzdDxUZXh0Pihwb3NpdGlvbi5jb250YWlu
ZXJOb2RlKCkpOwogICAgIGVsc2UgewotICAgICAgICBOb2RlKiBiZWZvcmUgPSBwb3NpdGlvbi5j
b21wdXRlTm9kZUJlZm9yZVBvc2l0aW9uKCk7Ci0gICAgICAgIGlmIChpczxUZXh0PihiZWZvcmUp
KQorICAgICAgICBpZiAoYXV0byogYmVmb3JlID0gcG9zaXRpb24uY29tcHV0ZU5vZGVCZWZvcmVQ
b3NpdGlvbigpOyBpczxUZXh0PihiZWZvcmUpKQogICAgICAgICAgICAgdGV4dCA9IGRvd25jYXN0
PFRleHQ+KGJlZm9yZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgTm9kZSogYWZ0ZXIg
PSBwb3NpdGlvbi5jb21wdXRlTm9kZUFmdGVyUG9zaXRpb24oKTsKLSAgICAgICAgICAgIGlmIChp
czxUZXh0PihhZnRlcikpCi0gICAgICAgICAgICAgICAgdGV4dCA9IGRvd25jYXN0PFRleHQ+KGFm
dGVyKTsKLSAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChhdXRvKiBhZnRlciA9IHBvc2l0aW9u
LmNvbXB1dGVOb2RlQWZ0ZXJQb3NpdGlvbigpOyBpczxUZXh0PihhZnRlcikpCisgICAgICAgICAg
ICB0ZXh0ID0gZG93bmNhc3Q8VGV4dD4oYWZ0ZXIpOwogICAgIH0KICAgICBpZiAoIXRleHQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChpczxUZXh0Pih0ZXh0LT5wcmV2aW91c1NpYmxpbmco
KSkpIHsKLSAgICAgICAgUmVmPFRleHQ+IHByZXZpb3VzKGRvd25jYXN0PFRleHQ+KCp0ZXh0LT5w
cmV2aW91c1NpYmxpbmcoKSkpOworICAgIGlmIChhdXRvKiBwcmV2aW91c1NpYmxpbmcgPSB0ZXh0
LT5wcmV2aW91c1NpYmxpbmcoKTsgaXM8VGV4dD4ocHJldmlvdXNTaWJsaW5nKSkgeworICAgICAg
ICBhdXRvIHByZXZpb3VzID0gbWFrZVJlZihkb3duY2FzdDxUZXh0PigqcHJldmlvdXNTaWJsaW5n
KSk7CiAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZSgqdGV4dCwgMCwgcHJldmlvdXMtPmRhdGEo
KSk7CiAKICAgICAgICAgaWYgKHBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKQEAgLTE2ODEsOCAr
MTY4Niw4IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlVGV4dE5vZGVzQXJv
dW5kUG9zaXRpb24oUG9zaXRpb24mIHBvc2l0aW9uLCBQCiAKICAgICAgICAgcmVtb3ZlTm9kZShw
cmV2aW91cyk7CiAgICAgfQotICAgIGlmIChpczxUZXh0Pih0ZXh0LT5uZXh0U2libGluZygpKSkg
ewotICAgICAgICBSZWY8VGV4dD4gbmV4dChkb3duY2FzdDxUZXh0PigqdGV4dC0+bmV4dFNpYmxp
bmcoKSkpOworICAgIGlmIChhdXRvKiBuZXh0U2libGluZyA9IHRleHQtPm5leHRTaWJsaW5nKCk7
IGlzPFRleHQ+KG5leHRTaWJsaW5nKSkgeworICAgICAgICBhdXRvIG5leHQgPSBtYWtlUmVmKGRv
d25jYXN0PFRleHQ+KCpuZXh0U2libGluZykpOwogICAgICAgICB1bnNpZ25lZCBvcmlnaW5hbExl
bmd0aCA9IHRleHQtPmxlbmd0aCgpOwogICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUoKnRleHQs
IG9yaWdpbmFsTGVuZ3RoLCBuZXh0LT5kYXRhKCkpOwogCkBAIC0xNzAzLDE0ICsxNzA4LDE0IEBA
IHN0YXRpYyBIVE1MRWxlbWVudCogc2luZ2xlQ2hpbGRMaXN0KEhUTUxFbGVtZW50JiBlbGVtZW50
KQogICAgIGlmICghZWxlbWVudC5oYXNPbmVDaGlsZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIGF1dG8mIGNoaWxkID0gKmVsZW1lbnQuZmlyc3RDaGlsZCgpOwotICAgIHJldHVy
biBpc0xpc3RIVE1MRWxlbWVudCgmY2hpbGQpID8gJmRvd25jYXN0PEhUTUxFbGVtZW50PihjaGls
ZCkgOiBudWxscHRyOworICAgIGF1dG8gY2hpbGQgPSBtYWtlUmVmUHRyKGVsZW1lbnQuZmlyc3RD
aGlsZCgpKTsKKyAgICByZXR1cm4gaXNMaXN0SFRNTEVsZW1lbnQoY2hpbGQuZ2V0KCkpID8gJmRv
d25jYXN0PEhUTUxFbGVtZW50PigqY2hpbGQpIDogbnVsbHB0cjsKIH0KIAogc3RhdGljIEhUTUxF
bGVtZW50JiBkZWVwZXN0U2luZ2xlQ2hpbGRMaXN0KEhUTUxFbGVtZW50JiB0b3BMZXZlbExpc3Qp
CiB7Ci0gICAgYXV0byogbGlzdCA9ICZ0b3BMZXZlbExpc3Q7Ci0gICAgd2hpbGUgKGF1dG8qIGNo
aWxkTGlzdCA9IHNpbmdsZUNoaWxkTGlzdCgqbGlzdCkpCisgICAgYXV0byBsaXN0ID0gbWFrZVJl
ZlB0cih0b3BMZXZlbExpc3QpOworICAgIHdoaWxlIChhdXRvIGNoaWxkTGlzdCA9IHNpbmdsZUNo
aWxkTGlzdCgqbGlzdCkpCiAgICAgICAgIGxpc3QgPSBjaGlsZExpc3Q7CiAgICAgcmV0dXJuICps
aXN0OwogfQpAQCAtMTcyNCw3ICsxNzI5LDcgQEAgTm9kZSogUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6Omluc2VydEFzTGlzdEl0ZW1zKEhUTUxFbGVtZW50JiBwYXNzZWRMaXN0RWxlbWVudCwKICAg
ICBib29sIGlzU3RhcnQgPSBpc1N0YXJ0T2ZQYXJhZ3JhcGgoaW5zZXJ0UG9zKTsKICAgICBib29s
IGlzRW5kID0gaXNFbmRPZlBhcmFncmFwaChpbnNlcnRQb3MpOwogICAgIGJvb2wgaXNNaWRkbGUg
PSAhaXNTdGFydCAmJiAhaXNFbmQ7Ci0gICAgTm9kZSogbGFzdE5vZGUgPSBpbnNlcnRpb25CbG9j
azsKKyAgICBhdXRvIGxhc3ROb2RlID0gbWFrZVJlZlB0cihpbnNlcnRpb25CbG9jayk7CiAKICAg
ICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbGlzdCBpdGVtLCB3ZSBzaG91bGQgc3Bs
aXQgaXQgaW50byB0d28gc2VwYXJhdGUKICAgICAvLyBsaXN0IGl0ZW1zIGFuZCBpbnNlcnQgdGhl
c2Ugbm9kZXMgYmV0d2VlbiB0aGVtLgpAQCAtMTc0OSw3ICsxNzU0LDcgQEAgTm9kZSogUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQ6Omluc2VydEFzTGlzdEl0ZW1zKEhUTUxFbGVtZW50JiBwYXNzZWRM
aXN0RWxlbWVudCwKICAgICB9CiAgICAgaWYgKChpc1N0YXJ0IHx8IGlzTWlkZGxlKSAmJiBsYXN0
Tm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpCiAgICAgICAgIGxhc3ROb2RlID0gbGFzdE5vZGUtPnBy
ZXZpb3VzU2libGluZygpOwotICAgIHJldHVybiBsYXN0Tm9kZTsKKyAgICByZXR1cm4gbGFzdE5v
ZGUuZ2V0KCk7CiB9CiAKIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnVwZGF0ZU5vZGVz
SW5zZXJ0ZWQoTm9kZSAqbm9kZSkKQEAgLTE3NzgsNiArMTc4Myw3IEBAIGJvb2wgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OnBlcmZvcm1Ucml2aWFsUmVwbGFjZShjb25zdCBSZXBsYWNlbWVudEZy
YWdtZW50JiBmCiB7CiAgICAgaWYgKCFpczxUZXh0PihmcmFnbWVudC5maXJzdENoaWxkKCkpIHx8
IGZyYWdtZW50LmZpcnN0Q2hpbGQoKSAhPSBmcmFnbWVudC5sYXN0Q2hpbGQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGF1dG8gdGV4dE5vZGUgPSBtYWtlUmVmKGRvd25jYXN0PFRleHQ+
KCpmcmFnbWVudC5maXJzdENoaWxkKCkpKTsKIAogICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBuaWNl
IHRvIGhhbmRsZSBzbWFydCByZXBsYWNlIGluIHRoZSBmYXN0IHBhdGguCiAgICAgaWYgKG1fc21h
cnRSZXBsYWNlIHx8IGZyYWdtZW50Lmhhc0ludGVyY2hhbmdlTmV3bGluZUF0U3RhcnQoKSB8fCBm
cmFnbWVudC5oYXNJbnRlcmNoYW5nZU5ld2xpbmVBdEVuZCgpKQpAQCAtMTc4OCwxMSArMTc5NCwx
MCBAQCBib29sIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpwZXJmb3JtVHJpdmlhbFJlcGxhY2Uo
Y29uc3QgUmVwbGFjZW1lbnRGcmFnbWVudCYgZgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBSZWZQdHI8Tm9kZT4gbm9kZUFmdGVySW5zZXJ0aW9uUG9zID0gZW5kaW5nU2VsZWN0aW9uKCku
ZW5kKCkuZG93bnN0cmVhbSgpLmFuY2hvck5vZGUoKTsKLSAgICBUZXh0JiB0ZXh0Tm9kZSA9IGRv
d25jYXN0PFRleHQ+KCpmcmFnbWVudC5maXJzdENoaWxkKCkpOwogICAgIC8vIE91ciBmcmFnbWVu
dCBjcmVhdGlvbiBjb2RlIGhhbmRsZXMgdGFicywgc3BhY2VzLCBhbmQgbmV3bGluZXMsIHNvIHdl
IGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhvc2UgaGVyZS4KIAogICAgIFBvc2l0aW9uIHN0
YXJ0ID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBQb3NpdGlvbiBlbmQgPSByZXBs
YWNlU2VsZWN0ZWRUZXh0SW5Ob2RlKHRleHROb2RlLmRhdGEoKSk7CisgICAgUG9zaXRpb24gZW5k
ID0gcmVwbGFjZVNlbGVjdGVkVGV4dEluTm9kZSh0ZXh0Tm9kZS0+ZGF0YSgpKTsKICAgICBpZiAo
ZW5kLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
</data>
<flag name="commit-queue"
          id="446254"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426072</attachid>
            <date>2021-04-14 21:03:28 -0700</date>
            <delta_ts>2021-04-15 01:30:34 -0700</delta_ts>
            <desc>Fixed builds</desc>
            <filename>bug-224591-20210414210327.patch</filename>
            <type>text/plain</type>
            <size>32047</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1OTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODgzODE1NjQ0ZWNiNmQ2
MDg4ZWUwOGE1M2ZkZDY0YjU3NGQxYTIyZS4uMzIwODA2ZTAxYWEzMTgxZWIyYzlhMmFkZDk0OWFj
MjAyY2IyYjY2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIxLTA0LTE0ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIERlcGxveSBSZWYvUmVmUHRy
IGluIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ1OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBEZXBsb3llZCBSZWYvUmVmUHRyIGluIFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmNwcCBwZXIgZ3VpZGVsaW5lcyB3ZSBvdXRsaW5lZCBpbgorICAgICAgICBodHRw
czovL2xpc3RzLndlYmtpdC5vcmcvcGlwZXJtYWlsL3dlYmtpdC1kZXYvMjAyMC1TZXB0ZW1iZXIv
MDMxMzg2Lmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Bdm9pZGluZ1ByZWNlZGluZ05vZGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlVW5yZW5k
ZXJlZE5vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92
ZUludGVyY2hhbmdlTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OnNob3VsZE1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmZyYWdtZW50TmVlZHNDb2xv
clRyYW5zZm9ybWVkKTogUHJvdGVjdGVkIHRoZSBjb2RlIGFjY2Vzc2luZyB0aGUgcmVuZGVyIHRy
ZWUKKyAgICAgICAgd2l0aCBTY3JpcHREaXNhbGxvd2VkU2NvcGU6OkluTWFpblRocmVhZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1bmRhbnRT
dHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjptYWtlSW5zZXJ0ZWRDb250ZW50Um91bmRUcmlwcGFibGVXaXRoSFRN
TFRyZWVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
Ojptb3ZlTm9kZU91dE9mQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6OnBvc2l0aW9uQXRFbmRPZkluc2VydGVkQ29udGVudCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpoYW5kbGVTdHlsZVNwYW5zQmVmb3JlSW5zZXJ0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHlsZVNwYW5zKToKKyAg
ICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0lubGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6c2hvdWxkUGVyZm9ybVNtYXJ0UmVwbGFjZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6YWRkU3BhY2VzRm9yU21hcnRS
ZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjptZXJn
ZVRleHROb2Rlc0Fyb3VuZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNpbmdsZUNoaWxk
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpkZWVwZXN0U2luZ2xlQ2hpbGRMaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjppbnNlcnRBc0xpc3RJdGVtcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cGVyZm9ybVRyaXZp
YWxSZXBsYWNlKToKKwogMjAyMS0wNC0xNCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5j
b20+CiAKICAgICAgICAgUnVuSXRlcmF0b3I6OnRyYXZlcnNlTmV4dC9QcmV2aW91c09uTGluZUln
bm9yaW5nTGluZUJyZWFrIHNob3VsZCBza2lwIG92ZXIgV0JScwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA4NzY0MTE1NDRl
NDJlZDMzMGZkNmNmNjdiYjY4OGQ4OWYwZWQ4OGNlLi5mMDA5ZDU1NzFmN2NkMTNiZDc2MTQzYzgy
NDE5MjFjY2Y2MzY4N2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUgIlBvc2l0
aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5o
IgorI2luY2x1ZGUgIlNjcmlwdERpc2FsbG93ZWRTY29wZS5oIgogI2luY2x1ZGUgIlNjcmlwdEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJTaW1wbGlmeU1hcmt1cENvbW1hbmQuaCIKICNpbmNsdWRlICJT
bWFydFJlcGxhY2UuaCIKQEAgLTEzNSw3ICsxMzYsNyBAQCBzdGF0aWMgUG9zaXRpb24gcG9zaXRp
b25Bdm9pZGluZ1ByZWNlZGluZ05vZGVzKFBvc2l0aW9uIHBvc2l0aW9uKQogICAgIC8vIHNhbWUu
ICBFLmcuLAogICAgIC8vICAgPGRpdj5mb29ePC9kaXY+XgogICAgIC8vIFRoZSB0d28gcG9zaXRp
b25zIGFib3ZlIGFyZSB0aGUgc2FtZSB2aXN1YWwgcG9zaXRpb24sIGJ1dCB3ZSB3YW50IHRvIHN0
YXkgaW4gdGhlIHNhbWUgYmxvY2suCi0gICAgYXV0byogZW5jbG9zaW5nQmxvY2tOb2RlID0gZW5j
bG9zaW5nQmxvY2socG9zaXRpb24uY29udGFpbmVyTm9kZSgpKTsKKyAgICBhdXRvIGVuY2xvc2lu
Z0Jsb2NrTm9kZSA9IG1ha2VSZWZQdHIoZW5jbG9zaW5nQmxvY2socG9zaXRpb24uY29udGFpbmVy
Tm9kZSgpKSk7CiAgICAgZm9yIChQb3NpdGlvbiBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbjsgbmV4
dFBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSAhPSBlbmNsb3NpbmdCbG9ja05vZGU7IHBvc2l0aW9u
ID0gbmV4dFBvc2l0aW9uKSB7CiAgICAgICAgIGlmIChsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9u
KHBvc2l0aW9uKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTcwLDcgKzE3MSw3IEBAIFJlcGxh
Y2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCogZnJh
Z21lbnQsIGNvbnN0IFZpc2liCiAgICAgaWYgKCFlZGl0YWJsZVJvb3QpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8qIHNoYWRvd0hvc3QgPSBlZGl0YWJsZVJvb3QtPnNoYWRvd0hvc3QoKTsK
KyAgICBhdXRvIHNoYWRvd0hvc3QgPSBtYWtlUmVmUHRyKGVkaXRhYmxlUm9vdC0+c2hhZG93SG9z
dCgpKTsKICAgICBpZiAoIWVkaXRhYmxlUm9vdC0+YXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkud2Via2l0QmVmb3JlVGV4dEluc2VydGVkRXZlbnQsIG1haW5UaHJlYWROb3JtYWxX
b3JsZCgpKQogICAgICAgICAmJiAhKHNoYWRvd0hvc3QgJiYgc2hhZG93SG9zdC0+cmVuZGVyZXIo
KSAmJiBzaGFkb3dIb3N0LT5yZW5kZXJlcigpLT5pc1RleHRDb250cm9sKCkpCiAgICAgICAgICYm
IGVkaXRhYmxlUm9vdC0+aGFzUmljaGx5RWRpdGFibGVTdHlsZSgpKSB7CkBAIC0xNzksNyArMTgw
LDcgQEAgUmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudChEb2N1bWVudEZy
YWdtZW50KiBmcmFnbWVudCwgY29uc3QgVmlzaWIKICAgICB9CiAKICAgICBhdXRvIHBhZ2UgPSBj
cmVhdGVQYWdlRm9yU2FuaXRpemluZ1dlYkNvbnRlbnQoKTsKLSAgICBEb2N1bWVudCogc3RhZ2lu
Z0RvY3VtZW50ID0gcGFnZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKTsKKyAgICBhdXRvIHN0YWdp
bmdEb2N1bWVudCA9IG1ha2VSZWZQdHIocGFnZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKSk7CiAg
ICAgQVNTRVJUKHN0YWdpbmdEb2N1bWVudC0+Ym9keSgpKTsKIAogICAgIENvbXB1dGVkU3R5bGVF
eHRyYWN0b3IgY29tcHV0ZWRTdHlsZU9mRWRpdGFibGVSb290KGVkaXRhYmxlUm9vdC5nZXQoKSk7
CkBAIC0zMjIsOCArMzIzLDggQEAgdm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVVbnJl
bmRlcmVkTm9kZXMoTm9kZSogaG9sZGVyKQogewogICAgIFZlY3RvcjxSZWY8Tm9kZT4+IHVucmVu
ZGVyZWQ7CiAKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBob2xkZXItPmZpcnN0Q2hpbGQoKTsgbm9k
ZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUsIGhvbGRlcikpIHsKLSAgICAgICAg
aWYgKCFpc05vZGVSZW5kZXJlZCgqbm9kZSkgJiYgIWlzVGFibGVTdHJ1Y3R1cmVOb2RlKG5vZGUp
KQorICAgIGZvciAoYXV0byBub2RlID0gbWFrZVJlZlB0cihob2xkZXItPmZpcnN0Q2hpbGQoKSk7
IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlLCBob2xkZXIpKSB7CisgICAg
ICAgIGlmICghaXNOb2RlUmVuZGVyZWQoKm5vZGUpICYmICFpc1RhYmxlU3RydWN0dXJlTm9kZShu
b2RlLmdldCgpKSkKICAgICAgICAgICAgIHVucmVuZGVyZWQuYXBwZW5kKCpub2RlKTsKICAgICB9
CiAKQEAgLTMzOCw5ICszMzksOSBAQCB2b2lkIFJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZUlu
dGVyY2hhbmdlTm9kZXMoTm9kZSogY29udGFpbmVyKQogCiAgICAgLy8gSW50ZXJjaGFuZ2UgbmV3
bGluZXMgYXQgdGhlICJzdGFydCIgb2YgdGhlIGluY29taW5nIGZyYWdtZW50IG11c3QgYmUKICAg
ICAvLyBlaXRoZXIgdGhlIGZpcnN0IG5vZGUgaW4gdGhlIGZyYWdtZW50IG9yIHRoZSBmaXJzdCBs
ZWFmIGluIHRoZSBmcmFnbWVudC4KLSAgICBOb2RlKiBub2RlID0gY29udGFpbmVyLT5maXJzdENo
aWxkKCk7CisgICAgYXV0byBub2RlID0gbWFrZVJlZlB0cihjb250YWluZXItPmZpcnN0Q2hpbGQo
KSk7CiAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgaWYgKGlzSW50ZXJjaGFuZ2VOZXdsaW5l
Tm9kZShub2RlKSkgeworICAgICAgICBpZiAoaXNJbnRlcmNoYW5nZU5ld2xpbmVOb2RlKG5vZGUu
Z2V0KCkpKSB7CiAgICAgICAgICAgICBtX2hhc0ludGVyY2hhbmdlTmV3bGluZUF0U3RhcnQgPSB0
cnVlOwogICAgICAgICAgICAgcmVtb3ZlTm9kZSgqbm9kZSk7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTM1Myw3ICszNTQsNyBAQCB2b2lkIFJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZUludGVy
Y2hhbmdlTm9kZXMoTm9kZSogY29udGFpbmVyKQogICAgIC8vIGVpdGhlciB0aGUgbGFzdCBub2Rl
IGluIHRoZSBmcmFnbWVudCBvciB0aGUgbGFzdCBsZWFmIGluIHRoZSBmcmFnbWVudC4KICAgICBu
b2RlID0gY29udGFpbmVyLT5sYXN0Q2hpbGQoKTsKICAgICB3aGlsZSAobm9kZSkgewotICAgICAg
ICBpZiAoaXNJbnRlcmNoYW5nZU5ld2xpbmVOb2RlKG5vZGUpKSB7CisgICAgICAgIGlmIChpc0lu
dGVyY2hhbmdlTmV3bGluZU5vZGUobm9kZS5nZXQoKSkpIHsKICAgICAgICAgICAgIG1faGFzSW50
ZXJjaGFuZ2VOZXdsaW5lQXRFbmQgPSB0cnVlOwogICAgICAgICAgICAgcmVtb3ZlTm9kZSgqbm9k
ZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTM2NCwxMSArMzY1LDExIEBAIHZvaWQgUmVwbGFj
ZW1lbnRGcmFnbWVudDo6cmVtb3ZlSW50ZXJjaGFuZ2VOb2RlcyhOb2RlKiBjb250YWluZXIpCiAg
ICAgbm9kZSA9IGNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChub2RlKSB7CiAg
ICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSk7Ci0g
ICAgICAgIGlmIChpc0ludGVyY2hhbmdlQ29udmVydGVkU3BhY2VTcGFuKG5vZGUpKSB7CisgICAg
ICAgIGlmIChpc0ludGVyY2hhbmdlQ29udmVydGVkU3BhY2VTcGFuKG5vZGUuZ2V0KCkpKSB7CiAg
ICAgICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm5v
ZGUpOwogICAgICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbigqbm9kZSk7CiAg
ICAgICAgIH0KLSAgICAgICAgbm9kZSA9IG5leHQuZ2V0KCk7CisgICAgICAgIG5vZGUgPSBXVEZN
b3ZlKG5leHQpOwogICAgIH0KIH0KIApAQCAtNTMyLDIwICs1MzMsMjAgQEAgYm9vbCBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6c2hvdWxkTWVyZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzb3Vy
Y2UsIGNvbnN0IFYKIHsKICAgICBpZiAoc291cmNlLmlzTnVsbCgpIHx8IGRlc3RpbmF0aW9uLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIGF1dG8qIHNvdXJj
ZU5vZGUgPSBzb3VyY2UuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOwotICAgIGF1
dG8qIGRlc3RpbmF0aW9uTm9kZSA9IGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVj
YXRlZE5vZGUoKTsKLSAgICBhdXRvKiBzb3VyY2VCbG9jayA9IGVuY2xvc2luZ0Jsb2NrKHNvdXJj
ZU5vZGUpOwotICAgIGF1dG8qIGRlc3RpbmF0aW9uQmxvY2sgPSBlbmNsb3NpbmdCbG9jayhkZXN0
aW5hdGlvbk5vZGUpOworCisgICAgYXV0byBzb3VyY2VOb2RlID0gbWFrZVJlZlB0cihzb3VyY2Uu
ZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9u
Tm9kZSA9IG1ha2VSZWZQdHIoZGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVk
Tm9kZSgpKTsKKyAgICBhdXRvIHNvdXJjZUJsb2NrID0gbWFrZVJlZlB0cihlbmNsb3NpbmdCbG9j
ayhzb3VyY2VOb2RlLmdldCgpKSk7CisgICAgYXV0byBkZXN0aW5hdGlvbkJsb2NrID0gbWFrZVJl
ZlB0cihlbmNsb3NpbmdCbG9jayhkZXN0aW5hdGlvbk5vZGUuZ2V0KCkpKTsKICAgICByZXR1cm4g
IWVuY2xvc2luZ05vZGVPZlR5cGUoc291cmNlLmRlZXBFcXVpdmFsZW50KCksICZpc01haWxQYXN0
ZUFzUXVvdGF0aW9uTm9kZSkKICAgICAgICAgJiYgc291cmNlQmxvY2sKLSAgICAgICAgJiYgKCFz
b3VyY2VCbG9jay0+aGFzVGFnTmFtZShibG9ja3F1b3RlVGFnKSB8fCBpc01haWxCbG9ja3F1b3Rl
KHNvdXJjZUJsb2NrKSkKLSAgICAgICAgJiYgZW5jbG9zaW5nTGlzdENoaWxkKHNvdXJjZUJsb2Nr
KSA9PSBlbmNsb3NpbmdMaXN0Q2hpbGQoZGVzdGluYXRpb25Ob2RlKQorICAgICAgICAmJiAoIXNv
dXJjZUJsb2NrLT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcpIHx8IGlzTWFpbEJsb2NrcXVvdGUo
c291cmNlQmxvY2suZ2V0KCkpKQorICAgICAgICAmJiBlbmNsb3NpbmdMaXN0Q2hpbGQoc291cmNl
QmxvY2suZ2V0KCkpID09IGVuY2xvc2luZ0xpc3RDaGlsZChkZXN0aW5hdGlvbk5vZGUuZ2V0KCkp
CiAgICAgICAgICYmIGVuY2xvc2luZ1RhYmxlQ2VsbChzb3VyY2UuZGVlcEVxdWl2YWxlbnQoKSkg
PT0gZW5jbG9zaW5nVGFibGVDZWxsKGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkpCi0gICAg
ICAgICYmICghaXNIZWFkZXJFbGVtZW50KHNvdXJjZUJsb2NrKSB8fCBoYXZlU2FtZVRhZ05hbWUo
c291cmNlQmxvY2ssIGRlc3RpbmF0aW9uQmxvY2spKQorICAgICAgICAmJiAoIWlzSGVhZGVyRWxl
bWVudChzb3VyY2VCbG9jay5nZXQoKSkgfHwgaGF2ZVNhbWVUYWdOYW1lKHNvdXJjZUJsb2NrLmdl
dCgpLCBkZXN0aW5hdGlvbkJsb2NrLmdldCgpKSkKICAgICAgICAgLy8gRG9uJ3QgbWVyZ2UgdG8g
b3IgZnJvbSBhIHBvc2l0aW9uIGJlZm9yZSBvciBhZnRlciBhIGJsb2NrIGJlY2F1c2UgaXQgd291
bGQKICAgICAgICAgLy8gYmUgYSBuby1vcCBhbmQgY2F1c2UgaW5maW5pdGUgcmVjdXJzaW9uLgot
ICAgICAgICAmJiAhaXNCbG9jayhzb3VyY2VOb2RlKSAmJiAhaXNCbG9jayhkZXN0aW5hdGlvbk5v
ZGUpOworICAgICAgICAmJiAhaXNCbG9jayhzb3VyY2VOb2RlLmdldCgpKSAmJiAhaXNCbG9jayhk
ZXN0aW5hdGlvbk5vZGUuZ2V0KCkpOwogfQogCiBzdGF0aWMgYm9vbCBmcmFnbWVudE5lZWRzQ29s
b3JUcmFuc2Zvcm1lZChSZXBsYWNlbWVudEZyYWdtZW50JiBmcmFnbWVudCwgY29uc3QgUG9zaXRp
b24mIGluc2VydGlvblBvcykKQEAgLTU1OCwxNCArNTU5LDE4IEBAIHN0YXRpYyBib29sIGZyYWdt
ZW50TmVlZHNDb2xvclRyYW5zZm9ybWVkKFJlcGxhY2VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBj
b25zdCBQCiAgICAgaWYgKCFlZGl0YWJsZVJvb3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGF1dG8qIGVkaXRhYmxlUm9vdFJlbmRlcmVyID0gZWRpdGFibGVSb290LT5yZW5kZXJlcigp
OwotICAgIGlmICghZWRpdGFibGVSb290UmVuZGVyZXIgfHwgIWVkaXRhYmxlUm9vdFJlbmRlcmVy
LT5zdHlsZSgpLmhhc0FwcGxlQ29sb3JGaWx0ZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHsKKyAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2NyaXB0
RGlzYWxsb3dlZFNjb3BlOwogCi0gICAgY29uc3QgYXV0byYgY29sb3JGaWx0ZXIgPSBlZGl0YWJs
ZVJvb3RSZW5kZXJlci0+c3R5bGUoKS5hcHBsZUNvbG9yRmlsdGVyKCk7Ci0gICAgZm9yIChjb25z
dCBhdXRvJiBjb2xvckZpbHRlck9wZXJhdGlvbiA6IGNvbG9yRmlsdGVyLm9wZXJhdGlvbnMoKSkg
ewotICAgICAgICBpZiAoY29sb3JGaWx0ZXJPcGVyYXRpb24tPnR5cGUoKSAhPSBGaWx0ZXJPcGVy
YXRpb246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1MpCisgICAgICAgIGF1dG8qIGVkaXRhYmxlUm9v
dFJlbmRlcmVyID0gZWRpdGFibGVSb290LT5yZW5kZXJlcigpOworICAgICAgICBpZiAoIWVkaXRh
YmxlUm9vdFJlbmRlcmVyIHx8ICFlZGl0YWJsZVJvb3RSZW5kZXJlci0+c3R5bGUoKS5oYXNBcHBs
ZUNvbG9yRmlsdGVyKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgY29u
c3QgYXV0byYgY29sb3JGaWx0ZXIgPSBlZGl0YWJsZVJvb3RSZW5kZXJlci0+c3R5bGUoKS5hcHBs
ZUNvbG9yRmlsdGVyKCk7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgY29sb3JGaWx0ZXJPcGVy
YXRpb24gOiBjb2xvckZpbHRlci5vcGVyYXRpb25zKCkpIHsKKyAgICAgICAgICAgIGlmIChjb2xv
ckZpbHRlck9wZXJhdGlvbi0+dHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6QVBQTEVfSU5WRVJU
X0xJR0hUTkVTUykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAg
ICB9CiAKICAgICBhdXRvIHByb3BlcnR5TGlnaHRuZXNzID0gWyZdKGNvbnN0IFN0eWxlUHJvcGVy
dGllcyYgaW5saW5lU3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkgLT4gT3B0aW9uYWw8
ZG91YmxlPiB7CkBAIC02MzYsOCArNjQxLDggQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6cmVtb3ZlUmVkdW5kYW50U3R5bGVzQW5kS2VlcFN0eWxlU3BhbklubGluZShJbnNlcnQKIAog
ICAgICAgICBTdHlsZWRFbGVtZW50KiBlbGVtZW50ID0gZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4o
bm9kZS5nZXQoKSk7CiAKLSAgICAgICAgY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBpbmxpbmVTdHls
ZSA9IGVsZW1lbnQtPmlubGluZVN0eWxlKCk7Ci0gICAgICAgIGF1dG8gbmV3SW5saW5lU3R5bGUg
PSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShpbmxpbmVTdHlsZSk7CisgICAgICAgIGF1dG8gaW5saW5l
U3R5bGUgPSBtYWtlUmVmUHRyKGVsZW1lbnQtPmlubGluZVN0eWxlKCkpOworICAgICAgICBhdXRv
IG5ld0lubGluZVN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoaW5saW5lU3R5bGUuZ2V0KCkp
OwogICAgICAgICBpZiAoaW5saW5lU3R5bGUpIHsKICAgICAgICAgICAgIGlmIChpczxIVE1MRWxl
bWVudD4oKmVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgVmVjdG9yPFF1YWxpZmllZE5hbWU+
IGF0dHJpYnV0ZXM7CkBAIC02NTUsMTUgKzY2MCwxNSBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpyZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKEluc2Vy
dAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgQ29udGFp
bmVyTm9kZSogY29udGV4dCA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIGF1
dG8gY29udGV4dCA9IG1ha2VSZWZQdHIoZWxlbWVudC0+cGFyZW50Tm9kZSgpKTsKIAogICAgICAg
ICAgICAgLy8gSWYgTWFpbCB3cmFwcyB0aGUgZnJhZ21lbnQgd2l0aCBhIFBhc3RlIGFzIFF1b3Rh
dGlvbiBibG9ja3F1b3RlLCBvciBpZiB5b3UncmUgcGFzdGluZyBpbnRvIGEgcXVvdGVkIHJlZ2lv
biwKICAgICAgICAgICAgIC8vIHN0eWxlcyBmcm9tIGJsb2NrcXVvdGVOb2RlIGFyZSBhbGxvd2Vk
IHRvIG92ZXJyaWRlIHRob3NlIGZyb20gdGhlIHNvdXJjZSBkb2N1bWVudCwgc2VlIDxyZGFyOi8v
cHJvYmxlbS80OTMwOTg2PiBhbmQgPHJkYXI6Ly9wcm9ibGVtLzUwODkzMjc+LgotICAgICAgICAg
ICAgTm9kZSogYmxvY2txdW90ZU5vZGUgPSBpc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9kZShjb250
ZXh0KSA/IGNvbnRleHQgOiBlbmNsb3NpbmdOb2RlT2ZUeXBlKGZpcnN0UG9zaXRpb25Jbk5vZGUo
Y29udGV4dCksIGlzTWFpbEJsb2NrcXVvdGUsIENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKKyAg
ICAgICAgICAgIFJlZlB0cjxOb2RlPiBibG9ja3F1b3RlTm9kZSA9IGlzTWFpbFBhc3RlQXNRdW90
YXRpb25Ob2RlKGNvbnRleHQuZ2V0KCkpID8gY29udGV4dC5nZXQoKSA6IGVuY2xvc2luZ05vZGVP
ZlR5cGUoZmlyc3RQb3NpdGlvbkluTm9kZShjb250ZXh0LmdldCgpKSwgaXNNYWlsQmxvY2txdW90
ZSwgQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogICAgICAgICAgICAgaWYgKGJsb2NrcXVvdGVO
b2RlKQogICAgICAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5yZW1vdmVTdHlsZUZyb21SdWxl
c0FuZENvbnRleHQoKmVsZW1lbnQsIGRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCkpOwogCi0g
ICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+cmVtb3ZlU3R5bGVGcm9tUnVsZXNBbmRDb250ZXh0
KCplbGVtZW50LCBjb250ZXh0KTsKKyAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5yZW1vdmVT
dHlsZUZyb21SdWxlc0FuZENvbnRleHQoKmVsZW1lbnQsIGNvbnRleHQuZ2V0KCkpOwogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKCFpbmxpbmVTdHlsZSB8fCBuZXdJbmxpbmVTdHlsZS0+aXNFbXB0
eSgpKSB7CkBAIC03ODUsMjAgKzc5MCwyMCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjptYWtlSW5zZXJ0ZWRDb250ZW50Um91bmRUcmlwcGFibGVXaXRoSFRNTFRyZWVCdWlsZAogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKGlzUHJvaGliaXRlZFBhcmFncmFwaENo
aWxkKGRvd25jYXN0PEhUTUxFbGVtZW50Pigqbm9kZSkubG9jYWxOYW1lKCkpKSB7Ci0gICAgICAg
ICAgICBpZiAoYXV0byogcGFyYWdyYXBoRWxlbWVudCA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFn
KHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKG5vZGUuZ2V0KCkpLCBwVGFnKSkgewotICAgICAg
ICAgICAgICAgIGF1dG8qIHBhcmVudCA9IHBhcmFncmFwaEVsZW1lbnQtPnBhcmVudE5vZGUoKTsK
KyAgICAgICAgICAgIGlmIChhdXRvIHBhcmFncmFwaEVsZW1lbnQgPSBtYWtlUmVmUHRyKGVuY2xv
c2luZ0VsZW1lbnRXaXRoVGFnKHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKG5vZGUuZ2V0KCkp
LCBwVGFnKSkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHBhcmVudCA9IG1ha2VSZWZQdHIocGFy
YWdyYXBoRWxlbWVudC0+cGFyZW50Tm9kZSgpKTsKICAgICAgICAgICAgICAgICBpZiAocGFyZW50
ICYmIHBhcmVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAgICAgICAgICBtb3Zl
Tm9kZU91dE9mQW5jZXN0b3IoKm5vZGUsICpwYXJhZ3JhcGhFbGVtZW50LCBpbnNlcnRlZE5vZGVz
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmIChpc0hlYWRlckVsZW1l
bnQobm9kZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBoZWFkZXJFbGVtZW50ID0g
aGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUocG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUobm9k
ZS5nZXQoKSksIGlzSGVhZGVyRWxlbWVudCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGhlYWRl
ckVsZW1lbnQgPSBtYWtlUmVmUHRyKGhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBlKHBvc2l0aW9u
SW5QYXJlbnRCZWZvcmVOb2RlKG5vZGUuZ2V0KCkpLCBpc0hlYWRlckVsZW1lbnQpKSkgewogICAg
ICAgICAgICAgICAgIGlmIChoZWFkZXJFbGVtZW50LT5wYXJlbnROb2RlKCkgJiYgaGVhZGVyRWxl
bWVudC0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAgICAgICAg
ICAgICAgICAgICBtb3ZlTm9kZU91dE9mQW5jZXN0b3IoKm5vZGUsICpoZWFkZXJFbGVtZW50LCBp
bnNlcnRlZE5vZGVzKTsKICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgSFRNTEVsZW1lbnQqIG5ld1NwYW5FbGVtZW50ID0gcmVwbGFjZUVsZW1lbnRXaXRoU3BhblBy
ZXNlcnZpbmdDaGlsZHJlbkFuZEF0dHJpYnV0ZXMoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpub2Rl
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGluc2VydGVkTm9kZXMuZGlkUmVwbGFjZU5vZGUobm9k
ZS5nZXQoKSwgbmV3U3BhbkVsZW1lbnQpOworICAgICAgICAgICAgICAgICAgICBhdXRvIG5ld1Nw
YW5FbGVtZW50ID0gbWFrZVJlZlB0cihyZXBsYWNlRWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0No
aWxkcmVuQW5kQXR0cmlidXRlcyhkb3duY2FzdDxIVE1MRWxlbWVudD4oKm5vZGUpKSk7CisgICAg
ICAgICAgICAgICAgICAgIGluc2VydGVkTm9kZXMuZGlkUmVwbGFjZU5vZGUobm9kZS5nZXQoKSwg
bmV3U3BhbkVsZW1lbnQuZ2V0KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtODMzLDcgKzgzOCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6Om1vdmVOb2RlT3V0T2ZBbmNlc3RvcihOb2RlJiBub2RlLCBOb2RlJiBhbmNlc3RvciwKICAg
ICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCiAg
ICAgYm9vbCBzYWZlVG9SZW1vdmVBbmNlc3RvciA9IHRydWU7Ci0gICAgZm9yIChhdXRvKiBjaGls
ZCA9IGFuY2VzdG9yLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpIHsKKyAgICBmb3IgKGF1dG8gY2hpbGQgPSBtYWtlUmVmUHRyKGFuY2VzdG9yLmZpcnN0
Q2hpbGQoKSk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAg
IGlmIChpczxUZXh0PihjaGlsZCkgJiYgaGFzUmVuZGVyZWRUZXh0KGRvd25jYXN0PFRleHQ+KCpj
aGlsZCkpKSB7CiAgICAgICAgICAgICBzYWZlVG9SZW1vdmVBbmNlc3RvciA9IGZhbHNlOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC04NzcsOCArODgyLDggQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6cmVtb3ZlVW5yZW5kZXJlZFRleHROb2Rlc0F0RW5kcyhJbnNlcnRlZE5vZGVzJiBp
bnMKIFZpc2libGVQb3NpdGlvbiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cG9zaXRpb25BdEVu
ZE9mSW5zZXJ0ZWRDb250ZW50KCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMg
aGFjayBoZXJlPyAgV2hhdCdzIHNwZWNpYWwgYWJvdXQgPHNlbGVjdD4gdGFncz8KLSAgICBhdXRv
KiBlbmNsb3NpbmdTZWxlY3QgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2VuZE9mSW5zZXJ0
ZWRDb250ZW50LCBzZWxlY3RUYWcpOwotICAgIHJldHVybiBlbmNsb3NpbmdTZWxlY3QgPyBsYXN0
UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKGVuY2xvc2luZ1NlbGVjdCkgOiBtX2VuZE9mSW5zZXJ0ZWRD
b250ZW50OworICAgIGF1dG8gZW5jbG9zaW5nU2VsZWN0ID0gbWFrZVJlZlB0cihlbmNsb3NpbmdF
bGVtZW50V2l0aFRhZyhtX2VuZE9mSW5zZXJ0ZWRDb250ZW50LCBzZWxlY3RUYWcpKTsKKyAgICBy
ZXR1cm4gZW5jbG9zaW5nU2VsZWN0ID8gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShlbmNsb3Np
bmdTZWxlY3QuZ2V0KCkpIDogbV9lbmRPZkluc2VydGVkQ29udGVudDsKIH0KIAogVmlzaWJsZVBv
c2l0aW9uIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpwb3NpdGlvbkF0U3RhcnRPZkluc2VydGVk
Q29udGVudCgpIGNvbnN0CkBAIC04OTAsMjggKzg5NSwyOCBAQCBWaXNpYmxlUG9zaXRpb24gUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnBvc2l0aW9uQXRTdGFydE9mSW5zZXJ0ZWRDb250ZW50KCkg
Y29ucwogLy8gYXZvaWQgZG9pbmcgYSBsYXlvdXQuCiBzdGF0aWMgYm9vbCBoYW5kbGVTdHlsZVNw
YW5zQmVmb3JlSW5zZXJ0aW9uKFJlcGxhY2VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBjb25zdCBQ
b3NpdGlvbiYgaW5zZXJ0aW9uUG9zKQogewotICAgIE5vZGUqIHRvcE5vZGUgPSBmcmFnbWVudC5m
aXJzdENoaWxkKCk7CisgICAgYXV0byB0b3BOb2RlID0gbWFrZVJlZlB0cihmcmFnbWVudC5maXJz
dENoaWxkKCkpOwogCiAgICAgLy8gSGFuZGxpbmcgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIGRvaW5n
IFBhc3RlIGFzIFF1b3RhdGlvbiBvciBwYXN0aW5nIGludG8gcXVvdGVkIGNvbnRlbnQgaXMgbW9y
ZSBjb21wbGljYXRlZCAoc2VlIGhhbmRsZVN0eWxlU3BhbnMpCiAgICAgLy8gYW5kIGRvZXNuJ3Qg
cmVjZWl2ZSB0aGUgb3B0aW1pemF0aW9uLgotICAgIGlmIChpc01haWxQYXN0ZUFzUXVvdGF0aW9u
Tm9kZSh0b3BOb2RlKSB8fCBlbmNsb3NpbmdOb2RlT2ZUeXBlKGZpcnN0UG9zaXRpb25Jbk9yQmVm
b3JlTm9kZSh0b3BOb2RlKSwgaXNNYWlsQmxvY2txdW90ZSwgQ2FuQ3Jvc3NFZGl0aW5nQm91bmRh
cnkpKQorICAgIGlmIChpc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9kZSh0b3BOb2RlLmdldCgpKSB8
fCBlbmNsb3NpbmdOb2RlT2ZUeXBlKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZSh0b3BOb2Rl
LmdldCgpKSwgaXNNYWlsQmxvY2txdW90ZSwgQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBFaXRoZXIgdGhlcmUgYXJlIG5vIHN0eWxlIHNw
YW5zIGluIHRoZSBmcmFnbWVudCBvciBhIFdlYktpdCBjbGllbnQgaGFzIGFkZGVkIGNvbnRlbnQg
dG8gdGhlIGZyYWdtZW50CiAgICAgLy8gYmVmb3JlIGluc2VydGluZyBpdC4gIExvb2sgZm9yIGFu
ZCBoYW5kbGUgc3R5bGUgc3BhbnMgYWZ0ZXIgaW5zZXJ0aW9uLgotICAgIGlmICghaXNMZWdhY3lB
cHBsZVN0eWxlU3Bhbih0b3BOb2RlKSkKKyAgICBpZiAoIWlzTGVnYWN5QXBwbGVTdHlsZVNwYW4o
dG9wTm9kZS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIE5vZGUqIHdyYXBw
aW5nU3R5bGVTcGFuID0gdG9wTm9kZTsKKyAgICBhdXRvJiB3cmFwcGluZ1N0eWxlU3BhbiA9IGRv
d25jYXN0PEhUTUxFbGVtZW50PigqdG9wTm9kZSk7CiAgICAgYXV0byBzdHlsZUF0SW5zZXJ0aW9u
UG9zID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoaW5zZXJ0aW9uUG9zLnBhcmVudEFuY2hvcmVkRXF1
aXZhbGVudCgpKTsKICAgICBTdHJpbmcgc3R5bGVUZXh0ID0gc3R5bGVBdEluc2VydGlvblBvcy0+
c3R5bGUoKS0+YXNUZXh0KCk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBzdHJpbmcgY29tcGFyaXNv
biBpcyBhIG5haXZlIHdheSBvZiBjb21wYXJpbmcgdHdvIHN0eWxlcy4KICAgICAvLyBXZSBzaG91
bGQgYmUgdGFraW5nIHRoZSBkaWZmIGFuZCBjaGVjayB0aGF0IHRoZSBkaWZmIGlzIGVtcHR5Lgot
ICAgIGlmIChzdHlsZVRleHQgIT0gZG93bmNhc3Q8RWxlbWVudD4oKndyYXBwaW5nU3R5bGVTcGFu
KS5nZXRBdHRyaWJ1dGUoc3R5bGVBdHRyKSkKKyAgICBpZiAoc3R5bGVUZXh0ICE9IHdyYXBwaW5n
U3R5bGVTcGFuLmdldEF0dHJpYnV0ZShzdHlsZUF0dHIpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBmcmFnbWVudC5yZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKCp3cmFwcGluZ1N0
eWxlU3Bhbik7CisgICAgZnJhZ21lbnQucmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbih3cmFw
cGluZ1N0eWxlU3Bhbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTkyNSwxMyArOTMwLDEz
IEBAIHN0YXRpYyBib29sIGhhbmRsZVN0eWxlU3BhbnNCZWZvcmVJbnNlcnRpb24oUmVwbGFjZW1l
bnRGcmFnbWVudCYgZnJhZ21lbnQsIGNvbnN0CiAvLyBvciBhdCBjb3B5IHRpbWUuCiB2b2lkIFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHlsZVNwYW5zKEluc2VydGVkTm9kZXMmIGlu
c2VydGVkTm9kZXMpCiB7Ci0gICAgSFRNTEVsZW1lbnQqIHdyYXBwaW5nU3R5bGVTcGFuID0gbnVs
bHB0cjsKKyAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IHdyYXBwaW5nU3R5bGVTcGFuOwogICAgIC8v
IFRoZSBzdHlsZSBzcGFuIHRoYXQgY29udGFpbnMgdGhlIHNvdXJjZSBkb2N1bWVudCdzIGRlZmF1
bHQgc3R5bGUgc2hvdWxkIGJlIGF0CiAgICAgLy8gdGhlIHRvcCBvZiB0aGUgZnJhZ21lbnQsIGJ1
dCBNYWlsIHNvbWV0aW1lcyBhZGRzIGEgd3JhcHBlciAoZm9yIFBhc3RlIEFzIFF1b3RhdGlvbiks
CiAgICAgLy8gc28gc2VhcmNoIGZvciB0aGUgdG9wIGxldmVsIHN0eWxlIHNwYW4gaW5zdGVhZCBv
ZiBhc3N1bWluZyBpdCdzIGF0IHRoZSB0b3AuCi0gICAgZm9yIChOb2RlKiBub2RlID0gaW5zZXJ0
ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgaWYgKGlzTGVnYWN5QXBwbGVTdHlsZVNwYW4obm9kZSkp
IHsKLSAgICAgICAgICAgIHdyYXBwaW5nU3R5bGVTcGFuID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+
KG5vZGUpOworICAgIGZvciAoYXV0byBub2RlID0gbWFrZVJlZlB0cihpbnNlcnRlZE5vZGVzLmZp
cnN0Tm9kZUluc2VydGVkKCkpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9k
ZSkpIHsKKyAgICAgICAgaWYgKGlzTGVnYWN5QXBwbGVTdHlsZVNwYW4obm9kZS5nZXQoKSkpIHsK
KyAgICAgICAgICAgIHdyYXBwaW5nU3R5bGVTcGFuID0gc3RhdGljX3BvaW50ZXJfY2FzdDxIVE1M
RWxlbWVudD4oV1RGTW92ZShub2RlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgIH0KQEAgLTk0MiwxNiArOTQ3LDIxIEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OmhhbmRsZVN0eWxlU3BhbnMoSW5zZXJ0ZWROb2RlcyYgaW5zZXJ0ZWROb2RlcykKICAgICAgICAg
cmV0dXJuOwogCiAgICAgYXV0byBzdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHdyYXBwaW5n
U3R5bGVTcGFuLT5pbmxpbmVTdHlsZSgpKTsKLSAgICBDb250YWluZXJOb2RlKiBjb250ZXh0ID0g
d3JhcHBpbmdTdHlsZVNwYW4tPnBhcmVudE5vZGUoKTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtl
UmVmUHRyKHdyYXBwaW5nU3R5bGVTcGFuLT5wYXJlbnROb2RlKCkpOwogCiAgICAgLy8gSWYgTWFp
bCB3cmFwcyB0aGUgZnJhZ21lbnQgd2l0aCBhIFBhc3RlIGFzIFF1b3RhdGlvbiBibG9ja3F1b3Rl
LCBvciBpZiB5b3UncmUgcGFzdGluZyBpbnRvIGEgcXVvdGVkIHJlZ2lvbiwKICAgICAvLyBzdHls
ZXMgZnJvbSBibG9ja3F1b3RlTm9kZSBhcmUgYWxsb3dlZCB0byBvdmVycmlkZSB0aG9zZSBmcm9t
IHRoZSBzb3VyY2UgZG9jdW1lbnQsIHNlZSA8cmRhcjovL3Byb2JsZW0vNDkzMDk4Nj4gYW5kIDxy
ZGFyOi8vcHJvYmxlbS81MDg5MzI3Pi4KLSAgICBOb2RlKiBibG9ja3F1b3RlTm9kZSA9IGlzTWFp
bFBhc3RlQXNRdW90YXRpb25Ob2RlKGNvbnRleHQpID8gY29udGV4dCA6IGVuY2xvc2luZ05vZGVP
ZlR5cGUoZmlyc3RQb3NpdGlvbkluTm9kZShjb250ZXh0KSwgaXNNYWlsQmxvY2txdW90ZSwgQ2Fu
Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOworICAgIFJlZlB0cjxOb2RlPiBibG9ja3F1b3RlTm9kZTsK
KyAgICBpZiAoaXNNYWlsUGFzdGVBc1F1b3RhdGlvbk5vZGUoY29udGV4dC5nZXQoKSkpCisgICAg
ICAgIGJsb2NrcXVvdGVOb2RlID0gY29udGV4dDsKKyAgICBlbHNlCisgICAgICAgIGJsb2NrcXVv
dGVOb2RlID0gZW5jbG9zaW5nTm9kZU9mVHlwZShmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbnRleHQu
Z2V0KCkpLCBpc01haWxCbG9ja3F1b3RlLCBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7CisKICAg
ICBpZiAoYmxvY2txdW90ZU5vZGUpCiAgICAgICAgIGNvbnRleHQgPSBkb2N1bWVudCgpLmRvY3Vt
ZW50RWxlbWVudCgpOwogCiAgICAgLy8gVGhpcyBvcGVyYXRpb24gcmVxdWlyZXMgdGhhdCBvbmx5
IGVkaXRpbmcgc3R5bGVzIHRvIGJlIHJlbW92ZWQgZnJvbSBzb3VyY2VEb2N1bWVudFN0eWxlLgot
ICAgIHN0eWxlLT5wcmVwYXJlVG9BcHBseUF0KGZpcnN0UG9zaXRpb25Jbk5vZGUoY29udGV4dCkp
OworICAgIHN0eWxlLT5wcmVwYXJlVG9BcHBseUF0KGZpcnN0UG9zaXRpb25Jbk5vZGUoY29udGV4
dC5nZXQoKSkpOwogCiAgICAgLy8gUmVtb3ZlIGJsb2NrIHByb3BlcnRpZXMgaW4gdGhlIHNwYW4n
cyBzdHlsZS4gVGhpcyBwcmV2ZW50cyBwcm9wZXJ0aWVzIHRoYXQgcHJvYmFibHkgaGF2ZSBubyBl
ZmZlY3QgCiAgICAgLy8gY3VycmVudGx5IGZyb20gYWZmZWN0aW5nIGJsb2NrcyBsYXRlciBpZiB0
aGUgc3R5bGUgaXMgY2xvbmVkIGZvciBhIG5ldyBibG9jayBlbGVtZW50IGR1cmluZyBhIGZ1dHVy
ZSAKQEAgLTk2MSw3ICs5NzEsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5k
bGVTdHlsZVNwYW5zKEluc2VydGVkTm9kZXMmIGluc2VydGVkTm9kZXMpCiAgICAgc3R5bGUtPnJl
bW92ZUJsb2NrUHJvcGVydGllcygpOwogCiAgICAgaWYgKHN0eWxlLT5pc0VtcHR5KCkgfHwgIXdy
YXBwaW5nU3R5bGVTcGFuLT5maXJzdENoaWxkKCkpIHsKLSAgICAgICAgaW5zZXJ0ZWROb2Rlcy53
aWxsUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbih3cmFwcGluZ1N0eWxlU3Bhbik7CisgICAg
ICAgIGluc2VydGVkTm9kZXMud2lsbFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4od3JhcHBp
bmdTdHlsZVNwYW4uZ2V0KCkpOwogICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVu
KCp3cmFwcGluZ1N0eWxlU3Bhbik7CiAgICAgfSBlbHNlCiAgICAgICAgIHNldE5vZGVBdHRyaWJ1
dGUoKndyYXBwaW5nU3R5bGVTcGFuLCBzdHlsZUF0dHIsIHN0eWxlLT5zdHlsZSgpLT5hc1RleHQo
KSk7CkBAIC0xMDExLDE5ICsxMDIxLDIwIEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
Om1lcmdlRW5kSWZOZWVkZWQoKQogICAgIH0KIH0KIAotc3RhdGljIE5vZGUqIGVuY2xvc2luZ0lu
bGluZShOb2RlKiBub2RlKQorc3RhdGljIFJlZlB0cjxOb2RlPiBlbmNsb3NpbmdJbmxpbmUoTm9k
ZSogbm9kZSkKIHsKLSAgICB3aGlsZSAoQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbm9kZS0+cGFy
ZW50Tm9kZSgpKSB7CisgICAgYXV0byBjdXJyZW50Tm9kZSA9IG1ha2VSZWZQdHIobm9kZSk7Cisg
ICAgd2hpbGUgKGF1dG8gcGFyZW50ID0gbWFrZVJlZlB0cihjdXJyZW50Tm9kZS0+cGFyZW50Tm9k
ZSgpKSkgewogICAgICAgICBpZiAoaXNCbG9ja0Zsb3dFbGVtZW50KCpwYXJlbnQpIHx8IHBhcmVu
dC0+aGFzVGFnTmFtZShib2R5VGFnKSkKLSAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAg
ICAgICAgcmV0dXJuIGN1cnJlbnROb2RlOwogICAgICAgICAvLyBTdG9wIGlmIGFueSBwcmV2aW91
cyBzaWJsaW5nIGlzIGEgYmxvY2suCi0gICAgICAgIGZvciAoTm9kZSogc2libGluZyA9IG5vZGUt
PnByZXZpb3VzU2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNT
aWJsaW5nKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIHNpYmxpbmcgPSBtYWtlUmVmUHRyKGN1cnJl
bnROb2RlLT5wcmV2aW91c1NpYmxpbmcoKSk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5w
cmV2aW91c1NpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYgKGlzQmxvY2tGbG93RWxlbWVudCgq
c2libGluZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGN1cnJlbnROb2RlOwogICAgICAgICB9Ci0gICAgICAgIG5vZGUgPSBwYXJlbnQ7Cisg
ICAgICAgIGN1cnJlbnROb2RlID0gcGFyZW50OwogICAgIH0KLSAgICByZXR1cm4gbm9kZTsKKyAg
ICByZXR1cm4gY3VycmVudE5vZGU7CiB9CiAKIHN0YXRpYyBib29sIGlzSW5saW5lTm9kZVdpdGhT
dHlsZShjb25zdCBOb2RlKiBub2RlKQpAQCAtMTEwNSwxNiArMTExNiwxNiBAQCB2b2lkIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAKICAgICBib29sIHNlbGVjdGlvbkVu
ZFdhc0VuZE9mUGFyYWdyYXBoID0gaXNFbmRPZlBhcmFncmFwaCh2aXNpYmxlRW5kKTsKICAgICBi
b29sIHNlbGVjdGlvblN0YXJ0V2FzU3RhcnRPZlBhcmFncmFwaCA9IGlzU3RhcnRPZlBhcmFncmFw
aCh2aXNpYmxlU3RhcnQpOwotICAgIAotICAgIE5vZGUqIHN0YXJ0QmxvY2sgPSBlbmNsb3NpbmdC
bG9jayh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKLSAg
ICAKKworICAgIGF1dG8gc3RhcnRCbG9jayA9IG1ha2VSZWZQdHIoZW5jbG9zaW5nQmxvY2sodmlz
aWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSkpOworCiAgICAgUG9z
aXRpb24gaW5zZXJ0aW9uUG9zID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAgICAgYm9vbCBzaG91bGRI
YW5kbGVNYWlsQmxvY2txdW90ZSA9IGVuY2xvc2luZ05vZGVPZlR5cGUoaW5zZXJ0aW9uUG9zLCBp
c01haWxCbG9ja3F1b3RlLCBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSkgJiYgIW1faWdub3JlTWFp
bEJsb2NrcXVvdGU7CiAgICAgYm9vbCBzZWxlY3Rpb25Jc1BsYWluVGV4dCA9ICFzZWxlY3Rpb24u
aXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKLSAgICBFbGVtZW50KiBjdXJyZW50Um9vdCA9IHNl
bGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgYXV0byBjdXJyZW50Um9vdCA9IG1h
a2VSZWZQdHIoc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSk7CiAKICAgICBpZiAoKHNl
bGVjdGlvblN0YXJ0V2FzU3RhcnRPZlBhcmFncmFwaCAmJiBzZWxlY3Rpb25FbmRXYXNFbmRPZlBh
cmFncmFwaCAmJiAhc2hvdWxkSGFuZGxlTWFpbEJsb2NrcXVvdGUpCi0gICAgICAgIHx8IHN0YXJ0
QmxvY2sgPT0gY3VycmVudFJvb3QgfHwgaXNMaXN0SXRlbShzdGFydEJsb2NrKSB8fCBzZWxlY3Rp
b25Jc1BsYWluVGV4dCkKKyAgICAgICAgfHwgc3RhcnRCbG9jayA9PSBjdXJyZW50Um9vdCB8fCBp
c0xpc3RJdGVtKHN0YXJ0QmxvY2suZ2V0KCkpIHx8IHNlbGVjdGlvbklzUGxhaW5UZXh0KQogICAg
ICAgICBtX3ByZXZlbnROZXN0aW5nID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHNlbGVjdGlvbi5p
c1JhbmdlKCkpIHsKQEAgLTEyMzIsNyArMTI0Myw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OmRvQXBwbHkoKQogICAgIC8vIG91ciBzdHlsZSBzcGFucyBhbmQgZm9yIHBvc2l0aW9u
cyBpbnNpZGUgbGlzdCBpdGVtcwogICAgIC8vIHNpbmNlIGluc2VydEFzTGlzdEl0ZW1zIGFscmVh
ZHkgZG9lcyB0aGUgcmlnaHQgdGhpbmcuCiAgICAgaWYgKCFtX21hdGNoU3R5bGUgJiYgIWVuY2xv
c2luZ0xpc3QoaW5zZXJ0aW9uUG9zLmNvbnRhaW5lck5vZGUoKSkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIGNvbnRhaW5lck5vZGUgPSBpbnNlcnRpb25Qb3MuY29udGFpbmVyTm9kZSgpKSB7CisgICAg
ICAgIGlmIChhdXRvIGNvbnRhaW5lck5vZGUgPSBtYWtlUmVmUHRyKGluc2VydGlvblBvcy5jb250
YWluZXJOb2RlKCkpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmVyTm9kZS0+aXNUZXh0Tm9k
ZSgpICYmIGluc2VydGlvblBvcy5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAmJiAhaW5zZXJ0aW9u
UG9zLmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkgewogICAgICAgICAgICAgICAgIHNw
bGl0VGV4dE5vZGUoKmluc2VydGlvblBvcy5jb250YWluZXJUZXh0KCksIGluc2VydGlvblBvcy5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uUG9zID0g
Zmlyc3RQb3NpdGlvbkluTm9kZShpbnNlcnRpb25Qb3MuY29udGFpbmVyTm9kZSgpKTsKQEAgLTEy
NDEsNyArMTI1Miw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQog
CiAgICAgICAgIGlmIChSZWZQdHI8Tm9kZT4gbm9kZVRvU3BsaXRUbyA9IG5vZGVUb1NwbGl0VG9B
dm9pZFBhc3RpbmdJbnRvSW5saW5lTm9kZXNXaXRoU3R5bGUoaW5zZXJ0aW9uUG9zKSkgewogICAg
ICAgICAgICAgaWYgKG5vZGVUb1NwbGl0VG8tPnBhcmVudE5vZGUoKSAmJiBpbnNlcnRpb25Qb3Mu
Y29udGFpbmVyTm9kZSgpICE9IG5vZGVUb1NwbGl0VG8tPnBhcmVudE5vZGUoKSkgewotICAgICAg
ICAgICAgICAgIE5vZGUqIHNwbGl0U3RhcnQgPSBpbnNlcnRpb25Qb3MuY29tcHV0ZU5vZGVBZnRl
clBvc2l0aW9uKCk7CisgICAgICAgICAgICAgICAgYXV0byBzcGxpdFN0YXJ0ID0gbWFrZVJlZlB0
cihpbnNlcnRpb25Qb3MuY29tcHV0ZU5vZGVBZnRlclBvc2l0aW9uKCkpOwogICAgICAgICAgICAg
ICAgIGlmICghc3BsaXRTdGFydCkKICAgICAgICAgICAgICAgICAgICAgc3BsaXRTdGFydCA9IGlu
c2VydGlvblBvcy5jb250YWluZXJOb2RlKCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHNwbGl0
U3RhcnQpOwpAQCAtMTI3MSwxMSArMTI4MiwxMSBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjpkb0FwcGx5KCkKICAgICBpZiAocmVmTm9kZSkKICAgICAgICAgZnJhZ21lbnQucmVtb3Zl
Tm9kZSgqcmVmTm9kZSk7CiAKLSAgICBOb2RlKiBibG9ja1N0YXJ0ID0gZW5jbG9zaW5nQmxvY2so
aW5zZXJ0aW9uUG9zLmRlcHJlY2F0ZWROb2RlKCkpOworICAgIGF1dG8gYmxvY2tTdGFydCA9IG1h
a2VSZWZQdHIoZW5jbG9zaW5nQmxvY2soaW5zZXJ0aW9uUG9zLmRlcHJlY2F0ZWROb2RlKCkpKTsK
ICAgICBib29sIGlzSW5zZXJ0aW5nSW50b0xpc3QgPSAoaXNMaXN0SFRNTEVsZW1lbnQocmVmTm9k
ZS5nZXQoKSkgfHwgKGlzTGVnYWN5QXBwbGVTdHlsZVNwYW4ocmVmTm9kZS5nZXQoKSkgJiYgaXNM
aXN0SFRNTEVsZW1lbnQocmVmTm9kZS0+Zmlyc3RDaGlsZCgpKSkpCiAgICAgJiYgYmxvY2tTdGFy
dCAmJiBibG9ja1N0YXJ0LT5yZW5kZXJlcigpLT5pc0xpc3RJdGVtKCk7CiAgICAgaWYgKGlzSW5z
ZXJ0aW5nSW50b0xpc3QpCi0gICAgICAgIHJlZk5vZGUgPSBpbnNlcnRBc0xpc3RJdGVtcyhkb3du
Y2FzdDxIVE1MRWxlbWVudD4oKnJlZk5vZGUpLCBibG9ja1N0YXJ0LCBpbnNlcnRpb25Qb3MsIGlu
c2VydGVkTm9kZXMpOworICAgICAgICByZWZOb2RlID0gaW5zZXJ0QXNMaXN0SXRlbXMoZG93bmNh
c3Q8SFRNTEVsZW1lbnQ+KCpyZWZOb2RlKSwgYmxvY2tTdGFydC5nZXQoKSwgaW5zZXJ0aW9uUG9z
LCBpbnNlcnRlZE5vZGVzKTsKICAgICBlbHNlIGlmIChpc0VkaXRhYmxlUG9zaXRpb24oaW5zZXJ0
aW9uUG9zKSkgewogICAgICAgICBpbnNlcnROb2RlQXQoKnJlZk5vZGUsIGluc2VydGlvblBvcyk7
CiAgICAgICAgIGluc2VydGVkTm9kZXMucmVzcG9uZFRvTm9kZUluc2VydGlvbihyZWZOb2RlLmdl
dCgpKTsKQEAgLTE0MDAsOCArMTQxMSw4IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OmRvQXBwbHkoKQogICAgICAgICBpZiAoc2VsZWN0aW9uRW5kV2FzRW5kT2ZQYXJhZ3JhcGggfHwg
IWlzRW5kT2ZQYXJhZ3JhcGgoZW5kT2ZJbnNlcnRlZENvbnRlbnQpIHx8IG5leHQuaXNOdWxsKCkp
IHsKICAgICAgICAgICAgIGlmICghaXNTdGFydE9mUGFyYWdyYXBoKGVuZE9mSW5zZXJ0ZWRDb250
ZW50KSkgewogICAgICAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihlbmRPZkluc2VydGVk
Q29udGVudCk7Ci0gICAgICAgICAgICAgICAgTm9kZSogZW5jbG9zaW5nTm9kZSA9IGVuY2xvc2lu
Z0Jsb2NrKGVuZE9mSW5zZXJ0ZWRDb250ZW50LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5v
ZGUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzTGlzdEl0ZW0oZW5jbG9zaW5nTm9kZSkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvIGVuY2xvc2luZ05vZGUgPSBtYWtlUmVmUHRyKGVuY2xvc2lu
Z0Jsb2NrKGVuZE9mSW5zZXJ0ZWRDb250ZW50LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5v
ZGUoKSkpOworICAgICAgICAgICAgICAgIGlmIChpc0xpc3RJdGVtKGVuY2xvc2luZ05vZGUuZ2V0
KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gbmV3TGlzdEl0ZW0gPSBIVE1MTElFbGVt
ZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGVB
ZnRlcihuZXdMaXN0SXRlbS5jb3B5UmVmKCksICplbmNsb3NpbmdOb2RlKTsKICAgICAgICAgICAg
ICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9u
SW5Ob2RlKG5ld0xpc3RJdGVtLnB0cigpKSkpOwpAQCAtMTQyNCw3ICsxNDM1LDcgQEAgdm9pZCBS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgfSBlbHNlCiAgICAgICAgIG1l
cmdlRW5kSWZOZWVkZWQoKTsKIAotICAgIGlmIChOb2RlKiBtYWlsQmxvY2txdW90ZSA9IGVuY2xv
c2luZ05vZGVPZlR5cGUocG9zaXRpb25BdFN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKS5kZWVwRXF1
aXZhbGVudCgpLCBpc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9kZSkpCisgICAgaWYgKGF1dG8gbWFp
bEJsb2NrcXVvdGUgPSBtYWtlUmVmUHRyKGVuY2xvc2luZ05vZGVPZlR5cGUocG9zaXRpb25BdFN0
YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKS5kZWVwRXF1aXZhbGVudCgpLCBpc01haWxQYXN0ZUFzUXVv
dGF0aW9uTm9kZSkpKQogICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGRvd25jYXN0PEVsZW1l
bnQ+KCptYWlsQmxvY2txdW90ZSksIGNsYXNzQXR0cik7CiAKICAgICBpZiAoc2hvdWxkUGVyZm9y
bVNtYXJ0UmVwbGFjZSgpKQpAQCAtMTQ4Miw3ICsxNDkzLDcgQEAgYm9vbCBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6c2hvdWxkUGVyZm9ybVNtYXJ0UmVwbGFjZSgpIGNvbnN0CiAgICAgaWYgKCFt
X3NtYXJ0UmVwbGFjZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRWxlbWVudCogdGV4
dENvbnRyb2wgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wocG9zaXRpb25BdFN0YXJ0T2ZJbnNl
cnRlZENvbnRlbnQoKS5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICBhdXRvIHRleHRDb250cm9sID0g
bWFrZVJlZlB0cihlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wocG9zaXRpb25BdFN0YXJ0T2ZJbnNl
cnRlZENvbnRlbnQoKS5kZWVwRXF1aXZhbGVudCgpKSk7CiAgICAgaWYgKGlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KHRleHRDb250cm9sKSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqdGV4dENv
bnRyb2wpLmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIERpc2Fi
bGUgc21hcnQgcmVwbGFjZSBmb3IgcGFzc3dvcmQgZmllbGRzLgogCkBAIC0xNTUxLDcgKzE1NjIs
NyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjphZGRTcGFjZXNGb3JTbWFydFJlcGxh
Y2UoKQogICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZkluc2VydGVkQ29udGVudCA9IHBvc2l0aW9u
QXRFbmRPZkluc2VydGVkQ29udGVudCgpOwogCiAgICAgUG9zaXRpb24gZW5kVXBzdHJlYW0gPSBl
bmRPZkluc2VydGVkQ29udGVudC5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCk7Ci0gICAgTm9k
ZSogZW5kTm9kZSA9IGVuZFVwc3RyZWFtLmNvbXB1dGVOb2RlQmVmb3JlUG9zaXRpb24oKTsKKyAg
ICBhdXRvIGVuZE5vZGUgPSBtYWtlUmVmUHRyKGVuZFVwc3RyZWFtLmNvbXB1dGVOb2RlQmVmb3Jl
UG9zaXRpb24oKSk7CiAgICAgaW50IGVuZE9mZnNldCA9IGlzPFRleHQ+KGVuZE5vZGUpID8gZG93
bmNhc3Q8VGV4dD4oKmVuZE5vZGUpLmxlbmd0aCgpIDogMDsKICAgICBpZiAoZW5kVXBzdHJlYW0u
YW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpIHsKICAg
ICAgICAgZW5kTm9kZSA9IGVuZFVwc3RyZWFtLmNvbnRhaW5lck5vZGUoKTsKQEAgLTE1NzUsNyAr
MTU4Niw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmFkZFNwYWNlc0ZvclNtYXJ0
UmVwbGFjZSgpCiAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKIAogICAgIFBvc2l0aW9u
IHN0YXJ0RG93bnN0cmVhbSA9IHN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQuZGVlcEVxdWl2YWxlbnQo
KS5kb3duc3RyZWFtKCk7Ci0gICAgTm9kZSogc3RhcnROb2RlID0gc3RhcnREb3duc3RyZWFtLmNv
bXB1dGVOb2RlQWZ0ZXJQb3NpdGlvbigpOworICAgIGF1dG8gc3RhcnROb2RlID0gbWFrZVJlZlB0
cihzdGFydERvd25zdHJlYW0uY29tcHV0ZU5vZGVBZnRlclBvc2l0aW9uKCkpOwogICAgIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0ID0gMDsKICAgICBpZiAoc3RhcnREb3duc3RyZWFtLmFuY2hvclR5cGUo
KSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSB7CiAgICAgICAgIHN0YXJ0
Tm9kZSA9IHN0YXJ0RG93bnN0cmVhbS5jb250YWluZXJOb2RlKCk7CkBAIC0xNTkxLDExICsxNjAy
LDEwIEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmFkZFNwYWNlc0ZvclNtYXJ0UmVw
bGFjZSgpCiAgICAgICAgICAgICAgICAgbV9lbmRPZkluc2VydGVkQ29udGVudC5tb3ZlVG9PZmZz
ZXQobV9lbmRPZkluc2VydGVkQ29udGVudC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSArIDEpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYXV0byBub2RlID0gZG9jdW1lbnQoKS5jcmVh
dGVFZGl0aW5nVGV4dE5vZGUoY29sbGFwc2VXaGl0ZVNwYWNlID8gbm9uQnJlYWtpbmdTcGFjZVN0
cmluZygpIDogIiAiKTsKLSAgICAgICAgICAgIGF1dG8qIG5vZGVQdHIgPSBub2RlLnB0cigpOwog
ICAgICAgICAgICAgLy8gRG9uJ3QgdXBkYXRlTm9kZXNJbnNlcnRlZC4gRG9pbmcgc28gd291bGQg
c2V0IG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQgdG8gYmUgdGhlIG5vZGUgY29udGFpbmluZyB0aGUg
bGVhZGluZyBzcGFjZSwKICAgICAgICAgICAgIC8vIGJ1dCBtX2VuZE9mSW5zZXJ0ZWRDb250ZW50
IGlzIHN1cHBvc2VkIHRvIG1hcmsgdGhlIGVuZCBvZiBwYXN0ZWQgY29udGVudC4KLSAgICAgICAg
ICAgIGluc2VydE5vZGVCZWZvcmUoV1RGTW92ZShub2RlKSwgKnN0YXJ0Tm9kZSk7Ci0gICAgICAg
ICAgICBtX3N0YXJ0T2ZJbnNlcnRlZENvbnRlbnQgPSBmaXJzdFBvc2l0aW9uSW5Ob2RlKG5vZGVQ
dHIpOworICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShub2RlLCAqc3RhcnROb2RlKTsKKyAg
ICAgICAgICAgIG1fc3RhcnRPZkluc2VydGVkQ29udGVudCA9IGZpcnN0UG9zaXRpb25Jbk5vZGUo
bm9kZS5wdHIoKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNjUwLDIwICsxNjYwLDE2IEBA
IHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlVGV4dE5vZGVzQXJvdW5kUG9zaXRp
b24oUG9zaXRpb24mIHBvc2l0aW9uLCBQCiAgICAgaWYgKHBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
ciAmJiBpczxUZXh0Pihwb3NpdGlvbi5jb250YWluZXJOb2RlKCkpKQogICAgICAgICB0ZXh0ID0g
ZG93bmNhc3Q8VGV4dD4ocG9zaXRpb24uY29udGFpbmVyTm9kZSgpKTsKICAgICBlbHNlIHsKLSAg
ICAgICAgTm9kZSogYmVmb3JlID0gcG9zaXRpb24uY29tcHV0ZU5vZGVCZWZvcmVQb3NpdGlvbigp
OwotICAgICAgICBpZiAoaXM8VGV4dD4oYmVmb3JlKSkKKyAgICAgICAgaWYgKGF1dG8qIGJlZm9y
ZSA9IHBvc2l0aW9uLmNvbXB1dGVOb2RlQmVmb3JlUG9zaXRpb24oKTsgaXM8VGV4dD4oYmVmb3Jl
KSkKICAgICAgICAgICAgIHRleHQgPSBkb3duY2FzdDxUZXh0PihiZWZvcmUpOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIE5vZGUqIGFmdGVyID0gcG9zaXRpb24uY29tcHV0ZU5vZGVBZnRl
clBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoaXM8VGV4dD4oYWZ0ZXIpKQotICAgICAgICAg
ICAgICAgIHRleHQgPSBkb3duY2FzdDxUZXh0PihhZnRlcik7Ci0gICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAoYXV0byogYWZ0ZXIgPSBwb3NpdGlvbi5jb21wdXRlTm9kZUFmdGVyUG9zaXRpb24o
KTsgaXM8VGV4dD4oYWZ0ZXIpKQorICAgICAgICAgICAgdGV4dCA9IGRvd25jYXN0PFRleHQ+KGFm
dGVyKTsKICAgICB9CiAgICAgaWYgKCF0ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
aXM8VGV4dD4odGV4dC0+cHJldmlvdXNTaWJsaW5nKCkpKSB7Ci0gICAgICAgIFJlZjxUZXh0PiBw
cmV2aW91cyhkb3duY2FzdDxUZXh0PigqdGV4dC0+cHJldmlvdXNTaWJsaW5nKCkpKTsKKyAgICBp
ZiAoYXV0byogcHJldmlvdXNTaWJsaW5nID0gdGV4dC0+cHJldmlvdXNTaWJsaW5nKCk7IGlzPFRl
eHQ+KHByZXZpb3VzU2libGluZykpIHsKKyAgICAgICAgYXV0byBwcmV2aW91cyA9IG1ha2VSZWYo
ZG93bmNhc3Q8VGV4dD4oKnByZXZpb3VzU2libGluZykpOwogICAgICAgICBpbnNlcnRUZXh0SW50
b05vZGUoKnRleHQsIDAsIHByZXZpb3VzLT5kYXRhKCkpOwogCiAgICAgICAgIGlmIChwb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3IpCkBAIC0xNjgxLDggKzE2ODcsOCBAQCB2b2lkIFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjptZXJnZVRleHROb2Rlc0Fyb3VuZFBvc2l0aW9uKFBvc2l0aW9uJiBwb3Np
dGlvbiwgUAogCiAgICAgICAgIHJlbW92ZU5vZGUocHJldmlvdXMpOwogICAgIH0KLSAgICBpZiAo
aXM8VGV4dD4odGV4dC0+bmV4dFNpYmxpbmcoKSkpIHsKLSAgICAgICAgUmVmPFRleHQ+IG5leHQo
ZG93bmNhc3Q8VGV4dD4oKnRleHQtPm5leHRTaWJsaW5nKCkpKTsKKyAgICBpZiAoYXV0byogbmV4
dFNpYmxpbmcgPSB0ZXh0LT5uZXh0U2libGluZygpOyBpczxUZXh0PihuZXh0U2libGluZykpIHsK
KyAgICAgICAgYXV0byBuZXh0ID0gbWFrZVJlZihkb3duY2FzdDxUZXh0PigqbmV4dFNpYmxpbmcp
KTsKICAgICAgICAgdW5zaWduZWQgb3JpZ2luYWxMZW5ndGggPSB0ZXh0LT5sZW5ndGgoKTsKICAg
ICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKCp0ZXh0LCBvcmlnaW5hbExlbmd0aCwgbmV4dC0+ZGF0
YSgpKTsKIApAQCAtMTcwMywxNCArMTcwOSwxNCBAQCBzdGF0aWMgSFRNTEVsZW1lbnQqIHNpbmds
ZUNoaWxkTGlzdChIVE1MRWxlbWVudCYgZWxlbWVudCkKICAgICBpZiAoIWVsZW1lbnQuaGFzT25l
Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvJiBjaGlsZCA9ICpl
bGVtZW50LmZpcnN0Q2hpbGQoKTsKLSAgICByZXR1cm4gaXNMaXN0SFRNTEVsZW1lbnQoJmNoaWxk
KSA/ICZkb3duY2FzdDxIVE1MRWxlbWVudD4oY2hpbGQpIDogbnVsbHB0cjsKKyAgICBhdXRvIGNo
aWxkID0gbWFrZVJlZlB0cihlbGVtZW50LmZpcnN0Q2hpbGQoKSk7CisgICAgcmV0dXJuIGlzTGlz
dEhUTUxFbGVtZW50KGNoaWxkLmdldCgpKSA/ICZkb3duY2FzdDxIVE1MRWxlbWVudD4oKmNoaWxk
KSA6IG51bGxwdHI7CiB9CiAKIHN0YXRpYyBIVE1MRWxlbWVudCYgZGVlcGVzdFNpbmdsZUNoaWxk
TGlzdChIVE1MRWxlbWVudCYgdG9wTGV2ZWxMaXN0KQogewotICAgIGF1dG8qIGxpc3QgPSAmdG9w
TGV2ZWxMaXN0OwotICAgIHdoaWxlIChhdXRvKiBjaGlsZExpc3QgPSBzaW5nbGVDaGlsZExpc3Qo
Kmxpc3QpKQorICAgIGF1dG8gbGlzdCA9IG1ha2VSZWZQdHIodG9wTGV2ZWxMaXN0KTsKKyAgICB3
aGlsZSAoYXV0byBjaGlsZExpc3QgPSBzaW5nbGVDaGlsZExpc3QoKmxpc3QpKQogICAgICAgICBs
aXN0ID0gY2hpbGRMaXN0OwogICAgIHJldHVybiAqbGlzdDsKIH0KQEAgLTE3MjQsNyArMTczMCw3
IEBAIE5vZGUqIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjppbnNlcnRBc0xpc3RJdGVtcyhIVE1M
RWxlbWVudCYgcGFzc2VkTGlzdEVsZW1lbnQsCiAgICAgYm9vbCBpc1N0YXJ0ID0gaXNTdGFydE9m
UGFyYWdyYXBoKGluc2VydFBvcyk7CiAgICAgYm9vbCBpc0VuZCA9IGlzRW5kT2ZQYXJhZ3JhcGgo
aW5zZXJ0UG9zKTsKICAgICBib29sIGlzTWlkZGxlID0gIWlzU3RhcnQgJiYgIWlzRW5kOwotICAg
IE5vZGUqIGxhc3ROb2RlID0gaW5zZXJ0aW9uQmxvY2s7CisgICAgYXV0byBsYXN0Tm9kZSA9IG1h
a2VSZWZQdHIoaW5zZXJ0aW9uQmxvY2spOwogCiAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRs
ZSBvZiBhIGxpc3QgaXRlbSwgd2Ugc2hvdWxkIHNwbGl0IGl0IGludG8gdHdvIHNlcGFyYXRlCiAg
ICAgLy8gbGlzdCBpdGVtcyBhbmQgaW5zZXJ0IHRoZXNlIG5vZGVzIGJldHdlZW4gdGhlbS4KQEAg
LTE3NDksNyArMTc1NSw3IEBAIE5vZGUqIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjppbnNlcnRB
c0xpc3RJdGVtcyhIVE1MRWxlbWVudCYgcGFzc2VkTGlzdEVsZW1lbnQsCiAgICAgfQogICAgIGlm
ICgoaXNTdGFydCB8fCBpc01pZGRsZSkgJiYgbGFzdE5vZGUtPnByZXZpb3VzU2libGluZygpKQog
ICAgICAgICBsYXN0Tm9kZSA9IGxhc3ROb2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICByZXR1
cm4gbGFzdE5vZGU7CisgICAgcmV0dXJuIGxhc3ROb2RlLmdldCgpOwogfQogCiB2b2lkIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjp1cGRhdGVOb2Rlc0luc2VydGVkKE5vZGUgKm5vZGUpCkBAIC0x
Nzc4LDYgKzE3ODQsNyBAQCBib29sIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpwZXJmb3JtVHJp
dmlhbFJlcGxhY2UoY29uc3QgUmVwbGFjZW1lbnRGcmFnbWVudCYgZgogewogICAgIGlmICghaXM8
VGV4dD4oZnJhZ21lbnQuZmlyc3RDaGlsZCgpKSB8fCBmcmFnbWVudC5maXJzdENoaWxkKCkgIT0g
ZnJhZ21lbnQubGFzdENoaWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHRl
eHROb2RlID0gbWFrZVJlZihkb3duY2FzdDxUZXh0PigqZnJhZ21lbnQuZmlyc3RDaGlsZCgpKSk7
CiAKICAgICAvLyBGSVhNRTogV291bGQgYmUgbmljZSB0byBoYW5kbGUgc21hcnQgcmVwbGFjZSBp
biB0aGUgZmFzdCBwYXRoLgogICAgIGlmIChtX3NtYXJ0UmVwbGFjZSB8fCBmcmFnbWVudC5oYXNJ
bnRlcmNoYW5nZU5ld2xpbmVBdFN0YXJ0KCkgfHwgZnJhZ21lbnQuaGFzSW50ZXJjaGFuZ2VOZXds
aW5lQXRFbmQoKSkKQEAgLTE3ODgsMTEgKzE3OTUsMTAgQEAgYm9vbCBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6cGVyZm9ybVRyaXZpYWxSZXBsYWNlKGNvbnN0IFJlcGxhY2VtZW50RnJhZ21lbnQm
IGYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVmUHRyPE5vZGU+IG5vZGVBZnRlcklu
c2VydGlvblBvcyA9IGVuZGluZ1NlbGVjdGlvbigpLmVuZCgpLmRvd25zdHJlYW0oKS5hbmNob3JO
b2RlKCk7Ci0gICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0PigqZnJhZ21lbnQuZmly
c3RDaGlsZCgpKTsKICAgICAvLyBPdXIgZnJhZ21lbnQgY3JlYXRpb24gY29kZSBoYW5kbGVzIHRh
YnMsIHNwYWNlcywgYW5kIG5ld2xpbmVzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0
IHRob3NlIGhlcmUuCiAKICAgICBQb3NpdGlvbiBzdGFydCA9IGVuZGluZ1NlbGVjdGlvbigpLnN0
YXJ0KCk7Ci0gICAgUG9zaXRpb24gZW5kID0gcmVwbGFjZVNlbGVjdGVkVGV4dEluTm9kZSh0ZXh0
Tm9kZS5kYXRhKCkpOworICAgIFBvc2l0aW9uIGVuZCA9IHJlcGxhY2VTZWxlY3RlZFRleHRJbk5v
ZGUodGV4dE5vZGUtPmRhdGEoKSk7CiAgICAgaWYgKGVuZC5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCg==
</data>
<flag name="commit-queue"
          id="446272"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>