<?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>137641</bug_id>
          
          <creation_ts>2014-10-11 17:49:59 -0700</creation_ts>
          <short_desc>Use is&lt;&gt;() / downcast&lt;&gt;() for Table render objects</short_desc>
          <delta_ts>2014-10-13 11:21:17 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>137424</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1041173</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-11 17:49:59 -0700</bug_when>
    <thetext>Use is&lt;&gt;() / downcast&lt;&gt;() for Table render objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041174</commentid>
    <comment_count>1</comment_count>
      <attachid>239692</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-11 17:58:22 -0700</bug_when>
    <thetext>Created attachment 239692
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041175</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-11 17:59:23 -0700</bug_when>
    <thetext>Attachment 239692 did not pass style-queue:


ERROR: Source/WebCore/rendering/RenderTreeAsText.cpp:470:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/rendering/RenderTreeAsText.cpp:492:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 2 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041283</commentid>
    <comment_count>3</comment_count>
      <attachid>239692</attachid>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2014-10-13 08:04:52 -0700</bug_when>
    <thetext>Comment on attachment 239692
Patch

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

r=me with the two comments

&gt; Source/WebCore/rendering/AutoTableLayout.cpp:192
&gt; +            RenderBlock* renderBlock = table-&gt;containingBlock();

I believe containingBlock is better than renderBlock here if you want to change it from cb.

&gt; Source/WebCore/rendering/RenderTableCol.cpp:33
&gt; +#include &quot;RenderTableCaption.h&quot;

Is this include needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041294</commentid>
    <comment_count>4</comment_count>
      <attachid>239692</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-13 10:22:35 -0700</bug_when>
    <thetext>Comment on attachment 239692
Patch

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

&gt;&gt; Source/WebCore/rendering/AutoTableLayout.cpp:192
&gt;&gt; +            RenderBlock* renderBlock = table-&gt;containingBlock();
&gt; 
&gt; I believe containingBlock is better than renderBlock here if you want to change it from cb.

Sounds good.

&gt;&gt; Source/WebCore/rendering/RenderTableCol.cpp:33
&gt;&gt; +#include &quot;RenderTableCaption.h&quot;
&gt; 
&gt; Is this include needed?

Yes, see below.

&gt; Source/WebCore/rendering/RenderTableCol.cpp:174
&gt; +        if (is&lt;RenderTableCaption&gt;(*next))

The include is needed because of this check. RenderTableCaption type and its template specialization need to be defined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041295</commentid>
    <comment_count>5</comment_count>
      <attachid>239731</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-13 10:24:28 -0700</bug_when>
    <thetext>Created attachment 239731
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041296</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-13 10:27:24 -0700</bug_when>
    <thetext>Attachment 239731 did not pass style-queue:


ERROR: Source/WebCore/rendering/RenderTreeAsText.cpp:470:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/rendering/RenderTreeAsText.cpp:492:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 2 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041311</commentid>
    <comment_count>7</comment_count>
      <attachid>239731</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-13 11:21:12 -0700</bug_when>
    <thetext>Comment on attachment 239731
Patch

Clearing flags on attachment: 239731

Committed r174653: &lt;http://trac.webkit.org/changeset/174653&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041312</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-13 11:21:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239692</attachid>
            <date>2014-10-11 17:58:22 -0700</date>
            <delta_ts>2014-10-13 10:24:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137641-20141011175825.patch</filename>
            <type>text/plain</type>
            <size>73097</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NjM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2VjZDRjZjljZWQxYzU1
MDEyMGZjZDAwYTY5NGExYTZhMjgzM2Y3MC4uYjI1MWE0YjMzYmExMDJmMzBmMGY3NTkxYjU0Njhj
OGE0OTlmZGY3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDE0LTEwLTExICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25j
YXN0PD4oKSBmb3IgVGFibGUgcmVuZGVyIG9iamVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzY0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIHRh
YmxlLXJlbGF0ZWQgcmVuZGVyIG9iamVjdHMgYW5kIGNsZWFuCisgICAgICAgIHVwIHRoZSBzdXJy
b3VuZGluZyBjb2RlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdl
LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkOjphZGRDaGlsZHJlbik6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjp0YWJsZUVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjppc0RhdGFUYWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5VGFibGU6OmlzVGFibGVFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0
eSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmFkZENoaWxkcmVuKToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6cGFyZW50VGFibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6cm93SW5kZXhSYW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpjb2x1bW5JbmRleFJhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OnRpdGxlVUlFbGVt
ZW50KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW46OmhlYWRlck9i
amVjdCk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5vZGUpOgorICAg
ICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNob3Vs
ZEVtaXRUYWJCZWZvcmVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZEVtaXROZXdsaW5l
c0JlZm9yZUFuZEFmdGVyTm9kZSk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmNlbGxBYm92
ZSk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBt
YXRobWwvTWF0aE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYXRoTUxFbGVtZW50
OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBdXRvVGFibGVMYXlvdXQ6OnJlY2FsY0NvbHVtbik6Cisg
ICAgICAgIChXZWJDb3JlOjpzaG91bGRTY2FsZUNvbHVtbnMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93
Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQZXJjZW50
YWdlTG9naWNhbEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxheW91dE92
ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjphZGRDaGlsZCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6YWRkQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmxheW91dCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZTo6Zmlyc3RDb2x1bW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGU6OnJlY2FsY1NlY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpzZWN0
aW9uQWJvdmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnNlY3Rpb25CZWxvdyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Ym90dG9tU2VjdGlvbik6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2FwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNhcHRpb246OnRh
YmxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmg6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6Om5leHRDZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlQ2VsbDo6cHJldmlvdXNDZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlUm93OjpmaXJzdENlbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6Omxh
c3RDZWxsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDb2w6OnRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlQ29sOjplbmNsb3NpbmdDb2x1bW5Hcm91cCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZUNvbDo6bmV4dENvbHVtbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ29sLmg6CisgICAgICAgIE1ha2UgdXBkYXRlRnJvbUVsZW1lbnQoKSBwdWJsaWMgdG8gYWxs
b3cgdGhlIGNhbGxlcnMgdG8gdXNlIHRpZ2h0ZXIKKyAgICAgICAgdHlwaW5nIGFuZCBkZXZpdHVh
bGl6ZSB0aGUgY2FsbCBhcyB0aGUgY2xhc3MgaXMgZmluYWwuCisKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGFibGVSb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6
OmFkZENoaWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Zmlyc3RSb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpsYXN0Um93KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlUm93OjpuZXh0Um93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93
OjpwcmV2aW91c1Jvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50Q2VsbCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlVGV4dFJ1bik6CisgICAgICAg
IChXZWJDb3JlOjp3cml0ZVNpbXBsZUxpbmUpOgorCiAyMDE0LTEwLTExICBLd2FuZ0h5dWsgS2lt
ICA8aHl1a2kua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIEVuYWJsZSBXZWJQIHN1
cHBvcnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlBUklBR3JpZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlBUklBR3JpZC5jcHAKaW5kZXggZjgyYzcwZTQ3YjViNGNlYzI3MGZlMTZmZTBiYzc2ZWQz
ZTFiZTg1My4uMTFlMjFmMGUwZmY3OWQ5MmVjYWQ2ZjI5ZDExOWU1OGJjNDgxMmFhNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFH
cmlkLmNwcApAQCAtMTE3LDEyICsxMTcsMTEgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6
OmFkZENoaWxkcmVuKCkKICAgICBmb3IgKFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
ICAgICAgICAgYm9vbCBmb290ZXJTZWN0aW9uID0gZmFsc2U7CiAgICAgICAgIGlmIChSZW5kZXJP
YmplY3QqIGNoaWxkUmVuZGVyZXIgPSBjaGlsZC0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAg
aWYgKGNoaWxkUmVuZGVyZXItPmlzVGFibGVTZWN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoUmVuZGVyVGFibGVTZWN0aW9uKiBjaGlsZFNlY3Rpb24gPSB0b1JlbmRlclRhYmxlU2VjdGlv
bihjaGlsZFJlbmRlcmVyKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRTZWN0aW9u
ID09IGNoaWxkU2VjdGlvbi0+dGFibGUoKS0+Zm9vdGVyKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvb3RlclNlY3Rpb25zLmFwcGVuZChjaGlsZCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmb290ZXJTZWN0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGlzPFJlbmRlclRhYmxlU2VjdGlvbj4oKmNoaWxkUmVuZGVyZXIpKSB7CisgICAg
ICAgICAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uJiBjaGlsZFNlY3Rpb24gPSBkb3duY2FzdDxS
ZW5kZXJUYWJsZVNlY3Rpb24+KCpjaGlsZFJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBpZiAo
JmNoaWxkU2VjdGlvbiA9PSBjaGlsZFNlY3Rpb24udGFibGUoKS0+Zm9vdGVyKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9vdGVyU2VjdGlvbnMuYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgICAg
ICAgICAgICAgZm9vdGVyU2VjdGlvbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKaW5kZXggNzZkZjNjNjgyN2E4NDQ5NWFjOWZhZTJkZmMw
ZWFlYWUwMDAwNTEwZS4uMTFmZmQxNDYxMjhhYmYwODliYzM0MmJiYTczYWE5NmY4ZTk2Y2YzYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFi
bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlLmNwcApAQCAtOTIsMTYgKzkyLDE2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc0Fj
Y2Vzc2liaWxpdHlUYWJsZSgpIGNvbnN0CiAKIEhUTUxUYWJsZUVsZW1lbnQqIEFjY2Vzc2liaWxp
dHlUYWJsZTo6dGFibGVFbGVtZW50KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcmVuZGVyZXItPmlz
VGFibGUoKSkKKyAgICBpZiAoIWlzPFJlbmRlclRhYmxlPigqbV9yZW5kZXJlcikpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIAotICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9IHRvUmVuZGVy
VGFibGUobV9yZW5kZXJlcik7Ci0gICAgaWYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KHRhYmxlLT5l
bGVtZW50KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4odGFi
bGUtPmVsZW1lbnQoKSk7CisgICAgUmVuZGVyVGFibGUmIHRhYmxlID0gZG93bmNhc3Q8UmVuZGVy
VGFibGU+KCptX3JlbmRlcmVyKTsKKyAgICBpZiAoaXM8SFRNTFRhYmxlRWxlbWVudD4odGFibGUu
ZWxlbWVudCgpKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KHRh
YmxlLmVsZW1lbnQoKSk7CiAgICAgCiAgICAgLy8gSWYgdGhlIHRhYmxlIGhhcyBhIGRpc3BsYXk6
dGFibGUtcm93LWdyb3VwLCB0aGVuIHRoZSBSZW5kZXJUYWJsZSBkb2VzIG5vdCBoYXZlIGEgcG9p
bnRlciB0byBpdCdzIEhUTUxUYWJsZUVsZW1lbnQuCiAgICAgLy8gV2UgY2FuIGluc3RlYWQgZmlu
ZCBpdCBieSBhc2tpbmcgdGhlIGZpcnN0U2VjdGlvbiBmb3IgaXRzIHBhcmVudC4KLSAgICBSZW5k
ZXJUYWJsZVNlY3Rpb24qIGZpcnN0Qm9keSA9IHRhYmxlLT5maXJzdEJvZHkoKTsKKyAgICBSZW5k
ZXJUYWJsZVNlY3Rpb24qIGZpcnN0Qm9keSA9IHRhYmxlLmZpcnN0Qm9keSgpOwogICAgIGlmICgh
Zmlyc3RCb2R5IHx8ICFmaXJzdEJvZHktPmVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgCkBAIC0xMjcsMTYgKzEyNywxNCBAQCBib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6
aXNEYXRhVGFibGUoKSBjb25zdAogICAgIGlmIChub2RlKCkgJiYgbm9kZSgpLT5oYXNFZGl0YWJs
ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFtX3JlbmRlcmVyLT5p
c1RhYmxlKCkpCisgICAgaWYgKCFpczxSZW5kZXJUYWJsZT4oKm1fcmVuZGVyZXIpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBUaGlzIGVtcGxveXMgYSBoZXVyaXN0aWMgdG8gZGV0
ZXJtaW5lIGlmIHRoaXMgdGFibGUgc2hvdWxkIGFwcGVhci4KICAgICAvLyBPbmx5ICJkYXRhIiB0
YWJsZXMgc2hvdWxkIGJlIGV4cG9zZWQgYXMgdGFibGVzLgogICAgIC8vIFVuZm9ydHVuYXRlbHks
IHRoZXJlIGlzIG5vIGdvb2Qgd2F5IHRvIGRldGVybWluZSB0aGUgZGlmZmVyZW5jZQogICAgIC8v
IGJldHdlZW4gYSAibGF5b3V0IiB0YWJsZSBhbmQgYSAiZGF0YSIgdGFibGUuCi0gICAgUmVuZGVy
VGFibGUqIHRhYmxlID0gdG9SZW5kZXJUYWJsZShtX3JlbmRlcmVyKTsKLSAgICBIVE1MVGFibGVF
bGVtZW50KiB0YWJsZUVsZW1lbnQgPSB0aGlzLT50YWJsZUVsZW1lbnQoKTsKLSAgICBpZiAodGFi
bGVFbGVtZW50KSB7CisgICAgaWYgKEhUTUxUYWJsZUVsZW1lbnQqIHRhYmxlRWxlbWVudCA9IHRo
aXMtPnRhYmxlRWxlbWVudCgpKSB7CiAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgY2FwdGlvbiBl
bGVtZW50LCBzdW1tYXJ5LCBUSEVBRCwgb3IgVEZPT1Qgc2VjdGlvbiwgaXQncyBtb3N0IGNlcnRh
aW5seSBhIGRhdGEgdGFibGUuCiAgICAgICAgIGlmICghdGFibGVFbGVtZW50LT5zdW1tYXJ5KCku
aXNFbXB0eSgpIHx8IHRhYmxlRWxlbWVudC0+dEhlYWQoKSB8fCB0YWJsZUVsZW1lbnQtPnRGb290
KCkgfHwgdGFibGVFbGVtZW50LT5jYXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTE0NiwxNiArMTQ0LDE3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc0RhdGFUYWJs
ZSgpIGNvbnN0CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICAvLyBJZiB0aGVy
ZSdzIGEgY29sZ3JvdXAgb3IgY29sIGVsZW1lbnQsIGl0J3MgcHJvYmFibHkgYSBkYXRhIHRhYmxl
LgotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8RWxlbWVu
dD4oKnRhYmxlRWxlbWVudCkpIHsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IGNo
aWxkcmVuT2ZUeXBlPEhUTUxFbGVtZW50PigqdGFibGVFbGVtZW50KSkgewogICAgICAgICAgICAg
aWYgKGNoaWxkLmhhc1RhZ05hbWUoY29sVGFnKSB8fCBjaGlsZC5oYXNUYWdOYW1lKGNvbGdyb3Vw
VGFnKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KICAg
ICAKKyAgICBSZW5kZXJUYWJsZSYgdGFibGUgPSBkb3duY2FzdDxSZW5kZXJUYWJsZT4oKm1fcmVu
ZGVyZXIpOwogICAgIC8vIGdvIHRocm91Z2ggdGhlIGNlbGwncyBhbmQgY2hlY2sgZm9yIHRlbGwt
dGFsZSBzaWducyBvZiAiZGF0YSIgdGFibGUgc3RhdHVzCiAgICAgLy8gY2VsbHMgaGF2ZSBib3Jk
ZXJzLCBvciB1c2UgYXR0cmlidXRlcyBsaWtlIGhlYWRlcnMsIGFiYnIsIHNjb3BlIG9yIGF4aXMK
LSAgICB0YWJsZS0+cmVjYWxjU2VjdGlvbnNJZk5lZWRlZCgpOwotICAgIFJlbmRlclRhYmxlU2Vj
dGlvbiogZmlyc3RCb2R5ID0gdGFibGUtPmZpcnN0Qm9keSgpOworICAgIHRhYmxlLnJlY2FsY1Nl
Y3Rpb25zSWZOZWVkZWQoKTsKKyAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIGZpcnN0Qm9keSA9IHRh
YmxlLmZpcnN0Qm9keSgpOwogICAgIGlmICghZmlyc3RCb2R5KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCkBAIC0xNzEsNyArMTcwLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGU6Omlz
RGF0YVRhYmxlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgLy8gU3Rv
cmUgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHRhYmxlIHRvIGNoZWNrIGFnYWluc3QgY2Vs
bCdzIGJhY2tncm91bmQgY29sb3JzLgotICAgIGNvbnN0IFJlbmRlclN0eWxlJiB0YWJsZVN0eWxl
ID0gdGFibGUtPnN0eWxlKCk7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHRhYmxlU3R5bGUgPSB0
YWJsZS5zdHlsZSgpOwogICAgIENvbG9yIHRhYmxlQkdDb2xvciA9IHRhYmxlU3R5bGUudmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKICAgICAKICAgICAv
LyBjaGVjayBlbm91Z2ggb2YgdGhlIGNlbGxzIHRvIGZpbmQgaWYgdGhlIHRhYmxlIG1hdGNoZXMg
b3VyIGNyaXRlcmlhCkBAIC0yMDYsMTYgKzIwNSwxNiBAQCBib29sIEFjY2Vzc2liaWxpdHlUYWJs
ZTo6aXNEYXRhVGFibGUoKSBjb25zdAogICAgICAgICAgICAgaWYgKGNlbGwtPndpZHRoKCkgPCAx
IHx8IGNlbGwtPmhlaWdodCgpIDwgMSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgdmFsaWRDZWxsQ291bnQrKzsKKyAgICAgICAgICAgICsrdmFs
aWRDZWxsQ291bnQ7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJvb2wgaXNUSENlbGwgPSBj
ZWxsRWxlbWVudC0+aGFzVGFnTmFtZSh0aFRhZyk7CiAgICAgICAgICAgICAvLyBJZiB0aGUgZmly
c3Qgcm93IGlzIGNvbXByaXNlZCBvZiBhbGwgPHRoPiB0YWdzLCBhc3N1bWUgaXQgaXMgYSBkYXRh
IHRhYmxlLgogICAgICAgICAgICAgaWYgKCFyb3cgJiYgaXNUSENlbGwpCi0gICAgICAgICAgICAg
ICAgaGVhZGVyc0luRmlyc3RSb3dDb3VudCsrOworICAgICAgICAgICAgICAgICsraGVhZGVyc0lu
Rmlyc3RSb3dDb3VudDsKIAogICAgICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGNvbHVtbiBpcyBj
b21wcmlzZWQgb2YgYWxsIDx0aD4gdGFncywgYXNzdW1lIGl0IGlzIGEgZGF0YSB0YWJsZS4KICAg
ICAgICAgICAgIGlmICghY29sICYmIGlzVEhDZWxsKQotICAgICAgICAgICAgICAgIGhlYWRlcnNJ
bkZpcnN0Q29sdW1uQ291bnQrKzsKKyAgICAgICAgICAgICAgICArK2hlYWRlcnNJbkZpcnN0Q29s
dW1uQ291bnQ7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgdGhl
IGRldmVsb3BlciBleHBsaWNpdGx5IGFzc2lnbmVkIGEgImRhdGEiIHRhYmxlIGF0dHJpYnV0ZS4K
ICAgICAgICAgICAgIGlmIChpczxIVE1MVGFibGVDZWxsRWxlbWVudD4oKmNlbGxFbGVtZW50KSkg
ewpAQCAtMjMzLDI1ICsyMzIsMjUgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGU6OmlzRGF0YVRh
YmxlKCkgY29uc3QKICAgICAgICAgICAgIC8vIElmIGEgY2VsbCBoYXMgbWF0Y2hpbmcgYm9yZGVy
ZWQgc2lkZXMsIGNhbGwgaXQgYSAoZnVsbHkpIGJvcmRlcmVkIGNlbGwuCiAgICAgICAgICAgICBp
ZiAoKGNlbGwtPmJvcmRlclRvcCgpID4gMCAmJiBjZWxsLT5ib3JkZXJCb3R0b20oKSA+IDApCiAg
ICAgICAgICAgICAgICAgfHwgKGNlbGwtPmJvcmRlckxlZnQoKSA+IDAgJiYgY2VsbC0+Ym9yZGVy
UmlnaHQoKSA+IDApKQotICAgICAgICAgICAgICAgIGJvcmRlcmVkQ2VsbENvdW50Kys7CisgICAg
ICAgICAgICAgICAgKytib3JkZXJlZENlbGxDb3VudDsKIAogICAgICAgICAgICAgLy8gQWxzbyBr
ZWVwIHRyYWNrIG9mIGVhY2ggaW5kaXZpZHVhbCBib3JkZXIsIHNvIHdlIGNhbiBjYXRjaCB0YWJs
ZXMgd2hlcmUgbW9zdAogICAgICAgICAgICAgLy8gY2VsbHMgaGF2ZSBhIGJvdHRvbSBib3JkZXIs
IGZvciBleGFtcGxlLgogICAgICAgICAgICAgaWYgKGNlbGwtPmJvcmRlclRvcCgpID4gMCkKLSAg
ICAgICAgICAgICAgICBjZWxsc1dpdGhUb3BCb3JkZXIrKzsKKyAgICAgICAgICAgICAgICArK2Nl
bGxzV2l0aFRvcEJvcmRlcjsKICAgICAgICAgICAgIGlmIChjZWxsLT5ib3JkZXJCb3R0b20oKSA+
IDApCi0gICAgICAgICAgICAgICAgY2VsbHNXaXRoQm90dG9tQm9yZGVyKys7CisgICAgICAgICAg
ICAgICAgKytjZWxsc1dpdGhCb3R0b21Cb3JkZXI7CiAgICAgICAgICAgICBpZiAoY2VsbC0+Ym9y
ZGVyTGVmdCgpID4gMCkKLSAgICAgICAgICAgICAgICBjZWxsc1dpdGhMZWZ0Qm9yZGVyKys7Cisg
ICAgICAgICAgICAgICAgKytjZWxsc1dpdGhMZWZ0Qm9yZGVyOwogICAgICAgICAgICAgaWYgKGNl
bGwtPmJvcmRlclJpZ2h0KCkgPiAwKQotICAgICAgICAgICAgICAgIGNlbGxzV2l0aFJpZ2h0Qm9y
ZGVyKys7CisgICAgICAgICAgICAgICAgKytjZWxsc1dpdGhSaWdodEJvcmRlcjsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgLy8gSWYgdGhlIGNlbGwgaGFzIGEgZGlmZmVyZW50IGNvbG9yIGZy
b20gdGhlIHRhYmxlIGFuZCB0aGVyZSBpcyBjZWxsIHNwYWNpbmcsCiAgICAgICAgICAgICAvLyB0
aGVuIGl0IGlzIHByb2JhYmx5IGEgZGF0YSB0YWJsZSBjZWxsIChzcGFjaW5nIGFuZCBjb2xvcnMg
dGFrZSB0aGUgcGxhY2Ugb2YgYm9yZGVycykuCiAgICAgICAgICAgICBDb2xvciBjZWxsQ29sb3Ig
PSByZW5kZXJTdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
Q29sb3IpOwotICAgICAgICAgICAgaWYgKHRhYmxlLT5oQm9yZGVyU3BhY2luZygpID4gMCAmJiB0
YWJsZS0+dkJvcmRlclNwYWNpbmcoKSA+IDAKKyAgICAgICAgICAgIGlmICh0YWJsZS5oQm9yZGVy
U3BhY2luZygpID4gMCAmJiB0YWJsZS52Qm9yZGVyU3BhY2luZygpID4gMAogICAgICAgICAgICAg
ICAgICYmIHRhYmxlQkdDb2xvciAhPSBjZWxsQ29sb3IgJiYgY2VsbENvbG9yLmFscGhhKCkgIT0g
MSkKLSAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kRGlmZmVyZW5jZUNlbGxDb3VudCsrOworICAg
ICAgICAgICAgICAgICsrYmFja2dyb3VuZERpZmZlcmVuY2VDZWxsQ291bnQ7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIC8vIElmIHdlJ3ZlIGZvdW5kIDEwICJnb29kIiBjZWxscywgd2UgZG9u
J3QgbmVlZCB0byBrZWVwIHNlYXJjaGluZy4KICAgICAgICAgICAgIGlmIChib3JkZXJlZENlbGxD
b3VudCA+PSAxMCB8fCBiYWNrZ3JvdW5kRGlmZmVyZW5jZUNlbGxDb3VudCA+PSAxMCkKQEAgLTMy
Nyw3ICszMjYsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6aXNUYWJsZUV4cG9zYWJsZVRo
cm91Z2hBY2Nlc3NpYmlsaXR5KCkgY29uc3QKIAogICAgIC8vIEd0aysgQVRzIGV4cGVjdCBhbGwg
dGFibGVzIHRvIGJlIGV4cG9zZWQgYXMgdGFibGVzLgogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExB
VEZPUk0oRUZMKQotICAgIEVsZW1lbnQqIHRhYmxlTm9kZSA9IHRvUmVuZGVyVGFibGUobV9yZW5k
ZXJlciktPmVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiB0YWJsZU5vZGUgPSBkb3duY2FzdDxSZW5k
ZXJUYWJsZT4oKm1fcmVuZGVyZXIpLmVsZW1lbnQoKTsKICAgICByZXR1cm4gaXM8SFRNTFRhYmxl
RWxlbWVudD4odGFibGVOb2RlKTsKICNlbmRpZgogCkBAIC0zNTYsMTcgKzM1NSwxNyBAQCB2b2lk
IEFjY2Vzc2liaWxpdHlUYWJsZTo6YWRkQ2hpbGRyZW4oKQogICAgIEFTU0VSVCghbV9oYXZlQ2hp
bGRyZW4pOyAKICAgICAKICAgICBtX2hhdmVDaGlsZHJlbiA9IHRydWU7Ci0gICAgaWYgKCFtX3Jl
bmRlcmVyIHx8ICFtX3JlbmRlcmVyLT5pc1RhYmxlKCkpCisgICAgaWYgKCFpczxSZW5kZXJUYWJs
ZT4obV9yZW5kZXJlcikpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBSZW5kZXJUYWJsZSog
dGFibGUgPSB0b1JlbmRlclRhYmxlKG1fcmVuZGVyZXIpOworICAgIFJlbmRlclRhYmxlJiB0YWJs
ZSA9IGRvd25jYXN0PFJlbmRlclRhYmxlPigqbV9yZW5kZXJlcik7CiAgICAgLy8gR28gdGhyb3Vn
aCBhbGwgdGhlIGF2YWlsYWJsZSBzZWN0aW9ucyB0byBwdWxsIG91dCB0aGUgcm93cyBhbmQgYWRk
IHRoZW0gYXMgY2hpbGRyZW4uCi0gICAgdGFibGUtPnJlY2FsY1NlY3Rpb25zSWZOZWVkZWQoKTsK
KyAgICB0YWJsZS5yZWNhbGNTZWN0aW9uc0lmTmVlZGVkKCk7CiAgICAgCiAgICAgdW5zaWduZWQg
bWF4Q29sdW1uQ291bnQgPSAwOwotICAgIFJlbmRlclRhYmxlU2VjdGlvbiogZm9vdGVyID0gdGFi
bGUtPmZvb3RlcigpOworICAgIFJlbmRlclRhYmxlU2VjdGlvbiogZm9vdGVyID0gdGFibGUuZm9v
dGVyKCk7CiAgICAgCi0gICAgZm9yIChSZW5kZXJUYWJsZVNlY3Rpb24qIHRhYmxlU2VjdGlvbiA9
IHRhYmxlLT50b3BTZWN0aW9uKCk7IHRhYmxlU2VjdGlvbjsgdGFibGVTZWN0aW9uID0gdGFibGUt
PnNlY3Rpb25CZWxvdyh0YWJsZVNlY3Rpb24sIFNraXBFbXB0eVNlY3Rpb25zKSkgeworICAgIGZv
ciAoUmVuZGVyVGFibGVTZWN0aW9uKiB0YWJsZVNlY3Rpb24gPSB0YWJsZS50b3BTZWN0aW9uKCk7
IHRhYmxlU2VjdGlvbjsgdGFibGVTZWN0aW9uID0gdGFibGUuc2VjdGlvbkJlbG93KHRhYmxlU2Vj
dGlvbiwgU2tpcEVtcHR5U2VjdGlvbnMpKSB7CiAgICAgICAgIGlmICh0YWJsZVNlY3Rpb24gPT0g
Zm9vdGVyKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGFkZENoaWxkcmVuRnJvbVNl
Y3Rpb24odGFibGVTZWN0aW9uLCBtYXhDb2x1bW5Db3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcAppbmRleCA5
NDhjZDc3MjRmZDk5ZmI5M2YyZWU1ZDBjOWRiNDBhMDIyZmQ1NTQ5Li5kNTgzM2YwNzFlMjYzOTRj
MDQ2MGI1YTdjZDJmNTNmNmFhZjU4YmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHAKQEAgLTc1LDcgKzc1LDcg
QEAgYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdu
b3JlZCgpIGNvbnN0CiAKIEFjY2Vzc2liaWxpdHlUYWJsZSogQWNjZXNzaWJpbGl0eVRhYmxlQ2Vs
bDo6cGFyZW50VGFibGUoKSBjb25zdAogewotICAgIGlmICghbV9yZW5kZXJlciB8fCAhbV9yZW5k
ZXJlci0+aXNUYWJsZUNlbGwoKSkKKyAgICBpZiAoIWlzPFJlbmRlclRhYmxlQ2VsbD4obV9yZW5k
ZXJlcikpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gSWYgdGhlIGRvY3VtZW50
IG5vIGxvbmdlciBleGlzdHMsIHdlIG1pZ2h0IG5vdCBoYXZlIGFuIGF4T2JqZWN0Q2FjaGUuCkBA
IC04Nyw3ICs4Nyw3IEBAIEFjY2Vzc2liaWxpdHlUYWJsZSogQWNjZXNzaWJpbGl0eVRhYmxlQ2Vs
bDo6cGFyZW50VGFibGUoKSBjb25zdAogICAgIC8vIEJ5IHVzaW5nIG9ubHkgZ2V0KCkgaW1wbGll
cyB0aGF0IHRoZSBBWFRhYmxlIG11c3QgYmUgY3JlYXRlZCBiZWZvcmUgQVhUYWJsZUNlbGxzLiBU
aGlzIHNob3VsZAogICAgIC8vIGFsd2F5cyBiZSB0aGUgY2FzZSB3aGVuIEFUIGNsaWVudHMgYWNj
ZXNzIGEgdGFibGUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQyNjUyCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50VGFibGUgPSBheE9iamVj
dENhY2hlKCktPmdldCh0b1JlbmRlclRhYmxlQ2VsbChtX3JlbmRlcmVyKS0+dGFibGUoKSk7Cisg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50VGFibGUgPSBheE9iamVjdENhY2hlKCktPmdl
dChkb3duY2FzdDxSZW5kZXJUYWJsZUNlbGw+KCptX3JlbmRlcmVyKS50YWJsZSgpKTsKICAgICBp
ZiAoIXBhcmVudFRhYmxlIHx8ICFwYXJlbnRUYWJsZS0+aXNUYWJsZSgpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICByZXR1cm4gdG9BY2Nlc3NpYmlsaXR5VGFibGUocGFyZW50VGFibGUp
OwpAQCAtMjI0LDE2ICsyMjQsMTYgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpyb3dI
ZWFkZXJzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgaGVhZGVycykKICAgICAKIHZvaWQg
QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6cm93SW5kZXhSYW5nZShzdGQ6OnBhaXI8dW5zaWduZWQs
IHVuc2lnbmVkPiYgcm93UmFuZ2UpCiB7Ci0gICAgaWYgKCFtX3JlbmRlcmVyIHx8ICFtX3JlbmRl
cmVyLT5pc1RhYmxlQ2VsbCgpKQorICAgIGlmICghaXM8UmVuZGVyVGFibGVDZWxsPihtX3JlbmRl
cmVyKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFJlbmRlclRhYmxlQ2VsbCogcmVuZGVy
Q2VsbCA9IHRvUmVuZGVyVGFibGVDZWxsKG1fcmVuZGVyZXIpOwotICAgIHJvd1JhbmdlLmZpcnN0
ID0gcmVuZGVyQ2VsbC0+cm93SW5kZXgoKTsKLSAgICByb3dSYW5nZS5zZWNvbmQgPSByZW5kZXJD
ZWxsLT5yb3dTcGFuKCk7CisgICAgUmVuZGVyVGFibGVDZWxsJiByZW5kZXJDZWxsID0gZG93bmNh
c3Q8UmVuZGVyVGFibGVDZWxsPigqbV9yZW5kZXJlcik7CisgICAgcm93UmFuZ2UuZmlyc3QgPSBy
ZW5kZXJDZWxsLnJvd0luZGV4KCk7CisgICAgcm93UmFuZ2Uuc2Vjb25kID0gcmVuZGVyQ2VsbC5y
b3dTcGFuKCk7CiAgICAgCiAgICAgLy8gc2luY2Ugb3VyIHRhYmxlIG1pZ2h0IGhhdmUgbXVsdGlw
bGUgc2VjdGlvbnMsIHdlIGhhdmUgdG8gb2Zmc2V0IG91ciByb3cgYXBwcm9wcmlhdGVseQotICAg
IFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiA9IHJlbmRlckNlbGwtPnNlY3Rpb24oKTsKLSAg
ICBSZW5kZXJUYWJsZSogdGFibGUgPSByZW5kZXJDZWxsLT50YWJsZSgpOworICAgIFJlbmRlclRh
YmxlU2VjdGlvbiogc2VjdGlvbiA9IHJlbmRlckNlbGwuc2VjdGlvbigpOworICAgIFJlbmRlclRh
YmxlKiB0YWJsZSA9IHJlbmRlckNlbGwudGFibGUoKTsKICAgICBpZiAoIXRhYmxlIHx8ICFzZWN0
aW9uKQogICAgICAgICByZXR1cm47CiAKQEAgLTI1MywxMCArMjUzLDEwIEBAIHZvaWQgQWNjZXNz
aWJpbGl0eVRhYmxlQ2VsbDo6cm93SW5kZXhSYW5nZShzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2ln
bmVkPiYgcm93UmFuCiAgICAgCiB2b2lkIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmNvbHVtbklu
ZGV4UmFuZ2Uoc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4mIGNvbHVtblJhbmdlKQogewot
ICAgIGlmICghbV9yZW5kZXJlciB8fCAhbV9yZW5kZXJlci0+aXNUYWJsZUNlbGwoKSkKKyAgICBp
ZiAoIWlzPFJlbmRlclRhYmxlQ2VsbD4obV9yZW5kZXJlcikpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBjb25zdCBSZW5kZXJUYWJsZUNlbGwmIGNlbGwgPSAqdG9SZW5kZXJUYWJsZUNlbGwo
bV9yZW5kZXJlcik7CisgICAgY29uc3QgUmVuZGVyVGFibGVDZWxsJiBjZWxsID0gZG93bmNhc3Q8
UmVuZGVyVGFibGVDZWxsPigqbV9yZW5kZXJlcik7CiAgICAgY29sdW1uUmFuZ2UuZmlyc3QgPSBj
ZWxsLnRhYmxlKCktPmNvbFRvRWZmQ29sKGNlbGwuY29sKCkpOwogICAgIGNvbHVtblJhbmdlLnNl
Y29uZCA9IGNlbGwudGFibGUoKS0+Y29sVG9FZmZDb2woY2VsbC5jb2woKSArIGNlbGwuY29sU3Bh
bigpKSAtIGNvbHVtblJhbmdlLmZpcnN0OwogfQpAQCAtMjY2LDcgKzI2Niw3IEBAIEFjY2Vzc2li
aWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OnRpdGxlVUlFbGVtZW50KCkgY29u
c3QKICAgICAvLyBUcnkgdG8gZmluZCBpZiB0aGUgZmlyc3QgY2VsbCBpbiB0aGlzIHJvdyBpcyBh
IDx0aD4uIElmIGl0IGlzLAogICAgIC8vIHRoZW4gaXQgY2FuIGFjdCBhcyB0aGUgdGl0bGUgdWkg
ZWxlbWVudC4gKFRoaXMgaXMgb25seSBpbiB0aGUKICAgICAvLyBjYXNlIHdoZW4gdGhlIHRhYmxl
IGlzIG5vdCBhcHBlYXJpbmcgYXMgYW4gQVhUYWJsZS4pCi0gICAgaWYgKGlzVGFibGVDZWxsKCkg
fHwgIW1fcmVuZGVyZXIgfHwgIW1fcmVuZGVyZXItPmlzVGFibGVDZWxsKCkpCisgICAgaWYgKGlz
VGFibGVDZWxsKCkgfHwgIWlzPFJlbmRlclRhYmxlQ2VsbD4obV9yZW5kZXJlcikpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgLy8gVGFibGUgY2VsbHMgdGhhdCBhcmUgdGggY2Fubm90
IGhhdmUgdGl0bGUgdWkgZWxlbWVudHMsIHNpbmNlIGJ5IGRlZmluaXRpb24KQEAgLTI3NSwyMSAr
Mjc1LDIxIEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OnRp
dGxlVUlFbGVtZW50KCkgY29uc3QKICAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKHRo
VGFnKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgUmVuZGVyVGFibGVDZWxs
KiByZW5kZXJDZWxsID0gdG9SZW5kZXJUYWJsZUNlbGwobV9yZW5kZXJlcik7CisgICAgUmVuZGVy
VGFibGVDZWxsJiByZW5kZXJDZWxsID0gZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqbV9yZW5k
ZXJlcik7CiAKICAgICAvLyBJZiB0aGlzIGNlbGwgaXMgaW4gdGhlIGZpcnN0IGNvbHVtbiwgdGhl
cmUgaXMgbm8gbmVlZCB0byBjb250aW51ZS4KLSAgICBpbnQgY29sID0gcmVuZGVyQ2VsbC0+Y29s
KCk7CisgICAgaW50IGNvbCA9IHJlbmRlckNlbGwuY29sKCk7CiAgICAgaWYgKCFjb2wpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaW50IHJvdyA9IHJlbmRlckNlbGwtPnJvd0luZGV4
KCk7CisgICAgaW50IHJvdyA9IHJlbmRlckNlbGwucm93SW5kZXgoKTsKIAotICAgIFJlbmRlclRh
YmxlU2VjdGlvbiogc2VjdGlvbiA9IHJlbmRlckNlbGwtPnNlY3Rpb24oKTsKKyAgICBSZW5kZXJU
YWJsZVNlY3Rpb24qIHNlY3Rpb24gPSByZW5kZXJDZWxsLnNlY3Rpb24oKTsKICAgICBpZiAoIXNl
Y3Rpb24pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIFJlbmRlclRhYmxlQ2Vs
bCogaGVhZGVyQ2VsbCA9IHNlY3Rpb24tPnByaW1hcnlDZWxsQXQocm93LCAwKTsKLSAgICBpZiAo
IWhlYWRlckNlbGwgfHwgaGVhZGVyQ2VsbCA9PSByZW5kZXJDZWxsKQorICAgIGlmICghaGVhZGVy
Q2VsbCB8fCBoZWFkZXJDZWxsID09ICZyZW5kZXJDZWxsKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIGlmICghaGVhZGVyQ2VsbC0+ZWxlbWVudCgpIHx8ICFoZWFkZXJDZWxsLT5lbGVt
ZW50KCktPmhhc1RhZ05hbWUodGhUYWcpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwCmluZGV4IDc4YjZkNWZj
N2I1YjlhNzEzNjkzYmViMzYyOWI4YWU0ZTA4NGQ3NTUuLjBiMzExNmQ3YWE0YTkzZDAxNTg4YmVk
NmExN2FkMjNkNThlZGE5YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5jcHAKQEAgLTg5LDIzICs4OSwxNyBA
QCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW46OmhlYWRlck9i
amVjdCgpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGlmICghcmVuZGVy
ZXItPmlzVGFibGUoKSkKKyAgICBpZiAoIWlzPFJlbmRlclRhYmxlPigqcmVuZGVyZXIpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBSZW5kZXJUYWJsZSogdGFibGUgPSB0b1Jl
bmRlclRhYmxlKHJlbmRlcmVyKTsKLSAgICAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFk
ZXJPYmplY3QgPSBudWxscHRyOwotICAgIAotICAgIC8vIHRyeSB0aGUgPHRoZWFkPiBzZWN0aW9u
IGZpcnN0LiB0aGlzIGRvZXNuJ3QgcmVxdWlyZSB0aCB0YWdzCi0gICAgaGVhZGVyT2JqZWN0ID0g
aGVhZGVyT2JqZWN0Rm9yU2VjdGlvbih0YWJsZS0+aGVhZGVyKCksIGZhbHNlKTsKKyAgICBSZW5k
ZXJUYWJsZSYgdGFibGUgPSBkb3duY2FzdDxSZW5kZXJUYWJsZT4oKnJlbmRlcmVyKTsKIAotICAg
IGlmIChoZWFkZXJPYmplY3QpCisgICAgLy8gdHJ5IHRoZSA8dGhlYWQ+IHNlY3Rpb24gZmlyc3Qu
IHRoaXMgZG9lc24ndCByZXF1aXJlIHRoIHRhZ3MKKyAgICBpZiAoYXV0byogaGVhZGVyT2JqZWN0
ID0gaGVhZGVyT2JqZWN0Rm9yU2VjdGlvbih0YWJsZS5oZWFkZXIoKSwgZmFsc2UpKQogICAgICAg
ICByZXR1cm4gaGVhZGVyT2JqZWN0OwogICAgIAogICAgIC8vIG5vdyB0cnkgZm9yIDx0aD4gdGFn
cyBpbiB0aGUgZmlyc3QgYm9keQotICAgIGhlYWRlck9iamVjdCA9IGhlYWRlck9iamVjdEZvclNl
Y3Rpb24odGFibGUtPmZpcnN0Qm9keSgpLCB0cnVlKTsKLQotICAgIHJldHVybiBoZWFkZXJPYmpl
Y3Q7CisgICAgcmV0dXJuIGhlYWRlck9iamVjdEZvclNlY3Rpb24odGFibGUuZmlyc3RCb2R5KCks
IHRydWUpOwogfQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5VGFibGVDb2x1
bW46OmhlYWRlck9iamVjdEZvclNlY3Rpb24oUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uLCBi
b29sIHRoVGFnUmVxdWlyZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCBlZWNhOTQzOTY1NGE0MjRkODA1MjNmN2VjMTZkNTI4
MGYzYzVjNDJmLi5hMTA3ZTY5NmU0MTVhODg4YjA0Njk2Y2FlNWQ1ZDRhOTNlYTIzMWNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
QEAgLTM4Niw4ICszODYsOCBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5v
ZGUoUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBTaG91bGRBc3N1bWVDb250ZQogICAgICAgICAKICAg
ICAgICAgLy8gTWFrZSBzdXJlIGVtcHR5IGNlbGwgaGFzIHNvbWUgaGVpZ2h0LCBpZiBhIHBsYWNl
aG9sZGVyIGNhbiBiZSBpbnNlcnRlZC4KICAgICAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICAgICAgUmVuZGVyT2JqZWN0ICpyID0gbm9k
ZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKHIgJiYgci0+aXNUYWJsZUNlbGwoKSAmJiB0b1Jl
bmRlclRhYmxlQ2VsbChyKS0+Y29udGVudEhlaWdodCgpIDw9IDApIHsKKyAgICAgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgICAgIGlmIChpczxSZW5k
ZXJUYWJsZUNlbGw+KHJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJUYWJsZUNlbGw+KCpyZW5k
ZXJlcikuY29udGVudEhlaWdodCgpIDw9IDApIHsKICAgICAgICAgICAgIFBvc2l0aW9uIGZpcnN0
RWRpdGFibGVQb3NpdGlvbiA9IGZpcnN0RWRpdGFibGVQb3NpdGlvbkluTm9kZShub2RlLmdldCgp
KTsKICAgICAgICAgICAgIGlmIChmaXJzdEVkaXRhYmxlUG9zaXRpb24uaXNOb3ROdWxsKCkpCiAg
ICAgICAgICAgICAgICAgaW5zZXJ0QmxvY2tQbGFjZWhvbGRlcihmaXJzdEVkaXRhYmxlUG9zaXRp
b24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IDZiZTk3MjNj
YmRkMWE1NTY3Y2FhNDA0Yjg5ZGRhOGY4ZjJlMjJiNTYuLjljMGQ2NDY4ZWQ0OWFiMWIzZjI1OGMx
OWY2MWZmNGU4ZDRiNmQxNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5j
cHAKQEAgLTc4NSw3ICs3ODUsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRFbWl0VGFiQmVmb3JlTm9k
ZShOb2RlJiBub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gV2FudCBh
IHRhYiBiZWZvcmUgZXZlcnkgY2VsbCBvdGhlciB0aGFuIHRoZSBmaXJzdCBvbmUuCi0gICAgUmVu
ZGVyVGFibGVDZWxsJiBjZWxsID0gdG9SZW5kZXJUYWJsZUNlbGwoKnJlbmRlcmVyKTsKKyAgICBS
ZW5kZXJUYWJsZUNlbGwmIGNlbGwgPSBkb3duY2FzdDxSZW5kZXJUYWJsZUNlbGw+KCpyZW5kZXJl
cik7CiAgICAgUmVuZGVyVGFibGUqIHRhYmxlID0gY2VsbC50YWJsZSgpOwogICAgIHJldHVybiB0
YWJsZSAmJiAodGFibGUtPmNlbGxCZWZvcmUoJmNlbGwpIHx8IHRhYmxlLT5jZWxsQWJvdmUoJmNl
bGwpKTsKIH0KQEAgLTg0MCwxNCArODQwLDE0IEBAIHN0YXRpYyBib29sIHNob3VsZEVtaXROZXds
aW5lc0JlZm9yZUFuZEFmdGVyTm9kZShOb2RlJiBub2RlKQogICAgIAogICAgIC8vIE5lZWQgdG8g
bWFrZSBhbiBleGNlcHRpb24gZm9yIHRhYmxlIHJvdyBlbGVtZW50cywgYmVjYXVzZSB0aGV5IGFy
ZSBuZWl0aGVyCiAgICAgLy8gImlubGluZSIgb3IgIlJlbmRlckJsb2NrIiwgYnV0IHdlIHdhbnQg
bmV3bGluZXMgZm9yIHRoZW0uCi0gICAgaWYgKHJlbmRlcmVyLT5pc1RhYmxlUm93KCkpIHsKLSAg
ICAgICAgUmVuZGVyVGFibGUqIHRhYmxlID0gdG9SZW5kZXJUYWJsZVJvdygqcmVuZGVyZXIpLnRh
YmxlKCk7CisgICAgaWYgKGlzPFJlbmRlclRhYmxlUm93PigqcmVuZGVyZXIpKSB7CisgICAgICAg
IFJlbmRlclRhYmxlKiB0YWJsZSA9IGRvd25jYXN0PFJlbmRlclRhYmxlUm93PigqcmVuZGVyZXIp
LnRhYmxlKCk7CiAgICAgICAgIGlmICh0YWJsZSAmJiAhdGFibGUtPmlzSW5saW5lKCkpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuICFyZW5kZXJlci0+
aXNJbmxpbmUoKQotICAgICAgICAmJiByZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpCisgICAgICAg
ICYmIGlzPFJlbmRlckJsb2NrPigqcmVuZGVyZXIpCiAgICAgICAgICYmICFyZW5kZXJlci0+aXNG
bG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpCiAgICAgICAgICYmICFyZW5kZXJlci0+aXNC
b2R5KCkKICAgICAgICAgJiYgIXJlbmRlcmVyLT5pc1J1YnlUZXh0KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuY3BwCmluZGV4IDFmOTk3ODkzOGI2NmM0NThm
YWQyNTUyMDRmNmM2MDBjMzZmYjI2NDcuLjAwZjQ3Y2QyZDk4MTEwMjBlNDQzNzdkOGExMTQ0NDU4
YWQzNmNiMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQu
Y3BwCkBAIC0xMDUsMTEgKzEwNSwxMSBAQCB2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50Ojpjb2xs
ZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTgogdm9pZCBI
VE1MVGFibGVDZWxsRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSByb3dz
cGFuQXR0cikgewotICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1RhYmxl
Q2VsbCgpKQotICAgICAgICAgICAgdG9SZW5kZXJUYWJsZUNlbGwocmVuZGVyZXIoKSktPmNvbFNw
YW5PclJvd1NwYW5DaGFuZ2VkKCk7CisgICAgICAgIGlmIChpczxSZW5kZXJUYWJsZUNlbGw+KHJl
bmRlcmVyKCkpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqcmVuZGVy
ZXIoKSkuY29sU3Bhbk9yUm93U3BhbkNoYW5nZWQoKTsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0g
Y29sc3BhbkF0dHIpIHsKLSAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNU
YWJsZUNlbGwoKSkKLSAgICAgICAgICAgIHRvUmVuZGVyVGFibGVDZWxsKHJlbmRlcmVyKCkpLT5j
b2xTcGFuT3JSb3dTcGFuQ2hhbmdlZCgpOworICAgICAgICBpZiAoaXM8UmVuZGVyVGFibGVDZWxs
PihyZW5kZXJlcigpKSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclRhYmxlQ2VsbD4oKnJl
bmRlcmVyKCkpLmNvbFNwYW5PclJvd1NwYW5DaGFuZ2VkKCk7CiAgICAgfSBlbHNlCiAgICAgICAg
IEhUTUxUYWJsZVBhcnRFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CkBA
IC0xNjUsMTIgKzE2NSwxMiBAQCB2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50OjphZGRTdWJyZXNv
dXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8VVJMPiYgdXJscykgYwogCiBIVE1MVGFibGVD
ZWxsRWxlbWVudCogSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmNlbGxBYm92ZSgpIGNvbnN0CiB7Ci0g
ICAgYXV0byBjZWxsUmVuZGVyZXIgPSByZW5kZXJlcigpOwotICAgIGlmICghY2VsbFJlbmRlcmVy
IHx8ICFjZWxsUmVuZGVyZXItPmlzVGFibGVDZWxsKCkpCisgICAgYXV0byogY2VsbFJlbmRlcmVy
ID0gcmVuZGVyZXIoKTsKKyAgICBpZiAoIWlzPFJlbmRlclRhYmxlQ2VsbD4oY2VsbFJlbmRlcmVy
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIHRhYmxlQ2VsbFJlbmRlcmVy
ID0gdG9SZW5kZXJUYWJsZUNlbGwoY2VsbFJlbmRlcmVyKTsKLSAgICBhdXRvIGNlbGxBYm92ZVJl
bmRlcmVyID0gdGFibGVDZWxsUmVuZGVyZXItPnRhYmxlKCktPmNlbGxBYm92ZSh0YWJsZUNlbGxS
ZW5kZXJlcik7CisgICAgYXV0byYgdGFibGVDZWxsUmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJU
YWJsZUNlbGw+KCpjZWxsUmVuZGVyZXIpOworICAgIGF1dG8qIGNlbGxBYm92ZVJlbmRlcmVyID0g
dGFibGVDZWxsUmVuZGVyZXIudGFibGUoKS0+Y2VsbEFib3ZlKCZ0YWJsZUNlbGxSZW5kZXJlcik7
CiAgICAgaWYgKCFjZWxsQWJvdmVSZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuY3BwCmluZGV4IDAxNjg5
OWY3ZjUxZTQxMjgwYTMxNDRlYTJkNmRjZDI0YjEyZDYzY2UuLjlmYWM3YTgyYTUzOGM3YTAxMGM3
NzRlYzQ4OGQ5MTAyMDM4NjQ4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRhYmxlQ29sRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVD
b2xFbGVtZW50LmNwcApAQCAtNjcsMTUgKzY3LDE1IEBAIHZvaWQgSFRNTFRhYmxlQ29sRWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWlj
CiAgICAgaWYgKG5hbWUgPT0gc3BhbkF0dHIpIHsKICAgICAgICAgaW50IG5ld1NwYW4gPSB2YWx1
ZS50b0ludCgpOwogICAgICAgICBtX3NwYW4gPSBuZXdTcGFuID8gbmV3U3BhbiA6IDE7Ci0gICAg
ICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzUmVuZGVyVGFibGVDb2woKSkKLSAg
ICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21FbGVtZW50KCk7CisgICAgICAgIGlmIChp
czxSZW5kZXJUYWJsZUNvbD4ocmVuZGVyZXIoKSkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5k
ZXJUYWJsZUNvbD4oKnJlbmRlcmVyKCkpLnVwZGF0ZUZyb21FbGVtZW50KCk7CiAgICAgfSBlbHNl
IGlmIChuYW1lID09IHdpZHRoQXR0cikgewogICAgICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNSZW5kZXJUYWJs
ZUNvbCgpKSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVyVGFibGVDb2wqIGNvbCA9IHRvUmVuZGVy
VGFibGVDb2wocmVuZGVyZXIoKSk7CisgICAgICAgICAgICBpZiAoaXM8UmVuZGVyVGFibGVDb2w+
KHJlbmRlcmVyKCkpKSB7CisgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVDb2wmIGNvbCA9IGRv
d25jYXN0PFJlbmRlclRhYmxlQ29sPigqcmVuZGVyZXIoKSk7CiAgICAgICAgICAgICAgICAgaW50
IG5ld1dpZHRoID0gd2lkdGgoKS50b0ludCgpOwotICAgICAgICAgICAgICAgIGlmIChuZXdXaWR0
aCAhPSBjb2wtPndpZHRoKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbC0+c2V0TmVlZHNMYXlv
dXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgICAgICAgICAgICAgaWYgKG5ld1dpZHRoICE9
IGNvbC53aWR0aCgpKQorICAgICAgICAgICAgICAgICAgICBjb2wuc2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmNwcAppbmRleCAwM2ExOTA2ODBmMzdh
ZmY4MDM4Y2YwMTMzNTZjMjNkMjg0MDgyM2Q0Li4yMjllMGVhMTY5OGQ1Yzg3ZjEwMzU0MDBiYWYy
MGE3MzExNjRjODMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuY3BwCkBA
IC0yMTIsMTEgKzIxMiwxMSBAQCBpbnQgTWF0aE1MRWxlbWVudDo6cm93U3BhbigpIGNvbnN0CiB2
b2lkIE1hdGhNTEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5hbWUgPT0gcm93c3Bh
bkF0dHIpIHsKLSAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNUYWJsZUNl
bGwoKSAmJiBoYXNUYWdOYW1lKG10ZFRhZykpCi0gICAgICAgICAgICB0b1JlbmRlclRhYmxlQ2Vs
bChyZW5kZXJlcigpKS0+Y29sU3Bhbk9yUm93U3BhbkNoYW5nZWQoKTsKKyAgICAgICAgaWYgKGlz
PFJlbmRlclRhYmxlQ2VsbD4ocmVuZGVyZXIoKSkgJiYgaGFzVGFnTmFtZShtdGRUYWcpKQorICAg
ICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqcmVuZGVyZXIoKSkuY29sU3Bhbk9y
Um93U3BhbkNoYW5nZWQoKTsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gY29sdW1uc3BhbkF0dHIp
IHsKLSAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNUYWJsZUNlbGwoKSAm
JiBoYXNUYWdOYW1lKG10ZFRhZykpCi0gICAgICAgICAgICB0b1JlbmRlclRhYmxlQ2VsbChyZW5k
ZXJlcigpKS0+Y29sU3Bhbk9yUm93U3BhbkNoYW5nZWQoKTsKKyAgICAgICAgaWYgKGlzPFJlbmRl
clRhYmxlQ2VsbD4ocmVuZGVyZXIoKSkgJiYgaGFzVGFnTmFtZShtdGRUYWcpKQorICAgICAgICAg
ICAgZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPihyZW5kZXJlcigpKS0+Y29sU3Bhbk9yUm93U3Bh
bkNoYW5nZWQoKTsKICAgICB9IGVsc2UKICAgICAgICAgU3R5bGVkRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUobmFtZSwgdmFsdWUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0F1dG9UYWJsZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1Rh
YmxlTGF5b3V0LmNwcAppbmRleCA2OWFjYjk4NzVhN2Y0YjRlYjJkNjQyMDQyZDQ3YzBmYTgxNmY1
MTgyLi4xYzdlMDdhM2FiMGU3MzBhZjk0MzljNmQ5OWNmMWI0MzJlNGUxYTZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcApAQCAtMjYsNiArMjYsNyBA
QAogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ29s
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVTZWN0aW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDIwICs0NSwyMCBAQCB2b2lkIEF1
dG9UYWJsZUxheW91dDo6cmVjYWxjQ29sdW1uKHVuc2lnbmVkIGVmZkNvbCkKIHsKICAgICBMYXlv
dXQmIGNvbHVtbkxheW91dCA9IG1fbGF5b3V0U3RydWN0W2VmZkNvbF07CiAKLSAgICBSZW5kZXJU
YWJsZUNlbGwqIGZpeGVkQ29udHJpYnV0b3IgPSAwOwotICAgIFJlbmRlclRhYmxlQ2VsbCogbWF4
Q29udHJpYnV0b3IgPSAwOworICAgIFJlbmRlclRhYmxlQ2VsbCogZml4ZWRDb250cmlidXRvciA9
IG51bGxwdHI7CisgICAgUmVuZGVyVGFibGVDZWxsKiBtYXhDb250cmlidXRvciA9IG51bGxwdHI7
CiAKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBtX3RhYmxlLT5maXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGls
ZC0+aXNSZW5kZXJUYWJsZUNvbCgpKXsKKyAgICAgICAgaWYgKGlzPFJlbmRlclRhYmxlQ29sPigq
Y2hpbGQpKSB7CiAgICAgICAgICAgICAvLyBSZW5kZXJUYWJsZUNvbHMgZG9uJ3QgaGF2ZSB0aGUg
Y29uY2VwdCBvZiBwcmVmZXJyZWQgbG9naWNhbCB3aWR0aCwgYnV0IHdlIG5lZWQgdG8gY2xlYXIg
dGhlaXIgZGlydHkgYml0cwogICAgICAgICAgICAgLy8gc28gdGhhdCBpZiB3ZSBjYWxsIHNldFBy
ZWZlcnJlZFdpZHRoc0RpcnR5KHRydWUpIG9uIGEgY29sIG9yIG9uZSBvZiBpdHMgZGVzY2VuZGFu
dHMsIHdlJ2xsIG1hcmsgaXQncwogICAgICAgICAgICAgLy8gYW5jZXN0b3JzIGFzIGRpcnR5Lgot
ICAgICAgICAgICAgdG9SZW5kZXJUYWJsZUNvbChjaGlsZCktPmNsZWFyUHJlZmVycmVkTG9naWNh
bFdpZHRoc0RpcnR5Qml0cygpOwotICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5pc1RhYmxlU2Vj
dGlvbigpKSB7Ci0gICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSB0b1Jl
bmRlclRhYmxlU2VjdGlvbihjaGlsZCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBudW1Sb3dzID0g
c2VjdGlvbi0+bnVtUm93cygpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bVJvd3M7IGkrKykgewotICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbjo6Q2Vs
bFN0cnVjdCBjdXJyZW50ID0gc2VjdGlvbi0+Y2VsbEF0KGksIGVmZkNvbCk7CisgICAgICAgICAg
ICBkb3duY2FzdDxSZW5kZXJUYWJsZUNvbD4oKmNoaWxkKS5jbGVhclByZWZlcnJlZExvZ2ljYWxX
aWR0aHNEaXJ0eUJpdHMoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJUYWJsZVNlY3Rp
b24+KCpjaGlsZCkpIHsKKyAgICAgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiYgc2VjdGlvbiA9
IGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4oKmNoaWxkKTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIG51bVJvd3MgPSBzZWN0aW9uLm51bVJvd3MoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1Sb3dzOyArK2kpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJUYWJs
ZVNlY3Rpb246OkNlbGxTdHJ1Y3QgY3VycmVudCA9IHNlY3Rpb24uY2VsbEF0KGksIGVmZkNvbCk7
CiAgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gY3VycmVudC5wcmltYXJ5
Q2VsbCgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Lmlu
Q29sU3BhbiB8fCAhY2VsbCkKQEAgLTEyMCw3ICsxMjEsNyBAQCB2b2lkIEF1dG9UYWJsZUxheW91
dDo6cmVjYWxjQ29sdW1uKHVuc2lnbmVkIGVmZkNvbCkKICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZWZmQ29sIHx8IHNlY3Rpb24tPnByaW1h
cnlDZWxsQXQoaSwgZWZmQ29sIC0gMSkgIT0gY2VsbCkgeworICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIWVmZkNvbCB8fCBzZWN0aW9uLnByaW1hcnlDZWxsQXQoaSwgZWZmQ29sIC0gMSkgIT0g
Y2VsbCkgewogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHNwYW5uaW5nIGNlbGwgb3JpZ2lu
YXRlcyBpbiB0aGlzIGNvbHVtbi4gSW5zZXJ0IHRoZSBjZWxsIGludG8gc3Bhbm5pbmcgY2VsbHMg
bGlzdC4KICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0U3BhbkNlbGwoY2VsbCk7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtMTMyLDcgKzEzMyw3IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpyZWNh
bGNDb2x1bW4odW5zaWduZWQgZWZmQ29sKQogICAgIGlmIChjb2x1bW5MYXlvdXQubG9naWNhbFdp
ZHRoLmlzRml4ZWQoKSkgewogICAgICAgICBpZiAobV90YWJsZS0+ZG9jdW1lbnQoKS5pblF1aXJr
c01vZGUoKSAmJiBjb2x1bW5MYXlvdXQubWF4TG9naWNhbFdpZHRoID4gY29sdW1uTGF5b3V0Lmxv
Z2ljYWxXaWR0aC52YWx1ZSgpICYmIGZpeGVkQ29udHJpYnV0b3IgIT0gbWF4Q29udHJpYnV0b3Ip
IHsKICAgICAgICAgICAgIGNvbHVtbkxheW91dC5sb2dpY2FsV2lkdGggPSBMZW5ndGgoKTsKLSAg
ICAgICAgICAgIGZpeGVkQ29udHJpYnV0b3IgPSAwOworICAgICAgICAgICAgZml4ZWRDb250cmli
dXRvciA9IG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE4OCwyMyArMTg5LDIzIEBA
IHN0YXRpYyBib29sIHNob3VsZFNjYWxlQ29sdW1ucyhSZW5kZXJUYWJsZSogdGFibGUpCiAgICAg
d2hpbGUgKHRhYmxlKSB7CiAgICAgICAgIExlbmd0aCB0dyA9IHRhYmxlLT5zdHlsZSgpLndpZHRo
KCk7CiAgICAgICAgIGlmICgodHcuaXNBdXRvKCkgfHwgdHcuaXNQZXJjZW50KCkpICYmICF0YWJs
ZS0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJsb2NrKiBj
YiA9IHRhYmxlLT5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIHdoaWxlIChjYiAmJiAh
Y2ItPmlzUmVuZGVyVmlldygpICYmICFjYi0+aXNUYWJsZUNlbGwoKSAmJgotICAgICAgICAgICAg
ICAgIGNiLT5zdHlsZSgpLndpZHRoKCkuaXNBdXRvKCkgJiYgIWNiLT5pc091dE9mRmxvd1Bvc2l0
aW9uZWQoKSkKLSAgICAgICAgICAgICAgICBjYiA9IGNiLT5jb250YWluaW5nQmxvY2soKTsKLQot
ICAgICAgICAgICAgdGFibGUgPSAwOwotICAgICAgICAgICAgaWYgKGNiICYmIGNiLT5pc1RhYmxl
Q2VsbCgpICYmCi0gICAgICAgICAgICAgICAgKGNiLT5zdHlsZSgpLndpZHRoKCkuaXNBdXRvKCkg
fHwgY2ItPnN0eWxlKCkud2lkdGgoKS5pc1BlcmNlbnQoKSkpIHsKLSAgICAgICAgICAgICAgICBS
ZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSB0b1JlbmRlclRhYmxlQ2VsbChjYik7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNlbGwtPmNvbFNwYW4oKSA+IDEgfHwgY2VsbC0+dGFibGUoKS0+c3R5bGUoKS53
aWR0aCgpLmlzQXV0bygpKQorICAgICAgICAgICAgUmVuZGVyQmxvY2sqIHJlbmRlckJsb2NrID0g
dGFibGUtPmNvbnRhaW5pbmdCbG9jaygpOworICAgICAgICAgICAgd2hpbGUgKHJlbmRlckJsb2Nr
ICYmICFpczxSZW5kZXJWaWV3PigqcmVuZGVyQmxvY2spICYmICFpczxSZW5kZXJUYWJsZUNlbGw+
KCpyZW5kZXJCbG9jaykKKyAgICAgICAgICAgICAgICAmJiByZW5kZXJCbG9jay0+c3R5bGUoKS53
aWR0aCgpLmlzQXV0bygpICYmICFyZW5kZXJCbG9jay0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkp
CisgICAgICAgICAgICAgICAgcmVuZGVyQmxvY2sgPSByZW5kZXJCbG9jay0+Y29udGFpbmluZ0Js
b2NrKCk7CisKKyAgICAgICAgICAgIHRhYmxlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChp
czxSZW5kZXJUYWJsZUNlbGw+KHJlbmRlckJsb2NrKQorICAgICAgICAgICAgICAgICYmIChyZW5k
ZXJCbG9jay0+c3R5bGUoKS53aWR0aCgpLmlzQXV0bygpIHx8IHJlbmRlckJsb2NrLT5zdHlsZSgp
LndpZHRoKCkuaXNQZXJjZW50KCkpKSB7CisgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxs
JiBjZWxsID0gZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqcmVuZGVyQmxvY2spOworICAgICAg
ICAgICAgICAgIGlmIChjZWxsLmNvbFNwYW4oKSA+IDEgfHwgY2VsbC50YWJsZSgpLT5zdHlsZSgp
LndpZHRoKCkuaXNBdXRvKCkpCiAgICAgICAgICAgICAgICAgICAgIHNjYWxlID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB0YWJsZSA9IGNlbGwtPnRh
YmxlKCk7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlID0gY2VsbC50YWJsZSgpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRhYmxlID0gMDsK
KyAgICAgICAgICAgIHRhYmxlID0gbnVsbHB0cjsKICAgICB9CiAgICAgcmV0dXJuIHNjYWxlOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAppbmRleCBk
Y2NkNjhkNmJhZjY2NDQyMjYyMWEzMTAwODZiNzA1NGE5MDc0ZmQ5Li5mMGVlYjAxYmZlMzg3NGQ1
YjU3ODJiNjhkOTM4ZGJmYzdjMjRmYmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMzY4LDggKzM2OCw4IEBAIHZvaWQgUmVuZGVyQmxvY2tG
bG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2Fs
V2lkdGgsCiAgICAgICAgICAgICBtaW5Mb2dpY2FsV2lkdGggPSAwOwogICAgIH0KIAotICAgIGlm
IChpc1RhYmxlQ2VsbCgpKSB7Ci0gICAgICAgIExlbmd0aCB0YWJsZUNlbGxXaWR0aCA9IHRvUmVu
ZGVyVGFibGVDZWxsKHRoaXMpLT5zdHlsZU9yQ29sTG9naWNhbFdpZHRoKCk7CisgICAgaWYgKGlz
PFJlbmRlclRhYmxlQ2VsbD4oKnRoaXMpKSB7CisgICAgICAgIExlbmd0aCB0YWJsZUNlbGxXaWR0
aCA9IGRvd25jYXN0PFJlbmRlclRhYmxlQ2VsbD4oKnRoaXMpLnN0eWxlT3JDb2xMb2dpY2FsV2lk
dGgoKTsKICAgICAgICAgaWYgKHRhYmxlQ2VsbFdpZHRoLmlzRml4ZWQoKSAmJiB0YWJsZUNlbGxX
aWR0aC52YWx1ZSgpID4gMCkKICAgICAgICAgICAgIG1heExvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4
KG1pbkxvZ2ljYWxXaWR0aCwgYWRqdXN0Q29udGVudEJveExvZ2ljYWxXaWR0aEZvckJveFNpemlu
Zyh0YWJsZUNlbGxXaWR0aC52YWx1ZSgpKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAppbmRleCBkNmIzMTQwN2U4MThkMjViZWMwYjZiNTdkNGMxZDYxMDYyYmNj
MDFmLi4wNWNjZDNhN2JhODJhODlkNWZmZjIxNGJkNDBhMmM5ZTc1YWJiNjMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtMjgxMiw3ICsyODEyLDcgQEAgTGF5b3V0
VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodChjb25zdCBMZW5n
dGgmIGhlaWdodCkgY29uc3QKICAgICBlbHNlIGlmIChoYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9j
a0xvZ2ljYWxIZWlnaHQoKSkKICAgICAgICAgYXZhaWxhYmxlSGVpZ2h0ID0gb3ZlcnJpZGVDb250
YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCgpOwogI2VuZGlmCi0gICAgZWxzZSBpZiAo
Y2ItPmlzVGFibGVDZWxsKCkpIHsKKyAgICBlbHNlIGlmIChpczxSZW5kZXJUYWJsZUNlbGw+KCpj
YikpIHsKICAgICAgICAgaWYgKCFza2lwcGVkQXV0b0hlaWdodENvbnRhaW5pbmdCbG9jaykgewog
ICAgICAgICAgICAgLy8gVGFibGUgY2VsbHMgdmlvbGF0ZSB3aGF0IHRoZSBDU1Mgc3BlYyBzYXlz
IHRvIGRvIHdpdGggaGVpZ2h0cy4gQmFzaWNhbGx5IHdlCiAgICAgICAgICAgICAvLyBkb24ndCBj
YXJlIGlmIHRoZSBjZWxsIHNwZWNpZmllZCBhIGhlaWdodCBvciBub3QuIFdlIGp1c3QgYWx3YXlz
IG1ha2Ugb3Vyc2VsdmVzCkBAIC0yODI1LDggKzI4MjUsOCBAQCBMYXlvdXRVbml0IFJlbmRlckJv
eDo6Y29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0KGNvbnN0IExlbmd0aCYgaGVpZ2h0KSBj
b25zdAogICAgICAgICAgICAgICAgIC8vIG5vIHNpemUgYW5kIGFsbG93IHRoZSBmbGV4aW5nIG9m
IHRoZSB0YWJsZSBvciB0aGUgY2VsbCB0byBpdHMgc3BlY2lmaWVkIGhlaWdodCB0byBjYXVzZSB1
cwogICAgICAgICAgICAgICAgIC8vIHRvIGdyb3cgdG8gZmlsbCB0aGUgc3BhY2UuIFRoaXMgY291
bGQgZW5kIHVwIGJlaW5nIHdyb25nIGluIHNvbWUgY2FzZXMsIGJ1dCBpdCBpcwogICAgICAgICAg
ICAgICAgIC8vIHByZWZlcmFibGUgdG8gdGhlIGFsdGVybmF0aXZlIChzaXppbmcgaW50cmluc2lj
YWxseSBhbmQgbWFraW5nIHRoZSByb3cgZW5kIHVwIHRvbyBiaWcpLgotICAgICAgICAgICAgICAg
IFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IHRvUmVuZGVyVGFibGVDZWxsKGNiKTsKLSAgICAgICAg
ICAgICAgICBpZiAoc2Nyb2xsc092ZXJmbG93WSgpICYmICghY2VsbC0+c3R5bGUoKS5sb2dpY2Fs
SGVpZ2h0KCkuaXNBdXRvKCkgfHwgIWNlbGwtPnRhYmxlKCktPnN0eWxlKCkubG9naWNhbEhlaWdo
dCgpLmlzQXV0bygpKSkKKyAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwmIGNlbGwgPSBk
b3duY2FzdDxSZW5kZXJUYWJsZUNlbGw+KCpjYik7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9s
bHNPdmVyZmxvd1koKSAmJiAoIWNlbGwuc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkg
fHwgIWNlbGwudGFibGUoKS0+c3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAg
ICAgICAgICAgICB9CkBAIC00NzQwLDE4ICs0NzQwLDE4IEBAIGJvb2wgUmVuZGVyQm94OjpoYXNS
ZWxhdGl2ZUxvZ2ljYWxIZWlnaHQoKSBjb25zdAogICAgICAgICAgICAgfHwgc3R5bGUoKS5sb2dp
Y2FsTWF4SGVpZ2h0KCkuaXNQZXJjZW50KCk7CiB9CiAKLXN0YXRpYyB2b2lkIG1hcmtCb3hGb3JS
ZWxheW91dEFmdGVyU3BsaXQoUmVuZGVyQm94KiBib3gpCitzdGF0aWMgdm9pZCBtYXJrQm94Rm9y
UmVsYXlvdXRBZnRlclNwbGl0KFJlbmRlckJveCYgYm94KQogewogICAgIC8vIEZJWE1FOiBUaGUg
dGFibGUgY29kZSBzaG91bGQgaGFuZGxlIHRoYXQgYXV0b21hdGljYWxseS4gSWYgbm90LAogICAg
IC8vIHdlIHNob3VsZCBmaXggaXQgYW5kIHJlbW92ZSB0aGUgdGFibGUgcGFydCBjaGVja3MuCi0g
ICAgaWYgKGJveC0+aXNUYWJsZSgpKSB7CisgICAgaWYgKGlzPFJlbmRlclRhYmxlPihib3gpKSB7
CiAgICAgICAgIC8vIEJlY2F1c2Ugd2UgbWF5IGhhdmUgYWRkZWQgc29tZSBzZWN0aW9ucyB3aXRo
IGFscmVhZHkgY29tcHV0ZWQgY29sdW1uIHN0cnVjdHVyZXMsIHdlIG5lZWQgdG8KICAgICAgICAg
Ly8gc3luYyB0aGUgdGFibGUgc3RydWN0dXJlIHdpdGggdGhlbSBub3cuIFRoaXMgYXZvaWRzIGNy
YXNoZXMgd2hlbiBhZGRpbmcgbmV3IGNlbGxzIHRvIHRoZSB0YWJsZS4KLSAgICAgICAgdG9SZW5k
ZXJUYWJsZShib3gpLT5mb3JjZVNlY3Rpb25zUmVjYWxjKCk7Ci0gICAgfSBlbHNlIGlmIChib3gt
PmlzVGFibGVTZWN0aW9uKCkpCi0gICAgICAgIHRvUmVuZGVyVGFibGVTZWN0aW9uKGJveCktPnNl
dE5lZWRzQ2VsbFJlY2FsYygpOworICAgICAgICBkb3duY2FzdDxSZW5kZXJUYWJsZT4oYm94KS5m
b3JjZVNlY3Rpb25zUmVjYWxjKCk7CisgICAgfSBlbHNlIGlmIChpczxSZW5kZXJUYWJsZVNlY3Rp
b24+KGJveCkpCisgICAgICAgIGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4oYm94KS5zZXRO
ZWVkc0NlbGxSZWNhbGMoKTsKIAotICAgIGJveC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhz
UmVjYWxjKCk7CisgICAgYm94LnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwog
fQogCiBSZW5kZXJPYmplY3QqIFJlbmRlckJveDo6c3BsaXRBbm9ueW1vdXNCb3hlc0Fyb3VuZENo
aWxkKFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCkBAIC00NzcxLDEyICs0NzcxLDEyIEBAIFJl
bmRlck9iamVjdCogUmVuZGVyQm94OjpzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQoUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsCiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGludmFsaWRh
dGUgdGhlIHxwYXJlbnRCb3h8IGJlZm9yZSBpbnNlcnRpbmcgdGhlIG5ldyBub2RlCiAgICAgICAg
ICAgICAvLyBzbyB0aGF0IHRoZSB0YWJsZSByZXBhaW50aW5nIGxvZ2ljIGtub3dzIHRoZSBzdHJ1
Y3R1cmUgaXMgZGlydHkuCiAgICAgICAgICAgICAvLyBTZWUgZm9yIGV4YW1wbGUgUmVuZGVyVGFi
bGVDZWxsOmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50LgotICAgICAgICAgICAgbWFya0Jv
eEZvclJlbGF5b3V0QWZ0ZXJTcGxpdChwYXJlbnRCb3gpOworICAgICAgICAgICAgbWFya0JveEZv
clJlbGF5b3V0QWZ0ZXJTcGxpdCgqcGFyZW50Qm94KTsKICAgICAgICAgICAgIHBhcmVudEJveC0+
aW5zZXJ0Q2hpbGRJbnRlcm5hbChwb3N0Qm94LCBib3hUb1NwbGl0LT5uZXh0U2libGluZygpLCBO
b3RpZnlDaGlsZHJlbik7CiAgICAgICAgICAgICBib3hUb1NwbGl0LT5tb3ZlQ2hpbGRyZW5Ubyhw
b3N0Qm94LCBiZWZvcmVDaGlsZCwgMCwgdHJ1ZSk7CiAKLSAgICAgICAgICAgIG1hcmtCb3hGb3JS
ZWxheW91dEFmdGVyU3BsaXQoYm94VG9TcGxpdCk7Ci0gICAgICAgICAgICBtYXJrQm94Rm9yUmVs
YXlvdXRBZnRlclNwbGl0KHBvc3RCb3gpOworICAgICAgICAgICAgbWFya0JveEZvclJlbGF5b3V0
QWZ0ZXJTcGxpdCgqYm94VG9TcGxpdCk7CisgICAgICAgICAgICBtYXJrQm94Rm9yUmVsYXlvdXRB
ZnRlclNwbGl0KCpwb3N0Qm94KTsKIAogICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSBwb3N0Qm94
OwogICAgICAgICB9IGVsc2UKQEAgLTQ3ODQsNyArNDc4NCw3IEBAIFJlbmRlck9iamVjdCogUmVu
ZGVyQm94OjpzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQoUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsCiAgICAgfQogCiAgICAgaWYgKGRpZFNwbGl0UGFyZW50QW5vbnltb3VzQm94ZXMpCi0g
ICAgICAgIG1hcmtCb3hGb3JSZWxheW91dEFmdGVyU3BsaXQodGhpcyk7CisgICAgICAgIG1hcmtC
b3hGb3JSZWxheW91dEFmdGVyU3BsaXQoKnRoaXMpOwogCiAgICAgQVNTRVJUKGJlZm9yZUNoaWxk
LT5wYXJlbnQoKSA9PSB0aGlzKTsKICAgICByZXR1cm4gYmVmb3JlQ2hpbGQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXggMTMwOTIzZTIyZTMxYmIxYjc2
OGUzZGIxNTgwMTU1YWY3NzY4YzRmYS4uZmJlYzA0YTBlZDVjODQwN2ZiOTFjNDdjMzFkMmU4MTc1
NTFhOWYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcApA
QCAtNDY4LDI0ICs0NjgsMjQgQEAgdm9pZCBSZW5kZXJFbGVtZW50OjphZGRDaGlsZChSZW5kZXJP
YmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewogICAgIGJvb2wg
bmVlZHNUYWJsZSA9IGZhbHNlOwogCi0gICAgaWYgKG5ld0NoaWxkLT5pc1JlbmRlclRhYmxlQ29s
KCkpIHsKLSAgICAgICAgUmVuZGVyVGFibGVDb2wqIG5ld1RhYmxlQ29sdW1uID0gdG9SZW5kZXJU
YWJsZUNvbChuZXdDaGlsZCk7Ci0gICAgICAgIGJvb2wgaXNDb2x1bW5JbkNvbHVtbkdyb3VwID0g
bmV3VGFibGVDb2x1bW4tPmlzVGFibGVDb2x1bW4oKSAmJiBpc1JlbmRlclRhYmxlQ29sKCk7Ci0g
ICAgICAgIG5lZWRzVGFibGUgPSAhaXNUYWJsZSgpICYmICFpc0NvbHVtbkluQ29sdW1uR3JvdXA7
Ci0gICAgfSBlbHNlIGlmIChuZXdDaGlsZC0+aXNUYWJsZUNhcHRpb24oKSkKLSAgICAgICAgbmVl
ZHNUYWJsZSA9ICFpc1RhYmxlKCk7Ci0gICAgZWxzZSBpZiAobmV3Q2hpbGQtPmlzVGFibGVTZWN0
aW9uKCkpCi0gICAgICAgIG5lZWRzVGFibGUgPSAhaXNUYWJsZSgpOwotICAgIGVsc2UgaWYgKG5l
d0NoaWxkLT5pc1RhYmxlUm93KCkpCi0gICAgICAgIG5lZWRzVGFibGUgPSAhaXNUYWJsZVNlY3Rp
b24oKTsKLSAgICBlbHNlIGlmIChuZXdDaGlsZC0+aXNUYWJsZUNlbGwoKSkKLSAgICAgICAgbmVl
ZHNUYWJsZSA9ICFpc1RhYmxlUm93KCk7CisgICAgaWYgKGlzPFJlbmRlclRhYmxlQ29sPigqbmV3
Q2hpbGQpKSB7CisgICAgICAgIFJlbmRlclRhYmxlQ29sJiBuZXdUYWJsZUNvbHVtbiA9IGRvd25j
YXN0PFJlbmRlclRhYmxlQ29sPigqbmV3Q2hpbGQpOworICAgICAgICBib29sIGlzQ29sdW1uSW5D
b2x1bW5Hcm91cCA9IG5ld1RhYmxlQ29sdW1uLmlzVGFibGVDb2x1bW4oKSAmJiBpczxSZW5kZXJU
YWJsZUNvbD4oKnRoaXMpOworICAgICAgICBuZWVkc1RhYmxlID0gIWlzPFJlbmRlclRhYmxlPigq
dGhpcykgJiYgIWlzQ29sdW1uSW5Db2x1bW5Hcm91cDsKKyAgICB9IGVsc2UgaWYgKGlzPFJlbmRl
clRhYmxlQ2FwdGlvbj4oKm5ld0NoaWxkKSkKKyAgICAgICAgbmVlZHNUYWJsZSA9ICFpczxSZW5k
ZXJUYWJsZT4oKnRoaXMpOworICAgIGVsc2UgaWYgKGlzPFJlbmRlclRhYmxlU2VjdGlvbj4oKm5l
d0NoaWxkKSkKKyAgICAgICAgbmVlZHNUYWJsZSA9ICFpczxSZW5kZXJUYWJsZT4oKnRoaXMpOwor
ICAgIGVsc2UgaWYgKGlzPFJlbmRlclRhYmxlUm93PigqbmV3Q2hpbGQpKQorICAgICAgICBuZWVk
c1RhYmxlID0gIWlzPFJlbmRlclRhYmxlU2VjdGlvbj4oKnRoaXMpOworICAgIGVsc2UgaWYgKGlz
PFJlbmRlclRhYmxlQ2VsbD4oKm5ld0NoaWxkKSkKKyAgICAgICAgbmVlZHNUYWJsZSA9ICFpczxS
ZW5kZXJUYWJsZVJvdz4oKnRoaXMpOwogCiAgICAgaWYgKG5lZWRzVGFibGUpIHsKICAgICAgICAg
UmVuZGVyVGFibGUqIHRhYmxlOwogICAgICAgICBSZW5kZXJPYmplY3QqIGFmdGVyQ2hpbGQgPSBi
ZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSA6IG1fbGFzdENoaWxk
OwotICAgICAgICBpZiAoYWZ0ZXJDaGlsZCAmJiBhZnRlckNoaWxkLT5pc0Fub255bW91cygpICYm
IGFmdGVyQ2hpbGQtPmlzVGFibGUoKSAmJiAhYWZ0ZXJDaGlsZC0+aXNCZWZvcmVDb250ZW50KCkp
Ci0gICAgICAgICAgICB0YWJsZSA9IHRvUmVuZGVyVGFibGUoYWZ0ZXJDaGlsZCk7CisgICAgICAg
IGlmIChhZnRlckNoaWxkICYmIGFmdGVyQ2hpbGQtPmlzQW5vbnltb3VzKCkgJiYgaXM8UmVuZGVy
VGFibGU+KCphZnRlckNoaWxkKSAmJiAhYWZ0ZXJDaGlsZC0+aXNCZWZvcmVDb250ZW50KCkpCisg
ICAgICAgICAgICB0YWJsZSA9IGRvd25jYXN0PFJlbmRlclRhYmxlPihhZnRlckNoaWxkKTsKICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICB0YWJsZSA9IFJlbmRlclRhYmxlOjpjcmVhdGVBbm9u
eW1vdXNXaXRoUGFyZW50UmVuZGVyZXIodGhpcyk7CiAgICAgICAgICAgICBhZGRDaGlsZCh0YWJs
ZSwgYmVmb3JlQ2hpbGQpOwpAQCAtNDk0LDcgKzQ5NCw3IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6
YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCkKICAgICB9IGVsc2UKICAgICAgICAgaW5zZXJ0Q2hpbGRJbnRlcm5hbChuZXdDaGlsZCwgYmVm
b3JlQ2hpbGQsIE5vdGlmeUNoaWxkcmVuKTsKIAotICAgIGlmIChpczxSZW5kZXJUZXh0PihuZXdD
aGlsZCkpCisgICAgaWYgKGlzPFJlbmRlclRleHQ+KCpuZXdDaGlsZCkpCiAgICAgICAgIGRvd25j
YXN0PFJlbmRlclRleHQ+KCpuZXdDaGlsZCkuc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNl
RXF1YWwsIG51bGxwdHIpOwogCiAgICAgLy8gU1ZHIGNyZWF0ZXMgcmVuZGVyZXJzIGZvciA8ZyBk
aXNwbGF5PSJub25lIj4sIGFzIFNWRyByZXF1aXJlcyBjaGlsZHJlbiBvZiBoaWRkZW4KQEAgLTUw
Niw3ICs1MDYsNyBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OmFkZENoaWxkKFJlbmRlck9iamVjdCog
bmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiAgICAgLy8gVG8gYXZvaWQgdGhl
IHByb2JsZW0gYWxsdG9nZXRoZXIsIGRldGVjdCBlYXJseSBpZiB3ZSdyZSBpbnNpZGUgYSBoaWRk
ZW4gU1ZHIHN1YnRyZWUKICAgICAvLyBhbmQgc3RvcCBjcmVhdGluZyBsYXllcnMgYXQgYWxsIGZv
ciB0aGVzZSBjYXNlcyAtIHRoZXkncmUgbm90IHVzZWQgYW55d2F5cy4KICAgICBpZiAobmV3Q2hp
bGQtPmhhc0xheWVyKCkgJiYgIWxheWVyQ3JlYXRpb25BbGxvd2VkRm9yU3VidHJlZSgpKQotICAg
ICAgICB0b1JlbmRlckxheWVyTW9kZWxPYmplY3QobmV3Q2hpbGQpLT5sYXllcigpLT5yZW1vdmVP
bmx5VGhpc0xheWVyKCk7CisgICAgICAgIGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+
KCpuZXdDaGlsZCkubGF5ZXIoKS0+cmVtb3ZlT25seVRoaXNMYXllcigpOwogCiAgICAgU1ZHUmVu
ZGVyU3VwcG9ydDo6Y2hpbGRBZGRlZCgqdGhpcywgKm5ld0NoaWxkKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGJkODZhZWFhM2ZjNjdhNGMwODhjZDdh
ZjM3M2VkZTYxYzhhMmZiZjguLjQ0ZjI0MmZiNGI3NjljZDMzNTRiNDBkMTM5NjZlZGJjYWQ2ZTgz
MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtNTYyMiw4
ICs1NjIyLDggQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6bG9jYWxCb3VuZGluZ0JveChDYWxj
dWxhdGVMYXllckJvdW5kc0ZsYWdzIGZsYWdzKSBjb25zdAogICAgIExheW91dFJlY3QgcmVzdWx0
OwogICAgIGlmIChyZW5kZXJlcigpLmlzSW5saW5lKCkgJiYgcmVuZGVyZXIoKS5pc1JlbmRlcklu
bGluZSgpKQogICAgICAgICByZXN1bHQgPSB0b1JlbmRlcklubGluZShyZW5kZXJlcigpKS5saW5l
c1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goKTsKLSAgICBlbHNlIGlmIChyZW5kZXJlcigpLmlz
VGFibGVSb3coKSkgewotICAgICAgICBSZW5kZXJUYWJsZVJvdyYgdGFibGVSb3cgPSB0b1JlbmRl
clRhYmxlUm93KHJlbmRlcmVyKCkpOworICAgIGVsc2UgaWYgKGlzPFJlbmRlclRhYmxlUm93Pihy
ZW5kZXJlcigpKSkgeworICAgICAgICBSZW5kZXJUYWJsZVJvdyYgdGFibGVSb3cgPSBkb3duY2Fz
dDxSZW5kZXJUYWJsZVJvdz4ocmVuZGVyZXIoKSk7CiAgICAgICAgIC8vIE91ciBib3VuZGluZyBi
b3ggaXMganVzdCB0aGUgdW5pb24gb2YgYWxsIG9mIG91ciBjZWxscycgYm9yZGVyL292ZXJmbG93
IHJlY3RzLgogICAgICAgICBmb3IgKFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IHRhYmxlUm93LmZp
cnN0Q2VsbCgpOyBjZWxsOyBjZWxsID0gY2VsbC0+bmV4dENlbGwoKSkgewogICAgICAgICAgICAg
TGF5b3V0UmVjdCBiYm94ID0gY2VsbC0+Ym9yZGVyQm94UmVjdCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKaW5kZXggZDExZWU2Yzg4ZTk4NjdjM2Y0ZWZjODU4N2Zi
MGE3OTdmY2VlN2VlNS4uZjgyOTNhOWZlYjdkYWFlOGE2ZTUwYTBiMTBhOTU5NDNjMDliNDgxYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCkBAIC0xMzksMjggKzEz
OSwyOCBAQCB2b2lkIFJlbmRlclRhYmxlOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewogICAgIGJvb2wgd3JhcEluQW5vbnltb3VzU2Vj
dGlvbiA9ICFjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCk7CiAKLSAgICBpZiAoY2hpbGQt
PmlzVGFibGVDYXB0aW9uKCkpCisgICAgaWYgKGlzPFJlbmRlclRhYmxlQ2FwdGlvbj4oKmNoaWxk
KSkKICAgICAgICAgd3JhcEluQW5vbnltb3VzU2VjdGlvbiA9IGZhbHNlOwotICAgIGVsc2UgaWYg
KGNoaWxkLT5pc1JlbmRlclRhYmxlQ29sKCkpIHsKKyAgICBlbHNlIGlmIChpczxSZW5kZXJUYWJs
ZUNvbD4oKmNoaWxkKSkgewogICAgICAgICBtX2hhc0NvbEVsZW1lbnRzID0gdHJ1ZTsKICAgICAg
ICAgd3JhcEluQW5vbnltb3VzU2VjdGlvbiA9IGZhbHNlOwotICAgIH0gZWxzZSBpZiAoY2hpbGQt
PmlzVGFibGVTZWN0aW9uKCkpIHsKKyAgICB9IGVsc2UgaWYgKGlzPFJlbmRlclRhYmxlU2VjdGlv
bj4oKmNoaWxkKSkgewogICAgICAgICBzd2l0Y2ggKGNoaWxkLT5zdHlsZSgpLmRpc3BsYXkoKSkg
ewogICAgICAgICAgICAgY2FzZSBUQUJMRV9IRUFERVJfR1JPVVA6CiAgICAgICAgICAgICAgICAg
cmVzZXRTZWN0aW9uUG9pbnRlcklmTm90QmVmb3JlKG1faGVhZCwgYmVmb3JlQ2hpbGQpOwogICAg
ICAgICAgICAgICAgIGlmICghbV9oZWFkKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faGVhZCA9
IHRvUmVuZGVyVGFibGVTZWN0aW9uKGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgbV9oZWFk
ID0gZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPihjaGlsZCk7CiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcmVzZXRTZWN0aW9uUG9pbnRlcklmTm90QmVm
b3JlKG1fZmlyc3RCb2R5LCBiZWZvcmVDaGlsZCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICgh
bV9maXJzdEJvZHkpIAotICAgICAgICAgICAgICAgICAgICAgICAgbV9maXJzdEJvZHkgPSB0b1Jl
bmRlclRhYmxlU2VjdGlvbihjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ZpcnN0
Qm9keSA9IGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4oY2hpbGQpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB3cmFwSW5Bbm9ueW1vdXNTZWN0aW9uID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFRBQkxFX0ZPT1RFUl9HUk9V
UDoKICAgICAgICAgICAgICAgICByZXNldFNlY3Rpb25Qb2ludGVySWZOb3RCZWZvcmUobV9mb290
LCBiZWZvcmVDaGlsZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2Zvb3QpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9mb290ID0gdG9SZW5kZXJUYWJsZVNlY3Rpb24oY2hpbGQpOworICAgICAg
ICAgICAgICAgICAgICBtX2Zvb3QgPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGNoaWxk
KTsKICAgICAgICAgICAgICAgICAgICAgd3JhcEluQW5vbnltb3VzU2VjdGlvbiA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0xNjgsMTgg
KzE2OCwxOCBAQCB2b2lkIFJlbmRlclRhYmxlOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxk
LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogICAgICAgICAgICAgY2FzZSBUQUJMRV9ST1df
R1JPVVA6CiAgICAgICAgICAgICAgICAgcmVzZXRTZWN0aW9uUG9pbnRlcklmTm90QmVmb3JlKG1f
Zmlyc3RCb2R5LCBiZWZvcmVDaGlsZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2ZpcnN0Qm9k
eSkKLSAgICAgICAgICAgICAgICAgICAgbV9maXJzdEJvZHkgPSB0b1JlbmRlclRhYmxlU2VjdGlv
bihjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIG1fZmlyc3RCb2R5ID0gZG93bmNhc3Q8UmVu
ZGVyVGFibGVTZWN0aW9uPihjaGlsZCk7CiAgICAgICAgICAgICAgICAgd3JhcEluQW5vbnltb3Vz
U2VjdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQot
ICAgIH0gZWxzZSBpZiAoY2hpbGQtPmlzVGFibGVDZWxsKCkgfHwgY2hpbGQtPmlzVGFibGVSb3co
KSkKKyAgICB9IGVsc2UgaWYgKGlzPFJlbmRlclRhYmxlQ2VsbD4oKmNoaWxkKSB8fCBpczxSZW5k
ZXJUYWJsZVJvdz4oKmNoaWxkKSkKICAgICAgICAgd3JhcEluQW5vbnltb3VzU2VjdGlvbiA9IHRy
dWU7CiAgICAgZWxzZQogICAgICAgICB3cmFwSW5Bbm9ueW1vdXNTZWN0aW9uID0gdHJ1ZTsKIAot
ICAgIGlmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkKKyAgICBpZiAoaXM8UmVuZGVyVGFibGVT
ZWN0aW9uPigqY2hpbGQpKQogICAgICAgICBzZXROZWVkc1NlY3Rpb25SZWNhbGMoKTsKIAogICAg
IGlmICghd3JhcEluQW5vbnltb3VzU2VjdGlvbikgewpAQCAtMTkwLDMyICsxOTAsMzIgQEAgdm9p
ZCBSZW5kZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghYmVmb3Jl
Q2hpbGQgJiYgbGFzdENoaWxkKCkgJiYgbGFzdENoaWxkKCktPmlzVGFibGVTZWN0aW9uKCkgJiYg
bGFzdENoaWxkKCktPmlzQW5vbnltb3VzKCkgJiYgIWxhc3RDaGlsZCgpLT5pc0JlZm9yZUNvbnRl
bnQoKSkgewotICAgICAgICB0b1JlbmRlclRhYmxlU2VjdGlvbihsYXN0Q2hpbGQoKSktPmFkZENo
aWxkKGNoaWxkKTsKKyAgICBpZiAoIWJlZm9yZUNoaWxkICYmIGlzPFJlbmRlclRhYmxlU2VjdGlv
bj4obGFzdENoaWxkKCkpICYmIGxhc3RDaGlsZCgpLT5pc0Fub255bW91cygpICYmICFsYXN0Q2hp
bGQoKS0+aXNCZWZvcmVDb250ZW50KCkpIHsKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVT
ZWN0aW9uPigqbGFzdENoaWxkKCkpLmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmIChiZWZvcmVDaGlsZCAmJiAhYmVmb3JlQ2hpbGQtPmlzQW5vbnltb3Vz
KCkgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpIHsKICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBzZWN0aW9uID0gYmVmb3JlQ2hpbGQtPnByZXZpb3VzU2libGluZygpOwotICAgICAgICBp
ZiAoc2VjdGlvbiAmJiBzZWN0aW9uLT5pc1RhYmxlU2VjdGlvbigpICYmIHNlY3Rpb24tPmlzQW5v
bnltb3VzKCkpIHsKLSAgICAgICAgICAgIHRvUmVuZGVyVGFibGVTZWN0aW9uKHNlY3Rpb24pLT5h
ZGRDaGlsZChjaGlsZCk7CisgICAgICAgIGlmIChpczxSZW5kZXJUYWJsZVNlY3Rpb24+KHNlY3Rp
b24pICYmIHNlY3Rpb24tPmlzQW5vbnltb3VzKCkpIHsKKyAgICAgICAgICAgIGRvd25jYXN0PFJl
bmRlclRhYmxlU2VjdGlvbj4oKnNlY3Rpb24pLmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAogICAgIFJlbmRlck9iamVjdCogbGFzdEJveCA9
IGJlZm9yZUNoaWxkOwotICAgIHdoaWxlIChsYXN0Qm94ICYmIGxhc3RCb3gtPnBhcmVudCgpLT5p
c0Fub255bW91cygpICYmICFsYXN0Qm94LT5pc1RhYmxlU2VjdGlvbigpICYmIGxhc3RCb3gtPnN0
eWxlKCkuZGlzcGxheSgpICE9IFRBQkxFX0NBUFRJT04gJiYgbGFzdEJveC0+c3R5bGUoKS5kaXNw
bGF5KCkgIT0gVEFCTEVfQ09MVU1OX0dST1VQKQorICAgIHdoaWxlIChsYXN0Qm94ICYmIGxhc3RC
b3gtPnBhcmVudCgpLT5pc0Fub255bW91cygpICYmICFpczxSZW5kZXJUYWJsZVNlY3Rpb24+KCps
YXN0Qm94KSAmJiBsYXN0Qm94LT5zdHlsZSgpLmRpc3BsYXkoKSAhPSBUQUJMRV9DQVBUSU9OICYm
IGxhc3RCb3gtPnN0eWxlKCkuZGlzcGxheSgpICE9IFRBQkxFX0NPTFVNTl9HUk9VUCkKICAgICAg
ICAgbGFzdEJveCA9IGxhc3RCb3gtPnBhcmVudCgpOwogICAgIGlmIChsYXN0Qm94ICYmIGxhc3RC
b3gtPmlzQW5vbnltb3VzKCkgJiYgIWlzQWZ0ZXJDb250ZW50KGxhc3RCb3gpICYmIGxhc3RCb3gt
PmlzVGFibGVTZWN0aW9uKCkpIHsKLSAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9u
ID0gdG9SZW5kZXJUYWJsZVNlY3Rpb24obGFzdEJveCk7Ci0gICAgICAgIGlmIChiZWZvcmVDaGls
ZCA9PSBzZWN0aW9uKQotICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSBzZWN0aW9uLT5maXJzdFJv
dygpOwotICAgICAgICBzZWN0aW9uLT5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAg
ICAgICBSZW5kZXJUYWJsZVNlY3Rpb24mIHNlY3Rpb24gPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNl
Y3Rpb24+KCpsYXN0Qm94KTsKKyAgICAgICAgaWYgKGJlZm9yZUNoaWxkID09ICZzZWN0aW9uKQor
ICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSBzZWN0aW9uLmZpcnN0Um93KCk7CisgICAgICAgIHNl
Y3Rpb24uYWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmIChiZWZvcmVDaGlsZCAmJiAhYmVmb3JlQ2hpbGQtPmlzVGFibGVTZWN0aW9u
KCkgJiYgYmVmb3JlQ2hpbGQtPnN0eWxlKCkuZGlzcGxheSgpICE9IFRBQkxFX0NBUFRJT04gJiYg
YmVmb3JlQ2hpbGQtPnN0eWxlKCkuZGlzcGxheSgpICE9IFRBQkxFX0NPTFVNTl9HUk9VUCkKLSAg
ICAgICAgYmVmb3JlQ2hpbGQgPSAwOworICAgIGlmIChiZWZvcmVDaGlsZCAmJiAhaXM8UmVuZGVy
VGFibGVTZWN0aW9uPigqYmVmb3JlQ2hpbGQpICYmIGJlZm9yZUNoaWxkLT5zdHlsZSgpLmRpc3Bs
YXkoKSAhPSBUQUJMRV9DQVBUSU9OICYmIGJlZm9yZUNoaWxkLT5zdHlsZSgpLmRpc3BsYXkoKSAh
PSBUQUJMRV9DT0xVTU5fR1JPVVApCisgICAgICAgIGJlZm9yZUNoaWxkID0gbnVsbHB0cjsKIAog
ICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiA9IFJlbmRlclRhYmxlU2VjdGlvbjo6Y3Jl
YXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKHRoaXMpOwogICAgIGFkZENoaWxkKHNlY3Rp
b24sIGJlZm9yZUNoaWxkKTsKQEAgLTQ1OSw4ICs0NTksOCBAQCB2b2lkIFJlbmRlclRhYmxlOjps
YXlvdXQoKQogICAgIGJvb2wgY29sbGFwc2luZyA9IGNvbGxhcHNlQm9yZGVycygpOwogCiAgICAg
Zm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckVsZW1lbnQ+KCp0aGlzKSkg
ewotICAgICAgICBpZiAoY2hpbGQuaXNUYWJsZVNlY3Rpb24oKSkgewotICAgICAgICAgICAgUmVu
ZGVyVGFibGVTZWN0aW9uJiBzZWN0aW9uID0gdG9SZW5kZXJUYWJsZVNlY3Rpb24oY2hpbGQpOwor
ICAgICAgICBpZiAoaXM8UmVuZGVyVGFibGVTZWN0aW9uPihjaGlsZCkpIHsKKyAgICAgICAgICAg
IFJlbmRlclRhYmxlU2VjdGlvbiYgc2VjdGlvbiA9IGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlv
bj4oY2hpbGQpOwogICAgICAgICAgICAgaWYgKG1fY29sdW1uTG9naWNhbFdpZHRoQ2hhbmdlZCkK
ICAgICAgICAgICAgICAgICBzZWN0aW9uLnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlz
KTsKICAgICAgICAgICAgIHNlY3Rpb24ubGF5b3V0SWZOZWVkZWQoKTsKQEAgLTQ2OCw4ICs0Njgs
OCBAQCB2b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQoKQogICAgICAgICAgICAgaWYgKGNvbGxhcHNp
bmcpCiAgICAgICAgICAgICAgICAgc2VjdGlvbi5yZWNhbGNPdXRlckJvcmRlcigpOwogICAgICAg
ICAgICAgQVNTRVJUKCFzZWN0aW9uLm5lZWRzTGF5b3V0KCkpOwotICAgICAgICB9IGVsc2UgaWYg
KGNoaWxkLmlzUmVuZGVyVGFibGVDb2woKSkgewotICAgICAgICAgICAgdG9SZW5kZXJUYWJsZUNv
bChjaGlsZCkubGF5b3V0SWZOZWVkZWQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJU
YWJsZUNvbD4oY2hpbGQpKSB7CisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUYWJsZUNvbD4o
Y2hpbGQpLmxheW91dElmTmVlZGVkKCk7CiAgICAgICAgICAgICBBU1NFUlQoIWNoaWxkLm5lZWRz
TGF5b3V0KCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtODUxLDE1ICs4NTEsMTUgQEAgdm9pZCBS
ZW5kZXJUYWJsZTo6YXBwZW5kQ29sdW1uKHVuc2lnbmVkIHNwYW4pCiBSZW5kZXJUYWJsZUNvbCog
UmVuZGVyVGFibGU6OmZpcnN0Q29sdW1uKCkgY29uc3QKIHsKICAgICBmb3IgKFJlbmRlck9iamVj
dCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+aXNSZW5kZXJUYWJsZUNvbCgpKQotICAgICAgICAg
ICAgcmV0dXJuIHRvUmVuZGVyVGFibGVDb2woY2hpbGQpOworICAgICAgICBpZiAoaXM8UmVuZGVy
VGFibGVDb2w+KCpjaGlsZCkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGFi
bGVDb2w+KGNoaWxkKTsKIAogICAgICAgICAvLyBXZSBhbGxvdyBvbmx5IHRhYmxlLWNhcHRpb25z
IGJlZm9yZSBjb2x1bW5zIG9yIGNvbHVtbi1ncm91cHMuCi0gICAgICAgIGlmICghY2hpbGQtPmlz
VGFibGVDYXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKCFpczxS
ZW5kZXJUYWJsZUNhcHRpb24+KCpjaGlsZCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogdm9pZCBS
ZW5kZXJUYWJsZTo6dXBkYXRlQ29sdW1uQ2FjaGUoKSBjb25zdApAQCAtMTAwNiwzMSArMTAwNiwz
MSBAQCB2b2lkIFJlbmRlclRhYmxlOjpyZWNhbGNTZWN0aW9ucygpIGNvbnN0CiAgICAgICAgICAg
ICBtX2hhc0NvbEVsZW1lbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFRBQkxFX0hFQURFUl9HUk9VUDoKLSAgICAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZVNl
Y3Rpb24oKSkgewotICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiA9
IHRvUmVuZGVyVGFibGVTZWN0aW9uKGNoaWxkKTsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJU
YWJsZVNlY3Rpb24+KCpjaGlsZCkpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rp
b24mIHNlY3Rpb24gPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KCpjaGlsZCk7CiAgICAg
ICAgICAgICAgICAgaWYgKCFtX2hlYWQpCi0gICAgICAgICAgICAgICAgICAgIG1faGVhZCA9IHNl
Y3Rpb247CisgICAgICAgICAgICAgICAgICAgIG1faGVhZCA9ICZzZWN0aW9uOwogICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKCFtX2ZpcnN0Qm9keSkKLSAgICAgICAgICAgICAgICAgICAgbV9maXJz
dEJvZHkgPSBzZWN0aW9uOwotICAgICAgICAgICAgICAgIHNlY3Rpb24tPnJlY2FsY0NlbGxzSWZO
ZWVkZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9maXJzdEJvZHkgPSAmc2VjdGlvbjsKKyAg
ICAgICAgICAgICAgICBzZWN0aW9uLnJlY2FsY0NlbGxzSWZOZWVkZWQoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRBQkxFX0ZPT1RFUl9HUk9VUDoK
LSAgICAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkgewotICAgICAgICAgICAg
ICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiA9IHRvUmVuZGVyVGFibGVTZWN0aW9uKGNo
aWxkKTsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJUYWJsZVNlY3Rpb24+KCpjaGlsZCkpIHsK
KyAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24mIHNlY3Rpb24gPSBkb3duY2FzdDxS
ZW5kZXJUYWJsZVNlY3Rpb24+KCpjaGlsZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2Zvb3Qp
Ci0gICAgICAgICAgICAgICAgICAgIG1fZm9vdCA9IHNlY3Rpb247CisgICAgICAgICAgICAgICAg
ICAgIG1fZm9vdCA9ICZzZWN0aW9uOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFtX2ZpcnN0
Qm9keSkKLSAgICAgICAgICAgICAgICAgICAgbV9maXJzdEJvZHkgPSBzZWN0aW9uOwotICAgICAg
ICAgICAgICAgIHNlY3Rpb24tPnJlY2FsY0NlbGxzSWZOZWVkZWQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9maXJzdEJvZHkgPSAmc2VjdGlvbjsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLnJl
Y2FsY0NlbGxzSWZOZWVkZWQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIFRBQkxFX1JPV19HUk9VUDoKLSAgICAgICAgICAgIGlmIChjaGlsZC0+aXNU
YWJsZVNlY3Rpb24oKSkgewotICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2Vj
dGlvbiA9IHRvUmVuZGVyVGFibGVTZWN0aW9uKGNoaWxkKTsKKyAgICAgICAgICAgIGlmIChpczxS
ZW5kZXJUYWJsZVNlY3Rpb24+KCpjaGlsZCkpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJUYWJs
ZVNlY3Rpb24mIHNlY3Rpb24gPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KCpjaGlsZCk7
CiAgICAgICAgICAgICAgICAgaWYgKCFtX2ZpcnN0Qm9keSkKLSAgICAgICAgICAgICAgICAgICAg
bV9maXJzdEJvZHkgPSBzZWN0aW9uOwotICAgICAgICAgICAgICAgIHNlY3Rpb24tPnJlY2FsY0Nl
bGxzSWZOZWVkZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9maXJzdEJvZHkgPSAmc2VjdGlv
bjsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLnJlY2FsY0NlbGxzSWZOZWVkZWQoKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgpAQCAtMTI4NCwx
NyArMTI4NCwxNyBAQCBSZW5kZXJUYWJsZVNlY3Rpb24qIFJlbmRlclRhYmxlOjpzZWN0aW9uQWJv
dmUoY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uLAogICAgIHJlY2FsY1NlY3Rpb25z
SWZOZWVkZWQoKTsKIAogICAgIGlmIChzZWN0aW9uID09IG1faGVhZCkKLSAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmVuZGVyT2JqZWN0KiBwcmV2U2Vj
dGlvbiA9IHNlY3Rpb24gPT0gbV9mb290ID8gbGFzdENoaWxkKCkgOiBzZWN0aW9uLT5wcmV2aW91
c1NpYmxpbmcoKTsKICAgICB3aGlsZSAocHJldlNlY3Rpb24pIHsKLSAgICAgICAgaWYgKHByZXZT
ZWN0aW9uLT5pc1RhYmxlU2VjdGlvbigpICYmIHByZXZTZWN0aW9uICE9IG1faGVhZCAmJiBwcmV2
U2VjdGlvbiAhPSBtX2Zvb3QgJiYgKHNraXBFbXB0eVNlY3Rpb25zID09IERvTm90U2tpcEVtcHR5
U2VjdGlvbnMgfHwgdG9SZW5kZXJUYWJsZVNlY3Rpb24ocHJldlNlY3Rpb24pLT5udW1Sb3dzKCkp
KQorICAgICAgICBpZiAoaXM8UmVuZGVyVGFibGVTZWN0aW9uPigqcHJldlNlY3Rpb24pICYmIHBy
ZXZTZWN0aW9uICE9IG1faGVhZCAmJiBwcmV2U2VjdGlvbiAhPSBtX2Zvb3QgJiYgKHNraXBFbXB0
eVNlY3Rpb25zID09IERvTm90U2tpcEVtcHR5U2VjdGlvbnMgfHwgZG93bmNhc3Q8UmVuZGVyVGFi
bGVTZWN0aW9uPigqcHJldlNlY3Rpb24pLm51bVJvd3MoKSkpCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgcHJldlNlY3Rpb24gPSBwcmV2U2VjdGlvbi0+cHJldmlvdXNTaWJsaW5nKCk7CiAg
ICAgfQogICAgIGlmICghcHJldlNlY3Rpb24gJiYgbV9oZWFkICYmIChza2lwRW1wdHlTZWN0aW9u
cyA9PSBEb05vdFNraXBFbXB0eVNlY3Rpb25zIHx8IG1faGVhZC0+bnVtUm93cygpKSkKICAgICAg
ICAgcHJldlNlY3Rpb24gPSBtX2hlYWQ7Ci0gICAgcmV0dXJuIHRvUmVuZGVyVGFibGVTZWN0aW9u
KHByZXZTZWN0aW9uKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPihw
cmV2U2VjdGlvbik7CiB9CiAKIFJlbmRlclRhYmxlU2VjdGlvbiogUmVuZGVyVGFibGU6OnNlY3Rp
b25CZWxvdyhjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24sIFNraXBFbXB0eVNlY3Rp
b25zVmFsdWUgc2tpcEVtcHR5U2VjdGlvbnMpIGNvbnN0CkBAIC0xMzAyLDE3ICsxMzAyLDE3IEBA
IFJlbmRlclRhYmxlU2VjdGlvbiogUmVuZGVyVGFibGU6OnNlY3Rpb25CZWxvdyhjb25zdCBSZW5k
ZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24sCiAgICAgcmVjYWxjU2VjdGlvbnNJZk5lZWRlZCgpOwog
CiAgICAgaWYgKHNlY3Rpb24gPT0gbV9mb290KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICBSZW5kZXJPYmplY3QqIG5leHRTZWN0aW9uID0gc2VjdGlv
biA9PSBtX2hlYWQgPyBmaXJzdENoaWxkKCkgOiBzZWN0aW9uLT5uZXh0U2libGluZygpOwogICAg
IHdoaWxlIChuZXh0U2VjdGlvbikgewotICAgICAgICBpZiAobmV4dFNlY3Rpb24tPmlzVGFibGVT
ZWN0aW9uKCkgJiYgbmV4dFNlY3Rpb24gIT0gbV9oZWFkICYmIG5leHRTZWN0aW9uICE9IG1fZm9v
dCAmJiAoc2tpcEVtcHR5U2VjdGlvbnMgID09IERvTm90U2tpcEVtcHR5U2VjdGlvbnMgfHwgdG9S
ZW5kZXJUYWJsZVNlY3Rpb24obmV4dFNlY3Rpb24pLT5udW1Sb3dzKCkpKQorICAgICAgICBpZiAo
aXM8UmVuZGVyVGFibGVTZWN0aW9uPigqbmV4dFNlY3Rpb24pICYmIG5leHRTZWN0aW9uICE9IG1f
aGVhZCAmJiBuZXh0U2VjdGlvbiAhPSBtX2Zvb3QgJiYgKHNraXBFbXB0eVNlY3Rpb25zICA9PSBE
b05vdFNraXBFbXB0eVNlY3Rpb25zIHx8IGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4oKm5l
eHRTZWN0aW9uKS5udW1Sb3dzKCkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG5leHRT
ZWN0aW9uID0gbmV4dFNlY3Rpb24tPm5leHRTaWJsaW5nKCk7CiAgICAgfQogICAgIGlmICghbmV4
dFNlY3Rpb24gJiYgbV9mb290ICYmIChza2lwRW1wdHlTZWN0aW9ucyA9PSBEb05vdFNraXBFbXB0
eVNlY3Rpb25zIHx8IG1fZm9vdC0+bnVtUm93cygpKSkKICAgICAgICAgbmV4dFNlY3Rpb24gPSBt
X2Zvb3Q7Ci0gICAgcmV0dXJuIHRvUmVuZGVyVGFibGVTZWN0aW9uKG5leHRTZWN0aW9uKTsKKyAg
ICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPihuZXh0U2VjdGlvbik7CiB9CiAK
IFJlbmRlclRhYmxlU2VjdGlvbiogUmVuZGVyVGFibGU6OmJvdHRvbVNlY3Rpb24oKSBjb25zdApA
QCAtMTMyMywxMSArMTMyMywxMSBAQCBSZW5kZXJUYWJsZVNlY3Rpb24qIFJlbmRlclRhYmxlOjpi
b3R0b21TZWN0aW9uKCkgY29uc3QKICAgICAgICAgcmV0dXJuIG1fZm9vdDsKIAogICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
cHJldmlvdXNTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigp
KQotICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVyVGFibGVTZWN0aW9uKGNoaWxkKTsKKyAgICAg
ICAgaWYgKGlzPFJlbmRlclRhYmxlU2VjdGlvbj4oKmNoaWxkKSkKKyAgICAgICAgICAgIHJldHVy
biBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGNoaWxkKTsKICAgICB9CiAKLSAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogUmVuZGVyVGFibGVDZWxsKiBSZW5kZXJU
YWJsZTo6Y2VsbEFib3ZlKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCogY2VsbCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKaW5kZXggZDlkMWVlOGIwNGUxN2U3OGM5ZjVh
ZGEzZjVkNmJhYjcxMjcxNGIxMy4uOTRkMWNiZGI5ZDEyYWY4N2ZhZTVhYTU0MDkwZTFmOTRlODY0
YjNlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKQEAgLTM4MSw4ICsz
ODEsNiBAQCBpbmxpbmUgUmVuZGVyVGFibGVTZWN0aW9uKiBSZW5kZXJUYWJsZTo6dG9wU2VjdGlv
bigpIGNvbnN0CiAgICAgcmV0dXJuIG1fZm9vdDsKIH0KIAotUkVOREVSX09CSkVDVF9UWVBFX0NB
U1RTKFJlbmRlclRhYmxlLCBpc1RhYmxlKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJlbmRlclRhYmxlLCBpc1RhYmxl
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDYXB0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNhcHRpb24uY3Bw
CmluZGV4IGNhMThjNGM3ZDgzOWMyMDU1OWM3OGVkNTJlZWZlYzU2OWM2ZGI3OGIuLmNlMzI0MWNj
NDA4YjhlZTFhNDY0YzliZWZlOGYyYjg0MTBhM2EwMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNhcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNhcHRpb24uY3BwCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQg
UmVuZGVyVGFibGVDYXB0aW9uOjp3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKQogCiBSZW5kZXJUYWJs
ZSogUmVuZGVyVGFibGVDYXB0aW9uOjp0YWJsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvUmVu
ZGVyVGFibGUocGFyZW50KCkpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJUYWJsZT4ocGFy
ZW50KCkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDZWxsLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxs
LmgKaW5kZXggNzdjOTJiOTkwYjhkYjVjYWNjY2RiZGUwMTI0ODJiODNkMzg1OWMyNS4uMjJmODZk
YzlhMDJlOGNkOTY1Nzk5NzViNDZkZDg1NzllYWViNTFjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaApAQCAtNzQsOSArNzQsOSBAQCBwdWJsaWM6CiAgICAg
UmVuZGVyVGFibGVDZWxsKiBuZXh0Q2VsbCgpIGNvbnN0OwogICAgIFJlbmRlclRhYmxlQ2VsbCog
cHJldmlvdXNDZWxsKCkgY29uc3Q7CiAKLSAgICBSZW5kZXJUYWJsZVJvdyogcm93KCkgY29uc3Qg
eyByZXR1cm4gdG9SZW5kZXJUYWJsZVJvdyhwYXJlbnQoKSk7IH0KLSAgICBSZW5kZXJUYWJsZVNl
Y3Rpb24qIHNlY3Rpb24oKSBjb25zdCB7IHJldHVybiB0b1JlbmRlclRhYmxlU2VjdGlvbihwYXJl
bnQoKS0+cGFyZW50KCkpOyB9Ci0gICAgUmVuZGVyVGFibGUqIHRhYmxlKCkgY29uc3QgeyByZXR1
cm4gdG9SZW5kZXJUYWJsZShwYXJlbnQoKS0+cGFyZW50KCktPnBhcmVudCgpKTsgfQorICAgIFJl
bmRlclRhYmxlUm93KiByb3coKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxSZW5kZXJUYWJsZVJv
dz4ocGFyZW50KCkpOyB9CisgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPihwYXJlbnQoKS0+cGFyZW50KCkp
OyB9CisgICAgUmVuZGVyVGFibGUqIHRhYmxlKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8UmVu
ZGVyVGFibGU+KHBhcmVudCgpLT5wYXJlbnQoKS0+cGFyZW50KCkpOyB9CiAKICAgICB1bnNpZ25l
ZCByb3dJbmRleCgpIGNvbnN0CiAgICAgewpAQCAtMjk0LDI2ICsyOTQsMjQgQEAgcHJpdmF0ZToK
ICAgICBpbnQgbV9pbnRyaW5zaWNQYWRkaW5nQWZ0ZXI7CiB9OwogCi1SRU5ERVJfT0JKRUNUX1RZ
UEVfQ0FTVFMoUmVuZGVyVGFibGVDZWxsLCBpc1RhYmxlQ2VsbCgpKQotCiBpbmxpbmUgUmVuZGVy
VGFibGVDZWxsKiBSZW5kZXJUYWJsZUNlbGw6Om5leHRDZWxsKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gdG9SZW5kZXJUYWJsZUNlbGwoUmVuZGVyQmxvY2tGbG93OjpuZXh0U2libGluZygpKTsKKyAg
ICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPihSZW5kZXJCbG9ja0Zsb3c6Om5leHRT
aWJsaW5nKCkpOwogfQogCiBpbmxpbmUgUmVuZGVyVGFibGVDZWxsKiBSZW5kZXJUYWJsZUNlbGw6
OnByZXZpb3VzQ2VsbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvUmVuZGVyVGFibGVDZWxsKFJl
bmRlckJsb2NrRmxvdzo6cHJldmlvdXNTaWJsaW5nKCkpOworICAgIHJldHVybiBkb3duY2FzdDxS
ZW5kZXJUYWJsZUNlbGw+KFJlbmRlckJsb2NrRmxvdzo6cHJldmlvdXNTaWJsaW5nKCkpOwogfQog
CiBpbmxpbmUgUmVuZGVyVGFibGVDZWxsKiBSZW5kZXJUYWJsZVJvdzo6Zmlyc3RDZWxsKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gdG9SZW5kZXJUYWJsZUNlbGwoUmVuZGVyQm94OjpmaXJzdENoaWxk
KCkpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJUYWJsZUNlbGw+KFJlbmRlckJveDo6Zmly
c3RDaGlsZCgpKTsKIH0KIAogaW5saW5lIFJlbmRlclRhYmxlQ2VsbCogUmVuZGVyVGFibGVSb3c6
Omxhc3RDZWxsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9SZW5kZXJUYWJsZUNlbGwoUmVuZGVy
Qm94OjpsYXN0Q2hpbGQoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRhYmxlQ2VsbD4o
UmVuZGVyQm94OjpsYXN0Q2hpbGQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwCmluZGV4IDZmZGU0OTQ4
ZjhkNjc2OTg2ZWEyMzE2ODYwMWJlMDVmYzFlZWRlOGIuLmJjMTg0OTg4YWUxYzAxNDljOWY4YWYz
YTFjNTI5NDkzYWJmODFhZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZUNvbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ29sLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkhUTUxUYWJsZUNvbEVsZW1l
bnQuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxl
LmgiCisjaW5jbHVkZSAiUmVuZGVyVGFibGVDYXB0aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFi
bGVDZWxsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEzOSw0NCArMTQwLDQ0IEBAIHZv
aWQgUmVuZGVyVGFibGVDb2w6OmNsZWFyUHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5Qml0cygp
CiBSZW5kZXJUYWJsZSogUmVuZGVyVGFibGVDb2w6OnRhYmxlKCkgY29uc3QKIHsKICAgICBhdXRv
IHRhYmxlID0gcGFyZW50KCk7Ci0gICAgaWYgKHRhYmxlICYmICF0YWJsZS0+aXNUYWJsZSgpKQor
ICAgIGlmICh0YWJsZSAmJiAhaXM8UmVuZGVyVGFibGU+KCp0YWJsZSkpCiAgICAgICAgIHRhYmxl
ID0gdGFibGUtPnBhcmVudCgpOwotICAgIHJldHVybiB0YWJsZSAmJiB0YWJsZS0+aXNUYWJsZSgp
ID8gdG9SZW5kZXJUYWJsZSh0YWJsZSkgOiAwOworICAgIHJldHVybiBpczxSZW5kZXJUYWJsZT4o
dGFibGUpID8gZG93bmNhc3Q8UmVuZGVyVGFibGU+KHRhYmxlKSA6IG51bGxwdHI7CiB9CiAKIFJl
bmRlclRhYmxlQ29sKiBSZW5kZXJUYWJsZUNvbDo6ZW5jbG9zaW5nQ29sdW1uR3JvdXAoKSBjb25z
dAogewotICAgIGlmICghcGFyZW50KCktPmlzUmVuZGVyVGFibGVDb2woKSkKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgaWYgKCFpczxSZW5kZXJUYWJsZUNvbD4oKnBhcmVudCgpKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZW5kZXJUYWJsZUNvbCogcGFyZW50Q29sdW1uR3JvdXAg
PSB0b1JlbmRlclRhYmxlQ29sKHBhcmVudCgpKTsKLSAgICBBU1NFUlQocGFyZW50Q29sdW1uR3Jv
dXAtPmlzVGFibGVDb2x1bW5Hcm91cCgpKTsKKyAgICBSZW5kZXJUYWJsZUNvbCYgcGFyZW50Q29s
dW1uR3JvdXAgPSBkb3duY2FzdDxSZW5kZXJUYWJsZUNvbD4oKnBhcmVudCgpKTsKKyAgICBBU1NF
UlQocGFyZW50Q29sdW1uR3JvdXAuaXNUYWJsZUNvbHVtbkdyb3VwKCkpOwogICAgIEFTU0VSVChp
c1RhYmxlQ29sdW1uKCkpOwotICAgIHJldHVybiBwYXJlbnRDb2x1bW5Hcm91cDsKKyAgICByZXR1
cm4gJnBhcmVudENvbHVtbkdyb3VwOwogfQogCiBSZW5kZXJUYWJsZUNvbCogUmVuZGVyVGFibGVD
b2w6Om5leHRDb2x1bW4oKSBjb25zdAogewogICAgIC8vIElmIHx0aGlzfCBpcyBhIGNvbHVtbi1n
cm91cCwgdGhlIG5leHQgY29sdW1uIGlzIHRoZSBjb2xncm91cCdzIGZpcnN0IGNoaWxkIGNvbHVt
bi4KICAgICBpZiAoUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkID0gdGhpcy0+Zmlyc3RDaGlsZCgp
KQotICAgICAgICByZXR1cm4gdG9SZW5kZXJUYWJsZUNvbChmaXJzdENoaWxkKTsKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PFJlbmRlclRhYmxlQ29sPihmaXJzdENoaWxkKTsKIAogICAgIC8vIE90
aGVyd2lzZSBpdCdzIHRoZSBuZXh0IGNvbHVtbiBhbG9uZy4KICAgICBSZW5kZXJPYmplY3QqIG5l
eHQgPSBuZXh0U2libGluZygpOwogCiAgICAgLy8gRmFpbGluZyB0aGF0LCB0aGUgY2hpbGQgaXMg
dGhlIGxhc3QgY29sdW1uIGluIGEgY29sdW1uLWdyb3VwLCBzbyB0aGUgbmV4dCBjb2x1bW4gaXMg
dGhlIG5leHQgY29sdW1uL2NvbHVtbi1ncm91cCBhZnRlciBpdHMgY29sdW1uLWdyb3VwLgotICAg
IGlmICghbmV4dCAmJiBwYXJlbnQoKS0+aXNSZW5kZXJUYWJsZUNvbCgpKQorICAgIGlmICghbmV4
dCAmJiBpczxSZW5kZXJUYWJsZUNvbD4oKnBhcmVudCgpKSkKICAgICAgICAgbmV4dCA9IHBhcmVu
dCgpLT5uZXh0U2libGluZygpOwogCi0gICAgZm9yICg7IG5leHQgJiYgIW5leHQtPmlzUmVuZGVy
VGFibGVDb2woKTsgbmV4dCA9IG5leHQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKDsgbmV4
dCAmJiAhaXM8UmVuZGVyVGFibGVDb2w+KCpuZXh0KTsgbmV4dCA9IG5leHQtPm5leHRTaWJsaW5n
KCkpIHsKICAgICAgICAgLy8gV2UgYWxsb3cgY2FwdGlvbnMgbWl4ZWQgd2l0aCBjb2x1bW5zIGFu
ZCBjb2x1bW4tZ3JvdXBzLgotICAgICAgICBpZiAobmV4dC0+aXNUYWJsZUNhcHRpb24oKSkKKyAg
ICAgICAgaWYgKGlzPFJlbmRlclRhYmxlQ2FwdGlvbj4oKm5leHQpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KIAotICAgIHJldHVybiB0b1JlbmRlclRhYmxlQ29sKG5leHQpOworICAgIHJldHVybiBkb3du
Y2FzdDxSZW5kZXJUYWJsZUNvbD4obmV4dCk7CiB9CiAKIGNvbnN0IEJvcmRlclZhbHVlJiBSZW5k
ZXJUYWJsZUNvbDo6Ym9yZGVyQWRqb2luaW5nQ2VsbFN0YXJ0Qm9yZGVyKGNvbnN0IFJlbmRlclRh
YmxlQ2VsbCopIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDb2wuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5o
CmluZGV4IGI3OWQyYzNhMWI5NjUzZGRlMDBlMTk3YzM5NzE0NDkzMDc2ZGM0MDIuLjBmM2NkOTdi
YjcyZTUzM2FhMjkwNThlN2E2MTgzYzJkN2M3NGU4OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZUNvbC5oCkBAIC03NSwxMSArNzUsMTEgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgTGF5b3V0VW5pdCBvZmZzZXRUb3AoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IExheW91dFVuaXQgb2Zmc2V0V2lkdGgoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIExh
eW91dFVuaXQgb2Zmc2V0SGVpZ2h0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUZyb21FbGVtZW50KCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBj
b25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIlJlbmRlclRh
YmxlQ29sIjsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclRhYmxlQ29sKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVu
dCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdp
ZHRocygpIG92ZXJyaWRlIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIAogICAgIHZpcnR1YWwg
dm9pZCBpbnNlcnRlZEludG9UcmVlKCkgb3ZlcnJpZGU7CkBAIC0xMDAsOCArMTAwLDYgQEAgcHJp
dmF0ZToKICAgICB1bnNpZ25lZCBtX3NwYW47CiB9OwogCi1SRU5ERVJfT0JKRUNUX1RZUEVfQ0FT
VFMoUmVuZGVyVGFibGVDb2wsIGlzUmVuZGVyVGFibGVDb2woKSkKLQogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyVGFi
bGVDb2wsIGlzUmVuZGVyVGFibGVDb2woKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVSb3cuY3BwCmluZGV4IDY5NzBlYjNmZGEwMDUxNTFlMzRjODdiOWFkODM5MGU0YzRk
N2MzY2YuLjIwZWMxOWQzZmZkYWI2ZDViYjQzMDVmYzMzZWUwMzVlNWNiZGFjYTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcApAQCAtMTA5LDI4ICsxMDks
MjggQEAgY29uc3QgQm9yZGVyVmFsdWUmIFJlbmRlclRhYmxlUm93Ojpib3JkZXJBZGpvaW5pbmdF
bmRDZWxsKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCoKIAogdm9pZCBSZW5kZXJUYWJsZVJvdzo6YWRk
Q2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsK
LSAgICBpZiAoIWNoaWxkLT5pc1RhYmxlQ2VsbCgpKSB7CisgICAgaWYgKCFpczxSZW5kZXJUYWJs
ZUNlbGw+KCpjaGlsZCkpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBsYXN0ID0gYmVmb3JlQ2hp
bGQ7CiAgICAgICAgIGlmICghbGFzdCkKICAgICAgICAgICAgIGxhc3QgPSBsYXN0Q2VsbCgpOwot
ICAgICAgICBpZiAobGFzdCAmJiBsYXN0LT5pc0Fub255bW91cygpICYmIGxhc3QtPmlzVGFibGVD
ZWxsKCkgJiYgIWxhc3QtPmlzQmVmb3JlT3JBZnRlckNvbnRlbnQoKSkgewotICAgICAgICAgICAg
UmVuZGVyVGFibGVDZWxsKiBjZWxsID0gdG9SZW5kZXJUYWJsZUNlbGwobGFzdCk7Ci0gICAgICAg
ICAgICBpZiAoYmVmb3JlQ2hpbGQgPT0gY2VsbCkKLSAgICAgICAgICAgICAgICBiZWZvcmVDaGls
ZCA9IGNlbGwtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgIGNlbGwtPmFkZENoaWxkKGNoaWxk
LCBiZWZvcmVDaGlsZCk7CisgICAgICAgIGlmIChsYXN0ICYmIGxhc3QtPmlzQW5vbnltb3VzKCkg
JiYgaXM8UmVuZGVyVGFibGVDZWxsPigqbGFzdCkgJiYgIWxhc3QtPmlzQmVmb3JlT3JBZnRlckNv
bnRlbnQoKSkgeworICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsJiBjZWxsID0gZG93bmNhc3Q8
UmVuZGVyVGFibGVDZWxsPigqbGFzdCk7CisgICAgICAgICAgICBpZiAoYmVmb3JlQ2hpbGQgPT0g
JmNlbGwpCisgICAgICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSBjZWxsLmZpcnN0Q2hpbGQoKTsK
KyAgICAgICAgICAgIGNlbGwuYWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChiZWZvcmVDaGlsZCAmJiAhYmVm
b3JlQ2hpbGQtPmlzQW5vbnltb3VzKCkgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMp
IHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogY2VsbCA9IGJlZm9yZUNoaWxkLT5wcmV2aW91
c1NpYmxpbmcoKTsKLSAgICAgICAgICAgIGlmIChjZWxsICYmIGNlbGwtPmlzVGFibGVDZWxsKCkg
JiYgY2VsbC0+aXNBbm9ueW1vdXMoKSkgewotICAgICAgICAgICAgICAgIHRvUmVuZGVyVGFibGVD
ZWxsKGNlbGwpLT5hZGRDaGlsZChjaGlsZCk7CisgICAgICAgICAgICBpZiAoaXM8UmVuZGVyVGFi
bGVDZWxsPihjZWxsKSAmJiBjZWxsLT5pc0Fub255bW91cygpKSB7CisgICAgICAgICAgICAgICAg
ZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqY2VsbCkuYWRkQ2hpbGQoY2hpbGQpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIC8v
IElmIGJlZm9yZUNoaWxkIGlzIGluc2lkZSBhbiBhbm9ueW1vdXMgY2VsbCwgaW5zZXJ0IGludG8g
dGhlIGNlbGwuCi0gICAgICAgIGlmIChsYXN0ICYmICFsYXN0LT5pc1RhYmxlQ2VsbCgpICYmIGxh
c3QtPnBhcmVudCgpICYmIGxhc3QtPnBhcmVudCgpLT5pc0Fub255bW91cygpICYmICFsYXN0LT5w
YXJlbnQoKS0+aXNCZWZvcmVPckFmdGVyQ29udGVudCgpKSB7CisgICAgICAgIGlmIChsYXN0ICYm
ICFpczxSZW5kZXJUYWJsZUNlbGw+KCpsYXN0KSAmJiBsYXN0LT5wYXJlbnQoKSAmJiBsYXN0LT5w
YXJlbnQoKS0+aXNBbm9ueW1vdXMoKSAmJiAhbGFzdC0+cGFyZW50KCktPmlzQmVmb3JlT3JBZnRl
ckNvbnRlbnQoKSkgewogICAgICAgICAgICAgbGFzdC0+cGFyZW50KCktPmFkZENoaWxkKGNoaWxk
LCBiZWZvcmVDaGlsZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTE0NCwx
NCArMTQ0LDE0IEBAIHZvaWQgUmVuZGVyVGFibGVSb3c6OmFkZENoaWxkKFJlbmRlck9iamVjdCog
Y2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiAgICAgaWYgKGJlZm9yZUNoaWxkICYm
IGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlzKQogICAgICAgICBiZWZvcmVDaGlsZCA9IHNw
bGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGlsZChiZWZvcmVDaGlsZCk7ICAgIAogCi0gICAgUmVu
ZGVyVGFibGVDZWxsKiBjZWxsID0gdG9SZW5kZXJUYWJsZUNlbGwoY2hpbGQpOworICAgIFJlbmRl
clRhYmxlQ2VsbCYgY2VsbCA9IGRvd25jYXN0PFJlbmRlclRhYmxlQ2VsbD4oKmNoaWxkKTsKIAog
ICAgIC8vIEdlbmVyYXRlZCBjb250ZW50IGNhbiByZXN1bHQgaW4gdXMgaGF2aW5nIGEgbnVsbCBz
ZWN0aW9uIHNvIG1ha2Ugc3VyZSB0byBudWxsIGNoZWNrIG91ciBwYXJlbnQuCiAgICAgaWYgKHBh
cmVudCgpKQotICAgICAgICBzZWN0aW9uKCktPmFkZENlbGwoY2VsbCwgdGhpcyk7CisgICAgICAg
IHNlY3Rpb24oKS0+YWRkQ2VsbCgmY2VsbCwgdGhpcyk7CiAKLSAgICBBU1NFUlQoIWJlZm9yZUNo
aWxkIHx8IGJlZm9yZUNoaWxkLT5pc1RhYmxlQ2VsbCgpKTsKLSAgICBSZW5kZXJCb3g6OmFkZENo
aWxkKGNlbGwsIGJlZm9yZUNoaWxkKTsKKyAgICBBU1NFUlQoIWJlZm9yZUNoaWxkIHx8IGlzPFJl
bmRlclRhYmxlQ2VsbD4oKmJlZm9yZUNoaWxkKSk7CisgICAgUmVuZGVyQm94OjphZGRDaGlsZCgm
Y2VsbCwgYmVmb3JlQ2hpbGQpOwogCiAgICAgaWYgKGJlZm9yZUNoaWxkIHx8IG5leHRSb3coKSkK
ICAgICAgICAgc2VjdGlvbigpLT5zZXROZWVkc0NlbGxSZWNhbGMoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgKaW5kZXggNzViZWNiNTI0OGYyMWRmOTE0OWM4MGZi
OGZmMjNhZGJiYjUwMjdjNS4uMTA5NjEyMGRlMTZhYWY3ZTYyY2E1NGQ1ODhiOWJjMGQwYWYwNGVl
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgKQEAgLTQzLDgg
KzQzLDggQEAgcHVibGljOgogICAgIFJlbmRlclRhYmxlQ2VsbCogZmlyc3RDZWxsKCkgY29uc3Q7
CiAgICAgUmVuZGVyVGFibGVDZWxsKiBsYXN0Q2VsbCgpIGNvbnN0OwogCi0gICAgUmVuZGVyVGFi
bGVTZWN0aW9uKiBzZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gdG9SZW5kZXJUYWJsZVNlY3Rpb24o
cGFyZW50KCkpOyB9Ci0gICAgUmVuZGVyVGFibGUqIHRhYmxlKCkgY29uc3QgeyByZXR1cm4gdG9S
ZW5kZXJUYWJsZShwYXJlbnQoKS0+cGFyZW50KCkpOyB9CisgICAgUmVuZGVyVGFibGVTZWN0aW9u
KiBzZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPihw
YXJlbnQoKSk7IH0KKyAgICBSZW5kZXJUYWJsZSogdGFibGUoKSBjb25zdCB7IHJldHVybiBkb3du
Y2FzdDxSZW5kZXJUYWJsZT4ocGFyZW50KCktPnBhcmVudCgpKTsgfQogCiAgICAgdm9pZCBwYWlu
dE91dGxpbmVGb3JSb3dJZk5lZWRlZChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwog
CkBAIC0xMTksMjYgKzExOSwyNCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fcm93SW5kZXgg
OiAzMTsKIH07CiAKLVJFTkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJUYWJsZVJvdywgaXNU
YWJsZVJvdygpKQotCiBpbmxpbmUgUmVuZGVyVGFibGVSb3cqIFJlbmRlclRhYmxlU2VjdGlvbjo6
Zmlyc3RSb3coKSBjb25zdAogewotICAgIHJldHVybiB0b1JlbmRlclRhYmxlUm93KFJlbmRlckJv
eDo6Zmlyc3RDaGlsZCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+KFJl
bmRlckJveDo6Zmlyc3RDaGlsZCgpKTsKIH0KIAogaW5saW5lIFJlbmRlclRhYmxlUm93KiBSZW5k
ZXJUYWJsZVNlY3Rpb246Omxhc3RSb3coKSBjb25zdAogewotICAgIHJldHVybiB0b1JlbmRlclRh
YmxlUm93KFJlbmRlckJveDo6bGFzdENoaWxkKCkpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5k
ZXJUYWJsZVJvdz4oUmVuZGVyQm94OjpsYXN0Q2hpbGQoKSk7CiB9CiAKIGlubGluZSBSZW5kZXJU
YWJsZVJvdyogUmVuZGVyVGFibGVSb3c6Om5leHRSb3coKSBjb25zdAogewotICAgIHJldHVybiB0
b1JlbmRlclRhYmxlUm93KFJlbmRlckJveDo6bmV4dFNpYmxpbmcoKSk7CisgICAgcmV0dXJuIGRv
d25jYXN0PFJlbmRlclRhYmxlUm93PihSZW5kZXJCb3g6Om5leHRTaWJsaW5nKCkpOwogfQogCiBp
bmxpbmUgUmVuZGVyVGFibGVSb3cqIFJlbmRlclRhYmxlUm93OjpwcmV2aW91c1JvdygpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIHRvUmVuZGVyVGFibGVSb3coUmVuZGVyQm94OjpwcmV2aW91c1NpYmxp
bmcoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRhYmxlUm93PihSZW5kZXJCb3g6OnBy
ZXZpb3VzU2libGluZygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAppbmRleCBhZjg0N2Q2
NDk5N2I5ZmY4MTk0MGYwZmQ3Y2RhZTQxZDM5MDk4MGU5Li4yZGJlYzVlNmFhMDI5MWFlOGFhOGMy
Nzg0M2Q3ZTk2YzQzYTQ3YWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRh
YmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGFibGVSb3cuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKICNpbmNsdWRlICJTdHlsZUluaGVyaXRlZERhdGEuaCIKICNpbmNsdWRlIDxs
aW1pdHM+CkBAIC0xMzUsMjIgKzEzNiwyMiBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6d2ls
bEJlUmVtb3ZlZEZyb21UcmVlKCkKIAogdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENoaWxk
KFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7Ci0gICAg
aWYgKCFjaGlsZC0+aXNUYWJsZVJvdygpKSB7CisgICAgaWYgKCFpczxSZW5kZXJUYWJsZVJvdz4o
KmNoaWxkKSkgewogICAgICAgICBSZW5kZXJPYmplY3QqIGxhc3QgPSBiZWZvcmVDaGlsZDsKICAg
ICAgICAgaWYgKCFsYXN0KQogICAgICAgICAgICAgbGFzdCA9IGxhc3RSb3coKTsKICAgICAgICAg
aWYgKGxhc3QgJiYgbGFzdC0+aXNBbm9ueW1vdXMoKSAmJiAhbGFzdC0+aXNCZWZvcmVPckFmdGVy
Q29udGVudCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJUYWJsZVJvdyogcm93ID0gdG9SZW5kZXJU
YWJsZVJvdyhsYXN0KTsKLSAgICAgICAgICAgIGlmIChiZWZvcmVDaGlsZCA9PSByb3cpCi0gICAg
ICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSByb3ctPmZpcnN0Q2VsbCgpOwotICAgICAgICAgICAg
cm93LT5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgUmVuZGVyVGFi
bGVSb3cmIHJvdyA9IGRvd25jYXN0PFJlbmRlclRhYmxlUm93PigqbGFzdCk7CisgICAgICAgICAg
ICBpZiAoYmVmb3JlQ2hpbGQgPT0gJnJvdykKKyAgICAgICAgICAgICAgICBiZWZvcmVDaGlsZCA9
IHJvdy5maXJzdENlbGwoKTsKKyAgICAgICAgICAgIHJvdy5hZGRDaGlsZChjaGlsZCwgYmVmb3Jl
Q2hpbGQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGJl
Zm9yZUNoaWxkICYmICFiZWZvcmVDaGlsZC0+aXNBbm9ueW1vdXMoKSAmJiBiZWZvcmVDaGlsZC0+
cGFyZW50KCkgPT0gdGhpcykgewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByb3cgPSBiZWZv
cmVDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICBpZiAocm93ICYmIHJvdy0+
aXNUYWJsZVJvdygpICYmIHJvdy0+aXNBbm9ueW1vdXMoKSkgewotICAgICAgICAgICAgICAgIHRv
UmVuZGVyVGFibGVSb3cocm93KS0+YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICAgICAgaWYgKGlz
PFJlbmRlclRhYmxlUm93Pihyb3cpICYmIHJvdy0+aXNBbm9ueW1vdXMoKSkgeworICAgICAgICAg
ICAgICAgIGRvd25jYXN0PFJlbmRlclRhYmxlUm93Pigqcm93KS5hZGRDaGlsZChjaGlsZCk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNTgs
MTAgKzE1OSwxMCBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2hpbGQoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZAogICAgICAgICAvLyBJZiBiZWZv
cmVDaGlsZCBpcyBpbnNpZGUgYW4gYW5vbnltb3VzIGNlbGwvcm93LCBpbnNlcnQgaW50byB0aGUg
Y2VsbCBvciBpbnRvCiAgICAgICAgIC8vIHRoZSBhbm9ueW1vdXMgcm93IGNvbnRhaW5pbmcgaXQs
IGlmIHRoZXJlIGlzIG9uZS4KICAgICAgICAgUmVuZGVyT2JqZWN0KiBsYXN0Qm94ID0gbGFzdDsK
LSAgICAgICAgd2hpbGUgKGxhc3RCb3ggJiYgbGFzdEJveC0+cGFyZW50KCktPmlzQW5vbnltb3Vz
KCkgJiYgIWxhc3RCb3gtPmlzVGFibGVSb3coKSkKKyAgICAgICAgd2hpbGUgKGxhc3RCb3ggJiYg
bGFzdEJveC0+cGFyZW50KCktPmlzQW5vbnltb3VzKCkgJiYgIWlzPFJlbmRlclRhYmxlUm93Pigq
bGFzdEJveCkpCiAgICAgICAgICAgICBsYXN0Qm94ID0gbGFzdEJveC0+cGFyZW50KCk7CiAgICAg
ICAgIGlmIChsYXN0Qm94ICYmIGxhc3RCb3gtPmlzQW5vbnltb3VzKCkgJiYgIWxhc3RCb3gtPmlz
QmVmb3JlT3JBZnRlckNvbnRlbnQoKSkgewotICAgICAgICAgICAgdG9SZW5kZXJUYWJsZVJvdyhs
YXN0Qm94KS0+YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgIGRvd25j
YXN0PFJlbmRlclRhYmxlUm93PigqbGFzdEJveCkuYWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxk
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xODAsOSArMTgxLDkgQEAg
dm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQKIAogICAgIGVuc3VyZVJvd3MobV9jUm93KTsKIAotICAg
IFJlbmRlclRhYmxlUm93KiByb3cgPSB0b1JlbmRlclRhYmxlUm93KGNoaWxkKTsKLSAgICBtX2dy
aWRbaW5zZXJ0aW9uUm93XS5yb3dSZW5kZXJlciA9IHJvdzsKLSAgICByb3ctPnNldFJvd0luZGV4
KGluc2VydGlvblJvdyk7CisgICAgUmVuZGVyVGFibGVSb3cmIHJvdyA9IGRvd25jYXN0PFJlbmRl
clRhYmxlUm93PigqY2hpbGQpOworICAgIG1fZ3JpZFtpbnNlcnRpb25Sb3ddLnJvd1JlbmRlcmVy
ID0gJnJvdzsKKyAgICByb3cuc2V0Um93SW5kZXgoaW5zZXJ0aW9uUm93KTsKIAogICAgIGlmICgh
YmVmb3JlQ2hpbGQpCiAgICAgICAgIHNldFJvd0xvZ2ljYWxIZWlnaHRUb1Jvd1N0eWxlTG9naWNh
bEhlaWdodElmTm90UmVsYXRpdmUobV9ncmlkW2luc2VydGlvblJvd10pOwpAQCAtMTkwLDcgKzE5
MSw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNo
aWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkCiAgICAgaWYgKGJlZm9yZUNoaWxkICYmIGJl
Zm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlzKQogICAgICAgICBiZWZvcmVDaGlsZCA9IHNwbGl0
QW5vbnltb3VzQm94ZXNBcm91bmRDaGlsZChiZWZvcmVDaGlsZCk7CiAKLSAgICBBU1NFUlQoIWJl
Zm9yZUNoaWxkIHx8IGJlZm9yZUNoaWxkLT5pc1RhYmxlUm93KCkpOworICAgIEFTU0VSVCghYmVm
b3JlQ2hpbGQgfHwgaXM8UmVuZGVyVGFibGVSb3c+KCpiZWZvcmVDaGlsZCkpOwogICAgIFJlbmRl
ckJveDo6YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKIH0KIApAQCAtNTc3LDExICs1Nzgs
MTEgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoKQogICAgICAgICAgICAg
Ym9vbCBmbGV4QWxsQ2hpbGRyZW4gPSBjZWxsLT5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKS5pc0Zp
eGVkKCkKICAgICAgICAgICAgICAgICB8fCAoIXRhYmxlKCktPnN0eWxlKCkubG9naWNhbEhlaWdo
dCgpLmlzQXV0bygpICYmIHJIZWlnaHQgIT0gY2VsbC0+bG9naWNhbEhlaWdodCgpKTsKIAotICAg
ICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIG8gPSBjZWxsLT5maXJzdENoaWxkKCk7IG87IG8g
PSBvLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFvLT5pc1RleHQoKSAm
JiBvLT5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKS5pc1BlcmNlbnQoKSAmJiAoZmxleEFsbENoaWxk
cmVuIHx8ICgoby0+aXNSZXBsYWNlZCgpIHx8IChvLT5pc0JveCgpICYmIHRvUmVuZGVyQm94KG8p
LT5zY3JvbGxzT3ZlcmZsb3coKSkpICYmICFvLT5pc1RleHRDb250cm9sKCkpKSkgeworICAgICAg
ICAgICAgZm9yIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY2VsbC0+Zmlyc3RDaGlsZCgpOyBy
ZW5kZXJlcjsgcmVuZGVyZXIgPSByZW5kZXJlci0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAg
ICAgICAgIGlmICghaXM8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKSAmJiByZW5kZXJlci0+c3R5bGUo
KS5sb2dpY2FsSGVpZ2h0KCkuaXNQZXJjZW50KCkgJiYgKGZsZXhBbGxDaGlsZHJlbiB8fCAoKHJl
bmRlcmVyLT5pc1JlcGxhY2VkKCkgfHwgKGlzPFJlbmRlckJveD4oKnJlbmRlcmVyKSAmJiBkb3du
Y2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcikuc2Nyb2xsc092ZXJmbG93KCkpKSAmJiAhaXM8UmVu
ZGVyVGV4dENvbnRyb2w+KCpyZW5kZXJlcikpKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBU
YWJsZXMgd2l0aCBubyBzZWN0aW9ucyBkbyBub3QgZmxleC4KLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFvLT5pc1RhYmxlKCkgfHwgdG9SZW5kZXJUYWJsZShvKS0+aGFzU2VjdGlvbnMoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgby0+c2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFpczxSZW5kZXJUYWJsZT4oKnJlbmRlcmVyKSB8fCBk
b3duY2FzdDxSZW5kZXJUYWJsZT4oKnJlbmRlcmVyKS5oYXNTZWN0aW9ucygpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxDaGlsZHJlbkZsZXggPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtOTg1LDEzICs5ODYsMTMgQEAg
dm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50Q2VsbChSZW5kZXJUYWJsZUNlbGwqIGNlbGws
IFBhaW50SW5mbyYgcGFpbnRJbmZvLAogewogICAgIExheW91dFBvaW50IGNlbGxQb2ludCA9IGZs
aXBGb3JXcml0aW5nTW9kZUZvckNoaWxkKGNlbGwsIHBhaW50T2Zmc2V0KTsKICAgICBQYWludFBo
YXNlIHBhaW50UGhhc2UgPSBwYWludEluZm8ucGhhc2U7Ci0gICAgUmVuZGVyVGFibGVSb3cqIHJv
dyA9IHRvUmVuZGVyVGFibGVSb3coY2VsbC0+cGFyZW50KCkpOworICAgIFJlbmRlclRhYmxlUm93
JiByb3cgPSBkb3duY2FzdDxSZW5kZXJUYWJsZVJvdz4oKmNlbGwtPnBhcmVudCgpKTsKIAogICAg
IGlmIChwYWludFBoYXNlID09IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQgfHwgcGFpbnRQaGFz
ZSA9PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmQpIHsKICAgICAgICAgLy8gV2UgbmVl
ZCB0byBoYW5kbGUgcGFpbnRpbmcgYSBzdGFjayBvZiBiYWNrZ3JvdW5kcy4gIFRoaXMgc3RhY2sg
KGZyb20gYm90dG9tIHRvIHRvcCkgY29uc2lzdHMgb2YKICAgICAgICAgLy8gdGhlIGNvbHVtbiBn
cm91cCwgY29sdW1uLCByb3cgZ3JvdXAsIHJvdywgYW5kIHRoZW4gdGhlIGNlbGwuCiAgICAgICAg
IFJlbmRlclRhYmxlQ29sKiBjb2x1bW4gPSB0YWJsZSgpLT5jb2xFbGVtZW50KGNlbGwtPmNvbCgp
KTsKLSAgICAgICAgUmVuZGVyVGFibGVDb2wqIGNvbHVtbkdyb3VwID0gY29sdW1uID8gY29sdW1u
LT5lbmNsb3NpbmdDb2x1bW5Hcm91cCgpIDogMDsKKyAgICAgICAgUmVuZGVyVGFibGVDb2wqIGNv
bHVtbkdyb3VwID0gY29sdW1uID8gY29sdW1uLT5lbmNsb3NpbmdDb2x1bW5Hcm91cCgpIDogbnVs
bHB0cjsKIAogICAgICAgICAvLyBDb2x1bW4gZ3JvdXBzIGFuZCBjb2x1bW5zIGZpcnN0LgogICAg
ICAgICAvLyBGSVhNRTogQ29sdW1ucyBhbmQgY29sdW1uIGdyb3VwcyBkbyBub3QgY3VycmVudGx5
IHN1cHBvcnQgb3BhY2l0eSwgYW5kIHRoZXkgYXJlIGJlaW5nIHBhaW50ZWQgInRvbyBsYXRlIiBp
bgpAQCAtMTAwNiwxMCArMTAwNywxMCBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRD
ZWxsKFJlbmRlclRhYmxlQ2VsbCogY2VsbCwgUGFpbnRJbmZvJiBwYWludEluZm8sCiAKICAgICAg
ICAgLy8gUGFpbnQgdGhlIHJvdyBuZXh0LCBidXQgb25seSBpZiBpdCBkb2Vzbid0IGhhdmUgYSBs
YXllci4gIElmIGEgcm93IGhhcyBhIGxheWVyLCBpdCB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvcgog
ICAgICAgICAvLyBwYWludGluZyB0aGUgcm93IGJhY2tncm91bmQgZm9yIHRoZSBjZWxsLgotICAg
ICAgICBpZiAoIXJvdy0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkKLSAgICAgICAgICAgIGNlbGwt
PnBhaW50QmFja2dyb3VuZHNCZWhpbmRDZWxsKHBhaW50SW5mbywgY2VsbFBvaW50LCByb3cpOwor
ICAgICAgICBpZiAoIXJvdy5oYXNTZWxmUGFpbnRpbmdMYXllcigpKQorICAgICAgICAgICAgY2Vs
bC0+cGFpbnRCYWNrZ3JvdW5kc0JlaGluZENlbGwocGFpbnRJbmZvLCBjZWxsUG9pbnQsICZyb3cp
OwogICAgIH0KLSAgICBpZiAoKCFjZWxsLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmICFyb3ct
Pmhhc1NlbGZQYWludGluZ0xheWVyKCkpKQorICAgIGlmICgoIWNlbGwtPmhhc1NlbGZQYWludGlu
Z0xheWVyKCkgJiYgIXJvdy5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSkKICAgICAgICAgY2VsbC0+
cGFpbnQocGFpbnRJbmZvLCBjZWxsUG9pbnQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKaW5kZXggYjRiMzBjMTY0ZWIwMmM3ZmYxZjI4OTc0
ZGY5OGRkYmU5OGY3ODYxNS4uZWU4NTkyOTI1YmQxNTA2NjAwMjk0N2NhOGE0OGQ2YTZmOWEwZmM3
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaApA
QCAtODEsNyArODEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBsYXlvdXRSb3dzKCk7CiAgICAgdm9p
ZCBjb21wdXRlT3ZlcmZsb3dGcm9tQ2VsbHMoKTsKIAotICAgIFJlbmRlclRhYmxlKiB0YWJsZSgp
IGNvbnN0IHsgcmV0dXJuIHRvUmVuZGVyVGFibGUocGFyZW50KCkpOyB9CisgICAgUmVuZGVyVGFi
bGUqIHRhYmxlKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGFibGU+KHBhcmVudCgp
KTsgfQogCiAgICAgc3RydWN0IENlbGxTdHJ1Y3QgewogICAgICAgICBWZWN0b3I8UmVuZGVyVGFi
bGVDZWxsKiwgMT4gY2VsbHM7IApAQCAtMzQ3LDggKzM0Nyw2IEBAIHByaXZhdGU6CiAgICAgSGFz
aE1hcDxzdGQ6OnBhaXI8Y29uc3QgUmVuZGVyVGFibGVDZWxsKiwgaW50PiwgQ29sbGFwc2VkQm9y
ZGVyVmFsdWUgPiBtX2NlbGxzQ29sbGFwc2VkQm9yZGVyczsKIH07CiAKLVJFTkRFUl9PQkpFQ1Rf
VFlQRV9DQVNUUyhSZW5kZXJUYWJsZVNlY3Rpb24sIGlzVGFibGVTZWN0aW9uKCkpCi0KIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNU
KFJlbmRlclRhYmxlU2VjdGlvbiwgaXNUYWJsZVNlY3Rpb24oKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBkZDkwYzViZTk5ZThkY2RlNGY3
YzJlY2Q1ZTVhNmNhMGI5NDhmMTE1Li5iN2NkZTc0Yjc5Y2MyMWI0YjNkNmI5ZWE2YjNhNDExOGRj
NzI5ZTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQu
Y3BwCkBAIC00NjcsOCArNDY3LDggQEAgc3RhdGljIHZvaWQgd3JpdGVUZXh0UnVuKFRleHRTdHJl
YW0mIHRzLCBjb25zdCBSZW5kZXJUZXh0JiBvLCBjb25zdCBJbmxpbmVUZXh0Qm8KICAgICBpbnQg
bG9naWNhbFdpZHRoID0gY2VpbGYocnVuLmxlZnQoKSArIHJ1bi5sb2dpY2FsV2lkdGgoKSkgLSB4
OwogCiAgICAgLy8gRklYTUU6IFRhYmxlIGNlbGwgYWRqdXN0bWVudCBpcyB0ZW1wb3JhcnkgdW50
aWwgcmVzdWx0cyBjYW4gYmUgdXBkYXRlZC4KLSAgICBpZiAoby5jb250YWluaW5nQmxvY2soKS0+
aXNUYWJsZUNlbGwoKSkKLSAgICAgICAgeSAtPSB0b1JlbmRlclRhYmxlQ2VsbChvLmNvbnRhaW5p
bmdCbG9jaygpKS0+aW50cmluc2ljUGFkZGluZ0JlZm9yZSgpOworICAgIGlmIChpczxSZW5kZXJU
YWJsZUNlbGw+KCpvLmNvbnRhaW5pbmdCbG9jaygpKSkKKyAgICAgICAgeSAtPSBkb3duY2FzdDxS
ZW5kZXJUYWJsZUNlbGw+KCpvLmNvbnRhaW5pbmdCbG9jaygpKS5pbnRyaW5zaWNQYWRkaW5nQmVm
b3JlKCk7CiAgICAgICAgIAogICAgIHRzIDw8ICJ0ZXh0IHJ1biBhdCAoIiA8PCB4IDw8ICIsIiA8
PCB5IDw8ICIpIHdpZHRoICIgPDwgbG9naWNhbFdpZHRoOwogICAgIGlmICghcnVuLmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSB8fCBydW4uZGlyT3ZlcnJpZGUoKSkgewpAQCAtNDg5LDggKzQ4OSw4
IEBAIHN0YXRpYyB2b2lkIHdyaXRlU2ltcGxlTGluZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVu
ZGVyVGV4dCYgbywgY29uc3QgTGF5b3V0UmVjCiAgICAgaW50IHkgPSByZWN0LnkoKTsKICAgICBp
bnQgbG9naWNhbFdpZHRoID0gY2VpbGYocmVjdC54KCkgKyByZWN0LndpZHRoKCkpIC0geDsKIAot
ICAgIGlmIChvLmNvbnRhaW5pbmdCbG9jaygpLT5pc1RhYmxlQ2VsbCgpKQotICAgICAgICB5IC09
IHRvUmVuZGVyVGFibGVDZWxsKG8uY29udGFpbmluZ0Jsb2NrKCkpLT5pbnRyaW5zaWNQYWRkaW5n
QmVmb3JlKCk7CisgICAgaWYgKGlzPFJlbmRlclRhYmxlQ2VsbD4oKm8uY29udGFpbmluZ0Jsb2Nr
KCkpKQorICAgICAgICB5IC09IGRvd25jYXN0PFJlbmRlclRhYmxlQ2VsbD4oKm8uY29udGFpbmlu
Z0Jsb2NrKCkpLmludHJpbnNpY1BhZGRpbmdCZWZvcmUoKTsKICAgICAgICAgCiAgICAgdHMgPDwg
InRleHQgcnVuIGF0ICgiIDw8IHggPDwgIiwiIDw8IHkgPDwgIikgd2lkdGggIiA8PCBsb2dpY2Fs
V2lkdGg7CiAgICAgdHMgPDwgIjogIgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239731</attachid>
            <date>2014-10-13 10:24:28 -0700</date>
            <delta_ts>2014-10-13 11:21:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137641-20141013102433.patch</filename>
            <type>text/plain</type>
            <size>73440</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NjQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2RlYjYzYjdlYThkMGI4
YjMyODE0NGEzZTY5MTdmYzY4ZjFkZjU4OS4uOGNiNmIwYTg5ZTE2OGQzNmNhMzJlMzU5ZjVhYmMx
OGM1YWUxYmFjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDE0LTEwLTExICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25j
YXN0PD4oKSBmb3IgVGFibGUgcmVuZGVyIG9iamVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzY0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE1p
aG5lYSBPdmlkZW5pZS4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciB0
YWJsZS1yZWxhdGVkIHJlbmRlciBvYmplY3RzIGFuZCBjbGVhbgorICAgICAgICB1cCB0aGUgc3Vy
cm91bmRpbmcgY29kZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5n
ZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZDo6YWRkQ2hpbGRyZW4pOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6dGFibGVFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6aXNEYXRhVGFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjppc1RhYmxlRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxp
dHkpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjphZGRDaGlsZHJlbik6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OnBhcmVudFRhYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OnJvd0luZGV4UmFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6Y29sdW1uSW5kZXhSYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjp0aXRsZVVJRWxl
bWVudCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uOjpoZWFkZXJP
YmplY3QpOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKToKKyAg
ICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzaG91
bGRFbWl0VGFiQmVmb3JlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRFbWl0TmV3bGlu
ZXNCZWZvcmVBbmRBZnRlck5vZGUpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlQ2VsbEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50OjpjZWxsQWJv
dmUpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICog
bWF0aG1sL01hdGhNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWF0aE1MRWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXV0b1RhYmxlTGF5b3V0OjpyZWNhbGNDb2x1bW4pOgor
ICAgICAgICAoV2ViQ29yZTo6c2hvdWxkU2NhbGVDb2x1bW5zKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxv
dzo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUGVyY2Vu
dGFnZUxvZ2ljYWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpsYXlvdXRP
dmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6YWRkQ2hpbGQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmFkZENoaWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGU6OmZpcnN0Q29sdW1uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlOjpyZWNhbGNTZWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6c2Vj
dGlvbkFib3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpzZWN0aW9uQmVsb3cp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmJvdHRvbVNlY3Rpb24pOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
YWJsZUNhcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDYXB0aW9uOjp0
YWJsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpuZXh0Q2VsbCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZUNlbGw6OnByZXZpb3VzQ2VsbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
YWJsZVJvdzo6Zmlyc3RDZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93Ojps
YXN0Q2VsbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ29sOjp0YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZUNvbDo6ZW5jbG9zaW5nQ29sdW1uR3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGVDb2w6Om5leHRDb2x1bW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
YWJsZUNvbC5oOgorICAgICAgICBNYWtlIHVwZGF0ZUZyb21FbGVtZW50KCkgcHVibGljIHRvIGFs
bG93IHRoZSBjYWxsZXJzIHRvIHVzZSB0aWdodGVyCisgICAgICAgIHR5cGluZyBhbmQgZGV2aXR1
YWxpemUgdGhlIGNhbGwgYXMgdGhlIGNsYXNzIGlzIGZpbmFsLgorCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRhYmxlUm93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93
OjphZGRDaGlsZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmZpcnN0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bGFzdFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVJvdzo6bmV4dFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVJv
dzo6cHJldmlvdXNSb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpwYWludENlbGwpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVRleHRSdW4pOgorICAgICAg
ICAoV2ViQ29yZTo6d3JpdGVTaW1wbGVMaW5lKToKKwogMjAxNC0xMC0xMyAgTWlobmVhIE92aWRl
bmllICA8bWlobmVhQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTUmVnaW9uc10gTWFrZSBSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudDo6Y29tcHV0ZVN0eWxlSW5SZWdpb24gY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNw
cAppbmRleCBmODJjNzBlNDdiNWI0Y2VjMjcwZmUxNmZlMGJjNzZlZDNlMWJlODUzLi4xMWUyMWYw
ZTBmZjc5ZDkyZWNhZDZmMjlkMTE5ZTU4YmM0ODEyYWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCkBAIC0xMTcs
MTIgKzExNywxMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlBUklBR3JpZDo6YWRkQ2hpbGRyZW4oKQog
ICAgIGZvciAoUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGNoaWxkID0gZmlyc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBib29sIGZv
b3RlclNlY3Rpb24gPSBmYWxzZTsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogY2hpbGRSZW5k
ZXJlciA9IGNoaWxkLT5yZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGRSZW5kZXJl
ci0+aXNUYWJsZVNlY3Rpb24oKSkgewotICAgICAgICAgICAgICAgIGlmIChSZW5kZXJUYWJsZVNl
Y3Rpb24qIGNoaWxkU2VjdGlvbiA9IHRvUmVuZGVyVGFibGVTZWN0aW9uKGNoaWxkUmVuZGVyZXIp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFNlY3Rpb24gPT0gY2hpbGRTZWN0aW9u
LT50YWJsZSgpLT5mb290ZXIoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9vdGVyU2Vj
dGlvbnMuYXBwZW5kKGNoaWxkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvb3RlclNlY3Rp
b24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaXM8UmVu
ZGVyVGFibGVTZWN0aW9uPigqY2hpbGRSZW5kZXJlcikpIHsKKyAgICAgICAgICAgICAgICBSZW5k
ZXJUYWJsZVNlY3Rpb24mIGNoaWxkU2VjdGlvbiA9IGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlv
bj4oKmNoaWxkUmVuZGVyZXIpOworICAgICAgICAgICAgICAgIGlmICgmY2hpbGRTZWN0aW9uID09
IGNoaWxkU2VjdGlvbi50YWJsZSgpLT5mb290ZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBm
b290ZXJTZWN0aW9ucy5hcHBlbmQoY2hpbGQpOworICAgICAgICAgICAgICAgICAgICBmb290ZXJT
ZWN0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlLmNwcAppbmRleCA3NmRmM2M2ODI3YTg0NDk1YWM5ZmFlMmRmYzBlYWVhZTAwMDA1MTBlLi4x
MWZmZDE0NjEyOGFiZjA4OWJjMzQyYmJhNzNhYTk2ZjhlOTZjZjNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCkBAIC05Miwx
NiArOTIsMTYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGU6OmlzQWNjZXNzaWJpbGl0eVRhYmxl
KCkgY29uc3QKIAogSFRNTFRhYmxlRWxlbWVudCogQWNjZXNzaWJpbGl0eVRhYmxlOjp0YWJsZUVs
ZW1lbnQoKSBjb25zdAogewotICAgIGlmICghbV9yZW5kZXJlci0+aXNUYWJsZSgpKQorICAgIGlm
ICghaXM8UmVuZGVyVGFibGU+KCptX3JlbmRlcmVyKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgCi0gICAgUmVuZGVyVGFibGUqIHRhYmxlID0gdG9SZW5kZXJUYWJsZShtX3JlbmRlcmVy
KTsKLSAgICBpZiAoaXM8SFRNTFRhYmxlRWxlbWVudD4odGFibGUtPmVsZW1lbnQoKSkpCi0gICAg
ICAgIHJldHVybiBkb3duY2FzdDxIVE1MVGFibGVFbGVtZW50Pih0YWJsZS0+ZWxlbWVudCgpKTsK
KyAgICBSZW5kZXJUYWJsZSYgdGFibGUgPSBkb3duY2FzdDxSZW5kZXJUYWJsZT4oKm1fcmVuZGVy
ZXIpOworICAgIGlmIChpczxIVE1MVGFibGVFbGVtZW50Pih0YWJsZS5lbGVtZW50KCkpKQorICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4odGFibGUuZWxlbWVudCgpKTsK
ICAgICAKICAgICAvLyBJZiB0aGUgdGFibGUgaGFzIGEgZGlzcGxheTp0YWJsZS1yb3ctZ3JvdXAs
IHRoZW4gdGhlIFJlbmRlclRhYmxlIGRvZXMgbm90IGhhdmUgYSBwb2ludGVyIHRvIGl0J3MgSFRN
TFRhYmxlRWxlbWVudC4KICAgICAvLyBXZSBjYW4gaW5zdGVhZCBmaW5kIGl0IGJ5IGFza2luZyB0
aGUgZmlyc3RTZWN0aW9uIGZvciBpdHMgcGFyZW50LgotICAgIFJlbmRlclRhYmxlU2VjdGlvbiog
Zmlyc3RCb2R5ID0gdGFibGUtPmZpcnN0Qm9keSgpOworICAgIFJlbmRlclRhYmxlU2VjdGlvbiog
Zmlyc3RCb2R5ID0gdGFibGUuZmlyc3RCb2R5KCk7CiAgICAgaWYgKCFmaXJzdEJvZHkgfHwgIWZp
cnN0Qm9keS0+ZWxlbWVudCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKQEAgLTEy
NywxNiArMTI3LDE0IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc0RhdGFUYWJsZSgpIGNv
bnN0CiAgICAgaWYgKG5vZGUoKSAmJiBub2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoIW1fcmVuZGVyZXItPmlzVGFibGUoKSkKKyAgICBp
ZiAoIWlzPFJlbmRlclRhYmxlPigqbV9yZW5kZXJlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIC8vIFRoaXMgZW1wbG95cyBhIGhldXJpc3RpYyB0byBkZXRlcm1pbmUgaWYgdGhpcyB0
YWJsZSBzaG91bGQgYXBwZWFyLgogICAgIC8vIE9ubHkgImRhdGEiIHRhYmxlcyBzaG91bGQgYmUg
ZXhwb3NlZCBhcyB0YWJsZXMuCiAgICAgLy8gVW5mb3J0dW5hdGVseSwgdGhlcmUgaXMgbm8gZ29v
ZCB3YXkgdG8gZGV0ZXJtaW5lIHRoZSBkaWZmZXJlbmNlCiAgICAgLy8gYmV0d2VlbiBhICJsYXlv
dXQiIHRhYmxlIGFuZCBhICJkYXRhIiB0YWJsZS4KLSAgICBSZW5kZXJUYWJsZSogdGFibGUgPSB0
b1JlbmRlclRhYmxlKG1fcmVuZGVyZXIpOwotICAgIEhUTUxUYWJsZUVsZW1lbnQqIHRhYmxlRWxl
bWVudCA9IHRoaXMtPnRhYmxlRWxlbWVudCgpOwotICAgIGlmICh0YWJsZUVsZW1lbnQpIHsKKyAg
ICBpZiAoSFRNTFRhYmxlRWxlbWVudCogdGFibGVFbGVtZW50ID0gdGhpcy0+dGFibGVFbGVtZW50
KCkpIHsKICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBjYXB0aW9uIGVsZW1lbnQsIHN1bW1hcnks
IFRIRUFELCBvciBURk9PVCBzZWN0aW9uLCBpdCdzIG1vc3QgY2VydGFpbmx5IGEgZGF0YSB0YWJs
ZS4KICAgICAgICAgaWYgKCF0YWJsZUVsZW1lbnQtPnN1bW1hcnkoKS5pc0VtcHR5KCkgfHwgdGFi
bGVFbGVtZW50LT50SGVhZCgpIHx8IHRhYmxlRWxlbWVudC0+dEZvb3QoKSB8fCB0YWJsZUVsZW1l
bnQtPmNhcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTQ2LDE2ICsxNDQs
MTcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGU6OmlzRGF0YVRhYmxlKCkgY29uc3QKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgIC8vIElmIHRoZXJlJ3MgYSBjb2xncm91cCBv
ciBjb2wgZWxlbWVudCwgaXQncyBwcm9iYWJseSBhIGRhdGEgdGFibGUuCi0gICAgICAgIGZvciAo
Y29uc3QgYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxFbGVtZW50PigqdGFibGVFbGVtZW50
KSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8SFRN
TEVsZW1lbnQ+KCp0YWJsZUVsZW1lbnQpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQuaGFzVGFn
TmFtZShjb2xUYWcpIHx8IGNoaWxkLmhhc1RhZ05hbWUoY29sZ3JvdXBUYWcpKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIFJlbmRlclRh
YmxlJiB0YWJsZSA9IGRvd25jYXN0PFJlbmRlclRhYmxlPigqbV9yZW5kZXJlcik7CiAgICAgLy8g
Z28gdGhyb3VnaCB0aGUgY2VsbCdzIGFuZCBjaGVjayBmb3IgdGVsbC10YWxlIHNpZ25zIG9mICJk
YXRhIiB0YWJsZSBzdGF0dXMKICAgICAvLyBjZWxscyBoYXZlIGJvcmRlcnMsIG9yIHVzZSBhdHRy
aWJ1dGVzIGxpa2UgaGVhZGVycywgYWJiciwgc2NvcGUgb3IgYXhpcwotICAgIHRhYmxlLT5yZWNh
bGNTZWN0aW9uc0lmTmVlZGVkKCk7Ci0gICAgUmVuZGVyVGFibGVTZWN0aW9uKiBmaXJzdEJvZHkg
PSB0YWJsZS0+Zmlyc3RCb2R5KCk7CisgICAgdGFibGUucmVjYWxjU2VjdGlvbnNJZk5lZWRlZCgp
OworICAgIFJlbmRlclRhYmxlU2VjdGlvbiogZmlyc3RCb2R5ID0gdGFibGUuZmlyc3RCb2R5KCk7
CiAgICAgaWYgKCFmaXJzdEJvZHkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKQEAgLTE3
MSw3ICsxNzAsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6aXNEYXRhVGFibGUoKSBjb25z
dAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICAvLyBTdG9yZSB0aGUgYmFja2dyb3Vu
ZCBjb2xvciBvZiB0aGUgdGFibGUgdG8gY2hlY2sgYWdhaW5zdCBjZWxsJ3MgYmFja2dyb3VuZCBj
b2xvcnMuCi0gICAgY29uc3QgUmVuZGVyU3R5bGUmIHRhYmxlU3R5bGUgPSB0YWJsZS0+c3R5bGUo
KTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgdGFibGVTdHlsZSA9IHRhYmxlLnN0eWxlKCk7CiAg
ICAgQ29sb3IgdGFibGVCR0NvbG9yID0gdGFibGVTdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgIAogICAgIC8vIGNoZWNrIGVub3VnaCBv
ZiB0aGUgY2VsbHMgdG8gZmluZCBpZiB0aGUgdGFibGUgbWF0Y2hlcyBvdXIgY3JpdGVyaWEKQEAg
LTIwNiwxNiArMjA1LDE2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc0RhdGFUYWJsZSgp
IGNvbnN0CiAgICAgICAgICAgICBpZiAoY2VsbC0+d2lkdGgoKSA8IDEgfHwgY2VsbC0+aGVpZ2h0
KCkgPCAxKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICB2YWxpZENlbGxDb3VudCsrOworICAgICAgICAgICAgKyt2YWxpZENlbGxDb3VudDsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgYm9vbCBpc1RIQ2VsbCA9IGNlbGxFbGVtZW50LT5oYXNU
YWdOYW1lKHRoVGFnKTsKICAgICAgICAgICAgIC8vIElmIHRoZSBmaXJzdCByb3cgaXMgY29tcHJp
c2VkIG9mIGFsbCA8dGg+IHRhZ3MsIGFzc3VtZSBpdCBpcyBhIGRhdGEgdGFibGUuCiAgICAgICAg
ICAgICBpZiAoIXJvdyAmJiBpc1RIQ2VsbCkKLSAgICAgICAgICAgICAgICBoZWFkZXJzSW5GaXJz
dFJvd0NvdW50Kys7CisgICAgICAgICAgICAgICAgKytoZWFkZXJzSW5GaXJzdFJvd0NvdW50Owog
CiAgICAgICAgICAgICAvLyBJZiB0aGUgZmlyc3QgY29sdW1uIGlzIGNvbXByaXNlZCBvZiBhbGwg
PHRoPiB0YWdzLCBhc3N1bWUgaXQgaXMgYSBkYXRhIHRhYmxlLgogICAgICAgICAgICAgaWYgKCFj
b2wgJiYgaXNUSENlbGwpCi0gICAgICAgICAgICAgICAgaGVhZGVyc0luRmlyc3RDb2x1bW5Db3Vu
dCsrOworICAgICAgICAgICAgICAgICsraGVhZGVyc0luRmlyc3RDb2x1bW5Db3VudDsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgZGV2ZWxvcGVyIGV4cGxp
Y2l0bHkgYXNzaWduZWQgYSAiZGF0YSIgdGFibGUgYXR0cmlidXRlLgogICAgICAgICAgICAgaWYg
KGlzPEhUTUxUYWJsZUNlbGxFbGVtZW50PigqY2VsbEVsZW1lbnQpKSB7CkBAIC0yMzMsMjUgKzIz
MiwyNSBAQCBib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6aXNEYXRhVGFibGUoKSBjb25zdAogICAg
ICAgICAgICAgLy8gSWYgYSBjZWxsIGhhcyBtYXRjaGluZyBib3JkZXJlZCBzaWRlcywgY2FsbCBp
dCBhIChmdWxseSkgYm9yZGVyZWQgY2VsbC4KICAgICAgICAgICAgIGlmICgoY2VsbC0+Ym9yZGVy
VG9wKCkgPiAwICYmIGNlbGwtPmJvcmRlckJvdHRvbSgpID4gMCkKICAgICAgICAgICAgICAgICB8
fCAoY2VsbC0+Ym9yZGVyTGVmdCgpID4gMCAmJiBjZWxsLT5ib3JkZXJSaWdodCgpID4gMCkpCi0g
ICAgICAgICAgICAgICAgYm9yZGVyZWRDZWxsQ291bnQrKzsKKyAgICAgICAgICAgICAgICArK2Jv
cmRlcmVkQ2VsbENvdW50OwogCiAgICAgICAgICAgICAvLyBBbHNvIGtlZXAgdHJhY2sgb2YgZWFj
aCBpbmRpdmlkdWFsIGJvcmRlciwgc28gd2UgY2FuIGNhdGNoIHRhYmxlcyB3aGVyZSBtb3N0CiAg
ICAgICAgICAgICAvLyBjZWxscyBoYXZlIGEgYm90dG9tIGJvcmRlciwgZm9yIGV4YW1wbGUuCiAg
ICAgICAgICAgICBpZiAoY2VsbC0+Ym9yZGVyVG9wKCkgPiAwKQotICAgICAgICAgICAgICAgIGNl
bGxzV2l0aFRvcEJvcmRlcisrOworICAgICAgICAgICAgICAgICsrY2VsbHNXaXRoVG9wQm9yZGVy
OwogICAgICAgICAgICAgaWYgKGNlbGwtPmJvcmRlckJvdHRvbSgpID4gMCkKLSAgICAgICAgICAg
ICAgICBjZWxsc1dpdGhCb3R0b21Cb3JkZXIrKzsKKyAgICAgICAgICAgICAgICArK2NlbGxzV2l0
aEJvdHRvbUJvcmRlcjsKICAgICAgICAgICAgIGlmIChjZWxsLT5ib3JkZXJMZWZ0KCkgPiAwKQot
ICAgICAgICAgICAgICAgIGNlbGxzV2l0aExlZnRCb3JkZXIrKzsKKyAgICAgICAgICAgICAgICAr
K2NlbGxzV2l0aExlZnRCb3JkZXI7CiAgICAgICAgICAgICBpZiAoY2VsbC0+Ym9yZGVyUmlnaHQo
KSA+IDApCi0gICAgICAgICAgICAgICAgY2VsbHNXaXRoUmlnaHRCb3JkZXIrKzsKKyAgICAgICAg
ICAgICAgICArK2NlbGxzV2l0aFJpZ2h0Qm9yZGVyOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICAvLyBJZiB0aGUgY2VsbCBoYXMgYSBkaWZmZXJlbnQgY29sb3IgZnJvbSB0aGUgdGFibGUgYW5k
IHRoZXJlIGlzIGNlbGwgc3BhY2luZywKICAgICAgICAgICAgIC8vIHRoZW4gaXQgaXMgcHJvYmFi
bHkgYSBkYXRhIHRhYmxlIGNlbGwgKHNwYWNpbmcgYW5kIGNvbG9ycyB0YWtlIHRoZSBwbGFjZSBv
ZiBib3JkZXJzKS4KICAgICAgICAgICAgIENvbG9yIGNlbGxDb2xvciA9IHJlbmRlclN0eWxlLnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7Ci0gICAgICAg
ICAgICBpZiAodGFibGUtPmhCb3JkZXJTcGFjaW5nKCkgPiAwICYmIHRhYmxlLT52Qm9yZGVyU3Bh
Y2luZygpID4gMAorICAgICAgICAgICAgaWYgKHRhYmxlLmhCb3JkZXJTcGFjaW5nKCkgPiAwICYm
IHRhYmxlLnZCb3JkZXJTcGFjaW5nKCkgPiAwCiAgICAgICAgICAgICAgICAgJiYgdGFibGVCR0Nv
bG9yICE9IGNlbGxDb2xvciAmJiBjZWxsQ29sb3IuYWxwaGEoKSAhPSAxKQotICAgICAgICAgICAg
ICAgIGJhY2tncm91bmREaWZmZXJlbmNlQ2VsbENvdW50Kys7CisgICAgICAgICAgICAgICAgKyti
YWNrZ3JvdW5kRGlmZmVyZW5jZUNlbGxDb3VudDsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
Ly8gSWYgd2UndmUgZm91bmQgMTAgImdvb2QiIGNlbGxzLCB3ZSBkb24ndCBuZWVkIHRvIGtlZXAg
c2VhcmNoaW5nLgogICAgICAgICAgICAgaWYgKGJvcmRlcmVkQ2VsbENvdW50ID49IDEwIHx8IGJh
Y2tncm91bmREaWZmZXJlbmNlQ2VsbENvdW50ID49IDEwKQpAQCAtMzI3LDcgKzMyNiw3IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc1RhYmxlRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxp
dHkoKSBjb25zdAogCiAgICAgLy8gR3RrKyBBVHMgZXhwZWN0IGFsbCB0YWJsZXMgdG8gYmUgZXhw
b3NlZCBhcyB0YWJsZXMuCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCi0gICAg
RWxlbWVudCogdGFibGVOb2RlID0gdG9SZW5kZXJUYWJsZShtX3JlbmRlcmVyKS0+ZWxlbWVudCgp
OworICAgIEVsZW1lbnQqIHRhYmxlTm9kZSA9IGRvd25jYXN0PFJlbmRlclRhYmxlPigqbV9yZW5k
ZXJlcikuZWxlbWVudCgpOwogICAgIHJldHVybiBpczxIVE1MVGFibGVFbGVtZW50Pih0YWJsZU5v
ZGUpOwogI2VuZGlmCiAKQEAgLTM1NiwxNyArMzU1LDE3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVRh
YmxlOjphZGRDaGlsZHJlbigpCiAgICAgQVNTRVJUKCFtX2hhdmVDaGlsZHJlbik7IAogICAgIAog
ICAgIG1faGF2ZUNoaWxkcmVuID0gdHJ1ZTsKLSAgICBpZiAoIW1fcmVuZGVyZXIgfHwgIW1fcmVu
ZGVyZXItPmlzVGFibGUoKSkKKyAgICBpZiAoIWlzPFJlbmRlclRhYmxlPihtX3JlbmRlcmVyKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9IHRvUmVuZGVy
VGFibGUobV9yZW5kZXJlcik7CisgICAgUmVuZGVyVGFibGUmIHRhYmxlID0gZG93bmNhc3Q8UmVu
ZGVyVGFibGU+KCptX3JlbmRlcmVyKTsKICAgICAvLyBHbyB0aHJvdWdoIGFsbCB0aGUgYXZhaWxh
YmxlIHNlY3Rpb25zIHRvIHB1bGwgb3V0IHRoZSByb3dzIGFuZCBhZGQgdGhlbSBhcyBjaGlsZHJl
bi4KLSAgICB0YWJsZS0+cmVjYWxjU2VjdGlvbnNJZk5lZWRlZCgpOworICAgIHRhYmxlLnJlY2Fs
Y1NlY3Rpb25zSWZOZWVkZWQoKTsKICAgICAKICAgICB1bnNpZ25lZCBtYXhDb2x1bW5Db3VudCA9
IDA7Ci0gICAgUmVuZGVyVGFibGVTZWN0aW9uKiBmb290ZXIgPSB0YWJsZS0+Zm9vdGVyKCk7Cisg
ICAgUmVuZGVyVGFibGVTZWN0aW9uKiBmb290ZXIgPSB0YWJsZS5mb290ZXIoKTsKICAgICAKLSAg
ICBmb3IgKFJlbmRlclRhYmxlU2VjdGlvbiogdGFibGVTZWN0aW9uID0gdGFibGUtPnRvcFNlY3Rp
b24oKTsgdGFibGVTZWN0aW9uOyB0YWJsZVNlY3Rpb24gPSB0YWJsZS0+c2VjdGlvbkJlbG93KHRh
YmxlU2VjdGlvbiwgU2tpcEVtcHR5U2VjdGlvbnMpKSB7CisgICAgZm9yIChSZW5kZXJUYWJsZVNl
Y3Rpb24qIHRhYmxlU2VjdGlvbiA9IHRhYmxlLnRvcFNlY3Rpb24oKTsgdGFibGVTZWN0aW9uOyB0
YWJsZVNlY3Rpb24gPSB0YWJsZS5zZWN0aW9uQmVsb3codGFibGVTZWN0aW9uLCBTa2lwRW1wdHlT
ZWN0aW9ucykpIHsKICAgICAgICAgaWYgKHRhYmxlU2VjdGlvbiA9PSBmb290ZXIpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgYWRkQ2hpbGRyZW5Gcm9tU2VjdGlvbih0YWJsZVNlY3Rp
b24sIG1heENvbHVtbkNvdW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwCmluZGV4IDk0OGNkNzcyNGZkOTlmYjkz
ZjJlZTVkMGM5ZGI0MGEwMjJmZDU1NDkuLmQ1ODMzZjA3MWUyNjM5NGMwNDYwYjVhN2NkMmY1M2Y2
YWFmNThiZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVRhYmxlQ2VsbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcApAQCAtNzUsNyArNzUsNyBAQCBib29sIEFjY2Vzc2li
aWxpdHlUYWJsZUNlbGw6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKIAog
QWNjZXNzaWJpbGl0eVRhYmxlKiBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpwYXJlbnRUYWJsZSgp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX3JlbmRlcmVyIHx8ICFtX3JlbmRlcmVyLT5pc1RhYmxlQ2Vs
bCgpKQorICAgIGlmICghaXM8UmVuZGVyVGFibGVDZWxsPihtX3JlbmRlcmVyKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBJZiB0aGUgZG9jdW1lbnQgbm8gbG9uZ2VyIGV4aXN0
cywgd2UgbWlnaHQgbm90IGhhdmUgYW4gYXhPYmplY3RDYWNoZS4KQEAgLTg3LDcgKzg3LDcgQEAg
QWNjZXNzaWJpbGl0eVRhYmxlKiBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpwYXJlbnRUYWJsZSgp
IGNvbnN0CiAgICAgLy8gQnkgdXNpbmcgb25seSBnZXQoKSBpbXBsaWVzIHRoYXQgdGhlIEFYVGFi
bGUgbXVzdCBiZSBjcmVhdGVkIGJlZm9yZSBBWFRhYmxlQ2VsbHMuIFRoaXMgc2hvdWxkCiAgICAg
Ly8gYWx3YXlzIGJlIHRoZSBjYXNlIHdoZW4gQVQgY2xpZW50cyBhY2Nlc3MgYSB0YWJsZS4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI2NTIKLSAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnRUYWJsZSA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0KHRv
UmVuZGVyVGFibGVDZWxsKG1fcmVuZGVyZXIpLT50YWJsZSgpKTsKKyAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBwYXJlbnRUYWJsZSA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0KGRvd25jYXN0PFJlbmRl
clRhYmxlQ2VsbD4oKm1fcmVuZGVyZXIpLnRhYmxlKCkpOwogICAgIGlmICghcGFyZW50VGFibGUg
fHwgIXBhcmVudFRhYmxlLT5pc1RhYmxlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IHJldHVybiB0b0FjY2Vzc2liaWxpdHlUYWJsZShwYXJlbnRUYWJsZSk7CkBAIC0yMjQsMTYgKzIy
NCwxNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OnJvd0hlYWRlcnMoQWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yJiBoZWFkZXJzKQogICAgIAogdm9pZCBBY2Nlc3NpYmlsaXR5VGFi
bGVDZWxsOjpyb3dJbmRleFJhbmdlKHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+JiByb3dS
YW5nZSkKIHsKLSAgICBpZiAoIW1fcmVuZGVyZXIgfHwgIW1fcmVuZGVyZXItPmlzVGFibGVDZWxs
KCkpCisgICAgaWYgKCFpczxSZW5kZXJUYWJsZUNlbGw+KG1fcmVuZGVyZXIpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgUmVuZGVyVGFibGVDZWxsKiByZW5kZXJDZWxsID0gdG9SZW5kZXJU
YWJsZUNlbGwobV9yZW5kZXJlcik7Ci0gICAgcm93UmFuZ2UuZmlyc3QgPSByZW5kZXJDZWxsLT5y
b3dJbmRleCgpOwotICAgIHJvd1JhbmdlLnNlY29uZCA9IHJlbmRlckNlbGwtPnJvd1NwYW4oKTsK
KyAgICBSZW5kZXJUYWJsZUNlbGwmIHJlbmRlckNlbGwgPSBkb3duY2FzdDxSZW5kZXJUYWJsZUNl
bGw+KCptX3JlbmRlcmVyKTsKKyAgICByb3dSYW5nZS5maXJzdCA9IHJlbmRlckNlbGwucm93SW5k
ZXgoKTsKKyAgICByb3dSYW5nZS5zZWNvbmQgPSByZW5kZXJDZWxsLnJvd1NwYW4oKTsKICAgICAK
ICAgICAvLyBzaW5jZSBvdXIgdGFibGUgbWlnaHQgaGF2ZSBtdWx0aXBsZSBzZWN0aW9ucywgd2Ug
aGF2ZSB0byBvZmZzZXQgb3VyIHJvdyBhcHByb3ByaWF0ZWx5Ci0gICAgUmVuZGVyVGFibGVTZWN0
aW9uKiBzZWN0aW9uID0gcmVuZGVyQ2VsbC0+c2VjdGlvbigpOwotICAgIFJlbmRlclRhYmxlKiB0
YWJsZSA9IHJlbmRlckNlbGwtPnRhYmxlKCk7CisgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0
aW9uID0gcmVuZGVyQ2VsbC5zZWN0aW9uKCk7CisgICAgUmVuZGVyVGFibGUqIHRhYmxlID0gcmVu
ZGVyQ2VsbC50YWJsZSgpOwogICAgIGlmICghdGFibGUgfHwgIXNlY3Rpb24pCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMjUzLDEwICsyNTMsMTAgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxs
Ojpyb3dJbmRleFJhbmdlKHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+JiByb3dSYW4KICAg
ICAKIHZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6Y29sdW1uSW5kZXhSYW5nZShzdGQ6OnBh
aXI8dW5zaWduZWQsIHVuc2lnbmVkPiYgY29sdW1uUmFuZ2UpCiB7Ci0gICAgaWYgKCFtX3JlbmRl
cmVyIHx8ICFtX3JlbmRlcmVyLT5pc1RhYmxlQ2VsbCgpKQorICAgIGlmICghaXM8UmVuZGVyVGFi
bGVDZWxsPihtX3JlbmRlcmVyKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGNvbnN0IFJl
bmRlclRhYmxlQ2VsbCYgY2VsbCA9ICp0b1JlbmRlclRhYmxlQ2VsbChtX3JlbmRlcmVyKTsKKyAg
ICBjb25zdCBSZW5kZXJUYWJsZUNlbGwmIGNlbGwgPSBkb3duY2FzdDxSZW5kZXJUYWJsZUNlbGw+
KCptX3JlbmRlcmVyKTsKICAgICBjb2x1bW5SYW5nZS5maXJzdCA9IGNlbGwudGFibGUoKS0+Y29s
VG9FZmZDb2woY2VsbC5jb2woKSk7CiAgICAgY29sdW1uUmFuZ2Uuc2Vjb25kID0gY2VsbC50YWJs
ZSgpLT5jb2xUb0VmZkNvbChjZWxsLmNvbCgpICsgY2VsbC5jb2xTcGFuKCkpIC0gY29sdW1uUmFu
Z2UuZmlyc3Q7CiB9CkBAIC0yNjYsNyArMjY2LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNj
ZXNzaWJpbGl0eVRhYmxlQ2VsbDo6dGl0bGVVSUVsZW1lbnQoKSBjb25zdAogICAgIC8vIFRyeSB0
byBmaW5kIGlmIHRoZSBmaXJzdCBjZWxsIGluIHRoaXMgcm93IGlzIGEgPHRoPi4gSWYgaXQgaXMs
CiAgICAgLy8gdGhlbiBpdCBjYW4gYWN0IGFzIHRoZSB0aXRsZSB1aSBlbGVtZW50LiAoVGhpcyBp
cyBvbmx5IGluIHRoZQogICAgIC8vIGNhc2Ugd2hlbiB0aGUgdGFibGUgaXMgbm90IGFwcGVhcmlu
ZyBhcyBhbiBBWFRhYmxlLikKLSAgICBpZiAoaXNUYWJsZUNlbGwoKSB8fCAhbV9yZW5kZXJlciB8
fCAhbV9yZW5kZXJlci0+aXNUYWJsZUNlbGwoKSkKKyAgICBpZiAoaXNUYWJsZUNlbGwoKSB8fCAh
aXM8UmVuZGVyVGFibGVDZWxsPihtX3JlbmRlcmVyKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICAvLyBUYWJsZSBjZWxscyB0aGF0IGFyZSB0aCBjYW5ub3QgaGF2ZSB0aXRsZSB1aSBl
bGVtZW50cywgc2luY2UgYnkgZGVmaW5pdGlvbgpAQCAtMjc1LDIxICsyNzUsMjEgQEAgQWNjZXNz
aWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6dGl0bGVVSUVsZW1lbnQoKSBj
b25zdAogICAgIGlmIChub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUodGhUYWcpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBSZW5kZXJUYWJsZUNlbGwqIHJlbmRlckNlbGwgPSB0
b1JlbmRlclRhYmxlQ2VsbChtX3JlbmRlcmVyKTsKKyAgICBSZW5kZXJUYWJsZUNlbGwmIHJlbmRl
ckNlbGwgPSBkb3duY2FzdDxSZW5kZXJUYWJsZUNlbGw+KCptX3JlbmRlcmVyKTsKIAogICAgIC8v
IElmIHRoaXMgY2VsbCBpcyBpbiB0aGUgZmlyc3QgY29sdW1uLCB0aGVyZSBpcyBubyBuZWVkIHRv
IGNvbnRpbnVlLgotICAgIGludCBjb2wgPSByZW5kZXJDZWxsLT5jb2woKTsKKyAgICBpbnQgY29s
ID0gcmVuZGVyQ2VsbC5jb2woKTsKICAgICBpZiAoIWNvbCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBpbnQgcm93ID0gcmVuZGVyQ2VsbC0+cm93SW5kZXgoKTsKKyAgICBpbnQgcm93
ID0gcmVuZGVyQ2VsbC5yb3dJbmRleCgpOwogCi0gICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0
aW9uID0gcmVuZGVyQ2VsbC0+c2VjdGlvbigpOworICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2Vj
dGlvbiA9IHJlbmRlckNlbGwuc2VjdGlvbigpOwogICAgIGlmICghc2VjdGlvbikKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgUmVuZGVyVGFibGVDZWxsKiBoZWFkZXJDZWxsID0g
c2VjdGlvbi0+cHJpbWFyeUNlbGxBdChyb3csIDApOwotICAgIGlmICghaGVhZGVyQ2VsbCB8fCBo
ZWFkZXJDZWxsID09IHJlbmRlckNlbGwpCisgICAgaWYgKCFoZWFkZXJDZWxsIHx8IGhlYWRlckNl
bGwgPT0gJnJlbmRlckNlbGwpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCFo
ZWFkZXJDZWxsLT5lbGVtZW50KCkgfHwgIWhlYWRlckNlbGwtPmVsZW1lbnQoKS0+aGFzVGFnTmFt
ZSh0aFRhZykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlUYWJsZUNvbHVtbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5jcHAKaW5kZXggNzhiNmQ1ZmM3YjViOWE3MTM2OTNiZWIz
NjI5YjhhZTRlMDg0ZDc1NS4uMGIzMTE2ZDdhYTRhOTNkMDE1ODhiZWQ2YTE3YWQyM2Q1OGVkYTli
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
VGFibGVDb2x1bW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVRhYmxlQ29sdW1uLmNwcApAQCAtODksMjMgKzg5LDE3IEBAIEFjY2Vzc2liaWxpdHlP
YmplY3QqIEFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbjo6aGVhZGVyT2JqZWN0KCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKCFyZW5kZXJlci0+aXNUYWJsZSgpKQor
ICAgIGlmICghaXM8UmVuZGVyVGFibGU+KCpyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIAotICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9IHRvUmVuZGVyVGFibGUocmVuZGVy
ZXIpOwotICAgIAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGhlYWRlck9iamVjdCA9IG51bGxw
dHI7Ci0gICAgCi0gICAgLy8gdHJ5IHRoZSA8dGhlYWQ+IHNlY3Rpb24gZmlyc3QuIHRoaXMgZG9l
c24ndCByZXF1aXJlIHRoIHRhZ3MKLSAgICBoZWFkZXJPYmplY3QgPSBoZWFkZXJPYmplY3RGb3JT
ZWN0aW9uKHRhYmxlLT5oZWFkZXIoKSwgZmFsc2UpOworICAgIFJlbmRlclRhYmxlJiB0YWJsZSA9
IGRvd25jYXN0PFJlbmRlclRhYmxlPigqcmVuZGVyZXIpOwogCi0gICAgaWYgKGhlYWRlck9iamVj
dCkKKyAgICAvLyB0cnkgdGhlIDx0aGVhZD4gc2VjdGlvbiBmaXJzdC4gdGhpcyBkb2Vzbid0IHJl
cXVpcmUgdGggdGFncworICAgIGlmIChhdXRvKiBoZWFkZXJPYmplY3QgPSBoZWFkZXJPYmplY3RG
b3JTZWN0aW9uKHRhYmxlLmhlYWRlcigpLCBmYWxzZSkpCiAgICAgICAgIHJldHVybiBoZWFkZXJP
YmplY3Q7CiAgICAgCiAgICAgLy8gbm93IHRyeSBmb3IgPHRoPiB0YWdzIGluIHRoZSBmaXJzdCBi
b2R5Ci0gICAgaGVhZGVyT2JqZWN0ID0gaGVhZGVyT2JqZWN0Rm9yU2VjdGlvbih0YWJsZS0+Zmly
c3RCb2R5KCksIHRydWUpOwotCi0gICAgcmV0dXJuIGhlYWRlck9iamVjdDsKKyAgICByZXR1cm4g
aGVhZGVyT2JqZWN0Rm9yU2VjdGlvbih0YWJsZS5maXJzdEJvZHkoKSwgdHJ1ZSk7CiB9CiAKIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbjo6aGVhZGVyT2JqZWN0
Rm9yU2VjdGlvbihSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24sIGJvb2wgdGhUYWdSZXF1aXJl
ZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwCmluZGV4IGVlY2E5NDM5NjU0YTQyNGQ4MDUyM2Y3ZWMxNmQ1MjgwZjNjNWM0MmYuLmExMDdl
Njk2ZTQxNWE4ODhiMDQ2OTZjYWU1ZDVkNGE5M2VhMjMxY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMzg2LDggKzM4Niw4
IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZShQYXNzUmVmUHRyPE5v
ZGU+IG5vZGUsIFNob3VsZEFzc3VtZUNvbnRlCiAgICAgICAgIAogICAgICAgICAvLyBNYWtlIHN1
cmUgZW1wdHkgY2VsbCBoYXMgc29tZSBoZWlnaHQsIGlmIGEgcGxhY2Vob2xkZXIgY2FuIGJlIGlu
c2VydGVkLgogICAgICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwotICAgICAgICBSZW5kZXJPYmplY3QgKnIgPSBub2RlLT5yZW5kZXJlcigpOwot
ICAgICAgICBpZiAociAmJiByLT5pc1RhYmxlQ2VsbCgpICYmIHRvUmVuZGVyVGFibGVDZWxsKHIp
LT5jb250ZW50SGVpZ2h0KCkgPD0gMCkgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKGlzPFJlbmRlclRhYmxlQ2VsbD4ocmVu
ZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlclRhYmxlQ2VsbD4oKnJlbmRlcmVyKS5jb250ZW50SGVp
Z2h0KCkgPD0gMCkgewogICAgICAgICAgICAgUG9zaXRpb24gZmlyc3RFZGl0YWJsZVBvc2l0aW9u
ID0gZmlyc3RFZGl0YWJsZVBvc2l0aW9uSW5Ob2RlKG5vZGUuZ2V0KCkpOwogICAgICAgICAgICAg
aWYgKGZpcnN0RWRpdGFibGVQb3NpdGlvbi5pc05vdE51bGwoKSkKICAgICAgICAgICAgICAgICBp
bnNlcnRCbG9ja1BsYWNlaG9sZGVyKGZpcnN0RWRpdGFibGVQb3NpdGlvbik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggNmJlOTcyM2NiZGQxYTU1NjdjYWE0MDRi
ODlkZGE4ZjhmMmUyMmI1Ni4uOWMwZDY0NjhlZDQ5YWIxYjNmMjU4YzE5ZjYxZmY0ZThkNGI2ZDE2
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtNzg1LDcgKzc4
NSw3IEBAIHN0YXRpYyBib29sIHNob3VsZEVtaXRUYWJCZWZvcmVOb2RlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBXYW50IGEgdGFiIGJlZm9yZSBldmVy
eSBjZWxsIG90aGVyIHRoYW4gdGhlIGZpcnN0IG9uZS4KLSAgICBSZW5kZXJUYWJsZUNlbGwmIGNl
bGwgPSB0b1JlbmRlclRhYmxlQ2VsbCgqcmVuZGVyZXIpOworICAgIFJlbmRlclRhYmxlQ2VsbCYg
Y2VsbCA9IGRvd25jYXN0PFJlbmRlclRhYmxlQ2VsbD4oKnJlbmRlcmVyKTsKICAgICBSZW5kZXJU
YWJsZSogdGFibGUgPSBjZWxsLnRhYmxlKCk7CiAgICAgcmV0dXJuIHRhYmxlICYmICh0YWJsZS0+
Y2VsbEJlZm9yZSgmY2VsbCkgfHwgdGFibGUtPmNlbGxBYm92ZSgmY2VsbCkpOwogfQpAQCAtODQw
LDE0ICs4NDAsMTQgQEAgc3RhdGljIGJvb2wgc2hvdWxkRW1pdE5ld2xpbmVzQmVmb3JlQW5kQWZ0
ZXJOb2RlKE5vZGUmIG5vZGUpCiAgICAgCiAgICAgLy8gTmVlZCB0byBtYWtlIGFuIGV4Y2VwdGlv
biBmb3IgdGFibGUgcm93IGVsZW1lbnRzLCBiZWNhdXNlIHRoZXkgYXJlIG5laXRoZXIKICAgICAv
LyAiaW5saW5lIiBvciAiUmVuZGVyQmxvY2siLCBidXQgd2Ugd2FudCBuZXdsaW5lcyBmb3IgdGhl
bS4KLSAgICBpZiAocmVuZGVyZXItPmlzVGFibGVSb3coKSkgewotICAgICAgICBSZW5kZXJUYWJs
ZSogdGFibGUgPSB0b1JlbmRlclRhYmxlUm93KCpyZW5kZXJlcikudGFibGUoKTsKKyAgICBpZiAo
aXM8UmVuZGVyVGFibGVSb3c+KCpyZW5kZXJlcikpIHsKKyAgICAgICAgUmVuZGVyVGFibGUqIHRh
YmxlID0gZG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+KCpyZW5kZXJlcikudGFibGUoKTsKICAgICAg
ICAgaWYgKHRhYmxlICYmICF0YWJsZS0+aXNJbmxpbmUoKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICAKICAgICByZXR1cm4gIXJlbmRlcmVyLT5pc0lubGluZSgpCi0gICAg
ICAgICYmIHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkKKyAgICAgICAgJiYgaXM8UmVuZGVyQmxv
Y2s+KCpyZW5kZXJlcikKICAgICAgICAgJiYgIXJlbmRlcmVyLT5pc0Zsb2F0aW5nT3JPdXRPZkZs
b3dQb3NpdGlvbmVkKCkKICAgICAgICAgJiYgIXJlbmRlcmVyLT5pc0JvZHkoKQogICAgICAgICAm
JiAhcmVuZGVyZXItPmlzUnVieVRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFi
bGVDZWxsRWxlbWVudC5jcHAKaW5kZXggMWY5OTc4OTM4YjY2YzQ1OGZhZDI1NTIwNGY2YzYwMGMz
NmZiMjY0Ny4uMDBmNDdjZDJkOTgxMTAyMGU0NDM3N2Q4YTExNDQ0NThhZDM2Y2IyNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAKQEAgLTEwNSwxMSAr
MTA1LDExIEBAIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvclByZXNl
bnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROCiB2b2lkIEhUTUxUYWJsZUNlbGxFbGVt
ZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlKQogewogICAgIGlmIChuYW1lID09IHJvd3NwYW5BdHRyKSB7Ci0gICAg
ICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzVGFibGVDZWxsKCkpCi0gICAgICAg
ICAgICB0b1JlbmRlclRhYmxlQ2VsbChyZW5kZXJlcigpKS0+Y29sU3Bhbk9yUm93U3BhbkNoYW5n
ZWQoKTsKKyAgICAgICAgaWYgKGlzPFJlbmRlclRhYmxlQ2VsbD4ocmVuZGVyZXIoKSkpCisgICAg
ICAgICAgICBkb3duY2FzdDxSZW5kZXJUYWJsZUNlbGw+KCpyZW5kZXJlcigpKS5jb2xTcGFuT3JS
b3dTcGFuQ2hhbmdlZCgpOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBjb2xzcGFuQXR0cikgewot
ICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1RhYmxlQ2VsbCgpKQotICAg
ICAgICAgICAgdG9SZW5kZXJUYWJsZUNlbGwocmVuZGVyZXIoKSktPmNvbFNwYW5PclJvd1NwYW5D
aGFuZ2VkKCk7CisgICAgICAgIGlmIChpczxSZW5kZXJUYWJsZUNlbGw+KHJlbmRlcmVyKCkpKQor
ICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqcmVuZGVyZXIoKSkuY29sU3Bh
bk9yUm93U3BhbkNoYW5nZWQoKTsKICAgICB9IGVsc2UKICAgICAgICAgSFRNTFRhYmxlUGFydEVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KQEAgLTE2NSwxMiArMTY1LDEy
IEBAIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJM
cyhMaXN0SGFzaFNldDxVUkw+JiB1cmxzKSBjCiAKIEhUTUxUYWJsZUNlbGxFbGVtZW50KiBIVE1M
VGFibGVDZWxsRWxlbWVudDo6Y2VsbEFib3ZlKCkgY29uc3QKIHsKLSAgICBhdXRvIGNlbGxSZW5k
ZXJlciA9IHJlbmRlcmVyKCk7Ci0gICAgaWYgKCFjZWxsUmVuZGVyZXIgfHwgIWNlbGxSZW5kZXJl
ci0+aXNUYWJsZUNlbGwoKSkKKyAgICBhdXRvKiBjZWxsUmVuZGVyZXIgPSByZW5kZXJlcigpOwor
ICAgIGlmICghaXM8UmVuZGVyVGFibGVDZWxsPihjZWxsUmVuZGVyZXIpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gdGFibGVDZWxsUmVuZGVyZXIgPSB0b1JlbmRlclRhYmxl
Q2VsbChjZWxsUmVuZGVyZXIpOwotICAgIGF1dG8gY2VsbEFib3ZlUmVuZGVyZXIgPSB0YWJsZUNl
bGxSZW5kZXJlci0+dGFibGUoKS0+Y2VsbEFib3ZlKHRhYmxlQ2VsbFJlbmRlcmVyKTsKKyAgICBh
dXRvJiB0YWJsZUNlbGxSZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlclRhYmxlQ2VsbD4oKmNlbGxS
ZW5kZXJlcik7CisgICAgYXV0byogY2VsbEFib3ZlUmVuZGVyZXIgPSB0YWJsZUNlbGxSZW5kZXJl
ci50YWJsZSgpLT5jZWxsQWJvdmUoJnRhYmxlQ2VsbFJlbmRlcmVyKTsKICAgICBpZiAoIWNlbGxB
Ym92ZVJlbmRlcmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5jcHAKaW5kZXggMDE2ODk5ZjdmNTFlNDEyODBhMzE0
NGVhMmQ2ZGNkMjRiMTJkNjNjZS4uOWZhYzdhODJhNTM4YzdhMDEwYzc3NGVjNDg4ZDkxMDIwMzg2
NDgwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuY3BwCkBA
IC02NywxNSArNjcsMTUgQEAgdm9pZCBIVE1MVGFibGVDb2xFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWMKICAgICBpZiAobmFtZSA9
PSBzcGFuQXR0cikgewogICAgICAgICBpbnQgbmV3U3BhbiA9IHZhbHVlLnRvSW50KCk7CiAgICAg
ICAgIG1fc3BhbiA9IG5ld1NwYW4gPyBuZXdTcGFuIDogMTsKLSAgICAgICAgaWYgKHJlbmRlcmVy
KCkgJiYgcmVuZGVyZXIoKS0+aXNSZW5kZXJUYWJsZUNvbCgpKQotICAgICAgICAgICAgcmVuZGVy
ZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKKyAgICAgICAgaWYgKGlzPFJlbmRlclRhYmxlQ29s
PihyZW5kZXJlcigpKSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclRhYmxlQ29sPigqcmVu
ZGVyZXIoKSkudXBkYXRlRnJvbUVsZW1lbnQoKTsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gd2lk
dGhBdHRyKSB7CiAgICAgICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBp
ZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1JlbmRlclRhYmxlQ29sKCkpIHsKLSAgICAg
ICAgICAgICAgICBSZW5kZXJUYWJsZUNvbCogY29sID0gdG9SZW5kZXJUYWJsZUNvbChyZW5kZXJl
cigpKTsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJUYWJsZUNvbD4ocmVuZGVyZXIoKSkpIHsK
KyAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZUNvbCYgY29sID0gZG93bmNhc3Q8UmVuZGVyVGFi
bGVDb2w+KCpyZW5kZXJlcigpKTsKICAgICAgICAgICAgICAgICBpbnQgbmV3V2lkdGggPSB3aWR0
aCgpLnRvSW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld1dpZHRoICE9IGNvbC0+d2lkdGgo
KSkKLSAgICAgICAgICAgICAgICAgICAgY29sLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNS
ZWNhbGMoKTsKKyAgICAgICAgICAgICAgICBpZiAobmV3V2lkdGggIT0gY29sLndpZHRoKCkpCisg
ICAgICAgICAgICAgICAgICAgIGNvbC5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvbWF0
aG1sL01hdGhNTEVsZW1lbnQuY3BwCmluZGV4IDAzYTE5MDY4MGYzN2FmZjgwMzhjZjAxMzM1NmMy
M2QyODQwODIzZDQuLjIyOWUwZWExNjk4ZDVjODdmMTAzNTQwMGJhZjIwYTczMTE2NGM4MzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRWxlbWVudC5jcHAKQEAgLTIxMiwxMSArMjEyLDEx
IEBAIGludCBNYXRoTUxFbGVtZW50Ojpyb3dTcGFuKCkgY29uc3QKIHZvaWQgTWF0aE1MRWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSByb3dzcGFuQXR0cikgewotICAgICAg
ICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1RhYmxlQ2VsbCgpICYmIGhhc1RhZ05h
bWUobXRkVGFnKSkKLSAgICAgICAgICAgIHRvUmVuZGVyVGFibGVDZWxsKHJlbmRlcmVyKCkpLT5j
b2xTcGFuT3JSb3dTcGFuQ2hhbmdlZCgpOworICAgICAgICBpZiAoaXM8UmVuZGVyVGFibGVDZWxs
PihyZW5kZXJlcigpKSAmJiBoYXNUYWdOYW1lKG10ZFRhZykpCisgICAgICAgICAgICBkb3duY2Fz
dDxSZW5kZXJUYWJsZUNlbGw+KCpyZW5kZXJlcigpKS5jb2xTcGFuT3JSb3dTcGFuQ2hhbmdlZCgp
OwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBjb2x1bW5zcGFuQXR0cikgewotICAgICAgICBpZiAo
cmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1RhYmxlQ2VsbCgpICYmIGhhc1RhZ05hbWUobXRk
VGFnKSkKLSAgICAgICAgICAgIHRvUmVuZGVyVGFibGVDZWxsKHJlbmRlcmVyKCkpLT5jb2xTcGFu
T3JSb3dTcGFuQ2hhbmdlZCgpOworICAgICAgICBpZiAoaXM8UmVuZGVyVGFibGVDZWxsPihyZW5k
ZXJlcigpKSAmJiBoYXNUYWdOYW1lKG10ZFRhZykpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5k
ZXJUYWJsZUNlbGw+KHJlbmRlcmVyKCkpLT5jb2xTcGFuT3JSb3dTcGFuQ2hhbmdlZCgpOwogICAg
IH0gZWxzZQogICAgICAgICBTdHlsZWRFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1
ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5
b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCmlu
ZGV4IDY5YWNiOTg3NWE3ZjRiNGViMmQ2NDIwNDJkNDdjMGZhODE2ZjUxODIuLjRkODgzNjIzM2Fh
ZWQ5YWYzNmM2ZTQyY2I5NGJiODkyOWIyNWM0YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiUmVu
ZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDb2wuaCIKICNpbmNsdWRlICJS
ZW5kZXJUYWJsZVNlY3Rpb24uaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNDQsMjAgKzQ1LDIwIEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0Ojpy
ZWNhbGNDb2x1bW4odW5zaWduZWQgZWZmQ29sKQogewogICAgIExheW91dCYgY29sdW1uTGF5b3V0
ID0gbV9sYXlvdXRTdHJ1Y3RbZWZmQ29sXTsKIAotICAgIFJlbmRlclRhYmxlQ2VsbCogZml4ZWRD
b250cmlidXRvciA9IDA7Ci0gICAgUmVuZGVyVGFibGVDZWxsKiBtYXhDb250cmlidXRvciA9IDA7
CisgICAgUmVuZGVyVGFibGVDZWxsKiBmaXhlZENvbnRyaWJ1dG9yID0gbnVsbHB0cjsKKyAgICBS
ZW5kZXJUYWJsZUNlbGwqIG1heENvbnRyaWJ1dG9yID0gbnVsbHB0cjsKIAogICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjaGlsZCA9IG1fdGFibGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGNoaWxkLT5pc1JlbmRlclRhYmxl
Q29sKCkpeworICAgICAgICBpZiAoaXM8UmVuZGVyVGFibGVDb2w+KCpjaGlsZCkpIHsKICAgICAg
ICAgICAgIC8vIFJlbmRlclRhYmxlQ29scyBkb24ndCBoYXZlIHRoZSBjb25jZXB0IG9mIHByZWZl
cnJlZCBsb2dpY2FsIHdpZHRoLCBidXQgd2UgbmVlZCB0byBjbGVhciB0aGVpciBkaXJ0eSBiaXRz
CiAgICAgICAgICAgICAvLyBzbyB0aGF0IGlmIHdlIGNhbGwgc2V0UHJlZmVycmVkV2lkdGhzRGly
dHkodHJ1ZSkgb24gYSBjb2wgb3Igb25lIG9mIGl0cyBkZXNjZW5kYW50cywgd2UnbGwgbWFyayBp
dCdzCiAgICAgICAgICAgICAvLyBhbmNlc3RvcnMgYXMgZGlydHkuCi0gICAgICAgICAgICB0b1Jl
bmRlclRhYmxlQ29sKGNoaWxkKS0+Y2xlYXJQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHlCaXRz
KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkpIHsKLSAgICAg
ICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiA9IHRvUmVuZGVyVGFibGVTZWN0aW9u
KGNoaWxkKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bVJvd3MgPSBzZWN0aW9uLT5udW1Sb3dz
KCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUm93czsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uOjpDZWxsU3RydWN0IGN1cnJlbnQg
PSBzZWN0aW9uLT5jZWxsQXQoaSwgZWZmQ29sKTsKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRl
clRhYmxlQ29sPigqY2hpbGQpLmNsZWFyUHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5Qml0cygp
OworICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlclRhYmxlU2VjdGlvbj4oKmNoaWxkKSkgewor
ICAgICAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uJiBzZWN0aW9uID0gZG93bmNhc3Q8UmVuZGVy
VGFibGVTZWN0aW9uPigqY2hpbGQpOworICAgICAgICAgICAgdW5zaWduZWQgbnVtUm93cyA9IHNl
Y3Rpb24ubnVtUm93cygpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bVJvd3M7ICsraSkgeworICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbjo6Q2VsbFN0
cnVjdCBjdXJyZW50ID0gc2VjdGlvbi5jZWxsQXQoaSwgZWZmQ29sKTsKICAgICAgICAgICAgICAg
ICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjdXJyZW50LnByaW1hcnlDZWxsKCk7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuaW5Db2xTcGFuIHx8ICFjZWxs
KQpAQCAtMTIwLDcgKzEyMSw3IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpyZWNhbGNDb2x1bW4o
dW5zaWduZWQgZWZmQ29sKQogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCFlZmZDb2wgfHwgc2VjdGlvbi0+cHJpbWFyeUNlbGxBdChpLCBlZmZD
b2wgLSAxKSAhPSBjZWxsKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZWZmQ29sIHx8
IHNlY3Rpb24ucHJpbWFyeUNlbGxBdChpLCBlZmZDb2wgLSAxKSAhPSBjZWxsKSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIFRoaXMgc3Bhbm5pbmcgY2VsbCBvcmlnaW5hdGVzIGluIHRoaXMgY29s
dW1uLiBJbnNlcnQgdGhlIGNlbGwgaW50byBzcGFubmluZyBjZWxscyBsaXN0LgogICAgICAgICAg
ICAgICAgICAgICBpbnNlcnRTcGFuQ2VsbChjZWxsKTsKICAgICAgICAgICAgICAgICB9CkBAIC0x
MzIsNyArMTMzLDcgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6OnJlY2FsY0NvbHVtbih1bnNpZ25l
ZCBlZmZDb2wpCiAgICAgaWYgKGNvbHVtbkxheW91dC5sb2dpY2FsV2lkdGguaXNGaXhlZCgpKSB7
CiAgICAgICAgIGlmIChtX3RhYmxlLT5kb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpICYmIGNvbHVt
bkxheW91dC5tYXhMb2dpY2FsV2lkdGggPiBjb2x1bW5MYXlvdXQubG9naWNhbFdpZHRoLnZhbHVl
KCkgJiYgZml4ZWRDb250cmlidXRvciAhPSBtYXhDb250cmlidXRvcikgewogICAgICAgICAgICAg
Y29sdW1uTGF5b3V0LmxvZ2ljYWxXaWR0aCA9IExlbmd0aCgpOwotICAgICAgICAgICAgZml4ZWRD
b250cmlidXRvciA9IDA7CisgICAgICAgICAgICBmaXhlZENvbnRyaWJ1dG9yID0gbnVsbHB0cjsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtMTg2LDI1ICsxODcsMjUgQEAgc3RhdGljIGJvb2wgc2hv
dWxkU2NhbGVDb2x1bW5zKFJlbmRlclRhYmxlKiB0YWJsZSkKICAgICAvLyBhIGNlbGwsIHRoZW4g
ZG9uJ3QgYmxvYXQgdGhlIG1heHdpZHRoIGJ5IGV4YW1pbmluZyBwZXJjZW50YWdlIGdyb3d0aC4K
ICAgICBib29sIHNjYWxlID0gdHJ1ZTsKICAgICB3aGlsZSAodGFibGUpIHsKLSAgICAgICAgTGVu
Z3RoIHR3ID0gdGFibGUtPnN0eWxlKCkud2lkdGgoKTsKLSAgICAgICAgaWYgKCh0dy5pc0F1dG8o
KSB8fCB0dy5pc1BlcmNlbnQoKSkgJiYgIXRhYmxlLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkg
ewotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNiID0gdGFibGUtPmNvbnRhaW5pbmdCbG9jaygp
OwotICAgICAgICAgICAgd2hpbGUgKGNiICYmICFjYi0+aXNSZW5kZXJWaWV3KCkgJiYgIWNiLT5p
c1RhYmxlQ2VsbCgpICYmCi0gICAgICAgICAgICAgICAgY2ItPnN0eWxlKCkud2lkdGgoKS5pc0F1
dG8oKSAmJiAhY2ItPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQotICAgICAgICAgICAgICAgIGNi
ID0gY2ItPmNvbnRhaW5pbmdCbG9jaygpOwotCi0gICAgICAgICAgICB0YWJsZSA9IDA7Ci0gICAg
ICAgICAgICBpZiAoY2IgJiYgY2ItPmlzVGFibGVDZWxsKCkgJiYKLSAgICAgICAgICAgICAgICAo
Y2ItPnN0eWxlKCkud2lkdGgoKS5pc0F1dG8oKSB8fCBjYi0+c3R5bGUoKS53aWR0aCgpLmlzUGVy
Y2VudCgpKSkgewotICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IHRvUmVu
ZGVyVGFibGVDZWxsKGNiKTsKLSAgICAgICAgICAgICAgICBpZiAoY2VsbC0+Y29sU3BhbigpID4g
MSB8fCBjZWxsLT50YWJsZSgpLT5zdHlsZSgpLndpZHRoKCkuaXNBdXRvKCkpCisgICAgICAgIExl
bmd0aCB0YWJsZVdpZHRoID0gdGFibGUtPnN0eWxlKCkud2lkdGgoKTsKKyAgICAgICAgaWYgKCh0
YWJsZVdpZHRoLmlzQXV0bygpIHx8IHRhYmxlV2lkdGguaXNQZXJjZW50KCkpICYmICF0YWJsZS0+
aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKKyAgICAgICAgICAgIFJlbmRlckJsb2NrKiBjb250
YWluaW5nQmxvY2sgPSB0YWJsZS0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAgICAgICB3aGls
ZSAoY29udGFpbmluZ0Jsb2NrICYmICFpczxSZW5kZXJWaWV3PigqY29udGFpbmluZ0Jsb2NrKSAm
JiAhaXM8UmVuZGVyVGFibGVDZWxsPigqY29udGFpbmluZ0Jsb2NrKQorICAgICAgICAgICAgICAg
ICYmIGNvbnRhaW5pbmdCbG9jay0+c3R5bGUoKS53aWR0aCgpLmlzQXV0bygpICYmICFjb250YWlu
aW5nQmxvY2stPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgICAgICAgICAgICAgIGNvbnRh
aW5pbmdCbG9jayA9IGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CisKKyAgICAg
ICAgICAgIHRhYmxlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJUYWJsZUNl
bGw+KGNvbnRhaW5pbmdCbG9jaykKKyAgICAgICAgICAgICAgICAmJiAoY29udGFpbmluZ0Jsb2Nr
LT5zdHlsZSgpLndpZHRoKCkuaXNBdXRvKCkgfHwgY29udGFpbmluZ0Jsb2NrLT5zdHlsZSgpLndp
ZHRoKCkuaXNQZXJjZW50KCkpKSB7CisgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsJiBj
ZWxsID0gZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqY29udGFpbmluZ0Jsb2NrKTsKKyAgICAg
ICAgICAgICAgICBpZiAoY2VsbC5jb2xTcGFuKCkgPiAxIHx8IGNlbGwudGFibGUoKS0+c3R5bGUo
KS53aWR0aCgpLmlzQXV0bygpKQogICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdGFibGUgPSBjZWxsLT50
YWJsZSgpOworICAgICAgICAgICAgICAgICAgICB0YWJsZSA9IGNlbGwudGFibGUoKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0YWJsZSA9IDA7
CisgICAgICAgICAgICB0YWJsZSA9IG51bGxwdHI7CiAgICAgfQogICAgIHJldHVybiBzY2FsZTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKaW5kZXgg
ZGNjZDY4ZDZiYWY2NjQ0MjI2MjFhMzEwMDg2YjcwNTRhOTA3NGZkOS4uZjBlZWIwMWJmZTM4NzRk
NWI1NzgyYjY4ZDkzOGRiZmM3YzI0ZmJjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTM2OCw4ICszNjgsOCBAQCB2b2lkIFJlbmRlckJsb2Nr
Rmxvdzo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNh
bFdpZHRoLAogICAgICAgICAgICAgbWluTG9naWNhbFdpZHRoID0gMDsKICAgICB9CiAKLSAgICBp
ZiAoaXNUYWJsZUNlbGwoKSkgewotICAgICAgICBMZW5ndGggdGFibGVDZWxsV2lkdGggPSB0b1Jl
bmRlclRhYmxlQ2VsbCh0aGlzKS0+c3R5bGVPckNvbExvZ2ljYWxXaWR0aCgpOworICAgIGlmIChp
czxSZW5kZXJUYWJsZUNlbGw+KCp0aGlzKSkgeworICAgICAgICBMZW5ndGggdGFibGVDZWxsV2lk
dGggPSBkb3duY2FzdDxSZW5kZXJUYWJsZUNlbGw+KCp0aGlzKS5zdHlsZU9yQ29sTG9naWNhbFdp
ZHRoKCk7CiAgICAgICAgIGlmICh0YWJsZUNlbGxXaWR0aC5pc0ZpeGVkKCkgJiYgdGFibGVDZWxs
V2lkdGgudmFsdWUoKSA+IDApCiAgICAgICAgICAgICBtYXhMb2dpY2FsV2lkdGggPSBzdGQ6Om1h
eChtaW5Mb2dpY2FsV2lkdGgsIGFkanVzdENvbnRlbnRCb3hMb2dpY2FsV2lkdGhGb3JCb3hTaXpp
bmcodGFibGVDZWxsV2lkdGgudmFsdWUoKSkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKaW5kZXggZDZiMzE0MDdlODE4ZDI1YmVjMGI2YjU3ZDRjMWQ2MTA2MmJj
YzAxZi4uMDVjY2QzYTdiYTgyYTg5ZDVmZmYyMTRiZDQwYTJjOWU3NWFiYjYzMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTI4MTIsNyArMjgxMiw3IEBAIExheW91
dFVuaXQgUmVuZGVyQm94Ojpjb21wdXRlUGVyY2VudGFnZUxvZ2ljYWxIZWlnaHQoY29uc3QgTGVu
Z3RoJiBoZWlnaHQpIGNvbnN0CiAgICAgZWxzZSBpZiAoaGFzT3ZlcnJpZGVDb250YWluaW5nQmxv
Y2tMb2dpY2FsSGVpZ2h0KCkpCiAgICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IG92ZXJyaWRlQ29u
dGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKTsKICNlbmRpZgotICAgIGVsc2UgaWYg
KGNiLT5pc1RhYmxlQ2VsbCgpKSB7CisgICAgZWxzZSBpZiAoaXM8UmVuZGVyVGFibGVDZWxsPigq
Y2IpKSB7CiAgICAgICAgIGlmICghc2tpcHBlZEF1dG9IZWlnaHRDb250YWluaW5nQmxvY2spIHsK
ICAgICAgICAgICAgIC8vIFRhYmxlIGNlbGxzIHZpb2xhdGUgd2hhdCB0aGUgQ1NTIHNwZWMgc2F5
cyB0byBkbyB3aXRoIGhlaWdodHMuIEJhc2ljYWxseSB3ZQogICAgICAgICAgICAgLy8gZG9uJ3Qg
Y2FyZSBpZiB0aGUgY2VsbCBzcGVjaWZpZWQgYSBoZWlnaHQgb3Igbm90LiBXZSBqdXN0IGFsd2F5
cyBtYWtlIG91cnNlbHZlcwpAQCAtMjgyNSw4ICsyODI1LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJC
b3g6OmNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodChjb25zdCBMZW5ndGgmIGhlaWdodCkg
Y29uc3QKICAgICAgICAgICAgICAgICAvLyBubyBzaXplIGFuZCBhbGxvdyB0aGUgZmxleGluZyBv
ZiB0aGUgdGFibGUgb3IgdGhlIGNlbGwgdG8gaXRzIHNwZWNpZmllZCBoZWlnaHQgdG8gY2F1c2Ug
dXMKICAgICAgICAgICAgICAgICAvLyB0byBncm93IHRvIGZpbGwgdGhlIHNwYWNlLiBUaGlzIGNv
dWxkIGVuZCB1cCBiZWluZyB3cm9uZyBpbiBzb21lIGNhc2VzLCBidXQgaXQgaXMKICAgICAgICAg
ICAgICAgICAvLyBwcmVmZXJhYmxlIHRvIHRoZSBhbHRlcm5hdGl2ZSAoc2l6aW5nIGludHJpbnNp
Y2FsbHkgYW5kIG1ha2luZyB0aGUgcm93IGVuZCB1cCB0b28gYmlnKS4KLSAgICAgICAgICAgICAg
ICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSB0b1JlbmRlclRhYmxlQ2VsbChjYik7Ci0gICAgICAg
ICAgICAgICAgaWYgKHNjcm9sbHNPdmVyZmxvd1koKSAmJiAoIWNlbGwtPnN0eWxlKCkubG9naWNh
bEhlaWdodCgpLmlzQXV0bygpIHx8ICFjZWxsLT50YWJsZSgpLT5zdHlsZSgpLmxvZ2ljYWxIZWln
aHQoKS5pc0F1dG8oKSkpCisgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsJiBjZWxsID0g
ZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqY2IpOworICAgICAgICAgICAgICAgIGlmIChzY3Jv
bGxzT3ZlcmZsb3dZKCkgJiYgKCFjZWxsLnN0eWxlKCkubG9naWNhbEhlaWdodCgpLmlzQXV0bygp
IHx8ICFjZWxsLnRhYmxlKCktPnN0eWxlKCkubG9naWNhbEhlaWdodCgpLmlzQXV0bygpKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwog
ICAgICAgICAgICAgfQpAQCAtNDc0MCwxOCArNDc0MCwxOCBAQCBib29sIFJlbmRlckJveDo6aGFz
UmVsYXRpdmVMb2dpY2FsSGVpZ2h0KCkgY29uc3QKICAgICAgICAgICAgIHx8IHN0eWxlKCkubG9n
aWNhbE1heEhlaWdodCgpLmlzUGVyY2VudCgpOwogfQogCi1zdGF0aWMgdm9pZCBtYXJrQm94Rm9y
UmVsYXlvdXRBZnRlclNwbGl0KFJlbmRlckJveCogYm94KQorc3RhdGljIHZvaWQgbWFya0JveEZv
clJlbGF5b3V0QWZ0ZXJTcGxpdChSZW5kZXJCb3gmIGJveCkKIHsKICAgICAvLyBGSVhNRTogVGhl
IHRhYmxlIGNvZGUgc2hvdWxkIGhhbmRsZSB0aGF0IGF1dG9tYXRpY2FsbHkuIElmIG5vdCwKICAg
ICAvLyB3ZSBzaG91bGQgZml4IGl0IGFuZCByZW1vdmUgdGhlIHRhYmxlIHBhcnQgY2hlY2tzLgot
ICAgIGlmIChib3gtPmlzVGFibGUoKSkgeworICAgIGlmIChpczxSZW5kZXJUYWJsZT4oYm94KSkg
ewogICAgICAgICAvLyBCZWNhdXNlIHdlIG1heSBoYXZlIGFkZGVkIHNvbWUgc2VjdGlvbnMgd2l0
aCBhbHJlYWR5IGNvbXB1dGVkIGNvbHVtbiBzdHJ1Y3R1cmVzLCB3ZSBuZWVkIHRvCiAgICAgICAg
IC8vIHN5bmMgdGhlIHRhYmxlIHN0cnVjdHVyZSB3aXRoIHRoZW0gbm93LiBUaGlzIGF2b2lkcyBj
cmFzaGVzIHdoZW4gYWRkaW5nIG5ldyBjZWxscyB0byB0aGUgdGFibGUuCi0gICAgICAgIHRvUmVu
ZGVyVGFibGUoYm94KS0+Zm9yY2VTZWN0aW9uc1JlY2FsYygpOwotICAgIH0gZWxzZSBpZiAoYm94
LT5pc1RhYmxlU2VjdGlvbigpKQotICAgICAgICB0b1JlbmRlclRhYmxlU2VjdGlvbihib3gpLT5z
ZXROZWVkc0NlbGxSZWNhbGMoKTsKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGU+KGJveCku
Zm9yY2VTZWN0aW9uc1JlY2FsYygpOworICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyVGFibGVTZWN0
aW9uPihib3gpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGJveCkuc2V0
TmVlZHNDZWxsUmVjYWxjKCk7CiAKLSAgICBib3gtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRo
c1JlY2FsYygpOworICAgIGJveC5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsK
IH0KIAogUmVuZGVyT2JqZWN0KiBSZW5kZXJCb3g6OnNwbGl0QW5vbnltb3VzQm94ZXNBcm91bmRD
aGlsZChSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQpAQCAtNDc3MSwxMiArNDc3MSwxMiBAQCBS
ZW5kZXJPYmplY3QqIFJlbmRlckJveDo6c3BsaXRBbm9ueW1vdXNCb3hlc0Fyb3VuZENoaWxkKFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbAogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBpbnZhbGlk
YXRlIHRoZSB8cGFyZW50Qm94fCBiZWZvcmUgaW5zZXJ0aW5nIHRoZSBuZXcgbm9kZQogICAgICAg
ICAgICAgLy8gc28gdGhhdCB0aGUgdGFibGUgcmVwYWludGluZyBsb2dpYyBrbm93cyB0aGUgc3Ry
dWN0dXJlIGlzIGRpcnR5LgogICAgICAgICAgICAgLy8gU2VlIGZvciBleGFtcGxlIFJlbmRlclRh
YmxlQ2VsbDpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludC4KLSAgICAgICAgICAgIG1hcmtC
b3hGb3JSZWxheW91dEFmdGVyU3BsaXQocGFyZW50Qm94KTsKKyAgICAgICAgICAgIG1hcmtCb3hG
b3JSZWxheW91dEFmdGVyU3BsaXQoKnBhcmVudEJveCk7CiAgICAgICAgICAgICBwYXJlbnRCb3gt
Pmluc2VydENoaWxkSW50ZXJuYWwocG9zdEJveCwgYm94VG9TcGxpdC0+bmV4dFNpYmxpbmcoKSwg
Tm90aWZ5Q2hpbGRyZW4pOwogICAgICAgICAgICAgYm94VG9TcGxpdC0+bW92ZUNoaWxkcmVuVG8o
cG9zdEJveCwgYmVmb3JlQ2hpbGQsIDAsIHRydWUpOwogCi0gICAgICAgICAgICBtYXJrQm94Rm9y
UmVsYXlvdXRBZnRlclNwbGl0KGJveFRvU3BsaXQpOwotICAgICAgICAgICAgbWFya0JveEZvclJl
bGF5b3V0QWZ0ZXJTcGxpdChwb3N0Qm94KTsKKyAgICAgICAgICAgIG1hcmtCb3hGb3JSZWxheW91
dEFmdGVyU3BsaXQoKmJveFRvU3BsaXQpOworICAgICAgICAgICAgbWFya0JveEZvclJlbGF5b3V0
QWZ0ZXJTcGxpdCgqcG9zdEJveCk7CiAKICAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gcG9zdEJv
eDsKICAgICAgICAgfSBlbHNlCkBAIC00Nzg0LDcgKzQ3ODQsNyBAQCBSZW5kZXJPYmplY3QqIFJl
bmRlckJveDo6c3BsaXRBbm9ueW1vdXNCb3hlc0Fyb3VuZENoaWxkKFJlbmRlck9iamVjdCogYmVm
b3JlQ2hpbAogICAgIH0KIAogICAgIGlmIChkaWRTcGxpdFBhcmVudEFub255bW91c0JveGVzKQot
ICAgICAgICBtYXJrQm94Rm9yUmVsYXlvdXRBZnRlclNwbGl0KHRoaXMpOworICAgICAgICBtYXJr
Qm94Rm9yUmVsYXlvdXRBZnRlclNwbGl0KCp0aGlzKTsKIAogICAgIEFTU0VSVChiZWZvcmVDaGls
ZC0+cGFyZW50KCkgPT0gdGhpcyk7CiAgICAgcmV0dXJuIGJlZm9yZUNoaWxkOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCmluZGV4IDEzMDkyM2UyMmUzMWJiMWI3
NjhlM2RiMTU4MDE1NWFmNzc2OGM0ZmEuLmZiZWMwNGEwZWQ1Yzg0MDdmYjkxYzQ3YzMxZDJlODE3
NTUxYTlmMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAK
QEAgLTQ2OCwyNCArNDY4LDI0IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6YWRkQ2hpbGQoUmVuZGVy
T2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICBib29s
IG5lZWRzVGFibGUgPSBmYWxzZTsKIAotICAgIGlmIChuZXdDaGlsZC0+aXNSZW5kZXJUYWJsZUNv
bCgpKSB7Ci0gICAgICAgIFJlbmRlclRhYmxlQ29sKiBuZXdUYWJsZUNvbHVtbiA9IHRvUmVuZGVy
VGFibGVDb2wobmV3Q2hpbGQpOwotICAgICAgICBib29sIGlzQ29sdW1uSW5Db2x1bW5Hcm91cCA9
IG5ld1RhYmxlQ29sdW1uLT5pc1RhYmxlQ29sdW1uKCkgJiYgaXNSZW5kZXJUYWJsZUNvbCgpOwot
ICAgICAgICBuZWVkc1RhYmxlID0gIWlzVGFibGUoKSAmJiAhaXNDb2x1bW5JbkNvbHVtbkdyb3Vw
OwotICAgIH0gZWxzZSBpZiAobmV3Q2hpbGQtPmlzVGFibGVDYXB0aW9uKCkpCi0gICAgICAgIG5l
ZWRzVGFibGUgPSAhaXNUYWJsZSgpOwotICAgIGVsc2UgaWYgKG5ld0NoaWxkLT5pc1RhYmxlU2Vj
dGlvbigpKQotICAgICAgICBuZWVkc1RhYmxlID0gIWlzVGFibGUoKTsKLSAgICBlbHNlIGlmIChu
ZXdDaGlsZC0+aXNUYWJsZVJvdygpKQotICAgICAgICBuZWVkc1RhYmxlID0gIWlzVGFibGVTZWN0
aW9uKCk7Ci0gICAgZWxzZSBpZiAobmV3Q2hpbGQtPmlzVGFibGVDZWxsKCkpCi0gICAgICAgIG5l
ZWRzVGFibGUgPSAhaXNUYWJsZVJvdygpOworICAgIGlmIChpczxSZW5kZXJUYWJsZUNvbD4oKm5l
d0NoaWxkKSkgeworICAgICAgICBSZW5kZXJUYWJsZUNvbCYgbmV3VGFibGVDb2x1bW4gPSBkb3du
Y2FzdDxSZW5kZXJUYWJsZUNvbD4oKm5ld0NoaWxkKTsKKyAgICAgICAgYm9vbCBpc0NvbHVtbklu
Q29sdW1uR3JvdXAgPSBuZXdUYWJsZUNvbHVtbi5pc1RhYmxlQ29sdW1uKCkgJiYgaXM8UmVuZGVy
VGFibGVDb2w+KCp0aGlzKTsKKyAgICAgICAgbmVlZHNUYWJsZSA9ICFpczxSZW5kZXJUYWJsZT4o
KnRoaXMpICYmICFpc0NvbHVtbkluQ29sdW1uR3JvdXA7CisgICAgfSBlbHNlIGlmIChpczxSZW5k
ZXJUYWJsZUNhcHRpb24+KCpuZXdDaGlsZCkpCisgICAgICAgIG5lZWRzVGFibGUgPSAhaXM8UmVu
ZGVyVGFibGU+KCp0aGlzKTsKKyAgICBlbHNlIGlmIChpczxSZW5kZXJUYWJsZVNlY3Rpb24+KCpu
ZXdDaGlsZCkpCisgICAgICAgIG5lZWRzVGFibGUgPSAhaXM8UmVuZGVyVGFibGU+KCp0aGlzKTsK
KyAgICBlbHNlIGlmIChpczxSZW5kZXJUYWJsZVJvdz4oKm5ld0NoaWxkKSkKKyAgICAgICAgbmVl
ZHNUYWJsZSA9ICFpczxSZW5kZXJUYWJsZVNlY3Rpb24+KCp0aGlzKTsKKyAgICBlbHNlIGlmIChp
czxSZW5kZXJUYWJsZUNlbGw+KCpuZXdDaGlsZCkpCisgICAgICAgIG5lZWRzVGFibGUgPSAhaXM8
UmVuZGVyVGFibGVSb3c+KCp0aGlzKTsKIAogICAgIGlmIChuZWVkc1RhYmxlKSB7CiAgICAgICAg
IFJlbmRlclRhYmxlKiB0YWJsZTsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBhZnRlckNoaWxkID0g
YmVmb3JlQ2hpbGQgPyBiZWZvcmVDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgOiBtX2xhc3RDaGls
ZDsKLSAgICAgICAgaWYgKGFmdGVyQ2hpbGQgJiYgYWZ0ZXJDaGlsZC0+aXNBbm9ueW1vdXMoKSAm
JiBhZnRlckNoaWxkLT5pc1RhYmxlKCkgJiYgIWFmdGVyQ2hpbGQtPmlzQmVmb3JlQ29udGVudCgp
KQotICAgICAgICAgICAgdGFibGUgPSB0b1JlbmRlclRhYmxlKGFmdGVyQ2hpbGQpOworICAgICAg
ICBpZiAoYWZ0ZXJDaGlsZCAmJiBhZnRlckNoaWxkLT5pc0Fub255bW91cygpICYmIGlzPFJlbmRl
clRhYmxlPigqYWZ0ZXJDaGlsZCkgJiYgIWFmdGVyQ2hpbGQtPmlzQmVmb3JlQ29udGVudCgpKQor
ICAgICAgICAgICAgdGFibGUgPSBkb3duY2FzdDxSZW5kZXJUYWJsZT4oYWZ0ZXJDaGlsZCk7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgdGFibGUgPSBSZW5kZXJUYWJsZTo6Y3JlYXRlQW5v
bnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKHRoaXMpOwogICAgICAgICAgICAgYWRkQ2hpbGQodGFi
bGUsIGJlZm9yZUNoaWxkKTsKQEAgLTQ5NCw3ICs0OTQsNyBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6
OmFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hp
bGQpCiAgICAgfSBlbHNlCiAgICAgICAgIGluc2VydENoaWxkSW50ZXJuYWwobmV3Q2hpbGQsIGJl
Zm9yZUNoaWxkLCBOb3RpZnlDaGlsZHJlbik7CiAKLSAgICBpZiAoaXM8UmVuZGVyVGV4dD4obmV3
Q2hpbGQpKQorICAgIGlmIChpczxSZW5kZXJUZXh0PigqbmV3Q2hpbGQpKQogICAgICAgICBkb3du
Y2FzdDxSZW5kZXJUZXh0PigqbmV3Q2hpbGQpLnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZUVxdWFsLCBudWxscHRyKTsKIAogICAgIC8vIFNWRyBjcmVhdGVzIHJlbmRlcmVycyBmb3IgPGcg
ZGlzcGxheT0ibm9uZSI+LCBhcyBTVkcgcmVxdWlyZXMgY2hpbGRyZW4gb2YgaGlkZGVuCkBAIC01
MDYsNyArNTA2LDcgQEAgdm9pZCBSZW5kZXJFbGVtZW50OjphZGRDaGlsZChSZW5kZXJPYmplY3Qq
IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogICAgIC8vIFRvIGF2b2lkIHRo
ZSBwcm9ibGVtIGFsbHRvZ2V0aGVyLCBkZXRlY3QgZWFybHkgaWYgd2UncmUgaW5zaWRlIGEgaGlk
ZGVuIFNWRyBzdWJ0cmVlCiAgICAgLy8gYW5kIHN0b3AgY3JlYXRpbmcgbGF5ZXJzIGF0IGFsbCBm
b3IgdGhlc2UgY2FzZXMgLSB0aGV5J3JlIG5vdCB1c2VkIGFueXdheXMuCiAgICAgaWYgKG5ld0No
aWxkLT5oYXNMYXllcigpICYmICFsYXllckNyZWF0aW9uQWxsb3dlZEZvclN1YnRyZWUoKSkKLSAg
ICAgICAgdG9SZW5kZXJMYXllck1vZGVsT2JqZWN0KG5ld0NoaWxkKS0+bGF5ZXIoKS0+cmVtb3Zl
T25seVRoaXNMYXllcigpOworICAgICAgICBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0
PigqbmV3Q2hpbGQpLmxheWVyKCktPnJlbW92ZU9ubHlUaGlzTGF5ZXIoKTsKIAogICAgIFNWR1Jl
bmRlclN1cHBvcnQ6OmNoaWxkQWRkZWQoKnRoaXMsICpuZXdDaGlsZCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCBiZDg2YWVhYTNmYzY3YTRjMDg4Y2Q3
YWYzNzNlZGU2MWM4YTJmYmY4Li40NGYyNDJmYjRiNzY5Y2QzMzU0YjQwZDEzOTY2ZWRiY2FkNmU4
MzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTU2MjIs
OCArNTYyMiw4IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmxvY2FsQm91bmRpbmdCb3goQ2Fs
Y3VsYXRlTGF5ZXJCb3VuZHNGbGFncyBmbGFncykgY29uc3QKICAgICBMYXlvdXRSZWN0IHJlc3Vs
dDsKICAgICBpZiAocmVuZGVyZXIoKS5pc0lubGluZSgpICYmIHJlbmRlcmVyKCkuaXNSZW5kZXJJ
bmxpbmUoKSkKICAgICAgICAgcmVzdWx0ID0gdG9SZW5kZXJJbmxpbmUocmVuZGVyZXIoKSkubGlu
ZXNWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KCk7Ci0gICAgZWxzZSBpZiAocmVuZGVyZXIoKS5p
c1RhYmxlUm93KCkpIHsKLSAgICAgICAgUmVuZGVyVGFibGVSb3cmIHRhYmxlUm93ID0gdG9SZW5k
ZXJUYWJsZVJvdyhyZW5kZXJlcigpKTsKKyAgICBlbHNlIGlmIChpczxSZW5kZXJUYWJsZVJvdz4o
cmVuZGVyZXIoKSkpIHsKKyAgICAgICAgUmVuZGVyVGFibGVSb3cmIHRhYmxlUm93ID0gZG93bmNh
c3Q8UmVuZGVyVGFibGVSb3c+KHJlbmRlcmVyKCkpOwogICAgICAgICAvLyBPdXIgYm91bmRpbmcg
Ym94IGlzIGp1c3QgdGhlIHVuaW9uIG9mIGFsbCBvZiBvdXIgY2VsbHMnIGJvcmRlci9vdmVyZmxv
dyByZWN0cy4KICAgICAgICAgZm9yIChSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSB0YWJsZVJvdy5m
aXJzdENlbGwoKTsgY2VsbDsgY2VsbCA9IGNlbGwtPm5leHRDZWxsKCkpIHsKICAgICAgICAgICAg
IExheW91dFJlY3QgYmJveCA9IGNlbGwtPmJvcmRlckJveFJlY3QoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCmluZGV4IGQxMWVlNmM4OGU5ODY3YzNmNGVmYzg1ODdm
YjBhNzk3ZmNlZTdlZTUuLmY4MjkzYTlmZWI3ZGFhZThhNmU1MGEwYjEwYTk1OTQzYzA5YjQ4MWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcApAQCAtMTM5LDI4ICsx
MzksMjggQEAgdm9pZCBSZW5kZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwg
UmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICBib29sIHdyYXBJbkFub255bW91c1Nl
Y3Rpb24gPSAhY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpOwogCi0gICAgaWYgKGNoaWxk
LT5pc1RhYmxlQ2FwdGlvbigpKQorICAgIGlmIChpczxSZW5kZXJUYWJsZUNhcHRpb24+KCpjaGls
ZCkpCiAgICAgICAgIHdyYXBJbkFub255bW91c1NlY3Rpb24gPSBmYWxzZTsKLSAgICBlbHNlIGlm
IChjaGlsZC0+aXNSZW5kZXJUYWJsZUNvbCgpKSB7CisgICAgZWxzZSBpZiAoaXM8UmVuZGVyVGFi
bGVDb2w+KCpjaGlsZCkpIHsKICAgICAgICAgbV9oYXNDb2xFbGVtZW50cyA9IHRydWU7CiAgICAg
ICAgIHdyYXBJbkFub255bW91c1NlY3Rpb24gPSBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKGNoaWxk
LT5pc1RhYmxlU2VjdGlvbigpKSB7CisgICAgfSBlbHNlIGlmIChpczxSZW5kZXJUYWJsZVNlY3Rp
b24+KCpjaGlsZCkpIHsKICAgICAgICAgc3dpdGNoIChjaGlsZC0+c3R5bGUoKS5kaXNwbGF5KCkp
IHsKICAgICAgICAgICAgIGNhc2UgVEFCTEVfSEVBREVSX0dST1VQOgogICAgICAgICAgICAgICAg
IHJlc2V0U2VjdGlvblBvaW50ZXJJZk5vdEJlZm9yZShtX2hlYWQsIGJlZm9yZUNoaWxkKTsKICAg
ICAgICAgICAgICAgICBpZiAoIW1faGVhZCkgewotICAgICAgICAgICAgICAgICAgICBtX2hlYWQg
PSB0b1JlbmRlclRhYmxlU2VjdGlvbihjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIG1faGVh
ZCA9IGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4oY2hpbGQpOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHJlc2V0U2VjdGlvblBvaW50ZXJJZk5vdEJl
Zm9yZShtX2ZpcnN0Qm9keSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
IW1fZmlyc3RCb2R5KSAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZmlyc3RCb2R5ID0gdG9S
ZW5kZXJUYWJsZVNlY3Rpb24oY2hpbGQpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9maXJz
dEJvZHkgPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGNoaWxkKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgd3JhcEluQW5vbnltb3VzU2VjdGlvbiA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBUQUJMRV9GT09URVJfR1JP
VVA6CiAgICAgICAgICAgICAgICAgcmVzZXRTZWN0aW9uUG9pbnRlcklmTm90QmVmb3JlKG1fZm9v
dCwgYmVmb3JlQ2hpbGQpOwogICAgICAgICAgICAgICAgIGlmICghbV9mb290KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fZm9vdCA9IHRvUmVuZGVyVGFibGVTZWN0aW9uKGNoaWxkKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9mb290ID0gZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPihjaGls
ZCk7CiAgICAgICAgICAgICAgICAgICAgIHdyYXBJbkFub255bW91c1NlY3Rpb24gPSBmYWxzZTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTY4LDE4
ICsxNjgsMTggQEAgdm9pZCBSZW5kZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKICAgICAgICAgICAgIGNhc2UgVEFCTEVfUk9X
X0dST1VQOgogICAgICAgICAgICAgICAgIHJlc2V0U2VjdGlvblBvaW50ZXJJZk5vdEJlZm9yZSht
X2ZpcnN0Qm9keSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICAgICAgICAgIGlmICghbV9maXJzdEJv
ZHkpCi0gICAgICAgICAgICAgICAgICAgIG1fZmlyc3RCb2R5ID0gdG9SZW5kZXJUYWJsZVNlY3Rp
b24oY2hpbGQpOworICAgICAgICAgICAgICAgICAgICBtX2ZpcnN0Qm9keSA9IGRvd25jYXN0PFJl
bmRlclRhYmxlU2VjdGlvbj4oY2hpbGQpOwogICAgICAgICAgICAgICAgIHdyYXBJbkFub255bW91
c1NlY3Rpb24gPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0K
LSAgICB9IGVsc2UgaWYgKGNoaWxkLT5pc1RhYmxlQ2VsbCgpIHx8IGNoaWxkLT5pc1RhYmxlUm93
KCkpCisgICAgfSBlbHNlIGlmIChpczxSZW5kZXJUYWJsZUNlbGw+KCpjaGlsZCkgfHwgaXM8UmVu
ZGVyVGFibGVSb3c+KCpjaGlsZCkpCiAgICAgICAgIHdyYXBJbkFub255bW91c1NlY3Rpb24gPSB0
cnVlOwogICAgIGVsc2UKICAgICAgICAgd3JhcEluQW5vbnltb3VzU2VjdGlvbiA9IHRydWU7CiAK
LSAgICBpZiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkpCisgICAgaWYgKGlzPFJlbmRlclRhYmxl
U2VjdGlvbj4oKmNoaWxkKSkKICAgICAgICAgc2V0TmVlZHNTZWN0aW9uUmVjYWxjKCk7CiAKICAg
ICBpZiAoIXdyYXBJbkFub255bW91c1NlY3Rpb24pIHsKQEAgLTE5MCwzMiArMTkwLDMyIEBAIHZv
aWQgUmVuZGVyVGFibGU6OmFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWJlZm9y
ZUNoaWxkICYmIGxhc3RDaGlsZCgpICYmIGxhc3RDaGlsZCgpLT5pc1RhYmxlU2VjdGlvbigpICYm
IGxhc3RDaGlsZCgpLT5pc0Fub255bW91cygpICYmICFsYXN0Q2hpbGQoKS0+aXNCZWZvcmVDb250
ZW50KCkpIHsKLSAgICAgICAgdG9SZW5kZXJUYWJsZVNlY3Rpb24obGFzdENoaWxkKCkpLT5hZGRD
aGlsZChjaGlsZCk7CisgICAgaWYgKCFiZWZvcmVDaGlsZCAmJiBpczxSZW5kZXJUYWJsZVNlY3Rp
b24+KGxhc3RDaGlsZCgpKSAmJiBsYXN0Q2hpbGQoKS0+aXNBbm9ueW1vdXMoKSAmJiAhbGFzdENo
aWxkKCktPmlzQmVmb3JlQ29udGVudCgpKSB7CisgICAgICAgIGRvd25jYXN0PFJlbmRlclRhYmxl
U2VjdGlvbj4oKmxhc3RDaGlsZCgpKS5hZGRDaGlsZChjaGlsZCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgIWJlZm9yZUNoaWxkLT5pc0Fub255bW91
cygpICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSA9PSB0aGlzKSB7CiAgICAgICAgIFJlbmRlck9i
amVjdCogc2VjdGlvbiA9IGJlZm9yZUNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAg
aWYgKHNlY3Rpb24gJiYgc2VjdGlvbi0+aXNUYWJsZVNlY3Rpb24oKSAmJiBzZWN0aW9uLT5pc0Fu
b255bW91cygpKSB7Ci0gICAgICAgICAgICB0b1JlbmRlclRhYmxlU2VjdGlvbihzZWN0aW9uKS0+
YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICBpZiAoaXM8UmVuZGVyVGFibGVTZWN0aW9uPihzZWN0
aW9uKSAmJiBzZWN0aW9uLT5pc0Fub255bW91cygpKSB7CisgICAgICAgICAgICBkb3duY2FzdDxS
ZW5kZXJUYWJsZVNlY3Rpb24+KCpzZWN0aW9uKS5hZGRDaGlsZChjaGlsZCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKICAgICBSZW5kZXJPYmplY3QqIGxhc3RCb3gg
PSBiZWZvcmVDaGlsZDsKLSAgICB3aGlsZSAobGFzdEJveCAmJiBsYXN0Qm94LT5wYXJlbnQoKS0+
aXNBbm9ueW1vdXMoKSAmJiAhbGFzdEJveC0+aXNUYWJsZVNlY3Rpb24oKSAmJiBsYXN0Qm94LT5z
dHlsZSgpLmRpc3BsYXkoKSAhPSBUQUJMRV9DQVBUSU9OICYmIGxhc3RCb3gtPnN0eWxlKCkuZGlz
cGxheSgpICE9IFRBQkxFX0NPTFVNTl9HUk9VUCkKKyAgICB3aGlsZSAobGFzdEJveCAmJiBsYXN0
Qm94LT5wYXJlbnQoKS0+aXNBbm9ueW1vdXMoKSAmJiAhaXM8UmVuZGVyVGFibGVTZWN0aW9uPigq
bGFzdEJveCkgJiYgbGFzdEJveC0+c3R5bGUoKS5kaXNwbGF5KCkgIT0gVEFCTEVfQ0FQVElPTiAm
JiBsYXN0Qm94LT5zdHlsZSgpLmRpc3BsYXkoKSAhPSBUQUJMRV9DT0xVTU5fR1JPVVApCiAgICAg
ICAgIGxhc3RCb3ggPSBsYXN0Qm94LT5wYXJlbnQoKTsKICAgICBpZiAobGFzdEJveCAmJiBsYXN0
Qm94LT5pc0Fub255bW91cygpICYmICFpc0FmdGVyQ29udGVudChsYXN0Qm94KSAmJiBsYXN0Qm94
LT5pc1RhYmxlU2VjdGlvbigpKSB7Ci0gICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlv
biA9IHRvUmVuZGVyVGFibGVTZWN0aW9uKGxhc3RCb3gpOwotICAgICAgICBpZiAoYmVmb3JlQ2hp
bGQgPT0gc2VjdGlvbikKLSAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gc2VjdGlvbi0+Zmlyc3RS
b3coKTsKLSAgICAgICAgc2VjdGlvbi0+YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAg
ICAgICAgUmVuZGVyVGFibGVTZWN0aW9uJiBzZWN0aW9uID0gZG93bmNhc3Q8UmVuZGVyVGFibGVT
ZWN0aW9uPigqbGFzdEJveCk7CisgICAgICAgIGlmIChiZWZvcmVDaGlsZCA9PSAmc2VjdGlvbikK
KyAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gc2VjdGlvbi5maXJzdFJvdygpOworICAgICAgICBz
ZWN0aW9uLmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgIWJlZm9yZUNoaWxkLT5pc1RhYmxlU2VjdGlv
bigpICYmIGJlZm9yZUNoaWxkLT5zdHlsZSgpLmRpc3BsYXkoKSAhPSBUQUJMRV9DQVBUSU9OICYm
IGJlZm9yZUNoaWxkLT5zdHlsZSgpLmRpc3BsYXkoKSAhPSBUQUJMRV9DT0xVTU5fR1JPVVApCi0g
ICAgICAgIGJlZm9yZUNoaWxkID0gMDsKKyAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgIWlzPFJlbmRl
clRhYmxlU2VjdGlvbj4oKmJlZm9yZUNoaWxkKSAmJiBiZWZvcmVDaGlsZC0+c3R5bGUoKS5kaXNw
bGF5KCkgIT0gVEFCTEVfQ0FQVElPTiAmJiBiZWZvcmVDaGlsZC0+c3R5bGUoKS5kaXNwbGF5KCkg
IT0gVEFCTEVfQ09MVU1OX0dST1VQKQorICAgICAgICBiZWZvcmVDaGlsZCA9IG51bGxwdHI7CiAK
ICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSBSZW5kZXJUYWJsZVNlY3Rpb246OmNy
ZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcih0aGlzKTsKICAgICBhZGRDaGlsZChzZWN0
aW9uLCBiZWZvcmVDaGlsZCk7CkBAIC00NTksOCArNDU5LDggQEAgdm9pZCBSZW5kZXJUYWJsZTo6
bGF5b3V0KCkKICAgICBib29sIGNvbGxhcHNpbmcgPSBjb2xsYXBzZUJvcmRlcnMoKTsKIAogICAg
IGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJFbGVtZW50PigqdGhpcykp
IHsKLSAgICAgICAgaWYgKGNoaWxkLmlzVGFibGVTZWN0aW9uKCkpIHsKLSAgICAgICAgICAgIFJl
bmRlclRhYmxlU2VjdGlvbiYgc2VjdGlvbiA9IHRvUmVuZGVyVGFibGVTZWN0aW9uKGNoaWxkKTsK
KyAgICAgICAgaWYgKGlzPFJlbmRlclRhYmxlU2VjdGlvbj4oY2hpbGQpKSB7CisgICAgICAgICAg
ICBSZW5kZXJUYWJsZVNlY3Rpb24mIHNlY3Rpb24gPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rp
b24+KGNoaWxkKTsKICAgICAgICAgICAgIGlmIChtX2NvbHVtbkxvZ2ljYWxXaWR0aENoYW5nZWQp
CiAgICAgICAgICAgICAgICAgc2VjdGlvbi5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhp
cyk7CiAgICAgICAgICAgICBzZWN0aW9uLmxheW91dElmTmVlZGVkKCk7CkBAIC00NjgsOCArNDY4
LDggQEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICAgICAgICAgIGlmIChjb2xsYXBz
aW5nKQogICAgICAgICAgICAgICAgIHNlY3Rpb24ucmVjYWxjT3V0ZXJCb3JkZXIoKTsKICAgICAg
ICAgICAgIEFTU0VSVCghc2VjdGlvbi5uZWVkc0xheW91dCgpKTsKLSAgICAgICAgfSBlbHNlIGlm
IChjaGlsZC5pc1JlbmRlclRhYmxlQ29sKCkpIHsKLSAgICAgICAgICAgIHRvUmVuZGVyVGFibGVD
b2woY2hpbGQpLmxheW91dElmTmVlZGVkKCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVy
VGFibGVDb2w+KGNoaWxkKSkgeworICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVDb2w+
KGNoaWxkKS5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICAgICAgQVNTRVJUKCFjaGlsZC5uZWVk
c0xheW91dCgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTg1MSwxNSArODUxLDE1IEBAIHZvaWQg
UmVuZGVyVGFibGU6OmFwcGVuZENvbHVtbih1bnNpZ25lZCBzcGFuKQogUmVuZGVyVGFibGVDb2wq
IFJlbmRlclRhYmxlOjpmaXJzdENvbHVtbigpIGNvbnN0CiB7CiAgICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkgewotICAgICAgICBpZiAoY2hpbGQtPmlzUmVuZGVyVGFibGVDb2woKSkKLSAgICAgICAg
ICAgIHJldHVybiB0b1JlbmRlclRhYmxlQ29sKGNoaWxkKTsKKyAgICAgICAgaWYgKGlzPFJlbmRl
clRhYmxlQ29sPigqY2hpbGQpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRh
YmxlQ29sPihjaGlsZCk7CiAKICAgICAgICAgLy8gV2UgYWxsb3cgb25seSB0YWJsZS1jYXB0aW9u
cyBiZWZvcmUgY29sdW1ucyBvciBjb2x1bW4tZ3JvdXBzLgotICAgICAgICBpZiAoIWNoaWxkLT5p
c1RhYmxlQ2FwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICghaXM8
UmVuZGVyVGFibGVDYXB0aW9uPigqY2hpbGQpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHZvaWQg
UmVuZGVyVGFibGU6OnVwZGF0ZUNvbHVtbkNhY2hlKCkgY29uc3QKQEAgLTEwMDYsMzEgKzEwMDYs
MzEgQEAgdm9pZCBSZW5kZXJUYWJsZTo6cmVjYWxjU2VjdGlvbnMoKSBjb25zdAogICAgICAgICAg
ICAgbV9oYXNDb2xFbGVtZW50cyA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBUQUJMRV9IRUFERVJfR1JPVVA6Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVT
ZWN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24g
PSB0b1JlbmRlclRhYmxlU2VjdGlvbihjaGlsZCk7CisgICAgICAgICAgICBpZiAoaXM8UmVuZGVy
VGFibGVTZWN0aW9uPigqY2hpbGQpKSB7CisgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVTZWN0
aW9uJiBzZWN0aW9uID0gZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPigqY2hpbGQpOwogICAg
ICAgICAgICAgICAgIGlmICghbV9oZWFkKQotICAgICAgICAgICAgICAgICAgICBtX2hlYWQgPSBz
ZWN0aW9uOworICAgICAgICAgICAgICAgICAgICBtX2hlYWQgPSAmc2VjdGlvbjsKICAgICAgICAg
ICAgICAgICBlbHNlIGlmICghbV9maXJzdEJvZHkpCi0gICAgICAgICAgICAgICAgICAgIG1fZmly
c3RCb2R5ID0gc2VjdGlvbjsKLSAgICAgICAgICAgICAgICBzZWN0aW9uLT5yZWNhbGNDZWxsc0lm
TmVlZGVkKCk7CisgICAgICAgICAgICAgICAgICAgIG1fZmlyc3RCb2R5ID0gJnNlY3Rpb247Cisg
ICAgICAgICAgICAgICAgc2VjdGlvbi5yZWNhbGNDZWxsc0lmTmVlZGVkKCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUQUJMRV9GT09URVJfR1JPVVA6
Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkpIHsKLSAgICAgICAgICAg
ICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSB0b1JlbmRlclRhYmxlU2VjdGlvbihj
aGlsZCk7CisgICAgICAgICAgICBpZiAoaXM8UmVuZGVyVGFibGVTZWN0aW9uPigqY2hpbGQpKSB7
CisgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uJiBzZWN0aW9uID0gZG93bmNhc3Q8
UmVuZGVyVGFibGVTZWN0aW9uPigqY2hpbGQpOwogICAgICAgICAgICAgICAgIGlmICghbV9mb290
KQotICAgICAgICAgICAgICAgICAgICBtX2Zvb3QgPSBzZWN0aW9uOworICAgICAgICAgICAgICAg
ICAgICBtX2Zvb3QgPSAmc2VjdGlvbjsKICAgICAgICAgICAgICAgICBlbHNlIGlmICghbV9maXJz
dEJvZHkpCi0gICAgICAgICAgICAgICAgICAgIG1fZmlyc3RCb2R5ID0gc2VjdGlvbjsKLSAgICAg
ICAgICAgICAgICBzZWN0aW9uLT5yZWNhbGNDZWxsc0lmTmVlZGVkKCk7CisgICAgICAgICAgICAg
ICAgICAgIG1fZmlyc3RCb2R5ID0gJnNlY3Rpb247CisgICAgICAgICAgICAgICAgc2VjdGlvbi5y
ZWNhbGNDZWxsc0lmTmVlZGVkKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBUQUJMRV9ST1dfR1JPVVA6Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPmlz
VGFibGVTZWN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNl
Y3Rpb24gPSB0b1JlbmRlclRhYmxlU2VjdGlvbihjaGlsZCk7CisgICAgICAgICAgICBpZiAoaXM8
UmVuZGVyVGFibGVTZWN0aW9uPigqY2hpbGQpKSB7CisgICAgICAgICAgICAgICAgUmVuZGVyVGFi
bGVTZWN0aW9uJiBzZWN0aW9uID0gZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPigqY2hpbGQp
OwogICAgICAgICAgICAgICAgIGlmICghbV9maXJzdEJvZHkpCi0gICAgICAgICAgICAgICAgICAg
IG1fZmlyc3RCb2R5ID0gc2VjdGlvbjsKLSAgICAgICAgICAgICAgICBzZWN0aW9uLT5yZWNhbGND
ZWxsc0lmTmVlZGVkKCk7CisgICAgICAgICAgICAgICAgICAgIG1fZmlyc3RCb2R5ID0gJnNlY3Rp
b247CisgICAgICAgICAgICAgICAgc2VjdGlvbi5yZWNhbGNDZWxsc0lmTmVlZGVkKCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTEyODQs
MTcgKzEyODQsMTcgQEAgUmVuZGVyVGFibGVTZWN0aW9uKiBSZW5kZXJUYWJsZTo6c2VjdGlvbkFi
b3ZlKGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiwKICAgICByZWNhbGNTZWN0aW9u
c0lmTmVlZGVkKCk7CiAKICAgICBpZiAoc2VjdGlvbiA9PSBtX2hlYWQpCi0gICAgICAgIHJldHVy
biAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFJlbmRlck9iamVjdCogcHJldlNl
Y3Rpb24gPSBzZWN0aW9uID09IG1fZm9vdCA/IGxhc3RDaGlsZCgpIDogc2VjdGlvbi0+cHJldmlv
dXNTaWJsaW5nKCk7CiAgICAgd2hpbGUgKHByZXZTZWN0aW9uKSB7Ci0gICAgICAgIGlmIChwcmV2
U2VjdGlvbi0+aXNUYWJsZVNlY3Rpb24oKSAmJiBwcmV2U2VjdGlvbiAhPSBtX2hlYWQgJiYgcHJl
dlNlY3Rpb24gIT0gbV9mb290ICYmIChza2lwRW1wdHlTZWN0aW9ucyA9PSBEb05vdFNraXBFbXB0
eVNlY3Rpb25zIHx8IHRvUmVuZGVyVGFibGVTZWN0aW9uKHByZXZTZWN0aW9uKS0+bnVtUm93cygp
KSkKKyAgICAgICAgaWYgKGlzPFJlbmRlclRhYmxlU2VjdGlvbj4oKnByZXZTZWN0aW9uKSAmJiBw
cmV2U2VjdGlvbiAhPSBtX2hlYWQgJiYgcHJldlNlY3Rpb24gIT0gbV9mb290ICYmIChza2lwRW1w
dHlTZWN0aW9ucyA9PSBEb05vdFNraXBFbXB0eVNlY3Rpb25zIHx8IGRvd25jYXN0PFJlbmRlclRh
YmxlU2VjdGlvbj4oKnByZXZTZWN0aW9uKS5udW1Sb3dzKCkpKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIHByZXZTZWN0aW9uID0gcHJldlNlY3Rpb24tPnByZXZpb3VzU2libGluZygpOwog
ICAgIH0KICAgICBpZiAoIXByZXZTZWN0aW9uICYmIG1faGVhZCAmJiAoc2tpcEVtcHR5U2VjdGlv
bnMgPT0gRG9Ob3RTa2lwRW1wdHlTZWN0aW9ucyB8fCBtX2hlYWQtPm51bVJvd3MoKSkpCiAgICAg
ICAgIHByZXZTZWN0aW9uID0gbV9oZWFkOwotICAgIHJldHVybiB0b1JlbmRlclRhYmxlU2VjdGlv
bihwcmV2U2VjdGlvbik7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4o
cHJldlNlY3Rpb24pOwogfQogCiBSZW5kZXJUYWJsZVNlY3Rpb24qIFJlbmRlclRhYmxlOjpzZWN0
aW9uQmVsb3coY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uLCBTa2lwRW1wdHlTZWN0
aW9uc1ZhbHVlIHNraXBFbXB0eVNlY3Rpb25zKSBjb25zdApAQCAtMTMwMiwxNyArMTMwMiwxNyBA
QCBSZW5kZXJUYWJsZVNlY3Rpb24qIFJlbmRlclRhYmxlOjpzZWN0aW9uQmVsb3coY29uc3QgUmVu
ZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uLAogICAgIHJlY2FsY1NlY3Rpb25zSWZOZWVkZWQoKTsK
IAogICAgIGlmIChzZWN0aW9uID09IG1fZm9vdCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgUmVuZGVyT2JqZWN0KiBuZXh0U2VjdGlvbiA9IHNlY3Rp
b24gPT0gbV9oZWFkID8gZmlyc3RDaGlsZCgpIDogc2VjdGlvbi0+bmV4dFNpYmxpbmcoKTsKICAg
ICB3aGlsZSAobmV4dFNlY3Rpb24pIHsKLSAgICAgICAgaWYgKG5leHRTZWN0aW9uLT5pc1RhYmxl
U2VjdGlvbigpICYmIG5leHRTZWN0aW9uICE9IG1faGVhZCAmJiBuZXh0U2VjdGlvbiAhPSBtX2Zv
b3QgJiYgKHNraXBFbXB0eVNlY3Rpb25zICA9PSBEb05vdFNraXBFbXB0eVNlY3Rpb25zIHx8IHRv
UmVuZGVyVGFibGVTZWN0aW9uKG5leHRTZWN0aW9uKS0+bnVtUm93cygpKSkKKyAgICAgICAgaWYg
KGlzPFJlbmRlclRhYmxlU2VjdGlvbj4oKm5leHRTZWN0aW9uKSAmJiBuZXh0U2VjdGlvbiAhPSBt
X2hlYWQgJiYgbmV4dFNlY3Rpb24gIT0gbV9mb290ICYmIChza2lwRW1wdHlTZWN0aW9ucyAgPT0g
RG9Ob3RTa2lwRW1wdHlTZWN0aW9ucyB8fCBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KCpu
ZXh0U2VjdGlvbikubnVtUm93cygpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBuZXh0
U2VjdGlvbiA9IG5leHRTZWN0aW9uLT5uZXh0U2libGluZygpOwogICAgIH0KICAgICBpZiAoIW5l
eHRTZWN0aW9uICYmIG1fZm9vdCAmJiAoc2tpcEVtcHR5U2VjdGlvbnMgPT0gRG9Ob3RTa2lwRW1w
dHlTZWN0aW9ucyB8fCBtX2Zvb3QtPm51bVJvd3MoKSkpCiAgICAgICAgIG5leHRTZWN0aW9uID0g
bV9mb290OwotICAgIHJldHVybiB0b1JlbmRlclRhYmxlU2VjdGlvbihuZXh0U2VjdGlvbik7Cisg
ICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4obmV4dFNlY3Rpb24pOwogfQog
CiBSZW5kZXJUYWJsZVNlY3Rpb24qIFJlbmRlclRhYmxlOjpib3R0b21TZWN0aW9uKCkgY29uc3QK
QEAgLTEzMjMsMTEgKzEzMjMsMTEgQEAgUmVuZGVyVGFibGVTZWN0aW9uKiBSZW5kZXJUYWJsZTo6
Ym90dG9tU2VjdGlvbigpIGNvbnN0CiAgICAgICAgIHJldHVybiBtX2Zvb3Q7CiAKICAgICBmb3Ig
KFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
PnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24o
KSkKLSAgICAgICAgICAgIHJldHVybiB0b1JlbmRlclRhYmxlU2VjdGlvbihjaGlsZCk7CisgICAg
ICAgIGlmIChpczxSZW5kZXJUYWJsZVNlY3Rpb24+KCpjaGlsZCkpCisgICAgICAgICAgICByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPihjaGlsZCk7CiAgICAgfQogCi0gICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFJlbmRlclRhYmxlQ2VsbCogUmVuZGVy
VGFibGU6OmNlbGxBYm92ZShjb25zdCBSZW5kZXJUYWJsZUNlbGwqIGNlbGwpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCmluZGV4IGQ5ZDFlZThiMDRlMTdlNzhjOWY1
YWRhM2Y1ZDZiYWI3MTI3MTRiMTMuLjk0ZDFjYmRiOWQxMmFmODdmYWU1YWE1NDA5MGUxZjk0ZTg2
NGIzZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCkBAIC0zODEsOCAr
MzgxLDYgQEAgaW5saW5lIFJlbmRlclRhYmxlU2VjdGlvbiogUmVuZGVyVGFibGU6OnRvcFNlY3Rp
b24oKSBjb25zdAogICAgIHJldHVybiBtX2Zvb3Q7CiB9CiAKLVJFTkRFUl9PQkpFQ1RfVFlQRV9D
QVNUUyhSZW5kZXJUYWJsZSwgaXNUYWJsZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
IFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVChSZW5kZXJUYWJsZSwgaXNUYWJs
ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2Fw
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDYXB0aW9uLmNw
cAppbmRleCBjYTE4YzRjN2Q4MzljMjA1NTljNzhlZDUyZWVmZWM1NjljNmRiNzhiLi5jZTMyNDFj
YzQwOGI4ZWUxYTQ2NGM5YmVmZThmMmI4NDEwYTNhMDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDYXB0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDYXB0aW9uLmNwcApAQCAtNTUsNyArNTUsNyBAQCB2b2lk
IFJlbmRlclRhYmxlQ2FwdGlvbjo6d2lsbEJlUmVtb3ZlZEZyb21UcmVlKCkKIAogUmVuZGVyVGFi
bGUqIFJlbmRlclRhYmxlQ2FwdGlvbjo6dGFibGUoKSBjb25zdAogewotICAgIHJldHVybiB0b1Jl
bmRlclRhYmxlKHBhcmVudCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGFibGU+KHBh
cmVudCgpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ2VsbC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2Vs
bC5oCmluZGV4IDc3YzkyYjk5MGI4ZGI1Y2FjY2NkYmRlMDEyNDgyYjgzZDM4NTljMjUuLjIyZjg2
ZGM5YTAyZThjZDk2NTc5OTc1YjQ2ZGQ4NTc5ZWFlYjUxYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKQEAgLTc0LDkgKzc0LDkgQEAgcHVibGljOgogICAg
IFJlbmRlclRhYmxlQ2VsbCogbmV4dENlbGwoKSBjb25zdDsKICAgICBSZW5kZXJUYWJsZUNlbGwq
IHByZXZpb3VzQ2VsbCgpIGNvbnN0OwogCi0gICAgUmVuZGVyVGFibGVSb3cqIHJvdygpIGNvbnN0
IHsgcmV0dXJuIHRvUmVuZGVyVGFibGVSb3cocGFyZW50KCkpOyB9Ci0gICAgUmVuZGVyVGFibGVT
ZWN0aW9uKiBzZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gdG9SZW5kZXJUYWJsZVNlY3Rpb24ocGFy
ZW50KCktPnBhcmVudCgpKTsgfQotICAgIFJlbmRlclRhYmxlKiB0YWJsZSgpIGNvbnN0IHsgcmV0
dXJuIHRvUmVuZGVyVGFibGUocGFyZW50KCktPnBhcmVudCgpLT5wYXJlbnQoKSk7IH0KKyAgICBS
ZW5kZXJUYWJsZVJvdyogcm93KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGFibGVS
b3c+KHBhcmVudCgpKTsgfQorICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4ocGFyZW50KCktPnBhcmVudCgp
KTsgfQorICAgIFJlbmRlclRhYmxlKiB0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PFJl
bmRlclRhYmxlPihwYXJlbnQoKS0+cGFyZW50KCktPnBhcmVudCgpKTsgfQogCiAgICAgdW5zaWdu
ZWQgcm93SW5kZXgoKSBjb25zdAogICAgIHsKQEAgLTI5NCwyNiArMjk0LDI0IEBAIHByaXZhdGU6
CiAgICAgaW50IG1faW50cmluc2ljUGFkZGluZ0FmdGVyOwogfTsKIAotUkVOREVSX09CSkVDVF9U
WVBFX0NBU1RTKFJlbmRlclRhYmxlQ2VsbCwgaXNUYWJsZUNlbGwoKSkKLQogaW5saW5lIFJlbmRl
clRhYmxlQ2VsbCogUmVuZGVyVGFibGVDZWxsOjpuZXh0Q2VsbCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHRvUmVuZGVyVGFibGVDZWxsKFJlbmRlckJsb2NrRmxvdzo6bmV4dFNpYmxpbmcoKSk7Cisg
ICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRhYmxlQ2VsbD4oUmVuZGVyQmxvY2tGbG93OjpuZXh0
U2libGluZygpKTsKIH0KIAogaW5saW5lIFJlbmRlclRhYmxlQ2VsbCogUmVuZGVyVGFibGVDZWxs
OjpwcmV2aW91c0NlbGwoKSBjb25zdAogewotICAgIHJldHVybiB0b1JlbmRlclRhYmxlQ2VsbChS
ZW5kZXJCbG9ja0Zsb3c6OnByZXZpb3VzU2libGluZygpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8
UmVuZGVyVGFibGVDZWxsPihSZW5kZXJCbG9ja0Zsb3c6OnByZXZpb3VzU2libGluZygpKTsKIH0K
IAogaW5saW5lIFJlbmRlclRhYmxlQ2VsbCogUmVuZGVyVGFibGVSb3c6OmZpcnN0Q2VsbCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHRvUmVuZGVyVGFibGVDZWxsKFJlbmRlckJveDo6Zmlyc3RDaGls
ZCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPihSZW5kZXJCb3g6OmZp
cnN0Q2hpbGQoKSk7CiB9CiAKIGlubGluZSBSZW5kZXJUYWJsZUNlbGwqIFJlbmRlclRhYmxlUm93
OjpsYXN0Q2VsbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvUmVuZGVyVGFibGVDZWxsKFJlbmRl
ckJveDo6bGFzdENoaWxkKCkpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJUYWJsZUNlbGw+
KFJlbmRlckJveDo6bGFzdENoaWxkKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcAppbmRleCA2ZmRlNDk0
OGY4ZDY3Njk4NmVhMjMxNjg2MDFiZTA1ZmMxZWVkZThiLi5iYzE4NDk4OGFlMWMwMTQ5YzlmOGFm
M2ExYzUyOTQ5M2FiZjgxYWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVDb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZUNvbC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJIVE1MVGFibGVDb2xFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJs
ZS5oIgorI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2FwdGlvbi5oIgogI2luY2x1ZGUgIlJlbmRlclRh
YmxlQ2VsbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMzksNDQgKzE0MCw0NCBAQCB2
b2lkIFJlbmRlclRhYmxlQ29sOjpjbGVhclByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eUJpdHMo
KQogUmVuZGVyVGFibGUqIFJlbmRlclRhYmxlQ29sOjp0YWJsZSgpIGNvbnN0CiB7CiAgICAgYXV0
byB0YWJsZSA9IHBhcmVudCgpOwotICAgIGlmICh0YWJsZSAmJiAhdGFibGUtPmlzVGFibGUoKSkK
KyAgICBpZiAodGFibGUgJiYgIWlzPFJlbmRlclRhYmxlPigqdGFibGUpKQogICAgICAgICB0YWJs
ZSA9IHRhYmxlLT5wYXJlbnQoKTsKLSAgICByZXR1cm4gdGFibGUgJiYgdGFibGUtPmlzVGFibGUo
KSA/IHRvUmVuZGVyVGFibGUodGFibGUpIDogMDsKKyAgICByZXR1cm4gaXM8UmVuZGVyVGFibGU+
KHRhYmxlKSA/IGRvd25jYXN0PFJlbmRlclRhYmxlPih0YWJsZSkgOiBudWxscHRyOwogfQogCiBS
ZW5kZXJUYWJsZUNvbCogUmVuZGVyVGFibGVDb2w6OmVuY2xvc2luZ0NvbHVtbkdyb3VwKCkgY29u
c3QKIHsKLSAgICBpZiAoIXBhcmVudCgpLT5pc1JlbmRlclRhYmxlQ29sKCkpCi0gICAgICAgIHJl
dHVybiAwOworICAgIGlmICghaXM8UmVuZGVyVGFibGVDb2w+KCpwYXJlbnQoKSkpCisgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgUmVuZGVyVGFibGVDb2wqIHBhcmVudENvbHVtbkdyb3Vw
ID0gdG9SZW5kZXJUYWJsZUNvbChwYXJlbnQoKSk7Ci0gICAgQVNTRVJUKHBhcmVudENvbHVtbkdy
b3VwLT5pc1RhYmxlQ29sdW1uR3JvdXAoKSk7CisgICAgUmVuZGVyVGFibGVDb2wmIHBhcmVudENv
bHVtbkdyb3VwID0gZG93bmNhc3Q8UmVuZGVyVGFibGVDb2w+KCpwYXJlbnQoKSk7CisgICAgQVNT
RVJUKHBhcmVudENvbHVtbkdyb3VwLmlzVGFibGVDb2x1bW5Hcm91cCgpKTsKICAgICBBU1NFUlQo
aXNUYWJsZUNvbHVtbigpKTsKLSAgICByZXR1cm4gcGFyZW50Q29sdW1uR3JvdXA7CisgICAgcmV0
dXJuICZwYXJlbnRDb2x1bW5Hcm91cDsKIH0KIAogUmVuZGVyVGFibGVDb2wqIFJlbmRlclRhYmxl
Q29sOjpuZXh0Q29sdW1uKCkgY29uc3QKIHsKICAgICAvLyBJZiB8dGhpc3wgaXMgYSBjb2x1bW4t
Z3JvdXAsIHRoZSBuZXh0IGNvbHVtbiBpcyB0aGUgY29sZ3JvdXAncyBmaXJzdCBjaGlsZCBjb2x1
bW4uCiAgICAgaWYgKFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCA9IHRoaXMtPmZpcnN0Q2hpbGQo
KSkKLSAgICAgICAgcmV0dXJuIHRvUmVuZGVyVGFibGVDb2woZmlyc3RDaGlsZCk7CisgICAgICAg
IHJldHVybiBkb3duY2FzdDxSZW5kZXJUYWJsZUNvbD4oZmlyc3RDaGlsZCk7CiAKICAgICAvLyBP
dGhlcndpc2UgaXQncyB0aGUgbmV4dCBjb2x1bW4gYWxvbmcuCiAgICAgUmVuZGVyT2JqZWN0KiBu
ZXh0ID0gbmV4dFNpYmxpbmcoKTsKIAogICAgIC8vIEZhaWxpbmcgdGhhdCwgdGhlIGNoaWxkIGlz
IHRoZSBsYXN0IGNvbHVtbiBpbiBhIGNvbHVtbi1ncm91cCwgc28gdGhlIG5leHQgY29sdW1uIGlz
IHRoZSBuZXh0IGNvbHVtbi9jb2x1bW4tZ3JvdXAgYWZ0ZXIgaXRzIGNvbHVtbi1ncm91cC4KLSAg
ICBpZiAoIW5leHQgJiYgcGFyZW50KCktPmlzUmVuZGVyVGFibGVDb2woKSkKKyAgICBpZiAoIW5l
eHQgJiYgaXM8UmVuZGVyVGFibGVDb2w+KCpwYXJlbnQoKSkpCiAgICAgICAgIG5leHQgPSBwYXJl
bnQoKS0+bmV4dFNpYmxpbmcoKTsKIAotICAgIGZvciAoOyBuZXh0ICYmICFuZXh0LT5pc1JlbmRl
clRhYmxlQ29sKCk7IG5leHQgPSBuZXh0LT5uZXh0U2libGluZygpKSB7CisgICAgZm9yICg7IG5l
eHQgJiYgIWlzPFJlbmRlclRhYmxlQ29sPigqbmV4dCk7IG5leHQgPSBuZXh0LT5uZXh0U2libGlu
ZygpKSB7CiAgICAgICAgIC8vIFdlIGFsbG93IGNhcHRpb25zIG1peGVkIHdpdGggY29sdW1ucyBh
bmQgY29sdW1uLWdyb3Vwcy4KLSAgICAgICAgaWYgKG5leHQtPmlzVGFibGVDYXB0aW9uKCkpCisg
ICAgICAgIGlmIChpczxSZW5kZXJUYWJsZUNhcHRpb24+KCpuZXh0KSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKLSAgICByZXR1cm4gdG9SZW5kZXJUYWJsZUNvbChuZXh0KTsKKyAgICByZXR1cm4gZG93
bmNhc3Q8UmVuZGVyVGFibGVDb2w+KG5leHQpOwogfQogCiBjb25zdCBCb3JkZXJWYWx1ZSYgUmVu
ZGVyVGFibGVDb2w6OmJvcmRlckFkam9pbmluZ0NlbGxTdGFydEJvcmRlcihjb25zdCBSZW5kZXJU
YWJsZUNlbGwqKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ29sLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wu
aAppbmRleCBiNzlkMmMzYTFiOTY1M2RkZTAwZTE5N2MzOTcxNDQ5MzA3NmRjNDAyLi4wZjNjZDk3
YmI3MmU1MzNhYTI5MDU4ZTdhNjE4M2MyZDdjNzRlODk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVDb2wuaApAQCAtNzUsMTEgKzc1LDExIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIExheW91dFVuaXQgb2Zmc2V0VG9wKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBMYXlvdXRVbml0IG9mZnNldFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBM
YXlvdXRVbml0IG9mZnNldEhlaWdodCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVGcm9tRWxlbWVudCgpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJSZW5kZXJU
YWJsZUNvbCI7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJUYWJsZUNvbCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1l
bnQoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxX
aWR0aHMoKSBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKICAgICB2aXJ0dWFs
IHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZSgpIG92ZXJyaWRlOwpAQCAtMTAwLDggKzEwMCw2IEBAIHBy
aXZhdGU6CiAgICAgdW5zaWduZWQgbV9zcGFuOwogfTsKIAotUkVOREVSX09CSkVDVF9UWVBFX0NB
U1RTKFJlbmRlclRhYmxlQ29sLCBpc1JlbmRlclRhYmxlQ29sKCkpCi0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJlbmRlclRh
YmxlQ29sLCBpc1JlbmRlclRhYmxlQ29sKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlUm93LmNwcAppbmRleCA2OTcwZWIzZmRhMDA1MTUxZTM0Yzg3YjlhZDgzOTBlNGM0
ZDdjM2NmLi4yMGVjMTlkM2ZmZGFiNmQ1YmI0MzA1ZmMzM2VlMDM1ZTVjYmRhY2EyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAKQEAgLTEwOSwyOCArMTA5
LDI4IEBAIGNvbnN0IEJvcmRlclZhbHVlJiBSZW5kZXJUYWJsZVJvdzo6Ym9yZGVyQWRqb2luaW5n
RW5kQ2VsbChjb25zdCBSZW5kZXJUYWJsZUNlbGwqCiAKIHZvaWQgUmVuZGVyVGFibGVSb3c6OmFk
ZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7
Ci0gICAgaWYgKCFjaGlsZC0+aXNUYWJsZUNlbGwoKSkgeworICAgIGlmICghaXM8UmVuZGVyVGFi
bGVDZWxsPigqY2hpbGQpKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogbGFzdCA9IGJlZm9yZUNo
aWxkOwogICAgICAgICBpZiAoIWxhc3QpCiAgICAgICAgICAgICBsYXN0ID0gbGFzdENlbGwoKTsK
LSAgICAgICAgaWYgKGxhc3QgJiYgbGFzdC0+aXNBbm9ueW1vdXMoKSAmJiBsYXN0LT5pc1RhYmxl
Q2VsbCgpICYmICFsYXN0LT5pc0JlZm9yZU9yQWZ0ZXJDb250ZW50KCkpIHsKLSAgICAgICAgICAg
IFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IHRvUmVuZGVyVGFibGVDZWxsKGxhc3QpOwotICAgICAg
ICAgICAgaWYgKGJlZm9yZUNoaWxkID09IGNlbGwpCi0gICAgICAgICAgICAgICAgYmVmb3JlQ2hp
bGQgPSBjZWxsLT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICBjZWxsLT5hZGRDaGlsZChjaGls
ZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICBpZiAobGFzdCAmJiBsYXN0LT5pc0Fub255bW91cygp
ICYmIGlzPFJlbmRlclRhYmxlQ2VsbD4oKmxhc3QpICYmICFsYXN0LT5pc0JlZm9yZU9yQWZ0ZXJD
b250ZW50KCkpIHsKKyAgICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCYgY2VsbCA9IGRvd25jYXN0
PFJlbmRlclRhYmxlQ2VsbD4oKmxhc3QpOworICAgICAgICAgICAgaWYgKGJlZm9yZUNoaWxkID09
ICZjZWxsKQorICAgICAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gY2VsbC5maXJzdENoaWxkKCk7
CisgICAgICAgICAgICBjZWxsLmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgIWJl
Zm9yZUNoaWxkLT5pc0Fub255bW91cygpICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSA9PSB0aGlz
KSB7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIGNlbGwgPSBiZWZvcmVDaGlsZC0+cHJldmlv
dXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICBpZiAoY2VsbCAmJiBjZWxsLT5pc1RhYmxlQ2VsbCgp
ICYmIGNlbGwtPmlzQW5vbnltb3VzKCkpIHsKLSAgICAgICAgICAgICAgICB0b1JlbmRlclRhYmxl
Q2VsbChjZWxsKS0+YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICAgICAgaWYgKGlzPFJlbmRlclRh
YmxlQ2VsbD4oY2VsbCkgJiYgY2VsbC0+aXNBbm9ueW1vdXMoKSkgeworICAgICAgICAgICAgICAg
IGRvd25jYXN0PFJlbmRlclRhYmxlQ2VsbD4oKmNlbGwpLmFkZENoaWxkKGNoaWxkKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICAv
LyBJZiBiZWZvcmVDaGlsZCBpcyBpbnNpZGUgYW4gYW5vbnltb3VzIGNlbGwsIGluc2VydCBpbnRv
IHRoZSBjZWxsLgotICAgICAgICBpZiAobGFzdCAmJiAhbGFzdC0+aXNUYWJsZUNlbGwoKSAmJiBs
YXN0LT5wYXJlbnQoKSAmJiBsYXN0LT5wYXJlbnQoKS0+aXNBbm9ueW1vdXMoKSAmJiAhbGFzdC0+
cGFyZW50KCktPmlzQmVmb3JlT3JBZnRlckNvbnRlbnQoKSkgeworICAgICAgICBpZiAobGFzdCAm
JiAhaXM8UmVuZGVyVGFibGVDZWxsPigqbGFzdCkgJiYgbGFzdC0+cGFyZW50KCkgJiYgbGFzdC0+
cGFyZW50KCktPmlzQW5vbnltb3VzKCkgJiYgIWxhc3QtPnBhcmVudCgpLT5pc0JlZm9yZU9yQWZ0
ZXJDb250ZW50KCkpIHsKICAgICAgICAgICAgIGxhc3QtPnBhcmVudCgpLT5hZGRDaGlsZChjaGls
ZCwgYmVmb3JlQ2hpbGQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xNDQs
MTQgKzE0NCwxNCBAQCB2b2lkIFJlbmRlclRhYmxlUm93OjphZGRDaGlsZChSZW5kZXJPYmplY3Qq
IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogICAgIGlmIChiZWZvcmVDaGlsZCAm
JiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0gdGhpcykKICAgICAgICAgYmVmb3JlQ2hpbGQgPSBz
cGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQoYmVmb3JlQ2hpbGQpOyAgICAKIAotICAgIFJl
bmRlclRhYmxlQ2VsbCogY2VsbCA9IHRvUmVuZGVyVGFibGVDZWxsKGNoaWxkKTsKKyAgICBSZW5k
ZXJUYWJsZUNlbGwmIGNlbGwgPSBkb3duY2FzdDxSZW5kZXJUYWJsZUNlbGw+KCpjaGlsZCk7CiAK
ICAgICAvLyBHZW5lcmF0ZWQgY29udGVudCBjYW4gcmVzdWx0IGluIHVzIGhhdmluZyBhIG51bGwg
c2VjdGlvbiBzbyBtYWtlIHN1cmUgdG8gbnVsbCBjaGVjayBvdXIgcGFyZW50LgogICAgIGlmIChw
YXJlbnQoKSkKLSAgICAgICAgc2VjdGlvbigpLT5hZGRDZWxsKGNlbGwsIHRoaXMpOworICAgICAg
ICBzZWN0aW9uKCktPmFkZENlbGwoJmNlbGwsIHRoaXMpOwogCi0gICAgQVNTRVJUKCFiZWZvcmVD
aGlsZCB8fCBiZWZvcmVDaGlsZC0+aXNUYWJsZUNlbGwoKSk7Ci0gICAgUmVuZGVyQm94OjphZGRD
aGlsZChjZWxsLCBiZWZvcmVDaGlsZCk7CisgICAgQVNTRVJUKCFiZWZvcmVDaGlsZCB8fCBpczxS
ZW5kZXJUYWJsZUNlbGw+KCpiZWZvcmVDaGlsZCkpOworICAgIFJlbmRlckJveDo6YWRkQ2hpbGQo
JmNlbGwsIGJlZm9yZUNoaWxkKTsKIAogICAgIGlmIChiZWZvcmVDaGlsZCB8fCBuZXh0Um93KCkp
CiAgICAgICAgIHNlY3Rpb24oKS0+c2V0TmVlZHNDZWxsUmVjYWxjKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCmluZGV4IDc1YmVjYjUyNDhmMjFkZjkxNDljODBm
YjhmZjIzYWRiYmI1MDI3YzUuLjEwOTYxMjBkZTE2YWFmN2U2MmNhNTRkNTg4YjliYzBkMGFmMDRl
ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCkBAIC00Myw4
ICs0Myw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJUYWJsZUNlbGwqIGZpcnN0Q2VsbCgpIGNvbnN0
OwogICAgIFJlbmRlclRhYmxlQ2VsbCogbGFzdENlbGwoKSBjb25zdDsKIAotICAgIFJlbmRlclRh
YmxlU2VjdGlvbiogc2VjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRvUmVuZGVyVGFibGVTZWN0aW9u
KHBhcmVudCgpKTsgfQotICAgIFJlbmRlclRhYmxlKiB0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRv
UmVuZGVyVGFibGUocGFyZW50KCktPnBhcmVudCgpKTsgfQorICAgIFJlbmRlclRhYmxlU2VjdGlv
biogc2VjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4o
cGFyZW50KCkpOyB9CisgICAgUmVuZGVyVGFibGUqIHRhYmxlKCkgY29uc3QgeyByZXR1cm4gZG93
bmNhc3Q8UmVuZGVyVGFibGU+KHBhcmVudCgpLT5wYXJlbnQoKSk7IH0KIAogICAgIHZvaWQgcGFp
bnRPdXRsaW5lRm9yUm93SWZOZWVkZWQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsK
IApAQCAtMTE5LDI2ICsxMTksMjQgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3Jvd0luZGV4
IDogMzE7CiB9OwogCi1SRU5ERVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyVGFibGVSb3csIGlz
VGFibGVSb3coKSkKLQogaW5saW5lIFJlbmRlclRhYmxlUm93KiBSZW5kZXJUYWJsZVNlY3Rpb246
OmZpcnN0Um93KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9SZW5kZXJUYWJsZVJvdyhSZW5kZXJC
b3g6OmZpcnN0Q2hpbGQoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRhYmxlUm93PihS
ZW5kZXJCb3g6OmZpcnN0Q2hpbGQoKSk7CiB9CiAKIGlubGluZSBSZW5kZXJUYWJsZVJvdyogUmVu
ZGVyVGFibGVTZWN0aW9uOjpsYXN0Um93KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9SZW5kZXJU
YWJsZVJvdyhSZW5kZXJCb3g6Omxhc3RDaGlsZCgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVu
ZGVyVGFibGVSb3c+KFJlbmRlckJveDo6bGFzdENoaWxkKCkpOwogfQogCiBpbmxpbmUgUmVuZGVy
VGFibGVSb3cqIFJlbmRlclRhYmxlUm93OjpuZXh0Um93KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
dG9SZW5kZXJUYWJsZVJvdyhSZW5kZXJCb3g6Om5leHRTaWJsaW5nKCkpOworICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJUYWJsZVJvdz4oUmVuZGVyQm94OjpuZXh0U2libGluZygpKTsKIH0KIAog
aW5saW5lIFJlbmRlclRhYmxlUm93KiBSZW5kZXJUYWJsZVJvdzo6cHJldmlvdXNSb3coKSBjb25z
dAogewotICAgIHJldHVybiB0b1JlbmRlclRhYmxlUm93KFJlbmRlckJveDo6cHJldmlvdXNTaWJs
aW5nKCkpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJUYWJsZVJvdz4oUmVuZGVyQm94Ojpw
cmV2aW91c1NpYmxpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggYWY4NDdk
NjQ5OTdiOWZmODE5NDBmMGZkN2NkYWU0MWQzOTA5ODBlOS4uMmRiZWM1ZTZhYTAyOTFhZThhYThj
Mjc4NDNkN2U5NmM0M2E0N2FhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJU
YWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNvbC5oIgogI2luY2x1ZGUgIlJlbmRl
clRhYmxlUm93LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCiAjaW5jbHVkZSA8
bGltaXRzPgpAQCAtMTM1LDIyICsxMzYsMjIgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246Ondp
bGxCZVJlbW92ZWRGcm9tVHJlZSgpCiAKIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGls
ZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewotICAg
IGlmICghY2hpbGQtPmlzVGFibGVSb3coKSkgeworICAgIGlmICghaXM8UmVuZGVyVGFibGVSb3c+
KCpjaGlsZCkpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBsYXN0ID0gYmVmb3JlQ2hpbGQ7CiAg
ICAgICAgIGlmICghbGFzdCkKICAgICAgICAgICAgIGxhc3QgPSBsYXN0Um93KCk7CiAgICAgICAg
IGlmIChsYXN0ICYmIGxhc3QtPmlzQW5vbnltb3VzKCkgJiYgIWxhc3QtPmlzQmVmb3JlT3JBZnRl
ckNvbnRlbnQoKSkgewotICAgICAgICAgICAgUmVuZGVyVGFibGVSb3cqIHJvdyA9IHRvUmVuZGVy
VGFibGVSb3cobGFzdCk7Ci0gICAgICAgICAgICBpZiAoYmVmb3JlQ2hpbGQgPT0gcm93KQotICAg
ICAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gcm93LT5maXJzdENlbGwoKTsKLSAgICAgICAgICAg
IHJvdy0+YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgIFJlbmRlclRh
YmxlUm93JiByb3cgPSBkb3duY2FzdDxSZW5kZXJUYWJsZVJvdz4oKmxhc3QpOworICAgICAgICAg
ICAgaWYgKGJlZm9yZUNoaWxkID09ICZyb3cpCisgICAgICAgICAgICAgICAgYmVmb3JlQ2hpbGQg
PSByb3cuZmlyc3RDZWxsKCk7CisgICAgICAgICAgICByb3cuYWRkQ2hpbGQoY2hpbGQsIGJlZm9y
ZUNoaWxkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChi
ZWZvcmVDaGlsZCAmJiAhYmVmb3JlQ2hpbGQtPmlzQW5vbnltb3VzKCkgJiYgYmVmb3JlQ2hpbGQt
PnBhcmVudCgpID09IHRoaXMpIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogcm93ID0gYmVm
b3JlQ2hpbGQtPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgaWYgKHJvdyAmJiByb3ct
PmlzVGFibGVSb3coKSAmJiByb3ctPmlzQW5vbnltb3VzKCkpIHsKLSAgICAgICAgICAgICAgICB0
b1JlbmRlclRhYmxlUm93KHJvdyktPmFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgICAgIGlmIChp
czxSZW5kZXJUYWJsZVJvdz4ocm93KSAmJiByb3ctPmlzQW5vbnltb3VzKCkpIHsKKyAgICAgICAg
ICAgICAgICBkb3duY2FzdDxSZW5kZXJUYWJsZVJvdz4oKnJvdykuYWRkQ2hpbGQoY2hpbGQpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTU4
LDEwICsxNTksMTAgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENoaWxkKFJlbmRlck9i
amVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQKICAgICAgICAgLy8gSWYgYmVm
b3JlQ2hpbGQgaXMgaW5zaWRlIGFuIGFub255bW91cyBjZWxsL3JvdywgaW5zZXJ0IGludG8gdGhl
IGNlbGwgb3IgaW50bwogICAgICAgICAvLyB0aGUgYW5vbnltb3VzIHJvdyBjb250YWluaW5nIGl0
LCBpZiB0aGVyZSBpcyBvbmUuCiAgICAgICAgIFJlbmRlck9iamVjdCogbGFzdEJveCA9IGxhc3Q7
Ci0gICAgICAgIHdoaWxlIChsYXN0Qm94ICYmIGxhc3RCb3gtPnBhcmVudCgpLT5pc0Fub255bW91
cygpICYmICFsYXN0Qm94LT5pc1RhYmxlUm93KCkpCisgICAgICAgIHdoaWxlIChsYXN0Qm94ICYm
IGxhc3RCb3gtPnBhcmVudCgpLT5pc0Fub255bW91cygpICYmICFpczxSZW5kZXJUYWJsZVJvdz4o
Kmxhc3RCb3gpKQogICAgICAgICAgICAgbGFzdEJveCA9IGxhc3RCb3gtPnBhcmVudCgpOwogICAg
ICAgICBpZiAobGFzdEJveCAmJiBsYXN0Qm94LT5pc0Fub255bW91cygpICYmICFsYXN0Qm94LT5p
c0JlZm9yZU9yQWZ0ZXJDb250ZW50KCkpIHsKLSAgICAgICAgICAgIHRvUmVuZGVyVGFibGVSb3co
bGFzdEJveCktPmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICBkb3du
Y2FzdDxSZW5kZXJUYWJsZVJvdz4oKmxhc3RCb3gpLmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGls
ZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTgwLDkgKzE4MSw5IEBA
IHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkCiAKICAgICBlbnN1cmVSb3dzKG1fY1Jvdyk7CiAKLSAg
ICBSZW5kZXJUYWJsZVJvdyogcm93ID0gdG9SZW5kZXJUYWJsZVJvdyhjaGlsZCk7Ci0gICAgbV9n
cmlkW2luc2VydGlvblJvd10ucm93UmVuZGVyZXIgPSByb3c7Ci0gICAgcm93LT5zZXRSb3dJbmRl
eChpbnNlcnRpb25Sb3cpOworICAgIFJlbmRlclRhYmxlUm93JiByb3cgPSBkb3duY2FzdDxSZW5k
ZXJUYWJsZVJvdz4oKmNoaWxkKTsKKyAgICBtX2dyaWRbaW5zZXJ0aW9uUm93XS5yb3dSZW5kZXJl
ciA9ICZyb3c7CisgICAgcm93LnNldFJvd0luZGV4KGluc2VydGlvblJvdyk7CiAKICAgICBpZiAo
IWJlZm9yZUNoaWxkKQogICAgICAgICBzZXRSb3dMb2dpY2FsSGVpZ2h0VG9Sb3dTdHlsZUxvZ2lj
YWxIZWlnaHRJZk5vdFJlbGF0aXZlKG1fZ3JpZFtpbnNlcnRpb25Sb3ddKTsKQEAgLTE5MCw3ICsx
OTEsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBj
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZAogICAgIGlmIChiZWZvcmVDaGlsZCAmJiBi
ZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0gdGhpcykKICAgICAgICAgYmVmb3JlQ2hpbGQgPSBzcGxp
dEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQoYmVmb3JlQ2hpbGQpOwogCi0gICAgQVNTRVJUKCFi
ZWZvcmVDaGlsZCB8fCBiZWZvcmVDaGlsZC0+aXNUYWJsZVJvdygpKTsKKyAgICBBU1NFUlQoIWJl
Zm9yZUNoaWxkIHx8IGlzPFJlbmRlclRhYmxlUm93PigqYmVmb3JlQ2hpbGQpKTsKICAgICBSZW5k
ZXJCb3g6OmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CiB9CiAKQEAgLTU3NywxMSArNTc4
LDExIEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKCkKICAgICAgICAgICAg
IGJvb2wgZmxleEFsbENoaWxkcmVuID0gY2VsbC0+c3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCkuaXNG
aXhlZCgpCiAgICAgICAgICAgICAgICAgfHwgKCF0YWJsZSgpLT5zdHlsZSgpLmxvZ2ljYWxIZWln
aHQoKS5pc0F1dG8oKSAmJiBySGVpZ2h0ICE9IGNlbGwtPmxvZ2ljYWxIZWlnaHQoKSk7CiAKLSAg
ICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBvID0gY2VsbC0+Zmlyc3RDaGlsZCgpOyBvOyBv
ID0gby0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAgICAgICAgIGlmICghby0+aXNUZXh0KCkg
JiYgby0+c3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCkuaXNQZXJjZW50KCkgJiYgKGZsZXhBbGxDaGls
ZHJlbiB8fCAoKG8tPmlzUmVwbGFjZWQoKSB8fCAoby0+aXNCb3goKSAmJiB0b1JlbmRlckJveChv
KS0+c2Nyb2xsc092ZXJmbG93KCkpKSAmJiAhby0+aXNUZXh0Q29udHJvbCgpKSkpIHsKKyAgICAg
ICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNlbGwtPmZpcnN0Q2hpbGQoKTsg
cmVuZGVyZXI7IHJlbmRlcmVyID0gcmVuZGVyZXItPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIWlzPFJlbmRlclRleHQ+KCpyZW5kZXJlcikgJiYgcmVuZGVyZXItPnN0eWxl
KCkubG9naWNhbEhlaWdodCgpLmlzUGVyY2VudCgpICYmIChmbGV4QWxsQ2hpbGRyZW4gfHwgKChy
ZW5kZXJlci0+aXNSZXBsYWNlZCgpIHx8IChpczxSZW5kZXJCb3g+KCpyZW5kZXJlcikgJiYgZG93
bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIpLnNjcm9sbHNPdmVyZmxvdygpKSkgJiYgIWlzPFJl
bmRlclRleHRDb250cm9sPigqcmVuZGVyZXIpKSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8g
VGFibGVzIHdpdGggbm8gc2VjdGlvbnMgZG8gbm90IGZsZXguCi0gICAgICAgICAgICAgICAgICAg
IGlmICghby0+aXNUYWJsZSgpIHx8IHRvUmVuZGVyVGFibGUobyktPmhhc1NlY3Rpb25zKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG8tPnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghaXM8UmVuZGVyVGFibGU+KCpyZW5kZXJlcikgfHwg
ZG93bmNhc3Q8UmVuZGVyVGFibGU+KCpyZW5kZXJlcikuaGFzU2VjdGlvbnMoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsQ2hpbGRyZW5GbGV4ID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTk4NSwxMyArOTg2LDEzIEBA
IHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludENlbGwoUmVuZGVyVGFibGVDZWxsKiBjZWxs
LCBQYWludEluZm8mIHBhaW50SW5mbywKIHsKICAgICBMYXlvdXRQb2ludCBjZWxsUG9pbnQgPSBm
bGlwRm9yV3JpdGluZ01vZGVGb3JDaGlsZChjZWxsLCBwYWludE9mZnNldCk7CiAgICAgUGFpbnRQ
aGFzZSBwYWludFBoYXNlID0gcGFpbnRJbmZvLnBoYXNlOwotICAgIFJlbmRlclRhYmxlUm93KiBy
b3cgPSB0b1JlbmRlclRhYmxlUm93KGNlbGwtPnBhcmVudCgpKTsKKyAgICBSZW5kZXJUYWJsZVJv
dyYgcm93ID0gZG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+KCpjZWxsLT5wYXJlbnQoKSk7CiAKICAg
ICBpZiAocGFpbnRQaGFzZSA9PSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kIHx8IHBhaW50UGhh
c2UgPT0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kKSB7CiAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gaGFuZGxlIHBhaW50aW5nIGEgc3RhY2sgb2YgYmFja2dyb3VuZHMuICBUaGlzIHN0YWNr
IChmcm9tIGJvdHRvbSB0byB0b3ApIGNvbnNpc3RzIG9mCiAgICAgICAgIC8vIHRoZSBjb2x1bW4g
Z3JvdXAsIGNvbHVtbiwgcm93IGdyb3VwLCByb3csIGFuZCB0aGVuIHRoZSBjZWxsLgogICAgICAg
ICBSZW5kZXJUYWJsZUNvbCogY29sdW1uID0gdGFibGUoKS0+Y29sRWxlbWVudChjZWxsLT5jb2wo
KSk7Ci0gICAgICAgIFJlbmRlclRhYmxlQ29sKiBjb2x1bW5Hcm91cCA9IGNvbHVtbiA/IGNvbHVt
bi0+ZW5jbG9zaW5nQ29sdW1uR3JvdXAoKSA6IDA7CisgICAgICAgIFJlbmRlclRhYmxlQ29sKiBj
b2x1bW5Hcm91cCA9IGNvbHVtbiA/IGNvbHVtbi0+ZW5jbG9zaW5nQ29sdW1uR3JvdXAoKSA6IG51
bGxwdHI7CiAKICAgICAgICAgLy8gQ29sdW1uIGdyb3VwcyBhbmQgY29sdW1ucyBmaXJzdC4KICAg
ICAgICAgLy8gRklYTUU6IENvbHVtbnMgYW5kIGNvbHVtbiBncm91cHMgZG8gbm90IGN1cnJlbnRs
eSBzdXBwb3J0IG9wYWNpdHksIGFuZCB0aGV5IGFyZSBiZWluZyBwYWludGVkICJ0b28gbGF0ZSIg
aW4KQEAgLTEwMDYsMTAgKzEwMDcsMTAgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50
Q2VsbChSZW5kZXJUYWJsZUNlbGwqIGNlbGwsIFBhaW50SW5mbyYgcGFpbnRJbmZvLAogCiAgICAg
ICAgIC8vIFBhaW50IHRoZSByb3cgbmV4dCwgYnV0IG9ubHkgaWYgaXQgZG9lc24ndCBoYXZlIGEg
bGF5ZXIuICBJZiBhIHJvdyBoYXMgYSBsYXllciwgaXQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IK
ICAgICAgICAgLy8gcGFpbnRpbmcgdGhlIHJvdyBiYWNrZ3JvdW5kIGZvciB0aGUgY2VsbC4KLSAg
ICAgICAgaWYgKCFyb3ctPmhhc1NlbGZQYWludGluZ0xheWVyKCkpCi0gICAgICAgICAgICBjZWxs
LT5wYWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChwYWludEluZm8sIGNlbGxQb2ludCwgcm93KTsK
KyAgICAgICAgaWYgKCFyb3cuaGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkKKyAgICAgICAgICAgIGNl
bGwtPnBhaW50QmFja2dyb3VuZHNCZWhpbmRDZWxsKHBhaW50SW5mbywgY2VsbFBvaW50LCAmcm93
KTsKICAgICB9Ci0gICAgaWYgKCghY2VsbC0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAhcm93
LT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSkKKyAgICBpZiAoKCFjZWxsLT5oYXNTZWxmUGFpbnRp
bmdMYXllcigpICYmICFyb3cuaGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkpCiAgICAgICAgIGNlbGwt
PnBhaW50KHBhaW50SW5mbywgY2VsbFBvaW50KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCmluZGV4IGI0YjMwYzE2NGViMDJjN2ZmMWYyODk3
NGRmOThkZGJlOThmNzg2MTUuLmVlODU5MjkyNWJkMTUwNjYwMDI5NDdjYThhNDhkNmE2ZjlhMGZj
NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgK
QEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgogICAgIHZvaWQgbGF5b3V0Um93cygpOwogICAgIHZv
aWQgY29tcHV0ZU92ZXJmbG93RnJvbUNlbGxzKCk7CiAKLSAgICBSZW5kZXJUYWJsZSogdGFibGUo
KSBjb25zdCB7IHJldHVybiB0b1JlbmRlclRhYmxlKHBhcmVudCgpKTsgfQorICAgIFJlbmRlclRh
YmxlKiB0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRhYmxlPihwYXJlbnQo
KSk7IH0KIAogICAgIHN0cnVjdCBDZWxsU3RydWN0IHsKICAgICAgICAgVmVjdG9yPFJlbmRlclRh
YmxlQ2VsbCosIDE+IGNlbGxzOyAKQEAgLTM0Nyw4ICszNDcsNiBAQCBwcml2YXRlOgogICAgIEhh
c2hNYXA8c3RkOjpwYWlyPGNvbnN0IFJlbmRlclRhYmxlQ2VsbCosIGludD4sIENvbGxhcHNlZEJv
cmRlclZhbHVlID4gbV9jZWxsc0NvbGxhcHNlZEJvcmRlcnM7CiB9OwogCi1SRU5ERVJfT0JKRUNU
X1RZUEVfQ0FTVFMoUmVuZGVyVGFibGVTZWN0aW9uLCBpc1RhYmxlU2VjdGlvbigpKQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVSX09CSkVD
VChSZW5kZXJUYWJsZVNlY3Rpb24sIGlzVGFibGVTZWN0aW9uKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggZGQ5MGM1YmU5OWU4ZGNkZTRm
N2MyZWNkNWU1YTZjYTBiOTQ4ZjExNS4uYjdjZGU3NGI3OWNjMjFiNGIzZDZiOWVhNmIzYTQxMThk
YzcyOWUxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVB
c1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcApAQCAtNDY3LDggKzQ2Nyw4IEBAIHN0YXRpYyB2b2lkIHdyaXRlVGV4dFJ1bihUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgUmVuZGVyVGV4dCYgbywgY29uc3QgSW5saW5lVGV4dEJvCiAgICAgaW50
IGxvZ2ljYWxXaWR0aCA9IGNlaWxmKHJ1bi5sZWZ0KCkgKyBydW4ubG9naWNhbFdpZHRoKCkpIC0g
eDsKIAogICAgIC8vIEZJWE1FOiBUYWJsZSBjZWxsIGFkanVzdG1lbnQgaXMgdGVtcG9yYXJ5IHVu
dGlsIHJlc3VsdHMgY2FuIGJlIHVwZGF0ZWQuCi0gICAgaWYgKG8uY29udGFpbmluZ0Jsb2NrKCkt
PmlzVGFibGVDZWxsKCkpCi0gICAgICAgIHkgLT0gdG9SZW5kZXJUYWJsZUNlbGwoby5jb250YWlu
aW5nQmxvY2soKSktPmludHJpbnNpY1BhZGRpbmdCZWZvcmUoKTsKKyAgICBpZiAoaXM8UmVuZGVy
VGFibGVDZWxsPigqby5jb250YWluaW5nQmxvY2soKSkpCisgICAgICAgIHkgLT0gZG93bmNhc3Q8
UmVuZGVyVGFibGVDZWxsPigqby5jb250YWluaW5nQmxvY2soKSkuaW50cmluc2ljUGFkZGluZ0Jl
Zm9yZSgpOwogICAgICAgICAKICAgICB0cyA8PCAidGV4dCBydW4gYXQgKCIgPDwgeCA8PCAiLCIg
PDwgeSA8PCAiKSB3aWR0aCAiIDw8IGxvZ2ljYWxXaWR0aDsKICAgICBpZiAoIXJ1bi5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkgfHwgcnVuLmRpck92ZXJyaWRlKCkpIHsKQEAgLTQ4OSw4ICs0ODks
OCBAQCBzdGF0aWMgdm9pZCB3cml0ZVNpbXBsZUxpbmUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJl
bmRlclRleHQmIG8sIGNvbnN0IExheW91dFJlYwogICAgIGludCB5ID0gcmVjdC55KCk7CiAgICAg
aW50IGxvZ2ljYWxXaWR0aCA9IGNlaWxmKHJlY3QueCgpICsgcmVjdC53aWR0aCgpKSAtIHg7CiAK
LSAgICBpZiAoby5jb250YWluaW5nQmxvY2soKS0+aXNUYWJsZUNlbGwoKSkKLSAgICAgICAgeSAt
PSB0b1JlbmRlclRhYmxlQ2VsbChvLmNvbnRhaW5pbmdCbG9jaygpKS0+aW50cmluc2ljUGFkZGlu
Z0JlZm9yZSgpOworICAgIGlmIChpczxSZW5kZXJUYWJsZUNlbGw+KCpvLmNvbnRhaW5pbmdCbG9j
aygpKSkKKyAgICAgICAgeSAtPSBkb3duY2FzdDxSZW5kZXJUYWJsZUNlbGw+KCpvLmNvbnRhaW5p
bmdCbG9jaygpKS5pbnRyaW5zaWNQYWRkaW5nQmVmb3JlKCk7CiAgICAgICAgIAogICAgIHRzIDw8
ICJ0ZXh0IHJ1biBhdCAoIiA8PCB4IDw8ICIsIiA8PCB5IDw8ICIpIHdpZHRoICIgPDwgbG9naWNh
bFdpZHRoOwogICAgIHRzIDw8ICI6ICIK
</data>

          </attachment>
      

    </bug>

</bugzilla>