<?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>12794</bug_id>
          
          <creation_ts>2007-02-16 13:57:07 -0800</creation_ts>
          <short_desc>REGRESSION: TripTik planner at aaa.com never finishes loading due to unclosed canvas tag</short_desc>
          <delta_ts>2007-03-13 16:33:27 -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>DOM</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.aaa.com</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction, InRadar, Regression</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Pride">simon.pride</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>22992</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Pride">simon.pride</who>
    <bug_when>2007-02-16 13:57:07 -0800</bug_when>
    <thetext>Using the interactive TripTik planner, the applet in the left frame never finishes loading. Works fine in release Safari 2.0.4.

Sample URL (contains session ID cruft):
http://ww1.aaa.com/scripts/WebObjects.dll/AAAOnline.woa/4014/wo/VULCxz1Spe682RojJvOSHw/0.9.13.8.3.0.1.2.2.1.1.0.1.1.0.0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22941</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-02-16 22:54:08 -0800</bug_when>
    <thetext>Confirmed as a regression. There is a &quot;maximum call stack exceeded&quot; error in the console.

Steps to reproduce:
1. Open http://www.aaa.com
2. Enter some U.S. zip code (such as 95014)
3. Click &quot;TripTik(R) Travel Planner&quot; link under Maps &amp; Directions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21886</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-02-23 14:08:16 -0800</bug_when>
    <thetext>The &quot;maximum call stack exceeded&quot; error is red herring - it is caused by unreliable error logging code. The actual problem appears to be a result of an unclosed &lt;canvas&gt; tag:

...
&lt;canvas ID=&quot;dRouteCanvas&quot; width=2000 height=2000 /&gt;
&lt;/DIV&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21887</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-02-23 14:09:40 -0800</bug_when>
    <thetext>Does this fail with Firefox too? I ask because I believe Firefox would also consider this an unclosed &lt;canvas&gt; tag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21888</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Pride">simon.pride</who>
    <bug_when>2007-02-23 14:23:39 -0800</bug_when>
    <thetext>&gt; Does this fail with Firefox too? I ask because I believe Firefox would also
consider this an unclosed &lt;canvas&gt; tag.

No, it works fine in the current version of Firefox (2.0.0.1 on PowerPC). </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21883</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-02-23 14:32:43 -0800</bug_when>
    <thetext>We should figure out why WebKit&apos;s rule doesn&apos;t match Firefox&apos;s. Why does it close the canvas element? Is it the /&gt; at the end of the element? Is it the subsequent &lt;/div&gt; or some other markup? Or what?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21880</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Pride">simon.pride</who>
    <bug_when>2007-02-23 14:40:57 -0800</bug_when>
    <thetext>Is it naive to ask why Safari 2.0.4 with its Tiger 10.4.8 version of WebKit (419.3?) handles it OK? </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21878</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-02-23 14:50:21 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Is it naive to ask why Safari 2.0.4 with its Tiger 10.4.8 version of WebKit
&gt; (419.3?) handles it OK? 

In Tiger WebKit, &lt;canvas&gt; is a standalone element like &lt;img&gt;, and so there&apos;s no such things as an &quot;open&quot; canvas element.

TOT WebKit has changed to match other browsers and the WhatWG draft specification, and thus you have to close the &lt;canvas&gt; element with a separate &lt;/canvas&gt; in HTML documents. Firefox matches TOT WebKit in this regard, but somehow the site is still working. That&apos;s what we have to figure out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21855</commentid>
    <comment_count>8</comment_count>
      <attachid>13358</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-02-24 00:33:05 -0800</bug_when>
    <thetext>Created attachment 13358
test case

&gt; We should figure out why WebKit&apos;s rule doesn&apos;t match Firefox&apos;s. Why does it
&gt; close the canvas element? Is it the /&gt; at the end of the element? Is it the
&gt; subsequent &lt;/div&gt; or some other markup? Or what?

Looks like it&apos;s a &lt;div&gt; &lt;/div&gt; pair around the canvas - the closing div alone isn&apos;t enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21002</commentid>
    <comment_count>9</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-02-27 19:34:15 -0800</bug_when>
    <thetext>&lt;rdar://problem/5028154&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19672</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-10 08:06:11 -0800</bug_when>
    <thetext>I tested Firefox with other tags;

    title, style, iframe, noembed, noframes, noscript

Only canvas had the special behavior, where the &lt;/div&gt; closed the element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19673</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-10 08:07:31 -0800</bug_when>
    <thetext>Also, I tested with multiple elements, and it only worked if the element closed was the one opened just before the canvas. I&apos;m guessing this is a canvas-specific quirk in Firefox.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19674</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-10 08:12:41 -0800</bug_when>
    <thetext>A &lt;/p&gt; works, as does &lt;/div&gt;, but not &lt;/a&gt;, &lt;/b&gt;, or &lt;/form&gt;.

And the element doesn&apos;t have to be the closest enclosing one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19675</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-10 08:14:34 -0800</bug_when>
    <thetext>My mistake. Closing any open element seems to work. My experiments with &lt;a&gt; and &lt;b&gt; were presumably in cases where those elements were closed already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19676</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-10 08:29:29 -0800</bug_when>
    <thetext>Seems that the Gecko HTML parser classifies canvas as a &quot;special&quot;.

    http://lxr.mozilla.org/seamonkey/source/parser/htmlparser/src/nsElementTable.cpp

And that file contains all sorts of rules for closing. I&apos;m still not sure how to modify our parser to have similar behavior in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19678</commentid>
    <comment_count>15</comment_count>
      <attachid>13577</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-10 10:10:03 -0800</bug_when>
    <thetext>Created attachment 13577
patch with change log and test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19639</commentid>
    <comment_count>16</comment_count>
      <attachid>13577</attachid>
    <who name="">mitz</who>
    <bug_when>2007-03-10 11:27:58 -0800</bug_when>
    <thetext>Comment on attachment 13577
patch with change log and test case

This sentence is not quite right: &quot;Changed the Document parameter to the constructor to instead of HTMLDocument&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19264</commentid>
    <comment_count>17</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-03-12 17:47:43 -0700</bug_when>
    <thetext>Some comments I noticed before deciding to question the approach:

1) I&apos;d like to see more tests for cases that should or should not close the
canvas.

2) The correct spelling is &quot;well-formed&quot;, not &quot;wellformed&quot; or &quot;well formed&quot;.

And, finally, &lt;canvas&gt; should not skip parsing its contents - it should just
prevent them from rendering only. That appears to be what Firefox does. One
special case to consider is a &lt;script&gt; inside &lt;canvas&gt;, Firefox appears to
execute it:

&lt;canvas&gt;
&lt;b&gt;fallback&lt;/b&gt;
&lt;script&gt;
alert(&apos;x&apos;);
&lt;/script&gt;
&lt;/canvas&gt;
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19265</commentid>
    <comment_count>18</comment_count>
      <attachid>13577</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-03-12 17:50:47 -0700</bug_when>
    <thetext>Comment on attachment 13577
patch with change log and test case

r-</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19129</commentid>
    <comment_count>19</comment_count>
      <attachid>13611</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-13 08:58:15 -0700</bug_when>
    <thetext>Created attachment 13611
revised patch, with change log and regression tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19016</commentid>
    <comment_count>20</comment_count>
      <attachid>13611</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-03-13 16:08:24 -0700</bug_when>
    <thetext>Comment on attachment 13611
revised patch, with change log and regression tests

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18827</commentid>
    <comment_count>21</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-13 16:33:27 -0700</bug_when>
    <thetext>Committed revision 20170. &lt;http://trac.webkit.org/projects/webkit/changeset/20170&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>13358</attachid>
            <date>2007-02-24 00:33:05 -0800</date>
            <delta_ts>2007-02-24 00:33:05 -0800</delta_ts>
            <desc>test case</desc>
            <filename>unclosed-canvas.html</filename>
            <type>text/html</type>
            <size>87</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">PGJvZHk+CjxkaXY+CjxjYW52YXMgd2lkdGg9MjAgaGVpZ2h0PTIwPgo8L2Rpdj4KPHA+VGhpcyBz
aG91bGQgYmUgdmlzaWJsZS48L3A+CjwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13577</attachid>
            <date>2007-03-10 10:10:03 -0800</date>
            <delta_ts>2007-03-13 08:58:15 -0700</delta_ts>
            <desc>patch with change log and test case</desc>
            <filename>UnclosedCanvasPatch.txt</filename>
            <type>text/plain</type>
            <size>37755</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIwMDk2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDctMDMtMTAgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIC0gdGVzdCBmb3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI3OTQKKyAgICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTAyODE1ND4gUkVHUkVTU0lPTjogVHJp
