<?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>6447</bug_id>
          
          <creation_ts>2006-01-09 05:26:46 -0800</creation_ts>
          <short_desc>KCanvas needs to be redesigned to fill &amp; stroke at once</short_desc>
          <delta_ts>2006-01-14 21:49: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>
          <dependson>5748</dependson>
          <blocked>6448</blocked>
    
    <blocked>6553</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>28045</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-09 05:26:46 -0800</bug_when>
    <thetext>KCanvas needs to be redesigned to fill &amp; stroke at once

This is a continuation of 5748.

In the previous bug, Alexander made great progress at removing crufty pieces of KCanvas.  However 
several things remain:

1.  Completely remove KCanvasRenderingStyle (or at least remove all instance variables).
2.  Update PaintServers to not paint directly, but rather have an apply(STROKE | FILL) method which 
applies their stoke/fill properties to the current context.
3.  Change RenderPathQuartz to call CGContextDrawPath, and thus both stroke and fill a path in a 
single call (large perf. gain).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28386</commentid>
    <comment_count>1</comment_count>
      <attachid>5656</attachid>
    <who name="Alexander Kellett">a</who>
    <bug_when>2006-01-13 17:56:37 -0800</bug_when>
    <thetext>Created attachment 5656
second stage of refactor (leaks still)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28401</commentid>
    <comment_count>2</comment_count>
      <attachid>5658</attachid>
    <who name="Alexander Kellett">a</who>
    <bug_when>2006-01-14 02:41:21 -0800</bug_when>
    <thetext>Created attachment 5658
remove m_style from kcanvasrenderingstyle and make used methods static</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28408</commentid>
    <comment_count>3</comment_count>
      <attachid>5665</attachid>
    <who name="Alexander Kellett">a</who>
    <bug_when>2006-01-14 04:52:22 -0800</bug_when>
    <thetext>Created attachment 5665
third version of patch, move the statics into a new class KSVGPainterFactory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28429</commentid>
    <comment_count>4</comment_count>
      <attachid>5677</attachid>
    <who name="Alexander Kellett">a</who>
    <bug_when>2006-01-14 14:31:06 -0800</bug_when>
    <thetext>Created attachment 5677
updated patch against current svn</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28448</commentid>
    <comment_count>5</comment_count>
      <attachid>5658</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-14 17:54:02 -0800</bug_when>
    <thetext>Comment on attachment 5658
remove m_style from kcanvasrenderingstyle and make used methods static

Be sure to mark your old patches as no longer needing review when you mark new
ones for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28453</commentid>
    <comment_count>6</comment_count>
      <attachid>5677</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-14 18:37:09 -0800</bug_when>
    <thetext>Comment on attachment 5677
updated patch against current svn

This is good enough to land.  I removed the (now completely empty)
KCanvasRenderingStyle class while landing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5656</attachid>
            <date>2006-01-13 17:56:37 -0800</date>
            <delta_ts>2006-01-14 04:52:22 -0800</delta_ts>
            <desc>second stage of refactor (leaks still)</desc>
            <filename>refactor-renderstyle.patch</filename>
            <type>text/plain</type>
            <size>33746</size>
            <attacher name="Alexander Kellett">a</attacher>
            
              <data encoding="base64">SW5kZXg6IGtjYW52YXMvS0NhbnZhc0l0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvS0Nh
bnZhc0l0ZW0uY3BwCShyZXZpc2lvbiAxMjA4MikKKysrIGtjYW52YXMvS0NhbnZhc0l0ZW0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OSwxMiArNjksNiBAQCBSZW5kZXJQYXRoOjp+UmVuZGVyUGF0
aCgpCiAgICAgZGVsZXRlIGQ7CiB9CiAKLXZvaWQgUmVuZGVyUGF0aDo6c2V0U3R5bGUoa2h0bWw6
OlJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAgICBkLT5zdHlsZS0+dXBkYXRlU3R5bGUoc3R5bGUs
IHRoaXMpOwotICAgIGtodG1sOjpSZW5kZXJPYmplY3Q6OnNldFN0eWxlKHN0eWxlKTsKLX0KLQog
UU1hdHJpeCBSZW5kZXJQYXRoOjpsb2NhbFRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGQtPm1hdHJpeDsKQEAgLTE0MSw2ICsxMzUsOCBAQCBjb25zdCBLQ2FudmFzQ29tbW9uQXJncyBS
ZW5kZXJQYXRoOjpjb21tCiAgICAgS0NhbnZhc0NvbW1vbkFyZ3MgYXJnczsKICAgICBhcmdzLnNl
dFBhdGgocGF0aCgpKTsKICAgICBhcmdzLnNldFN0eWxlKGNhbnZhc1N0eWxlKCkpOworICAgIGFy
Z3Muc2V0UmVuZGVyU3R5bGUoc3R5bGUoKSk7CisgICAgYXJncy5zZXRSZW5kZXJQYXRoKHRoaXMp
OwogICAgIHJldHVybiBhcmdzOwogfQogCkluZGV4OiBrY2FudmFzL0tDYW52YXNJdGVtLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga2NhbnZhcy9LQ2FudmFzSXRlbS5oCShyZXZpc2lvbiAxMjA4MikKKysrIGtj
YW52YXMvS0NhbnZhc0l0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNiBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjaGFuZ2VQYXRoKEtDYW52YXNQYXRoKiBuZXdQYXRoKTsKIAogICAgIEtD
YW52YXNQYXRoKiBwYXRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKGtodG1s
OjpSZW5kZXJTdHlsZSAqc3R5bGUpOwogICAgIEtTVkc6OktDYW52YXNSZW5kZXJpbmdTdHlsZSAq
Y2FudmFzU3R5bGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclBhdGgoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBrY2FudmFzL0tDYW52YXNUcmVlRGVidWcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtjYW52YXMvS0NhbnZhc1RyZWVEZWJ1Zy5jcHAJKHJldmlzaW9uIDEy
MDgyKQorKysga2NhbnZhcy9LQ2FudmFzVHJlZURlYnVnLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQ0LDE3ICsyNDQsMTcgQEAgc3RhdGljIHZvaWQgd3JpdGVTdHlsZShRVGV4dFN0cmVhbSAmdHMs
IAogICAgIGlmIChvYmplY3QuaXNSZW5kZXJQYXRoKCkpIHsKICAgICAgICAgY29uc3QgUmVuZGVy
UGF0aCAmcGF0aCA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclBhdGggJj4ob2JqZWN0KTsKICAg
ICAgICAgS0NhbnZhc1JlbmRlcmluZ1N0eWxlICpjYW52YXNTdHlsZSA9IHBhdGguY2FudmFzU3R5
bGUoKTsKLSAgICAgICAgaWYgKGNhbnZhc1N0eWxlLT5pc1N0cm9rZWQoKSkgeworICAgICAgICBL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnN0cm9rZVBhaW50U2VydmVyID0gY2FudmFzU3R5bGUtPnN0
cm9rZVBhaW50U2VydmVyKHN0eWxlLCAmcGF0aCk7CisgICAgICAgIGlmIChzdHJva2VQYWludFNl
cnZlcikgewogICAgICAgICAgICAgUVRleHRTdHJlYW1TZXBhcmF0b3IgcygiICIpOwogICAgICAg
ICAgICAgdHMgPDwgIiBbc3Ryb2tlPXsiOwotICAgICAgICAgICAgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyICpzdHJva2VQYWludFNlcnZlciA9IGNhbnZhc1N0eWxlLT5zdHJva2VQYWludFNlcnZlcihz
dHlsZSwgJnBhdGgpOwogICAgICAgICAgICAgaWYgKHN0cm9rZVBhaW50U2VydmVyKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKCFzdHJva2VQYWludFNlcnZlci0+aWRJblJlZ2lzdHJ5KCkuaXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbaWQ9XCIiPDwgc3Ryb2tlUGFp
bnRTZXJ2ZXItPmlkSW5SZWdpc3RyeSgpIDw8ICJcIl0iOyAKICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgKnN0cm9rZVBhaW50U2VydmVyOwogICAg
ICAgICAgICAgfSAKLSAgICAgICAgICAgIEtSZW5kZXJpbmdTdHJva2VQYWludGVyICpwID0gY2Fu
dmFzU3R5bGUtPnN0cm9rZVBhaW50ZXIoKTsKKyAgICAgICAgICAgIEtSZW5kZXJpbmdTdHJva2VQ
YWludGVyICpwID0gY2FudmFzU3R5bGUtPnN0cm9rZVBhaW50ZXIoc3R5bGUsICZwYXRoKTsKICAg
ICAgICAgICAgIGlmIChwLT5vcGFjaXR5KCkgIT0gMS4wZikKICAgICAgICAgICAgICAgICB0cyA8
PCBzIDw8ICJbb3BhY2l0eT0iIDw8IHAtPm9wYWNpdHkoKSA8PCAiXSI7CiAgICAgICAgICAgICBp
ZiAocC0+c3Ryb2tlV2lkdGgoKSAhPSAxLjBmKQpAQCAtMjcxLDE3ICsyNzEsMTcgQEAgc3RhdGlj
IHZvaWQgd3JpdGVTdHlsZShRVGV4dFN0cmVhbSAmdHMsIAogICAgICAgICAgICAgICAgIHRzIDw8
IHMgPDwgIltkYXNoIGFycmF5PSIgPDwgcC0+ZGFzaEFycmF5KCkgPDwgIl0iOyAgICAgICAgCiAg
ICAgICAgICAgICB0cyA8PCAifV0iOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjYW52YXNTdHls
ZS0+aXNGaWxsZWQoKSkgeworICAgICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKmZpbGxQYWlu
dFNlcnZlciA9IGNhbnZhc1N0eWxlLT5maWxsUGFpbnRTZXJ2ZXIoc3R5bGUsICZwYXRoKTsKKyAg
ICAgICAgaWYgKGZpbGxQYWludFNlcnZlcikgewogICAgICAgICAgICAgUVRleHRTdHJlYW1TZXBh
cmF0b3IgcygiICIpOwogICAgICAgICAgICAgdHMgPDwgIiBbZmlsbD17IjsKLSAgICAgICAgICAg
IEtSZW5kZXJpbmdQYWludFNlcnZlciAqZmlsbFBhaW50U2VydmVyID0gY2FudmFzU3R5bGUtPmZp
bGxQYWludFNlcnZlcihzdHlsZSwgJnBhdGgpOwogICAgICAgICAgICAgaWYgKGZpbGxQYWludFNl
cnZlcikgewogICAgICAgICAgICAgICAgIGlmICghZmlsbFBhaW50U2VydmVyLT5pZEluUmVnaXN0
cnkoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltpZD1cIiIg
PDwgZmlsbFBhaW50U2VydmVyLT5pZEluUmVnaXN0cnkoKSA8PCAiXCJdIjsKICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgKmZpbGxQYWludFNlcnZl
cjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEtSZW5kZXJpbmdGaWxsUGFpbnRlciAqcCA9
IGNhbnZhc1N0eWxlLT5maWxsUGFpbnRlcigpOworICAgICAgICAgICAgS1JlbmRlcmluZ0ZpbGxQ
YWludGVyICpwID0gY2FudmFzU3R5bGUtPmZpbGxQYWludGVyKHN0eWxlLCAmcGF0aCk7CiAgICAg
ICAgICAgICBpZiAocC0+b3BhY2l0eSgpICE9IDEuMGYpCiAgICAgICAgICAgICAgICAgdHMgPDwg
cyA8PCAiW29wYWNpdHk9IiA8PCBwLT5vcGFjaXR5KCkgPDwgIl0iOwogICAgICAgICAgICAgaWYg
KHAtPmZpbGxSdWxlKCkgIT0gUlVMRV9OT05aRVJPKQpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L0tDYW52YXNJdGVtUXVhcnR6Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9LQ2FudmFzSXRlbVF1YXJ0ei5tbQkocmV2aXNpb24gMTIwODIpCisrKyBrY2FudmFzL2Rl
dmljZS9xdWFydHovS0NhbnZhc0l0ZW1RdWFydHoubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKIAogI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogCisjaW1wb3J0ICJr
Y2FudmFzL1JlbmRlclBhdGguaCIKICNpbXBvcnQgImtjYW52YXMvS0NhbnZhcy5oIgogI2ltcG9y
dCAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCiAjaW1wb3J0ICJLUmVuZGVyaW5nRmlsbFBhaW50
ZXIuaCIKQEAgLTIyMSwxMyArMjIyLDEzIEBAIHZvaWQgS0NhbnZhc0l0ZW1RdWFydHo6OnBhaW50
KFBhaW50SW5mbyAKICAgICAKICAgICBLQ2FudmFzQ29tbW9uQXJncyBhcmdzID0gY29tbW9uQXJn
cygpOwogCi0gICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpmaWxsUGFpbnRTZXJ2ZXIgPSBjYW52
YXNTdHlsZSgpLT5maWxsUGFpbnRTZXJ2ZXIoY2FudmFzU3R5bGUoKS0+cmVuZGVyU3R5bGUoKSwg
dGhpcyk7CisgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpmaWxsUGFpbnRTZXJ2ZXIgPSBjYW52
YXNTdHlsZSgpLT5maWxsUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhpcyk7CiAgICAgaWYgKGZpbGxQ
YWludFNlcnZlcikgewogICAgICAgICBkZXZpY2VDb250ZXh0LT5hZGRQYXRoKHBhdGgoKSk7CiAg
ICAgICAgIGZpbGxQYWludFNlcnZlci0+c2V0QWN0aXZlQ2xpZW50KHRoaXMpOwogICAgICAgICBm
aWxsUGFpbnRTZXJ2ZXItPmRyYXcoZGV2aWNlQ29udGV4dCwgYXJncywgQVBQTFlfVE9fRklMTCk7
CiAgICAgfQotICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBj
YW52YXNTdHlsZSgpLT5zdHJva2VQYWludFNlcnZlcihjYW52YXNTdHlsZSgpLT5yZW5kZXJTdHls
ZSgpLCB0aGlzKTsKKyAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnN0cm9rZVBhaW50U2VydmVy
ID0gY2FudmFzU3R5bGUoKS0+c3Ryb2tlUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhpcyk7CiAgICAg
aWYgKHN0cm9rZVBhaW50U2VydmVyKSB7CiAgICAgICAgIGRldmljZUNvbnRleHQtPmFkZFBhdGgo
cGF0aCgpKTsgLy8gcGF0aCBpcyBjbGVhcmVkIHdoZW4gZmlsbGVkLgogICAgICAgICBzdHJva2VQ
YWludFNlcnZlci0+c2V0QWN0aXZlQ2xpZW50KHRoaXMpOwpAQCAtMjkxLDEzICsyOTIsMTMgQEAg
UVJlY3RGIEtDYW52YXNJdGVtUXVhcnR6OjpiYm94Rm9yUGF0aChibwogICAgIC8vIHRoZSBiYm94
IG1pZ2h0IGdyb3cgaWYgdGhlIHBhdGggaXMgc3Ryb2tlZC4KICAgICAvLyBhbmQgQ0dQYXRoR2V0
Qm91bmRpbmdCb3ggZG9lc24ndCBzdXBwb3J0IHRoYXQsIHNvIHdlJ2xsIGhhdmUKICAgICAvLyB0
byBtYWtlIGFuIGFsdGVybmF0aXZlIGNhbGwuLi4KLSAgICBpZihpbmNsdWRlU3Ryb2tlICYmIGNh
bnZhc1N0eWxlKCktPmlzU3Ryb2tlZCgpKSB7CisgICAgaWYgKGluY2x1ZGVTdHJva2UgJiYgY2Fu
dmFzU3R5bGUoKS0+aXNTdHJva2VkKHN0eWxlKCkpKSB7CiAgICAgICAgIENHQ29udGV4dFJlZiBz
aGFyZWRDb250ZXh0ID0gZ2V0U2hhcmVkQ29udGV4dCgpOwogICAgICAgICAKICAgICAgICAgQ0dD
b250ZXh0U2F2ZUdTdGF0ZShzaGFyZWRDb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0QmVnaW5Q
YXRoKHNoYXJlZENvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRBZGRQYXRoKHNoYXJlZENvbnRl
eHQsIGNnUGF0aCk7Ci0gICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoc2hhcmVkQ29u
dGV4dCwgY2FudmFzU3R5bGUoKSk7CisgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQo
c2hhcmVkQ29udGV4dCwgc3R5bGUoKSwgdGhpcyk7CiAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQ
YXRoV2l0aFN0cm9rZWRQYXRoKHNoYXJlZENvbnRleHQpOwogICAgICAgICAKICAgICAgICAgYmJv
eCA9IENHQ29udGV4dEdldFBhdGhCb3VuZGluZ0JveChzaGFyZWRDb250ZXh0KTsKQEAgLTMyNyw3
ICszMjgsNyBAQCBib29sIEtDYW52YXNJdGVtUXVhcnR6OjpoaXRzUGF0aChjb25zdCBRCiAgICAg
Q0dQb2ludCBsb2NhbEhpdFBvaW50ID0gQ0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKENHUG9p
bnQoaGl0UG9pbnQpLCBDR0FmZmluZVRyYW5zZm9ybUludmVydCh0cmFuc2Zvcm0pKTsKIAogICAg
IGlmIChmaWxsICYmIGNhbnZhc1N0eWxlKCktPmZpbGxQYWludFNlcnZlcihzdHlsZSgpLCB0aGlz
KSkgewotICAgICAgICBDR1BhdGhEcmF3aW5nTW9kZSBkcmF3TW9kZSA9IChjYW52YXNTdHlsZSgp
LT5maWxsUGFpbnRlcigpLT5maWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCkgPyBrQ0dQYXRoRU9G
aWxsIDoga0NHUGF0aEZpbGw7CisgICAgICAgIENHUGF0aERyYXdpbmdNb2RlIGRyYXdNb2RlID0g
KGNhbnZhc1N0eWxlKCktPmZpbGxQYWludGVyKHN0eWxlKCksIHRoaXMpLT5maWxsUnVsZSgpID09
IFJVTEVfRVZFTk9ERCkgPyBrQ0dQYXRoRU9GaWxsIDoga0NHUGF0aEZpbGw7CiAgICAgICAgIGhp
dFN1Y2Nlc3MgPSBDR0NvbnRleHRQYXRoQ29udGFpbnNQb2ludChzaGFyZWRDb250ZXh0LCBsb2Nh
bEhpdFBvaW50LCBkcmF3TW9kZSk7CiAgICAgfSBlbHNlIGlmICghZmlsbCAmJiBjYW52YXNTdHls
ZSgpLT5zdHJva2VQYWludFNlcnZlcihzdHlsZSgpLCB0aGlzKSkKICAgICAgICAgaGl0U3VjY2Vz
cyA9IENHQ29udGV4dFBhdGhDb250YWluc1BvaW50KHNoYXJlZENvbnRleHQsIGxvY2FsSGl0UG9p
bnQsIGtDR1BhdGhTdHJva2UpOwpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJp
bmdQYWludFNlcnZlclF1YXJ0ei5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFy
dHovS1JlbmRlcmluZ1BhaW50U2VydmVyUXVhcnR6Lm1tCShyZXZpc2lvbiAxMjA4MikKKysrIGtj
YW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHoubW0JKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICAy
MDA2IEFsZXhhbmRlciBLZWxsZXR0IDxseXBhbm92QGtkZS5vcmc+CiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDMwICs0NCwzMiBAQCB2b2lkIEtSZW5kZXJpbmdQYWludFNl
cnZlclNvbGlkUXVhcnR6OjpkCiB7CiAgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHog
KnF1YXJ0ekNvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0
eiAqPihyZW5kZXJpbmdDb250ZXh0KTsKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHF1YXJ0
ekNvbnRleHQtPmNnQ29udGV4dCgpOworICAgIGtodG1sOjpSZW5kZXJTdHlsZSAqcmVuZGVyU3R5
bGUgPSBhcmdzLnJlbmRlclN0eWxlKCk7CisgICAgY29uc3QgUmVuZGVyUGF0aCAqcmVuZGVyUGF0
aCA9IGFyZ3MucmVuZGVyUGF0aCgpOwogICAgIEtTVkc6OktDYW52YXNSZW5kZXJpbmdTdHlsZSAq
Y2FudmFzU3R5bGUgPSBhcmdzLmNhbnZhc1N0eWxlKCk7CiAKLSAgICBDR0NvbnRleHRTZXRBbHBo
YShjb250ZXh0LCBjYW52YXNTdHlsZS0+cmVuZGVyU3R5bGUoKS0+b3BhY2l0eSgpKTsKKyAgICBD
R0NvbnRleHRTZXRBbHBoYShjb250ZXh0LCByZW5kZXJTdHlsZS0+b3BhY2l0eSgpKTsKICAgICAg
ICAgCi0gICAgaWYgKCAodHlwZSAmIEFQUExZX1RPX0ZJTEwpICYmIGNhbnZhc1N0eWxlLT5pc0Zp
bGxlZCgpICkgeworICAgIGlmICgodHlwZSAmIEFQUExZX1RPX0ZJTEwpICYmIGNhbnZhc1N0eWxl
LT5pc0ZpbGxlZChyZW5kZXJTdHlsZSkpIHsKICAgICAgICAgQ0dDb2xvclJlZiBjb2xvckNHID0g
Y2dDb2xvcihjb2xvcigpKTsKLSAgICAgICAgQ0dDb2xvclJlZiB3aXRoQWxwaGEgPSBDR0NvbG9y
Q3JlYXRlQ29weVdpdGhBbHBoYShjb2xvckNHLCBjYW52YXNTdHlsZS0+ZmlsbFBhaW50ZXIoKS0+
b3BhY2l0eSgpKTsKKyAgICAgICAgQ0dDb2xvclJlZiB3aXRoQWxwaGEgPSBDR0NvbG9yQ3JlYXRl
Q29weVdpdGhBbHBoYShjb2xvckNHLCBjYW52YXNTdHlsZS0+ZmlsbFBhaW50ZXIocmVuZGVyU3R5
bGUsIHJlbmRlclBhdGgpLT5vcGFjaXR5KCkpOwogICAgICAgICBDR0NvbnRleHRTZXRGaWxsQ29s
b3JXaXRoQ29sb3IoY29udGV4dCwgd2l0aEFscGhhKTsKICAgICAgICAgQ0dDb2xvclJlbGVhc2Uo
Y29sb3JDRyk7CiAgICAgICAgIENHQ29sb3JSZWxlYXNlKHdpdGhBbHBoYSk7Ci0gICAgICAgIGlm
IChjYW52YXNTdHlsZS0+ZmlsbFBhaW50ZXIoKS0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQp
CisgICAgICAgIGlmIChjYW52YXNTdHlsZS0+ZmlsbFBhaW50ZXIocmVuZGVyU3R5bGUsIHJlbmRl
clBhdGgpLT5maWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCkKICAgICAgICAgICAgIENHQ29udGV4
dEVPRmlsbFBhdGgoY29udGV4dCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIENHQ29udGV4
dEZpbGxQYXRoKGNvbnRleHQpOwogICAgIH0KIAotICAgIGlmICggKHR5cGUgJiBBUFBMWV9UT19T
VFJPS0UpICYmIGNhbnZhc1N0eWxlLT5pc1N0cm9rZWQoKSApIHsKKyAgICBpZiAoKHR5cGUgJiBB
UFBMWV9UT19TVFJPS0UpICYmIGNhbnZhc1N0eWxlLT5pc1N0cm9rZWQocmVuZGVyU3R5bGUpKSB7
CiAgICAgICAgIENHQ29sb3JSZWYgY29sb3JDRyA9IGNnQ29sb3IoY29sb3IoKSk7Ci0gICAgICAg
IENHQ29sb3JSZWYgd2l0aEFscGhhID0gQ0dDb2xvckNyZWF0ZUNvcHlXaXRoQWxwaGEoY29sb3JD
RywgY2FudmFzU3R5bGUtPnN0cm9rZVBhaW50ZXIoKS0+b3BhY2l0eSgpKTsKKyAgICAgICAgQ0dD
b2xvclJlZiB3aXRoQWxwaGEgPSBDR0NvbG9yQ3JlYXRlQ29weVdpdGhBbHBoYShjb2xvckNHLCBj
YW52YXNTdHlsZS0+c3Ryb2tlUGFpbnRlcihyZW5kZXJTdHlsZSwgcmVuZGVyUGF0aCktPm9wYWNp
dHkoKSk7CQkKICAgICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29sb3IoY29udGV4
dCwgd2l0aEFscGhhKTsKICAgICAgICAgQ0dDb2xvclJlbGVhc2UoY29sb3JDRyk7CiAgICAgICAg
IENHQ29sb3JSZWxlYXNlKHdpdGhBbHBoYSk7CiAgICAgICAgIAotICAgICAgICBhcHBseVN0cm9r
ZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIGNhbnZhc1N0eWxlKTsKKyAgICAgICAgYXBwbHlTdHJv
a2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCByZW5kZXJTdHlsZSwgcmVuZGVyUGF0aCk7CiAgICAg
ICAgIAogICAgICAgICBDR0NvbnRleHRTdHJva2VQYXRoKGNvbnRleHQpOwogICAgIH0KQEAgLTg4
LDYgKzkxLDggQEAgdm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXVhcnR6OgogICAg
IEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6ICpxdWFydHpDb250ZXh0ID0gc3RhdGljX2Nh
c3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHogKj4ocmVuZGVyaW5nQ29udGV4dCk7CiAg
ICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBxdWFydHpDb250ZXh0LT5jZ0NvbnRleHQoKTsKICAg
ICBLU1ZHOjpLQ2FudmFzUmVuZGVyaW5nU3R5bGUgKmNhbnZhc1N0eWxlID0gYXJncy5jYW52YXNT
dHlsZSgpOworICAgIGNvbnN0IFJlbmRlclBhdGggKnJlbmRlclBhdGggPSBhcmdzLnJlbmRlclBh
dGgoKTsKKyAgICBraHRtbDo6UmVuZGVyU3R5bGUgKnJlbmRlclN0eWxlID0gYXJncy5yZW5kZXJT
dHlsZSgpOwogCiAgICAgS0NhbnZhc0ltYWdlICpjZWxsID0gdGlsZSgpOwogICAgIGlmICghY2Vs
bCkKQEAgLTExOCwyMyArMTIzLDIzIEBAIHZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVy
blF1YXJ0ejoKICAgICAgICAgdHJ1ZSwgLy8gaGFzIGNvbG9yCiAgICAgICAgICZjYWxsYmFja3Mg
KTsKIAotICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRleHQsIGNhbnZhc1N0eWxlLT5yZW5kZXJT
dHlsZSgpLT5vcGFjaXR5KCkpOyAvLyBvciBkbyBJIHNldCB0aGUgYWxwaGEgYWJvdmU/CisgICAg
Q0dDb250ZXh0U2V0QWxwaGEoY29udGV4dCwgcmVuZGVyU3R5bGUtPm9wYWNpdHkoKSk7IC8vIG9y
IGRvIEkgc2V0IHRoZSBhbHBoYSBhYm92ZT8KIAogICAgIENHQ29sb3JTcGFjZVJlZiBwYXR0ZXJu
U3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVQYXR0ZXJuKE5VTEwpOwogCi0gICAgaWYgKCAodHlw
ZSAmIEFQUExZX1RPX0ZJTEwpICYmIGNhbnZhc1N0eWxlLT5pc0ZpbGxlZCgpICkgeworICAgIGlm
ICgodHlwZSAmIEFQUExZX1RPX0ZJTEwpICYmIGNhbnZhc1N0eWxlLT5pc0ZpbGxlZChyZW5kZXJT
dHlsZSkpIHsKICAgICAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yU3BhY2UoY29udGV4dCwgcGF0
dGVyblNwYWNlKTsKICAgICAgICAgQ0dDb250ZXh0U2V0RmlsbFBhdHRlcm4oY29udGV4dCwgcGF0
dGVybiwgJmFscGhhKTsKLSAgICAgICAgaWYgKGNhbnZhc1N0eWxlLT5maWxsUGFpbnRlcigpLT5m
aWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCkKKyAgICAgICAgaWYgKGNhbnZhc1N0eWxlLT5maWxs
UGFpbnRlcihyZW5kZXJTdHlsZSwgcmVuZGVyUGF0aCktPmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVO
T0REKQogICAgICAgICAgICAgQ0dDb250ZXh0RU9GaWxsUGF0aChjb250ZXh0KTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgQ0dDb250ZXh0RmlsbFBhdGgoY29udGV4dCk7CiAgICAgfQotCi0g
ICAgaWYgKCAodHlwZSAmIEFQUExZX1RPX1NUUk9LRSkgJiYgY2FudmFzU3R5bGUtPmlzU3Ryb2tl
ZCgpICkgeworICAgIAorICAgIGlmICgodHlwZSAmIEFQUExZX1RPX1NUUk9LRSkgJiYgY2FudmFz
U3R5bGUtPmlzU3Ryb2tlZChyZW5kZXJTdHlsZSkpIHsKICAgICAgICAgQ0dDb250ZXh0U2V0U3Ry
b2tlQ29sb3JTcGFjZShjb250ZXh0LCBwYXR0ZXJuU3BhY2UpOwogICAgICAgICBDR0NvbnRleHRT
ZXRTdHJva2VQYXR0ZXJuKGNvbnRleHQsIHBhdHRlcm4sICZhbHBoYSk7Ci0gICAgICAgIGFwcGx5
U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgY2FudmFzU3R5bGUpOworICAgICAgICBhcHBs
eVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHJlbmRlclN0eWxlLCByZW5kZXJQYXRoKTsK
ICAgICAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjb250ZXh0KTsKICAgICB9CiAKSW5kZXg6IGtj
YW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52
YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0Lm1tCShyZXZpc2lvbiAxMjA4MikKKysrIGtj
YW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAjaW1wb3J0ICJLQ2FudmFzUmVzb3VyY2VzUXVhcnR6LmgiCiAjaW1wb3J0
ICJLUmVuZGVyaW5nRmlsbFBhaW50ZXIuaCIKICNpbXBvcnQgIktSZW5kZXJpbmdTdHJva2VQYWlu
dGVyLmgiCisjaW1wb3J0ICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKICNpbXBvcnQgImt4bWxj
b3JlL0Fzc2VydGlvbnMuaCIKIAogI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlSW1hZ2UuaD4KQEAg
LTg4LDI2ICs4OSwyOCBAQCBDR0FmZmluZVRyYW5zZm9ybSBDR0FmZmluZVRyYW5zZm9ybU1ha2VN
CiAgICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0KIAotdm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250
ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0LCBLU1ZHOjpLQ2FudmFzUmVuZGVyaW5nU3R5bGUgKnN0
eWxlKQordm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0
LCBraHRtbDo6UmVuZGVyU3R5bGUgKnJlbmRlclN0eWxlLCBjb25zdCBSZW5kZXJQYXRoICpyZW5k
ZXJQYXRoKQogeworICAgIEtSZW5kZXJpbmdTdHJva2VQYWludGVyICpzdHJva2VQYWludGVyID0g
S1NWRzo6S0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpzdHJva2VQYWludGVyKHJlbmRlclN0eWxlLCBy
ZW5kZXJQYXRoKTsKKwogICAgIC8qIFNob3VsZG4ndCBhbGwgdGhlc2UgYmUgaW4gdGhlIHN0cm9r
ZSBwYWludGVyPyAqLwotICAgIENHQ29udGV4dFNldExpbmVXaWR0aChjb250ZXh0LCBzdHlsZS0+
c3Ryb2tlUGFpbnRlcigpLT5zdHJva2VXaWR0aCgpKTsKKyAgICBDR0NvbnRleHRTZXRMaW5lV2lk
dGgoY29udGV4dCwgc3Ryb2tlUGFpbnRlci0+c3Ryb2tlV2lkdGgoKSk7CiAKLSAgICBLQ0NhcFN0
eWxlIGNhcFN0eWxlID0gc3R5bGUtPnN0cm9rZVBhaW50ZXIoKS0+c3Ryb2tlQ2FwU3R5bGUoKTsK
KyAgICBLQ0NhcFN0eWxlIGNhcFN0eWxlID0gc3Ryb2tlUGFpbnRlci0+c3Ryb2tlQ2FwU3R5bGUo
KTsKICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQsIENHTGluZUNhcEZyb21LQyhjYXBT
dHlsZSkpOwogCi0gICAgS0NKb2luU3R5bGUgam9pblN0eWxlID0gc3R5bGUtPnN0cm9rZVBhaW50
ZXIoKS0+c3Ryb2tlSm9pblN0eWxlKCk7CisgICAgS0NKb2luU3R5bGUgam9pblN0eWxlID0gc3Ry
b2tlUGFpbnRlci0+c3Ryb2tlSm9pblN0eWxlKCk7CiAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4o
Y29udGV4dCwgQ0dMaW5lSm9pbkZyb21LQyhqb2luU3R5bGUpKTsKIAotICAgIENHQ29udGV4dFNl
dE1pdGVyTGltaXQoY29udGV4dCwgc3R5bGUtPnN0cm9rZVBhaW50ZXIoKS0+c3Ryb2tlTWl0ZXJM
aW1pdCgpKTsKKyAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KGNvbnRleHQsIHN0cm9rZVBhaW50
ZXItPnN0cm9rZU1pdGVyTGltaXQoKSk7CiAKLSAgICBLQ0Rhc2hBcnJheSBkYXNoZXMgPSBzdHls
ZS0+c3Ryb2tlUGFpbnRlcigpLT5kYXNoQXJyYXkoKTsKKyAgICBLQ0Rhc2hBcnJheSBkYXNoZXMg
PSBzdHJva2VQYWludGVyLT5kYXNoQXJyYXkoKTsKICAgICBpZiAoZGFzaGVzLmNvdW50KCkpIHsK
ICAgICAgICAgc2l6ZV90IGRhc2hDb3VudCA9IGRhc2hlcy5jb3VudCgpOwogICAgICAgICBmbG9h
dCAqbGVuZ3RocyA9IChmbG9hdCAqKW1hbGxvYyhkYXNoQ291bnQgKiBzaXplb2YoZmxvYXQpKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeCA9IDA7IHggPCBkYXNoQ291bnQ7IHgrKykKICAg
ICAgICAgICAgIGxlbmd0aHNbeF0gPSBkYXNoZXNbeF07Ci0gICAgICAgIENHQ29udGV4dFNldExp
bmVEYXNoKGNvbnRleHQsIHN0eWxlLT5zdHJva2VQYWludGVyKCktPmRhc2hPZmZzZXQoKSwgbGVu
Z3RocywgZGFzaGVzLmNvdW50KCkpOworICAgICAgICBDR0NvbnRleHRTZXRMaW5lRGFzaChjb250
ZXh0LCBzdHJva2VQYWludGVyLT5kYXNoT2Zmc2V0KCksIGxlbmd0aHMsIGRhc2hlcy5jb3VudCgp
KTsKICAgICAgICAgZnJlZShsZW5ndGhzKTsKICAgICB9CiB9CkluZGV4OiBrY2FudmFzL2Rldmlj
ZS9xdWFydHovS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHoubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50
UXVhcnR6Lm1tCShyZXZpc2lvbiAxMjA4MikKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ei5tbQkod29ya2luZyBjb3B5KQpAQCAtNDAs
OCArNDAsMTEgQEAKIAogCiAvLyBNYXliZSB0aGlzIHNob3VsZCBiZSBpbiBhIGJhc2UgY2xhc3Mg
aW5zdGVhZC4uLgotc3RhdGljIHZvaWQgZHJhd1NoYWRpbmdXaXRoU3R5bGUoY29uc3QgS1JlbmRl
cmluZ1BhaW50U2VydmVyR3JhZGllbnQgKnNlcnZlciwgQ0dTaGFkaW5nUmVmIHNoYWRpbmcsIEtT
Vkc6OktDYW52YXNSZW5kZXJpbmdTdHlsZSAqY2FudmFzU3R5bGUsIEtDUGFpbnRUYXJnZXRUeXBl
IHR5cGUpCitzdGF0aWMgdm9pZCBkcmF3U2hhZGluZ1dpdGhTdHlsZShjb25zdCBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJHcmFkaWVudCAqc2VydmVyLCBDR1NoYWRpbmdSZWYgc2hhZGluZywgY29uc3Qg
S0NhbnZhc0NvbW1vbkFyZ3MgJmFyZ3MsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpCiB7CisgICAg
S1NWRzo6S0NhbnZhc1JlbmRlcmluZ1N0eWxlICpjYW52YXNTdHlsZSA9IGFyZ3MuY2FudmFzU3R5
bGUoKTsKKyAgICBraHRtbDo6UmVuZGVyU3R5bGUgKnJlbmRlclN0eWxlID0gYXJncy5yZW5kZXJT
dHlsZSgpOworICAgIGNvbnN0IFJlbmRlclBhdGggKnJlbmRlclBhdGggPSBhcmdzLnJlbmRlclBh
dGgoKTsKICAgICBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6ICpxdWFydHpEZXZpY2UgPSBzdGF0aWNf
Y2FzdDxLUmVuZGVyaW5nRGV2aWNlUXVhcnR6ICo+KFFQYWludGVyOjpyZW5kZXJpbmdEZXZpY2Uo
KSk7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBxdWFydHpEZXZpY2UtPmN1cnJlbnRDR0Nv
bnRleHQoKTsKICAgICBBU1NFUlQoY29udGV4dCAhPSBOVUxMKTsKQEAgLTY0LDExICs2NywxMSBA
QCBzdGF0aWMgdm9pZCBkcmF3U2hhZGluZ1dpdGhTdHlsZShjb25zdCBLCiAgICAgQ0dBZmZpbmVU
cmFuc2Zvcm0gZ3JhZGllbnRUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybShzZXJ2ZXItPmdy
YWRpZW50VHJhbnNmb3JtKCkucW1hdHJpeCgpKTsKICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29u
dGV4dCwgZ3JhZGllbnRUcmFuc2Zvcm0pOwogICAgIAotICAgIENHQ29udGV4dFNldEFscGhhKGNv
bnRleHQsIGNhbnZhc1N0eWxlLT5yZW5kZXJTdHlsZSgpLT5vcGFjaXR5KCkpOworICAgIENHQ29u
dGV4dFNldEFscGhhKGNvbnRleHQsIHJlbmRlclN0eWxlLT5vcGFjaXR5KCkpOwogICAgIAotICAg
IGlmICggKHR5cGUgJiBBUFBMWV9UT19GSUxMKSAmJiBjYW52YXNTdHlsZS0+aXNGaWxsZWQoKSAp
IHsKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19GSUxMKSAmJiBjYW52YXNTdHlsZS0+aXNGaWxs
ZWQocmVuZGVyU3R5bGUpKSB7CiAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7
Ci0gICAgICAgIGlmIChjYW52YXNTdHlsZS0+ZmlsbFBhaW50ZXIoKS0+ZmlsbFJ1bGUoKSA9PSBS
VUxFX0VWRU5PREQpIHsKKyAgICAgICAgaWYgKGNhbnZhc1N0eWxlLT5maWxsUGFpbnRlcihyZW5k
ZXJTdHlsZSwgcmVuZGVyUGF0aCktPmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKSB7CiAgICAg
ICAgICAgICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwpAQCAtNzcsOSArODAsOSBAQCBzdGF0aWMg
dm9pZCBkcmF3U2hhZGluZ1dpdGhTdHlsZShjb25zdCBLCiAgICAgICAgIENHQ29udGV4dFJlc3Rv
cmVHU3RhdGUoY29udGV4dCk7CiAgICAgfQogICAgIAotICAgIGlmICggKHR5cGUgJiBBUFBMWV9U
T19TVFJPS0UpICYmIGNhbnZhc1N0eWxlLT5pc1N0cm9rZWQoKSApIHsKKyAgICBpZiAoKHR5cGUg
JiBBUFBMWV9UT19TVFJPS0UpICYmIGNhbnZhc1N0eWxlLT5pc1N0cm9rZWQocmVuZGVyU3R5bGUp
KSB7CiAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0gICAgICAgIGFwcGx5
U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgY2FudmFzU3R5bGUpOyAvLyBGSVhNRTogdGhp
cyBzZWVtcyBsaWtlIHRoZSB3cm9uZyBwbGFjZSBmb3IgdGhpcy4KKyAgICAgICAgYXBwbHlTdHJv
a2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCByZW5kZXJTdHlsZSwgcmVuZGVyUGF0aCk7IC8vIEZJ
WE1FOiB0aGlzIHNlZW1zIGxpa2UgdGhlIHdyb25nIHBsYWNlIGZvciB0aGlzLgogICAgICAgICBD
R0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjb250ZXh0KTsKICAgICAgICAgQ0dD
b250ZXh0Q2xpcChjb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4
dCwgc2hhZGluZyk7CkBAIC0yOTgsNyArMzAxLDcgQEAgdm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJMaW5lYXJHcmFkaWVudAogICAgIGlmICghbV9zaGFkaW5nQ2FjaGUpCiAgICAgICAgIGNvbnN0
X2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRRdWFydHogKj4odGhpcykt
PnVwZGF0ZVF1YXJ0ekdyYWRpZW50Q2FjaGUodGhpcyk7CiAgICAgCi0gICAgZHJhd1NoYWRpbmdX
aXRoU3R5bGUodGhpcywgbV9zaGFkaW5nQ2FjaGUsIGFyZ3MuY2FudmFzU3R5bGUoKSwgdHlwZSk7
CisgICAgZHJhd1NoYWRpbmdXaXRoU3R5bGUodGhpcywgbV9zaGFkaW5nQ2FjaGUsIGFyZ3MsIHR5
cGUpOwogfQogCiB2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50UXVhcnR6
OjpkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpyZW5kZXJpbmdDb250ZXh0LCBjb25zdCBL
Q2FudmFzQ29tbW9uQXJncyAmYXJncywgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKQEAg
LTMxMSw1ICszMTQsNSBAQCB2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50
CiAgICAgaWYgKCFtX3NoYWRpbmdDYWNoZSkKICAgICAgICAgY29uc3RfY2FzdDxLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF1YXJ0eiAqPih0aGlzKS0+dXBkYXRlUXVhcnR6R3Jh
ZGllbnRDYWNoZSh0aGlzKTsKICAgICAKLSAgICBkcmF3U2hhZGluZ1dpdGhTdHlsZSh0aGlzLCBt
X3NoYWRpbmdDYWNoZSwgYXJncy5jYW52YXNTdHlsZSgpLCB0eXBlKTsKKyAgICBkcmF3U2hhZGlu
Z1dpdGhTdHlsZSh0aGlzLCBtX3NoYWRpbmdDYWNoZSwgYXJncywgdHlwZSk7CiB9CkluZGV4OiBr
Y2FudmFzL2RldmljZS9xdWFydHovUXVhcnR6U3VwcG9ydC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52
YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0LmgJKHJldmlzaW9uIDEyMDgyKQorKysga2Nh
bnZhcy9kZXZpY2UvcXVhcnR6L1F1YXJ0elN1cHBvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
OSArMjYsMTAgQEAKIAogI2ltcG9ydCAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiIC8vIGZvciBh
bGwgdGhlIENBUF9CVVRUIGNvbnRzdGFudHMsIGV0Yy4KIGNsYXNzIFFSZWN0OworY2xhc3MgUmVu
ZGVyUGF0aDsKIAotbmFtZXNwYWNlIEtTVkcgewotICAgIGNsYXNzIFNWR1JlbmRlclN0eWxlOwor
bmFtZXNwYWNlIGtodG1sIHsKKyAgICBjbGFzcyBSZW5kZXJTdHlsZTsKIH0KIAogI2lmbmRlZiBO
REVCVUcKQEAgLTQxLDcgKzQyLDcgQEAgQ0ZTdHJpbmdSZWYgQ0ZTdHJpbmdGcm9tQ0dQYXRoKENH
UGF0aFJlZgogQ0ZTdHJpbmdSZWYgQ0ZTdHJpbmdGcm9tQ0dBZmZpbmVUcmFuc2Zvcm0oQ0dBZmZp
bmVUcmFuc2Zvcm0gdCk7CiBDR0FmZmluZVRyYW5zZm9ybSBDR0FmZmluZVRyYW5zZm9ybU1ha2VN
YXBCZXR3ZWVuUmVjdHMoQ0dSZWN0IHNvdXJjZSwgQ0dSZWN0IGRlc3QpOwogCi12b2lkIGFwcGx5
U3Ryb2tlU3R5bGVUb0NvbnRleHQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIEtTVkc6OktDYW52YXNS
ZW5kZXJpbmdTdHlsZSAqc3R5bGUpOwordm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KENH
Q29udGV4dFJlZiBjb250ZXh0LCBraHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxlLCBjb25zdCBSZW5k
ZXJQYXRoICpyZW5kZXJQYXRoKTsKIAogc3RhdGljIGlubGluZSBDR0xpbmVDYXAgQ0dMaW5lQ2Fw
RnJvbUtDKCBLQ0NhcFN0eWxlIGNhcCkgewogICAgIGlmIChjYXAgPT0gQ0FQX0JVVFQpCkluZGV4
OiBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2Fu
dmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmNwcAkocmV2aXNpb24gMTIwODIpCisrKyBrY2Fu
dmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDcgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFu
biA8d2lsZGZveEBrZGUub3JnPgogICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNiAgICAgICBBbGV4YW5kZXIg
S2VsbGV0dCA8bHlwYW5vdkBrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CiAKQEAgLTI3LDYgKzI4LDggQEAgS0NhbnZhc0NvbW1vbkFyZ3M6OktDYW52
YXNDb21tb25BcmdzKCkKIHsKICAgICBtX3BhdGggPSAwOwogICAgIG1fc3R5bGUgPSAwOworICAg
IG1fcmVuZGVyU3R5bGUgPSAwOworICAgIG1fcmVuZGVyUGF0aCA9IDA7CiB9CiAKIEtDYW52YXND
b21tb25BcmdzOjp+S0NhbnZhc0NvbW1vbkFyZ3MoKQpAQCAtNTMsNiArNTYsMjYgQEAgdm9pZCBL
Q2FudmFzQ29tbW9uQXJnczo6c2V0U3R5bGUoS1NWRzo6SwogICAgIG1fc3R5bGUgPSBzdHlsZTsK
IH0KIAora2h0bWw6OlJlbmRlclN0eWxlICpLQ2FudmFzQ29tbW9uQXJnczo6cmVuZGVyU3R5bGUo
KSBjb25zdAoreworICAgIHJldHVybiBtX3JlbmRlclN0eWxlOworfQorCit2b2lkIEtDYW52YXND
b21tb25BcmdzOjpzZXRSZW5kZXJTdHlsZShraHRtbDo6UmVuZGVyU3R5bGUgKnJlbmRlclN0eWxl
KQoreworICAgIG1fcmVuZGVyU3R5bGUgPSByZW5kZXJTdHlsZTsKK30KKworY29uc3QgUmVuZGVy
UGF0aCogS0NhbnZhc0NvbW1vbkFyZ3M6OnJlbmRlclBhdGgoKSBjb25zdAoreworICAgIHJldHVy
biBtX3JlbmRlclBhdGg7Cit9CisKK3ZvaWQgS0NhbnZhc0NvbW1vbkFyZ3M6OnNldFJlbmRlclBh
dGgoY29uc3QgUmVuZGVyUGF0aCAqcmVuZGVyUGF0aCkKK3sKKyAgICBtX3JlbmRlclBhdGggPSBy
ZW5kZXJQYXRoOworfQorCiBLUmVuZGVyaW5nRGV2aWNlOjpLUmVuZGVyaW5nRGV2aWNlKCkKIHsK
IH0KSW5kZXg6IGtjYW52YXMvS0NhbnZhc1R5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9L
Q2FudmFzVHlwZXMuaAkocmV2aXNpb24gMTIwODIpCisrKyBrY2FudmFzL0tDYW52YXNUeXBlcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCwxMiBAQCBuYW1lc3BhY2UgS1NWRyB7CiAgICAg
Y2xhc3MgS0NhbnZhc1JlbmRlcmluZ1N0eWxlOwogfQogCituYW1lc3BhY2Uga2h0bWwgeworICAg
IGNsYXNzIFJlbmRlclN0eWxlOworfQorCiBjbGFzcyBLQ2FudmFzUGF0aDsKK2NsYXNzIFJlbmRl
clBhdGg7CiBjbGFzcyBLQ2FudmFzQ29tbW9uQXJncwogewogcHVibGljOgpAQCAtNDIsMTAgKzQ3
LDE4IEBAIHB1YmxpYzoKIAogICAgIEtTVkc6OktDYW52YXNSZW5kZXJpbmdTdHlsZSAqY2FudmFz
U3R5bGUoKSBjb25zdDsKICAgICB2b2lkIHNldFN0eWxlKEtTVkc6OktDYW52YXNSZW5kZXJpbmdT
dHlsZSAqc3R5bGUpOworCisgICAga2h0bWw6OlJlbmRlclN0eWxlICpyZW5kZXJTdHlsZSgpIGNv
bnN0OworICAgIHZvaWQgc2V0UmVuZGVyU3R5bGUoa2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSk7
CiAgICAgCisgICAgY29uc3QgUmVuZGVyUGF0aCogcmVuZGVyUGF0aCgpIGNvbnN0OworICAgIHZv
aWQgc2V0UmVuZGVyUGF0aChjb25zdCBSZW5kZXJQYXRoKiBwYXRoKTsKKwogcHJpdmF0ZToKICAg
ICBSZWZQdHI8S0NhbnZhc1BhdGg+IG1fcGF0aDsKICAgICBLU1ZHOjpLQ2FudmFzUmVuZGVyaW5n
U3R5bGUgKm1fc3R5bGU7CisgICAga2h0bWw6OlJlbmRlclN0eWxlICptX3JlbmRlclN0eWxlOwor
ICAgIGNvbnN0IFJlbmRlclBhdGggKm1fcmVuZGVyUGF0aDsKIH07CiAKICNlbmRpZgpJbmRleDog
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIENoYW5nZUxvZwkocmV2aXNpb24gMTIwODIpCisrKyBD
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1MiBAQAorMjAwNi0wMS0xNCAgQWxl
eGFuZGVyIEtlbGxldHQgIDxseXBhbm92QGtkZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3Igb3V0IGNhc2VzIG9mIEtDYW52YXNS
ZW5kZXJpbmdTdHlsZSB1c2VkIGFzIGFuIGluc3RhbmNlIHRvCisgICAgICAgIHN0b3JlIHRoZSBj
dXJyZW50IHN0eWxlLiBUZW1wb3JhcmlseSB1bmlmeSB0aGUgZGF0YSBwYXNzaW5nIHZpYSAKKyAg
ICAgICAgS0NhbnZhc0NvbW1vbkFyZ3MuCisKKyAgICAgICAgKiBrY2FudmFzL0tDYW52YXNJdGVt
LmNwcDogUmVtb3Zpbmcgb3ZlcnJpZGUgb2Ygc2V0U3R5bGUgdXNlZCB0byBob29rCisgICAgICAg
IGludG8gS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjp1cGRhdGVTdHlsZS4KKyAgICAgICAgKFJlbmRl
clBhdGg6OmNvbW1vbkFyZ3MpOiAKKyAgICAgICAgKiBrY2FudmFzL0tDYW52YXNJdGVtLmg6Cisg
ICAgICAgICoga2NhbnZhcy9LQ2FudmFzVHJlZURlYnVnLmNwcDoKKyAgICAgICAgKHdyaXRlU3R5
bGUpOgorICAgICAgICAqIGtjYW52YXMvS0NhbnZhc1R5cGVzLmg6CisgICAgICAgICoga2NhbnZh
cy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5jcHA6CisgICAgICAgIChLQ2FudmFzQ29tbW9uQXJn
czo6S0NhbnZhc0NvbW1vbkFyZ3MpOgorICAgICAgICAoS0NhbnZhc0NvbW1vbkFyZ3M6OnJlbmRl
clN0eWxlKToKKyAgICAgICAgKEtDYW52YXNDb21tb25BcmdzOjpzZXRSZW5kZXJTdHlsZSk6Cisg
ICAgICAgIChLQ2FudmFzQ29tbW9uQXJnczo6cmVuZGVyUGF0aCk6CisgICAgICAgIChLQ2FudmFz
Q29tbW9uQXJnczo6c2V0UmVuZGVyUGF0aCk6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L0tDYW52YXNJdGVtUXVhcnR6Lm1tOgorICAgICAgICAoS0NhbnZhc0l0ZW1RdWFydHo6OnBh
aW50KToKKyAgICAgICAgKEtDYW52YXNJdGVtUXVhcnR6OjpiYm94Rm9yUGF0aCk6CisgICAgICAg
IChLQ2FudmFzSXRlbVF1YXJ0ejo6aGl0c1BhdGgpOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ei5tbToKKyAgICAgICAg
KGRyYXdTaGFkaW5nV2l0aFN0eWxlKToKKyAgICAgICAgKEtSZW5kZXJpbmdQYWludFNlcnZlckxp
bmVhckdyYWRpZW50UXVhcnR6OjpkcmF3KToKKyAgICAgICAgKEtSZW5kZXJpbmdQYWludFNlcnZl
clJhZGlhbEdyYWRpZW50UXVhcnR6OjpkcmF3KToKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9x
dWFydHovS1JlbmRlcmluZ1BhaW50U2VydmVyUXVhcnR6Lm1tOgorICAgICAgICAoS1JlbmRlcmlu
Z1BhaW50U2VydmVyU29saWRRdWFydHo6OmRyYXcpOgorICAgICAgICAoS1JlbmRlcmluZ1BhaW50
U2VydmVyUGF0dGVyblF1YXJ0ejo6ZHJhdyk6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L1F1YXJ0elN1cHBvcnQuaDoKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdWFydHovUXVh
cnR6U3VwcG9ydC5tbToKKyAgICAgICAgKGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQpOgorICAg
ICAgICAqIGtzdmcyL21pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcDogUmVtb3ZlIG92ZXJy
aWRlRmlsbFBhaW50U2VydmVyCisgICAgICAgIGFuZCBvdmVycmlkZVN0cm9rZVBhaW50U2VydmVy
IGhhY2tzIGFuZCBtYWtlIG1vc3Qgb3RoZXIgbWV0aG9kcworICAgICAgICBzdGF0aWMsIHJlbW92
ZSBtb3N0IGluc3RhbmNlIHZhcmlhYmxlcy4KKyAgICAgICAgKEtDYW52YXNSZW5kZXJpbmdTdHls
ZTo6S0NhbnZhc1JlbmRlcmluZ1N0eWxlKToKKyAgICAgICAgKEtDYW52YXNSZW5kZXJpbmdTdHls
ZTo6aXNGaWxsZWQpOgorICAgICAgICAoS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpmaWxsUGFpbnRT
ZXJ2ZXIpOgorICAgICAgICAoS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjppc1N0cm9rZWQpOgorICAg
ICAgICAoS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpzdHJva2VQYWludFNlcnZlcik6CisgICAgICAg
IChLQ2FudmFzUmVuZGVyaW5nU3R5bGU6OnN0cm9rZVBhaW50ZXIpOiBNZXJnZWQgc3Ryb2tlIGxv
Z2ljIGluIGZyb20KKyAgICAgICAgdXBkYXRlU3R5bGUuCisgICAgICAgIChLQ2FudmFzUmVuZGVy
aW5nU3R5bGU6OmZpbGxQYWludGVyKTogTWVyZ2VkIGZpbGwgbG9naWMgaW4gZnJvbQorICAgICAg
ICB1cGRhdGVTdHlsZS4KKyAgICAgICAgKiBrc3ZnMi9taXNjL0tDYW52YXNSZW5kZXJpbmdTdHls
ZS5oOgorCiAyMDA2LTAxLTEzICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KICAgICAg
ICAgCiAgICAgICAgIENvbnZlcnQgUVNpemVGIHRvIEZsb2F0U2l6ZSBhbmQgbW92ZSBpdCB0byB0
aGUgcGxhdGZvcm0KSW5kZXg6IGtzdmcyL21pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9taXNjL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5jcHAJKHJldmlz
aW9uIDEyMDgyKQorKysga3N2ZzIvbWlzYy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw0MiArNTEsMjcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtD
YW52YXNSZW5kZXJpbmdTdHlsZTo6S0NhbnZhc1JlbmRlcmluZ1N0eWxlKGNvbnN0IGtodG1sOjpS
ZW5kZXJTdHlsZSAqc3R5bGUpCiB7Ci0gICAgbV9zdHlsZSA9IHN0eWxlOwotICAgIG1fZmlsbFBh
aW50ZXIgPSAwOwotICAgIG1fc3Ryb2tlUGFpbnRlciA9IDA7Ci0gICAgbV9maWxsUGFpbnRlclBh
aW50U2VydmVyT3ZlcnJpZGUgPSAwOwotICAgIG1fc3Ryb2tlUGFpbnRlclBhaW50U2VydmVyT3Zl
cnJpZGUgPSAwOwogfQogCiBLQ2FudmFzUmVuZGVyaW5nU3R5bGU6On5LQ2FudmFzUmVuZGVyaW5n
U3R5bGUoKQogewogfQogCi12b2lkIEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6b3ZlcnJpZGVGaWxs
UGFpbnRTZXJ2ZXIoS1JlbmRlcmluZ1BhaW50U2VydmVyICpwc2VydmVyKQorYm9vbCBLQ2FudmFz
UmVuZGVyaW5nU3R5bGU6OmlzRmlsbGVkKGNvbnN0IGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUp
CiB7Ci0gICAgQVNTRVJUKHBzZXJ2ZXItPnR5cGUoKSA9PSBQU19JTUFHRSk7Ci0gICAgZGVsZXRl
IG1fZmlsbFBhaW50ZXJQYWludFNlcnZlck92ZXJyaWRlOwotICAgIG1fZmlsbFBhaW50ZXJQYWlu
dFNlcnZlck92ZXJyaWRlID0gcHNlcnZlcjsKLX0KLQotYm9vbCBLQ2FudmFzUmVuZGVyaW5nU3R5
bGU6OmlzRmlsbGVkKCkgY29uc3QKLXsKLSAgICBTVkdQYWludEltcGwgKmZpbGwgPSBtX3N0eWxl
LT5zdmdTdHlsZSgpLT5maWxsUGFpbnQoKTsKLSAgICBpZiAoIWZpbGwpCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIHJldHVybiAobV9maWxsUGFpbnRlclBhaW50U2VydmVyT3ZlcnJpZGUgfHwg
KGZpbGwgJiYgZmlsbC0+cGFpbnRUeXBlKCkgIT0gU1ZHX1BBSU5UVFlQRV9OT05FKSk7CisgICAg
U1ZHUGFpbnRJbXBsICpmaWxsID0gc3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxQYWludCgpOworICAg
IGlmIChmaWxsICYmIGZpbGwtPnBhaW50VHlwZSgpID09IFNWR19QQUlOVFRZUEVfTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQogCiBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXIgKktDYW52YXNSZW5kZXJpbmdTdHlsZTo6ZmlsbFBhaW50U2VydmVyKGNvbnN0IGto
dG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUsIGNvbnN0IFJlbmRlclBhdGgqIGl0ZW0pCiB7Ci0gICAg
aWYgKG1fZmlsbFBhaW50ZXJQYWludFNlcnZlck92ZXJyaWRlKQotICAgICAgICByZXR1cm4gbV9m
aWxsUGFpbnRlclBhaW50U2VydmVyT3ZlcnJpZGU7Ci0KLSAgICBTVkdQYWludEltcGwgKmZpbGwg
PSBtX3N0eWxlLT5zdmdTdHlsZSgpLT5maWxsUGFpbnQoKTsKLQotICAgIGlmIChmaWxsICYmIGZp
bGwtPnBhaW50VHlwZSgpID09IFNWR19QQUlOVFRZUEVfTk9ORSkKKyAgICBpZiAoIWlzRmlsbGVk
KHN0eWxlKSkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBTVkdQYWludEltcGwgKmZpbGwgPSBz
dHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbFBhaW50KCk7CisKICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXIgKmZpbGxQYWludFNlcnZlcjsKICAgICBpZiAoIWZpbGwpIHsKICAgICAgICAgLy8gaW5pdGlh
bCB2YWx1ZSAoYmxhY2spCkBAIC0xMDIsNyArODcsNyBAQCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIg
KktDYW52YXNSZW5kZXJpbmdTCiAgICAgICAgIGZpbGxQYWludFNlcnZlciA9IFFQYWludGVyOjpy
ZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlUGFpbnRTZXJ2ZXIoS0NQYWludFNlcnZlclR5cGUoUFNf
U09MSUQpKTsKICAgICAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQgKmZpbGxQYWludFNl
cnZlclNvbGlkID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQgKj4oZmls
bFBhaW50U2VydmVyKTsKICAgICAgICAgaWYgKGZpbGwtPnBhaW50VHlwZSgpID09IFNWR19QQUlO
VFRZUEVfQ1VSUkVOVENPTE9SKQotICAgICAgICAgICAgZmlsbFBhaW50U2VydmVyU29saWQtPnNl
dENvbG9yKG1fc3R5bGUtPmNvbG9yKCkpOworICAgICAgICAgICAgZmlsbFBhaW50U2VydmVyU29s
aWQtPnNldENvbG9yKHN0eWxlLT5jb2xvcigpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ZmlsbFBhaW50U2VydmVyU29saWQtPnNldENvbG9yKGZpbGwtPmNvbG9yKCkpOwogICAgIH0KQEAg
LTExMCwzMCArOTUsMjIgQEAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpLQ2FudmFzUmVuZGVyaW5n
UwogICAgIHJldHVybiBmaWxsUGFpbnRTZXJ2ZXI7CiB9CiAKLXZvaWQgS0NhbnZhc1JlbmRlcmlu
Z1N0eWxlOjpvdmVycmlkZVN0cm9rZVBhaW50U2VydmVyKEtSZW5kZXJpbmdQYWludFNlcnZlciAq
cHNlcnZlcikKLXsKLSAgICBzdHJva2VQYWludGVyKCktPnNldERpcnR5KCk7Ci0gICAgQVNTRVJU
KHBzZXJ2ZXItPnR5cGUoKSA9PSBQU19JTUFHRSk7Ci0gICAgZGVsZXRlIG1fc3Ryb2tlUGFpbnRl
clBhaW50U2VydmVyT3ZlcnJpZGU7Ci0gICAgbV9zdHJva2VQYWludGVyUGFpbnRTZXJ2ZXJPdmVy
cmlkZSA9IHBzZXJ2ZXI7Ci19CiAKLWJvb2wgS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjppc1N0cm9r
ZWQoKSBjb25zdAorYm9vbCBLQ2FudmFzUmVuZGVyaW5nU3R5bGU6OmlzU3Ryb2tlZChjb25zdCBr
aHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxlKQogewotICAgIFNWR1BhaW50SW1wbCAqc3Ryb2tlID0g
bV9zdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlUGFpbnQoKTsKLSAgICByZXR1cm4gKHN0cm9rZSAm
JiBzdHJva2UtPnBhaW50VHlwZSgpICE9IFNWR19QQUlOVFRZUEVfTk9ORSk7CisgICAgU1ZHUGFp
bnRJbXBsICpzdHJva2UgPSBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlUGFpbnQoKTsKKyAgICBp
ZiAoIXN0cm9rZSB8fCBzdHJva2UtPnBhaW50VHlwZSgpID09IFNWR19QQUlOVFRZUEVfTk9ORSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQogCiBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXIgKktDYW52YXNSZW5kZXJpbmdTdHlsZTo6c3Ryb2tlUGFpbnRTZXJ2ZXIoY29u
c3Qga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSwgY29uc3QgUmVuZGVyUGF0aCogaXRlbSkKIHsK
LSAgICBpZiAobV9zdHJva2VQYWludGVyUGFpbnRTZXJ2ZXJPdmVycmlkZSkgCi0gICAgICAgIHJl
dHVybiBtX3N0cm9rZVBhaW50ZXJQYWludFNlcnZlck92ZXJyaWRlOwotCi0gICAgU1ZHUGFpbnRJ
bXBsICpzdHJva2UgPSBtX3N0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VQYWludCgpOwotCi0gICAg
aWYgKCFzdHJva2UgfHwgc3Ryb2tlLT5wYWludFR5cGUoKSA9PSBTVkdfUEFJTlRUWVBFX05PTkUp
CisgICAgaWYgKCFpc1N0cm9rZWQoc3R5bGUpKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIFNW
R1BhaW50SW1wbCAqc3Ryb2tlID0gc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZVBhaW50KCk7CisK
ICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnN0cm9rZVBhaW50U2VydmVyOwogICAgIGlmIChz
dHJva2UgJiYgc3Ryb2tlLT5wYWludFR5cGUoKSA9PSBTVkdfUEFJTlRUWVBFX1VSSSkgewogICAg
ICAgICBLRE9NOjpET01TdHJpbmcgaWQoc3Ryb2tlLT51cmkoKSk7CkBAIC0xNDQsNyArMTIxLDcg
QEAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpLQ2FudmFzUmVuZGVyaW5nUwogICAgICAgICBzdHJv
a2VQYWludFNlcnZlciA9IFFQYWludGVyOjpyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlUGFpbnRT
ZXJ2ZXIoS0NQYWludFNlcnZlclR5cGUoUFNfU09MSUQpKTsKICAgICAgICAgS1JlbmRlcmluZ1Bh
aW50U2VydmVyU29saWQgKnN0cm9rZVBhaW50U2VydmVyU29saWQgPSBzdGF0aWNfY2FzdDxLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZCAqPihzdHJva2VQYWludFNlcnZlcik7CiAgICAgICAgIGlm
IChzdHJva2UtPnBhaW50VHlwZSgpID09IFNWR19QQUlOVFRZUEVfQ1VSUkVOVENPTE9SKQotICAg
ICAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXJTb2xpZC0+c2V0Q29sb3IobV9zdHlsZS0+Y29sb3Io
KSk7CisgICAgICAgICAgICBzdHJva2VQYWludFNlcnZlclNvbGlkLT5zZXRDb2xvcihzdHlsZS0+
Y29sb3IoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHN0cm9rZVBhaW50U2VydmVyU29s
aWQtPnNldENvbG9yKHN0cm9rZS0+Y29sb3IoKSk7CiAgICAgfQpAQCAtMTUyLDQyICsxMjksNiBA
QCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKktDYW52YXNSZW5kZXJpbmdTCiAgICAgcmV0dXJuIHN0
cm9rZVBhaW50U2VydmVyOwogfQogCi12b2lkIEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6dXBkYXRl
U3R5bGUoY29uc3Qga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSwgUmVuZGVyUGF0aCAqaXRlbSkK
LXsKLSAgICBtX3N0eWxlID0gc3R5bGU7Ci0gICAgCi0gICAgZmlsbFBhaW50ZXIoKS0+c2V0Rmls
bFJ1bGUobV9zdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSA9PSBXUl9OT05aRVJPID8gUlVM
RV9OT05aRVJPIDogUlVMRV9FVkVOT0REKTsKLSAgICBmaWxsUGFpbnRlcigpLT5zZXRPcGFjaXR5
KG1fc3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxPcGFjaXR5KCkpOwotCi0gICAgc3Ryb2tlUGFpbnRl
cigpLT5zZXRPcGFjaXR5KG1fc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU9wYWNpdHkoKSk7Ci0g
ICAgc3Ryb2tlUGFpbnRlcigpLT5zZXRTdHJva2VXaWR0aChLQ2FudmFzUmVuZGVyaW5nU3R5bGU6
OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKGl0ZW0sIG1fc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZVdp
ZHRoKCksIDEuMCkpOwotCi0gICAgS0RPTTo6Q1NTVmFsdWVMaXN0SW1wbCAqZGFzaGVzID0gbV9z
dHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaEFycmF5KCk7Ci0gICAgaWYgKGRhc2hlcykgewot
ICAgICAgICBLRE9NOjpDU1NQcmltaXRpdmVWYWx1ZUltcGwgKmRhc2ggPSAwOwotICAgICAgICBR
M1BhaW50RGV2aWNlTWV0cmljcyAqcGFpbnREZXZpY2VNZXRyaWNzID0gMDsKLQotICAgICAgICBT
VkdFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnRJbXBsICo+KGl0
ZW0tPmVsZW1lbnQoKSk7Ci0gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPm93bmVyRG9j
dW1lbnQoKSkKLSAgICAgICAgICAgIHBhaW50RGV2aWNlTWV0cmljcyA9IGVsZW1lbnQtPm93bmVy
RG9jdW1lbnQoKS0+cGFpbnREZXZpY2VNZXRyaWNzKCk7Ci0KLSAgICAgICAgS0NEYXNoQXJyYXkg
YXJyYXk7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuID0gZGFzaGVzLT5sZW5ndGgoKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAg
ICAgIGRhc2ggPSBzdGF0aWNfY2FzdDxLRE9NOjpDU1NQcmltaXRpdmVWYWx1ZUltcGwgKj4oZGFz
aGVzLT5pdGVtKGkpKTsKLSAgICAgICAgICAgIGlmIChkYXNoKQotICAgICAgICAgICAgICAgIGFy
cmF5LmFwcGVuZCgoZmxvYXQpIGRhc2gtPmNvbXB1dGVMZW5ndGhGbG9hdChjb25zdF9jYXN0PGto
dG1sOjpSZW5kZXJTdHlsZSAqPihtX3N0eWxlKSwgcGFpbnREZXZpY2VNZXRyaWNzKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBzdHJva2VQYWludGVyKCktPnNldERhc2hBcnJheShhcnJheSk7Ci0g
ICAgICAgIHN0cm9rZVBhaW50ZXIoKS0+c2V0RGFzaE9mZnNldChLQ2FudmFzUmVuZGVyaW5nU3R5
bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKGl0ZW0sIG1fc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9r
ZURhc2hPZmZzZXQoKSwgMC4wKSk7Ci0gICAgfQotCi0gICAgc3Ryb2tlUGFpbnRlcigpLT5zZXRT
dHJva2VNaXRlckxpbWl0KG1fc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU1pdGVyTGltaXQoKSk7
Ci0gICAgc3Ryb2tlUGFpbnRlcigpLT5zZXRTdHJva2VDYXBTdHlsZSgoS0NDYXBTdHlsZSkgbV9z
dHlsZS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSk7Ci0gICAgc3Ryb2tlUGFpbnRlcigpLT5zZXRT
dHJva2VKb2luU3R5bGUoKEtDSm9pblN0eWxlKSBtX3N0eWxlLT5zdmdTdHlsZSgpLT5qb2luU3R5
bGUoKSk7Ci19Ci0KIGRvdWJsZSBLQ2FudmFzUmVuZGVyaW5nU3R5bGU6OmNzc1ByaW1pdGl2ZVRv
TGVuZ3RoKGNvbnN0IFJlbmRlclBhdGggKml0ZW0sIEtET006OkNTU1ZhbHVlSW1wbCAqdmFsdWUs
IGRvdWJsZSBkZWZhdWx0VmFsdWUpCiB7CiAgICAgS0RPTTo6Q1NTUHJpbWl0aXZlVmFsdWVJbXBs
ICpwcmltaXRpdmUgPSBzdGF0aWNfY2FzdDxLRE9NOjpDU1NQcmltaXRpdmVWYWx1ZUltcGwgKj4o
dmFsdWUpOwpAQCAtMjE1LDIwICsxNTYsNDkgQEAgZG91YmxlIEtDYW52YXNSZW5kZXJpbmdTdHls
ZTo6Y3NzUHJpbWl0aQogICAgIHJldHVybiBwcmltaXRpdmUtPmNvbXB1dGVMZW5ndGhGbG9hdChj
b25zdF9jYXN0PGtodG1sOjpSZW5kZXJTdHlsZSAqPihpdGVtLT5zdHlsZSgpKSwgcGFpbnREZXZp
Y2VNZXRyaWNzKTsKIH0KIAotS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIgKktDYW52YXNSZW5kZXJp
bmdTdHlsZTo6c3Ryb2tlUGFpbnRlcigpCitLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlciAqS0NhbnZh
c1JlbmRlcmluZ1N0eWxlOjpzdHJva2VQYWludGVyKGNvbnN0IGtodG1sOjpSZW5kZXJTdHlsZSAq
c3R5bGUsIGNvbnN0IFJlbmRlclBhdGggKml0ZW0pCiB7Ci0gICAgaWYoIW1fc3Ryb2tlUGFpbnRl
cikKLSAgICAgICAgbV9zdHJva2VQYWludGVyID0gbmV3IEtSZW5kZXJpbmdTdHJva2VQYWludGVy
KCk7CisgICAgS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIgKnN0cm9rZVBhaW50ZXIgPSBuZXcgS1Jl
bmRlcmluZ1N0cm9rZVBhaW50ZXIoKTsKKworICAgIHN0cm9rZVBhaW50ZXItPnNldE9wYWNpdHko
c3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU9wYWNpdHkoKSk7CisgICAgc3Ryb2tlUGFpbnRlci0+
c2V0U3Ryb2tlV2lkdGgoS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0
aChpdGVtLCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgoKSwgMS4wKSk7CiAKLSAgICBy
ZXR1cm4gbV9zdHJva2VQYWludGVyOworICAgIEtET006OkNTU1ZhbHVlTGlzdEltcGwgKmRhc2hl
cyA9IHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VEYXNoQXJyYXkoKTsKKyAgICBpZiAoZGFzaGVz
KSB7CisgICAgICAgIEtET006OkNTU1ByaW1pdGl2ZVZhbHVlSW1wbCAqZGFzaCA9IDA7CisgICAg
ICAgIFEzUGFpbnREZXZpY2VNZXRyaWNzICpwYWludERldmljZU1ldHJpY3MgPSAwOworCisgICAg
ICAgIFNWR0VsZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudEltcGwg
Kj4oaXRlbS0+ZWxlbWVudCgpKTsKKyAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+b3du
ZXJEb2N1bWVudCgpKQorICAgICAgICAgICAgcGFpbnREZXZpY2VNZXRyaWNzID0gZWxlbWVudC0+
b3duZXJEb2N1bWVudCgpLT5wYWludERldmljZU1ldHJpY3MoKTsKKworICAgICAgICBLQ0Rhc2hB
cnJheSBhcnJheTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsZW4gPSBkYXNoZXMtPmxlbmd0aCgp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAg
ICAgICAgICAgZGFzaCA9IHN0YXRpY19jYXN0PEtET006OkNTU1ByaW1pdGl2ZVZhbHVlSW1wbCAq
PihkYXNoZXMtPml0ZW0oaSkpOworICAgICAgICAgICAgaWYgKGRhc2gpCisgICAgICAgICAgICAg
ICAgYXJyYXkuYXBwZW5kKChmbG9hdCkgZGFzaC0+Y29tcHV0ZUxlbmd0aEZsb2F0KGNvbnN0X2Nh
c3Q8a2h0bWw6OlJlbmRlclN0eWxlICo+KHN0eWxlKSwgcGFpbnREZXZpY2VNZXRyaWNzKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBzdHJva2VQYWludGVyLT5zZXREYXNoQXJyYXkoYXJyYXkpOwor
ICAgICAgICBzdHJva2VQYWludGVyLT5zZXREYXNoT2Zmc2V0KEtDYW52YXNSZW5kZXJpbmdTdHls
ZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgoaXRlbSwgc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZURh
c2hPZmZzZXQoKSwgMC4wKSk7CisgICAgfQorCisgICAgc3Ryb2tlUGFpbnRlci0+c2V0U3Ryb2tl
TWl0ZXJMaW1pdChzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlTWl0ZXJMaW1pdCgpKTsKKyAgICBz
dHJva2VQYWludGVyLT5zZXRTdHJva2VDYXBTdHlsZSgoS0NDYXBTdHlsZSkgc3R5bGUtPnN2Z1N0
eWxlKCktPmNhcFN0eWxlKCkpOworICAgIHN0cm9rZVBhaW50ZXItPnNldFN0cm9rZUpvaW5TdHls
ZSgoS0NKb2luU3R5bGUpIHN0eWxlLT5zdmdTdHlsZSgpLT5qb2luU3R5bGUoKSk7CisKKyAgICBy
ZXR1cm4gc3Ryb2tlUGFpbnRlcjsKIH0KIAotS1JlbmRlcmluZ0ZpbGxQYWludGVyICpLQ2FudmFz
UmVuZGVyaW5nU3R5bGU6OmZpbGxQYWludGVyKCkKK0tSZW5kZXJpbmdGaWxsUGFpbnRlciAqS0Nh
bnZhc1JlbmRlcmluZ1N0eWxlOjpmaWxsUGFpbnRlcihjb25zdCBraHRtbDo6UmVuZGVyU3R5bGUg
KnN0eWxlLCBjb25zdCBSZW5kZXJQYXRoICppdGVtKQogewotICAgIGlmKCFtX2ZpbGxQYWludGVy
KQotICAgICAgICBtX2ZpbGxQYWludGVyID0gbmV3IEtSZW5kZXJpbmdGaWxsUGFpbnRlcigpOwor
ICAgIEtSZW5kZXJpbmdGaWxsUGFpbnRlciAqZmlsbFBhaW50ZXIgPSBuZXcgS1JlbmRlcmluZ0Zp
bGxQYWludGVyKCk7CiAgICAgCi0gICAgcmV0dXJuIG1fZmlsbFBhaW50ZXI7CisgICAgZmlsbFBh
aW50ZXItPnNldEZpbGxSdWxlKHN0eWxlLT5zdmdTdHlsZSgpLT5maWxsUnVsZSgpID09IFdSX05P
TlpFUk8gPyBSVUxFX05PTlpFUk8gOiBSVUxFX0VWRU5PREQpOworICAgIGZpbGxQYWludGVyLT5z
ZXRPcGFjaXR5KHN0eWxlLT5zdmdTdHlsZSgpLT5maWxsT3BhY2l0eSgpKTsKKworICAgIHJldHVy
biBmaWxsUGFpbnRlcjsKIH0KIAogLy8gdmltOnRzPTQ6bm9ldApJbmRleDoga3N2ZzIvbWlzYy9L
Q2FudmFzUmVuZGVyaW5nU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9taXNjL0tDYW52YXNS
ZW5kZXJpbmdTdHlsZS5oCShyZXZpc2lvbiAxMjA4MikKKysrIGtzdmcyL21pc2MvS0NhbnZhc1Jl
bmRlcmluZ1N0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICAgIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9y
Zz4KICAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
KyAgICAgICAgICAgICAgICAgIDIwMDYgICAgICAgQWxleGFuZGVyIEtlbGxldHQgPGx5cGFub3ZA
a2RlLm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBA
IC02OCwzNyArNjksMTkgQEAgbmFtZXNwYWNlIEtTVkcKICAgICAgICAgS0NhbnZhc1JlbmRlcmlu
Z1N0eWxlKGNvbnN0IGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUpOwogICAgICAgICB+S0NhbnZh
c1JlbmRlcmluZ1N0eWxlKCk7CiAKLSAgICAgICAgdm9pZCB1cGRhdGVTdHlsZShjb25zdCBraHRt
bDo6UmVuZGVyU3R5bGUgKnN0eWxlLCBSZW5kZXJQYXRoICppdGVtKTsKKyAgICAgICAgc3RhdGlj
IEtSZW5kZXJpbmdGaWxsUGFpbnRlciAqZmlsbFBhaW50ZXIoY29uc3Qga2h0bWw6OlJlbmRlclN0
eWxlICpzdHlsZSwgY29uc3QgUmVuZGVyUGF0aCAqaXRlbSk7CisgICAgICAgIHN0YXRpYyBLUmVu
ZGVyaW5nU3Ryb2tlUGFpbnRlciAqc3Ryb2tlUGFpbnRlcihjb25zdCBraHRtbDo6UmVuZGVyU3R5
bGUgKnN0eWxlLCBjb25zdCBSZW5kZXJQYXRoICppdGVtKTsKIAotICAgICAgICAvLyBTdHJva2Ug
KGFrYSBQZW4pIHByb3BlcnRpZXMKLSAgICAgICAgYm9vbCBpc1N0cm9rZWQoKSBjb25zdDsKKyAg
ICAgICAgc3RhdGljIGJvb2wgaXNTdHJva2VkKGNvbnN0IGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5
bGUpOworICAgICAgICBzdGF0aWMgS1JlbmRlcmluZ1BhaW50U2VydmVyICpzdHJva2VQYWludFNl
cnZlcihjb25zdCBraHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxlLCBjb25zdCBSZW5kZXJQYXRoKik7
CiAKLSAgICAgICAgS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIgKnN0cm9rZVBhaW50ZXIoKTsKLSAg
ICAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpzdHJva2VQYWludFNlcnZlcihjb25zdCBraHRt
bDo6UmVuZGVyU3R5bGUgKnN0eWxlLCBjb25zdCBSZW5kZXJQYXRoKik7Ci0gICAgICAgIHZvaWQg
b3ZlcnJpZGVTdHJva2VQYWludFNlcnZlcihLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnBzZXJ2ZXIp
OworICAgICAgICBzdGF0aWMgYm9vbCBpc0ZpbGxlZChjb25zdCBraHRtbDo6UmVuZGVyU3R5bGUg
KnN0eWxlKTsKKyAgICAgICAgc3RhdGljIEtSZW5kZXJpbmdQYWludFNlcnZlciAqZmlsbFBhaW50
U2VydmVyKGNvbnN0IGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUsIGNvbnN0IFJlbmRlclBhdGgq
KTsKIAogICAgICAgICBzdGF0aWMgZG91YmxlIGNzc1ByaW1pdGl2ZVRvTGVuZ3RoKGNvbnN0IFJl
bmRlclBhdGggKml0ZW0sIEtET006OkNTU1ZhbHVlSW1wbCAqdmFsdWUsIGRvdWJsZSBkZWZhdWx0
VmFsdWUgPSAwLjApOwotCi0gICAgICAgIC8vIEZpbGwgKGFrYSBCcnVzaCkgcHJvcGVydGllcwot
ICAgICAgICBib29sIGlzRmlsbGVkKCkgY29uc3Q7Ci0KLSAgICAgICAgS1JlbmRlcmluZ0ZpbGxQ
YWludGVyICpmaWxsUGFpbnRlcigpOwotICAgICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKmZp
bGxQYWludFNlcnZlcihjb25zdCBraHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxlLCBjb25zdCBSZW5k
ZXJQYXRoKik7Ci0gICAgICAgIHZvaWQgb3ZlcnJpZGVGaWxsUGFpbnRTZXJ2ZXIoS1JlbmRlcmlu
Z1BhaW50U2VydmVyICpwc2VydmVyKTsKLQotICAgICAgICBjb25zdCBraHRtbDo6UmVuZGVyU3R5
bGUgKnJlbmRlclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQogICAgICAgICAKICAg
ICBwcml2YXRlOgogICAgICAgICBLQ2FudmFzUmVuZGVyaW5nU3R5bGUoY29uc3QgS0NhbnZhc1Jl
bmRlcmluZ1N0eWxlICZvdGhlcik7Ci0KLSAgICAgICAgY29uc3Qga2h0bWw6OlJlbmRlclN0eWxl
ICptX3N0eWxlOwotCi0gICAgICAgIC8vIEtDYW52YXMgc3R1ZmYKLSAgICAgICAgS1JlbmRlcmlu
Z0ZpbGxQYWludGVyICptX2ZpbGxQYWludGVyOwotICAgICAgICBLUmVuZGVyaW5nU3Ryb2tlUGFp
bnRlciAqbV9zdHJva2VQYWludGVyOwotCi0gICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAq
bV9maWxsUGFpbnRlclBhaW50U2VydmVyT3ZlcnJpZGU7Ci0gICAgICAgIEtSZW5kZXJpbmdQYWlu
dFNlcnZlciAqbV9zdHJva2VQYWludGVyUGFpbnRTZXJ2ZXJPdmVycmlkZTsKICAgICB9OwogfTsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5658</attachid>
            <date>2006-01-14 02:41:21 -0800</date>
            <delta_ts>2006-01-14 17:54:02 -0800</delta_ts>
            <desc>remove m_style from kcanvasrenderingstyle and make used methods static</desc>
            <filename>refactor-renderstyle-patch2-2.patch</filename>
            <type>text/plain</type>
            <size>35288</size>
            <attacher name="Alexander Kellett">a</attacher>
            
              <data encoding="base64">SW5kZXg6IGtjYW52YXMvS0NhbnZhc0l0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvS0Nh
bnZhc0l0ZW0uY3BwCShyZXZpc2lvbiAxMjA4NCkKKysrIGtjYW52YXMvS0NhbnZhc0l0ZW0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OSwxMiArNjksNiBAQCBSZW5kZXJQYXRoOjp+UmVuZGVyUGF0
aCgpCiAgICAgZGVsZXRlIGQ7CiB9CiAKLXZvaWQgUmVuZGVyUGF0aDo6c2V0U3R5bGUoa2h0bWw6
OlJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAgICBkLT5zdHlsZS0+dXBkYXRlU3R5bGUoc3R5bGUs
IHRoaXMpOwotICAgIGtodG1sOjpSZW5kZXJPYmplY3Q6OnNldFN0eWxlKHN0eWxlKTsKLX0KLQog
UU1hdHJpeCBSZW5kZXJQYXRoOjpsb2NhbFRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGQtPm1hdHJpeDsKQEAgLTE0MSw2ICsxMzUsOCBAQCBjb25zdCBLQ2FudmFzQ29tbW9uQXJncyBS
ZW5kZXJQYXRoOjpjb21tCiAgICAgS0NhbnZhc0NvbW1vbkFyZ3MgYXJnczsKICAgICBhcmdzLnNl
dFBhdGgocGF0aCgpKTsKICAgICBhcmdzLnNldFN0eWxlKGNhbnZhc1N0eWxlKCkpOworICAgIGFy
Z3Muc2V0UmVuZGVyU3R5bGUoc3R5bGUoKSk7CisgICAgYXJncy5zZXRSZW5kZXJQYXRoKHRoaXMp
OwogICAgIHJldHVybiBhcmdzOwogfQogCkluZGV4OiBrY2FudmFzL0tDYW52YXNJdGVtLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga2NhbnZhcy9LQ2FudmFzSXRlbS5oCShyZXZpc2lvbiAxMjA4NCkKKysrIGtj
YW52YXMvS0NhbnZhc0l0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNiBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjaGFuZ2VQYXRoKEtDYW52YXNQYXRoKiBuZXdQYXRoKTsKIAogICAgIEtD
YW52YXNQYXRoKiBwYXRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKGtodG1s
OjpSZW5kZXJTdHlsZSAqc3R5bGUpOwogICAgIEtTVkc6OktDYW52YXNSZW5kZXJpbmdTdHlsZSAq
Y2FudmFzU3R5bGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclBhdGgoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBrY2FudmFzL0tDYW52YXNUcmVlRGVidWcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtjYW52YXMvS0NhbnZhc1RyZWVEZWJ1Zy5jcHAJKHJldmlzaW9uIDEy
MDg0KQorKysga2NhbnZhcy9LQ2FudmFzVHJlZURlYnVnLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQ0LDQ4ICsyNDQsNDggQEAgc3RhdGljIHZvaWQgd3JpdGVTdHlsZShRVGV4dFN0cmVhbSAmdHMs
IAogICAgIGlmIChvYmplY3QuaXNSZW5kZXJQYXRoKCkpIHsKICAgICAgICAgY29uc3QgUmVuZGVy
UGF0aCAmcGF0aCA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclBhdGggJj4ob2JqZWN0KTsKICAg
ICAgICAgS0NhbnZhc1JlbmRlcmluZ1N0eWxlICpjYW52YXNTdHlsZSA9IHBhdGguY2FudmFzU3R5
bGUoKTsKLSAgICAgICAgaWYgKGNhbnZhc1N0eWxlLT5pc1N0cm9rZWQoKSkgeworICAgICAgICBL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnN0cm9rZVBhaW50U2VydmVyID0gY2FudmFzU3R5bGUtPnN0
cm9rZVBhaW50U2VydmVyKHN0eWxlLCAmcGF0aCk7CisgICAgICAgIGlmIChzdHJva2VQYWludFNl
cnZlcikgewogICAgICAgICAgICAgUVRleHRTdHJlYW1TZXBhcmF0b3IgcygiICIpOwogICAgICAg
ICAgICAgdHMgPDwgIiBbc3Ryb2tlPXsiOwotICAgICAgICAgICAgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyICpzdHJva2VQYWludFNlcnZlciA9IGNhbnZhc1N0eWxlLT5zdHJva2VQYWludFNlcnZlcihz
dHlsZSwgJnBhdGgpOwogICAgICAgICAgICAgaWYgKHN0cm9rZVBhaW50U2VydmVyKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKCFzdHJva2VQYWludFNlcnZlci0+aWRJblJlZ2lzdHJ5KCkuaXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbaWQ9XCIiPDwgc3Ryb2tlUGFp
bnRTZXJ2ZXItPmlkSW5SZWdpc3RyeSgpIDw8ICJcIl0iOyAKICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgKnN0cm9rZVBhaW50U2VydmVyOwogICAg
ICAgICAgICAgfSAKLSAgICAgICAgICAgIEtSZW5kZXJpbmdTdHJva2VQYWludGVyICpwID0gY2Fu
dmFzU3R5bGUtPnN0cm9rZVBhaW50ZXIoKTsKLSAgICAgICAgICAgIGlmIChwLT5vcGFjaXR5KCkg
IT0gMS4wZikKLSAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbb3BhY2l0eT0iIDw8IHAtPm9w
YWNpdHkoKSA8PCAiXSI7Ci0gICAgICAgICAgICBpZiAocC0+c3Ryb2tlV2lkdGgoKSAhPSAxLjBm
KQotICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltzdHJva2Ugd2lkdGg9IiA8PCBwLT5zdHJv
a2VXaWR0aCgpIDw8ICJdIjsKLSAgICAgICAgICAgIGlmIChwLT5zdHJva2VNaXRlckxpbWl0KCkg
IT0gNCkKLSAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbbWl0ZXIgbGltaXQ9IiA8PCBwLT5z
dHJva2VNaXRlckxpbWl0KCkgPDwgIl0iOwotICAgICAgICAgICAgaWYgKHAtPnN0cm9rZUNhcFN0
eWxlKCkgIT0gMSkKLSAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbbGluZSBjYXA9IiA8PCBw
LT5zdHJva2VDYXBTdHlsZSgpIDw8ICJdIjsKLSAgICAgICAgICAgIGlmIChwLT5zdHJva2VKb2lu
U3R5bGUoKSAhPSAxKQotICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltsaW5lIGpvaW49IiA8
PCBwLT5zdHJva2VKb2luU3R5bGUoKSA8PCAiXSI7Ci0gICAgICAgICAgICBpZiAocC0+ZGFzaE9m
ZnNldCgpICE9IDAuMGYpCi0gICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAiW2Rhc2ggb2Zmc2V0
PSIgPDwgcC0+ZGFzaE9mZnNldCgpIDw8ICJdIjsKLSAgICAgICAgICAgIGlmICghcC0+ZGFzaEFy
cmF5KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltkYXNoIGFycmF5
PSIgPDwgcC0+ZGFzaEFycmF5KCkgPDwgIl0iOyAgICAgICAgCisgICAgICAgICAgICBLUmVuZGVy
aW5nU3Ryb2tlUGFpbnRlciBwID0gY2FudmFzU3R5bGUtPnN0cm9rZVBhaW50ZXIoc3R5bGUsICZw
YXRoKTsKKyAgICAgICAgICAgIGlmIChwLm9wYWNpdHkoKSAhPSAxLjBmKQorICAgICAgICAgICAg
ICAgIHRzIDw8IHMgPDwgIltvcGFjaXR5PSIgPDwgcC5vcGFjaXR5KCkgPDwgIl0iOworICAgICAg
ICAgICAgaWYgKHAuc3Ryb2tlV2lkdGgoKSAhPSAxLjBmKQorICAgICAgICAgICAgICAgIHRzIDw8
IHMgPDwgIltzdHJva2Ugd2lkdGg9IiA8PCBwLnN0cm9rZVdpZHRoKCkgPDwgIl0iOworICAgICAg
ICAgICAgaWYgKHAuc3Ryb2tlTWl0ZXJMaW1pdCgpICE9IDQpCisgICAgICAgICAgICAgICAgdHMg
PDwgcyA8PCAiW21pdGVyIGxpbWl0PSIgPDwgcC5zdHJva2VNaXRlckxpbWl0KCkgPDwgIl0iOwor
ICAgICAgICAgICAgaWYgKHAuc3Ryb2tlQ2FwU3R5bGUoKSAhPSAxKQorICAgICAgICAgICAgICAg
IHRzIDw8IHMgPDwgIltsaW5lIGNhcD0iIDw8IHAuc3Ryb2tlQ2FwU3R5bGUoKSA8PCAiXSI7Cisg
ICAgICAgICAgICBpZiAocC5zdHJva2VKb2luU3R5bGUoKSAhPSAxKQorICAgICAgICAgICAgICAg
IHRzIDw8IHMgPDwgIltsaW5lIGpvaW49IiA8PCBwLnN0cm9rZUpvaW5TdHlsZSgpIDw8ICJdIjsK
KyAgICAgICAgICAgIGlmIChwLmRhc2hPZmZzZXQoKSAhPSAwLjBmKQorICAgICAgICAgICAgICAg
IHRzIDw8IHMgPDwgIltkYXNoIG9mZnNldD0iIDw8IHAuZGFzaE9mZnNldCgpIDw8ICJdIjsKKyAg
ICAgICAgICAgIGlmICghcC5kYXNoQXJyYXkoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
dHMgPDwgcyA8PCAiW2Rhc2ggYXJyYXk9IiA8PCBwLmRhc2hBcnJheSgpIDw8ICJdIjsgICAgICAg
IAogICAgICAgICAgICAgdHMgPDwgIn1dIjsKICAgICAgICAgfQotICAgICAgICBpZiAoY2FudmFz
U3R5bGUtPmlzRmlsbGVkKCkpIHsKKyAgICAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpmaWxs
UGFpbnRTZXJ2ZXIgPSBjYW52YXNTdHlsZS0+ZmlsbFBhaW50U2VydmVyKHN0eWxlLCAmcGF0aCk7
CisgICAgICAgIGlmIChmaWxsUGFpbnRTZXJ2ZXIpIHsKICAgICAgICAgICAgIFFUZXh0U3RyZWFt
U2VwYXJhdG9yIHMoIiAiKTsKICAgICAgICAgICAgIHRzIDw8ICIgW2ZpbGw9eyI7Ci0gICAgICAg
ICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKmZpbGxQYWludFNlcnZlciA9IGNhbnZhc1N0eWxl
LT5maWxsUGFpbnRTZXJ2ZXIoc3R5bGUsICZwYXRoKTsKICAgICAgICAgICAgIGlmIChmaWxsUGFp
bnRTZXJ2ZXIpIHsKICAgICAgICAgICAgICAgICBpZiAoIWZpbGxQYWludFNlcnZlci0+aWRJblJl
Z2lzdHJ5KCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbaWQ9
XCIiIDw8IGZpbGxQYWludFNlcnZlci0+aWRJblJlZ2lzdHJ5KCkgPDwgIlwiXSI7CiAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICpmaWxsUGFpbnRT
ZXJ2ZXI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBLUmVuZGVyaW5nRmlsbFBhaW50ZXIg
KnAgPSBjYW52YXNTdHlsZS0+ZmlsbFBhaW50ZXIoKTsKLSAgICAgICAgICAgIGlmIChwLT5vcGFj
aXR5KCkgIT0gMS4wZikKLSAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbb3BhY2l0eT0iIDw8
IHAtPm9wYWNpdHkoKSA8PCAiXSI7Ci0gICAgICAgICAgICBpZiAocC0+ZmlsbFJ1bGUoKSAhPSBS
VUxFX05PTlpFUk8pCi0gICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAiW2ZpbGwgcnVsZT0iIDw8
IHAtPmZpbGxSdWxlKCkgPDwgIl0iOworICAgICAgICAgICAgS1JlbmRlcmluZ0ZpbGxQYWludGVy
IHAgPSBjYW52YXNTdHlsZS0+ZmlsbFBhaW50ZXIoc3R5bGUsICZwYXRoKTsKKyAgICAgICAgICAg
IGlmIChwLm9wYWNpdHkoKSAhPSAxLjBmKQorICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltv
cGFjaXR5PSIgPDwgcC5vcGFjaXR5KCkgPDwgIl0iOworICAgICAgICAgICAgaWYgKHAuZmlsbFJ1
bGUoKSAhPSBSVUxFX05PTlpFUk8pCisgICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAiW2ZpbGwg
cnVsZT0iIDw8IHAuZmlsbFJ1bGUoKSA8PCAiXSI7CiAgICAgICAgICAgICB0cyA8PCAifV0iOwog
ICAgICAgICB9CiAgICAgfQpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVt
UXVhcnR6Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzSXRl
bVF1YXJ0ei5tbQkocmV2aXNpb24gMTIwODQpCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovS0Nh
bnZhc0l0ZW1RdWFydHoubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2lt
cG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogCisjaW1wb3J0ICJrY2FudmFzL1JlbmRlclBh
dGguaCIKICNpbXBvcnQgImtjYW52YXMvS0NhbnZhcy5oIgogI2ltcG9ydCAiS0NhbnZhc1JlbmRl
cmluZ1N0eWxlLmgiCiAjaW1wb3J0ICJLUmVuZGVyaW5nRmlsbFBhaW50ZXIuaCIKQEAgLTIyMSwx
MyArMjIyLDEzIEBAIHZvaWQgS0NhbnZhc0l0ZW1RdWFydHo6OnBhaW50KFBhaW50SW5mbyAKICAg
ICAKICAgICBLQ2FudmFzQ29tbW9uQXJncyBhcmdzID0gY29tbW9uQXJncygpOwogCi0gICAgS1Jl
bmRlcmluZ1BhaW50U2VydmVyICpmaWxsUGFpbnRTZXJ2ZXIgPSBjYW52YXNTdHlsZSgpLT5maWxs
UGFpbnRTZXJ2ZXIoY2FudmFzU3R5bGUoKS0+cmVuZGVyU3R5bGUoKSwgdGhpcyk7CisgICAgS1Jl
bmRlcmluZ1BhaW50U2VydmVyICpmaWxsUGFpbnRTZXJ2ZXIgPSBjYW52YXNTdHlsZSgpLT5maWxs
UGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhpcyk7CiAgICAgaWYgKGZpbGxQYWludFNlcnZlcikgewog
ICAgICAgICBkZXZpY2VDb250ZXh0LT5hZGRQYXRoKHBhdGgoKSk7CiAgICAgICAgIGZpbGxQYWlu
dFNlcnZlci0+c2V0QWN0aXZlQ2xpZW50KHRoaXMpOwogICAgICAgICBmaWxsUGFpbnRTZXJ2ZXIt
PmRyYXcoZGV2aWNlQ29udGV4dCwgYXJncywgQVBQTFlfVE9fRklMTCk7CiAgICAgfQotICAgIEtS
ZW5kZXJpbmdQYWludFNlcnZlciAqc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBjYW52YXNTdHlsZSgpLT5z
dHJva2VQYWludFNlcnZlcihjYW52YXNTdHlsZSgpLT5yZW5kZXJTdHlsZSgpLCB0aGlzKTsKKyAg
ICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnN0cm9rZVBhaW50U2VydmVyID0gY2FudmFzU3R5bGUo
KS0+c3Ryb2tlUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhpcyk7CiAgICAgaWYgKHN0cm9rZVBhaW50
U2VydmVyKSB7CiAgICAgICAgIGRldmljZUNvbnRleHQtPmFkZFBhdGgocGF0aCgpKTsgLy8gcGF0
aCBpcyBjbGVhcmVkIHdoZW4gZmlsbGVkLgogICAgICAgICBzdHJva2VQYWludFNlcnZlci0+c2V0
QWN0aXZlQ2xpZW50KHRoaXMpOwpAQCAtMjkxLDEzICsyOTIsMTMgQEAgUVJlY3RGIEtDYW52YXNJ
dGVtUXVhcnR6OjpiYm94Rm9yUGF0aChibwogICAgIC8vIHRoZSBiYm94IG1pZ2h0IGdyb3cgaWYg
dGhlIHBhdGggaXMgc3Ryb2tlZC4KICAgICAvLyBhbmQgQ0dQYXRoR2V0Qm91bmRpbmdCb3ggZG9l
c24ndCBzdXBwb3J0IHRoYXQsIHNvIHdlJ2xsIGhhdmUKICAgICAvLyB0byBtYWtlIGFuIGFsdGVy
bmF0aXZlIGNhbGwuLi4KLSAgICBpZihpbmNsdWRlU3Ryb2tlICYmIGNhbnZhc1N0eWxlKCktPmlz
U3Ryb2tlZCgpKSB7CisgICAgaWYgKGluY2x1ZGVTdHJva2UgJiYgY2FudmFzU3R5bGUoKS0+aXNT
dHJva2VkKHN0eWxlKCkpKSB7CiAgICAgICAgIENHQ29udGV4dFJlZiBzaGFyZWRDb250ZXh0ID0g
Z2V0U2hhcmVkQ29udGV4dCgpOwogICAgICAgICAKICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0
ZShzaGFyZWRDb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKHNoYXJlZENvbnRl
eHQpOwogICAgICAgICBDR0NvbnRleHRBZGRQYXRoKHNoYXJlZENvbnRleHQsIGNnUGF0aCk7Ci0g
ICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoc2hhcmVkQ29udGV4dCwgY2FudmFzU3R5
bGUoKSk7CisgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoc2hhcmVkQ29udGV4dCwg
c3R5bGUoKSwgdGhpcyk7CiAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQ
YXRoKHNoYXJlZENvbnRleHQpOwogICAgICAgICAKICAgICAgICAgYmJveCA9IENHQ29udGV4dEdl
dFBhdGhCb3VuZGluZ0JveChzaGFyZWRDb250ZXh0KTsKQEAgLTMyNyw3ICszMjgsNyBAQCBib29s
IEtDYW52YXNJdGVtUXVhcnR6OjpoaXRzUGF0aChjb25zdCBGCiAgICAgQ0dQb2ludCBsb2NhbEhp
dFBvaW50ID0gQ0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKENHUG9pbnQoaGl0UG9pbnQpLCBD
R0FmZmluZVRyYW5zZm9ybUludmVydCh0cmFuc2Zvcm0pKTsKIAogICAgIGlmIChmaWxsICYmIGNh
bnZhc1N0eWxlKCktPmZpbGxQYWludFNlcnZlcihzdHlsZSgpLCB0aGlzKSkgewotICAgICAgICBD
R1BhdGhEcmF3aW5nTW9kZSBkcmF3TW9kZSA9IChjYW52YXNTdHlsZSgpLT5maWxsUGFpbnRlcigp
LT5maWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCkgPyBrQ0dQYXRoRU9GaWxsIDoga0NHUGF0aEZp
bGw7CisgICAgICAgIENHUGF0aERyYXdpbmdNb2RlIGRyYXdNb2RlID0gKGNhbnZhc1N0eWxlKCkt
PmZpbGxQYWludGVyKHN0eWxlKCksIHRoaXMpLmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKSA/
IGtDR1BhdGhFT0ZpbGwgOiBrQ0dQYXRoRmlsbDsKICAgICAgICAgaGl0U3VjY2VzcyA9IENHQ29u
dGV4dFBhdGhDb250YWluc1BvaW50KHNoYXJlZENvbnRleHQsIGxvY2FsSGl0UG9pbnQsIGRyYXdN
b2RlKTsKICAgICB9IGVsc2UgaWYgKCFmaWxsICYmIGNhbnZhc1N0eWxlKCktPnN0cm9rZVBhaW50
U2VydmVyKHN0eWxlKCksIHRoaXMpKQogICAgICAgICBoaXRTdWNjZXNzID0gQ0dDb250ZXh0UGF0
aENvbnRhaW5zUG9pbnQoc2hhcmVkQ29udGV4dCwgbG9jYWxIaXRQb2ludCwga0NHUGF0aFN0cm9r
ZSk7CkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ1BhaW50U2VydmVyUXVh
cnR6Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJRdWFydHoubW0JKHJldmlzaW9uIDEyMDg0KQorKysga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L0tSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIDIwMDYgQWxleGFuZGVyIEtl
bGxldHQgPGx5cGFub3ZAa2RlLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDMsMzAgKzQ0LDMyIEBAIHZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdWFydHo6
OmQKIHsKICAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eiAqcXVhcnR6Q29udGV4dCA9
IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6ICo+KHJlbmRlcmluZ0Nv
bnRleHQpOwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcXVhcnR6Q29udGV4dC0+Y2dDb250
ZXh0KCk7CisgICAga2h0bWw6OlJlbmRlclN0eWxlICpyZW5kZXJTdHlsZSA9IGFyZ3MucmVuZGVy
U3R5bGUoKTsKKyAgICBjb25zdCBSZW5kZXJQYXRoICpyZW5kZXJQYXRoID0gYXJncy5yZW5kZXJQ
YXRoKCk7CiAgICAgS1NWRzo6S0NhbnZhc1JlbmRlcmluZ1N0eWxlICpjYW52YXNTdHlsZSA9IGFy
Z3MuY2FudmFzU3R5bGUoKTsKIAotICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRleHQsIGNhbnZh
c1N0eWxlLT5yZW5kZXJTdHlsZSgpLT5vcGFjaXR5KCkpOworICAgIENHQ29udGV4dFNldEFscGhh
KGNvbnRleHQsIHJlbmRlclN0eWxlLT5vcGFjaXR5KCkpOwogICAgICAgICAKLSAgICBpZiAoICh0
eXBlICYgQVBQTFlfVE9fRklMTCkgJiYgY2FudmFzU3R5bGUtPmlzRmlsbGVkKCkgKSB7CisgICAg
aWYgKCh0eXBlICYgQVBQTFlfVE9fRklMTCkgJiYgY2FudmFzU3R5bGUtPmlzRmlsbGVkKHJlbmRl
clN0eWxlKSkgewogICAgICAgICBDR0NvbG9yUmVmIGNvbG9yQ0cgPSBjZ0NvbG9yKGNvbG9yKCkp
OwotICAgICAgICBDR0NvbG9yUmVmIHdpdGhBbHBoYSA9IENHQ29sb3JDcmVhdGVDb3B5V2l0aEFs
cGhhKGNvbG9yQ0csIGNhbnZhc1N0eWxlLT5maWxsUGFpbnRlcigpLT5vcGFjaXR5KCkpOworICAg
ICAgICBDR0NvbG9yUmVmIHdpdGhBbHBoYSA9IENHQ29sb3JDcmVhdGVDb3B5V2l0aEFscGhhKGNv
bG9yQ0csIGNhbnZhc1N0eWxlLT5maWxsUGFpbnRlcihyZW5kZXJTdHlsZSwgcmVuZGVyUGF0aCku
b3BhY2l0eSgpKTsKICAgICAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yV2l0aENvbG9yKGNvbnRl
eHQsIHdpdGhBbHBoYSk7CiAgICAgICAgIENHQ29sb3JSZWxlYXNlKGNvbG9yQ0cpOwogICAgICAg
ICBDR0NvbG9yUmVsZWFzZSh3aXRoQWxwaGEpOwotICAgICAgICBpZiAoY2FudmFzU3R5bGUtPmZp
bGxQYWludGVyKCktPmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKQorICAgICAgICBpZiAoY2Fu
dmFzU3R5bGUtPmZpbGxQYWludGVyKHJlbmRlclN0eWxlLCByZW5kZXJQYXRoKS5maWxsUnVsZSgp
ID09IFJVTEVfRVZFTk9ERCkKICAgICAgICAgICAgIENHQ29udGV4dEVPRmlsbFBhdGgoY29udGV4
dCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIENHQ29udGV4dEZpbGxQYXRoKGNvbnRleHQp
OwogICAgIH0KIAotICAgIGlmICggKHR5cGUgJiBBUFBMWV9UT19TVFJPS0UpICYmIGNhbnZhc1N0
eWxlLT5pc1N0cm9rZWQoKSApIHsKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19TVFJPS0UpICYm
IGNhbnZhc1N0eWxlLT5pc1N0cm9rZWQocmVuZGVyU3R5bGUpKSB7CiAgICAgICAgIENHQ29sb3JS
ZWYgY29sb3JDRyA9IGNnQ29sb3IoY29sb3IoKSk7Ci0gICAgICAgIENHQ29sb3JSZWYgd2l0aEFs
cGhhID0gQ0dDb2xvckNyZWF0ZUNvcHlXaXRoQWxwaGEoY29sb3JDRywgY2FudmFzU3R5bGUtPnN0
cm9rZVBhaW50ZXIoKS0+b3BhY2l0eSgpKTsKKyAgICAgICAgQ0dDb2xvclJlZiB3aXRoQWxwaGEg
PSBDR0NvbG9yQ3JlYXRlQ29weVdpdGhBbHBoYShjb2xvckNHLCBjYW52YXNTdHlsZS0+c3Ryb2tl
UGFpbnRlcihyZW5kZXJTdHlsZSwgcmVuZGVyUGF0aCkub3BhY2l0eSgpKTsJCQogICAgICAgICBD
R0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0LCB3aXRoQWxwaGEpOwogICAg
ICAgICBDR0NvbG9yUmVsZWFzZShjb2xvckNHKTsKICAgICAgICAgQ0dDb2xvclJlbGVhc2Uod2l0
aEFscGhhKTsKICAgICAgICAgCi0gICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29u
dGV4dCwgY2FudmFzU3R5bGUpOworICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNv
bnRleHQsIHJlbmRlclN0eWxlLCByZW5kZXJQYXRoKTsKICAgICAgICAgCiAgICAgICAgIENHQ29u
dGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CiAgICAgfQpAQCAtODgsNiArOTEsOCBAQCB2b2lkIEtS
ZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFydHo6CiAgICAgS1JlbmRlcmluZ0RldmljZUNv
bnRleHRRdWFydHogKnF1YXJ0ekNvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dFF1YXJ0eiAqPihyZW5kZXJpbmdDb250ZXh0KTsKICAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IHF1YXJ0ekNvbnRleHQtPmNnQ29udGV4dCgpOwogICAgIEtTVkc6OktDYW52YXNSZW5k
ZXJpbmdTdHlsZSAqY2FudmFzU3R5bGUgPSBhcmdzLmNhbnZhc1N0eWxlKCk7CisgICAgY29uc3Qg
UmVuZGVyUGF0aCAqcmVuZGVyUGF0aCA9IGFyZ3MucmVuZGVyUGF0aCgpOworICAgIGtodG1sOjpS
ZW5kZXJTdHlsZSAqcmVuZGVyU3R5bGUgPSBhcmdzLnJlbmRlclN0eWxlKCk7CiAKICAgICBLQ2Fu
dmFzSW1hZ2UgKmNlbGwgPSB0aWxlKCk7CiAgICAgaWYgKCFjZWxsKQpAQCAtMTE4LDIzICsxMjMs
MjMgQEAgdm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXVhcnR6OgogICAgICAgICB0
cnVlLCAvLyBoYXMgY29sb3IKICAgICAgICAgJmNhbGxiYWNrcyApOwogCi0gICAgQ0dDb250ZXh0
U2V0QWxwaGEoY29udGV4dCwgY2FudmFzU3R5bGUtPnJlbmRlclN0eWxlKCktPm9wYWNpdHkoKSk7
IC8vIG9yIGRvIEkgc2V0IHRoZSBhbHBoYSBhYm92ZT8KKyAgICBDR0NvbnRleHRTZXRBbHBoYShj
b250ZXh0LCByZW5kZXJTdHlsZS0+b3BhY2l0eSgpKTsgLy8gb3IgZG8gSSBzZXQgdGhlIGFscGhh
IGFib3ZlPwogCiAgICAgQ0dDb2xvclNwYWNlUmVmIHBhdHRlcm5TcGFjZSA9IENHQ29sb3JTcGFj
ZUNyZWF0ZVBhdHRlcm4oTlVMTCk7CiAKLSAgICBpZiAoICh0eXBlICYgQVBQTFlfVE9fRklMTCkg
JiYgY2FudmFzU3R5bGUtPmlzRmlsbGVkKCkgKSB7CisgICAgaWYgKCh0eXBlICYgQVBQTFlfVE9f
RklMTCkgJiYgY2FudmFzU3R5bGUtPmlzRmlsbGVkKHJlbmRlclN0eWxlKSkgewogICAgICAgICBD
R0NvbnRleHRTZXRGaWxsQ29sb3JTcGFjZShjb250ZXh0LCBwYXR0ZXJuU3BhY2UpOwogICAgICAg
ICBDR0NvbnRleHRTZXRGaWxsUGF0dGVybihjb250ZXh0LCBwYXR0ZXJuLCAmYWxwaGEpOwotICAg
ICAgICBpZiAoY2FudmFzU3R5bGUtPmZpbGxQYWludGVyKCktPmZpbGxSdWxlKCkgPT0gUlVMRV9F
VkVOT0REKQorICAgICAgICBpZiAoY2FudmFzU3R5bGUtPmZpbGxQYWludGVyKHJlbmRlclN0eWxl
LCByZW5kZXJQYXRoKS5maWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCkKICAgICAgICAgICAgIENH
Q29udGV4dEVPRmlsbFBhdGgoY29udGV4dCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIENH
Q29udGV4dEZpbGxQYXRoKGNvbnRleHQpOwogICAgIH0KLQotICAgIGlmICggKHR5cGUgJiBBUFBM
WV9UT19TVFJPS0UpICYmIGNhbnZhc1N0eWxlLT5pc1N0cm9rZWQoKSApIHsKKyAgICAKKyAgICBp
ZiAoKHR5cGUgJiBBUFBMWV9UT19TVFJPS0UpICYmIGNhbnZhc1N0eWxlLT5pc1N0cm9rZWQocmVu
ZGVyU3R5bGUpKSB7CiAgICAgICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yU3BhY2UoY29udGV4
dCwgcGF0dGVyblNwYWNlKTsKICAgICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlUGF0dGVybihjb250
ZXh0LCBwYXR0ZXJuLCAmYWxwaGEpOwotICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0
KGNvbnRleHQsIGNhbnZhc1N0eWxlKTsKKyAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4
dChjb250ZXh0LCByZW5kZXJTdHlsZSwgcmVuZGVyUGF0aCk7CiAgICAgICAgIENHQ29udGV4dFN0
cm9rZVBhdGgoY29udGV4dCk7CiAgICAgfQogCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHov
UXVhcnR6U3VwcG9ydC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovUXVh
cnR6U3VwcG9ydC5tbQkocmV2aXNpb24gMTIwODQpCisrKyBrY2FudmFzL2RldmljZS9xdWFydHov
UXVhcnR6U3VwcG9ydC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9y
dCAiS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5oIgogI2ltcG9ydCAiS1JlbmRlcmluZ0ZpbGxQYWlu
dGVyLmgiCiAjaW1wb3J0ICJLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlci5oIgorI2ltcG9ydCAiS0Nh
bnZhc1JlbmRlcmluZ1N0eWxlLmgiCiAjaW1wb3J0ICJreG1sY29yZS9Bc3NlcnRpb25zLmgiCiAK
ICNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUltYWdlLmg+CkBAIC04OCwyNiArODksMjggQEAgQ0dB
ZmZpbmVUcmFuc2Zvcm0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlTQogICAgIHJldHVybiB0cmFuc2Zv
cm07CiB9CiAKLXZvaWQgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChDR0NvbnRleHRSZWYgY29u
dGV4dCwgS1NWRzo6S0NhbnZhc1JlbmRlcmluZ1N0eWxlICpzdHlsZSkKK3ZvaWQgYXBwbHlTdHJv
a2VTdHlsZVRvQ29udGV4dChDR0NvbnRleHRSZWYgY29udGV4dCwga2h0bWw6OlJlbmRlclN0eWxl
ICpyZW5kZXJTdHlsZSwgY29uc3QgUmVuZGVyUGF0aCAqcmVuZGVyUGF0aCkKIHsKKyAgICBLUmVu
ZGVyaW5nU3Ryb2tlUGFpbnRlciBzdHJva2VQYWludGVyID0gS1NWRzo6S0NhbnZhc1JlbmRlcmlu
Z1N0eWxlOjpzdHJva2VQYWludGVyKHJlbmRlclN0eWxlLCByZW5kZXJQYXRoKTsKKwogICAgIC8q
IFNob3VsZG4ndCBhbGwgdGhlc2UgYmUgaW4gdGhlIHN0cm9rZSBwYWludGVyPyAqLwotICAgIENH
Q29udGV4dFNldExpbmVXaWR0aChjb250ZXh0LCBzdHlsZS0+c3Ryb2tlUGFpbnRlcigpLT5zdHJv
a2VXaWR0aCgpKTsKKyAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgc3Ryb2tlUGFp
bnRlci5zdHJva2VXaWR0aCgpKTsKIAotICAgIEtDQ2FwU3R5bGUgY2FwU3R5bGUgPSBzdHlsZS0+
c3Ryb2tlUGFpbnRlcigpLT5zdHJva2VDYXBTdHlsZSgpOworICAgIEtDQ2FwU3R5bGUgY2FwU3R5
bGUgPSBzdHJva2VQYWludGVyLnN0cm9rZUNhcFN0eWxlKCk7CiAgICAgQ0dDb250ZXh0U2V0TGlu
ZUNhcChjb250ZXh0LCBDR0xpbmVDYXBGcm9tS0MoY2FwU3R5bGUpKTsKIAotICAgIEtDSm9pblN0
eWxlIGpvaW5TdHlsZSA9IHN0eWxlLT5zdHJva2VQYWludGVyKCktPnN0cm9rZUpvaW5TdHlsZSgp
OworICAgIEtDSm9pblN0eWxlIGpvaW5TdHlsZSA9IHN0cm9rZVBhaW50ZXIuc3Ryb2tlSm9pblN0
eWxlKCk7CiAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4oY29udGV4dCwgQ0dMaW5lSm9pbkZyb21L
Qyhqb2luU3R5bGUpKTsKIAotICAgIENHQ29udGV4dFNldE1pdGVyTGltaXQoY29udGV4dCwgc3R5
bGUtPnN0cm9rZVBhaW50ZXIoKS0+c3Ryb2tlTWl0ZXJMaW1pdCgpKTsKKyAgICBDR0NvbnRleHRT
ZXRNaXRlckxpbWl0KGNvbnRleHQsIHN0cm9rZVBhaW50ZXIuc3Ryb2tlTWl0ZXJMaW1pdCgpKTsK
IAotICAgIEtDRGFzaEFycmF5IGRhc2hlcyA9IHN0eWxlLT5zdHJva2VQYWludGVyKCktPmRhc2hB
cnJheSgpOworICAgIEtDRGFzaEFycmF5IGRhc2hlcyA9IHN0cm9rZVBhaW50ZXIuZGFzaEFycmF5
KCk7CiAgICAgaWYgKGRhc2hlcy5jb3VudCgpKSB7CiAgICAgICAgIHNpemVfdCBkYXNoQ291bnQg
PSBkYXNoZXMuY291bnQoKTsKICAgICAgICAgZmxvYXQgKmxlbmd0aHMgPSAoZmxvYXQgKiltYWxs
b2MoZGFzaENvdW50ICogc2l6ZW9mKGZsb2F0KSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IHggPSAwOyB4IDwgZGFzaENvdW50OyB4KyspCiAgICAgICAgICAgICBsZW5ndGhzW3hdID0gZGFz
aGVzW3hdOwotICAgICAgICBDR0NvbnRleHRTZXRMaW5lRGFzaChjb250ZXh0LCBzdHlsZS0+c3Ry
b2tlUGFpbnRlcigpLT5kYXNoT2Zmc2V0KCksIGxlbmd0aHMsIGRhc2hlcy5jb3VudCgpKTsKKyAg
ICAgICAgQ0dDb250ZXh0U2V0TGluZURhc2goY29udGV4dCwgc3Ryb2tlUGFpbnRlci5kYXNoT2Zm
c2V0KCksIGxlbmd0aHMsIGRhc2hlcy5jb3VudCgpKTsKICAgICAgICAgZnJlZShsZW5ndGhzKTsK
ICAgICB9CiB9CkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ1BhaW50U2Vy
dmVyR3JhZGllbnRRdWFydHoubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6
L0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6Lm1tCShyZXZpc2lvbiAxMjA4NCkK
KysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1
YXJ0ei5tbQkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsMTEgQEAKIAogCiAvLyBNYXliZSB0
aGlzIHNob3VsZCBiZSBpbiBhIGJhc2UgY2xhc3MgaW5zdGVhZC4uLgotc3RhdGljIHZvaWQgZHJh
d1NoYWRpbmdXaXRoU3R5bGUoY29uc3QgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQgKnNl
cnZlciwgQ0dTaGFkaW5nUmVmIHNoYWRpbmcsIEtTVkc6OktDYW52YXNSZW5kZXJpbmdTdHlsZSAq
Y2FudmFzU3R5bGUsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpCitzdGF0aWMgdm9pZCBkcmF3U2hh
ZGluZ1dpdGhTdHlsZShjb25zdCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCAqc2VydmVy
LCBDR1NoYWRpbmdSZWYgc2hhZGluZywgY29uc3QgS0NhbnZhc0NvbW1vbkFyZ3MgJmFyZ3MsIEtD
UGFpbnRUYXJnZXRUeXBlIHR5cGUpCiB7CisgICAgS1NWRzo6S0NhbnZhc1JlbmRlcmluZ1N0eWxl
ICpjYW52YXNTdHlsZSA9IGFyZ3MuY2FudmFzU3R5bGUoKTsKKyAgICBraHRtbDo6UmVuZGVyU3R5
bGUgKnJlbmRlclN0eWxlID0gYXJncy5yZW5kZXJTdHlsZSgpOworICAgIGNvbnN0IFJlbmRlclBh
dGggKnJlbmRlclBhdGggPSBhcmdzLnJlbmRlclBhdGgoKTsKICAgICBLUmVuZGVyaW5nRGV2aWNl
UXVhcnR6ICpxdWFydHpEZXZpY2UgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlUXVhcnR6
ICo+KFFQYWludGVyOjpyZW5kZXJpbmdEZXZpY2UoKSk7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRl
eHQgPSBxdWFydHpEZXZpY2UtPmN1cnJlbnRDR0NvbnRleHQoKTsKICAgICBBU1NFUlQoY29udGV4
dCAhPSBOVUxMKTsKQEAgLTY0LDExICs2NywxMSBAQCBzdGF0aWMgdm9pZCBkcmF3U2hhZGluZ1dp
dGhTdHlsZShjb25zdCBLCiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRUcmFuc2Zvcm0g
PSBDR0FmZmluZVRyYW5zZm9ybShzZXJ2ZXItPmdyYWRpZW50VHJhbnNmb3JtKCkucW1hdHJpeCgp
KTsKICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgZ3JhZGllbnRUcmFuc2Zvcm0pOwog
ICAgIAotICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRleHQsIGNhbnZhc1N0eWxlLT5yZW5kZXJT
dHlsZSgpLT5vcGFjaXR5KCkpOworICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRleHQsIHJlbmRl
clN0eWxlLT5vcGFjaXR5KCkpOwogICAgIAotICAgIGlmICggKHR5cGUgJiBBUFBMWV9UT19GSUxM
KSAmJiBjYW52YXNTdHlsZS0+aXNGaWxsZWQoKSApIHsKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9U
T19GSUxMKSAmJiBjYW52YXNTdHlsZS0+aXNGaWxsZWQocmVuZGVyU3R5bGUpKSB7CiAgICAgICAg
IENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0gICAgICAgIGlmIChjYW52YXNTdHlsZS0+
ZmlsbFBhaW50ZXIoKS0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQpIHsKKyAgICAgICAgaWYg
KGNhbnZhc1N0eWxlLT5maWxsUGFpbnRlcihyZW5kZXJTdHlsZSwgcmVuZGVyUGF0aCkuZmlsbFJ1
bGUoKSA9PSBSVUxFX0VWRU5PREQpIHsKICAgICAgICAgICAgIENHQ29udGV4dEVPQ2xpcChjb250
ZXh0KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENHQ29udGV4dENsaXAoY29udGV4
dCk7CkBAIC03Nyw5ICs4MCw5IEBAIHN0YXRpYyB2b2lkIGRyYXdTaGFkaW5nV2l0aFN0eWxlKGNv
bnN0IEsKICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKICAgICB9CiAg
ICAgCi0gICAgaWYgKCAodHlwZSAmIEFQUExZX1RPX1NUUk9LRSkgJiYgY2FudmFzU3R5bGUtPmlz
U3Ryb2tlZCgpICkgeworICAgIGlmICgodHlwZSAmIEFQUExZX1RPX1NUUk9LRSkgJiYgY2FudmFz
U3R5bGUtPmlzU3Ryb2tlZChyZW5kZXJTdHlsZSkpIHsKICAgICAgICAgQ0dDb250ZXh0U2F2ZUdT
dGF0ZShjb250ZXh0KTsKLSAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0
LCBjYW52YXNTdHlsZSk7IC8vIEZJWE1FOiB0aGlzIHNlZW1zIGxpa2UgdGhlIHdyb25nIHBsYWNl
IGZvciB0aGlzLgorICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHJl
bmRlclN0eWxlLCByZW5kZXJQYXRoKTsgLy8gRklYTUU6IHRoaXMgc2VlbXMgbGlrZSB0aGUgd3Jv
bmcgcGxhY2UgZm9yIHRoaXMuCiAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9r
ZWRQYXRoKGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwogICAgICAg
ICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBzaGFkaW5nKTsKQEAgLTI5OCw3ICszMDEs
NyBAQCB2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50CiAgICAgaWYgKCFt
X3NoYWRpbmdDYWNoZSkKICAgICAgICAgY29uc3RfY2FzdDxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJM
aW5lYXJHcmFkaWVudFF1YXJ0eiAqPih0aGlzKS0+dXBkYXRlUXVhcnR6R3JhZGllbnRDYWNoZSh0
aGlzKTsKICAgICAKLSAgICBkcmF3U2hhZGluZ1dpdGhTdHlsZSh0aGlzLCBtX3NoYWRpbmdDYWNo
ZSwgYXJncy5jYW52YXNTdHlsZSgpLCB0eXBlKTsKKyAgICBkcmF3U2hhZGluZ1dpdGhTdHlsZSh0
aGlzLCBtX3NoYWRpbmdDYWNoZSwgYXJncywgdHlwZSk7CiB9CiAKIHZvaWQgS1JlbmRlcmluZ1Bh
aW50U2VydmVyUmFkaWFsR3JhZGllbnRRdWFydHo6OmRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRl
eHQgKnJlbmRlcmluZ0NvbnRleHQsIGNvbnN0IEtDYW52YXNDb21tb25BcmdzICZhcmdzLCBLQ1Bh
aW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdApAQCAtMzExLDUgKzMxNCw1IEBAIHZvaWQgS1JlbmRl
cmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQKICAgICBpZiAoIW1fc2hhZGluZ0NhY2hlKQog
ICAgICAgICBjb25zdF9jYXN0PEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50UXVh
cnR6ICo+KHRoaXMpLT51cGRhdGVRdWFydHpHcmFkaWVudENhY2hlKHRoaXMpOwogICAgIAotICAg
IGRyYXdTaGFkaW5nV2l0aFN0eWxlKHRoaXMsIG1fc2hhZGluZ0NhY2hlLCBhcmdzLmNhbnZhc1N0
eWxlKCksIHR5cGUpOworICAgIGRyYXdTaGFkaW5nV2l0aFN0eWxlKHRoaXMsIG1fc2hhZGluZ0Nh
Y2hlLCBhcmdzLCB0eXBlKTsKIH0KSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpT
dXBwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L1F1YXJ0elN1cHBv
cnQuaAkocmV2aXNpb24gMTIwODQpCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovUXVhcnR6U3Vw
cG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiwxMCBAQAogCiAjaW1wb3J0ICJLQ2Fu
dmFzUmVuZGVyaW5nU3R5bGUuaCIgLy8gZm9yIGFsbCB0aGUgQ0FQX0JVVFQgY29udHN0YW50cywg
ZXRjLgogY2xhc3MgUVJlY3Q7CitjbGFzcyBSZW5kZXJQYXRoOwogCi1uYW1lc3BhY2UgS1NWRyB7
Ci0gICAgY2xhc3MgU1ZHUmVuZGVyU3R5bGU7CituYW1lc3BhY2Uga2h0bWwgeworICAgIGNsYXNz
IFJlbmRlclN0eWxlOwogfQogCiAjaWZuZGVmIE5ERUJVRwpAQCAtNDEsNyArNDIsNyBAQCBDRlN0
cmluZ1JlZiBDRlN0cmluZ0Zyb21DR1BhdGgoQ0dQYXRoUmVmCiBDRlN0cmluZ1JlZiBDRlN0cmlu
Z0Zyb21DR0FmZmluZVRyYW5zZm9ybShDR0FmZmluZVRyYW5zZm9ybSB0KTsKIENHQWZmaW5lVHJh
bnNmb3JtIENHQWZmaW5lVHJhbnNmb3JtTWFrZU1hcEJldHdlZW5SZWN0cyhDR1JlY3Qgc291cmNl
LCBDR1JlY3QgZGVzdCk7CiAKLXZvaWQgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChDR0NvbnRl
eHRSZWYgY29udGV4dCwgS1NWRzo6S0NhbnZhc1JlbmRlcmluZ1N0eWxlICpzdHlsZSk7Cit2b2lk
IGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGtodG1sOjpS
ZW5kZXJTdHlsZSAqc3R5bGUsIGNvbnN0IFJlbmRlclBhdGggKnJlbmRlclBhdGgpOwogCiBzdGF0
aWMgaW5saW5lIENHTGluZUNhcCBDR0xpbmVDYXBGcm9tS0MoIEtDQ2FwU3R5bGUgY2FwKSB7CiAg
ICAgaWYgKGNhcCA9PSBDQVBfQlVUVCkKSW5kZXg6IGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdE
ZXZpY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2Uu
Y3BwCShyZXZpc2lvbiAxMjA4NCkKKysrIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CiAgICAgICAg
ICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAg
ICAgICAgICAyMDA2ICAgICAgIEFsZXhhbmRlciBLZWxsZXR0IDxseXBhbm92QGtkZS5vcmc+CiAK
ICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtMjcsNiArMjgs
OCBAQCBLQ2FudmFzQ29tbW9uQXJnczo6S0NhbnZhc0NvbW1vbkFyZ3MoKQogewogICAgIG1fcGF0
aCA9IDA7CiAgICAgbV9zdHlsZSA9IDA7CisgICAgbV9yZW5kZXJTdHlsZSA9IDA7CisgICAgbV9y
ZW5kZXJQYXRoID0gMDsKIH0KIAogS0NhbnZhc0NvbW1vbkFyZ3M6On5LQ2FudmFzQ29tbW9uQXJn
cygpCkBAIC01Myw2ICs1NiwyNiBAQCB2b2lkIEtDYW52YXNDb21tb25BcmdzOjpzZXRTdHlsZShL
U1ZHOjpLCiAgICAgbV9zdHlsZSA9IHN0eWxlOwogfQogCitraHRtbDo6UmVuZGVyU3R5bGUgKktD
YW52YXNDb21tb25BcmdzOjpyZW5kZXJTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVu
ZGVyU3R5bGU7Cit9CisKK3ZvaWQgS0NhbnZhc0NvbW1vbkFyZ3M6OnNldFJlbmRlclN0eWxlKGto
dG1sOjpSZW5kZXJTdHlsZSAqcmVuZGVyU3R5bGUpCit7CisgICAgbV9yZW5kZXJTdHlsZSA9IHJl
bmRlclN0eWxlOworfQorCitjb25zdCBSZW5kZXJQYXRoKiBLQ2FudmFzQ29tbW9uQXJnczo6cmVu
ZGVyUGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyUGF0aDsKK30KKwordm9pZCBL
Q2FudmFzQ29tbW9uQXJnczo6c2V0UmVuZGVyUGF0aChjb25zdCBSZW5kZXJQYXRoICpyZW5kZXJQ
YXRoKQoreworICAgIG1fcmVuZGVyUGF0aCA9IHJlbmRlclBhdGg7Cit9CisKIEtSZW5kZXJpbmdE
ZXZpY2U6OktSZW5kZXJpbmdEZXZpY2UoKQogewogfQpJbmRleDoga2NhbnZhcy9LQ2FudmFzVHlw
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL0tDYW52YXNUeXBlcy5oCShyZXZpc2lvbiAxMjA4
NCkKKysrIGtjYW52YXMvS0NhbnZhc1R5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMw
LDEyIEBAIG5hbWVzcGFjZSBLU1ZHIHsKICAgICBjbGFzcyBLQ2FudmFzUmVuZGVyaW5nU3R5bGU7
CiB9CiAKK25hbWVzcGFjZSBraHRtbCB7CisgICAgY2xhc3MgUmVuZGVyU3R5bGU7Cit9CisKIGNs
YXNzIEtDYW52YXNQYXRoOworY2xhc3MgUmVuZGVyUGF0aDsKIGNsYXNzIEtDYW52YXNDb21tb25B
cmdzCiB7CiBwdWJsaWM6CkBAIC00MiwxMCArNDcsMTggQEAgcHVibGljOgogCiAgICAgS1NWRzo6
S0NhbnZhc1JlbmRlcmluZ1N0eWxlICpjYW52YXNTdHlsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0
U3R5bGUoS1NWRzo6S0NhbnZhc1JlbmRlcmluZ1N0eWxlICpzdHlsZSk7CisKKyAgICBraHRtbDo6
UmVuZGVyU3R5bGUgKnJlbmRlclN0eWxlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRSZW5kZXJTdHls
ZShraHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxlKTsKICAgICAKKyAgICBjb25zdCBSZW5kZXJQYXRo
KiByZW5kZXJQYXRoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRSZW5kZXJQYXRoKGNvbnN0IFJlbmRl
clBhdGgqIHBhdGgpOworCiBwcml2YXRlOgogICAgIFJlZlB0cjxLQ2FudmFzUGF0aD4gbV9wYXRo
OwogICAgIEtTVkc6OktDYW52YXNSZW5kZXJpbmdTdHlsZSAqbV9zdHlsZTsKKyAgICBraHRtbDo6
UmVuZGVyU3R5bGUgKm1fcmVuZGVyU3R5bGU7CisgICAgY29uc3QgUmVuZGVyUGF0aCAqbV9yZW5k
ZXJQYXRoOwogfTsKIAogI2VuZGlmCkluZGV4OiBDaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMjA4NCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDUyIEBACisyMDA2LTAxLTE0ICBBbGV4YW5kZXIgS2VsbGV0dCAgPGx5cGFub3ZAa2Rl
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZWZhY3RvciBvdXQgY2FzZXMgb2YgS0NhbnZhc1JlbmRlcmluZ1N0eWxlIHVzZWQgYXMgYW4gaW5z
dGFuY2UgdG8KKyAgICAgICAgc3RvcmUgdGhlIGN1cnJlbnQgc3R5bGUuIFRlbXBvcmFyaWx5IHVu
aWZ5IHRoZSBkYXRhIHBhc3NpbmcgdmlhIAorICAgICAgICBLQ2FudmFzQ29tbW9uQXJncy4KKwor
ICAgICAgICAqIGtjYW52YXMvS0NhbnZhc0l0ZW0uY3BwOiBSZW1vdmluZyBvdmVycmlkZSBvZiBz
ZXRTdHlsZSB1c2VkIHRvIGhvb2sKKyAgICAgICAgaW50byBLQ2FudmFzUmVuZGVyaW5nU3R5bGU6
OnVwZGF0ZVN0eWxlLgorICAgICAgICAoUmVuZGVyUGF0aDo6Y29tbW9uQXJncyk6IAorICAgICAg
ICAqIGtjYW52YXMvS0NhbnZhc0l0ZW0uaDoKKyAgICAgICAgKiBrY2FudmFzL0tDYW52YXNUcmVl
RGVidWcuY3BwOgorICAgICAgICAod3JpdGVTdHlsZSk6CisgICAgICAgICoga2NhbnZhcy9LQ2Fu
dmFzVHlwZXMuaDoKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmNw
cDoKKyAgICAgICAgKEtDYW52YXNDb21tb25BcmdzOjpLQ2FudmFzQ29tbW9uQXJncyk6CisgICAg
ICAgIChLQ2FudmFzQ29tbW9uQXJnczo6cmVuZGVyU3R5bGUpOgorICAgICAgICAoS0NhbnZhc0Nv
bW1vbkFyZ3M6OnNldFJlbmRlclN0eWxlKToKKyAgICAgICAgKEtDYW52YXNDb21tb25BcmdzOjpy
ZW5kZXJQYXRoKToKKyAgICAgICAgKEtDYW52YXNDb21tb25BcmdzOjpzZXRSZW5kZXJQYXRoKToK
KyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0l0ZW1RdWFydHoubW06Cisg
ICAgICAgIChLQ2FudmFzSXRlbVF1YXJ0ejo6cGFpbnQpOgorICAgICAgICAoS0NhbnZhc0l0ZW1R
dWFydHo6OmJib3hGb3JQYXRoKToKKyAgICAgICAgKEtDYW52YXNJdGVtUXVhcnR6OjpoaXRzUGF0
aCk6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdQYWludFNlcnZl
ckdyYWRpZW50UXVhcnR6Lm1tOgorICAgICAgICAoZHJhd1NoYWRpbmdXaXRoU3R5bGUpOgorICAg
ICAgICAoS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRRdWFydHo6OmRyYXcpOgor
ICAgICAgICAoS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdWFydHo6OmRyYXcp
OgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJR
dWFydHoubW06CisgICAgICAgIChLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF1YXJ0ejo6ZHJh
dyk6CisgICAgICAgIChLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXVhcnR6OjpkcmF3KToK
KyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdWFydHovUXVhcnR6U3VwcG9ydC5oOgorICAgICAg
ICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0Lm1tOgorICAgICAgICAoYXBw
bHlTdHJva2VTdHlsZVRvQ29udGV4dCk6CisgICAgICAgICoga3N2ZzIvbWlzYy9LQ2FudmFzUmVu
ZGVyaW5nU3R5bGUuY3BwOiBSZW1vdmUgb3ZlcnJpZGVGaWxsUGFpbnRTZXJ2ZXIKKyAgICAgICAg
YW5kIG92ZXJyaWRlU3Ryb2tlUGFpbnRTZXJ2ZXIgaGFja3MgYW5kIG1ha2UgbW9zdCBvdGhlciBt
ZXRob2RzCisgICAgICAgIHN0YXRpYywgcmVtb3ZlIG1vc3QgaW5zdGFuY2UgdmFyaWFibGVzLgor
ICAgICAgICAoS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpLQ2FudmFzUmVuZGVyaW5nU3R5bGUpOgor
ICAgICAgICAoS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjppc0ZpbGxlZCk6CisgICAgICAgIChLQ2Fu
dmFzUmVuZGVyaW5nU3R5bGU6OmZpbGxQYWludFNlcnZlcik6CisgICAgICAgIChLQ2FudmFzUmVu
ZGVyaW5nU3R5bGU6OmlzU3Ryb2tlZCk6CisgICAgICAgIChLQ2FudmFzUmVuZGVyaW5nU3R5bGU6
OnN0cm9rZVBhaW50U2VydmVyKToKKyAgICAgICAgKEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6c3Ry
b2tlUGFpbnRlcik6IE1lcmdlZCBzdHJva2UgbG9naWMgaW4gZnJvbQorICAgICAgICB1cGRhdGVT
dHlsZS4KKyAgICAgICAgKEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6ZmlsbFBhaW50ZXIpOiBNZXJn
ZWQgZmlsbCBsb2dpYyBpbiBmcm9tCisgICAgICAgIHVwZGF0ZVN0eWxlLgorICAgICAgICAqIGtz
dmcyL21pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmg6CisKIDIwMDYtMDEtMTMgIERhdmlkIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIENvbnZlcnQgUVBvaW50RiB0byBGbG9h
dFBvaW50IGFuZCBtb3ZlIGl0IHRvIHRoZSBwbGF0Zm9ybQpJbmRleDoga3N2ZzIvbWlzYy9LQ2Fu
dmFzUmVuZGVyaW5nU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL21pc2MvS0NhbnZhc1Jl
bmRlcmluZ1N0eWxlLmNwcAkocmV2aXNpb24gMTIwODQpCisrKyBrc3ZnMi9taXNjL0tDYW52YXNS
ZW5kZXJpbmdTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDQyICs1MSwyNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgS1NWRzsKIAogS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpLQ2FudmFzUmVuZGVy
aW5nU3R5bGUoY29uc3Qga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSkKIHsKLSAgICBtX3N0eWxl
ID0gc3R5bGU7Ci0gICAgbV9maWxsUGFpbnRlciA9IDA7Ci0gICAgbV9zdHJva2VQYWludGVyID0g
MDsKLSAgICBtX2ZpbGxQYWludGVyUGFpbnRTZXJ2ZXJPdmVycmlkZSA9IDA7Ci0gICAgbV9zdHJv
a2VQYWludGVyUGFpbnRTZXJ2ZXJPdmVycmlkZSA9IDA7CiB9CiAKIEtDYW52YXNSZW5kZXJpbmdT
dHlsZTo6fktDYW52YXNSZW5kZXJpbmdTdHlsZSgpCiB7CiB9CiAKLXZvaWQgS0NhbnZhc1JlbmRl
cmluZ1N0eWxlOjpvdmVycmlkZUZpbGxQYWludFNlcnZlcihLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIg
KnBzZXJ2ZXIpCitib29sIEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6aXNGaWxsZWQoY29uc3Qga2h0
bWw6OlJlbmRlclN0eWxlICpzdHlsZSkKIHsKLSAgICBBU1NFUlQocHNlcnZlci0+dHlwZSgpID09
IFBTX0lNQUdFKTsKLSAgICBkZWxldGUgbV9maWxsUGFpbnRlclBhaW50U2VydmVyT3ZlcnJpZGU7
Ci0gICAgbV9maWxsUGFpbnRlclBhaW50U2VydmVyT3ZlcnJpZGUgPSBwc2VydmVyOwotfQotCi1i
b29sIEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6aXNGaWxsZWQoKSBjb25zdAotewotICAgIFNWR1Bh
aW50SW1wbCAqZmlsbCA9IG1fc3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxQYWludCgpOwotICAgIGlm
ICghZmlsbCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIChtX2ZpbGxQYWludGVy
UGFpbnRTZXJ2ZXJPdmVycmlkZSB8fCAoZmlsbCAmJiBmaWxsLT5wYWludFR5cGUoKSAhPSBTVkdf
UEFJTlRUWVBFX05PTkUpKTsKKyAgICBTVkdQYWludEltcGwgKmZpbGwgPSBzdHlsZS0+c3ZnU3R5
bGUoKS0+ZmlsbFBhaW50KCk7CisgICAgaWYgKGZpbGwgJiYgZmlsbC0+cGFpbnRUeXBlKCkgPT0g
U1ZHX1BBSU5UVFlQRV9OT05FKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIEtSZW5kZXJpbmdQYWludFNlcnZlciAqS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpm
aWxsUGFpbnRTZXJ2ZXIoY29uc3Qga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSwgY29uc3QgUmVu
ZGVyUGF0aCogaXRlbSkKIHsKLSAgICBpZiAobV9maWxsUGFpbnRlclBhaW50U2VydmVyT3ZlcnJp
ZGUpCi0gICAgICAgIHJldHVybiBtX2ZpbGxQYWludGVyUGFpbnRTZXJ2ZXJPdmVycmlkZTsKLQot
ICAgIFNWR1BhaW50SW1wbCAqZmlsbCA9IG1fc3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxQYWludCgp
OwotCi0gICAgaWYgKGZpbGwgJiYgZmlsbC0+cGFpbnRUeXBlKCkgPT0gU1ZHX1BBSU5UVFlQRV9O
T05FKQorICAgIGlmICghaXNGaWxsZWQoc3R5bGUpKQogICAgICAgICByZXR1cm4gMDsKIAorICAg
IFNWR1BhaW50SW1wbCAqZmlsbCA9IHN0eWxlLT5zdmdTdHlsZSgpLT5maWxsUGFpbnQoKTsKKwog
ICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqZmlsbFBhaW50U2VydmVyOwogICAgIGlmICghZmls
bCkgewogICAgICAgICAvLyBpbml0aWFsIHZhbHVlIChibGFjaykKQEAgLTEwMiw3ICs4Nyw3IEBA
IEtSZW5kZXJpbmdQYWludFNlcnZlciAqS0NhbnZhc1JlbmRlcmluZ1MKICAgICAgICAgZmlsbFBh
aW50U2VydmVyID0gUVBhaW50ZXI6OnJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQYWludFNlcnZl
cihLQ1BhaW50U2VydmVyVHlwZShQU19TT0xJRCkpOwogICAgICAgICBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJTb2xpZCAqZmlsbFBhaW50U2VydmVyU29saWQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJTb2xpZCAqPihmaWxsUGFpbnRTZXJ2ZXIpOwogICAgICAgICBpZiAoZmlsbC0+
cGFpbnRUeXBlKCkgPT0gU1ZHX1BBSU5UVFlQRV9DVVJSRU5UQ09MT1IpCi0gICAgICAgICAgICBm
aWxsUGFpbnRTZXJ2ZXJTb2xpZC0+c2V0Q29sb3IobV9zdHlsZS0+Y29sb3IoKSk7CisgICAgICAg
ICAgICBmaWxsUGFpbnRTZXJ2ZXJTb2xpZC0+c2V0Q29sb3Ioc3R5bGUtPmNvbG9yKCkpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBmaWxsUGFpbnRTZXJ2ZXJTb2xpZC0+c2V0Q29sb3IoZmls
bC0+Y29sb3IoKSk7CiAgICAgfQpAQCAtMTEwLDMwICs5NSwyMiBAQCBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXIgKktDYW52YXNSZW5kZXJpbmdTCiAgICAgcmV0dXJuIGZpbGxQYWludFNlcnZlcjsKIH0K
IAotdm9pZCBLQ2FudmFzUmVuZGVyaW5nU3R5bGU6Om92ZXJyaWRlU3Ryb2tlUGFpbnRTZXJ2ZXIo
S1JlbmRlcmluZ1BhaW50U2VydmVyICpwc2VydmVyKQotewotICAgIHN0cm9rZVBhaW50ZXIoKS0+
c2V0RGlydHkoKTsKLSAgICBBU1NFUlQocHNlcnZlci0+dHlwZSgpID09IFBTX0lNQUdFKTsKLSAg
ICBkZWxldGUgbV9zdHJva2VQYWludGVyUGFpbnRTZXJ2ZXJPdmVycmlkZTsKLSAgICBtX3N0cm9r
ZVBhaW50ZXJQYWludFNlcnZlck92ZXJyaWRlID0gcHNlcnZlcjsKLX0KIAotYm9vbCBLQ2FudmFz
UmVuZGVyaW5nU3R5bGU6OmlzU3Ryb2tlZCgpIGNvbnN0Citib29sIEtDYW52YXNSZW5kZXJpbmdT
dHlsZTo6aXNTdHJva2VkKGNvbnN0IGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUpCiB7Ci0gICAg
U1ZHUGFpbnRJbXBsICpzdHJva2UgPSBtX3N0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VQYWludCgp
OwotICAgIHJldHVybiAoc3Ryb2tlICYmIHN0cm9rZS0+cGFpbnRUeXBlKCkgIT0gU1ZHX1BBSU5U
VFlQRV9OT05FKTsKKyAgICBTVkdQYWludEltcGwgKnN0cm9rZSA9IHN0eWxlLT5zdmdTdHlsZSgp
LT5zdHJva2VQYWludCgpOworICAgIGlmICghc3Ryb2tlIHx8IHN0cm9rZS0+cGFpbnRUeXBlKCkg
PT0gU1ZHX1BBSU5UVFlQRV9OT05FKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKIEtSZW5kZXJpbmdQYWludFNlcnZlciAqS0NhbnZhc1JlbmRlcmluZ1N0eWxl
OjpzdHJva2VQYWludFNlcnZlcihjb25zdCBraHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxlLCBjb25z
dCBSZW5kZXJQYXRoKiBpdGVtKQogewotICAgIGlmIChtX3N0cm9rZVBhaW50ZXJQYWludFNlcnZl
ck92ZXJyaWRlKSAKLSAgICAgICAgcmV0dXJuIG1fc3Ryb2tlUGFpbnRlclBhaW50U2VydmVyT3Zl
cnJpZGU7Ci0KLSAgICBTVkdQYWludEltcGwgKnN0cm9rZSA9IG1fc3R5bGUtPnN2Z1N0eWxlKCkt
PnN0cm9rZVBhaW50KCk7Ci0KLSAgICBpZiAoIXN0cm9rZSB8fCBzdHJva2UtPnBhaW50VHlwZSgp
ID09IFNWR19QQUlOVFRZUEVfTk9ORSkKKyAgICBpZiAoIWlzU3Ryb2tlZChzdHlsZSkpCiAgICAg
ICAgIHJldHVybiAwOwogCisgICAgU1ZHUGFpbnRJbXBsICpzdHJva2UgPSBzdHlsZS0+c3ZnU3R5
bGUoKS0+c3Ryb2tlUGFpbnQoKTsKKwogICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqc3Ryb2tl
UGFpbnRTZXJ2ZXI7CiAgICAgaWYgKHN0cm9rZSAmJiBzdHJva2UtPnBhaW50VHlwZSgpID09IFNW
R19QQUlOVFRZUEVfVVJJKSB7CiAgICAgICAgIEtET006OkRPTVN0cmluZyBpZChzdHJva2UtPnVy
aSgpKTsKQEAgLTE0NCw3ICsxMjEsNyBAQCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKktDYW52YXNS
ZW5kZXJpbmdTCiAgICAgICAgIHN0cm9rZVBhaW50U2VydmVyID0gUVBhaW50ZXI6OnJlbmRlcmlu
Z0RldmljZSgpLT5jcmVhdGVQYWludFNlcnZlcihLQ1BhaW50U2VydmVyVHlwZShQU19TT0xJRCkp
OwogICAgICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZCAqc3Ryb2tlUGFpbnRTZXJ2ZXJT
b2xpZCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkICo+KHN0cm9rZVBh
aW50U2VydmVyKTsKICAgICAgICAgaWYgKHN0cm9rZS0+cGFpbnRUeXBlKCkgPT0gU1ZHX1BBSU5U
VFlQRV9DVVJSRU5UQ09MT1IpCi0gICAgICAgICAgICBzdHJva2VQYWludFNlcnZlclNvbGlkLT5z
ZXRDb2xvcihtX3N0eWxlLT5jb2xvcigpKTsKKyAgICAgICAgICAgIHN0cm9rZVBhaW50U2VydmVy
U29saWQtPnNldENvbG9yKHN0eWxlLT5jb2xvcigpKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgc3Ryb2tlUGFpbnRTZXJ2ZXJTb2xpZC0+c2V0Q29sb3Ioc3Ryb2tlLT5jb2xvcigpKTsKICAg
ICB9CkBAIC0xNTIsNDIgKzEyOSw2IEBAIEtSZW5kZXJpbmdQYWludFNlcnZlciAqS0NhbnZhc1Jl
bmRlcmluZ1MKICAgICByZXR1cm4gc3Ryb2tlUGFpbnRTZXJ2ZXI7CiB9CiAKLXZvaWQgS0NhbnZh
c1JlbmRlcmluZ1N0eWxlOjp1cGRhdGVTdHlsZShjb25zdCBraHRtbDo6UmVuZGVyU3R5bGUgKnN0
eWxlLCBSZW5kZXJQYXRoICppdGVtKQotewotICAgIG1fc3R5bGUgPSBzdHlsZTsKLSAgICAKLSAg
ICBmaWxsUGFpbnRlcigpLT5zZXRGaWxsUnVsZShtX3N0eWxlLT5zdmdTdHlsZSgpLT5maWxsUnVs
ZSgpID09IFdSX05PTlpFUk8gPyBSVUxFX05PTlpFUk8gOiBSVUxFX0VWRU5PREQpOwotICAgIGZp
bGxQYWludGVyKCktPnNldE9wYWNpdHkobV9zdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbE9wYWNpdHko
KSk7Ci0KLSAgICBzdHJva2VQYWludGVyKCktPnNldE9wYWNpdHkobV9zdHlsZS0+c3ZnU3R5bGUo
KS0+c3Ryb2tlT3BhY2l0eSgpKTsKLSAgICBzdHJva2VQYWludGVyKCktPnNldFN0cm9rZVdpZHRo
KEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgoaXRlbSwgbV9zdHls
ZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgoKSwgMS4wKSk7Ci0KLSAgICBLRE9NOjpDU1NWYWx1
ZUxpc3RJbXBsICpkYXNoZXMgPSBtX3N0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VEYXNoQXJyYXko
KTsKLSAgICBpZiAoZGFzaGVzKSB7Ci0gICAgICAgIEtET006OkNTU1ByaW1pdGl2ZVZhbHVlSW1w
bCAqZGFzaCA9IDA7Ci0gICAgICAgIFEzUGFpbnREZXZpY2VNZXRyaWNzICpwYWludERldmljZU1l
dHJpY3MgPSAwOwotCi0gICAgICAgIFNWR0VsZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudEltcGwgKj4oaXRlbS0+ZWxlbWVudCgpKTsKLSAgICAgICAgaWYgKGVsZW1l
bnQgJiYgZWxlbWVudC0+b3duZXJEb2N1bWVudCgpKQotICAgICAgICAgICAgcGFpbnREZXZpY2VN
ZXRyaWNzID0gZWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5wYWludERldmljZU1ldHJpY3MoKTsK
LQotICAgICAgICBLQ0Rhc2hBcnJheSBhcnJheTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBsZW4g
PSBkYXNoZXMtPmxlbmd0aCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkg
PCBsZW47IGkrKykgewotICAgICAgICAgICAgZGFzaCA9IHN0YXRpY19jYXN0PEtET006OkNTU1By
aW1pdGl2ZVZhbHVlSW1wbCAqPihkYXNoZXMtPml0ZW0oaSkpOwotICAgICAgICAgICAgaWYgKGRh
c2gpCi0gICAgICAgICAgICAgICAgYXJyYXkuYXBwZW5kKChmbG9hdCkgZGFzaC0+Y29tcHV0ZUxl
bmd0aEZsb2F0KGNvbnN0X2Nhc3Q8a2h0bWw6OlJlbmRlclN0eWxlICo+KG1fc3R5bGUpLCBwYWlu
dERldmljZU1ldHJpY3MpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0cm9rZVBhaW50ZXIoKS0+
c2V0RGFzaEFycmF5KGFycmF5KTsKLSAgICAgICAgc3Ryb2tlUGFpbnRlcigpLT5zZXREYXNoT2Zm
c2V0KEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgoaXRlbSwgbV9z
dHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAwLjApKTsKLSAgICB9Ci0KLSAg
ICBzdHJva2VQYWludGVyKCktPnNldFN0cm9rZU1pdGVyTGltaXQobV9zdHlsZS0+c3ZnU3R5bGUo
KS0+c3Ryb2tlTWl0ZXJMaW1pdCgpKTsKLSAgICBzdHJva2VQYWludGVyKCktPnNldFN0cm9rZUNh
cFN0eWxlKChLQ0NhcFN0eWxlKSBtX3N0eWxlLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpKTsKLSAg
ICBzdHJva2VQYWludGVyKCktPnNldFN0cm9rZUpvaW5TdHlsZSgoS0NKb2luU3R5bGUpIG1fc3R5
bGUtPnN2Z1N0eWxlKCktPmpvaW5TdHlsZSgpKTsKLX0KLQogZG91YmxlIEtDYW52YXNSZW5kZXJp
bmdTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgoY29uc3QgUmVuZGVyUGF0aCAqaXRlbSwgS0RP
TTo6Q1NTVmFsdWVJbXBsICp2YWx1ZSwgZG91YmxlIGRlZmF1bHRWYWx1ZSkKIHsKICAgICBLRE9N
OjpDU1NQcmltaXRpdmVWYWx1ZUltcGwgKnByaW1pdGl2ZSA9IHN0YXRpY19jYXN0PEtET006OkNT
U1ByaW1pdGl2ZVZhbHVlSW1wbCAqPih2YWx1ZSk7CkBAIC0yMTUsMjAgKzE1Niw0OSBAQCBkb3Vi
bGUgS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpjc3NQcmltaXRpCiAgICAgcmV0dXJuIHByaW1pdGl2
ZS0+Y29tcHV0ZUxlbmd0aEZsb2F0KGNvbnN0X2Nhc3Q8a2h0bWw6OlJlbmRlclN0eWxlICo+KGl0
ZW0tPnN0eWxlKCkpLCBwYWludERldmljZU1ldHJpY3MpOwogfQogCi1LUmVuZGVyaW5nU3Ryb2tl
UGFpbnRlciAqS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpzdHJva2VQYWludGVyKCkKK0tSZW5kZXJp
bmdTdHJva2VQYWludGVyIEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6c3Ryb2tlUGFpbnRlcihjb25z
dCBraHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxlLCBjb25zdCBSZW5kZXJQYXRoICppdGVtKQogewot
ICAgIGlmKCFtX3N0cm9rZVBhaW50ZXIpCi0gICAgICAgIG1fc3Ryb2tlUGFpbnRlciA9IG5ldyBL
UmVuZGVyaW5nU3Ryb2tlUGFpbnRlcigpOworICAgIEtSZW5kZXJpbmdTdHJva2VQYWludGVyIHN0
cm9rZVBhaW50ZXI7CisKKyAgICBzdHJva2VQYWludGVyLnNldE9wYWNpdHkoc3R5bGUtPnN2Z1N0
eWxlKCktPnN0cm9rZU9wYWNpdHkoKSk7CisgICAgc3Ryb2tlUGFpbnRlci5zZXRTdHJva2VXaWR0
aChLQ2FudmFzUmVuZGVyaW5nU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKGl0ZW0sIHN0eWxl
LT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLCAxLjApKTsKIAotICAgIHJldHVybiBtX3N0cm9r
ZVBhaW50ZXI7CisgICAgS0RPTTo6Q1NTVmFsdWVMaXN0SW1wbCAqZGFzaGVzID0gc3R5bGUtPnN2
Z1N0eWxlKCktPnN0cm9rZURhc2hBcnJheSgpOworICAgIGlmIChkYXNoZXMpIHsKKyAgICAgICAg
S0RPTTo6Q1NTUHJpbWl0aXZlVmFsdWVJbXBsICpkYXNoID0gMDsKKyAgICAgICAgUTNQYWludERl
dmljZU1ldHJpY3MgKnBhaW50RGV2aWNlTWV0cmljcyA9IDA7CisKKyAgICAgICAgU1ZHRWxlbWVu
dEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50SW1wbCAqPihpdGVtLT5lbGVt
ZW50KCkpOworICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5vd25lckRvY3VtZW50KCkp
CisgICAgICAgICAgICBwYWludERldmljZU1ldHJpY3MgPSBlbGVtZW50LT5vd25lckRvY3VtZW50
KCktPnBhaW50RGV2aWNlTWV0cmljcygpOworCisgICAgICAgIEtDRGFzaEFycmF5IGFycmF5Owor
ICAgICAgICB1bnNpZ25lZCBsb25nIGxlbiA9IGRhc2hlcy0+bGVuZ3RoKCk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBkYXNo
ID0gc3RhdGljX2Nhc3Q8S0RPTTo6Q1NTUHJpbWl0aXZlVmFsdWVJbXBsICo+KGRhc2hlcy0+aXRl
bShpKSk7CisgICAgICAgICAgICBpZiAoZGFzaCkKKyAgICAgICAgICAgICAgICBhcnJheS5hcHBl
bmQoKGZsb2F0KSBkYXNoLT5jb21wdXRlTGVuZ3RoRmxvYXQoY29uc3RfY2FzdDxraHRtbDo6UmVu
ZGVyU3R5bGUgKj4oc3R5bGUpLCBwYWludERldmljZU1ldHJpY3MpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHN0cm9rZVBhaW50ZXIuc2V0RGFzaEFycmF5KGFycmF5KTsKKyAgICAgICAgc3Ryb2tl
UGFpbnRlci5zZXREYXNoT2Zmc2V0KEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6Y3NzUHJpbWl0aXZl
VG9MZW5ndGgoaXRlbSwgc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZURhc2hPZmZzZXQoKSwgMC4w
KSk7CisgICAgfQorCisgICAgc3Ryb2tlUGFpbnRlci5zZXRTdHJva2VNaXRlckxpbWl0KHN0eWxl
LT5zdmdTdHlsZSgpLT5zdHJva2VNaXRlckxpbWl0KCkpOworICAgIHN0cm9rZVBhaW50ZXIuc2V0
U3Ryb2tlQ2FwU3R5bGUoKEtDQ2FwU3R5bGUpIHN0eWxlLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgp
KTsKKyAgICBzdHJva2VQYWludGVyLnNldFN0cm9rZUpvaW5TdHlsZSgoS0NKb2luU3R5bGUpIHN0
eWxlLT5zdmdTdHlsZSgpLT5qb2luU3R5bGUoKSk7CisKKyAgICByZXR1cm4gc3Ryb2tlUGFpbnRl
cjsKIH0KIAotS1JlbmRlcmluZ0ZpbGxQYWludGVyICpLQ2FudmFzUmVuZGVyaW5nU3R5bGU6OmZp
bGxQYWludGVyKCkKK0tSZW5kZXJpbmdGaWxsUGFpbnRlciBLQ2FudmFzUmVuZGVyaW5nU3R5bGU6
OmZpbGxQYWludGVyKGNvbnN0IGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUsIGNvbnN0IFJlbmRl
clBhdGggKml0ZW0pCiB7Ci0gICAgaWYoIW1fZmlsbFBhaW50ZXIpCi0gICAgICAgIG1fZmlsbFBh
aW50ZXIgPSBuZXcgS1JlbmRlcmluZ0ZpbGxQYWludGVyKCk7CisgICAgS1JlbmRlcmluZ0ZpbGxQ
YWludGVyIGZpbGxQYWludGVyOwogICAgIAotICAgIHJldHVybiBtX2ZpbGxQYWludGVyOworICAg
IGZpbGxQYWludGVyLnNldEZpbGxSdWxlKHN0eWxlLT5zdmdTdHlsZSgpLT5maWxsUnVsZSgpID09
IFdSX05PTlpFUk8gPyBSVUxFX05PTlpFUk8gOiBSVUxFX0VWRU5PREQpOworICAgIGZpbGxQYWlu
dGVyLnNldE9wYWNpdHkoc3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxPcGFjaXR5KCkpOworCisgICAg
cmV0dXJuIGZpbGxQYWludGVyOwogfQogCiAvLyB2aW06dHM9NDpub2V0CkluZGV4OiBrc3ZnMi9t
aXNjL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL21pc2MvS0Nh
bnZhc1JlbmRlcmluZ1N0eWxlLmgJKHJldmlzaW9uIDEyMDg0KQorKysga3N2ZzIvbWlzYy9LQ2Fu
dmFzUmVuZGVyaW5nU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAg
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBr
ZGUub3JnPgogICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICAgICAgICAgICAgICAgICAgMjAwNiAgICAgICBBbGV4YW5kZXIgS2VsbGV0dCA8bHlw
YW5vdkBrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0
CiAKQEAgLTY4LDM3ICs2OSwxOSBAQCBuYW1lc3BhY2UgS1NWRwogICAgICAgICBLQ2FudmFzUmVu
ZGVyaW5nU3R5bGUoY29uc3Qga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSk7CiAgICAgICAgIH5L
Q2FudmFzUmVuZGVyaW5nU3R5bGUoKTsKIAotICAgICAgICB2b2lkIHVwZGF0ZVN0eWxlKGNvbnN0
IGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUsIFJlbmRlclBhdGggKml0ZW0pOworICAgICAgICBz
dGF0aWMgS1JlbmRlcmluZ0ZpbGxQYWludGVyIGZpbGxQYWludGVyKGNvbnN0IGtodG1sOjpSZW5k
ZXJTdHlsZSAqc3R5bGUsIGNvbnN0IFJlbmRlclBhdGggKml0ZW0pOworICAgICAgICBzdGF0aWMg
S1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIgc3Ryb2tlUGFpbnRlcihjb25zdCBraHRtbDo6UmVuZGVy
U3R5bGUgKnN0eWxlLCBjb25zdCBSZW5kZXJQYXRoICppdGVtKTsKIAotICAgICAgICAvLyBTdHJv
a2UgKGFrYSBQZW4pIHByb3BlcnRpZXMKLSAgICAgICAgYm9vbCBpc1N0cm9rZWQoKSBjb25zdDsK
KyAgICAgICAgc3RhdGljIGJvb2wgaXNTdHJva2VkKGNvbnN0IGtodG1sOjpSZW5kZXJTdHlsZSAq
c3R5bGUpOworICAgICAgICBzdGF0aWMgS1JlbmRlcmluZ1BhaW50U2VydmVyICpzdHJva2VQYWlu
dFNlcnZlcihjb25zdCBraHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxlLCBjb25zdCBSZW5kZXJQYXRo
Kik7CiAKLSAgICAgICAgS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIgKnN0cm9rZVBhaW50ZXIoKTsK
LSAgICAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpzdHJva2VQYWludFNlcnZlcihjb25zdCBr
aHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxlLCBjb25zdCBSZW5kZXJQYXRoKik7Ci0gICAgICAgIHZv
aWQgb3ZlcnJpZGVTdHJva2VQYWludFNlcnZlcihLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnBzZXJ2
ZXIpOworICAgICAgICBzdGF0aWMgYm9vbCBpc0ZpbGxlZChjb25zdCBraHRtbDo6UmVuZGVyU3R5
bGUgKnN0eWxlKTsKKyAgICAgICAgc3RhdGljIEtSZW5kZXJpbmdQYWludFNlcnZlciAqZmlsbFBh
aW50U2VydmVyKGNvbnN0IGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUsIGNvbnN0IFJlbmRlclBh
dGgqKTsKIAogICAgICAgICBzdGF0aWMgZG91YmxlIGNzc1ByaW1pdGl2ZVRvTGVuZ3RoKGNvbnN0
IFJlbmRlclBhdGggKml0ZW0sIEtET006OkNTU1ZhbHVlSW1wbCAqdmFsdWUsIGRvdWJsZSBkZWZh
dWx0VmFsdWUgPSAwLjApOwotCi0gICAgICAgIC8vIEZpbGwgKGFrYSBCcnVzaCkgcHJvcGVydGll
cwotICAgICAgICBib29sIGlzRmlsbGVkKCkgY29uc3Q7Ci0KLSAgICAgICAgS1JlbmRlcmluZ0Zp
bGxQYWludGVyICpmaWxsUGFpbnRlcigpOwotICAgICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIg
KmZpbGxQYWludFNlcnZlcihjb25zdCBraHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxlLCBjb25zdCBS
ZW5kZXJQYXRoKik7Ci0gICAgICAgIHZvaWQgb3ZlcnJpZGVGaWxsUGFpbnRTZXJ2ZXIoS1JlbmRl
cmluZ1BhaW50U2VydmVyICpwc2VydmVyKTsKLQotICAgICAgICBjb25zdCBraHRtbDo6UmVuZGVy
U3R5bGUgKnJlbmRlclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQogICAgICAgICAK
ICAgICBwcml2YXRlOgogICAgICAgICBLQ2FudmFzUmVuZGVyaW5nU3R5bGUoY29uc3QgS0NhbnZh
c1JlbmRlcmluZ1N0eWxlICZvdGhlcik7Ci0KLSAgICAgICAgY29uc3Qga2h0bWw6OlJlbmRlclN0
eWxlICptX3N0eWxlOwotCi0gICAgICAgIC8vIEtDYW52YXMgc3R1ZmYKLSAgICAgICAgS1JlbmRl
cmluZ0ZpbGxQYWludGVyICptX2ZpbGxQYWludGVyOwotICAgICAgICBLUmVuZGVyaW5nU3Ryb2tl
UGFpbnRlciAqbV9zdHJva2VQYWludGVyOwotCi0gICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZl
ciAqbV9maWxsUGFpbnRlclBhaW50U2VydmVyT3ZlcnJpZGU7Ci0gICAgICAgIEtSZW5kZXJpbmdQ
YWludFNlcnZlciAqbV9zdHJva2VQYWludGVyUGFpbnRTZXJ2ZXJPdmVycmlkZTsKICAgICB9Owog
fTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5665</attachid>
            <date>2006-01-14 04:52:22 -0800</date>
            <delta_ts>2006-01-14 17:54:13 -0800</delta_ts>
            <desc>third version of patch, move the statics into a new class KSVGPainterFactory</desc>
            <filename>refactor-renderstyle-patch2-3.patch</filename>
            <type>text/plain</type>
            <size>36803</size>
            <attacher name="Alexander Kellett">a</attacher>
            
              <data encoding="base64">SW5kZXg6IGtjYW52YXMvS0NhbnZhc0l0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvS0Nh
bnZhc0l0ZW0uY3BwCShyZXZpc2lvbiAxMjA4NCkKKysrIGtjYW52YXMvS0NhbnZhc0l0ZW0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OSwxMiArNjksNiBAQCBSZW5kZXJQYXRoOjp+UmVuZGVyUGF0
aCgpCiAgICAgZGVsZXRlIGQ7CiB9CiAKLXZvaWQgUmVuZGVyUGF0aDo6c2V0U3R5bGUoa2h0bWw6
OlJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAgICBkLT5zdHlsZS0+dXBkYXRlU3R5bGUoc3R5bGUs
IHRoaXMpOwotICAgIGtodG1sOjpSZW5kZXJPYmplY3Q6OnNldFN0eWxlKHN0eWxlKTsKLX0KLQog
UU1hdHJpeCBSZW5kZXJQYXRoOjpsb2NhbFRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGQtPm1hdHJpeDsKQEAgLTE0MSw2ICsxMzUsOCBAQCBjb25zdCBLQ2FudmFzQ29tbW9uQXJncyBS
ZW5kZXJQYXRoOjpjb21tCiAgICAgS0NhbnZhc0NvbW1vbkFyZ3MgYXJnczsKICAgICBhcmdzLnNl
dFBhdGgocGF0aCgpKTsKICAgICBhcmdzLnNldFN0eWxlKGNhbnZhc1N0eWxlKCkpOworICAgIGFy
Z3Muc2V0UmVuZGVyU3R5bGUoc3R5bGUoKSk7CisgICAgYXJncy5zZXRSZW5kZXJQYXRoKHRoaXMp
OwogICAgIHJldHVybiBhcmdzOwogfQogCkluZGV4OiBrY2FudmFzL0tDYW52YXNJdGVtLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga2NhbnZhcy9LQ2FudmFzSXRlbS5oCShyZXZpc2lvbiAxMjA4NCkKKysrIGtj
YW52YXMvS0NhbnZhc0l0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNiBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjaGFuZ2VQYXRoKEtDYW52YXNQYXRoKiBuZXdQYXRoKTsKIAogICAgIEtD
YW52YXNQYXRoKiBwYXRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKGtodG1s
OjpSZW5kZXJTdHlsZSAqc3R5bGUpOwogICAgIEtTVkc6OktDYW52YXNSZW5kZXJpbmdTdHlsZSAq
Y2FudmFzU3R5bGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclBhdGgoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBrY2FudmFzL0tDYW52YXNUcmVlRGVidWcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtjYW52YXMvS0NhbnZhc1RyZWVEZWJ1Zy5jcHAJKHJldmlzaW9uIDEy
MDg0KQorKysga2NhbnZhcy9LQ2FudmFzVHJlZURlYnVnLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQzLDQ5ICsyNDMsNDggQEAgc3RhdGljIHZvaWQgd3JpdGVTdHlsZShRVGV4dFN0cmVhbSAmdHMs
IAogICAgICAgICB0cyA8PCAiIFtvcGFjaXR5PSIgPDwgc3R5bGUtPm9wYWNpdHkoKSA8PCAiXSI7
CiAgICAgaWYgKG9iamVjdC5pc1JlbmRlclBhdGgoKSkgewogICAgICAgICBjb25zdCBSZW5kZXJQ
YXRoICZwYXRoID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyUGF0aCAmPihvYmplY3QpOwotICAg
ICAgICBLQ2FudmFzUmVuZGVyaW5nU3R5bGUgKmNhbnZhc1N0eWxlID0gcGF0aC5jYW52YXNTdHls
ZSgpOwotICAgICAgICBpZiAoY2FudmFzU3R5bGUtPmlzU3Ryb2tlZCgpKSB7CisgICAgICAgIEtS
ZW5kZXJpbmdQYWludFNlcnZlciAqc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZHOjpLU1ZHUGFpbnRl
ckZhY3Rvcnk6OnN0cm9rZVBhaW50U2VydmVyKHN0eWxlLCAmcGF0aCk7CisgICAgICAgIGlmIChz
dHJva2VQYWludFNlcnZlcikgewogICAgICAgICAgICAgUVRleHRTdHJlYW1TZXBhcmF0b3Igcygi
ICIpOwogICAgICAgICAgICAgdHMgPDwgIiBbc3Ryb2tlPXsiOwotICAgICAgICAgICAgS1JlbmRl
cmluZ1BhaW50U2VydmVyICpzdHJva2VQYWludFNlcnZlciA9IGNhbnZhc1N0eWxlLT5zdHJva2VQ
YWludFNlcnZlcihzdHlsZSwgJnBhdGgpOwogICAgICAgICAgICAgaWYgKHN0cm9rZVBhaW50U2Vy
dmVyKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFzdHJva2VQYWludFNlcnZlci0+aWRJblJlZ2lz
dHJ5KCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbaWQ9XCIi
PDwgc3Ryb2tlUGFpbnRTZXJ2ZXItPmlkSW5SZWdpc3RyeSgpIDw8ICJcIl0iOyAKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgKnN0cm9rZVBhaW50
U2VydmVyOwogICAgICAgICAgICAgfSAKLSAgICAgICAgICAgIEtSZW5kZXJpbmdTdHJva2VQYWlu
dGVyICpwID0gY2FudmFzU3R5bGUtPnN0cm9rZVBhaW50ZXIoKTsKLSAgICAgICAgICAgIGlmIChw
LT5vcGFjaXR5KCkgIT0gMS4wZikKLSAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbb3BhY2l0
eT0iIDw8IHAtPm9wYWNpdHkoKSA8PCAiXSI7Ci0gICAgICAgICAgICBpZiAocC0+c3Ryb2tlV2lk
dGgoKSAhPSAxLjBmKQotICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltzdHJva2Ugd2lkdGg9
IiA8PCBwLT5zdHJva2VXaWR0aCgpIDw8ICJdIjsKLSAgICAgICAgICAgIGlmIChwLT5zdHJva2VN
aXRlckxpbWl0KCkgIT0gNCkKLSAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbbWl0ZXIgbGlt
aXQ9IiA8PCBwLT5zdHJva2VNaXRlckxpbWl0KCkgPDwgIl0iOwotICAgICAgICAgICAgaWYgKHAt
PnN0cm9rZUNhcFN0eWxlKCkgIT0gMSkKLSAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbbGlu
ZSBjYXA9IiA8PCBwLT5zdHJva2VDYXBTdHlsZSgpIDw8ICJdIjsKLSAgICAgICAgICAgIGlmIChw
LT5zdHJva2VKb2luU3R5bGUoKSAhPSAxKQotICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIlts
aW5lIGpvaW49IiA8PCBwLT5zdHJva2VKb2luU3R5bGUoKSA8PCAiXSI7Ci0gICAgICAgICAgICBp
ZiAocC0+ZGFzaE9mZnNldCgpICE9IDAuMGYpCi0gICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAi
W2Rhc2ggb2Zmc2V0PSIgPDwgcC0+ZGFzaE9mZnNldCgpIDw8ICJdIjsKLSAgICAgICAgICAgIGlm
ICghcC0+ZGFzaEFycmF5KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwg
IltkYXNoIGFycmF5PSIgPDwgcC0+ZGFzaEFycmF5KCkgPDwgIl0iOyAgICAgICAgCisgICAgICAg
ICAgICBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlciBwID0gS1NWRzo6S1NWR1BhaW50ZXJGYWN0b3J5
OjpzdHJva2VQYWludGVyKHN0eWxlLCAmcGF0aCk7CisgICAgICAgICAgICBpZiAocC5vcGFjaXR5
KCkgIT0gMS4wZikKKyAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbb3BhY2l0eT0iIDw8IHAu
b3BhY2l0eSgpIDw8ICJdIjsKKyAgICAgICAgICAgIGlmIChwLnN0cm9rZVdpZHRoKCkgIT0gMS4w
ZikKKyAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbc3Ryb2tlIHdpZHRoPSIgPDwgcC5zdHJv
a2VXaWR0aCgpIDw8ICJdIjsKKyAgICAgICAgICAgIGlmIChwLnN0cm9rZU1pdGVyTGltaXQoKSAh
PSA0KQorICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIlttaXRlciBsaW1pdD0iIDw8IHAuc3Ry
b2tlTWl0ZXJMaW1pdCgpIDw8ICJdIjsKKyAgICAgICAgICAgIGlmIChwLnN0cm9rZUNhcFN0eWxl
KCkgIT0gMSkKKyAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbbGluZSBjYXA9IiA8PCBwLnN0
cm9rZUNhcFN0eWxlKCkgPDwgIl0iOworICAgICAgICAgICAgaWYgKHAuc3Ryb2tlSm9pblN0eWxl
KCkgIT0gMSkKKyAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbbGluZSBqb2luPSIgPDwgcC5z
dHJva2VKb2luU3R5bGUoKSA8PCAiXSI7CisgICAgICAgICAgICBpZiAocC5kYXNoT2Zmc2V0KCkg
IT0gMC4wZikKKyAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbZGFzaCBvZmZzZXQ9IiA8PCBw
LmRhc2hPZmZzZXQoKSA8PCAiXSI7CisgICAgICAgICAgICBpZiAoIXAuZGFzaEFycmF5KCkuaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltkYXNoIGFycmF5PSIgPDwgcC5k
YXNoQXJyYXkoKSA8PCAiXSI7ICAgICAgICAKICAgICAgICAgICAgIHRzIDw8ICJ9XSI7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKGNhbnZhc1N0eWxlLT5pc0ZpbGxlZCgpKSB7CisgICAgICAgIEtS
ZW5kZXJpbmdQYWludFNlcnZlciAqZmlsbFBhaW50U2VydmVyID0gS1NWRzo6S1NWR1BhaW50ZXJG
YWN0b3J5OjpmaWxsUGFpbnRTZXJ2ZXIoc3R5bGUsICZwYXRoKTsKKyAgICAgICAgaWYgKGZpbGxQ
YWludFNlcnZlcikgewogICAgICAgICAgICAgUVRleHRTdHJlYW1TZXBhcmF0b3IgcygiICIpOwog
ICAgICAgICAgICAgdHMgPDwgIiBbZmlsbD17IjsKLSAgICAgICAgICAgIEtSZW5kZXJpbmdQYWlu
dFNlcnZlciAqZmlsbFBhaW50U2VydmVyID0gY2FudmFzU3R5bGUtPmZpbGxQYWludFNlcnZlcihz
dHlsZSwgJnBhdGgpOwogICAgICAgICAgICAgaWYgKGZpbGxQYWludFNlcnZlcikgewogICAgICAg
ICAgICAgICAgIGlmICghZmlsbFBhaW50U2VydmVyLT5pZEluUmVnaXN0cnkoKS5pc0VtcHR5KCkp
CiAgICAgICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltpZD1cIiIgPDwgZmlsbFBhaW50U2Vy
dmVyLT5pZEluUmVnaXN0cnkoKSA8PCAiXCJdIjsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgKmZpbGxQYWludFNlcnZlcjsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIEtSZW5kZXJpbmdGaWxsUGFpbnRlciAqcCA9IGNhbnZhc1N0eWxlLT5m
aWxsUGFpbnRlcigpOwotICAgICAgICAgICAgaWYgKHAtPm9wYWNpdHkoKSAhPSAxLjBmKQotICAg
ICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltvcGFjaXR5PSIgPDwgcC0+b3BhY2l0eSgpIDw8ICJd
IjsKLSAgICAgICAgICAgIGlmIChwLT5maWxsUnVsZSgpICE9IFJVTEVfTk9OWkVSTykKLSAgICAg
ICAgICAgICAgICB0cyA8PCBzIDw8ICJbZmlsbCBydWxlPSIgPDwgcC0+ZmlsbFJ1bGUoKSA8PCAi
XSI7CisgICAgICAgICAgICBLUmVuZGVyaW5nRmlsbFBhaW50ZXIgcCA9IEtTVkc6OktTVkdQYWlu
dGVyRmFjdG9yeTo6ZmlsbFBhaW50ZXIoc3R5bGUsICZwYXRoKTsKKyAgICAgICAgICAgIGlmIChw
Lm9wYWNpdHkoKSAhPSAxLjBmKQorICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltvcGFjaXR5
PSIgPDwgcC5vcGFjaXR5KCkgPDwgIl0iOworICAgICAgICAgICAgaWYgKHAuZmlsbFJ1bGUoKSAh
PSBSVUxFX05PTlpFUk8pCisgICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAiW2ZpbGwgcnVsZT0i
IDw8IHAuZmlsbFJ1bGUoKSA8PCAiXSI7CiAgICAgICAgICAgICB0cyA8PCAifV0iOwogICAgICAg
ICB9CiAgICAgfQpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzSXRlbVF1YXJ0
ei5tbQkocmV2aXNpb24gMTIwODQpCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0l0
ZW1RdWFydHoubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2ltcG9ydCA8
a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogCisjaW1wb3J0ICJrY2FudmFzL1JlbmRlclBhdGguaCIK
ICNpbXBvcnQgImtjYW52YXMvS0NhbnZhcy5oIgogI2ltcG9ydCAiS0NhbnZhc1JlbmRlcmluZ1N0
eWxlLmgiCiAjaW1wb3J0ICJLUmVuZGVyaW5nRmlsbFBhaW50ZXIuaCIKQEAgLTE3MCw3ICsxNzEs
NyBAQCB2b2lkIEtDYW52YXNJdGVtUXVhcnR6OjpkcmF3TWFya2Vyc0lmTmVlCiAgICAgaWYgKCFz
dGFydE1hcmtlciAmJiAhbWlkTWFya2VyICYmICFlbmRNYXJrZXIpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9IEtTVkc6OktDYW52YXNSZW5kZXJpbmdTdHlsZTo6
Y3NzUHJpbWl0aXZlVG9MZW5ndGgodGhpcywgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lk
dGgoKSwgMS4wKTsKKyAgICBkb3VibGUgc3Ryb2tlV2lkdGggPSBLU1ZHOjpLU1ZHUGFpbnRlckZh
Y3Rvcnk6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKHRoaXMsIHN0eWxlKCktPnN2Z1N0eWxlKCktPnN0
cm9rZVdpZHRoKCksIDEuMCk7CiAKICAgICBEcmF3TWFya2Vyc0RhdGEgZGF0YShzdGFydE1hcmtl
ciwgbWlkTWFya2VyLCBzdHJva2VXaWR0aCk7CiAKQEAgLTIyMSwxMyArMjIyLDEzIEBAIHZvaWQg
S0NhbnZhc0l0ZW1RdWFydHo6OnBhaW50KFBhaW50SW5mbyAKICAgICAKICAgICBLQ2FudmFzQ29t
bW9uQXJncyBhcmdzID0gY29tbW9uQXJncygpOwogCi0gICAgS1JlbmRlcmluZ1BhaW50U2VydmVy
ICpmaWxsUGFpbnRTZXJ2ZXIgPSBjYW52YXNTdHlsZSgpLT5maWxsUGFpbnRTZXJ2ZXIoY2FudmFz
U3R5bGUoKS0+cmVuZGVyU3R5bGUoKSwgdGhpcyk7CisgICAgS1JlbmRlcmluZ1BhaW50U2VydmVy
ICpmaWxsUGFpbnRTZXJ2ZXIgPSBLU1ZHOjpLU1ZHUGFpbnRlckZhY3Rvcnk6OmZpbGxQYWludFNl
cnZlcihzdHlsZSgpLCB0aGlzKTsKICAgICBpZiAoZmlsbFBhaW50U2VydmVyKSB7CiAgICAgICAg
IGRldmljZUNvbnRleHQtPmFkZFBhdGgocGF0aCgpKTsKICAgICAgICAgZmlsbFBhaW50U2VydmVy
LT5zZXRBY3RpdmVDbGllbnQodGhpcyk7CiAgICAgICAgIGZpbGxQYWludFNlcnZlci0+ZHJhdyhk
ZXZpY2VDb250ZXh0LCBhcmdzLCBBUFBMWV9UT19GSUxMKTsKICAgICB9Ci0gICAgS1JlbmRlcmlu
Z1BhaW50U2VydmVyICpzdHJva2VQYWludFNlcnZlciA9IGNhbnZhc1N0eWxlKCktPnN0cm9rZVBh
aW50U2VydmVyKGNhbnZhc1N0eWxlKCktPnJlbmRlclN0eWxlKCksIHRoaXMpOworICAgIEtSZW5k
ZXJpbmdQYWludFNlcnZlciAqc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZHOjpLU1ZHUGFpbnRlckZh
Y3Rvcnk6OnN0cm9rZVBhaW50U2VydmVyKHN0eWxlKCksIHRoaXMpOwogICAgIGlmIChzdHJva2VQ
YWludFNlcnZlcikgewogICAgICAgICBkZXZpY2VDb250ZXh0LT5hZGRQYXRoKHBhdGgoKSk7IC8v
IHBhdGggaXMgY2xlYXJlZCB3aGVuIGZpbGxlZC4KICAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXIt
PnNldEFjdGl2ZUNsaWVudCh0aGlzKTsKQEAgLTI5MSwxMyArMjkyLDEzIEBAIFFSZWN0RiBLQ2Fu
dmFzSXRlbVF1YXJ0ejo6YmJveEZvclBhdGgoYm8KICAgICAvLyB0aGUgYmJveCBtaWdodCBncm93
IGlmIHRoZSBwYXRoIGlzIHN0cm9rZWQuCiAgICAgLy8gYW5kIENHUGF0aEdldEJvdW5kaW5nQm94
IGRvZXNuJ3Qgc3VwcG9ydCB0aGF0LCBzbyB3ZSdsbCBoYXZlCiAgICAgLy8gdG8gbWFrZSBhbiBh
bHRlcm5hdGl2ZSBjYWxsLi4uCi0gICAgaWYoaW5jbHVkZVN0cm9rZSAmJiBjYW52YXNTdHlsZSgp
LT5pc1N0cm9rZWQoKSkgeworICAgIGlmIChpbmNsdWRlU3Ryb2tlICYmIEtTVkc6OktTVkdQYWlu
dGVyRmFjdG9yeTo6aXNTdHJva2VkKHN0eWxlKCkpKSB7CiAgICAgICAgIENHQ29udGV4dFJlZiBz
aGFyZWRDb250ZXh0ID0gZ2V0U2hhcmVkQ29udGV4dCgpOwogICAgICAgICAKICAgICAgICAgQ0dD
b250ZXh0U2F2ZUdTdGF0ZShzaGFyZWRDb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0QmVnaW5Q
YXRoKHNoYXJlZENvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRBZGRQYXRoKHNoYXJlZENvbnRl
eHQsIGNnUGF0aCk7Ci0gICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoc2hhcmVkQ29u
dGV4dCwgY2FudmFzU3R5bGUoKSk7CisgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQo
c2hhcmVkQ29udGV4dCwgc3R5bGUoKSwgdGhpcyk7CiAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQ
YXRoV2l0aFN0cm9rZWRQYXRoKHNoYXJlZENvbnRleHQpOwogICAgICAgICAKICAgICAgICAgYmJv
eCA9IENHQ29udGV4dEdldFBhdGhCb3VuZGluZ0JveChzaGFyZWRDb250ZXh0KTsKQEAgLTMyNiwx
MCArMzI3LDEwIEBAIGJvb2wgS0NhbnZhc0l0ZW1RdWFydHo6OmhpdHNQYXRoKGNvbnN0IEYKICAg
ICAvKiB3ZSB0cmFuc2Zvcm0gdGhlIGhpdCBwb2ludCBsb2NhbGx5LCBpbnN0ZWFkIG9mIHRyYW5z
bGF0aW5nIHRoZSBzaGFwZSB0byB0aGUgaGl0IHBvaW50LiAqLwogICAgIENHUG9pbnQgbG9jYWxI
aXRQb2ludCA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShDR1BvaW50KGhpdFBvaW50KSwg
Q0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQodHJhbnNmb3JtKSk7CiAKLSAgICBpZiAoZmlsbCAmJiBj
YW52YXNTdHlsZSgpLT5maWxsUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhpcykpIHsKLSAgICAgICAg
Q0dQYXRoRHJhd2luZ01vZGUgZHJhd01vZGUgPSAoY2FudmFzU3R5bGUoKS0+ZmlsbFBhaW50ZXIo
KS0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQpID8ga0NHUGF0aEVPRmlsbCA6IGtDR1BhdGhG
aWxsOworICAgIGlmIChmaWxsICYmIEtTVkc6OktTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50
U2VydmVyKHN0eWxlKCksIHRoaXMpKSB7CisgICAgICAgIENHUGF0aERyYXdpbmdNb2RlIGRyYXdN
b2RlID0gKEtTVkc6OktTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50ZXIoc3R5bGUoKSwgdGhp
cykuZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQpID8ga0NHUGF0aEVPRmlsbCA6IGtDR1BhdGhG
aWxsOwogICAgICAgICBoaXRTdWNjZXNzID0gQ0dDb250ZXh0UGF0aENvbnRhaW5zUG9pbnQoc2hh
cmVkQ29udGV4dCwgbG9jYWxIaXRQb2ludCwgZHJhd01vZGUpOwotICAgIH0gZWxzZSBpZiAoIWZp
bGwgJiYgY2FudmFzU3R5bGUoKS0+c3Ryb2tlUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhpcykpCisg
ICAgfSBlbHNlIGlmICghZmlsbCAmJiBLU1ZHOjpLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBh
aW50U2VydmVyKHN0eWxlKCksIHRoaXMpKQogICAgICAgICBoaXRTdWNjZXNzID0gQ0dDb250ZXh0
UGF0aENvbnRhaW5zUG9pbnQoc2hhcmVkQ29udGV4dCwgbG9jYWxIaXRQb2ludCwga0NHUGF0aFN0
cm9rZSk7CiAKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKHNoYXJlZENvbnRleHQpOwpJbmRl
eDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ1BhaW50U2VydmVy
UXVhcnR6Lm1tCShyZXZpc2lvbiAxMjA4NCkKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHoubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICAyMDA2IEFsZXhhbmRlciBLZWxsZXR0IDxs
eXBhbm92QGtkZS5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDMw
ICs0NCwzMSBAQCB2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXVhcnR6OjpkCiB7CiAg
ICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHogKnF1YXJ0ekNvbnRleHQgPSBzdGF0aWNf
Y2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eiAqPihyZW5kZXJpbmdDb250ZXh0KTsK
ICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHF1YXJ0ekNvbnRleHQtPmNnQ29udGV4dCgpOwot
ICAgIEtTVkc6OktDYW52YXNSZW5kZXJpbmdTdHlsZSAqY2FudmFzU3R5bGUgPSBhcmdzLmNhbnZh
c1N0eWxlKCk7CisgICAga2h0bWw6OlJlbmRlclN0eWxlICpyZW5kZXJTdHlsZSA9IGFyZ3MucmVu
ZGVyU3R5bGUoKTsKKyAgICBjb25zdCBSZW5kZXJQYXRoICpyZW5kZXJQYXRoID0gYXJncy5yZW5k
ZXJQYXRoKCk7CiAKLSAgICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0LCBjYW52YXNTdHlsZS0+
cmVuZGVyU3R5bGUoKS0+b3BhY2l0eSgpKTsKKyAgICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0
LCByZW5kZXJTdHlsZS0+b3BhY2l0eSgpKTsKICAgICAgICAgCi0gICAgaWYgKCAodHlwZSAmIEFQ
UExZX1RPX0ZJTEwpICYmIGNhbnZhc1N0eWxlLT5pc0ZpbGxlZCgpICkgeworICAgIGlmICgodHlw
ZSAmIEFQUExZX1RPX0ZJTEwpICYmIEtTVkc6OktTVkdQYWludGVyRmFjdG9yeTo6aXNGaWxsZWQo
cmVuZGVyU3R5bGUpKSB7CiAgICAgICAgIENHQ29sb3JSZWYgY29sb3JDRyA9IGNnQ29sb3IoY29s
b3IoKSk7Ci0gICAgICAgIENHQ29sb3JSZWYgd2l0aEFscGhhID0gQ0dDb2xvckNyZWF0ZUNvcHlX
aXRoQWxwaGEoY29sb3JDRywgY2FudmFzU3R5bGUtPmZpbGxQYWludGVyKCktPm9wYWNpdHkoKSk7
CisgICAgICAgIENHQ29sb3JSZWYgd2l0aEFscGhhID0gQ0dDb2xvckNyZWF0ZUNvcHlXaXRoQWxw
aGEoY29sb3JDRywgS1NWRzo6S1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRlcihyZW5kZXJT
dHlsZSwgcmVuZGVyUGF0aCkub3BhY2l0eSgpKTsKICAgICAgICAgQ0dDb250ZXh0U2V0RmlsbENv
bG9yV2l0aENvbG9yKGNvbnRleHQsIHdpdGhBbHBoYSk7CiAgICAgICAgIENHQ29sb3JSZWxlYXNl
KGNvbG9yQ0cpOwogICAgICAgICBDR0NvbG9yUmVsZWFzZSh3aXRoQWxwaGEpOwotICAgICAgICBp
ZiAoY2FudmFzU3R5bGUtPmZpbGxQYWludGVyKCktPmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0RE
KQorICAgICAgICBpZiAoS1NWRzo6S1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRlcihyZW5k
ZXJTdHlsZSwgcmVuZGVyUGF0aCkuZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQpCiAgICAgICAg
ICAgICBDR0NvbnRleHRFT0ZpbGxQYXRoKGNvbnRleHQpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBDR0NvbnRleHRGaWxsUGF0aChjb250ZXh0KTsKICAgICB9CiAKLSAgICBpZiAoICh0eXBl
ICYgQVBQTFlfVE9fU1RST0tFKSAmJiBjYW52YXNTdHlsZS0+aXNTdHJva2VkKCkgKSB7CisgICAg
aWYgKCh0eXBlICYgQVBQTFlfVE9fU1RST0tFKSAmJiBLU1ZHOjpLU1ZHUGFpbnRlckZhY3Rvcnk6
OmlzU3Ryb2tlZChyZW5kZXJTdHlsZSkpIHsKICAgICAgICAgQ0dDb2xvclJlZiBjb2xvckNHID0g
Y2dDb2xvcihjb2xvcigpKTsKLSAgICAgICAgQ0dDb2xvclJlZiB3aXRoQWxwaGEgPSBDR0NvbG9y
Q3JlYXRlQ29weVdpdGhBbHBoYShjb2xvckNHLCBjYW52YXNTdHlsZS0+c3Ryb2tlUGFpbnRlcigp
LT5vcGFjaXR5KCkpOworICAgICAgICBDR0NvbG9yUmVmIHdpdGhBbHBoYSA9IENHQ29sb3JDcmVh
dGVDb3B5V2l0aEFscGhhKGNvbG9yQ0csIEtTVkc6OktTVkdQYWludGVyRmFjdG9yeTo6c3Ryb2tl
UGFpbnRlcihyZW5kZXJTdHlsZSwgcmVuZGVyUGF0aCkub3BhY2l0eSgpKTsJCQogICAgICAgICBD
R0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0LCB3aXRoQWxwaGEpOwogICAg
ICAgICBDR0NvbG9yUmVsZWFzZShjb2xvckNHKTsKICAgICAgICAgQ0dDb2xvclJlbGVhc2Uod2l0
aEFscGhhKTsKICAgICAgICAgCi0gICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29u
dGV4dCwgY2FudmFzU3R5bGUpOworICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNv
bnRleHQsIHJlbmRlclN0eWxlLCByZW5kZXJQYXRoKTsKICAgICAgICAgCiAgICAgICAgIENHQ29u
dGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CiAgICAgfQpAQCAtODcsNyArODksOCBAQCB2b2lkIEtS
ZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFydHo6CiAKICAgICBLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dFF1YXJ0eiAqcXVhcnR6Q29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0UXVhcnR6ICo+KHJlbmRlcmluZ0NvbnRleHQpOwogICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gcXVhcnR6Q29udGV4dC0+Y2dDb250ZXh0KCk7Ci0gICAgS1NWRzo6S0NhbnZhc1Jl
bmRlcmluZ1N0eWxlICpjYW52YXNTdHlsZSA9IGFyZ3MuY2FudmFzU3R5bGUoKTsKKyAgICBjb25z
dCBSZW5kZXJQYXRoICpyZW5kZXJQYXRoID0gYXJncy5yZW5kZXJQYXRoKCk7CisgICAga2h0bWw6
OlJlbmRlclN0eWxlICpyZW5kZXJTdHlsZSA9IGFyZ3MucmVuZGVyU3R5bGUoKTsKIAogICAgIEtD
YW52YXNJbWFnZSAqY2VsbCA9IHRpbGUoKTsKICAgICBpZiAoIWNlbGwpCkBAIC0xMTgsMjMgKzEy
MSwyMyBAQCB2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFydHo6CiAgICAgICAg
IHRydWUsIC8vIGhhcyBjb2xvcgogICAgICAgICAmY2FsbGJhY2tzICk7CiAKLSAgICBDR0NvbnRl
eHRTZXRBbHBoYShjb250ZXh0LCBjYW52YXNTdHlsZS0+cmVuZGVyU3R5bGUoKS0+b3BhY2l0eSgp
KTsgLy8gb3IgZG8gSSBzZXQgdGhlIGFscGhhIGFib3ZlPworICAgIENHQ29udGV4dFNldEFscGhh
KGNvbnRleHQsIHJlbmRlclN0eWxlLT5vcGFjaXR5KCkpOyAvLyBvciBkbyBJIHNldCB0aGUgYWxw
aGEgYWJvdmU/CiAKICAgICBDR0NvbG9yU3BhY2VSZWYgcGF0dGVyblNwYWNlID0gQ0dDb2xvclNw
YWNlQ3JlYXRlUGF0dGVybihOVUxMKTsKIAotICAgIGlmICggKHR5cGUgJiBBUFBMWV9UT19GSUxM
KSAmJiBjYW52YXNTdHlsZS0+aXNGaWxsZWQoKSApIHsKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9U
T19GSUxMKSAmJiBLU1ZHOjpLU1ZHUGFpbnRlckZhY3Rvcnk6OmlzRmlsbGVkKHJlbmRlclN0eWxl
KSkgewogICAgICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JTcGFjZShjb250ZXh0LCBwYXR0ZXJu
U3BhY2UpOwogICAgICAgICBDR0NvbnRleHRTZXRGaWxsUGF0dGVybihjb250ZXh0LCBwYXR0ZXJu
LCAmYWxwaGEpOwotICAgICAgICBpZiAoY2FudmFzU3R5bGUtPmZpbGxQYWludGVyKCktPmZpbGxS
dWxlKCkgPT0gUlVMRV9FVkVOT0REKQorICAgICAgICBpZiAoS1NWRzo6S1NWR1BhaW50ZXJGYWN0
b3J5OjpmaWxsUGFpbnRlcihyZW5kZXJTdHlsZSwgcmVuZGVyUGF0aCkuZmlsbFJ1bGUoKSA9PSBS
VUxFX0VWRU5PREQpCiAgICAgICAgICAgICBDR0NvbnRleHRFT0ZpbGxQYXRoKGNvbnRleHQpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBDR0NvbnRleHRGaWxsUGF0aChjb250ZXh0KTsKICAg
ICB9Ci0KLSAgICBpZiAoICh0eXBlICYgQVBQTFlfVE9fU1RST0tFKSAmJiBjYW52YXNTdHlsZS0+
aXNTdHJva2VkKCkgKSB7CisgICAgCisgICAgaWYgKCh0eXBlICYgQVBQTFlfVE9fU1RST0tFKSAm
JiBLU1ZHOjpLU1ZHUGFpbnRlckZhY3Rvcnk6OmlzU3Ryb2tlZChyZW5kZXJTdHlsZSkpIHsKICAg
ICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JTcGFjZShjb250ZXh0LCBwYXR0ZXJuU3BhY2Up
OwogICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VQYXR0ZXJuKGNvbnRleHQsIHBhdHRlcm4sICZh
bHBoYSk7Ci0gICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgY2FudmFz
U3R5bGUpOworICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHJlbmRl
clN0eWxlLCByZW5kZXJQYXRoKTsKICAgICAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjb250ZXh0
KTsKICAgICB9CiAKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0Lm1tCShy
ZXZpc2lvbiAxMjA4NCkKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJLQ2FudmFzUmVzb3Vy
Y2VzUXVhcnR6LmgiCiAjaW1wb3J0ICJLUmVuZGVyaW5nRmlsbFBhaW50ZXIuaCIKICNpbXBvcnQg
IktSZW5kZXJpbmdTdHJva2VQYWludGVyLmgiCisjaW1wb3J0ICJLQ2FudmFzUmVuZGVyaW5nU3R5
bGUuaCIKICNpbXBvcnQgImt4bWxjb3JlL0Fzc2VydGlvbnMuaCIKIAogI2ltcG9ydCA8UXVhcnR6
Q29yZS9Db3JlSW1hZ2UuaD4KQEAgLTg4LDI2ICs4OSwyOCBAQCBDR0FmZmluZVRyYW5zZm9ybSBD
R0FmZmluZVRyYW5zZm9ybU1ha2VNCiAgICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0KIAotdm9pZCBh
cHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0LCBLU1ZHOjpLQ2Fu
dmFzUmVuZGVyaW5nU3R5bGUgKnN0eWxlKQordm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0
KENHQ29udGV4dFJlZiBjb250ZXh0LCBraHRtbDo6UmVuZGVyU3R5bGUgKnJlbmRlclN0eWxlLCBj
b25zdCBSZW5kZXJQYXRoICpyZW5kZXJQYXRoKQogeworICAgIEtSZW5kZXJpbmdTdHJva2VQYWlu
dGVyIHN0cm9rZVBhaW50ZXIgPSBLU1ZHOjpLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50
ZXIocmVuZGVyU3R5bGUsIHJlbmRlclBhdGgpOworCiAgICAgLyogU2hvdWxkbid0IGFsbCB0aGVz
ZSBiZSBpbiB0aGUgc3Ryb2tlIHBhaW50ZXI/ICovCi0gICAgQ0dDb250ZXh0U2V0TGluZVdpZHRo
KGNvbnRleHQsIHN0eWxlLT5zdHJva2VQYWludGVyKCktPnN0cm9rZVdpZHRoKCkpOworICAgIENH
Q29udGV4dFNldExpbmVXaWR0aChjb250ZXh0LCBzdHJva2VQYWludGVyLnN0cm9rZVdpZHRoKCkp
OwogCi0gICAgS0NDYXBTdHlsZSBjYXBTdHlsZSA9IHN0eWxlLT5zdHJva2VQYWludGVyKCktPnN0
cm9rZUNhcFN0eWxlKCk7CisgICAgS0NDYXBTdHlsZSBjYXBTdHlsZSA9IHN0cm9rZVBhaW50ZXIu
c3Ryb2tlQ2FwU3R5bGUoKTsKICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQsIENHTGlu
ZUNhcEZyb21LQyhjYXBTdHlsZSkpOwogCi0gICAgS0NKb2luU3R5bGUgam9pblN0eWxlID0gc3R5
bGUtPnN0cm9rZVBhaW50ZXIoKS0+c3Ryb2tlSm9pblN0eWxlKCk7CisgICAgS0NKb2luU3R5bGUg
am9pblN0eWxlID0gc3Ryb2tlUGFpbnRlci5zdHJva2VKb2luU3R5bGUoKTsKICAgICBDR0NvbnRl
eHRTZXRMaW5lSm9pbihjb250ZXh0LCBDR0xpbmVKb2luRnJvbUtDKGpvaW5TdHlsZSkpOwogCi0g
ICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdChjb250ZXh0LCBzdHlsZS0+c3Ryb2tlUGFpbnRlcigp
LT5zdHJva2VNaXRlckxpbWl0KCkpOworICAgIENHQ29udGV4dFNldE1pdGVyTGltaXQoY29udGV4
dCwgc3Ryb2tlUGFpbnRlci5zdHJva2VNaXRlckxpbWl0KCkpOwogCi0gICAgS0NEYXNoQXJyYXkg
ZGFzaGVzID0gc3R5bGUtPnN0cm9rZVBhaW50ZXIoKS0+ZGFzaEFycmF5KCk7CisgICAgS0NEYXNo
QXJyYXkgZGFzaGVzID0gc3Ryb2tlUGFpbnRlci5kYXNoQXJyYXkoKTsKICAgICBpZiAoZGFzaGVz
LmNvdW50KCkpIHsKICAgICAgICAgc2l6ZV90IGRhc2hDb3VudCA9IGRhc2hlcy5jb3VudCgpOwog
ICAgICAgICBmbG9hdCAqbGVuZ3RocyA9IChmbG9hdCAqKW1hbGxvYyhkYXNoQ291bnQgKiBzaXpl
b2YoZmxvYXQpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeCA9IDA7IHggPCBkYXNoQ291
bnQ7IHgrKykKICAgICAgICAgICAgIGxlbmd0aHNbeF0gPSBkYXNoZXNbeF07Ci0gICAgICAgIENH
Q29udGV4dFNldExpbmVEYXNoKGNvbnRleHQsIHN0eWxlLT5zdHJva2VQYWludGVyKCktPmRhc2hP
ZmZzZXQoKSwgbGVuZ3RocywgZGFzaGVzLmNvdW50KCkpOworICAgICAgICBDR0NvbnRleHRTZXRM
aW5lRGFzaChjb250ZXh0LCBzdHJva2VQYWludGVyLmRhc2hPZmZzZXQoKSwgbGVuZ3RocywgZGFz
aGVzLmNvdW50KCkpOwogICAgICAgICBmcmVlKGxlbmd0aHMpOwogICAgIH0KIH0KSW5kZXg6IGtj
YW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ei5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ1BhaW50U2Vy
dmVyR3JhZGllbnRRdWFydHoubW0JKHJldmlzaW9uIDEyMDg0KQorKysga2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw4ICs0MCwxMCBAQAogCiAKIC8vIE1heWJlIHRoaXMgc2hvdWxkIGJlIGluIGEg
YmFzZSBjbGFzcyBpbnN0ZWFkLi4uCi1zdGF0aWMgdm9pZCBkcmF3U2hhZGluZ1dpdGhTdHlsZShj
b25zdCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCAqc2VydmVyLCBDR1NoYWRpbmdSZWYg
c2hhZGluZywgS1NWRzo6S0NhbnZhc1JlbmRlcmluZ1N0eWxlICpjYW52YXNTdHlsZSwgS0NQYWlu
dFRhcmdldFR5cGUgdHlwZSkKK3N0YXRpYyB2b2lkIGRyYXdTaGFkaW5nV2l0aFN0eWxlKGNvbnN0
IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50ICpzZXJ2ZXIsIENHU2hhZGluZ1JlZiBzaGFk
aW5nLCBjb25zdCBLQ2FudmFzQ29tbW9uQXJncyAmYXJncywgS0NQYWludFRhcmdldFR5cGUgdHlw
ZSkKIHsKKyAgICBraHRtbDo6UmVuZGVyU3R5bGUgKnJlbmRlclN0eWxlID0gYXJncy5yZW5kZXJT
dHlsZSgpOworICAgIGNvbnN0IFJlbmRlclBhdGggKnJlbmRlclBhdGggPSBhcmdzLnJlbmRlclBh
dGgoKTsKICAgICBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6ICpxdWFydHpEZXZpY2UgPSBzdGF0aWNf
Y2FzdDxLUmVuZGVyaW5nRGV2aWNlUXVhcnR6ICo+KFFQYWludGVyOjpyZW5kZXJpbmdEZXZpY2Uo
KSk7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBxdWFydHpEZXZpY2UtPmN1cnJlbnRDR0Nv
bnRleHQoKTsKICAgICBBU1NFUlQoY29udGV4dCAhPSBOVUxMKTsKQEAgLTY0LDExICs2NiwxMSBA
QCBzdGF0aWMgdm9pZCBkcmF3U2hhZGluZ1dpdGhTdHlsZShjb25zdCBLCiAgICAgQ0dBZmZpbmVU
cmFuc2Zvcm0gZ3JhZGllbnRUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybShzZXJ2ZXItPmdy
YWRpZW50VHJhbnNmb3JtKCkucW1hdHJpeCgpKTsKICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29u
dGV4dCwgZ3JhZGllbnRUcmFuc2Zvcm0pOwogICAgIAotICAgIENHQ29udGV4dFNldEFscGhhKGNv
bnRleHQsIGNhbnZhc1N0eWxlLT5yZW5kZXJTdHlsZSgpLT5vcGFjaXR5KCkpOworICAgIENHQ29u
dGV4dFNldEFscGhhKGNvbnRleHQsIHJlbmRlclN0eWxlLT5vcGFjaXR5KCkpOwogICAgIAotICAg
IGlmICggKHR5cGUgJiBBUFBMWV9UT19GSUxMKSAmJiBjYW52YXNTdHlsZS0+aXNGaWxsZWQoKSAp
IHsKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19GSUxMKSAmJiBLU1ZHOjpLU1ZHUGFpbnRlckZh
Y3Rvcnk6OmlzRmlsbGVkKHJlbmRlclN0eWxlKSkgewogICAgICAgICBDR0NvbnRleHRTYXZlR1N0
YXRlKGNvbnRleHQpOwotICAgICAgICBpZiAoY2FudmFzU3R5bGUtPmZpbGxQYWludGVyKCktPmZp
bGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKSB7CisgICAgICAgIGlmIChLU1ZHOjpLU1ZHUGFpbnRl
ckZhY3Rvcnk6OmZpbGxQYWludGVyKHJlbmRlclN0eWxlLCByZW5kZXJQYXRoKS5maWxsUnVsZSgp
ID09IFJVTEVfRVZFTk9ERCkgewogICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsK
QEAgLTc3LDkgKzc5LDkgQEAgc3RhdGljIHZvaWQgZHJhd1NoYWRpbmdXaXRoU3R5bGUoY29uc3Qg
SwogICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogICAgIH0KICAgICAK
LSAgICBpZiAoICh0eXBlICYgQVBQTFlfVE9fU1RST0tFKSAmJiBjYW52YXNTdHlsZS0+aXNTdHJv
a2VkKCkgKSB7CisgICAgaWYgKCh0eXBlICYgQVBQTFlfVE9fU1RST0tFKSAmJiBLU1ZHOjpLU1ZH
UGFpbnRlckZhY3Rvcnk6OmlzU3Ryb2tlZChyZW5kZXJTdHlsZSkpIHsKICAgICAgICAgQ0dDb250
ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKLSAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4
dChjb250ZXh0LCBjYW52YXNTdHlsZSk7IC8vIEZJWE1FOiB0aGlzIHNlZW1zIGxpa2UgdGhlIHdy
b25nIHBsYWNlIGZvciB0aGlzLgorICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNv
bnRleHQsIHJlbmRlclN0eWxlLCByZW5kZXJQYXRoKTsgLy8gRklYTUU6IHRoaXMgc2VlbXMgbGlr
ZSB0aGUgd3JvbmcgcGxhY2UgZm9yIHRoaXMuCiAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRo
V2l0aFN0cm9rZWRQYXRoKGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQp
OwogICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBzaGFkaW5nKTsKQEAgLTI5
OCw3ICszMDAsNyBAQCB2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50CiAg
ICAgaWYgKCFtX3NoYWRpbmdDYWNoZSkKICAgICAgICAgY29uc3RfY2FzdDxLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF1YXJ0eiAqPih0aGlzKS0+dXBkYXRlUXVhcnR6R3JhZGll
bnRDYWNoZSh0aGlzKTsKICAgICAKLSAgICBkcmF3U2hhZGluZ1dpdGhTdHlsZSh0aGlzLCBtX3No
YWRpbmdDYWNoZSwgYXJncy5jYW52YXNTdHlsZSgpLCB0eXBlKTsKKyAgICBkcmF3U2hhZGluZ1dp
dGhTdHlsZSh0aGlzLCBtX3NoYWRpbmdDYWNoZSwgYXJncywgdHlwZSk7CiB9CiAKIHZvaWQgS1Jl
bmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdWFydHo6OmRyYXcoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQgKnJlbmRlcmluZ0NvbnRleHQsIGNvbnN0IEtDYW52YXNDb21tb25BcmdzICZh
cmdzLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdApAQCAtMzExLDUgKzMxMyw1IEBAIHZv
aWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQKICAgICBpZiAoIW1fc2hhZGlu
Z0NhY2hlKQogICAgICAgICBjb25zdF9jYXN0PEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdy
YWRpZW50UXVhcnR6ICo+KHRoaXMpLT51cGRhdGVRdWFydHpHcmFkaWVudENhY2hlKHRoaXMpOwog
ICAgIAotICAgIGRyYXdTaGFkaW5nV2l0aFN0eWxlKHRoaXMsIG1fc2hhZGluZ0NhY2hlLCBhcmdz
LmNhbnZhc1N0eWxlKCksIHR5cGUpOworICAgIGRyYXdTaGFkaW5nV2l0aFN0eWxlKHRoaXMsIG1f
c2hhZGluZ0NhY2hlLCBhcmdzLCB0eXBlKTsKIH0KSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0
ei9RdWFydHpTdXBwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L1F1
YXJ0elN1cHBvcnQuaAkocmV2aXNpb24gMTIwODQpCisrKyBrY2FudmFzL2RldmljZS9xdWFydHov
UXVhcnR6U3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiwxMCBAQAogCiAjaW1w
b3J0ICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIgLy8gZm9yIGFsbCB0aGUgQ0FQX0JVVFQgY29u
dHN0YW50cywgZXRjLgogY2xhc3MgUVJlY3Q7CitjbGFzcyBSZW5kZXJQYXRoOwogCi1uYW1lc3Bh
Y2UgS1NWRyB7Ci0gICAgY2xhc3MgU1ZHUmVuZGVyU3R5bGU7CituYW1lc3BhY2Uga2h0bWwgewor
ICAgIGNsYXNzIFJlbmRlclN0eWxlOwogfQogCiAjaWZuZGVmIE5ERUJVRwpAQCAtNDEsNyArNDIs
NyBAQCBDRlN0cmluZ1JlZiBDRlN0cmluZ0Zyb21DR1BhdGgoQ0dQYXRoUmVmCiBDRlN0cmluZ1Jl
ZiBDRlN0cmluZ0Zyb21DR0FmZmluZVRyYW5zZm9ybShDR0FmZmluZVRyYW5zZm9ybSB0KTsKIENH
QWZmaW5lVHJhbnNmb3JtIENHQWZmaW5lVHJhbnNmb3JtTWFrZU1hcEJldHdlZW5SZWN0cyhDR1Jl
Y3Qgc291cmNlLCBDR1JlY3QgZGVzdCk7CiAKLXZvaWQgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4
dChDR0NvbnRleHRSZWYgY29udGV4dCwgS1NWRzo6S0NhbnZhc1JlbmRlcmluZ1N0eWxlICpzdHls
ZSk7Cit2b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoQ0dDb250ZXh0UmVmIGNvbnRleHQs
IGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUsIGNvbnN0IFJlbmRlclBhdGggKnJlbmRlclBhdGgp
OwogCiBzdGF0aWMgaW5saW5lIENHTGluZUNhcCBDR0xpbmVDYXBGcm9tS0MoIEtDQ2FwU3R5bGUg
Y2FwKSB7CiAgICAgaWYgKGNhcCA9PSBDQVBfQlVUVCkKSW5kZXg6IGtjYW52YXMvZGV2aWNlL0tS
ZW5kZXJpbmdEZXZpY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJp
bmdEZXZpY2UuY3BwCShyZXZpc2lvbiAxMjA4NCkKKysrIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJp
bmdEZXZpY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+
CiAgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Cisg
ICAgICAgICAgICAgICAgICAyMDA2ICAgICAgIEFsZXhhbmRlciBLZWxsZXR0IDxseXBhbm92QGtk
ZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAt
MjcsNiArMjgsOCBAQCBLQ2FudmFzQ29tbW9uQXJnczo6S0NhbnZhc0NvbW1vbkFyZ3MoKQogewog
ICAgIG1fcGF0aCA9IDA7CiAgICAgbV9zdHlsZSA9IDA7CisgICAgbV9yZW5kZXJTdHlsZSA9IDA7
CisgICAgbV9yZW5kZXJQYXRoID0gMDsKIH0KIAogS0NhbnZhc0NvbW1vbkFyZ3M6On5LQ2FudmFz
Q29tbW9uQXJncygpCkBAIC01Myw2ICs1NiwyNiBAQCB2b2lkIEtDYW52YXNDb21tb25BcmdzOjpz
ZXRTdHlsZShLU1ZHOjpLCiAgICAgbV9zdHlsZSA9IHN0eWxlOwogfQogCitraHRtbDo6UmVuZGVy
U3R5bGUgKktDYW52YXNDb21tb25BcmdzOjpyZW5kZXJTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcmVuZGVyU3R5bGU7Cit9CisKK3ZvaWQgS0NhbnZhc0NvbW1vbkFyZ3M6OnNldFJlbmRl
clN0eWxlKGtodG1sOjpSZW5kZXJTdHlsZSAqcmVuZGVyU3R5bGUpCit7CisgICAgbV9yZW5kZXJT
dHlsZSA9IHJlbmRlclN0eWxlOworfQorCitjb25zdCBSZW5kZXJQYXRoKiBLQ2FudmFzQ29tbW9u
QXJnczo6cmVuZGVyUGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyUGF0aDsKK30K
Kwordm9pZCBLQ2FudmFzQ29tbW9uQXJnczo6c2V0UmVuZGVyUGF0aChjb25zdCBSZW5kZXJQYXRo
ICpyZW5kZXJQYXRoKQoreworICAgIG1fcmVuZGVyUGF0aCA9IHJlbmRlclBhdGg7Cit9CisKIEtS
ZW5kZXJpbmdEZXZpY2U6OktSZW5kZXJpbmdEZXZpY2UoKQogewogfQpJbmRleDoga2NhbnZhcy9L
Q2FudmFzVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL0tDYW52YXNUeXBlcy5oCShyZXZp
c2lvbiAxMjA4NCkKKysrIGtjYW52YXMvS0NhbnZhc1R5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDcgKzMwLDEyIEBAIG5hbWVzcGFjZSBLU1ZHIHsKICAgICBjbGFzcyBLQ2FudmFzUmVuZGVy
aW5nU3R5bGU7CiB9CiAKK25hbWVzcGFjZSBraHRtbCB7CisgICAgY2xhc3MgUmVuZGVyU3R5bGU7
Cit9CisKIGNsYXNzIEtDYW52YXNQYXRoOworY2xhc3MgUmVuZGVyUGF0aDsKIGNsYXNzIEtDYW52
YXNDb21tb25BcmdzCiB7CiBwdWJsaWM6CkBAIC00MiwxMCArNDcsMTggQEAgcHVibGljOgogCiAg
ICAgS1NWRzo6S0NhbnZhc1JlbmRlcmluZ1N0eWxlICpjYW52YXNTdHlsZSgpIGNvbnN0OwogICAg
IHZvaWQgc2V0U3R5bGUoS1NWRzo6S0NhbnZhc1JlbmRlcmluZ1N0eWxlICpzdHlsZSk7CisKKyAg
ICBraHRtbDo6UmVuZGVyU3R5bGUgKnJlbmRlclN0eWxlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRS
ZW5kZXJTdHlsZShraHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxlKTsKICAgICAKKyAgICBjb25zdCBS
ZW5kZXJQYXRoKiByZW5kZXJQYXRoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRSZW5kZXJQYXRoKGNv
bnN0IFJlbmRlclBhdGgqIHBhdGgpOworCiBwcml2YXRlOgogICAgIFJlZlB0cjxLQ2FudmFzUGF0
aD4gbV9wYXRoOwogICAgIEtTVkc6OktDYW52YXNSZW5kZXJpbmdTdHlsZSAqbV9zdHlsZTsKKyAg
ICBraHRtbDo6UmVuZGVyU3R5bGUgKm1fcmVuZGVyU3R5bGU7CisgICAgY29uc3QgUmVuZGVyUGF0
aCAqbV9yZW5kZXJQYXRoOwogfTsKIAogI2VuZGlmCkluZGV4OiBDaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjA4NCkKKysrIENoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDA2LTAxLTE0ICBBbGV4YW5kZXIgS2VsbGV0dCAgPGx5
cGFub3ZAa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZWZhY3RvciBvdXQgY2FzZXMgb2YgS0NhbnZhc1JlbmRlcmluZ1N0eWxlIHVzZWQg
YXMgYW4gaW5zdGFuY2UgdG8KKyAgICAgICAgc3RvcmUgdGhlIGN1cnJlbnQgc3R5bGUuIFRlbXBv
cmFyaWx5IHVuaWZ5IHRoZSBkYXRhIHBhc3NpbmcgdmlhIAorICAgICAgICBLQ2FudmFzQ29tbW9u
QXJncy4KKworICAgICAgICAqIGtjYW52YXMvS0NhbnZhc0l0ZW0uY3BwOiBSZW1vdmluZyBvdmVy
cmlkZSBvZiBzZXRTdHlsZSB1c2VkIHRvIGhvb2sKKyAgICAgICAgaW50byBLQ2FudmFzUmVuZGVy
aW5nU3R5bGU6OnVwZGF0ZVN0eWxlLgorICAgICAgICAoUmVuZGVyUGF0aDo6Y29tbW9uQXJncyk6
IAorICAgICAgICAqIGtjYW52YXMvS0NhbnZhc0l0ZW0uaDoKKyAgICAgICAgKiBrY2FudmFzL0tD
YW52YXNUcmVlRGVidWcuY3BwOgorICAgICAgICAod3JpdGVTdHlsZSk6CisgICAgICAgICoga2Nh
bnZhcy9LQ2FudmFzVHlwZXMuaDoKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5n
RGV2aWNlLmNwcDoKKyAgICAgICAgKEtDYW52YXNDb21tb25BcmdzOjpLQ2FudmFzQ29tbW9uQXJn
cyk6CisgICAgICAgIChLQ2FudmFzQ29tbW9uQXJnczo6cmVuZGVyU3R5bGUpOgorICAgICAgICAo
S0NhbnZhc0NvbW1vbkFyZ3M6OnNldFJlbmRlclN0eWxlKToKKyAgICAgICAgKEtDYW52YXNDb21t
b25BcmdzOjpyZW5kZXJQYXRoKToKKyAgICAgICAgKEtDYW52YXNDb21tb25BcmdzOjpzZXRSZW5k
ZXJQYXRoKToKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0l0ZW1RdWFy
dHoubW06CisgICAgICAgIChLQ2FudmFzSXRlbVF1YXJ0ejo6cGFpbnQpOgorICAgICAgICAoS0Nh
bnZhc0l0ZW1RdWFydHo6OmJib3hGb3JQYXRoKToKKyAgICAgICAgKEtDYW52YXNJdGVtUXVhcnR6
OjpoaXRzUGF0aCk6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdQ
YWludFNlcnZlckdyYWRpZW50UXVhcnR6Lm1tOgorICAgICAgICAoZHJhd1NoYWRpbmdXaXRoU3R5
bGUpOgorICAgICAgICAoS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRRdWFydHo6
OmRyYXcpOgorICAgICAgICAoS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdWFy
dHo6OmRyYXcpOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJRdWFydHoubW06CisgICAgICAgIChLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF1
YXJ0ejo6ZHJhdyk6CisgICAgICAgIChLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXVhcnR6
OjpkcmF3KToKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdWFydHovUXVhcnR6U3VwcG9ydC5o
OgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0Lm1tOgorICAg
ICAgICAoYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dCk6CisgICAgICAgICoga3N2ZzIvbWlzYy9L
Q2FudmFzUmVuZGVyaW5nU3R5bGUuY3BwOiBSZW1vdmUgb3ZlcnJpZGVGaWxsUGFpbnRTZXJ2ZXIK
KyAgICAgICAgYW5kIG92ZXJyaWRlU3Ryb2tlUGFpbnRTZXJ2ZXIgaGFja3MgYW5kIG1ha2UgbW9z
dCBvdGhlciBtZXRob2RzCisgICAgICAgIHN0YXRpYywgcmVtb3ZlIG1vc3QgaW5zdGFuY2UgdmFy
aWFibGVzLgorICAgICAgICAoS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpLQ2FudmFzUmVuZGVyaW5n
U3R5bGUpOgorICAgICAgICAoS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjppc0ZpbGxlZCk6CisgICAg
ICAgIChLQ2FudmFzUmVuZGVyaW5nU3R5bGU6OmZpbGxQYWludFNlcnZlcik6CisgICAgICAgIChL
Q2FudmFzUmVuZGVyaW5nU3R5bGU6OmlzU3Ryb2tlZCk6CisgICAgICAgIChLQ2FudmFzUmVuZGVy
aW5nU3R5bGU6OnN0cm9rZVBhaW50U2VydmVyKToKKyAgICAgICAgKEtDYW52YXNSZW5kZXJpbmdT
dHlsZTo6c3Ryb2tlUGFpbnRlcik6IE1lcmdlZCBzdHJva2UgbG9naWMgaW4gZnJvbQorICAgICAg
ICB1cGRhdGVTdHlsZS4KKyAgICAgICAgKEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6ZmlsbFBhaW50
ZXIpOiBNZXJnZWQgZmlsbCBsb2dpYyBpbiBmcm9tCisgICAgICAgIHVwZGF0ZVN0eWxlLgorICAg
ICAgICAqIGtzdmcyL21pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmg6CisKIDIwMDYtMDEtMTMg
IERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIENvbnZlcnQgUVBvaW50
RiB0byBGbG9hdFBvaW50IGFuZCBtb3ZlIGl0IHRvIHRoZSBwbGF0Zm9ybQpJbmRleDoga3N2ZzIv
bWlzYy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL21pc2Mv
S0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcAkocmV2aXNpb24gMTIwODQpCisrKyBrc3ZnMi9taXNj
L0tDYW52YXNSZW5kZXJpbmdTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDQyICs1MSwy
NyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpLQ2Fu
dmFzUmVuZGVyaW5nU3R5bGUoY29uc3Qga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSkKIHsKLSAg
ICBtX3N0eWxlID0gc3R5bGU7Ci0gICAgbV9maWxsUGFpbnRlciA9IDA7Ci0gICAgbV9zdHJva2VQ
YWludGVyID0gMDsKLSAgICBtX2ZpbGxQYWludGVyUGFpbnRTZXJ2ZXJPdmVycmlkZSA9IDA7Ci0g
ICAgbV9zdHJva2VQYWludGVyUGFpbnRTZXJ2ZXJPdmVycmlkZSA9IDA7CiB9CiAKIEtDYW52YXNS
ZW5kZXJpbmdTdHlsZTo6fktDYW52YXNSZW5kZXJpbmdTdHlsZSgpCiB7CiB9CiAKLXZvaWQgS0Nh
bnZhc1JlbmRlcmluZ1N0eWxlOjpvdmVycmlkZUZpbGxQYWludFNlcnZlcihLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXIgKnBzZXJ2ZXIpCitib29sIEtTVkdQYWludGVyRmFjdG9yeTo6aXNGaWxsZWQoY29u
c3Qga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSkKIHsKLSAgICBBU1NFUlQocHNlcnZlci0+dHlw
ZSgpID09IFBTX0lNQUdFKTsKLSAgICBkZWxldGUgbV9maWxsUGFpbnRlclBhaW50U2VydmVyT3Zl
cnJpZGU7Ci0gICAgbV9maWxsUGFpbnRlclBhaW50U2VydmVyT3ZlcnJpZGUgPSBwc2VydmVyOwot
fQotCi1ib29sIEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6aXNGaWxsZWQoKSBjb25zdAotewotICAg
IFNWR1BhaW50SW1wbCAqZmlsbCA9IG1fc3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxQYWludCgpOwot
ICAgIGlmICghZmlsbCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIChtX2ZpbGxQ
YWludGVyUGFpbnRTZXJ2ZXJPdmVycmlkZSB8fCAoZmlsbCAmJiBmaWxsLT5wYWludFR5cGUoKSAh
PSBTVkdfUEFJTlRUWVBFX05PTkUpKTsKKyAgICBTVkdQYWludEltcGwgKmZpbGwgPSBzdHlsZS0+
c3ZnU3R5bGUoKS0+ZmlsbFBhaW50KCk7CisgICAgaWYgKGZpbGwgJiYgZmlsbC0+cGFpbnRUeXBl
KCkgPT0gU1ZHX1BBSU5UVFlQRV9OT05FKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIHRydWU7CiB9CiAKLUtSZW5kZXJpbmdQYWludFNlcnZlciAqS0NhbnZhc1JlbmRlcmluZ1N0
eWxlOjpmaWxsUGFpbnRTZXJ2ZXIoY29uc3Qga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSwgY29u
c3QgUmVuZGVyUGF0aCogaXRlbSkKK0tSZW5kZXJpbmdQYWludFNlcnZlciAqS1NWR1BhaW50ZXJG
YWN0b3J5OjpmaWxsUGFpbnRTZXJ2ZXIoY29uc3Qga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSwg
Y29uc3QgUmVuZGVyUGF0aCogaXRlbSkKIHsKLSAgICBpZiAobV9maWxsUGFpbnRlclBhaW50U2Vy
dmVyT3ZlcnJpZGUpCi0gICAgICAgIHJldHVybiBtX2ZpbGxQYWludGVyUGFpbnRTZXJ2ZXJPdmVy
cmlkZTsKLQotICAgIFNWR1BhaW50SW1wbCAqZmlsbCA9IG1fc3R5bGUtPnN2Z1N0eWxlKCktPmZp
bGxQYWludCgpOwotCi0gICAgaWYgKGZpbGwgJiYgZmlsbC0+cGFpbnRUeXBlKCkgPT0gU1ZHX1BB
SU5UVFlQRV9OT05FKQorICAgIGlmICghaXNGaWxsZWQoc3R5bGUpKQogICAgICAgICByZXR1cm4g
MDsKIAorICAgIFNWR1BhaW50SW1wbCAqZmlsbCA9IHN0eWxlLT5zdmdTdHlsZSgpLT5maWxsUGFp
bnQoKTsKKwogICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqZmlsbFBhaW50U2VydmVyOwogICAg
IGlmICghZmlsbCkgewogICAgICAgICAvLyBpbml0aWFsIHZhbHVlIChibGFjaykKQEAgLTEwMiw3
ICs4Nyw3IEBAIEtSZW5kZXJpbmdQYWludFNlcnZlciAqS0NhbnZhc1JlbmRlcmluZ1MKICAgICAg
ICAgZmlsbFBhaW50U2VydmVyID0gUVBhaW50ZXI6OnJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQ
YWludFNlcnZlcihLQ1BhaW50U2VydmVyVHlwZShQU19TT0xJRCkpOwogICAgICAgICBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJTb2xpZCAqZmlsbFBhaW50U2VydmVyU29saWQgPSBzdGF0aWNfY2FzdDxL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZCAqPihmaWxsUGFpbnRTZXJ2ZXIpOwogICAgICAgICBp
ZiAoZmlsbC0+cGFpbnRUeXBlKCkgPT0gU1ZHX1BBSU5UVFlQRV9DVVJSRU5UQ09MT1IpCi0gICAg
ICAgICAgICBmaWxsUGFpbnRTZXJ2ZXJTb2xpZC0+c2V0Q29sb3IobV9zdHlsZS0+Y29sb3IoKSk7
CisgICAgICAgICAgICBmaWxsUGFpbnRTZXJ2ZXJTb2xpZC0+c2V0Q29sb3Ioc3R5bGUtPmNvbG9y
KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBmaWxsUGFpbnRTZXJ2ZXJTb2xpZC0+c2V0
Q29sb3IoZmlsbC0+Y29sb3IoKSk7CiAgICAgfQpAQCAtMTEwLDMwICs5NSwyMiBAQCBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXIgKktDYW52YXNSZW5kZXJpbmdTCiAgICAgcmV0dXJuIGZpbGxQYWludFNl
cnZlcjsKIH0KIAotdm9pZCBLQ2FudmFzUmVuZGVyaW5nU3R5bGU6Om92ZXJyaWRlU3Ryb2tlUGFp
bnRTZXJ2ZXIoS1JlbmRlcmluZ1BhaW50U2VydmVyICpwc2VydmVyKQotewotICAgIHN0cm9rZVBh
aW50ZXIoKS0+c2V0RGlydHkoKTsKLSAgICBBU1NFUlQocHNlcnZlci0+dHlwZSgpID09IFBTX0lN
QUdFKTsKLSAgICBkZWxldGUgbV9zdHJva2VQYWludGVyUGFpbnRTZXJ2ZXJPdmVycmlkZTsKLSAg
ICBtX3N0cm9rZVBhaW50ZXJQYWludFNlcnZlck92ZXJyaWRlID0gcHNlcnZlcjsKLX0KIAotYm9v
bCBLQ2FudmFzUmVuZGVyaW5nU3R5bGU6OmlzU3Ryb2tlZCgpIGNvbnN0Citib29sIEtTVkdQYWlu
dGVyRmFjdG9yeTo6aXNTdHJva2VkKGNvbnN0IGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUpCiB7
Ci0gICAgU1ZHUGFpbnRJbXBsICpzdHJva2UgPSBtX3N0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VQ
YWludCgpOwotICAgIHJldHVybiAoc3Ryb2tlICYmIHN0cm9rZS0+cGFpbnRUeXBlKCkgIT0gU1ZH
X1BBSU5UVFlQRV9OT05FKTsKKyAgICBTVkdQYWludEltcGwgKnN0cm9rZSA9IHN0eWxlLT5zdmdT
dHlsZSgpLT5zdHJva2VQYWludCgpOworICAgIGlmICghc3Ryb2tlIHx8IHN0cm9rZS0+cGFpbnRU
eXBlKCkgPT0gU1ZHX1BBSU5UVFlQRV9OT05FKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIHRydWU7CiB9CiAKLUtSZW5kZXJpbmdQYWludFNlcnZlciAqS0NhbnZhc1JlbmRlcmlu
Z1N0eWxlOjpzdHJva2VQYWludFNlcnZlcihjb25zdCBraHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxl
LCBjb25zdCBSZW5kZXJQYXRoKiBpdGVtKQorS1JlbmRlcmluZ1BhaW50U2VydmVyICpLU1ZHUGFp
bnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50U2VydmVyKGNvbnN0IGtodG1sOjpSZW5kZXJTdHlsZSAq
c3R5bGUsIGNvbnN0IFJlbmRlclBhdGgqIGl0ZW0pCiB7Ci0gICAgaWYgKG1fc3Ryb2tlUGFpbnRl
clBhaW50U2VydmVyT3ZlcnJpZGUpIAotICAgICAgICByZXR1cm4gbV9zdHJva2VQYWludGVyUGFp
bnRTZXJ2ZXJPdmVycmlkZTsKLQotICAgIFNWR1BhaW50SW1wbCAqc3Ryb2tlID0gbV9zdHlsZS0+
c3ZnU3R5bGUoKS0+c3Ryb2tlUGFpbnQoKTsKLQotICAgIGlmICghc3Ryb2tlIHx8IHN0cm9rZS0+
cGFpbnRUeXBlKCkgPT0gU1ZHX1BBSU5UVFlQRV9OT05FKQorICAgIGlmICghaXNTdHJva2VkKHN0
eWxlKSkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBTVkdQYWludEltcGwgKnN0cm9rZSA9IHN0
eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VQYWludCgpOworCiAgICAgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyICpzdHJva2VQYWludFNlcnZlcjsKICAgICBpZiAoc3Ryb2tlICYmIHN0cm9rZS0+cGFpbnRU
eXBlKCkgPT0gU1ZHX1BBSU5UVFlQRV9VUkkpIHsKICAgICAgICAgS0RPTTo6RE9NU3RyaW5nIGlk
KHN0cm9rZS0+dXJpKCkpOwpAQCAtMTQ0LDcgKzEyMSw3IEBAIEtSZW5kZXJpbmdQYWludFNlcnZl
ciAqS0NhbnZhc1JlbmRlcmluZ1MKICAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBRUGFpbnRl
cjo6cmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVBhaW50U2VydmVyKEtDUGFpbnRTZXJ2ZXJUeXBl
KFBTX1NPTElEKSk7CiAgICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkICpzdHJva2VQ
YWludFNlcnZlclNvbGlkID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQg
Kj4oc3Ryb2tlUGFpbnRTZXJ2ZXIpOwogICAgICAgICBpZiAoc3Ryb2tlLT5wYWludFR5cGUoKSA9
PSBTVkdfUEFJTlRUWVBFX0NVUlJFTlRDT0xPUikKLSAgICAgICAgICAgIHN0cm9rZVBhaW50U2Vy
dmVyU29saWQtPnNldENvbG9yKG1fc3R5bGUtPmNvbG9yKCkpOworICAgICAgICAgICAgc3Ryb2tl
UGFpbnRTZXJ2ZXJTb2xpZC0+c2V0Q29sb3Ioc3R5bGUtPmNvbG9yKCkpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBzdHJva2VQYWludFNlcnZlclNvbGlkLT5zZXRDb2xvcihzdHJva2UtPmNv
bG9yKCkpOwogICAgIH0KQEAgLTE1Miw0MyArMTI5LDcgQEAgS1JlbmRlcmluZ1BhaW50U2VydmVy
ICpLQ2FudmFzUmVuZGVyaW5nUwogICAgIHJldHVybiBzdHJva2VQYWludFNlcnZlcjsKIH0KIAot
dm9pZCBLQ2FudmFzUmVuZGVyaW5nU3R5bGU6OnVwZGF0ZVN0eWxlKGNvbnN0IGtodG1sOjpSZW5k
ZXJTdHlsZSAqc3R5bGUsIFJlbmRlclBhdGggKml0ZW0pCi17Ci0gICAgbV9zdHlsZSA9IHN0eWxl
OwotICAgIAotICAgIGZpbGxQYWludGVyKCktPnNldEZpbGxSdWxlKG1fc3R5bGUtPnN2Z1N0eWxl
KCktPmZpbGxSdWxlKCkgPT0gV1JfTk9OWkVSTyA/IFJVTEVfTk9OWkVSTyA6IFJVTEVfRVZFTk9E
RCk7Ci0gICAgZmlsbFBhaW50ZXIoKS0+c2V0T3BhY2l0eShtX3N0eWxlLT5zdmdTdHlsZSgpLT5m
aWxsT3BhY2l0eSgpKTsKLQotICAgIHN0cm9rZVBhaW50ZXIoKS0+c2V0T3BhY2l0eShtX3N0eWxl
LT5zdmdTdHlsZSgpLT5zdHJva2VPcGFjaXR5KCkpOwotICAgIHN0cm9rZVBhaW50ZXIoKS0+c2V0
U3Ryb2tlV2lkdGgoS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChp
dGVtLCBtX3N0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VXaWR0aCgpLCAxLjApKTsKLQotICAgIEtE
T006OkNTU1ZhbHVlTGlzdEltcGwgKmRhc2hlcyA9IG1fc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9r
ZURhc2hBcnJheSgpOwotICAgIGlmIChkYXNoZXMpIHsKLSAgICAgICAgS0RPTTo6Q1NTUHJpbWl0
aXZlVmFsdWVJbXBsICpkYXNoID0gMDsKLSAgICAgICAgUTNQYWludERldmljZU1ldHJpY3MgKnBh
aW50RGV2aWNlTWV0cmljcyA9IDA7Ci0KLSAgICAgICAgU1ZHRWxlbWVudEltcGwgKmVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50SW1wbCAqPihpdGVtLT5lbGVtZW50KCkpOwotICAgICAg
ICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5vd25lckRvY3VtZW50KCkpCi0gICAgICAgICAgICBw
YWludERldmljZU1ldHJpY3MgPSBlbGVtZW50LT5vd25lckRvY3VtZW50KCktPnBhaW50RGV2aWNl
TWV0cmljcygpOwotCi0gICAgICAgIEtDRGFzaEFycmF5IGFycmF5OwotICAgICAgICB1bnNpZ25l
ZCBsb25nIGxlbiA9IGRhc2hlcy0+bGVuZ3RoKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbG9u
ZyBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICBkYXNoID0gc3RhdGljX2Nhc3Q8
S0RPTTo6Q1NTUHJpbWl0aXZlVmFsdWVJbXBsICo+KGRhc2hlcy0+aXRlbShpKSk7Ci0gICAgICAg
ICAgICBpZiAoZGFzaCkKLSAgICAgICAgICAgICAgICBhcnJheS5hcHBlbmQoKGZsb2F0KSBkYXNo
LT5jb21wdXRlTGVuZ3RoRmxvYXQoY29uc3RfY2FzdDxraHRtbDo6UmVuZGVyU3R5bGUgKj4obV9z
dHlsZSksIHBhaW50RGV2aWNlTWV0cmljcykpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3Ryb2tl
UGFpbnRlcigpLT5zZXREYXNoQXJyYXkoYXJyYXkpOwotICAgICAgICBzdHJva2VQYWludGVyKCkt
PnNldERhc2hPZmZzZXQoS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0
aChpdGVtLCBtX3N0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VEYXNoT2Zmc2V0KCksIDAuMCkpOwot
ICAgIH0KLQotICAgIHN0cm9rZVBhaW50ZXIoKS0+c2V0U3Ryb2tlTWl0ZXJMaW1pdChtX3N0eWxl
LT5zdmdTdHlsZSgpLT5zdHJva2VNaXRlckxpbWl0KCkpOwotICAgIHN0cm9rZVBhaW50ZXIoKS0+
c2V0U3Ryb2tlQ2FwU3R5bGUoKEtDQ2FwU3R5bGUpIG1fc3R5bGUtPnN2Z1N0eWxlKCktPmNhcFN0
eWxlKCkpOwotICAgIHN0cm9rZVBhaW50ZXIoKS0+c2V0U3Ryb2tlSm9pblN0eWxlKChLQ0pvaW5T
dHlsZSkgbV9zdHlsZS0+c3ZnU3R5bGUoKS0+am9pblN0eWxlKCkpOwotfQotCi1kb3VibGUgS0Nh
bnZhc1JlbmRlcmluZ1N0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChjb25zdCBSZW5kZXJQYXRo
ICppdGVtLCBLRE9NOjpDU1NWYWx1ZUltcGwgKnZhbHVlLCBkb3VibGUgZGVmYXVsdFZhbHVlKQor
ZG91YmxlIEtTVkdQYWludGVyRmFjdG9yeTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgoY29uc3QgUmVu
ZGVyUGF0aCAqaXRlbSwgS0RPTTo6Q1NTVmFsdWVJbXBsICp2YWx1ZSwgZG91YmxlIGRlZmF1bHRW
YWx1ZSkKIHsKICAgICBLRE9NOjpDU1NQcmltaXRpdmVWYWx1ZUltcGwgKnByaW1pdGl2ZSA9IHN0
YXRpY19jYXN0PEtET006OkNTU1ByaW1pdGl2ZVZhbHVlSW1wbCAqPih2YWx1ZSk7CiAKQEAgLTIx
NSwyMCArMTU2LDQ5IEBAIGRvdWJsZSBLQ2FudmFzUmVuZGVyaW5nU3R5bGU6OmNzc1ByaW1pdGkK
ICAgICByZXR1cm4gcHJpbWl0aXZlLT5jb21wdXRlTGVuZ3RoRmxvYXQoY29uc3RfY2FzdDxraHRt
bDo6UmVuZGVyU3R5bGUgKj4oaXRlbS0+c3R5bGUoKSksIHBhaW50RGV2aWNlTWV0cmljcyk7CiB9
CiAKLUtSZW5kZXJpbmdTdHJva2VQYWludGVyICpLQ2FudmFzUmVuZGVyaW5nU3R5bGU6OnN0cm9r
ZVBhaW50ZXIoKQorS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIgS1NWR1BhaW50ZXJGYWN0b3J5Ojpz
dHJva2VQYWludGVyKGNvbnN0IGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUsIGNvbnN0IFJlbmRl
clBhdGggKml0ZW0pCiB7Ci0gICAgaWYoIW1fc3Ryb2tlUGFpbnRlcikKLSAgICAgICAgbV9zdHJv
a2VQYWludGVyID0gbmV3IEtSZW5kZXJpbmdTdHJva2VQYWludGVyKCk7CisgICAgS1JlbmRlcmlu
Z1N0cm9rZVBhaW50ZXIgc3Ryb2tlUGFpbnRlcjsKKworICAgIHN0cm9rZVBhaW50ZXIuc2V0T3Bh
Y2l0eShzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlT3BhY2l0eSgpKTsKKyAgICBzdHJva2VQYWlu
dGVyLnNldFN0cm9rZVdpZHRoKEtTVkdQYWludGVyRmFjdG9yeTo6Y3NzUHJpbWl0aXZlVG9MZW5n
dGgoaXRlbSwgc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCksIDEuMCkpOwogCi0gICAg
cmV0dXJuIG1fc3Ryb2tlUGFpbnRlcjsKKyAgICBLRE9NOjpDU1NWYWx1ZUxpc3RJbXBsICpkYXNo
ZXMgPSBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaEFycmF5KCk7CisgICAgaWYgKGRhc2hl
cykgeworICAgICAgICBLRE9NOjpDU1NQcmltaXRpdmVWYWx1ZUltcGwgKmRhc2ggPSAwOworICAg
ICAgICBRM1BhaW50RGV2aWNlTWV0cmljcyAqcGFpbnREZXZpY2VNZXRyaWNzID0gMDsKKworICAg
ICAgICBTVkdFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnRJbXBs
ICo+KGl0ZW0tPmVsZW1lbnQoKSk7CisgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPm93
bmVyRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIHBhaW50RGV2aWNlTWV0cmljcyA9IGVsZW1lbnQt
Pm93bmVyRG9jdW1lbnQoKS0+cGFpbnREZXZpY2VNZXRyaWNzKCk7CisKKyAgICAgICAgS0NEYXNo
QXJyYXkgYXJyYXk7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuID0gZGFzaGVzLT5sZW5ndGgo
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAg
ICAgICAgICAgIGRhc2ggPSBzdGF0aWNfY2FzdDxLRE9NOjpDU1NQcmltaXRpdmVWYWx1ZUltcGwg
Kj4oZGFzaGVzLT5pdGVtKGkpKTsKKyAgICAgICAgICAgIGlmIChkYXNoKQorICAgICAgICAgICAg
ICAgIGFycmF5LmFwcGVuZCgoZmxvYXQpIGRhc2gtPmNvbXB1dGVMZW5ndGhGbG9hdChjb25zdF9j
YXN0PGtodG1sOjpSZW5kZXJTdHlsZSAqPihzdHlsZSksIHBhaW50RGV2aWNlTWV0cmljcykpOwor
ICAgICAgICB9CisKKyAgICAgICAgc3Ryb2tlUGFpbnRlci5zZXREYXNoQXJyYXkoYXJyYXkpOwor
ICAgICAgICBzdHJva2VQYWludGVyLnNldERhc2hPZmZzZXQoS1NWR1BhaW50ZXJGYWN0b3J5Ojpj
c3NQcmltaXRpdmVUb0xlbmd0aChpdGVtLCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaE9m
ZnNldCgpLCAwLjApKTsKKyAgICB9CisKKyAgICBzdHJva2VQYWludGVyLnNldFN0cm9rZU1pdGVy
TGltaXQoc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU1pdGVyTGltaXQoKSk7CisgICAgc3Ryb2tl
UGFpbnRlci5zZXRTdHJva2VDYXBTdHlsZSgoS0NDYXBTdHlsZSkgc3R5bGUtPnN2Z1N0eWxlKCkt
PmNhcFN0eWxlKCkpOworICAgIHN0cm9rZVBhaW50ZXIuc2V0U3Ryb2tlSm9pblN0eWxlKChLQ0pv
aW5TdHlsZSkgc3R5bGUtPnN2Z1N0eWxlKCktPmpvaW5TdHlsZSgpKTsKKworICAgIHJldHVybiBz
dHJva2VQYWludGVyOwogfQogCi1LUmVuZGVyaW5nRmlsbFBhaW50ZXIgKktDYW52YXNSZW5kZXJp
bmdTdHlsZTo6ZmlsbFBhaW50ZXIoKQorS1JlbmRlcmluZ0ZpbGxQYWludGVyIEtTVkdQYWludGVy
RmFjdG9yeTo6ZmlsbFBhaW50ZXIoY29uc3Qga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSwgY29u
c3QgUmVuZGVyUGF0aCAqaXRlbSkKIHsKLSAgICBpZighbV9maWxsUGFpbnRlcikKLSAgICAgICAg
bV9maWxsUGFpbnRlciA9IG5ldyBLUmVuZGVyaW5nRmlsbFBhaW50ZXIoKTsKKyAgICBLUmVuZGVy
aW5nRmlsbFBhaW50ZXIgZmlsbFBhaW50ZXI7CiAgICAgCi0gICAgcmV0dXJuIG1fZmlsbFBhaW50
ZXI7CisgICAgZmlsbFBhaW50ZXIuc2V0RmlsbFJ1bGUoc3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxS
dWxlKCkgPT0gV1JfTk9OWkVSTyA/IFJVTEVfTk9OWkVSTyA6IFJVTEVfRVZFTk9ERCk7CisgICAg
ZmlsbFBhaW50ZXIuc2V0T3BhY2l0eShzdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbE9wYWNpdHkoKSk7
CisKKyAgICByZXR1cm4gZmlsbFBhaW50ZXI7CiB9CiAKIC8vIHZpbTp0cz00Om5vZXQKSW5kZXg6
IGtzdmcyL21pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIv
bWlzYy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuaAkocmV2aXNpb24gMTIwODQpCisrKyBrc3ZnMi9t
aXNjL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBA
QAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3
aWxkZm94QGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA2ICAgICAgIEFsZXhhbmRlciBLZWxs
ZXR0IDxseXBhbm92QGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RF
IHByb2plY3QKIApAQCAtNjcsMzggKzY4LDIzIEBAIG5hbWVzcGFjZSBLU1ZHCiAgICAgcHVibGlj
OgogICAgICAgICBLQ2FudmFzUmVuZGVyaW5nU3R5bGUoY29uc3Qga2h0bWw6OlJlbmRlclN0eWxl
ICpzdHlsZSk7CiAgICAgICAgIH5LQ2FudmFzUmVuZGVyaW5nU3R5bGUoKTsKLQotICAgICAgICB2
b2lkIHVwZGF0ZVN0eWxlKGNvbnN0IGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUsIFJlbmRlclBh
dGggKml0ZW0pOwotCi0gICAgICAgIC8vIFN0cm9rZSAoYWthIFBlbikgcHJvcGVydGllcwotICAg
ICAgICBib29sIGlzU3Ryb2tlZCgpIGNvbnN0OwotCi0gICAgICAgIEtSZW5kZXJpbmdTdHJva2VQ
YWludGVyICpzdHJva2VQYWludGVyKCk7Ci0gICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAq
c3Ryb2tlUGFpbnRTZXJ2ZXIoY29uc3Qga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSwgY29uc3Qg
UmVuZGVyUGF0aCopOwotICAgICAgICB2b2lkIG92ZXJyaWRlU3Ryb2tlUGFpbnRTZXJ2ZXIoS1Jl
bmRlcmluZ1BhaW50U2VydmVyICpwc2VydmVyKTsKLQotICAgICAgICBzdGF0aWMgZG91YmxlIGNz
c1ByaW1pdGl2ZVRvTGVuZ3RoKGNvbnN0IFJlbmRlclBhdGggKml0ZW0sIEtET006OkNTU1ZhbHVl
SW1wbCAqdmFsdWUsIGRvdWJsZSBkZWZhdWx0VmFsdWUgPSAwLjApOwotCi0gICAgICAgIC8vIEZp
bGwgKGFrYSBCcnVzaCkgcHJvcGVydGllcwotICAgICAgICBib29sIGlzRmlsbGVkKCkgY29uc3Q7
Ci0KLSAgICAgICAgS1JlbmRlcmluZ0ZpbGxQYWludGVyICpmaWxsUGFpbnRlcigpOwotICAgICAg
ICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKmZpbGxQYWludFNlcnZlcihjb25zdCBraHRtbDo6UmVu
ZGVyU3R5bGUgKnN0eWxlLCBjb25zdCBSZW5kZXJQYXRoKik7Ci0gICAgICAgIHZvaWQgb3ZlcnJp
ZGVGaWxsUGFpbnRTZXJ2ZXIoS1JlbmRlcmluZ1BhaW50U2VydmVyICpwc2VydmVyKTsKLQotICAg
ICAgICBjb25zdCBraHRtbDo6UmVuZGVyU3R5bGUgKnJlbmRlclN0eWxlKCkgY29uc3QgeyByZXR1
cm4gbV9zdHlsZTsgfQotICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBLQ2FudmFzUmVu
ZGVyaW5nU3R5bGUoY29uc3QgS0NhbnZhc1JlbmRlcmluZ1N0eWxlICZvdGhlcik7CisgICAgfTsK
KworICAgIGNsYXNzIEtTVkdQYWludGVyRmFjdG9yeQorICAgIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIHN0YXRpYyBLUmVuZGVyaW5nRmlsbFBhaW50ZXIgZmlsbFBhaW50ZXIoY29uc3Qga2h0bWw6
OlJlbmRlclN0eWxlICpzdHlsZSwgY29uc3QgUmVuZGVyUGF0aCAqaXRlbSk7CisgICAgICAgIHN0
YXRpYyBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlciBzdHJva2VQYWludGVyKGNvbnN0IGtodG1sOjpS
ZW5kZXJTdHlsZSAqc3R5bGUsIGNvbnN0IFJlbmRlclBhdGggKml0ZW0pOwogCi0gICAgICAgIGNv
bnN0IGtodG1sOjpSZW5kZXJTdHlsZSAqbV9zdHlsZTsKKyAgICAgICAgc3RhdGljIGJvb2wgaXNT
dHJva2VkKGNvbnN0IGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUpOworICAgICAgICBzdGF0aWMg
S1JlbmRlcmluZ1BhaW50U2VydmVyICpzdHJva2VQYWludFNlcnZlcihjb25zdCBraHRtbDo6UmVu
ZGVyU3R5bGUgKnN0eWxlLCBjb25zdCBSZW5kZXJQYXRoKik7CiAKLSAgICAgICAgLy8gS0NhbnZh
cyBzdHVmZgotICAgICAgICBLUmVuZGVyaW5nRmlsbFBhaW50ZXIgKm1fZmlsbFBhaW50ZXI7Ci0g
ICAgICAgIEtSZW5kZXJpbmdTdHJva2VQYWludGVyICptX3N0cm9rZVBhaW50ZXI7CisgICAgICAg
IHN0YXRpYyBib29sIGlzRmlsbGVkKGNvbnN0IGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUpOwor
ICAgICAgICBzdGF0aWMgS1JlbmRlcmluZ1BhaW50U2VydmVyICpmaWxsUGFpbnRTZXJ2ZXIoY29u
c3Qga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSwgY29uc3QgUmVuZGVyUGF0aCopOwogCi0gICAg
ICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqbV9maWxsUGFpbnRlclBhaW50U2VydmVyT3ZlcnJp
ZGU7Ci0gICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqbV9zdHJva2VQYWludGVyUGFpbnRT
ZXJ2ZXJPdmVycmlkZTsKKyAgICAgICAgc3RhdGljIGRvdWJsZSBjc3NQcmltaXRpdmVUb0xlbmd0
aChjb25zdCBSZW5kZXJQYXRoICppdGVtLCBLRE9NOjpDU1NWYWx1ZUltcGwgKnZhbHVlLCBkb3Vi
bGUgZGVmYXVsdFZhbHVlID0gMC4wKTsKICAgICB9OwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5677</attachid>
            <date>2006-01-14 14:31:06 -0800</date>
            <delta_ts>2006-01-14 18:37:09 -0800</delta_ts>
            <desc>updated patch against current svn</desc>
            <filename>refactor-paintfactory.patch</filename>
            <type>text/plain</type>
            <size>36844</size>
            <attacher name="Alexander Kellett">a</attacher>
            
              <data encoding="base64">SW5kZXg6IGtjYW52YXMvS0NhbnZhc0l0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvS0Nh
bnZhc0l0ZW0uY3BwCShyZXZpc2lvbiAxMjA4NSkKKysrIGtjYW52YXMvS0NhbnZhc0l0ZW0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OSwxMiArNjksNiBAQCBSZW5kZXJQYXRoOjp+UmVuZGVyUGF0
aCgpCiAgICAgZGVsZXRlIGQ7CiB9CiAKLXZvaWQgUmVuZGVyUGF0aDo6c2V0U3R5bGUoa2h0bWw6
OlJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAgICBkLT5zdHlsZS0+dXBkYXRlU3R5bGUoc3R5bGUs
IHRoaXMpOwotICAgIGtodG1sOjpSZW5kZXJPYmplY3Q6OnNldFN0eWxlKHN0eWxlKTsKLX0KLQog
UU1hdHJpeCBSZW5kZXJQYXRoOjpsb2NhbFRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGQtPm1hdHJpeDsKQEAgLTE0MSw2ICsxMzUsOCBAQCBjb25zdCBLQ2FudmFzQ29tbW9uQXJncyBS
ZW5kZXJQYXRoOjpjb21tCiAgICAgS0NhbnZhc0NvbW1vbkFyZ3MgYXJnczsKICAgICBhcmdzLnNl
dFBhdGgocGF0aCgpKTsKICAgICBhcmdzLnNldFN0eWxlKGNhbnZhc1N0eWxlKCkpOworICAgIGFy
Z3Muc2V0UmVuZGVyU3R5bGUoc3R5bGUoKSk7CisgICAgYXJncy5zZXRSZW5kZXJQYXRoKHRoaXMp
OwogICAgIHJldHVybiBhcmdzOwogfQogCkluZGV4OiBrY2FudmFzL0tDYW52YXNJdGVtLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga2NhbnZhcy9LQ2FudmFzSXRlbS5oCShyZXZpc2lvbiAxMjA4NSkKKysrIGtj
YW52YXMvS0NhbnZhc0l0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNiBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjaGFuZ2VQYXRoKEtDYW52YXNQYXRoKiBuZXdQYXRoKTsKIAogICAgIEtD
YW52YXNQYXRoKiBwYXRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKGtodG1s
OjpSZW5kZXJTdHlsZSAqc3R5bGUpOwogICAgIEtTVkc6OktDYW52YXNSZW5kZXJpbmdTdHlsZSAq
Y2FudmFzU3R5bGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclBhdGgoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBrY2FudmFzL0tDYW52YXNUcmVlRGVidWcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtjYW52YXMvS0NhbnZhc1RyZWVEZWJ1Zy5jcHAJKHJldmlzaW9uIDEy
MDg1KQorKysga2NhbnZhcy9LQ2FudmFzVHJlZURlYnVnLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQzLDQ5ICsyNDMsNDggQEAgc3RhdGljIHZvaWQgd3JpdGVTdHlsZShRVGV4dFN0cmVhbSAmdHMs
IAogICAgICAgICB0cyA8PCAiIFtvcGFjaXR5PSIgPDwgc3R5bGUtPm9wYWNpdHkoKSA8PCAiXSI7
CiAgICAgaWYgKG9iamVjdC5pc1JlbmRlclBhdGgoKSkgewogICAgICAgICBjb25zdCBSZW5kZXJQ
YXRoICZwYXRoID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyUGF0aCAmPihvYmplY3QpOwotICAg
ICAgICBLQ2FudmFzUmVuZGVyaW5nU3R5bGUgKmNhbnZhc1N0eWxlID0gcGF0aC5jYW52YXNTdHls
ZSgpOwotICAgICAgICBpZiAoY2FudmFzU3R5bGUtPmlzU3Ryb2tlZCgpKSB7CisgICAgICAgIEtS
ZW5kZXJpbmdQYWludFNlcnZlciAqc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZHOjpLU1ZHUGFpbnRl
ckZhY3Rvcnk6OnN0cm9rZVBhaW50U2VydmVyKHN0eWxlLCAmcGF0aCk7CisgICAgICAgIGlmIChz
dHJva2VQYWludFNlcnZlcikgewogICAgICAgICAgICAgUVRleHRTdHJlYW1TZXBhcmF0b3Igcygi
ICIpOwogICAgICAgICAgICAgdHMgPDwgIiBbc3Ryb2tlPXsiOwotICAgICAgICAgICAgS1JlbmRl
cmluZ1BhaW50U2VydmVyICpzdHJva2VQYWludFNlcnZlciA9IGNhbnZhc1N0eWxlLT5zdHJva2VQ
YWludFNlcnZlcihzdHlsZSwgJnBhdGgpOwogICAgICAgICAgICAgaWYgKHN0cm9rZVBhaW50U2Vy
dmVyKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFzdHJva2VQYWludFNlcnZlci0+aWRJblJlZ2lz
dHJ5KCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbaWQ9XCIi
PDwgc3Ryb2tlUGFpbnRTZXJ2ZXItPmlkSW5SZWdpc3RyeSgpIDw8ICJcIl0iOyAKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgKnN0cm9rZVBhaW50
U2VydmVyOwogICAgICAgICAgICAgfSAKLSAgICAgICAgICAgIEtSZW5kZXJpbmdTdHJva2VQYWlu
dGVyICpwID0gY2FudmFzU3R5bGUtPnN0cm9rZVBhaW50ZXIoKTsKLSAgICAgICAgICAgIGlmIChw
LT5vcGFjaXR5KCkgIT0gMS4wZikKLSAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbb3BhY2l0
eT0iIDw8IHAtPm9wYWNpdHkoKSA8PCAiXSI7Ci0gICAgICAgICAgICBpZiAocC0+c3Ryb2tlV2lk
dGgoKSAhPSAxLjBmKQotICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltzdHJva2Ugd2lkdGg9
IiA8PCBwLT5zdHJva2VXaWR0aCgpIDw8ICJdIjsKLSAgICAgICAgICAgIGlmIChwLT5zdHJva2VN
aXRlckxpbWl0KCkgIT0gNCkKLSAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbbWl0ZXIgbGlt
aXQ9IiA8PCBwLT5zdHJva2VNaXRlckxpbWl0KCkgPDwgIl0iOwotICAgICAgICAgICAgaWYgKHAt
PnN0cm9rZUNhcFN0eWxlKCkgIT0gMSkKLSAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbbGlu
ZSBjYXA9IiA8PCBwLT5zdHJva2VDYXBTdHlsZSgpIDw8ICJdIjsKLSAgICAgICAgICAgIGlmIChw
LT5zdHJva2VKb2luU3R5bGUoKSAhPSAxKQotICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIlts
aW5lIGpvaW49IiA8PCBwLT5zdHJva2VKb2luU3R5bGUoKSA8PCAiXSI7Ci0gICAgICAgICAgICBp
ZiAocC0+ZGFzaE9mZnNldCgpICE9IDAuMGYpCi0gICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAi
W2Rhc2ggb2Zmc2V0PSIgPDwgcC0+ZGFzaE9mZnNldCgpIDw8ICJdIjsKLSAgICAgICAgICAgIGlm
ICghcC0+ZGFzaEFycmF5KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwg
IltkYXNoIGFycmF5PSIgPDwgcC0+ZGFzaEFycmF5KCkgPDwgIl0iOyAgICAgICAgCisgICAgICAg
ICAgICBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlciBwID0gS1NWRzo6S1NWR1BhaW50ZXJGYWN0b3J5
OjpzdHJva2VQYWludGVyKHN0eWxlLCAmcGF0aCk7CisgICAgICAgICAgICBpZiAocC5vcGFjaXR5
KCkgIT0gMS4wZikKKyAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbb3BhY2l0eT0iIDw8IHAu
b3BhY2l0eSgpIDw8ICJdIjsKKyAgICAgICAgICAgIGlmIChwLnN0cm9rZVdpZHRoKCkgIT0gMS4w
ZikKKyAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbc3Ryb2tlIHdpZHRoPSIgPDwgcC5zdHJv
a2VXaWR0aCgpIDw8ICJdIjsKKyAgICAgICAgICAgIGlmIChwLnN0cm9rZU1pdGVyTGltaXQoKSAh
PSA0KQorICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIlttaXRlciBsaW1pdD0iIDw8IHAuc3Ry
b2tlTWl0ZXJMaW1pdCgpIDw8ICJdIjsKKyAgICAgICAgICAgIGlmIChwLnN0cm9rZUNhcFN0eWxl
KCkgIT0gMSkKKyAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbbGluZSBjYXA9IiA8PCBwLnN0
cm9rZUNhcFN0eWxlKCkgPDwgIl0iOworICAgICAgICAgICAgaWYgKHAuc3Ryb2tlSm9pblN0eWxl
KCkgIT0gMSkKKyAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbbGluZSBqb2luPSIgPDwgcC5z
dHJva2VKb2luU3R5bGUoKSA8PCAiXSI7CisgICAgICAgICAgICBpZiAocC5kYXNoT2Zmc2V0KCkg
IT0gMC4wZikKKyAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbZGFzaCBvZmZzZXQ9IiA8PCBw
LmRhc2hPZmZzZXQoKSA8PCAiXSI7CisgICAgICAgICAgICBpZiAoIXAuZGFzaEFycmF5KCkuaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltkYXNoIGFycmF5PSIgPDwgcC5k
YXNoQXJyYXkoKSA8PCAiXSI7ICAgICAgICAKICAgICAgICAgICAgIHRzIDw8ICJ9XSI7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKGNhbnZhc1N0eWxlLT5pc0ZpbGxlZCgpKSB7CisgICAgICAgIEtS
ZW5kZXJpbmdQYWludFNlcnZlciAqZmlsbFBhaW50U2VydmVyID0gS1NWRzo6S1NWR1BhaW50ZXJG
YWN0b3J5OjpmaWxsUGFpbnRTZXJ2ZXIoc3R5bGUsICZwYXRoKTsKKyAgICAgICAgaWYgKGZpbGxQ
YWludFNlcnZlcikgewogICAgICAgICAgICAgUVRleHRTdHJlYW1TZXBhcmF0b3IgcygiICIpOwog
ICAgICAgICAgICAgdHMgPDwgIiBbZmlsbD17IjsKLSAgICAgICAgICAgIEtSZW5kZXJpbmdQYWlu
dFNlcnZlciAqZmlsbFBhaW50U2VydmVyID0gY2FudmFzU3R5bGUtPmZpbGxQYWludFNlcnZlcihz
dHlsZSwgJnBhdGgpOwogICAgICAgICAgICAgaWYgKGZpbGxQYWludFNlcnZlcikgewogICAgICAg
ICAgICAgICAgIGlmICghZmlsbFBhaW50U2VydmVyLT5pZEluUmVnaXN0cnkoKS5pc0VtcHR5KCkp
CiAgICAgICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltpZD1cIiIgPDwgZmlsbFBhaW50U2Vy
dmVyLT5pZEluUmVnaXN0cnkoKSA8PCAiXCJdIjsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgKmZpbGxQYWludFNlcnZlcjsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIEtSZW5kZXJpbmdGaWxsUGFpbnRlciAqcCA9IGNhbnZhc1N0eWxlLT5m
aWxsUGFpbnRlcigpOwotICAgICAgICAgICAgaWYgKHAtPm9wYWNpdHkoKSAhPSAxLjBmKQotICAg
ICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltvcGFjaXR5PSIgPDwgcC0+b3BhY2l0eSgpIDw8ICJd
IjsKLSAgICAgICAgICAgIGlmIChwLT5maWxsUnVsZSgpICE9IFJVTEVfTk9OWkVSTykKLSAgICAg
ICAgICAgICAgICB0cyA8PCBzIDw8ICJbZmlsbCBydWxlPSIgPDwgcC0+ZmlsbFJ1bGUoKSA8PCAi
XSI7CisgICAgICAgICAgICBLUmVuZGVyaW5nRmlsbFBhaW50ZXIgcCA9IEtTVkc6OktTVkdQYWlu
dGVyRmFjdG9yeTo6ZmlsbFBhaW50ZXIoc3R5bGUsICZwYXRoKTsKKyAgICAgICAgICAgIGlmIChw
Lm9wYWNpdHkoKSAhPSAxLjBmKQorICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltvcGFjaXR5
PSIgPDwgcC5vcGFjaXR5KCkgPDwgIl0iOworICAgICAgICAgICAgaWYgKHAuZmlsbFJ1bGUoKSAh
PSBSVUxFX05PTlpFUk8pCisgICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAiW2ZpbGwgcnVsZT0i
IDw8IHAuZmlsbFJ1bGUoKSA8PCAiXSI7CiAgICAgICAgICAgICB0cyA8PCAifV0iOwogICAgICAg
ICB9CiAgICAgfQpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzSXRlbVF1YXJ0
ei5tbQkocmV2aXNpb24gMTIwODUpCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0l0
ZW1RdWFydHoubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2ltcG9ydCA8
a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogCisjaW1wb3J0ICJrY2FudmFzL1JlbmRlclBhdGguaCIK
ICNpbXBvcnQgImtjYW52YXMvS0NhbnZhcy5oIgogI2ltcG9ydCAiS0NhbnZhc1JlbmRlcmluZ1N0
eWxlLmgiCiAjaW1wb3J0ICJLUmVuZGVyaW5nRmlsbFBhaW50ZXIuaCIKQEAgLTE3MCw3ICsxNzEs
NyBAQCB2b2lkIEtDYW52YXNJdGVtUXVhcnR6OjpkcmF3TWFya2Vyc0lmTmVlCiAgICAgaWYgKCFz
dGFydE1hcmtlciAmJiAhbWlkTWFya2VyICYmICFlbmRNYXJrZXIpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9IEtTVkc6OktDYW52YXNSZW5kZXJpbmdTdHlsZTo6
Y3NzUHJpbWl0aXZlVG9MZW5ndGgodGhpcywgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lk
dGgoKSwgMS4wKTsKKyAgICBkb3VibGUgc3Ryb2tlV2lkdGggPSBLU1ZHOjpLU1ZHUGFpbnRlckZh
Y3Rvcnk6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKHRoaXMsIHN0eWxlKCktPnN2Z1N0eWxlKCktPnN0
cm9rZVdpZHRoKCksIDEuMCk7CiAKICAgICBEcmF3TWFya2Vyc0RhdGEgZGF0YShzdGFydE1hcmtl
ciwgbWlkTWFya2VyLCBzdHJva2VXaWR0aCk7CiAKQEAgLTIyMSwxMyArMjIyLDEzIEBAIHZvaWQg
S0NhbnZhc0l0ZW1RdWFydHo6OnBhaW50KFBhaW50SW5mbyAKICAgICAKICAgICBLQ2FudmFzQ29t
bW9uQXJncyBhcmdzID0gY29tbW9uQXJncygpOwogCi0gICAgS1JlbmRlcmluZ1BhaW50U2VydmVy
ICpmaWxsUGFpbnRTZXJ2ZXIgPSBjYW52YXNTdHlsZSgpLT5maWxsUGFpbnRTZXJ2ZXIoY2FudmFz
U3R5bGUoKS0+cmVuZGVyU3R5bGUoKSwgdGhpcyk7CisgICAgS1JlbmRlcmluZ1BhaW50U2VydmVy
ICpmaWxsUGFpbnRTZXJ2ZXIgPSBLU1ZHOjpLU1ZHUGFpbnRlckZhY3Rvcnk6OmZpbGxQYWludFNl
cnZlcihzdHlsZSgpLCB0aGlzKTsKICAgICBpZiAoZmlsbFBhaW50U2VydmVyKSB7CiAgICAgICAg
IGRldmljZUNvbnRleHQtPmFkZFBhdGgocGF0aCgpKTsKICAgICAgICAgZmlsbFBhaW50U2VydmVy
LT5zZXRBY3RpdmVDbGllbnQodGhpcyk7CiAgICAgICAgIGZpbGxQYWludFNlcnZlci0+ZHJhdyhk
ZXZpY2VDb250ZXh0LCBhcmdzLCBBUFBMWV9UT19GSUxMKTsKICAgICB9Ci0gICAgS1JlbmRlcmlu
Z1BhaW50U2VydmVyICpzdHJva2VQYWludFNlcnZlciA9IGNhbnZhc1N0eWxlKCktPnN0cm9rZVBh
aW50U2VydmVyKGNhbnZhc1N0eWxlKCktPnJlbmRlclN0eWxlKCksIHRoaXMpOworICAgIEtSZW5k
ZXJpbmdQYWludFNlcnZlciAqc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZHOjpLU1ZHUGFpbnRlckZh
Y3Rvcnk6OnN0cm9rZVBhaW50U2VydmVyKHN0eWxlKCksIHRoaXMpOwogICAgIGlmIChzdHJva2VQ
YWludFNlcnZlcikgewogICAgICAgICBkZXZpY2VDb250ZXh0LT5hZGRQYXRoKHBhdGgoKSk7IC8v
IHBhdGggaXMgY2xlYXJlZCB3aGVuIGZpbGxlZC4KICAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXIt
PnNldEFjdGl2ZUNsaWVudCh0aGlzKTsKQEAgLTI5MSwxMyArMjkyLDEzIEBAIEZsb2F0UmVjdCBL
Q2FudmFzSXRlbVF1YXJ0ejo6YmJveEZvclBhdGgKICAgICAvLyB0aGUgYmJveCBtaWdodCBncm93
IGlmIHRoZSBwYXRoIGlzIHN0cm9rZWQuCiAgICAgLy8gYW5kIENHUGF0aEdldEJvdW5kaW5nQm94
IGRvZXNuJ3Qgc3VwcG9ydCB0aGF0LCBzbyB3ZSdsbCBoYXZlCiAgICAgLy8gdG8gbWFrZSBhbiBh
bHRlcm5hdGl2ZSBjYWxsLi4uCi0gICAgaWYoaW5jbHVkZVN0cm9rZSAmJiBjYW52YXNTdHlsZSgp
LT5pc1N0cm9rZWQoKSkgeworICAgIGlmIChpbmNsdWRlU3Ryb2tlICYmIEtTVkc6OktTVkdQYWlu
dGVyRmFjdG9yeTo6aXNTdHJva2VkKHN0eWxlKCkpKSB7CiAgICAgICAgIENHQ29udGV4dFJlZiBz
aGFyZWRDb250ZXh0ID0gZ2V0U2hhcmVkQ29udGV4dCgpOwogICAgICAgICAKICAgICAgICAgQ0dD
b250ZXh0U2F2ZUdTdGF0ZShzaGFyZWRDb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0QmVnaW5Q
YXRoKHNoYXJlZENvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRBZGRQYXRoKHNoYXJlZENvbnRl
eHQsIGNnUGF0aCk7Ci0gICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoc2hhcmVkQ29u
dGV4dCwgY2FudmFzU3R5bGUoKSk7CisgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQo
c2hhcmVkQ29udGV4dCwgc3R5bGUoKSwgdGhpcyk7CiAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQ
YXRoV2l0aFN0cm9rZWRQYXRoKHNoYXJlZENvbnRleHQpOwogICAgICAgICAKICAgICAgICAgYmJv
eCA9IENHQ29udGV4dEdldFBhdGhCb3VuZGluZ0JveChzaGFyZWRDb250ZXh0KTsKQEAgLTMyNiwx
MCArMzI3LDEwIEBAIGJvb2wgS0NhbnZhc0l0ZW1RdWFydHo6OmhpdHNQYXRoKGNvbnN0IEYKICAg
ICAvKiB3ZSB0cmFuc2Zvcm0gdGhlIGhpdCBwb2ludCBsb2NhbGx5LCBpbnN0ZWFkIG9mIHRyYW5z
bGF0aW5nIHRoZSBzaGFwZSB0byB0aGUgaGl0IHBvaW50LiAqLwogICAgIENHUG9pbnQgbG9jYWxI
aXRQb2ludCA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShDR1BvaW50KGhpdFBvaW50KSwg
Q0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQodHJhbnNmb3JtKSk7CiAKLSAgICBpZiAoZmlsbCAmJiBj
YW52YXNTdHlsZSgpLT5maWxsUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhpcykpIHsKLSAgICAgICAg
Q0dQYXRoRHJhd2luZ01vZGUgZHJhd01vZGUgPSAoY2FudmFzU3R5bGUoKS0+ZmlsbFBhaW50ZXIo
KS0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQpID8ga0NHUGF0aEVPRmlsbCA6IGtDR1BhdGhG
aWxsOworICAgIGlmIChmaWxsICYmIEtTVkc6OktTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50
U2VydmVyKHN0eWxlKCksIHRoaXMpKSB7CisgICAgICAgIENHUGF0aERyYXdpbmdNb2RlIGRyYXdN
b2RlID0gKEtTVkc6OktTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50ZXIoc3R5bGUoKSwgdGhp
cykuZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQpID8ga0NHUGF0aEVPRmlsbCA6IGtDR1BhdGhG
aWxsOwogICAgICAgICBoaXRTdWNjZXNzID0gQ0dDb250ZXh0UGF0aENvbnRhaW5zUG9pbnQoc2hh
cmVkQ29udGV4dCwgbG9jYWxIaXRQb2ludCwgZHJhd01vZGUpOwotICAgIH0gZWxzZSBpZiAoIWZp
bGwgJiYgY2FudmFzU3R5bGUoKS0+c3Ryb2tlUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhpcykpCisg
ICAgfSBlbHNlIGlmICghZmlsbCAmJiBLU1ZHOjpLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBh
aW50U2VydmVyKHN0eWxlKCksIHRoaXMpKQogICAgICAgICBoaXRTdWNjZXNzID0gQ0dDb250ZXh0
UGF0aENvbnRhaW5zUG9pbnQoc2hhcmVkQ29udGV4dCwgbG9jYWxIaXRQb2ludCwga0NHUGF0aFN0
cm9rZSk7CiAKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKHNoYXJlZENvbnRleHQpOwpJbmRl
eDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ1BhaW50U2VydmVy
UXVhcnR6Lm1tCShyZXZpc2lvbiAxMjA4NSkKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHoubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICAyMDA2IEFsZXhhbmRlciBLZWxsZXR0IDxs
eXBhbm92QGtkZS5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDMw
ICs0NCwzMSBAQCB2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXVhcnR6OjpkCiB7CiAg
ICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHogKnF1YXJ0ekNvbnRleHQgPSBzdGF0aWNf
Y2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eiAqPihyZW5kZXJpbmdDb250ZXh0KTsK
ICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHF1YXJ0ekNvbnRleHQtPmNnQ29udGV4dCgpOwot
ICAgIEtTVkc6OktDYW52YXNSZW5kZXJpbmdTdHlsZSAqY2FudmFzU3R5bGUgPSBhcmdzLmNhbnZh
c1N0eWxlKCk7CisgICAga2h0bWw6OlJlbmRlclN0eWxlICpyZW5kZXJTdHlsZSA9IGFyZ3MucmVu
ZGVyU3R5bGUoKTsKKyAgICBjb25zdCBSZW5kZXJQYXRoICpyZW5kZXJQYXRoID0gYXJncy5yZW5k
ZXJQYXRoKCk7CiAKLSAgICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0LCBjYW52YXNTdHlsZS0+
cmVuZGVyU3R5bGUoKS0+b3BhY2l0eSgpKTsKKyAgICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0
LCByZW5kZXJTdHlsZS0+b3BhY2l0eSgpKTsKICAgICAgICAgCi0gICAgaWYgKCAodHlwZSAmIEFQ
UExZX1RPX0ZJTEwpICYmIGNhbnZhc1N0eWxlLT5pc0ZpbGxlZCgpICkgeworICAgIGlmICgodHlw
ZSAmIEFQUExZX1RPX0ZJTEwpICYmIEtTVkc6OktTVkdQYWludGVyRmFjdG9yeTo6aXNGaWxsZWQo
cmVuZGVyU3R5bGUpKSB7CiAgICAgICAgIENHQ29sb3JSZWYgY29sb3JDRyA9IGNnQ29sb3IoY29s
b3IoKSk7Ci0gICAgICAgIENHQ29sb3JSZWYgd2l0aEFscGhhID0gQ0dDb2xvckNyZWF0ZUNvcHlX
aXRoQWxwaGEoY29sb3JDRywgY2FudmFzU3R5bGUtPmZpbGxQYWludGVyKCktPm9wYWNpdHkoKSk7
CisgICAgICAgIENHQ29sb3JSZWYgd2l0aEFscGhhID0gQ0dDb2xvckNyZWF0ZUNvcHlXaXRoQWxw
aGEoY29sb3JDRywgS1NWRzo6S1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRlcihyZW5kZXJT
dHlsZSwgcmVuZGVyUGF0aCkub3BhY2l0eSgpKTsKICAgICAgICAgQ0dDb250ZXh0U2V0RmlsbENv
bG9yV2l0aENvbG9yKGNvbnRleHQsIHdpdGhBbHBoYSk7CiAgICAgICAgIENHQ29sb3JSZWxlYXNl
KGNvbG9yQ0cpOwogICAgICAgICBDR0NvbG9yUmVsZWFzZSh3aXRoQWxwaGEpOwotICAgICAgICBp
ZiAoY2FudmFzU3R5bGUtPmZpbGxQYWludGVyKCktPmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0RE
KQorICAgICAgICBpZiAoS1NWRzo6S1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRlcihyZW5k
ZXJTdHlsZSwgcmVuZGVyUGF0aCkuZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQpCiAgICAgICAg
ICAgICBDR0NvbnRleHRFT0ZpbGxQYXRoKGNvbnRleHQpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBDR0NvbnRleHRGaWxsUGF0aChjb250ZXh0KTsKICAgICB9CiAKLSAgICBpZiAoICh0eXBl
ICYgQVBQTFlfVE9fU1RST0tFKSAmJiBjYW52YXNTdHlsZS0+aXNTdHJva2VkKCkgKSB7CisgICAg
aWYgKCh0eXBlICYgQVBQTFlfVE9fU1RST0tFKSAmJiBLU1ZHOjpLU1ZHUGFpbnRlckZhY3Rvcnk6
OmlzU3Ryb2tlZChyZW5kZXJTdHlsZSkpIHsKICAgICAgICAgQ0dDb2xvclJlZiBjb2xvckNHID0g
Y2dDb2xvcihjb2xvcigpKTsKLSAgICAgICAgQ0dDb2xvclJlZiB3aXRoQWxwaGEgPSBDR0NvbG9y
Q3JlYXRlQ29weVdpdGhBbHBoYShjb2xvckNHLCBjYW52YXNTdHlsZS0+c3Ryb2tlUGFpbnRlcigp
LT5vcGFjaXR5KCkpOworICAgICAgICBDR0NvbG9yUmVmIHdpdGhBbHBoYSA9IENHQ29sb3JDcmVh
dGVDb3B5V2l0aEFscGhhKGNvbG9yQ0csIEtTVkc6OktTVkdQYWludGVyRmFjdG9yeTo6c3Ryb2tl
UGFpbnRlcihyZW5kZXJTdHlsZSwgcmVuZGVyUGF0aCkub3BhY2l0eSgpKTsJCQogICAgICAgICBD
R0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0LCB3aXRoQWxwaGEpOwogICAg
ICAgICBDR0NvbG9yUmVsZWFzZShjb2xvckNHKTsKICAgICAgICAgQ0dDb2xvclJlbGVhc2Uod2l0
aEFscGhhKTsKICAgICAgICAgCi0gICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29u
dGV4dCwgY2FudmFzU3R5bGUpOworICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNv
bnRleHQsIHJlbmRlclN0eWxlLCByZW5kZXJQYXRoKTsKICAgICAgICAgCiAgICAgICAgIENHQ29u
dGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CiAgICAgfQpAQCAtODcsNyArODksOCBAQCB2b2lkIEtS
ZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFydHo6CiAKICAgICBLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dFF1YXJ0eiAqcXVhcnR6Q29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0UXVhcnR6ICo+KHJlbmRlcmluZ0NvbnRleHQpOwogICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gcXVhcnR6Q29udGV4dC0+Y2dDb250ZXh0KCk7Ci0gICAgS1NWRzo6S0NhbnZhc1Jl
bmRlcmluZ1N0eWxlICpjYW52YXNTdHlsZSA9IGFyZ3MuY2FudmFzU3R5bGUoKTsKKyAgICBjb25z
dCBSZW5kZXJQYXRoICpyZW5kZXJQYXRoID0gYXJncy5yZW5kZXJQYXRoKCk7CisgICAga2h0bWw6
OlJlbmRlclN0eWxlICpyZW5kZXJTdHlsZSA9IGFyZ3MucmVuZGVyU3R5bGUoKTsKIAogICAgIEtD
YW52YXNJbWFnZSAqY2VsbCA9IHRpbGUoKTsKICAgICBpZiAoIWNlbGwpCkBAIC0xMTgsMjMgKzEy
MSwyMyBAQCB2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFydHo6CiAgICAgICAg
IHRydWUsIC8vIGhhcyBjb2xvcgogICAgICAgICAmY2FsbGJhY2tzICk7CiAKLSAgICBDR0NvbnRl
eHRTZXRBbHBoYShjb250ZXh0LCBjYW52YXNTdHlsZS0+cmVuZGVyU3R5bGUoKS0+b3BhY2l0eSgp
KTsgLy8gb3IgZG8gSSBzZXQgdGhlIGFscGhhIGFib3ZlPworICAgIENHQ29udGV4dFNldEFscGhh
KGNvbnRleHQsIHJlbmRlclN0eWxlLT5vcGFjaXR5KCkpOyAvLyBvciBkbyBJIHNldCB0aGUgYWxw
aGEgYWJvdmU/CiAKICAgICBDR0NvbG9yU3BhY2VSZWYgcGF0dGVyblNwYWNlID0gQ0dDb2xvclNw
YWNlQ3JlYXRlUGF0dGVybihOVUxMKTsKIAotICAgIGlmICggKHR5cGUgJiBBUFBMWV9UT19GSUxM
KSAmJiBjYW52YXNTdHlsZS0+aXNGaWxsZWQoKSApIHsKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9U
T19GSUxMKSAmJiBLU1ZHOjpLU1ZHUGFpbnRlckZhY3Rvcnk6OmlzRmlsbGVkKHJlbmRlclN0eWxl
KSkgewogICAgICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JTcGFjZShjb250ZXh0LCBwYXR0ZXJu
U3BhY2UpOwogICAgICAgICBDR0NvbnRleHRTZXRGaWxsUGF0dGVybihjb250ZXh0LCBwYXR0ZXJu
LCAmYWxwaGEpOwotICAgICAgICBpZiAoY2FudmFzU3R5bGUtPmZpbGxQYWludGVyKCktPmZpbGxS
dWxlKCkgPT0gUlVMRV9FVkVOT0REKQorICAgICAgICBpZiAoS1NWRzo6S1NWR1BhaW50ZXJGYWN0
b3J5OjpmaWxsUGFpbnRlcihyZW5kZXJTdHlsZSwgcmVuZGVyUGF0aCkuZmlsbFJ1bGUoKSA9PSBS
VUxFX0VWRU5PREQpCiAgICAgICAgICAgICBDR0NvbnRleHRFT0ZpbGxQYXRoKGNvbnRleHQpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBDR0NvbnRleHRGaWxsUGF0aChjb250ZXh0KTsKICAg
ICB9Ci0KLSAgICBpZiAoICh0eXBlICYgQVBQTFlfVE9fU1RST0tFKSAmJiBjYW52YXNTdHlsZS0+
aXNTdHJva2VkKCkgKSB7CisgICAgCisgICAgaWYgKCh0eXBlICYgQVBQTFlfVE9fU1RST0tFKSAm
JiBLU1ZHOjpLU1ZHUGFpbnRlckZhY3Rvcnk6OmlzU3Ryb2tlZChyZW5kZXJTdHlsZSkpIHsKICAg
ICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JTcGFjZShjb250ZXh0LCBwYXR0ZXJuU3BhY2Up
OwogICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VQYXR0ZXJuKGNvbnRleHQsIHBhdHRlcm4sICZh
bHBoYSk7Ci0gICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgY2FudmFz
U3R5bGUpOworICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHJlbmRl
clN0eWxlLCByZW5kZXJQYXRoKTsKICAgICAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjb250ZXh0
KTsKICAgICB9CiAKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0Lm1tCShy
ZXZpc2lvbiAxMjA4NSkKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJLQ2FudmFzUmVzb3Vy
Y2VzUXVhcnR6LmgiCiAjaW1wb3J0ICJLUmVuZGVyaW5nRmlsbFBhaW50ZXIuaCIKICNpbXBvcnQg
IktSZW5kZXJpbmdTdHJva2VQYWludGVyLmgiCisjaW1wb3J0ICJLQ2FudmFzUmVuZGVyaW5nU3R5
bGUuaCIKICNpbXBvcnQgImt4bWxjb3JlL0Fzc2VydGlvbnMuaCIKIAogI2ltcG9ydCA8UXVhcnR6
Q29yZS9Db3JlSW1hZ2UuaD4KQEAgLTg4LDI2ICs4OSwyOCBAQCBDR0FmZmluZVRyYW5zZm9ybSBD
R0FmZmluZVRyYW5zZm9ybU1ha2VNCiAgICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0KIAotdm9pZCBh
cHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0LCBLU1ZHOjpLQ2Fu
dmFzUmVuZGVyaW5nU3R5bGUgKnN0eWxlKQordm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0
KENHQ29udGV4dFJlZiBjb250ZXh0LCBraHRtbDo6UmVuZGVyU3R5bGUgKnJlbmRlclN0eWxlLCBj
b25zdCBSZW5kZXJQYXRoICpyZW5kZXJQYXRoKQogeworICAgIEtSZW5kZXJpbmdTdHJva2VQYWlu
dGVyIHN0cm9rZVBhaW50ZXIgPSBLU1ZHOjpLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50
ZXIocmVuZGVyU3R5bGUsIHJlbmRlclBhdGgpOworCiAgICAgLyogU2hvdWxkbid0IGFsbCB0aGVz
ZSBiZSBpbiB0aGUgc3Ryb2tlIHBhaW50ZXI/ICovCi0gICAgQ0dDb250ZXh0U2V0TGluZVdpZHRo
KGNvbnRleHQsIHN0eWxlLT5zdHJva2VQYWludGVyKCktPnN0cm9rZVdpZHRoKCkpOworICAgIENH
Q29udGV4dFNldExpbmVXaWR0aChjb250ZXh0LCBzdHJva2VQYWludGVyLnN0cm9rZVdpZHRoKCkp
OwogCi0gICAgS0NDYXBTdHlsZSBjYXBTdHlsZSA9IHN0eWxlLT5zdHJva2VQYWludGVyKCktPnN0
cm9rZUNhcFN0eWxlKCk7CisgICAgS0NDYXBTdHlsZSBjYXBTdHlsZSA9IHN0cm9rZVBhaW50ZXIu
c3Ryb2tlQ2FwU3R5bGUoKTsKICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQsIENHTGlu
ZUNhcEZyb21LQyhjYXBTdHlsZSkpOwogCi0gICAgS0NKb2luU3R5bGUgam9pblN0eWxlID0gc3R5
bGUtPnN0cm9rZVBhaW50ZXIoKS0+c3Ryb2tlSm9pblN0eWxlKCk7CisgICAgS0NKb2luU3R5bGUg
am9pblN0eWxlID0gc3Ryb2tlUGFpbnRlci5zdHJva2VKb2luU3R5bGUoKTsKICAgICBDR0NvbnRl
eHRTZXRMaW5lSm9pbihjb250ZXh0LCBDR0xpbmVKb2luRnJvbUtDKGpvaW5TdHlsZSkpOwogCi0g
ICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdChjb250ZXh0LCBzdHlsZS0+c3Ryb2tlUGFpbnRlcigp
LT5zdHJva2VNaXRlckxpbWl0KCkpOworICAgIENHQ29udGV4dFNldE1pdGVyTGltaXQoY29udGV4
dCwgc3Ryb2tlUGFpbnRlci5zdHJva2VNaXRlckxpbWl0KCkpOwogCi0gICAgS0NEYXNoQXJyYXkg
ZGFzaGVzID0gc3R5bGUtPnN0cm9rZVBhaW50ZXIoKS0+ZGFzaEFycmF5KCk7CisgICAgS0NEYXNo
QXJyYXkgZGFzaGVzID0gc3Ryb2tlUGFpbnRlci5kYXNoQXJyYXkoKTsKICAgICBpZiAoZGFzaGVz
LmNvdW50KCkpIHsKICAgICAgICAgc2l6ZV90IGRhc2hDb3VudCA9IGRhc2hlcy5jb3VudCgpOwog
ICAgICAgICBmbG9hdCAqbGVuZ3RocyA9IChmbG9hdCAqKW1hbGxvYyhkYXNoQ291bnQgKiBzaXpl
b2YoZmxvYXQpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeCA9IDA7IHggPCBkYXNoQ291
bnQ7IHgrKykKICAgICAgICAgICAgIGxlbmd0aHNbeF0gPSBkYXNoZXNbeF07Ci0gICAgICAgIENH
Q29udGV4dFNldExpbmVEYXNoKGNvbnRleHQsIHN0eWxlLT5zdHJva2VQYWludGVyKCktPmRhc2hP
ZmZzZXQoKSwgbGVuZ3RocywgZGFzaGVzLmNvdW50KCkpOworICAgICAgICBDR0NvbnRleHRTZXRM
aW5lRGFzaChjb250ZXh0LCBzdHJva2VQYWludGVyLmRhc2hPZmZzZXQoKSwgbGVuZ3RocywgZGFz
aGVzLmNvdW50KCkpOwogICAgICAgICBmcmVlKGxlbmd0aHMpOwogICAgIH0KIH0KSW5kZXg6IGtj
YW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ei5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ1BhaW50U2Vy
dmVyR3JhZGllbnRRdWFydHoubW0JKHJldmlzaW9uIDEyMDg1KQorKysga2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw4ICs0MCwxMCBAQAogCiAKIC8vIE1heWJlIHRoaXMgc2hvdWxkIGJlIGluIGEg
YmFzZSBjbGFzcyBpbnN0ZWFkLi4uCi1zdGF0aWMgdm9pZCBkcmF3U2hhZGluZ1dpdGhTdHlsZShj
b25zdCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCAqc2VydmVyLCBDR1NoYWRpbmdSZWYg
c2hhZGluZywgS1NWRzo6S0NhbnZhc1JlbmRlcmluZ1N0eWxlICpjYW52YXNTdHlsZSwgS0NQYWlu
dFRhcmdldFR5cGUgdHlwZSkKK3N0YXRpYyB2b2lkIGRyYXdTaGFkaW5nV2l0aFN0eWxlKGNvbnN0
IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50ICpzZXJ2ZXIsIENHU2hhZGluZ1JlZiBzaGFk
aW5nLCBjb25zdCBLQ2FudmFzQ29tbW9uQXJncyAmYXJncywgS0NQYWludFRhcmdldFR5cGUgdHlw
ZSkKIHsKKyAgICBraHRtbDo6UmVuZGVyU3R5bGUgKnJlbmRlclN0eWxlID0gYXJncy5yZW5kZXJT
dHlsZSgpOworICAgIGNvbnN0IFJlbmRlclBhdGggKnJlbmRlclBhdGggPSBhcmdzLnJlbmRlclBh
dGgoKTsKICAgICBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6ICpxdWFydHpEZXZpY2UgPSBzdGF0aWNf
Y2FzdDxLUmVuZGVyaW5nRGV2aWNlUXVhcnR6ICo+KFFQYWludGVyOjpyZW5kZXJpbmdEZXZpY2Uo
KSk7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBxdWFydHpEZXZpY2UtPmN1cnJlbnRDR0Nv
bnRleHQoKTsKICAgICBBU1NFUlQoY29udGV4dCAhPSBOVUxMKTsKQEAgLTY0LDExICs2NiwxMSBA
QCBzdGF0aWMgdm9pZCBkcmF3U2hhZGluZ1dpdGhTdHlsZShjb25zdCBLCiAgICAgQ0dBZmZpbmVU
cmFuc2Zvcm0gZ3JhZGllbnRUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybShzZXJ2ZXItPmdy
YWRpZW50VHJhbnNmb3JtKCkucW1hdHJpeCgpKTsKICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29u
dGV4dCwgZ3JhZGllbnRUcmFuc2Zvcm0pOwogICAgIAotICAgIENHQ29udGV4dFNldEFscGhhKGNv
bnRleHQsIGNhbnZhc1N0eWxlLT5yZW5kZXJTdHlsZSgpLT5vcGFjaXR5KCkpOworICAgIENHQ29u
dGV4dFNldEFscGhhKGNvbnRleHQsIHJlbmRlclN0eWxlLT5vcGFjaXR5KCkpOwogICAgIAotICAg
IGlmICggKHR5cGUgJiBBUFBMWV9UT19GSUxMKSAmJiBjYW52YXNTdHlsZS0+aXNGaWxsZWQoKSAp
IHsKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19GSUxMKSAmJiBLU1ZHOjpLU1ZHUGFpbnRlckZh
Y3Rvcnk6OmlzRmlsbGVkKHJlbmRlclN0eWxlKSkgewogICAgICAgICBDR0NvbnRleHRTYXZlR1N0
YXRlKGNvbnRleHQpOwotICAgICAgICBpZiAoY2FudmFzU3R5bGUtPmZpbGxQYWludGVyKCktPmZp
bGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKSB7CisgICAgICAgIGlmIChLU1ZHOjpLU1ZHUGFpbnRl
ckZhY3Rvcnk6OmZpbGxQYWludGVyKHJlbmRlclN0eWxlLCByZW5kZXJQYXRoKS5maWxsUnVsZSgp
ID09IFJVTEVfRVZFTk9ERCkgewogICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsK
QEAgLTc3LDkgKzc5LDkgQEAgc3RhdGljIHZvaWQgZHJhd1NoYWRpbmdXaXRoU3R5bGUoY29uc3Qg
SwogICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogICAgIH0KICAgICAK
LSAgICBpZiAoICh0eXBlICYgQVBQTFlfVE9fU1RST0tFKSAmJiBjYW52YXNTdHlsZS0+aXNTdHJv
a2VkKCkgKSB7CisgICAgaWYgKCh0eXBlICYgQVBQTFlfVE9fU1RST0tFKSAmJiBLU1ZHOjpLU1ZH
UGFpbnRlckZhY3Rvcnk6OmlzU3Ryb2tlZChyZW5kZXJTdHlsZSkpIHsKICAgICAgICAgQ0dDb250
ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKLSAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4
dChjb250ZXh0LCBjYW52YXNTdHlsZSk7IC8vIEZJWE1FOiB0aGlzIHNlZW1zIGxpa2UgdGhlIHdy
b25nIHBsYWNlIGZvciB0aGlzLgorICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNv
bnRleHQsIHJlbmRlclN0eWxlLCByZW5kZXJQYXRoKTsgLy8gRklYTUU6IHRoaXMgc2VlbXMgbGlr
ZSB0aGUgd3JvbmcgcGxhY2UgZm9yIHRoaXMuCiAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRo
V2l0aFN0cm9rZWRQYXRoKGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQp
OwogICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBzaGFkaW5nKTsKQEAgLTI5
OCw3ICszMDAsNyBAQCB2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50CiAg
ICAgaWYgKCFtX3NoYWRpbmdDYWNoZSkKICAgICAgICAgY29uc3RfY2FzdDxLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF1YXJ0eiAqPih0aGlzKS0+dXBkYXRlUXVhcnR6R3JhZGll
bnRDYWNoZSh0aGlzKTsKICAgICAKLSAgICBkcmF3U2hhZGluZ1dpdGhTdHlsZSh0aGlzLCBtX3No
YWRpbmdDYWNoZSwgYXJncy5jYW52YXNTdHlsZSgpLCB0eXBlKTsKKyAgICBkcmF3U2hhZGluZ1dp
dGhTdHlsZSh0aGlzLCBtX3NoYWRpbmdDYWNoZSwgYXJncywgdHlwZSk7CiB9CiAKIHZvaWQgS1Jl
bmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdWFydHo6OmRyYXcoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQgKnJlbmRlcmluZ0NvbnRleHQsIGNvbnN0IEtDYW52YXNDb21tb25BcmdzICZh
cmdzLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdApAQCAtMzExLDUgKzMxMyw1IEBAIHZv
aWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQKICAgICBpZiAoIW1fc2hhZGlu
Z0NhY2hlKQogICAgICAgICBjb25zdF9jYXN0PEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdy
YWRpZW50UXVhcnR6ICo+KHRoaXMpLT51cGRhdGVRdWFydHpHcmFkaWVudENhY2hlKHRoaXMpOwog
ICAgIAotICAgIGRyYXdTaGFkaW5nV2l0aFN0eWxlKHRoaXMsIG1fc2hhZGluZ0NhY2hlLCBhcmdz
LmNhbnZhc1N0eWxlKCksIHR5cGUpOworICAgIGRyYXdTaGFkaW5nV2l0aFN0eWxlKHRoaXMsIG1f
c2hhZGluZ0NhY2hlLCBhcmdzLCB0eXBlKTsKIH0KSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0
ei9RdWFydHpTdXBwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L1F1
YXJ0elN1cHBvcnQuaAkocmV2aXNpb24gMTIwODUpCisrKyBrY2FudmFzL2RldmljZS9xdWFydHov
UXVhcnR6U3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMyArMjUsMTQgQEAKIAogCiAj
aW1wb3J0ICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIgLy8gZm9yIGFsbCB0aGUgQ0FQX0JVVFQg
Y29udHN0YW50cywgZXRjLgorY2xhc3MgUmVuZGVyUGF0aDsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIEludFJlY3Q7CiB9CiAKLW5hbWVzcGFjZSBLU1ZHIHsKLSAgICBjbGFzcyBT
VkdSZW5kZXJTdHlsZTsKK25hbWVzcGFjZSBraHRtbCB7CisgICAgY2xhc3MgUmVuZGVyU3R5bGU7
CiB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC00NCw3ICs0NSw3IEBAIENGU3RyaW5nUmVmIENGU3Ry
aW5nRnJvbUNHUGF0aChDR1BhdGhSZWYKIENGU3RyaW5nUmVmIENGU3RyaW5nRnJvbUNHQWZmaW5l
VHJhbnNmb3JtKENHQWZmaW5lVHJhbnNmb3JtIHQpOwogQ0dBZmZpbmVUcmFuc2Zvcm0gQ0dBZmZp
bmVUcmFuc2Zvcm1NYWtlTWFwQmV0d2VlblJlY3RzKENHUmVjdCBzb3VyY2UsIENHUmVjdCBkZXN0
KTsKIAotdm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0
LCBLU1ZHOjpLQ2FudmFzUmVuZGVyaW5nU3R5bGUgKnN0eWxlKTsKK3ZvaWQgYXBwbHlTdHJva2VT
dHlsZVRvQ29udGV4dChDR0NvbnRleHRSZWYgY29udGV4dCwga2h0bWw6OlJlbmRlclN0eWxlICpz
dHlsZSwgY29uc3QgUmVuZGVyUGF0aCAqcmVuZGVyUGF0aCk7CiAKIHN0YXRpYyBpbmxpbmUgQ0dM
aW5lQ2FwIENHTGluZUNhcEZyb21LQyggS0NDYXBTdHlsZSBjYXApIHsKICAgICBpZiAoY2FwID09
IENBUF9CVVRUKQpJbmRleDoga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5jcHAJKHJldmlzaW9u
IDEyMDg1KQorKysga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBO
aWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KICAgICAgICAgICAgICAgICAgIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDYg
ICAgICAgQWxleGFuZGVyIEtlbGxldHQgPGx5cGFub3ZAa2RlLm9yZz4KIAogICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNyw2ICsyOCw4IEBAIEtDYW52YXND
b21tb25BcmdzOjpLQ2FudmFzQ29tbW9uQXJncygpCiB7CiAgICAgbV9wYXRoID0gMDsKICAgICBt
X3N0eWxlID0gMDsKKyAgICBtX3JlbmRlclN0eWxlID0gMDsKKyAgICBtX3JlbmRlclBhdGggPSAw
OwogfQogCiBLQ2FudmFzQ29tbW9uQXJnczo6fktDYW52YXNDb21tb25BcmdzKCkKQEAgLTUzLDYg
KzU2LDI2IEBAIHZvaWQgS0NhbnZhc0NvbW1vbkFyZ3M6OnNldFN0eWxlKEtTVkc6OksKICAgICBt
X3N0eWxlID0gc3R5bGU7CiB9CiAKK2todG1sOjpSZW5kZXJTdHlsZSAqS0NhbnZhc0NvbW1vbkFy
Z3M6OnJlbmRlclN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJTdHlsZTsKK30K
Kwordm9pZCBLQ2FudmFzQ29tbW9uQXJnczo6c2V0UmVuZGVyU3R5bGUoa2h0bWw6OlJlbmRlclN0
eWxlICpyZW5kZXJTdHlsZSkKK3sKKyAgICBtX3JlbmRlclN0eWxlID0gcmVuZGVyU3R5bGU7Cit9
CisKK2NvbnN0IFJlbmRlclBhdGgqIEtDYW52YXNDb21tb25BcmdzOjpyZW5kZXJQYXRoKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJQYXRoOworfQorCit2b2lkIEtDYW52YXNDb21tb25B
cmdzOjpzZXRSZW5kZXJQYXRoKGNvbnN0IFJlbmRlclBhdGggKnJlbmRlclBhdGgpCit7CisgICAg
bV9yZW5kZXJQYXRoID0gcmVuZGVyUGF0aDsKK30KKwogS1JlbmRlcmluZ0RldmljZTo6S1JlbmRl
cmluZ0RldmljZSgpCiB7CiB9CkluZGV4OiBrY2FudmFzL0tDYW52YXNUeXBlcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtjYW52YXMvS0NhbnZhc1R5cGVzLmgJKHJldmlzaW9uIDEyMDg1KQorKysga2NhbnZh
cy9LQ2FudmFzVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsMTIgQEAgbmFtZXNw
YWNlIEtTVkcgewogICAgIGNsYXNzIEtDYW52YXNSZW5kZXJpbmdTdHlsZTsKIH0KIAorbmFtZXNw
YWNlIGtodG1sIHsKKyAgICBjbGFzcyBSZW5kZXJTdHlsZTsKK30KKwogY2xhc3MgS0NhbnZhc1Bh
dGg7CitjbGFzcyBSZW5kZXJQYXRoOwogY2xhc3MgS0NhbnZhc0NvbW1vbkFyZ3MKIHsKIHB1Ymxp
YzoKQEAgLTQyLDEwICs0NywxOCBAQCBwdWJsaWM6CiAKICAgICBLU1ZHOjpLQ2FudmFzUmVuZGVy
aW5nU3R5bGUgKmNhbnZhc1N0eWxlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTdHlsZShLU1ZHOjpL
Q2FudmFzUmVuZGVyaW5nU3R5bGUgKnN0eWxlKTsKKworICAgIGtodG1sOjpSZW5kZXJTdHlsZSAq
cmVuZGVyU3R5bGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFJlbmRlclN0eWxlKGtodG1sOjpSZW5k
ZXJTdHlsZSAqc3R5bGUpOwogICAgIAorICAgIGNvbnN0IFJlbmRlclBhdGgqIHJlbmRlclBhdGgo
KSBjb25zdDsKKyAgICB2b2lkIHNldFJlbmRlclBhdGgoY29uc3QgUmVuZGVyUGF0aCogcGF0aCk7
CisKIHByaXZhdGU6CiAgICAgUmVmUHRyPEtDYW52YXNQYXRoPiBtX3BhdGg7CiAgICAgS1NWRzo6
S0NhbnZhc1JlbmRlcmluZ1N0eWxlICptX3N0eWxlOworICAgIGtodG1sOjpSZW5kZXJTdHlsZSAq
bV9yZW5kZXJTdHlsZTsKKyAgICBjb25zdCBSZW5kZXJQYXRoICptX3JlbmRlclBhdGg7CiB9Owog
CiAjZW5kaWYKSW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlz
aW9uIDEyMDg1KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAK
KzIwMDYtMDEtMTQgIEFsZXhhbmRlciBLZWxsZXR0ICA8bHlwYW5vdkBrZGUub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIG91dCBj
YXNlcyBvZiBLQ2FudmFzUmVuZGVyaW5nU3R5bGUgdXNlZCBhcyBhbiBpbnN0YW5jZSB0bworICAg
ICAgICBzdG9yZSB0aGUgY3VycmVudCBzdHlsZS4gVGVtcG9yYXJpbHkgdW5pZnkgdGhlIGRhdGEg
cGFzc2luZyB2aWEgCisgICAgICAgIEtDYW52YXNDb21tb25BcmdzLgorCisgICAgICAgICoga2Nh
bnZhcy9LQ2FudmFzSXRlbS5jcHA6IFJlbW92aW5nIG92ZXJyaWRlIG9mIHNldFN0eWxlIHVzZWQg
dG8gaG9vaworICAgICAgICBpbnRvIEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6dXBkYXRlU3R5bGUu
CisgICAgICAgIChSZW5kZXJQYXRoOjpjb21tb25BcmdzKTogCisgICAgICAgICoga2NhbnZhcy9L
Q2FudmFzSXRlbS5oOgorICAgICAgICAqIGtjYW52YXMvS0NhbnZhc1RyZWVEZWJ1Zy5jcHA6Cisg
ICAgICAgICh3cml0ZVN0eWxlKToKKyAgICAgICAgKiBrY2FudmFzL0tDYW52YXNUeXBlcy5oOgor
ICAgICAgICAqIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuY3BwOgorICAgICAgICAo
S0NhbnZhc0NvbW1vbkFyZ3M6OktDYW52YXNDb21tb25BcmdzKToKKyAgICAgICAgKEtDYW52YXND
b21tb25BcmdzOjpyZW5kZXJTdHlsZSk6CisgICAgICAgIChLQ2FudmFzQ29tbW9uQXJnczo6c2V0
UmVuZGVyU3R5bGUpOgorICAgICAgICAoS0NhbnZhc0NvbW1vbkFyZ3M6OnJlbmRlclBhdGgpOgor
ICAgICAgICAoS0NhbnZhc0NvbW1vbkFyZ3M6OnNldFJlbmRlclBhdGgpOgorICAgICAgICAqIGtj
YW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzSXRlbVF1YXJ0ei5tbToKKyAgICAgICAgKEtDYW52
YXNJdGVtUXVhcnR6OjpwYWludCk6CisgICAgICAgIChLQ2FudmFzSXRlbVF1YXJ0ejo6YmJveEZv
clBhdGgpOgorICAgICAgICAoS0NhbnZhc0l0ZW1RdWFydHo6OmhpdHNQYXRoKToKKyAgICAgICAg
KiBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFy
dHoubW06CisgICAgICAgIChkcmF3U2hhZGluZ1dpdGhTdHlsZSk6CisgICAgICAgIChLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF1YXJ0ejo6ZHJhdyk6CisgICAgICAgIChLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF1YXJ0ejo6ZHJhdyk6CisgICAgICAgICog
a2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5tbToKKyAg
ICAgICAgKEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXVhcnR6OjpkcmF3KToKKyAgICAgICAg
KEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFydHo6OmRyYXcpOgorICAgICAgICAqIGtj
YW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0Lmg6CisgICAgICAgICoga2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L1F1YXJ0elN1cHBvcnQubW06CisgICAgICAgIChhcHBseVN0cm9rZVN0eWxl
VG9Db250ZXh0KToKKyAgICAgICAgKiBrc3ZnMi9taXNjL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5j
cHA6IFJlbW92ZSBvdmVycmlkZUZpbGxQYWludFNlcnZlcgorICAgICAgICBhbmQgb3ZlcnJpZGVT
dHJva2VQYWludFNlcnZlciBoYWNrcyBhbmQgbWFrZSBtb3N0IG90aGVyIG1ldGhvZHMKKyAgICAg
ICAgc3RhdGljLCByZW1vdmUgbW9zdCBpbnN0YW5jZSB2YXJpYWJsZXMuCisgICAgICAgIChLQ2Fu
dmFzUmVuZGVyaW5nU3R5bGU6OktDYW52YXNSZW5kZXJpbmdTdHlsZSk6CisgICAgICAgIChLQ2Fu
dmFzUmVuZGVyaW5nU3R5bGU6OmlzRmlsbGVkKToKKyAgICAgICAgKEtDYW52YXNSZW5kZXJpbmdT
dHlsZTo6ZmlsbFBhaW50U2VydmVyKToKKyAgICAgICAgKEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6
aXNTdHJva2VkKToKKyAgICAgICAgKEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6c3Ryb2tlUGFpbnRT
ZXJ2ZXIpOgorICAgICAgICAoS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpzdHJva2VQYWludGVyKTog
TWVyZ2VkIHN0cm9rZSBsb2dpYyBpbiBmcm9tCisgICAgICAgIHVwZGF0ZVN0eWxlLgorICAgICAg
ICAoS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpmaWxsUGFpbnRlcik6IE1lcmdlZCBmaWxsIGxvZ2lj
IGluIGZyb20KKyAgICAgICAgdXBkYXRlU3R5bGUuCisgICAgICAgICoga3N2ZzIvbWlzYy9LQ2Fu
dmFzUmVuZGVyaW5nU3R5bGUuaDoKKwogMjAwNi0wMS0xNCAgRGF2aWQgSHlhdHQgIDxoeWF0dEBh
cHBsZS5jb20+CiAKICAgICAgICAgQ29udmVydCBRUmVjdC9RUmVjdEYgLT4gSW50UmVjdC9GbG9h
dFJlY3QuICBTYW1lIGRyaWxsIGFzIHBvaW50CkluZGV4OiBrc3ZnMi9taXNjL0tDYW52YXNSZW5k
ZXJpbmdTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvbWlzYy9LQ2FudmFzUmVuZGVyaW5n
U3R5bGUuY3BwCShyZXZpc2lvbiAxMjA4NSkKKysrIGtzdmcyL21pc2MvS0NhbnZhc1JlbmRlcmlu
Z1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNDIgKzUxLDI3IEBAIHVzaW5nIG5hbWVz
cGFjZSBLU1ZHOwogCiBLQ2FudmFzUmVuZGVyaW5nU3R5bGU6OktDYW52YXNSZW5kZXJpbmdTdHls
ZShjb25zdCBraHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxlKQogewotICAgIG1fc3R5bGUgPSBzdHls
ZTsKLSAgICBtX2ZpbGxQYWludGVyID0gMDsKLSAgICBtX3N0cm9rZVBhaW50ZXIgPSAwOwotICAg
IG1fZmlsbFBhaW50ZXJQYWludFNlcnZlck92ZXJyaWRlID0gMDsKLSAgICBtX3N0cm9rZVBhaW50
ZXJQYWludFNlcnZlck92ZXJyaWRlID0gMDsKIH0KIAogS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjp+
S0NhbnZhc1JlbmRlcmluZ1N0eWxlKCkKIHsKIH0KIAotdm9pZCBLQ2FudmFzUmVuZGVyaW5nU3R5
bGU6Om92ZXJyaWRlRmlsbFBhaW50U2VydmVyKEtSZW5kZXJpbmdQYWludFNlcnZlciAqcHNlcnZl
cikKK2Jvb2wgS1NWR1BhaW50ZXJGYWN0b3J5Ojppc0ZpbGxlZChjb25zdCBraHRtbDo6UmVuZGVy
U3R5bGUgKnN0eWxlKQogewotICAgIEFTU0VSVChwc2VydmVyLT50eXBlKCkgPT0gUFNfSU1BR0Up
OwotICAgIGRlbGV0ZSBtX2ZpbGxQYWludGVyUGFpbnRTZXJ2ZXJPdmVycmlkZTsKLSAgICBtX2Zp
bGxQYWludGVyUGFpbnRTZXJ2ZXJPdmVycmlkZSA9IHBzZXJ2ZXI7Ci19Ci0KLWJvb2wgS0NhbnZh
c1JlbmRlcmluZ1N0eWxlOjppc0ZpbGxlZCgpIGNvbnN0Ci17Ci0gICAgU1ZHUGFpbnRJbXBsICpm
aWxsID0gbV9zdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbFBhaW50KCk7Ci0gICAgaWYgKCFmaWxsKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gKG1fZmlsbFBhaW50ZXJQYWludFNlcnZl
ck92ZXJyaWRlIHx8IChmaWxsICYmIGZpbGwtPnBhaW50VHlwZSgpICE9IFNWR19QQUlOVFRZUEVf
Tk9ORSkpOworICAgIFNWR1BhaW50SW1wbCAqZmlsbCA9IHN0eWxlLT5zdmdTdHlsZSgpLT5maWxs
UGFpbnQoKTsKKyAgICBpZiAoZmlsbCAmJiBmaWxsLT5wYWludFR5cGUoKSA9PSBTVkdfUEFJTlRU
WVBFX05PTkUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
S1JlbmRlcmluZ1BhaW50U2VydmVyICpLQ2FudmFzUmVuZGVyaW5nU3R5bGU6OmZpbGxQYWludFNl
cnZlcihjb25zdCBraHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxlLCBjb25zdCBSZW5kZXJQYXRoKiBp
dGVtKQorS1JlbmRlcmluZ1BhaW50U2VydmVyICpLU1ZHUGFpbnRlckZhY3Rvcnk6OmZpbGxQYWlu
dFNlcnZlcihjb25zdCBraHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxlLCBjb25zdCBSZW5kZXJQYXRo
KiBpdGVtKQogewotICAgIGlmIChtX2ZpbGxQYWludGVyUGFpbnRTZXJ2ZXJPdmVycmlkZSkKLSAg
ICAgICAgcmV0dXJuIG1fZmlsbFBhaW50ZXJQYWludFNlcnZlck92ZXJyaWRlOwotCi0gICAgU1ZH
UGFpbnRJbXBsICpmaWxsID0gbV9zdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbFBhaW50KCk7Ci0KLSAg
ICBpZiAoZmlsbCAmJiBmaWxsLT5wYWludFR5cGUoKSA9PSBTVkdfUEFJTlRUWVBFX05PTkUpCisg
ICAgaWYgKCFpc0ZpbGxlZChzdHlsZSkpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgU1ZHUGFp
bnRJbXBsICpmaWxsID0gc3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxQYWludCgpOworCiAgICAgS1Jl
bmRlcmluZ1BhaW50U2VydmVyICpmaWxsUGFpbnRTZXJ2ZXI7CiAgICAgaWYgKCFmaWxsKSB7CiAg
ICAgICAgIC8vIGluaXRpYWwgdmFsdWUgKGJsYWNrKQpAQCAtMTAyLDcgKzg3LDcgQEAgS1JlbmRl
cmluZ1BhaW50U2VydmVyICpLQ2FudmFzUmVuZGVyaW5nUwogICAgICAgICBmaWxsUGFpbnRTZXJ2
ZXIgPSBRUGFpbnRlcjo6cmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVBhaW50U2VydmVyKEtDUGFp
bnRTZXJ2ZXJUeXBlKFBTX1NPTElEKSk7CiAgICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclNv
bGlkICpmaWxsUGFpbnRTZXJ2ZXJTb2xpZCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdQYWludFNl
cnZlclNvbGlkICo+KGZpbGxQYWludFNlcnZlcik7CiAgICAgICAgIGlmIChmaWxsLT5wYWludFR5
cGUoKSA9PSBTVkdfUEFJTlRUWVBFX0NVUlJFTlRDT0xPUikKLSAgICAgICAgICAgIGZpbGxQYWlu
dFNlcnZlclNvbGlkLT5zZXRDb2xvcihtX3N0eWxlLT5jb2xvcigpKTsKKyAgICAgICAgICAgIGZp
bGxQYWludFNlcnZlclNvbGlkLT5zZXRDb2xvcihzdHlsZS0+Y29sb3IoKSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGZpbGxQYWludFNlcnZlclNvbGlkLT5zZXRDb2xvcihmaWxsLT5jb2xv
cigpKTsKICAgICB9CkBAIC0xMTAsMzAgKzk1LDIyIEBAIEtSZW5kZXJpbmdQYWludFNlcnZlciAq
S0NhbnZhc1JlbmRlcmluZ1MKICAgICByZXR1cm4gZmlsbFBhaW50U2VydmVyOwogfQogCi12b2lk
IEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6b3ZlcnJpZGVTdHJva2VQYWludFNlcnZlcihLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXIgKnBzZXJ2ZXIpCi17Ci0gICAgc3Ryb2tlUGFpbnRlcigpLT5zZXREaXJ0
eSgpOwotICAgIEFTU0VSVChwc2VydmVyLT50eXBlKCkgPT0gUFNfSU1BR0UpOwotICAgIGRlbGV0
ZSBtX3N0cm9rZVBhaW50ZXJQYWludFNlcnZlck92ZXJyaWRlOwotICAgIG1fc3Ryb2tlUGFpbnRl
clBhaW50U2VydmVyT3ZlcnJpZGUgPSBwc2VydmVyOwotfQogCi1ib29sIEtDYW52YXNSZW5kZXJp
bmdTdHlsZTo6aXNTdHJva2VkKCkgY29uc3QKK2Jvb2wgS1NWR1BhaW50ZXJGYWN0b3J5Ojppc1N0
cm9rZWQoY29uc3Qga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSkKIHsKLSAgICBTVkdQYWludElt
cGwgKnN0cm9rZSA9IG1fc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZVBhaW50KCk7Ci0gICAgcmV0
dXJuIChzdHJva2UgJiYgc3Ryb2tlLT5wYWludFR5cGUoKSAhPSBTVkdfUEFJTlRUWVBFX05PTkUp
OworICAgIFNWR1BhaW50SW1wbCAqc3Ryb2tlID0gc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZVBh
aW50KCk7CisgICAgaWYgKCFzdHJva2UgfHwgc3Ryb2tlLT5wYWludFR5cGUoKSA9PSBTVkdfUEFJ
TlRUWVBFX05PTkUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotS1JlbmRlcmluZ1BhaW50U2VydmVyICpLQ2FudmFzUmVuZGVyaW5nU3R5bGU6OnN0cm9rZVBh
aW50U2VydmVyKGNvbnN0IGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUsIGNvbnN0IFJlbmRlclBh
dGgqIGl0ZW0pCitLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKktTVkdQYWludGVyRmFjdG9yeTo6c3Ry
b2tlUGFpbnRTZXJ2ZXIoY29uc3Qga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSwgY29uc3QgUmVu
ZGVyUGF0aCogaXRlbSkKIHsKLSAgICBpZiAobV9zdHJva2VQYWludGVyUGFpbnRTZXJ2ZXJPdmVy
cmlkZSkgCi0gICAgICAgIHJldHVybiBtX3N0cm9rZVBhaW50ZXJQYWludFNlcnZlck92ZXJyaWRl
OwotCi0gICAgU1ZHUGFpbnRJbXBsICpzdHJva2UgPSBtX3N0eWxlLT5zdmdTdHlsZSgpLT5zdHJv
a2VQYWludCgpOwotCi0gICAgaWYgKCFzdHJva2UgfHwgc3Ryb2tlLT5wYWludFR5cGUoKSA9PSBT
VkdfUEFJTlRUWVBFX05PTkUpCisgICAgaWYgKCFpc1N0cm9rZWQoc3R5bGUpKQogICAgICAgICBy
ZXR1cm4gMDsKIAorICAgIFNWR1BhaW50SW1wbCAqc3Ryb2tlID0gc3R5bGUtPnN2Z1N0eWxlKCkt
PnN0cm9rZVBhaW50KCk7CisKICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnN0cm9rZVBhaW50
U2VydmVyOwogICAgIGlmIChzdHJva2UgJiYgc3Ryb2tlLT5wYWludFR5cGUoKSA9PSBTVkdfUEFJ
TlRUWVBFX1VSSSkgewogICAgICAgICBLRE9NOjpET01TdHJpbmcgaWQoc3Ryb2tlLT51cmkoKSk7
CkBAIC0xNDQsNyArMTIxLDcgQEAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpLQ2FudmFzUmVuZGVy
aW5nUwogICAgICAgICBzdHJva2VQYWludFNlcnZlciA9IFFQYWludGVyOjpyZW5kZXJpbmdEZXZp
Y2UoKS0+Y3JlYXRlUGFpbnRTZXJ2ZXIoS0NQYWludFNlcnZlclR5cGUoUFNfU09MSUQpKTsKICAg
ICAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQgKnN0cm9rZVBhaW50U2VydmVyU29saWQg
PSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZCAqPihzdHJva2VQYWludFNl
cnZlcik7CiAgICAgICAgIGlmIChzdHJva2UtPnBhaW50VHlwZSgpID09IFNWR19QQUlOVFRZUEVf
Q1VSUkVOVENPTE9SKQotICAgICAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXJTb2xpZC0+c2V0Q29s
b3IobV9zdHlsZS0+Y29sb3IoKSk7CisgICAgICAgICAgICBzdHJva2VQYWludFNlcnZlclNvbGlk
LT5zZXRDb2xvcihzdHlsZS0+Y29sb3IoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHN0
cm9rZVBhaW50U2VydmVyU29saWQtPnNldENvbG9yKHN0cm9rZS0+Y29sb3IoKSk7CiAgICAgfQpA
QCAtMTUyLDQzICsxMjksNyBAQCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKktDYW52YXNSZW5kZXJp
bmdTCiAgICAgcmV0dXJuIHN0cm9rZVBhaW50U2VydmVyOwogfQogCi12b2lkIEtDYW52YXNSZW5k
ZXJpbmdTdHlsZTo6dXBkYXRlU3R5bGUoY29uc3Qga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSwg
UmVuZGVyUGF0aCAqaXRlbSkKLXsKLSAgICBtX3N0eWxlID0gc3R5bGU7Ci0gICAgCi0gICAgZmls
bFBhaW50ZXIoKS0+c2V0RmlsbFJ1bGUobV9zdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSA9
PSBXUl9OT05aRVJPID8gUlVMRV9OT05aRVJPIDogUlVMRV9FVkVOT0REKTsKLSAgICBmaWxsUGFp
bnRlcigpLT5zZXRPcGFjaXR5KG1fc3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxPcGFjaXR5KCkpOwot
Ci0gICAgc3Ryb2tlUGFpbnRlcigpLT5zZXRPcGFjaXR5KG1fc3R5bGUtPnN2Z1N0eWxlKCktPnN0
cm9rZU9wYWNpdHkoKSk7Ci0gICAgc3Ryb2tlUGFpbnRlcigpLT5zZXRTdHJva2VXaWR0aChLQ2Fu
dmFzUmVuZGVyaW5nU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKGl0ZW0sIG1fc3R5bGUtPnN2
Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCksIDEuMCkpOwotCi0gICAgS0RPTTo6Q1NTVmFsdWVMaXN0
SW1wbCAqZGFzaGVzID0gbV9zdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaEFycmF5KCk7Ci0g
ICAgaWYgKGRhc2hlcykgewotICAgICAgICBLRE9NOjpDU1NQcmltaXRpdmVWYWx1ZUltcGwgKmRh
c2ggPSAwOwotICAgICAgICBRM1BhaW50RGV2aWNlTWV0cmljcyAqcGFpbnREZXZpY2VNZXRyaWNz
ID0gMDsKLQotICAgICAgICBTVkdFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PFNW
R0VsZW1lbnRJbXBsICo+KGl0ZW0tPmVsZW1lbnQoKSk7Ci0gICAgICAgIGlmIChlbGVtZW50ICYm
IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHBhaW50RGV2aWNlTWV0cmlj
cyA9IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+cGFpbnREZXZpY2VNZXRyaWNzKCk7Ci0KLSAg
ICAgICAgS0NEYXNoQXJyYXkgYXJyYXk7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuID0gZGFz
aGVzLT5sZW5ndGgoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgbGVu
OyBpKyspIHsKLSAgICAgICAgICAgIGRhc2ggPSBzdGF0aWNfY2FzdDxLRE9NOjpDU1NQcmltaXRp
dmVWYWx1ZUltcGwgKj4oZGFzaGVzLT5pdGVtKGkpKTsKLSAgICAgICAgICAgIGlmIChkYXNoKQot
ICAgICAgICAgICAgICAgIGFycmF5LmFwcGVuZCgoZmxvYXQpIGRhc2gtPmNvbXB1dGVMZW5ndGhG
bG9hdChjb25zdF9jYXN0PGtodG1sOjpSZW5kZXJTdHlsZSAqPihtX3N0eWxlKSwgcGFpbnREZXZp
Y2VNZXRyaWNzKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdHJva2VQYWludGVyKCktPnNldERh
c2hBcnJheShhcnJheSk7Ci0gICAgICAgIHN0cm9rZVBhaW50ZXIoKS0+c2V0RGFzaE9mZnNldChL
Q2FudmFzUmVuZGVyaW5nU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKGl0ZW0sIG1fc3R5bGUt
PnN2Z1N0eWxlKCktPnN0cm9rZURhc2hPZmZzZXQoKSwgMC4wKSk7Ci0gICAgfQotCi0gICAgc3Ry
b2tlUGFpbnRlcigpLT5zZXRTdHJva2VNaXRlckxpbWl0KG1fc3R5bGUtPnN2Z1N0eWxlKCktPnN0
cm9rZU1pdGVyTGltaXQoKSk7Ci0gICAgc3Ryb2tlUGFpbnRlcigpLT5zZXRTdHJva2VDYXBTdHls
ZSgoS0NDYXBTdHlsZSkgbV9zdHlsZS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSk7Ci0gICAgc3Ry
b2tlUGFpbnRlcigpLT5zZXRTdHJva2VKb2luU3R5bGUoKEtDSm9pblN0eWxlKSBtX3N0eWxlLT5z
dmdTdHlsZSgpLT5qb2luU3R5bGUoKSk7Ci19Ci0KLWRvdWJsZSBLQ2FudmFzUmVuZGVyaW5nU3R5
bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKGNvbnN0IFJlbmRlclBhdGggKml0ZW0sIEtET006OkNT
U1ZhbHVlSW1wbCAqdmFsdWUsIGRvdWJsZSBkZWZhdWx0VmFsdWUpCitkb3VibGUgS1NWR1BhaW50
ZXJGYWN0b3J5Ojpjc3NQcmltaXRpdmVUb0xlbmd0aChjb25zdCBSZW5kZXJQYXRoICppdGVtLCBL
RE9NOjpDU1NWYWx1ZUltcGwgKnZhbHVlLCBkb3VibGUgZGVmYXVsdFZhbHVlKQogewogICAgIEtE
T006OkNTU1ByaW1pdGl2ZVZhbHVlSW1wbCAqcHJpbWl0aXZlID0gc3RhdGljX2Nhc3Q8S0RPTTo6
Q1NTUHJpbWl0aXZlVmFsdWVJbXBsICo+KHZhbHVlKTsKIApAQCAtMjE1LDIwICsxNTYsNDkgQEAg
ZG91YmxlIEtDYW52YXNSZW5kZXJpbmdTdHlsZTo6Y3NzUHJpbWl0aQogICAgIHJldHVybiBwcmlt
aXRpdmUtPmNvbXB1dGVMZW5ndGhGbG9hdChjb25zdF9jYXN0PGtodG1sOjpSZW5kZXJTdHlsZSAq
PihpdGVtLT5zdHlsZSgpKSwgcGFpbnREZXZpY2VNZXRyaWNzKTsKIH0KIAotS1JlbmRlcmluZ1N0
cm9rZVBhaW50ZXIgKktDYW52YXNSZW5kZXJpbmdTdHlsZTo6c3Ryb2tlUGFpbnRlcigpCitLUmVu
ZGVyaW5nU3Ryb2tlUGFpbnRlciBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50ZXIoY29u
c3Qga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSwgY29uc3QgUmVuZGVyUGF0aCAqaXRlbSkKIHsK
LSAgICBpZighbV9zdHJva2VQYWludGVyKQotICAgICAgICBtX3N0cm9rZVBhaW50ZXIgPSBuZXcg
S1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIoKTsKKyAgICBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlciBz
dHJva2VQYWludGVyOworCisgICAgc3Ryb2tlUGFpbnRlci5zZXRPcGFjaXR5KHN0eWxlLT5zdmdT
dHlsZSgpLT5zdHJva2VPcGFjaXR5KCkpOworICAgIHN0cm9rZVBhaW50ZXIuc2V0U3Ryb2tlV2lk
dGgoS1NWR1BhaW50ZXJGYWN0b3J5Ojpjc3NQcmltaXRpdmVUb0xlbmd0aChpdGVtLCBzdHlsZS0+
c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgoKSwgMS4wKSk7CiAKLSAgICByZXR1cm4gbV9zdHJva2VQ
YWludGVyOworICAgIEtET006OkNTU1ZhbHVlTGlzdEltcGwgKmRhc2hlcyA9IHN0eWxlLT5zdmdT
dHlsZSgpLT5zdHJva2VEYXNoQXJyYXkoKTsKKyAgICBpZiAoZGFzaGVzKSB7CisgICAgICAgIEtE
T006OkNTU1ByaW1pdGl2ZVZhbHVlSW1wbCAqZGFzaCA9IDA7CisgICAgICAgIFEzUGFpbnREZXZp
Y2VNZXRyaWNzICpwYWludERldmljZU1ldHJpY3MgPSAwOworCisgICAgICAgIFNWR0VsZW1lbnRJ
bXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudEltcGwgKj4oaXRlbS0+ZWxlbWVu
dCgpKTsKKyAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+b3duZXJEb2N1bWVudCgpKQor
ICAgICAgICAgICAgcGFpbnREZXZpY2VNZXRyaWNzID0gZWxlbWVudC0+b3duZXJEb2N1bWVudCgp
LT5wYWludERldmljZU1ldHJpY3MoKTsKKworICAgICAgICBLQ0Rhc2hBcnJheSBhcnJheTsKKyAg
ICAgICAgdW5zaWduZWQgbG9uZyBsZW4gPSBkYXNoZXMtPmxlbmd0aCgpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgZGFzaCA9
IHN0YXRpY19jYXN0PEtET006OkNTU1ByaW1pdGl2ZVZhbHVlSW1wbCAqPihkYXNoZXMtPml0ZW0o
aSkpOworICAgICAgICAgICAgaWYgKGRhc2gpCisgICAgICAgICAgICAgICAgYXJyYXkuYXBwZW5k
KChmbG9hdCkgZGFzaC0+Y29tcHV0ZUxlbmd0aEZsb2F0KGNvbnN0X2Nhc3Q8a2h0bWw6OlJlbmRl
clN0eWxlICo+KHN0eWxlKSwgcGFpbnREZXZpY2VNZXRyaWNzKSk7CisgICAgICAgIH0KKworICAg
ICAgICBzdHJva2VQYWludGVyLnNldERhc2hBcnJheShhcnJheSk7CisgICAgICAgIHN0cm9rZVBh
aW50ZXIuc2V0RGFzaE9mZnNldChLU1ZHUGFpbnRlckZhY3Rvcnk6OmNzc1ByaW1pdGl2ZVRvTGVu
Z3RoKGl0ZW0sIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VEYXNoT2Zmc2V0KCksIDAuMCkpOwor
ICAgIH0KKworICAgIHN0cm9rZVBhaW50ZXIuc2V0U3Ryb2tlTWl0ZXJMaW1pdChzdHlsZS0+c3Zn
U3R5bGUoKS0+c3Ryb2tlTWl0ZXJMaW1pdCgpKTsKKyAgICBzdHJva2VQYWludGVyLnNldFN0cm9r
ZUNhcFN0eWxlKChLQ0NhcFN0eWxlKSBzdHlsZS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSk7Cisg
ICAgc3Ryb2tlUGFpbnRlci5zZXRTdHJva2VKb2luU3R5bGUoKEtDSm9pblN0eWxlKSBzdHlsZS0+
c3ZnU3R5bGUoKS0+am9pblN0eWxlKCkpOworCisgICAgcmV0dXJuIHN0cm9rZVBhaW50ZXI7CiB9
CiAKLUtSZW5kZXJpbmdGaWxsUGFpbnRlciAqS0NhbnZhc1JlbmRlcmluZ1N0eWxlOjpmaWxsUGFp
bnRlcigpCitLUmVuZGVyaW5nRmlsbFBhaW50ZXIgS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFp
bnRlcihjb25zdCBraHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxlLCBjb25zdCBSZW5kZXJQYXRoICpp
dGVtKQogewotICAgIGlmKCFtX2ZpbGxQYWludGVyKQotICAgICAgICBtX2ZpbGxQYWludGVyID0g
bmV3IEtSZW5kZXJpbmdGaWxsUGFpbnRlcigpOworICAgIEtSZW5kZXJpbmdGaWxsUGFpbnRlciBm
aWxsUGFpbnRlcjsKICAgICAKLSAgICByZXR1cm4gbV9maWxsUGFpbnRlcjsKKyAgICBmaWxsUGFp
bnRlci5zZXRGaWxsUnVsZShzdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSA9PSBXUl9OT05a
RVJPID8gUlVMRV9OT05aRVJPIDogUlVMRV9FVkVOT0REKTsKKyAgICBmaWxsUGFpbnRlci5zZXRP
cGFjaXR5KHN0eWxlLT5zdmdTdHlsZSgpLT5maWxsT3BhY2l0eSgpKTsKKworICAgIHJldHVybiBm
aWxsUGFpbnRlcjsKIH0KIAogLy8gdmltOnRzPTQ6bm9ldApJbmRleDoga3N2ZzIvbWlzYy9LQ2Fu
dmFzUmVuZGVyaW5nU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9taXNjL0tDYW52YXNSZW5k
ZXJpbmdTdHlsZS5oCShyZXZpc2lvbiAxMjA4NSkKKysrIGtzdmcyL21pc2MvS0NhbnZhc1JlbmRl
cmluZ1N0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICAgIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4K
ICAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAg
ICAgICAgICAgICAgICAgIDIwMDYgICAgICAgQWxleGFuZGVyIEtlbGxldHQgPGx5cGFub3ZAa2Rl
Lm9yZz4KIAogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC02
NywzOCArNjgsMjMgQEAgbmFtZXNwYWNlIEtTVkcKICAgICBwdWJsaWM6CiAgICAgICAgIEtDYW52
YXNSZW5kZXJpbmdTdHlsZShjb25zdCBraHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxlKTsKICAgICAg
ICAgfktDYW52YXNSZW5kZXJpbmdTdHlsZSgpOwotCi0gICAgICAgIHZvaWQgdXBkYXRlU3R5bGUo
Y29uc3Qga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSwgUmVuZGVyUGF0aCAqaXRlbSk7Ci0KLSAg
ICAgICAgLy8gU3Ryb2tlIChha2EgUGVuKSBwcm9wZXJ0aWVzCi0gICAgICAgIGJvb2wgaXNTdHJv
a2VkKCkgY29uc3Q7Ci0KLSAgICAgICAgS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIgKnN0cm9rZVBh
aW50ZXIoKTsKLSAgICAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpzdHJva2VQYWludFNlcnZl
cihjb25zdCBraHRtbDo6UmVuZGVyU3R5bGUgKnN0eWxlLCBjb25zdCBSZW5kZXJQYXRoKik7Ci0g
ICAgICAgIHZvaWQgb3ZlcnJpZGVTdHJva2VQYWludFNlcnZlcihLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXIgKnBzZXJ2ZXIpOwotCi0gICAgICAgIHN0YXRpYyBkb3VibGUgY3NzUHJpbWl0aXZlVG9MZW5n
dGgoY29uc3QgUmVuZGVyUGF0aCAqaXRlbSwgS0RPTTo6Q1NTVmFsdWVJbXBsICp2YWx1ZSwgZG91
YmxlIGRlZmF1bHRWYWx1ZSA9IDAuMCk7Ci0KLSAgICAgICAgLy8gRmlsbCAoYWthIEJydXNoKSBw
cm9wZXJ0aWVzCi0gICAgICAgIGJvb2wgaXNGaWxsZWQoKSBjb25zdDsKLQotICAgICAgICBLUmVu
ZGVyaW5nRmlsbFBhaW50ZXIgKmZpbGxQYWludGVyKCk7Ci0gICAgICAgIEtSZW5kZXJpbmdQYWlu
dFNlcnZlciAqZmlsbFBhaW50U2VydmVyKGNvbnN0IGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUs
IGNvbnN0IFJlbmRlclBhdGgqKTsKLSAgICAgICAgdm9pZCBvdmVycmlkZUZpbGxQYWludFNlcnZl
cihLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnBzZXJ2ZXIpOwotCi0gICAgICAgIGNvbnN0IGtodG1s
OjpSZW5kZXJTdHlsZSAqcmVuZGVyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9Ci0g
ICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIEtDYW52YXNSZW5kZXJpbmdTdHlsZShjb25z
dCBLQ2FudmFzUmVuZGVyaW5nU3R5bGUgJm90aGVyKTsKKyAgICB9OworCisgICAgY2xhc3MgS1NW
R1BhaW50ZXJGYWN0b3J5CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEtSZW5k
ZXJpbmdGaWxsUGFpbnRlciBmaWxsUGFpbnRlcihjb25zdCBraHRtbDo6UmVuZGVyU3R5bGUgKnN0
eWxlLCBjb25zdCBSZW5kZXJQYXRoICppdGVtKTsKKyAgICAgICAgc3RhdGljIEtSZW5kZXJpbmdT
dHJva2VQYWludGVyIHN0cm9rZVBhaW50ZXIoY29uc3Qga2h0bWw6OlJlbmRlclN0eWxlICpzdHls
ZSwgY29uc3QgUmVuZGVyUGF0aCAqaXRlbSk7CiAKLSAgICAgICAgY29uc3Qga2h0bWw6OlJlbmRl
clN0eWxlICptX3N0eWxlOworICAgICAgICBzdGF0aWMgYm9vbCBpc1N0cm9rZWQoY29uc3Qga2h0
bWw6OlJlbmRlclN0eWxlICpzdHlsZSk7CisgICAgICAgIHN0YXRpYyBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXIgKnN0cm9rZVBhaW50U2VydmVyKGNvbnN0IGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUs
IGNvbnN0IFJlbmRlclBhdGgqKTsKIAotICAgICAgICAvLyBLQ2FudmFzIHN0dWZmCi0gICAgICAg
IEtSZW5kZXJpbmdGaWxsUGFpbnRlciAqbV9maWxsUGFpbnRlcjsKLSAgICAgICAgS1JlbmRlcmlu
Z1N0cm9rZVBhaW50ZXIgKm1fc3Ryb2tlUGFpbnRlcjsKKyAgICAgICAgc3RhdGljIGJvb2wgaXNG
aWxsZWQoY29uc3Qga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSk7CisgICAgICAgIHN0YXRpYyBL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKmZpbGxQYWludFNlcnZlcihjb25zdCBraHRtbDo6UmVuZGVy
U3R5bGUgKnN0eWxlLCBjb25zdCBSZW5kZXJQYXRoKik7CiAKLSAgICAgICAgS1JlbmRlcmluZ1Bh
aW50U2VydmVyICptX2ZpbGxQYWludGVyUGFpbnRTZXJ2ZXJPdmVycmlkZTsKLSAgICAgICAgS1Jl
bmRlcmluZ1BhaW50U2VydmVyICptX3N0cm9rZVBhaW50ZXJQYWludFNlcnZlck92ZXJyaWRlOwor
ICAgICAgICBzdGF0aWMgZG91YmxlIGNzc1ByaW1pdGl2ZVRvTGVuZ3RoKGNvbnN0IFJlbmRlclBh
dGggKml0ZW0sIEtET006OkNTU1ZhbHVlSW1wbCAqdmFsdWUsIGRvdWJsZSBkZWZhdWx0VmFsdWUg
PSAwLjApOwogICAgIH07CiB9OwogCg==
</data>
<flag name="review"
          id="1268"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>