<?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>157811</bug_id>
          
          <creation_ts>2016-05-17 14:25:27 -0700</creation_ts>
          <short_desc>Use RenderChildIterator more for traversing a renderer&apos;s children</short_desc>
          <delta_ts>2016-05-17 18:25:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=157817</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1193983</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-17 14:25:27 -0700</bug_when>
    <thetext>Use RenderChildIterator more for traversal a renderer&apos;s children.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193984</commentid>
    <comment_count>1</comment_count>
      <attachid>279165</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-17 14:27:31 -0700</bug_when>
    <thetext>Created attachment 279165
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193986</commentid>
    <comment_count>2</comment_count>
      <attachid>279166</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-17 14:28:51 -0700</bug_when>
    <thetext>Created attachment 279166
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193998</commentid>
    <comment_count>3</comment_count>
      <attachid>279166</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-05-17 15:03:14 -0700</bug_when>
    <thetext>Comment on attachment 279166
Patch

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:3471
&gt; +        for (auto&amp; box : childrenOfType&lt;RenderBox&gt;(*this)) {
&gt; +            if (is&lt;RenderText&gt;(box) || is&lt;RenderListMarker&gt;(box))
&gt; +                continue;

RenderBox (or RenderElement) is never a RenderText so the test is unnecessary. For DOM classes we have static asserts against at least some types of unnecessary tests. It might be good to add something like that at least for the RenderText case.

&gt; Source/WebCore/rendering/RenderObject.cpp:175
&gt; +    if (!is&lt;RenderElement&gt;(*this))
&gt; +        return;
&gt; +
&gt; +    for (auto&amp; child : childrenOfType&lt;RenderObject&gt;(downcast&lt;RenderElement&gt;(*this))) {

Probably an indication the code should move to RenderElement in the future.

&gt; Source/WebCore/rendering/svg/SVGRenderSupport.cpp:159
&gt; +    for (auto&amp; current : childrenOfType&lt;RenderObject&gt;(container)) {

Some of these could probably be tightened to RenderElement</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194001</commentid>
    <comment_count>4</comment_count>
      <attachid>279169</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-17 15:07:22 -0700</bug_when>
    <thetext>Created attachment 279169
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194020</commentid>
    <comment_count>5</comment_count>
      <attachid>279169</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-17 15:38:03 -0700</bug_when>
    <thetext>Comment on attachment 279169
Patch

Clearing flags on attachment: 279169

Committed r201052: &lt;http://trac.webkit.org/changeset/201052&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194021</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-17 15:38:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194048</commentid>
    <comment_count>7</comment_count>
      <attachid>279166</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-17 16:22:33 -0700</bug_when>
    <thetext>Comment on attachment 279166
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:3471
&gt;&gt; +                continue;
&gt; 
&gt; RenderBox (or RenderElement) is never a RenderText so the test is unnecessary. For DOM classes we have static asserts against at least some types of unnecessary tests. It might be good to add something like that at least for the RenderText case.

I will update the static assertion in is&lt;&gt;() to catch these via https://bugs.webkit.org/show_bug.cgi?id=157817</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194058</commentid>
    <comment_count>8</comment_count>
      <attachid>279165</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-17 16:47:23 -0700</bug_when>
    <thetext>Comment on attachment 279165
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        Use RenderChildIterator more for traversal a renderer&apos;s children

traversal of a

&gt; Source/WebCore/rendering/RenderFieldset.cpp:130
&gt; +    for (auto&amp; legend : childrenOfType&lt;RenderElement&gt;(*this)) {

Should be RenderBox.

&gt; Source/WebCore/rendering/RenderFieldset.cpp:135
&gt; +            return &amp;downcast&lt;RenderBox&gt;(legend);

Not sure why this cast is safe if someone sets an unusual display style on an HTMLLegendElement, but even if it is OK, I see no value in doing the additional processing on the other RenderElement objects that are not RenderBox.

&gt; Source/WebCore/rendering/svg/SVGRenderSupport.cpp:269
&gt; +        if (layoutSizeChanged &amp;&amp; is&lt;SVGElement&gt;(child.node())) {

This adds a null check that was not in the old code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194060</commentid>
    <comment_count>9</comment_count>
      <attachid>279185</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-17 16:54:29 -0700</bug_when>
    <thetext>Created attachment 279185
Fix Darin&apos;s findings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194062</commentid>
    <comment_count>10</comment_count>
      <attachid>279187</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-17 16:55:26 -0700</bug_when>
    <thetext>Created attachment 279187
Fix Darin&apos;s findings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194078</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-17 17:55:13 -0700</bug_when>
    <thetext>Reopen to fix nits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194094</commentid>
    <comment_count>12</comment_count>
      <attachid>279187</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-17 18:25:13 -0700</bug_when>
    <thetext>Comment on attachment 279187
Fix Darin&apos;s findings

Clearing flags on attachment: 279187

Committed r201064: &lt;http://trac.webkit.org/changeset/201064&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194095</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-17 18:25:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279165</attachid>
            <date>2016-05-17 14:27:31 -0700</date>
            <delta_ts>2016-05-17 14:28:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157811-20160517142829.patch</filename>
            <type>text/plain</type>
            <size>54963</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxMDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzY5OTY3NmE5YzBhM2Ji
MTU0MDEzMGUyYWRhYWFjYTA5ZjI3Mjc3Yi4uYTA4YTE4MDUzOTUwYTRmMzFkZGMwMTRjNzRjNjVh
OGQ4NWJhYjI1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE2LTA1LTE3ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIFJlbmRlckNoaWxkSXRl
cmF0b3IgbW9yZSBmb3IgdHJhdmVyc2FsIGEgcmVuZGVyZXIncyBjaGlsZHJlbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3ODExCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIFJlbmRlckNoaWxkSXRl
cmF0b3IgbW9yZSBmb3IgdHJhdmVyc2FsIGEgcmVuZGVyZXIncyBjaGlsZHJlbi4KKworICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6bGF5ZXJzRm9yTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6Z2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJP
YmplY3RIaWVyYXJjaHkpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVB
Z2VudC5oOgorICAgICAgICAqIHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QXV0b1RhYmxlTGF5b3V0OjpyZWNhbGNDb2x1bW4pOgorICAgICAgICAqIHJl
bmRlcmluZy9JbmxpbmVJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6aXNFbXB0eUlubGlu
ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBvc2l0aW9uRm9y
UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnVwZGF0ZU91dGxpbmVBdXRvQW5jZXN0b3IpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckZpZWxkc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpZWxkc2V0OjpmaW5k
TGVnZW5kKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklu
bGluZTo6Z2VuZXJhdGVDdWxsZWRMaW5lQm94UmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVySW5saW5lOjpjdWxsZWRJbmxpbmVGaXJzdExpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6ZGlydHlMaW5lQm94ZXMpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRQYXJl
bnRPZkZpcnN0TGluZUJveCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldEZsb3dUaHJlYWRTdGF0ZUluY2x1
ZGluZ0Rlc2NlbmRhbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWRkQWJz
b2x1dGVSZWN0Rm9yTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpwYWlu
dGluZ1Jvb3RSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVtb3ZlRnJv
bVJlbmRlckZsb3dUaHJlYWRJbmNsdWRpbmdEZXNjZW5kYW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJPYmplY3Q6OmludmFsaWRhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrSW5jbHVk
aW5nRGVzY2VuZGFudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojp1cGRhdGVE
cmFnU3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Zmlyc3RDb2x1bW4pOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNvbDo6
Y2xlYXJQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHlCaXRzKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
U2VjdGlvbjo6bGF5b3V0Um93cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kUHJldmlvdXNBbmRO
ZXh0QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjpzdWJ0cmVl
Q2hpbGRXYXNBZGRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjpzdWJ0cmVl
Q2hpbGRXaWxsQmVSZW1vdmVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1
cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlT2JqZWN0Qm91bmRpbmdCb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNvbnRhaW5lckJvdW5k
aW5nQm94ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0Q2hp
bGRyZW4pOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNC
dWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVp
bGRlcjo6Y29sbGVjdFRleHRQb3NpdGlvbmluZ0VsZW1lbnRzKToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdU
ZXh0TWV0cmljc0J1aWxkZXI6OndhbGtUcmVlKToKKwogMjAxNi0wNS0xNiAgRGVhbiBKYWNrc29u
ICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgVGlkeSB1bnVzZWQgcGFyYW1ldGVycyB3aXRo
IGJ1aWxkIGZsYWdzIGluIGlzVmFsaWRLZXl3b3JkUHJvcGVydHlBbmRWYWx1ZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKaW5k
ZXggNGNmYzAzYjM0ZDZmYjVlOWMyM2FmNTc3Mzg3NDNmODdkODllYjlhYS4uY2Q0N2FlNzc5YTFi
YzBiM2YzOWY3NDY4MjJmMjM4YjgyYzc2ZWVhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCkBAIC0zNiw2ICszNiw3IEBA
CiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
ICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRv
ci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNr
aW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCkBAIC0xMDUsMzAgKzEw
NiwzMSBAQCB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpsYXllcnNGb3JOb2RlKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZAogewogICAgIGxheWVycyA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+
OjpjcmVhdGUoKTsKIAotICAgIE5vZGUqIG5vZGUgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuaW5z
cGVjdG9yRE9NQWdlbnQoKS0+bm9kZUZvcklkKG5vZGVJZCk7CisgICAgYXV0byogbm9kZSA9IG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpLT5ub2RlRm9ySWQobm9kZUlk
KTsKICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwo
IlByb3ZpZGVkIG5vZGUgaWQgZG9lc24ndCBtYXRjaCBhbnkga25vd24gbm9kZSIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJl
bmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgIGlm
ICghcmVuZGVyZXIpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIk5vZGUg
Zm9yIHByb3ZpZGVkIG5vZGUgaWQgZG9lc24ndCBoYXZlIGEgcmVuZGVyZXIiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFy
Y2h5KGVycm9yU3RyaW5nLCByZW5kZXJlciwgbGF5ZXJzKTsKKyAgICBpZiAoaXM8UmVuZGVyRWxl
bWVudD4oKnJlbmRlcmVyKSkKKyAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RI
aWVyYXJjaHkoZXJyb3JTdHJpbmcsIGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCpyZW5kZXJlciks
IGxheWVycyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmdhdGhlckxheWVy
c1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYgbGF5ZXJzKQordm9pZCBJbnNw
ZWN0b3JMYXllclRyZWVBZ2VudDo6Z2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJj
aHkoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVy
VHJlZTo6TGF5ZXI+PiYgbGF5ZXJzKQogewotICAgIGlmIChyZW5kZXJlci0+aGFzTGF5ZXIoKSkg
ewotICAgICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KGVycm9yU3Ry
aW5nLCBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCks
IGxheWVycyk7CisgICAgaWYgKHJlbmRlcmVyLmhhc0xheWVyKCkpIHsKKyAgICAgICAgZ2F0aGVy
TGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShlcnJvclN0cmluZywgZG93bmNhc3Q8UmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdD4ocmVuZGVyZXIpLmxheWVyKCksIGxheWVycyk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKHJlbmRlcmVyID0gcmVuZGVyZXItPmZpcnN0Q2hp
bGRTbG93KCk7IHJlbmRlcmVyOyByZW5kZXJlciA9IHJlbmRlcmVyLT5uZXh0U2libGluZygpKQot
ICAgICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShlcnJvclN0cmlu
ZywgcmVuZGVyZXIsIGxheWVycyk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZU
eXBlPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkKKyAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdS
ZW5kZXJPYmplY3RIaWVyYXJjaHkoZXJyb3JTdHJpbmcsIGNoaWxkLCBsYXllcnMpOwogfQogCiB2
b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVy
SGllcmFyY2h5KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVuZGVyTGF5ZXIqIHJlbmRlckxh
eWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6TGF5ZXJUcmVlOjpMYXllcj4+JiBsYXllcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oCmluZGV4IGYxMTRkNzI5ZjBiYjdiMDNl
YWQ4NzBjMjZmOGM3MTczYTIyNjQ2YmQuLjMyYTRjYmNmZDNlNTBmNTcwNTRmOGY1NjM2YjhjYmNk
OWM2YzZhYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JM
YXllclRyZWVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JM
YXllclRyZWVBZ2VudC5oCkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIGJp
bmQoY29uc3QgUmVuZGVyTGF5ZXIqKTsKICAgICB2b2lkIHVuYmluZChjb25zdCBSZW5kZXJMYXll
ciopOwogCi0gICAgdm9pZCBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShF
cnJvclN0cmluZyYsIFJlbmRlck9iamVjdCosIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4mKTsKKyAgICB2b2lk
IGdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KEVycm9yU3RyaW5nJiwgUmVu
ZGVyRWxlbWVudCYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4mKTsKICAgICB2b2lkIGdhdGhlckxheWVyc1Vz
aW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoRXJyb3JTdHJpbmcmLCBSZW5kZXJMYXllciosIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRy
ZWU6OkxheWVyPj4mKTsKIAogICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6
OkxheWVyPiBidWlsZE9iamVjdEZvckxheWVyKEVycm9yU3RyaW5nJiwgUmVuZGVyTGF5ZXIqKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAKaW5kZXggM2I5
M2E1MTE4NTg2OTEwNTA3NDBhMTJlYzlkMGI5Yzc5ZTJiZDNmNS4uYWI1NjQ4Mzk2ZTAyOWRhNzM5
ZGZiNzNjMTlmNmFhM2RhZmQ4YmZiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0F1dG9UYWJsZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0F1
dG9UYWJsZUxheW91dC5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJBdXRvVGFibGVMYXlvdXQuaCIKIAorI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRl
cmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxl
Q2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgiCkBAIC00OCwxNCArNDksMTQgQEAg
dm9pZCBBdXRvVGFibGVMYXlvdXQ6OnJlY2FsY0NvbHVtbih1bnNpZ25lZCBlZmZDb2wpCiAgICAg
UmVuZGVyVGFibGVDZWxsKiBmaXhlZENvbnRyaWJ1dG9yID0gbnVsbHB0cjsKICAgICBSZW5kZXJU
YWJsZUNlbGwqIG1heENvbnRyaWJ1dG9yID0gbnVsbHB0cjsKIAotICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCA9IG1fdGFibGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGlzPFJlbmRlclRhYmxlQ29sPigqY2hpbGQp
KSB7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4o
Km1fdGFibGUpKSB7CisgICAgICAgIGlmIChpczxSZW5kZXJUYWJsZUNvbD4oY2hpbGQpKSB7CiAg
ICAgICAgICAgICAvLyBSZW5kZXJUYWJsZUNvbHMgZG9uJ3QgaGF2ZSB0aGUgY29uY2VwdCBvZiBw
cmVmZXJyZWQgbG9naWNhbCB3aWR0aCwgYnV0IHdlIG5lZWQgdG8gY2xlYXIgdGhlaXIgZGlydHkg
Yml0cwogICAgICAgICAgICAgLy8gc28gdGhhdCBpZiB3ZSBjYWxsIHNldFByZWZlcnJlZFdpZHRo
c0RpcnR5KHRydWUpIG9uIGEgY29sIG9yIG9uZSBvZiBpdHMgZGVzY2VuZGFudHMsIHdlJ2xsIG1h
cmsgaXQncwogICAgICAgICAgICAgLy8gYW5jZXN0b3JzIGFzIGRpcnR5LgotICAgICAgICAgICAg
ZG93bmNhc3Q8UmVuZGVyVGFibGVDb2w+KCpjaGlsZCkuY2xlYXJQcmVmZXJyZWRMb2dpY2FsV2lk
dGhzRGlydHlCaXRzKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyVGFibGVTZWN0aW9u
PigqY2hpbGQpKSB7Ci0gICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24mIHNlY3Rpb24gPSBk
b3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KCpjaGlsZCk7CisgICAgICAgICAgICBkb3duY2Fz
dDxSZW5kZXJUYWJsZUNvbD4oY2hpbGQpLmNsZWFyUHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5
Qml0cygpOworICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlclRhYmxlU2VjdGlvbj4oY2hpbGQp
KSB7CisgICAgICAgICAgICBhdXRvJiBzZWN0aW9uID0gZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0
aW9uPihjaGlsZCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBudW1Sb3dzID0gc2VjdGlvbi5udW1S
b3dzKCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUm93czsgKytp
KSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uOjpDZWxsU3RydWN0IGN1cnJl
bnQgPSBzZWN0aW9uLmNlbGxBdChpLCBlZmZDb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lSXRlcmF0b3IuaAppbmRleCA0ZWZhNTJmNmY0ZGU4ZThkYzZkNTQ1NzE4MDFkZDZmOThl
NmYwNzhjLi5hMTExNTJmMGYyYzc5NTE2ODc3MDMyZWJlY2YwOTNjODNjMjkwYTczIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaApAQCAtMjUsNiArMjUsNyBAQAog
CiAjaW5jbHVkZSAiQmlkaVJ1bi5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgorI2lu
Y2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIK
ICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpA
QCAtMjA5LDE1ICsyMTAsMTUgQEAgZW51bSBFbXB0eUlubGluZUJlaGF2aW9yIHsKIAogc3RhdGlj
IGJvb2wgaXNFbXB0eUlubGluZShjb25zdCBSZW5kZXJJbmxpbmUmIHJlbmRlcmVyKQogewotICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gcmVuZGVyZXIuZmlyc3RDaGlsZCgpOyBjdXJy
ZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoY3Vy
cmVudC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgIGZvciAoYXV0byYg
Y3VycmVudCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4ocmVuZGVyZXIpKSB7CisgICAg
ICAgIGlmIChjdXJyZW50LmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaXM8UmVuZGVyVGV4dD4oKmN1cnJlbnQpKSB7
Ci0gICAgICAgICAgICBpZiAoIWRvd25jYXN0PFJlbmRlclRleHQ+KCpjdXJyZW50KS5pc0FsbENv
bGxhcHNpYmxlV2hpdGVzcGFjZSgpKQorICAgICAgICBpZiAoaXM8UmVuZGVyVGV4dD4oY3VycmVu
dCkpIHsKKyAgICAgICAgICAgIGlmICghZG93bmNhc3Q8UmVuZGVyVGV4dD4oY3VycmVudCkuaXNB
bGxDb2xsYXBzaWJsZVdoaXRlc3BhY2UoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIWlzPFJlbmRl
cklubGluZT4oKmN1cnJlbnQpIHx8ICFpc0VtcHR5SW5saW5lKGRvd25jYXN0PFJlbmRlcklubGlu
ZT4oKmN1cnJlbnQpKSkKKyAgICAgICAgaWYgKCFpczxSZW5kZXJJbmxpbmU+KGN1cnJlbnQpIHx8
ICFpc0VtcHR5SW5saW5lKGRvd25jYXN0PFJlbmRlcklubGluZT4oY3VycmVudCkpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IGNhYzViMDI4Mzc1ZWQzMWJjNTQ2ZTYw
YjcxMjE4NmIzNjVlYmZhNjUuLjU4MGRlM2NmMDI5MmJlYzg1MmMzOTU2MDAxODliZWY5OGVhMzhl
NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNDgsNiAr
NDgsNyBAQAogI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlckJv
eFJlZ2lvbkluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJCdXR0b24uaCIKKyNpbmNsdWRlICJSZW5k
ZXJDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyQ29tYmluZVRleHQuaCIKICNpbmNs
dWRlICJSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guaCIKICNpbmNsdWRlICJSZW5kZXJGbGV4
aWJsZUJveC5oIgpAQCAtMzQ2NSwxNyArMzQ2NiwxNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRG
b2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2lu
dAogICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkKICAgICAgICAgICAgIGFkZEZvY3VzUmlu
Z1JlY3RzRm9ySW5saW5lQ2hpbGRyZW4ocmVjdHMsIGFkZGl0aW9uYWxPZmZzZXQsIHBhaW50Q29u
dGFpbmVyKTsKICAgICAKLSAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAg
ICAgaWYgKCFpczxSZW5kZXJUZXh0PigqY2hpbGQpICYmICFpczxSZW5kZXJMaXN0TWFya2VyPigq
Y2hpbGQpICYmIGlzPFJlbmRlckJveD4oKmNoaWxkKSkgewotICAgICAgICAgICAgICAgIGF1dG8m
IGJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oKmNoaWxkKTsKLSAgICAgICAgICAgICAgICBGbG9h
dFBvaW50IHBvczsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsg
Y29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KLSAgICAgICAgICAgICAgICBpZiAoYm94LmxheWVy
KCkpCi0gICAgICAgICAgICAgICAgICAgIHBvcyA9IGNoaWxkLT5sb2NhbFRvQ29udGFpbmVyUG9p
bnQoRmxvYXRQb2ludCgpLCBwYWludENvbnRhaW5lcik7Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBwb3MgPSBGbG9hdFBvaW50KGFkZGl0aW9uYWxPZmZzZXQueCgp
ICsgYm94LngoKSwgYWRkaXRpb25hbE9mZnNldC55KCkgKyBib3gueSgpKTsKLSAgICAgICAgICAg
ICAgICBib3guYWRkRm9jdXNSaW5nUmVjdHMocmVjdHMsIGZsb29yZWRMYXlvdXRQb2ludChwb3Mp
LCBwYWludENvbnRhaW5lcik7Ci0gICAgICAgICAgICB9CisgICAgICAgIGZvciAoYXV0byYgYm94
IDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyQm94PigqdGhpcykpIHsKKyAgICAgICAgICAgIGlmIChp
czxSZW5kZXJUZXh0Pihib3gpIHx8IGlzPFJlbmRlckxpc3RNYXJrZXI+KGJveCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgcG9zOworICAgICAg
ICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9y
bXMuCisgICAgICAgICAgICBpZiAoYm94LmxheWVyKCkpCisgICAgICAgICAgICAgICAgcG9zID0g
Ym94LmxvY2FsVG9Db250YWluZXJQb2ludChGbG9hdFBvaW50KCksIHBhaW50Q29udGFpbmVyKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwb3MgPSBGbG9hdFBvaW50KGFkZGl0
aW9uYWxPZmZzZXQueCgpICsgYm94LngoKSwgYWRkaXRpb25hbE9mZnNldC55KCkgKyBib3gueSgp
KTsKKyAgICAgICAgICAgIGJveC5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgZmxvb3JlZExheW91
dFBvaW50KHBvcyksIHBhaW50Q29udGFpbmVyKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBmZjQ5MzNmMWQ0ZTY1MGYxN2E0ZTBh
NWM5M2IxOWE1ODBiZTY3OTU1Li4yMTcyMjE2ZTBjZWYzMWY0M2Q5YzhmM2U5NzJiMjk1YTQzZDJh
NmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtNDgsNiArNDgs
NyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRl
ICJSZW5kZXJCb3hSZWdpb25JbmZvLmgiCisjaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5o
IgogI2luY2x1ZGUgIlJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUgIlJl
bmRlckZsZXhpYmxlQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyR2VvbWV0cnlNYXAuaCIKQEAgLTQ0
MjEsMTggKzQ0MjIsMTMgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQ
b2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIGNvbnN0IFJlbmQKICAgICBpZiAoaXNUYWJs
ZVJvdygpKQogICAgICAgICBhZGp1c3RlZFBvaW50Lm1vdmVCeShsb2NhdGlvbigpKTsKIAotICAg
IGZvciAoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QgPSBmaXJzdENoaWxkKCk7IHJlbmRlck9i
amVjdDsgcmVuZGVyT2JqZWN0ID0gcmVuZGVyT2JqZWN0LT5uZXh0U2libGluZygpKSB7Ci0gICAg
ICAgIGlmICghaXM8UmVuZGVyQm94PigqcmVuZGVyT2JqZWN0KSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCisgICAgZm9yIChhdXRvJiByZW5kZXJlciA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckJv
eD4oKnRoaXMpKSB7CiAgICAgICAgIGlmIChpczxSZW5kZXJGbG93VGhyZWFkPigqdGhpcykpIHsK
ICAgICAgICAgICAgIEFTU0VSVChyZWdpb24pOwotICAgICAgICAgICAgaWYgKCFkb3duY2FzdDxS
ZW5kZXJGbG93VGhyZWFkPigqdGhpcykub2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24o
cmVuZGVyT2JqZWN0LCByZWdpb24pKQorICAgICAgICAgICAgaWYgKCFkb3duY2FzdDxSZW5kZXJG
bG93VGhyZWFkPigqdGhpcykub2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24oJnJlbmRl
cmVyLCByZWdpb24pKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAg
ICAgICAgYXV0byYgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJPYmplY3Qp
OwotCiAgICAgICAgIGlmICgoIXJlbmRlcmVyLmZpcnN0Q2hpbGQoKSAmJiAhcmVuZGVyZXIuaXNJ
bmxpbmUoKSAmJiAhaXM8UmVuZGVyQmxvY2tGbG93PihyZW5kZXJlcikpCiAgICAgICAgICAgICB8
fCByZW5kZXJlci5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICAgICAg
Y29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKaW5k
ZXggNTlkYmY2ZDRjODIxZTNlNTc1MjUwZDA0YTVhMzcyODFhMDg5ZGUyZC4uYTA4OWVlNWJmMjMx
ZDg0MjNlYzg3MGNlZTc3OGE5ZmVjOGNiMzUzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJFbGVtZW50LmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlICJQYXRoVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIK
KyNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyQ291bnRl
ci5oIgogI2luY2x1ZGUgIlJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUg
IlJlbmRlckZsZXhpYmxlQm94LmgiCkBAIC0yMTUxLDE4ICsyMTUyLDE4IEBAIHZvaWQgUmVuZGVy
RWxlbWVudDo6aXNzdWVSZXBhaW50Rm9yT3V0bGluZUF1dG8oZmxvYXQgb3V0bGluZVNpemUpCiAg
ICAgcmVwYWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyRWxlbWVu
dDo6dXBkYXRlT3V0bGluZUF1dG9BbmNlc3Rvcihib29sIGhhc091dGxpbmVBdXRvKSBjb25zdAor
dm9pZCBSZW5kZXJFbGVtZW50Ojp1cGRhdGVPdXRsaW5lQXV0b0FuY2VzdG9yKGJvb2wgaGFzT3V0
bGluZUF1dG8pCiB7Ci0gICAgZm9yIChhdXRvKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGhhc091dGxpbmVB
dXRvID09IGNoaWxkLT5oYXNPdXRsaW5lQXV0b0FuY2VzdG9yKCkpCisgICAgZm9yIChhdXRvJiBj
aGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oKnRoaXMpKSB7CisgICAgICAgIGlm
IChoYXNPdXRsaW5lQXV0byA9PSBjaGlsZC5oYXNPdXRsaW5lQXV0b0FuY2VzdG9yKCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2hpbGQtPnNldEhhc091dGxpbmVBdXRvQW5jZXN0
b3IoaGFzT3V0bGluZUF1dG8pOwotICAgICAgICBib29sIGNoaWxkSGFzT3V0bGluZUF1dG8gPSBj
aGlsZC0+b3V0bGluZVN0eWxlRm9yUmVwYWludCgpLm91dGxpbmVTdHlsZUlzQXV0bygpOworICAg
ICAgICBjaGlsZC5zZXRIYXNPdXRsaW5lQXV0b0FuY2VzdG9yKGhhc091dGxpbmVBdXRvKTsKKyAg
ICAgICAgYm9vbCBjaGlsZEhhc091dGxpbmVBdXRvID0gY2hpbGQub3V0bGluZVN0eWxlRm9yUmVw
YWludCgpLm91dGxpbmVTdHlsZUlzQXV0bygpOwogICAgICAgICBpZiAoY2hpbGRIYXNPdXRsaW5l
QXV0bykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoIWlzPFJlbmRlckVsZW1l
bnQ+KGNoaWxkKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkb3duY2FzdDxSZW5k
ZXJFbGVtZW50PigqY2hpbGQpLnVwZGF0ZU91dGxpbmVBdXRvQW5jZXN0b3IoaGFzT3V0bGluZUF1
dG8pOworICAgICAgICBkb3duY2FzdDxSZW5kZXJFbGVtZW50PihjaGlsZCkudXBkYXRlT3V0bGlu
ZUF1dG9BbmNlc3RvcihoYXNPdXRsaW5lQXV0byk7CiAgICAgfQogICAgIGlmIChoYXNDb250aW51
YXRpb24oKSkKICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KCp0aGlzKS5j
b250aW51YXRpb24oKS0+dXBkYXRlT3V0bGluZUF1dG9BbmNlc3RvcihoYXNPdXRsaW5lQXV0byk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAppbmRleCAwYWQ1ZjhlYTc1
NzYyNjBlZjI0MDJmYmMwNzBkMWM3NmIwODAzYmQ0Li42ZjI0NDQ1OTdiZTg4NDFlMDY0MWI2ZGNl
MDE1NDkwZDQ0MjVjY2FkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50
LmgKQEAgLTI3OCw3ICsyNzgsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIHBhaW50Rm9jdXNS
aW5nKFBhaW50SW5mbyYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgVmVjdG9yPExheW91dFJl
Y3Q+JiBmb2N1c1JpbmdSZWN0cyk7CiAgICAgdm9pZCBwYWludE91dGxpbmUoUGFpbnRJbmZvJiwg
Y29uc3QgTGF5b3V0UmVjdCYpOwotICAgIHZvaWQgdXBkYXRlT3V0bGluZUF1dG9BbmNlc3Rvcihi
b29sIGhhc091dGxpbmVBdXRvKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZU91dGxpbmVBdXRvQW5j
ZXN0b3IoYm9vbCBoYXNPdXRsaW5lQXV0byk7CiAKIHByaXZhdGU6CiAgICAgUmVuZGVyRWxlbWVu
dChDb250YWluZXJOb2RlJiwgUmVuZGVyU3R5bGUmJiwgQmFzZVR5cGVGbGFncyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAppbmRleCA3ODdhYmEwM2IwZTUx
ZWRiZjQ4ODkwODhlZjJjNjY4ZmI3NWMyNTA4Li40MjBjMWFkYWZiYTdkOTg5YzgxM2Y5Y2ZiODYy
NThiMzYwMTc4ZWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RmllbGRzZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNl
dC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJIVE1MRmllbGRTZXRFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCisjaW5jbHVk
ZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEy
NCwxNCArMTI1LDE0IEBAIFJlbmRlck9iamVjdCogUmVuZGVyRmllbGRzZXQ6OmxheW91dFNwZWNp
YWxFeGNsdWRlZENoaWxkKGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKICAgICByZXR1cm4gJmxlZ2Vu
ZDsKIH0KIAotUmVuZGVyQm94KiBSZW5kZXJGaWVsZHNldDo6ZmluZExlZ2VuZChGaW5kTGVnZW5k
T3B0aW9uIG9wdGlvbikgY29uc3QKK1JlbmRlckJveCogUmVuZGVyRmllbGRzZXQ6OmZpbmRMZWdl
bmQoRmluZExlZ2VuZE9wdGlvbiBvcHRpb24pCiB7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGxl
Z2VuZCA9IGZpcnN0Q2hpbGQoKTsgbGVnZW5kOyBsZWdlbmQgPSBsZWdlbmQtPm5leHRTaWJsaW5n
KCkpIHsKLSAgICAgICAgaWYgKG9wdGlvbiA9PSBJZ25vcmVGbG9hdGluZ09yT3V0T2ZGbG93ICYm
IGxlZ2VuZC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgIGZvciAoYXV0
byYgbGVnZW5kIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyRWxlbWVudD4oKnRoaXMpKSB7CisgICAg
ICAgIGlmIChvcHRpb24gPT0gSWdub3JlRmxvYXRpbmdPck91dE9mRmxvdyAmJiBsZWdlbmQuaXNG
bG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIAotICAgICAgICBpZiAoaXM8SFRNTExlZ2VuZEVsZW1lbnQ+KGxlZ2VuZC0+bm9kZSgp
KSkKLSAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KGxlZ2VuZCk7CisgICAg
ICAgIGlmIChpczxIVE1MTGVnZW5kRWxlbWVudD4obGVnZW5kLmVsZW1lbnQoKSkpCisgICAgICAg
ICAgICByZXR1cm4gJmRvd25jYXN0PFJlbmRlckJveD4obGVnZW5kKTsKICAgICB9CiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmllbGRzZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5o
CmluZGV4IGRlMDU3YmFjMTllNjc5Yjc2YTQ5YjQyNjZhNTcyMjY3NDlkNTNhYmQuLjExMGNlNTNm
YmFkOGE2ZmVkYWNhYzdmYjM3NmM1N2QzZmI3NTdiMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGaWVsZHNldC5oCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBSZW5k
ZXJGaWVsZHNldChIVE1MRmllbGRTZXRFbGVtZW50JiwgUmVuZGVyU3R5bGUmJik7CiAKICAgICBl
bnVtIEZpbmRMZWdlbmRPcHRpb24geyBJZ25vcmVGbG9hdGluZ09yT3V0T2ZGbG93LCBJbmNsdWRl
RmxvYXRpbmdPck91dE9mRmxvdyB9OwotICAgIFJlbmRlckJveCogZmluZExlZ2VuZChGaW5kTGVn
ZW5kT3B0aW9uID0gSWdub3JlRmxvYXRpbmdPck91dE9mRmxvdykgY29uc3Q7CisgICAgUmVuZGVy
Qm94KiBmaW5kTGVnZW5kKEZpbmRMZWdlbmRPcHRpb24gPSBJZ25vcmVGbG9hdGluZ09yT3V0T2ZG
bG93KTsKIAogICAgIEhUTUxGaWVsZFNldEVsZW1lbnQmIGZpZWxkU2V0RWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIGRvd25jYXN0PEhUTUxGaWVsZFNldEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1v
dXMoKSk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAppbmRl
eCA3NTA3NTczODhjY2VhNzY5NThhNDkwNjk1OWU5ZWI4ZGMyMDdmYWE2Li43NTU2YjcwYjBlMDlj
MmQ4ZDRiYjNlZGY1YzdiMzUwZWYwZDRhNjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW5saW5lLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIklubGluZVRleHRC
b3guaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKKyNpbmNs
dWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5o
IgogI2luY2x1ZGUgIlJlbmRlckdlb21ldHJ5TWFwLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0
b3IuaCIKQEAgLTY3MCwxNCArNjcxLDE0IEBAIHZvaWQgUmVuZGVySW5saW5lOjpnZW5lcmF0ZUN1
bGxlZExpbmVCb3hSZWN0cyhHZW5lcmF0b3JDb250ZXh0JiBjb250ZXh0LCBjb25zdCBSCiAKICAg
ICBib29sIGlzSG9yaXpvbnRhbCA9IHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsK
IAotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOyBjdXJyZW50
OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoY3VycmVu
dC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgIGZvciAoYXV0byYgY3Vy
cmVudCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oKnRoaXMpKSB7CisgICAgICAgIGlm
IChjdXJyZW50LmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgCisKICAgICAgICAgLy8gV2Ugd2FudCB0byBnZXQgdGhl
IG1hcmdpbiBib3ggaW4gdGhlIGlubGluZSBkaXJlY3Rpb24sIGFuZCB0aGVuIHVzZSBvdXIgZm9u
dCBhc2NlbnQvZGVzY2VudCBpbiB0aGUgYmxvY2sKICAgICAgICAgLy8gZGlyZWN0aW9uIChhbGln
bmVkIHRvIHRoZSByb290IGJveCdzIGJhc2VsaW5lKS4KLSAgICAgICAgaWYgKGlzPFJlbmRlckJv
eD4oKmN1cnJlbnQpKSB7Ci0gICAgICAgICAgICBSZW5kZXJCb3gmIHJlbmRlckJveCA9IGRvd25j
YXN0PFJlbmRlckJveD4oKmN1cnJlbnQpOworICAgICAgICBpZiAoaXM8UmVuZGVyQm94PihjdXJy
ZW50KSkgeworICAgICAgICAgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94
PihjdXJyZW50KTsKICAgICAgICAgICAgIGlmIChyZW5kZXJCb3guaW5saW5lQm94V3JhcHBlcigp
KSB7CiAgICAgICAgICAgICAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IHJlbmRl
ckJveC5pbmxpbmVCb3hXcmFwcGVyKCktPnJvb3QoKTsKICAgICAgICAgICAgICAgICBjb25zdCBS
ZW5kZXJTdHlsZSYgY29udGFpbmVyU3R5bGUgPSByb290Qm94LmlzRmlyc3RMaW5lKCkgPyBjb250
YWluZXItPmZpcnN0TGluZVN0eWxlKCkgOiBjb250YWluZXItPnN0eWxlKCk7CkBAIC02ODgsOSAr
Njg5LDkgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmdlbmVyYXRlQ3VsbGVkTGluZUJveFJlY3RzKEdl
bmVyYXRvckNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFIKICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYWRkUmVjdChGbG9hdFJlY3QobG9naWNhbFRvcCwg
cmVuZGVyQm94LmlubGluZUJveFdyYXBwZXIoKS0+eSgpIC0gcmVuZGVyQm94Lm1hcmdpblRvcCgp
LCBsb2dpY2FsSGVpZ2h0LCByZW5kZXJCb3guaGVpZ2h0KCkgKyByZW5kZXJCb3gudmVydGljYWxN
YXJnaW5FeHRlbnQoKSkpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGlzPFJl
bmRlcklubGluZT4oKmN1cnJlbnQpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVySW5s
aW5lPihjdXJyZW50KSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGRvZXNuJ3QgbmVl
ZCBsaW5lIGJveGVzIGVpdGhlciwgdGhlbiB3ZSBjYW4gcmVjdXIuCi0gICAgICAgICAgICBSZW5k
ZXJJbmxpbmUmIHJlbmRlcklubGluZSA9IGRvd25jYXN0PFJlbmRlcklubGluZT4oKmN1cnJlbnQp
OworICAgICAgICAgICAgYXV0byYgcmVuZGVySW5saW5lID0gZG93bmNhc3Q8UmVuZGVySW5saW5l
PihjdXJyZW50KTsKICAgICAgICAgICAgIGlmICghcmVuZGVySW5saW5lLmFsd2F5c0NyZWF0ZUxp
bmVCb3hlcygpKQogICAgICAgICAgICAgICAgIHJlbmRlcklubGluZS5nZW5lcmF0ZUN1bGxlZExp
bmVCb3hSZWN0cyhjb250ZXh0LCBjb250YWluZXIpOwogICAgICAgICAgICAgZWxzZSB7CkBAIC03
MTIsOCArNzEzLDggQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmdlbmVyYXRlQ3VsbGVkTGluZUJveFJl
Y3RzKEdlbmVyYXRvckNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFIKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm
IChpczxSZW5kZXJUZXh0PigqY3VycmVudCkpIHsKLSAgICAgICAgICAgIFJlbmRlclRleHQmIGN1
cnJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmN1cnJlbnQpOworICAgICAgICB9IGVsc2Ug
aWYgKGlzPFJlbmRlclRleHQ+KGN1cnJlbnQpKSB7CisgICAgICAgICAgICBhdXRvJiBjdXJyVGV4
dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KGN1cnJlbnQpOwogICAgICAgICAgICAgZm9yIChJbmxp
bmVUZXh0Qm94KiBjaGlsZFRleHQgPSBjdXJyVGV4dC5maXJzdFRleHRCb3goKTsgY2hpbGRUZXh0
OyBjaGlsZFRleHQgPSBjaGlsZFRleHQtPm5leHRUZXh0Qm94KCkpIHsKICAgICAgICAgICAgICAg
ICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gY2hpbGRUZXh0LT5yb290KCk7CiAgICAg
ICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGNvbnRhaW5lclN0eWxlID0gcm9vdEJveC5p
c0ZpcnN0TGluZSgpID8gY29udGFpbmVyLT5maXJzdExpbmVTdHlsZSgpIDogY29udGFpbmVyLT5z
dHlsZSgpOwpAQCAtNzI0LDggKzcyNSw4IEBAIHZvaWQgUmVuZGVySW5saW5lOjpnZW5lcmF0ZUN1
bGxlZExpbmVCb3hSZWN0cyhHZW5lcmF0b3JDb250ZXh0JiBjb250ZXh0LCBjb25zdCBSCiAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmFkZFJlY3QoRmxv
YXRSZWN0KGxvZ2ljYWxUb3AsIGNoaWxkVGV4dC0+eSgpLCBsb2dpY2FsSGVpZ2h0LCBjaGlsZFRl
eHQtPmxvZ2ljYWxXaWR0aCgpKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAo
aXM8UmVuZGVyTGluZUJyZWFrPigqY3VycmVudCkpIHsKLSAgICAgICAgICAgIGlmIChJbmxpbmVC
b3gqIGlubGluZUJveCA9IGRvd25jYXN0PFJlbmRlckxpbmVCcmVhaz4oKmN1cnJlbnQpLmlubGlu
ZUJveFdyYXBwZXIoKSkgeworICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlckxpbmVCcmVhaz4o
Y3VycmVudCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBpbmxpbmVCb3ggPSBkb3duY2FzdDxS
ZW5kZXJMaW5lQnJlYWs+KGN1cnJlbnQpLmlubGluZUJveFdyYXBwZXIoKSkgewogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIHVzZSBhIGhlbHBlciB0byBzaGFyZSB0aGVzZSB3
aXRoIHRleHQgcGF0aC4KICAgICAgICAgICAgICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290
Qm94ID0gaW5saW5lQm94LT5yb290KCk7CiAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5
bGUmIGNvbnRhaW5lclN0eWxlID0gcm9vdEJveC5pc0ZpcnN0TGluZSgpID8gY29udGFpbmVyLT5m
aXJzdExpbmVTdHlsZSgpIDogY29udGFpbmVyLT5zdHlsZSgpOwpAQCAtMTAzMywyNiArMTAzNCwy
NiBAQCBJbnRSZWN0IFJlbmRlcklubGluZTo6bGluZXNCb3VuZGluZ0JveCgpIGNvbnN0CiAKIElu
bGluZUJveCogUmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVGaXJzdExpbmVCb3goKSBjb25zdAog
ewotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOyBjdXJyZW50
OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoY3VycmVu
dC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgIGZvciAoYXV0byYgY3Vy
cmVudCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oKnRoaXMpKSB7CisgICAgICAgIGlm
IChjdXJyZW50LmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgCisKICAgICAgICAgLy8gV2Ugd2FudCB0byBnZXQgdGhl
IG1hcmdpbiBib3ggaW4gdGhlIGlubGluZSBkaXJlY3Rpb24sIGFuZCB0aGVuIHVzZSBvdXIgZm9u
dCBhc2NlbnQvZGVzY2VudCBpbiB0aGUgYmxvY2sKICAgICAgICAgLy8gZGlyZWN0aW9uIChhbGln
bmVkIHRvIHRoZSByb290IGJveCdzIGJhc2VsaW5lKS4KLSAgICAgICAgaWYgKGlzPFJlbmRlckJv
eD4oKmN1cnJlbnQpKSB7Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiByZW5kZXJCb3ggPSBkb3du
Y2FzdDxSZW5kZXJCb3g+KCpjdXJyZW50KTsKKyAgICAgICAgaWYgKGlzPFJlbmRlckJveD4oY3Vy
cmVudCkpIHsKKyAgICAgICAgICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJv
eD4oY3VycmVudCk7CiAgICAgICAgICAgICBpZiAocmVuZGVyQm94LmlubGluZUJveFdyYXBwZXIo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyQm94LmlubGluZUJveFdyYXBwZXIoKTsK
LSAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KCpjdXJyZW50KSkgewotICAg
ICAgICAgICAgUmVuZGVyTGluZUJyZWFrJiByZW5kZXJCUiA9IGRvd25jYXN0PFJlbmRlckxpbmVC
cmVhaz4oKmN1cnJlbnQpOworICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlckxpbmVCcmVhaz4o
Y3VycmVudCkpIHsKKyAgICAgICAgICAgIGF1dG8mIHJlbmRlckJSID0gZG93bmNhc3Q8UmVuZGVy
TGluZUJyZWFrPihjdXJyZW50KTsKICAgICAgICAgICAgIGlmIChyZW5kZXJCUi5pbmxpbmVCb3hX
cmFwcGVyKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlckJSLmlubGluZUJveFdyYXBw
ZXIoKTsKLSAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJJbmxpbmU+KCpjdXJyZW50KSkgewot
ICAgICAgICAgICAgUmVuZGVySW5saW5lJiByZW5kZXJJbmxpbmUgPSBkb3duY2FzdDxSZW5kZXJJ
bmxpbmU+KCpjdXJyZW50KTsKKyAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJJbmxpbmU+KGN1
cnJlbnQpKSB7CisgICAgICAgICAgICBhdXRvJiByZW5kZXJJbmxpbmUgPSBkb3duY2FzdDxSZW5k
ZXJJbmxpbmU+KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKElubGluZUJveCogcmVzdWx0ID0g
cmVuZGVySW5saW5lLmZpcnN0TGluZUJveEluY2x1ZGluZ0N1bGxpbmcoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlclRleHQ+KCpj
dXJyZW50KSkgewotICAgICAgICAgICAgUmVuZGVyVGV4dCYgcmVuZGVyVGV4dCA9IGRvd25jYXN0
PFJlbmRlclRleHQ+KCpjdXJyZW50KTsKKyAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJUZXh0
PihjdXJyZW50KSkgeworICAgICAgICAgICAgYXV0byYgcmVuZGVyVGV4dCA9IGRvd25jYXN0PFJl
bmRlclRleHQ+KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKHJlbmRlclRleHQuZmlyc3RUZXh0
Qm94KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlclRleHQuZmlyc3RUZXh0Qm94KCk7
CiAgICAgICAgIH0KQEAgLTEwOTYsMTMgKzEwOTcsMTMgQEAgTGF5b3V0UmVjdCBSZW5kZXJJbmxp
bmU6OmN1bGxlZElubGluZVZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goKSBjb25zdAogICAgIGdl
bmVyYXRlQ3VsbGVkTGluZUJveFJlY3RzKGNvbnRleHQsIHRoaXMpOwogICAgIExheW91dFJlY3Qg
cmVzdWx0KGVuY2xvc2luZ0xheW91dFJlY3QoZmxvYXRSZXN1bHQpKTsKICAgICBib29sIGlzSG9y
aXpvbnRhbCA9IHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKLSAgICBmb3IgKFJl
bmRlck9iamVjdCogY3VycmVudCA9IGZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1
cnJlbnQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGN1cnJlbnQtPmlzRmxvYXRpbmdP
ck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkKKyAgICBmb3IgKGF1dG8mIGN1cnJlbnQgOiBjaGlsZHJl
bk9mVHlwZTxSZW5kZXJPYmplY3Q+KCp0aGlzKSkgeworICAgICAgICBpZiAoY3VycmVudC5pc0Zs
b2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIAorCiAgICAgICAgIC8vIEZvciBvdmVyZmxvdyB3ZSBqdXN0IGhhdmUgdG8gcHJv
cGFnYXRlIGJ5IGhhbmQgYW5kIHJlY29tcHV0ZSBpdCBhbGwuCi0gICAgICAgIGlmIChpczxSZW5k
ZXJCb3g+KCpjdXJyZW50KSkgewotICAgICAgICAgICAgUmVuZGVyQm94JiByZW5kZXJCb3ggPSBk
b3duY2FzdDxSZW5kZXJCb3g+KCpjdXJyZW50KTsKKyAgICAgICAgaWYgKGlzPFJlbmRlckJveD4o
Y3VycmVudCkpIHsKKyAgICAgICAgICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRl
ckJveD4oY3VycmVudCk7CiAgICAgICAgICAgICBpZiAoIXJlbmRlckJveC5oYXNTZWxmUGFpbnRp
bmdMYXllcigpICYmIHJlbmRlckJveC5pbmxpbmVCb3hXcmFwcGVyKCkpIHsKICAgICAgICAgICAg
ICAgICBMYXlvdXRSZWN0IGxvZ2ljYWxSZWN0ID0gcmVuZGVyQm94LmxvZ2ljYWxWaXN1YWxPdmVy
Zmxvd1JlY3RGb3JQcm9wYWdhdGlvbigmc3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGlz
SG9yaXpvbnRhbCkgewpAQCAtMTExMywxNyArMTExNCwxNyBAQCBMYXlvdXRSZWN0IFJlbmRlcklu
bGluZTo6Y3VsbGVkSW5saW5lVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCgpIGNvbnN0CiAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhsb2dpY2FsUmVjdC50cmFuc3Bv
c2VkUmVjdCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSBpZiAoaXM8UmVuZGVySW5saW5lPigqY3VycmVudCkpIHsKKyAgICAgICAgfSBlbHNlIGlm
IChpczxSZW5kZXJJbmxpbmU+KGN1cnJlbnQpKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY2hp
bGQgZG9lc24ndCBuZWVkIGxpbmUgYm94ZXMgZWl0aGVyLCB0aGVuIHdlIGNhbiByZWN1ci4KLSAg
ICAgICAgICAgIFJlbmRlcklubGluZSYgcmVuZGVySW5saW5lID0gZG93bmNhc3Q8UmVuZGVySW5s
aW5lPigqY3VycmVudCk7CisgICAgICAgICAgICBhdXRvJiByZW5kZXJJbmxpbmUgPSBkb3duY2Fz
dDxSZW5kZXJJbmxpbmU+KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKCFyZW5kZXJJbmxpbmUu
YWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCiAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZO
b25aZXJvKHJlbmRlcklubGluZS5jdWxsZWRJbmxpbmVWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94
KCkpOwogICAgICAgICAgICAgZWxzZSBpZiAoIXJlbmRlcklubGluZS5oYXNTZWxmUGFpbnRpbmdM
YXllcigpKQogICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhyZW5kZXJJbmxp
bmUubGluZXNWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KCkpOwotICAgICAgICB9IGVsc2UgaWYg
KGlzPFJlbmRlclRleHQ+KCpjdXJyZW50KSkgeworICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRl
clRleHQ+KGN1cnJlbnQpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTsgT3ZlcmZsb3cgZnJvbSB0
ZXh0IGJveGVzIGlzIGxvc3QuIFdlIHdpbGwgbmVlZCB0byBjYWNoZSB0aGlzIGluZm9ybWF0aW9u
IGluCiAgICAgICAgICAgICAvLyBJbmxpbmVUZXh0Qm94ZXMuCi0gICAgICAgICAgICBSZW5kZXJU
ZXh0JiByZW5kZXJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmN1cnJlbnQpOworICAgICAg
ICAgICAgYXV0byYgcmVuZGVyVGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KGN1cnJlbnQpOwog
ICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKHJlbmRlclRleHQubGluZXNWaXN1YWxP
dmVyZmxvd0JvdW5kaW5nQm94KCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTQ1OCwyNCArMTQ1
OSwyNCBAQCB2b2lkIFJlbmRlcklubGluZTo6ZGlydHlMaW5lQm94ZXMoYm9vbCBmdWxsTGF5b3V0
KQogCiAgICAgaWYgKCFhbHdheXNDcmVhdGVMaW5lQm94ZXMoKSkgewogICAgICAgICAvLyBXZSBo
YXZlIHRvIGdyb3ZlbCBpbnRvIG91ciBjaGlsZHJlbiBpbiBvcmRlciB0byBkaXJ0eSB0aGUgYXBw
cm9wcmlhdGUgbGluZXMuCi0gICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmly
c3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkgewot
ICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQo
KSkKKyAgICAgICAgZm9yIChhdXRvJiBjdXJyZW50IDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2Jq
ZWN0PigqdGhpcykpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50LmlzRmxvYXRpbmdPck91dE9m
Rmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGlmIChpczxSZW5kZXJCb3g+KCpjdXJyZW50KSAmJiAhY3VycmVudC0+bmVlZHNMYXlvdXQoKSkg
ewotICAgICAgICAgICAgICAgIFJlbmRlckJveCYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVy
Qm94PigqY3VycmVudCk7CisgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQm94PihjdXJyZW50KSAm
JiAhY3VycmVudC5uZWVkc0xheW91dCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgcmVuZGVy
Qm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihjdXJyZW50KTsKICAgICAgICAgICAgICAgICBpZiAo
cmVuZGVyQm94LmlubGluZUJveFdyYXBwZXIoKSkKICAgICAgICAgICAgICAgICAgICAgcmVuZGVy
Qm94LmlubGluZUJveFdyYXBwZXIoKS0+cm9vdCgpLm1hcmtEaXJ0eSgpOwotICAgICAgICAgICAg
fSBlbHNlIGlmICghY3VycmVudC0+c2VsZk5lZWRzTGF5b3V0KCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoaXM8UmVuZGVySW5saW5lPigqY3VycmVudCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
UmVuZGVySW5saW5lJiByZW5kZXJJbmxpbmUgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KCpjdXJy
ZW50KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWN1cnJlbnQuc2VsZk5lZWRzTGF5b3V0KCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVySW5saW5lPihjdXJyZW50KSkgeworICAg
ICAgICAgICAgICAgICAgICBhdXRvJiByZW5kZXJJbmxpbmUgPSBkb3duY2FzdDxSZW5kZXJJbmxp
bmU+KGN1cnJlbnQpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKElubGluZUZsb3dCb3gqIGNo
aWxkTGluZSA9IHJlbmRlcklubGluZS5maXJzdExpbmVCb3goKTsgY2hpbGRMaW5lOyBjaGlsZExp
bmUgPSBjaGlsZExpbmUtPm5leHRMaW5lQm94KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBj
aGlsZExpbmUtPnJvb3QoKS5tYXJrRGlydHkoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGlzPFJlbmRlclRleHQ+KCpjdXJyZW50KSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJU
ZXh0JiByZW5kZXJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmN1cnJlbnQpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyVGV4dD4oY3VycmVudCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYXV0byYgcmVuZGVyVGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KGN1cnJl
bnQpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKElubGluZVRleHRCb3gqIGNoaWxkVGV4dCA9
IHJlbmRlclRleHQuZmlyc3RUZXh0Qm94KCk7IGNoaWxkVGV4dDsgY2hpbGRUZXh0ID0gY2hpbGRU
ZXh0LT5uZXh0VGV4dEJveCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRUZXh0LT5y
b290KCkubWFya0RpcnR5KCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJM
aW5lQnJlYWs+KCpjdXJyZW50KSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJMaW5lQnJl
YWsmIHJlbmRlckJSID0gZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPigqY3VycmVudCk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KGN1cnJlbnQpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGF1dG8mIHJlbmRlckJSID0gZG93bmNhc3Q8UmVuZGVyTGluZUJy
ZWFrPihjdXJyZW50KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlckJSLmlubGluZUJv
eFdyYXBwZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckJSLmlubGluZUJveFdy
YXBwZXIoKS0+cm9vdCgpLm1hcmtEaXJ0eSgpOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCmluZGV4IDI4NGNlYjE5YzQ2OGJh
MDNmOWYwZmMwNTlkOTA0MThlZDUzMDY1MWUuLjY3ZDZiZjQzMDEzNTA5ZmY3NDM4MmMwNTY2OWQ2
YzJlOTk4ODhlNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0SXRlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVt
LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkhUTUxVTGlzdEVsZW1lbnQuaCIKICNp
bmNsdWRlICJJbmxpbmVFbGVtZW50Qm94LmgiCiAjaW5jbHVkZSAiUHNldWRvRWxlbWVudC5oIgor
I2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUu
aCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlD
b2x1bW5GbG93VGhyZWFkLmgiCkBAIC0yMjcsMjMgKzIyOCwyMyBAQCBib29sIFJlbmRlckxpc3RJ
dGVtOjppc0VtcHR5KCkgY29uc3QKIHN0YXRpYyBSZW5kZXJCbG9jayogZ2V0UGFyZW50T2ZGaXJz
dExpbmVCb3goUmVuZGVyQmxvY2smIGN1cnJlbnQsIFJlbmRlck9iamVjdCYgbWFya2VyKQogewog
ICAgIGJvb2wgaW5RdWlya3NNb2RlID0gY3VycmVudC5kb2N1bWVudCgpLmluUXVpcmtzTW9kZSgp
OwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGN1cnJlbnQuZmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoY2hpbGQg
PT0gJm1hcmtlcikKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVy
T2JqZWN0PihjdXJyZW50KSkgeworICAgICAgICBpZiAoJmNoaWxkID09ICZtYXJrZXIpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoY2hpbGQtPmlzSW5saW5lKCkgJiYgKCFp
czxSZW5kZXJJbmxpbmU+KCpjaGlsZCkgfHwgY3VycmVudC5nZW5lcmF0ZXNMaW5lQm94ZXNGb3JJ
bmxpbmVDaGlsZChjaGlsZCkpKQorICAgICAgICBpZiAoY2hpbGQuaXNJbmxpbmUoKSAmJiAoIWlz
PFJlbmRlcklubGluZT4oY2hpbGQpIHx8IGN1cnJlbnQuZ2VuZXJhdGVzTGluZUJveGVzRm9ySW5s
aW5lQ2hpbGQoJmNoaWxkKSkpCiAgICAgICAgICAgICByZXR1cm4gJmN1cnJlbnQ7CiAKLSAgICAg
ICAgaWYgKGNoaWxkLT5pc0Zsb2F0aW5nKCkgfHwgY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25l
ZCgpKQorICAgICAgICBpZiAoY2hpbGQuaXNGbG9hdGluZygpIHx8IGNoaWxkLmlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGlzPFJl
bmRlclRhYmxlPigqY2hpbGQpIHx8ICFpczxSZW5kZXJCbG9jaz4oKmNoaWxkKSB8fCAoaXM8UmVu
ZGVyQm94PigqY2hpbGQpICYmIGRvd25jYXN0PFJlbmRlckJveD4oKmNoaWxkKS5pc1dyaXRpbmdN
b2RlUm9vdCgpKSkKKyAgICAgICAgaWYgKGlzPFJlbmRlclRhYmxlPihjaGlsZCkgfHwgIWlzPFJl
bmRlckJsb2NrPihjaGlsZCkgfHwgKGlzPFJlbmRlckJveD4oY2hpbGQpICYmIGRvd25jYXN0PFJl
bmRlckJveD4oY2hpbGQpLmlzV3JpdGluZ01vZGVSb290KCkpKQogICAgICAgICAgICAgYnJlYWs7
CiAKLSAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RJdGVtPihjdXJyZW50KSAmJiBpblF1aXJrc01v
ZGUgJiYgY2hpbGQtPm5vZGUoKSAmJiBpc0hUTUxMaXN0RWxlbWVudCgqY2hpbGQtPm5vZGUoKSkp
CisgICAgICAgIGlmIChpczxSZW5kZXJMaXN0SXRlbT4oY3VycmVudCkgJiYgaW5RdWlya3NNb2Rl
ICYmIGNoaWxkLm5vZGUoKSAmJiBpc0hUTUxMaXN0RWxlbWVudCgqY2hpbGQubm9kZSgpKSkKICAg
ICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGlmIChSZW5kZXJCbG9jayogbGluZUJveCA9IGdl
dFBhcmVudE9mRmlyc3RMaW5lQm94KGRvd25jYXN0PFJlbmRlckJsb2NrPigqY2hpbGQpLCBtYXJr
ZXIpKQorICAgICAgICBpZiAoUmVuZGVyQmxvY2sqIGxpbmVCb3ggPSBnZXRQYXJlbnRPZkZpcnN0
TGluZUJveChkb3duY2FzdDxSZW5kZXJCbG9jaz4oY2hpbGQpLCBtYXJrZXIpKQogICAgICAgICAg
ICAgcmV0dXJuIGxpbmVCb3g7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCmluZGV4IGVjN2UyZTQxYzNhMjIwOThmODA0NDc4ZWVmN2FlMmY1MWQ1NTlj
MDYuLjcxMTBjNTFiOTY5ZTU4MWIyYTc1YmE5NThjZTZkZmQ3OTZlMmRlY2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5j
bHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBzZXVkb0Vs
ZW1lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyQ291bnRlci5oIgogI2luY2x1ZGUgIlJlbmRlckZsb3dUaHJlYWQuaCIKICNpbmNsdWRlICJS
ZW5kZXJHZW9tZXRyeU1hcC5oIgpAQCAtMTY4LDEyICsxNjksMTUgQEAgdm9pZCBSZW5kZXJPYmpl
Y3Q6OnNldEZsb3dUaHJlYWRTdGF0ZUluY2x1ZGluZ0Rlc2NlbmRhbnRzKEZsb3dUaHJlYWRTdGF0
ZSBzdGF0ZSkKIHsKICAgICBzZXRGbG93VGhyZWFkU3RhdGUoc3RhdGUpOwogCi0gICAgZm9yIChS
ZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICBpZiAoIWlzPFJlbmRlckVsZW1lbnQ+KCp0aGlzKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBl
PFJlbmRlck9iamVjdD4oZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oKnRoaXMpKSkgewogICAgICAg
ICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBmcmFnbWVudGF0aW9uIGNvbnRleHQgaXQgYWxyZWFkeSB1
cGRhdGVkIHRoZSBkZXNjZW5kYW50cyBmbGFnIGFjY29yZGluZ2x5LgotICAgICAgICBpZiAoY2hp
bGQtPmlzUmVuZGVyRmxvd1RocmVhZCgpKQorICAgICAgICBpZiAoY2hpbGQuaXNSZW5kZXJGbG93
VGhyZWFkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgQVNTRVJUKHN0YXRlICE9
IGNoaWxkLT5mbG93VGhyZWFkU3RhdGUoKSk7Ci0gICAgICAgIGNoaWxkLT5zZXRGbG93VGhyZWFk
U3RhdGVJbmNsdWRpbmdEZXNjZW5kYW50cyhzdGF0ZSk7CisgICAgICAgIEFTU0VSVChzdGF0ZSAh
PSBjaGlsZC5mbG93VGhyZWFkU3RhdGUoKSk7CisgICAgICAgIGNoaWxkLnNldEZsb3dUaHJlYWRT
dGF0ZUluY2x1ZGluZ0Rlc2NlbmRhbnRzKHN0YXRlKTsKICAgICB9CiB9CiAKQEAgLTgwMCw4ICs4
MDQsMTIgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFkZEFic29sdXRlUmVjdEZvckxheWVyKExheW91
dFJlY3QmIHJlc3VsdCkKIHsKICAgICBpZiAoaGFzTGF5ZXIoKSkKICAgICAgICAgcmVzdWx0LnVu
aXRlKGFic29sdXRlQm91bmRpbmdCb3hSZWN0SWdub3JpbmdUcmFuc2Zvcm1zKCkpOwotICAgIGZv
ciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZFNsb3coKTsgY3VycmVudDsgY3Vy
cmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGN1cnJlbnQtPmFkZEFic29s
dXRlUmVjdEZvckxheWVyKHJlc3VsdCk7CisKKyAgICBpZiAoIWlzPFJlbmRlckVsZW1lbnQ+KCp0
aGlzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVu
T2ZUeXBlPFJlbmRlck9iamVjdD4oZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oKnRoaXMpKSkKKyAg
ICAgICAgY2hpbGQuYWRkQWJzb2x1dGVSZWN0Rm9yTGF5ZXIocmVzdWx0KTsKIH0KIAogLy8gRklY
TUU6IGNoYW5nZSB0aGlzIHRvIHVzZSB0aGUgc3VidHJlZVBhaW50IHRlcm1pbm9sb2d5CkBAIC04
MDksOCArODE3LDEwIEBAIExheW91dFJlY3QgUmVuZGVyT2JqZWN0OjpwYWludGluZ1Jvb3RSZWN0
KExheW91dFJlY3QmIHRvcExldmVsUmVjdCkKIHsKICAgICBMYXlvdXRSZWN0IHJlc3VsdCA9IGFi
c29sdXRlQm91bmRpbmdCb3hSZWN0SWdub3JpbmdUcmFuc2Zvcm1zKCk7CiAgICAgdG9wTGV2ZWxS
ZWN0ID0gcmVzdWx0OwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGls
ZFNsb3coKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpCi0gICAg
ICAgIGN1cnJlbnQtPmFkZEFic29sdXRlUmVjdEZvckxheWVyKHJlc3VsdCk7CisgICAgaWYgKGlz
PFJlbmRlckVsZW1lbnQ+KCp0aGlzKSkgeworICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hp
bGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0Pihkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqdGhpcykp
KQorICAgICAgICAgICAgY2hpbGQuYWRkQWJzb2x1dGVSZWN0Rm9yTGF5ZXIocmVzdWx0KTsKKyAg
ICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTU4OCw4ICsxNTk4LDEwIEBAIHZvaWQg
UmVuZGVyT2JqZWN0OjpyZW1vdmVGcm9tUmVuZGVyRmxvd1RocmVhZEluY2x1ZGluZ0Rlc2NlbmRh
bnRzKGJvb2wgc2hvdWxkVXBkCiAgICAgaWYgKGlzUmVuZGVyRmxvd1RocmVhZCgpKQogICAgICAg
ICBzaG91bGRVcGRhdGVTdGF0ZSA9IGZhbHNlOwogCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNo
aWxkID0gZmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpCi0gICAgICAgIGNoaWxkLT5yZW1vdmVGcm9tUmVuZGVyRmxvd1RocmVhZEluY2x1ZGluZ0Rl
c2NlbmRhbnRzKHNob3VsZFVwZGF0ZVN0YXRlKTsKKyAgICBpZiAoaXM8UmVuZGVyRWxlbWVudD4o
KnRoaXMpKSB7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5k
ZXJPYmplY3Q+KGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCp0aGlzKSkpCisgICAgICAgICAgICBj
aGlsZC5yZW1vdmVGcm9tUmVuZGVyRmxvd1RocmVhZEluY2x1ZGluZ0Rlc2NlbmRhbnRzKHNob3Vs
ZFVwZGF0ZVN0YXRlKTsKKyAgICB9CiAKICAgICAvLyBXZSBoYXZlIHRvIGFzayBmb3Igb3VyIGNv
bnRhaW5pbmcgZmxvdyB0aHJlYWQgYXMgaXQgbWF5IGJlIGFib3ZlIHRoZSByZW1vdmVkIHN1Yi10
cmVlLgogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2sgPSB0
aGlzLT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CkBAIC0xNjI3LDggKzE2MzksMTEgQEAg
dm9pZCBSZW5kZXJPYmplY3Q6OmludmFsaWRhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrSW5j
bHVkaW5nRGVzY2VuZGFudHMoUmVuZGUKICAgICBpZiAoZmxvd1RocmVhZCkKICAgICAgICAgZmxv
d1RocmVhZC0+cmVtb3ZlRmxvd0NoaWxkSW5mbyh0aGlzKTsKIAotICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGRTbG93KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpKQotICAgICAgICBjaGlsZC0+aW52YWxpZGF0ZUZsb3dUaHJlYWRDb250YWluaW5n
QmxvY2tJbmNsdWRpbmdEZXNjZW5kYW50cyhmbG93VGhyZWFkKTsKKyAgICBpZiAoIWlzPFJlbmRl
ckVsZW1lbnQ+KCp0aGlzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiBjaGls
ZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4o
KnRoaXMpKSkKKyAgICAgICAgY2hpbGQuaW52YWxpZGF0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxv
Y2tJbmNsdWRpbmdEZXNjZW5kYW50cyhmbG93VGhyZWFkKTsKIH0KIAogc3RhdGljIHZvaWQgY29s
bGFwc2VBbm9ueW1vdXNUYWJsZVJvd3NJZk5lZWRlZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
cmVyVG9CZURlc3Ryb3llZCkKQEAgLTE3MjMsOCArMTczOCwxMiBAQCB2b2lkIFJlbmRlck9iamVj
dDo6dXBkYXRlRHJhZ1N0YXRlKGJvb2wgZHJhZ09uKQogICAgIHNldElzRHJhZ2dpbmcoZHJhZ09u
KTsKICAgICBpZiAodmFsdWVDaGFuZ2VkICYmIG5vZGUoKSAmJiAoc3R5bGUoKS5hZmZlY3RlZEJ5
RHJhZygpIHx8IChpczxFbGVtZW50Pigqbm9kZSgpKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9k
ZSgpKS5jaGlsZHJlbkFmZmVjdGVkQnlEcmFnKCkpKSkKICAgICAgICAgbm9kZSgpLT5zZXROZWVk
c1N0eWxlUmVjYWxjKCk7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxk
U2xvdygpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY3Vyci0+
dXBkYXRlRHJhZ1N0YXRlKGRyYWdPbik7CisKKyAgICBpZiAoIWlzPFJlbmRlckVsZW1lbnQ+KCp0
aGlzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVu
T2ZUeXBlPFJlbmRlck9iamVjdD4oZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oKnRoaXMpKSkKKyAg
ICAgICAgY2hpbGQudXBkYXRlRHJhZ1N0YXRlKGRyYWdPbik7CiB9CiAKIGJvb2wgUmVuZGVyT2Jq
ZWN0Ojppc0NvbXBvc2l0ZWQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZS5jcHAKaW5kZXggYjE0YmE1ZmY1ODRiOWMxZGE3ZDBlNGRlNTQzYWJiYzVjNDc1ZjUwNS4u
MjI3MGMyYTYzYjIyNGEyY2NlZWFhN2RmOTUxOTAxNjU4M2ZkMjE0MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkxh
eW91dFJlcGFpbnRlci5oIgorI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKICNpbmNs
dWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIKQEAgLTg3OSwxMiArODgwLDEyIEBAIHZvaWQg
UmVuZGVyVGFibGU6OmFwcGVuZENvbHVtbih1bnNpZ25lZCBzcGFuKQogCiBSZW5kZXJUYWJsZUNv
bCogUmVuZGVyVGFibGU6OmZpcnN0Q29sdW1uKCkgY29uc3QKIHsKLSAgICBmb3IgKFJlbmRlck9i
amVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpKSB7Ci0gICAgICAgIGlmIChpczxSZW5kZXJUYWJsZUNvbD4oKmNoaWxkKSkKLSAgICAg
ICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJUYWJsZUNvbD4oY2hpbGQpOworICAgIGZvciAo
YXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJPYmplY3Q+KCp0aGlzKSkgeworICAg
ICAgICBpZiAoaXM8UmVuZGVyVGFibGVDb2w+KGNoaWxkKSkKKyAgICAgICAgICAgIHJldHVybiAm
Y29uc3RfY2FzdDxSZW5kZXJUYWJsZUNvbCY+KGRvd25jYXN0PFJlbmRlclRhYmxlQ29sPihjaGls
ZCkpOwogCiAgICAgICAgIC8vIFdlIGFsbG93IG9ubHkgdGFibGUtY2FwdGlvbnMgYmVmb3JlIGNv
bHVtbnMgb3IgY29sdW1uLWdyb3Vwcy4KLSAgICAgICAgaWYgKCFpczxSZW5kZXJUYWJsZUNhcHRp
b24+KCpjaGlsZCkpCisgICAgICAgIGlmICghaXM8UmVuZGVyVGFibGVDYXB0aW9uPihjaGlsZCkp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwCmluZGV4IDY5OGVjMTk4OWZjMGRiZGNiZjJkODcy
ZTMzZTM0MDRkNTUxMTI5YWEuLmIwMWY2ZjY4OTY4MTRmM2VkN2U1MGVmN2U0OGIxZmYwOWVlYzIx
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcApAQCAt
MjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFRh
YmxlQ29sRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKICNpbmNs
dWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGFibGVDYXB0aW9uLmgiCkBAIC0xMzEsOCArMTMyLDggQEAgdm9pZCBSZW5kZXJU
YWJsZUNvbDo6Y2xlYXJQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHlCaXRzKCkKIHsKICAgICBz
ZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoZmFsc2UpOwogCi0gICAgZm9yIChSZW5kZXJP
YmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPnNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShm
YWxzZSk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVj
dD4oKnRoaXMpKQorICAgICAgICBjaGlsZC5zZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHko
ZmFsc2UpOwogfQogCiBSZW5kZXJUYWJsZSogUmVuZGVyVGFibGVDb2w6OnRhYmxlKCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5k
ZXggMjIzMDM2ZjY5MjU0YjBmYWM5ZTI5Y2FjZmE0YzM2OGE4YjhhZGFmZS4uNmY1ODY5N2NiOWRi
ODdhNmIyYTVkYjg3ZjA1NzNjOWQ0NTU4MWM0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUGFp
bnRJbmZvLmgiCisjaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGFibGVDb2wuaCIKQEAgLTU3MCwxMSArNTcxLDExIEBAIHZvaWQgUmVu
ZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKCkKICAgICAgICAgICAgIGJvb2wgZmxleEFsbENo
aWxkcmVuID0gY2VsbC0+c3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCkuaXNGaXhlZCgpCiAgICAgICAg
ICAgICAgICAgfHwgKCF0YWJsZSgpLT5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKS5pc0F1dG8oKSAm
JiBySGVpZ2h0ICE9IGNlbGwtPmxvZ2ljYWxIZWlnaHQoKSk7CiAKLSAgICAgICAgICAgIGZvciAo
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNlbGwtPmZpcnN0Q2hpbGQoKTsgcmVuZGVyZXI7IHJl
bmRlcmVyID0gcmVuZGVyZXItPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
IWlzPFJlbmRlclRleHQ+KCpyZW5kZXJlcikgJiYgcmVuZGVyZXItPnN0eWxlKCkubG9naWNhbEhl
aWdodCgpLmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpICYmIChmbGV4QWxsQ2hpbGRyZW4gfHwgKChy
ZW5kZXJlci0+aXNSZXBsYWNlZCgpIHx8IChpczxSZW5kZXJCb3g+KCpyZW5kZXJlcikgJiYgZG93
bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIpLnNjcm9sbHNPdmVyZmxvdygpKSkgJiYgIWlzPFJl
bmRlclRleHRDb250cm9sPigqcmVuZGVyZXIpKSkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYg
cmVuZGVyZXIgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJPYmplY3Q+KCpjZWxsKSkgeworICAgICAg
ICAgICAgICAgIGlmICghaXM8UmVuZGVyVGV4dD4ocmVuZGVyZXIpICYmIHJlbmRlcmVyLnN0eWxl
KCkubG9naWNhbEhlaWdodCgpLmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpICYmIChmbGV4QWxsQ2hp
bGRyZW4gfHwgKChyZW5kZXJlci5pc1JlcGxhY2VkKCkgfHwgKGlzPFJlbmRlckJveD4ocmVuZGVy
ZXIpICYmIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpLnNjcm9sbHNPdmVyZmxvdygpKSkg
JiYgIWlzPFJlbmRlclRleHRDb250cm9sPihyZW5kZXJlcikpKSkgewogICAgICAgICAgICAgICAg
ICAgICAvLyBUYWJsZXMgd2l0aCBubyBzZWN0aW9ucyBkbyBub3QgZmxleC4KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpczxSZW5kZXJUYWJsZT4oKnJlbmRlcmVyKSB8fCBkb3duY2FzdDxSZW5k
ZXJUYWJsZT4oKnJlbmRlcmVyKS5oYXNTZWN0aW9ucygpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZW5kZXJlci0+c2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpczxSZW5kZXJUYWJsZT4ocmVuZGVyZXIpIHx8IGRvd25jYXN0PFJlbmRl
clRhYmxlPihyZW5kZXJlcikuaGFzU2VjdGlvbnMoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmVuZGVyZXIuc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNlbGxDaGlsZHJlbkZsZXggPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRy
ZWVBc1RleHQuY3BwCmluZGV4IGNhYzBmNzc0YjYxOGE5MjJiMjZmYmNkMTYxMDgzOTQ5NTJmMTgy
NTUuLjBlOWEzOTBhNjNlMTdhMmJmNzFkMjA5OWJmZDUxODg1ZmQ5ZjkxODkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTU2NiwxMCArNTY2
LDEwIEBAIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgbywg
aW50IGluZGVudCwgUmVuZGVyQXNUZXh0QmVoYXZpCiAgICAgICAgIH0KIAogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGRvd25jYXN0PFJlbmRlckVsZW1l
bnQ+KG8pLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkp
IHsKLSAgICAgICAgICAgIGlmIChjaGlsZC0+aGFzTGF5ZXIoKSkKKyAgICAgICAgZm9yIChhdXRv
JiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oZG93bmNhc3Q8UmVuZGVyRWxl
bWVudD4obykpKSB7CisgICAgICAgICAgICBpZiAoY2hpbGQuaGFzTGF5ZXIoKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHdyaXRlKHRzLCAqY2hpbGQsIGluZGVudCAr
IDEsIGJlaGF2aW9yKTsKKyAgICAgICAgICAgIHdyaXRlKHRzLCBjaGlsZCwgaW5kZW50ICsgMSwg
YmVoYXZpb3IpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAppbmRleCA1MTNmODY2Y2ZjMGE4YTY1ODM1YTYwMTBk
MTMxMTliZDFiZmNlODZjLi5mN2M0ZTQyMmUzYTNkMzY1MGNkODk4ZTYwNjRmZTJjODQwZDBlYzQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAK
QEAgLTExOCwxNCArMTE4LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2xsZWN0TGF5b3V0QXR0
cmlidXRlcyhSZW5kZXJPYmplY3QqIHRleHQsIFZlY3RvcjxTVkdUZXh0TGF5CiAgICAgfQogfQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgZmluZFByZXZpb3VzQW5kTmV4dEF0dHJpYnV0ZXMoUmVuZGVy
RWxlbWVudCogc3RhcnQsIFJlbmRlclNWR0lubGluZVRleHQqIGxvY2F0ZUVsZW1lbnQsIGJvb2wm
IHN0b3BBZnRlck5leHQsIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzKiYgcHJldmlvdXMsIFNWR1Rl
eHRMYXlvdXRBdHRyaWJ1dGVzKiYgbmV4dCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBmaW5kUHJldmlv
dXNBbmROZXh0QXR0cmlidXRlcyhSZW5kZXJFbGVtZW50JiBzdGFydCwgUmVuZGVyU1ZHSW5saW5l
VGV4dCogbG9jYXRlRWxlbWVudCwgYm9vbCYgc3RvcEFmdGVyTmV4dCwgU1ZHVGV4dExheW91dEF0
dHJpYnV0ZXMqJiBwcmV2aW91cywgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqJiBuZXh0KQogewog
ICAgIEFTU0VSVChzdGFydCk7CiAgICAgQVNTRVJUKGxvY2F0ZUVsZW1lbnQpOwogICAgIC8vIEZJ
WE1FOiBNYWtlIHRoaXMgaXRlcmF0aXZlLgotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9
IHN0YXJ0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KSB7Ci0gICAgICAgIGlmIChpczxSZW5kZXJTVkdJbmxpbmVUZXh0PigqY2hpbGQpKSB7Ci0gICAg
ICAgICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0JiB0ZXh0ID0gZG93bmNhc3Q8UmVuZGVyU1ZHSW5s
aW5lVGV4dD4oKmNoaWxkKTsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8
UmVuZGVyT2JqZWN0PihzdGFydCkpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlclNWR0lubGluZVRl
eHQ+KGNoaWxkKSkgeworICAgICAgICAgICAgYXV0byYgdGV4dCA9IGRvd25jYXN0PFJlbmRlclNW
R0lubGluZVRleHQ+KGNoaWxkKTsKICAgICAgICAgICAgIGlmIChsb2NhdGVFbGVtZW50ICE9ICZ0
ZXh0KSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0b3BBZnRlck5leHQpIHsKICAgICAgICAgICAg
ICAgICAgICAgbmV4dCA9IHRleHQubGF5b3V0QXR0cmlidXRlcygpOwpAQCAtMTQwLDcgKzE0MCw3
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaW5kUHJldmlvdXNBbmROZXh0QXR0cmlidXRlcyhSZW5k
ZXJFbGVtZW50KiBzdGFydCwgUmVuZGVyU1ZHCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmICghaXM8UmVuZGVyU1ZHSW5saW5lPigqY2hpbGQpKQorICAgICAg
ICBpZiAoIWlzPFJlbmRlclNWR0lubGluZT4oY2hpbGQpKQogICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgaWYgKGZpbmRQcmV2aW91c0FuZE5leHRBdHRyaWJ1dGVzKGRvd25jYXN0PFJl
bmRlckVsZW1lbnQ+KGNoaWxkKSwgbG9jYXRlRWxlbWVudCwgc3RvcEFmdGVyTmV4dCwgcHJldmlv
dXMsIG5leHQpKQpAQCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6c3VidHJl
ZUNoaWxkV2FzQWRkZWQoUmVuZGVyT2JqZWN0KiBjaGlsZCkKICAgICAgICAgICAgIFNWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzKiBwcmV2aW91cyA9IDA7CiAgICAgICAgICAgICBTVkdUZXh0TGF5b3V0
QXR0cmlidXRlcyogbmV4dCA9IDA7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNoaWxkLCAm
YXR0cmlidXRlcy0+Y29udGV4dCgpID09IGNoaWxkKTsKLSAgICAgICAgICAgIGZpbmRQcmV2aW91
c0FuZE5leHRBdHRyaWJ1dGVzKHRoaXMsICZhdHRyaWJ1dGVzLT5jb250ZXh0KCksIHN0b3BBZnRl
ck5leHQsIHByZXZpb3VzLCBuZXh0KTsKKyAgICAgICAgICAgIGZpbmRQcmV2aW91c0FuZE5leHRB
dHRyaWJ1dGVzKCp0aGlzLCAmYXR0cmlidXRlcy0+Y29udGV4dCgpLCBzdG9wQWZ0ZXJOZXh0LCBw
cmV2aW91cywgbmV4dCk7CiAKICAgICAgICAgICAgIGlmIChwcmV2aW91cykKICAgICAgICAgICAg
ICAgICBtX2xheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmJ1aWxkTGF5b3V0QXR0cmlidXRlc0ZvclRl
eHRSZW5kZXJlcihwcmV2aW91cy0+Y29udGV4dCgpKTsKQEAgLTI1Miw3ICsyNTIsNyBAQCB2b2lk
IFJlbmRlclNWR1RleHQ6OnN1YnRyZWVDaGlsZFdpbGxCZVJlbW92ZWQoUmVuZGVyT2JqZWN0KiBj
aGlsZCwgVmVjdG9yPFNWR1RleAogICAgIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzKiBwcmV2aW91
cyA9IG51bGxwdHI7CiAgICAgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqIG5leHQgPSBudWxscHRy
OwogICAgIGlmICghZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKQotICAgICAgICBmaW5kUHJldmlv
dXNBbmROZXh0QXR0cmlidXRlcyh0aGlzLCAmdGV4dCwgc3RvcEFmdGVyTmV4dCwgcHJldmlvdXMs
IG5leHQpOworICAgICAgICBmaW5kUHJldmlvdXNBbmROZXh0QXR0cmlidXRlcygqdGhpcywgJnRl
eHQsIHN0b3BBZnRlck5leHQsIHByZXZpb3VzLCBuZXh0KTsKIAogICAgIGlmIChwcmV2aW91cykK
ICAgICAgICAgYWZmZWN0ZWRBdHRyaWJ1dGVzLmFwcGVuZChwcmV2aW91cyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAppbmRleCA3Zjcy
MjE2YzcwMWJjZWFjYjBlODQ2NDQ5MmRhMjJjNDMyNmIwNDAwLi5kZGJkYmUzNmIwZWMwZGQzNTlj
ZjIzMGFjZjU1ZjhjYTM2OWMwZTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJT
VkdSZW5kZXJTdXBwb3J0LmgiCiAKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKKyNpbmNs
dWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgog
I2luY2x1ZGUgIlJlbmRlckdlb21ldHJ5TWFwLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3Iu
aCIKQEAgLTEzMSw3ICsxMzIsNyBAQCBib29sIFNWR1JlbmRlclN1cHBvcnQ6OmNoZWNrRm9yU1ZH
UmVwYWludER1cmluZ0xheW91dChjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZQogfQogCiAvLyBV
cGRhdGUgYSBib3VuZGluZyBib3ggdGFraW5nIGludG8gYWNjb3VudCB0aGUgdmFsaWRpdHkgb2Yg
dGhlIG90aGVyIGJvdW5kaW5nIGJveC4KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVPYmplY3RC
b3VuZGluZ0JveChGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94LCBib29sJiBvYmplY3RCb3Vu
ZGluZ0JveFZhbGlkLCBSZW5kZXJPYmplY3QqIG90aGVyLCBGbG9hdFJlY3Qgb3RoZXJCb3VuZGlu
Z0JveCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVPYmplY3RCb3VuZGluZ0JveChGbG9hdFJl
Y3QmIG9iamVjdEJvdW5kaW5nQm94LCBib29sJiBvYmplY3RCb3VuZGluZ0JveFZhbGlkLCBjb25z
dCBSZW5kZXJPYmplY3QqIG90aGVyLCBGbG9hdFJlY3Qgb3RoZXJCb3VuZGluZ0JveCkKIHsKICAg
ICBib29sIG90aGVyVmFsaWQgPSBpczxSZW5kZXJTVkdDb250YWluZXI+KCpvdGhlcikgPyBkb3du
Y2FzdDxSZW5kZXJTVkdDb250YWluZXI+KCpvdGhlcikuaXNPYmplY3RCb3VuZGluZ0JveFZhbGlk
KCkgOiB0cnVlOwogICAgIGlmICghb3RoZXJWYWxpZCkKQEAgLTE1NSwyMSArMTU2LDIxIEBAIHZv
aWQgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXMoY29uc3Qg
UmVuZGVyRWxlbWVudCYgY29udGFpCiAgICAgLy8gV2hlbiBjb21wdXRpbmcgdGhlIHN0cm9rZUJv
dW5kaW5nQm94LCB3ZSB1c2UgdGhlIHJlcGFpbnRSZWN0cyBvZiB0aGUgY29udGFpbmVyJ3MgY2hp
bGRyZW4gc28gdGhhdCB0aGUgY29udGFpbmVyJ3Mgc3Ryb2tlIGluY2x1ZGVzCiAgICAgLy8gdGhl
IHJlc291cmNlcyBhcHBsaWVkIHRvIHRoZSBjaGlsZHJlbiAoc3VjaCBhcyBjbGlwcyBhbmQgZmls
dGVycykuIFRoaXMgYWxsb3dzIGZpbHRlcnMgYXBwbGllZCB0byBjb250YWluZXJzIHRvIGNvcnJl
Y3RseSBib3VuZAogICAgIC8vIHRoZSBjaGlsZHJlbiwgYW5kIGFsc28gaW1wcm92ZXMgaW5saW5p
bmcgb2YgU1ZHIGNvbnRlbnQsIGFzIHRoZSBzdHJva2UgYm91bmQgaXMgdXNlZCBpbiB0aGF0IHNp
dHVhdGlvbiBhbHNvLgotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gY29udGFpbmVy
LmZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkp
IHsKLSAgICAgICAgaWYgKGN1cnJlbnQtPmlzU1ZHSGlkZGVuQ29udGFpbmVyKCkpCisgICAgZm9y
IChhdXRvJiBjdXJyZW50IDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0Pihjb250YWluZXIp
KSB7CisgICAgICAgIGlmIChjdXJyZW50LmlzU1ZHSGlkZGVuQ29udGFpbmVyKCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBEb24ndCBpbmNsdWRlIGVsZW1lbnRzIGluIHRo
ZSB1bmlvbiB0aGF0IGRvIG5vdCByZW5kZXIuCi0gICAgICAgIGlmIChpczxSZW5kZXJTVkdTaGFw
ZT4oKmN1cnJlbnQpICYmIGRvd25jYXN0PFJlbmRlclNWR1NoYXBlPigqY3VycmVudCkuaXNSZW5k
ZXJpbmdEaXNhYmxlZCgpKQorICAgICAgICBpZiAoaXM8UmVuZGVyU1ZHU2hhcGU+KGN1cnJlbnQp
ICYmIGRvd25jYXN0PFJlbmRlclNWR1NoYXBlPihjdXJyZW50KS5pc1JlbmRlcmluZ0Rpc2FibGVk
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSA9IGN1cnJlbnQtPmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKTsKKyAgICAg
ICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0gPSBjdXJyZW50LmxvY2FsVG9QYXJl
bnRUcmFuc2Zvcm0oKTsKICAgICAgICAgaWYgKHRyYW5zZm9ybS5pc0lkZW50aXR5KCkpIHsKLSAg
ICAgICAgICAgIHVwZGF0ZU9iamVjdEJvdW5kaW5nQm94KG9iamVjdEJvdW5kaW5nQm94LCBvYmpl
Y3RCb3VuZGluZ0JveFZhbGlkLCBjdXJyZW50LCBjdXJyZW50LT5vYmplY3RCb3VuZGluZ0JveCgp
KTsKLSAgICAgICAgICAgIHN0cm9rZUJvdW5kaW5nQm94LnVuaXRlKGN1cnJlbnQtPnJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOworICAgICAgICAgICAgdXBkYXRlT2JqZWN0Qm91bmRp
bmdCb3gob2JqZWN0Qm91bmRpbmdCb3gsIG9iamVjdEJvdW5kaW5nQm94VmFsaWQsICZjdXJyZW50
LCBjdXJyZW50Lm9iamVjdEJvdW5kaW5nQm94KCkpOworICAgICAgICAgICAgc3Ryb2tlQm91bmRp
bmdCb3gudW5pdGUoY3VycmVudC5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHVwZGF0ZU9iamVjdEJvdW5kaW5nQm94KG9iamVj
dEJvdW5kaW5nQm94LCBvYmplY3RCb3VuZGluZ0JveFZhbGlkLCBjdXJyZW50LCB0cmFuc2Zvcm0u
bWFwUmVjdChjdXJyZW50LT5vYmplY3RCb3VuZGluZ0JveCgpKSk7Ci0gICAgICAgICAgICBzdHJv
a2VCb3VuZGluZ0JveC51bml0ZSh0cmFuc2Zvcm0ubWFwUmVjdChjdXJyZW50LT5yZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpKSk7CisgICAgICAgICAgICB1cGRhdGVPYmplY3RCb3VuZGlu
Z0JveChvYmplY3RCb3VuZGluZ0JveCwgb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCwgJmN1cnJlbnQs
IHRyYW5zZm9ybS5tYXBSZWN0KGN1cnJlbnQub2JqZWN0Qm91bmRpbmdCb3goKSkpOworICAgICAg
ICAgICAgc3Ryb2tlQm91bmRpbmdCb3gudW5pdGUodHJhbnNmb3JtLm1hcFJlY3QoY3VycmVudC5y
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTI0Nyw1OCArMjQ4LDU3IEBAIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4o
UmVuZGVyRWxlbWVudCYgc3RhcnQsIGJvb2wgc2VsZk5lZWRzTGF5b3V0CiAgICAgYm9vbCBuZWVk
c0JvdW5kYXJpZXNVcGRhdGUgPSBzdGFydC5uZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKICAgICBI
YXNoU2V0PFJlbmRlckVsZW1lbnQqPiBlbGVtZW50c1RoYXREaWROb3RSZWNlaXZlTGF5b3V0Owog
Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gc3RhcnQuZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAoYXV0byYgY2hpbGQg
OiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJPYmplY3Q+KHN0YXJ0KSkgewogICAgICAgICBib29sIG5l
ZWRzTGF5b3V0ID0gc2VsZk5lZWRzTGF5b3V0OwotICAgICAgICBib29sIGNoaWxkRXZlckhhZExh
eW91dCA9IGNoaWxkLT5ldmVySGFkTGF5b3V0KCk7CisgICAgICAgIGJvb2wgY2hpbGRFdmVySGFk
TGF5b3V0ID0gY2hpbGQuZXZlckhhZExheW91dCgpOwogCiAgICAgICAgIGlmIChuZWVkc0JvdW5k
YXJpZXNVcGRhdGUgJiYgaGFzU1ZHU2hhZG93KSB7CiAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZl
IGEgc2hhZG93LCBvdXIgc2hhZG93IGlzIGJha2VkIGludG8gb3VyIGNoaWxkcmVuJ3MgY2FjaGVk
IGJvdW5kYXJpZXMsCiAgICAgICAgICAgICAvLyBzbyB0aGV5IG5lZWQgdG8gdXBkYXRlLgotICAg
ICAgICAgICAgY2hpbGQtPnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOworICAgICAgICAgICAg
Y2hpbGQuc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7CiAgICAgICAgICAgICBuZWVkc0xheW91
dCA9IHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAodHJhbnNmb3JtQ2hhbmdlZCkgewog
ICAgICAgICAgICAgLy8gSWYgdGhlIHRyYW5zZm9ybSBjaGFuZ2VkIHdlIG5lZWQgdG8gdXBkYXRl
IHRoZSB0ZXh0IG1ldHJpY3MgKG5vdGU6IHRoaXMgYWxzbyBoYXBwZW5zIGZvciBsYXlvdXRTaXpl
Q2hhbmdlZD10cnVlKS4KLSAgICAgICAgICAgIGlmIChpczxSZW5kZXJTVkdUZXh0PigqY2hpbGQp
KQotICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclNWR1RleHQ+KCpjaGlsZCkuc2V0TmVl
ZHNUZXh0TWV0cmljc1VwZGF0ZSgpOworICAgICAgICAgICAgaWYgKGlzPFJlbmRlclNWR1RleHQ+
KGNoaWxkKSkKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJTVkdUZXh0PihjaGlsZCku
c2V0TmVlZHNUZXh0TWV0cmljc1VwZGF0ZSgpOwogICAgICAgICAgICAgbmVlZHNMYXlvdXQgPSB0
cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGxheW91dFNpemVDaGFuZ2VkKSB7CisgICAg
ICAgIGlmIChsYXlvdXRTaXplQ2hhbmdlZCAmJiBpczxTVkdFbGVtZW50PihjaGlsZC5ub2RlKCkp
KSB7CiAgICAgICAgICAgICAvLyBXaGVuIHNlbGZOZWVkc0xheW91dCBpcyBmYWxzZSBhbmQgdGhl
IGxheW91dCBzaXplIGNoYW5nZWQsIHdlIGhhdmUgdG8gY2hlY2sgd2hldGhlciB0aGlzIGNoaWxk
IHVzZXMgcmVsYXRpdmUgbGVuZ3RocwotICAgICAgICAgICAgaWYgKFNWR0VsZW1lbnQqIGVsZW1l
bnQgPSBpczxTVkdFbGVtZW50PigqY2hpbGQtPm5vZGUoKSkgPyBkb3duY2FzdDxTVkdFbGVtZW50
PihjaGlsZC0+bm9kZSgpKSA6IG51bGxwdHIpIHsKLSAgICAgICAgICAgICAgICBpZiAoZWxlbWVu
dC0+aGFzUmVsYXRpdmVMZW5ndGhzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB0
aGUgbGF5b3V0IHNpemUgY2hhbmdlZCBhbmQgd2hlbiB1c2luZyByZWxhdGl2ZSB2YWx1ZXMgdGVs
bCB0aGUgUmVuZGVyU1ZHU2hhcGUgdG8gdXBkYXRlIGl0cyBzaGFwZSBvYmplY3QKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzPFJlbmRlclNWR1NoYXBlPigqY2hpbGQpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KCpjaGlsZCkuc2V0TmVlZHNTaGFw
ZVVwZGF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJTVkdUZXh0
PigqY2hpbGQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTVkdUZXh0JiBzdmdU
ZXh0ID0gZG93bmNhc3Q8UmVuZGVyU1ZHVGV4dD4oKmNoaWxkKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHN2Z1RleHQuc2V0TmVlZHNUZXh0TWV0cmljc1VwZGF0ZSgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgc3ZnVGV4dC5zZXROZWVkc1Bvc2l0aW9uaW5nVmFsdWVzVXBkYXRlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBuZWVkc0xheW91dCA9
IHRydWU7CisgICAgICAgICAgICBhdXRvJiBlbGVtZW50ID0gZG93bmNhc3Q8U1ZHRWxlbWVudD4o
KmNoaWxkLm5vZGUoKSk7CisgICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNSZWxhdGl2ZUxlbmd0
aHMoKSkgeworICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGxheW91dCBzaXplIGNoYW5nZWQg
YW5kIHdoZW4gdXNpbmcgcmVsYXRpdmUgdmFsdWVzIHRlbGwgdGhlIFJlbmRlclNWR1NoYXBlIHRv
IHVwZGF0ZSBpdHMgc2hhcGUgb2JqZWN0CisgICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlclNW
R1NoYXBlPihjaGlsZCkpCisgICAgICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclNWR1No
YXBlPihjaGlsZCkuc2V0TmVlZHNTaGFwZVVwZGF0ZSgpOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGlzPFJlbmRlclNWR1RleHQ+KGNoaWxkKSkgeworICAgICAgICAgICAgICAgICAgICBhdXRv
JiBzdmdUZXh0ID0gZG93bmNhc3Q8UmVuZGVyU1ZHVGV4dD4oY2hpbGQpOworICAgICAgICAgICAg
ICAgICAgICBzdmdUZXh0LnNldE5lZWRzVGV4dE1ldHJpY3NVcGRhdGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgc3ZnVGV4dC5zZXROZWVkc1Bvc2l0aW9uaW5nVmFsdWVzVXBkYXRlKCk7CiAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbmVlZHNMYXlvdXQgPSB0cnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKG5lZWRzTGF5b3V0KQotICAgICAg
ICAgICAgY2hpbGQtPnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICBj
aGlsZC5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwogCi0gICAgICAgIGlmIChjaGlsZC0+
bmVlZHNMYXlvdXQoKSkgewotICAgICAgICAgICAgbGF5b3V0RGlmZmVyZW50Um9vdElmTmVlZGVk
KGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCpjaGlsZCkpOwotICAgICAgICAgICAgZG93bmNhc3Q8
UmVuZGVyRWxlbWVudD4oKmNoaWxkKS5sYXlvdXQoKTsKKyAgICAgICAgaWYgKGNoaWxkLm5lZWRz
TGF5b3V0KCkpIHsKKyAgICAgICAgICAgIGxheW91dERpZmZlcmVudFJvb3RJZk5lZWRlZChkb3du
Y2FzdDxSZW5kZXJFbGVtZW50PihjaGlsZCkpOworICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVy
RWxlbWVudD4oY2hpbGQpLmxheW91dCgpOwogICAgICAgICAgICAgLy8gUmVuZGVyZXJzIGFyZSBy
ZXNwb25zaWJsZSBmb3IgcmVwYWludGluZyB0aGVtc2VsdmVzIHdoZW4gY2hhbmdpbmcsIGV4Y2Vw
dAogICAgICAgICAgICAgLy8gZm9yIHRoZSBpbml0aWFsIHBhaW50IHRvIGF2b2lkIHBvdGVudGlh
bCBkb3VibGUtcGFpbnRpbmcgY2F1c2VkIGJ5IG5vbi1zZW5zaWNhbCAib2xkIiBib3VuZHMuCiAg
ICAgICAgICAgICAvLyBXZSBjb3VsZCBoYW5kbGUgdGhpcyBpbiB0aGUgaW5kaXZpZHVhbCBvYmpl
Y3RzLCBidXQgZm9yIG5vdyBpdCdzIGVhc2llciB0byBoYXZlCiAgICAgICAgICAgICAvLyBwYXJl
bnQgY29udGFpbmVycyBjYWxsIHJlcGFpbnQoKS4gIChSZW5kZXJCbG9jazo6bGF5b3V0KiBoYXMg
c2ltaWxhciBsb2dpYy4pCiAgICAgICAgICAgICBpZiAoIWNoaWxkRXZlckhhZExheW91dCkKLSAg
ICAgICAgICAgICAgICBjaGlsZC0+cmVwYWludCgpOwotICAgICAgICB9IGVsc2UgaWYgKGxheW91
dFNpemVDaGFuZ2VkICYmIGlzPFJlbmRlckVsZW1lbnQ+KCpjaGlsZCkpCi0gICAgICAgICAgICBl
bGVtZW50c1RoYXREaWROb3RSZWNlaXZlTGF5b3V0LmFkZChkb3duY2FzdDxSZW5kZXJFbGVtZW50
PihjaGlsZCkpOworICAgICAgICAgICAgICAgIGNoaWxkLnJlcGFpbnQoKTsKKyAgICAgICAgfSBl
bHNlIGlmIChsYXlvdXRTaXplQ2hhbmdlZCAmJiBpczxSZW5kZXJFbGVtZW50PihjaGlsZCkpCisg
ICAgICAgICAgICBlbGVtZW50c1RoYXREaWROb3RSZWNlaXZlTGF5b3V0LmFkZCgmZG93bmNhc3Q8
UmVuZGVyRWxlbWVudD4oY2hpbGQpKTsKIAotICAgICAgICBBU1NFUlQoIWNoaWxkLT5uZWVkc0xh
eW91dCgpKTsKKyAgICAgICAgQVNTRVJUKCFjaGlsZC5uZWVkc0xheW91dCgpKTsKICAgICB9CiAK
ICAgICBpZiAoIWxheW91dFNpemVDaGFuZ2VkKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5j
cHAKaW5kZXggMTZlMjdjYzFmODE3OWJmZWI5NzFlMmU0MDc2ZWU4ZDQ5ODhhMTdhMC4uOGJkZTNl
NDliODA4OGZlN2UxYTA0NDc3MWUyNGFjN2NiZjY5N2EyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNC
dWlsZGVyLmNwcApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5oIgogCisjaW5jbHVkZSAiUmVuZGVy
Q2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZS5oIgogI2luY2x1ZGUg
IlJlbmRlclNWR0lubGluZVRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCkBAIC05
OCwxNiArOTksMTYgQEAgdm9pZCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXI6OmNvbGxl
Y3RUZXh0UG9zaXRpb25pbmdFbGVtZW50cyhSZW5kZXJCb3hNb2QKIHsKICAgICBBU1NFUlQoIWlz
PFJlbmRlclNWR1RleHQ+KHN0YXJ0KSB8fCBtX3RleHRQb3NpdGlvbnMuaXNFbXB0eSgpKTsKIAot
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHN0YXJ0LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGlzPFJlbmRlclNW
R0lubGluZVRleHQ+KCpjaGlsZCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3NSZW5kZXJTVkdJbmxp
bmVUZXh0KGRvd25jYXN0PFJlbmRlclNWR0lubGluZVRleHQ+KCpjaGlsZCksIG1fdGV4dExlbmd0
aCwgbGFzdENoYXJhY3Rlcldhc1NwYWNlKTsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRy
ZW5PZlR5cGU8UmVuZGVyT2JqZWN0PihzdGFydCkpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlclNW
R0lubGluZVRleHQ+KGNoaWxkKSkgeworICAgICAgICAgICAgcHJvY2Vzc1JlbmRlclNWR0lubGlu
ZVRleHQoZG93bmNhc3Q8UmVuZGVyU1ZHSW5saW5lVGV4dD4oY2hpbGQpLCBtX3RleHRMZW5ndGgs
IGxhc3RDaGFyYWN0ZXJXYXNTcGFjZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogCi0gICAgICAgIGlmICghaXM8UmVuZGVyU1ZHSW5saW5lPigqY2hpbGQpKQorICAgICAgICBp
ZiAoIWlzPFJlbmRlclNWR0lubGluZT4oY2hpbGQpKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgUmVuZGVyU1ZHSW5saW5lJiBpbmxpbmVDaGlsZCA9IGRvd25jYXN0PFJlbmRlclNW
R0lubGluZT4oKmNoaWxkKTsKKyAgICAgICAgYXV0byYgaW5saW5lQ2hpbGQgPSBkb3duY2FzdDxS
ZW5kZXJTVkdJbmxpbmU+KGNoaWxkKTsKICAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVu
dCogZWxlbWVudCA9IFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OmVsZW1lbnRGcm9tUmVuZGVy
ZXIoaW5saW5lQ2hpbGQpOwogCiAgICAgICAgIHVuc2lnbmVkIGF0UG9zaXRpb24gPSBtX3RleHRQ
b3NpdGlvbnMuc2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCmluZGV4IGJmM2VlYTZiN2RkMWVmMWUyNTBlNWI2
MGZlYzA0NTlhMDJjZDdiODYuLmJiMjU5M2QzOGJkNmM4MjFhNDM0YjVhODQ1MTM4ZTcyZjg4ZDRj
M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJp
Y3NCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRN
ZXRyaWNzQnVpbGRlci5jcHAKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJTVkdUZXh0TWV0cmljc0J1aWxkZXIuaCIKIAorI2luY2x1ZGUgIlJlbmRlckNo
aWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIKICNpbmNsdWRlICJS
ZW5kZXJTVkdJbmxpbmVUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgpAQCAtMTcx
LDkgKzE3Miw5IEBAIHZvaWQgU1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjptZWFzdXJlVGV4dFJlbmRl
cmVyKFJlbmRlclNWR0lubGluZVRleHQmIHRleHQsIE1lYXN1CiAKIHZvaWQgU1ZHVGV4dE1ldHJp
Y3NCdWlsZGVyOjp3YWxrVHJlZShSZW5kZXJFbGVtZW50JiBzdGFydCwgUmVuZGVyU1ZHSW5saW5l
VGV4dCogc3RvcEF0TGVhZiwgTWVhc3VyZVRleHREYXRhKiBkYXRhKQogewotICAgIGZvciAoYXV0
byogY2hpbGQgPSBzdGFydC5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpKSB7Ci0gICAgICAgIGlmIChpczxSZW5kZXJTVkdJbmxpbmVUZXh0PigqY2hpbGQp
KSB7Ci0gICAgICAgICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0JiB0ZXh0ID0gZG93bmNhc3Q8UmVu
ZGVyU1ZHSW5saW5lVGV4dD4oKmNoaWxkKTsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRy
ZW5PZlR5cGU8UmVuZGVyT2JqZWN0PihzdGFydCkpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlclNW
R0lubGluZVRleHQ+KGNoaWxkKSkgeworICAgICAgICAgICAgYXV0byYgdGV4dCA9IGRvd25jYXN0
PFJlbmRlclNWR0lubGluZVRleHQ+KGNoaWxkKTsKICAgICAgICAgICAgIGlmIChzdG9wQXRMZWFm
ICYmIHN0b3BBdExlYWYgIT0gJnRleHQpIHsKICAgICAgICAgICAgICAgICBkYXRhLT5wcm9jZXNz
UmVuZGVyZXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBtZWFzdXJlVGV4dFJlbmRlcmVyKHRl
eHQsIGRhdGEpOwpAQCAtMTg4LDEwICsxODksMTAgQEAgdm9pZCBTVkdUZXh0TWV0cmljc0J1aWxk
ZXI6OndhbGtUcmVlKFJlbmRlckVsZW1lbnQmIHN0YXJ0LCBSZW5kZXJTVkdJbmxpbmVUZXh0Kgog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWlzPFJlbmRl
clNWR0lubGluZT4oKmNoaWxkKSkKKyAgICAgICAgaWYgKCFpczxSZW5kZXJTVkdJbmxpbmU+KGNo
aWxkKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHdhbGtUcmVlKGRvd25jYXN0
PFJlbmRlclNWR0lubGluZT4oKmNoaWxkKSwgc3RvcEF0TGVhZiwgZGF0YSk7CisgICAgICAgIHdh
bGtUcmVlKGRvd25jYXN0PFJlbmRlclNWR0lubGluZT4oY2hpbGQpLCBzdG9wQXRMZWFmLCBkYXRh
KTsKICAgICB9CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279166</attachid>
            <date>2016-05-17 14:28:51 -0700</date>
            <delta_ts>2016-05-17 15:07:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157811-20160517142949.patch</filename>
            <type>text/plain</type>
            <size>54965</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxMDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzY5OTY3NmE5YzBhM2Ji
MTU0MDEzMGUyYWRhYWFjYTA5ZjI3Mjc3Yi4uYWU1YzlkMmIzNzU4YWU0MGQ0M2U1NTM1MGJmMjM1
YWJiMDU0OGM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE2LTA1LTE3ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIFJlbmRlckNoaWxkSXRl
cmF0b3IgbW9yZSBmb3IgdHJhdmVyc2luZyBhIHJlbmRlcmVyJ3MgY2hpbGRyZW4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzgxMQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBSZW5kZXJDaGlsZEl0
ZXJhdG9yIG1vcmUgZm9yIHRyYXZlcnNpbmcgYSByZW5kZXJlcidzIGNoaWxkcmVuLgorCisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckxheWVyVHJlZUFnZW50OjpsYXllcnNGb3JOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckxheWVyVHJlZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRl
ck9iamVjdEhpZXJhcmNoeSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJl
ZUFnZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBdXRvVGFibGVMYXlvdXQ6OnJlY2FsY0NvbHVtbik6CisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjppc0VtcHR5SW5s
aW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cG9zaXRpb25G
b3JQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6dXBkYXRlT3V0bGluZUF1dG9BbmNlc3Rvcik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRmllbGRzZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmllbGRzZXQ6OmZp
bmRMZWdlbmQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW5saW5lOjpnZW5lcmF0ZUN1bGxlZExpbmVCb3hSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUZpcnN0TGluZUJveCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZVZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpkaXJ0eUxpbmVCb3hlcyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldFBh
cmVudE9mRmlyc3RMaW5lQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0Rmxvd1RocmVhZFN0YXRlSW5j
bHVkaW5nRGVzY2VuZGFudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphZGRB
YnNvbHV0ZVJlY3RGb3JMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnBh
aW50aW5nUm9vdFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpyZW1vdmVG
cm9tUmVuZGVyRmxvd1RocmVhZEluY2x1ZGluZ0Rlc2NlbmRhbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6aW52YWxpZGF0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2tJbmNs
dWRpbmdEZXNjZW5kYW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnVwZGF0
ZURyYWdTdGF0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpmaXJzdENvbHVtbik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ29sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ29s
OjpjbGVhclByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eUJpdHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGVTZWN0aW9uOjpsYXlvdXRSb3dzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRQcmV2aW91c0Fu
ZE5leHRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OnN1YnRy
ZWVDaGlsZFdhc0FkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OnN1YnRy
ZWVDaGlsZFdpbGxCZVJlbW92ZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
U3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVPYmplY3RCb3VuZGluZ0JveCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlQ29udGFpbmVyQm91
bmRpbmdCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRD
aGlsZHJlbik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRl
c0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEF0dHJpYnV0ZXNC
dWlsZGVyOjpjb2xsZWN0VGV4dFBvc2l0aW9uaW5nRWxlbWVudHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRNZXRyaWNzQnVpbGRlcjo6d2Fsa1RyZWUpOgorCiAyMDE2LTA1LTE2ICBEZWFuIEphY2tz
b24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBUaWR5IHVudXNlZCBwYXJhbWV0ZXJzIHdp
dGggYnVpbGQgZmxhZ3MgaW4gaXNWYWxpZEtleXdvcmRQcm9wZXJ0eUFuZFZhbHVlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcApp
bmRleCA0Y2ZjMDNiMzRkNmZiNWU5YzIzYWY1NzczODc0M2Y4N2Q4OWViOWFhLi5jZDQ3YWU3Nzlh
MWJjMGIzZjM5Zjc0NjgyMmYyMzhiODJjNzZlZWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKQEAgLTM2LDYgKzM2LDcg
QEAKICNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdlbnRzLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5o
IgogI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJh
Y2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKQEAgLTEwNSwzMCAr
MTA2LDMxIEBAIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmxheWVyc0Zvck5vZGUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkCiB7CiAgICAgbGF5ZXJzID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXll
cj46OmNyZWF0ZSgpOwogCi0gICAgTm9kZSogbm9kZSA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5p
bnNwZWN0b3JET01BZ2VudCgpLT5ub2RlRm9ySWQobm9kZUlkKTsKKyAgICBhdXRvKiBub2RlID0g
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCktPm5vZGVGb3JJZChub2Rl
SWQpOwogICAgIGlmICghbm9kZSkgewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJh
bCgiUHJvdmlkZWQgbm9kZSBpZCBkb2Vzbid0IG1hdGNoIGFueSBrbm93biBub2RlIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+
cmVuZGVyZXIoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAg
aWYgKCFyZW5kZXJlcikgewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiTm9k
ZSBmb3IgcHJvdmlkZWQgbm9kZSBpZCBkb2Vzbid0IGhhdmUgYSByZW5kZXJlciIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVy
YXJjaHkoZXJyb3JTdHJpbmcsIHJlbmRlcmVyLCBsYXllcnMpOworICAgIGlmIChpczxSZW5kZXJF
bGVtZW50PigqcmVuZGVyZXIpKQorICAgICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVj
dEhpZXJhcmNoeShlcnJvclN0cmluZywgZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oKnJlbmRlcmVy
KSwgbGF5ZXJzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6Z2F0aGVyTGF5
ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+JiBsYXllcnMpCit2b2lkIElu
c3BlY3RvckxheWVyVHJlZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJh
cmNoeShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5
ZXJUcmVlOjpMYXllcj4+JiBsYXllcnMpCiB7Ci0gICAgaWYgKHJlbmRlcmVyLT5oYXNMYXllcigp
KSB7Ci0gICAgICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoZXJyb3JT
dHJpbmcsIGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCpyZW5kZXJlcikubGF5ZXIo
KSwgbGF5ZXJzKTsKKyAgICBpZiAocmVuZGVyZXIuaGFzTGF5ZXIoKSkgeworICAgICAgICBnYXRo
ZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KGVycm9yU3RyaW5nLCBkb3duY2FzdDxS
ZW5kZXJMYXllck1vZGVsT2JqZWN0PihyZW5kZXJlcikubGF5ZXIoKSwgbGF5ZXJzKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAocmVuZGVyZXIgPSByZW5kZXJlci0+Zmlyc3RD
aGlsZFNsb3coKTsgcmVuZGVyZXI7IHJlbmRlcmVyID0gcmVuZGVyZXItPm5leHRTaWJsaW5nKCkp
Ci0gICAgICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KGVycm9yU3Ry
aW5nLCByZW5kZXJlciwgbGF5ZXJzKTsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5P
ZlR5cGU8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpKQorICAgICAgICBnYXRoZXJMYXllcnNVc2lu
Z1JlbmRlck9iamVjdEhpZXJhcmNoeShlcnJvclN0cmluZywgY2hpbGQsIGxheWVycyk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmdhdGhlckxheWVyc1VzaW5nUmVuZGVyTGF5
ZXJIaWVyYXJjaHkoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZW5kZXJMYXllciogcmVuZGVy
TGF5ZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpMYXllclRyZWU6OkxheWVyPj4mIGxheWVycykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmgKaW5kZXggZjExNGQ3MjlmMGJiN2Iw
M2VhZDg3MGMyNmY4YzcxNzNhMjI2NDZiZC4uMzJhNGNiY2ZkM2U1MGY1NzA1NGY4ZjU2MzZiOGNi
Y2Q5YzZjNmFhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckxheWVyVHJlZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckxheWVyVHJlZUFnZW50LmgKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcg
YmluZChjb25zdCBSZW5kZXJMYXllciopOwogICAgIHZvaWQgdW5iaW5kKGNvbnN0IFJlbmRlckxh
eWVyKik7CiAKLSAgICB2b2lkIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5
KEVycm9yU3RyaW5nJiwgUmVuZGVyT2JqZWN0KiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYpOworICAgIHZv
aWQgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoRXJyb3JTdHJpbmcmLCBS
ZW5kZXJFbGVtZW50JiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYpOwogICAgIHZvaWQgZ2F0aGVyTGF5ZXJz
VXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShFcnJvclN0cmluZyYsIFJlbmRlckxheWVyKiwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVy
VHJlZTo6TGF5ZXI+PiYpOwogCiAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJl
ZTo6TGF5ZXI+IGJ1aWxkT2JqZWN0Rm9yTGF5ZXIoRXJyb3JTdHJpbmcmLCBSZW5kZXJMYXllciop
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAppbmRleCAz
YjkzYTUxMTg1ODY5MTA1MDc0MGExMmVjOWQwYjljNzllMmJkM2Y1Li5hYjU2NDgzOTZlMDI5ZGE3
MzlkZmI3M2MxOWY2YWEzZGFmZDhiZmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
QXV0b1RhYmxlTGF5b3V0LmNwcApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkF1dG9UYWJsZUxheW91dC5oIgogCisjaW5jbHVkZSAiUmVuZGVyQ2hpbGRJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFi
bGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDb2wuaCIKQEAgLTQ4LDE0ICs0OSwxNCBA
QCB2b2lkIEF1dG9UYWJsZUxheW91dDo6cmVjYWxjQ29sdW1uKHVuc2lnbmVkIGVmZkNvbCkKICAg
ICBSZW5kZXJUYWJsZUNlbGwqIGZpeGVkQ29udHJpYnV0b3IgPSBudWxscHRyOwogICAgIFJlbmRl
clRhYmxlQ2VsbCogbWF4Q29udHJpYnV0b3IgPSBudWxscHRyOwogCi0gICAgZm9yIChSZW5kZXJP
YmplY3QqIGNoaWxkID0gbV90YWJsZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoaXM8UmVuZGVyVGFibGVDb2w+KCpjaGls
ZCkpIHsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0
PigqbV90YWJsZSkpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlclRhYmxlQ29sPihjaGlsZCkpIHsK
ICAgICAgICAgICAgIC8vIFJlbmRlclRhYmxlQ29scyBkb24ndCBoYXZlIHRoZSBjb25jZXB0IG9m
IHByZWZlcnJlZCBsb2dpY2FsIHdpZHRoLCBidXQgd2UgbmVlZCB0byBjbGVhciB0aGVpciBkaXJ0
eSBiaXRzCiAgICAgICAgICAgICAvLyBzbyB0aGF0IGlmIHdlIGNhbGwgc2V0UHJlZmVycmVkV2lk
dGhzRGlydHkodHJ1ZSkgb24gYSBjb2wgb3Igb25lIG9mIGl0cyBkZXNjZW5kYW50cywgd2UnbGwg
bWFyayBpdCdzCiAgICAgICAgICAgICAvLyBhbmNlc3RvcnMgYXMgZGlydHkuCi0gICAgICAgICAg
ICBkb3duY2FzdDxSZW5kZXJUYWJsZUNvbD4oKmNoaWxkKS5jbGVhclByZWZlcnJlZExvZ2ljYWxX
aWR0aHNEaXJ0eUJpdHMoKTsKLSAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJUYWJsZVNlY3Rp
b24+KCpjaGlsZCkpIHsKLSAgICAgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiYgc2VjdGlvbiA9
IGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4oKmNoaWxkKTsKKyAgICAgICAgICAgIGRvd25j
YXN0PFJlbmRlclRhYmxlQ29sPihjaGlsZCkuY2xlYXJQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGly
dHlCaXRzKCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyVGFibGVTZWN0aW9uPihjaGls
ZCkpIHsKKyAgICAgICAgICAgIGF1dG8mIHNlY3Rpb24gPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNl
Y3Rpb24+KGNoaWxkKTsKICAgICAgICAgICAgIHVuc2lnbmVkIG51bVJvd3MgPSBzZWN0aW9uLm51
bVJvd3MoKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Sb3dzOyAr
K2kpIHsKICAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb246OkNlbGxTdHJ1Y3QgY3Vy
cmVudCA9IHNlY3Rpb24uY2VsbEF0KGksIGVmZkNvbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVJdGVyYXRvci5oCmluZGV4IDRlZmE1MmY2ZjRkZThlOGRjNmQ1NDU3MTgwMWRkNmY5
OGU2ZjA3OGMuLmExMTE1MmYwZjJjNzk1MTY4NzcwMzJlYmVjZjA5M2M4M2MyOTBhNzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVJdGVyYXRvci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVJdGVyYXRvci5oCkBAIC0yNSw2ICsyNSw3IEBA
CiAKICNpbmNsdWRlICJCaWRpUnVuLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCisj
aW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5o
IgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CkBAIC0yMDksMTUgKzIxMCwxNSBAQCBlbnVtIEVtcHR5SW5saW5lQmVoYXZpb3IgewogCiBzdGF0
aWMgYm9vbCBpc0VtcHR5SW5saW5lKGNvbnN0IFJlbmRlcklubGluZSYgcmVuZGVyZXIpCiB7Ci0g
ICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSByZW5kZXJlci5maXJzdENoaWxkKCk7IGN1
cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChj
dXJyZW50LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCisgICAgZm9yIChhdXRv
JiBjdXJyZW50IDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0PihyZW5kZXJlcikpIHsKKyAg
ICAgICAgaWYgKGN1cnJlbnQuaXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChpczxSZW5kZXJUZXh0PigqY3VycmVudCkp
IHsKLSAgICAgICAgICAgIGlmICghZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmN1cnJlbnQpLmlzQWxs
Q29sbGFwc2libGVXaGl0ZXNwYWNlKCkpCisgICAgICAgIGlmIChpczxSZW5kZXJUZXh0PihjdXJy
ZW50KSkgeworICAgICAgICAgICAgaWYgKCFkb3duY2FzdDxSZW5kZXJUZXh0PihjdXJyZW50KS5p
c0FsbENvbGxhcHNpYmxlV2hpdGVzcGFjZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmICghaXM8UmVu
ZGVySW5saW5lPigqY3VycmVudCkgfHwgIWlzRW1wdHlJbmxpbmUoZG93bmNhc3Q8UmVuZGVySW5s
aW5lPigqY3VycmVudCkpKQorICAgICAgICBpZiAoIWlzPFJlbmRlcklubGluZT4oY3VycmVudCkg
fHwgIWlzRW1wdHlJbmxpbmUoZG93bmNhc3Q8UmVuZGVySW5saW5lPihjdXJyZW50KSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggY2FjNWIwMjgzNzVlZDMxYmM1NDZl
NjBiNzEyMTg2YjM2NWViZmE2NS4uNTgwZGUzY2YwMjkyYmVjODUyYzM5NTYwMDE4OWJlZjk4ZWEz
OGU0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC00OCw2
ICs0OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVy
Qm94UmVnaW9uSW5mby5oIgogI2luY2x1ZGUgIlJlbmRlckJ1dHRvbi5oIgorI2luY2x1ZGUgIlJl
bmRlckNoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJDb21iaW5lVGV4dC5oIgogI2lu
Y2x1ZGUgIlJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUgIlJlbmRlckZs
ZXhpYmxlQm94LmgiCkBAIC0zNDY1LDE3ICszNDY2LDE3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFk
ZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBv
aW50CiAgICAgICAgIGlmIChjaGlsZHJlbklubGluZSgpKQogICAgICAgICAgICAgYWRkRm9jdXNS
aW5nUmVjdHNGb3JJbmxpbmVDaGlsZHJlbihyZWN0cywgYWRkaXRpb25hbE9mZnNldCwgcGFpbnRD
b250YWluZXIpOwogICAgIAotICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAg
ICAgICBpZiAoIWlzPFJlbmRlclRleHQ+KCpjaGlsZCkgJiYgIWlzPFJlbmRlckxpc3RNYXJrZXI+
KCpjaGlsZCkgJiYgaXM8UmVuZGVyQm94PigqY2hpbGQpKSB7Ci0gICAgICAgICAgICAgICAgYXV0
byYgYm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqY2hpbGQpOwotICAgICAgICAgICAgICAgIEZs
b2F0UG9pbnQgcG9zOwotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29y
ayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgotICAgICAgICAgICAgICAgIGlmIChib3gubGF5
ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgcG9zID0gY2hpbGQtPmxvY2FsVG9Db250YWluZXJQ
b2ludChGbG9hdFBvaW50KCksIHBhaW50Q29udGFpbmVyKTsKLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIHBvcyA9IEZsb2F0UG9pbnQoYWRkaXRpb25hbE9mZnNldC54
KCkgKyBib3gueCgpLCBhZGRpdGlvbmFsT2Zmc2V0LnkoKSArIGJveC55KCkpOwotICAgICAgICAg
ICAgICAgIGJveC5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgZmxvb3JlZExheW91dFBvaW50KHBv
cyksIHBhaW50Q29udGFpbmVyKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgZm9yIChhdXRvJiBi
b3ggOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJCb3g+KCp0aGlzKSkgeworICAgICAgICAgICAgaWYg
KGlzPFJlbmRlclRleHQ+KGJveCkgfHwgaXM8UmVuZGVyTGlzdE1hcmtlcj4oYm94KSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgRmxvYXRQb2ludCBwb3M7CisgICAg
ICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNm
b3Jtcy4KKyAgICAgICAgICAgIGlmIChib3gubGF5ZXIoKSkKKyAgICAgICAgICAgICAgICBwb3Mg
PSBib3gubG9jYWxUb0NvbnRhaW5lclBvaW50KEZsb2F0UG9pbnQoKSwgcGFpbnRDb250YWluZXIp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBvcyA9IEZsb2F0UG9pbnQoYWRk
aXRpb25hbE9mZnNldC54KCkgKyBib3gueCgpLCBhZGRpdGlvbmFsT2Zmc2V0LnkoKSArIGJveC55
KCkpOworICAgICAgICAgICAgYm94LmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBmbG9vcmVkTGF5
b3V0UG9pbnQocG9zKSwgcGFpbnRDb250YWluZXIpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGZmNDkzM2YxZDRlNjUwZjE3YTRl
MGE1YzkzYjE5YTU4MGJlNjc5NTUuLjIxNzIyMTZlMGNlZjMxZjQzZDljOGYzZTk3MmIyOTVhNDNk
MmE2ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC00OCw2ICs0
OCw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgogI2luY2x1
ZGUgIlJlbmRlckJveFJlZ2lvbkluZm8uaCIKKyNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmgiCiAjaW5jbHVkZSAi
UmVuZGVyRmxleGlibGVCb3guaCIKICNpbmNsdWRlICJSZW5kZXJHZW9tZXRyeU1hcC5oIgpAQCAt
NDQyMSwxOCArNDQyMiwxMyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQm94Ojpwb3NpdGlvbkZv
clBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZAogICAgIGlmIChpc1Rh
YmxlUm93KCkpCiAgICAgICAgIGFkanVzdGVkUG9pbnQubW92ZUJ5KGxvY2F0aW9uKCkpOwogCi0g
ICAgZm9yIChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCA9IGZpcnN0Q2hpbGQoKTsgcmVuZGVy
T2JqZWN0OyByZW5kZXJPYmplY3QgPSByZW5kZXJPYmplY3QtPm5leHRTaWJsaW5nKCkpIHsKLSAg
ICAgICAgaWYgKCFpczxSZW5kZXJCb3g+KCpyZW5kZXJPYmplY3QpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KKyAgICBmb3IgKGF1dG8mIHJlbmRlcmVyIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVy
Qm94PigqdGhpcykpIHsKICAgICAgICAgaWYgKGlzPFJlbmRlckZsb3dUaHJlYWQ+KCp0aGlzKSkg
ewogICAgICAgICAgICAgQVNTRVJUKHJlZ2lvbik7Ci0gICAgICAgICAgICBpZiAoIWRvd25jYXN0
PFJlbmRlckZsb3dUaHJlYWQ+KCp0aGlzKS5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lv
bihyZW5kZXJPYmplY3QsIHJlZ2lvbikpCisgICAgICAgICAgICBpZiAoIWRvd25jYXN0PFJlbmRl
ckZsb3dUaHJlYWQ+KCp0aGlzKS5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbigmcmVu
ZGVyZXIsIHJlZ2lvbikpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAot
ICAgICAgICBhdXRvJiByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlck9iamVj
dCk7Ci0KICAgICAgICAgaWYgKCghcmVuZGVyZXIuZmlyc3RDaGlsZCgpICYmICFyZW5kZXJlci5p
c0lubGluZSgpICYmICFpczxSZW5kZXJCbG9ja0Zsb3c+KHJlbmRlcmVyKSkKICAgICAgICAgICAg
IHx8IHJlbmRlcmVyLnN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgICAg
ICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcApp
bmRleCA1OWRiZjZkNGM4MjFlM2U1NzUyNTBkMDRhNWEzNzI4MWEwODlkZTJkLi5hMDg5ZWU1YmYy
MzFkODQyM2VjODcwY2VlNzc4YTlmZWM4Y2IzNTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVsZW1lbnQuY3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIlBhdGhVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5o
IgorI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJDb3Vu
dGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyRmxleGlibGVCb3guaCIKQEAgLTIxNTEsMTggKzIxNTIsMTggQEAgdm9pZCBSZW5k
ZXJFbGVtZW50Ojppc3N1ZVJlcGFpbnRGb3JPdXRsaW5lQXV0byhmbG9hdCBvdXRsaW5lU2l6ZSkK
ICAgICByZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRSZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJFbGVt
ZW50Ojp1cGRhdGVPdXRsaW5lQXV0b0FuY2VzdG9yKGJvb2wgaGFzT3V0bGluZUF1dG8pIGNvbnN0
Cit2b2lkIFJlbmRlckVsZW1lbnQ6OnVwZGF0ZU91dGxpbmVBdXRvQW5jZXN0b3IoYm9vbCBoYXNP
dXRsaW5lQXV0bykKIHsKLSAgICBmb3IgKGF1dG8qIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoaGFzT3V0bGlu
ZUF1dG8gPT0gY2hpbGQtPmhhc091dGxpbmVBdXRvQW5jZXN0b3IoKSkKKyAgICBmb3IgKGF1dG8m
IGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0PigqdGhpcykpIHsKKyAgICAgICAg
aWYgKGhhc091dGxpbmVBdXRvID09IGNoaWxkLmhhc091dGxpbmVBdXRvQW5jZXN0b3IoKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjaGlsZC0+c2V0SGFzT3V0bGluZUF1dG9BbmNl
c3RvcihoYXNPdXRsaW5lQXV0byk7Ci0gICAgICAgIGJvb2wgY2hpbGRIYXNPdXRsaW5lQXV0byA9
IGNoaWxkLT5vdXRsaW5lU3R5bGVGb3JSZXBhaW50KCkub3V0bGluZVN0eWxlSXNBdXRvKCk7Cisg
ICAgICAgIGNoaWxkLnNldEhhc091dGxpbmVBdXRvQW5jZXN0b3IoaGFzT3V0bGluZUF1dG8pOwor
ICAgICAgICBib29sIGNoaWxkSGFzT3V0bGluZUF1dG8gPSBjaGlsZC5vdXRsaW5lU3R5bGVGb3JS
ZXBhaW50KCkub3V0bGluZVN0eWxlSXNBdXRvKCk7CiAgICAgICAgIGlmIChjaGlsZEhhc091dGxp
bmVBdXRvKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmICghaXM8UmVuZGVyRWxl
bWVudD4oY2hpbGQpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGRvd25jYXN0PFJl
bmRlckVsZW1lbnQ+KCpjaGlsZCkudXBkYXRlT3V0bGluZUF1dG9BbmNlc3RvcihoYXNPdXRsaW5l
QXV0byk7CisgICAgICAgIGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KGNoaWxkKS51cGRhdGVPdXRs
aW5lQXV0b0FuY2VzdG9yKGhhc091dGxpbmVBdXRvKTsKICAgICB9CiAgICAgaWYgKGhhc0NvbnRp
bnVhdGlvbigpKQogICAgICAgICBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnRoaXMp
LmNvbnRpbnVhdGlvbigpLT51cGRhdGVPdXRsaW5lQXV0b0FuY2VzdG9yKGhhc091dGxpbmVBdXRv
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCmluZGV4IDBhZDVmOGVh
NzU3NjI2MGVmMjQwMmZiYzA3MGQxYzc2YjA4MDNiZDQuLjZmMjQ0NDU5N2JlODg0MWUwNjQxYjZk
Y2UwMTU0OTBkNDQyNWNjYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuaApAQCAtMjc4LDcgKzI3OCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgcGFpbnRGb2N1
c1JpbmcoUGFpbnRJbmZvJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBWZWN0b3I8TGF5b3V0
UmVjdD4mIGZvY3VzUmluZ1JlY3RzKTsKICAgICB2b2lkIHBhaW50T3V0bGluZShQYWludEluZm8m
LCBjb25zdCBMYXlvdXRSZWN0Jik7Ci0gICAgdm9pZCB1cGRhdGVPdXRsaW5lQXV0b0FuY2VzdG9y
KGJvb2wgaGFzT3V0bGluZUF1dG8pIGNvbnN0OworICAgIHZvaWQgdXBkYXRlT3V0bGluZUF1dG9B
bmNlc3Rvcihib29sIGhhc091dGxpbmVBdXRvKTsKIAogcHJpdmF0ZToKICAgICBSZW5kZXJFbGVt
ZW50KENvbnRhaW5lck5vZGUmLCBSZW5kZXJTdHlsZSYmLCBCYXNlVHlwZUZsYWdzKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCmluZGV4IDc4N2FiYTAzYjBl
NTFlZGJmNDg4OTA4OGVmMmM2NjhmYjc1YzI1MDguLjQyMGMxYWRhZmJhN2Q5ODljODEzZjljZmI4
NjI1OGIzNjAxNzhlY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGaWVsZHNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxk
c2V0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkhUTUxGaWVsZFNldEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKKyNpbmNs
dWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MTI0LDE0ICsxMjUsMTQgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJGaWVsZHNldDo6bGF5b3V0U3Bl
Y2lhbEV4Y2x1ZGVkQ2hpbGQoYm9vbCByZWxheW91dENoaWxkcmVuKQogICAgIHJldHVybiAmbGVn
ZW5kOwogfQogCi1SZW5kZXJCb3gqIFJlbmRlckZpZWxkc2V0OjpmaW5kTGVnZW5kKEZpbmRMZWdl
bmRPcHRpb24gb3B0aW9uKSBjb25zdAorUmVuZGVyQm94KiBSZW5kZXJGaWVsZHNldDo6ZmluZExl
Z2VuZChGaW5kTGVnZW5kT3B0aW9uIG9wdGlvbikKIHsKLSAgICBmb3IgKFJlbmRlck9iamVjdCog
bGVnZW5kID0gZmlyc3RDaGlsZCgpOyBsZWdlbmQ7IGxlZ2VuZCA9IGxlZ2VuZC0+bmV4dFNpYmxp
bmcoKSkgewotICAgICAgICBpZiAob3B0aW9uID09IElnbm9yZUZsb2F0aW5nT3JPdXRPZkZsb3cg
JiYgbGVnZW5kLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCisgICAgZm9yIChh
dXRvJiBsZWdlbmQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJFbGVtZW50PigqdGhpcykpIHsKKyAg
ICAgICAgaWYgKG9wdGlvbiA9PSBJZ25vcmVGbG9hdGluZ09yT3V0T2ZGbG93ICYmIGxlZ2VuZC5p
c0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChpczxIVE1MTGVnZW5kRWxlbWVudD4obGVnZW5kLT5ub2Rl
KCkpKQotICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4obGVnZW5kKTsKKyAg
ICAgICAgaWYgKGlzPEhUTUxMZWdlbmRFbGVtZW50PihsZWdlbmQuZWxlbWVudCgpKSkKKyAgICAg
ICAgICAgIHJldHVybiAmZG93bmNhc3Q8UmVuZGVyQm94PihsZWdlbmQpOwogICAgIH0KICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGaWVsZHNldC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0
LmgKaW5kZXggZGUwNTdiYWMxOWU2NzliNzZhNDliNDI2NmE1NzIyNjc0OWQ1M2FiZC4uMTEwY2U1
M2ZiYWQ4YTZmZWRhY2FjN2ZiMzc2YzU3ZDNmYjc1N2IyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZpZWxkc2V0LmgKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIFJl
bmRlckZpZWxkc2V0KEhUTUxGaWVsZFNldEVsZW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKIAogICAg
IGVudW0gRmluZExlZ2VuZE9wdGlvbiB7IElnbm9yZUZsb2F0aW5nT3JPdXRPZkZsb3csIEluY2x1
ZGVGbG9hdGluZ09yT3V0T2ZGbG93IH07Ci0gICAgUmVuZGVyQm94KiBmaW5kTGVnZW5kKEZpbmRM
ZWdlbmRPcHRpb24gPSBJZ25vcmVGbG9hdGluZ09yT3V0T2ZGbG93KSBjb25zdDsKKyAgICBSZW5k
ZXJCb3gqIGZpbmRMZWdlbmQoRmluZExlZ2VuZE9wdGlvbiA9IElnbm9yZUZsb2F0aW5nT3JPdXRP
ZkZsb3cpOwogCiAgICAgSFRNTEZpZWxkU2V0RWxlbWVudCYgZmllbGRTZXRFbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gZG93bmNhc3Q8SFRNTEZpZWxkU2V0RWxlbWVudD4obm9kZUZvck5vbkFub255
bW91cygpKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCmlu
ZGV4IDc1MDc1NzM4OGNjZWE3Njk1OGE0OTA2OTU5ZTllYjhkYzIwN2ZhYTYuLjc1NTZiNzBiMGUw
OWMyZDhkNGJiM2VkZjVjN2IzNTBlZjBkNGE2NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSW5saW5lVGV4
dEJveC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorI2lu
Y2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJGdWxsU2NyZWVu
LmgiCiAjaW5jbHVkZSAiUmVuZGVyR2VvbWV0cnlNYXAuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVy
YXRvci5oIgpAQCAtNjcwLDE0ICs2NzEsMTQgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmdlbmVyYXRl
Q3VsbGVkTGluZUJveFJlY3RzKEdlbmVyYXRvckNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFIKIAog
ICAgIGJvb2wgaXNIb3Jpem9udGFsID0gc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
OwogCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJzdENoaWxkKCk7IGN1cnJl
bnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjdXJy
ZW50LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCisgICAgZm9yIChhdXRvJiBj
dXJyZW50IDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0PigqdGhpcykpIHsKKyAgICAgICAg
aWYgKGN1cnJlbnQuaXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAKKwogICAgICAgICAvLyBXZSB3YW50IHRvIGdldCB0
aGUgbWFyZ2luIGJveCBpbiB0aGUgaW5saW5lIGRpcmVjdGlvbiwgYW5kIHRoZW4gdXNlIG91ciBm
b250IGFzY2VudC9kZXNjZW50IGluIHRoZSBibG9jawogICAgICAgICAvLyBkaXJlY3Rpb24gKGFs
aWduZWQgdG8gdGhlIHJvb3QgYm94J3MgYmFzZWxpbmUpLgotICAgICAgICBpZiAoaXM8UmVuZGVy
Qm94PigqY3VycmVudCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJveCYgcmVuZGVyQm94ID0gZG93
bmNhc3Q8UmVuZGVyQm94PigqY3VycmVudCk7CisgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KGN1
cnJlbnQpKSB7CisgICAgICAgICAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJC
b3g+KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKHJlbmRlckJveC5pbmxpbmVCb3hXcmFwcGVy
KCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gcmVu
ZGVyQm94LmlubGluZUJveFdyYXBwZXIoKS0+cm9vdCgpOwogICAgICAgICAgICAgICAgIGNvbnN0
IFJlbmRlclN0eWxlJiBjb250YWluZXJTdHlsZSA9IHJvb3RCb3guaXNGaXJzdExpbmUoKSA/IGNv
bnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUoKSA6IGNvbnRhaW5lci0+c3R5bGUoKTsKQEAgLTY4OCw5
ICs2ODksOSBAQCB2b2lkIFJlbmRlcklubGluZTo6Z2VuZXJhdGVDdWxsZWRMaW5lQm94UmVjdHMo
R2VuZXJhdG9yQ29udGV4dCYgY29udGV4dCwgY29uc3QgUgogICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hZGRSZWN0KEZsb2F0UmVjdChsb2dpY2FsVG9w
LCByZW5kZXJCb3guaW5saW5lQm94V3JhcHBlcigpLT55KCkgLSByZW5kZXJCb3gubWFyZ2luVG9w
KCksIGxvZ2ljYWxIZWlnaHQsIHJlbmRlckJveC5oZWlnaHQoKSArIHJlbmRlckJveC52ZXJ0aWNh
bE1hcmdpbkV4dGVudCgpKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8
UmVuZGVySW5saW5lPigqY3VycmVudCkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJJ
bmxpbmU+KGN1cnJlbnQpKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgZG9lc24ndCBu
ZWVkIGxpbmUgYm94ZXMgZWl0aGVyLCB0aGVuIHdlIGNhbiByZWN1ci4KLSAgICAgICAgICAgIFJl
bmRlcklubGluZSYgcmVuZGVySW5saW5lID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigqY3VycmVu
dCk7CisgICAgICAgICAgICBhdXRvJiByZW5kZXJJbmxpbmUgPSBkb3duY2FzdDxSZW5kZXJJbmxp
bmU+KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKCFyZW5kZXJJbmxpbmUuYWx3YXlzQ3JlYXRl
TGluZUJveGVzKCkpCiAgICAgICAgICAgICAgICAgcmVuZGVySW5saW5lLmdlbmVyYXRlQ3VsbGVk
TGluZUJveFJlY3RzKGNvbnRleHQsIGNvbnRhaW5lcik7CiAgICAgICAgICAgICBlbHNlIHsKQEAg
LTcxMiw4ICs3MTMsOCBAQCB2b2lkIFJlbmRlcklubGluZTo6Z2VuZXJhdGVDdWxsZWRMaW5lQm94
UmVjdHMoR2VuZXJhdG9yQ29udGV4dCYgY29udGV4dCwgY29uc3QgUgogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
aWYgKGlzPFJlbmRlclRleHQ+KCpjdXJyZW50KSkgewotICAgICAgICAgICAgUmVuZGVyVGV4dCYg
Y3VyclRleHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqY3VycmVudCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoaXM8UmVuZGVyVGV4dD4oY3VycmVudCkpIHsKKyAgICAgICAgICAgIGF1dG8mIGN1cnJU
ZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oY3VycmVudCk7CiAgICAgICAgICAgICBmb3IgKElu
bGluZVRleHRCb3gqIGNoaWxkVGV4dCA9IGN1cnJUZXh0LmZpcnN0VGV4dEJveCgpOyBjaGlsZFRl
eHQ7IGNoaWxkVGV4dCA9IGNoaWxkVGV4dC0+bmV4dFRleHRCb3goKSkgewogICAgICAgICAgICAg
ICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSBjaGlsZFRleHQtPnJvb3QoKTsKICAg
ICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgY29udGFpbmVyU3R5bGUgPSByb290Qm94
LmlzRmlyc3RMaW5lKCkgPyBjb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkgOiBjb250YWluZXIt
PnN0eWxlKCk7CkBAIC03MjQsOCArNzI1LDggQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmdlbmVyYXRl
Q3VsbGVkTGluZUJveFJlY3RzKEdlbmVyYXRvckNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFIKICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYWRkUmVjdChG
bG9hdFJlY3QobG9naWNhbFRvcCwgY2hpbGRUZXh0LT55KCksIGxvZ2ljYWxIZWlnaHQsIGNoaWxk
VGV4dC0+bG9naWNhbFdpZHRoKCkpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm
IChpczxSZW5kZXJMaW5lQnJlYWs+KCpjdXJyZW50KSkgewotICAgICAgICAgICAgaWYgKElubGlu
ZUJveCogaW5saW5lQm94ID0gZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPigqY3VycmVudCkuaW5s
aW5lQm94V3JhcHBlcigpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyTGluZUJyZWFr
PihjdXJyZW50KSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGlubGluZUJveCA9IGRvd25jYXN0
PFJlbmRlckxpbmVCcmVhaz4oY3VycmVudCkuaW5saW5lQm94V3JhcHBlcigpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgdXNlIGEgaGVscGVyIHRvIHNoYXJlIHRoZXNl
IHdpdGggdGV4dCBwYXRoLgogICAgICAgICAgICAgICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJv
b3RCb3ggPSBpbmxpbmVCb3gtPnJvb3QoKTsKICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJT
dHlsZSYgY29udGFpbmVyU3R5bGUgPSByb290Qm94LmlzRmlyc3RMaW5lKCkgPyBjb250YWluZXIt
PmZpcnN0TGluZVN0eWxlKCkgOiBjb250YWluZXItPnN0eWxlKCk7CkBAIC0xMDMzLDI2ICsxMDM0
LDI2IEBAIEludFJlY3QgUmVuZGVySW5saW5lOjpsaW5lc0JvdW5kaW5nQm94KCkgY29uc3QKIAog
SW5saW5lQm94KiBSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUZpcnN0TGluZUJveCgpIGNvbnN0
CiB7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJzdENoaWxkKCk7IGN1cnJl
bnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjdXJy
ZW50LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCisgICAgZm9yIChhdXRvJiBj
dXJyZW50IDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0PigqdGhpcykpIHsKKyAgICAgICAg
aWYgKGN1cnJlbnQuaXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAKKwogICAgICAgICAvLyBXZSB3YW50IHRvIGdldCB0
aGUgbWFyZ2luIGJveCBpbiB0aGUgaW5saW5lIGRpcmVjdGlvbiwgYW5kIHRoZW4gdXNlIG91ciBm
b250IGFzY2VudC9kZXNjZW50IGluIHRoZSBibG9jawogICAgICAgICAvLyBkaXJlY3Rpb24gKGFs
aWduZWQgdG8gdGhlIHJvb3QgYm94J3MgYmFzZWxpbmUpLgotICAgICAgICBpZiAoaXM8UmVuZGVy
Qm94PigqY3VycmVudCkpIHsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIHJlbmRlckJveCA9IGRv
d25jYXN0PFJlbmRlckJveD4oKmN1cnJlbnQpOworICAgICAgICBpZiAoaXM8UmVuZGVyQm94Pihj
dXJyZW50KSkgeworICAgICAgICAgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVy
Qm94PihjdXJyZW50KTsKICAgICAgICAgICAgIGlmIChyZW5kZXJCb3guaW5saW5lQm94V3JhcHBl
cigpKQogICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJCb3guaW5saW5lQm94V3JhcHBlcigp
OwotICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlckxpbmVCcmVhaz4oKmN1cnJlbnQpKSB7Ci0g
ICAgICAgICAgICBSZW5kZXJMaW5lQnJlYWsmIHJlbmRlckJSID0gZG93bmNhc3Q8UmVuZGVyTGlu
ZUJyZWFrPigqY3VycmVudCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyTGluZUJyZWFr
PihjdXJyZW50KSkgeworICAgICAgICAgICAgYXV0byYgcmVuZGVyQlIgPSBkb3duY2FzdDxSZW5k
ZXJMaW5lQnJlYWs+KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKHJlbmRlckJSLmlubGluZUJv
eFdyYXBwZXIoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyQlIuaW5saW5lQm94V3Jh
cHBlcigpOwotICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlcklubGluZT4oKmN1cnJlbnQpKSB7
Ci0gICAgICAgICAgICBSZW5kZXJJbmxpbmUmIHJlbmRlcklubGluZSA9IGRvd25jYXN0PFJlbmRl
cklubGluZT4oKmN1cnJlbnQpOworICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlcklubGluZT4o
Y3VycmVudCkpIHsKKyAgICAgICAgICAgIGF1dG8mIHJlbmRlcklubGluZSA9IGRvd25jYXN0PFJl
bmRlcklubGluZT4oY3VycmVudCk7CiAgICAgICAgICAgICBpZiAoSW5saW5lQm94KiByZXN1bHQg
PSByZW5kZXJJbmxpbmUuZmlyc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZygpKQogICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyVGV4dD4o
KmN1cnJlbnQpKSB7Ci0gICAgICAgICAgICBSZW5kZXJUZXh0JiByZW5kZXJUZXh0ID0gZG93bmNh
c3Q8UmVuZGVyVGV4dD4oKmN1cnJlbnQpOworICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlclRl
eHQ+KGN1cnJlbnQpKSB7CisgICAgICAgICAgICBhdXRvJiByZW5kZXJUZXh0ID0gZG93bmNhc3Q8
UmVuZGVyVGV4dD4oY3VycmVudCk7CiAgICAgICAgICAgICBpZiAocmVuZGVyVGV4dC5maXJzdFRl
eHRCb3goKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyVGV4dC5maXJzdFRleHRCb3go
KTsKICAgICAgICAgfQpAQCAtMTA5NiwxMyArMTA5NywxMyBAQCBMYXlvdXRSZWN0IFJlbmRlcklu
bGluZTo6Y3VsbGVkSW5saW5lVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCgpIGNvbnN0CiAgICAg
Z2VuZXJhdGVDdWxsZWRMaW5lQm94UmVjdHMoY29udGV4dCwgdGhpcyk7CiAgICAgTGF5b3V0UmVj
dCByZXN1bHQoZW5jbG9zaW5nTGF5b3V0UmVjdChmbG9hdFJlc3VsdCkpOwogICAgIGJvb2wgaXNI
b3Jpem9udGFsID0gc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwotICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50ID0g
Y3VycmVudC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoY3VycmVudC0+aXNGbG9hdGlu
Z09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgIGZvciAoYXV0byYgY3VycmVudCA6IGNoaWxk
cmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oKnRoaXMpKSB7CisgICAgICAgIGlmIChjdXJyZW50Lmlz
RmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgCisKICAgICAgICAgLy8gRm9yIG92ZXJmbG93IHdlIGp1c3QgaGF2ZSB0byBw
cm9wYWdhdGUgYnkgaGFuZCBhbmQgcmVjb21wdXRlIGl0IGFsbC4KLSAgICAgICAgaWYgKGlzPFJl
bmRlckJveD4oKmN1cnJlbnQpKSB7Ci0gICAgICAgICAgICBSZW5kZXJCb3gmIHJlbmRlckJveCA9
IGRvd25jYXN0PFJlbmRlckJveD4oKmN1cnJlbnQpOworICAgICAgICBpZiAoaXM8UmVuZGVyQm94
PihjdXJyZW50KSkgeworICAgICAgICAgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVu
ZGVyQm94PihjdXJyZW50KTsKICAgICAgICAgICAgIGlmICghcmVuZGVyQm94Lmhhc1NlbGZQYWlu
dGluZ0xheWVyKCkgJiYgcmVuZGVyQm94LmlubGluZUJveFdyYXBwZXIoKSkgewogICAgICAgICAg
ICAgICAgIExheW91dFJlY3QgbG9naWNhbFJlY3QgPSByZW5kZXJCb3gubG9naWNhbFZpc3VhbE92
ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKCZzdHlsZSgpKTsKICAgICAgICAgICAgICAgICBpZiAo
aXNIb3Jpem9udGFsKSB7CkBAIC0xMTEzLDE3ICsxMTE0LDE3IEBAIExheW91dFJlY3QgUmVuZGVy
SW5saW5lOjpjdWxsZWRJbmxpbmVWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KCkgY29uc3QKICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKGxvZ2ljYWxSZWN0LnRyYW5z
cG9zZWRSZWN0KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIGlmIChpczxSZW5kZXJJbmxpbmU+KCpjdXJyZW50KSkgeworICAgICAgICB9IGVsc2Ug
aWYgKGlzPFJlbmRlcklubGluZT4oY3VycmVudCkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBj
aGlsZCBkb2Vzbid0IG5lZWQgbGluZSBib3hlcyBlaXRoZXIsIHRoZW4gd2UgY2FuIHJlY3VyLgot
ICAgICAgICAgICAgUmVuZGVySW5saW5lJiByZW5kZXJJbmxpbmUgPSBkb3duY2FzdDxSZW5kZXJJ
bmxpbmU+KCpjdXJyZW50KTsKKyAgICAgICAgICAgIGF1dG8mIHJlbmRlcklubGluZSA9IGRvd25j
YXN0PFJlbmRlcklubGluZT4oY3VycmVudCk7CiAgICAgICAgICAgICBpZiAoIXJlbmRlcklubGlu
ZS5hbHdheXNDcmVhdGVMaW5lQm94ZXMoKSkKICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJ
Zk5vblplcm8ocmVuZGVySW5saW5lLmN1bGxlZElubGluZVZpc3VhbE92ZXJmbG93Qm91bmRpbmdC
b3goKSk7CiAgICAgICAgICAgICBlbHNlIGlmICghcmVuZGVySW5saW5lLmhhc1NlbGZQYWludGlu
Z0xheWVyKCkpCiAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKHJlbmRlcklu
bGluZS5saW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goKSk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoaXM8UmVuZGVyVGV4dD4oKmN1cnJlbnQpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaXM8UmVu
ZGVyVGV4dD4oY3VycmVudCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOyBPdmVyZmxvdyBmcm9t
IHRleHQgYm94ZXMgaXMgbG9zdC4gV2Ugd2lsbCBuZWVkIHRvIGNhY2hlIHRoaXMgaW5mb3JtYXRp
b24gaW4KICAgICAgICAgICAgIC8vIElubGluZVRleHRCb3hlcy4KLSAgICAgICAgICAgIFJlbmRl
clRleHQmIHJlbmRlclRleHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqY3VycmVudCk7CisgICAg
ICAgICAgICBhdXRvJiByZW5kZXJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oY3VycmVudCk7
CiAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8ocmVuZGVyVGV4dC5saW5lc1Zpc3Vh
bE92ZXJmbG93Qm91bmRpbmdCb3goKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDU4LDI0ICsx
NDU5LDI0IEBAIHZvaWQgUmVuZGVySW5saW5lOjpkaXJ0eUxpbmVCb3hlcyhib29sIGZ1bGxMYXlv
dXQpCiAKICAgICBpZiAoIWFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpKSB7CiAgICAgICAgIC8vIFdl
IGhhdmUgdG8gZ3JvdmVsIGludG8gb3VyIGNoaWxkcmVuIGluIG9yZGVyIHRvIGRpcnR5IHRoZSBh
cHByb3ByaWF0ZSBsaW5lcy4KLSAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBm
aXJzdENoaWxkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKSB7
Ci0gICAgICAgICAgICBpZiAoY3VycmVudC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25l
ZCgpKQorICAgICAgICBmb3IgKGF1dG8mIGN1cnJlbnQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJP
YmplY3Q+KCp0aGlzKSkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnQuaXNGbG9hdGluZ09yT3V0
T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgaWYgKGlzPFJlbmRlckJveD4oKmN1cnJlbnQpICYmICFjdXJyZW50LT5uZWVkc0xheW91dCgp
KSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVyQm94JiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5k
ZXJCb3g+KCpjdXJyZW50KTsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KGN1cnJlbnQp
ICYmICFjdXJyZW50Lm5lZWRzTGF5b3V0KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiByZW5k
ZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KGN1cnJlbnQpOwogICAgICAgICAgICAgICAgIGlm
IChyZW5kZXJCb3guaW5saW5lQm94V3JhcHBlcigpKQogICAgICAgICAgICAgICAgICAgICByZW5k
ZXJCb3guaW5saW5lQm94V3JhcHBlcigpLT5yb290KCkubWFya0RpcnR5KCk7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKCFjdXJyZW50LT5zZWxmTmVlZHNMYXlvdXQoKSkgewotICAgICAgICAgICAg
ICAgIGlmIChpczxSZW5kZXJJbmxpbmU+KCpjdXJyZW50KSkgewotICAgICAgICAgICAgICAgICAg
ICBSZW5kZXJJbmxpbmUmIHJlbmRlcklubGluZSA9IGRvd25jYXN0PFJlbmRlcklubGluZT4oKmN1
cnJlbnQpOworICAgICAgICAgICAgfSBlbHNlIGlmICghY3VycmVudC5zZWxmTmVlZHNMYXlvdXQo
KSkgeworICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJJbmxpbmU+KGN1cnJlbnQpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGF1dG8mIHJlbmRlcklubGluZSA9IGRvd25jYXN0PFJlbmRlcklu
bGluZT4oY3VycmVudCk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoSW5saW5lRmxvd0JveCog
Y2hpbGRMaW5lID0gcmVuZGVySW5saW5lLmZpcnN0TGluZUJveCgpOyBjaGlsZExpbmU7IGNoaWxk
TGluZSA9IGNoaWxkTGluZS0+bmV4dExpbmVCb3goKSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGNoaWxkTGluZS0+cm9vdCgpLm1hcmtEaXJ0eSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaXM8UmVuZGVyVGV4dD4oKmN1cnJlbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRl
clRleHQmIHJlbmRlclRleHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqY3VycmVudCk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJUZXh0PihjdXJyZW50KSkgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvJiByZW5kZXJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oY3Vy
cmVudCk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoSW5saW5lVGV4dEJveCogY2hpbGRUZXh0
ID0gcmVuZGVyVGV4dC5maXJzdFRleHRCb3goKTsgY2hpbGRUZXh0OyBjaGlsZFRleHQgPSBjaGls
ZFRleHQtPm5leHRUZXh0Qm94KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFRleHQt
PnJvb3QoKS5tYXJrRGlydHkoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRl
ckxpbmVCcmVhaz4oKmN1cnJlbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlckxpbmVC
cmVhayYgcmVuZGVyQlIgPSBkb3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+KCpjdXJyZW50KTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlckxpbmVCcmVhaz4oY3VycmVudCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byYgcmVuZGVyQlIgPSBkb3duY2FzdDxSZW5kZXJMaW5l
QnJlYWs+KGN1cnJlbnQpOwogICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVyQlIuaW5saW5l
Qm94V3JhcHBlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyQlIuaW5saW5lQm94
V3JhcHBlcigpLT5yb290KCkubWFya0RpcnR5KCk7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKaW5kZXggMjg0Y2ViMTljNDY4
YmEwM2Y5ZjBmYzA1OWQ5MDQxOGVkNTMwNjUxZS4uNjdkNmJmNDMwMTM1MDlmZjc0MzgyYzA1NjY5
ZDZjMmU5OTg4OGU3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RJdGVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0
ZW0uY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSFRNTFVMaXN0RWxlbWVudC5oIgog
I2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50Lmgi
CisjaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlcklubGlu
ZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0
aUNvbHVtbkZsb3dUaHJlYWQuaCIKQEAgLTIyNywyMyArMjI4LDIzIEBAIGJvb2wgUmVuZGVyTGlz
dEl0ZW06OmlzRW1wdHkoKSBjb25zdAogc3RhdGljIFJlbmRlckJsb2NrKiBnZXRQYXJlbnRPZkZp
cnN0TGluZUJveChSZW5kZXJCbG9jayYgY3VycmVudCwgUmVuZGVyT2JqZWN0JiBtYXJrZXIpCiB7
CiAgICAgYm9vbCBpblF1aXJrc01vZGUgPSBjdXJyZW50LmRvY3VtZW50KCkuaW5RdWlya3NNb2Rl
KCk7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gY3VycmVudC5maXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGls
ZCA9PSAmbWFya2VyKQorICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5k
ZXJPYmplY3Q+KGN1cnJlbnQpKSB7CisgICAgICAgIGlmICgmY2hpbGQgPT0gJm1hcmtlcikKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChjaGlsZC0+aXNJbmxpbmUoKSAmJiAo
IWlzPFJlbmRlcklubGluZT4oKmNoaWxkKSB8fCBjdXJyZW50LmdlbmVyYXRlc0xpbmVCb3hlc0Zv
cklubGluZUNoaWxkKGNoaWxkKSkpCisgICAgICAgIGlmIChjaGlsZC5pc0lubGluZSgpICYmICgh
aXM8UmVuZGVySW5saW5lPihjaGlsZCkgfHwgY3VycmVudC5nZW5lcmF0ZXNMaW5lQm94ZXNGb3JJ
bmxpbmVDaGlsZCgmY2hpbGQpKSkKICAgICAgICAgICAgIHJldHVybiAmY3VycmVudDsKIAotICAg
ICAgICBpZiAoY2hpbGQtPmlzRmxvYXRpbmcoKSB8fCBjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlv
bmVkKCkpCisgICAgICAgIGlmIChjaGlsZC5pc0Zsb2F0aW5nKCkgfHwgY2hpbGQuaXNPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoaXM8
UmVuZGVyVGFibGU+KCpjaGlsZCkgfHwgIWlzPFJlbmRlckJsb2NrPigqY2hpbGQpIHx8IChpczxS
ZW5kZXJCb3g+KCpjaGlsZCkgJiYgZG93bmNhc3Q8UmVuZGVyQm94PigqY2hpbGQpLmlzV3JpdGlu
Z01vZGVSb290KCkpKQorICAgICAgICBpZiAoaXM8UmVuZGVyVGFibGU+KGNoaWxkKSB8fCAhaXM8
UmVuZGVyQmxvY2s+KGNoaWxkKSB8fCAoaXM8UmVuZGVyQm94PihjaGlsZCkgJiYgZG93bmNhc3Q8
UmVuZGVyQm94PihjaGlsZCkuaXNXcml0aW5nTW9kZVJvb3QoKSkpCiAgICAgICAgICAgICBicmVh
azsKIAotICAgICAgICBpZiAoaXM8UmVuZGVyTGlzdEl0ZW0+KGN1cnJlbnQpICYmIGluUXVpcmtz
TW9kZSAmJiBjaGlsZC0+bm9kZSgpICYmIGlzSFRNTExpc3RFbGVtZW50KCpjaGlsZC0+bm9kZSgp
KSkKKyAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RJdGVtPihjdXJyZW50KSAmJiBpblF1aXJrc01v
ZGUgJiYgY2hpbGQubm9kZSgpICYmIGlzSFRNTExpc3RFbGVtZW50KCpjaGlsZC5ub2RlKCkpKQog
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgaWYgKFJlbmRlckJsb2NrKiBsaW5lQm94ID0g
Z2V0UGFyZW50T2ZGaXJzdExpbmVCb3goZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjaGlsZCksIG1h
cmtlcikpCisgICAgICAgIGlmIChSZW5kZXJCbG9jayogbGluZUJveCA9IGdldFBhcmVudE9mRmly
c3RMaW5lQm94KGRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZCksIG1hcmtlcikpCiAgICAgICAg
ICAgICByZXR1cm4gbGluZUJveDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAKaW5kZXggZWM3ZTJlNDFjM2EyMjA5OGY4MDQ0NzhlZWY3YWUyZjUxZDU1
OWMwNi4uNzExMGM1MWI5NjllNTgxYjJhNzViYTk1OGNlNmRmZDc5NmUyZGVjYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAKICNp
bmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUHNldWRv
RWxlbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJS
ZW5kZXJDb3VudGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxvd1RocmVhZC5oIgogI2luY2x1ZGUg
IlJlbmRlckdlb21ldHJ5TWFwLmgiCkBAIC0xNjgsMTIgKzE2OSwxNSBAQCB2b2lkIFJlbmRlck9i
amVjdDo6c2V0Rmxvd1RocmVhZFN0YXRlSW5jbHVkaW5nRGVzY2VuZGFudHMoRmxvd1RocmVhZFN0
YXRlIHN0YXRlKQogewogICAgIHNldEZsb3dUaHJlYWRTdGF0ZShzdGF0ZSk7CiAKLSAgICBmb3Ig
KFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgIGlmICghaXM8UmVuZGVyRWxlbWVudD4oKnRoaXMp
KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5
cGU8UmVuZGVyT2JqZWN0Pihkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqdGhpcykpKSB7CiAgICAg
ICAgIC8vIElmIHRoZSBjaGlsZCBpcyBhIGZyYWdtZW50YXRpb24gY29udGV4dCBpdCBhbHJlYWR5
IHVwZGF0ZWQgdGhlIGRlc2NlbmRhbnRzIGZsYWcgYWNjb3JkaW5nbHkuCi0gICAgICAgIGlmIChj
aGlsZC0+aXNSZW5kZXJGbG93VGhyZWFkKCkpCisgICAgICAgIGlmIChjaGlsZC5pc1JlbmRlckZs
b3dUaHJlYWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBBU1NFUlQoc3RhdGUg
IT0gY2hpbGQtPmZsb3dUaHJlYWRTdGF0ZSgpKTsKLSAgICAgICAgY2hpbGQtPnNldEZsb3dUaHJl
YWRTdGF0ZUluY2x1ZGluZ0Rlc2NlbmRhbnRzKHN0YXRlKTsKKyAgICAgICAgQVNTRVJUKHN0YXRl
ICE9IGNoaWxkLmZsb3dUaHJlYWRTdGF0ZSgpKTsKKyAgICAgICAgY2hpbGQuc2V0Rmxvd1RocmVh
ZFN0YXRlSW5jbHVkaW5nRGVzY2VuZGFudHMoc3RhdGUpOwogICAgIH0KIH0KIApAQCAtODAwLDgg
KzgwNCwxMiBAQCB2b2lkIFJlbmRlck9iamVjdDo6YWRkQWJzb2x1dGVSZWN0Rm9yTGF5ZXIoTGF5
b3V0UmVjdCYgcmVzdWx0KQogewogICAgIGlmIChoYXNMYXllcigpKQogICAgICAgICByZXN1bHQu
dW5pdGUoYWJzb2x1dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKSk7Ci0gICAg
Zm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJzdENoaWxkU2xvdygpOyBjdXJyZW50OyBj
dXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY3VycmVudC0+YWRkQWJz
b2x1dGVSZWN0Rm9yTGF5ZXIocmVzdWx0KTsKKworICAgIGlmICghaXM8UmVuZGVyRWxlbWVudD4o
KnRoaXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRy
ZW5PZlR5cGU8UmVuZGVyT2JqZWN0Pihkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqdGhpcykpKQor
ICAgICAgICBjaGlsZC5hZGRBYnNvbHV0ZVJlY3RGb3JMYXllcihyZXN1bHQpOwogfQogCiAvLyBG
SVhNRTogY2hhbmdlIHRoaXMgdG8gdXNlIHRoZSBzdWJ0cmVlUGFpbnQgdGVybWlub2xvZ3kKQEAg
LTgwOSw4ICs4MTcsMTAgQEAgTGF5b3V0UmVjdCBSZW5kZXJPYmplY3Q6OnBhaW50aW5nUm9vdFJl
Y3QoTGF5b3V0UmVjdCYgdG9wTGV2ZWxSZWN0KQogewogICAgIExheW91dFJlY3QgcmVzdWx0ID0g
YWJzb2x1dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKTsKICAgICB0b3BMZXZl
bFJlY3QgPSByZXN1bHQ7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJzdENo
aWxkU2xvdygpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkKLSAg
ICAgICAgY3VycmVudC0+YWRkQWJzb2x1dGVSZWN0Rm9yTGF5ZXIocmVzdWx0KTsKKyAgICBpZiAo
aXM8UmVuZGVyRWxlbWVudD4oKnRoaXMpKSB7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBj
aGlsZHJlbk9mVHlwZTxSZW5kZXJPYmplY3Q+KGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCp0aGlz
KSkpCisgICAgICAgICAgICBjaGlsZC5hZGRBYnNvbHV0ZVJlY3RGb3JMYXllcihyZXN1bHQpOwor
ICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNTg4LDggKzE1OTgsMTAgQEAgdm9p
ZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkSW5jbHVkaW5nRGVzY2Vu
ZGFudHMoYm9vbCBzaG91bGRVcGQKICAgICBpZiAoaXNSZW5kZXJGbG93VGhyZWFkKCkpCiAgICAg
ICAgIHNob3VsZFVwZGF0ZVN0YXRlID0gZmFsc2U7CiAKLSAgICBmb3IgKFJlbmRlck9iamVjdCog
Y2hpbGQgPSBmaXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkKLSAgICAgICAgY2hpbGQtPnJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkSW5jbHVkaW5n
RGVzY2VuZGFudHMoc2hvdWxkVXBkYXRlU3RhdGUpOworICAgIGlmIChpczxSZW5kZXJFbGVtZW50
PigqdGhpcykpIHsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJl
bmRlck9iamVjdD4oZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oKnRoaXMpKSkKKyAgICAgICAgICAg
IGNoaWxkLnJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkSW5jbHVkaW5nRGVzY2VuZGFudHMoc2hv
dWxkVXBkYXRlU3RhdGUpOworICAgIH0KIAogICAgIC8vIFdlIGhhdmUgdG8gYXNrIGZvciBvdXIg
Y29udGFpbmluZyBmbG93IHRocmVhZCBhcyBpdCBtYXkgYmUgYWJvdmUgdGhlIHJlbW92ZWQgc3Vi
LXRyZWUuCiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jayA9
IHRoaXMtPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKQEAgLTE2MjcsOCArMTYzOSwxMSBA
QCB2b2lkIFJlbmRlck9iamVjdDo6aW52YWxpZGF0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2tJ
bmNsdWRpbmdEZXNjZW5kYW50cyhSZW5kZQogICAgIGlmIChmbG93VGhyZWFkKQogICAgICAgICBm
bG93VGhyZWFkLT5yZW1vdmVGbG93Q2hpbGRJbmZvKHRoaXMpOwogCi0gICAgZm9yIChSZW5kZXJP
YmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5pbnZhbGlkYXRlRmxvd1RocmVhZENvbnRhaW5p
bmdCbG9ja0luY2x1ZGluZ0Rlc2NlbmRhbnRzKGZsb3dUaHJlYWQpOworICAgIGlmICghaXM8UmVu
ZGVyRWxlbWVudD4oKnRoaXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIGNo
aWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0Pihkb3duY2FzdDxSZW5kZXJFbGVtZW50
PigqdGhpcykpKQorICAgICAgICBjaGlsZC5pbnZhbGlkYXRlRmxvd1RocmVhZENvbnRhaW5pbmdC
bG9ja0luY2x1ZGluZ0Rlc2NlbmRhbnRzKGZsb3dUaHJlYWQpOwogfQogCiBzdGF0aWMgdm9pZCBj
b2xsYXBzZUFub255bW91c1RhYmxlUm93c0lmTmVlZGVkKGNvbnN0IFJlbmRlck9iamVjdCYgcmVu
ZGVyZXJUb0JlRGVzdHJveWVkKQpAQCAtMTcyMyw4ICsxNzM4LDEyIEBAIHZvaWQgUmVuZGVyT2Jq
ZWN0Ojp1cGRhdGVEcmFnU3RhdGUoYm9vbCBkcmFnT24pCiAgICAgc2V0SXNEcmFnZ2luZyhkcmFn
T24pOwogICAgIGlmICh2YWx1ZUNoYW5nZWQgJiYgbm9kZSgpICYmIChzdHlsZSgpLmFmZmVjdGVk
QnlEcmFnKCkgfHwgKGlzPEVsZW1lbnQ+KCpub2RlKCkpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCpu
b2RlKCkpLmNoaWxkcmVuQWZmZWN0ZWRCeURyYWcoKSkpKQogICAgICAgICBub2RlKCktPnNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hp
bGRTbG93KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKQotICAgICAgICBjdXJy
LT51cGRhdGVEcmFnU3RhdGUoZHJhZ09uKTsKKworICAgIGlmICghaXM8UmVuZGVyRWxlbWVudD4o
KnRoaXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRy
ZW5PZlR5cGU8UmVuZGVyT2JqZWN0Pihkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqdGhpcykpKQor
ICAgICAgICBjaGlsZC51cGRhdGVEcmFnU3RhdGUoZHJhZ09uKTsKIH0KIAogYm9vbCBSZW5kZXJP
YmplY3Q6OmlzQ29tcG9zaXRlZCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcAppbmRleCBiMTRiYTVmZjU4NGI5YzFkYTdkMGU0ZGU1NDNhYmJjNWM0NzVmNTA1
Li4yMjcwYzJhNjNiMjI0YTJjY2VlYWE3ZGY5NTE5MDE2NTgzZmQyMTQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50LmgiCiAjaW5jbHVkZSAi
TGF5b3V0UmVwYWludGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNs
dWRlICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIgpAQCAtODc5LDEyICs4ODAsMTIgQEAgdm9p
ZCBSZW5kZXJUYWJsZTo6YXBwZW5kQ29sdW1uKHVuc2lnbmVkIHNwYW4pCiAKIFJlbmRlclRhYmxl
Q29sKiBSZW5kZXJUYWJsZTo6Zmlyc3RDb2x1bW4oKSBjb25zdAogewotICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGlzPFJlbmRlclRhYmxlQ29sPigqY2hpbGQpKQotICAg
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRhYmxlQ29sPihjaGlsZCk7CisgICAgZm9y
IChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oKnRoaXMpKSB7Cisg
ICAgICAgIGlmIChpczxSZW5kZXJUYWJsZUNvbD4oY2hpbGQpKQorICAgICAgICAgICAgcmV0dXJu
ICZjb25zdF9jYXN0PFJlbmRlclRhYmxlQ29sJj4oZG93bmNhc3Q8UmVuZGVyVGFibGVDb2w+KGNo
aWxkKSk7CiAKICAgICAgICAgLy8gV2UgYWxsb3cgb25seSB0YWJsZS1jYXB0aW9ucyBiZWZvcmUg
Y29sdW1ucyBvciBjb2x1bW4tZ3JvdXBzLgotICAgICAgICBpZiAoIWlzPFJlbmRlclRhYmxlQ2Fw
dGlvbj4oKmNoaWxkKSkKKyAgICAgICAgaWYgKCFpczxSZW5kZXJUYWJsZUNhcHRpb24+KGNoaWxk
KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAKaW5kZXggNjk4ZWMxOTg5ZmMwZGJkY2JmMmQ4
NzJlMzNlMzQwNGQ1NTExMjlhYS4uYjAxZjZmNjg5NjgxNGYzZWQ3ZTUwZWY3ZTQ4YjFmZjA5ZWVj
MjEyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29s
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1M
VGFibGVDb2xFbGVtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGUuaCIKICNpbmNs
dWRlICJSZW5kZXJUYWJsZUNhcHRpb24uaCIKQEAgLTEzMSw4ICsxMzIsOCBAQCB2b2lkIFJlbmRl
clRhYmxlQ29sOjpjbGVhclByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eUJpdHMoKQogewogICAg
IHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7CiAKLSAgICBmb3IgKFJlbmRl
ck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpKQotICAgICAgICBjaGlsZC0+c2V0UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5
KGZhbHNlKTsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2Jq
ZWN0PigqdGhpcykpCisgICAgICAgIGNoaWxkLnNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0
eShmYWxzZSk7CiB9CiAKIFJlbmRlclRhYmxlKiBSZW5kZXJUYWJsZUNvbDo6dGFibGUoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApp
bmRleCAyMjMwMzZmNjkyNTRiMGZhYzllMjljYWNmYTRjMzY4YThiOGFkYWZlLi42ZjU4Njk3Y2I5
ZGI4N2E2YjJhNWRiODdmMDU3M2M5ZDQ1NTgxYzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1
ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJQ
YWludEluZm8uaCIKKyNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIK
ICNpbmNsdWRlICJSZW5kZXJUYWJsZUNvbC5oIgpAQCAtNTcwLDExICs1NzEsMTEgQEAgdm9pZCBS
ZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoKQogICAgICAgICAgICAgYm9vbCBmbGV4QWxs
Q2hpbGRyZW4gPSBjZWxsLT5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKS5pc0ZpeGVkKCkKICAgICAg
ICAgICAgICAgICB8fCAoIXRhYmxlKCktPnN0eWxlKCkubG9naWNhbEhlaWdodCgpLmlzQXV0bygp
ICYmIHJIZWlnaHQgIT0gY2VsbC0+bG9naWNhbEhlaWdodCgpKTsKIAotICAgICAgICAgICAgZm9y
IChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY2VsbC0+Zmlyc3RDaGlsZCgpOyByZW5kZXJlcjsg
cmVuZGVyZXIgPSByZW5kZXJlci0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAgICAgICAgIGlm
ICghaXM8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKSAmJiByZW5kZXJlci0+c3R5bGUoKS5sb2dpY2Fs
SGVpZ2h0KCkuaXNQZXJjZW50T3JDYWxjdWxhdGVkKCkgJiYgKGZsZXhBbGxDaGlsZHJlbiB8fCAo
KHJlbmRlcmVyLT5pc1JlcGxhY2VkKCkgfHwgKGlzPFJlbmRlckJveD4oKnJlbmRlcmVyKSAmJiBk
b3duY2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcikuc2Nyb2xsc092ZXJmbG93KCkpKSAmJiAhaXM8
UmVuZGVyVGV4dENvbnRyb2w+KCpyZW5kZXJlcikpKSkgeworICAgICAgICAgICAgZm9yIChhdXRv
JiByZW5kZXJlciA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oKmNlbGwpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFpczxSZW5kZXJUZXh0PihyZW5kZXJlcikgJiYgcmVuZGVyZXIuc3R5
bGUoKS5sb2dpY2FsSGVpZ2h0KCkuaXNQZXJjZW50T3JDYWxjdWxhdGVkKCkgJiYgKGZsZXhBbGxD
aGlsZHJlbiB8fCAoKHJlbmRlcmVyLmlzUmVwbGFjZWQoKSB8fCAoaXM8UmVuZGVyQm94PihyZW5k
ZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikuc2Nyb2xsc092ZXJmbG93KCkp
KSAmJiAhaXM8UmVuZGVyVGV4dENvbnRyb2w+KHJlbmRlcmVyKSkpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFRhYmxlcyB3aXRoIG5vIHNlY3Rpb25zIGRvIG5vdCBmbGV4LgotICAgICAgICAg
ICAgICAgICAgICBpZiAoIWlzPFJlbmRlclRhYmxlPigqcmVuZGVyZXIpIHx8IGRvd25jYXN0PFJl
bmRlclRhYmxlPigqcmVuZGVyZXIpLmhhc1NlY3Rpb25zKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWlzPFJlbmRlclRhYmxlPihyZW5kZXJlcikgfHwgZG93bmNhc3Q8UmVu
ZGVyVGFibGU+KHJlbmRlcmVyKS5oYXNTZWN0aW9ucygpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZW5kZXJlci5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgY2VsbENoaWxkcmVuRmxleCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VHJlZUFzVGV4dC5jcHAKaW5kZXggY2FjMGY3NzRiNjE4YTkyMmIyNmZiY2QxNjEwODM5NDk1MmYx
ODI1NS4uMGU5YTM5MGE2M2UxN2EyYmY3MWQyMDk5YmZkNTE4ODVmZDlmOTE4OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNTY2LDEwICs1
NjYsMTAgQEAgdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBv
LCBpbnQgaW5kZW50LCBSZW5kZXJBc1RleHRCZWhhdmkKICAgICAgICAgfQogCiAgICAgfSBlbHNl
IHsKLSAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZG93bmNhc3Q8UmVuZGVyRWxl
bWVudD4obykuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkgewotICAgICAgICAgICAgaWYgKGNoaWxkLT5oYXNMYXllcigpKQorICAgICAgICBmb3IgKGF1
dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0Pihkb3duY2FzdDxSZW5kZXJF
bGVtZW50PihvKSkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC5oYXNMYXllcigpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgd3JpdGUodHMsICpjaGlsZCwgaW5kZW50
ICsgMSwgYmVoYXZpb3IpOworICAgICAgICAgICAgd3JpdGUodHMsIGNoaWxkLCBpbmRlbnQgKyAx
LCBiZWhhdmlvcik7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCmluZGV4IDUxM2Y4NjZjZmMwYThhNjU4MzVhNjAx
MGQxMzExOWJkMWJmY2U4NmMuLmY3YzRlNDIyZTNhM2QzNjUwY2Q4OThlNjA2NGZlMmM4NDBkMGVj
NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNw
cApAQCAtMTE4LDE0ICsxMTgsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbGxlY3RMYXlvdXRB
dHRyaWJ1dGVzKFJlbmRlck9iamVjdCogdGV4dCwgVmVjdG9yPFNWR1RleHRMYXkKICAgICB9CiB9
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmaW5kUHJldmlvdXNBbmROZXh0QXR0cmlidXRlcyhSZW5k
ZXJFbGVtZW50KiBzdGFydCwgUmVuZGVyU1ZHSW5saW5lVGV4dCogbG9jYXRlRWxlbWVudCwgYm9v
bCYgc3RvcEFmdGVyTmV4dCwgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqJiBwcmV2aW91cywgU1ZH
VGV4dExheW91dEF0dHJpYnV0ZXMqJiBuZXh0KQorc3RhdGljIGlubGluZSBib29sIGZpbmRQcmV2
aW91c0FuZE5leHRBdHRyaWJ1dGVzKFJlbmRlckVsZW1lbnQmIHN0YXJ0LCBSZW5kZXJTVkdJbmxp
bmVUZXh0KiBsb2NhdGVFbGVtZW50LCBib29sJiBzdG9wQWZ0ZXJOZXh0LCBTVkdUZXh0TGF5b3V0
QXR0cmlidXRlcyomIHByZXZpb3VzLCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyomIG5leHQpCiB7
CiAgICAgQVNTRVJUKHN0YXJ0KTsKICAgICBBU1NFUlQobG9jYXRlRWxlbWVudCk7CiAgICAgLy8g
RklYTUU6IE1ha2UgdGhpcyBpdGVyYXRpdmUuCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxk
ID0gc3RhcnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpIHsKLSAgICAgICAgaWYgKGlzPFJlbmRlclNWR0lubGluZVRleHQ+KCpjaGlsZCkpIHsKLSAg
ICAgICAgICAgIFJlbmRlclNWR0lubGluZVRleHQmIHRleHQgPSBkb3duY2FzdDxSZW5kZXJTVkdJ
bmxpbmVUZXh0PigqY2hpbGQpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlw
ZTxSZW5kZXJPYmplY3Q+KHN0YXJ0KSkgeworICAgICAgICBpZiAoaXM8UmVuZGVyU1ZHSW5saW5l
VGV4dD4oY2hpbGQpKSB7CisgICAgICAgICAgICBhdXRvJiB0ZXh0ID0gZG93bmNhc3Q8UmVuZGVy
U1ZHSW5saW5lVGV4dD4oY2hpbGQpOwogICAgICAgICAgICAgaWYgKGxvY2F0ZUVsZW1lbnQgIT0g
JnRleHQpIHsKICAgICAgICAgICAgICAgICBpZiAoc3RvcEFmdGVyTmV4dCkgewogICAgICAgICAg
ICAgICAgICAgICBuZXh0ID0gdGV4dC5sYXlvdXRBdHRyaWJ1dGVzKCk7CkBAIC0xNDAsNyArMTQw
LDcgQEAgc3RhdGljIGlubGluZSBib29sIGZpbmRQcmV2aW91c0FuZE5leHRBdHRyaWJ1dGVzKFJl
bmRlckVsZW1lbnQqIHN0YXJ0LCBSZW5kZXJTVkcKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKCFpczxSZW5kZXJTVkdJbmxpbmU+KCpjaGlsZCkpCisgICAg
ICAgIGlmICghaXM8UmVuZGVyU1ZHSW5saW5lPihjaGlsZCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICBpZiAoZmluZFByZXZpb3VzQW5kTmV4dEF0dHJpYnV0ZXMoZG93bmNhc3Q8
UmVuZGVyRWxlbWVudD4oY2hpbGQpLCBsb2NhdGVFbGVtZW50LCBzdG9wQWZ0ZXJOZXh0LCBwcmV2
aW91cywgbmV4dCkpCkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjpzdWJ0
cmVlQ2hpbGRXYXNBZGRlZChSZW5kZXJPYmplY3QqIGNoaWxkKQogICAgICAgICAgICAgU1ZHVGV4
dExheW91dEF0dHJpYnV0ZXMqIHByZXZpb3VzID0gMDsKICAgICAgICAgICAgIFNWR1RleHRMYXlv
dXRBdHRyaWJ1dGVzKiBuZXh0ID0gMDsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY2hpbGQs
ICZhdHRyaWJ1dGVzLT5jb250ZXh0KCkgPT0gY2hpbGQpOwotICAgICAgICAgICAgZmluZFByZXZp
b3VzQW5kTmV4dEF0dHJpYnV0ZXModGhpcywgJmF0dHJpYnV0ZXMtPmNvbnRleHQoKSwgc3RvcEFm
dGVyTmV4dCwgcHJldmlvdXMsIG5leHQpOworICAgICAgICAgICAgZmluZFByZXZpb3VzQW5kTmV4
dEF0dHJpYnV0ZXMoKnRoaXMsICZhdHRyaWJ1dGVzLT5jb250ZXh0KCksIHN0b3BBZnRlck5leHQs
IHByZXZpb3VzLCBuZXh0KTsKIAogICAgICAgICAgICAgaWYgKHByZXZpb3VzKQogICAgICAgICAg
ICAgICAgIG1fbGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuYnVpbGRMYXlvdXRBdHRyaWJ1dGVzRm9y
VGV4dFJlbmRlcmVyKHByZXZpb3VzLT5jb250ZXh0KCkpOwpAQCAtMjUyLDcgKzI1Miw3IEBAIHZv
aWQgUmVuZGVyU1ZHVGV4dDo6c3VidHJlZUNoaWxkV2lsbEJlUmVtb3ZlZChSZW5kZXJPYmplY3Qq
IGNoaWxkLCBWZWN0b3I8U1ZHVGV4CiAgICAgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqIHByZXZp
b3VzID0gbnVsbHB0cjsKICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyogbmV4dCA9IG51bGxw
dHI7CiAgICAgaWYgKCFkb2N1bWVudEJlaW5nRGVzdHJveWVkKCkpCi0gICAgICAgIGZpbmRQcmV2
aW91c0FuZE5leHRBdHRyaWJ1dGVzKHRoaXMsICZ0ZXh0LCBzdG9wQWZ0ZXJOZXh0LCBwcmV2aW91
cywgbmV4dCk7CisgICAgICAgIGZpbmRQcmV2aW91c0FuZE5leHRBdHRyaWJ1dGVzKCp0aGlzLCAm
dGV4dCwgc3RvcEFmdGVyTmV4dCwgcHJldmlvdXMsIG5leHQpOwogCiAgICAgaWYgKHByZXZpb3Vz
KQogICAgICAgICBhZmZlY3RlZEF0dHJpYnV0ZXMuYXBwZW5kKHByZXZpb3VzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCmluZGV4IDdm
NzIyMTZjNzAxYmNlYWNiMGU4NDY0NDkyZGEyMmM0MzI2YjA0MDAuLmRkYmRiZTM2YjBlYzBkZDM1
OWNmMjMwYWNmNTVmOGNhMzY5YzBlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
IlNWR1JlbmRlclN1cHBvcnQuaCIKIAogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgorI2lu
Y2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyR2VvbWV0cnlNYXAuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRv
ci5oIgpAQCAtMTMxLDcgKzEzMiw3IEBAIGJvb2wgU1ZHUmVuZGVyU3VwcG9ydDo6Y2hlY2tGb3JT
VkdSZXBhaW50RHVyaW5nTGF5b3V0KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlCiB9CiAKIC8v
IFVwZGF0ZSBhIGJvdW5kaW5nIGJveCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSB2YWxpZGl0eSBv
ZiB0aGUgb3RoZXIgYm91bmRpbmcgYm94Lgotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZU9iamVj
dEJvdW5kaW5nQm94KEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIGJvb2wmIG9iamVjdEJv
dW5kaW5nQm94VmFsaWQsIFJlbmRlck9iamVjdCogb3RoZXIsIEZsb2F0UmVjdCBvdGhlckJvdW5k
aW5nQm94KQorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZU9iamVjdEJvdW5kaW5nQm94KEZsb2F0
UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIGJvb2wmIG9iamVjdEJvdW5kaW5nQm94VmFsaWQsIGNv
bnN0IFJlbmRlck9iamVjdCogb3RoZXIsIEZsb2F0UmVjdCBvdGhlckJvdW5kaW5nQm94KQogewog
ICAgIGJvb2wgb3RoZXJWYWxpZCA9IGlzPFJlbmRlclNWR0NvbnRhaW5lcj4oKm90aGVyKSA/IGRv
d25jYXN0PFJlbmRlclNWR0NvbnRhaW5lcj4oKm90aGVyKS5pc09iamVjdEJvdW5kaW5nQm94VmFs
aWQoKSA6IHRydWU7CiAgICAgaWYgKCFvdGhlclZhbGlkKQpAQCAtMTU1LDIxICsxNTYsMjEgQEAg
dm9pZCBTVkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyhjb25z
dCBSZW5kZXJFbGVtZW50JiBjb250YWkKICAgICAvLyBXaGVuIGNvbXB1dGluZyB0aGUgc3Ryb2tl
Qm91bmRpbmdCb3gsIHdlIHVzZSB0aGUgcmVwYWludFJlY3RzIG9mIHRoZSBjb250YWluZXIncyBj
aGlsZHJlbiBzbyB0aGF0IHRoZSBjb250YWluZXIncyBzdHJva2UgaW5jbHVkZXMKICAgICAvLyB0
aGUgcmVzb3VyY2VzIGFwcGxpZWQgdG8gdGhlIGNoaWxkcmVuIChzdWNoIGFzIGNsaXBzIGFuZCBm
aWx0ZXJzKS4gVGhpcyBhbGxvd3MgZmlsdGVycyBhcHBsaWVkIHRvIGNvbnRhaW5lcnMgdG8gY29y
cmVjdGx5IGJvdW5kCiAgICAgLy8gdGhlIGNoaWxkcmVuLCBhbmQgYWxzbyBpbXByb3ZlcyBpbmxp
bmluZyBvZiBTVkcgY29udGVudCwgYXMgdGhlIHN0cm9rZSBib3VuZCBpcyB1c2VkIGluIHRoYXQg
c2l0dWF0aW9uIGFsc28uCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBjb250YWlu
ZXIuZmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmco
KSkgewotICAgICAgICBpZiAoY3VycmVudC0+aXNTVkdIaWRkZW5Db250YWluZXIoKSkKKyAgICBm
b3IgKGF1dG8mIGN1cnJlbnQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJPYmplY3Q+KGNvbnRhaW5l
cikpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQuaXNTVkdIaWRkZW5Db250YWluZXIoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8vIERvbid0IGluY2x1ZGUgZWxlbWVudHMgaW4g
dGhlIHVuaW9uIHRoYXQgZG8gbm90IHJlbmRlci4KLSAgICAgICAgaWYgKGlzPFJlbmRlclNWR1No
YXBlPigqY3VycmVudCkgJiYgZG93bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KCpjdXJyZW50KS5pc1Jl
bmRlcmluZ0Rpc2FibGVkKCkpCisgICAgICAgIGlmIChpczxSZW5kZXJTVkdTaGFwZT4oY3VycmVu
dCkgJiYgZG93bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KGN1cnJlbnQpLmlzUmVuZGVyaW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtID0gY3VycmVudC0+bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpOworICAg
ICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSA9IGN1cnJlbnQubG9jYWxUb1Bh
cmVudFRyYW5zZm9ybSgpOwogICAgICAgICBpZiAodHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkgewot
ICAgICAgICAgICAgdXBkYXRlT2JqZWN0Qm91bmRpbmdCb3gob2JqZWN0Qm91bmRpbmdCb3gsIG9i
amVjdEJvdW5kaW5nQm94VmFsaWQsIGN1cnJlbnQsIGN1cnJlbnQtPm9iamVjdEJvdW5kaW5nQm94
KCkpOwotICAgICAgICAgICAgc3Ryb2tlQm91bmRpbmdCb3gudW5pdGUoY3VycmVudC0+cmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgICAgICAgICB1cGRhdGVPYmplY3RCb3Vu
ZGluZ0JveChvYmplY3RCb3VuZGluZ0JveCwgb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCwgJmN1cnJl
bnQsIGN1cnJlbnQub2JqZWN0Qm91bmRpbmdCb3goKSk7CisgICAgICAgICAgICBzdHJva2VCb3Vu
ZGluZ0JveC51bml0ZShjdXJyZW50LnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdXBkYXRlT2JqZWN0Qm91bmRpbmdCb3gob2Jq
ZWN0Qm91bmRpbmdCb3gsIG9iamVjdEJvdW5kaW5nQm94VmFsaWQsIGN1cnJlbnQsIHRyYW5zZm9y
bS5tYXBSZWN0KGN1cnJlbnQtPm9iamVjdEJvdW5kaW5nQm94KCkpKTsKLSAgICAgICAgICAgIHN0
cm9rZUJvdW5kaW5nQm94LnVuaXRlKHRyYW5zZm9ybS5tYXBSZWN0KGN1cnJlbnQtPnJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKKyAgICAgICAgICAgIHVwZGF0ZU9iamVjdEJvdW5k
aW5nQm94KG9iamVjdEJvdW5kaW5nQm94LCBvYmplY3RCb3VuZGluZ0JveFZhbGlkLCAmY3VycmVu
dCwgdHJhbnNmb3JtLm1hcFJlY3QoY3VycmVudC5vYmplY3RCb3VuZGluZ0JveCgpKSk7CisgICAg
ICAgICAgICBzdHJva2VCb3VuZGluZ0JveC51bml0ZSh0cmFuc2Zvcm0ubWFwUmVjdChjdXJyZW50
LnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtMjQ3LDU4ICsyNDgsNTcgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJl
bihSZW5kZXJFbGVtZW50JiBzdGFydCwgYm9vbCBzZWxmTmVlZHNMYXlvdXQKICAgICBib29sIG5l
ZWRzQm91bmRhcmllc1VwZGF0ZSA9IHN0YXJ0Lm5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOwogICAg
IEhhc2hTZXQ8UmVuZGVyRWxlbWVudCo+IGVsZW1lbnRzVGhhdERpZE5vdFJlY2VpdmVMYXlvdXQ7
CiAKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBzdGFydC5maXJzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChhdXRvJiBjaGls
ZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oc3RhcnQpKSB7CiAgICAgICAgIGJvb2wg
bmVlZHNMYXlvdXQgPSBzZWxmTmVlZHNMYXlvdXQ7Ci0gICAgICAgIGJvb2wgY2hpbGRFdmVySGFk
TGF5b3V0ID0gY2hpbGQtPmV2ZXJIYWRMYXlvdXQoKTsKKyAgICAgICAgYm9vbCBjaGlsZEV2ZXJI
YWRMYXlvdXQgPSBjaGlsZC5ldmVySGFkTGF5b3V0KCk7CiAKICAgICAgICAgaWYgKG5lZWRzQm91
bmRhcmllc1VwZGF0ZSAmJiBoYXNTVkdTaGFkb3cpIHsKICAgICAgICAgICAgIC8vIElmIHdlIGhh
dmUgYSBzaGFkb3csIG91ciBzaGFkb3cgaXMgYmFrZWQgaW50byBvdXIgY2hpbGRyZW4ncyBjYWNo
ZWQgYm91bmRhcmllcywKICAgICAgICAgICAgIC8vIHNvIHRoZXkgbmVlZCB0byB1cGRhdGUuCi0g
ICAgICAgICAgICBjaGlsZC0+c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7CisgICAgICAgICAg
ICBjaGlsZC5zZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKICAgICAgICAgICAgIG5lZWRzTGF5
b3V0ID0gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICh0cmFuc2Zvcm1DaGFuZ2VkKSB7
CiAgICAgICAgICAgICAvLyBJZiB0aGUgdHJhbnNmb3JtIGNoYW5nZWQgd2UgbmVlZCB0byB1cGRh
dGUgdGhlIHRleHQgbWV0cmljcyAobm90ZTogdGhpcyBhbHNvIGhhcHBlbnMgZm9yIGxheW91dFNp
emVDaGFuZ2VkPXRydWUpLgotICAgICAgICAgICAgaWYgKGlzPFJlbmRlclNWR1RleHQ+KCpjaGls
ZCkpCi0gICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHVGV4dD4oKmNoaWxkKS5zZXRO
ZWVkc1RleHRNZXRyaWNzVXBkYXRlKCk7CisgICAgICAgICAgICBpZiAoaXM8UmVuZGVyU1ZHVGV4
dD4oY2hpbGQpKQorICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclNWR1RleHQ+KGNoaWxk
KS5zZXROZWVkc1RleHRNZXRyaWNzVXBkYXRlKCk7CiAgICAgICAgICAgICBuZWVkc0xheW91dCA9
IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobGF5b3V0U2l6ZUNoYW5nZWQpIHsKKyAg
ICAgICAgaWYgKGxheW91dFNpemVDaGFuZ2VkICYmIGlzPFNWR0VsZW1lbnQ+KGNoaWxkLm5vZGUo
KSkpIHsKICAgICAgICAgICAgIC8vIFdoZW4gc2VsZk5lZWRzTGF5b3V0IGlzIGZhbHNlIGFuZCB0
aGUgbGF5b3V0IHNpemUgY2hhbmdlZCwgd2UgaGF2ZSB0byBjaGVjayB3aGV0aGVyIHRoaXMgY2hp
bGQgdXNlcyByZWxhdGl2ZSBsZW5ndGhzCi0gICAgICAgICAgICBpZiAoU1ZHRWxlbWVudCogZWxl
bWVudCA9IGlzPFNWR0VsZW1lbnQ+KCpjaGlsZC0+bm9kZSgpKSA/IGRvd25jYXN0PFNWR0VsZW1l
bnQ+KGNoaWxkLT5ub2RlKCkpIDogbnVsbHB0cikgewotICAgICAgICAgICAgICAgIGlmIChlbGVt
ZW50LT5oYXNSZWxhdGl2ZUxlbmd0aHMoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXaGVu
IHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkIGFuZCB3aGVuIHVzaW5nIHJlbGF0aXZlIHZhbHVlcyB0
ZWxsIHRoZSBSZW5kZXJTVkdTaGFwZSB0byB1cGRhdGUgaXRzIHNoYXBlIG9iamVjdAotICAgICAg
ICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyU1ZHU2hhcGU+KCpjaGlsZCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4oKmNoaWxkKS5zZXROZWVkc1No
YXBlVXBkYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzPFJlbmRlclNWR1Rl
eHQ+KCpjaGlsZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclNWR1RleHQmIHN2
Z1RleHQgPSBkb3duY2FzdDxSZW5kZXJTVkdUZXh0PigqY2hpbGQpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgc3ZnVGV4dC5zZXROZWVkc1RleHRNZXRyaWNzVXBkYXRlKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBzdmdUZXh0LnNldE5lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUoKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG5lZWRzTGF5b3V0
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGF1dG8mIGVsZW1lbnQgPSBkb3duY2FzdDxTVkdFbGVtZW50
PigqY2hpbGQubm9kZSgpKTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc1JlbGF0aXZlTGVu
Z3RocygpKSB7CisgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgbGF5b3V0IHNpemUgY2hhbmdl
ZCBhbmQgd2hlbiB1c2luZyByZWxhdGl2ZSB2YWx1ZXMgdGVsbCB0aGUgUmVuZGVyU1ZHU2hhcGUg
dG8gdXBkYXRlIGl0cyBzaGFwZSBvYmplY3QKKyAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVy
U1ZHU2hhcGU+KGNoaWxkKSkKKyAgICAgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZH
U2hhcGU+KGNoaWxkKS5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoaXM8UmVuZGVyU1ZHVGV4dD4oY2hpbGQpKSB7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8mIHN2Z1RleHQgPSBkb3duY2FzdDxSZW5kZXJTVkdUZXh0PihjaGlsZCk7CisgICAgICAgICAg
ICAgICAgICAgIHN2Z1RleHQuc2V0TmVlZHNUZXh0TWV0cmljc1VwZGF0ZSgpOworICAgICAgICAg
ICAgICAgICAgICBzdmdUZXh0LnNldE5lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUoKTsKICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZWVkc0xheW91dCA9IHRydWU7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobmVlZHNMYXlvdXQpCi0gICAg
ICAgICAgICBjaGlsZC0+c2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKyAgICAgICAgICAg
IGNoaWxkLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAKLSAgICAgICAgaWYgKGNoaWxk
LT5uZWVkc0xheW91dCgpKSB7Ci0gICAgICAgICAgICBsYXlvdXREaWZmZXJlbnRSb290SWZOZWVk
ZWQoZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oKmNoaWxkKSk7Ci0gICAgICAgICAgICBkb3duY2Fz
dDxSZW5kZXJFbGVtZW50PigqY2hpbGQpLmxheW91dCgpOworICAgICAgICBpZiAoY2hpbGQubmVl
ZHNMYXlvdXQoKSkgeworICAgICAgICAgICAgbGF5b3V0RGlmZmVyZW50Um9vdElmTmVlZGVkKGRv
d25jYXN0PFJlbmRlckVsZW1lbnQ+KGNoaWxkKSk7CisgICAgICAgICAgICBkb3duY2FzdDxSZW5k
ZXJFbGVtZW50PihjaGlsZCkubGF5b3V0KCk7CiAgICAgICAgICAgICAvLyBSZW5kZXJlcnMgYXJl
IHJlc3BvbnNpYmxlIGZvciByZXBhaW50aW5nIHRoZW1zZWx2ZXMgd2hlbiBjaGFuZ2luZywgZXhj
ZXB0CiAgICAgICAgICAgICAvLyBmb3IgdGhlIGluaXRpYWwgcGFpbnQgdG8gYXZvaWQgcG90ZW50
aWFsIGRvdWJsZS1wYWludGluZyBjYXVzZWQgYnkgbm9uLXNlbnNpY2FsICJvbGQiIGJvdW5kcy4K
ICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhhbmRsZSB0aGlzIGluIHRoZSBpbmRpdmlkdWFsIG9i
amVjdHMsIGJ1dCBmb3Igbm93IGl0J3MgZWFzaWVyIHRvIGhhdmUKICAgICAgICAgICAgIC8vIHBh
cmVudCBjb250YWluZXJzIGNhbGwgcmVwYWludCgpLiAgKFJlbmRlckJsb2NrOjpsYXlvdXQqIGhh
cyBzaW1pbGFyIGxvZ2ljLikKICAgICAgICAgICAgIGlmICghY2hpbGRFdmVySGFkTGF5b3V0KQot
ICAgICAgICAgICAgICAgIGNoaWxkLT5yZXBhaW50KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobGF5
b3V0U2l6ZUNoYW5nZWQgJiYgaXM8UmVuZGVyRWxlbWVudD4oKmNoaWxkKSkKLSAgICAgICAgICAg
IGVsZW1lbnRzVGhhdERpZE5vdFJlY2VpdmVMYXlvdXQuYWRkKGRvd25jYXN0PFJlbmRlckVsZW1l
bnQ+KGNoaWxkKSk7CisgICAgICAgICAgICAgICAgY2hpbGQucmVwYWludCgpOworICAgICAgICB9
IGVsc2UgaWYgKGxheW91dFNpemVDaGFuZ2VkICYmIGlzPFJlbmRlckVsZW1lbnQ+KGNoaWxkKSkK
KyAgICAgICAgICAgIGVsZW1lbnRzVGhhdERpZE5vdFJlY2VpdmVMYXlvdXQuYWRkKCZkb3duY2Fz
dDxSZW5kZXJFbGVtZW50PihjaGlsZCkpOwogCi0gICAgICAgIEFTU0VSVCghY2hpbGQtPm5lZWRz
TGF5b3V0KCkpOworICAgICAgICBBU1NFUlQoIWNoaWxkLm5lZWRzTGF5b3V0KCkpOwogICAgIH0K
IAogICAgIGlmICghbGF5b3V0U2l6ZUNoYW5nZWQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVy
LmNwcAppbmRleCAxNmUyN2NjMWY4MTc5YmZlYjk3MWUyZTQwNzZlZThkNDk4OGExN2EwLi44YmRl
M2U0OWI4MDg4ZmU3ZTFhMDQ0NzcxZTI0YWM3Y2JmNjk3YTI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRl
c0J1aWxkZXIuY3BwCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmgiCiAKKyNpbmNsdWRlICJSZW5k
ZXJDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKQEAg
LTk4LDE2ICs5OSwxNiBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6Y29s
bGVjdFRleHRQb3NpdGlvbmluZ0VsZW1lbnRzKFJlbmRlckJveE1vZAogewogICAgIEFTU0VSVCgh
aXM8UmVuZGVyU1ZHVGV4dD4oc3RhcnQpIHx8IG1fdGV4dFBvc2l0aW9ucy5pc0VtcHR5KCkpOwog
Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gc3RhcnQuZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoaXM8UmVuZGVy
U1ZHSW5saW5lVGV4dD4oKmNoaWxkKSkgewotICAgICAgICAgICAgcHJvY2Vzc1JlbmRlclNWR0lu
bGluZVRleHQoZG93bmNhc3Q8UmVuZGVyU1ZHSW5saW5lVGV4dD4oKmNoaWxkKSwgbV90ZXh0TGVu
Z3RoLCBsYXN0Q2hhcmFjdGVyV2FzU3BhY2UpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGls
ZHJlbk9mVHlwZTxSZW5kZXJPYmplY3Q+KHN0YXJ0KSkgeworICAgICAgICBpZiAoaXM8UmVuZGVy
U1ZHSW5saW5lVGV4dD4oY2hpbGQpKSB7CisgICAgICAgICAgICBwcm9jZXNzUmVuZGVyU1ZHSW5s
aW5lVGV4dChkb3duY2FzdDxSZW5kZXJTVkdJbmxpbmVUZXh0PihjaGlsZCksIG1fdGV4dExlbmd0
aCwgbGFzdENoYXJhY3Rlcldhc1NwYWNlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKCFpczxSZW5kZXJTVkdJbmxpbmU+KCpjaGlsZCkpCisgICAgICAg
IGlmICghaXM8UmVuZGVyU1ZHSW5saW5lPihjaGlsZCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICBSZW5kZXJTVkdJbmxpbmUmIGlubGluZUNoaWxkID0gZG93bmNhc3Q8UmVuZGVy
U1ZHSW5saW5lPigqY2hpbGQpOworICAgICAgICBhdXRvJiBpbmxpbmVDaGlsZCA9IGRvd25jYXN0
PFJlbmRlclNWR0lubGluZT4oY2hpbGQpOwogICAgICAgICBTVkdUZXh0UG9zaXRpb25pbmdFbGVt
ZW50KiBlbGVtZW50ID0gU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6ZWxlbWVudEZyb21SZW5k
ZXJlcihpbmxpbmVDaGlsZCk7CiAKICAgICAgICAgdW5zaWduZWQgYXRQb3NpdGlvbiA9IG1fdGV4
dFBvc2l0aW9ucy5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKaW5kZXggYmYzZWVhNmI3ZGQxZWYxZTI1MGU1
YjYwZmVjMDQ1OWEwMmNkN2I4Ni4uYmIyNTkzZDM4YmQ2YzgyMWE0MzRiNWE4NDUxMzhlNzJmODhk
NGMzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0
cmljc0J1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dE1ldHJpY3NCdWlsZGVyLmNwcApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlNWR1RleHRNZXRyaWNzQnVpbGRlci5oIgogCisjaW5jbHVkZSAiUmVuZGVy
Q2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZS5oIgogI2luY2x1ZGUg
IlJlbmRlclNWR0lubGluZVRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCkBAIC0x
NzEsOSArMTcyLDkgQEAgdm9pZCBTVkdUZXh0TWV0cmljc0J1aWxkZXI6Om1lYXN1cmVUZXh0UmVu
ZGVyZXIoUmVuZGVyU1ZHSW5saW5lVGV4dCYgdGV4dCwgTWVhc3UKIAogdm9pZCBTVkdUZXh0TWV0
cmljc0J1aWxkZXI6OndhbGtUcmVlKFJlbmRlckVsZW1lbnQmIHN0YXJ0LCBSZW5kZXJTVkdJbmxp
bmVUZXh0KiBzdG9wQXRMZWFmLCBNZWFzdXJlVGV4dERhdGEqIGRhdGEpCiB7Ci0gICAgZm9yIChh
dXRvKiBjaGlsZCA9IHN0YXJ0LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGlzPFJlbmRlclNWR0lubGluZVRleHQ+KCpjaGls
ZCkpIHsKLSAgICAgICAgICAgIFJlbmRlclNWR0lubGluZVRleHQmIHRleHQgPSBkb3duY2FzdDxS
ZW5kZXJTVkdJbmxpbmVUZXh0PigqY2hpbGQpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGls
ZHJlbk9mVHlwZTxSZW5kZXJPYmplY3Q+KHN0YXJ0KSkgeworICAgICAgICBpZiAoaXM8UmVuZGVy
U1ZHSW5saW5lVGV4dD4oY2hpbGQpKSB7CisgICAgICAgICAgICBhdXRvJiB0ZXh0ID0gZG93bmNh
c3Q8UmVuZGVyU1ZHSW5saW5lVGV4dD4oY2hpbGQpOwogICAgICAgICAgICAgaWYgKHN0b3BBdExl
YWYgJiYgc3RvcEF0TGVhZiAhPSAmdGV4dCkgewogICAgICAgICAgICAgICAgIGRhdGEtPnByb2Nl
c3NSZW5kZXJlciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIG1lYXN1cmVUZXh0UmVuZGVyZXIo
dGV4dCwgZGF0YSk7CkBAIC0xODgsMTAgKzE4OSwxMCBAQCB2b2lkIFNWR1RleHRNZXRyaWNzQnVp
bGRlcjo6d2Fsa1RyZWUoUmVuZGVyRWxlbWVudCYgc3RhcnQsIFJlbmRlclNWR0lubGluZVRleHQq
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghaXM8UmVu
ZGVyU1ZHSW5saW5lPigqY2hpbGQpKQorICAgICAgICBpZiAoIWlzPFJlbmRlclNWR0lubGluZT4o
Y2hpbGQpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgd2Fsa1RyZWUoZG93bmNh
c3Q8UmVuZGVyU1ZHSW5saW5lPigqY2hpbGQpLCBzdG9wQXRMZWFmLCBkYXRhKTsKKyAgICAgICAg
d2Fsa1RyZWUoZG93bmNhc3Q8UmVuZGVyU1ZHSW5saW5lPihjaGlsZCksIHN0b3BBdExlYWYsIGRh
dGEpOwogICAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279169</attachid>
            <date>2016-05-17 15:07:22 -0700</date>
            <delta_ts>2016-05-17 15:38:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157811-20160517150820.patch</filename>
            <type>text/plain</type>
            <size>54962</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxMDQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWRkOTc3OGQyMjA1OTBk
NGE1N2I3NGU0ZGM0MmM4ZDYyOWRiOGNhOS4uYjc2YTliNDM2YTMyYjhjMGE4ODI0NmRiOTUwYTYw
ZjBlOTA0Y2JlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE2LTA1LTE3ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIFJlbmRlckNoaWxkSXRl
cmF0b3IgbW9yZSBmb3IgdHJhdmVyc2luZyBhIHJlbmRlcmVyJ3MgY2hpbGRyZW4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzgxMQorCisgICAgICAg
IFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAgIFVzZSBSZW5kZXJDaGlsZEl0
ZXJhdG9yIG1vcmUgZm9yIHRyYXZlcnNpbmcgYSByZW5kZXJlcidzIGNoaWxkcmVuLgorCisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckxheWVyVHJlZUFnZW50OjpsYXllcnNGb3JOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckxheWVyVHJlZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRl
ck9iamVjdEhpZXJhcmNoeSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJl
ZUFnZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBdXRvVGFibGVMYXlvdXQ6OnJlY2FsY0NvbHVtbik6CisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjppc0VtcHR5SW5s
aW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cG9zaXRpb25G
b3JQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6dXBkYXRlT3V0bGluZUF1dG9BbmNlc3Rvcik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRmllbGRzZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmllbGRzZXQ6OmZp
bmRMZWdlbmQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW5saW5lOjpnZW5lcmF0ZUN1bGxlZExpbmVCb3hSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUZpcnN0TGluZUJveCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZVZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpkaXJ0eUxpbmVCb3hlcyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldFBh
cmVudE9mRmlyc3RMaW5lQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0Rmxvd1RocmVhZFN0YXRlSW5j
bHVkaW5nRGVzY2VuZGFudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphZGRB
YnNvbHV0ZVJlY3RGb3JMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnBh
aW50aW5nUm9vdFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpyZW1vdmVG
cm9tUmVuZGVyRmxvd1RocmVhZEluY2x1ZGluZ0Rlc2NlbmRhbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6aW52YWxpZGF0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2tJbmNs
dWRpbmdEZXNjZW5kYW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnVwZGF0
ZURyYWdTdGF0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpmaXJzdENvbHVtbik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ29sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ29s
OjpjbGVhclByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eUJpdHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGVTZWN0aW9uOjpsYXlvdXRSb3dzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRQcmV2aW91c0Fu
ZE5leHRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OnN1YnRy
ZWVDaGlsZFdhc0FkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OnN1YnRy
ZWVDaGlsZFdpbGxCZVJlbW92ZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
U3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVPYmplY3RCb3VuZGluZ0JveCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlQ29udGFpbmVyQm91
bmRpbmdCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRD
aGlsZHJlbik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRl
c0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEF0dHJpYnV0ZXNC
dWlsZGVyOjpjb2xsZWN0VGV4dFBvc2l0aW9uaW5nRWxlbWVudHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRNZXRyaWNzQnVpbGRlcjo6d2Fsa1RyZWUpOgorCiAyMDE2LTA1LTE2ICBTaW1vbiBGcmFz
ZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEJpdG1hcEltYWdlOjpkZXN0
cm95RGVjb2RlZERhdGFJZk5lY2Vzc2FyeSgpIHNob3VsZCBvbmx5IGNvdW50IGZyYW1lcyB3aXRo
IGltYWdlIGRhdGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JMYXllclRyZWVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
TGF5ZXJUcmVlQWdlbnQuY3BwCmluZGV4IDRjZmMwM2IzNGQ2ZmI1ZTljMjNhZjU3NzM4NzQzZjg3
ZDg5ZWI5YWEuLmNkNDdhZTc3OWExYmMwYjNmMzlmNzQ2ODIyZjIzOGI4MmM3NmVlYTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50
LmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUHNldWRvRWxlbWVudC5oIgorI2luY2x1
ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9z
aXRvci5oIgpAQCAtMTA1LDMwICsxMDYsMzEgQEAgdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2Vu
dDo6bGF5ZXJzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQKIHsK
ICAgICBsYXllcnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpMYXllclRyZWU6OkxheWVyPjo6Y3JlYXRlKCk7CiAKLSAgICBOb2RlKiBub2RlID0gbV9p
bnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCktPm5vZGVGb3JJZChub2RlSWQp
OworICAgIGF1dG8qIG5vZGUgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdl
bnQoKS0+bm9kZUZvcklkKG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKSB7CiAgICAgICAgIGVycm9y
U3RyaW5nID0gQVNDSUlMaXRlcmFsKCJQcm92aWRlZCBub2RlIGlkIGRvZXNuJ3QgbWF0Y2ggYW55
IGtub3duIG5vZGUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIGF1dG8qIHJlbmRlcmVyID0gbm9k
ZS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKSB7CiAgICAgICAgIGVycm9yU3RyaW5n
ID0gQVNDSUlMaXRlcmFsKCJOb2RlIGZvciBwcm92aWRlZCBub2RlIGlkIGRvZXNuJ3QgaGF2ZSBh
IHJlbmRlcmVyIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBnYXRoZXJMYXllcnNV
c2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShlcnJvclN0cmluZywgcmVuZGVyZXIsIGxheWVycyk7
CisgICAgaWYgKGlzPFJlbmRlckVsZW1lbnQ+KCpyZW5kZXJlcikpCisgICAgICAgIGdhdGhlckxh
eWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KGVycm9yU3RyaW5nLCBkb3duY2FzdDxSZW5k
ZXJFbGVtZW50PigqcmVuZGVyZXIpLCBsYXllcnMpOwogfQogCi12b2lkIEluc3BlY3RvckxheWVy
VHJlZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVy
Pj4mIGxheWVycykKK3ZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmdhdGhlckxheWVyc1Vz
aW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4mIGxheWVycykKIHsKLSAgICBpZiAo
cmVuZGVyZXItPmhhc0xheWVyKCkpIHsKLSAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJM
YXllckhpZXJhcmNoeShlcnJvclN0cmluZywgZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVj
dD4oKnJlbmRlcmVyKS5sYXllcigpLCBsYXllcnMpOworICAgIGlmIChyZW5kZXJlci5oYXNMYXll
cigpKSB7CisgICAgICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoZXJy
b3JTdHJpbmcsIGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KHJlbmRlcmVyKS5sYXll
cigpLCBsYXllcnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChyZW5kZXJl
ciA9IHJlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpOyByZW5kZXJlcjsgcmVuZGVyZXIgPSByZW5k
ZXJlci0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmpl
Y3RIaWVyYXJjaHkoZXJyb3JTdHJpbmcsIHJlbmRlcmVyLCBsYXllcnMpOworICAgIGZvciAoYXV0
byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJFbGVtZW50PihyZW5kZXJlcikpCisgICAg
ICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KGVycm9yU3RyaW5nLCBj
aGlsZCwgbGF5ZXJzKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6Z2F0aGVy
TGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IFJlbmRlckxheWVyKiByZW5kZXJMYXllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYgbGF5ZXJzKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaApp
bmRleCBmMTE0ZDcyOWYwYmI3YjAzZWFkODcwYzI2ZjhjNzE3M2EyMjY0NmJkLi4zMmE0Y2JjZmQz
ZTUwZjU3MDU0ZjhmNTYzNmI4Y2JjZDljNmM2YWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaApAQCAtNjYsNyArNjYsNyBAQCBw
cml2YXRlOgogICAgIFN0cmluZyBiaW5kKGNvbnN0IFJlbmRlckxheWVyKik7CiAgICAgdm9pZCB1
bmJpbmQoY29uc3QgUmVuZGVyTGF5ZXIqKTsKIAotICAgIHZvaWQgZ2F0aGVyTGF5ZXJzVXNpbmdS
ZW5kZXJPYmplY3RIaWVyYXJjaHkoRXJyb3JTdHJpbmcmLCBSZW5kZXJPYmplY3QqLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVl
OjpMYXllcj4+Jik7CisgICAgdm9pZCBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJh
cmNoeShFcnJvclN0cmluZyYsIFJlbmRlckVsZW1lbnQmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+Jik7CiAg
ICAgdm9pZCBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KEVycm9yU3RyaW5n
JiwgUmVuZGVyTGF5ZXIqLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+Jik7CiAKICAgICBSZWY8SW5zcGVjdG9y
OjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4gYnVpbGRPYmplY3RGb3JMYXllcihFcnJvclN0
cmluZyYsIFJlbmRlckxheWVyKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvQXV0b1RhYmxlTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFi
bGVMYXlvdXQuY3BwCmluZGV4IDNiOTNhNTExODU4NjkxMDUwNzQwYTEyZWM5ZDBiOWM3OWUyYmQz
ZjUuLmFiNTY0ODM5NmUwMjlkYTczOWRmYjczYzE5ZjZhYTNkYWZkOGJmYjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCkBAIC0yMiw2ICsyMiw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQXV0b1RhYmxlTGF5b3V0LmgiCiAKKyNp
bmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGUuaCIK
ICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNvbC5o
IgpAQCAtNDgsMTQgKzQ5LDE0IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpyZWNhbGNDb2x1bW4o
dW5zaWduZWQgZWZmQ29sKQogICAgIFJlbmRlclRhYmxlQ2VsbCogZml4ZWRDb250cmlidXRvciA9
IG51bGxwdHI7CiAgICAgUmVuZGVyVGFibGVDZWxsKiBtYXhDb250cmlidXRvciA9IG51bGxwdHI7
CiAKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBtX3RhYmxlLT5maXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChpczxS
ZW5kZXJUYWJsZUNvbD4oKmNoaWxkKSkgeworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJl
bk9mVHlwZTxSZW5kZXJPYmplY3Q+KCptX3RhYmxlKSkgeworICAgICAgICBpZiAoaXM8UmVuZGVy
VGFibGVDb2w+KGNoaWxkKSkgewogICAgICAgICAgICAgLy8gUmVuZGVyVGFibGVDb2xzIGRvbid0
IGhhdmUgdGhlIGNvbmNlcHQgb2YgcHJlZmVycmVkIGxvZ2ljYWwgd2lkdGgsIGJ1dCB3ZSBuZWVk
IHRvIGNsZWFyIHRoZWlyIGRpcnR5IGJpdHMKICAgICAgICAgICAgIC8vIHNvIHRoYXQgaWYgd2Ug
Y2FsbCBzZXRQcmVmZXJyZWRXaWR0aHNEaXJ0eSh0cnVlKSBvbiBhIGNvbCBvciBvbmUgb2YgaXRz
IGRlc2NlbmRhbnRzLCB3ZSdsbCBtYXJrIGl0J3MKICAgICAgICAgICAgIC8vIGFuY2VzdG9ycyBh
cyBkaXJ0eS4KLSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclRhYmxlQ29sPigqY2hpbGQpLmNs
ZWFyUHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5Qml0cygpOwotICAgICAgICB9IGVsc2UgaWYg
KGlzPFJlbmRlclRhYmxlU2VjdGlvbj4oKmNoaWxkKSkgewotICAgICAgICAgICAgUmVuZGVyVGFi
bGVTZWN0aW9uJiBzZWN0aW9uID0gZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPigqY2hpbGQp
OworICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVDb2w+KGNoaWxkKS5jbGVhclByZWZl
cnJlZExvZ2ljYWxXaWR0aHNEaXJ0eUJpdHMoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpczxSZW5k
ZXJUYWJsZVNlY3Rpb24+KGNoaWxkKSkgeworICAgICAgICAgICAgYXV0byYgc2VjdGlvbiA9IGRv
d25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4oY2hpbGQpOwogICAgICAgICAgICAgdW5zaWduZWQg
bnVtUm93cyA9IHNlY3Rpb24ubnVtUm93cygpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bVJvd3M7ICsraSkgewogICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlU2Vj
dGlvbjo6Q2VsbFN0cnVjdCBjdXJyZW50ID0gc2VjdGlvbi5jZWxsQXQoaSwgZWZmQ29sKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVJdGVyYXRvci5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmgKaW5kZXggNGVmYTUyZjZmNGRl
OGU4ZGM2ZDU0NTcxODAxZGQ2Zjk4ZTZmMDc4Yy4uYTExMTUyZjBmMmM3OTUxNjg3NzAzMmViZWNm
MDkzYzgzYzI5MGE3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJhdG9y
LmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkJpZGlSdW4uaCIKICNpbmNsdWRlICJS
ZW5kZXJCbG9ja0Zsb3cuaCIKKyNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTIwOSwxNSArMjEwLDE1IEBAIGVudW0gRW1wdHlJbmxp
bmVCZWhhdmlvciB7CiAKIHN0YXRpYyBib29sIGlzRW1wdHlJbmxpbmUoY29uc3QgUmVuZGVySW5s
aW5lJiByZW5kZXJlcikKIHsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY3VycmVudCA9IHJlbmRl
cmVyLmZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5n
KCkpIHsKLSAgICAgICAgaWYgKGN1cnJlbnQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9u
ZWQoKSkKKyAgICBmb3IgKGF1dG8mIGN1cnJlbnQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJPYmpl
Y3Q+KHJlbmRlcmVyKSkgeworICAgICAgICBpZiAoY3VycmVudC5pc0Zsb2F0aW5nT3JPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGlzPFJl
bmRlclRleHQ+KCpjdXJyZW50KSkgewotICAgICAgICAgICAgaWYgKCFkb3duY2FzdDxSZW5kZXJU
ZXh0PigqY3VycmVudCkuaXNBbGxDb2xsYXBzaWJsZVdoaXRlc3BhY2UoKSkKKyAgICAgICAgaWYg
KGlzPFJlbmRlclRleHQ+KGN1cnJlbnQpKSB7CisgICAgICAgICAgICBpZiAoIWRvd25jYXN0PFJl
bmRlclRleHQ+KGN1cnJlbnQpLmlzQWxsQ29sbGFwc2libGVXaGl0ZXNwYWNlKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKCFpczxSZW5kZXJJbmxpbmU+KCpjdXJyZW50KSB8fCAhaXNFbXB0eUlubGlu
ZShkb3duY2FzdDxSZW5kZXJJbmxpbmU+KCpjdXJyZW50KSkpCisgICAgICAgIGlmICghaXM8UmVu
ZGVySW5saW5lPihjdXJyZW50KSB8fCAhaXNFbXB0eUlubGluZShkb3duY2FzdDxSZW5kZXJJbmxp
bmU+KGN1cnJlbnQpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0
dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCAz
YTQ0ZjEzOGUyY2NmNWMxZDMwZTBiZGZiNzJhZTkzOTRlZTE3NDVkLi40ZDhlMWMzMGY0YjU1ZTg4
NmJmYTExZjVmYTIyMjQ5YjlkZjRlYjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cu
aCIKICNpbmNsdWRlICJSZW5kZXJCb3hSZWdpb25JbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyQnV0
dG9uLmgiCisjaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRl
ckNvbWJpbmVUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIKQEAgLTM0NjUsMTcgKzM0NjYsMTcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiBy
ZWN0cywgY29uc3QgTGF5b3V0UG9pbnQKICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpCiAg
ICAgICAgICAgICBhZGRGb2N1c1JpbmdSZWN0c0ZvcklubGluZUNoaWxkcmVuKHJlY3RzLCBhZGRp
dGlvbmFsT2Zmc2V0LCBwYWludENvbnRhaW5lcik7CiAgICAgCi0gICAgICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCkpIHsKLSAgICAgICAgICAgIGlmICghaXM8UmVuZGVyVGV4dD4oKmNoaWxkKSAmJiAh
aXM8UmVuZGVyTGlzdE1hcmtlcj4oKmNoaWxkKSAmJiBpczxSZW5kZXJCb3g+KCpjaGlsZCkpIHsK
LSAgICAgICAgICAgICAgICBhdXRvJiBib3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpjaGlsZCk7
Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwb3M7Ci0gICAgICAgICAgICAgICAgLy8gRklY
TUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuCi0gICAgICAg
ICAgICAgICAgaWYgKGJveC5sYXllcigpKQotICAgICAgICAgICAgICAgICAgICBwb3MgPSBjaGls
ZC0+bG9jYWxUb0NvbnRhaW5lclBvaW50KEZsb2F0UG9pbnQoKSwgcGFpbnRDb250YWluZXIpOwot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcG9zID0gRmxvYXRQb2lu
dChhZGRpdGlvbmFsT2Zmc2V0LngoKSArIGJveC54KCksIGFkZGl0aW9uYWxPZmZzZXQueSgpICsg
Ym94LnkoKSk7Ci0gICAgICAgICAgICAgICAgYm94LmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBm
bG9vcmVkTGF5b3V0UG9pbnQocG9zKSwgcGFpbnRDb250YWluZXIpOwotICAgICAgICAgICAgfQor
ICAgICAgICBmb3IgKGF1dG8mIGJveCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckJveD4oKnRoaXMp
KSB7CisgICAgICAgICAgICBpZiAoaXM8UmVuZGVyTGlzdE1hcmtlcj4oYm94KSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgRmxvYXRQb2ludCBwb3M7CisgICAgICAg
ICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jt
cy4KKyAgICAgICAgICAgIGlmIChib3gubGF5ZXIoKSkKKyAgICAgICAgICAgICAgICBwb3MgPSBi
b3gubG9jYWxUb0NvbnRhaW5lclBvaW50KEZsb2F0UG9pbnQoKSwgcGFpbnRDb250YWluZXIpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBvcyA9IEZsb2F0UG9pbnQoYWRkaXRp
b25hbE9mZnNldC54KCkgKyBib3gueCgpLCBhZGRpdGlvbmFsT2Zmc2V0LnkoKSArIGJveC55KCkp
OworICAgICAgICAgICAgYm94LmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBmbG9vcmVkTGF5b3V0
UG9pbnQocG9zKSwgcGFpbnRDb250YWluZXIpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDhmYWY2N2NhMzA0MzJlOWRhMThmZThi
YThjNTE4Y2VhZTA4MzU1ZjQuLmMyZjAxZGY3ZjE1ZDk1Y2UyOWJhNzJiNjU0ZTc0Zjk1Y2JiMGZl
MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC00OCw2ICs0OCw3
IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgogI2luY2x1ZGUg
IlJlbmRlckJveFJlZ2lvbkluZm8uaCIKKyNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyRmxleGlibGVCb3guaCIKICNpbmNsdWRlICJSZW5kZXJHZW9tZXRyeU1hcC5oIgpAQCAtNDQy
MSwxOCArNDQyMiwxMyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQm94Ojpwb3NpdGlvbkZvclBv
aW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZAogICAgIGlmIChpc1RhYmxl
Um93KCkpCiAgICAgICAgIGFkanVzdGVkUG9pbnQubW92ZUJ5KGxvY2F0aW9uKCkpOwogCi0gICAg
Zm9yIChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCA9IGZpcnN0Q2hpbGQoKTsgcmVuZGVyT2Jq
ZWN0OyByZW5kZXJPYmplY3QgPSByZW5kZXJPYmplY3QtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAg
ICAgaWYgKCFpczxSZW5kZXJCb3g+KCpyZW5kZXJPYmplY3QpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KKyAgICBmb3IgKGF1dG8mIHJlbmRlcmVyIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyQm94
PigqdGhpcykpIHsKICAgICAgICAgaWYgKGlzPFJlbmRlckZsb3dUaHJlYWQ+KCp0aGlzKSkgewog
ICAgICAgICAgICAgQVNTRVJUKHJlZ2lvbik7Ci0gICAgICAgICAgICBpZiAoIWRvd25jYXN0PFJl
bmRlckZsb3dUaHJlYWQ+KCp0aGlzKS5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbihy
ZW5kZXJPYmplY3QsIHJlZ2lvbikpCisgICAgICAgICAgICBpZiAoIWRvd25jYXN0PFJlbmRlckZs
b3dUaHJlYWQ+KCp0aGlzKS5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbigmcmVuZGVy
ZXIsIHJlZ2lvbikpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAg
ICAgICBhdXRvJiByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlck9iamVjdCk7
Ci0KICAgICAgICAgaWYgKCghcmVuZGVyZXIuZmlyc3RDaGlsZCgpICYmICFyZW5kZXJlci5pc0lu
bGluZSgpICYmICFpczxSZW5kZXJCbG9ja0Zsb3c+KHJlbmRlcmVyKSkKICAgICAgICAgICAgIHx8
IHJlbmRlcmVyLnN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgICAgICBj
b250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAppbmRl
eCBmMzAyNzExOGJmN2QwYjJiYTEwYmI2MDE1NTRhOTEwNTM2Y2NiNzUwLi4wMjc3MTI0MWY0NmMw
MzU1Zjc1ZTgxOGFmZTdmOTI4Njg3ZTNjNzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVsZW1lbnQuY3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgogI2luY2x1ZGUgIlBhdGhVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgor
I2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJDb3VudGVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmgiCiAjaW5jbHVkZSAi
UmVuZGVyRmxleGlibGVCb3guaCIKQEAgLTIxNTEsMTggKzIxNTIsMTggQEAgdm9pZCBSZW5kZXJF
bGVtZW50Ojppc3N1ZVJlcGFpbnRGb3JPdXRsaW5lQXV0byhmbG9hdCBvdXRsaW5lU2l6ZSkKICAg
ICByZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRSZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJFbGVtZW50
Ojp1cGRhdGVPdXRsaW5lQXV0b0FuY2VzdG9yKGJvb2wgaGFzT3V0bGluZUF1dG8pIGNvbnN0Cit2
b2lkIFJlbmRlckVsZW1lbnQ6OnVwZGF0ZU91dGxpbmVBdXRvQW5jZXN0b3IoYm9vbCBoYXNPdXRs
aW5lQXV0bykKIHsKLSAgICBmb3IgKGF1dG8qIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoaGFzT3V0bGluZUF1
dG8gPT0gY2hpbGQtPmhhc091dGxpbmVBdXRvQW5jZXN0b3IoKSkKKyAgICBmb3IgKGF1dG8mIGNo
aWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0PigqdGhpcykpIHsKKyAgICAgICAgaWYg
KGhhc091dGxpbmVBdXRvID09IGNoaWxkLmhhc091dGxpbmVBdXRvQW5jZXN0b3IoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjaGlsZC0+c2V0SGFzT3V0bGluZUF1dG9BbmNlc3Rv
cihoYXNPdXRsaW5lQXV0byk7Ci0gICAgICAgIGJvb2wgY2hpbGRIYXNPdXRsaW5lQXV0byA9IGNo
aWxkLT5vdXRsaW5lU3R5bGVGb3JSZXBhaW50KCkub3V0bGluZVN0eWxlSXNBdXRvKCk7CisgICAg
ICAgIGNoaWxkLnNldEhhc091dGxpbmVBdXRvQW5jZXN0b3IoaGFzT3V0bGluZUF1dG8pOworICAg
ICAgICBib29sIGNoaWxkSGFzT3V0bGluZUF1dG8gPSBjaGlsZC5vdXRsaW5lU3R5bGVGb3JSZXBh
aW50KCkub3V0bGluZVN0eWxlSXNBdXRvKCk7CiAgICAgICAgIGlmIChjaGlsZEhhc091dGxpbmVB
dXRvKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmICghaXM8UmVuZGVyRWxlbWVu
dD4oY2hpbGQpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGRvd25jYXN0PFJlbmRl
ckVsZW1lbnQ+KCpjaGlsZCkudXBkYXRlT3V0bGluZUF1dG9BbmNlc3RvcihoYXNPdXRsaW5lQXV0
byk7CisgICAgICAgIGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KGNoaWxkKS51cGRhdGVPdXRsaW5l
QXV0b0FuY2VzdG9yKGhhc091dGxpbmVBdXRvKTsKICAgICB9CiAgICAgaWYgKGhhc0NvbnRpbnVh
dGlvbigpKQogICAgICAgICBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnRoaXMpLmNv
bnRpbnVhdGlvbigpLT51cGRhdGVPdXRsaW5lQXV0b0FuY2VzdG9yKGhhc091dGxpbmVBdXRvKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCmluZGV4IDBhZDVmOGVhNzU3
NjI2MGVmMjQwMmZiYzA3MGQxYzc2YjA4MDNiZDQuLjZmMjQ0NDU5N2JlODg0MWUwNjQxYjZkY2Uw
MTU0OTBkNDQyNWNjYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQu
aApAQCAtMjc4LDcgKzI3OCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgcGFpbnRGb2N1c1Jp
bmcoUGFpbnRJbmZvJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBWZWN0b3I8TGF5b3V0UmVj
dD4mIGZvY3VzUmluZ1JlY3RzKTsKICAgICB2b2lkIHBhaW50T3V0bGluZShQYWludEluZm8mLCBj
b25zdCBMYXlvdXRSZWN0Jik7Ci0gICAgdm9pZCB1cGRhdGVPdXRsaW5lQXV0b0FuY2VzdG9yKGJv
b2wgaGFzT3V0bGluZUF1dG8pIGNvbnN0OworICAgIHZvaWQgdXBkYXRlT3V0bGluZUF1dG9BbmNl
c3Rvcihib29sIGhhc091dGxpbmVBdXRvKTsKIAogcHJpdmF0ZToKICAgICBSZW5kZXJFbGVtZW50
KENvbnRhaW5lck5vZGUmLCBSZW5kZXJTdHlsZSYmLCBCYXNlVHlwZUZsYWdzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCmluZGV4IDc4N2FiYTAzYjBlNTFl
ZGJmNDg4OTA4OGVmMmM2NjhmYjc1YzI1MDguLjQyMGMxYWRhZmJhN2Q5ODljODEzZjljZmI4NjI1
OGIzNjAxNzhlY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
aWVsZHNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0
LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkhUTUxGaWVsZFNldEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKKyNpbmNsdWRl
ICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTI0
LDE0ICsxMjUsMTQgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJGaWVsZHNldDo6bGF5b3V0U3BlY2lh
bEV4Y2x1ZGVkQ2hpbGQoYm9vbCByZWxheW91dENoaWxkcmVuKQogICAgIHJldHVybiAmbGVnZW5k
OwogfQogCi1SZW5kZXJCb3gqIFJlbmRlckZpZWxkc2V0OjpmaW5kTGVnZW5kKEZpbmRMZWdlbmRP
cHRpb24gb3B0aW9uKSBjb25zdAorUmVuZGVyQm94KiBSZW5kZXJGaWVsZHNldDo6ZmluZExlZ2Vu
ZChGaW5kTGVnZW5kT3B0aW9uIG9wdGlvbikKIHsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogbGVn
ZW5kID0gZmlyc3RDaGlsZCgpOyBsZWdlbmQ7IGxlZ2VuZCA9IGxlZ2VuZC0+bmV4dFNpYmxpbmco
KSkgewotICAgICAgICBpZiAob3B0aW9uID09IElnbm9yZUZsb2F0aW5nT3JPdXRPZkZsb3cgJiYg
bGVnZW5kLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCisgICAgZm9yIChhdXRv
JiBsZWdlbmQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJFbGVtZW50PigqdGhpcykpIHsKKyAgICAg
ICAgaWYgKG9wdGlvbiA9PSBJZ25vcmVGbG9hdGluZ09yT3V0T2ZGbG93ICYmIGxlZ2VuZC5pc0Zs
b2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChpczxIVE1MTGVnZW5kRWxlbWVudD4obGVnZW5kLT5ub2RlKCkp
KQotICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4obGVnZW5kKTsKKyAgICAg
ICAgaWYgKGlzPEhUTUxMZWdlbmRFbGVtZW50PihsZWdlbmQuZWxlbWVudCgpKSkKKyAgICAgICAg
ICAgIHJldHVybiAmZG93bmNhc3Q8UmVuZGVyQm94PihsZWdlbmQpOwogICAgIH0KICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGaWVsZHNldC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmgK
aW5kZXggZGUwNTdiYWMxOWU2NzliNzZhNDliNDI2NmE1NzIyNjc0OWQ1M2FiZC4uMTEwY2U1M2Zi
YWQ4YTZmZWRhY2FjN2ZiMzc2YzU3ZDNmYjc1N2IyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZpZWxkc2V0LmgKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIFJlbmRl
ckZpZWxkc2V0KEhUTUxGaWVsZFNldEVsZW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKIAogICAgIGVu
dW0gRmluZExlZ2VuZE9wdGlvbiB7IElnbm9yZUZsb2F0aW5nT3JPdXRPZkZsb3csIEluY2x1ZGVG
bG9hdGluZ09yT3V0T2ZGbG93IH07Ci0gICAgUmVuZGVyQm94KiBmaW5kTGVnZW5kKEZpbmRMZWdl
bmRPcHRpb24gPSBJZ25vcmVGbG9hdGluZ09yT3V0T2ZGbG93KSBjb25zdDsKKyAgICBSZW5kZXJC
b3gqIGZpbmRMZWdlbmQoRmluZExlZ2VuZE9wdGlvbiA9IElnbm9yZUZsb2F0aW5nT3JPdXRPZkZs
b3cpOwogCiAgICAgSFRNTEZpZWxkU2V0RWxlbWVudCYgZmllbGRTZXRFbGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gZG93bmNhc3Q8SFRNTEZpZWxkU2V0RWxlbWVudD4obm9kZUZvck5vbkFub255bW91
cygpKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5s
aW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCmluZGV4
IDY5OWU0MTY0OWEzNGY2NjhhZTU4MGZkZGFmYTU3ZjY5ZDc3MzY2ODIuLmRkYjdhMzA3YzlmZTdh
NzdiYjIyZWVjMTA0MTZhOTUyMGY3NTI5OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbmxpbmUuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSW5saW5lVGV4dEJv
eC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorI2luY2x1
ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJGdWxsU2NyZWVuLmgi
CiAjaW5jbHVkZSAiUmVuZGVyR2VvbWV0cnlNYXAuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRv
ci5oIgpAQCAtNjcwLDE0ICs2NzEsMTQgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmdlbmVyYXRlQ3Vs
bGVkTGluZUJveFJlY3RzKEdlbmVyYXRvckNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFIKIAogICAg
IGJvb2wgaXNIb3Jpem9udGFsID0gc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwog
Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJzdENoaWxkKCk7IGN1cnJlbnQ7
IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjdXJyZW50
LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCisgICAgZm9yIChhdXRvJiBjdXJy
ZW50IDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0PigqdGhpcykpIHsKKyAgICAgICAgaWYg
KGN1cnJlbnQuaXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAKKwogICAgICAgICAvLyBXZSB3YW50IHRvIGdldCB0aGUg
bWFyZ2luIGJveCBpbiB0aGUgaW5saW5lIGRpcmVjdGlvbiwgYW5kIHRoZW4gdXNlIG91ciBmb250
IGFzY2VudC9kZXNjZW50IGluIHRoZSBibG9jawogICAgICAgICAvLyBkaXJlY3Rpb24gKGFsaWdu
ZWQgdG8gdGhlIHJvb3QgYm94J3MgYmFzZWxpbmUpLgotICAgICAgICBpZiAoaXM8UmVuZGVyQm94
PigqY3VycmVudCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJveCYgcmVuZGVyQm94ID0gZG93bmNh
c3Q8UmVuZGVyQm94PigqY3VycmVudCk7CisgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KGN1cnJl
bnQpKSB7CisgICAgICAgICAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+
KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKHJlbmRlckJveC5pbmxpbmVCb3hXcmFwcGVyKCkp
IHsKICAgICAgICAgICAgICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gcmVuZGVy
Qm94LmlubGluZUJveFdyYXBwZXIoKS0+cm9vdCgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFJl
bmRlclN0eWxlJiBjb250YWluZXJTdHlsZSA9IHJvb3RCb3guaXNGaXJzdExpbmUoKSA/IGNvbnRh
aW5lci0+Zmlyc3RMaW5lU3R5bGUoKSA6IGNvbnRhaW5lci0+c3R5bGUoKTsKQEAgLTY4OCw5ICs2
ODksOSBAQCB2b2lkIFJlbmRlcklubGluZTo6Z2VuZXJhdGVDdWxsZWRMaW5lQm94UmVjdHMoR2Vu
ZXJhdG9yQ29udGV4dCYgY29udGV4dCwgY29uc3QgUgogICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5hZGRSZWN0KEZsb2F0UmVjdChsb2dpY2FsVG9wLCBy
ZW5kZXJCb3guaW5saW5lQm94V3JhcHBlcigpLT55KCkgLSByZW5kZXJCb3gubWFyZ2luVG9wKCks
IGxvZ2ljYWxIZWlnaHQsIHJlbmRlckJveC5oZWlnaHQoKSArIHJlbmRlckJveC52ZXJ0aWNhbE1h
cmdpbkV4dGVudCgpKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8UmVu
ZGVySW5saW5lPigqY3VycmVudCkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJJbmxp
bmU+KGN1cnJlbnQpKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgZG9lc24ndCBuZWVk
IGxpbmUgYm94ZXMgZWl0aGVyLCB0aGVuIHdlIGNhbiByZWN1ci4KLSAgICAgICAgICAgIFJlbmRl
cklubGluZSYgcmVuZGVySW5saW5lID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigqY3VycmVudCk7
CisgICAgICAgICAgICBhdXRvJiByZW5kZXJJbmxpbmUgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+
KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKCFyZW5kZXJJbmxpbmUuYWx3YXlzQ3JlYXRlTGlu
ZUJveGVzKCkpCiAgICAgICAgICAgICAgICAgcmVuZGVySW5saW5lLmdlbmVyYXRlQ3VsbGVkTGlu
ZUJveFJlY3RzKGNvbnRleHQsIGNvbnRhaW5lcik7CiAgICAgICAgICAgICBlbHNlIHsKQEAgLTcx
Miw4ICs3MTMsOCBAQCB2b2lkIFJlbmRlcklubGluZTo6Z2VuZXJhdGVDdWxsZWRMaW5lQm94UmVj
dHMoR2VuZXJhdG9yQ29udGV4dCYgY29udGV4dCwgY29uc3QgUgogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYg
KGlzPFJlbmRlclRleHQ+KCpjdXJyZW50KSkgewotICAgICAgICAgICAgUmVuZGVyVGV4dCYgY3Vy
clRleHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqY3VycmVudCk7CisgICAgICAgIH0gZWxzZSBp
ZiAoaXM8UmVuZGVyVGV4dD4oY3VycmVudCkpIHsKKyAgICAgICAgICAgIGF1dG8mIGN1cnJUZXh0
ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oY3VycmVudCk7CiAgICAgICAgICAgICBmb3IgKElubGlu
ZVRleHRCb3gqIGNoaWxkVGV4dCA9IGN1cnJUZXh0LmZpcnN0VGV4dEJveCgpOyBjaGlsZFRleHQ7
IGNoaWxkVGV4dCA9IGNoaWxkVGV4dC0+bmV4dFRleHRCb3goKSkgewogICAgICAgICAgICAgICAg
IGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSBjaGlsZFRleHQtPnJvb3QoKTsKICAgICAg
ICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgY29udGFpbmVyU3R5bGUgPSByb290Qm94Lmlz
Rmlyc3RMaW5lKCkgPyBjb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkgOiBjb250YWluZXItPnN0
eWxlKCk7CkBAIC03MjQsOCArNzI1LDggQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmdlbmVyYXRlQ3Vs
bGVkTGluZUJveFJlY3RzKEdlbmVyYXRvckNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFIKICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYWRkUmVjdChGbG9h
dFJlY3QobG9naWNhbFRvcCwgY2hpbGRUZXh0LT55KCksIGxvZ2ljYWxIZWlnaHQsIGNoaWxkVGV4
dC0+bG9naWNhbFdpZHRoKCkpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChp
czxSZW5kZXJMaW5lQnJlYWs+KCpjdXJyZW50KSkgewotICAgICAgICAgICAgaWYgKElubGluZUJv
eCogaW5saW5lQm94ID0gZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPigqY3VycmVudCkuaW5saW5l
Qm94V3JhcHBlcigpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihj
dXJyZW50KSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGlubGluZUJveCA9IGRvd25jYXN0PFJl
bmRlckxpbmVCcmVhaz4oY3VycmVudCkuaW5saW5lQm94V3JhcHBlcigpKSB7CiAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgdXNlIGEgaGVscGVyIHRvIHNoYXJlIHRoZXNlIHdp
dGggdGV4dCBwYXRoLgogICAgICAgICAgICAgICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RC
b3ggPSBpbmxpbmVCb3gtPnJvb3QoKTsKICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHls
ZSYgY29udGFpbmVyU3R5bGUgPSByb290Qm94LmlzRmlyc3RMaW5lKCkgPyBjb250YWluZXItPmZp
cnN0TGluZVN0eWxlKCkgOiBjb250YWluZXItPnN0eWxlKCk7CkBAIC0xMDMzLDI2ICsxMDM0LDI2
IEBAIEludFJlY3QgUmVuZGVySW5saW5lOjpsaW5lc0JvdW5kaW5nQm94KCkgY29uc3QKIAogSW5s
aW5lQm94KiBSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUZpcnN0TGluZUJveCgpIGNvbnN0CiB7
Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJzdENoaWxkKCk7IGN1cnJlbnQ7
IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjdXJyZW50
LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCisgICAgZm9yIChhdXRvJiBjdXJy
ZW50IDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0PigqdGhpcykpIHsKKyAgICAgICAgaWYg
KGN1cnJlbnQuaXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAKKwogICAgICAgICAvLyBXZSB3YW50IHRvIGdldCB0aGUg
bWFyZ2luIGJveCBpbiB0aGUgaW5saW5lIGRpcmVjdGlvbiwgYW5kIHRoZW4gdXNlIG91ciBmb250
IGFzY2VudC9kZXNjZW50IGluIHRoZSBibG9jawogICAgICAgICAvLyBkaXJlY3Rpb24gKGFsaWdu
ZWQgdG8gdGhlIHJvb3QgYm94J3MgYmFzZWxpbmUpLgotICAgICAgICBpZiAoaXM8UmVuZGVyQm94
PigqY3VycmVudCkpIHsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIHJlbmRlckJveCA9IGRvd25j
YXN0PFJlbmRlckJveD4oKmN1cnJlbnQpOworICAgICAgICBpZiAoaXM8UmVuZGVyQm94PihjdXJy
ZW50KSkgeworICAgICAgICAgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94
PihjdXJyZW50KTsKICAgICAgICAgICAgIGlmIChyZW5kZXJCb3guaW5saW5lQm94V3JhcHBlcigp
KQogICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJCb3guaW5saW5lQm94V3JhcHBlcigpOwot
ICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlckxpbmVCcmVhaz4oKmN1cnJlbnQpKSB7Ci0gICAg
ICAgICAgICBSZW5kZXJMaW5lQnJlYWsmIHJlbmRlckJSID0gZG93bmNhc3Q8UmVuZGVyTGluZUJy
ZWFrPigqY3VycmVudCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihj
dXJyZW50KSkgeworICAgICAgICAgICAgYXV0byYgcmVuZGVyQlIgPSBkb3duY2FzdDxSZW5kZXJM
aW5lQnJlYWs+KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKHJlbmRlckJSLmlubGluZUJveFdy
YXBwZXIoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyQlIuaW5saW5lQm94V3JhcHBl
cigpOwotICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlcklubGluZT4oKmN1cnJlbnQpKSB7Ci0g
ICAgICAgICAgICBSZW5kZXJJbmxpbmUmIHJlbmRlcklubGluZSA9IGRvd25jYXN0PFJlbmRlcklu
bGluZT4oKmN1cnJlbnQpOworICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlcklubGluZT4oY3Vy
cmVudCkpIHsKKyAgICAgICAgICAgIGF1dG8mIHJlbmRlcklubGluZSA9IGRvd25jYXN0PFJlbmRl
cklubGluZT4oY3VycmVudCk7CiAgICAgICAgICAgICBpZiAoSW5saW5lQm94KiByZXN1bHQgPSBy
ZW5kZXJJbmxpbmUuZmlyc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZygpKQogICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyVGV4dD4oKmN1
cnJlbnQpKSB7Ci0gICAgICAgICAgICBSZW5kZXJUZXh0JiByZW5kZXJUZXh0ID0gZG93bmNhc3Q8
UmVuZGVyVGV4dD4oKmN1cnJlbnQpOworICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlclRleHQ+
KGN1cnJlbnQpKSB7CisgICAgICAgICAgICBhdXRvJiByZW5kZXJUZXh0ID0gZG93bmNhc3Q8UmVu
ZGVyVGV4dD4oY3VycmVudCk7CiAgICAgICAgICAgICBpZiAocmVuZGVyVGV4dC5maXJzdFRleHRC
b3goKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyVGV4dC5maXJzdFRleHRCb3goKTsK
ICAgICAgICAgfQpAQCAtMTA5NiwxMyArMTA5NywxMyBAQCBMYXlvdXRSZWN0IFJlbmRlcklubGlu
ZTo6Y3VsbGVkSW5saW5lVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCgpIGNvbnN0CiAgICAgZ2Vu
ZXJhdGVDdWxsZWRMaW5lQm94UmVjdHMoY29udGV4dCwgdGhpcyk7CiAgICAgTGF5b3V0UmVjdCBy
ZXN1bHQoZW5jbG9zaW5nTGF5b3V0UmVjdChmbG9hdFJlc3VsdCkpOwogICAgIGJvb2wgaXNIb3Jp
em9udGFsID0gc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwotICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3Vy
cmVudC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoY3VycmVudC0+aXNGbG9hdGluZ09y
T3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgIGZvciAoYXV0byYgY3VycmVudCA6IGNoaWxkcmVu
T2ZUeXBlPFJlbmRlck9iamVjdD4oKnRoaXMpKSB7CisgICAgICAgIGlmIChjdXJyZW50LmlzRmxv
YXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgCisKICAgICAgICAgLy8gRm9yIG92ZXJmbG93IHdlIGp1c3QgaGF2ZSB0byBwcm9w
YWdhdGUgYnkgaGFuZCBhbmQgcmVjb21wdXRlIGl0IGFsbC4KLSAgICAgICAgaWYgKGlzPFJlbmRl
ckJveD4oKmN1cnJlbnQpKSB7Ci0gICAgICAgICAgICBSZW5kZXJCb3gmIHJlbmRlckJveCA9IGRv
d25jYXN0PFJlbmRlckJveD4oKmN1cnJlbnQpOworICAgICAgICBpZiAoaXM8UmVuZGVyQm94Pihj
dXJyZW50KSkgeworICAgICAgICAgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVy
Qm94PihjdXJyZW50KTsKICAgICAgICAgICAgIGlmICghcmVuZGVyQm94Lmhhc1NlbGZQYWludGlu
Z0xheWVyKCkgJiYgcmVuZGVyQm94LmlubGluZUJveFdyYXBwZXIoKSkgewogICAgICAgICAgICAg
ICAgIExheW91dFJlY3QgbG9naWNhbFJlY3QgPSByZW5kZXJCb3gubG9naWNhbFZpc3VhbE92ZXJm
bG93UmVjdEZvclByb3BhZ2F0aW9uKCZzdHlsZSgpKTsKICAgICAgICAgICAgICAgICBpZiAoaXNI
b3Jpem9udGFsKSB7CkBAIC0xMTEzLDE3ICsxMTE0LDE3IEBAIExheW91dFJlY3QgUmVuZGVySW5s
aW5lOjpjdWxsZWRJbmxpbmVWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KCkgY29uc3QKICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKGxvZ2ljYWxSZWN0LnRyYW5zcG9z
ZWRSZWN0KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIGlmIChpczxSZW5kZXJJbmxpbmU+KCpjdXJyZW50KSkgeworICAgICAgICB9IGVsc2UgaWYg
KGlzPFJlbmRlcklubGluZT4oY3VycmVudCkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBjaGls
ZCBkb2Vzbid0IG5lZWQgbGluZSBib3hlcyBlaXRoZXIsIHRoZW4gd2UgY2FuIHJlY3VyLgotICAg
ICAgICAgICAgUmVuZGVySW5saW5lJiByZW5kZXJJbmxpbmUgPSBkb3duY2FzdDxSZW5kZXJJbmxp
bmU+KCpjdXJyZW50KTsKKyAgICAgICAgICAgIGF1dG8mIHJlbmRlcklubGluZSA9IGRvd25jYXN0
PFJlbmRlcklubGluZT4oY3VycmVudCk7CiAgICAgICAgICAgICBpZiAoIXJlbmRlcklubGluZS5h
bHdheXNDcmVhdGVMaW5lQm94ZXMoKSkKICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5v
blplcm8ocmVuZGVySW5saW5lLmN1bGxlZElubGluZVZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3go
KSk7CiAgICAgICAgICAgICBlbHNlIGlmICghcmVuZGVySW5saW5lLmhhc1NlbGZQYWludGluZ0xh
eWVyKCkpCiAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKHJlbmRlcklubGlu
ZS5saW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
aXM8UmVuZGVyVGV4dD4oKmN1cnJlbnQpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVy
VGV4dD4oY3VycmVudCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOyBPdmVyZmxvdyBmcm9tIHRl
eHQgYm94ZXMgaXMgbG9zdC4gV2Ugd2lsbCBuZWVkIHRvIGNhY2hlIHRoaXMgaW5mb3JtYXRpb24g
aW4KICAgICAgICAgICAgIC8vIElubGluZVRleHRCb3hlcy4KLSAgICAgICAgICAgIFJlbmRlclRl
eHQmIHJlbmRlclRleHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqY3VycmVudCk7CisgICAgICAg
ICAgICBhdXRvJiByZW5kZXJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oY3VycmVudCk7CiAg
ICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8ocmVuZGVyVGV4dC5saW5lc1Zpc3VhbE92
ZXJmbG93Qm91bmRpbmdCb3goKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDU4LDI0ICsxNDU5
LDI0IEBAIHZvaWQgUmVuZGVySW5saW5lOjpkaXJ0eUxpbmVCb3hlcyhib29sIGZ1bGxMYXlvdXQp
CiAKICAgICBpZiAoIWFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpKSB7CiAgICAgICAgIC8vIFdlIGhh
dmUgdG8gZ3JvdmVsIGludG8gb3VyIGNoaWxkcmVuIGluIG9yZGVyIHRvIGRpcnR5IHRoZSBhcHBy
b3ByaWF0ZSBsaW5lcy4KLSAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJz
dENoaWxkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKSB7Ci0g
ICAgICAgICAgICBpZiAoY3VycmVudC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgp
KQorICAgICAgICBmb3IgKGF1dG8mIGN1cnJlbnQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJPYmpl
Y3Q+KCp0aGlzKSkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnQuaXNGbG9hdGluZ09yT3V0T2ZG
bG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
aWYgKGlzPFJlbmRlckJveD4oKmN1cnJlbnQpICYmICFjdXJyZW50LT5uZWVkc0xheW91dCgpKSB7
Ci0gICAgICAgICAgICAgICAgUmVuZGVyQm94JiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJC
b3g+KCpjdXJyZW50KTsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KGN1cnJlbnQpICYm
ICFjdXJyZW50Lm5lZWRzTGF5b3V0KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiByZW5kZXJC
b3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KGN1cnJlbnQpOwogICAgICAgICAgICAgICAgIGlmIChy
ZW5kZXJCb3guaW5saW5lQm94V3JhcHBlcigpKQogICAgICAgICAgICAgICAgICAgICByZW5kZXJC
b3guaW5saW5lQm94V3JhcHBlcigpLT5yb290KCkubWFya0RpcnR5KCk7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKCFjdXJyZW50LT5zZWxmTmVlZHNMYXlvdXQoKSkgewotICAgICAgICAgICAgICAg
IGlmIChpczxSZW5kZXJJbmxpbmU+KCpjdXJyZW50KSkgewotICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJJbmxpbmUmIHJlbmRlcklubGluZSA9IGRvd25jYXN0PFJlbmRlcklubGluZT4oKmN1cnJl
bnQpOworICAgICAgICAgICAgfSBlbHNlIGlmICghY3VycmVudC5zZWxmTmVlZHNMYXlvdXQoKSkg
eworICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJJbmxpbmU+KGN1cnJlbnQpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8mIHJlbmRlcklubGluZSA9IGRvd25jYXN0PFJlbmRlcklubGlu
ZT4oY3VycmVudCk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoSW5saW5lRmxvd0JveCogY2hp
bGRMaW5lID0gcmVuZGVySW5saW5lLmZpcnN0TGluZUJveCgpOyBjaGlsZExpbmU7IGNoaWxkTGlu
ZSA9IGNoaWxkTGluZS0+bmV4dExpbmVCb3goKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNo
aWxkTGluZS0+cm9vdCgpLm1hcmtEaXJ0eSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
aXM8UmVuZGVyVGV4dD4oKmN1cnJlbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlclRl
eHQmIHJlbmRlclRleHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqY3VycmVudCk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJUZXh0PihjdXJyZW50KSkgeworICAgICAgICAg
ICAgICAgICAgICBhdXRvJiByZW5kZXJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oY3VycmVu
dCk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoSW5saW5lVGV4dEJveCogY2hpbGRUZXh0ID0g
cmVuZGVyVGV4dC5maXJzdFRleHRCb3goKTsgY2hpbGRUZXh0OyBjaGlsZFRleHQgPSBjaGlsZFRl
eHQtPm5leHRUZXh0Qm94KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFRleHQtPnJv
b3QoKS5tYXJrRGlydHkoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlckxp
bmVCcmVhaz4oKmN1cnJlbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlckxpbmVCcmVh
ayYgcmVuZGVyQlIgPSBkb3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+KCpjdXJyZW50KTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlckxpbmVCcmVhaz4oY3VycmVudCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byYgcmVuZGVyQlIgPSBkb3duY2FzdDxSZW5kZXJMaW5lQnJl
YWs+KGN1cnJlbnQpOwogICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVyQlIuaW5saW5lQm94
V3JhcHBlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyQlIuaW5saW5lQm94V3Jh
cHBlcigpLT5yb290KCkubWFya0RpcnR5KCk7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKaW5kZXggMjg0Y2ViMTljNDY4YmEw
M2Y5ZjBmYzA1OWQ5MDQxOGVkNTMwNjUxZS4uNjdkNmJmNDMwMTM1MDlmZjc0MzgyYzA1NjY5ZDZj
MmU5OTg4OGU3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RJdGVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0u
Y3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSFRNTFVMaXN0RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCisj
aW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5o
IgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNv
bHVtbkZsb3dUaHJlYWQuaCIKQEAgLTIyNywyMyArMjI4LDIzIEBAIGJvb2wgUmVuZGVyTGlzdEl0
ZW06OmlzRW1wdHkoKSBjb25zdAogc3RhdGljIFJlbmRlckJsb2NrKiBnZXRQYXJlbnRPZkZpcnN0
TGluZUJveChSZW5kZXJCbG9jayYgY3VycmVudCwgUmVuZGVyT2JqZWN0JiBtYXJrZXIpCiB7CiAg
ICAgYm9vbCBpblF1aXJrc01vZGUgPSBjdXJyZW50LmRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCk7
Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gY3VycmVudC5maXJzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZCA9
PSAmbWFya2VyKQorICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJP
YmplY3Q+KGN1cnJlbnQpKSB7CisgICAgICAgIGlmICgmY2hpbGQgPT0gJm1hcmtlcikKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChjaGlsZC0+aXNJbmxpbmUoKSAmJiAoIWlz
PFJlbmRlcklubGluZT4oKmNoaWxkKSB8fCBjdXJyZW50LmdlbmVyYXRlc0xpbmVCb3hlc0Zvcklu
bGluZUNoaWxkKGNoaWxkKSkpCisgICAgICAgIGlmIChjaGlsZC5pc0lubGluZSgpICYmICghaXM8
UmVuZGVySW5saW5lPihjaGlsZCkgfHwgY3VycmVudC5nZW5lcmF0ZXNMaW5lQm94ZXNGb3JJbmxp
bmVDaGlsZCgmY2hpbGQpKSkKICAgICAgICAgICAgIHJldHVybiAmY3VycmVudDsKIAotICAgICAg
ICBpZiAoY2hpbGQtPmlzRmxvYXRpbmcoKSB8fCBjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkpCisgICAgICAgIGlmIChjaGlsZC5pc0Zsb2F0aW5nKCkgfHwgY2hpbGQuaXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoaXM8UmVu
ZGVyVGFibGU+KCpjaGlsZCkgfHwgIWlzPFJlbmRlckJsb2NrPigqY2hpbGQpIHx8IChpczxSZW5k
ZXJCb3g+KCpjaGlsZCkgJiYgZG93bmNhc3Q8UmVuZGVyQm94PigqY2hpbGQpLmlzV3JpdGluZ01v
ZGVSb290KCkpKQorICAgICAgICBpZiAoaXM8UmVuZGVyVGFibGU+KGNoaWxkKSB8fCAhaXM8UmVu
ZGVyQmxvY2s+KGNoaWxkKSB8fCAoaXM8UmVuZGVyQm94PihjaGlsZCkgJiYgZG93bmNhc3Q8UmVu
ZGVyQm94PihjaGlsZCkuaXNXcml0aW5nTW9kZVJvb3QoKSkpCiAgICAgICAgICAgICBicmVhazsK
IAotICAgICAgICBpZiAoaXM8UmVuZGVyTGlzdEl0ZW0+KGN1cnJlbnQpICYmIGluUXVpcmtzTW9k
ZSAmJiBjaGlsZC0+bm9kZSgpICYmIGlzSFRNTExpc3RFbGVtZW50KCpjaGlsZC0+bm9kZSgpKSkK
KyAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RJdGVtPihjdXJyZW50KSAmJiBpblF1aXJrc01vZGUg
JiYgY2hpbGQubm9kZSgpICYmIGlzSFRNTExpc3RFbGVtZW50KCpjaGlsZC5ub2RlKCkpKQogICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgaWYgKFJlbmRlckJsb2NrKiBsaW5lQm94ID0gZ2V0
UGFyZW50T2ZGaXJzdExpbmVCb3goZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjaGlsZCksIG1hcmtl
cikpCisgICAgICAgIGlmIChSZW5kZXJCbG9jayogbGluZUJveCA9IGdldFBhcmVudE9mRmlyc3RM
aW5lQm94KGRvd25jYXN0PFJlbmRlckJsb2NrPihjaGlsZCksIG1hcmtlcikpCiAgICAgICAgICAg
ICByZXR1cm4gbGluZUJveDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAKaW5kZXggZWM3ZTJlNDFjM2EyMjA5OGY4MDQ0NzhlZWY3YWUyZjUxZDU1OWMw
Ni4uNzExMGM1MWI5NjllNTgxYjJhNzViYTk1OGNlNmRmZDc5NmUyZGVjYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNs
dWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUHNldWRvRWxl
bWVudC5oIgorI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5k
ZXJDb3VudGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJl
bmRlckdlb21ldHJ5TWFwLmgiCkBAIC0xNjgsMTIgKzE2OSwxNSBAQCB2b2lkIFJlbmRlck9iamVj
dDo6c2V0Rmxvd1RocmVhZFN0YXRlSW5jbHVkaW5nRGVzY2VuZGFudHMoRmxvd1RocmVhZFN0YXRl
IHN0YXRlKQogewogICAgIHNldEZsb3dUaHJlYWRTdGF0ZShzdGF0ZSk7CiAKLSAgICBmb3IgKFJl
bmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkgeworICAgIGlmICghaXM8UmVuZGVyRWxlbWVudD4oKnRoaXMpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8
UmVuZGVyT2JqZWN0Pihkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqdGhpcykpKSB7CiAgICAgICAg
IC8vIElmIHRoZSBjaGlsZCBpcyBhIGZyYWdtZW50YXRpb24gY29udGV4dCBpdCBhbHJlYWR5IHVw
ZGF0ZWQgdGhlIGRlc2NlbmRhbnRzIGZsYWcgYWNjb3JkaW5nbHkuCi0gICAgICAgIGlmIChjaGls
ZC0+aXNSZW5kZXJGbG93VGhyZWFkKCkpCisgICAgICAgIGlmIChjaGlsZC5pc1JlbmRlckZsb3dU
aHJlYWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBBU1NFUlQoc3RhdGUgIT0g
Y2hpbGQtPmZsb3dUaHJlYWRTdGF0ZSgpKTsKLSAgICAgICAgY2hpbGQtPnNldEZsb3dUaHJlYWRT
dGF0ZUluY2x1ZGluZ0Rlc2NlbmRhbnRzKHN0YXRlKTsKKyAgICAgICAgQVNTRVJUKHN0YXRlICE9
IGNoaWxkLmZsb3dUaHJlYWRTdGF0ZSgpKTsKKyAgICAgICAgY2hpbGQuc2V0Rmxvd1RocmVhZFN0
YXRlSW5jbHVkaW5nRGVzY2VuZGFudHMoc3RhdGUpOwogICAgIH0KIH0KIApAQCAtODAwLDggKzgw
NCwxMiBAQCB2b2lkIFJlbmRlck9iamVjdDo6YWRkQWJzb2x1dGVSZWN0Rm9yTGF5ZXIoTGF5b3V0
UmVjdCYgcmVzdWx0KQogewogICAgIGlmIChoYXNMYXllcigpKQogICAgICAgICByZXN1bHQudW5p
dGUoYWJzb2x1dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKSk7Ci0gICAgZm9y
IChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJzdENoaWxkU2xvdygpOyBjdXJyZW50OyBjdXJy
ZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY3VycmVudC0+YWRkQWJzb2x1
dGVSZWN0Rm9yTGF5ZXIocmVzdWx0KTsKKworICAgIGlmICghaXM8UmVuZGVyRWxlbWVudD4oKnRo
aXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5P
ZlR5cGU8UmVuZGVyT2JqZWN0Pihkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqdGhpcykpKQorICAg
ICAgICBjaGlsZC5hZGRBYnNvbHV0ZVJlY3RGb3JMYXllcihyZXN1bHQpOwogfQogCiAvLyBGSVhN
RTogY2hhbmdlIHRoaXMgdG8gdXNlIHRoZSBzdWJ0cmVlUGFpbnQgdGVybWlub2xvZ3kKQEAgLTgw
OSw4ICs4MTcsMTAgQEAgTGF5b3V0UmVjdCBSZW5kZXJPYmplY3Q6OnBhaW50aW5nUm9vdFJlY3Qo
TGF5b3V0UmVjdCYgdG9wTGV2ZWxSZWN0KQogewogICAgIExheW91dFJlY3QgcmVzdWx0ID0gYWJz
b2x1dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKTsKICAgICB0b3BMZXZlbFJl
Y3QgPSByZXN1bHQ7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJzdENoaWxk
U2xvdygpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkKLSAgICAg
ICAgY3VycmVudC0+YWRkQWJzb2x1dGVSZWN0Rm9yTGF5ZXIocmVzdWx0KTsKKyAgICBpZiAoaXM8
UmVuZGVyRWxlbWVudD4oKnRoaXMpKSB7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGls
ZHJlbk9mVHlwZTxSZW5kZXJPYmplY3Q+KGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCp0aGlzKSkp
CisgICAgICAgICAgICBjaGlsZC5hZGRBYnNvbHV0ZVJlY3RGb3JMYXllcihyZXN1bHQpOworICAg
IH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNTg4LDggKzE1OTgsMTAgQEAgdm9pZCBS
ZW5kZXJPYmplY3Q6OnJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkSW5jbHVkaW5nRGVzY2VuZGFu
dHMoYm9vbCBzaG91bGRVcGQKICAgICBpZiAoaXNSZW5kZXJGbG93VGhyZWFkKCkpCiAgICAgICAg
IHNob3VsZFVwZGF0ZVN0YXRlID0gZmFsc2U7CiAKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hp
bGQgPSBmaXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkKLSAgICAgICAgY2hpbGQtPnJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkSW5jbHVkaW5nRGVz
Y2VuZGFudHMoc2hvdWxkVXBkYXRlU3RhdGUpOworICAgIGlmIChpczxSZW5kZXJFbGVtZW50Pigq
dGhpcykpIHsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRl
ck9iamVjdD4oZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oKnRoaXMpKSkKKyAgICAgICAgICAgIGNo
aWxkLnJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkSW5jbHVkaW5nRGVzY2VuZGFudHMoc2hvdWxk
VXBkYXRlU3RhdGUpOworICAgIH0KIAogICAgIC8vIFdlIGhhdmUgdG8gYXNrIGZvciBvdXIgY29u
dGFpbmluZyBmbG93IHRocmVhZCBhcyBpdCBtYXkgYmUgYWJvdmUgdGhlIHJlbW92ZWQgc3ViLXRy
ZWUuCiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jayA9IHRo
aXMtPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKQEAgLTE2MjcsOCArMTYzOSwxMSBAQCB2
b2lkIFJlbmRlck9iamVjdDo6aW52YWxpZGF0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2tJbmNs
dWRpbmdEZXNjZW5kYW50cyhSZW5kZQogICAgIGlmIChmbG93VGhyZWFkKQogICAgICAgICBmbG93
VGhyZWFkLT5yZW1vdmVGbG93Q2hpbGRJbmZvKHRoaXMpOwogCi0gICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gZmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5pbnZhbGlkYXRlRmxvd1RocmVhZENvbnRhaW5pbmdC
bG9ja0luY2x1ZGluZ0Rlc2NlbmRhbnRzKGZsb3dUaHJlYWQpOworICAgIGlmICghaXM8UmVuZGVy
RWxlbWVudD4oKnRoaXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIGNoaWxk
IDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0Pihkb3duY2FzdDxSZW5kZXJFbGVtZW50Pigq
dGhpcykpKQorICAgICAgICBjaGlsZC5pbnZhbGlkYXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9j
a0luY2x1ZGluZ0Rlc2NlbmRhbnRzKGZsb3dUaHJlYWQpOwogfQogCiBzdGF0aWMgdm9pZCBjb2xs
YXBzZUFub255bW91c1RhYmxlUm93c0lmTmVlZGVkKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
ZXJUb0JlRGVzdHJveWVkKQpAQCAtMTcyMyw4ICsxNzM4LDEyIEBAIHZvaWQgUmVuZGVyT2JqZWN0
Ojp1cGRhdGVEcmFnU3RhdGUoYm9vbCBkcmFnT24pCiAgICAgc2V0SXNEcmFnZ2luZyhkcmFnT24p
OwogICAgIGlmICh2YWx1ZUNoYW5nZWQgJiYgbm9kZSgpICYmIChzdHlsZSgpLmFmZmVjdGVkQnlE
cmFnKCkgfHwgKGlzPEVsZW1lbnQ+KCpub2RlKCkpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCpub2Rl
KCkpLmNoaWxkcmVuQWZmZWN0ZWRCeURyYWcoKSkpKQogICAgICAgICBub2RlKCktPnNldE5lZWRz
U3R5bGVSZWNhbGMoKTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGRT
bG93KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKQotICAgICAgICBjdXJyLT51
cGRhdGVEcmFnU3RhdGUoZHJhZ09uKTsKKworICAgIGlmICghaXM8UmVuZGVyRWxlbWVudD4oKnRo
aXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5P
ZlR5cGU8UmVuZGVyT2JqZWN0Pihkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqdGhpcykpKQorICAg
ICAgICBjaGlsZC51cGRhdGVEcmFnU3RhdGUoZHJhZ09uKTsKIH0KIAogYm9vbCBSZW5kZXJPYmpl
Y3Q6OmlzQ29tcG9zaXRlZCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlLmNwcAppbmRleCA0NDZiYTg0MWY0NDlhOWZlYjg4Y2MxOGFkMjE5NTdlNmUyN2M3YmM0Li5m
NTZhNzUwZDJkMjg3YjQxOGYxMTUwNmU1ZTQxZWVlZjZmZDg1YzNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiTGF5
b3V0UmVwYWludGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgogI2luY2x1
ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIgpAQCAtODc5LDEyICs4ODAsMTIgQEAgdm9pZCBS
ZW5kZXJUYWJsZTo6YXBwZW5kQ29sdW1uKHVuc2lnbmVkIHNwYW4pCiAKIFJlbmRlclRhYmxlQ29s
KiBSZW5kZXJUYWJsZTo6Zmlyc3RDb2x1bW4oKSBjb25zdAogewotICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpIHsKLSAgICAgICAgaWYgKGlzPFJlbmRlclRhYmxlQ29sPigqY2hpbGQpKQotICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRhYmxlQ29sPihjaGlsZCk7CisgICAgZm9yIChh
dXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oKnRoaXMpKSB7CisgICAg
ICAgIGlmIChpczxSZW5kZXJUYWJsZUNvbD4oY2hpbGQpKQorICAgICAgICAgICAgcmV0dXJuICZj
b25zdF9jYXN0PFJlbmRlclRhYmxlQ29sJj4oZG93bmNhc3Q8UmVuZGVyVGFibGVDb2w+KGNoaWxk
KSk7CiAKICAgICAgICAgLy8gV2UgYWxsb3cgb25seSB0YWJsZS1jYXB0aW9ucyBiZWZvcmUgY29s
dW1ucyBvciBjb2x1bW4tZ3JvdXBzLgotICAgICAgICBpZiAoIWlzPFJlbmRlclRhYmxlQ2FwdGlv
bj4oKmNoaWxkKSkKKyAgICAgICAgaWYgKCFpczxSZW5kZXJUYWJsZUNhcHRpb24+KGNoaWxkKSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAKaW5kZXggNjk4ZWMxOTg5ZmMwZGJkY2JmMmQ4NzJl
MzNlMzQwNGQ1NTExMjlhYS4uYjAxZjZmNjg5NjgxNGYzZWQ3ZTUwZWY3ZTQ4YjFmZjA5ZWVjMjEy
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MVGFi
bGVDb2xFbGVtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgogI2luY2x1
ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGUuaCIKICNpbmNsdWRl
ICJSZW5kZXJUYWJsZUNhcHRpb24uaCIKQEAgLTEzMSw4ICsxMzIsOCBAQCB2b2lkIFJlbmRlclRh
YmxlQ29sOjpjbGVhclByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eUJpdHMoKQogewogICAgIHNl
dFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7CiAKLSAgICBmb3IgKFJlbmRlck9i
amVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpKQotICAgICAgICBjaGlsZC0+c2V0UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KGZh
bHNlKTsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0
PigqdGhpcykpCisgICAgICAgIGNoaWxkLnNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShm
YWxzZSk7CiB9CiAKIFJlbmRlclRhYmxlKiBSZW5kZXJUYWJsZUNvbDo6dGFibGUoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAppbmRl
eCAyMjMwMzZmNjkyNTRiMGZhYzllMjljYWNmYTRjMzY4YThiOGFkYWZlLi42ZjU4Njk3Y2I5ZGI4
N2E2YjJhNWRiODdmMDU3M2M5ZDQ1NTgxYzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUg
IkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJQYWlu
dEluZm8uaCIKKyNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNp
bmNsdWRlICJSZW5kZXJUYWJsZUNvbC5oIgpAQCAtNTcwLDExICs1NzEsMTEgQEAgdm9pZCBSZW5k
ZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoKQogICAgICAgICAgICAgYm9vbCBmbGV4QWxsQ2hp
bGRyZW4gPSBjZWxsLT5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKS5pc0ZpeGVkKCkKICAgICAgICAg
ICAgICAgICB8fCAoIXRhYmxlKCktPnN0eWxlKCkubG9naWNhbEhlaWdodCgpLmlzQXV0bygpICYm
IHJIZWlnaHQgIT0gY2VsbC0+bG9naWNhbEhlaWdodCgpKTsKIAotICAgICAgICAgICAgZm9yIChS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY2VsbC0+Zmlyc3RDaGlsZCgpOyByZW5kZXJlcjsgcmVu
ZGVyZXIgPSByZW5kZXJlci0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAgICAgICAgIGlmICgh
aXM8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKSAmJiByZW5kZXJlci0+c3R5bGUoKS5sb2dpY2FsSGVp
Z2h0KCkuaXNQZXJjZW50T3JDYWxjdWxhdGVkKCkgJiYgKGZsZXhBbGxDaGlsZHJlbiB8fCAoKHJl
bmRlcmVyLT5pc1JlcGxhY2VkKCkgfHwgKGlzPFJlbmRlckJveD4oKnJlbmRlcmVyKSAmJiBkb3du
Y2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcikuc2Nyb2xsc092ZXJmbG93KCkpKSAmJiAhaXM8UmVu
ZGVyVGV4dENvbnRyb2w+KCpyZW5kZXJlcikpKSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiBy
ZW5kZXJlciA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oKmNlbGwpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFpczxSZW5kZXJUZXh0PihyZW5kZXJlcikgJiYgcmVuZGVyZXIuc3R5bGUo
KS5sb2dpY2FsSGVpZ2h0KCkuaXNQZXJjZW50T3JDYWxjdWxhdGVkKCkgJiYgKGZsZXhBbGxDaGls
ZHJlbiB8fCAoKHJlbmRlcmVyLmlzUmVwbGFjZWQoKSB8fCAoaXM8UmVuZGVyQm94PihyZW5kZXJl
cikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikuc2Nyb2xsc092ZXJmbG93KCkpKSAm
JiAhaXM8UmVuZGVyVGV4dENvbnRyb2w+KHJlbmRlcmVyKSkpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIFRhYmxlcyB3aXRoIG5vIHNlY3Rpb25zIGRvIG5vdCBmbGV4LgotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWlzPFJlbmRlclRhYmxlPigqcmVuZGVyZXIpIHx8IGRvd25jYXN0PFJlbmRl
clRhYmxlPigqcmVuZGVyZXIpLmhhc1NlY3Rpb25zKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJlbmRlcmVyLT5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoIWlzPFJlbmRlclRhYmxlPihyZW5kZXJlcikgfHwgZG93bmNhc3Q8UmVuZGVy
VGFibGU+KHJlbmRlcmVyKS5oYXNTZWN0aW9ucygpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZW5kZXJlci5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgY2VsbENoaWxkcmVuRmxleCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHAKaW5kZXggY2FjMGY3NzRiNjE4YTkyMmIyNmZiY2QxNjEwODM5NDk1MmYxODI1
NS4uMGU5YTM5MGE2M2UxN2EyYmY3MWQyMDk5YmZkNTE4ODVmZDlmOTE4OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNTY2LDEwICs1NjYs
MTAgQEAgdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBp
bnQgaW5kZW50LCBSZW5kZXJBc1RleHRCZWhhdmkKICAgICAgICAgfQogCiAgICAgfSBlbHNlIHsK
LSAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVu
dD4obykuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkg
ewotICAgICAgICAgICAgaWYgKGNoaWxkLT5oYXNMYXllcigpKQorICAgICAgICBmb3IgKGF1dG8m
IGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0Pihkb3duY2FzdDxSZW5kZXJFbGVt
ZW50PihvKSkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC5oYXNMYXllcigpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgd3JpdGUodHMsICpjaGlsZCwgaW5kZW50ICsg
MSwgYmVoYXZpb3IpOworICAgICAgICAgICAgd3JpdGUodHMsIGNoaWxkLCBpbmRlbnQgKyAxLCBi
ZWhhdmlvcik7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCmluZGV4IDUxM2Y4NjZjZmMwYThhNjU4MzVhNjAxMGQx
MzExOWJkMWJmY2U4NmMuLmY3YzRlNDIyZTNhM2QzNjUwY2Q4OThlNjA2NGZlMmM4NDBkMGVjNDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcApA
QCAtMTE4LDE0ICsxMTgsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbGxlY3RMYXlvdXRBdHRy
aWJ1dGVzKFJlbmRlck9iamVjdCogdGV4dCwgVmVjdG9yPFNWR1RleHRMYXkKICAgICB9CiB9CiAK
LXN0YXRpYyBpbmxpbmUgYm9vbCBmaW5kUHJldmlvdXNBbmROZXh0QXR0cmlidXRlcyhSZW5kZXJF
bGVtZW50KiBzdGFydCwgUmVuZGVyU1ZHSW5saW5lVGV4dCogbG9jYXRlRWxlbWVudCwgYm9vbCYg
c3RvcEFmdGVyTmV4dCwgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqJiBwcmV2aW91cywgU1ZHVGV4
dExheW91dEF0dHJpYnV0ZXMqJiBuZXh0KQorc3RhdGljIGlubGluZSBib29sIGZpbmRQcmV2aW91
c0FuZE5leHRBdHRyaWJ1dGVzKFJlbmRlckVsZW1lbnQmIHN0YXJ0LCBSZW5kZXJTVkdJbmxpbmVU
ZXh0KiBsb2NhdGVFbGVtZW50LCBib29sJiBzdG9wQWZ0ZXJOZXh0LCBTVkdUZXh0TGF5b3V0QXR0
cmlidXRlcyomIHByZXZpb3VzLCBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyomIG5leHQpCiB7CiAg
ICAgQVNTRVJUKHN0YXJ0KTsKICAgICBBU1NFUlQobG9jYXRlRWxlbWVudCk7CiAgICAgLy8gRklY
TUU6IE1ha2UgdGhpcyBpdGVyYXRpdmUuCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0g
c3RhcnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkp
IHsKLSAgICAgICAgaWYgKGlzPFJlbmRlclNWR0lubGluZVRleHQ+KCpjaGlsZCkpIHsKLSAgICAg
ICAgICAgIFJlbmRlclNWR0lubGluZVRleHQmIHRleHQgPSBkb3duY2FzdDxSZW5kZXJTVkdJbmxp
bmVUZXh0PigqY2hpbGQpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxS
ZW5kZXJPYmplY3Q+KHN0YXJ0KSkgeworICAgICAgICBpZiAoaXM8UmVuZGVyU1ZHSW5saW5lVGV4
dD4oY2hpbGQpKSB7CisgICAgICAgICAgICBhdXRvJiB0ZXh0ID0gZG93bmNhc3Q8UmVuZGVyU1ZH
SW5saW5lVGV4dD4oY2hpbGQpOwogICAgICAgICAgICAgaWYgKGxvY2F0ZUVsZW1lbnQgIT0gJnRl
eHQpIHsKICAgICAgICAgICAgICAgICBpZiAoc3RvcEFmdGVyTmV4dCkgewogICAgICAgICAgICAg
ICAgICAgICBuZXh0ID0gdGV4dC5sYXlvdXRBdHRyaWJ1dGVzKCk7CkBAIC0xNDAsNyArMTQwLDcg
QEAgc3RhdGljIGlubGluZSBib29sIGZpbmRQcmV2aW91c0FuZE5leHRBdHRyaWJ1dGVzKFJlbmRl
ckVsZW1lbnQqIHN0YXJ0LCBSZW5kZXJTVkcKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKCFpczxSZW5kZXJTVkdJbmxpbmU+KCpjaGlsZCkpCisgICAgICAg
IGlmICghaXM8UmVuZGVyU1ZHSW5saW5lPihjaGlsZCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAogICAgICAgICBpZiAoZmluZFByZXZpb3VzQW5kTmV4dEF0dHJpYnV0ZXMoZG93bmNhc3Q8UmVu
ZGVyRWxlbWVudD4oY2hpbGQpLCBsb2NhdGVFbGVtZW50LCBzdG9wQWZ0ZXJOZXh0LCBwcmV2aW91
cywgbmV4dCkpCkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjpzdWJ0cmVl
Q2hpbGRXYXNBZGRlZChSZW5kZXJPYmplY3QqIGNoaWxkKQogICAgICAgICAgICAgU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXMqIHByZXZpb3VzID0gMDsKICAgICAgICAgICAgIFNWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzKiBuZXh0ID0gMDsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY2hpbGQsICZh
dHRyaWJ1dGVzLT5jb250ZXh0KCkgPT0gY2hpbGQpOwotICAgICAgICAgICAgZmluZFByZXZpb3Vz
QW5kTmV4dEF0dHJpYnV0ZXModGhpcywgJmF0dHJpYnV0ZXMtPmNvbnRleHQoKSwgc3RvcEFmdGVy
TmV4dCwgcHJldmlvdXMsIG5leHQpOworICAgICAgICAgICAgZmluZFByZXZpb3VzQW5kTmV4dEF0
dHJpYnV0ZXMoKnRoaXMsICZhdHRyaWJ1dGVzLT5jb250ZXh0KCksIHN0b3BBZnRlck5leHQsIHBy
ZXZpb3VzLCBuZXh0KTsKIAogICAgICAgICAgICAgaWYgKHByZXZpb3VzKQogICAgICAgICAgICAg
ICAgIG1fbGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuYnVpbGRMYXlvdXRBdHRyaWJ1dGVzRm9yVGV4
dFJlbmRlcmVyKHByZXZpb3VzLT5jb250ZXh0KCkpOwpAQCAtMjUyLDcgKzI1Miw3IEBAIHZvaWQg
UmVuZGVyU1ZHVGV4dDo6c3VidHJlZUNoaWxkV2lsbEJlUmVtb3ZlZChSZW5kZXJPYmplY3QqIGNo
aWxkLCBWZWN0b3I8U1ZHVGV4CiAgICAgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqIHByZXZpb3Vz
ID0gbnVsbHB0cjsKICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyogbmV4dCA9IG51bGxwdHI7
CiAgICAgaWYgKCFkb2N1bWVudEJlaW5nRGVzdHJveWVkKCkpCi0gICAgICAgIGZpbmRQcmV2aW91
c0FuZE5leHRBdHRyaWJ1dGVzKHRoaXMsICZ0ZXh0LCBzdG9wQWZ0ZXJOZXh0LCBwcmV2aW91cywg
bmV4dCk7CisgICAgICAgIGZpbmRQcmV2aW91c0FuZE5leHRBdHRyaWJ1dGVzKCp0aGlzLCAmdGV4
dCwgc3RvcEFmdGVyTmV4dCwgcHJldmlvdXMsIG5leHQpOwogCiAgICAgaWYgKHByZXZpb3VzKQog
ICAgICAgICBhZmZlY3RlZEF0dHJpYnV0ZXMuYXBwZW5kKHByZXZpb3VzKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCmluZGV4IDdmNzIy
MTZjNzAxYmNlYWNiMGU4NDY0NDkyZGEyMmM0MzI2YjA0MDAuLmRkYmRiZTM2YjBlYzBkZDM1OWNm
MjMwYWNmNTVmOGNhMzY5YzBlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIlNW
R1JlbmRlclN1cHBvcnQuaCIKIAogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgorI2luY2x1
ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCiAj
aW5jbHVkZSAiUmVuZGVyR2VvbWV0cnlNYXAuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5o
IgpAQCAtMTMxLDcgKzEzMiw3IEBAIGJvb2wgU1ZHUmVuZGVyU3VwcG9ydDo6Y2hlY2tGb3JTVkdS
ZXBhaW50RHVyaW5nTGF5b3V0KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlCiB9CiAKIC8vIFVw
ZGF0ZSBhIGJvdW5kaW5nIGJveCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSB2YWxpZGl0eSBvZiB0
aGUgb3RoZXIgYm91bmRpbmcgYm94Lgotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZU9iamVjdEJv
dW5kaW5nQm94KEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIGJvb2wmIG9iamVjdEJvdW5k
aW5nQm94VmFsaWQsIFJlbmRlck9iamVjdCogb3RoZXIsIEZsb2F0UmVjdCBvdGhlckJvdW5kaW5n
Qm94KQorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZU9iamVjdEJvdW5kaW5nQm94KEZsb2F0UmVj
dCYgb2JqZWN0Qm91bmRpbmdCb3gsIGJvb2wmIG9iamVjdEJvdW5kaW5nQm94VmFsaWQsIGNvbnN0
IFJlbmRlck9iamVjdCogb3RoZXIsIEZsb2F0UmVjdCBvdGhlckJvdW5kaW5nQm94KQogewogICAg
IGJvb2wgb3RoZXJWYWxpZCA9IGlzPFJlbmRlclNWR0NvbnRhaW5lcj4oKm90aGVyKSA/IGRvd25j
YXN0PFJlbmRlclNWR0NvbnRhaW5lcj4oKm90aGVyKS5pc09iamVjdEJvdW5kaW5nQm94VmFsaWQo
KSA6IHRydWU7CiAgICAgaWYgKCFvdGhlclZhbGlkKQpAQCAtMTU1LDIxICsxNTYsMjEgQEAgdm9p
ZCBTVkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyhjb25zdCBS
ZW5kZXJFbGVtZW50JiBjb250YWkKICAgICAvLyBXaGVuIGNvbXB1dGluZyB0aGUgc3Ryb2tlQm91
bmRpbmdCb3gsIHdlIHVzZSB0aGUgcmVwYWludFJlY3RzIG9mIHRoZSBjb250YWluZXIncyBjaGls
ZHJlbiBzbyB0aGF0IHRoZSBjb250YWluZXIncyBzdHJva2UgaW5jbHVkZXMKICAgICAvLyB0aGUg
cmVzb3VyY2VzIGFwcGxpZWQgdG8gdGhlIGNoaWxkcmVuIChzdWNoIGFzIGNsaXBzIGFuZCBmaWx0
ZXJzKS4gVGhpcyBhbGxvd3MgZmlsdGVycyBhcHBsaWVkIHRvIGNvbnRhaW5lcnMgdG8gY29ycmVj
dGx5IGJvdW5kCiAgICAgLy8gdGhlIGNoaWxkcmVuLCBhbmQgYWxzbyBpbXByb3ZlcyBpbmxpbmlu
ZyBvZiBTVkcgY29udGVudCwgYXMgdGhlIHN0cm9rZSBib3VuZCBpcyB1c2VkIGluIHRoYXQgc2l0
dWF0aW9uIGFsc28uCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBjb250YWluZXIu
Zmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkg
ewotICAgICAgICBpZiAoY3VycmVudC0+aXNTVkdIaWRkZW5Db250YWluZXIoKSkKKyAgICBmb3Ig
KGF1dG8mIGN1cnJlbnQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJPYmplY3Q+KGNvbnRhaW5lcikp
IHsKKyAgICAgICAgaWYgKGN1cnJlbnQuaXNTVkdIaWRkZW5Db250YWluZXIoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8vIERvbid0IGluY2x1ZGUgZWxlbWVudHMgaW4gdGhl
IHVuaW9uIHRoYXQgZG8gbm90IHJlbmRlci4KLSAgICAgICAgaWYgKGlzPFJlbmRlclNWR1NoYXBl
PigqY3VycmVudCkgJiYgZG93bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KCpjdXJyZW50KS5pc1JlbmRl
cmluZ0Rpc2FibGVkKCkpCisgICAgICAgIGlmIChpczxSZW5kZXJTVkdTaGFwZT4oY3VycmVudCkg
JiYgZG93bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KGN1cnJlbnQpLmlzUmVuZGVyaW5nRGlzYWJsZWQo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtID0gY3VycmVudC0+bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpOworICAgICAg
ICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSA9IGN1cnJlbnQubG9jYWxUb1BhcmVu
dFRyYW5zZm9ybSgpOwogICAgICAgICBpZiAodHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkgewotICAg
ICAgICAgICAgdXBkYXRlT2JqZWN0Qm91bmRpbmdCb3gob2JqZWN0Qm91bmRpbmdCb3gsIG9iamVj
dEJvdW5kaW5nQm94VmFsaWQsIGN1cnJlbnQsIGN1cnJlbnQtPm9iamVjdEJvdW5kaW5nQm94KCkp
OwotICAgICAgICAgICAgc3Ryb2tlQm91bmRpbmdCb3gudW5pdGUoY3VycmVudC0+cmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgICAgICAgICB1cGRhdGVPYmplY3RCb3VuZGlu
Z0JveChvYmplY3RCb3VuZGluZ0JveCwgb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCwgJmN1cnJlbnQs
IGN1cnJlbnQub2JqZWN0Qm91bmRpbmdCb3goKSk7CisgICAgICAgICAgICBzdHJva2VCb3VuZGlu
Z0JveC51bml0ZShjdXJyZW50LnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwogICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgdXBkYXRlT2JqZWN0Qm91bmRpbmdCb3gob2JqZWN0
Qm91bmRpbmdCb3gsIG9iamVjdEJvdW5kaW5nQm94VmFsaWQsIGN1cnJlbnQsIHRyYW5zZm9ybS5t
YXBSZWN0KGN1cnJlbnQtPm9iamVjdEJvdW5kaW5nQm94KCkpKTsKLSAgICAgICAgICAgIHN0cm9r
ZUJvdW5kaW5nQm94LnVuaXRlKHRyYW5zZm9ybS5tYXBSZWN0KGN1cnJlbnQtPnJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKKyAgICAgICAgICAgIHVwZGF0ZU9iamVjdEJvdW5kaW5n
Qm94KG9iamVjdEJvdW5kaW5nQm94LCBvYmplY3RCb3VuZGluZ0JveFZhbGlkLCAmY3VycmVudCwg
dHJhbnNmb3JtLm1hcFJlY3QoY3VycmVudC5vYmplY3RCb3VuZGluZ0JveCgpKSk7CisgICAgICAg
ICAgICBzdHJva2VCb3VuZGluZ0JveC51bml0ZSh0cmFuc2Zvcm0ubWFwUmVjdChjdXJyZW50LnJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
MjQ3LDU4ICsyNDgsNTcgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbihS
ZW5kZXJFbGVtZW50JiBzdGFydCwgYm9vbCBzZWxmTmVlZHNMYXlvdXQKICAgICBib29sIG5lZWRz
Qm91bmRhcmllc1VwZGF0ZSA9IHN0YXJ0Lm5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOwogICAgIEhh
c2hTZXQ8UmVuZGVyRWxlbWVudCo+IGVsZW1lbnRzVGhhdERpZE5vdFJlY2VpdmVMYXlvdXQ7CiAK
LSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBzdGFydC5maXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6
IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oc3RhcnQpKSB7CiAgICAgICAgIGJvb2wgbmVl
ZHNMYXlvdXQgPSBzZWxmTmVlZHNMYXlvdXQ7Ci0gICAgICAgIGJvb2wgY2hpbGRFdmVySGFkTGF5
b3V0ID0gY2hpbGQtPmV2ZXJIYWRMYXlvdXQoKTsKKyAgICAgICAgYm9vbCBjaGlsZEV2ZXJIYWRM
YXlvdXQgPSBjaGlsZC5ldmVySGFkTGF5b3V0KCk7CiAKICAgICAgICAgaWYgKG5lZWRzQm91bmRh
cmllc1VwZGF0ZSAmJiBoYXNTVkdTaGFkb3cpIHsKICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUg
YSBzaGFkb3csIG91ciBzaGFkb3cgaXMgYmFrZWQgaW50byBvdXIgY2hpbGRyZW4ncyBjYWNoZWQg
Ym91bmRhcmllcywKICAgICAgICAgICAgIC8vIHNvIHRoZXkgbmVlZCB0byB1cGRhdGUuCi0gICAg
ICAgICAgICBjaGlsZC0+c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7CisgICAgICAgICAgICBj
aGlsZC5zZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKICAgICAgICAgICAgIG5lZWRzTGF5b3V0
ID0gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICh0cmFuc2Zvcm1DaGFuZ2VkKSB7CiAg
ICAgICAgICAgICAvLyBJZiB0aGUgdHJhbnNmb3JtIGNoYW5nZWQgd2UgbmVlZCB0byB1cGRhdGUg
dGhlIHRleHQgbWV0cmljcyAobm90ZTogdGhpcyBhbHNvIGhhcHBlbnMgZm9yIGxheW91dFNpemVD
aGFuZ2VkPXRydWUpLgotICAgICAgICAgICAgaWYgKGlzPFJlbmRlclNWR1RleHQ+KCpjaGlsZCkp
Ci0gICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHVGV4dD4oKmNoaWxkKS5zZXROZWVk
c1RleHRNZXRyaWNzVXBkYXRlKCk7CisgICAgICAgICAgICBpZiAoaXM8UmVuZGVyU1ZHVGV4dD4o
Y2hpbGQpKQorICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclNWR1RleHQ+KGNoaWxkKS5z
ZXROZWVkc1RleHRNZXRyaWNzVXBkYXRlKCk7CiAgICAgICAgICAgICBuZWVkc0xheW91dCA9IHRy
dWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobGF5b3V0U2l6ZUNoYW5nZWQpIHsKKyAgICAg
ICAgaWYgKGxheW91dFNpemVDaGFuZ2VkICYmIGlzPFNWR0VsZW1lbnQ+KGNoaWxkLm5vZGUoKSkp
IHsKICAgICAgICAgICAgIC8vIFdoZW4gc2VsZk5lZWRzTGF5b3V0IGlzIGZhbHNlIGFuZCB0aGUg
bGF5b3V0IHNpemUgY2hhbmdlZCwgd2UgaGF2ZSB0byBjaGVjayB3aGV0aGVyIHRoaXMgY2hpbGQg
dXNlcyByZWxhdGl2ZSBsZW5ndGhzCi0gICAgICAgICAgICBpZiAoU1ZHRWxlbWVudCogZWxlbWVu
dCA9IGlzPFNWR0VsZW1lbnQ+KCpjaGlsZC0+bm9kZSgpKSA/IGRvd25jYXN0PFNWR0VsZW1lbnQ+
KGNoaWxkLT5ub2RlKCkpIDogbnVsbHB0cikgewotICAgICAgICAgICAgICAgIGlmIChlbGVtZW50
LT5oYXNSZWxhdGl2ZUxlbmd0aHMoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHRo
ZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkIGFuZCB3aGVuIHVzaW5nIHJlbGF0aXZlIHZhbHVlcyB0ZWxs
IHRoZSBSZW5kZXJTVkdTaGFwZSB0byB1cGRhdGUgaXRzIHNoYXBlIG9iamVjdAotICAgICAgICAg
ICAgICAgICAgICBpZiAoaXM8UmVuZGVyU1ZHU2hhcGU+KCpjaGlsZCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4oKmNoaWxkKS5zZXROZWVkc1NoYXBl
VXBkYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzPFJlbmRlclNWR1RleHQ+
KCpjaGlsZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclNWR1RleHQmIHN2Z1Rl
eHQgPSBkb3duY2FzdDxSZW5kZXJTVkdUZXh0PigqY2hpbGQpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgc3ZnVGV4dC5zZXROZWVkc1RleHRNZXRyaWNzVXBkYXRlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzdmdUZXh0LnNldE5lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG5lZWRzTGF5b3V0ID0g
dHJ1ZTsKKyAgICAgICAgICAgIGF1dG8mIGVsZW1lbnQgPSBkb3duY2FzdDxTVkdFbGVtZW50Pigq
Y2hpbGQubm9kZSgpKTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc1JlbGF0aXZlTGVuZ3Ro
cygpKSB7CisgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgbGF5b3V0IHNpemUgY2hhbmdlZCBh
bmQgd2hlbiB1c2luZyByZWxhdGl2ZSB2YWx1ZXMgdGVsbCB0aGUgUmVuZGVyU1ZHU2hhcGUgdG8g
dXBkYXRlIGl0cyBzaGFwZSBvYmplY3QKKyAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyU1ZH
U2hhcGU+KGNoaWxkKSkKKyAgICAgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHU2hh
cGU+KGNoaWxkKS5zZXROZWVkc1NoYXBlVXBkYXRlKCk7CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoaXM8UmVuZGVyU1ZHVGV4dD4oY2hpbGQpKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8m
IHN2Z1RleHQgPSBkb3duY2FzdDxSZW5kZXJTVkdUZXh0PihjaGlsZCk7CisgICAgICAgICAgICAg
ICAgICAgIHN2Z1RleHQuc2V0TmVlZHNUZXh0TWV0cmljc1VwZGF0ZSgpOworICAgICAgICAgICAg
ICAgICAgICBzdmdUZXh0LnNldE5lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUoKTsKICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZWVkc0xheW91dCA9IHRydWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobmVlZHNMYXlvdXQpCi0gICAgICAg
ICAgICBjaGlsZC0+c2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKyAgICAgICAgICAgIGNo
aWxkLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAKLSAgICAgICAgaWYgKGNoaWxkLT5u
ZWVkc0xheW91dCgpKSB7Ci0gICAgICAgICAgICBsYXlvdXREaWZmZXJlbnRSb290SWZOZWVkZWQo
ZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oKmNoaWxkKSk7Ci0gICAgICAgICAgICBkb3duY2FzdDxS
ZW5kZXJFbGVtZW50PigqY2hpbGQpLmxheW91dCgpOworICAgICAgICBpZiAoY2hpbGQubmVlZHNM
YXlvdXQoKSkgeworICAgICAgICAgICAgbGF5b3V0RGlmZmVyZW50Um9vdElmTmVlZGVkKGRvd25j
YXN0PFJlbmRlckVsZW1lbnQ+KGNoaWxkKSk7CisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJF
bGVtZW50PihjaGlsZCkubGF5b3V0KCk7CiAgICAgICAgICAgICAvLyBSZW5kZXJlcnMgYXJlIHJl
c3BvbnNpYmxlIGZvciByZXBhaW50aW5nIHRoZW1zZWx2ZXMgd2hlbiBjaGFuZ2luZywgZXhjZXB0
CiAgICAgICAgICAgICAvLyBmb3IgdGhlIGluaXRpYWwgcGFpbnQgdG8gYXZvaWQgcG90ZW50aWFs
IGRvdWJsZS1wYWludGluZyBjYXVzZWQgYnkgbm9uLXNlbnNpY2FsICJvbGQiIGJvdW5kcy4KICAg
ICAgICAgICAgIC8vIFdlIGNvdWxkIGhhbmRsZSB0aGlzIGluIHRoZSBpbmRpdmlkdWFsIG9iamVj
dHMsIGJ1dCBmb3Igbm93IGl0J3MgZWFzaWVyIHRvIGhhdmUKICAgICAgICAgICAgIC8vIHBhcmVu
dCBjb250YWluZXJzIGNhbGwgcmVwYWludCgpLiAgKFJlbmRlckJsb2NrOjpsYXlvdXQqIGhhcyBz
aW1pbGFyIGxvZ2ljLikKICAgICAgICAgICAgIGlmICghY2hpbGRFdmVySGFkTGF5b3V0KQotICAg
ICAgICAgICAgICAgIGNoaWxkLT5yZXBhaW50KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobGF5b3V0
U2l6ZUNoYW5nZWQgJiYgaXM8UmVuZGVyRWxlbWVudD4oKmNoaWxkKSkKLSAgICAgICAgICAgIGVs
ZW1lbnRzVGhhdERpZE5vdFJlY2VpdmVMYXlvdXQuYWRkKGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+
KGNoaWxkKSk7CisgICAgICAgICAgICAgICAgY2hpbGQucmVwYWludCgpOworICAgICAgICB9IGVs
c2UgaWYgKGxheW91dFNpemVDaGFuZ2VkICYmIGlzPFJlbmRlckVsZW1lbnQ+KGNoaWxkKSkKKyAg
ICAgICAgICAgIGVsZW1lbnRzVGhhdERpZE5vdFJlY2VpdmVMYXlvdXQuYWRkKCZkb3duY2FzdDxS
ZW5kZXJFbGVtZW50PihjaGlsZCkpOwogCi0gICAgICAgIEFTU0VSVCghY2hpbGQtPm5lZWRzTGF5
b3V0KCkpOworICAgICAgICBBU1NFUlQoIWNoaWxkLm5lZWRzTGF5b3V0KCkpOwogICAgIH0KIAog
ICAgIGlmICghbGF5b3V0U2l6ZUNoYW5nZWQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNw
cAppbmRleCAxNmUyN2NjMWY4MTc5YmZlYjk3MWUyZTQwNzZlZThkNDk4OGExN2EwLi44YmRlM2U0
OWI4MDg4ZmU3ZTFhMDQ0NzcxZTI0YWM3Y2JmNjk3YTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1
aWxkZXIuY3BwCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmgiCiAKKyNpbmNsdWRlICJSZW5kZXJD
aGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHSW5saW5lVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKQEAgLTk4
LDE2ICs5OSwxNiBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlcjo6Y29sbGVj
dFRleHRQb3NpdGlvbmluZ0VsZW1lbnRzKFJlbmRlckJveE1vZAogewogICAgIEFTU0VSVCghaXM8
UmVuZGVyU1ZHVGV4dD4oc3RhcnQpIHx8IG1fdGV4dFBvc2l0aW9ucy5pc0VtcHR5KCkpOwogCi0g
ICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gc3RhcnQuZmlyc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoaXM8UmVuZGVyU1ZH
SW5saW5lVGV4dD4oKmNoaWxkKSkgewotICAgICAgICAgICAgcHJvY2Vzc1JlbmRlclNWR0lubGlu
ZVRleHQoZG93bmNhc3Q8UmVuZGVyU1ZHSW5saW5lVGV4dD4oKmNoaWxkKSwgbV90ZXh0TGVuZ3Ro
LCBsYXN0Q2hhcmFjdGVyV2FzU3BhY2UpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJl
bk9mVHlwZTxSZW5kZXJPYmplY3Q+KHN0YXJ0KSkgeworICAgICAgICBpZiAoaXM8UmVuZGVyU1ZH
SW5saW5lVGV4dD4oY2hpbGQpKSB7CisgICAgICAgICAgICBwcm9jZXNzUmVuZGVyU1ZHSW5saW5l
VGV4dChkb3duY2FzdDxSZW5kZXJTVkdJbmxpbmVUZXh0PihjaGlsZCksIG1fdGV4dExlbmd0aCwg
bGFzdENoYXJhY3Rlcldhc1NwYWNlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKCFpczxSZW5kZXJTVkdJbmxpbmU+KCpjaGlsZCkpCisgICAgICAgIGlm
ICghaXM8UmVuZGVyU1ZHSW5saW5lPihjaGlsZCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBSZW5kZXJTVkdJbmxpbmUmIGlubGluZUNoaWxkID0gZG93bmNhc3Q8UmVuZGVyU1ZH
SW5saW5lPigqY2hpbGQpOworICAgICAgICBhdXRvJiBpbmxpbmVDaGlsZCA9IGRvd25jYXN0PFJl
bmRlclNWR0lubGluZT4oY2hpbGQpOwogICAgICAgICBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50
KiBlbGVtZW50ID0gU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6ZWxlbWVudEZyb21SZW5kZXJl
cihpbmxpbmVDaGlsZCk7CiAKICAgICAgICAgdW5zaWduZWQgYXRQb3NpdGlvbiA9IG1fdGV4dFBv
c2l0aW9ucy5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKaW5kZXggYmYzZWVhNmI3ZGQxZWYxZTI1MGU1YjYw
ZmVjMDQ1OWEwMmNkN2I4Ni4uYmIyNTkzZDM4YmQ2YzgyMWE0MzRiNWE4NDUxMzhlNzJmODhkNGMz
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmlj
c0J1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1l
dHJpY3NCdWlsZGVyLmNwcApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlNWR1RleHRNZXRyaWNzQnVpbGRlci5oIgogCisjaW5jbHVkZSAiUmVuZGVyQ2hp
bGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZS5oIgogI2luY2x1ZGUgIlJl
bmRlclNWR0lubGluZVRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCkBAIC0xNzEs
OSArMTcyLDkgQEAgdm9pZCBTVkdUZXh0TWV0cmljc0J1aWxkZXI6Om1lYXN1cmVUZXh0UmVuZGVy
ZXIoUmVuZGVyU1ZHSW5saW5lVGV4dCYgdGV4dCwgTWVhc3UKIAogdm9pZCBTVkdUZXh0TWV0cmlj
c0J1aWxkZXI6OndhbGtUcmVlKFJlbmRlckVsZW1lbnQmIHN0YXJ0LCBSZW5kZXJTVkdJbmxpbmVU
ZXh0KiBzdG9wQXRMZWFmLCBNZWFzdXJlVGV4dERhdGEqIGRhdGEpCiB7Ci0gICAgZm9yIChhdXRv
KiBjaGlsZCA9IHN0YXJ0LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGlzPFJlbmRlclNWR0lubGluZVRleHQ+KCpjaGlsZCkp
IHsKLSAgICAgICAgICAgIFJlbmRlclNWR0lubGluZVRleHQmIHRleHQgPSBkb3duY2FzdDxSZW5k
ZXJTVkdJbmxpbmVUZXh0PigqY2hpbGQpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJl
bk9mVHlwZTxSZW5kZXJPYmplY3Q+KHN0YXJ0KSkgeworICAgICAgICBpZiAoaXM8UmVuZGVyU1ZH
SW5saW5lVGV4dD4oY2hpbGQpKSB7CisgICAgICAgICAgICBhdXRvJiB0ZXh0ID0gZG93bmNhc3Q8
UmVuZGVyU1ZHSW5saW5lVGV4dD4oY2hpbGQpOwogICAgICAgICAgICAgaWYgKHN0b3BBdExlYWYg
JiYgc3RvcEF0TGVhZiAhPSAmdGV4dCkgewogICAgICAgICAgICAgICAgIGRhdGEtPnByb2Nlc3NS
ZW5kZXJlciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIG1lYXN1cmVUZXh0UmVuZGVyZXIodGV4
dCwgZGF0YSk7CkBAIC0xODgsMTAgKzE4OSwxMCBAQCB2b2lkIFNWR1RleHRNZXRyaWNzQnVpbGRl
cjo6d2Fsa1RyZWUoUmVuZGVyRWxlbWVudCYgc3RhcnQsIFJlbmRlclNWR0lubGluZVRleHQqCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghaXM8UmVuZGVy
U1ZHSW5saW5lPigqY2hpbGQpKQorICAgICAgICBpZiAoIWlzPFJlbmRlclNWR0lubGluZT4oY2hp
bGQpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgd2Fsa1RyZWUoZG93bmNhc3Q8
UmVuZGVyU1ZHSW5saW5lPigqY2hpbGQpLCBzdG9wQXRMZWFmLCBkYXRhKTsKKyAgICAgICAgd2Fs
a1RyZWUoZG93bmNhc3Q8UmVuZGVyU1ZHSW5saW5lPihjaGlsZCksIHN0b3BBdExlYWYsIGRhdGEp
OwogICAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279185</attachid>
            <date>2016-05-17 16:54:29 -0700</date>
            <delta_ts>2016-05-17 16:55:26 -0700</delta_ts>
            <desc>Fix Darin&apos;s findings</desc>
            <filename>157811_darin_comments.patch</filename>
            <type>text/plain</type>
            <size>2185</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwYjBkMjllLi5kZWNjNGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMTYtMDUtMTcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAg
ICBVbnJldmlld2VkLCBmaXggRGFyaW4ncyBwb3N0LW1vcnRlbSByZXZpZXcgY29tbWVudHMuCisK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmllbGRzZXQ6OmZpbmRMZWdlbmQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0
OjpsYXlvdXRDaGlsZHJlbik6CisKIDIwMTYtMDUtMTcgIEJldGggRGFraW4gIDxiZGFraW5AYXBw
bGUuY29tPgogCiAgICAgICAgIE1ha2UgaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUgYSBwdWJsaWMg
ZnVuY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVs
ZHNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCmlu
ZGV4IDQyMGMxYWQuLjY2ZTIxY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGaWVsZHNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZpZWxkc2V0LmNwcApAQCAtMTI3LDEyICsxMjcsMTIgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJG
aWVsZHNldDo6bGF5b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQoYm9vbCByZWxheW91dENoaWxkcmVu
KQogCiBSZW5kZXJCb3gqIFJlbmRlckZpZWxkc2V0OjpmaW5kTGVnZW5kKEZpbmRMZWdlbmRPcHRp
b24gb3B0aW9uKQogewotICAgIGZvciAoYXV0byYgbGVnZW5kIDogY2hpbGRyZW5PZlR5cGU8UmVu
ZGVyRWxlbWVudD4oKnRoaXMpKSB7CisgICAgZm9yIChhdXRvJiBsZWdlbmQgOiBjaGlsZHJlbk9m
VHlwZTxSZW5kZXJCb3g+KCp0aGlzKSkgewogICAgICAgICBpZiAob3B0aW9uID09IElnbm9yZUZs
b2F0aW5nT3JPdXRPZkZsb3cgJiYgbGVnZW5kLmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9u
ZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgaWYgKGlzPEhU
TUxMZWdlbmRFbGVtZW50PihsZWdlbmQuZWxlbWVudCgpKSkKLSAgICAgICAgICAgIHJldHVybiAm
ZG93bmNhc3Q8UmVuZGVyQm94PihsZWdlbmQpOworICAgICAgICAgICAgcmV0dXJuICZsZWdlbmQ7
CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKaW5kZXggZGRiZGJlMy4uNWIyNWEzNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQu
Y3BwCkBAIC0yNjYsNyArMjY2LDcgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGls
ZHJlbihSZW5kZXJFbGVtZW50JiBzdGFydCwgYm9vbCBzZWxmTmVlZHNMYXlvdXQKICAgICAgICAg
ICAgIG5lZWRzTGF5b3V0ID0gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChsYXlvdXRT
aXplQ2hhbmdlZCAmJiBpczxTVkdFbGVtZW50PihjaGlsZC5ub2RlKCkpKSB7CisgICAgICAgIGlm
IChsYXlvdXRTaXplQ2hhbmdlZCAmJiBpczxTVkdFbGVtZW50PigqY2hpbGQubm9kZSgpKSkgewog
ICAgICAgICAgICAgLy8gV2hlbiBzZWxmTmVlZHNMYXlvdXQgaXMgZmFsc2UgYW5kIHRoZSBsYXlv
dXQgc2l6ZSBjaGFuZ2VkLCB3ZSBoYXZlIHRvIGNoZWNrIHdoZXRoZXIgdGhpcyBjaGlsZCB1c2Vz
IHJlbGF0aXZlIGxlbmd0aHMKICAgICAgICAgICAgIGF1dG8mIGVsZW1lbnQgPSBkb3duY2FzdDxT
VkdFbGVtZW50PigqY2hpbGQubm9kZSgpKTsKICAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc1Jl
bGF0aXZlTGVuZ3RocygpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279187</attachid>
            <date>2016-05-17 16:55:26 -0700</date>
            <delta_ts>2016-05-17 18:25:13 -0700</delta_ts>
            <desc>Fix Darin&apos;s findings</desc>
            <filename>157811_darin_comments.patch</filename>
            <type>text/plain</type>
            <size>2197</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwYjBkMjllLi4wMmFiYTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMTYtMDUtMTcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAg
ICBVbnJldmlld2VkLCBmaXggRGFyaW4ncyBwb3N0LW1vcnRlbSByZXZpZXcgY29tbWVudHMgZm9y
IHIyMDEwNTIuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRmllbGRzZXQ6OmZpbmRMZWdlbmQpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdS
ZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbik6CisKIDIwMTYtMDUtMTcgIEJldGggRGFraW4g
IDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgaGFuZGxlQWNjZXB0ZWRDYW5kaWRh
dGUgYSBwdWJsaWMgZnVuY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGaWVsZHNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmll
bGRzZXQuY3BwCmluZGV4IDQyMGMxYWQuLjY2ZTIxY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcApAQCAtMTI3LDEyICsxMjcsMTIgQEAgUmVuZGVyT2Jq
ZWN0KiBSZW5kZXJGaWVsZHNldDo6bGF5b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQoYm9vbCByZWxh
eW91dENoaWxkcmVuKQogCiBSZW5kZXJCb3gqIFJlbmRlckZpZWxkc2V0OjpmaW5kTGVnZW5kKEZp
bmRMZWdlbmRPcHRpb24gb3B0aW9uKQogewotICAgIGZvciAoYXV0byYgbGVnZW5kIDogY2hpbGRy
ZW5PZlR5cGU8UmVuZGVyRWxlbWVudD4oKnRoaXMpKSB7CisgICAgZm9yIChhdXRvJiBsZWdlbmQg
OiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJCb3g+KCp0aGlzKSkgewogICAgICAgICBpZiAob3B0aW9u
ID09IElnbm9yZUZsb2F0aW5nT3JPdXRPZkZsb3cgJiYgbGVnZW5kLmlzRmxvYXRpbmdPck91dE9m
Rmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAg
ICAgaWYgKGlzPEhUTUxMZWdlbmRFbGVtZW50PihsZWdlbmQuZWxlbWVudCgpKSkKLSAgICAgICAg
ICAgIHJldHVybiAmZG93bmNhc3Q8UmVuZGVyQm94PihsZWdlbmQpOworICAgICAgICAgICAgcmV0
dXJuICZsZWdlbmQ7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKaW5kZXggZGRiZGJl
My4uNWIyNWEzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclN1cHBvcnQuY3BwCkBAIC0yNjYsNyArMjY2LDcgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0
OjpsYXlvdXRDaGlsZHJlbihSZW5kZXJFbGVtZW50JiBzdGFydCwgYm9vbCBzZWxmTmVlZHNMYXlv
dXQKICAgICAgICAgICAgIG5lZWRzTGF5b3V0ID0gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAg
IGlmIChsYXlvdXRTaXplQ2hhbmdlZCAmJiBpczxTVkdFbGVtZW50PihjaGlsZC5ub2RlKCkpKSB7
CisgICAgICAgIGlmIChsYXlvdXRTaXplQ2hhbmdlZCAmJiBpczxTVkdFbGVtZW50PigqY2hpbGQu
bm9kZSgpKSkgewogICAgICAgICAgICAgLy8gV2hlbiBzZWxmTmVlZHNMYXlvdXQgaXMgZmFsc2Ug
YW5kIHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkLCB3ZSBoYXZlIHRvIGNoZWNrIHdoZXRoZXIgdGhp
cyBjaGlsZCB1c2VzIHJlbGF0aXZlIGxlbmd0aHMKICAgICAgICAgICAgIGF1dG8mIGVsZW1lbnQg
PSBkb3duY2FzdDxTVkdFbGVtZW50PigqY2hpbGQubm9kZSgpKTsKICAgICAgICAgICAgIGlmIChl
bGVtZW50Lmhhc1JlbGF0aXZlTGVuZ3RocygpKSB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>