<?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>157722</bug_id>
          
          <creation_ts>2016-05-15 01:26:44 -0700</creation_ts>
          <short_desc>More CTTE and other cleanups for HTML editing header</short_desc>
          <delta_ts>2016-05-15 15:08:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>cdumez</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1193193</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-15 01:26:44 -0700</bug_when>
    <thetext>More CTTE and other cleanups for HTML editing header</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193242</commentid>
    <comment_count>1</comment_count>
      <attachid>278977</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-15 13:43:04 -0700</bug_when>
    <thetext>Created attachment 278977
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193243</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-15 13:46:46 -0700</bug_when>
    <thetext>red bubbles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193246</commentid>
    <comment_count>3</comment_count>
      <attachid>278978</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-15 13:57:41 -0700</bug_when>
    <thetext>Created attachment 278978
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193247</commentid>
    <comment_count>4</comment_count>
      <attachid>278978</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-15 13:59:11 -0700</bug_when>
    <thetext>Comment on attachment 278978
Patch

Oops, tests not passing locally yet!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193248</commentid>
    <comment_count>5</comment_count>
      <attachid>278979</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-15 14:01:57 -0700</bug_when>
    <thetext>Created attachment 278979
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193249</commentid>
    <comment_count>6</comment_count>
      <attachid>278979</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-15 14:02:18 -0700</bug_when>
    <thetext>Comment on attachment 278979
Patch

OK, tests passing locally now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193256</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-15 14:41:06 -0700</bug_when>
    <thetext>Here’s what was failing on the mac-debug EWS:

Regressions: Unexpected crashes (2)
  imported/blink/storage/indexeddb/blob-basics-metadata.html [ Crash ]
  imported/blink/storage/indexeddb/blob-valid-after-deletion.html [ Crash ]

I ran these tests locally, and they did not crash. Also seems highly unlikely the changes to editing code could have had any effect on these tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193260</commentid>
    <comment_count>8</comment_count>
      <attachid>278979</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-15 14:59:06 -0700</bug_when>
    <thetext>Comment on attachment 278979
Patch

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

r=me

&gt; Source/WebCore/dom/Position.cpp:219
&gt; +    if (!m_anchorNode)

Could do a ternary and return on one line.

&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:1179
&gt; +bool ApplyStyleCommand::nodeFullySelected(Node* node, const Position&amp; start, const Position&amp; end) const

We should either switch to using a reference for node or add a FIXME comment.

&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:1191
&gt; +bool ApplyStyleCommand::nodeFullyUnselected(Node* node, const Position&amp; start, const Position&amp; end) const

We should either switch to using a reference for node or add a FIXME comment.

&gt; Source/WebCore/editing/htmlediting.cpp:396
&gt; +    for (unsigned i = 0; i &lt; length; i++) {

++i

&gt; Source/WebCore/editing/htmlediting.cpp:417
&gt; +    if (!rebalancedString.length())

I would prefer if (rebalancedString.isEmpty())

&gt; Source/WebCore/editing/markup.cpp:541
&gt; +        if (auto* parentListNode = downcast&lt;HTMLElement&gt;(enclosingNodeOfType(firstPositionInOrBeforeNode(range-&gt;firstNode()), isListItem))) {

Is this cast to HTMLElement here is safe? isListItem() can return true for an element that has a list renderer (e.g. elements with &quot;display: list-item&quot; in CSS, which are not HTML list elements).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193266</commentid>
    <comment_count>9</comment_count>
      <attachid>278979</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-15 15:07:10 -0700</bug_when>
    <thetext>Comment on attachment 278979
Patch

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

&gt;&gt; Source/WebCore/dom/Position.cpp:219
&gt;&gt; +    if (!m_anchorNode)
&gt; 
&gt; Could do a ternary and return on one line.

OK, done.

&gt;&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:1179
&gt;&gt; +bool ApplyStyleCommand::nodeFullySelected(Node* node, const Position&amp; start, const Position&amp; end) const
&gt; 
&gt; We should either switch to using a reference for node or add a FIXME comment.

I changed the type to Element&amp; and the name to element. These files have so many other style issues nearby, but this was easy enough to do.

&gt;&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:1191
&gt;&gt; +bool ApplyStyleCommand::nodeFullyUnselected(Node* node, const Position&amp; start, const Position&amp; end) const
&gt; 
&gt; We should either switch to using a reference for node or add a FIXME comment.

Ditto.

&gt;&gt; Source/WebCore/editing/htmlediting.cpp:396
&gt;&gt; +    for (unsigned i = 0; i &lt; length; i++) {
&gt; 
&gt; ++i

Done.

&gt;&gt; Source/WebCore/editing/htmlediting.cpp:417
&gt;&gt; +    if (!rebalancedString.length())
&gt; 
&gt; I would prefer if (rebalancedString.isEmpty())

OK, done.

&gt;&gt; Source/WebCore/editing/markup.cpp:541
&gt;&gt; +        if (auto* parentListNode = downcast&lt;HTMLElement&gt;(enclosingNodeOfType(firstPositionInOrBeforeNode(range-&gt;firstNode()), isListItem))) {
&gt; 
&gt; Is this cast to HTMLElement here is safe? isListItem() can return true for an element that has a list renderer (e.g. elements with &quot;display: list-item&quot; in CSS, which are not HTML list elements).

It’s not; you are right. I changed the cast to Element instead of HTMLElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193267</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-15 15:08:00 -0700</bug_when>
    <thetext>Committed r200931: &lt;http://trac.webkit.org/changeset/200931&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278977</attachid>
            <date>2016-05-15 13:43:04 -0700</date>
            <delta_ts>2016-05-15 13:57:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157722-20160515134359.patch</filename>
            <type>text/plain</type>
            <size>101370</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwOTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2JhZTgwYWQyNmY0ZTUx
ZjkzMjYzZjhlNjZlODA2NTFkNjk1ODY4Yi4uYWIyOTE3NDFkMzE1MzJmNDdkNDhhNWVmNTMxNGI0
YmU5MjdiOTQxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NCBAQAorMjAxNi0wNS0xNSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW9yZSBDVFRFIGFuZCBvdGhl
ciBjbGVhbnVwcyBmb3IgSFRNTCBlZGl0aW5nIGhlYWRlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3NzIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlc2UgY2hhbmdlcyBhcmUgbW9zdGx5IHRoaW5n
cyBDaHJpcyBhc2tlZCBmb3IgaW4gaGlzIHJldmlldyBvZiBteSBsYXN0IHBhdGNoCisgICAgICAg
IG9yIG90aGVyIHJlbGF0ZWQgc3R5bGUgYW5kIHNtYWxsIGVmZmljaWVuY3kgaW1wcm92ZW1lbnRz
LgorCisgICAgICAgIC0gdXNpbmcgbnVsbHB0ciBpbnN0ZWFkIG9mIDAKKyAgICAgICAgLSB1c2lu
ZyBpczxUZXh0PiBpbnN0ZWFkIG9mIGlzVGV4dE5vZGUgYW5kIGlzPD4gaW5zdGVhZCBvZiBoYXNU
YWdOYW1lCisgICAgICAgIC0gY2hhbmdpbmcgYXJndW1lbnQgdHlwZSBvZiBmdW5jdGlvbnMgbGlr
ZSBlZGl0aW5nSWdub3Jlc0NvbnRlbnQgdG8gYSByZWZlcmVuY2UKKyAgICAgICAgLSB1c2luZyB7
IH0gaW5zdGVhZCBvZiBjb25zdHJ1Y3RvciBjYWxscyBmb3IgY2xhc3NlcyBsaWtlIFBvc2l0aW9u
CisgICAgICAgIC0gdXNpbmcgd29yZHMgbGlrZSBwb3NpdGlvbiBpbnRlYWQgb2YgYWJicmV2aWF0
aW9ucyBsaWtlIHBvcworICAgICAgICAtIHVzaW5nIGF1dG8gcmF0aGVyIHRoYW4gZXhwbGljaXQg
dHlwZXMKKyAgICAgICAgLSByZW5hbWUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHRydWUgZm9yIEhU
TUxFbGVtZW50IHRvIGV4cHJlc3MgdGhhdCBpbiB0aGUgZnVuY3Rpb24gbmFtZXMKKworICAgICAg
ICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuZXh0UmVuZGVyZWRFZGl0
YWJsZSk6IG51bGxwdHIKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzUmVuZGVyZWRFZGl0YWJs
ZSk6IG51bGxwdHIKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpQb3NpdGlvbik6IGlzPD4s
IHJlZmVyZW5jZQorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246Om1vdmVUb1Bvc2l0aW9uKTog
cmVmZXJlbmNlCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6b2Zmc2V0Rm9yUG9zaXRpb25B
ZnRlckFuY2hvcik6IEFkZGVkIGEgbnVsbCBhc3NlcnRpb24gYW5kCisgICAgICAgIG51bGwgY2hl
Y2sgdGhhdCByZXBsYWNlcyB0aGUgb25lIHRoYXQgdXNlZCB0byBiZSBpbiBsYXN0T2Zmc2V0Rm9y
RWRpdGluZy4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpwYXJlbnRBbmNob3JlZEVxdWl2
YWxlbnQpOiB7IH0sIHJlZmVyZW5jZQorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmNvbXB1
dGVOb2RlQmVmb3JlUG9zaXRpb24pOiBudWxscHRyCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlv
bjo6Y29tcHV0ZU5vZGVBZnRlclBvc2l0aW9uKTogbnVsbHB0cgorICAgICAgICAoV2ViQ29yZTo6
UG9zaXRpb246OmFuY2hvclR5cGVGb3JMZWdhY3lFZGl0aW5nUG9zaXRpb24pOiByZWZlcmVuY2UK
KyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpwcmV2aW91cyk6IHJlZmVyZW5jZQorICAgICAg
ICAoV2ViQ29yZTo6UG9zaXRpb246Om5leHQpOiByZWZlcmVuY2UKKyAgICAgICAgKFdlYkNvcmU6
OlBvc2l0aW9uOjpwYXJlbnRFZGl0aW5nQm91bmRhcnkpOiBudWxscHRyCisgICAgICAgIChXZWJD
b3JlOjpQb3NpdGlvbjo6cHJldmlvdXNDaGFyYWN0ZXJQb3NpdGlvbik6IHsgfSwgcG9zIC0+IHBv
c2l0aW9uCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6bmV4dENoYXJhY3RlclBvc2l0aW9u
KTogeyB9LCBwb3MgLT4gcG9zaXRpb24KKyAgICAgICAgKFdlYkNvcmU6OmVuZHNPZk5vZGVBcmVW
aXN1YWxseURpc3RpbmN0UG9zaXRpb25zKTogcmVmZXJlbmNlCisgICAgICAgIChXZWJDb3JlOjpQ
b3NpdGlvbjo6dXBzdHJlYW0pOiB7IH0sIHBvcyAtPiBwb3NpdGlvbgorICAgICAgICAoV2ViQ29y
ZTo6UG9zaXRpb246OmRvd25zdHJlYW0pOiB7IH0sIHBvcyAtPiBwb3NpdGlvbgorICAgICAgICAo
V2ViQ29yZTo6UG9zaXRpb246OnJvb3RVc2VyU2VsZWN0QWxsRm9yTm9kZSk6IG51bGxwdHIKKyAg
ICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjppc0NhbmRpZGF0ZSk6IGF1dG8sIHJlZmVyZW5jZSwg
aXM8PgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnJlbmRlcnNJbkRpZmZlcmVudFBvc2l0
aW9uKTogcG9zIC0+IHBvc2l0aW9uLCBhdXRvLCBpczw+CisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbjo6bGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbik6IHsgfSwgaXM8PgorICAgICAgICAoV2Vi
Q29yZTo6UG9zaXRpb246OnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKTogeyB9CisgICAgICAg
IChXZWJDb3JlOjpQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KTogcmVmZXJlbmNlCisg
ICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6ZXF1YWxzKTogcmVmZXJlbmNlLCBpczw+CisKKyAg
ICAgICAgKiBkb20vUG9zaXRpb25JdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbkl0ZXJhdG9yOjpvcGVyYXRvciBQb3NpdGlvbik6IHJlZmVyZW5jZQorICAgICAgICAoV2Vi
Q29yZTo6UG9zaXRpb25JdGVyYXRvcjo6aXNDYW5kaWRhdGUpOiByZWZlcmVuY2UKKworICAgICAg
ICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UpOiBpczw+CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJh
bmdlKTogaXM8PiwgcmVmZXJlbmNlCisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFu
ZDo6cmVtb3ZlQ29uZmxpY3RpbmdJbmxpbmVTdHlsZUZyb21SdW4pOiByZWZlcmVuY2UKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZSk6IGF1dG8s
IGlzPD4sIHJlZmVyZW5jZQorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6Om5v
ZGVGdWxseVNlbGVjdGVkKTogaXM8PgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1h
bmQ6Om5vZGVGdWxseVVuc2VsZWN0ZWQpOiBpczw+CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0
eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRTdGFydCk6IGlzPD4KKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50QXRTdGFydCk6IGlzPD4KKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50QXRFbmQpOiBpczw+
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6aXNWYWxpZENhcmV0UG9zaXRp
b25JblRleHROb2RlKTogaXM8PgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6
OnN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQpOiBSZW1vdmVkIHVubmVlZGVkCisgICAgICAg
IGlzPEVsZW1lbnQ+IGNhbGxzIGJlZm9yZSBjYWxsaW5nIGFyZUlkZW50aWNhbEVsZW1lbnRzLgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnBvc2l0aW9uVG9Db21wdXRlSW5s
aW5lU3R5bGVDaGFuZ2UpOiBUaWdodGVuZWQKKyAgICAgICAgdXAgbG9naWMgZm9yIHRoZSBsb29w
IHRvIGF2b2lkIHJlZHVuZGFudCBjaGVja3MuCisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxl
Q29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZUNoYW5nZSk6IGF1dG8KKworICAgICAgICAqIGVkaXRp
bmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
RWRpdENvbW1hbmQ6Omluc2VydE5vZGVBdCk6IHJlZmVyZW5jZQorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGVuZE5vZGUpOiByZWZlcmVuY2UKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6IGlzTGlzdEhUTUxF
bGVtZW50CisKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERl
bGV0ZSk6IHJlZmVyZW5jZQorCisgICAgICAgICogZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQu
Y3BwOiBGaXhlZCBvcmRlciBvZiBpbmNsdWRlcy4KKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2lu
Z0Jsb2NrVG9TcGxpdFRyZWVUbyk6IGlzTGlzdEhUTUxFbGVtZW50CisKKyAgICAgICAgKiBlZGl0
aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSk6IHJlZmVyZW5jZQor
CisgICAgICAgICogZWRpdGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0U3RhcnRFbmRMaXN0Q2hpbGRyZW4pOiBpc0xpc3RIVE1MRWxlbWVudAor
ICAgICAgICAoV2ViQ29yZTo6SW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjpkb0Fw
cGx5KTppc0xpc3RIVE1MRWxlbWVudAorICAgICAgICAoV2ViQ29yZTo6Y2FuRGVjcmVhc2VMaXN0
TGV2ZWwpOmlzTGlzdEhUTUxFbGVtZW50CisKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZU5vZGVD
b21tYW5kLmNwcDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlLgorCisgICAgICAgICogZWRpdGlu
Zy9SZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBs
YWNlTm9kZVdpdGhTcGFuQ29tbWFuZDo6ZG9BcHBseSk6IFVzZSBIVE1MU3BhbkVsZW1lbnQ6OmNy
ZWF0ZS4KKworICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aXNJbnRlcmNoYW5nZU5ld2xpbmVOb2RlKTogaXM8PiwgZG93bmNh
c3Q8PgorICAgICAgICAoV2ViQ29yZTo6aXNJbnRlcmNoYW5nZUNvbnZlcnRlZFNwYWNlU3Bhbik6
IGlzPD4sIGRvd25jYXN0PD4KKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uQXZvaWRpbmdQcmVj
ZWRpbmdOb2Rlcyk6IHBvcyAtPiBwb3NpdGlvbiwgcmVmZXJlbmNlCisgICAgICAgIChXZWJDb3Jl
OjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6IGlzTGlzdEhUTUxFbGVtZW50Cisg
ICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aW5zZXJ0QXNMaXN0SXRl
bXMpOiBpc0xpc3RIVE1MRWxlbWVudAorCisgICAgICAgICogZWRpdGluZy9TcGVsbENoZWNrZXIu
Y3BwOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUuCisKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJ
dGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0
ZXJhdG9yOjphZHZhbmNlKTogcmVmZXJlbmNlCisKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVT
ZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0
aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKTogcmVmZXJlbmNlCisKKyAgICAgICAgKiBlZGl0aW5nL1Zp
c2libGVVbml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0xpbmVQb3NpdGlvbik6
IHJlZmVyZW5jZQorICAgICAgICAoV2ViQ29yZTo6bmV4dExpbmVQb3NpdGlvbik6IHJlZmVyZW5j
ZQorICAgICAgICAoV2ViQ29yZTo6ZmluZFN0YXJ0T2ZQYXJhZ3JhcGgpOiByZWZlcmVuY2UKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbmRFbmRPZlBhcmFncmFwaCk6IHJlZmVyZW5jZQorCisgICAgICAg
ICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYW5IYXZlQ2hp
bGRyZW5Gb3JFZGl0aW5nKTogTW92ZWQgaGVyZSBmcm9tIGhlYWRlciBmaWxlIHNvIHdlIGRvbid0
CisgICAgICAgIGhhdmUgdG8gaW5jbHVkZSAiVGV4dC5oIi4gTm90IGNyaXRpY2FsIHRvIGlubGlu
ZSB0aGlzLgorICAgICAgICAoV2ViQ29yZTo6aXNBdG9taWNOb2RlKTogcmVmZXJlbmNlCisgICAg
ICAgIChXZWJDb3JlOjpsYXN0T2Zmc2V0Rm9yRWRpdGluZyk6IHJlZmVyZW5jZQorICAgICAgICAo
V2ViQ29yZTo6c3RyaW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNwYWNlKTogQ2hhbmdlZCB0byB1c2Ug
U3RyaW5nQnVpbGRlciBpbnN0ZWFkCisgICAgICAgIG9mIFZlY3RvcjxVQ2hhcj4gc28gdGhpcyB3
b24ndCB0dXJuIDgtYml0IHN0cmluZ3MgaW50byAxNi1iaXQgc3RyaW5ncy4gQ2hhbmdlZAorICAg
ICAgICB0byBub3QgdXNlIHRoZSBTdHJpbmdCdWlsZGVyIGF0IGFsbCB1bnRpbCB3ZSBlbmNvdW50
ZXIgYSBjaGFyYWN0ZXIgdGhhdCBuZWVkcworICAgICAgICB0byBiZSBjaGFuZ2VkLgorICAgICAg
ICAoV2ViQ29yZTo6aXNTcGVjaWFsSFRNTEVsZW1lbnQpOiBSZW5hbWVkIHRvIG1ha2UgaXQgY2xl
YXIgdGhhdCBpdCBvbmx5IGNhbiByZXR1cm4KKyAgICAgICAgdHJ1ZSBmb3IgYSBOb2RlIHRoYXQg
aXMgYW4gSFRNTEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpmaXJzdEluU3BlY2lhbEVsZW1l
bnQpOiBpc1NwZWNpYWxIVE1MRWxlbWVudAorICAgICAgICAoV2ViQ29yZTo6bGFzdEluU3BlY2lh
bEVsZW1lbnQpOiBpc1NwZWNpYWxIVE1MRWxlbWVudAorICAgICAgICAoV2ViQ29yZTo6aXNMaXN0
SFRNTEVsZW1lbnQpOiBSZW5hbWVkIHRvIG1ha2UgaXQgY2xlYXIgdGhhdCBpdCBjYW4gb25seSBy
ZXR1cm4KKyAgICAgICAgdHJ1ZSBmb3IgYSBOb2RlIHRoYXQgaXMgYW4gSFRNTEVsZW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjppc0xpc3RJdGVtKTogaXNMaXN0SFRNTEVsZW1lbnQsIGlzPD4KKyAg
ICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ05vZGVPZlR5cGUpOiBwIC0+IHBvc2l0aW9uLCBudWxs
cHRyCisgICAgICAgIChXZWJDb3JlOjpoaWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlwZSk6IHAgLT4g
cG9zaXRpb24KKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0xpc3RDaGlsZCk6IGlzTGlzdEhU
TUxFbGVtZW50LCBpczw+CisgICAgICAgIChXZWJDb3JlOjplbWJlZGRlZFN1Ymxpc3QpOiBpc0xp
c3RIVE1MRWxlbWVudAorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kZWRTdWJsaXN0KTppc0xpc3RI
VE1MRWxlbWVudAorICAgICAgICAoV2ViQ29yZTo6Y2FyZXRNYXhPZmZzZXQpOiBpczw+CisgICAg
ICAgIChXZWJDb3JlOjpjYXJldFJlbmRlcnNJbnNpZGVOb2RlKTogY2hhbmdlZCB0byB0YWtlIGEg
cmVmZXJlbmNlCisgICAgICAgIChXZWJDb3JlOjpyZW5kZXJlckZvckNhcmV0UGFpbnRpbmcpOiBy
ZWZlcmVuY2UKKworICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDogVXBkYXRlZCBmb3Ig
bmFtZSBjaGFuZ2VzIGFuZCB0eXBlIGNoYW5nZXMgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5n
L21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6
dHJhdmVyc2VOb2Rlc0ZvclNlcmlhbGl6YXRpb24pOiByZWZlcmVuY2UKKyAgICAgICAgKFdlYkNv
cmU6OmhpZ2hlc3RBbmNlc3RvclRvV3JhcE1hcmt1cCk6IGF1dG8sIHJlZmVyZW5jZSwgaXNMaXN0
SFRNTEVsZW1lbnQKKworICAgICAgICAqIGh0bWwvSFRNTFNwYW5FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTcGFuRWxlbWVudDo6Y3JlYXRlKTogQWRkZWQgb3ZlcmxvYWQgdGhh
dCBkb2VzIG5vdCByZXF1aXJlIGEgdGFnIG5hbWUuCisgICAgICAgICogaHRtbC9IVE1MU3BhbkVs
ZW1lbnQuaDogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0RPTVNlbGVjdGlvbi5jcHA6IFJlbW92
ZWQgdW5uZWVkZWQgaW5jbHVkZXMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QpOiByZWZlcmVu
Y2UKKwogMjAxNi0wNS0xNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAg
ICAgIFVzZSBuZXcgV2ViIElETCBkaWN0aW9uYXJ5IHN1cHBvcnQgZm9yIE1lZGlhU2Vzc2lvbi5z
ZXRNZXRhZGF0YSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2lvcy9DaGFuZ2VMb2cKaW5kZXggODAxNDAwMjRiZWRlNjFmNzdmZWM5MzIz
OGNlMTU4YjQ5NTQ0ZDY2Yy4uNDFlN2Y0YTNmMzhjYzM1MDBhYmMxNDI0OTMwYjExMjJlZGJhZDU3
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvaW9zL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE2LTA1LTE1ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb3JlIENUVEUgYW5kIG90aGVyIGNs
ZWFudXBzIGZvciBIVE1MIGVkaXRpbmcgaGVhZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc3MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tOgor
ICAgICAgICAoLVtXZWJGcmFtZSBwcmV2aW91c1VucGVydHVyYmVkRGljdGF0aW9uUmVzdWx0Qm91
bmRhcnlGcm9tUG9zaXRpb246XSk6IGF1dG8KKyAgICAgICAgKC1bV2ViRnJhbWUgbmV4dFVucGVy
dHVyYmVkRGljdGF0aW9uUmVzdWx0Qm91bmRhcnlGcm9tUG9zaXRpb246XSk6IGF1dG8KKwogMjAx
Ni0wNS0xNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgQ1RURSBm
b3IgdGhlIEhUTUwgZWRpdGluZyBoZWFkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Qb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCmluZGV4IDMy
NzM0N2Q2NzYxNTZlNzYzYmExZGVmOTgzNWM3ZWFjZjY4MjgwNGQuLmJhNDlhYWJkNTYzMmFlYzNj
ZjM4MGNiZmNhOGRiZDJlMzRhOTZiMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Q
b3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcApAQCAtNTEs
NiArNTEsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CisKICNpZiBFTkFC
TEUoVFJFRV9ERUJVR0dJTkcpCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
I2VuZGlmCkBAIC03OSw3ICs4MCw3IEBAIHN0YXRpYyBOb2RlKiBuZXh0UmVuZGVyZWRFZGl0YWJs
ZShOb2RlKiBub2RlKQogICAgICAgICBpZiAoaGFzSW5saW5lQm94V3JhcHBlcigqcmVuZGVyZXIp
KQogICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJl
dHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgTm9kZSogcHJldmlvdXNSZW5kZXJlZEVkaXRhYmxl
KE5vZGUqIG5vZGUpCkBAIC05MSw3ICs5Miw3IEBAIHN0YXRpYyBOb2RlKiBwcmV2aW91c1JlbmRl
cmVkRWRpdGFibGUoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKGhhc0lubGluZUJveFdyYXBwZXIo
KnJlbmRlcmVyKSkKICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogUG9zaXRpb246OlBvc2l0aW9uKFBhc3NSZWZQ
dHI8Tm9kZT4gYW5jaG9yTm9kZSwgTGVnYWN5RWRpdGluZ09mZnNldCBvZmZzZXQpCkBAIC0xMTQs
NyArMTE1LDcgQEAgUG9zaXRpb246OlBvc2l0aW9uKFBhc3NSZWZQdHI8Tm9kZT4gYW5jaG9yTm9k
ZSwgQW5jaG9yVHlwZSBhbmNob3JUeXBlKQogICAgIEFTU0VSVCghbV9hbmNob3JOb2RlIHx8ICFt
X2FuY2hvck5vZGUtPmlzUHNldWRvRWxlbWVudCgpKTsKICAgICBBU1NFUlQoYW5jaG9yVHlwZSAh
PSBQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwogICAgIEFTU0VSVCghKChhbmNob3JUeXBlID09
IFBvc2l0aW9uSXNCZWZvcmVDaGlsZHJlbiB8fCBhbmNob3JUeXBlID09IFBvc2l0aW9uSXNBZnRl
ckNoaWxkcmVuKQotICAgICAgICAmJiAobV9hbmNob3JOb2RlLT5pc1RleHROb2RlKCkgfHwgZWRp
dGluZ0lnbm9yZXNDb250ZW50KG1fYW5jaG9yTm9kZS5nZXQoKSkpKSk7CisgICAgICAgICYmIChp
czxUZXh0PigqbV9hbmNob3JOb2RlKSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKm1fYW5jaG9y
Tm9kZSkpKSk7CiB9CiAKIFBvc2l0aW9uOjpQb3NpdGlvbihQYXNzUmVmUHRyPE5vZGU+IGFuY2hv
ck5vZGUsIGludCBvZmZzZXQsIEFuY2hvclR5cGUgYW5jaG9yVHlwZSkKQEAgLTEyMyw3ICsxMjQs
NyBAQCBQb3NpdGlvbjo6UG9zaXRpb24oUGFzc1JlZlB0cjxOb2RlPiBhbmNob3JOb2RlLCBpbnQg
b2Zmc2V0LCBBbmNob3JUeXBlIGFuY2hvclR5cAogICAgICwgbV9hbmNob3JUeXBlKGFuY2hvclR5
cGUpCiAgICAgLCBtX2lzTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGZhbHNlKQogewotICAgIEFTU0VS
VCghbV9hbmNob3JOb2RlIHx8ICFlZGl0aW5nSWdub3Jlc0NvbnRlbnQobV9hbmNob3JOb2RlLmdl
dCgpKSB8fCAhbV9hbmNob3JOb2RlLT5pc1NoYWRvd1Jvb3QoKSk7CisgICAgQVNTRVJUKCFtX2Fu
Y2hvck5vZGUgfHwgIWVkaXRpbmdJZ25vcmVzQ29udGVudCgqbV9hbmNob3JOb2RlKSB8fCAhbV9h
bmNob3JOb2RlLT5pc1NoYWRvd1Jvb3QoKSk7CiAgICAgQVNTRVJUKCFtX2FuY2hvck5vZGUgfHwg
IW1fYW5jaG9yTm9kZS0+aXNQc2V1ZG9FbGVtZW50KCkpOwogICAgIEFTU0VSVChhbmNob3JUeXBl
ID09IFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiB9CkBAIC0xMzksNyArMTQwLDcgQEAgUG9z
aXRpb246OlBvc2l0aW9uKFBhc3NSZWZQdHI8VGV4dD4gdGV4dE5vZGUsIHVuc2lnbmVkIG9mZnNl
dCkKIAogdm9pZCBQb3NpdGlvbjo6bW92ZVRvUG9zaXRpb24oUGFzc1JlZlB0cjxOb2RlPiBub2Rl
LCBpbnQgb2Zmc2V0KQogewotICAgIEFTU0VSVCghZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUu
Z2V0KCkpKTsKKyAgICBBU1NFUlQoIWVkaXRpbmdJZ25vcmVzQ29udGVudCgqbm9kZSkpOwogICAg
IEFTU0VSVChhbmNob3JUeXBlKCkgPT0gUG9zaXRpb25Jc09mZnNldEluQW5jaG9yIHx8IG1faXNM
ZWdhY3lFZGl0aW5nUG9zaXRpb24pOwogICAgIG1fYW5jaG9yTm9kZSA9IG5vZGU7CiAgICAgbV9v
ZmZzZXQgPSBvZmZzZXQ7CkBAIC0yMTQsNiArMjE1LDkgQEAgaW50IFBvc2l0aW9uOjpvZmZzZXRG
b3JQb3NpdGlvbkFmdGVyQW5jaG9yKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9hbmNob3JUeXBl
ID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciB8fCBtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0Fm
dGVyQ2hpbGRyZW4pOwogICAgIEFTU0VSVCghbV9pc0xlZ2FjeUVkaXRpbmdQb3NpdGlvbik7Cisg
ICAgQVNTRVJUKG1fYW5jaG9yTm9kZSk7CisgICAgaWYgKCFtX2FuY2hvck5vZGUpCisgICAgICAg
IHJldHVybiAwOwogICAgIHJldHVybiBsYXN0T2Zmc2V0Rm9yRWRpdGluZygqbV9hbmNob3JOb2Rl
KTsKIH0KIApAQCAtMjIyLDMzICsyMjYsMzMgQEAgaW50IFBvc2l0aW9uOjpvZmZzZXRGb3JQb3Np
dGlvbkFmdGVyQW5jaG9yKCkgY29uc3QKIFBvc2l0aW9uIFBvc2l0aW9uOjpwYXJlbnRBbmNob3Jl
ZEVxdWl2YWxlbnQoKSBjb25zdAogewogICAgIGlmICghbV9hbmNob3JOb2RlKQotICAgICAgICBy
ZXR1cm4gUG9zaXRpb24oKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICAKICAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgb25seSBiZSBuZWNlc3NhcnkgZm9yIGxlZ2FjeSBwb3NpdGlvbnMsIGJ1
dCBpcyBhbHNvIG5lZWRlZCBmb3IgcG9zaXRpb25zIGJlZm9yZSBhbmQgYWZ0ZXIgVGFibGVzCiAg
ICAgaWYgKG1fb2Zmc2V0IDw9IDAgJiYgKG1fYW5jaG9yVHlwZSAhPSBQb3NpdGlvbklzQWZ0ZXJB
bmNob3IgJiYgbV9hbmNob3JUeXBlICE9IFBvc2l0aW9uSXNBZnRlckNoaWxkcmVuKSkgewotICAg
ICAgICBpZiAoZmluZFBhcmVudCgqbV9hbmNob3JOb2RlKSAmJiAoZWRpdGluZ0lnbm9yZXNDb250
ZW50KG1fYW5jaG9yTm9kZS5nZXQoKSkgfHwgaXNSZW5kZXJlZFRhYmxlKG1fYW5jaG9yTm9kZS5n
ZXQoKSkpKQorICAgICAgICBpZiAoZmluZFBhcmVudCgqbV9hbmNob3JOb2RlKSAmJiAoZWRpdGlu
Z0lnbm9yZXNDb250ZW50KCptX2FuY2hvck5vZGUpIHx8IGlzUmVuZGVyZWRUYWJsZShtX2FuY2hv
ck5vZGUuZ2V0KCkpKSkKICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50QmVmb3Jl
Tm9kZShtX2FuY2hvck5vZGUuZ2V0KCkpOwogICAgICAgICByZXR1cm4gUG9zaXRpb24obV9hbmNo
b3JOb2RlLmdldCgpLCAwLCBQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwogICAgIH0KIAogICAg
IGlmICghbV9hbmNob3JOb2RlLT5vZmZzZXRJbkNoYXJhY3RlcnMoKQogICAgICAgICAmJiAobV9h
bmNob3JUeXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciB8fCBtX2FuY2hvclR5cGUgPT0gUG9z
aXRpb25Jc0FmdGVyQ2hpbGRyZW4gfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb2Zmc2V0KSA9
PSBtX2FuY2hvck5vZGUtPmNvdW50Q2hpbGROb2RlcygpKQotICAgICAgICAmJiAoZWRpdGluZ0ln
bm9yZXNDb250ZW50KG1fYW5jaG9yTm9kZS5nZXQoKSkgfHwgaXNSZW5kZXJlZFRhYmxlKG1fYW5j
aG9yTm9kZS5nZXQoKSkpCisgICAgICAgICYmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKm1fYW5j
aG9yTm9kZSkgfHwgaXNSZW5kZXJlZFRhYmxlKG1fYW5jaG9yTm9kZS5nZXQoKSkpCiAgICAgICAg
ICYmIGNvbnRhaW5lck5vZGUoKSkgewogICAgICAgICByZXR1cm4gcG9zaXRpb25JblBhcmVudEFm
dGVyTm9kZShtX2FuY2hvck5vZGUuZ2V0KCkpOwogICAgIH0KIAotICAgIHJldHVybiBQb3NpdGlv
bihjb250YWluZXJOb2RlKCksIGNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgUG9zaXRp
b25Jc09mZnNldEluQW5jaG9yKTsKKyAgICByZXR1cm4geyBjb250YWluZXJOb2RlKCksIGNvbXB1
dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgUG9zaXRpb25Jc09mZnNldEluQW5jaG9yIH07CiB9
CiAKIE5vZGUqIFBvc2l0aW9uOjpjb21wdXRlTm9kZUJlZm9yZVBvc2l0aW9uKCkgY29uc3QKIHsK
ICAgICBpZiAoIW1fYW5jaG9yTm9kZSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgc3dpdGNoIChhbmNob3JUeXBlKCkpIHsKICAgICBjYXNlIFBvc2l0
aW9uSXNCZWZvcmVDaGlsZHJlbjoKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIGNhc2UgUG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW46CiAgICAgICAgIHJldHVy
biBtX2FuY2hvck5vZGUtPmxhc3RDaGlsZCgpOwogICAgIGNhc2UgUG9zaXRpb25Jc09mZnNldElu
QW5jaG9yOgpAQCAtMjU5LDE5ICsyNjMsMTkgQEAgTm9kZSogUG9zaXRpb246OmNvbXB1dGVOb2Rl
QmVmb3JlUG9zaXRpb24oKSBjb25zdAogICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlLmdldCgp
OwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAogTm9kZSogUG9zaXRpb246OmNvbXB1dGVOb2RlQWZ0ZXJQb3Np
dGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2FuY2hvck5vZGUpCi0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHN3aXRjaCAoYW5jaG9yVHlwZSgpKSB7
CiAgICAgY2FzZSBQb3NpdGlvbklzQmVmb3JlQ2hpbGRyZW46CiAgICAgICAgIHJldHVybiBtX2Fu
Y2hvck5vZGUtPmZpcnN0Q2hpbGQoKTsKICAgICBjYXNlIFBvc2l0aW9uSXNBZnRlckNoaWxkcmVu
OgotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgY2FzZSBQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3I6CiAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPnRy
YXZlcnNlVG9DaGlsZEF0KG1fb2Zmc2V0KTsKICAgICBjYXNlIFBvc2l0aW9uSXNCZWZvcmVBbmNo
b3I6CkBAIC0yODAsMTIgKzI4NCwxMiBAQCBOb2RlKiBQb3NpdGlvbjo6Y29tcHV0ZU5vZGVBZnRl
clBvc2l0aW9uKCkgY29uc3QKICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+bmV4dFNpYmxp
bmcoKTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFBvc2l0aW9uOjpBbmNob3JUeXBlIFBvc2l0aW9uOjph
bmNob3JUeXBlRm9yTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKE5vZGUqIGFuY2hvck5vZGUsIGludCBv
ZmZzZXQpCiB7Ci0gICAgaWYgKGFuY2hvck5vZGUgJiYgZWRpdGluZ0lnbm9yZXNDb250ZW50KGFu
Y2hvck5vZGUpKSB7CisgICAgaWYgKGFuY2hvck5vZGUgJiYgZWRpdGluZ0lnbm9yZXNDb250ZW50
KCphbmNob3JOb2RlKSkgewogICAgICAgICBpZiAob2Zmc2V0ID09IDApCiAgICAgICAgICAgICBy
ZXR1cm4gUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3I7CiAgICAgICAgIHJldHVybiBQ
b3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yOwpAQCAtMzQzLDExICszNDcsMTEgQEAgUG9z
aXRpb24gUG9zaXRpb246OnByZXZpb3VzKFBvc2l0aW9uTW92ZVR5cGUgbW92ZVR5cGUpIGNvbnN0
CiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAgIGlmIChwb3Np
dGlvbkJlZm9yZU9yQWZ0ZXJOb2RlSXNDYW5kaWRhdGUobm9kZSkpCisgICAgaWYgKHBvc2l0aW9u
QmVmb3JlT3JBZnRlck5vZGVJc0NhbmRpZGF0ZSgqbm9kZSkpCiAgICAgICAgIHJldHVybiBwb3Np
dGlvbkJlZm9yZU5vZGUobm9kZSk7CiAKICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcgPSBub2Rl
LT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICBpZiAocHJldmlvdXNTaWJsaW5nICYmIHBvc2l0aW9u
QmVmb3JlT3JBZnRlck5vZGVJc0NhbmRpZGF0ZShwcmV2aW91c1NpYmxpbmcpKQorICAgIGlmIChw
cmV2aW91c1NpYmxpbmcgJiYgcG9zaXRpb25CZWZvcmVPckFmdGVyTm9kZUlzQ2FuZGlkYXRlKCpw
cmV2aW91c1NpYmxpbmcpKQogICAgICAgICByZXR1cm4gcG9zaXRpb25BZnRlck5vZGUocHJldmlv
dXNTaWJsaW5nKTsKIAogICAgIHJldHVybiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocGFy
ZW50LCBub2RlLT5jb21wdXRlTm9kZUluZGV4KCkpOwpAQCAtMzkwLDExICszOTQsMTEgQEAgUG9z
aXRpb24gUG9zaXRpb246Om5leHQoUG9zaXRpb25Nb3ZlVHlwZSBtb3ZlVHlwZSkgY29uc3QKICAg
ICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuICp0aGlzOwogCi0gICAgaWYgKGlzUmVuZGVy
ZWRUYWJsZShub2RlKSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkpCisgICAgaWYgKGlz
UmVuZGVyZWRUYWJsZShub2RlKSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKm5vZGUpKQogICAg
ICAgICByZXR1cm4gcG9zaXRpb25BZnRlck5vZGUobm9kZSk7CiAKICAgICBOb2RlKiBuZXh0U2li
bGluZyA9IG5vZGUtPm5leHRTaWJsaW5nKCk7Ci0gICAgaWYgKG5leHRTaWJsaW5nICYmIHBvc2l0
aW9uQmVmb3JlT3JBZnRlck5vZGVJc0NhbmRpZGF0ZShuZXh0U2libGluZykpCisgICAgaWYgKG5l
eHRTaWJsaW5nICYmIHBvc2l0aW9uQmVmb3JlT3JBZnRlck5vZGVJc0NhbmRpZGF0ZSgqbmV4dFNp
YmxpbmcpKQogICAgICAgICByZXR1cm4gcG9zaXRpb25CZWZvcmVOb2RlKG5leHRTaWJsaW5nKTsK
IAogICAgIHJldHVybiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocGFyZW50LCBub2RlLT5j
b21wdXRlTm9kZUluZGV4KCkgKyAxKTsKQEAgLTQ2OCwxMSArNDcyLDExIEBAIGJvb2wgUG9zaXRp
b246OmF0RWRpdGluZ0JvdW5kYXJ5KCkgY29uc3QKIE5vZGUqIFBvc2l0aW9uOjpwYXJlbnRFZGl0
aW5nQm91bmRhcnkoKSBjb25zdAogewogICAgIGlmICghbV9hbmNob3JOb2RlKQotICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBOb2RlKiBkb2N1bWVudEVs
ZW1lbnQgPSBtX2FuY2hvck5vZGUtPmRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCk7CiAgICAg
aWYgKCFkb2N1bWVudEVsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIE5vZGUqIGJvdW5kYXJ5ID0gbV9hbmNob3JOb2RlLmdldCgpOwogICAg
IHdoaWxlIChib3VuZGFyeSAhPSBkb2N1bWVudEVsZW1lbnQgJiYgYm91bmRhcnktPm5vblNoYWRv
d0JvdW5kYXJ5UGFyZW50Tm9kZSgpICYmIG1fYW5jaG9yTm9kZS0+aGFzRWRpdGFibGVTdHlsZSgp
ID09IGJvdW5kYXJ5LT5wYXJlbnROb2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKSkKQEAgLTUzNiwy
NSArNTQwLDI1IEBAIGJvb2wgUG9zaXRpb246OmF0RW5kT2ZUcmVlKCkgY29uc3QKIFBvc2l0aW9u
IFBvc2l0aW9uOjpwcmV2aW91c0NoYXJhY3RlclBvc2l0aW9uKEVBZmZpbml0eSBhZmZpbml0eSkg
Y29uc3QKIHsKICAgICBpZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBQb3NpdGlvbigpOwor
ICAgICAgICByZXR1cm4geyB9OwogCiAgICAgTm9kZSogZnJvbVJvb3RFZGl0YWJsZUVsZW1lbnQg
PSBkZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCk7CiAKICAgICBib29sIGF0
U3RhcnRPZkxpbmUgPSBpc1N0YXJ0T2ZMaW5lKFZpc2libGVQb3NpdGlvbigqdGhpcywgYWZmaW5p
dHkpKTsKICAgICBib29sIHJlbmRlcmVkID0gaXNDYW5kaWRhdGUoKTsKICAgICAKLSAgICBQb3Np
dGlvbiBjdXJyZW50UG9zID0gKnRoaXM7Ci0gICAgd2hpbGUgKCFjdXJyZW50UG9zLmF0U3RhcnRP
ZlRyZWUoKSkgewotICAgICAgICBjdXJyZW50UG9zID0gY3VycmVudFBvcy5wcmV2aW91cygpOwor
ICAgIFBvc2l0aW9uIGN1cnJlbnRQb3NpdGlvbiA9ICp0aGlzOworICAgIHdoaWxlICghY3VycmVu
dFBvc2l0aW9uLmF0U3RhcnRPZlRyZWUoKSkgeworICAgICAgICBjdXJyZW50UG9zaXRpb24gPSBj
dXJyZW50UG9zaXRpb24ucHJldmlvdXMoKTsKIAotICAgICAgICBpZiAoY3VycmVudFBvcy5kZXBy
ZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gZnJvbVJvb3RFZGl0YWJsZUVs
ZW1lbnQpCisgICAgICAgIGlmIChjdXJyZW50UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+cm9v
dEVkaXRhYmxlRWxlbWVudCgpICE9IGZyb21Sb290RWRpdGFibGVFbGVtZW50KQogICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOwogCiAgICAgICAgIGlmIChhdFN0YXJ0T2ZMaW5lIHx8ICFyZW5kZXJl
ZCkgewotICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3MuaXNDYW5kaWRhdGUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gY3VycmVudFBvczsKLSAgICAgICAgfSBlbHNlIGlmIChyZW5kZXJzSW5E
aWZmZXJlbnRQb3NpdGlvbihjdXJyZW50UG9zKSkKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50
UG9zOworICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3NpdGlvbi5pc0NhbmRpZGF0ZSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb247CisgICAgICAgIH0gZWxzZSBpZiAo
cmVuZGVyc0luRGlmZmVyZW50UG9zaXRpb24oY3VycmVudFBvc2l0aW9uKSkKKyAgICAgICAgICAg
IHJldHVybiBjdXJyZW50UG9zaXRpb247CiAgICAgfQogICAgIAogICAgIHJldHVybiAqdGhpczsK
QEAgLTU2NCwyNSArNTY4LDI1IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpwcmV2aW91c0NoYXJhY3Rl
clBvc2l0aW9uKEVBZmZpbml0eSBhZmZpbml0eSkgY29uc3QKIFBvc2l0aW9uIFBvc2l0aW9uOjpu
ZXh0Q2hhcmFjdGVyUG9zaXRpb24oRUFmZmluaXR5IGFmZmluaXR5KSBjb25zdAogewogICAgIGlm
IChpc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CisgICAgICAgIHJldHVybiB7
IH07CiAKICAgICBOb2RlKiBmcm9tUm9vdEVkaXRhYmxlRWxlbWVudCA9IGRlcHJlY2F0ZWROb2Rl
KCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIAotICAgIGJvb2wgYXRFbmRPZkxpbmUgPSBpc0Vu
ZE9mTGluZShWaXNpYmxlUG9zaXRpb24oKnRoaXMsIGFmZmluaXR5KSk7CisgICAgYm9vbCBhdEVu
ZE9mTGluZSA9IGlzRW5kT2ZMaW5lKHsgKnRoaXMsIGFmZmluaXR5IH0pOwogICAgIGJvb2wgcmVu
ZGVyZWQgPSBpc0NhbmRpZGF0ZSgpOwogICAgIAotICAgIFBvc2l0aW9uIGN1cnJlbnRQb3MgPSAq
dGhpczsKLSAgICB3aGlsZSAoIWN1cnJlbnRQb3MuYXRFbmRPZlRyZWUoKSkgewotICAgICAgICBj
dXJyZW50UG9zID0gY3VycmVudFBvcy5uZXh0KCk7CisgICAgUG9zaXRpb24gY3VycmVudFBvc2l0
aW9uID0gKnRoaXM7CisgICAgd2hpbGUgKCFjdXJyZW50UG9zaXRpb24uYXRFbmRPZlRyZWUoKSkg
eworICAgICAgICBjdXJyZW50UG9zaXRpb24gPSBjdXJyZW50UG9zaXRpb24ubmV4dCgpOwogCi0g
ICAgICAgIGlmIChjdXJyZW50UG9zLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1l
bnQoKSAhPSBmcm9tUm9vdEVkaXRhYmxlRWxlbWVudCkKKyAgICAgICAgaWYgKGN1cnJlbnRQb3Np
dGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gZnJvbVJvb3RF
ZGl0YWJsZUVsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAgICAgICAgaWYg
KGF0RW5kT2ZMaW5lIHx8ICFyZW5kZXJlZCkgewotICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3Mu
aXNDYW5kaWRhdGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFBvczsKLSAgICAg
ICAgfSBlbHNlIGlmIChyZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlvbihjdXJyZW50UG9zKSkKLSAg
ICAgICAgICAgIHJldHVybiBjdXJyZW50UG9zOworICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3Np
dGlvbi5pc0NhbmRpZGF0ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UG9zaXRp
b247CisgICAgICAgIH0gZWxzZSBpZiAocmVuZGVyc0luRGlmZmVyZW50UG9zaXRpb24oY3VycmVu
dFBvc2l0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb247CiAgICAgfQog
ICAgIAogICAgIHJldHVybiAqdGhpczsKQEAgLTYwNSw3ICs2MDksNyBAQCBzdGF0aWMgYm9vbCBl
bmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0aW5jdFBvc2l0aW9ucyhOb2RlKiBub2RlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gVGhlcmUgaXMgYSBWaXNpYmxlUG9zaXRpb24g
aW5zaWRlIGFuIGVtcHR5IGlubGluZS1ibG9jayBjb250YWluZXIuCi0gICAgcmV0dXJuIG5vZGUt
PnJlbmRlcmVyKCktPmlzUmVwbGFjZWQoKSAmJiBjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKG5v
ZGUpICYmIGRvd25jYXN0PFJlbmRlckJveD4oKm5vZGUtPnJlbmRlcmVyKCkpLmhlaWdodCgpICYm
ICFub2RlLT5maXJzdENoaWxkKCk7CisgICAgcmV0dXJuIG5vZGUtPnJlbmRlcmVyKCktPmlzUmVw
bGFjZWQoKSAmJiBjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKCpub2RlKSAmJiBkb3duY2FzdDxS
ZW5kZXJCb3g+KCpub2RlLT5yZW5kZXJlcigpKS5oZWlnaHQoKSAmJiAhbm9kZS0+Zmlyc3RDaGls
ZCgpOwogfQogCiBzdGF0aWMgTm9kZSogZW5jbG9zaW5nVmlzdWFsQm91bmRhcnkoTm9kZSogbm9k
ZSkKQEAgLTYzOSw2MCArNjQzLDYwIEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbShFZGl0
aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkgY29uc3QKIHsKICAgICBOb2RlKiBzdGFydE5v
ZGUgPSBkZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghc3RhcnROb2RlKQotICAgICAgICByZXR1
cm4gUG9zaXRpb24oKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICAKICAgICAvLyBpdGVyYXRl
IGJhY2t3YXJkIGZyb20gdGhlcmUsIGxvb2tpbmcgZm9yIGEgcXVhbGlmaWVkIHBvc2l0aW9uCiAg
ICAgTm9kZSogYm91bmRhcnkgPSBlbmNsb3NpbmdWaXN1YWxCb3VuZGFyeShzdGFydE5vZGUpOwog
ICAgIC8vIEZJWE1FOiBQb3NpdGlvbkl0ZXJhdG9yIHNob3VsZCByZXNwZWN0IEJlZm9yZSBhbmQg
QWZ0ZXIgcG9zaXRpb25zLgogICAgIFBvc2l0aW9uSXRlcmF0b3IgbGFzdFZpc2libGUgPSBtX2Fu
Y2hvclR5cGUgPT0gUG9zaXRpb25Jc0FmdGVyQW5jaG9yID8gY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKG1fYW5jaG9yTm9kZS5nZXQoKSwgY2FyZXRNYXhPZmZzZXQoKm1fYW5jaG9yTm9kZSkp
IDogKnRoaXM7Ci0gICAgUG9zaXRpb25JdGVyYXRvciBjdXJyZW50UG9zID0gbGFzdFZpc2libGU7
CisgICAgUG9zaXRpb25JdGVyYXRvciBjdXJyZW50UG9zaXRpb24gPSBsYXN0VmlzaWJsZTsKICAg
ICBib29sIHN0YXJ0RWRpdGFibGUgPSBzdGFydE5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKTsKICAg
ICBOb2RlKiBsYXN0Tm9kZSA9IHN0YXJ0Tm9kZTsKICAgICBib29sIGJvdW5kYXJ5Q3Jvc3NlZCA9
IGZhbHNlOwotICAgIGZvciAoOyAhY3VycmVudFBvcy5hdFN0YXJ0KCk7IGN1cnJlbnRQb3MuZGVj
cmVtZW50KCkpIHsKLSAgICAgICAgTm9kZSogY3VycmVudE5vZGUgPSBjdXJyZW50UG9zLm5vZGUo
KTsKKyAgICBmb3IgKDsgIWN1cnJlbnRQb3NpdGlvbi5hdFN0YXJ0KCk7IGN1cnJlbnRQb3NpdGlv
bi5kZWNyZW1lbnQoKSkgeworICAgICAgICBhdXRvJiBjdXJyZW50Tm9kZSA9ICpjdXJyZW50UG9z
aXRpb24ubm9kZSgpOwogICAgICAgICAKICAgICAgICAgLy8gRG9uJ3QgY2hlY2sgZm9yIGFuIGVk
aXRhYmlsaXR5IGNoYW5nZSBpZiB3ZSBoYXZlbid0IG1vdmVkIHRvIGEgZGlmZmVyZW50IG5vZGUs
CiAgICAgICAgIC8vIHRvIGF2b2lkIHRoZSBleHBlbnNlIG9mIGNvbXB1dGluZyBoYXNFZGl0YWJs
ZVN0eWxlKCkuCi0gICAgICAgIGlmIChjdXJyZW50Tm9kZSAhPSBsYXN0Tm9kZSkgeworICAgICAg
ICBpZiAoJmN1cnJlbnROb2RlICE9IGxhc3ROb2RlKSB7CiAgICAgICAgICAgICAvLyBEb24ndCBj
aGFuZ2UgZWRpdGFiaWxpdHkuCi0gICAgICAgICAgICBib29sIGN1cnJlbnRFZGl0YWJsZSA9IGN1
cnJlbnROb2RlLT5oYXNFZGl0YWJsZVN0eWxlKCk7CisgICAgICAgICAgICBib29sIGN1cnJlbnRF
ZGl0YWJsZSA9IGN1cnJlbnROb2RlLmhhc0VkaXRhYmxlU3R5bGUoKTsKICAgICAgICAgICAgIGlm
IChzdGFydEVkaXRhYmxlICE9IGN1cnJlbnRFZGl0YWJsZSkgewogICAgICAgICAgICAgICAgIGlm
IChydWxlID09IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBib3VuZGFyeUNyb3NzZWQgPSB0cnVlOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbGFzdE5vZGUgPSBjdXJyZW50Tm9kZTsKKyAgICAgICAgICAg
IGxhc3ROb2RlID0gJmN1cnJlbnROb2RlOwogICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgd2Un
dmUgbW92ZWQgdG8gYSBwb3NpdGlvbiB0aGF0IGlzIHZpc3VhbGx5IGRpc3RpbmN0LCByZXR1cm4g
dGhlIGxhc3Qgc2F2ZWQgcG9zaXRpb24uIFRoZXJlIAogICAgICAgICAvLyBpcyBjb2RlIGJlbG93
IHRoYXQgdGVybWluYXRlcyBlYXJseSBpZiB3ZSdyZSAqYWJvdXQqIHRvIG1vdmUgdG8gYSB2aXN1
YWxseSBkaXN0aW5jdCBwb3NpdGlvbi4KLSAgICAgICAgaWYgKGVuZHNPZk5vZGVBcmVWaXN1YWxs
eURpc3RpbmN0UG9zaXRpb25zKGN1cnJlbnROb2RlKSAmJiBjdXJyZW50Tm9kZSAhPSBib3VuZGFy
eSkKKyAgICAgICAgaWYgKGVuZHNPZk5vZGVBcmVWaXN1YWxseURpc3RpbmN0UG9zaXRpb25zKCZj
dXJyZW50Tm9kZSkgJiYgJmN1cnJlbnROb2RlICE9IGJvdW5kYXJ5KQogICAgICAgICAgICAgcmV0
dXJuIGxhc3RWaXNpYmxlOwogCiAgICAgICAgIC8vIHNraXAgcG9zaXRpb24gaW4gdW5yZW5kZXJl
ZCBvciBpbnZpc2libGUgbm9kZQotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY3Vy
cmVudE5vZGUtPnJlbmRlcmVyKCk7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBj
dXJyZW50Tm9kZS5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIXJlbmRlcmVyIHx8IHJlbmRlcmVy
LT5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgIAogICAgICAgICBpZiAocnVsZSA9PSBDYW5Dcm9zc0VkaXRpbmdC
b3VuZGFyeSAmJiBib3VuZGFyeUNyb3NzZWQpIHsKLSAgICAgICAgICAgIGxhc3RWaXNpYmxlID0g
Y3VycmVudFBvczsKKyAgICAgICAgICAgIGxhc3RWaXNpYmxlID0gY3VycmVudFBvc2l0aW9uOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIHRyYWNr
IGxhc3QgdmlzaWJsZSBzdHJlYW1lciBwb3NpdGlvbgotICAgICAgICBpZiAoaXNTdHJlYW1lcihj
dXJyZW50UG9zKSkKLSAgICAgICAgICAgIGxhc3RWaXNpYmxlID0gY3VycmVudFBvczsKKyAgICAg
ICAgaWYgKGlzU3RyZWFtZXIoY3VycmVudFBvc2l0aW9uKSkKKyAgICAgICAgICAgIGxhc3RWaXNp
YmxlID0gY3VycmVudFBvc2l0aW9uOwogICAgICAgICAKICAgICAgICAgLy8gRG9uJ3QgbW92ZSBw
YXN0IGEgcG9zaXRpb24gdGhhdCBpcyB2aXN1YWxseSBkaXN0aW5jdC4gIFdlIGNvdWxkIHJlbHkg
b24gY29kZSBhYm92ZSB0byB0ZXJtaW5hdGUgYW5kIAogICAgICAgICAvLyByZXR1cm4gbGFzdFZp
c2libGUgb24gdGhlIG5leHQgaXRlcmF0aW9uLCBidXQgd2UgdGVybWluYXRlIGVhcmx5IHRvIGF2
b2lkIGRvaW5nIGEgY29tcHV0ZU5vZGVJbmRleCgpIGNhbGwuCi0gICAgICAgIGlmIChlbmRzT2ZO
b2RlQXJlVmlzdWFsbHlEaXN0aW5jdFBvc2l0aW9ucyhjdXJyZW50Tm9kZSkgJiYgY3VycmVudFBv
cy5hdFN0YXJ0T2ZOb2RlKCkpCisgICAgICAgIGlmIChlbmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0
aW5jdFBvc2l0aW9ucygmY3VycmVudE5vZGUpICYmIGN1cnJlbnRQb3NpdGlvbi5hdFN0YXJ0T2ZO
b2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gbGFzdFZpc2libGU7CiAKICAgICAgICAgLy8gUmV0
dXJuIHBvc2l0aW9uIGFmdGVyIHRhYmxlcyBhbmQgbm9kZXMgd2hpY2ggaGF2ZSBjb250ZW50IHRo
YXQgY2FuIGJlIGlnbm9yZWQuCi0gICAgICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQoY3Vy
cmVudE5vZGUpIHx8IGlzUmVuZGVyZWRUYWJsZShjdXJyZW50Tm9kZSkpIHsKLSAgICAgICAgICAg
IGlmIChjdXJyZW50UG9zLmF0RW5kT2ZOb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBv
c2l0aW9uQWZ0ZXJOb2RlKGN1cnJlbnROb2RlKTsKKyAgICAgICAgaWYgKGVkaXRpbmdJZ25vcmVz
Q29udGVudChjdXJyZW50Tm9kZSkgfHwgaXNSZW5kZXJlZFRhYmxlKCZjdXJyZW50Tm9kZSkpIHsK
KyAgICAgICAgICAgIGlmIChjdXJyZW50UG9zaXRpb24uYXRFbmRPZk5vZGUoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcG9zaXRpb25BZnRlck5vZGUoJmN1cnJlbnROb2RlKTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTcwMywyMSArNzA3LDIxIEBAIFBvc2l0aW9u
IFBvc2l0aW9uOjp1cHN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkgY29u
c3QKIAogICAgICAgICAgICAgaWYgKCF0ZXh0UmVuZGVyZXIuZmlyc3RUZXh0Qm94KCkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoY3VycmVudE5vZGUgIT0gc3Rh
cnROb2RlKSB7CisgICAgICAgICAgICBpZiAoJmN1cnJlbnROb2RlICE9IHN0YXJ0Tm9kZSkgewog
ICAgICAgICAgICAgICAgIC8vIFRoaXMgYXNzZXJ0aW9uIGZpcmVzIGluIGxheW91dCB0ZXN0cyBp
biB0aGUgY2FzZS10cmFuc2Zvcm0uaHRtbCB0ZXN0IGJlY2F1c2UKICAgICAgICAgICAgICAgICAv
LyBvZiBhIG1peC11cCBiZXR3ZWVuIG9mZnNldHMgaW4gdGhlIHRleHQgaW4gdGhlIERPTSB0cmVl
IHdpdGggdGV4dCBpbiB0aGUKICAgICAgICAgICAgICAgICAvLyByZW5kZXIgdHJlZSB3aGljaCBj
YW4gaGF2ZSBhIGRpZmZlcmVudCBsZW5ndGggZHVlIHRvIGNhc2UgdHJhbnNmb3JtYXRpb24uCiAg
ICAgICAgICAgICAgICAgLy8gVW50aWwgd2UgcmVzb2x2ZSB0aGF0LCBkaXNhYmxlIHRoaXMgc28g
d2UgY2FuIHJ1biB0aGUgbGF5b3V0IHRlc3RzIQogICAgICAgICAgICAgICAgIC8vQVNTRVJUKGN1
cnJlbnRPZmZzZXQgPj0gcmVuZGVyZXItPmNhcmV0TWF4T2Zmc2V0KCkpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY3VycmVudE5vZGUsIHJlbmRl
cmVyLT5jYXJldE1heE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKCZjdXJyZW50Tm9kZSwgcmVuZGVyZXItPmNhcmV0TWF4T2Zmc2V0
KCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB1bnNpZ25lZCB0ZXh0T2Zmc2V0ID0g
Y3VycmVudFBvcy5vZmZzZXRJbkxlYWZOb2RlKCk7CisgICAgICAgICAgICB1bnNpZ25lZCB0ZXh0
T2Zmc2V0ID0gY3VycmVudFBvc2l0aW9uLm9mZnNldEluTGVhZk5vZGUoKTsKICAgICAgICAgICAg
IGF1dG8gbGFzdFRleHRCb3ggPSB0ZXh0UmVuZGVyZXIubGFzdFRleHRCb3goKTsKICAgICAgICAg
ICAgIGZvciAoYXV0byogYm94ID0gdGV4dFJlbmRlcmVyLmZpcnN0VGV4dEJveCgpOyBib3g7IGJv
eCA9IGJveC0+bmV4dFRleHRCb3goKSkgewogICAgICAgICAgICAgICAgIGlmICh0ZXh0T2Zmc2V0
IDw9IGJveC0+c3RhcnQoKSArIGJveC0+bGVuKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KHRleHRPZmZzZXQgPiBib3gtPnN0YXJ0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY3VycmVudFBvczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UG9z
aXRpb247CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0K
IApAQCAtNzQ3LDcgKzc1MSw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbShFZGl0aW5n
Qm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkgY29uc3QKICAgICAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgICAgICBpZiAoY29udGludWVzT25OZXh0TGluZSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGN1cnJlbnRQb3M7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50
UG9zaXRpb247CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC03NjYsNjUgKzc3
MCw2NSBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9z
c2luZ1J1bGUgcnVsZSkgY29uc3QKIHsKICAgICBOb2RlKiBzdGFydE5vZGUgPSBkZXByZWNhdGVk
Tm9kZSgpOwogICAgIGlmICghc3RhcnROb2RlKQotICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIC8vIGl0ZXJhdGUgZm9yd2FyZCBmcm9tIHRoZXJl
LCBsb29raW5nIGZvciBhIHF1YWxpZmllZCBwb3NpdGlvbgogICAgIE5vZGUqIGJvdW5kYXJ5ID0g
ZW5jbG9zaW5nVmlzdWFsQm91bmRhcnkoc3RhcnROb2RlKTsKICAgICAvLyBGSVhNRTogUG9zaXRp
b25JdGVyYXRvciBzaG91bGQgcmVzcGVjdCBCZWZvcmUgYW5kIEFmdGVyIHBvc2l0aW9ucy4KICAg
ICBQb3NpdGlvbkl0ZXJhdG9yIGxhc3RWaXNpYmxlID0gbV9hbmNob3JUeXBlID09IFBvc2l0aW9u
SXNBZnRlckFuY2hvciA/IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX2FuY2hvck5vZGUu
Z2V0KCksIGNhcmV0TWF4T2Zmc2V0KCptX2FuY2hvck5vZGUpKSA6ICp0aGlzOwotICAgIFBvc2l0
aW9uSXRlcmF0b3IgY3VycmVudFBvcyA9IGxhc3RWaXNpYmxlOworICAgIFBvc2l0aW9uSXRlcmF0
b3IgY3VycmVudFBvc2l0aW9uID0gbGFzdFZpc2libGU7CiAgICAgYm9vbCBzdGFydEVkaXRhYmxl
ID0gc3RhcnROb2RlLT5oYXNFZGl0YWJsZVN0eWxlKCk7CiAgICAgTm9kZSogbGFzdE5vZGUgPSBz
dGFydE5vZGU7CiAgICAgYm9vbCBib3VuZGFyeUNyb3NzZWQgPSBmYWxzZTsKLSAgICBmb3IgKDsg
IWN1cnJlbnRQb3MuYXRFbmQoKTsgY3VycmVudFBvcy5pbmNyZW1lbnQoKSkgeyAgIAotICAgICAg
ICBOb2RlKiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRQb3Mubm9kZSgpOworICAgIGZvciAoOyAhY3Vy
cmVudFBvc2l0aW9uLmF0RW5kKCk7IGN1cnJlbnRQb3NpdGlvbi5pbmNyZW1lbnQoKSkgeworICAg
ICAgICBhdXRvJiBjdXJyZW50Tm9kZSA9ICpjdXJyZW50UG9zaXRpb24ubm9kZSgpOwogICAgICAg
ICAKICAgICAgICAgLy8gRG9uJ3QgY2hlY2sgZm9yIGFuIGVkaXRhYmlsaXR5IGNoYW5nZSBpZiB3
ZSBoYXZlbid0IG1vdmVkIHRvIGEgZGlmZmVyZW50IG5vZGUsCiAgICAgICAgIC8vIHRvIGF2b2lk
IHRoZSBleHBlbnNlIG9mIGNvbXB1dGluZyBoYXNFZGl0YWJsZVN0eWxlKCkuCi0gICAgICAgIGlm
IChjdXJyZW50Tm9kZSAhPSBsYXN0Tm9kZSkgeworICAgICAgICBpZiAoJmN1cnJlbnROb2RlICE9
IGxhc3ROb2RlKSB7CiAgICAgICAgICAgICAvLyBEb24ndCBjaGFuZ2UgZWRpdGFiaWxpdHkuCi0g
ICAgICAgICAgICBib29sIGN1cnJlbnRFZGl0YWJsZSA9IGN1cnJlbnROb2RlLT5oYXNFZGl0YWJs
ZVN0eWxlKCk7CisgICAgICAgICAgICBib29sIGN1cnJlbnRFZGl0YWJsZSA9IGN1cnJlbnROb2Rl
Lmhhc0VkaXRhYmxlU3R5bGUoKTsKICAgICAgICAgICAgIGlmIChzdGFydEVkaXRhYmxlICE9IGN1
cnJlbnRFZGl0YWJsZSkgewogICAgICAgICAgICAgICAgIGlmIChydWxlID09IENhbm5vdENyb3Nz
RWRpdGluZ0JvdW5kYXJ5KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICBib3VuZGFyeUNyb3NzZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgbGFzdE5vZGUgPSBjdXJyZW50Tm9kZTsKKyAgICAgICAgICAgIGxh
c3ROb2RlID0gJmN1cnJlbnROb2RlOwogICAgICAgICB9CiAKICAgICAgICAgLy8gc3RvcCBiZWZv
cmUgZ29pbmcgYWJvdmUgdGhlIGJvZHksIHVwIGludG8gdGhlIGhlYWQKICAgICAgICAgLy8gcmV0
dXJuIHRoZSBsYXN0IHZpc2libGUgc3RyZWFtZXIgcG9zaXRpb24KLSAgICAgICAgaWYgKGN1cnJl
bnROb2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpICYmIGN1cnJlbnRQb3MuYXRFbmRPZk5vZGUoKSkK
KyAgICAgICAgaWYgKGlzPEhUTUxCb2R5RWxlbWVudD4oY3VycmVudE5vZGUpICYmIGN1cnJlbnRQ
b3NpdGlvbi5hdEVuZE9mTm9kZSgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
KwogICAgICAgICAvLyBEbyBub3QgbW92ZSB0byBhIHZpc3VhbGx5IGRpc3RpbmN0IHBvc2l0aW9u
LgotICAgICAgICBpZiAoZW5kc09mTm9kZUFyZVZpc3VhbGx5RGlzdGluY3RQb3NpdGlvbnMoY3Vy
cmVudE5vZGUpICYmIGN1cnJlbnROb2RlICE9IGJvdW5kYXJ5KQorICAgICAgICBpZiAoZW5kc09m
Tm9kZUFyZVZpc3VhbGx5RGlzdGluY3RQb3NpdGlvbnMoJmN1cnJlbnROb2RlKSAmJiAmY3VycmVu
dE5vZGUgIT0gYm91bmRhcnkpCiAgICAgICAgICAgICByZXR1cm4gbGFzdFZpc2libGU7CiAgICAg
ICAgIC8vIERvIG5vdCBtb3ZlIHBhc3QgYSB2aXN1YWxseSBkaXNpbmN0IHBvc2l0aW9uLgogICAg
ICAgICAvLyBOb3RlOiBUaGUgZmlyc3QgcG9zaXRpb24gYWZ0ZXIgdGhlIGxhc3QgaW4gYSBub2Rl
IHdob3NlIGVuZHMgYXJlIHZpc3VhbGx5IGRpc3RpbmN0CiAgICAgICAgIC8vIHBvc2l0aW9ucyB3
aWxsIGJlIFtib3VuZGFyeS0+cGFyZW50Tm9kZSgpLCBvcmlnaW5hbEJsb2NrLT5jb21wdXRlTm9k
ZUluZGV4KCkgKyAxXS4KLSAgICAgICAgaWYgKGJvdW5kYXJ5ICYmIGJvdW5kYXJ5LT5wYXJlbnRO
b2RlKCkgPT0gY3VycmVudE5vZGUpCisgICAgICAgIGlmIChib3VuZGFyeSAmJiBib3VuZGFyeS0+
cGFyZW50Tm9kZSgpID09ICZjdXJyZW50Tm9kZSkKICAgICAgICAgICAgIHJldHVybiBsYXN0Vmlz
aWJsZTsKIAogICAgICAgICAvLyBza2lwIHBvc2l0aW9uIGluIHVucmVuZGVyZWQgb3IgaW52aXNp
YmxlIG5vZGUKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGN1cnJlbnROb2RlLT5y
ZW5kZXJlcigpOworICAgICAgICBhdXRvKiByZW5kZXJlciA9IGN1cnJlbnROb2RlLnJlbmRlcmVy
KCk7CiAgICAgICAgIGlmICghcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxlKCkudmlzaWJpbGl0
eSgpICE9IFZJU0lCTEUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAogICAg
ICAgICBpZiAocnVsZSA9PSBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSAmJiBib3VuZGFyeUNyb3Nz
ZWQpIHsKLSAgICAgICAgICAgIGxhc3RWaXNpYmxlID0gY3VycmVudFBvczsKKyAgICAgICAgICAg
IGxhc3RWaXNpYmxlID0gY3VycmVudFBvc2l0aW9uOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIHRyYWNrIGxhc3QgdmlzaWJsZSBzdHJlYW1lciBw
b3NpdGlvbgotICAgICAgICBpZiAoaXNTdHJlYW1lcihjdXJyZW50UG9zKSkKLSAgICAgICAgICAg
IGxhc3RWaXNpYmxlID0gY3VycmVudFBvczsKKyAgICAgICAgaWYgKGlzU3RyZWFtZXIoY3VycmVu
dFBvc2l0aW9uKSkKKyAgICAgICAgICAgIGxhc3RWaXNpYmxlID0gY3VycmVudFBvc2l0aW9uOwog
CiAgICAgICAgIC8vIFJldHVybiBwb3NpdGlvbiBiZWZvcmUgdGFibGVzIGFuZCBub2RlcyB3aGlj
aCBoYXZlIGNvbnRlbnQgdGhhdCBjYW4gYmUgaWdub3JlZC4KLSAgICAgICAgaWYgKGVkaXRpbmdJ
Z25vcmVzQ29udGVudChjdXJyZW50Tm9kZSkgfHwgaXNSZW5kZXJlZFRhYmxlKGN1cnJlbnROb2Rl
KSkgewotICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3MuYXRTdGFydE9mTm9kZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBwb3NpdGlvbkJlZm9yZU5vZGUoY3VycmVudE5vZGUpOworICAgICAg
ICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KGN1cnJlbnROb2RlKSB8fCBpc1JlbmRlcmVkVGFi
bGUoJmN1cnJlbnROb2RlKSkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3NpdGlvbi5hdFN0
YXJ0T2ZOb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uQmVmb3JlTm9kZSgm
Y3VycmVudE5vZGUpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtODM1
LDE3ICs4MzksMTcgQEAgUG9zaXRpb24gUG9zaXRpb246OmRvd25zdHJlYW0oRWRpdGluZ0JvdW5k
YXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUpIGNvbnN0CiAKICAgICAgICAgICAgIGlmICghdGV4dFJlbmRl
cmVyLmZpcnN0VGV4dEJveCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgaWYgKGN1cnJlbnROb2RlICE9IHN0YXJ0Tm9kZSkgewotICAgICAgICAgICAgICAgIEFTU0VS
VChjdXJyZW50UG9zLmF0U3RhcnRPZk5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjdXJyZW50Tm9kZSwgcmVuZGVyZXItPmNhcmV0TWlu
T2Zmc2V0KCkpOworICAgICAgICAgICAgaWYgKCZjdXJyZW50Tm9kZSAhPSBzdGFydE5vZGUpIHsK
KyAgICAgICAgICAgICAgICBBU1NFUlQoY3VycmVudFBvc2l0aW9uLmF0U3RhcnRPZk5vZGUoKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbigmY3Vy
cmVudE5vZGUsIHJlbmRlcmVyLT5jYXJldE1pbk9mZnNldCgpKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgdW5zaWduZWQgdGV4dE9mZnNldCA9IGN1cnJlbnRQb3Mub2Zmc2V0SW5MZWFm
Tm9kZSgpOworICAgICAgICAgICAgdW5zaWduZWQgdGV4dE9mZnNldCA9IGN1cnJlbnRQb3NpdGlv
bi5vZmZzZXRJbkxlYWZOb2RlKCk7CiAgICAgICAgICAgICBhdXRvIGxhc3RUZXh0Qm94ID0gdGV4
dFJlbmRlcmVyLmxhc3RUZXh0Qm94KCk7CiAgICAgICAgICAgICBmb3IgKGF1dG8qIGJveCA9IHRl
eHRSZW5kZXJlci5maXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkp
IHsKICAgICAgICAgICAgICAgICBpZiAodGV4dE9mZnNldCA8PSBib3gtPmVuZCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICh0ZXh0T2Zmc2V0ID49IGJveC0+c3RhcnQoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UG9zOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgfQogCkBAIC04NzUsNyArODc5LDcgQEAgUG9zaXRpb24gUG9zaXRp
b246OmRvd25zdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUpIGNvbnN0CiAg
ICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKGNvbnRpbnVlc09uTmV4dExp
bmUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UG9zOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY3VycmVudFBvc2l0aW9uOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtOTYyLDcgKzk2Niw3IEBAIGJvb2wgUG9zaXRpb246Om5vZGVJc1VzZXJTZWxl
Y3RBbGwoY29uc3QgTm9kZSogbm9kZSkKIE5vZGUqIFBvc2l0aW9uOjpyb290VXNlclNlbGVjdEFs
bEZvck5vZGUoTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGVJc1VzZXJTZWxl
Y3RBbGwobm9kZSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICBOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnQp
CiAgICAgICAgIHJldHVybiBub2RlOwpAQCAtOTg3LDI3ICs5OTEsMjggQEAgYm9vbCBQb3NpdGlv
bjo6aXNDYW5kaWRhdGUoKSBjb25zdAogICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRlcHJlY2F0ZWROb2RlKCkt
PnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBkZXByZWNhdGVkTm9kZSgpLT5yZW5k
ZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmIChyZW5kZXJlci0+c3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHJlbmRlcmVyLT5pc0JSKCkpCisgICAgaWYgKHJlbmRl
cmVyLT5pc0JSKCkpIHsKICAgICAgICAgLy8gRklYTUU6IFRoZSBjb25kaXRpb24gc2hvdWxkIGJl
IG1fYW5jaG9yVHlwZSA9PSBQb3NpdGlvbklzQmVmb3JlQW5jaG9yLCBidXQgZm9yIG5vdyB3ZSBz
dGlsbCBuZWVkIHRvIHN1cHBvcnQgbGVnYWN5IHBvc2l0aW9ucy4KICAgICAgICAgcmV0dXJuICFt
X29mZnNldCAmJiBtX2FuY2hvclR5cGUgIT0gUG9zaXRpb25Jc0FmdGVyQW5jaG9yICYmICFub2Rl
SXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCkpOworICAgIH0K
IAogICAgIGlmIChpczxSZW5kZXJUZXh0PigqcmVuZGVyZXIpKQogICAgICAgICByZXR1cm4gIW5v
ZGVJc1VzZXJTZWxlY3ROb25lKGRlcHJlY2F0ZWROb2RlKCkpICYmIGRvd25jYXN0PFJlbmRlclRl
eHQ+KCpyZW5kZXJlcikuY29udGFpbnNDYXJldE9mZnNldChtX29mZnNldCk7CiAKLSAgICBpZiAo
cG9zaXRpb25CZWZvcmVPckFmdGVyTm9kZUlzQ2FuZGlkYXRlKGRlcHJlY2F0ZWROb2RlKCkpKSB7
CisgICAgaWYgKHBvc2l0aW9uQmVmb3JlT3JBZnRlck5vZGVJc0NhbmRpZGF0ZSgqZGVwcmVjYXRl
ZE5vZGUoKSkpIHsKICAgICAgICAgcmV0dXJuICgoYXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZvck5v
ZGUoKSAmJiBtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0JlZm9yZUFuY2hvcikKICAgICAgICAg
ICAgIHx8IChhdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgJiYgbV9hbmNob3JUeXBlID09
IFBvc2l0aW9uSXNBZnRlckFuY2hvcikpCiAgICAgICAgICAgICAmJiAhbm9kZUlzVXNlclNlbGVj
dE5vbmUoZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpKTsKICAgICB9CiAKLSAgICBpZiAo
bV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGh0bWxUYWcpKQorICAgIGlmIChpczxIVE1MSHRtbEVs
ZW1lbnQ+KCptX2FuY2hvck5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAo
aXM8UmVuZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpCkBAIC0xMDE2LDcgKzEwMjEsNyBAQCBib29s
IFBvc2l0aW9uOjppc0NhbmRpZGF0ZSgpIGNvbnN0CiAjZW5kaWYKICAgICAgICAgfHwgaXM8UmVu
ZGVyRmxleGlibGVCb3g+KCpyZW5kZXJlcikpIHsKICAgICAgICAgUmVuZGVyQmxvY2smIGJsb2Nr
ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcik7Ci0gICAgICAgIGlmIChibG9jay5s
b2dpY2FsSGVpZ2h0KCkgfHwgbV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSB7Cisg
ICAgICAgIGlmIChibG9jay5sb2dpY2FsSGVpZ2h0KCkgfHwgaXM8SFRNTEJvZHlFbGVtZW50Pigq
bV9hbmNob3JOb2RlKSkgewogICAgICAgICAgICAgaWYgKCFQb3NpdGlvbjo6aGFzUmVuZGVyZWRO
b25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQoYmxvY2spKQogICAgICAgICAgICAgICAg
IHJldHVybiBhdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmICFQb3NpdGlvbjo6bm9k
ZUlzVXNlclNlbGVjdE5vbmUoZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgICAgICByZXR1cm4g
bV9hbmNob3JOb2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2Vy
U2VsZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpKSAmJiBhdEVkaXRpbmdCb3VuZGFyeSgpOwpAQCAt
MTA0NCw2OSArMTA0OSw2OCBAQCBzdGF0aWMgYm9vbCBpblNhbWVFbmNsb3NpbmdCbG9ja0Zsb3dF
bGVtZW50KE5vZGUqIGEsIE5vZGUqIGIpCiAgICAgcmV0dXJuIGEgJiYgYiAmJiBkZXByZWNhdGVk
RW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChhKSA9PSBkZXByZWNhdGVkRW5jbG9zaW5nQmxvY2tG
bG93RWxlbWVudChiKTsKIH0KIAotYm9vbCBQb3NpdGlvbjo6cmVuZGVyc0luRGlmZmVyZW50UG9z
aXRpb24oY29uc3QgUG9zaXRpb24gJnBvcykgY29uc3QKK2Jvb2wgUG9zaXRpb246OnJlbmRlcnNJ
bkRpZmZlcmVudFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikgY29uc3QKIHsKLSAg
ICBpZiAoaXNOdWxsKCkgfHwgcG9zLmlzTnVsbCgpKQorICAgIGlmIChpc051bGwoKSB8fCBwb3Np
dGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IGRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVu
ZGVyZXIgPSBkZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBSZW5kZXJPYmplY3QqIHBvc1JlbmRl
cmVyID0gcG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFwb3NSZW5k
ZXJlcikKKyAgICBhdXRvKiBwb3NpdGlvblJlbmRlcmVyID0gcG9zaXRpb24uZGVwcmVjYXRlZE5v
ZGUoKS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXBvc2l0aW9uUmVuZGVyZXIpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmIChyZW5kZXJlci0+c3R5bGUoKS52aXNpYmlsaXR5KCkgIT0g
VklTSUJMRSB8fAotICAgICAgICBwb3NSZW5kZXJlci0+c3R5bGUoKS52aXNpYmlsaXR5KCkgIT0g
VklTSUJMRSkKKyAgICBpZiAocmVuZGVyZXItPnN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lC
TEUgfHwgcG9zaXRpb25SZW5kZXJlci0+c3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmIChkZXByZWNhdGVkTm9kZSgpID09
IHBvcy5kZXByZWNhdGVkTm9kZSgpKSB7Ci0gICAgICAgIGlmIChkZXByZWNhdGVkTm9kZSgpLT5o
YXNUYWdOYW1lKGJyVGFnKSkKKyAgICBpZiAoZGVwcmVjYXRlZE5vZGUoKSA9PSBwb3NpdGlvbi5k
ZXByZWNhdGVkTm9kZSgpKSB7CisgICAgICAgIGlmIChpczxIVE1MQlJFbGVtZW50PigqZGVwcmVj
YXRlZE5vZGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKG1f
b2Zmc2V0ID09IHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKQorICAgICAgICBpZiAobV9v
ZmZzZXQgPT0gcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICBpZiAoIWRlcHJlY2F0ZWROb2Rl
KCktPmlzVGV4dE5vZGUoKSAmJiAhcG9zLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkg
ewotICAgICAgICAgICAgaWYgKG1fb2Zmc2V0ICE9IHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpKQorCisgICAgICAgIGlmICghaXM8VGV4dD4oKmRlcHJlY2F0ZWROb2RlKCkpICYmICFpczxU
ZXh0PigqcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChtX29m
ZnNldCAhPSBwb3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIGlmIChkZXByZWNh
dGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSAmJiBwb3MuaXNDYW5kaWRhdGUoKSkKKworICAg
IGlmIChpczxIVE1MQlJFbGVtZW50PigqZGVwcmVjYXRlZE5vZGUoKSkgJiYgcG9zaXRpb24uaXND
YW5kaWRhdGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgCi0gICAg
aWYgKHBvcy5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSAmJiBpc0NhbmRpZGF0
ZSgpKQorCisgICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KCpwb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpKSAmJiBpc0NhbmRpZGF0ZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAKLSAgICBpZiAoIWluU2FtZUVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoZGVwcmVjYXRl
ZE5vZGUoKSwgcG9zLmRlcHJlY2F0ZWROb2RlKCkpKQorCisgICAgaWYgKCFpblNhbWVFbmNsb3Np
bmdCbG9ja0Zsb3dFbGVtZW50KGRlcHJlY2F0ZWROb2RlKCksIHBvc2l0aW9uLmRlcHJlY2F0ZWRO
b2RlKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChpczxSZW5kZXJUZXh0Pigq
cmVuZGVyZXIpICYmICFkb3duY2FzdDxSZW5kZXJUZXh0PigqcmVuZGVyZXIpLmNvbnRhaW5zQ2Fy
ZXRPZmZzZXQobV9vZmZzZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaXM8
UmVuZGVyVGV4dD4oKnBvc1JlbmRlcmVyKSAmJiAhZG93bmNhc3Q8UmVuZGVyVGV4dD4oKnBvc1Jl
bmRlcmVyKS5jb250YWluc0NhcmV0T2Zmc2V0KHBvcy5tX29mZnNldCkpCisgICAgaWYgKGlzPFJl
bmRlclRleHQ+KCpwb3NpdGlvblJlbmRlcmVyKSAmJiAhZG93bmNhc3Q8UmVuZGVyVGV4dD4oKnBv
c2l0aW9uUmVuZGVyZXIpLmNvbnRhaW5zQ2FyZXRPZmZzZXQocG9zaXRpb24ubV9vZmZzZXQpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpbnQgdGhpc1JlbmRlcmVkT2Zmc2V0ID0gaXM8
UmVuZGVyVGV4dD4oKnJlbmRlcmVyKSA/IGRvd25jYXN0PFJlbmRlclRleHQ+KCpyZW5kZXJlciku
Y291bnRSZW5kZXJlZENoYXJhY3Rlck9mZnNldHNVbnRpbChtX29mZnNldCkgOiBtX29mZnNldDsK
LSAgICBpbnQgcG9zUmVuZGVyZWRPZmZzZXQgPSBpczxSZW5kZXJUZXh0PigqcG9zUmVuZGVyZXIp
ID8gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKnBvc1JlbmRlcmVyKS5jb3VudFJlbmRlcmVkQ2hhcmFj
dGVyT2Zmc2V0c1VudGlsKHBvcy5tX29mZnNldCkgOiBwb3MubV9vZmZzZXQ7CisgICAgaW50IHBv
c2l0aW9uUmVuZGVyZWRPZmZzZXQgPSBpczxSZW5kZXJUZXh0PigqcG9zaXRpb25SZW5kZXJlcikg
PyBkb3duY2FzdDxSZW5kZXJUZXh0PigqcG9zaXRpb25SZW5kZXJlcikuY291bnRSZW5kZXJlZENo
YXJhY3Rlck9mZnNldHNVbnRpbChwb3NpdGlvbi5tX29mZnNldCkgOiBwb3NpdGlvbi5tX29mZnNl
dDsKIAotICAgIGlmIChyZW5kZXJlciA9PSBwb3NSZW5kZXJlciAmJiB0aGlzUmVuZGVyZWRPZmZz
ZXQgPT0gcG9zUmVuZGVyZWRPZmZzZXQpCisgICAgaWYgKHJlbmRlcmVyID09IHBvc2l0aW9uUmVu
ZGVyZXIgJiYgdGhpc1JlbmRlcmVkT2Zmc2V0ID09IHBvc2l0aW9uUmVuZGVyZWRPZmZzZXQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGludCBpZ25vcmVkQ2FyZXRPZmZzZXQ7CiAgICAg
SW5saW5lQm94KiBiMTsKICAgICBnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRE9XTlNUUkVBTSwgYjEs
IGlnbm9yZWRDYXJldE9mZnNldCk7CiAgICAgSW5saW5lQm94KiBiMjsKLSAgICBwb3MuZ2V0SW5s
aW5lQm94QW5kT2Zmc2V0KERPV05TVFJFQU0sIGIyLCBpZ25vcmVkQ2FyZXRPZmZzZXQpOworICAg
IHBvc2l0aW9uLmdldElubGluZUJveEFuZE9mZnNldChET1dOU1RSRUFNLCBiMiwgaWdub3JlZENh
cmV0T2Zmc2V0KTsKIAogICAgIExPRyhFZGl0aW5nLCAicmVuZGVyZXI6ICAgICAgICAgICAgICAg
JXAgWyVwXVxuIiwgcmVuZGVyZXIsIGIxKTsKICAgICBMT0coRWRpdGluZywgInRoaXNSZW5kZXJl
ZE9mZnNldDogICAgICAgICAlZFxuIiwgdGhpc1JlbmRlcmVkT2Zmc2V0KTsKLSAgICBMT0coRWRp
dGluZywgInBvc1JlbmRlcmVyOiAgICAgICAgICAgICVwIFslcF1cbiIsIHBvc1JlbmRlcmVyLCBi
Mik7Ci0gICAgTE9HKEVkaXRpbmcsICJwb3NSZW5kZXJlZE9mZnNldDogICAgICAlZFxuIiwgcG9z
UmVuZGVyZWRPZmZzZXQpOworICAgIExPRyhFZGl0aW5nLCAicG9zUmVuZGVyZXI6ICAgICAgICAg
ICAgJXAgWyVwXVxuIiwgcG9zaXRpb25SZW5kZXJlciwgYjIpOworICAgIExPRyhFZGl0aW5nLCAi
cG9zUmVuZGVyZWRPZmZzZXQ6ICAgICAgJWRcbiIsIHBvc2l0aW9uUmVuZGVyZWRPZmZzZXQpOwog
ICAgIExPRyhFZGl0aW5nLCAibm9kZSBtaW4vbWF4OiAgICAgICAgICAgJWQ6JWRcbiIsIGNhcmV0
TWluT2Zmc2V0KCpkZXByZWNhdGVkTm9kZSgpKSwgY2FyZXRNYXhPZmZzZXQoKmRlcHJlY2F0ZWRO
b2RlKCkpKTsKLSAgICBMT0coRWRpdGluZywgInBvcyBub2RlIG1pbi9tYXg6ICAgICAgICVkOiVk
XG4iLCBjYXJldE1pbk9mZnNldCgqcG9zLmRlcHJlY2F0ZWROb2RlKCkpLCBjYXJldE1heE9mZnNl
dCgqcG9zLmRlcHJlY2F0ZWROb2RlKCkpKTsKKyAgICBMT0coRWRpdGluZywgInBvcyBub2RlIG1p
bi9tYXg6ICAgICAgICVkOiVkXG4iLCBjYXJldE1pbk9mZnNldCgqcG9zaXRpb24uZGVwcmVjYXRl
ZE5vZGUoKSksIGNhcmV0TWF4T2Zmc2V0KCpwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSk7CiAg
ICAgTE9HKEVkaXRpbmcsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAogICAgIGlmICghYjEgfHwgIWIy
KSB7CkBAIC0xMTE3LDEzICsxMTIxLDEzIEBAIGJvb2wgUG9zaXRpb246OnJlbmRlcnNJbkRpZmZl
cmVudFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uICZwb3MpIGNvbnN0CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIGlmIChuZXh0UmVuZGVyZWRFZGl0YWJsZShkZXByZWNhdGVkTm9k
ZSgpKSA9PSBwb3MuZGVwcmVjYXRlZE5vZGUoKQotICAgICAgICAmJiB0aGlzUmVuZGVyZWRPZmZz
ZXQgPT0gY2FyZXRNYXhPZmZzZXQoKmRlcHJlY2F0ZWROb2RlKCkpICYmICFwb3NSZW5kZXJlZE9m
ZnNldCkgeworICAgIGlmIChuZXh0UmVuZGVyZWRFZGl0YWJsZShkZXByZWNhdGVkTm9kZSgpKSA9
PSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpCisgICAgICAgICYmIHRoaXNSZW5kZXJlZE9mZnNl
dCA9PSBjYXJldE1heE9mZnNldCgqZGVwcmVjYXRlZE5vZGUoKSkgJiYgIXBvc2l0aW9uUmVuZGVy
ZWRPZmZzZXQpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBpZiAo
cHJldmlvdXNSZW5kZXJlZEVkaXRhYmxlKGRlcHJlY2F0ZWROb2RlKCkpID09IHBvcy5kZXByZWNh
dGVkTm9kZSgpCi0gICAgICAgICYmICF0aGlzUmVuZGVyZWRPZmZzZXQgJiYgcG9zUmVuZGVyZWRP
ZmZzZXQgPT0gY2FyZXRNYXhPZmZzZXQoKnBvcy5kZXByZWNhdGVkTm9kZSgpKSkgeworICAgIGlm
IChwcmV2aW91c1JlbmRlcmVkRWRpdGFibGUoZGVwcmVjYXRlZE5vZGUoKSkgPT0gcG9zaXRpb24u
ZGVwcmVjYXRlZE5vZGUoKQorICAgICAgICAmJiAhdGhpc1JlbmRlcmVkT2Zmc2V0ICYmIHBvc2l0
aW9uUmVuZGVyZWRPZmZzZXQgPT0gY2FyZXRNYXhPZmZzZXQoKnBvc2l0aW9uLmRlcHJlY2F0ZWRO
b2RlKCkpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTExMzUsMTAgKzEx
MzksMTAgQEAgUG9zaXRpb24gUG9zaXRpb246OmxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24oRUFm
ZmluaXR5IGFmZmluaXR5LCBib29sIGNvbnNpZGVyTm8KIHsKICAgICBBU1NFUlQoaXNFZGl0YWJs
ZVBvc2l0aW9uKCp0aGlzKSk7CiAgICAgaWYgKGlzTnVsbCgpKQotICAgICAgICByZXR1cm4gUG9z
aXRpb24oKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICAKLSAgICBpZiAodXBzdHJlYW0oKS5k
ZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkKLSAgICAgICAgcmV0dXJuIFBvc2l0
aW9uKCk7CisgICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KCp1cHN0cmVhbSgpLmRlcHJlY2F0ZWRO
b2RlKCkpKQorICAgICAgICByZXR1cm4geyB9OwogCiAgICAgUG9zaXRpb24gcHJldiA9IHByZXZp
b3VzQ2hhcmFjdGVyUG9zaXRpb24oYWZmaW5pdHkpOwogICAgIGlmIChwcmV2ICE9ICp0aGlzICYm
IGluU2FtZUVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoZGVwcmVjYXRlZE5vZGUoKSwgcHJldi5k
ZXByZWNhdGVkTm9kZSgpKSAmJiBpczxUZXh0PigqcHJldi5kZXByZWNhdGVkTm9kZSgpKSkgewpA
QCAtMTE0OSw3ICsxMTUzLDcgQEAgUG9zaXRpb24gUG9zaXRpb246OmxlYWRpbmdXaGl0ZXNwYWNl
UG9zaXRpb24oRUFmZmluaXR5IGFmZmluaXR5LCBib29sIGNvbnNpZGVyTm8KICAgICAgICAgICAg
ICAgICByZXR1cm4gcHJldjsKICAgICB9CiAKLSAgICByZXR1cm4gUG9zaXRpb24oKTsKKyAgICBy
ZXR1cm4geyB9OwogfQogCiAvLyBUaGlzIGFzc3VtZXMgdGhhdCBpdCBzdGFydHMgaW4gZWRpdGFi
bGUgY29udGVudC4KQEAgLTExNTcsNyArMTE2MSw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp0cmFp
bGluZ1doaXRlc3BhY2VQb3NpdGlvbihFQWZmaW5pdHksIGJvb2wgY29uc2lkZXJOb25Db2xsYXBz
CiB7CiAgICAgQVNTRVJUKGlzRWRpdGFibGVQb3NpdGlvbigqdGhpcykpOwogICAgIGlmIChpc051
bGwoKSkKLSAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CisgICAgICAgIHJldHVybiB7IH07CiAg
ICAgCiAgICAgVmlzaWJsZVBvc2l0aW9uIHYoKnRoaXMpOwogICAgIFVDaGFyIGMgPSB2LmNoYXJh
Y3RlckFmdGVyKCk7CkBAIC0xMTY2LDcgKzExNzAsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6dHJh
aWxpbmdXaGl0ZXNwYWNlUG9zaXRpb24oRUFmZmluaXR5LCBib29sIGNvbnNpZGVyTm9uQ29sbGFw
cwogICAgICAgICBpZiAoY29uc2lkZXJOb25Db2xsYXBzaWJsZVdoaXRlc3BhY2UgPyAoaXNTcGFj
ZU9yTmV3bGluZShjKSB8fCBjID09IG5vQnJlYWtTcGFjZSkgOiBkZXByZWNhdGVkSXNDb2xsYXBz
aWJsZVdoaXRlc3BhY2UoYykpCiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgCi0gICAg
cmV0dXJuIFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBQb3NpdGlvbjo6
Z2V0SW5saW5lQm94QW5kT2Zmc2V0KEVBZmZpbml0eSBhZmZpbml0eSwgSW5saW5lQm94KiYgaW5s
aW5lQm94LCBpbnQmIGNhcmV0T2Zmc2V0KSBjb25zdApAQCAtMTI3MCw3ICsxMjc0LDcgQEAgdm9p
ZCBQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KEVBZmZpbml0eSBhZmZpbml0eSwgVGV4
dERpcmVjdGlvbiBwcmltYXJ5RGkKICAgICAgICAgaW5saW5lQm94ID0gYm94ID8gYm94IDogY2Fu
ZGlkYXRlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlubGluZUJveCA9IG51bGxwdHI7Ci0gICAg
ICAgIGlmIChjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKGRlcHJlY2F0ZWROb2RlKCkpICYmIGlz
PFJlbmRlckJsb2NrRmxvdz4oKnJlbmRlcmVyKSAmJiBoYXNSZW5kZXJlZE5vbkFub255bW91c0Rl
c2NlbmRhbnRzV2l0aEhlaWdodChkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcikp
KSB7CisgICAgICAgIGlmIChjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKCpkZXByZWNhdGVkTm9k
ZSgpKSAmJiBpczxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcikgJiYgaGFzUmVuZGVyZWROb25B
bm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQoZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93Pigq
cmVuZGVyZXIpKSkgewogICAgICAgICAgICAgLy8gVHJ5IGEgdmlzdWFsbHkgZXF1aXZhbGVudCBw
b3NpdGlvbiB3aXRoIHBvc3NpYmx5IG9wcG9zaXRlIGVkaXRhYmlsaXR5LiBUaGlzIGhlbHBzIGlu
IGNhc2UgfHRoaXN8IGlzIGluCiAgICAgICAgICAgICAvLyBhbiBlZGl0YWJsZSBibG9jayBidXQg
c3Vycm91bmRlZCBieSBub24tZWRpdGFibGUgcG9zaXRpb25zLiBJdCBhY3RzIHRvIG5lZ2F0ZSB0
aGUgbG9naWMgYXQgdGhlIGJlZ2lubmluZwogICAgICAgICAgICAgLy8gb2YgUmVuZGVyT2JqZWN0
OjpjcmVhdGVWaXNpYmxlUG9zaXRpb24oKS4KQEAgLTE0NjMsMTMgKzE0NjcsMTMgQEAgYm9vbCBQ
b3NpdGlvbjo6ZXF1YWxzKGNvbnN0IFBvc2l0aW9uJiBvdGhlcikgY29uc3QKIAogICAgIHN3aXRj
aCAoYW5jaG9yVHlwZSgpKSB7CiAgICAgY2FzZSBQb3NpdGlvbklzQmVmb3JlQ2hpbGRyZW46Ci0g
ICAgICAgIEFTU0VSVCghbV9hbmNob3JOb2RlLT5pc1RleHROb2RlKCkpOworICAgICAgICBBU1NF
UlQoIWlzPFRleHQ+KCptX2FuY2hvck5vZGUpKTsKICAgICAgICAgc3dpdGNoIChvdGhlci5hbmNo
b3JUeXBlKCkpIHsKICAgICAgICAgY2FzZSBQb3NpdGlvbklzQmVmb3JlQ2hpbGRyZW46Ci0gICAg
ICAgICAgICBBU1NFUlQoIW90aGVyLm1fYW5jaG9yTm9kZS0+aXNUZXh0Tm9kZSgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghaXM8VGV4dD4oKm90aGVyLm1fYW5jaG9yTm9kZSkpOwogICAgICAgICAg
ICAgcmV0dXJuIG1fYW5jaG9yTm9kZSA9PSBvdGhlci5tX2FuY2hvck5vZGU7CiAgICAgICAgIGNh
c2UgUG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW46Ci0gICAgICAgICAgICBBU1NFUlQoIW90aGVyLm1f
YW5jaG9yTm9kZS0+aXNUZXh0Tm9kZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXM8VGV4dD4o
Km90aGVyLm1fYW5jaG9yTm9kZSkpOwogICAgICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZSA9
PSBvdGhlci5tX2FuY2hvck5vZGUgJiYgIW1fYW5jaG9yTm9kZS0+aGFzQ2hpbGROb2RlcygpOwog
ICAgICAgICBjYXNlIFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjoKICAgICAgICAgICAgIHJldHVy
biBtX2FuY2hvck5vZGUgPT0gb3RoZXIubV9hbmNob3JOb2RlICYmICFvdGhlci5tX29mZnNldDsK
QEAgLTE0ODAsMTMgKzE0ODQsMTMgQEAgYm9vbCBQb3NpdGlvbjo6ZXF1YWxzKGNvbnN0IFBvc2l0
aW9uJiBvdGhlcikgY29uc3QKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIFBv
c2l0aW9uSXNBZnRlckNoaWxkcmVuOgotICAgICAgICBBU1NFUlQoIW1fYW5jaG9yTm9kZS0+aXNU
ZXh0Tm9kZSgpKTsKKyAgICAgICAgQVNTRVJUKCFpczxUZXh0PigqbV9hbmNob3JOb2RlKSk7CiAg
ICAgICAgIHN3aXRjaCAob3RoZXIuYW5jaG9yVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgUG9zaXRp
b25Jc0JlZm9yZUNoaWxkcmVuOgotICAgICAgICAgICAgQVNTRVJUKCFvdGhlci5tX2FuY2hvck5v
ZGUtPmlzVGV4dE5vZGUoKSk7CisgICAgICAgICAgICBBU1NFUlQoIWlzPFRleHQ+KCpvdGhlci5t
X2FuY2hvck5vZGUpKTsKICAgICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUgPT0gb3RoZXIu
bV9hbmNob3JOb2RlICYmICFtX2FuY2hvck5vZGUtPmhhc0NoaWxkTm9kZXMoKTsKICAgICAgICAg
Y2FzZSBQb3NpdGlvbklzQWZ0ZXJDaGlsZHJlbjoKLSAgICAgICAgICAgIEFTU0VSVCghb3RoZXIu
bV9hbmNob3JOb2RlLT5pc1RleHROb2RlKCkpOworICAgICAgICAgICAgQVNTRVJUKCFpczxUZXh0
Pigqb3RoZXIubV9hbmNob3JOb2RlKSk7CiAgICAgICAgICAgICByZXR1cm4gbV9hbmNob3JOb2Rl
ID09IG90aGVyLm1fYW5jaG9yTm9kZTsKICAgICAgICAgY2FzZSBQb3NpdGlvbklzT2Zmc2V0SW5B
bmNob3I6CiAgICAgICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlID09IG90aGVyLm1fYW5jaG9y
Tm9kZSAmJiBtX2FuY2hvck5vZGUtPmNvdW50Q2hpbGROb2RlcygpID09IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX29mZnNldCk7CkBAIC0xNDk5LDEwICsxNTAzLDEwIEBAIGJvb2wgUG9zaXRpb246
OmVxdWFscyhjb25zdCBQb3NpdGlvbiYgb3RoZXIpIGNvbnN0CiAgICAgY2FzZSBQb3NpdGlvbklz
T2Zmc2V0SW5BbmNob3I6CiAgICAgICAgIHN3aXRjaCAob3RoZXIuYW5jaG9yVHlwZSgpKSB7CiAg
ICAgICAgIGNhc2UgUG9zaXRpb25Jc0JlZm9yZUNoaWxkcmVuOgotICAgICAgICAgICAgQVNTRVJU
KCFvdGhlci5tX2FuY2hvck5vZGUtPmlzVGV4dE5vZGUoKSk7CisgICAgICAgICAgICBBU1NFUlQo
IWlzPFRleHQ+KCpvdGhlci5tX2FuY2hvck5vZGUpKTsKICAgICAgICAgICAgIHJldHVybiBtX2Fu
Y2hvck5vZGUgPT0gb3RoZXIubV9hbmNob3JOb2RlICYmICFtX29mZnNldDsKICAgICAgICAgY2Fz
ZSBQb3NpdGlvbklzQWZ0ZXJDaGlsZHJlbjoKLSAgICAgICAgICAgIEFTU0VSVCghb3RoZXIubV9h
bmNob3JOb2RlLT5pc1RleHROb2RlKCkpOworICAgICAgICAgICAgQVNTRVJUKCFpczxUZXh0Pigq
b3RoZXIubV9hbmNob3JOb2RlKSk7CiAgICAgICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlID09
IG90aGVyLm1fYW5jaG9yTm9kZSAmJiBtX29mZnNldCA9PSBzdGF0aWNfY2FzdDxpbnQ+KG90aGVy
Lm1fYW5jaG9yTm9kZS0+Y291bnRDaGlsZE5vZGVzKCkpOwogICAgICAgICBjYXNlIFBvc2l0aW9u
SXNPZmZzZXRJbkFuY2hvcjoKICAgICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUgPT0gb3Ro
ZXIubV9hbmNob3JOb2RlICYmIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0OwpAQCAtMTUxNSwx
MCArMTUxOSwxMCBAQCBib29sIFBvc2l0aW9uOjplcXVhbHMoY29uc3QgUG9zaXRpb24mIG90aGVy
KSBjb25zdAogICAgIGNhc2UgUG9zaXRpb25Jc0JlZm9yZUFuY2hvcjoKICAgICAgICAgc3dpdGNo
IChvdGhlci5hbmNob3JUeXBlKCkpIHsKICAgICAgICAgY2FzZSBQb3NpdGlvbklzQmVmb3JlQ2hp
bGRyZW46Ci0gICAgICAgICAgICBBU1NFUlQoIW90aGVyLm1fYW5jaG9yTm9kZS0+aXNUZXh0Tm9k
ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXM8VGV4dD4oKm90aGVyLm1fYW5jaG9yTm9kZSkp
OwogICAgICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZSA9PSBvdGhlci5tX2FuY2hvck5vZGUt
PmZpcnN0Q2hpbGQoKTsKICAgICAgICAgY2FzZSBQb3NpdGlvbklzQWZ0ZXJDaGlsZHJlbjoKLSAg
ICAgICAgICAgIEFTU0VSVCghb3RoZXIubV9hbmNob3JOb2RlLT5pc1RleHROb2RlKCkpOworICAg
ICAgICAgICAgQVNTRVJUKCFpczxUZXh0Pigqb3RoZXIubV9hbmNob3JOb2RlKSk7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgUG9zaXRpb25Jc09mZnNldEluQW5jaG9y
OgogICAgICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZSA9PSBvdGhlci5tX2FuY2hvck5vZGUt
PnRyYXZlcnNlVG9DaGlsZEF0KG90aGVyLm1fb2Zmc2V0KTsKQEAgLTE1MzEsMTAgKzE1MzUsMTAg
QEAgYm9vbCBQb3NpdGlvbjo6ZXF1YWxzKGNvbnN0IFBvc2l0aW9uJiBvdGhlcikgY29uc3QKICAg
ICBjYXNlIFBvc2l0aW9uSXNBZnRlckFuY2hvcjoKICAgICAgICAgc3dpdGNoIChvdGhlci5hbmNo
b3JUeXBlKCkpIHsKICAgICAgICAgY2FzZSBQb3NpdGlvbklzQmVmb3JlQ2hpbGRyZW46Ci0gICAg
ICAgICAgICBBU1NFUlQoIW90aGVyLm1fYW5jaG9yTm9kZS0+aXNUZXh0Tm9kZSgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghaXM8VGV4dD4oKm90aGVyLm1fYW5jaG9yTm9kZSkpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIFBvc2l0aW9uSXNBZnRlckNoaWxkcmVuOgot
ICAgICAgICAgICAgQVNTRVJUKCFvdGhlci5tX2FuY2hvck5vZGUtPmlzVGV4dE5vZGUoKSk7Cisg
ICAgICAgICAgICBBU1NFUlQoIWlzPFRleHQ+KCpvdGhlci5tX2FuY2hvck5vZGUpKTsKICAgICAg
ICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUgPT0gb3RoZXIubV9hbmNob3JOb2RlLT5sYXN0Q2hp
bGQoKTsKICAgICAgICAgY2FzZSBQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3I6CiAgICAgICAgICAg
ICByZXR1cm4gb3RoZXIubV9vZmZzZXQgJiYgbV9hbmNob3JOb2RlID09IG90aGVyLm1fYW5jaG9y
Tm9kZS0+dHJhdmVyc2VUb0NoaWxkQXQob3RoZXIubV9vZmZzZXQgLSAxKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAppbmRleCA3YWMzZDhkMDlmYmMyMzAxZDc5NzMyYzEz
MjhjNTAyNWVlZTFmYjdhLi5jMWIwYTBjNTQ0N2Q1NDUwYTM3MDM4NjMzOWIzNDQxZWM3ZDA2YmZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCkBAIC00MywxMSArNDMs
MTEgQEAgUG9zaXRpb25JdGVyYXRvcjo6b3BlcmF0b3IgUG9zaXRpb24oKSBjb25zdAogICAgIGlm
IChtX25vZGVBZnRlclBvc2l0aW9uSW5BbmNob3IpIHsKICAgICAgICAgQVNTRVJUKG1fbm9kZUFm
dGVyUG9zaXRpb25JbkFuY2hvci0+cGFyZW50Tm9kZSgpID09IG1fYW5jaG9yTm9kZSk7CiAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIGlzIGluYWRhcXVldGUgYmVjYXVzZSBhbnkgYW5jZXN0
b3IgY291bGQgYmUgaWdub3JlZCBieSBlZGl0aW5nCi0gICAgICAgIGlmIChwb3NpdGlvbkJlZm9y
ZU9yQWZ0ZXJOb2RlSXNDYW5kaWRhdGUobV9hbmNob3JOb2RlKSkKKyAgICAgICAgaWYgKHBvc2l0
aW9uQmVmb3JlT3JBZnRlck5vZGVJc0NhbmRpZGF0ZSgqbV9hbmNob3JOb2RlKSkKICAgICAgICAg
ICAgIHJldHVybiBwb3NpdGlvbkJlZm9yZU5vZGUobV9hbmNob3JOb2RlKTsKICAgICAgICAgcmV0
dXJuIHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKG1fbm9kZUFmdGVyUG9zaXRpb25JbkFuY2hv
cik7CiAgICAgfQotICAgIGlmIChwb3NpdGlvbkJlZm9yZU9yQWZ0ZXJOb2RlSXNDYW5kaWRhdGUo
bV9hbmNob3JOb2RlKSkKKyAgICBpZiAocG9zaXRpb25CZWZvcmVPckFmdGVyTm9kZUlzQ2FuZGlk
YXRlKCptX2FuY2hvck5vZGUpKQogICAgICAgICByZXR1cm4gYXRTdGFydE9mTm9kZSgpID8gcG9z
aXRpb25CZWZvcmVOb2RlKG1fYW5jaG9yTm9kZSkgOiBwb3NpdGlvbkFmdGVyTm9kZShtX2FuY2hv
ck5vZGUpOwogICAgIGlmIChtX2FuY2hvck5vZGUtPmhhc0NoaWxkTm9kZXMoKSkKICAgICAgICAg
cmV0dXJuIGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUobV9hbmNob3JOb2RlKTsKQEAgLTE2MSw3
ICsxNjEsNyBAQCBib29sIFBvc2l0aW9uSXRlcmF0b3I6OmlzQ2FuZGlkYXRlKCkgY29uc3QKICAg
ICBpZiAoaXM8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKSkKICAgICAgICAgcmV0dXJuICFQb3NpdGlv
bjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobV9hbmNob3JOb2RlKSAmJiBkb3duY2FzdDxSZW5kZXJU
ZXh0PigqcmVuZGVyZXIpLmNvbnRhaW5zQ2FyZXRPZmZzZXQobV9vZmZzZXRJbkFuY2hvcik7CiAK
LSAgICBpZiAoaXNSZW5kZXJlZFRhYmxlKG1fYW5jaG9yTm9kZSkgfHwgZWRpdGluZ0lnbm9yZXND
b250ZW50KG1fYW5jaG9yTm9kZSkpCisgICAgaWYgKGlzUmVuZGVyZWRUYWJsZShtX2FuY2hvck5v
ZGUpIHx8IGVkaXRpbmdJZ25vcmVzQ29udGVudCgqbV9hbmNob3JOb2RlKSkKICAgICAgICAgcmV0
dXJuIChhdFN0YXJ0T2ZOb2RlKCkgfHwgYXRFbmRPZk5vZGUoKSkgJiYgIVBvc2l0aW9uOjpub2Rl
SXNVc2VyU2VsZWN0Tm9uZShtX2FuY2hvck5vZGUtPnBhcmVudE5vZGUoKSk7CiAKICAgICBpZiAo
IWlzPEhUTUxIdG1sRWxlbWVudD4oKm1fYW5jaG9yTm9kZSkgJiYgaXM8UmVuZGVyQmxvY2tGbG93
PigqcmVuZGVyZXIpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuY3BwCmluZGV4IDFkMGJiNjg4MTUxMGI0YzIxNDMwYWQyMWUyOTBiOTAzM2VmYWNlODkuLmQ5
ZTkxNDlhNmQ5ZGE4ZDQzOWFhMzU1YmE0ODE2Njc4MWZhMDI4NDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC0zMTIsNyArMzEyLDcgQEAgdm9p
ZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbnRTdHlsZUNoYW5nZShFZGl0aW5n
U3R5bGUqIHN0eWxlKQogICAgIH0KIAogICAgIC8vIEpvaW4gdXAgYW55IGFkamFjZW50IHRleHQg
bm9kZXMuCi0gICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkgewor
ICAgIGlmIChpczxUZXh0Pigqc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAgICAgICAgam9p
bkNoaWxkVGV4dE5vZGVzKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnBhcmVudE5vZGUoKSwgc3Rh
cnQsIGVuZCk7CiAgICAgICAgIHN0YXJ0ID0gc3RhcnRQb3NpdGlvbigpOwogICAgICAgICBlbmQg
PSBlbmRQb3NpdGlvbigpOwpAQCAtMzIxLDcgKzMyMSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OmFwcGx5UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSkKICAg
ICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoZW5kLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSAmJiBzdGFydC5kZXBy
ZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCkgIT0gZW5kLmRlcHJlY2F0ZWROb2RlKCktPnBhcmVu
dE5vZGUoKSkgeworICAgIGlmIChpczxUZXh0PigqZW5kLmRlcHJlY2F0ZWROb2RlKCkpICYmIHN0
YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnBhcmVudE5vZGUoKSAhPSBlbmQuZGVwcmVjYXRlZE5vZGUo
KS0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGpvaW5DaGlsZFRleHROb2RlcyhlbmQuZGVwcmVj
YXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpLCBzdGFydCwgZW5kKTsKICAgICAgICAgc3RhcnQgPSBz
dGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGVuZCA9IGVuZFBvc2l0aW9uKCk7CkBAIC0zNjcsNyAr
MzY3LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbnRTdHlsZUNo
YW5nZShFZGl0aW5nU3R5bGUqIHN0eWxlKQogICAgIGlmIChzdGFydE5vZGUgPT0gYmV5b25kRW5k
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc3RhcnROb2RlLT5pc1RleHROb2RlKCkgJiYg
c3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1heE9mZnNldCgqc3RhcnRO
b2RlKSkgeworICAgIGlmIChpczxUZXh0Pigqc3RhcnROb2RlKSAmJiBzdGFydC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KCpzdGFydE5vZGUpKSB7CiAgICAgICAg
IC8vIE1vdmUgb3V0IG9mIHRleHQgbm9kZSBpZiByYW5nZSBkb2VzIG5vdCBpbmNsdWRlIGl0cyBj
aGFyYWN0ZXJzLgogICAgICAgICBzdGFydE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpzdGFy
dE5vZGUpOwogICAgICAgICBpZiAoIXN0YXJ0Tm9kZSkKQEAgLTM5NCw3ICszOTQsNyBAQCB2b2lk
IEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdT
dHlsZSogc3R5bGUpCiAgICAgICAgICAgICBpZiAoIW5vZGVGdWxseVNlbGVjdGVkKG5vZGUsIHN0
YXJ0LCBlbmQpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZWxlbWVu
dCA9IGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKTsKLSAgICAgICAgfSBlbHNlIGlmIChub2Rl
LT5pc1RleHROb2RlKCkgJiYgbm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5wYXJlbnROb2RlKCkg
IT0gbGFzdFN0eWxlZE5vZGUpIHsKKyAgICAgICAgfSBlbHNlIGlmIChpczxUZXh0Pigqbm9kZSkg
JiYgbm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5wYXJlbnROb2RlKCkgIT0gbGFzdFN0eWxlZE5v
ZGUpIHsKICAgICAgICAgICAgIC8vIExhc3Qgc3R5bGVkIG5vZGUgd2FzIG5vdCBwYXJlbnQgbm9k
ZSBvZiB0aGlzIHRleHQgbm9kZSwgYnV0IHdlIHdpc2ggdG8gc3R5bGUgdGhpcwogICAgICAgICAg
ICAgLy8gdGV4dCBub2RlLiBUbyBtYWtlIHRoaXMgcG9zc2libGUsIGFkZCBhIHN0eWxlIHNwYW4g
dG8gc3Vycm91bmQgdGhpcyB0ZXh0IG5vZGUuCiAgICAgICAgICAgICBhdXRvIHNwYW4gPSBjcmVh
dGVTdHlsZVNwYW5FbGVtZW50KGRvY3VtZW50KCkpOwpAQCAtODAyLDcgKzgwMiw3IEBAIHZvaWQg
QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5nZShFZGl0aW5nU3R5
bGUqIHN0eWxlLCBQYXNzUmVmCiAgICAgICAgIGlmIChub2RlLT5oYXNDaGlsZE5vZGVzKCkpIHsK
ICAgICAgICAgICAgIGlmIChub2RlLT5jb250YWlucyhwYXN0RW5kTm9kZS5nZXQoKSkgfHwgY29u
dGFpbnNOb25FZGl0YWJsZVJlZ2lvbigqbm9kZSkgfHwgIW5vZGUtPnBhcmVudE5vZGUoKS0+aGFz
RWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
aWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlLmdldCgpKSkgeworICAgICAgICAgICAgaWYg
KGVkaXRpbmdJZ25vcmVzQ29udGVudCgqbm9kZSkpIHsKICAgICAgICAgICAgICAgICBuZXh0ID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm5vZGUpOwogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtODcwLDcgKzg3MCw3IEBAIHZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNvbmZsaWN0aW5nSW5saW5lU3R5bGVGcm9tUnVuKEVkaXRp
bmdTdHlsZSogc3R5bGUsCiAgICAgQVNTRVJUKHJ1blN0YXJ0ICYmIHJ1bkVuZCk7CiAgICAgUmVm
UHRyPE5vZGU+IG5leHQgPSBydW5TdGFydDsKICAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0g
bmV4dDsgbm9kZSAmJiBub2RlLT5pbkRvY3VtZW50KCkgJiYgbm9kZSAhPSBwYXN0RW5kTm9kZTsg
bm9kZSA9IG5leHQpIHsKLSAgICAgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlLmdl
dCgpKSkgeworICAgICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KCpub2RlKSkgewogICAg
ICAgICAgICAgQVNTRVJUKCFub2RlLT5jb250YWlucyhwYXN0RW5kTm9kZS5nZXQoKSkpOwogICAg
ICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKCpub2Rl
KTsKICAgICAgICAgfSBlbHNlCkBAIC0xMDkyLDcgKzEwOTIsNyBAQCB2b2lkIEFwcGx5U3R5bGVD
b21tYW5kOjpwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZShFZGl0aW5nU3R5bGUqIHN0eWxl
LCBOb2RlKgogICAgIH0KIH0KIAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5l
U3R5bGUoRWRpdGluZ1N0eWxlKiBzdHlsZSwgY29uc3QgUG9zaXRpb24gJnN0YXJ0LCBjb25zdCBQ
b3NpdGlvbiAmZW5kKQordm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGUo
RWRpdGluZ1N0eWxlKiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlv
biYgZW5kKQogewogICAgIEFTU0VSVChzdGFydC5pc05vdE51bGwoKSk7CiAgICAgQVNTRVJUKGVu
ZC5pc05vdE51bGwoKSk7CkBAIC0xMTA1LDE1ICsxMTA1LDE0IEBAIHZvaWQgQXBwbHlTdHlsZUNv
bW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUsIGNvbnN0IFBvc2l0
aW9uICZzCiAgICAgLy8gSWYgdGhlIHB1c2hEb3duU3RhcnQgaXMgYXQgdGhlIGVuZCBvZiBhIHRl
eHQgbm9kZSwgdGhlbiB0aGlzIG5vZGUgaXMgbm90IGZ1bGx5IHNlbGVjdGVkLgogICAgIC8vIE1v
dmUgaXQgdG8gdGhlIG5leHQgZGVlcCBxdWl2YWxlbnQgcG9zaXRpb24gdG8gYXZvaWQgcmVtb3Zp
bmcgdGhlIHN0eWxlIGZyb20gdGhpcyBub2RlLgogICAgIC8vIGUuZy4gaWYgcHVzaERvd25TdGFy
dCB3YXMgYXQgUG9zaXRpb24oImhlbGxvIiwgNSkgaW4gPGI+aGVsbG88ZGl2PndvcmxkPC9kaXY+
PC9iPiwgd2Ugd2FudCBQb3NpdGlvbigid29ybGQiLCAwKSBpbnN0ZWFkLgotICAgIE5vZGUqIHB1
c2hEb3duU3RhcnRDb250YWluZXIgPSBwdXNoRG93blN0YXJ0LmNvbnRhaW5lck5vZGUoKTsKLSAg
ICBpZiAocHVzaERvd25TdGFydENvbnRhaW5lciAmJiBwdXNoRG93blN0YXJ0Q29udGFpbmVyLT5p
c1RleHROb2RlKCkKLSAgICAgICAgJiYgcHVzaERvd25TdGFydC5jb21wdXRlT2Zmc2V0SW5Db250
YWluZXJOb2RlKCkgPT0gcHVzaERvd25TdGFydENvbnRhaW5lci0+bWF4Q2hhcmFjdGVyT2Zmc2V0
KCkpCisgICAgYXV0byogcHVzaERvd25TdGFydENvbnRhaW5lciA9IHB1c2hEb3duU3RhcnQuY29u
dGFpbmVyTm9kZSgpOworICAgIGlmIChpczxUZXh0PihwdXNoRG93blN0YXJ0Q29udGFpbmVyKSAm
JiBwdXNoRG93blN0YXJ0LmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA9PSBwdXNoRG93
blN0YXJ0Q29udGFpbmVyLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkKICAgICAgICAgcHVzaERvd25T
dGFydCA9IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKHB1c2hEb3duU3RhcnQpOwogICAg
IC8vIElmIHB1c2hEb3duRW5kIGlzIGF0IHRoZSBzdGFydCBvZiBhIHRleHQgbm9kZSwgdGhlbiB0
aGlzIG5vZGUgaXMgbm90IGZ1bGx5IHNlbGVjdGVkLgogICAgIC8vIE1vdmUgaXQgdG8gdGhlIHBy
ZXZpb3VzIGRlZXAgZXF1aXZhbGVudCBwb3NpdGlvbiB0byBhdm9pZCByZW1vdmluZyB0aGUgc3R5
bGUgZnJvbSB0aGlzIG5vZGUuCiAgICAgUG9zaXRpb24gcHVzaERvd25FbmQgPSBlbmQudXBzdHJl
YW0oKTsKLSAgICBOb2RlKiBwdXNoRG93bkVuZENvbnRhaW5lciA9IHB1c2hEb3duRW5kLmNvbnRh
aW5lck5vZGUoKTsKLSAgICBpZiAocHVzaERvd25FbmRDb250YWluZXIgJiYgcHVzaERvd25FbmRD
b250YWluZXItPmlzVGV4dE5vZGUoKSAmJiAhcHVzaERvd25FbmQuY29tcHV0ZU9mZnNldEluQ29u
dGFpbmVyTm9kZSgpKQorICAgIGF1dG8qIHB1c2hEb3duRW5kQ29udGFpbmVyID0gcHVzaERvd25F
bmQuY29udGFpbmVyTm9kZSgpOworICAgIGlmIChpczxUZXh0PihwdXNoRG93bkVuZENvbnRhaW5l
cikgJiYgIXB1c2hEb3duRW5kLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkKICAgICAg
ICAgcHVzaERvd25FbmQgPSBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUocHVzaERv
d25FbmQpOwogCiAgICAgcHVzaERvd25JbmxpbmVTdHlsZUFyb3VuZE5vZGUoc3R5bGUsIHB1c2hE
b3duU3RhcnQuZGVwcmVjYXRlZE5vZGUoKSk7CkBAIC0xMTMwLDcgKzExMjksNyBAQCB2b2lkIEFw
cGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqIHN0eWxlLCBj
b25zdCBQb3NpdGlvbiAmcwogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gc3RhcnQuZGVwcmVjYXRl
ZE5vZGUoKTsKICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dDsK
LSAgICAgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlLmdldCgpKSkgeworICAgICAg
ICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KCpub2RlKSkgewogICAgICAgICAgICAgQVNTRVJU
KG5vZGUgPT0gZW5kLmRlcHJlY2F0ZWROb2RlKCkgfHwgIW5vZGUtPmNvbnRhaW5zKGVuZC5kZXBy
ZWNhdGVkTm9kZSgpKSk7CiAgICAgICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNr
aXBwaW5nQ2hpbGRyZW4oKm5vZGUpOwogICAgICAgICB9IGVsc2UKQEAgLTExNzcsMTAgKzExNzYs
MTAgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGUoRWRpdGluZ1N0
eWxlKiBzdHlsZSwgY29uc3QgUG9zaXRpb24gJnMKICAgICB1cGRhdGVTdGFydEVuZChzLCBlKTsK
IH0KIAotYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6bm9kZUZ1bGx5U2VsZWN0ZWQoTm9kZSAqbm9k
ZSwgY29uc3QgUG9zaXRpb24gJnN0YXJ0LCBjb25zdCBQb3NpdGlvbiAmZW5kKSBjb25zdAorYm9v
bCBBcHBseVN0eWxlQ29tbWFuZDo6bm9kZUZ1bGx5U2VsZWN0ZWQoTm9kZSogbm9kZSwgY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKSBjb25zdAogewogICAgIEFTU0VS
VChub2RlKTsKLSAgICBBU1NFUlQobm9kZS0+aXNFbGVtZW50Tm9kZSgpKTsKKyAgICBBU1NFUlQo
aXM8RWxlbWVudD4obm9kZSkpOwogCiAgICAgLy8gVGhlIHRyZWUgbWF5IGhhdmUgY2hhbmdlZCBh
bmQgUG9zaXRpb246OnVwc3RyZWFtKCkgcmVsaWVzIG9uIGFuIHVwLXRvLWRhdGUgbGF5b3V0Lgog
ICAgIG5vZGUtPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7CkBAIC0xMTg5LDEwICsxMTg4LDEwIEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6Om5vZGVG
dWxseVNlbGVjdGVkKE5vZGUgKm5vZGUsIGNvbnN0IFBvc2l0aW9uICZzdGFydCwgY29uCiAgICAg
ICAgICYmIGNvbXBhcmVQb3NpdGlvbnMobGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShub2RlKS51
cHN0cmVhbSgpLCBlbmQpIDw9IDA7CiB9CiAKLWJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6Om5vZGVG
dWxseVVuc2VsZWN0ZWQoTm9kZSAqbm9kZSwgY29uc3QgUG9zaXRpb24gJnN0YXJ0LCBjb25zdCBQ
b3NpdGlvbiAmZW5kKSBjb25zdAorYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6bm9kZUZ1bGx5VW5z
ZWxlY3RlZChOb2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9u
JiBlbmQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG5vZGUpOwotICAgIEFTU0VSVChub2RlLT5pc0Vs
ZW1lbnROb2RlKCkpOworICAgIEFTU0VSVChpczxFbGVtZW50Pihub2RlKSk7CiAKICAgICBib29s
IGlzRnVsbHlCZWZvcmVTdGFydCA9IGNvbXBhcmVQb3NpdGlvbnMobGFzdFBvc2l0aW9uSW5PckFm
dGVyTm9kZShub2RlKS51cHN0cmVhbSgpLCBzdGFydCkgPCAwOwogICAgIGJvb2wgaXNGdWxseUFm
dGVyRW5kID0gY29tcGFyZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9k
ZSksIGVuZCkgPiAwOwpAQCAtMTIwMiw3ICsxMjAxLDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFu
ZDo6bm9kZUZ1bGx5VW5zZWxlY3RlZChOb2RlICpub2RlLCBjb25zdCBQb3NpdGlvbiAmc3RhcnQs
IGMKIAogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRTdGFydChjb25zdCBQb3Np
dGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgQVNTRVJUKHN0YXJ0LmNv
bnRhaW5lck5vZGUoKS0+aXNUZXh0Tm9kZSgpKTsKKyAgICBBU1NFUlQoaXM8VGV4dD4oc3RhcnQu
Y29udGFpbmVyTm9kZSgpKSk7CiAKICAgICBQb3NpdGlvbiBuZXdFbmQ7CiAgICAgaWYgKGVuZC5h
bmNob3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciAmJiBzdGFy
dC5jb250YWluZXJOb2RlKCkgPT0gZW5kLmNvbnRhaW5lck5vZGUoKSkKQEAgLTEyMzMsNyArMTIz
Miw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0RW5kKGNvbnN0IFBvc2l0
aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuCiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6
OnNwbGl0VGV4dEVsZW1lbnRBdFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9z
aXRpb24mIGVuZCkKIHsKLSAgICBBU1NFUlQoc3RhcnQuY29udGFpbmVyTm9kZSgpLT5pc1RleHRO
b2RlKCkpOworICAgIEFTU0VSVChpczxUZXh0PihzdGFydC5jb250YWluZXJOb2RlKCkpKTsKIAog
ICAgIFBvc2l0aW9uIG5ld0VuZDsKICAgICBpZiAoc3RhcnQuY29udGFpbmVyTm9kZSgpID09IGVu
ZC5jb250YWluZXJOb2RlKCkpCkBAIC0xMjQ3LDcgKzEyNDYsNyBAQCB2b2lkIEFwcGx5U3R5bGVD
b21tYW5kOjpzcGxpdFRleHRFbGVtZW50QXRTdGFydChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0IFBvcwogCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50QXRFbmQo
Y29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewotICAgIEFTU0VS
VChlbmQuY29udGFpbmVyTm9kZSgpLT5pc1RleHROb2RlKCkpOworICAgIEFTU0VSVChpczxUZXh0
PihlbmQuY29udGFpbmVyTm9kZSgpKSk7CiAKICAgICBib29sIHNob3VsZFVwZGF0ZVN0YXJ0ID0g
c3RhcnQuY29udGFpbmVyTm9kZSgpID09IGVuZC5jb250YWluZXJOb2RlKCk7CiAgICAgc3BsaXRU
ZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KGVuZC5jb250YWluZXJUZXh0KCksIGVuZC5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSk7CkBAIC0xMjY4LDEzICsxMjY3LDEzIEBAIGJvb2wgQXBwbHlTdHls
ZUNvbW1hbmQ6OnNob3VsZFNwbGl0VGV4dEVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgRWRpdGlu
Z1N0eWxlKiBzCiAgICAgaWYgKCFpczxIVE1MRWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHJldHVybiBzaG91bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVt
ZW50KHN0eWxlLCBkb3duY2FzdDxIVE1MRWxlbWVudD4oZWxlbWVudCkpOworICAgIHJldHVybiBz
aG91bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCAmZG93bmNhc3Q8SFRNTEVs
ZW1lbnQ+KCplbGVtZW50KSk7CiB9CiAKIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OmlzVmFsaWRD
YXJldFBvc2l0aW9uSW5UZXh0Tm9kZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAg
Tm9kZSogbm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKLSAgICBpZiAocG9zaXRpb24u
YW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgfHwgIW5v
ZGUtPmlzVGV4dE5vZGUoKSkKKyAgICBpZiAocG9zaXRpb24uYW5jaG9yVHlwZSgpICE9IFBvc2l0
aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgfHwgIWlzPFRleHQ+KG5vZGUpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaW50IG9mZnNldEluVGV4dCA9IHBvc2l0aW9uLm9mZnNldElu
Q29udGFpbmVyTm9kZSgpOwogICAgIHJldHVybiBvZmZzZXRJblRleHQgPiBjYXJldE1pbk9mZnNl
dCgqbm9kZSkgJiYgb2Zmc2V0SW5UZXh0IDwgY2FyZXRNYXhPZmZzZXQoKm5vZGUpOwpAQCAtMTM2
OSwxMyArMTM2OCwxNCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzdXJyb3VuZE5vZGVSYW5n
ZVdpdGhFbGVtZW50KFBhc3NSZWZQdHI8Tm9kZT4gcGFzc2VkU3RhcgogCiAgICAgUmVmUHRyPE5v
ZGU+IG5leHRTaWJsaW5nID0gZWxlbWVudC0+bmV4dFNpYmxpbmcoKTsKICAgICBSZWZQdHI8Tm9k
ZT4gcHJldmlvdXNTaWJsaW5nID0gZWxlbWVudC0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgaWYg
KGlzPEVsZW1lbnQ+KG5leHRTaWJsaW5nLmdldCgpKSAmJiBuZXh0U2libGluZy0+aGFzRWRpdGFi
bGVTdHlsZSgpICYmIGFyZUlkZW50aWNhbEVsZW1lbnRzKCplbGVtZW50LCAqbmV4dFNpYmxpbmcp
KQorCisgICAgaWYgKG5leHRTaWJsaW5nICYmIG5leHRTaWJsaW5nLT5oYXNFZGl0YWJsZVN0eWxl
KCkgJiYgYXJlSWRlbnRpY2FsRWxlbWVudHMoKmVsZW1lbnQsICpuZXh0U2libGluZykpCiAgICAg
ICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMoZWxlbWVudC5nZXQoKSwgZG93bmNhc3Q8RWxlbWVu
dD4obmV4dFNpYmxpbmcuZ2V0KCkpKTsKIAogICAgIGlmIChpczxFbGVtZW50PihwcmV2aW91c1Np
YmxpbmcuZ2V0KCkpICYmIHByZXZpb3VzU2libGluZy0+aGFzRWRpdGFibGVTdHlsZSgpKSB7Ci0g
ICAgICAgIE5vZGUqIG1lcmdlZEVsZW1lbnQgPSBwcmV2aW91c1NpYmxpbmctPm5leHRTaWJsaW5n
KCk7CisgICAgICAgIGF1dG8qIG1lcmdlZEVsZW1lbnQgPSBwcmV2aW91c1NpYmxpbmctPm5leHRT
aWJsaW5nKCk7CiAgICAgICAgIEFTU0VSVChtZXJnZWRFbGVtZW50KTsKLSAgICAgICAgaWYgKGlz
PEVsZW1lbnQ+KCptZXJnZWRFbGVtZW50KSAmJiBtZXJnZWRFbGVtZW50LT5oYXNFZGl0YWJsZVN0
eWxlKCkgJiYgYXJlSWRlbnRpY2FsRWxlbWVudHMoKnByZXZpb3VzU2libGluZywgKm1lcmdlZEVs
ZW1lbnQpKQorICAgICAgICBpZiAobWVyZ2VkRWxlbWVudC0+aGFzRWRpdGFibGVTdHlsZSgpICYm
IGFyZUlkZW50aWNhbEVsZW1lbnRzKCpwcmV2aW91c1NpYmxpbmcsICptZXJnZWRFbGVtZW50KSkK
ICAgICAgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMoZG93bmNhc3Q8RWxlbWVudD4ocHJl
dmlvdXNTaWJsaW5nLmdldCgpKSwgZG93bmNhc3Q8RWxlbWVudD4obWVyZ2VkRWxlbWVudCkpOwog
ICAgIH0KIApAQCAtMTQyMSw3ICsxNDIxLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YWRk
SW5saW5lU3R5bGVJZk5lZWRlZChFZGl0aW5nU3R5bGUqIHN0eWxlLCBQYXNzUmVmUHRyPE4KIFBv
c2l0aW9uIEFwcGx5U3R5bGVDb21tYW5kOjpwb3NpdGlvblRvQ29tcHV0ZUlubGluZVN0eWxlQ2hh
bmdlKFBhc3NSZWZQdHI8Tm9kZT4gc3RhcnROb2RlLCBSZWZQdHI8Tm9kZT4mIGR1bW15RWxlbWVu
dCkKIHsKICAgICAvLyBJdCdzIG9rYXkgdG8gb2J0YWluIHRoZSBzdHlsZSBhdCB0aGUgc3RhcnRO
b2RlIGJlY2F1c2Ugd2UndmUgcmVtb3ZlZCBhbGwgcmVsZXZhbnQgc3R5bGVzIGZyb20gdGhlIGN1
cnJlbnQgcnVuLgotICAgIGlmICghc3RhcnROb2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICBp
ZiAoIWlzPEVsZW1lbnQ+KCpzdGFydE5vZGUpKSB7CiAgICAgICAgIGR1bW15RWxlbWVudCA9IGNy
ZWF0ZVN0eWxlU3BhbkVsZW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgICAgIGluc2VydE5vZGVBdChk
dW1teUVsZW1lbnQsIHBvc2l0aW9uQmVmb3JlTm9kZShzdGFydE5vZGUuZ2V0KCkpKTsKICAgICAg
ICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShkdW1teUVsZW1lbnQuZ2V0KCkp
OwpAQCAtMTQ0MCwxNiArMTQ0MCwxOSBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlu
bGluZVN0eWxlQ2hhbmdlKFBhc3NSZWZQdHI8Tm9kZT4gcGFzc2VkU3RhcnQsIFBhcwogICAgIC8v
IEZpbmQgYXBwcm9wcmlhdGUgZm9udCBhbmQgc3BhbiBlbGVtZW50cyB0b3AtZG93bi4KICAgICBI
VE1MRm9udEVsZW1lbnQqIGZvbnRDb250YWluZXIgPSBudWxscHRyOwogICAgIEhUTUxFbGVtZW50
KiBzdHlsZUNvbnRhaW5lciA9IG51bGxwdHI7Ci0gICAgZm9yIChOb2RlKiBjb250YWluZXIgPSBz
dGFydE5vZGUuZ2V0KCk7IGNvbnRhaW5lciAmJiBzdGFydE5vZGUgPT0gZW5kTm9kZTsgY29udGFp
bmVyID0gY29udGFpbmVyLT5maXJzdENoaWxkKCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxGb250
RWxlbWVudD4oKmNvbnRhaW5lcikpCi0gICAgICAgICAgICBmb250Q29udGFpbmVyID0gZG93bmNh
c3Q8SFRNTEZvbnRFbGVtZW50Pihjb250YWluZXIpOwotICAgICAgICBib29sIHN0eWxlQ29udGFp
bmVySXNOb3RTcGFuID0gIWlzPEhUTUxTcGFuRWxlbWVudD4oc3R5bGVDb250YWluZXIpOwotICAg
ICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KCpjb250YWluZXIpICYmIChpczxIVE1MU3BhbkVsZW1l
bnQ+KCpjb250YWluZXIpIHx8IChzdHlsZUNvbnRhaW5lcklzTm90U3BhbiAmJiBjb250YWluZXIt
Pmhhc0NoaWxkTm9kZXMoKSkpKQotICAgICAgICAgICAgc3R5bGVDb250YWluZXIgPSBkb3duY2Fz
dDxIVE1MRWxlbWVudD4oY29udGFpbmVyKTsKLSAgICAgICAgaWYgKCFjb250YWluZXItPmZpcnN0
Q2hpbGQoKSkKKyAgICB3aGlsZSAoc3RhcnROb2RlICYmIHN0YXJ0Tm9kZSA9PSBlbmROb2RlKSB7
CisgICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4oKnN0YXJ0Tm9kZSkpIHsKKyAgICAgICAgICAg
IGF1dG8mIGNvbnRhaW5lciA9IGRvd25jYXN0PEhUTUxFbGVtZW50Pigqc3RhcnROb2RlKTsKKyAg
ICAgICAgICAgIGlmIChpczxIVE1MRm9udEVsZW1lbnQ+KGNvbnRhaW5lcikpCisgICAgICAgICAg
ICAgICAgZm9udENvbnRhaW5lciA9ICZkb3duY2FzdDxIVE1MRm9udEVsZW1lbnQ+KGNvbnRhaW5l
cik7CisgICAgICAgICAgICBpZiAoaXM8SFRNTFNwYW5FbGVtZW50Pihjb250YWluZXIpIHx8ICgh
aXM8SFRNTFNwYW5FbGVtZW50PihzdHlsZUNvbnRhaW5lcikgJiYgY29udGFpbmVyLmhhc0NoaWxk
Tm9kZXMoKSkpCisgICAgICAgICAgICAgICAgc3R5bGVDb250YWluZXIgPSAmY29udGFpbmVyOwor
ICAgICAgICB9CisgICAgICAgIGF1dG8qIHN0YXJ0Tm9kZUZpcnN0Q2hpbGQgPSBzdGFydE5vZGUt
PmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgaWYgKCFzdGFydE5vZGVGaXJzdENoaWxkKQogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIHN0YXJ0Tm9kZSA9IGNvbnRhaW5lci0+Zmlyc3RDaGlsZCgp
OwotICAgICAgICBlbmROb2RlID0gY29udGFpbmVyLT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgZW5k
Tm9kZSA9IHN0YXJ0Tm9kZS0+bGFzdENoaWxkKCk7CisgICAgICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0
Tm9kZUZpcnN0Q2hpbGQ7CiAgICAgfQogCiAgICAgLy8gRm9udCB0YWdzIG5lZWQgdG8gZ28gb3V0
c2lkZSBvZiBDU1Mgc28gdGhhdCBDU1MgZm9udCBzaXplcyBvdmVycmlkZSBsZWFnY3kgZm9udCBz
aXplcy4KQEAgLTE0ODIsOSArMTQ4NSw5IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5
SW5saW5lU3R5bGVDaGFuZ2UoUGFzc1JlZlB0cjxOb2RlPiBwYXNzZWRTdGFydCwgUGFzCiAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKHN0eWxlQ29u
dGFpbmVyLCBzdHlsZUF0dHIsIHN0eWxlVG9NZXJnZS0+YXNUZXh0KCkpOwogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHN0eWxlRWxlbWVudCA9IGNyZWF0ZVN0
eWxlU3BhbkVsZW1lbnQoZG9jdW1lbnQoKSk7CisgICAgICAgICAgICBhdXRvIHN0eWxlRWxlbWVu
dCA9IGNyZWF0ZVN0eWxlU3BhbkVsZW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICBzdHls
ZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIHN0eWxlVG9NZXJnZS0+YXNUZXh0KCkp
OwotICAgICAgICAgICAgc3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChzdGFydE5vZGUsIGVu
ZE5vZGUsIHN0eWxlRWxlbWVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgc3Vycm91bmROb2Rl
UmFuZ2VXaXRoRWxlbWVudChzdGFydE5vZGUsIGVuZE5vZGUsIFdURk1vdmUoc3R5bGVFbGVtZW50
KSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5jcHAKaW5kZXggNjk0Yjc2YTM3ZDZiYzk0ZjkyMjNjYmJiY2IxZmJl
MDAxZmYxMDU2NS4uZDIzMTJkMWRiZjE2YmZiNDliNGFhMzU2MjRhMjQ5OTdmODM1OTFiMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAg
LTQ4Niw3ICs0ODYsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQXQo
UGFzc1JlZlB0cjxOb2RlPiBpbnNlcnRDaGlsZCwgY29uc3QgUG9zaQogICAgIE5vZGUqIHJlZkNo
aWxkID0gcC5kZXByZWNhdGVkTm9kZSgpOwogICAgIGludCBvZmZzZXQgPSBwLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCk7CiAgICAgCi0gICAgaWYgKGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmco
cmVmQ2hpbGQpKSB7CisgICAgaWYgKGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoKnJlZkNoaWxk
KSkgewogICAgICAgICBOb2RlKiBjaGlsZCA9IHJlZkNoaWxkLT5maXJzdENoaWxkKCk7CiAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBjaGlsZCAmJiBpIDwgb2Zmc2V0OyBpKyspCiAgICAgICAgICAg
ICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwpAQCAtNTA5LDcgKzUwOSw3IEBAIHZvaWQg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVBdChQYXNzUmVmUHRyPE5vZGU+IGluc2Vy
dENoaWxkLCBjb25zdCBQb3NpCiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGVuZE5v
ZGUoUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVu
dCkKIHsKLSAgICBBU1NFUlQoY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhwYXJlbnQuZ2V0KCkp
KTsKKyAgICBBU1NFUlQoY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZygqcGFyZW50KSk7CiAgICAg
QVNTRVJUKG5vZGUpOwogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEFwcGVuZE5vZGVDb21t
YW5kOjpjcmVhdGUocGFyZW50LCAqbm9kZSwgZWRpdGluZ0FjdGlvbigpKSk7CiB9CkBAIC0xNTAz
LDkgKzE1MDMsOSBAQCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1wdHlM
aXN0SXRlbSgpCiAKICAgICBSZWZQdHI8Tm9kZT4gcHJldmlvdXNMaXN0Tm9kZSA9IGVtcHR5TGlz
dEl0ZW0tPmlzRWxlbWVudE5vZGUoKSA/IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGlu
ZygqZW1wdHlMaXN0SXRlbSk6IGVtcHR5TGlzdEl0ZW0tPnByZXZpb3VzU2libGluZygpOwogICAg
IFJlZlB0cjxOb2RlPiBuZXh0TGlzdE5vZGUgPSBlbXB0eUxpc3RJdGVtLT5pc0VsZW1lbnROb2Rl
KCkgPyBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZygqZW1wdHlMaXN0SXRlbSk6IGVtcHR5
TGlzdEl0ZW0tPm5leHRTaWJsaW5nKCk7Ci0gICAgaWYgKGlzTGlzdEl0ZW0obmV4dExpc3ROb2Rl
LmdldCgpKSB8fCBpc0xpc3RFbGVtZW50KG5leHRMaXN0Tm9kZS5nZXQoKSkpIHsKKyAgICBpZiAo
aXNMaXN0SXRlbShuZXh0TGlzdE5vZGUuZ2V0KCkpIHx8IGlzTGlzdEhUTUxFbGVtZW50KG5leHRM
aXN0Tm9kZS5nZXQoKSkpIHsKICAgICAgICAgLy8gSWYgZW1wdHlMaXN0SXRlbSBmb2xsb3dzIGFu
b3RoZXIgbGlzdCBpdGVtIG9yIG5lc3RlZCBsaXN0LCBzcGxpdCB0aGUgbGlzdCBub2RlLgotICAg
ICAgICBpZiAoaXNMaXN0SXRlbShwcmV2aW91c0xpc3ROb2RlLmdldCgpKSB8fCBpc0xpc3RFbGVt
ZW50KHByZXZpb3VzTGlzdE5vZGUuZ2V0KCkpKQorICAgICAgICBpZiAoaXNMaXN0SXRlbShwcmV2
aW91c0xpc3ROb2RlLmdldCgpKSB8fCBpc0xpc3RIVE1MRWxlbWVudChwcmV2aW91c0xpc3ROb2Rl
LmdldCgpKSkKICAgICAgICAgICAgIHNwbGl0RWxlbWVudChkb3duY2FzdDxFbGVtZW50PihsaXN0
Tm9kZS5nZXQoKSksIGVtcHR5TGlzdEl0ZW0pOwogCiAgICAgICAgIC8vIElmIGVtcHR5TGlzdEl0
ZW0gaXMgZm9sbG93ZWQgYnkgb3RoZXIgbGlzdCBpdGVtIG9yIG5lc3RlZCBsaXN0LCB0aGVuIGlu
c2VydCBuZXdCbG9jayBiZWZvcmUgdGhlIGxpc3Qgbm9kZS4KQEAgLTE1MTcsNyArMTUxNyw3IEBA
IGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0eUxpc3RJdGVtKCkKICAg
ICAgICAgLy8gV2hlbiBlbXB0eUxpc3RJdGVtIGRvZXMgbm90IGZvbGxvdyBhbnkgbGlzdCBpdGVt
IG9yIG5lc3RlZCBsaXN0LCBpbnNlcnQgbmV3QmxvY2sgYWZ0ZXIgdGhlIGVuY2xvc2luZyBsaXN0
IG5vZGUuCiAgICAgICAgIC8vIFJlbW92ZSB0aGUgZW5jbG9zaW5nIG5vZGUgaWYgZW1wdHlMaXN0
SXRlbSBpcyB0aGUgb25seSBjaGlsZDsgb3RoZXJ3aXNlIGp1c3QgcmVtb3ZlIGVtcHR5TGlzdEl0
ZW0uCiAgICAgICAgIGluc2VydE5vZGVBZnRlcihuZXdCbG9jaywgbGlzdE5vZGUpOwotICAgICAg
ICByZW1vdmVOb2RlKGlzTGlzdEl0ZW0ocHJldmlvdXNMaXN0Tm9kZS5nZXQoKSkgfHwgaXNMaXN0
RWxlbWVudChwcmV2aW91c0xpc3ROb2RlLmdldCgpKSA/IGVtcHR5TGlzdEl0ZW0uZ2V0KCkgOiBs
aXN0Tm9kZS5nZXQoKSk7CisgICAgICAgIHJlbW92ZU5vZGUoaXNMaXN0SXRlbShwcmV2aW91c0xp
c3ROb2RlLmdldCgpKSB8fCBpc0xpc3RIVE1MRWxlbWVudChwcmV2aW91c0xpc3ROb2RlLmdldCgp
KSA/IGVtcHR5TGlzdEl0ZW0uZ2V0KCkgOiBsaXN0Tm9kZS5nZXQoKSk7CiAgICAgfQogCiAgICAg
YXBwZW5kQmxvY2tQbGFjZWhvbGRlcihuZXdCbG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCBmNmJlYTYyY2ZjYzFjNWYx
NzRjZjkzYzM3YTYwNzQ1NjhlYjJlYTUxLi5mODM1MTMwNmU5MTEyNDllNzQ5MTIxY2QxZDZjZWRl
NTY2NzcyNjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHAKQEAgLTQ1Nyw3ICs0NTcsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUoKQogICAgIG1ha2VTdHlsaW5nRWxlbWVudHNEaXJl
Y3RDaGlsZHJlbk9mRWRpdGFibGVSb290VG9QcmV2ZW50U3R5bGVMb3NzKCk7CiAKICAgICAvLyBO
ZXZlciByZW1vdmUgdGhlIHN0YXJ0IGJsb2NrIHVubGVzcyBpdCdzIGEgdGFibGUsIGluIHdoaWNo
IGNhc2Ugd2Ugd29uJ3QgbWVyZ2UgY29udGVudCBpbi4KLSAgICBpZiAoc3RhcnROb2RlID09IG1f
c3RhcnRCbG9jayAmJiAhc3RhcnRPZmZzZXQgJiYgY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhz
dGFydE5vZGUpICYmICFpczxIVE1MVGFibGVFbGVtZW50Pigqc3RhcnROb2RlKSkgeworICAgIGlm
IChzdGFydE5vZGUgPT0gbV9zdGFydEJsb2NrICYmICFzdGFydE9mZnNldCAmJiBjYW5IYXZlQ2hp
bGRyZW5Gb3JFZGl0aW5nKCpzdGFydE5vZGUpICYmICFpczxIVE1MVGFibGVFbGVtZW50Pigqc3Rh
cnROb2RlKSkgewogICAgICAgICBzdGFydE9mZnNldCA9IDA7CiAgICAgICAgIHN0YXJ0Tm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQoKnN0YXJ0Tm9kZSk7CiAgICAgICAgIGlmICghc3RhcnROb2Rl
KQpAQCAtNTM4LDcgKzUzOCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxl
R2VuZXJhbERlbGV0ZSgpCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX2Rvd25z
dHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSAhPSBzdGFydE5vZGUgJiYgIW1fdXBzdHJlYW1TdGFy
dC5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihtX2Rvd25zdHJlYW1FbmQuZGVwcmVj
YXRlZE5vZGUoKSkgJiYgbV9kb3duc3RyZWFtRW5kLmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgp
ICYmIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWlu
T2Zmc2V0KCptX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSkpIHsKLSAgICAgICAgICAg
IGlmIChtX2Rvd25zdHJlYW1FbmQuYXRMYXN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmICFj
YW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgp
KSkgeworICAgICAgICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5hdExhc3RFZGl0aW5nUG9zaXRp
b25Gb3JOb2RlKCkgJiYgIWNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoKm1fZG93bnN0cmVhbUVu
ZC5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBub2RlIGl0c2Vs
ZiBpcyBmdWxseSBzZWxlY3RlZCwgbm90IGp1c3QgaXRzIGNvbnRlbnRzLiAgRGVsZXRlIGl0Lgog
ICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2Rl
KCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9y
bWF0QmxvY2tDb21tYW5kLmNwcAppbmRleCA4NDQxM2E4YWQ1MTc2NzY1NDM1NDc2MjkzNGExYzMx
NDk2YWYxYjUzLi4yYzc0Y2RhMGEyZTY1MWRmOWI5MGYxNmY1MzAxMzRjZmViNzZjYTg0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCkBAIC0yNCwx
NSArMjQsMTYgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkZvcm1hdEJsb2NrQ29tbWFuZC5oIgorCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNl
aG9sZGVyLmgiCi0jaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVk
ZSAiVmlzaWJsZVVuaXRzLmgiCisjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEsNiArNDIs
NyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBzdGF0aWMgTm9kZSogZW5jbG9zaW5n
QmxvY2tUb1NwbGl0VHJlZVRvKE5vZGUqIHN0YXJ0Tm9kZSk7CiBzdGF0aWMgYm9vbCBpc0VsZW1l
bnRGb3JGb3JtYXRCbG9jayhjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKTsKKwogc3RhdGlj
IGlubGluZSBib29sIGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKE5vZGUqIG5vZGUpCiB7CiAgICAg
cmV0dXJuIGlzPEVsZW1lbnQ+KCpub2RlKSAmJiBpc0VsZW1lbnRGb3JGb3JtYXRCbG9jayhkb3du
Y2FzdDxFbGVtZW50Pigqbm9kZSkudGFnUU5hbWUoKSk7CkBAIC0xNTYsNyArMTU4LDcgQEAgTm9k
ZSogZW5jbG9zaW5nQmxvY2tUb1NwbGl0VHJlZVRvKE5vZGUqIHN0YXJ0Tm9kZSkKICAgICAgICAg
ICAgIHJldHVybiBuOwogICAgICAgICBpZiAoaXNCbG9jayhuKSkKICAgICAgICAgICAgIGxhc3RC
bG9jayA9IG47Ci0gICAgICAgIGlmIChpc0xpc3RFbGVtZW50KG4pKQorICAgICAgICBpZiAoaXNM
aXN0SFRNTEVsZW1lbnQobikpCiAgICAgICAgICAgICByZXR1cm4gbi0+cGFyZW50Tm9kZSgpLT5o
YXNFZGl0YWJsZVN0eWxlKCkgPyBuLT5wYXJlbnROb2RlKCkgOiBuOwogICAgIH0KICAgICByZXR1
cm4gbGFzdEJsb2NrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKaW5kZXggMzc0YWI5ZTc2NDNjZDc0ZGZk
MGE2MjMyYzllYTI1MTA3YTcyMzBiYi4uOWRmOGM5ZTNlMGRlOGNmZGJmOTAwZDYwY2U1MjA2NzE0
NDVlMTM0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3JDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCkBAIC0zMTksNyArMzE5LDcgQEAgdm9pZCBJ
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KCkKIAogICAgIC8vIElmIHRo
ZSByZXR1cm5lZCBwb3NpdGlvbiBsaWVzIGVpdGhlciBhdCB0aGUgZW5kIG9yIGF0IHRoZSBzdGFy
dCBvZiBhbiBlbGVtZW50IHRoYXQgaXMgaWdub3JlZCBieSBlZGl0aW5nCiAgICAgLy8gd2Ugc2hv
dWxkIG1vdmUgdG8gaXRzIHVwc3RyZWFtIG9yIGRvd25zdHJlYW0gcG9zaXRpb24uCi0gICAgaWYg
KGVkaXRpbmdJZ25vcmVzQ29udGVudChpbnNlcnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgp
KSkgeworICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKmluc2VydGlvblBvc2l0aW9uLmRl
cHJlY2F0ZWROb2RlKCkpKSB7CiAgICAgICAgIGlmIChpbnNlcnRpb25Qb3NpdGlvbi5hdExhc3RF
ZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkpCiAgICAgICAgICAgICBpbnNlcnRpb25Qb3NpdGlvbiA9
IGluc2VydGlvblBvc2l0aW9uLmRvd25zdHJlYW0oKTsKICAgICAgICAgZWxzZSBpZiAoaW5zZXJ0
aW9uUG9zaXRpb24uYXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcAppbmRleCA5
OThjOTZhNjVkNmUyMTQ2YzhkODM1OTVmNDc1NjEzMTViODkxMjc0Li5mMzQwMGZkYTY5NDVmMjBi
MzAzZmQ5NjcwNTRkMTFmMmEzOWM5YjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwCkBAIC04MCw3ICs4MCw3IEBAIHN0YXRp
YyBib29sIGdldFN0YXJ0RW5kTGlzdENoaWxkcmVuKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbiwgTm9kZSomIHN0CiAgICAgLy8gaWYgdGhlIHNlbGVjdGlvbiBlbmRzIG9uIGEgbGlz
dCBpdGVtIHdpdGggYSBzdWJsaXN0LCBpbmNsdWRlIHRoZSBlbnRpcmUgc3VibGlzdAogICAgIGlm
IChlbmRMaXN0Q2hpbGQtPnJlbmRlcmVyKCktPmlzTGlzdEl0ZW0oKSkgewogICAgICAgICBSZW5k
ZXJPYmplY3QqIHIgPSBlbmRMaXN0Q2hpbGQtPnJlbmRlcmVyKCktPm5leHRTaWJsaW5nKCk7Ci0g
ICAgICAgIGlmIChyICYmIGlzTGlzdEVsZW1lbnQoci0+bm9kZSgpKSkKKyAgICAgICAgaWYgKHIg
JiYgaXNMaXN0SFRNTEVsZW1lbnQoci0+bm9kZSgpKSkKICAgICAgICAgICAgIGVuZExpc3RDaGls
ZCA9IHItPm5vZGUoKTsKICAgICB9CiAKQEAgLTE3Nyw3ICsxNzcsNyBAQCB2b2lkIEluY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIE5vZGUqIHByZXZpb3VzSXRlbSA9IHN0YXJ0TGlzdENoaWxkLT5yZW5kZXJlcigpLT5wcmV2
aW91c1NpYmxpbmcoKS0+bm9kZSgpOwotICAgIGlmIChpc0xpc3RFbGVtZW50KHByZXZpb3VzSXRl
bSkpIHsKKyAgICBpZiAoaXNMaXN0SFRNTEVsZW1lbnQocHJldmlvdXNJdGVtKSkgewogICAgICAg
ICAvLyBtb3ZlIG5vZGVzIHVwIGludG8gcHJlY2VkaW5nIGxpc3QKICAgICAgICAgYXBwZW5kU2li
bGluZ05vZGVSYW5nZShzdGFydExpc3RDaGlsZCwgZW5kTGlzdENoaWxkLCBkb3duY2FzdDxFbGVt
ZW50PihwcmV2aW91c0l0ZW0pKTsKICAgICAgICAgbV9saXN0RWxlbWVudCA9IHByZXZpb3VzSXRl
bTsKQEAgLTI0NCwxMSArMjQ0LDExIEBAIHN0YXRpYyBib29sIGNhbkRlY3JlYXNlTGlzdExldmVs
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgTm9kZSomIHN0YXJ0CiB7CiAgICAg
aWYgKCFnZXRTdGFydEVuZExpc3RDaGlsZHJlbihzZWxlY3Rpb24sIHN0YXJ0LCBlbmQpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICAvLyB0aGVyZSBtdXN0IGJlIGEgZGVzdGlu
YXRpb24gbGlzdCB0byBtb3ZlIHRoZSBpdGVtcyB0bwotICAgIGlmICghaXNMaXN0RWxlbWVudChz
dGFydC0+cGFyZW50Tm9kZSgpLT5wYXJlbnROb2RlKCkpKQorICAgIGlmICghaXNMaXN0SFRNTEVs
ZW1lbnQoc3RhcnQtPnBhcmVudE5vZGUoKS0+cGFyZW50Tm9kZSgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAKKwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUNvbW1hbmQuY3BwCmluZGV4IGIyYTdiYzZhYmNkNjU4MTkx
NDkyYjNmMzQ0MjY2ZmY3ZjBmZTVkNDEuLjk1ZGE4ODQ0ZjhkMDBjNWI0MzE4YjU3MWMzNWQxODEy
ZWRkMDM4ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUNv
bW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUNvbW1hbmQu
Y3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiUmVtb3ZlTm9kZUNvbW1hbmQuaCIKIAog
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgotI2luY2x1ZGUgIk5vZGUuaCIK
ICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcAppbmRleCAzNjgyYmMzNzZhYzA2YzNj
MDk3YmVmZWViNGM4NzYzMDljNjBkMDI1Li5kNzBkNDZlY2YzZjAzMGU0OWJiOWI5OGQ0NmM2N2Qz
YTY0YWZlZjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VOb2Rl
V2l0aFNwYW5Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VO
b2RlV2l0aFNwYW5Db21tYW5kLmNwcApAQCAtMzEsMTYgKzMxLDExIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuaCIKIAorI2luY2x1
ZGUgIkhUTUxTcGFuRWxlbWVudC5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCi0jaW5jbHVk
ZSAiSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLQotI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKLQogUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQ6OlJlcGxhY2VOb2RlV2l0
aFNwYW5Db21tYW5kKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCiAgICAgOiBTaW1w
bGVFZGl0Q29tbWFuZChlbGVtZW50LT5kb2N1bWVudCgpKQogICAgICwgbV9lbGVtZW50VG9SZXBs
YWNlKGVsZW1lbnQpCkBAIC02OSw3ICs2NCw3IEBAIHZvaWQgUmVwbGFjZU5vZGVXaXRoU3BhbkNv
bW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICghbV9lbGVtZW50VG9SZXBsYWNlLT5pbkRvY3VtZW50
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fc3BhbkVsZW1lbnQpCi0gICAgICAgIG1f
c3BhbkVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVudChtX2VsZW1lbnRUb1JlcGxhY2UtPmRvY3Vt
ZW50KCksIHNwYW5UYWcpOworICAgICAgICBtX3NwYW5FbGVtZW50ID0gSFRNTFNwYW5FbGVtZW50
OjpjcmVhdGUobV9lbGVtZW50VG9SZXBsYWNlLT5kb2N1bWVudCgpKTsKICAgICBzd2FwSW5Ob2Rl
UHJlc2VydmluZ0F0dHJpYnV0ZXNBbmRDaGlsZHJlbigqbV9zcGFuRWxlbWVudCwgKm1fZWxlbWVu
dFRvUmVwbGFjZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNjYxZWIxZGU3YmU2MTM0MDc2OGFhOGQwMjE2Nzcz
Yzg0NWI3YTJhNC4uNzg2NmIxNjdiMmQ5YjA3ZWQyODEwYWVjZWRkZGM4NDljYTY5Yjg0MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5j
cHAKQEAgLTEwMSw0NCArMTAxLDQ2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc0ludGVyY2hh
bmdlTmV3bGluZUF0RW5kOwogfTsKIAotc3RhdGljIGJvb2wgaXNJbnRlcmNoYW5nZU5ld2xpbmVO
b2RlKGNvbnN0IE5vZGUgKm5vZGUpCitzdGF0aWMgYm9vbCBpc0ludGVyY2hhbmdlTmV3bGluZU5v
ZGUoY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5n
PiBpbnRlcmNoYW5nZU5ld2xpbmVDbGFzc1N0cmluZyhBcHBsZUludGVyY2hhbmdlTmV3bGluZSk7
Ci0gICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShiclRhZykgJiYgCi0gICAgICAg
ICAgIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQgKj4obm9kZSktPmdldEF0dHJpYnV0ZShjbGFz
c0F0dHIpID09IGludGVyY2hhbmdlTmV3bGluZUNsYXNzU3RyaW5nOworICAgIHJldHVybiBpczxI
VE1MQlJFbGVtZW50Pihub2RlKSAmJiBkb3duY2FzdDxIVE1MQlJFbGVtZW50Pigqbm9kZSkuZmFz
dEdldEF0dHJpYnV0ZShjbGFzc0F0dHIpID09IGludGVyY2hhbmdlTmV3bGluZUNsYXNzU3RyaW5n
OwogfQogCi1zdGF0aWMgYm9vbCBpc0ludGVyY2hhbmdlQ29udmVydGVkU3BhY2VTcGFuKGNvbnN0
IE5vZGUgKm5vZGUpCitzdGF0aWMgYm9vbCBpc0ludGVyY2hhbmdlQ29udmVydGVkU3BhY2VTcGFu
KGNvbnN0IE5vZGUqIG5vZGUpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4g
Y29udmVydGVkU3BhY2VTcGFuQ2xhc3NTdHJpbmcoQXBwbGVDb252ZXJ0ZWRTcGFjZSk7Ci0gICAg
cmV0dXJuIG5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiAKLSAgICAgICAgICAgc3RhdGljX2Nhc3Q8
Y29uc3QgSFRNTEVsZW1lbnQgKj4obm9kZSktPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpID09IGNv
bnZlcnRlZFNwYWNlU3BhbkNsYXNzU3RyaW5nOworICAgIHJldHVybiBpczxIVE1MRWxlbWVudD4o
bm9kZSkgJiYgZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpub2RlKS5mYXN0R2V0QXR0cmlidXRlKGNs
YXNzQXR0cikgPT0gY29udmVydGVkU3BhY2VTcGFuQ2xhc3NTdHJpbmc7CiB9CiAKLXN0YXRpYyBQ
b3NpdGlvbiBwb3NpdGlvbkF2b2lkaW5nUHJlY2VkaW5nTm9kZXMoUG9zaXRpb24gcG9zKQorc3Rh
dGljIFBvc2l0aW9uIHBvc2l0aW9uQXZvaWRpbmdQcmVjZWRpbmdOb2RlcyhQb3NpdGlvbiBwb3Np
dGlvbikKIHsKKyAgICBBU1NFUlQocG9zaXRpb24uaXNOb3ROdWxsKCkpOworCiAgICAgLy8gSWYg
d2UncmUgYWxyZWFkeSBvbiBhIGJyZWFrLCBpdCdzIHByb2JhYmx5IGEgcGxhY2Vob2xkZXIgYW5k
IHdlIHNob3VsZG4ndCBjaGFuZ2Ugb3VyIHBvc2l0aW9uLgotICAgIGlmIChlZGl0aW5nSWdub3Jl
c0NvbnRlbnQocG9zLmRlcHJlY2F0ZWROb2RlKCkpKQotICAgICAgICByZXR1cm4gcG9zOworICAg
IGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKnBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpKQor
ICAgICAgICByZXR1cm4gcG9zaXRpb247CiAKICAgICAvLyBXZSBhbHNvIHN0b3Agd2hlbiBjaGFu
Z2luZyBibG9jayBmbG93IGVsZW1lbnRzIGJlY2F1c2UgZXZlbiB0aG91Z2ggdGhlIHZpc3VhbCBw
b3NpdGlvbiBpcyB0aGUKICAgICAvLyBzYW1lLiAgRS5nLiwKICAgICAvLyAgIDxkaXY+Zm9vXjwv
ZGl2Pl4KICAgICAvLyBUaGUgdHdvIHBvc2l0aW9ucyBhYm92ZSBhcmUgdGhlIHNhbWUgdmlzdWFs
IHBvc2l0aW9uLCBidXQgd2Ugd2FudCB0byBzdGF5IGluIHRoZSBzYW1lIGJsb2NrLgotICAgIE5v
ZGUqIGVuY2xvc2luZ0Jsb2NrTm9kZSA9IGVuY2xvc2luZ0Jsb2NrKHBvcy5jb250YWluZXJOb2Rl
KCkpOwotICAgIGZvciAoUG9zaXRpb24gbmV4dFBvc2l0aW9uID0gcG9zOyBuZXh0UG9zaXRpb24u
Y29udGFpbmVyTm9kZSgpICE9IGVuY2xvc2luZ0Jsb2NrTm9kZTsgcG9zID0gbmV4dFBvc2l0aW9u
KSB7Ci0gICAgICAgIGlmIChsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKHBvcykpCisgICAgYXV0
byogZW5jbG9zaW5nQmxvY2tOb2RlID0gZW5jbG9zaW5nQmxvY2socG9zaXRpb24uY29udGFpbmVy
Tm9kZSgpKTsKKyAgICBmb3IgKFBvc2l0aW9uIG5leHRQb3NpdGlvbiA9IHBvc2l0aW9uOyBuZXh0
UG9zaXRpb24uY29udGFpbmVyTm9kZSgpICE9IGVuY2xvc2luZ0Jsb2NrTm9kZTsgcG9zaXRpb24g
PSBuZXh0UG9zaXRpb24pIHsKKyAgICAgICAgaWYgKGxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24o
cG9zaXRpb24pKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgaWYgKHBvcy5jb250YWlu
ZXJOb2RlKCktPm5vblNoYWRvd0JvdW5kYXJ5UGFyZW50Tm9kZSgpKQotICAgICAgICAgICAgbmV4
dFBvc2l0aW9uID0gcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShwb3MuY29udGFpbmVyTm9kZSgp
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChuZXh0UG9zaXRpb24gPT0gcG9zIAotICAgICAgICAg
ICAgfHwgZW5jbG9zaW5nQmxvY2sobmV4dFBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSkgIT0gZW5j
bG9zaW5nQmxvY2tOb2RlCi0gICAgICAgICAgICB8fCBWaXNpYmxlUG9zaXRpb24ocG9zKSAhPSBW
aXNpYmxlUG9zaXRpb24obmV4dFBvc2l0aW9uKSkKKyAgICAgICAgaWYgKHBvc2l0aW9uLmNvbnRh
aW5lck5vZGUoKS0+bm9uU2hhZG93Qm91bmRhcnlQYXJlbnROb2RlKCkpCisgICAgICAgICAgICBu
ZXh0UG9zaXRpb24gPSBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKHBvc2l0aW9uLmNvbnRhaW5l
ck5vZGUoKSk7CisKKyAgICAgICAgaWYgKG5leHRQb3NpdGlvbiA9PSBwb3NpdGlvbikKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBpZiAoZW5jbG9zaW5nQmxvY2sobmV4dFBvc2l0aW9uLmNv
bnRhaW5lck5vZGUoKSkgIT0gZW5jbG9zaW5nQmxvY2tOb2RlKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGlmIChWaXNpYmxlUG9zaXRpb24ocG9zaXRpb24pICE9IFZpc2libGVQb3NpdGlv
bihuZXh0UG9zaXRpb24pKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHJldHVybiBw
b3M7CisgICAgcmV0dXJuIHBvc2l0aW9uOwogfQogCiBSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBs
YWNlbWVudEZyYWdtZW50KERvY3VtZW50JiBkb2N1bWVudCwgRG9jdW1lbnRGcmFnbWVudCogZnJh
Z21lbnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKQEAgLTExMDEsNyArMTEw
Myw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGZyYWdt
ZW50LnJlbW92ZU5vZGUocmVmTm9kZSk7CiAKICAgICBOb2RlKiBibG9ja1N0YXJ0ID0gZW5jbG9z
aW5nQmxvY2soaW5zZXJ0aW9uUG9zLmRlcHJlY2F0ZWROb2RlKCkpOwotICAgIGlmICgoaXNMaXN0
RWxlbWVudChyZWZOb2RlLmdldCgpKSB8fCAoaXNMZWdhY3lBcHBsZVN0eWxlU3BhbihyZWZOb2Rl
LmdldCgpKSAmJiBpc0xpc3RFbGVtZW50KHJlZk5vZGUtPmZpcnN0Q2hpbGQoKSkpKQorICAgIGlm
ICgoaXNMaXN0SFRNTEVsZW1lbnQocmVmTm9kZS5nZXQoKSkgfHwgKGlzTGVnYWN5QXBwbGVTdHls
ZVNwYW4ocmVmTm9kZS5nZXQoKSkgJiYgaXNMaXN0SFRNTEVsZW1lbnQocmVmTm9kZS0+Zmlyc3RD
aGlsZCgpKSkpCiAgICAgICAgICYmIGJsb2NrU3RhcnQgJiYgYmxvY2tTdGFydC0+cmVuZGVyZXIo
KS0+aXNMaXN0SXRlbSgpKQogICAgICAgICByZWZOb2RlID0gaW5zZXJ0QXNMaXN0SXRlbXMoZG93
bmNhc3Q8SFRNTEVsZW1lbnQ+KHJlZk5vZGUuZ2V0KCkpLCBibG9ja1N0YXJ0LCBpbnNlcnRpb25Q
b3MsIGluc2VydGVkTm9kZXMpOwogICAgIGVsc2UgewpAQCAtMTQzOSw3ICsxNDQxLDcgQEAgTm9k
ZSogUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Omluc2VydEFzTGlzdEl0ZW1zKFBhc3NSZWZQdHI8
SFRNTEVsZW1lbnQ+IHBycExpc3QKIHsKICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGxpc3RFbGVt
ZW50ID0gcHJwTGlzdEVsZW1lbnQ7CiAKLSAgICB3aGlsZSAobGlzdEVsZW1lbnQtPmhhc09uZUNo
aWxkKCkgJiYgaXNMaXN0RWxlbWVudChsaXN0RWxlbWVudC0+Zmlyc3RDaGlsZCgpKSkKKyAgICB3
aGlsZSAobGlzdEVsZW1lbnQtPmhhc09uZUNoaWxkKCkgJiYgaXNMaXN0SFRNTEVsZW1lbnQobGlz
dEVsZW1lbnQtPmZpcnN0Q2hpbGQoKSkpCiAgICAgICAgIGxpc3RFbGVtZW50ID0gZG93bmNhc3Q8
SFRNTEVsZW1lbnQ+KGxpc3RFbGVtZW50LT5maXJzdENoaWxkKCkpOwogCiAgICAgYm9vbCBpc1N0
YXJ0ID0gaXNTdGFydE9mUGFyYWdyYXBoKGluc2VydFBvcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsQ2hlY2tlci5jcHAKaW5kZXggMmZiODM1ODE1MDc0ZTljMDIzYjc2MDJkOTY3NDAxNGIx
ZDRmMzZlZC4uNGIxMDAwYThkZTg5ZjBmMTk2NWRiNzMzOWQ2ZTMwZGRjNTM2M2NiNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlBvc2l0aW9uSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJPYmpl
Y3QuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCAwMTYxY2Zi
ZDUzNzUyODc0MGVmMGYwMDcyOTZmNjE4YzlmMTg2YzI1Li40YzI3ODU0NjkzZTU1MjM1OGJkZGJk
MWM2YzM1OGFkZmJiMzRjYWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwCkBAIC0xMjYxLDEwICsxMjYxLDcgQEAgdm9pZCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0
ZXJhdG9yOjphZHZhbmNlKCkKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEV4aXQg
ZW1wdHkgY29udGFpbmVycyBhcyB3ZSBwYXNzIG92ZXIgdGhlbSBvciBjb250YWluZXJzCiAgICAg
ICAgICAgICAvLyB3aGVyZSBbY29udGFpbmVyLCAwXSBpcyB3aGVyZSB3ZSBzdGFydGVkIGl0ZXJh
dGluZy4KLSAgICAgICAgICAgIGlmICghbV9oYW5kbGVkTm9kZQotICAgICAgICAgICAgICAgICAg
ICAmJiBjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKG1fbm9kZSkKLSAgICAgICAgICAgICAgICAg
ICAgJiYgbV9ub2RlLT5wYXJlbnROb2RlKCkKLSAgICAgICAgICAgICAgICAgICAgJiYgKCFtX25v
ZGUtPmxhc3RDaGlsZCgpIHx8IChtX25vZGUgPT0gbV9lbmRDb250YWluZXIgJiYgIW1fZW5kT2Zm
c2V0KSkpIHsKKyAgICAgICAgICAgIGlmICghbV9oYW5kbGVkTm9kZSAmJiBjYW5IYXZlQ2hpbGRy
ZW5Gb3JFZGl0aW5nKCptX25vZGUpICAmJiBtX25vZGUtPnBhcmVudE5vZGUoKSAmJiAoIW1fbm9k
ZS0+bGFzdENoaWxkKCkgfHwgKG1fbm9kZSA9PSBtX2VuZENvbnRhaW5lciAmJiAhbV9lbmRPZmZz
ZXQpKSkgewogICAgICAgICAgICAgICAgIGV4aXROb2RlKCk7CiAgICAgICAgICAgICAgICAgaWYg
KG1fcG9zaXRpb25Ob2RlKSB7CiAgICAgICAgICAgICAgICAgICAgIG1faGFuZGxlZE5vZGUgPSB0
cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKaW5kZXgg
YzUzNjU5Y2E3MTU1ZDdkOGI5Y2Q0MDA2YjE1ZDdhNGQ3MjY0OTliOC4uNzJiOGZhOTE1NDUxYzk3
YjQ2NTVjYjY2YmFlNzYwMjBlYTBkYzIzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVTZWxlY3Rpb24uY3BwCkBAIC05NSw3ICs5NSw3IEBAIFZpc2libGVTZWxlY3Rpb246OlZp
c2libGVTZWxlY3Rpb24oY29uc3QgUmFuZ2UmIHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJv
b2wKIAogVmlzaWJsZVNlbGVjdGlvbiBWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29u
dGVudHNPZk5vZGUoTm9kZSogbm9kZSkKIHsKLSAgICBBU1NFUlQoIWVkaXRpbmdJZ25vcmVzQ29u
dGVudChub2RlKSk7CisgICAgQVNTRVJUKCFlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKm5vZGUpKTsK
ICAgICByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uSW5Ob2RlKG5vZGUpLCBs
YXN0UG9zaXRpb25Jbk5vZGUobm9kZSksIERPV05TVFJFQU0pOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKaW5kZXggMzY0NWZlMTEyODdjZTI2YmU3ZTIwM2E3MmFh
YTY3NjU0ZWM5MTIwOC4uZGE4OTA3MWE3NTU3ODg0ZTk0ZmY5YTVjOWJjZjJiOGVjNTMzOWQwMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcApAQCAtMTAyOCw3ICsxMDI4
LDcgQEAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzTGluZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBpbnQKICAgICAgICAgSW50UG9pbnQgcG9pbnRJbkxp
bmUgPSBhYnNvbHV0ZUxpbmVEaXJlY3Rpb25Qb2ludFRvTG9jYWxQb2ludEluQmxvY2soKnJvb3Qs
IGxpbmVEaXJlY3Rpb25Qb2ludCk7CiAgICAgICAgIFJlbmRlck9iamVjdCYgcmVuZGVyZXIgPSBy
b290LT5jbG9zZXN0TGVhZkNoaWxkRm9yUG9pbnQocG9pbnRJbkxpbmUsIGlzRWRpdGFibGVQb3Np
dGlvbihwKSktPnJlbmRlcmVyKCk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSByZW5kZXJlci5ub2Rl
KCk7Ci0gICAgICAgIGlmIChub2RlICYmIGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSkKKyAg
ICAgICAgaWYgKG5vZGUgJiYgZWRpdGluZ0lnbm9yZXNDb250ZW50KCpub2RlKSkKICAgICAgICAg
ICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShub2RlKTsKICAgICAgICAgcmV0
dXJuIHJlbmRlcmVyLnBvc2l0aW9uRm9yUG9pbnQocG9pbnRJbkxpbmUsIG51bGxwdHIpOwogICAg
IH0KQEAgLTEwODYsNyArMTA4Niw3IEBAIFZpc2libGVQb3NpdGlvbiBuZXh0TGluZVBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBpbnQgbGluCiAgICAgICAg
IEludFBvaW50IHBvaW50SW5MaW5lID0gYWJzb2x1dGVMaW5lRGlyZWN0aW9uUG9pbnRUb0xvY2Fs
UG9pbnRJbkJsb2NrKCpyb290LCBsaW5lRGlyZWN0aW9uUG9pbnQpOwogICAgICAgICBSZW5kZXJP
YmplY3QmIHJlbmRlcmVyID0gcm9vdC0+Y2xvc2VzdExlYWZDaGlsZEZvclBvaW50KHBvaW50SW5M
aW5lLCBpc0VkaXRhYmxlUG9zaXRpb24ocCkpLT5yZW5kZXJlcigpOwogICAgICAgICBOb2RlKiBu
b2RlID0gcmVuZGVyZXIubm9kZSgpOwotICAgICAgICBpZiAobm9kZSAmJiBlZGl0aW5nSWdub3Jl
c0NvbnRlbnQobm9kZSkpCisgICAgICAgIGlmIChub2RlICYmIGVkaXRpbmdJZ25vcmVzQ29udGVu
dCgqbm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUo
bm9kZSk7CiAgICAgICAgIHJldHVybiByZW5kZXJlci5wb3NpdGlvbkZvclBvaW50KHBvaW50SW5M
aW5lLCBudWxscHRyKTsKICAgICB9CkBAIC0xMTk4LDcgKzExOTgsNyBAQCBOb2RlKiBmaW5kU3Rh
cnRPZlBhcmFncmFwaChOb2RlKiBzdGFydE5vZGUsIE5vZGUqIGhpZ2hlc3RSb290LCBOb2RlKiBz
dGFydEJsb2NrLAogICAgICAgICAgICAgbm9kZSA9IG47CiAgICAgICAgICAgICBvZmZzZXQgPSAw
OwogICAgICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzUG9zdE9yZGVyKCpuLCBz
dGFydEJsb2NrKTsKLSAgICAgICAgfSBlbHNlIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobikg
fHwgaXNSZW5kZXJlZFRhYmxlKG4pKSB7CisgICAgICAgIH0gZWxzZSBpZiAoZWRpdGluZ0lnbm9y
ZXNDb250ZW50KCpuKSB8fCBpc1JlbmRlcmVkVGFibGUobikpIHsKICAgICAgICAgICAgIG5vZGUg
PSBuOwogICAgICAgICAgICAgdHlwZSA9IFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9y
OwogICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpID8gbi0+cHJldmlvdXNTaWJs
aW5nKCkgOiBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c1Bvc3RPcmRlcigqbiwgc3RhcnRCbG9jayk7
CkBAIC0xMjYwLDcgKzEyNjAsNyBAQCBOb2RlKiBmaW5kRW5kT2ZQYXJhZ3JhcGgoTm9kZSogc3Rh
cnROb2RlLCBOb2RlKiBoaWdoZXN0Um9vdCwgTm9kZSogc3RheUluc2lkZUJsbwogICAgICAgICAg
ICAgbm9kZSA9IG47CiAgICAgICAgICAgICBvZmZzZXQgPSByLT5jYXJldE1heE9mZnNldCgpOwog
ICAgICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm4sIHN0YXlJbnNpZGVCbG9jayk7
Ci0gICAgICAgIH0gZWxzZSBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG4pIHx8IGlzUmVuZGVy
ZWRUYWJsZShuKSkgeworICAgICAgICB9IGVsc2UgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudCgq
bikgfHwgaXNSZW5kZXJlZFRhYmxlKG4pKSB7CiAgICAgICAgICAgICBub2RlID0gbjsKICAgICAg
ICAgICAgIHR5cGUgPSBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yOwogICAgICAgICAg
ICAgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKCpuLCBzdGF5SW5zaWRl
QmxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAppbmRleCA0ZTViZjY2
NGEyYjhlZjE0ZTUwZTEwMjQ0MDM3Mjc4YjRkYTJiYTdjLi5jNDIzM2M5NGNkZDIzMTQ3ZjU5ODVj
MTM4Y2EyNDBhZDE0MGQ5MTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0
bWxlZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNw
cApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA0LTIwMDcsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MywxMCArNjMsMTUgQEAgdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKIAogc3RhdGljIGJvb2wgaXNWaXNpYmx5QWRqYWNlbnQoY29uc3QgUG9zaXRp
b24mLCBjb25zdCBQb3NpdGlvbiYpOwogCitib29sIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmco
Y29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICByZXR1cm4gIWlzPFRleHQ+KG5vZGUpICYmIG5vZGUu
Y2FuQ29udGFpblJhbmdlRW5kUG9pbnQoKTsKK30KKwogLy8gQXRvbWljIG1lYW5zIHRoYXQgdGhl
IG5vZGUgaGFzIG5vIGNoaWxkcmVuLCBvciBoYXMgY2hpbGRyZW4gd2hpY2ggYXJlIGlnbm9yZWQg
Zm9yIHRoZSBwdXJwb3NlcyBvZiBlZGl0aW5nLgogYm9vbCBpc0F0b21pY05vZGUoY29uc3QgTm9k
ZSogbm9kZSkKIHsKLSAgICByZXR1cm4gbm9kZSAmJiAoIW5vZGUtPmhhc0NoaWxkTm9kZXMoKSB8
fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkpOworICAgIHJldHVybiBub2RlICYmICghbm9k
ZS0+aGFzQ2hpbGROb2RlcygpIHx8IGVkaXRpbmdJZ25vcmVzQ29udGVudCgqbm9kZSkpOwogfQog
CiAvLyBDb21wYXJlIHR3byBwb3NpdGlvbnMsIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHBvc3Np
YmlsaXR5IHRoYXQgb25lIG9yIGJvdGgKQEAgLTM3Myw4ICszNzgsOSBAQCBpbnQgbGFzdE9mZnNl
dEZvckVkaXRpbmcoY29uc3QgTm9kZSYgbm9kZSkKICAgICBpZiAobm9kZS5oYXNDaGlsZE5vZGVz
KCkpCiAgICAgICAgIHJldHVybiBub2RlLmNvdW50Q2hpbGROb2RlcygpOwogCi0gICAgLy8gTk9U
RTogVGhpcyBzaG91bGQgcHJlZW1wdCB0aGUgY291bnRDaGlsZE5vZGVzKCkgZm9yLCBlLmcuLCBz
ZWxlY3Qgbm9kZXMgKHdoYXQgZG9lcyB0aGlzIG1lYW4pPwotICAgIGlmIChlZGl0aW5nSWdub3Jl
c0NvbnRlbnQoJm5vZGUpKQorICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIHByZWVtcHQgdGhlIGNv
dW50Q2hpbGROb2RlcygpIGZvciwgZS5nLiwgc2VsZWN0IG5vZGVzLgorICAgIC8vIEZJWE1FOiBX
aGF0IGRvZXMgdGhlIGNvbW1lbnQgYWJvdmUgbWVhbj8KKyAgICBpZiAoZWRpdGluZ0lnbm9yZXND
b250ZW50KG5vZGUpKQogICAgICAgICByZXR1cm4gMTsKIAogICAgIHJldHVybiAwOwpAQCAtMzgy
LDMzICszODgsMzcgQEAgaW50IGxhc3RPZmZzZXRGb3JFZGl0aW5nKGNvbnN0IE5vZGUmIG5vZGUp
CiAKIFN0cmluZyBzdHJpbmdXaXRoUmViYWxhbmNlZFdoaXRlc3BhY2UoY29uc3QgU3RyaW5nJiBz
dHJpbmcsIGJvb2wgc3RhcnRJc1N0YXJ0T2ZQYXJhZ3JhcGgsIGJvb2wgZW5kSXNFbmRPZlBhcmFn
cmFwaCkKIHsKLSAgICBWZWN0b3I8VUNoYXI+IHJlYmFsYW5jZWRTdHJpbmcoc3RyaW5nLmxlbmd0
aCgpKTsKLSAgICBTdHJpbmdWaWV3KHN0cmluZykuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQo
cmViYWxhbmNlZFN0cmluZy5kYXRhKCkpOwotCi0gICAgYm9vbCBjaGFuZ2VkU29tZXRoaW5nID0g
ZmFsc2U7CisgICAgU3RyaW5nQnVpbGRlciByZWJhbGFuY2VkU3RyaW5nOwogCiAgICAgYm9vbCBw
cmV2aW91c0NoYXJhY3Rlcldhc1NwYWNlID0gZmFsc2U7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCByZWJhbGFuY2VkU3RyaW5nLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmICghZGVwcmVj
YXRlZElzRWRpdGluZ1doaXRlc3BhY2UocmViYWxhbmNlZFN0cmluZ1tpXSkpIHsKKyAgICB1bnNp
Z25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGF1dG8gY2hhcmFjdGVyID0gc3RyaW5nW2ldOwor
ICAgICAgICBpZiAoIWRlcHJlY2F0ZWRJc0VkaXRpbmdXaGl0ZXNwYWNlKGNoYXJhY3RlcikpIHsK
ICAgICAgICAgICAgIHByZXZpb3VzQ2hhcmFjdGVyV2FzU3BhY2UgPSBmYWxzZTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChwcmV2aW91c0NoYXJhY3Rlcldh
c1NwYWNlIHx8ICghaSAmJiBzdGFydElzU3RhcnRPZlBhcmFncmFwaCkgfHwgKGkgKyAxID09IHJl
YmFsYW5jZWRTdHJpbmcuc2l6ZSgpICYmIGVuZElzRW5kT2ZQYXJhZ3JhcGgpKSB7Ci0gICAgICAg
ICAgICBpZiAocmViYWxhbmNlZFN0cmluZ1tpXSAhPSBub0JyZWFrU3BhY2UpIHsKLSAgICAgICAg
ICAgICAgICByZWJhbGFuY2VkU3RyaW5nW2ldID0gbm9CcmVha1NwYWNlOwotICAgICAgICAgICAg
ICAgIGNoYW5nZWRTb21ldGhpbmcgPSB0cnVlOwotICAgICAgICAgICAgfQorICAgICAgICBMQ2hh
ciBzZWxlY3RlZFdoaXRlc3BhY2VDaGFyYWN0ZXI7CisgICAgICAgIGlmIChwcmV2aW91c0NoYXJh
Y3Rlcldhc1NwYWNlIHx8ICghaSAmJiBzdGFydElzU3RhcnRPZlBhcmFncmFwaCkgfHwgKGkgPT0g
bGVuZ3RoIC0gMSAmJiBlbmRJc0VuZE9mUGFyYWdyYXBoKSkgeworICAgICAgICAgICAgc2VsZWN0
ZWRXaGl0ZXNwYWNlQ2hhcmFjdGVyID0gbm9CcmVha1NwYWNlOwogICAgICAgICAgICAgcHJldmlv
dXNDaGFyYWN0ZXJXYXNTcGFjZSA9IGZhbHNlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgaWYgKHJlYmFsYW5jZWRTdHJpbmdbaV0gIT0gJyAnKSB7Ci0gICAgICAgICAgICAgICAgcmVi
YWxhbmNlZFN0cmluZ1tpXSA9ICcgJzsKLSAgICAgICAgICAgICAgICBjaGFuZ2VkU29tZXRoaW5n
ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNlbGVjdGVkV2hpdGVzcGFjZUNo
YXJhY3RlciA9IG5vQnJlYWtTcGFjZTsKICAgICAgICAgICAgIHByZXZpb3VzQ2hhcmFjdGVyV2Fz
U3BhY2UgPSB0cnVlOwogICAgICAgICB9CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gc2VsZWN0
ZWRXaGl0ZXNwYWNlQ2hhcmFjdGVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJl
YmFsYW5jZWRTdHJpbmcucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CisgICAgICAgIHJlYmFsYW5j
ZWRTdHJpbmcuYXBwZW5kKHN0cmluZywgcmViYWxhbmNlZFN0cmluZy5sZW5ndGgoKSwgaSAtIHJl
YmFsYW5jZWRTdHJpbmcubGVuZ3RoKCkpOworICAgICAgICByZWJhbGFuY2VkU3RyaW5nLmFwcGVu
ZChzZWxlY3RlZFdoaXRlc3BhY2VDaGFyYWN0ZXIpOwogICAgIH0KIAotICAgIHJldHVybiBjaGFu
Z2VkU29tZXRoaW5nID8gU3RyaW5nOjphZG9wdChyZWJhbGFuY2VkU3RyaW5nKSA6IHN0cmluZzsK
KyAgICBpZiAoIXJlYmFsYW5jZWRTdHJpbmcubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBzdHJp
bmc7CisKKyAgICByZWJhbGFuY2VkU3RyaW5nLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOworICAg
IHJlYmFsYW5jZWRTdHJpbmcuYXBwZW5kKHN0cmluZywgcmViYWxhbmNlZFN0cmluZy5sZW5ndGgo
KSwgbGVuZ3RoIC0gcmViYWxhbmNlZFN0cmluZy5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHJlYmFs
YW5jZWRTdHJpbmcudG9TdHJpbmcoKTsKIH0KIAogYm9vbCBpc1RhYmxlU3RydWN0dXJlTm9kZShj
b25zdCBOb2RlKiBub2RlKQpAQCAtNDIzLDcgKzQzMyw3IEBAIGNvbnN0IFN0cmluZyYgbm9uQnJl
YWtpbmdTcGFjZVN0cmluZygpCiAgICAgcmV0dXJuIG5vbkJyZWFraW5nU3BhY2VTdHJpbmc7CiB9
CiAKLXN0YXRpYyBib29sIGlzU3BlY2lhbEVsZW1lbnQoY29uc3QgTm9kZSogbm9kZSkKK3N0YXRp
YyBib29sIGlzU3BlY2lhbEhUTUxFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCiB7CiAgICAgaWYg
KCFpczxIVE1MRWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ1MSw3
ICs0NjEsNyBAQCBzdGF0aWMgSFRNTEVsZW1lbnQqIGZpcnN0SW5TcGVjaWFsRWxlbWVudChjb25z
dCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgYXV0byogcm9vdEVkaXRhYmxlRWxlbWVudCA9
IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGZv
ciAoTm9kZSogbm9kZSA9IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7IG5vZGUgJiYgbm9kZS0+
cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1lbnQ7IG5vZGUgPSBub2Rl
LT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKCFpc1NwZWNpYWxFbGVtZW50KG5vZGUpKQor
ICAgICAgICBpZiAoIWlzU3BlY2lhbEhUTUxFbGVtZW50KG5vZGUpKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2UG9zKHBvc2l0aW9uLCBET1dOU1RSRUFN
KTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0SW5FbGVtZW50KGZpcnN0UG9zaXRpb25J
bk9yQmVmb3JlTm9kZShub2RlKSwgRE9XTlNUUkVBTSk7CkBAIC00NjUsNyArNDc1LDcgQEAgc3Rh
dGljIEhUTUxFbGVtZW50KiBsYXN0SW5TcGVjaWFsRWxlbWVudChjb25zdCBQb3NpdGlvbiYgcG9z
aXRpb24pCiB7CiAgICAgYXV0byogcm9vdEVkaXRhYmxlRWxlbWVudCA9IHBvc2l0aW9uLmNvbnRh
aW5lck5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGZvciAoTm9kZSogbm9kZSA9
IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7IG5vZGUgJiYgbm9kZS0+cm9vdEVkaXRhYmxlRWxl
bWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1lbnQ7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkp
IHsKLSAgICAgICAgaWYgKCFpc1NwZWNpYWxFbGVtZW50KG5vZGUpKQorICAgICAgICBpZiAoIWlz
U3BlY2lhbEhUTUxFbGVtZW50KG5vZGUpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IFZpc2libGVQb3NpdGlvbiB2UG9zKHBvc2l0aW9uLCBET1dOU1RSRUFNKTsKICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIGxhc3RJbkVsZW1lbnQobGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShub2Rl
KSwgRE9XTlNUUkVBTSk7CkBAIC01NjQsMTQgKzU3NCwxNCBAQCBWaXNpYmxlUG9zaXRpb24gdmlz
aWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKE5vZGUmIG5vZGUpCiAgICAgcmV0dXJuIHBvc2l0aW9uSW5Q
YXJlbnRBZnRlck5vZGUoJm5vZGUpOwogfQogCi1ib29sIGlzTGlzdEVsZW1lbnQoTm9kZSogbm9k
ZSkKK2Jvb2wgaXNMaXN0SFRNTEVsZW1lbnQoTm9kZSogbm9kZSkKIHsKLSAgICByZXR1cm4gbm9k
ZSAmJiAobm9kZS0+aGFzVGFnTmFtZSh1bFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShvbFRhZykg
fHwgbm9kZS0+aGFzVGFnTmFtZShkbFRhZykpOworICAgIHJldHVybiBub2RlICYmIChpczxIVE1M
VUxpc3RFbGVtZW50Pigqbm9kZSkgfHwgaXM8SFRNTE9MaXN0RWxlbWVudD4oKm5vZGUpIHx8IGlz
PEhUTUxETGlzdEVsZW1lbnQ+KCpub2RlKSk7CiB9CiAKIGJvb2wgaXNMaXN0SXRlbShjb25zdCBO
b2RlKiBub2RlKQogewotICAgIHJldHVybiBub2RlICYmIChpc0xpc3RFbGVtZW50KG5vZGUtPnBh
cmVudE5vZGUoKSkgfHwgKG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNM
aXN0SXRlbSgpKSk7CisgICAgcmV0dXJuIG5vZGUgJiYgKGlzTGlzdEhUTUxFbGVtZW50KG5vZGUt
PnBhcmVudE5vZGUoKSkgfHwgKG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+
aXNMaXN0SXRlbSgpKSk7CiB9CiAKIEVsZW1lbnQqIGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGNv
bnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkKQEAg
LTU5MCwxMiArNjAwLDEyIEBAIEVsZW1lbnQqIGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGNvbnN0
IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgUXVhbGlmaWVkTmFtZSYKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotTm9kZSogZW5jbG9zaW5nTm9kZU9mVHlwZShjb25zdCBQb3NpdGlvbiYgcCwg
Ym9vbCAoKm5vZGVJc09mVHlwZSkoY29uc3QgTm9kZSopLCBFZGl0aW5nQm91bmRhcnlDcm9zc2lu
Z1J1bGUgcnVsZSkKK05vZGUqIGVuY2xvc2luZ05vZGVPZlR5cGUoY29uc3QgUG9zaXRpb24mIHBv
c2l0aW9uLCBib29sICgqbm9kZUlzT2ZUeXBlKShjb25zdCBOb2RlKiksIEVkaXRpbmdCb3VuZGFy
eUNyb3NzaW5nUnVsZSBydWxlKQogewogICAgIC8vIEZJWE1FOiBzdXBwb3J0IENhblNraXBDcm9z
c0VkaXRpbmdCb3VuZGFyeQogICAgIEFTU0VSVChydWxlID09IENhbkNyb3NzRWRpdGluZ0JvdW5k
YXJ5IHx8IHJ1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwotICAgIGF1dG8qIHJv
b3QgPSBydWxlID09IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5ID8gaGlnaGVzdEVkaXRhYmxl
Um9vdChwKSA6IDA7Ci0gICAgZm9yIChOb2RlKiBuID0gcC5kZXByZWNhdGVkTm9kZSgpOyBuOyBu
ID0gbi0+cGFyZW50Tm9kZSgpKSB7CisgICAgYXV0byogcm9vdCA9IHJ1bGUgPT0gQ2Fubm90Q3Jv
c3NFZGl0aW5nQm91bmRhcnkgPyBoaWdoZXN0RWRpdGFibGVSb290KHBvc2l0aW9uKSA6IG51bGxw
dHI7CisgICAgZm9yIChOb2RlKiBuID0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsgbjsgbiA9
IG4tPnBhcmVudE5vZGUoKSkgewogICAgICAgICAvLyBEb24ndCByZXR1cm4gYSBub24tZWRpdGFi
bGUgbm9kZSBpZiB0aGUgaW5wdXQgcG9zaXRpb24gd2FzIGVkaXRhYmxlLCBzaW5jZQogICAgICAg
ICAvLyB0aGUgY2FsbGVycyBmcm9tIGVkaXRpbmcgd2lsbCBubyBkb3VidCB3YW50IHRvIHBlcmZv
cm0gZWRpdGluZyBpbnNpZGUgdGhlIHJldHVybmVkIG5vZGUuCiAgICAgICAgIGlmIChyb290ICYm
ICFuLT5oYXNFZGl0YWJsZVN0eWxlKCkpCkBAIC02MDgsMTEgKzYxOCwxMSBAQCBOb2RlKiBlbmNs
b3NpbmdOb2RlT2ZUeXBlKGNvbnN0IFBvc2l0aW9uJiBwLCBib29sICgqbm9kZUlzT2ZUeXBlKShj
b25zdCBOb2RlKiksCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLU5vZGUqIGhpZ2hlc3RFbmNs
b3NpbmdOb2RlT2ZUeXBlKGNvbnN0IFBvc2l0aW9uJiBwLCBib29sICgqbm9kZUlzT2ZUeXBlKShj
b25zdCBOb2RlKiksIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlLCBOb2RlKiBzdGF5
V2l0aGluKQorTm9kZSogaGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUoY29uc3QgUG9zaXRpb24m
IHBvc2l0aW9uLCBib29sICgqbm9kZUlzT2ZUeXBlKShjb25zdCBOb2RlKiksIEVkaXRpbmdCb3Vu
ZGFyeUNyb3NzaW5nUnVsZSBydWxlLCBOb2RlKiBzdGF5V2l0aGluKQogewogICAgIE5vZGUqIGhp
Z2hlc3QgPSBudWxscHRyOwotICAgIGF1dG8qIHJvb3QgPSBydWxlID09IENhbm5vdENyb3NzRWRp
dGluZ0JvdW5kYXJ5ID8gaGlnaGVzdEVkaXRhYmxlUm9vdChwKSA6IDA7Ci0gICAgZm9yIChOb2Rl
KiBuID0gcC5jb250YWluZXJOb2RlKCk7IG4gJiYgbiAhPSBzdGF5V2l0aGluOyBuID0gbi0+cGFy
ZW50Tm9kZSgpKSB7CisgICAgYXV0byogcm9vdCA9IHJ1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5n
Qm91bmRhcnkgPyBoaWdoZXN0RWRpdGFibGVSb290KHBvc2l0aW9uKSA6IG51bGxwdHI7CisgICAg
Zm9yIChOb2RlKiBuID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpOyBuICYmIG4gIT0gc3RheVdp
dGhpbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAocm9vdCAmJiAhbi0+aGFz
RWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChub2Rl
SXNPZlR5cGUobikpCkBAIC02OTMsNyArNzAzLDcgQEAgTm9kZSogZW5jbG9zaW5nTGlzdENoaWxk
KE5vZGUgKm5vZGUpCiAgICAgCiAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgaW5hcHBy
b3ByaWF0ZWx5IG5hbWVkIHNpbmNlIGl0IHN0YXJ0cyB3aXRoIG5vZGUgaW5zdGVhZCBvZiBub2Rl
LT5wYXJlbnROb2RlKCkKICAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBuICYmIG4tPnBhcmVudE5v
ZGUoKTsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShs
aVRhZykgfHwgKGlzTGlzdEVsZW1lbnQobi0+cGFyZW50Tm9kZSgpKSAmJiBuICE9IHJvb3QpKQor
ICAgICAgICBpZiAoaXM8SFRNTExJRWxlbWVudD4oKm4pIHx8IChpc0xpc3RIVE1MRWxlbWVudChu
LT5wYXJlbnROb2RlKCkpICYmIG4gIT0gcm9vdCkpCiAgICAgICAgICAgICByZXR1cm4gbjsKICAg
ICAgICAgaWYgKG4gPT0gcm9vdCB8fCBpc1RhYmxlQ2VsbChuKSkKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtNzA2LDcgKzcxNiw3IEBAIHN0YXRpYyBIVE1MRWxlbWVudCogZW1iZWRk
ZWRTdWJsaXN0KE5vZGUqIGxpc3RJdGVtKQogewogICAgIC8vIENoZWNrIHRoZSBET00gc28gdGhh
dCB3ZSdsbCBmaW5kIGNvbGxhcHNlZCBzdWJsaXN0cyB3aXRob3V0IHJlbmRlcmVycy4KICAgICBm
b3IgKE5vZGUqIG4gPSBsaXN0SXRlbS0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxp
bmcoKSkgewotICAgICAgICBpZiAoaXNMaXN0RWxlbWVudChuKSkKKyAgICAgICAgaWYgKGlzTGlz
dEhUTUxFbGVtZW50KG4pKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxFbGVtZW50
PihuKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03MTYsNyArNzI2LDcgQEAgc3Rh
dGljIE5vZGUqIGFwcGVuZGVkU3VibGlzdChOb2RlKiBsaXN0SXRlbSkKIHsKICAgICAvLyBDaGVj
ayB0aGUgRE9NIHNvIHRoYXQgd2UnbGwgZmluZCBjb2xsYXBzZWQgc3VibGlzdHMgd2l0aG91dCBy
ZW5kZXJlcnMuCiAgICAgZm9yIChOb2RlKiBuID0gbGlzdEl0ZW0tPm5leHRTaWJsaW5nKCk7IG47
IG4gPSBuLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChpc0xpc3RFbGVtZW50KG4pKQor
ICAgICAgICBpZiAoaXNMaXN0SFRNTEVsZW1lbnQobikpCiAgICAgICAgICAgICByZXR1cm4gZG93
bmNhc3Q8SFRNTEVsZW1lbnQ+KG4pOwogICAgICAgICBpZiAoaXNMaXN0SXRlbShsaXN0SXRlbSkp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTk5NCw5ICsxMDA0LDEwIEBAIGludCBj
YXJldE1pbk9mZnNldChjb25zdCBOb2RlJiBub2RlKQogaW50IGNhcmV0TWF4T2Zmc2V0KGNvbnN0
IE5vZGUmIG5vZGUpCiB7CiAgICAgLy8gRm9yIHJlbmRlcmVkIHRleHQgbm9kZXMsIHJldHVybiB0
aGUgbGFzdCBwb3NpdGlvbiB0aGF0IGEgY2FyZXQgY291bGQgb2NjdXB5LgotICAgIGlmIChub2Rl
LmlzVGV4dE5vZGUoKSAmJiBub2RlLnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBub2RlLnJl
bmRlcmVyKCktPmNhcmV0TWF4T2Zmc2V0KCk7Ci0gICAgLy8gRm9yIGNvbnRhaW5lcnMgcmV0dXJu
IHRoZSBudW1iZXIgb2YgY2hpbGRyZW4uIEZvciBvdGhlcnMgZG8gdGhlIHNhbWUgYXMgYWJvdmUu
CisgICAgaWYgKGlzPFRleHQ+KG5vZGUpKSB7CisgICAgICAgIGlmIChhdXRvKiByZW5kZXJlciA9
IGRvd25jYXN0PFRleHQ+KG5vZGUpLnJlbmRlcmVyKCkpCisgICAgICAgICAgICByZXR1cm4gcmVu
ZGVyZXItPmNhcmV0TWF4T2Zmc2V0KCk7CisgICAgfQogICAgIHJldHVybiBsYXN0T2Zmc2V0Rm9y
RWRpdGluZyhub2RlKTsKIH0KIApAQCAtMTIxNiw5ICsxMjI3LDkgQEAgRWxlbWVudCogZGVwcmVj
YXRlZEVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoTm9kZSogbm9kZSkKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGNhcmV0UmVuZGVyc0luc2lkZU5vZGUoTm9k
ZSogbm9kZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBjYXJldFJlbmRlcnNJbnNpZGVOb2RlKE5vZGUm
IG5vZGUpCiB7Ci0gICAgcmV0dXJuIG5vZGUgJiYgIWlzUmVuZGVyZWRUYWJsZShub2RlKSAmJiAh
ZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpOworICAgIHJldHVybiAhaXNSZW5kZXJlZFRhYmxl
KCZub2RlKSAmJiAhZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpOwogfQogCiBSZW5kZXJCbG9j
ayogcmVuZGVyZXJGb3JDYXJldFBhaW50aW5nKE5vZGUqIG5vZGUpCkBAIC0xMjMxLDcgKzEyNDIs
NyBAQCBSZW5kZXJCbG9jayogcmVuZGVyZXJGb3JDYXJldFBhaW50aW5nKE5vZGUqIG5vZGUpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gSWYgY2FyZXROb2RlIGlzIGEgYmxvY2sg
YW5kIGNhcmV0IGlzIGluc2lkZSBpdCwgdGhlbiBjYXJldCBzaG91bGQgYmUgcGFpbnRlZCBieSB0
aGF0IGJsb2NrLgotICAgIGJvb2wgcGFpbnRlZEJ5QmxvY2sgPSBpczxSZW5kZXJCbG9ja0Zsb3c+
KCpyZW5kZXJlcikgJiYgY2FyZXRSZW5kZXJzSW5zaWRlTm9kZShub2RlKTsKKyAgICBib29sIHBh
aW50ZWRCeUJsb2NrID0gaXM8UmVuZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpICYmIGNhcmV0UmVu
ZGVyc0luc2lkZU5vZGUoKm5vZGUpOwogICAgIHJldHVybiBwYWludGVkQnlCbG9jayA/IGRvd25j
YXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcikgOiByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAppbmRleCAzZjY3ZTg4MmM3NmUz
NGU3MGQwZmIzMzkyNWEzMWZlZDc2NWIwNjU2Li4wN2IwZjEwNzJlMTMwMDQ0MTc3YmE4NTJlNTM0
OTFiMGUyN2IyNTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0
aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCkBAIC03MSwx
NCArNzEsMTMgQEAgaW50IGNhcmV0TWF4T2Zmc2V0KGNvbnN0IE5vZGUmKTsKIGJvb2wgaGFzRWRp
dGFibGVTdHlsZShjb25zdCBOb2RlJiwgRWRpdGFibGVUeXBlKTsKIGJvb2wgaXNFZGl0YWJsZU5v
ZGUoY29uc3QgTm9kZSYpOwogCi0vLyBGSVhNRTogZWRpdGluZ0lnbm9yZXNDb250ZW50LCBjYW5I
YXZlQ2hpbGRyZW5Gb3JFZGl0aW5nLCBhbmQgaXNBdG9taWNOb2RlIHNob3VsZCBiZSByZW5hbWVk
IHRvIGJldHRlciByZWZsZWN0IHRoZWlyIHVzYWdlLgorLy8gRklYTUU6IGVkaXRpbmdJZ25vcmVz
Q29udGVudCwgY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZywgYW5kIGlzQXRvbWljTm9kZSBzaG91
bGQgYmUgbmFtZWQgdG8gY2xhcmlmeSBob3cgdGhleSBkaWZmZXIuCiAKIC8vIFJldHVybnMgdHJ1
ZSBmb3Igbm9kZXMgdGhhdCBlaXRoZXIgaGF2ZSBubyBjb250ZW50LCBvciBoYXZlIGNvbnRlbnQg
dGhhdCBpcyBpZ25vcmVkIChza2lwcGVkIG92ZXIpIHdoaWxlIGVkaXRpbmcuCiAvLyBUaGVyZSBh
cmUgbm8gVmlzaWJsZVBvc2l0aW9ucyBpbnNpZGUgdGhlc2Ugbm9kZXMuCi1ib29sIGVkaXRpbmdJ
Z25vcmVzQ29udGVudChjb25zdCBOb2RlKik7Ci0KLWJvb2wgY2FuSGF2ZUNoaWxkcmVuRm9yRWRp
dGluZyhjb25zdCBOb2RlKik7Citib29sIGVkaXRpbmdJZ25vcmVzQ29udGVudChjb25zdCBOb2Rl
Jik7CiAKK2Jvb2wgY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhjb25zdCBOb2RlJik7CiBib29s
IGlzQXRvbWljTm9kZShjb25zdCBOb2RlKik7CiAKIGJvb2wgaXNCbG9jayhjb25zdCBOb2RlKik7
CkBAIC05MSw3ICs5MCw3IEBAIGJvb2wgaXNSZW5kZXJlZFRhYmxlKGNvbnN0IE5vZGUqKTsKIGJv
b2wgaXNUYWJsZUNlbGwoY29uc3QgTm9kZSopOwogYm9vbCBpc0VtcHR5VGFibGVDZWxsKGNvbnN0
IE5vZGUqKTsKIGJvb2wgaXNUYWJsZVN0cnVjdHVyZU5vZGUoY29uc3QgTm9kZSopOwotYm9vbCBp
c0xpc3RFbGVtZW50KE5vZGUqKTsKK2Jvb2wgaXNMaXN0SFRNTEVsZW1lbnQoTm9kZSopOwogYm9v
bCBpc0xpc3RJdGVtKGNvbnN0IE5vZGUqKTsKIGJvb2wgaXNOb2RlUmVuZGVyZWQoY29uc3QgTm9k
ZSYpOwogYm9vbCBpc1JlbmRlcmVkQXNOb25JbmxpbmVUYWJsZUltYWdlT3JIUihjb25zdCBOb2Rl
Kik7CkBAIC0xMDEsNyArMTAwLDcgQEAgYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGlu
KE5vZGUmLCBjb25zdCBSYW5nZSYpOwogCiBib29sIGFyZUlkZW50aWNhbEVsZW1lbnRzKGNvbnN0
IE5vZGUmLCBjb25zdCBOb2RlJik7CiAKLWJvb2wgcG9zaXRpb25CZWZvcmVPckFmdGVyTm9kZUlz
Q2FuZGlkYXRlKE5vZGUqKTsKK2Jvb2wgcG9zaXRpb25CZWZvcmVPckFmdGVyTm9kZUlzQ2FuZGlk
YXRlKE5vZGUmKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gUG9zaXRpb24KQEAgLTIyNCwz
MyArMjIzLDI4IEBAIGlubGluZSBib29sIGlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIoVUNo
YXIgY2hhcmFjdGVyKQogICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gJ1wnJyB8fCBjaGFyYWN0ZXIg
PT0gcmlnaHRTaW5nbGVRdW90YXRpb25NYXJrIHx8IGNoYXJhY3RlciA9PSBoZWJyZXdQdW5jdHVh
dGlvbkdlcnNoYXlpbTsKIH0KIAotaW5saW5lIGJvb2wgZWRpdGluZ0lnbm9yZXNDb250ZW50KGNv
bnN0IE5vZGUqIG5vZGUpCi17Ci0gICAgcmV0dXJuICFub2RlLT5jYW5Db250YWluUmFuZ2VFbmRQ
b2ludCgpOwotfQotCi1pbmxpbmUgYm9vbCBjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKGNvbnN0
IE5vZGUqIG5vZGUpCitpbmxpbmUgYm9vbCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoY29uc3QgTm9k
ZSYgbm9kZSkKIHsKLSAgICByZXR1cm4gIW5vZGUtPmlzVGV4dE5vZGUoKSAmJiBub2RlLT5jYW5D
b250YWluUmFuZ2VFbmRQb2ludCgpOworICAgIHJldHVybiAhbm9kZS5jYW5Db250YWluUmFuZ2VF
bmRQb2ludCgpOwogfQogCi1pbmxpbmUgYm9vbCBwb3NpdGlvbkJlZm9yZU9yQWZ0ZXJOb2RlSXND
YW5kaWRhdGUoTm9kZSogbm9kZSkKK2lubGluZSBib29sIHBvc2l0aW9uQmVmb3JlT3JBZnRlck5v
ZGVJc0NhbmRpZGF0ZShOb2RlJiBub2RlKQogewotICAgIHJldHVybiBpc1JlbmRlcmVkVGFibGUo
bm9kZSkgfHwgZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpOworICAgIHJldHVybiBpc1JlbmRl
cmVkVGFibGUoJm5vZGUpIHx8IGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKTsKIH0KIAogaW5s
aW5lIFBvc2l0aW9uIGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShOb2RlKiBub2RlKQogewog
ICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gZWRpdGluZ0ln
bm9yZXNDb250ZW50KG5vZGUpID8gcG9zaXRpb25CZWZvcmVOb2RlKG5vZGUpIDogZmlyc3RQb3Np
dGlvbkluTm9kZShub2RlKTsKKyAgICByZXR1cm4gZWRpdGluZ0lnbm9yZXNDb250ZW50KCpub2Rl
KSA/IHBvc2l0aW9uQmVmb3JlTm9kZShub2RlKSA6IGZpcnN0UG9zaXRpb25Jbk5vZGUobm9kZSk7
CiB9CiAKIGlubGluZSBQb3NpdGlvbiBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKE5vZGUqIG5v
ZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBl
ZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkgPyBwb3NpdGlvbkFmdGVyTm9kZShub2RlKSA6IGxh
c3RQb3NpdGlvbkluTm9kZShub2RlKTsKKyAgICByZXR1cm4gZWRpdGluZ0lnbm9yZXNDb250ZW50
KCpub2RlKSA/IHBvc2l0aW9uQWZ0ZXJOb2RlKG5vZGUpIDogbGFzdFBvc2l0aW9uSW5Ob2RlKG5v
ZGUpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggMzY5ODQwOTE5N2Iw
Y2IzYWVmNjgwNDE2NzUwNzFlYzE1YmMzNjg1YS4uZjRiNzNjNjA5YzdkYjNkMjU5YzRhOTZkYzUx
OGFlY2E2MzJjYTk3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtNDAyLDkgKzQw
MiwxMCBAQCBOb2RlKiBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6dHJhdmVyc2VOb2Rlc0ZvclNl
cmlhbGl6YXRpb24oTm9kZSogc3RhcnROb2RlLCBObwogICAgICAgICBuZXh0ID0gTm9kZVRyYXZl
cnNhbDo6bmV4dCgqbik7CiAgICAgICAgIGJvb2wgb3BlbmVkVGFnID0gZmFsc2U7CiAKLSAgICAg
ICAgaWYgKGlzQmxvY2sobikgJiYgY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhuKSAmJiBuZXh0
ID09IHBhc3RFbmQpCisgICAgICAgIGlmIChpc0Jsb2NrKG4pICYmIGNhbkhhdmVDaGlsZHJlbkZv
ckVkaXRpbmcoKm4pICYmIG5leHQgPT0gcGFzdEVuZCkgewogICAgICAgICAgICAgLy8gRG9uJ3Qg
d3JpdGUgb3V0IGVtcHR5IGJsb2NrIGNvbnRhaW5lcnMgdGhhdCBhcmVuJ3QgZnVsbHkgc2VsZWN0
ZWQuCiAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmICghbi0+
cmVuZGVyZXIoKSAmJiAhZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcoZmlyc3RQb3NpdGlvbkluT3JC
ZWZvcmVOb2RlKG4pLCBzZWxlY3RUYWcpKSB7CiAgICAgICAgICAgICBuZXh0ID0gTm9kZVRyYXZl
cnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm4pOwpAQCAtNTI5LDcgKzUzMCw3IEBAIHN0YXRp
YyBib29sIGlzRWxlbWVudFByZXNlbnRhdGlvbmFsKGNvbnN0IE5vZGUqIG5vZGUpCiAKIHN0YXRp
YyBOb2RlKiBoaWdoZXN0QW5jZXN0b3JUb1dyYXBNYXJrdXAoY29uc3QgUmFuZ2UqIHJhbmdlLCBF
QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBzaG91bGRBbm5vdGF0ZSkKIHsKLSAgICBOb2RlKiBjb21t
b25BbmNlc3RvciA9IHJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpOworICAgIGF1dG8q
IGNvbW1vbkFuY2VzdG9yID0gcmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCk7CiAgICAg
QVNTRVJUKGNvbW1vbkFuY2VzdG9yKTsKICAgICBOb2RlKiBzcGVjaWFsQ29tbW9uQW5jZXN0b3Ig
PSBudWxscHRyOwogICAgIGlmIChzaG91bGRBbm5vdGF0ZSA9PSBBbm5vdGF0ZUZvckludGVyY2hh
bmdlKSB7CkBAIC01MzcsMTAgKzUzOCwxMCBAQCBzdGF0aWMgTm9kZSogaGlnaGVzdEFuY2VzdG9y
VG9XcmFwTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwgRUFubm90YXRlRm9ySW50ZXJjaAogICAg
ICAgICAvLyB0aGUgc3RydWN0dXJlIGFuZCBhcHBlYXJhbmNlIG9mIHRoZSBjb3BpZWQgbWFya3Vw
LgogICAgICAgICBzcGVjaWFsQ29tbW9uQW5jZXN0b3IgPSBhbmNlc3RvclRvUmV0YWluU3RydWN0
dXJlQW5kQXBwZWFyYW5jZShjb21tb25BbmNlc3Rvcik7CiAKLSAgICAgICAgaWYgKE5vZGUqIHBh
cmVudExpc3ROb2RlID0gZW5jbG9zaW5nTm9kZU9mVHlwZShmaXJzdFBvc2l0aW9uSW5PckJlZm9y
ZU5vZGUocmFuZ2UtPmZpcnN0Tm9kZSgpKSwgaXNMaXN0SXRlbSkpIHsKLSAgICAgICAgICAgIGlm
ICghZWRpdGluZ0lnbm9yZXNDb250ZW50KHBhcmVudExpc3ROb2RlKSAmJiBXZWJDb3JlOjphcmVS
YW5nZXNFcXVhbChWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUo
cGFyZW50TGlzdE5vZGUpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHJhbmdlKSkgeworICAg
ICAgICBpZiAoYXV0byogcGFyZW50TGlzdE5vZGUgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4oZW5j
bG9zaW5nTm9kZU9mVHlwZShmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUocmFuZ2UtPmZpcnN0
Tm9kZSgpKSwgaXNMaXN0SXRlbSkpKSB7CisgICAgICAgICAgICBpZiAoIWVkaXRpbmdJZ25vcmVz
Q29udGVudCgqcGFyZW50TGlzdE5vZGUpICYmIFdlYkNvcmU6OmFyZVJhbmdlc0VxdWFsKFZpc2li
bGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShwYXJlbnRMaXN0Tm9kZSku
dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgcmFuZ2UpKSB7CiAgICAgICAgICAgICAgICAgc3Bl
Y2lhbENvbW1vbkFuY2VzdG9yID0gcGFyZW50TGlzdE5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICAg
ICAgICAgICAgICB3aGlsZSAoc3BlY2lhbENvbW1vbkFuY2VzdG9yICYmICFpc0xpc3RFbGVtZW50
KHNwZWNpYWxDb21tb25BbmNlc3RvcikpCisgICAgICAgICAgICAgICAgd2hpbGUgKHNwZWNpYWxD
b21tb25BbmNlc3RvciAmJiAhaXNMaXN0SFRNTEVsZW1lbnQoc3BlY2lhbENvbW1vbkFuY2VzdG9y
KSkKICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbENvbW1vbkFuY2VzdG9yID0gc3BlY2lhbENv
bW1vbkFuY2VzdG9yLT5wYXJlbnROb2RlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAg
LTU1MCw3ICs1NTEsNyBAQCBzdGF0aWMgTm9kZSogaGlnaGVzdEFuY2VzdG9yVG9XcmFwTWFya3Vw
KGNvbnN0IFJhbmdlKiByYW5nZSwgRUFubm90YXRlRm9ySW50ZXJjaAogICAgICAgICAgICAgc3Bl
Y2lhbENvbW1vbkFuY2VzdG9yID0gaGlnaGVzdE1haWxCbG9ja3F1b3RlOwogICAgIH0KIAotICAg
IE5vZGUqIGNoZWNrQW5jZXN0b3IgPSBzcGVjaWFsQ29tbW9uQW5jZXN0b3IgPyBzcGVjaWFsQ29t
bW9uQW5jZXN0b3IgOiBjb21tb25BbmNlc3RvcjsKKyAgICBhdXRvKiBjaGVja0FuY2VzdG9yID0g
c3BlY2lhbENvbW1vbkFuY2VzdG9yID8gc3BlY2lhbENvbW1vbkFuY2VzdG9yIDogY29tbW9uQW5j
ZXN0b3I7CiAgICAgaWYgKGNoZWNrQW5jZXN0b3ItPnJlbmRlcmVyKCkgJiYgY2hlY2tBbmNlc3Rv
ci0+cmVuZGVyZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKICAgICAgICAgTm9kZSogbmV3U3Bl
Y2lhbENvbW1vbkFuY2VzdG9yID0gaGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUoZmlyc3RQb3Np
dGlvbkluTm9kZShjaGVja0FuY2VzdG9yKSwgJmlzRWxlbWVudFByZXNlbnRhdGlvbmFsLCBDYW5D
cm9zc0VkaXRpbmdCb3VuZGFyeSwgY2hlY2tBbmNlc3Rvci0+cmVuZGVyZXIoKS0+Y29udGFpbmlu
Z0Jsb2NrKCktPmVsZW1lbnQoKSk7CiAgICAgICAgIGlmIChuZXdTcGVjaWFsQ29tbW9uQW5jZXN0
b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTcGFuRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTcGFuRWxlbWVudC5jcHAKaW5kZXggYjgyMDU4MTRh
YmM0ZGI2ZTFjNDA2NjQwYWQyMmY3YjdiYWYzYjk1Zi4uMTQ0OWYxNzg5ZmQ5Yzc5NDU0MTEzMGI3
MDNjMTU1Nzg1NjFlNWRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3Bh
bkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNwYW5FbGVtZW50LmNw
cApAQCAtMzgsNiArMzgsMTEgQEAgSFRNTFNwYW5FbGVtZW50OjpIVE1MU3BhbkVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQmIGRvY3VtZW4KICAgICBBU1NFUlQo
aGFzVGFnTmFtZShzcGFuVGFnKSk7CiB9CiAKK1JlZjxIVE1MU3BhbkVsZW1lbnQ+IEhUTUxTcGFu
RWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBIVE1MU3BhbkVsZW1lbnQoc3BhblRhZywgZG9jdW1lbnQpKTsKK30KKwogUmVmPEhU
TUxTcGFuRWxlbWVudD4gSFRNTFNwYW5FbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEhUTUxTcGFuRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3BhbkVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFNwYW5FbGVtZW50LmgKaW5kZXggYzI4YmM2OTZjYTNhMzRmZDM1MmNlNDE4YTdiYjBmYWIw
NmQ4ZDYzMy4uYzg1YjBkYzExNjUwMTZiNWI1ZTdjMWRjMTBhOTk1YTBhZWZjNGM5YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3BhbkVsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTcGFuRWxlbWVudC5oCkBAIC0zMiw2ICszMiw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTFNwYW5FbGVtZW50IGZpbmFsIDogcHVibGljIEhUTUxF
bGVtZW50IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEhUTUxTcGFuRWxlbWVudD4gY3JlYXRl
KERvY3VtZW50Jik7CiAgICAgc3RhdGljIFJlZjxIVE1MU3BhbkVsZW1lbnQ+IGNyZWF0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NU2VsZWN0aW9uLmNwcAppbmRleCA0MDllNjZhZTBjZmNiNjVkYTI5MjNiYTQ4ZDMwZTY0MjAw
Yjg1YWQ4Li45MTdkNWU1YWFkZGNlMjUwMzFmZmZlZGIwMmE2MGU3ZjU4N2FjZjI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCkBAIC0zNSwxMiArMzUsOSBAQAogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2Vs
ZWN0aW9uLmgiCi0jaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVk
ZSAiVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiVHJlZVNjb3BlLmgiCiAjaW5jbHVkZSAiaHRt
bGVkaXRpbmcuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGIz
MWM4ZTQ2OTk3NDA5NmRiNWQyMDZmYWEwZmVjZjQyNDY2NzhiNTkuLmZmNDkzM2YxZDRlNjUwZjE3
YTRlMGE1YzkzYjE5YTU4MGJlNjc5NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCkBAIC0zNyw4ICszNyw4IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEJ1dHRvbkVsZW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFy
ZWFFbGVtZW50LmgiCkBAIC00Mzg2LDcgKzQzODYsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6
bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBib3gsIGludCBjYXJldE9mZnNldCwgTGF5b3V0VW5p
dAogICAgIC8vIEZJWE1FOiBCb3JkZXIvcGFkZGluZyBzaG91bGQgYmUgYWRkZWQgZm9yIGFsbCBl
bGVtZW50cyBidXQgdGhpcyB3b3JrYXJvdW5kCiAgICAgLy8gaXMgbmVlZGVkIGJlY2F1c2Ugd2Ug
dXNlIG9mZnNldHMgaW5zaWRlIGFuICJhdG9taWMiIGVsZW1lbnQgdG8gcmVwcmVzZW50CiAgICAg
Ly8gcG9zaXRpb25zIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGVsZW1lbnQgaW4gZGVwcmVjYXRlZCBl
ZGl0aW5nIG9mZnNldHMuCi0gICAgaWYgKGVsZW1lbnQoKSAmJiAhKGVkaXRpbmdJZ25vcmVzQ29u
dGVudChlbGVtZW50KCkpIHx8IGlzUmVuZGVyZWRUYWJsZShlbGVtZW50KCkpKSkgeworICAgIGlm
IChlbGVtZW50KCkgJiYgIShlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKmVsZW1lbnQoKSkgfHwgaXNS
ZW5kZXJlZFRhYmxlKGVsZW1lbnQoKSkpKSB7CiAgICAgICAgIHJlY3Quc2V0WChyZWN0LngoKSAr
IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkpOwogICAgICAgICByZWN0LnNldFkocmVjdC55
KCkgKyBwYWRkaW5nVG9wKCkgKyBib3JkZXJUb3AoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2Vi
S2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQppbmRleCBhNzA0MGE4NzY3Yjhi
YzljM2I2YTExM2QxMThhOTQ5OWU0MDJjZjQ2Li4yNzkwMzlmNDI2ZmQ3ODY3YjdjZjgxYjRhN2Nl
MjA2OGMxMTc3N2E0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUlPUy5tbQpAQCAtODQ4LDcgKzg0OCw3IEBAIC0gKFdlYlZpc2libGVQb3NpdGlvbiAq
KXByZXZpb3VzVW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRCb3VuZGFyeUZyb21Qb3NpdGlvbjoo
CiAgICAgd2hpbGUgKGN1cnJlbnRWaXNpYmxlUG9zaXRpb24uaXNOb3ROdWxsKCkpIHsKICAgICAg
ICAgV2ViVmlzaWJsZVBvc2l0aW9uICpjdXJyZW50V2ViVmlzaWJsZVBvc2l0aW9uID0gW1dlYlZp
c2libGVQb3NpdGlvbiBfd3JhcFZpc2libGVQb3NpdGlvbjpjdXJyZW50VmlzaWJsZVBvc2l0aW9u
XTsKICAgICAgICAgCi0gICAgICAgIE5vZGUgKmN1cnJlbnROb2RlID0gY3VycmVudFZpc2libGVQ
b3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKTsKKyAgICAgICAgYXV0byogY3Vy
cmVudE5vZGUgPSBjdXJyZW50VmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9y
Tm9kZSgpOwogICAgICAgICBpbnQgbGFzdE9mZnNldCA9IGxhc3RPZmZzZXRGb3JFZGl0aW5nKCpj
dXJyZW50Tm9kZSk7CiAgICAgICAgIEFTU0VSVChsYXN0T2Zmc2V0ID49IDApOwogICAgICAgICBp
ZiAobGFzdE9mZnNldCA8IDApCkBAIC05MDQsNyArOTA0LDcgQEAgLSAoV2ViVmlzaWJsZVBvc2l0
aW9uICopbmV4dFVucGVydHVyYmVkRGljdGF0aW9uUmVzdWx0Qm91bmRhcnlGcm9tUG9zaXRpb246
KFdlYlYKICAgICB3aGlsZSAoY3VycmVudFZpc2libGVQb3NpdGlvbi5pc05vdE51bGwoKSkgewog
ICAgICAgICBXZWJWaXNpYmxlUG9zaXRpb24gKmN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb24gPSBb
V2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBvc2l0aW9uOmN1cnJlbnRWaXNpYmxlUG9z
aXRpb25dOwogICAgICAgICAKLSAgICAgICAgTm9kZSAqY3VycmVudE5vZGUgPSBjdXJyZW50Vmlz
aWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpOworICAgICAgICBhdXRv
KiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRWaXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5h
bmNob3JOb2RlKCk7CiAgICAgICAgIGludCBsYXN0T2Zmc2V0ID0gbGFzdE9mZnNldEZvckVkaXRp
bmcoKmN1cnJlbnROb2RlKTsKICAgICAgICAgQVNTRVJUKGxhc3RPZmZzZXQgPj0gMCk7CiAgICAg
ICAgIGlmIChsYXN0T2Zmc2V0IDwgMCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278978</attachid>
            <date>2016-05-15 13:57:41 -0700</date>
            <delta_ts>2016-05-15 14:01:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157722-20160515135836.patch</filename>
            <type>text/plain</type>
            <size>101551</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwOTI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTM2N2NjMjlmODUwZmNl
Yzc5MzdkYzJmMDhlMDMwZTNmNWQyOWNlMC4uNjE4NDdjMTViYjdhZjliNjliMjA3ZDY4Mjg5ZDVk
NTRhM2ZjNzgyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NCBAQAorMjAxNi0wNS0xNSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW9yZSBDVFRFIGFuZCBvdGhl
ciBjbGVhbnVwcyBmb3IgSFRNTCBlZGl0aW5nIGhlYWRlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3NzIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlc2UgY2hhbmdlcyBhcmUgbW9zdGx5IHRoaW5n
cyBDaHJpcyBhc2tlZCBmb3IgaW4gaGlzIHJldmlldyBvZiBteSBsYXN0IHBhdGNoCisgICAgICAg
IG9yIG90aGVyIHJlbGF0ZWQgc3R5bGUgYW5kIHNtYWxsIGVmZmljaWVuY3kgaW1wcm92ZW1lbnRz
LgorCisgICAgICAgIC0gdXNpbmcgbnVsbHB0ciBpbnN0ZWFkIG9mIDAKKyAgICAgICAgLSB1c2lu
ZyBpczxUZXh0PiBpbnN0ZWFkIG9mIGlzVGV4dE5vZGUgYW5kIGlzPD4gaW5zdGVhZCBvZiBoYXNU
YWdOYW1lCisgICAgICAgIC0gY2hhbmdpbmcgYXJndW1lbnQgdHlwZSBvZiBmdW5jdGlvbnMgbGlr
ZSBlZGl0aW5nSWdub3Jlc0NvbnRlbnQgdG8gYSByZWZlcmVuY2UKKyAgICAgICAgLSB1c2luZyB7
IH0gaW5zdGVhZCBvZiBjb25zdHJ1Y3RvciBjYWxscyBmb3IgY2xhc3NlcyBsaWtlIFBvc2l0aW9u
CisgICAgICAgIC0gdXNpbmcgd29yZHMgbGlrZSBwb3NpdGlvbiBpbnRlYWQgb2YgYWJicmV2aWF0
aW9ucyBsaWtlIHBvcworICAgICAgICAtIHVzaW5nIGF1dG8gcmF0aGVyIHRoYW4gZXhwbGljaXQg
dHlwZXMKKyAgICAgICAgLSByZW5hbWUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHRydWUgZm9yIEhU
TUxFbGVtZW50IHRvIGV4cHJlc3MgdGhhdCBpbiB0aGUgZnVuY3Rpb24gbmFtZXMKKworICAgICAg
ICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuZXh0UmVuZGVyZWRFZGl0
YWJsZSk6IG51bGxwdHIKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzUmVuZGVyZWRFZGl0YWJs
ZSk6IG51bGxwdHIKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpQb3NpdGlvbik6IGlzPD4s
IHJlZmVyZW5jZQorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246Om1vdmVUb1Bvc2l0aW9uKTog
cmVmZXJlbmNlCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6b2Zmc2V0Rm9yUG9zaXRpb25B
ZnRlckFuY2hvcik6IEFkZGVkIGEgbnVsbCBhc3NlcnRpb24gYW5kCisgICAgICAgIG51bGwgY2hl
Y2sgdGhhdCByZXBsYWNlcyB0aGUgb25lIHRoYXQgdXNlZCB0byBiZSBpbiBsYXN0T2Zmc2V0Rm9y
RWRpdGluZy4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpwYXJlbnRBbmNob3JlZEVxdWl2
YWxlbnQpOiB7IH0sIHJlZmVyZW5jZQorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmNvbXB1
dGVOb2RlQmVmb3JlUG9zaXRpb24pOiBudWxscHRyCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlv
bjo6Y29tcHV0ZU5vZGVBZnRlclBvc2l0aW9uKTogbnVsbHB0cgorICAgICAgICAoV2ViQ29yZTo6
UG9zaXRpb246OmFuY2hvclR5cGVGb3JMZWdhY3lFZGl0aW5nUG9zaXRpb24pOiByZWZlcmVuY2UK
KyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpwcmV2aW91cyk6IHJlZmVyZW5jZQorICAgICAg
ICAoV2ViQ29yZTo6UG9zaXRpb246Om5leHQpOiByZWZlcmVuY2UKKyAgICAgICAgKFdlYkNvcmU6
OlBvc2l0aW9uOjpwYXJlbnRFZGl0aW5nQm91bmRhcnkpOiBudWxscHRyCisgICAgICAgIChXZWJD
b3JlOjpQb3NpdGlvbjo6cHJldmlvdXNDaGFyYWN0ZXJQb3NpdGlvbik6IHsgfSwgcG9zIC0+IHBv
c2l0aW9uCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6bmV4dENoYXJhY3RlclBvc2l0aW9u
KTogeyB9LCBwb3MgLT4gcG9zaXRpb24KKyAgICAgICAgKFdlYkNvcmU6OmVuZHNPZk5vZGVBcmVW
aXN1YWxseURpc3RpbmN0UG9zaXRpb25zKTogcmVmZXJlbmNlCisgICAgICAgIChXZWJDb3JlOjpQ
b3NpdGlvbjo6dXBzdHJlYW0pOiB7IH0sIHBvcyAtPiBwb3NpdGlvbgorICAgICAgICAoV2ViQ29y
ZTo6UG9zaXRpb246OmRvd25zdHJlYW0pOiB7IH0sIHBvcyAtPiBwb3NpdGlvbgorICAgICAgICAo
V2ViQ29yZTo6UG9zaXRpb246OnJvb3RVc2VyU2VsZWN0QWxsRm9yTm9kZSk6IG51bGxwdHIKKyAg
ICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjppc0NhbmRpZGF0ZSk6IGF1dG8sIHJlZmVyZW5jZSwg
aXM8PgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnJlbmRlcnNJbkRpZmZlcmVudFBvc2l0
aW9uKTogcG9zIC0+IHBvc2l0aW9uLCBhdXRvLCBpczw+CisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbjo6bGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbik6IHsgfSwgaXM8PgorICAgICAgICAoV2Vi
Q29yZTo6UG9zaXRpb246OnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKTogeyB9CisgICAgICAg
IChXZWJDb3JlOjpQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KTogcmVmZXJlbmNlCisg
ICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6ZXF1YWxzKTogcmVmZXJlbmNlLCBpczw+CisKKyAg
ICAgICAgKiBkb20vUG9zaXRpb25JdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbkl0ZXJhdG9yOjpvcGVyYXRvciBQb3NpdGlvbik6IHJlZmVyZW5jZQorICAgICAgICAoV2Vi
Q29yZTo6UG9zaXRpb25JdGVyYXRvcjo6aXNDYW5kaWRhdGUpOiByZWZlcmVuY2UKKworICAgICAg
ICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UpOiBpczw+CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJh
bmdlKTogaXM8PiwgcmVmZXJlbmNlCisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFu
ZDo6cmVtb3ZlQ29uZmxpY3RpbmdJbmxpbmVTdHlsZUZyb21SdW4pOiByZWZlcmVuY2UKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZSk6IGF1dG8s
IGlzPD4sIHJlZmVyZW5jZQorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6Om5v
ZGVGdWxseVNlbGVjdGVkKTogaXM8PgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1h
bmQ6Om5vZGVGdWxseVVuc2VsZWN0ZWQpOiBpczw+CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0
eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRTdGFydCk6IGlzPD4KKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50QXRTdGFydCk6IGlzPD4KKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50QXRFbmQpOiBpczw+
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6aXNWYWxpZENhcmV0UG9zaXRp
b25JblRleHROb2RlKTogaXM8PgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6
OnN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQpOiBSZW1vdmVkIHVubmVlZGVkCisgICAgICAg
IGlzPEVsZW1lbnQ+IGNhbGxzIGJlZm9yZSBjYWxsaW5nIGFyZUlkZW50aWNhbEVsZW1lbnRzLgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnBvc2l0aW9uVG9Db21wdXRlSW5s
aW5lU3R5bGVDaGFuZ2UpOiBUaWdodGVuZWQKKyAgICAgICAgdXAgbG9naWMgZm9yIHRoZSBsb29w
IHRvIGF2b2lkIHJlZHVuZGFudCBjaGVja3MuCisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxl
Q29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZUNoYW5nZSk6IGF1dG8KKworICAgICAgICAqIGVkaXRp
bmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
RWRpdENvbW1hbmQ6Omluc2VydE5vZGVBdCk6IHJlZmVyZW5jZQorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGVuZE5vZGUpOiByZWZlcmVuY2UKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6IGlzTGlzdEhUTUxF
bGVtZW50CisKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERl
bGV0ZSk6IHJlZmVyZW5jZQorCisgICAgICAgICogZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQu
Y3BwOiBGaXhlZCBvcmRlciBvZiBpbmNsdWRlcy4KKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2lu
Z0Jsb2NrVG9TcGxpdFRyZWVUbyk6IGlzTGlzdEhUTUxFbGVtZW50CisKKyAgICAgICAgKiBlZGl0
aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSk6IHJlZmVyZW5jZQor
CisgICAgICAgICogZWRpdGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0U3RhcnRFbmRMaXN0Q2hpbGRyZW4pOiBpc0xpc3RIVE1MRWxlbWVudAor
ICAgICAgICAoV2ViQ29yZTo6SW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjpkb0Fw
cGx5KTppc0xpc3RIVE1MRWxlbWVudAorICAgICAgICAoV2ViQ29yZTo6Y2FuRGVjcmVhc2VMaXN0
TGV2ZWwpOmlzTGlzdEhUTUxFbGVtZW50CisKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZU5vZGVD
b21tYW5kLmNwcDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlLgorCisgICAgICAgICogZWRpdGlu
Zy9SZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBs
YWNlTm9kZVdpdGhTcGFuQ29tbWFuZDo6ZG9BcHBseSk6IFVzZSBIVE1MU3BhbkVsZW1lbnQ6OmNy
ZWF0ZS4KKworICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aXNJbnRlcmNoYW5nZU5ld2xpbmVOb2RlKTogaXM8PiwgZG93bmNh
c3Q8PgorICAgICAgICAoV2ViQ29yZTo6aXNJbnRlcmNoYW5nZUNvbnZlcnRlZFNwYWNlU3Bhbik6
IGlzPD4sIGRvd25jYXN0PD4KKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uQXZvaWRpbmdQcmVj
ZWRpbmdOb2Rlcyk6IHBvcyAtPiBwb3NpdGlvbiwgcmVmZXJlbmNlCisgICAgICAgIChXZWJDb3Jl
OjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6IGlzTGlzdEhUTUxFbGVtZW50Cisg
ICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aW5zZXJ0QXNMaXN0SXRl
bXMpOiBpc0xpc3RIVE1MRWxlbWVudAorCisgICAgICAgICogZWRpdGluZy9TcGVsbENoZWNrZXIu
Y3BwOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUuCisKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJ
dGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0
ZXJhdG9yOjphZHZhbmNlKTogcmVmZXJlbmNlCisKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVT
ZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0
aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKTogcmVmZXJlbmNlCisKKyAgICAgICAgKiBlZGl0aW5nL1Zp
c2libGVVbml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0xpbmVQb3NpdGlvbik6
IHJlZmVyZW5jZQorICAgICAgICAoV2ViQ29yZTo6bmV4dExpbmVQb3NpdGlvbik6IHJlZmVyZW5j
ZQorICAgICAgICAoV2ViQ29yZTo6ZmluZFN0YXJ0T2ZQYXJhZ3JhcGgpOiByZWZlcmVuY2UKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbmRFbmRPZlBhcmFncmFwaCk6IHJlZmVyZW5jZQorCisgICAgICAg
ICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYW5IYXZlQ2hp
bGRyZW5Gb3JFZGl0aW5nKTogTW92ZWQgaGVyZSBmcm9tIGhlYWRlciBmaWxlIHNvIHdlIGRvbid0
CisgICAgICAgIGhhdmUgdG8gaW5jbHVkZSAiVGV4dC5oIi4gTm90IGNyaXRpY2FsIHRvIGlubGlu
ZSB0aGlzLgorICAgICAgICAoV2ViQ29yZTo6aXNBdG9taWNOb2RlKTogcmVmZXJlbmNlCisgICAg
ICAgIChXZWJDb3JlOjpsYXN0T2Zmc2V0Rm9yRWRpdGluZyk6IHJlZmVyZW5jZQorICAgICAgICAo
V2ViQ29yZTo6c3RyaW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNwYWNlKTogQ2hhbmdlZCB0byB1c2Ug
U3RyaW5nQnVpbGRlciBpbnN0ZWFkCisgICAgICAgIG9mIFZlY3RvcjxVQ2hhcj4gc28gdGhpcyB3
b24ndCB0dXJuIDgtYml0IHN0cmluZ3MgaW50byAxNi1iaXQgc3RyaW5ncy4gQ2hhbmdlZAorICAg
ICAgICB0byBub3QgdXNlIHRoZSBTdHJpbmdCdWlsZGVyIGF0IGFsbCB1bnRpbCB3ZSBlbmNvdW50
ZXIgYSBjaGFyYWN0ZXIgdGhhdCBuZWVkcworICAgICAgICB0byBiZSBjaGFuZ2VkLgorICAgICAg
ICAoV2ViQ29yZTo6aXNTcGVjaWFsSFRNTEVsZW1lbnQpOiBSZW5hbWVkIHRvIG1ha2UgaXQgY2xl
YXIgdGhhdCBpdCBvbmx5IGNhbiByZXR1cm4KKyAgICAgICAgdHJ1ZSBmb3IgYSBOb2RlIHRoYXQg
aXMgYW4gSFRNTEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpmaXJzdEluU3BlY2lhbEVsZW1l
bnQpOiBpc1NwZWNpYWxIVE1MRWxlbWVudAorICAgICAgICAoV2ViQ29yZTo6bGFzdEluU3BlY2lh
bEVsZW1lbnQpOiBpc1NwZWNpYWxIVE1MRWxlbWVudAorICAgICAgICAoV2ViQ29yZTo6aXNMaXN0
SFRNTEVsZW1lbnQpOiBSZW5hbWVkIHRvIG1ha2UgaXQgY2xlYXIgdGhhdCBpdCBjYW4gb25seSBy
ZXR1cm4KKyAgICAgICAgdHJ1ZSBmb3IgYSBOb2RlIHRoYXQgaXMgYW4gSFRNTEVsZW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjppc0xpc3RJdGVtKTogaXNMaXN0SFRNTEVsZW1lbnQsIGlzPD4KKyAg
ICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ05vZGVPZlR5cGUpOiBwIC0+IHBvc2l0aW9uLCBudWxs
cHRyCisgICAgICAgIChXZWJDb3JlOjpoaWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlwZSk6IHAgLT4g
cG9zaXRpb24KKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0xpc3RDaGlsZCk6IGlzTGlzdEhU
TUxFbGVtZW50LCBpczw+CisgICAgICAgIChXZWJDb3JlOjplbWJlZGRlZFN1Ymxpc3QpOiBpc0xp
c3RIVE1MRWxlbWVudAorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kZWRTdWJsaXN0KTppc0xpc3RI
VE1MRWxlbWVudAorICAgICAgICAoV2ViQ29yZTo6Y2FyZXRNYXhPZmZzZXQpOiBpczw+CisgICAg
ICAgIChXZWJDb3JlOjpjYXJldFJlbmRlcnNJbnNpZGVOb2RlKTogY2hhbmdlZCB0byB0YWtlIGEg
cmVmZXJlbmNlCisgICAgICAgIChXZWJDb3JlOjpyZW5kZXJlckZvckNhcmV0UGFpbnRpbmcpOiBy
ZWZlcmVuY2UKKworICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDogVXBkYXRlZCBmb3Ig
bmFtZSBjaGFuZ2VzIGFuZCB0eXBlIGNoYW5nZXMgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5n
L21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6
dHJhdmVyc2VOb2Rlc0ZvclNlcmlhbGl6YXRpb24pOiByZWZlcmVuY2UKKyAgICAgICAgKFdlYkNv
cmU6OmhpZ2hlc3RBbmNlc3RvclRvV3JhcE1hcmt1cCk6IGF1dG8sIHJlZmVyZW5jZSwgaXNMaXN0
SFRNTEVsZW1lbnQKKworICAgICAgICAqIGh0bWwvSFRNTFNwYW5FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTcGFuRWxlbWVudDo6Y3JlYXRlKTogQWRkZWQgb3ZlcmxvYWQgdGhh
dCBkb2VzIG5vdCByZXF1aXJlIGEgdGFnIG5hbWUuCisgICAgICAgICogaHRtbC9IVE1MU3BhbkVs
ZW1lbnQuaDogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0RPTVNlbGVjdGlvbi5jcHA6IFJlbW92
ZWQgdW5uZWVkZWQgaW5jbHVkZXMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QpOiByZWZlcmVu
Y2UKKwogMjAxNi0wNS0xNSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIwMDkyNS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxv
ZwppbmRleCA4MDE0MDAyNGJlZGU2MWY3N2ZlYzkzMjM4Y2UxNThiNDk1NDRkNjZjLi40MWU3ZjRh
M2YzOGNjMzUwMGFiYzE0MjQ5MzBiMTEyMmVkYmFkNTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2lvcy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTYtMDUtMTUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgor
CisgICAgICAgIE1vcmUgQ1RURSBhbmQgb3RoZXIgY2xlYW51cHMgZm9yIEhUTUwgZWRpdGluZyBo
ZWFkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NzcyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW06CisgICAgICAgICgtW1dlYkZyYW1lIHByZXZp
b3VzVW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRCb3VuZGFyeUZyb21Qb3NpdGlvbjpdKTogYXV0
bworICAgICAgICAoLVtXZWJGcmFtZSBuZXh0VW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRCb3Vu
ZGFyeUZyb21Qb3NpdGlvbjpdKTogYXV0bworCiAyMDE2LTA1LTE0ICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KIAogICAgICAgICBDVFRFIGZvciB0aGUgSFRNTCBlZGl0aW5nIGhlYWRl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKaW5kZXggMzI3MzQ3ZDY3NjE1NmU3NjNiYTFkZWY5ODM1
YzdlYWNmNjgyODA0ZC4uYmE0OWFhYmQ1NjMyYWVjM2NmMzgwY2JmY2E4ZGJkMmUzNGE5NmIyNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSA8c3Rk
aW8uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNv
ZGUvQ2hhcmFjdGVyTmFtZXMuaD4KKwogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjZW5kaWYKQEAgLTc5LDcgKzgwLDcgQEAg
c3RhdGljIE5vZGUqIG5leHRSZW5kZXJlZEVkaXRhYmxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGlm
IChoYXNJbmxpbmVCb3hXcmFwcGVyKCpyZW5kZXJlcikpCiAgICAgICAgICAgICByZXR1cm4gbm9k
ZTsKICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHN0YXRp
YyBOb2RlKiBwcmV2aW91c1JlbmRlcmVkRWRpdGFibGUoTm9kZSogbm9kZSkKQEAgLTkxLDcgKzky
LDcgQEAgc3RhdGljIE5vZGUqIHByZXZpb3VzUmVuZGVyZWRFZGl0YWJsZShOb2RlKiBub2RlKQog
ICAgICAgICBpZiAoaGFzSW5saW5lQm94V3JhcHBlcigqcmVuZGVyZXIpKQogICAgICAgICAgICAg
cmV0dXJuIG5vZGU7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwog
fQogCiBQb3NpdGlvbjo6UG9zaXRpb24oUGFzc1JlZlB0cjxOb2RlPiBhbmNob3JOb2RlLCBMZWdh
Y3lFZGl0aW5nT2Zmc2V0IG9mZnNldCkKQEAgLTExNCw3ICsxMTUsNyBAQCBQb3NpdGlvbjo6UG9z
aXRpb24oUGFzc1JlZlB0cjxOb2RlPiBhbmNob3JOb2RlLCBBbmNob3JUeXBlIGFuY2hvclR5cGUp
CiAgICAgQVNTRVJUKCFtX2FuY2hvck5vZGUgfHwgIW1fYW5jaG9yTm9kZS0+aXNQc2V1ZG9FbGVt
ZW50KCkpOwogICAgIEFTU0VSVChhbmNob3JUeXBlICE9IFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
cik7CiAgICAgQVNTRVJUKCEoKGFuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0JlZm9yZUNoaWxkcmVu
IHx8IGFuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW4pCi0gICAgICAgICYmICht
X2FuY2hvck5vZGUtPmlzVGV4dE5vZGUoKSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobV9hbmNo
b3JOb2RlLmdldCgpKSkpKTsKKyAgICAgICAgJiYgKGlzPFRleHQ+KCptX2FuY2hvck5vZGUpIHx8
IGVkaXRpbmdJZ25vcmVzQ29udGVudCgqbV9hbmNob3JOb2RlKSkpKTsKIH0KIAogUG9zaXRpb246
OlBvc2l0aW9uKFBhc3NSZWZQdHI8Tm9kZT4gYW5jaG9yTm9kZSwgaW50IG9mZnNldCwgQW5jaG9y
VHlwZSBhbmNob3JUeXBlKQpAQCAtMTIzLDcgKzEyNCw3IEBAIFBvc2l0aW9uOjpQb3NpdGlvbihQ
YXNzUmVmUHRyPE5vZGU+IGFuY2hvck5vZGUsIGludCBvZmZzZXQsIEFuY2hvclR5cGUgYW5jaG9y
VHlwCiAgICAgLCBtX2FuY2hvclR5cGUoYW5jaG9yVHlwZSkKICAgICAsIG1faXNMZWdhY3lFZGl0
aW5nUG9zaXRpb24oZmFsc2UpCiB7Ci0gICAgQVNTRVJUKCFtX2FuY2hvck5vZGUgfHwgIWVkaXRp
bmdJZ25vcmVzQ29udGVudChtX2FuY2hvck5vZGUuZ2V0KCkpIHx8ICFtX2FuY2hvck5vZGUtPmlz
U2hhZG93Um9vdCgpKTsKKyAgICBBU1NFUlQoIW1fYW5jaG9yTm9kZSB8fCAhZWRpdGluZ0lnbm9y
ZXNDb250ZW50KCptX2FuY2hvck5vZGUpIHx8ICFtX2FuY2hvck5vZGUtPmlzU2hhZG93Um9vdCgp
KTsKICAgICBBU1NFUlQoIW1fYW5jaG9yTm9kZSB8fCAhbV9hbmNob3JOb2RlLT5pc1BzZXVkb0Vs
ZW1lbnQoKSk7CiAgICAgQVNTRVJUKGFuY2hvclR5cGUgPT0gUG9zaXRpb25Jc09mZnNldEluQW5j
aG9yKTsKIH0KQEAgLTEzOSw3ICsxNDAsNyBAQCBQb3NpdGlvbjo6UG9zaXRpb24oUGFzc1JlZlB0
cjxUZXh0PiB0ZXh0Tm9kZSwgdW5zaWduZWQgb2Zmc2V0KQogCiB2b2lkIFBvc2l0aW9uOjptb3Zl
VG9Qb3NpdGlvbihQYXNzUmVmUHRyPE5vZGU+IG5vZGUsIGludCBvZmZzZXQpCiB7Ci0gICAgQVNT
RVJUKCFlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZS5nZXQoKSkpOworICAgIEFTU0VSVCghZWRp
dGluZ0lnbm9yZXNDb250ZW50KCpub2RlKSk7CiAgICAgQVNTRVJUKGFuY2hvclR5cGUoKSA9PSBQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgfHwgbV9pc0xlZ2FjeUVkaXRpbmdQb3NpdGlvbik7CiAg
ICAgbV9hbmNob3JOb2RlID0gbm9kZTsKICAgICBtX29mZnNldCA9IG9mZnNldDsKQEAgLTIxNCw2
ICsyMTUsOSBAQCBpbnQgUG9zaXRpb246Om9mZnNldEZvclBvc2l0aW9uQWZ0ZXJBbmNob3IoKSBj
b25zdAogewogICAgIEFTU0VSVChtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0FmdGVyQW5jaG9y
IHx8IG1fYW5jaG9yVHlwZSA9PSBQb3NpdGlvbklzQWZ0ZXJDaGlsZHJlbik7CiAgICAgQVNTRVJU
KCFtX2lzTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKTsKKyAgICBBU1NFUlQobV9hbmNob3JOb2RlKTsK
KyAgICBpZiAoIW1fYW5jaG9yTm9kZSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGxh
c3RPZmZzZXRGb3JFZGl0aW5nKCptX2FuY2hvck5vZGUpOwogfQogCkBAIC0yMjIsMzMgKzIyNiwz
MyBAQCBpbnQgUG9zaXRpb246Om9mZnNldEZvclBvc2l0aW9uQWZ0ZXJBbmNob3IoKSBjb25zdAog
UG9zaXRpb24gUG9zaXRpb246OnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2FuY2hvck5vZGUpCi0gICAgICAgIHJldHVybiBQb3NpdGlvbigpOworICAgICAg
ICByZXR1cm4geyB9OwogICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBvbmx5IGJlIG5l
Y2Vzc2FyeSBmb3IgbGVnYWN5IHBvc2l0aW9ucywgYnV0IGlzIGFsc28gbmVlZGVkIGZvciBwb3Np
dGlvbnMgYmVmb3JlIGFuZCBhZnRlciBUYWJsZXMKICAgICBpZiAobV9vZmZzZXQgPD0gMCAmJiAo
bV9hbmNob3JUeXBlICE9IFBvc2l0aW9uSXNBZnRlckFuY2hvciAmJiBtX2FuY2hvclR5cGUgIT0g
UG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW4pKSB7Ci0gICAgICAgIGlmIChmaW5kUGFyZW50KCptX2Fu
Y2hvck5vZGUpICYmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobV9hbmNob3JOb2RlLmdldCgpKSB8
fCBpc1JlbmRlcmVkVGFibGUobV9hbmNob3JOb2RlLmdldCgpKSkpCisgICAgICAgIGlmIChmaW5k
UGFyZW50KCptX2FuY2hvck5vZGUpICYmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKm1fYW5jaG9y
Tm9kZSkgfHwgaXNSZW5kZXJlZFRhYmxlKG1fYW5jaG9yTm9kZS5nZXQoKSkpKQogICAgICAgICAg
ICAgcmV0dXJuIHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKG1fYW5jaG9yTm9kZS5nZXQoKSk7
CiAgICAgICAgIHJldHVybiBQb3NpdGlvbihtX2FuY2hvck5vZGUuZ2V0KCksIDAsIFBvc2l0aW9u
SXNPZmZzZXRJbkFuY2hvcik7CiAgICAgfQogCiAgICAgaWYgKCFtX2FuY2hvck5vZGUtPm9mZnNl
dEluQ2hhcmFjdGVycygpCiAgICAgICAgICYmIChtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0Fm
dGVyQW5jaG9yIHx8IG1fYW5jaG9yVHlwZSA9PSBQb3NpdGlvbklzQWZ0ZXJDaGlsZHJlbiB8fCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vZmZzZXQpID09IG1fYW5jaG9yTm9kZS0+Y291bnRDaGls
ZE5vZGVzKCkpCi0gICAgICAgICYmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobV9hbmNob3JOb2Rl
LmdldCgpKSB8fCBpc1JlbmRlcmVkVGFibGUobV9hbmNob3JOb2RlLmdldCgpKSkKKyAgICAgICAg
JiYgKGVkaXRpbmdJZ25vcmVzQ29udGVudCgqbV9hbmNob3JOb2RlKSB8fCBpc1JlbmRlcmVkVGFi
bGUobV9hbmNob3JOb2RlLmdldCgpKSkKICAgICAgICAgJiYgY29udGFpbmVyTm9kZSgpKSB7CiAg
ICAgICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKG1fYW5jaG9yTm9kZS5nZXQo
KSk7CiAgICAgfQogCi0gICAgcmV0dXJuIFBvc2l0aW9uKGNvbnRhaW5lck5vZGUoKSwgY29tcHV0
ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAg
IHJldHVybiB7IGNvbnRhaW5lck5vZGUoKSwgY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgp
LCBQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgfTsKIH0KIAogTm9kZSogUG9zaXRpb246OmNvbXB1
dGVOb2RlQmVmb3JlUG9zaXRpb24oKSBjb25zdAogewogICAgIGlmICghbV9hbmNob3JOb2RlKQot
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBzd2l0Y2gg
KGFuY2hvclR5cGUoKSkgewogICAgIGNhc2UgUG9zaXRpb25Jc0JlZm9yZUNoaWxkcmVuOgotICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgY2FzZSBQb3NpdGlv
bklzQWZ0ZXJDaGlsZHJlbjoKICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+bGFzdENoaWxk
KCk7CiAgICAgY2FzZSBQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3I6CkBAIC0yNTksMTkgKzI2Mywx
OSBAQCBOb2RlKiBQb3NpdGlvbjo6Y29tcHV0ZU5vZGVCZWZvcmVQb3NpdGlvbigpIGNvbnN0CiAg
ICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUuZ2V0KCk7CiAgICAgfQogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBOb2Rl
KiBQb3NpdGlvbjo6Y29tcHV0ZU5vZGVBZnRlclBvc2l0aW9uKCkgY29uc3QKIHsKICAgICBpZiAo
IW1fYW5jaG9yTm9kZSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgc3dpdGNoIChhbmNob3JUeXBlKCkpIHsKICAgICBjYXNlIFBvc2l0aW9uSXNCZWZv
cmVDaGlsZHJlbjoKICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+Zmlyc3RDaGlsZCgpOwog
ICAgIGNhc2UgUG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW46Ci0gICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBjYXNlIFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjoK
ICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+dHJhdmVyc2VUb0NoaWxkQXQobV9vZmZzZXQp
OwogICAgIGNhc2UgUG9zaXRpb25Jc0JlZm9yZUFuY2hvcjoKQEAgLTI4MCwxMiArMjg0LDEyIEBA
IE5vZGUqIFBvc2l0aW9uOjpjb21wdXRlTm9kZUFmdGVyUG9zaXRpb24oKSBjb25zdAogICAgICAg
ICByZXR1cm4gbV9hbmNob3JOb2RlLT5uZXh0U2libGluZygpOwogICAgIH0KICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAog
UG9zaXRpb246OkFuY2hvclR5cGUgUG9zaXRpb246OmFuY2hvclR5cGVGb3JMZWdhY3lFZGl0aW5n
UG9zaXRpb24oTm9kZSogYW5jaG9yTm9kZSwgaW50IG9mZnNldCkKIHsKLSAgICBpZiAoYW5jaG9y
Tm9kZSAmJiBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoYW5jaG9yTm9kZSkpIHsKKyAgICBpZiAoYW5j
aG9yTm9kZSAmJiBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKmFuY2hvck5vZGUpKSB7CiAgICAgICAg
IGlmIChvZmZzZXQgPT0gMCkKICAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbjo6UG9zaXRpb25J
c0JlZm9yZUFuY2hvcjsKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJB
bmNob3I7CkBAIC0zNDMsMTEgKzM0NywxMSBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6cHJldmlvdXMo
UG9zaXRpb25Nb3ZlVHlwZSBtb3ZlVHlwZSkgY29uc3QKICAgICBpZiAoIXBhcmVudCkKICAgICAg
ICAgcmV0dXJuICp0aGlzOwogCi0gICAgaWYgKHBvc2l0aW9uQmVmb3JlT3JBZnRlck5vZGVJc0Nh
bmRpZGF0ZShub2RlKSkKKyAgICBpZiAocG9zaXRpb25CZWZvcmVPckFmdGVyTm9kZUlzQ2FuZGlk
YXRlKCpub2RlKSkKICAgICAgICAgcmV0dXJuIHBvc2l0aW9uQmVmb3JlTm9kZShub2RlKTsKIAog
ICAgIE5vZGUqIHByZXZpb3VzU2libGluZyA9IG5vZGUtPnByZXZpb3VzU2libGluZygpOwotICAg
IGlmIChwcmV2aW91c1NpYmxpbmcgJiYgcG9zaXRpb25CZWZvcmVPckFmdGVyTm9kZUlzQ2FuZGlk
YXRlKHByZXZpb3VzU2libGluZykpCisgICAgaWYgKHByZXZpb3VzU2libGluZyAmJiBwb3NpdGlv
bkJlZm9yZU9yQWZ0ZXJOb2RlSXNDYW5kaWRhdGUoKnByZXZpb3VzU2libGluZykpCiAgICAgICAg
IHJldHVybiBwb3NpdGlvbkFmdGVyTm9kZShwcmV2aW91c1NpYmxpbmcpOwogCiAgICAgcmV0dXJu
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihwYXJlbnQsIG5vZGUtPmNvbXB1dGVOb2RlSW5k
ZXgoKSk7CkBAIC0zOTAsMTEgKzM5NCwxMSBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bmV4dChQb3Np
dGlvbk1vdmVUeXBlIG1vdmVUeXBlKSBjb25zdAogICAgIGlmICghcGFyZW50KQogICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAKLSAgICBpZiAoaXNSZW5kZXJlZFRhYmxlKG5vZGUpIHx8IGVkaXRpbmdJ
Z25vcmVzQ29udGVudChub2RlKSkKKyAgICBpZiAoaXNSZW5kZXJlZFRhYmxlKG5vZGUpIHx8IGVk
aXRpbmdJZ25vcmVzQ29udGVudCgqbm9kZSkpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbkFmdGVy
Tm9kZShub2RlKTsKIAogICAgIE5vZGUqIG5leHRTaWJsaW5nID0gbm9kZS0+bmV4dFNpYmxpbmco
KTsKLSAgICBpZiAobmV4dFNpYmxpbmcgJiYgcG9zaXRpb25CZWZvcmVPckFmdGVyTm9kZUlzQ2Fu
ZGlkYXRlKG5leHRTaWJsaW5nKSkKKyAgICBpZiAobmV4dFNpYmxpbmcgJiYgcG9zaXRpb25CZWZv
cmVPckFmdGVyTm9kZUlzQ2FuZGlkYXRlKCpuZXh0U2libGluZykpCiAgICAgICAgIHJldHVybiBw
b3NpdGlvbkJlZm9yZU5vZGUobmV4dFNpYmxpbmcpOwogCiAgICAgcmV0dXJuIGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihwYXJlbnQsIG5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSArIDEpOwpA
QCAtNDY4LDExICs0NzIsMTEgQEAgYm9vbCBQb3NpdGlvbjo6YXRFZGl0aW5nQm91bmRhcnkoKSBj
b25zdAogTm9kZSogUG9zaXRpb246OnBhcmVudEVkaXRpbmdCb3VuZGFyeSgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2FuY2hvck5vZGUpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIE5vZGUqIGRvY3VtZW50RWxlbWVudCA9IG1fYW5jaG9yTm9kZS0+ZG9j
dW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgTm9kZSogYm91
bmRhcnkgPSBtX2FuY2hvck5vZGUuZ2V0KCk7CiAgICAgd2hpbGUgKGJvdW5kYXJ5ICE9IGRvY3Vt
ZW50RWxlbWVudCAmJiBib3VuZGFyeS0+bm9uU2hhZG93Qm91bmRhcnlQYXJlbnROb2RlKCkgJiYg
bV9hbmNob3JOb2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkgPT0gYm91bmRhcnktPnBhcmVudE5vZGUo
KS0+aGFzRWRpdGFibGVTdHlsZSgpKQpAQCAtNTM2LDI1ICs1NDAsMjUgQEAgYm9vbCBQb3NpdGlv
bjo6YXRFbmRPZlRyZWUoKSBjb25zdAogUG9zaXRpb24gUG9zaXRpb246OnByZXZpb3VzQ2hhcmFj
dGVyUG9zaXRpb24oRUFmZmluaXR5IGFmZmluaXR5KSBjb25zdAogewogICAgIGlmIChpc051bGwo
KSkKLSAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CisgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICBOb2RlKiBmcm9tUm9vdEVkaXRhYmxlRWxlbWVudCA9IGRlcHJlY2F0ZWROb2RlKCktPnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKTsKIAogICAgIGJvb2wgYXRTdGFydE9mTGluZSA9IGlzU3RhcnRPZkxp
bmUoVmlzaWJsZVBvc2l0aW9uKCp0aGlzLCBhZmZpbml0eSkpOwogICAgIGJvb2wgcmVuZGVyZWQg
PSBpc0NhbmRpZGF0ZSgpOwogICAgIAotICAgIFBvc2l0aW9uIGN1cnJlbnRQb3MgPSAqdGhpczsK
LSAgICB3aGlsZSAoIWN1cnJlbnRQb3MuYXRTdGFydE9mVHJlZSgpKSB7Ci0gICAgICAgIGN1cnJl
bnRQb3MgPSBjdXJyZW50UG9zLnByZXZpb3VzKCk7CisgICAgUG9zaXRpb24gY3VycmVudFBvc2l0
aW9uID0gKnRoaXM7CisgICAgd2hpbGUgKCFjdXJyZW50UG9zaXRpb24uYXRTdGFydE9mVHJlZSgp
KSB7CisgICAgICAgIGN1cnJlbnRQb3NpdGlvbiA9IGN1cnJlbnRQb3NpdGlvbi5wcmV2aW91cygp
OwogCi0gICAgICAgIGlmIChjdXJyZW50UG9zLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKSAhPSBmcm9tUm9vdEVkaXRhYmxlRWxlbWVudCkKKyAgICAgICAgaWYgKGN1cnJl
bnRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gZnJv
bVJvb3RFZGl0YWJsZUVsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAgICAg
ICAgaWYgKGF0U3RhcnRPZkxpbmUgfHwgIXJlbmRlcmVkKSB7Ci0gICAgICAgICAgICBpZiAoY3Vy
cmVudFBvcy5pc0NhbmRpZGF0ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UG9z
OwotICAgICAgICB9IGVsc2UgaWYgKHJlbmRlcnNJbkRpZmZlcmVudFBvc2l0aW9uKGN1cnJlbnRQ
b3MpKQotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3M7CisgICAgICAgICAgICBpZiAoY3Vy
cmVudFBvc2l0aW9uLmlzQ2FuZGlkYXRlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJl
bnRQb3NpdGlvbjsKKyAgICAgICAgfSBlbHNlIGlmIChyZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlv
bihjdXJyZW50UG9zaXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsK
ICAgICB9CiAgICAgCiAgICAgcmV0dXJuICp0aGlzOwpAQCAtNTY0LDI1ICs1NjgsMjUgQEAgUG9z
aXRpb24gUG9zaXRpb246OnByZXZpb3VzQ2hhcmFjdGVyUG9zaXRpb24oRUFmZmluaXR5IGFmZmlu
aXR5KSBjb25zdAogUG9zaXRpb24gUG9zaXRpb246Om5leHRDaGFyYWN0ZXJQb3NpdGlvbihFQWZm
aW5pdHkgYWZmaW5pdHkpIGNvbnN0CiB7CiAgICAgaWYgKGlzTnVsbCgpKQotICAgICAgICByZXR1
cm4gUG9zaXRpb24oKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIE5vZGUqIGZyb21Sb290
RWRpdGFibGVFbGVtZW50ID0gZGVwcmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
OwogCi0gICAgYm9vbCBhdEVuZE9mTGluZSA9IGlzRW5kT2ZMaW5lKFZpc2libGVQb3NpdGlvbigq
dGhpcywgYWZmaW5pdHkpKTsKKyAgICBib29sIGF0RW5kT2ZMaW5lID0gaXNFbmRPZkxpbmUoeyAq
dGhpcywgYWZmaW5pdHkgfSk7CiAgICAgYm9vbCByZW5kZXJlZCA9IGlzQ2FuZGlkYXRlKCk7CiAg
ICAgCi0gICAgUG9zaXRpb24gY3VycmVudFBvcyA9ICp0aGlzOwotICAgIHdoaWxlICghY3VycmVu
dFBvcy5hdEVuZE9mVHJlZSgpKSB7Ci0gICAgICAgIGN1cnJlbnRQb3MgPSBjdXJyZW50UG9zLm5l
eHQoKTsKKyAgICBQb3NpdGlvbiBjdXJyZW50UG9zaXRpb24gPSAqdGhpczsKKyAgICB3aGlsZSAo
IWN1cnJlbnRQb3NpdGlvbi5hdEVuZE9mVHJlZSgpKSB7CisgICAgICAgIGN1cnJlbnRQb3NpdGlv
biA9IGN1cnJlbnRQb3NpdGlvbi5uZXh0KCk7CiAKLSAgICAgICAgaWYgKGN1cnJlbnRQb3MuZGVw
cmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IGZyb21Sb290RWRpdGFibGVF
bGVtZW50KQorICAgICAgICBpZiAoY3VycmVudFBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPnJv
b3RFZGl0YWJsZUVsZW1lbnQoKSAhPSBmcm9tUm9vdEVkaXRhYmxlRWxlbWVudCkKICAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKIAogICAgICAgICBpZiAoYXRFbmRPZkxpbmUgfHwgIXJlbmRlcmVk
KSB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudFBvcy5pc0NhbmRpZGF0ZSgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBjdXJyZW50UG9zOwotICAgICAgICB9IGVsc2UgaWYgKHJlbmRlcnNJbkRp
ZmZlcmVudFBvc2l0aW9uKGN1cnJlbnRQb3MpKQotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQ
b3M7CisgICAgICAgICAgICBpZiAoY3VycmVudFBvc2l0aW9uLmlzQ2FuZGlkYXRlKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsKKyAgICAgICAgfSBlbHNlIGlmIChy
ZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlvbihjdXJyZW50UG9zaXRpb24pKQorICAgICAgICAgICAg
cmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuICp0aGlzOwpA
QCAtNjA1LDcgKzYwOSw3IEBAIHN0YXRpYyBib29sIGVuZHNPZk5vZGVBcmVWaXN1YWxseURpc3Rp
bmN0UG9zaXRpb25zKE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICAvLyBUaGVyZSBpcyBhIFZpc2libGVQb3NpdGlvbiBpbnNpZGUgYW4gZW1wdHkgaW5saW5lLWJs
b2NrIGNvbnRhaW5lci4KLSAgICByZXR1cm4gbm9kZS0+cmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgp
ICYmIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcobm9kZSkgJiYgZG93bmNhc3Q8UmVuZGVyQm94
Pigqbm9kZS0+cmVuZGVyZXIoKSkuaGVpZ2h0KCkgJiYgIW5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAg
ICByZXR1cm4gbm9kZS0+cmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgpICYmIGNhbkhhdmVDaGlsZHJl
bkZvckVkaXRpbmcoKm5vZGUpICYmIGRvd25jYXN0PFJlbmRlckJveD4oKm5vZGUtPnJlbmRlcmVy
KCkpLmhlaWdodCgpICYmICFub2RlLT5maXJzdENoaWxkKCk7CiB9CiAKIHN0YXRpYyBOb2RlKiBl
bmNsb3NpbmdWaXN1YWxCb3VuZGFyeShOb2RlKiBub2RlKQpAQCAtNjM5LDYwICs2NDMsNjAgQEAg
UG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBy
dWxlKSBjb25zdAogewogICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IGRlcHJlY2F0ZWROb2RlKCk7CiAg
ICAgaWYgKCFzdGFydE5vZGUpCi0gICAgICAgIHJldHVybiBQb3NpdGlvbigpOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIAogICAgIC8vIGl0ZXJhdGUgYmFja3dhcmQgZnJvbSB0aGVyZSwgbG9v
a2luZyBmb3IgYSBxdWFsaWZpZWQgcG9zaXRpb24KICAgICBOb2RlKiBib3VuZGFyeSA9IGVuY2xv
c2luZ1Zpc3VhbEJvdW5kYXJ5KHN0YXJ0Tm9kZSk7CiAgICAgLy8gRklYTUU6IFBvc2l0aW9uSXRl
cmF0b3Igc2hvdWxkIHJlc3BlY3QgQmVmb3JlIGFuZCBBZnRlciBwb3NpdGlvbnMuCiAgICAgUG9z
aXRpb25JdGVyYXRvciBsYXN0VmlzaWJsZSA9IG1fYW5jaG9yVHlwZSA9PSBQb3NpdGlvbklzQWZ0
ZXJBbmNob3IgPyBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9hbmNob3JOb2RlLmdldCgp
LCBjYXJldE1heE9mZnNldCgqbV9hbmNob3JOb2RlKSkgOiAqdGhpczsKLSAgICBQb3NpdGlvbkl0
ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0VmlzaWJsZTsKKyAgICBQb3NpdGlvbkl0ZXJhdG9yIGN1
cnJlbnRQb3NpdGlvbiA9IGxhc3RWaXNpYmxlOwogICAgIGJvb2wgc3RhcnRFZGl0YWJsZSA9IHN0
YXJ0Tm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpOwogICAgIE5vZGUqIGxhc3ROb2RlID0gc3RhcnRO
b2RlOwogICAgIGJvb2wgYm91bmRhcnlDcm9zc2VkID0gZmFsc2U7Ci0gICAgZm9yICg7ICFjdXJy
ZW50UG9zLmF0U3RhcnQoKTsgY3VycmVudFBvcy5kZWNyZW1lbnQoKSkgewotICAgICAgICBOb2Rl
KiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRQb3Mubm9kZSgpOworICAgIGZvciAoOyAhY3VycmVudFBv
c2l0aW9uLmF0U3RhcnQoKTsgY3VycmVudFBvc2l0aW9uLmRlY3JlbWVudCgpKSB7CisgICAgICAg
IGF1dG8mIGN1cnJlbnROb2RlID0gKmN1cnJlbnRQb3NpdGlvbi5ub2RlKCk7CiAgICAgICAgIAog
ICAgICAgICAvLyBEb24ndCBjaGVjayBmb3IgYW4gZWRpdGFiaWxpdHkgY2hhbmdlIGlmIHdlIGhh
dmVuJ3QgbW92ZWQgdG8gYSBkaWZmZXJlbnQgbm9kZSwKICAgICAgICAgLy8gdG8gYXZvaWQgdGhl
IGV4cGVuc2Ugb2YgY29tcHV0aW5nIGhhc0VkaXRhYmxlU3R5bGUoKS4KLSAgICAgICAgaWYgKGN1
cnJlbnROb2RlICE9IGxhc3ROb2RlKSB7CisgICAgICAgIGlmICgmY3VycmVudE5vZGUgIT0gbGFz
dE5vZGUpIHsKICAgICAgICAgICAgIC8vIERvbid0IGNoYW5nZSBlZGl0YWJpbGl0eS4KLSAgICAg
ICAgICAgIGJvb2wgY3VycmVudEVkaXRhYmxlID0gY3VycmVudE5vZGUtPmhhc0VkaXRhYmxlU3R5
bGUoKTsKKyAgICAgICAgICAgIGJvb2wgY3VycmVudEVkaXRhYmxlID0gY3VycmVudE5vZGUuaGFz
RWRpdGFibGVTdHlsZSgpOwogICAgICAgICAgICAgaWYgKHN0YXJ0RWRpdGFibGUgIT0gY3VycmVu
dEVkaXRhYmxlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHJ1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0
aW5nQm91bmRhcnkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IGJvdW5kYXJ5Q3Jvc3NlZCA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsYXN0
Tm9kZSA9IGN1cnJlbnROb2RlOworICAgICAgICAgICAgbGFzdE5vZGUgPSAmY3VycmVudE5vZGU7
CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiB3ZSd2ZSBtb3ZlZCB0byBhIHBvc2l0aW9uIHRo
YXQgaXMgdmlzdWFsbHkgZGlzdGluY3QsIHJldHVybiB0aGUgbGFzdCBzYXZlZCBwb3NpdGlvbi4g
VGhlcmUgCiAgICAgICAgIC8vIGlzIGNvZGUgYmVsb3cgdGhhdCB0ZXJtaW5hdGVzIGVhcmx5IGlm
IHdlJ3JlICphYm91dCogdG8gbW92ZSB0byBhIHZpc3VhbGx5IGRpc3RpbmN0IHBvc2l0aW9uLgot
ICAgICAgICBpZiAoZW5kc09mTm9kZUFyZVZpc3VhbGx5RGlzdGluY3RQb3NpdGlvbnMoY3VycmVu
dE5vZGUpICYmIGN1cnJlbnROb2RlICE9IGJvdW5kYXJ5KQorICAgICAgICBpZiAoZW5kc09mTm9k
ZUFyZVZpc3VhbGx5RGlzdGluY3RQb3NpdGlvbnMoJmN1cnJlbnROb2RlKSAmJiAmY3VycmVudE5v
ZGUgIT0gYm91bmRhcnkpCiAgICAgICAgICAgICByZXR1cm4gbGFzdFZpc2libGU7CiAKICAgICAg
ICAgLy8gc2tpcCBwb3NpdGlvbiBpbiB1bnJlbmRlcmVkIG9yIGludmlzaWJsZSBub2RlCi0gICAg
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjdXJyZW50Tm9kZS0+cmVuZGVyZXIoKTsKKyAg
ICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGN1cnJlbnROb2RlLnJlbmRlcmVyKCk7CiAg
ICAgICAgIGlmICghcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxlKCkudmlzaWJpbGl0eSgpICE9
IFZJU0lCTEUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgIGlmIChydWxlID09IENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5ICYmIGJvdW5kYXJ5Q3Jvc3Nl
ZCkgewotICAgICAgICAgICAgbGFzdFZpc2libGUgPSBjdXJyZW50UG9zOworICAgICAgICAgICAg
bGFzdFZpc2libGUgPSBjdXJyZW50UG9zaXRpb247CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgLy8gdHJhY2sgbGFzdCB2aXNpYmxlIHN0cmVhbWVyIHBv
c2l0aW9uCi0gICAgICAgIGlmIChpc1N0cmVhbWVyKGN1cnJlbnRQb3MpKQotICAgICAgICAgICAg
bGFzdFZpc2libGUgPSBjdXJyZW50UG9zOworICAgICAgICBpZiAoaXNTdHJlYW1lcihjdXJyZW50
UG9zaXRpb24pKQorICAgICAgICAgICAgbGFzdFZpc2libGUgPSBjdXJyZW50UG9zaXRpb247CiAg
ICAgICAgIAogICAgICAgICAvLyBEb24ndCBtb3ZlIHBhc3QgYSBwb3NpdGlvbiB0aGF0IGlzIHZp
c3VhbGx5IGRpc3RpbmN0LiAgV2UgY291bGQgcmVseSBvbiBjb2RlIGFib3ZlIHRvIHRlcm1pbmF0
ZSBhbmQgCiAgICAgICAgIC8vIHJldHVybiBsYXN0VmlzaWJsZSBvbiB0aGUgbmV4dCBpdGVyYXRp
b24sIGJ1dCB3ZSB0ZXJtaW5hdGUgZWFybHkgdG8gYXZvaWQgZG9pbmcgYSBjb21wdXRlTm9kZUlu
ZGV4KCkgY2FsbC4KLSAgICAgICAgaWYgKGVuZHNPZk5vZGVBcmVWaXN1YWxseURpc3RpbmN0UG9z
aXRpb25zKGN1cnJlbnROb2RlKSAmJiBjdXJyZW50UG9zLmF0U3RhcnRPZk5vZGUoKSkKKyAgICAg
ICAgaWYgKGVuZHNPZk5vZGVBcmVWaXN1YWxseURpc3RpbmN0UG9zaXRpb25zKCZjdXJyZW50Tm9k
ZSkgJiYgY3VycmVudFBvc2l0aW9uLmF0U3RhcnRPZk5vZGUoKSkKICAgICAgICAgICAgIHJldHVy
biBsYXN0VmlzaWJsZTsKIAogICAgICAgICAvLyBSZXR1cm4gcG9zaXRpb24gYWZ0ZXIgdGFibGVz
IGFuZCBub2RlcyB3aGljaCBoYXZlIGNvbnRlbnQgdGhhdCBjYW4gYmUgaWdub3JlZC4KLSAgICAg
ICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChjdXJyZW50Tm9kZSkgfHwgaXNSZW5kZXJlZFRh
YmxlKGN1cnJlbnROb2RlKSkgewotICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3MuYXRFbmRPZk5v
ZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25BZnRlck5vZGUoY3VycmVudE5v
ZGUpOworICAgICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KGN1cnJlbnROb2RlKSB8fCBp
c1JlbmRlcmVkVGFibGUoJmN1cnJlbnROb2RlKSkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRQ
b3NpdGlvbi5hdEVuZE9mTm9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbkFm
dGVyTm9kZSgmY3VycmVudE5vZGUpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
IApAQCAtNzAzLDIxICs3MDcsMjEgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKEVkaXRp
bmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlKSBjb25zdAogCiAgICAgICAgICAgICBpZiAoIXRl
eHRSZW5kZXJlci5maXJzdFRleHRCb3goKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIGlmIChjdXJyZW50Tm9kZSAhPSBzdGFydE5vZGUpIHsKKyAgICAgICAgICAgIGlm
ICgmY3VycmVudE5vZGUgIT0gc3RhcnROb2RlKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBh
c3NlcnRpb24gZmlyZXMgaW4gbGF5b3V0IHRlc3RzIGluIHRoZSBjYXNlLXRyYW5zZm9ybS5odG1s
IHRlc3QgYmVjYXVzZQogICAgICAgICAgICAgICAgIC8vIG9mIGEgbWl4LXVwIGJldHdlZW4gb2Zm
c2V0cyBpbiB0aGUgdGV4dCBpbiB0aGUgRE9NIHRyZWUgd2l0aCB0ZXh0IGluIHRoZQogICAgICAg
ICAgICAgICAgIC8vIHJlbmRlciB0cmVlIHdoaWNoIGNhbiBoYXZlIGEgZGlmZmVyZW50IGxlbmd0
aCBkdWUgdG8gY2FzZSB0cmFuc2Zvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAvLyBVbnRpbCB3
ZSByZXNvbHZlIHRoYXQsIGRpc2FibGUgdGhpcyBzbyB3ZSBjYW4gcnVuIHRoZSBsYXlvdXQgdGVz
dHMhCiAgICAgICAgICAgICAgICAgLy9BU1NFUlQoY3VycmVudE9mZnNldCA+PSByZW5kZXJlci0+
Y2FyZXRNYXhPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVk
aXRpbmdQb3NpdGlvbihjdXJyZW50Tm9kZSwgcmVuZGVyZXItPmNhcmV0TWF4T2Zmc2V0KCkpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oJmN1cnJl
bnROb2RlLCByZW5kZXJlci0+Y2FyZXRNYXhPZmZzZXQoKSk7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHRleHRPZmZzZXQgPSBjdXJyZW50UG9zLm9mZnNldEluTGVhZk5v
ZGUoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRleHRPZmZzZXQgPSBjdXJyZW50UG9zaXRpb24u
b2Zmc2V0SW5MZWFmTm9kZSgpOwogICAgICAgICAgICAgYXV0byBsYXN0VGV4dEJveCA9IHRleHRS
ZW5kZXJlci5sYXN0VGV4dEJveCgpOwogICAgICAgICAgICAgZm9yIChhdXRvKiBib3ggPSB0ZXh0
UmVuZGVyZXIuZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKHRleHRPZmZzZXQgPD0gYm94LT5zdGFydCgpICsgYm94LT5s
ZW4oKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAodGV4dE9mZnNldCA+IGJveC0+c3RhcnQo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UG9zOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogCkBAIC03NDcsNyArNzUxLDcgQEAgUG9z
aXRpb24gUG9zaXRpb246OnVwc3RyZWFtKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxl
KSBjb25zdAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChjb250aW51
ZXNPbk5leHRMaW5lKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFBvczsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KQEAgLTc2Niw2NSArNzcwLDY1IEBAIFBvc2l0aW9uIFBvc2l0aW9u
Ojpkb3duc3RyZWFtKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlKSBjb25zdAogewog
ICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IGRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFzdGFydE5v
ZGUpCi0gICAgICAgIHJldHVybiBQb3NpdGlvbigpOworICAgICAgICByZXR1cm4geyB9OwogCiAg
ICAgLy8gaXRlcmF0ZSBmb3J3YXJkIGZyb20gdGhlcmUsIGxvb2tpbmcgZm9yIGEgcXVhbGlmaWVk
IHBvc2l0aW9uCiAgICAgTm9kZSogYm91bmRhcnkgPSBlbmNsb3NpbmdWaXN1YWxCb3VuZGFyeShz
dGFydE5vZGUpOwogICAgIC8vIEZJWE1FOiBQb3NpdGlvbkl0ZXJhdG9yIHNob3VsZCByZXNwZWN0
IEJlZm9yZSBhbmQgQWZ0ZXIgcG9zaXRpb25zLgogICAgIFBvc2l0aW9uSXRlcmF0b3IgbGFzdFZp
c2libGUgPSBtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0FmdGVyQW5jaG9yID8gY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKG1fYW5jaG9yTm9kZS5nZXQoKSwgY2FyZXRNYXhPZmZzZXQoKm1f
YW5jaG9yTm9kZSkpIDogKnRoaXM7Ci0gICAgUG9zaXRpb25JdGVyYXRvciBjdXJyZW50UG9zID0g
bGFzdFZpc2libGU7CisgICAgUG9zaXRpb25JdGVyYXRvciBjdXJyZW50UG9zaXRpb24gPSBsYXN0
VmlzaWJsZTsKICAgICBib29sIHN0YXJ0RWRpdGFibGUgPSBzdGFydE5vZGUtPmhhc0VkaXRhYmxl
U3R5bGUoKTsKICAgICBOb2RlKiBsYXN0Tm9kZSA9IHN0YXJ0Tm9kZTsKICAgICBib29sIGJvdW5k
YXJ5Q3Jvc3NlZCA9IGZhbHNlOwotICAgIGZvciAoOyAhY3VycmVudFBvcy5hdEVuZCgpOyBjdXJy
ZW50UG9zLmluY3JlbWVudCgpKSB7ICAgCi0gICAgICAgIE5vZGUqIGN1cnJlbnROb2RlID0gY3Vy
cmVudFBvcy5ub2RlKCk7CisgICAgZm9yICg7ICFjdXJyZW50UG9zaXRpb24uYXRFbmQoKTsgY3Vy
cmVudFBvc2l0aW9uLmluY3JlbWVudCgpKSB7CisgICAgICAgIGF1dG8mIGN1cnJlbnROb2RlID0g
KmN1cnJlbnRQb3NpdGlvbi5ub2RlKCk7CiAgICAgICAgIAogICAgICAgICAvLyBEb24ndCBjaGVj
ayBmb3IgYW4gZWRpdGFiaWxpdHkgY2hhbmdlIGlmIHdlIGhhdmVuJ3QgbW92ZWQgdG8gYSBkaWZm
ZXJlbnQgbm9kZSwKICAgICAgICAgLy8gdG8gYXZvaWQgdGhlIGV4cGVuc2Ugb2YgY29tcHV0aW5n
IGhhc0VkaXRhYmxlU3R5bGUoKS4KLSAgICAgICAgaWYgKGN1cnJlbnROb2RlICE9IGxhc3ROb2Rl
KSB7CisgICAgICAgIGlmICgmY3VycmVudE5vZGUgIT0gbGFzdE5vZGUpIHsKICAgICAgICAgICAg
IC8vIERvbid0IGNoYW5nZSBlZGl0YWJpbGl0eS4KLSAgICAgICAgICAgIGJvb2wgY3VycmVudEVk
aXRhYmxlID0gY3VycmVudE5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKTsKKyAgICAgICAgICAgIGJv
b2wgY3VycmVudEVkaXRhYmxlID0gY3VycmVudE5vZGUuaGFzRWRpdGFibGVTdHlsZSgpOwogICAg
ICAgICAgICAgaWYgKHN0YXJ0RWRpdGFibGUgIT0gY3VycmVudEVkaXRhYmxlKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKHJ1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGJvdW5kYXJ5Q3Jvc3NlZCA9IHRy
dWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBsYXN0Tm9k
ZSA9IGN1cnJlbnROb2RlOworICAgICAgICAgICAgbGFzdE5vZGUgPSAmY3VycmVudE5vZGU7CiAg
ICAgICAgIH0KIAogICAgICAgICAvLyBzdG9wIGJlZm9yZSBnb2luZyBhYm92ZSB0aGUgYm9keSwg
dXAgaW50byB0aGUgaGVhZAogICAgICAgICAvLyByZXR1cm4gdGhlIGxhc3QgdmlzaWJsZSBzdHJl
YW1lciBwb3NpdGlvbgotICAgICAgICBpZiAoY3VycmVudE5vZGUtPmhhc1RhZ05hbWUoYm9keVRh
ZykgJiYgY3VycmVudFBvcy5hdEVuZE9mTm9kZSgpKQorICAgICAgICBpZiAoaXM8SFRNTEJvZHlF
bGVtZW50PihjdXJyZW50Tm9kZSkgJiYgY3VycmVudFBvc2l0aW9uLmF0RW5kT2ZOb2RlKCkpCiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAorCiAgICAgICAgIC8vIERvIG5vdCBtb3Zl
IHRvIGEgdmlzdWFsbHkgZGlzdGluY3QgcG9zaXRpb24uCi0gICAgICAgIGlmIChlbmRzT2ZOb2Rl
QXJlVmlzdWFsbHlEaXN0aW5jdFBvc2l0aW9ucyhjdXJyZW50Tm9kZSkgJiYgY3VycmVudE5vZGUg
IT0gYm91bmRhcnkpCisgICAgICAgIGlmIChlbmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0aW5jdFBv
c2l0aW9ucygmY3VycmVudE5vZGUpICYmICZjdXJyZW50Tm9kZSAhPSBib3VuZGFyeSkKICAgICAg
ICAgICAgIHJldHVybiBsYXN0VmlzaWJsZTsKICAgICAgICAgLy8gRG8gbm90IG1vdmUgcGFzdCBh
IHZpc3VhbGx5IGRpc2luY3QgcG9zaXRpb24uCiAgICAgICAgIC8vIE5vdGU6IFRoZSBmaXJzdCBw
b3NpdGlvbiBhZnRlciB0aGUgbGFzdCBpbiBhIG5vZGUgd2hvc2UgZW5kcyBhcmUgdmlzdWFsbHkg
ZGlzdGluY3QKICAgICAgICAgLy8gcG9zaXRpb25zIHdpbGwgYmUgW2JvdW5kYXJ5LT5wYXJlbnRO
b2RlKCksIG9yaWdpbmFsQmxvY2stPmNvbXB1dGVOb2RlSW5kZXgoKSArIDFdLgotICAgICAgICBp
ZiAoYm91bmRhcnkgJiYgYm91bmRhcnktPnBhcmVudE5vZGUoKSA9PSBjdXJyZW50Tm9kZSkKKyAg
ICAgICAgaWYgKGJvdW5kYXJ5ICYmIGJvdW5kYXJ5LT5wYXJlbnROb2RlKCkgPT0gJmN1cnJlbnRO
b2RlKQogICAgICAgICAgICAgcmV0dXJuIGxhc3RWaXNpYmxlOwogCiAgICAgICAgIC8vIHNraXAg
cG9zaXRpb24gaW4gdW5yZW5kZXJlZCBvciBpbnZpc2libGUgbm9kZQotICAgICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gY3VycmVudE5vZGUtPnJlbmRlcmVyKCk7CisgICAgICAgIGF1dG8q
IHJlbmRlcmVyID0gY3VycmVudE5vZGUucmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFyZW5kZXJl
ciB8fCByZW5kZXJlci0+c3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAgIGlmIChydWxlID09IENhbkNyb3Nz
RWRpdGluZ0JvdW5kYXJ5ICYmIGJvdW5kYXJ5Q3Jvc3NlZCkgewotICAgICAgICAgICAgbGFzdFZp
c2libGUgPSBjdXJyZW50UG9zOworICAgICAgICAgICAgbGFzdFZpc2libGUgPSBjdXJyZW50UG9z
aXRpb247CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Ly8gdHJhY2sgbGFzdCB2aXNpYmxlIHN0cmVhbWVyIHBvc2l0aW9uCi0gICAgICAgIGlmIChpc1N0
cmVhbWVyKGN1cnJlbnRQb3MpKQotICAgICAgICAgICAgbGFzdFZpc2libGUgPSBjdXJyZW50UG9z
OworICAgICAgICBpZiAoaXNTdHJlYW1lcihjdXJyZW50UG9zaXRpb24pKQorICAgICAgICAgICAg
bGFzdFZpc2libGUgPSBjdXJyZW50UG9zaXRpb247CiAKICAgICAgICAgLy8gUmV0dXJuIHBvc2l0
aW9uIGJlZm9yZSB0YWJsZXMgYW5kIG5vZGVzIHdoaWNoIGhhdmUgY29udGVudCB0aGF0IGNhbiBi
ZSBpZ25vcmVkLgotICAgICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KGN1cnJlbnROb2Rl
KSB8fCBpc1JlbmRlcmVkVGFibGUoY3VycmVudE5vZGUpKSB7Ci0gICAgICAgICAgICBpZiAoY3Vy
cmVudFBvcy5hdFN0YXJ0T2ZOb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9u
QmVmb3JlTm9kZShjdXJyZW50Tm9kZSk7CisgICAgICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRl
bnQoY3VycmVudE5vZGUpIHx8IGlzUmVuZGVyZWRUYWJsZSgmY3VycmVudE5vZGUpKSB7CisgICAg
ICAgICAgICBpZiAoY3VycmVudFBvc2l0aW9uLmF0U3RhcnRPZk5vZGUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcG9zaXRpb25CZWZvcmVOb2RlKCZjdXJyZW50Tm9kZSk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC04MzUsMTcgKzgzOSwxNyBAQCBQb3NpdGlvbiBQ
b3NpdGlvbjo6ZG93bnN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkgY29u
c3QKIAogICAgICAgICAgICAgaWYgKCF0ZXh0UmVuZGVyZXIuZmlyc3RUZXh0Qm94KCkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoY3VycmVudE5vZGUgIT0gc3Rh
cnROb2RlKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRQb3MuYXRTdGFydE9mTm9k
ZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KGN1cnJlbnROb2RlLCByZW5kZXJlci0+Y2FyZXRNaW5PZmZzZXQoKSk7CisgICAgICAgICAgICBp
ZiAoJmN1cnJlbnROb2RlICE9IHN0YXJ0Tm9kZSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChj
dXJyZW50UG9zaXRpb24uYXRTdGFydE9mTm9kZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKCZjdXJyZW50Tm9kZSwgcmVuZGVyZXItPmNhcmV0
TWluT2Zmc2V0KCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB1bnNpZ25lZCB0ZXh0
T2Zmc2V0ID0gY3VycmVudFBvcy5vZmZzZXRJbkxlYWZOb2RlKCk7CisgICAgICAgICAgICB1bnNp
Z25lZCB0ZXh0T2Zmc2V0ID0gY3VycmVudFBvc2l0aW9uLm9mZnNldEluTGVhZk5vZGUoKTsKICAg
ICAgICAgICAgIGF1dG8gbGFzdFRleHRCb3ggPSB0ZXh0UmVuZGVyZXIubGFzdFRleHRCb3goKTsK
ICAgICAgICAgICAgIGZvciAoYXV0byogYm94ID0gdGV4dFJlbmRlcmVyLmZpcnN0VGV4dEJveCgp
OyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewogICAgICAgICAgICAgICAgIGlmICh0
ZXh0T2Zmc2V0IDw9IGJveC0+ZW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRP
ZmZzZXQgPj0gYm94LT5zdGFydCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1
cnJlbnRQb3M7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFBvc2l0aW9u
OwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAKQEAg
LTg3NSw3ICs4NzksNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbShFZGl0aW5nQm91
bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkgY29uc3QKICAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICBpZiAoY29udGludWVzT25OZXh0TGluZSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGN1cnJlbnRQb3M7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UG9z
aXRpb247CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC05NjIsNyArOTY2LDcg
QEAgYm9vbCBQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdEFsbChjb25zdCBOb2RlKiBub2RlKQog
Tm9kZSogUG9zaXRpb246OnJvb3RVc2VyU2VsZWN0QWxsRm9yTm9kZShOb2RlKiBub2RlKQogewog
ICAgIGlmICghbm9kZSB8fCAhbm9kZUlzVXNlclNlbGVjdEFsbChub2RlKSkKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIE5vZGUqIHBhcmVudCA9IG5vZGUt
PnBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuIG5vZGU7CkBA
IC05ODcsMjcgKzk5MSwyOCBAQCBib29sIFBvc2l0aW9uOjppc0NhbmRpZGF0ZSgpIGNvbnN0CiAg
ICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICBhdXRvKiBy
ZW5kZXJlciA9IGRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJl
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpLnZp
c2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAo
cmVuZGVyZXItPmlzQlIoKSkKKyAgICBpZiAocmVuZGVyZXItPmlzQlIoKSkgewogICAgICAgICAv
LyBGSVhNRTogVGhlIGNvbmRpdGlvbiBzaG91bGQgYmUgbV9hbmNob3JUeXBlID09IFBvc2l0aW9u
SXNCZWZvcmVBbmNob3IsIGJ1dCBmb3Igbm93IHdlIHN0aWxsIG5lZWQgdG8gc3VwcG9ydCBsZWdh
Y3kgcG9zaXRpb25zLgogICAgICAgICByZXR1cm4gIW1fb2Zmc2V0ICYmIG1fYW5jaG9yVHlwZSAh
PSBQb3NpdGlvbklzQWZ0ZXJBbmNob3IgJiYgIW5vZGVJc1VzZXJTZWxlY3ROb25lKGRlcHJlY2F0
ZWROb2RlKCktPnBhcmVudE5vZGUoKSk7CisgICAgfQogCiAgICAgaWYgKGlzPFJlbmRlclRleHQ+
KCpyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiAhbm9kZUlzVXNlclNlbGVjdE5vbmUoZGVwcmVj
YXRlZE5vZGUoKSkgJiYgZG93bmNhc3Q8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKS5jb250YWluc0Nh
cmV0T2Zmc2V0KG1fb2Zmc2V0KTsKIAotICAgIGlmIChwb3NpdGlvbkJlZm9yZU9yQWZ0ZXJOb2Rl
SXNDYW5kaWRhdGUoZGVwcmVjYXRlZE5vZGUoKSkpIHsKKyAgICBpZiAocG9zaXRpb25CZWZvcmVP
ckFmdGVyTm9kZUlzQ2FuZGlkYXRlKCpkZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICByZXR1
cm4gKChhdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmIG1fYW5jaG9yVHlwZSA9PSBQ
b3NpdGlvbklzQmVmb3JlQW5jaG9yKQogICAgICAgICAgICAgfHwgKGF0TGFzdEVkaXRpbmdQb3Np
dGlvbkZvck5vZGUoKSAmJiBtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0FmdGVyQW5jaG9yKSkK
ICAgICAgICAgICAgICYmICFub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpLT5w
YXJlbnROb2RlKCkpOwogICAgIH0KIAotICAgIGlmIChtX2FuY2hvck5vZGUtPmhhc1RhZ05hbWUo
aHRtbFRhZykpCisgICAgaWYgKGlzPEhUTUxIdG1sRWxlbWVudD4oKm1fYW5jaG9yTm9kZSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpczxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5k
ZXJlcikKQEAgLTEwMTYsNyArMTAyMSw3IEBAIGJvb2wgUG9zaXRpb246OmlzQ2FuZGlkYXRlKCkg
Y29uc3QKICNlbmRpZgogICAgICAgICB8fCBpczxSZW5kZXJGbGV4aWJsZUJveD4oKnJlbmRlcmVy
KSkgewogICAgICAgICBSZW5kZXJCbG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4o
KnJlbmRlcmVyKTsKLSAgICAgICAgaWYgKGJsb2NrLmxvZ2ljYWxIZWlnaHQoKSB8fCBtX2FuY2hv
ck5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpIHsKKyAgICAgICAgaWYgKGJsb2NrLmxvZ2ljYWxI
ZWlnaHQoKSB8fCBpczxIVE1MQm9keUVsZW1lbnQ+KCptX2FuY2hvck5vZGUpKSB7CiAgICAgICAg
ICAgICBpZiAoIVBvc2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0
aEhlaWdodChibG9jaykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGF0Rmlyc3RFZGl0aW5nUG9z
aXRpb25Gb3JOb2RlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNh
dGVkTm9kZSgpKTsKICAgICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmhhc0VkaXRhYmxl
U3R5bGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKGRlcHJlY2F0ZWROb2Rl
KCkpICYmIGF0RWRpdGluZ0JvdW5kYXJ5KCk7CkBAIC0xMDQ0LDY5ICsxMDQ5LDY4IEBAIHN0YXRp
YyBib29sIGluU2FtZUVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoTm9kZSogYSwgTm9kZSogYikK
ICAgICByZXR1cm4gYSAmJiBiICYmIGRlcHJlY2F0ZWRFbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50
KGEpID09IGRlcHJlY2F0ZWRFbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KGIpOwogfQogCi1ib29s
IFBvc2l0aW9uOjpyZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiAmcG9z
KSBjb25zdAorYm9vbCBQb3NpdGlvbjo6cmVuZGVyc0luRGlmZmVyZW50UG9zaXRpb24oY29uc3Qg
UG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdAogewotICAgIGlmIChpc051bGwoKSB8fCBwb3MuaXNO
dWxsKCkpCisgICAgaWYgKGlzTnVsbCgpIHx8IHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZGVwcmVjYXRlZE5v
ZGUoKS0+cmVuZGVyZXIoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IGRlcHJlY2F0ZWROb2RlKCkt
PnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAotICAgIFJlbmRlck9iamVjdCogcG9zUmVuZGVyZXIgPSBwb3MuZGVwcmVjYXRlZE5vZGUo
KS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXBvc1JlbmRlcmVyKQorICAgIGF1dG8qIHBvc2l0aW9u
UmVuZGVyZXIgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOworICAgIGlm
ICghcG9zaXRpb25SZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHJl
bmRlcmVyLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8Ci0gICAgICAgIHBvc1Jl
bmRlcmVyLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgIGlmIChyZW5kZXJl
ci0+c3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fCBwb3NpdGlvblJlbmRlcmVyLT5z
dHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCi0gICAgaWYgKGRlcHJlY2F0ZWROb2RlKCkgPT0gcG9zLmRlcHJlY2F0ZWROb2RlKCkpIHsK
LSAgICAgICAgaWYgKGRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpKQorICAgIGlm
IChkZXByZWNhdGVkTm9kZSgpID09IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpIHsKKyAgICAg
ICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KCpkZXByZWNhdGVkTm9kZSgpKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAobV9vZmZzZXQgPT0gcG9zLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCkpCisgICAgICAgIGlmIChtX29mZnNldCA9PSBwb3NpdGlvbi5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgCi0gICAgICAgIGlmICghZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmICFwb3Mu
ZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAobV9vZmZz
ZXQgIT0gcG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpCisKKyAgICAgICAgaWYgKCFpczxU
ZXh0PigqZGVwcmVjYXRlZE5vZGUoKSkgJiYgIWlzPFRleHQ+KCpwb3NpdGlvbi5kZXByZWNhdGVk
Tm9kZSgpKSkgeworICAgICAgICAgICAgaWYgKG1fb2Zmc2V0ICE9IHBvc2l0aW9uLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICB9Ci0gICAgCi0gICAgaWYgKGRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05hbWUoYnJU
YWcpICYmIHBvcy5pc0NhbmRpZGF0ZSgpKQorCisgICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KCpk
ZXByZWNhdGVkTm9kZSgpKSAmJiBwb3NpdGlvbi5pc0NhbmRpZGF0ZSgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAKLSAgICBpZiAocG9zLmRlcHJlY2F0ZWROb2RlKCkt
Pmhhc1RhZ05hbWUoYnJUYWcpICYmIGlzQ2FuZGlkYXRlKCkpCisKKyAgICBpZiAoaXM8SFRNTEJS
RWxlbWVudD4oKnBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpICYmIGlzQ2FuZGlkYXRlKCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIAotICAgIGlmICghaW5TYW1lRW5j
bG9zaW5nQmxvY2tGbG93RWxlbWVudChkZXByZWNhdGVkTm9kZSgpLCBwb3MuZGVwcmVjYXRlZE5v
ZGUoKSkpCisKKyAgICBpZiAoIWluU2FtZUVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoZGVwcmVj
YXRlZE5vZGUoKSwgcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgaWYgKGlzPFJlbmRlclRleHQ+KCpyZW5kZXJlcikgJiYgIWRvd25jYXN0PFJl
bmRlclRleHQ+KCpyZW5kZXJlcikuY29udGFpbnNDYXJldE9mZnNldChtX29mZnNldCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChpczxSZW5kZXJUZXh0PigqcG9zUmVuZGVyZXIp
ICYmICFkb3duY2FzdDxSZW5kZXJUZXh0PigqcG9zUmVuZGVyZXIpLmNvbnRhaW5zQ2FyZXRPZmZz
ZXQocG9zLm1fb2Zmc2V0KSkKKyAgICBpZiAoaXM8UmVuZGVyVGV4dD4oKnBvc2l0aW9uUmVuZGVy
ZXIpICYmICFkb3duY2FzdDxSZW5kZXJUZXh0PigqcG9zaXRpb25SZW5kZXJlcikuY29udGFpbnND
YXJldE9mZnNldChwb3NpdGlvbi5tX29mZnNldCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGludCB0aGlzUmVuZGVyZWRPZmZzZXQgPSBpczxSZW5kZXJUZXh0PigqcmVuZGVyZXIpID8g
ZG93bmNhc3Q8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKS5jb3VudFJlbmRlcmVkQ2hhcmFjdGVyT2Zm
c2V0c1VudGlsKG1fb2Zmc2V0KSA6IG1fb2Zmc2V0OwotICAgIGludCBwb3NSZW5kZXJlZE9mZnNl
dCA9IGlzPFJlbmRlclRleHQ+KCpwb3NSZW5kZXJlcikgPyBkb3duY2FzdDxSZW5kZXJUZXh0Pigq
cG9zUmVuZGVyZXIpLmNvdW50UmVuZGVyZWRDaGFyYWN0ZXJPZmZzZXRzVW50aWwocG9zLm1fb2Zm
c2V0KSA6IHBvcy5tX29mZnNldDsKKyAgICBpbnQgcG9zaXRpb25SZW5kZXJlZE9mZnNldCA9IGlz
PFJlbmRlclRleHQ+KCpwb3NpdGlvblJlbmRlcmVyKSA/IGRvd25jYXN0PFJlbmRlclRleHQ+KCpw
b3NpdGlvblJlbmRlcmVyKS5jb3VudFJlbmRlcmVkQ2hhcmFjdGVyT2Zmc2V0c1VudGlsKHBvc2l0
aW9uLm1fb2Zmc2V0KSA6IHBvc2l0aW9uLm1fb2Zmc2V0OwogCi0gICAgaWYgKHJlbmRlcmVyID09
IHBvc1JlbmRlcmVyICYmIHRoaXNSZW5kZXJlZE9mZnNldCA9PSBwb3NSZW5kZXJlZE9mZnNldCkK
KyAgICBpZiAocmVuZGVyZXIgPT0gcG9zaXRpb25SZW5kZXJlciAmJiB0aGlzUmVuZGVyZWRPZmZz
ZXQgPT0gcG9zaXRpb25SZW5kZXJlZE9mZnNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgaW50IGlnbm9yZWRDYXJldE9mZnNldDsKICAgICBJbmxpbmVCb3gqIGIxOwogICAgIGdldElu
bGluZUJveEFuZE9mZnNldChET1dOU1RSRUFNLCBiMSwgaWdub3JlZENhcmV0T2Zmc2V0KTsKICAg
ICBJbmxpbmVCb3gqIGIyOwotICAgIHBvcy5nZXRJbmxpbmVCb3hBbmRPZmZzZXQoRE9XTlNUUkVB
TSwgYjIsIGlnbm9yZWRDYXJldE9mZnNldCk7CisgICAgcG9zaXRpb24uZ2V0SW5saW5lQm94QW5k
T2Zmc2V0KERPV05TVFJFQU0sIGIyLCBpZ25vcmVkQ2FyZXRPZmZzZXQpOwogCiAgICAgTE9HKEVk
aXRpbmcsICJyZW5kZXJlcjogICAgICAgICAgICAgICAlcCBbJXBdXG4iLCByZW5kZXJlciwgYjEp
OwogICAgIExPRyhFZGl0aW5nLCAidGhpc1JlbmRlcmVkT2Zmc2V0OiAgICAgICAgICVkXG4iLCB0
aGlzUmVuZGVyZWRPZmZzZXQpOwotICAgIExPRyhFZGl0aW5nLCAicG9zUmVuZGVyZXI6ICAgICAg
ICAgICAgJXAgWyVwXVxuIiwgcG9zUmVuZGVyZXIsIGIyKTsKLSAgICBMT0coRWRpdGluZywgInBv
c1JlbmRlcmVkT2Zmc2V0OiAgICAgICVkXG4iLCBwb3NSZW5kZXJlZE9mZnNldCk7CisgICAgTE9H
KEVkaXRpbmcsICJwb3NSZW5kZXJlcjogICAgICAgICAgICAlcCBbJXBdXG4iLCBwb3NpdGlvblJl
bmRlcmVyLCBiMik7CisgICAgTE9HKEVkaXRpbmcsICJwb3NSZW5kZXJlZE9mZnNldDogICAgICAl
ZFxuIiwgcG9zaXRpb25SZW5kZXJlZE9mZnNldCk7CiAgICAgTE9HKEVkaXRpbmcsICJub2RlIG1p
bi9tYXg6ICAgICAgICAgICAlZDolZFxuIiwgY2FyZXRNaW5PZmZzZXQoKmRlcHJlY2F0ZWROb2Rl
KCkpLCBjYXJldE1heE9mZnNldCgqZGVwcmVjYXRlZE5vZGUoKSkpOwotICAgIExPRyhFZGl0aW5n
LCAicG9zIG5vZGUgbWluL21heDogICAgICAgJWQ6JWRcbiIsIGNhcmV0TWluT2Zmc2V0KCpwb3Mu
ZGVwcmVjYXRlZE5vZGUoKSksIGNhcmV0TWF4T2Zmc2V0KCpwb3MuZGVwcmVjYXRlZE5vZGUoKSkp
OworICAgIExPRyhFZGl0aW5nLCAicG9zIG5vZGUgbWluL21heDogICAgICAgJWQ6JWRcbiIsIGNh
cmV0TWluT2Zmc2V0KCpwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSwgY2FyZXRNYXhPZmZzZXQo
KnBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpKTsKICAgICBMT0coRWRpdGluZywgIi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS1cbiIpOwogCiAgICAgaWYgKCFiMSB8fCAhYjIpIHsKQEAgLTExMTcsMTMgKzExMjEsMTMg
QEAgYm9vbCBQb3NpdGlvbjo6cmVuZGVyc0luRGlmZmVyZW50UG9zaXRpb24oY29uc3QgUG9zaXRp
b24gJnBvcykgY29uc3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKG5l
eHRSZW5kZXJlZEVkaXRhYmxlKGRlcHJlY2F0ZWROb2RlKCkpID09IHBvcy5kZXByZWNhdGVkTm9k
ZSgpCi0gICAgICAgICYmIHRoaXNSZW5kZXJlZE9mZnNldCA9PSBjYXJldE1heE9mZnNldCgqZGVw
cmVjYXRlZE5vZGUoKSkgJiYgIXBvc1JlbmRlcmVkT2Zmc2V0KSB7CisgICAgaWYgKG5leHRSZW5k
ZXJlZEVkaXRhYmxlKGRlcHJlY2F0ZWROb2RlKCkpID09IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2Rl
KCkKKyAgICAgICAgJiYgdGhpc1JlbmRlcmVkT2Zmc2V0ID09IGNhcmV0TWF4T2Zmc2V0KCpkZXBy
ZWNhdGVkTm9kZSgpKSAmJiAhcG9zaXRpb25SZW5kZXJlZE9mZnNldCkgewogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGlmIChwcmV2aW91c1JlbmRlcmVkRWRpdGFibGUo
ZGVwcmVjYXRlZE5vZGUoKSkgPT0gcG9zLmRlcHJlY2F0ZWROb2RlKCkKLSAgICAgICAgJiYgIXRo
aXNSZW5kZXJlZE9mZnNldCAmJiBwb3NSZW5kZXJlZE9mZnNldCA9PSBjYXJldE1heE9mZnNldCgq
cG9zLmRlcHJlY2F0ZWROb2RlKCkpKSB7CisgICAgaWYgKHByZXZpb3VzUmVuZGVyZWRFZGl0YWJs
ZShkZXByZWNhdGVkTm9kZSgpKSA9PSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpCisgICAgICAg
ICYmICF0aGlzUmVuZGVyZWRPZmZzZXQgJiYgcG9zaXRpb25SZW5kZXJlZE9mZnNldCA9PSBjYXJl
dE1heE9mZnNldCgqcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIApAQCAtMTEzNSwxMCArMTEzOSwxMCBAQCBQb3NpdGlvbiBQb3NpdGlv
bjo6bGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbihFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgY29u
c2lkZXJObwogewogICAgIEFTU0VSVChpc0VkaXRhYmxlUG9zaXRpb24oKnRoaXMpKTsKICAgICBp
ZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBQb3NpdGlvbigpOworICAgICAgICByZXR1cm4g
eyB9OwogICAgIAotICAgIGlmICh1cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05h
bWUoYnJUYWcpKQotICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKKyAgICBpZiAoaXM8SFRNTEJS
RWxlbWVudD4oKnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKSkpCisgICAgICAgIHJldHVybiB7
IH07CiAKICAgICBQb3NpdGlvbiBwcmV2ID0gcHJldmlvdXNDaGFyYWN0ZXJQb3NpdGlvbihhZmZp
bml0eSk7CiAgICAgaWYgKHByZXYgIT0gKnRoaXMgJiYgaW5TYW1lRW5jbG9zaW5nQmxvY2tGbG93
RWxlbWVudChkZXByZWNhdGVkTm9kZSgpLCBwcmV2LmRlcHJlY2F0ZWROb2RlKCkpICYmIGlzPFRl
eHQ+KCpwcmV2LmRlcHJlY2F0ZWROb2RlKCkpKSB7CkBAIC0xMTQ5LDcgKzExNTMsNyBAQCBQb3Np
dGlvbiBQb3NpdGlvbjo6bGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbihFQWZmaW5pdHkgYWZmaW5p
dHksIGJvb2wgY29uc2lkZXJObwogICAgICAgICAgICAgICAgIHJldHVybiBwcmV2OwogICAgIH0K
IAotICAgIHJldHVybiBQb3NpdGlvbigpOworICAgIHJldHVybiB7IH07CiB9CiAKIC8vIFRoaXMg
YXNzdW1lcyB0aGF0IGl0IHN0YXJ0cyBpbiBlZGl0YWJsZSBjb250ZW50LgpAQCAtMTE1Nyw3ICsx
MTYxLDcgQEAgUG9zaXRpb24gUG9zaXRpb246OnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKEVB
ZmZpbml0eSwgYm9vbCBjb25zaWRlck5vbkNvbGxhcHMKIHsKICAgICBBU1NFUlQoaXNFZGl0YWJs
ZVBvc2l0aW9uKCp0aGlzKSk7CiAgICAgaWYgKGlzTnVsbCgpKQotICAgICAgICByZXR1cm4gUG9z
aXRpb24oKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICAKICAgICBWaXNpYmxlUG9zaXRpb24g
digqdGhpcyk7CiAgICAgVUNoYXIgYyA9IHYuY2hhcmFjdGVyQWZ0ZXIoKTsKQEAgLTExNjYsNyAr
MTE3MCw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp0cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbihF
QWZmaW5pdHksIGJvb2wgY29uc2lkZXJOb25Db2xsYXBzCiAgICAgICAgIGlmIChjb25zaWRlck5v
bkNvbGxhcHNpYmxlV2hpdGVzcGFjZSA/IChpc1NwYWNlT3JOZXdsaW5lKGMpIHx8IGMgPT0gbm9C
cmVha1NwYWNlKSA6IGRlcHJlY2F0ZWRJc0NvbGxhcHNpYmxlV2hpdGVzcGFjZShjKSkKICAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKICAgICAKLSAgICByZXR1cm4gUG9zaXRpb24oKTsKKyAgICBy
ZXR1cm4geyB9OwogfQogCiB2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFm
ZmluaXR5IGFmZmluaXR5LCBJbmxpbmVCb3gqJiBpbmxpbmVCb3gsIGludCYgY2FyZXRPZmZzZXQp
IGNvbnN0CkBAIC0xMjcwLDcgKzEyNzQsNyBAQCB2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hB
bmRPZmZzZXQoRUFmZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaQogICAg
ICAgICBpbmxpbmVCb3ggPSBib3ggPyBib3ggOiBjYW5kaWRhdGU7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgaW5saW5lQm94ID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKGNhbkhhdmVDaGlsZHJlbkZv
ckVkaXRpbmcoZGVwcmVjYXRlZE5vZGUoKSkgJiYgaXM8UmVuZGVyQmxvY2tGbG93PigqcmVuZGVy
ZXIpICYmIGhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KGRvd25j
YXN0PFJlbmRlckJsb2NrRmxvdz4oKnJlbmRlcmVyKSkpIHsKKyAgICAgICAgaWYgKGNhbkhhdmVD
aGlsZHJlbkZvckVkaXRpbmcoKmRlcHJlY2F0ZWROb2RlKCkpICYmIGlzPFJlbmRlckJsb2NrRmxv
dz4oKnJlbmRlcmVyKSAmJiBoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhl
aWdodChkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcikpKSB7CiAgICAgICAgICAg
ICAvLyBUcnkgYSB2aXN1YWxseSBlcXVpdmFsZW50IHBvc2l0aW9uIHdpdGggcG9zc2libHkgb3Bw
b3NpdGUgZWRpdGFiaWxpdHkuIFRoaXMgaGVscHMgaW4gY2FzZSB8dGhpc3wgaXMgaW4KICAgICAg
ICAgICAgIC8vIGFuIGVkaXRhYmxlIGJsb2NrIGJ1dCBzdXJyb3VuZGVkIGJ5IG5vbi1lZGl0YWJs
ZSBwb3NpdGlvbnMuIEl0IGFjdHMgdG8gbmVnYXRlIHRoZSBsb2dpYyBhdCB0aGUgYmVnaW5uaW5n
CiAgICAgICAgICAgICAvLyBvZiBSZW5kZXJPYmplY3Q6OmNyZWF0ZVZpc2libGVQb3NpdGlvbigp
LgpAQCAtMTQ2MywxMyArMTQ2NywxMyBAQCBib29sIFBvc2l0aW9uOjplcXVhbHMoY29uc3QgUG9z
aXRpb24mIG90aGVyKSBjb25zdAogCiAgICAgc3dpdGNoIChhbmNob3JUeXBlKCkpIHsKICAgICBj
YXNlIFBvc2l0aW9uSXNCZWZvcmVDaGlsZHJlbjoKLSAgICAgICAgQVNTRVJUKCFtX2FuY2hvck5v
ZGUtPmlzVGV4dE5vZGUoKSk7CisgICAgICAgIEFTU0VSVCghaXM8VGV4dD4oKm1fYW5jaG9yTm9k
ZSkpOwogICAgICAgICBzd2l0Y2ggKG90aGVyLmFuY2hvclR5cGUoKSkgewogICAgICAgICBjYXNl
IFBvc2l0aW9uSXNCZWZvcmVDaGlsZHJlbjoKLSAgICAgICAgICAgIEFTU0VSVCghb3RoZXIubV9h
bmNob3JOb2RlLT5pc1RleHROb2RlKCkpOworICAgICAgICAgICAgQVNTRVJUKCFpczxUZXh0Pigq
b3RoZXIubV9hbmNob3JOb2RlKSk7CiAgICAgICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlID09
IG90aGVyLm1fYW5jaG9yTm9kZTsKICAgICAgICAgY2FzZSBQb3NpdGlvbklzQWZ0ZXJDaGlsZHJl
bjoKLSAgICAgICAgICAgIEFTU0VSVCghb3RoZXIubV9hbmNob3JOb2RlLT5pc1RleHROb2RlKCkp
OworICAgICAgICAgICAgQVNTRVJUKCFpczxUZXh0Pigqb3RoZXIubV9hbmNob3JOb2RlKSk7CiAg
ICAgICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlID09IG90aGVyLm1fYW5jaG9yTm9kZSAmJiAh
bV9hbmNob3JOb2RlLT5oYXNDaGlsZE5vZGVzKCk7CiAgICAgICAgIGNhc2UgUG9zaXRpb25Jc09m
ZnNldEluQW5jaG9yOgogICAgICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZSA9PSBvdGhlci5t
X2FuY2hvck5vZGUgJiYgIW90aGVyLm1fb2Zmc2V0OwpAQCAtMTQ4MCwxMyArMTQ4NCwxMyBAQCBi
b29sIFBvc2l0aW9uOjplcXVhbHMoY29uc3QgUG9zaXRpb24mIG90aGVyKSBjb25zdAogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW46Ci0g
ICAgICAgIEFTU0VSVCghbV9hbmNob3JOb2RlLT5pc1RleHROb2RlKCkpOworICAgICAgICBBU1NF
UlQoIWlzPFRleHQ+KCptX2FuY2hvck5vZGUpKTsKICAgICAgICAgc3dpdGNoIChvdGhlci5hbmNo
b3JUeXBlKCkpIHsKICAgICAgICAgY2FzZSBQb3NpdGlvbklzQmVmb3JlQ2hpbGRyZW46Ci0gICAg
ICAgICAgICBBU1NFUlQoIW90aGVyLm1fYW5jaG9yTm9kZS0+aXNUZXh0Tm9kZSgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghaXM8VGV4dD4oKm90aGVyLm1fYW5jaG9yTm9kZSkpOwogICAgICAgICAg
ICAgcmV0dXJuIG1fYW5jaG9yTm9kZSA9PSBvdGhlci5tX2FuY2hvck5vZGUgJiYgIW1fYW5jaG9y
Tm9kZS0+aGFzQ2hpbGROb2RlcygpOwogICAgICAgICBjYXNlIFBvc2l0aW9uSXNBZnRlckNoaWxk
cmVuOgotICAgICAgICAgICAgQVNTRVJUKCFvdGhlci5tX2FuY2hvck5vZGUtPmlzVGV4dE5vZGUo
KSk7CisgICAgICAgICAgICBBU1NFUlQoIWlzPFRleHQ+KCpvdGhlci5tX2FuY2hvck5vZGUpKTsK
ICAgICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUgPT0gb3RoZXIubV9hbmNob3JOb2RlOwog
ICAgICAgICBjYXNlIFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjoKICAgICAgICAgICAgIHJldHVy
biBtX2FuY2hvck5vZGUgPT0gb3RoZXIubV9hbmNob3JOb2RlICYmIG1fYW5jaG9yTm9kZS0+Y291
bnRDaGlsZE5vZGVzKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb2Zmc2V0KTsKQEAgLTE0
OTksMTAgKzE1MDMsMTAgQEAgYm9vbCBQb3NpdGlvbjo6ZXF1YWxzKGNvbnN0IFBvc2l0aW9uJiBv
dGhlcikgY29uc3QKICAgICBjYXNlIFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjoKICAgICAgICAg
c3dpdGNoIChvdGhlci5hbmNob3JUeXBlKCkpIHsKICAgICAgICAgY2FzZSBQb3NpdGlvbklzQmVm
b3JlQ2hpbGRyZW46Ci0gICAgICAgICAgICBBU1NFUlQoIW90aGVyLm1fYW5jaG9yTm9kZS0+aXNU
ZXh0Tm9kZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXM8VGV4dD4oKm90aGVyLm1fYW5jaG9y
Tm9kZSkpOwogICAgICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZSA9PSBvdGhlci5tX2FuY2hv
ck5vZGUgJiYgIW1fb2Zmc2V0OwogICAgICAgICBjYXNlIFBvc2l0aW9uSXNBZnRlckNoaWxkcmVu
OgotICAgICAgICAgICAgQVNTRVJUKCFvdGhlci5tX2FuY2hvck5vZGUtPmlzVGV4dE5vZGUoKSk7
CisgICAgICAgICAgICBBU1NFUlQoIWlzPFRleHQ+KCpvdGhlci5tX2FuY2hvck5vZGUpKTsKICAg
ICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUgPT0gb3RoZXIubV9hbmNob3JOb2RlICYmIG1f
b2Zmc2V0ID09IHN0YXRpY19jYXN0PGludD4ob3RoZXIubV9hbmNob3JOb2RlLT5jb3VudENoaWxk
Tm9kZXMoKSk7CiAgICAgICAgIGNhc2UgUG9zaXRpb25Jc09mZnNldEluQW5jaG9yOgogICAgICAg
ICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZSA9PSBvdGhlci5tX2FuY2hvck5vZGUgJiYgbV9vZmZz
ZXQgPT0gb3RoZXIubV9vZmZzZXQ7CkBAIC0xNTE1LDEwICsxNTE5LDEwIEBAIGJvb2wgUG9zaXRp
b246OmVxdWFscyhjb25zdCBQb3NpdGlvbiYgb3RoZXIpIGNvbnN0CiAgICAgY2FzZSBQb3NpdGlv
bklzQmVmb3JlQW5jaG9yOgogICAgICAgICBzd2l0Y2ggKG90aGVyLmFuY2hvclR5cGUoKSkgewog
ICAgICAgICBjYXNlIFBvc2l0aW9uSXNCZWZvcmVDaGlsZHJlbjoKLSAgICAgICAgICAgIEFTU0VS
VCghb3RoZXIubV9hbmNob3JOb2RlLT5pc1RleHROb2RlKCkpOworICAgICAgICAgICAgQVNTRVJU
KCFpczxUZXh0Pigqb3RoZXIubV9hbmNob3JOb2RlKSk7CiAgICAgICAgICAgICByZXR1cm4gbV9h
bmNob3JOb2RlID09IG90aGVyLm1fYW5jaG9yTm9kZS0+Zmlyc3RDaGlsZCgpOwogICAgICAgICBj
YXNlIFBvc2l0aW9uSXNBZnRlckNoaWxkcmVuOgotICAgICAgICAgICAgQVNTRVJUKCFvdGhlci5t
X2FuY2hvck5vZGUtPmlzVGV4dE5vZGUoKSk7CisgICAgICAgICAgICBBU1NFUlQoIWlzPFRleHQ+
KCpvdGhlci5tX2FuY2hvck5vZGUpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgY2FzZSBQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3I6CiAgICAgICAgICAgICByZXR1cm4gbV9h
bmNob3JOb2RlID09IG90aGVyLm1fYW5jaG9yTm9kZS0+dHJhdmVyc2VUb0NoaWxkQXQob3RoZXIu
bV9vZmZzZXQpOwpAQCAtMTUzMSwxMCArMTUzNSwxMCBAQCBib29sIFBvc2l0aW9uOjplcXVhbHMo
Y29uc3QgUG9zaXRpb24mIG90aGVyKSBjb25zdAogICAgIGNhc2UgUG9zaXRpb25Jc0FmdGVyQW5j
aG9yOgogICAgICAgICBzd2l0Y2ggKG90aGVyLmFuY2hvclR5cGUoKSkgewogICAgICAgICBjYXNl
IFBvc2l0aW9uSXNCZWZvcmVDaGlsZHJlbjoKLSAgICAgICAgICAgIEFTU0VSVCghb3RoZXIubV9h
bmNob3JOb2RlLT5pc1RleHROb2RlKCkpOworICAgICAgICAgICAgQVNTRVJUKCFpczxUZXh0Pigq
b3RoZXIubV9hbmNob3JOb2RlKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IGNhc2UgUG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW46Ci0gICAgICAgICAgICBBU1NFUlQoIW90aGVy
Lm1fYW5jaG9yTm9kZS0+aXNUZXh0Tm9kZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXM8VGV4
dD4oKm90aGVyLm1fYW5jaG9yTm9kZSkpOwogICAgICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9k
ZSA9PSBvdGhlci5tX2FuY2hvck5vZGUtPmxhc3RDaGlsZCgpOwogICAgICAgICBjYXNlIFBvc2l0
aW9uSXNPZmZzZXRJbkFuY2hvcjoKICAgICAgICAgICAgIHJldHVybiBvdGhlci5tX29mZnNldCAm
JiBtX2FuY2hvck5vZGUgPT0gb3RoZXIubV9hbmNob3JOb2RlLT50cmF2ZXJzZVRvQ2hpbGRBdChv
dGhlci5tX29mZnNldCAtIDEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0
aW9uSXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3Bw
CmluZGV4IDdhYzNkOGQwOWZiYzIzMDFkNzk3MzJjMTMyOGM1MDI1ZWVlMWZiN2EuLmMxYjBhMGM1
NDQ3ZDU0NTBhMzcwMzg2MzM5YjM0NDFlYzdkMDZiZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9z
aXRpb25JdGVyYXRvci5jcHAKQEAgLTQzLDExICs0MywxMSBAQCBQb3NpdGlvbkl0ZXJhdG9yOjpv
cGVyYXRvciBQb3NpdGlvbigpIGNvbnN0CiAgICAgaWYgKG1fbm9kZUFmdGVyUG9zaXRpb25JbkFu
Y2hvcikgewogICAgICAgICBBU1NFUlQobV9ub2RlQWZ0ZXJQb3NpdGlvbkluQW5jaG9yLT5wYXJl
bnROb2RlKCkgPT0gbV9hbmNob3JOb2RlKTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sg
aXMgaW5hZGFxdWV0ZSBiZWNhdXNlIGFueSBhbmNlc3RvciBjb3VsZCBiZSBpZ25vcmVkIGJ5IGVk
aXRpbmcKLSAgICAgICAgaWYgKHBvc2l0aW9uQmVmb3JlT3JBZnRlck5vZGVJc0NhbmRpZGF0ZSht
X2FuY2hvck5vZGUpKQorICAgICAgICBpZiAocG9zaXRpb25CZWZvcmVPckFmdGVyTm9kZUlzQ2Fu
ZGlkYXRlKCptX2FuY2hvck5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uQmVmb3Jl
Tm9kZShtX2FuY2hvck5vZGUpOwogICAgICAgICByZXR1cm4gcG9zaXRpb25JblBhcmVudEJlZm9y
ZU5vZGUobV9ub2RlQWZ0ZXJQb3NpdGlvbkluQW5jaG9yKTsKICAgICB9Ci0gICAgaWYgKHBvc2l0
aW9uQmVmb3JlT3JBZnRlck5vZGVJc0NhbmRpZGF0ZShtX2FuY2hvck5vZGUpKQorICAgIGlmIChw
b3NpdGlvbkJlZm9yZU9yQWZ0ZXJOb2RlSXNDYW5kaWRhdGUoKm1fYW5jaG9yTm9kZSkpCiAgICAg
ICAgIHJldHVybiBhdFN0YXJ0T2ZOb2RlKCkgPyBwb3NpdGlvbkJlZm9yZU5vZGUobV9hbmNob3JO
b2RlKSA6IHBvc2l0aW9uQWZ0ZXJOb2RlKG1fYW5jaG9yTm9kZSk7CiAgICAgaWYgKG1fYW5jaG9y
Tm9kZS0+aGFzQ2hpbGROb2RlcygpKQogICAgICAgICByZXR1cm4gbGFzdFBvc2l0aW9uSW5PckFm
dGVyTm9kZShtX2FuY2hvck5vZGUpOwpAQCAtMTYxLDcgKzE2MSw3IEBAIGJvb2wgUG9zaXRpb25J
dGVyYXRvcjo6aXNDYW5kaWRhdGUoKSBjb25zdAogICAgIGlmIChpczxSZW5kZXJUZXh0PigqcmVu
ZGVyZXIpKQogICAgICAgICByZXR1cm4gIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZSht
X2FuY2hvck5vZGUpICYmIGRvd25jYXN0PFJlbmRlclRleHQ+KCpyZW5kZXJlcikuY29udGFpbnND
YXJldE9mZnNldChtX29mZnNldEluQW5jaG9yKTsKIAotICAgIGlmIChpc1JlbmRlcmVkVGFibGUo
bV9hbmNob3JOb2RlKSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobV9hbmNob3JOb2RlKSkKKyAg
ICBpZiAoaXNSZW5kZXJlZFRhYmxlKG1fYW5jaG9yTm9kZSkgfHwgZWRpdGluZ0lnbm9yZXNDb250
ZW50KCptX2FuY2hvck5vZGUpKQogICAgICAgICByZXR1cm4gKGF0U3RhcnRPZk5vZGUoKSB8fCBh
dEVuZE9mTm9kZSgpKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKG1fYW5jaG9y
Tm9kZS0+cGFyZW50Tm9kZSgpKTsKIAogICAgIGlmICghaXM8SFRNTEh0bWxFbGVtZW50PigqbV9h
bmNob3JOb2RlKSAmJiBpczxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcikpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggMWQwYmI2ODgxNTEw
YjRjMjE0MzBhZDIxZTI5MGI5MDMzZWZhY2U4OS4uZDllOTE0OWE2ZDlkYThkNDM5YWEzNTViYTQ4
MTY2NzgxZmEwMjg0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHAKQEAgLTMxMiw3ICszMTIsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBs
eVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUpCiAgICAgfQogCiAg
ICAgLy8gSm9pbiB1cCBhbnkgYWRqYWNlbnQgdGV4dCBub2Rlcy4KLSAgICBpZiAoc3RhcnQuZGVw
cmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7CisgICAgaWYgKGlzPFRleHQ+KCpzdGFydC5k
ZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICBqb2luQ2hpbGRUZXh0Tm9kZXMoc3RhcnQuZGVw
cmVjYXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpLCBzdGFydCwgZW5kKTsKICAgICAgICAgc3RhcnQg
PSBzdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGVuZCA9IGVuZFBvc2l0aW9uKCk7CkBAIC0zMjEs
NyArMzIxLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbnRTdHls
ZUNoYW5nZShFZGl0aW5nU3R5bGUqIHN0eWxlKQogICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBl
bmQuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChlbmQuZGVwcmVjYXRlZE5v
ZGUoKS0+aXNUZXh0Tm9kZSgpICYmIHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnBhcmVudE5vZGUo
KSAhPSBlbmQuZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpKSB7CisgICAgaWYgKGlzPFRl
eHQ+KCplbmQuZGVwcmVjYXRlZE5vZGUoKSkgJiYgc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+cGFy
ZW50Tm9kZSgpICE9IGVuZC5kZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCkpIHsKICAgICAg
ICAgam9pbkNoaWxkVGV4dE5vZGVzKGVuZC5kZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCks
IHN0YXJ0LCBlbmQpOwogICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAg
ZW5kID0gZW5kUG9zaXRpb24oKTsKQEAgLTM2Nyw3ICszNjcsNyBAQCB2b2lkIEFwcGx5U3R5bGVD
b21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUp
CiAgICAgaWYgKHN0YXJ0Tm9kZSA9PSBiZXlvbmRFbmQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSAmJiBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KCpzdGFydE5vZGUpKSB7CisgICAgaWYgKGlzPFRleHQ+
KCpzdGFydE5vZGUpICYmIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRN
YXhPZmZzZXQoKnN0YXJ0Tm9kZSkpIHsKICAgICAgICAgLy8gTW92ZSBvdXQgb2YgdGV4dCBub2Rl
IGlmIHJhbmdlIGRvZXMgbm90IGluY2x1ZGUgaXRzIGNoYXJhY3RlcnMuCiAgICAgICAgIHN0YXJ0
Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKnN0YXJ0Tm9kZSk7CiAgICAgICAgIGlmICghc3Rh
cnROb2RlKQpAQCAtMzk0LDcgKzM5NCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5
UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSkKICAgICAgICAgICAg
IGlmICghbm9kZUZ1bGx5U2VsZWN0ZWQobm9kZSwgc3RhcnQsIGVuZCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+
KG5vZGUpOwotICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSAmJiBub2RlLT5y
ZW5kZXJlcigpICYmIG5vZGUtPnBhcmVudE5vZGUoKSAhPSBsYXN0U3R5bGVkTm9kZSkgeworICAg
ICAgICB9IGVsc2UgaWYgKGlzPFRleHQ+KCpub2RlKSAmJiBub2RlLT5yZW5kZXJlcigpICYmIG5v
ZGUtPnBhcmVudE5vZGUoKSAhPSBsYXN0U3R5bGVkTm9kZSkgewogICAgICAgICAgICAgLy8gTGFz
dCBzdHlsZWQgbm9kZSB3YXMgbm90IHBhcmVudCBub2RlIG9mIHRoaXMgdGV4dCBub2RlLCBidXQg
d2Ugd2lzaCB0byBzdHlsZSB0aGlzCiAgICAgICAgICAgICAvLyB0ZXh0IG5vZGUuIFRvIG1ha2Ug
dGhpcyBwb3NzaWJsZSwgYWRkIGEgc3R5bGUgc3BhbiB0byBzdXJyb3VuZCB0aGlzIHRleHQgbm9k
ZS4KICAgICAgICAgICAgIGF1dG8gc3BhbiA9IGNyZWF0ZVN0eWxlU3BhbkVsZW1lbnQoZG9jdW1l
bnQoKSk7CkBAIC04MDIsNyArODAyLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJ
bmxpbmVTdHlsZVRvTm9kZVJhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUsIFBhc3NSZWYKICAgICAg
ICAgaWYgKG5vZGUtPmhhc0NoaWxkTm9kZXMoKSkgewogICAgICAgICAgICAgaWYgKG5vZGUtPmNv
bnRhaW5zKHBhc3RFbmROb2RlLmdldCgpKSB8fCBjb250YWluc05vbkVkaXRhYmxlUmVnaW9uKCpu
b2RlKSB8fCAhbm9kZS0+cGFyZW50Tm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50
KG5vZGUuZ2V0KCkpKSB7CisgICAgICAgICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KCpu
b2RlKSkgewogICAgICAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBp
bmdDaGlsZHJlbigqbm9kZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CkBAIC04NzAsNyArODcwLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlQ29u
ZmxpY3RpbmdJbmxpbmVTdHlsZUZyb21SdW4oRWRpdGluZ1N0eWxlKiBzdHlsZSwKICAgICBBU1NF
UlQocnVuU3RhcnQgJiYgcnVuRW5kKTsKICAgICBSZWZQdHI8Tm9kZT4gbmV4dCA9IHJ1blN0YXJ0
OwogICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBuZXh0OyBub2RlICYmIG5vZGUtPmluRG9j
dW1lbnQoKSAmJiBub2RlICE9IHBhc3RFbmROb2RlOyBub2RlID0gbmV4dCkgewotICAgICAgICBp
ZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUuZ2V0KCkpKSB7CisgICAgICAgIGlmIChlZGl0
aW5nSWdub3Jlc0NvbnRlbnQoKm5vZGUpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmNv
bnRhaW5zKHBhc3RFbmROb2RlLmdldCgpKSk7CiAgICAgICAgICAgICBuZXh0ID0gTm9kZVRyYXZl
cnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm5vZGUpOwogICAgICAgICB9IGVsc2UKQEAgLTEw
OTIsNyArMTA5Miw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnB1c2hEb3duSW5saW5lU3R5
bGVBcm91bmROb2RlKEVkaXRpbmdTdHlsZSogc3R5bGUsIE5vZGUqCiAgICAgfQogfQogCi12b2lk
IEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqIHN0eWxl
LCBjb25zdCBQb3NpdGlvbiAmc3RhcnQsIGNvbnN0IFBvc2l0aW9uICZlbmQpCit2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqIHN0eWxlLCBjb25z
dCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7CiAgICAgQVNTRVJUKHN0
YXJ0LmlzTm90TnVsbCgpKTsKICAgICBBU1NFUlQoZW5kLmlzTm90TnVsbCgpKTsKQEAgLTExMDUs
MTUgKzExMDUsMTQgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGUo
RWRpdGluZ1N0eWxlKiBzdHlsZSwgY29uc3QgUG9zaXRpb24gJnMKICAgICAvLyBJZiB0aGUgcHVz
aERvd25TdGFydCBpcyBhdCB0aGUgZW5kIG9mIGEgdGV4dCBub2RlLCB0aGVuIHRoaXMgbm9kZSBp
cyBub3QgZnVsbHkgc2VsZWN0ZWQuCiAgICAgLy8gTW92ZSBpdCB0byB0aGUgbmV4dCBkZWVwIHF1
aXZhbGVudCBwb3NpdGlvbiB0byBhdm9pZCByZW1vdmluZyB0aGUgc3R5bGUgZnJvbSB0aGlzIG5v
ZGUuCiAgICAgLy8gZS5nLiBpZiBwdXNoRG93blN0YXJ0IHdhcyBhdCBQb3NpdGlvbigiaGVsbG8i
LCA1KSBpbiA8Yj5oZWxsbzxkaXY+d29ybGQ8L2Rpdj48L2I+LCB3ZSB3YW50IFBvc2l0aW9uKCJ3
b3JsZCIsIDApIGluc3RlYWQuCi0gICAgTm9kZSogcHVzaERvd25TdGFydENvbnRhaW5lciA9IHB1
c2hEb3duU3RhcnQuY29udGFpbmVyTm9kZSgpOwotICAgIGlmIChwdXNoRG93blN0YXJ0Q29udGFp
bmVyICYmIHB1c2hEb3duU3RhcnRDb250YWluZXItPmlzVGV4dE5vZGUoKQotICAgICAgICAmJiBw
dXNoRG93blN0YXJ0LmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA9PSBwdXNoRG93blN0
YXJ0Q29udGFpbmVyLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkKKyAgICBhdXRvKiBwdXNoRG93blN0
YXJ0Q29udGFpbmVyID0gcHVzaERvd25TdGFydC5jb250YWluZXJOb2RlKCk7CisgICAgaWYgKGlz
PFRleHQ+KHB1c2hEb3duU3RhcnRDb250YWluZXIpICYmIHB1c2hEb3duU3RhcnQuY29tcHV0ZU9m
ZnNldEluQ29udGFpbmVyTm9kZSgpID09IHB1c2hEb3duU3RhcnRDb250YWluZXItPm1heENoYXJh
Y3Rlck9mZnNldCgpKQogICAgICAgICBwdXNoRG93blN0YXJ0ID0gbmV4dFZpc3VhbGx5RGlzdGlu
Y3RDYW5kaWRhdGUocHVzaERvd25TdGFydCk7CiAgICAgLy8gSWYgcHVzaERvd25FbmQgaXMgYXQg
dGhlIHN0YXJ0IG9mIGEgdGV4dCBub2RlLCB0aGVuIHRoaXMgbm9kZSBpcyBub3QgZnVsbHkgc2Vs
ZWN0ZWQuCiAgICAgLy8gTW92ZSBpdCB0byB0aGUgcHJldmlvdXMgZGVlcCBlcXVpdmFsZW50IHBv
c2l0aW9uIHRvIGF2b2lkIHJlbW92aW5nIHRoZSBzdHlsZSBmcm9tIHRoaXMgbm9kZS4KICAgICBQ
b3NpdGlvbiBwdXNoRG93bkVuZCA9IGVuZC51cHN0cmVhbSgpOwotICAgIE5vZGUqIHB1c2hEb3du
RW5kQ29udGFpbmVyID0gcHVzaERvd25FbmQuY29udGFpbmVyTm9kZSgpOwotICAgIGlmIChwdXNo
RG93bkVuZENvbnRhaW5lciAmJiBwdXNoRG93bkVuZENvbnRhaW5lci0+aXNUZXh0Tm9kZSgpICYm
ICFwdXNoRG93bkVuZC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkpCisgICAgYXV0byog
cHVzaERvd25FbmRDb250YWluZXIgPSBwdXNoRG93bkVuZC5jb250YWluZXJOb2RlKCk7CisgICAg
aWYgKGlzPFRleHQ+KHB1c2hEb3duRW5kQ29udGFpbmVyKSAmJiAhcHVzaERvd25FbmQuY29tcHV0
ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpKQogICAgICAgICBwdXNoRG93bkVuZCA9IHByZXZpb3Vz
VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwdXNoRG93bkVuZCk7CiAKICAgICBwdXNoRG93bklu
bGluZVN0eWxlQXJvdW5kTm9kZShzdHlsZSwgcHVzaERvd25TdGFydC5kZXByZWNhdGVkTm9kZSgp
KTsKQEAgLTExMzAsNyArMTEyOSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlu
bGluZVN0eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUsIGNvbnN0IFBvc2l0aW9uICZzCiAgICAgUmVm
UHRyPE5vZGU+IG5vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpOwogICAgIHdoaWxlIChub2Rl
KSB7CiAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0OwotICAgICAgICBpZiAoZWRpdGluZ0lnbm9y
ZXNDb250ZW50KG5vZGUuZ2V0KCkpKSB7CisgICAgICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRl
bnQoKm5vZGUpKSB7CiAgICAgICAgICAgICBBU1NFUlQobm9kZSA9PSBlbmQuZGVwcmVjYXRlZE5v
ZGUoKSB8fCAhbm9kZS0+Y29udGFpbnMoZW5kLmRlcHJlY2F0ZWROb2RlKCkpKTsKICAgICAgICAg
ICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbm9kZSk7CiAg
ICAgICAgIH0gZWxzZQpAQCAtMTE3NywxMCArMTE3NiwxMCBAQCB2b2lkIEFwcGx5U3R5bGVDb21t
YW5kOjpyZW1vdmVJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqIHN0eWxlLCBjb25zdCBQb3NpdGlv
biAmcwogICAgIHVwZGF0ZVN0YXJ0RW5kKHMsIGUpOwogfQogCi1ib29sIEFwcGx5U3R5bGVDb21t
YW5kOjpub2RlRnVsbHlTZWxlY3RlZChOb2RlICpub2RlLCBjb25zdCBQb3NpdGlvbiAmc3RhcnQs
IGNvbnN0IFBvc2l0aW9uICZlbmQpIGNvbnN0Citib29sIEFwcGx5U3R5bGVDb21tYW5kOjpub2Rl
RnVsbHlTZWxlY3RlZChOb2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBv
c2l0aW9uJiBlbmQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG5vZGUpOwotICAgIEFTU0VSVChub2Rl
LT5pc0VsZW1lbnROb2RlKCkpOworICAgIEFTU0VSVChpczxFbGVtZW50Pihub2RlKSk7CiAKICAg
ICAvLyBUaGUgdHJlZSBtYXkgaGF2ZSBjaGFuZ2VkIGFuZCBQb3NpdGlvbjo6dXBzdHJlYW0oKSBy
ZWxpZXMgb24gYW4gdXAtdG8tZGF0ZSBsYXlvdXQuCiAgICAgbm9kZS0+ZG9jdW1lbnQoKS51cGRh
dGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKQEAgLTExODksMTAgKzExODgsMTAg
QEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6bm9kZUZ1bGx5U2VsZWN0ZWQoTm9kZSAqbm9kZSwg
Y29uc3QgUG9zaXRpb24gJnN0YXJ0LCBjb24KICAgICAgICAgJiYgY29tcGFyZVBvc2l0aW9ucyhs
YXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5vZGUpLnVwc3RyZWFtKCksIGVuZCkgPD0gMDsKIH0K
IAotYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6bm9kZUZ1bGx5VW5zZWxlY3RlZChOb2RlICpub2Rl
LCBjb25zdCBQb3NpdGlvbiAmc3RhcnQsIGNvbnN0IFBvc2l0aW9uICZlbmQpIGNvbnN0Citib29s
IEFwcGx5U3R5bGVDb21tYW5kOjpub2RlRnVsbHlVbnNlbGVjdGVkKE5vZGUqIG5vZGUsIGNvbnN0
IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkgY29uc3QKIHsKICAgICBBU1NF
UlQobm9kZSk7Ci0gICAgQVNTRVJUKG5vZGUtPmlzRWxlbWVudE5vZGUoKSk7CisgICAgQVNTRVJU
KGlzPEVsZW1lbnQ+KG5vZGUpKTsKIAogICAgIGJvb2wgaXNGdWxseUJlZm9yZVN0YXJ0ID0gY29t
cGFyZVBvc2l0aW9ucyhsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5vZGUpLnVwc3RyZWFtKCks
IHN0YXJ0KSA8IDA7CiAgICAgYm9vbCBpc0Z1bGx5QWZ0ZXJFbmQgPSBjb21wYXJlUG9zaXRpb25z
KGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKSwgZW5kKSA+IDA7CkBAIC0xMjAyLDcg
KzEyMDEsNyBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpub2RlRnVsbHlVbnNlbGVjdGVkKE5v
ZGUgKm5vZGUsIGNvbnN0IFBvc2l0aW9uICZzdGFydCwgYwogCiB2b2lkIEFwcGx5U3R5bGVDb21t
YW5kOjpzcGxpdFRleHRBdFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRp
b24mIGVuZCkKIHsKLSAgICBBU1NFUlQoc3RhcnQuY29udGFpbmVyTm9kZSgpLT5pc1RleHROb2Rl
KCkpOworICAgIEFTU0VSVChpczxUZXh0PihzdGFydC5jb250YWluZXJOb2RlKCkpKTsKIAogICAg
IFBvc2l0aW9uIG5ld0VuZDsKICAgICBpZiAoZW5kLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6
UG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIHN0YXJ0LmNvbnRhaW5lck5vZGUoKSA9PSBlbmQu
Y29udGFpbmVyTm9kZSgpKQpAQCAtMTIzMyw3ICsxMjMyLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6c3BsaXRUZXh0QXRFbmQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlv
biYgZW4KIAogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVudEF0U3RhcnQo
Y29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewotICAgIEFTU0VS
VChzdGFydC5jb250YWluZXJOb2RlKCktPmlzVGV4dE5vZGUoKSk7CisgICAgQVNTRVJUKGlzPFRl
eHQ+KHN0YXJ0LmNvbnRhaW5lck5vZGUoKSkpOwogCiAgICAgUG9zaXRpb24gbmV3RW5kOwogICAg
IGlmIChzdGFydC5jb250YWluZXJOb2RlKCkgPT0gZW5kLmNvbnRhaW5lck5vZGUoKSkKQEAgLTEy
NDcsNyArMTI0Niw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRB
dFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zCiAKIHZvaWQgQXBwbHlTdHls
ZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdEVuZChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0IFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgQVNTRVJUKGVuZC5jb250YWluZXJOb2RlKCktPmlz
VGV4dE5vZGUoKSk7CisgICAgQVNTRVJUKGlzPFRleHQ+KGVuZC5jb250YWluZXJOb2RlKCkpKTsK
IAogICAgIGJvb2wgc2hvdWxkVXBkYXRlU3RhcnQgPSBzdGFydC5jb250YWluZXJOb2RlKCkgPT0g
ZW5kLmNvbnRhaW5lck5vZGUoKTsKICAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQo
ZW5kLmNvbnRhaW5lclRleHQoKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKQEAgLTEy
NjgsMTMgKzEyNjcsMTMgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkU3BsaXRUZXh0
RWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBFZGl0aW5nU3R5bGUqIHMKICAgICBpZiAoIWlzPEhU
TUxFbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJu
IHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIGRvd25jYXN0PEhUTUxF
bGVtZW50PihlbGVtZW50KSk7CisgICAgcmV0dXJuIHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJv
bUVsZW1lbnQoc3R5bGUsICZkb3duY2FzdDxIVE1MRWxlbWVudD4oKmVsZW1lbnQpKTsKIH0KIAog
Ym9vbCBBcHBseVN0eWxlQ29tbWFuZDo6aXNWYWxpZENhcmV0UG9zaXRpb25JblRleHROb2RlKGNv
bnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKICAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uY29u
dGFpbmVyTm9kZSgpOwotICAgIGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246
OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciB8fCAhbm9kZS0+aXNUZXh0Tm9kZSgpKQorICAgIGlm
IChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFu
Y2hvciB8fCAhaXM8VGV4dD4obm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbnQg
b2Zmc2V0SW5UZXh0ID0gcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CiAgICAgcmV0
dXJuIG9mZnNldEluVGV4dCA+IGNhcmV0TWluT2Zmc2V0KCpub2RlKSAmJiBvZmZzZXRJblRleHQg
PCBjYXJldE1heE9mZnNldCgqbm9kZSk7CkBAIC0xMzY5LDEzICsxMzY4LDE0IEBAIHZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OnN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoUGFzc1JlZlB0cjxO
b2RlPiBwYXNzZWRTdGFyCiAKICAgICBSZWZQdHI8Tm9kZT4gbmV4dFNpYmxpbmcgPSBlbGVtZW50
LT5uZXh0U2libGluZygpOwogICAgIFJlZlB0cjxOb2RlPiBwcmV2aW91c1NpYmxpbmcgPSBlbGVt
ZW50LT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICBpZiAoaXM8RWxlbWVudD4obmV4dFNpYmxpbmcu
Z2V0KCkpICYmIG5leHRTaWJsaW5nLT5oYXNFZGl0YWJsZVN0eWxlKCkgJiYgYXJlSWRlbnRpY2Fs
RWxlbWVudHMoKmVsZW1lbnQsICpuZXh0U2libGluZykpCisKKyAgICBpZiAobmV4dFNpYmxpbmcg
JiYgbmV4dFNpYmxpbmctPmhhc0VkaXRhYmxlU3R5bGUoKSAmJiBhcmVJZGVudGljYWxFbGVtZW50
cygqZWxlbWVudCwgKm5leHRTaWJsaW5nKSkKICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50
cyhlbGVtZW50LmdldCgpLCBkb3duY2FzdDxFbGVtZW50PihuZXh0U2libGluZy5nZXQoKSkpOwog
CiAgICAgaWYgKGlzPEVsZW1lbnQ+KHByZXZpb3VzU2libGluZy5nZXQoKSkgJiYgcHJldmlvdXNT
aWJsaW5nLT5oYXNFZGl0YWJsZVN0eWxlKCkpIHsKLSAgICAgICAgTm9kZSogbWVyZ2VkRWxlbWVu
dCA9IHByZXZpb3VzU2libGluZy0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgYXV0byogbWVyZ2Vk
RWxlbWVudCA9IHByZXZpb3VzU2libGluZy0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgQVNTRVJU
KG1lcmdlZEVsZW1lbnQpOwotICAgICAgICBpZiAoaXM8RWxlbWVudD4oKm1lcmdlZEVsZW1lbnQp
ICYmIG1lcmdlZEVsZW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSAmJiBhcmVJZGVudGljYWxFbGVt
ZW50cygqcHJldmlvdXNTaWJsaW5nLCAqbWVyZ2VkRWxlbWVudCkpCisgICAgICAgIGlmIChtZXJn
ZWRFbGVtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkgJiYgYXJlSWRlbnRpY2FsRWxlbWVudHMoKnBy
ZXZpb3VzU2libGluZywgKm1lcmdlZEVsZW1lbnQpKQogICAgICAgICAgICAgbWVyZ2VJZGVudGlj
YWxFbGVtZW50cyhkb3duY2FzdDxFbGVtZW50PihwcmV2aW91c1NpYmxpbmcuZ2V0KCkpLCBkb3du
Y2FzdDxFbGVtZW50PihtZXJnZWRFbGVtZW50KSk7CiAgICAgfQogCkBAIC0xNDIxLDcgKzE0MjEs
NyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphZGRJbmxpbmVTdHlsZUlmTmVlZGVkKEVkaXRp
bmdTdHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8TgogUG9zaXRpb24gQXBwbHlTdHlsZUNvbW1hbmQ6
OnBvc2l0aW9uVG9Db21wdXRlSW5saW5lU3R5bGVDaGFuZ2UoUGFzc1JlZlB0cjxOb2RlPiBzdGFy
dE5vZGUsIFJlZlB0cjxOb2RlPiYgZHVtbXlFbGVtZW50KQogewogICAgIC8vIEl0J3Mgb2theSB0
byBvYnRhaW4gdGhlIHN0eWxlIGF0IHRoZSBzdGFydE5vZGUgYmVjYXVzZSB3ZSd2ZSByZW1vdmVk
IGFsbCByZWxldmFudCBzdHlsZXMgZnJvbSB0aGUgY3VycmVudCBydW4uCi0gICAgaWYgKCFzdGFy
dE5vZGUtPmlzRWxlbWVudE5vZGUoKSkgeworICAgIGlmICghaXM8RWxlbWVudD4oKnN0YXJ0Tm9k
ZSkpIHsKICAgICAgICAgZHVtbXlFbGVtZW50ID0gY3JlYXRlU3R5bGVTcGFuRWxlbWVudChkb2N1
bWVudCgpKTsKICAgICAgICAgaW5zZXJ0Tm9kZUF0KGR1bW15RWxlbWVudCwgcG9zaXRpb25CZWZv
cmVOb2RlKHN0YXJ0Tm9kZS5nZXQoKSkpOwogICAgICAgICByZXR1cm4gZmlyc3RQb3NpdGlvbklu
T3JCZWZvcmVOb2RlKGR1bW15RWxlbWVudC5nZXQoKSk7CkBAIC0xNDQwLDE2ICsxNDQwLDE5IEBA
IHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVDaGFuZ2UoUGFzc1JlZlB0
cjxOb2RlPiBwYXNzZWRTdGFydCwgUGFzCiAgICAgLy8gRmluZCBhcHByb3ByaWF0ZSBmb250IGFu
ZCBzcGFuIGVsZW1lbnRzIHRvcC1kb3duLgogICAgIEhUTUxGb250RWxlbWVudCogZm9udENvbnRh
aW5lciA9IG51bGxwdHI7CiAgICAgSFRNTEVsZW1lbnQqIHN0eWxlQ29udGFpbmVyID0gbnVsbHB0
cjsKLSAgICBmb3IgKE5vZGUqIGNvbnRhaW5lciA9IHN0YXJ0Tm9kZS5nZXQoKTsgY29udGFpbmVy
ICYmIHN0YXJ0Tm9kZSA9PSBlbmROb2RlOyBjb250YWluZXIgPSBjb250YWluZXItPmZpcnN0Q2hp
bGQoKSkgewotICAgICAgICBpZiAoaXM8SFRNTEZvbnRFbGVtZW50PigqY29udGFpbmVyKSkKLSAg
ICAgICAgICAgIGZvbnRDb250YWluZXIgPSBkb3duY2FzdDxIVE1MRm9udEVsZW1lbnQ+KGNvbnRh
aW5lcik7Ci0gICAgICAgIGJvb2wgc3R5bGVDb250YWluZXJJc05vdFNwYW4gPSAhaXM8SFRNTFNw
YW5FbGVtZW50PihzdHlsZUNvbnRhaW5lcik7Ci0gICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4o
KmNvbnRhaW5lcikgJiYgKGlzPEhUTUxTcGFuRWxlbWVudD4oKmNvbnRhaW5lcikgfHwgKHN0eWxl
Q29udGFpbmVySXNOb3RTcGFuICYmIGNvbnRhaW5lci0+aGFzQ2hpbGROb2RlcygpKSkpCi0gICAg
ICAgICAgICBzdHlsZUNvbnRhaW5lciA9IGRvd25jYXN0PEhUTUxFbGVtZW50Pihjb250YWluZXIp
OwotICAgICAgICBpZiAoIWNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpKQorICAgIHdoaWxlIChzdGFy
dE5vZGUgJiYgc3RhcnROb2RlID09IGVuZE5vZGUpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxFbGVt
ZW50Pigqc3RhcnROb2RlKSkgeworICAgICAgICAgICAgYXV0byYgY29udGFpbmVyID0gZG93bmNh
c3Q8SFRNTEVsZW1lbnQ+KCpzdGFydE5vZGUpOworICAgICAgICAgICAgaWYgKGlzPEhUTUxGb250
RWxlbWVudD4oY29udGFpbmVyKSkKKyAgICAgICAgICAgICAgICBmb250Q29udGFpbmVyID0gJmRv
d25jYXN0PEhUTUxGb250RWxlbWVudD4oY29udGFpbmVyKTsKKyAgICAgICAgICAgIGlmIChpczxI
VE1MU3BhbkVsZW1lbnQ+KGNvbnRhaW5lcikgfHwgKCFpczxIVE1MU3BhbkVsZW1lbnQ+KHN0eWxl
Q29udGFpbmVyKSAmJiBjb250YWluZXIuaGFzQ2hpbGROb2RlcygpKSkKKyAgICAgICAgICAgICAg
ICBzdHlsZUNvbnRhaW5lciA9ICZjb250YWluZXI7CisgICAgICAgIH0KKyAgICAgICAgYXV0byog
c3RhcnROb2RlRmlyc3RDaGlsZCA9IHN0YXJ0Tm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICBp
ZiAoIXN0YXJ0Tm9kZUZpcnN0Q2hpbGQpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3Rh
cnROb2RlID0gY29udGFpbmVyLT5maXJzdENoaWxkKCk7Ci0gICAgICAgIGVuZE5vZGUgPSBjb250
YWluZXItPmxhc3RDaGlsZCgpOworICAgICAgICBlbmROb2RlID0gc3RhcnROb2RlLT5sYXN0Q2hp
bGQoKTsKKyAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlRmlyc3RDaGlsZDsKICAgICB9CiAK
ICAgICAvLyBGb250IHRhZ3MgbmVlZCB0byBnbyBvdXRzaWRlIG9mIENTUyBzbyB0aGF0IENTUyBm
b250IHNpemVzIG92ZXJyaWRlIGxlYWdjeSBmb250IHNpemVzLgpAQCAtMTQ4Miw5ICsxNDg1LDkg
QEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZUNoYW5nZShQYXNzUmVm
UHRyPE5vZGU+IHBhc3NlZFN0YXJ0LCBQYXMKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoc3R5bGVDb250YWluZXIsIHN0eWxlQXR0ciwgc3R5bGVU
b01lcmdlLT5hc1RleHQoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBSZWZQdHI8
RWxlbWVudD4gc3R5bGVFbGVtZW50ID0gY3JlYXRlU3R5bGVTcGFuRWxlbWVudChkb2N1bWVudCgp
KTsKKyAgICAgICAgICAgIGF1dG8gc3R5bGVFbGVtZW50ID0gY3JlYXRlU3R5bGVTcGFuRWxlbWVu
dChkb2N1bWVudCgpKTsKICAgICAgICAgICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKHN0
eWxlQXR0ciwgc3R5bGVUb01lcmdlLT5hc1RleHQoKSk7Ci0gICAgICAgICAgICBzdXJyb3VuZE5v
ZGVSYW5nZVdpdGhFbGVtZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgc3R5bGVFbGVtZW50LnJlbGVh
c2UoKSk7CisgICAgICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KHN0YXJ0Tm9k
ZSwgZW5kTm9kZSwgV1RGTW92ZShzdHlsZUVsZW1lbnQpKTsKICAgICAgICAgfQogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRl
eCA2OTRiNzZhMzdkNmJjOTRmOTIyM2NiYmJjYjFmYmUwMDFmZjEwNTY1Li5kMjMxMmQxZGJmMTZi
ZmI0OWI0YWEzNTYyNGEyNDk5N2Y4MzU5MWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtNDg2LDcgKzQ4Niw3IEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVBdChQYXNzUmVmUHRyPE5vZGU+IGluc2VydENo
aWxkLCBjb25zdCBQb3NpCiAgICAgTm9kZSogcmVmQ2hpbGQgPSBwLmRlcHJlY2F0ZWROb2RlKCk7
CiAgICAgaW50IG9mZnNldCA9IHAuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICAKLSAg
ICBpZiAoY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhyZWZDaGlsZCkpIHsKKyAgICBpZiAoY2Fu
SGF2ZUNoaWxkcmVuRm9yRWRpdGluZygqcmVmQ2hpbGQpKSB7CiAgICAgICAgIE5vZGUqIGNoaWxk
ID0gcmVmQ2hpbGQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGNoaWxk
ICYmIGkgPCBvZmZzZXQ7IGkrKykKICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCk7CkBAIC01MDksNyArNTA5LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5z
ZXJ0Tm9kZUF0KFBhc3NSZWZQdHI8Tm9kZT4gaW5zZXJ0Q2hpbGQsIGNvbnN0IFBvc2kKIAogdm9p
ZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwZW5kTm9kZShQYXNzUmVmUHRyPE5vZGU+IG5vZGUs
IFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50KQogewotICAgIEFTU0VSVChjYW5IYXZl
Q2hpbGRyZW5Gb3JFZGl0aW5nKHBhcmVudC5nZXQoKSkpOworICAgIEFTU0VSVChjYW5IYXZlQ2hp
bGRyZW5Gb3JFZGl0aW5nKCpwYXJlbnQpKTsKICAgICBBU1NFUlQobm9kZSk7CiAgICAgYXBwbHlD
b21tYW5kVG9Db21wb3NpdGUoQXBwZW5kTm9kZUNvbW1hbmQ6OmNyZWF0ZShwYXJlbnQsICpub2Rl
LCBlZGl0aW5nQWN0aW9uKCkpKTsKIH0KQEAgLTE1MDMsOSArMTUwMyw5IEBAIGJvb2wgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0eUxpc3RJdGVtKCkKIAogICAgIFJlZlB0cjxO
b2RlPiBwcmV2aW91c0xpc3ROb2RlID0gZW1wdHlMaXN0SXRlbS0+aXNFbGVtZW50Tm9kZSgpID8g
RWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKCplbXB0eUxpc3RJdGVtKTogZW1wdHlM
aXN0SXRlbS0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgUmVmUHRyPE5vZGU+IG5leHRMaXN0Tm9k
ZSA9IGVtcHR5TGlzdEl0ZW0tPmlzRWxlbWVudE5vZGUoKSA/IEVsZW1lbnRUcmF2ZXJzYWw6Om5l
eHRTaWJsaW5nKCplbXB0eUxpc3RJdGVtKTogZW1wdHlMaXN0SXRlbS0+bmV4dFNpYmxpbmcoKTsK
LSAgICBpZiAoaXNMaXN0SXRlbShuZXh0TGlzdE5vZGUuZ2V0KCkpIHx8IGlzTGlzdEVsZW1lbnQo
bmV4dExpc3ROb2RlLmdldCgpKSkgeworICAgIGlmIChpc0xpc3RJdGVtKG5leHRMaXN0Tm9kZS5n
ZXQoKSkgfHwgaXNMaXN0SFRNTEVsZW1lbnQobmV4dExpc3ROb2RlLmdldCgpKSkgewogICAgICAg
ICAvLyBJZiBlbXB0eUxpc3RJdGVtIGZvbGxvd3MgYW5vdGhlciBsaXN0IGl0ZW0gb3IgbmVzdGVk
IGxpc3QsIHNwbGl0IHRoZSBsaXN0IG5vZGUuCi0gICAgICAgIGlmIChpc0xpc3RJdGVtKHByZXZp
b3VzTGlzdE5vZGUuZ2V0KCkpIHx8IGlzTGlzdEVsZW1lbnQocHJldmlvdXNMaXN0Tm9kZS5nZXQo
KSkpCisgICAgICAgIGlmIChpc0xpc3RJdGVtKHByZXZpb3VzTGlzdE5vZGUuZ2V0KCkpIHx8IGlz
TGlzdEhUTUxFbGVtZW50KHByZXZpb3VzTGlzdE5vZGUuZ2V0KCkpKQogICAgICAgICAgICAgc3Bs
aXRFbGVtZW50KGRvd25jYXN0PEVsZW1lbnQ+KGxpc3ROb2RlLmdldCgpKSwgZW1wdHlMaXN0SXRl
bSk7CiAKICAgICAgICAgLy8gSWYgZW1wdHlMaXN0SXRlbSBpcyBmb2xsb3dlZCBieSBvdGhlciBs
aXN0IGl0ZW0gb3IgbmVzdGVkIGxpc3QsIHRoZW4gaW5zZXJ0IG5ld0Jsb2NrIGJlZm9yZSB0aGUg
bGlzdCBub2RlLgpAQCAtMTUxNyw3ICsxNTE3LDcgQEAgYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6YnJlYWtPdXRPZkVtcHR5TGlzdEl0ZW0oKQogICAgICAgICAvLyBXaGVuIGVtcHR5TGlzdEl0
ZW0gZG9lcyBub3QgZm9sbG93IGFueSBsaXN0IGl0ZW0gb3IgbmVzdGVkIGxpc3QsIGluc2VydCBu
ZXdCbG9jayBhZnRlciB0aGUgZW5jbG9zaW5nIGxpc3Qgbm9kZS4KICAgICAgICAgLy8gUmVtb3Zl
IHRoZSBlbmNsb3Npbmcgbm9kZSBpZiBlbXB0eUxpc3RJdGVtIGlzIHRoZSBvbmx5IGNoaWxkOyBv
dGhlcndpc2UganVzdCByZW1vdmUgZW1wdHlMaXN0SXRlbS4KICAgICAgICAgaW5zZXJ0Tm9kZUFm
dGVyKG5ld0Jsb2NrLCBsaXN0Tm9kZSk7Ci0gICAgICAgIHJlbW92ZU5vZGUoaXNMaXN0SXRlbShw
cmV2aW91c0xpc3ROb2RlLmdldCgpKSB8fCBpc0xpc3RFbGVtZW50KHByZXZpb3VzTGlzdE5vZGUu
Z2V0KCkpID8gZW1wdHlMaXN0SXRlbS5nZXQoKSA6IGxpc3ROb2RlLmdldCgpKTsKKyAgICAgICAg
cmVtb3ZlTm9kZShpc0xpc3RJdGVtKHByZXZpb3VzTGlzdE5vZGUuZ2V0KCkpIHx8IGlzTGlzdEhU
TUxFbGVtZW50KHByZXZpb3VzTGlzdE5vZGUuZ2V0KCkpID8gZW1wdHlMaXN0SXRlbS5nZXQoKSA6
IGxpc3ROb2RlLmdldCgpKTsKICAgICB9CiAKICAgICBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKG5l
d0Jsb2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCmluZGV4IGY2YmVhNjJjZmNjMWM1ZjE3NGNmOTNjMzdhNjA3NDU2OGViMmVhNTEu
LmY4MzUxMzA2ZTkxMTI0OWU3NDkxMjFjZDFkNmNlZGU1NjY3NzI2MjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNDU3LDcg
KzQ1Nyw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0
ZSgpCiAgICAgbWFrZVN0eWxpbmdFbGVtZW50c0RpcmVjdENoaWxkcmVuT2ZFZGl0YWJsZVJvb3RU
b1ByZXZlbnRTdHlsZUxvc3MoKTsKIAogICAgIC8vIE5ldmVyIHJlbW92ZSB0aGUgc3RhcnQgYmxv
Y2sgdW5sZXNzIGl0J3MgYSB0YWJsZSwgaW4gd2hpY2ggY2FzZSB3ZSB3b24ndCBtZXJnZSBjb250
ZW50IGluLgotICAgIGlmIChzdGFydE5vZGUgPT0gbV9zdGFydEJsb2NrICYmICFzdGFydE9mZnNl
dCAmJiBjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKHN0YXJ0Tm9kZSkgJiYgIWlzPEhUTUxUYWJs
ZUVsZW1lbnQ+KCpzdGFydE5vZGUpKSB7CisgICAgaWYgKHN0YXJ0Tm9kZSA9PSBtX3N0YXJ0Qmxv
Y2sgJiYgIXN0YXJ0T2Zmc2V0ICYmIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoKnN0YXJ0Tm9k
ZSkgJiYgIWlzPEhUTUxUYWJsZUVsZW1lbnQ+KCpzdGFydE5vZGUpKSB7CiAgICAgICAgIHN0YXJ0
T2Zmc2V0ID0gMDsKICAgICAgICAgc3RhcnROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqc3Rh
cnROb2RlKTsKICAgICAgICAgaWYgKCFzdGFydE5vZGUpCkBAIC01MzgsNyArNTM4LDcgQEAgdm9p
ZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgp
ICE9IHN0YXJ0Tm9kZSAmJiAhbV91cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmlzRGVz
Y2VuZGFudE9mKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKSAmJiBtX2Rvd25zdHJl
YW1FbmQuYW5jaG9yTm9kZSgpLT5pbkRvY3VtZW50KCkgJiYgbV9kb3duc3RyZWFtRW5kLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNaW5PZmZzZXQoKm1fZG93bnN0cmVhbUVuZC5k
ZXByZWNhdGVkTm9kZSgpKSkgewotICAgICAgICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5hdExh
c3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgJiYgIWNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmco
bV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpKSB7CisgICAgICAgICAgICBpZiAobV9k
b3duc3RyZWFtRW5kLmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSAmJiAhY2FuSGF2ZUNo
aWxkcmVuRm9yRWRpdGluZygqbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gVGhlIG5vZGUgaXRzZWxmIGlzIGZ1bGx5IHNlbGVjdGVkLCBub3Qg
anVzdCBpdHMgY29udGVudHMuICBEZWxldGUgaXQuCiAgICAgICAgICAgICAgICAgcmVtb3ZlTm9k
ZShtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgICAgICB9IGVsc2Ug
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCmluZGV4
IDg0NDEzYThhZDUxNzY3NjU0MzU0NzYyOTM0YTFjMzE0OTZhZjFiNTMuLjJjNzRjZGEwYTJlNjUx
ZGY5YjkwZjE2ZjUzMDEzNGNmZWI3NmNhODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKQEAgLTI0LDE1ICsyNCwxNiBAQAogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRm9ybWF0Qmxv
Y2tDb21tYW5kLmgiCisKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQu
aCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJodG1s
ZWRpdGluZy5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKKyNpbmNs
dWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MSw2ICs0Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiAKIHN0YXRpYyBOb2RlKiBlbmNsb3NpbmdCbG9ja1RvU3BsaXRUcmVlVG8oTm9kZSog
c3RhcnROb2RlKTsKIHN0YXRpYyBib29sIGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUpOworCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNFbGVtZW50Rm9y
Rm9ybWF0QmxvY2soTm9kZSogbm9kZSkKIHsKICAgICByZXR1cm4gaXM8RWxlbWVudD4oKm5vZGUp
ICYmIGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS50YWdR
TmFtZSgpKTsKQEAgLTE1Niw3ICsxNTgsNyBAQCBOb2RlKiBlbmNsb3NpbmdCbG9ja1RvU3BsaXRU
cmVlVG8oTm9kZSogc3RhcnROb2RlKQogICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgIGlm
IChpc0Jsb2NrKG4pKQogICAgICAgICAgICAgbGFzdEJsb2NrID0gbjsKLSAgICAgICAgaWYgKGlz
TGlzdEVsZW1lbnQobikpCisgICAgICAgIGlmIChpc0xpc3RIVE1MRWxlbWVudChuKSkKICAgICAg
ICAgICAgIHJldHVybiBuLT5wYXJlbnROb2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKSA/IG4tPnBh
cmVudE5vZGUoKSA6IG47CiAgICAgfQogICAgIHJldHVybiBsYXN0QmxvY2s7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21t
YW5kLmNwcAppbmRleCAzNzRhYjllNzY0M2NkNzRkZmQwYTYyMzJjOWVhMjUxMDdhNzIzMGJiLi45
ZGY4YzllM2UwZGU4Y2ZkYmY5MDBkNjBjZTUyMDY3MTQ0NWUxMzRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFu
ZC5jcHAKQEAgLTMxOSw3ICszMTksNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNv
bW1hbmQ6OmRvQXBwbHkoKQogCiAgICAgLy8gSWYgdGhlIHJldHVybmVkIHBvc2l0aW9uIGxpZXMg
ZWl0aGVyIGF0IHRoZSBlbmQgb3IgYXQgdGhlIHN0YXJ0IG9mIGFuIGVsZW1lbnQgdGhhdCBpcyBp
Z25vcmVkIGJ5IGVkaXRpbmcKICAgICAvLyB3ZSBzaG91bGQgbW92ZSB0byBpdHMgdXBzdHJlYW0g
b3IgZG93bnN0cmVhbSBwb3NpdGlvbi4KLSAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KGlu
c2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpKSB7CisgICAgaWYgKGVkaXRpbmdJZ25v
cmVzQ29udGVudCgqaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAgICAg
ICAgaWYgKGluc2VydGlvblBvc2l0aW9uLmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkK
ICAgICAgICAgICAgIGluc2VydGlvblBvc2l0aW9uID0gaW5zZXJ0aW9uUG9zaXRpb24uZG93bnN0
cmVhbSgpOwogICAgICAgICBlbHNlIGlmIChpbnNlcnRpb25Qb3NpdGlvbi5hdEZpcnN0RWRpdGlu
Z1Bvc2l0aW9uRm9yTm9kZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9N
b2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Nb2Rp
ZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwCmluZGV4IDk5OGM5NmE2NWQ2ZTIxNDZjOGQ4MzU5NWY0
NzU2MTMxNWI4OTEyNzQuLmYzNDAwZmRhNjk0NWYyMGIzMDNmZDk2NzA1NGQxMWYyYTM5YzliMDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExl
dmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RM
ZXZlbC5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIGJvb2wgZ2V0U3RhcnRFbmRMaXN0Q2hp
bGRyZW4oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBOb2RlKiYgc3QKICAgICAv
LyBpZiB0aGUgc2VsZWN0aW9uIGVuZHMgb24gYSBsaXN0IGl0ZW0gd2l0aCBhIHN1Ymxpc3QsIGlu
Y2x1ZGUgdGhlIGVudGlyZSBzdWJsaXN0CiAgICAgaWYgKGVuZExpc3RDaGlsZC0+cmVuZGVyZXIo
KS0+aXNMaXN0SXRlbSgpKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogciA9IGVuZExpc3RDaGls
ZC0+cmVuZGVyZXIoKS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgaWYgKHIgJiYgaXNMaXN0RWxl
bWVudChyLT5ub2RlKCkpKQorICAgICAgICBpZiAociAmJiBpc0xpc3RIVE1MRWxlbWVudChyLT5u
b2RlKCkpKQogICAgICAgICAgICAgZW5kTGlzdENoaWxkID0gci0+bm9kZSgpOwogICAgIH0KIApA
QCAtMTc3LDcgKzE3Nyw3IEBAIHZvaWQgSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5k
Ojpkb0FwcGx5KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTm9kZSogcHJldmlvdXNJdGVtID0g
c3RhcnRMaXN0Q2hpbGQtPnJlbmRlcmVyKCktPnByZXZpb3VzU2libGluZygpLT5ub2RlKCk7Ci0g
ICAgaWYgKGlzTGlzdEVsZW1lbnQocHJldmlvdXNJdGVtKSkgeworICAgIGlmIChpc0xpc3RIVE1M
RWxlbWVudChwcmV2aW91c0l0ZW0pKSB7CiAgICAgICAgIC8vIG1vdmUgbm9kZXMgdXAgaW50byBw
cmVjZWRpbmcgbGlzdAogICAgICAgICBhcHBlbmRTaWJsaW5nTm9kZVJhbmdlKHN0YXJ0TGlzdENo
aWxkLCBlbmRMaXN0Q2hpbGQsIGRvd25jYXN0PEVsZW1lbnQ+KHByZXZpb3VzSXRlbSkpOwogICAg
ICAgICBtX2xpc3RFbGVtZW50ID0gcHJldmlvdXNJdGVtOwpAQCAtMjQ0LDExICsyNDQsMTEgQEAg
c3RhdGljIGJvb2wgY2FuRGVjcmVhc2VMaXN0TGV2ZWwoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uLCBOb2RlKiYgc3RhcnQKIHsKICAgICBpZiAoIWdldFN0YXJ0RW5kTGlzdENoaWxk
cmVuKHNlbGVjdGlvbiwgc3RhcnQsIGVuZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
KwogICAgIC8vIHRoZXJlIG11c3QgYmUgYSBkZXN0aW5hdGlvbiBsaXN0IHRvIG1vdmUgdGhlIGl0
ZW1zIHRvCi0gICAgaWYgKCFpc0xpc3RFbGVtZW50KHN0YXJ0LT5wYXJlbnROb2RlKCktPnBhcmVu
dE5vZGUoKSkpCisgICAgaWYgKCFpc0xpc3RIVE1MRWxlbWVudChzdGFydC0+cGFyZW50Tm9kZSgp
LT5wYXJlbnROb2RlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVt
b3ZlTm9kZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29t
bWFuZC5jcHAKaW5kZXggYjJhN2JjNmFiY2Q2NTgxOTE0OTJiM2YzNDQyNjZmZjdmMGZlNWQ0MS4u
OTVkYTg4NDRmOGQwMGM1YjQzMThiNTcxYzM1ZDE4MTJlZGQwMzg4OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNp
bmNsdWRlICJSZW1vdmVOb2RlQ29tbWFuZC5oIgogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBs
YWNlaG9sZGVyLmgiCi0jaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQu
aCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5D
b21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNv
bW1hbmQuY3BwCmluZGV4IDM2ODJiYzM3NmFjMDZjM2MwOTdiZWZlZWI0Yzg3NjMwOWM2MGQwMjUu
LmQ3MGQ0NmVjZjNmMDMwZTQ5YmI5Yjk4ZDQ2YzY3ZDNhNjRhZmVmNDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwCkBA
IC0zMSwxNiArMzEsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZXBsYWNl
Tm9kZVdpdGhTcGFuQ29tbWFuZC5oIgogCisjaW5jbHVkZSAiSFRNTFNwYW5FbGVtZW50LmgiCiAj
aW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKLSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgotCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCiBSZXBsYWNlTm9k
ZVdpdGhTcGFuQ29tbWFuZDo6UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQoUGFzc1JlZlB0cjxI
VE1MRWxlbWVudD4gZWxlbWVudCkKICAgICA6IFNpbXBsZUVkaXRDb21tYW5kKGVsZW1lbnQtPmRv
Y3VtZW50KCkpCiAgICAgLCBtX2VsZW1lbnRUb1JlcGxhY2UoZWxlbWVudCkKQEAgLTY5LDcgKzY0
LDcgQEAgdm9pZCBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYg
KCFtX2VsZW1lbnRUb1JlcGxhY2UtPmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGlmICghbV9zcGFuRWxlbWVudCkKLSAgICAgICAgbV9zcGFuRWxlbWVudCA9IGNyZWF0ZUhUTUxF
bGVtZW50KG1fZWxlbWVudFRvUmVwbGFjZS0+ZG9jdW1lbnQoKSwgc3BhblRhZyk7CisgICAgICAg
IG1fc3BhbkVsZW1lbnQgPSBIVE1MU3BhbkVsZW1lbnQ6OmNyZWF0ZShtX2VsZW1lbnRUb1JlcGxh
Y2UtPmRvY3VtZW50KCkpOwogICAgIHN3YXBJbk5vZGVQcmVzZXJ2aW5nQXR0cmlidXRlc0FuZENo
aWxkcmVuKCptX3NwYW5FbGVtZW50LCAqbV9lbGVtZW50VG9SZXBsYWNlKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRl
eCA2NjFlYjFkZTdiZTYxMzQwNzY4YWE4ZDAyMTY3NzNjODQ1YjdhMmE0Li43ODY2YjE2N2IyZDli
MDdlZDI4MTBhZWNlZGRkYzg0OWNhNjliODQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTAxLDQ0ICsxMDEsNDYgQEAg
cHJpdmF0ZToKICAgICBib29sIG1faGFzSW50ZXJjaGFuZ2VOZXdsaW5lQXRFbmQ7CiB9OwogCi1z
dGF0aWMgYm9vbCBpc0ludGVyY2hhbmdlTmV3bGluZU5vZGUoY29uc3QgTm9kZSAqbm9kZSkKK3N0
YXRpYyBib29sIGlzSW50ZXJjaGFuZ2VOZXdsaW5lTm9kZShjb25zdCBOb2RlKiBub2RlKQogewog
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGludGVyY2hhbmdlTmV3bGluZUNsYXNz
U3RyaW5nKEFwcGxlSW50ZXJjaGFuZ2VOZXdsaW5lKTsKLSAgICByZXR1cm4gbm9kZSAmJiBub2Rl
LT5oYXNUYWdOYW1lKGJyVGFnKSAmJiAKLSAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgRWxl
bWVudCAqPihub2RlKS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gaW50ZXJjaGFuZ2VOZXds
aW5lQ2xhc3NTdHJpbmc7CisgICAgcmV0dXJuIGlzPEhUTUxCUkVsZW1lbnQ+KG5vZGUpICYmIGRv
d25jYXN0PEhUTUxCUkVsZW1lbnQ+KCpub2RlKS5mYXN0R2V0QXR0cmlidXRlKGNsYXNzQXR0cikg
PT0gaW50ZXJjaGFuZ2VOZXdsaW5lQ2xhc3NTdHJpbmc7CiB9CiAKLXN0YXRpYyBib29sIGlzSW50
ZXJjaGFuZ2VDb252ZXJ0ZWRTcGFjZVNwYW4oY29uc3QgTm9kZSAqbm9kZSkKK3N0YXRpYyBib29s
IGlzSW50ZXJjaGFuZ2VDb252ZXJ0ZWRTcGFjZVNwYW4oY29uc3QgTm9kZSogbm9kZSkKIHsKICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBjb252ZXJ0ZWRTcGFjZVNwYW5DbGFzc1N0
cmluZyhBcHBsZUNvbnZlcnRlZFNwYWNlKTsKLSAgICByZXR1cm4gbm9kZS0+aXNIVE1MRWxlbWVu
dCgpICYmIAotICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudCAqPihub2Rl
KS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gY29udmVydGVkU3BhY2VTcGFuQ2xhc3NTdHJp
bmc7CisgICAgcmV0dXJuIGlzPEhUTUxFbGVtZW50Pihub2RlKSAmJiBkb3duY2FzdDxIVE1MRWxl
bWVudD4oKm5vZGUpLmZhc3RHZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSBjb252ZXJ0ZWRTcGFj
ZVNwYW5DbGFzc1N0cmluZzsKIH0KIAotc3RhdGljIFBvc2l0aW9uIHBvc2l0aW9uQXZvaWRpbmdQ
cmVjZWRpbmdOb2RlcyhQb3NpdGlvbiBwb3MpCitzdGF0aWMgUG9zaXRpb24gcG9zaXRpb25Bdm9p
ZGluZ1ByZWNlZGluZ05vZGVzKFBvc2l0aW9uIHBvc2l0aW9uKQogeworICAgIEFTU0VSVChwb3Np
dGlvbi5pc05vdE51bGwoKSk7CisKICAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IG9uIGEgYnJlYWss
IGl0J3MgcHJvYmFibHkgYSBwbGFjZWhvbGRlciBhbmQgd2Ugc2hvdWxkbid0IGNoYW5nZSBvdXIg
cG9zaXRpb24uCi0gICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChwb3MuZGVwcmVjYXRlZE5v
ZGUoKSkpCi0gICAgICAgIHJldHVybiBwb3M7CisgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVu
dCgqcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpCisgICAgICAgIHJldHVybiBwb3NpdGlvbjsK
IAogICAgIC8vIFdlIGFsc28gc3RvcCB3aGVuIGNoYW5naW5nIGJsb2NrIGZsb3cgZWxlbWVudHMg
YmVjYXVzZSBldmVuIHRob3VnaCB0aGUgdmlzdWFsIHBvc2l0aW9uIGlzIHRoZQogICAgIC8vIHNh
bWUuICBFLmcuLAogICAgIC8vICAgPGRpdj5mb29ePC9kaXY+XgogICAgIC8vIFRoZSB0d28gcG9z
aXRpb25zIGFib3ZlIGFyZSB0aGUgc2FtZSB2aXN1YWwgcG9zaXRpb24sIGJ1dCB3ZSB3YW50IHRv
IHN0YXkgaW4gdGhlIHNhbWUgYmxvY2suCi0gICAgTm9kZSogZW5jbG9zaW5nQmxvY2tOb2RlID0g
ZW5jbG9zaW5nQmxvY2socG9zLmNvbnRhaW5lck5vZGUoKSk7Ci0gICAgZm9yIChQb3NpdGlvbiBu
ZXh0UG9zaXRpb24gPSBwb3M7IG5leHRQb3NpdGlvbi5jb250YWluZXJOb2RlKCkgIT0gZW5jbG9z
aW5nQmxvY2tOb2RlOyBwb3MgPSBuZXh0UG9zaXRpb24pIHsKLSAgICAgICAgaWYgKGxpbmVCcmVh
a0V4aXN0c0F0UG9zaXRpb24ocG9zKSkKKyAgICBhdXRvKiBlbmNsb3NpbmdCbG9ja05vZGUgPSBl
bmNsb3NpbmdCbG9jayhwb3NpdGlvbi5jb250YWluZXJOb2RlKCkpOworICAgIGZvciAoUG9zaXRp
b24gbmV4dFBvc2l0aW9uID0gcG9zaXRpb247IG5leHRQb3NpdGlvbi5jb250YWluZXJOb2RlKCkg
IT0gZW5jbG9zaW5nQmxvY2tOb2RlOyBwb3NpdGlvbiA9IG5leHRQb3NpdGlvbikgeworICAgICAg
ICBpZiAobGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihwb3NpdGlvbikpCiAgICAgICAgICAgICBi
cmVhazsKIAotICAgICAgICBpZiAocG9zLmNvbnRhaW5lck5vZGUoKS0+bm9uU2hhZG93Qm91bmRh
cnlQYXJlbnROb2RlKCkpCi0gICAgICAgICAgICBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbkluUGFy
ZW50QWZ0ZXJOb2RlKHBvcy5jb250YWluZXJOb2RlKCkpOwotICAgICAgICAKLSAgICAgICAgaWYg
KG5leHRQb3NpdGlvbiA9PSBwb3MgCi0gICAgICAgICAgICB8fCBlbmNsb3NpbmdCbG9jayhuZXh0
UG9zaXRpb24uY29udGFpbmVyTm9kZSgpKSAhPSBlbmNsb3NpbmdCbG9ja05vZGUKLSAgICAgICAg
ICAgIHx8IFZpc2libGVQb3NpdGlvbihwb3MpICE9IFZpc2libGVQb3NpdGlvbihuZXh0UG9zaXRp
b24pKQorICAgICAgICBpZiAocG9zaXRpb24uY29udGFpbmVyTm9kZSgpLT5ub25TaGFkb3dCb3Vu
ZGFyeVBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgIG5leHRQb3NpdGlvbiA9IHBvc2l0aW9uSW5Q
YXJlbnRBZnRlck5vZGUocG9zaXRpb24uY29udGFpbmVyTm9kZSgpKTsKKworICAgICAgICBpZiAo
bmV4dFBvc2l0aW9uID09IHBvc2l0aW9uKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlm
IChlbmNsb3NpbmdCbG9jayhuZXh0UG9zaXRpb24uY29udGFpbmVyTm9kZSgpKSAhPSBlbmNsb3Np
bmdCbG9ja05vZGUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKFZpc2libGVQb3Np
dGlvbihwb3NpdGlvbikgIT0gVmlzaWJsZVBvc2l0aW9uKG5leHRQb3NpdGlvbikpCiAgICAgICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgcmV0dXJuIHBvczsKKyAgICByZXR1cm4gcG9zaXRpb247
CiB9CiAKIFJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQoRG9jdW1lbnQm
IGRvY3VtZW50LCBEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uKQpAQCAtMTEwMSw3ICsxMTAzLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgZnJhZ21lbnQucmVtb3ZlTm9kZShyZWZOb2RlKTsK
IAogICAgIE5vZGUqIGJsb2NrU3RhcnQgPSBlbmNsb3NpbmdCbG9jayhpbnNlcnRpb25Qb3MuZGVw
cmVjYXRlZE5vZGUoKSk7Ci0gICAgaWYgKChpc0xpc3RFbGVtZW50KHJlZk5vZGUuZ2V0KCkpIHx8
IChpc0xlZ2FjeUFwcGxlU3R5bGVTcGFuKHJlZk5vZGUuZ2V0KCkpICYmIGlzTGlzdEVsZW1lbnQo
cmVmTm9kZS0+Zmlyc3RDaGlsZCgpKSkpCisgICAgaWYgKChpc0xpc3RIVE1MRWxlbWVudChyZWZO
b2RlLmdldCgpKSB8fCAoaXNMZWdhY3lBcHBsZVN0eWxlU3BhbihyZWZOb2RlLmdldCgpKSAmJiBp
c0xpc3RIVE1MRWxlbWVudChyZWZOb2RlLT5maXJzdENoaWxkKCkpKSkKICAgICAgICAgJiYgYmxv
Y2tTdGFydCAmJiBibG9ja1N0YXJ0LT5yZW5kZXJlcigpLT5pc0xpc3RJdGVtKCkpCiAgICAgICAg
IHJlZk5vZGUgPSBpbnNlcnRBc0xpc3RJdGVtcyhkb3duY2FzdDxIVE1MRWxlbWVudD4ocmVmTm9k
ZS5nZXQoKSksIGJsb2NrU3RhcnQsIGluc2VydGlvblBvcywgaW5zZXJ0ZWROb2Rlcyk7CiAgICAg
ZWxzZSB7CkBAIC0xNDM5LDcgKzE0NDEsNyBAQCBOb2RlKiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6aW5zZXJ0QXNMaXN0SXRlbXMoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gcHJwTGlzdAogewog
ICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbGlzdEVsZW1lbnQgPSBwcnBMaXN0RWxlbWVudDsKIAot
ICAgIHdoaWxlIChsaXN0RWxlbWVudC0+aGFzT25lQ2hpbGQoKSAmJiBpc0xpc3RFbGVtZW50KGxp
c3RFbGVtZW50LT5maXJzdENoaWxkKCkpKQorICAgIHdoaWxlIChsaXN0RWxlbWVudC0+aGFzT25l
Q2hpbGQoKSAmJiBpc0xpc3RIVE1MRWxlbWVudChsaXN0RWxlbWVudC0+Zmlyc3RDaGlsZCgpKSkK
ICAgICAgICAgbGlzdEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4obGlzdEVsZW1lbnQt
PmZpcnN0Q2hpbGQoKSk7CiAKICAgICBib29sIGlzU3RhcnQgPSBpc1N0YXJ0T2ZQYXJhZ3JhcGgo
aW5zZXJ0UG9zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVj
a2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAppbmRleCAy
ZmI4MzU4MTUwNzRlOWMwMjNiNzYwMmQ5Njc0MDE0YjFkNGYzNmVkLi40YjEwMDBhOGRlODlmMGYx
OTY1ZGI3MzM5ZDZlMzBkZGM1MzYzY2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENo
ZWNrZXIuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgot
I2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUG9zaXRpb25J
dGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IDAxNjFjZmJkNTM3NTI4NzQwZWYwZjAwNzI5NmY2MThj
OWYxODZjMjUuLjRjMjc4NTQ2OTNlNTUyMzU4YmRkYmQxYzZjMzU4YWRmYmIzNGNhYWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTEyNjEsMTAgKzEyNjEsNyBA
QCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2UoKQogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRXhpdCBlbXB0eSBjb250YWluZXJzIGFzIHdlIHBh
c3Mgb3ZlciB0aGVtIG9yIGNvbnRhaW5lcnMKICAgICAgICAgICAgIC8vIHdoZXJlIFtjb250YWlu
ZXIsIDBdIGlzIHdoZXJlIHdlIHN0YXJ0ZWQgaXRlcmF0aW5nLgotICAgICAgICAgICAgaWYgKCFt
X2hhbmRsZWROb2RlCi0gICAgICAgICAgICAgICAgICAgICYmIGNhbkhhdmVDaGlsZHJlbkZvckVk
aXRpbmcobV9ub2RlKQotICAgICAgICAgICAgICAgICAgICAmJiBtX25vZGUtPnBhcmVudE5vZGUo
KQotICAgICAgICAgICAgICAgICAgICAmJiAoIW1fbm9kZS0+bGFzdENoaWxkKCkgfHwgKG1fbm9k
ZSA9PSBtX2VuZENvbnRhaW5lciAmJiAhbV9lbmRPZmZzZXQpKSkgeworICAgICAgICAgICAgaWYg
KCFtX2hhbmRsZWROb2RlICYmIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoKm1fbm9kZSkgICYm
IG1fbm9kZS0+cGFyZW50Tm9kZSgpICYmICghbV9ub2RlLT5sYXN0Q2hpbGQoKSB8fCAobV9ub2Rl
ID09IG1fZW5kQ29udGFpbmVyICYmICFtX2VuZE9mZnNldCkpKSB7CiAgICAgICAgICAgICAgICAg
ZXhpdE5vZGUoKTsKICAgICAgICAgICAgICAgICBpZiAobV9wb3NpdGlvbk5vZGUpIHsKICAgICAg
ICAgICAgICAgICAgICAgbV9oYW5kbGVkTm9kZSA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAppbmRleCBjNTM2NTljYTcxNTVkN2Q4YjljZDQwMDZi
MTVkN2E0ZDcyNjQ5OWI4Li43MmI4ZmE5MTU0NTFjOTdiNDY1NWNiNjZiYWU3NjAyMGVhMGRjMjMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKQEAgLTk1
LDcgKzk1LDcgQEAgVmlzaWJsZVNlbGVjdGlvbjo6VmlzaWJsZVNlbGVjdGlvbihjb25zdCBSYW5n
ZSYgcmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbAogCiBWaXNpYmxlU2VsZWN0aW9uIFZp
c2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShOb2RlKiBub2RlKQog
ewotICAgIEFTU0VSVCghZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpKTsKKyAgICBBU1NFUlQo
IWVkaXRpbmdJZ25vcmVzQ29udGVudCgqbm9kZSkpOwogICAgIHJldHVybiBWaXNpYmxlU2VsZWN0
aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUobm9kZSksIGxhc3RQb3NpdGlvbkluTm9kZShub2RlKSwg
RE9XTlNUUkVBTSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVVuaXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcApp
bmRleCAzNjQ1ZmUxMTI4N2NlMjZiZTdlMjAzYTcyYWFhNjc2NTRlYzkxMjA4Li5kYTg5MDcxYTc1
NTc4ODRlOTRmZjlhNWM5YmNmMmI4ZWM1MzM5ZDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9W
aXNpYmxlVW5pdHMuY3BwCkBAIC0xMDI4LDcgKzEwMjgsNyBAQCBWaXNpYmxlUG9zaXRpb24gcHJl
dmlvdXNMaW5lUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24s
IGludAogICAgICAgICBJbnRQb2ludCBwb2ludEluTGluZSA9IGFic29sdXRlTGluZURpcmVjdGlv
blBvaW50VG9Mb2NhbFBvaW50SW5CbG9jaygqcm9vdCwgbGluZURpcmVjdGlvblBvaW50KTsKICAg
ICAgICAgUmVuZGVyT2JqZWN0JiByZW5kZXJlciA9IHJvb3QtPmNsb3Nlc3RMZWFmQ2hpbGRGb3JQ
b2ludChwb2ludEluTGluZSwgaXNFZGl0YWJsZVBvc2l0aW9uKHApKS0+cmVuZGVyZXIoKTsKICAg
ICAgICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLm5vZGUoKTsKLSAgICAgICAgaWYgKG5vZGUgJiYg
ZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpKQorICAgICAgICBpZiAobm9kZSAmJiBlZGl0aW5n
SWdub3Jlc0NvbnRlbnQoKm5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uSW5QYXJl
bnRCZWZvcmVOb2RlKG5vZGUpOwogICAgICAgICByZXR1cm4gcmVuZGVyZXIucG9zaXRpb25Gb3JQ
b2ludChwb2ludEluTGluZSwgbnVsbHB0cik7CiAgICAgfQpAQCAtMTA4Niw3ICsxMDg2LDcgQEAg
VmlzaWJsZVBvc2l0aW9uIG5leHRMaW5lUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2
aXNpYmxlUG9zaXRpb24sIGludCBsaW4KICAgICAgICAgSW50UG9pbnQgcG9pbnRJbkxpbmUgPSBh
YnNvbHV0ZUxpbmVEaXJlY3Rpb25Qb2ludFRvTG9jYWxQb2ludEluQmxvY2soKnJvb3QsIGxpbmVE
aXJlY3Rpb25Qb2ludCk7CiAgICAgICAgIFJlbmRlck9iamVjdCYgcmVuZGVyZXIgPSByb290LT5j
bG9zZXN0TGVhZkNoaWxkRm9yUG9pbnQocG9pbnRJbkxpbmUsIGlzRWRpdGFibGVQb3NpdGlvbihw
KSktPnJlbmRlcmVyKCk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSByZW5kZXJlci5ub2RlKCk7Ci0g
ICAgICAgIGlmIChub2RlICYmIGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSkKKyAgICAgICAg
aWYgKG5vZGUgJiYgZWRpdGluZ0lnbm9yZXNDb250ZW50KCpub2RlKSkKICAgICAgICAgICAgIHJl
dHVybiBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShub2RlKTsKICAgICAgICAgcmV0dXJuIHJl
bmRlcmVyLnBvc2l0aW9uRm9yUG9pbnQocG9pbnRJbkxpbmUsIG51bGxwdHIpOwogICAgIH0KQEAg
LTExOTgsNyArMTE5OCw3IEBAIE5vZGUqIGZpbmRTdGFydE9mUGFyYWdyYXBoKE5vZGUqIHN0YXJ0
Tm9kZSwgTm9kZSogaGlnaGVzdFJvb3QsIE5vZGUqIHN0YXJ0QmxvY2ssCiAgICAgICAgICAgICBu
b2RlID0gbjsKICAgICAgICAgICAgIG9mZnNldCA9IDA7CiAgICAgICAgICAgICBuID0gTm9kZVRy
YXZlcnNhbDo6cHJldmlvdXNQb3N0T3JkZXIoKm4sIHN0YXJ0QmxvY2spOwotICAgICAgICB9IGVs
c2UgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChuKSB8fCBpc1JlbmRlcmVkVGFibGUobikpIHsK
KyAgICAgICAgfSBlbHNlIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKm4pIHx8IGlzUmVuZGVy
ZWRUYWJsZShuKSkgewogICAgICAgICAgICAgbm9kZSA9IG47CiAgICAgICAgICAgICB0eXBlID0g
UG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3I7CiAgICAgICAgICAgICBuID0gbi0+cHJl
dmlvdXNTaWJsaW5nKCkgPyBuLT5wcmV2aW91c1NpYmxpbmcoKSA6IE5vZGVUcmF2ZXJzYWw6OnBy
ZXZpb3VzUG9zdE9yZGVyKCpuLCBzdGFydEJsb2NrKTsKQEAgLTEyNjAsNyArMTI2MCw3IEBAIE5v
ZGUqIGZpbmRFbmRPZlBhcmFncmFwaChOb2RlKiBzdGFydE5vZGUsIE5vZGUqIGhpZ2hlc3RSb290
LCBOb2RlKiBzdGF5SW5zaWRlQmxvCiAgICAgICAgICAgICBub2RlID0gbjsKICAgICAgICAgICAg
IG9mZnNldCA9IHItPmNhcmV0TWF4T2Zmc2V0KCk7CiAgICAgICAgICAgICBuID0gTm9kZVRyYXZl
cnNhbDo6bmV4dCgqbiwgc3RheUluc2lkZUJsb2NrKTsKLSAgICAgICAgfSBlbHNlIGlmIChlZGl0
aW5nSWdub3Jlc0NvbnRlbnQobikgfHwgaXNSZW5kZXJlZFRhYmxlKG4pKSB7CisgICAgICAgIH0g
ZWxzZSBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KCpuKSB8fCBpc1JlbmRlcmVkVGFibGUobikp
IHsKICAgICAgICAgICAgIG5vZGUgPSBuOwogICAgICAgICAgICAgdHlwZSA9IFBvc2l0aW9uOjpQ
b3NpdGlvbklzQWZ0ZXJBbmNob3I7CiAgICAgICAgICAgICBuID0gTm9kZVRyYXZlcnNhbDo6bmV4
dFNraXBwaW5nQ2hpbGRyZW4oKm4sIHN0YXlJbnNpZGVCbG9jayk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvaHRtbGVkaXRpbmcuY3BwCmluZGV4IDRlNWJmNjY0YTJiOGVmMTRlNTBlMTAyNDQwMzcyNzhi
NGRhMmJhN2MuLjYwY2I5YzM3MTRhNjY5MDMwMDQyZDU3N2VkNTZkNmVjMzYxYTdlMjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNywgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVy
TmFtZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjMsMTAgKzY0LDE1IEBAIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHN0YXRpYyBib29sIGlzVmlzaWJseUFkamFjZW50KGNv
bnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKIAorYm9vbCBjYW5IYXZlQ2hpbGRyZW5G
b3JFZGl0aW5nKGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgcmV0dXJuICFpczxUZXh0Pihub2Rl
KSAmJiBub2RlLmNhbkNvbnRhaW5SYW5nZUVuZFBvaW50KCk7Cit9CisKIC8vIEF0b21pYyBtZWFu
cyB0aGF0IHRoZSBub2RlIGhhcyBubyBjaGlsZHJlbiwgb3IgaGFzIGNoaWxkcmVuIHdoaWNoIGFy
ZSBpZ25vcmVkIGZvciB0aGUgcHVycG9zZXMgb2YgZWRpdGluZy4KIGJvb2wgaXNBdG9taWNOb2Rl
KGNvbnN0IE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0dXJuIG5vZGUgJiYgKCFub2RlLT5oYXNDaGls
ZE5vZGVzKCkgfHwgZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpKTsKKyAgICByZXR1cm4gbm9k
ZSAmJiAoIW5vZGUtPmhhc0NoaWxkTm9kZXMoKSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKm5v
ZGUpKTsKIH0KIAogLy8gQ29tcGFyZSB0d28gcG9zaXRpb25zLCB0YWtpbmcgaW50byBhY2NvdW50
IHRoZSBwb3NzaWJpbGl0eSB0aGF0IG9uZSBvciBib3RoCkBAIC0zNzMsOCArMzc5LDkgQEAgaW50
IGxhc3RPZmZzZXRGb3JFZGl0aW5nKGNvbnN0IE5vZGUmIG5vZGUpCiAgICAgaWYgKG5vZGUuaGFz
Q2hpbGROb2RlcygpKQogICAgICAgICByZXR1cm4gbm9kZS5jb3VudENoaWxkTm9kZXMoKTsKIAot
ICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIHByZWVtcHQgdGhlIGNvdW50Q2hpbGROb2RlcygpIGZv
ciwgZS5nLiwgc2VsZWN0IG5vZGVzICh3aGF0IGRvZXMgdGhpcyBtZWFuKT8KLSAgICBpZiAoZWRp
dGluZ0lnbm9yZXNDb250ZW50KCZub2RlKSkKKyAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBwcmVl
bXB0IHRoZSBjb3VudENoaWxkTm9kZXMoKSBmb3IsIGUuZy4sIHNlbGVjdCBub2Rlcy4KKyAgICAv
LyBGSVhNRTogV2hhdCBkb2VzIHRoZSBjb21tZW50IGFib3ZlIG1lYW4/CisgICAgaWYgKGVkaXRp
bmdJZ25vcmVzQ29udGVudChub2RlKSkKICAgICAgICAgcmV0dXJuIDE7CiAKICAgICByZXR1cm4g
MDsKQEAgLTM4MiwzMyArMzg5LDM3IEBAIGludCBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhjb25zdCBO
b2RlJiBub2RlKQogCiBTdHJpbmcgc3RyaW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNwYWNlKGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBib29sIHN0YXJ0SXNTdGFydE9mUGFyYWdyYXBoLCBib29sIGVuZElz
RW5kT2ZQYXJhZ3JhcGgpCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiByZWJhbGFuY2VkU3RyaW5nKHN0
cmluZy5sZW5ndGgoKSk7Ci0gICAgU3RyaW5nVmlldyhzdHJpbmcpLmdldENoYXJhY3RlcnNXaXRo
VXBjb252ZXJ0KHJlYmFsYW5jZWRTdHJpbmcuZGF0YSgpKTsKLQotICAgIGJvb2wgY2hhbmdlZFNv
bWV0aGluZyA9IGZhbHNlOworICAgIFN0cmluZ0J1aWxkZXIgcmViYWxhbmNlZFN0cmluZzsKIAog
ICAgIGJvb2wgcHJldmlvdXNDaGFyYWN0ZXJXYXNTcGFjZSA9IGZhbHNlOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcmViYWxhbmNlZFN0cmluZy5zaXplKCk7IGkrKykgewotICAgICAgICBp
ZiAoIWRlcHJlY2F0ZWRJc0VkaXRpbmdXaGl0ZXNwYWNlKHJlYmFsYW5jZWRTdHJpbmdbaV0pKSB7
CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBhdXRvIGNoYXJhY3RlciA9IHN0
cmluZ1tpXTsKKyAgICAgICAgaWYgKCFkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVzcGFjZShjaGFy
YWN0ZXIpKSB7CiAgICAgICAgICAgICBwcmV2aW91c0NoYXJhY3Rlcldhc1NwYWNlID0gZmFsc2U7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAocHJldmlvdXND
aGFyYWN0ZXJXYXNTcGFjZSB8fCAoIWkgJiYgc3RhcnRJc1N0YXJ0T2ZQYXJhZ3JhcGgpIHx8IChp
ICsgMSA9PSByZWJhbGFuY2VkU3RyaW5nLnNpemUoKSAmJiBlbmRJc0VuZE9mUGFyYWdyYXBoKSkg
ewotICAgICAgICAgICAgaWYgKHJlYmFsYW5jZWRTdHJpbmdbaV0gIT0gbm9CcmVha1NwYWNlKSB7
Ci0gICAgICAgICAgICAgICAgcmViYWxhbmNlZFN0cmluZ1tpXSA9IG5vQnJlYWtTcGFjZTsKLSAg
ICAgICAgICAgICAgICBjaGFuZ2VkU29tZXRoaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgTENoYXIgc2VsZWN0ZWRXaGl0ZXNwYWNlQ2hhcmFjdGVyOworICAgICAgICBpZiAocHJl
dmlvdXNDaGFyYWN0ZXJXYXNTcGFjZSB8fCAoIWkgJiYgc3RhcnRJc1N0YXJ0T2ZQYXJhZ3JhcGgp
IHx8IChpID09IGxlbmd0aCAtIDEgJiYgZW5kSXNFbmRPZlBhcmFncmFwaCkpIHsKKyAgICAgICAg
ICAgIHNlbGVjdGVkV2hpdGVzcGFjZUNoYXJhY3RlciA9IG5vQnJlYWtTcGFjZTsKICAgICAgICAg
ICAgIHByZXZpb3VzQ2hhcmFjdGVyV2FzU3BhY2UgPSBmYWxzZTsKICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGlmIChyZWJhbGFuY2VkU3RyaW5nW2ldICE9ICcgJykgewotICAgICAgICAg
ICAgICAgIHJlYmFsYW5jZWRTdHJpbmdbaV0gPSAnICc7Ci0gICAgICAgICAgICAgICAgY2hhbmdl
ZFNvbWV0aGluZyA9IHRydWU7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBzZWxlY3RlZFdo
aXRlc3BhY2VDaGFyYWN0ZXIgPSBub0JyZWFrU3BhY2U7CiAgICAgICAgICAgICBwcmV2aW91c0No
YXJhY3Rlcldhc1NwYWNlID0gdHJ1ZTsKICAgICAgICAgfQorICAgICAgICBpZiAoY2hhcmFjdGVy
ID09IHNlbGVjdGVkV2hpdGVzcGFjZUNoYXJhY3RlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICByZWJhbGFuY2VkU3RyaW5nLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOworICAgICAg
ICByZWJhbGFuY2VkU3RyaW5nLmFwcGVuZChzdHJpbmcsIHJlYmFsYW5jZWRTdHJpbmcubGVuZ3Ro
KCksIGkgLSByZWJhbGFuY2VkU3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgcmViYWxhbmNlZFN0
cmluZy5hcHBlbmQoc2VsZWN0ZWRXaGl0ZXNwYWNlQ2hhcmFjdGVyKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gY2hhbmdlZFNvbWV0aGluZyA/IFN0cmluZzo6YWRvcHQocmViYWxhbmNlZFN0cmluZykg
OiBzdHJpbmc7CisgICAgaWYgKCFyZWJhbGFuY2VkU3RyaW5nLmxlbmd0aCgpKQorICAgICAgICBy
ZXR1cm4gc3RyaW5nOworCisgICAgcmViYWxhbmNlZFN0cmluZy5yZXNlcnZlQ2FwYWNpdHkobGVu
Z3RoKTsKKyAgICByZWJhbGFuY2VkU3RyaW5nLmFwcGVuZChzdHJpbmcsIHJlYmFsYW5jZWRTdHJp
bmcubGVuZ3RoKCksIGxlbmd0aCAtIHJlYmFsYW5jZWRTdHJpbmcubGVuZ3RoKCkpOworICAgIHJl
dHVybiByZWJhbGFuY2VkU3RyaW5nLnRvU3RyaW5nKCk7CiB9CiAKIGJvb2wgaXNUYWJsZVN0cnVj
dHVyZU5vZGUoY29uc3QgTm9kZSogbm9kZSkKQEAgLTQyMyw3ICs0MzQsNyBAQCBjb25zdCBTdHJp
bmcmIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKQogICAgIHJldHVybiBub25CcmVha2luZ1NwYWNl
U3RyaW5nOwogfQogCi1zdGF0aWMgYm9vbCBpc1NwZWNpYWxFbGVtZW50KGNvbnN0IE5vZGUqIG5v
ZGUpCitzdGF0aWMgYm9vbCBpc1NwZWNpYWxIVE1MRWxlbWVudChjb25zdCBOb2RlKiBub2RlKQog
ewogICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC00NTEsNyArNDYyLDcgQEAgc3RhdGljIEhUTUxFbGVtZW50KiBmaXJzdEluU3BlY2lhbEVs
ZW1lbnQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogewogICAgIGF1dG8qIHJvb3RFZGl0YWJs
ZUVsZW1lbnQgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQo
KTsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOyBub2Rl
ICYmIG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSByb290RWRpdGFibGVFbGVtZW50OyBu
b2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmICghaXNTcGVjaWFsRWxlbWVu
dChub2RlKSkKKyAgICAgICAgaWYgKCFpc1NwZWNpYWxIVE1MRWxlbWVudChub2RlKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gdlBvcyhwb3NpdGlvbiwg
RE9XTlNUUkVBTSk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBmaXJzdEluRWxlbWVudChmaXJz
dFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIERPV05TVFJFQU0pOwpAQCAtNDY1LDcgKzQ3
Niw3IEBAIHN0YXRpYyBIVE1MRWxlbWVudCogbGFzdEluU3BlY2lhbEVsZW1lbnQoY29uc3QgUG9z
aXRpb24mIHBvc2l0aW9uKQogewogICAgIGF1dG8qIHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBwb3Np
dGlvbi5jb250YWluZXJOb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOyBub2RlICYmIG5vZGUtPnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKSA9PSByb290RWRpdGFibGVFbGVtZW50OyBub2RlID0gbm9kZS0+cGFy
ZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmICghaXNTcGVjaWFsRWxlbWVudChub2RlKSkKKyAgICAg
ICAgaWYgKCFpc1NwZWNpYWxIVE1MRWxlbWVudChub2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gdlBvcyhwb3NpdGlvbiwgRE9XTlNUUkVBTSk7CiAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBsYXN0SW5FbGVtZW50KGxhc3RQb3NpdGlvbkluT3JBZnRl
ck5vZGUobm9kZSksIERPV05TVFJFQU0pOwpAQCAtNTY0LDE0ICs1NzUsMTQgQEAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVQb3NpdGlvbkFmdGVyTm9kZShOb2RlJiBub2RlKQogICAgIHJldHVybiBw
b3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKCZub2RlKTsKIH0KIAotYm9vbCBpc0xpc3RFbGVtZW50
KE5vZGUqIG5vZGUpCitib29sIGlzTGlzdEhUTUxFbGVtZW50KE5vZGUqIG5vZGUpCiB7Ci0gICAg
cmV0dXJuIG5vZGUgJiYgKG5vZGUtPmhhc1RhZ05hbWUodWxUYWcpIHx8IG5vZGUtPmhhc1RhZ05h
bWUob2xUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoZGxUYWcpKTsKKyAgICByZXR1cm4gbm9kZSAm
JiAoaXM8SFRNTFVMaXN0RWxlbWVudD4oKm5vZGUpIHx8IGlzPEhUTUxPTGlzdEVsZW1lbnQ+KCpu
b2RlKSB8fCBpczxIVE1MRExpc3RFbGVtZW50Pigqbm9kZSkpOwogfQogCiBib29sIGlzTGlzdEl0
ZW0oY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICByZXR1cm4gbm9kZSAmJiAoaXNMaXN0RWxlbWVu
dChub2RlLT5wYXJlbnROb2RlKCkpIHx8IChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRl
cmVyKCktPmlzTGlzdEl0ZW0oKSkpOworICAgIHJldHVybiBub2RlICYmIChpc0xpc3RIVE1MRWxl
bWVudChub2RlLT5wYXJlbnROb2RlKCkpIHx8IChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJl
bmRlcmVyKCktPmlzTGlzdEl0ZW0oKSkpOwogfQogCiBFbGVtZW50KiBlbmNsb3NpbmdFbGVtZW50
V2l0aFRhZyhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUpCkBAIC01OTAsMTIgKzYwMSwxMiBAQCBFbGVtZW50KiBlbmNsb3NpbmdFbGVtZW50V2l0
aFRhZyhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFF1YWxpZmllZE5hbWUmCiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLU5vZGUqIGVuY2xvc2luZ05vZGVPZlR5cGUoY29uc3QgUG9z
aXRpb24mIHAsIGJvb2wgKCpub2RlSXNPZlR5cGUpKGNvbnN0IE5vZGUqKSwgRWRpdGluZ0JvdW5k
YXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUpCitOb2RlKiBlbmNsb3NpbmdOb2RlT2ZUeXBlKGNvbnN0IFBv
c2l0aW9uJiBwb3NpdGlvbiwgYm9vbCAoKm5vZGVJc09mVHlwZSkoY29uc3QgTm9kZSopLCBFZGl0
aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkKIHsKICAgICAvLyBGSVhNRTogc3VwcG9ydCBD
YW5Ta2lwQ3Jvc3NFZGl0aW5nQm91bmRhcnkKICAgICBBU1NFUlQocnVsZSA9PSBDYW5Dcm9zc0Vk
aXRpbmdCb3VuZGFyeSB8fCBydWxlID09IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKLSAg
ICBhdXRvKiByb290ID0gcnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSA/IGhpZ2hl
c3RFZGl0YWJsZVJvb3QocCkgOiAwOwotICAgIGZvciAoTm9kZSogbiA9IHAuZGVwcmVjYXRlZE5v
ZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgeworICAgIGF1dG8qIHJvb3QgPSBydWxlID09
IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5ID8gaGlnaGVzdEVkaXRhYmxlUm9vdChwb3NpdGlv
bikgOiBudWxscHRyOworICAgIGZvciAoTm9kZSogbiA9IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2Rl
KCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgLy8gRG9uJ3QgcmV0dXJuIGEg
bm9uLWVkaXRhYmxlIG5vZGUgaWYgdGhlIGlucHV0IHBvc2l0aW9uIHdhcyBlZGl0YWJsZSwgc2lu
Y2UKICAgICAgICAgLy8gdGhlIGNhbGxlcnMgZnJvbSBlZGl0aW5nIHdpbGwgbm8gZG91YnQgd2Fu
dCB0byBwZXJmb3JtIGVkaXRpbmcgaW5zaWRlIHRoZSByZXR1cm5lZCBub2RlLgogICAgICAgICBp
ZiAocm9vdCAmJiAhbi0+aGFzRWRpdGFibGVTdHlsZSgpKQpAQCAtNjA4LDExICs2MTksMTEgQEAg
Tm9kZSogZW5jbG9zaW5nTm9kZU9mVHlwZShjb25zdCBQb3NpdGlvbiYgcCwgYm9vbCAoKm5vZGVJ
c09mVHlwZSkoY29uc3QgTm9kZSopLAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1Ob2RlKiBo
aWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlwZShjb25zdCBQb3NpdGlvbiYgcCwgYm9vbCAoKm5vZGVJ
c09mVHlwZSkoY29uc3QgTm9kZSopLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSwg
Tm9kZSogc3RheVdpdGhpbikKK05vZGUqIGhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBlKGNvbnN0
IFBvc2l0aW9uJiBwb3NpdGlvbiwgYm9vbCAoKm5vZGVJc09mVHlwZSkoY29uc3QgTm9kZSopLCBF
ZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSwgTm9kZSogc3RheVdpdGhpbikKIHsKICAg
ICBOb2RlKiBoaWdoZXN0ID0gbnVsbHB0cjsKLSAgICBhdXRvKiByb290ID0gcnVsZSA9PSBDYW5u
b3RDcm9zc0VkaXRpbmdCb3VuZGFyeSA/IGhpZ2hlc3RFZGl0YWJsZVJvb3QocCkgOiAwOwotICAg
IGZvciAoTm9kZSogbiA9IHAuY29udGFpbmVyTm9kZSgpOyBuICYmIG4gIT0gc3RheVdpdGhpbjsg
biA9IG4tPnBhcmVudE5vZGUoKSkgeworICAgIGF1dG8qIHJvb3QgPSBydWxlID09IENhbm5vdENy
b3NzRWRpdGluZ0JvdW5kYXJ5ID8gaGlnaGVzdEVkaXRhYmxlUm9vdChwb3NpdGlvbikgOiBudWxs
cHRyOworICAgIGZvciAoTm9kZSogbiA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsgbiAmJiBu
ICE9IHN0YXlXaXRoaW47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKHJvb3Qg
JiYgIW4tPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBpZiAobm9kZUlzT2ZUeXBlKG4pKQpAQCAtNjkzLDcgKzcwNCw3IEBAIE5vZGUqIGVuY2xvc2lu
Z0xpc3RDaGlsZChOb2RlICpub2RlKQogICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9u
IGlzIGluYXBwcm9wcmlhdGVseSBuYW1lZCBzaW5jZSBpdCBzdGFydHMgd2l0aCBub2RlIGluc3Rl
YWQgb2Ygbm9kZS0+cGFyZW50Tm9kZSgpCiAgICAgZm9yIChOb2RlKiBuID0gbm9kZTsgbiAmJiBu
LT5wYXJlbnROb2RlKCk7IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKG4tPmhh
c1RhZ05hbWUobGlUYWcpIHx8IChpc0xpc3RFbGVtZW50KG4tPnBhcmVudE5vZGUoKSkgJiYgbiAh
PSByb290KSkKKyAgICAgICAgaWYgKGlzPEhUTUxMSUVsZW1lbnQ+KCpuKSB8fCAoaXNMaXN0SFRN
TEVsZW1lbnQobi0+cGFyZW50Tm9kZSgpKSAmJiBuICE9IHJvb3QpKQogICAgICAgICAgICAgcmV0
dXJuIG47CiAgICAgICAgIGlmIChuID09IHJvb3QgfHwgaXNUYWJsZUNlbGwobikpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTcwNiw3ICs3MTcsNyBAQCBzdGF0aWMgSFRNTEVsZW1l
bnQqIGVtYmVkZGVkU3VibGlzdChOb2RlKiBsaXN0SXRlbSkKIHsKICAgICAvLyBDaGVjayB0aGUg
RE9NIHNvIHRoYXQgd2UnbGwgZmluZCBjb2xsYXBzZWQgc3VibGlzdHMgd2l0aG91dCByZW5kZXJl
cnMuCiAgICAgZm9yIChOb2RlKiBuID0gbGlzdEl0ZW0tPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4t
Pm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGlzTGlzdEVsZW1lbnQobikpCisgICAgICAg
IGlmIChpc0xpc3RIVE1MRWxlbWVudChuKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxI
VE1MRWxlbWVudD4obik7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwpAQCAtNzE2LDcgKzcy
Nyw3IEBAIHN0YXRpYyBOb2RlKiBhcHBlbmRlZFN1Ymxpc3QoTm9kZSogbGlzdEl0ZW0pCiB7CiAg
ICAgLy8gQ2hlY2sgdGhlIERPTSBzbyB0aGF0IHdlJ2xsIGZpbmQgY29sbGFwc2VkIHN1Ymxpc3Rz
IHdpdGhvdXQgcmVuZGVyZXJzLgogICAgIGZvciAoTm9kZSogbiA9IGxpc3RJdGVtLT5uZXh0U2li
bGluZygpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoaXNMaXN0RWxl
bWVudChuKSkKKyAgICAgICAgaWYgKGlzTGlzdEhUTUxFbGVtZW50KG4pKQogICAgICAgICAgICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxFbGVtZW50PihuKTsKICAgICAgICAgaWYgKGlzTGlzdEl0ZW0o
bGlzdEl0ZW0pKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05OTQsOSArMTAwNSwx
MCBAQCBpbnQgY2FyZXRNaW5PZmZzZXQoY29uc3QgTm9kZSYgbm9kZSkKIGludCBjYXJldE1heE9m
ZnNldChjb25zdCBOb2RlJiBub2RlKQogewogICAgIC8vIEZvciByZW5kZXJlZCB0ZXh0IG5vZGVz
LCByZXR1cm4gdGhlIGxhc3QgcG9zaXRpb24gdGhhdCBhIGNhcmV0IGNvdWxkIG9jY3VweS4KLSAg
ICBpZiAobm9kZS5pc1RleHROb2RlKCkgJiYgbm9kZS5yZW5kZXJlcigpKQotICAgICAgICByZXR1
cm4gbm9kZS5yZW5kZXJlcigpLT5jYXJldE1heE9mZnNldCgpOwotICAgIC8vIEZvciBjb250YWlu
ZXJzIHJldHVybiB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuLiBGb3Igb3RoZXJzIGRvIHRoZSBzYW1l
IGFzIGFib3ZlLgorICAgIGlmIChpczxUZXh0Pihub2RlKSkgeworICAgICAgICBpZiAoYXV0byog
cmVuZGVyZXIgPSBkb3duY2FzdDxUZXh0Pihub2RlKS5yZW5kZXJlcigpKQorICAgICAgICAgICAg
cmV0dXJuIHJlbmRlcmVyLT5jYXJldE1heE9mZnNldCgpOworICAgIH0KICAgICByZXR1cm4gbGFz
dE9mZnNldEZvckVkaXRpbmcobm9kZSk7CiB9CiAKQEAgLTEyMTYsOSArMTIyOCw5IEBAIEVsZW1l
bnQqIGRlcHJlY2F0ZWRFbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KE5vZGUqIG5vZGUpCiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjYXJldFJlbmRlcnNJbnNp
ZGVOb2RlKE5vZGUqIG5vZGUpCitzdGF0aWMgaW5saW5lIGJvb2wgY2FyZXRSZW5kZXJzSW5zaWRl
Tm9kZShOb2RlJiBub2RlKQogewotICAgIHJldHVybiBub2RlICYmICFpc1JlbmRlcmVkVGFibGUo
bm9kZSkgJiYgIWVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKTsKKyAgICByZXR1cm4gIWlzUmVu
ZGVyZWRUYWJsZSgmbm9kZSkgJiYgIWVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKTsKIH0KIAog
UmVuZGVyQmxvY2sqIHJlbmRlcmVyRm9yQ2FyZXRQYWludGluZyhOb2RlKiBub2RlKQpAQCAtMTIz
MSw3ICsxMjQzLDcgQEAgUmVuZGVyQmxvY2sqIHJlbmRlcmVyRm9yQ2FyZXRQYWludGluZyhOb2Rl
KiBub2RlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIElmIGNhcmV0Tm9kZSBp
cyBhIGJsb2NrIGFuZCBjYXJldCBpcyBpbnNpZGUgaXQsIHRoZW4gY2FyZXQgc2hvdWxkIGJlIHBh
aW50ZWQgYnkgdGhhdCBibG9jay4KLSAgICBib29sIHBhaW50ZWRCeUJsb2NrID0gaXM8UmVuZGVy
QmxvY2tGbG93PigqcmVuZGVyZXIpICYmIGNhcmV0UmVuZGVyc0luc2lkZU5vZGUobm9kZSk7Cisg
ICAgYm9vbCBwYWludGVkQnlCbG9jayA9IGlzPFJlbmRlckJsb2NrRmxvdz4oKnJlbmRlcmVyKSAm
JiBjYXJldFJlbmRlcnNJbnNpZGVOb2RlKCpub2RlKTsKICAgICByZXR1cm4gcGFpbnRlZEJ5Qmxv
Y2sgPyBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpIDogcmVuZGVyZXItPmNvbnRhaW5p
bmdCbG9jaygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxl
ZGl0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKaW5kZXggM2Y2
N2U4ODJjNzZlMzRlNzBkMGZiMzM5MjVhMzFmZWQ3NjViMDY1Ni4uMDdiMGYxMDcyZTEzMDA0NDE3
N2JhODUyZTUzNDkxYjBlMjdiMjU5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9odG1sZWRpdGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcu
aApAQCAtNzEsMTQgKzcxLDEzIEBAIGludCBjYXJldE1heE9mZnNldChjb25zdCBOb2RlJik7CiBi
b29sIGhhc0VkaXRhYmxlU3R5bGUoY29uc3QgTm9kZSYsIEVkaXRhYmxlVHlwZSk7CiBib29sIGlz
RWRpdGFibGVOb2RlKGNvbnN0IE5vZGUmKTsKIAotLy8gRklYTUU6IGVkaXRpbmdJZ25vcmVzQ29u
dGVudCwgY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZywgYW5kIGlzQXRvbWljTm9kZSBzaG91bGQg
YmUgcmVuYW1lZCB0byBiZXR0ZXIgcmVmbGVjdCB0aGVpciB1c2FnZS4KKy8vIEZJWE1FOiBlZGl0
aW5nSWdub3Jlc0NvbnRlbnQsIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcsIGFuZCBpc0F0b21p
Y05vZGUgc2hvdWxkIGJlIG5hbWVkIHRvIGNsYXJpZnkgaG93IHRoZXkgZGlmZmVyLgogCiAvLyBS
ZXR1cm5zIHRydWUgZm9yIG5vZGVzIHRoYXQgZWl0aGVyIGhhdmUgbm8gY29udGVudCwgb3IgaGF2
ZSBjb250ZW50IHRoYXQgaXMgaWdub3JlZCAoc2tpcHBlZCBvdmVyKSB3aGlsZSBlZGl0aW5nLgog
Ly8gVGhlcmUgYXJlIG5vIFZpc2libGVQb3NpdGlvbnMgaW5zaWRlIHRoZXNlIG5vZGVzLgotYm9v
bCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoY29uc3QgTm9kZSopOwotCi1ib29sIGNhbkhhdmVDaGls
ZHJlbkZvckVkaXRpbmcoY29uc3QgTm9kZSopOworYm9vbCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQo
Y29uc3QgTm9kZSYpOwogCitib29sIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoY29uc3QgTm9k
ZSYpOwogYm9vbCBpc0F0b21pY05vZGUoY29uc3QgTm9kZSopOwogCiBib29sIGlzQmxvY2soY29u
c3QgTm9kZSopOwpAQCAtOTEsNyArOTAsNyBAQCBib29sIGlzUmVuZGVyZWRUYWJsZShjb25zdCBO
b2RlKik7CiBib29sIGlzVGFibGVDZWxsKGNvbnN0IE5vZGUqKTsKIGJvb2wgaXNFbXB0eVRhYmxl
Q2VsbChjb25zdCBOb2RlKik7CiBib29sIGlzVGFibGVTdHJ1Y3R1cmVOb2RlKGNvbnN0IE5vZGUq
KTsKLWJvb2wgaXNMaXN0RWxlbWVudChOb2RlKik7Citib29sIGlzTGlzdEhUTUxFbGVtZW50KE5v
ZGUqKTsKIGJvb2wgaXNMaXN0SXRlbShjb25zdCBOb2RlKik7CiBib29sIGlzTm9kZVJlbmRlcmVk
KGNvbnN0IE5vZGUmKTsKIGJvb2wgaXNSZW5kZXJlZEFzTm9uSW5saW5lVGFibGVJbWFnZU9ySFIo
Y29uc3QgTm9kZSopOwpAQCAtMTAxLDcgKzEwMCw3IEBAIGJvb2wgaXNOb2RlVmlzaWJseUNvbnRh
aW5lZFdpdGhpbihOb2RlJiwgY29uc3QgUmFuZ2UmKTsKIAogYm9vbCBhcmVJZGVudGljYWxFbGVt
ZW50cyhjb25zdCBOb2RlJiwgY29uc3QgTm9kZSYpOwogCi1ib29sIHBvc2l0aW9uQmVmb3JlT3JB
ZnRlck5vZGVJc0NhbmRpZGF0ZShOb2RlKik7Citib29sIHBvc2l0aW9uQmVmb3JlT3JBZnRlck5v
ZGVJc0NhbmRpZGF0ZShOb2RlJik7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFBvc2l0aW9u
CkBAIC0yMjQsMzMgKzIyMywyOCBAQCBpbmxpbmUgYm9vbCBpc0FtYmlndW91c0JvdW5kYXJ5Q2hh
cmFjdGVyKFVDaGFyIGNoYXJhY3RlcikKICAgICByZXR1cm4gY2hhcmFjdGVyID09ICdcJycgfHwg
Y2hhcmFjdGVyID09IHJpZ2h0U2luZ2xlUXVvdGF0aW9uTWFyayB8fCBjaGFyYWN0ZXIgPT0gaGVi
cmV3UHVuY3R1YXRpb25HZXJzaGF5aW07CiB9CiAKLWlubGluZSBib29sIGVkaXRpbmdJZ25vcmVz
Q29udGVudChjb25zdCBOb2RlKiBub2RlKQotewotICAgIHJldHVybiAhbm9kZS0+Y2FuQ29udGFp
blJhbmdlRW5kUG9pbnQoKTsKLX0KLQotaW5saW5lIGJvb2wgY2FuSGF2ZUNoaWxkcmVuRm9yRWRp
dGluZyhjb25zdCBOb2RlKiBub2RlKQoraW5saW5lIGJvb2wgZWRpdGluZ0lnbm9yZXNDb250ZW50
KGNvbnN0IE5vZGUmIG5vZGUpCiB7Ci0gICAgcmV0dXJuICFub2RlLT5pc1RleHROb2RlKCkgJiYg
bm9kZS0+Y2FuQ29udGFpblJhbmdlRW5kUG9pbnQoKTsKKyAgICByZXR1cm4gIW5vZGUuY2FuQ29u
dGFpblJhbmdlRW5kUG9pbnQoKTsKIH0KIAotaW5saW5lIGJvb2wgcG9zaXRpb25CZWZvcmVPckFm
dGVyTm9kZUlzQ2FuZGlkYXRlKE5vZGUqIG5vZGUpCitpbmxpbmUgYm9vbCBwb3NpdGlvbkJlZm9y
ZU9yQWZ0ZXJOb2RlSXNDYW5kaWRhdGUoTm9kZSYgbm9kZSkKIHsKLSAgICByZXR1cm4gaXNSZW5k
ZXJlZFRhYmxlKG5vZGUpIHx8IGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKTsKKyAgICByZXR1
cm4gaXNSZW5kZXJlZFRhYmxlKCZub2RlKSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSk7
CiB9CiAKIGlubGluZSBQb3NpdGlvbiBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoTm9kZSog
bm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJu
IGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSA/IHBvc2l0aW9uQmVmb3JlTm9kZShub2RlKSA6
IGZpcnN0UG9zaXRpb25Jbk5vZGUobm9kZSk7CisgICAgcmV0dXJuIGVkaXRpbmdJZ25vcmVzQ29u
dGVudCgqbm9kZSkgPyBwb3NpdGlvbkJlZm9yZU5vZGUobm9kZSkgOiBmaXJzdFBvc2l0aW9uSW5O
b2RlKG5vZGUpOwogfQogCiBpbmxpbmUgUG9zaXRpb24gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9k
ZShOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICByZXR1cm4gZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpID8gcG9zaXRpb25BZnRlck5vZGUo
bm9kZSkgOiBsYXN0UG9zaXRpb25Jbk5vZGUobm9kZSk7CisgICAgcmV0dXJuIGVkaXRpbmdJZ25v
cmVzQ29udGVudCgqbm9kZSkgPyBwb3NpdGlvbkFmdGVyTm9kZShub2RlKSA6IGxhc3RQb3NpdGlv
bkluTm9kZShub2RlKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYXJrdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCmluZGV4IDM2
OTg0MDkxOTdiMGNiM2FlZjY4MDQxNjc1MDcxZWMxNWJjMzY4NWEuLmY0YjczYzYwOWM3ZGIzZDI1
OWM0YTk2ZGM1MThhZWNhNjMyY2E5N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFya3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKQEAg
LTQwMiw5ICs0MDIsMTAgQEAgTm9kZSogU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnRyYXZlcnNl
Tm9kZXNGb3JTZXJpYWxpemF0aW9uKE5vZGUqIHN0YXJ0Tm9kZSwgTm8KICAgICAgICAgbmV4dCA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm4pOwogICAgICAgICBib29sIG9wZW5lZFRhZyA9IGZhbHNl
OwogCi0gICAgICAgIGlmIChpc0Jsb2NrKG4pICYmIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmco
bikgJiYgbmV4dCA9PSBwYXN0RW5kKQorICAgICAgICBpZiAoaXNCbG9jayhuKSAmJiBjYW5IYXZl
Q2hpbGRyZW5Gb3JFZGl0aW5nKCpuKSAmJiBuZXh0ID09IHBhc3RFbmQpIHsKICAgICAgICAgICAg
IC8vIERvbid0IHdyaXRlIG91dCBlbXB0eSBibG9jayBjb250YWluZXJzIHRoYXQgYXJlbid0IGZ1
bGx5IHNlbGVjdGVkLgogICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KIAogICAgICAg
ICBpZiAoIW4tPnJlbmRlcmVyKCkgJiYgIWVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGZpcnN0UG9z
aXRpb25Jbk9yQmVmb3JlTm9kZShuKSwgc2VsZWN0VGFnKSkgewogICAgICAgICAgICAgbmV4dCA9
IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKCpuKTsKQEAgLTUyOSw3ICs1MzAs
NyBAQCBzdGF0aWMgYm9vbCBpc0VsZW1lbnRQcmVzZW50YXRpb25hbChjb25zdCBOb2RlKiBub2Rl
KQogCiBzdGF0aWMgTm9kZSogaGlnaGVzdEFuY2VzdG9yVG9XcmFwTWFya3VwKGNvbnN0IFJhbmdl
KiByYW5nZSwgRUFubm90YXRlRm9ySW50ZXJjaGFuZ2Ugc2hvdWxkQW5ub3RhdGUpCiB7Ci0gICAg
Tm9kZSogY29tbW9uQW5jZXN0b3IgPSByYW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKTsK
KyAgICBhdXRvKiBjb21tb25BbmNlc3RvciA9IHJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRhaW5l
cigpOwogICAgIEFTU0VSVChjb21tb25BbmNlc3Rvcik7CiAgICAgTm9kZSogc3BlY2lhbENvbW1v
bkFuY2VzdG9yID0gbnVsbHB0cjsKICAgICBpZiAoc2hvdWxkQW5ub3RhdGUgPT0gQW5ub3RhdGVG
b3JJbnRlcmNoYW5nZSkgewpAQCAtNTM3LDEwICs1MzgsMTAgQEAgc3RhdGljIE5vZGUqIGhpZ2hl
c3RBbmNlc3RvclRvV3JhcE1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIEVBbm5vdGF0ZUZvcklu
dGVyY2gKICAgICAgICAgLy8gdGhlIHN0cnVjdHVyZSBhbmQgYXBwZWFyYW5jZSBvZiB0aGUgY29w
aWVkIG1hcmt1cC4KICAgICAgICAgc3BlY2lhbENvbW1vbkFuY2VzdG9yID0gYW5jZXN0b3JUb1Jl
dGFpblN0cnVjdHVyZUFuZEFwcGVhcmFuY2UoY29tbW9uQW5jZXN0b3IpOwogCi0gICAgICAgIGlm
IChOb2RlKiBwYXJlbnRMaXN0Tm9kZSA9IGVuY2xvc2luZ05vZGVPZlR5cGUoZmlyc3RQb3NpdGlv
bkluT3JCZWZvcmVOb2RlKHJhbmdlLT5maXJzdE5vZGUoKSksIGlzTGlzdEl0ZW0pKSB7Ci0gICAg
ICAgICAgICBpZiAoIWVkaXRpbmdJZ25vcmVzQ29udGVudChwYXJlbnRMaXN0Tm9kZSkgJiYgV2Vi
Q29yZTo6YXJlUmFuZ2VzRXF1YWwoVmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRl
bnRzT2ZOb2RlKHBhcmVudExpc3ROb2RlKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCByYW5n
ZSkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHBhcmVudExpc3ROb2RlID0gZG93bmNhc3Q8SFRNTEVs
ZW1lbnQ+KGVuY2xvc2luZ05vZGVPZlR5cGUoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHJh
bmdlLT5maXJzdE5vZGUoKSksIGlzTGlzdEl0ZW0pKSkgeworICAgICAgICAgICAgaWYgKCFlZGl0
aW5nSWdub3Jlc0NvbnRlbnQoKnBhcmVudExpc3ROb2RlKSAmJiBXZWJDb3JlOjphcmVSYW5nZXNF
cXVhbChWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUocGFyZW50
TGlzdE5vZGUpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHJhbmdlKSkgewogICAgICAgICAg
ICAgICAgIHNwZWNpYWxDb21tb25BbmNlc3RvciA9IHBhcmVudExpc3ROb2RlLT5wYXJlbnROb2Rl
KCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHNwZWNpYWxDb21tb25BbmNlc3RvciAmJiAhaXNM
aXN0RWxlbWVudChzcGVjaWFsQ29tbW9uQW5jZXN0b3IpKQorICAgICAgICAgICAgICAgIHdoaWxl
IChzcGVjaWFsQ29tbW9uQW5jZXN0b3IgJiYgIWlzTGlzdEhUTUxFbGVtZW50KHNwZWNpYWxDb21t
b25BbmNlc3RvcikpCiAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxDb21tb25BbmNlc3RvciA9
IHNwZWNpYWxDb21tb25BbmNlc3Rvci0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkBAIC01NTAsNyArNTUxLDcgQEAgc3RhdGljIE5vZGUqIGhpZ2hlc3RBbmNlc3RvclRv
V3JhcE1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIEVBbm5vdGF0ZUZvckludGVyY2gKICAgICAg
ICAgICAgIHNwZWNpYWxDb21tb25BbmNlc3RvciA9IGhpZ2hlc3RNYWlsQmxvY2txdW90ZTsKICAg
ICB9CiAKLSAgICBOb2RlKiBjaGVja0FuY2VzdG9yID0gc3BlY2lhbENvbW1vbkFuY2VzdG9yID8g
c3BlY2lhbENvbW1vbkFuY2VzdG9yIDogY29tbW9uQW5jZXN0b3I7CisgICAgYXV0byogY2hlY2tB
bmNlc3RvciA9IHNwZWNpYWxDb21tb25BbmNlc3RvciA/IHNwZWNpYWxDb21tb25BbmNlc3RvciA6
IGNvbW1vbkFuY2VzdG9yOwogICAgIGlmIChjaGVja0FuY2VzdG9yLT5yZW5kZXJlcigpICYmIGNo
ZWNrQW5jZXN0b3ItPnJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpKSB7CiAgICAgICAgIE5v
ZGUqIG5ld1NwZWNpYWxDb21tb25BbmNlc3RvciA9IGhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBl
KGZpcnN0UG9zaXRpb25Jbk5vZGUoY2hlY2tBbmNlc3RvciksICZpc0VsZW1lbnRQcmVzZW50YXRp
b25hbCwgQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnksIGNoZWNrQW5jZXN0b3ItPnJlbmRlcmVyKCkt
PmNvbnRhaW5pbmdCbG9jaygpLT5lbGVtZW50KCkpOwogICAgICAgICBpZiAobmV3U3BlY2lhbENv
bW1vbkFuY2VzdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3BhbkVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3BhbkVsZW1lbnQuY3BwCmluZGV4
IGI4MjA1ODE0YWJjNGRiNmUxYzQwNjY0MGFkMjJmN2I3YmFmM2I5NWYuLjE0NDlmMTc4OWZkOWM3
OTQ1NDExMzBiNzAzYzE1NTc4NTYxZTVkYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFNwYW5FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTcGFu
RWxlbWVudC5jcHAKQEAgLTM4LDYgKzM4LDExIEBAIEhUTUxTcGFuRWxlbWVudDo6SFRNTFNwYW5F
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1bWVuCiAg
ICAgQVNTRVJUKGhhc1RhZ05hbWUoc3BhblRhZykpOwogfQogCitSZWY8SFRNTFNwYW5FbGVtZW50
PiBIVE1MU3BhbkVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgSFRNTFNwYW5FbGVtZW50KHNwYW5UYWcsIGRvY3VtZW50KSk7Cit9
CisKIFJlZjxIVE1MU3BhbkVsZW1lbnQ+IEhUTUxTcGFuRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBIVE1MU3BhbkVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNwYW5FbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTcGFuRWxlbWVudC5oCmluZGV4IGMyOGJjNjk2Y2EzYTM0ZmQzNTJjZTQx
OGE3YmIwZmFiMDZkOGQ2MzMuLmM4NWIwZGMxMTY1MDE2YjViNWU3YzFkYzEwYTk5NWEwYWVmYzRj
OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNwYW5FbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3BhbkVsZW1lbnQuaApAQCAtMzIsNiArMzIsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxTcGFuRWxlbWVudCBmaW5hbCA6IHB1
YmxpYyBIVE1MRWxlbWVudCB7CiBwdWJsaWM6CisgICAgc3RhdGljIFJlZjxIVE1MU3BhbkVsZW1l
bnQ+IGNyZWF0ZShEb2N1bWVudCYpOwogICAgIHN0YXRpYyBSZWY8SFRNTFNwYW5FbGVtZW50PiBj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKIHByaXZhdGU6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKaW5kZXggNDA5ZTY2YWUwY2ZjYjY1ZGEyOTIzYmE0
OGQzMGU2NDIwMGI4NWFkOC4uOTE3ZDVlNWFhZGRjZTI1MDMxZmZmZWRiMDJhNjBlN2Y1ODdhY2Yy
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcApAQCAtMzUsMTIgKzM1LDkgQEAK
ICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJGcmFtZVNlbGVjdGlvbi5oIgotI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJSYW5nZS5o
IgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlRyZWVTY29wZS5oIgogI2lu
Y2x1ZGUgImh0bWxlZGl0aW5nLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAppbmRleCBiMzFjOGU0Njk5NzQwOTZkYjVkMjA2ZmFhMGZlY2Y0MjQ2Njc4YjU5Li5mZjQ5MzNm
MWQ0ZTY1MGYxN2E0ZTBhNWM5M2IxOWE1ODBiZTY3OTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcApAQCAtMzcsOCArMzcsOCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxCdXR0
b25FbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJh
bWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
SFRNTFRleHRBcmVhRWxlbWVudC5oIgpAQCAtNDM4Niw3ICs0Mzg2LDcgQEAgTGF5b3V0UmVjdCBS
ZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogYm94LCBpbnQgY2FyZXRPZmZzZXQs
IExheW91dFVuaXQKICAgICAvLyBGSVhNRTogQm9yZGVyL3BhZGRpbmcgc2hvdWxkIGJlIGFkZGVk
IGZvciBhbGwgZWxlbWVudHMgYnV0IHRoaXMgd29ya2Fyb3VuZAogICAgIC8vIGlzIG5lZWRlZCBi
ZWNhdXNlIHdlIHVzZSBvZmZzZXRzIGluc2lkZSBhbiAiYXRvbWljIiBlbGVtZW50IHRvIHJlcHJl
c2VudAogICAgIC8vIHBvc2l0aW9ucyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBlbGVtZW50IGluIGRl
cHJlY2F0ZWQgZWRpdGluZyBvZmZzZXRzLgotICAgIGlmIChlbGVtZW50KCkgJiYgIShlZGl0aW5n
SWdub3Jlc0NvbnRlbnQoZWxlbWVudCgpKSB8fCBpc1JlbmRlcmVkVGFibGUoZWxlbWVudCgpKSkp
IHsKKyAgICBpZiAoZWxlbWVudCgpICYmICEoZWRpdGluZ0lnbm9yZXNDb250ZW50KCplbGVtZW50
KCkpIHx8IGlzUmVuZGVyZWRUYWJsZShlbGVtZW50KCkpKSkgewogICAgICAgICByZWN0LnNldFgo
cmVjdC54KCkgKyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpKTsKICAgICAgICAgcmVjdC5z
ZXRZKHJlY3QueSgpICsgcGFkZGluZ1RvcCgpICsgYm9yZGVyVG9wKCkpOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tIGIv
U291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KaW5kZXggYTcw
NDBhODc2N2I4YmM5YzNiNmExMTNkMTE4YTk0OTllNDAyY2Y0Ni4uMjc5MDM5ZjQyNmZkNzg2N2I3
Y2Y4MWI0YTdjZTIwNjhjMTE3NzdhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9pb3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KQEAgLTg0OCw3ICs4NDgsNyBAQCAtIChXZWJWaXNpYmxl
UG9zaXRpb24gKilwcmV2aW91c1VucGVydHVyYmVkRGljdGF0aW9uUmVzdWx0Qm91bmRhcnlGcm9t
UG9zaXRpb246KAogICAgIHdoaWxlIChjdXJyZW50VmlzaWJsZVBvc2l0aW9uLmlzTm90TnVsbCgp
KSB7CiAgICAgICAgIFdlYlZpc2libGVQb3NpdGlvbiAqY3VycmVudFdlYlZpc2libGVQb3NpdGlv
biA9IFtXZWJWaXNpYmxlUG9zaXRpb24gX3dyYXBWaXNpYmxlUG9zaXRpb246Y3VycmVudFZpc2li
bGVQb3NpdGlvbl07CiAgICAgICAgIAotICAgICAgICBOb2RlICpjdXJyZW50Tm9kZSA9IGN1cnJl
bnRWaXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCk7CisgICAgICAg
IGF1dG8qIGN1cnJlbnROb2RlID0gY3VycmVudFZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVu
dCgpLmFuY2hvck5vZGUoKTsKICAgICAgICAgaW50IGxhc3RPZmZzZXQgPSBsYXN0T2Zmc2V0Rm9y
RWRpdGluZygqY3VycmVudE5vZGUpOwogICAgICAgICBBU1NFUlQobGFzdE9mZnNldCA+PSAwKTsK
ICAgICAgICAgaWYgKGxhc3RPZmZzZXQgPCAwKQpAQCAtOTA0LDcgKzkwNCw3IEBAIC0gKFdlYlZp
c2libGVQb3NpdGlvbiAqKW5leHRVbnBlcnR1cmJlZERpY3RhdGlvblJlc3VsdEJvdW5kYXJ5RnJv
bVBvc2l0aW9uOihXZWJWCiAgICAgd2hpbGUgKGN1cnJlbnRWaXNpYmxlUG9zaXRpb24uaXNOb3RO
dWxsKCkpIHsKICAgICAgICAgV2ViVmlzaWJsZVBvc2l0aW9uICpjdXJyZW50V2ViVmlzaWJsZVBv
c2l0aW9uID0gW1dlYlZpc2libGVQb3NpdGlvbiBfd3JhcFZpc2libGVQb3NpdGlvbjpjdXJyZW50
VmlzaWJsZVBvc2l0aW9uXTsKICAgICAgICAgCi0gICAgICAgIE5vZGUgKmN1cnJlbnROb2RlID0g
Y3VycmVudFZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKTsKKyAg
ICAgICAgYXV0byogY3VycmVudE5vZGUgPSBjdXJyZW50VmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVp
dmFsZW50KCkuYW5jaG9yTm9kZSgpOwogICAgICAgICBpbnQgbGFzdE9mZnNldCA9IGxhc3RPZmZz
ZXRGb3JFZGl0aW5nKCpjdXJyZW50Tm9kZSk7CiAgICAgICAgIEFTU0VSVChsYXN0T2Zmc2V0ID49
IDApOwogICAgICAgICBpZiAobGFzdE9mZnNldCA8IDApCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278979</attachid>
            <date>2016-05-15 14:01:57 -0700</date>
            <delta_ts>2016-05-15 15:07:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157722-20160515140251.patch</filename>
            <type>text/plain</type>
            <size>101542</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwOTI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTM2N2NjMjlmODUwZmNl
Yzc5MzdkYzJmMDhlMDMwZTNmNWQyOWNlMC4uNjE4NDdjMTViYjdhZjliNjliMjA3ZDY4Mjg5ZDVk
NTRhM2ZjNzgyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NCBAQAorMjAxNi0wNS0xNSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW9yZSBDVFRFIGFuZCBvdGhl
ciBjbGVhbnVwcyBmb3IgSFRNTCBlZGl0aW5nIGhlYWRlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3NzIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlc2UgY2hhbmdlcyBhcmUgbW9zdGx5IHRoaW5n
cyBDaHJpcyBhc2tlZCBmb3IgaW4gaGlzIHJldmlldyBvZiBteSBsYXN0IHBhdGNoCisgICAgICAg
IG9yIG90aGVyIHJlbGF0ZWQgc3R5bGUgYW5kIHNtYWxsIGVmZmljaWVuY3kgaW1wcm92ZW1lbnRz
LgorCisgICAgICAgIC0gdXNpbmcgbnVsbHB0ciBpbnN0ZWFkIG9mIDAKKyAgICAgICAgLSB1c2lu
ZyBpczxUZXh0PiBpbnN0ZWFkIG9mIGlzVGV4dE5vZGUgYW5kIGlzPD4gaW5zdGVhZCBvZiBoYXNU
YWdOYW1lCisgICAgICAgIC0gY2hhbmdpbmcgYXJndW1lbnQgdHlwZSBvZiBmdW5jdGlvbnMgbGlr
ZSBlZGl0aW5nSWdub3Jlc0NvbnRlbnQgdG8gYSByZWZlcmVuY2UKKyAgICAgICAgLSB1c2luZyB7
IH0gaW5zdGVhZCBvZiBjb25zdHJ1Y3RvciBjYWxscyBmb3IgY2xhc3NlcyBsaWtlIFBvc2l0aW9u
CisgICAgICAgIC0gdXNpbmcgd29yZHMgbGlrZSBwb3NpdGlvbiBpbnRlYWQgb2YgYWJicmV2aWF0
aW9ucyBsaWtlIHBvcworICAgICAgICAtIHVzaW5nIGF1dG8gcmF0aGVyIHRoYW4gZXhwbGljaXQg
dHlwZXMKKyAgICAgICAgLSByZW5hbWUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHRydWUgZm9yIEhU
TUxFbGVtZW50IHRvIGV4cHJlc3MgdGhhdCBpbiB0aGUgZnVuY3Rpb24gbmFtZXMKKworICAgICAg
ICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuZXh0UmVuZGVyZWRFZGl0
YWJsZSk6IG51bGxwdHIKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzUmVuZGVyZWRFZGl0YWJs
ZSk6IG51bGxwdHIKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpQb3NpdGlvbik6IGlzPD4s
IHJlZmVyZW5jZQorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246Om1vdmVUb1Bvc2l0aW9uKTog
cmVmZXJlbmNlCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6b2Zmc2V0Rm9yUG9zaXRpb25B
ZnRlckFuY2hvcik6IEFkZGVkIGEgbnVsbCBhc3NlcnRpb24gYW5kCisgICAgICAgIG51bGwgY2hl
Y2sgdGhhdCByZXBsYWNlcyB0aGUgb25lIHRoYXQgdXNlZCB0byBiZSBpbiBsYXN0T2Zmc2V0Rm9y
RWRpdGluZy4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpwYXJlbnRBbmNob3JlZEVxdWl2
YWxlbnQpOiB7IH0sIHJlZmVyZW5jZQorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmNvbXB1
dGVOb2RlQmVmb3JlUG9zaXRpb24pOiBudWxscHRyCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlv
bjo6Y29tcHV0ZU5vZGVBZnRlclBvc2l0aW9uKTogbnVsbHB0cgorICAgICAgICAoV2ViQ29yZTo6
UG9zaXRpb246OmFuY2hvclR5cGVGb3JMZWdhY3lFZGl0aW5nUG9zaXRpb24pOiByZWZlcmVuY2UK
KyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpwcmV2aW91cyk6IHJlZmVyZW5jZQorICAgICAg
ICAoV2ViQ29yZTo6UG9zaXRpb246Om5leHQpOiByZWZlcmVuY2UKKyAgICAgICAgKFdlYkNvcmU6
OlBvc2l0aW9uOjpwYXJlbnRFZGl0aW5nQm91bmRhcnkpOiBudWxscHRyCisgICAgICAgIChXZWJD
b3JlOjpQb3NpdGlvbjo6cHJldmlvdXNDaGFyYWN0ZXJQb3NpdGlvbik6IHsgfSwgcG9zIC0+IHBv
c2l0aW9uCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6bmV4dENoYXJhY3RlclBvc2l0aW9u
KTogeyB9LCBwb3MgLT4gcG9zaXRpb24KKyAgICAgICAgKFdlYkNvcmU6OmVuZHNPZk5vZGVBcmVW
aXN1YWxseURpc3RpbmN0UG9zaXRpb25zKTogcmVmZXJlbmNlCisgICAgICAgIChXZWJDb3JlOjpQ
b3NpdGlvbjo6dXBzdHJlYW0pOiB7IH0sIHBvcyAtPiBwb3NpdGlvbgorICAgICAgICAoV2ViQ29y
ZTo6UG9zaXRpb246OmRvd25zdHJlYW0pOiB7IH0sIHBvcyAtPiBwb3NpdGlvbgorICAgICAgICAo
V2ViQ29yZTo6UG9zaXRpb246OnJvb3RVc2VyU2VsZWN0QWxsRm9yTm9kZSk6IG51bGxwdHIKKyAg
ICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjppc0NhbmRpZGF0ZSk6IGF1dG8sIHJlZmVyZW5jZSwg
aXM8PgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnJlbmRlcnNJbkRpZmZlcmVudFBvc2l0
aW9uKTogcG9zIC0+IHBvc2l0aW9uLCBhdXRvLCBpczw+CisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbjo6bGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbik6IHsgfSwgaXM8PgorICAgICAgICAoV2Vi
Q29yZTo6UG9zaXRpb246OnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKTogeyB9CisgICAgICAg
IChXZWJDb3JlOjpQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KTogcmVmZXJlbmNlCisg
ICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6ZXF1YWxzKTogcmVmZXJlbmNlLCBpczw+CisKKyAg
ICAgICAgKiBkb20vUG9zaXRpb25JdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbkl0ZXJhdG9yOjpvcGVyYXRvciBQb3NpdGlvbik6IHJlZmVyZW5jZQorICAgICAgICAoV2Vi
Q29yZTo6UG9zaXRpb25JdGVyYXRvcjo6aXNDYW5kaWRhdGUpOiByZWZlcmVuY2UKKworICAgICAg
ICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UpOiBpczw+CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJh
bmdlKTogaXM8PiwgcmVmZXJlbmNlCisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFu
ZDo6cmVtb3ZlQ29uZmxpY3RpbmdJbmxpbmVTdHlsZUZyb21SdW4pOiByZWZlcmVuY2UKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZSk6IGF1dG8s
IGlzPD4sIHJlZmVyZW5jZQorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6Om5v
ZGVGdWxseVNlbGVjdGVkKTogaXM8PgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1h
bmQ6Om5vZGVGdWxseVVuc2VsZWN0ZWQpOiBpczw+CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0
eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRTdGFydCk6IGlzPD4KKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50QXRTdGFydCk6IGlzPD4KKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50QXRFbmQpOiBpczw+
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6aXNWYWxpZENhcmV0UG9zaXRp
b25JblRleHROb2RlKTogaXM8PgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6
OnN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQpOiBSZW1vdmVkIHVubmVlZGVkCisgICAgICAg
IGlzPEVsZW1lbnQ+IGNhbGxzIGJlZm9yZSBjYWxsaW5nIGFyZUlkZW50aWNhbEVsZW1lbnRzLgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnBvc2l0aW9uVG9Db21wdXRlSW5s
aW5lU3R5bGVDaGFuZ2UpOiBUaWdodGVuZWQKKyAgICAgICAgdXAgbG9naWMgZm9yIHRoZSBsb29w
IHRvIGF2b2lkIHJlZHVuZGFudCBjaGVja3MuCisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxl
Q29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZUNoYW5nZSk6IGF1dG8KKworICAgICAgICAqIGVkaXRp
bmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
RWRpdENvbW1hbmQ6Omluc2VydE5vZGVBdCk6IHJlZmVyZW5jZQorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGVuZE5vZGUpOiByZWZlcmVuY2UKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6IGlzTGlzdEhUTUxF
bGVtZW50CisKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERl
bGV0ZSk6IHJlZmVyZW5jZQorCisgICAgICAgICogZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQu
Y3BwOiBGaXhlZCBvcmRlciBvZiBpbmNsdWRlcy4KKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2lu
Z0Jsb2NrVG9TcGxpdFRyZWVUbyk6IGlzTGlzdEhUTUxFbGVtZW50CisKKyAgICAgICAgKiBlZGl0
aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSk6IHJlZmVyZW5jZQor
CisgICAgICAgICogZWRpdGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0U3RhcnRFbmRMaXN0Q2hpbGRyZW4pOiBpc0xpc3RIVE1MRWxlbWVudAor
ICAgICAgICAoV2ViQ29yZTo6SW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjpkb0Fw
cGx5KTppc0xpc3RIVE1MRWxlbWVudAorICAgICAgICAoV2ViQ29yZTo6Y2FuRGVjcmVhc2VMaXN0
TGV2ZWwpOmlzTGlzdEhUTUxFbGVtZW50CisKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZU5vZGVD
b21tYW5kLmNwcDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlLgorCisgICAgICAgICogZWRpdGlu
Zy9SZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBs
YWNlTm9kZVdpdGhTcGFuQ29tbWFuZDo6ZG9BcHBseSk6IFVzZSBIVE1MU3BhbkVsZW1lbnQ6OmNy
ZWF0ZS4KKworICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aXNJbnRlcmNoYW5nZU5ld2xpbmVOb2RlKTogaXM8PiwgZG93bmNh
c3Q8PgorICAgICAgICAoV2ViQ29yZTo6aXNJbnRlcmNoYW5nZUNvbnZlcnRlZFNwYWNlU3Bhbik6
IGlzPD4sIGRvd25jYXN0PD4KKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uQXZvaWRpbmdQcmVj
ZWRpbmdOb2Rlcyk6IHBvcyAtPiBwb3NpdGlvbiwgcmVmZXJlbmNlCisgICAgICAgIChXZWJDb3Jl
OjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6IGlzTGlzdEhUTUxFbGVtZW50Cisg
ICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aW5zZXJ0QXNMaXN0SXRl
bXMpOiBpc0xpc3RIVE1MRWxlbWVudAorCisgICAgICAgICogZWRpdGluZy9TcGVsbENoZWNrZXIu
Y3BwOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUuCisKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJ
dGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0
ZXJhdG9yOjphZHZhbmNlKTogcmVmZXJlbmNlCisKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVT
ZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0
aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKTogcmVmZXJlbmNlCisKKyAgICAgICAgKiBlZGl0aW5nL1Zp
c2libGVVbml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0xpbmVQb3NpdGlvbik6
IHJlZmVyZW5jZQorICAgICAgICAoV2ViQ29yZTo6bmV4dExpbmVQb3NpdGlvbik6IHJlZmVyZW5j
ZQorICAgICAgICAoV2ViQ29yZTo6ZmluZFN0YXJ0T2ZQYXJhZ3JhcGgpOiByZWZlcmVuY2UKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbmRFbmRPZlBhcmFncmFwaCk6IHJlZmVyZW5jZQorCisgICAgICAg
ICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYW5IYXZlQ2hp
bGRyZW5Gb3JFZGl0aW5nKTogTW92ZWQgaGVyZSBmcm9tIGhlYWRlciBmaWxlIHNvIHdlIGRvbid0
CisgICAgICAgIGhhdmUgdG8gaW5jbHVkZSAiVGV4dC5oIi4gTm90IGNyaXRpY2FsIHRvIGlubGlu
ZSB0aGlzLgorICAgICAgICAoV2ViQ29yZTo6aXNBdG9taWNOb2RlKTogcmVmZXJlbmNlCisgICAg
ICAgIChXZWJDb3JlOjpsYXN0T2Zmc2V0Rm9yRWRpdGluZyk6IHJlZmVyZW5jZQorICAgICAgICAo
V2ViQ29yZTo6c3RyaW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNwYWNlKTogQ2hhbmdlZCB0byB1c2Ug
U3RyaW5nQnVpbGRlciBpbnN0ZWFkCisgICAgICAgIG9mIFZlY3RvcjxVQ2hhcj4gc28gdGhpcyB3
b24ndCB0dXJuIDgtYml0IHN0cmluZ3MgaW50byAxNi1iaXQgc3RyaW5ncy4gQ2hhbmdlZAorICAg
ICAgICB0byBub3QgdXNlIHRoZSBTdHJpbmdCdWlsZGVyIGF0IGFsbCB1bnRpbCB3ZSBlbmNvdW50
ZXIgYSBjaGFyYWN0ZXIgdGhhdCBuZWVkcworICAgICAgICB0byBiZSBjaGFuZ2VkLgorICAgICAg
ICAoV2ViQ29yZTo6aXNTcGVjaWFsSFRNTEVsZW1lbnQpOiBSZW5hbWVkIHRvIG1ha2UgaXQgY2xl
YXIgdGhhdCBpdCBvbmx5IGNhbiByZXR1cm4KKyAgICAgICAgdHJ1ZSBmb3IgYSBOb2RlIHRoYXQg
aXMgYW4gSFRNTEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpmaXJzdEluU3BlY2lhbEVsZW1l
bnQpOiBpc1NwZWNpYWxIVE1MRWxlbWVudAorICAgICAgICAoV2ViQ29yZTo6bGFzdEluU3BlY2lh
bEVsZW1lbnQpOiBpc1NwZWNpYWxIVE1MRWxlbWVudAorICAgICAgICAoV2ViQ29yZTo6aXNMaXN0
SFRNTEVsZW1lbnQpOiBSZW5hbWVkIHRvIG1ha2UgaXQgY2xlYXIgdGhhdCBpdCBjYW4gb25seSBy
ZXR1cm4KKyAgICAgICAgdHJ1ZSBmb3IgYSBOb2RlIHRoYXQgaXMgYW4gSFRNTEVsZW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjppc0xpc3RJdGVtKTogaXNMaXN0SFRNTEVsZW1lbnQsIGlzPD4KKyAg
ICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ05vZGVPZlR5cGUpOiBwIC0+IHBvc2l0aW9uLCBudWxs
cHRyCisgICAgICAgIChXZWJDb3JlOjpoaWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlwZSk6IHAgLT4g
cG9zaXRpb24KKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0xpc3RDaGlsZCk6IGlzTGlzdEhU
TUxFbGVtZW50LCBpczw+CisgICAgICAgIChXZWJDb3JlOjplbWJlZGRlZFN1Ymxpc3QpOiBpc0xp
c3RIVE1MRWxlbWVudAorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kZWRTdWJsaXN0KTppc0xpc3RI
VE1MRWxlbWVudAorICAgICAgICAoV2ViQ29yZTo6Y2FyZXRNYXhPZmZzZXQpOiBpczw+CisgICAg
ICAgIChXZWJDb3JlOjpjYXJldFJlbmRlcnNJbnNpZGVOb2RlKTogY2hhbmdlZCB0byB0YWtlIGEg
cmVmZXJlbmNlCisgICAgICAgIChXZWJDb3JlOjpyZW5kZXJlckZvckNhcmV0UGFpbnRpbmcpOiBy
ZWZlcmVuY2UKKworICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDogVXBkYXRlZCBmb3Ig
bmFtZSBjaGFuZ2VzIGFuZCB0eXBlIGNoYW5nZXMgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5n
L21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6
dHJhdmVyc2VOb2Rlc0ZvclNlcmlhbGl6YXRpb24pOiByZWZlcmVuY2UKKyAgICAgICAgKFdlYkNv
cmU6OmhpZ2hlc3RBbmNlc3RvclRvV3JhcE1hcmt1cCk6IGF1dG8sIHJlZmVyZW5jZSwgaXNMaXN0
SFRNTEVsZW1lbnQKKworICAgICAgICAqIGh0bWwvSFRNTFNwYW5FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTcGFuRWxlbWVudDo6Y3JlYXRlKTogQWRkZWQgb3ZlcmxvYWQgdGhh
dCBkb2VzIG5vdCByZXF1aXJlIGEgdGFnIG5hbWUuCisgICAgICAgICogaHRtbC9IVE1MU3BhbkVs
ZW1lbnQuaDogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0RPTVNlbGVjdGlvbi5jcHA6IFJlbW92
ZWQgdW5uZWVkZWQgaW5jbHVkZXMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QpOiByZWZlcmVu
Y2UKKwogMjAxNi0wNS0xNSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIwMDkyNS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxv
ZwppbmRleCA4MDE0MDAyNGJlZGU2MWY3N2ZlYzkzMjM4Y2UxNThiNDk1NDRkNjZjLi40MWU3ZjRh
M2YzOGNjMzUwMGFiYzE0MjQ5MzBiMTEyMmVkYmFkNTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2lvcy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTYtMDUtMTUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgor
CisgICAgICAgIE1vcmUgQ1RURSBhbmQgb3RoZXIgY2xlYW51cHMgZm9yIEhUTUwgZWRpdGluZyBo
ZWFkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NzcyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW06CisgICAgICAgICgtW1dlYkZyYW1lIHByZXZp
b3VzVW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRCb3VuZGFyeUZyb21Qb3NpdGlvbjpdKTogYXV0
bworICAgICAgICAoLVtXZWJGcmFtZSBuZXh0VW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRCb3Vu
ZGFyeUZyb21Qb3NpdGlvbjpdKTogYXV0bworCiAyMDE2LTA1LTE0ICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KIAogICAgICAgICBDVFRFIGZvciB0aGUgSFRNTCBlZGl0aW5nIGhlYWRl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKaW5kZXggMzI3MzQ3ZDY3NjE1NmU3NjNiYTFkZWY5ODM1
YzdlYWNmNjgyODA0ZC4uYmE0OWFhYmQ1NjMyYWVjM2NmMzgwY2JmY2E4ZGJkMmUzNGE5NmIyNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSA8c3Rk
aW8uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNv
ZGUvQ2hhcmFjdGVyTmFtZXMuaD4KKwogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjZW5kaWYKQEAgLTc5LDcgKzgwLDcgQEAg
c3RhdGljIE5vZGUqIG5leHRSZW5kZXJlZEVkaXRhYmxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGlm
IChoYXNJbmxpbmVCb3hXcmFwcGVyKCpyZW5kZXJlcikpCiAgICAgICAgICAgICByZXR1cm4gbm9k
ZTsKICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHN0YXRp
YyBOb2RlKiBwcmV2aW91c1JlbmRlcmVkRWRpdGFibGUoTm9kZSogbm9kZSkKQEAgLTkxLDcgKzky
LDcgQEAgc3RhdGljIE5vZGUqIHByZXZpb3VzUmVuZGVyZWRFZGl0YWJsZShOb2RlKiBub2RlKQog
ICAgICAgICBpZiAoaGFzSW5saW5lQm94V3JhcHBlcigqcmVuZGVyZXIpKQogICAgICAgICAgICAg
cmV0dXJuIG5vZGU7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwog
fQogCiBQb3NpdGlvbjo6UG9zaXRpb24oUGFzc1JlZlB0cjxOb2RlPiBhbmNob3JOb2RlLCBMZWdh
Y3lFZGl0aW5nT2Zmc2V0IG9mZnNldCkKQEAgLTExNCw3ICsxMTUsNyBAQCBQb3NpdGlvbjo6UG9z
aXRpb24oUGFzc1JlZlB0cjxOb2RlPiBhbmNob3JOb2RlLCBBbmNob3JUeXBlIGFuY2hvclR5cGUp
CiAgICAgQVNTRVJUKCFtX2FuY2hvck5vZGUgfHwgIW1fYW5jaG9yTm9kZS0+aXNQc2V1ZG9FbGVt
ZW50KCkpOwogICAgIEFTU0VSVChhbmNob3JUeXBlICE9IFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
cik7CiAgICAgQVNTRVJUKCEoKGFuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0JlZm9yZUNoaWxkcmVu
IHx8IGFuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW4pCi0gICAgICAgICYmICht
X2FuY2hvck5vZGUtPmlzVGV4dE5vZGUoKSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobV9hbmNo
b3JOb2RlLmdldCgpKSkpKTsKKyAgICAgICAgJiYgKGlzPFRleHQ+KCptX2FuY2hvck5vZGUpIHx8
IGVkaXRpbmdJZ25vcmVzQ29udGVudCgqbV9hbmNob3JOb2RlKSkpKTsKIH0KIAogUG9zaXRpb246
OlBvc2l0aW9uKFBhc3NSZWZQdHI8Tm9kZT4gYW5jaG9yTm9kZSwgaW50IG9mZnNldCwgQW5jaG9y
VHlwZSBhbmNob3JUeXBlKQpAQCAtMTIzLDcgKzEyNCw3IEBAIFBvc2l0aW9uOjpQb3NpdGlvbihQ
YXNzUmVmUHRyPE5vZGU+IGFuY2hvck5vZGUsIGludCBvZmZzZXQsIEFuY2hvclR5cGUgYW5jaG9y
VHlwCiAgICAgLCBtX2FuY2hvclR5cGUoYW5jaG9yVHlwZSkKICAgICAsIG1faXNMZWdhY3lFZGl0
aW5nUG9zaXRpb24oZmFsc2UpCiB7Ci0gICAgQVNTRVJUKCFtX2FuY2hvck5vZGUgfHwgIWVkaXRp
bmdJZ25vcmVzQ29udGVudChtX2FuY2hvck5vZGUuZ2V0KCkpIHx8ICFtX2FuY2hvck5vZGUtPmlz
U2hhZG93Um9vdCgpKTsKKyAgICBBU1NFUlQoIW1fYW5jaG9yTm9kZSB8fCAhZWRpdGluZ0lnbm9y
ZXNDb250ZW50KCptX2FuY2hvck5vZGUpIHx8ICFtX2FuY2hvck5vZGUtPmlzU2hhZG93Um9vdCgp
KTsKICAgICBBU1NFUlQoIW1fYW5jaG9yTm9kZSB8fCAhbV9hbmNob3JOb2RlLT5pc1BzZXVkb0Vs
ZW1lbnQoKSk7CiAgICAgQVNTRVJUKGFuY2hvclR5cGUgPT0gUG9zaXRpb25Jc09mZnNldEluQW5j
aG9yKTsKIH0KQEAgLTEzOSw3ICsxNDAsNyBAQCBQb3NpdGlvbjo6UG9zaXRpb24oUGFzc1JlZlB0
cjxUZXh0PiB0ZXh0Tm9kZSwgdW5zaWduZWQgb2Zmc2V0KQogCiB2b2lkIFBvc2l0aW9uOjptb3Zl
VG9Qb3NpdGlvbihQYXNzUmVmUHRyPE5vZGU+IG5vZGUsIGludCBvZmZzZXQpCiB7Ci0gICAgQVNT
RVJUKCFlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZS5nZXQoKSkpOworICAgIEFTU0VSVCghZWRp
dGluZ0lnbm9yZXNDb250ZW50KCpub2RlKSk7CiAgICAgQVNTRVJUKGFuY2hvclR5cGUoKSA9PSBQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgfHwgbV9pc0xlZ2FjeUVkaXRpbmdQb3NpdGlvbik7CiAg
ICAgbV9hbmNob3JOb2RlID0gbm9kZTsKICAgICBtX29mZnNldCA9IG9mZnNldDsKQEAgLTIxNCw2
ICsyMTUsOSBAQCBpbnQgUG9zaXRpb246Om9mZnNldEZvclBvc2l0aW9uQWZ0ZXJBbmNob3IoKSBj
b25zdAogewogICAgIEFTU0VSVChtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0FmdGVyQW5jaG9y
IHx8IG1fYW5jaG9yVHlwZSA9PSBQb3NpdGlvbklzQWZ0ZXJDaGlsZHJlbik7CiAgICAgQVNTRVJU
KCFtX2lzTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKTsKKyAgICBBU1NFUlQobV9hbmNob3JOb2RlKTsK
KyAgICBpZiAoIW1fYW5jaG9yTm9kZSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGxh
c3RPZmZzZXRGb3JFZGl0aW5nKCptX2FuY2hvck5vZGUpOwogfQogCkBAIC0yMjIsMzMgKzIyNiwz
MyBAQCBpbnQgUG9zaXRpb246Om9mZnNldEZvclBvc2l0aW9uQWZ0ZXJBbmNob3IoKSBjb25zdAog
UG9zaXRpb24gUG9zaXRpb246OnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2FuY2hvck5vZGUpCi0gICAgICAgIHJldHVybiBQb3NpdGlvbigpOworICAgICAg
ICByZXR1cm4geyB9OwogICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBvbmx5IGJlIG5l
Y2Vzc2FyeSBmb3IgbGVnYWN5IHBvc2l0aW9ucywgYnV0IGlzIGFsc28gbmVlZGVkIGZvciBwb3Np
dGlvbnMgYmVmb3JlIGFuZCBhZnRlciBUYWJsZXMKICAgICBpZiAobV9vZmZzZXQgPD0gMCAmJiAo
bV9hbmNob3JUeXBlICE9IFBvc2l0aW9uSXNBZnRlckFuY2hvciAmJiBtX2FuY2hvclR5cGUgIT0g
UG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW4pKSB7Ci0gICAgICAgIGlmIChmaW5kUGFyZW50KCptX2Fu
Y2hvck5vZGUpICYmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobV9hbmNob3JOb2RlLmdldCgpKSB8
fCBpc1JlbmRlcmVkVGFibGUobV9hbmNob3JOb2RlLmdldCgpKSkpCisgICAgICAgIGlmIChmaW5k
UGFyZW50KCptX2FuY2hvck5vZGUpICYmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKm1fYW5jaG9y
Tm9kZSkgfHwgaXNSZW5kZXJlZFRhYmxlKG1fYW5jaG9yTm9kZS5nZXQoKSkpKQogICAgICAgICAg
ICAgcmV0dXJuIHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKG1fYW5jaG9yTm9kZS5nZXQoKSk7
CiAgICAgICAgIHJldHVybiBQb3NpdGlvbihtX2FuY2hvck5vZGUuZ2V0KCksIDAsIFBvc2l0aW9u
SXNPZmZzZXRJbkFuY2hvcik7CiAgICAgfQogCiAgICAgaWYgKCFtX2FuY2hvck5vZGUtPm9mZnNl
dEluQ2hhcmFjdGVycygpCiAgICAgICAgICYmIChtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0Fm
dGVyQW5jaG9yIHx8IG1fYW5jaG9yVHlwZSA9PSBQb3NpdGlvbklzQWZ0ZXJDaGlsZHJlbiB8fCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vZmZzZXQpID09IG1fYW5jaG9yTm9kZS0+Y291bnRDaGls
ZE5vZGVzKCkpCi0gICAgICAgICYmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobV9hbmNob3JOb2Rl
LmdldCgpKSB8fCBpc1JlbmRlcmVkVGFibGUobV9hbmNob3JOb2RlLmdldCgpKSkKKyAgICAgICAg
JiYgKGVkaXRpbmdJZ25vcmVzQ29udGVudCgqbV9hbmNob3JOb2RlKSB8fCBpc1JlbmRlcmVkVGFi
bGUobV9hbmNob3JOb2RlLmdldCgpKSkKICAgICAgICAgJiYgY29udGFpbmVyTm9kZSgpKSB7CiAg
ICAgICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKG1fYW5jaG9yTm9kZS5nZXQo
KSk7CiAgICAgfQogCi0gICAgcmV0dXJuIFBvc2l0aW9uKGNvbnRhaW5lck5vZGUoKSwgY29tcHV0
ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAg
IHJldHVybiB7IGNvbnRhaW5lck5vZGUoKSwgY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgp
LCBQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgfTsKIH0KIAogTm9kZSogUG9zaXRpb246OmNvbXB1
dGVOb2RlQmVmb3JlUG9zaXRpb24oKSBjb25zdAogewogICAgIGlmICghbV9hbmNob3JOb2RlKQot
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBzd2l0Y2gg
KGFuY2hvclR5cGUoKSkgewogICAgIGNhc2UgUG9zaXRpb25Jc0JlZm9yZUNoaWxkcmVuOgotICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgY2FzZSBQb3NpdGlv
bklzQWZ0ZXJDaGlsZHJlbjoKICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+bGFzdENoaWxk
KCk7CiAgICAgY2FzZSBQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3I6CkBAIC0yNTksMTkgKzI2Mywx
OSBAQCBOb2RlKiBQb3NpdGlvbjo6Y29tcHV0ZU5vZGVCZWZvcmVQb3NpdGlvbigpIGNvbnN0CiAg
ICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUuZ2V0KCk7CiAgICAgfQogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBOb2Rl
KiBQb3NpdGlvbjo6Y29tcHV0ZU5vZGVBZnRlclBvc2l0aW9uKCkgY29uc3QKIHsKICAgICBpZiAo
IW1fYW5jaG9yTm9kZSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgc3dpdGNoIChhbmNob3JUeXBlKCkpIHsKICAgICBjYXNlIFBvc2l0aW9uSXNCZWZv
cmVDaGlsZHJlbjoKICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+Zmlyc3RDaGlsZCgpOwog
ICAgIGNhc2UgUG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW46Ci0gICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBjYXNlIFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjoK
ICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+dHJhdmVyc2VUb0NoaWxkQXQobV9vZmZzZXQp
OwogICAgIGNhc2UgUG9zaXRpb25Jc0JlZm9yZUFuY2hvcjoKQEAgLTI4MCwxMiArMjg0LDEyIEBA
IE5vZGUqIFBvc2l0aW9uOjpjb21wdXRlTm9kZUFmdGVyUG9zaXRpb24oKSBjb25zdAogICAgICAg
ICByZXR1cm4gbV9hbmNob3JOb2RlLT5uZXh0U2libGluZygpOwogICAgIH0KICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAog
UG9zaXRpb246OkFuY2hvclR5cGUgUG9zaXRpb246OmFuY2hvclR5cGVGb3JMZWdhY3lFZGl0aW5n
UG9zaXRpb24oTm9kZSogYW5jaG9yTm9kZSwgaW50IG9mZnNldCkKIHsKLSAgICBpZiAoYW5jaG9y
Tm9kZSAmJiBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoYW5jaG9yTm9kZSkpIHsKKyAgICBpZiAoYW5j
aG9yTm9kZSAmJiBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKmFuY2hvck5vZGUpKSB7CiAgICAgICAg
IGlmIChvZmZzZXQgPT0gMCkKICAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbjo6UG9zaXRpb25J
c0JlZm9yZUFuY2hvcjsKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJB
bmNob3I7CkBAIC0zNDMsMTEgKzM0NywxMSBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6cHJldmlvdXMo
UG9zaXRpb25Nb3ZlVHlwZSBtb3ZlVHlwZSkgY29uc3QKICAgICBpZiAoIXBhcmVudCkKICAgICAg
ICAgcmV0dXJuICp0aGlzOwogCi0gICAgaWYgKHBvc2l0aW9uQmVmb3JlT3JBZnRlck5vZGVJc0Nh
bmRpZGF0ZShub2RlKSkKKyAgICBpZiAocG9zaXRpb25CZWZvcmVPckFmdGVyTm9kZUlzQ2FuZGlk
YXRlKCpub2RlKSkKICAgICAgICAgcmV0dXJuIHBvc2l0aW9uQmVmb3JlTm9kZShub2RlKTsKIAog
ICAgIE5vZGUqIHByZXZpb3VzU2libGluZyA9IG5vZGUtPnByZXZpb3VzU2libGluZygpOwotICAg
IGlmIChwcmV2aW91c1NpYmxpbmcgJiYgcG9zaXRpb25CZWZvcmVPckFmdGVyTm9kZUlzQ2FuZGlk
YXRlKHByZXZpb3VzU2libGluZykpCisgICAgaWYgKHByZXZpb3VzU2libGluZyAmJiBwb3NpdGlv
bkJlZm9yZU9yQWZ0ZXJOb2RlSXNDYW5kaWRhdGUoKnByZXZpb3VzU2libGluZykpCiAgICAgICAg
IHJldHVybiBwb3NpdGlvbkFmdGVyTm9kZShwcmV2aW91c1NpYmxpbmcpOwogCiAgICAgcmV0dXJu
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihwYXJlbnQsIG5vZGUtPmNvbXB1dGVOb2RlSW5k
ZXgoKSk7CkBAIC0zOTAsMTEgKzM5NCwxMSBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bmV4dChQb3Np
dGlvbk1vdmVUeXBlIG1vdmVUeXBlKSBjb25zdAogICAgIGlmICghcGFyZW50KQogICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAKLSAgICBpZiAoaXNSZW5kZXJlZFRhYmxlKG5vZGUpIHx8IGVkaXRpbmdJ
Z25vcmVzQ29udGVudChub2RlKSkKKyAgICBpZiAoaXNSZW5kZXJlZFRhYmxlKG5vZGUpIHx8IGVk
aXRpbmdJZ25vcmVzQ29udGVudCgqbm9kZSkpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbkFmdGVy
Tm9kZShub2RlKTsKIAogICAgIE5vZGUqIG5leHRTaWJsaW5nID0gbm9kZS0+bmV4dFNpYmxpbmco
KTsKLSAgICBpZiAobmV4dFNpYmxpbmcgJiYgcG9zaXRpb25CZWZvcmVPckFmdGVyTm9kZUlzQ2Fu
ZGlkYXRlKG5leHRTaWJsaW5nKSkKKyAgICBpZiAobmV4dFNpYmxpbmcgJiYgcG9zaXRpb25CZWZv
cmVPckFmdGVyTm9kZUlzQ2FuZGlkYXRlKCpuZXh0U2libGluZykpCiAgICAgICAgIHJldHVybiBw
b3NpdGlvbkJlZm9yZU5vZGUobmV4dFNpYmxpbmcpOwogCiAgICAgcmV0dXJuIGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihwYXJlbnQsIG5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSArIDEpOwpA
QCAtNDY4LDExICs0NzIsMTEgQEAgYm9vbCBQb3NpdGlvbjo6YXRFZGl0aW5nQm91bmRhcnkoKSBj
b25zdAogTm9kZSogUG9zaXRpb246OnBhcmVudEVkaXRpbmdCb3VuZGFyeSgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2FuY2hvck5vZGUpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIE5vZGUqIGRvY3VtZW50RWxlbWVudCA9IG1fYW5jaG9yTm9kZS0+ZG9j
dW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgTm9kZSogYm91
bmRhcnkgPSBtX2FuY2hvck5vZGUuZ2V0KCk7CiAgICAgd2hpbGUgKGJvdW5kYXJ5ICE9IGRvY3Vt
ZW50RWxlbWVudCAmJiBib3VuZGFyeS0+bm9uU2hhZG93Qm91bmRhcnlQYXJlbnROb2RlKCkgJiYg
bV9hbmNob3JOb2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkgPT0gYm91bmRhcnktPnBhcmVudE5vZGUo
KS0+aGFzRWRpdGFibGVTdHlsZSgpKQpAQCAtNTM2LDI1ICs1NDAsMjUgQEAgYm9vbCBQb3NpdGlv
bjo6YXRFbmRPZlRyZWUoKSBjb25zdAogUG9zaXRpb24gUG9zaXRpb246OnByZXZpb3VzQ2hhcmFj
dGVyUG9zaXRpb24oRUFmZmluaXR5IGFmZmluaXR5KSBjb25zdAogewogICAgIGlmIChpc051bGwo
KSkKLSAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CisgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICBOb2RlKiBmcm9tUm9vdEVkaXRhYmxlRWxlbWVudCA9IGRlcHJlY2F0ZWROb2RlKCktPnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKTsKIAogICAgIGJvb2wgYXRTdGFydE9mTGluZSA9IGlzU3RhcnRPZkxp
bmUoVmlzaWJsZVBvc2l0aW9uKCp0aGlzLCBhZmZpbml0eSkpOwogICAgIGJvb2wgcmVuZGVyZWQg
PSBpc0NhbmRpZGF0ZSgpOwogICAgIAotICAgIFBvc2l0aW9uIGN1cnJlbnRQb3MgPSAqdGhpczsK
LSAgICB3aGlsZSAoIWN1cnJlbnRQb3MuYXRTdGFydE9mVHJlZSgpKSB7Ci0gICAgICAgIGN1cnJl
bnRQb3MgPSBjdXJyZW50UG9zLnByZXZpb3VzKCk7CisgICAgUG9zaXRpb24gY3VycmVudFBvc2l0
aW9uID0gKnRoaXM7CisgICAgd2hpbGUgKCFjdXJyZW50UG9zaXRpb24uYXRTdGFydE9mVHJlZSgp
KSB7CisgICAgICAgIGN1cnJlbnRQb3NpdGlvbiA9IGN1cnJlbnRQb3NpdGlvbi5wcmV2aW91cygp
OwogCi0gICAgICAgIGlmIChjdXJyZW50UG9zLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKSAhPSBmcm9tUm9vdEVkaXRhYmxlRWxlbWVudCkKKyAgICAgICAgaWYgKGN1cnJl
bnRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gZnJv
bVJvb3RFZGl0YWJsZUVsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAgICAg
ICAgaWYgKGF0U3RhcnRPZkxpbmUgfHwgIXJlbmRlcmVkKSB7Ci0gICAgICAgICAgICBpZiAoY3Vy
cmVudFBvcy5pc0NhbmRpZGF0ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UG9z
OwotICAgICAgICB9IGVsc2UgaWYgKHJlbmRlcnNJbkRpZmZlcmVudFBvc2l0aW9uKGN1cnJlbnRQ
b3MpKQotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3M7CisgICAgICAgICAgICBpZiAoY3Vy
cmVudFBvc2l0aW9uLmlzQ2FuZGlkYXRlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJl
bnRQb3NpdGlvbjsKKyAgICAgICAgfSBlbHNlIGlmIChyZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlv
bihjdXJyZW50UG9zaXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsK
ICAgICB9CiAgICAgCiAgICAgcmV0dXJuICp0aGlzOwpAQCAtNTY0LDI1ICs1NjgsMjUgQEAgUG9z
aXRpb24gUG9zaXRpb246OnByZXZpb3VzQ2hhcmFjdGVyUG9zaXRpb24oRUFmZmluaXR5IGFmZmlu
aXR5KSBjb25zdAogUG9zaXRpb24gUG9zaXRpb246Om5leHRDaGFyYWN0ZXJQb3NpdGlvbihFQWZm
aW5pdHkgYWZmaW5pdHkpIGNvbnN0CiB7CiAgICAgaWYgKGlzTnVsbCgpKQotICAgICAgICByZXR1
cm4gUG9zaXRpb24oKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIE5vZGUqIGZyb21Sb290
RWRpdGFibGVFbGVtZW50ID0gZGVwcmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
OwogCi0gICAgYm9vbCBhdEVuZE9mTGluZSA9IGlzRW5kT2ZMaW5lKFZpc2libGVQb3NpdGlvbigq
dGhpcywgYWZmaW5pdHkpKTsKKyAgICBib29sIGF0RW5kT2ZMaW5lID0gaXNFbmRPZkxpbmUoeyAq
dGhpcywgYWZmaW5pdHkgfSk7CiAgICAgYm9vbCByZW5kZXJlZCA9IGlzQ2FuZGlkYXRlKCk7CiAg
ICAgCi0gICAgUG9zaXRpb24gY3VycmVudFBvcyA9ICp0aGlzOwotICAgIHdoaWxlICghY3VycmVu
dFBvcy5hdEVuZE9mVHJlZSgpKSB7Ci0gICAgICAgIGN1cnJlbnRQb3MgPSBjdXJyZW50UG9zLm5l
eHQoKTsKKyAgICBQb3NpdGlvbiBjdXJyZW50UG9zaXRpb24gPSAqdGhpczsKKyAgICB3aGlsZSAo
IWN1cnJlbnRQb3NpdGlvbi5hdEVuZE9mVHJlZSgpKSB7CisgICAgICAgIGN1cnJlbnRQb3NpdGlv
biA9IGN1cnJlbnRQb3NpdGlvbi5uZXh0KCk7CiAKLSAgICAgICAgaWYgKGN1cnJlbnRQb3MuZGVw
cmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IGZyb21Sb290RWRpdGFibGVF
bGVtZW50KQorICAgICAgICBpZiAoY3VycmVudFBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPnJv
b3RFZGl0YWJsZUVsZW1lbnQoKSAhPSBmcm9tUm9vdEVkaXRhYmxlRWxlbWVudCkKICAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKIAogICAgICAgICBpZiAoYXRFbmRPZkxpbmUgfHwgIXJlbmRlcmVk
KSB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudFBvcy5pc0NhbmRpZGF0ZSgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBjdXJyZW50UG9zOwotICAgICAgICB9IGVsc2UgaWYgKHJlbmRlcnNJbkRp
ZmZlcmVudFBvc2l0aW9uKGN1cnJlbnRQb3MpKQotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQ
b3M7CisgICAgICAgICAgICBpZiAoY3VycmVudFBvc2l0aW9uLmlzQ2FuZGlkYXRlKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsKKyAgICAgICAgfSBlbHNlIGlmIChy
ZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlvbihjdXJyZW50UG9zaXRpb24pKQorICAgICAgICAgICAg
cmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuICp0aGlzOwpA
QCAtNjA1LDcgKzYwOSw3IEBAIHN0YXRpYyBib29sIGVuZHNPZk5vZGVBcmVWaXN1YWxseURpc3Rp
bmN0UG9zaXRpb25zKE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICAvLyBUaGVyZSBpcyBhIFZpc2libGVQb3NpdGlvbiBpbnNpZGUgYW4gZW1wdHkgaW5saW5lLWJs
b2NrIGNvbnRhaW5lci4KLSAgICByZXR1cm4gbm9kZS0+cmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgp
ICYmIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcobm9kZSkgJiYgZG93bmNhc3Q8UmVuZGVyQm94
Pigqbm9kZS0+cmVuZGVyZXIoKSkuaGVpZ2h0KCkgJiYgIW5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAg
ICByZXR1cm4gbm9kZS0+cmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgpICYmIGNhbkhhdmVDaGlsZHJl
bkZvckVkaXRpbmcoKm5vZGUpICYmIGRvd25jYXN0PFJlbmRlckJveD4oKm5vZGUtPnJlbmRlcmVy
KCkpLmhlaWdodCgpICYmICFub2RlLT5maXJzdENoaWxkKCk7CiB9CiAKIHN0YXRpYyBOb2RlKiBl
bmNsb3NpbmdWaXN1YWxCb3VuZGFyeShOb2RlKiBub2RlKQpAQCAtNjM5LDYwICs2NDMsNjAgQEAg
UG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBy
dWxlKSBjb25zdAogewogICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IGRlcHJlY2F0ZWROb2RlKCk7CiAg
ICAgaWYgKCFzdGFydE5vZGUpCi0gICAgICAgIHJldHVybiBQb3NpdGlvbigpOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIAogICAgIC8vIGl0ZXJhdGUgYmFja3dhcmQgZnJvbSB0aGVyZSwgbG9v
a2luZyBmb3IgYSBxdWFsaWZpZWQgcG9zaXRpb24KICAgICBOb2RlKiBib3VuZGFyeSA9IGVuY2xv
c2luZ1Zpc3VhbEJvdW5kYXJ5KHN0YXJ0Tm9kZSk7CiAgICAgLy8gRklYTUU6IFBvc2l0aW9uSXRl
cmF0b3Igc2hvdWxkIHJlc3BlY3QgQmVmb3JlIGFuZCBBZnRlciBwb3NpdGlvbnMuCiAgICAgUG9z
aXRpb25JdGVyYXRvciBsYXN0VmlzaWJsZSA9IG1fYW5jaG9yVHlwZSA9PSBQb3NpdGlvbklzQWZ0
ZXJBbmNob3IgPyBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9hbmNob3JOb2RlLmdldCgp
LCBjYXJldE1heE9mZnNldCgqbV9hbmNob3JOb2RlKSkgOiAqdGhpczsKLSAgICBQb3NpdGlvbkl0
ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0VmlzaWJsZTsKKyAgICBQb3NpdGlvbkl0ZXJhdG9yIGN1
cnJlbnRQb3NpdGlvbiA9IGxhc3RWaXNpYmxlOwogICAgIGJvb2wgc3RhcnRFZGl0YWJsZSA9IHN0
YXJ0Tm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpOwogICAgIE5vZGUqIGxhc3ROb2RlID0gc3RhcnRO
b2RlOwogICAgIGJvb2wgYm91bmRhcnlDcm9zc2VkID0gZmFsc2U7Ci0gICAgZm9yICg7ICFjdXJy
ZW50UG9zLmF0U3RhcnQoKTsgY3VycmVudFBvcy5kZWNyZW1lbnQoKSkgewotICAgICAgICBOb2Rl
KiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRQb3Mubm9kZSgpOworICAgIGZvciAoOyAhY3VycmVudFBv
c2l0aW9uLmF0U3RhcnQoKTsgY3VycmVudFBvc2l0aW9uLmRlY3JlbWVudCgpKSB7CisgICAgICAg
IGF1dG8mIGN1cnJlbnROb2RlID0gKmN1cnJlbnRQb3NpdGlvbi5ub2RlKCk7CiAgICAgICAgIAog
ICAgICAgICAvLyBEb24ndCBjaGVjayBmb3IgYW4gZWRpdGFiaWxpdHkgY2hhbmdlIGlmIHdlIGhh
dmVuJ3QgbW92ZWQgdG8gYSBkaWZmZXJlbnQgbm9kZSwKICAgICAgICAgLy8gdG8gYXZvaWQgdGhl
IGV4cGVuc2Ugb2YgY29tcHV0aW5nIGhhc0VkaXRhYmxlU3R5bGUoKS4KLSAgICAgICAgaWYgKGN1
cnJlbnROb2RlICE9IGxhc3ROb2RlKSB7CisgICAgICAgIGlmICgmY3VycmVudE5vZGUgIT0gbGFz
dE5vZGUpIHsKICAgICAgICAgICAgIC8vIERvbid0IGNoYW5nZSBlZGl0YWJpbGl0eS4KLSAgICAg
ICAgICAgIGJvb2wgY3VycmVudEVkaXRhYmxlID0gY3VycmVudE5vZGUtPmhhc0VkaXRhYmxlU3R5
bGUoKTsKKyAgICAgICAgICAgIGJvb2wgY3VycmVudEVkaXRhYmxlID0gY3VycmVudE5vZGUuaGFz
RWRpdGFibGVTdHlsZSgpOwogICAgICAgICAgICAgaWYgKHN0YXJ0RWRpdGFibGUgIT0gY3VycmVu
dEVkaXRhYmxlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHJ1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0
aW5nQm91bmRhcnkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IGJvdW5kYXJ5Q3Jvc3NlZCA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsYXN0
Tm9kZSA9IGN1cnJlbnROb2RlOworICAgICAgICAgICAgbGFzdE5vZGUgPSAmY3VycmVudE5vZGU7
CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiB3ZSd2ZSBtb3ZlZCB0byBhIHBvc2l0aW9uIHRo
YXQgaXMgdmlzdWFsbHkgZGlzdGluY3QsIHJldHVybiB0aGUgbGFzdCBzYXZlZCBwb3NpdGlvbi4g
VGhlcmUgCiAgICAgICAgIC8vIGlzIGNvZGUgYmVsb3cgdGhhdCB0ZXJtaW5hdGVzIGVhcmx5IGlm
IHdlJ3JlICphYm91dCogdG8gbW92ZSB0byBhIHZpc3VhbGx5IGRpc3RpbmN0IHBvc2l0aW9uLgot
ICAgICAgICBpZiAoZW5kc09mTm9kZUFyZVZpc3VhbGx5RGlzdGluY3RQb3NpdGlvbnMoY3VycmVu
dE5vZGUpICYmIGN1cnJlbnROb2RlICE9IGJvdW5kYXJ5KQorICAgICAgICBpZiAoZW5kc09mTm9k
ZUFyZVZpc3VhbGx5RGlzdGluY3RQb3NpdGlvbnMoJmN1cnJlbnROb2RlKSAmJiAmY3VycmVudE5v
ZGUgIT0gYm91bmRhcnkpCiAgICAgICAgICAgICByZXR1cm4gbGFzdFZpc2libGU7CiAKICAgICAg
ICAgLy8gc2tpcCBwb3NpdGlvbiBpbiB1bnJlbmRlcmVkIG9yIGludmlzaWJsZSBub2RlCi0gICAg
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjdXJyZW50Tm9kZS0+cmVuZGVyZXIoKTsKKyAg
ICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGN1cnJlbnROb2RlLnJlbmRlcmVyKCk7CiAg
ICAgICAgIGlmICghcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxlKCkudmlzaWJpbGl0eSgpICE9
IFZJU0lCTEUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgIGlmIChydWxlID09IENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5ICYmIGJvdW5kYXJ5Q3Jvc3Nl
ZCkgewotICAgICAgICAgICAgbGFzdFZpc2libGUgPSBjdXJyZW50UG9zOworICAgICAgICAgICAg
bGFzdFZpc2libGUgPSBjdXJyZW50UG9zaXRpb247CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgLy8gdHJhY2sgbGFzdCB2aXNpYmxlIHN0cmVhbWVyIHBv
c2l0aW9uCi0gICAgICAgIGlmIChpc1N0cmVhbWVyKGN1cnJlbnRQb3MpKQotICAgICAgICAgICAg
bGFzdFZpc2libGUgPSBjdXJyZW50UG9zOworICAgICAgICBpZiAoaXNTdHJlYW1lcihjdXJyZW50
UG9zaXRpb24pKQorICAgICAgICAgICAgbGFzdFZpc2libGUgPSBjdXJyZW50UG9zaXRpb247CiAg
ICAgICAgIAogICAgICAgICAvLyBEb24ndCBtb3ZlIHBhc3QgYSBwb3NpdGlvbiB0aGF0IGlzIHZp
c3VhbGx5IGRpc3RpbmN0LiAgV2UgY291bGQgcmVseSBvbiBjb2RlIGFib3ZlIHRvIHRlcm1pbmF0
ZSBhbmQgCiAgICAgICAgIC8vIHJldHVybiBsYXN0VmlzaWJsZSBvbiB0aGUgbmV4dCBpdGVyYXRp
b24sIGJ1dCB3ZSB0ZXJtaW5hdGUgZWFybHkgdG8gYXZvaWQgZG9pbmcgYSBjb21wdXRlTm9kZUlu
ZGV4KCkgY2FsbC4KLSAgICAgICAgaWYgKGVuZHNPZk5vZGVBcmVWaXN1YWxseURpc3RpbmN0UG9z
aXRpb25zKGN1cnJlbnROb2RlKSAmJiBjdXJyZW50UG9zLmF0U3RhcnRPZk5vZGUoKSkKKyAgICAg
ICAgaWYgKGVuZHNPZk5vZGVBcmVWaXN1YWxseURpc3RpbmN0UG9zaXRpb25zKCZjdXJyZW50Tm9k
ZSkgJiYgY3VycmVudFBvc2l0aW9uLmF0U3RhcnRPZk5vZGUoKSkKICAgICAgICAgICAgIHJldHVy
biBsYXN0VmlzaWJsZTsKIAogICAgICAgICAvLyBSZXR1cm4gcG9zaXRpb24gYWZ0ZXIgdGFibGVz
IGFuZCBub2RlcyB3aGljaCBoYXZlIGNvbnRlbnQgdGhhdCBjYW4gYmUgaWdub3JlZC4KLSAgICAg
ICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChjdXJyZW50Tm9kZSkgfHwgaXNSZW5kZXJlZFRh
YmxlKGN1cnJlbnROb2RlKSkgewotICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3MuYXRFbmRPZk5v
ZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25BZnRlck5vZGUoY3VycmVudE5v
ZGUpOworICAgICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KGN1cnJlbnROb2RlKSB8fCBp
c1JlbmRlcmVkVGFibGUoJmN1cnJlbnROb2RlKSkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRQ
b3NpdGlvbi5hdEVuZE9mTm9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbkFm
dGVyTm9kZSgmY3VycmVudE5vZGUpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
IApAQCAtNzAzLDIxICs3MDcsMjEgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKEVkaXRp
bmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlKSBjb25zdAogCiAgICAgICAgICAgICBpZiAoIXRl
eHRSZW5kZXJlci5maXJzdFRleHRCb3goKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIGlmIChjdXJyZW50Tm9kZSAhPSBzdGFydE5vZGUpIHsKKyAgICAgICAgICAgIGlm
ICgmY3VycmVudE5vZGUgIT0gc3RhcnROb2RlKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBh
c3NlcnRpb24gZmlyZXMgaW4gbGF5b3V0IHRlc3RzIGluIHRoZSBjYXNlLXRyYW5zZm9ybS5odG1s
IHRlc3QgYmVjYXVzZQogICAgICAgICAgICAgICAgIC8vIG9mIGEgbWl4LXVwIGJldHdlZW4gb2Zm
c2V0cyBpbiB0aGUgdGV4dCBpbiB0aGUgRE9NIHRyZWUgd2l0aCB0ZXh0IGluIHRoZQogICAgICAg
ICAgICAgICAgIC8vIHJlbmRlciB0cmVlIHdoaWNoIGNhbiBoYXZlIGEgZGlmZmVyZW50IGxlbmd0
aCBkdWUgdG8gY2FzZSB0cmFuc2Zvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAvLyBVbnRpbCB3
ZSByZXNvbHZlIHRoYXQsIGRpc2FibGUgdGhpcyBzbyB3ZSBjYW4gcnVuIHRoZSBsYXlvdXQgdGVz
dHMhCiAgICAgICAgICAgICAgICAgLy9BU1NFUlQoY3VycmVudE9mZnNldCA+PSByZW5kZXJlci0+
Y2FyZXRNYXhPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVk
aXRpbmdQb3NpdGlvbihjdXJyZW50Tm9kZSwgcmVuZGVyZXItPmNhcmV0TWF4T2Zmc2V0KCkpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oJmN1cnJl
bnROb2RlLCByZW5kZXJlci0+Y2FyZXRNYXhPZmZzZXQoKSk7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHRleHRPZmZzZXQgPSBjdXJyZW50UG9zLm9mZnNldEluTGVhZk5v
ZGUoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRleHRPZmZzZXQgPSBjdXJyZW50UG9zaXRpb24u
b2Zmc2V0SW5MZWFmTm9kZSgpOwogICAgICAgICAgICAgYXV0byBsYXN0VGV4dEJveCA9IHRleHRS
ZW5kZXJlci5sYXN0VGV4dEJveCgpOwogICAgICAgICAgICAgZm9yIChhdXRvKiBib3ggPSB0ZXh0
UmVuZGVyZXIuZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKHRleHRPZmZzZXQgPD0gYm94LT5zdGFydCgpICsgYm94LT5s
ZW4oKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAodGV4dE9mZnNldCA+IGJveC0+c3RhcnQo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UG9zOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogCkBAIC03NDcsNyArNzUxLDcgQEAgUG9z
aXRpb24gUG9zaXRpb246OnVwc3RyZWFtKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxl
KSBjb25zdAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChjb250aW51
ZXNPbk5leHRMaW5lKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFBvczsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KQEAgLTc2Niw2NSArNzcwLDY1IEBAIFBvc2l0aW9uIFBvc2l0aW9u
Ojpkb3duc3RyZWFtKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlKSBjb25zdAogewog
ICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IGRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFzdGFydE5v
ZGUpCi0gICAgICAgIHJldHVybiBQb3NpdGlvbigpOworICAgICAgICByZXR1cm4geyB9OwogCiAg
ICAgLy8gaXRlcmF0ZSBmb3J3YXJkIGZyb20gdGhlcmUsIGxvb2tpbmcgZm9yIGEgcXVhbGlmaWVk
IHBvc2l0aW9uCiAgICAgTm9kZSogYm91bmRhcnkgPSBlbmNsb3NpbmdWaXN1YWxCb3VuZGFyeShz
dGFydE5vZGUpOwogICAgIC8vIEZJWE1FOiBQb3NpdGlvbkl0ZXJhdG9yIHNob3VsZCByZXNwZWN0
IEJlZm9yZSBhbmQgQWZ0ZXIgcG9zaXRpb25zLgogICAgIFBvc2l0aW9uSXRlcmF0b3IgbGFzdFZp
c2libGUgPSBtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0FmdGVyQW5jaG9yID8gY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKG1fYW5jaG9yTm9kZS5nZXQoKSwgY2FyZXRNYXhPZmZzZXQoKm1f
YW5jaG9yTm9kZSkpIDogKnRoaXM7Ci0gICAgUG9zaXRpb25JdGVyYXRvciBjdXJyZW50UG9zID0g
bGFzdFZpc2libGU7CisgICAgUG9zaXRpb25JdGVyYXRvciBjdXJyZW50UG9zaXRpb24gPSBsYXN0
VmlzaWJsZTsKICAgICBib29sIHN0YXJ0RWRpdGFibGUgPSBzdGFydE5vZGUtPmhhc0VkaXRhYmxl
U3R5bGUoKTsKICAgICBOb2RlKiBsYXN0Tm9kZSA9IHN0YXJ0Tm9kZTsKICAgICBib29sIGJvdW5k
YXJ5Q3Jvc3NlZCA9IGZhbHNlOwotICAgIGZvciAoOyAhY3VycmVudFBvcy5hdEVuZCgpOyBjdXJy
ZW50UG9zLmluY3JlbWVudCgpKSB7ICAgCi0gICAgICAgIE5vZGUqIGN1cnJlbnROb2RlID0gY3Vy
cmVudFBvcy5ub2RlKCk7CisgICAgZm9yICg7ICFjdXJyZW50UG9zaXRpb24uYXRFbmQoKTsgY3Vy
cmVudFBvc2l0aW9uLmluY3JlbWVudCgpKSB7CisgICAgICAgIGF1dG8mIGN1cnJlbnROb2RlID0g
KmN1cnJlbnRQb3NpdGlvbi5ub2RlKCk7CiAgICAgICAgIAogICAgICAgICAvLyBEb24ndCBjaGVj
ayBmb3IgYW4gZWRpdGFiaWxpdHkgY2hhbmdlIGlmIHdlIGhhdmVuJ3QgbW92ZWQgdG8gYSBkaWZm
ZXJlbnQgbm9kZSwKICAgICAgICAgLy8gdG8gYXZvaWQgdGhlIGV4cGVuc2Ugb2YgY29tcHV0aW5n
IGhhc0VkaXRhYmxlU3R5bGUoKS4KLSAgICAgICAgaWYgKGN1cnJlbnROb2RlICE9IGxhc3ROb2Rl
KSB7CisgICAgICAgIGlmICgmY3VycmVudE5vZGUgIT0gbGFzdE5vZGUpIHsKICAgICAgICAgICAg
IC8vIERvbid0IGNoYW5nZSBlZGl0YWJpbGl0eS4KLSAgICAgICAgICAgIGJvb2wgY3VycmVudEVk
aXRhYmxlID0gY3VycmVudE5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKTsKKyAgICAgICAgICAgIGJv
b2wgY3VycmVudEVkaXRhYmxlID0gY3VycmVudE5vZGUuaGFzRWRpdGFibGVTdHlsZSgpOwogICAg
ICAgICAgICAgaWYgKHN0YXJ0RWRpdGFibGUgIT0gY3VycmVudEVkaXRhYmxlKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKHJ1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGJvdW5kYXJ5Q3Jvc3NlZCA9IHRy
dWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBsYXN0Tm9k
ZSA9IGN1cnJlbnROb2RlOworICAgICAgICAgICAgbGFzdE5vZGUgPSAmY3VycmVudE5vZGU7CiAg
ICAgICAgIH0KIAogICAgICAgICAvLyBzdG9wIGJlZm9yZSBnb2luZyBhYm92ZSB0aGUgYm9keSwg
dXAgaW50byB0aGUgaGVhZAogICAgICAgICAvLyByZXR1cm4gdGhlIGxhc3QgdmlzaWJsZSBzdHJl
YW1lciBwb3NpdGlvbgotICAgICAgICBpZiAoY3VycmVudE5vZGUtPmhhc1RhZ05hbWUoYm9keVRh
ZykgJiYgY3VycmVudFBvcy5hdEVuZE9mTm9kZSgpKQorICAgICAgICBpZiAoaXM8SFRNTEJvZHlF
bGVtZW50PihjdXJyZW50Tm9kZSkgJiYgY3VycmVudFBvc2l0aW9uLmF0RW5kT2ZOb2RlKCkpCiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAorCiAgICAgICAgIC8vIERvIG5vdCBtb3Zl
IHRvIGEgdmlzdWFsbHkgZGlzdGluY3QgcG9zaXRpb24uCi0gICAgICAgIGlmIChlbmRzT2ZOb2Rl
QXJlVmlzdWFsbHlEaXN0aW5jdFBvc2l0aW9ucyhjdXJyZW50Tm9kZSkgJiYgY3VycmVudE5vZGUg
IT0gYm91bmRhcnkpCisgICAgICAgIGlmIChlbmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0aW5jdFBv
c2l0aW9ucygmY3VycmVudE5vZGUpICYmICZjdXJyZW50Tm9kZSAhPSBib3VuZGFyeSkKICAgICAg
ICAgICAgIHJldHVybiBsYXN0VmlzaWJsZTsKICAgICAgICAgLy8gRG8gbm90IG1vdmUgcGFzdCBh
IHZpc3VhbGx5IGRpc2luY3QgcG9zaXRpb24uCiAgICAgICAgIC8vIE5vdGU6IFRoZSBmaXJzdCBw
b3NpdGlvbiBhZnRlciB0aGUgbGFzdCBpbiBhIG5vZGUgd2hvc2UgZW5kcyBhcmUgdmlzdWFsbHkg
ZGlzdGluY3QKICAgICAgICAgLy8gcG9zaXRpb25zIHdpbGwgYmUgW2JvdW5kYXJ5LT5wYXJlbnRO
b2RlKCksIG9yaWdpbmFsQmxvY2stPmNvbXB1dGVOb2RlSW5kZXgoKSArIDFdLgotICAgICAgICBp
ZiAoYm91bmRhcnkgJiYgYm91bmRhcnktPnBhcmVudE5vZGUoKSA9PSBjdXJyZW50Tm9kZSkKKyAg
ICAgICAgaWYgKGJvdW5kYXJ5ICYmIGJvdW5kYXJ5LT5wYXJlbnROb2RlKCkgPT0gJmN1cnJlbnRO
b2RlKQogICAgICAgICAgICAgcmV0dXJuIGxhc3RWaXNpYmxlOwogCiAgICAgICAgIC8vIHNraXAg
cG9zaXRpb24gaW4gdW5yZW5kZXJlZCBvciBpbnZpc2libGUgbm9kZQotICAgICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gY3VycmVudE5vZGUtPnJlbmRlcmVyKCk7CisgICAgICAgIGF1dG8q
IHJlbmRlcmVyID0gY3VycmVudE5vZGUucmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFyZW5kZXJl
ciB8fCByZW5kZXJlci0+c3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAgIGlmIChydWxlID09IENhbkNyb3Nz
RWRpdGluZ0JvdW5kYXJ5ICYmIGJvdW5kYXJ5Q3Jvc3NlZCkgewotICAgICAgICAgICAgbGFzdFZp
c2libGUgPSBjdXJyZW50UG9zOworICAgICAgICAgICAgbGFzdFZpc2libGUgPSBjdXJyZW50UG9z
aXRpb247CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Ly8gdHJhY2sgbGFzdCB2aXNpYmxlIHN0cmVhbWVyIHBvc2l0aW9uCi0gICAgICAgIGlmIChpc1N0
cmVhbWVyKGN1cnJlbnRQb3MpKQotICAgICAgICAgICAgbGFzdFZpc2libGUgPSBjdXJyZW50UG9z
OworICAgICAgICBpZiAoaXNTdHJlYW1lcihjdXJyZW50UG9zaXRpb24pKQorICAgICAgICAgICAg
bGFzdFZpc2libGUgPSBjdXJyZW50UG9zaXRpb247CiAKICAgICAgICAgLy8gUmV0dXJuIHBvc2l0
aW9uIGJlZm9yZSB0YWJsZXMgYW5kIG5vZGVzIHdoaWNoIGhhdmUgY29udGVudCB0aGF0IGNhbiBi
ZSBpZ25vcmVkLgotICAgICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KGN1cnJlbnROb2Rl
KSB8fCBpc1JlbmRlcmVkVGFibGUoY3VycmVudE5vZGUpKSB7Ci0gICAgICAgICAgICBpZiAoY3Vy
cmVudFBvcy5hdFN0YXJ0T2ZOb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9u
QmVmb3JlTm9kZShjdXJyZW50Tm9kZSk7CisgICAgICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRl
bnQoY3VycmVudE5vZGUpIHx8IGlzUmVuZGVyZWRUYWJsZSgmY3VycmVudE5vZGUpKSB7CisgICAg
ICAgICAgICBpZiAoY3VycmVudFBvc2l0aW9uLmF0U3RhcnRPZk5vZGUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcG9zaXRpb25CZWZvcmVOb2RlKCZjdXJyZW50Tm9kZSk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC04MzUsMTcgKzgzOSwxNyBAQCBQb3NpdGlvbiBQ
b3NpdGlvbjo6ZG93bnN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkgY29u
c3QKIAogICAgICAgICAgICAgaWYgKCF0ZXh0UmVuZGVyZXIuZmlyc3RUZXh0Qm94KCkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoY3VycmVudE5vZGUgIT0gc3Rh
cnROb2RlKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRQb3MuYXRTdGFydE9mTm9k
ZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KGN1cnJlbnROb2RlLCByZW5kZXJlci0+Y2FyZXRNaW5PZmZzZXQoKSk7CisgICAgICAgICAgICBp
ZiAoJmN1cnJlbnROb2RlICE9IHN0YXJ0Tm9kZSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChj
dXJyZW50UG9zaXRpb24uYXRTdGFydE9mTm9kZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKCZjdXJyZW50Tm9kZSwgcmVuZGVyZXItPmNhcmV0
TWluT2Zmc2V0KCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB1bnNpZ25lZCB0ZXh0
T2Zmc2V0ID0gY3VycmVudFBvcy5vZmZzZXRJbkxlYWZOb2RlKCk7CisgICAgICAgICAgICB1bnNp
Z25lZCB0ZXh0T2Zmc2V0ID0gY3VycmVudFBvc2l0aW9uLm9mZnNldEluTGVhZk5vZGUoKTsKICAg
ICAgICAgICAgIGF1dG8gbGFzdFRleHRCb3ggPSB0ZXh0UmVuZGVyZXIubGFzdFRleHRCb3goKTsK
ICAgICAgICAgICAgIGZvciAoYXV0byogYm94ID0gdGV4dFJlbmRlcmVyLmZpcnN0VGV4dEJveCgp
OyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewogICAgICAgICAgICAgICAgIGlmICh0
ZXh0T2Zmc2V0IDw9IGJveC0+ZW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRP
ZmZzZXQgPj0gYm94LT5zdGFydCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1
cnJlbnRQb3M7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFBvc2l0aW9u
OwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAKQEAg
LTg3NSw3ICs4NzksNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbShFZGl0aW5nQm91
bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkgY29uc3QKICAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICBpZiAoY29udGludWVzT25OZXh0TGluZSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGN1cnJlbnRQb3M7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UG9z
aXRpb247CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC05NjIsNyArOTY2LDcg
QEAgYm9vbCBQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdEFsbChjb25zdCBOb2RlKiBub2RlKQog
Tm9kZSogUG9zaXRpb246OnJvb3RVc2VyU2VsZWN0QWxsRm9yTm9kZShOb2RlKiBub2RlKQogewog
ICAgIGlmICghbm9kZSB8fCAhbm9kZUlzVXNlclNlbGVjdEFsbChub2RlKSkKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIE5vZGUqIHBhcmVudCA9IG5vZGUt
PnBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuIG5vZGU7CkBA
IC05ODcsMjcgKzk5MSwyOCBAQCBib29sIFBvc2l0aW9uOjppc0NhbmRpZGF0ZSgpIGNvbnN0CiAg
ICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICBhdXRvKiBy
ZW5kZXJlciA9IGRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJl
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpLnZp
c2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAo
cmVuZGVyZXItPmlzQlIoKSkKKyAgICBpZiAocmVuZGVyZXItPmlzQlIoKSkgewogICAgICAgICAv
LyBGSVhNRTogVGhlIGNvbmRpdGlvbiBzaG91bGQgYmUgbV9hbmNob3JUeXBlID09IFBvc2l0aW9u
SXNCZWZvcmVBbmNob3IsIGJ1dCBmb3Igbm93IHdlIHN0aWxsIG5lZWQgdG8gc3VwcG9ydCBsZWdh
Y3kgcG9zaXRpb25zLgogICAgICAgICByZXR1cm4gIW1fb2Zmc2V0ICYmIG1fYW5jaG9yVHlwZSAh
PSBQb3NpdGlvbklzQWZ0ZXJBbmNob3IgJiYgIW5vZGVJc1VzZXJTZWxlY3ROb25lKGRlcHJlY2F0
ZWROb2RlKCktPnBhcmVudE5vZGUoKSk7CisgICAgfQogCiAgICAgaWYgKGlzPFJlbmRlclRleHQ+
KCpyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiAhbm9kZUlzVXNlclNlbGVjdE5vbmUoZGVwcmVj
YXRlZE5vZGUoKSkgJiYgZG93bmNhc3Q8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKS5jb250YWluc0Nh
cmV0T2Zmc2V0KG1fb2Zmc2V0KTsKIAotICAgIGlmIChwb3NpdGlvbkJlZm9yZU9yQWZ0ZXJOb2Rl
SXNDYW5kaWRhdGUoZGVwcmVjYXRlZE5vZGUoKSkpIHsKKyAgICBpZiAocG9zaXRpb25CZWZvcmVP
ckFmdGVyTm9kZUlzQ2FuZGlkYXRlKCpkZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICByZXR1
cm4gKChhdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmIG1fYW5jaG9yVHlwZSA9PSBQ
b3NpdGlvbklzQmVmb3JlQW5jaG9yKQogICAgICAgICAgICAgfHwgKGF0TGFzdEVkaXRpbmdQb3Np
dGlvbkZvck5vZGUoKSAmJiBtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0FmdGVyQW5jaG9yKSkK
ICAgICAgICAgICAgICYmICFub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpLT5w
YXJlbnROb2RlKCkpOwogICAgIH0KIAotICAgIGlmIChtX2FuY2hvck5vZGUtPmhhc1RhZ05hbWUo
aHRtbFRhZykpCisgICAgaWYgKGlzPEhUTUxIdG1sRWxlbWVudD4oKm1fYW5jaG9yTm9kZSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpczxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5k
ZXJlcikKQEAgLTEwMTYsNyArMTAyMSw3IEBAIGJvb2wgUG9zaXRpb246OmlzQ2FuZGlkYXRlKCkg
Y29uc3QKICNlbmRpZgogICAgICAgICB8fCBpczxSZW5kZXJGbGV4aWJsZUJveD4oKnJlbmRlcmVy
KSkgewogICAgICAgICBSZW5kZXJCbG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4o
KnJlbmRlcmVyKTsKLSAgICAgICAgaWYgKGJsb2NrLmxvZ2ljYWxIZWlnaHQoKSB8fCBtX2FuY2hv
ck5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpIHsKKyAgICAgICAgaWYgKGJsb2NrLmxvZ2ljYWxI
ZWlnaHQoKSB8fCBpczxIVE1MQm9keUVsZW1lbnQ+KCptX2FuY2hvck5vZGUpKSB7CiAgICAgICAg
ICAgICBpZiAoIVBvc2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0
aEhlaWdodChibG9jaykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGF0Rmlyc3RFZGl0aW5nUG9z
aXRpb25Gb3JOb2RlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNh
dGVkTm9kZSgpKTsKICAgICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmhhc0VkaXRhYmxl
U3R5bGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKGRlcHJlY2F0ZWROb2Rl
KCkpICYmIGF0RWRpdGluZ0JvdW5kYXJ5KCk7CkBAIC0xMDQ0LDY5ICsxMDQ5LDY4IEBAIHN0YXRp
YyBib29sIGluU2FtZUVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoTm9kZSogYSwgTm9kZSogYikK
ICAgICByZXR1cm4gYSAmJiBiICYmIGRlcHJlY2F0ZWRFbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50
KGEpID09IGRlcHJlY2F0ZWRFbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KGIpOwogfQogCi1ib29s
IFBvc2l0aW9uOjpyZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiAmcG9z
KSBjb25zdAorYm9vbCBQb3NpdGlvbjo6cmVuZGVyc0luRGlmZmVyZW50UG9zaXRpb24oY29uc3Qg
UG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdAogewotICAgIGlmIChpc051bGwoKSB8fCBwb3MuaXNO
dWxsKCkpCisgICAgaWYgKGlzTnVsbCgpIHx8IHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZGVwcmVjYXRlZE5v
ZGUoKS0+cmVuZGVyZXIoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IGRlcHJlY2F0ZWROb2RlKCkt
PnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAotICAgIFJlbmRlck9iamVjdCogcG9zUmVuZGVyZXIgPSBwb3MuZGVwcmVjYXRlZE5vZGUo
KS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXBvc1JlbmRlcmVyKQorICAgIGF1dG8qIHBvc2l0aW9u
UmVuZGVyZXIgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOworICAgIGlm
ICghcG9zaXRpb25SZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHJl
bmRlcmVyLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8Ci0gICAgICAgIHBvc1Jl
bmRlcmVyLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgIGlmIChyZW5kZXJl
ci0+c3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fCBwb3NpdGlvblJlbmRlcmVyLT5z
dHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCi0gICAgaWYgKGRlcHJlY2F0ZWROb2RlKCkgPT0gcG9zLmRlcHJlY2F0ZWROb2RlKCkpIHsK
LSAgICAgICAgaWYgKGRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpKQorICAgIGlm
IChkZXByZWNhdGVkTm9kZSgpID09IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpIHsKKyAgICAg
ICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KCpkZXByZWNhdGVkTm9kZSgpKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAobV9vZmZzZXQgPT0gcG9zLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCkpCisgICAgICAgIGlmIChtX29mZnNldCA9PSBwb3NpdGlvbi5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgCi0gICAgICAgIGlmICghZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmICFwb3Mu
ZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAobV9vZmZz
ZXQgIT0gcG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpCisKKyAgICAgICAgaWYgKCFpczxU
ZXh0PigqZGVwcmVjYXRlZE5vZGUoKSkgJiYgIWlzPFRleHQ+KCpwb3NpdGlvbi5kZXByZWNhdGVk
Tm9kZSgpKSkgeworICAgICAgICAgICAgaWYgKG1fb2Zmc2V0ICE9IHBvc2l0aW9uLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICB9Ci0gICAgCi0gICAgaWYgKGRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05hbWUoYnJU
YWcpICYmIHBvcy5pc0NhbmRpZGF0ZSgpKQorCisgICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KCpk
ZXByZWNhdGVkTm9kZSgpKSAmJiBwb3NpdGlvbi5pc0NhbmRpZGF0ZSgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAKLSAgICBpZiAocG9zLmRlcHJlY2F0ZWROb2RlKCkt
Pmhhc1RhZ05hbWUoYnJUYWcpICYmIGlzQ2FuZGlkYXRlKCkpCisKKyAgICBpZiAoaXM8SFRNTEJS
RWxlbWVudD4oKnBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpICYmIGlzQ2FuZGlkYXRlKCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIAotICAgIGlmICghaW5TYW1lRW5j
bG9zaW5nQmxvY2tGbG93RWxlbWVudChkZXByZWNhdGVkTm9kZSgpLCBwb3MuZGVwcmVjYXRlZE5v
ZGUoKSkpCisKKyAgICBpZiAoIWluU2FtZUVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoZGVwcmVj
YXRlZE5vZGUoKSwgcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgaWYgKGlzPFJlbmRlclRleHQ+KCpyZW5kZXJlcikgJiYgIWRvd25jYXN0PFJl
bmRlclRleHQ+KCpyZW5kZXJlcikuY29udGFpbnNDYXJldE9mZnNldChtX29mZnNldCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChpczxSZW5kZXJUZXh0PigqcG9zUmVuZGVyZXIp
ICYmICFkb3duY2FzdDxSZW5kZXJUZXh0PigqcG9zUmVuZGVyZXIpLmNvbnRhaW5zQ2FyZXRPZmZz
ZXQocG9zLm1fb2Zmc2V0KSkKKyAgICBpZiAoaXM8UmVuZGVyVGV4dD4oKnBvc2l0aW9uUmVuZGVy
ZXIpICYmICFkb3duY2FzdDxSZW5kZXJUZXh0PigqcG9zaXRpb25SZW5kZXJlcikuY29udGFpbnND
YXJldE9mZnNldChwb3NpdGlvbi5tX29mZnNldCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGludCB0aGlzUmVuZGVyZWRPZmZzZXQgPSBpczxSZW5kZXJUZXh0PigqcmVuZGVyZXIpID8g
ZG93bmNhc3Q8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKS5jb3VudFJlbmRlcmVkQ2hhcmFjdGVyT2Zm
c2V0c1VudGlsKG1fb2Zmc2V0KSA6IG1fb2Zmc2V0OwotICAgIGludCBwb3NSZW5kZXJlZE9mZnNl
dCA9IGlzPFJlbmRlclRleHQ+KCpwb3NSZW5kZXJlcikgPyBkb3duY2FzdDxSZW5kZXJUZXh0Pigq
cG9zUmVuZGVyZXIpLmNvdW50UmVuZGVyZWRDaGFyYWN0ZXJPZmZzZXRzVW50aWwocG9zLm1fb2Zm
c2V0KSA6IHBvcy5tX29mZnNldDsKKyAgICBpbnQgcG9zaXRpb25SZW5kZXJlZE9mZnNldCA9IGlz
PFJlbmRlclRleHQ+KCpwb3NpdGlvblJlbmRlcmVyKSA/IGRvd25jYXN0PFJlbmRlclRleHQ+KCpw
b3NpdGlvblJlbmRlcmVyKS5jb3VudFJlbmRlcmVkQ2hhcmFjdGVyT2Zmc2V0c1VudGlsKHBvc2l0
aW9uLm1fb2Zmc2V0KSA6IHBvc2l0aW9uLm1fb2Zmc2V0OwogCi0gICAgaWYgKHJlbmRlcmVyID09
IHBvc1JlbmRlcmVyICYmIHRoaXNSZW5kZXJlZE9mZnNldCA9PSBwb3NSZW5kZXJlZE9mZnNldCkK
KyAgICBpZiAocmVuZGVyZXIgPT0gcG9zaXRpb25SZW5kZXJlciAmJiB0aGlzUmVuZGVyZWRPZmZz
ZXQgPT0gcG9zaXRpb25SZW5kZXJlZE9mZnNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgaW50IGlnbm9yZWRDYXJldE9mZnNldDsKICAgICBJbmxpbmVCb3gqIGIxOwogICAgIGdldElu
bGluZUJveEFuZE9mZnNldChET1dOU1RSRUFNLCBiMSwgaWdub3JlZENhcmV0T2Zmc2V0KTsKICAg
ICBJbmxpbmVCb3gqIGIyOwotICAgIHBvcy5nZXRJbmxpbmVCb3hBbmRPZmZzZXQoRE9XTlNUUkVB
TSwgYjIsIGlnbm9yZWRDYXJldE9mZnNldCk7CisgICAgcG9zaXRpb24uZ2V0SW5saW5lQm94QW5k
T2Zmc2V0KERPV05TVFJFQU0sIGIyLCBpZ25vcmVkQ2FyZXRPZmZzZXQpOwogCiAgICAgTE9HKEVk
aXRpbmcsICJyZW5kZXJlcjogICAgICAgICAgICAgICAlcCBbJXBdXG4iLCByZW5kZXJlciwgYjEp
OwogICAgIExPRyhFZGl0aW5nLCAidGhpc1JlbmRlcmVkT2Zmc2V0OiAgICAgICAgICVkXG4iLCB0
aGlzUmVuZGVyZWRPZmZzZXQpOwotICAgIExPRyhFZGl0aW5nLCAicG9zUmVuZGVyZXI6ICAgICAg
ICAgICAgJXAgWyVwXVxuIiwgcG9zUmVuZGVyZXIsIGIyKTsKLSAgICBMT0coRWRpdGluZywgInBv
c1JlbmRlcmVkT2Zmc2V0OiAgICAgICVkXG4iLCBwb3NSZW5kZXJlZE9mZnNldCk7CisgICAgTE9H
KEVkaXRpbmcsICJwb3NSZW5kZXJlcjogICAgICAgICAgICAlcCBbJXBdXG4iLCBwb3NpdGlvblJl
bmRlcmVyLCBiMik7CisgICAgTE9HKEVkaXRpbmcsICJwb3NSZW5kZXJlZE9mZnNldDogICAgICAl
ZFxuIiwgcG9zaXRpb25SZW5kZXJlZE9mZnNldCk7CiAgICAgTE9HKEVkaXRpbmcsICJub2RlIG1p
bi9tYXg6ICAgICAgICAgICAlZDolZFxuIiwgY2FyZXRNaW5PZmZzZXQoKmRlcHJlY2F0ZWROb2Rl
KCkpLCBjYXJldE1heE9mZnNldCgqZGVwcmVjYXRlZE5vZGUoKSkpOwotICAgIExPRyhFZGl0aW5n
LCAicG9zIG5vZGUgbWluL21heDogICAgICAgJWQ6JWRcbiIsIGNhcmV0TWluT2Zmc2V0KCpwb3Mu
ZGVwcmVjYXRlZE5vZGUoKSksIGNhcmV0TWF4T2Zmc2V0KCpwb3MuZGVwcmVjYXRlZE5vZGUoKSkp
OworICAgIExPRyhFZGl0aW5nLCAicG9zIG5vZGUgbWluL21heDogICAgICAgJWQ6JWRcbiIsIGNh
cmV0TWluT2Zmc2V0KCpwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSwgY2FyZXRNYXhPZmZzZXQo
KnBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpKTsKICAgICBMT0coRWRpdGluZywgIi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS1cbiIpOwogCiAgICAgaWYgKCFiMSB8fCAhYjIpIHsKQEAgLTExMTcsMTMgKzExMjEsMTMg
QEAgYm9vbCBQb3NpdGlvbjo6cmVuZGVyc0luRGlmZmVyZW50UG9zaXRpb24oY29uc3QgUG9zaXRp
b24gJnBvcykgY29uc3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKG5l
eHRSZW5kZXJlZEVkaXRhYmxlKGRlcHJlY2F0ZWROb2RlKCkpID09IHBvcy5kZXByZWNhdGVkTm9k
ZSgpCi0gICAgICAgICYmIHRoaXNSZW5kZXJlZE9mZnNldCA9PSBjYXJldE1heE9mZnNldCgqZGVw
cmVjYXRlZE5vZGUoKSkgJiYgIXBvc1JlbmRlcmVkT2Zmc2V0KSB7CisgICAgaWYgKG5leHRSZW5k
ZXJlZEVkaXRhYmxlKGRlcHJlY2F0ZWROb2RlKCkpID09IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2Rl
KCkKKyAgICAgICAgJiYgdGhpc1JlbmRlcmVkT2Zmc2V0ID09IGNhcmV0TWF4T2Zmc2V0KCpkZXBy
ZWNhdGVkTm9kZSgpKSAmJiAhcG9zaXRpb25SZW5kZXJlZE9mZnNldCkgewogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGlmIChwcmV2aW91c1JlbmRlcmVkRWRpdGFibGUo
ZGVwcmVjYXRlZE5vZGUoKSkgPT0gcG9zLmRlcHJlY2F0ZWROb2RlKCkKLSAgICAgICAgJiYgIXRo
aXNSZW5kZXJlZE9mZnNldCAmJiBwb3NSZW5kZXJlZE9mZnNldCA9PSBjYXJldE1heE9mZnNldCgq
cG9zLmRlcHJlY2F0ZWROb2RlKCkpKSB7CisgICAgaWYgKHByZXZpb3VzUmVuZGVyZWRFZGl0YWJs
ZShkZXByZWNhdGVkTm9kZSgpKSA9PSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpCisgICAgICAg
ICYmICF0aGlzUmVuZGVyZWRPZmZzZXQgJiYgcG9zaXRpb25SZW5kZXJlZE9mZnNldCA9PSBjYXJl
dE1heE9mZnNldCgqcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIApAQCAtMTEzNSwxMCArMTEzOSwxMCBAQCBQb3NpdGlvbiBQb3NpdGlv
bjo6bGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbihFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgY29u
c2lkZXJObwogewogICAgIEFTU0VSVChpc0VkaXRhYmxlUG9zaXRpb24oKnRoaXMpKTsKICAgICBp
ZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBQb3NpdGlvbigpOworICAgICAgICByZXR1cm4g
eyB9OwogICAgIAotICAgIGlmICh1cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05h
bWUoYnJUYWcpKQotICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKKyAgICBpZiAoaXM8SFRNTEJS
RWxlbWVudD4oKnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKSkpCisgICAgICAgIHJldHVybiB7
IH07CiAKICAgICBQb3NpdGlvbiBwcmV2ID0gcHJldmlvdXNDaGFyYWN0ZXJQb3NpdGlvbihhZmZp
bml0eSk7CiAgICAgaWYgKHByZXYgIT0gKnRoaXMgJiYgaW5TYW1lRW5jbG9zaW5nQmxvY2tGbG93
RWxlbWVudChkZXByZWNhdGVkTm9kZSgpLCBwcmV2LmRlcHJlY2F0ZWROb2RlKCkpICYmIGlzPFRl
eHQ+KCpwcmV2LmRlcHJlY2F0ZWROb2RlKCkpKSB7CkBAIC0xMTQ5LDcgKzExNTMsNyBAQCBQb3Np
dGlvbiBQb3NpdGlvbjo6bGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbihFQWZmaW5pdHkgYWZmaW5p
dHksIGJvb2wgY29uc2lkZXJObwogICAgICAgICAgICAgICAgIHJldHVybiBwcmV2OwogICAgIH0K
IAotICAgIHJldHVybiBQb3NpdGlvbigpOworICAgIHJldHVybiB7IH07CiB9CiAKIC8vIFRoaXMg
YXNzdW1lcyB0aGF0IGl0IHN0YXJ0cyBpbiBlZGl0YWJsZSBjb250ZW50LgpAQCAtMTE1Nyw3ICsx
MTYxLDcgQEAgUG9zaXRpb24gUG9zaXRpb246OnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKEVB
ZmZpbml0eSwgYm9vbCBjb25zaWRlck5vbkNvbGxhcHMKIHsKICAgICBBU1NFUlQoaXNFZGl0YWJs
ZVBvc2l0aW9uKCp0aGlzKSk7CiAgICAgaWYgKGlzTnVsbCgpKQotICAgICAgICByZXR1cm4gUG9z
aXRpb24oKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICAKICAgICBWaXNpYmxlUG9zaXRpb24g
digqdGhpcyk7CiAgICAgVUNoYXIgYyA9IHYuY2hhcmFjdGVyQWZ0ZXIoKTsKQEAgLTExNjYsNyAr
MTE3MCw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp0cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbihF
QWZmaW5pdHksIGJvb2wgY29uc2lkZXJOb25Db2xsYXBzCiAgICAgICAgIGlmIChjb25zaWRlck5v
bkNvbGxhcHNpYmxlV2hpdGVzcGFjZSA/IChpc1NwYWNlT3JOZXdsaW5lKGMpIHx8IGMgPT0gbm9C
cmVha1NwYWNlKSA6IGRlcHJlY2F0ZWRJc0NvbGxhcHNpYmxlV2hpdGVzcGFjZShjKSkKICAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKICAgICAKLSAgICByZXR1cm4gUG9zaXRpb24oKTsKKyAgICBy
ZXR1cm4geyB9OwogfQogCiB2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFm
ZmluaXR5IGFmZmluaXR5LCBJbmxpbmVCb3gqJiBpbmxpbmVCb3gsIGludCYgY2FyZXRPZmZzZXQp
IGNvbnN0CkBAIC0xMjcwLDcgKzEyNzQsNyBAQCB2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hB
bmRPZmZzZXQoRUFmZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaQogICAg
ICAgICBpbmxpbmVCb3ggPSBib3ggPyBib3ggOiBjYW5kaWRhdGU7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgaW5saW5lQm94ID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKGNhbkhhdmVDaGlsZHJlbkZv
ckVkaXRpbmcoZGVwcmVjYXRlZE5vZGUoKSkgJiYgaXM8UmVuZGVyQmxvY2tGbG93PigqcmVuZGVy
ZXIpICYmIGhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KGRvd25j
YXN0PFJlbmRlckJsb2NrRmxvdz4oKnJlbmRlcmVyKSkpIHsKKyAgICAgICAgaWYgKGNhbkhhdmVD
aGlsZHJlbkZvckVkaXRpbmcoKmRlcHJlY2F0ZWROb2RlKCkpICYmIGlzPFJlbmRlckJsb2NrRmxv
dz4oKnJlbmRlcmVyKSAmJiBoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhl
aWdodChkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcikpKSB7CiAgICAgICAgICAg
ICAvLyBUcnkgYSB2aXN1YWxseSBlcXVpdmFsZW50IHBvc2l0aW9uIHdpdGggcG9zc2libHkgb3Bw
b3NpdGUgZWRpdGFiaWxpdHkuIFRoaXMgaGVscHMgaW4gY2FzZSB8dGhpc3wgaXMgaW4KICAgICAg
ICAgICAgIC8vIGFuIGVkaXRhYmxlIGJsb2NrIGJ1dCBzdXJyb3VuZGVkIGJ5IG5vbi1lZGl0YWJs
ZSBwb3NpdGlvbnMuIEl0IGFjdHMgdG8gbmVnYXRlIHRoZSBsb2dpYyBhdCB0aGUgYmVnaW5uaW5n
CiAgICAgICAgICAgICAvLyBvZiBSZW5kZXJPYmplY3Q6OmNyZWF0ZVZpc2libGVQb3NpdGlvbigp
LgpAQCAtMTQ2MywxMyArMTQ2NywxMyBAQCBib29sIFBvc2l0aW9uOjplcXVhbHMoY29uc3QgUG9z
aXRpb24mIG90aGVyKSBjb25zdAogCiAgICAgc3dpdGNoIChhbmNob3JUeXBlKCkpIHsKICAgICBj
YXNlIFBvc2l0aW9uSXNCZWZvcmVDaGlsZHJlbjoKLSAgICAgICAgQVNTRVJUKCFtX2FuY2hvck5v
ZGUtPmlzVGV4dE5vZGUoKSk7CisgICAgICAgIEFTU0VSVCghaXM8VGV4dD4oKm1fYW5jaG9yTm9k
ZSkpOwogICAgICAgICBzd2l0Y2ggKG90aGVyLmFuY2hvclR5cGUoKSkgewogICAgICAgICBjYXNl
IFBvc2l0aW9uSXNCZWZvcmVDaGlsZHJlbjoKLSAgICAgICAgICAgIEFTU0VSVCghb3RoZXIubV9h
bmNob3JOb2RlLT5pc1RleHROb2RlKCkpOworICAgICAgICAgICAgQVNTRVJUKCFpczxUZXh0Pigq
b3RoZXIubV9hbmNob3JOb2RlKSk7CiAgICAgICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlID09
IG90aGVyLm1fYW5jaG9yTm9kZTsKICAgICAgICAgY2FzZSBQb3NpdGlvbklzQWZ0ZXJDaGlsZHJl
bjoKLSAgICAgICAgICAgIEFTU0VSVCghb3RoZXIubV9hbmNob3JOb2RlLT5pc1RleHROb2RlKCkp
OworICAgICAgICAgICAgQVNTRVJUKCFpczxUZXh0Pigqb3RoZXIubV9hbmNob3JOb2RlKSk7CiAg
ICAgICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlID09IG90aGVyLm1fYW5jaG9yTm9kZSAmJiAh
bV9hbmNob3JOb2RlLT5oYXNDaGlsZE5vZGVzKCk7CiAgICAgICAgIGNhc2UgUG9zaXRpb25Jc09m
ZnNldEluQW5jaG9yOgogICAgICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZSA9PSBvdGhlci5t
X2FuY2hvck5vZGUgJiYgIW90aGVyLm1fb2Zmc2V0OwpAQCAtMTQ4MCwxMyArMTQ4NCwxMyBAQCBi
b29sIFBvc2l0aW9uOjplcXVhbHMoY29uc3QgUG9zaXRpb24mIG90aGVyKSBjb25zdAogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW46Ci0g
ICAgICAgIEFTU0VSVCghbV9hbmNob3JOb2RlLT5pc1RleHROb2RlKCkpOworICAgICAgICBBU1NF
UlQoIWlzPFRleHQ+KCptX2FuY2hvck5vZGUpKTsKICAgICAgICAgc3dpdGNoIChvdGhlci5hbmNo
b3JUeXBlKCkpIHsKICAgICAgICAgY2FzZSBQb3NpdGlvbklzQmVmb3JlQ2hpbGRyZW46Ci0gICAg
ICAgICAgICBBU1NFUlQoIW90aGVyLm1fYW5jaG9yTm9kZS0+aXNUZXh0Tm9kZSgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghaXM8VGV4dD4oKm90aGVyLm1fYW5jaG9yTm9kZSkpOwogICAgICAgICAg
ICAgcmV0dXJuIG1fYW5jaG9yTm9kZSA9PSBvdGhlci5tX2FuY2hvck5vZGUgJiYgIW1fYW5jaG9y
Tm9kZS0+aGFzQ2hpbGROb2RlcygpOwogICAgICAgICBjYXNlIFBvc2l0aW9uSXNBZnRlckNoaWxk
cmVuOgotICAgICAgICAgICAgQVNTRVJUKCFvdGhlci5tX2FuY2hvck5vZGUtPmlzVGV4dE5vZGUo
KSk7CisgICAgICAgICAgICBBU1NFUlQoIWlzPFRleHQ+KCpvdGhlci5tX2FuY2hvck5vZGUpKTsK
ICAgICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUgPT0gb3RoZXIubV9hbmNob3JOb2RlOwog
ICAgICAgICBjYXNlIFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjoKICAgICAgICAgICAgIHJldHVy
biBtX2FuY2hvck5vZGUgPT0gb3RoZXIubV9hbmNob3JOb2RlICYmIG1fYW5jaG9yTm9kZS0+Y291
bnRDaGlsZE5vZGVzKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb2Zmc2V0KTsKQEAgLTE0
OTksMTAgKzE1MDMsMTAgQEAgYm9vbCBQb3NpdGlvbjo6ZXF1YWxzKGNvbnN0IFBvc2l0aW9uJiBv
dGhlcikgY29uc3QKICAgICBjYXNlIFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjoKICAgICAgICAg
c3dpdGNoIChvdGhlci5hbmNob3JUeXBlKCkpIHsKICAgICAgICAgY2FzZSBQb3NpdGlvbklzQmVm
b3JlQ2hpbGRyZW46Ci0gICAgICAgICAgICBBU1NFUlQoIW90aGVyLm1fYW5jaG9yTm9kZS0+aXNU
ZXh0Tm9kZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXM8VGV4dD4oKm90aGVyLm1fYW5jaG9y
Tm9kZSkpOwogICAgICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZSA9PSBvdGhlci5tX2FuY2hv
ck5vZGUgJiYgIW1fb2Zmc2V0OwogICAgICAgICBjYXNlIFBvc2l0aW9uSXNBZnRlckNoaWxkcmVu
OgotICAgICAgICAgICAgQVNTRVJUKCFvdGhlci5tX2FuY2hvck5vZGUtPmlzVGV4dE5vZGUoKSk7
CisgICAgICAgICAgICBBU1NFUlQoIWlzPFRleHQ+KCpvdGhlci5tX2FuY2hvck5vZGUpKTsKICAg
ICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUgPT0gb3RoZXIubV9hbmNob3JOb2RlICYmIG1f
b2Zmc2V0ID09IHN0YXRpY19jYXN0PGludD4ob3RoZXIubV9hbmNob3JOb2RlLT5jb3VudENoaWxk
Tm9kZXMoKSk7CiAgICAgICAgIGNhc2UgUG9zaXRpb25Jc09mZnNldEluQW5jaG9yOgogICAgICAg
ICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZSA9PSBvdGhlci5tX2FuY2hvck5vZGUgJiYgbV9vZmZz
ZXQgPT0gb3RoZXIubV9vZmZzZXQ7CkBAIC0xNTE1LDEwICsxNTE5LDEwIEBAIGJvb2wgUG9zaXRp
b246OmVxdWFscyhjb25zdCBQb3NpdGlvbiYgb3RoZXIpIGNvbnN0CiAgICAgY2FzZSBQb3NpdGlv
bklzQmVmb3JlQW5jaG9yOgogICAgICAgICBzd2l0Y2ggKG90aGVyLmFuY2hvclR5cGUoKSkgewog
ICAgICAgICBjYXNlIFBvc2l0aW9uSXNCZWZvcmVDaGlsZHJlbjoKLSAgICAgICAgICAgIEFTU0VS
VCghb3RoZXIubV9hbmNob3JOb2RlLT5pc1RleHROb2RlKCkpOworICAgICAgICAgICAgQVNTRVJU
KCFpczxUZXh0Pigqb3RoZXIubV9hbmNob3JOb2RlKSk7CiAgICAgICAgICAgICByZXR1cm4gbV9h
bmNob3JOb2RlID09IG90aGVyLm1fYW5jaG9yTm9kZS0+Zmlyc3RDaGlsZCgpOwogICAgICAgICBj
YXNlIFBvc2l0aW9uSXNBZnRlckNoaWxkcmVuOgotICAgICAgICAgICAgQVNTRVJUKCFvdGhlci5t
X2FuY2hvck5vZGUtPmlzVGV4dE5vZGUoKSk7CisgICAgICAgICAgICBBU1NFUlQoIWlzPFRleHQ+
KCpvdGhlci5tX2FuY2hvck5vZGUpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgY2FzZSBQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3I6CiAgICAgICAgICAgICByZXR1cm4gbV9h
bmNob3JOb2RlID09IG90aGVyLm1fYW5jaG9yTm9kZS0+dHJhdmVyc2VUb0NoaWxkQXQob3RoZXIu
bV9vZmZzZXQpOwpAQCAtMTUzMSwxMCArMTUzNSwxMCBAQCBib29sIFBvc2l0aW9uOjplcXVhbHMo
Y29uc3QgUG9zaXRpb24mIG90aGVyKSBjb25zdAogICAgIGNhc2UgUG9zaXRpb25Jc0FmdGVyQW5j
aG9yOgogICAgICAgICBzd2l0Y2ggKG90aGVyLmFuY2hvclR5cGUoKSkgewogICAgICAgICBjYXNl
IFBvc2l0aW9uSXNCZWZvcmVDaGlsZHJlbjoKLSAgICAgICAgICAgIEFTU0VSVCghb3RoZXIubV9h
bmNob3JOb2RlLT5pc1RleHROb2RlKCkpOworICAgICAgICAgICAgQVNTRVJUKCFpczxUZXh0Pigq
b3RoZXIubV9hbmNob3JOb2RlKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IGNhc2UgUG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW46Ci0gICAgICAgICAgICBBU1NFUlQoIW90aGVy
Lm1fYW5jaG9yTm9kZS0+aXNUZXh0Tm9kZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXM8VGV4
dD4oKm90aGVyLm1fYW5jaG9yTm9kZSkpOwogICAgICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9k
ZSA9PSBvdGhlci5tX2FuY2hvck5vZGUtPmxhc3RDaGlsZCgpOwogICAgICAgICBjYXNlIFBvc2l0
aW9uSXNPZmZzZXRJbkFuY2hvcjoKICAgICAgICAgICAgIHJldHVybiBvdGhlci5tX29mZnNldCAm
JiBtX2FuY2hvck5vZGUgPT0gb3RoZXIubV9hbmNob3JOb2RlLT50cmF2ZXJzZVRvQ2hpbGRBdChv
dGhlci5tX29mZnNldCAtIDEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0
aW9uSXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3Bw
CmluZGV4IDdhYzNkOGQwOWZiYzIzMDFkNzk3MzJjMTMyOGM1MDI1ZWVlMWZiN2EuLmMxYjBhMGM1
NDQ3ZDU0NTBhMzcwMzg2MzM5YjM0NDFlYzdkMDZiZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9z
aXRpb25JdGVyYXRvci5jcHAKQEAgLTQzLDExICs0MywxMSBAQCBQb3NpdGlvbkl0ZXJhdG9yOjpv
cGVyYXRvciBQb3NpdGlvbigpIGNvbnN0CiAgICAgaWYgKG1fbm9kZUFmdGVyUG9zaXRpb25JbkFu
Y2hvcikgewogICAgICAgICBBU1NFUlQobV9ub2RlQWZ0ZXJQb3NpdGlvbkluQW5jaG9yLT5wYXJl
bnROb2RlKCkgPT0gbV9hbmNob3JOb2RlKTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sg
aXMgaW5hZGFxdWV0ZSBiZWNhdXNlIGFueSBhbmNlc3RvciBjb3VsZCBiZSBpZ25vcmVkIGJ5IGVk
aXRpbmcKLSAgICAgICAgaWYgKHBvc2l0aW9uQmVmb3JlT3JBZnRlck5vZGVJc0NhbmRpZGF0ZSht
X2FuY2hvck5vZGUpKQorICAgICAgICBpZiAocG9zaXRpb25CZWZvcmVPckFmdGVyTm9kZUlzQ2Fu
ZGlkYXRlKCptX2FuY2hvck5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uQmVmb3Jl
Tm9kZShtX2FuY2hvck5vZGUpOwogICAgICAgICByZXR1cm4gcG9zaXRpb25JblBhcmVudEJlZm9y
ZU5vZGUobV9ub2RlQWZ0ZXJQb3NpdGlvbkluQW5jaG9yKTsKICAgICB9Ci0gICAgaWYgKHBvc2l0
aW9uQmVmb3JlT3JBZnRlck5vZGVJc0NhbmRpZGF0ZShtX2FuY2hvck5vZGUpKQorICAgIGlmIChw
b3NpdGlvbkJlZm9yZU9yQWZ0ZXJOb2RlSXNDYW5kaWRhdGUoKm1fYW5jaG9yTm9kZSkpCiAgICAg
ICAgIHJldHVybiBhdFN0YXJ0T2ZOb2RlKCkgPyBwb3NpdGlvbkJlZm9yZU5vZGUobV9hbmNob3JO
b2RlKSA6IHBvc2l0aW9uQWZ0ZXJOb2RlKG1fYW5jaG9yTm9kZSk7CiAgICAgaWYgKG1fYW5jaG9y
Tm9kZS0+aGFzQ2hpbGROb2RlcygpKQogICAgICAgICByZXR1cm4gbGFzdFBvc2l0aW9uSW5PckFm
dGVyTm9kZShtX2FuY2hvck5vZGUpOwpAQCAtMTYxLDcgKzE2MSw3IEBAIGJvb2wgUG9zaXRpb25J
dGVyYXRvcjo6aXNDYW5kaWRhdGUoKSBjb25zdAogICAgIGlmIChpczxSZW5kZXJUZXh0PigqcmVu
ZGVyZXIpKQogICAgICAgICByZXR1cm4gIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZSht
X2FuY2hvck5vZGUpICYmIGRvd25jYXN0PFJlbmRlclRleHQ+KCpyZW5kZXJlcikuY29udGFpbnND
YXJldE9mZnNldChtX29mZnNldEluQW5jaG9yKTsKIAotICAgIGlmIChpc1JlbmRlcmVkVGFibGUo
bV9hbmNob3JOb2RlKSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobV9hbmNob3JOb2RlKSkKKyAg
ICBpZiAoaXNSZW5kZXJlZFRhYmxlKG1fYW5jaG9yTm9kZSkgfHwgZWRpdGluZ0lnbm9yZXNDb250
ZW50KCptX2FuY2hvck5vZGUpKQogICAgICAgICByZXR1cm4gKGF0U3RhcnRPZk5vZGUoKSB8fCBh
dEVuZE9mTm9kZSgpKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKG1fYW5jaG9y
Tm9kZS0+cGFyZW50Tm9kZSgpKTsKIAogICAgIGlmICghaXM8SFRNTEh0bWxFbGVtZW50PigqbV9h
bmNob3JOb2RlKSAmJiBpczxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcikpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggMWQwYmI2ODgxNTEw
YjRjMjE0MzBhZDIxZTI5MGI5MDMzZWZhY2U4OS4uZDllOTE0OWE2ZDlkYThkNDM5YWEzNTViYTQ4
MTY2NzgxZmEwMjg0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHAKQEAgLTMxMiw3ICszMTIsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBs
eVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUpCiAgICAgfQogCiAg
ICAgLy8gSm9pbiB1cCBhbnkgYWRqYWNlbnQgdGV4dCBub2Rlcy4KLSAgICBpZiAoc3RhcnQuZGVw
cmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7CisgICAgaWYgKGlzPFRleHQ+KCpzdGFydC5k
ZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICBqb2luQ2hpbGRUZXh0Tm9kZXMoc3RhcnQuZGVw
cmVjYXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpLCBzdGFydCwgZW5kKTsKICAgICAgICAgc3RhcnQg
PSBzdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGVuZCA9IGVuZFBvc2l0aW9uKCk7CkBAIC0zMjEs
NyArMzIxLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbnRTdHls
ZUNoYW5nZShFZGl0aW5nU3R5bGUqIHN0eWxlKQogICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBl
bmQuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChlbmQuZGVwcmVjYXRlZE5v
ZGUoKS0+aXNUZXh0Tm9kZSgpICYmIHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnBhcmVudE5vZGUo
KSAhPSBlbmQuZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpKSB7CisgICAgaWYgKGlzPFRl
eHQ+KCplbmQuZGVwcmVjYXRlZE5vZGUoKSkgJiYgc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+cGFy
ZW50Tm9kZSgpICE9IGVuZC5kZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCkpIHsKICAgICAg
ICAgam9pbkNoaWxkVGV4dE5vZGVzKGVuZC5kZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCks
IHN0YXJ0LCBlbmQpOwogICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAg
ZW5kID0gZW5kUG9zaXRpb24oKTsKQEAgLTM2Nyw3ICszNjcsNyBAQCB2b2lkIEFwcGx5U3R5bGVD
b21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUp
CiAgICAgaWYgKHN0YXJ0Tm9kZSA9PSBiZXlvbmRFbmQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSAmJiBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KCpzdGFydE5vZGUpKSB7CisgICAgaWYgKGlzPFRleHQ+
KCpzdGFydE5vZGUpICYmIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRN
YXhPZmZzZXQoKnN0YXJ0Tm9kZSkpIHsKICAgICAgICAgLy8gTW92ZSBvdXQgb2YgdGV4dCBub2Rl
IGlmIHJhbmdlIGRvZXMgbm90IGluY2x1ZGUgaXRzIGNoYXJhY3RlcnMuCiAgICAgICAgIHN0YXJ0
Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKnN0YXJ0Tm9kZSk7CiAgICAgICAgIGlmICghc3Rh
cnROb2RlKQpAQCAtMzk0LDcgKzM5NCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5
UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSkKICAgICAgICAgICAg
IGlmICghbm9kZUZ1bGx5U2VsZWN0ZWQobm9kZSwgc3RhcnQsIGVuZCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+
KG5vZGUpOwotICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSAmJiBub2RlLT5y
ZW5kZXJlcigpICYmIG5vZGUtPnBhcmVudE5vZGUoKSAhPSBsYXN0U3R5bGVkTm9kZSkgeworICAg
ICAgICB9IGVsc2UgaWYgKGlzPFRleHQ+KCpub2RlKSAmJiBub2RlLT5yZW5kZXJlcigpICYmIG5v
ZGUtPnBhcmVudE5vZGUoKSAhPSBsYXN0U3R5bGVkTm9kZSkgewogICAgICAgICAgICAgLy8gTGFz
dCBzdHlsZWQgbm9kZSB3YXMgbm90IHBhcmVudCBub2RlIG9mIHRoaXMgdGV4dCBub2RlLCBidXQg
d2Ugd2lzaCB0byBzdHlsZSB0aGlzCiAgICAgICAgICAgICAvLyB0ZXh0IG5vZGUuIFRvIG1ha2Ug
dGhpcyBwb3NzaWJsZSwgYWRkIGEgc3R5bGUgc3BhbiB0byBzdXJyb3VuZCB0aGlzIHRleHQgbm9k
ZS4KICAgICAgICAgICAgIGF1dG8gc3BhbiA9IGNyZWF0ZVN0eWxlU3BhbkVsZW1lbnQoZG9jdW1l
bnQoKSk7CkBAIC04MDIsNyArODAyLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJ
bmxpbmVTdHlsZVRvTm9kZVJhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUsIFBhc3NSZWYKICAgICAg
ICAgaWYgKG5vZGUtPmhhc0NoaWxkTm9kZXMoKSkgewogICAgICAgICAgICAgaWYgKG5vZGUtPmNv
bnRhaW5zKHBhc3RFbmROb2RlLmdldCgpKSB8fCBjb250YWluc05vbkVkaXRhYmxlUmVnaW9uKCpu
b2RlKSB8fCAhbm9kZS0+cGFyZW50Tm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50
KG5vZGUuZ2V0KCkpKSB7CisgICAgICAgICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KCpu
b2RlKSkgewogICAgICAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBp
bmdDaGlsZHJlbigqbm9kZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CkBAIC04NzAsNyArODcwLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlQ29u
ZmxpY3RpbmdJbmxpbmVTdHlsZUZyb21SdW4oRWRpdGluZ1N0eWxlKiBzdHlsZSwKICAgICBBU1NF
UlQocnVuU3RhcnQgJiYgcnVuRW5kKTsKICAgICBSZWZQdHI8Tm9kZT4gbmV4dCA9IHJ1blN0YXJ0
OwogICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBuZXh0OyBub2RlICYmIG5vZGUtPmluRG9j
dW1lbnQoKSAmJiBub2RlICE9IHBhc3RFbmROb2RlOyBub2RlID0gbmV4dCkgewotICAgICAgICBp
ZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUuZ2V0KCkpKSB7CisgICAgICAgIGlmIChlZGl0
aW5nSWdub3Jlc0NvbnRlbnQoKm5vZGUpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmNv
bnRhaW5zKHBhc3RFbmROb2RlLmdldCgpKSk7CiAgICAgICAgICAgICBuZXh0ID0gTm9kZVRyYXZl
cnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm5vZGUpOwogICAgICAgICB9IGVsc2UKQEAgLTEw
OTIsNyArMTA5Miw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnB1c2hEb3duSW5saW5lU3R5
bGVBcm91bmROb2RlKEVkaXRpbmdTdHlsZSogc3R5bGUsIE5vZGUqCiAgICAgfQogfQogCi12b2lk
IEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqIHN0eWxl
LCBjb25zdCBQb3NpdGlvbiAmc3RhcnQsIGNvbnN0IFBvc2l0aW9uICZlbmQpCit2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqIHN0eWxlLCBjb25z
dCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7CiAgICAgQVNTRVJUKHN0
YXJ0LmlzTm90TnVsbCgpKTsKICAgICBBU1NFUlQoZW5kLmlzTm90TnVsbCgpKTsKQEAgLTExMDUs
MTUgKzExMDUsMTQgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGUo
RWRpdGluZ1N0eWxlKiBzdHlsZSwgY29uc3QgUG9zaXRpb24gJnMKICAgICAvLyBJZiB0aGUgcHVz
aERvd25TdGFydCBpcyBhdCB0aGUgZW5kIG9mIGEgdGV4dCBub2RlLCB0aGVuIHRoaXMgbm9kZSBp
cyBub3QgZnVsbHkgc2VsZWN0ZWQuCiAgICAgLy8gTW92ZSBpdCB0byB0aGUgbmV4dCBkZWVwIHF1
aXZhbGVudCBwb3NpdGlvbiB0byBhdm9pZCByZW1vdmluZyB0aGUgc3R5bGUgZnJvbSB0aGlzIG5v
ZGUuCiAgICAgLy8gZS5nLiBpZiBwdXNoRG93blN0YXJ0IHdhcyBhdCBQb3NpdGlvbigiaGVsbG8i
LCA1KSBpbiA8Yj5oZWxsbzxkaXY+d29ybGQ8L2Rpdj48L2I+LCB3ZSB3YW50IFBvc2l0aW9uKCJ3
b3JsZCIsIDApIGluc3RlYWQuCi0gICAgTm9kZSogcHVzaERvd25TdGFydENvbnRhaW5lciA9IHB1
c2hEb3duU3RhcnQuY29udGFpbmVyTm9kZSgpOwotICAgIGlmIChwdXNoRG93blN0YXJ0Q29udGFp
bmVyICYmIHB1c2hEb3duU3RhcnRDb250YWluZXItPmlzVGV4dE5vZGUoKQotICAgICAgICAmJiBw
dXNoRG93blN0YXJ0LmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA9PSBwdXNoRG93blN0
YXJ0Q29udGFpbmVyLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkKKyAgICBhdXRvKiBwdXNoRG93blN0
YXJ0Q29udGFpbmVyID0gcHVzaERvd25TdGFydC5jb250YWluZXJOb2RlKCk7CisgICAgaWYgKGlz
PFRleHQ+KHB1c2hEb3duU3RhcnRDb250YWluZXIpICYmIHB1c2hEb3duU3RhcnQuY29tcHV0ZU9m
ZnNldEluQ29udGFpbmVyTm9kZSgpID09IHB1c2hEb3duU3RhcnRDb250YWluZXItPm1heENoYXJh
Y3Rlck9mZnNldCgpKQogICAgICAgICBwdXNoRG93blN0YXJ0ID0gbmV4dFZpc3VhbGx5RGlzdGlu
Y3RDYW5kaWRhdGUocHVzaERvd25TdGFydCk7CiAgICAgLy8gSWYgcHVzaERvd25FbmQgaXMgYXQg
dGhlIHN0YXJ0IG9mIGEgdGV4dCBub2RlLCB0aGVuIHRoaXMgbm9kZSBpcyBub3QgZnVsbHkgc2Vs
ZWN0ZWQuCiAgICAgLy8gTW92ZSBpdCB0byB0aGUgcHJldmlvdXMgZGVlcCBlcXVpdmFsZW50IHBv
c2l0aW9uIHRvIGF2b2lkIHJlbW92aW5nIHRoZSBzdHlsZSBmcm9tIHRoaXMgbm9kZS4KICAgICBQ
b3NpdGlvbiBwdXNoRG93bkVuZCA9IGVuZC51cHN0cmVhbSgpOwotICAgIE5vZGUqIHB1c2hEb3du
RW5kQ29udGFpbmVyID0gcHVzaERvd25FbmQuY29udGFpbmVyTm9kZSgpOwotICAgIGlmIChwdXNo
RG93bkVuZENvbnRhaW5lciAmJiBwdXNoRG93bkVuZENvbnRhaW5lci0+aXNUZXh0Tm9kZSgpICYm
ICFwdXNoRG93bkVuZC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkpCisgICAgYXV0byog
cHVzaERvd25FbmRDb250YWluZXIgPSBwdXNoRG93bkVuZC5jb250YWluZXJOb2RlKCk7CisgICAg
aWYgKGlzPFRleHQ+KHB1c2hEb3duRW5kQ29udGFpbmVyKSAmJiAhcHVzaERvd25FbmQuY29tcHV0
ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpKQogICAgICAgICBwdXNoRG93bkVuZCA9IHByZXZpb3Vz
VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwdXNoRG93bkVuZCk7CiAKICAgICBwdXNoRG93bklu
bGluZVN0eWxlQXJvdW5kTm9kZShzdHlsZSwgcHVzaERvd25TdGFydC5kZXByZWNhdGVkTm9kZSgp
KTsKQEAgLTExMzAsNyArMTEyOSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlu
bGluZVN0eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUsIGNvbnN0IFBvc2l0aW9uICZzCiAgICAgUmVm
UHRyPE5vZGU+IG5vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpOwogICAgIHdoaWxlIChub2Rl
KSB7CiAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0OwotICAgICAgICBpZiAoZWRpdGluZ0lnbm9y
ZXNDb250ZW50KG5vZGUuZ2V0KCkpKSB7CisgICAgICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRl
bnQoKm5vZGUpKSB7CiAgICAgICAgICAgICBBU1NFUlQobm9kZSA9PSBlbmQuZGVwcmVjYXRlZE5v
ZGUoKSB8fCAhbm9kZS0+Y29udGFpbnMoZW5kLmRlcHJlY2F0ZWROb2RlKCkpKTsKICAgICAgICAg
ICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbm9kZSk7CiAg
ICAgICAgIH0gZWxzZQpAQCAtMTE3NywxMCArMTE3NiwxMCBAQCB2b2lkIEFwcGx5U3R5bGVDb21t
YW5kOjpyZW1vdmVJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqIHN0eWxlLCBjb25zdCBQb3NpdGlv
biAmcwogICAgIHVwZGF0ZVN0YXJ0RW5kKHMsIGUpOwogfQogCi1ib29sIEFwcGx5U3R5bGVDb21t
YW5kOjpub2RlRnVsbHlTZWxlY3RlZChOb2RlICpub2RlLCBjb25zdCBQb3NpdGlvbiAmc3RhcnQs
IGNvbnN0IFBvc2l0aW9uICZlbmQpIGNvbnN0Citib29sIEFwcGx5U3R5bGVDb21tYW5kOjpub2Rl
RnVsbHlTZWxlY3RlZChOb2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBv
c2l0aW9uJiBlbmQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG5vZGUpOwotICAgIEFTU0VSVChub2Rl
LT5pc0VsZW1lbnROb2RlKCkpOworICAgIEFTU0VSVChpczxFbGVtZW50Pihub2RlKSk7CiAKICAg
ICAvLyBUaGUgdHJlZSBtYXkgaGF2ZSBjaGFuZ2VkIGFuZCBQb3NpdGlvbjo6dXBzdHJlYW0oKSBy
ZWxpZXMgb24gYW4gdXAtdG8tZGF0ZSBsYXlvdXQuCiAgICAgbm9kZS0+ZG9jdW1lbnQoKS51cGRh
dGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKQEAgLTExODksMTAgKzExODgsMTAg
QEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6bm9kZUZ1bGx5U2VsZWN0ZWQoTm9kZSAqbm9kZSwg
Y29uc3QgUG9zaXRpb24gJnN0YXJ0LCBjb24KICAgICAgICAgJiYgY29tcGFyZVBvc2l0aW9ucyhs
YXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5vZGUpLnVwc3RyZWFtKCksIGVuZCkgPD0gMDsKIH0K
IAotYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6bm9kZUZ1bGx5VW5zZWxlY3RlZChOb2RlICpub2Rl
LCBjb25zdCBQb3NpdGlvbiAmc3RhcnQsIGNvbnN0IFBvc2l0aW9uICZlbmQpIGNvbnN0Citib29s
IEFwcGx5U3R5bGVDb21tYW5kOjpub2RlRnVsbHlVbnNlbGVjdGVkKE5vZGUqIG5vZGUsIGNvbnN0
IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkgY29uc3QKIHsKICAgICBBU1NF
UlQobm9kZSk7Ci0gICAgQVNTRVJUKG5vZGUtPmlzRWxlbWVudE5vZGUoKSk7CisgICAgQVNTRVJU
KGlzPEVsZW1lbnQ+KG5vZGUpKTsKIAogICAgIGJvb2wgaXNGdWxseUJlZm9yZVN0YXJ0ID0gY29t
cGFyZVBvc2l0aW9ucyhsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5vZGUpLnVwc3RyZWFtKCks
IHN0YXJ0KSA8IDA7CiAgICAgYm9vbCBpc0Z1bGx5QWZ0ZXJFbmQgPSBjb21wYXJlUG9zaXRpb25z
KGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKSwgZW5kKSA+IDA7CkBAIC0xMjAyLDcg
KzEyMDEsNyBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpub2RlRnVsbHlVbnNlbGVjdGVkKE5v
ZGUgKm5vZGUsIGNvbnN0IFBvc2l0aW9uICZzdGFydCwgYwogCiB2b2lkIEFwcGx5U3R5bGVDb21t
YW5kOjpzcGxpdFRleHRBdFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRp
b24mIGVuZCkKIHsKLSAgICBBU1NFUlQoc3RhcnQuY29udGFpbmVyTm9kZSgpLT5pc1RleHROb2Rl
KCkpOworICAgIEFTU0VSVChpczxUZXh0PihzdGFydC5jb250YWluZXJOb2RlKCkpKTsKIAogICAg
IFBvc2l0aW9uIG5ld0VuZDsKICAgICBpZiAoZW5kLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6
UG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIHN0YXJ0LmNvbnRhaW5lck5vZGUoKSA9PSBlbmQu
Y29udGFpbmVyTm9kZSgpKQpAQCAtMTIzMyw3ICsxMjMyLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6c3BsaXRUZXh0QXRFbmQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlv
biYgZW4KIAogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVudEF0U3RhcnQo
Y29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewotICAgIEFTU0VS
VChzdGFydC5jb250YWluZXJOb2RlKCktPmlzVGV4dE5vZGUoKSk7CisgICAgQVNTRVJUKGlzPFRl
eHQ+KHN0YXJ0LmNvbnRhaW5lck5vZGUoKSkpOwogCiAgICAgUG9zaXRpb24gbmV3RW5kOwogICAg
IGlmIChzdGFydC5jb250YWluZXJOb2RlKCkgPT0gZW5kLmNvbnRhaW5lck5vZGUoKSkKQEAgLTEy
NDcsNyArMTI0Niw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRB
dFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zCiAKIHZvaWQgQXBwbHlTdHls
ZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdEVuZChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0IFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgQVNTRVJUKGVuZC5jb250YWluZXJOb2RlKCktPmlz
VGV4dE5vZGUoKSk7CisgICAgQVNTRVJUKGlzPFRleHQ+KGVuZC5jb250YWluZXJOb2RlKCkpKTsK
IAogICAgIGJvb2wgc2hvdWxkVXBkYXRlU3RhcnQgPSBzdGFydC5jb250YWluZXJOb2RlKCkgPT0g
ZW5kLmNvbnRhaW5lck5vZGUoKTsKICAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQo
ZW5kLmNvbnRhaW5lclRleHQoKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKQEAgLTEy
NjgsMTMgKzEyNjcsMTMgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkU3BsaXRUZXh0
RWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBFZGl0aW5nU3R5bGUqIHMKICAgICBpZiAoIWlzPEhU
TUxFbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJu
IHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIGRvd25jYXN0PEhUTUxF
bGVtZW50PihlbGVtZW50KSk7CisgICAgcmV0dXJuIHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJv
bUVsZW1lbnQoc3R5bGUsICZkb3duY2FzdDxIVE1MRWxlbWVudD4oKmVsZW1lbnQpKTsKIH0KIAog
Ym9vbCBBcHBseVN0eWxlQ29tbWFuZDo6aXNWYWxpZENhcmV0UG9zaXRpb25JblRleHROb2RlKGNv
bnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKICAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uY29u
dGFpbmVyTm9kZSgpOwotICAgIGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246
OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciB8fCAhbm9kZS0+aXNUZXh0Tm9kZSgpKQorICAgIGlm
IChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFu
Y2hvciB8fCAhaXM8VGV4dD4obm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbnQg
b2Zmc2V0SW5UZXh0ID0gcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CiAgICAgcmV0
dXJuIG9mZnNldEluVGV4dCA+IGNhcmV0TWluT2Zmc2V0KCpub2RlKSAmJiBvZmZzZXRJblRleHQg
PCBjYXJldE1heE9mZnNldCgqbm9kZSk7CkBAIC0xMzY5LDEzICsxMzY4LDE0IEBAIHZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OnN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoUGFzc1JlZlB0cjxO
b2RlPiBwYXNzZWRTdGFyCiAKICAgICBSZWZQdHI8Tm9kZT4gbmV4dFNpYmxpbmcgPSBlbGVtZW50
LT5uZXh0U2libGluZygpOwogICAgIFJlZlB0cjxOb2RlPiBwcmV2aW91c1NpYmxpbmcgPSBlbGVt
ZW50LT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICBpZiAoaXM8RWxlbWVudD4obmV4dFNpYmxpbmcu
Z2V0KCkpICYmIG5leHRTaWJsaW5nLT5oYXNFZGl0YWJsZVN0eWxlKCkgJiYgYXJlSWRlbnRpY2Fs
RWxlbWVudHMoKmVsZW1lbnQsICpuZXh0U2libGluZykpCisKKyAgICBpZiAobmV4dFNpYmxpbmcg
JiYgbmV4dFNpYmxpbmctPmhhc0VkaXRhYmxlU3R5bGUoKSAmJiBhcmVJZGVudGljYWxFbGVtZW50
cygqZWxlbWVudCwgKm5leHRTaWJsaW5nKSkKICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50
cyhlbGVtZW50LmdldCgpLCBkb3duY2FzdDxFbGVtZW50PihuZXh0U2libGluZy5nZXQoKSkpOwog
CiAgICAgaWYgKGlzPEVsZW1lbnQ+KHByZXZpb3VzU2libGluZy5nZXQoKSkgJiYgcHJldmlvdXNT
aWJsaW5nLT5oYXNFZGl0YWJsZVN0eWxlKCkpIHsKLSAgICAgICAgTm9kZSogbWVyZ2VkRWxlbWVu
dCA9IHByZXZpb3VzU2libGluZy0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgYXV0byogbWVyZ2Vk
RWxlbWVudCA9IHByZXZpb3VzU2libGluZy0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgQVNTRVJU
KG1lcmdlZEVsZW1lbnQpOwotICAgICAgICBpZiAoaXM8RWxlbWVudD4oKm1lcmdlZEVsZW1lbnQp
ICYmIG1lcmdlZEVsZW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSAmJiBhcmVJZGVudGljYWxFbGVt
ZW50cygqcHJldmlvdXNTaWJsaW5nLCAqbWVyZ2VkRWxlbWVudCkpCisgICAgICAgIGlmIChtZXJn
ZWRFbGVtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkgJiYgYXJlSWRlbnRpY2FsRWxlbWVudHMoKnBy
ZXZpb3VzU2libGluZywgKm1lcmdlZEVsZW1lbnQpKQogICAgICAgICAgICAgbWVyZ2VJZGVudGlj
YWxFbGVtZW50cyhkb3duY2FzdDxFbGVtZW50PihwcmV2aW91c1NpYmxpbmcuZ2V0KCkpLCBkb3du
Y2FzdDxFbGVtZW50PihtZXJnZWRFbGVtZW50KSk7CiAgICAgfQogCkBAIC0xNDIxLDcgKzE0MjEs
NyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphZGRJbmxpbmVTdHlsZUlmTmVlZGVkKEVkaXRp
bmdTdHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8TgogUG9zaXRpb24gQXBwbHlTdHlsZUNvbW1hbmQ6
OnBvc2l0aW9uVG9Db21wdXRlSW5saW5lU3R5bGVDaGFuZ2UoUGFzc1JlZlB0cjxOb2RlPiBzdGFy
dE5vZGUsIFJlZlB0cjxOb2RlPiYgZHVtbXlFbGVtZW50KQogewogICAgIC8vIEl0J3Mgb2theSB0
byBvYnRhaW4gdGhlIHN0eWxlIGF0IHRoZSBzdGFydE5vZGUgYmVjYXVzZSB3ZSd2ZSByZW1vdmVk
IGFsbCByZWxldmFudCBzdHlsZXMgZnJvbSB0aGUgY3VycmVudCBydW4uCi0gICAgaWYgKCFzdGFy
dE5vZGUtPmlzRWxlbWVudE5vZGUoKSkgeworICAgIGlmICghaXM8RWxlbWVudD4oKnN0YXJ0Tm9k
ZSkpIHsKICAgICAgICAgZHVtbXlFbGVtZW50ID0gY3JlYXRlU3R5bGVTcGFuRWxlbWVudChkb2N1
bWVudCgpKTsKICAgICAgICAgaW5zZXJ0Tm9kZUF0KGR1bW15RWxlbWVudCwgcG9zaXRpb25CZWZv
cmVOb2RlKHN0YXJ0Tm9kZS5nZXQoKSkpOwogICAgICAgICByZXR1cm4gZmlyc3RQb3NpdGlvbklu
T3JCZWZvcmVOb2RlKGR1bW15RWxlbWVudC5nZXQoKSk7CkBAIC0xNDQwLDE2ICsxNDQwLDE5IEBA
IHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVDaGFuZ2UoUGFzc1JlZlB0
cjxOb2RlPiBwYXNzZWRTdGFydCwgUGFzCiAgICAgLy8gRmluZCBhcHByb3ByaWF0ZSBmb250IGFu
ZCBzcGFuIGVsZW1lbnRzIHRvcC1kb3duLgogICAgIEhUTUxGb250RWxlbWVudCogZm9udENvbnRh
aW5lciA9IG51bGxwdHI7CiAgICAgSFRNTEVsZW1lbnQqIHN0eWxlQ29udGFpbmVyID0gbnVsbHB0
cjsKLSAgICBmb3IgKE5vZGUqIGNvbnRhaW5lciA9IHN0YXJ0Tm9kZS5nZXQoKTsgY29udGFpbmVy
ICYmIHN0YXJ0Tm9kZSA9PSBlbmROb2RlOyBjb250YWluZXIgPSBjb250YWluZXItPmZpcnN0Q2hp
bGQoKSkgewotICAgICAgICBpZiAoaXM8SFRNTEZvbnRFbGVtZW50PigqY29udGFpbmVyKSkKLSAg
ICAgICAgICAgIGZvbnRDb250YWluZXIgPSBkb3duY2FzdDxIVE1MRm9udEVsZW1lbnQ+KGNvbnRh
aW5lcik7Ci0gICAgICAgIGJvb2wgc3R5bGVDb250YWluZXJJc05vdFNwYW4gPSAhaXM8SFRNTFNw
YW5FbGVtZW50PihzdHlsZUNvbnRhaW5lcik7Ci0gICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4o
KmNvbnRhaW5lcikgJiYgKGlzPEhUTUxTcGFuRWxlbWVudD4oKmNvbnRhaW5lcikgfHwgKHN0eWxl
Q29udGFpbmVySXNOb3RTcGFuICYmIGNvbnRhaW5lci0+aGFzQ2hpbGROb2RlcygpKSkpCi0gICAg
ICAgICAgICBzdHlsZUNvbnRhaW5lciA9IGRvd25jYXN0PEhUTUxFbGVtZW50Pihjb250YWluZXIp
OwotICAgICAgICBpZiAoIWNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpKQorICAgIHdoaWxlIChzdGFy
dE5vZGUgJiYgc3RhcnROb2RlID09IGVuZE5vZGUpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxFbGVt
ZW50Pigqc3RhcnROb2RlKSkgeworICAgICAgICAgICAgYXV0byYgY29udGFpbmVyID0gZG93bmNh
c3Q8SFRNTEVsZW1lbnQ+KCpzdGFydE5vZGUpOworICAgICAgICAgICAgaWYgKGlzPEhUTUxGb250
RWxlbWVudD4oY29udGFpbmVyKSkKKyAgICAgICAgICAgICAgICBmb250Q29udGFpbmVyID0gJmRv
d25jYXN0PEhUTUxGb250RWxlbWVudD4oY29udGFpbmVyKTsKKyAgICAgICAgICAgIGlmIChpczxI
VE1MU3BhbkVsZW1lbnQ+KGNvbnRhaW5lcikgfHwgKCFpczxIVE1MU3BhbkVsZW1lbnQ+KHN0eWxl
Q29udGFpbmVyKSAmJiBjb250YWluZXIuaGFzQ2hpbGROb2RlcygpKSkKKyAgICAgICAgICAgICAg
ICBzdHlsZUNvbnRhaW5lciA9ICZjb250YWluZXI7CisgICAgICAgIH0KKyAgICAgICAgYXV0byog
c3RhcnROb2RlRmlyc3RDaGlsZCA9IHN0YXJ0Tm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICBp
ZiAoIXN0YXJ0Tm9kZUZpcnN0Q2hpbGQpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3Rh
cnROb2RlID0gY29udGFpbmVyLT5maXJzdENoaWxkKCk7Ci0gICAgICAgIGVuZE5vZGUgPSBjb250
YWluZXItPmxhc3RDaGlsZCgpOworICAgICAgICBlbmROb2RlID0gc3RhcnROb2RlLT5sYXN0Q2hp
bGQoKTsKKyAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlRmlyc3RDaGlsZDsKICAgICB9CiAK
ICAgICAvLyBGb250IHRhZ3MgbmVlZCB0byBnbyBvdXRzaWRlIG9mIENTUyBzbyB0aGF0IENTUyBm
b250IHNpemVzIG92ZXJyaWRlIGxlYWdjeSBmb250IHNpemVzLgpAQCAtMTQ4Miw5ICsxNDg1LDkg
QEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZUNoYW5nZShQYXNzUmVm
UHRyPE5vZGU+IHBhc3NlZFN0YXJ0LCBQYXMKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoc3R5bGVDb250YWluZXIsIHN0eWxlQXR0ciwgc3R5bGVU
b01lcmdlLT5hc1RleHQoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBSZWZQdHI8
RWxlbWVudD4gc3R5bGVFbGVtZW50ID0gY3JlYXRlU3R5bGVTcGFuRWxlbWVudChkb2N1bWVudCgp
KTsKKyAgICAgICAgICAgIGF1dG8gc3R5bGVFbGVtZW50ID0gY3JlYXRlU3R5bGVTcGFuRWxlbWVu
dChkb2N1bWVudCgpKTsKICAgICAgICAgICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKHN0
eWxlQXR0ciwgc3R5bGVUb01lcmdlLT5hc1RleHQoKSk7Ci0gICAgICAgICAgICBzdXJyb3VuZE5v
ZGVSYW5nZVdpdGhFbGVtZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgc3R5bGVFbGVtZW50LnJlbGVh
c2UoKSk7CisgICAgICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KHN0YXJ0Tm9k
ZSwgZW5kTm9kZSwgV1RGTW92ZShzdHlsZUVsZW1lbnQpKTsKICAgICAgICAgfQogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRl
eCA2OTRiNzZhMzdkNmJjOTRmOTIyM2NiYmJjYjFmYmUwMDFmZjEwNTY1Li5kMjMxMmQxZGJmMTZi
ZmI0OWI0YWEzNTYyNGEyNDk5N2Y4MzU5MWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtNDg2LDcgKzQ4Niw3IEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVBdChQYXNzUmVmUHRyPE5vZGU+IGluc2VydENo
aWxkLCBjb25zdCBQb3NpCiAgICAgTm9kZSogcmVmQ2hpbGQgPSBwLmRlcHJlY2F0ZWROb2RlKCk7
CiAgICAgaW50IG9mZnNldCA9IHAuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICAKLSAg
ICBpZiAoY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhyZWZDaGlsZCkpIHsKKyAgICBpZiAoY2Fu
SGF2ZUNoaWxkcmVuRm9yRWRpdGluZygqcmVmQ2hpbGQpKSB7CiAgICAgICAgIE5vZGUqIGNoaWxk
ID0gcmVmQ2hpbGQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGNoaWxk
ICYmIGkgPCBvZmZzZXQ7IGkrKykKICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCk7CkBAIC01MDksNyArNTA5LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5z
ZXJ0Tm9kZUF0KFBhc3NSZWZQdHI8Tm9kZT4gaW5zZXJ0Q2hpbGQsIGNvbnN0IFBvc2kKIAogdm9p
ZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwZW5kTm9kZShQYXNzUmVmUHRyPE5vZGU+IG5vZGUs
IFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50KQogewotICAgIEFTU0VSVChjYW5IYXZl
Q2hpbGRyZW5Gb3JFZGl0aW5nKHBhcmVudC5nZXQoKSkpOworICAgIEFTU0VSVChjYW5IYXZlQ2hp
bGRyZW5Gb3JFZGl0aW5nKCpwYXJlbnQpKTsKICAgICBBU1NFUlQobm9kZSk7CiAgICAgYXBwbHlD
b21tYW5kVG9Db21wb3NpdGUoQXBwZW5kTm9kZUNvbW1hbmQ6OmNyZWF0ZShwYXJlbnQsICpub2Rl
LCBlZGl0aW5nQWN0aW9uKCkpKTsKIH0KQEAgLTE1MDMsOSArMTUwMyw5IEBAIGJvb2wgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0eUxpc3RJdGVtKCkKIAogICAgIFJlZlB0cjxO
b2RlPiBwcmV2aW91c0xpc3ROb2RlID0gZW1wdHlMaXN0SXRlbS0+aXNFbGVtZW50Tm9kZSgpID8g
RWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKCplbXB0eUxpc3RJdGVtKTogZW1wdHlM
aXN0SXRlbS0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgUmVmUHRyPE5vZGU+IG5leHRMaXN0Tm9k
ZSA9IGVtcHR5TGlzdEl0ZW0tPmlzRWxlbWVudE5vZGUoKSA/IEVsZW1lbnRUcmF2ZXJzYWw6Om5l
eHRTaWJsaW5nKCplbXB0eUxpc3RJdGVtKTogZW1wdHlMaXN0SXRlbS0+bmV4dFNpYmxpbmcoKTsK
LSAgICBpZiAoaXNMaXN0SXRlbShuZXh0TGlzdE5vZGUuZ2V0KCkpIHx8IGlzTGlzdEVsZW1lbnQo
bmV4dExpc3ROb2RlLmdldCgpKSkgeworICAgIGlmIChpc0xpc3RJdGVtKG5leHRMaXN0Tm9kZS5n
ZXQoKSkgfHwgaXNMaXN0SFRNTEVsZW1lbnQobmV4dExpc3ROb2RlLmdldCgpKSkgewogICAgICAg
ICAvLyBJZiBlbXB0eUxpc3RJdGVtIGZvbGxvd3MgYW5vdGhlciBsaXN0IGl0ZW0gb3IgbmVzdGVk
IGxpc3QsIHNwbGl0IHRoZSBsaXN0IG5vZGUuCi0gICAgICAgIGlmIChpc0xpc3RJdGVtKHByZXZp
b3VzTGlzdE5vZGUuZ2V0KCkpIHx8IGlzTGlzdEVsZW1lbnQocHJldmlvdXNMaXN0Tm9kZS5nZXQo
KSkpCisgICAgICAgIGlmIChpc0xpc3RJdGVtKHByZXZpb3VzTGlzdE5vZGUuZ2V0KCkpIHx8IGlz
TGlzdEhUTUxFbGVtZW50KHByZXZpb3VzTGlzdE5vZGUuZ2V0KCkpKQogICAgICAgICAgICAgc3Bs
aXRFbGVtZW50KGRvd25jYXN0PEVsZW1lbnQ+KGxpc3ROb2RlLmdldCgpKSwgZW1wdHlMaXN0SXRl
bSk7CiAKICAgICAgICAgLy8gSWYgZW1wdHlMaXN0SXRlbSBpcyBmb2xsb3dlZCBieSBvdGhlciBs
aXN0IGl0ZW0gb3IgbmVzdGVkIGxpc3QsIHRoZW4gaW5zZXJ0IG5ld0Jsb2NrIGJlZm9yZSB0aGUg
bGlzdCBub2RlLgpAQCAtMTUxNyw3ICsxNTE3LDcgQEAgYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6YnJlYWtPdXRPZkVtcHR5TGlzdEl0ZW0oKQogICAgICAgICAvLyBXaGVuIGVtcHR5TGlzdEl0
ZW0gZG9lcyBub3QgZm9sbG93IGFueSBsaXN0IGl0ZW0gb3IgbmVzdGVkIGxpc3QsIGluc2VydCBu
ZXdCbG9jayBhZnRlciB0aGUgZW5jbG9zaW5nIGxpc3Qgbm9kZS4KICAgICAgICAgLy8gUmVtb3Zl
IHRoZSBlbmNsb3Npbmcgbm9kZSBpZiBlbXB0eUxpc3RJdGVtIGlzIHRoZSBvbmx5IGNoaWxkOyBv
dGhlcndpc2UganVzdCByZW1vdmUgZW1wdHlMaXN0SXRlbS4KICAgICAgICAgaW5zZXJ0Tm9kZUFm
dGVyKG5ld0Jsb2NrLCBsaXN0Tm9kZSk7Ci0gICAgICAgIHJlbW92ZU5vZGUoaXNMaXN0SXRlbShw
cmV2aW91c0xpc3ROb2RlLmdldCgpKSB8fCBpc0xpc3RFbGVtZW50KHByZXZpb3VzTGlzdE5vZGUu
Z2V0KCkpID8gZW1wdHlMaXN0SXRlbS5nZXQoKSA6IGxpc3ROb2RlLmdldCgpKTsKKyAgICAgICAg
cmVtb3ZlTm9kZShpc0xpc3RJdGVtKHByZXZpb3VzTGlzdE5vZGUuZ2V0KCkpIHx8IGlzTGlzdEhU
TUxFbGVtZW50KHByZXZpb3VzTGlzdE5vZGUuZ2V0KCkpID8gZW1wdHlMaXN0SXRlbS5nZXQoKSA6
IGxpc3ROb2RlLmdldCgpKTsKICAgICB9CiAKICAgICBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKG5l
d0Jsb2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCmluZGV4IGY2YmVhNjJjZmNjMWM1ZjE3NGNmOTNjMzdhNjA3NDU2OGViMmVhNTEu
LmY4MzUxMzA2ZTkxMTI0OWU3NDkxMjFjZDFkNmNlZGU1NjY3NzI2MjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNDU3LDcg
KzQ1Nyw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0
ZSgpCiAgICAgbWFrZVN0eWxpbmdFbGVtZW50c0RpcmVjdENoaWxkcmVuT2ZFZGl0YWJsZVJvb3RU
b1ByZXZlbnRTdHlsZUxvc3MoKTsKIAogICAgIC8vIE5ldmVyIHJlbW92ZSB0aGUgc3RhcnQgYmxv
Y2sgdW5sZXNzIGl0J3MgYSB0YWJsZSwgaW4gd2hpY2ggY2FzZSB3ZSB3b24ndCBtZXJnZSBjb250
ZW50IGluLgotICAgIGlmIChzdGFydE5vZGUgPT0gbV9zdGFydEJsb2NrICYmICFzdGFydE9mZnNl
dCAmJiBjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKHN0YXJ0Tm9kZSkgJiYgIWlzPEhUTUxUYWJs
ZUVsZW1lbnQ+KCpzdGFydE5vZGUpKSB7CisgICAgaWYgKHN0YXJ0Tm9kZSA9PSBtX3N0YXJ0Qmxv
Y2sgJiYgIXN0YXJ0T2Zmc2V0ICYmIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoKnN0YXJ0Tm9k
ZSkgJiYgIWlzPEhUTUxUYWJsZUVsZW1lbnQ+KCpzdGFydE5vZGUpKSB7CiAgICAgICAgIHN0YXJ0
T2Zmc2V0ID0gMDsKICAgICAgICAgc3RhcnROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqc3Rh
cnROb2RlKTsKICAgICAgICAgaWYgKCFzdGFydE5vZGUpCkBAIC01MzgsNyArNTM4LDcgQEAgdm9p
ZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgp
ICE9IHN0YXJ0Tm9kZSAmJiAhbV91cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmlzRGVz
Y2VuZGFudE9mKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKSAmJiBtX2Rvd25zdHJl
YW1FbmQuYW5jaG9yTm9kZSgpLT5pbkRvY3VtZW50KCkgJiYgbV9kb3duc3RyZWFtRW5kLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNaW5PZmZzZXQoKm1fZG93bnN0cmVhbUVuZC5k
ZXByZWNhdGVkTm9kZSgpKSkgewotICAgICAgICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5hdExh
c3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgJiYgIWNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmco
bV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpKSB7CisgICAgICAgICAgICBpZiAobV9k
b3duc3RyZWFtRW5kLmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSAmJiAhY2FuSGF2ZUNo
aWxkcmVuRm9yRWRpdGluZygqbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gVGhlIG5vZGUgaXRzZWxmIGlzIGZ1bGx5IHNlbGVjdGVkLCBub3Qg
anVzdCBpdHMgY29udGVudHMuICBEZWxldGUgaXQuCiAgICAgICAgICAgICAgICAgcmVtb3ZlTm9k
ZShtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgICAgICB9IGVsc2Ug
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCmluZGV4
IDg0NDEzYThhZDUxNzY3NjU0MzU0NzYyOTM0YTFjMzE0OTZhZjFiNTMuLjJjNzRjZGEwYTJlNjUx
ZGY5YjkwZjE2ZjUzMDEzNGNmZWI3NmNhODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKQEAgLTI0LDE1ICsyNCwxNiBAQAogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRm9ybWF0Qmxv
Y2tDb21tYW5kLmgiCisKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQu
aCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJodG1s
ZWRpdGluZy5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKKyNpbmNs
dWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MSw2ICs0Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiAKIHN0YXRpYyBOb2RlKiBlbmNsb3NpbmdCbG9ja1RvU3BsaXRUcmVlVG8oTm9kZSog
c3RhcnROb2RlKTsKIHN0YXRpYyBib29sIGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUpOworCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNFbGVtZW50Rm9y
Rm9ybWF0QmxvY2soTm9kZSogbm9kZSkKIHsKICAgICByZXR1cm4gaXM8RWxlbWVudD4oKm5vZGUp
ICYmIGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS50YWdR
TmFtZSgpKTsKQEAgLTE1Niw3ICsxNTgsNyBAQCBOb2RlKiBlbmNsb3NpbmdCbG9ja1RvU3BsaXRU
cmVlVG8oTm9kZSogc3RhcnROb2RlKQogICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgIGlm
IChpc0Jsb2NrKG4pKQogICAgICAgICAgICAgbGFzdEJsb2NrID0gbjsKLSAgICAgICAgaWYgKGlz
TGlzdEVsZW1lbnQobikpCisgICAgICAgIGlmIChpc0xpc3RIVE1MRWxlbWVudChuKSkKICAgICAg
ICAgICAgIHJldHVybiBuLT5wYXJlbnROb2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKSA/IG4tPnBh
cmVudE5vZGUoKSA6IG47CiAgICAgfQogICAgIHJldHVybiBsYXN0QmxvY2s7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21t
YW5kLmNwcAppbmRleCAzNzRhYjllNzY0M2NkNzRkZmQwYTYyMzJjOWVhMjUxMDdhNzIzMGJiLi45
ZGY4YzllM2UwZGU4Y2ZkYmY5MDBkNjBjZTUyMDY3MTQ0NWUxMzRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFu
ZC5jcHAKQEAgLTMxOSw3ICszMTksNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNv
bW1hbmQ6OmRvQXBwbHkoKQogCiAgICAgLy8gSWYgdGhlIHJldHVybmVkIHBvc2l0aW9uIGxpZXMg
ZWl0aGVyIGF0IHRoZSBlbmQgb3IgYXQgdGhlIHN0YXJ0IG9mIGFuIGVsZW1lbnQgdGhhdCBpcyBp
Z25vcmVkIGJ5IGVkaXRpbmcKICAgICAvLyB3ZSBzaG91bGQgbW92ZSB0byBpdHMgdXBzdHJlYW0g
b3IgZG93bnN0cmVhbSBwb3NpdGlvbi4KLSAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KGlu
c2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpKSB7CisgICAgaWYgKGVkaXRpbmdJZ25v
cmVzQ29udGVudCgqaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAgICAg
ICAgaWYgKGluc2VydGlvblBvc2l0aW9uLmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkK
ICAgICAgICAgICAgIGluc2VydGlvblBvc2l0aW9uID0gaW5zZXJ0aW9uUG9zaXRpb24uZG93bnN0
cmVhbSgpOwogICAgICAgICBlbHNlIGlmIChpbnNlcnRpb25Qb3NpdGlvbi5hdEZpcnN0RWRpdGlu
Z1Bvc2l0aW9uRm9yTm9kZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9N
b2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Nb2Rp
ZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwCmluZGV4IDk5OGM5NmE2NWQ2ZTIxNDZjOGQ4MzU5NWY0
NzU2MTMxNWI4OTEyNzQuLmYzNDAwZmRhNjk0NWYyMGIzMDNmZDk2NzA1NGQxMWYyYTM5YzliMDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExl
dmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RM
ZXZlbC5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIGJvb2wgZ2V0U3RhcnRFbmRMaXN0Q2hp
bGRyZW4oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBOb2RlKiYgc3QKICAgICAv
LyBpZiB0aGUgc2VsZWN0aW9uIGVuZHMgb24gYSBsaXN0IGl0ZW0gd2l0aCBhIHN1Ymxpc3QsIGlu
Y2x1ZGUgdGhlIGVudGlyZSBzdWJsaXN0CiAgICAgaWYgKGVuZExpc3RDaGlsZC0+cmVuZGVyZXIo
KS0+aXNMaXN0SXRlbSgpKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogciA9IGVuZExpc3RDaGls
ZC0+cmVuZGVyZXIoKS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgaWYgKHIgJiYgaXNMaXN0RWxl
bWVudChyLT5ub2RlKCkpKQorICAgICAgICBpZiAociAmJiBpc0xpc3RIVE1MRWxlbWVudChyLT5u
b2RlKCkpKQogICAgICAgICAgICAgZW5kTGlzdENoaWxkID0gci0+bm9kZSgpOwogICAgIH0KIApA
QCAtMTc3LDcgKzE3Nyw3IEBAIHZvaWQgSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5k
Ojpkb0FwcGx5KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTm9kZSogcHJldmlvdXNJdGVtID0g
c3RhcnRMaXN0Q2hpbGQtPnJlbmRlcmVyKCktPnByZXZpb3VzU2libGluZygpLT5ub2RlKCk7Ci0g
ICAgaWYgKGlzTGlzdEVsZW1lbnQocHJldmlvdXNJdGVtKSkgeworICAgIGlmIChpc0xpc3RIVE1M
RWxlbWVudChwcmV2aW91c0l0ZW0pKSB7CiAgICAgICAgIC8vIG1vdmUgbm9kZXMgdXAgaW50byBw
cmVjZWRpbmcgbGlzdAogICAgICAgICBhcHBlbmRTaWJsaW5nTm9kZVJhbmdlKHN0YXJ0TGlzdENo
aWxkLCBlbmRMaXN0Q2hpbGQsIGRvd25jYXN0PEVsZW1lbnQ+KHByZXZpb3VzSXRlbSkpOwogICAg
ICAgICBtX2xpc3RFbGVtZW50ID0gcHJldmlvdXNJdGVtOwpAQCAtMjQ0LDExICsyNDQsMTEgQEAg
c3RhdGljIGJvb2wgY2FuRGVjcmVhc2VMaXN0TGV2ZWwoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uLCBOb2RlKiYgc3RhcnQKIHsKICAgICBpZiAoIWdldFN0YXJ0RW5kTGlzdENoaWxk
cmVuKHNlbGVjdGlvbiwgc3RhcnQsIGVuZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
KwogICAgIC8vIHRoZXJlIG11c3QgYmUgYSBkZXN0aW5hdGlvbiBsaXN0IHRvIG1vdmUgdGhlIGl0
ZW1zIHRvCi0gICAgaWYgKCFpc0xpc3RFbGVtZW50KHN0YXJ0LT5wYXJlbnROb2RlKCktPnBhcmVu
dE5vZGUoKSkpCisgICAgaWYgKCFpc0xpc3RIVE1MRWxlbWVudChzdGFydC0+cGFyZW50Tm9kZSgp
LT5wYXJlbnROb2RlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVt
b3ZlTm9kZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29t
bWFuZC5jcHAKaW5kZXggYjJhN2JjNmFiY2Q2NTgxOTE0OTJiM2YzNDQyNjZmZjdmMGZlNWQ0MS4u
OTVkYTg4NDRmOGQwMGM1YjQzMThiNTcxYzM1ZDE4MTJlZGQwMzg4OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNp
bmNsdWRlICJSZW1vdmVOb2RlQ29tbWFuZC5oIgogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBs
YWNlaG9sZGVyLmgiCi0jaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQu
aCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5D
b21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNv
bW1hbmQuY3BwCmluZGV4IDM2ODJiYzM3NmFjMDZjM2MwOTdiZWZlZWI0Yzg3NjMwOWM2MGQwMjUu
LmQ3MGQ0NmVjZjNmMDMwZTQ5YmI5Yjk4ZDQ2YzY3ZDNhNjRhZmVmNDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwCkBA
IC0zMSwxNiArMzEsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZXBsYWNl
Tm9kZVdpdGhTcGFuQ29tbWFuZC5oIgogCisjaW5jbHVkZSAiSFRNTFNwYW5FbGVtZW50LmgiCiAj
aW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKLSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgotCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCiBSZXBsYWNlTm9k
ZVdpdGhTcGFuQ29tbWFuZDo6UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQoUGFzc1JlZlB0cjxI
VE1MRWxlbWVudD4gZWxlbWVudCkKICAgICA6IFNpbXBsZUVkaXRDb21tYW5kKGVsZW1lbnQtPmRv
Y3VtZW50KCkpCiAgICAgLCBtX2VsZW1lbnRUb1JlcGxhY2UoZWxlbWVudCkKQEAgLTY5LDcgKzY0
LDcgQEAgdm9pZCBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYg
KCFtX2VsZW1lbnRUb1JlcGxhY2UtPmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGlmICghbV9zcGFuRWxlbWVudCkKLSAgICAgICAgbV9zcGFuRWxlbWVudCA9IGNyZWF0ZUhUTUxF
bGVtZW50KG1fZWxlbWVudFRvUmVwbGFjZS0+ZG9jdW1lbnQoKSwgc3BhblRhZyk7CisgICAgICAg
IG1fc3BhbkVsZW1lbnQgPSBIVE1MU3BhbkVsZW1lbnQ6OmNyZWF0ZShtX2VsZW1lbnRUb1JlcGxh
Y2UtPmRvY3VtZW50KCkpOwogICAgIHN3YXBJbk5vZGVQcmVzZXJ2aW5nQXR0cmlidXRlc0FuZENo
aWxkcmVuKCptX3NwYW5FbGVtZW50LCAqbV9lbGVtZW50VG9SZXBsYWNlKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRl
eCA2NjFlYjFkZTdiZTYxMzQwNzY4YWE4ZDAyMTY3NzNjODQ1YjdhMmE0Li43ODY2YjE2N2IyZDli
MDdlZDI4MTBhZWNlZGRkYzg0OWNhNjliODQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTAxLDQ0ICsxMDEsNDYgQEAg
cHJpdmF0ZToKICAgICBib29sIG1faGFzSW50ZXJjaGFuZ2VOZXdsaW5lQXRFbmQ7CiB9OwogCi1z
dGF0aWMgYm9vbCBpc0ludGVyY2hhbmdlTmV3bGluZU5vZGUoY29uc3QgTm9kZSAqbm9kZSkKK3N0
YXRpYyBib29sIGlzSW50ZXJjaGFuZ2VOZXdsaW5lTm9kZShjb25zdCBOb2RlKiBub2RlKQogewog
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGludGVyY2hhbmdlTmV3bGluZUNsYXNz
U3RyaW5nKEFwcGxlSW50ZXJjaGFuZ2VOZXdsaW5lKTsKLSAgICByZXR1cm4gbm9kZSAmJiBub2Rl
LT5oYXNUYWdOYW1lKGJyVGFnKSAmJiAKLSAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgRWxl
bWVudCAqPihub2RlKS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gaW50ZXJjaGFuZ2VOZXds
aW5lQ2xhc3NTdHJpbmc7CisgICAgcmV0dXJuIGlzPEhUTUxCUkVsZW1lbnQ+KG5vZGUpICYmIGRv
d25jYXN0PEhUTUxCUkVsZW1lbnQ+KCpub2RlKS5mYXN0R2V0QXR0cmlidXRlKGNsYXNzQXR0cikg
PT0gaW50ZXJjaGFuZ2VOZXdsaW5lQ2xhc3NTdHJpbmc7CiB9CiAKLXN0YXRpYyBib29sIGlzSW50
ZXJjaGFuZ2VDb252ZXJ0ZWRTcGFjZVNwYW4oY29uc3QgTm9kZSAqbm9kZSkKK3N0YXRpYyBib29s
IGlzSW50ZXJjaGFuZ2VDb252ZXJ0ZWRTcGFjZVNwYW4oY29uc3QgTm9kZSogbm9kZSkKIHsKICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBjb252ZXJ0ZWRTcGFjZVNwYW5DbGFzc1N0
cmluZyhBcHBsZUNvbnZlcnRlZFNwYWNlKTsKLSAgICByZXR1cm4gbm9kZS0+aXNIVE1MRWxlbWVu
dCgpICYmIAotICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudCAqPihub2Rl
KS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gY29udmVydGVkU3BhY2VTcGFuQ2xhc3NTdHJp
bmc7CisgICAgcmV0dXJuIGlzPEhUTUxFbGVtZW50Pihub2RlKSAmJiBkb3duY2FzdDxIVE1MRWxl
bWVudD4oKm5vZGUpLmZhc3RHZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSBjb252ZXJ0ZWRTcGFj
ZVNwYW5DbGFzc1N0cmluZzsKIH0KIAotc3RhdGljIFBvc2l0aW9uIHBvc2l0aW9uQXZvaWRpbmdQ
cmVjZWRpbmdOb2RlcyhQb3NpdGlvbiBwb3MpCitzdGF0aWMgUG9zaXRpb24gcG9zaXRpb25Bdm9p
ZGluZ1ByZWNlZGluZ05vZGVzKFBvc2l0aW9uIHBvc2l0aW9uKQogeworICAgIEFTU0VSVChwb3Np
dGlvbi5pc05vdE51bGwoKSk7CisKICAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IG9uIGEgYnJlYWss
IGl0J3MgcHJvYmFibHkgYSBwbGFjZWhvbGRlciBhbmQgd2Ugc2hvdWxkbid0IGNoYW5nZSBvdXIg
cG9zaXRpb24uCi0gICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChwb3MuZGVwcmVjYXRlZE5v
ZGUoKSkpCi0gICAgICAgIHJldHVybiBwb3M7CisgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVu
dCgqcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpCisgICAgICAgIHJldHVybiBwb3NpdGlvbjsK
IAogICAgIC8vIFdlIGFsc28gc3RvcCB3aGVuIGNoYW5naW5nIGJsb2NrIGZsb3cgZWxlbWVudHMg
YmVjYXVzZSBldmVuIHRob3VnaCB0aGUgdmlzdWFsIHBvc2l0aW9uIGlzIHRoZQogICAgIC8vIHNh
bWUuICBFLmcuLAogICAgIC8vICAgPGRpdj5mb29ePC9kaXY+XgogICAgIC8vIFRoZSB0d28gcG9z
aXRpb25zIGFib3ZlIGFyZSB0aGUgc2FtZSB2aXN1YWwgcG9zaXRpb24sIGJ1dCB3ZSB3YW50IHRv
IHN0YXkgaW4gdGhlIHNhbWUgYmxvY2suCi0gICAgTm9kZSogZW5jbG9zaW5nQmxvY2tOb2RlID0g
ZW5jbG9zaW5nQmxvY2socG9zLmNvbnRhaW5lck5vZGUoKSk7Ci0gICAgZm9yIChQb3NpdGlvbiBu
ZXh0UG9zaXRpb24gPSBwb3M7IG5leHRQb3NpdGlvbi5jb250YWluZXJOb2RlKCkgIT0gZW5jbG9z
aW5nQmxvY2tOb2RlOyBwb3MgPSBuZXh0UG9zaXRpb24pIHsKLSAgICAgICAgaWYgKGxpbmVCcmVh
a0V4aXN0c0F0UG9zaXRpb24ocG9zKSkKKyAgICBhdXRvKiBlbmNsb3NpbmdCbG9ja05vZGUgPSBl
bmNsb3NpbmdCbG9jayhwb3NpdGlvbi5jb250YWluZXJOb2RlKCkpOworICAgIGZvciAoUG9zaXRp
b24gbmV4dFBvc2l0aW9uID0gcG9zaXRpb247IG5leHRQb3NpdGlvbi5jb250YWluZXJOb2RlKCkg
IT0gZW5jbG9zaW5nQmxvY2tOb2RlOyBwb3NpdGlvbiA9IG5leHRQb3NpdGlvbikgeworICAgICAg
ICBpZiAobGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihwb3NpdGlvbikpCiAgICAgICAgICAgICBi
cmVhazsKIAotICAgICAgICBpZiAocG9zLmNvbnRhaW5lck5vZGUoKS0+bm9uU2hhZG93Qm91bmRh
cnlQYXJlbnROb2RlKCkpCi0gICAgICAgICAgICBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbkluUGFy
ZW50QWZ0ZXJOb2RlKHBvcy5jb250YWluZXJOb2RlKCkpOwotICAgICAgICAKLSAgICAgICAgaWYg
KG5leHRQb3NpdGlvbiA9PSBwb3MgCi0gICAgICAgICAgICB8fCBlbmNsb3NpbmdCbG9jayhuZXh0
UG9zaXRpb24uY29udGFpbmVyTm9kZSgpKSAhPSBlbmNsb3NpbmdCbG9ja05vZGUKLSAgICAgICAg
ICAgIHx8IFZpc2libGVQb3NpdGlvbihwb3MpICE9IFZpc2libGVQb3NpdGlvbihuZXh0UG9zaXRp
b24pKQorICAgICAgICBpZiAocG9zaXRpb24uY29udGFpbmVyTm9kZSgpLT5ub25TaGFkb3dCb3Vu
ZGFyeVBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgIG5leHRQb3NpdGlvbiA9IHBvc2l0aW9uSW5Q
YXJlbnRBZnRlck5vZGUocG9zaXRpb24uY29udGFpbmVyTm9kZSgpKTsKKworICAgICAgICBpZiAo
bmV4dFBvc2l0aW9uID09IHBvc2l0aW9uKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlm
IChlbmNsb3NpbmdCbG9jayhuZXh0UG9zaXRpb24uY29udGFpbmVyTm9kZSgpKSAhPSBlbmNsb3Np
bmdCbG9ja05vZGUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKFZpc2libGVQb3Np
dGlvbihwb3NpdGlvbikgIT0gVmlzaWJsZVBvc2l0aW9uKG5leHRQb3NpdGlvbikpCiAgICAgICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgcmV0dXJuIHBvczsKKyAgICByZXR1cm4gcG9zaXRpb247
CiB9CiAKIFJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQoRG9jdW1lbnQm
IGRvY3VtZW50LCBEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uKQpAQCAtMTEwMSw3ICsxMTAzLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgZnJhZ21lbnQucmVtb3ZlTm9kZShyZWZOb2RlKTsK
IAogICAgIE5vZGUqIGJsb2NrU3RhcnQgPSBlbmNsb3NpbmdCbG9jayhpbnNlcnRpb25Qb3MuZGVw
cmVjYXRlZE5vZGUoKSk7Ci0gICAgaWYgKChpc0xpc3RFbGVtZW50KHJlZk5vZGUuZ2V0KCkpIHx8
IChpc0xlZ2FjeUFwcGxlU3R5bGVTcGFuKHJlZk5vZGUuZ2V0KCkpICYmIGlzTGlzdEVsZW1lbnQo
cmVmTm9kZS0+Zmlyc3RDaGlsZCgpKSkpCisgICAgaWYgKChpc0xpc3RIVE1MRWxlbWVudChyZWZO
b2RlLmdldCgpKSB8fCAoaXNMZWdhY3lBcHBsZVN0eWxlU3BhbihyZWZOb2RlLmdldCgpKSAmJiBp
c0xpc3RIVE1MRWxlbWVudChyZWZOb2RlLT5maXJzdENoaWxkKCkpKSkKICAgICAgICAgJiYgYmxv
Y2tTdGFydCAmJiBibG9ja1N0YXJ0LT5yZW5kZXJlcigpLT5pc0xpc3RJdGVtKCkpCiAgICAgICAg
IHJlZk5vZGUgPSBpbnNlcnRBc0xpc3RJdGVtcyhkb3duY2FzdDxIVE1MRWxlbWVudD4ocmVmTm9k
ZS5nZXQoKSksIGJsb2NrU3RhcnQsIGluc2VydGlvblBvcywgaW5zZXJ0ZWROb2Rlcyk7CiAgICAg
ZWxzZSB7CkBAIC0xNDM5LDcgKzE0NDEsNyBAQCBOb2RlKiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6aW5zZXJ0QXNMaXN0SXRlbXMoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gcHJwTGlzdAogewog
ICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbGlzdEVsZW1lbnQgPSBwcnBMaXN0RWxlbWVudDsKIAot
ICAgIHdoaWxlIChsaXN0RWxlbWVudC0+aGFzT25lQ2hpbGQoKSAmJiBpc0xpc3RFbGVtZW50KGxp
c3RFbGVtZW50LT5maXJzdENoaWxkKCkpKQorICAgIHdoaWxlIChsaXN0RWxlbWVudC0+aGFzT25l
Q2hpbGQoKSAmJiBpc0xpc3RIVE1MRWxlbWVudChsaXN0RWxlbWVudC0+Zmlyc3RDaGlsZCgpKSkK
ICAgICAgICAgbGlzdEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4obGlzdEVsZW1lbnQt
PmZpcnN0Q2hpbGQoKSk7CiAKICAgICBib29sIGlzU3RhcnQgPSBpc1N0YXJ0T2ZQYXJhZ3JhcGgo
aW5zZXJ0UG9zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVj
a2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAppbmRleCAy
ZmI4MzU4MTUwNzRlOWMwMjNiNzYwMmQ5Njc0MDE0YjFkNGYzNmVkLi40YjEwMDBhOGRlODlmMGYx
OTY1ZGI3MzM5ZDZlMzBkZGM1MzYzY2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENo
ZWNrZXIuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgot
I2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUG9zaXRpb25J
dGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IDAxNjFjZmJkNTM3NTI4NzQwZWYwZjAwNzI5NmY2MThj
OWYxODZjMjUuLjRjMjc4NTQ2OTNlNTUyMzU4YmRkYmQxYzZjMzU4YWRmYmIzNGNhYWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTEyNjEsMTAgKzEyNjEsNyBA
QCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2UoKQogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRXhpdCBlbXB0eSBjb250YWluZXJzIGFzIHdlIHBh
c3Mgb3ZlciB0aGVtIG9yIGNvbnRhaW5lcnMKICAgICAgICAgICAgIC8vIHdoZXJlIFtjb250YWlu
ZXIsIDBdIGlzIHdoZXJlIHdlIHN0YXJ0ZWQgaXRlcmF0aW5nLgotICAgICAgICAgICAgaWYgKCFt
X2hhbmRsZWROb2RlCi0gICAgICAgICAgICAgICAgICAgICYmIGNhbkhhdmVDaGlsZHJlbkZvckVk
aXRpbmcobV9ub2RlKQotICAgICAgICAgICAgICAgICAgICAmJiBtX25vZGUtPnBhcmVudE5vZGUo
KQotICAgICAgICAgICAgICAgICAgICAmJiAoIW1fbm9kZS0+bGFzdENoaWxkKCkgfHwgKG1fbm9k
ZSA9PSBtX2VuZENvbnRhaW5lciAmJiAhbV9lbmRPZmZzZXQpKSkgeworICAgICAgICAgICAgaWYg
KCFtX2hhbmRsZWROb2RlICYmIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoKm1fbm9kZSkgICYm
IG1fbm9kZS0+cGFyZW50Tm9kZSgpICYmICghbV9ub2RlLT5sYXN0Q2hpbGQoKSB8fCAobV9ub2Rl
ID09IG1fZW5kQ29udGFpbmVyICYmICFtX2VuZE9mZnNldCkpKSB7CiAgICAgICAgICAgICAgICAg
ZXhpdE5vZGUoKTsKICAgICAgICAgICAgICAgICBpZiAobV9wb3NpdGlvbk5vZGUpIHsKICAgICAg
ICAgICAgICAgICAgICAgbV9oYW5kbGVkTm9kZSA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAppbmRleCBjNTM2NTljYTcxNTVkN2Q4YjljZDQwMDZi
MTVkN2E0ZDcyNjQ5OWI4Li43MmI4ZmE5MTU0NTFjOTdiNDY1NWNiNjZiYWU3NjAyMGVhMGRjMjMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKQEAgLTk1
LDcgKzk1LDcgQEAgVmlzaWJsZVNlbGVjdGlvbjo6VmlzaWJsZVNlbGVjdGlvbihjb25zdCBSYW5n
ZSYgcmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbAogCiBWaXNpYmxlU2VsZWN0aW9uIFZp
c2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShOb2RlKiBub2RlKQog
ewotICAgIEFTU0VSVCghZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpKTsKKyAgICBBU1NFUlQo
IWVkaXRpbmdJZ25vcmVzQ29udGVudCgqbm9kZSkpOwogICAgIHJldHVybiBWaXNpYmxlU2VsZWN0
aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUobm9kZSksIGxhc3RQb3NpdGlvbkluTm9kZShub2RlKSwg
RE9XTlNUUkVBTSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVVuaXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcApp
bmRleCAzNjQ1ZmUxMTI4N2NlMjZiZTdlMjAzYTcyYWFhNjc2NTRlYzkxMjA4Li5kYTg5MDcxYTc1
NTc4ODRlOTRmZjlhNWM5YmNmMmI4ZWM1MzM5ZDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9W
aXNpYmxlVW5pdHMuY3BwCkBAIC0xMDI4LDcgKzEwMjgsNyBAQCBWaXNpYmxlUG9zaXRpb24gcHJl
dmlvdXNMaW5lUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24s
IGludAogICAgICAgICBJbnRQb2ludCBwb2ludEluTGluZSA9IGFic29sdXRlTGluZURpcmVjdGlv
blBvaW50VG9Mb2NhbFBvaW50SW5CbG9jaygqcm9vdCwgbGluZURpcmVjdGlvblBvaW50KTsKICAg
ICAgICAgUmVuZGVyT2JqZWN0JiByZW5kZXJlciA9IHJvb3QtPmNsb3Nlc3RMZWFmQ2hpbGRGb3JQ
b2ludChwb2ludEluTGluZSwgaXNFZGl0YWJsZVBvc2l0aW9uKHApKS0+cmVuZGVyZXIoKTsKICAg
ICAgICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLm5vZGUoKTsKLSAgICAgICAgaWYgKG5vZGUgJiYg
ZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpKQorICAgICAgICBpZiAobm9kZSAmJiBlZGl0aW5n
SWdub3Jlc0NvbnRlbnQoKm5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uSW5QYXJl
bnRCZWZvcmVOb2RlKG5vZGUpOwogICAgICAgICByZXR1cm4gcmVuZGVyZXIucG9zaXRpb25Gb3JQ
b2ludChwb2ludEluTGluZSwgbnVsbHB0cik7CiAgICAgfQpAQCAtMTA4Niw3ICsxMDg2LDcgQEAg
VmlzaWJsZVBvc2l0aW9uIG5leHRMaW5lUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2
aXNpYmxlUG9zaXRpb24sIGludCBsaW4KICAgICAgICAgSW50UG9pbnQgcG9pbnRJbkxpbmUgPSBh
YnNvbHV0ZUxpbmVEaXJlY3Rpb25Qb2ludFRvTG9jYWxQb2ludEluQmxvY2soKnJvb3QsIGxpbmVE
aXJlY3Rpb25Qb2ludCk7CiAgICAgICAgIFJlbmRlck9iamVjdCYgcmVuZGVyZXIgPSByb290LT5j
bG9zZXN0TGVhZkNoaWxkRm9yUG9pbnQocG9pbnRJbkxpbmUsIGlzRWRpdGFibGVQb3NpdGlvbihw
KSktPnJlbmRlcmVyKCk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSByZW5kZXJlci5ub2RlKCk7Ci0g
ICAgICAgIGlmIChub2RlICYmIGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSkKKyAgICAgICAg
aWYgKG5vZGUgJiYgZWRpdGluZ0lnbm9yZXNDb250ZW50KCpub2RlKSkKICAgICAgICAgICAgIHJl
dHVybiBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShub2RlKTsKICAgICAgICAgcmV0dXJuIHJl
bmRlcmVyLnBvc2l0aW9uRm9yUG9pbnQocG9pbnRJbkxpbmUsIG51bGxwdHIpOwogICAgIH0KQEAg
LTExOTgsNyArMTE5OCw3IEBAIE5vZGUqIGZpbmRTdGFydE9mUGFyYWdyYXBoKE5vZGUqIHN0YXJ0
Tm9kZSwgTm9kZSogaGlnaGVzdFJvb3QsIE5vZGUqIHN0YXJ0QmxvY2ssCiAgICAgICAgICAgICBu
b2RlID0gbjsKICAgICAgICAgICAgIG9mZnNldCA9IDA7CiAgICAgICAgICAgICBuID0gTm9kZVRy
YXZlcnNhbDo6cHJldmlvdXNQb3N0T3JkZXIoKm4sIHN0YXJ0QmxvY2spOwotICAgICAgICB9IGVs
c2UgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChuKSB8fCBpc1JlbmRlcmVkVGFibGUobikpIHsK
KyAgICAgICAgfSBlbHNlIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKm4pIHx8IGlzUmVuZGVy
ZWRUYWJsZShuKSkgewogICAgICAgICAgICAgbm9kZSA9IG47CiAgICAgICAgICAgICB0eXBlID0g
UG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3I7CiAgICAgICAgICAgICBuID0gbi0+cHJl
dmlvdXNTaWJsaW5nKCkgPyBuLT5wcmV2aW91c1NpYmxpbmcoKSA6IE5vZGVUcmF2ZXJzYWw6OnBy
ZXZpb3VzUG9zdE9yZGVyKCpuLCBzdGFydEJsb2NrKTsKQEAgLTEyNjAsNyArMTI2MCw3IEBAIE5v
ZGUqIGZpbmRFbmRPZlBhcmFncmFwaChOb2RlKiBzdGFydE5vZGUsIE5vZGUqIGhpZ2hlc3RSb290
LCBOb2RlKiBzdGF5SW5zaWRlQmxvCiAgICAgICAgICAgICBub2RlID0gbjsKICAgICAgICAgICAg
IG9mZnNldCA9IHItPmNhcmV0TWF4T2Zmc2V0KCk7CiAgICAgICAgICAgICBuID0gTm9kZVRyYXZl
cnNhbDo6bmV4dCgqbiwgc3RheUluc2lkZUJsb2NrKTsKLSAgICAgICAgfSBlbHNlIGlmIChlZGl0
aW5nSWdub3Jlc0NvbnRlbnQobikgfHwgaXNSZW5kZXJlZFRhYmxlKG4pKSB7CisgICAgICAgIH0g
ZWxzZSBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KCpuKSB8fCBpc1JlbmRlcmVkVGFibGUobikp
IHsKICAgICAgICAgICAgIG5vZGUgPSBuOwogICAgICAgICAgICAgdHlwZSA9IFBvc2l0aW9uOjpQ
b3NpdGlvbklzQWZ0ZXJBbmNob3I7CiAgICAgICAgICAgICBuID0gTm9kZVRyYXZlcnNhbDo6bmV4
dFNraXBwaW5nQ2hpbGRyZW4oKm4sIHN0YXlJbnNpZGVCbG9jayk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvaHRtbGVkaXRpbmcuY3BwCmluZGV4IDRlNWJmNjY0YTJiOGVmMTRlNTBlMTAyNDQwMzcyNzhi
NGRhMmJhN2MuLjk2MzJlYjA3YTM1NDE3NmNhMjI3MDg4MzAwZTlkZmEyYzA3NjZlOWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNywgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVy
TmFtZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjMsMTAgKzY0LDE1IEBAIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHN0YXRpYyBib29sIGlzVmlzaWJseUFkamFjZW50KGNv
bnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKIAorYm9vbCBjYW5IYXZlQ2hpbGRyZW5G
b3JFZGl0aW5nKGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgcmV0dXJuICFpczxUZXh0Pihub2Rl
KSAmJiBub2RlLmNhbkNvbnRhaW5SYW5nZUVuZFBvaW50KCk7Cit9CisKIC8vIEF0b21pYyBtZWFu
cyB0aGF0IHRoZSBub2RlIGhhcyBubyBjaGlsZHJlbiwgb3IgaGFzIGNoaWxkcmVuIHdoaWNoIGFy
ZSBpZ25vcmVkIGZvciB0aGUgcHVycG9zZXMgb2YgZWRpdGluZy4KIGJvb2wgaXNBdG9taWNOb2Rl
KGNvbnN0IE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0dXJuIG5vZGUgJiYgKCFub2RlLT5oYXNDaGls
ZE5vZGVzKCkgfHwgZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpKTsKKyAgICByZXR1cm4gbm9k
ZSAmJiAoIW5vZGUtPmhhc0NoaWxkTm9kZXMoKSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKm5v
ZGUpKTsKIH0KIAogLy8gQ29tcGFyZSB0d28gcG9zaXRpb25zLCB0YWtpbmcgaW50byBhY2NvdW50
IHRoZSBwb3NzaWJpbGl0eSB0aGF0IG9uZSBvciBib3RoCkBAIC0zNzMsOCArMzc5LDkgQEAgaW50
IGxhc3RPZmZzZXRGb3JFZGl0aW5nKGNvbnN0IE5vZGUmIG5vZGUpCiAgICAgaWYgKG5vZGUuaGFz
Q2hpbGROb2RlcygpKQogICAgICAgICByZXR1cm4gbm9kZS5jb3VudENoaWxkTm9kZXMoKTsKIAot
ICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIHByZWVtcHQgdGhlIGNvdW50Q2hpbGROb2RlcygpIGZv
ciwgZS5nLiwgc2VsZWN0IG5vZGVzICh3aGF0IGRvZXMgdGhpcyBtZWFuKT8KLSAgICBpZiAoZWRp
dGluZ0lnbm9yZXNDb250ZW50KCZub2RlKSkKKyAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBwcmVl
bXB0IHRoZSBjb3VudENoaWxkTm9kZXMoKSBmb3IsIGUuZy4sIHNlbGVjdCBub2Rlcy4KKyAgICAv
LyBGSVhNRTogV2hhdCBkb2VzIHRoZSBjb21tZW50IGFib3ZlIG1lYW4/CisgICAgaWYgKGVkaXRp
bmdJZ25vcmVzQ29udGVudChub2RlKSkKICAgICAgICAgcmV0dXJuIDE7CiAKICAgICByZXR1cm4g
MDsKQEAgLTM4MiwzMyArMzg5LDM3IEBAIGludCBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhjb25zdCBO
b2RlJiBub2RlKQogCiBTdHJpbmcgc3RyaW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNwYWNlKGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBib29sIHN0YXJ0SXNTdGFydE9mUGFyYWdyYXBoLCBib29sIGVuZElz
RW5kT2ZQYXJhZ3JhcGgpCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiByZWJhbGFuY2VkU3RyaW5nKHN0
cmluZy5sZW5ndGgoKSk7Ci0gICAgU3RyaW5nVmlldyhzdHJpbmcpLmdldENoYXJhY3RlcnNXaXRo
VXBjb252ZXJ0KHJlYmFsYW5jZWRTdHJpbmcuZGF0YSgpKTsKLQotICAgIGJvb2wgY2hhbmdlZFNv
bWV0aGluZyA9IGZhbHNlOworICAgIFN0cmluZ0J1aWxkZXIgcmViYWxhbmNlZFN0cmluZzsKIAog
ICAgIGJvb2wgcHJldmlvdXNDaGFyYWN0ZXJXYXNTcGFjZSA9IGZhbHNlOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcmViYWxhbmNlZFN0cmluZy5zaXplKCk7IGkrKykgewotICAgICAgICBp
ZiAoIWRlcHJlY2F0ZWRJc0VkaXRpbmdXaGl0ZXNwYWNlKHJlYmFsYW5jZWRTdHJpbmdbaV0pKSB7
CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBhdXRvIGNoYXJhY3RlciA9IHN0
cmluZ1tpXTsKKyAgICAgICAgaWYgKCFkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVzcGFjZShjaGFy
YWN0ZXIpKSB7CiAgICAgICAgICAgICBwcmV2aW91c0NoYXJhY3Rlcldhc1NwYWNlID0gZmFsc2U7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAocHJldmlvdXND
aGFyYWN0ZXJXYXNTcGFjZSB8fCAoIWkgJiYgc3RhcnRJc1N0YXJ0T2ZQYXJhZ3JhcGgpIHx8IChp
ICsgMSA9PSByZWJhbGFuY2VkU3RyaW5nLnNpemUoKSAmJiBlbmRJc0VuZE9mUGFyYWdyYXBoKSkg
ewotICAgICAgICAgICAgaWYgKHJlYmFsYW5jZWRTdHJpbmdbaV0gIT0gbm9CcmVha1NwYWNlKSB7
Ci0gICAgICAgICAgICAgICAgcmViYWxhbmNlZFN0cmluZ1tpXSA9IG5vQnJlYWtTcGFjZTsKLSAg
ICAgICAgICAgICAgICBjaGFuZ2VkU29tZXRoaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgTENoYXIgc2VsZWN0ZWRXaGl0ZXNwYWNlQ2hhcmFjdGVyOworICAgICAgICBpZiAocHJl
dmlvdXNDaGFyYWN0ZXJXYXNTcGFjZSB8fCAoIWkgJiYgc3RhcnRJc1N0YXJ0T2ZQYXJhZ3JhcGgp
IHx8IChpID09IGxlbmd0aCAtIDEgJiYgZW5kSXNFbmRPZlBhcmFncmFwaCkpIHsKKyAgICAgICAg
ICAgIHNlbGVjdGVkV2hpdGVzcGFjZUNoYXJhY3RlciA9IG5vQnJlYWtTcGFjZTsKICAgICAgICAg
ICAgIHByZXZpb3VzQ2hhcmFjdGVyV2FzU3BhY2UgPSBmYWxzZTsKICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGlmIChyZWJhbGFuY2VkU3RyaW5nW2ldICE9ICcgJykgewotICAgICAgICAg
ICAgICAgIHJlYmFsYW5jZWRTdHJpbmdbaV0gPSAnICc7Ci0gICAgICAgICAgICAgICAgY2hhbmdl
ZFNvbWV0aGluZyA9IHRydWU7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBzZWxlY3RlZFdo
aXRlc3BhY2VDaGFyYWN0ZXIgPSAnICc7CiAgICAgICAgICAgICBwcmV2aW91c0NoYXJhY3Rlcldh
c1NwYWNlID0gdHJ1ZTsKICAgICAgICAgfQorICAgICAgICBpZiAoY2hhcmFjdGVyID09IHNlbGVj
dGVkV2hpdGVzcGFjZUNoYXJhY3RlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBy
ZWJhbGFuY2VkU3RyaW5nLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOworICAgICAgICByZWJhbGFu
Y2VkU3RyaW5nLmFwcGVuZChzdHJpbmcsIHJlYmFsYW5jZWRTdHJpbmcubGVuZ3RoKCksIGkgLSBy
ZWJhbGFuY2VkU3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgcmViYWxhbmNlZFN0cmluZy5hcHBl
bmQoc2VsZWN0ZWRXaGl0ZXNwYWNlQ2hhcmFjdGVyKTsKICAgICB9CiAKLSAgICByZXR1cm4gY2hh
bmdlZFNvbWV0aGluZyA/IFN0cmluZzo6YWRvcHQocmViYWxhbmNlZFN0cmluZykgOiBzdHJpbmc7
CisgICAgaWYgKCFyZWJhbGFuY2VkU3RyaW5nLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gc3Ry
aW5nOworCisgICAgcmViYWxhbmNlZFN0cmluZy5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKKyAg
ICByZWJhbGFuY2VkU3RyaW5nLmFwcGVuZChzdHJpbmcsIHJlYmFsYW5jZWRTdHJpbmcubGVuZ3Ro
KCksIGxlbmd0aCAtIHJlYmFsYW5jZWRTdHJpbmcubGVuZ3RoKCkpOworICAgIHJldHVybiByZWJh
bGFuY2VkU3RyaW5nLnRvU3RyaW5nKCk7CiB9CiAKIGJvb2wgaXNUYWJsZVN0cnVjdHVyZU5vZGUo
Y29uc3QgTm9kZSogbm9kZSkKQEAgLTQyMyw3ICs0MzQsNyBAQCBjb25zdCBTdHJpbmcmIG5vbkJy
ZWFraW5nU3BhY2VTdHJpbmcoKQogICAgIHJldHVybiBub25CcmVha2luZ1NwYWNlU3RyaW5nOwog
fQogCi1zdGF0aWMgYm9vbCBpc1NwZWNpYWxFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCitzdGF0
aWMgYm9vbCBpc1NwZWNpYWxIVE1MRWxlbWVudChjb25zdCBOb2RlKiBub2RlKQogewogICAgIGlm
ICghaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NTEs
NyArNDYyLDcgQEAgc3RhdGljIEhUTUxFbGVtZW50KiBmaXJzdEluU3BlY2lhbEVsZW1lbnQoY29u
c3QgUG9zaXRpb24mIHBvc2l0aW9uKQogewogICAgIGF1dG8qIHJvb3RFZGl0YWJsZUVsZW1lbnQg
PSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBm
b3IgKE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOyBub2RlICYmIG5vZGUt
PnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSByb290RWRpdGFibGVFbGVtZW50OyBub2RlID0gbm9k
ZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmICghaXNTcGVjaWFsRWxlbWVudChub2RlKSkK
KyAgICAgICAgaWYgKCFpc1NwZWNpYWxIVE1MRWxlbWVudChub2RlKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gdlBvcyhwb3NpdGlvbiwgRE9XTlNUUkVB
TSk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBmaXJzdEluRWxlbWVudChmaXJzdFBvc2l0aW9u
SW5PckJlZm9yZU5vZGUobm9kZSksIERPV05TVFJFQU0pOwpAQCAtNDY1LDcgKzQ3Niw3IEBAIHN0
YXRpYyBIVE1MRWxlbWVudCogbGFzdEluU3BlY2lhbEVsZW1lbnQoY29uc3QgUG9zaXRpb24mIHBv
c2l0aW9uKQogewogICAgIGF1dG8qIHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBwb3NpdGlvbi5jb250
YWluZXJOb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBmb3IgKE5vZGUqIG5vZGUg
PSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOyBub2RlICYmIG5vZGUtPnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKSA9PSByb290RWRpdGFibGVFbGVtZW50OyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgp
KSB7Ci0gICAgICAgIGlmICghaXNTcGVjaWFsRWxlbWVudChub2RlKSkKKyAgICAgICAgaWYgKCFp
c1NwZWNpYWxIVE1MRWxlbWVudChub2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gdlBvcyhwb3NpdGlvbiwgRE9XTlNUUkVBTSk7CiAgICAgICAgIFZp
c2libGVQb3NpdGlvbiBsYXN0SW5FbGVtZW50KGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUobm9k
ZSksIERPV05TVFJFQU0pOwpAQCAtNTY0LDE0ICs1NzUsMTQgQEAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVQb3NpdGlvbkFmdGVyTm9kZShOb2RlJiBub2RlKQogICAgIHJldHVybiBwb3NpdGlvbklu
UGFyZW50QWZ0ZXJOb2RlKCZub2RlKTsKIH0KIAotYm9vbCBpc0xpc3RFbGVtZW50KE5vZGUqIG5v
ZGUpCitib29sIGlzTGlzdEhUTUxFbGVtZW50KE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0dXJuIG5v
ZGUgJiYgKG5vZGUtPmhhc1RhZ05hbWUodWxUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUob2xUYWcp
IHx8IG5vZGUtPmhhc1RhZ05hbWUoZGxUYWcpKTsKKyAgICByZXR1cm4gbm9kZSAmJiAoaXM8SFRN
TFVMaXN0RWxlbWVudD4oKm5vZGUpIHx8IGlzPEhUTUxPTGlzdEVsZW1lbnQ+KCpub2RlKSB8fCBp
czxIVE1MRExpc3RFbGVtZW50Pigqbm9kZSkpOwogfQogCiBib29sIGlzTGlzdEl0ZW0oY29uc3Qg
Tm9kZSogbm9kZSkKIHsKLSAgICByZXR1cm4gbm9kZSAmJiAoaXNMaXN0RWxlbWVudChub2RlLT5w
YXJlbnROb2RlKCkpIHx8IChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlz
TGlzdEl0ZW0oKSkpOworICAgIHJldHVybiBub2RlICYmIChpc0xpc3RIVE1MRWxlbWVudChub2Rl
LT5wYXJlbnROb2RlKCkpIHx8IChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCkt
PmlzTGlzdEl0ZW0oKSkpOwogfQogCiBFbGVtZW50KiBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhj
b25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpCkBA
IC01OTAsMTIgKzYwMSwxMiBAQCBFbGVtZW50KiBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhjb25z
dCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFF1YWxpZmllZE5hbWUmCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLU5vZGUqIGVuY2xvc2luZ05vZGVPZlR5cGUoY29uc3QgUG9zaXRpb24mIHAs
IGJvb2wgKCpub2RlSXNPZlR5cGUpKGNvbnN0IE5vZGUqKSwgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3Np
bmdSdWxlIHJ1bGUpCitOb2RlKiBlbmNsb3NpbmdOb2RlT2ZUeXBlKGNvbnN0IFBvc2l0aW9uJiBw
b3NpdGlvbiwgYm9vbCAoKm5vZGVJc09mVHlwZSkoY29uc3QgTm9kZSopLCBFZGl0aW5nQm91bmRh
cnlDcm9zc2luZ1J1bGUgcnVsZSkKIHsKICAgICAvLyBGSVhNRTogc3VwcG9ydCBDYW5Ta2lwQ3Jv
c3NFZGl0aW5nQm91bmRhcnkKICAgICBBU1NFUlQocnVsZSA9PSBDYW5Dcm9zc0VkaXRpbmdCb3Vu
ZGFyeSB8fCBydWxlID09IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKLSAgICBhdXRvKiBy
b290ID0gcnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSA/IGhpZ2hlc3RFZGl0YWJs
ZVJvb3QocCkgOiAwOwotICAgIGZvciAoTm9kZSogbiA9IHAuZGVwcmVjYXRlZE5vZGUoKTsgbjsg
biA9IG4tPnBhcmVudE5vZGUoKSkgeworICAgIGF1dG8qIHJvb3QgPSBydWxlID09IENhbm5vdENy
b3NzRWRpdGluZ0JvdW5kYXJ5ID8gaGlnaGVzdEVkaXRhYmxlUm9vdChwb3NpdGlvbikgOiBudWxs
cHRyOworICAgIGZvciAoTm9kZSogbiA9IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7IG47IG4g
PSBuLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgLy8gRG9uJ3QgcmV0dXJuIGEgbm9uLWVkaXRh
YmxlIG5vZGUgaWYgdGhlIGlucHV0IHBvc2l0aW9uIHdhcyBlZGl0YWJsZSwgc2luY2UKICAgICAg
ICAgLy8gdGhlIGNhbGxlcnMgZnJvbSBlZGl0aW5nIHdpbGwgbm8gZG91YnQgd2FudCB0byBwZXJm
b3JtIGVkaXRpbmcgaW5zaWRlIHRoZSByZXR1cm5lZCBub2RlLgogICAgICAgICBpZiAocm9vdCAm
JiAhbi0+aGFzRWRpdGFibGVTdHlsZSgpKQpAQCAtNjA4LDExICs2MTksMTEgQEAgTm9kZSogZW5j
bG9zaW5nTm9kZU9mVHlwZShjb25zdCBQb3NpdGlvbiYgcCwgYm9vbCAoKm5vZGVJc09mVHlwZSko
Y29uc3QgTm9kZSopLAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1Ob2RlKiBoaWdoZXN0RW5j
bG9zaW5nTm9kZU9mVHlwZShjb25zdCBQb3NpdGlvbiYgcCwgYm9vbCAoKm5vZGVJc09mVHlwZSko
Y29uc3QgTm9kZSopLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSwgTm9kZSogc3Rh
eVdpdGhpbikKK05vZGUqIGhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBlKGNvbnN0IFBvc2l0aW9u
JiBwb3NpdGlvbiwgYm9vbCAoKm5vZGVJc09mVHlwZSkoY29uc3QgTm9kZSopLCBFZGl0aW5nQm91
bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSwgTm9kZSogc3RheVdpdGhpbikKIHsKICAgICBOb2RlKiBo
aWdoZXN0ID0gbnVsbHB0cjsKLSAgICBhdXRvKiByb290ID0gcnVsZSA9PSBDYW5ub3RDcm9zc0Vk
aXRpbmdCb3VuZGFyeSA/IGhpZ2hlc3RFZGl0YWJsZVJvb3QocCkgOiAwOwotICAgIGZvciAoTm9k
ZSogbiA9IHAuY29udGFpbmVyTm9kZSgpOyBuICYmIG4gIT0gc3RheVdpdGhpbjsgbiA9IG4tPnBh
cmVudE5vZGUoKSkgeworICAgIGF1dG8qIHJvb3QgPSBydWxlID09IENhbm5vdENyb3NzRWRpdGlu
Z0JvdW5kYXJ5ID8gaGlnaGVzdEVkaXRhYmxlUm9vdChwb3NpdGlvbikgOiBudWxscHRyOworICAg
IGZvciAoTm9kZSogbiA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsgbiAmJiBuICE9IHN0YXlX
aXRoaW47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKHJvb3QgJiYgIW4tPmhh
c0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAobm9k
ZUlzT2ZUeXBlKG4pKQpAQCAtNjkzLDcgKzcwNCw3IEBAIE5vZGUqIGVuY2xvc2luZ0xpc3RDaGls
ZChOb2RlICpub2RlKQogICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIGluYXBw
cm9wcmlhdGVseSBuYW1lZCBzaW5jZSBpdCBzdGFydHMgd2l0aCBub2RlIGluc3RlYWQgb2Ygbm9k
ZS0+cGFyZW50Tm9kZSgpCiAgICAgZm9yIChOb2RlKiBuID0gbm9kZTsgbiAmJiBuLT5wYXJlbnRO
b2RlKCk7IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUo
bGlUYWcpIHx8IChpc0xpc3RFbGVtZW50KG4tPnBhcmVudE5vZGUoKSkgJiYgbiAhPSByb290KSkK
KyAgICAgICAgaWYgKGlzPEhUTUxMSUVsZW1lbnQ+KCpuKSB8fCAoaXNMaXN0SFRNTEVsZW1lbnQo
bi0+cGFyZW50Tm9kZSgpKSAmJiBuICE9IHJvb3QpKQogICAgICAgICAgICAgcmV0dXJuIG47CiAg
ICAgICAgIGlmIChuID09IHJvb3QgfHwgaXNUYWJsZUNlbGwobikpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTcwNiw3ICs3MTcsNyBAQCBzdGF0aWMgSFRNTEVsZW1lbnQqIGVtYmVk
ZGVkU3VibGlzdChOb2RlKiBsaXN0SXRlbSkKIHsKICAgICAvLyBDaGVjayB0aGUgRE9NIHNvIHRo
YXQgd2UnbGwgZmluZCBjb2xsYXBzZWQgc3VibGlzdHMgd2l0aG91dCByZW5kZXJlcnMuCiAgICAg
Zm9yIChOb2RlKiBuID0gbGlzdEl0ZW0tPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJs
aW5nKCkpIHsKLSAgICAgICAgaWYgKGlzTGlzdEVsZW1lbnQobikpCisgICAgICAgIGlmIChpc0xp
c3RIVE1MRWxlbWVudChuKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MRWxlbWVu
dD4obik7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwpAQCAtNzE2LDcgKzcyNyw3IEBAIHN0
YXRpYyBOb2RlKiBhcHBlbmRlZFN1Ymxpc3QoTm9kZSogbGlzdEl0ZW0pCiB7CiAgICAgLy8gQ2hl
Y2sgdGhlIERPTSBzbyB0aGF0IHdlJ2xsIGZpbmQgY29sbGFwc2VkIHN1Ymxpc3RzIHdpdGhvdXQg
cmVuZGVyZXJzLgogICAgIGZvciAoTm9kZSogbiA9IGxpc3RJdGVtLT5uZXh0U2libGluZygpOyBu
OyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoaXNMaXN0RWxlbWVudChuKSkK
KyAgICAgICAgaWYgKGlzTGlzdEhUTUxFbGVtZW50KG4pKQogICAgICAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxFbGVtZW50PihuKTsKICAgICAgICAgaWYgKGlzTGlzdEl0ZW0obGlzdEl0ZW0p
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05OTQsOSArMTAwNSwxMCBAQCBpbnQg
Y2FyZXRNaW5PZmZzZXQoY29uc3QgTm9kZSYgbm9kZSkKIGludCBjYXJldE1heE9mZnNldChjb25z
dCBOb2RlJiBub2RlKQogewogICAgIC8vIEZvciByZW5kZXJlZCB0ZXh0IG5vZGVzLCByZXR1cm4g
dGhlIGxhc3QgcG9zaXRpb24gdGhhdCBhIGNhcmV0IGNvdWxkIG9jY3VweS4KLSAgICBpZiAobm9k
ZS5pc1RleHROb2RlKCkgJiYgbm9kZS5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gbm9kZS5y
ZW5kZXJlcigpLT5jYXJldE1heE9mZnNldCgpOwotICAgIC8vIEZvciBjb250YWluZXJzIHJldHVy
biB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuLiBGb3Igb3RoZXJzIGRvIHRoZSBzYW1lIGFzIGFib3Zl
LgorICAgIGlmIChpczxUZXh0Pihub2RlKSkgeworICAgICAgICBpZiAoYXV0byogcmVuZGVyZXIg
PSBkb3duY2FzdDxUZXh0Pihub2RlKS5yZW5kZXJlcigpKQorICAgICAgICAgICAgcmV0dXJuIHJl
bmRlcmVyLT5jYXJldE1heE9mZnNldCgpOworICAgIH0KICAgICByZXR1cm4gbGFzdE9mZnNldEZv
ckVkaXRpbmcobm9kZSk7CiB9CiAKQEAgLTEyMTYsOSArMTIyOCw5IEBAIEVsZW1lbnQqIGRlcHJl
Y2F0ZWRFbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KE5vZGUqIG5vZGUpCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjYXJldFJlbmRlcnNJbnNpZGVOb2RlKE5v
ZGUqIG5vZGUpCitzdGF0aWMgaW5saW5lIGJvb2wgY2FyZXRSZW5kZXJzSW5zaWRlTm9kZShOb2Rl
JiBub2RlKQogewotICAgIHJldHVybiBub2RlICYmICFpc1JlbmRlcmVkVGFibGUobm9kZSkgJiYg
IWVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKTsKKyAgICByZXR1cm4gIWlzUmVuZGVyZWRUYWJs
ZSgmbm9kZSkgJiYgIWVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKTsKIH0KIAogUmVuZGVyQmxv
Y2sqIHJlbmRlcmVyRm9yQ2FyZXRQYWludGluZyhOb2RlKiBub2RlKQpAQCAtMTIzMSw3ICsxMjQz
LDcgQEAgUmVuZGVyQmxvY2sqIHJlbmRlcmVyRm9yQ2FyZXRQYWludGluZyhOb2RlKiBub2RlKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIElmIGNhcmV0Tm9kZSBpcyBhIGJsb2Nr
IGFuZCBjYXJldCBpcyBpbnNpZGUgaXQsIHRoZW4gY2FyZXQgc2hvdWxkIGJlIHBhaW50ZWQgYnkg
dGhhdCBibG9jay4KLSAgICBib29sIHBhaW50ZWRCeUJsb2NrID0gaXM8UmVuZGVyQmxvY2tGbG93
PigqcmVuZGVyZXIpICYmIGNhcmV0UmVuZGVyc0luc2lkZU5vZGUobm9kZSk7CisgICAgYm9vbCBw
YWludGVkQnlCbG9jayA9IGlzPFJlbmRlckJsb2NrRmxvdz4oKnJlbmRlcmVyKSAmJiBjYXJldFJl
bmRlcnNJbnNpZGVOb2RlKCpub2RlKTsKICAgICByZXR1cm4gcGFpbnRlZEJ5QmxvY2sgPyBkb3du
Y2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpIDogcmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKaW5kZXggM2Y2N2U4ODJjNzZl
MzRlNzBkMGZiMzM5MjVhMzFmZWQ3NjViMDY1Ni4uMDdiMGYxMDcyZTEzMDA0NDE3N2JhODUyZTUz
NDkxYjBlMjdiMjU5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRp
dGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaApAQCAtNzEs
MTQgKzcxLDEzIEBAIGludCBjYXJldE1heE9mZnNldChjb25zdCBOb2RlJik7CiBib29sIGhhc0Vk
aXRhYmxlU3R5bGUoY29uc3QgTm9kZSYsIEVkaXRhYmxlVHlwZSk7CiBib29sIGlzRWRpdGFibGVO
b2RlKGNvbnN0IE5vZGUmKTsKIAotLy8gRklYTUU6IGVkaXRpbmdJZ25vcmVzQ29udGVudCwgY2Fu
SGF2ZUNoaWxkcmVuRm9yRWRpdGluZywgYW5kIGlzQXRvbWljTm9kZSBzaG91bGQgYmUgcmVuYW1l
ZCB0byBiZXR0ZXIgcmVmbGVjdCB0aGVpciB1c2FnZS4KKy8vIEZJWE1FOiBlZGl0aW5nSWdub3Jl
c0NvbnRlbnQsIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcsIGFuZCBpc0F0b21pY05vZGUgc2hv
dWxkIGJlIG5hbWVkIHRvIGNsYXJpZnkgaG93IHRoZXkgZGlmZmVyLgogCiAvLyBSZXR1cm5zIHRy
dWUgZm9yIG5vZGVzIHRoYXQgZWl0aGVyIGhhdmUgbm8gY29udGVudCwgb3IgaGF2ZSBjb250ZW50
IHRoYXQgaXMgaWdub3JlZCAoc2tpcHBlZCBvdmVyKSB3aGlsZSBlZGl0aW5nLgogLy8gVGhlcmUg
YXJlIG5vIFZpc2libGVQb3NpdGlvbnMgaW5zaWRlIHRoZXNlIG5vZGVzLgotYm9vbCBlZGl0aW5n
SWdub3Jlc0NvbnRlbnQoY29uc3QgTm9kZSopOwotCi1ib29sIGNhbkhhdmVDaGlsZHJlbkZvckVk
aXRpbmcoY29uc3QgTm9kZSopOworYm9vbCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoY29uc3QgTm9k
ZSYpOwogCitib29sIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoY29uc3QgTm9kZSYpOwogYm9v
bCBpc0F0b21pY05vZGUoY29uc3QgTm9kZSopOwogCiBib29sIGlzQmxvY2soY29uc3QgTm9kZSop
OwpAQCAtOTEsNyArOTAsNyBAQCBib29sIGlzUmVuZGVyZWRUYWJsZShjb25zdCBOb2RlKik7CiBi
b29sIGlzVGFibGVDZWxsKGNvbnN0IE5vZGUqKTsKIGJvb2wgaXNFbXB0eVRhYmxlQ2VsbChjb25z
dCBOb2RlKik7CiBib29sIGlzVGFibGVTdHJ1Y3R1cmVOb2RlKGNvbnN0IE5vZGUqKTsKLWJvb2wg
aXNMaXN0RWxlbWVudChOb2RlKik7Citib29sIGlzTGlzdEhUTUxFbGVtZW50KE5vZGUqKTsKIGJv
b2wgaXNMaXN0SXRlbShjb25zdCBOb2RlKik7CiBib29sIGlzTm9kZVJlbmRlcmVkKGNvbnN0IE5v
ZGUmKTsKIGJvb2wgaXNSZW5kZXJlZEFzTm9uSW5saW5lVGFibGVJbWFnZU9ySFIoY29uc3QgTm9k
ZSopOwpAQCAtMTAxLDcgKzEwMCw3IEBAIGJvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhp
bihOb2RlJiwgY29uc3QgUmFuZ2UmKTsKIAogYm9vbCBhcmVJZGVudGljYWxFbGVtZW50cyhjb25z
dCBOb2RlJiwgY29uc3QgTm9kZSYpOwogCi1ib29sIHBvc2l0aW9uQmVmb3JlT3JBZnRlck5vZGVJ
c0NhbmRpZGF0ZShOb2RlKik7Citib29sIHBvc2l0aW9uQmVmb3JlT3JBZnRlck5vZGVJc0NhbmRp
ZGF0ZShOb2RlJik7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFBvc2l0aW9uCkBAIC0yMjQs
MzMgKzIyMywyOCBAQCBpbmxpbmUgYm9vbCBpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKFVD
aGFyIGNoYXJhY3RlcikKICAgICByZXR1cm4gY2hhcmFjdGVyID09ICdcJycgfHwgY2hhcmFjdGVy
ID09IHJpZ2h0U2luZ2xlUXVvdGF0aW9uTWFyayB8fCBjaGFyYWN0ZXIgPT0gaGVicmV3UHVuY3R1
YXRpb25HZXJzaGF5aW07CiB9CiAKLWlubGluZSBib29sIGVkaXRpbmdJZ25vcmVzQ29udGVudChj
b25zdCBOb2RlKiBub2RlKQotewotICAgIHJldHVybiAhbm9kZS0+Y2FuQ29udGFpblJhbmdlRW5k
UG9pbnQoKTsKLX0KLQotaW5saW5lIGJvb2wgY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhjb25z
dCBOb2RlKiBub2RlKQoraW5saW5lIGJvb2wgZWRpdGluZ0lnbm9yZXNDb250ZW50KGNvbnN0IE5v
ZGUmIG5vZGUpCiB7Ci0gICAgcmV0dXJuICFub2RlLT5pc1RleHROb2RlKCkgJiYgbm9kZS0+Y2Fu
Q29udGFpblJhbmdlRW5kUG9pbnQoKTsKKyAgICByZXR1cm4gIW5vZGUuY2FuQ29udGFpblJhbmdl
RW5kUG9pbnQoKTsKIH0KIAotaW5saW5lIGJvb2wgcG9zaXRpb25CZWZvcmVPckFmdGVyTm9kZUlz
Q2FuZGlkYXRlKE5vZGUqIG5vZGUpCitpbmxpbmUgYm9vbCBwb3NpdGlvbkJlZm9yZU9yQWZ0ZXJO
b2RlSXNDYW5kaWRhdGUoTm9kZSYgbm9kZSkKIHsKLSAgICByZXR1cm4gaXNSZW5kZXJlZFRhYmxl
KG5vZGUpIHx8IGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKTsKKyAgICByZXR1cm4gaXNSZW5k
ZXJlZFRhYmxlKCZub2RlKSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSk7CiB9CiAKIGlu
bGluZSBQb3NpdGlvbiBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoTm9kZSogbm9kZSkKIHsK
ICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIGVkaXRpbmdJ
Z25vcmVzQ29udGVudChub2RlKSA/IHBvc2l0aW9uQmVmb3JlTm9kZShub2RlKSA6IGZpcnN0UG9z
aXRpb25Jbk5vZGUobm9kZSk7CisgICAgcmV0dXJuIGVkaXRpbmdJZ25vcmVzQ29udGVudCgqbm9k
ZSkgPyBwb3NpdGlvbkJlZm9yZU5vZGUobm9kZSkgOiBmaXJzdFBvc2l0aW9uSW5Ob2RlKG5vZGUp
OwogfQogCiBpbmxpbmUgUG9zaXRpb24gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShOb2RlKiBu
b2RlKQogewogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4g
ZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpID8gcG9zaXRpb25BZnRlck5vZGUobm9kZSkgOiBs
YXN0UG9zaXRpb25Jbk5vZGUobm9kZSk7CisgICAgcmV0dXJuIGVkaXRpbmdJZ25vcmVzQ29udGVu
dCgqbm9kZSkgPyBwb3NpdGlvbkFmdGVyTm9kZShub2RlKSA6IGxhc3RQb3NpdGlvbkluTm9kZShu
b2RlKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCmluZGV4IDM2OTg0MDkxOTdi
MGNiM2FlZjY4MDQxNjc1MDcxZWMxNWJjMzY4NWEuLmY0YjczYzYwOWM3ZGIzZDI1OWM0YTk2ZGM1
MThhZWNhNjMyY2E5N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKQEAgLTQwMiw5ICs0
MDIsMTAgQEAgTm9kZSogU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnRyYXZlcnNlTm9kZXNGb3JT
ZXJpYWxpemF0aW9uKE5vZGUqIHN0YXJ0Tm9kZSwgTm8KICAgICAgICAgbmV4dCA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQoKm4pOwogICAgICAgICBib29sIG9wZW5lZFRhZyA9IGZhbHNlOwogCi0gICAg
ICAgIGlmIChpc0Jsb2NrKG4pICYmIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcobikgJiYgbmV4
dCA9PSBwYXN0RW5kKQorICAgICAgICBpZiAoaXNCbG9jayhuKSAmJiBjYW5IYXZlQ2hpbGRyZW5G
b3JFZGl0aW5nKCpuKSAmJiBuZXh0ID09IHBhc3RFbmQpIHsKICAgICAgICAgICAgIC8vIERvbid0
IHdyaXRlIG91dCBlbXB0eSBibG9jayBjb250YWluZXJzIHRoYXQgYXJlbid0IGZ1bGx5IHNlbGVj
dGVkLgogICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KIAogICAgICAgICBpZiAoIW4t
PnJlbmRlcmVyKCkgJiYgIWVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk9y
QmVmb3JlTm9kZShuKSwgc2VsZWN0VGFnKSkgewogICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2
ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKCpuKTsKQEAgLTUyOSw3ICs1MzAsNyBAQCBzdGF0
aWMgYm9vbCBpc0VsZW1lbnRQcmVzZW50YXRpb25hbChjb25zdCBOb2RlKiBub2RlKQogCiBzdGF0
aWMgTm9kZSogaGlnaGVzdEFuY2VzdG9yVG9XcmFwTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwg
RUFubm90YXRlRm9ySW50ZXJjaGFuZ2Ugc2hvdWxkQW5ub3RhdGUpCiB7Ci0gICAgTm9kZSogY29t
bW9uQW5jZXN0b3IgPSByYW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKTsKKyAgICBhdXRv
KiBjb21tb25BbmNlc3RvciA9IHJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpOwogICAg
IEFTU0VSVChjb21tb25BbmNlc3Rvcik7CiAgICAgTm9kZSogc3BlY2lhbENvbW1vbkFuY2VzdG9y
ID0gbnVsbHB0cjsKICAgICBpZiAoc2hvdWxkQW5ub3RhdGUgPT0gQW5ub3RhdGVGb3JJbnRlcmNo
YW5nZSkgewpAQCAtNTM3LDEwICs1MzgsMTAgQEAgc3RhdGljIE5vZGUqIGhpZ2hlc3RBbmNlc3Rv
clRvV3JhcE1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIEVBbm5vdGF0ZUZvckludGVyY2gKICAg
ICAgICAgLy8gdGhlIHN0cnVjdHVyZSBhbmQgYXBwZWFyYW5jZSBvZiB0aGUgY29waWVkIG1hcmt1
cC4KICAgICAgICAgc3BlY2lhbENvbW1vbkFuY2VzdG9yID0gYW5jZXN0b3JUb1JldGFpblN0cnVj
dHVyZUFuZEFwcGVhcmFuY2UoY29tbW9uQW5jZXN0b3IpOwogCi0gICAgICAgIGlmIChOb2RlKiBw
YXJlbnRMaXN0Tm9kZSA9IGVuY2xvc2luZ05vZGVPZlR5cGUoZmlyc3RQb3NpdGlvbkluT3JCZWZv
cmVOb2RlKHJhbmdlLT5maXJzdE5vZGUoKSksIGlzTGlzdEl0ZW0pKSB7Ci0gICAgICAgICAgICBp
ZiAoIWVkaXRpbmdJZ25vcmVzQ29udGVudChwYXJlbnRMaXN0Tm9kZSkgJiYgV2ViQ29yZTo6YXJl
UmFuZ2VzRXF1YWwoVmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2Rl
KHBhcmVudExpc3ROb2RlKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCByYW5nZSkpIHsKKyAg
ICAgICAgaWYgKGF1dG8qIHBhcmVudExpc3ROb2RlID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGVu
Y2xvc2luZ05vZGVPZlR5cGUoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHJhbmdlLT5maXJz
dE5vZGUoKSksIGlzTGlzdEl0ZW0pKSkgeworICAgICAgICAgICAgaWYgKCFlZGl0aW5nSWdub3Jl
c0NvbnRlbnQoKnBhcmVudExpc3ROb2RlKSAmJiBXZWJDb3JlOjphcmVSYW5nZXNFcXVhbChWaXNp
YmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUocGFyZW50TGlzdE5vZGUp
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHJhbmdlKSkgewogICAgICAgICAgICAgICAgIHNw
ZWNpYWxDb21tb25BbmNlc3RvciA9IHBhcmVudExpc3ROb2RlLT5wYXJlbnROb2RlKCk7Ci0gICAg
ICAgICAgICAgICAgd2hpbGUgKHNwZWNpYWxDb21tb25BbmNlc3RvciAmJiAhaXNMaXN0RWxlbWVu
dChzcGVjaWFsQ29tbW9uQW5jZXN0b3IpKQorICAgICAgICAgICAgICAgIHdoaWxlIChzcGVjaWFs
Q29tbW9uQW5jZXN0b3IgJiYgIWlzTGlzdEhUTUxFbGVtZW50KHNwZWNpYWxDb21tb25BbmNlc3Rv
cikpCiAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxDb21tb25BbmNlc3RvciA9IHNwZWNpYWxD
b21tb25BbmNlc3Rvci0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC01NTAsNyArNTUxLDcgQEAgc3RhdGljIE5vZGUqIGhpZ2hlc3RBbmNlc3RvclRvV3JhcE1hcmt1
cChjb25zdCBSYW5nZSogcmFuZ2UsIEVBbm5vdGF0ZUZvckludGVyY2gKICAgICAgICAgICAgIHNw
ZWNpYWxDb21tb25BbmNlc3RvciA9IGhpZ2hlc3RNYWlsQmxvY2txdW90ZTsKICAgICB9CiAKLSAg
ICBOb2RlKiBjaGVja0FuY2VzdG9yID0gc3BlY2lhbENvbW1vbkFuY2VzdG9yID8gc3BlY2lhbENv
bW1vbkFuY2VzdG9yIDogY29tbW9uQW5jZXN0b3I7CisgICAgYXV0byogY2hlY2tBbmNlc3RvciA9
IHNwZWNpYWxDb21tb25BbmNlc3RvciA/IHNwZWNpYWxDb21tb25BbmNlc3RvciA6IGNvbW1vbkFu
Y2VzdG9yOwogICAgIGlmIChjaGVja0FuY2VzdG9yLT5yZW5kZXJlcigpICYmIGNoZWNrQW5jZXN0
b3ItPnJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpKSB7CiAgICAgICAgIE5vZGUqIG5ld1Nw
ZWNpYWxDb21tb25BbmNlc3RvciA9IGhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBlKGZpcnN0UG9z
aXRpb25Jbk5vZGUoY2hlY2tBbmNlc3RvciksICZpc0VsZW1lbnRQcmVzZW50YXRpb25hbCwgQ2Fu
Q3Jvc3NFZGl0aW5nQm91bmRhcnksIGNoZWNrQW5jZXN0b3ItPnJlbmRlcmVyKCktPmNvbnRhaW5p
bmdCbG9jaygpLT5lbGVtZW50KCkpOwogICAgICAgICBpZiAobmV3U3BlY2lhbENvbW1vbkFuY2Vz
dG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3BhbkVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3BhbkVsZW1lbnQuY3BwCmluZGV4IGI4MjA1ODE0
YWJjNGRiNmUxYzQwNjY0MGFkMjJmN2I3YmFmM2I5NWYuLjE0NDlmMTc4OWZkOWM3OTQ1NDExMzBi
NzAzYzE1NTc4NTYxZTVkYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNw
YW5FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTcGFuRWxlbWVudC5j
cHAKQEAgLTM4LDYgKzM4LDExIEBAIEhUTUxTcGFuRWxlbWVudDo6SFRNTFNwYW5FbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1bWVuCiAgICAgQVNTRVJU
KGhhc1RhZ05hbWUoc3BhblRhZykpOwogfQogCitSZWY8SFRNTFNwYW5FbGVtZW50PiBIVE1MU3Bh
bkVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSFRNTFNwYW5FbGVtZW50KHNwYW5UYWcsIGRvY3VtZW50KSk7Cit9CisKIFJlZjxI
VE1MU3BhbkVsZW1lbnQ+IEhUTUxTcGFuRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBIVE1MU3BhbkVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNwYW5FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxTcGFuRWxlbWVudC5oCmluZGV4IGMyOGJjNjk2Y2EzYTM0ZmQzNTJjZTQxOGE3YmIwZmFi
MDZkOGQ2MzMuLmM4NWIwZGMxMTY1MDE2YjViNWU3YzFkYzEwYTk5NWEwYWVmYzRjOWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNwYW5FbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MU3BhbkVsZW1lbnQuaApAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxTcGFuRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBIVE1M
RWxlbWVudCB7CiBwdWJsaWM6CisgICAgc3RhdGljIFJlZjxIVE1MU3BhbkVsZW1lbnQ+IGNyZWF0
ZShEb2N1bWVudCYpOwogICAgIHN0YXRpYyBSZWY8SFRNTFNwYW5FbGVtZW50PiBjcmVhdGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVNlbGVjdGlvbi5jcHAKaW5kZXggNDA5ZTY2YWUwY2ZjYjY1ZGEyOTIzYmE0OGQzMGU2NDIw
MGI4NWFkOC4uOTE3ZDVlNWFhZGRjZTI1MDMxZmZmZWRiMDJhNjBlN2Y1ODdhY2YyNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcApAQCAtMzUsMTIgKzM1LDkgQEAKICNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNl
bGVjdGlvbi5oIgotI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1
ZGUgIlRleHRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlRyZWVTY29wZS5oIgogI2luY2x1ZGUgImh0
bWxlZGl0aW5nLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBi
MzFjOGU0Njk5NzQwOTZkYjVkMjA2ZmFhMGZlY2Y0MjQ2Njc4YjU5Li5mZjQ5MzNmMWQ0ZTY1MGYx
N2E0ZTBhNWM5M2IxOWE1ODBiZTY3OTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcApAQCAtMzcsOCArMzcsOCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxCdXR0b25FbGVtZW50
LmgiCi0jaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5w
dXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFRleHRB
cmVhRWxlbWVudC5oIgpAQCAtNDM4Niw3ICs0Mzg2LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6
OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogYm94LCBpbnQgY2FyZXRPZmZzZXQsIExheW91dFVu
aXQKICAgICAvLyBGSVhNRTogQm9yZGVyL3BhZGRpbmcgc2hvdWxkIGJlIGFkZGVkIGZvciBhbGwg
ZWxlbWVudHMgYnV0IHRoaXMgd29ya2Fyb3VuZAogICAgIC8vIGlzIG5lZWRlZCBiZWNhdXNlIHdl
IHVzZSBvZmZzZXRzIGluc2lkZSBhbiAiYXRvbWljIiBlbGVtZW50IHRvIHJlcHJlc2VudAogICAg
IC8vIHBvc2l0aW9ucyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBlbGVtZW50IGluIGRlcHJlY2F0ZWQg
ZWRpdGluZyBvZmZzZXRzLgotICAgIGlmIChlbGVtZW50KCkgJiYgIShlZGl0aW5nSWdub3Jlc0Nv
bnRlbnQoZWxlbWVudCgpKSB8fCBpc1JlbmRlcmVkVGFibGUoZWxlbWVudCgpKSkpIHsKKyAgICBp
ZiAoZWxlbWVudCgpICYmICEoZWRpdGluZ0lnbm9yZXNDb250ZW50KCplbGVtZW50KCkpIHx8IGlz
UmVuZGVyZWRUYWJsZShlbGVtZW50KCkpKSkgewogICAgICAgICByZWN0LnNldFgocmVjdC54KCkg
KyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpKTsKICAgICAgICAgcmVjdC5zZXRZKHJlY3Qu
eSgpICsgcGFkZGluZ1RvcCgpICsgYm9yZGVyVG9wKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tIGIvU291cmNlL1dl
YktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KaW5kZXggYTcwNDBhODc2N2I4
YmM5YzNiNmExMTNkMTE4YTk0OTllNDAyY2Y0Ni4uMjc5MDM5ZjQyNmZkNzg2N2I3Y2Y4MWI0YTdj
ZTIwNjhjMTE3NzdhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVJT1MubW0KQEAgLTg0OCw3ICs4NDgsNyBAQCAtIChXZWJWaXNpYmxlUG9zaXRpb24g
KilwcmV2aW91c1VucGVydHVyYmVkRGljdGF0aW9uUmVzdWx0Qm91bmRhcnlGcm9tUG9zaXRpb246
KAogICAgIHdoaWxlIChjdXJyZW50VmlzaWJsZVBvc2l0aW9uLmlzTm90TnVsbCgpKSB7CiAgICAg
ICAgIFdlYlZpc2libGVQb3NpdGlvbiAqY3VycmVudFdlYlZpc2libGVQb3NpdGlvbiA9IFtXZWJW
aXNpYmxlUG9zaXRpb24gX3dyYXBWaXNpYmxlUG9zaXRpb246Y3VycmVudFZpc2libGVQb3NpdGlv
bl07CiAgICAgICAgIAotICAgICAgICBOb2RlICpjdXJyZW50Tm9kZSA9IGN1cnJlbnRWaXNpYmxl
UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCk7CisgICAgICAgIGF1dG8qIGN1
cnJlbnROb2RlID0gY3VycmVudFZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmFuY2hv
ck5vZGUoKTsKICAgICAgICAgaW50IGxhc3RPZmZzZXQgPSBsYXN0T2Zmc2V0Rm9yRWRpdGluZygq
Y3VycmVudE5vZGUpOwogICAgICAgICBBU1NFUlQobGFzdE9mZnNldCA+PSAwKTsKICAgICAgICAg
aWYgKGxhc3RPZmZzZXQgPCAwKQpAQCAtOTA0LDcgKzkwNCw3IEBAIC0gKFdlYlZpc2libGVQb3Np
dGlvbiAqKW5leHRVbnBlcnR1cmJlZERpY3RhdGlvblJlc3VsdEJvdW5kYXJ5RnJvbVBvc2l0aW9u
OihXZWJWCiAgICAgd2hpbGUgKGN1cnJlbnRWaXNpYmxlUG9zaXRpb24uaXNOb3ROdWxsKCkpIHsK
ICAgICAgICAgV2ViVmlzaWJsZVBvc2l0aW9uICpjdXJyZW50V2ViVmlzaWJsZVBvc2l0aW9uID0g
W1dlYlZpc2libGVQb3NpdGlvbiBfd3JhcFZpc2libGVQb3NpdGlvbjpjdXJyZW50VmlzaWJsZVBv
c2l0aW9uXTsKICAgICAgICAgCi0gICAgICAgIE5vZGUgKmN1cnJlbnROb2RlID0gY3VycmVudFZp
c2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKTsKKyAgICAgICAgYXV0
byogY3VycmVudE5vZGUgPSBjdXJyZW50VmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCku
YW5jaG9yTm9kZSgpOwogICAgICAgICBpbnQgbGFzdE9mZnNldCA9IGxhc3RPZmZzZXRGb3JFZGl0
aW5nKCpjdXJyZW50Tm9kZSk7CiAgICAgICAgIEFTU0VSVChsYXN0T2Zmc2V0ID49IDApOwogICAg
ICAgICBpZiAobGFzdE9mZnNldCA8IDApCg==
</data>
<flag name="review"
          id="303046"
          type_id="1"
          status="+"
          setter="cdumez"
    />
    <flag name="commit-queue"
          id="303047"
          type_id="3"
          status="-"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>