<?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>222159</bug_id>
          
          <creation_ts>2021-02-18 21:58:42 -0800</creation_ts>
          <short_desc>Avoid tree traversals to look for form and canvas elements</short_desc>
          <delta_ts>2021-02-27 01:32:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>222404</dependson>
    
    <dependson>222510</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>mifenton</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1731217</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-18 21:58:42 -0800</bug_when>
    <thetext>We can avoid traversing DOM tree up to find canvas/form elements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731218</commentid>
    <comment_count>1</comment_count>
      <attachid>420921</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-18 21:59:13 -0800</bug_when>
    <thetext>Created attachment 420921
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732790</commentid>
    <comment_count>2</comment_count>
      <attachid>421386</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-23 22:32:58 -0800</bug_when>
    <thetext>Created attachment 421386
WIP2 - alternative approach</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732791</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-02-23 22:35:45 -0800</bug_when>
    <thetext>&lt;rdar://problem/74680265&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733176</commentid>
    <comment_count>4</comment_count>
      <attachid>421490</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-24 18:11:36 -0800</bug_when>
    <thetext>Created attachment 421490
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733208</commentid>
    <comment_count>5</comment_count>
      <attachid>421490</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-02-24 22:09:52 -0800</bug_when>
    <thetext>Comment on attachment 421490
Patch

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

&gt; Source/WebCore/dom/Element.cpp:2404
&gt; +    if (init.delegatesFocus)
&gt; +        setDelegatesFocusToShadowRoot();

Would be nice to split these changes into another patch.

&gt; Source/WebCore/dom/Node.h:927
&gt; +    if (states.contains(AncestorState::Canvas))

I&apos;d prefer a blank line above this.

&gt; Source/WebCore/html/HTMLFormElement.cpp:915
&gt; +    if (UNLIKELY(is&lt;HTMLFormElement&gt;(startElement))) {
&gt; +        auto* parentElement = startElement.parentElement();
&gt; +        if (!parentElement || !parentElement-&gt;inclusiveAncestorStates().contains(AncestorState::Form)) {
&gt; +            ASSERT(!ancestorsOfType&lt;HTMLFormElement&gt;(startElement).first());
&gt; +            return nullptr;
&gt; +        }
&gt; +    }

Why don&apos;t we add firstAncestorsOfType&lt;&gt; and use it everywhere we do ancestorsOfType&lt;&gt;().first()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733238</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-24 23:35:02 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #5)
&gt; Comment on attachment 421490 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=421490&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Element.cpp:2404
&gt; &gt; +    if (init.delegatesFocus)
&gt; &gt; +        setDelegatesFocusToShadowRoot();
&gt; 
&gt; Would be nice to split these changes into another patch.

Done that in the bug 222404.

&gt; &gt; Source/WebCore/dom/Node.h:927
&gt; &gt; +    if (states.contains(AncestorState::Canvas))
&gt; 
&gt; I&apos;d prefer a blank line above this.

Done.

&gt; &gt; Source/WebCore/html/HTMLFormElement.cpp:915
&gt; &gt; +    if (UNLIKELY(is&lt;HTMLFormElement&gt;(startElement))) {
&gt; &gt; +        auto* parentElement = startElement.parentElement();
&gt; &gt; +        if (!parentElement || !parentElement-&gt;inclusiveAncestorStates().contains(AncestorState::Form)) {
&gt; &gt; +            ASSERT(!ancestorsOfType&lt;HTMLFormElement&gt;(startElement).first());
&gt; &gt; +            return nullptr;
&gt; &gt; +        }
&gt; &gt; +    }
&gt; 
&gt; Why don&apos;t we add firstAncestorsOfType&lt;&gt; and use it everywhere we do
&gt; ancestorsOfType&lt;&gt;().first()?

That sounds like a good idea. Probably in a separate patch though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733243</commentid>
    <comment_count>7</comment_count>
      <attachid>421508</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-25 00:18:33 -0800</bug_when>
    <thetext>Created attachment 421508
Updated for trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733250</commentid>
    <comment_count>8</comment_count>
      <attachid>421508</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-02-25 00:49:34 -0800</bug_when>
    <thetext>Comment on attachment 421508
Updated for trunk

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