cFRpayBwbGFubmVyIGF0IGFhYS5jb20KKyAgICAgICAgICBuZXZlciBmaW5pc2hlcyBsb2FkaW5n
ICgxMjc5NCkKKworICAgICAgICAqIGZhc3QvcGFyc2VyL3VuY2xvc2VkLWNhbnZhcy1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvcGFyc2VyL3VuY2xvc2VkLWNhbnZhcy5odG1s
OiBBZGRlZC4KKwogMjAwNy0wMy0wOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgSnVzdGluLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9wYXJz
ZXIvdW5jbG9zZWQtY2FudmFzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3BhcnNlci91bmNsb3NlZC1jYW52YXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9wYXJzZXIvdW5jbG9zZWQtY2FudmFzLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACitUaGlzIHRleHQgc2hvdWxkIGJlIHZpc2libGUs
IGV2ZW4gdGhvdWdoIGl0J3MgcHJlY2VkZWQgYnkgYW4gdW5jbG9zZWQgY2FudmFzIHRhZywgYmVj
YXVzZSBvZiB0aGUgPC9kaXY+IHRoYXQgY2xvc2VzIGFuIGVsZW1lbnQgb3BlbmVkIGJlZm9yZSB0
aGUgY2FudmFzLgorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L3BhcnNl
ci91bmNsb3NlZC1jYW52YXMtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1z
dHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvcGFyc2VyL3VuY2xvc2Vk
LWNhbnZhcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvcGFyc2VyL3VuY2xv
c2VkLWNhbnZhcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9wYXJzZXIv
dW5jbG9zZWQtY2FudmFzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKKzxoZWFk
PgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxkaXY+PGNhbnZhcyBoZWlnaHQ9IjAiPjwvZGl2PgorPGRpdj5UaGlzIHRleHQgc2hvdWxkIGJl
IHZpc2libGUsIGV2ZW4gdGhvdWdoIGl0J3MgcHJlY2VkZWQgYnkgYW4gdW5jbG9zZWQgY2FudmFz
IHRhZywgYmVjYXVzZSBvZiB0aGUgJmx0Oy9kaXYmZ3Q7IHRoYXQgY2xvc2VzIGFuIGVsZW1lbnQg
b3BlbmVkIGJlZm9yZSB0aGUgY2FudmFzLjwvZGl2PgorPC9ib2R5PgoKUHJvcGVydHkgY2hhbmdl
cyBvbjogTGF5b3V0VGVzdHMvZmFzdC9wYXJzZXIvdW5jbG9zZWQtY2FudmFzLmh0bWwKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9odG1sCk5hbWU6IHN2bjplb2wtc3R5
bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAwOTYpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDA3LTAzLTEwICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAtIGZpeCBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Mjc5NAorICAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MDI4MTU0PiBSRUdSRVNTSU9OOiBUcmlw
VGlrIHBsYW5uZXIgYXQgYWFhLmNvbQorICAgICAgICAgIG5ldmVyIGZpbmlzaGVzIGxvYWRpbmcg
KDEyNzk0KQorCisgICAgICAgIFRlc3Q6IGZhc3QvcGFyc2VyL3VuY2xvc2VkLWNhbnZhcy5odG1s
CisKKyAgICAgICAgQWRkZWQgYSBmZWF0dXJlIHRvIHRoZSBIVE1MIHBhcnNlciB3aGVyZSBhIGNs
b3NlIHRhZyBpbiBhIGNhbnZhcyBiZWZvcmUgYW55CisgICAgICAgIG9wZW4gdGFncyB3aWxsIGNs
b3NlIHRoZSBjYW52YXMgaWYgaXQgbWF0Y2hlcyBhbiBvcGVuIHRhZyBmcm9tIGJlZm9yZSB0aGUK
KyAgICAgICAgY2FudmFzLiBBbHNvIGRpZCBzb21lIGJhc2ljIGNsZWFudXAgaW4gdGhlIHBhcnNl
ci4KKworICAgICAgICAqIGh0bWwvSFRNTFBhcnNlci5oOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1
ZGVzLiBNYXJrZWQgSFRNTFBhcnNlciBhcworICAgICAgICBOb25jb3B5YWJsZS4gQ2hhbmdlZCB0
aGUgRG9jdW1lbnQgcGFyYW1ldGVyIHRvIHRoZSBjb25zdHJ1Y3RvciB0byBpbnN0ZWFkCisgICAg
ICAgIG9mIEhUTUxEb2N1bWVudC4gUmVuYW1lZCBkaXNjYXJkX3VudGlsIHRvIG1fc2tpcE1vZGVU
YWcuIFJlbW92ZWQgdW51c2VkCisgICAgICAgIG5vU3BhY2VzIGZ1bmN0aW9uIGFuZCB1bm5lZWRl
ZCBwdWJsaWMgZG9jKCkgZnVuY3Rpb24uIE1vdmVkIGRhdGEgbWVtYmVycworICAgICAgICBhbGwg
ZG93biB0byB0aGUgZW5kIHNvIHlvdSBjYW4gc2VlIHRoZW0gdG9nZXRoZXIgaW4gb3JkZXIuIEFk
ZGVkIHRhZ0lzT25TdGFjaworICAgICAgICBmdW5jdGlvbi4gUmVuYW1lZCBtYXAgdG8gbV9jdXJy
ZW50TWFwRWxlbWVudCBhbmQgaXNpbmRleCB0byBtX2lzaW5kZXhFbGVtZW50LgorICAgICAgICBS
ZW1vdmVkIHVudXNlZCBlbmQgYW5kIGhlYWRMb2FkZWQgZGF0YSBtZW1iZXJzLiBBZGRlZCBtX2lu
Q2FudmFzQmVmb3JlRmlyc3RPcGVuVGFnCisgICAgICAgIGRhdGEgbWVtYmVyLiBSZW5hbWVkIG1f
ZnJhbWVudCB0byBtX3BhcnNpbmdGcmFnbWVudC4KKworICAgICAgICAqIGh0bWwvSFRNTFBhcnNl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjpIVE1MUGFyc2VyKTogQ2hhbmdl
ZCB0byB1c2UgbWVtYmVyIGNvbnN0cnVjdGlvbgorICAgICAgICBzeW50YXggaW5zdGVhZCBvZiBj
YWxsaW5nIHJlc2V0KCkuIFRoaXMgaXMgZXNwZWNpYWxseSBoZWxwZnVsIGluIHRoZQorICAgICAg
ICBmcmFnbWVudCBjYXNlLCB3aGVyZSBjYWxsaW5nIHJlc2V0KCkgbGF0ZXIgb24gaXMgaWxsZWdh
bCwgc28gbm90IHVzaW5nCisgICAgICAgIGl0IGluIHRoZSBjb25zdHJ1Y3RvciBsZXRzIHVzIGFz
c2VydC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6On5IVE1MUGFyc2VyKTogRGlkIGFu
IGV4cGxpY2l0IGRlcmVmIGluc3RlYWQgb2YKKyAgICAgICAgY2FsbGluZyBzZXRDdXJyZW50IGZv
ciBpdHMgc2lkZSBlZmZlY3QuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjpyZXNldCk6
IFVwZGF0ZWQgZm9yIG1lbWJlciBuYW1lIGNoYW5nZXMgYW5kIHJlbW92YWwKKyAgICAgICAgYW5k
IHRvIHVzZSBkb2N1bWVudCBpbnN0ZWFkIG9mIGRvYygpLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFBhcnNlcjo6c2V0Q3VycmVudCk6IFVzZSBkb2N1bWVudCBpbnN0ZWFkIG9mIGRvYygpLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6c2V0U2tpcE1vZGUpOiBBZGRlZC4gTm8gbG9uZ2Vy
IGlubGluZS4gTm93IHNldHMgdGhlCisgICAgICAgIG1faW5DYW52YXNCZWZvcmVGaXJzdE9wZW5U
YWcgZGF0YSBtZW1iZXIgdG8gZmFsc2UuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjpw
YXJzZVRva2VuKTogUmV3b3JrZWQgdGhlIHNraXAgbW9kZSBsb2dpYyBhdCB0aGUgdG9wCisgICAg
ICAgIG9mIHRoZSBmdW5jdGlvbiB0byBzdXBwb3J0IG1faW5DYW52YXNCZWZvcmVGaXJzdE9wZW5U
YWcgd2l0aG91dCBhZGRpbmcKKyAgICAgICAgbXVjaCBvdmVyaGVhZC4gVXBkYXRlZCBmb3IgcmVu
YW1pbmcgYW5kIGRvYygpLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6aW5zZXJ0Tm9k
ZSk6IFVwZGF0ZWQgZm9yIHJlbmFtaW5nIGFuZCBkb2MoKS4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxQYXJzZXI6OmhhbmRsZUVycm9yKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFy
c2VyOjpmcmFtZXNldENyZWF0ZUVycm9yQ2hlY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxQYXJzZXI6OmlzaW5kZXhDcmVhdGVFcnJvckNoZWNrKTogQ2hhbmdlZCB0byB1c2UgUmVm
UHRyLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6bm9zY3JpcHRDcmVhdGVFcnJvckNo
ZWNrKTogVXBkYXRlZCBmb3IgcmVuYW1pbmcgYW5kIGRvYygpLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFBhcnNlcjo6bWFwQ3JlYXRlRXJyb3JDaGVjayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFBhcnNlcjo6Y2FudmFzQ3JlYXRlRXJyb3JDaGVjayk6IFNldCBtX2luQ2FudmFzQmVm
b3JlRmlyc3RPcGVuVGFnCisgICAgICAgIGFmdGVyIHNldHRpbmcgc2tpcCBtb2RlLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6Z2V0Tm9kZSk6IFVwZGF0ZWQgZm9yIHJlbmFtaW5nIGFu
ZCBkb2MoKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OmFsbG93TmVzdGVkUmVkdW5k
YW50VGFnKTogQ2hhbmdlZCAjZGVmaW5lIGludG8gYSBDKysKKyAgICAgICAgY29uc3RhbnQuCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjpwcm9jZXNzQ2xvc2VUYWcpOiBVcGRhdGVkIGZv
ciByZW5hbWluZyBhbmQgZG9jKCkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjppc0lu
bGluZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6dGFnSXNPblN0YWNr
KTogQWRkZWQuIFVzZWQgYnkgbmV3IGNhbnZhcyBsb2dpYy4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxQYXJzZXI6OnBvcEJsb2NrKTogVXBkYXRlZCBmb3IgcmVuYW1pbmcgYW5kIGRvYygpLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6Y3JlYXRlSGVhZCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFBhcnNlcjo6aGFuZGxlSXNpbmRleCk6IENoYW5nZWQgdG8gdXNlIFJlZlB0
ci4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OnN0YXJ0Qm9keSk6IFVwZGF0ZWQgZm9y
IHJlbmFtaW5nIGFuZCBkb2MoKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OmZpbmlz
aGVkKTogRGl0dG8uCisKIDIwMDctMDMtMDkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEp1c3Rpbi4KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5jcHAJKHJl
dmlzaW9uIDIwMDkxKQorKysgV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDExICsxLDkgQEAKIC8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBsaWJyYXJpZXMKLQogICAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJ0aW4gSm9uZXMgKG1qb25l
c0BrZGUub3JnKQogICAgICAgICAgICAgICAoQykgMTk5NyBUb3JiZW4gV2VpcyAod2Vpc0BrZGUu
b3JnKQogICAgICAgICAgICAgICAoQykgMTk5OSwyMDAxIExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCiAgICAgICAgICAgICAgIChDKSAyMDAwLDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzQsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxETGlzdEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MRWxlbWVudEZhY3RvcnkuaCIKQEAgLTU2LDEzICs1NSw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotLyoqCi0g
KiBAaW50ZXJuYWwKLSAqLworY29uc3QgaW50IG1heFJlZHVuZGFudFRhZ0RlcHRoID0gMjA7CiAK
LWNsYXNzIEhUTUxTdGFja0VsZW0KLXsKLXB1YmxpYzoKK3N0cnVjdCBIVE1MU3RhY2tFbGVtIDog
Tm9uY29weWFibGUgewogICAgIEhUTUxTdGFja0VsZW0oY29uc3QgQXRvbWljU3RyaW5nJiB0LCBp
bnQgbHZsLCBOb2RlKiBuLCBib29sIHIsIEhUTUxTdGFja0VsZW0qIG54KQogICAgICAgICA6IHRh
Z05hbWUodCkKICAgICAgICAgLCBsZXZlbChsdmwpCkBAIC04OCw2MCArODMsNzcgQEAgcHVibGlj
OgogfTsKIAogLyoqCi0gKiBAaW50ZXJuYWwKLSAqCiAgKiBUaGUgcGFyc2VyIHBhcnNlcyB0b2tl
bml6ZWQgaW5wdXQgaW50byB0aGUgZG9jdW1lbnQsIGJ1aWxkaW5nIHVwIHRoZQotICogZG9jdW1l
bnQgdHJlZS4gSWYgdGhlIGRvY3VtZW50IGlzIHdlbGxmb3JtZWQsIHBhcnNpbmcgaXQgaXMKLSAq
IHN0cmFpZ2h0Zm9yd2FyZC4KLSAqIFVuZm9ydHVuYXRlbHksIHBlb3BsZSBjYW4ndCB3cml0ZSB3
ZWxsZm9ybWVkIEhUTUwgZG9jdW1lbnRzLCBzbyB0aGUgcGFyc2VyCi0gKiBoYXMgdG8gYmUgdG9s
ZXJhbnQgYWJvdXQgZXJyb3JzLgorICogZG9jdW1lbnQgdHJlZS4gSWYgdGhlIGRvY3VtZW50IGlz
IHdlbGwgZm9ybWVkLCBwYXJzaW5nIGl0IGlzIHN0cmFpZ2h0Zm9yd2FyZC4KKyAqCisgKiBVbmZv
cnR1bmF0ZWx5LCB3ZSBoYXZlIHRvIGhhbmRsZSBtYW55IEhUTUwgZG9jdW1lbnRzIHRoYXQgYXJl
IG5vdCB3ZWxsIGZvcm1lZCwKKyAqIHNvIHRoZSBwYXJzZXIgaGFzIHRvIGJlIHRvbGVyYW50IGFi
b3V0IGVycm9ycy4KKyAqCisgKiBXZSBoYXZlIHRvIHRha2UgY2FyZSBvZiBhdCBsZWFzdCB0aGUg
Zm9sbG93aW5nIGVycm9yIGNvbmRpdGlvbnM6CiAgKgotICogV2UgaGF2ZSB0byB0YWtlIGNhcmUg
b2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb25kaXRpb25zOgogICogMS4gVGhlIGVsZW1lbnQgYmVp
bmcgYWRkZWQgaXMgZXhwbGljaXRseSBmb3JiaWRkZW4gaW5zaWRlIHNvbWUgb3V0ZXIgdGFnLgog
ICogICAgSW4gdGhpcyBjYXNlIHdlIHNob3VsZCBjbG9zZSBhbGwgdGFncyB1cCB0byB0aGUgb25l
LCB3aGljaCBmb3JiaWRzCiAgKiAgICB0aGUgZWxlbWVudCwgYW5kIGFkZCBpdCBhZnRlcndhcmRz
LgotICogMi4gV2UgYXJlIG5vdCBhbGxvd2VkIHRvIGFkZCB0aGUgZWxlbWVudCBkaXJlY3RseS4g
SXQgY291bGQgYmUsIHRoYXQKLSAqICAgIHRoZSBwZXJzb24gd3JpdGluZyB0aGUgZG9jdW1lbnQg
Zm9yZ290IHNvbWUgdGFnIGluYmV0d2VlbiAob3IgdGhhdCB0aGUKLSAqICAgIHRhZyBpbmJldHdl
ZW4gaXMgb3B0aW9uYWwuLi4pIFRoaXMgY291bGQgYmUgdGhlIGNhc2Ugd2l0aCB0aGUgZm9sbG93
aW5nCi0gKiAgICB0YWdzOiBIVE1MIEhFQUQgQk9EWSBUQk9EWSBUUiBURCBMSSAoZGlkIEkgZm9y
Z2V0IGFueT8pCi0gKiAzLiBXZSB3YW4ndCB0byBhZGQgYSBibG9jayBlbGVtZW50IGluc2lkZSB0
byBhbiBpbmxpbmUgZWxlbWVudC4gQ2xvc2UgYWxsCisgKgorICogMi4gV2UgYXJlIG5vdCBhbGxv
d2VkIHRvIGFkZCB0aGUgZWxlbWVudCBkaXJlY3RseS4gSXQgY291bGQgYmUgdGhhdAorICogICAg
dGhlIHBlcnNvbiB3cml0aW5nIHRoZSBkb2N1bWVudCBmb3Jnb3Qgc29tZSB0YWcgaW4gYmV0d2Vl
biAob3IgdGhhdCB0aGUKKyAqICAgIHRhZyBpbiBiZXR3ZWVuIGlzIG9wdGlvbmFsKS4gVGhpcyBj
b3VsZCBiZSB0aGUgY2FzZSB3aXRoIHRoZSBmb2xsb3dpbmcKKyAqICAgIHRhZ3M6IEhUTUwgSEVB
RCBCT0RZIFRCT0RZIFRSIFREIExJIChkaWQgSSBmb3JnZXQgYW55PykuCisgKgorICogMy4gV2Ug
d2FudCB0byBhZGQgYSBibG9jayBlbGVtZW50IGluc2lkZSB0byBhbiBpbmxpbmUgZWxlbWVudC4g
Q2xvc2UgYWxsCiAgKiAgICBpbmxpbmUgZWxlbWVudHMgdXAgdG8gdGhlIG5leHQgaGlnaGVyIGJs
b2NrIGVsZW1lbnQuCi0gKiA0LiBJZiB0aGlzIGRvZXNuJ3QgaGVscCBjbG9zZSBlbGVtZW50cywg
dW50aWwgd2UgYXJlIGFsbG93ZWQgdG8gYWRkIHRoZQorICoKKyAqIDQuIElmIHRoaXMgZG9lc24n
dCBoZWxwLCBjbG9zZSBlbGVtZW50cyB1bnRpbCB3ZSBhcmUgYWxsb3dlZCB0byBhZGQgdGhlCiAg
KiAgICBlbGVtZW50IG9yIGlnbm9yZSB0aGUgdGFnLgogICoKICAqLwotSFRNTFBhcnNlcjo6SFRN
TFBhcnNlcihEb2N1bWVudCogZG9jKSAKKworSFRNTFBhcnNlcjo6SFRNTFBhcnNlcihIVE1MRG9j
dW1lbnQqIGRvYykgCiAgICAgOiBkb2N1bWVudChkb2MpCi0gICAgLCBjdXJyZW50KDApCisgICAg
LCBjdXJyZW50KGRvYykKICAgICAsIGRpZFJlZkN1cnJlbnQoZmFsc2UpCiAgICAgLCBibG9ja1N0
YWNrKDApCi0gICAgLCBtX2ZyYWdtZW50KGZhbHNlKQorICAgICwgZm9ybSgwKQorICAgICwgbV9j
dXJyZW50TWFwRWxlbWVudCgwKQorICAgICwgaGVhZCgwKQorICAgICwgaW5Cb2R5KGZhbHNlKQor
ICAgICwgaGF2ZUNvbnRlbnQoZmFsc2UpCisgICAgLCBoYXZlRnJhbWVTZXQoZmFsc2UpCisgICAg
LCBtX3BhcnNpbmdGcmFnbWVudChmYWxzZSkKKyAgICAsIGluU3RyYXlUYWJsZUNvbnRlbnQoMCkK
IHsKLSAgICByZXNldCgpOwogfQogCiBIVE1MUGFyc2VyOjpIVE1MUGFyc2VyKERvY3VtZW50RnJh
Z21lbnQqIGZyYWcpCiAgICAgOiBkb2N1bWVudChmcmFnLT5kb2N1bWVudCgpKQotICAgICwgY3Vy
cmVudCgwKQotICAgICwgZGlkUmVmQ3VycmVudChmYWxzZSkKKyAgICAsIGN1cnJlbnQoZnJhZykK
KyAgICAsIGRpZFJlZkN1cnJlbnQodHJ1ZSkKICAgICAsIGJsb2NrU3RhY2soMCkKLSAgICAsIG1f
ZnJhZ21lbnQodHJ1ZSkKKyAgICAsIGZvcm0oMCkKKyAgICAsIG1fY3VycmVudE1hcEVsZW1lbnQo
MCkKKyAgICAsIGhlYWQoMCkKKyAgICAsIGluQm9keSh0cnVlKQorICAgICwgaGF2ZUNvbnRlbnQo
ZmFsc2UpCisgICAgLCBoYXZlRnJhbWVTZXQoZmFsc2UpCisgICAgLCBtX3BhcnNpbmdGcmFnbWVu
dCh0cnVlKQorICAgICwgaW5TdHJheVRhYmxlQ29udGVudCgwKQogewotICAgIHJlc2V0KCk7Ci0g
ICAgc2V0Q3VycmVudChmcmFnKTsKLSAgICBpbkJvZHkgPSB0cnVlOworICAgIGlmIChmcmFnKQor
ICAgICAgICBmcmFnLT5yZWYoKTsKIH0KIAogSFRNTFBhcnNlcjo6fkhUTUxQYXJzZXIoKQogewog
ICAgIGZyZWVCbG9jaygpOwotCi0gICAgc2V0Q3VycmVudCgwKTsKKyAgICBpZiAoZGlkUmVmQ3Vy
cmVudCkgCisgICAgICAgIGN1cnJlbnQtPmRlcmVmKCk7IAogfQogCiB2b2lkIEhUTUxQYXJzZXI6
OnJlc2V0KCkKIHsKLSAgICBzZXRDdXJyZW50KGRvYygpKTsKKyAgICBBU1NFUlQoIW1fcGFyc2lu
Z0ZyYWdtZW50KTsKKworICAgIHNldEN1cnJlbnQoZG9jdW1lbnQpOwogCiAgICAgZnJlZUJsb2Nr
KCk7CiAKQEAgLTE0OSwxOSArMTYxLDE4IEBAIHZvaWQgSFRNTFBhcnNlcjo6cmVzZXQoKQogICAg
IGhhdmVGcmFtZVNldCA9IGZhbHNlOwogICAgIGhhdmVDb250ZW50ID0gZmFsc2U7CiAgICAgaW5T
dHJheVRhYmxlQ29udGVudCA9IDA7Ci0gICAgCisKICAgICBmb3JtID0gMDsKLSAgICBtYXAgPSAw
OworICAgIG1fY3VycmVudE1hcEVsZW1lbnQgPSAwOwogICAgIGhlYWQgPSAwOwotICAgIGVuZCA9
IGZhbHNlOwotICAgIGlzaW5kZXggPSAwOwotICAgIAotICAgIGRpc2NhcmRfdW50aWwgPSBudWxs
QXRvbTsKKyAgICBtX2lzaW5kZXhFbGVtZW50ID0gMDsKKworICAgIG1fc2tpcE1vZGVUYWcgPSBu
dWxsQXRvbTsKIH0KIAogdm9pZCBIVE1MUGFyc2VyOjpzZXRDdXJyZW50KE5vZGUqIG5ld0N1cnJl
bnQpIAogewotICAgIGJvb2wgZGlkUmVmTmV3Q3VycmVudCA9IG5ld0N1cnJlbnQgJiYgbmV3Q3Vy
cmVudCAhPSBkb2MoKTsKKyAgICBib29sIGRpZFJlZk5ld0N1cnJlbnQgPSBuZXdDdXJyZW50ICYm
IG5ld0N1cnJlbnQgIT0gZG9jdW1lbnQ7CiAgICAgaWYgKGRpZFJlZk5ld0N1cnJlbnQpIAogICAg
ICAgICBuZXdDdXJyZW50LT5yZWYoKTsgCiAgICAgaWYgKGRpZFJlZkN1cnJlbnQpIApAQCAtMTcw
LDE5ICsxODEsMzggQEAgdm9pZCBIVE1MUGFyc2VyOjpzZXRDdXJyZW50KE5vZGUqIG5ld0N1cgog
ICAgIGRpZFJlZkN1cnJlbnQgPSBkaWRSZWZOZXdDdXJyZW50OwogfQogCi1QYXNzUmVmUHRyPE5v
ZGU+IEhUTUxQYXJzZXI6OnBhcnNlVG9rZW4oVG9rZW4gKnQpCit2b2lkIEhUTUxQYXJzZXI6OnNl
dFNraXBNb2RlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lKQogewotICAgIGlmICghZGlzY2Fy
ZF91bnRpbC5pc051bGwoKSkgewotICAgICAgICBpZiAodC0+dGFnTmFtZSA9PSBkaXNjYXJkX3Vu
dGlsICYmICF0LT5iZWdpblRhZykKLSAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSBudWxsQXRv
bTsKKyAgICBtX3NraXBNb2RlVGFnID0gcU5hbWUubG9jYWxOYW1lKCk7CisgICAgbV9pbkNhbnZh
c0JlZm9yZUZpcnN0T3BlblRhZyA9IGZhbHNlOworfQogCi0gICAgICAgIC8vIGRvIG5vdCBza2lw
IDwvaWZyYW1lPgotICAgICAgICBpZiAoIWRpc2NhcmRfdW50aWwuaXNOdWxsKCkgfHwgKGN1cnJl
bnQtPmxvY2FsTmFtZSgpICE9IHQtPnRhZ05hbWUpKQorUGFzc1JlZlB0cjxOb2RlPiBIVE1MUGFy
c2VyOjpwYXJzZVRva2VuKFRva2VuKiB0KQoreworICAgIGlmICghbV9za2lwTW9kZVRhZy5pc051
bGwoKSkgeworICAgICAgICBpZiAoIXQtPmJlZ2luVGFnICYmIHQtPnRhZ05hbWUgPT0gbV9za2lw
TW9kZVRhZykgeworICAgICAgICAgICAgLy8gRm91bmQgdGhlIGVuZCB0YWcgZm9yIHRoZSBjdXJy
ZW50IHNraXAgbW9kZSwgc28gd2UncmUgZG9uZSBza2lwcGluZy4KKyAgICAgICAgICAgIG1fc2tp
cE1vZGVUYWcgPSBudWxsQXRvbTsKKyAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LT5sb2NhbE5h
bWUoKSA9PSB0LT50YWdOYW1lKSB7CisgICAgICAgICAgICAvLyBEbyBub3Qgc2tpcCA8L2lmcmFt
ZT4uCisgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBkb2VzIHRoYXQgY29tbWVudCBtZWFuPyBI
b3cgY2FuIGl0IGJlIHJpZ2h0IHRvIHBhcnNlIGEgdG9rZW4gd2l0aG91dCBjbGVhcmluZyBtX3Nr
aXBNb2RlVGFnPworICAgICAgICB9IGVsc2UgaWYgKCFtX2luQ2FudmFzQmVmb3JlRmlyc3RPcGVu
VGFnKSB7CisgICAgICAgICAgICAvLyBTa2lwIHRoaXMgdG9rZW4uCiAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghdC0+YmVnaW5UYWcgJiYg
bV9za2lwTW9kZVRhZyA9PSBjYW52YXNUYWcubG9jYWxOYW1lKCkgJiYgdGFnSXNPblN0YWNrKHQt
PnRhZ05hbWUpKQorICAgICAgICAgICAgICAgIG1fc2tpcE1vZGVUYWcgPSBudWxsQXRvbTsgLy8g
dGFncyB0aGF0IHByb3Blcmx5IG5lc3Qgd2l0aCBlbGVtZW50cyBvdXRzaWRlIGEgY2FudmFzIGNs
b3NlIHRoZSBjYW52YXMKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh0
LT5iZWdpblRhZyAmJiAhdC0+ZmxhdCAmJiB0LT50YWdOYW1lICE9IHRleHRBdG9tICYmIHQtPnRh
Z05hbWUgIT0gY29tbWVudEF0b20pCisgICAgICAgICAgICAgICAgICAgIG1faW5DYW52YXNCZWZv
cmVGaXJzdE9wZW5UYWcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAvLyBTa2lwIHRoaXMgdG9r
ZW4uCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
ICAgICB9CiAKICAgICAvLyBBcHBhcmVudGx5IHNvbWUgc2l0ZXMgdXNlIDwvYnI+IGluc3RlYWQg
b2YgPGJyPi4gIEJlIGNvbXBhdGlibGUgd2l0aCBJRSBhbmQgRmlyZWZveCBhbmQgdHJlYXQgdGhp
cyBsaWtlIDxicj4uCi0gICAgaWYgKHQtPmlzQ2xvc2VUYWcoYnJUYWcpICYmIGRvYygpLT5pbkNv
bXBhdE1vZGUoKSkKKyAgICBpZiAodC0+aXNDbG9zZVRhZyhiclRhZykgJiYgZG9jdW1lbnQtPmlu
Q29tcGF0TW9kZSgpKQogICAgICAgICB0LT5iZWdpblRhZyA9IHRydWU7CiAKICAgICBpZiAoIXQt
PmJlZ2luVGFnKSB7CkBAIC0yMjQsOCArMjU0LDggQEAgUGFzc1JlZlB0cjxOb2RlPiBIVE1MUGFy
c2VyOjpwYXJzZVRva2VuKAogICAgICAgICAgICAgZS0+c2V0QXR0cmlidXRlTWFwKDApOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKG1hcCA9PSBuKQotICAgICAgICAgICAgbWFwID0gMDsKKyAg
ICAgICAgaWYgKG1fY3VycmVudE1hcEVsZW1lbnQgPT0gbikKKyAgICAgICAgICAgIG1fY3VycmVu
dE1hcEVsZW1lbnQgPSAwOwogCiAgICAgICAgIGlmIChmb3JtID09IG4pCiAgICAgICAgICAgICBm
b3JtID0gMDsKQEAgLTI1NCw3ICsyODQsNyBAQCBzdGF0aWMgYm9vbCBpc1RhYmxlUmVsYXRlZChO
b2RlKiBuKQogICAgIHJldHVybiBuLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSB8fCBpc1RhYmxlUGFy
dChuKTsKIH0KIAotYm9vbCBIVE1MUGFyc2VyOjppbnNlcnROb2RlKE5vZGUgKm4sIGJvb2wgZmxh
dCkKK2Jvb2wgSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2RlKiBuLCBib29sIGZsYXQpCiB7CiAg
ICAgUmVmUHRyPE5vZGU+IHByb3RlY3ROb2RlKG4pOwogCkBAIC0yODMsMTAgKzMxMywxMCBAQCBi
b29sIEhUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZSAqbiwgYm9vCiAgICAgICAgICAgICBjdXJy
ZW50ID0gbmV3Tm9kZTsKICAgICAgICAgICAgIGRpZFJlZkN1cnJlbnQgPSB0cnVlOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChwYXJlbnRBdHRhY2hlZCAmJiAhbi0+YXR0YWNoZWQoKSAmJiAhbV9m
cmFnbWVudCkKKyAgICAgICAgaWYgKHBhcmVudEF0dGFjaGVkICYmICFuLT5hdHRhY2hlZCgpICYm
ICFtX3BhcnNpbmdGcmFnbWVudCkKICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmIChwYXJlbnRBdHRhY2hlZCAmJiAhbi0+YXR0YWNoZWQoKSAmJiAhbV9m
cmFnbWVudCkKKyAgICAgICAgaWYgKHBhcmVudEF0dGFjaGVkICYmICFuLT5hdHRhY2hlZCgpICYm
ICFtX3BhcnNpbmdGcmFnbWVudCkKICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwogICAgICAgICBu
LT5jbG9zZVJlbmRlcmVyKCk7CiAgICAgfQpAQCAtMjk3LDcgKzMyNyw3IEBAIGJvb2wgSFRNTFBh
cnNlcjo6aW5zZXJ0Tm9kZShOb2RlICpuLCBib28KIGJvb2wgSFRNTFBhcnNlcjo6aGFuZGxlRXJy
b3IoTm9kZSogbiwgYm9vbCBmbGF0LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgaW50
IHRhZ1ByaW9yaXR5KQogewogICAgIC8vIEVycm9yIGhhbmRsaW5nIGNvZGUuICBUaGlzIGlzIGp1
c3QgYWQgaG9jIGhhbmRsaW5nIG9mIHNwZWNpZmljIHBhcmVudC9jaGlsZCBjb21iaW5hdGlvbnMu
Ci0gICAgSFRNTEVsZW1lbnQgKmU7CisgICAgSFRNTEVsZW1lbnQqIGU7CiAgICAgYm9vbCBoYW5k
bGVkID0gZmFsc2U7CiAKICAgICAvLyAxLiBDaGVjayBvdXQgdGhlIGVsZW1lbnQncyB0YWcgbmFt
ZSB0byBkZWNpZGUgaG93IHRvIGRlYWwgd2l0aCBlcnJvcnMuCkBAIC0zMjEsNyArMzUxLDcgQEAg
Ym9vbCBIVE1MUGFyc2VyOjpoYW5kbGVFcnJvcihOb2RlKiBuLCBibwogICAgICAgICAgICAgICAg
IGNyZWF0ZUhlYWQoKTsKICAgICAgICAgICAgIGlmIChoZWFkKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGhlYWQtPmFkZENoaWxkKG4pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbi0+YXR0
YWNoZWQoKSAmJiAhbV9mcmFnbWVudCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRh
Y2hlZCgpICYmICFtX3BhcnNpbmdGcmFnbWVudCkKICAgICAgICAgICAgICAgICAgICAgICAgIG4t
PmF0dGFjaCgpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
ICAgICB9IGVsc2UKQEAgLTMyOSwxMiArMzU5LDEyIEBAIGJvb2wgSFRNTFBhcnNlcjo6aGFuZGxl
RXJyb3IoTm9kZSogbiwgYm8KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChoLT5o
YXNMb2NhbE5hbWUoaHRtbFRhZykpIHsKICAgICAgICAgICAgIGlmICghY3VycmVudC0+aXNEb2N1
bWVudE5vZGUoKSApIHsKLSAgICAgICAgICAgICAgICBpZiAoZG9jKCktPmZpcnN0Q2hpbGQoKS0+
aGFzVGFnTmFtZShodG1sVGFnKSkgeworICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC0+Zmly
c3RDaGlsZCgpLT5oYXNUYWdOYW1lKGh0bWxUYWcpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IHdlIGhhdmUgYW5vdGhlciA8SFRNTD4gZWxlbWVudC4uLi4gYXBwbHkgYXR0cmlidXRlcyB0byBl
eGlzdGluZyBvbmUKICAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IG92
ZXJ3cml0ZSBhbHJlYWR5IGV4aXN0aW5nIGF0dHJpYnV0ZXMKLSAgICAgICAgICAgICAgICAgICAg
TmFtZWRBdHRyTWFwICptYXAgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmF0dHJpYnV0ZXMo
dHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgKmV4aXN0aW5nSFRNTCA9IHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihkb2MoKS0+Zmlyc3RDaGlsZCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgTmFtZWRBdHRyTWFwICpibWFwID0gZXhpc3RpbmdIVE1MLT5hdHRyaWJ1dGVzKGZhbHNlKTsK
KyAgICAgICAgICAgICAgICAgICAgTmFtZWRBdHRyTWFwKiBtYXAgPSBzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obiktPmF0dHJpYnV0ZXModHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQq
IGV4aXN0aW5nSFRNTCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihkb2N1bWVudC0+Zmlyc3RDaGls
ZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgTmFtZWRBdHRyTWFwKiBibWFwID0gZXhpc3RpbmdI
VE1MLT5hdHRyaWJ1dGVzKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBsID0gMDsgbWFwICYmIGwgPCBtYXAtPmxlbmd0aCgpOyArK2wpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIEF0dHJpYnV0ZSogaXQgPSBtYXAtPmF0dHJpYnV0ZUl0ZW0obCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWJtYXAtPmdldEF0dHJpYnV0ZUl0ZW0oaXQtPm5hbWUoKSkp
CkBAIC0zNTQsNyArMzg0LDcgQEAgYm9vbCBIVE1MUGFyc2VyOjpoYW5kbGVFcnJvcihOb2RlKiBu
LCBibwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwdXNoQmxvY2sobG9jYWxO
YW1lLCB0YWdQcmlvcml0eSk7CiAgICAgICAgICAgICAgICAgc2V0Q3VycmVudChuZXdOb2RlKTsK
LSAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgIW1fZnJhZ21lbnQpCisgICAg
ICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmICFtX3BhcnNpbmdGcmFnbWVudCkKICAg
ICAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICB9CkBAIC0zNjMsMTMgKzM5MywxMyBAQCBib29sIEhUTUxQYXJzZXI6
OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShib2R5VGFn
KSkgewotICAgICAgICAgICAgaWYgKGluQm9keSAmJiBkb2MoKS0+Ym9keSgpKSB7CisgICAgICAg
ICAgICBpZiAoaW5Cb2R5ICYmIGRvY3VtZW50LT5ib2R5KCkpIHsKICAgICAgICAgICAgICAgICAv
LyB3ZSBoYXZlIGFub3RoZXIgPEJPRFk+IGVsZW1lbnQuLi4uIGFwcGx5IGF0dHJpYnV0ZXMgdG8g
ZXhpc3Rpbmcgb25lCiAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJ3
cml0ZSBhbHJlYWR5IGV4aXN0aW5nIGF0dHJpYnV0ZXMKICAgICAgICAgICAgICAgICAvLyBzb21l
IHNpdGVzIHVzZSA8Ym9keSBiZ2NvbG9yPXJpZ2h0Y29sb3I+Li4uPGJvZHkgYmdjb2xvcj13cm9u
Z2NvbG9yPgotICAgICAgICAgICAgICAgIE5hbWVkQXR0ck1hcCAqbWFwID0gc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG4pLT5hdHRyaWJ1dGVzKHRydWUpOwotICAgICAgICAgICAgICAgIEVsZW1lbnQg
KmV4aXN0aW5nQm9keSA9IGRvYygpLT5ib2R5KCk7Ci0gICAgICAgICAgICAgICAgTmFtZWRBdHRy
TWFwICpibWFwID0gZXhpc3RpbmdCb2R5LT5hdHRyaWJ1dGVzKGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICBOYW1lZEF0dHJNYXAqIG1hcCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+YXR0cmli
dXRlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICBFbGVtZW50KiBleGlzdGluZ0JvZHkgPSBkb2N1
bWVudC0+Ym9keSgpOworICAgICAgICAgICAgICAgIE5hbWVkQXR0ck1hcCogYm1hcCA9IGV4aXN0
aW5nQm9keS0+YXR0cmlidXRlcyhmYWxzZSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBsID0gMDsgbWFwICYmIGwgPCBtYXAtPmxlbmd0aCgpOyArK2wpIHsKICAgICAgICAgICAgICAg
ICAgICAgQXR0cmlidXRlKiBpdCA9IG1hcC0+YXR0cmlidXRlSXRlbShsKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFibWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGl0LT5uYW1lKCkpKQpAQCAtMzgy
LDcgKzQxMiw3IEBAIGJvb2wgSFRNTFBhcnNlcjo6aGFuZGxlRXJyb3IoTm9kZSogbiwgYm8KICAg
ICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoaW5wdXRUYWcpKSB7CiAgICAgICAgICAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaC0+Z2V0QXR0cmlidXRlKHR5cGVBdHRyKSwgImhpZGRl
biIpICYmIGZvcm0pIHsKICAgICAgICAgICAgICAgICBmb3JtLT5hZGRDaGlsZChuKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgIW1fZnJhZ21lbnQpCisgICAgICAgICAg
ICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmICFtX3BhcnNpbmdGcmFnbWVudCkKICAgICAgICAg
ICAgICAgICAgICAgbi0+YXR0YWNoKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9CkBAIC0zOTMsOSArNDIzLDkgQEAgYm9vbCBIVE1MUGFyc2VyOjpoYW5kbGVF
cnJvcihOb2RlKiBuLCBibwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShhcmVhVGFnKSkgewotICAg
ICAgICAgICAgaWYgKG1hcCkgewotICAgICAgICAgICAgICAgIG1hcC0+YWRkQ2hpbGQobik7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmICFtX2ZyYWdtZW50KQorICAgICAg
ICAgICAgaWYgKG1fY3VycmVudE1hcEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBtX2N1cnJl
bnRNYXBFbGVtZW50LT5hZGRDaGlsZChuKTsKKyAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFj
aGVkKCkgJiYgIW1fcGFyc2luZ0ZyYWdtZW50KQogICAgICAgICAgICAgICAgICAgICBuLT5hdHRh
Y2goKTsKICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTQzMSw3ICs0NjEsNyBAQCBib29sIEhUTUxQYXJzZXI6OmhhbmRsZUVy
cm9yKE5vZGUqIG4sIGJvCiAgICAgICAgIGluc2VydE5vZGUoZSk7CiAgICAgICAgIGlmIChoZWFk
KSB7CiAgICAgICAgICAgICBoZWFkLT5hZGRDaGlsZChuKTsKLSAgICAgICAgICAgIGlmICghbi0+
YXR0YWNoZWQoKSAmJiAhbV9mcmFnbWVudCkKKyAgICAgICAgICAgIGlmICghbi0+YXR0YWNoZWQo
KSAmJiAhbV9wYXJzaW5nRnJhZ21lbnQpCiAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00NTYsNyArNDg2LDcgQEAgYm9vbCBI
VE1MUGFyc2VyOjpoYW5kbGVFcnJvcihOb2RlKiBuLCBibwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkg
ewotICAgICAgICAgICAgICAgICAgICBUZXh0ICp0ID0gc3RhdGljX2Nhc3Q8VGV4dCAqPihuKTsK
KyAgICAgICAgICAgICAgICAgICAgVGV4dCogdCA9IHN0YXRpY19jYXN0PFRleHQqPihuKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CkBAIC00
OTcsMTAgKzUyNywxMCBAQCBib29sIEhUTUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJv
CiAgICAgICAgICAgICAgICAgYm9vbCBwb3NzaWJseU1vdmVTdHJheUNvbnRlbnQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICAgICAgICAgIGlm
IChuLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgVGV4dCAqdCA9IHN0YXRp
Y19jYXN0PFRleHQgKj4obik7CisgICAgICAgICAgICAgICAgICAgIFRleHQqIHQgPSBzdGF0aWNf
Y2FzdDxUZXh0Kj4obik7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0LT5jb250YWluc09ubHlX
aGl0ZXNwYWNlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgICAgIFN0cmluZ0ltcGwgKmkgPSB0LT5zdHJpbmcoKTsKKyAgICAgICAgICAg
ICAgICAgICAgU3RyaW5nSW1wbCogaSA9IHQtPnN0cmluZygpOwogICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgcG9zID0gMDsKICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBvcyA8
IGktPmxlbmd0aCgpICYmICgoKmkpW3Bvc10gPT0gJyAnIHx8ICgqaSlbcG9zXSA9PSBub0JyZWFr
U3BhY2UpKQogICAgICAgICAgICAgICAgICAgICAgICAgcG9zKys7CkBAIC01MDgsMTQgKzUzOCwx
NCBAQCBib29sIEhUTUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvCiAgICAgICAgICAg
ICAgICAgICAgICAgICBwb3NzaWJseU1vdmVTdHJheUNvbnRlbnQgPSBmYWxzZTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKHBvc3NpYmx5TW92ZVN0cmF5Q29udGVudCkg
ewotICAgICAgICAgICAgICAgICAgICBOb2RlICpub2RlID0gY3VycmVudDsKLSAgICAgICAgICAg
ICAgICAgICAgTm9kZSAqcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gY3VycmVudDsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
cGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgICAgICAgICAvLyBBIHNj
cmlwdCBtYXkgaGF2ZSByZW1vdmVkIHRoZSBjdXJyZW50IG5vZGUncyBwYXJlbnQgZnJvbSB0aGUg
RE9NCiAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcxMzcKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBk
byByZWFsIHJlY292ZXJ5IGhlcmUgYW5kIHJlLXBhcmVudCB3aXRoIHRoZSBjb3JyZWN0IG5vZGUu
CiAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyZW50KQogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBOb2RlICpncmFuZHBhcmVudCA9
IHBhcmVudC0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBncmFuZHBh
cmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChu
LT5pc1RleHROb2RlKCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgIChoLT5oYXNMb2NhbE5h
bWUodHJUYWcpICYmCkBAIC01MjUsNyArNTU1LDcgQEAgYm9vbCBIVE1MUGFyc2VyOjpoYW5kbGVF
cnJvcihOb2RlKiBuLCBibwogICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+aGFzVGFn
TmFtZSh0YWJsZVRhZykpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gKG5vZGUt
Pmhhc1RhZ05hbWUodGFibGVUYWcpKSA/IG5vZGUgOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoKG5vZGUtPmhhc1RhZ05hbWUodHJUYWcpKSA/IGdyYW5kcGFyZW50IDogcGFyZW50
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUgKnBhcmVudCA9IG5vZGUtPnBhcmVudE5v
ZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVu
dE5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyZW50KQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmVudC0+aW5zZXJ0QmVmb3JlKG4sIG5vZGUsIGVjKTsKQEAgLTY0Nyw4ICs2NzcsOCBAQCBi
b29sIEhUTUxQYXJzZXI6OmZyYW1lc2V0Q3JlYXRlRXJyb3JDaGVjCiAgICAgICAgIC8vIHdlIGNh
bid0IGltcGxlbWVudCB0aGF0IGJlaGF2aW91ciBub3cgYmVjYXVzZSBpdCBjb3VsZCBjYXVzZSB0
b28gbWFueQogICAgICAgICAvLyByZWdyZXNzaW9ucyBhbmQgdGhlIGhlYWRhY2hlcyBhcmUgbm90
IHdvcnRoIHRoZSB3b3JrIGFzIGxvbmcgYXMgdGhlcmUgaXMKICAgICAgICAgLy8gbm8gc2l0ZSBh
Y3R1YWxseSByZWx5aW5nIG9uIHRoYXQgZGV0YWlsIChEaXJrKQotICAgICAgICBpZiAoZG9jKCkt
PmJvZHkoKSkKLSAgICAgICAgICAgIGRvYygpLT5ib2R5KCktPnNldEF0dHJpYnV0ZShzdHlsZUF0
dHIsICJkaXNwbGF5Om5vbmUiKTsKKyAgICAgICAgaWYgKGRvY3VtZW50LT5ib2R5KCkpCisgICAg
ICAgICAgICBkb2N1bWVudC0+Ym9keSgpLT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCAiZGlzcGxh
eTpub25lIik7CiAgICAgICAgIGluQm9keSA9IGZhbHNlOwogICAgIH0KICAgICBpZiAoKGhhdmVD
b250ZW50IHx8IGhhdmVGcmFtZVNldCkgJiYgY3VycmVudC0+bG9jYWxOYW1lKCkgPT0gaHRtbFRh
ZykKQEAgLTY3OCwxMiArNzA4LDEyIEBAIGJvb2wgSFRNTFBhcnNlcjo6Zm9ybUNyZWF0ZUVycm9y
Q2hlY2soVG8KIAogYm9vbCBIVE1MUGFyc2VyOjppc2luZGV4Q3JlYXRlRXJyb3JDaGVjayhUb2tl
biogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCiB7Ci0gICAgTm9kZSAqbiA9IGhhbmRsZUlzaW5k
ZXgodCk7CisgICAgUmVmUHRyPE5vZGU+IG4gPSBoYW5kbGVJc2luZGV4KHQpOwogICAgIGlmICgh
aW5Cb2R5KSB7Ci0gICAgICAgIGlzaW5kZXggPSBuOworICAgICAgICBtX2lzaW5kZXhFbGVtZW50
ID0gbi5yZWxlYXNlKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdC0+ZmxhdCA9IHRydWU7Ci0g
ICAgICAgIHJlc3VsdCA9IG47CisgICAgICAgIHJlc3VsdCA9IG4ucmVsZWFzZSgpOwogICAgIH0K
ICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC03NDcsMTUgKzc3NywxNSBAQCBib29sIEhUTUxQYXJz
ZXI6Om5vZnJhbWVzQ3JlYXRlRXJyb3JDaGVjCiAKIGJvb2wgSFRNTFBhcnNlcjo6bm9zY3JpcHRD
cmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKIHsKLSAgICBp
ZiAoIW1fZnJhZ21lbnQgJiYgZG9jdW1lbnQtPmZyYW1lKCkgJiYgZG9jdW1lbnQtPmZyYW1lKCkt
PnNldHRpbmdzKCktPmlzSmF2YVNjcmlwdEVuYWJsZWQoKSkKKyAgICBpZiAoIW1fcGFyc2luZ0Zy
YWdtZW50ICYmIGRvY3VtZW50LT5mcmFtZSgpICYmIGRvY3VtZW50LT5mcmFtZSgpLT5zZXR0aW5n
cygpLT5pc0phdmFTY3JpcHRFbmFibGVkKCkpCiAgICAgICAgIHNldFNraXBNb2RlKG5vc2NyaXB0
VGFnKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBIVE1MUGFyc2VyOjptYXBDcmVhdGVF
cnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKIHsKLSAgICBtYXAgPSBu
ZXcgSFRNTE1hcEVsZW1lbnQoZG9jdW1lbnQpOwotICAgIHJlc3VsdCA9IG1hcDsKKyAgICBtX2N1
cnJlbnRNYXBFbGVtZW50ID0gbmV3IEhUTUxNYXBFbGVtZW50KGRvY3VtZW50KTsKKyAgICByZXN1
bHQgPSBtX2N1cnJlbnRNYXBFbGVtZW50OwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNzY0
LDggKzc5NCwxMCBAQCBib29sIEhUTUxQYXJzZXI6OmNhbnZhc0NyZWF0ZUVycm9yQ2hlY2soCiAg
ICAgaWYgKGRvY3VtZW50LT5mcmFtZSgpICYmIGRvY3VtZW50LT5mcmFtZSgpLT5zZXR0aW5ncygp
LT51c2VzRGFzaGJvYXJkQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAotICAgIGlmICghbV9mcmFnbWVudCAmJiBkb2N1bWVudC0+ZnJhbWUoKSAmJiBk
b2N1bWVudC0+ZnJhbWUoKS0+c2V0dGluZ3MoKS0+aXNKYXZhU2NyaXB0RW5hYmxlZCgpKQorICAg
IGlmICghbV9wYXJzaW5nRnJhZ21lbnQgJiYgZG9jdW1lbnQtPmZyYW1lKCkgJiYgZG9jdW1lbnQt
PmZyYW1lKCktPnNldHRpbmdzKCktPmlzSmF2YVNjcmlwdEVuYWJsZWQoKSkgewogICAgICAgICBz
ZXRTa2lwTW9kZShjYW52YXNUYWcpOworICAgICAgICBtX2luQ2FudmFzQmVmb3JlRmlyc3RPcGVu
VGFnID0gdHJ1ZTsKKyAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTgxNiwyNSArODQ4
LDIzIEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTFBhcnNlcjo6Z2V0Tm9kZShUb2sKICAgICBpZiAo
Q3JlYXRlRXJyb3JDaGVja0Z1bmMgZXJyb3JDaGVja0Z1bmMgPSBnRnVuY3Rpb25NYXAuZ2V0KHQt
PnRhZ05hbWUuaW1wbCgpKSkKICAgICAgICAgcHJvY2VlZCA9ICh0aGlzLT4qZXJyb3JDaGVja0Z1
bmMpKHQsIHJlc3VsdCk7CiAgICAgaWYgKHByb2NlZWQpCi0gICAgICAgIHJlc3VsdCA9IEhUTUxF
bGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1lbnQodC0+dGFnTmFtZSwgZG9jKCksIGZvcm0p
OworICAgICAgICByZXN1bHQgPSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVtZW50
KHQtPnRhZ05hbWUsIGRvY3VtZW50LCBmb3JtKTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2Uo
KTsKIH0KIAotI2RlZmluZSBNQVhfUkVEVU5EQU5UIDIwCi0KLWJvb2wgSFRNTFBhcnNlcjo6YWxs
b3dOZXN0ZWRSZWR1bmRhbnRUYWcoY29uc3QgQXRvbWljU3RyaW5nJiBfdGFnTmFtZSkKK2Jvb2wg
SFRNTFBhcnNlcjo6YWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0
YWdOYW1lKQogewogICAgIC8vIHd3dy5saWNlby5lZHUubXggaXMgYW4gZXhhbXBsZSBvZiBhIHNp
dGUgdGhhdCBhY2hpZXZlcyBhIGxldmVsIG9mIG5lc3Rpbmcgb2YKICAgICAvLyBhYm91dCAxNTAw
IHRhZ3MsIGFsbCBmcm9tIGEgYnVuY2ggb2YgPGI+cy4gIFdlIHdpbGwgb25seSBhbGxvdyBhdCBt
b3N0IDIwCiAgICAgLy8gbmVzdGVkIHRhZ3Mgb2YgdGhlIHNhbWUgdHlwZSBiZWZvcmUganVzdCBp
Z25vcmluZyB0aGVtIGFsbCB0b2dldGhlci4KICAgICBpbnQgaSA9IDA7CiAgICAgZm9yIChIVE1M
U3RhY2tFbGVtKiBjdXJyID0gYmxvY2tTdGFjazsKLSAgICAgICAgIGkgPCBNQVhfUkVEVU5EQU5U
ICYmIGN1cnIgJiYgY3Vyci0+dGFnTmFtZSA9PSBfdGFnTmFtZTsKKyAgICAgICAgIGkgPCBtYXhS
ZWR1bmRhbnRUYWdEZXB0aCAmJiBjdXJyICYmIGN1cnItPnRhZ05hbWUgPT0gdGFnTmFtZTsKICAg
ICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0LCBpKyspOwotICAgIHJldHVybiBpICE9IE1BWF9SRURV
TkRBTlQ7CisgICAgcmV0dXJuIGkgIT0gbWF4UmVkdW5kYW50VGFnRGVwdGg7CiB9CiAKLXZvaWQg
SFRNTFBhcnNlcjo6cHJvY2Vzc0Nsb3NlVGFnKFRva2VuICp0KQordm9pZCBIVE1MUGFyc2VyOjpw
cm9jZXNzQ2xvc2VUYWcoVG9rZW4qIHQpCiB7CiAgICAgLy8gU3VwcG9ydCBmb3IgcmVhbGx5IGJy
b2tlbiBodG1sLgogICAgIC8vIHdlIG5ldmVyIGNsb3NlIHRoZSBib2R5IHRhZywgc2luY2Ugc29t
ZSBzdHVwaWQgd2ViIHBhZ2VzIGNsb3NlIGl0IGJlZm9yZSB0aGUgYWN0dWFsIGVuZCBvZiB0aGUg
ZG9jLgpAQCAtODQ1LDcgKzg3NSw3IEBAIHZvaWQgSFRNTFBhcnNlcjo6cHJvY2Vzc0Nsb3NlVGFn
KFRva2VuICoKICAgICBpZiAodC0+dGFnTmFtZSA9PSBmb3JtVGFnKQogICAgICAgICBmb3JtID0g
MDsKICAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IG1hcFRhZykKLSAgICAgICAgbWFwID0gMDsK
KyAgICAgICAgbV9jdXJyZW50TWFwRWxlbWVudCA9IDA7CiAgICAgICAgIAogICAgIEhUTUxTdGFj
a0VsZW0qIG9sZEVsZW0gPSBibG9ja1N0YWNrOwogICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOwpA
QCAtOTA1LDcgKzkzNSw3IEBAIGJvb2wgSFRNTFBhcnNlcjo6aXNJbmxpbmUoTm9kZSogbm9kZSkg
Y28KICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShhYmJyVGFnKSB8fCBlLT5oYXNMb2NhbE5h
bWUoYWNyb255bVRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKHN1YlRhZykgfHwKICAgICAgICAgICAg
IGUtPmhhc0xvY2FsTmFtZShzdXBUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShzcGFuVGFnKSB8fCBl
LT5oYXNMb2NhbE5hbWUobm9iclRhZykgfHwKICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZSh3
YnJUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShub2ZyYW1lc1RhZykgfHwgZS0+aGFzTG9jYWxOYW1l
KG5vbGF5ZXJUYWcpIHx8Ci0gICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUobm9lbWJlZFRhZykg
fHwgKGUtPmhhc0xvY2FsTmFtZShub3NjcmlwdFRhZykgJiYgIW1fZnJhZ21lbnQgJiYgZG9jdW1l
bnQtPmZyYW1lKCkgJiYgZG9jdW1lbnQtPmZyYW1lKCktPnNldHRpbmdzKCktPmlzSmF2YVNjcmlw
dEVuYWJsZWQoKSkpCisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUobm9lbWJlZFRhZykgfHwg
KGUtPmhhc0xvY2FsTmFtZShub3NjcmlwdFRhZykgJiYgIW1fcGFyc2luZ0ZyYWdtZW50ICYmIGRv
Y3VtZW50LT5mcmFtZSgpICYmIGRvY3VtZW50LT5mcmFtZSgpLT5zZXR0aW5ncygpLT5pc0phdmFT
Y3JpcHRFbmFibGVkKCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApA
QCAtMTE5NiwzOSArMTIyNiw0NyBAQCB2b2lkIEhUTUxQYXJzZXI6OnB1c2hCbG9jayhjb25zdCBB
dG9taWNTCiAgICAgZGlkUmVmQ3VycmVudCA9IGZhbHNlOwogfQogCi12b2lkIEhUTUxQYXJzZXI6
OnBvcEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYgX3RhZ05hbWUpCitib29sIEhUTUxQYXJzZXI6
OnRhZ0lzT25TdGFjayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpIGNvbnN0CiB7Ci0gICAg
SFRNTFN0YWNrRWxlbSAqRWxlbSA9IGJsb2NrU3RhY2s7CisgICAgZm9yIChjb25zdCBIVE1MU3Rh
Y2tFbGVtKiBlID0gYmxvY2tTdGFjazsgZTsgZSA9IGUtPm5leHQpCisgICAgICAgIGlmIChlLT50
YWdOYW1lID09IHRhZ05hbWUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgSFRNTFBhcnNlcjo6cG9wQmxvY2soY29uc3QgQXRvbWljU3RyaW5n
JiB0YWdOYW1lKQoreworICAgIEhUTUxTdGFja0VsZW0qIGVsZW0gPSBibG9ja1N0YWNrOwogICAg
IAogICAgIGludCBtYXhMZXZlbCA9IDA7CiAKLSAgICB3aGlsZSAoRWxlbSAmJiAoRWxlbS0+dGFn
TmFtZSAhPSBfdGFnTmFtZSkpIHsKLSAgICAgICAgaWYgKG1heExldmVsIDwgRWxlbS0+bGV2ZWwp
Ci0gICAgICAgICAgICBtYXhMZXZlbCA9IEVsZW0tPmxldmVsOwotICAgICAgICBFbGVtID0gRWxl
bS0+bmV4dDsKKyAgICB3aGlsZSAoZWxlbSAmJiAoZWxlbS0+dGFnTmFtZSAhPSB0YWdOYW1lKSkg
eworICAgICAgICBpZiAobWF4TGV2ZWwgPCBlbGVtLT5sZXZlbCkKKyAgICAgICAgICAgIG1heExl
dmVsID0gZWxlbS0+bGV2ZWw7CisgICAgICAgIGVsZW0gPSBlbGVtLT5uZXh0OwogICAgIH0KIAot
ICAgIGlmICghRWxlbSkKKyAgICBpZiAoIWVsZW0pCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChtYXhMZXZlbCA+IEVsZW0tPmxldmVsKSB7CisgICAgaWYgKG1heExldmVsID4gZWxlbS0+bGV2
ZWwpIHsKICAgICAgICAgLy8gV2UgZGlkbid0IG1hdGNoIGJlY2F1c2UgdGhlIHRhZyBpcyBpbiBh
IGRpZmZlcmVudCBzY29wZSwgZS5nLiwKICAgICAgICAgLy8gPGI+PHA+Rm9vPC9iPi4gIFRyeSB0
byBjb3JyZWN0IHRoZSBwcm9ibGVtLgotICAgICAgICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRhZyhf
dGFnTmFtZSkpCisgICAgICAgIGlmICghaXNSZXNpZHVhbFN0eWxlVGFnKHRhZ05hbWUpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICByZXR1cm4gaGFuZGxlUmVzaWR1YWxTdHlsZUNsb3Nl
VGFnQWNyb3NzQmxvY2tzKEVsZW0pOworICAgICAgICByZXR1cm4gaGFuZGxlUmVzaWR1YWxTdHls
ZUNsb3NlVGFnQWNyb3NzQmxvY2tzKGVsZW0pOwogICAgIH0KIAotICAgIGJvb2wgaXNBZmZlY3Rl
ZEJ5U3R5bGUgPSBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKEVsZW0tPnRhZ05hbWUpOworICAg
IGJvb2wgaXNBZmZlY3RlZEJ5U3R5bGUgPSBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGVsZW0t
PnRhZ05hbWUpOwogICAgIEhUTUxTdGFja0VsZW0qIHJlc2lkdWFsU3R5bGVTdGFjayA9IDA7CiAg
ICAgTm9kZSogbWFsZm9ybWVkVGFibGVQYXJlbnQgPSAwOwogICAgIAotICAgIEVsZW0gPSBibG9j
a1N0YWNrOwotICAgIHdoaWxlIChFbGVtKSB7Ci0gICAgICAgIGlmIChFbGVtLT50YWdOYW1lID09
IF90YWdOYW1lKSB7CisgICAgZWxlbSA9IGJsb2NrU3RhY2s7CisgICAgd2hpbGUgKGVsZW0pIHsK
KyAgICAgICAgaWYgKGVsZW0tPnRhZ05hbWUgPT0gdGFnTmFtZSkgewogICAgICAgICAgICAgaW50
IHN0cmF5VGFibGUgPSBpblN0cmF5VGFibGVDb250ZW50OwogICAgICAgICAgICAgcG9wT25lQmxv
Y2soKTsKLSAgICAgICAgICAgIEVsZW0gPSAwOworICAgICAgICAgICAgZWxlbSA9IDA7CiAKICAg
ICAgICAgICAgIC8vIFRoaXMgZWxlbWVudCB3YXMgdGhlIHJvb3Qgb2Ygc29tZSBtYWxmb3JtZWQg
Y29udGVudCBqdXN0IGluc2lkZSBhbiBpbXBsaWNpdCBvcgogICAgICAgICAgICAgLy8gZXhwbGlj
aXQgPHRib2R5PiBvciA8dHI+LgpAQCAtMTI0Miw3ICsxMjgwLDcgQEAgdm9pZCBIVE1MUGFyc2Vy
Ojpwb3BCbG9jayhjb25zdCBBdG9taWNTdAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKGZvcm0gJiYgRWxlbS0+dGFnTmFtZSA9PSBmb3Jt
VGFnKQorICAgICAgICAgICAgaWYgKGZvcm0gJiYgZWxlbS0+dGFnTmFtZSA9PSBmb3JtVGFnKQog
ICAgICAgICAgICAgICAgIC8vIEEgPGZvcm0+IGlzIGJlaW5nIGNsb3NlZCBwcmVtYXR1cmVseSAo
YW5kIHRoaXMgaXMKICAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgSFRNTCkuICBTZXQgYW4g
YXR0cmlidXRlIG9uIHRoZSBmb3JtIHRvIGNsZWFyIG91dCBpdHMKICAgICAgICAgICAgICAgICAv
LyBib3R0b20gbWFyZ2luLgpAQCAtMTI1MCwxOSArMTI4OCwxOSBAQCB2b2lkIEhUTUxQYXJzZXI6
OnBvcEJsb2NrKGNvbnN0IEF0b21pY1N0CiAKICAgICAgICAgICAgIC8vIFNjaGVkdWxlIHRoaXMg
dGFnIGZvciByZW9wZW5pbmcKICAgICAgICAgICAgIC8vIGFmdGVyIHdlIGNvbXBsZXRlIHRoZSBj
bG9zZSBvZiB0aGlzIGVudGlyZSBibG9jay4KLSAgICAgICAgICAgIGlmIChpc0FmZmVjdGVkQnlT
dHlsZSAmJiBpc1Jlc2lkdWFsU3R5bGVUYWcoRWxlbS0+dGFnTmFtZSkpCisgICAgICAgICAgICBp
ZiAoaXNBZmZlY3RlZEJ5U3R5bGUgJiYgaXNSZXNpZHVhbFN0eWxlVGFnKGVsZW0tPnRhZ05hbWUp
KQogICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIG92ZXJsb2FkZWQgdGhlIHVzZSBvZiBzdGFjayBl
bGVtZW50cyBhbmQgYXJlIGp1c3QgcmV1c2luZyB0aGUKICAgICAgICAgICAgICAgICAvLyBzdHJ1
Y3Qgd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBtZWFuaW5nIHRvIHRoZSB2YXJpYWJsZXMuICBJ
bnN0ZWFkIG9mIGNoYWluaW5nCiAgICAgICAgICAgICAgICAgLy8gZnJvbSBpbm5lcm1vc3QgdG8g
b3V0ZXJtb3N0LCB3ZSBidWlsZCB1cCBhIGxpc3Qgb2YgYWxsIHRoZSB0YWdzIHdlIG5lZWQgdG8g
cmVvcGVuCiAgICAgICAgICAgICAgICAgLy8gZnJvbSB0aGUgb3V0ZXJtb3N0IHRvIHRoZSBpbm5l
cm1vc3QsIGkuZS4sIHJlc2lkdWFsU3R5bGVTdGFjayB3aWxsIGVuZCB1cCBwb2ludGluZwogICAg
ICAgICAgICAgICAgIC8vIHRvIHRoZSBvdXRlcm1vc3QgdGFnIHdlIG5lZWQgdG8gcmVvcGVuLgot
ICAgICAgICAgICAgICAgIC8vIFdlIGFsc28gc2V0IEVsZW0tPm5vZGUgdG8gYmUgdGhlIGFjdHVh
bCBlbGVtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIElEIHN0b3JlZCBpbgotICAgICAgICAg
ICAgICAgIC8vIEVsZW0tPmlkIHJhdGhlciB0aGFuIHRoZSBub2RlIHRoYXQgeW91IHNob3VsZCBw
b3AgdG8gd2hlbiB0aGUgZWxlbWVudCBnZXRzIHB1bGxlZCBvZmYKKyAgICAgICAgICAgICAgICAv
LyBXZSBhbHNvIHNldCBlbGVtLT5ub2RlIHRvIGJlIHRoZSBhY3R1YWwgZWxlbWVudCB0aGF0IGNv
cnJlc3BvbmRzIHRvIHRoZSBJRCBzdG9yZWQgaW4KKyAgICAgICAgICAgICAgICAvLyBlbGVtLT5p
ZCByYXRoZXIgdGhhbiB0aGUgbm9kZSB0aGF0IHlvdSBzaG91bGQgcG9wIHRvIHdoZW4gdGhlIGVs
ZW1lbnQgZ2V0cyBwdWxsZWQgb2ZmCiAgICAgICAgICAgICAgICAgLy8gdGhlIHN0YWNrLgogICAg
ICAgICAgICAgICAgIG1vdmVPbmVCbG9ja1RvU3RhY2socmVzaWR1YWxTdHlsZVN0YWNrKTsKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwb3BPbmVCbG9jaygpOwotICAgICAgICAg
ICAgRWxlbSA9IGJsb2NrU3RhY2s7CisgICAgICAgICAgICBlbGVtID0gYmxvY2tTdGFjazsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtMTMzNiwyMCArMTM3NCwyMCBAQCB2b2lkIEhUTUxQYXJzZXI6
OmZyZWVCbG9jaygpCiAKIHZvaWQgSFRNTFBhcnNlcjo6Y3JlYXRlSGVhZCgpCiB7Ci0gICAgaWYg
KGhlYWQgfHwgIWRvYygpLT5maXJzdENoaWxkKCkpCisgICAgaWYgKGhlYWQgfHwgIWRvY3VtZW50
LT5maXJzdENoaWxkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGhlYWQgPSBuZXcgSFRNTEhl
YWRFbGVtZW50KGRvY3VtZW50KTsKLSAgICBIVE1MRWxlbWVudCogYm9keSA9IGRvYygpLT5ib2R5
KCk7CisgICAgSFRNTEVsZW1lbnQqIGJvZHkgPSBkb2N1bWVudC0+Ym9keSgpOwogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgIGRvYygpLT5maXJzdENoaWxkKCktPmluc2VydEJlZm9yZSho
ZWFkLCBib2R5LCBlYyk7CisgICAgZG9jdW1lbnQtPmZpcnN0Q2hpbGQoKS0+aW5zZXJ0QmVmb3Jl
KGhlYWQsIGJvZHksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIGhlYWQgPSAwOwogfQogCi1O
b2RlKiBIVE1MUGFyc2VyOjpoYW5kbGVJc2luZGV4KFRva2VuKiB0KQorUGFzc1JlZlB0cjxOb2Rl
PiBIVE1MUGFyc2VyOjpoYW5kbGVJc2luZGV4KFRva2VuKiB0KQogewotICAgIE5vZGUqIG4gPSBu
ZXcgSFRNTERpdkVsZW1lbnQoZG9jdW1lbnQpOworICAgIFJlZlB0cjxOb2RlPiBuID0gbmV3IEhU
TUxEaXZFbGVtZW50KGRvY3VtZW50KTsKIAogICAgIE5hbWVkTWFwcGVkQXR0ck1hcCogYXR0cnMg
PSB0LT5hdHRycy5nZXQoKTsKIApAQCAtMTM1OSwyOCArMTM5NywyOSBAQCBOb2RlKiBIVE1MUGFy
c2VyOjpoYW5kbGVJc2luZGV4KFRva2VuKiB0CiAKICAgICBTdHJpbmcgdGV4dCA9IHNlYXJjaGFi
bGVJbmRleEludHJvZHVjdGlvbigpOwogICAgIGlmIChhdHRycykgewotICAgICAgICBpZiAoQXR0
cmlidXRlICphID0gYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0ocHJvbXB0QXR0cikpCisgICAgICAg
IGlmIChBdHRyaWJ1dGUqIGEgPSBhdHRycy0+Z2V0QXR0cmlidXRlSXRlbShwcm9tcHRBdHRyKSkK
ICAgICAgICAgICAgIHRleHQgPSBhLT52YWx1ZSgpLmRvbVN0cmluZygpICsgIiAiOwogICAgICAg
ICB0LT5hdHRycyA9IDA7CiAgICAgfQogCiAgICAgbi0+YWRkQ2hpbGQobmV3IEhUTUxIUkVsZW1l
bnQoZG9jdW1lbnQpKTsKICAgICBuLT5hZGRDaGlsZChuZXcgVGV4dChkb2N1bWVudCwgdGV4dCkp
OwotICAgIG4tPmFkZENoaWxkKGlzSW5kZXguZ2V0KCkpOworICAgIG4tPmFkZENoaWxkKGlzSW5k
ZXgucmVsZWFzZSgpKTsKICAgICBuLT5hZGRDaGlsZChuZXcgSFRNTEhSRWxlbWVudChkb2N1bWVu
dCkpOwogCi0gICAgcmV0dXJuIG47CisgICAgcmV0dXJuIG4ucmVsZWFzZSgpOwogfQogCiB2b2lk
IEhUTUxQYXJzZXI6OnN0YXJ0Qm9keSgpCiB7Ci0gICAgaWYoaW5Cb2R5KSByZXR1cm47CisgICAg
aWYgKGluQm9keSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgaW5Cb2R5ID0gdHJ1ZTsKIAotICAg
IGlmIChpc2luZGV4KSB7Ci0gICAgICAgIGluc2VydE5vZGUoaXNpbmRleC5nZXQoKSwgdHJ1ZSAv
KiBkb24ndCBkZWNlbmQgaW50byB0aGlzIG5vZGUgKi8pOwotICAgICAgICBpc2luZGV4ID0gMDsK
KyAgICBpZiAobV9pc2luZGV4RWxlbWVudCkgeworICAgICAgICBpbnNlcnROb2RlKG1faXNpbmRl
eEVsZW1lbnQuZ2V0KCksIHRydWUgLyogZG9uJ3QgZGVzY2VuZCBpbnRvIHRoaXMgbm9kZSAqLyk7
CisgICAgICAgIG1faXNpbmRleEVsZW1lbnQgPSAwOwogICAgIH0KIH0KIApAQCAtMTM5NSw3ICsx
NDM0LDcgQEAgdm9pZCBIVE1MUGFyc2VyOjpmaW5pc2hlZCgpCiAgICAgc2V0Q3VycmVudCgwKTsK
IAogICAgIC8vIFdhcm5pbmcsIHRoaXMgbWF5IGRlbGV0ZSB0aGUgdG9rZW5pemVyIGFuZCBwYXJz
ZXIsIHNvIGRvbid0IHRyeSB0byBkbyBhbnl0aGluZyBlbHNlIGFmdGVyIHRoaXMuCi0gICAgaWYg
KCFtX2ZyYWdtZW50KQorICAgIGlmICghbV9wYXJzaW5nRnJhZ21lbnQpCiAgICAgICAgIGRvY3Vt
ZW50LT5maW5pc2hlZFBhcnNpbmcoKTsKIH0KIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQYXJz
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5oCShyZXZpc2lvbiAy
MDA5MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTEgKzEsOSBAQAogLyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmll
cwotCiAgICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcnRpbiBKb25lcyAobWpvbmVzQGtkZS5vcmcp
CiAgICAgICAgICAgICAgIChDKSAxOTk3IFRvcmJlbiBXZWlzICh3ZWlzQGtkZS5vcmcpCiAgICAg
ICAgICAgICAgIChDKSAxOTk4IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKICAgICAg
ICAgICAgICAgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAgICBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAgICBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiwzNCArMjAsMzQgQEAKICAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAs
CiAgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAqLwotLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0vLwotLy8gS0RFIEhUTUwgV2lkZ2V0IC0tIEhUTUwgUGFyc2VyCiAKICNpZm5kZWYgSFRN
TFBhcnNlcl9oCiAjZGVmaW5lIEhUTUxQYXJzZXJfaAogCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50
LmgiCisjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IERvY3VtZW50OwogY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKLWNsYXNzIEZyYW1lVmlldzsKLWNs
YXNzIEhUTUxFbGVtZW50OworY2xhc3MgSFRNTERvY3VtZW50OwogY2xhc3MgSFRNTEZvcm1FbGVt
ZW50OwogY2xhc3MgSFRNTEhlYWRFbGVtZW50OwogY2xhc3MgSFRNTE1hcEVsZW1lbnQ7Ci1jbGFz
cyBIVE1MU3RhY2tFbGVtOworY2xhc3MgTm9kZTsKIGNsYXNzIFRva2VuOwogCitzdHJ1Y3QgSFRN
TFN0YWNrRWxlbTsKKwogLyoqCi0gKiBUaGUgcGFyc2VyIGZvciBodG1sLiBJdCByZWNlaXZlcyBh
IHN0cmVhbSBvZiB0b2tlbnMgZnJvbSB0aGUgSFRNTFRva2VuaXplciwgYW5kCi0gKiBidWlsZHMg
dXAgdGhlIERvY3VtZW50IHN0cnVjdHVyZSBmb3JtIGl0LgorICogVGhlIHBhcnNlciBmb3IgSFRN
TC4gSXQgcmVjZWl2ZXMgYSBzdHJlYW0gb2YgdG9rZW5zIGZyb20gdGhlIEhUTUxUb2tlbml6ZXIs
IGFuZAorICogYnVpbGRzIHVwIHRoZSBEb2N1bWVudCBzdHJ1Y3R1cmUgZnJvbSBpdC4KICAqLwot
Y2xhc3MgSFRNTFBhcnNlcgoteworY2xhc3MgSFRNTFBhcnNlciA6IE5vbmNvcHlhYmxlIHsKIHB1
YmxpYzoKLSAgICBIVE1MUGFyc2VyKERvY3VtZW50Kik7CisgICAgSFRNTFBhcnNlcihIVE1MRG9j
dW1lbnQqKTsKICAgICBIVE1MUGFyc2VyKERvY3VtZW50RnJhZ21lbnQqKTsKICAgICB2aXJ0dWFs
IH5IVE1MUGFyc2VyKCk7CiAKQEAgLTY4LDE3ICs2NiwxMiBAQCBwdWJsaWM6CiAgICAgICovCiAg
ICAgdm9pZCByZXNldCgpOwogCi0gICAgYm9vbCBza2lwTW9kZSgpIGNvbnN0IHsgcmV0dXJuICFk
aXNjYXJkX3VudGlsLmlzTnVsbCgpOyB9Ci0gICAgYm9vbCBub1NwYWNlcygpIGNvbnN0IHsgcmV0
dXJuICFpbkJvZHk7IH0KLQotICAgIEhUTUxEb2N1bWVudCAqZG9jKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50ICo+KGRvY3VtZW50KTsgfQorICAgIGJvb2wgc2tpcE1v
ZGUoKSBjb25zdCB7IHJldHVybiAhbV9za2lwTW9kZVRhZy5pc051bGwoKTsgfQogCiBwcml2YXRl
OgotICAgIHZvaWQgc2V0Q3VycmVudChOb2RlKiBuZXdDdXJyZW50KTsKKyAgICB2b2lkIHNldEN1
cnJlbnQoTm9kZSopOwogICAgIHZvaWQgZGVyZWZDdXJyZW50KCk7Ci0gICAgdm9pZCBzZXRTa2lw
TW9kZShjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSkgeyBkaXNjYXJkX3VudGlsID0gcU5hbWUu
bG9jYWxOYW1lKCk7IH0KLQotICAgIERvY3VtZW50KiBkb2N1bWVudDsKKyAgICB2b2lkIHNldFNr
aXBNb2RlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAogICAgIFBhc3NSZWZQdHI8Tm9kZT4gZ2V0
Tm9kZShUb2tlbiopOwogICAgIGJvb2wgYm9keUNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQ
dHI8Tm9kZT4mKTsKQEAgLTEwMywxOSArOTYsMTIgQEAgcHJpdmF0ZToKICAgICBib29sIHRhYmxl
U2VjdGlvbkNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKICAgICBib29s
IHRleHRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7CiAKLSAgICB2b2lk
IHByb2Nlc3NDbG9zZVRhZyhUb2tlbiAqKTsKKyAgICB2b2lkIHByb2Nlc3NDbG9zZVRhZyhUb2tl
biopOwogCi0gICAgYm9vbCBpbnNlcnROb2RlKE5vZGUgKm4sIGJvb2wgZmxhdCA9IGZhbHNlKTsK
LSAgICBib29sIGhhbmRsZUVycm9yKE5vZGUqIG4sIGJvb2wgZmxhdCwgY29uc3QgQXRvbWljU3Ry
aW5nJiBsb2NhbE5hbWUsIGludCB0YWdQcmlvcml0eSk7CisgICAgYm9vbCBpbnNlcnROb2RlKE5v
ZGUqLCBib29sIGZsYXQgPSBmYWxzZSk7CisgICAgYm9vbCBoYW5kbGVFcnJvcihOb2RlKiwgYm9v
bCBmbGF0LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9yaXR5KTsK
ICAgICAKLSAgICAvLyBUaGUgY3VycmVudGx5IGFjdGl2ZSBlbGVtZW50ICh0aGUgb25lIG5ldyBl
bGVtZW50cyB3aWxsIGJlIGFkZGVkIHRvKS4gQ2FuIGJlIGEgZG9jdW1lbnQgZnJhZ21lbnQsIGEg
ZG9jdW1lbnQgb3IgYW4gZWxlbWVudC4KLSAgICBOb2RlKiBjdXJyZW50OwotICAgIC8vIFdlIGNh
bid0IHJlZiBhIGRvY3VtZW50LCBidXQgd2UgZG9uJ3Qgd2FudCB0byBjb25zdGFudGx5IGNoZWNr
IGlmIGEgbm9kZSBpcyBhIGRvY3VtZW50IGp1c3QgdG8gZGVjaWRlIHdoZXRoZXIgdG8gZGVyZWYu
Ci0gICAgYm9vbCBkaWRSZWZDdXJyZW50OwotCi0gICAgSFRNTFN0YWNrRWxlbSAqYmxvY2tTdGFj
azsKLQotICAgIHZvaWQgcHVzaEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgaW50
IF9sZXZlbCk7CisgICAgdm9pZCBwdXNoQmxvY2soY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1l
LCBpbnQgbGV2ZWwpOwogICAgIHZvaWQgcG9wQmxvY2soY29uc3QgQXRvbWljU3RyaW5nJiB0YWdO
YW1lKTsKICAgICB2b2lkIHBvcEJsb2NrKGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lKSB7IHJl
dHVybiBwb3BCbG9jayhxTmFtZS5sb2NhbE5hbWUoKSk7IH0gLy8gQ29udmVuaWVuY2UgZnVuY3Rp
b24gZm9yIHJlYWRhYmlsaXR5LgogICAgIHZvaWQgcG9wT25lQmxvY2soKTsKQEAgLTEyMywxMiAr
MTA5LDE0IEBAIHByaXZhdGU6CiAgICAgaW5saW5lIEhUTUxTdGFja0VsZW0qIHBvcE9uZUJsb2Nr
Q29tbW9uKCk7CiAgICAgdm9pZCBwb3BJbmxpbmVCbG9ja3MoKTsKIAorICAgIGJvb2wgdGFnSXNP
blN0YWNrKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkgY29uc3Q7CisKICAgICB2b2lkIGZy
ZWVCbG9jaygpOwogCiAgICAgdm9pZCBjcmVhdGVIZWFkKCk7CiAKLSAgICBib29sIGlzUmVzaWR1
YWxTdHlsZVRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpOwotICAgIGJvb2wgaXNBZmZl
Y3RlZEJ5UmVzaWR1YWxTdHlsZShjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpOworICAgIHN0
YXRpYyBib29sIGlzUmVzaWR1YWxTdHlsZVRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUp
OworICAgIHN0YXRpYyBib29sIGlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoY29uc3QgQXRvbWlj
U3RyaW5nJiB0YWdOYW1lKTsKICAgICB2b2lkIGhhbmRsZVJlc2lkdWFsU3R5bGVDbG9zZVRhZ0Fj
cm9zc0Jsb2NrcyhIVE1MU3RhY2tFbGVtKik7CiAgICAgdm9pZCByZW9wZW5SZXNpZHVhbFN0eWxl
VGFncyhIVE1MU3RhY2tFbGVtKiwgTm9kZSogbWFsZm9ybWVkVGFibGVQYXJlbnQpOwogCkBAIC0x
MzcsNDcgKzEyNSwzMyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGlzSGVhZGVyVGFnKGNv
bnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSk7CiAgICAgdm9pZCBwb3BOZXN0ZWRIZWFkZXJUYWco
KTsKIAotICAgIGJvb2wgaXNJbmxpbmUoTm9kZSogbm9kZSkgY29uc3Q7CisgICAgYm9vbCBpc0lu
bGluZShOb2RlKikgY29uc3Q7CiAgICAgCi0gICAgLyoKLSAgICAgKiBjdXJyZW50bHkgYWN0aXZl
IGZvcm0KLSAgICAgKi8KLSAgICBIVE1MRm9ybUVsZW1lbnQgKmZvcm07CisgICAgdm9pZCBzdGFy
dEJvZHkoKTsgLy8gaW5zZXJ0cyB0aGUgaXNpbmRleCBlbGVtZW50CisgICAgUGFzc1JlZlB0cjxO
b2RlPiBoYW5kbGVJc2luZGV4KFRva2VuKik7CiAKLSAgICAvKgotICAgICAqIGN1cnJlbnQgbWFw
Ci0gICAgICovCi0gICAgSFRNTE1hcEVsZW1lbnQgKm1hcDsKKyAgICBEb2N1bWVudCogZG9jdW1l
bnQ7CiAKLSAgICAvKgotICAgICAqIHRoZSBoZWFkIGVsZW1lbnQuIE5lZWRlZCBmb3IgY3JhcHB5
IGh0bWwgd2hpY2ggZGVmaW5lcyA8YmFzZT4gYWZ0ZXIgPC9oZWFkPgotICAgICAqLwotICAgIEhU
TUxIZWFkRWxlbWVudCAqaGVhZDsKKyAgICAvLyBUaGUgY3VycmVudGx5IGFjdGl2ZSBlbGVtZW50
ICh0aGUgb25lIG5ldyBlbGVtZW50cyB3aWxsIGJlIGFkZGVkIHRvKS4gQ2FuIGJlIGEgZG9jdW1l
bnQgZnJhZ21lbnQsIGEgZG9jdW1lbnQgb3IgYW4gZWxlbWVudC4KKyAgICBOb2RlKiBjdXJyZW50
OworICAgIC8vIFdlIGNhbid0IHJlZiBhIGRvY3VtZW50LCBidXQgd2UgZG9uJ3Qgd2FudCB0byBj
b25zdGFudGx5IGNoZWNrIGlmIGEgbm9kZSBpcyBhIGRvY3VtZW50IGp1c3QgdG8gZGVjaWRlIHdo
ZXRoZXIgdG8gZGVyZWYuCisgICAgYm9vbCBkaWRSZWZDdXJyZW50OwogCi0gICAgLyoKLSAgICAg
KiBhIHBvc3NpYmxlIDxpc2luZGV4PiBlbGVtZW50IGluIHRoZSBoZWFkLiBDb21wYXRpYmlsaXR5
IGhhY2sgZm9yCi0gICAgICogaHRtbCBmcm9tIHRoZSBzdG9uZSBhZ2UKLSAgICAgKi8KLSAgICBS
ZWZQdHI8Tm9kZT4gaXNpbmRleDsKLSAgICBOb2RlKiBoYW5kbGVJc2luZGV4KFRva2VuKik7Cisg
ICAgSFRNTFN0YWNrRWxlbSogYmxvY2tTdGFjazsKIAotICAgIC8qCi0gICAgICogaW5zZXJ0cyB0
aGUgc3R1cGlkIGlzSW5kZXggZWxlbWVudC4KLSAgICAgKi8KLSAgICB2b2lkIHN0YXJ0Qm9keSgp
OworICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybTsgLy8gY3VycmVudGx5IGFjdGl2ZSBmb3JtCisg
ICAgSFRNTE1hcEVsZW1lbnQqIG1fY3VycmVudE1hcEVsZW1lbnQ7IC8vIGN1cnJlbnQgbWFwCisg
ICAgSFRNTEhlYWRFbGVtZW50KiBoZWFkOyAvLyBoZWFkIGVsZW1lbnQ7IG5lZWRlZCBmb3IgSFRN
TCB3aGljaCBkZWZpbmVzIDxiYXNlPiBhZnRlciA8L2hlYWQ+CisgICAgUmVmUHRyPE5vZGU+IG1f
aXNpbmRleEVsZW1lbnQ7IC8vIGEgcG9zc2libGUgPGlzaW5kZXg+IGVsZW1lbnQgaW4gdGhlIGhl
YWQKIAogICAgIGJvb2wgaW5Cb2R5OwogICAgIGJvb2wgaGF2ZUNvbnRlbnQ7CiAgICAgYm9vbCBo
YXZlRnJhbWVTZXQ7Ci0gICAgYm9vbCBlbmQ7CiAKLSAgICAvKgotICAgICAqIHRlbGxzIHRoZSBw
YXJzZXIgdG8gZGlzY2FyZCBhbGwgdGFncywgdW50aWwgaXQgcmVhY2hlcyB0aGUgb25lIHNwZWNp
ZmllZAotICAgICAqLwotICAgIEF0b21pY1N0cmluZyBkaXNjYXJkX3VudGlsOworICAgIEF0b21p
Y1N0cmluZyBtX3NraXBNb2RlVGFnOyAvLyB0ZWxscyB0aGUgcGFyc2VyIHRvIGRpc2NhcmQgYWxs
IHRhZ3MgdW50aWwgaXQgcmVhY2hlcyB0aGUgb25lIHNwZWNpZmllZAorICAgIGJvb2wgbV9pbkNh
bnZhc0JlZm9yZUZpcnN0T3BlblRhZzsKIAotICAgIGJvb2wgaGVhZExvYWRlZDsKLSAgICBib29s
IG1fZnJhZ21lbnQ7CisgICAgYm9vbCBtX3BhcnNpbmdGcmFnbWVudDsKICAgICBpbnQgaW5TdHJh
eVRhYmxlQ29udGVudDsKIH07CiAK
</data>
<flag name="review"
          id="5386"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13611</attachid>
            <date>2007-03-13 08:58:15 -0700</date>
            <delta_ts>2007-03-13 16:08:24 -0700</delta_ts>
            <desc>revised patch, with change log and regression tests</desc>
            <filename>UnclosedCanvasPatch.txt</filename>
            <type>text/plain</type>
            <size>51771</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIwMTQ5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMDctMDMtMTMgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIC0gdGVzdHMgZm9yIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyNzk0CisgICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUwMjgxNTQ+IFJFR1JFU1NJT046IFRy
