<?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>10470</bug_id>
          
          <creation_ts>2006-08-17 13:25:50 -0700</creation_ts>
          <short_desc>The Qt platform needs a KCanvas device</short_desc>
          <delta_ts>2006-08-18 12:07:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>420+</version>
          <rep_platform>Other</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>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>52868</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-17 13:25:50 -0700</bug_when>
    <thetext>Just like quartz/ has it&apos;s own kcanvas device, Qt also needs one.

BEWARE: This is meant as a temporary solution. Everything should
be properly integrated into GraphicsContext &amp; friends and kcanvas
should die. The purpose is that I can also work on Linux to do
the kcanvas removal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52870</commentid>
    <comment_count>1</comment_count>
      <attachid>10107</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-17 13:30:17 -0700</bug_when>
    <thetext>Created attachment 10107
Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52903</commentid>
    <comment_count>2</comment_count>
      <attachid>10107</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-18 03:11:09 -0700</bug_when>
    <thetext>Comment on attachment 10107
Initial patch

Everything in WebKit should be one-class-per-file.  I made a mistake in not doing that when I wrote the original KCanvas Quartz code.  I&apos;ve never gone back to fix it because it&apos;s already slated for death.  In the same sense, it&apos;s OK that these are not one-class-per-file as they&apos;re temporary, but you should just be aware.

Seems silly to compute the same thing twice:

+        x1 = double(bbox.left()) + (double(gradientStart().x() / 100.0) * double(bbox.width()));
+        y1 = double(bbox.top()) + (double(gradientStart().y() / 100.0) * double(bbox.height()));
+        x2 = double(bbox.left()) + (double(gradientEnd().x() / 100.0)  * double(bbox.width()));
+        y2 = double(bbox.top()) + (double(gradientEnd().y() / 100.0) * double(bbox.height()));

As you&apos;re already aware, much of this code violates the WebKit style guidelines.  If you end up having to make other changes, you could consider fixing some of it.

if(, { } on separate lines, * in the wrong place, are all examples of such.

I have a gut feeling that much, much more of this code could be pushed into a more central cross-platform place.

the boundingbox mode related calculations are one example.

The quartz code is going to be redesigned to fill and stroke at once, for a large performance boost on the Mac.  You should continue to keep that in mind as you work with the Qt/cairo code.

Many of these header methods do not need named arguments:

+    virtual void draw(KRenderingDeviceContext *context, const RenderPath *path, KCPaintTargetType type) const;
+    virtual bool setup(KRenderingDeviceContext *context, const RenderObject *object, KCPaintTargetType type) const;
+    virtual void teardown(KRenderingDeviceContext *context, const RenderObject *object, KCPaintTargetType type) const;

KCanvasPath makes me cringe.  I needs to be folded into Path, so as to avoid the virtual method dispatch overhead.

Generally we don&apos;t leave things like this in:
+#if 1

Things that don&apos;t need {} can omit them.

+                case QPainterPath::LineToElement:
+                {
+                    newPath.lineTo(QPointF(cur.x, cur.y) * transform);
+                    break;
+                }

I&apos;m not actually sure what our style guidelines say about that though, so it&apos;s your call.


I&apos;m not sure you want this:

+        //if (!CGContextIsPathEmpty(cgContext)) {

Also, that file needs apple&apos;s copyright, since clearly parts of the code were copied from KCanvas Quartz


As I believe you&apos;re already aware, we generally use a slightly different form for constructor definitions:
+KRenderingDeviceContextQt::KRenderingDeviceContextQt(QPainter *painter) : m_painter(painter), m_path()

ask me on IRC if you need more info.

Overall the patch looks fine.  Since I think you have another one you&apos;re about to post, I will remove the review flag on this instead of r+&apos;ing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52904</commentid>
    <comment_count>3</comment_count>
      <attachid>10107</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-18 03:11:47 -0700</bug_when>
    <thetext>Comment on attachment 10107
Initial patch

Actually, given the small copyright issues, I guess I should officially r- it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52916</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-18 05:19:19 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 10107 [edit])
&gt; Actually, given the small copyright issues, I guess I should officially r- it.
&gt; 

Hm, I can&apos;t seem to find the copyright violation. You pasted that one-line
snippet from KCanvasClipperQt, which has Apple copyright! Probably you
missed that...

Just redoing a patch which follows WebKit coding style.
Thanks for all the review work, Eric!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52917</commentid>
    <comment_count>5</comment_count>
      <attachid>10124</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-18 05:34:09 -0700</bug_when>
    <thetext>Created attachment 10124
Corrected patch

Respect WebKit coding style guide.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52934</commentid>
    <comment_count>6</comment_count>
      <attachid>10124</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-18 11:18:09 -0700</bug_when>
    <thetext>Comment on attachment 10124
Corrected patch

This looks totally fine.

