<?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>4883</bug_id>
          
          <creation_ts>2005-09-08 01:25:06 -0700</creation_ts>
          <short_desc>WebCore+SVG missing &lt;text&gt; support</short_desc>
          <delta_ts>2006-01-08 01:05:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</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></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>5579</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>19076</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-09-08 01:25:06 -0700</bug_when>
    <thetext>WebCore+SVG missing &lt;text&gt; support

&apos;nough said.  KDE&apos;s ksvg2/kcanvas has started work on this. (rwlbuis)  Hopefully we can just pick that up.

The original plan (and still likely eventual plan) is to merge the render trees and use the khtml::RenderText 
subclasses to support text.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21283</commentid>
    <comment_count>1</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2005-10-03 14:11:54 -0700</bug_when>
    <thetext>Hi, 
 
I&apos;ll attach my current text support (on my local system, not in kde 
svn yet). I would like some reactions on the design choices made, suggestions 
for improvements etc. 
Cheers, 
 
Rob. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21284</commentid>
    <comment_count>2</comment_count>
      <attachid>4186</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2005-10-03 14:12:59 -0700</bug_when>
    <thetext>Created attachment 4186
KCanvas side of text support

There are changes in here for ref counting, ignore them if
you arejust interested in text support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21285</commentid>
    <comment_count>3</comment_count>
      <attachid>4187</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2005-10-03 14:17:02 -0700</bug_when>
    <thetext>Created attachment 4187
Ksvg2 side of text support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21397</commentid>
    <comment_count>4</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2005-10-05 03:20:30 -0700</bug_when>
    <thetext>In case anyone is wondering, the patch lacks a few critical files, because
I made an eror with the diff :( I&apos;ll make a new patch soon.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21409</commentid>
    <comment_count>5</comment_count>
      <attachid>4213</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2005-10-05 08:53:16 -0700</bug_when>
    <thetext>Created attachment 4213
Ksvg2 side of text support

This time the new files should be in the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21427</commentid>
    <comment_count>6</comment_count>
      <attachid>4219</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2005-10-05 11:19:13 -0700</bug_when>
    <thetext>Created attachment 4219
KCanvas side of text support

Ok, I am quite inept at the attachment and diff creation stuff :|
I hope this one is useful at last.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21428</commentid>
    <comment_count>7</comment_count>
      <attachid>4220</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2005-10-05 11:22:09 -0700</bug_when>
    <thetext>Created attachment 4220
KCanvas side of text support

Ugh, no comment. Well, maybe just that it seems I need a vacation badly :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27850</commentid>
    <comment_count>8</comment_count>
      <attachid>5510</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-01-06 03:24:26 -0800</bug_when>
    <thetext>Created attachment 5510
Simple hack to use CSS text rendering for text.

This actually draws text, but upside down and positioned wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27888</commentid>
    <comment_count>9</comment_count>
      <attachid>5510</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-06 17:23:02 -0800</bug_when>
    <thetext>Comment on attachment 5510
Simple hack to use CSS text rendering for text.

This is much better than nothing.  It sounds like darin and I agree, we should
just commit this.  It&apos;s horribly broken, but if nothing else it promotes
awareness of the &lt;text&gt; work. :)  r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27950</commentid>
    <comment_count>10</comment_count>
      <attachid>5535</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-01-07 17:34:23 -0800</bug_when>
    <thetext>Created attachment 5535
a patch that provides basic text support using CSS text rendering</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27951</commentid>
    <comment_count>11</comment_count>
      <attachid>5535</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-07 17:48:20 -0800</bug_when>
    <thetext>Comment on attachment 5535
a patch that provides basic text support using CSS text rendering

Ok a few comments:

1.  tabs in ChangeLog
2.  Are you sure you want the LGPL on these? or shoudl it be BSD.  If you
copied LGPL code it&apos;s gotta be LGPL...
3. I think translate* shoudl take a KRenderingDeviceContext * instead of
looking it up.	Or alternatively, they could return a  QMatrix (KCanvasMatrix
is slated for death)

+void RenderSVGText::paint(PaintInfo &amp;paintInfo, int parentX, int parentY)
should check to make sure it&apos;s in the foreground phase, and otherwise return.

PaintInfo &amp; should be PaintInfo&amp;

Just go ahead and kill the entire block of extern from 
khtml/rendering/render_canvasimage.h
That also could go in a separate patch, but doesn&apos;t need to.

missing newline from 
ksvg2/css/svg.css

+    return new (getDocument()-&gt;renderArena()) RenderSVGText(this);
in
+khtml::RenderObject *SVGTextElementImpl::createRenderer(RenderArena *arena,
khtml::RenderStyle *style)

should use the passed in areana instead.

Otherwise looks great.	I&apos;m going to r- for these silly little nits.  But it&apos;s
not really necessary to post a new patch if that&apos;s all you change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27954</commentid>
    <comment_count>12</comment_count>
      <attachid>5537</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-01-07 21:26:32 -0800</bug_when>
    <thetext>Created attachment 5537
updated for many of Eric&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27958</commentid>
    <comment_count>13</comment_count>
      <attachid>5537</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-07 22:12:44 -0800</bug_when>
    <thetext>Comment on attachment 5537
updated for many of Eric&apos;s comments

Beyond words, amazing.	r=me.

Be sure to commit updated layout test results:

cd LayoutTests/svg
find . -name &quot;*-expected.*&quot; -delete
run-webkit-tests --svg

should do the trick.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4186</attachid>
            <date>2005-10-03 14:12:59 -0700</date>
            <delta_ts>2005-10-05 11:19:13 -0700</delta_ts>
            <desc>KCanvas side of text support</desc>
            <filename>text-support-kcanvas.diff</filename>
            <type>text/plain</type>
            <size>25012</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IEtDYW52YXNDcmVhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBLQ2FudmFzQ3JlYXRvci5j
cHAJKHJldmlzaW9uIDQ2Njk1MCkKKysrIEtDYW52YXNDcmVhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIktDYW52YXNDcmVhdG9yLmgiCiAjaW5jbHVk
ZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIktDYW52YXNDb250YWluZXIuaCIKKyNp
bmNsdWRlICJLQ2FudmFzVGV4dEl0ZW0uaCIKIAogc3RhdGljIEtTdGF0aWNEZWxldGVyPEtDYW52
YXNDcmVhdG9yPiBjYW52YXNDcmVhdG9yRGVsZXRlcjsKIEtDYW52YXNDcmVhdG9yICpLQ2FudmFz
Q3JlYXRvcjo6c19jcmVhdG9yID0gMDsKQEAgLTIyNSw0ICsyMjYsOSBAQAogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxLQ2FudmFzQ29udGFpbmVyICo+KGNhbnZhcy0+cmVuZGVyaW5nRGV2aWNlKCkt
PmNyZWF0ZUNvbnRhaW5lcihjYW52YXMsIHN0eWxlKSk7CiB9CiAKK0tDYW52YXNUZXh0SXRlbSAq
S0NhbnZhc0NyZWF0b3I6OmNyZWF0ZVRleHRJdGVtKEtDYW52YXMgKmNhbnZhcywgY29uc3QgUVN0
cmluZyAmc3RyLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlKSBjb25zdAoreworICAgIHJldHVybiBj
YW52YXMtPnJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVUZXh0SXRlbShjYW52YXMsIHN0ciwgc3R5
bGUpOworfQorCiAvLyB2aW06dHM9NDpub2V0CkluZGV4OiBkZXZpY2UvS1JlbmRlcmluZ1N0cm9r
ZVBhaW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldmljZS9LUmVuZGVyaW5nU3Ryb2tlUGFpbnRl
ci5jcHAJKHJldmlzaW9uIDQ2Njk1MCkKKysrIGRldmljZS9LUmVuZGVyaW5nU3Ryb2tlUGFpbnRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDggQEAKIAogICAgIH5Qcml2YXRlKCkK
ICAgICB7Ci0gICAgICAgIGlmKHBzZXJ2ZXIgJiYgKHBzZXJ2ZXItPnR5cGUoKSA9PSBQU19TT0xJ
RCB8fCBwc2VydmVyLT50eXBlKCkgPT0gUFNfSU1BR0UpKQotICAgICAgICAgICAgZGVsZXRlIHBz
ZXJ2ZXI7CisgICAgICAgIGlmKHBzZXJ2ZXIpCisgICAgICAgICAgICBwc2VydmVyLT5kZXJlZigp
OwogICAgIH0KIAogICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqcHNlcnZlcjsKQEAgLTc2LDkg
Kzc2LDEzIEBACiB2b2lkIEtSZW5kZXJpbmdTdHJva2VQYWludGVyOjpzZXRQYWludFNlcnZlcihL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnBzZXJ2ZXIpCiB7CiAgICAgc2V0RGlydHkoKTsKLSAgICBp
ZihkLT5wc2VydmVyICYmIChkLT5wc2VydmVyLT50eXBlKCkgPT0gUFNfU09MSUQgfHwgZC0+cHNl
cnZlci0+dHlwZSgpID09IFBTX0lNQUdFKSkKLSAgICAgICAgZGVsZXRlIGQtPnBzZXJ2ZXI7Cisg
ICAgaWYoZC0+cHNlcnZlcikKKyAgICAgICAgZC0+cHNlcnZlci0+ZGVyZWYoKTsKKwogICAgIGQt
PnBzZXJ2ZXIgPSBwc2VydmVyOworCisgICAgaWYoZC0+cHNlcnZlcikKKyAgICAgICAgZC0+cHNl
cnZlci0+cmVmKCk7CiB9CiAKIGZsb2F0IEtSZW5kZXJpbmdTdHJva2VQYWludGVyOjpzdHJva2VX
aWR0aCgpIGNvbnN0CkBAIC0xNjQsNiArMTY4LDEyIEBACiAgICAgICAgIGQtPnBzZXJ2ZXItPmRy
YXcoY29udGV4dCwgQVBQTFlfVE9fU1RST0tFKTsKIH0KIAordm9pZCBLUmVuZGVyaW5nU3Ryb2tl
UGFpbnRlcjo6ZHJhd1RleHQoS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQsIGZsb2F0
IHgsIGZsb2F0IHksIGNvbnN0IFFTdHJpbmcgJnRleHQpIGNvbnN0Cit7CisgICAgaWYoZC0+cHNl
cnZlcikKKyAgICAgICAgZC0+cHNlcnZlci0+ZHJhd1RleHQoY29udGV4dCwgeCwgeSwgdGV4dCwg
QVBQTFlfVE9fU1RST0tFKTsKK30KKwogYm9vbCBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlcjo6ZGly
dHkoKSBjb25zdAogewogICAgIHJldHVybiBkLT5kaXJ0eTsKSW5kZXg6IGRldmljZS9LUmVuZGVy
aW5nU3Ryb2tlUGFpbnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldmljZS9LUmVuZGVyaW5nU3Ryb2tl
UGFpbnRlci5oCShyZXZpc2lvbiA0NjY5NTApCisrKyBkZXZpY2UvS1JlbmRlcmluZ1N0cm9rZVBh
aW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsNyBAQAogCiAgICAgLy8gQWN0dWFs
IHJlbmRlcmluZyBmdW5jdGlvbgogICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0ICpjb250ZXh0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHQoS1Jl
bmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQsIGZsb2F0IHgsIGZsb2F0IHksIGNvbnN0IFFT
dHJpbmcgJnRleHQpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGNsYXNzIFByaXZhdGU7CkluZGV4
OiBkZXZpY2UvS1JlbmRlcmluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXZpY2UvS1JlbmRl
cmluZ1N0eWxlLmNwcAkocmV2aXNpb24gNDY2OTUwKQorKysgZGV2aWNlL0tSZW5kZXJpbmdTdHls
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Niw0ICsyNDYsMzkgQEAKICAgICByZXR1cm4gZC0+
c3RhcnRNYXJrZXIgfHwgZC0+bWlkTWFya2VyIHx8IGQtPmVuZE1hcmtlcjsKIH0KIAorY29uc3Qg
UUZvbnQgJktSZW5kZXJpbmdTdHlsZTo6Zm9udCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFFGb250
KCk7Cit9CisKK2Jvb2wgS1JlbmRlcmluZ1N0eWxlOjpoYXNVbmRlcmxpbmUoKSBjb25zdAorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBLUmVuZGVyaW5nU3R5bGU6Omhhc092ZXJsaW5l
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgS1JlbmRlcmluZ1N0eWxl
OjpoYXNTdHJpa2VUaHJvdWdoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0tD
VGV4dEFuY2hvciBLUmVuZGVyaW5nU3R5bGU6OmFuY2hvcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFRBX1NUQVJUOworfQorCitib29sIEtSZW5kZXJpbmdTdHlsZTo6dmVydGljYWxUZXh0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgS1JlbmRlcmluZ1N0eWxlOjpsdHIo
KSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCiAvLyB2aW06dHM9NDpub2V0CkluZGV4
OiBkZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldmljZS9LUmVuZGVy
aW5nRGV2aWNlLmgJKHJldmlzaW9uIDQ2Njk1MCkKKysrIGRldmljZS9LUmVuZGVyaW5nRGV2aWNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIGNsYXNzIEtDYW52YXM7CiBjbGFz
cyBLQ2FudmFzTWF0cml4OwogY2xhc3MgS1JlbmRlcmluZ1N0eWxlOworY2xhc3MgS0NhbnZhc1Rl
eHRJdGVtOwogY2xhc3MgS1JlbmRlcmluZ0RldmljZUNvbnRleHQKIHsKIHB1YmxpYzoKQEAgLTEw
OCw2ICsxMDksNyBAQAogCiAgICAgdmlydHVhbCBLQ2FudmFzSXRlbSAqY3JlYXRlSXRlbShLQ2Fu
dmFzICpjYW52YXMsIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUsIEtDYW52YXNVc2VyRGF0YSBwYXRo
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBLQ2FudmFzQ29udGFpbmVyICpjcmVhdGVDb250YWlu
ZXIoS0NhbnZhcyAqY2FudmFzLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBLQ2FudmFzVGV4dEl0ZW0gKmNyZWF0ZVRleHRJdGVtKEtDYW52YXMgKmNhbnZh
cywgY29uc3QgUVN0cmluZyAmc3RyLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlKSBjb25zdCA9IDA7
CiAKICAgICAvLyBUb29scwogICAgIHZpcnR1YWwgUVJlY3QgYmJveFBhdGgoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQgKmNvbnRleHQsIGJvb2wgaW5jbHVkZVN0cm9rZSkgY29uc3QgPSAwOwpJbmRl
eDogZGV2aWNlL2FnZy9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudEFnZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gZGV2aWNlL2FnZy9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudEFnZy5jcHAJ
KHJldmlzaW9uIDQ2Njk4NSkKKysrIGRldmljZS9hZ2cvS1JlbmRlcmluZ1BhaW50U2VydmVyR3Jh
ZGllbnRBZ2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw4IEBACiAqLwogCiAjaW5j
bHVkZSA8cXBvaW50Lmg+CisjaW5jbHVkZSA8cXBhaW50ZXIuaD4KKyNpbmNsdWRlIDxxcGFpbnRl
cnBhdGguaD4KIAogI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhcy5oPgogI2luY2x1ZGUgPGtjYW52
YXMvS0NhbnZhc01hdHJpeC5oPgpAQCAtMTU3LDYgKzE1OSwyMiBAQAogICAgICAgICBhcnJheVtp
XSA9IGM7CiB9CiAKK3ZvaWQgZmlsbF9jb2xvcl9hcnJheV9xdChRR3JhZGllbnQgJmdyYWRpZW50
LCBLQ1NvcnRlZEdyYWRpZW50U3RvcExpc3QgJnN0b3BMaXN0LCBmbG9hdCBvcGFjaXR5KQorewor
ICAgIEtDU29ydGVkR3JhZGllbnRTdG9wTGlzdDo6SXRlcmF0b3IgaXQoc3RvcExpc3QpOworICAg
IEtDR3JhZGllbnRPZmZzZXRQYWlyICpwYWlyOworICAgIHdoaWxlKChwYWlyID0gaXQuY3VycmVu
dCgpKSAhPSAwKQorICAgIHsKKyAgICAgICAgKytpdDsKKworCSAgICBRQ29sb3IgYyhwYWlyLT5j
b2xvci5yZWQoKSwgcGFpci0+Y29sb3IuZ3JlZW4oKSwgcGFpci0+Y29sb3IuYmx1ZSgpKTsKKwkg
ICAJYy5zZXRBbHBoYUYocGFpci0+Y29sb3IuYWxwaGEoKSAqIG9wYWNpdHkpOworCQlrZERlYnVn
KCkgPDwgIkFscGhhOiAiIDw8IHBhaXItPmNvbG9yLmFscGhhKCkgPDwgZW5kbDsKKwkJZ3JhZGll
bnQuc2V0Q29sb3JBdChwYWlyLT5vZmZzZXQsIGMpOworICAgIH0KK30KKworCiAvLyBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudEFnZwogS1JlbmRlcmluZ1BhaW50U2VydmVyTGlu
ZWFyR3JhZGllbnRBZ2c6OktSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50QWdnKCkg
OiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCgpLCBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJBZ2coKQogewpAQCAtMjcwLDYgKzI4OCw1NyBAQAogICAgIH0KIH0KIAordm9pZCBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudEFnZzo6ZHJhd1RleHQoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQgKmNvbnRleHQsIGZsb2F0IHgsIGZsb2F0IHksIGNvbnN0IFFTdHJpbmcgJnRl
eHQsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHRBZ2cgKmFnZ0NvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dEFnZyAqPihjb250ZXh0KTsKKyAgICBRX0FTU0VSVChhZ2dDb250ZXh0ICE9IDApOworCisg
ICAgS0NhbnZhc0ltYWdlQnVmZmVyICpyZW5kZXJpbmdCdWZmZXIgPSBhZ2dDb250ZXh0LT5idWZm
ZXIoKTsKKyAgICBRX0FTU0VSVChyZW5kZXJpbmdCdWZmZXIgIT0gMCk7CisKKyAgICBLUmVuZGVy
aW5nU3R5bGUgKnN0eWxlID0gYWdnQ29udGV4dC0+c3R5bGUoKTsKKworICAgIFFJbWFnZSAqaW1h
Z2UgPSBuZXcgUUltYWdlKHJlbmRlcmluZ0J1ZmZlci0+Yml0cygpLCByZW5kZXJpbmdCdWZmZXIt
PndpZHRoKCksIHJlbmRlcmluZ0J1ZmZlci0+aGVpZ2h0KCksIFFJbWFnZTo6Rm9ybWF0X0FSR0Iz
Ml9QcmVtdWx0aXBsaWVkKTsKKyAgICBpbWFnZS0+c2V0QWxwaGFCdWZmZXIodHJ1ZSk7CisgICAg
eworICAgICAgICBRUGFpbnRlciBwKGltYWdlKTsKKyAgICAgICAgcC5zZXRSZW5kZXJIaW50KFFQ
YWludGVyOjpBbnRpYWxpYXNpbmcpOworICAgICAgICBwLnNldFJlbmRlckhpbnQoUVBhaW50ZXI6
OlRleHRBbnRpYWxpYXNpbmcpOworICAgICAgICBRRm9udCBmID0gc3R5bGUtPmZvbnQoKTsKKyAg
ICAgICAgaWYoc3R5bGUtPmhhc1VuZGVybGluZSgpKSBmLnNldFVuZGVybGluZSh0cnVlKTsKKyAg
ICAgICAgaWYoc3R5bGUtPmhhc092ZXJsaW5lKCkpIGYuc2V0T3ZlcmxpbmUodHJ1ZSk7CisgICAg
ICAgIGlmKHN0eWxlLT5oYXNTdHJpa2VUaHJvdWdoKCkpIGYuc2V0U3RyaWtlT3V0KHRydWUpOwor
ICAgICAgICBwLnNldEZvbnQoZik7CisgICAgICAgIFFMaW5lYXJHcmFkaWVudCBncmFkaWVudCgx
MCwgMTAsIDQ0MCwgNDQwKTsKKyAgICAgICAgZG91YmxlIG9wYWNpdHkgPSAxLjA7CisgICAgICAg
IGlmKHR5cGUgJiBBUFBMWV9UT19GSUxMKQorICAgICAgICB7CisgICAgICAgICAgICBpZihzdHls
ZS0+ZmlsbFBhaW50ZXIoKSkgb3BhY2l0eSA9IHN0eWxlLT5maWxsUGFpbnRlcigpLT5vcGFjaXR5
KCkgKiBzdHlsZS0+b3BhY2l0eSgpOworICAgICAgICAgICAgZmlsbF9jb2xvcl9hcnJheV9xdChn
cmFkaWVudCwgZ3JhZGllbnRTdG9wcygpLCBvcGFjaXR5KTsKKyAgICAgICAgICAgIHAuc2V0QnJ1
c2goZ3JhZGllbnQpOworICAgICAgICB9CisKKyAgICAgICAgS0NhbnZhc01hdHJpeCBvYmplY3RN
YXRyaXggPSBzdHlsZS0+b2JqZWN0TWF0cml4KCk7CisgICAgICAgIFFXTWF0cml4IG1hdChvYmpl
Y3RNYXRyaXguYSgpLCBvYmplY3RNYXRyaXguYigpLCBvYmplY3RNYXRyaXguYygpLCBvYmplY3RN
YXRyaXguZCgpLCBvYmplY3RNYXRyaXguZSgpLCBvYmplY3RNYXRyaXguZigpKTsKKyAgICAgICAg
YWdnOjp0cmFuc19hZmZpbmUgd29ybGQgPSBhZ2dDb250ZXh0LT53b3JsZFRyYW5zZm9ybSgpOwor
ICAgICAgICBkb3VibGUgZFs2XTsKKyAgICAgICAgd29ybGQuc3RvcmVfdG8oZCk7CisgICAgICAg
IG1hdCAqPSBRV01hdHJpeChkWzBdLCBkWzFdLCBkWzJdLCBkWzNdLCBkWzRdLCBkWzVdKTsKKyAg
ICAgICAgcC5zZXRNYXRyaXgobWF0KTsKKworICAgICAgICAvL2lmKHR5cGUgJiBBUFBMWV9UT19T
VFJPS0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIFFQYWludGVyUGF0aCB0ZXh0UGF0aDsKKyAg
ICAgICAgICAgIHRleHRQYXRoLmFkZFRleHQoUVBvaW50Rih4LCB5KSwgZiwgdGV4dCk7CisgICAg
ICAgICAgICBwLmRyYXdQYXRoKHRleHRQYXRoKTsKKyAgICAgICAgfQorICAgICAgICAvL2Vsc2UK
KyAgICAgICAgLy8gICAgcC5kcmF3VGV4dChRUG9pbnRGKHgsIHkpLCB0ZXh0KTsKKyAgICB9Cisg
ICAgZGVsZXRlIGltYWdlOworfQorCisKIC8vIEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdy
YWRpZW50QWdnCiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudEFnZzo6S1JlbmRl
cmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRBZ2coKSA6IEtSZW5kZXJpbmdQYWludFNlcnZl
clJhZGlhbEdyYWRpZW50KCksIEtSZW5kZXJpbmdQYWludFNlcnZlckFnZygpCiB7CkBAIC00MDgs
NCArNDc3LDU0IEBACiAgICAgfQogfQogCit2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlh
bEdyYWRpZW50QWdnOjpkcmF3VGV4dChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4dCwg
ZmxvYXQgeCwgZmxvYXQgeSwgY29uc3QgUVN0cmluZyAmdGV4dCwgS0NQYWludFRhcmdldFR5cGUg
dHlwZSkgY29uc3QKK3sKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dEFnZyAqYWdnQ29udGV4
dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0QWdnICo+KGNvbnRleHQpOwor
ICAgIFFfQVNTRVJUKGFnZ0NvbnRleHQgIT0gMCk7CisKKyAgICBLQ2FudmFzSW1hZ2VCdWZmZXIg
KnJlbmRlcmluZ0J1ZmZlciA9IGFnZ0NvbnRleHQtPmJ1ZmZlcigpOworICAgIFFfQVNTRVJUKHJl
bmRlcmluZ0J1ZmZlciAhPSAwKTsKKworICAgIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUgPSBhZ2dD
b250ZXh0LT5zdHlsZSgpOworCisgICAgUUltYWdlICppbWFnZSA9IG5ldyBRSW1hZ2UocmVuZGVy
aW5nQnVmZmVyLT5iaXRzKCksIHJlbmRlcmluZ0J1ZmZlci0+d2lkdGgoKSwgcmVuZGVyaW5nQnVm
ZmVyLT5oZWlnaHQoKSwgUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOworICAg
IGltYWdlLT5zZXRBbHBoYUJ1ZmZlcih0cnVlKTsKKyAgICB7CisgICAgICAgIFFQYWludGVyIHAo
aW1hZ2UpOworICAgICAgICBwLnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZyk7
CisgICAgICAgIHAuc2V0UmVuZGVySGludChRUGFpbnRlcjo6VGV4dEFudGlhbGlhc2luZyk7Cisg
ICAgICAgIFFGb250IGYgPSBzdHlsZS0+Zm9udCgpOworICAgICAgICBpZihzdHlsZS0+aGFzVW5k
ZXJsaW5lKCkpIGYuc2V0VW5kZXJsaW5lKHRydWUpOworICAgICAgICBpZihzdHlsZS0+aGFzT3Zl
cmxpbmUoKSkgZi5zZXRPdmVybGluZSh0cnVlKTsKKyAgICAgICAgaWYoc3R5bGUtPmhhc1N0cmlr
ZVRocm91Z2goKSkgZi5zZXRTdHJpa2VPdXQodHJ1ZSk7CisgICAgICAgIHAuc2V0Rm9udChmKTsK
KyAgICAgICAgUVJhZGlhbEdyYWRpZW50IGdyYWRpZW50KDEwMCwgMTAwLCA0NDApOworICAgICAg
ICBkb3VibGUgb3BhY2l0eSA9IDEuMDsKKyAgICAgICAgaWYodHlwZSAmIEFQUExZX1RPX0ZJTEwp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKHN0eWxlLT5maWxsUGFpbnRlcigpKSBvcGFjaXR5
ID0gc3R5bGUtPmZpbGxQYWludGVyKCktPm9wYWNpdHkoKSAqIHN0eWxlLT5vcGFjaXR5KCk7Cisg
ICAgICAgICAgICBmaWxsX2NvbG9yX2FycmF5X3F0KGdyYWRpZW50LCBncmFkaWVudFN0b3BzKCks
IG9wYWNpdHkpOworICAgICAgICAgICAgcC5zZXRCcnVzaChncmFkaWVudCk7CisgICAgICAgIH0K
KworICAgICAgICBLQ2FudmFzTWF0cml4IG9iamVjdE1hdHJpeCA9IHN0eWxlLT5vYmplY3RNYXRy
aXgoKTsKKyAgICAgICAgUVdNYXRyaXggbWF0KG9iamVjdE1hdHJpeC5hKCksIG9iamVjdE1hdHJp
eC5iKCksIG9iamVjdE1hdHJpeC5jKCksIG9iamVjdE1hdHJpeC5kKCksIG9iamVjdE1hdHJpeC5l
KCksIG9iamVjdE1hdHJpeC5mKCkpOworICAgICAgICBhZ2c6OnRyYW5zX2FmZmluZSB3b3JsZCA9
IGFnZ0NvbnRleHQtPndvcmxkVHJhbnNmb3JtKCk7CisgICAgICAgIGRvdWJsZSBkWzZdOworICAg
ICAgICB3b3JsZC5zdG9yZV90byhkKTsKKyAgICAgICAgbWF0ICo9IFFXTWF0cml4KGRbMF0sIGRb
MV0sIGRbMl0sIGRbM10sIGRbNF0sIGRbNV0pOworICAgICAgICBwLnNldE1hdHJpeChtYXQpOwor
CisgICAgICAgIC8vaWYodHlwZSAmIEFQUExZX1RPX1NUUk9LRSkKKyAgICAgICAgeworICAgICAg
ICAgICAgUVBhaW50ZXJQYXRoIHRleHRQYXRoOworICAgICAgICAgICAgdGV4dFBhdGguYWRkVGV4
dChRUG9pbnRGKHgsIHkpLCBmLCB0ZXh0KTsKKyAgICAgICAgICAgIHAuZHJhd1BhdGgodGV4dFBh
dGgpOworICAgICAgICB9CisgICAgICAgIC8vZWxzZQorICAgICAgICAvLyAgICBwLmRyYXdUZXh0
KFFQb2ludEYoeCwgeSksIHRleHQpOworICAgIH0KKyAgICBkZWxldGUgaW1hZ2U7Cit9CisKIC8v
IHZpbTp0cz00Om5vZXQKSW5kZXg6IGRldmljZS9hZ2cvS1JlbmRlcmluZ1BhaW50U2VydmVyR3Jh
ZGllbnRBZ2cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXZpY2UvYWdnL0tSZW5kZXJpbmdQYWludFNlcnZl
ckdyYWRpZW50QWdnLmgJKHJldmlzaW9uIDQ2Njk1MCkKKysrIGRldmljZS9hZ2cvS1JlbmRlcmlu
Z1BhaW50U2VydmVyR3JhZGllbnRBZ2cuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QAogICAgIHZpcnR1YWwgfktSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50QWdnKCk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4
dCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGRyYXdU
ZXh0KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBmbG9hdCB4LCBmbG9hdCB5LCBj
b25zdCBRU3RyaW5nICZ0ZXh0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdDsKIH07CiAK
IGNsYXNzIEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50QWdnIDogcHVibGljIEtS
ZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LApAQCAtNDQsNiArNDUsNyBAQAogICAg
IHZpcnR1YWwgfktSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50QWdnKCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqQ29udGV4dCwgS0NQ
YWludFRhcmdldFR5cGUgdHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0KEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBmbG9hdCB4LCBmbG9hdCB5LCBjb25zdCBR
U3RyaW5nICZ0ZXh0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdDsKIH07CiAKICNlbmRp
ZgpJbmRleDogZGV2aWNlL2FnZy9LQ2FudmFzQ2xpcHBlckFnZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
ZGV2aWNlL2FnZy9LQ2FudmFzQ2xpcHBlckFnZy5jcHAJKHJldmlzaW9uIDQ2Njk1MCkKKysrIGRl
dmljZS9hZ2cvS0NhbnZhc0NsaXBwZXJBZ2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw3IEBACiB7CiB9CiAKLXZvaWQgS0NhbnZhc0NsaXBwZXJBZ2c6OmRyYXcoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHRBZ2cgKmFnZ0NvbnRleHQsIGNvbnN0IFFSZWN0ICZiYm94LCBhZ2c6OnJlbmRl
cmluZ19idWZmZXIgKmJ1ZmZlcikKK3ZvaWQgS0NhbnZhc0NsaXBwZXJBZ2c6OmRyYXcoS1JlbmRl
cmluZ0RldmljZUNvbnRleHRBZ2cgKmFnZ0NvbnRleHQsIGNvbnN0IFFSZWN0ICZiYm94LCBhZ2c6
OnJlbmRlcmluZ19idWZmZXIgKmJ1ZmZlcikgY29uc3QKIHsKICAgICBLUmVuZGVyaW5nU3R5bGUg
KnN0eWxlID0gYWdnQ29udGV4dC0+c3R5bGUoKTsKICAgICBRX0FTU0VSVChzdHlsZSAhPSAwKTsK
SW5kZXg6IGRldmljZS9hZ2cvS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRBZ2cuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGRldmljZS9hZ2cvS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRBZ2cuY3BwCShy
ZXZpc2lvbiA0NjY5NTApCisrKyBkZXZpY2UvYWdnL0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlk
QWdnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsOCArMjEsMTEgQEAKICovCiAKICNpbmNsdWRl
IDxxcmVjdC5oPgorI2luY2x1ZGUgPHFwYWludGVyLmg+CisjaW5jbHVkZSA8cXBhaW50ZXJwYXRo
Lmg+CiAKICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXMuaD4KKyNpbmNsdWRlIDxrY2FudmFzL0tD
YW52YXNNYXRyaXguaD4KICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNJbWFnZUJ1ZmZlci5oPgog
I2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFpbnRlci5oPgogI2luY2x1
ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdTdHJva2VQYWludGVyLmg+CkBAIC05NCw0ICs5
Nyw1NCBAQAogICAgIH0KIH0KIAordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZEFnZzo6
ZHJhd1RleHQoS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQsIGZsb2F0IHgsIGZsb2F0
IHksIGNvbnN0IFFTdHJpbmcgJnRleHQsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit7
CisgICAga2REZWJ1ZygpIDw8ICJkcmF3VGV4dCA6ICIgPDwgeCA8PCAiICwgIiA8PCB5IDw8ICIg
LCAiIDw8IHRleHQgPDwgZW5kbDsKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dEFnZyAqYWdn
Q29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0QWdnICo+KGNvbnRl
eHQpOworICAgIFFfQVNTRVJUKGFnZ0NvbnRleHQgIT0gMCk7CisKKyAgICBLQ2FudmFzSW1hZ2VC
dWZmZXIgKnJlbmRlcmluZ0J1ZmZlciA9IGFnZ0NvbnRleHQtPmJ1ZmZlcigpOworICAgIFFfQVNT
RVJUKHJlbmRlcmluZ0J1ZmZlciAhPSAwKTsKKworICAgIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUg
PSBhZ2dDb250ZXh0LT5zdHlsZSgpOworICAgIFFfQVNTRVJUKHN0eWxlICE9IDApOworCisgICAg
UUltYWdlICppbWFnZSA9IG5ldyBRSW1hZ2UocmVuZGVyaW5nQnVmZmVyLT5iaXRzKCksIHJlbmRl
cmluZ0J1ZmZlci0+d2lkdGgoKSwgcmVuZGVyaW5nQnVmZmVyLT5oZWlnaHQoKSwgUUltYWdlOjpG
b3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOworICAgIGltYWdlLT5zZXRBbHBoYUJ1ZmZlcih0
cnVlKTsKKyAgICB7CisgICAgICAgIFFQYWludGVyIHAoaW1hZ2UpOworICAgICAgICBwLnNldFJl
bmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZyk7CisgICAgICAgIHAuc2V0UmVuZGVySGlu
dChRUGFpbnRlcjo6VGV4dEFudGlhbGlhc2luZyk7CisgICAgICAgIC8vaWYoc3R5bGUtPmZpbGxQ
YWludGVyKCkgJiYgc3R5bGUtPmZpbGxQYWludGVyKCktPnBhaW50U2VydmVyKCkgJiYgc3R5bGUt
PmZpbGxQYWludGVyKCktPnBhaW50U2VydmVyKCktPnR5cGUoKSA9PSBQU19TT0xJRCkKKyAgICAg
ICAgcC5zZXRQZW4oY29sb3IoKSk7CisgICAgICAgIFFGb250IGYgPSBzdHlsZS0+Zm9udCgpOwor
ICAgICAgICBpZihzdHlsZS0+aGFzVW5kZXJsaW5lKCkpIGYuc2V0VW5kZXJsaW5lKHRydWUpOwor
ICAgICAgICBpZihzdHlsZS0+aGFzT3ZlcmxpbmUoKSkgZi5zZXRPdmVybGluZSh0cnVlKTsKKyAg
ICAgICAgaWYoc3R5bGUtPmhhc1N0cmlrZVRocm91Z2goKSkgZi5zZXRTdHJpa2VPdXQodHJ1ZSk7
CisJCS8vZi5zZXRTdHlsZVN0cmF0ZWd5KFFGb250OjpGb3JjZU91dGxpbmUpOworICAgICAgICBw
LnNldEZvbnQoZik7CisgICAgICAgIGJvb2wgbHRyID0gc3R5bGUtPmx0cigpOworICAgICAgICBr
ZERlYnVnKCkgPDwgImx0ciA6ICAiIDw8IGx0ciA8PCBlbmRsOworICAgICAgICBwLnNldExheW91
dERpcmVjdGlvbihsdHIgPyBRdDo6TGVmdFRvUmlnaHQgOiBRdDo6UmlnaHRUb0xlZnQpOworCisg
ICAgICAgIEtDYW52YXNNYXRyaXggb2JqZWN0TWF0cml4ID0gc3R5bGUtPm9iamVjdE1hdHJpeCgp
OworICAgICAgICBRV01hdHJpeCBtYXQob2JqZWN0TWF0cml4LmEoKSwgb2JqZWN0TWF0cml4LmIo
KSwgb2JqZWN0TWF0cml4LmMoKSwgb2JqZWN0TWF0cml4LmQoKSwgb2JqZWN0TWF0cml4LmUoKSwg
b2JqZWN0TWF0cml4LmYoKSk7CisgICAgICAgIGFnZzo6dHJhbnNfYWZmaW5lIHdvcmxkID0gYWdn
Q29udGV4dC0+d29ybGRUcmFuc2Zvcm0oKTsKKyAgICAgICAgZG91YmxlIGRbNl07CisgICAgICAg
IHdvcmxkLnN0b3JlX3RvKGQpOworICAgICAgICBtYXQgKj0gUVdNYXRyaXgoZFswXSwgZFsxXSwg
ZFsyXSwgZFszXSwgZFs0XSwgZFs1XSk7CisgICAgICAgIHAuc2V0TWF0cml4KG1hdCk7CisKKyAg
ICAgICAgaWYodHlwZSAmIEFQUExZX1RPX1NUUk9LRSkKKyAgICAgICAgeworICAgICAgICAgICAg
UVBhaW50ZXJQYXRoIHRleHRQYXRoOworICAgICAgICAgICAgdGV4dFBhdGguYWRkVGV4dChRUG9p
bnRGKHgsIHkpLCBmLCB0ZXh0KTsKKyAgICAgICAgICAgIHAuZHJhd1BhdGgodGV4dFBhdGgpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHAuZHJhd1RleHQoUVBvaW50Rih4
LCB5KSwgdGV4dCk7CisgICAgfQorICAgIGRlbGV0ZSBpbWFnZTsKK30KKwogLy8gdmltOnRzPTQ6
bm9ldApJbmRleDogZGV2aWNlL2FnZy9LUmVuZGVyaW5nRGV2aWNlQWdnLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBkZXZpY2UvYWdnL0tSZW5kZXJpbmdEZXZpY2VBZ2cuY3BwCShyZXZpc2lvbiA0NjY5NTAp
CisrKyBkZXZpY2UvYWdnL0tSZW5kZXJpbmdEZXZpY2VBZ2cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiS0NhbnZhc0FnZ0hlbHBlci5oIgogI2luY2x1ZGUg
IktDYW52YXNGaWx0ZXJBZ2cuaCIKICNpbmNsdWRlICJLQ2FudmFzQ2xpcHBlckFnZy5oIgorI2lu
Y2x1ZGUgIktDYW52YXNUZXh0SXRlbUFnZy5oIgogI2luY2x1ZGUgIktDYW52YXNDb250YWluZXJB
Z2cuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlQWdnLm1vYyIKICNpbmNsdWRlICJLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZEFnZy5oIgpAQCAtMjg1LDYgKzI4NiwxMSBAQAogICAgIHJl
dHVybiBuZXcgS0NhbnZhc0NvbnRhaW5lckFnZyhjYW52YXMsIHN0eWxlKTsKIH0KIAorS0NhbnZh
c1RleHRJdGVtICpLUmVuZGVyaW5nRGV2aWNlQWdnOjpjcmVhdGVUZXh0SXRlbShLQ2FudmFzICpj
YW52YXMsIGNvbnN0IFFTdHJpbmcgJnN0ciwgS1JlbmRlcmluZ1N0eWxlICpzdHlsZSkgY29uc3QK
K3sKKyAgICByZXR1cm4gbmV3IEtDYW52YXNUZXh0SXRlbUFnZyhjYW52YXMsIHN0ciwgc3R5bGUp
OworfQorCiBRUmVjdCBLUmVuZGVyaW5nRGV2aWNlQWdnOjpiYm94UGF0aChLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dCAqY29udGV4dCwgYm9vbCBpbmNsdWRlU3Ryb2tlKSBjb25zdAogewogICAgIEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0QWdnICphZ2dDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRl
cmluZ0RldmljZUNvbnRleHRBZ2cgKj4oY29udGV4dCk7CkBAIC0zODcsOCArMzkzLDggQEAKICAg
ICB7CiAgICAgICAgIFFTdHJpbmcgaWQgPSBzdHlsZS0+Y2xpcFBhdGhzKClbaV0ubWlkKDEpOwog
Ci0gICAgICAgIEtDYW52YXNSZXNvdXJjZSAqcmVzb3VyY2UgPSBjYW52YXMtPnJlZ2lzdHJ5KCkt
PmdldFJlc291cmNlQnlJZChpZCk7Ci0gICAgICAgIEtDYW52YXNDbGlwcGVyQWdnICpjbGlwcGVy
ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0NsaXBwZXJBZ2cgKj4ocmVzb3VyY2UpOworICAgICAgICBj
b25zdCBLQ2FudmFzUmVzb3VyY2UgKnJlc291cmNlID0gY2FudmFzLT5yZWdpc3RyeSgpLT5nZXRS
ZXNvdXJjZUJ5SWQoaWQpOworICAgICAgICBjb25zdCBLQ2FudmFzQ2xpcHBlckFnZyAqY2xpcHBl
ciA9IHN0YXRpY19jYXN0PGNvbnN0IEtDYW52YXNDbGlwcGVyQWdnICo+KHJlc291cmNlKTsKIAog
ICAgICAgICBpZihjbGlwcGVyKQogICAgICAgICAgICAgY2xpcHBlci0+ZHJhdyhjb250ZXh0LCBf
YmJveCwgbWFza1JlbmRlcmluZ0J1ZmZlcik7CkluZGV4OiBkZXZpY2UvYWdnL01ha2VmaWxlLmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGRldmljZS9hZ2cvTWFrZWZpbGUuYW0JKHJldmlzaW9uIDQ2Njk1MCkK
KysrIGRldmljZS9hZ2cvTWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTcsNyArNyw3IEBA
CiAJCQkJCQkJCSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZEFnZy5jcHAgS1JlbmRlcmluZ1Bh
aW50U2VydmVyR3JhZGllbnRBZ2cuY3BwIFwKIAkJCQkJCQkJIEtSZW5kZXJpbmdQYWludFNlcnZl
clBhdHRlcm5BZ2cuY3BwIEtSZW5kZXJpbmdQYWludFNlcnZlckltYWdlQWdnLmNwcCBcCiAJCQkJ
CQkJCSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJBZ2cuY3BwIEtDYW52YXNDbGlwcGVyQWdnLmNwcCBL
Q2FudmFzRmlsdGVyQWdnLmNwcCBcCi0JCQkJCQkJCSBLQ2FudmFzSXRlbUFnZy5jcHAgS0NhbnZh
c0NvbnRhaW5lckFnZy5jcHAKKwkJCQkJCQkJIEtDYW52YXNJdGVtQWdnLmNwcCBLQ2FudmFzQ29u
dGFpbmVyQWdnLmNwcCBLQ2FudmFzVGV4dEl0ZW1BZ2cuY3BwCiBsaWJrY2FudmFzZGV2aWNlYWdn
X2xhX0xERkxBR1MgPSAtbW9kdWxlICQoS0RFX1BMVUdJTikgJChhbGxfbGlicmFyaWVzKQogbGli
a2NhbnZhc2RldmljZWFnZ19sYV9MSUJBREQgPSAkKHRvcF9idWlsZGRpcikva2NhbnZhcy9saWJr
Y2FudmFzLmxhIFwKIAkJCQkJCQkJJCh0b3BfYnVpbGRkaXIpL2tjYW52YXMvZGV2aWNlL2xpYmtj
YW52YXNkZXZpY2UubGEgJChMSUJfQUdHKQpJbmRleDogZGV2aWNlL2FnZy9LQ2FudmFzQ2xpcHBl
ckFnZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGRldmljZS9hZ2cvS0NhbnZhc0NsaXBwZXJBZ2cuaAkocmV2
aXNpb24gNDY2OTUwKQorKysgZGV2aWNlL2FnZy9LQ2FudmFzQ2xpcHBlckFnZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAgICAgS0NhbnZhc0NsaXBwZXJBZ2coKTsKICAgICB2
aXJ0dWFsIH5LQ2FudmFzQ2xpcHBlckFnZygpOwogCi0gICAgdm9pZCBkcmF3KEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0QWdnICpjb250ZXh0LCBjb25zdCBRUmVjdCAmYmJveCwgYWdnOjpyZW5kZXJp
bmdfYnVmZmVyICpidWZmZXIpOworICAgIHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dEFnZyAqY29udGV4dCwgY29uc3QgUVJlY3QgJmJib3gsIGFnZzo6cmVuZGVyaW5nX2J1ZmZlciAq
YnVmZmVyKSBjb25zdDsKIH07CiAKICNlbmRpZgpJbmRleDogZGV2aWNlL2FnZy9LUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJTb2xpZEFnZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldmljZS9hZ2cvS1JlbmRlcmlu
Z1BhaW50U2VydmVyU29saWRBZ2cuaAkocmV2aXNpb24gNDY2OTUwKQorKysgZGV2aWNlL2FnZy9L
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZEFnZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAgICAgdmlydHVhbCB+S1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRBZ2coKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBL
Q1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHQo
S1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQsIGZsb2F0IHgsIGZsb2F0IHksIGNvbnN0
IFFTdHJpbmcgJnRleHQsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0OwogfTsKIAogI2Vu
ZGlmCkluZGV4OiBkZXZpY2UvYWdnL0tSZW5kZXJpbmdEZXZpY2VBZ2cuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBkZXZpY2UvYWdnL0tSZW5kZXJpbmdEZXZpY2VBZ2cuaAkocmV2aXNpb24gNDY2OTUwKQorKysg
ZGV2aWNlL2FnZy9LUmVuZGVyaW5nRGV2aWNlQWdnLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYg
KzgxLDcgQEAKIAogICAgIHZpcnR1YWwgS0NhbnZhc0l0ZW0gKmNyZWF0ZUl0ZW0oS0NhbnZhcyAq
Y2FudmFzLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlLCBLQ2FudmFzVXNlckRhdGEgcGF0aCkgY29u
c3Q7CiAgICAgdmlydHVhbCBLQ2FudmFzQ29udGFpbmVyICpjcmVhdGVDb250YWluZXIoS0NhbnZh
cyAqY2FudmFzLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEtD
YW52YXNUZXh0SXRlbSAqY3JlYXRlVGV4dEl0ZW0oS0NhbnZhcyAqY2FudmFzLCBjb25zdCBRU3Ry
aW5nICZzdHIsIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUpIGNvbnN0OwogCiAgICAgLy8gVG9vbHMK
ICAgICB2aXJ0dWFsIFFSZWN0IGJib3hQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250
ZXh0LCBib29sIGluY2x1ZGVTdHJva2UpIGNvbnN0OwpJbmRleDogZGV2aWNlL0tSZW5kZXJpbmdT
dHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGRldmljZS9LUmVuZGVyaW5nU3R5bGUuaAkocmV2aXNpb24g
NDY2OTUwKQorKysgZGV2aWNlL0tSZW5kZXJpbmdTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSw2ICsyNSw3IEBACiAKICNpbmNsdWRlIDxxM3ZhbHVlbGlzdC5oPgogI2luY2x1ZGUgPHFzdHJp
bmdsaXN0Lmg+CisjaW5jbHVkZSA8cWZvbnQuaD4KIAogLy8gRW51bWVyYXRpb25zCiB0eXBlZGVm
IGVudW0KQEAgLTUzLDYgKzU0LDEzIEBACiAgICAgSVJfT1BUSU1JWkVfUVVBTElUWSA9IDEKIH0g
S0NJbWFnZVJlbmRlcmluZzsKIAordHlwZWRlZiBlbnVtCit7CisgICAgVEFfU1RBUlQgPSAwLAor
ICAgIFRBX01JRERMRSA9IDEsCisgICAgVEFfRU5EID0gMgorfSBLQ1RleHRBbmNob3I7CisKIC8v
IFNwZWNpYWwgdHlwZXMKIHR5cGVkZWYgUTNWYWx1ZUxpc3Q8ZmxvYXQ+IEtDRGFzaEFycmF5Owog
CkBAIC0xMjAsNyArMTI4LDE2IEBACiAgICAgdmlydHVhbCB2b2lkIHNldEZpbHRlcihLQ2FudmFz
RmlsdGVyICpuZXdGaWx0ZXIpIGNvbnN0OwogCiAgICAgLy8gVE9ETzogTGFzdCByZW1haW5pbmcg
aXNzdWUgaGVyZTogdGV4dCAmIGZvbnQhCisgICAgdmlydHVhbCBjb25zdCBRRm9udCAmZm9udCgp
IGNvbnN0OwogCisgICAgdmlydHVhbCBib29sIGhhc1VuZGVybGluZSgpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBoYXNPdmVybGluZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNTdHJp
a2VUaHJvdWdoKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEtDVGV4dEFuY2hvciBhbmNob3IoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgdmVydGljYWxUZXh0KCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGx0cigpIGNvbnN0OworCiBwcml2YXRlOgogICAgIGNsYXNzIFByaXZhdGU7CiAgICAg
UHJpdmF0ZSAqZDsKSW5kZXg6IGRldmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBkZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyLmgJKHJldmlzaW9uIDQ2Njk1MCkK
KysrIGRldmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NiArNjMsNyBAQAogCiAgICAgLy8gQWN0dWFsIHJlbmRlcmluZyBmdW5jdGlvbgogICAgIHZpcnR1
YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBLQ1BhaW50VGFy
Z2V0VHlwZSB0eXBlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0KEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBmbG9hdCB4LCBmbG9hdCB5LCBjb25zdCBRU3Ry
aW5nICZ0ZXh0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdCB7fQogCiAgICAgdmlydHVh
bCBRVGV4dFN0cmVhbSAmZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmKSBjb25z
dCA9IDA7CiBwcml2YXRlOgpJbmRleDogZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFpbnRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFpbnRlci5jcHAJKHJldmlzaW9u
IDQ2Njk1MCkKKysrIGRldmljZS9LUmVuZGVyaW5nRmlsbFBhaW50ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw4ICszNiw4IEBACiAKICAgICB+UHJpdmF0ZSgpCiAgICAgewotICAgICAgICBp
Zihwc2VydmVyICYmIChwc2VydmVyLT50eXBlKCkgPT0gUFNfU09MSUQgfHwgcHNlcnZlci0+dHlw
ZSgpID09IFBTX0lNQUdFKSkKLSAgICAgICAgICAgIGRlbGV0ZSBwc2VydmVyOworICAgICAgICBp
Zihwc2VydmVyKQorICAgICAgICAgICAgcHNlcnZlci0+ZGVyZWYoKTsKICAgICB9CiAKICAgICBm
bG9hdCBvcGFjaXR5OwpAQCAtNjIsOSArNjIsMTMgQEAKIAogdm9pZCBLUmVuZGVyaW5nRmlsbFBh
aW50ZXI6OnNldFBhaW50U2VydmVyKEtSZW5kZXJpbmdQYWludFNlcnZlciAqcHNlcnZlcikKIHsK
LSAgICBpZihkLT5wc2VydmVyICYmIChkLT5wc2VydmVyLT50eXBlKCkgPT0gUFNfU09MSUQgfHwg
ZC0+cHNlcnZlci0+dHlwZSgpID09IFBTX0lNQUdFKSkKLSAgICAgICAgZGVsZXRlIGQtPnBzZXJ2
ZXI7CisgICAgaWYoZC0+cHNlcnZlcikKKyAgICAgICAgZC0+cHNlcnZlci0+ZGVyZWYoKTsKKwog
ICAgIGQtPnBzZXJ2ZXIgPSBwc2VydmVyOworCisgICAgaWYoZC0+cHNlcnZlcikKKyAgICAgICAg
ZC0+cHNlcnZlci0+cmVmKCk7CiB9CiAKIEtDV2luZFJ1bGUgS1JlbmRlcmluZ0ZpbGxQYWludGVy
OjpmaWxsUnVsZSgpIGNvbnN0CkBAIC05Myw0ICs5NywxMCBAQAogICAgICAgICBkLT5wc2VydmVy
LT5kcmF3KGNvbnRleHQsIEFQUExZX1RPX0ZJTEwpOwogfQogCit2b2lkIEtSZW5kZXJpbmdGaWxs
UGFpbnRlcjo6ZHJhd1RleHQoS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQsIGZsb2F0
IHgsIGZsb2F0IHksIGNvbnN0IFFTdHJpbmcgJnRleHQpIGNvbnN0Cit7CisgICAgaWYoZC0+cHNl
cnZlcikKKyAgICAgICAgZC0+cHNlcnZlci0+ZHJhd1RleHQoY29udGV4dCwgeCwgeSwgdGV4dCwg
QVBQTFlfVE9fRklMTCk7Cit9CisKIC8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IGRldmljZS9LUmVu
ZGVyaW5nRmlsbFBhaW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXZpY2UvS1JlbmRlcmluZ0ZpbGxQ
YWludGVyLmgJKHJldmlzaW9uIDQ2Njk1MCkKKysrIGRldmljZS9LUmVuZGVyaW5nRmlsbFBhaW50
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogCiAgICAgLy8gQWN0dWFsIHJl
bmRlcmluZyBmdW5jdGlvbgogICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0ICpjb250ZXh0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHQoS1JlbmRl
cmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQsIGZsb2F0IHgsIGZsb2F0IHksIGNvbnN0IFFTdHJp
bmcgJnRleHQpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGNsYXNzIFByaXZhdGU7CkluZGV4OiBL
Q2FudmFzUmVzb3VyY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBLQ2FudmFzUmVzb3VyY2VzLmNwcAko
cmV2aXNpb24gNDY2OTUwKQorKysgS0NhbnZhc1Jlc291cmNlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDYgKzQ4LDE2IEBACiB7CiB9CiAKK3ZvaWQgS0NhbnZhc1Jlc291cmNlOjpyZWYoKQor
eworICAgIF9LU2hhcmVkX3JlZigpOworfQorCit2b2lkIEtDYW52YXNSZXNvdXJjZTo6ZGVyZWYo
KQoreworICAgIF9LU2hhcmVkX3VucmVmKCk7Cit9CisKIHZvaWQgS0NhbnZhc1Jlc291cmNlOjph
ZGRDbGllbnQoS0NhbnZhc0l0ZW0gKml0ZW0pCiB7CiAgICAgaWYobV9jbGllbnRzLmZpbmQoaXRl
bSkgIT0gbV9jbGllbnRzLmVuZCgpKQpJbmRleDogS0NhbnZhc0NyZWF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBLQ2FudmFzQ3JlYXRvci5oCShyZXZpc2lvbiA0NjY5NTApCisrKyBLQ2FudmFzQ3JlYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiBjbGFzcyBLQ2FudmFzSXRlbTsK
IGNsYXNzIEtSZW5kZXJpbmdTdHlsZTsKIGNsYXNzIEtDYW52YXNDb250YWluZXI7CitjbGFzcyBL
Q2FudmFzVGV4dEl0ZW07CiBjbGFzcyBLQ2FudmFzQ3JlYXRvcgogewogcHVibGljOgpAQCAtNTAs
NiArNTEsNyBAQAogCiAgICAgS0NhbnZhc0l0ZW0gKmNyZWF0ZVBhdGhJdGVtKEtDYW52YXMgKmNh
bnZhcywgS1JlbmRlcmluZ1N0eWxlICpzdHlsZSwgY29uc3QgS0NQYXRoRGF0YUxpc3QgJnBhdGhE
YXRhKSBjb25zdDsKICAgICBLQ2FudmFzQ29udGFpbmVyICpjcmVhdGVDb250YWluZXIoS0NhbnZh
cyAqY2FudmFzLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlKSBjb25zdDsKKyAgICBLQ2FudmFzVGV4
dEl0ZW0gKmNyZWF0ZVRleHRJdGVtKEtDYW52YXMgKmNhbnZhcywgY29uc3QgUVN0cmluZyAmc3Ry
LCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMg
S0NhbnZhc0NyZWF0b3IgKnNfY3JlYXRvcjsKSW5kZXg6IEtDYW52YXNSZWdpc3RyeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gS0NhbnZhc1JlZ2lzdHJ5LmNwcAkocmV2aXNpb24gNDY2OTUwKQorKysgS0Nh
bnZhc1JlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMjAgKzIzLDI3IEBACiAjaW5j
bHVkZSAiS0NhbnZhc0l0ZW0uaCIKICNpbmNsdWRlICJLQ2FudmFzUmVnaXN0cnkuaCIKICNpbmNs
dWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaCIKKwogI2luY2x1ZGUgPHF0ZXh0c3RyZWFtLmg+
CiAKIEtDYW52YXNSZWdpc3RyeTo6S0NhbnZhc1JlZ2lzdHJ5KCkKIHsKLSAgICBtX3BzZXJ2ZXJz
LnNldEF1dG9EZWxldGUodHJ1ZSk7Ci0gICAgbV9yZXNvdXJjZXMuc2V0QXV0b0RlbGV0ZSh0cnVl
KTsKIH0KIAogS0NhbnZhc1JlZ2lzdHJ5Ojp+S0NhbnZhc1JlZ2lzdHJ5KCkKIHsKKyAgICBRM0Rp
Y3RJdGVyYXRvcjxLQ2FudmFzUmVzb3VyY2U+IGl0ID0gbV9yZXNvdXJjZXM7CisgICAgZm9yKDtp
dC5jdXJyZW50KCk7KytpdCkKKyAgICAgICAgaXQuY3VycmVudCgpLT5kZXJlZigpOworICAgIFEz
RGljdEl0ZXJhdG9yPEtSZW5kZXJpbmdQYWludFNlcnZlcj4gaXQyID0gbV9wc2VydmVyczsKKyAg
ICBmb3IoO2l0Mi5jdXJyZW50KCk7KytpdCkKKyAgICAgICAgaXQyLmN1cnJlbnQoKS0+ZGVyZWYo
KTsKIH0KIAogdm9pZCBLQ2FudmFzUmVnaXN0cnk6OmFkZFBhaW50U2VydmVyQnlJZChjb25zdCBR
U3RyaW5nICZpZCwgS1JlbmRlcmluZ1BhaW50U2VydmVyICpwc2VydmVyKQogeworICAgIFFfQVNT
RVJUKHBzZXJ2ZXIgIT0gMCk7CisgICAgcHNlcnZlci0+cmVmKCk7CiAgICAgbV9wc2VydmVycy5p
bnNlcnQoaWQsIHBzZXJ2ZXIpOwogICAgIHBzZXJ2ZXItPnNldElkSW5SZWdpc3RyeShpZCk7CiB9
CkBAIC00OCw2ICs1NSw4IEBACiAKIHZvaWQgS0NhbnZhc1JlZ2lzdHJ5OjphZGRSZXNvdXJjZUJ5
SWQoY29uc3QgUVN0cmluZyAmaWQsIEtDYW52YXNSZXNvdXJjZSAqcHNlcnZlcikKIHsKKyAgICBR
X0FTU0VSVChwc2VydmVyICE9IDApOworICAgIHBzZXJ2ZXItPnJlZigpOwogICAgIG1fcmVzb3Vy
Y2VzLmluc2VydChpZCwgcHNlcnZlcik7CiAgICAgcHNlcnZlci0+c2V0SWRJblJlZ2lzdHJ5KGlk
KTsKIH0KSW5kZXg6IEtDYW52YXNSZXNvdXJjZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBLQ2FudmFzUmVz
b3VyY2VzLmgJKHJldmlzaW9uIDQ2Njk1MCkKKysrIEtDYW52YXNSZXNvdXJjZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgPHFzdHJpbmcuaD4KICNpbmNsdWRl
IDxxM3ZhbHVlbGlzdC5oPgogCisjaW5jbHVkZSA8a3NoYXJlZHB0ci5oPgorCiAjaW5jbHVkZSA8
a2NhbnZhcy9LQ2FudmFzSXRlbS5oPgogI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc1BhdGguaD4K
ICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNSZXNvdXJjZUxpc3RlbmVyLmg+CkBAIC00NCwxMiAr
NDYsMTUgQEAKIAogY2xhc3MgS0NhbnZhc01hdHJpeDsKIAotY2xhc3MgS0NhbnZhc1Jlc291cmNl
CitjbGFzcyBLQ2FudmFzUmVzb3VyY2UgOiBwdWJsaWMgS1NoYXJlZAogewogcHVibGljOgogICAg
IEtDYW52YXNSZXNvdXJjZSgpOwogICAgIHZpcnR1YWwgfktDYW52YXNSZXNvdXJjZSgpOwogCisg
ICAgdm9pZCByZWYoKTsKKyAgICB2b2lkIGRlcmVmKCk7CisKICAgICB2b2lkIGludmFsaWRhdGUo
KTsKICAgICB2b2lkIGFkZENsaWVudChLQ2FudmFzSXRlbSAqaXRlbSk7CiAKSW5kZXg6IE1ha2Vm
aWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIE1ha2VmaWxlLmFtCShyZXZpc2lvbiA0NjY5NTApCisrKyBN
YWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtOSw3ICs5LDcgQEAKIGxpYmtjYW52YXNfbGFf
U09VUkNFUyA9IEtDYW52YXNJdGVtLmNwcCBLQ2FudmFzQ29udGFpbmVyLmNwcCBLQ2FudmFzTWF0
cml4LmNwcCBcCiAJCQkJCQlLQ2FudmFzUmVzb3VyY2VzLmNwcCBLQ2FudmFzQ3JlYXRvci5jcHAg
S0NhbnZhc0ltYWdlQnVmZmVyLmNwcCBcCiAJCQkJCQlLQ2FudmFzUmVnaXN0cnkuY3BwIEtDYW52
YXNGaWx0ZXJzLmNwcCBLQ2FudmFzVmlldy5jcHAgS0NhbnZhcy5jcHAgXAotCQkJCQkJS0NhbnZh
c1RyZWVEZWJ1Zy5jcHAgS0NhbnZhc1BhdGguY3BwCisJCQkJCQlLQ2FudmFzVHJlZURlYnVnLmNw
cCBLQ2FudmFzUGF0aC5jcHAgS0NhbnZhc1RleHRJdGVtLmNwcAogCiBsaWJrY2FudmFzX2xhX01F
VEFTT1VSQ0VTID0gS0NhbnZhc1ZpZXcubW9jCiBsaWJrY2FudmFzX2xhX0xERkxBR1MgPSAtdmVy
c2lvbi1pbmZvIDA6MTowIC1sbSAkKGFsbF9saWJyYXJpZXMpCkBAIC0xOCw0ICsxOCw1IEBACiBt
eWluY2x1ZGVfSEVBREVSUyA9IEtDYW52YXNJdGVtLmggS0NhbnZhc0NvbnRhaW5lci5oIEtDYW52
YXNNYXRyaXguaCBcCiAJCQkJCUtDYW52YXNSZXNvdXJjZXMuaCBLQ2FudmFzQ3JlYXRvci5oIEtD
YW52YXNJbWFnZUJ1ZmZlci5oIFwKIAkJCQkJS0NhbnZhc1JlZ2lzdHJ5LmggS0NhbnZhc0ZpbHRl
cnMuaCBLQ2FudmFzVmlldy5oIEtDYW52YXMuaCBcCi0JCQkJCUtDYW52YXNUeXBlcy5oIEtDYW52
YXNSZXNvdXJjZUxpc3RlbmVyLmggS0NhbnZhc1BhdGguaCBLQ2FudmFzVHJlZURlYnVnLmgKKwkJ
CQkJS0NhbnZhc1R5cGVzLmggS0NhbnZhc1Jlc291cmNlTGlzdGVuZXIuaCBLQ2FudmFzUGF0aC5o
IEtDYW52YXNUcmVlRGVidWcuaCBcCisJCQkJCUtDYW52YXNUZXh0SXRlbS5oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4187</attachid>
            <date>2005-10-03 14:17:02 -0700</date>
            <delta_ts>2005-10-05 08:53:16 -0700</delta_ts>
            <desc>Ksvg2 side of text support</desc>
            <filename>text-support-ksvg2.diff</filename>
            <type>text/plain</type>
            <size>11096</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IHN2Zy9TVkdUZXh0RWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzdmcvU1ZHVGV4
dEVsZW1lbnRJbXBsLmgJKHJldmlzaW9uIDQ2NjQ5OSkKKysrIHN2Zy9TVkdUZXh0RWxlbWVudElt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsMTEgQEAKICAgICAgICAgdmlydHVhbCB+
U1ZHVGV4dEVsZW1lbnRJbXBsKCk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlQXR0cmli
dXRlKEtET006OkF0dHJpYnV0ZUltcGwgKmF0dHIpOworCiAgICAgICAgIC8vICdTVkdUZXh0RWxl
bWVudCcgZnVuY3Rpb25zCisgICAgICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FudmFzSXRl
bSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgdmlydHVhbCBLQ2FudmFzSXRlbSAq
Y3JlYXRlQ2FudmFzSXRlbShLQ2FudmFzICpjYW52YXMsIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKICAgICB9OwogfTsKIApJbmRl
eDogc3ZnL1NWR1RleHRFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3ZnL1NWR1RleHRF
bGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDQ2NjQ5OSkKKysrIHN2Zy9TVkdUZXh0RWxlbWVudElt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw5ICsyMCwyMCBAQAogICAgIEJvc3RvbiwgTUEg
MDIxMTEtMTMwNywgVVNBLgogKi8KIAotLy8jaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKKyNpbmNs
dWRlIDxrZG9tL2tkb20uaD4KICNpbmNsdWRlICJTVkdUZXh0RWxlbWVudEltcGwuaCIKKyNpbmNs
dWRlICJTVkdUU3BhbkVsZW1lbnRJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGhM
aXN0SW1wbC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiS0NhbnZh
c1JlbmRlcmluZ1N0eWxlLmgiCisjaW5jbHVkZSA8a2RvbS9jc3MvUmVuZGVyU3R5bGUuaD4KIAor
I2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0NyZWF0b3IuaD4KKworI2luY2x1ZGUgPHF2ZWN0b3Iu
aD4KKworI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc1RleHRJdGVtLmg+CisKIHVzaW5nIG5hbWVz
cGFjZSBLU1ZHOwogCiBTVkdUZXh0RWxlbWVudEltcGw6OlNWR1RleHRFbGVtZW50SW1wbChLRE9N
OjpEb2N1bWVudFB0ciAqZG9jLCBLRE9NOjpOb2RlSW1wbDo6SWQgaWQsIEtET006OkRPTVN0cmlu
Z0ltcGwgKnByZWZpeCkKQEAgLTQwLDQgKzUxLDE0NyBAQAogICAgIFNWR1RleHRQb3NpdGlvbmlu
Z0VsZW1lbnRJbXBsOjpwYXJzZUF0dHJpYnV0ZShhdHRyKTsKIH0KIAorS0NhbnZhc0l0ZW0gKlNW
R1RleHRFbGVtZW50SW1wbDo6Y3JlYXRlQ2FudmFzSXRlbShLQ2FudmFzICpjYW52YXMsIEtSZW5k
ZXJpbmdTdHlsZSAqc3R5bGUpIGNvbnN0Cit7CisgICAgS0NhbnZhc1RleHRJdGVtICppdGVtID0g
S0NhbnZhc0NyZWF0b3I6OnNlbGYoKS0+Y3JlYXRlVGV4dEl0ZW0oY2FudmFzLCBRU3RyaW5nKCks
IHN0eWxlKTsKKyAgICAvLyBBc3NvY2lhdGUgJ0tDYW52YXNJdGVtJyB3aXRoICdTVkdTdHlsZWRF
bGVtZW50SW1wbCcKKyAgICBpdGVtLT5zZXRVc2VyRGF0YShjb25zdF9jYXN0PFNWR1RleHRFbGVt
ZW50SW1wbCAqPih0aGlzKSk7CisKKyAgICByZXR1cm4gaXRlbTsKK30KKwordm9pZCB0cnlBZGRD
aGFyYWN0ZXIoYm9vbCByZXBsYWNlLCBRU3RyaW5nICZzdHIsIFFDaGFyIGNoLCB1bnNpZ25lZCBp
bnQgJmluZGV4KQoreworCWlmKHJlcGxhY2UpCisJeworCQlpZihjaC51bmljb2RlKCkgPT0gMHgw
QSB8fCBjaC51bmljb2RlKCkgPT0gMHgwQyB8fCBjaC51bmljb2RlKCkgPT0gMHgwOSkgY2ggPSAn
ICc7CisJfQorCWVsc2UKKwl7CisJCWtkRGVidWcoKSA8PCAiRGVhbGluZyB3aXRoIDogIiA8PCBj
aC51bmljb2RlKCkgPDwgIigiIDw8IGNoIDw8ICIpIiA8PCBlbmRsOworCQlpZihjaC51bmljb2Rl
KCkgPT0gMHgwQSB8fCBjaC51bmljb2RlKCkgPT0gMHgwQykgcmV0dXJuOworCQllbHNlIGlmKGNo
LnVuaWNvZGUoKSA9PSAweDA5KSBjaCA9ICcgJzsKKwkJaWYoY2guaXNTcGFjZSgpICYmIChpbmRl
eCA9PSAwIHx8IHN0ci5lbmRzV2l0aCgnICcpKSkgcmV0dXJuOworICAgIH0KKworICAgIHN0ciAr
PSBjaDsKKyAgICBpbmRleCsrOworfQorCit2b2lkIFNWR1RleHRFbGVtZW50SW1wbDo6Y2xvc2Uo
KQoreworICAgIC8vIDEuIHhtbDpzcGFjZQorICAgIGJvb2wgcmVwbGFjZSA9IEtET006OkRPTVN0
cmluZyh4bWxzcGFjZSgpKS5zdHJpbmcoKSA9PSAicHJlc2VydmUiOworICAgIGtkRGVidWcoKSA8
PCAiUFJFU0VSVkUgOiAiIDw8IEtET006OkRPTVN0cmluZyh4bWxzcGFjZSgpKS5zdHJpbmcoKSA8
PCBlbmRsOworCisgICAgdW5zaWduZWQgaW50IGluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBpbnQg
eGNvdW50ID0geCgpLT5iYXNlVmFsKCktPm51bWJlck9mSXRlbXMoKTsKKyAgICB1bnNpZ25lZCBp
bnQgeWNvdW50ID0geSgpLT5iYXNlVmFsKCktPm51bWJlck9mSXRlbXMoKTsKKyAgICB1bnNpZ25l
ZCBpbnQgZHhjb3VudCA9IGR4KCktPmJhc2VWYWwoKS0+bnVtYmVyT2ZJdGVtcygpOworICAgIHVu
c2lnbmVkIGludCBkeWNvdW50ID0gZHkoKS0+YmFzZVZhbCgpLT5udW1iZXJPZkl0ZW1zKCk7Cisg
ICAgaW50IGxlbj0gdGV4dENvbnRlbnQoKS0+bGVuZ3RoKCk7CisgICAgUVZlY3RvcjxmbG9hdD4g
X3gobGVuKTsKKyAgICBRVmVjdG9yPGZsb2F0PiBfeShsZW4pOworICAgIFFWZWN0b3I8ZmxvYXQ+
IF9keChsZW4pOworICAgIFFWZWN0b3I8ZmxvYXQ+IF9keShsZW4pOworICAgIGZsb2F0IGN1cngg
PSAwLiwgY3VyeSA9IDAuLCBjdXJkeCA9IDAuLCBjdXJkeSA9IDAuOworICAgIGN1cmR4ID0gMDsK
KyAgICBjdXJkeSA9IDA7CisgICAgZm9yKHVuc2lnbmVkIGludCBpID0gMDtpIDwgeGNvdW50O2kr
KykKKyAgICAgICAgX3hbaV0gPSB4KCktPmJhc2VWYWwoKS0+Z2V0SXRlbShpKS0+dmFsdWUoKTsK
KyAgICBmb3IodW5zaWduZWQgaW50IGkgPSAwO2kgPCB5Y291bnQ7aSsrKQorICAgICAgICBfeVtp
XSA9IHkoKS0+YmFzZVZhbCgpLT5nZXRJdGVtKGkpLT52YWx1ZSgpOworICAgIGZvcih1bnNpZ25l
ZCBpbnQgaSA9IDA7aSA8IGR4Y291bnQ7aSsrKQorICAgICAgICBfZHhbaV0gPSBkeCgpLT5iYXNl
VmFsKCktPmdldEl0ZW0oaSktPnZhbHVlKCk7CisgICAgZm9yKHVuc2lnbmVkIGludCBpID0gMDtp
IDwgZHljb3VudDtpKyspCisgICAgICAgIF9keVtpXSA9IGR5KCktPmJhc2VWYWwoKS0+Z2V0SXRl
bShpKS0+dmFsdWUoKTsKKyAgICBjdXJ4ID0gX3hbMF07CisgICAgY3VyeSA9IF95WzBdOworICAg
IFFTdHJpbmcgc3RyOworICAgIGJvb2wgYWJzb2x1dGUgPSB0cnVlOworICAgIGZvcihLRE9NOjpO
b2RlSW1wbCAqbiA9IGZpcnN0Q2hpbGQoKTsgbiAhPSAwOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkK
KyAgICB7CisgICAgICAgIGlmKG4tPm5vZGVUeXBlKCkgPT0gS0RPTTo6VEVYVF9OT0RFKQorICAg
ICAgICB7CisgICAgICAgICAgICBLRE9NOjpET01TdHJpbmcgdGV4dChuLT50ZXh0Q29udGVudCgp
KTsKKyAgICAgICAgICAgIC8vdGV4dCA9IHRleHQuc3RyaW5nKCkuc2ltcGxpZnlXaGl0ZVNwYWNl
KCk7CisgICAgICAgICAgICBrZERlYnVnKCkgPDwgInRleHQgOiAiIDw8IHRleHQuc3RyaW5nKCkg
PDwgZW5kbDsKKyAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7aSA8IHRleHQubGVu
Z3RoKCk7aSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKGluZGV4IDwgeGNv
dW50IHx8IGluZGV4IDwgeWNvdW50IHx8IGluZGV4IDwgZHhjb3VudCB8fCBpbmRleCA8IGR5Y291
bnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZighc3RyLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEtDYW52YXNUZXh0SXRl
bSAqPihtX2NhbnZhc0l0ZW0pLT5hZGRUZXh0Q2h1bmsoYWJzb2x1dGUgPyBRUG9pbnRGKGN1cngs
IGN1cnkpIDogUVBvaW50RigpLCBRUG9pbnRGKGN1cmR4LCBjdXJkeSksIHN0ciwgbV9jYW52YXNJ
dGVtLT5zdHlsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYoaSA8IHhjb3VudCB8fCBpIDwg
eWNvdW50KSBhYnNvbHV0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmKGluZGV4IDwg
eGNvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgY3VyeCA9IF94W2luZGV4XTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYoaW5kZXggPCB5Y291bnQpCisgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJ5ID0gX3lbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZihpbmRleCA8IGR4Y291
bnQpCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJkeCA9IF9keFtpbmRleF07CisgICAgICAg
ICAgICAgICAgICAgIGlmKGluZGV4IDwgZHljb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGN1cmR5ID0gX2R5W2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgc3RyID0gIiI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRyeUFkZENoYXJhY3RlcihyZXBsYWNlLCBz
dHIsIHRleHRbaV0sIGluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGtkRGVidWco
KSA8PCAiYWRkaW5nIHRleHQgOiAiIDw8ICIgeCA6ICIgPDwgY3VyeCA8PCAiIHkgOiAiIDw8IGN1
cnkgPDwgc3RyIDw8IGVuZGw7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxLQ2FudmFzVGV4dEl0
ZW0gKj4obV9jYW52YXNJdGVtKS0+YWRkVGV4dENodW5rKGFic29sdXRlID8gUVBvaW50RihjdXJ4
LCBjdXJ5KSA6IFFQb2ludEYoKSwgUVBvaW50RihjdXJkeCwgY3VyZHkpLCBzdHIsIG1fY2FudmFz
SXRlbS0+c3R5bGUoKSk7CisgICAgICAgICAgICBhYnNvbHV0ZSA9IGZhbHNlOworICAgICAgICAg
ICAgc3RyID0gIiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihuLT5pZCgpID09IElEX1RT
UEFOIHx8IG4tPmlkKCkgPT0gSURfVFJFRikKKyAgICAgICAgeworICAgICAgICAgICAgU1ZHVGV4
dFBvc2l0aW9uaW5nRWxlbWVudEltcGwgKnRlbGVtID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dFBvc2l0
aW9uaW5nRWxlbWVudEltcGwgKj4obik7CisgICAgICAgICAgICBTVkdSZW5kZXJTdHlsZSAqc3Zn
U3R5bGUgPSBzdGF0aWNfY2FzdDxTVkdSZW5kZXJTdHlsZSAqPihzdGF0aWNfY2FzdDxTVkdUZXh0
UG9zaXRpb25pbmdFbGVtZW50SW1wbCAqPihuKS0+cmVuZGVyU3R5bGUoKSk7CisgICAgICAgICAg
ICBLQ2FudmFzUmVuZGVyaW5nU3R5bGUgKnJlbmRlcmluZ1N0eWxlID0gbmV3IEtDYW52YXNSZW5k
ZXJpbmdTdHlsZShjYW52YXMoKSwgc3ZnU3R5bGUpOworICAgICAgICAgICAgcmVuZGVyaW5nU3R5
bGUtPnVwZGF0ZVN0eWxlKHN2Z1N0eWxlLCBjYW52YXNJdGVtKCkpOworICAgICAgICAgICAgcmVu
ZGVyaW5nU3R5bGUtPnNldE9iamVjdE1hdHJpeChtX2NhbnZhc0l0ZW0tPnN0eWxlKCktPm9iamVj
dE1hdHJpeCgpKTsKKyAgICAgICAgICAgIEtET006OkRPTVN0cmluZyB0ZXh0KG4tPnRleHRDb250
ZW50KCkpOworICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJ0ZXh0MiA6ICIgPDwgdGV4dC5zdHJp
bmcoKSA8PCBlbmRsOworICAgICAgICAgICAgdW5zaWduZWQgaW50IHhjb3VudCA9IHRlbGVtLT54
KCktPmJhc2VWYWwoKS0+bnVtYmVyT2ZJdGVtcygpOworICAgICAgICAgICAgdW5zaWduZWQgaW50
IHljb3VudCA9IHRlbGVtLT55KCktPmJhc2VWYWwoKS0+bnVtYmVyT2ZJdGVtcygpOworICAgICAg
ICAgICAgdW5zaWduZWQgaW50IGR4Y291bnQgPSB0ZWxlbS0+ZHgoKS0+YmFzZVZhbCgpLT5udW1i
ZXJPZkl0ZW1zKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZHljb3VudCA9IHRlbGVtLT5k
eSgpLT5iYXNlVmFsKCktPm51bWJlck9mSXRlbXMoKTsKKyAgICAgICAgICAgIGN1cmR4ID0gMDsK
KyAgICAgICAgICAgIGN1cmR5ID0gMDsKKyAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9
IDA7aSA8IHhjb3VudDtpKyspCisgICAgICAgICAgICAgICAgX3hbaW5kZXggKyBpXSA9IHRlbGVt
LT54KCktPmJhc2VWYWwoKS0+Z2V0SXRlbShpKS0+dmFsdWUoKTsKKyAgICAgICAgICAgIGZvcih1
bnNpZ25lZCBpbnQgaSA9IDA7aSA8IHljb3VudDtpKyspCisgICAgICAgICAgICAgICAgX3lbaW5k
ZXggKyBpXSA9IHRlbGVtLT55KCktPmJhc2VWYWwoKS0+Z2V0SXRlbShpKS0+dmFsdWUoKTsKKyAg
ICAgICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7aSA8IGR4Y291bnQ7aSsrKQorICAgICAg
ICAgICAgICAgIF9keFtpbmRleCArIGldID0gdGVsZW0tPmR4KCktPmJhc2VWYWwoKS0+Z2V0SXRl
bShpKS0+dmFsdWUoKTsKKyAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7aSA8IGR5
Y291bnQ7aSsrKQorICAgICAgICAgICAgICAgIF9keVtpbmRleCArIGldID0gdGVsZW0tPmR5KCkt
PmJhc2VWYWwoKS0+Z2V0SXRlbShpKS0+dmFsdWUoKTsKKyAgICAgICAgICAgIGlmKHhjb3VudCA+
IDApIGN1cnggPSBfeFtpbmRleF07CisgICAgICAgICAgICBpZih5Y291bnQgPiAwKSBjdXJ5ID0g
X3lbaW5kZXhdOworICAgICAgICAgICAgaWYoZHhjb3VudCA+IDApIGN1cmR4ID0gX2R4W2luZGV4
XTsKKyAgICAgICAgICAgIGlmKGR5Y291bnQgPiAwKSBjdXJkeSA9IF9keVtpbmRleF07CisgICAg
ICAgICAgICBmb3IodW5zaWduZWQgaW50IGkgPSAwO2kgPCB0ZXh0Lmxlbmd0aCgpO2krKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZihpIDwgeGNvdW50IHx8IGkgPCB5Y291bnQg
fHwgaSA8IGR4Y291bnQgfHwgaSA8IGR5Y291bnQpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpZighc3RyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PEtDYW52YXNUZXh0SXRlbSAqPihtX2NhbnZhc0l0ZW0pLT5hZGRUZXh0Q2h1
bmsoYWJzb2x1dGUgPyBRUG9pbnRGKGN1cngsIGN1cnkpIDogUVBvaW50RigpLCBRUG9pbnRGKGN1
cmR4LCBjdXJkeSksIHN0ciwgcmVuZGVyaW5nU3R5bGUpOworICAgICAgICAgICAgICAgICAgICBp
ZihpIDwgeGNvdW50IHx8IGkgPCB5Y291bnQpIGFic29sdXRlID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYoaSA8IHhjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnggPSBf
eFtpbmRleF07CisgICAgICAgICAgICAgICAgICAgIGlmKGkgPCB5Y291bnQpCisgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJ5ID0gX3lbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZihp
IDwgZHhjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cmR4ID0gX2R4W2luZGV4XTsK
KyAgICAgICAgICAgICAgICAgICAgaWYoaSA8IGR5Y291bnQpCisgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJkeSA9IF9keVtpbmRleF07CisgICAgICAgICAgICAgICAgICAgIHN0ciA9ICIiOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0cnlBZGRDaGFyYWN0ZXIocmVwbGFj
ZSwgc3RyLCB0ZXh0W2ldLCBpbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBrZERl
YnVnKCkgPDwgImFkZGluZyB0ZXh0IDogIiA8PCAiIHggOiAiIDw8IGN1cnggPDwgIiB5IDogIiA8
PCBjdXJ5IDw8IHN0ciA8PCBlbmRsOworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8S0NhbnZhc1Rl
eHRJdGVtICo+KG1fY2FudmFzSXRlbSktPmFkZFRleHRDaHVuayhhYnNvbHV0ZSA/IFFQb2ludEYo
Y3VyeCwgY3VyeSkgOiBRUG9pbnRGKCksIFFQb2ludEYoY3VyZHgsIGN1cmR5KSwgc3RyLCByZW5k
ZXJpbmdTdHlsZSk7CisgICAgICAgICAgICBhYnNvbHV0ZSA9IGZhbHNlOworICAgICAgICAgICAg
c3RyID0gIiI7CisgICAgICAgIH0KKyAgICB9Cit9CisKIC8vIHZpbTp0cz00Om5vZXQKSW5kZXg6
IHN2Zy9TVkdTdHlsZWRFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdTdHlsZWRF
bGVtZW50SW1wbC5oCShyZXZpc2lvbiA0NjY0OTkpCisrKyBzdmcvU1ZHU3R5bGVkRWxlbWVudElt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQAogICAgIHByb3RlY3RlZDoKICAg
ICAgICAgZnJpZW5kIGNsYXNzIFNWR0RvY3VtZW50SW1wbDsgLy8gTmVlZHMgcmVuZGVyU3R5bGUg
YWNjZXNzcy4uLgogICAgICAgICBmcmllbmQgY2xhc3MgU1ZHQ2xpcFBhdGhFbGVtZW50SW1wbDsg
Ly8gTmVlZHMgcmVuZGVyU3R5bGUgYWNjZXNzLi4KKyAgICAgICAgZnJpZW5kIGNsYXNzIFNWR1Rl
eHRFbGVtZW50SW1wbDsgLy8gTmVlZHMgcmVuZGVyU3R5bGUgYWNjZXNzLi4KIAogICAgICAgICBL
Q2FudmFzICpjYW52YXMoKSBjb25zdDsKICAgICAgICAgS0NhbnZhc1ZpZXcgKmNhbnZhc1ZpZXco
KSBjb25zdDsKSW5kZXg6IG1pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gbWlzYy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuaAkocmV2aXNpb24gNDY2NDk5KQorKysgbWlz
Yy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMTcg
QEAKICAgICAgICAgLy8gRmlsdGVyIHN1cHBvcnQKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRmls
dGVyICpmaWx0ZXIoKSBjb25zdDsKIAorICAgICAgICAvLyBUZXh0IHN1cHBvcnQKKyAgICAgICAg
dmlydHVhbCBjb25zdCBRRm9udCAmZm9udCgpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgYm9v
bCBoYXNVbmRlcmxpbmUoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIGhhc092ZXJsaW5l
KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNTdHJpa2VUaHJvdWdoKCkgY29uc3Q7
CisKKyAgICAgICAgdmlydHVhbCBLQ1RleHRBbmNob3IgYW5jaG9yKCkgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgYm9vbCB2ZXJ0aWNhbFRleHQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29s
IGx0cigpIGNvbnN0OworCiAgICAgcHJpdmF0ZToKICAgICAgICAgS0NhbnZhc1JlbmRlcmluZ1N0
eWxlKGNvbnN0IEtDYW52YXNSZW5kZXJpbmdTdHlsZSAmb3RoZXIpOwogCkluZGV4OiBtaXNjL0tD
YW52YXNSZW5kZXJpbmdTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWlzYy9LQ2FudmFzUmVuZGVy
aW5nU3R5bGUuY3BwCShyZXZpc2lvbiA0NjY0OTkpCisrKyBtaXNjL0tDYW52YXNSZW5kZXJpbmdT
dHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3OCw0ICszNzgsNDAgQEAKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8S0NhbnZhc0ZpbHRlciAqPihtX2NhbnZhcy0+cmVnaXN0cnkoKS0+Z2V0UmVz
b3VyY2VCeUlkKGxvb2t1cCkpOwogfQogCitjb25zdCBRRm9udCAmS0NhbnZhc1JlbmRlcmluZ1N0
eWxlOjpmb250KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHlsZS0+Zm9udCgpOworfQorCiti
b29sIEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6aGFzVW5kZXJsaW5lKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9zdHlsZS0+dGV4dERlY29yYXRpb24oKSAmIEtET006OlREX1VOREVSTElORTsKK30K
KworYm9vbCBLQ2FudmFzUmVuZGVyaW5nU3R5bGU6Omhhc092ZXJsaW5lKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9zdHlsZS0+dGV4dERlY29yYXRpb24oKSAmIEtET006OlREX09WRVJMSU5FOwor
fQorCitib29sIEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6aGFzU3RyaWtlVGhyb3VnaCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fc3R5bGUtPnRleHREZWNvcmF0aW9uKCkgJiBLRE9NOjpURF9MSU5F
X1RIUk9VR0g7Cit9CisKK0tDVGV4dEFuY2hvciBLQ2FudmFzUmVuZGVyaW5nU3R5bGU6OmFuY2hv
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIChLQ1RleHRBbmNob3IpbV9zdHlsZS0+dGV4dEFuY2hv
cigpOworfQorCitib29sIEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6dmVydGljYWxUZXh0KCkgY29u
c3QKK3sKKyAgICBrZERlYnVnKCkgPDwgIndtMiA6ICIgPDwgbV9zdHlsZS0+d3JpdGluZ01vZGUo
KSA8PCBlbmRsOworICAgIHJldHVybiBtX3N0eWxlLT53cml0aW5nTW9kZSgpID4gV01fUkw7Cit9
CisKK2Jvb2wgS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpsdHIoKSBjb25zdAoreworICAgIHJldHVy
biBtX3N0eWxlLT5kaXJlY3Rpb24oKSA8IEtET006OkRJX1JUTDsKK30KKwogLy8gdmltOnRzPTQ6
bm9ldApJbmRleDogS1NWR1BhcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEtTVkdQYXJ0LmNwcAkocmV2
aXNpb24gNDY2NDk5KQorKysgS1NWR1BhcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNyAr
MjMxLDcgQEAKIAogICAgICAgICAvLyBubyBlbnRpdHkgcmVmcwogICAgICAgICBrc3ZnZC0+cGFy
c2VyLT5kb21Db25maWcoKS0+c2V0UGFyYW1ldGVyKEtET006OkVOVElUSUVTLmhhbmRsZSgpLCBm
YWxzZSk7Ci0gICAgICAgIGtzdmdkLT5wYXJzZXItPmRvbUNvbmZpZygpLT5zZXRQYXJhbWV0ZXIo
S0RPTTo6RUxFTUVOVF9DT05URU5UX1dISVRFU1BBQ0UuaGFuZGxlKCksIGZhbHNlKTsKKyAgICAg
ICAga3N2Z2QtPnBhcnNlci0+ZG9tQ29uZmlnKCktPnNldFBhcmFtZXRlcihLRE9NOjpFTEVNRU5U
X0NPTlRFTlRfV0hJVEVTUEFDRS5oYW5kbGUoKSwgdHJ1ZSk7CiAKICAgICAgICAgZW1pdCBzdGFy
dGVkKDApOwogICAgICAgICBRT2JqZWN0Ojpjb25uZWN0KGtzdmdkLT5wYXJzZXIsIFNJR05BTChw
YXJzaW5nRmluaXNoZWQoS0RPTTo6RE9NRXJyb3JJbXBsICopKSwgdGhpcywgU0xPVChzbG90UGFy
c2luZ0ZpbmlzaGVkKEtET006OkRPTUVycm9ySW1wbCAqKSkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4213</attachid>
            <date>2005-10-05 08:53:16 -0700</date>
            <delta_ts>2005-10-05 08:53:16 -0700</delta_ts>
            <desc>Ksvg2 side of text support</desc>
            <filename>text-support-ksvg2.diff</filename>
            <type>text/plain</type>
            <size>11096</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IHN2Zy9TVkdUZXh0RWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzdmcvU1ZHVGV4
dEVsZW1lbnRJbXBsLmgJKHJldmlzaW9uIDQ2NjQ5OSkKKysrIHN2Zy9TVkdUZXh0RWxlbWVudElt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsMTEgQEAKICAgICAgICAgdmlydHVhbCB+
U1ZHVGV4dEVsZW1lbnRJbXBsKCk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlQXR0cmli
dXRlKEtET006OkF0dHJpYnV0ZUltcGwgKmF0dHIpOworCiAgICAgICAgIC8vICdTVkdUZXh0RWxl
bWVudCcgZnVuY3Rpb25zCisgICAgICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FudmFzSXRl
bSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgdmlydHVhbCBLQ2FudmFzSXRlbSAq
Y3JlYXRlQ2FudmFzSXRlbShLQ2FudmFzICpjYW52YXMsIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKICAgICB9OwogfTsKIApJbmRl
eDogc3ZnL1NWR1RleHRFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3ZnL1NWR1RleHRF
bGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDQ2NjQ5OSkKKysrIHN2Zy9TVkdUZXh0RWxlbWVudElt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw5ICsyMCwyMCBAQAogICAgIEJvc3RvbiwgTUEg
MDIxMTEtMTMwNywgVVNBLgogKi8KIAotLy8jaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKKyNpbmNs
dWRlIDxrZG9tL2tkb20uaD4KICNpbmNsdWRlICJTVkdUZXh0RWxlbWVudEltcGwuaCIKKyNpbmNs
dWRlICJTVkdUU3BhbkVsZW1lbnRJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGhM
aXN0SW1wbC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiS0NhbnZh
c1JlbmRlcmluZ1N0eWxlLmgiCisjaW5jbHVkZSA8a2RvbS9jc3MvUmVuZGVyU3R5bGUuaD4KIAor
I2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0NyZWF0b3IuaD4KKworI2luY2x1ZGUgPHF2ZWN0b3Iu
aD4KKworI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc1RleHRJdGVtLmg+CisKIHVzaW5nIG5hbWVz
cGFjZSBLU1ZHOwogCiBTVkdUZXh0RWxlbWVudEltcGw6OlNWR1RleHRFbGVtZW50SW1wbChLRE9N
OjpEb2N1bWVudFB0ciAqZG9jLCBLRE9NOjpOb2RlSW1wbDo6SWQgaWQsIEtET006OkRPTVN0cmlu
Z0ltcGwgKnByZWZpeCkKQEAgLTQwLDQgKzUxLDE0NyBAQAogICAgIFNWR1RleHRQb3NpdGlvbmlu
Z0VsZW1lbnRJbXBsOjpwYXJzZUF0dHJpYnV0ZShhdHRyKTsKIH0KIAorS0NhbnZhc0l0ZW0gKlNW
R1RleHRFbGVtZW50SW1wbDo6Y3JlYXRlQ2FudmFzSXRlbShLQ2FudmFzICpjYW52YXMsIEtSZW5k
ZXJpbmdTdHlsZSAqc3R5bGUpIGNvbnN0Cit7CisgICAgS0NhbnZhc1RleHRJdGVtICppdGVtID0g
S0NhbnZhc0NyZWF0b3I6OnNlbGYoKS0+Y3JlYXRlVGV4dEl0ZW0oY2FudmFzLCBRU3RyaW5nKCks
IHN0eWxlKTsKKyAgICAvLyBBc3NvY2lhdGUgJ0tDYW52YXNJdGVtJyB3aXRoICdTVkdTdHlsZWRF
bGVtZW50SW1wbCcKKyAgICBpdGVtLT5zZXRVc2VyRGF0YShjb25zdF9jYXN0PFNWR1RleHRFbGVt
ZW50SW1wbCAqPih0aGlzKSk7CisKKyAgICByZXR1cm4gaXRlbTsKK30KKwordm9pZCB0cnlBZGRD
aGFyYWN0ZXIoYm9vbCByZXBsYWNlLCBRU3RyaW5nICZzdHIsIFFDaGFyIGNoLCB1bnNpZ25lZCBp
bnQgJmluZGV4KQoreworCWlmKHJlcGxhY2UpCisJeworCQlpZihjaC51bmljb2RlKCkgPT0gMHgw
QSB8fCBjaC51bmljb2RlKCkgPT0gMHgwQyB8fCBjaC51bmljb2RlKCkgPT0gMHgwOSkgY2ggPSAn
ICc7CisJfQorCWVsc2UKKwl7CisJCWtkRGVidWcoKSA8PCAiRGVhbGluZyB3aXRoIDogIiA8PCBj
aC51bmljb2RlKCkgPDwgIigiIDw8IGNoIDw8ICIpIiA8PCBlbmRsOworCQlpZihjaC51bmljb2Rl
KCkgPT0gMHgwQSB8fCBjaC51bmljb2RlKCkgPT0gMHgwQykgcmV0dXJuOworCQllbHNlIGlmKGNo
LnVuaWNvZGUoKSA9PSAweDA5KSBjaCA9ICcgJzsKKwkJaWYoY2guaXNTcGFjZSgpICYmIChpbmRl
eCA9PSAwIHx8IHN0ci5lbmRzV2l0aCgnICcpKSkgcmV0dXJuOworICAgIH0KKworICAgIHN0ciAr
PSBjaDsKKyAgICBpbmRleCsrOworfQorCit2b2lkIFNWR1RleHRFbGVtZW50SW1wbDo6Y2xvc2Uo
KQoreworICAgIC8vIDEuIHhtbDpzcGFjZQorICAgIGJvb2wgcmVwbGFjZSA9IEtET006OkRPTVN0
cmluZyh4bWxzcGFjZSgpKS5zdHJpbmcoKSA9PSAicHJlc2VydmUiOworICAgIGtkRGVidWcoKSA8
PCAiUFJFU0VSVkUgOiAiIDw8IEtET006OkRPTVN0cmluZyh4bWxzcGFjZSgpKS5zdHJpbmcoKSA8
PCBlbmRsOworCisgICAgdW5zaWduZWQgaW50IGluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBpbnQg
eGNvdW50ID0geCgpLT5iYXNlVmFsKCktPm51bWJlck9mSXRlbXMoKTsKKyAgICB1bnNpZ25lZCBp
bnQgeWNvdW50ID0geSgpLT5iYXNlVmFsKCktPm51bWJlck9mSXRlbXMoKTsKKyAgICB1bnNpZ25l
ZCBpbnQgZHhjb3VudCA9IGR4KCktPmJhc2VWYWwoKS0+bnVtYmVyT2ZJdGVtcygpOworICAgIHVu
c2lnbmVkIGludCBkeWNvdW50ID0gZHkoKS0+YmFzZVZhbCgpLT5udW1iZXJPZkl0ZW1zKCk7Cisg
ICAgaW50IGxlbj0gdGV4dENvbnRlbnQoKS0+bGVuZ3RoKCk7CisgICAgUVZlY3RvcjxmbG9hdD4g
X3gobGVuKTsKKyAgICBRVmVjdG9yPGZsb2F0PiBfeShsZW4pOworICAgIFFWZWN0b3I8ZmxvYXQ+
IF9keChsZW4pOworICAgIFFWZWN0b3I8ZmxvYXQ+IF9keShsZW4pOworICAgIGZsb2F0IGN1cngg
PSAwLiwgY3VyeSA9IDAuLCBjdXJkeCA9IDAuLCBjdXJkeSA9IDAuOworICAgIGN1cmR4ID0gMDsK
KyAgICBjdXJkeSA9IDA7CisgICAgZm9yKHVuc2lnbmVkIGludCBpID0gMDtpIDwgeGNvdW50O2kr
KykKKyAgICAgICAgX3hbaV0gPSB4KCktPmJhc2VWYWwoKS0+Z2V0SXRlbShpKS0+dmFsdWUoKTsK
KyAgICBmb3IodW5zaWduZWQgaW50IGkgPSAwO2kgPCB5Y291bnQ7aSsrKQorICAgICAgICBfeVtp
XSA9IHkoKS0+YmFzZVZhbCgpLT5nZXRJdGVtKGkpLT52YWx1ZSgpOworICAgIGZvcih1bnNpZ25l
ZCBpbnQgaSA9IDA7aSA8IGR4Y291bnQ7aSsrKQorICAgICAgICBfZHhbaV0gPSBkeCgpLT5iYXNl
VmFsKCktPmdldEl0ZW0oaSktPnZhbHVlKCk7CisgICAgZm9yKHVuc2lnbmVkIGludCBpID0gMDtp
IDwgZHljb3VudDtpKyspCisgICAgICAgIF9keVtpXSA9IGR5KCktPmJhc2VWYWwoKS0+Z2V0SXRl
bShpKS0+dmFsdWUoKTsKKyAgICBjdXJ4ID0gX3hbMF07CisgICAgY3VyeSA9IF95WzBdOworICAg
IFFTdHJpbmcgc3RyOworICAgIGJvb2wgYWJzb2x1dGUgPSB0cnVlOworICAgIGZvcihLRE9NOjpO
b2RlSW1wbCAqbiA9IGZpcnN0Q2hpbGQoKTsgbiAhPSAwOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkK
KyAgICB7CisgICAgICAgIGlmKG4tPm5vZGVUeXBlKCkgPT0gS0RPTTo6VEVYVF9OT0RFKQorICAg
ICAgICB7CisgICAgICAgICAgICBLRE9NOjpET01TdHJpbmcgdGV4dChuLT50ZXh0Q29udGVudCgp
KTsKKyAgICAgICAgICAgIC8vdGV4dCA9IHRleHQuc3RyaW5nKCkuc2ltcGxpZnlXaGl0ZVNwYWNl
KCk7CisgICAgICAgICAgICBrZERlYnVnKCkgPDwgInRleHQgOiAiIDw8IHRleHQuc3RyaW5nKCkg
PDwgZW5kbDsKKyAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7aSA8IHRleHQubGVu
Z3RoKCk7aSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKGluZGV4IDwgeGNv
dW50IHx8IGluZGV4IDwgeWNvdW50IHx8IGluZGV4IDwgZHhjb3VudCB8fCBpbmRleCA8IGR5Y291
bnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZighc3RyLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEtDYW52YXNUZXh0SXRl
bSAqPihtX2NhbnZhc0l0ZW0pLT5hZGRUZXh0Q2h1bmsoYWJzb2x1dGUgPyBRUG9pbnRGKGN1cngs
IGN1cnkpIDogUVBvaW50RigpLCBRUG9pbnRGKGN1cmR4LCBjdXJkeSksIHN0ciwgbV9jYW52YXNJ
dGVtLT5zdHlsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYoaSA8IHhjb3VudCB8fCBpIDwg
eWNvdW50KSBhYnNvbHV0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmKGluZGV4IDwg
eGNvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgY3VyeCA9IF94W2luZGV4XTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYoaW5kZXggPCB5Y291bnQpCisgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJ5ID0gX3lbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZihpbmRleCA8IGR4Y291
bnQpCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJkeCA9IF9keFtpbmRleF07CisgICAgICAg
ICAgICAgICAgICAgIGlmKGluZGV4IDwgZHljb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGN1cmR5ID0gX2R5W2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgc3RyID0gIiI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRyeUFkZENoYXJhY3RlcihyZXBsYWNlLCBz
dHIsIHRleHRbaV0sIGluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGtkRGVidWco
KSA8PCAiYWRkaW5nIHRleHQgOiAiIDw8ICIgeCA6ICIgPDwgY3VyeCA8PCAiIHkgOiAiIDw8IGN1
cnkgPDwgc3RyIDw8IGVuZGw7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxLQ2FudmFzVGV4dEl0
ZW0gKj4obV9jYW52YXNJdGVtKS0+YWRkVGV4dENodW5rKGFic29sdXRlID8gUVBvaW50RihjdXJ4
LCBjdXJ5KSA6IFFQb2ludEYoKSwgUVBvaW50RihjdXJkeCwgY3VyZHkpLCBzdHIsIG1fY2FudmFz
SXRlbS0+c3R5bGUoKSk7CisgICAgICAgICAgICBhYnNvbHV0ZSA9IGZhbHNlOworICAgICAgICAg
ICAgc3RyID0gIiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihuLT5pZCgpID09IElEX1RT
UEFOIHx8IG4tPmlkKCkgPT0gSURfVFJFRikKKyAgICAgICAgeworICAgICAgICAgICAgU1ZHVGV4
dFBvc2l0aW9uaW5nRWxlbWVudEltcGwgKnRlbGVtID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dFBvc2l0
aW9uaW5nRWxlbWVudEltcGwgKj4obik7CisgICAgICAgICAgICBTVkdSZW5kZXJTdHlsZSAqc3Zn
U3R5bGUgPSBzdGF0aWNfY2FzdDxTVkdSZW5kZXJTdHlsZSAqPihzdGF0aWNfY2FzdDxTVkdUZXh0
UG9zaXRpb25pbmdFbGVtZW50SW1wbCAqPihuKS0+cmVuZGVyU3R5bGUoKSk7CisgICAgICAgICAg
ICBLQ2FudmFzUmVuZGVyaW5nU3R5bGUgKnJlbmRlcmluZ1N0eWxlID0gbmV3IEtDYW52YXNSZW5k
ZXJpbmdTdHlsZShjYW52YXMoKSwgc3ZnU3R5bGUpOworICAgICAgICAgICAgcmVuZGVyaW5nU3R5
bGUtPnVwZGF0ZVN0eWxlKHN2Z1N0eWxlLCBjYW52YXNJdGVtKCkpOworICAgICAgICAgICAgcmVu
ZGVyaW5nU3R5bGUtPnNldE9iamVjdE1hdHJpeChtX2NhbnZhc0l0ZW0tPnN0eWxlKCktPm9iamVj
dE1hdHJpeCgpKTsKKyAgICAgICAgICAgIEtET006OkRPTVN0cmluZyB0ZXh0KG4tPnRleHRDb250
ZW50KCkpOworICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJ0ZXh0MiA6ICIgPDwgdGV4dC5zdHJp
bmcoKSA8PCBlbmRsOworICAgICAgICAgICAgdW5zaWduZWQgaW50IHhjb3VudCA9IHRlbGVtLT54
KCktPmJhc2VWYWwoKS0+bnVtYmVyT2ZJdGVtcygpOworICAgICAgICAgICAgdW5zaWduZWQgaW50
IHljb3VudCA9IHRlbGVtLT55KCktPmJhc2VWYWwoKS0+bnVtYmVyT2ZJdGVtcygpOworICAgICAg
ICAgICAgdW5zaWduZWQgaW50IGR4Y291bnQgPSB0ZWxlbS0+ZHgoKS0+YmFzZVZhbCgpLT5udW1i
ZXJPZkl0ZW1zKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZHljb3VudCA9IHRlbGVtLT5k
eSgpLT5iYXNlVmFsKCktPm51bWJlck9mSXRlbXMoKTsKKyAgICAgICAgICAgIGN1cmR4ID0gMDsK
KyAgICAgICAgICAgIGN1cmR5ID0gMDsKKyAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9
IDA7aSA8IHhjb3VudDtpKyspCisgICAgICAgICAgICAgICAgX3hbaW5kZXggKyBpXSA9IHRlbGVt
LT54KCktPmJhc2VWYWwoKS0+Z2V0SXRlbShpKS0+dmFsdWUoKTsKKyAgICAgICAgICAgIGZvcih1
bnNpZ25lZCBpbnQgaSA9IDA7aSA8IHljb3VudDtpKyspCisgICAgICAgICAgICAgICAgX3lbaW5k
ZXggKyBpXSA9IHRlbGVtLT55KCktPmJhc2VWYWwoKS0+Z2V0SXRlbShpKS0+dmFsdWUoKTsKKyAg
ICAgICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7aSA8IGR4Y291bnQ7aSsrKQorICAgICAg
ICAgICAgICAgIF9keFtpbmRleCArIGldID0gdGVsZW0tPmR4KCktPmJhc2VWYWwoKS0+Z2V0SXRl
bShpKS0+dmFsdWUoKTsKKyAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7aSA8IGR5
Y291bnQ7aSsrKQorICAgICAgICAgICAgICAgIF9keVtpbmRleCArIGldID0gdGVsZW0tPmR5KCkt
PmJhc2VWYWwoKS0+Z2V0SXRlbShpKS0+dmFsdWUoKTsKKyAgICAgICAgICAgIGlmKHhjb3VudCA+
IDApIGN1cnggPSBfeFtpbmRleF07CisgICAgICAgICAgICBpZih5Y291bnQgPiAwKSBjdXJ5ID0g
X3lbaW5kZXhdOworICAgICAgICAgICAgaWYoZHhjb3VudCA+IDApIGN1cmR4ID0gX2R4W2luZGV4
XTsKKyAgICAgICAgICAgIGlmKGR5Y291bnQgPiAwKSBjdXJkeSA9IF9keVtpbmRleF07CisgICAg
ICAgICAgICBmb3IodW5zaWduZWQgaW50IGkgPSAwO2kgPCB0ZXh0Lmxlbmd0aCgpO2krKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZihpIDwgeGNvdW50IHx8IGkgPCB5Y291bnQg
fHwgaSA8IGR4Y291bnQgfHwgaSA8IGR5Y291bnQpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpZighc3RyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PEtDYW52YXNUZXh0SXRlbSAqPihtX2NhbnZhc0l0ZW0pLT5hZGRUZXh0Q2h1
bmsoYWJzb2x1dGUgPyBRUG9pbnRGKGN1cngsIGN1cnkpIDogUVBvaW50RigpLCBRUG9pbnRGKGN1
cmR4LCBjdXJkeSksIHN0ciwgcmVuZGVyaW5nU3R5bGUpOworICAgICAgICAgICAgICAgICAgICBp
ZihpIDwgeGNvdW50IHx8IGkgPCB5Y291bnQpIGFic29sdXRlID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYoaSA8IHhjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnggPSBf
eFtpbmRleF07CisgICAgICAgICAgICAgICAgICAgIGlmKGkgPCB5Y291bnQpCisgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJ5ID0gX3lbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZihp
IDwgZHhjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cmR4ID0gX2R4W2luZGV4XTsK
KyAgICAgICAgICAgICAgICAgICAgaWYoaSA8IGR5Y291bnQpCisgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJkeSA9IF9keVtpbmRleF07CisgICAgICAgICAgICAgICAgICAgIHN0ciA9ICIiOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0cnlBZGRDaGFyYWN0ZXIocmVwbGFj
ZSwgc3RyLCB0ZXh0W2ldLCBpbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBrZERl
YnVnKCkgPDwgImFkZGluZyB0ZXh0IDogIiA8PCAiIHggOiAiIDw8IGN1cnggPDwgIiB5IDogIiA8
PCBjdXJ5IDw8IHN0ciA8PCBlbmRsOworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8S0NhbnZhc1Rl
eHRJdGVtICo+KG1fY2FudmFzSXRlbSktPmFkZFRleHRDaHVuayhhYnNvbHV0ZSA/IFFQb2ludEYo
Y3VyeCwgY3VyeSkgOiBRUG9pbnRGKCksIFFQb2ludEYoY3VyZHgsIGN1cmR5KSwgc3RyLCByZW5k
ZXJpbmdTdHlsZSk7CisgICAgICAgICAgICBhYnNvbHV0ZSA9IGZhbHNlOworICAgICAgICAgICAg
c3RyID0gIiI7CisgICAgICAgIH0KKyAgICB9Cit9CisKIC8vIHZpbTp0cz00Om5vZXQKSW5kZXg6
IHN2Zy9TVkdTdHlsZWRFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdTdHlsZWRF
bGVtZW50SW1wbC5oCShyZXZpc2lvbiA0NjY0OTkpCisrKyBzdmcvU1ZHU3R5bGVkRWxlbWVudElt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQAogICAgIHByb3RlY3RlZDoKICAg
ICAgICAgZnJpZW5kIGNsYXNzIFNWR0RvY3VtZW50SW1wbDsgLy8gTmVlZHMgcmVuZGVyU3R5bGUg
YWNjZXNzcy4uLgogICAgICAgICBmcmllbmQgY2xhc3MgU1ZHQ2xpcFBhdGhFbGVtZW50SW1wbDsg
Ly8gTmVlZHMgcmVuZGVyU3R5bGUgYWNjZXNzLi4KKyAgICAgICAgZnJpZW5kIGNsYXNzIFNWR1Rl
eHRFbGVtZW50SW1wbDsgLy8gTmVlZHMgcmVuZGVyU3R5bGUgYWNjZXNzLi4KIAogICAgICAgICBL
Q2FudmFzICpjYW52YXMoKSBjb25zdDsKICAgICAgICAgS0NhbnZhc1ZpZXcgKmNhbnZhc1ZpZXco
KSBjb25zdDsKSW5kZXg6IG1pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gbWlzYy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuaAkocmV2aXNpb24gNDY2NDk5KQorKysgbWlz
Yy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMTcg
QEAKICAgICAgICAgLy8gRmlsdGVyIHN1cHBvcnQKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRmls
dGVyICpmaWx0ZXIoKSBjb25zdDsKIAorICAgICAgICAvLyBUZXh0IHN1cHBvcnQKKyAgICAgICAg
dmlydHVhbCBjb25zdCBRRm9udCAmZm9udCgpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgYm9v
bCBoYXNVbmRlcmxpbmUoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIGhhc092ZXJsaW5l
KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNTdHJpa2VUaHJvdWdoKCkgY29uc3Q7
CisKKyAgICAgICAgdmlydHVhbCBLQ1RleHRBbmNob3IgYW5jaG9yKCkgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgYm9vbCB2ZXJ0aWNhbFRleHQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29s
IGx0cigpIGNvbnN0OworCiAgICAgcHJpdmF0ZToKICAgICAgICAgS0NhbnZhc1JlbmRlcmluZ1N0
eWxlKGNvbnN0IEtDYW52YXNSZW5kZXJpbmdTdHlsZSAmb3RoZXIpOwogCkluZGV4OiBtaXNjL0tD
YW52YXNSZW5kZXJpbmdTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWlzYy9LQ2FudmFzUmVuZGVy
aW5nU3R5bGUuY3BwCShyZXZpc2lvbiA0NjY0OTkpCisrKyBtaXNjL0tDYW52YXNSZW5kZXJpbmdT
dHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3OCw0ICszNzgsNDAgQEAKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8S0NhbnZhc0ZpbHRlciAqPihtX2NhbnZhcy0+cmVnaXN0cnkoKS0+Z2V0UmVz
b3VyY2VCeUlkKGxvb2t1cCkpOwogfQogCitjb25zdCBRRm9udCAmS0NhbnZhc1JlbmRlcmluZ1N0
eWxlOjpmb250KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHlsZS0+Zm9udCgpOworfQorCiti
b29sIEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6aGFzVW5kZXJsaW5lKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9zdHlsZS0+dGV4dERlY29yYXRpb24oKSAmIEtET006OlREX1VOREVSTElORTsKK30K
KworYm9vbCBLQ2FudmFzUmVuZGVyaW5nU3R5bGU6Omhhc092ZXJsaW5lKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9zdHlsZS0+dGV4dERlY29yYXRpb24oKSAmIEtET006OlREX09WRVJMSU5FOwor
fQorCitib29sIEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6aGFzU3RyaWtlVGhyb3VnaCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fc3R5bGUtPnRleHREZWNvcmF0aW9uKCkgJiBLRE9NOjpURF9MSU5F
X1RIUk9VR0g7Cit9CisKK0tDVGV4dEFuY2hvciBLQ2FudmFzUmVuZGVyaW5nU3R5bGU6OmFuY2hv
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIChLQ1RleHRBbmNob3IpbV9zdHlsZS0+dGV4dEFuY2hv
cigpOworfQorCitib29sIEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6dmVydGljYWxUZXh0KCkgY29u
c3QKK3sKKyAgICBrZERlYnVnKCkgPDwgIndtMiA6ICIgPDwgbV9zdHlsZS0+d3JpdGluZ01vZGUo
KSA8PCBlbmRsOworICAgIHJldHVybiBtX3N0eWxlLT53cml0aW5nTW9kZSgpID4gV01fUkw7Cit9
CisKK2Jvb2wgS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpsdHIoKSBjb25zdAoreworICAgIHJldHVy
biBtX3N0eWxlLT5kaXJlY3Rpb24oKSA8IEtET006OkRJX1JUTDsKK30KKwogLy8gdmltOnRzPTQ6
bm9ldApJbmRleDogS1NWR1BhcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEtTVkdQYXJ0LmNwcAkocmV2
aXNpb24gNDY2NDk5KQorKysgS1NWR1BhcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNyAr
MjMxLDcgQEAKIAogICAgICAgICAvLyBubyBlbnRpdHkgcmVmcwogICAgICAgICBrc3ZnZC0+cGFy
c2VyLT5kb21Db25maWcoKS0+c2V0UGFyYW1ldGVyKEtET006OkVOVElUSUVTLmhhbmRsZSgpLCBm
YWxzZSk7Ci0gICAgICAgIGtzdmdkLT5wYXJzZXItPmRvbUNvbmZpZygpLT5zZXRQYXJhbWV0ZXIo
S0RPTTo6RUxFTUVOVF9DT05URU5UX1dISVRFU1BBQ0UuaGFuZGxlKCksIGZhbHNlKTsKKyAgICAg
ICAga3N2Z2QtPnBhcnNlci0+ZG9tQ29uZmlnKCktPnNldFBhcmFtZXRlcihLRE9NOjpFTEVNRU5U
X0NPTlRFTlRfV0hJVEVTUEFDRS5oYW5kbGUoKSwgdHJ1ZSk7CiAKICAgICAgICAgZW1pdCBzdGFy
dGVkKDApOwogICAgICAgICBRT2JqZWN0Ojpjb25uZWN0KGtzdmdkLT5wYXJzZXIsIFNJR05BTChw
YXJzaW5nRmluaXNoZWQoS0RPTTo6RE9NRXJyb3JJbXBsICopKSwgdGhpcywgU0xPVChzbG90UGFy
c2luZ0ZpbmlzaGVkKEtET006OkRPTUVycm9ySW1wbCAqKSkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4219</attachid>
            <date>2005-10-05 11:19:13 -0700</date>
            <delta_ts>2005-10-05 11:22:09 -0700</delta_ts>
            <desc>KCanvas side of text support</desc>
            <filename>text-support-kcanvas.diff</filename>
            <type>text/plain</type>
            <size>25012</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IEtDYW52YXNDcmVhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBLQ2FudmFzQ3JlYXRvci5j
cHAJKHJldmlzaW9uIDQ2Njk1MCkKKysrIEtDYW52YXNDcmVhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIktDYW52YXNDcmVhdG9yLmgiCiAjaW5jbHVk
ZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIktDYW52YXNDb250YWluZXIuaCIKKyNp
bmNsdWRlICJLQ2FudmFzVGV4dEl0ZW0uaCIKIAogc3RhdGljIEtTdGF0aWNEZWxldGVyPEtDYW52
YXNDcmVhdG9yPiBjYW52YXNDcmVhdG9yRGVsZXRlcjsKIEtDYW52YXNDcmVhdG9yICpLQ2FudmFz
Q3JlYXRvcjo6c19jcmVhdG9yID0gMDsKQEAgLTIyNSw0ICsyMjYsOSBAQAogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxLQ2FudmFzQ29udGFpbmVyICo+KGNhbnZhcy0+cmVuZGVyaW5nRGV2aWNlKCkt
PmNyZWF0ZUNvbnRhaW5lcihjYW52YXMsIHN0eWxlKSk7CiB9CiAKK0tDYW52YXNUZXh0SXRlbSAq
S0NhbnZhc0NyZWF0b3I6OmNyZWF0ZVRleHRJdGVtKEtDYW52YXMgKmNhbnZhcywgY29uc3QgUVN0
cmluZyAmc3RyLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlKSBjb25zdAoreworICAgIHJldHVybiBj
YW52YXMtPnJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVUZXh0SXRlbShjYW52YXMsIHN0ciwgc3R5
bGUpOworfQorCiAvLyB2aW06dHM9NDpub2V0CkluZGV4OiBkZXZpY2UvS1JlbmRlcmluZ1N0cm9r
ZVBhaW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldmljZS9LUmVuZGVyaW5nU3Ryb2tlUGFpbnRl
ci5jcHAJKHJldmlzaW9uIDQ2Njk1MCkKKysrIGRldmljZS9LUmVuZGVyaW5nU3Ryb2tlUGFpbnRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDggQEAKIAogICAgIH5Qcml2YXRlKCkK
ICAgICB7Ci0gICAgICAgIGlmKHBzZXJ2ZXIgJiYgKHBzZXJ2ZXItPnR5cGUoKSA9PSBQU19TT0xJ
RCB8fCBwc2VydmVyLT50eXBlKCkgPT0gUFNfSU1BR0UpKQotICAgICAgICAgICAgZGVsZXRlIHBz
ZXJ2ZXI7CisgICAgICAgIGlmKHBzZXJ2ZXIpCisgICAgICAgICAgICBwc2VydmVyLT5kZXJlZigp
OwogICAgIH0KIAogICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqcHNlcnZlcjsKQEAgLTc2LDkg
Kzc2LDEzIEBACiB2b2lkIEtSZW5kZXJpbmdTdHJva2VQYWludGVyOjpzZXRQYWludFNlcnZlcihL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnBzZXJ2ZXIpCiB7CiAgICAgc2V0RGlydHkoKTsKLSAgICBp
ZihkLT5wc2VydmVyICYmIChkLT5wc2VydmVyLT50eXBlKCkgPT0gUFNfU09MSUQgfHwgZC0+cHNl
cnZlci0+dHlwZSgpID09IFBTX0lNQUdFKSkKLSAgICAgICAgZGVsZXRlIGQtPnBzZXJ2ZXI7Cisg
ICAgaWYoZC0+cHNlcnZlcikKKyAgICAgICAgZC0+cHNlcnZlci0+ZGVyZWYoKTsKKwogICAgIGQt
PnBzZXJ2ZXIgPSBwc2VydmVyOworCisgICAgaWYoZC0+cHNlcnZlcikKKyAgICAgICAgZC0+cHNl
cnZlci0+cmVmKCk7CiB9CiAKIGZsb2F0IEtSZW5kZXJpbmdTdHJva2VQYWludGVyOjpzdHJva2VX
aWR0aCgpIGNvbnN0CkBAIC0xNjQsNiArMTY4LDEyIEBACiAgICAgICAgIGQtPnBzZXJ2ZXItPmRy
YXcoY29udGV4dCwgQVBQTFlfVE9fU1RST0tFKTsKIH0KIAordm9pZCBLUmVuZGVyaW5nU3Ryb2tl
UGFpbnRlcjo6ZHJhd1RleHQoS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQsIGZsb2F0
IHgsIGZsb2F0IHksIGNvbnN0IFFTdHJpbmcgJnRleHQpIGNvbnN0Cit7CisgICAgaWYoZC0+cHNl
cnZlcikKKyAgICAgICAgZC0+cHNlcnZlci0+ZHJhd1RleHQoY29udGV4dCwgeCwgeSwgdGV4dCwg
QVBQTFlfVE9fU1RST0tFKTsKK30KKwogYm9vbCBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlcjo6ZGly
dHkoKSBjb25zdAogewogICAgIHJldHVybiBkLT5kaXJ0eTsKSW5kZXg6IGRldmljZS9LUmVuZGVy
aW5nU3Ryb2tlUGFpbnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldmljZS9LUmVuZGVyaW5nU3Ryb2tl
UGFpbnRlci5oCShyZXZpc2lvbiA0NjY5NTApCisrKyBkZXZpY2UvS1JlbmRlcmluZ1N0cm9rZVBh
aW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsNyBAQAogCiAgICAgLy8gQWN0dWFs
IHJlbmRlcmluZyBmdW5jdGlvbgogICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0ICpjb250ZXh0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHQoS1Jl
bmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQsIGZsb2F0IHgsIGZsb2F0IHksIGNvbnN0IFFT
dHJpbmcgJnRleHQpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGNsYXNzIFByaXZhdGU7CkluZGV4
OiBkZXZpY2UvS1JlbmRlcmluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXZpY2UvS1JlbmRl
cmluZ1N0eWxlLmNwcAkocmV2aXNpb24gNDY2OTUwKQorKysgZGV2aWNlL0tSZW5kZXJpbmdTdHls
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Niw0ICsyNDYsMzkgQEAKICAgICByZXR1cm4gZC0+
c3RhcnRNYXJrZXIgfHwgZC0+bWlkTWFya2VyIHx8IGQtPmVuZE1hcmtlcjsKIH0KIAorY29uc3Qg
UUZvbnQgJktSZW5kZXJpbmdTdHlsZTo6Zm9udCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFFGb250
KCk7Cit9CisKK2Jvb2wgS1JlbmRlcmluZ1N0eWxlOjpoYXNVbmRlcmxpbmUoKSBjb25zdAorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBLUmVuZGVyaW5nU3R5bGU6Omhhc092ZXJsaW5l
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgS1JlbmRlcmluZ1N0eWxl
OjpoYXNTdHJpa2VUaHJvdWdoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0tD
VGV4dEFuY2hvciBLUmVuZGVyaW5nU3R5bGU6OmFuY2hvcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFRBX1NUQVJUOworfQorCitib29sIEtSZW5kZXJpbmdTdHlsZTo6dmVydGljYWxUZXh0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgS1JlbmRlcmluZ1N0eWxlOjpsdHIo
KSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCiAvLyB2aW06dHM9NDpub2V0CkluZGV4
OiBkZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldmljZS9LUmVuZGVy
aW5nRGV2aWNlLmgJKHJldmlzaW9uIDQ2Njk1MCkKKysrIGRldmljZS9LUmVuZGVyaW5nRGV2aWNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIGNsYXNzIEtDYW52YXM7CiBjbGFz
cyBLQ2FudmFzTWF0cml4OwogY2xhc3MgS1JlbmRlcmluZ1N0eWxlOworY2xhc3MgS0NhbnZhc1Rl
eHRJdGVtOwogY2xhc3MgS1JlbmRlcmluZ0RldmljZUNvbnRleHQKIHsKIHB1YmxpYzoKQEAgLTEw
OCw2ICsxMDksNyBAQAogCiAgICAgdmlydHVhbCBLQ2FudmFzSXRlbSAqY3JlYXRlSXRlbShLQ2Fu
dmFzICpjYW52YXMsIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUsIEtDYW52YXNVc2VyRGF0YSBwYXRo
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBLQ2FudmFzQ29udGFpbmVyICpjcmVhdGVDb250YWlu
ZXIoS0NhbnZhcyAqY2FudmFzLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBLQ2FudmFzVGV4dEl0ZW0gKmNyZWF0ZVRleHRJdGVtKEtDYW52YXMgKmNhbnZh
cywgY29uc3QgUVN0cmluZyAmc3RyLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlKSBjb25zdCA9IDA7
CiAKICAgICAvLyBUb29scwogICAgIHZpcnR1YWwgUVJlY3QgYmJveFBhdGgoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQgKmNvbnRleHQsIGJvb2wgaW5jbHVkZVN0cm9rZSkgY29uc3QgPSAwOwpJbmRl
eDogZGV2aWNlL2FnZy9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudEFnZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gZGV2aWNlL2FnZy9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudEFnZy5jcHAJ
KHJldmlzaW9uIDQ2Njk4NSkKKysrIGRldmljZS9hZ2cvS1JlbmRlcmluZ1BhaW50U2VydmVyR3Jh
ZGllbnRBZ2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw4IEBACiAqLwogCiAjaW5j
bHVkZSA8cXBvaW50Lmg+CisjaW5jbHVkZSA8cXBhaW50ZXIuaD4KKyNpbmNsdWRlIDxxcGFpbnRl
cnBhdGguaD4KIAogI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhcy5oPgogI2luY2x1ZGUgPGtjYW52
YXMvS0NhbnZhc01hdHJpeC5oPgpAQCAtMTU3LDYgKzE1OSwyMiBAQAogICAgICAgICBhcnJheVtp
XSA9IGM7CiB9CiAKK3ZvaWQgZmlsbF9jb2xvcl9hcnJheV9xdChRR3JhZGllbnQgJmdyYWRpZW50
LCBLQ1NvcnRlZEdyYWRpZW50U3RvcExpc3QgJnN0b3BMaXN0LCBmbG9hdCBvcGFjaXR5KQorewor
ICAgIEtDU29ydGVkR3JhZGllbnRTdG9wTGlzdDo6SXRlcmF0b3IgaXQoc3RvcExpc3QpOworICAg
IEtDR3JhZGllbnRPZmZzZXRQYWlyICpwYWlyOworICAgIHdoaWxlKChwYWlyID0gaXQuY3VycmVu
dCgpKSAhPSAwKQorICAgIHsKKyAgICAgICAgKytpdDsKKworCSAgICBRQ29sb3IgYyhwYWlyLT5j
b2xvci5yZWQoKSwgcGFpci0+Y29sb3IuZ3JlZW4oKSwgcGFpci0+Y29sb3IuYmx1ZSgpKTsKKwkg
ICAJYy5zZXRBbHBoYUYocGFpci0+Y29sb3IuYWxwaGEoKSAqIG9wYWNpdHkpOworCQlrZERlYnVn
KCkgPDwgIkFscGhhOiAiIDw8IHBhaXItPmNvbG9yLmFscGhhKCkgPDwgZW5kbDsKKwkJZ3JhZGll
bnQuc2V0Q29sb3JBdChwYWlyLT5vZmZzZXQsIGMpOworICAgIH0KK30KKworCiAvLyBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudEFnZwogS1JlbmRlcmluZ1BhaW50U2VydmVyTGlu
ZWFyR3JhZGllbnRBZ2c6OktSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50QWdnKCkg
OiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCgpLCBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJBZ2coKQogewpAQCAtMjcwLDYgKzI4OCw1NyBAQAogICAgIH0KIH0KIAordm9pZCBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudEFnZzo6ZHJhd1RleHQoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQgKmNvbnRleHQsIGZsb2F0IHgsIGZsb2F0IHksIGNvbnN0IFFTdHJpbmcgJnRl
eHQsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHRBZ2cgKmFnZ0NvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dEFnZyAqPihjb250ZXh0KTsKKyAgICBRX0FTU0VSVChhZ2dDb250ZXh0ICE9IDApOworCisg
ICAgS0NhbnZhc0ltYWdlQnVmZmVyICpyZW5kZXJpbmdCdWZmZXIgPSBhZ2dDb250ZXh0LT5idWZm
ZXIoKTsKKyAgICBRX0FTU0VSVChyZW5kZXJpbmdCdWZmZXIgIT0gMCk7CisKKyAgICBLUmVuZGVy
aW5nU3R5bGUgKnN0eWxlID0gYWdnQ29udGV4dC0+c3R5bGUoKTsKKworICAgIFFJbWFnZSAqaW1h
Z2UgPSBuZXcgUUltYWdlKHJlbmRlcmluZ0J1ZmZlci0+Yml0cygpLCByZW5kZXJpbmdCdWZmZXIt
PndpZHRoKCksIHJlbmRlcmluZ0J1ZmZlci0+aGVpZ2h0KCksIFFJbWFnZTo6Rm9ybWF0X0FSR0Iz
Ml9QcmVtdWx0aXBsaWVkKTsKKyAgICBpbWFnZS0+c2V0QWxwaGFCdWZmZXIodHJ1ZSk7CisgICAg
eworICAgICAgICBRUGFpbnRlciBwKGltYWdlKTsKKyAgICAgICAgcC5zZXRSZW5kZXJIaW50KFFQ
YWludGVyOjpBbnRpYWxpYXNpbmcpOworICAgICAgICBwLnNldFJlbmRlckhpbnQoUVBhaW50ZXI6
OlRleHRBbnRpYWxpYXNpbmcpOworICAgICAgICBRRm9udCBmID0gc3R5bGUtPmZvbnQoKTsKKyAg
ICAgICAgaWYoc3R5bGUtPmhhc1VuZGVybGluZSgpKSBmLnNldFVuZGVybGluZSh0cnVlKTsKKyAg
ICAgICAgaWYoc3R5bGUtPmhhc092ZXJsaW5lKCkpIGYuc2V0T3ZlcmxpbmUodHJ1ZSk7CisgICAg
ICAgIGlmKHN0eWxlLT5oYXNTdHJpa2VUaHJvdWdoKCkpIGYuc2V0U3RyaWtlT3V0KHRydWUpOwor
ICAgICAgICBwLnNldEZvbnQoZik7CisgICAgICAgIFFMaW5lYXJHcmFkaWVudCBncmFkaWVudCgx
MCwgMTAsIDQ0MCwgNDQwKTsKKyAgICAgICAgZG91YmxlIG9wYWNpdHkgPSAxLjA7CisgICAgICAg
IGlmKHR5cGUgJiBBUFBMWV9UT19GSUxMKQorICAgICAgICB7CisgICAgICAgICAgICBpZihzdHls
ZS0+ZmlsbFBhaW50ZXIoKSkgb3BhY2l0eSA9IHN0eWxlLT5maWxsUGFpbnRlcigpLT5vcGFjaXR5
KCkgKiBzdHlsZS0+b3BhY2l0eSgpOworICAgICAgICAgICAgZmlsbF9jb2xvcl9hcnJheV9xdChn
cmFkaWVudCwgZ3JhZGllbnRTdG9wcygpLCBvcGFjaXR5KTsKKyAgICAgICAgICAgIHAuc2V0QnJ1
c2goZ3JhZGllbnQpOworICAgICAgICB9CisKKyAgICAgICAgS0NhbnZhc01hdHJpeCBvYmplY3RN
YXRyaXggPSBzdHlsZS0+b2JqZWN0TWF0cml4KCk7CisgICAgICAgIFFXTWF0cml4IG1hdChvYmpl
Y3RNYXRyaXguYSgpLCBvYmplY3RNYXRyaXguYigpLCBvYmplY3RNYXRyaXguYygpLCBvYmplY3RN
YXRyaXguZCgpLCBvYmplY3RNYXRyaXguZSgpLCBvYmplY3RNYXRyaXguZigpKTsKKyAgICAgICAg
YWdnOjp0cmFuc19hZmZpbmUgd29ybGQgPSBhZ2dDb250ZXh0LT53b3JsZFRyYW5zZm9ybSgpOwor
ICAgICAgICBkb3VibGUgZFs2XTsKKyAgICAgICAgd29ybGQuc3RvcmVfdG8oZCk7CisgICAgICAg
IG1hdCAqPSBRV01hdHJpeChkWzBdLCBkWzFdLCBkWzJdLCBkWzNdLCBkWzRdLCBkWzVdKTsKKyAg
ICAgICAgcC5zZXRNYXRyaXgobWF0KTsKKworICAgICAgICAvL2lmKHR5cGUgJiBBUFBMWV9UT19T
VFJPS0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIFFQYWludGVyUGF0aCB0ZXh0UGF0aDsKKyAg
ICAgICAgICAgIHRleHRQYXRoLmFkZFRleHQoUVBvaW50Rih4LCB5KSwgZiwgdGV4dCk7CisgICAg
ICAgICAgICBwLmRyYXdQYXRoKHRleHRQYXRoKTsKKyAgICAgICAgfQorICAgICAgICAvL2Vsc2UK
KyAgICAgICAgLy8gICAgcC5kcmF3VGV4dChRUG9pbnRGKHgsIHkpLCB0ZXh0KTsKKyAgICB9Cisg
ICAgZGVsZXRlIGltYWdlOworfQorCisKIC8vIEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdy
YWRpZW50QWdnCiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudEFnZzo6S1JlbmRl
cmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRBZ2coKSA6IEtSZW5kZXJpbmdQYWludFNlcnZl
clJhZGlhbEdyYWRpZW50KCksIEtSZW5kZXJpbmdQYWludFNlcnZlckFnZygpCiB7CkBAIC00MDgs
NCArNDc3LDU0IEBACiAgICAgfQogfQogCit2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlh
bEdyYWRpZW50QWdnOjpkcmF3VGV4dChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4dCwg
ZmxvYXQgeCwgZmxvYXQgeSwgY29uc3QgUVN0cmluZyAmdGV4dCwgS0NQYWludFRhcmdldFR5cGUg
dHlwZSkgY29uc3QKK3sKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dEFnZyAqYWdnQ29udGV4
dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0QWdnICo+KGNvbnRleHQpOwor
ICAgIFFfQVNTRVJUKGFnZ0NvbnRleHQgIT0gMCk7CisKKyAgICBLQ2FudmFzSW1hZ2VCdWZmZXIg
KnJlbmRlcmluZ0J1ZmZlciA9IGFnZ0NvbnRleHQtPmJ1ZmZlcigpOworICAgIFFfQVNTRVJUKHJl
bmRlcmluZ0J1ZmZlciAhPSAwKTsKKworICAgIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUgPSBhZ2dD
b250ZXh0LT5zdHlsZSgpOworCisgICAgUUltYWdlICppbWFnZSA9IG5ldyBRSW1hZ2UocmVuZGVy
aW5nQnVmZmVyLT5iaXRzKCksIHJlbmRlcmluZ0J1ZmZlci0+d2lkdGgoKSwgcmVuZGVyaW5nQnVm
ZmVyLT5oZWlnaHQoKSwgUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOworICAg
IGltYWdlLT5zZXRBbHBoYUJ1ZmZlcih0cnVlKTsKKyAgICB7CisgICAgICAgIFFQYWludGVyIHAo
aW1hZ2UpOworICAgICAgICBwLnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZyk7
CisgICAgICAgIHAuc2V0UmVuZGVySGludChRUGFpbnRlcjo6VGV4dEFudGlhbGlhc2luZyk7Cisg
ICAgICAgIFFGb250IGYgPSBzdHlsZS0+Zm9udCgpOworICAgICAgICBpZihzdHlsZS0+aGFzVW5k
ZXJsaW5lKCkpIGYuc2V0VW5kZXJsaW5lKHRydWUpOworICAgICAgICBpZihzdHlsZS0+aGFzT3Zl
cmxpbmUoKSkgZi5zZXRPdmVybGluZSh0cnVlKTsKKyAgICAgICAgaWYoc3R5bGUtPmhhc1N0cmlr
ZVRocm91Z2goKSkgZi5zZXRTdHJpa2VPdXQodHJ1ZSk7CisgICAgICAgIHAuc2V0Rm9udChmKTsK
KyAgICAgICAgUVJhZGlhbEdyYWRpZW50IGdyYWRpZW50KDEwMCwgMTAwLCA0NDApOworICAgICAg
ICBkb3VibGUgb3BhY2l0eSA9IDEuMDsKKyAgICAgICAgaWYodHlwZSAmIEFQUExZX1RPX0ZJTEwp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKHN0eWxlLT5maWxsUGFpbnRlcigpKSBvcGFjaXR5
ID0gc3R5bGUtPmZpbGxQYWludGVyKCktPm9wYWNpdHkoKSAqIHN0eWxlLT5vcGFjaXR5KCk7Cisg
ICAgICAgICAgICBmaWxsX2NvbG9yX2FycmF5X3F0KGdyYWRpZW50LCBncmFkaWVudFN0b3BzKCks
IG9wYWNpdHkpOworICAgICAgICAgICAgcC5zZXRCcnVzaChncmFkaWVudCk7CisgICAgICAgIH0K
KworICAgICAgICBLQ2FudmFzTWF0cml4IG9iamVjdE1hdHJpeCA9IHN0eWxlLT5vYmplY3RNYXRy
aXgoKTsKKyAgICAgICAgUVdNYXRyaXggbWF0KG9iamVjdE1hdHJpeC5hKCksIG9iamVjdE1hdHJp
eC5iKCksIG9iamVjdE1hdHJpeC5jKCksIG9iamVjdE1hdHJpeC5kKCksIG9iamVjdE1hdHJpeC5l
KCksIG9iamVjdE1hdHJpeC5mKCkpOworICAgICAgICBhZ2c6OnRyYW5zX2FmZmluZSB3b3JsZCA9
IGFnZ0NvbnRleHQtPndvcmxkVHJhbnNmb3JtKCk7CisgICAgICAgIGRvdWJsZSBkWzZdOworICAg
ICAgICB3b3JsZC5zdG9yZV90byhkKTsKKyAgICAgICAgbWF0ICo9IFFXTWF0cml4KGRbMF0sIGRb
MV0sIGRbMl0sIGRbM10sIGRbNF0sIGRbNV0pOworICAgICAgICBwLnNldE1hdHJpeChtYXQpOwor
CisgICAgICAgIC8vaWYodHlwZSAmIEFQUExZX1RPX1NUUk9LRSkKKyAgICAgICAgeworICAgICAg
ICAgICAgUVBhaW50ZXJQYXRoIHRleHRQYXRoOworICAgICAgICAgICAgdGV4dFBhdGguYWRkVGV4
dChRUG9pbnRGKHgsIHkpLCBmLCB0ZXh0KTsKKyAgICAgICAgICAgIHAuZHJhd1BhdGgodGV4dFBh
dGgpOworICAgICAgICB9CisgICAgICAgIC8vZWxzZQorICAgICAgICAvLyAgICBwLmRyYXdUZXh0
KFFQb2ludEYoeCwgeSksIHRleHQpOworICAgIH0KKyAgICBkZWxldGUgaW1hZ2U7Cit9CisKIC8v
IHZpbTp0cz00Om5vZXQKSW5kZXg6IGRldmljZS9hZ2cvS1JlbmRlcmluZ1BhaW50U2VydmVyR3Jh
ZGllbnRBZ2cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXZpY2UvYWdnL0tSZW5kZXJpbmdQYWludFNlcnZl
ckdyYWRpZW50QWdnLmgJKHJldmlzaW9uIDQ2Njk1MCkKKysrIGRldmljZS9hZ2cvS1JlbmRlcmlu
Z1BhaW50U2VydmVyR3JhZGllbnRBZ2cuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QAogICAgIHZpcnR1YWwgfktSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50QWdnKCk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4
dCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGRyYXdU
ZXh0KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBmbG9hdCB4LCBmbG9hdCB5LCBj
b25zdCBRU3RyaW5nICZ0ZXh0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdDsKIH07CiAK
IGNsYXNzIEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50QWdnIDogcHVibGljIEtS
ZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LApAQCAtNDQsNiArNDUsNyBAQAogICAg
IHZpcnR1YWwgfktSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50QWdnKCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqQ29udGV4dCwgS0NQ
YWludFRhcmdldFR5cGUgdHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0KEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBmbG9hdCB4LCBmbG9hdCB5LCBjb25zdCBR
U3RyaW5nICZ0ZXh0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdDsKIH07CiAKICNlbmRp
ZgpJbmRleDogZGV2aWNlL2FnZy9LQ2FudmFzQ2xpcHBlckFnZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
ZGV2aWNlL2FnZy9LQ2FudmFzQ2xpcHBlckFnZy5jcHAJKHJldmlzaW9uIDQ2Njk1MCkKKysrIGRl
dmljZS9hZ2cvS0NhbnZhc0NsaXBwZXJBZ2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw3IEBACiB7CiB9CiAKLXZvaWQgS0NhbnZhc0NsaXBwZXJBZ2c6OmRyYXcoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHRBZ2cgKmFnZ0NvbnRleHQsIGNvbnN0IFFSZWN0ICZiYm94LCBhZ2c6OnJlbmRl
cmluZ19idWZmZXIgKmJ1ZmZlcikKK3ZvaWQgS0NhbnZhc0NsaXBwZXJBZ2c6OmRyYXcoS1JlbmRl
cmluZ0RldmljZUNvbnRleHRBZ2cgKmFnZ0NvbnRleHQsIGNvbnN0IFFSZWN0ICZiYm94LCBhZ2c6
OnJlbmRlcmluZ19idWZmZXIgKmJ1ZmZlcikgY29uc3QKIHsKICAgICBLUmVuZGVyaW5nU3R5bGUg
KnN0eWxlID0gYWdnQ29udGV4dC0+c3R5bGUoKTsKICAgICBRX0FTU0VSVChzdHlsZSAhPSAwKTsK
SW5kZXg6IGRldmljZS9hZ2cvS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRBZ2cuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGRldmljZS9hZ2cvS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRBZ2cuY3BwCShy
ZXZpc2lvbiA0NjY5NTApCisrKyBkZXZpY2UvYWdnL0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlk
QWdnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsOCArMjEsMTEgQEAKICovCiAKICNpbmNsdWRl
IDxxcmVjdC5oPgorI2luY2x1ZGUgPHFwYWludGVyLmg+CisjaW5jbHVkZSA8cXBhaW50ZXJwYXRo
Lmg+CiAKICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXMuaD4KKyNpbmNsdWRlIDxrY2FudmFzL0tD
YW52YXNNYXRyaXguaD4KICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNJbWFnZUJ1ZmZlci5oPgog
I2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFpbnRlci5oPgogI2luY2x1
ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdTdHJva2VQYWludGVyLmg+CkBAIC05NCw0ICs5
Nyw1NCBAQAogICAgIH0KIH0KIAordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZEFnZzo6
ZHJhd1RleHQoS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQsIGZsb2F0IHgsIGZsb2F0
IHksIGNvbnN0IFFTdHJpbmcgJnRleHQsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit7
CisgICAga2REZWJ1ZygpIDw8ICJkcmF3VGV4dCA6ICIgPDwgeCA8PCAiICwgIiA8PCB5IDw8ICIg
LCAiIDw8IHRleHQgPDwgZW5kbDsKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dEFnZyAqYWdn
Q29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0QWdnICo+KGNvbnRl
eHQpOworICAgIFFfQVNTRVJUKGFnZ0NvbnRleHQgIT0gMCk7CisKKyAgICBLQ2FudmFzSW1hZ2VC
dWZmZXIgKnJlbmRlcmluZ0J1ZmZlciA9IGFnZ0NvbnRleHQtPmJ1ZmZlcigpOworICAgIFFfQVNT
RVJUKHJlbmRlcmluZ0J1ZmZlciAhPSAwKTsKKworICAgIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUg
PSBhZ2dDb250ZXh0LT5zdHlsZSgpOworICAgIFFfQVNTRVJUKHN0eWxlICE9IDApOworCisgICAg
UUltYWdlICppbWFnZSA9IG5ldyBRSW1hZ2UocmVuZGVyaW5nQnVmZmVyLT5iaXRzKCksIHJlbmRl
cmluZ0J1ZmZlci0+d2lkdGgoKSwgcmVuZGVyaW5nQnVmZmVyLT5oZWlnaHQoKSwgUUltYWdlOjpG
b3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOworICAgIGltYWdlLT5zZXRBbHBoYUJ1ZmZlcih0
cnVlKTsKKyAgICB7CisgICAgICAgIFFQYWludGVyIHAoaW1hZ2UpOworICAgICAgICBwLnNldFJl
bmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZyk7CisgICAgICAgIHAuc2V0UmVuZGVySGlu
dChRUGFpbnRlcjo6VGV4dEFudGlhbGlhc2luZyk7CisgICAgICAgIC8vaWYoc3R5bGUtPmZpbGxQ
YWludGVyKCkgJiYgc3R5bGUtPmZpbGxQYWludGVyKCktPnBhaW50U2VydmVyKCkgJiYgc3R5bGUt
PmZpbGxQYWludGVyKCktPnBhaW50U2VydmVyKCktPnR5cGUoKSA9PSBQU19TT0xJRCkKKyAgICAg
ICAgcC5zZXRQZW4oY29sb3IoKSk7CisgICAgICAgIFFGb250IGYgPSBzdHlsZS0+Zm9udCgpOwor
ICAgICAgICBpZihzdHlsZS0+aGFzVW5kZXJsaW5lKCkpIGYuc2V0VW5kZXJsaW5lKHRydWUpOwor
ICAgICAgICBpZihzdHlsZS0+aGFzT3ZlcmxpbmUoKSkgZi5zZXRPdmVybGluZSh0cnVlKTsKKyAg
ICAgICAgaWYoc3R5bGUtPmhhc1N0cmlrZVRocm91Z2goKSkgZi5zZXRTdHJpa2VPdXQodHJ1ZSk7
CisJCS8vZi5zZXRTdHlsZVN0cmF0ZWd5KFFGb250OjpGb3JjZU91dGxpbmUpOworICAgICAgICBw
LnNldEZvbnQoZik7CisgICAgICAgIGJvb2wgbHRyID0gc3R5bGUtPmx0cigpOworICAgICAgICBr
ZERlYnVnKCkgPDwgImx0ciA6ICAiIDw8IGx0ciA8PCBlbmRsOworICAgICAgICBwLnNldExheW91
dERpcmVjdGlvbihsdHIgPyBRdDo6TGVmdFRvUmlnaHQgOiBRdDo6UmlnaHRUb0xlZnQpOworCisg
ICAgICAgIEtDYW52YXNNYXRyaXggb2JqZWN0TWF0cml4ID0gc3R5bGUtPm9iamVjdE1hdHJpeCgp
OworICAgICAgICBRV01hdHJpeCBtYXQob2JqZWN0TWF0cml4LmEoKSwgb2JqZWN0TWF0cml4LmIo
KSwgb2JqZWN0TWF0cml4LmMoKSwgb2JqZWN0TWF0cml4LmQoKSwgb2JqZWN0TWF0cml4LmUoKSwg
b2JqZWN0TWF0cml4LmYoKSk7CisgICAgICAgIGFnZzo6dHJhbnNfYWZmaW5lIHdvcmxkID0gYWdn
Q29udGV4dC0+d29ybGRUcmFuc2Zvcm0oKTsKKyAgICAgICAgZG91YmxlIGRbNl07CisgICAgICAg
IHdvcmxkLnN0b3JlX3RvKGQpOworICAgICAgICBtYXQgKj0gUVdNYXRyaXgoZFswXSwgZFsxXSwg
ZFsyXSwgZFszXSwgZFs0XSwgZFs1XSk7CisgICAgICAgIHAuc2V0TWF0cml4KG1hdCk7CisKKyAg
ICAgICAgaWYodHlwZSAmIEFQUExZX1RPX1NUUk9LRSkKKyAgICAgICAgeworICAgICAgICAgICAg
UVBhaW50ZXJQYXRoIHRleHRQYXRoOworICAgICAgICAgICAgdGV4dFBhdGguYWRkVGV4dChRUG9p
bnRGKHgsIHkpLCBmLCB0ZXh0KTsKKyAgICAgICAgICAgIHAuZHJhd1BhdGgodGV4dFBhdGgpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHAuZHJhd1RleHQoUVBvaW50Rih4
LCB5KSwgdGV4dCk7CisgICAgfQorICAgIGRlbGV0ZSBpbWFnZTsKK30KKwogLy8gdmltOnRzPTQ6
bm9ldApJbmRleDogZGV2aWNlL2FnZy9LUmVuZGVyaW5nRGV2aWNlQWdnLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBkZXZpY2UvYWdnL0tSZW5kZXJpbmdEZXZpY2VBZ2cuY3BwCShyZXZpc2lvbiA0NjY5NTAp
CisrKyBkZXZpY2UvYWdnL0tSZW5kZXJpbmdEZXZpY2VBZ2cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiS0NhbnZhc0FnZ0hlbHBlci5oIgogI2luY2x1ZGUg
IktDYW52YXNGaWx0ZXJBZ2cuaCIKICNpbmNsdWRlICJLQ2FudmFzQ2xpcHBlckFnZy5oIgorI2lu
Y2x1ZGUgIktDYW52YXNUZXh0SXRlbUFnZy5oIgogI2luY2x1ZGUgIktDYW52YXNDb250YWluZXJB
Z2cuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlQWdnLm1vYyIKICNpbmNsdWRlICJLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZEFnZy5oIgpAQCAtMjg1LDYgKzI4NiwxMSBAQAogICAgIHJl
dHVybiBuZXcgS0NhbnZhc0NvbnRhaW5lckFnZyhjYW52YXMsIHN0eWxlKTsKIH0KIAorS0NhbnZh
c1RleHRJdGVtICpLUmVuZGVyaW5nRGV2aWNlQWdnOjpjcmVhdGVUZXh0SXRlbShLQ2FudmFzICpj
YW52YXMsIGNvbnN0IFFTdHJpbmcgJnN0ciwgS1JlbmRlcmluZ1N0eWxlICpzdHlsZSkgY29uc3QK
K3sKKyAgICByZXR1cm4gbmV3IEtDYW52YXNUZXh0SXRlbUFnZyhjYW52YXMsIHN0ciwgc3R5bGUp
OworfQorCiBRUmVjdCBLUmVuZGVyaW5nRGV2aWNlQWdnOjpiYm94UGF0aChLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dCAqY29udGV4dCwgYm9vbCBpbmNsdWRlU3Ryb2tlKSBjb25zdAogewogICAgIEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0QWdnICphZ2dDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRl
cmluZ0RldmljZUNvbnRleHRBZ2cgKj4oY29udGV4dCk7CkBAIC0zODcsOCArMzkzLDggQEAKICAg
ICB7CiAgICAgICAgIFFTdHJpbmcgaWQgPSBzdHlsZS0+Y2xpcFBhdGhzKClbaV0ubWlkKDEpOwog
Ci0gICAgICAgIEtDYW52YXNSZXNvdXJjZSAqcmVzb3VyY2UgPSBjYW52YXMtPnJlZ2lzdHJ5KCkt
PmdldFJlc291cmNlQnlJZChpZCk7Ci0gICAgICAgIEtDYW52YXNDbGlwcGVyQWdnICpjbGlwcGVy
ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0NsaXBwZXJBZ2cgKj4ocmVzb3VyY2UpOworICAgICAgICBj
b25zdCBLQ2FudmFzUmVzb3VyY2UgKnJlc291cmNlID0gY2FudmFzLT5yZWdpc3RyeSgpLT5nZXRS
ZXNvdXJjZUJ5SWQoaWQpOworICAgICAgICBjb25zdCBLQ2FudmFzQ2xpcHBlckFnZyAqY2xpcHBl
ciA9IHN0YXRpY19jYXN0PGNvbnN0IEtDYW52YXNDbGlwcGVyQWdnICo+KHJlc291cmNlKTsKIAog
ICAgICAgICBpZihjbGlwcGVyKQogICAgICAgICAgICAgY2xpcHBlci0+ZHJhdyhjb250ZXh0LCBf
YmJveCwgbWFza1JlbmRlcmluZ0J1ZmZlcik7CkluZGV4OiBkZXZpY2UvYWdnL01ha2VmaWxlLmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGRldmljZS9hZ2cvTWFrZWZpbGUuYW0JKHJldmlzaW9uIDQ2Njk1MCkK
KysrIGRldmljZS9hZ2cvTWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTcsNyArNyw3IEBA
CiAJCQkJCQkJCSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZEFnZy5jcHAgS1JlbmRlcmluZ1Bh
aW50U2VydmVyR3JhZGllbnRBZ2cuY3BwIFwKIAkJCQkJCQkJIEtSZW5kZXJpbmdQYWludFNlcnZl
clBhdHRlcm5BZ2cuY3BwIEtSZW5kZXJpbmdQYWludFNlcnZlckltYWdlQWdnLmNwcCBcCiAJCQkJ
CQkJCSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJBZ2cuY3BwIEtDYW52YXNDbGlwcGVyQWdnLmNwcCBL
Q2FudmFzRmlsdGVyQWdnLmNwcCBcCi0JCQkJCQkJCSBLQ2FudmFzSXRlbUFnZy5jcHAgS0NhbnZh
c0NvbnRhaW5lckFnZy5jcHAKKwkJCQkJCQkJIEtDYW52YXNJdGVtQWdnLmNwcCBLQ2FudmFzQ29u
dGFpbmVyQWdnLmNwcCBLQ2FudmFzVGV4dEl0ZW1BZ2cuY3BwCiBsaWJrY2FudmFzZGV2aWNlYWdn
X2xhX0xERkxBR1MgPSAtbW9kdWxlICQoS0RFX1BMVUdJTikgJChhbGxfbGlicmFyaWVzKQogbGli
a2NhbnZhc2RldmljZWFnZ19sYV9MSUJBREQgPSAkKHRvcF9idWlsZGRpcikva2NhbnZhcy9saWJr
Y2FudmFzLmxhIFwKIAkJCQkJCQkJJCh0b3BfYnVpbGRkaXIpL2tjYW52YXMvZGV2aWNlL2xpYmtj
YW52YXNkZXZpY2UubGEgJChMSUJfQUdHKQpJbmRleDogZGV2aWNlL2FnZy9LQ2FudmFzQ2xpcHBl
ckFnZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGRldmljZS9hZ2cvS0NhbnZhc0NsaXBwZXJBZ2cuaAkocmV2
aXNpb24gNDY2OTUwKQorKysgZGV2aWNlL2FnZy9LQ2FudmFzQ2xpcHBlckFnZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAgICAgS0NhbnZhc0NsaXBwZXJBZ2coKTsKICAgICB2
aXJ0dWFsIH5LQ2FudmFzQ2xpcHBlckFnZygpOwogCi0gICAgdm9pZCBkcmF3KEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0QWdnICpjb250ZXh0LCBjb25zdCBRUmVjdCAmYmJveCwgYWdnOjpyZW5kZXJp
bmdfYnVmZmVyICpidWZmZXIpOworICAgIHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dEFnZyAqY29udGV4dCwgY29uc3QgUVJlY3QgJmJib3gsIGFnZzo6cmVuZGVyaW5nX2J1ZmZlciAq
YnVmZmVyKSBjb25zdDsKIH07CiAKICNlbmRpZgpJbmRleDogZGV2aWNlL2FnZy9LUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJTb2xpZEFnZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldmljZS9hZ2cvS1JlbmRlcmlu
Z1BhaW50U2VydmVyU29saWRBZ2cuaAkocmV2aXNpb24gNDY2OTUwKQorKysgZGV2aWNlL2FnZy9L
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZEFnZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAgICAgdmlydHVhbCB+S1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRBZ2coKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBL
Q1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHQo
S1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQsIGZsb2F0IHgsIGZsb2F0IHksIGNvbnN0
IFFTdHJpbmcgJnRleHQsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0OwogfTsKIAogI2Vu
ZGlmCkluZGV4OiBkZXZpY2UvYWdnL0tSZW5kZXJpbmdEZXZpY2VBZ2cuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBkZXZpY2UvYWdnL0tSZW5kZXJpbmdEZXZpY2VBZ2cuaAkocmV2aXNpb24gNDY2OTUwKQorKysg
ZGV2aWNlL2FnZy9LUmVuZGVyaW5nRGV2aWNlQWdnLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYg
KzgxLDcgQEAKIAogICAgIHZpcnR1YWwgS0NhbnZhc0l0ZW0gKmNyZWF0ZUl0ZW0oS0NhbnZhcyAq
Y2FudmFzLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlLCBLQ2FudmFzVXNlckRhdGEgcGF0aCkgY29u
c3Q7CiAgICAgdmlydHVhbCBLQ2FudmFzQ29udGFpbmVyICpjcmVhdGVDb250YWluZXIoS0NhbnZh
cyAqY2FudmFzLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEtD
YW52YXNUZXh0SXRlbSAqY3JlYXRlVGV4dEl0ZW0oS0NhbnZhcyAqY2FudmFzLCBjb25zdCBRU3Ry
aW5nICZzdHIsIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUpIGNvbnN0OwogCiAgICAgLy8gVG9vbHMK
ICAgICB2aXJ0dWFsIFFSZWN0IGJib3hQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250
ZXh0LCBib29sIGluY2x1ZGVTdHJva2UpIGNvbnN0OwpJbmRleDogZGV2aWNlL0tSZW5kZXJpbmdT
dHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGRldmljZS9LUmVuZGVyaW5nU3R5bGUuaAkocmV2aXNpb24g
NDY2OTUwKQorKysgZGV2aWNlL0tSZW5kZXJpbmdTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSw2ICsyNSw3IEBACiAKICNpbmNsdWRlIDxxM3ZhbHVlbGlzdC5oPgogI2luY2x1ZGUgPHFzdHJp
bmdsaXN0Lmg+CisjaW5jbHVkZSA8cWZvbnQuaD4KIAogLy8gRW51bWVyYXRpb25zCiB0eXBlZGVm
IGVudW0KQEAgLTUzLDYgKzU0LDEzIEBACiAgICAgSVJfT1BUSU1JWkVfUVVBTElUWSA9IDEKIH0g
S0NJbWFnZVJlbmRlcmluZzsKIAordHlwZWRlZiBlbnVtCit7CisgICAgVEFfU1RBUlQgPSAwLAor
ICAgIFRBX01JRERMRSA9IDEsCisgICAgVEFfRU5EID0gMgorfSBLQ1RleHRBbmNob3I7CisKIC8v
IFNwZWNpYWwgdHlwZXMKIHR5cGVkZWYgUTNWYWx1ZUxpc3Q8ZmxvYXQ+IEtDRGFzaEFycmF5Owog
CkBAIC0xMjAsNyArMTI4LDE2IEBACiAgICAgdmlydHVhbCB2b2lkIHNldEZpbHRlcihLQ2FudmFz
RmlsdGVyICpuZXdGaWx0ZXIpIGNvbnN0OwogCiAgICAgLy8gVE9ETzogTGFzdCByZW1haW5pbmcg
aXNzdWUgaGVyZTogdGV4dCAmIGZvbnQhCisgICAgdmlydHVhbCBjb25zdCBRRm9udCAmZm9udCgp
IGNvbnN0OwogCisgICAgdmlydHVhbCBib29sIGhhc1VuZGVybGluZSgpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBoYXNPdmVybGluZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNTdHJp
a2VUaHJvdWdoKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEtDVGV4dEFuY2hvciBhbmNob3IoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgdmVydGljYWxUZXh0KCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGx0cigpIGNvbnN0OworCiBwcml2YXRlOgogICAgIGNsYXNzIFByaXZhdGU7CiAgICAg
UHJpdmF0ZSAqZDsKSW5kZXg6IGRldmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBkZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyLmgJKHJldmlzaW9uIDQ2Njk1MCkK
KysrIGRldmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NiArNjMsNyBAQAogCiAgICAgLy8gQWN0dWFsIHJlbmRlcmluZyBmdW5jdGlvbgogICAgIHZpcnR1
YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBLQ1BhaW50VGFy
Z2V0VHlwZSB0eXBlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0KEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBmbG9hdCB4LCBmbG9hdCB5LCBjb25zdCBRU3Ry
aW5nICZ0ZXh0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdCB7fQogCiAgICAgdmlydHVh
bCBRVGV4dFN0cmVhbSAmZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmKSBjb25z
dCA9IDA7CiBwcml2YXRlOgpJbmRleDogZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFpbnRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFpbnRlci5jcHAJKHJldmlzaW9u
IDQ2Njk1MCkKKysrIGRldmljZS9LUmVuZGVyaW5nRmlsbFBhaW50ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw4ICszNiw4IEBACiAKICAgICB+UHJpdmF0ZSgpCiAgICAgewotICAgICAgICBp
Zihwc2VydmVyICYmIChwc2VydmVyLT50eXBlKCkgPT0gUFNfU09MSUQgfHwgcHNlcnZlci0+dHlw
ZSgpID09IFBTX0lNQUdFKSkKLSAgICAgICAgICAgIGRlbGV0ZSBwc2VydmVyOworICAgICAgICBp
Zihwc2VydmVyKQorICAgICAgICAgICAgcHNlcnZlci0+ZGVyZWYoKTsKICAgICB9CiAKICAgICBm
bG9hdCBvcGFjaXR5OwpAQCAtNjIsOSArNjIsMTMgQEAKIAogdm9pZCBLUmVuZGVyaW5nRmlsbFBh
aW50ZXI6OnNldFBhaW50U2VydmVyKEtSZW5kZXJpbmdQYWludFNlcnZlciAqcHNlcnZlcikKIHsK
LSAgICBpZihkLT5wc2VydmVyICYmIChkLT5wc2VydmVyLT50eXBlKCkgPT0gUFNfU09MSUQgfHwg
ZC0+cHNlcnZlci0+dHlwZSgpID09IFBTX0lNQUdFKSkKLSAgICAgICAgZGVsZXRlIGQtPnBzZXJ2
ZXI7CisgICAgaWYoZC0+cHNlcnZlcikKKyAgICAgICAgZC0+cHNlcnZlci0+ZGVyZWYoKTsKKwog
ICAgIGQtPnBzZXJ2ZXIgPSBwc2VydmVyOworCisgICAgaWYoZC0+cHNlcnZlcikKKyAgICAgICAg
ZC0+cHNlcnZlci0+cmVmKCk7CiB9CiAKIEtDV2luZFJ1bGUgS1JlbmRlcmluZ0ZpbGxQYWludGVy
OjpmaWxsUnVsZSgpIGNvbnN0CkBAIC05Myw0ICs5NywxMCBAQAogICAgICAgICBkLT5wc2VydmVy
LT5kcmF3KGNvbnRleHQsIEFQUExZX1RPX0ZJTEwpOwogfQogCit2b2lkIEtSZW5kZXJpbmdGaWxs
UGFpbnRlcjo6ZHJhd1RleHQoS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQsIGZsb2F0
IHgsIGZsb2F0IHksIGNvbnN0IFFTdHJpbmcgJnRleHQpIGNvbnN0Cit7CisgICAgaWYoZC0+cHNl
cnZlcikKKyAgICAgICAgZC0+cHNlcnZlci0+ZHJhd1RleHQoY29udGV4dCwgeCwgeSwgdGV4dCwg
QVBQTFlfVE9fRklMTCk7Cit9CisKIC8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IGRldmljZS9LUmVu
ZGVyaW5nRmlsbFBhaW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXZpY2UvS1JlbmRlcmluZ0ZpbGxQ
YWludGVyLmgJKHJldmlzaW9uIDQ2Njk1MCkKKysrIGRldmljZS9LUmVuZGVyaW5nRmlsbFBhaW50
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogCiAgICAgLy8gQWN0dWFsIHJl
bmRlcmluZyBmdW5jdGlvbgogICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0ICpjb250ZXh0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHQoS1JlbmRl
cmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQsIGZsb2F0IHgsIGZsb2F0IHksIGNvbnN0IFFTdHJp
bmcgJnRleHQpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGNsYXNzIFByaXZhdGU7CkluZGV4OiBL
Q2FudmFzUmVzb3VyY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBLQ2FudmFzUmVzb3VyY2VzLmNwcAko
cmV2aXNpb24gNDY2OTUwKQorKysgS0NhbnZhc1Jlc291cmNlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDYgKzQ4LDE2IEBACiB7CiB9CiAKK3ZvaWQgS0NhbnZhc1Jlc291cmNlOjpyZWYoKQor
eworICAgIF9LU2hhcmVkX3JlZigpOworfQorCit2b2lkIEtDYW52YXNSZXNvdXJjZTo6ZGVyZWYo
KQoreworICAgIF9LU2hhcmVkX3VucmVmKCk7Cit9CisKIHZvaWQgS0NhbnZhc1Jlc291cmNlOjph
ZGRDbGllbnQoS0NhbnZhc0l0ZW0gKml0ZW0pCiB7CiAgICAgaWYobV9jbGllbnRzLmZpbmQoaXRl
bSkgIT0gbV9jbGllbnRzLmVuZCgpKQpJbmRleDogS0NhbnZhc0NyZWF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBLQ2FudmFzQ3JlYXRvci5oCShyZXZpc2lvbiA0NjY5NTApCisrKyBLQ2FudmFzQ3JlYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiBjbGFzcyBLQ2FudmFzSXRlbTsK
IGNsYXNzIEtSZW5kZXJpbmdTdHlsZTsKIGNsYXNzIEtDYW52YXNDb250YWluZXI7CitjbGFzcyBL
Q2FudmFzVGV4dEl0ZW07CiBjbGFzcyBLQ2FudmFzQ3JlYXRvcgogewogcHVibGljOgpAQCAtNTAs
NiArNTEsNyBAQAogCiAgICAgS0NhbnZhc0l0ZW0gKmNyZWF0ZVBhdGhJdGVtKEtDYW52YXMgKmNh
bnZhcywgS1JlbmRlcmluZ1N0eWxlICpzdHlsZSwgY29uc3QgS0NQYXRoRGF0YUxpc3QgJnBhdGhE
YXRhKSBjb25zdDsKICAgICBLQ2FudmFzQ29udGFpbmVyICpjcmVhdGVDb250YWluZXIoS0NhbnZh
cyAqY2FudmFzLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlKSBjb25zdDsKKyAgICBLQ2FudmFzVGV4
dEl0ZW0gKmNyZWF0ZVRleHRJdGVtKEtDYW52YXMgKmNhbnZhcywgY29uc3QgUVN0cmluZyAmc3Ry
LCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMg
S0NhbnZhc0NyZWF0b3IgKnNfY3JlYXRvcjsKSW5kZXg6IEtDYW52YXNSZWdpc3RyeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gS0NhbnZhc1JlZ2lzdHJ5LmNwcAkocmV2aXNpb24gNDY2OTUwKQorKysgS0Nh
bnZhc1JlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMjAgKzIzLDI3IEBACiAjaW5j
bHVkZSAiS0NhbnZhc0l0ZW0uaCIKICNpbmNsdWRlICJLQ2FudmFzUmVnaXN0cnkuaCIKICNpbmNs
dWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaCIKKwogI2luY2x1ZGUgPHF0ZXh0c3RyZWFtLmg+
CiAKIEtDYW52YXNSZWdpc3RyeTo6S0NhbnZhc1JlZ2lzdHJ5KCkKIHsKLSAgICBtX3BzZXJ2ZXJz
LnNldEF1dG9EZWxldGUodHJ1ZSk7Ci0gICAgbV9yZXNvdXJjZXMuc2V0QXV0b0RlbGV0ZSh0cnVl
KTsKIH0KIAogS0NhbnZhc1JlZ2lzdHJ5Ojp+S0NhbnZhc1JlZ2lzdHJ5KCkKIHsKKyAgICBRM0Rp
Y3RJdGVyYXRvcjxLQ2FudmFzUmVzb3VyY2U+IGl0ID0gbV9yZXNvdXJjZXM7CisgICAgZm9yKDtp
dC5jdXJyZW50KCk7KytpdCkKKyAgICAgICAgaXQuY3VycmVudCgpLT5kZXJlZigpOworICAgIFEz
RGljdEl0ZXJhdG9yPEtSZW5kZXJpbmdQYWludFNlcnZlcj4gaXQyID0gbV9wc2VydmVyczsKKyAg
ICBmb3IoO2l0Mi5jdXJyZW50KCk7KytpdCkKKyAgICAgICAgaXQyLmN1cnJlbnQoKS0+ZGVyZWYo
KTsKIH0KIAogdm9pZCBLQ2FudmFzUmVnaXN0cnk6OmFkZFBhaW50U2VydmVyQnlJZChjb25zdCBR
U3RyaW5nICZpZCwgS1JlbmRlcmluZ1BhaW50U2VydmVyICpwc2VydmVyKQogeworICAgIFFfQVNT
RVJUKHBzZXJ2ZXIgIT0gMCk7CisgICAgcHNlcnZlci0+cmVmKCk7CiAgICAgbV9wc2VydmVycy5p
bnNlcnQoaWQsIHBzZXJ2ZXIpOwogICAgIHBzZXJ2ZXItPnNldElkSW5SZWdpc3RyeShpZCk7CiB9
CkBAIC00OCw2ICs1NSw4IEBACiAKIHZvaWQgS0NhbnZhc1JlZ2lzdHJ5OjphZGRSZXNvdXJjZUJ5
SWQoY29uc3QgUVN0cmluZyAmaWQsIEtDYW52YXNSZXNvdXJjZSAqcHNlcnZlcikKIHsKKyAgICBR
X0FTU0VSVChwc2VydmVyICE9IDApOworICAgIHBzZXJ2ZXItPnJlZigpOwogICAgIG1fcmVzb3Vy
Y2VzLmluc2VydChpZCwgcHNlcnZlcik7CiAgICAgcHNlcnZlci0+c2V0SWRJblJlZ2lzdHJ5KGlk
KTsKIH0KSW5kZXg6IEtDYW52YXNSZXNvdXJjZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBLQ2FudmFzUmVz
b3VyY2VzLmgJKHJldmlzaW9uIDQ2Njk1MCkKKysrIEtDYW52YXNSZXNvdXJjZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgPHFzdHJpbmcuaD4KICNpbmNsdWRl
IDxxM3ZhbHVlbGlzdC5oPgogCisjaW5jbHVkZSA8a3NoYXJlZHB0ci5oPgorCiAjaW5jbHVkZSA8
a2NhbnZhcy9LQ2FudmFzSXRlbS5oPgogI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc1BhdGguaD4K
ICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNSZXNvdXJjZUxpc3RlbmVyLmg+CkBAIC00NCwxMiAr
NDYsMTUgQEAKIAogY2xhc3MgS0NhbnZhc01hdHJpeDsKIAotY2xhc3MgS0NhbnZhc1Jlc291cmNl
CitjbGFzcyBLQ2FudmFzUmVzb3VyY2UgOiBwdWJsaWMgS1NoYXJlZAogewogcHVibGljOgogICAg
IEtDYW52YXNSZXNvdXJjZSgpOwogICAgIHZpcnR1YWwgfktDYW52YXNSZXNvdXJjZSgpOwogCisg
ICAgdm9pZCByZWYoKTsKKyAgICB2b2lkIGRlcmVmKCk7CisKICAgICB2b2lkIGludmFsaWRhdGUo
KTsKICAgICB2b2lkIGFkZENsaWVudChLQ2FudmFzSXRlbSAqaXRlbSk7CiAKSW5kZXg6IE1ha2Vm
aWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIE1ha2VmaWxlLmFtCShyZXZpc2lvbiA0NjY5NTApCisrKyBN
YWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtOSw3ICs5LDcgQEAKIGxpYmtjYW52YXNfbGFf
U09VUkNFUyA9IEtDYW52YXNJdGVtLmNwcCBLQ2FudmFzQ29udGFpbmVyLmNwcCBLQ2FudmFzTWF0
cml4LmNwcCBcCiAJCQkJCQlLQ2FudmFzUmVzb3VyY2VzLmNwcCBLQ2FudmFzQ3JlYXRvci5jcHAg
S0NhbnZhc0ltYWdlQnVmZmVyLmNwcCBcCiAJCQkJCQlLQ2FudmFzUmVnaXN0cnkuY3BwIEtDYW52
YXNGaWx0ZXJzLmNwcCBLQ2FudmFzVmlldy5jcHAgS0NhbnZhcy5jcHAgXAotCQkJCQkJS0NhbnZh
c1RyZWVEZWJ1Zy5jcHAgS0NhbnZhc1BhdGguY3BwCisJCQkJCQlLQ2FudmFzVHJlZURlYnVnLmNw
cCBLQ2FudmFzUGF0aC5jcHAgS0NhbnZhc1RleHRJdGVtLmNwcAogCiBsaWJrY2FudmFzX2xhX01F
VEFTT1VSQ0VTID0gS0NhbnZhc1ZpZXcubW9jCiBsaWJrY2FudmFzX2xhX0xERkxBR1MgPSAtdmVy
c2lvbi1pbmZvIDA6MTowIC1sbSAkKGFsbF9saWJyYXJpZXMpCkBAIC0xOCw0ICsxOCw1IEBACiBt
eWluY2x1ZGVfSEVBREVSUyA9IEtDYW52YXNJdGVtLmggS0NhbnZhc0NvbnRhaW5lci5oIEtDYW52
YXNNYXRyaXguaCBcCiAJCQkJCUtDYW52YXNSZXNvdXJjZXMuaCBLQ2FudmFzQ3JlYXRvci5oIEtD
YW52YXNJbWFnZUJ1ZmZlci5oIFwKIAkJCQkJS0NhbnZhc1JlZ2lzdHJ5LmggS0NhbnZhc0ZpbHRl
cnMuaCBLQ2FudmFzVmlldy5oIEtDYW52YXMuaCBcCi0JCQkJCUtDYW52YXNUeXBlcy5oIEtDYW52
YXNSZXNvdXJjZUxpc3RlbmVyLmggS0NhbnZhc1BhdGguaCBLQ2FudmFzVHJlZURlYnVnLmgKKwkJ
CQkJS0NhbnZhc1R5cGVzLmggS0NhbnZhc1Jlc291cmNlTGlzdGVuZXIuaCBLQ2FudmFzUGF0aC5o
IEtDYW52YXNUcmVlRGVidWcuaCBcCisJCQkJCUtDYW52YXNUZXh0SXRlbS5oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4220</attachid>
            <date>2005-10-05 11:22:09 -0700</date>
            <delta_ts>2005-10-05 11:22:09 -0700</delta_ts>
            <desc>KCanvas side of text support</desc>
            <filename>text-support-kcanvas.diff</filename>
            <type>text/plain</type>
            <size>42157</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IEtDYW52YXNDcmVhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBLQ2FudmFzQ3JlYXRvci5j
cHAJKHJldmlzaW9uIDQ2Njk1MCkKKysrIEtDYW52YXNDcmVhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIktDYW52YXNDcmVhdG9yLmgiCiAjaW5jbHVk
ZSAiS1JlbmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIktDYW52YXNDb250YWluZXIuaCIKKyNp
bmNsdWRlICJLQ2FudmFzVGV4dEl0ZW0uaCIKIAogc3RhdGljIEtTdGF0aWNEZWxldGVyPEtDYW52
YXNDcmVhdG9yPiBjYW52YXNDcmVhdG9yRGVsZXRlcjsKIEtDYW52YXNDcmVhdG9yICpLQ2FudmFz
Q3JlYXRvcjo6c19jcmVhdG9yID0gMDsKQEAgLTIyNSw0ICsyMjYsOSBAQAogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxLQ2FudmFzQ29udGFpbmVyICo+KGNhbnZhcy0+cmVuZGVyaW5nRGV2aWNlKCkt
PmNyZWF0ZUNvbnRhaW5lcihjYW52YXMsIHN0eWxlKSk7CiB9CiAKK0tDYW52YXNUZXh0SXRlbSAq
S0NhbnZhc0NyZWF0b3I6OmNyZWF0ZVRleHRJdGVtKEtDYW52YXMgKmNhbnZhcywgY29uc3QgUVN0
cmluZyAmc3RyLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlKSBjb25zdAoreworICAgIHJldHVybiBj
YW52YXMtPnJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVUZXh0SXRlbShjYW52YXMsIHN0ciwgc3R5
bGUpOworfQorCiAvLyB2aW06dHM9NDpub2V0CkluZGV4OiBLQ2FudmFzVGV4dEl0ZW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEtDYW52YXNUZXh0SXRlbS5jcHAJKHJldmlzaW9uIDApCisrKyBLQ2FudmFz
VGV4dEl0ZW0uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+
CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisK
KyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMw
LAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKi8KKworI2luY2x1ZGUgIktDYW52
YXMuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nU3R5bGUuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5n
RGV2aWNlLmgiCisjaW5jbHVkZSAiS0NhbnZhc1RleHRJdGVtLmgiCisjaW5jbHVkZSAiS1JlbmRl
cmluZ0ZpbGxQYWludGVyLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIuaCIK
KworY2xhc3MgS0NhbnZhc1RleHRJdGVtOjpQcml2YXRlCit7CitwdWJsaWM6CisgICAgUHJpdmF0
ZSgpIHt9CisgICAgflByaXZhdGUoKSB7fQorCisgICAgUUxpc3Q8UVN0cmluZz4gdGV4dDsKKyAg
ICBRTGlzdDxRUG9pbnRGPiBzdGFydDsKKyAgICBRTGlzdDxRUG9pbnRGPiBvZmZzZXQ7CisgICAg
UUxpc3Q8S1JlbmRlcmluZ1N0eWxlICo+IHN0eWxlOworfTsKKworS0NhbnZhc1RleHRJdGVtOjpL
Q2FudmFzVGV4dEl0ZW0oS0NhbnZhcyAqY2FudmFzLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlKQor
OiBLQ2FudmFzSXRlbShjYW52YXMsIHN0eWxlLCAwKSwgZChuZXcgUHJpdmF0ZSgpKQoreworfQor
CitLQ2FudmFzVGV4dEl0ZW06OktDYW52YXNUZXh0SXRlbShLQ2FudmFzICpjYW52YXMsIGNvbnN0
IFFTdHJpbmcgJnN0ciwgS1JlbmRlcmluZ1N0eWxlICpzdHlsZSkKKzogS0NhbnZhc0l0ZW0oY2Fu
dmFzLCBzdHlsZSwgMCksIGQobmV3IFByaXZhdGUoKSkKK3sKKyAgICAvL3NldFRleHQoc3RyKTsK
K30KKworS0NhbnZhc1RleHRJdGVtOjp+S0NhbnZhc1RleHRJdGVtKCkKK3sKK30KKworUVN0cmlu
ZyBLQ2FudmFzVGV4dEl0ZW06OnRleHQodW5zaWduZWQgaW50IGluZGV4KSBjb25zdAoreworICAg
IHJldHVybiBkLT50ZXh0W2luZGV4XTsKK30KKworYm9vbCBLQ2FudmFzVGV4dEl0ZW06OmlzQWJz
b2x1dGUodW5zaWduZWQgaW50IGluZGV4KSBjb25zdAoreworICAgIHJldHVybiAhZC0+c3RhcnRb
aW5kZXhdLmlzTnVsbCgpOworfQorCitmbG9hdCBLQ2FudmFzVGV4dEl0ZW06OngodW5zaWduZWQg
aW50IGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBkLT5zdGFydFtpbmRleF0ueCgpOworfQor
CitmbG9hdCBLQ2FudmFzVGV4dEl0ZW06OnkodW5zaWduZWQgaW50IGluZGV4KSBjb25zdAorewor
ICAgIHJldHVybiBkLT5zdGFydFtpbmRleF0ueSgpOworfQorCitmbG9hdCBLQ2FudmFzVGV4dEl0
ZW06OmR4KHVuc2lnbmVkIGludCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+b2Zmc2V0
W2luZGV4XS54KCk7Cit9CisKK2Zsb2F0IEtDYW52YXNUZXh0SXRlbTo6ZHkodW5zaWduZWQgaW50
IGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBkLT5vZmZzZXRbaW5kZXhdLnkoKTsKK30KKwor
S1JlbmRlcmluZ1N0eWxlICpLQ2FudmFzVGV4dEl0ZW06Ol9zdHlsZSh1bnNpZ25lZCBpbnQgaW5k
ZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPnN0eWxlW2luZGV4XTsKK30KKwordW5zaWduZWQg
aW50IEtDYW52YXNUZXh0SXRlbTo6Y2h1bmtDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQt
PnRleHQuY291bnQoKTsKK30KKworYm9vbCBLQ2FudmFzVGV4dEl0ZW06OmZpbGxDb250YWlucyhj
b25zdCBRUG9pbnQgJikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgS0Nh
bnZhc1RleHRJdGVtOjpzdHJva2VDb250YWlucyhjb25zdCBRUG9pbnQgJikgY29uc3QKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgS0NhbnZhc1RleHRJdGVtOjpkcmF3KGNvbnN0IFFS
ZWN0ICYpIGNvbnN0Cit7CisgICAgaWYoc3R5bGUoKSAmJiBjYW52YXMoKSAmJiBjYW52YXMoKS0+
cmVuZGVyaW5nRGV2aWNlKCkpCisgICAgeworICAgICAgICBpZighc3R5bGUoKS0+dmlzaWJsZSgp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmKHN0eWxlKCktPmZpbGxQYWludGVy
KCkgJiYgc3R5bGUoKS0+ZmlsbFBhaW50ZXIoKS0+cGFpbnRTZXJ2ZXIoKSkKKyAgICAgICAgICAg
IHN0eWxlKCktPmZpbGxQYWludGVyKCktPnBhaW50U2VydmVyKCktPnNldEFjdGl2ZUNsaWVudCh0
aGlzKTsKKworICAgICAgICBpZihzdHlsZSgpLT5zdHJva2VQYWludGVyKCkgJiYgc3R5bGUoKS0+
c3Ryb2tlUGFpbnRlcigpLT5wYWludFNlcnZlcigpKQorICAgICAgICAgICAgc3R5bGUoKS0+c3Ry
b2tlUGFpbnRlcigpLT5wYWludFNlcnZlcigpLT5zZXRBY3RpdmVDbGllbnQodGhpcyk7CisKKyAg
ICAgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQgPSBjYW52YXMoKS0+cmVuZGVy
aW5nRGV2aWNlKCktPmN1cnJlbnRDb250ZXh0KCk7CisgICAgICAgIC8vY29udGV4dC0+c2V0UGF0
aChkLT5wYXRoKTsKKyAgICAgICAgY29udGV4dC0+c2V0U3R5bGUoc3R5bGUoKSk7CisgICAgfQor
fQorCit2b2lkIEtDYW52YXNUZXh0SXRlbTo6aW52YWxpZGF0ZSgpIGNvbnN0Cit7Cit9CisKK1FS
ZWN0IEtDYW52YXNUZXh0SXRlbTo6YmJveChib29sIC8qaW5jbHVkZVN0cm9rZSovKSBjb25zdAor
eworICAgIFFSZWN0IHJlY3Q7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK3ZvaWQgS0NhbnZhc1Rl
eHRJdGVtOjphZGRUZXh0Q2h1bmsoY29uc3QgUVBvaW50RiAmcCwgY29uc3QgUVBvaW50RiAmb2Zm
c2V0LCBjb25zdCBRU3RyaW5nICZzdHIsIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUpCit7CisgICAg
ZC0+dGV4dC5hcHBlbmQoc3RyKTsKKyAgICBkLT5zdGFydC5hcHBlbmQocCk7CisgICAgZC0+b2Zm
c2V0LmFwcGVuZChvZmZzZXQpOworICAgIGQtPnN0eWxlLmFwcGVuZChzdHlsZSk7Cit9CisKK3Zv
aWQgS0NhbnZhc1RleHRJdGVtOjpjb2xsaXNpb25zKGNvbnN0IFFQb2ludCAmcCwgS0NhbnZhc0l0
ZW1MaXN0ICYvKmhpdHMqLykgY29uc3QKK3sKKyAgICBpZihwLngoKSA8IDAgfHwgcC55KCkgPCAw
KQorICAgICAgICByZXR1cm47Cit9CisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IGRldmljZS9L
UmVuZGVyaW5nU3Ryb2tlUGFpbnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2aWNlL0tSZW5kZXJp
bmdTdHJva2VQYWludGVyLmNwcAkocmV2aXNpb24gNDY2OTUwKQorKysgZGV2aWNlL0tSZW5kZXJp
bmdTdHJva2VQYWludGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsOCBAQAogCiAg
ICAgflByaXZhdGUoKQogICAgIHsKLSAgICAgICAgaWYocHNlcnZlciAmJiAocHNlcnZlci0+dHlw
ZSgpID09IFBTX1NPTElEIHx8IHBzZXJ2ZXItPnR5cGUoKSA9PSBQU19JTUFHRSkpCi0gICAgICAg
ICAgICBkZWxldGUgcHNlcnZlcjsKKyAgICAgICAgaWYocHNlcnZlcikKKyAgICAgICAgICAgIHBz
ZXJ2ZXItPmRlcmVmKCk7CiAgICAgfQogCiAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpwc2Vy
dmVyOwpAQCAtNzYsOSArNzYsMTMgQEAKIHZvaWQgS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXI6OnNl
dFBhaW50U2VydmVyKEtSZW5kZXJpbmdQYWludFNlcnZlciAqcHNlcnZlcikKIHsKICAgICBzZXRE
aXJ0eSgpOwotICAgIGlmKGQtPnBzZXJ2ZXIgJiYgKGQtPnBzZXJ2ZXItPnR5cGUoKSA9PSBQU19T
T0xJRCB8fCBkLT5wc2VydmVyLT50eXBlKCkgPT0gUFNfSU1BR0UpKQotICAgICAgICBkZWxldGUg
ZC0+cHNlcnZlcjsKKyAgICBpZihkLT5wc2VydmVyKQorICAgICAgICBkLT5wc2VydmVyLT5kZXJl
ZigpOworCiAgICAgZC0+cHNlcnZlciA9IHBzZXJ2ZXI7CisKKyAgICBpZihkLT5wc2VydmVyKQor
ICAgICAgICBkLT5wc2VydmVyLT5yZWYoKTsKIH0KIAogZmxvYXQgS1JlbmRlcmluZ1N0cm9rZVBh
aW50ZXI6OnN0cm9rZVdpZHRoKCkgY29uc3QKQEAgLTE2NCw2ICsxNjgsMTIgQEAKICAgICAgICAg
ZC0+cHNlcnZlci0+ZHJhdyhjb250ZXh0LCBBUFBMWV9UT19TVFJPS0UpOwogfQogCit2b2lkIEtS
ZW5kZXJpbmdTdHJva2VQYWludGVyOjpkcmF3VGV4dChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAq
Y29udGV4dCwgZmxvYXQgeCwgZmxvYXQgeSwgY29uc3QgUVN0cmluZyAmdGV4dCkgY29uc3QKK3sK
KyAgICBpZihkLT5wc2VydmVyKQorICAgICAgICBkLT5wc2VydmVyLT5kcmF3VGV4dChjb250ZXh0
LCB4LCB5LCB0ZXh0LCBBUFBMWV9UT19TVFJPS0UpOworfQorCiBib29sIEtSZW5kZXJpbmdTdHJv
a2VQYWludGVyOjpkaXJ0eSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGQtPmRpcnR5OwpJbmRleDog
ZGV2aWNlL0tSZW5kZXJpbmdTdHJva2VQYWludGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2aWNlL0tS
ZW5kZXJpbmdTdHJva2VQYWludGVyLmgJKHJldmlzaW9uIDQ2Njk1MCkKKysrIGRldmljZS9LUmVu
ZGVyaW5nU3Ryb2tlUGFpbnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw3IEBACiAK
ICAgICAvLyBBY3R1YWwgcmVuZGVyaW5nIGZ1bmN0aW9uCiAgICAgdmlydHVhbCB2b2lkIGRyYXco
S1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBkcmF3VGV4dChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4dCwgZmxvYXQgeCwgZmxv
YXQgeSwgY29uc3QgUVN0cmluZyAmdGV4dCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgY2xhc3Mg
UHJpdmF0ZTsKSW5kZXg6IGRldmljZS9LUmVuZGVyaW5nU3R5bGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGRldmljZS9LUmVuZGVyaW5nU3R5bGUuY3BwCShyZXZpc2lvbiA0NjY5NTApCisrKyBkZXZpY2Uv
S1JlbmRlcmluZ1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDQgKzI0NiwzOSBAQAog
ICAgIHJldHVybiBkLT5zdGFydE1hcmtlciB8fCBkLT5taWRNYXJrZXIgfHwgZC0+ZW5kTWFya2Vy
OwogfQogCitjb25zdCBRRm9udCAmS1JlbmRlcmluZ1N0eWxlOjpmb250KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gUUZvbnQoKTsKK30KKworYm9vbCBLUmVuZGVyaW5nU3R5bGU6Omhhc1VuZGVybGlu
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEtSZW5kZXJpbmdTdHls
ZTo6aGFzT3ZlcmxpbmUoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBL
UmVuZGVyaW5nU3R5bGU6Omhhc1N0cmlrZVRocm91Z2goKSBjb25zdAoreworICAgIHJldHVybiBm
YWxzZTsKK30KKworS0NUZXh0QW5jaG9yIEtSZW5kZXJpbmdTdHlsZTo6YW5jaG9yKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gVEFfU1RBUlQ7Cit9CisKK2Jvb2wgS1JlbmRlcmluZ1N0eWxlOjp2ZXJ0
aWNhbFRleHQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBLUmVuZGVy
aW5nU3R5bGU6Omx0cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIC8vIHZpbTp0
cz00Om5vZXQKSW5kZXg6IGRldmljZS9LUmVuZGVyaW5nRGV2aWNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
ZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaAkocmV2aXNpb24gNDY2OTUwKQorKysgZGV2aWNlL0tS
ZW5kZXJpbmdEZXZpY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogY2xhc3Mg
S0NhbnZhczsKIGNsYXNzIEtDYW52YXNNYXRyaXg7CiBjbGFzcyBLUmVuZGVyaW5nU3R5bGU7Citj
bGFzcyBLQ2FudmFzVGV4dEl0ZW07CiBjbGFzcyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dAogewog
cHVibGljOgpAQCAtMTA4LDYgKzEwOSw3IEBACiAKICAgICB2aXJ0dWFsIEtDYW52YXNJdGVtICpj
cmVhdGVJdGVtKEtDYW52YXMgKmNhbnZhcywgS1JlbmRlcmluZ1N0eWxlICpzdHlsZSwgS0NhbnZh
c1VzZXJEYXRhIHBhdGgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEtDYW52YXNDb250YWluZXIg
KmNyZWF0ZUNvbnRhaW5lcihLQ2FudmFzICpjYW52YXMsIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEtDYW52YXNUZXh0SXRlbSAqY3JlYXRlVGV4dEl0ZW0o
S0NhbnZhcyAqY2FudmFzLCBjb25zdCBRU3RyaW5nICZzdHIsIEtSZW5kZXJpbmdTdHlsZSAqc3R5
bGUpIGNvbnN0ID0gMDsKIAogICAgIC8vIFRvb2xzCiAgICAgdmlydHVhbCBRUmVjdCBiYm94UGF0
aChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4dCwgYm9vbCBpbmNsdWRlU3Ryb2tlKSBj
b25zdCA9IDA7CkluZGV4OiBkZXZpY2UvYWdnL0tDYW52YXNUZXh0SXRlbUFnZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGRldmljZS9hZ2cvS0NhbnZhc1RleHRJdGVtQWdnLmgJKHJldmlzaW9uIDApCisrKyBk
ZXZpY2UvYWdnL0tDYW52YXNUZXh0SXRlbUFnZy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4
IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4g
PHdpbGRmb3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisqLwor
CisjaWZuZGVmIEtDYW52YXNUZXh0SXRlbUFnZ19ICisjZGVmaW5lIEtDYW52YXNUZXh0SXRlbUFn
Z19ICisKKyNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNUZXh0SXRlbS5oPgorCitjbGFzcyBLQ2Fu
dmFzOworY2xhc3MgS1JlbmRlcmluZ1N0eWxlOworY2xhc3MgS0NhbnZhc1RleHRJdGVtQWdnIDog
cHVibGljIEtDYW52YXNUZXh0SXRlbQoreworcHVibGljOgorICAgIEtDYW52YXNUZXh0SXRlbUFn
ZyhLQ2FudmFzICpjYW52YXMsIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUpOworICAgIEtDYW52YXNU
ZXh0SXRlbUFnZyhLQ2FudmFzICpjYW52YXMsIGNvbnN0IFFTdHJpbmcgJnN0ciwgS1JlbmRlcmlu
Z1N0eWxlICpzdHlsZSk7CisgICAgdmlydHVhbCB+S0NhbnZhc1RleHRJdGVtQWdnKCk7CisKKyAg
ICAvLyAnS0NhbnZhc0l0ZW0nIGZ1bmN0aW9ucworICAgIHZpcnR1YWwgdm9pZCBkcmF3KGNvbnN0
IFFSZWN0ICZyZWN0KSBjb25zdDsKKworICAgIHZpcnR1YWwgUVJlY3QgYmJveChib29sIGluY2x1
ZGVTdHJva2UgPSB0cnVlKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIG11dGFibGUgUVJlY3Qg
bV9iYm94OworfTsKKworI2VuZGlmCisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IGRldmljZS9h
Z2cvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRBZ2cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRl
dmljZS9hZ2cvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRBZ2cuY3BwCShyZXZpc2lvbiA0
NjY5ODUpCisrKyBkZXZpY2UvYWdnL0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50QWdnLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsOCBAQAogKi8KIAogI2luY2x1ZGUgPHFwb2lu
dC5oPgorI2luY2x1ZGUgPHFwYWludGVyLmg+CisjaW5jbHVkZSA8cXBhaW50ZXJwYXRoLmg+CiAK
ICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXMuaD4KICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNN
YXRyaXguaD4KQEAgLTE1Nyw2ICsxNTksMjIgQEAKICAgICAgICAgYXJyYXlbaV0gPSBjOwogfQog
Cit2b2lkIGZpbGxfY29sb3JfYXJyYXlfcXQoUUdyYWRpZW50ICZncmFkaWVudCwgS0NTb3J0ZWRH
cmFkaWVudFN0b3BMaXN0ICZzdG9wTGlzdCwgZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBLQ1NvcnRl
ZEdyYWRpZW50U3RvcExpc3Q6Okl0ZXJhdG9yIGl0KHN0b3BMaXN0KTsKKyAgICBLQ0dyYWRpZW50
T2Zmc2V0UGFpciAqcGFpcjsKKyAgICB3aGlsZSgocGFpciA9IGl0LmN1cnJlbnQoKSkgIT0gMCkK
KyAgICB7CisgICAgICAgICsraXQ7CisKKwkgICAgUUNvbG9yIGMocGFpci0+Y29sb3IucmVkKCks
IHBhaXItPmNvbG9yLmdyZWVuKCksIHBhaXItPmNvbG9yLmJsdWUoKSk7CisJICAgCWMuc2V0QWxw
aGFGKHBhaXItPmNvbG9yLmFscGhhKCkgKiBvcGFjaXR5KTsKKwkJa2REZWJ1ZygpIDw8ICJBbHBo
YTogIiA8PCBwYWlyLT5jb2xvci5hbHBoYSgpIDw8IGVuZGw7CisJCWdyYWRpZW50LnNldENvbG9y
QXQocGFpci0+b2Zmc2V0LCBjKTsKKyAgICB9Cit9CisKKwogLy8gS1JlbmRlcmluZ1BhaW50U2Vy
dmVyTGluZWFyR3JhZGllbnRBZ2cKIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50
QWdnOjpLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudEFnZygpIDogS1JlbmRlcmlu
Z1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQoKSwgS1JlbmRlcmluZ1BhaW50U2VydmVyQWdnKCkK
IHsKQEAgLTI3MCw2ICsyODgsNTcgQEAKICAgICB9CiB9CiAKK3ZvaWQgS1JlbmRlcmluZ1BhaW50
U2VydmVyTGluZWFyR3JhZGllbnRBZ2c6OmRyYXdUZXh0KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
ICpjb250ZXh0LCBmbG9hdCB4LCBmbG9hdCB5LCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBLQ1BhaW50
VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAoreworICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0QWdn
ICphZ2dDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRBZ2cgKj4o
Y29udGV4dCk7CisgICAgUV9BU1NFUlQoYWdnQ29udGV4dCAhPSAwKTsKKworICAgIEtDYW52YXNJ
bWFnZUJ1ZmZlciAqcmVuZGVyaW5nQnVmZmVyID0gYWdnQ29udGV4dC0+YnVmZmVyKCk7CisgICAg
UV9BU1NFUlQocmVuZGVyaW5nQnVmZmVyICE9IDApOworCisgICAgS1JlbmRlcmluZ1N0eWxlICpz
dHlsZSA9IGFnZ0NvbnRleHQtPnN0eWxlKCk7CisKKyAgICBRSW1hZ2UgKmltYWdlID0gbmV3IFFJ
bWFnZShyZW5kZXJpbmdCdWZmZXItPmJpdHMoKSwgcmVuZGVyaW5nQnVmZmVyLT53aWR0aCgpLCBy
ZW5kZXJpbmdCdWZmZXItPmhlaWdodCgpLCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlw
bGllZCk7CisgICAgaW1hZ2UtPnNldEFscGhhQnVmZmVyKHRydWUpOworICAgIHsKKyAgICAgICAg
UVBhaW50ZXIgcChpbWFnZSk7CisgICAgICAgIHAuc2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50
aWFsaWFzaW5nKTsKKyAgICAgICAgcC5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpUZXh0QW50aWFs
aWFzaW5nKTsKKyAgICAgICAgUUZvbnQgZiA9IHN0eWxlLT5mb250KCk7CisgICAgICAgIGlmKHN0
eWxlLT5oYXNVbmRlcmxpbmUoKSkgZi5zZXRVbmRlcmxpbmUodHJ1ZSk7CisgICAgICAgIGlmKHN0
eWxlLT5oYXNPdmVybGluZSgpKSBmLnNldE92ZXJsaW5lKHRydWUpOworICAgICAgICBpZihzdHls
ZS0+aGFzU3RyaWtlVGhyb3VnaCgpKSBmLnNldFN0cmlrZU91dCh0cnVlKTsKKyAgICAgICAgcC5z
ZXRGb250KGYpOworICAgICAgICBRTGluZWFyR3JhZGllbnQgZ3JhZGllbnQoMTAsIDEwLCA0NDAs
IDQ0MCk7CisgICAgICAgIGRvdWJsZSBvcGFjaXR5ID0gMS4wOworICAgICAgICBpZih0eXBlICYg
QVBQTFlfVE9fRklMTCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoc3R5bGUtPmZpbGxQYWlu
dGVyKCkpIG9wYWNpdHkgPSBzdHlsZS0+ZmlsbFBhaW50ZXIoKS0+b3BhY2l0eSgpICogc3R5bGUt
Pm9wYWNpdHkoKTsKKyAgICAgICAgICAgIGZpbGxfY29sb3JfYXJyYXlfcXQoZ3JhZGllbnQsIGdy
YWRpZW50U3RvcHMoKSwgb3BhY2l0eSk7CisgICAgICAgICAgICBwLnNldEJydXNoKGdyYWRpZW50
KTsKKyAgICAgICAgfQorCisgICAgICAgIEtDYW52YXNNYXRyaXggb2JqZWN0TWF0cml4ID0gc3R5
bGUtPm9iamVjdE1hdHJpeCgpOworICAgICAgICBRV01hdHJpeCBtYXQob2JqZWN0TWF0cml4LmEo
KSwgb2JqZWN0TWF0cml4LmIoKSwgb2JqZWN0TWF0cml4LmMoKSwgb2JqZWN0TWF0cml4LmQoKSwg
b2JqZWN0TWF0cml4LmUoKSwgb2JqZWN0TWF0cml4LmYoKSk7CisgICAgICAgIGFnZzo6dHJhbnNf
YWZmaW5lIHdvcmxkID0gYWdnQ29udGV4dC0+d29ybGRUcmFuc2Zvcm0oKTsKKyAgICAgICAgZG91
YmxlIGRbNl07CisgICAgICAgIHdvcmxkLnN0b3JlX3RvKGQpOworICAgICAgICBtYXQgKj0gUVdN
YXRyaXgoZFswXSwgZFsxXSwgZFsyXSwgZFszXSwgZFs0XSwgZFs1XSk7CisgICAgICAgIHAuc2V0
TWF0cml4KG1hdCk7CisKKyAgICAgICAgLy9pZih0eXBlICYgQVBQTFlfVE9fU1RST0tFKQorICAg
ICAgICB7CisgICAgICAgICAgICBRUGFpbnRlclBhdGggdGV4dFBhdGg7CisgICAgICAgICAgICB0
ZXh0UGF0aC5hZGRUZXh0KFFQb2ludEYoeCwgeSksIGYsIHRleHQpOworICAgICAgICAgICAgcC5k
cmF3UGF0aCh0ZXh0UGF0aCk7CisgICAgICAgIH0KKyAgICAgICAgLy9lbHNlCisgICAgICAgIC8v
ICAgIHAuZHJhd1RleHQoUVBvaW50Rih4LCB5KSwgdGV4dCk7CisgICAgfQorICAgIGRlbGV0ZSBp
bWFnZTsKK30KKworCiAvLyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudEFnZwog
S1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRBZ2c6OktSZW5kZXJpbmdQYWludFNl
cnZlclJhZGlhbEdyYWRpZW50QWdnKCkgOiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFk
aWVudCgpLCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJBZ2coKQogewpAQCAtNDA4LDQgKzQ3Nyw1NCBA
QAogICAgIH0KIH0KIAordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudEFn
Zzo6ZHJhd1RleHQoS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQsIGZsb2F0IHgsIGZs
b2F0IHksIGNvbnN0IFFTdHJpbmcgJnRleHQsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0
Cit7CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRBZ2cgKmFnZ0NvbnRleHQgPSBzdGF0aWNf
Y2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dEFnZyAqPihjb250ZXh0KTsKKyAgICBRX0FTU0VS
VChhZ2dDb250ZXh0ICE9IDApOworCisgICAgS0NhbnZhc0ltYWdlQnVmZmVyICpyZW5kZXJpbmdC
dWZmZXIgPSBhZ2dDb250ZXh0LT5idWZmZXIoKTsKKyAgICBRX0FTU0VSVChyZW5kZXJpbmdCdWZm
ZXIgIT0gMCk7CisKKyAgICBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlID0gYWdnQ29udGV4dC0+c3R5
bGUoKTsKKworICAgIFFJbWFnZSAqaW1hZ2UgPSBuZXcgUUltYWdlKHJlbmRlcmluZ0J1ZmZlci0+
Yml0cygpLCByZW5kZXJpbmdCdWZmZXItPndpZHRoKCksIHJlbmRlcmluZ0J1ZmZlci0+aGVpZ2h0
KCksIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKKyAgICBpbWFnZS0+c2V0
QWxwaGFCdWZmZXIodHJ1ZSk7CisgICAgeworICAgICAgICBRUGFpbnRlciBwKGltYWdlKTsKKyAg
ICAgICAgcC5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcpOworICAgICAgICBw
LnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OlRleHRBbnRpYWxpYXNpbmcpOworICAgICAgICBRRm9u
dCBmID0gc3R5bGUtPmZvbnQoKTsKKyAgICAgICAgaWYoc3R5bGUtPmhhc1VuZGVybGluZSgpKSBm
LnNldFVuZGVybGluZSh0cnVlKTsKKyAgICAgICAgaWYoc3R5bGUtPmhhc092ZXJsaW5lKCkpIGYu
c2V0T3ZlcmxpbmUodHJ1ZSk7CisgICAgICAgIGlmKHN0eWxlLT5oYXNTdHJpa2VUaHJvdWdoKCkp
IGYuc2V0U3RyaWtlT3V0KHRydWUpOworICAgICAgICBwLnNldEZvbnQoZik7CisgICAgICAgIFFS
YWRpYWxHcmFkaWVudCBncmFkaWVudCgxMDAsIDEwMCwgNDQwKTsKKyAgICAgICAgZG91YmxlIG9w
YWNpdHkgPSAxLjA7CisgICAgICAgIGlmKHR5cGUgJiBBUFBMWV9UT19GSUxMKQorICAgICAgICB7
CisgICAgICAgICAgICBpZihzdHlsZS0+ZmlsbFBhaW50ZXIoKSkgb3BhY2l0eSA9IHN0eWxlLT5m
aWxsUGFpbnRlcigpLT5vcGFjaXR5KCkgKiBzdHlsZS0+b3BhY2l0eSgpOworICAgICAgICAgICAg
ZmlsbF9jb2xvcl9hcnJheV9xdChncmFkaWVudCwgZ3JhZGllbnRTdG9wcygpLCBvcGFjaXR5KTsK
KyAgICAgICAgICAgIHAuc2V0QnJ1c2goZ3JhZGllbnQpOworICAgICAgICB9CisKKyAgICAgICAg
S0NhbnZhc01hdHJpeCBvYmplY3RNYXRyaXggPSBzdHlsZS0+b2JqZWN0TWF0cml4KCk7CisgICAg
ICAgIFFXTWF0cml4IG1hdChvYmplY3RNYXRyaXguYSgpLCBvYmplY3RNYXRyaXguYigpLCBvYmpl
Y3RNYXRyaXguYygpLCBvYmplY3RNYXRyaXguZCgpLCBvYmplY3RNYXRyaXguZSgpLCBvYmplY3RN
YXRyaXguZigpKTsKKyAgICAgICAgYWdnOjp0cmFuc19hZmZpbmUgd29ybGQgPSBhZ2dDb250ZXh0
LT53b3JsZFRyYW5zZm9ybSgpOworICAgICAgICBkb3VibGUgZFs2XTsKKyAgICAgICAgd29ybGQu
c3RvcmVfdG8oZCk7CisgICAgICAgIG1hdCAqPSBRV01hdHJpeChkWzBdLCBkWzFdLCBkWzJdLCBk
WzNdLCBkWzRdLCBkWzVdKTsKKyAgICAgICAgcC5zZXRNYXRyaXgobWF0KTsKKworICAgICAgICAv
L2lmKHR5cGUgJiBBUFBMWV9UT19TVFJPS0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIFFQYWlu
dGVyUGF0aCB0ZXh0UGF0aDsKKyAgICAgICAgICAgIHRleHRQYXRoLmFkZFRleHQoUVBvaW50Rih4
LCB5KSwgZiwgdGV4dCk7CisgICAgICAgICAgICBwLmRyYXdQYXRoKHRleHRQYXRoKTsKKyAgICAg
ICAgfQorICAgICAgICAvL2Vsc2UKKyAgICAgICAgLy8gICAgcC5kcmF3VGV4dChRUG9pbnRGKHgs
IHkpLCB0ZXh0KTsKKyAgICB9CisgICAgZGVsZXRlIGltYWdlOworfQorCiAvLyB2aW06dHM9NDpu
b2V0CkluZGV4OiBkZXZpY2UvYWdnL0tDYW52YXNDb250YWluZXJBZ2cuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGRldmljZS9hZ2cvS0NhbnZhc0NvbnRhaW5lckFnZy5jcHAJKHJldmlzaW9uIDQ2Njk4MykK
KysrIGRldmljZS9hZ2cvS0NhbnZhc0NvbnRhaW5lckFnZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc5LDcgKzc5LDcgQEAKIAogICAgIC8vIERyYXcgYWxsIGNoaWxkcmVuLi4uCiAgICAgS0NhbnZh
c0NvbnRhaW5lcjo6ZHJhdyhyZWN0KTsKLSAgICAKKwogI2lmIDAKICAgICBpZihzdHlsZSgpLT5m
aWx0ZXIoKSkKICAgICAgICAgc3R5bGUoKS0+ZmlsdGVyKCktPmFwcGx5RmlsdGVyKGFnZ0Rldi0+
Y3VycmVudENvbnRleHQoKSwgcmVjdCk7CkluZGV4OiBkZXZpY2UvYWdnL0tSZW5kZXJpbmdQYWlu
dFNlcnZlckdyYWRpZW50QWdnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2aWNlL2FnZy9LUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJHcmFkaWVudEFnZy5oCShyZXZpc2lvbiA0NjY5NTApCisrKyBkZXZpY2UvYWdn
L0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50QWdnLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDcgQEAKICAgICB2aXJ0dWFsIH5LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFk
aWVudEFnZygpOwogCiAgICAgdmlydHVhbCB2b2lkIGRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRl
eHQgKmNvbnRleHQsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBkcmF3VGV4dChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4dCwgZmxvYXQgeCwg
ZmxvYXQgeSwgY29uc3QgUVN0cmluZyAmdGV4dCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29u
c3Q7CiB9OwogCiBjbGFzcyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudEFnZyA6
IHB1YmxpYyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCwKQEAgLTQ0LDYgKzQ1
LDcgQEAKICAgICB2aXJ0dWFsIH5LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudEFn
ZygpOwogCiAgICAgdmlydHVhbCB2b2lkIGRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKkNv
bnRleHQsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBk
cmF3VGV4dChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4dCwgZmxvYXQgeCwgZmxvYXQg
eSwgY29uc3QgUVN0cmluZyAmdGV4dCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3Q7CiB9
OwogCiAjZW5kaWYKSW5kZXg6IGRldmljZS9hZ2cvS0NhbnZhc0NsaXBwZXJBZ2cuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGRldmljZS9hZ2cvS0NhbnZhc0NsaXBwZXJBZ2cuY3BwCShyZXZpc2lvbiA0NjY5
NTApCisrKyBkZXZpY2UvYWdnL0tDYW52YXNDbGlwcGVyQWdnLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNyArMzIsNyBAQAogewogfQogCi12b2lkIEtDYW52YXNDbGlwcGVyQWdnOjpkcmF3KEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0QWdnICphZ2dDb250ZXh0LCBjb25zdCBRUmVjdCAmYmJveCwg
YWdnOjpyZW5kZXJpbmdfYnVmZmVyICpidWZmZXIpCit2b2lkIEtDYW52YXNDbGlwcGVyQWdnOjpk
cmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0QWdnICphZ2dDb250ZXh0LCBjb25zdCBRUmVjdCAm
YmJveCwgYWdnOjpyZW5kZXJpbmdfYnVmZmVyICpidWZmZXIpIGNvbnN0CiB7CiAgICAgS1JlbmRl
cmluZ1N0eWxlICpzdHlsZSA9IGFnZ0NvbnRleHQtPnN0eWxlKCk7CiAgICAgUV9BU1NFUlQoc3R5
bGUgIT0gMCk7CkluZGV4OiBkZXZpY2UvYWdnL0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkQWdn
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBkZXZpY2UvYWdnL0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlk
QWdnLmNwcAkocmV2aXNpb24gNDY2OTUwKQorKysgZGV2aWNlL2FnZy9LUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJTb2xpZEFnZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDggKzIxLDExIEBACiAqLwog
CiAjaW5jbHVkZSA8cXJlY3QuaD4KKyNpbmNsdWRlIDxxcGFpbnRlci5oPgorI2luY2x1ZGUgPHFw
YWludGVycGF0aC5oPgogCiAjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzLmg+CisjaW5jbHVkZSA8
a2NhbnZhcy9LQ2FudmFzTWF0cml4Lmg+CiAjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzSW1hZ2VC
dWZmZXIuaD4KICNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRmlsbFBhaW50ZXIu
aD4KICNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nU3Ryb2tlUGFpbnRlci5oPgpA
QCAtOTQsNCArOTcsNjAgQEAKICAgICB9CiB9CiAKK3ZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVy
U29saWRBZ2c6OmRyYXdUZXh0KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBmbG9h
dCB4LCBmbG9hdCB5LCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBl
KSBjb25zdAoreworICAgIGtkRGVidWcoKSA8PCAiZHJhd1RleHQgOiAiIDw8IHggPDwgIiAsICIg
PDwgeSA8PCAiICwgIiA8PCB0ZXh0IDw8IGVuZGw7CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRl
eHRBZ2cgKmFnZ0NvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dEFn
ZyAqPihjb250ZXh0KTsKKyAgICBRX0FTU0VSVChhZ2dDb250ZXh0ICE9IDApOworCisgICAgS0Nh
bnZhc0ltYWdlQnVmZmVyICpyZW5kZXJpbmdCdWZmZXIgPSBhZ2dDb250ZXh0LT5idWZmZXIoKTsK
KyAgICBRX0FTU0VSVChyZW5kZXJpbmdCdWZmZXIgIT0gMCk7CisKKyAgICBLUmVuZGVyaW5nU3R5
bGUgKnN0eWxlID0gYWdnQ29udGV4dC0+c3R5bGUoKTsKKyAgICBRX0FTU0VSVChzdHlsZSAhPSAw
KTsKKworICAgIFFJbWFnZSAqaW1hZ2UgPSBuZXcgUUltYWdlKHJlbmRlcmluZ0J1ZmZlci0+Yml0
cygpLCByZW5kZXJpbmdCdWZmZXItPndpZHRoKCksIHJlbmRlcmluZ0J1ZmZlci0+aGVpZ2h0KCks
IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKKyAgICBpbWFnZS0+c2V0QWxw
aGFCdWZmZXIodHJ1ZSk7CisgICAgeworICAgICAgICBRUGFpbnRlciBwKGltYWdlKTsKKyAgICAg
ICAgcC5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcpOworICAgICAgICBwLnNl
dFJlbmRlckhpbnQoUVBhaW50ZXI6OlRleHRBbnRpYWxpYXNpbmcpOworICAgICAgICAvL2lmKHN0
eWxlLT5maWxsUGFpbnRlcigpICYmIHN0eWxlLT5maWxsUGFpbnRlcigpLT5wYWludFNlcnZlcigp
ICYmIHN0eWxlLT5maWxsUGFpbnRlcigpLT5wYWludFNlcnZlcigpLT50eXBlKCkgPT0gUFNfU09M
SUQpCisgICAgICAgIFFGb250IGYgPSBzdHlsZS0+Zm9udCgpOworICAgICAgICBpZihzdHlsZS0+
aGFzVW5kZXJsaW5lKCkpIGYuc2V0VW5kZXJsaW5lKHRydWUpOworICAgICAgICBpZihzdHlsZS0+
aGFzT3ZlcmxpbmUoKSkgZi5zZXRPdmVybGluZSh0cnVlKTsKKyAgICAgICAgaWYoc3R5bGUtPmhh
c1N0cmlrZVRocm91Z2goKSkgZi5zZXRTdHJpa2VPdXQodHJ1ZSk7CisJCS8vZi5zZXRTdHlsZVN0
cmF0ZWd5KFFGb250OjpGb3JjZU91dGxpbmUpOworICAgICAgICBwLnNldEZvbnQoZik7CisgICAg
ICAgIGJvb2wgbHRyID0gc3R5bGUtPmx0cigpOworICAgICAgICBrZERlYnVnKCkgPDwgImx0ciA6
ICAiIDw8IGx0ciA8PCBlbmRsOworICAgICAgICBwLnNldExheW91dERpcmVjdGlvbihsdHIgPyBR
dDo6TGVmdFRvUmlnaHQgOiBRdDo6UmlnaHRUb0xlZnQpOworCisgICAgICAgIEtDYW52YXNNYXRy
aXggb2JqZWN0TWF0cml4ID0gc3R5bGUtPm9iamVjdE1hdHJpeCgpOworICAgICAgICBRV01hdHJp
eCBtYXQob2JqZWN0TWF0cml4LmEoKSwgb2JqZWN0TWF0cml4LmIoKSwgb2JqZWN0TWF0cml4LmMo
KSwgb2JqZWN0TWF0cml4LmQoKSwgb2JqZWN0TWF0cml4LmUoKSwgb2JqZWN0TWF0cml4LmYoKSk7
CisgICAgICAgIGFnZzo6dHJhbnNfYWZmaW5lIHdvcmxkID0gYWdnQ29udGV4dC0+d29ybGRUcmFu
c2Zvcm0oKTsKKyAgICAgICAgZG91YmxlIGRbNl07CisgICAgICAgIHdvcmxkLnN0b3JlX3RvKGQp
OworICAgICAgICBtYXQgKj0gUVdNYXRyaXgoZFswXSwgZFsxXSwgZFsyXSwgZFszXSwgZFs0XSwg
ZFs1XSk7CisgICAgICAgIHAuc2V0TWF0cml4KG1hdCk7CisKKyAgICAgICAgaWYodHlwZSAmIEFQ
UExZX1RPX1NUUk9LRSkKKyAgICAgICAgeworCQkJUVBlbiBwZW4oY29sb3IoKSk7CisJCQlwZW4u
c2V0V2lkdGhGKHN0eWxlLT5zdHJva2VQYWludGVyKCktPnN0cm9rZVdpZHRoKCkpOworCQkJcC5z
ZXRQZW4ocGVuKTsKKyAgICAgICAgICAgIFFQYWludGVyUGF0aCB0ZXh0UGF0aDsKKyAgICAgICAg
ICAgIHRleHRQYXRoLmFkZFRleHQoUVBvaW50Rih4LCB5KSwgZiwgdGV4dCk7CisgICAgICAgICAg
ICBwLmRyYXdQYXRoKHRleHRQYXRoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisJCXsKKwkJ
CVFQZW4gcGVuKGNvbG9yKCkpOworCQkJcC5zZXRQZW4ocGVuKTsKKyAgICAgICAgICAgIHAuZHJh
d1RleHQoUVBvaW50Rih4LCB5KSwgdGV4dCk7CisJCX0KKyAgICB9CisgICAgZGVsZXRlIGltYWdl
OworfQorCiAvLyB2aW06dHM9NDpub2V0CkluZGV4OiBkZXZpY2UvYWdnL0tSZW5kZXJpbmdEZXZp
Y2VBZ2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldmljZS9hZ2cvS1JlbmRlcmluZ0RldmljZUFnZy5j
cHAJKHJldmlzaW9uIDQ2Njk1MCkKKysrIGRldmljZS9hZ2cvS1JlbmRlcmluZ0RldmljZUFnZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJLQ2FudmFzQWdn
SGVscGVyLmgiCiAjaW5jbHVkZSAiS0NhbnZhc0ZpbHRlckFnZy5oIgogI2luY2x1ZGUgIktDYW52
YXNDbGlwcGVyQWdnLmgiCisjaW5jbHVkZSAiS0NhbnZhc1RleHRJdGVtQWdnLmgiCiAjaW5jbHVk
ZSAiS0NhbnZhc0NvbnRhaW5lckFnZy5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VBZ2cu
bW9jIgogI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkQWdnLmgiCkBAIC0yODUs
NiArMjg2LDExIEBACiAgICAgcmV0dXJuIG5ldyBLQ2FudmFzQ29udGFpbmVyQWdnKGNhbnZhcywg
c3R5bGUpOwogfQogCitLQ2FudmFzVGV4dEl0ZW0gKktSZW5kZXJpbmdEZXZpY2VBZ2c6OmNyZWF0
ZVRleHRJdGVtKEtDYW52YXMgKmNhbnZhcywgY29uc3QgUVN0cmluZyAmc3RyLCBLUmVuZGVyaW5n
U3R5bGUgKnN0eWxlKSBjb25zdAoreworICAgIHJldHVybiBuZXcgS0NhbnZhc1RleHRJdGVtQWdn
KGNhbnZhcywgc3RyLCBzdHlsZSk7Cit9CisKIFFSZWN0IEtSZW5kZXJpbmdEZXZpY2VBZ2c6OmJi
b3hQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBib29sIGluY2x1ZGVTdHJv
a2UpIGNvbnN0CiB7CiAgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRBZ2cgKmFnZ0NvbnRleHQg
PSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dEFnZyAqPihjb250ZXh0KTsKQEAg
LTM4Nyw4ICszOTMsOCBAQAogICAgIHsKICAgICAgICAgUVN0cmluZyBpZCA9IHN0eWxlLT5jbGlw
UGF0aHMoKVtpXS5taWQoMSk7CiAKLSAgICAgICAgS0NhbnZhc1Jlc291cmNlICpyZXNvdXJjZSA9
IGNhbnZhcy0+cmVnaXN0cnkoKS0+Z2V0UmVzb3VyY2VCeUlkKGlkKTsKLSAgICAgICAgS0NhbnZh
c0NsaXBwZXJBZ2cgKmNsaXBwZXIgPSBzdGF0aWNfY2FzdDxLQ2FudmFzQ2xpcHBlckFnZyAqPihy
ZXNvdXJjZSk7CisgICAgICAgIGNvbnN0IEtDYW52YXNSZXNvdXJjZSAqcmVzb3VyY2UgPSBjYW52
YXMtPnJlZ2lzdHJ5KCktPmdldFJlc291cmNlQnlJZChpZCk7CisgICAgICAgIGNvbnN0IEtDYW52
YXNDbGlwcGVyQWdnICpjbGlwcGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgS0NhbnZhc0NsaXBwZXJB
Z2cgKj4ocmVzb3VyY2UpOwogCiAgICAgICAgIGlmKGNsaXBwZXIpCiAgICAgICAgICAgICBjbGlw
cGVyLT5kcmF3KGNvbnRleHQsIF9iYm94LCBtYXNrUmVuZGVyaW5nQnVmZmVyKTsKSW5kZXg6IGRl
dmljZS9hZ2cvTWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2aWNlL2FnZy9NYWtlZmlsZS5h
bQkocmV2aXNpb24gNDY2OTUwKQorKysgZGV2aWNlL2FnZy9NYWtlZmlsZS5hbQkod29ya2luZyBj
b3B5KQpAQCAtNyw3ICs3LDcgQEAKIAkJCQkJCQkJIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlk
QWdnLmNwcCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudEFnZy5jcHAgXAogCQkJCQkJCQkg
S1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybkFnZy5jcHAgS1JlbmRlcmluZ1BhaW50U2VydmVy
SW1hZ2VBZ2cuY3BwIFwKIAkJCQkJCQkJIEtSZW5kZXJpbmdQYWludFNlcnZlckFnZy5jcHAgS0Nh
bnZhc0NsaXBwZXJBZ2cuY3BwIEtDYW52YXNGaWx0ZXJBZ2cuY3BwIFwKLQkJCQkJCQkJIEtDYW52
YXNJdGVtQWdnLmNwcCBLQ2FudmFzQ29udGFpbmVyQWdnLmNwcAorCQkJCQkJCQkgS0NhbnZhc0l0
ZW1BZ2cuY3BwIEtDYW52YXNDb250YWluZXJBZ2cuY3BwIEtDYW52YXNUZXh0SXRlbUFnZy5jcHAK
IGxpYmtjYW52YXNkZXZpY2VhZ2dfbGFfTERGTEFHUyA9IC1tb2R1bGUgJChLREVfUExVR0lOKSAk
KGFsbF9saWJyYXJpZXMpCiBsaWJrY2FudmFzZGV2aWNlYWdnX2xhX0xJQkFERCA9ICQodG9wX2J1
aWxkZGlyKS9rY2FudmFzL2xpYmtjYW52YXMubGEgXAogCQkJCQkJCQkkKHRvcF9idWlsZGRpcikv
a2NhbnZhcy9kZXZpY2UvbGlia2NhbnZhc2RldmljZS5sYSAkKExJQl9BR0cpCkluZGV4OiBkZXZp
Y2UvYWdnL0tDYW52YXNDbGlwcGVyQWdnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2aWNlL2FnZy9LQ2Fu
dmFzQ2xpcHBlckFnZy5oCShyZXZpc2lvbiA0NjY5NTApCisrKyBkZXZpY2UvYWdnL0tDYW52YXND
bGlwcGVyQWdnLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICAgICBLQ2FudmFz
Q2xpcHBlckFnZygpOwogICAgIHZpcnR1YWwgfktDYW52YXNDbGlwcGVyQWdnKCk7CiAKLSAgICB2
b2lkIGRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHRBZ2cgKmNvbnRleHQsIGNvbnN0IFFSZWN0
ICZiYm94LCBhZ2c6OnJlbmRlcmluZ19idWZmZXIgKmJ1ZmZlcik7CisgICAgdm9pZCBkcmF3KEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0QWdnICpjb250ZXh0LCBjb25zdCBRUmVjdCAmYmJveCwgYWdn
OjpyZW5kZXJpbmdfYnVmZmVyICpidWZmZXIpIGNvbnN0OwogfTsKIAogI2VuZGlmCkluZGV4OiBk
ZXZpY2UvYWdnL0tDYW52YXNUZXh0SXRlbUFnZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2aWNlL2Fn
Zy9LQ2FudmFzVGV4dEl0ZW1BZ2cuY3BwCShyZXZpc2lvbiAwKQorKysgZGV2aWNlL2FnZy9LQ2Fu
dmFzVGV4dEl0ZW1BZ2cuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzMyBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtk
ZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhaW50IHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3Vp
dGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKi8KKworI2luY2x1ZGUg
PGtjYW52YXMvS0NhbnZhcy5oPgorI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc01hdHJpeC5oPgor
I2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0ltYWdlQnVmZmVyLmg+CisjaW5jbHVkZSA8a2NhbnZh
cy9kZXZpY2UvS1JlbmRlcmluZ1N0eWxlLmg+CisjaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1Jl
bmRlcmluZ0ZpbGxQYWludGVyLmg+CisjaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmlu
Z1BhaW50U2VydmVyU29saWQuaD4KKyNpbmNsdWRlICJLQ2FudmFzVGV4dEl0ZW1BZ2cuaCIKKwor
I2luY2x1ZGUgIktDYW52YXNBZ2dIZWxwZXIuaCIKKyNpbmNsdWRlICJLQ2FudmFzQ29udGFpbmVy
QWdnLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZUFnZy5oIgorCisjaW5jbHVkZSA8a2ds
b2JhbC5oPgorI2luY2x1ZGUgPGtkZWJ1Zy5oPgorI2luY2x1ZGUgPHFmb250bWV0cmljcy5oPgor
I2luY2x1ZGUgPHFzdGFjay5oPgorCitzdHJ1Y3QgS0NhbnZhc1RleHRIZWxwZXIKK3sKKyAgICBL
UmVuZGVyaW5nU3R5bGUgKl9zdHlsZTsKKyAgICBmbG9hdCBjdXJ4OworICAgIGZsb2F0IGN1cnk7
CisgICAgUVN0cmluZyB0ZXh0OworfTsKKworS0NhbnZhc1RleHRJdGVtQWdnOjpLQ2FudmFzVGV4
dEl0ZW1BZ2coS0NhbnZhcyAqY2FudmFzLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlKQorOiBLQ2Fu
dmFzVGV4dEl0ZW0oY2FudmFzLCBzdHlsZSkKK3sKK30KKworS0NhbnZhc1RleHRJdGVtQWdnOjpL
Q2FudmFzVGV4dEl0ZW1BZ2coS0NhbnZhcyAqY2FudmFzLCBjb25zdCBRU3RyaW5nICZzdHIsIEtS
ZW5kZXJpbmdTdHlsZSAqc3R5bGUpCis6IEtDYW52YXNUZXh0SXRlbShjYW52YXMsIHN0eWxlKQor
eworICAgIC8vc2V0VGV4dChzdHIpOworfQorCitLQ2FudmFzVGV4dEl0ZW1BZ2c6On5LQ2FudmFz
VGV4dEl0ZW1BZ2coKQoreworfQorCit2b2lkIGRyYXdDaHVuayhLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dEFnZyAqYWdnQ29udGV4dCwgUVN0YWNrPEtDYW52YXNUZXh0SGVscGVyPiAmc3RhY2ssIGZs
b2F0IHRvdGFsYWR2LCBib29sIHZlcnRpY2FsKQoreworICAgIGlmKHN0YWNrLmlzRW1wdHkoKSkg
cmV0dXJuOworICAgIEtDYW52YXNUZXh0SGVscGVyIHRlbXAgPSBzdGFjay5wb3AoKTsKKyAgICBr
ZERlYnVnKCkgPDwgIkFuY2hvciBzdHlsZSA6ICIgPDwgdGVtcC5fc3R5bGUtPmFuY2hvcigpIDw8
IGVuZGw7CisgICAgZmxvYXQgYWR2ID0gMC47CisgICAgaWYodGVtcC5fc3R5bGUtPmFuY2hvcigp
ID09IFRBX01JRERMRSkKKyAgICAgICAgYWR2ID0gdG90YWxhZHYgLyAyLjsKKyAgICBlbHNlIGlm
KHRlbXAuX3N0eWxlLT5hbmNob3IoKSA9PSBUQV9FTkQpCisgICAgICAgIGFkdiA9IHRvdGFsYWR2
OworICAgIGZvcmV2ZXIgCisgICAgeworICAgICAgICBhZ2dDb250ZXh0LT5zZXRTdHlsZSh0ZW1w
Ll9zdHlsZSk7CisgICAgICAgIGZsb2F0IGN1cnggPSB0ZW1wLmN1cng7CisgICAgICAgIGZsb2F0
IGN1cnkgPSB0ZW1wLmN1cnk7CisgICAgICAgIHRlbXAuX3N0eWxlLT5maWxsUGFpbnRlcigpLT5k
cmF3VGV4dChhZ2dDb250ZXh0LCB2ZXJ0aWNhbCA/IGN1cnggOiAoY3VyeCAtIGFkdiksIHZlcnRp
Y2FsID8gKGN1cnkgLSBhZHYpIDogY3VyeSwgdGVtcC50ZXh0KTsKKyAgICAgICAgdGVtcC5fc3R5
bGUtPnN0cm9rZVBhaW50ZXIoKS0+ZHJhd1RleHQoYWdnQ29udGV4dCwgdmVydGljYWwgPyBjdXJ4
IDogKGN1cnggLSBhZHYpLCB2ZXJ0aWNhbCA/IChjdXJ5IC0gYWR2KSA6IGN1cnksIHRlbXAudGV4
dCk7CisgICAgICAgIGlmKHN0YWNrLmlzRW1wdHkoKSkgcmV0dXJuOworICAgICAgICB0ZW1wID0g
c3RhY2sucG9wKCk7CisgICAgfQorfQorCit2b2lkIEtDYW52YXNUZXh0SXRlbUFnZzo6ZHJhdyhj
b25zdCBRUmVjdCAmcmVjdCkgY29uc3QKK3sKKyAgICBLUmVuZGVyaW5nRGV2aWNlQWdnICphZ2dE
ZXYgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQWdnICo+KGNhbnZhcygpLT5yZW5kZXJp
bmdEZXZpY2UoKSk7CisgICAgUV9BU1NFUlQoYWdnRGV2ICE9IDApOworCisgICAgS1JlbmRlcmlu
Z0RldmljZUNvbnRleHRBZ2cgKmFnZ0NvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dEFnZyAqPihhZ2dEZXYtPmN1cnJlbnRDb250ZXh0KCkpOworICAgIFFfQVNTRVJU
KGFnZ0NvbnRleHQgIT0gMCk7CisKKyAgICAvL0tSZW5kZXJpbmdTdHlsZSAqX3N0eWxlID0gc3R5
bGUoKTsKKyAgICAvL1FfQVNTRVJUKF9zdHlsZSAhPSAwKTsKKworICAgIC8vIFNldHVwIGl0ZW0u
Li4KKyAgICBLQ2FudmFzVGV4dEl0ZW06OmRyYXcocmVjdCk7CisKKyAgICAvLyBVcGRhdGUgaW50
ZXJuYWwgYWdnIG1hdHJpeCByZXNwZWN0aW5nIHRoZSBvYmplY3QncyBjdG0gKGN1cnJlbnQgdHJh
bnNmb3JtYXRpb24gbWF0cml4KQorICAgIC8vS0NhbnZhc01hdHJpeCBvYmplY3RNYXRyaXggPSBf
c3R5bGUtPm9iamVjdE1hdHJpeCgpOworICAgIC8vYWdnRGF0YS0+dHJhbnNmb3JtID0gYWdnOjp0
cmFuc19hZmZpbmUob2JqZWN0TWF0cml4LmEoKSwgb2JqZWN0TWF0cml4LmIoKSwgb2JqZWN0TWF0
cml4LmMoKSwKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9i
amVjdE1hdHJpeC5kKCksIG9iamVjdE1hdHJpeC5lKCksIG9iamVjdE1hdHJpeC5mKCkpOworCisg
ICAgLy8gUmVzcGVjdCBnbG9iYWwgem9vbSAmIHBhbiB3aGljaCBpbmZsdWVuY2UgdGhlIGN0bQor
ICAgIC8vYWdnRGF0YS0+dHJhbnNmb3JtICo9IGFnZ0NvbnRleHQtPndvcmxkVHJhbnNmb3JtKCk7
CisKKyAgICBib29sIHZlcnRpY2FsID0gc3R5bGUoKS0+dmVydGljYWxUZXh0KCk7CisgICAga2RE
ZWJ1ZygpIDw8ICJ2ZXJ0aWNhbCA6ICAiIDw8IHZlcnRpY2FsIDw8IGVuZGw7CisgICAgLy8gRHJh
dyBmaWxsLCBpZiBuZWVkZWQKKyAgICBrZERlYnVnKCkgPDwgImNodW5rQ291bnQgOiAiIDw8IGNo
dW5rQ291bnQoKSA8PCBlbmRsOworICAgIGZsb2F0IGN1cnggPSAwLiwgY3VyeSA9IDAuOworICAg
IFFTdGFjazxLQ2FudmFzVGV4dEhlbHBlcj4gc3RhY2s7CisgICAgS0NhbnZhc1RleHRIZWxwZXIg
dGVtcDsKKyAgICBmbG9hdCB3ID0gMC47CisgICAgZm9yKHVuc2lnbmVkIGludCBpID0gMDtpIDwg
Y2h1bmtDb3VudCgpO2krKykKKyAgICB7CisgICAgICAgIGtkRGVidWcoKSA8PCAiRG8gd2UgaGF2
ZSBmaWxsIGZvciB0ZXh0ICIgPDwgdGV4dChpKSA8PCAiIDogIiA8PCBfc3R5bGUoaSktPmlzRmls
bGVkKCkgPDwgZW5kbDsKKyAgICAgICAgaWYoX3N0eWxlKGkpLT5pc0ZpbGxlZCgpKQorICAgICAg
ICB7CisgICAgICAgICAgICBRRm9udE1ldHJpY3MgZm0oX3N0eWxlKGkpLT5mb250KCkpOworICAg
ICAgICAgICAgaWYodmVydGljYWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYo
aXNBYnNvbHV0ZShpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRy
YXdDaHVuayhhZ2dDb250ZXh0LCBzdGFjaywgdywgdmVydGljYWwpOworICAgICAgICAgICAgICAg
ICAgICBjdXJ4ID0gdGVtcC5jdXJ4ID0geChpKTsKKyAgICAgICAgICAgICAgICAgICAgY3VyeSA9
IHRlbXAuY3VyeSA9IHkoaSk7CisgICAgICAgICAgICAgICAgICAgIHcgPSAwLjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgdGVtcC5fc3R5bGUgPSBfc3R5bGUoaSk7CisgICAg
ICAgICAgICAgICAgY3VyeCArPSBkeChpKTsKKyAgICAgICAgICAgICAgICBjdXJ5ICs9IGR5KGkp
OworICAgICAgICAgICAgICAgIHRlbXAuY3VyeCA9IGN1cng7CisgICAgICAgICAgICAgICAgdGVt
cC5jdXJ5ID0gY3VyeTsKKyAgICAgICAgICAgICAgICBmbG9hdCBoID0gZm0uaGVpZ2h0KCk7Cisg
ICAgICAgICAgICAgICAgZm9yKGludCBpbmRleCA9IDA7aW5kZXggPCB0ZXh0KGkpLmxlbmd0aCgp
O2luZGV4KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZW1wLnRl
eHQgPSBRU3RyaW5nKHRleHQoaSlbaW5kZXhdKTsKKyAgICAgICAgICAgICAgICAgICAgY3VyeSAr
PSBoOworICAgICAgICAgICAgICAgICAgICB3ICs9IGg7CisgICAgICAgICAgICAgICAgICAgIHRl
bXAuY3VyeSA9IGN1cnk7CisgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGVtcCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmKGlzQWJzb2x1dGUoaSkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBkcmF3Q2h1bmsoYWdnQ29udGV4dCwgc3RhY2ssIHcs
IHZlcnRpY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgY3VyeCA9IHRlbXAuY3VyeCA9IHgoaSk7
CisgICAgICAgICAgICAgICAgICAgIGN1cnkgPSB0ZW1wLmN1cnkgPSB5KGkpOworICAgICAgICAg
ICAgICAgICAgICB3ID0gMC47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRl
bXAuX3N0eWxlID0gX3N0eWxlKGkpOworICAgICAgICAgICAgICAgIGZsb2F0IGFkdiA9IGZtLndp
ZHRoKHRleHQoaSkpOworICAgICAgICAgICAgICAgIHcgKz0gYWR2OworICAgICAgICAgICAgICAg
IGN1cnggKz0gZHgoaSk7CisgICAgICAgICAgICAgICAgY3VyeSArPSBkeShpKTsKKyAgICAgICAg
ICAgICAgICB0ZW1wLmN1cnggPSBjdXJ4OworICAgICAgICAgICAgICAgIHRlbXAuY3VyeSA9IGN1
cnk7CisgICAgICAgICAgICAgICAgdGVtcC50ZXh0ID0gdGV4dChpKTsKKyAgICAgICAgICAgICAg
ICBzdGFjay5wdXNoKHRlbXApOworICAgICAgICAgICAgICAgIGN1cnggKz0gYWR2OworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZHJhd0NodW5rKGFnZ0NvbnRleHQsIHN0
YWNrLCB3LCB2ZXJ0aWNhbCk7Cit9CisKK1FSZWN0IEtDYW52YXNUZXh0SXRlbUFnZzo6YmJveChi
b29sIGluY2x1ZGVTdHJva2UpIGNvbnN0Cit7CisgICAgaWYobV9iYm94LmlzRW1wdHkoKSkKKyAg
ICB7CisgICAgICAgIGJvb2wgdmVydGljYWwgPSBzdHlsZSgpLT52ZXJ0aWNhbFRleHQoKTsKKyAg
ICAgICAgZmxvYXQgY3VyeCA9IDAuLCBjdXJ5ID0gMC47CisgICAgICAgIGZsb2F0IG1pbnggPSAx
MDAwMDAuLCBtaW55ID0gMTAwMDAwLjsKKyAgICAgICAgZmxvYXQgbWF4eCA9IC0xMDAwMDAuLCBt
YXh5ID0gLTEwMDAwMC47CisgICAgICAgIGZsb2F0IHcgPSAwLjsKKyAgICAgICAgZm9yKHVuc2ln
bmVkIGludCBpID0gMDtpIDwgY2h1bmtDb3VudCgpO2krKykKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYoX3N0eWxlKGkpLT5pc0ZpbGxlZCgpIHx8IF9zdHlsZShpKS0+aXNTdHJva2VkKCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIFFGb250TWV0cmljcyBmbShfc3R5bGUoaSkt
PmZvbnQoKSk7CisgICAgICAgICAgICAgICAgIGZsb2F0IGggPSBmbS5oZWlnaHQoKTsKKyAgICAg
ICAgICAgICAgICAgaWYodmVydGljYWwpCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgIGlmKGlzQWJzb2x1dGUoaSkpCisgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjdXJ4ID0geChpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGN1cnkgPSB5KGkpOworICAgICAgICAgICAgICAgICAgICAgICAgbWlueCA9IGtNaW4oY3VyeCwg
bWlueCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtaW55ID0ga01pbihjdXJ5LCBtaW55KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHcgPSAwLjsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBjdXJ4ICs9IGR4KGkpOworICAgICAgICAgICAgICAgICAgICBt
YXh4ID0ga01heChjdXJ4LCBtYXh4KTsKKyAgICAgICAgICAgICAgICAgICAgY3VyeSArPSBkeShp
KTsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGludCBpbmRleCA9IDA7aW5kZXggPCB0ZXh0KGkp
Lmxlbmd0aCgpO2luZGV4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnkgKz0gaDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHcgKz0gaDsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtYXh5ID0ga01heChjdXJ5
LCBtYXh5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoaXNBYnNvbHV0ZShpKSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY3VyeCA9IHgoaSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjdXJ5ID0geShpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHcgPSAwLjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBt
aW54ID0ga01pbihjdXJ4LCBtaW54KTsKKyAgICAgICAgICAgICAgICAgICAgbWlueSA9IGtNaW4o
Y3VyeSwgbWlueSk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFkdiA9IGZtLndpZHRoKHRl
eHQoaSkpOworICAgICAgICAgICAgICAgICAgICB3ICs9IGFkdjsKKyAgICAgICAgICAgICAgICAg
ICAgY3VyeCArPSBkeChpKTsKKyAgICAgICAgICAgICAgICAgICAgY3VyeSArPSBkeShpKTsKKyAg
ICAgICAgICAgICAgICAgICAgY3VyeCArPSBhZHY7CisgICAgICAgICAgICAgICAgICAgIG1heHgg
PSBrTWF4KGN1cngsIG1heHgpOworICAgICAgICAgICAgICAgICAgICBtYXh5ID0ga01heChjdXJ5
ICsgaCwgbWF4eSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbV9iYm94ID0gUVJlY3QobWlueCwgbWlueSwgbWF4eCAtIG1pbngsIG1heHkgLSBtaW55KTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGtkRGVidWcoKSA8PCAiQkJPWCA6ICIgPDwgbV9iYm94
IDw8IGVuZGw7CisgICAgcmV0dXJuIG1fYmJveDsKK30KKworLy8gdmltOnRzPTQ6bm9ldApJbmRl
eDogZGV2aWNlL2FnZy9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZEFnZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGRldmljZS9hZ2cvS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRBZ2cuaAkocmV2aXNpb24g
NDY2OTUwKQorKysgZGV2aWNlL2FnZy9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZEFnZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAgICAgdmlydHVhbCB+S1JlbmRlcmluZ1Bh
aW50U2VydmVyU29saWRBZ2coKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0ICpjb250ZXh0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1RleHQoS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQs
IGZsb2F0IHgsIGZsb2F0IHksIGNvbnN0IFFTdHJpbmcgJnRleHQsIEtDUGFpbnRUYXJnZXRUeXBl
IHR5cGUpIGNvbnN0OwogfTsKIAogI2VuZGlmCkluZGV4OiBkZXZpY2UvYWdnL0tSZW5kZXJpbmdE
ZXZpY2VBZ2cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXZpY2UvYWdnL0tSZW5kZXJpbmdEZXZpY2VBZ2cu
aAkocmV2aXNpb24gNDY2OTUwKQorKysgZGV2aWNlL2FnZy9LUmVuZGVyaW5nRGV2aWNlQWdnLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDcgQEAKIAogICAgIHZpcnR1YWwgS0NhbnZhc0l0
ZW0gKmNyZWF0ZUl0ZW0oS0NhbnZhcyAqY2FudmFzLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlLCBL
Q2FudmFzVXNlckRhdGEgcGF0aCkgY29uc3Q7CiAgICAgdmlydHVhbCBLQ2FudmFzQ29udGFpbmVy
ICpjcmVhdGVDb250YWluZXIoS0NhbnZhcyAqY2FudmFzLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxl
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEtDYW52YXNUZXh0SXRlbSAqY3JlYXRlVGV4dEl0ZW0oS0Nh
bnZhcyAqY2FudmFzLCBjb25zdCBRU3RyaW5nICZzdHIsIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUp
IGNvbnN0OwogCiAgICAgLy8gVG9vbHMKICAgICB2aXJ0dWFsIFFSZWN0IGJib3hQYXRoKEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBib29sIGluY2x1ZGVTdHJva2UpIGNvbnN0OwpJ
bmRleDogZGV2aWNlL0tSZW5kZXJpbmdTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldmljZS9LUmVu
ZGVyaW5nU3R5bGUuaAkocmV2aXNpb24gNDY2OTUwKQorKysgZGV2aWNlL0tSZW5kZXJpbmdTdHls
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlIDxxM3ZhbHVl
bGlzdC5oPgogI2luY2x1ZGUgPHFzdHJpbmdsaXN0Lmg+CisjaW5jbHVkZSA8cWZvbnQuaD4KIAog
Ly8gRW51bWVyYXRpb25zCiB0eXBlZGVmIGVudW0KQEAgLTUzLDYgKzU0LDEzIEBACiAgICAgSVJf
T1BUSU1JWkVfUVVBTElUWSA9IDEKIH0gS0NJbWFnZVJlbmRlcmluZzsKIAordHlwZWRlZiBlbnVt
Cit7CisgICAgVEFfU1RBUlQgPSAwLAorICAgIFRBX01JRERMRSA9IDEsCisgICAgVEFfRU5EID0g
MgorfSBLQ1RleHRBbmNob3I7CisKIC8vIFNwZWNpYWwgdHlwZXMKIHR5cGVkZWYgUTNWYWx1ZUxp
c3Q8ZmxvYXQ+IEtDRGFzaEFycmF5OwogCkBAIC0xMjAsNyArMTI4LDE2IEBACiAgICAgdmlydHVh
bCB2b2lkIHNldEZpbHRlcihLQ2FudmFzRmlsdGVyICpuZXdGaWx0ZXIpIGNvbnN0OwogCiAgICAg
Ly8gVE9ETzogTGFzdCByZW1haW5pbmcgaXNzdWUgaGVyZTogdGV4dCAmIGZvbnQhCisgICAgdmly
dHVhbCBjb25zdCBRRm9udCAmZm9udCgpIGNvbnN0OwogCisgICAgdmlydHVhbCBib29sIGhhc1Vu
ZGVybGluZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNPdmVybGluZSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBoYXNTdHJpa2VUaHJvdWdoKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IEtDVGV4dEFuY2hvciBhbmNob3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgdmVydGljYWxU
ZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGx0cigpIGNvbnN0OworCiBwcml2YXRlOgog
ICAgIGNsYXNzIFByaXZhdGU7CiAgICAgUHJpdmF0ZSAqZDsKSW5kZXg6IGRldmljZS9LUmVuZGVy
aW5nUGFpbnRTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXZpY2UvS1JlbmRlcmluZ1BhaW50U2Vy
dmVyLmgJKHJldmlzaW9uIDQ2Njk1MCkKKysrIGRldmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQAogCiAgICAgLy8gQWN0dWFsIHJlbmRl
cmluZyBmdW5jdGlvbgogICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0ICpjb250ZXh0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRyYXdUZXh0KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBmbG9h
dCB4LCBmbG9hdCB5LCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBl
KSBjb25zdCB7fQogCiAgICAgdmlydHVhbCBRVGV4dFN0cmVhbSAmZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihRVGV4dFN0cmVhbSAmKSBjb25zdCA9IDA7CiBwcml2YXRlOgpJbmRleDogZGV2aWNlL0tS
ZW5kZXJpbmdGaWxsUGFpbnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2aWNlL0tSZW5kZXJpbmdG
aWxsUGFpbnRlci5jcHAJKHJldmlzaW9uIDQ2Njk1MCkKKysrIGRldmljZS9LUmVuZGVyaW5nRmls
bFBhaW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw4IEBACiAKICAgICB+UHJp
dmF0ZSgpCiAgICAgewotICAgICAgICBpZihwc2VydmVyICYmIChwc2VydmVyLT50eXBlKCkgPT0g
UFNfU09MSUQgfHwgcHNlcnZlci0+dHlwZSgpID09IFBTX0lNQUdFKSkKLSAgICAgICAgICAgIGRl
bGV0ZSBwc2VydmVyOworICAgICAgICBpZihwc2VydmVyKQorICAgICAgICAgICAgcHNlcnZlci0+
ZGVyZWYoKTsKICAgICB9CiAKICAgICBmbG9hdCBvcGFjaXR5OwpAQCAtNjIsOSArNjIsMTMgQEAK
IAogdm9pZCBLUmVuZGVyaW5nRmlsbFBhaW50ZXI6OnNldFBhaW50U2VydmVyKEtSZW5kZXJpbmdQ
YWludFNlcnZlciAqcHNlcnZlcikKIHsKLSAgICBpZihkLT5wc2VydmVyICYmIChkLT5wc2VydmVy
LT50eXBlKCkgPT0gUFNfU09MSUQgfHwgZC0+cHNlcnZlci0+dHlwZSgpID09IFBTX0lNQUdFKSkK
LSAgICAgICAgZGVsZXRlIGQtPnBzZXJ2ZXI7CisgICAgaWYoZC0+cHNlcnZlcikKKyAgICAgICAg
ZC0+cHNlcnZlci0+ZGVyZWYoKTsKKwogICAgIGQtPnBzZXJ2ZXIgPSBwc2VydmVyOworCisgICAg
aWYoZC0+cHNlcnZlcikKKyAgICAgICAgZC0+cHNlcnZlci0+cmVmKCk7CiB9CiAKIEtDV2luZFJ1
bGUgS1JlbmRlcmluZ0ZpbGxQYWludGVyOjpmaWxsUnVsZSgpIGNvbnN0CkBAIC05Myw0ICs5Nywx
MCBAQAogICAgICAgICBkLT5wc2VydmVyLT5kcmF3KGNvbnRleHQsIEFQUExZX1RPX0ZJTEwpOwog
fQogCit2b2lkIEtSZW5kZXJpbmdGaWxsUGFpbnRlcjo6ZHJhd1RleHQoS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHQgKmNvbnRleHQsIGZsb2F0IHgsIGZsb2F0IHksIGNvbnN0IFFTdHJpbmcgJnRleHQp
IGNvbnN0Cit7CisgICAgaWYoZC0+cHNlcnZlcikKKyAgICAgICAgZC0+cHNlcnZlci0+ZHJhd1Rl
eHQoY29udGV4dCwgeCwgeSwgdGV4dCwgQVBQTFlfVE9fRklMTCk7Cit9CisKIC8vIHZpbTp0cz00
Om5vZXQKSW5kZXg6IGRldmljZS9LUmVuZGVyaW5nRmlsbFBhaW50ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBkZXZpY2UvS1JlbmRlcmluZ0ZpbGxQYWludGVyLmgJKHJldmlzaW9uIDQ2Njk1MCkKKysrIGRl
dmljZS9LUmVuZGVyaW5nRmlsbFBhaW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUs
NyBAQAogCiAgICAgLy8gQWN0dWFsIHJlbmRlcmluZyBmdW5jdGlvbgogICAgIHZpcnR1YWwgdm9p
ZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0KSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd1RleHQoS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQsIGZsb2F0
IHgsIGZsb2F0IHksIGNvbnN0IFFTdHJpbmcgJnRleHQpIGNvbnN0OwogCiBwcml2YXRlOgogICAg
IGNsYXNzIFByaXZhdGU7CkluZGV4OiBLQ2FudmFzUmVzb3VyY2VzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBLQ2FudmFzUmVzb3VyY2VzLmNwcAkocmV2aXNpb24gNDY2OTUwKQorKysgS0NhbnZhc1Jlc291
cmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDE2IEBACiB7CiB9CiAKK3ZvaWQg
S0NhbnZhc1Jlc291cmNlOjpyZWYoKQoreworICAgIF9LU2hhcmVkX3JlZigpOworfQorCit2b2lk
IEtDYW52YXNSZXNvdXJjZTo6ZGVyZWYoKQoreworICAgIF9LU2hhcmVkX3VucmVmKCk7Cit9CisK
IHZvaWQgS0NhbnZhc1Jlc291cmNlOjphZGRDbGllbnQoS0NhbnZhc0l0ZW0gKml0ZW0pCiB7CiAg
ICAgaWYobV9jbGllbnRzLmZpbmQoaXRlbSkgIT0gbV9jbGllbnRzLmVuZCgpKQpJbmRleDogS0Nh
bnZhc0NyZWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBLQ2FudmFzQ3JlYXRvci5oCShyZXZpc2lvbiA0
NjY5NTApCisrKyBLQ2FudmFzQ3JlYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiBjbGFzcyBLQ2FudmFzSXRlbTsKIGNsYXNzIEtSZW5kZXJpbmdTdHlsZTsKIGNsYXNzIEtD
YW52YXNDb250YWluZXI7CitjbGFzcyBLQ2FudmFzVGV4dEl0ZW07CiBjbGFzcyBLQ2FudmFzQ3Jl
YXRvcgogewogcHVibGljOgpAQCAtNTAsNiArNTEsNyBAQAogCiAgICAgS0NhbnZhc0l0ZW0gKmNy
ZWF0ZVBhdGhJdGVtKEtDYW52YXMgKmNhbnZhcywgS1JlbmRlcmluZ1N0eWxlICpzdHlsZSwgY29u
c3QgS0NQYXRoRGF0YUxpc3QgJnBhdGhEYXRhKSBjb25zdDsKICAgICBLQ2FudmFzQ29udGFpbmVy
ICpjcmVhdGVDb250YWluZXIoS0NhbnZhcyAqY2FudmFzLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxl
KSBjb25zdDsKKyAgICBLQ2FudmFzVGV4dEl0ZW0gKmNyZWF0ZVRleHRJdGVtKEtDYW52YXMgKmNh
bnZhcywgY29uc3QgUVN0cmluZyAmc3RyLCBLUmVuZGVyaW5nU3R5bGUgKnN0eWxlKSBjb25zdDsK
IAogcHJpdmF0ZToKICAgICBzdGF0aWMgS0NhbnZhc0NyZWF0b3IgKnNfY3JlYXRvcjsKSW5kZXg6
IEtDYW52YXNSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gS0NhbnZhc1JlZ2lzdHJ5LmNwcAko
cmV2aXNpb24gNDY2OTUwKQorKysgS0NhbnZhc1JlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjMsMjAgKzIzLDI3IEBACiAjaW5jbHVkZSAiS0NhbnZhc0l0ZW0uaCIKICNpbmNsdWRlICJL
Q2FudmFzUmVnaXN0cnkuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaCIKKwog
I2luY2x1ZGUgPHF0ZXh0c3RyZWFtLmg+CiAKIEtDYW52YXNSZWdpc3RyeTo6S0NhbnZhc1JlZ2lz
dHJ5KCkKIHsKLSAgICBtX3BzZXJ2ZXJzLnNldEF1dG9EZWxldGUodHJ1ZSk7Ci0gICAgbV9yZXNv
dXJjZXMuc2V0QXV0b0RlbGV0ZSh0cnVlKTsKIH0KIAogS0NhbnZhc1JlZ2lzdHJ5Ojp+S0NhbnZh
c1JlZ2lzdHJ5KCkKIHsKKyAgICBRM0RpY3RJdGVyYXRvcjxLQ2FudmFzUmVzb3VyY2U+IGl0ID0g
bV9yZXNvdXJjZXM7CisgICAgZm9yKDtpdC5jdXJyZW50KCk7KytpdCkKKyAgICAgICAgaXQuY3Vy
cmVudCgpLT5kZXJlZigpOworICAgIFEzRGljdEl0ZXJhdG9yPEtSZW5kZXJpbmdQYWludFNlcnZl
cj4gaXQyID0gbV9wc2VydmVyczsKKyAgICBmb3IoO2l0Mi5jdXJyZW50KCk7KytpdCkKKyAgICAg
ICAgaXQyLmN1cnJlbnQoKS0+ZGVyZWYoKTsKIH0KIAogdm9pZCBLQ2FudmFzUmVnaXN0cnk6OmFk
ZFBhaW50U2VydmVyQnlJZChjb25zdCBRU3RyaW5nICZpZCwgS1JlbmRlcmluZ1BhaW50U2VydmVy
ICpwc2VydmVyKQogeworICAgIFFfQVNTRVJUKHBzZXJ2ZXIgIT0gMCk7CisgICAgcHNlcnZlci0+
cmVmKCk7CiAgICAgbV9wc2VydmVycy5pbnNlcnQoaWQsIHBzZXJ2ZXIpOwogICAgIHBzZXJ2ZXIt
PnNldElkSW5SZWdpc3RyeShpZCk7CiB9CkBAIC00OCw2ICs1NSw4IEBACiAKIHZvaWQgS0NhbnZh
c1JlZ2lzdHJ5OjphZGRSZXNvdXJjZUJ5SWQoY29uc3QgUVN0cmluZyAmaWQsIEtDYW52YXNSZXNv
dXJjZSAqcHNlcnZlcikKIHsKKyAgICBRX0FTU0VSVChwc2VydmVyICE9IDApOworICAgIHBzZXJ2
ZXItPnJlZigpOwogICAgIG1fcmVzb3VyY2VzLmluc2VydChpZCwgcHNlcnZlcik7CiAgICAgcHNl
cnZlci0+c2V0SWRJblJlZ2lzdHJ5KGlkKTsKIH0KSW5kZXg6IEtDYW52YXNUZXh0SXRlbS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEtDYW52YXNUZXh0SXRlbS5oCShyZXZpc2lvbiAwKQorKysgS0NhbnZhc1Rl
eHRJdGVtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAg
ICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorCisgICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAg
ICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisKKyNpZm5kZWYgS0NhbnZhc1RleHRJ
dGVtX0gKKyNkZWZpbmUgS0NhbnZhc1RleHRJdGVtX0gKKworI2luY2x1ZGUgPGtjYW52YXMvS0Nh
bnZhc0l0ZW0uaD4KKworY2xhc3MgS0NhbnZhczsKK2NsYXNzIEtSZW5kZXJpbmdTdHlsZTsKK2Ns
YXNzIEtDYW52YXNUZXh0SXRlbSA6IHB1YmxpYyBLQ2FudmFzSXRlbQoreworcHVibGljOgorICAg
IEtDYW52YXNUZXh0SXRlbShLQ2FudmFzICpjYW52YXMsIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUp
OworICAgIEtDYW52YXNUZXh0SXRlbShLQ2FudmFzICpjYW52YXMsIGNvbnN0IFFTdHJpbmcgJnN0
ciwgS1JlbmRlcmluZ1N0eWxlICpzdHlsZSk7CisgICAgdmlydHVhbCB+S0NhbnZhc1RleHRJdGVt
KCk7CisKKyAgICAvLyAnS0NhbnZhc1RleHRJdGVtJyBmdW5jdGlvbnMKKyAgICBRU3RyaW5nIHRl
eHQodW5zaWduZWQgaW50IGluZGV4KSBjb25zdDsKKyAgICBib29sIGlzQWJzb2x1dGUodW5zaWdu
ZWQgaW50IGluZGV4KSBjb25zdDsKKyAgICBmbG9hdCB4KHVuc2lnbmVkIGludCBpbmRleCkgY29u
c3Q7CisgICAgZmxvYXQgeSh1bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0OworICAgIGZsb2F0IGR4
KHVuc2lnbmVkIGludCBpbmRleCkgY29uc3Q7CisgICAgZmxvYXQgZHkodW5zaWduZWQgaW50IGlu
ZGV4KSBjb25zdDsKKyAgICBLUmVuZGVyaW5nU3R5bGUgKl9zdHlsZSh1bnNpZ25lZCBpbnQgaW5k
ZXgpIGNvbnN0OworICAgIHVuc2lnbmVkIGludCBjaHVua0NvdW50KCkgY29uc3Q7CisKKyAgICAv
LyAnS0NhbnZhc0l0ZW0nIGZ1bmN0aW9ucworICAgIHZpcnR1YWwgYm9vbCBmaWxsQ29udGFpbnMo
Y29uc3QgUVBvaW50ICZwKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc3Ryb2tlQ29udGFpbnMo
Y29uc3QgUVBvaW50ICZwKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3KGNvbnN0IFFS
ZWN0ICZyZWN0KSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCkgY29uc3Q7
CisgICAgdmlydHVhbCBRUmVjdCBiYm94KGJvb2wgaW5jbHVkZVN0cm9rZSA9IHRydWUpIGNvbnN0
OworCisgICAgdm9pZCBhZGRUZXh0Q2h1bmsoY29uc3QgUVBvaW50RiAmcCwgY29uc3QgUVBvaW50
RiAmb2Zmc2V0LCBjb25zdCBRU3RyaW5nICZzdHIsIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUpOwor
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBLQ2FudmFzSXRlbTsKKyAgICBmcmllbmQgY2xh
c3MgS0NhbnZhczsKKworICAgIHZvaWQgY29sbGlzaW9ucyhjb25zdCBRUG9pbnQgJnAsIEtDYW52
YXNJdGVtTGlzdCAmaGl0cykgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgUHJpdmF0ZTsK
KyAgICBQcml2YXRlICpkOworfTsKKworI2VuZGlmCisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6
IEtDYW52YXNSZXNvdXJjZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBLQ2FudmFzUmVzb3VyY2VzLmgJKHJl
dmlzaW9uIDQ2Njk1MCkKKysrIEtDYW52YXNSZXNvdXJjZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsOCBAQAogI2luY2x1ZGUgPHFzdHJpbmcuaD4KICNpbmNsdWRlIDxxM3ZhbHVlbGlz
dC5oPgogCisjaW5jbHVkZSA8a3NoYXJlZHB0ci5oPgorCiAjaW5jbHVkZSA8a2NhbnZhcy9LQ2Fu
dmFzSXRlbS5oPgogI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc1BhdGguaD4KICNpbmNsdWRlIDxr
Y2FudmFzL0tDYW52YXNSZXNvdXJjZUxpc3RlbmVyLmg+CkBAIC00NCwxMiArNDYsMTUgQEAKIAog
Y2xhc3MgS0NhbnZhc01hdHJpeDsKIAotY2xhc3MgS0NhbnZhc1Jlc291cmNlCitjbGFzcyBLQ2Fu
dmFzUmVzb3VyY2UgOiBwdWJsaWMgS1NoYXJlZAogewogcHVibGljOgogICAgIEtDYW52YXNSZXNv
dXJjZSgpOwogICAgIHZpcnR1YWwgfktDYW52YXNSZXNvdXJjZSgpOwogCisgICAgdm9pZCByZWYo
KTsKKyAgICB2b2lkIGRlcmVmKCk7CisKICAgICB2b2lkIGludmFsaWRhdGUoKTsKICAgICB2b2lk
IGFkZENsaWVudChLQ2FudmFzSXRlbSAqaXRlbSk7CiAKSW5kZXg6IE1ha2VmaWxlLmFtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIE1ha2VmaWxlLmFtCShyZXZpc2lvbiA0NjY5NTApCisrKyBNYWtlZmlsZS5hbQko
d29ya2luZyBjb3B5KQpAQCAtOSw3ICs5LDcgQEAKIGxpYmtjYW52YXNfbGFfU09VUkNFUyA9IEtD
YW52YXNJdGVtLmNwcCBLQ2FudmFzQ29udGFpbmVyLmNwcCBLQ2FudmFzTWF0cml4LmNwcCBcCiAJ
CQkJCQlLQ2FudmFzUmVzb3VyY2VzLmNwcCBLQ2FudmFzQ3JlYXRvci5jcHAgS0NhbnZhc0ltYWdl
QnVmZmVyLmNwcCBcCiAJCQkJCQlLQ2FudmFzUmVnaXN0cnkuY3BwIEtDYW52YXNGaWx0ZXJzLmNw
cCBLQ2FudmFzVmlldy5jcHAgS0NhbnZhcy5jcHAgXAotCQkJCQkJS0NhbnZhc1RyZWVEZWJ1Zy5j
cHAgS0NhbnZhc1BhdGguY3BwCisJCQkJCQlLQ2FudmFzVHJlZURlYnVnLmNwcCBLQ2FudmFzUGF0
aC5jcHAgS0NhbnZhc1RleHRJdGVtLmNwcAogCiBsaWJrY2FudmFzX2xhX01FVEFTT1VSQ0VTID0g
S0NhbnZhc1ZpZXcubW9jCiBsaWJrY2FudmFzX2xhX0xERkxBR1MgPSAtdmVyc2lvbi1pbmZvIDA6
MTowIC1sbSAkKGFsbF9saWJyYXJpZXMpCkBAIC0xOCw0ICsxOCw1IEBACiBteWluY2x1ZGVfSEVB
REVSUyA9IEtDYW52YXNJdGVtLmggS0NhbnZhc0NvbnRhaW5lci5oIEtDYW52YXNNYXRyaXguaCBc
CiAJCQkJCUtDYW52YXNSZXNvdXJjZXMuaCBLQ2FudmFzQ3JlYXRvci5oIEtDYW52YXNJbWFnZUJ1
ZmZlci5oIFwKIAkJCQkJS0NhbnZhc1JlZ2lzdHJ5LmggS0NhbnZhc0ZpbHRlcnMuaCBLQ2FudmFz
Vmlldy5oIEtDYW52YXMuaCBcCi0JCQkJCUtDYW52YXNUeXBlcy5oIEtDYW52YXNSZXNvdXJjZUxp
c3RlbmVyLmggS0NhbnZhc1BhdGguaCBLQ2FudmFzVHJlZURlYnVnLmgKKwkJCQkJS0NhbnZhc1R5
cGVzLmggS0NhbnZhc1Jlc291cmNlTGlzdGVuZXIuaCBLQ2FudmFzUGF0aC5oIEtDYW52YXNUcmVl
RGVidWcuaCBcCisJCQkJCUtDYW52YXNUZXh0SXRlbS5oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5510</attachid>
            <date>2006-01-06 03:24:26 -0800</date>
            <delta_ts>2006-01-07 21:26:51 -0800</delta_ts>
            <desc>Simple hack to use CSS text rendering for text.</desc>
            <filename>simple-svg-text-hack.patch.txt</filename>
            <type>text/plain</type>
            <size>2303</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IGtzdmcyL2Nzcy9zdmcuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2tzdmcyL2Nzcy9zdmcuY3NzLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAt
dSAtcCAtcjEuNCBrc3ZnMi9jc3Mvc3ZnLmNzcwotLS0ga3N2ZzIvY3NzL3N2Zy5jc3MJMTUgRGVj
IDIwMDUgMTk6Mzc6MjEgLTAwMDAJMS40CisrKyBrc3ZnMi9jc3Mvc3ZnLmNzcwk2IEphbiAyMDA2
IDExOjI0OjA3IC0wMDAwCkBAIC0zOSwzICszOSw4IEBAIHN2Zywgc3ltYm9sLCBtYXJrZXIsIHBh
dHRlcm4sIGZvcmVpZ25PYmoKIHsKICAgICBvdmVyZmxvdzogaGlkZGVuOwogfQorCit0ZXh0Cit7
CisgICAgZGlzcGxheTogYmxvY2s7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRl
eDoga3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50SW1wbC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC11IC1wIC1yMS42IGtzdmcyL3N2Zy9TVkdUZXh0RWxl
bWVudEltcGwuY3BwCi0tLSBrc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnRJbXBsLmNwcAkyMSBOb3Yg
MjAwNSAwODoyOTo0MiAtMDAwMAkxLjYKKysrIGtzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudEltcGwu
Y3BwCTYgSmFuIDIwMDYgMTE6MjQ6MDcgLTAwMDAKQEAgLTc1LDQgKzc1LDE3IEBAIFNWR01hdHJp
eEltcGwgKlNWR1RleHRFbGVtZW50SW1wbDo6Z2V0Q1QKICAgICByZXR1cm4gU1ZHTG9jYXRhYmxl
SW1wbDo6Z2V0U2NyZWVuQ1RNKHRoaXMpOwogfQogCitraHRtbDo6UmVuZGVyT2JqZWN0ICpTVkdU
ZXh0RWxlbWVudEltcGw6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwga2h0bWw6
OlJlbmRlclN0eWxlICpzdHlsZSkKK3sKKyAgICBFbGVtZW50SW1wbDo6Y3JlYXRlUmVuZGVyZXIo
YXJlbmEsIHN0eWxlKTsKK30KKworYm9vbCBTVkdUZXh0RWxlbWVudEltcGw6OmNoaWxkU2hvdWxk
Q3JlYXRlUmVuZGVyZXIoRE9NOjpOb2RlSW1wbCAqY2hpbGQpIGNvbnN0Cit7CisgICAgaWYgKGNo
aWxkLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBTVkdU
ZXh0UG9zaXRpb25pbmdFbGVtZW50SW1wbDo6Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihjaGls
ZCk7Cit9CisKKwogLy8gdmltOnRzPTQ6bm9ldApJbmRleDoga3N2ZzIvc3ZnL1NWR1RleHRFbGVt
ZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2tzdmcyL3N2
Zy9TVkdUZXh0RWxlbWVudEltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXUg
LXAgLXIxLjUga3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50SW1wbC5oCi0tLSBrc3ZnMi9zdmcvU1ZH
VGV4dEVsZW1lbnRJbXBsLmgJMjEgTm92IDIwMDUgMDg6Mjk6NDIgLTAwMDAJMS41CisrKyBrc3Zn
Mi9zdmcvU1ZHVGV4dEVsZW1lbnRJbXBsLmgJNiBKYW4gMjAwNiAxMToyNDowNyAtMDAwMApAQCAt
NDYsNiArNDYsMTAgQEAgbmFtZXNwYWNlIEtTVkcKICAgICAgICAgdmlydHVhbCBTVkdNYXRyaXhJ
bXBsICpnZXRTY3JlZW5DVE0oKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBTVkdNYXRyaXhJbXBs
ICpnZXRUcmFuc2Zvcm1Ub0VsZW1lbnQoU1ZHRWxlbWVudEltcGwgKmVsZW1lbnQpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KIAorICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChraHRt
bDo6UmVuZGVyU3R5bGUgKikgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICB2aXJ0dWFsIGtodG1s
OjpSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwga2h0bWw6
OlJlbmRlclN0eWxlICpzdHlsZSk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjaGlsZFNob3VsZENy
ZWF0ZVJlbmRlcmVyKERPTTo6Tm9kZUltcGwgKikgY29uc3Q7CisKICAgICAgICAgdmlydHVhbCBT
VkdBbmltYXRlZFRyYW5zZm9ybUxpc3RJbXBsICp0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiAw
OyB9CiAgICAgICAgIHZpcnR1YWwgU1ZHTWF0cml4SW1wbCAqbG9jYWxNYXRyaXgoKSBjb25zdCB7
IHJldHVybiAwOyB9CiAgICAgICAgIAo=
</data>
<flag name="review"
          id="1200"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5535</attachid>
            <date>2006-01-07 17:34:23 -0800</date>
            <delta_ts>2006-01-07 21:26:32 -0800</delta_ts>
            <desc>a patch that provides basic text support using CSS text rendering</desc>
            <filename>svg-text.patch.txt</filename>
            <type>text/plain</type>
            <size>14782</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9D
aGFuZ2VMb2csdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTcKZGlmZiAtcCAtdSAtcjEuOTcgQ2hh
bmdlTG9nCi0tLSBDaGFuZ2VMb2cJNyBKYW4gMjAwNiAxMDozMzoyNSAtMDAwMAkxLjk3CisrKyBD
aGFuZ2VMb2cJOCBKYW4gMjAwNiAwMTozNDo0NiAtMDAwMApAQCAtMSwzICsxLDM1IEBACisyMDA2
LTAxLTA3ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwktIGFkZGVkIGJhc2ljIFNWRyB0ZXh0IHN1cHBv
cnQgdXNpbmcgQ1NTLWJhc2VkIHJlbmRlcmluZworCWh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2lu
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4MworCQorICAgICAgICBBZmZlY3RzIG1hbnkgdGVzdCBy
ZXN1bHRzIGluIExheW91dFRlc3RzL3N2Zy4KKworICAgICAgICAqIGtjYW52YXMvUmVuZGVyU1ZH
VGV4dC5jcHA6IEFkZGVkLiBTaW1wbGUgc3ViY2xhc3Mgb2YgUmVuZGVyQmxvY2sgZm9yIFNWRyB0
ZXh0LgorICAgICAgICAoUmVuZGVyU1ZHVGV4dDo6UmVuZGVyU1ZHVGV4dCk6IGp1c3QgY2FsbCBz
dXBlcmNsYXNzIGNvbnN0cnVjdG9yLgorICAgICAgICAoUmVuZGVyU1ZHVGV4dDo6dHJhbnNsYXRl
VG9wVG9CYXNlbGluZSk6IGhlbHBlciB0byBhY2NvdW50IGZvciB0aGUgZmFjdCB0aGF0CisJeSBj
b29yZGluYXRlcyBmb3IgPHRleHQ+IGdpdmUgdGhlIGJhc2VsaW5lIHBvc2l0aW9uLCBidXQgdGhl
IHJlbmRlciB0cmVlIGV4cGVjdHMKKwljdXJyZW50IHkgdG8gYmUgdGhlIHRvcC4KKyAgICAgICAg
KFJlbmRlclNWR1RleHQ6OnRyYW5zbGF0ZUZvckF0dHJpYnV0ZXMpOiB0cmFuc2xhdGUgdG8gYWNj
b3VudCBmb3IgeCBhbmQgeQorCWF0dHJpYnV0ZXMuCisgICAgICAgIChSZW5kZXJTVkdUZXh0Ojpw
YWludCk6IEFwcGx5IGFwcHJvcHJpYXRlIENUTSB0cmFuc2Zvcm0gYW5kIHRoZW4ganVzdCBsZXQK
KwlSZW5kZXJCbG9jayBwYWludC4KKyAgICAgICAgKiBrY2FudmFzL1JlbmRlclNWR1RleHQuaDog
QWRkZWQuCisgICAgICAgIChSZW5kZXJTVkdUZXh0OjpyZW5kZXJOYW1lKToKKyAgICAgICAgKiBr
Y2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbToKKyAgICAgICAg
KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6Ojpuc0dyYXBoaWNzQ29udGV4dCk6IFdlIHdh
bnQgdGhlIGNvbnRleHQgZmxpcHBlZC4KKyAgICAgICAgKiBraHRtbC9yZW5kZXJpbmcvcmVuZGVy
X2NhbnZhc2ltYWdlLmg6CisgICAgICAgICoga3N2ZzIvY3NzL3N2Zy5jc3M6IEdpdmUgPHN2Zzp0
ZXh0PiBkaXNwbGF5OiBibG9jaworICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudElt
cGwuY3BwOgorICAgICAgICAoU1ZHVGV4dEVsZW1lbnRJbXBsOjpjcmVhdGVSZW5kZXJlcik6IENy
ZWF0ZSBhIFJlbmRlclNWR1RleHQgcmVuZGVyZXIuCisgICAgICAgIChTVkdUZXh0RWxlbWVudElt
cGw6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIpOiBMZXQgY2hpbGQgdGV4dCBub2RlcyBtYWtl
CisJcmVuZGVyZXJzLCBidXQgbm90aGluZyBlbHNlIChmb3Igbm93KS4KKyAgICAgICAgKiBrc3Zn
Mi9zdmcvU1ZHVGV4dEVsZW1lbnRJbXBsLmg6CisgICAgICAgIChLU1ZHOjpTVkdUZXh0RWxlbWVu
dEltcGw6OnJlbmRlcmVySXNOZWVkZWQpOiBJdCBzdXJlIGlzISA6LSkKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZCBuZXcgZmlsZXMuCisKIDIwMDYtMDEt
MDcgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQG1hYy5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTWFjaWVqLgpJbmRleDogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NQpkaWZmIC1wIC11IC1yMS42
NSBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKLS0tIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagk2IEphbiAyMDA2IDA5OjA5OjU4IC0wMDAwCTEuNjUKKysrIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagk4IEphbiAyMDA2IDAxOjM1OjE1IC0wMDAwCkBA
IC02OSw2ICs2OSw4IEBACiAJCTY1NEQ4N0I4MDgzMTk3M0IwMDgyRENBMSAvKiBlZGl0X2NvbW1h
bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NEQ4
N0I2MDgzMTk3M0IwMDgyRENBMSAvKiBlZGl0X2NvbW1hbmQuaCAqLzsgfTsKIAkJNjU1MkU3QUEw
OTZBQTExQjAwMDZGMjQ4IC8qIFdlYkNvcmVGcmFtZU5hbWVzcGFjZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NTJFN0E4MDk2QUExMUIwMDA2RjI0
OCAvKiBXZWJDb3JlRnJhbWVOYW1lc3BhY2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjU1MkU3QUIwOTZBQTExQjAwMDZGMjQ4IC8qIFdlYkNv
cmVGcmFtZU5hbWVzcGFjZXMubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDY1NTJFN0E5MDk2QUExMUIwMDA2RjI0OCAvKiBXZWJDb3JlRnJhbWVOYW1lc3Bh
Y2VzLm0gKi87IH07CisJCTY1NzQzQjUyMDk3MDc2RjgwMDFFN0NFRiAvKiBSZW5kZXJTVkdUZXh0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NzQz
QjUwMDk3MDc2RjgwMDFFN0NFRiAvKiBSZW5kZXJTVkdUZXh0LmNwcCAqLzsgfTsKKwkJNjU3NDNC
NTMwOTcwNzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1RleHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NzQzQjUxMDk3MDc2RjgwMDFFN0NFRiAvKiBS
ZW5kZXJTVkdUZXh0LmggKi87IH07CiAJCTY1QUM3OUExMDgzMUVENkQwMDkzODVDRSAvKiBhcHBl
bmRfbm9kZV9jb21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDY1QUM3OTlGMDgzMUVENkQwMDkzODVDRSAvKiBhcHBlbmRfbm9kZV9jb21tYW5k
LmNwcCAqLzsgfTsKIAkJNjVBQzc5QTIwODMxRUQ2RDAwOTM4NUNFIC8qIGFwcGVuZF9ub2RlX2Nv
bW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1
QUM3OUEwMDgzMUVENkQwMDkzODVDRSAvKiBhcHBlbmRfbm9kZV9jb21tYW5kLmggKi87IH07CiAJ
CTY1QUM3OUE5MDgzMUYwMDYwMDkzODVDRSAvKiBhcHBseV9zdHlsZV9jb21tYW5kLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1QUM3OUE3MDgzMUYw
MDYwMDkzODVDRSAvKiBhcHBseV9zdHlsZV9jb21tYW5kLmNwcCAqLzsgfTsKQEAgLTE3MDcsNiAr
MTcwOSw4IEBACiAJCTY1NTJFN0E4MDk2QUExMUIwMDA2RjI0OCAvKiBXZWJDb3JlRnJhbWVOYW1l
c3BhY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlRnJhbWVO
YW1lc3BhY2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NTJFN0E5MDk2QUEx
MUIwMDA2RjI0OCAvKiBXZWJDb3JlRnJhbWVOYW1lc3BhY2VzLm0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLm9iamM7IHBhdGggPSBXZWJDb3JlRnJhbWVOYW1lc3BhY2VzLm07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTY1NzMyQjY4MDU0RUY0ODMwMDdCNDJGOCAvKiBLV1FLUGFydHNQ
YXJ0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gS1dRS1BhcnRzUGFydC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lk
dGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCTY1NzQzQjUwMDk3MDc2RjgwMDFFN0NFRiAvKiBS
ZW5kZXJTVkdUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJTVkdUZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjU3NDNCNTEw
OTcwNzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1RleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbmRlclNWR1RleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNjU5MTJCMEQwNTg2OTIxMDAwMTIzQTY5IC8qIHhtbHNlcmlhbGl6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0geG1sc2VyaWFs
aXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMg
PSAwOyB9OwogCQk2NTkxMkIwRTA1ODY5MjEwMDAxMjNBNjkgLyogeG1sc2VyaWFsaXplci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB4bWxzZXJp
YWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMg
PSAwOyB9OwogCQk2NUE2NDBGMDA1MzNCQjFGMDA4NUU3NzcgLyogS1dRRXhjZXB0aW9ucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLV1FFeGNl
cHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMg
PSAwOyB9OwpAQCAtMzM2Miw2ICszMzY2LDggQEAKIAkJQThDMEZCNTEwODk3MDFGNzAwQkE1MTE0
IC8qIGtjYW52YXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAor
CQkJCTY1NzQzQjUwMDk3MDc2RjgwMDFFN0NFRiAvKiBSZW5kZXJTVkdUZXh0LmNwcCAqLywKKwkJ
CQk2NTc0M0I1MTA5NzA3NkY4MDAxRTdDRUYgLyogUmVuZGVyU1ZHVGV4dC5oICovLAogCQkJCUE4
QzBGQjUzMDg5NzAxRjcwMEJBNTExNCAvKiBkZXZpY2UgKi8sCiAJCQkJQThDMEZCN0EwODk3MDFG
ODAwQkE1MTE0IC8qIEtDYW52YXNDb250YWluZXIuY3BwICovLAogCQkJCUE4QzBGQjdCMDg5NzAx
RjgwMEJBNTExNCAvKiBLQ2FudmFzQ29udGFpbmVyLmggKi8sCkBAIC00NzQwLDYgKzQ3NDYsNyBA
QAogCQkJCTQ3NTY1MzY5MDk2NTJDNUQwMEJEOUYyOSAvKiBLV1FTaXplRi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTgxNjU1RDQwOTZCQkVBQzAwNjAxMDU4IC8qIEtDYW52YXNNYXNrZXJRdWFydHou
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTY1NUU1MDk2QkMxMzkwMDYwMTA1OCAvKiBTVkdNYXNr
RWxlbWVudEltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJCTY1NzQzQjUzMDk3MDc2RjgwMDFFN0NF
RiAvKiBSZW5kZXJTVkdUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTY1ODQsNiArNjU5MSw3IEBA
CiAJCQkJNDc1NjUzNkEwOTY1MkM1RDAwQkQ5RjI5IC8qIEtXUVNpemVGLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTgxNjU1RDUwOTZCQkVBQzAwNjAxMDU4IC8qIEtDYW52YXNNYXNrZXJRdWFydHou
bW0gaW4gU291cmNlcyAqLywKIAkJCQlBODE2NTVFNDA5NkJDMTM5MDA2MDEwNTggLyogU1ZHTWFz
a0VsZW1lbnRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTY1NzQzQjUyMDk3MDc2RjgwMDFF
N0NFRiAvKiBSZW5kZXJTVkdUZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDoga2NhbnZhcy9S
ZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBrY2FudmFzL1JlbmRlclNWR1Rl
eHQuY3BwCmRpZmYgLU4ga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmNwcAotLS0ga2NhbnZhcy9SZW5k
ZXJTVkdUZXh0LmNwcAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrY2FudmFzL1JlbmRl
clNWR1RleHQuY3BwCTggSmFuIDIwMDYgMDE6MzU6MTUgLTAwMDAKQEAgLTAsMCArMSw3MyBAQAor
LyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdC4KKyAqCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgorI2luY2x1ZGUgIlNWR1RleHRFbGVtZW50SW1w
bC5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoTGlzdEltcGwuaCIKKworI2ltcG9ydCAi
S1JlbmRlcmluZ0RldmljZS5oIgorI2ltcG9ydCAiS0NhbnZhc01hdHJpeC5oIgorCitSZW5kZXJT
VkdUZXh0OjpSZW5kZXJTVkdUZXh0KEtTVkc6OlNWR1RleHRFbGVtZW50SW1wbCAqbm9kZSkgCisg
ICAgOiBSZW5kZXJCbG9jayhub2RlKQoreworfQorCit2b2lkIFJlbmRlclNWR1RleHQ6OnRyYW5z
bGF0ZVRvcFRvQmFzZWxpbmUoKQoreworICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250
ZXh0ID0gUVBhaW50ZXI6OnJlbmRlcmluZ0RldmljZSgpLT5jdXJyZW50Q29udGV4dCgpOworCisg
ICAgaW50IG9mZnNldCA9IGJhc2VsaW5lUG9zaXRpb24odHJ1ZSwgdHJ1ZSk7CisgICAgY29udGV4
dC0+Y29uY2F0Q1RNKEtDYW52YXNNYXRyaXgoKS50cmFuc2xhdGUoMCwgLW9mZnNldCkpOworfQor
Cit2b2lkIFJlbmRlclNWR1RleHQ6OnRyYW5zbGF0ZUZvckF0dHJpYnV0ZXMoKQoreworICAgIEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gUVBhaW50ZXI6OnJlbmRlcmluZ0Rldmlj
ZSgpLT5jdXJyZW50Q29udGV4dCgpOworCisgICAgS1NWRzo6U1ZHVGV4dEVsZW1lbnRJbXBsICp0
ZXh0ID0gc3RhdGljX2Nhc3Q8S1NWRzo6U1ZHVGV4dEVsZW1lbnRJbXBsICo+KGVsZW1lbnQoKSk7
CisKKyAgICBmbG9hdCB4T2Zmc2V0ID0gdGV4dC0+eCgpLT5iYXNlVmFsKCktPmdldEZpcnN0KCkg
PyB0ZXh0LT54KCktPmJhc2VWYWwoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSA6IDA7CisgICAgZmxv
YXQgeU9mZnNldCA9IHRleHQtPnkoKS0+YmFzZVZhbCgpLT5nZXRGaXJzdCgpID8gdGV4dC0+eSgp
LT5iYXNlVmFsKCktPmdldEZpcnN0KCktPnZhbHVlKCkgOiAwOworCisgICAgY29udGV4dC0+Y29u
Y2F0Q1RNKEtDYW52YXNNYXRyaXgoKS50cmFuc2xhdGUoeE9mZnNldCwgeU9mZnNldCkpOworfQor
Cit2b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50KFBhaW50SW5mbyAmcGFpbnRJbmZvLCBpbnQgcGFy
ZW50WCwgaW50IHBhcmVudFkpCit7CisgICAgaWYgKHBhaW50SW5mby5wLT5wYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHBhaW50SW5mby5wLT5zYXZlKCk7CisKKyAg
ICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IFFQYWludGVyOjpyZW5kZXJpbmdE
ZXZpY2UoKS0+Y3VycmVudENvbnRleHQoKTsKKworICAgIGNvbnRleHQtPmNvbmNhdENUTShLQ2Fu
dmFzTWF0cml4KCkudHJhbnNsYXRlKHBhcmVudFgsIHBhcmVudFkpKTsKKyAgICB0cmFuc2xhdGVG
b3JBdHRyaWJ1dGVzKCk7CisgICAgdHJhbnNsYXRlVG9wVG9CYXNlbGluZSgpOworICAgIAorICAg
IFJlbmRlckJsb2NrOjpwYWludChwYWludEluZm8sIDAsIDApOworCisgICAgcGFpbnRJbmZvLnAt
PnJlc3RvcmUoKTsKK30KSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5oCmRpZmYgLU4ga2NhbnZhcy9SZW5kZXJT
VkdUZXh0LmgKLS0tIGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5oCTEgSmFuIDE5NzAgMDA6MDA6MDAg
LTAwMDAKKysrIGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5oCTggSmFuIDIwMDYgMDE6MzU6MTUgLTAw
MDAKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
cHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug
LSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKwor
I2lmbmRlZiBSZW5kZXJTVkdUZXh0X0gKKyNkZWZpbmUgUmVuZGVyU1ZHVGV4dF9ICisKKyNpbmNs
dWRlICJraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Jsb2NrLmgiCisKK25hbWVzcGFjZSBLU1ZHIHsK
KyAgICBjbGFzcyBTVkdUZXh0RWxlbWVudEltcGw7Cit9CisKK2NsYXNzIFJlbmRlclNWR1RleHQg
OiBwdWJsaWMga2h0bWw6OlJlbmRlckJsb2NrCit7CitwdWJsaWM6CisgICAgUmVuZGVyU1ZHVGV4
dChLU1ZHOjpTVkdUZXh0RWxlbWVudEltcGwgKm5vZGUpOworCisgICAgY29uc3QgY2hhciAqcmVu
ZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdUZXh0IjsgfQorICAgIHZvaWQgcGFp
bnQoUGFpbnRJbmZvICZwYWludEluZm8sIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSk7CisKKyBw
cml2YXRlOgorICAgIHZvaWQgdHJhbnNsYXRlVG9wVG9CYXNlbGluZSgpOworICAgIHZvaWQgdHJh
bnNsYXRlRm9yQXR0cmlidXRlcygpOworfTsKKworI2VuZGlmIFJlbmRlclNWR1RleHRfSApJbmRl
eDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHoubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tS
ZW5kZXJpbmdEZXZpY2VRdWFydHoubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEKZGlmZiAt
cCAtdSAtcjEuMTEga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHou
bW0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tCTYg
SmFuIDIwMDYgMDk6MTA6MDEgLTAwMDAJMS4xMQorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tS
ZW5kZXJpbmdEZXZpY2VRdWFydHoubW0JOCBKYW4gMjAwNiAwMTozNToxNSAtMDAwMApAQCAtODIs
NyArODIsNyBAQCBRUmVjdCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6bWFwCiBOU0dy
YXBoaWNzQ29udGV4dCAqS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHo6Om5zR3JhcGhpY3ND
b250ZXh0KCkKIHsKICAgICBpZiAoIW1fbnNHcmFwaGljc0NvbnRleHQgJiYgbV9jZ0NvbnRleHQp
Ci0gICAgICAgIG1fbnNHcmFwaGljc0NvbnRleHQgPSBbW05TR3JhcGhpY3NDb250ZXh0IGdyYXBo
aWNzQ29udGV4dFdpdGhHcmFwaGljc1BvcnQ6bV9jZ0NvbnRleHQgZmxpcHBlZDpOT10gcmV0YWlu
XTsKKyAgICAgICAgbV9uc0dyYXBoaWNzQ29udGV4dCA9IFtbTlNHcmFwaGljc0NvbnRleHQgZ3Jh
cGhpY3NDb250ZXh0V2l0aEdyYXBoaWNzUG9ydDptX2NnQ29udGV4dCBmbGlwcGVkOllFU10gcmV0
YWluXTsKICAgICByZXR1cm4gbV9uc0dyYXBoaWNzQ29udGV4dDsKIH0KIApJbmRleDoga2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1hZ2UuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXAgLXUgLXIxLjQga2h0bWwvcmVuZGVyaW5nL3JlbmRl
cl9jYW52YXNpbWFnZS5oCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdlLmgJ
OSBKdWwgMjAwNSAyMDoxOToxNyAtMDAwMAkxLjQKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJf
Y2FudmFzaW1hZ2UuaAk4IEphbiAyMDA2IDAxOjM1OjE1IC0wMDAwCkBAIC0zOCw3ICszOCw3IEBA
CiBleHRlcm4gIkMiIHsKIAogZXh0ZXJuIHZvaWQgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ry
b2tlZFBhdGgoQ0dDb250ZXh0UmVmIGMpOwotZXh0ZXJuIENHSW1hZ2VSZWYgQ0dCaXRtYXBDb250
ZXh0Q3JlYXRlSW1hZ2UoQ0dDb250ZXh0UmVmIGMpOworICAgIC8vZXh0ZXJuIENHSW1hZ2VSZWYg
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoQ0dDb250ZXh0UmVmIGMpOwogCiB9CiAKSW5kZXg6
IGtzdmcyL2Nzcy9zdmcuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2tzdmcyL2Nzcy9zdmcuY3NzLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtcCAtdSAt
cjEuNCBrc3ZnMi9jc3Mvc3ZnLmNzcwotLS0ga3N2ZzIvY3NzL3N2Zy5jc3MJMTUgRGVjIDIwMDUg
MTk6Mzc6MjEgLTAwMDAJMS40CisrKyBrc3ZnMi9jc3Mvc3ZnLmNzcwk4IEphbiAyMDA2IDAxOjM1
OjE2IC0wMDAwCkBAIC0zOSwzICszOSw4IEBAIHN2Zywgc3ltYm9sLCBtYXJrZXIsIHBhdHRlcm4s
IGZvcmVpZ25PYmoKIHsKICAgICBvdmVyZmxvdzogaGlkZGVuOwogfQorCit0ZXh0Cit7CisgICAg
ZGlzcGxheTogYmxvY2s7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDoga3N2
ZzIvc3ZnL1NWR1RleHRFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50SW1wbC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC1yMS42IGtzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudElt
cGwuY3BwCi0tLSBrc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnRJbXBsLmNwcAkyMSBOb3YgMjAwNSAw
ODoyOTo0MiAtMDAwMAkxLjYKKysrIGtzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudEltcGwuY3BwCTgg
SmFuIDIwMDYgMDE6MzU6MTYgLTAwMDAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxrZG9t
L2Nzcy9SZW5kZXJTdHlsZS5oPgogCiAjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5o
PgorI2luY2x1ZGUgPGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5oPgogCiAjaW5jbHVkZSA8cXZlY3Rv
ci5oPgogCkBAIC03NSw0ICs3NiwxNyBAQCBTVkdNYXRyaXhJbXBsICpTVkdUZXh0RWxlbWVudElt
cGw6OmdldENUCiAgICAgcmV0dXJuIFNWR0xvY2F0YWJsZUltcGw6OmdldFNjcmVlbkNUTSh0aGlz
KTsKIH0KIAora2h0bWw6OlJlbmRlck9iamVjdCAqU1ZHVGV4dEVsZW1lbnRJbXBsOjpjcmVhdGVS
ZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUpCit7
CisgICAgcmV0dXJuIG5ldyAoZ2V0RG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyU1ZH
VGV4dCh0aGlzKTsKK30KKworYm9vbCBTVkdUZXh0RWxlbWVudEltcGw6OmNoaWxkU2hvdWxkQ3Jl
YXRlUmVuZGVyZXIoRE9NOjpOb2RlSW1wbCAqY2hpbGQpIGNvbnN0Cit7CisgICAgaWYgKGNoaWxk
LT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsK
K30KKworCiAvLyB2aW06dHM9NDpub2V0CkluZGV4OiBrc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnRJ
bXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3N2ZzIvc3ZnL1NW
R1RleHRFbGVtZW50SW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcCAtdSAt
cjEuNSBrc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnRJbXBsLmgKLS0tIGtzdmcyL3N2Zy9TVkdUZXh0
RWxlbWVudEltcGwuaAkyMSBOb3YgMjAwNSAwODoyOTo0MiAtMDAwMAkxLjUKKysrIGtzdmcyL3N2
Zy9TVkdUZXh0RWxlbWVudEltcGwuaAk4IEphbiAyMDA2IDAxOjM1OjE2IC0wMDAwCkBAIC00Niw2
ICs0NiwxMCBAQCBuYW1lc3BhY2UgS1NWRwogICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeEltcGwg
KmdldFNjcmVlbkNUTSgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeEltcGwgKmdl
dFRyYW5zZm9ybVRvRWxlbWVudChTVkdFbGVtZW50SW1wbCAqZWxlbWVudCkgY29uc3QgeyByZXR1
cm4gMDsgfQogCisgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKGtodG1sOjpS
ZW5kZXJTdHlsZSAqKSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIHZpcnR1YWwga2h0bWw6OlJl
bmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBraHRtbDo6UmVu
ZGVyU3R5bGUgKnN0eWxlKTsKKyAgICAgICAgdmlydHVhbCBib29sIGNoaWxkU2hvdWxkQ3JlYXRl
UmVuZGVyZXIoRE9NOjpOb2RlSW1wbCAqKSBjb25zdDsKKwogICAgICAgICB2aXJ0dWFsIFNWR0Fu
aW1hdGVkVHJhbnNmb3JtTGlzdEltcGwgKnRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
ICAgICAgICAgdmlydHVhbCBTVkdNYXRyaXhJbXBsICpsb2NhbE1hdHJpeCgpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KICAgICAgICAgCg==
</data>
<flag name="review"
          id="1209"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5537</attachid>
            <date>2006-01-07 21:26:32 -0800</date>
            <delta_ts>2006-01-07 22:12:44 -0800</delta_ts>
            <desc>updated for many of Eric&apos;s comments</desc>
            <filename>svg-text.patch.txt</filename>
            <type>text/plain</type>
            <size>14813</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9D
aGFuZ2VMb2csdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTcKZGlmZiAtcCAtdSAtcjEuOTcgQ2hh
bmdlTG9nCi0tLSBDaGFuZ2VMb2cJNyBKYW4gMjAwNiAxMDozMzoyNSAtMDAwMAkxLjk3CisrKyBD
aGFuZ2VMb2cJOCBKYW4gMjAwNiAwNToyNToxNSAtMDAwMApAQCAtMSwzICsxLDM3IEBACisyMDA2
LTAxLTA3ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBhZGRlZCBiYXNpYyBTVkcgdGV4
dCBzdXBwb3J0IHVzaW5nIENTUy1iYXNlZCByZW5kZXJpbmcKKyAgICAgICAgaHR0cDovL2J1Z3pp
bGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD00ODgzCisgCisgICAgICAgIEFmZmVj
dHMgbWFueSB0ZXN0IHJlc3VsdHMgaW4gTGF5b3V0VGVzdHMvc3ZnLgorCisgICAgICAgICoga2Nh
bnZhcy9SZW5kZXJTVkdUZXh0LmNwcDogQWRkZWQuIFNpbXBsZSBzdWJjbGFzcyBvZiBSZW5kZXJC
bG9jayBmb3IgU1ZHIHRleHQuCisgICAgICAgIChSZW5kZXJTVkdUZXh0OjpSZW5kZXJTVkdUZXh0
KToganVzdCBjYWxsIHN1cGVyY2xhc3MgY29uc3RydWN0b3IuCisgICAgICAgIChSZW5kZXJTVkdU
ZXh0Ojp0cmFuc2xhdGVUb3BUb0Jhc2VsaW5lKTogaGVscGVyIHRvIGFjY291bnQgZm9yIHRoZSBm
YWN0IHRoYXQKKwl5IGNvb3JkaW5hdGVzIGZvciA8dGV4dD4gZ2l2ZSB0aGUgYmFzZWxpbmUgcG9z
aXRpb24sIGJ1dCB0aGUgcmVuZGVyIHRyZWUgZXhwZWN0cworCWN1cnJlbnQgeSB0byBiZSB0aGUg
dG9wLgorICAgICAgICAoUmVuZGVyU1ZHVGV4dDo6dHJhbnNsYXRlRm9yQXR0cmlidXRlcyk6IHRy
YW5zbGF0ZSB0byBhY2NvdW50IGZvciB4IGFuZCB5CisJYXR0cmlidXRlcy4KKyAgICAgICAgKFJl
bmRlclNWR1RleHQ6OnBhaW50KTogQXBwbHkgYXBwcm9wcmlhdGUgQ1RNIHRyYW5zZm9ybSBhbmQg
dGhlbiBqdXN0IGxldAorCVJlbmRlckJsb2NrIHBhaW50LgorICAgICAgICAqIGtjYW52YXMvUmVu
ZGVyU1ZHVGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFJlbmRlclNWR1RleHQ6OnJlbmRlck5hbWUp
OgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6
Lm1tOgorICAgICAgICAoS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHo6Om5zR3JhcGhpY3ND
b250ZXh0KTogV2Ugd2FudCB0aGUgY29udGV4dCBmbGlwcGVkLgorICAgICAgICAqIGtzdmcyL2Nz
cy9zdmcuY3NzOiBHaXZlIDxzdmc6dGV4dD4gZGlzcGxheTogYmxvY2sKKyAgICAgICAgKiBrc3Zn
Mi9zdmcvU1ZHVGV4dEVsZW1lbnRJbXBsLmNwcDoKKyAgICAgICAgKFNWR1RleHRFbGVtZW50SW1w
bDo6Y3JlYXRlUmVuZGVyZXIpOiBDcmVhdGUgYSBSZW5kZXJTVkdUZXh0IHJlbmRlcmVyLgorICAg
ICAgICAoU1ZHVGV4dEVsZW1lbnRJbXBsOjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKTogTGV0
IGNoaWxkIHRleHQgbm9kZXMgbWFrZQorCXJlbmRlcmVycywgYnV0IG5vdGhpbmcgZWxzZSAoZm9y
IG5vdykuCisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50SW1wbC5oOgorICAgICAg
ICAoS1NWRzo6U1ZHVGV4dEVsZW1lbnRJbXBsOjpyZW5kZXJlcklzTmVlZGVkKTogSXQgc3VyZSBp
cyEgOi0pCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQg
bmV3IGZpbGVzLgorCisgICAgICAgICoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFn
ZS5oOiBUYWtlIG91dCB1bm5lZWRlZCBkZWNsYXJhdGlvbnMgdG8gCisgICAgICAgIGZpeCBsaW5r
aW5nLgorCiAyMDA2LTAxLTA3ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBtYWMuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llai4KSW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2osdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjUK
ZGlmZiAtcCAtdSAtcjEuNjUgV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCi0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJNiBKYW4gMjAwNiAwOTowOTo1OCAtMDAw
MAkxLjY1CisrKyBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJOCBKYW4gMjAwNiAw
NToyNTozMiAtMDAwMApAQCAtNjksNiArNjksOCBAQAogCQk2NTREODdCODA4MzE5NzNCMDA4MkRD
QTEgLyogZWRpdF9jb21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2NTREODdCNjA4MzE5NzNCMDA4MkRDQTEgLyogZWRpdF9jb21tYW5kLmggKi87
IH07CiAJCTY1NTJFN0FBMDk2QUExMUIwMDA2RjI0OCAvKiBXZWJDb3JlRnJhbWVOYW1lc3BhY2Vz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTUyRTdB
ODA5NkFBMTFCMDAwNkYyNDggLyogV2ViQ29yZUZyYW1lTmFtZXNwYWNlcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1NTJFN0FCMDk2QUExMUIw
MDA2RjI0OCAvKiBXZWJDb3JlRnJhbWVOYW1lc3BhY2VzLm0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTUyRTdBOTA5NkFBMTFCMDAwNkYyNDggLyogV2Vi
Q29yZUZyYW1lTmFtZXNwYWNlcy5tICovOyB9OworCQk2NTc0M0I1MjA5NzA3NkY4MDAxRTdDRUYg
LyogUmVuZGVyU1ZHVGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2NTc0M0I1MDA5NzA3NkY4MDAxRTdDRUYgLyogUmVuZGVyU1ZHVGV4dC5jcHAg
Ki87IH07CisJCTY1NzQzQjUzMDk3MDc2RjgwMDFFN0NFRiAvKiBSZW5kZXJTVkdUZXh0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTc0M0I1MTA5NzA3
NkY4MDAxRTdDRUYgLyogUmVuZGVyU1ZHVGV4dC5oICovOyB9OwogCQk2NUFDNzlBMTA4MzFFRDZE
MDA5Mzg1Q0UgLyogYXBwZW5kX25vZGVfY29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUFDNzk5RjA4MzFFRDZEMDA5Mzg1Q0UgLyogYXBw
ZW5kX25vZGVfY29tbWFuZC5jcHAgKi87IH07CiAJCTY1QUM3OUEyMDgzMUVENkQwMDkzODVDRSAv
KiBhcHBlbmRfbm9kZV9jb21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2NUFDNzlBMDA4MzFFRDZEMDA5Mzg1Q0UgLyogYXBwZW5kX25vZGVfY29t
bWFuZC5oICovOyB9OwogCQk2NUFDNzlBOTA4MzFGMDA2MDA5Mzg1Q0UgLyogYXBwbHlfc3R5bGVf
Y29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NUFDNzlBNzA4MzFGMDA2MDA5Mzg1Q0UgLyogYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAgKi87
IH07CkBAIC0xNzA3LDYgKzE3MDksOCBAQAogCQk2NTUyRTdBODA5NkFBMTFCMDAwNkYyNDggLyog
V2ViQ29yZUZyYW1lTmFtZXNwYWNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViQ29yZUZyYW1lTmFtZXNwYWNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2NTUyRTdBOTA5NkFBMTFCMDAwNkYyNDggLyogV2ViQ29yZUZyYW1lTmFtZXNwYWNlcy5tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gV2ViQ29yZUZyYW1lTmFtZXNwYWNl
cy5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTczMkI2ODA1NEVGNDgzMDA3QjQy
RjggLyogS1dRS1BhcnRzUGFydC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEtXUUtQYXJ0c1BhcnQubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OworCQk2NTc0M0I1MDA5NzA3
NkY4MDAxRTdDRUYgLyogUmVuZGVyU1ZHVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTY1NzQzQjUxMDk3MDc2RjgwMDFFN0NFRiAvKiBSZW5kZXJTVkdUZXh0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdUZXh0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTY1OTEyQjBEMDU4NjkyMTAwMDEyM0E2OSAvKiB4bWxzZXJpYWxp
emVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IHhtbHNlcmlhbGl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNjU5MTJCMEUwNTg2OTIxMDAwMTIzQTY5IC8qIHht
bHNlcmlhbGl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0geG1sc2VyaWFsaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNjVBNjQwRjAwNTMzQkIxRjAwODVFNzc3IC8qIEtX
UUV4Y2VwdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gS1dRRXhjZXB0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTMzNjIsNiArMzM2Niw4IEBACiAJCUE4QzBGQjUx
MDg5NzAxRjcwMEJBNTExNCAvKiBrY2FudmFzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQk2NTc0M0I1MDA5NzA3NkY4MDAxRTdDRUYgLyogUmVuZGVyU1ZH
VGV4dC5jcHAgKi8sCisJCQkJNjU3NDNCNTEwOTcwNzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1Rl
eHQuaCAqLywKIAkJCQlBOEMwRkI1MzA4OTcwMUY3MDBCQTUxMTQgLyogZGV2aWNlICovLAogCQkJ
CUE4QzBGQjdBMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzQ29udGFpbmVyLmNwcCAqLywKIAkJ
CQlBOEMwRkI3QjA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0NvbnRhaW5lci5oICovLApAQCAt
NDc0MCw2ICs0NzQ2LDcgQEAKIAkJCQk0NzU2NTM2OTA5NjUyQzVEMDBCRDlGMjkgLyogS1dRU2l6
ZUYuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTY1NUQ0MDk2QkJFQUMwMDYwMTA1OCAvKiBLQ2Fu
dmFzTWFza2VyUXVhcnR6LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODE2NTVFNTA5NkJDMTM5MDA2
MDEwNTggLyogU1ZHTWFza0VsZW1lbnRJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQk2NTc0M0I1
MzA5NzA3NkY4MDAxRTdDRUYgLyogUmVuZGVyU1ZHVGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC02
NTg0LDYgKzY1OTEsNyBAQAogCQkJCTQ3NTY1MzZBMDk2NTJDNUQwMEJEOUYyOSAvKiBLV1FTaXpl
Ri5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4MTY1NUQ1MDk2QkJFQUMwMDYwMTA1OCAvKiBLQ2Fu
dmFzTWFza2VyUXVhcnR6Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgxNjU1RTQwOTZCQzEzOTAw
NjAxMDU4IC8qIFNWR01hc2tFbGVtZW50SW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2NTc0
M0I1MjA5NzA3NkY4MDAxRTdDRUYgLyogUmVuZGVyU1ZHVGV4dC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
SW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga2Nh
bnZhcy9SZW5kZXJTVkdUZXh0LmNwcApkaWZmIC1OIGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5jcHAK
LS0tIGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5jcHAJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAor
Kysga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmNwcAk4IEphbiAyMDA2IDA1OjI1OjMyIC0wMDAwCkBA
IC0wLDAgKzEsNzIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2pl
Y3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3Vp
dGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKKyNpbmNsdWRlICJT
VkdUZXh0RWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aExpc3RJbXBs
LmgiCisKKyNpbXBvcnQgIktSZW5kZXJpbmdEZXZpY2UuaCIKKyNpbXBvcnQgIktDYW52YXNNYXRy
aXguaCIKKworUmVuZGVyU1ZHVGV4dDo6UmVuZGVyU1ZHVGV4dChLU1ZHOjpTVkdUZXh0RWxlbWVu
dEltcGwgKm5vZGUpIAorICAgIDogUmVuZGVyQmxvY2sobm9kZSkKK3sKK30KKwordm9pZCBSZW5k
ZXJTVkdUZXh0Ojp0cmFuc2xhdGVUb3BUb0Jhc2VsaW5lKCkKK3sKKyAgICBLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dCAqY29udGV4dCA9IFFQYWludGVyOjpyZW5kZXJpbmdEZXZpY2UoKS0+Y3VycmVu
dENvbnRleHQoKTsKKworICAgIGludCBvZmZzZXQgPSBiYXNlbGluZVBvc2l0aW9uKHRydWUsIHRy
dWUpOworICAgIGNvbnRleHQtPmNvbmNhdENUTShRTWF0cml4KCkudHJhbnNsYXRlKDAsIC1vZmZz
ZXQpKTsKK30KKwordm9pZCBSZW5kZXJTVkdUZXh0Ojp0cmFuc2xhdGVGb3JBdHRyaWJ1dGVzKCkK
K3sKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IFFQYWludGVyOjpyZW5k
ZXJpbmdEZXZpY2UoKS0+Y3VycmVudENvbnRleHQoKTsKKworICAgIEtTVkc6OlNWR1RleHRFbGVt
ZW50SW1wbCAqdGV4dCA9IHN0YXRpY19jYXN0PEtTVkc6OlNWR1RleHRFbGVtZW50SW1wbCAqPihl
bGVtZW50KCkpOworCisgICAgZmxvYXQgeE9mZnNldCA9IHRleHQtPngoKS0+YmFzZVZhbCgpLT5n
ZXRGaXJzdCgpID8gdGV4dC0+eCgpLT5iYXNlVmFsKCktPmdldEZpcnN0KCktPnZhbHVlKCkgOiAw
OworICAgIGZsb2F0IHlPZmZzZXQgPSB0ZXh0LT55KCktPmJhc2VWYWwoKS0+Z2V0Rmlyc3QoKSA/
IHRleHQtPnkoKS0+YmFzZVZhbCgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIDogMDsKKworICAgIGNv
bnRleHQtPmNvbmNhdENUTShRTWF0cml4KCkudHJhbnNsYXRlKHhPZmZzZXQsIHlPZmZzZXQpKTsK
K30KKwordm9pZCBSZW5kZXJTVkdUZXh0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50
IHBhcmVudFgsIGludCBwYXJlbnRZKQoreworICAgIGlmIChwYWludEluZm8ucC0+cGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBwYWludEluZm8ucC0+c2F2ZSgpOwor
CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQgPSBRUGFpbnRlcjo6cmVuZGVy
aW5nRGV2aWNlKCktPmN1cnJlbnRDb250ZXh0KCk7CisgICAgY29udGV4dC0+Y29uY2F0Q1RNKFFN
YXRyaXgoKS50cmFuc2xhdGUocGFyZW50WCwgcGFyZW50WSkpOworICAgIHRyYW5zbGF0ZUZvckF0
dHJpYnV0ZXMoKTsKKyAgICB0cmFuc2xhdGVUb3BUb0Jhc2VsaW5lKCk7CisgICAgCisgICAgUmVu
ZGVyQmxvY2s6OnBhaW50KHBhaW50SW5mbywgMCwgMCk7CisKKyAgICBwYWludEluZm8ucC0+cmVz
dG9yZSgpOworfQpJbmRleDoga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZToga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmgKZGlmZiAtTiBrY2FudmFzL1JlbmRlclNWR1Rl
eHQuaAotLS0ga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAw
MAorKysga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmgJOCBKYW4gMjAwNiAwNToyNTozMiAtMDAwMApA
QCAtMCwwICsxLDQ1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9q
ZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1
aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZu
ZGVmIFJlbmRlclNWR1RleHRfSAorI2RlZmluZSBSZW5kZXJTVkdUZXh0X0gKKworI2luY2x1ZGUg
ImtodG1sL3JlbmRlcmluZy9yZW5kZXJfYmxvY2suaCIKKworbmFtZXNwYWNlIEtTVkcgeworICAg
IGNsYXNzIFNWR1RleHRFbGVtZW50SW1wbDsKK30KKworY2xhc3MgUmVuZGVyU1ZHVGV4dCA6IHB1
YmxpYyBraHRtbDo6UmVuZGVyQmxvY2sKK3sKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdUZXh0KEtT
Vkc6OlNWR1RleHRFbGVtZW50SW1wbCAqbm9kZSk7CisKKyAgICBjb25zdCBjaGFyICpyZW5kZXJO
YW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1RleHQiOyB9CisgICAgdm9pZCBwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKTsKKworIHByaXZh
dGU6CisgICAgdm9pZCB0cmFuc2xhdGVUb3BUb0Jhc2VsaW5lKCk7CisgICAgdm9pZCB0cmFuc2xh
dGVGb3JBdHRyaWJ1dGVzKCk7Cit9OworCisjZW5kaWYgUmVuZGVyU1ZHVGV4dF9ICkluZGV4OiBr
Y2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRl
cmluZ0RldmljZVF1YXJ0ei5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMQpkaWZmIC1wIC11
IC1yMS4xMSBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQot
LS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHoubW0JNiBKYW4g
MjAwNiAwOToxMDowMSAtMDAwMAkxLjExCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRl
cmluZ0RldmljZVF1YXJ0ei5tbQk4IEphbiAyMDA2IDA1OjI1OjMzIC0wMDAwCkBAIC04Miw3ICs4
Miw3IEBAIFFSZWN0IEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6OjptYXAKIE5TR3JhcGhp
Y3NDb250ZXh0ICpLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6bnNHcmFwaGljc0NvbnRl
eHQoKQogewogICAgIGlmICghbV9uc0dyYXBoaWNzQ29udGV4dCAmJiBtX2NnQ29udGV4dCkKLSAg
ICAgICAgbV9uc0dyYXBoaWNzQ29udGV4dCA9IFtbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3ND
b250ZXh0V2l0aEdyYXBoaWNzUG9ydDptX2NnQ29udGV4dCBmbGlwcGVkOk5PXSByZXRhaW5dOwor
ICAgICAgICBtX25zR3JhcGhpY3NDb250ZXh0ID0gW1tOU0dyYXBoaWNzQ29udGV4dCBncmFwaGlj
c0NvbnRleHRXaXRoR3JhcGhpY3NQb3J0Om1fY2dDb250ZXh0IGZsaXBwZWQ6WUVTXSByZXRhaW5d
OwogICAgIHJldHVybiBtX25zR3JhcGhpY3NDb250ZXh0OwogfQogCkluZGV4OiBraHRtbC9yZW5k
ZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjQKZGlmZiAtcCAtdSAtcjEuNCBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Nh
bnZhc2ltYWdlLmgKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1hZ2UuaAk5IEp1
bCAyMDA1IDIwOjE5OjE3IC0wMDAwCTEuNAorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52
YXNpbWFnZS5oCTggSmFuIDIwMDYgMDU6MjU6MzMgLTAwMDAKQEAgLTM1LDE0ICszNSw2IEBACiAK
ICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KIAot
ZXh0ZXJuICJDIiB7Ci0KLWV4dGVybiB2b2lkIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9r
ZWRQYXRoKENHQ29udGV4dFJlZiBjKTsKLWV4dGVybiBDR0ltYWdlUmVmIENHQml0bWFwQ29udGV4
dENyZWF0ZUltYWdlKENHQ29udGV4dFJlZiBjKTsKLQotfQotCi0KIG5hbWVzcGFjZSBraHRtbCB7
CiAKIGNsYXNzIERvY0xvYWRlcjsKSW5kZXg6IGtzdmcyL2Nzcy9zdmcuY3NzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2tzdmcyL2Nzcy9zdmcuY3NzLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjQKZGlmZiAtcCAtdSAtcjEuNCBrc3ZnMi9jc3Mvc3ZnLmNzcwotLS0ga3N2
ZzIvY3NzL3N2Zy5jc3MJMTUgRGVjIDIwMDUgMTk6Mzc6MjEgLTAwMDAJMS40CisrKyBrc3ZnMi9j
c3Mvc3ZnLmNzcwk4IEphbiAyMDA2IDA1OjI1OjM0IC0wMDAwCkBAIC0zOSwzICszOSw4IEBAIHN2
Zywgc3ltYm9sLCBtYXJrZXIsIHBhdHRlcm4sIGZvcmVpZ25PYmoKIHsKICAgICBvdmVyZmxvdzog
aGlkZGVuOwogfQorCit0ZXh0Cit7CisgICAgZGlzcGxheTogYmxvY2s7Cit9CkluZGV4OiBrc3Zn
Mi9zdmcvU1ZHVGV4dEVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnRJbXBsLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS42CmRpZmYgLXAgLXUgLXIxLjYga3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50SW1w
bC5jcHAKLS0tIGtzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudEltcGwuY3BwCTIxIE5vdiAyMDA1IDA4
OjI5OjQyIC0wMDAwCTEuNgorKysga3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50SW1wbC5jcHAJOCBK
YW4gMjAwNiAwNToyNTozNCAtMDAwMApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGtkb20v
Y3NzL1JlbmRlclN0eWxlLmg+CiAKICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+
CisjaW5jbHVkZSA8a2NhbnZhcy9SZW5kZXJTVkdUZXh0Lmg+CiAKICNpbmNsdWRlIDxxdmVjdG9y
Lmg+CiAKQEAgLTc1LDQgKzc2LDE2IEBAIFNWR01hdHJpeEltcGwgKlNWR1RleHRFbGVtZW50SW1w
bDo6Z2V0Q1QKICAgICByZXR1cm4gU1ZHTG9jYXRhYmxlSW1wbDo6Z2V0U2NyZWVuQ1RNKHRoaXMp
OwogfQogCitraHRtbDo6UmVuZGVyT2JqZWN0ICpTVkdUZXh0RWxlbWVudEltcGw6OmNyZWF0ZVJl
bmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSkKK3sK
KyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHVGV4dCh0aGlzKTsKK30KKworYm9vbCBT
VkdUZXh0RWxlbWVudEltcGw6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoRE9NOjpOb2RlSW1w
bCAqY2hpbGQpIGNvbnN0Cit7CisgICAgaWYgKGNoaWxkLT5pc1RleHROb2RlKCkpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKwogLy8gdmltOnRzPTQ6bm9ldApJ
bmRleDoga3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudEltcGwuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXAgLXUgLXIxLjUga3N2ZzIvc3ZnL1NWR1RleHRFbGVt
ZW50SW1wbC5oCi0tLSBrc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnRJbXBsLmgJMjEgTm92IDIwMDUg
MDg6Mjk6NDIgLTAwMDAJMS41CisrKyBrc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnRJbXBsLmgJOCBK
YW4gMjAwNiAwNToyNTozNCAtMDAwMApAQCAtNDYsNiArNDYsMTAgQEAgbmFtZXNwYWNlIEtTVkcK
ICAgICAgICAgdmlydHVhbCBTVkdNYXRyaXhJbXBsICpnZXRTY3JlZW5DVE0oKSBjb25zdDsKICAg
ICAgICAgdmlydHVhbCBTVkdNYXRyaXhJbXBsICpnZXRUcmFuc2Zvcm1Ub0VsZW1lbnQoU1ZHRWxl
bWVudEltcGwgKmVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAorICAgICAgICB2aXJ0dWFs
IGJvb2wgcmVuZGVyZXJJc05lZWRlZChraHRtbDo6UmVuZGVyU3R5bGUgKikgeyByZXR1cm4gdHJ1
ZTsgfQorICAgICAgICB2aXJ0dWFsIGtodG1sOjpSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVy
KFJlbmRlckFyZW5hICphcmVuYSwga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSk7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKERPTTo6Tm9kZUltcGwgKikg
Y29uc3Q7CisKICAgICAgICAgdmlydHVhbCBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RJbXBsICp0
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgICAgIHZpcnR1YWwgU1ZHTWF0cml4
SW1wbCAqbG9jYWxNYXRyaXgoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgICAgIAo=
</data>
<flag name="review"
          id="1210"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>