aXBUaWsgcGxhbm5lciBhdCBhYWEuY29tCisgICAgICAgICAgbmV2ZXIgZmluaXNoZXMgbG9hZGlu
ZyAoMTI3OTQpCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy9jYW52YXMtaGlkZXMtZmFsbGJhY2st
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy9jYW52YXMtaGlkZXMt
ZmFsbGJhY2suaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvc2NyaXB0LWluc2lk
ZS1jYW52YXMtZmFsbGJhY2stZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nh
bnZhcy9zY3JpcHQtaW5zaWRlLWNhbnZhcy1mYWxsYmFjay5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2NhbnZhcy91bmNsb3NlZC1jYW52YXMtMS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvY2FudmFzL3VuY2xvc2VkLWNhbnZhcy0xLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvY2FudmFzL3VuY2xvc2VkLWNhbnZhcy0yLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9jYW52YXMvdW5jbG9zZWQtY2FudmFzLTIuaHRtbDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9jYW52YXMvdW5jbG9zZWQtY2FudmFzLTMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2NhbnZhcy91bmNsb3NlZC1jYW52YXMtMy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy91bmNsb3NlZC1jYW52YXMtNC1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvY2FudmFzL3VuY2xvc2VkLWNhbnZhcy00Lmh0bWw6IEFkZGVkLgor
CiAyMDA3LTAzLTEzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICAq
IGZhc3QvanMva2RlL1JlZ0V4cC1leHBlY3RlZC50eHQ6IEZpeCB0aGUgb25lIG90aGVyIHRlc3Qg
YWZmZWN0ZWQgYnkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1oaWRlcy1m
YWxsYmFjay1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvY2FudmFzLWhpZGVzLWZhbGxiYWNrLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1oaWRlcy1mYWxsYmFjay1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorVGhlIERPTSBwYXJ0IG9mIHRoaXMgdGVzdCBz
dWNjZWVkZWQuIFRoZSBjYW52YXMgZWxlbWVudCBoYWQgYXQgbGVhc3Qgb25lIGNoaWxkLCBpbmRp
Y2F0aW5nIHRoYXQgd2UgYXJlIGhpZGluZyB0ZXh0IGJ5IG5vdCByZW5kZXJpbmcgaXQsIGJ1dCB3
ZSBhcmUgY3JlYXRpbmcgRE9NIGVsZW1lbnRzIGFzIGV4cGVjdGVkLgorCitUaGVyZSBzaG91bGQg
YmUgbm8gdGV4dCBiZWxvdyB0aGlzLCBiZWNhdXNlIHRoZSB0ZXh0IGlzIGluc2lkZSBhIGNhbnZh
cyBlbGVtZW50IGFuZCBKYXZhU2NyaXB0IGlzIGVuYWJsZWQuCisKKwoKUHJvcGVydHkgY2hhbmdl
cyBvbjogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLWhpZGVzLWZhbGxiYWNrLWV4cGVj
dGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtaGlkZXMtZmFsbGJhY2suaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtaGlkZXMtZmFsbGJhY2su
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1oaWRl
cy1mYWxsYmFjay5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACis8aGVhZD4KKzxz
Y3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cD5U
aGlzIHRleHQgc2hvdWxkIE5PVCBiZSB2aXNpYmxlLiBJdCBzaG91bGQgYmUgb3ZlcndyaXR0ZW4g
YnkgdGhlIHJlc3VsdCBvZiB0aGUgdGVzdC48L3A+IAorPHA+VGhlcmUgc2hvdWxkIGJlIG5vIHRl
eHQgYmVsb3cgdGhpcywgYmVjYXVzZSB0aGUgdGV4dCBpcyBpbnNpZGUgYSBjYW52YXMgZWxlbWVu
dCBhbmQgSmF2YVNjcmlwdCBpcyBlbmFibGVkLjwvcD4gCis8Y2FudmFzPlRoaXMgdGV4dCBzaG91
bGQgTk9UIGJlIHZpc2libGUgaWYgSmF2YVNjcmlwdCBpcyBlbmFibGVkLjwvY2FudmFzPgorPHNj
cmlwdD4KK3ZhciByZXN1bHQgPSAiVGhlIERPTSBwYXJ0IG9mIHRoaXMgdGVzdCBGQUlMRUQuIFRo
ZSBjYW52YXMgZWxlbWVudCBkaWQgbm90IGhhdmUgYSBjaGlsZC4iOworaWYgKGRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCJjYW52YXMiKVswXS5maXJzdENoaWxkKQorICAgIHJlc3VsdCA9
ICJUaGUgRE9NIHBhcnQgb2YgdGhpcyB0ZXN0IHN1Y2NlZWRlZC4gVGhlIGNhbnZhcyBlbGVtZW50
IGhhZCBhdCBsZWFzdCBvbmUgY2hpbGQsICIKKyAgICAgICAgKyAiaW5kaWNhdGluZyB0aGF0IHdl
IGFyZSBoaWRpbmcgdGV4dCBieSBub3QgcmVuZGVyaW5nIGl0LCBidXQgd2UgYXJlIGNyZWF0aW5n
IERPTSBlbGVtZW50cyBhcyBleHBlY3RlZC4iCitkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgicCIpWzBdLmlubmVyVGV4dCA9IHJlc3VsdDsKKzwvc2NyaXB0PgorPC9ib2R5PgoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLWhpZGVzLWZhbGxi
YWNrLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9odG1sCk5h
bWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy9zY3JpcHQtaW5zaWRlLWNhbnZhcy1mYWxsYmFjay1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvc2NyaXB0LWluc2lkZS1jYW52YXMtZmFsbGJh
Y2stZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
c2NyaXB0LWluc2lkZS1jYW52YXMtZmFsbGJhY2stZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDIgQEAKK1RoaXMgdGV4dCB3YXMgc2V0IGJ5IGEgc2NyaXB0IGluc2lkZSBhIGNh
bnZhcyBlbGVtZW50LiBTdWNoIHNjcmlwdHMgcnVuIGV2ZW4gdGhvdWdoIHRoZSBjb250ZW50IGlz
IG5vdCBkaXNwbGF5ZWQuCisKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3NjcmlwdC1pbnNpZGUtY2FudmFzLWZhbGxiYWNrLWV4cGVjdGVkLnR4dApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy9zY3JpcHQtaW5zaWRlLWNhbnZhcy1mYWxsYmFjay5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3NjcmlwdC1pbnNpZGUtY2FudmFzLWZhbGxiYWNr
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9zY3JpcHQtaW5z
aWRlLWNhbnZhcy1mYWxsYmFjay5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2IEBACis8
aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8ZGl2PlRoaXMgdGV4dCBzaG91bGQgTk9UIGJlIHZpc2libGUsIGJlY2F1c2UgSmF2YVNj
cmlwdCBzaG91bGQgcmVwbGFjZSBpdC48L2Rpdj4gCis8Y2FudmFzPgorVGhpcyB0ZXh0IHNob3Vs
ZCBOT1QgYmUgdmlzaWJsZSBpZiBKYXZhU2NyaXB0IGlzIGVuYWJsZWQuCis8c2NyaXB0PgorZG9j
dW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpWzBdLmlubmVyVGV4dCA9ICJUaGlzIHRl
eHQgd2FzIHNldCBieSBhIHNjcmlwdCBpbnNpZGUgYSBjYW52YXMgZWxlbWVudC4gIgorICAgICsg
IlN1Y2ggc2NyaXB0cyBydW4gZXZlbiB0aG91Z2ggdGhlIGNvbnRlbnQgaXMgbm90IGRpc3BsYXll
ZC4iCis8L3NjcmlwdD4KKzwvY2FudmFzPgorPC9ib2R5PgoKUHJvcGVydHkgY2hhbmdlcyBvbjog
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvc2NyaXB0LWluc2lkZS1jYW52YXMtZmFsbGJhY2suaHRt
bApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwKTmFtZTogc3Zu
OmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3Vu
Y2xvc2VkLWNhbnZhcy0xLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy91bmNsb3NlZC1jYW52YXMtMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy91bmNsb3NlZC1jYW52YXMtMS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGhlcmUgc2hvdWxkIGJlIG5vIHRleHQgYmVs
b3cgdGhpcywgYmVjYXVzZSB0aGUgdGV4dCBpcyBpbnNpZGUgYSBjYW52YXMgZWxlbWVudC4gVGhl
IGNhbnZhcyBpcyBuZXZlciBjbG9zZWQsIGFuZCB0aGUgcmVzdCBvZiB0aGUgYm9keSBlbmRzIHVw
IGluc2lkZSBpdC4KKworCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy91bmNsb3NlZC1jYW52YXMtMS1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46
ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvdW5j
bG9zZWQtY2FudmFzLTEuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy91bmNsb3NlZC1jYW52YXMtMS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvdW5jbG9zZWQtY2FudmFzLTEuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MSBAQAorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cis8L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHA+VGhlcmUgc2hvdWxkIGJlIG5vIHRleHQgYmVsb3cgdGhpcywgYmVjYXVz
ZSB0aGUgdGV4dCBpcyBpbnNpZGUgYSBjYW52YXMgZWxlbWVudC4KK1RoZSBjYW52YXMgaXMgbmV2
ZXIgY2xvc2VkLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIGJvZHkgZW5kcyB1cCBpbnNpZGUgaXQuPC9w
PgorPGNhbnZhcz5UaGlzIHRleHQgc2hvdWxkIE5PVCBiZSB2aXNpYmxlIGlmIEphdmFTY3JpcHQg
aXMgZW5hYmxlZC4KKzwvYm9keT4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3VuY2xvc2VkLWNhbnZhcy0xLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWlt
ZS10eXBlCiAgICsgdGV4dC9odG1sCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy91bmNsb3NlZC1jYW52YXMtMi1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvdW5jbG9zZWQtY2FudmFz
LTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
dW5jbG9zZWQtY2FudmFzLTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBA
CitUaGlzIHRleHQgc2hvdWxkIGJlIHZpc2libGUsIGV2ZW4gdGhvdWdoIGl0J3MgcHJlY2VkZWQg
YnkgYW4gdW5jbG9zZWQgY2FudmFzIHRhZywgYmVjYXVzZSBvZiB0aGUgPC9kaXY+IHRoYXQgY2xv
c2VzIGFuIGVsZW1lbnQgb3BlbmVkIGJlZm9yZSB0aGUgY2FudmFzLiBUaGVyZSdzIG5vdGhpbmcg
c3BlY2lhbCBhYm91dCBkaXY7IHdlIGdldCB0aGUgc2FtZSByZXN1bHRzIHdpdGggb3RoZXIgdHlw
ZXMgb2YgZWxlbWVudHMuCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy91bmNsb3NlZC1jYW52YXMtMi1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46
ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvdW5j
bG9zZWQtY2FudmFzLTIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy91bmNsb3NlZC1jYW52YXMtMi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvdW5jbG9zZWQtY2FudmFzLTIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MiBAQAorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cis8L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPGRpdj48Y2FudmFzPjwvZGl2PgorVGhpcyB0ZXh0IHNob3VsZCBiZSB2aXNp
YmxlLCBldmVuIHRob3VnaCBpdCdzIHByZWNlZGVkIGJ5IGFuIHVuY2xvc2VkIGNhbnZhcyB0YWcs
CitiZWNhdXNlIG9mIHRoZSAmbHQ7L2RpdiZndDsgdGhhdCBjbG9zZXMgYW4gZWxlbWVudCBvcGVu
ZWQgYmVmb3JlIHRoZSBjYW52YXMuCitUaGVyZSdzIG5vdGhpbmcgc3BlY2lhbCBhYm91dCBkaXY7
IHdlIGdldCB0aGUgc2FtZSByZXN1bHRzIHdpdGggb3RoZXIgdHlwZXMgb2YgZWxlbWVudHMuCis8
L2JvZHk+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy91bmNs
b3NlZC1jYW52YXMtMi5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRl
eHQvaHRtbApOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvdW5jbG9zZWQtY2FudmFzLTMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3VuY2xvc2VkLWNhbnZhcy0zLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3VuY2xvc2VkLWNhbnZh
cy0zLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUaGVyZSBzaG91
bGQgYmUgbm8gdGV4dCBiZWxvdyB0aGlzLCBiZWNhdXNlIHRoZSB0ZXh0IGlzIGluc2lkZSBhIGNh
bnZhcyBlbGVtZW50IGFuZCB0aGUgPC9kaXY+IHRoYXQncyBhbHNvIGluc2lkZSB0aGUgY2FudmFz
IGVsZW1lbnQgZG9lcyBub3QgY2xvc2UgYW4gb3BlbiBlbGVtZW50LiBUaGUgY2FudmFzIGlzIG5l
dmVyIGNsb3NlZCwgYW5kIHRoZSByZXN0IG9mIHRoZSBib2R5IGVuZHMgdXAgaW5zaWRlIGl0LiBU
aGVyZSdzIG5vdGhpbmcgc3BlY2lhbCBhYm91dCBkaXY7IHdlIGdldCB0aGUgc2FtZSByZXN1bHRz
IHdpdGggb3RoZXIgdHlwZXMgb2YgZWxlbWVudHMuCisKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjog
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvdW5jbG9zZWQtY2FudmFzLTMtZXhwZWN0ZWQudHh0Cl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3VuY2xvc2VkLWNhbnZhcy0zLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvdW5jbG9zZWQtY2FudmFzLTMuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3VuY2xvc2VkLWNhbnZhcy0zLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRoZXJlIHNob3VsZCBiZSBubyB0ZXh0
IGJlbG93IHRoaXMsIGJlY2F1c2UgdGhlIHRleHQgaXMgaW5zaWRlIGEgY2FudmFzIGVsZW1lbnQK
K2FuZCB0aGUgJmx0Oy9kaXYmZ3Q7IHRoYXQncyBhbHNvIGluc2lkZSB0aGUgY2FudmFzIGVsZW1l
bnQgZG9lcyBub3QgY2xvc2UgYW4gb3BlbiBlbGVtZW50LgorVGhlIGNhbnZhcyBpcyBuZXZlciBj
bG9zZWQsIGFuZCB0aGUgcmVzdCBvZiB0aGUgYm9keSBlbmRzIHVwIGluc2lkZSBpdC4KK1RoZXJl
J3Mgbm90aGluZyBzcGVjaWFsIGFib3V0IGRpdjsgd2UgZ2V0IHRoZSBzYW1lIHJlc3VsdHMgd2l0
aCBvdGhlciB0eXBlcyBvZiBlbGVtZW50cy48L3A+Cis8Y2FudmFzPjwvZGl2PlRoaXMgdGV4dCBz
aG91bGQgTk9UIGJlIHZpc2libGUgaWYgSmF2YVNjcmlwdCBpcyBlbmFibGVkLgorPC9ib2R5PgoK
UHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvdW5jbG9zZWQtY2Fu
dmFzLTMuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwK
TmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3VuY2xvc2VkLWNhbnZhcy00LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy91bmNsb3NlZC1jYW52YXMtNC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy91bmNsb3NlZC1jYW52YXMtNC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGhlcmUgc2hvdWxkIGJlIG5v
IHRleHQgYmVsb3cgdGhpcywgYmVjYXVzZSB0aGUgdGV4dCBpcyBpbnNpZGUgYSBjYW52YXMgZWxl
bWVudCBhbmQgdGhlIDwvZGl2PiB0aGF0J3MgYWxzbyBpbnNpZGUgdGhlIGNhbnZhcyBlbGVtZW50
IGRvZXMgbm90IGNsb3NlIGFuIG9wZW4gZWxlbWVudC4gVGhlIGNhbnZhcyBpcyBuZXZlciBjbG9z
ZWQsIGFuZCB0aGUgcmVzdCBvZiB0aGUgYm9keSBlbmRzIHVwIGluc2lkZSBpdC4gVGhlcmUncyBu
b3RoaW5nIHNwZWNpYWwgYWJvdXQgZGl2OyB3ZSBnZXQgdGhlIHNhbWUgcmVzdWx0cyB3aXRoIG90
aGVyIHR5cGVzIG9mIGVsZW1lbnRzLiBUaGUgZmFjdCB0aGF0IHRoZSBjYW52YXMgdGFnIHVzZXMg
WE1MIHNlbGYtY2xvc2luZyBzeW50YXggaGFzIG5vIGVmZmVjdC4KKworCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy91bmNsb3NlZC1jYW52YXMtNC1leHBlY3Rl
ZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvdW5jbG9zZWQtY2FudmFzLTQuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy91bmNsb3NlZC1jYW52YXMtNC5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvdW5jbG9zZWQtY2FudmFzLTQuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHA+VGhlcmUgc2hvdWxkIGJl
IG5vIHRleHQgYmVsb3cgdGhpcywgYmVjYXVzZSB0aGUgdGV4dCBpcyBpbnNpZGUgYSBjYW52YXMg
ZWxlbWVudAorYW5kIHRoZSAmbHQ7L2RpdiZndDsgdGhhdCdzIGFsc28gaW5zaWRlIHRoZSBjYW52
YXMgZWxlbWVudCBkb2VzIG5vdCBjbG9zZSBhbiBvcGVuIGVsZW1lbnQuCitUaGUgY2FudmFzIGlz
IG5ldmVyIGNsb3NlZCwgYW5kIHRoZSByZXN0IG9mIHRoZSBib2R5IGVuZHMgdXAgaW5zaWRlIGl0
LgorVGhlcmUncyBub3RoaW5nIHNwZWNpYWwgYWJvdXQgZGl2OyB3ZSBnZXQgdGhlIHNhbWUgcmVz
dWx0cyB3aXRoIG90aGVyIHR5cGVzIG9mIGVsZW1lbnRzLgorVGhlIGZhY3QgdGhhdCB0aGUgY2Fu
dmFzIHRhZyB1c2VzIFhNTCBzZWxmLWNsb3Npbmcgc3ludGF4IGhhcyBubyBlZmZlY3QuPC9wPgor
PGNhbnZhcy8+PC9kaXY+VGhpcyB0ZXh0IHNob3VsZCBOT1QgYmUgdmlzaWJsZSBpZiBKYXZhU2Ny
aXB0IGlzIGVuYWJsZWQuCis8L2JvZHk+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy91bmNsb3NlZC1jYW52YXMtNC5odG1sCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3Zu
Om1pbWUtdHlwZQogICArIHRleHQvaHRtbApOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZl
CgpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDIwMTUwKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw4NiBAQAorMjAwNy0wMy0xMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBm
aXggaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3OTQKKyAgICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNTAyODE1ND4gUkVHUkVTU0lPTjogVHJpcFRpayBwbGFubmVyIGF0
IGFhYS5jb20KKyAgICAgICAgICBuZXZlciBmaW5pc2hlcyBsb2FkaW5nICgxMjc5NCkKKworICAg
ICAgICBDaGFuZ2UgPGNhbnZhcz4gZWxlbWVudHMgc28gdGhhdCB0aGVpciBjb250ZW50cyBhcmUg
cGFyc2VkIG5vcm1hbGx5LAorICAgICAgICBidXQgbm90IHJlbmRlcmVkLiBUaGlzIGNoYW5nZSBm
aXhlcyB0aGUgYnVnLCBiZWNhdXNlIG5vcm1hbCBwYXJzaW5nCisgICAgICAgIHJ1bGVzIGNsb3Nl
IHRoZSA8Y2FudmFzPiBlbGVtZW50IGluIHRoYXQgY2FzZS4gVGhlIHNwZWNpYWwgcGFyc2VyCisg
ICAgICAgIHN0dWZmIHdhcyBqdXN0IGdldHRpbmcgaW4gdGhlIHdheS4KKworICAgICAgICBBbHNv
IGRvIHNvbWUgYmFzaWMgY2xlYW51cCB0byB0aGUgSFRNTCBwYXJzZXIuIFRoaXMgd2FzIG1vdGl2
YXRlZCBieQorICAgICAgICBhbiBlYXJsaWVyIHZlcnNpb24gb2YgdGhpcyBwYXRjaCB0aGF0IG1h
ZGUgZXZlbiBtb3JlIGNoYW5nZXMgdG8gdGhlCisgICAgICAgIHBhcnNlciwgYnV0IHRoZSBjbGVh
bnVwIGlzIHN0aWxsIHdvcnRoIGxhbmRpbmcuCisKKyAgICAgICAgVGVzdDogZmFzdC9jYW52YXMv
Y2FudmFzLWhpZGVzLWZhbGxiYWNrLmh0bWwKKyAgICAgICAgVGVzdDogZmFzdC9jYW52YXMvc2Ny
aXB0LWluc2lkZS1jYW52YXMtZmFsbGJhY2suaHRtbAorICAgICAgICBUZXN0OiBmYXN0L2NhbnZh
cy91bmNsb3NlZC1jYW52YXMtMS5odG1sCisgICAgICAgIFRlc3Q6IGZhc3QvY2FudmFzL3VuY2xv
c2VkLWNhbnZhcy0yLmh0bWwKKyAgICAgICAgVGVzdDogZmFzdC9jYW52YXMvdW5jbG9zZWQtY2Fu
dmFzLTMuaHRtbAorICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy91bmNsb3NlZC1jYW52YXMtNC5o
dG1sCisKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6IEFkZGVkIGEgZGF0YSBt
ZW1iZXIgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIHRoZQorICAgICAgICByZW5kZXJlciBpcyBh
IFJlbmRlckhUTUxDYW52YXMgb3Igbm90LgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZVJlbmRl
cmVyKTogSWYgSmF2YVNjcmlwdCBpcyBlbmFibGVkLCBjcmVhdGUKKyAgICAgICAgYSBSZW5kZXJI
VE1MQ2FudmFzLiBJZiBpdCdzIG5vdCwgbGV0IHRoZSBkZWZhdWx0IGNvZGUgY3JlYXRlIHRoZSBk
ZWZhdWx0IHR5cGUKKyAgICAgICAgb2YgcmVuZGVyZXIsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGZh
bGxiYWNrIGNvbnRlbnQgYmVpbmcgdmlzaWJsZS4gVGhlCisgICAgICAgIFJlbmRlckhUTUxDYW52
YXMgY2xhc3MgYWxyZWFkeSBoaWRlcyBhbGwgb2YgaXRzIGNoaWxkcmVuLiBTZXQgdGhlIG1fcmVu
ZGVyZXJJc0NhbnZhcworICAgICAgICBib29sZWFuIGFjY29yZGluZ2x5LiBTaW5jZSB0aGUgYWN0
dWFsIHN0b3JhZ2UgZm9yIHRoZSBjYW52YXMgaXMgYWxsb2NhdGVkIGxhemlseQorICAgICAgICB3
aGVuIHlvdSBhY3R1YWxseSBnZXQgYSBkcmF3aW5nIGNvbnRleHQsIHdlIGRvbid0IG5lZWQgdG8g
ZG8gYW55dGhpbmcgc3BlY2lhbAorICAgICAgICB0byBwcmV2ZW50IGl0IHdoZW4gSmF2YVNjcmlw
dCBpcyBkaXNhYmxlZDsgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyB3b24ndCBiZSBjYWxsZWQuCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQpOiBQcm90ZWN0IHRoZSBj
b2RlIHRoYXQgbWFuaXB1bGF0ZXMgdGhlCisgICAgICAgIFJlbmRlckhUTUxDYW52YXMgd2l0aCBh
IGNoZWNrIG9mIG1fcmVuZGVyZXJJc0NhbnZhcy4gVGhpcyBpcyB0aGUgb25seSBjb2RlIGluc2lk
ZQorICAgICAgICB0aGUgRE9NIGVsZW1lbnQgdGhhdCByZWxpZXMgb24gdGhlIHJlbmRlcmVyIHR5
cGUuCisKKyAgICAgICAgKiBodG1sL0hUTUxQYXJzZXIuaDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNs
dWRlcy4gTWFya2VkIEhUTUxQYXJzZXIgYXMKKyAgICAgICAgTm9uY29weWFibGUuIENoYW5nZWQg
dGhlIERvY3VtZW50IHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgdG8gaW5zdGVhZAorICAg
ICAgICBvZiBIVE1MRG9jdW1lbnQuIFJlbmFtZWQgZGlzY2FyZF91bnRpbCB0byBtX3NraXBNb2Rl
VGFnIGZvciBjbGFyaXR5LgorICAgICAgICBSZW1vdmVkIHVudXNlZCBub1NwYWNlcyBmdW5jdGlv
biBhbmQgdW5uZWVkZWQgcHVibGljIGRvYygpIGZ1bmN0aW9uLgorICAgICAgICBNb3ZlZCBkYXRh
IG1lbWJlcnMgYWxsIGRvd24gdG8gdGhlIGVuZCBzbyB5b3UgY2FuIHNlZSB0aGVtIHRvZ2V0aGVy
IGluIG9yZGVyLgorICAgICAgICBSZW5hbWVkIG1hcCB0byBtX2N1cnJlbnRNYXBFbGVtZW50IGFu
ZCBpc2luZGV4IHRvIG1faXNpbmRleEVsZW1lbnQuCisgICAgICAgIFJlbW92ZWQgdW51c2VkIGVu
ZCBhbmQgaGVhZExvYWRlZCBkYXRhIG1lbWJlcnMuICBSZW5hbWVkIG1fZnJhZ21lbnQgdG8KKyAg
ICAgICAgbV9pc1BhcnNpbmdGcmFnbWVudCB0byBtYWtlIGl0IGNsZWFyZXIgdGhhdCBpdCdzIGEg
Ym9vbGVhbiwgbm90IGEgZnJhZ21lbnQuCisKKyAgICAgICAgKiBodG1sL0hUTUxQYXJzZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6SFRNTFBhcnNlcik6IENoYW5nZWQgdG8g
dXNlIG1lbWJlciBjb25zdHJ1Y3Rpb24KKyAgICAgICAgc3ludGF4IGluc3RlYWQgb2YgY2FsbGlu
ZyByZXNldCgpLiBUaGlzIGlzIGVzcGVjaWFsbHkgaGVscGZ1bCBpbiB0aGUKKyAgICAgICAgZnJh
Z21lbnQgY2FzZSwgd2hlcmUgY2FsbGluZyByZXNldCgpIGxhdGVyIG9uIGlzIGlsbGVnYWwsIHNv
IG5vdCB1c2luZworICAgICAgICBpdCBpbiB0aGUgY29uc3RydWN0b3IgbGV0cyB1cyBhc3NlcnQu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjp+SFRNTFBhcnNlcik6IERpZCBhbiBleHBs
aWNpdCBkZXJlZiBpbnN0ZWFkIG9mCisgICAgICAgIGNhbGxpbmcgc2V0Q3VycmVudCBmb3IgaXRz
IHNpZGUgZWZmZWN0LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6cmVzZXQpOiBVcGRh
dGVkIGZvciBtZW1iZXIgbmFtZSBjaGFuZ2VzIGFuZCByZW1vdmFsCisgICAgICAgIGFuZCB0byB1
c2UgZG9jdW1lbnQgaW5zdGVhZCBvZiBkb2MoKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJz
ZXI6OnNldEN1cnJlbnQpOiBVc2UgZG9jdW1lbnQgaW5zdGVhZCBvZiBkb2MoKS4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxQYXJzZXI6OnNldFNraXBNb2RlKTogQWRkZWQuIE5vIGxvbmdlciBpbmxp
bmUuIE5vdyBzZXRzIHRoZQorICAgICAgICBtX2luQ2FudmFzQmVmb3JlRmlyc3RPcGVuVGFnIGRh
dGEgbWVtYmVyIHRvIGZhbHNlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6cGFyc2VU
b2tlbik6IFRpZ2h0ZW5lZCB1cCB0aGUgc2tpcCBtb2RlIGxvZ2ljIGF0IHRoZQorICAgICAgICB0
b3Agb2YgdGhlIGZ1bmN0aW9uLCBhbmQgYWRkZWQgYSBGSVhNRSBhYm91dCB0aGUgc3RyYW5nZSBj
YXNlIHRoZXJlIHdoZXJlCisgICAgICAgIHdlIGRvbid0IHNraXAgeWV0IHN0YXkgaW4gc2tpcCBt
b2RlLiBVcGRhdGVkIGZvciByZW5hbWluZyBhbmQgZG9jKCkuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MUGFyc2VyOjppbnNlcnROb2RlKTogVXBkYXRlZCBmb3IgcmVuYW1pbmcgYW5kIGRvYygpLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6aGFuZGxlRXJyb3IpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OmZyYW1lc2V0Q3JlYXRlRXJyb3JDaGVjayk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6aXNpbmRleENyZWF0ZUVycm9yQ2hlY2sp
OiBDaGFuZ2VkIHRvIHVzZSBSZWZQdHIuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjpu
b3NjcmlwdENyZWF0ZUVycm9yQ2hlY2spOiBVcGRhdGVkIGZvciByZW5hbWluZyBhbmQgZG9jKCku
CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjptYXBDcmVhdGVFcnJvckNoZWNrKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjpnZXROb2RlKTogUmVtb3ZlZCB0aGUg
c3BlY2lhbCBjYXNlIGZvciBjYW52YXMgaGVyZS4KKyAgICAgICAgQ2FudmFzIGZhbGxiYWNrIGlz
IG5vdyBoYW5kbGVkIGluIHRoZSBET00sIG5vdCB0aGUgcGFyc2VyLiBVcGRhdGVkIGZvcgorICAg
ICAgICByZW5hbWluZyBhbmQgZG9jKCkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjph
bGxvd05lc3RlZFJlZHVuZGFudFRhZyk6IENoYW5nZWQgYSAjZGVmaW5lIGludG8gYSBDKysKKyAg
ICAgICAgY29uc3RhbnQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjpwcm9jZXNzQ2xv
c2VUYWcpOiBVcGRhdGVkIGZvciByZW5hbWluZyBhbmQgZG9jKCkuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MUGFyc2VyOjppc0lubGluZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBh
cnNlcjo6dGFnSXNPblN0YWNrKTogQWRkZWQuIFVzZWQgYnkgbmV3IGNhbnZhcyBsb2dpYy4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OnBvcEJsb2NrKTogVXBkYXRlZCBmb3IgcmVuYW1p
bmcgYW5kIGRvYygpLiBBbHNvIHJlbmFtZWQKKyAgICAgICAgdGhlIGxvY2FsIHZhcmlhYmxlIEVs
ZW0gdG8gZWxlbS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OmNyZWF0ZUhlYWQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OmhhbmRsZUlzaW5kZXgpOiBDaGFu
Z2VkIHRvIHVzZSBSZWZQdHIuCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjpzdGFydEJv
ZHkpOiBVcGRhdGVkIGZvciByZW5hbWluZyBhbmQgZG9jKCkuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MUGFyc2VyOjpmaW5pc2hlZCk6IERpdHRvLgorCiAyMDA3LTAzLTEzICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGVsZS4KSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gMjAxNDYpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMwLDE1ICszMCwxNCBAQAogI2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKICNpbmNs
dWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKICNpbmNsdWRlICJDYW52YXNTdHlsZS5o
IgorI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySFRNTENhbnZhcy5oIgot
I2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2Ny
ZWVuLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05NSwx
MiArOTQsMTggQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaQogICAg
IEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAotUmVuZGVyT2Jq
ZWN0KiBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5h
LCBSZW5kZXJTdHlsZSAqc3R5bGUpCitSZW5kZXJPYmplY3QqIEhUTUxDYW52YXNFbGVtZW50Ojpj
cmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkKIHsK
LSAgICBSZW5kZXJIVE1MQ2FudmFzKiByID0gbmV3IChhcmVuYSkgUmVuZGVySFRNTENhbnZhcyh0
aGlzKTsKLSAgICByLT5zZXRJbnRyaW5zaWNXaWR0aCh3aWR0aCgpKTsKLSAgICByLT5zZXRJbnRy
aW5zaWNIZWlnaHQoaGVpZ2h0KCkpOwotICAgIHJldHVybiByOworICAgIGlmIChkb2N1bWVudCgp
LT5mcmFtZSgpICYmIGRvY3VtZW50KCktPmZyYW1lKCktPnNldHRpbmdzKCktPmlzSmF2YVNjcmlw
dEVuYWJsZWQoKSkgeworICAgICAgICBtX3JlbmRlcmVySXNDYW52YXMgPSB0cnVlOworICAgICAg
ICBSZW5kZXJIVE1MQ2FudmFzKiByID0gbmV3IChhcmVuYSkgUmVuZGVySFRNTENhbnZhcyh0aGlz
KTsKKyAgICAgICAgci0+c2V0SW50cmluc2ljV2lkdGgod2lkdGgoKSk7CisgICAgICAgIHItPnNl
dEludHJpbnNpY0hlaWdodChoZWlnaHQoKSk7CisgICAgICAgIHJldHVybiByOworICAgIH0KKwor
ICAgIG1fcmVuZGVyZXJJc0NhbnZhcyA9IGZhbHNlOworICAgIHJldHVybiBIVE1MRWxlbWVudDo6
Y3JlYXRlUmVuZGVyZXIoYXJlbmEsIHN0eWxlKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVu
dDo6c2V0SGVpZ2h0KGludCB2YWx1ZSkKQEAgLTE0NCwxMiArMTQ5LDEzIEBAIHZvaWQgSFRNTENh
bnZhc0VsZW1lbnQ6OnJlc2V0KCkKICAgICAgICAgaCA9IGRlZmF1bHRIZWlnaHQ7CiAgICAgbV9z
aXplID0gSW50U2l6ZSh3LCBoKTsKIAotICAgIFJlbmRlckhUTUxDYW52YXMqIHIgPSBzdGF0aWNf
Y2FzdDxSZW5kZXJIVE1MQ2FudmFzKj4ocmVuZGVyZXIoKSk7Ci0gICAgaWYgKHIpIHsKLSAgICAg
ICAgci0+c2V0SW50cmluc2ljV2lkdGgodyk7Ci0gICAgICAgIHItPnNldEludHJpbnNpY0hlaWdo
dChoKTsKLSAgICAgICAgci0+cmVwYWludCgpOwotICAgIH0KKyAgICBpZiAoUmVuZGVyT2JqZWN0
KiBybyA9IHJlbmRlcmVyKCkpCisgICAgICAgIGlmIChtX3JlbmRlcmVySXNDYW52YXMpIHsKKyAg
ICAgICAgICAgIFJlbmRlckhUTUxDYW52YXMqIHIgPSBzdGF0aWNfY2FzdDxSZW5kZXJIVE1MQ2Fu
dmFzKj4ocm8pOworICAgICAgICAgICAgci0+c2V0SW50cmluc2ljV2lkdGgodyk7CisgICAgICAg
ICAgICByLT5zZXRJbnRyaW5zaWNIZWlnaHQoaCk7CisgICAgICAgICAgICByLT5yZXBhaW50KCk7
CisgICAgICAgIH0KIAogICAgIG1fY3JlYXRlZERyYXdpbmdDb250ZXh0ID0gZmFsc2U7CiAgICAg
ZmFzdEZyZWUobV9kYXRhKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCShyZXZpc2lv
biAyMDE0NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Niw2ICs3Niw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVEcmF3aW5nQ29u
dGV4dCgpIGNvbnN0OwogICAgIHZvaWQgcmVzZXQoKTsKIAorICAgIGJvb2wgbV9yZW5kZXJlcklz
Q2FudmFzOworCiAgICAgUmVmUHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4gbV8yRENvbnRl
eHQ7CiAgICAgSW50U2l6ZSBtX3NpemU7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5jcHAJKHJldmlzaW9u
IDIwMTQ2KQorKysgV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDExICsxLDkgQEAKIC8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJy
YXJpZXMKLQogICAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJ0aW4gSm9uZXMgKG1qb25lc0BrZGUu
b3JnKQogICAgICAgICAgICAgICAoQykgMTk5NyBUb3JiZW4gV2VpcyAod2Vpc0BrZGUub3JnKQog
ICAgICAgICAgICAgICAoQykgMTk5OSwyMDAxIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAg
ICAgICAgICAgICAgIChDKSAyMDAwLDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
CisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzMsNyArMzEsNyBAQAog
I2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MRExpc3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnRGYWN0b3J5
LmgiCkBAIC01NiwxMyArNTQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKLS8qKgotICogQGludGVybmFsCi0gKi8KK2NvbnN0IGludCBtYXhS
ZWR1bmRhbnRUYWdEZXB0aCA9IDIwOwogCi1jbGFzcyBIVE1MU3RhY2tFbGVtCi17Ci1wdWJsaWM6
CitzdHJ1Y3QgSFRNTFN0YWNrRWxlbSA6IE5vbmNvcHlhYmxlIHsKICAgICBIVE1MU3RhY2tFbGVt
KGNvbnN0IEF0b21pY1N0cmluZyYgdCwgaW50IGx2bCwgTm9kZSogbiwgYm9vbCByLCBIVE1MU3Rh
Y2tFbGVtKiBueCkKICAgICAgICAgOiB0YWdOYW1lKHQpCiAgICAgICAgICwgbGV2ZWwobHZsKQpA
QCAtODgsNjAgKzgyLDc3IEBAIHB1YmxpYzoKIH07CiAKIC8qKgotICogQGludGVybmFsCi0gKgog
ICogVGhlIHBhcnNlciBwYXJzZXMgdG9rZW5pemVkIGlucHV0IGludG8gdGhlIGRvY3VtZW50LCBi
dWlsZGluZyB1cCB0aGUKLSAqIGRvY3VtZW50IHRyZWUuIElmIHRoZSBkb2N1bWVudCBpcyB3ZWxs
Zm9ybWVkLCBwYXJzaW5nIGl0IGlzCi0gKiBzdHJhaWdodGZvcndhcmQuCi0gKiBVbmZvcnR1bmF0
ZWx5LCBwZW9wbGUgY2FuJ3Qgd3JpdGUgd2VsbGZvcm1lZCBIVE1MIGRvY3VtZW50cywgc28gdGhl
IHBhcnNlcgotICogaGFzIHRvIGJlIHRvbGVyYW50IGFib3V0IGVycm9ycy4KKyAqIGRvY3VtZW50
IHRyZWUuIElmIHRoZSBkb2N1bWVudCBpcyB3ZWxsLWZvcm1lZCwgcGFyc2luZyBpdCBpcyBzdHJh
aWdodGZvcndhcmQuCisgKgorICogVW5mb3J0dW5hdGVseSwgd2UgaGF2ZSB0byBoYW5kbGUgbWFu
eSBIVE1MIGRvY3VtZW50cyB0aGF0IGFyZSBub3Qgd2VsbC1mb3JtZWQsCisgKiBzbyB0aGUgcGFy
c2VyIGhhcyB0byBiZSB0b2xlcmFudCBhYm91dCBlcnJvcnMuCisgKgorICogV2UgaGF2ZSB0byB0
YWtlIGNhcmUgb2YgYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBlcnJvciBjb25kaXRpb25zOgogICoK
LSAqIFdlIGhhdmUgdG8gdGFrZSBjYXJlIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29uZGl0aW9u
czoKICAqIDEuIFRoZSBlbGVtZW50IGJlaW5nIGFkZGVkIGlzIGV4cGxpY2l0bHkgZm9yYmlkZGVu
IGluc2lkZSBzb21lIG91dGVyIHRhZy4KICAqICAgIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQgY2xv
c2UgYWxsIHRhZ3MgdXAgdG8gdGhlIG9uZSwgd2hpY2ggZm9yYmlkcwogICogICAgdGhlIGVsZW1l
bnQsIGFuZCBhZGQgaXQgYWZ0ZXJ3YXJkcy4KLSAqIDIuIFdlIGFyZSBub3QgYWxsb3dlZCB0byBh
ZGQgdGhlIGVsZW1lbnQgZGlyZWN0bHkuIEl0IGNvdWxkIGJlLCB0aGF0Ci0gKiAgICB0aGUgcGVy
c29uIHdyaXRpbmcgdGhlIGRvY3VtZW50IGZvcmdvdCBzb21lIHRhZyBpbmJldHdlZW4gKG9yIHRo
YXQgdGhlCi0gKiAgICB0YWcgaW5iZXR3ZWVuIGlzIG9wdGlvbmFsLi4uKSBUaGlzIGNvdWxkIGJl
IHRoZSBjYXNlIHdpdGggdGhlIGZvbGxvd2luZwotICogICAgdGFnczogSFRNTCBIRUFEIEJPRFkg
VEJPRFkgVFIgVEQgTEkgKGRpZCBJIGZvcmdldCBhbnk/KQotICogMy4gV2Ugd2FuJ3QgdG8gYWRk
IGEgYmxvY2sgZWxlbWVudCBpbnNpZGUgdG8gYW4gaW5saW5lIGVsZW1lbnQuIENsb3NlIGFsbAor
ICoKKyAqIDIuIFdlIGFyZSBub3QgYWxsb3dlZCB0byBhZGQgdGhlIGVsZW1lbnQgZGlyZWN0bHku
IEl0IGNvdWxkIGJlIHRoYXQKKyAqICAgIHRoZSBwZXJzb24gd3JpdGluZyB0aGUgZG9jdW1lbnQg
Zm9yZ290IHNvbWUgdGFnIGluIGJldHdlZW4gKG9yIHRoYXQgdGhlCisgKiAgICB0YWcgaW4gYmV0
d2VlbiBpcyBvcHRpb25hbCkuIFRoaXMgY291bGQgYmUgdGhlIGNhc2Ugd2l0aCB0aGUgZm9sbG93
aW5nCisgKiAgICB0YWdzOiBIVE1MIEhFQUQgQk9EWSBUQk9EWSBUUiBURCBMSSAoZGlkIEkgZm9y
Z2V0IGFueT8pLgorICoKKyAqIDMuIFdlIHdhbnQgdG8gYWRkIGEgYmxvY2sgZWxlbWVudCBpbnNp
ZGUgdG8gYW4gaW5saW5lIGVsZW1lbnQuIENsb3NlIGFsbAogICogICAgaW5saW5lIGVsZW1lbnRz
IHVwIHRvIHRoZSBuZXh0IGhpZ2hlciBibG9jayBlbGVtZW50LgotICogNC4gSWYgdGhpcyBkb2Vz
bid0IGhlbHAgY2xvc2UgZWxlbWVudHMsIHVudGlsIHdlIGFyZSBhbGxvd2VkIHRvIGFkZCB0aGUK
KyAqCisgKiA0LiBJZiB0aGlzIGRvZXNuJ3QgaGVscCwgY2xvc2UgZWxlbWVudHMgdW50aWwgd2Ug
YXJlIGFsbG93ZWQgdG8gYWRkIHRoZQogICogICAgZWxlbWVudCBvciBpZ25vcmUgdGhlIHRhZy4K
ICAqCiAgKi8KLUhUTUxQYXJzZXI6OkhUTUxQYXJzZXIoRG9jdW1lbnQqIGRvYykgCisKK0hUTUxQ
YXJzZXI6OkhUTUxQYXJzZXIoSFRNTERvY3VtZW50KiBkb2MpIAogICAgIDogZG9jdW1lbnQoZG9j
KQotICAgICwgY3VycmVudCgwKQorICAgICwgY3VycmVudChkb2MpCiAgICAgLCBkaWRSZWZDdXJy
ZW50KGZhbHNlKQogICAgICwgYmxvY2tTdGFjaygwKQotICAgICwgbV9mcmFnbWVudChmYWxzZSkK
KyAgICAsIGZvcm0oMCkKKyAgICAsIG1fY3VycmVudE1hcEVsZW1lbnQoMCkKKyAgICAsIGhlYWQo
MCkKKyAgICAsIGluQm9keShmYWxzZSkKKyAgICAsIGhhdmVDb250ZW50KGZhbHNlKQorICAgICwg
aGF2ZUZyYW1lU2V0KGZhbHNlKQorICAgICwgbV9pc1BhcnNpbmdGcmFnbWVudChmYWxzZSkKKyAg
ICAsIGluU3RyYXlUYWJsZUNvbnRlbnQoMCkKIHsKLSAgICByZXNldCgpOwogfQogCiBIVE1MUGFy
c2VyOjpIVE1MUGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZyYWcpCiAgICAgOiBkb2N1bWVudChm
cmFnLT5kb2N1bWVudCgpKQotICAgICwgY3VycmVudCgwKQotICAgICwgZGlkUmVmQ3VycmVudChm
YWxzZSkKKyAgICAsIGN1cnJlbnQoZnJhZykKKyAgICAsIGRpZFJlZkN1cnJlbnQodHJ1ZSkKICAg
ICAsIGJsb2NrU3RhY2soMCkKLSAgICAsIG1fZnJhZ21lbnQodHJ1ZSkKKyAgICAsIGZvcm0oMCkK
KyAgICAsIG1fY3VycmVudE1hcEVsZW1lbnQoMCkKKyAgICAsIGhlYWQoMCkKKyAgICAsIGluQm9k
eSh0cnVlKQorICAgICwgaGF2ZUNvbnRlbnQoZmFsc2UpCisgICAgLCBoYXZlRnJhbWVTZXQoZmFs
c2UpCisgICAgLCBtX2lzUGFyc2luZ0ZyYWdtZW50KHRydWUpCisgICAgLCBpblN0cmF5VGFibGVD
b250ZW50KDApCiB7Ci0gICAgcmVzZXQoKTsKLSAgICBzZXRDdXJyZW50KGZyYWcpOwotICAgIGlu
Qm9keSA9IHRydWU7CisgICAgaWYgKGZyYWcpCisgICAgICAgIGZyYWctPnJlZigpOwogfQogCiBI
VE1MUGFyc2VyOjp+SFRNTFBhcnNlcigpCiB7CiAgICAgZnJlZUJsb2NrKCk7Ci0KLSAgICBzZXRD
dXJyZW50KDApOworICAgIGlmIChkaWRSZWZDdXJyZW50KSAKKyAgICAgICAgY3VycmVudC0+ZGVy
ZWYoKTsgCiB9CiAKIHZvaWQgSFRNTFBhcnNlcjo6cmVzZXQoKQogewotICAgIHNldEN1cnJlbnQo
ZG9jKCkpOworICAgIEFTU0VSVCghbV9pc1BhcnNpbmdGcmFnbWVudCk7CisKKyAgICBzZXRDdXJy
ZW50KGRvY3VtZW50KTsKIAogICAgIGZyZWVCbG9jaygpOwogCkBAIC0xNDksMTkgKzE2MCwxOCBA
QCB2b2lkIEhUTUxQYXJzZXI6OnJlc2V0KCkKICAgICBoYXZlRnJhbWVTZXQgPSBmYWxzZTsKICAg
ICBoYXZlQ29udGVudCA9IGZhbHNlOwogICAgIGluU3RyYXlUYWJsZUNvbnRlbnQgPSAwOwotICAg
IAorCiAgICAgZm9ybSA9IDA7Ci0gICAgbWFwID0gMDsKKyAgICBtX2N1cnJlbnRNYXBFbGVtZW50
ID0gMDsKICAgICBoZWFkID0gMDsKLSAgICBlbmQgPSBmYWxzZTsKLSAgICBpc2luZGV4ID0gMDsK
LSAgICAKLSAgICBkaXNjYXJkX3VudGlsID0gbnVsbEF0b207CisgICAgbV9pc2luZGV4RWxlbWVu
dCA9IDA7CisKKyAgICBtX3NraXBNb2RlVGFnID0gbnVsbEF0b207CiB9CiAKIHZvaWQgSFRNTFBh
cnNlcjo6c2V0Q3VycmVudChOb2RlKiBuZXdDdXJyZW50KSAKIHsKLSAgICBib29sIGRpZFJlZk5l
d0N1cnJlbnQgPSBuZXdDdXJyZW50ICYmIG5ld0N1cnJlbnQgIT0gZG9jKCk7CisgICAgYm9vbCBk
aWRSZWZOZXdDdXJyZW50ID0gbmV3Q3VycmVudCAmJiBuZXdDdXJyZW50ICE9IGRvY3VtZW50Owog
ICAgIGlmIChkaWRSZWZOZXdDdXJyZW50KSAKICAgICAgICAgbmV3Q3VycmVudC0+cmVmKCk7IAog
ICAgIGlmIChkaWRSZWZDdXJyZW50KSAKQEAgLTE3MCwxOSArMTgwLDIyIEBAIHZvaWQgSFRNTFBh
cnNlcjo6c2V0Q3VycmVudChOb2RlKiBuZXdDdXIKICAgICBkaWRSZWZDdXJyZW50ID0gZGlkUmVm
TmV3Q3VycmVudDsKIH0KIAotUGFzc1JlZlB0cjxOb2RlPiBIVE1MUGFyc2VyOjpwYXJzZVRva2Vu
KFRva2VuICp0KQorUGFzc1JlZlB0cjxOb2RlPiBIVE1MUGFyc2VyOjpwYXJzZVRva2VuKFRva2Vu
KiB0KQogewotICAgIGlmICghZGlzY2FyZF91bnRpbC5pc051bGwoKSkgewotICAgICAgICBpZiAo
dC0+dGFnTmFtZSA9PSBkaXNjYXJkX3VudGlsICYmICF0LT5iZWdpblRhZykKLSAgICAgICAgICAg
IGRpc2NhcmRfdW50aWwgPSBudWxsQXRvbTsKLQotICAgICAgICAvLyBkbyBub3Qgc2tpcCA8L2lm
cmFtZT4KLSAgICAgICAgaWYgKCFkaXNjYXJkX3VudGlsLmlzTnVsbCgpIHx8IChjdXJyZW50LT5s
b2NhbE5hbWUoKSAhPSB0LT50YWdOYW1lKSkKKyAgICBpZiAoIW1fc2tpcE1vZGVUYWcuaXNOdWxs
KCkpIHsKKyAgICAgICAgaWYgKCF0LT5iZWdpblRhZyAmJiB0LT50YWdOYW1lID09IG1fc2tpcE1v
ZGVUYWcpCisgICAgICAgICAgICAvLyBGb3VuZCB0aGUgZW5kIHRhZyBmb3IgdGhlIGN1cnJlbnQg
c2tpcCBtb2RlLCBzbyB3ZSdyZSBkb25lIHNraXBwaW5nLgorICAgICAgICAgICAgbV9za2lwTW9k
ZVRhZyA9IG51bGxBdG9tOworICAgICAgICBlbHNlIGlmIChjdXJyZW50LT5sb2NhbE5hbWUoKSA9
PSB0LT50YWdOYW1lKQorICAgICAgICAgICAgLy8gRG8gbm90IHNraXAgPC9pZnJhbWU+LgorICAg
ICAgICAgICAgLy8gRklYTUU6IFdoYXQgZG9lcyB0aGF0IGNvbW1lbnQgbWVhbj8gSG93IGNhbiBp
dCBiZSByaWdodCB0byBwYXJzZSBhIHRva2VuIHdpdGhvdXQgY2xlYXJpbmcgbV9za2lwTW9kZVRh
Zz8KKyAgICAgICAgICAgIDsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogCi0gICAgLy8gQXBwYXJlbnRseSBzb21lIHNpdGVzIHVzZSA8L2JyPiBpbnN0ZWFkIG9m
IDxicj4uICBCZSBjb21wYXRpYmxlIHdpdGggSUUgYW5kIEZpcmVmb3ggYW5kIHRyZWF0IHRoaXMg
bGlrZSA8YnI+LgotICAgIGlmICh0LT5pc0Nsb3NlVGFnKGJyVGFnKSAmJiBkb2MoKS0+aW5Db21w
YXRNb2RlKCkpCisgICAgLy8gQXBwYXJlbnRseSBzb21lIHNpdGVzIHVzZSA8L2JyPiBpbnN0ZWFk
IG9mIDxicj4uIEJlIGNvbXBhdGlibGUgd2l0aCBJRSBhbmQgRmlyZWZveCBhbmQgdHJlYXQgdGhp
cyBsaWtlIDxicj4uCisgICAgaWYgKHQtPmlzQ2xvc2VUYWcoYnJUYWcpICYmIGRvY3VtZW50LT5p
bkNvbXBhdE1vZGUoKSkKICAgICAgICAgdC0+YmVnaW5UYWcgPSB0cnVlOwogCiAgICAgaWYgKCF0
LT5iZWdpblRhZykgewpAQCAtMjM1LDggKzI0OCw4IEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTFBh
cnNlcjo6cGFyc2VUb2tlbigKICAgICAgICAgICAgIGUtPnNldEF0dHJpYnV0ZU1hcCgwKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmIChtYXAgPT0gbikKLSAgICAgICAgICAgIG1hcCA9IDA7Cisg
ICAgICAgIGlmIChtX2N1cnJlbnRNYXBFbGVtZW50ID09IG4pCisgICAgICAgICAgICBtX2N1cnJl
bnRNYXBFbGVtZW50ID0gMDsKIAogICAgICAgICBpZiAoZm9ybSA9PSBuKQogICAgICAgICAgICAg
Zm9ybSA9IDA7CkBAIC0yNjUsNyArMjc4LDcgQEAgc3RhdGljIGJvb2wgaXNUYWJsZVJlbGF0ZWQo
Tm9kZSogbikKICAgICByZXR1cm4gbi0+aGFzVGFnTmFtZSh0YWJsZVRhZykgfHwgaXNUYWJsZVBh
cnQobik7CiB9CiAKLWJvb2wgSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2RlICpuLCBib29sIGZs
YXQpCitib29sIEhUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZSogbiwgYm9vbCBmbGF0KQogewog
ICAgIFJlZlB0cjxOb2RlPiBwcm90ZWN0Tm9kZShuKTsKIApAQCAtMjk0LDEwICszMDcsMTAgQEAg
Ym9vbCBIVE1MUGFyc2VyOjppbnNlcnROb2RlKE5vZGUgKm4sIGJvbwogICAgICAgICAgICAgY3Vy
cmVudCA9IG5ld05vZGU7CiAgICAgICAgICAgICBkaWRSZWZDdXJyZW50ID0gdHJ1ZTsKICAgICAg
ICAgfQotICAgICAgICBpZiAocGFyZW50QXR0YWNoZWQgJiYgIW4tPmF0dGFjaGVkKCkgJiYgIW1f
ZnJhZ21lbnQpCisgICAgICAgIGlmIChwYXJlbnRBdHRhY2hlZCAmJiAhbi0+YXR0YWNoZWQoKSAm
JiAhbV9pc1BhcnNpbmdGcmFnbWVudCkKICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGlmIChwYXJlbnRBdHRhY2hlZCAmJiAhbi0+YXR0YWNoZWQoKSAmJiAh
bV9mcmFnbWVudCkKKyAgICAgICAgaWYgKHBhcmVudEF0dGFjaGVkICYmICFuLT5hdHRhY2hlZCgp
ICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KQogICAgICAgICAgICAgbi0+YXR0YWNoKCk7CiAgICAg
ICAgIG4tPmNsb3NlUmVuZGVyZXIoKTsKICAgICB9CkBAIC0zMDgsNyArMzIxLDcgQEAgYm9vbCBI
VE1MUGFyc2VyOjppbnNlcnROb2RlKE5vZGUgKm4sIGJvbwogYm9vbCBIVE1MUGFyc2VyOjpoYW5k
bGVFcnJvcihOb2RlKiBuLCBib29sIGZsYXQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1l
LCBpbnQgdGFnUHJpb3JpdHkpCiB7CiAgICAgLy8gRXJyb3IgaGFuZGxpbmcgY29kZS4gIFRoaXMg
aXMganVzdCBhZCBob2MgaGFuZGxpbmcgb2Ygc3BlY2lmaWMgcGFyZW50L2NoaWxkIGNvbWJpbmF0
aW9ucy4KLSAgICBIVE1MRWxlbWVudCAqZTsKKyAgICBIVE1MRWxlbWVudCogZTsKICAgICBib29s
IGhhbmRsZWQgPSBmYWxzZTsKIAogICAgIC8vIDEuIENoZWNrIG91dCB0aGUgZWxlbWVudCdzIHRh
ZyBuYW1lIHRvIGRlY2lkZSBob3cgdG8gZGVhbCB3aXRoIGVycm9ycy4KQEAgLTMzMiw3ICszNDUs
NyBAQCBib29sIEhUTUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvCiAgICAgICAgICAg
ICAgICAgY3JlYXRlSGVhZCgpOwogICAgICAgICAgICAgaWYgKGhlYWQpIHsKICAgICAgICAgICAg
ICAgICBpZiAoaGVhZC0+YWRkQ2hpbGQobikpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFu
LT5hdHRhY2hlZCgpICYmICFtX2ZyYWdtZW50KQorICAgICAgICAgICAgICAgICAgICBpZiAoIW4t
PmF0dGFjaGVkKCkgJiYgIW1faXNQYXJzaW5nRnJhZ21lbnQpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBuLT5hdHRhY2goKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlCkBAIC0zNDAsMTIgKzM1MywxMiBAQCBib29sIEhUTUxQYXJzZXI6
OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBp
ZiAoaC0+aGFzTG9jYWxOYW1lKGh0bWxUYWcpKSB7CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnQt
PmlzRG9jdW1lbnROb2RlKCkgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRvYygpLT5maXJzdENo
aWxkKCktPmhhc1RhZ05hbWUoaHRtbFRhZykpIHsKKyAgICAgICAgICAgICAgICBpZiAoZG9jdW1l
bnQtPmZpcnN0Q2hpbGQoKS0+aGFzVGFnTmFtZShodG1sVGFnKSkgewogICAgICAgICAgICAgICAg
ICAgICAvLyB3ZSBoYXZlIGFub3RoZXIgPEhUTUw+IGVsZW1lbnQuLi4uIGFwcGx5IGF0dHJpYnV0
ZXMgdG8gZXhpc3Rpbmcgb25lCiAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBk
b24ndCBvdmVyd3JpdGUgYWxyZWFkeSBleGlzdGluZyBhdHRyaWJ1dGVzCi0gICAgICAgICAgICAg
ICAgICAgIE5hbWVkQXR0ck1hcCAqbWFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5hdHRy
aWJ1dGVzKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBFbGVtZW50ICpleGlzdGluZ0hUTUwg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZG9jKCktPmZpcnN0Q2hpbGQoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIE5hbWVkQXR0ck1hcCAqYm1hcCA9IGV4aXN0aW5nSFRNTC0+YXR0cmlidXRlcyhm
YWxzZSk7CisgICAgICAgICAgICAgICAgICAgIE5hbWVkQXR0ck1hcCogbWFwID0gc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG4pLT5hdHRyaWJ1dGVzKHRydWUpOworICAgICAgICAgICAgICAgICAgICBF
bGVtZW50KiBleGlzdGluZ0hUTUwgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZG9jdW1lbnQtPmZp
cnN0Q2hpbGQoKSk7CisgICAgICAgICAgICAgICAgICAgIE5hbWVkQXR0ck1hcCogYm1hcCA9IGV4
aXN0aW5nSFRNTC0+YXR0cmlidXRlcyhmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgbCA9IDA7IG1hcCAmJiBsIDwgbWFwLT5sZW5ndGgoKTsgKytsKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGl0ID0gbWFwLT5hdHRyaWJ1dGVJdGVtKGwpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGl0LT5u
YW1lKCkpKQpAQCAtMzY1LDcgKzM3OCw3IEBAIGJvb2wgSFRNTFBhcnNlcjo6aGFuZGxlRXJyb3Io
Tm9kZSogbiwgYm8KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHVzaEJsb2Nr
KGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOwogICAgICAgICAgICAgICAgIHNldEN1cnJlbnQobmV3
Tm9kZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmICFtX2ZyYWdtZW50
KQorICAgICAgICAgICAgICAgIGlmICghbi0+YXR0YWNoZWQoKSAmJiAhbV9pc1BhcnNpbmdGcmFn
bWVudCkKICAgICAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CkBAIC0zNzQsMTMgKzM4NywxMyBAQCBib29sIEhU
TUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFt
ZShib2R5VGFnKSkgewotICAgICAgICAgICAgaWYgKGluQm9keSAmJiBkb2MoKS0+Ym9keSgpKSB7
CisgICAgICAgICAgICBpZiAoaW5Cb2R5ICYmIGRvY3VtZW50LT5ib2R5KCkpIHsKICAgICAgICAg
ICAgICAgICAvLyB3ZSBoYXZlIGFub3RoZXIgPEJPRFk+IGVsZW1lbnQuLi4uIGFwcGx5IGF0dHJp
YnV0ZXMgdG8gZXhpc3Rpbmcgb25lCiAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRv
bid0IG92ZXJ3cml0ZSBhbHJlYWR5IGV4aXN0aW5nIGF0dHJpYnV0ZXMKICAgICAgICAgICAgICAg
ICAvLyBzb21lIHNpdGVzIHVzZSA8Ym9keSBiZ2NvbG9yPXJpZ2h0Y29sb3I+Li4uPGJvZHkgYmdj
b2xvcj13cm9uZ2NvbG9yPgotICAgICAgICAgICAgICAgIE5hbWVkQXR0ck1hcCAqbWFwID0gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5hdHRyaWJ1dGVzKHRydWUpOwotICAgICAgICAgICAgICAg
IEVsZW1lbnQgKmV4aXN0aW5nQm9keSA9IGRvYygpLT5ib2R5KCk7Ci0gICAgICAgICAgICAgICAg
TmFtZWRBdHRyTWFwICpibWFwID0gZXhpc3RpbmdCb2R5LT5hdHRyaWJ1dGVzKGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICBOYW1lZEF0dHJNYXAqIG1hcCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihu
KS0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICBFbGVtZW50KiBleGlzdGluZ0Jv
ZHkgPSBkb2N1bWVudC0+Ym9keSgpOworICAgICAgICAgICAgICAgIE5hbWVkQXR0ck1hcCogYm1h
cCA9IGV4aXN0aW5nQm9keS0+YXR0cmlidXRlcyhmYWxzZSk7CiAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBsID0gMDsgbWFwICYmIGwgPCBtYXAtPmxlbmd0aCgpOyArK2wpIHsKICAgICAg
ICAgICAgICAgICAgICAgQXR0cmlidXRlKiBpdCA9IG1hcC0+YXR0cmlidXRlSXRlbShsKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFibWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGl0LT5uYW1lKCkp
KQpAQCAtMzkzLDcgKzQwNiw3IEBAIGJvb2wgSFRNTFBhcnNlcjo6aGFuZGxlRXJyb3IoTm9kZSog
biwgYm8KICAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoaW5wdXRUYWcpKSB7CiAg
ICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaC0+Z2V0QXR0cmlidXRlKHR5cGVBdHRy
KSwgImhpZGRlbiIpICYmIGZvcm0pIHsKICAgICAgICAgICAgICAgICBmb3JtLT5hZGRDaGlsZChu
KTsKLSAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgIW1fZnJhZ21lbnQpCisg
ICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50
KQogICAgICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTQwNCw5ICs0MTcsOSBAQCBib29sIEhUTUxQYXJz
ZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKGFyZWFU
YWcpKSB7Ci0gICAgICAgICAgICBpZiAobWFwKSB7Ci0gICAgICAgICAgICAgICAgbWFwLT5hZGRD
aGlsZChuKTsKLSAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgIW1fZnJhZ21l
bnQpCisgICAgICAgICAgICBpZiAobV9jdXJyZW50TWFwRWxlbWVudCkgeworICAgICAgICAgICAg
ICAgIG1fY3VycmVudE1hcEVsZW1lbnQtPmFkZENoaWxkKG4pOworICAgICAgICAgICAgICAgIGlm
ICghbi0+YXR0YWNoZWQoKSAmJiAhbV9pc1BhcnNpbmdGcmFnbWVudCkKICAgICAgICAgICAgICAg
ICAgICAgbi0+YXR0YWNoKCk7CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00NDIsNyArNDU1LDcgQEAgYm9vbCBIVE1MUGFy
c2VyOjpoYW5kbGVFcnJvcihOb2RlKiBuLCBibwogICAgICAgICBpbnNlcnROb2RlKGUpOwogICAg
ICAgICBpZiAoaGVhZCkgewogICAgICAgICAgICAgaGVhZC0+YWRkQ2hpbGQobik7Ci0gICAgICAg
ICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgIW1fZnJhZ21lbnQpCisgICAgICAgICAgICBpZiAo
IW4tPmF0dGFjaGVkKCkgJiYgIW1faXNQYXJzaW5nRnJhZ21lbnQpCiAgICAgICAgICAgICAgICAg
bi0+YXR0YWNoKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00NjcsNyAr
NDgwLDcgQEAgYm9vbCBIVE1MUGFyc2VyOjpoYW5kbGVFcnJvcihOb2RlKiBuLCBibwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKG4t
PmlzVGV4dE5vZGUoKSkgewotICAgICAgICAgICAgICAgICAgICBUZXh0ICp0ID0gc3RhdGljX2Nh
c3Q8VGV4dCAqPihuKTsKKyAgICAgICAgICAgICAgICAgICAgVGV4dCogdCA9IHN0YXRpY19jYXN0
PFRleHQqPihuKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHQtPmNvbnRhaW5zT25seVdoaXRl
c3BhY2UoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgICAgICB9CkBAIC01MDgsMTAgKzUyMSwxMCBAQCBib29sIEhUTUxQYXJzZXI6OmhhbmRsZUVy
cm9yKE5vZGUqIG4sIGJvCiAgICAgICAgICAgICAgICAgYm9vbCBwb3NzaWJseU1vdmVTdHJheUNv
bnRlbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
ICAgICAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
VGV4dCAqdCA9IHN0YXRpY19jYXN0PFRleHQgKj4obik7CisgICAgICAgICAgICAgICAgICAgIFRl
eHQqIHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obik7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0
LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZ0ltcGwgKmkgPSB0LT5zdHJpbmco
KTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogaSA9IHQtPnN0cmluZygpOwogICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcG9zID0gMDsKICAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKHBvcyA8IGktPmxlbmd0aCgpICYmICgoKmkpW3Bvc10gPT0gJyAnIHx8ICgqaSlb
cG9zXSA9PSBub0JyZWFrU3BhY2UpKQogICAgICAgICAgICAgICAgICAgICAgICAgcG9zKys7CkBA
IC01MTksMTQgKzUzMiwxNCBAQCBib29sIEhUTUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4s
IGJvCiAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJseU1vdmVTdHJheUNvbnRlbnQgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKHBvc3NpYmx5TW92
ZVN0cmF5Q29udGVudCkgewotICAgICAgICAgICAgICAgICAgICBOb2RlICpub2RlID0gY3VycmVu
dDsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSAqcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgp
OworICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gY3VycmVudDsKKyAgICAgICAgICAg
ICAgICAgICAgTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAg
ICAgICAgICAvLyBBIHNjcmlwdCBtYXkgaGF2ZSByZW1vdmVkIHRoZSBjdXJyZW50IG5vZGUncyBw
YXJlbnQgZnJvbSB0aGUgRE9NCiAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMzcKICAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IHdlIHNob3VsZCBkbyByZWFsIHJlY292ZXJ5IGhlcmUgYW5kIHJlLXBhcmVudCB3aXRoIHRo
ZSBjb3JyZWN0IG5vZGUuCiAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyZW50KQogICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBOb2Rl
ICpncmFuZHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBncmFuZHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpOwogCiAgICAgICAgICAg
ICAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAg
IChoLT5oYXNMb2NhbE5hbWUodHJUYWcpICYmCkBAIC01MzYsNyArNTQ5LDcgQEAgYm9vbCBIVE1M
UGFyc2VyOjpoYW5kbGVFcnJvcihOb2RlKiBuLCBibwogICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmVudC0+aGFzVGFnTmFtZSh0YWJsZVRhZykpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlID0gKG5vZGUtPmhhc1RhZ05hbWUodGFibGVUYWcpKSA/IG5vZGUgOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoKG5vZGUtPmhhc1RhZ05hbWUodHJUYWcpKSA/IGdyYW5k
cGFyZW50IDogcGFyZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUgKnBhcmVudCA9
IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBhcmVu
dCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFy
ZW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG4sIG5vZGUsIGVjKTsKQEAgLTY1
OCw4ICs2NzEsOCBAQCBib29sIEhUTUxQYXJzZXI6OmZyYW1lc2V0Q3JlYXRlRXJyb3JDaGVjCiAg
ICAgICAgIC8vIHdlIGNhbid0IGltcGxlbWVudCB0aGF0IGJlaGF2aW91ciBub3cgYmVjYXVzZSBp
dCBjb3VsZCBjYXVzZSB0b28gbWFueQogICAgICAgICAvLyByZWdyZXNzaW9ucyBhbmQgdGhlIGhl
YWRhY2hlcyBhcmUgbm90IHdvcnRoIHRoZSB3b3JrIGFzIGxvbmcgYXMgdGhlcmUgaXMKICAgICAg
ICAgLy8gbm8gc2l0ZSBhY3R1YWxseSByZWx5aW5nIG9uIHRoYXQgZGV0YWlsIChEaXJrKQotICAg
ICAgICBpZiAoZG9jKCktPmJvZHkoKSkKLSAgICAgICAgICAgIGRvYygpLT5ib2R5KCktPnNldEF0
dHJpYnV0ZShzdHlsZUF0dHIsICJkaXNwbGF5Om5vbmUiKTsKKyAgICAgICAgaWYgKGRvY3VtZW50
LT5ib2R5KCkpCisgICAgICAgICAgICBkb2N1bWVudC0+Ym9keSgpLT5zZXRBdHRyaWJ1dGUoc3R5
bGVBdHRyLCAiZGlzcGxheTpub25lIik7CiAgICAgICAgIGluQm9keSA9IGZhbHNlOwogICAgIH0K
ICAgICBpZiAoKGhhdmVDb250ZW50IHx8IGhhdmVGcmFtZVNldCkgJiYgY3VycmVudC0+bG9jYWxO
YW1lKCkgPT0gaHRtbFRhZykKQEAgLTY4OSwxMiArNzAyLDEyIEBAIGJvb2wgSFRNTFBhcnNlcjo6
Zm9ybUNyZWF0ZUVycm9yQ2hlY2soVG8KIAogYm9vbCBIVE1MUGFyc2VyOjppc2luZGV4Q3JlYXRl
RXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCiB7Ci0gICAgTm9kZSAq
biA9IGhhbmRsZUlzaW5kZXgodCk7CisgICAgUmVmUHRyPE5vZGU+IG4gPSBoYW5kbGVJc2luZGV4
KHQpOwogICAgIGlmICghaW5Cb2R5KSB7Ci0gICAgICAgIGlzaW5kZXggPSBuOworICAgICAgICBt
X2lzaW5kZXhFbGVtZW50ID0gbi5yZWxlYXNlKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdC0+
ZmxhdCA9IHRydWU7Ci0gICAgICAgIHJlc3VsdCA9IG47CisgICAgICAgIHJlc3VsdCA9IG4ucmVs
ZWFzZSgpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC03NTgsMjggKzc3MSwxOCBA
QCBib29sIEhUTUxQYXJzZXI6Om5vZnJhbWVzQ3JlYXRlRXJyb3JDaGVjCiAKIGJvb2wgSFRNTFBh
cnNlcjo6bm9zY3JpcHRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJl
c3VsdCkKIHsKLSAgICBpZiAoIW1fZnJhZ21lbnQgJiYgZG9jdW1lbnQtPmZyYW1lKCkgJiYgZG9j
dW1lbnQtPmZyYW1lKCktPnNldHRpbmdzKCktPmlzSmF2YVNjcmlwdEVuYWJsZWQoKSkKKyAgICBp
ZiAoIW1faXNQYXJzaW5nRnJhZ21lbnQgJiYgZG9jdW1lbnQtPmZyYW1lKCkgJiYgZG9jdW1lbnQt
PmZyYW1lKCktPnNldHRpbmdzKCktPmlzSmF2YVNjcmlwdEVuYWJsZWQoKSkKICAgICAgICAgc2V0
U2tpcE1vZGUobm9zY3JpcHRUYWcpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEhUTUxQ
YXJzZXI6Om1hcENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0
KQogewotICAgIG1hcCA9IG5ldyBIVE1MTWFwRWxlbWVudChkb2N1bWVudCk7Ci0gICAgcmVzdWx0
ID0gbWFwOworICAgIG1fY3VycmVudE1hcEVsZW1lbnQgPSBuZXcgSFRNTE1hcEVsZW1lbnQoZG9j
dW1lbnQpOworICAgIHJlc3VsdCA9IG1fY3VycmVudE1hcEVsZW1lbnQ7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIEhUTUxQYXJzZXI6OmNhbnZhc0NyZWF0ZUVycm9yQ2hlY2soVG9rZW4q
IHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQotewotICAgIGlmIChkb2N1bWVudC0+ZnJhbWUoKSAm
JiBkb2N1bWVudC0+ZnJhbWUoKS0+c2V0dGluZ3MoKS0+dXNlc0Rhc2hib2FyZEJhY2t3YXJkQ29t
cGF0aWJpbGl0eU1vZGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIW1fZnJh
Z21lbnQgJiYgZG9jdW1lbnQtPmZyYW1lKCkgJiYgZG9jdW1lbnQtPmZyYW1lKCktPnNldHRpbmdz
KCktPmlzSmF2YVNjcmlwdEVuYWJsZWQoKSkKLSAgICAgICAgc2V0U2tpcE1vZGUoY2FudmFzVGFn
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogUGFzc1JlZlB0cjxOb2RlPiBIVE1MUGFyc2VyOjpn
ZXROb2RlKFRva2VuKiB0KQogewogICAgIC8vIEluaXQgb3VyIGVycm9yIGhhbmRsaW5nIHRhYmxl
LgpAQCAtNzkwLDcgKzc5Myw2IEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTFBhcnNlcjo6Z2V0Tm9k
ZShUb2sKICAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChiaWdUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKTsKICAgICAgICAgZ0Z1
bmN0aW9uTWFwLnNldChib2R5VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6OmJv
ZHlDcmVhdGVFcnJvckNoZWNrKTsKICAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChidXR0b25UYWcu
bG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6bmVzdGVkQ3JlYXRlRXJyb3JDaGVjayk7
Ci0gICAgICAgIGdGdW5jdGlvbk1hcC5zZXQoY2FudmFzVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
JkhUTUxQYXJzZXI6OmNhbnZhc0NyZWF0ZUVycm9yQ2hlY2spOwogICAgICAgICBnRnVuY3Rpb25N
YXAuc2V0KGNvbW1lbnRBdG9tLmltcGwoKSwgJkhUTUxQYXJzZXI6OmNvbW1lbnRDcmVhdGVFcnJv
ckNoZWNrKTsKICAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChkZFRhZy5sb2NhbE5hbWUoKS5pbXBs
KCksICZIVE1MUGFyc2VyOjpkZENyZWF0ZUVycm9yQ2hlY2spOwogICAgICAgICBnRnVuY3Rpb25N
YXAuc2V0KGR0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6OmR0Q3JlYXRlRXJy
b3JDaGVjayk7CkBAIC04MjcsMjUgKzgyOSwyMyBAQCBQYXNzUmVmUHRyPE5vZGU+IEhUTUxQYXJz
ZXI6OmdldE5vZGUoVG9rCiAgICAgaWYgKENyZWF0ZUVycm9yQ2hlY2tGdW5jIGVycm9yQ2hlY2tG
dW5jID0gZ0Z1bmN0aW9uTWFwLmdldCh0LT50YWdOYW1lLmltcGwoKSkpCiAgICAgICAgIHByb2Nl
ZWQgPSAodGhpcy0+KmVycm9yQ2hlY2tGdW5jKSh0LCByZXN1bHQpOwogICAgIGlmIChwcm9jZWVk
KQotICAgICAgICByZXN1bHQgPSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVtZW50
KHQtPnRhZ05hbWUsIGRvYygpLCBmb3JtKTsKKyAgICAgICAgcmVzdWx0ID0gSFRNTEVsZW1lbnRG
YWN0b3J5OjpjcmVhdGVIVE1MRWxlbWVudCh0LT50YWdOYW1lLCBkb2N1bWVudCwgZm9ybSk7CiAg
ICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLSNkZWZpbmUgTUFYX1JFRFVOREFOVCAy
MAotCi1ib29sIEhUTUxQYXJzZXI6OmFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGNvbnN0IEF0b21p
Y1N0cmluZyYgX3RhZ05hbWUpCitib29sIEhUTUxQYXJzZXI6OmFsbG93TmVzdGVkUmVkdW5kYW50
VGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKIHsKICAgICAvLyB3d3cubGljZW8uZWR1
Lm14IGlzIGFuIGV4YW1wbGUgb2YgYSBzaXRlIHRoYXQgYWNoaWV2ZXMgYSBsZXZlbCBvZiBuZXN0
aW5nIG9mCiAgICAgLy8gYWJvdXQgMTUwMCB0YWdzLCBhbGwgZnJvbSBhIGJ1bmNoIG9mIDxiPnMu
ICBXZSB3aWxsIG9ubHkgYWxsb3cgYXQgbW9zdCAyMAogICAgIC8vIG5lc3RlZCB0YWdzIG9mIHRo
ZSBzYW1lIHR5cGUgYmVmb3JlIGp1c3QgaWdub3JpbmcgdGhlbSBhbGwgdG9nZXRoZXIuCiAgICAg
aW50IGkgPSAwOwogICAgIGZvciAoSFRNTFN0YWNrRWxlbSogY3VyciA9IGJsb2NrU3RhY2s7Ci0g
ICAgICAgICBpIDwgTUFYX1JFRFVOREFOVCAmJiBjdXJyICYmIGN1cnItPnRhZ05hbWUgPT0gX3Rh
Z05hbWU7CisgICAgICAgICBpIDwgbWF4UmVkdW5kYW50VGFnRGVwdGggJiYgY3VyciAmJiBjdXJy
LT50YWdOYW1lID09IHRhZ05hbWU7CiAgICAgICAgICBjdXJyID0gY3Vyci0+bmV4dCwgaSsrKTsK
LSAgICByZXR1cm4gaSAhPSBNQVhfUkVEVU5EQU5UOworICAgIHJldHVybiBpICE9IG1heFJlZHVu
ZGFudFRhZ0RlcHRoOwogfQogCi12b2lkIEhUTUxQYXJzZXI6OnByb2Nlc3NDbG9zZVRhZyhUb2tl
biAqdCkKK3ZvaWQgSFRNTFBhcnNlcjo6cHJvY2Vzc0Nsb3NlVGFnKFRva2VuKiB0KQogewogICAg
IC8vIFN1cHBvcnQgZm9yIHJlYWxseSBicm9rZW4gaHRtbC4KICAgICAvLyB3ZSBuZXZlciBjbG9z
ZSB0aGUgYm9keSB0YWcsIHNpbmNlIHNvbWUgc3R1cGlkIHdlYiBwYWdlcyBjbG9zZSBpdCBiZWZv
cmUgdGhlIGFjdHVhbCBlbmQgb2YgdGhlIGRvYy4KQEAgLTg1Niw3ICs4NTYsNyBAQCB2b2lkIEhU
TUxQYXJzZXI6OnByb2Nlc3NDbG9zZVRhZyhUb2tlbiAqCiAgICAgaWYgKHQtPnRhZ05hbWUgPT0g
Zm9ybVRhZykKICAgICAgICAgZm9ybSA9IDA7CiAgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBt
YXBUYWcpCi0gICAgICAgIG1hcCA9IDA7CisgICAgICAgIG1fY3VycmVudE1hcEVsZW1lbnQgPSAw
OwogICAgICAgICAKICAgICBIVE1MU3RhY2tFbGVtKiBvbGRFbGVtID0gYmxvY2tTdGFjazsKICAg
ICBwb3BCbG9jayh0LT50YWdOYW1lKTsKQEAgLTkxNiw3ICs5MTYsNyBAQCBib29sIEhUTUxQYXJz
ZXI6OmlzSW5saW5lKE5vZGUqIG5vZGUpIGNvCiAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUo
YWJiclRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGFjcm9ueW1UYWcpIHx8IGUtPmhhc0xvY2FsTmFt
ZShzdWJUYWcpIHx8CiAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoc3VwVGFnKSB8fCBlLT5o
YXNMb2NhbE5hbWUoc3BhblRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKG5vYnJUYWcpIHx8CiAgICAg
ICAgICAgICBlLT5oYXNMb2NhbE5hbWUod2JyVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUobm9mcmFt
ZXNUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShub2xheWVyVGFnKSB8fAotICAgICAgICAgICAgZS0+
aGFzTG9jYWxOYW1lKG5vZW1iZWRUYWcpIHx8IChlLT5oYXNMb2NhbE5hbWUobm9zY3JpcHRUYWcp
ICYmICFtX2ZyYWdtZW50ICYmIGRvY3VtZW50LT5mcmFtZSgpICYmIGRvY3VtZW50LT5mcmFtZSgp
LT5zZXR0aW5ncygpLT5pc0phdmFTY3JpcHRFbmFibGVkKCkpKQorICAgICAgICAgICAgZS0+aGFz
TG9jYWxOYW1lKG5vZW1iZWRUYWcpIHx8IChlLT5oYXNMb2NhbE5hbWUobm9zY3JpcHRUYWcpICYm
ICFtX2lzUGFyc2luZ0ZyYWdtZW50ICYmIGRvY3VtZW50LT5mcmFtZSgpICYmIGRvY3VtZW50LT5m
cmFtZSgpLT5zZXR0aW5ncygpLT5pc0phdmFTY3JpcHRFbmFibGVkKCkpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAtMTIwNywzOSArMTIwNywzOSBAQCB2b2lkIEhU
TUxQYXJzZXI6OnB1c2hCbG9jayhjb25zdCBBdG9taWNTCiAgICAgZGlkUmVmQ3VycmVudCA9IGZh
bHNlOwogfQogCi12b2lkIEhUTUxQYXJzZXI6OnBvcEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYg
X3RhZ05hbWUpCit2b2lkIEhUTUxQYXJzZXI6OnBvcEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYg
dGFnTmFtZSkKIHsKLSAgICBIVE1MU3RhY2tFbGVtICpFbGVtID0gYmxvY2tTdGFjazsKKyAgICBI
VE1MU3RhY2tFbGVtKiBlbGVtID0gYmxvY2tTdGFjazsKICAgICAKICAgICBpbnQgbWF4TGV2ZWwg
PSAwOwogCi0gICAgd2hpbGUgKEVsZW0gJiYgKEVsZW0tPnRhZ05hbWUgIT0gX3RhZ05hbWUpKSB7
Ci0gICAgICAgIGlmIChtYXhMZXZlbCA8IEVsZW0tPmxldmVsKQotICAgICAgICAgICAgbWF4TGV2
ZWwgPSBFbGVtLT5sZXZlbDsKLSAgICAgICAgRWxlbSA9IEVsZW0tPm5leHQ7CisgICAgd2hpbGUg
KGVsZW0gJiYgKGVsZW0tPnRhZ05hbWUgIT0gdGFnTmFtZSkpIHsKKyAgICAgICAgaWYgKG1heExl
dmVsIDwgZWxlbS0+bGV2ZWwpCisgICAgICAgICAgICBtYXhMZXZlbCA9IGVsZW0tPmxldmVsOwor
ICAgICAgICBlbGVtID0gZWxlbS0+bmV4dDsKICAgICB9CiAKLSAgICBpZiAoIUVsZW0pCisgICAg
aWYgKCFlbGVtKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobWF4TGV2ZWwgPiBFbGVtLT5s
ZXZlbCkgeworICAgIGlmIChtYXhMZXZlbCA+IGVsZW0tPmxldmVsKSB7CiAgICAgICAgIC8vIFdl
IGRpZG4ndCBtYXRjaCBiZWNhdXNlIHRoZSB0YWcgaXMgaW4gYSBkaWZmZXJlbnQgc2NvcGUsIGUu
Zy4sCiAgICAgICAgIC8vIDxiPjxwPkZvbzwvYj4uICBUcnkgdG8gY29ycmVjdCB0aGUgcHJvYmxl
bS4KLSAgICAgICAgaWYgKCFpc1Jlc2lkdWFsU3R5bGVUYWcoX3RhZ05hbWUpKQorICAgICAgICBp
ZiAoIWlzUmVzaWR1YWxTdHlsZVRhZyh0YWdOYW1lKSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgcmV0dXJuIGhhbmRsZVJlc2lkdWFsU3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2NrcyhFbGVt
KTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZVJlc2lkdWFsU3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2Nr
cyhlbGVtKTsKICAgICB9CiAKLSAgICBib29sIGlzQWZmZWN0ZWRCeVN0eWxlID0gaXNBZmZlY3Rl
ZEJ5UmVzaWR1YWxTdHlsZShFbGVtLT50YWdOYW1lKTsKKyAgICBib29sIGlzQWZmZWN0ZWRCeVN0
eWxlID0gaXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShlbGVtLT50YWdOYW1lKTsKICAgICBIVE1M
U3RhY2tFbGVtKiByZXNpZHVhbFN0eWxlU3RhY2sgPSAwOwogICAgIE5vZGUqIG1hbGZvcm1lZFRh
YmxlUGFyZW50ID0gMDsKICAgICAKLSAgICBFbGVtID0gYmxvY2tTdGFjazsKLSAgICB3aGlsZSAo
RWxlbSkgewotICAgICAgICBpZiAoRWxlbS0+dGFnTmFtZSA9PSBfdGFnTmFtZSkgeworICAgIGVs
ZW0gPSBibG9ja1N0YWNrOworICAgIHdoaWxlIChlbGVtKSB7CisgICAgICAgIGlmIChlbGVtLT50
YWdOYW1lID09IHRhZ05hbWUpIHsKICAgICAgICAgICAgIGludCBzdHJheVRhYmxlID0gaW5TdHJh
eVRhYmxlQ29udGVudDsKICAgICAgICAgICAgIHBvcE9uZUJsb2NrKCk7Ci0gICAgICAgICAgICBF
bGVtID0gMDsKKyAgICAgICAgICAgIGVsZW0gPSAwOwogCiAgICAgICAgICAgICAvLyBUaGlzIGVs
ZW1lbnQgd2FzIHRoZSByb290IG9mIHNvbWUgbWFsZm9ybWVkIGNvbnRlbnQganVzdCBpbnNpZGUg
YW4gaW1wbGljaXQgb3IKICAgICAgICAgICAgIC8vIGV4cGxpY2l0IDx0Ym9keT4gb3IgPHRyPi4K
QEAgLTEyNTMsNyArMTI1Myw3IEBAIHZvaWQgSFRNTFBhcnNlcjo6cG9wQmxvY2soY29uc3QgQXRv
bWljU3QKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIGlmIChmb3JtICYmIEVsZW0tPnRhZ05hbWUgPT0gZm9ybVRhZykKKyAgICAgICAgICAgIGlm
IChmb3JtICYmIGVsZW0tPnRhZ05hbWUgPT0gZm9ybVRhZykKICAgICAgICAgICAgICAgICAvLyBB
IDxmb3JtPiBpcyBiZWluZyBjbG9zZWQgcHJlbWF0dXJlbHkgKGFuZCB0aGlzIGlzCiAgICAgICAg
ICAgICAgICAgLy8gbWFsZm9ybWVkIEhUTUwpLiAgU2V0IGFuIGF0dHJpYnV0ZSBvbiB0aGUgZm9y
bSB0byBjbGVhciBvdXQgaXRzCiAgICAgICAgICAgICAgICAgLy8gYm90dG9tIG1hcmdpbi4KQEAg
LTEyNjEsMTkgKzEyNjEsMTkgQEAgdm9pZCBIVE1MUGFyc2VyOjpwb3BCbG9jayhjb25zdCBBdG9t
aWNTdAogCiAgICAgICAgICAgICAvLyBTY2hlZHVsZSB0aGlzIHRhZyBmb3IgcmVvcGVuaW5nCiAg
ICAgICAgICAgICAvLyBhZnRlciB3ZSBjb21wbGV0ZSB0aGUgY2xvc2Ugb2YgdGhpcyBlbnRpcmUg
YmxvY2suCi0gICAgICAgICAgICBpZiAoaXNBZmZlY3RlZEJ5U3R5bGUgJiYgaXNSZXNpZHVhbFN0
eWxlVGFnKEVsZW0tPnRhZ05hbWUpKQorICAgICAgICAgICAgaWYgKGlzQWZmZWN0ZWRCeVN0eWxl
ICYmIGlzUmVzaWR1YWxTdHlsZVRhZyhlbGVtLT50YWdOYW1lKSkKICAgICAgICAgICAgICAgICAv
LyBXZSd2ZSBvdmVybG9hZGVkIHRoZSB1c2Ugb2Ygc3RhY2sgZWxlbWVudHMgYW5kIGFyZSBqdXN0
IHJldXNpbmcgdGhlCiAgICAgICAgICAgICAgICAgLy8gc3RydWN0IHdpdGggYSBzbGlnaHRseSBk
aWZmZXJlbnQgbWVhbmluZyB0byB0aGUgdmFyaWFibGVzLiAgSW5zdGVhZCBvZiBjaGFpbmluZwog
ICAgICAgICAgICAgICAgIC8vIGZyb20gaW5uZXJtb3N0IHRvIG91dGVybW9zdCwgd2UgYnVpbGQg
dXAgYSBsaXN0IG9mIGFsbCB0aGUgdGFncyB3ZSBuZWVkIHRvIHJlb3BlbgogICAgICAgICAgICAg
ICAgIC8vIGZyb20gdGhlIG91dGVybW9zdCB0byB0aGUgaW5uZXJtb3N0LCBpLmUuLCByZXNpZHVh
bFN0eWxlU3RhY2sgd2lsbCBlbmQgdXAgcG9pbnRpbmcKICAgICAgICAgICAgICAgICAvLyB0byB0
aGUgb3V0ZXJtb3N0IHRhZyB3ZSBuZWVkIHRvIHJlb3Blbi4KLSAgICAgICAgICAgICAgICAvLyBX
ZSBhbHNvIHNldCBFbGVtLT5ub2RlIHRvIGJlIHRoZSBhY3R1YWwgZWxlbWVudCB0aGF0IGNvcnJl
c3BvbmRzIHRvIHRoZSBJRCBzdG9yZWQgaW4KLSAgICAgICAgICAgICAgICAvLyBFbGVtLT5pZCBy
YXRoZXIgdGhhbiB0aGUgbm9kZSB0aGF0IHlvdSBzaG91bGQgcG9wIHRvIHdoZW4gdGhlIGVsZW1l
bnQgZ2V0cyBwdWxsZWQgb2ZmCisgICAgICAgICAgICAgICAgLy8gV2UgYWxzbyBzZXQgZWxlbS0+
bm9kZSB0byBiZSB0aGUgYWN0dWFsIGVsZW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgSUQg
c3RvcmVkIGluCisgICAgICAgICAgICAgICAgLy8gZWxlbS0+aWQgcmF0aGVyIHRoYW4gdGhlIG5v
ZGUgdGhhdCB5b3Ugc2hvdWxkIHBvcCB0byB3aGVuIHRoZSBlbGVtZW50IGdldHMgcHVsbGVkIG9m
ZgogICAgICAgICAgICAgICAgIC8vIHRoZSBzdGFjay4KICAgICAgICAgICAgICAgICBtb3ZlT25l
QmxvY2tUb1N0YWNrKHJlc2lkdWFsU3R5bGVTdGFjayk7CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKLSAgICAgICAgICAgIEVsZW0gPSBibG9ja1N0YWNr
OworICAgICAgICAgICAgZWxlbSA9IGJsb2NrU3RhY2s7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTEzNDcsMjAgKzEzNDcsMjAgQEAgdm9pZCBIVE1MUGFyc2VyOjpmcmVlQmxvY2soKQogCiB2b2lk
IEhUTUxQYXJzZXI6OmNyZWF0ZUhlYWQoKQogewotICAgIGlmIChoZWFkIHx8ICFkb2MoKS0+Zmly
c3RDaGlsZCgpKQorICAgIGlmIChoZWFkIHx8ICFkb2N1bWVudC0+Zmlyc3RDaGlsZCgpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBoZWFkID0gbmV3IEhUTUxIZWFkRWxlbWVudChkb2N1bWVudCk7
Ci0gICAgSFRNTEVsZW1lbnQqIGJvZHkgPSBkb2MoKS0+Ym9keSgpOworICAgIEhUTUxFbGVtZW50
KiBib2R5ID0gZG9jdW1lbnQtPmJvZHkoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBkb2MoKS0+Zmlyc3RDaGlsZCgpLT5pbnNlcnRCZWZvcmUoaGVhZCwgYm9keSwgZWMpOworICAg
IGRvY3VtZW50LT5maXJzdENoaWxkKCktPmluc2VydEJlZm9yZShoZWFkLCBib2R5LCBlYyk7CiAg
ICAgaWYgKGVjKQogICAgICAgICBoZWFkID0gMDsKIH0KIAotTm9kZSogSFRNTFBhcnNlcjo6aGFu
ZGxlSXNpbmRleChUb2tlbiogdCkKK1Bhc3NSZWZQdHI8Tm9kZT4gSFRNTFBhcnNlcjo6aGFuZGxl
SXNpbmRleChUb2tlbiogdCkKIHsKLSAgICBOb2RlKiBuID0gbmV3IEhUTUxEaXZFbGVtZW50KGRv
Y3VtZW50KTsKKyAgICBSZWZQdHI8Tm9kZT4gbiA9IG5ldyBIVE1MRGl2RWxlbWVudChkb2N1bWVu
dCk7CiAKICAgICBOYW1lZE1hcHBlZEF0dHJNYXAqIGF0dHJzID0gdC0+YXR0cnMuZ2V0KCk7CiAK
QEAgLTEzNzAsMjggKzEzNzAsMjkgQEAgTm9kZSogSFRNTFBhcnNlcjo6aGFuZGxlSXNpbmRleChU
b2tlbiogdAogCiAgICAgU3RyaW5nIHRleHQgPSBzZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24o
KTsKICAgICBpZiAoYXR0cnMpIHsKLSAgICAgICAgaWYgKEF0dHJpYnV0ZSAqYSA9IGF0dHJzLT5n
ZXRBdHRyaWJ1dGVJdGVtKHByb21wdEF0dHIpKQorICAgICAgICBpZiAoQXR0cmlidXRlKiBhID0g
YXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0ocHJvbXB0QXR0cikpCiAgICAgICAgICAgICB0ZXh0ID0g
YS0+dmFsdWUoKS5kb21TdHJpbmcoKSArICIgIjsKICAgICAgICAgdC0+YXR0cnMgPSAwOwogICAg
IH0KIAogICAgIG4tPmFkZENoaWxkKG5ldyBIVE1MSFJFbGVtZW50KGRvY3VtZW50KSk7CiAgICAg
bi0+YWRkQ2hpbGQobmV3IFRleHQoZG9jdW1lbnQsIHRleHQpKTsKLSAgICBuLT5hZGRDaGlsZChp
c0luZGV4LmdldCgpKTsKKyAgICBuLT5hZGRDaGlsZChpc0luZGV4LnJlbGVhc2UoKSk7CiAgICAg
bi0+YWRkQ2hpbGQobmV3IEhUTUxIUkVsZW1lbnQoZG9jdW1lbnQpKTsKIAotICAgIHJldHVybiBu
OworICAgIHJldHVybiBuLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBIVE1MUGFyc2VyOjpzdGFydEJv
ZHkoKQogewotICAgIGlmKGluQm9keSkgcmV0dXJuOworICAgIGlmIChpbkJvZHkpCisgICAgICAg
IHJldHVybjsKIAogICAgIGluQm9keSA9IHRydWU7CiAKLSAgICBpZiAoaXNpbmRleCkgewotICAg
ICAgICBpbnNlcnROb2RlKGlzaW5kZXguZ2V0KCksIHRydWUgLyogZG9uJ3QgZGVjZW5kIGludG8g
dGhpcyBub2RlICovKTsKLSAgICAgICAgaXNpbmRleCA9IDA7CisgICAgaWYgKG1faXNpbmRleEVs
ZW1lbnQpIHsKKyAgICAgICAgaW5zZXJ0Tm9kZShtX2lzaW5kZXhFbGVtZW50LmdldCgpLCB0cnVl
IC8qIGRvbid0IGRlc2NlbmQgaW50byB0aGlzIG5vZGUgKi8pOworICAgICAgICBtX2lzaW5kZXhF
bGVtZW50ID0gMDsKICAgICB9CiB9CiAKQEAgLTE0MDYsNyArMTQwNyw3IEBAIHZvaWQgSFRNTFBh
cnNlcjo6ZmluaXNoZWQoKQogICAgIHNldEN1cnJlbnQoMCk7CiAKICAgICAvLyBXYXJuaW5nLCB0
aGlzIG1heSBkZWxldGUgdGhlIHRva2VuaXplciBhbmQgcGFyc2VyLCBzbyBkb24ndCB0cnkgdG8g
ZG8gYW55dGhpbmcgZWxzZSBhZnRlciB0aGlzLgotICAgIGlmICghbV9mcmFnbWVudCkKKyAgICBp
ZiAoIW1faXNQYXJzaW5nRnJhZ21lbnQpCiAgICAgICAgIGRvY3VtZW50LT5maW5pc2hlZFBhcnNp
bmcoKTsKIH0KIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5oCShyZXZpc2lvbiAyMDE0NikKKysrIFdlYkNvcmUv
aHRtbC9IVE1MUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEgKzEsOSBAQAogLyoKLSAg
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwotCiAgICAgQ29weXJpZ2h0
IChDKSAxOTk3IE1hcnRpbiBKb25lcyAobWpvbmVzQGtkZS5vcmcpCiAgICAgICAgICAgICAgIChD
KSAxOTk3IFRvcmJlbiBXZWlzICh3ZWlzQGtkZS5vcmcpCiAgICAgICAgICAgICAgIChDKSAxOTk4
IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKICAgICAgICAgICAgICAgKEMpIDE5OTkg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yMiwzNCArMjAsMzQgQEAKICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCiAgICAgQm9zdG9uLCBNQSAw
MjExMS0xMzA3LCBVU0EuCiAqLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotLy8gS0RFIEhU
TUwgV2lkZ2V0IC0tIEhUTUwgUGFyc2VyCiAKICNpZm5kZWYgSFRNTFBhcnNlcl9oCiAjZGVmaW5l
IEhUTUxQYXJzZXJfaAogCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAiUXVh
bGlmaWVkTmFtZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERvY3VtZW50OwogY2xhc3Mg
RG9jdW1lbnRGcmFnbWVudDsKLWNsYXNzIEZyYW1lVmlldzsKLWNsYXNzIEhUTUxFbGVtZW50Owor
Y2xhc3MgSFRNTERvY3VtZW50OwogY2xhc3MgSFRNTEZvcm1FbGVtZW50OwogY2xhc3MgSFRNTEhl
YWRFbGVtZW50OwogY2xhc3MgSFRNTE1hcEVsZW1lbnQ7Ci1jbGFzcyBIVE1MU3RhY2tFbGVtOwor
Y2xhc3MgTm9kZTsKIGNsYXNzIFRva2VuOwogCitzdHJ1Y3QgSFRNTFN0YWNrRWxlbTsKKwogLyoq
Ci0gKiBUaGUgcGFyc2VyIGZvciBodG1sLiBJdCByZWNlaXZlcyBhIHN0cmVhbSBvZiB0b2tlbnMg
ZnJvbSB0aGUgSFRNTFRva2VuaXplciwgYW5kCi0gKiBidWlsZHMgdXAgdGhlIERvY3VtZW50IHN0
cnVjdHVyZSBmb3JtIGl0LgorICogVGhlIHBhcnNlciBmb3IgSFRNTC4gSXQgcmVjZWl2ZXMgYSBz
dHJlYW0gb2YgdG9rZW5zIGZyb20gdGhlIEhUTUxUb2tlbml6ZXIsIGFuZAorICogYnVpbGRzIHVw
IHRoZSBEb2N1bWVudCBzdHJ1Y3R1cmUgZnJvbSBpdC4KICAqLwotY2xhc3MgSFRNTFBhcnNlcgot
eworY2xhc3MgSFRNTFBhcnNlciA6IE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICBIVE1MUGFy
c2VyKERvY3VtZW50Kik7CisgICAgSFRNTFBhcnNlcihIVE1MRG9jdW1lbnQqKTsKICAgICBIVE1M
UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqKTsKICAgICB2aXJ0dWFsIH5IVE1MUGFyc2VyKCk7CiAK
QEAgLTY4LDE3ICs2NiwxMiBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgdm9pZCByZXNldCgpOwog
Ci0gICAgYm9vbCBza2lwTW9kZSgpIGNvbnN0IHsgcmV0dXJuICFkaXNjYXJkX3VudGlsLmlzTnVs
bCgpOyB9Ci0gICAgYm9vbCBub1NwYWNlcygpIGNvbnN0IHsgcmV0dXJuICFpbkJvZHk7IH0KLQot
ICAgIEhUTUxEb2N1bWVudCAqZG9jKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTERv
Y3VtZW50ICo+KGRvY3VtZW50KTsgfQorICAgIGJvb2wgc2tpcE1vZGUoKSBjb25zdCB7IHJldHVy
biAhbV9za2lwTW9kZVRhZy5pc051bGwoKTsgfQogCiBwcml2YXRlOgotICAgIHZvaWQgc2V0Q3Vy
cmVudChOb2RlKiBuZXdDdXJyZW50KTsKKyAgICB2b2lkIHNldEN1cnJlbnQoTm9kZSopOwogICAg
IHZvaWQgZGVyZWZDdXJyZW50KCk7Ci0gICAgdm9pZCBzZXRTa2lwTW9kZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBxTmFtZSkgeyBkaXNjYXJkX3VudGlsID0gcU5hbWUubG9jYWxOYW1lKCk7IH0KLQot
ICAgIERvY3VtZW50KiBkb2N1bWVudDsKKyAgICB2b2lkIHNldFNraXBNb2RlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHFOYW1lKSB7IG1fc2tpcE1vZGVUYWcgPSBxTmFtZS5sb2NhbE5hbWUoKTsgfQog
CiAgICAgUGFzc1JlZlB0cjxOb2RlPiBnZXROb2RlKFRva2VuKik7CiAgICAgYm9vbCBib2R5Q3Jl
YXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwpAQCAtMTAzLDE5ICs5NiwxMiBA
QCBwcml2YXRlOgogICAgIGJvb2wgdGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayhUb2tlbios
IFJlZlB0cjxOb2RlPiYpOwogICAgIGJvb2wgdGV4dENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBS
ZWZQdHI8Tm9kZT4mKTsKIAotICAgIHZvaWQgcHJvY2Vzc0Nsb3NlVGFnKFRva2VuICopOworICAg
IHZvaWQgcHJvY2Vzc0Nsb3NlVGFnKFRva2VuKik7CiAKLSAgICBib29sIGluc2VydE5vZGUoTm9k
ZSAqbiwgYm9vbCBmbGF0ID0gZmFsc2UpOwotICAgIGJvb2wgaGFuZGxlRXJyb3IoTm9kZSogbiwg
Ym9vbCBmbGF0LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9yaXR5
KTsKKyAgICBib29sIGluc2VydE5vZGUoTm9kZSosIGJvb2wgZmxhdCA9IGZhbHNlKTsKKyAgICBi
b29sIGhhbmRsZUVycm9yKE5vZGUqLCBib29sIGZsYXQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9j
YWxOYW1lLCBpbnQgdGFnUHJpb3JpdHkpOwogICAgIAotICAgIC8vIFRoZSBjdXJyZW50bHkgYWN0
aXZlIGVsZW1lbnQgKHRoZSBvbmUgbmV3IGVsZW1lbnRzIHdpbGwgYmUgYWRkZWQgdG8pLiBDYW4g
YmUgYSBkb2N1bWVudCBmcmFnbWVudCwgYSBkb2N1bWVudCBvciBhbiBlbGVtZW50LgotICAgIE5v
ZGUqIGN1cnJlbnQ7Ci0gICAgLy8gV2UgY2FuJ3QgcmVmIGEgZG9jdW1lbnQsIGJ1dCB3ZSBkb24n
dCB3YW50IHRvIGNvbnN0YW50bHkgY2hlY2sgaWYgYSBub2RlIGlzIGEgZG9jdW1lbnQganVzdCB0
byBkZWNpZGUgd2hldGhlciB0byBkZXJlZi4KLSAgICBib29sIGRpZFJlZkN1cnJlbnQ7Ci0KLSAg
ICBIVE1MU3RhY2tFbGVtICpibG9ja1N0YWNrOwotCi0gICAgdm9pZCBwdXNoQmxvY2soY29uc3Qg
QXRvbWljU3RyaW5nJiB0YWdOYW1lLCBpbnQgX2xldmVsKTsKKyAgICB2b2lkIHB1c2hCbG9jayhj
b25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGludCBsZXZlbCk7CiAgICAgdm9pZCBwb3BCbG9j
ayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpOwogICAgIHZvaWQgcG9wQmxvY2soY29uc3Qg
UXVhbGlmaWVkTmFtZSYgcU5hbWUpIHsgcmV0dXJuIHBvcEJsb2NrKHFOYW1lLmxvY2FsTmFtZSgp
KTsgfSAvLyBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgcmVhZGFiaWxpdHkuCiAgICAgdm9pZCBw
b3BPbmVCbG9jaygpOwpAQCAtMTI3LDggKzExMyw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNy
ZWF0ZUhlYWQoKTsKIAotICAgIGJvb2wgaXNSZXNpZHVhbFN0eWxlVGFnKGNvbnN0IEF0b21pY1N0
cmluZyYgdGFnTmFtZSk7Ci0gICAgYm9vbCBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGNvbnN0
IEF0b21pY1N0cmluZyYgdGFnTmFtZSk7CisgICAgc3RhdGljIGJvb2wgaXNSZXNpZHVhbFN0eWxl
VGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSk7CisgICAgc3RhdGljIGJvb2wgaXNBZmZl
Y3RlZEJ5UmVzaWR1YWxTdHlsZShjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpOwogICAgIHZv
aWQgaGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNyb3NzQmxvY2tzKEhUTUxTdGFja0VsZW0q
KTsKICAgICB2b2lkIHJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKEhUTUxTdGFja0VsZW0qLCBOb2Rl
KiBtYWxmb3JtZWRUYWJsZVBhcmVudCk7CiAKQEAgLTEzNyw0NyArMTIzLDMyIEBAIHByaXZhdGU6
CiAgICAgc3RhdGljIGJvb2wgaXNIZWFkZXJUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1l
KTsKICAgICB2b2lkIHBvcE5lc3RlZEhlYWRlclRhZygpOwogCi0gICAgYm9vbCBpc0lubGluZShO
b2RlKiBub2RlKSBjb25zdDsKKyAgICBib29sIGlzSW5saW5lKE5vZGUqKSBjb25zdDsKICAgICAK
LSAgICAvKgotICAgICAqIGN1cnJlbnRseSBhY3RpdmUgZm9ybQotICAgICAqLwotICAgIEhUTUxG
b3JtRWxlbWVudCAqZm9ybTsKKyAgICB2b2lkIHN0YXJ0Qm9keSgpOyAvLyBpbnNlcnRzIHRoZSBp
c2luZGV4IGVsZW1lbnQKKyAgICBQYXNzUmVmUHRyPE5vZGU+IGhhbmRsZUlzaW5kZXgoVG9rZW4q
KTsKIAotICAgIC8qCi0gICAgICogY3VycmVudCBtYXAKLSAgICAgKi8KLSAgICBIVE1MTWFwRWxl
bWVudCAqbWFwOworICAgIERvY3VtZW50KiBkb2N1bWVudDsKIAotICAgIC8qCi0gICAgICogdGhl
IGhlYWQgZWxlbWVudC4gTmVlZGVkIGZvciBjcmFwcHkgaHRtbCB3aGljaCBkZWZpbmVzIDxiYXNl
PiBhZnRlciA8L2hlYWQ+Ci0gICAgICovCi0gICAgSFRNTEhlYWRFbGVtZW50ICpoZWFkOworICAg
IC8vIFRoZSBjdXJyZW50bHkgYWN0aXZlIGVsZW1lbnQgKHRoZSBvbmUgbmV3IGVsZW1lbnRzIHdp
bGwgYmUgYWRkZWQgdG8pLiBDYW4gYmUgYSBkb2N1bWVudCBmcmFnbWVudCwgYSBkb2N1bWVudCBv
ciBhbiBlbGVtZW50LgorICAgIE5vZGUqIGN1cnJlbnQ7CisgICAgLy8gV2UgY2FuJ3QgcmVmIGEg
ZG9jdW1lbnQsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGNvbnN0YW50bHkgY2hlY2sgaWYgYSBub2Rl
IGlzIGEgZG9jdW1lbnQganVzdCB0byBkZWNpZGUgd2hldGhlciB0byBkZXJlZi4KKyAgICBib29s
IGRpZFJlZkN1cnJlbnQ7CiAKLSAgICAvKgotICAgICAqIGEgcG9zc2libGUgPGlzaW5kZXg+IGVs
ZW1lbnQgaW4gdGhlIGhlYWQuIENvbXBhdGliaWxpdHkgaGFjayBmb3IKLSAgICAgKiBodG1sIGZy
b20gdGhlIHN0b25lIGFnZQotICAgICAqLwotICAgIFJlZlB0cjxOb2RlPiBpc2luZGV4OwotICAg
IE5vZGUqIGhhbmRsZUlzaW5kZXgoVG9rZW4qKTsKKyAgICBIVE1MU3RhY2tFbGVtKiBibG9ja1N0
YWNrOwogCi0gICAgLyoKLSAgICAgKiBpbnNlcnRzIHRoZSBzdHVwaWQgaXNJbmRleCBlbGVtZW50
LgotICAgICAqLwotICAgIHZvaWQgc3RhcnRCb2R5KCk7CisgICAgSFRNTEZvcm1FbGVtZW50KiBm
b3JtOyAvLyBjdXJyZW50bHkgYWN0aXZlIGZvcm0KKyAgICBIVE1MTWFwRWxlbWVudCogbV9jdXJy
ZW50TWFwRWxlbWVudDsgLy8gY3VycmVudCBtYXAKKyAgICBIVE1MSGVhZEVsZW1lbnQqIGhlYWQ7
IC8vIGhlYWQgZWxlbWVudDsgbmVlZGVkIGZvciBIVE1MIHdoaWNoIGRlZmluZXMgPGJhc2U+IGFm
dGVyIDwvaGVhZD4KKyAgICBSZWZQdHI8Tm9kZT4gbV9pc2luZGV4RWxlbWVudDsgLy8gYSBwb3Nz
aWJsZSA8aXNpbmRleD4gZWxlbWVudCBpbiB0aGUgaGVhZAogCiAgICAgYm9vbCBpbkJvZHk7CiAg
ICAgYm9vbCBoYXZlQ29udGVudDsKICAgICBib29sIGhhdmVGcmFtZVNldDsKLSAgICBib29sIGVu
ZDsKIAotICAgIC8qCi0gICAgICogdGVsbHMgdGhlIHBhcnNlciB0byBkaXNjYXJkIGFsbCB0YWdz
LCB1bnRpbCBpdCByZWFjaGVzIHRoZSBvbmUgc3BlY2lmaWVkCi0gICAgICovCi0gICAgQXRvbWlj
U3RyaW5nIGRpc2NhcmRfdW50aWw7CisgICAgQXRvbWljU3RyaW5nIG1fc2tpcE1vZGVUYWc7IC8v
IHRlbGxzIHRoZSBwYXJzZXIgdG8gZGlzY2FyZCBhbGwgdGFncyB1bnRpbCBpdCByZWFjaGVzIHRo
ZSBvbmUgc3BlY2lmaWVkCiAKLSAgICBib29sIGhlYWRMb2FkZWQ7Ci0gICAgYm9vbCBtX2ZyYWdt
ZW50OworICAgIGJvb2wgbV9pc1BhcnNpbmdGcmFnbWVudDsKICAgICBpbnQgaW5TdHJheVRhYmxl
Q29udGVudDsKIH07CiAK
</data>
<flag name="review"
          id="5404"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>