It looks like you misread the style guidelines and added {} around one-line ifs. :(  We&apos;ll have to make sure we add an example to the guide.

&quot;If/else statements — as above, but if there is an else clause, the close brace should go on the same line as the else. Also, one-line if or else clauses should not get braces.&quot;

Looks plenty good to land though.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10107</attachid>
            <date>2006-08-17 13:30:17 -0700</date>
            <delta_ts>2006-08-18 05:34:09 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>kcanvas-device-qt.diff</filename>
            <type>text/plain</type>
            <size>60489</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiAxNTkyNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDMgKzEsOTcgQEAKKzIwMDYtMDgtMTggIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGaXhlczogaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDQ3MAorICAgICAgICBUaGUgUXQgcGxhdGZvcm0gbmVlZHMgYSBLQ2FudmFzIGRldmljZS4K
KworICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F0L0tDYW52YXNDbGlwcGVyUXQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OktDYW52YXNDbGlwcGVyUXQ6OmFwcGx5Q2xpcCk6CisgICAg
ICAgICoga2NhbnZhcy9kZXZpY2UvcXQvS0NhbnZhc0NsaXBwZXJRdC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OktDYW52YXNDbGlwcGVyUXQ6OktDYW52YXNDbGlwcGVyUXQpOgorICAgICAg
ICAqIGtjYW52YXMvZGV2aWNlL3F0L0tDYW52YXNQYXRoUXQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OktDYW52YXNQYXRoUXQ6OktDYW52YXNQYXRoUXQpOgorICAgICAgICAoV2ViQ29y
ZTo6S0NhbnZhc1BhdGhRdDo6fktDYW52YXNQYXRoUXQpOgorICAgICAgICAoV2ViQ29yZTo6S0Nh
bnZhc1BhdGhRdDo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpLQ2FudmFzUGF0aFF0Ojpt
b3ZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6S0NhbnZhc1BhdGhRdDo6bGluZVRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OktDYW52YXNQYXRoUXQ6OmN1cnZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6
S0NhbnZhc1BhdGhRdDo6Y2xvc2VTdWJwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OktDYW52YXNQ
YXRoUXQ6OmJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OktDYW52YXNQYXRoUXQ6OnN0
cm9rZUJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OktDYW52YXNQYXRoUXQ6OnN0cm9r
ZUNvbnRhaW5zUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6S0NhbnZhc1BhdGhRdDo6Y29udGFp
bnNQb2ludCk6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXQvS0NhbnZhc1BhdGhRdC5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OktDYW52YXNQYXRoUXQ6OnF0UGF0aCk6CisgICAgICAg
ICoga2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ0RldmljZVF0LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dFF0KToKKyAgICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQ6
On5LUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0KToKKyAgICAgICAgKFdlYkNvcmU6OktSZW5kZXJp
bmdEZXZpY2VDb250ZXh0UXQ6OmNvbmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dFF0OjpjdG0pOgorICAgICAgICAoV2ViQ29yZTo6S1JlbmRlcmluZ0Rl
dmljZUNvbnRleHRRdDo6bWFwRnJvbVZpc3VhbCk6CisgICAgICAgIChXZWJDb3JlOjpLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dFF0OjptYXBUb1Zpc3VhbCk6CisgICAgICAgIChXZWJDb3JlOjpLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpjbGVhclBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6S1Jl
bmRlcmluZ0RldmljZUNvbnRleHRRdDo6YWRkUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpjcmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdDo6cGFpbnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpwYXRoQkJveCk6CisgICAgICAgIChX
ZWJDb3JlOjpLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpzZXRGaWxsUnVsZSk6CisgICAgICAg
IChXZWJDb3JlOjpLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpmaWxsUGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpzdHJva2VQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OktSZW5kZXJpbmdEZXZpY2VRdDo6S1JlbmRlcmluZ0RldmljZVF0KToKKyAg
ICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdEZXZpY2VRdDo6fktSZW5kZXJpbmdEZXZpY2VRdCk6
CisgICAgICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nRGV2aWNlUXQ6OnBvcENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6S1JlbmRlcmluZ0RldmljZVF0OjpwdXNoQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpLUmVuZGVyaW5nRGV2aWNlUXQ6OnF0Q29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpLUmVuZGVyaW5nRGV2aWNlUXQ6OmNvbnRleHRGb3JJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpLUmVuZGVyaW5nRGV2aWNlUXQ6OnN0cmluZ0ZvclBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6S1JlbmRlcmluZ0RldmljZVF0OjpjcmVhdGVSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpLUmVuZGVyaW5nRGV2aWNlUXQ6OmNyZWF0ZVBhaW50U2VydmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OktSZW5kZXJpbmdEZXZpY2VRdDo6Y3JlYXRlRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OktSZW5kZXJpbmdEZXZpY2VRdDo6Y3JlYXRlUGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpLUmVuZGVyaW5nRGV2aWNlUXQ6OmNyZWF0ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6cmVu
ZGVyaW5nRGV2aWNlKToKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nRGV2
aWNlUXQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nRGV2aWNlUXQ6Omlz
QnVmZmVyZWQpOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNl
cnZlckdyYWRpZW50UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZpbGxfY29sb3Jf
YXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6S1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3Jh
ZGllbnRRdDo6S1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRRdCk6CisgICAgICAg
IChXZWJDb3JlOjpLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF0OjpyZW5kZXJQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRp
ZW50UXQ6OnNldHVwKToKKyAgICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdQYWludFNlcnZlckxp
bmVhckdyYWRpZW50UXQ6OnRlYXJkb3duKToKKyAgICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdQ
YWludFNlcnZlckxpbmVhckdyYWRpZW50UXQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6S1Jl
bmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdDo6S1JlbmRlcmluZ1BhaW50U2VydmVy
UmFkaWFsR3JhZGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJSYWRpYWxHcmFkaWVudFF0OjpzZXR1cCk6CisgICAgICAgIChXZWJDb3JlOjpLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF0OjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OktS
ZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50UXQ6OnRlYXJkb3duKToKKyAgICAgICAg
KFdlYkNvcmU6OktSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50UXQ6OnJlbmRlclBh
dGgpOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50UXQuaDogQWRkZWQuCisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmlu
Z1BhaW50U2VydmVyUGF0dGVyblF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQ6OktSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5R
dCk6CisgICAgICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQ6On5L
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQpOgorICAgICAgICAoV2ViQ29yZTo6S1JlbmRl
cmluZ1BhaW50U2VydmVyUGF0dGVyblF0OjpyZW5kZXJQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OktSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdDo6c2V0dXApOgorICAgICAgICAoV2ViQ29y
ZTo6S1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF0Ojp0ZWFyZG93bik6CisgICAgICAgIChX
ZWJDb3JlOjpLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQ6OmRyYXcpOgorICAgICAgICAq
IGtjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6S1JlbmRlcmluZ1BhaW50U2VydmVyUXQ6OktS
ZW5kZXJpbmdQYWludFNlcnZlclF0KToKKyAgICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdQYWlu
dFNlcnZlclF0Ojp+S1JlbmRlcmluZ1BhaW50U2VydmVyUXQpOgorICAgICAgICAoV2ViQ29yZTo6
S1JlbmRlcmluZ1BhaW50U2VydmVyUXQ6OnNldFBlblByb3BlcnRpZXMpOgorICAgICAgICAqIGtj
YW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlclF0Lmg6IEFkZGVkLgorICAgICAg
ICAqIGtjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQ6OktS
ZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQpOgorICAgICAgICAoV2ViQ29yZTo6S1JlbmRlcmlu
Z1BhaW50U2VydmVyU29saWRRdDo6fktSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQpOgorICAg
ICAgICAoV2ViQ29yZTo6S1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdDo6ZHJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF0OjpzZXR1cCk6CisgICAg
ICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF0Ojp0ZWFyZG93bik6Cisg
ICAgICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF0OjpyZW5kZXJQYXRo
KToKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xp
ZFF0Lmg6IEFkZGVkLgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F0L1JlbmRlclBhdGhRdC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aFF0OjpSZW5kZXJQYXRoUXQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aFF0OjpkcmF3TWFya2Vyc0lmTmVlZGVkKToK
KyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdC9SZW5kZXJQYXRoUXQuaDogQWRkZWQuCisKIDIw
MDYtMDgtMTcgIERhdmlkIEhhcnJpc29uICA8aGFycmlzb25AYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IE1hY2llai4KSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1Jl
bmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
Y2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF0LmNwcAkoUmV2
aXNpb24gMCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2Vy
dmVyR3JhZGllbnRRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjgzIEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRm
b3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxRUG9pbnRG
PgorCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJLQ2FudmFzTWF0cml4Lmgi
CisjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZVF0LmgiCisjaW5jbHVkZSAiS0NhbnZhc1JlbmRl
cmluZ1N0eWxlLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ0ZpbGxQYWludGVyLmgiCisjaW5jbHVk
ZSAiS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJHcmFkaWVudFF0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBmaWxsX2Nv
bG9yX2FycmF5KFFHcmFkaWVudCAmZ3JhZGllbnQsIGNvbnN0IFZlY3RvcjxLQ0dyYWRpZW50U3Rv
cD4gJnN0b3BzLCBmbG9hdCBvcGFjaXR5KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdG9wcy5zaXplKCk7ICsraSkgeworICAgICAgICBmbG9hdCBvZmZzZXQgPSBzdG9wc1tpXS5m
aXJzdDsKKyAgICAgICAgQ29sb3IgY29sb3IgPSBzdG9wc1tpXS5zZWNvbmQ7CisgICAgICAgIAor
ICAgICAgICBRQ29sb3IgYyhjb2xvci5yZWQoKSwgY29sb3IuZ3JlZW4oKSwgY29sb3IuYmx1ZSgp
KTsKKyAgICAgICAgYy5zZXRBbHBoYShpbnQoY29sb3IuYWxwaGEoKSAqIG9wYWNpdHkpKTsKKwor
ICAgICAgICBncmFkaWVudC5zZXRDb2xvckF0KG9mZnNldCwgYyk7CisgICAgfQorfQorCisvLyBL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF0CitLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJMaW5lYXJHcmFkaWVudFF0OjpLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF0
KCkgOiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCgpLCBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJRdCgpCit7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3Jh
ZGllbnRRdDo6cmVuZGVyUGF0aChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4dCwgY29u
c3QgUmVuZGVyUGF0aCAqcGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3sKKyAg
ICBSZW5kZXJTdHlsZSAqcmVuZGVyU3R5bGUgPSBwYXRoLT5zdHlsZSgpOworICAgIEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0UXQgKnF0Q29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0UXQgKj4oY29udGV4dCk7CisgICAgaWYoKHR5cGUgJiBBUFBMWV9UT19GSUxMKSAm
JiBLU1ZHUGFpbnRlckZhY3Rvcnk6OmlzRmlsbGVkKHJlbmRlclN0eWxlKSkKKyAgICAgICAgcXRD
b250ZXh0LT5maWxsUGF0aCgpOworICAgIGlmKCh0eXBlICYgQVBQTFlfVE9fU1RST0tFKSAmJiBL
U1ZHUGFpbnRlckZhY3Rvcnk6OmlzU3Ryb2tlZChyZW5kZXJTdHlsZSkpCisgICAgICAgIHF0Q29u
dGV4dC0+c3Ryb2tlUGF0aCgpOworfQorCitib29sIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVh
ckdyYWRpZW50UXQ6OnNldHVwKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBjb25z
dCBSZW5kZXJPYmplY3QgKm9iamVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3sK
KyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0ICpxdENvbnRleHQgPSBzdGF0aWNfY2FzdDxL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0ICo+KGNvbnRleHQpOworICAgIFFfQVNTRVJUKHF0Q29u
dGV4dCAhPSAwKTsKKworICAgIGlmKGxpc3RlbmVyKCkpCisgICAgICAgIGxpc3RlbmVyKCktPnJl
c291cmNlTm90aWZpY2F0aW9uKCk7CisKKyAgICBSZW5kZXJTdHlsZSAqcmVuZGVyU3R5bGUgPSBv
YmplY3QtPnN0eWxlKCk7CisKKyAgICBkb3VibGUgeDEsIHgyLCB5MSwgeTI7CisgICAgaWYoYm91
bmRpbmdCb3hNb2RlKCkpCisgICAgeworICAgICAgICBRUmVjdEYgYmJveCA9IHF0Q29udGV4dC0+
cGF0aEJCb3goKTsKKyAgICAgICAgeDEgPSBkb3VibGUoYmJveC5sZWZ0KCkpICsgKGRvdWJsZShn
cmFkaWVudFN0YXJ0KCkueCgpIC8gMTAwLjApICogZG91YmxlKGJib3gud2lkdGgoKSkpOworICAg
ICAgICB5MSA9IGRvdWJsZShiYm94LnRvcCgpKSArIChkb3VibGUoZ3JhZGllbnRTdGFydCgpLnko
KSAvIDEwMC4wKSAqIGRvdWJsZShiYm94LmhlaWdodCgpKSk7CisgICAgICAgIHgyID0gZG91Ymxl
KGJib3gubGVmdCgpKSArIChkb3VibGUoZ3JhZGllbnRFbmQoKS54KCkgLyAxMDAuMCkgICogZG91
YmxlKGJib3gud2lkdGgoKSkpOworICAgICAgICB5MiA9IGRvdWJsZShiYm94LnRvcCgpKSArIChk
b3VibGUoZ3JhZGllbnRFbmQoKS55KCkgLyAxMDAuMCkgKiBkb3VibGUoYmJveC5oZWlnaHQoKSkp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB4MSA9IGdyYWRpZW50U3RhcnQoKS54
KCk7CisgICAgICAgIHkxID0gZ3JhZGllbnRTdGFydCgpLnkoKTsKKyAgICAgICAgeDIgPSBncmFk
aWVudEVuZCgpLngoKTsKKyAgICAgICAgeTIgPSBncmFkaWVudEVuZCgpLnkoKTsKKyAgICB9CisK
KyAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRQZW4oUXQ6Ok5vUGVuKTsKKyAgICBxdENvbnRl
eHQtPnBhaW50ZXIoKS5zZXRCcnVzaChRdDo6Tm9CcnVzaCk7CisKKyAgICBRTGluZWFyR3JhZGll
bnQgZ3JhZGllbnQoUVBvaW50Rih4MSwgeTEpLCBRUG9pbnRGKHgyLCB5MikpOworICAgIGlmKHNw
cmVhZE1ldGhvZCgpID09IFNQUkVBRE1FVEhPRF9SRVBFQVQpCisgICAgICAgIGdyYWRpZW50LnNl
dFNwcmVhZChRR3JhZGllbnQ6OlJlcGVhdFNwcmVhZCk7CisgICAgZWxzZSBpZihzcHJlYWRNZXRo
b2QoKSA9PSBTUFJFQURNRVRIT0RfUkVGTEVDVCkKKyAgICAgICAgZ3JhZGllbnQuc2V0U3ByZWFk
KFFHcmFkaWVudDo6UmVmbGVjdFNwcmVhZCk7CisgICAgZWxzZQorICAgICAgICBncmFkaWVudC5z
ZXRTcHJlYWQoUUdyYWRpZW50OjpQYWRTcHJlYWQpOworCisgICAgZG91YmxlIG9wYWNpdHkgPSAx
LjA7CisKKyAgICAvLyBUT0RPOiBHcmFkaWVudCB0cmFuc2Zvcm0gKyBvcGFjaXR5IGZpeGVzISAK
KworICAgIGlmKCh0eXBlICYgQVBQTFlfVE9fRklMTCkgJiYgS1NWR1BhaW50ZXJGYWN0b3J5Ojpp
c0ZpbGxlZChyZW5kZXJTdHlsZSkpCisgICAgeworICAgICAgICBLUmVuZGVyaW5nRmlsbFBhaW50
ZXIgZmlsbFBhaW50ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmZpbGxQYWludGVyKHJlbmRlclN0
eWxlLCBvYmplY3QpOworICAgICAgICBmaWxsX2NvbG9yX2FycmF5KGdyYWRpZW50LCBncmFkaWVu
dFN0b3BzKCksIG9wYWNpdHkpOworCisgICAgICAgIFFCcnVzaCBicnVzaChncmFkaWVudCk7CisK
KyAgICAgICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0QnJ1c2goYnJ1c2gpOworICAgICAgICBx
dENvbnRleHQtPnNldEZpbGxSdWxlKGZpbGxQYWludGVyLmZpbGxSdWxlKCkpOworICAgIH0KKwor
ICAgIGlmKCh0eXBlICYgQVBQTFlfVE9fU1RST0tFKSAmJiBLU1ZHUGFpbnRlckZhY3Rvcnk6Omlz
U3Ryb2tlZChyZW5kZXJTdHlsZSkpCisgICAgeworICAgICAgICBLUmVuZGVyaW5nU3Ryb2tlUGFp
bnRlciBzdHJva2VQYWludGVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludGVyKHJl
bmRlclN0eWxlLCBvYmplY3QpOworICAgICAgICBmaWxsX2NvbG9yX2FycmF5KGdyYWRpZW50LCBn
cmFkaWVudFN0b3BzKCksIG9wYWNpdHkpOworCisgICAgICAgIFFQZW4gcGVuOworICAgICAgICBR
QnJ1c2ggYnJ1c2goZ3JhZGllbnQpOworCisgICAgICAgIHNldFBlblByb3BlcnRpZXMoc3Ryb2tl
UGFpbnRlciwgcGVuKTsKKyAgICAgICAgcGVuLnNldEJydXNoKGJydXNoKTsKKworICAgICAgICBx
dENvbnRleHQtPnBhaW50ZXIoKS5zZXRQZW4ocGVuKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF0Ojp0ZWFy
ZG93bihLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqLCBjb25zdCBSZW5kZXJPYmplY3QgKiwgS0NQ
YWludFRhcmdldFR5cGUpIGNvbnN0Cit7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVy
TGluZWFyR3JhZGllbnRRdDo6ZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4dCwg
Y29uc3QgUmVuZGVyUGF0aCAqcGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3sK
KyAgICBpZighc2V0dXAoY29udGV4dCwgcGF0aCwgdHlwZSkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHJlbmRlclBhdGgoY29udGV4dCwgcGF0aCwgdHlwZSk7CisgICAgdGVhcmRvd24oY29udGV4
dCwgcGF0aCwgdHlwZSk7Cit9CisKKy8vIEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRp
ZW50UXQKK0tSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50UXQ6OktSZW5kZXJpbmdQ
YWludFNlcnZlclJhZGlhbEdyYWRpZW50UXQoKSA6IEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlh
bEdyYWRpZW50KCkKK3sKK30KKworYm9vbCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFk
aWVudFF0OjpzZXR1cChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4dCwgY29uc3QgUmVu
ZGVyT2JqZWN0ICpvYmplY3QsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAg
S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdCAqcXRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRl
cmluZ0RldmljZUNvbnRleHRRdCAqPihjb250ZXh0KTsKKyAgICBRX0FTU0VSVChxdENvbnRleHQg
IT0gMCk7CisKKyAgICBpZihsaXN0ZW5lcigpKQorICAgICAgICBsaXN0ZW5lcigpLT5yZXNvdXJj
ZU5vdGlmaWNhdGlvbigpOworCisgICAgUmVuZGVyU3R5bGUgKnJlbmRlclN0eWxlID0gb2JqZWN0
LT5zdHlsZSgpOworCisgICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0UGVuKFF0OjpOb1Blbik7
CisgICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0QnJ1c2goUXQ6Ok5vQnJ1c2gpOworICAgIFFN
YXRyaXggbWF0ID0gcXRDb250ZXh0LT5jdG0oKS5tYXRyaXgoKTsKKworICAgIGRvdWJsZSBjeCwg
ZngsIGN5LCBmeSwgcjsKKyAgICBpZihib3VuZGluZ0JveE1vZGUoKSkKKyAgICB7CisgICAgICAg
IFFSZWN0RiBiYm94ID0gcXRDb250ZXh0LT5wYXRoQkJveCgpOworICAgICAgICBjeCA9IGRvdWJs
ZShiYm94LmxlZnQoKSkgKyAoZG91YmxlKGdyYWRpZW50Q2VudGVyKCkueCgpIC8gMTAwLjApICog
ZG91YmxlKGJib3gud2lkdGgoKSkpOworICAgICAgICBjeSA9IGRvdWJsZShiYm94LnRvcCgpKSAr
IChkb3VibGUoZ3JhZGllbnRDZW50ZXIoKS55KCkgLyAxMDAuMCkgKiBkb3VibGUoYmJveC5oZWln
aHQoKSkpOworICAgICAgICBmeCA9IGRvdWJsZShiYm94LmxlZnQoKSkgKyAoZG91YmxlKGdyYWRp
ZW50Rm9jYWwoKS54KCkgLyAxMDAuMCkgKiBkb3VibGUoYmJveC53aWR0aCgpKSkgLSBjeDsKKyAg
ICAgICAgZnkgPSBkb3VibGUoYmJveC50b3AoKSkgKyAoZG91YmxlKGdyYWRpZW50Rm9jYWwoKS55
KCkgLyAxMDAuMCkgKiBkb3VibGUoYmJveC5oZWlnaHQoKSkpIC0gY3k7CisgICAgICAgIHIgPSBk
b3VibGUoZ3JhZGllbnRSYWRpdXMoKSAvIDEwMC4wKSAqIChzcXJ0KHBvdyhiYm94LndpZHRoKCks
IDIpICsgcG93KGJib3guaGVpZ2h0KCksIDIpKSk7CisKKyAgICAgICAgZmxvYXQgd2lkdGggPSBi
Ym94LndpZHRoKCk7CisgICAgICAgIGZsb2F0IGhlaWdodCA9IGJib3guaGVpZ2h0KCk7CisKKyAg
ICAgICAgaW50IGRpZmYgPSBpbnQod2lkdGggLSBoZWlnaHQpOyAvLyBhbGxvdyBzbGlnaHQgdG9s
ZXJhbmNlCisgICAgICAgIGlmKCEoZGlmZiA+IC0yICYmIGRpZmYgPCAyKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gbWFrZSBlbGxpcHRpY2FsIG9yIGNpcmN1bGFyIGRlcGVuZGluZyBvbiBi
Ym94IGFzcGVjdCByYXRpbworICAgICAgICAgICAgZmxvYXQgcmF0aW9YID0gKHdpZHRoIC8gaGVp
Z2h0KTsKKyAgICAgICAgICAgIGZsb2F0IHJhdGlvWSA9IChoZWlnaHQgLyB3aWR0aCk7CisgICAg
ICAgICAgICBtYXQuc2NhbGUoKHdpZHRoID4gaGVpZ2h0KSA/IDEgOiByYXRpb1gsICh3aWR0aCA+
IGhlaWdodCkgPyByYXRpb1kgOiAxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBjeCA9IGdyYWRpZW50Q2VudGVyKCkueCgpOworICAgICAgICBjeSA9IGdyYWRp
ZW50Q2VudGVyKCkueSgpOworCisgICAgICAgIGZ4ID0gZ3JhZGllbnRGb2NhbCgpLngoKTsKKyAg
ICAgICAgZnkgPSBncmFkaWVudEZvY2FsKCkueSgpOworCisgICAgICAgIGZ4IC09IGN4OworICAg
ICAgICBmeSAtPSBjeTsKKworICAgICAgICByID0gZ3JhZGllbnRSYWRpdXMoKTsKKyAgICB9CisK
KyAgICBpZihzcXJ0KGZ4ICogZnggKyBmeSAqIGZ5KSA+IHIpCisgICAgeworICAgICAgICAvLyBT
cGVjOiBJZiAoZngsIGZ5KSBsaWVzIG91dHNpZGUgdGhlIGNpcmNsZSBkZWZpbmVkIGJ5IChjeCwg
Y3kpIGFuZCByLCBzZXQgKGZ4LCBmeSkKKyAgICAgICAgLy8gdG8gdGhlIHBvaW50IG9mIGludGVy
c2VjdGlvbiBvZiB0aGUgbGluZSB0aHJvdWdoIChmeCwgZnkpIGFuZCB0aGUgY2lyY2xlLgorICAg
ICAgICBkb3VibGUgYW5nbGUgPSBhdGFuMihmeSwgZngpOworICAgICAgICBmeCA9IGludChjb3Mo
YW5nbGUpICogcikgLSAxOworICAgICAgICBmeSA9IGludChzaW4oYW5nbGUpICogcikgLSAxOwor
ICAgIH0KKworICAgIFFSYWRpYWxHcmFkaWVudCBncmFkaWVudChRUG9pbnRGKGN4LCBjeSksIGdy
YWRpZW50UmFkaXVzKCksIFFQb2ludEYoZnggKyBjeCwgZnkgKyBjeSkpOworICAgIGlmKHNwcmVh
ZE1ldGhvZCgpID09IFNQUkVBRE1FVEhPRF9SRVBFQVQpCisgICAgICAgIGdyYWRpZW50LnNldFNw
cmVhZChRR3JhZGllbnQ6OlJlcGVhdFNwcmVhZCk7CisgICAgZWxzZSBpZihzcHJlYWRNZXRob2Qo
KSA9PSBTUFJFQURNRVRIT0RfUkVGTEVDVCkKKyAgICAgICAgZ3JhZGllbnQuc2V0U3ByZWFkKFFH
cmFkaWVudDo6UmVmbGVjdFNwcmVhZCk7CisgICAgZWxzZQorICAgICAgICBncmFkaWVudC5zZXRT
cHJlYWQoUUdyYWRpZW50OjpQYWRTcHJlYWQpOworCisgICAgZG91YmxlIG9wYWNpdHkgPSAxLjA7
CisKKyAgICAvLyBUT0RPOiBHcmFkaWVudCB0cmFuc2Zvcm0gKyBvcGFjaXR5IGZpeGVzISAKKwor
ICAgIC8vIEtDYW52YXNNYXRyaXggZ3JhZGllbnRUcmFucyA9IGdyYWRpZW50VHJhbnNmb3JtKCk7
CisgICAgLy8gZ3JhZGllbnRUcmFucy5xbWF0cml4KCkubWFwKGN4LCBjeSwgJmN4LCAmY3kpOwor
ICAgIC8vIHF0Q29udGV4dC0+cGFpbnRlcigpLnNldE1hdHJpeChtYXQpOworCisgICAgaWYoKHR5
cGUgJiBBUFBMWV9UT19GSUxMKSAmJiBLU1ZHUGFpbnRlckZhY3Rvcnk6OmlzRmlsbGVkKHJlbmRl
clN0eWxlKSkKKyAgICB7CisgICAgICAgIEtSZW5kZXJpbmdGaWxsUGFpbnRlciBmaWxsUGFpbnRl
ciA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50ZXIocmVuZGVyU3R5bGUsIG9iamVjdCk7
CisgICAgICAgIGZpbGxfY29sb3JfYXJyYXkoZ3JhZGllbnQsIGdyYWRpZW50U3RvcHMoKSwgb3Bh
Y2l0eSk7CisKKyAgICAgICAgUUJydXNoIGJydXNoKGdyYWRpZW50KTsKKworICAgICAgICBxdENv
bnRleHQtPnBhaW50ZXIoKS5zZXRCcnVzaChicnVzaCk7CisgICAgICAgIHF0Q29udGV4dC0+c2V0
RmlsbFJ1bGUoZmlsbFBhaW50ZXIuZmlsbFJ1bGUoKSk7CisgICAgfQorCisgICAgaWYoKHR5cGUg
JiBBUFBMWV9UT19TVFJPS0UpICYmIEtTVkdQYWludGVyRmFjdG9yeTo6aXNTdHJva2VkKHJlbmRl
clN0eWxlKSkKKyAgICB7CisgICAgICAgIEtSZW5kZXJpbmdTdHJva2VQYWludGVyIHN0cm9rZVBh
aW50ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50ZXIocmVuZGVyU3R5bGUsIG9i
amVjdCk7CisgICAgICAgIGZpbGxfY29sb3JfYXJyYXkoZ3JhZGllbnQsIGdyYWRpZW50U3RvcHMo
KSwgb3BhY2l0eSk7CisKKyAgICAgICAgUVBlbiBwZW47CisgICAgICAgIFFCcnVzaCBicnVzaChn
cmFkaWVudCk7CisKKyAgICAgICAgc2V0UGVuUHJvcGVydGllcyhzdHJva2VQYWludGVyLCBwZW4p
OworICAgICAgICBwZW4uc2V0QnJ1c2goYnJ1c2gpOworCisgICAgICAgIHF0Q29udGV4dC0+cGFp
bnRlcigpLnNldFBlbihwZW4pOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50UXQ6OmRyYXcoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQgKmNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGggKnBhdGgsIEtDUGFpbnRUYXJn
ZXRUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgaWYoIXNldHVwKGNvbnRleHQsIHBhdGgsIHR5cGUp
KQorICAgICAgICByZXR1cm47CisKKyAgICByZW5kZXJQYXRoKGNvbnRleHQsIHBhdGgsIHR5cGUp
OworICAgIHRlYXJkb3duKGNvbnRleHQsIHBhdGgsIHR5cGUpOworfQorCit2b2lkIEtSZW5kZXJp
bmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50UXQ6OnRlYXJkb3duKEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0ICosIGNvbnN0IFJlbmRlck9iamVjdCAqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3QK
K3sKK30KKwordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF0OjpyZW5k
ZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRo
ICpwYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAoreworICAgIFJlbmRlclN0eWxl
ICpyZW5kZXJTdHlsZSA9IHBhdGgtPnN0eWxlKCk7CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRl
eHRRdCAqcXRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdCAq
Pihjb250ZXh0KTsKKyAgICBpZigodHlwZSAmIEFQUExZX1RPX0ZJTEwpICYmIEtTVkdQYWludGVy
RmFjdG9yeTo6aXNGaWxsZWQocmVuZGVyU3R5bGUpKQorICAgICAgICBxdENvbnRleHQtPmZpbGxQ
YXRoKCk7CisgICAgaWYoKHR5cGUgJiBBUFBMWV9UT19TVFJPS0UpICYmIEtTVkdQYWludGVyRmFj
dG9yeTo6aXNTdHJva2VkKHJlbmRlclN0eWxlKSkKKyAgICAgICAgcXRDb250ZXh0LT5zdHJva2VQ
YXRoKCk7Cit9CisKK30KKworLy8gdmltOnRzPTQ6bm9ldAorCkluZGV4OiBXZWJDb3JlL2tjYW52
YXMvZGV2aWNlL3F0L1JlbmRlclBhdGhRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2Fu
dmFzL2RldmljZS9xdC9SZW5kZXJQYXRoUXQuY3BwCShSZXZpc2lvbiAwKQorKysgV2ViQ29yZS9r
Y2FudmFzL2RldmljZS9xdC9SZW5kZXJQYXRoUXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQyIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUs
IDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWMuc2VpZGVsQGtkZW1haWwubmV0PgorCisgICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAy
MTExLTEzMDcsIFVTQS4KKyovCisKKyNpbmNsdWRlIDxRRGVidWc+CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJSZW5kZXJQYXRoUXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
ICAgIAorUmVuZGVyUGF0aFF0OjpSZW5kZXJQYXRoUXQoUmVuZGVyU3R5bGUgKnN0eWxlLCBTVkdT
dHlsZWRFbGVtZW50ICpub2RlKSA6IFJlbmRlclBhdGgoc3R5bGUsIG5vZGUpCit7Cit9CisKK3Zv
aWQgUmVuZGVyUGF0aFF0OjpkcmF3TWFya2Vyc0lmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCAqLCBj
b25zdCBGbG9hdFJlY3QgJiwgY29uc3QgS0NhbnZhc1BhdGggKikgY29uc3QKK3sKKyAgICBxRGVi
dWcoIlJlbmRlclBhdGhRdDo6ZHJhd01hcmtlcnNJZk5lZWRlZCgpIFRPRE8hIik7Cit9CisKK30K
KworLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2Fu
dmFzL2RldmljZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF0LmgJKFJldmlzaW9u
IDApCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50UXQuaAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5v
cmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIEtS
ZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXRfSAorI2RlZmluZSBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJHcmFkaWVudFF0X0gKKworI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlclF0Lmgi
CisjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF0
IDogcHVibGljIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJRdAoreworcHVibGljOgorICAgIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdy
YWRpZW50UXQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0ICpjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoICpwYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0
eXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoS1JlbmRlcmluZ0RldmljZUNvbnRl
eHQgKmNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCAqb2JqZWN0LCBLQ1BhaW50VGFyZ2V0VHlw
ZSB0eXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdGVhcmRvd24oS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHQgKmNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCAqb2JqZWN0LCBLQ1BhaW50VGFy
Z2V0VHlwZSB0eXBlKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCByZW5k
ZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRo
ICpwYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdDsKK307CisKK2NsYXNzIEtSZW5k
ZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50UXQgOiBwdWJsaWMgS1JlbmRlcmluZ1BhaW50
U2VydmVyUmFkaWFsR3JhZGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIEtSZW5kZXJpbmdQYWludFNlcnZlclF0Cit7CitwdWJsaWM6Cisg
ICAgS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdCgpOworCisgICAgdmlydHVh
bCB2b2lkIGRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQsIGNvbnN0IFJlbmRl
clBhdGggKnBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBzZXR1cChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4dCwgY29uc3QgUmVuZGVy
T2JqZWN0ICpvYmplY3QsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCB0ZWFyZG93bihLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4dCwgY29uc3Qg
UmVuZGVyT2JqZWN0ICpvYmplY3QsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0OworCitw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoS1JlbmRlcmluZ0RldmljZUNv
bnRleHQgKmNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGggKnBhdGgsIEtDUGFpbnRUYXJnZXRUeXBl
IHR5cGUpIGNvbnN0OworfTsKKworfQorCisjZW5kaWYKKworLy8gdmltOnRzPTQ6bm9ldApJbmRl
eDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9SZW5kZXJQYXRoUXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L1JlbmRlclBhdGhRdC5oCShSZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9SZW5kZXJQYXRoUXQuaAkoUmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAy
MDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAg
ICAyMDA1IEVyaWMgU2VpZGVsIDxlcmljLnNlaWRlbEBrZGVtYWlsLm5ldD4KKworICAgIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9z
dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisqLworCisjaWZuZGVmIFJlbmRlclBhdGhRdF9ICisj
ZGVmaW5lIFJlbmRlclBhdGhRdF9ICisKKyNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyUGF0aFF0IDogcHVibGljIFJlbmRlclBhdGgK
K3sKK3B1YmxpYzoKKyAgICBSZW5kZXJQYXRoUXQoUmVuZGVyU3R5bGUgKnN0eWxlLCBTVkdTdHls
ZWRFbGVtZW50ICpub2RlKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBkcmF3TWFy
a2Vyc0lmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCAqY29udGV4Y3QsIGNvbnN0IEZsb2F0UmVjdCAm
cmVjdCwgY29uc3QgS0NhbnZhc1BhdGggKnBhdGgpIGNvbnN0OworfTsKKworfQorCisjZW5kaWYK
KworLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LQ2Fu
dmFzUGF0aFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tD
YW52YXNQYXRoUXQuY3BwCShSZXZpc2lvbiAwKQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9x
dC9LQ2FudmFzUGF0aFF0LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxk
Zm94QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA1IEFwcGxlIENvbXB1dGVyLCBJ
bmMuCisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhaW50IHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3Vp
dGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIktDYW52YXNQYXRoUXQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitLQ2FudmFzUGF0aFF0OjpLQ2FudmFzUGF0aFF0KCkKK3sKK30KKworS0NhbnZhc1Bh
dGhRdDo6fktDYW52YXNQYXRoUXQoKQoreworfQorCitib29sIEtDYW52YXNQYXRoUXQ6OmlzRW1w
dHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhdGguaXNFbXB0eSgpOworfQorCit2b2lkIEtD
YW52YXNQYXRoUXQ6Om1vdmVUbyhmbG9hdCB4LCBmbG9hdCB5KQoreworICAgIG1fcGF0aC5tb3Zl
VG8oeCwgeSk7Cit9CisKK3ZvaWQgS0NhbnZhc1BhdGhRdDo6bGluZVRvKGZsb2F0IHgsIGZsb2F0
IHkpCit7CisgICAgbV9wYXRoLmxpbmVUbyh4LCB5KTsKK30KKwordm9pZCBLQ2FudmFzUGF0aFF0
OjpjdXJ2ZVRvKGZsb2F0IHgxLCBmbG9hdCB5MSwgZmxvYXQgeDIsIGZsb2F0IHkyLCBmbG9hdCB4
MywgZmxvYXQgeTMpCit7CisgICAgbV9wYXRoLmN1YmljVG8oeDEsIHkxLCB4MiwgeTIsIHgzLCB5
Myk7Cit9CisKK3ZvaWQgS0NhbnZhc1BhdGhRdDo6Y2xvc2VTdWJwYXRoKCkKK3sKKyAgICBtX3Bh
dGguY2xvc2VTdWJwYXRoKCk7Cit9CisKK0Zsb2F0UmVjdCBLQ2FudmFzUGF0aFF0Ojpib3VuZGlu
Z0JveCgpCit7CisgICAgcmV0dXJuIEZsb2F0UmVjdChtX3BhdGguYm91bmRpbmdSZWN0KCkpOwor
fQorCitGbG9hdFJlY3QgS0NhbnZhc1BhdGhRdDo6c3Ryb2tlQm91bmRpbmdCb3goY29uc3QgS1Jl
bmRlcmluZ1N0cm9rZVBhaW50ZXIgJnN0cm9rZVBhaW50ZXIpCit7CisgICAgcURlYnVnKCJLQ2Fu
dmFzUGF0aFF0OjpzdHJva2VCb3VuZGluZ0JveCgpIFRPRE8hIik7CisgICAgcmV0dXJuIGJvdW5k
aW5nQm94KCk7Cit9CisKK2Jvb2wgS0NhbnZhc1BhdGhRdDo6c3Ryb2tlQ29udGFpbnNQb2ludChj
b25zdCBGbG9hdFBvaW50ICZwb2ludCkKK3sKKyAgICBxRGVidWcoIktDYW52YXNQYXRoUXQ6OnN0
cm9rZUNvbnRhaW5zUG9pbnQoKSBUT0RPISIpOyAgICAKKyAgICByZXR1cm4gY29udGFpbnNQb2lu
dChwb2ludCwgUlVMRV9FVkVOT0REKTsKK30KKworYm9vbCBLQ2FudmFzUGF0aFF0Ojpjb250YWlu
c1BvaW50KGNvbnN0IEZsb2F0UG9pbnQgJnBvaW50LCBLQ1dpbmRSdWxlIHJ1bGUpCit7CisgICAg
UXQ6OkZpbGxSdWxlIHNhdmVkUnVsZSA9IG1fcGF0aC5maWxsUnVsZSgpOworICAgIG1fcGF0aC5z
ZXRGaWxsUnVsZShydWxlID09IFJVTEVfRVZFTk9ERCA/IFF0OjpPZGRFdmVuRmlsbCA6IFF0OjpX
aW5kaW5nRmlsbCk7CisKKyAgICBib29sIGNvbnRhaW5zID0gbV9wYXRoLmNvbnRhaW5zKHBvaW50
KTsKKworICAgIG1fcGF0aC5zZXRGaWxsUnVsZShzYXZlZFJ1bGUpOworICAgIHJldHVybiBjb250
YWluczsKK30KKworfQorCisvLyB2aW06dHM9NDpub2V0CisKSW5kZXg6IFdlYkNvcmUva2NhbnZh
cy9kZXZpY2UvcXQvS0NhbnZhc0NsaXBwZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
Y2FudmFzL2RldmljZS9xdC9LQ2FudmFzQ2xpcHBlclF0LmNwcAkoUmV2aXNpb24gMCkKKysrIFdl
YkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS0NhbnZhc0NsaXBwZXJRdC5jcHAJKFJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTMxIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAg
IDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAg
ICAgIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBLREUgcHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0x
MzA3LCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWZkZWYgU1ZHX1NVUFBPUlQK
KyNpbmNsdWRlICJLQ2FudmFzQ2xpcHBlclF0LmgiCisKKyNpbmNsdWRlICJLQ2FudmFzUGF0aFF0
LmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZVF0LmgiCisjaW5jbHVkZSA8a2RlYnVnLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBLQ2FudmFzQ2xpcHBlclF0OjphcHBseUNs
aXAoY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkgY29uc3QKK3sKKyNpZiAxCisgICAgS1Jl
bmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQgPSByZW5kZXJpbmdEZXZpY2UoKS0+Y3VycmVu
dENvbnRleHQoKTsKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0ICpxdENvbnRleHQgPSBz
dGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0ICo+KGNvbnRleHQpOworICAgIGlm
IChtX2NsaXBEYXRhLmNvdW50KCkgPCAxKQorICAgICAgICByZXR1cm47CisKKyAgICBjb250ZXh0
LT5jbGVhclBhdGgoKTsKKworICAgIFFQYWludGVyUGF0aCBuZXdQYXRoOworCisgICAgYm9vbCBo
ZXRlcm9nZW5vdXNDbGlwUnVsZXMgPSBmYWxzZTsKKyAgICBLQ1dpbmRSdWxlIGNsaXBSdWxlID0g
bV9jbGlwRGF0YVswXS53aW5kUnVsZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgeCA9IDA7
IHggPCBtX2NsaXBEYXRhLmNvdW50KCk7IHgrKykgeworICAgICAgICBLQ0NsaXBEYXRhIGNsaXBE
YXRhID0gbV9jbGlwRGF0YVt4XTsKKyAgICAgICAgaWYgKGNsaXBEYXRhLndpbmRSdWxlKCkgIT0g
Y2xpcFJ1bGUpCisgICAgICAgICAgICBoZXRlcm9nZW5vdXNDbGlwUnVsZXMgPSB0cnVlOworICAg
ICAgIAorICAgICAgICBRUGFpbnRlclBhdGggcGF0aCA9IHN0YXRpY19jYXN0PEtDYW52YXNQYXRo
UXQgKj4oY2xpcERhdGEucGF0aC5nZXQoKSktPnF0UGF0aCgpOyAKKyAgICAgICAgaWYocGF0aC5p
c0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZighbmV3UGF0aC5p
c0VtcHR5KCkpCisgICAgICAgICAgICBuZXdQYXRoLmNsb3NlU3VicGF0aCgpOworCisgICAgICAg
IC8vIFJlc3BlY3QgY2xpcHBpbmcgdW5pdHMuLi4KKyAgICAgICAgUU1hdHJpeCB0cmFuc2Zvcm07
CisKKyAgICAgICAgaWYoY2xpcERhdGEuYmJveFVuaXRzKQorICAgICAgICB7CisgICAgICAgICAg
ICB0cmFuc2Zvcm0udHJhbnNsYXRlKGJvdW5kaW5nQm94LngoKSwgYm91bmRpbmdCb3gueSgpKTsK
KyAgICAgICAgICAgIHRyYW5zZm9ybS5zY2FsZShib3VuZGluZ0JveC53aWR0aCgpLCBib3VuZGlu
Z0JveC5oZWlnaHQoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUT0RPOiBzdXBwb3J0IGhl
dGVyb2dlbm91cyBjbGlwIHJ1bGVzIQorICAgICAgICAvL2NsaXBSdWxlID0gKGNsaXBEYXRhLndp
bmRSdWxlKCkgPT0gUlVMRV9FVkVOT0REID8gUXQ6Ok9kZEV2ZW5GaWxsIDogUXQ6OldpbmRpbmdG
aWxsKTsKKworICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgcGF0aC5lbGVtZW50Q291bnQoKTsg
KytpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBRUGFpbnRlclBhdGg6OkVsZW1lbnQg
JmN1ciA9IHBhdGguZWxlbWVudEF0KGkpOworCisgICAgICAgICAgICBzd2l0Y2goY3VyLnR5cGUp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBRUGFpbnRlclBhdGg6Ok1vdmVU
b0VsZW1lbnQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBuZXdQYXRo
Lm1vdmVUbyhRUG9pbnRGKGN1ci54LCBjdXIueSkgKiB0cmFuc2Zvcm0pOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBR
UGFpbnRlclBhdGg6OkxpbmVUb0VsZW1lbnQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBuZXdQYXRoLmxpbmVUbyhRUG9pbnRGKGN1ci54LCBjdXIueSkgKiB0cmFuc2Zv
cm0pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgY2FzZSBRUGFpbnRlclBhdGg6OkN1cnZlVG9FbGVtZW50OgorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgUVBhaW50ZXJQYXRoOjpFbGVtZW50
ICZjMSA9IHBhdGguZWxlbWVudEF0KGkgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UVBhaW50ZXJQYXRoOjpFbGVtZW50ICZjMiA9IHBhdGguZWxlbWVudEF0KGkgKyAyKTsKKworICAg
ICAgICAgICAgICAgICAgICBRX0FTU0VSVChjMS50eXBlID09IFFQYWludGVyUGF0aDo6Q3VydmVU
b0RhdGFFbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgUV9BU1NFUlQoYzIudHlwZSA9PSBR
UGFpbnRlclBhdGg6OkN1cnZlVG9EYXRhRWxlbWVudCk7CisKKyAgICAgICAgICAgICAgICAgICAg
bmV3UGF0aC5jdWJpY1RvKFFQb2ludEYoY3VyLngsIGN1ci55KSAqIHRyYW5zZm9ybSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFQb2ludEYoYzEueCwgYzEueSkgKiB0cmFu
c2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRUG9pbnRGKGMyLngs
IGMyLnkpICogdHJhbnNmb3JtKTsKKworICAgICAgICAgICAgICAgICAgICBpICs9IDI7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBjYXNlIFFQYWludGVyUGF0aDo6Q3VydmVUb0RhdGFFbGVtZW50OgorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAga0Vycm9yKCkgPDwga19mdW5jaW5mbyA8PCBlbmRsOwor
ICAgICAgICAgICAgICAgICAgICBRX0FTU0VSVChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBpZiAobV9jbGlwRGF0YS5jb3VudCgpKSB7CisgICAgICAgIC8vIEZJWE1FIQorICAg
ICAgICAvLyBXZSBkb24ndCBjdXJyZW50bHkgYWxsb3cgZm9yIGhldGVyb2dlbm91cyBjbGlwIHJ1
bGVzLgorICAgICAgICAvLyB3ZSB3b3VsZCBoYXZlIHRvIGRldGVjdCBzdWNoLCBkcmF3IHRvIGEg
bWFzaywgYW5kIHRoZW4gY2xpcAorICAgICAgICAvLyB0byB0aGF0IG1hc2sKKyAgICAgICAgLy9p
ZiAoIUNHQ29udGV4dElzUGF0aEVtcHR5KGNnQ29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmIChj
bGlwUnVsZSA9PSBSVUxFX0VWRU5PREQpCisgICAgICAgICAgICAgICAgbmV3UGF0aC5zZXRGaWxs
UnVsZShRdDo6T2RkRXZlbkZpbGwpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG5ld1BhdGguc2V0RmlsbFJ1bGUoUXQ6OldpbmRpbmdGaWxsKTsKKyAgICAgICAgLy99CisgICAg
fQorCisgICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0Q2xpcFBhdGgobmV3UGF0aCk7CisjZW5k
aWYKK30KKworfQorI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBXZWJDb3JlL2tjYW52YXMv
ZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdC5j
cHAJKFJldmlzaW9uIDApCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQ
YWludFNlcnZlclNvbGlkUXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMCBAQAorLyoK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3
aWxkZm94QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHBy
b2plY3QKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxRUGVuPgorI2luY2x1ZGUgPFFCcnVz
aD4KKyNpbmNsdWRlIDxRUGFpbnRlcj4KKworI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5j
bHVkZSAiS1JlbmRlcmluZ0RldmljZVF0LmgiCisjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0
eWxlLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ0ZpbGxQYWludGVyLmgiCisjaW5jbHVkZSAiS1Jl
bmRlcmluZ1N0cm9rZVBhaW50ZXIuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJT
b2xpZFF0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworS1JlbmRlcmluZ1BhaW50U2VydmVy
U29saWRRdDo6S1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdCgpIDogS1JlbmRlcmluZ1BhaW50
U2VydmVyU29saWQoKSwgS1JlbmRlcmluZ1BhaW50U2VydmVyUXQoKQoreworfQorCitLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJTb2xpZFF0Ojp+S1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdCgpCit7
Cit9CisKKy8vICdTb2xpZCcgaW50ZXJmYWNlCit2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclNv
bGlkUXQ6OmRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQsIGNvbnN0IFJlbmRl
clBhdGggKnBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgaWYoIXNl
dHVwKGNvbnRleHQsIHBhdGgsIHR5cGUpKQorICAgICAgICByZXR1cm47CisKKyAgICByZW5kZXJQ
YXRoKGNvbnRleHQsIHBhdGgsIHR5cGUpOworICAgIHRlYXJkb3duKGNvbnRleHQsIHBhdGgsIHR5
cGUpOworfQorCitib29sIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQ6OnNldHVwKEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QgKm9iamVjdCwg
S0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dFF0ICpxdENvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0
ICo+KGNvbnRleHQpOworCisgICAgUmVuZGVyU3R5bGUgKnJlbmRlclN0eWxlID0gb2JqZWN0LT5z
dHlsZSgpOworICAgIC8vIFRPRE8/IHF0Q29udGV4dC0+cGFpbnRlcigpLnNldE9wYWNpdHkocmVu
ZGVyU3R5bGUtPm9wYWNpdHkoKSk7CisKKyAgICBRQ29sb3IgYyA9IGNvbG9yKCk7CisKKyAgICBp
ZigodHlwZSAmIEFQUExZX1RPX0ZJTEwpICYmIEtTVkdQYWludGVyRmFjdG9yeTo6aXNGaWxsZWQo
cmVuZGVyU3R5bGUpKQorICAgIHsKKyAgICAgICAgS1JlbmRlcmluZ0ZpbGxQYWludGVyIGZpbGxQ
YWludGVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRlcihyZW5kZXJTdHlsZSwgb2Jq
ZWN0KTsKKyAgICAgICAgYy5zZXRBbHBoYUYoZmlsbFBhaW50ZXIub3BhY2l0eSgpKTsKKworICAg
ICAgICBRQnJ1c2ggYnJ1c2goYyk7CisgICAgICAgIHF0Q29udGV4dC0+cGFpbnRlcigpLnNldEJy
dXNoKGJydXNoKTsKKyAgICAgICAgcXRDb250ZXh0LT5zZXRGaWxsUnVsZShmaWxsUGFpbnRlci5m
aWxsUnVsZSgpKTsKKworICAgICAgICAvKiBpZihpc1BhaW50aW5nVGV4dCgpKSAuLi4gKi8KKyAg
ICB9CisKKyAgICBpZigodHlwZSAmIEFQUExZX1RPX1NUUk9LRSkgJiYgS1NWR1BhaW50ZXJGYWN0
b3J5Ojppc1N0cm9rZWQocmVuZGVyU3R5bGUpKQorICAgIHsKKyAgICAgICAgS1JlbmRlcmluZ1N0
cm9rZVBhaW50ZXIgc3Ryb2tlUGFpbnRlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6c3Ryb2tlUGFp
bnRlcihyZW5kZXJTdHlsZSwgb2JqZWN0KTsKKyAgICAgICAgYy5zZXRBbHBoYUYoc3Ryb2tlUGFp
bnRlci5vcGFjaXR5KCkpOworCisgICAgICAgIFFQZW4gcGVuKGMpOworICAgICAgICBzZXRQZW5Q
cm9wZXJ0aWVzKHN0cm9rZVBhaW50ZXIsIHBlbik7CisgICAgICAgIHF0Q29udGV4dC0+cGFpbnRl
cigpLnNldFBlbihwZW4pOworCisgICAgICAgIC8qIGlmKGlzUGFpbnRpbmdUZXh0KCkpIC4uLiAq
LworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEtSZW5kZXJpbmdQYWludFNl
cnZlclNvbGlkUXQ6OnRlYXJkb3duKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICosIGNvbnN0IFJl
bmRlck9iamVjdCAqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3QKK3sKK30KKwordm9pZCBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF0OjpyZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0ICpjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoICpwYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0
eXBlKSBjb25zdAoreworICAgIFJlbmRlclN0eWxlICpyZW5kZXJTdHlsZSA9IHBhdGgtPnN0eWxl
KCk7CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdCAqcXRDb250ZXh0ID0gc3RhdGljX2Nh
c3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdCAqPihjb250ZXh0KTsKKworICAgIGlmKCh0eXBl
ICYgQVBQTFlfVE9fRklMTCkgJiYgS1NWR1BhaW50ZXJGYWN0b3J5Ojppc0ZpbGxlZChyZW5kZXJT
dHlsZSkpCisgICAgICAgIHF0Q29udGV4dC0+ZmlsbFBhdGgoKTsKKworICAgIGlmKCh0eXBlICYg
QVBQTFlfVE9fU1RST0tFKSAmJiBLU1ZHUGFpbnRlckZhY3Rvcnk6OmlzU3Ryb2tlZChyZW5kZXJT
dHlsZSkpCisgICAgICAgIHF0Q29udGV4dC0+c3Ryb2tlUGF0aCgpOworfQorCit9CisKKy8vIHZp
bTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ0Rl
dmljZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5k
ZXJpbmdEZXZpY2VRdC5jcHAJKFJldmlzaW9uIDApCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNl
L3F0L0tSZW5kZXJpbmdEZXZpY2VRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjExIEBA
CisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1h
bm4gPHdpbGRmb3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBL
REUgcHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSAiUmVuZGVyUGF0aFF0LmgiCisjaW5jbHVkZSAiS0NhbnZhc01hdHJpeC5oIgorI2luY2x1ZGUg
IktDYW52YXNQYXRoUXQuaCIKKyNpbmNsdWRlICJLQ2FudmFzQ2xpcHBlclF0LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZVF0LmgiCisj
aW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdC5oIgorI2luY2x1ZGUgIktSZW5k
ZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXQuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJQYXR0ZXJuUXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dFF0OjpLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0KFFQYWludGVyICpwYWludGVy
KSA6IG1fcGFpbnRlcihwYWludGVyKSwgbV9wYXRoKCkKK3sKKyAgICBRX0FTU0VSVChtX3BhaW50
ZXIgIT0gMCk7Cit9CisKK0tSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQ6On5LUmVuZGVyaW5nRGV2
aWNlQ29udGV4dFF0KCkKK3sKK30KKworS0NhbnZhc01hdHJpeCBLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dFF0Ojpjb25jYXRDVE0oY29uc3QgS0NhbnZhc01hdHJpeCAmd29ybGRNYXRyaXgpCit7Cisg
ICAgS0NhbnZhc01hdHJpeCByZXQgPSBjdG0oKTsKKyAgICBtX3BhaW50ZXItPnNldE1hdHJpeCh3
b3JsZE1hdHJpeC5tYXRyaXgoKSwgdHJ1ZSk7CisgICAgcmV0dXJuIHJldDsKK30KKworS0NhbnZh
c01hdHJpeCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpjdG0oKSBjb25zdAoreworICAgIHJl
dHVybiBLQ2FudmFzTWF0cml4KG1fcGFpbnRlci0+bWF0cml4KCkpOworfQorCitJbnRSZWN0IEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQ6Om1hcEZyb21WaXN1YWwoY29uc3QgSW50UmVjdCAmcmVj
dCkKK3sKKyAgICByZXR1cm4gSW50UmVjdCgpOworfQorCitJbnRSZWN0IEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0UXQ6Om1hcFRvVmlzdWFsKGNvbnN0IEludFJlY3QgJnJlY3QpCit7CisgICAgcmV0
dXJuIEludFJlY3QoKTsKK30KKwordm9pZCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpjbGVh
clBhdGgoKQoreworICAgIG1fcGF0aCA9IFFQYWludGVyUGF0aCgpOworfQorCit2b2lkIEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0UXQ6OmFkZFBhdGgoY29uc3QgS0NhbnZhc1BhdGggKnBhdGgpCit7
CisgICAgbV9wYXRoLmFkZFBhdGgoc3RhdGljX2Nhc3Q8Y29uc3QgS0NhbnZhc1BhdGhRdCAqPihw
YXRoKS0+cXRQYXRoKCkpOworfQorCitHcmFwaGljc0NvbnRleHQgKktSZW5kZXJpbmdEZXZpY2VD
b250ZXh0UXQ6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpCit7CisgICAgcmV0dXJuIG5ldyBHcmFw
aGljc0NvbnRleHQobV9wYWludGVyKTsKK30KKworUVBhaW50ZXIgJktSZW5kZXJpbmdEZXZpY2VD
b250ZXh0UXQ6OnBhaW50ZXIoKQoreworICAgIHJldHVybiAqbV9wYWludGVyOworfQorCitRUmVj
dEYgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdDo6cGF0aEJCb3goKSBjb25zdAoreworICAgIHJl
dHVybiBtX3BhdGguYm91bmRpbmdSZWN0KCk7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ0RldmljZUNv
bnRleHRRdDo6c2V0RmlsbFJ1bGUoS0NXaW5kUnVsZSBydWxlKQoreworICAgIG1fcGF0aC5zZXRG
aWxsUnVsZShydWxlID09IFJVTEVfRVZFTk9ERCA/IFF0OjpPZGRFdmVuRmlsbCA6IFF0OjpXaW5k
aW5nRmlsbCk7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdDo6ZmlsbFBhdGgo
KQoreworICAgIG1fcGFpbnRlci0+ZmlsbFBhdGgobV9wYXRoLCBtX3BhaW50ZXItPmJydXNoKCkp
OworfQorCit2b2lkIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQ6OnN0cm9rZVBhdGgoKQorewor
ICAgIG1fcGFpbnRlci0+c3Ryb2tlUGF0aChtX3BhdGgsIG1fcGFpbnRlci0+cGVuKCkpOworfQor
CisvLyBLUmVuZGVyaW5nRGV2aWNlUXQKK0tSZW5kZXJpbmdEZXZpY2VRdDo6S1JlbmRlcmluZ0Rl
dmljZVF0KCkgOiBLUmVuZGVyaW5nRGV2aWNlKCkKK3sKK30KKworS1JlbmRlcmluZ0RldmljZVF0
Ojp+S1JlbmRlcmluZ0RldmljZVF0KCkKK3sKK30KKworS1JlbmRlcmluZ0RldmljZUNvbnRleHQg
KktSZW5kZXJpbmdEZXZpY2VRdDo6cG9wQ29udGV4dCgpCit7CisgICAgLy8gQW55IHNwZWNpYWwg
dGhpbmdzIG5lZWRlZD8KKyAgICByZXR1cm4gS1JlbmRlcmluZ0RldmljZTo6cG9wQ29udGV4dCgp
OworfQorCit2b2lkIEtSZW5kZXJpbmdEZXZpY2VRdDo6cHVzaENvbnRleHQoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQgKmNvbnRleHQpCit7CisgICAgLy8gQW55IHNwZWNpYWwgdGhpbmdzIG5lZWRl
ZD8KKyAgICBLUmVuZGVyaW5nRGV2aWNlOjpwdXNoQ29udGV4dChjb250ZXh0KTsKK30KKworLy8g
Y29udGV4dCBtYW5hZ2VtZW50LgorS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdCAqS1JlbmRlcmlu
Z0RldmljZVF0OjpxdENvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0ICo+KGN1cnJlbnRDb250ZXh0KCkpOworfQorCitLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dCAqS1JlbmRlcmluZ0RldmljZVF0Ojpjb250ZXh0Rm9ySW1hZ2Uo
S0NhbnZhc0ltYWdlICppbWFnZSkgY29uc3QKK3sKKyAgICBxRGVidWcoIktSZW5kZXJpbmdEZXZp
Y2VRdDo6Y29udGV4dEZvckltYWdlKCkgVE9ETyEiKTsKKyAgICByZXR1cm4gMDsKK30KKworRGVw
cmVjYXRlZFN0cmluZyBLUmVuZGVyaW5nRGV2aWNlUXQ6OnN0cmluZ0ZvclBhdGgoY29uc3QgS0Nh
bnZhc1BhdGggKnBhdGgpCit7CisgICAgcURlYnVnKCJLUmVuZGVyaW5nRGV2aWNlUXQ6OnN0cmlu
Z0ZvclBhdGgoKSBUT0RPISIpOworICAgIHJldHVybiAwOworfQorCisvLyBSZXNvdXJjZSBjcmVh
dGlvbgorS0NhbnZhc1Jlc291cmNlICpLUmVuZGVyaW5nRGV2aWNlUXQ6OmNyZWF0ZVJlc291cmNl
KGNvbnN0IEtDUmVzb3VyY2VUeXBlICZ0eXBlKSBjb25zdAoreworICAgIHN3aXRjaCh0eXBlKQor
ICAgIHsKKyAgICAgICAgY2FzZSBSU19DTElQUEVSOgorICAgICAgICAgICAgcmV0dXJuIG5ldyBL
Q2FudmFzQ2xpcHBlclF0KCk7CisgICAgICAgIGNhc2UgUlNfTUFSS0VSOgorICAgICAgICAgICAg
cmV0dXJuIG5ldyBLQ2FudmFzTWFya2VyKCk7IC8vIFVzZSBkZWZhdWx0IGltcGxlbWVudGF0aW9u
Li4uCisgICAgICAgIGNhc2UgUlNfSU1BR0U6CisgICAgICAgICAgICAvLyByZXR1cm4gbmV3IEtD
YW52YXNJbWFnZVF0KCk7CisgICAgICAgIGNhc2UgUlNfRklMVEVSOgorICAgICAgICAgICAgLy8g
cmV0dXJuIG5ldyBLQ2FudmFzRmlsdGVyUXQoKTsKKyAgICAgICAgY2FzZSBSU19NQVNLRVI6Cisg
ICAgICAgICAgICAvLyByZXR1cm4gbmV3IEtDYW52YXNNYXNrZXJRdCgpOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXIgKktSZW5kZXJpbmdEZXZpY2VRdDo6Y3JlYXRlUGFpbnRTZXJ2ZXIoY29uc3QgS0NQYWlu
dFNlcnZlclR5cGUgJnR5cGUpIGNvbnN0Cit7CisgICAgc3dpdGNoKHR5cGUpCisgICAgeworICAg
ICAgICBjYXNlIFBTX1NPTElEOgorICAgICAgICAgICAgcmV0dXJuIG5ldyBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJTb2xpZFF0KCk7CisgICAgICAgIGNhc2UgUFNfUEFUVEVSTjoKKyAgICAgICAgICAg
IHJldHVybiBuZXcgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF0KCk7CisgICAgICAgIGNh
c2UgUFNfTElORUFSX0dSQURJRU5UOgorICAgICAgICAgICAgcmV0dXJuIG5ldyBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF0KCk7CisgICAgICAgIGNhc2UgUFNfUkFESUFMX0dS
QURJRU5UOgorICAgICAgICAgICAgcmV0dXJuIG5ldyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRp
YWxHcmFkaWVudFF0KCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICB9Cit9CisKK0tDYW52YXNGaWx0ZXJFZmZlY3QgKktSZW5kZXJpbmdEZXZpY2VRdDo6Y3Jl
YXRlRmlsdGVyRWZmZWN0KGNvbnN0IEtDRmlsdGVyRWZmZWN0VHlwZSAmdHlwZSkgY29uc3QKK3sK
KyAgICBxRGVidWcoIktSZW5kZXJpbmdEZXZpY2VRdDo6Y3JlYXRlRmlsdGVyRWZmZWN0KCkgVE9E
TyEiKTsKKyAgICByZXR1cm4gMDsKK30KKworS0NhbnZhc1BhdGggKktSZW5kZXJpbmdEZXZpY2VR
dDo6Y3JlYXRlUGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG5ldyBLQ2FudmFzUGF0aFF0KCk7
Cit9CisKKy8vIGl0ZW0gY3JlYXRpb24KK1JlbmRlclBhdGggKktSZW5kZXJpbmdEZXZpY2VRdDo6
Y3JlYXRlSXRlbShSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSwgU1ZHU3R5
bGVkRWxlbWVudCAqbm9kZSwgS0NhbnZhc1BhdGggKnBhdGgpIGNvbnN0Cit7CisgICAgUmVuZGVy
UGF0aCAqaXRlbSA9IG5ldyAoYXJlbmEpIFJlbmRlclBhdGhRdChzdHlsZSwgbm9kZSk7CisgICAg
aXRlbS0+c2V0UGF0aChwYXRoKTsKKyAgICByZXR1cm4gaXRlbTsKK30KKworS1JlbmRlcmluZ0Rl
dmljZSAqcmVuZGVyaW5nRGV2aWNlKCkKK3sKKyAgICBzdGF0aWMgS1JlbmRlcmluZ0RldmljZSAq
c2hhcmVkUmVuZGVyaW5nRGV2aWNlID0gbmV3IEtSZW5kZXJpbmdEZXZpY2VRdCgpOworICAgIHJl
dHVybiBzaGFyZWRSZW5kZXJpbmdEZXZpY2U7Cit9CisKK30KKworLy8gdmltOnRzPTQ6bm9ldApJ
bmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LQ2FudmFzUGF0aFF0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LQ2FudmFzUGF0aFF0LmgJKFJldmlzaW9u
IDApCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tDYW52YXNQYXRoUXQuaAkoUmV2aXNp
b24gMCkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CisgICAgICAgICAgICAg
ICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAg
ICAgICAgICAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuCisKKyAgICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgS0RFIHByb2plY3QKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgorKi8KKworI2lmbmRlZiBLQ2FudmFzUGF0aFF0X0gKKyNkZWZpbmUgS0Nh
bnZhc1BhdGhRdF9ICisKKyNpbmNsdWRlIDxRUGFpbnRlclBhdGg+CisKKyNpbmNsdWRlICJLQ2Fu
dmFzUGF0aC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEtDYW52YXNQYXRoUXQg
OiBwdWJsaWMgS0NhbnZhc1BhdGgKK3sKK3B1YmxpYzoKKyAgICBLQ2FudmFzUGF0aFF0KCk7Cisg
ICAgdmlydHVhbCB+S0NhbnZhc1BhdGhRdCgpOworCisgICAgdmlydHVhbCBib29sIGlzRW1wdHko
KSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBtb3ZlVG8oZmxvYXQgeCwgZmxvYXQgeSk7Cisg
ICAgdmlydHVhbCB2b2lkIGxpbmVUbyhmbG9hdCB4LCBmbG9hdCB5KTsKKyAgICB2aXJ0dWFsIHZv
aWQgY3VydmVUbyhmbG9hdCB4MSwgZmxvYXQgeTEsIGZsb2F0IHgyLCBmbG9hdCB5MiwgZmxvYXQg
eDMsIGZsb2F0IHkzKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VTdWJwYXRoKCk7CisKKyAgICB2
aXJ0dWFsIEZsb2F0UmVjdCBib3VuZGluZ0JveCgpOworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0
cm9rZUJvdW5kaW5nQm94KGNvbnN0IEtSZW5kZXJpbmdTdHJva2VQYWludGVyICZzdHJva2VQYWlu
dGVyKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3Ryb2tlQ29udGFpbnNQb2ludChjb25zdCBGbG9hdFBv
aW50ICZwb2ludCk7CisgICAgdmlydHVhbCBib29sIGNvbnRhaW5zUG9pbnQoY29uc3QgRmxvYXRQ
b2ludCAmcG9pbnQsIEtDV2luZFJ1bGUgcnVsZSk7CisKKyAgICAvLyBRdCBzcGVjaWZpYyBzdHVm
ZgorICAgIGNvbnN0IFFQYWludGVyUGF0aCAmcXRQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRo
OyB9CisKK3ByaXZhdGU6CisgICAgUVBhaW50ZXJQYXRoIG1fcGF0aDsKK307CisKK30KKworI2Vu
ZGlmCisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQv
S1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdC5jcHAJKFJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNl
cnZlclBhdHRlcm5RdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRm
b3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHFyZWN0Lmg+CisjaW5jbHVkZSA8cWltYWdl
Lmg+CisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8UVBvaW50Rj4KKyNpbmNsdWRlIDxR
UGFpbnRlclBhdGg+CisKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIktSZW5k
ZXJpbmdEZXZpY2VRdC5oIgorI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgorI2lu
Y2x1ZGUgIktSZW5kZXJpbmdGaWxsUGFpbnRlci5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdTdHJv
a2VQYWludGVyLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF0Lmgi
CisjaW5jbHVkZSAiS0NhbnZhc0ltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
S1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF0CitLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0
ZXJuUXQ6OktSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdCgpIDogS1JlbmRlcmluZ1BhaW50
U2VydmVyUGF0dGVybigpLCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdCgpCit7Cit9CisKK0tSZW5k
ZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdDo6fktSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5R
dCgpCit7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF0OjpyZW5kZXJQ
YXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoICpw
YXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAoreworICAgIFJlbmRlclN0eWxlICpy
ZW5kZXJTdHlsZSA9IHBhdGgtPnN0eWxlKCk7CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRR
dCAqcXRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdCAqPihj
b250ZXh0KTsKKyAgICBpZigodHlwZSAmIEFQUExZX1RPX0ZJTEwpICYmIEtTVkdQYWludGVyRmFj
dG9yeTo6aXNGaWxsZWQocmVuZGVyU3R5bGUpKQorICAgICAgICBxdENvbnRleHQtPmZpbGxQYXRo
KCk7CisgICAgaWYoKHR5cGUgJiBBUFBMWV9UT19TVFJPS0UpICYmIEtTVkdQYWludGVyRmFjdG9y
eTo6aXNTdHJva2VkKHJlbmRlclN0eWxlKSkKKyAgICAgICAgcXRDb250ZXh0LT5zdHJva2VQYXRo
KCk7Cit9CisKK2Jvb2wgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF0OjpzZXR1cChLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0ICpvYmplY3Qs
IEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit7CisjaWYgMAorICAgIEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0UXQgKnF0Q29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0UXQgKj4oY29udGV4dCk7CisgICAgUV9BU1NFUlQocXRDb250ZXh0ICE9IDApOworCisg
ICAgUVBhaW50ZXJQYXRoICpfcGF0aCA9IHN0YXRpY19jYXN0PFFQYWludGVyUGF0aCAqPihxdENv
bnRleHQtPnBhdGgoKSk7CisgICAgUV9BU1NFUlQoX3BhdGggIT0gMCk7CisgCisgICAgaWYobGlz
dGVuZXIoKSkKKyAgICAgICAgbGlzdGVuZXIoKS0+cmVzb3VyY2VOb3RpZmljYXRpb24oKTsKKwor
ICAgIFJlbmRlclN0eWxlICpyZW5kZXJTdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKKworICAgIHF0
Q29udGV4dC0+cGFpbnRlcigpLnNldFBlbihRdDo6Tm9QZW4pOworICAgIHF0Q29udGV4dC0+cGFp
bnRlcigpLnNldEJydXNoKFF0OjpOb0JydXNoKTsKKyAgICBRSW1hZ2UgKnBhdHRlcm5pbWFnZSA9
IG5ldyBRSW1hZ2UodGlsZSgpLT5iaXRzKCksIHRpbGUoKS0+d2lkdGgoKSwgdGlsZSgpLT5oZWln
aHQoKSwgUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOworICAgIHBhdHRlcm5p
bWFnZS0+c2V0QWxwaGFCdWZmZXIodHJ1ZSk7CisgICAgaWYodHlwZSAmIEFQUExZX1RPX0ZJTEwp
CisgICAgeworICAgICAgICAvL1FDb2xvciBjID0gY29sb3IoKTsKKyAgICAgICAgLy9jLnNldEFs
cGhhRihzdHlsZS0+ZmlsbFBhaW50ZXIoKS0+b3BhY2l0eSgpICogc3R5bGUtPm9wYWNpdHkoKSAq
IG9wYWNpdHkoKSk7CisgICAgICAgIEtSZW5kZXJpbmdGaWxsUGFpbnRlciBmaWxsUGFpbnRlciA9
IEtTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50ZXIocmVuZGVyU3R5bGUsIG9iamVjdCk7Cisg
ICAgICAgIFFCcnVzaCBicnVzaChRUGl4bWFwOjpmcm9tSW1hZ2UoKnBhdHRlcm5pbWFnZSkpOwor
ICAgICAgICBfcGF0aC0+c2V0RmlsbFJ1bGUoZmlsbFBhaW50ZXIuZmlsbFJ1bGUoKSA9PSBSVUxF
X0VWRU5PREQgPyBRdDo6T2RkRXZlbkZpbGwgOiBRdDo6V2luZGluZ0ZpbGwpOworICAgICAgICBx
dENvbnRleHQtPnBhaW50ZXIoKS5zZXRCcnVzaChicnVzaCk7CisgICAgfQorICAgIGlmKHR5cGUg
JiBBUFBMWV9UT19TVFJPS0UpCisgICAgeworICAgICAgICAvL1FDb2xvciBjID0gY29sb3IoKTsK
KyAgICAgICAgLy9jLnNldEFscGhhRihzdHlsZS0+c3Ryb2tlUGFpbnRlcigpLT5vcGFjaXR5KCkg
KiBzdHlsZS0+b3BhY2l0eSgpICogb3BhY2l0eSgpKTsKKyAgICAgICAgS1JlbmRlcmluZ1N0cm9r
ZVBhaW50ZXIgc3Ryb2tlUGFpbnRlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6c3Ryb2tlUGFpbnRl
cihyZW5kZXJTdHlsZSwgb2JqZWN0KTsKKworICAgICAgICBRUGVuIHBlbjsKKyAgICAgICAgUUJy
dXNoIGJydXNoKFFQaXhtYXA6OmZyb21JbWFnZSgqcGF0dGVybmltYWdlKSk7CisKKyAgICAgICAg
c2V0UGVuUHJvcGVydGllcyhzdHJva2VQYWludGVyLCBwZW4pOworICAgICAgICBwZW4uc2V0QnJ1
c2goYnJ1c2gpOworICAgICAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRQZW4ocGVuKTsKKyAg
ICB9CisgICAgcXRDb250ZXh0LT5wYWludGVyKCkuZHJhd1BhdGgoKl9wYXRoKTsKKworICAgIGRl
bGV0ZSBwYXR0ZXJuaW1hZ2U7CisjZW5kaWYKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQ6OnRlYXJkb3duKEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0ICosIGNvbnN0IFJlbmRlck9iamVjdCAqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3QK
K3sKK30KKwordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQ6OmRyYXcoS1JlbmRl
cmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGggKnBhdGgsIEtDUGFp
bnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgaWYoIXNldHVwKGNvbnRleHQsIHBhdGgs
IHR5cGUpKQorICAgICAgICByZXR1cm47CisKKyAgICByZW5kZXJQYXRoKGNvbnRleHQsIHBhdGgs
IHR5cGUpOworICAgIHRlYXJkb3duKGNvbnRleHQsIHBhdGgsIHR5cGUpOworfQorCit9CisKKy8v
IHZpbTp0cz00Om5vZXQKKwpJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LQ2FudmFz
Q2xpcHBlclF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LQ2Fu
dmFzQ2xpcHBlclF0LmgJKFJldmlzaW9uIDApCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0
L0tDYW52YXNDbGlwcGVyUXQuaAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxk
Zm94QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA1IEFwcGxlIENvbXB1dGVyLCBJ
bmMuCisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhaW50IHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3Vp
dGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKi8KKworI2lmbmRlZiBL
Q2FudmFzQ2xpcHBlclF0X2gKKyNkZWZpbmUgS0NhbnZhc0NsaXBwZXJRdF9oCisKKyNpbmNsdWRl
ICJLQ2FudmFzUmVzb3VyY2VzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS0Nh
bnZhc0NsaXBwZXJRdCA6IHB1YmxpYyBLQ2FudmFzQ2xpcHBlciB7CitwdWJsaWM6CisgICAgS0Nh
bnZhc0NsaXBwZXJRdCgpIHsgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBhcHBseUNsaXAoY29u
c3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkgY29uc3Q7Cit9OworCit9CisKKyNlbmRpZgpJbmRl
eDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJRdC5jcHAJKFJldmlzaW9uIDApCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tS
ZW5kZXJpbmdQYWludFNlcnZlclF0LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5u
IDx3aWxkZm94QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RF
IHByb2plY3QKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxRUGVuPgorI2luY2x1ZGUgPFFW
ZWN0b3I+CisKKyNpbmNsdWRlICJLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlci5oIgorI2luY2x1ZGUg
IktSZW5kZXJpbmdQYWludFNlcnZlclF0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworS1Jl
bmRlcmluZ1BhaW50U2VydmVyUXQ6OktSZW5kZXJpbmdQYWludFNlcnZlclF0KCkKK3sKK30KKwor
S1JlbmRlcmluZ1BhaW50U2VydmVyUXQ6On5LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdCgpCit7Cit9
CisKK3ZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUXQ6OnNldFBlblByb3BlcnRpZXMoY29uc3Qg
S1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIgJnN0cm9rZVBhaW50ZXIsIFFQZW4gJnBlbikgY29uc3QK
K3sKKyAgICBwZW4uc2V0V2lkdGhGKHN0cm9rZVBhaW50ZXIuc3Ryb2tlV2lkdGgoKSk7CisgICAg
aWYoc3Ryb2tlUGFpbnRlci5zdHJva2VDYXBTdHlsZSgpID09IENBUF9CVVRUKQorICAgICAgICBw
ZW4uc2V0Q2FwU3R5bGUoUXQ6OkZsYXRDYXApOworICAgIGVsc2UgaWYoc3Ryb2tlUGFpbnRlci5z
dHJva2VDYXBTdHlsZSgpID09IENBUF9ST1VORCkKKyAgICAgICAgcGVuLnNldENhcFN0eWxlKFF0
OjpSb3VuZENhcCk7CisKKyAgICBpZihzdHJva2VQYWludGVyLnN0cm9rZUpvaW5TdHlsZSgpID09
IEpPSU5fTUlURVIpCisgICAgeworICAgICAgICBwZW4uc2V0Sm9pblN0eWxlKFF0OjpNaXRlckpv
aW4pOworICAgICAgICBwZW4uc2V0TWl0ZXJMaW1pdCgocXJlYWwpc3Ryb2tlUGFpbnRlci5zdHJv
a2VNaXRlckxpbWl0KCkpOworICAgIH0KKyAgICBlbHNlIGlmKHN0cm9rZVBhaW50ZXIuc3Ryb2tl
Sm9pblN0eWxlKCkgPT0gSk9JTl9ST1VORCkKKyAgICAgICAgcGVuLnNldEpvaW5TdHlsZShRdDo6
Um91bmRKb2luKTsKKworICAgIEtDRGFzaEFycmF5IGRhc2hlcyA9IHN0cm9rZVBhaW50ZXIuZGFz
aEFycmF5KCk7CisgICAgdW5zaWduZWQgaW50IGRhc2hMZW5ndGggPSAhZGFzaGVzLmlzRW1wdHko
KSA/IGRhc2hlcy5jb3VudCgpIDogMDsKKyAgICBpZihkYXNoTGVuZ3RoKQorICAgIHsKKyAgICAg
ICAgUVZlY3RvcjxxcmVhbD4gcGF0dGVybjsKKyAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0g
KGRhc2hMZW5ndGggJSAyKSA9PSAwID8gZGFzaExlbmd0aCA6IGRhc2hMZW5ndGggKiAyOworCisg
ICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAg
ICAgcGF0dGVybi5hcHBlbmQoZGFzaGVzW2kgJSBkYXNoTGVuZ3RoXSAvIChmbG9hdClwZW4ud2lk
dGhGKCkpOworCisgICAgICAgIHBlbi5zZXREYXNoUGF0dGVybihwYXR0ZXJuKTsKKyAgICAgICAg
Ly8gVE9ETzogZGFzaC1vZmZzZXQsIGRvZXMvd2lsbCBxdDQgQVBJIGFsbG93IGl0PyAoUm9iKQor
ICAgIH0KK30KKworfQorCisvLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tjYW52YXMv
ZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQuaAko
UmV2aXNpb24gMCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50
U2VydmVyU29saWRRdC5oCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hA
a2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
cHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5k
ZWYgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdF9ICisjZGVmaW5lIEtSZW5kZXJpbmdQYWlu
dFNlcnZlclNvbGlkUXRfSAorCisjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyUXQuaCIK
KyNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisgICAgCitjbGFzcyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF0IDogcHVibGlj
IEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdAoreworcHVibGljOgorICAg
IEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQoKTsKKyAgICB2aXJ0dWFsIH5LUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJTb2xpZFF0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCAqY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCAqcGF0aCwgS0NQYWludFRh
cmdldFR5cGUgdHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNldHVwKEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0ICpjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QgKm9iamVjdCwgS0NQYWlu
dFRhcmdldFR5cGUgdHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHRlYXJkb3duKEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QgKm9iamVjdCwg
S0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHZvaWQgcmVuZGVyUGF0aChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4dCwgY29uc3Qg
UmVuZGVyUGF0aCAqcGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3Q7Cit9OworCit9
CisKKyNlbmRpZgorCisvLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2
aWNlL3F0L0tSZW5kZXJpbmdEZXZpY2VRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZh
cy9kZXZpY2UvcXQvS1JlbmRlcmluZ0RldmljZVF0LmgJKFJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdEZXZpY2VRdC5oCShSZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDk1IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtv
bGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQs
IDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKworICAgIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBLREUgcHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgS1JlbmRlcmluZ0RldmljZVF0X0gKKyNkZWZpbmUg
S1JlbmRlcmluZ0RldmljZVF0X0gKKworI2luY2x1ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgPFFQ
YWludGVyUGF0aD4KKworI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0IDogcHVibGljIEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0Cit7CitwdWJsaWM6CisgICAgS1JlbmRlcmluZ0RldmljZUNv
bnRleHRRdChRUGFpbnRlciAqcGFpbnRlcik7CisgICAgdmlydHVhbCB+S1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHRRdCgpOworCisgICAgdmlydHVhbCBLQ2FudmFzTWF0cml4IGNvbmNhdENUTShjb25z
dCBLQ2FudmFzTWF0cml4ICZ3b3JsZE1hdHJpeCk7CisgICAgdmlydHVhbCBLQ2FudmFzTWF0cml4
IGN0bSgpIGNvbnN0OworCisgICAgdmlydHVhbCBJbnRSZWN0IG1hcEZyb21WaXN1YWwoY29uc3Qg
SW50UmVjdCAmcmVjdCk7CisgICAgdmlydHVhbCBJbnRSZWN0IG1hcFRvVmlzdWFsKGNvbnN0IElu
dFJlY3QgJnJlY3QpOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyUGF0aCgpOworICAgIHZpcnR1
YWwgdm9pZCBhZGRQYXRoKGNvbnN0IEtDYW52YXNQYXRoICpwYXRoKTsKKworICAgIHZpcnR1YWwg
R3JhcGhpY3NDb250ZXh0ICpjcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICAKKyAgICAvLyBR
dCBzcGVjaWZpYyBzdHVmZgorICAgIFFQYWludGVyICZwYWludGVyKCk7CisgICAgUVJlY3RGIHBh
dGhCQm94KCkgY29uc3Q7CisKKyAgICB2b2lkIHNldEZpbGxSdWxlKEtDV2luZFJ1bGUgcnVsZSk7
CisKKyAgICB2b2lkIGZpbGxQYXRoKCk7CisgICAgdm9pZCBzdHJva2VQYXRoKCk7CisKK3ByaXZh
dGU6CisgICAgUVBhaW50ZXIgKm1fcGFpbnRlcjsKKyAgICBRUGFpbnRlclBhdGggbV9wYXRoOwor
fTsKKworY2xhc3MgS1JlbmRlcmluZ0RldmljZVF0IDogcHVibGljIEtSZW5kZXJpbmdEZXZpY2UK
K3sKK3B1YmxpYzoKKyAgICBLUmVuZGVyaW5nRGV2aWNlUXQoKTsKKyAgICB2aXJ0dWFsIH5LUmVu
ZGVyaW5nRGV2aWNlUXQoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0J1ZmZlcmVkKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgS1JlbmRlcmluZ0RldmljZUNvbnRleHQg
KnBvcENvbnRleHQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaENvbnRleHQoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQgKmNvbnRleHQpOworCisgICAgLy8gY29udGV4dCBtYW5hZ2VtZW50LgorICAg
IEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQgKnF0Q29udGV4dCgpIGNvbnN0OworICAgIHZpcnR1
YWwgS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHRGb3JJbWFnZShLQ2FudmFzSW1hZ2Ug
KmltYWdlKSBjb25zdDsKKworICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyBzdHJpbmdGb3JQ
YXRoKGNvbnN0IEtDYW52YXNQYXRoICpwYXRoKTsKKworICAgIC8vIFJlc291cmNlIGNyZWF0aW9u
CisgICAgdmlydHVhbCBLQ2FudmFzUmVzb3VyY2UgKmNyZWF0ZVJlc291cmNlKGNvbnN0IEtDUmVz
b3VyY2VUeXBlICZ0eXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEtSZW5kZXJpbmdQYWludFNlcnZl
ciAqY3JlYXRlUGFpbnRTZXJ2ZXIoY29uc3QgS0NQYWludFNlcnZlclR5cGUgJnR5cGUpIGNvbnN0
OworICAgIHZpcnR1YWwgS0NhbnZhc0ZpbHRlckVmZmVjdCAqY3JlYXRlRmlsdGVyRWZmZWN0KGNv
bnN0IEtDRmlsdGVyRWZmZWN0VHlwZSAmdHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCBLQ2FudmFz
UGF0aCAqY3JlYXRlUGF0aCgpIGNvbnN0OworCisgICAgLy8gaXRlbSBjcmVhdGlvbgorICAgIHZp
cnR1YWwgUmVuZGVyUGF0aCAqY3JlYXRlSXRlbShSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0
eWxlICpzdHlsZSwgU1ZHU3R5bGVkRWxlbWVudCAqbm9kZSwgS0NhbnZhc1BhdGggKnBhdGgpIGNv
bnN0OworfTsKKworfQorCisjZW5kaWYKKworLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29y
ZS9rY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZl
clBhdHRlcm5RdC5oCShSZXZpc2lvbiAwKQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9L
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQuaAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
MCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAy
MDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgS0RFIHByb2plY3QKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaWZuZGVmIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdF9ICisjZGVm
aW5lIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdF9ICisKKyNpbmNsdWRlICJLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJRdC5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlclBhdHRl
cm4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJQYXR0ZXJuUXQgOiBwdWJsaWMgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJRdAoreworcHVibGljOgorICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdCgp
OworICAgIHZpcnR1YWwgfktSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdCgpOworCisgICAg
dmlydHVhbCB2b2lkIGRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQsIGNvbnN0
IFJlbmRlclBhdGggKnBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBzZXR1cChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4dCwgY29uc3Qg
UmVuZGVyT2JqZWN0ICpvYmplY3QsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCB0ZWFyZG93bihLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29udGV4dCwg
Y29uc3QgUmVuZGVyT2JqZWN0ICpvYmplY3QsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0
OworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQgKmNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGggKnBhdGgsIEtDUGFpbnRUYXJn
ZXRUeXBlIHR5cGUpIGNvbnN0OworfTsKKworfQorCisjZW5kaWYKKworLy8gdmltOnRzPTQ6bm9l
dApJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJR
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1Bh
aW50U2VydmVyUXQuaAkoUmV2aXNpb24gMCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQv
S1JlbmRlcmluZ1BhaW50U2VydmVyUXQuaAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5u
IDx3aWxkZm94QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RF
IHByb2plY3QKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaWZuZGVmIEtSZW5kZXJpbmdQYWludFNlcnZlclF0X0gKKyNkZWZpbmUgS1JlbmRlcmlu
Z1BhaW50U2VydmVyUXRfSAorCisjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyLmgiCisK
K2NsYXNzIFFQZW47CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS1JlbmRlcmluZ1N0
cm9rZVBhaW50ZXI7CisKKy8vIFRoaXMgY2xhc3MgaXMgZGVzaWduZWQgYXMgYW4gZXh0ZW5zaW9u
IHRvCisvLyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIsIGl0IHdvbid0IGluaGVyaXQgZnJvbSBpdC4K
K2NsYXNzIEtSZW5kZXJpbmdQYWludFNlcnZlclF0Cit7CitwdWJsaWM6CisgICAgS1JlbmRlcmlu
Z1BhaW50U2VydmVyUXQoKTsKKyAgICB+S1JlbmRlcmluZ1BhaW50U2VydmVyUXQoKTsKKworICAg
IHZvaWQgc2V0UGVuUHJvcGVydGllcyhjb25zdCBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlciAmc3Ry
b2tlUGFpbnRlciwgUVBlbiAmcGVuKSBjb25zdDsKK307CisKK30KKworI2VuZGlmCisKKy8vIHZp
bTp0cz00Om5vZXQK
</data>
<flag name="review"
          id="3153"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10124</attachid>
            <date>2006-08-18 05:34:09 -0700</date>
            <delta_ts>2006-08-18 11:18:09 -0700</delta_ts>
            <desc>Corrected patch</desc>
            <filename>kcanvas-device-qt.diff</filename>
            <type>text/plain</type>
            <size>58920</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiAxNTkyNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDMgKzEsOTcgQEAKKzIwMDYtMDgtMTggIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGaXhlczogaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDQ3MAorICAgICAgICBUaGUgUXQgcGxhdGZvcm0gbmVlZHMgYSBLQ2FudmFzIGRldmljZS4K
KworICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F0L0tDYW52YXNDbGlwcGVyUXQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OktDYW52YXNDbGlwcGVyUXQ6OmFwcGx5Q2xpcCk6CisgICAg
ICAgICoga2NhbnZhcy9kZXZpY2UvcXQvS0NhbnZhc0NsaXBwZXJRdC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OktDYW52YXNDbGlwcGVyUXQ6OktDYW52YXNDbGlwcGVyUXQpOgorICAgICAg
ICAqIGtjYW52YXMvZGV2aWNlL3F0L0tDYW52YXNQYXRoUXQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OktDYW52YXNQYXRoUXQ6OktDYW52YXNQYXRoUXQpOgorICAgICAgICAoV2ViQ29y
ZTo6S0NhbnZhc1BhdGhRdDo6fktDYW52YXNQYXRoUXQpOgorICAgICAgICAoV2ViQ29yZTo6S0Nh
bnZhc1BhdGhRdDo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpLQ2FudmFzUGF0aFF0Ojpt
b3ZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6S0NhbnZhc1BhdGhRdDo6bGluZVRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OktDYW52YXNQYXRoUXQ6OmN1cnZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6
S0NhbnZhc1BhdGhRdDo6Y2xvc2VTdWJwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OktDYW52YXNQ
YXRoUXQ6OmJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OktDYW52YXNQYXRoUXQ6OnN0
cm9rZUJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OktDYW52YXNQYXRoUXQ6OnN0cm9r
ZUNvbnRhaW5zUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6S0NhbnZhc1BhdGhRdDo6Y29udGFp
bnNQb2ludCk6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXQvS0NhbnZhc1BhdGhRdC5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OktDYW52YXNQYXRoUXQ6OnF0UGF0aCk6CisgICAgICAg
ICoga2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ0RldmljZVF0LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dFF0KToKKyAgICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQ6
On5LUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0KToKKyAgICAgICAgKFdlYkNvcmU6OktSZW5kZXJp
bmdEZXZpY2VDb250ZXh0UXQ6OmNvbmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dFF0OjpjdG0pOgorICAgICAgICAoV2ViQ29yZTo6S1JlbmRlcmluZ0Rl
dmljZUNvbnRleHRRdDo6bWFwRnJvbVZpc3VhbCk6CisgICAgICAgIChXZWJDb3JlOjpLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dFF0OjptYXBUb1Zpc3VhbCk6CisgICAgICAgIChXZWJDb3JlOjpLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpjbGVhclBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6S1Jl
bmRlcmluZ0RldmljZUNvbnRleHRRdDo6YWRkUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpjcmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdDo6cGFpbnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpwYXRoQkJveCk6CisgICAgICAgIChX
ZWJDb3JlOjpLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpzZXRGaWxsUnVsZSk6CisgICAgICAg
IChXZWJDb3JlOjpLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpmaWxsUGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpzdHJva2VQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OktSZW5kZXJpbmdEZXZpY2VRdDo6S1JlbmRlcmluZ0RldmljZVF0KToKKyAg
ICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdEZXZpY2VRdDo6fktSZW5kZXJpbmdEZXZpY2VRdCk6
CisgICAgICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nRGV2aWNlUXQ6OnBvcENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6S1JlbmRlcmluZ0RldmljZVF0OjpwdXNoQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpLUmVuZGVyaW5nRGV2aWNlUXQ6OnF0Q29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpLUmVuZGVyaW5nRGV2aWNlUXQ6OmNvbnRleHRGb3JJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpLUmVuZGVyaW5nRGV2aWNlUXQ6OnN0cmluZ0ZvclBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6S1JlbmRlcmluZ0RldmljZVF0OjpjcmVhdGVSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpLUmVuZGVyaW5nRGV2aWNlUXQ6OmNyZWF0ZVBhaW50U2VydmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OktSZW5kZXJpbmdEZXZpY2VRdDo6Y3JlYXRlRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OktSZW5kZXJpbmdEZXZpY2VRdDo6Y3JlYXRlUGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpLUmVuZGVyaW5nRGV2aWNlUXQ6OmNyZWF0ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6cmVu
ZGVyaW5nRGV2aWNlKToKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nRGV2
aWNlUXQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nRGV2aWNlUXQ6Omlz
QnVmZmVyZWQpOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNl
cnZlckdyYWRpZW50UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZpbGxfY29sb3Jf
YXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6S1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3Jh
ZGllbnRRdDo6S1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRRdCk6CisgICAgICAg
IChXZWJDb3JlOjpLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF0OjpyZW5kZXJQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRp
ZW50UXQ6OnNldHVwKToKKyAgICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdQYWludFNlcnZlckxp
bmVhckdyYWRpZW50UXQ6OnRlYXJkb3duKToKKyAgICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdQ
YWludFNlcnZlckxpbmVhckdyYWRpZW50UXQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6S1Jl
bmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdDo6S1JlbmRlcmluZ1BhaW50U2VydmVy
UmFkaWFsR3JhZGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJSYWRpYWxHcmFkaWVudFF0OjpzZXR1cCk6CisgICAgICAgIChXZWJDb3JlOjpLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF0OjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OktS
ZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50UXQ6OnRlYXJkb3duKToKKyAgICAgICAg
KFdlYkNvcmU6OktSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50UXQ6OnJlbmRlclBh
dGgpOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50UXQuaDogQWRkZWQuCisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmlu
Z1BhaW50U2VydmVyUGF0dGVyblF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQ6OktSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5R
dCk6CisgICAgICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQ6On5L
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQpOgorICAgICAgICAoV2ViQ29yZTo6S1JlbmRl
cmluZ1BhaW50U2VydmVyUGF0dGVyblF0OjpyZW5kZXJQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OktSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdDo6c2V0dXApOgorICAgICAgICAoV2ViQ29y
ZTo6S1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF0Ojp0ZWFyZG93bik6CisgICAgICAgIChX
ZWJDb3JlOjpLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQ6OmRyYXcpOgorICAgICAgICAq
IGtjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6S1JlbmRlcmluZ1BhaW50U2VydmVyUXQ6OktS
ZW5kZXJpbmdQYWludFNlcnZlclF0KToKKyAgICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdQYWlu
dFNlcnZlclF0Ojp+S1JlbmRlcmluZ1BhaW50U2VydmVyUXQpOgorICAgICAgICAoV2ViQ29yZTo6
S1JlbmRlcmluZ1BhaW50U2VydmVyUXQ6OnNldFBlblByb3BlcnRpZXMpOgorICAgICAgICAqIGtj
YW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlclF0Lmg6IEFkZGVkLgorICAgICAg
ICAqIGtjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQ6OktS
ZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQpOgorICAgICAgICAoV2ViQ29yZTo6S1JlbmRlcmlu
Z1BhaW50U2VydmVyU29saWRRdDo6fktSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQpOgorICAg
ICAgICAoV2ViQ29yZTo6S1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdDo6ZHJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF0OjpzZXR1cCk6CisgICAg
ICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF0Ojp0ZWFyZG93bik6Cisg
ICAgICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF0OjpyZW5kZXJQYXRo
KToKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xp
ZFF0Lmg6IEFkZGVkLgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F0L1JlbmRlclBhdGhRdC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aFF0OjpSZW5kZXJQYXRoUXQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aFF0OjpkcmF3TWFya2Vyc0lmTmVlZGVkKToK
KyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdC9SZW5kZXJQYXRoUXQuaDogQWRkZWQuCisKIDIw
MDYtMDgtMTcgIERhdmlkIEhhcnJpc29uICA8aGFycmlzb25AYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IE1hY2llai4KSW5kZXg6IHF0L0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRp
ZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0L0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50
UXQuY3BwCShSZXZpc2lvbiAwKQorKysgcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRR
dC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjg2IEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4K
KyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxRUG9pbnRGPgorCisjaW5jbHVk
ZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJLQ2FudmFzTWF0cml4LmgiCisjaW5jbHVkZSAi
S1JlbmRlcmluZ0RldmljZVF0LmgiCisjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgi
CisjaW5jbHVkZSAiS1JlbmRlcmluZ0ZpbGxQYWludGVyLmgiCisjaW5jbHVkZSAiS1JlbmRlcmlu
Z1N0cm9rZVBhaW50ZXIuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVu
dFF0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBmaWxsX2NvbG9yX2FycmF5KFFH
cmFkaWVudCYgZ3JhZGllbnQsIGNvbnN0IFZlY3RvcjxLQ0dyYWRpZW50U3RvcD4mIHN0b3BzLCBm
bG9hdCBvcGFjaXR5KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdG9wcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBmbG9hdCBvZmZzZXQgPSBzdG9wc1tpXS5maXJzdDsKKyAgICAg
ICAgQ29sb3IgY29sb3IgPSBzdG9wc1tpXS5zZWNvbmQ7CisgICAgICAgIAorICAgICAgICBRQ29s
b3IgYyhjb2xvci5yZWQoKSwgY29sb3IuZ3JlZW4oKSwgY29sb3IuYmx1ZSgpKTsKKyAgICAgICAg
Yy5zZXRBbHBoYShpbnQoY29sb3IuYWxwaGEoKSAqIG9wYWNpdHkpKTsKKworICAgICAgICBncmFk
aWVudC5zZXRDb2xvckF0KG9mZnNldCwgYyk7CisgICAgfQorfQorCisvLyBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF0CitLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFk
aWVudFF0OjpLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF0KCkKKyAgICA6IEtS
ZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50KCkKKyAgICAgICwgS1JlbmRlcmluZ1Bh
aW50U2VydmVyUXQoKQoreworfQorCit2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdy
YWRpZW50UXQ6OnJlbmRlclBhdGgoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFJlbmRlclBhdGgqIHBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit7Cisg
ICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gcGF0aC0+c3R5bGUoKTsKKyAgICBLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dFF0KiBxdENvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dFF0Kj4oY29udGV4dCk7CisKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19GSUxM
KSAmJiBLU1ZHUGFpbnRlckZhY3Rvcnk6OmlzRmlsbGVkKHJlbmRlclN0eWxlKSkgeworICAgICAg
ICBxdENvbnRleHQtPmZpbGxQYXRoKCk7CisgICAgfQorCisgICAgaWYgKCh0eXBlICYgQVBQTFlf
VE9fU1RST0tFKSAmJiBLU1ZHUGFpbnRlckZhY3Rvcnk6OmlzU3Ryb2tlZChyZW5kZXJTdHlsZSkp
IHsKKyAgICAgICAgcXRDb250ZXh0LT5zdHJva2VQYXRoKCk7CisgICAgfQorfQorCitib29sIEtS
ZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50UXQ6OnNldHVwKEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgS0NQYWludFRh
cmdldFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0KiBx
dENvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0Kj4oY29udGV4
dCk7CisgICAgUV9BU1NFUlQocXRDb250ZXh0ICE9IDApOworCisgICAgaWYgKGxpc3RlbmVyKCkp
CisgICAgICAgIGxpc3RlbmVyKCktPnJlc291cmNlTm90aWZpY2F0aW9uKCk7CisKKyAgICBSZW5k
ZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CisKKyAgICBkb3VibGUgeDEs
IHgyLCB5MSwgeTI7CisgICAgaWYgKGJvdW5kaW5nQm94TW9kZSgpKSB7CisgICAgICAgIFFSZWN0
RiBiYm94ID0gcXRDb250ZXh0LT5wYXRoQkJveCgpOworICAgICAgICB4MSA9IGRvdWJsZShiYm94
LmxlZnQoKSkgKyAoZG91YmxlKGdyYWRpZW50U3RhcnQoKS54KCkgLyAxMDAuMCkgKiBkb3VibGUo
YmJveC53aWR0aCgpKSk7CisgICAgICAgIHkxID0gZG91YmxlKGJib3gudG9wKCkpICsgKGRvdWJs
ZShncmFkaWVudFN0YXJ0KCkueSgpIC8gMTAwLjApICogZG91YmxlKGJib3guaGVpZ2h0KCkpKTsK
KyAgICAgICAgeDIgPSBkb3VibGUoYmJveC5sZWZ0KCkpICsgKGRvdWJsZShncmFkaWVudEVuZCgp
LngoKSAvIDEwMC4wKSAgKiBkb3VibGUoYmJveC53aWR0aCgpKSk7CisgICAgICAgIHkyID0gZG91
YmxlKGJib3gudG9wKCkpICsgKGRvdWJsZShncmFkaWVudEVuZCgpLnkoKSAvIDEwMC4wKSAqIGRv
dWJsZShiYm94LmhlaWdodCgpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgeDEgPSBncmFkaWVu
dFN0YXJ0KCkueCgpOworICAgICAgICB5MSA9IGdyYWRpZW50U3RhcnQoKS55KCk7CisgICAgICAg
IHgyID0gZ3JhZGllbnRFbmQoKS54KCk7CisgICAgICAgIHkyID0gZ3JhZGllbnRFbmQoKS55KCk7
CisgICAgfQorCisgICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0UGVuKFF0OjpOb1Blbik7Cisg
ICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0QnJ1c2goUXQ6Ok5vQnJ1c2gpOworCisgICAgUUxp
bmVhckdyYWRpZW50IGdyYWRpZW50KFFQb2ludEYoeDEsIHkxKSwgUVBvaW50Rih4MiwgeTIpKTsK
KyAgICBpZiAoc3ByZWFkTWV0aG9kKCkgPT0gU1BSRUFETUVUSE9EX1JFUEVBVCkgeworICAgICAg
ICBncmFkaWVudC5zZXRTcHJlYWQoUUdyYWRpZW50OjpSZXBlYXRTcHJlYWQpOworICAgIH0gZWxz
ZSBpZiAoc3ByZWFkTWV0aG9kKCkgPT0gU1BSRUFETUVUSE9EX1JFRkxFQ1QpIHsKKyAgICAgICAg
Z3JhZGllbnQuc2V0U3ByZWFkKFFHcmFkaWVudDo6UmVmbGVjdFNwcmVhZCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZ3JhZGllbnQuc2V0U3ByZWFkKFFHcmFkaWVudDo6UGFkU3ByZWFkKTsKKyAg
ICB9CisKKyAgICBkb3VibGUgb3BhY2l0eSA9IDEuMDsKKworICAgIC8vIFRPRE86IEdyYWRpZW50
IHRyYW5zZm9ybSArIG9wYWNpdHkgZml4ZXMhIAorCisgICAgaWYgKCh0eXBlICYgQVBQTFlfVE9f
RklMTCkgJiYgS1NWR1BhaW50ZXJGYWN0b3J5Ojppc0ZpbGxlZChyZW5kZXJTdHlsZSkpIHsKKyAg
ICAgICAgS1JlbmRlcmluZ0ZpbGxQYWludGVyIGZpbGxQYWludGVyID0gS1NWR1BhaW50ZXJGYWN0
b3J5OjpmaWxsUGFpbnRlcihyZW5kZXJTdHlsZSwgb2JqZWN0KTsKKyAgICAgICAgZmlsbF9jb2xv
cl9hcnJheShncmFkaWVudCwgZ3JhZGllbnRTdG9wcygpLCBvcGFjaXR5KTsKKworICAgICAgICBR
QnJ1c2ggYnJ1c2goZ3JhZGllbnQpOworCisgICAgICAgIHF0Q29udGV4dC0+cGFpbnRlcigpLnNl
dEJydXNoKGJydXNoKTsKKyAgICAgICAgcXRDb250ZXh0LT5zZXRGaWxsUnVsZShmaWxsUGFpbnRl
ci5maWxsUnVsZSgpKTsKKyAgICB9CisKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19TVFJPS0Up
ICYmIEtTVkdQYWludGVyRmFjdG9yeTo6aXNTdHJva2VkKHJlbmRlclN0eWxlKSkgeworICAgICAg
ICBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlciBzdHJva2VQYWludGVyID0gS1NWR1BhaW50ZXJGYWN0
b3J5OjpzdHJva2VQYWludGVyKHJlbmRlclN0eWxlLCBvYmplY3QpOworICAgICAgICBmaWxsX2Nv
bG9yX2FycmF5KGdyYWRpZW50LCBncmFkaWVudFN0b3BzKCksIG9wYWNpdHkpOworCisgICAgICAg
IFFQZW4gcGVuOworICAgICAgICBRQnJ1c2ggYnJ1c2goZ3JhZGllbnQpOworCisgICAgICAgIHNl
dFBlblByb3BlcnRpZXMoc3Ryb2tlUGFpbnRlciwgcGVuKTsKKyAgICAgICAgcGVuLnNldEJydXNo
KGJydXNoKTsKKworICAgICAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRQZW4ocGVuKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJM
aW5lYXJHcmFkaWVudFF0Ojp0ZWFyZG93bihLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0
IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdAoreworfQorCit2b2lkIEtS
ZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50UXQ6OmRyYXcoS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgsIEtDUGFpbnRUYXJnZXRU
eXBlIHR5cGUpIGNvbnN0Cit7CisgICAgaWYgKCFzZXR1cChjb250ZXh0LCBwYXRoLCB0eXBlKSkg
eworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVuZGVyUGF0aChjb250ZXh0LCBwYXRo
LCB0eXBlKTsKKyAgICB0ZWFyZG93bihjb250ZXh0LCBwYXRoLCB0eXBlKTsKK30KKworLy8gS1Jl
bmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdAorS1JlbmRlcmluZ1BhaW50U2VydmVy
UmFkaWFsR3JhZGllbnRRdDo6S1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdCgp
CisgICAgOiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCgpCit7Cit9CisKK2Jv
b2wgS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdDo6c2V0dXAoS1JlbmRlcmlu
Z0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBLQ1Bh
aW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAoreworICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
UXQqIHF0Q29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQqPihj
b250ZXh0KTsKKyAgICBRX0FTU0VSVChxdENvbnRleHQgIT0gMCk7CisKKyAgICBpZiAobGlzdGVu
ZXIoKSkgeworICAgICAgICBsaXN0ZW5lcigpLT5yZXNvdXJjZU5vdGlmaWNhdGlvbigpOworICAg
IH0KKworICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKKwor
ICAgIHF0Q29udGV4dC0+cGFpbnRlcigpLnNldFBlbihRdDo6Tm9QZW4pOworICAgIHF0Q29udGV4
dC0+cGFpbnRlcigpLnNldEJydXNoKFF0OjpOb0JydXNoKTsKKyAgICBRTWF0cml4IG1hdCA9IHF0
Q29udGV4dC0+Y3RtKCkubWF0cml4KCk7CisKKyAgICBkb3VibGUgY3gsIGZ4LCBjeSwgZnksIHI7
CisgICAgaWYgKGJvdW5kaW5nQm94TW9kZSgpKSB7CisgICAgICAgIFFSZWN0RiBiYm94ID0gcXRD
b250ZXh0LT5wYXRoQkJveCgpOworICAgICAgICBjeCA9IGRvdWJsZShiYm94LmxlZnQoKSkgKyAo
ZG91YmxlKGdyYWRpZW50Q2VudGVyKCkueCgpIC8gMTAwLjApICogZG91YmxlKGJib3gud2lkdGgo
KSkpOworICAgICAgICBjeSA9IGRvdWJsZShiYm94LnRvcCgpKSArIChkb3VibGUoZ3JhZGllbnRD
ZW50ZXIoKS55KCkgLyAxMDAuMCkgKiBkb3VibGUoYmJveC5oZWlnaHQoKSkpOworICAgICAgICBm
eCA9IGRvdWJsZShiYm94LmxlZnQoKSkgKyAoZG91YmxlKGdyYWRpZW50Rm9jYWwoKS54KCkgLyAx
MDAuMCkgKiBkb3VibGUoYmJveC53aWR0aCgpKSkgLSBjeDsKKyAgICAgICAgZnkgPSBkb3VibGUo
YmJveC50b3AoKSkgKyAoZG91YmxlKGdyYWRpZW50Rm9jYWwoKS55KCkgLyAxMDAuMCkgKiBkb3Vi
bGUoYmJveC5oZWlnaHQoKSkpIC0gY3k7CisgICAgICAgIHIgPSBkb3VibGUoZ3JhZGllbnRSYWRp
dXMoKSAvIDEwMC4wKSAqIChzcXJ0KHBvdyhiYm94LndpZHRoKCksIDIpICsgcG93KGJib3guaGVp
Z2h0KCksIDIpKSk7CisKKyAgICAgICAgZmxvYXQgd2lkdGggPSBiYm94LndpZHRoKCk7CisgICAg
ICAgIGZsb2F0IGhlaWdodCA9IGJib3guaGVpZ2h0KCk7CisKKyAgICAgICAgaW50IGRpZmYgPSBp
bnQod2lkdGggLSBoZWlnaHQpOyAvLyBhbGxvdyBzbGlnaHQgdG9sZXJhbmNlCisgICAgICAgIGlm
ICghKGRpZmYgPiAtMiAmJiBkaWZmIDwgMikpIHsKKyAgICAgICAgICAgIC8vIG1ha2UgZWxsaXB0
aWNhbCBvciBjaXJjdWxhciBkZXBlbmRpbmcgb24gYmJveCBhc3BlY3QgcmF0aW8KKyAgICAgICAg
ICAgIGZsb2F0IHJhdGlvWCA9ICh3aWR0aCAvIGhlaWdodCk7CisgICAgICAgICAgICBmbG9hdCBy
YXRpb1kgPSAoaGVpZ2h0IC8gd2lkdGgpOworICAgICAgICAgICAgbWF0LnNjYWxlKCh3aWR0aCA+
IGhlaWdodCkgPyAxIDogcmF0aW9YLCAod2lkdGggPiBoZWlnaHQpID8gcmF0aW9ZIDogMSk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBjeCA9IGdyYWRpZW50Q2VudGVyKCkueCgp
OworICAgICAgICBjeSA9IGdyYWRpZW50Q2VudGVyKCkueSgpOworCisgICAgICAgIGZ4ID0gZ3Jh
ZGllbnRGb2NhbCgpLngoKTsKKyAgICAgICAgZnkgPSBncmFkaWVudEZvY2FsKCkueSgpOworCisg
ICAgICAgIGZ4IC09IGN4OworICAgICAgICBmeSAtPSBjeTsKKworICAgICAgICByID0gZ3JhZGll
bnRSYWRpdXMoKTsKKyAgICB9CisKKyAgICBpZiAoc3FydChmeCAqIGZ4ICsgZnkgKiBmeSkgPiBy
KSB7CisgICAgICAgIC8vIFNwZWM6IElmIChmeCwgZnkpIGxpZXMgb3V0c2lkZSB0aGUgY2lyY2xl
IGRlZmluZWQgYnkgKGN4LCBjeSkgYW5kIHIsIHNldCAoZngsIGZ5KQorICAgICAgICAvLyB0byB0
aGUgcG9pbnQgb2YgaW50ZXJzZWN0aW9uIG9mIHRoZSBsaW5lIHRocm91Z2ggKGZ4LCBmeSkgYW5k
IHRoZSBjaXJjbGUuCisgICAgICAgIGRvdWJsZSBhbmdsZSA9IGF0YW4yKGZ5LCBmeCk7CisgICAg
ICAgIGZ4ID0gaW50KGNvcyhhbmdsZSkgKiByKSAtIDE7CisgICAgICAgIGZ5ID0gaW50KHNpbihh
bmdsZSkgKiByKSAtIDE7CisgICAgfQorCisgICAgUVJhZGlhbEdyYWRpZW50IGdyYWRpZW50KFFQ
b2ludEYoY3gsIGN5KSwgZ3JhZGllbnRSYWRpdXMoKSwgUVBvaW50RihmeCArIGN4LCBmeSArIGN5
KSk7CisgICAgaWYgKHNwcmVhZE1ldGhvZCgpID09IFNQUkVBRE1FVEhPRF9SRVBFQVQpIHsKKyAg
ICAgICAgZ3JhZGllbnQuc2V0U3ByZWFkKFFHcmFkaWVudDo6UmVwZWF0U3ByZWFkKTsKKyAgICB9
IGVsc2UgaWYgKHNwcmVhZE1ldGhvZCgpID09IFNQUkVBRE1FVEhPRF9SRUZMRUNUKSB7CisgICAg
ICAgIGdyYWRpZW50LnNldFNwcmVhZChRR3JhZGllbnQ6OlJlZmxlY3RTcHJlYWQpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGdyYWRpZW50LnNldFNwcmVhZChRR3JhZGllbnQ6OlBhZFNwcmVhZCk7
CisgICAgfQorCisgICAgZG91YmxlIG9wYWNpdHkgPSAxLjA7CisKKyAgICAvLyBUT0RPOiBHcmFk
aWVudCB0cmFuc2Zvcm0gKyBvcGFjaXR5IGZpeGVzISAKKworICAgIC8vIEtDYW52YXNNYXRyaXgg
Z3JhZGllbnRUcmFucyA9IGdyYWRpZW50VHJhbnNmb3JtKCk7CisgICAgLy8gZ3JhZGllbnRUcmFu
cy5xbWF0cml4KCkubWFwKGN4LCBjeSwgJmN4LCAmY3kpOworICAgIC8vIHF0Q29udGV4dC0+cGFp
bnRlcigpLnNldE1hdHJpeChtYXQpOworCisgICAgaWYgKCh0eXBlICYgQVBQTFlfVE9fRklMTCkg
JiYgS1NWR1BhaW50ZXJGYWN0b3J5Ojppc0ZpbGxlZChyZW5kZXJTdHlsZSkpIHsKKyAgICAgICAg
S1JlbmRlcmluZ0ZpbGxQYWludGVyIGZpbGxQYWludGVyID0gS1NWR1BhaW50ZXJGYWN0b3J5Ojpm
aWxsUGFpbnRlcihyZW5kZXJTdHlsZSwgb2JqZWN0KTsKKyAgICAgICAgZmlsbF9jb2xvcl9hcnJh
eShncmFkaWVudCwgZ3JhZGllbnRTdG9wcygpLCBvcGFjaXR5KTsKKworICAgICAgICBRQnJ1c2gg
YnJ1c2goZ3JhZGllbnQpOworCisgICAgICAgIHF0Q29udGV4dC0+cGFpbnRlcigpLnNldEJydXNo
KGJydXNoKTsKKyAgICAgICAgcXRDb250ZXh0LT5zZXRGaWxsUnVsZShmaWxsUGFpbnRlci5maWxs
UnVsZSgpKTsKKyAgICB9CisKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19TVFJPS0UpICYmIEtT
VkdQYWludGVyRmFjdG9yeTo6aXNTdHJva2VkKHJlbmRlclN0eWxlKSkgeworICAgICAgICBLUmVu
ZGVyaW5nU3Ryb2tlUGFpbnRlciBzdHJva2VQYWludGVyID0gS1NWR1BhaW50ZXJGYWN0b3J5Ojpz
dHJva2VQYWludGVyKHJlbmRlclN0eWxlLCBvYmplY3QpOworICAgICAgICBmaWxsX2NvbG9yX2Fy
cmF5KGdyYWRpZW50LCBncmFkaWVudFN0b3BzKCksIG9wYWNpdHkpOworCisgICAgICAgIFFQZW4g
cGVuOworICAgICAgICBRQnJ1c2ggYnJ1c2goZ3JhZGllbnQpOworCisgICAgICAgIHNldFBlblBy
b3BlcnRpZXMoc3Ryb2tlUGFpbnRlciwgcGVuKTsKKyAgICAgICAgcGVuLnNldEJydXNoKGJydXNo
KTsKKworICAgICAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRQZW4ocGVuKTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxH
cmFkaWVudFF0OjpkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBS
ZW5kZXJQYXRoKiBwYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAoreworICAgIGlm
ICghc2V0dXAoY29udGV4dCwgcGF0aCwgdHlwZSkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHJlbmRlclBhdGgoY29udGV4dCwgcGF0aCwgdHlwZSk7CisgICAgdGVhcmRvd24oY29u
dGV4dCwgcGF0aCwgdHlwZSk7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFs
R3JhZGllbnRRdDo6dGVhcmRvd24oS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5k
ZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3QKK3sKK30KKwordm9pZCBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF0OjpyZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBLQ1BhaW50VGFyZ2V0
VHlwZSB0eXBlKSBjb25zdAoreworICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IHBhdGgt
PnN0eWxlKCk7CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdCogcXRDb250ZXh0ID0gc3Rh
dGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdCo+KGNvbnRleHQpOworCisgICAgaWYg
KCh0eXBlICYgQVBQTFlfVE9fRklMTCkgJiYgS1NWR1BhaW50ZXJGYWN0b3J5Ojppc0ZpbGxlZChy
ZW5kZXJTdHlsZSkpIHsKKyAgICAgICAgcXRDb250ZXh0LT5maWxsUGF0aCgpOworICAgIH0KKwor
ICAgIGlmICgodHlwZSAmIEFQUExZX1RPX1NUUk9LRSkgJiYgS1NWR1BhaW50ZXJGYWN0b3J5Ojpp
c1N0cm9rZWQocmVuZGVyU3R5bGUpKSB7CisgICAgICAgIHF0Q29udGV4dC0+c3Ryb2tlUGF0aCgp
OworICAgIH0KK30KKworfQorCisvLyB2aW06dHM9NDpub2V0CkluZGV4OiBxdC9SZW5kZXJQYXRo
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHF0L1JlbmRlclBhdGhRdC5jcHAJKFJldmlzaW9uIDApCisr
KyBxdC9SZW5kZXJQYXRoUXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdp
bGRmb3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWMuc2VpZGVsQGtkZW1haWwubmV0PgorCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KKyovCisKKyNpbmNsdWRlIDxRRGVidWc+CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJSZW5kZXJQYXRoUXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorUmVuZGVy
UGF0aFF0OjpSZW5kZXJQYXRoUXQoUmVuZGVyU3R5bGUqIHN0eWxlLCBTVkdTdHlsZWRFbGVtZW50
KiBub2RlKQorCTogUmVuZGVyUGF0aChzdHlsZSwgbm9kZSkKK3sKK30KKwordm9pZCBSZW5kZXJQ
YXRoUXQ6OmRyYXdNYXJrZXJzSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgS0NhbnZhc1BhdGgqKSBjb25zdAoreworICAgIHFEZWJ1ZygiUmVuZGVyUGF0
aFF0OjpkcmF3TWFya2Vyc0lmTmVlZGVkKCkgVE9ETyEiKTsKK30KKworfQorCisvLyB2aW06dHM9
NDpub2V0CkluZGV4OiBxdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdC5oCShSZXZpc2lvbiAw
KQorKysgcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdC5oCShSZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDYzIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBO
aWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIw
MDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKworICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGll
bnRRdF9ICisjZGVmaW5lIEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXRfSAorCisjaW5j
bHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyUXQuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJHcmFkaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEtSZW5k
ZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50UXQgOiBwdWJsaWMgS1JlbmRlcmluZ1BhaW50
U2VydmVyTGluZWFyR3JhZGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIEtSZW5kZXJpbmdQYWludFNlcnZlclF0Cit7CitwdWJsaWM6Cisg
ICAgS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRRdCgpOworCisgICAgdmlydHVh
bCB2b2lkIGRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJQYXRoKiwg
S0NQYWludFRhcmdldFR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzZXR1cChLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBl
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdGVhcmRvd24oS1JlbmRlcmluZ0RldmljZUNvbnRl
eHQqICwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0OworCitw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoS1JlbmRlcmluZ0RldmljZUNv
bnRleHQqLCBjb25zdCBSZW5kZXJQYXRoKiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0OworfTsK
KworY2xhc3MgS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdCA6IHB1YmxpYyBL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgS1JlbmRlcmluZ1BhaW50U2VydmVyUXQK
K3sKK3B1YmxpYzoKKyAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF0KCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0
IFJlbmRlclBhdGgqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IHNldHVwKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQ
YWludFRhcmdldFR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93bihLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBl
KSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRoKEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBl
KSBjb25zdDsKK307CisKK30KKworI2VuZGlmCisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IHF0
L1JlbmRlclBhdGhRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0L1JlbmRlclBhdGhRdC5oCShSZXZpc2lv
biAwKQorKysgcXQvUmVuZGVyUGF0aFF0LmgJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAK
Ky8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29sYXMgWmltbWVybWFu
biA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpYy5zZWlkZWxAa2RlbWFpbC5uZXQ+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgS0RFIHByb2plY3QKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgorKi8KKworI2lmbmRlZiBSZW5kZXJQYXRoUXRfSAorI2RlZmluZSBSZW5kZXJQYXRo
UXRfSAorCisjaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFJlbmRlclBhdGhRdCA6IHB1YmxpYyBSZW5kZXJQYXRoCit7CitwdWJsaWM6CisgICAg
UmVuZGVyUGF0aFF0KFJlbmRlclN0eWxlKiwgU1ZHU3R5bGVkRWxlbWVudCopOworCitwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCB2b2lkIGRyYXdNYXJrZXJzSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgS0NhbnZhc1BhdGggKikgY29uc3Q7Cit9OworCit9
CisKKyNlbmRpZgorCisvLyB2aW06dHM9NDpub2V0CkluZGV4OiBxdC9LQ2FudmFzUGF0aFF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBxdC9LQ2FudmFzUGF0aFF0LmNwcAkoUmV2aXNpb24gMCkKKysrIHF0
L0tDYW52YXNQYXRoUXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkyIEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRm
b3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFpbnQgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0
ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiS0NhbnZhc1BhdGhRdC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0tDYW52YXNQYXRoUXQ6OktDYW52YXNQYXRoUXQoKQoreworfQorCitLQ2FudmFzUGF0
aFF0Ojp+S0NhbnZhc1BhdGhRdCgpCit7Cit9CisKK2Jvb2wgS0NhbnZhc1BhdGhRdDo6aXNFbXB0
eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGF0aC5pc0VtcHR5KCk7Cit9CisKK3ZvaWQgS0Nh
bnZhc1BhdGhRdDo6bW92ZVRvKGZsb2F0IHgsIGZsb2F0IHkpCit7CisgICAgbV9wYXRoLm1vdmVU
byh4LCB5KTsKK30KKwordm9pZCBLQ2FudmFzUGF0aFF0OjpsaW5lVG8oZmxvYXQgeCwgZmxvYXQg
eSkKK3sKKyAgICBtX3BhdGgubGluZVRvKHgsIHkpOworfQorCit2b2lkIEtDYW52YXNQYXRoUXQ6
OmN1cnZlVG8oZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9hdCB4MiwgZmxvYXQgeTIsIGZsb2F0IHgz
LCBmbG9hdCB5MykKK3sKKyAgICBtX3BhdGguY3ViaWNUbyh4MSwgeTEsIHgyLCB5MiwgeDMsIHkz
KTsKK30KKwordm9pZCBLQ2FudmFzUGF0aFF0OjpjbG9zZVN1YnBhdGgoKQoreworICAgIG1fcGF0
aC5jbG9zZVN1YnBhdGgoKTsKK30KKworRmxvYXRSZWN0IEtDYW52YXNQYXRoUXQ6OmJvdW5kaW5n
Qm94KCkKK3sKKyAgICByZXR1cm4gRmxvYXRSZWN0KG1fcGF0aC5ib3VuZGluZ1JlY3QoKSk7Cit9
CisKK0Zsb2F0UmVjdCBLQ2FudmFzUGF0aFF0OjpzdHJva2VCb3VuZGluZ0JveChjb25zdCBLUmVu
ZGVyaW5nU3Ryb2tlUGFpbnRlciYgc3Ryb2tlUGFpbnRlcikKK3sKKyAgICBxRGVidWcoIktDYW52
YXNQYXRoUXQ6OnN0cm9rZUJvdW5kaW5nQm94KCkgVE9ETyEiKTsKKyAgICByZXR1cm4gYm91bmRp
bmdCb3goKTsKK30KKworYm9vbCBLQ2FudmFzUGF0aFF0OjpzdHJva2VDb250YWluc1BvaW50KGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIHFEZWJ1ZygiS0NhbnZhc1BhdGhRdDo6c3Ry
b2tlQ29udGFpbnNQb2ludCgpIFRPRE8hIik7ICAgIAorICAgIHJldHVybiBjb250YWluc1BvaW50
KHBvaW50LCBSVUxFX0VWRU5PREQpOworfQorCitib29sIEtDYW52YXNQYXRoUXQ6OmNvbnRhaW5z
UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEtDV2luZFJ1bGUgcnVsZSkKK3sKKyAgICBR
dDo6RmlsbFJ1bGUgc2F2ZWRSdWxlID0gbV9wYXRoLmZpbGxSdWxlKCk7CisgICAgbV9wYXRoLnNl
dEZpbGxSdWxlKHJ1bGUgPT0gUlVMRV9FVkVOT0REID8gUXQ6Ok9kZEV2ZW5GaWxsIDogUXQ6Oldp
bmRpbmdGaWxsKTsKKworICAgIGJvb2wgY29udGFpbnMgPSBtX3BhdGguY29udGFpbnMocG9pbnQp
OworCisgICAgbV9wYXRoLnNldEZpbGxSdWxlKHNhdmVkUnVsZSk7CisgICAgcmV0dXJuIGNvbnRh
aW5zOworfQorCit9CisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IHF0L0tDYW52YXNDbGlwcGVy
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHF0L0tDYW52YXNDbGlwcGVyUXQuY3BwCShSZXZpc2lvbiAw
KQorKysgcXQvS0NhbnZhc0NsaXBwZXJRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI0
IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1l
cm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIw
MDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDUgQXBwbGUg
Q29tcHV0ZXIsIEluYy4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJLQ2FudmFzUGF0aFF0LmgiCisjaW5j
bHVkZSAiS0NhbnZhc0NsaXBwZXJRdC5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VRdC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgS0NhbnZhc0NsaXBwZXJRdDo6YXBwbHlD
bGlwKGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gpIGNvbnN0Cit7CisgICAgS1JlbmRlcmlu
Z0RldmljZUNvbnRleHQgKmNvbnRleHQgPSByZW5kZXJpbmdEZXZpY2UoKS0+Y3VycmVudENvbnRl
eHQoKTsKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0ICpxdENvbnRleHQgPSBzdGF0aWNf
Y2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0ICo+KGNvbnRleHQpOworICAgIGlmIChtX2Ns
aXBEYXRhLmNvdW50KCkgPCAxKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb250
ZXh0LT5jbGVhclBhdGgoKTsKKworICAgIFFQYWludGVyUGF0aCBuZXdQYXRoOworCisgICAgYm9v
bCBoZXRlcm9nZW5vdXNDbGlwUnVsZXMgPSBmYWxzZTsKKyAgICBLQ1dpbmRSdWxlIGNsaXBSdWxl
ID0gbV9jbGlwRGF0YVswXS53aW5kUnVsZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgeCA9
IDA7IHggPCBtX2NsaXBEYXRhLmNvdW50KCk7IHgrKykgeworICAgICAgICBLQ0NsaXBEYXRhIGNs
aXBEYXRhID0gbV9jbGlwRGF0YVt4XTsKKyAgICAgICAgaWYgKGNsaXBEYXRhLndpbmRSdWxlKCkg
IT0gY2xpcFJ1bGUpIHsKKyAgICAgICAgICAgIGhldGVyb2dlbm91c0NsaXBSdWxlcyA9IHRydWU7
CisgICAgICAgIH0KKyAgICAgICAKKyAgICAgICAgUVBhaW50ZXJQYXRoIHBhdGggPSBzdGF0aWNf
Y2FzdDxLQ2FudmFzUGF0aFF0ICo+KGNsaXBEYXRhLnBhdGguZ2V0KCkpLT5xdFBhdGgoKTsgCisg
ICAgICAgIGlmIChwYXRoLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIW5ld1BhdGguaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBu
ZXdQYXRoLmNsb3NlU3VicGF0aCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVzcGVjdCBj
bGlwcGluZyB1bml0cy4uLgorICAgICAgICBRTWF0cml4IHRyYW5zZm9ybTsKKworICAgICAgICBp
ZiAoY2xpcERhdGEuYmJveFVuaXRzKSB7CisgICAgICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRl
KGJvdW5kaW5nQm94LngoKSwgYm91bmRpbmdCb3gueSgpKTsKKyAgICAgICAgICAgIHRyYW5zZm9y
bS5zY2FsZShib3VuZGluZ0JveC53aWR0aCgpLCBib3VuZGluZ0JveC5oZWlnaHQoKSk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUT0RPOiBzdXBwb3J0IGhldGVyb2dlbm91cyBjbGlwIHJ1bGVz
IQorICAgICAgICAvL2NsaXBSdWxlID0gKGNsaXBEYXRhLndpbmRSdWxlKCkgPT0gUlVMRV9FVkVO
T0REID8gUXQ6Ok9kZEV2ZW5GaWxsIDogUXQ6OldpbmRpbmdGaWxsKTsKKworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHBhdGguZWxlbWVudENvdW50KCk7ICsraSkgeworICAgICAgICAgICAg
Y29uc3QgUVBhaW50ZXJQYXRoOjpFbGVtZW50ICZjdXIgPSBwYXRoLmVsZW1lbnRBdChpKTsKKwor
ICAgICAgICAgICAgc3dpdGNoIChjdXIudHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgUVBh
aW50ZXJQYXRoOjpNb3ZlVG9FbGVtZW50OgorICAgICAgICAgICAgICAgICAgICBuZXdQYXRoLm1v
dmVUbyhRUG9pbnRGKGN1ci54LCBjdXIueSkgKiB0cmFuc2Zvcm0pOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFFQYWludGVyUGF0aDo6TGluZVRvRWxl
bWVudDoKKyAgICAgICAgICAgICAgICAgICAgbmV3UGF0aC5saW5lVG8oUVBvaW50RihjdXIueCwg
Y3VyLnkpICogdHJhbnNmb3JtKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBRUGFpbnRlclBhdGg6OkN1cnZlVG9FbGVtZW50OgorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgUVBhaW50ZXJQYXRoOjpFbGVtZW50ICZj
MSA9IHBhdGguZWxlbWVudEF0KGkgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgUVBh
aW50ZXJQYXRoOjpFbGVtZW50ICZjMiA9IHBhdGguZWxlbWVudEF0KGkgKyAyKTsKKworICAgICAg
ICAgICAgICAgICAgICBRX0FTU0VSVChjMS50eXBlID09IFFQYWludGVyUGF0aDo6Q3VydmVUb0Rh
dGFFbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgUV9BU1NFUlQoYzIudHlwZSA9PSBRUGFp
bnRlclBhdGg6OkN1cnZlVG9EYXRhRWxlbWVudCk7CisKKyAgICAgICAgICAgICAgICAgICAgbmV3
UGF0aC5jdWJpY1RvKFFQb2ludEYoY3VyLngsIGN1ci55KSAqIHRyYW5zZm9ybSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFQb2ludEYoYzEueCwgYzEueSkgKiB0cmFuc2Zv
cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRUG9pbnRGKGMyLngsIGMy
LnkpICogdHJhbnNmb3JtKTsKKworICAgICAgICAgICAgICAgICAgICBpICs9IDI7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBj
YXNlIFFQYWludGVyUGF0aDo6Q3VydmVUb0RhdGFFbGVtZW50OgorICAgICAgICAgICAgICAgICAg
ICBRX0FTU0VSVChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fY2xpcERhdGEuY291bnQoKSkgewor
ICAgICAgICAvLyBGSVhNRSEKKyAgICAgICAgLy8gV2UgZG9uJ3QgY3VycmVudGx5IGFsbG93IGZv
ciBoZXRlcm9nZW5vdXMgY2xpcCBydWxlcy4KKyAgICAgICAgLy8gd2Ugd291bGQgaGF2ZSB0byBk
ZXRlY3Qgc3VjaCwgZHJhdyB0byBhIG1hc2ssIGFuZCB0aGVuIGNsaXAKKyAgICAgICAgLy8gdG8g
dGhhdCBtYXNrCisgICAgICAgIC8vIGlmICghQ0dDb250ZXh0SXNQYXRoRW1wdHkoY2dDb250ZXh0
KSkgeworICAgICAgICAgICAgaWYgKGNsaXBSdWxlID09IFJVTEVfRVZFTk9ERCkgeworICAgICAg
ICAgICAgICAgIG5ld1BhdGguc2V0RmlsbFJ1bGUoUXQ6Ok9kZEV2ZW5GaWxsKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbmV3UGF0aC5zZXRGaWxsUnVsZShRdDo6V2lu
ZGluZ0ZpbGwpOworICAgICAgICAgICAgfQorICAgICAgICAvLyB9CisgICAgfQorCisgICAgcXRD
b250ZXh0LT5wYWludGVyKCkuc2V0Q2xpcFBhdGgobmV3UGF0aCk7Cit9CisKK30KKworLy8gdmlt
OnRzPTQ6bm9ldApJbmRleDogcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdC5jcHAJKFJldmlzaW9u
IDApCisrKyBxdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF0LmNwcAkoUmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMTMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAgICAg
MjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorCisgICAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8
UVBlbj4KKyNpbmNsdWRlIDxRQnJ1c2g+CisjaW5jbHVkZSA8UVBhaW50ZXI+CisKKyNpbmNsdWRl
ICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VRdC5oIgorI2luY2x1
ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdGaWxsUGFp
bnRlci5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdTdHJva2VQYWludGVyLmgiCisjaW5jbHVkZSAi
S1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQ6OktSZW5kZXJpbmdQYWludFNlcnZlclNvbGlk
UXQoKQorICAgIDogS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQoKQorICAgICAgLCBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJRdCgpCit7Cit9CisKK0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQ6
On5LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF0KCkKK3sKK30KKworLy8gJ1NvbGlkJyBpbnRl
cmZhY2UKK3ZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdDo6ZHJhdyhLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcGF0aCwgS0NQYWludFRh
cmdldFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBpZiAoIXNldHVwKGNvbnRleHQsIHBhdGgsIHR5
cGUpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZW5kZXJQYXRoKGNvbnRleHQs
IHBhdGgsIHR5cGUpOworICAgIHRlYXJkb3duKGNvbnRleHQsIHBhdGgsIHR5cGUpOworfQorCiti
b29sIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQ6OnNldHVwKEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgS0NQYWludFRhcmdl
dFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0KiBxdENv
bnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0Kj4oY29udGV4dCk7
CisKKyAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CisgICAg
Ly8gVE9ETz8gcXRDb250ZXh0LT5wYWludGVyKCkuc2V0T3BhY2l0eShyZW5kZXJTdHlsZS0+b3Bh
Y2l0eSgpKTsKKworICAgIFFDb2xvciBjID0gY29sb3IoKTsKKworICAgIGlmICgodHlwZSAmIEFQ
UExZX1RPX0ZJTEwpICYmIEtTVkdQYWludGVyRmFjdG9yeTo6aXNGaWxsZWQocmVuZGVyU3R5bGUp
KSB7CisgICAgICAgIEtSZW5kZXJpbmdGaWxsUGFpbnRlciBmaWxsUGFpbnRlciA9IEtTVkdQYWlu
dGVyRmFjdG9yeTo6ZmlsbFBhaW50ZXIocmVuZGVyU3R5bGUsIG9iamVjdCk7CisgICAgICAgIGMu
c2V0QWxwaGFGKGZpbGxQYWludGVyLm9wYWNpdHkoKSk7CisKKyAgICAgICAgUUJydXNoIGJydXNo
KGMpOworICAgICAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRCcnVzaChicnVzaCk7CisgICAg
ICAgIHF0Q29udGV4dC0+c2V0RmlsbFJ1bGUoZmlsbFBhaW50ZXIuZmlsbFJ1bGUoKSk7CisKKyAg
ICAgICAgLyogaWYoaXNQYWludGluZ1RleHQoKSkgLi4uICovCisgICAgfQorCisgICAgaWYoKHR5
cGUgJiBBUFBMWV9UT19TVFJPS0UpICYmIEtTVkdQYWludGVyRmFjdG9yeTo6aXNTdHJva2VkKHJl
bmRlclN0eWxlKSkgeworICAgICAgICBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlciBzdHJva2VQYWlu
dGVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludGVyKHJlbmRlclN0eWxlLCBvYmpl
Y3QpOworICAgICAgICBjLnNldEFscGhhRihzdHJva2VQYWludGVyLm9wYWNpdHkoKSk7CisKKyAg
ICAgICAgUVBlbiBwZW4oYyk7CisgICAgICAgIHNldFBlblByb3BlcnRpZXMoc3Ryb2tlUGFpbnRl
ciwgcGVuKTsKKyAgICAgICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0UGVuKHBlbik7CisKKyAg
ICAgICAgLyogaWYoaXNQYWludGluZ1RleHQoKSkgLi4uICovCisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdDo6dGVhcmRvd24o
S1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFy
Z2V0VHlwZSkgY29uc3QKK3sKK30KKwordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF0
OjpyZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5k
ZXJQYXRoKiBwYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAoreworICAgIFJlbmRl
clN0eWxlKiByZW5kZXJTdHlsZSA9IHBhdGgtPnN0eWxlKCk7CisgICAgS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHRRdCAqcXRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRl
eHRRdCo+KGNvbnRleHQpOworCisgICAgaWYgKCh0eXBlICYgQVBQTFlfVE9fRklMTCkgJiYgS1NW
R1BhaW50ZXJGYWN0b3J5Ojppc0ZpbGxlZChyZW5kZXJTdHlsZSkpIHsKKyAgICAgICAgcXRDb250
ZXh0LT5maWxsUGF0aCgpOworICAgIH0KKworICAgIGlmICgodHlwZSAmIEFQUExZX1RPX1NUUk9L
RSkgJiYgS1NWR1BhaW50ZXJGYWN0b3J5Ojppc1N0cm9rZWQocmVuZGVyU3R5bGUpKSB7CisgICAg
ICAgIHF0Q29udGV4dC0+c3Ryb2tlUGF0aCgpOworICAgIH0KK30KKworfQorCisvLyB2aW06dHM9
NDpub2V0CkluZGV4OiBxdC9LUmVuZGVyaW5nRGV2aWNlUXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0
L0tSZW5kZXJpbmdEZXZpY2VRdC5jcHAJKFJldmlzaW9uIDApCisrKyBxdC9LUmVuZGVyaW5nRGV2
aWNlUXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5v
cmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyUGF0aFF0
LmgiCisjaW5jbHVkZSAiS0NhbnZhc01hdHJpeC5oIgorI2luY2x1ZGUgIktDYW52YXNQYXRoUXQu
aCIKKyNpbmNsdWRlICJLQ2FudmFzQ2xpcHBlclF0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZVF0LmgiCisjaW5jbHVkZSAiS1JlbmRl
cmluZ1BhaW50U2VydmVyU29saWRRdC5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZl
ckdyYWRpZW50UXQuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0KFFQYWludGVyKiBwYWludGVyKQorICAgIDogbV9wYWlu
dGVyKHBhaW50ZXIpCisgICAgICAsIG1fcGF0aCgpCit7CisgICAgUV9BU1NFUlQobV9wYWludGVy
ICE9IDApOworfQorCitLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0Ojp+S1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHRRdCgpCit7Cit9CisKK0tDYW52YXNNYXRyaXggS1JlbmRlcmluZ0RldmljZUNvbnRl
eHRRdDo6Y29uY2F0Q1RNKGNvbnN0IEtDYW52YXNNYXRyaXgmIHdvcmxkTWF0cml4KQoreworICAg
IEtDYW52YXNNYXRyaXggcmV0ID0gY3RtKCk7CisgICAgbV9wYWludGVyLT5zZXRNYXRyaXgod29y
bGRNYXRyaXgubWF0cml4KCksIHRydWUpOworICAgIHJldHVybiByZXQ7Cit9CisKK0tDYW52YXNN
YXRyaXggS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdDo6Y3RtKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gS0NhbnZhc01hdHJpeChtX3BhaW50ZXItPm1hdHJpeCgpKTsKK30KKworSW50UmVjdCBLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dFF0OjptYXBGcm9tVmlzdWFsKGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30KKworSW50UmVjdCBLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dFF0OjptYXBUb1Zpc3VhbChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVy
biBJbnRSZWN0KCk7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdDo6Y2xlYXJQ
YXRoKCkKK3sKKyAgICBtX3BhdGggPSBRUGFpbnRlclBhdGgoKTsKK30KKwordm9pZCBLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dFF0OjphZGRQYXRoKGNvbnN0IEtDYW52YXNQYXRoKiBwYXRoKQorewor
ICAgIG1fcGF0aC5hZGRQYXRoKHN0YXRpY19jYXN0PGNvbnN0IEtDYW52YXNQYXRoUXQqPihwYXRo
KS0+cXRQYXRoKCkpOworfQorCitHcmFwaGljc0NvbnRleHQqIEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0UXQ6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpCit7CisgICAgcmV0dXJuIG5ldyBHcmFwaGlj
c0NvbnRleHQobV9wYWludGVyKTsKK30KKworUVBhaW50ZXImIEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0UXQ6OnBhaW50ZXIoKQoreworICAgIHJldHVybiAqbV9wYWludGVyOworfQorCitRUmVjdEYg
S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdDo6cGF0aEJCb3goKSBjb25zdAoreworICAgIHJldHVy
biBtX3BhdGguYm91bmRpbmdSZWN0KCk7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ0RldmljZUNvbnRl
eHRRdDo6c2V0RmlsbFJ1bGUoS0NXaW5kUnVsZSBydWxlKQoreworICAgIG1fcGF0aC5zZXRGaWxs
UnVsZShydWxlID09IFJVTEVfRVZFTk9ERCA/IFF0OjpPZGRFdmVuRmlsbCA6IFF0OjpXaW5kaW5n
RmlsbCk7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdDo6ZmlsbFBhdGgoKQor
eworICAgIG1fcGFpbnRlci0+ZmlsbFBhdGgobV9wYXRoLCBtX3BhaW50ZXItPmJydXNoKCkpOwor
fQorCit2b2lkIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQ6OnN0cm9rZVBhdGgoKQoreworICAg
IG1fcGFpbnRlci0+c3Ryb2tlUGF0aChtX3BhdGgsIG1fcGFpbnRlci0+cGVuKCkpOworfQorCisv
LyBLUmVuZGVyaW5nRGV2aWNlUXQKK0tSZW5kZXJpbmdEZXZpY2VRdDo6S1JlbmRlcmluZ0Rldmlj
ZVF0KCkgOiBLUmVuZGVyaW5nRGV2aWNlKCkKK3sKK30KKworS1JlbmRlcmluZ0RldmljZVF0Ojp+
S1JlbmRlcmluZ0RldmljZVF0KCkKK3sKK30KKworS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIEtS
ZW5kZXJpbmdEZXZpY2VRdDo6cG9wQ29udGV4dCgpCit7CisgICAgLy8gQW55IHNwZWNpYWwgdGhp
bmdzIG5lZWRlZD8KKyAgICByZXR1cm4gS1JlbmRlcmluZ0RldmljZTo6cG9wQ29udGV4dCgpOwor
fQorCit2b2lkIEtSZW5kZXJpbmdEZXZpY2VRdDo6cHVzaENvbnRleHQoS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHQqIGNvbnRleHQpCit7CisgICAgLy8gQW55IHNwZWNpYWwgdGhpbmdzIG5lZWRlZD8K
KyAgICBLUmVuZGVyaW5nRGV2aWNlOjpwdXNoQ29udGV4dChjb250ZXh0KTsKK30KKworLy8gY29u
dGV4dCBtYW5hZ2VtZW50LgorS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdCogS1JlbmRlcmluZ0Rl
dmljZVF0OjpxdENvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dFF0Kj4oY3VycmVudENvbnRleHQoKSk7Cit9CisKK0tSZW5kZXJp
bmdEZXZpY2VDb250ZXh0KiBLUmVuZGVyaW5nRGV2aWNlUXQ6OmNvbnRleHRGb3JJbWFnZShLQ2Fu
dmFzSW1hZ2UqIGltYWdlKSBjb25zdAoreworICAgIHFEZWJ1ZygiS1JlbmRlcmluZ0RldmljZVF0
Ojpjb250ZXh0Rm9ySW1hZ2UoKSBUT0RPISIpOworICAgIHJldHVybiAwOworfQorCitEZXByZWNh
dGVkU3RyaW5nIEtSZW5kZXJpbmdEZXZpY2VRdDo6c3RyaW5nRm9yUGF0aChjb25zdCBLQ2FudmFz
UGF0aCogcGF0aCkKK3sKKyAgICBxRGVidWcoIktSZW5kZXJpbmdEZXZpY2VRdDo6c3RyaW5nRm9y
UGF0aCgpIFRPRE8hIik7CisgICAgcmV0dXJuIDA7Cit9CisKKy8vIFJlc291cmNlIGNyZWF0aW9u
CitLQ2FudmFzUmVzb3VyY2UqIEtSZW5kZXJpbmdEZXZpY2VRdDo6Y3JlYXRlUmVzb3VyY2UoY29u
c3QgS0NSZXNvdXJjZVR5cGUmIHR5cGUpIGNvbnN0Cit7CisgICAgc3dpdGNoICh0eXBlKQorICAg
IHsKKyAgICAgICAgY2FzZSBSU19DTElQUEVSOgorICAgICAgICAgICAgcmV0dXJuIG5ldyBLQ2Fu
dmFzQ2xpcHBlclF0KCk7CisgICAgICAgIGNhc2UgUlNfTUFSS0VSOgorICAgICAgICAgICAgcmV0
dXJuIG5ldyBLQ2FudmFzTWFya2VyKCk7IC8vIFVzZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLi4u
CisgICAgICAgIGNhc2UgUlNfSU1BR0U6CisgICAgICAgICAgICAvLyByZXR1cm4gbmV3IEtDYW52
YXNJbWFnZVF0KCk7CisgICAgICAgIGNhc2UgUlNfRklMVEVSOgorICAgICAgICAgICAgLy8gcmV0
dXJuIG5ldyBLQ2FudmFzRmlsdGVyUXQoKTsKKyAgICAgICAgY2FzZSBSU19NQVNLRVI6CisgICAg
ICAgICAgICAvLyByZXR1cm4gbmV3IEtDYW52YXNNYXNrZXJRdCgpOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXIqIEtSZW5kZXJpbmdEZXZpY2VRdDo6Y3JlYXRlUGFpbnRTZXJ2ZXIoY29uc3QgS0NQYWludFNl
cnZlclR5cGUmIHR5cGUpIGNvbnN0Cit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAg
ICAgY2FzZSBQU19TT0xJRDoKKyAgICAgICAgICAgIHJldHVybiBuZXcgS1JlbmRlcmluZ1BhaW50
U2VydmVyU29saWRRdCgpOworICAgICAgICBjYXNlIFBTX1BBVFRFUk46CisgICAgICAgICAgICBy
ZXR1cm4gbmV3IEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdCgpOworICAgICAgICBjYXNl
IFBTX0xJTkVBUl9HUkFESUVOVDoKKyAgICAgICAgICAgIHJldHVybiBuZXcgS1JlbmRlcmluZ1Bh
aW50U2VydmVyTGluZWFyR3JhZGllbnRRdCgpOworICAgICAgICBjYXNlIFBTX1JBRElBTF9HUkFE
SUVOVDoKKyAgICAgICAgICAgIHJldHVybiBuZXcgS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFs
R3JhZGllbnRRdCgpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorfQorCitLQ2FudmFzRmlsdGVyRWZmZWN0KiBLUmVuZGVyaW5nRGV2aWNlUXQ6OmNyZWF0
ZUZpbHRlckVmZmVjdChjb25zdCBLQ0ZpbHRlckVmZmVjdFR5cGUmIHR5cGUpIGNvbnN0Cit7Cisg
ICAgcURlYnVnKCJLUmVuZGVyaW5nRGV2aWNlUXQ6OmNyZWF0ZUZpbHRlckVmZmVjdCgpIFRPRE8h
Iik7CisgICAgcmV0dXJuIDA7Cit9CisKK0tDYW52YXNQYXRoKiBLUmVuZGVyaW5nRGV2aWNlUXQ6
OmNyZWF0ZVBhdGgoKSBjb25zdAoreworICAgIHJldHVybiBuZXcgS0NhbnZhc1BhdGhRdCgpOwor
fQorCisvLyBpdGVtIGNyZWF0aW9uCitSZW5kZXJQYXRoKiBLUmVuZGVyaW5nRGV2aWNlUXQ6OmNy
ZWF0ZUl0ZW0oUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSogc3R5bGUsIFNWR1N0eWxl
ZEVsZW1lbnQqIG5vZGUsIEtDYW52YXNQYXRoKiBwYXRoKSBjb25zdAoreworICAgIFJlbmRlclBh
dGgqIGl0ZW0gPSBuZXcgKGFyZW5hKSBSZW5kZXJQYXRoUXQoc3R5bGUsIG5vZGUpOworICAgIGl0
ZW0tPnNldFBhdGgocGF0aCk7CisgICAgcmV0dXJuIGl0ZW07Cit9CisKK0tSZW5kZXJpbmdEZXZp
Y2UqIHJlbmRlcmluZ0RldmljZSgpCit7CisgICAgc3RhdGljIEtSZW5kZXJpbmdEZXZpY2UgKnNo
YXJlZFJlbmRlcmluZ0RldmljZSA9IG5ldyBLUmVuZGVyaW5nRGV2aWNlUXQoKTsKKyAgICByZXR1
cm4gc2hhcmVkUmVuZGVyaW5nRGV2aWNlOworfQorCit9CisKKy8vIHZpbTp0cz00Om5vZXQKSW5k
ZXg6IHF0L0tDYW52YXNQYXRoUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdC9LQ2FudmFzUGF0aFF0LmgJ
KFJldmlzaW9uIDApCisrKyBxdC9LQ2FudmFzUGF0aFF0LmgJKFJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjIgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29sYXMg
WmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAw
NSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNSBB
cHBsZSBDb21wdXRlciwgSW5jLgorCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBw
cm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRl
bXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4K
KyovCisKKyNpZm5kZWYgS0NhbnZhc1BhdGhRdF9ICisjZGVmaW5lIEtDYW52YXNQYXRoUXRfSAor
CisjaW5jbHVkZSA8UVBhaW50ZXJQYXRoPgorCisjaW5jbHVkZSAiS0NhbnZhc1BhdGguaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBLQ2FudmFzUGF0aFF0IDogcHVibGljIEtDYW52
YXNQYXRoCit7CitwdWJsaWM6CisgICAgS0NhbnZhc1BhdGhRdCgpOworICAgIHZpcnR1YWwgfktD
YW52YXNQYXRoUXQoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGZsb2F0IHgsIGZsb2F0IHkpOworICAgIHZpcnR1YWwgdm9p
ZCBsaW5lVG8oZmxvYXQgeCwgZmxvYXQgeSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG8oZmxv
YXQgeDEsIGZsb2F0IHkxLCBmbG9hdCB4MiwgZmxvYXQgeTIsIGZsb2F0IHgzLCBmbG9hdCB5Myk7
CisgICAgdmlydHVhbCB2b2lkIGNsb3NlU3VicGF0aCgpOworCisgICAgdmlydHVhbCBGbG9hdFJl
Y3QgYm91bmRpbmdCb3goKTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0Jv
eChjb25zdCBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlciYpOworICAgIHZpcnR1YWwgYm9vbCBzdHJv
a2VDb250YWluc1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29u
dGFpbnNQb2ludChjb25zdCBGbG9hdFBvaW50JiwgS0NXaW5kUnVsZSk7CisKKyAgICAvLyBRdCBz
cGVjaWZpYyBzdHVmZgorICAgIGNvbnN0IFFQYWludGVyUGF0aCAmcXRQYXRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9wYXRoOyB9CisKK3ByaXZhdGU6CisgICAgUVBhaW50ZXJQYXRoIG1fcGF0aDsKK307
CisKK30KKworI2VuZGlmCisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IHF0L0tSZW5kZXJpbmdQ
YWludFNlcnZlclBhdHRlcm5RdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcXQvS1JlbmRlcmluZ1BhaW50
U2VydmVyUGF0dGVyblF0LmNwcAkoUmV2aXNpb24gMCkKKysrIHF0L0tSZW5kZXJpbmdQYWludFNl
cnZlclBhdHRlcm5RdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRm
b3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHFyZWN0Lmg+CisjaW5jbHVkZSA8cWltYWdl
Lmg+CisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8UVBvaW50Rj4KKyNpbmNsdWRlIDxR
UGFpbnRlclBhdGg+CisKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIktSZW5k
ZXJpbmdEZXZpY2VRdC5oIgorI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgorI2lu
Y2x1ZGUgIktSZW5kZXJpbmdGaWxsUGFpbnRlci5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdTdHJv
a2VQYWludGVyLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF0Lmgi
CisjaW5jbHVkZSAiS0NhbnZhc0ltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
S1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF0CitLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0
ZXJuUXQ6OktSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdCgpCisgICAgOiBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJQYXR0ZXJuKCkKKyAgICAgICwgS1JlbmRlcmluZ1BhaW50U2VydmVyUXQoKQor
eworfQorCitLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQ6On5LUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJQYXR0ZXJuUXQoKQoreworfQorCit2b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRl
cm5RdDo6cmVuZGVyUGF0aChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3Qg
UmVuZGVyUGF0aCogcGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBS
ZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBwYXRoLT5zdHlsZSgpOworICAgIEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0UXQqIHF0Q29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0UXQqPihjb250ZXh0KTsKKworICAgIGlmICgodHlwZSAmIEFQUExZX1RPX0ZJTEwpICYm
IEtTVkdQYWludGVyRmFjdG9yeTo6aXNGaWxsZWQocmVuZGVyU3R5bGUpKSB7CisgICAgICAgIHF0
Q29udGV4dC0+ZmlsbFBhdGgoKTsKKyAgICB9CisKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19T
VFJPS0UpICYmIEtTVkdQYWludGVyRmFjdG9yeTo6aXNTdHJva2VkKHJlbmRlclN0eWxlKSkgewor
ICAgICAgICBxdENvbnRleHQtPnN0cm9rZVBhdGgoKTsKKyAgICB9Cit9CisKK2Jvb2wgS1JlbmRl
cmluZ1BhaW50U2VydmVyUGF0dGVyblF0OjpzZXR1cChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCog
Y29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIEtDUGFpbnRUYXJnZXRUeXBlIHR5
cGUpIGNvbnN0Cit7CisvKgorICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQqIHF0Q29udGV4
dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQqPihjb250ZXh0KTsKKyAg
ICBRX0FTU0VSVChxdENvbnRleHQgIT0gMCk7CisKKyAgICBRUGFpbnRlclBhdGgqIF9wYXRoID0g
c3RhdGljX2Nhc3Q8UVBhaW50ZXJQYXRoKj4ocXRDb250ZXh0LT5wYXRoKCkpOworICAgIFFfQVNT
RVJUKF9wYXRoICE9IDApOworIAorICAgIGlmIChsaXN0ZW5lcigpKSB7CisgICAgICAgIGxpc3Rl
bmVyKCktPnJlc291cmNlTm90aWZpY2F0aW9uKCk7CisgICAgfQorCisgICAgUmVuZGVyU3R5bGUq
IHJlbmRlclN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOworCisgICAgcXRDb250ZXh0LT5wYWludGVy
KCkuc2V0UGVuKFF0OjpOb1Blbik7CisgICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0QnJ1c2go
UXQ6Ok5vQnJ1c2gpOworICAgIFFJbWFnZSogcGF0dGVybmltYWdlID0gbmV3IFFJbWFnZSh0aWxl
KCktPmJpdHMoKSwgdGlsZSgpLT53aWR0aCgpLCB0aWxlKCktPmhlaWdodCgpLCBRSW1hZ2U6OkZv
cm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7CisgICAgcGF0dGVybmltYWdlLT5zZXRBbHBoYUJ1
ZmZlcih0cnVlKTsKKyAgICBpZiAodHlwZSAmIEFQUExZX1RPX0ZJTEwpIHsKKyAgICAgICAgLy9R
Q29sb3IgYyA9IGNvbG9yKCk7CisgICAgICAgIC8vYy5zZXRBbHBoYUYoc3R5bGUtPmZpbGxQYWlu
dGVyKCktPm9wYWNpdHkoKSAqIHN0eWxlLT5vcGFjaXR5KCkgKiBvcGFjaXR5KCkpOworICAgICAg
ICBLUmVuZGVyaW5nRmlsbFBhaW50ZXIgZmlsbFBhaW50ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6
OmZpbGxQYWludGVyKHJlbmRlclN0eWxlLCBvYmplY3QpOworICAgICAgICBRQnJ1c2ggYnJ1c2go
UVBpeG1hcDo6ZnJvbUltYWdlKCpwYXR0ZXJuaW1hZ2UpKTsKKyAgICAgICAgX3BhdGgtPnNldEZp
bGxSdWxlKGZpbGxQYWludGVyLmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REID8gUXQ6Ok9kZEV2
ZW5GaWxsIDogUXQ6OldpbmRpbmdGaWxsKTsKKyAgICAgICAgcXRDb250ZXh0LT5wYWludGVyKCku
c2V0QnJ1c2goYnJ1c2gpOworICAgIH0KKyAgICBpZiAodHlwZSAmIEFQUExZX1RPX1NUUk9LRSkg
eworICAgICAgICAvL1FDb2xvciBjID0gY29sb3IoKTsKKyAgICAgICAgLy9jLnNldEFscGhhRihz
dHlsZS0+c3Ryb2tlUGFpbnRlcigpLT5vcGFjaXR5KCkgKiBzdHlsZS0+b3BhY2l0eSgpICogb3Bh
Y2l0eSgpKTsKKyAgICAgICAgS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIgc3Ryb2tlUGFpbnRlciA9
IEtTVkdQYWludGVyRmFjdG9yeTo6c3Ryb2tlUGFpbnRlcihyZW5kZXJTdHlsZSwgb2JqZWN0KTsK
KworICAgICAgICBRUGVuIHBlbjsKKyAgICAgICAgUUJydXNoIGJydXNoKFFQaXhtYXA6OmZyb21J
bWFnZSgqcGF0dGVybmltYWdlKSk7CisKKyAgICAgICAgc2V0UGVuUHJvcGVydGllcyhzdHJva2VQ
YWludGVyLCBwZW4pOworICAgICAgICBwZW4uc2V0QnJ1c2goYnJ1c2gpOworICAgICAgICBxdENv
bnRleHQtPnBhaW50ZXIoKS5zZXRQZW4ocGVuKTsKKyAgICB9CisKKyAgICBxdENvbnRleHQtPnBh
aW50ZXIoKS5kcmF3UGF0aCgqX3BhdGgpOworCisgICAgZGVsZXRlIHBhdHRlcm5pbWFnZTsKKyov
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0
ZXJuUXQ6OnRlYXJkb3duKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2Jq
ZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0Cit7Cit9CisKK3ZvaWQgS1JlbmRlcmluZ1Bh
aW50U2VydmVyUGF0dGVyblF0OjpkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAor
eworICAgIGlmICghc2V0dXAoY29udGV4dCwgcGF0aCwgdHlwZSkpIHsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHJlbmRlclBhdGgoY29udGV4dCwgcGF0aCwgdHlwZSk7CisgICAgdGVh
cmRvd24oY29udGV4dCwgcGF0aCwgdHlwZSk7Cit9CisKK30KKworLy8gdmltOnRzPTQ6bm9ldAor
CkluZGV4OiBxdC9LQ2FudmFzQ2xpcHBlclF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcXQvS0NhbnZhc0Ns
aXBwZXJRdC5oCShSZXZpc2lvbiAwKQorKysgcXQvS0NhbnZhc0NsaXBwZXJRdC5oCShSZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQ0IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAg
ICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAg
ICAgICAgIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBLREUgcHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCisqLworCisjaWZuZGVmIEtDYW52YXNDbGlwcGVyUXRfaAorI2RlZmluZSBL
Q2FudmFzQ2xpcHBlclF0X2gKKworI2luY2x1ZGUgIktDYW52YXNSZXNvdXJjZXMuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBLQ2FudmFzQ2xpcHBlclF0IDogcHVibGljIEtDYW52
YXNDbGlwcGVyIHsKK3B1YmxpYzoKKyAgICBLQ2FudmFzQ2xpcHBlclF0KCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBhcHBseUNsaXAoY29uc3QgRmxvYXRSZWN0JiBib3Vu
ZGluZ0JveCkgY29uc3Q7Cit9OworCit9CisKKyNlbmRpZgorCisvLyB2aW06dHM9NDpub2V0Cklu
ZGV4OiBxdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcXQvS1Jl
bmRlcmluZ1BhaW50U2VydmVyUXQuY3BwCShSZXZpc2lvbiAwKQorKysgcXQvS1JlbmRlcmluZ1Bh
aW50U2VydmVyUXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hA
a2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
cHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPFFQZW4+CisjaW5jbHVkZSA8UVZlY3Rvcj4KKwor
I2luY2x1ZGUgIktSZW5kZXJpbmdTdHJva2VQYWludGVyLmgiCisjaW5jbHVkZSAiS1JlbmRlcmlu
Z1BhaW50U2VydmVyUXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJRdDo6S1JlbmRlcmluZ1BhaW50U2VydmVyUXQoKQoreworfQorCitLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJRdDo6fktSZW5kZXJpbmdQYWludFNlcnZlclF0KCkKK3sKK30KKwordm9pZCBL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdDo6c2V0UGVuUHJvcGVydGllcyhjb25zdCBLUmVuZGVyaW5n
U3Ryb2tlUGFpbnRlciYgc3Ryb2tlUGFpbnRlciwgUVBlbiYgcGVuKSBjb25zdAoreworICAgIHBl
bi5zZXRXaWR0aEYoc3Ryb2tlUGFpbnRlci5zdHJva2VXaWR0aCgpKTsKKyAgICBpZiAoc3Ryb2tl
UGFpbnRlci5zdHJva2VDYXBTdHlsZSgpID09IENBUF9CVVRUKSB7CisgICAgICAgIHBlbi5zZXRD
YXBTdHlsZShRdDo6RmxhdENhcCk7CisgICAgfSBlbHNlIGlmIChzdHJva2VQYWludGVyLnN0cm9r
ZUNhcFN0eWxlKCkgPT0gQ0FQX1JPVU5EKSB7CisgICAgICAgIHBlbi5zZXRDYXBTdHlsZShRdDo6
Um91bmRDYXApOworICAgIH0KKworICAgIGlmKHN0cm9rZVBhaW50ZXIuc3Ryb2tlSm9pblN0eWxl
KCkgPT0gSk9JTl9NSVRFUikgeworICAgICAgICBwZW4uc2V0Sm9pblN0eWxlKFF0OjpNaXRlckpv
aW4pOworICAgICAgICBwZW4uc2V0TWl0ZXJMaW1pdCgocXJlYWwpc3Ryb2tlUGFpbnRlci5zdHJv
a2VNaXRlckxpbWl0KCkpOworICAgIH0gZWxzZSBpZihzdHJva2VQYWludGVyLnN0cm9rZUpvaW5T
dHlsZSgpID09IEpPSU5fUk9VTkQpIHsKKyAgICAgICAgcGVuLnNldEpvaW5TdHlsZShRdDo6Um91
bmRKb2luKTsKKyAgICB9CisKKyAgICBLQ0Rhc2hBcnJheSBkYXNoZXMgPSBzdHJva2VQYWludGVy
LmRhc2hBcnJheSgpOworICAgIHVuc2lnbmVkIGludCBkYXNoTGVuZ3RoID0gIWRhc2hlcy5pc0Vt
cHR5KCkgPyBkYXNoZXMuY291bnQoKSA6IDA7CisgICAgaWYoZGFzaExlbmd0aCkgeworICAgICAg
ICBRVmVjdG9yPHFyZWFsPiBwYXR0ZXJuOworICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSAo
ZGFzaExlbmd0aCAlIDIpID09IDAgPyBkYXNoTGVuZ3RoIDogZGFzaExlbmd0aCAqIDI7CisKKyAg
ICAgICAgZm9yKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAg
ICBwYXR0ZXJuLmFwcGVuZChkYXNoZXNbaSAlIGRhc2hMZW5ndGhdIC8gKGZsb2F0KXBlbi53aWR0
aEYoKSk7CisKKyAgICAgICAgcGVuLnNldERhc2hQYXR0ZXJuKHBhdHRlcm4pOworICAgICAgICAv
LyBUT0RPOiBkYXNoLW9mZnNldCwgZG9lcy93aWxsIHF0NCBBUEkgYWxsb3cgaXQ/IChSb2IpCisg
ICAgfQorfQorCit9CisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IHF0L0tSZW5kZXJpbmdQYWlu
dFNlcnZlclNvbGlkUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJT
b2xpZFF0LmgJKFJldmlzaW9uIDApCisrKyBxdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF0
LmgJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAg
ICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgor
CisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJTb2xpZFF0X0gKKyNkZWZpbmUgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRR
dF9ICisKKyNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdC5oIgorI2luY2x1ZGUgIktS
ZW5kZXJpbmdQYWludFNlcnZlclNvbGlkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAK
K2NsYXNzIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQgOiBwdWJsaWMgS1JlbmRlcmluZ1Bh
aW50U2VydmVyU29saWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIEtSZW5kZXJpbmdQYWludFNlcnZlclF0Cit7CitwdWJsaWM6CisgICAgS1JlbmRlcmluZ1Bh
aW50U2VydmVyU29saWRRdCgpOworICAgIHZpcnR1YWwgfktSZW5kZXJpbmdQYWludFNlcnZlclNv
bGlkUXQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgc2V0dXAoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmpl
Y3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHRlYXJkb3du
KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRh
cmdldFR5cGUpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHJlbmRlclBh
dGgoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJQYXRoKiwgS0NQYWludFRh
cmdldFR5cGUpIGNvbnN0OworfTsKKworfQorCisjZW5kaWYKKworLy8gdmltOnRzPTQ6bm9ldApJ
bmRleDogcXQvS1JlbmRlcmluZ0RldmljZVF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcXQvS1JlbmRlcmlu
Z0RldmljZVF0LmgJKFJldmlzaW9uIDApCisrKyBxdC9LUmVuZGVyaW5nRGV2aWNlUXQuaAkoUmV2
aXNpb24gMCkKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CisgICAgICAgICAg
ICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisKKyAgICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIEtSZW5kZXJpbmdEZXZpY2VR
dF9ICisjZGVmaW5lIEtSZW5kZXJpbmdEZXZpY2VRdF9ICisKKyNpbmNsdWRlIDxRUGFpbnRlcj4K
KyNpbmNsdWRlIDxRUGFpbnRlclBhdGg+CisKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS1JlbmRlcmluZ0RldmljZUNvbnRleHRR
dCA6IHB1YmxpYyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dAoreworcHVibGljOgorICAgIEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0UXQoUVBhaW50ZXIqKTsKKyAgICB2aXJ0dWFsIH5LUmVuZGVyaW5n
RGV2aWNlQ29udGV4dFF0KCk7CisKKyAgICB2aXJ0dWFsIEtDYW52YXNNYXRyaXggY29uY2F0Q1RN
KGNvbnN0IEtDYW52YXNNYXRyaXgmKTsKKyAgICB2aXJ0dWFsIEtDYW52YXNNYXRyaXggY3RtKCkg
Y29uc3Q7CisKKyAgICB2aXJ0dWFsIEludFJlY3QgbWFwRnJvbVZpc3VhbChjb25zdCBJbnRSZWN0
Jik7CisgICAgdmlydHVhbCBJbnRSZWN0IG1hcFRvVmlzdWFsKGNvbnN0IEludFJlY3QmKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBjbGVhclBhdGgoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUGF0aChj
b25zdCBLQ2FudmFzUGF0aCopOworCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQqIGNyZWF0
ZUdyYXBoaWNzQ29udGV4dCgpOworICAgIAorICAgIC8vIFF0IHNwZWNpZmljIHN0dWZmCisgICAg
UVBhaW50ZXImIHBhaW50ZXIoKTsKKyAgICBRUmVjdEYgcGF0aEJCb3goKSBjb25zdDsKKworICAg
IHZvaWQgc2V0RmlsbFJ1bGUoS0NXaW5kUnVsZSk7CisKKyAgICB2b2lkIGZpbGxQYXRoKCk7Cisg
ICAgdm9pZCBzdHJva2VQYXRoKCk7CisKK3ByaXZhdGU6CisgICAgUVBhaW50ZXIqIG1fcGFpbnRl
cjsKKyAgICBRUGFpbnRlclBhdGggbV9wYXRoOworfTsKKworY2xhc3MgS1JlbmRlcmluZ0Rldmlj
ZVF0IDogcHVibGljIEtSZW5kZXJpbmdEZXZpY2UKK3sKK3B1YmxpYzoKKyAgICBLUmVuZGVyaW5n
RGV2aWNlUXQoKTsKKyAgICB2aXJ0dWFsIH5LUmVuZGVyaW5nRGV2aWNlUXQoKTsKKworICAgIHZp
cnR1YWwgYm9vbCBpc0J1ZmZlcmVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZp
cnR1YWwgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIHBvcENvbnRleHQoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcHVzaENvbnRleHQoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqKTsKKworICAgIC8vIGNv
bnRleHQgbWFuYWdlbWVudC4KKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0KiBxdENvbnRl
eHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0
Rm9ySW1hZ2UoS0NhbnZhc0ltYWdlKikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIERlcHJlY2F0ZWRT
dHJpbmcgc3RyaW5nRm9yUGF0aChjb25zdCBLQ2FudmFzUGF0aCopOworCisgICAgLy8gUmVzb3Vy
Y2UgY3JlYXRpb24KKyAgICB2aXJ0dWFsIEtDYW52YXNSZXNvdXJjZSogY3JlYXRlUmVzb3VyY2Uo
Y29uc3QgS0NSZXNvdXJjZVR5cGUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEtSZW5kZXJpbmdQYWlu
dFNlcnZlciogY3JlYXRlUGFpbnRTZXJ2ZXIoY29uc3QgS0NQYWludFNlcnZlclR5cGUmKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEtDYW52YXNGaWx0ZXJFZmZlY3QqIGNyZWF0ZUZpbHRlckVmZmVjdChj
b25zdCBLQ0ZpbHRlckVmZmVjdFR5cGUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEtDYW52YXNQYXRo
KiBjcmVhdGVQYXRoKCkgY29uc3Q7CisKKyAgICAvLyBpdGVtIGNyZWF0aW9uCisgICAgdmlydHVh
bCBSZW5kZXJQYXRoKiBjcmVhdGVJdGVtKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqLCBTVkdT
dHlsZWRFbGVtZW50KiwgS0NhbnZhc1BhdGgqKSBjb25zdDsKK307CisKK30KKworI2VuZGlmCisK
Ky8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IHF0L0tSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5R
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHF0L0tSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdC5oCShS
ZXZpc2lvbiAwKQorKysgcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF0LmgJKFJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAg
ICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorCisgICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJQYXR0ZXJuUXRfSAorI2RlZmluZSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXRfSAor
CisjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyUXQuaCIKKyNpbmNsdWRlICJLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
S1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF0IDogcHVibGljIEtSZW5kZXJpbmdQYWludFNl
cnZlclBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJs
aWMgS1JlbmRlcmluZ1BhaW50U2VydmVyUXQKK3sKK3B1YmxpYzoKKyAgICBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJQYXR0ZXJuUXQoKTsKKyAgICB2aXJ0dWFsIH5LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQ
YXR0ZXJuUXQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgc2V0dXAoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJP
YmplY3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHRlYXJk
b3duKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWlu
dFRhcmdldFR5cGUpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHJlbmRl
clBhdGgoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJQYXRoKiwgS0NQYWlu
dFRhcmdldFR5cGUpIGNvbnN0OworfTsKKworfQorCisjZW5kaWYKKworLy8gdmltOnRzPTQ6bm9l
dApJbmRleDogcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyUXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdC9L
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdC5oCShSZXZpc2lvbiAwKQorKysgcXQvS1JlbmRlcmluZ1Bh
aW50U2VydmVyUXQuaAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtk
ZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHBy
b2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVm
IEtSZW5kZXJpbmdQYWludFNlcnZlclF0X0gKKyNkZWZpbmUgS1JlbmRlcmluZ1BhaW50U2VydmVy
UXRfSAorCisjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyLmgiCisKK2NsYXNzIFFQZW47
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXI7
CisKKy8vIFRoaXMgY2xhc3MgaXMgZGVzaWduZWQgYXMgYW4gZXh0ZW5zaW9uIHRvCisvLyBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXIsIGl0IHdvbid0IGluaGVyaXQgZnJvbSBpdC4KK2NsYXNzIEtSZW5k
ZXJpbmdQYWludFNlcnZlclF0Cit7CitwdWJsaWM6CisgICAgS1JlbmRlcmluZ1BhaW50U2VydmVy
UXQoKTsKKyAgICB+S1JlbmRlcmluZ1BhaW50U2VydmVyUXQoKTsKKworICAgIHZvaWQgc2V0UGVu
UHJvcGVydGllcyhjb25zdCBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlciYsIFFQZW4mKSBjb25zdDsK
K307CisKK30KKworI2VuZGlmCisKKy8vIHZpbTp0cz00Om5vZXQK
</data>
<flag name="review"
          id="3155"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>