&gt; Source/WebCore/html/HTMLFormElement.cpp:912
&gt; +        if (!parentElement || !parentElement-&gt;inclusiveAncestorStates().contains(AncestorState::Form)) {
&gt; +            ASSERT(!ancestorsOfType&lt;HTMLFormElement&gt;(startElement).first());

Maybe you should make ancestorsOfType and pals to do these checks (based on the type obv) so all future code benefits too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733251</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-25 00:51:18 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #8)
&gt; Comment on attachment 421508 [details]
&gt; Updated for trunk
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=421508&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/HTMLFormElement.cpp:912
&gt; &gt; +        if (!parentElement || !parentElement-&gt;inclusiveAncestorStates().contains(AncestorState::Form)) {
&gt; &gt; +            ASSERT(!ancestorsOfType&lt;HTMLFormElement&gt;(startElement).first());
&gt; 
&gt; Maybe you should make ancestorsOfType and pals to do these checks (based on
&gt; the type obv) so all future code benefits too.

Oh you mean as a type specialization for HTMLFormElement? That might be a neat idea. If we spot a few more of these, it might be worth doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733253</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-25 00:51:41 -0800</bug_when>
    <thetext>Thanks for the reviews, Antti &amp; Simon!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733254</commentid>
    <comment_count>11</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-02-25 00:51:54 -0800</bug_when>
    <thetext>&gt; &gt; Why don&apos;t we add firstAncestorsOfType&lt;&gt; and use it everywhere we do
&gt; &gt; ancestorsOfType&lt;&gt;().first()?
&gt; 
&gt; That sounds like a good idea. Probably in a separate patch though.

Please don&apos;t increase complexity for no gain. That literally just saves one &apos;.&apos; of typing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733256</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-02-25 00:58:49 -0800</bug_when>
    <thetext>&gt; Oh you mean as a type specialization for HTMLFormElement? That might be a
&gt; neat idea. If we spot a few more of these, it might be worth doing.

Or maybe have a static field that gives the bit to test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733257</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-25 00:59:47 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #11)
&gt; &gt; &gt; Why don&apos;t we add firstAncestorsOfType&lt;&gt; and use it everywhere we do
&gt; &gt; &gt; ancestorsOfType&lt;&gt;().first()?
&gt; &gt; 
&gt; &gt; That sounds like a good idea. Probably in a separate patch though.
&gt; 
&gt; Please don&apos;t increase complexity for no gain. That literally just saves one
&gt; &apos;.&apos; of typing.

I think it&apos;s more to do with the fact &quot;first&quot; comes at the end split with (~). Maybe what we need if something like firstIfExists(ancestorsOfType&lt;&gt;(~))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733258</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-25 01:01:41 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #12)
&gt; &gt; Oh you mean as a type specialization for HTMLFormElement? That might be a
&gt; &gt; neat idea. If we spot a few more of these, it might be worth doing.
&gt; 
&gt; Or maybe have a static field that gives the bit to test.

Yeah, but I&apos;m imagining it&apos;s a template specialization based on whether that bit is available or not. I agree we don&apos;t want to repeat all this code for each element type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733259</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-25 01:02:59 -0800</bug_when>
    <thetext>Committed r273479 (234558@main): &lt;https://commits.webkit.org/234558@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733262</commentid>
    <comment_count>16</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-02-25 01:17:44 -0800</bug_when>
    <thetext>&gt; Yeah, but I&apos;m imagining it&apos;s a template specialization based on whether that
&gt; bit is available or not. I agree we don&apos;t want to repeat all this code for
&gt; each element type.

if constexpr () is probably all that is needed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1734172</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2021-02-27 01:27:29 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 222510</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1734179</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-27 01:32:37 -0800</bug_when>
    <thetext>This was not an overall speed up after all.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420921</attachid>
            <date>2021-02-18 21:59:13 -0800</date>
            <delta_ts>2021-02-23 22:32:58 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>wip222159.patch</filename>
            <type>text/plain</type>
            <size>11857</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">VWRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggZjg4NmEwZmNkN2U5Li5jYzg0MzE4OWQ4YTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTYzOSwxMSArNjM5LDIyIEBAIGJvb2wgRWxlbWVudDo6
aXNGb2N1c2FibGUoKSBjb25zdAogICAgIGlmICghaXNDb25uZWN0ZWQoKSB8fCAhc3VwcG9ydHNG
b2N1cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXJlbmRlcmVyKCkpIHsK
KyAgICBpZiAoIXJlbmRlcmVyKCkgJiYgIWhhc05vQ2FudmFzQW5jZXN0b3IoKSkgewogICAgICAg
ICAvLyBFbGVtZW50cyBpbiBjYW52YXMgZmFsbGJhY2sgY29udGVudCBhcmUgbm90IHJlbmRlcmVk
LCBidXQgdGhleSBhcmUgYWxsb3dlZCB0byBiZQogICAgICAgICAvLyBmb2N1c2FibGUgYXMgbG9u
ZyBhcyB0aGVpciBjYW52YXMgaXMgZGlzcGxheWVkIGFuZCB2aXNpYmxlLgotICAgICAgICBpZiAo
YXV0byogY2FudmFzID0gYW5jZXN0b3JzT2ZUeXBlPEhUTUxDYW52YXNFbGVtZW50PigqdGhpcyku
Zmlyc3QoKSkKKyAgICAgICAgUmVmUHRyPGNvbnN0IEhUTUxDYW52YXNFbGVtZW50PiBjYW52YXM7
CisgICAgICAgIGZvciAoYXV0byYgYW5jZXN0b3IgOiBhbmNlc3RvcnNPZlR5cGU8RWxlbWVudD4o
KnRoaXMpKSB7CisgICAgICAgICAgICBpZiAoYW5jZXN0b3IuaGFzTm9DYW52YXNBbmNlc3Rvcigp
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGlzPEhU
TUxDYW52YXNFbGVtZW50PihhbmNlc3RvcikpKQorICAgICAgICAgICAgICAgIGNhbnZhcyA9ICZk
b3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oYW5jZXN0b3IpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKFVOTElLRUxZKGNhbnZhcykpCiAgICAgICAgICAgICByZXR1cm4gY2FudmFzLT5pc1Zp
c2libGVXaXRob3V0UmVzb2x2aW5nRnVsbFN0eWxlKCk7CisKKyAgICAgICAgZm9yIChhdXRvJiBh
bmNlc3RvciA6IGxpbmVhZ2VPZlR5cGU8RWxlbWVudD4oKnRoaXMpKQorICAgICAgICAgICAgY29u
c3RfY2FzdDxFbGVtZW50Jj4oYW5jZXN0b3IpLnNldEhhc05vQ2FudmFzQW5jZXN0b3IoKTsKICAg
ICB9CiAKICAgICByZXR1cm4gaXNWaXNpYmxlV2l0aG91dFJlc29sdmluZ0Z1bGxTdHlsZSgpOwpA
QCAtMjE1NCw2ICsyMTY1LDE2IEBAIE5vZGU6Okluc2VydGVkSW50b0FuY2VzdG9yUmVzdWx0IEVs
ZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9yKEluc2VydGlvblR5cGUgaW5zCiB7CiAgICAgQ29u
dGFpbmVyTm9kZTo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3IoaW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJ
bnNlcnRlZFRyZWUpOwogCisgICAgaWYgKHBhcmVudE9mSW5zZXJ0ZWRUcmVlLmhhc05vQ2FudmFz
QW5jZXN0b3IoKSAmJiBoYXNOb0NhbnZhc0FuY2VzdG9yKCkpCisgICAgICAgIHNldEhhc05vQ2Fu
dmFzQW5jZXN0b3IoKTsKKyAgICBlbHNlCisgICAgICAgIGNsZWFySGFzTm9DYW52YXNBbmNlc3Rv
cigpOworCisgICAgaWYgKHBhcmVudE9mSW5zZXJ0ZWRUcmVlLmhhc05vRm9ybUFuY2VzdG9yKCkg
JiYgaGFzTm9Gb3JtQW5jZXN0b3IoKSkKKyAgICAgICAgc2V0SGFzTm9Gb3JtQW5jZXN0b3IoKTsK
KyAgICBlbHNlCisgICAgICAgIGNsZWFySGFzTm9Gb3JtQW5jZXN0b3IoKTsKKwogI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkKICAgICBpZiAoY29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCgpICYm
IHBhcmVudEVsZW1lbnQoKSAmJiAhcGFyZW50RWxlbWVudCgpLT5jb250YWluc0Z1bGxTY3JlZW5F
bGVtZW50KCkpCiAgICAgICAgIHNldENvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnRPbkFuY2VzdG9y
c0Nyb3NzaW5nRnJhbWVCb3VuZGFyaWVzKHRydWUpOwpAQCAtMjM5Myw2ICsyNDE0LDggQEAgRXhj
ZXB0aW9uT3I8U2hhZG93Um9vdCY+IEVsZW1lbnQ6OmF0dGFjaFNoYWRvdyhjb25zdCBTaGFkb3dS
b290SW5pdCYgaW5pdCkKICAgICBpZiAoaW5pdC5tb2RlID09IFNoYWRvd1Jvb3RNb2RlOjpVc2Vy
QWdlbnQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKICAgICBhdXRv
IHNoYWRvdyA9IFNoYWRvd1Jvb3Q6OmNyZWF0ZShkb2N1bWVudCgpLCBpbml0Lm1vZGUsIGluaXQu
ZGVsZWdhdGVzRm9jdXMgPyBTaGFkb3dSb290OjpEZWxlZ2F0ZXNGb2N1czo6WWVzIDogU2hhZG93
Um9vdDo6RGVsZWdhdGVzRm9jdXM6Ok5vKTsKKyAgICBpZiAoaW5pdC5kZWxlZ2F0ZXNGb2N1cykK
KyAgICAgICAgc2V0RGVsZWdhdGVzRm9jdXNUb1NoYWRvd1Jvb3QoKTsKICAgICBhdXRvJiByZXN1
bHQgPSBzaGFkb3cuZ2V0KCk7CiAgICAgYWRkU2hhZG93Um9vdChXVEZNb3ZlKHNoYWRvdykpOwog
ICAgIHJldHVybiByZXN1bHQ7CkBAIC0yOTc2LDcgKzI5OTksOCBAQCBzdGF0aWMgYm9vbCBpc1By
b2dyYW1hdGljYWxseUZvY3VzYWJsZShFbGVtZW50JiBlbGVtZW50KQogewogICAgIFNjcmlwdERp
c2FsbG93ZWRTY29wZTo6SW5NYWluVGhyZWFkIHNjcmlwdERpc2FsbG93ZWRTY29wZTsKIAotICAg
IGlmIChzaGFkb3dSb290V2l0aERlbGVnYXRlc0ZvY3VzKGVsZW1lbnQpKQorICAgIEFTU0VSVChl
bGVtZW50LmRlbGVnYXRlc0ZvY3VzVG9TaGFkb3dSb290KCkgPT0gISFzaGFkb3dSb290V2l0aERl
bGVnYXRlc0ZvY3VzKGVsZW1lbnQpKTsKKyAgICBpZiAoZWxlbWVudC5kZWxlZ2F0ZXNGb2N1c1Rv
U2hhZG93Um9vdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBJZiB0aGUgc3R5
bGVzaGVldHMgaGF2ZSBhbHJlYWR5IGJlZW4gbG9hZGVkIHdlIGNhbiByZWxpYWJseSBjaGVjayBp
c0ZvY3VzYWJsZS4KQEAgLTMwMjMsNyArMzA0Nyw5IEBAIHZvaWQgRWxlbWVudDo6Zm9jdXMoU2Vs
ZWN0aW9uUmVzdG9yYXRpb25Nb2RlIHJlc3RvcmF0aW9uTW9kZSwgRm9jdXNEaXJlY3Rpb24gZGly
CiAgICAgaWYgKCZuZXdUYXJnZXQtPmRvY3VtZW50KCkgIT0gZG9jdW1lbnQucHRyKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChhdXRvIHJvb3QgPSBzaGFkb3dSb290V2l0aERlbGVnYXRl
c0ZvY3VzKCp0aGlzKSkgeworICAgIEFTU0VSVChkZWxlZ2F0ZXNGb2N1c1RvU2hhZG93Um9vdCgp
ID09ICEhc2hhZG93Um9vdFdpdGhEZWxlZ2F0ZXNGb2N1cygqdGhpcykpOworICAgIGlmIChVTkxJ
S0VMWShkZWxlZ2F0ZXNGb2N1c1RvU2hhZG93Um9vdCgpKSkgeworICAgICAgICBhdXRvIHJvb3Qg
PSBzaGFkb3dSb290V2l0aERlbGVnYXRlc0ZvY3VzKCp0aGlzKTsKICAgICAgICAgYXV0byBjdXJy
ZW50bHlGb2N1c2VkRWxlbWVudCA9IG1ha2VSZWZQdHIoZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50
KCkpOwogICAgICAgICBpZiAocm9vdC0+Y29udGFpbnNJbmNsdWRpbmdTaGFkb3dET00oY3VycmVu
dGx5Rm9jdXNlZEVsZW1lbnQuZ2V0KCkpKSB7CiAgICAgICAgICAgICBpZiAoZG9jdW1lbnQtPnBh
Z2UoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5oCmluZGV4IDJlY2QxNWQ2ZDk0ZC4uZWRlZDcwZDZlMTQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmgKQEAgLTIyMiw2ICsyMjIsNyBAQCBwdWJsaWM6CiAgICAgU2hhZG93Um9vdCogY29udGFp
bmluZ1NoYWRvd1Jvb3QoKSBjb25zdDsKICAgICBTaGFkb3dSb290KiBzaGFkb3dSb290KCkgY29u
c3Q7CiAgICAgYm9vbCBpc0Nsb3NlZFNoYWRvd0hpZGRlbihjb25zdCBOb2RlJikgY29uc3Q7Cisg
ICAgYm9vbCBkZWxlZ2F0ZXNGb2N1c1RvU2hhZG93Um9vdCgpIGNvbnN0IHsgcmV0dXJuIGhhc05v
ZGVGbGFnKE5vZGVGbGFnOjpEZWxlZ2F0ZXNGb2N1c1RvU2hhZG93Um9vdCk7IH0KIAogICAgIEhU
TUxTbG90RWxlbWVudCogYXNzaWduZWRTbG90KCkgY29uc3Q7CiAgICAgSFRNTFNsb3RFbGVtZW50
KiBhc3NpZ25lZFNsb3RGb3JCaW5kaW5ncygpIGNvbnN0OwpAQCAtMjU5LDYgKzI2MCwxMSBAQCBw
dWJsaWM6CiAgICAgYm9vbCBzZWxmT3JBbmNlc3Rvckhhc0RpckF1dG9BdHRyaWJ1dGUoKSBjb25z
dCB7IHJldHVybiBoYXNOb2RlRmxhZyhOb2RlRmxhZzo6U2VsZk9yQW5jZXN0b3JIYXNEaXJBdXRv
KTsgfQogICAgIHZvaWQgc2V0U2VsZk9yQW5jZXN0b3JIYXNEaXJBdXRvQXR0cmlidXRlKGJvb2wg
ZmxhZykgeyBzZXROb2RlRmxhZyhOb2RlRmxhZzo6U2VsZk9yQW5jZXN0b3JIYXNEaXJBdXRvLCBm
bGFnKTsgfQogCisgICAgYm9vbCBoYXNOb0NhbnZhc0FuY2VzdG9yKCkgY29uc3QgeyByZXR1cm4g
aGFzTm9kZUZsYWcoTm9kZUZsYWc6Okhhc05vQ2FudmFzQW5jZXN0b3IpOyB9CisKKyAgICB2b2lk
IHNldEhhc05vRm9ybUFuY2VzdG9yKCkgeyBBU1NFUlQoaXNFbGVtZW50Tm9kZSgpKTsgc2V0Tm9k
ZUZsYWcoTm9kZUZsYWc6Okhhc05vRm9ybUFuY2VzdG9yKTsgfQorICAgIGJvb2wgaGFzTm9Gb3Jt
QW5jZXN0b3IoKSBjb25zdCB7IHJldHVybiBoYXNOb2RlRmxhZyhOb2RlRmxhZzo6SGFzTm9Gb3Jt
QW5jZXN0b3IpOyB9CisKICAgICAvLyBSZXR1cm5zIHRoZSBlbmNsb3NpbmcgZXZlbnQgcGFyZW50
IEVsZW1lbnQgKG9yIHNlbGYpIHRoYXQsIHdoZW4gY2xpY2tlZCwgd291bGQgdHJpZ2dlciBhIG5h
dmlnYXRpb24uCiAgICAgRWxlbWVudCogZW5jbG9zaW5nTGlua0V2ZW50UGFyZW50T3JTZWxmKCk7
CiAKQEAgLTU1MSw3ICs1NTcsMTEgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAgICAgICAgIElzQ29t
cHV0ZWRTdHlsZUludmFsaWRGbGFnID0gMSA8PCAyNiwKIAotICAgICAgICAvLyBCaXRzIDI3LTMx
IGFyZSBmcmVlLgorICAgICAgICBEZWxlZ2F0ZXNGb2N1c1RvU2hhZG93Um9vdCA9IDEgPDwgMjcs
CisgICAgICAgIEhhc05vQ2FudmFzQW5jZXN0b3IgPSAxIDw8IDI4LAorICAgICAgICBIYXNOb0Zv
cm1BbmNlc3RvciA9IDEgPDwgMjksCisKKyAgICAgICAgLy8gQml0cyAyOS0zMSBhcmUgZnJlZS4K
ICAgICB9OwogCiAgICAgZW51bSBjbGFzcyBUYWJJbmRleFN0YXRlIDogdWludDhfdCB7CkBAIC01
OTEsNiArNjAxLDEzIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldElzUGFyc2luZ0NoaWxkcmVu
RmluaXNoZWQoKSB7IHNldE5vZGVGbGFnKE5vZGVGbGFnOjpJc1BhcnNpbmdDaGlsZHJlbkZpbmlz
aGVkKTsgfQogICAgIHZvaWQgY2xlYXJJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkKCkgeyBjbGVh
ck5vZGVGbGFnKE5vZGVGbGFnOjpJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkKTsgfQogCisgICAg
dm9pZCBzZXREZWxlZ2F0ZXNGb2N1c1RvU2hhZG93Um9vdCgpIHsgc2V0Tm9kZUZsYWcoTm9kZUZs
YWc6OkRlbGVnYXRlc0ZvY3VzVG9TaGFkb3dSb290KTsgfQorCisgICAgdm9pZCBzZXRIYXNOb0Nh
bnZhc0FuY2VzdG9yKCkgeyBBU1NFUlQoaXNFbGVtZW50Tm9kZSgpKTsgc2V0Tm9kZUZsYWcoTm9k
ZUZsYWc6Okhhc05vQ2FudmFzQW5jZXN0b3IpOyB9CisgICAgdm9pZCBjbGVhckhhc05vQ2FudmFz
QW5jZXN0b3IoKSB7IEFTU0VSVChpc0VsZW1lbnROb2RlKCkpOyBjbGVhck5vZGVGbGFnKE5vZGVG
bGFnOjpIYXNOb0NhbnZhc0FuY2VzdG9yKTsgfQorCisgICAgdm9pZCBjbGVhckhhc05vRm9ybUFu
Y2VzdG9yKCkgeyBBU1NFUlQoaXNFbGVtZW50Tm9kZSgpKTsgY2xlYXJOb2RlRmxhZyhOb2RlRmxh
Zzo6SGFzTm9Gb3JtQW5jZXN0b3IpOyB9CisKICAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gRGVm
YXVsdE5vZGVGbGFncyA9IE9wdGlvblNldDxOb2RlRmxhZz4oTm9kZUZsYWc6OklzUGFyc2luZ0No
aWxkcmVuRmluaXNoZWQpOwogICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBDcmVhdGVPdGhlciA9
IERlZmF1bHROb2RlRmxhZ3M7CiAgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIENyZWF0ZUNoYXJh
Y3RlckRhdGEgPSBEZWZhdWx0Tm9kZUZsYWdzIHwgTm9kZUZsYWc6OklzQ2hhcmFjdGVyRGF0YTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKaW5kZXggMDhjNWYzNjczODcyLi40MjFmNTdkYzRkYjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCkBAIC01NCw2ICs1NCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogc3RydWN0IFNhbWVTaXplQXNUcmVlU2NvcGUgewogICAgIHZvaWQqIHBvaW50
ZXJzWzEwXTsKKyAgICB1bnNpZ25lZCBjYW52YXNDb3VudDsKIH07CiAKIENPTVBJTEVfQVNTRVJU
KHNpemVvZihUcmVlU2NvcGUpID09IHNpemVvZihTYW1lU2l6ZUFzVHJlZVNjb3BlKSwgdHJlZXNj
b3BlX3Nob3VsZF9zdGF5X3NtYWxsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaAppbmRleCA5MmIyYzQ4
NmQ5YWMuLmU3YjgyOGMzZjljMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVT
Y29wZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaApAQCAtOTksNiArOTks
MTAgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxSZWZQdHI8RWxlbWVudD4+
IGVsZW1lbnRzRnJvbVBvaW50KGRvdWJsZSBjbGllbnRYLCBkb3VibGUgY2xpZW50WSk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlZlB0cjxFbGVtZW50Pj4gZWxlbWVudHNGcm9tUG9pbnQo
Y29uc3QgRmxvYXRQb2ludCYpOwogCisgICAgYm9vbCBoYXNDYW52YXMoKSBjb25zdCB7IHJldHVy
biBtX2NhbnZhc0NvdW50OyB9CisgICAgdm9pZCBpbmNyZW1lbnRDYW52YXNDb3VudCgpIHsgKytt
X2NhbnZhc0NvdW50OyB9CisgICAgdm9pZCBkZWNyZW1lbnRDYW52YXNDb3VudCgpIHsgQVNTRVJU
KG1fY2FudmFzQ291bnQpOyAtLW1fY2FudmFzQ291bnQ7IH0KKwogICAgIC8vIEZpbmQgZmlyc3Qg
YW5jaG9yIHdpdGggdGhlIGdpdmVuIG5hbWUuCiAgICAgLy8gRmlyc3Qgc2VhcmNoZXMgZm9yIGFu
IGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gSUQsIGJ1dCBpZiB0aGF0IGZhaWxzLCB0aGVuIGxvb2tz
CiAgICAgLy8gZm9yIGFuIGFuY2hvciB3aXRoIHRoZSBnaXZlbiBuYW1lLiBJRCBtYXRjaGluZyBp
cyBhbHdheXMgY2FzZSBzZW5zaXRpdmUsIGJ1dApAQCAtMTM4LDggKzE0MiwxMCBAQCBwcml2YXRl
OgogICAgIHN0ZDo6dW5pcXVlX3B0cjxUcmVlU2NvcGVPcmRlcmVkTWFwPiBtX2xhYmVsc0J5Rm9y
QXR0cmlidXRlOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3Ry
eT4gbV9pZFRhcmdldE9ic2VydmVyUmVnaXN0cnk7Ci0gICAgCisKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmFkaW9CdXR0b25Hcm91cHM+IG1fcmFkaW9CdXR0b25Hcm91cHM7CisKKyAgICB1bnNpZ25l
ZCBtX2NhbnZhc0NvdW50IHsgMCB9OwogfTsKIAogaW5saW5lIGJvb2wgVHJlZVNjb3BlOjpoYXNF
bGVtZW50V2l0aElkKGNvbnN0IEF0b21TdHJpbmdJbXBsJiBpZCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXggMmE0ODVkNjFlOGU3Li42YjQ0NTNh
ZWVkMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC0x
MDQwLDYgKzEwNDAsOCBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1
bWVudChEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW50JiBuZQogCiBOb2RlOjpJbnNlcnRl
ZEludG9BbmNlc3RvclJlc3VsdCBIVE1MQ2FudmFzRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0
b3IoSW5zZXJ0aW9uVHlwZSBpbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJiBwYXJlbnRPZklu
c2VydGVkVHJlZSkKIHsKKyAgICBpZiAoaW5zZXJ0aW9uVHlwZS50cmVlU2NvcGVDaGFuZ2VkKQor
ICAgICAgICB0cmVlU2NvcGUoKS5pbmNyZW1lbnRDYW52YXNDb3VudCgpOwogICAgIGlmIChuZWVk
c1ByZXBhcmF0aW9uRm9yRGlzcGxheSgpICYmIGluc2VydGlvblR5cGUuY29ubmVjdGVkVG9Eb2N1
bWVudCkgewogICAgICAgICBhdXRvJiBkb2N1bWVudCA9IHBhcmVudE9mSW5zZXJ0ZWRUcmVlLmRv
Y3VtZW50KCk7CiAgICAgICAgIGFkZE9ic2VydmVyKGRvY3VtZW50KTsKQEAgLTEwNTQsNiArMTA1
Niw4IEBAIE5vZGU6Okluc2VydGVkSW50b0FuY2VzdG9yUmVzdWx0IEhUTUxDYW52YXNFbGVtZW50
OjppbnNlcnRlZEludG9BbmNlc3RvcihJbnNlcnRpCiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6
OnJlbW92ZWRGcm9tQW5jZXN0b3IoUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENvbnRhaW5lck5v
ZGUmIG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUpCiB7CisgICAgaWYgKHJlbW92YWxUeXBlLnRyZWVT
Y29wZUNoYW5nZWQpCisgICAgICAgIG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUudHJlZVNjb3BlKCku
ZGVjcmVtZW50Q2FudmFzQ291bnQoKTsKICAgICBpZiAobmVlZHNQcmVwYXJhdGlvbkZvckRpc3Bs
YXkoKSAmJiByZW1vdmFsVHlwZS5kaXNjb25uZWN0ZWRGcm9tRG9jdW1lbnQpIHsKICAgICAgICAg
b2xkUGFyZW50T2ZSZW1vdmVkVHJlZS5kb2N1bWVudCgpLmNsZWFyQ2FudmFzUHJlcGFyYXRpb24o
dGhpcyk7CiAgICAgICAgIHJlbW92ZU9ic2VydmVyKG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUuZG9j
dW1lbnQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
LmNwcAppbmRleCBjM2M2YWZmYjNiNWYuLjk0YzE4M2IzMmFkMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC0yOTMsNiArMjkzLDcgQEAg
Tm9kZTo6SW5zZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1bHQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvQW5jZXN0b3IoSW4KICAgICBpZiAobV9kYXRhTGlzdEFuY2VzdG9yU3RhdGUg
PT0gTm90SW5zaWRlRGF0YUxpc3QpCiAgICAgICAgIG1fZGF0YUxpc3RBbmNlc3RvclN0YXRlID0g
VW5rbm93bjsKIAorICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nLiBXZSBuZWVkIHRvIGNhbGwg
SFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9yIGZpcnN0LgogICAgIHVwZGF0ZVdpbGxW
YWxpZGF0ZUFuZFZhbGlkaXR5KCk7CiAgICAgaWYgKHdpbGxWYWxpZGF0ZSgpICYmICFpc1ZhbGlk
Rm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgIGFkZEludmFsaWRFbGVtZW50VG9BbmNlc3Rv
ckZyb21JbnNlcnRpb25Qb2ludCgqdGhpcywgJnBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAppbmRleCA5ZjllZGRmZWFhOWYuLjU0OTFk
MzM3MWFmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApAQCAtOTAx
LDkgKzkwMSwyMSBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6Y29weU5vbkF0dHJpYnV0ZVByb3Bl
cnRpZXNGcm9tRWxlbWVudChjb25zdCBFbGVtZW50JiBzb3VyYwogICAgIEhUTUxFbGVtZW50Ojpj
b3B5Tm9uQXR0cmlidXRlUHJvcGVydGllc0Zyb21FbGVtZW50KHNvdXJjZSk7CiB9CiAKLUhUTUxG
b3JtRWxlbWVudCogSFRNTEZvcm1FbGVtZW50OjpmaW5kQ2xvc2VzdEZvcm1BbmNlc3Rvcihjb25z
dCBFbGVtZW50JiBzdGFydEVsZW1lbnQpCitIVE1MRm9ybUVsZW1lbnQqIEhUTUxGb3JtRWxlbWVu
dDo6ZmluZENsb3Nlc3RGb3JtQW5jZXN0b3JTbG93Q2FzZShjb25zdCBFbGVtZW50JiBzdGFydEVs
ZW1lbnQpCiB7Ci0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oYW5jZXN0
b3JzT2ZUeXBlPEhUTUxGb3JtRWxlbWVudD4oc3RhcnRFbGVtZW50KS5maXJzdCgpKTsKKyAgICBB
U1NFUlQoIXN0YXJ0RWxlbWVudC5oYXNOb0Zvcm1BbmNlc3RvcigpKTsKKyAgICBSZWZQdHI8SFRN
TEZvcm1FbGVtZW50PiBmb3JtOworICAgIGZvciAoYXV0byYgYW5jZXN0b3IgOiBhbmNlc3RvcnNP
ZlR5cGU8RWxlbWVudD4oc3RhcnRFbGVtZW50KSkgeworICAgICAgICBpZiAoYW5jZXN0b3IuaGFz
Tm9Gb3JtQW5jZXN0b3IoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoVU5MSUtF
TFkoaXM8SFRNTEZvcm1FbGVtZW50PihhbmNlc3RvcikpKQorICAgICAgICAgICAgZm9ybSA9ICZk
b3duY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KGNvbnN0X2Nhc3Q8RWxlbWVudCY+KGFuY2VzdG9yKSk7
CisgICAgfQorICAgIGlmIChmb3JtKQorICAgICAgICByZXR1cm4gZm9ybS5nZXQoKTsKKyAgICBm
b3IgKGF1dG8mIGFuY2VzdG9yIDogbGluZWFnZU9mVHlwZTxFbGVtZW50PihzdGFydEVsZW1lbnQp
KQorICAgICAgICBjb25zdF9jYXN0PEVsZW1lbnQmPihhbmNlc3Rvcikuc2V0SGFzTm9Gb3JtQW5j
ZXN0b3IoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6
OnNldEF1dG9jb21wbGV0ZShjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb3JtRWxlbWVudC5oCmluZGV4IDgwNzI4OGY0YWQwYi4uZWMyMzU5YWZkMTExIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKQEAgLTEyMSw3ICsxMjEsMTIgQEAgcHVi
bGljOgogCiAgICAgU3RyaW5nUGFpclZlY3RvciB0ZXh0RmllbGRWYWx1ZXMoKSBjb25zdDsKIAot
ICAgIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQqIGZpbmRDbG9zZXN0Rm9ybUFuY2VzdG9yKGNvbnN0
IEVsZW1lbnQmKTsKKyAgICBzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBmaW5kQ2xvc2VzdEZvcm1B
bmNlc3Rvcihjb25zdCBFbGVtZW50JiBlbGVtZW50KQorICAgIHsKKyAgICAgICAgaWYgKGVsZW1l
bnQuaGFzTm9Gb3JtQW5jZXN0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4gZmluZENsb3Nlc3RGb3JtQW5jZXN0b3JTbG93Q2FzZShlbGVtZW50KTsKKyAg
ICB9CiAKIHByaXZhdGU6CiAgICAgSFRNTEZvcm1FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCYpOwpAQCAtMTY2LDYgKzE3MSw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJl
c2V0QXNzb2NpYXRlZEZvcm1Db250cm9sRWxlbWVudHMoKTsKIAorICAgIHN0YXRpYyBIVE1MRm9y
bUVsZW1lbnQqIGZpbmRDbG9zZXN0Rm9ybUFuY2VzdG9yU2xvd0Nhc2UoY29uc3QgRWxlbWVudCYp
OworCiAgICAgRm9ybVN1Ym1pc3Npb246OkF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogICAgIEhh
c2hNYXA8QXRvbVN0cmluZywgV2Vha1B0cjxIVE1MRWxlbWVudD4+IG1fcGFzdE5hbWVzTWFwOwog
Cg==
</data>
<flag name="commit-queue"
          id="439629"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421386</attachid>
            <date>2021-02-23 22:32:58 -0800</date>
            <delta_ts>2021-02-24 18:11:33 -0800</delta_ts>
            <desc>WIP2 - alternative approach</desc>
            <filename>wip222159b.patch</filename>
            <type>text/plain</type>
            <size>26131</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCmluZGV4
IDM2OTk5N2UwYjBhZi4uZTUzYTQ3NDM5OTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9D
b250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAKQEAgLTQxLDE5ICs0MSwyMCBAQCBDb250YWluZXJD
aGlsZFJlbW92YWxTY29wZSogQ29udGFpbmVyQ2hpbGRSZW1vdmFsU2NvcGU6OnNfc2NvcGUgPSBu
dWxscHRyOwogCiBlbnVtIGNsYXNzIFRyZWVTY29wZUNoYW5nZSB7IENoYW5nZWQsIERpZE5vdENo
YW5nZSB9OwogCi1zdGF0aWMgdm9pZCBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQoQ29u
dGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUsIE5vZGUmIG5vZGUsIFRyZWVTY29wZUNo
YW5nZSB0cmVlU2NvcGVDaGFuZ2UsIE5vZGVWZWN0b3ImIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRp
b25UYXJnZXRzKQorc3RhdGljIHZvaWQgbm90aWZ5Tm9kZUluc2VydGVkSW50b0RvY3VtZW50KENv
bnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlLCBOb2RlJiBub2RlLCBUcmVlU2NvcGVD
aGFuZ2UgdHJlZVNjb3BlQ2hhbmdlLCBPcHRpb25TZXQ8Tm9kZTo6QW5jZXN0b3JTdGF0ZT4gYW5j
ZXN0b3JTdGF0ZXMsIE5vZGVWZWN0b3ImIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRz
KQogewogICAgIEFTU0VSVChwYXJlbnRPZkluc2VydGVkVHJlZS5pc0Nvbm5lY3RlZCgpKTsKICAg
ICBBU1NFUlQoIW5vZGUuaXNDb25uZWN0ZWQoKSk7Ci0gICAgaWYgKG5vZGUuaW5zZXJ0ZWRJbnRv
QW5jZXN0b3IoTm9kZTo6SW5zZXJ0aW9uVHlwZSB7IC8qIGNvbm5lY3RlZFRvRG9jdW1lbnQgKi8g
dHJ1ZSwgdHJlZVNjb3BlQ2hhbmdlID09IFRyZWVTY29wZUNoYW5nZTo6Q2hhbmdlZCB9LCBwYXJl
bnRPZkluc2VydGVkVHJlZSkgPT0gTm9kZTo6SW5zZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1bHQ6Ok5l
ZWRzUG9zdEluc2VydGlvbkNhbGxiYWNrKQorICAgIGlmIChub2RlLmluc2VydGVkSW50b0FuY2Vz
dG9yKE5vZGU6Okluc2VydGlvblR5cGUgeyAvKiBjb25uZWN0ZWRUb0RvY3VtZW50ICovIHRydWUs
IHRyZWVTY29wZUNoYW5nZSA9PSBUcmVlU2NvcGVDaGFuZ2U6OkNoYW5nZWQsIGFuY2VzdG9yU3Rh
dGVzIH0sIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKSA9PSBOb2RlOjpJbnNlcnRlZEludG9BbmNlc3Rv
clJlc3VsdDo6TmVlZHNQb3N0SW5zZXJ0aW9uQ2FsbGJhY2spCiAgICAgICAgIHBvc3RJbnNlcnRp
b25Ob3RpZmljYXRpb25UYXJnZXRzLmFwcGVuZChub2RlKTsKIAogICAgIGlmICghaXM8Q29udGFp
bmVyTm9kZT4obm9kZSkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8gYW5jZXN0b3JTdGF0
ZXNPZkNoaWxkTm9kZXMgPSBub2RlLmluY2x1c2l2ZUFuY2VzdG9yU3RhdGVzKCk7CiAgICAgZm9y
IChSZWZQdHI8Tm9kZT4gY2hpbGQgPSBkb3duY2FzdDxDb250YWluZXJOb2RlPihub2RlKS5maXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5pc0Nvbm5lY3Rl
ZCgpICYmIGNoaWxkLT5wYXJlbnROb2RlKCkgPT0gJm5vZGUpOwotICAgICAgICBub3RpZnlOb2Rl
SW5zZXJ0ZWRJbnRvRG9jdW1lbnQocGFyZW50T2ZJbnNlcnRlZFRyZWUsICpjaGlsZCwgdHJlZVNj
b3BlQ2hhbmdlLCBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyk7CisgICAgICAgIG5v
dGlmeU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudChwYXJlbnRPZkluc2VydGVkVHJlZSwgKmNoaWxk
LCB0cmVlU2NvcGVDaGFuZ2UsIGFuY2VzdG9yU3RhdGVzT2ZDaGlsZE5vZGVzLCBwb3N0SW5zZXJ0
aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyk7CiAgICAgfQogCiAgICAgaWYgKCFpczxFbGVtZW50Pihu
b2RlKSkKQEAgLTYxLDI5ICs2MiwzMCBAQCBzdGF0aWMgdm9pZCBub3RpZnlOb2RlSW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQoQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUsCiAKICAgICBp
ZiAoUmVmUHRyPFNoYWRvd1Jvb3Q+IHJvb3QgPSBkb3duY2FzdDxFbGVtZW50Pihub2RlKS5zaGFk
b3dSb290KCkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihub2RlLmlzQ29ubmVjdGVkKCkgJiYgcm9vdC0+aG9zdCgpID09ICZub2RlKTsKLSAgICAg
ICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b0RvY3VtZW50KHBhcmVudE9mSW5zZXJ0ZWRUcmVlLCAq
cm9vdCwgVHJlZVNjb3BlQ2hhbmdlOjpEaWROb3RDaGFuZ2UsIHBvc3RJbnNlcnRpb25Ob3RpZmlj
YXRpb25UYXJnZXRzKTsKKyAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b0RvY3VtZW50KHBh
cmVudE9mSW5zZXJ0ZWRUcmVlLCAqcm9vdCwgVHJlZVNjb3BlQ2hhbmdlOjpEaWROb3RDaGFuZ2Us
IHsgfSwgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOwogICAgIH0KIH0KIAotc3Rh
dGljIHZvaWQgbm90aWZ5Tm9kZUluc2VydGVkSW50b1RyZWUoQ29udGFpbmVyTm9kZSYgcGFyZW50
T2ZJbnNlcnRlZFRyZWUsIE5vZGUmIG5vZGUsIFRyZWVTY29wZUNoYW5nZSB0cmVlU2NvcGVDaGFu
Z2UsIE5vZGVWZWN0b3ImIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKQorc3RhdGlj
IHZvaWQgbm90aWZ5Tm9kZUluc2VydGVkSW50b1RyZWUoQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJ
bnNlcnRlZFRyZWUsIE5vZGUmIG5vZGUsIFRyZWVTY29wZUNoYW5nZSB0cmVlU2NvcGVDaGFuZ2Us
IE9wdGlvblNldDxOb2RlOjpBbmNlc3RvclN0YXRlPiBhbmNlc3RvclN0YXRlcywgTm9kZVZlY3Rv
ciYgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpCiB7CiAgICAgQVNTRVJUKCFwYXJl
bnRPZkluc2VydGVkVHJlZS5pc0Nvbm5lY3RlZCgpKTsKICAgICBBU1NFUlQoIW5vZGUuaXNDb25u
ZWN0ZWQoKSk7CiAKLSAgICBpZiAobm9kZS5pbnNlcnRlZEludG9BbmNlc3RvcihOb2RlOjpJbnNl
cnRpb25UeXBlIHsgLyogY29ubmVjdGVkVG9Eb2N1bWVudCAqLyBmYWxzZSwgdHJlZVNjb3BlQ2hh
bmdlID09IFRyZWVTY29wZUNoYW5nZTo6Q2hhbmdlZCB9LCBwYXJlbnRPZkluc2VydGVkVHJlZSkg
PT0gTm9kZTo6SW5zZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1bHQ6Ok5lZWRzUG9zdEluc2VydGlvbkNh
bGxiYWNrKQorICAgIGlmIChub2RlLmluc2VydGVkSW50b0FuY2VzdG9yKE5vZGU6Okluc2VydGlv
blR5cGUgeyAvKiBjb25uZWN0ZWRUb0RvY3VtZW50ICovIGZhbHNlLCB0cmVlU2NvcGVDaGFuZ2Ug
PT0gVHJlZVNjb3BlQ2hhbmdlOjpDaGFuZ2VkLCBhbmNlc3RvclN0YXRlcyB9LCBwYXJlbnRPZklu
c2VydGVkVHJlZSkgPT0gTm9kZTo6SW5zZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1bHQ6Ok5lZWRzUG9z
dEluc2VydGlvbkNhbGxiYWNrKQogICAgICAgICBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFy
Z2V0cy5hcHBlbmQobm9kZSk7CiAKICAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KG5vZGUpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvIGFuY2VzdG9yU3RhdGVzT2ZDaGlsZE5vZGVzID0g
bm9kZS5pbmNsdXNpdmVBbmNlc3RvclN0YXRlcygpOwogICAgIGZvciAoUmVmUHRyPE5vZGU+IGNo
aWxkID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4obm9kZSkuZmlyc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVk
SW50b1RyZWUocGFyZW50T2ZJbnNlcnRlZFRyZWUsICpjaGlsZCwgdHJlZVNjb3BlQ2hhbmdlLCBw
b3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyk7CisgICAgICAgIG5vdGlmeU5vZGVJbnNl
cnRlZEludG9UcmVlKHBhcmVudE9mSW5zZXJ0ZWRUcmVlLCAqY2hpbGQsIHRyZWVTY29wZUNoYW5n
ZSwgYW5jZXN0b3JTdGF0ZXNPZkNoaWxkTm9kZXMsIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25U
YXJnZXRzKTsKIAogICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChSZWZQdHI8U2hhZG93Um9vdD4gcm9vdCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5v
ZGUpLnNoYWRvd1Jvb3QoKSkKLSAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b1RyZWUocGFy
ZW50T2ZJbnNlcnRlZFRyZWUsICpyb290LCBUcmVlU2NvcGVDaGFuZ2U6OkRpZE5vdENoYW5nZSwg
cG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOworICAgICAgICBub3RpZnlOb2RlSW5z
ZXJ0ZWRJbnRvVHJlZShwYXJlbnRPZkluc2VydGVkVHJlZSwgKnJvb3QsIFRyZWVTY29wZUNoYW5n
ZTo6RGlkTm90Q2hhbmdlLCB7IH0sIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsK
IH0KIAogTm9kZVZlY3RvciBub3RpZnlDaGlsZE5vZGVJbnNlcnRlZChDb250YWluZXJOb2RlJiBw
YXJlbnRPZkluc2VydGVkVHJlZSwgTm9kZSYgbm9kZSkKQEAgLTEwMCw5ICsxMDIsOSBAQCBOb2Rl
VmVjdG9yIG5vdGlmeUNoaWxkTm9kZUluc2VydGVkKENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5z
ZXJ0ZWRUcmVlLCBOb2RlJiBubwogICAgIC8vIFRyZWUgc2NvcGUgaGFzIGNoYW5nZWQgaWYgdGhl
IGNvbnRhaW5lciBub2RlIGludG8gd2hpY2ggIm5vZGUiIGlzIGluc2VydGVkIGlzIGluIGEgZG9j
dW1lbnQgb3IgYSBzaGFkb3cgcm9vdC4KICAgICBhdXRvIHRyZWVTY29wZUNoYW5nZSA9IHBhcmVu
dE9mSW5zZXJ0ZWRUcmVlLmlzSW5UcmVlU2NvcGUoKSA/IFRyZWVTY29wZUNoYW5nZTo6Q2hhbmdl
ZCA6IFRyZWVTY29wZUNoYW5nZTo6RGlkTm90Q2hhbmdlOwogICAgIGlmIChwYXJlbnRPZkluc2Vy
dGVkVHJlZS5pc0Nvbm5lY3RlZCgpKQotICAgICAgICBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9j
dW1lbnQocGFyZW50T2ZJbnNlcnRlZFRyZWUsIG5vZGUsIHRyZWVTY29wZUNoYW5nZSwgcG9zdElu
c2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOworICAgICAgICBub3RpZnlOb2RlSW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQocGFyZW50T2ZJbnNlcnRlZFRyZWUsIG5vZGUsIHRyZWVTY29wZUNoYW5nZSwg
cGFyZW50T2ZJbnNlcnRlZFRyZWUuaW5jbHVzaXZlQW5jZXN0b3JTdGF0ZXMoKSwgcG9zdEluc2Vy
dGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOwogICAgIGVsc2UKLSAgICAgICAgbm90aWZ5Tm9kZUlu
c2VydGVkSW50b1RyZWUocGFyZW50T2ZJbnNlcnRlZFRyZWUsIG5vZGUsIHRyZWVTY29wZUNoYW5n
ZSwgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOworICAgICAgICBub3RpZnlOb2Rl
SW5zZXJ0ZWRJbnRvVHJlZShwYXJlbnRPZkluc2VydGVkVHJlZSwgbm9kZSwgdHJlZVNjb3BlQ2hh
bmdlLCBwYXJlbnRPZkluc2VydGVkVHJlZS5pbmNsdXNpdmVBbmNlc3RvclN0YXRlcygpLCBwb3N0
SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyk7CiAKICAgICByZXR1cm4gcG9zdEluc2VydGlv
bk5vdGlmaWNhdGlvblRhcmdldHM7CiB9CkBAIC0xMTksMTkgKzEyMSwyMCBAQCBpbmxpbmUgdm9p
ZCB1cGRhdGVPYnNlcnZhYmlsaXR5KFJlbW92ZWRTdWJ0cmVlT2JzZXJ2YWJpbGl0eSYgY3VycmVu
dE9ic2VydmFiaWxpdAogICAgICAgICBjdXJyZW50T2JzZXJ2YWJpbGl0eSA9IG5ld1N0YXR1czsK
IH0KIAotc3RhdGljIFJlbW92ZWRTdWJ0cmVlT2JzZXJ2YWJpbGl0eSBub3RpZnlOb2RlUmVtb3Zl
ZEZyb21Eb2N1bWVudChDb250YWluZXJOb2RlJiBvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLCBUcmVl
U2NvcGVDaGFuZ2UgdHJlZVNjb3BlQ2hhbmdlLCBOb2RlJiBub2RlKQorc3RhdGljIFJlbW92ZWRT
dWJ0cmVlT2JzZXJ2YWJpbGl0eSBub3RpZnlOb2RlUmVtb3ZlZEZyb21Eb2N1bWVudChDb250YWlu
ZXJOb2RlJiBvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLCBUcmVlU2NvcGVDaGFuZ2UgdHJlZVNjb3Bl
Q2hhbmdlLCBPcHRpb25TZXQ8Tm9kZTo6QW5jZXN0b3JTdGF0ZT4gYW5jZXN0b3JTdGF0ZXMsIE5v
ZGUmIG5vZGUpCiB7CiAgICAgQVNTRVJUKG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUuaXNDb25uZWN0
ZWQoKSk7CiAgICAgQVNTRVJUKG5vZGUuaXNDb25uZWN0ZWQoKSk7Ci0gICAgbm9kZS5yZW1vdmVk
RnJvbUFuY2VzdG9yKE5vZGU6OlJlbW92YWxUeXBlIHsgLyogZGlzY29ubmVjdGVkRnJvbURvY3Vt
ZW50ICovIHRydWUsIHRyZWVTY29wZUNoYW5nZSA9PSBUcmVlU2NvcGVDaGFuZ2U6OkNoYW5nZWQg
fSwgb2xkUGFyZW50T2ZSZW1vdmVkVHJlZSk7CisgICAgbm9kZS5yZW1vdmVkRnJvbUFuY2VzdG9y
KE5vZGU6OlJlbW92YWxUeXBlIHsgLyogZGlzY29ubmVjdGVkRnJvbURvY3VtZW50ICovIHRydWUs
IHRyZWVTY29wZUNoYW5nZSA9PSBUcmVlU2NvcGVDaGFuZ2U6OkNoYW5nZWQsIGFuY2VzdG9yU3Rh
dGVzIH0sIG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUpOwogCiAgICAgYXV0byBvYnNlcnZhYmlsaXR5
ID0gb2JzZXJ2YWJpbGl0eU9mUmVtb3ZlZE5vZGUobm9kZSk7CiAgICAgaWYgKCFpczxDb250YWlu
ZXJOb2RlPihub2RlKSkKICAgICAgICAgcmV0dXJuIG9ic2VydmFiaWxpdHk7CiAKKyAgICBhdXRv
IGFuY2VzdG9yU3RhdGVzT2ZDaGlsZE5vZGVzID0gbm9kZS5pbmNsdXNpdmVBbmNlc3RvclN0YXRl
cygpOwogICAgIGZvciAoUmVmUHRyPE5vZGU+IGNoaWxkID0gZG93bmNhc3Q8Q29udGFpbmVyTm9k
ZT4obm9kZSkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFu
b2RlLmlzQ29ubmVjdGVkKCkgJiYgY2hpbGQtPnBhcmVudE5vZGUoKSA9PSAmbm9kZSk7Ci0gICAg
ICAgIHVwZGF0ZU9ic2VydmFiaWxpdHkob2JzZXJ2YWJpbGl0eSwgbm90aWZ5Tm9kZVJlbW92ZWRG
cm9tRG9jdW1lbnQob2xkUGFyZW50T2ZSZW1vdmVkVHJlZSwgdHJlZVNjb3BlQ2hhbmdlLCAqY2hp
bGQuZ2V0KCkpKTsKKyAgICAgICAgdXBkYXRlT2JzZXJ2YWJpbGl0eShvYnNlcnZhYmlsaXR5LCBu
b3RpZnlOb2RlUmVtb3ZlZEZyb21Eb2N1bWVudChvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLCB0cmVl
U2NvcGVDaGFuZ2UsIGFuY2VzdG9yU3RhdGVzT2ZDaGlsZE5vZGVzLCAqY2hpbGQuZ2V0KCkpKTsK
ICAgICB9CiAKICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQpAQCAtMTM5LDI5ICsxNDIsMzAg
QEAgc3RhdGljIFJlbW92ZWRTdWJ0cmVlT2JzZXJ2YWJpbGl0eSBub3RpZnlOb2RlUmVtb3ZlZEZy
b21Eb2N1bWVudChDb250YWluZXJOb2RlJgogCiAgICAgaWYgKFJlZlB0cjxTaGFkb3dSb290PiBy
b290ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkuc2hhZG93Um9vdCgpKSB7CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUuaXNDb25uZWN0ZWQo
KSAmJiByb290LT5ob3N0KCkgPT0gJm5vZGUpOwotICAgICAgICB1cGRhdGVPYnNlcnZhYmlsaXR5
KG9ic2VydmFiaWxpdHksIG5vdGlmeU5vZGVSZW1vdmVkRnJvbURvY3VtZW50KG9sZFBhcmVudE9m
UmVtb3ZlZFRyZWUsIFRyZWVTY29wZUNoYW5nZTo6RGlkTm90Q2hhbmdlLCAqcm9vdC5nZXQoKSkp
OworICAgICAgICB1cGRhdGVPYnNlcnZhYmlsaXR5KG9ic2VydmFiaWxpdHksIG5vdGlmeU5vZGVS
ZW1vdmVkRnJvbURvY3VtZW50KG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUsIFRyZWVTY29wZUNoYW5n
ZTo6RGlkTm90Q2hhbmdlLCB7IH0sICpyb290LmdldCgpKSk7CiAgICAgfQogICAgIHJldHVybiBv
YnNlcnZhYmlsaXR5OwogfQogCi1zdGF0aWMgUmVtb3ZlZFN1YnRyZWVPYnNlcnZhYmlsaXR5IG5v
dGlmeU5vZGVSZW1vdmVkRnJvbVRyZWUoQ29udGFpbmVyTm9kZSYgb2xkUGFyZW50T2ZSZW1vdmVk
VHJlZSwgVHJlZVNjb3BlQ2hhbmdlIHRyZWVTY29wZUNoYW5nZSwgTm9kZSYgbm9kZSkKK3N0YXRp
YyBSZW1vdmVkU3VidHJlZU9ic2VydmFiaWxpdHkgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tVHJlZShD
b250YWluZXJOb2RlJiBvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLCBUcmVlU2NvcGVDaGFuZ2UgdHJl
ZVNjb3BlQ2hhbmdlLCBPcHRpb25TZXQ8Tm9kZTo6QW5jZXN0b3JTdGF0ZT4gYW5jZXN0b3JTdGF0
ZXMsIE5vZGUmIG5vZGUpCiB7CiAgICAgQVNTRVJUKCFvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLmlz
Q29ubmVjdGVkKCkpOwogCi0gICAgbm9kZS5yZW1vdmVkRnJvbUFuY2VzdG9yKE5vZGU6OlJlbW92
YWxUeXBlIHsgLyogZGlzY29ubmVjdGVkRnJvbURvY3VtZW50ICovIGZhbHNlLCB0cmVlU2NvcGVD
aGFuZ2UgPT0gVHJlZVNjb3BlQ2hhbmdlOjpDaGFuZ2VkIH0sIG9sZFBhcmVudE9mUmVtb3ZlZFRy
ZWUpOworICAgIG5vZGUucmVtb3ZlZEZyb21BbmNlc3RvcihOb2RlOjpSZW1vdmFsVHlwZSB7IC8q
IGRpc2Nvbm5lY3RlZEZyb21Eb2N1bWVudCAqLyBmYWxzZSwgdHJlZVNjb3BlQ2hhbmdlID09IFRy
ZWVTY29wZUNoYW5nZTo6Q2hhbmdlZCwgYW5jZXN0b3JTdGF0ZXMgfSwgb2xkUGFyZW50T2ZSZW1v
dmVkVHJlZSk7CiAKICAgICBhdXRvIG9ic2VydmFiaWxpdHkgPSBvYnNlcnZhYmlsaXR5T2ZSZW1v
dmVkTm9kZShub2RlKTsKICAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KG5vZGUpKQogICAgICAg
ICByZXR1cm4gb2JzZXJ2YWJpbGl0eTsKIAorICAgIGF1dG8gYW5jZXN0b3JTdGF0ZXNPZkNoaWxk
Tm9kZXMgPSBub2RlLmluY2x1c2l2ZUFuY2VzdG9yU3RhdGVzKCk7CiAgICAgZm9yIChSZWZQdHI8
Tm9kZT4gY2hpbGQgPSBkb3duY2FzdDxDb250YWluZXJOb2RlPihub2RlKS5maXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICB1cGRhdGVPYnNl
cnZhYmlsaXR5KG9ic2VydmFiaWxpdHksIG5vdGlmeU5vZGVSZW1vdmVkRnJvbVRyZWUob2xkUGFy
ZW50T2ZSZW1vdmVkVHJlZSwgdHJlZVNjb3BlQ2hhbmdlLCAqY2hpbGQpKTsKKyAgICAgICAgdXBk
YXRlT2JzZXJ2YWJpbGl0eShvYnNlcnZhYmlsaXR5LCBub3RpZnlOb2RlUmVtb3ZlZEZyb21UcmVl
KG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUsIHRyZWVTY29wZUNoYW5nZSwgYW5jZXN0b3JTdGF0ZXNP
ZkNoaWxkTm9kZXMsICpjaGlsZCkpOwogCiAgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAg
ICAgICAgcmV0dXJuIG9ic2VydmFiaWxpdHk7CiAKICAgICBpZiAoUmVmUHRyPFNoYWRvd1Jvb3Q+
IHJvb3QgPSBkb3duY2FzdDxFbGVtZW50Pihub2RlKS5zaGFkb3dSb290KCkpCi0gICAgICAgIHVw
ZGF0ZU9ic2VydmFiaWxpdHkob2JzZXJ2YWJpbGl0eSwgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tVHJl
ZShvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLCBUcmVlU2NvcGVDaGFuZ2U6OkRpZE5vdENoYW5nZSwg
KnJvb3QpKTsKKyAgICAgICAgdXBkYXRlT2JzZXJ2YWJpbGl0eShvYnNlcnZhYmlsaXR5LCBub3Rp
ZnlOb2RlUmVtb3ZlZEZyb21UcmVlKG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUsIFRyZWVTY29wZUNo
YW5nZTo6RGlkTm90Q2hhbmdlLCB7IH0sICpyb290KSk7CiAKICAgICByZXR1cm4gb2JzZXJ2YWJp
bGl0eTsKIH0KQEAgLTE3NSw4ICsxNzksOCBAQCBSZW1vdmVkU3VidHJlZU9ic2VydmFiaWxpdHkg
bm90aWZ5Q2hpbGROb2RlUmVtb3ZlZChDb250YWluZXJOb2RlJiBvbGRQYXJlbnRPZlJlbQogICAg
IC8vIFRyZWUgc2NvcGUgaGFzIGNoYW5nZWQgaWYgdGhlIGNvbnRhaW5lciBub2RlIGZyb20gd2hp
Y2ggIm5vZGUiIGlzIHJlbW92ZWQgaXMgaW4gYSBkb2N1bWVudCBvciBhIHNoYWRvdyByb290Lgog
ICAgIGF1dG8gdHJlZVNjb3BlQ2hhbmdlID0gb2xkUGFyZW50T2ZSZW1vdmVkVHJlZS5pc0luVHJl
ZVNjb3BlKCkgPyBUcmVlU2NvcGVDaGFuZ2U6OkNoYW5nZWQgOiBUcmVlU2NvcGVDaGFuZ2U6OkRp
ZE5vdENoYW5nZTsKICAgICBpZiAoY2hpbGQuaXNDb25uZWN0ZWQoKSkKLSAgICAgICAgcmV0dXJu
IG5vdGlmeU5vZGVSZW1vdmVkRnJvbURvY3VtZW50KG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUsIHRy
ZWVTY29wZUNoYW5nZSwgY2hpbGQpOwotICAgIHJldHVybiBub3RpZnlOb2RlUmVtb3ZlZEZyb21U
cmVlKG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUsIHRyZWVTY29wZUNoYW5nZSwgY2hpbGQpOworICAg
ICAgICByZXR1cm4gbm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQob2xkUGFyZW50T2ZSZW1v
dmVkVHJlZSwgdHJlZVNjb3BlQ2hhbmdlLCB7IH0sIGNoaWxkKTsKKyAgICByZXR1cm4gbm90aWZ5
Tm9kZVJlbW92ZWRGcm9tVHJlZShvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLCB0cmVlU2NvcGVDaGFu
Z2UsIHsgfSwgY2hpbGQpOwogfQogCiB2b2lkIGFkZENoaWxkTm9kZXNUb0RlbGV0aW9uUXVldWUo
Tm9kZSomIGhlYWQsIE5vZGUqJiB0YWlsLCBDb250YWluZXJOb2RlJiBjb250YWluZXIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAKaW5kZXggZjg4NmEwZmNkN2U5Li5mMGY2OGQxOTEwYWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAKQEAgLTYzOSw3ICs2MzksMTAgQEAgYm9vbCBFbGVtZW50Ojppc0ZvY3Vz
YWJsZSgpIGNvbnN0CiAgICAgaWYgKCFpc0Nvbm5lY3RlZCgpIHx8ICFzdXBwb3J0c0ZvY3VzKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghcmVuZGVyZXIoKSkgeworICAgIGJv
b2wgaGFzQ2FudmFzQXNJbmNsdXNpdmVBbmNlc3RvciA9IGluY2x1c2l2ZUFuY2VzdG9yU3RhdGVz
KCkuY29udGFpbnMoQW5jZXN0b3JTdGF0ZTo6Q2FudmFzKTsKKyAgICBBU1NFUlQoaGFzQ2FudmFz
QXNJbmNsdXNpdmVBbmNlc3RvciA9PSAhIWFuY2VzdG9yc09mVHlwZTxIVE1MQ2FudmFzRWxlbWVu
dD4oKnRoaXMpLmZpcnN0KCkKKyAgICAgICAgfHwgKGhhc0NhbnZhc0FzSW5jbHVzaXZlQW5jZXN0
b3IgJiYgaXM8SFRNTENhbnZhc0VsZW1lbnQ+KCp0aGlzKSkpOworICAgIGlmICghcmVuZGVyZXIo
KSAmJiBoYXNDYW52YXNBc0luY2x1c2l2ZUFuY2VzdG9yKSB7CiAgICAgICAgIC8vIEVsZW1lbnRz
IGluIGNhbnZhcyBmYWxsYmFjayBjb250ZW50IGFyZSBub3QgcmVuZGVyZWQsIGJ1dCB0aGV5IGFy
ZSBhbGxvd2VkIHRvIGJlCiAgICAgICAgIC8vIGZvY3VzYWJsZSBhcyBsb25nIGFzIHRoZWlyIGNh
bnZhcyBpcyBkaXNwbGF5ZWQgYW5kIHZpc2libGUuCiAgICAgICAgIGlmIChhdXRvKiBjYW52YXMg
PSBhbmNlc3RvcnNPZlR5cGU8SFRNTENhbnZhc0VsZW1lbnQ+KCp0aGlzKS5maXJzdCgpKQpAQCAt
MjE1NCw2ICsyMTU3LDggQEAgTm9kZTo6SW5zZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1bHQgRWxlbWVu
dDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3IoSW5zZXJ0aW9uVHlwZSBpbnMKIHsKICAgICBDb250YWlu
ZXJOb2RlOjppbnNlcnRlZEludG9BbmNlc3RvcihpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2Vy
dGVkVHJlZSk7CiAKKyAgICBzZXRJbmNsdXNpdmVBbmNlc3RvclN0YXRlcyhpbnNlcnRpb25UeXBl
LmFuY2VzdG9yU3RhdGVzKTsKKwogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICBpZiAo
Y29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCgpICYmIHBhcmVudEVsZW1lbnQoKSAmJiAhcGFyZW50
RWxlbWVudCgpLT5jb250YWluc0Z1bGxTY3JlZW5FbGVtZW50KCkpCiAgICAgICAgIHNldENvbnRh
aW5zRnVsbFNjcmVlbkVsZW1lbnRPbkFuY2VzdG9yc0Nyb3NzaW5nRnJhbWVCb3VuZGFyaWVzKHRy
dWUpOwpAQCAtMjIxMSwxMSArMjIxNiwxMyBAQCBOb2RlOjpJbnNlcnRlZEludG9BbmNlc3RvclJl
c3VsdCBFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3RvcihJbnNlcnRpb25UeXBlIGlucwogCiB2
b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IoUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUs
IENvbnRhaW5lck5vZGUmIG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUpCiB7CisgICAgc2V0SW5jbHVz
aXZlQW5jZXN0b3JTdGF0ZXMocmVtb3ZhbFR5cGUuYW5jZXN0b3JTdGF0ZXMpOworCiAjaWYgRU5B
QkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIGlmIChjb250YWluc0Z1bGxTY3JlZW5FbGVtZW50KCkp
CiAgICAgICAgIHNldENvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnRPbkFuY2VzdG9yc0Nyb3NzaW5n
RnJhbWVCb3VuZGFyaWVzKGZhbHNlKTsKICNlbmRpZgotICAgIAorCiAgICAgaWYgKGF1dG8qIHBh
Z2UgPSBkb2N1bWVudCgpLnBhZ2UoKSkgewogI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCiAgICAg
ICAgIHBhZ2UtPnBvaW50ZXJMb2NrQ29udHJvbGxlcigpLmVsZW1lbnRXYXNSZW1vdmVkKCp0aGlz
KTsKQEAgLTIzOTMsNiArMjQwMCw4IEBAIEV4Y2VwdGlvbk9yPFNoYWRvd1Jvb3QmPiBFbGVtZW50
OjphdHRhY2hTaGFkb3coY29uc3QgU2hhZG93Um9vdEluaXQmIGluaXQpCiAgICAgaWYgKGluaXQu
bW9kZSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KQogICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgVHlwZUVycm9yIH07CiAgICAgYXV0byBzaGFkb3cgPSBTaGFkb3dSb290OjpjcmVhdGUo
ZG9jdW1lbnQoKSwgaW5pdC5tb2RlLCBpbml0LmRlbGVnYXRlc0ZvY3VzID8gU2hhZG93Um9vdDo6
RGVsZWdhdGVzRm9jdXM6OlllcyA6IFNoYWRvd1Jvb3Q6OkRlbGVnYXRlc0ZvY3VzOjpObyk7Cisg
ICAgaWYgKGluaXQuZGVsZWdhdGVzRm9jdXMpCisgICAgICAgIHNldERlbGVnYXRlc0ZvY3VzVG9T
aGFkb3dSb290KCk7CiAgICAgYXV0byYgcmVzdWx0ID0gc2hhZG93LmdldCgpOwogICAgIGFkZFNo
YWRvd1Jvb3QoV1RGTW92ZShzaGFkb3cpKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjk2NSw3
ICsyOTc0LDcgQEAgYm9vbCBFbGVtZW50OjpoYXNBdHRyaWJ1dGVOUyhjb25zdCBBdG9tU3RyaW5n
JiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21TdHJpbmcmIGwKIAogc3RhdGljIFJlZlB0cjxTaGFk
b3dSb290PiBzaGFkb3dSb290V2l0aERlbGVnYXRlc0ZvY3VzKGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQpCiB7Ci0gICAgaWYgKGF1dG8qIHJvb3QgPSBlbGVtZW50LnNoYWRvd1Jvb3QoKSkgeworICAg
IGlmIChhdXRvKiByb290ID0gZWxlbWVudC5zaGFkb3dSb290KCk7IFVOTElLRUxZKHJvb3QpKSB7
CiAgICAgICAgIGlmIChyb290LT5kZWxlZ2F0ZXNGb2N1cygpKQogICAgICAgICAgICAgcmV0dXJu
IHJvb3Q7CiAgICAgfQpAQCAtMjk3Niw3ICsyOTg1LDggQEAgc3RhdGljIGJvb2wgaXNQcm9ncmFt
YXRpY2FsbHlGb2N1c2FibGUoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBTY3JpcHREaXNhbGxv
d2VkU2NvcGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNhbGxvd2VkU2NvcGU7CiAKLSAgICBpZiAo
c2hhZG93Um9vdFdpdGhEZWxlZ2F0ZXNGb2N1cyhlbGVtZW50KSkKKyAgICBBU1NFUlQoZWxlbWVu
dC5kZWxlZ2F0ZXNGb2N1c1RvU2hhZG93Um9vdCgpID09ICEhc2hhZG93Um9vdFdpdGhEZWxlZ2F0
ZXNGb2N1cyhlbGVtZW50KSk7CisgICAgaWYgKGVsZW1lbnQuZGVsZWdhdGVzRm9jdXNUb1NoYWRv
d1Jvb3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gSWYgdGhlIHN0eWxlc2hl
ZXRzIGhhdmUgYWxyZWFkeSBiZWVuIGxvYWRlZCB3ZSBjYW4gcmVsaWFibHkgY2hlY2sgaXNGb2N1
c2FibGUuCkBAIC0zMDIzLDcgKzMwMzMsOSBAQCB2b2lkIEVsZW1lbnQ6OmZvY3VzKFNlbGVjdGlv
blJlc3RvcmF0aW9uTW9kZSByZXN0b3JhdGlvbk1vZGUsIEZvY3VzRGlyZWN0aW9uIGRpcgogICAg
IGlmICgmbmV3VGFyZ2V0LT5kb2N1bWVudCgpICE9IGRvY3VtZW50LnB0cigpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoYXV0byByb290ID0gc2hhZG93Um9vdFdpdGhEZWxlZ2F0ZXNGb2N1
cygqdGhpcykpIHsKKyAgICBBU1NFUlQoZGVsZWdhdGVzRm9jdXNUb1NoYWRvd1Jvb3QoKSA9PSAh
IXNoYWRvd1Jvb3RXaXRoRGVsZWdhdGVzRm9jdXMoKnRoaXMpKTsKKyAgICBpZiAoZGVsZWdhdGVz
Rm9jdXNUb1NoYWRvd1Jvb3QoKSkgeworICAgICAgICBhdXRvIHJvb3QgPSBzaGFkb3dSb290V2l0
aERlbGVnYXRlc0ZvY3VzKCp0aGlzKTsKICAgICAgICAgYXV0byBjdXJyZW50bHlGb2N1c2VkRWxl
bWVudCA9IG1ha2VSZWZQdHIoZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkpOwogICAgICAgICBp
ZiAocm9vdC0+Y29udGFpbnNJbmNsdWRpbmdTaGFkb3dET00oY3VycmVudGx5Rm9jdXNlZEVsZW1l
bnQuZ2V0KCkpKSB7CiAgICAgICAgICAgICBpZiAoZG9jdW1lbnQtPnBhZ2UoKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
CmluZGV4IDJlY2QxNWQ2ZDk0ZC4uODYwZGI4NzFlZTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTIyMiw2
ICsyMjIsNyBAQCBwdWJsaWM6CiAgICAgU2hhZG93Um9vdCogY29udGFpbmluZ1NoYWRvd1Jvb3Qo
KSBjb25zdDsKICAgICBTaGFkb3dSb290KiBzaGFkb3dSb290KCkgY29uc3Q7CiAgICAgYm9vbCBp
c0Nsb3NlZFNoYWRvd0hpZGRlbihjb25zdCBOb2RlJikgY29uc3Q7CisgICAgYm9vbCBkZWxlZ2F0
ZXNGb2N1c1RvU2hhZG93Um9vdCgpIGNvbnN0IHsgcmV0dXJuIGhhc05vZGVGbGFnKE5vZGVGbGFn
OjpEZWxlZ2F0ZXNGb2N1c1RvU2hhZG93Um9vdCk7IH0KIAogICAgIEhUTUxTbG90RWxlbWVudCog
YXNzaWduZWRTbG90KCkgY29uc3Q7CiAgICAgSFRNTFNsb3RFbGVtZW50KiBhc3NpZ25lZFNsb3RG
b3JCaW5kaW5ncygpIGNvbnN0OwpAQCAtNDA1LDkgKzQwNiwxNCBAQCBwdWJsaWM6CiAgICAgICAg
IERvbmUsCiAgICAgICAgIE5lZWRzUG9zdEluc2VydGlvbkNhbGxiYWNrLAogICAgIH07CisgICAg
ZW51bSBjbGFzcyBBbmNlc3RvclN0YXRlIDogdWludDhfdCB7CisgICAgICAgIEZvcm0gPSAxIDw8
IDAsCisgICAgICAgIENhbnZhcyA9IDEgPDwgMSwKKyAgICB9OwogICAgIHN0cnVjdCBJbnNlcnRp
b25UeXBlIHsKICAgICAgICAgYm9vbCBjb25uZWN0ZWRUb0RvY3VtZW50IHsgZmFsc2UgfTsKICAg
ICAgICAgYm9vbCB0cmVlU2NvcGVDaGFuZ2VkIHsgZmFsc2UgfTsKKyAgICAgICAgT3B0aW9uU2V0
PEFuY2VzdG9yU3RhdGU+IGFuY2VzdG9yU3RhdGVzOwogICAgIH07CiAgICAgLy8gQ2FsbGVkICph
ZnRlciogdGhpcyBub2RlIG9yIGl0cyBhbmNlc3RvciBpcyBpbnNlcnRlZCBpbnRvIGEgbmV3IHBh
cmVudCAobWF5IG9yIG1heSBub3QgYmUgYSBwYXJ0IG9mIGRvY3VtZW50KSBieSBzY3JpcHRzIG9y
IHBhcnNlci4KICAgICAvLyBpbnNlcnRlZEludG8gKipNVVNUIE5PVCoqIGludm9rZSBzY3JpcHRz
LiBSZXR1cm4gTmVlZHNQb3N0SW5zZXJ0aW9uQ2FsbGJhY2sgYW5kIGltcGxlbWVudCBkaWRGaW5p
c2hJbnNlcnRpbmdOb2RlIGluc3RlYWQgdG8gcnVuIHNjcmlwdHMuCkBAIC00MTcsNiArNDIzLDcg
QEAgcHVibGljOgogICAgIHN0cnVjdCBSZW1vdmFsVHlwZSB7CiAgICAgICAgIGJvb2wgZGlzY29u
bmVjdGVkRnJvbURvY3VtZW50IHsgZmFsc2UgfTsKICAgICAgICAgYm9vbCB0cmVlU2NvcGVDaGFu
Z2VkIHsgZmFsc2UgfTsKKyAgICAgICAgT3B0aW9uU2V0PEFuY2VzdG9yU3RhdGU+IGFuY2VzdG9y
U3RhdGVzOwogICAgIH07CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tQW5jZXN0b3IoUmVt
b3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUpOwogCkBAIC00
OTYsNiArNTAzLDggQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlQW5jZXN0b3JDb25uZWN0ZWRT
dWJmcmFtZUNvdW50Rm9yUmVtb3ZhbCgpIGNvbnN0OwogICAgIHZvaWQgdXBkYXRlQW5jZXN0b3JD
b25uZWN0ZWRTdWJmcmFtZUNvdW50Rm9ySW5zZXJ0aW9uKCkgY29uc3Q7CiAKKyAgICBPcHRpb25T
ZXQ8QW5jZXN0b3JTdGF0ZT4gaW5jbHVzaXZlQW5jZXN0b3JTdGF0ZXMoKSBjb25zdDsKKwogI2lm
IEVOQUJMRShKSVQpCiAgICAgc3RhdGljIHB0cmRpZmZfdCBub2RlRmxhZ3NNZW1vcnlPZmZzZXQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTm9kZSwgbV9ub2RlRmxhZ3MpOyB9CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCByYXJlRGF0YU1lbW9yeU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihOb2RlLCBtX3JhcmVEYXRhV2l0aEJpdGZpZWxkcyk7IH0KQEAgLTU1MSw3ICs1NjAsMTEg
QEAgcHJvdGVjdGVkOgogI2VuZGlmCiAgICAgICAgIElzQ29tcHV0ZWRTdHlsZUludmFsaWRGbGFn
ID0gMSA8PCAyNiwKIAotICAgICAgICAvLyBCaXRzIDI3LTMxIGFyZSBmcmVlLgorICAgICAgICBE
ZWxlZ2F0ZXNGb2N1c1RvU2hhZG93Um9vdCA9IDEgPDwgMjcsCisKKyAgICAgICAgSW5jbHVzaXZl
QW5jZXN0b3JTdGF0ZUZvckZvcm0gPSAxIDw8IDI4LAorICAgICAgICBJbmNsdXNpdmVBbmNlc3Rv
clN0YXRlRm9yQ2FudmFzID0gMSA8PCAyOSwKKyAgICAgICAgLy8gQml0cyAzMC0zMSBhcmUgZnJl
ZS4KICAgICB9OwogCiAgICAgZW51bSBjbGFzcyBUYWJJbmRleFN0YXRlIDogdWludDhfdCB7CkBA
IC01OTEsNiArNjA0LDExIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldElzUGFyc2luZ0NoaWxk
cmVuRmluaXNoZWQoKSB7IHNldE5vZGVGbGFnKE5vZGVGbGFnOjpJc1BhcnNpbmdDaGlsZHJlbkZp
bmlzaGVkKTsgfQogICAgIHZvaWQgY2xlYXJJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkKCkgeyBj
bGVhck5vZGVGbGFnKE5vZGVGbGFnOjpJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkKTsgfQogCisg
ICAgdm9pZCBzZXREZWxlZ2F0ZXNGb2N1c1RvU2hhZG93Um9vdCgpIHsgc2V0Tm9kZUZsYWcoTm9k
ZUZsYWc6OkRlbGVnYXRlc0ZvY3VzVG9TaGFkb3dSb290KTsgfQorCisgICAgdm9pZCBzZXRJbmNs
dXNpdmVBbmNlc3RvclN0YXRlcyhPcHRpb25TZXQ8QW5jZXN0b3JTdGF0ZT4pOworICAgIHZvaWQg
YWRkSW5jbHVzaXZlQW5jZXN0b3JTdGF0ZShBbmNlc3RvclN0YXRlKTsKKwogICAgIGNvbnN0ZXhw
ciBzdGF0aWMgYXV0byBEZWZhdWx0Tm9kZUZsYWdzID0gT3B0aW9uU2V0PE5vZGVGbGFnPihOb2Rl
RmxhZzo6SXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZCk7CiAgICAgY29uc3RleHByIHN0YXRpYyBh
dXRvIENyZWF0ZU90aGVyID0gRGVmYXVsdE5vZGVGbGFnczsKICAgICBjb25zdGV4cHIgc3RhdGlj
IGF1dG8gQ3JlYXRlQ2hhcmFjdGVyRGF0YSA9IERlZmF1bHROb2RlRmxhZ3MgfCBOb2RlRmxhZzo6
SXNDaGFyYWN0ZXJEYXRhOwpAQCAtODg4LDYgKzkwNiw0MSBAQCBpbmxpbmUgdm9pZCBOb2RlOjpz
ZXRUcmVlU2NvcGVSZWN1cnNpdmVseShUcmVlU2NvcGUmIG5ld1RyZWVTY29wZSkKICAgICAgICAg
bW92ZVRyZWVUb05ld1Njb3BlKCp0aGlzLCAqbV90cmVlU2NvcGUsIG5ld1RyZWVTY29wZSk7CiB9
CiAKK0FMV0FZU19JTkxJTkUgT3B0aW9uU2V0PE5vZGU6OkFuY2VzdG9yU3RhdGU+IE5vZGU6Omlu
Y2x1c2l2ZUFuY2VzdG9yU3RhdGVzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNFbGVtZW50Tm9k
ZSgpIHx8IGlzVHJlZVNjb3BlKCkgfHwgaXNEb2N1bWVudEZyYWdtZW50KCkpOyAvLyBPbmx5IEVs
ZW1lbnQgc3VwcG9ydHMgYW5jZXN0b3Igc3RhdGVzIGZvciBleHBlZGllbmN5LgorICAgIE9wdGlv
blNldDxOb2RlOjpBbmNlc3RvclN0YXRlPiBzdGF0ZXM7CisgICAgaWYgKGhhc05vZGVGbGFnKE5v
ZGVGbGFnOjpJbmNsdXNpdmVBbmNlc3RvclN0YXRlRm9yRm9ybSkpCisgICAgICAgIHN0YXRlcy5h
ZGQoQW5jZXN0b3JTdGF0ZTo6Rm9ybSk7CisgICAgaWYgKGhhc05vZGVGbGFnKE5vZGVGbGFnOjpJ
bmNsdXNpdmVBbmNlc3RvclN0YXRlRm9yQ2FudmFzKSkKKyAgICAgICAgc3RhdGVzLmFkZChBbmNl
c3RvclN0YXRlOjpDYW52YXMpOworICAgIHJldHVybiBzdGF0ZXM7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBOb2RlOjpzZXRJbmNsdXNpdmVBbmNlc3RvclN0YXRlcyhPcHRpb25TZXQ8QW5jZXN0
b3JTdGF0ZT4gc3RhdGVzKQoreworICAgIGlmIChzdGF0ZXMuY29udGFpbnMoQW5jZXN0b3JTdGF0
ZTo6Rm9ybSkpCisgICAgICAgIHNldE5vZGVGbGFnKE5vZGVGbGFnOjpJbmNsdXNpdmVBbmNlc3Rv
clN0YXRlRm9yRm9ybSk7CisgICAgZWxzZQorICAgICAgICBjbGVhck5vZGVGbGFnKE5vZGVGbGFn
OjpJbmNsdXNpdmVBbmNlc3RvclN0YXRlRm9yRm9ybSk7CisgICAgaWYgKHN0YXRlcy5jb250YWlu
cyhBbmNlc3RvclN0YXRlOjpDYW52YXMpKQorICAgICAgICBzZXROb2RlRmxhZyhOb2RlRmxhZzo6
SW5jbHVzaXZlQW5jZXN0b3JTdGF0ZUZvckNhbnZhcyk7CisgICAgZWxzZQorICAgICAgICBjbGVh
ck5vZGVGbGFnKE5vZGVGbGFnOjpJbmNsdXNpdmVBbmNlc3RvclN0YXRlRm9yQ2FudmFzKTsKK30K
KworaW5saW5lIHZvaWQgTm9kZTo6YWRkSW5jbHVzaXZlQW5jZXN0b3JTdGF0ZShBbmNlc3RvclN0
YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIEFuY2VzdG9yU3Rh
dGU6OkZvcm06CisgICAgICAgIHNldE5vZGVGbGFnKE5vZGVGbGFnOjpJbmNsdXNpdmVBbmNlc3Rv
clN0YXRlRm9yRm9ybSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQW5jZXN0b3JTdGF0ZTo6
Q2FudmFzOgorICAgICAgICBzZXROb2RlRmxhZyhOb2RlRmxhZzo6SW5jbHVzaXZlQW5jZXN0b3JT
dGF0ZUZvckNhbnZhcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogaW5saW5lIGNvbnN0
ZXhwciBQYXJ0aWFsT3JkZXJpbmcgUGFydGlhbE9yZGVyaW5nOjpsZXNzKFR5cGU6Okxlc3MpOwog
aW5saW5lIGNvbnN0ZXhwciBQYXJ0aWFsT3JkZXJpbmcgUGFydGlhbE9yZGVyaW5nOjplcXVpdmFs
ZW50KFR5cGU6OkVxdWl2YWxlbnQpOwogaW5saW5lIGNvbnN0ZXhwciBQYXJ0aWFsT3JkZXJpbmcg
UGFydGlhbE9yZGVyaW5nOjpncmVhdGVyKFR5cGU6OkdyZWF0ZXIpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAppbmRleCAwMWJiMWQxN2Q1MmYuLmQ3YTRlNzIzZjA5
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKQEAgLTE0OCw3
ICsxNDgsOCBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtl
eWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAogICAgIGlmICghZG9jdW1lbnQoKS5mcmFtZSgpLT5l
dmVudEhhbmRsZXIoKS50YWJzVG9MaW5rcyhldmVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmICghcmVuZGVyZXIoKSAmJiBhbmNlc3RvcnNPZlR5cGU8SFRNTENhbnZhc0VsZW1l
bnQ+KCp0aGlzKS5maXJzdCgpKQorICAgIEFTU0VSVChpbmNsdXNpdmVBbmNlc3RvclN0YXRlcygp
LmNvbnRhaW5zKEFuY2VzdG9yU3RhdGU6OkNhbnZhcykgPT0gISFhbmNlc3RvcnNPZlR5cGU8SFRN
TENhbnZhc0VsZW1lbnQ+KCp0aGlzKS5maXJzdCgpKTsKKyAgICBpZiAoIXJlbmRlcmVyKCkgJiYg
aW5jbHVzaXZlQW5jZXN0b3JTdGF0ZXMoKS5jb250YWlucyhBbmNlc3RvclN0YXRlOjpDYW52YXMp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBoYXNOb25FbXB0eUJveChyZW5k
ZXJCb3hNb2RlbE9iamVjdCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVu
dC5jcHAKaW5kZXggMmE0ODVkNjFlOGU3Li43OTFiMTY0ZWFlZDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC0xMjgsNiArMTI4LDcgQEAgSFRNTENhbnZh
c0VsZW1lbnQ6OkhUTUxDYW52YXNFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50JiBkb2MKICAgICAsIENhbnZhc0Jhc2UoSW50U2l6ZShkZWZhdWx0V2lkdGgsIGRl
ZmF1bHRIZWlnaHQpKQogICAgICwgQWN0aXZlRE9NT2JqZWN0KGRvY3VtZW50KQogeworICAgIGFk
ZEluY2x1c2l2ZUFuY2VzdG9yU3RhdGUoQW5jZXN0b3JTdGF0ZTo6Q2FudmFzKTsKICAgICBBU1NF
UlQoaGFzVGFnTmFtZShjYW52YXNUYWcpKTsKIH0KIApAQCAtMTA0OSw3ICsxMDUwLDEwIEBAIE5v
ZGU6Okluc2VydGVkSW50b0FuY2VzdG9yUmVzdWx0IEhUTUxDYW52YXNFbGVtZW50OjppbnNlcnRl
ZEludG9BbmNlc3RvcihJbnNlcnRpCiAgICAgICAgICAgICBkb2N1bWVudC5jYW52YXNDaGFuZ2Vk
KCp0aGlzLCBGbG9hdFJlY3QgeyB9KTsKICAgICB9CiAKLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6
Omluc2VydGVkSW50b0FuY2VzdG9yKGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVl
KTsKKyAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3IoaW5zZXJ0aW9uVHlwZSwg
cGFyZW50T2ZJbnNlcnRlZFRyZWUpOworICAgIGFkZEluY2x1c2l2ZUFuY2VzdG9yU3RhdGUoQW5j
ZXN0b3JTdGF0ZTo6Q2FudmFzKTsKKworICAgIHJldHVybiBJbnNlcnRlZEludG9BbmNlc3RvclJl
c3VsdDo6RG9uZTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVtb3ZlZEZyb21BbmNl
c3RvcihSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYgb2xkUGFyZW50T2ZS
ZW1vdmVkVHJlZSkKQEAgLTEwNjAsNiArMTA2NCw3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6
OnJlbW92ZWRGcm9tQW5jZXN0b3IoUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENvbnRhaW5lck5v
CiAgICAgfQogCiAgICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IocmVtb3ZhbFR5
cGUsIG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUpOworICAgIGFkZEluY2x1c2l2ZUFuY2VzdG9yU3Rh
dGUoQW5jZXN0b3JTdGF0ZTo6Q2FudmFzKTsKIH0KIAogYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6
bmVlZHNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuY3BwCmluZGV4IDlmOWVkZGZlYWE5Zi4uN2U1ZTU3Mjk4MTQ1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCkBAIC02Niw2ICs2Niw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiBIVE1MRm9ybUVsZW1lbnQ6OkhUTUxGb3JtRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgOiBIVE1MRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCkKIHsKKyAgICBhZGRJbmNsdXNpdmVBbmNlc3RvclN0YXRl
KEFuY2VzdG9yU3RhdGU6OkZvcm0pOwogICAgIEFTU0VSVChoYXNUYWdOYW1lKGZvcm1UYWcpKTsK
IH0KIApAQCAtMTM1LDYgKzEzNiw3IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50OjpyZW5kZXJlcklz
TmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIE5vZGU6Okluc2VydGVkSW50b0FuY2Vz
dG9yUmVzdWx0IEhUTUxGb3JtRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3IoSW5zZXJ0aW9u
VHlwZSBpbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSkK
IHsKICAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3IoaW5zZXJ0aW9uVHlwZSwg
cGFyZW50T2ZJbnNlcnRlZFRyZWUpOworICAgIGFkZEluY2x1c2l2ZUFuY2VzdG9yU3RhdGUoQW5j
ZXN0b3JTdGF0ZTo6Rm9ybSk7CiAgICAgaWYgKGluc2VydGlvblR5cGUuY29ubmVjdGVkVG9Eb2N1
bWVudCkKICAgICAgICAgZG9jdW1lbnQoKS5kaWRBc3NvY2lhdGVGb3JtQ29udHJvbCgqdGhpcyk7
CiAgICAgcmV0dXJuIEluc2VydGVkSW50b0FuY2VzdG9yUmVzdWx0OjpEb25lOwpAQCAtMTQ3LDYg
KzE0OSw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKFJlbW92
YWxUeXBlIHJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlCiAgICAgZm9yIChhdXRvJiBhc3NvY2lh
dGVkRWxlbWVudCA6IGFzc29jaWF0ZWRFbGVtZW50cykKICAgICAgICAgYXNzb2NpYXRlZEVsZW1l
bnQtPmZvcm1Pd25lclJlbW92ZWRGcm9tVHJlZShyb290KTsKICAgICBIVE1MRWxlbWVudDo6cmVt
b3ZlZEZyb21BbmNlc3RvcihyZW1vdmFsVHlwZSwgb2xkUGFyZW50T2ZSZW1vdmVkVHJlZSk7Cisg
ICAgYWRkSW5jbHVzaXZlQW5jZXN0b3JTdGF0ZShBbmNlc3RvclN0YXRlOjpGb3JtKTsKIH0KIAog
dm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50JiBldmVudCwgRXZl
bnRJbnZva2VQaGFzZSBwaGFzZSkKQEAgLTkwMSw4ICs5MDQsMTUgQEAgdm9pZCBIVE1MRm9ybUVs
ZW1lbnQ6OmNvcHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVzRnJvbUVsZW1lbnQoY29uc3QgRWxlbWVu
dCYgc291cmMKICAgICBIVE1MRWxlbWVudDo6Y29weU5vbkF0dHJpYnV0ZVByb3BlcnRpZXNGcm9t
RWxlbWVudChzb3VyY2UpOwogfQogCi1IVE1MRm9ybUVsZW1lbnQqIEhUTUxGb3JtRWxlbWVudDo6
ZmluZENsb3Nlc3RGb3JtQW5jZXN0b3IoY29uc3QgRWxlbWVudCYgc3RhcnRFbGVtZW50KQorSFRN
TEZvcm1FbGVtZW50KiBIVE1MRm9ybUVsZW1lbnQ6OmZpbmRDbG9zZXN0Rm9ybUFuY2VzdG9yU2xv
d0Nhc2UoY29uc3QgRWxlbWVudCYgc3RhcnRFbGVtZW50KQogeworICAgIGlmIChVTkxJS0VMWShp
czxIVE1MRm9ybUVsZW1lbnQ+KHN0YXJ0RWxlbWVudCkpKSB7CisgICAgICAgIGF1dG8qIHBhcmVu
dEVsZW1lbnQgPSBzdGFydEVsZW1lbnQucGFyZW50RWxlbWVudCgpOworICAgICAgICBpZiAoIXBh
cmVudEVsZW1lbnQgfHwgIXBhcmVudEVsZW1lbnQtPmluY2x1c2l2ZUFuY2VzdG9yU3RhdGVzKCku
Y29udGFpbnMoQW5jZXN0b3JTdGF0ZTo6Rm9ybSkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghYW5j
ZXN0b3JzT2ZUeXBlPEhUTUxGb3JtRWxlbWVudD4oc3RhcnRFbGVtZW50KS5maXJzdCgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQogICAgIHJldHVybiBj
b25zdF9jYXN0PEhUTUxGb3JtRWxlbWVudCo+KGFuY2VzdG9yc09mVHlwZTxIVE1MRm9ybUVsZW1l
bnQ+KHN0YXJ0RWxlbWVudCkuZmlyc3QoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
RWxlbWVudC5oCmluZGV4IDgwNzI4OGY0YWQwYi4uMzgzMzcxYjRjZWJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJGb3Jt
U3RhdGUuaCIKICNpbmNsdWRlICJGb3JtU3VibWlzc2lvbi5oIgogI2luY2x1ZGUgIkhUTUxFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmFkaW9CdXR0b25Hcm91
cHMuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgpAQCAt
MTIxLDcgKzEyMiwxNiBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmdQYWlyVmVjdG9yIHRleHRGaWVs
ZFZhbHVlcygpIGNvbnN0OwogCi0gICAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCogZmluZENsb3Nl
c3RGb3JtQW5jZXN0b3IoY29uc3QgRWxlbWVudCYpOworICAgIHN0YXRpYyBIVE1MRm9ybUVsZW1l
bnQqIGZpbmRDbG9zZXN0Rm9ybUFuY2VzdG9yKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCisgICAg
eworICAgICAgICBpZiAoIWVsZW1lbnQuaW5jbHVzaXZlQW5jZXN0b3JTdGF0ZXMoKS5jb250YWlu
cyhBbmNlc3RvclN0YXRlOjpGb3JtKSkgeworICAgICAgICAgICAgQVNTRVJUKCFmaW5kQ2xvc2Vz
dEZvcm1BbmNlc3RvclNsb3dDYXNlKGVsZW1lbnQpKTsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICB9CisgICAgICAgIGF1dG8qIHJlc3VsdCA9IGZpbmRDbG9zZXN0Rm9ybUFu
Y2VzdG9yU2xvd0Nhc2UoZWxlbWVudCk7CisgICAgICAgIEFTU0VSVChyZXN1bHQgfHwgZWxlbWVu
dC50YWdRTmFtZSgpID09IEhUTUxOYW1lczo6Zm9ybVRhZyk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQogCiBwcml2YXRlOgogICAgIEhUTUxGb3JtRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQmKTsKQEAgLTE2Niw2ICsxNzYsOCBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCByZXNldEFzc29jaWF0ZWRGb3JtQ29udHJvbEVsZW1lbnRzKCk7CiAKKyAgICBzdGF0aWMg
SFRNTEZvcm1FbGVtZW50KiBmaW5kQ2xvc2VzdEZvcm1BbmNlc3RvclNsb3dDYXNlKGNvbnN0IEVs
ZW1lbnQmKTsKKwogICAgIEZvcm1TdWJtaXNzaW9uOjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsK
ICAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFdlYWtQdHI8SFRNTEVsZW1lbnQ+PiBtX3Bhc3ROYW1l
c01hcDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKaW5kZXggZDAz
MGFmZDUxYjhiLi5iYTdmYzU5NGI5MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEltYWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VF
bGVtZW50LmNwcApAQCAtMzY4LDYgKzM2OCwxMCBAQCBOb2RlOjpJbnNlcnRlZEludG9BbmNlc3Rv
clJlc3VsdCBIVE1MSW1hZ2VFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3RvcihJbnNlcnRpbwog
ICAgICAgICBtX2Zvcm0gPSBudWxscHRyOwogICAgIH0KIAorICAgIC8vIEluc2VydCBuZWVkcyB0
byBjb21wbGV0ZSBmaXJzdCwgYmVmb3JlIHdlIHN0YXJ0IHVwZGF0aW5nIHRoZSBsb2FkZXIuIExv
YWRlciBkaXNwYXRjaGVzIGV2ZW50cyB3aGljaCBjb3VsZCByZXN1bHQKKyAgICAvLyBpbiBjYWxs
YmFja3MgYmFjayB0byB0aGlzIG5vZGUuCisgICAgTm9kZTo6SW5zZXJ0ZWRJbnRvQW5jZXN0b3JS
ZXN1bHQgaW5zZXJ0Tm90aWZpY2F0aW9uUmVxdWVzdCA9IEhUTUxFbGVtZW50OjppbnNlcnRlZElu
dG9BbmNlc3RvcihpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7CisKICAgICBp
ZiAoIW1fZm9ybSkgewogICAgICAgICBpZiAoYXV0byogbmV3Rm9ybSA9IEhUTUxGb3JtRWxlbWVu
dDo6ZmluZENsb3Nlc3RGb3JtQW5jZXN0b3IoKnRoaXMpKSB7CiAgICAgICAgICAgICBtX2Zvcm0g
PSBtYWtlV2Vha1B0cihuZXdGb3JtKTsKQEAgLTM3NSwxMCArMzc5LDYgQEAgTm9kZTo6SW5zZXJ0
ZWRJbnRvQW5jZXN0b3JSZXN1bHQgSFRNTEltYWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0
b3IoSW5zZXJ0aW8KICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIEluc2VydCBuZWVkcyB0byBj
b21wbGV0ZSBmaXJzdCwgYmVmb3JlIHdlIHN0YXJ0IHVwZGF0aW5nIHRoZSBsb2FkZXIuIExvYWRl
ciBkaXNwYXRjaGVzIGV2ZW50cyB3aGljaCBjb3VsZCByZXN1bHQKLSAgICAvLyBpbiBjYWxsYmFj
a3MgYmFjayB0byB0aGlzIG5vZGUuCi0gICAgTm9kZTo6SW5zZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1
bHQgaW5zZXJ0Tm90aWZpY2F0aW9uUmVxdWVzdCA9IEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9B
bmNlc3RvcihpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7Ci0KICAgICBpZiAo
aW5zZXJ0aW9uVHlwZS50cmVlU2NvcGVDaGFuZ2VkICYmICFtX3BhcnNlZFVzZW1hcC5pc051bGwo
KSkKICAgICAgICAgdHJlZVNjb3BlKCkuYWRkSW1hZ2VFbGVtZW50QnlVc2VtYXAoKm1fcGFyc2Vk
VXNlbWFwLmltcGwoKSwgKnRoaXMpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421490</attachid>
            <date>2021-02-24 18:11:36 -0800</date>
            <delta_ts>2021-02-25 00:18:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222159-20210224181135.patch</filename>
            <type>text/plain</type>
            <size>31986</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMzI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjQyYThhZWNmN2NiYzFl
NDNjNDQ3NTBjYjMzMWFjNTMwMTY4Mzg0Ni4uODY4ODUzZDE3MzljY2YyZDE5MjBmZjE3ODEzYmYw
ZjdhOTkxMGVjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDIxLTAyLTI0ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEF2b2lkIHRyZWUgdHJhdmVy
c2FscyB0byBsb29rIGZvciBmb3JtIGFuZCBjYW52YXMgZWxlbWVudHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjE1OQorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNzQ2ODAyNjU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgZmFzdCBwYXRoIGZvciBjaGVja2lu
ZyBpZiBhbiBlbGVtZW50IGhhcyBhIGNhbnZhcyBvciBhIGZvcm0gYXMgYW4gYW5jZXN0b3IKKyAg
ICAgICAgdXNpbmcgbmV3IG5vZGUgZmxhZ3MsIEluY2x1c2l2ZUFuY2VzdG9yU3RhdGVGb3JGb3Jt
IGFuZCBJbmNsdXNpdmVBbmNlc3RvclN0YXRlRm9yQ2FudmFzLgorICAgICAgICBXZSB1cGRhdGUg
dGhlc2UgZmxhZ3MgaW4gRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3IgYW5kIEVsZW1lbnQ6
OnJlbW92ZWRGcm9tQW5jZXN0b3IgYmFzZWQgb24KKyAgICAgICAgdGhlIHNhbWUgbm9kZSBmbGFn
cyBzZXQgb24gaXRzIG5ldyBwYXJlbnQgKGNsZWFyIGlmIHRoZXJlIGlzIG5vIHBhcmVudCkuCisK
KyAgICAgICAgSFRNTEZvcm1FbGVtZW50IGFuZCBIVE1MQ2FudmFzRWxlbWVudCBhbHdheXMgYWRk
IHRoZWlyIHJlc3BlY3RpdmUgZmxhZyAoYnV0IG5ldmVyIGNsZWFyIG90aGVycykKKyAgICAgICAg
aW5zaWRlIHRoZWlyIGNvbnN0cnVjdG9ycyBhbmQgYWZ0ZXIgY2FsbGluZyBFbGVtZW50J3MgaW5z
ZXJ0ZWRJbnRvQW5jZXN0b3IgYW5kIHJlbW92ZWRGcm9tQW5jZXN0b3IuCisgICAgICAgIEJlY2F1
c2Ugbm90aWZ5Q2hpbGROb2RlSW5zZXJ0ZWQgYW5kIG5vdGlmeUNoaWxkTm9kZVJlbW92ZWQgdHJh
dmVyc2UgdGhlIG5ld2x5IGluc2VydGVkIG9yIG5ld2x5CisgICAgICAgIHJlbW92ZWQgbm9kZXMg
aW4gdHJlZSBvcmRlciwgYWxsIGl0cyBkZXNjZW5kYW50cyB3aWxsIGNhcnJ5IG92ZXIgdGhlIGZs
YWcuCisKKyAgICAgICAgRm9yIGNvbnZlbmllbmNlIGFuZCBjb2RlIHJlYWRhYmlsaXR5LCB3ZSB1
c2UgT3B0aW9uU2V0PE5vZGU6OkFuY2VzdG9yU3RhdGU+IHRvIHJlcHJlc2VudAorICAgICAgICB0
aGUgbm9kZSB0cmVlIGFuY2VzdG9yeSBzdGF0ZSBvZiB0aGVzZSBlbGVtZW50cy4KKworICAgICAg
ICBJdCBhbHNvIGhhcyBhIGZhc3QgcGF0aCBmb3IgY2hlY2tpbmcgd2hldGhlciBhIGdpdmVuIGVs
ZW1lbnQgaXMgYSBzaGFkb3cgaG9zdCB3aXRoIGEgc2hhZG93IHJvb3QKKyAgICAgICAgd2l0aCBk
ZWxlZ2F0ZXNGb2N1cyBzZXQgdG8gdHJ1ZSBpbiBTaGFkb3dSb290SW5pdCB3aXRoIGEgbmV3IG5v
ZGUgZmxhZzogRGVsZWdhdGVzRm9jdXNUb1NoYWRvd1Jvb3QuCisgICAgICAgIEl0IGlzIHNldCBp
biBFbGVtZW50OjphdHRhY2hTaGFkb3cgYW5kIG5ldmVyIGNsZWFyZWQgc2luY2UgZGVsZWdhdGVz
Rm9jdXMgZmxhZyBjYW4gbmV2ZXIgYmUgdW5zZXQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHNp
bmNlIHRoZXJlIHNob3VsZCBiZSBubyBiZWhhdmlvcmFsIGRpZmZlcmVuY2VzLgorCisgICAgICAg
ICogZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5v
dGlmeU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlO
b2RlSW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlDaGlsZE5vZGVJ
bnNlcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlOb2RlUmVtb3ZlZEZyb21Eb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlOb2RlUmVtb3ZlZEZyb21UcmVlKToKKyAgICAg
ICAgKFdlYkNvcmU6Om5vdGlmeUNoaWxkTm9kZVJlbW92ZWQpOgorICAgICAgICAqIGRvbS9FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmlzRm9jdXNhYmxlIGNvbnN0KTog
T3B0aW1pemVkIHRoaXMgZnVuY3Rpb24gYnkgYXZvaWRpbmcgdGhlIGFuY2VzdG9yIHRyZWUgd2Fs
aworICAgICAgICB3aGVuIGluY2x1c2l2ZUFuY2VzdG9yU3RhdGVzKCkgZG9lcyBub3QgY29udGFp
biBBbmNlc3RvclN0YXRlOjpDYW52YXMuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjppbnNl
cnRlZEludG9BbmNlc3Rvcik6IENsZWFyIG9yIHNldCBuZXcgbm9kZSBmbGFncyBiYXNlZCBvbiB0
aGUgYW5jZXN0b3Igc3RhdGVzLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVtb3ZlZEZy
b21BbmNlc3Rvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YXR0YWNoU2hh
ZG93KTogU2V0IERlbGVnYXRlc0ZvY3VzVG9TaGFkb3dSb290IGlmIGFwcGxpY2FibGUuCisgICAg
ICAgIChXZWJDb3JlOjpzaGFkb3dSb290V2l0aERlbGVnYXRlc0ZvY3VzKTogQWRkZWQgVU5MSUtF
TFkgb24gdGhlIHJlc3VsdCBvZiBFbGVtZW50OjpzaGFkb3dSb290LgorICAgICAgICAoV2ViQ29y
ZTo6aXNQcm9ncmFtYXRpY2FsbHlGb2N1c2FibGUpOiBPcHRpbWl6ZWQgdGhpcyBmdW5jdGlvbiBi
eSBhdm9pZGluZyBFbGVtZW50OjpzaGFkb3dSb290IGNhbGwKKyAgICAgICAgd2hlbiBEZWxlZ2F0
ZXNGb2N1c1RvU2hhZG93Um9vdCBmbGFnIGlzIG5vdCBzZXQgb24gdGhlIGVsZW1lbnQuCisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50Ojpmb2N1cyk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRlbGVnYXRlc0ZvY3VzVG9TaGFkb3dSb290IGNvbnN0KTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXREZWxlZ2F0ZXNGb2N1c1RvU2hhZG93
Um9vdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW5jbHVzaXZlQW5jZXN0b3JT
dGF0ZXMgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldEluY2x1c2l2
ZUFuY2VzdG9yU3RhdGVzKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjphZGRJbmNs
dXNpdmVBbmNlc3RvclN0YXRlKTogQWRkZWQuIFVzZWQgYnkgSFRNTENhbnZhc0VsZW1lbnQgYW5k
IEhUTUxGb3JtRWxlbWVudAorICAgICAgICB0byBzZXQgdGhlIHJlc3BlY3RpdmUgbm9kZSBmbGFn
cy4KKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxBbmNob3JFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlIGNvbnN0KTogQWRkZWQg
dGhlIHNhbWUgb3B0aW1pemF0aW9uIGFzIEVsZW1lbnQuCisgICAgICAgICogaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6SFRN
TENhbnZhc0VsZW1lbnQpOiBTZXQgSW5jbHVzaXZlQW5jZXN0b3JTdGF0ZUZvckNhbnZhcy4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3Rvcik6
IERpdHRvLiBOb3RlIHRoYXQgd2UgbXVzdCBkbyB0aGlzIGFmdGVyIGNhbGxpbmcKKyAgICAgICAg
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3IgYXMgaXQgY2FuIHVuc2V0IHRoaXMgZmxhZyAo
dGhpcyBpcyB0aGUgcG9pbnQgb2YgdGhpcyBjb2RlKS4KKyAgICAgICAgQWxzbyBub3RlIHRoYXQg
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3Igd2lsbCBhbHdheXMgcmV0dXJuIEluc2VydGVk
SW50b0FuY2VzdG9yUmVzdWx0OjpEb25lLgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IpOiBEaXR0byBmb3IgcmVtb3ZhbC4KKyAgICAgICAg
KiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVs
ZW1lbnQ6OkhUTUxGb3JtRWxlbWVudCk6IERpdHRvIGZvciBJbmNsdXNpdmVBbmNlc3RvclN0YXRl
Rm9yRm9ybS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
QW5jZXN0b3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVt
b3ZlZEZyb21BbmNlc3Rvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVt
ZW50OjpmaW5kQ2xvc2VzdEZvcm1BbmNlc3RvclNsb3dDYXNlKTogUmVuYW1lZCBmcm9tIGZpbmRD
bG9zZXN0Rm9ybUFuY2VzdG9yLgorICAgICAgICBPcHRpbWl6ZWQgdGhpcyBmdW5jdGlvbiBhIGJp
dCBieSBhdm9pZGluZyB0aGUgdHJlZSB3YWxrIHdoZW4gdGhlIHN0YXJ0aW5nIGVsZW1lbnQgaXRz
ZWxmIGlzIGEgZm9ybQorICAgICAgICBzaW5jZSBJbmNsdXNpdmVBbmNlc3RvclN0YXRlRm9yRm9y
bSBpcyBhbHdheXMgc2V0IG9uIHRoZSBlbGVtZW50IGluIHRoYXQgY2FzZS4KKyAgICAgICAgKiBo
dG1sL0hUTUxGb3JtRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50
OjpmaW5kQ2xvc2VzdEZvcm1BbmNlc3Rvcik6IEFkZGVkIHRoZSBvcHRpbWl6ZWQgdmVyc2lvbiBp
bmxpbmVkIGhlcmUuCisgICAgICAgIEl0IGV4aXRzIGVhcmx5IHdpdGggbnVsbHB0ciBpZiBJbmNs
dXNpdmVBbmNlc3RvclN0YXRlRm9yRm9ybSBpcyBub3Qgc2V0LgorICAgICAgICAqIGh0bWwvSFRN
TEltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50Ojpp
bnNlcnRlZEludG9BbmNlc3Rvcik6IENhbGwgRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3Ig
YmVmb3JlIGNhbGxpbmcKKyAgICAgICAgZmluZENsb3Nlc3RGb3JtQW5jZXN0b3IgdG8gZmluZCB0
aGUgZm9ybSBlbGVtZW50IHRvIGFzc29jaWF0ZSB0aGlzIGltYWdlIGVsZW1lbnQgd2l0aCBhcyBp
dCBub3cKKyAgICAgICAgcmVsaWVzIG9uIEluY2x1c2l2ZUFuY2VzdG9yU3RhdGVGb3JGb3JtIGZs
YWcgd2hpY2ggaXMgdXBkYXRlZCBpbiBFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3Rvci4KKwog
MjAyMS0wMi0yMyAgQWxpY2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgTWFrZSBzeXN0ZW0gY29uc29sZSBsb2dnaW5nIHN5bmNocm9ub3VzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcAppbmRleCAzNjk5OTdlMGIw
YWY1YjNjNzk0NDE4YTRmOTgzNWQyNWJiNmE2ZTUxLi5lNTNhNDc0Mzk5OWUzZTEwNzI3ODViYTVj
ZDlhYTMyYWVjOWU4NTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZUFsZ29yaXRobXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2Rl
QWxnb3JpdGhtcy5jcHAKQEAgLTQxLDE5ICs0MSwyMCBAQCBDb250YWluZXJDaGlsZFJlbW92YWxT
Y29wZSogQ29udGFpbmVyQ2hpbGRSZW1vdmFsU2NvcGU6OnNfc2NvcGUgPSBudWxscHRyOwogCiBl
bnVtIGNsYXNzIFRyZWVTY29wZUNoYW5nZSB7IENoYW5nZWQsIERpZE5vdENoYW5nZSB9OwogCi1z
dGF0aWMgdm9pZCBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQoQ29udGFpbmVyTm9kZSYg
cGFyZW50T2ZJbnNlcnRlZFRyZWUsIE5vZGUmIG5vZGUsIFRyZWVTY29wZUNoYW5nZSB0cmVlU2Nv
cGVDaGFuZ2UsIE5vZGVWZWN0b3ImIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKQor
c3RhdGljIHZvaWQgbm90aWZ5Tm9kZUluc2VydGVkSW50b0RvY3VtZW50KENvbnRhaW5lck5vZGUm
IHBhcmVudE9mSW5zZXJ0ZWRUcmVlLCBOb2RlJiBub2RlLCBUcmVlU2NvcGVDaGFuZ2UgdHJlZVNj
b3BlQ2hhbmdlLCBPcHRpb25TZXQ8Tm9kZTo6QW5jZXN0b3JTdGF0ZT4gYW5jZXN0b3JTdGF0ZXMs
IE5vZGVWZWN0b3ImIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKQogewogICAgIEFT
U0VSVChwYXJlbnRPZkluc2VydGVkVHJlZS5pc0Nvbm5lY3RlZCgpKTsKICAgICBBU1NFUlQoIW5v
ZGUuaXNDb25uZWN0ZWQoKSk7Ci0gICAgaWYgKG5vZGUuaW5zZXJ0ZWRJbnRvQW5jZXN0b3IoTm9k
ZTo6SW5zZXJ0aW9uVHlwZSB7IC8qIGNvbm5lY3RlZFRvRG9jdW1lbnQgKi8gdHJ1ZSwgdHJlZVNj
b3BlQ2hhbmdlID09IFRyZWVTY29wZUNoYW5nZTo6Q2hhbmdlZCB9LCBwYXJlbnRPZkluc2VydGVk
VHJlZSkgPT0gTm9kZTo6SW5zZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1bHQ6Ok5lZWRzUG9zdEluc2Vy
dGlvbkNhbGxiYWNrKQorICAgIGlmIChub2RlLmluc2VydGVkSW50b0FuY2VzdG9yKE5vZGU6Oklu
c2VydGlvblR5cGUgeyAvKiBjb25uZWN0ZWRUb0RvY3VtZW50ICovIHRydWUsIHRyZWVTY29wZUNo
YW5nZSA9PSBUcmVlU2NvcGVDaGFuZ2U6OkNoYW5nZWQsIGFuY2VzdG9yU3RhdGVzIH0sIHBhcmVu
dE9mSW5zZXJ0ZWRUcmVlKSA9PSBOb2RlOjpJbnNlcnRlZEludG9BbmNlc3RvclJlc3VsdDo6TmVl
ZHNQb3N0SW5zZXJ0aW9uQ2FsbGJhY2spCiAgICAgICAgIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRp
b25UYXJnZXRzLmFwcGVuZChub2RlKTsKIAogICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4obm9k
ZSkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8gYW5jZXN0b3JTdGF0ZXNPZkNoaWxkTm9k
ZXMgPSBub2RlLmluY2x1c2l2ZUFuY2VzdG9yU3RhdGVzKCk7CiAgICAgZm9yIChSZWZQdHI8Tm9k
ZT4gY2hpbGQgPSBkb3duY2FzdDxDb250YWluZXJOb2RlPihub2RlKS5maXJzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5pc0Nvbm5lY3RlZCgpICYmIGNoaWxk
LT5wYXJlbnROb2RlKCkgPT0gJm5vZGUpOwotICAgICAgICBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRv
RG9jdW1lbnQocGFyZW50T2ZJbnNlcnRlZFRyZWUsICpjaGlsZCwgdHJlZVNjb3BlQ2hhbmdlLCBw
b3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyk7CisgICAgICAgIG5vdGlmeU5vZGVJbnNl
cnRlZEludG9Eb2N1bWVudChwYXJlbnRPZkluc2VydGVkVHJlZSwgKmNoaWxkLCB0cmVlU2NvcGVD
aGFuZ2UsIGFuY2VzdG9yU3RhdGVzT2ZDaGlsZE5vZGVzLCBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0
aW9uVGFyZ2V0cyk7CiAgICAgfQogCiAgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKQEAgLTYx
LDI5ICs2MiwzMCBAQCBzdGF0aWMgdm9pZCBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQo
Q29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUsCiAKICAgICBpZiAoUmVmUHRyPFNo
YWRvd1Jvb3Q+IHJvb3QgPSBkb3duY2FzdDxFbGVtZW50Pihub2RlKS5zaGFkb3dSb290KCkpIHsK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihub2RlLmlz
Q29ubmVjdGVkKCkgJiYgcm9vdC0+aG9zdCgpID09ICZub2RlKTsKLSAgICAgICAgbm90aWZ5Tm9k
ZUluc2VydGVkSW50b0RvY3VtZW50KHBhcmVudE9mSW5zZXJ0ZWRUcmVlLCAqcm9vdCwgVHJlZVNj
b3BlQ2hhbmdlOjpEaWROb3RDaGFuZ2UsIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRz
KTsKKyAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b0RvY3VtZW50KHBhcmVudE9mSW5zZXJ0
ZWRUcmVlLCAqcm9vdCwgVHJlZVNjb3BlQ2hhbmdlOjpEaWROb3RDaGFuZ2UsIHsgfSwgcG9zdElu
c2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOwogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgbm90
aWZ5Tm9kZUluc2VydGVkSW50b1RyZWUoQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRy
ZWUsIE5vZGUmIG5vZGUsIFRyZWVTY29wZUNoYW5nZSB0cmVlU2NvcGVDaGFuZ2UsIE5vZGVWZWN0
b3ImIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKQorc3RhdGljIHZvaWQgbm90aWZ5
Tm9kZUluc2VydGVkSW50b1RyZWUoQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUs
IE5vZGUmIG5vZGUsIFRyZWVTY29wZUNoYW5nZSB0cmVlU2NvcGVDaGFuZ2UsIE9wdGlvblNldDxO
b2RlOjpBbmNlc3RvclN0YXRlPiBhbmNlc3RvclN0YXRlcywgTm9kZVZlY3RvciYgcG9zdEluc2Vy
dGlvbk5vdGlmaWNhdGlvblRhcmdldHMpCiB7CiAgICAgQVNTRVJUKCFwYXJlbnRPZkluc2VydGVk
VHJlZS5pc0Nvbm5lY3RlZCgpKTsKICAgICBBU1NFUlQoIW5vZGUuaXNDb25uZWN0ZWQoKSk7CiAK
LSAgICBpZiAobm9kZS5pbnNlcnRlZEludG9BbmNlc3RvcihOb2RlOjpJbnNlcnRpb25UeXBlIHsg
LyogY29ubmVjdGVkVG9Eb2N1bWVudCAqLyBmYWxzZSwgdHJlZVNjb3BlQ2hhbmdlID09IFRyZWVT
Y29wZUNoYW5nZTo6Q2hhbmdlZCB9LCBwYXJlbnRPZkluc2VydGVkVHJlZSkgPT0gTm9kZTo6SW5z
ZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1bHQ6Ok5lZWRzUG9zdEluc2VydGlvbkNhbGxiYWNrKQorICAg
IGlmIChub2RlLmluc2VydGVkSW50b0FuY2VzdG9yKE5vZGU6Okluc2VydGlvblR5cGUgeyAvKiBj
b25uZWN0ZWRUb0RvY3VtZW50ICovIGZhbHNlLCB0cmVlU2NvcGVDaGFuZ2UgPT0gVHJlZVNjb3Bl
Q2hhbmdlOjpDaGFuZ2VkLCBhbmNlc3RvclN0YXRlcyB9LCBwYXJlbnRPZkluc2VydGVkVHJlZSkg
PT0gTm9kZTo6SW5zZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1bHQ6Ok5lZWRzUG9zdEluc2VydGlvbkNh
bGxiYWNrKQogICAgICAgICBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cy5hcHBlbmQo
bm9kZSk7CiAKICAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KG5vZGUpKQogICAgICAgICByZXR1
cm47CiAKKyAgICBhdXRvIGFuY2VzdG9yU3RhdGVzT2ZDaGlsZE5vZGVzID0gbm9kZS5pbmNsdXNp
dmVBbmNlc3RvclN0YXRlcygpOwogICAgIGZvciAoUmVmUHRyPE5vZGU+IGNoaWxkID0gZG93bmNh
c3Q8Q29udGFpbmVyTm9kZT4obm9kZSkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b1RyZWUocGFy
ZW50T2ZJbnNlcnRlZFRyZWUsICpjaGlsZCwgdHJlZVNjb3BlQ2hhbmdlLCBwb3N0SW5zZXJ0aW9u
Tm90aWZpY2F0aW9uVGFyZ2V0cyk7CisgICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9UcmVl
KHBhcmVudE9mSW5zZXJ0ZWRUcmVlLCAqY2hpbGQsIHRyZWVTY29wZUNoYW5nZSwgYW5jZXN0b3JT
dGF0ZXNPZkNoaWxkTm9kZXMsIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKIAog
ICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChS
ZWZQdHI8U2hhZG93Um9vdD4gcm9vdCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLnNoYWRvd1Jv
b3QoKSkKLSAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b1RyZWUocGFyZW50T2ZJbnNlcnRl
ZFRyZWUsICpyb290LCBUcmVlU2NvcGVDaGFuZ2U6OkRpZE5vdENoYW5nZSwgcG9zdEluc2VydGlv
bk5vdGlmaWNhdGlvblRhcmdldHMpOworICAgICAgICBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvVHJl
ZShwYXJlbnRPZkluc2VydGVkVHJlZSwgKnJvb3QsIFRyZWVTY29wZUNoYW5nZTo6RGlkTm90Q2hh
bmdlLCB7IH0sIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKIH0KIAogTm9kZVZl
Y3RvciBub3RpZnlDaGlsZE5vZGVJbnNlcnRlZChDb250YWluZXJOb2RlJiBwYXJlbnRPZkluc2Vy
dGVkVHJlZSwgTm9kZSYgbm9kZSkKQEAgLTEwMCw5ICsxMDIsOSBAQCBOb2RlVmVjdG9yIG5vdGlm
eUNoaWxkTm9kZUluc2VydGVkKENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlLCBO
b2RlJiBubwogICAgIC8vIFRyZWUgc2NvcGUgaGFzIGNoYW5nZWQgaWYgdGhlIGNvbnRhaW5lciBu
b2RlIGludG8gd2hpY2ggIm5vZGUiIGlzIGluc2VydGVkIGlzIGluIGEgZG9jdW1lbnQgb3IgYSBz
aGFkb3cgcm9vdC4KICAgICBhdXRvIHRyZWVTY29wZUNoYW5nZSA9IHBhcmVudE9mSW5zZXJ0ZWRU
cmVlLmlzSW5UcmVlU2NvcGUoKSA/IFRyZWVTY29wZUNoYW5nZTo6Q2hhbmdlZCA6IFRyZWVTY29w
ZUNoYW5nZTo6RGlkTm90Q2hhbmdlOwogICAgIGlmIChwYXJlbnRPZkluc2VydGVkVHJlZS5pc0Nv
bm5lY3RlZCgpKQotICAgICAgICBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQocGFyZW50
T2ZJbnNlcnRlZFRyZWUsIG5vZGUsIHRyZWVTY29wZUNoYW5nZSwgcG9zdEluc2VydGlvbk5vdGlm
aWNhdGlvblRhcmdldHMpOworICAgICAgICBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQo
cGFyZW50T2ZJbnNlcnRlZFRyZWUsIG5vZGUsIHRyZWVTY29wZUNoYW5nZSwgcGFyZW50T2ZJbnNl
cnRlZFRyZWUuaW5jbHVzaXZlQW5jZXN0b3JTdGF0ZXMoKSwgcG9zdEluc2VydGlvbk5vdGlmaWNh
dGlvblRhcmdldHMpOwogICAgIGVsc2UKLSAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b1Ry
ZWUocGFyZW50T2ZJbnNlcnRlZFRyZWUsIG5vZGUsIHRyZWVTY29wZUNoYW5nZSwgcG9zdEluc2Vy
dGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOworICAgICAgICBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRv
VHJlZShwYXJlbnRPZkluc2VydGVkVHJlZSwgbm9kZSwgdHJlZVNjb3BlQ2hhbmdlLCBwYXJlbnRP
Zkluc2VydGVkVHJlZS5pbmNsdXNpdmVBbmNlc3RvclN0YXRlcygpLCBwb3N0SW5zZXJ0aW9uTm90
aWZpY2F0aW9uVGFyZ2V0cyk7CiAKICAgICByZXR1cm4gcG9zdEluc2VydGlvbk5vdGlmaWNhdGlv
blRhcmdldHM7CiB9CkBAIC0xMTksMTkgKzEyMSwyMCBAQCBpbmxpbmUgdm9pZCB1cGRhdGVPYnNl
cnZhYmlsaXR5KFJlbW92ZWRTdWJ0cmVlT2JzZXJ2YWJpbGl0eSYgY3VycmVudE9ic2VydmFiaWxp
dAogICAgICAgICBjdXJyZW50T2JzZXJ2YWJpbGl0eSA9IG5ld1N0YXR1czsKIH0KIAotc3RhdGlj
IFJlbW92ZWRTdWJ0cmVlT2JzZXJ2YWJpbGl0eSBub3RpZnlOb2RlUmVtb3ZlZEZyb21Eb2N1bWVu
dChDb250YWluZXJOb2RlJiBvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLCBUcmVlU2NvcGVDaGFuZ2Ug
dHJlZVNjb3BlQ2hhbmdlLCBOb2RlJiBub2RlKQorc3RhdGljIFJlbW92ZWRTdWJ0cmVlT2JzZXJ2
YWJpbGl0eSBub3RpZnlOb2RlUmVtb3ZlZEZyb21Eb2N1bWVudChDb250YWluZXJOb2RlJiBvbGRQ
YXJlbnRPZlJlbW92ZWRUcmVlLCBUcmVlU2NvcGVDaGFuZ2UgdHJlZVNjb3BlQ2hhbmdlLCBPcHRp
b25TZXQ8Tm9kZTo6QW5jZXN0b3JTdGF0ZT4gYW5jZXN0b3JTdGF0ZXMsIE5vZGUmIG5vZGUpCiB7
CiAgICAgQVNTRVJUKG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUuaXNDb25uZWN0ZWQoKSk7CiAgICAg
QVNTRVJUKG5vZGUuaXNDb25uZWN0ZWQoKSk7Ci0gICAgbm9kZS5yZW1vdmVkRnJvbUFuY2VzdG9y
KE5vZGU6OlJlbW92YWxUeXBlIHsgLyogZGlzY29ubmVjdGVkRnJvbURvY3VtZW50ICovIHRydWUs
IHRyZWVTY29wZUNoYW5nZSA9PSBUcmVlU2NvcGVDaGFuZ2U6OkNoYW5nZWQgfSwgb2xkUGFyZW50
T2ZSZW1vdmVkVHJlZSk7CisgICAgbm9kZS5yZW1vdmVkRnJvbUFuY2VzdG9yKE5vZGU6OlJlbW92
YWxUeXBlIHsgLyogZGlzY29ubmVjdGVkRnJvbURvY3VtZW50ICovIHRydWUsIHRyZWVTY29wZUNo
YW5nZSA9PSBUcmVlU2NvcGVDaGFuZ2U6OkNoYW5nZWQsIGFuY2VzdG9yU3RhdGVzIH0sIG9sZFBh
cmVudE9mUmVtb3ZlZFRyZWUpOwogCiAgICAgYXV0byBvYnNlcnZhYmlsaXR5ID0gb2JzZXJ2YWJp
bGl0eU9mUmVtb3ZlZE5vZGUobm9kZSk7CiAgICAgaWYgKCFpczxDb250YWluZXJOb2RlPihub2Rl
KSkKICAgICAgICAgcmV0dXJuIG9ic2VydmFiaWxpdHk7CiAKKyAgICBhdXRvIGFuY2VzdG9yU3Rh
dGVzT2ZDaGlsZE5vZGVzID0gbm9kZS5pbmNsdXNpdmVBbmNlc3RvclN0YXRlcygpOwogICAgIGZv
ciAoUmVmUHRyPE5vZGU+IGNoaWxkID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4obm9kZSkuZmly
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFub2RlLmlzQ29ubmVj
dGVkKCkgJiYgY2hpbGQtPnBhcmVudE5vZGUoKSA9PSAmbm9kZSk7Ci0gICAgICAgIHVwZGF0ZU9i
c2VydmFiaWxpdHkob2JzZXJ2YWJpbGl0eSwgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQo
b2xkUGFyZW50T2ZSZW1vdmVkVHJlZSwgdHJlZVNjb3BlQ2hhbmdlLCAqY2hpbGQuZ2V0KCkpKTsK
KyAgICAgICAgdXBkYXRlT2JzZXJ2YWJpbGl0eShvYnNlcnZhYmlsaXR5LCBub3RpZnlOb2RlUmVt
b3ZlZEZyb21Eb2N1bWVudChvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLCB0cmVlU2NvcGVDaGFuZ2Us
IGFuY2VzdG9yU3RhdGVzT2ZDaGlsZE5vZGVzLCAqY2hpbGQuZ2V0KCkpKTsKICAgICB9CiAKICAg
ICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQpAQCAtMTM5LDI5ICsxNDIsMzAgQEAgc3RhdGljIFJl
bW92ZWRTdWJ0cmVlT2JzZXJ2YWJpbGl0eSBub3RpZnlOb2RlUmVtb3ZlZEZyb21Eb2N1bWVudChD
b250YWluZXJOb2RlJgogCiAgICAgaWYgKFJlZlB0cjxTaGFkb3dSb290PiByb290ID0gZG93bmNh
c3Q8RWxlbWVudD4obm9kZSkuc2hhZG93Um9vdCgpKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUuaXNDb25uZWN0ZWQoKSAmJiByb290LT5o
b3N0KCkgPT0gJm5vZGUpOwotICAgICAgICB1cGRhdGVPYnNlcnZhYmlsaXR5KG9ic2VydmFiaWxp
dHksIG5vdGlmeU5vZGVSZW1vdmVkRnJvbURvY3VtZW50KG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUs
IFRyZWVTY29wZUNoYW5nZTo6RGlkTm90Q2hhbmdlLCAqcm9vdC5nZXQoKSkpOworICAgICAgICB1
cGRhdGVPYnNlcnZhYmlsaXR5KG9ic2VydmFiaWxpdHksIG5vdGlmeU5vZGVSZW1vdmVkRnJvbURv
Y3VtZW50KG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUsIFRyZWVTY29wZUNoYW5nZTo6RGlkTm90Q2hh
bmdlLCB7IH0sICpyb290LmdldCgpKSk7CiAgICAgfQogICAgIHJldHVybiBvYnNlcnZhYmlsaXR5
OwogfQogCi1zdGF0aWMgUmVtb3ZlZFN1YnRyZWVPYnNlcnZhYmlsaXR5IG5vdGlmeU5vZGVSZW1v
dmVkRnJvbVRyZWUoQ29udGFpbmVyTm9kZSYgb2xkUGFyZW50T2ZSZW1vdmVkVHJlZSwgVHJlZVNj
b3BlQ2hhbmdlIHRyZWVTY29wZUNoYW5nZSwgTm9kZSYgbm9kZSkKK3N0YXRpYyBSZW1vdmVkU3Vi
dHJlZU9ic2VydmFiaWxpdHkgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tVHJlZShDb250YWluZXJOb2Rl
JiBvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLCBUcmVlU2NvcGVDaGFuZ2UgdHJlZVNjb3BlQ2hhbmdl
LCBPcHRpb25TZXQ8Tm9kZTo6QW5jZXN0b3JTdGF0ZT4gYW5jZXN0b3JTdGF0ZXMsIE5vZGUmIG5v
ZGUpCiB7CiAgICAgQVNTRVJUKCFvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLmlzQ29ubmVjdGVkKCkp
OwogCi0gICAgbm9kZS5yZW1vdmVkRnJvbUFuY2VzdG9yKE5vZGU6OlJlbW92YWxUeXBlIHsgLyog
ZGlzY29ubmVjdGVkRnJvbURvY3VtZW50ICovIGZhbHNlLCB0cmVlU2NvcGVDaGFuZ2UgPT0gVHJl
ZVNjb3BlQ2hhbmdlOjpDaGFuZ2VkIH0sIG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUpOworICAgIG5v
ZGUucmVtb3ZlZEZyb21BbmNlc3RvcihOb2RlOjpSZW1vdmFsVHlwZSB7IC8qIGRpc2Nvbm5lY3Rl
ZEZyb21Eb2N1bWVudCAqLyBmYWxzZSwgdHJlZVNjb3BlQ2hhbmdlID09IFRyZWVTY29wZUNoYW5n
ZTo6Q2hhbmdlZCwgYW5jZXN0b3JTdGF0ZXMgfSwgb2xkUGFyZW50T2ZSZW1vdmVkVHJlZSk7CiAK
ICAgICBhdXRvIG9ic2VydmFiaWxpdHkgPSBvYnNlcnZhYmlsaXR5T2ZSZW1vdmVkTm9kZShub2Rl
KTsKICAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KG5vZGUpKQogICAgICAgICByZXR1cm4gb2Jz
ZXJ2YWJpbGl0eTsKIAorICAgIGF1dG8gYW5jZXN0b3JTdGF0ZXNPZkNoaWxkTm9kZXMgPSBub2Rl
LmluY2x1c2l2ZUFuY2VzdG9yU3RhdGVzKCk7CiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gY2hpbGQg
PSBkb3duY2FzdDxDb250YWluZXJOb2RlPihub2RlKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICB1cGRhdGVPYnNlcnZhYmlsaXR5KG9i
c2VydmFiaWxpdHksIG5vdGlmeU5vZGVSZW1vdmVkRnJvbVRyZWUob2xkUGFyZW50T2ZSZW1vdmVk
VHJlZSwgdHJlZVNjb3BlQ2hhbmdlLCAqY2hpbGQpKTsKKyAgICAgICAgdXBkYXRlT2JzZXJ2YWJp
bGl0eShvYnNlcnZhYmlsaXR5LCBub3RpZnlOb2RlUmVtb3ZlZEZyb21UcmVlKG9sZFBhcmVudE9m
UmVtb3ZlZFRyZWUsIHRyZWVTY29wZUNoYW5nZSwgYW5jZXN0b3JTdGF0ZXNPZkNoaWxkTm9kZXMs
ICpjaGlsZCkpOwogCiAgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJu
IG9ic2VydmFiaWxpdHk7CiAKICAgICBpZiAoUmVmUHRyPFNoYWRvd1Jvb3Q+IHJvb3QgPSBkb3du
Y2FzdDxFbGVtZW50Pihub2RlKS5zaGFkb3dSb290KCkpCi0gICAgICAgIHVwZGF0ZU9ic2VydmFi
aWxpdHkob2JzZXJ2YWJpbGl0eSwgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tVHJlZShvbGRQYXJlbnRP
ZlJlbW92ZWRUcmVlLCBUcmVlU2NvcGVDaGFuZ2U6OkRpZE5vdENoYW5nZSwgKnJvb3QpKTsKKyAg
ICAgICAgdXBkYXRlT2JzZXJ2YWJpbGl0eShvYnNlcnZhYmlsaXR5LCBub3RpZnlOb2RlUmVtb3Zl
ZEZyb21UcmVlKG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUsIFRyZWVTY29wZUNoYW5nZTo6RGlkTm90
Q2hhbmdlLCB7IH0sICpyb290KSk7CiAKICAgICByZXR1cm4gb2JzZXJ2YWJpbGl0eTsKIH0KQEAg
LTE3NSw4ICsxNzksOCBAQCBSZW1vdmVkU3VidHJlZU9ic2VydmFiaWxpdHkgbm90aWZ5Q2hpbGRO
b2RlUmVtb3ZlZChDb250YWluZXJOb2RlJiBvbGRQYXJlbnRPZlJlbQogICAgIC8vIFRyZWUgc2Nv
cGUgaGFzIGNoYW5nZWQgaWYgdGhlIGNvbnRhaW5lciBub2RlIGZyb20gd2hpY2ggIm5vZGUiIGlz
IHJlbW92ZWQgaXMgaW4gYSBkb2N1bWVudCBvciBhIHNoYWRvdyByb290LgogICAgIGF1dG8gdHJl
ZVNjb3BlQ2hhbmdlID0gb2xkUGFyZW50T2ZSZW1vdmVkVHJlZS5pc0luVHJlZVNjb3BlKCkgPyBU
cmVlU2NvcGVDaGFuZ2U6OkNoYW5nZWQgOiBUcmVlU2NvcGVDaGFuZ2U6OkRpZE5vdENoYW5nZTsK
ICAgICBpZiAoY2hpbGQuaXNDb25uZWN0ZWQoKSkKLSAgICAgICAgcmV0dXJuIG5vdGlmeU5vZGVS
ZW1vdmVkRnJvbURvY3VtZW50KG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUsIHRyZWVTY29wZUNoYW5n
ZSwgY2hpbGQpOwotICAgIHJldHVybiBub3RpZnlOb2RlUmVtb3ZlZEZyb21UcmVlKG9sZFBhcmVu
dE9mUmVtb3ZlZFRyZWUsIHRyZWVTY29wZUNoYW5nZSwgY2hpbGQpOworICAgICAgICByZXR1cm4g
bm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQob2xkUGFyZW50T2ZSZW1vdmVkVHJlZSwgdHJl
ZVNjb3BlQ2hhbmdlLCB7IH0sIGNoaWxkKTsKKyAgICByZXR1cm4gbm90aWZ5Tm9kZVJlbW92ZWRG
cm9tVHJlZShvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLCB0cmVlU2NvcGVDaGFuZ2UsIHsgfSwgY2hp
bGQpOwogfQogCiB2b2lkIGFkZENoaWxkTm9kZXNUb0RlbGV0aW9uUXVldWUoTm9kZSomIGhlYWQs
IE5vZGUqJiB0YWlsLCBDb250YWluZXJOb2RlJiBjb250YWluZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAKaW5kZXggZjg4NmEwZmNkN2U5MGU1MjFlNWViN2M3N2M3NzY3NzMyNDRkYjcxYS4uZjBmNjhk
MTkxMGFlNjliYjYxNTI2NTI4ODYyNGU1OTg4ZjUyODY2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cApAQCAtNjM5LDcgKzYzOSwxMCBAQCBib29sIEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QK
ICAgICBpZiAoIWlzQ29ubmVjdGVkKCkgfHwgIXN1cHBvcnRzRm9jdXMoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKCFyZW5kZXJlcigpKSB7CisgICAgYm9vbCBoYXNDYW52YXNB
c0luY2x1c2l2ZUFuY2VzdG9yID0gaW5jbHVzaXZlQW5jZXN0b3JTdGF0ZXMoKS5jb250YWlucyhB
bmNlc3RvclN0YXRlOjpDYW52YXMpOworICAgIEFTU0VSVChoYXNDYW52YXNBc0luY2x1c2l2ZUFu
Y2VzdG9yID09ICEhYW5jZXN0b3JzT2ZUeXBlPEhUTUxDYW52YXNFbGVtZW50PigqdGhpcykuZmly
c3QoKQorICAgICAgICB8fCAoaGFzQ2FudmFzQXNJbmNsdXNpdmVBbmNlc3RvciAmJiBpczxIVE1M
Q2FudmFzRWxlbWVudD4oKnRoaXMpKSk7CisgICAgaWYgKCFyZW5kZXJlcigpICYmIGhhc0NhbnZh
c0FzSW5jbHVzaXZlQW5jZXN0b3IpIHsKICAgICAgICAgLy8gRWxlbWVudHMgaW4gY2FudmFzIGZh
bGxiYWNrIGNvbnRlbnQgYXJlIG5vdCByZW5kZXJlZCwgYnV0IHRoZXkgYXJlIGFsbG93ZWQgdG8g
YmUKICAgICAgICAgLy8gZm9jdXNhYmxlIGFzIGxvbmcgYXMgdGhlaXIgY2FudmFzIGlzIGRpc3Bs
YXllZCBhbmQgdmlzaWJsZS4KICAgICAgICAgaWYgKGF1dG8qIGNhbnZhcyA9IGFuY2VzdG9yc09m
VHlwZTxIVE1MQ2FudmFzRWxlbWVudD4oKnRoaXMpLmZpcnN0KCkpCkBAIC0yMTU0LDYgKzIxNTcs
OCBAQCBOb2RlOjpJbnNlcnRlZEludG9BbmNlc3RvclJlc3VsdCBFbGVtZW50OjppbnNlcnRlZElu
dG9BbmNlc3RvcihJbnNlcnRpb25UeXBlIGlucwogewogICAgIENvbnRhaW5lck5vZGU6Omluc2Vy
dGVkSW50b0FuY2VzdG9yKGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKIAor
ICAgIHNldEluY2x1c2l2ZUFuY2VzdG9yU3RhdGVzKGluc2VydGlvblR5cGUuYW5jZXN0b3JTdGF0
ZXMpOworCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIGlmIChjb250YWluc0Z1bGxT
Y3JlZW5FbGVtZW50KCkgJiYgcGFyZW50RWxlbWVudCgpICYmICFwYXJlbnRFbGVtZW50KCktPmNv
bnRhaW5zRnVsbFNjcmVlbkVsZW1lbnQoKSkKICAgICAgICAgc2V0Q29udGFpbnNGdWxsU2NyZWVu
RWxlbWVudE9uQW5jZXN0b3JzQ3Jvc3NpbmdGcmFtZUJvdW5kYXJpZXModHJ1ZSk7CkBAIC0yMjEx
LDExICsyMjE2LDEzIEBAIE5vZGU6Okluc2VydGVkSW50b0FuY2VzdG9yUmVzdWx0IEVsZW1lbnQ6
Omluc2VydGVkSW50b0FuY2VzdG9yKEluc2VydGlvblR5cGUgaW5zCiAKIHZvaWQgRWxlbWVudDo6
cmVtb3ZlZEZyb21BbmNlc3RvcihSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9k
ZSYgb2xkUGFyZW50T2ZSZW1vdmVkVHJlZSkKIHsKKyAgICBzZXRJbmNsdXNpdmVBbmNlc3RvclN0
YXRlcyhyZW1vdmFsVHlwZS5hbmNlc3RvclN0YXRlcyk7CisKICNpZiBFTkFCTEUoRlVMTFNDUkVF
Tl9BUEkpCiAgICAgaWYgKGNvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnQoKSkKICAgICAgICAgc2V0
Q29udGFpbnNGdWxsU2NyZWVuRWxlbWVudE9uQW5jZXN0b3JzQ3Jvc3NpbmdGcmFtZUJvdW5kYXJp
ZXMoZmFsc2UpOwogI2VuZGlmCi0gICAgCisKICAgICBpZiAoYXV0byogcGFnZSA9IGRvY3VtZW50
KCkucGFnZSgpKSB7CiAjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKICAgICAgICAgcGFnZS0+cG9p
bnRlckxvY2tDb250cm9sbGVyKCkuZWxlbWVudFdhc1JlbW92ZWQoKnRoaXMpOwpAQCAtMjM5Myw2
ICsyNDAwLDggQEAgRXhjZXB0aW9uT3I8U2hhZG93Um9vdCY+IEVsZW1lbnQ6OmF0dGFjaFNoYWRv
dyhjb25zdCBTaGFkb3dSb290SW5pdCYgaW5pdCkKICAgICBpZiAoaW5pdC5tb2RlID09IFNoYWRv
d1Jvb3RNb2RlOjpVc2VyQWdlbnQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJy
b3IgfTsKICAgICBhdXRvIHNoYWRvdyA9IFNoYWRvd1Jvb3Q6OmNyZWF0ZShkb2N1bWVudCgpLCBp
bml0Lm1vZGUsIGluaXQuZGVsZWdhdGVzRm9jdXMgPyBTaGFkb3dSb290OjpEZWxlZ2F0ZXNGb2N1
czo6WWVzIDogU2hhZG93Um9vdDo6RGVsZWdhdGVzRm9jdXM6Ok5vKTsKKyAgICBpZiAoaW5pdC5k
ZWxlZ2F0ZXNGb2N1cykKKyAgICAgICAgc2V0RGVsZWdhdGVzRm9jdXNUb1NoYWRvd1Jvb3QoKTsK
ICAgICBhdXRvJiByZXN1bHQgPSBzaGFkb3cuZ2V0KCk7CiAgICAgYWRkU2hhZG93Um9vdChXVEZN
b3ZlKHNoYWRvdykpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0yOTY1LDcgKzI5NzQsNyBAQCBi
b29sIEVsZW1lbnQ6Omhhc0F0dHJpYnV0ZU5TKGNvbnN0IEF0b21TdHJpbmcmIG5hbWVzcGFjZVVS
SSwgY29uc3QgQXRvbVN0cmluZyYgbAogCiBzdGF0aWMgUmVmUHRyPFNoYWRvd1Jvb3Q+IHNoYWRv
d1Jvb3RXaXRoRGVsZWdhdGVzRm9jdXMoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBp
ZiAoYXV0byogcm9vdCA9IGVsZW1lbnQuc2hhZG93Um9vdCgpKSB7CisgICAgaWYgKGF1dG8qIHJv
b3QgPSBlbGVtZW50LnNoYWRvd1Jvb3QoKTsgVU5MSUtFTFkocm9vdCkpIHsKICAgICAgICAgaWYg
KHJvb3QtPmRlbGVnYXRlc0ZvY3VzKCkpCiAgICAgICAgICAgICByZXR1cm4gcm9vdDsKICAgICB9
CkBAIC0yOTc2LDcgKzI5ODUsOCBAQCBzdGF0aWMgYm9vbCBpc1Byb2dyYW1hdGljYWxseUZvY3Vz
YWJsZShFbGVtZW50JiBlbGVtZW50KQogewogICAgIFNjcmlwdERpc2FsbG93ZWRTY29wZTo6SW5N
YWluVGhyZWFkIHNjcmlwdERpc2FsbG93ZWRTY29wZTsKIAotICAgIGlmIChzaGFkb3dSb290V2l0
aERlbGVnYXRlc0ZvY3VzKGVsZW1lbnQpKQorICAgIEFTU0VSVChlbGVtZW50LmRlbGVnYXRlc0Zv
Y3VzVG9TaGFkb3dSb290KCkgPT0gISFzaGFkb3dSb290V2l0aERlbGVnYXRlc0ZvY3VzKGVsZW1l
bnQpKTsKKyAgICBpZiAoZWxlbWVudC5kZWxlZ2F0ZXNGb2N1c1RvU2hhZG93Um9vdCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBJZiB0aGUgc3R5bGVzaGVldHMgaGF2ZSBhbHJl
YWR5IGJlZW4gbG9hZGVkIHdlIGNhbiByZWxpYWJseSBjaGVjayBpc0ZvY3VzYWJsZS4KQEAgLTMw
MjMsNyArMzAzMyw5IEBAIHZvaWQgRWxlbWVudDo6Zm9jdXMoU2VsZWN0aW9uUmVzdG9yYXRpb25N
b2RlIHJlc3RvcmF0aW9uTW9kZSwgRm9jdXNEaXJlY3Rpb24gZGlyCiAgICAgaWYgKCZuZXdUYXJn
ZXQtPmRvY3VtZW50KCkgIT0gZG9jdW1lbnQucHRyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChhdXRvIHJvb3QgPSBzaGFkb3dSb290V2l0aERlbGVnYXRlc0ZvY3VzKCp0aGlzKSkgewor
ICAgIEFTU0VSVChkZWxlZ2F0ZXNGb2N1c1RvU2hhZG93Um9vdCgpID09ICEhc2hhZG93Um9vdFdp
dGhEZWxlZ2F0ZXNGb2N1cygqdGhpcykpOworICAgIGlmIChkZWxlZ2F0ZXNGb2N1c1RvU2hhZG93
Um9vdCgpKSB7CisgICAgICAgIGF1dG8gcm9vdCA9IHNoYWRvd1Jvb3RXaXRoRGVsZWdhdGVzRm9j
dXMoKnRoaXMpOwogICAgICAgICBhdXRvIGN1cnJlbnRseUZvY3VzZWRFbGVtZW50ID0gbWFrZVJl
ZlB0cihkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSk7CiAgICAgICAgIGlmIChyb290LT5jb250
YWluc0luY2x1ZGluZ1NoYWRvd0RPTShjdXJyZW50bHlGb2N1c2VkRWxlbWVudC5nZXQoKSkpIHsK
ICAgICAgICAgICAgIGlmIChkb2N1bWVudC0+cGFnZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggMmVjZDE1
ZDZkOTRkNWE5NGFmNzU5ZmJkNTU3NjUyNTdhZjRkNjZlMS4uZDJiMzY5MDljMGVjMGIxNmQ0NTky
MGNiNDQ2OTU5MzI0YmJhYWIwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC0yMjIsNiArMjIyLDcgQEAgcHVi
bGljOgogICAgIFNoYWRvd1Jvb3QqIGNvbnRhaW5pbmdTaGFkb3dSb290KCkgY29uc3Q7CiAgICAg
U2hhZG93Um9vdCogc2hhZG93Um9vdCgpIGNvbnN0OwogICAgIGJvb2wgaXNDbG9zZWRTaGFkb3dI
aWRkZW4oY29uc3QgTm9kZSYpIGNvbnN0OworICAgIGJvb2wgZGVsZWdhdGVzRm9jdXNUb1NoYWRv
d1Jvb3QoKSBjb25zdCB7IHJldHVybiBoYXNOb2RlRmxhZyhOb2RlRmxhZzo6RGVsZWdhdGVzRm9j
dXNUb1NoYWRvd1Jvb3QpOyB9CiAKICAgICBIVE1MU2xvdEVsZW1lbnQqIGFzc2lnbmVkU2xvdCgp
IGNvbnN0OwogICAgIEhUTUxTbG90RWxlbWVudCogYXNzaWduZWRTbG90Rm9yQmluZGluZ3MoKSBj
b25zdDsKQEAgLTQwNSw5ICs0MDYsMTQgQEAgcHVibGljOgogICAgICAgICBEb25lLAogICAgICAg
ICBOZWVkc1Bvc3RJbnNlcnRpb25DYWxsYmFjaywKICAgICB9OworICAgIGVudW0gY2xhc3MgQW5j
ZXN0b3JTdGF0ZSA6IHVpbnQ4X3QgeworICAgICAgICBGb3JtID0gMSA8PCAwLAorICAgICAgICBD
YW52YXMgPSAxIDw8IDEsCisgICAgfTsKICAgICBzdHJ1Y3QgSW5zZXJ0aW9uVHlwZSB7CiAgICAg
ICAgIGJvb2wgY29ubmVjdGVkVG9Eb2N1bWVudCB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgdHJl
ZVNjb3BlQ2hhbmdlZCB7IGZhbHNlIH07CisgICAgICAgIE9wdGlvblNldDxBbmNlc3RvclN0YXRl
PiBhbmNlc3RvclN0YXRlczsKICAgICB9OwogICAgIC8vIENhbGxlZCAqYWZ0ZXIqIHRoaXMgbm9k
ZSBvciBpdHMgYW5jZXN0b3IgaXMgaW5zZXJ0ZWQgaW50byBhIG5ldyBwYXJlbnQgKG1heSBvciBt
YXkgbm90IGJlIGEgcGFydCBvZiBkb2N1bWVudCkgYnkgc2NyaXB0cyBvciBwYXJzZXIuCiAgICAg
Ly8gaW5zZXJ0ZWRJbnRvICoqTVVTVCBOT1QqKiBpbnZva2Ugc2NyaXB0cy4gUmV0dXJuIE5lZWRz
UG9zdEluc2VydGlvbkNhbGxiYWNrIGFuZCBpbXBsZW1lbnQgZGlkRmluaXNoSW5zZXJ0aW5nTm9k
ZSBpbnN0ZWFkIHRvIHJ1biBzY3JpcHRzLgpAQCAtNDE3LDYgKzQyMyw3IEBAIHB1YmxpYzoKICAg
ICBzdHJ1Y3QgUmVtb3ZhbFR5cGUgewogICAgICAgICBib29sIGRpc2Nvbm5lY3RlZEZyb21Eb2N1
bWVudCB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgdHJlZVNjb3BlQ2hhbmdlZCB7IGZhbHNlIH07
CisgICAgICAgIE9wdGlvblNldDxBbmNlc3RvclN0YXRlPiBhbmNlc3RvclN0YXRlczsKICAgICB9
OwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbUFuY2VzdG9yKFJlbW92YWxUeXBlLCBDb250
YWluZXJOb2RlJiBvbGRQYXJlbnRPZlJlbW92ZWRUcmVlKTsKIApAQCAtNDk2LDYgKzUwMyw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUFuY2VzdG9yQ29ubmVjdGVkU3ViZnJhbWVDb3VudEZv
clJlbW92YWwoKSBjb25zdDsKICAgICB2b2lkIHVwZGF0ZUFuY2VzdG9yQ29ubmVjdGVkU3ViZnJh
bWVDb3VudEZvckluc2VydGlvbigpIGNvbnN0OwogCisgICAgT3B0aW9uU2V0PEFuY2VzdG9yU3Rh
dGU+IGluY2x1c2l2ZUFuY2VzdG9yU3RhdGVzKCkgY29uc3Q7CisKICNpZiBFTkFCTEUoSklUKQog
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgbm9kZUZsYWdzTWVtb3J5T2Zmc2V0KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKE5vZGUsIG1fbm9kZUZsYWdzKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
cmFyZURhdGFNZW1vcnlPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTm9kZSwgbV9y
YXJlRGF0YVdpdGhCaXRmaWVsZHMpOyB9CkBAIC01NTEsNyArNTYwLDExIEBAIHByb3RlY3RlZDoK
ICNlbmRpZgogICAgICAgICBJc0NvbXB1dGVkU3R5bGVJbnZhbGlkRmxhZyA9IDEgPDwgMjYsCiAK
LSAgICAgICAgLy8gQml0cyAyNy0zMSBhcmUgZnJlZS4KKyAgICAgICAgRGVsZWdhdGVzRm9jdXNU
b1NoYWRvd1Jvb3QgPSAxIDw8IDI3LAorCisgICAgICAgIEluY2x1c2l2ZUFuY2VzdG9yU3RhdGVG
b3JGb3JtID0gMSA8PCAyOCwKKyAgICAgICAgSW5jbHVzaXZlQW5jZXN0b3JTdGF0ZUZvckNhbnZh
cyA9IDEgPDwgMjksCisgICAgICAgIC8vIEJpdHMgMzAtMzEgYXJlIGZyZWUuCiAgICAgfTsKIAog
ICAgIGVudW0gY2xhc3MgVGFiSW5kZXhTdGF0ZSA6IHVpbnQ4X3QgewpAQCAtNTkxLDYgKzYwNCwx
MSBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkKCkg
eyBzZXROb2RlRmxhZyhOb2RlRmxhZzo6SXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZCk7IH0KICAg
ICB2b2lkIGNsZWFySXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZCgpIHsgY2xlYXJOb2RlRmxhZyhO
b2RlRmxhZzo6SXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZCk7IH0KIAorICAgIHZvaWQgc2V0RGVs
ZWdhdGVzRm9jdXNUb1NoYWRvd1Jvb3QoKSB7IHNldE5vZGVGbGFnKE5vZGVGbGFnOjpEZWxlZ2F0
ZXNGb2N1c1RvU2hhZG93Um9vdCk7IH0KKworICAgIHZvaWQgc2V0SW5jbHVzaXZlQW5jZXN0b3JT
dGF0ZXMoT3B0aW9uU2V0PEFuY2VzdG9yU3RhdGU+KTsKKyAgICB2b2lkIGFkZEluY2x1c2l2ZUFu
Y2VzdG9yU3RhdGUoQW5jZXN0b3JTdGF0ZSk7CisKICAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8g
RGVmYXVsdE5vZGVGbGFncyA9IE9wdGlvblNldDxOb2RlRmxhZz4oTm9kZUZsYWc6OklzUGFyc2lu
Z0NoaWxkcmVuRmluaXNoZWQpOwogICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBDcmVhdGVPdGhl
ciA9IERlZmF1bHROb2RlRmxhZ3M7CiAgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIENyZWF0ZUNo
YXJhY3RlckRhdGEgPSBEZWZhdWx0Tm9kZUZsYWdzIHwgTm9kZUZsYWc6OklzQ2hhcmFjdGVyRGF0
YTsKQEAgLTg4OCw2ICs5MDYsNDMgQEAgaW5saW5lIHZvaWQgTm9kZTo6c2V0VHJlZVNjb3BlUmVj
dXJzaXZlbHkoVHJlZVNjb3BlJiBuZXdUcmVlU2NvcGUpCiAgICAgICAgIG1vdmVUcmVlVG9OZXdT
Y29wZSgqdGhpcywgKm1fdHJlZVNjb3BlLCBuZXdUcmVlU2NvcGUpOwogfQogCitBTFdBWVNfSU5M
SU5FIE9wdGlvblNldDxOb2RlOjpBbmNlc3RvclN0YXRlPiBOb2RlOjppbmNsdXNpdmVBbmNlc3Rv
clN0YXRlcygpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzRWxlbWVudE5vZGUoKSB8fCBpc1RyZWVT
Y29wZSgpIHx8IGlzRG9jdW1lbnRGcmFnbWVudCgpKTsgLy8gT25seSBFbGVtZW50IHN1cHBvcnRz
IGFuY2VzdG9yIHN0YXRlcyBmb3IgZXhwZWRpZW5jeS4KKyAgICBPcHRpb25TZXQ8Tm9kZTo6QW5j
ZXN0b3JTdGF0ZT4gc3RhdGVzOworICAgIGlmIChoYXNOb2RlRmxhZyhOb2RlRmxhZzo6SW5jbHVz
aXZlQW5jZXN0b3JTdGF0ZUZvckZvcm0pKQorICAgICAgICBzdGF0ZXMuYWRkKEFuY2VzdG9yU3Rh
dGU6OkZvcm0pOworICAgIGlmIChoYXNOb2RlRmxhZyhOb2RlRmxhZzo6SW5jbHVzaXZlQW5jZXN0
b3JTdGF0ZUZvckNhbnZhcykpCisgICAgICAgIHN0YXRlcy5hZGQoQW5jZXN0b3JTdGF0ZTo6Q2Fu
dmFzKTsKKyAgICByZXR1cm4gc3RhdGVzOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgTm9kZTo6
c2V0SW5jbHVzaXZlQW5jZXN0b3JTdGF0ZXMoT3B0aW9uU2V0PEFuY2VzdG9yU3RhdGU+IHN0YXRl
cykKK3sKKyAgICBBU1NFUlQoaXNFbGVtZW50Tm9kZSgpKTsKKyAgICBpZiAoc3RhdGVzLmNvbnRh
aW5zKEFuY2VzdG9yU3RhdGU6OkZvcm0pKQorICAgICAgICBzZXROb2RlRmxhZyhOb2RlRmxhZzo6
SW5jbHVzaXZlQW5jZXN0b3JTdGF0ZUZvckZvcm0pOworICAgIGVsc2UKKyAgICAgICAgY2xlYXJO
b2RlRmxhZyhOb2RlRmxhZzo6SW5jbHVzaXZlQW5jZXN0b3JTdGF0ZUZvckZvcm0pOworICAgIGlm
IChzdGF0ZXMuY29udGFpbnMoQW5jZXN0b3JTdGF0ZTo6Q2FudmFzKSkKKyAgICAgICAgc2V0Tm9k
ZUZsYWcoTm9kZUZsYWc6OkluY2x1c2l2ZUFuY2VzdG9yU3RhdGVGb3JDYW52YXMpOworICAgIGVs
c2UKKyAgICAgICAgY2xlYXJOb2RlRmxhZyhOb2RlRmxhZzo6SW5jbHVzaXZlQW5jZXN0b3JTdGF0
ZUZvckNhbnZhcyk7Cit9CisKK2lubGluZSB2b2lkIE5vZGU6OmFkZEluY2x1c2l2ZUFuY2VzdG9y
U3RhdGUoQW5jZXN0b3JTdGF0ZSBzdGF0ZSkKK3sKKyAgICBBU1NFUlQoaXNIVE1MRWxlbWVudCgp
KTsKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBBbmNlc3RvclN0YXRlOjpGb3JtOgor
ICAgICAgICBzZXROb2RlRmxhZyhOb2RlRmxhZzo6SW5jbHVzaXZlQW5jZXN0b3JTdGF0ZUZvckZv
cm0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFuY2VzdG9yU3RhdGU6OkNhbnZhczoKKyAg
ICAgICAgc2V0Tm9kZUZsYWcoTm9kZUZsYWc6OkluY2x1c2l2ZUFuY2VzdG9yU3RhdGVGb3JDYW52
YXMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIGlubGluZSBjb25zdGV4cHIgUGFydGlh
bE9yZGVyaW5nIFBhcnRpYWxPcmRlcmluZzo6bGVzcyhUeXBlOjpMZXNzKTsKIGlubGluZSBjb25z
dGV4cHIgUGFydGlhbE9yZGVyaW5nIFBhcnRpYWxPcmRlcmluZzo6ZXF1aXZhbGVudChUeXBlOjpF
cXVpdmFsZW50KTsKIGlubGluZSBjb25zdGV4cHIgUGFydGlhbE9yZGVyaW5nIFBhcnRpYWxPcmRl
cmluZzo6Z3JlYXRlcihUeXBlOjpHcmVhdGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5j
aG9yRWxlbWVudC5jcHAKaW5kZXggMDFiYjFkMTdkNTJmOWNmZWVhOGMwMWJlOTBkMzM2ODc1Njll
ZDJhZS4uZDdhNGU3MjNmMDlmZDMxMTdkZDc0NWQ0MTY0Y2E4MjAxNTc3MmM2ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKQEAgLTE0OCw3ICsxNDgsOCBAQCBi
b29sIEhUTUxBbmNob3JFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQq
IGV2ZW50KSBjb25zdAogICAgIGlmICghZG9jdW1lbnQoKS5mcmFtZSgpLT5ldmVudEhhbmRsZXIo
KS50YWJzVG9MaW5rcyhldmVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICgh
cmVuZGVyZXIoKSAmJiBhbmNlc3RvcnNPZlR5cGU8SFRNTENhbnZhc0VsZW1lbnQ+KCp0aGlzKS5m
aXJzdCgpKQorICAgIEFTU0VSVChpbmNsdXNpdmVBbmNlc3RvclN0YXRlcygpLmNvbnRhaW5zKEFu
Y2VzdG9yU3RhdGU6OkNhbnZhcykgPT0gISFhbmNlc3RvcnNPZlR5cGU8SFRNTENhbnZhc0VsZW1l
bnQ+KCp0aGlzKS5maXJzdCgpKTsKKyAgICBpZiAoIXJlbmRlcmVyKCkgJiYgaW5jbHVzaXZlQW5j
ZXN0b3JTdGF0ZXMoKS5jb250YWlucyhBbmNlc3RvclN0YXRlOjpDYW52YXMpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBoYXNOb25FbXB0eUJveChyZW5kZXJCb3hNb2RlbE9i
amVjdCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXgg
MmE0ODVkNjFlOGU3YmQ1YjFiZDEwYjQ5ZTc2MmUxODk0NzZjMjJiNC4uNzkxYjE2NGVhZWQ4MGY5
YmY1NDQxMmY3YTNhOTUxNGJiM2RjZTc4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAKQEAgLTEyOCw2ICsxMjgsNyBAQCBIVE1MQ2FudmFzRWxlbWVudDo6SFRN
TENhbnZhc0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQmIGRv
YwogICAgICwgQ2FudmFzQmFzZShJbnRTaXplKGRlZmF1bHRXaWR0aCwgZGVmYXVsdEhlaWdodCkp
CiAgICAgLCBBY3RpdmVET01PYmplY3QoZG9jdW1lbnQpCiB7CisgICAgYWRkSW5jbHVzaXZlQW5j
ZXN0b3JTdGF0ZShBbmNlc3RvclN0YXRlOjpDYW52YXMpOwogICAgIEFTU0VSVChoYXNUYWdOYW1l
KGNhbnZhc1RhZykpOwogfQogCkBAIC0xMDQ5LDcgKzEwNTAsMTAgQEAgTm9kZTo6SW5zZXJ0ZWRJ
bnRvQW5jZXN0b3JSZXN1bHQgSFRNTENhbnZhc0VsZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9y
KEluc2VydGkKICAgICAgICAgICAgIGRvY3VtZW50LmNhbnZhc0NoYW5nZWQoKnRoaXMsIEZsb2F0
UmVjdCB7IH0pOwogICAgIH0KIAotICAgIHJldHVybiBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
QW5jZXN0b3IoaW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOworICAgIEhUTUxF
bGVtZW50OjppbnNlcnRlZEludG9BbmNlc3RvcihpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2Vy
dGVkVHJlZSk7CisgICAgYWRkSW5jbHVzaXZlQW5jZXN0b3JTdGF0ZShBbmNlc3RvclN0YXRlOjpD
YW52YXMpOworCisgICAgcmV0dXJuIEluc2VydGVkSW50b0FuY2VzdG9yUmVzdWx0OjpEb25lOwog
fQogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKFJlbW92YWxU
eXBlIHJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJiBvbGRQYXJlbnRPZlJlbW92ZWRUcmVlKQpA
QCAtMTA2MCw2ICsxMDY0LDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVtb3ZlZEZyb21B
bmNlc3RvcihSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm8KICAgICB9CiAKICAg
ICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21BbmNlc3RvcihyZW1vdmFsVHlwZSwgb2xkUGFyZW50
T2ZSZW1vdmVkVHJlZSk7CisgICAgYWRkSW5jbHVzaXZlQW5jZXN0b3JTdGF0ZShBbmNlc3RvclN0
YXRlOjpDYW52YXMpOwogfQogCiBib29sIEhUTUxDYW52YXNFbGVtZW50OjpuZWVkc1ByZXBhcmF0
aW9uRm9yRGlzcGxheSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKaW5k
ZXggOWY5ZWRkZmVhYTlmMDViNDliMDI2YTlmYWFlMGRkZjc1YTgyNjBhNy4uN2U1ZTU3Mjk4MTQ1
NzA0YzE0NWQzOTk4NWIyZTRjZjBkYjQ4ODE2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcApAQCAtNjYsNiArNjYsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogSFRNTEZvcm1FbGVtZW50OjpIVE1MRm9ybUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwg
ZG9jdW1lbnQpCiB7CisgICAgYWRkSW5jbHVzaXZlQW5jZXN0b3JTdGF0ZShBbmNlc3RvclN0YXRl
OjpGb3JtKTsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShmb3JtVGFnKSk7CiB9CiAKQEAgLTEzNSw2
ICsxMzYsNyBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUpCiBOb2RlOjpJbnNlcnRlZEludG9BbmNlc3RvclJlc3VsdCBIVE1M
Rm9ybUVsZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9yKEluc2VydGlvblR5cGUgaW5zZXJ0aW9u
VHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpCiB7CiAgICAgSFRNTEVs
ZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9yKGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0
ZWRUcmVlKTsKKyAgICBhZGRJbmNsdXNpdmVBbmNlc3RvclN0YXRlKEFuY2VzdG9yU3RhdGU6OkZv
cm0pOwogICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5lY3RlZFRvRG9jdW1lbnQpCiAgICAgICAg
IGRvY3VtZW50KCkuZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2woKnRoaXMpOwogICAgIHJldHVybiBJ
bnNlcnRlZEludG9BbmNlc3RvclJlc3VsdDo6RG9uZTsKQEAgLTE0Nyw2ICsxNDksNyBAQCB2b2lk
IEhUTUxGb3JtRWxlbWVudDo6cmVtb3ZlZEZyb21BbmNlc3RvcihSZW1vdmFsVHlwZSByZW1vdmFs
VHlwZSwgQ29udGFpbmVyTm9kZQogICAgIGZvciAoYXV0byYgYXNzb2NpYXRlZEVsZW1lbnQgOiBh
c3NvY2lhdGVkRWxlbWVudHMpCiAgICAgICAgIGFzc29jaWF0ZWRFbGVtZW50LT5mb3JtT3duZXJS
ZW1vdmVkRnJvbVRyZWUocm9vdCk7CiAgICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0
b3IocmVtb3ZhbFR5cGUsIG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUpOworICAgIGFkZEluY2x1c2l2
ZUFuY2VzdG9yU3RhdGUoQW5jZXN0b3JTdGF0ZTo6Rm9ybSk7CiB9CiAKIHZvaWQgSFRNTEZvcm1F
bGVtZW50OjpoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCYgZXZlbnQsIEV2ZW50SW52b2tlUGhhc2Ug
cGhhc2UpCkBAIC05MDEsOCArOTA0LDE1IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50Ojpjb3B5Tm9u
QXR0cmlidXRlUHJvcGVydGllc0Zyb21FbGVtZW50KGNvbnN0IEVsZW1lbnQmIHNvdXJjCiAgICAg
SFRNTEVsZW1lbnQ6OmNvcHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVzRnJvbUVsZW1lbnQoc291cmNl
KTsKIH0KIAotSFRNTEZvcm1FbGVtZW50KiBIVE1MRm9ybUVsZW1lbnQ6OmZpbmRDbG9zZXN0Rm9y
bUFuY2VzdG9yKGNvbnN0IEVsZW1lbnQmIHN0YXJ0RWxlbWVudCkKK0hUTUxGb3JtRWxlbWVudCog
SFRNTEZvcm1FbGVtZW50OjpmaW5kQ2xvc2VzdEZvcm1BbmNlc3RvclNsb3dDYXNlKGNvbnN0IEVs
ZW1lbnQmIHN0YXJ0RWxlbWVudCkKIHsKKyAgICBpZiAoVU5MSUtFTFkoaXM8SFRNTEZvcm1FbGVt
ZW50PihzdGFydEVsZW1lbnQpKSkgeworICAgICAgICBhdXRvKiBwYXJlbnRFbGVtZW50ID0gc3Rh
cnRFbGVtZW50LnBhcmVudEVsZW1lbnQoKTsKKyAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50IHx8
ICFwYXJlbnRFbGVtZW50LT5pbmNsdXNpdmVBbmNlc3RvclN0YXRlcygpLmNvbnRhaW5zKEFuY2Vz
dG9yU3RhdGU6OkZvcm0pKSB7CisgICAgICAgICAgICBBU1NFUlQoIWFuY2VzdG9yc09mVHlwZTxI
VE1MRm9ybUVsZW1lbnQ+KHN0YXJ0RWxlbWVudCkuZmlyc3QoKSk7CisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KICAgICByZXR1cm4gY29uc3RfY2FzdDxIVE1M
Rm9ybUVsZW1lbnQqPihhbmNlc3RvcnNPZlR5cGU8SFRNTEZvcm1FbGVtZW50PihzdGFydEVsZW1l
bnQpLmZpcnN0KCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxG
b3JtRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAppbmRl
eCA4MDcyODhmNGFkMGIyMmM2NTA5ZDkwOWIzZGIyZTcyNTA5YTY1YmNhLi4zODMzNzFiNGNlYmQz
OGMxZTc2ZjExNGQ0ZDQwNzI3YmY4OTAxMThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1F
bGVtZW50LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJGb3JtU3RhdGUuaCIKICNpbmNs
dWRlICJGb3JtU3VibWlzc2lvbi5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmFkaW9CdXR0b25Hcm91cHMuaCIKICNpbmNsdWRl
IDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgpAQCAtMTIxLDcgKzEyMiwxNiBA
QCBwdWJsaWM6CiAKICAgICBTdHJpbmdQYWlyVmVjdG9yIHRleHRGaWVsZFZhbHVlcygpIGNvbnN0
OwogCi0gICAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCogZmluZENsb3Nlc3RGb3JtQW5jZXN0b3Io
Y29uc3QgRWxlbWVudCYpOworICAgIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQqIGZpbmRDbG9zZXN0
Rm9ybUFuY2VzdG9yKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCisgICAgeworICAgICAgICBpZiAo
IWVsZW1lbnQuaW5jbHVzaXZlQW5jZXN0b3JTdGF0ZXMoKS5jb250YWlucyhBbmNlc3RvclN0YXRl
OjpGb3JtKSkgeworICAgICAgICAgICAgQVNTRVJUKCFmaW5kQ2xvc2VzdEZvcm1BbmNlc3RvclNs
b3dDYXNlKGVsZW1lbnQpKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9
CisgICAgICAgIGF1dG8qIHJlc3VsdCA9IGZpbmRDbG9zZXN0Rm9ybUFuY2VzdG9yU2xvd0Nhc2Uo
ZWxlbWVudCk7CisgICAgICAgIEFTU0VSVChyZXN1bHQgfHwgZWxlbWVudC50YWdRTmFtZSgpID09
IEhUTUxOYW1lczo6Zm9ybVRhZyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogCiBw
cml2YXRlOgogICAgIEhUTUxGb3JtRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQmKTsKQEAgLTE2Niw2ICsxNzYsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCByZXNldEFzc29j
aWF0ZWRGb3JtQ29udHJvbEVsZW1lbnRzKCk7CiAKKyAgICBzdGF0aWMgSFRNTEZvcm1FbGVtZW50
KiBmaW5kQ2xvc2VzdEZvcm1BbmNlc3RvclNsb3dDYXNlKGNvbnN0IEVsZW1lbnQmKTsKKwogICAg
IEZvcm1TdWJtaXNzaW9uOjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICBIYXNoTWFwPEF0
b21TdHJpbmcsIFdlYWtQdHI8SFRNTEVsZW1lbnQ+PiBtX3Bhc3ROYW1lc01hcDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKaW5kZXggZDAzMGFmZDUxYjhiNTU1ZjQ5
OTU3Mzg4MTQwMDRjNDNlMmU2YzBmMS4uYmE3ZmM1OTRiOTI4NTQ2NzRmOTg4MTMwOGE1ZmMxY2Mx
ZWQ2NzgyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCkBAIC0z
NjgsNiArMzY4LDEwIEBAIE5vZGU6Okluc2VydGVkSW50b0FuY2VzdG9yUmVzdWx0IEhUTUxJbWFn
ZUVsZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9yKEluc2VydGlvCiAgICAgICAgIG1fZm9ybSA9
IG51bGxwdHI7CiAgICAgfQogCisgICAgLy8gSW5zZXJ0IG5lZWRzIHRvIGNvbXBsZXRlIGZpcnN0
LCBiZWZvcmUgd2Ugc3RhcnQgdXBkYXRpbmcgdGhlIGxvYWRlci4gTG9hZGVyIGRpc3BhdGNoZXMg
ZXZlbnRzIHdoaWNoIGNvdWxkIHJlc3VsdAorICAgIC8vIGluIGNhbGxiYWNrcyBiYWNrIHRvIHRo
aXMgbm9kZS4KKyAgICBOb2RlOjpJbnNlcnRlZEludG9BbmNlc3RvclJlc3VsdCBpbnNlcnROb3Rp
ZmljYXRpb25SZXF1ZXN0ID0gSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9yKGluc2Vy
dGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKKwogICAgIGlmICghbV9mb3JtKSB7CiAg
ICAgICAgIGlmIChhdXRvKiBuZXdGb3JtID0gSFRNTEZvcm1FbGVtZW50OjpmaW5kQ2xvc2VzdEZv
cm1BbmNlc3RvcigqdGhpcykpIHsKICAgICAgICAgICAgIG1fZm9ybSA9IG1ha2VXZWFrUHRyKG5l
d0Zvcm0pOwpAQCAtMzc1LDEwICszNzksNiBAQCBOb2RlOjpJbnNlcnRlZEludG9BbmNlc3RvclJl
c3VsdCBIVE1MSW1hZ2VFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3RvcihJbnNlcnRpbwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgLy8gSW5zZXJ0IG5lZWRzIHRvIGNvbXBsZXRlIGZpcnN0LCBi
ZWZvcmUgd2Ugc3RhcnQgdXBkYXRpbmcgdGhlIGxvYWRlci4gTG9hZGVyIGRpc3BhdGNoZXMgZXZl
bnRzIHdoaWNoIGNvdWxkIHJlc3VsdAotICAgIC8vIGluIGNhbGxiYWNrcyBiYWNrIHRvIHRoaXMg
bm9kZS4KLSAgICBOb2RlOjpJbnNlcnRlZEludG9BbmNlc3RvclJlc3VsdCBpbnNlcnROb3RpZmlj
YXRpb25SZXF1ZXN0ID0gSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9yKGluc2VydGlv
blR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKLQogICAgIGlmIChpbnNlcnRpb25UeXBlLnRy
ZWVTY29wZUNoYW5nZWQgJiYgIW1fcGFyc2VkVXNlbWFwLmlzTnVsbCgpKQogICAgICAgICB0cmVl
U2NvcGUoKS5hZGRJbWFnZUVsZW1lbnRCeVVzZW1hcCgqbV9wYXJzZWRVc2VtYXAuaW1wbCgpLCAq
dGhpcyk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421508</attachid>
            <date>2021-02-25 00:18:33 -0800</date>
            <delta_ts>2021-02-25 00:49:34 -0800</delta_ts>
            <desc>Updated for trunk</desc>
            <filename>bug-222159-20210225001832.patch</filename>
            <type>text/plain</type>
            <size>27536</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MzQ3NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDIxLTAyLTI0ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEF2b2lkIHRyZWUgdHJhdmVyc2Fs
cyB0byBsb29rIGZvciBmb3JtIGFuZCBjYW52YXMgZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjE1OQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNzQ2ODAyNjU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGZhc3QgcGF0aCBmb3IgY2hlY2tpbmcgaWYg
YW4gZWxlbWVudCBoYXMgYSBjYW52YXMgb3IgYSBmb3JtIGFzIGFuIGFuY2VzdG9yCisgICAgICAg
IHVzaW5nIG5ldyBub2RlIGZsYWdzLCBJbmNsdXNpdmVBbmNlc3RvclN0YXRlRm9yRm9ybSBhbmQg
SW5jbHVzaXZlQW5jZXN0b3JTdGF0ZUZvckNhbnZhcy4KKyAgICAgICAgV2UgdXBkYXRlIHRoZXNl
IGZsYWdzIGluIEVsZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9yIGFuZCBFbGVtZW50OjpyZW1v
dmVkRnJvbUFuY2VzdG9yIGJhc2VkIG9uCisgICAgICAgIHRoZSBzYW1lIG5vZGUgZmxhZ3Mgc2V0
IG9uIGl0cyBuZXcgcGFyZW50IChjbGVhciBpZiB0aGVyZSBpcyBubyBwYXJlbnQpLgorCisgICAg
ICAgIEhUTUxGb3JtRWxlbWVudCBhbmQgSFRNTENhbnZhc0VsZW1lbnQgYWx3YXlzIGFkZCB0aGVp
ciByZXNwZWN0aXZlIGZsYWcgKGJ1dCBuZXZlciBjbGVhciBvdGhlcnMpCisgICAgICAgIGluc2lk
ZSB0aGVpciBjb25zdHJ1Y3RvcnMgYW5kIGFmdGVyIGNhbGxpbmcgRWxlbWVudCdzIGluc2VydGVk
SW50b0FuY2VzdG9yIGFuZCByZW1vdmVkRnJvbUFuY2VzdG9yLgorICAgICAgICBCZWNhdXNlIG5v
dGlmeUNoaWxkTm9kZUluc2VydGVkIGFuZCBub3RpZnlDaGlsZE5vZGVSZW1vdmVkIHRyYXZlcnNl
IHRoZSBuZXdseSBpbnNlcnRlZCBvciBuZXdseQorICAgICAgICByZW1vdmVkIG5vZGVzIGluIHRy
ZWUgb3JkZXIsIGFsbCBpdHMgZGVzY2VuZGFudHMgd2lsbCBjYXJyeSBvdmVyIHRoZSBmbGFnLgor
CisgICAgICAgIEZvciBjb252ZW5pZW5jZSBhbmQgY29kZSByZWFkYWJpbGl0eSwgd2UgdXNlIE9w
dGlvblNldDxOb2RlOjpBbmNlc3RvclN0YXRlPiB0byByZXByZXNlbnQKKyAgICAgICAgdGhlIG5v
ZGUgdHJlZSBhbmNlc3Rvcnkgc3RhdGUgb2YgdGhlc2UgZWxlbWVudHMuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIHNpbmNlIHRoZXJlIHNob3VsZCBiZSBubyBiZWhhdmlvcmFsIGRpZmZlcmVuY2Vz
LgorCisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Om5vdGlmeU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpub3Rp
ZnlDaGlsZE5vZGVJbnNlcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlOb2RlUmVtb3Zl
ZEZyb21Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlOb2RlUmVtb3ZlZEZyb21U
cmVlKToKKyAgICAgICAgKFdlYkNvcmU6Om5vdGlmeUNoaWxkTm9kZVJlbW92ZWQpOgorICAgICAg
ICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmlzRm9jdXNh
YmxlIGNvbnN0KTogT3B0aW1pemVkIHRoaXMgZnVuY3Rpb24gYnkgYXZvaWRpbmcgdGhlIGFuY2Vz
dG9yIHRyZWUgd2FsaworICAgICAgICB3aGVuIGluY2x1c2l2ZUFuY2VzdG9yU3RhdGVzKCkgZG9l
cyBub3QgY29udGFpbiBBbmNlc3RvclN0YXRlOjpDYW52YXMuCisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50OjppbnNlcnRlZEludG9BbmNlc3Rvcik6IENsZWFyIG9yIHNldCBuZXcgbm9kZSBmbGFn
cyBiYXNlZCBvbiB0aGUgYW5jZXN0b3Igc3RhdGVzLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dDo6cmVtb3ZlZEZyb21BbmNlc3Rvcik6IERpdHRvLgorICAgICAgICAqIGRvbS9Ob2RlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpkZWxlZ2F0ZXNGb2N1c1RvU2hhZG93Um9vdCBjb25zdCk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c2V0RGVsZWdhdGVzRm9jdXNUb1NoYWRv
d1Jvb3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmluY2x1c2l2ZUFuY2VzdG9y
U3RhdGVzIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXRJbmNsdXNp
dmVBbmNlc3RvclN0YXRlcyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6YWRkSW5j
bHVzaXZlQW5jZXN0b3JTdGF0ZSk6IEFkZGVkLiBVc2VkIGJ5IEhUTUxDYW52YXNFbGVtZW50IGFu
ZCBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgdG8gc2V0IHRoZSByZXNwZWN0aXZlIG5vZGUgZmxh
Z3MuCisgICAgICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZSBjb25zdCk6IEFkZGVk
IHRoZSBzYW1lIG9wdGltaXphdGlvbiBhcyBFbGVtZW50LgorICAgICAgICAqIGh0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OkhU
TUxDYW52YXNFbGVtZW50KTogU2V0IEluY2x1c2l2ZUFuY2VzdG9yU3RhdGVGb3JDYW52YXMuCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3Ip
OiBEaXR0by4gTm90ZSB0aGF0IHdlIG11c3QgZG8gdGhpcyBhZnRlciBjYWxsaW5nCisgICAgICAg
IEVsZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9yIGFzIGl0IGNhbiB1bnNldCB0aGlzIGZsYWcg
KHRoaXMgaXMgdGhlIHBvaW50IG9mIHRoaXMgY29kZSkuCisgICAgICAgIEFsc28gbm90ZSB0aGF0
IEVsZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9yIHdpbGwgYWx3YXlzIHJldHVybiBJbnNlcnRl
ZEludG9BbmNlc3RvclJlc3VsdDo6RG9uZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKTogRGl0dG8gZm9yIHJlbW92YWwuCisgICAgICAg
ICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1F
bGVtZW50OjpIVE1MRm9ybUVsZW1lbnQpOiBEaXR0byBmb3IgSW5jbHVzaXZlQW5jZXN0b3JTdGF0
ZUZvckZvcm0uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6Omluc2VydGVkSW50
b0FuY2VzdG9yKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnJl
bW92ZWRGcm9tQW5jZXN0b3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxl
bWVudDo6ZmluZENsb3Nlc3RGb3JtQW5jZXN0b3JTbG93Q2FzZSk6IFJlbmFtZWQgZnJvbSBmaW5k
Q2xvc2VzdEZvcm1BbmNlc3Rvci4KKyAgICAgICAgT3B0aW1pemVkIHRoaXMgZnVuY3Rpb24gYSBi
aXQgYnkgYXZvaWRpbmcgdGhlIHRyZWUgd2FsayB3aGVuIHRoZSBzdGFydGluZyBlbGVtZW50IGl0
c2VsZiBpcyBhIGZvcm0KKyAgICAgICAgc2luY2UgSW5jbHVzaXZlQW5jZXN0b3JTdGF0ZUZvckZv
cm0gaXMgYWx3YXlzIHNldCBvbiB0aGUgZWxlbWVudCBpbiB0aGF0IGNhc2UuCisgICAgICAgICog
aHRtbC9IVE1MRm9ybUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVu
dDo6ZmluZENsb3Nlc3RGb3JtQW5jZXN0b3IpOiBBZGRlZCB0aGUgb3B0aW1pemVkIHZlcnNpb24g
aW5saW5lZCBoZXJlLgorICAgICAgICBJdCBleGl0cyBlYXJseSB3aXRoIG51bGxwdHIgaWYgSW5j
bHVzaXZlQW5jZXN0b3JTdGF0ZUZvckZvcm0gaXMgbm90IHNldC4KKyAgICAgICAgKiBodG1sL0hU
TUxJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvQW5jZXN0b3IpOiBDYWxsIEVsZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9y
IGJlZm9yZSBjYWxsaW5nCisgICAgICAgIGZpbmRDbG9zZXN0Rm9ybUFuY2VzdG9yIHRvIGZpbmQg
dGhlIGZvcm0gZWxlbWVudCB0byBhc3NvY2lhdGUgdGhpcyBpbWFnZSBlbGVtZW50IHdpdGggYXMg
aXQgbm93CisgICAgICAgIHJlbGllcyBvbiBJbmNsdXNpdmVBbmNlc3RvclN0YXRlRm9yRm9ybSBm
bGFnIHdoaWNoIGlzIHVwZGF0ZWQgaW4gRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3IuCisK
IDIwMjEtMDItMjQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
T3B0aW1pemUgdGhlIGNvZGUgdG8gY2hlY2sgaWYgYW4gZWxlbWVudCBkZWxlZ2F0ZXMgZm9jdXMg
dG8gaXRzIHNoYWRvdyByb290IG9yIG5vdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGVBbGdvcml0aG1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
Q29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCShyZXZpc2lvbiAyNzM0NzYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MSwxOSArNDEsMjAgQEAgQ29udGFpbmVyQ2hpbGRSZW1vdmFsU2NvcGUqIENvbnRhaW5lckNo
aQogCiBlbnVtIGNsYXNzIFRyZWVTY29wZUNoYW5nZSB7IENoYW5nZWQsIERpZE5vdENoYW5nZSB9
OwogCi1zdGF0aWMgdm9pZCBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQoQ29udGFpbmVy
Tm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUsIE5vZGUmIG5vZGUsIFRyZWVTY29wZUNoYW5nZSB0
cmVlU2NvcGVDaGFuZ2UsIE5vZGVWZWN0b3ImIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJn
ZXRzKQorc3RhdGljIHZvaWQgbm90aWZ5Tm9kZUluc2VydGVkSW50b0RvY3VtZW50KENvbnRhaW5l
ck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlLCBOb2RlJiBub2RlLCBUcmVlU2NvcGVDaGFuZ2Ug
dHJlZVNjb3BlQ2hhbmdlLCBPcHRpb25TZXQ8Tm9kZTo6QW5jZXN0b3JTdGF0ZT4gYW5jZXN0b3JT
dGF0ZXMsIE5vZGVWZWN0b3ImIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKQogewog
ICAgIEFTU0VSVChwYXJlbnRPZkluc2VydGVkVHJlZS5pc0Nvbm5lY3RlZCgpKTsKICAgICBBU1NF
UlQoIW5vZGUuaXNDb25uZWN0ZWQoKSk7Ci0gICAgaWYgKG5vZGUuaW5zZXJ0ZWRJbnRvQW5jZXN0
b3IoTm9kZTo6SW5zZXJ0aW9uVHlwZSB7IC8qIGNvbm5lY3RlZFRvRG9jdW1lbnQgKi8gdHJ1ZSwg
dHJlZVNjb3BlQ2hhbmdlID09IFRyZWVTY29wZUNoYW5nZTo6Q2hhbmdlZCB9LCBwYXJlbnRPZklu
c2VydGVkVHJlZSkgPT0gTm9kZTo6SW5zZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1bHQ6Ok5lZWRzUG9z
dEluc2VydGlvbkNhbGxiYWNrKQorICAgIGlmIChub2RlLmluc2VydGVkSW50b0FuY2VzdG9yKE5v
ZGU6Okluc2VydGlvblR5cGUgeyAvKiBjb25uZWN0ZWRUb0RvY3VtZW50ICovIHRydWUsIHRyZWVT
Y29wZUNoYW5nZSA9PSBUcmVlU2NvcGVDaGFuZ2U6OkNoYW5nZWQsIGFuY2VzdG9yU3RhdGVzIH0s
IHBhcmVudE9mSW5zZXJ0ZWRUcmVlKSA9PSBOb2RlOjpJbnNlcnRlZEludG9BbmNlc3RvclJlc3Vs
dDo6TmVlZHNQb3N0SW5zZXJ0aW9uQ2FsbGJhY2spCiAgICAgICAgIHBvc3RJbnNlcnRpb25Ob3Rp
ZmljYXRpb25UYXJnZXRzLmFwcGVuZChub2RlKTsKIAogICAgIGlmICghaXM8Q29udGFpbmVyTm9k
ZT4obm9kZSkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8gYW5jZXN0b3JTdGF0ZXNPZkNo
aWxkTm9kZXMgPSBub2RlLmluY2x1c2l2ZUFuY2VzdG9yU3RhdGVzKCk7CiAgICAgZm9yIChSZWZQ
dHI8Tm9kZT4gY2hpbGQgPSBkb3duY2FzdDxDb250YWluZXJOb2RlPihub2RlKS5maXJzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5pc0Nvbm5lY3RlZCgpICYm
IGNoaWxkLT5wYXJlbnROb2RlKCkgPT0gJm5vZGUpOwotICAgICAgICBub3RpZnlOb2RlSW5zZXJ0
ZWRJbnRvRG9jdW1lbnQocGFyZW50T2ZJbnNlcnRlZFRyZWUsICpjaGlsZCwgdHJlZVNjb3BlQ2hh
bmdlLCBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyk7CisgICAgICAgIG5vdGlmeU5v
ZGVJbnNlcnRlZEludG9Eb2N1bWVudChwYXJlbnRPZkluc2VydGVkVHJlZSwgKmNoaWxkLCB0cmVl
U2NvcGVDaGFuZ2UsIGFuY2VzdG9yU3RhdGVzT2ZDaGlsZE5vZGVzLCBwb3N0SW5zZXJ0aW9uTm90
aWZpY2F0aW9uVGFyZ2V0cyk7CiAgICAgfQogCiAgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkK
QEAgLTYxLDI5ICs2MiwzMCBAQCBzdGF0aWMgdm9pZCBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9j
dW1lCiAKICAgICBpZiAoUmVmUHRyPFNoYWRvd1Jvb3Q+IHJvb3QgPSBkb3duY2FzdDxFbGVtZW50
Pihub2RlKS5zaGFkb3dSb290KCkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihub2RlLmlzQ29ubmVjdGVkKCkgJiYgcm9vdC0+aG9zdCgpID09ICZu
b2RlKTsKLSAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b0RvY3VtZW50KHBhcmVudE9mSW5z
ZXJ0ZWRUcmVlLCAqcm9vdCwgVHJlZVNjb3BlQ2hhbmdlOjpEaWROb3RDaGFuZ2UsIHBvc3RJbnNl
cnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKKyAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50
b0RvY3VtZW50KHBhcmVudE9mSW5zZXJ0ZWRUcmVlLCAqcm9vdCwgVHJlZVNjb3BlQ2hhbmdlOjpE
aWROb3RDaGFuZ2UsIHsgfSwgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOwogICAg
IH0KIH0KIAotc3RhdGljIHZvaWQgbm90aWZ5Tm9kZUluc2VydGVkSW50b1RyZWUoQ29udGFpbmVy
Tm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUsIE5vZGUmIG5vZGUsIFRyZWVTY29wZUNoYW5nZSB0
cmVlU2NvcGVDaGFuZ2UsIE5vZGVWZWN0b3ImIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJn
ZXRzKQorc3RhdGljIHZvaWQgbm90aWZ5Tm9kZUluc2VydGVkSW50b1RyZWUoQ29udGFpbmVyTm9k
ZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUsIE5vZGUmIG5vZGUsIFRyZWVTY29wZUNoYW5nZSB0cmVl
U2NvcGVDaGFuZ2UsIE9wdGlvblNldDxOb2RlOjpBbmNlc3RvclN0YXRlPiBhbmNlc3RvclN0YXRl
cywgTm9kZVZlY3RvciYgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpCiB7CiAgICAg
QVNTRVJUKCFwYXJlbnRPZkluc2VydGVkVHJlZS5pc0Nvbm5lY3RlZCgpKTsKICAgICBBU1NFUlQo
IW5vZGUuaXNDb25uZWN0ZWQoKSk7CiAKLSAgICBpZiAobm9kZS5pbnNlcnRlZEludG9BbmNlc3Rv
cihOb2RlOjpJbnNlcnRpb25UeXBlIHsgLyogY29ubmVjdGVkVG9Eb2N1bWVudCAqLyBmYWxzZSwg
dHJlZVNjb3BlQ2hhbmdlID09IFRyZWVTY29wZUNoYW5nZTo6Q2hhbmdlZCB9LCBwYXJlbnRPZklu
c2VydGVkVHJlZSkgPT0gTm9kZTo6SW5zZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1bHQ6Ok5lZWRzUG9z
dEluc2VydGlvbkNhbGxiYWNrKQorICAgIGlmIChub2RlLmluc2VydGVkSW50b0FuY2VzdG9yKE5v
ZGU6Okluc2VydGlvblR5cGUgeyAvKiBjb25uZWN0ZWRUb0RvY3VtZW50ICovIGZhbHNlLCB0cmVl
U2NvcGVDaGFuZ2UgPT0gVHJlZVNjb3BlQ2hhbmdlOjpDaGFuZ2VkLCBhbmNlc3RvclN0YXRlcyB9
LCBwYXJlbnRPZkluc2VydGVkVHJlZSkgPT0gTm9kZTo6SW5zZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1
bHQ6Ok5lZWRzUG9zdEluc2VydGlvbkNhbGxiYWNrKQogICAgICAgICBwb3N0SW5zZXJ0aW9uTm90
aWZpY2F0aW9uVGFyZ2V0cy5hcHBlbmQobm9kZSk7CiAKICAgICBpZiAoIWlzPENvbnRhaW5lck5v
ZGU+KG5vZGUpKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvIGFuY2VzdG9yU3RhdGVzT2ZD
aGlsZE5vZGVzID0gbm9kZS5pbmNsdXNpdmVBbmNlc3RvclN0YXRlcygpOwogICAgIGZvciAoUmVm
UHRyPE5vZGU+IGNoaWxkID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4obm9kZSkuZmlyc3RDaGls
ZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgbm90aWZ5
Tm9kZUluc2VydGVkSW50b1RyZWUocGFyZW50T2ZJbnNlcnRlZFRyZWUsICpjaGlsZCwgdHJlZVNj
b3BlQ2hhbmdlLCBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyk7CisgICAgICAgIG5v
dGlmeU5vZGVJbnNlcnRlZEludG9UcmVlKHBhcmVudE9mSW5zZXJ0ZWRUcmVlLCAqY2hpbGQsIHRy
ZWVTY29wZUNoYW5nZSwgYW5jZXN0b3JTdGF0ZXNPZkNoaWxkTm9kZXMsIHBvc3RJbnNlcnRpb25O
b3RpZmljYXRpb25UYXJnZXRzKTsKIAogICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChSZWZQdHI8U2hhZG93Um9vdD4gcm9vdCA9IGRvd25jYXN0
PEVsZW1lbnQ+KG5vZGUpLnNoYWRvd1Jvb3QoKSkKLSAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVk
SW50b1RyZWUocGFyZW50T2ZJbnNlcnRlZFRyZWUsICpyb290LCBUcmVlU2NvcGVDaGFuZ2U6OkRp
ZE5vdENoYW5nZSwgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOworICAgICAgICBu
b3RpZnlOb2RlSW5zZXJ0ZWRJbnRvVHJlZShwYXJlbnRPZkluc2VydGVkVHJlZSwgKnJvb3QsIFRy
ZWVTY29wZUNoYW5nZTo6RGlkTm90Q2hhbmdlLCB7IH0sIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRp
b25UYXJnZXRzKTsKIH0KIAogTm9kZVZlY3RvciBub3RpZnlDaGlsZE5vZGVJbnNlcnRlZChDb250
YWluZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSwgTm9kZSYgbm9kZSkKQEAgLTEwMCw5ICsx
MDIsOSBAQCBOb2RlVmVjdG9yIG5vdGlmeUNoaWxkTm9kZUluc2VydGVkKENvbnRhCiAgICAgLy8g
VHJlZSBzY29wZSBoYXMgY2hhbmdlZCBpZiB0aGUgY29udGFpbmVyIG5vZGUgaW50byB3aGljaCAi
bm9kZSIgaXMgaW5zZXJ0ZWQgaXMgaW4gYSBkb2N1bWVudCBvciBhIHNoYWRvdyByb290LgogICAg
IGF1dG8gdHJlZVNjb3BlQ2hhbmdlID0gcGFyZW50T2ZJbnNlcnRlZFRyZWUuaXNJblRyZWVTY29w
ZSgpID8gVHJlZVNjb3BlQ2hhbmdlOjpDaGFuZ2VkIDogVHJlZVNjb3BlQ2hhbmdlOjpEaWROb3RD
aGFuZ2U7CiAgICAgaWYgKHBhcmVudE9mSW5zZXJ0ZWRUcmVlLmlzQ29ubmVjdGVkKCkpCi0gICAg
ICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudChwYXJlbnRPZkluc2VydGVkVHJlZSwg
bm9kZSwgdHJlZVNjb3BlQ2hhbmdlLCBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyk7
CisgICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudChwYXJlbnRPZkluc2VydGVk
VHJlZSwgbm9kZSwgdHJlZVNjb3BlQ2hhbmdlLCBwYXJlbnRPZkluc2VydGVkVHJlZS5pbmNsdXNp
dmVBbmNlc3RvclN0YXRlcygpLCBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyk7CiAg
ICAgZWxzZQotICAgICAgICBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvVHJlZShwYXJlbnRPZkluc2Vy
dGVkVHJlZSwgbm9kZSwgdHJlZVNjb3BlQ2hhbmdlLCBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9u
VGFyZ2V0cyk7CisgICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9UcmVlKHBhcmVudE9mSW5z
ZXJ0ZWRUcmVlLCBub2RlLCB0cmVlU2NvcGVDaGFuZ2UsIHBhcmVudE9mSW5zZXJ0ZWRUcmVlLmlu
Y2x1c2l2ZUFuY2VzdG9yU3RhdGVzKCksIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRz
KTsKIAogICAgIHJldHVybiBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0czsKIH0KQEAg
LTExOSwxOSArMTIxLDIwIEBAIGlubGluZSB2b2lkIHVwZGF0ZU9ic2VydmFiaWxpdHkoUmVtb3Zl
ZFMKICAgICAgICAgY3VycmVudE9ic2VydmFiaWxpdHkgPSBuZXdTdGF0dXM7CiB9CiAKLXN0YXRp
YyBSZW1vdmVkU3VidHJlZU9ic2VydmFiaWxpdHkgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1l
bnQoQ29udGFpbmVyTm9kZSYgb2xkUGFyZW50T2ZSZW1vdmVkVHJlZSwgVHJlZVNjb3BlQ2hhbmdl
IHRyZWVTY29wZUNoYW5nZSwgTm9kZSYgbm9kZSkKK3N0YXRpYyBSZW1vdmVkU3VidHJlZU9ic2Vy
dmFiaWxpdHkgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQoQ29udGFpbmVyTm9kZSYgb2xk
UGFyZW50T2ZSZW1vdmVkVHJlZSwgVHJlZVNjb3BlQ2hhbmdlIHRyZWVTY29wZUNoYW5nZSwgT3B0
aW9uU2V0PE5vZGU6OkFuY2VzdG9yU3RhdGU+IGFuY2VzdG9yU3RhdGVzLCBOb2RlJiBub2RlKQog
ewogICAgIEFTU0VSVChvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLmlzQ29ubmVjdGVkKCkpOwogICAg
IEFTU0VSVChub2RlLmlzQ29ubmVjdGVkKCkpOwotICAgIG5vZGUucmVtb3ZlZEZyb21BbmNlc3Rv
cihOb2RlOjpSZW1vdmFsVHlwZSB7IC8qIGRpc2Nvbm5lY3RlZEZyb21Eb2N1bWVudCAqLyB0cnVl
LCB0cmVlU2NvcGVDaGFuZ2UgPT0gVHJlZVNjb3BlQ2hhbmdlOjpDaGFuZ2VkIH0sIG9sZFBhcmVu
dE9mUmVtb3ZlZFRyZWUpOworICAgIG5vZGUucmVtb3ZlZEZyb21BbmNlc3RvcihOb2RlOjpSZW1v
dmFsVHlwZSB7IC8qIGRpc2Nvbm5lY3RlZEZyb21Eb2N1bWVudCAqLyB0cnVlLCB0cmVlU2NvcGVD
aGFuZ2UgPT0gVHJlZVNjb3BlQ2hhbmdlOjpDaGFuZ2VkLCBhbmNlc3RvclN0YXRlcyB9LCBvbGRQ
YXJlbnRPZlJlbW92ZWRUcmVlKTsKIAogICAgIGF1dG8gb2JzZXJ2YWJpbGl0eSA9IG9ic2VydmFi
aWxpdHlPZlJlbW92ZWROb2RlKG5vZGUpOwogICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4obm9k
ZSkpCiAgICAgICAgIHJldHVybiBvYnNlcnZhYmlsaXR5OwogCisgICAgYXV0byBhbmNlc3RvclN0
YXRlc09mQ2hpbGROb2RlcyA9IG5vZGUuaW5jbHVzaXZlQW5jZXN0b3JTdGF0ZXMoKTsKICAgICBm
b3IgKFJlZlB0cjxOb2RlPiBjaGlsZCA9IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KG5vZGUpLmZp
cnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbm9kZS5pc0Nvbm5l
Y3RlZCgpICYmIGNoaWxkLT5wYXJlbnROb2RlKCkgPT0gJm5vZGUpOwotICAgICAgICB1cGRhdGVP
YnNlcnZhYmlsaXR5KG9ic2VydmFiaWxpdHksIG5vdGlmeU5vZGVSZW1vdmVkRnJvbURvY3VtZW50
KG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUsIHRyZWVTY29wZUNoYW5nZSwgKmNoaWxkLmdldCgpKSk7
CisgICAgICAgIHVwZGF0ZU9ic2VydmFiaWxpdHkob2JzZXJ2YWJpbGl0eSwgbm90aWZ5Tm9kZVJl
bW92ZWRGcm9tRG9jdW1lbnQob2xkUGFyZW50T2ZSZW1vdmVkVHJlZSwgdHJlZVNjb3BlQ2hhbmdl
LCBhbmNlc3RvclN0YXRlc09mQ2hpbGROb2RlcywgKmNoaWxkLmdldCgpKSk7CiAgICAgfQogCiAg
ICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKQEAgLTEzOSwyOSArMTQyLDMwIEBAIHN0YXRpYyBS
ZW1vdmVkU3VidHJlZU9ic2VydmFiaWxpdHkgbm90aWYKIAogICAgIGlmIChSZWZQdHI8U2hhZG93
Um9vdD4gcm9vdCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLnNoYWRvd1Jvb3QoKSkgewogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFub2RlLmlzQ29u
bmVjdGVkKCkgJiYgcm9vdC0+aG9zdCgpID09ICZub2RlKTsKLSAgICAgICAgdXBkYXRlT2JzZXJ2
YWJpbGl0eShvYnNlcnZhYmlsaXR5LCBub3RpZnlOb2RlUmVtb3ZlZEZyb21Eb2N1bWVudChvbGRQ
YXJlbnRPZlJlbW92ZWRUcmVlLCBUcmVlU2NvcGVDaGFuZ2U6OkRpZE5vdENoYW5nZSwgKnJvb3Qu
Z2V0KCkpKTsKKyAgICAgICAgdXBkYXRlT2JzZXJ2YWJpbGl0eShvYnNlcnZhYmlsaXR5LCBub3Rp
ZnlOb2RlUmVtb3ZlZEZyb21Eb2N1bWVudChvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLCBUcmVlU2Nv
cGVDaGFuZ2U6OkRpZE5vdENoYW5nZSwgeyB9LCAqcm9vdC5nZXQoKSkpOwogICAgIH0KICAgICBy
ZXR1cm4gb2JzZXJ2YWJpbGl0eTsKIH0KIAotc3RhdGljIFJlbW92ZWRTdWJ0cmVlT2JzZXJ2YWJp
bGl0eSBub3RpZnlOb2RlUmVtb3ZlZEZyb21UcmVlKENvbnRhaW5lck5vZGUmIG9sZFBhcmVudE9m
UmVtb3ZlZFRyZWUsIFRyZWVTY29wZUNoYW5nZSB0cmVlU2NvcGVDaGFuZ2UsIE5vZGUmIG5vZGUp
CitzdGF0aWMgUmVtb3ZlZFN1YnRyZWVPYnNlcnZhYmlsaXR5IG5vdGlmeU5vZGVSZW1vdmVkRnJv
bVRyZWUoQ29udGFpbmVyTm9kZSYgb2xkUGFyZW50T2ZSZW1vdmVkVHJlZSwgVHJlZVNjb3BlQ2hh
bmdlIHRyZWVTY29wZUNoYW5nZSwgT3B0aW9uU2V0PE5vZGU6OkFuY2VzdG9yU3RhdGU+IGFuY2Vz
dG9yU3RhdGVzLCBOb2RlJiBub2RlKQogewogICAgIEFTU0VSVCghb2xkUGFyZW50T2ZSZW1vdmVk
VHJlZS5pc0Nvbm5lY3RlZCgpKTsKIAotICAgIG5vZGUucmVtb3ZlZEZyb21BbmNlc3RvcihOb2Rl
OjpSZW1vdmFsVHlwZSB7IC8qIGRpc2Nvbm5lY3RlZEZyb21Eb2N1bWVudCAqLyBmYWxzZSwgdHJl
ZVNjb3BlQ2hhbmdlID09IFRyZWVTY29wZUNoYW5nZTo6Q2hhbmdlZCB9LCBvbGRQYXJlbnRPZlJl
bW92ZWRUcmVlKTsKKyAgICBub2RlLnJlbW92ZWRGcm9tQW5jZXN0b3IoTm9kZTo6UmVtb3ZhbFR5
cGUgeyAvKiBkaXNjb25uZWN0ZWRGcm9tRG9jdW1lbnQgKi8gZmFsc2UsIHRyZWVTY29wZUNoYW5n
ZSA9PSBUcmVlU2NvcGVDaGFuZ2U6OkNoYW5nZWQsIGFuY2VzdG9yU3RhdGVzIH0sIG9sZFBhcmVu
dE9mUmVtb3ZlZFRyZWUpOwogCiAgICAgYXV0byBvYnNlcnZhYmlsaXR5ID0gb2JzZXJ2YWJpbGl0
eU9mUmVtb3ZlZE5vZGUobm9kZSk7CiAgICAgaWYgKCFpczxDb250YWluZXJOb2RlPihub2RlKSkK
ICAgICAgICAgcmV0dXJuIG9ic2VydmFiaWxpdHk7CiAKKyAgICBhdXRvIGFuY2VzdG9yU3RhdGVz
T2ZDaGlsZE5vZGVzID0gbm9kZS5pbmNsdXNpdmVBbmNlc3RvclN0YXRlcygpOwogICAgIGZvciAo
UmVmUHRyPE5vZGU+IGNoaWxkID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4obm9kZSkuZmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgdXBk
YXRlT2JzZXJ2YWJpbGl0eShvYnNlcnZhYmlsaXR5LCBub3RpZnlOb2RlUmVtb3ZlZEZyb21UcmVl
KG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUsIHRyZWVTY29wZUNoYW5nZSwgKmNoaWxkKSk7CisgICAg
ICAgIHVwZGF0ZU9ic2VydmFiaWxpdHkob2JzZXJ2YWJpbGl0eSwgbm90aWZ5Tm9kZVJlbW92ZWRG
cm9tVHJlZShvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLCB0cmVlU2NvcGVDaGFuZ2UsIGFuY2VzdG9y
U3RhdGVzT2ZDaGlsZE5vZGVzLCAqY2hpbGQpKTsKIAogICAgIGlmICghaXM8RWxlbWVudD4obm9k
ZSkpCiAgICAgICAgIHJldHVybiBvYnNlcnZhYmlsaXR5OwogCiAgICAgaWYgKFJlZlB0cjxTaGFk
b3dSb290PiByb290ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkuc2hhZG93Um9vdCgpKQotICAg
ICAgICB1cGRhdGVPYnNlcnZhYmlsaXR5KG9ic2VydmFiaWxpdHksIG5vdGlmeU5vZGVSZW1vdmVk
RnJvbVRyZWUob2xkUGFyZW50T2ZSZW1vdmVkVHJlZSwgVHJlZVNjb3BlQ2hhbmdlOjpEaWROb3RD
aGFuZ2UsICpyb290KSk7CisgICAgICAgIHVwZGF0ZU9ic2VydmFiaWxpdHkob2JzZXJ2YWJpbGl0
eSwgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tVHJlZShvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLCBUcmVl
U2NvcGVDaGFuZ2U6OkRpZE5vdENoYW5nZSwgeyB9LCAqcm9vdCkpOwogCiAgICAgcmV0dXJuIG9i
c2VydmFiaWxpdHk7CiB9CkBAIC0xNzUsOCArMTc5LDggQEAgUmVtb3ZlZFN1YnRyZWVPYnNlcnZh
YmlsaXR5IG5vdGlmeUNoaWxkTgogICAgIC8vIFRyZWUgc2NvcGUgaGFzIGNoYW5nZWQgaWYgdGhl
IGNvbnRhaW5lciBub2RlIGZyb20gd2hpY2ggIm5vZGUiIGlzIHJlbW92ZWQgaXMgaW4gYSBkb2N1
bWVudCBvciBhIHNoYWRvdyByb290LgogICAgIGF1dG8gdHJlZVNjb3BlQ2hhbmdlID0gb2xkUGFy
ZW50T2ZSZW1vdmVkVHJlZS5pc0luVHJlZVNjb3BlKCkgPyBUcmVlU2NvcGVDaGFuZ2U6OkNoYW5n
ZWQgOiBUcmVlU2NvcGVDaGFuZ2U6OkRpZE5vdENoYW5nZTsKICAgICBpZiAoY2hpbGQuaXNDb25u
ZWN0ZWQoKSkKLSAgICAgICAgcmV0dXJuIG5vdGlmeU5vZGVSZW1vdmVkRnJvbURvY3VtZW50KG9s
ZFBhcmVudE9mUmVtb3ZlZFRyZWUsIHRyZWVTY29wZUNoYW5nZSwgY2hpbGQpOwotICAgIHJldHVy
biBub3RpZnlOb2RlUmVtb3ZlZEZyb21UcmVlKG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUsIHRyZWVT
Y29wZUNoYW5nZSwgY2hpbGQpOworICAgICAgICByZXR1cm4gbm90aWZ5Tm9kZVJlbW92ZWRGcm9t
RG9jdW1lbnQob2xkUGFyZW50T2ZSZW1vdmVkVHJlZSwgdHJlZVNjb3BlQ2hhbmdlLCB7IH0sIGNo
aWxkKTsKKyAgICByZXR1cm4gbm90aWZ5Tm9kZVJlbW92ZWRGcm9tVHJlZShvbGRQYXJlbnRPZlJl
bW92ZWRUcmVlLCB0cmVlU2NvcGVDaGFuZ2UsIHsgfSwgY2hpbGQpOwogfQogCiB2b2lkIGFkZENo
aWxkTm9kZXNUb0RlbGV0aW9uUXVldWUoTm9kZSomIGhlYWQsIE5vZGUqJiB0YWlsLCBDb250YWlu
ZXJOb2RlJiBjb250YWluZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAy
NzM0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzNiw3ICs2MzYsMTAgQEAgYm9vbCBFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0CiAg
ICAgaWYgKCFpc0Nvbm5lY3RlZCgpIHx8ICFzdXBwb3J0c0ZvY3VzKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmICghcmVuZGVyZXIoKSkgeworICAgIGJvb2wgaGFzQ2FudmFzQXNJ
bmNsdXNpdmVBbmNlc3RvciA9IGluY2x1c2l2ZUFuY2VzdG9yU3RhdGVzKCkuY29udGFpbnMoQW5j
ZXN0b3JTdGF0ZTo6Q2FudmFzKTsKKyAgICBBU1NFUlQoaGFzQ2FudmFzQXNJbmNsdXNpdmVBbmNl
c3RvciA9PSAhIWFuY2VzdG9yc09mVHlwZTxIVE1MQ2FudmFzRWxlbWVudD4oKnRoaXMpLmZpcnN0
KCkKKyAgICAgICAgfHwgKGhhc0NhbnZhc0FzSW5jbHVzaXZlQW5jZXN0b3IgJiYgaXM8SFRNTENh
bnZhc0VsZW1lbnQ+KCp0aGlzKSkpOworICAgIGlmICghcmVuZGVyZXIoKSAmJiBoYXNDYW52YXNB
c0luY2x1c2l2ZUFuY2VzdG9yKSB7CiAgICAgICAgIC8vIEVsZW1lbnRzIGluIGNhbnZhcyBmYWxs
YmFjayBjb250ZW50IGFyZSBub3QgcmVuZGVyZWQsIGJ1dCB0aGV5IGFyZSBhbGxvd2VkIHRvIGJl
CiAgICAgICAgIC8vIGZvY3VzYWJsZSBhcyBsb25nIGFzIHRoZWlyIGNhbnZhcyBpcyBkaXNwbGF5
ZWQgYW5kIHZpc2libGUuCiAgICAgICAgIGlmIChhdXRvKiBjYW52YXMgPSBhbmNlc3RvcnNPZlR5
cGU8SFRNTENhbnZhc0VsZW1lbnQ+KCp0aGlzKS5maXJzdCgpKQpAQCAtMjE1MSw2ICsyMTU0LDgg
QEAgTm9kZTo6SW5zZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1bHQgRWxlbWVudAogewogICAgIENvbnRh
aW5lck5vZGU6Omluc2VydGVkSW50b0FuY2VzdG9yKGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5z
ZXJ0ZWRUcmVlKTsKIAorICAgIHNldEluY2x1c2l2ZUFuY2VzdG9yU3RhdGVzKGluc2VydGlvblR5
cGUuYW5jZXN0b3JTdGF0ZXMpOworCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIGlm
IChjb250YWluc0Z1bGxTY3JlZW5FbGVtZW50KCkgJiYgcGFyZW50RWxlbWVudCgpICYmICFwYXJl
bnRFbGVtZW50KCktPmNvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnQoKSkKICAgICAgICAgc2V0Q29u
dGFpbnNGdWxsU2NyZWVuRWxlbWVudE9uQW5jZXN0b3JzQ3Jvc3NpbmdGcmFtZUJvdW5kYXJpZXMo
dHJ1ZSk7CkBAIC0yMjA4LDYgKzIyMTMsOCBAQCBOb2RlOjpJbnNlcnRlZEludG9BbmNlc3RvclJl
c3VsdCBFbGVtZW50CiAKIHZvaWQgRWxlbWVudDo6cmVtb3ZlZEZyb21BbmNlc3RvcihSZW1vdmFs
VHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYgb2xkUGFyZW50T2ZSZW1vdmVkVHJlZSkK
IHsKKyAgICBzZXRJbmNsdXNpdmVBbmNlc3RvclN0YXRlcyhyZW1vdmFsVHlwZS5hbmNlc3RvclN0
YXRlcyk7CisKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgaWYgKGNvbnRhaW5zRnVs
bFNjcmVlbkVsZW1lbnQoKSkKICAgICAgICAgc2V0Q29udGFpbnNGdWxsU2NyZWVuRWxlbWVudE9u
QW5jZXN0b3JzQ3Jvc3NpbmdGcmFtZUJvdW5kYXJpZXMoZmFsc2UpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
CShyZXZpc2lvbiAyNzM0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MDYsOSArNDA2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgRG9uZSwKICAgICAg
ICAgTmVlZHNQb3N0SW5zZXJ0aW9uQ2FsbGJhY2ssCiAgICAgfTsKKyAgICBlbnVtIGNsYXNzIEFu
Y2VzdG9yU3RhdGUgOiB1aW50OF90IHsKKyAgICAgICAgRm9ybSA9IDEgPDwgMCwKKyAgICAgICAg
Q2FudmFzID0gMSA8PCAxLAorICAgIH07CiAgICAgc3RydWN0IEluc2VydGlvblR5cGUgewogICAg
ICAgICBib29sIGNvbm5lY3RlZFRvRG9jdW1lbnQgeyBmYWxzZSB9OwogICAgICAgICBib29sIHRy
ZWVTY29wZUNoYW5nZWQgeyBmYWxzZSB9OworICAgICAgICBPcHRpb25TZXQ8QW5jZXN0b3JTdGF0
ZT4gYW5jZXN0b3JTdGF0ZXM7CiAgICAgfTsKICAgICAvLyBDYWxsZWQgKmFmdGVyKiB0aGlzIG5v
ZGUgb3IgaXRzIGFuY2VzdG9yIGlzIGluc2VydGVkIGludG8gYSBuZXcgcGFyZW50IChtYXkgb3Ig
bWF5IG5vdCBiZSBhIHBhcnQgb2YgZG9jdW1lbnQpIGJ5IHNjcmlwdHMgb3IgcGFyc2VyLgogICAg
IC8vIGluc2VydGVkSW50byAqKk1VU1QgTk9UKiogaW52b2tlIHNjcmlwdHMuIFJldHVybiBOZWVk
c1Bvc3RJbnNlcnRpb25DYWxsYmFjayBhbmQgaW1wbGVtZW50IGRpZEZpbmlzaEluc2VydGluZ05v
ZGUgaW5zdGVhZCB0byBydW4gc2NyaXB0cy4KQEAgLTQxOCw2ICs0MjMsNyBAQCBwdWJsaWM6CiAg
ICAgc3RydWN0IFJlbW92YWxUeXBlIHsKICAgICAgICAgYm9vbCBkaXNjb25uZWN0ZWRGcm9tRG9j
dW1lbnQgeyBmYWxzZSB9OwogICAgICAgICBib29sIHRyZWVTY29wZUNoYW5nZWQgeyBmYWxzZSB9
OworICAgICAgICBPcHRpb25TZXQ8QW5jZXN0b3JTdGF0ZT4gYW5jZXN0b3JTdGF0ZXM7CiAgICAg
fTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21BbmNlc3RvcihSZW1vdmFsVHlwZSwgQ29u
dGFpbmVyTm9kZSYgb2xkUGFyZW50T2ZSZW1vdmVkVHJlZSk7CiAKQEAgLTQ5Nyw2ICs1MDMsOCBA
QCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVBbmNlc3RvckNvbm5lY3RlZFN1YmZyYW1lQ291bnRG
b3JSZW1vdmFsKCkgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVBbmNlc3RvckNvbm5lY3RlZFN1YmZy
YW1lQ291bnRGb3JJbnNlcnRpb24oKSBjb25zdDsKIAorICAgIE9wdGlvblNldDxBbmNlc3RvclN0
YXRlPiBpbmNsdXNpdmVBbmNlc3RvclN0YXRlcygpIGNvbnN0OworCiAjaWYgRU5BQkxFKEpJVCkK
ICAgICBzdGF0aWMgcHRyZGlmZl90IG5vZGVGbGFnc01lbW9yeU9mZnNldCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihOb2RlLCBtX25vZGVGbGFncyk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90
IHJhcmVEYXRhTWVtb3J5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE5vZGUsIG1f
cmFyZURhdGFXaXRoQml0ZmllbGRzKTsgfQpAQCAtNTUzLDcgKzU2MSw5IEBAIHByb3RlY3RlZDoK
ICAgICAgICAgSXNDb21wdXRlZFN0eWxlSW52YWxpZEZsYWcgPSAxIDw8IDI2LAogICAgICAgICBE
ZWxlZ2F0ZXNGb2N1c1RvU2hhZG93Um9vdCA9IDEgPDwgMjcsCiAKLSAgICAgICAgLy8gQml0cyAy
OC0zMSBhcmUgZnJlZS4KKyAgICAgICAgSW5jbHVzaXZlQW5jZXN0b3JTdGF0ZUZvckZvcm0gPSAx
IDw8IDI4LAorICAgICAgICBJbmNsdXNpdmVBbmNlc3RvclN0YXRlRm9yQ2FudmFzID0gMSA8PCAy
OSwKKyAgICAgICAgLy8gQml0cyAzMC0zMSBhcmUgZnJlZS4KICAgICB9OwogCiAgICAgZW51bSBj
bGFzcyBUYWJJbmRleFN0YXRlIDogdWludDhfdCB7CkBAIC01OTUsNiArNjA1LDkgQEAgcHJvdGVj
dGVkOgogCiAgICAgdm9pZCBzZXREZWxlZ2F0ZXNGb2N1c1RvU2hhZG93Um9vdCgpIHsgc2V0Tm9k
ZUZsYWcoTm9kZUZsYWc6OkRlbGVnYXRlc0ZvY3VzVG9TaGFkb3dSb290KTsgfQogCisgICAgdm9p
ZCBzZXRJbmNsdXNpdmVBbmNlc3RvclN0YXRlcyhPcHRpb25TZXQ8QW5jZXN0b3JTdGF0ZT4pOwor
ICAgIHZvaWQgYWRkSW5jbHVzaXZlQW5jZXN0b3JTdGF0ZShBbmNlc3RvclN0YXRlKTsKKwogICAg
IGNvbnN0ZXhwciBzdGF0aWMgYXV0byBEZWZhdWx0Tm9kZUZsYWdzID0gT3B0aW9uU2V0PE5vZGVG
bGFnPihOb2RlRmxhZzo6SXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZCk7CiAgICAgY29uc3RleHBy
IHN0YXRpYyBhdXRvIENyZWF0ZU90aGVyID0gRGVmYXVsdE5vZGVGbGFnczsKICAgICBjb25zdGV4
cHIgc3RhdGljIGF1dG8gQ3JlYXRlQ2hhcmFjdGVyRGF0YSA9IERlZmF1bHROb2RlRmxhZ3MgfCBO
b2RlRmxhZzo6SXNDaGFyYWN0ZXJEYXRhOwpAQCAtODkyLDYgKzkwNSw0NCBAQCBpbmxpbmUgdm9p
ZCBOb2RlOjpzZXRUcmVlU2NvcGVSZWN1cnNpdmVsCiAgICAgICAgIG1vdmVUcmVlVG9OZXdTY29w
ZSgqdGhpcywgKm1fdHJlZVNjb3BlLCBuZXdUcmVlU2NvcGUpOwogfQogCitBTFdBWVNfSU5MSU5F
IE9wdGlvblNldDxOb2RlOjpBbmNlc3RvclN0YXRlPiBOb2RlOjppbmNsdXNpdmVBbmNlc3RvclN0
YXRlcygpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzRWxlbWVudE5vZGUoKSB8fCBpc1RyZWVTY29w
ZSgpIHx8IGlzRG9jdW1lbnRGcmFnbWVudCgpKTsgLy8gT25seSBFbGVtZW50IHN1cHBvcnRzIGFu
Y2VzdG9yIHN0YXRlcyBmb3IgZXhwZWRpZW5jeS4KKyAgICBPcHRpb25TZXQ8Tm9kZTo6QW5jZXN0
b3JTdGF0ZT4gc3RhdGVzOworICAgIGlmIChoYXNOb2RlRmxhZyhOb2RlRmxhZzo6SW5jbHVzaXZl
QW5jZXN0b3JTdGF0ZUZvckZvcm0pKQorICAgICAgICBzdGF0ZXMuYWRkKEFuY2VzdG9yU3RhdGU6
OkZvcm0pOworICAgIGlmIChoYXNOb2RlRmxhZyhOb2RlRmxhZzo6SW5jbHVzaXZlQW5jZXN0b3JT
dGF0ZUZvckNhbnZhcykpCisgICAgICAgIHN0YXRlcy5hZGQoQW5jZXN0b3JTdGF0ZTo6Q2FudmFz
KTsKKyAgICByZXR1cm4gc3RhdGVzOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgTm9kZTo6c2V0
SW5jbHVzaXZlQW5jZXN0b3JTdGF0ZXMoT3B0aW9uU2V0PEFuY2VzdG9yU3RhdGU+IHN0YXRlcykK
K3sKKyAgICBBU1NFUlQoaXNFbGVtZW50Tm9kZSgpKTsKKyAgICBpZiAoc3RhdGVzLmNvbnRhaW5z
KEFuY2VzdG9yU3RhdGU6OkZvcm0pKQorICAgICAgICBzZXROb2RlRmxhZyhOb2RlRmxhZzo6SW5j
bHVzaXZlQW5jZXN0b3JTdGF0ZUZvckZvcm0pOworICAgIGVsc2UKKyAgICAgICAgY2xlYXJOb2Rl
RmxhZyhOb2RlRmxhZzo6SW5jbHVzaXZlQW5jZXN0b3JTdGF0ZUZvckZvcm0pOworCisgICAgaWYg
KHN0YXRlcy5jb250YWlucyhBbmNlc3RvclN0YXRlOjpDYW52YXMpKQorICAgICAgICBzZXROb2Rl
RmxhZyhOb2RlRmxhZzo6SW5jbHVzaXZlQW5jZXN0b3JTdGF0ZUZvckNhbnZhcyk7CisgICAgZWxz
ZQorICAgICAgICBjbGVhck5vZGVGbGFnKE5vZGVGbGFnOjpJbmNsdXNpdmVBbmNlc3RvclN0YXRl
Rm9yQ2FudmFzKTsKK30KKworaW5saW5lIHZvaWQgTm9kZTo6YWRkSW5jbHVzaXZlQW5jZXN0b3JT
dGF0ZShBbmNlc3RvclN0YXRlIHN0YXRlKQoreworICAgIEFTU0VSVChpc0hUTUxFbGVtZW50KCkp
OworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIEFuY2VzdG9yU3RhdGU6OkZvcm06Cisg
ICAgICAgIHNldE5vZGVGbGFnKE5vZGVGbGFnOjpJbmNsdXNpdmVBbmNlc3RvclN0YXRlRm9yRm9y
bSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQW5jZXN0b3JTdGF0ZTo6Q2FudmFzOgorICAg
ICAgICBzZXROb2RlRmxhZyhOb2RlRmxhZzo6SW5jbHVzaXZlQW5jZXN0b3JTdGF0ZUZvckNhbnZh
cyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogaW5saW5lIGNvbnN0ZXhwciBQYXJ0aWFs
T3JkZXJpbmcgUGFydGlhbE9yZGVyaW5nOjpsZXNzKFR5cGU6Okxlc3MpOwogaW5saW5lIGNvbnN0
ZXhwciBQYXJ0aWFsT3JkZXJpbmcgUGFydGlhbE9yZGVyaW5nOjplcXVpdmFsZW50KFR5cGU6OkVx
dWl2YWxlbnQpOwogaW5saW5lIGNvbnN0ZXhwciBQYXJ0aWFsT3JkZXJpbmcgUGFydGlhbE9yZGVy
aW5nOjpncmVhdGVyKFR5cGU6OkdyZWF0ZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDI3MzQ3NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4
LDggQEAgYm9vbCBIVE1MQW5jaG9yRWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYQogICAgIGlmICgh
ZG9jdW1lbnQoKS5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS50YWJzVG9MaW5rcyhldmVudCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghcmVuZGVyZXIoKSAmJiBhbmNlc3RvcnNP
ZlR5cGU8SFRNTENhbnZhc0VsZW1lbnQ+KCp0aGlzKS5maXJzdCgpKQorICAgIEFTU0VSVChpbmNs
dXNpdmVBbmNlc3RvclN0YXRlcygpLmNvbnRhaW5zKEFuY2VzdG9yU3RhdGU6OkNhbnZhcykgPT0g
ISFhbmNlc3RvcnNPZlR5cGU8SFRNTENhbnZhc0VsZW1lbnQ+KCp0aGlzKS5maXJzdCgpKTsKKyAg
ICBpZiAoIXJlbmRlcmVyKCkgJiYgaW5jbHVzaXZlQW5jZXN0b3JTdGF0ZXMoKS5jb250YWlucyhB
bmNlc3RvclN0YXRlOjpDYW52YXMpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVy
biBoYXNOb25FbXB0eUJveChyZW5kZXJCb3hNb2RlbE9iamVjdCgpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyNzM0NzYpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI4LDYgKzEyOCw3IEBAIEhUTUxDYW52YXNFbGVtZW50OjpIVE1MQ2FudmFzRWxlbWVudChj
b24KICAgICAsIENhbnZhc0Jhc2UoSW50U2l6ZShkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQp
KQogICAgICwgQWN0aXZlRE9NT2JqZWN0KGRvY3VtZW50KQogeworICAgIGFkZEluY2x1c2l2ZUFu
Y2VzdG9yU3RhdGUoQW5jZXN0b3JTdGF0ZTo6Q2FudmFzKTsKICAgICBBU1NFUlQoaGFzVGFnTmFt
ZShjYW52YXNUYWcpKTsKIH0KIApAQCAtMTA0OSw3ICsxMDUwLDEwIEBAIE5vZGU6Okluc2VydGVk
SW50b0FuY2VzdG9yUmVzdWx0IEhUTUxDYW4KICAgICAgICAgICAgIGRvY3VtZW50LmNhbnZhc0No
YW5nZWQoKnRoaXMsIEZsb2F0UmVjdCB7IH0pOwogICAgIH0KIAotICAgIHJldHVybiBIVE1MRWxl
bWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3IoaW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNlcnRl
ZFRyZWUpOworICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3RvcihpbnNlcnRpb25U
eXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7CisgICAgYWRkSW5jbHVzaXZlQW5jZXN0b3JTdGF0
ZShBbmNlc3RvclN0YXRlOjpDYW52YXMpOworCisgICAgcmV0dXJuIEluc2VydGVkSW50b0FuY2Vz
dG9yUmVzdWx0OjpEb25lOwogfQogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpyZW1vdmVkRnJv
bUFuY2VzdG9yKFJlbW92YWxUeXBlIHJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJiBvbGRQYXJl
bnRPZlJlbW92ZWRUcmVlKQpAQCAtMTA2MCw2ICsxMDY0LDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxl
bWVudDo6cmVtb3ZlZEZyb21BbmNlcwogICAgIH0KIAogICAgIEhUTUxFbGVtZW50OjpyZW1vdmVk
RnJvbUFuY2VzdG9yKHJlbW92YWxUeXBlLCBvbGRQYXJlbnRPZlJlbW92ZWRUcmVlKTsKKyAgICBh
ZGRJbmNsdXNpdmVBbmNlc3RvclN0YXRlKEFuY2VzdG9yU3RhdGU6OkNhbnZhcyk7CiB9CiAKIGJv
b2wgSFRNTENhbnZhc0VsZW1lbnQ6Om5lZWRzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDI3MzQ3NikK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjYsNiArNjYsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogSFRNTEZvcm1F
bGVtZW50OjpIVE1MRm9ybUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQmIGRvY3VtZW50KQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCiB7
CisgICAgYWRkSW5jbHVzaXZlQW5jZXN0b3JTdGF0ZShBbmNlc3RvclN0YXRlOjpGb3JtKTsKICAg
ICBBU1NFUlQoaGFzVGFnTmFtZShmb3JtVGFnKSk7CiB9CiAKQEAgLTEzNSw2ICsxMzYsNyBAQCBi
b29sIEhUTUxGb3JtRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChjCiBOb2RlOjpJbnNlcnRlZElu
dG9BbmNlc3RvclJlc3VsdCBIVE1MRm9ybUVsZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9yKElu
c2VydGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRl
ZFRyZWUpCiB7CiAgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9yKGluc2VydGlv
blR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKKyAgICBhZGRJbmNsdXNpdmVBbmNlc3RvclN0
YXRlKEFuY2VzdG9yU3RhdGU6OkZvcm0pOwogICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5lY3Rl
ZFRvRG9jdW1lbnQpCiAgICAgICAgIGRvY3VtZW50KCkuZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2wo
KnRoaXMpOwogICAgIHJldHVybiBJbnNlcnRlZEludG9BbmNlc3RvclJlc3VsdDo6RG9uZTsKQEAg
LTE0Nyw2ICsxNDksNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVtb3ZlZEZyb21BbmNlc3Rv
CiAgICAgZm9yIChhdXRvJiBhc3NvY2lhdGVkRWxlbWVudCA6IGFzc29jaWF0ZWRFbGVtZW50cykK
ICAgICAgICAgYXNzb2NpYXRlZEVsZW1lbnQtPmZvcm1Pd25lclJlbW92ZWRGcm9tVHJlZShyb290
KTsKICAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21BbmNlc3RvcihyZW1vdmFsVHlwZSwgb2xk
UGFyZW50T2ZSZW1vdmVkVHJlZSk7CisgICAgYWRkSW5jbHVzaXZlQW5jZXN0b3JTdGF0ZShBbmNl
c3RvclN0YXRlOjpGb3JtKTsKIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmhhbmRsZUxvY2Fs
RXZlbnRzKEV2ZW50JiBldmVudCwgRXZlbnRJbnZva2VQaGFzZSBwaGFzZSkKQEAgLTkwMSw4ICs5
MDQsMTUgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmNvcHlOb25BdHRyaWJ1dGVQcgogICAgIEhU
TUxFbGVtZW50Ojpjb3B5Tm9uQXR0cmlidXRlUHJvcGVydGllc0Zyb21FbGVtZW50KHNvdXJjZSk7
CiB9CiAKLUhUTUxGb3JtRWxlbWVudCogSFRNTEZvcm1FbGVtZW50OjpmaW5kQ2xvc2VzdEZvcm1B
bmNlc3Rvcihjb25zdCBFbGVtZW50JiBzdGFydEVsZW1lbnQpCitIVE1MRm9ybUVsZW1lbnQqIEhU
TUxGb3JtRWxlbWVudDo6ZmluZENsb3Nlc3RGb3JtQW5jZXN0b3JTbG93Q2FzZShjb25zdCBFbGVt
ZW50JiBzdGFydEVsZW1lbnQpCiB7CisgICAgaWYgKFVOTElLRUxZKGlzPEhUTUxGb3JtRWxlbWVu
dD4oc3RhcnRFbGVtZW50KSkpIHsKKyAgICAgICAgYXV0byogcGFyZW50RWxlbWVudCA9IHN0YXJ0
RWxlbWVudC5wYXJlbnRFbGVtZW50KCk7CisgICAgICAgIGlmICghcGFyZW50RWxlbWVudCB8fCAh
cGFyZW50RWxlbWVudC0+aW5jbHVzaXZlQW5jZXN0b3JTdGF0ZXMoKS5jb250YWlucyhBbmNlc3Rv
clN0YXRlOjpGb3JtKSkgeworICAgICAgICAgICAgQVNTRVJUKCFhbmNlc3RvcnNPZlR5cGU8SFRN
TEZvcm1FbGVtZW50PihzdGFydEVsZW1lbnQpLmZpcnN0KCkpOworICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SFRNTEZv
cm1FbGVtZW50Kj4oYW5jZXN0b3JzT2ZUeXBlPEhUTUxGb3JtRWxlbWVudD4oc3RhcnRFbGVtZW50
KS5maXJzdCgpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5o
CShyZXZpc2lvbiAyNzM0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiRm9ybVN0YXRl
LmgiCiAjaW5jbHVkZSAiRm9ybVN1Ym1pc3Npb24uaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5o
IgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlJhZGlvQnV0dG9uR3JvdXBzLmgi
CiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KQEAgLTEyMSw3
ICsxMjIsMTYgQEAgcHVibGljOgogCiAgICAgU3RyaW5nUGFpclZlY3RvciB0ZXh0RmllbGRWYWx1
ZXMoKSBjb25zdDsKIAotICAgIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQqIGZpbmRDbG9zZXN0Rm9y
bUFuY2VzdG9yKGNvbnN0IEVsZW1lbnQmKTsKKyAgICBzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBm
aW5kQ2xvc2VzdEZvcm1BbmNlc3Rvcihjb25zdCBFbGVtZW50JiBlbGVtZW50KQorICAgIHsKKyAg
ICAgICAgaWYgKCFlbGVtZW50LmluY2x1c2l2ZUFuY2VzdG9yU3RhdGVzKCkuY29udGFpbnMoQW5j
ZXN0b3JTdGF0ZTo6Rm9ybSkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghZmluZENsb3Nlc3RGb3Jt
QW5jZXN0b3JTbG93Q2FzZShlbGVtZW50KSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgfQorICAgICAgICBhdXRvKiByZXN1bHQgPSBmaW5kQ2xvc2VzdEZvcm1BbmNlc3Rv
clNsb3dDYXNlKGVsZW1lbnQpOworICAgICAgICBBU1NFUlQocmVzdWx0IHx8IGVsZW1lbnQudGFn
UU5hbWUoKSA9PSBIVE1MTmFtZXM6OmZvcm1UYWcpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KIAogcHJpdmF0ZToKICAgICBIVE1MRm9ybUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Jik7CkBAIC0xNjYsNiArMTc2LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
cmVzZXRBc3NvY2lhdGVkRm9ybUNvbnRyb2xFbGVtZW50cygpOwogCisgICAgc3RhdGljIEhUTUxG
b3JtRWxlbWVudCogZmluZENsb3Nlc3RGb3JtQW5jZXN0b3JTbG93Q2FzZShjb25zdCBFbGVtZW50
Jik7CisKICAgICBGb3JtU3VibWlzc2lvbjo6QXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CiAgICAg
SGFzaE1hcDxBdG9tU3RyaW5nLCBXZWFrUHRyPEhUTUxFbGVtZW50Pj4gbV9wYXN0TmFtZXNNYXA7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNp
b24gMjczNDc2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzY4LDYgKzM2OCwxMCBAQCBOb2RlOjpJbnNlcnRlZEludG9BbmNl
c3RvclJlc3VsdCBIVE1MSW1hCiAgICAgICAgIG1fZm9ybSA9IG51bGxwdHI7CiAgICAgfQogCisg
ICAgLy8gSW5zZXJ0IG5lZWRzIHRvIGNvbXBsZXRlIGZpcnN0LCBiZWZvcmUgd2Ugc3RhcnQgdXBk
YXRpbmcgdGhlIGxvYWRlci4gTG9hZGVyIGRpc3BhdGNoZXMgZXZlbnRzIHdoaWNoIGNvdWxkIHJl
c3VsdAorICAgIC8vIGluIGNhbGxiYWNrcyBiYWNrIHRvIHRoaXMgbm9kZS4KKyAgICBOb2RlOjpJ
bnNlcnRlZEludG9BbmNlc3RvclJlc3VsdCBpbnNlcnROb3RpZmljYXRpb25SZXF1ZXN0ID0gSFRN
TEVsZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9yKGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5z
ZXJ0ZWRUcmVlKTsKKwogICAgIGlmICghbV9mb3JtKSB7CiAgICAgICAgIGlmIChhdXRvKiBuZXdG
b3JtID0gSFRNTEZvcm1FbGVtZW50OjpmaW5kQ2xvc2VzdEZvcm1BbmNlc3RvcigqdGhpcykpIHsK
ICAgICAgICAgICAgIG1fZm9ybSA9IG1ha2VXZWFrUHRyKG5ld0Zvcm0pOwpAQCAtMzc1LDEwICsz
NzksNiBAQCBOb2RlOjpJbnNlcnRlZEludG9BbmNlc3RvclJlc3VsdCBIVE1MSW1hCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICAvLyBJbnNlcnQgbmVlZHMgdG8gY29tcGxldGUgZmlyc3QsIGJlZm9y
ZSB3ZSBzdGFydCB1cGRhdGluZyB0aGUgbG9hZGVyLiBMb2FkZXIgZGlzcGF0Y2hlcyBldmVudHMg
d2hpY2ggY291bGQgcmVzdWx0Ci0gICAgLy8gaW4gY2FsbGJhY2tzIGJhY2sgdG8gdGhpcyBub2Rl
LgotICAgIE5vZGU6Okluc2VydGVkSW50b0FuY2VzdG9yUmVzdWx0IGluc2VydE5vdGlmaWNhdGlv
blJlcXVlc3QgPSBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3IoaW5zZXJ0aW9uVHlw
ZSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOwotCiAgICAgaWYgKGluc2VydGlvblR5cGUudHJlZVNj
b3BlQ2hhbmdlZCAmJiAhbV9wYXJzZWRVc2VtYXAuaXNOdWxsKCkpCiAgICAgICAgIHRyZWVTY29w
ZSgpLmFkZEltYWdlRWxlbWVudEJ5VXNlbWFwKCptX3BhcnNlZFVzZW1hcC5pbXBsKCksICp0aGlz
KTsKIAo=
</data>
<flag name="review"
          id="440369"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>