<?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>7824</bug_id>
          
          <creation_ts>2006-03-17 01:44:11 -0800</creation_ts>
          <short_desc>Push parts of form submission code down into Frame.cpp</short_desc>
          <delta_ts>2006-03-19 23:36:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>36703</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-03-17 01:44:11 -0800</bug_when>
    <thetext>Push parts of form submission code down into Frame.cpp

If this form submits, we&apos;ll know the patch works. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36835</commentid>
    <comment_count>1</comment_count>
      <attachid>7145</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-03-18 00:53:47 -0800</bug_when>
    <thetext>Created attachment 7145
push parts of MacFrame into Frame, GraphicsContextMac into GraphicsContext

4th attempt to post this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36845</commentid>
    <comment_count>2</comment_count>
      <attachid>7145</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-18 04:32:17 -0800</bug_when>
    <thetext>Comment on attachment 7145
push parts of MacFrame into Frame, GraphicsContextMac into GraphicsContext

I&apos;d think you could just rename drawFloatImage to drawImage.

+    ~GraphicsContextPrivate();

Seems unnnecessary. The default destructor will do the job.

+    int width = ((s == BSTop || s == BSBottom) ? y2 - y1 : x2 - x1 );

Space before that last parenthesis looks strange to me. Maybe remove the outer parentheses altogether?

Adding these values directly to Frame rather than to FramePrivate seems like it might be moving in the wrong direction. Not sure. Are we planning to get rid of FramePrivate?

I think recordFormValue should take a PassRefPtr rather than a raw pointer.

Seems OK to land as-is. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36964</commentid>
    <comment_count>3</comment_count>
      <attachid>7181</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-03-19 21:08:09 -0800</bug_when>
    <thetext>Created attachment 7181
Same patch, updated after rename changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36966</commentid>
    <comment_count>4</comment_count>
      <attachid>7182</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-03-19 21:23:01 -0800</bug_when>
    <thetext>Created attachment 7182
Better patch, with darin&apos;s suggested changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36968</commentid>
    <comment_count>5</comment_count>
      <attachid>7183</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-03-19 21:35:38 -0800</bug_when>
    <thetext>Created attachment 7183
Better patch, now also moving all Frame members to FramePrivate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36969</commentid>
    <comment_count>6</comment_count>
      <attachid>7183</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-19 21:37:27 -0800</bug_when>
    <thetext>Comment on attachment 7183
Better patch, now also moving all Frame members to FramePrivate

r=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7145</attachid>
            <date>2006-03-18 00:53:47 -0800</date>
            <delta_ts>2006-03-19 21:08:09 -0800</delta_ts>
            <desc>push parts of MacFrame into Frame, GraphicsContextMac into GraphicsContext</desc>
            <filename>stuff.patch</filename>
            <type>text/plain</type>
            <size>72006</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3Jt
L0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAxMzM3MSkKKysrIHBsYXRmb3JtL0dyYXBoaWNz
Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIGNsYXNzIEZvbnQ7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0UHJpdmF0
ZTsKKyAgICBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CiAgICAgY2xhc3Mg
SW50UG9pbnQ7CiAgICAgY2xhc3MgSW50UG9pbnRBcnJheTsKIApAQCAtOTEsMzIgKzkyLDMxIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzYXZlKCk7CiAgICAgICAgIHZvaWQg
cmVzdG9yZSgpOwogICAgICAgICAKLSAgICAgICAgdm9pZCBkcmF3UmVjdChpbnQsIGludCwgaW50
LCBpbnQpOwotICAgICAgICB2b2lkIGRyYXdMaW5lKGludCwgaW50LCBpbnQsIGludCk7Ci0gICAg
ICAgIHZvaWQgZHJhd0VsbGlwc2UoaW50LCBpbnQsIGludCwgaW50KTsKKyAgICAgICAgdm9pZCBk
cmF3UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgSW50
UG9pbnQmLCBjb25zdCBJbnRQb2ludCYpOworICAgICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0
IEludFJlY3QmKTsKICAgICAgICAgdm9pZCBkcmF3QXJjKGludCwgaW50LCBpbnQsIGludCwgaW50
LCBpbnQpOwogICAgICAgICB2b2lkIGRyYXdDb252ZXhQb2x5Z29uKGNvbnN0IEludFBvaW50QXJy
YXkmKTsKIAotICAgICAgICB2b2lkIGZpbGxSZWN0KGludCwgaW50LCBpbnQsIGludCwgY29uc3Qg
QnJ1c2gmKTsKICAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBJbnRSZWN0JiwgY29uc3QgQnJ1
c2gmKTsKIAogICAgICAgICB2b2lkIGRyYXdJbWFnZUF0UG9pbnQoSW1hZ2UqLCBjb25zdCBJbnRQ
b2ludCYsIEltYWdlOjpDb21wb3NpdGVPcGVyYXRvciA9IEltYWdlOjpDb21wb3NpdGVTb3VyY2VP
dmVyKTsKICAgICAgICAgdm9pZCBkcmF3SW1hZ2VJblJlY3QoSW1hZ2UqLCBjb25zdCBJbnRSZWN0
JiwgSW1hZ2U6OkNvbXBvc2l0ZU9wZXJhdG9yID0gSW1hZ2U6OkNvbXBvc2l0ZVNvdXJjZU92ZXIp
OwogCi0gICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgaW50IHgsIGludCB5LCAKKyAgICAg
ICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYsIAogICAgICAgICAgICAg
aW50IHN4ID0gMCwgaW50IHN5ID0gMCwgaW50IHN3ID0gLTEsIGludCBzaCA9IC0xLAogICAgICAg
ICAgICAgSW1hZ2U6OkNvbXBvc2l0ZU9wZXJhdG9yID0gSW1hZ2U6OkNvbXBvc2l0ZVNvdXJjZU92
ZXIsIAogICAgICAgICAgICAgdm9pZCogbmF0aXZlRGF0YSA9IDApOwotICAgICAgICB2b2lkIGRy
YXdJbWFnZShJbWFnZSosIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAorICAgICAgICB2b2lk
IGRyYXdJbWFnZShJbWFnZSosIGNvbnN0IEludFJlY3QmLAogICAgICAgICAgICAgaW50IHN4ID0g
MCwgaW50IHN5ID0gMCwgaW50IHN3ID0gLTEsIGludCBzaCA9IC0xLAogICAgICAgICAgICAgSW1h
Z2U6OkNvbXBvc2l0ZU9wZXJhdG9yID0gSW1hZ2U6OkNvbXBvc2l0ZVNvdXJjZU92ZXIsIAogICAg
ICAgICAgICAgdm9pZCogbmF0aXZlRGF0YSA9IDApOwotICAgICAgICB2b2lkIGRyYXdGbG9hdElt
YWdlKEltYWdlKiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdywgZmxvYXQgaCwKKyAgICAgICAg
dm9pZCBkcmF3RmxvYXRJbWFnZShJbWFnZSosIGNvbnN0IEZsb2F0UmVjdCYsCiAgICAgICAgICAg
ICBmbG9hdCBzeCA9IDAsIGZsb2F0IHN5ID0gMCwgZmxvYXQgc3cgPSAtMSwgZmxvYXQgc2ggPSAt
MSwKICAgICAgICAgICAgIEltYWdlOjpDb21wb3NpdGVPcGVyYXRvciA9IEltYWdlOjpDb21wb3Np
dGVTb3VyY2VPdmVyLCAKICAgICAgICAgICAgIHZvaWQqIG5hdGl2ZURhdGEgPSAwKTsKLSAgICAg
ICAgdm9pZCBkcmF3VGlsZWRJbWFnZShJbWFnZSosIGludCwgaW50LCBpbnQsIGludCwgaW50IHN4
ID0gMCwgaW50IHN5ID0gMCwgdm9pZCogbmF0aXZlRGF0YSA9IDApOwotICAgICAgICB2b2lkIGRy
YXdTY2FsZWRBbmRUaWxlZEltYWdlKEltYWdlKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCwgaW50LCBpbnQsIAorICAgICAgICB2b2lkIGRyYXdUaWxlZEltYWdlKEltYWdlKiwgY29uc3Qg
SW50UmVjdCYgZGVzdCwgaW50IHN4ID0gMCwgaW50IHN5ID0gMCwgdm9pZCogbmF0aXZlRGF0YSA9
IDApOworICAgICAgICB2b2lkIGRyYXdTY2FsZWRBbmRUaWxlZEltYWdlKEltYWdlKiwgY29uc3Qg
SW50UmVjdCYsIGludCwgaW50LCBpbnQsIGludCwgCiAgICAgICAgICAgICBJbWFnZTo6VGlsZVJ1
bGUgaFJ1bGUgPSBJbWFnZTo6U3RyZXRjaFRpbGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSA9IElt
YWdlOjpTdHJldGNoVGlsZSwKICAgICAgICAgICAgIHZvaWQqIG5hdGl2ZURhdGEgPSAwKTsKIApA
QCAtMTM2LDEzICsxMzYsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgbWlz
c3BlbGxpbmdMaW5lVGhpY2tuZXNzKCkgY29uc3Q7CiAKICAgICAgICAgQ29sb3Igc2VsZWN0ZWRU
ZXh0QmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0VXNlc0luYWN0aXZl
VGV4dEJhY2tncm91bmRDb2xvcihib29sIHUpIHsgbV91c2VzSW5hY3RpdmVUZXh0QmFja2dyb3Vu
ZENvbG9yID0gdTsgfQorICAgICAgICB2b2lkIHNldFVzZXNJbmFjdGl2ZVRleHRCYWNrZ3JvdW5k
Q29sb3IoYm9vbCk7CisgICAgICAgIGJvb2wgdXNlc0luYWN0aXZlVGV4dEJhY2tncm91bmRDb2xv
cigpIGNvbnN0OwogICAgICAgICAKICAgICAgICAgYm9vbCBwYWludGluZ0Rpc2FibGVkKCkgY29u
c3Q7CiAgICAgICAgIHZvaWQgc2V0UGFpbnRpbmdEaXNhYmxlZChib29sKTsKICAgICAgICAgCi0g
ICAgICAgIGJvb2wgdXBkYXRpbmdDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVybiBtX3VwZGF0
aW5nQ29udHJvbFRpbnRzOyB9Ci0gICAgICAgIHZvaWQgc2V0VXBkYXRpbmdDb250cm9sVGludHMo
Ym9vbCBiKSB7IHNldFBhaW50aW5nRGlzYWJsZWQoYik7IG1fdXBkYXRpbmdDb250cm9sVGludHMg
PSBiOyB9CisgICAgICAgIGJvb2wgdXBkYXRpbmdDb250cm9sVGludHMoKSBjb25zdDsKKyAgICAg
ICAgdm9pZCBzZXRVcGRhdGluZ0NvbnRyb2xUaW50cyhib29sKTsKIAogICAgICAgICB2b2lkIGJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7CiAgICAgICAgIHZvaWQgZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKQEAgLTE3NCwxOSArMTc1LDI0IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgc3RhdGljIEtSZW5kZXJpbmdEZXZpY2UqIHJlbmRlcmluZ0RldmljZSgpOwog
I2VuZGlmCiAKLSAgICAgICAgYm9vbCBwcmludGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNGb3JQ
cmludGluZzsgfQorICAgICAgICBib29sIHByaW50aW5nKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAg
ICAgICAgIHZvaWQgc2V0Q29sb3JGcm9tQnJ1c2goKTsKICAgICAgICAgdm9pZCBzZXRDb2xvckZy
b21QZW4oKTsKLQotICAgICAgICBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBtX2RhdGE7Ci0gICAg
ICAgIFZlY3RvcjxJbnRSZWN0PiBtX2ZvY3VzUmluZ1JlY3RzOwotICAgICAgICBpbnQgbV9mb2N1
c1JpbmdXaWR0aDsKLSAgICAgICAgaW50IG1fZm9jdXNSaW5nT2Zmc2V0OwotICAgICAgICBib29s
IG1faXNGb3JQcmludGluZzsKLSAgICAgICAgYm9vbCBtX3VzZXNJbmFjdGl2ZVRleHRCYWNrZ3Jv
dW5kQ29sb3I7Ci0gICAgICAgIGJvb2wgbV91cGRhdGluZ0NvbnRyb2xUaW50czsKKyAgICAgICAg
CisgICAgICAgIHZvaWQgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKKyAgICAgICAgdm9pZCByZXN0b3Jl
UGxhdGZvcm1TdGF0ZSgpOworICAgICAgICAKKyAgICAgICAgaW50IGZvY3VzUmluZ1dpZHRoKCkg
Y29uc3Q7CisgICAgICAgIGludCBmb2N1c1JpbmdPZmZzZXQoKSBjb25zdDsKKyAgICAgICAgY29u
c3QgVmVjdG9yPEludFJlY3Q+JiBmb2N1c1JpbmdSZWN0cygpIGNvbnN0OworICAgICAgICAKKyAg
ICAgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dFByaXZhdGUqIGNyZWF0ZUdyYXBoaWNzQ29udGV4
dFByaXZhdGUoKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveUdyYXBoaWNzQ29udGV4dFBy
aXZhdGUoR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSopOworICAgICAgICAKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZSogbV9jb21tb247CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZSogbV9kYXRhOwogICAgIH07CiAKIH0KSW5kZXg6IHBsYXRmb3JtL21hYy9HcmFw
aGljc0NvbnRleHRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbWFjL0dyYXBoaWNzQ29u
dGV4dE1hYy5tbQkocmV2aXNpb24gMTMzNzEpCisrKyBwbGF0Zm9ybS9tYWMvR3JhcGhpY3NDb250
ZXh0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OCwyMCArNDgsMTEgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogLy8gY2FsbHMgaW4gdGhpcyBmaWxlIGFyZSBhbGwgZXhjZXB0aW9uLXNhZmUsIHNv
IHdlIGRvbid0IGJsb2NrCiAvLyBleGNlcHRpb25zIGZvciB0aG9zZS4KIAotc3RydWN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlIHsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSgpIDogcGFpbnRpbmdE
aXNhYmxlZChmYWxzZSkgeyB9Ci0gICAgRm9udCBmb250OwotICAgIFBlbiBwZW47Ci0gICAgQnJ1
c2ggYnJ1c2g7Ci0gICAgYm9vbCBwYWludGluZ0Rpc2FibGVkOwotfTsKLQotc3RydWN0IEdyYXBo
aWNzQ29udGV4dFByaXZhdGUgewotICAgIEdyYXBoaWNzQ29udGV4dFByaXZhdGUoKTsKLSAgICB+
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgc3Rh
dGU7ICAgIAotICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHRTdGF0ZT4gc3RhY2s7CitzdHJ1Y3Qg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlIHsKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUoKTsKKyAgICB+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCk7Cisg
ICAgCiAgICAgaWQgPFdlYkNvcmVUZXh0UmVuZGVyZXI+IHRleHRSZW5kZXJlcjsKICAgICBGb250
IHRleHRSZW5kZXJlckZvbnQ7CiAjaWYgU1ZHX1NVUFBPUlQKQEAgLTcwLDE5MiArNjEsMTEyIEBA
IHN0cnVjdCBHcmFwaGljc0NvbnRleHRQcml2YXRlIHsKIH07CiAKIC8vIEEgZmlsbFJlY3QgaGVs
cGVyIHRvIHdvcmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgTlNSZWN0RmlsbCB1c2VzIGNvcHkgbW9k
ZSwgbm90IHNvdXJjZSBvdmVyLgotc3RhdGljIGlubGluZSB2b2lkIGZpbGxSZWN0U291cmNlT3Zl
cihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3LCBmbG9hdCBoLCBjb25zdCBDb2xvciYgY29sKQor
c3RhdGljIGlubGluZSB2b2lkIGZpbGxSZWN0U291cmNlT3Zlcihjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2wpCiB7CiAgICAgW25zQ29sb3IoY29sKSBzZXRdOwotICAgIE5T
UmVjdEZpbGxVc2luZ09wZXJhdGlvbihOU01ha2VSZWN0KHgsIHksIHcsIGgpLCBOU0NvbXBvc2l0
ZVNvdXJjZU92ZXIpOworICAgIE5TUmVjdEZpbGxVc2luZ09wZXJhdGlvbihyZWN0LCBOU0NvbXBv
c2l0ZVNvdXJjZU92ZXIpOwogfQogCi0KLUdyYXBoaWNzQ29udGV4dFByaXZhdGU6OkdyYXBoaWNz
Q29udGV4dFByaXZhdGUoKQorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKQogICAgIDogdGV4dFJlbmRlcmVyKDApIAogewogfQog
Ci1HcmFwaGljc0NvbnRleHRQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpCitHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUoKQogewogICAgIEtXUVJlbGVhc2UodGV4dFJlbmRlcmVyKTsKIH0KIAogR3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHQoKQotICAgIDogbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQ
cml2YXRlKQotICAgICwgbV9mb2N1c1JpbmdXaWR0aCgwKQotICAgICwgbV9mb2N1c1JpbmdPZmZz
ZXQoMCkKLSAgICAsIG1faXNGb3JQcmludGluZyhmYWxzZSkKLSAgICAsIG1fdXNlc0luYWN0aXZl
VGV4dEJhY2tncm91bmRDb2xvcihmYWxzZSkKLSAgICAsIG1fdXBkYXRpbmdDb250cm9sVGludHMo
ZmFsc2UpCisgICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCisg
ICAgLCBtX2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSkKIHsKIH0KIAog
R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoYm9vbCBmb3JQcmludGluZykKLSAgICA6
IG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSkKLSAgICAsIG1fZm9jdXNSaW5nV2lk
dGgoMCkKLSAgICAsIG1fZm9jdXNSaW5nT2Zmc2V0KDApCi0gICAgLCBtX2lzRm9yUHJpbnRpbmco
Zm9yUHJpbnRpbmcpCi0gICAgLCBtX3VzZXNJbmFjdGl2ZVRleHRCYWNrZ3JvdW5kQ29sb3IoZmFs
c2UpCi0gICAgLCBtX3VwZGF0aW5nQ29udHJvbFRpbnRzKGZhbHNlKQorICAgIDogbV9jb21tb24o
Y3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQorICAgICwgbV9kYXRhKG5ldyBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCiB7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDo6fkdyYXBo
aWNzQ29udGV4dCgpCiB7CisgICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9jb21t
b24pOwogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKLWNvbnN0IEZvbnQmIEdyYXBoaWNzQ29udGV4
dDo6Zm9udCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS0+c3RhdGUuZm9udDsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZvbnQoY29uc3QgRm9udCYgYUZvbnQpCi17Ci0gICAg
bV9kYXRhLT5zdGF0ZS5mb250ID0gYUZvbnQ7Ci19Ci0KLWNvbnN0IFBlbiYgR3JhcGhpY3NDb250
ZXh0OjpwZW4oKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEtPnN0YXRlLnBlbjsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBlbihjb25zdCBQZW4mIHBlbikKLXsKLSAgICBtX2Rh
dGEtPnN0YXRlLnBlbiA9IHBlbjsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBlbihQ
ZW46OlBlblN0eWxlIHN0eWxlKQotewotICAgIG1fZGF0YS0+c3RhdGUucGVuLnNldFN0eWxlKHN0
eWxlKTsKLSAgICBtX2RhdGEtPnN0YXRlLnBlbi5zZXRDb2xvcihDb2xvcjo6YmxhY2spOwotICAg
IG1fZGF0YS0+c3RhdGUucGVuLnNldFdpZHRoKDApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0UGVuKFJHQkEzMiByZ2IpCi17Ci0gICAgbV9kYXRhLT5zdGF0ZS5wZW4uc2V0U3R5bGUo
UGVuOjpTb2xpZExpbmUpOwotICAgIG1fZGF0YS0+c3RhdGUucGVuLnNldENvbG9yKHJnYik7Ci0g
ICAgbV9kYXRhLT5zdGF0ZS5wZW4uc2V0V2lkdGgoMCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRCcnVzaChjb25zdCBCcnVzaCYgYnJ1c2gpCi17Ci0gICAgbV9kYXRhLT5zdGF0ZS5i
cnVzaCA9IGJydXNoOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QnJ1c2goQnJ1c2g6
OkJydXNoU3R5bGUgc3R5bGUpCi17Ci0gICAgbV9kYXRhLT5zdGF0ZS5icnVzaC5zZXRTdHlsZShz
dHlsZSk7Ci0gICAgbV9kYXRhLT5zdGF0ZS5icnVzaC5zZXRDb2xvcihDb2xvcjo6YmxhY2spOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QnJ1c2goUkdCQTMyIHJnYikKLXsKLSAgICBt
X2RhdGEtPnN0YXRlLmJydXNoLnNldFN0eWxlKEJydXNoOjpTb2xpZFBhdHRlcm4pOwotICAgIG1f
ZGF0YS0+c3RhdGUuYnJ1c2guc2V0Q29sb3IocmdiKTsKLX0KLQotY29uc3QgQnJ1c2gmIEdyYXBo
aWNzQ29udGV4dDo6YnJ1c2goKSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0
Zm9ybVN0YXRlKCkKIHsKLSAgICByZXR1cm4gbV9kYXRhLT5zdGF0ZS5icnVzaDsKKyAgICBbTlNH
cmFwaGljc0NvbnRleHQgc2F2ZUdyYXBoaWNzU3RhdGVdOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2F2ZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUo
KQogewotICAgIGlmIChtX2RhdGEtPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fZGF0YS0+c3RhY2suYXBwZW5kKG1fZGF0YS0+c3RhdGUpOwotCi0gICAg
W05TR3JhcGhpY3NDb250ZXh0IHNhdmVHcmFwaGljc1N0YXRlXTsgCi19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpyZXN0b3JlKCkKLXsKLSAgICBpZiAobV9kYXRhLT5zdGF0ZS5wYWludGluZ0Rp
c2FibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9kYXRhLT5zdGFjay5pc0VtcHR5
KCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFUlJPUiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVz
dG9yZSgpIHN0YWNrIGlzIGVtcHR5Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9k
YXRhLT5zdGF0ZSA9IG1fZGF0YS0+c3RhY2subGFzdCgpOwotICAgIG1fZGF0YS0+c3RhY2sucmVt
b3ZlTGFzdCgpOwotICAgICAKICAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNz
U3RhdGVdOwogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQg
Ym9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGludCB4LCBpbnQgeSwgaW50
IHcsIGludCBoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7Ci0gICAgaWYgKG1fZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZCkKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgICAgICAKLSAgICBp
ZiAobV9kYXRhLT5zdGF0ZS5icnVzaC5zdHlsZSgpICE9IEJydXNoOjpOb0JydXNoKQotICAgICAg
ICBmaWxsUmVjdFNvdXJjZU92ZXIoeCwgeSwgdywgaCwgbV9kYXRhLT5zdGF0ZS5icnVzaC5jb2xv
cigpKTsKKyAgICBpZiAoYnJ1c2goKS5zdHlsZSgpICE9IEJydXNoOjpOb0JydXNoKQorICAgICAg
ICBmaWxsUmVjdFNvdXJjZU92ZXIocmVjdCwgYnJ1c2goKS5jb2xvcigpKTsKIAotICAgIGlmICht
X2RhdGEtPnN0YXRlLnBlbi5zdHlsZSgpICE9IFBlbjo6UGVuOjpOb1BlbikgeworICAgIGlmIChw
ZW4oKS5zdHlsZSgpICE9IFBlbjo6UGVuOjpOb1BlbikgewogICAgICAgICBzZXRDb2xvckZyb21Q
ZW4oKTsKLSAgICAgICAgTlNGcmFtZVJlY3QoTlNNYWtlUmVjdCh4LCB5LCB3LCBoKSk7CisgICAg
ICAgIE5TRnJhbWVSZWN0KHJlY3QpOwogICAgIH0KIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldENvbG9yRnJvbUJydXNoKCkKIHsKLSAgICBbbnNDb2xvcihtX2RhdGEtPnN0YXRlLmJydXNo
LmNvbG9yKCkpIHNldF07CisgICAgW25zQ29sb3IoYnJ1c2goKS5jb2xvcigpKSBzZXRdOwogfQog
ICAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDb2xvckZyb21QZW4oKQogewotICAgIFtuc0Nv
bG9yKG1fZGF0YS0+c3RhdGUucGVuLmNvbG9yKCkpIHNldF07CisgICAgW25zQ29sb3IocGVuKCku
Y29sb3IoKSkgc2V0XTsKIH0KICAgCiAgIC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9y
ZGVycy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShpbnQgeDEsIGludCB5MSwgaW50
IHgyLCBpbnQgeTIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50UG9p
bnQmIHBvaW50MSwgY29uc3QgSW50UG9pbnQmIHBvaW50MikKIHsKLSAgICBpZiAobV9kYXRhLT5z
dGF0ZS5wYWludGluZ0Rpc2FibGVkKQorICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFBlbjo6UGVuU3R5bGUgcGVuU3R5bGUgPSBtX2RhdGEtPnN0YXRl
LnBlbi5zdHlsZSgpOworICAgIFBlbjo6UGVuU3R5bGUgcGVuU3R5bGUgPSBwZW4oKS5zdHlsZSgp
OwogICAgIGlmIChwZW5TdHlsZSA9PSBQZW46OlBlbjo6Tm9QZW4pCiAgICAgICAgIHJldHVybjsK
LSAgICBmbG9hdCB3aWR0aCA9IG1fZGF0YS0+c3RhdGUucGVuLndpZHRoKCk7CisgICAgZmxvYXQg
d2lkdGggPSBwZW4oKS53aWR0aCgpOwogICAgIGlmICh3aWR0aCA8IDEpCiAgICAgICAgIHdpZHRo
ID0gMTsKIAotICAgIE5TUG9pbnQgcDEgPSBOU01ha2VQb2ludCh4MSwgeTEpOwotICAgIE5TUG9p
bnQgcDIgPSBOU01ha2VQb2ludCh4MiwgeTIpOworICAgIE5TUG9pbnQgcDEgPSBwb2ludDE7Cisg
ICAgTlNQb2ludCBwMiA9IHBvaW50MjsKKyAgICBib29sIGlzVmVydGljYWxMaW5lID0gKHAxLngg
PT0gcDIueCk7CiAgICAgCiAgICAgLy8gRm9yIG9kZCB3aWR0aHMsIHdlIGFkZCBpbiAwLjUgdG8g
dGhlIGFwcHJvcHJpYXRlIHgveSBzbyB0aGF0IHRoZSBmbG9hdCBhcml0aG1ldGljCiAgICAgLy8g
d29ya3Mgb3V0LiAgRm9yIGV4YW1wbGUsIHdpdGggYSBib3JkZXIgd2lkdGggb2YgMywgS0hUTUwg
d2lsbCBwYXNzIHVzICh5MSt5MikvMiwgZS5nLiwKICAgICAvLyAoNTArNTMpLzIgPSAxMDMvMiA9
IDUxIHdoZW4gd2Ugd2FudCA1MS41LiAgSXQgaXMgYWx3YXlzIHRydWUgdGhhdCBhbiBldmVuIHdp
ZHRoIGdhdmUKICAgICAvLyB1cyBhIHBlcmZlY3QgcG9zaXRpb24sIGJ1dCBhbiBvZGQgd2lkdGgg
Z2F2ZSB1cyBhIHBvc2l0aW9uIHRoYXQgaXMgb2ZmIGJ5IGV4YWN0bHkgMC41LgogICAgIGlmIChw
ZW5TdHlsZSA9PSBQZW46OkRvdExpbmUgfHwgcGVuU3R5bGUgPT0gUGVuOjpEYXNoTGluZSkgewot
ICAgICAgICBpZiAoeDEgPT0geDIpIHsKKyAgICAgICAgaWYgKGlzVmVydGljYWxMaW5lKSB7CiAg
ICAgICAgICAgICBwMS55ICs9IHdpZHRoOwogICAgICAgICAgICAgcDIueSAtPSB3aWR0aDsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHAx
LnggKz0gd2lkdGg7CiAgICAgICAgICAgICBwMi54IC09IHdpZHRoOwogICAgICAgICB9CiAgICAg
fQogICAgIAogICAgIGlmICgoKGludCl3aWR0aCklMikgewotICAgICAgICBpZiAoeDEgPT0geDIp
IHsKKyAgICAgICAgaWYgKGlzVmVydGljYWxMaW5lKSB7CiAgICAgICAgICAgICAvLyBXZSdyZSBh
IHZlcnRpY2FsIGxpbmUuICBBZGp1c3Qgb3VyIHguCiAgICAgICAgICAgICBwMS54ICs9IDAuNTsK
ICAgICAgICAgICAgIHAyLnggKz0gMC41OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgeworICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2UncmUgYSBob3Jpem9udGFsIGxpbmUuIEFk
anVzdCBvdXIgeS4KICAgICAgICAgICAgIHAxLnkgKz0gMC41OwogICAgICAgICAgICAgcDIueSAr
PSAwLjU7CkBAIC0yODcsMTggKzE5OCwxOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmUoaW50IHgxLCBpCiAgICAgaWYgKHBhdFdpZHRoKSB7CiAgICAgICAgIC8vIERvIGEgcmVjdCBm
aWxsIG9mIG91ciBlbmRwb2ludHMuICBUaGlzIGVuc3VyZXMgd2UgYWx3YXlzIGhhdmUgdGhlCiAg
ICAgICAgIC8vIGFwcGVhcmFuY2Ugb2YgYmVpbmcgYSBib3JkZXIuICBXZSB0aGVuIGRyYXcgdGhl
IGFjdHVhbCBkb3R0ZWQvZGFzaGVkIGxpbmUuCi0gICAgICAgIGlmICh4MSA9PSB4MikgewotICAg
ICAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKHAxLngtd2lkdGgvMiwgcDEueS13aWR0aCwgd2lk
dGgsIHdpZHRoLCBtX2RhdGEtPnN0YXRlLnBlbi5jb2xvcigpKTsKLSAgICAgICAgICAgIGZpbGxS
ZWN0U291cmNlT3ZlcihwMi54LXdpZHRoLzIsIHAyLnksIHdpZHRoLCB3aWR0aCwgbV9kYXRhLT5z
dGF0ZS5wZW4uY29sb3IoKSk7CisgICAgICAgIGNvbnN0IENvbG9yJiBwZW5Db2xvciA9IHBlbigp
LmNvbG9yKCk7CisgICAgICAgIGlmIChpc1ZlcnRpY2FsTGluZSkgeworICAgICAgICAgICAgZmls
bFJlY3RTb3VyY2VPdmVyKEZsb2F0UmVjdChwMS54LXdpZHRoLzIsIHAxLnktd2lkdGgsIHdpZHRo
LCB3aWR0aCksIHBlbkNvbG9yKTsKKyAgICAgICAgICAgIGZpbGxSZWN0U291cmNlT3ZlcihGbG9h
dFJlY3QocDIueC13aWR0aC8yLCBwMi55LCB3aWR0aCwgd2lkdGgpLCBwZW5Db2xvcik7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmaWxsUmVjdFNvdXJjZU92ZXIocDEueC13aWR0aCwg
cDEueS13aWR0aC8yLCB3aWR0aCwgd2lkdGgsIG1fZGF0YS0+c3RhdGUucGVuLmNvbG9yKCkpOwot
ICAgICAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKHAyLngsIHAyLnktd2lkdGgvMiwgd2lkdGgs
IHdpZHRoLCBtX2RhdGEtPnN0YXRlLnBlbi5jb2xvcigpKTsKKyAgICAgICAgICAgIGZpbGxSZWN0
U291cmNlT3ZlcihGbG9hdFJlY3QocDEueC13aWR0aCwgcDEueS13aWR0aC8yLCB3aWR0aCwgd2lk
dGgpLCBwZW5Db2xvcik7CisgICAgICAgICAgICBmaWxsUmVjdFNvdXJjZU92ZXIoRmxvYXRSZWN0
KHAyLngsIHAyLnktd2lkdGgvMiwgd2lkdGgsIHdpZHRoKSwgcGVuQ29sb3IpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICAvLyBFeGFtcGxlOiA4MCBwaXhlbHMgd2l0aCBhIHdpZHRoIG9m
IDMwIHBpeGVscy4KICAgICAgICAgLy8gUmVtYWluZGVyIGlzIDIwLiAgVGhlIG1heGltdW0gcGl4
ZWxzIG9mIGxpbmUgd2UgY291bGQgcGFpbnQKICAgICAgICAgLy8gd2lsbCBiZSA1MCBwaXhlbHMu
Ci0gICAgICAgIGludCBkaXN0YW5jZSA9ICgoeDEgPT0geDIpID8gKHkyIC0geTEpIDogKHgyIC0g
eDEpKSAtIDIqKGludCl3aWR0aDsKKyAgICAgICAgaW50IGRpc3RhbmNlID0gKGlzVmVydGljYWxM
aW5lID8gKGludCkocDIueSAtIHAxLnkpIDogKGludCkocDIueCAtIHAxLngpKSAtIDIqKGludCl3
aWR0aDsKICAgICAgICAgaW50IHJlbWFpbmRlciA9IGRpc3RhbmNlJXBhdFdpZHRoOwogICAgICAg
ICBpbnQgY292ZXJhZ2UgPSBkaXN0YW5jZS1yZW1haW5kZXI7CiAgICAgICAgIGludCBudW1TZWdt
ZW50cyA9IGNvdmVyYWdlL3BhdFdpZHRoOwpAQCAtMzQxLDM5ICsyNTMsMzggQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lKGludCB4MSwgaQogCiAKIC8vIFRoaXMgbWV0aG9kIGlzIG9u
bHkgdXNlZCB0byBkcmF3IHRoZSBsaXR0bGUgY2lyY2xlcyB1c2VkIGluIGxpc3RzLgotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
CiAgICAgLy8gRklYTUU6IENHIGFkZGVkIENHQ29udGV4dEFkZEVsbGlwc2VpblJlY3QgaW4gVGln
ZXIsIHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIHF1aXRlIGVhc2lseSBkcmF3IGFuIGVsbGlwc2Uu
CiAgICAgLy8gVGhpcyBjb2RlIGNhbiBvbmx5IGhhbmRsZSBjaXJjbGVzLCBub3QgZWxsaXBzZXMu
IEJ1dCBraHRtbCBvbmx5CiAgICAgLy8gdXNlcyBpdCBmb3IgY2lyY2xlcy4KLSAgICBBU1NFUlQo
dyA9PSBoKTsKKyAgICBBU1NFUlQocmVjdC53aWR0aCgpID09IHJlY3QuaGVpZ2h0KCkpOwogCi0g
ICAgaWYgKG1fZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZCkKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gKENHQ29udGV4dFJlZilbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XSBncmFwaGljc1BvcnRdOwogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKLSAgICBm
bG9hdCByID0gKGZsb2F0KXcgLyAyOwotICAgIENHQ29udGV4dEFkZEFyYyhjb250ZXh0LCB4ICsg
ciwgeSArIHIsIHIsIDAsIDIqTV9QSSwgdHJ1ZSk7CisgICAgZmxvYXQgciA9IChmbG9hdClyZWN0
LndpZHRoKCkgLyAyOworICAgIENHQ29udGV4dEFkZEFyYyhjb250ZXh0LCByZWN0LngoKSArIHIs
IHJlY3QueSgpICsgciwgciwgMCwgMipNX1BJLCB0cnVlKTsKICAgICBDR0NvbnRleHRDbG9zZVBh
dGgoY29udGV4dCk7CiAKLSAgICBpZiAobV9kYXRhLT5zdGF0ZS5icnVzaC5zdHlsZSgpICE9IEJy
dXNoOjpOb0JydXNoKSB7CisgICAgaWYgKGJydXNoKCkuc3R5bGUoKSAhPSBCcnVzaDo6Tm9CcnVz
aCkgewogICAgICAgICBzZXRDb2xvckZyb21CcnVzaCgpOwotICAgICAgICBpZiAobV9kYXRhLT5z
dGF0ZS5wZW4uc3R5bGUoKSAhPSBQZW46Ok5vUGVuKSB7CisgICAgICAgIGlmIChwZW4oKS5zdHls
ZSgpICE9IFBlbjo6Tm9QZW4pIHsKICAgICAgICAgICAgIC8vIHN0cm9rZSBhbmQgZmlsbAogICAg
ICAgICAgICAgc2V0Q29sb3JGcm9tUGVuKCk7Ci0gICAgICAgICAgICB1aW50IHBlbldpZHRoID0g
bV9kYXRhLT5zdGF0ZS5wZW4ud2lkdGgoKTsKKyAgICAgICAgICAgIHVpbnQgcGVuV2lkdGggPSBw
ZW4oKS53aWR0aCgpOwogICAgICAgICAgICAgaWYgKHBlbldpZHRoID09IDApIAogICAgICAgICAg
ICAgICAgIHBlbldpZHRoKys7CiAgICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29u
dGV4dCwgcGVuV2lkdGgpOwogICAgICAgICAgICAgQ0dDb250ZXh0RHJhd1BhdGgoY29udGV4dCwg
a0NHUGF0aEZpbGxTdHJva2UpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIENHQ29udGV4dEZpbGxQYXRoKGNvbnRleHQpOwotICAgICAgICB9CiAgICAgfQot
ICAgIGlmIChtX2RhdGEtPnN0YXRlLnBlbi5zdHlsZSgpICE9IFBlbjo6Tm9QZW4pIHsKKyAgICBp
ZiAocGVuKCkuc3R5bGUoKSAhPSBQZW46Ok5vUGVuKSB7CiAgICAgICAgIHNldENvbG9yRnJvbVBl
bigpOwotICAgICAgICB1aW50IHBlbldpZHRoID0gbV9kYXRhLT5zdGF0ZS5wZW4ud2lkdGgoKTsK
KyAgICAgICAgdWludCBwZW5XaWR0aCA9IHBlbigpLndpZHRoKCk7CiAgICAgICAgIGlmIChwZW5X
aWR0aCA9PSAwKSAKICAgICAgICAgICAgIHBlbldpZHRoKys7CiAgICAgICAgIENHQ29udGV4dFNl
dExpbmVXaWR0aChjb250ZXh0LCBwZW5XaWR0aCk7CkBAIC0zODIsMTUgKzI5MywxNSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoaW50IHgsCiB9CiAKIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdBcmMgKGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBpbnQgYSwgaW50
IGFsZW4pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0FyYyhpbnQgeCwgaW50IHksIGludCB3
LCBpbnQgaCwgaW50IGEsIGludCBhbGVuKQogeyAKICAgICAvLyBPbmx5IHN1cHBvcnRzIGFyYyBv
biBjaXJjbGVzLiAgVGhhdCdzIGFsbCBraHRtbCBuZWVkcy4KICAgICBBU1NFUlQodyA9PSBoKTsK
IAotICAgIGlmIChtX2RhdGEtPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQpCisgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmIChtX2RhdGEtPnN0
YXRlLnBlbi5zdHlsZSgpICE9IFBlbjo6Tm9QZW4pIHsKKyAgICBpZiAocGVuKCkuc3R5bGUoKSAh
PSBQZW46Ok5vUGVuKSB7CiAgICAgICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gKENHQ29udGV4
dFJlZilbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdOwog
ICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CiAgICAgICAgIApAQCAtNDAwLDE0
ICszMTEsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdBcmMgKGludCB4LCBpbgogICAg
ICAgICBDR0NvbnRleHRBZGRBcmMoY29udGV4dCwgeCArIHIsIHkgKyByLCByLCAtZmEgKiBNX1BJ
LzE4MCwgLWZhbGVuICogTV9QSS8xODAsIHRydWUpOwogICAgICAgICAKICAgICAgICAgc2V0Q29s
b3JGcm9tUGVuKCk7Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0aChjb250ZXh0LCBtX2Rh
dGEtPnN0YXRlLnBlbi53aWR0aCgpKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGNv
bnRleHQsIHBlbigpLndpZHRoKCkpOwogICAgICAgICBDR0NvbnRleHRTdHJva2VQYXRoKGNvbnRl
eHQpOwogICAgIH0KIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29u
KGNvbnN0IEludFBvaW50QXJyYXkmIHBvaW50cykKIHsKLSAgICBpZiAobV9kYXRhLT5zdGF0ZS5w
YWludGluZ0Rpc2FibGVkKQorICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGludCBucG9pbnRzID0gcG9pbnRzLnNpemUoKTsKQEAgLTQyNiwxNCArMzM3
LDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbigKICAgICAgICAg
Q0dDb250ZXh0QWRkTGluZVRvUG9pbnQoY29udGV4dCwgcG9pbnRzW2ldLngoKSwgcG9pbnRzW2ld
LnkoKSk7CiAgICAgQ0dDb250ZXh0Q2xvc2VQYXRoKGNvbnRleHQpOwogCi0gICAgaWYgKG1fZGF0
YS0+c3RhdGUuYnJ1c2guc3R5bGUoKSAhPSBCcnVzaDo6Tm9CcnVzaCkgeworICAgIGlmIChicnVz
aCgpLnN0eWxlKCkgIT0gQnJ1c2g6Ok5vQnJ1c2gpIHsKICAgICAgICAgc2V0Q29sb3JGcm9tQnJ1
c2goKTsKICAgICAgICAgQ0dDb250ZXh0RU9GaWxsUGF0aChjb250ZXh0KTsKICAgICB9CiAKLSAg
ICBpZiAobV9kYXRhLT5zdGF0ZS5wZW4uc3R5bGUoKSAhPSBQZW46Ok5vUGVuKSB7CisgICAgaWYg
KHBlbigpLnN0eWxlKCkgIT0gUGVuOjpOb1BlbikgewogICAgICAgICBzZXRDb2xvckZyb21QZW4o
KTsKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQsIG1fZGF0YS0+c3RhdGUu
cGVuLndpZHRoKCkpOworICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgcGVu
KCkud2lkdGgoKSk7CiAgICAgICAgIENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CiAgICAg
fQogCkBAIC00NTUsMTYgKzM2NiwxNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9z
aXRlT3BlcmF0CiAgICAgW1tXZWJDb3JlSW1hZ2VSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9y
eV0gc2V0Q0dDb21wb3NpdGVPcGVyYXRpb246b3AgaW5Db250ZXh0OmNvbnRleHRdOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Zsb2F0SW1hZ2UoSW1hZ2UqIGltYWdlLCBmbG9hdCB4
LCBmbG9hdCB5LCBmbG9hdCB3LCBmbG9hdCBoLCAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
RmxvYXRJbWFnZShJbWFnZSogaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdCwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9h
dCBzaCwgSW1hZ2U6OkNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCB2b2lkKiBj
b250ZXh0KQogewotICAgIGlmIChtX2RhdGEtPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQpCisgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZmxvYXQgdHN3
ID0gc3c7CiAgICAgZmxvYXQgdHNoID0gc2g7Ci0gICAgZmxvYXQgdHcgPSB3OwotICAgIGZsb2F0
IHRoID0gaDsKKyAgICBmbG9hdCB0dyA9IGRlc3Qud2lkdGgoKTsKKyAgICBmbG9hdCB0aCA9IGRl
c3QuaGVpZ2h0KCk7CiAgICAgICAgIAogICAgIGlmICh0c3cgPT0gLTEpCiAgICAgICAgIHRzdyA9
IGltYWdlLT53aWR0aCgpOwpAQCAtNDc2LDI4ICszODcsMjggQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdGbG9hdEltYWdlKEltYQogICAgIGlmICh0aCA9PSAtMSkKICAgICAgICAgdGggPSBp
bWFnZS0+aGVpZ2h0KCk7CiAKLSAgICBpbWFnZS0+ZHJhd0luUmVjdChGbG9hdFJlY3QoeCwgeSwg
dHcsIHRoKSwgRmxvYXRSZWN0KHN4LCBzeSwgdHN3LCB0c2gpLCBjb21wb3NpdGVPcGVyYXRvciwg
Y29udGV4dCk7CisgICAgaW1hZ2UtPmRyYXdJblJlY3QoRmxvYXRSZWN0KGRlc3QubG9jYXRpb24o
KSwgRmxvYXRTaXplKHR3LCB0aCkpLCBGbG9hdFJlY3Qoc3gsIHN5LCB0c3csIHRzaCksIGNvbXBv
c2l0ZU9wZXJhdG9yLCBjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdU
aWxlZEltYWdlKEltYWdlKiBpbWFnZSwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsIGludCBz
eCwgaW50IHN5LCB2b2lkKiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxl
ZEltYWdlKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHN4LCBpbnQgc3ks
IHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgaWYgKG1fZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNhYmxl
ZCkKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgaW1hZ2UtPnRpbGVJblJlY3QoRmxvYXRSZWN0KHgsIHksIHcsIGgpLCBGbG9hdFBvaW50KHN4
LCBzeSksIGNvbnRleHQpOworICAgIGltYWdlLT50aWxlSW5SZWN0KHJlY3QsIEZsb2F0UG9pbnQo
c3gsIHN5KSwgY29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3U2NhbGVk
QW5kVGlsZWRJbWFnZShJbWFnZSogaW1hZ2UsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBp
bnQgc3gsIGludCBzeSwgaW50IHN3LCBpbnQgc2gsIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdTY2FsZWRBbmRUaWxlZEltYWdlKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgZGVzdCwg
aW50IHN4LCBpbnQgc3ksIGludCBzdywgaW50IHNoLCAKICAgICBJbWFnZTo6VGlsZVJ1bGUgaFJ1
bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgdm9pZCogY29udGV4dCkKIHsKLSAgICBpZiAobV9k
YXRhLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkKQorICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChoUnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUg
JiYgdlJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlKQogICAgICAgICAvLyBKdXN0IGRvIGEgc2Nh
bGUuCi0gICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIHgsIHksIHcsIGgsIHN4LCBzeSwg
c3csIHNoLCBJbWFnZTo6Q29tcG9zaXRlU291cmNlT3ZlciwgY29udGV4dCk7CisgICAgICAgIHJl
dHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3QsIHN4LCBzeSwgc3csIHNoLCBJbWFnZTo6Q29tcG9z
aXRlU291cmNlT3ZlciwgY29udGV4dCk7CiAKLSAgICBpbWFnZS0+c2NhbGVBbmRUaWxlSW5SZWN0
KEZsb2F0UmVjdCh4LCB5LCB3LCBoKSwgRmxvYXRSZWN0KHN4LCBzeSwgc3csIHNoKSwgaFJ1bGUs
IHZSdWxlLCBjb250ZXh0KTsKKyAgICBpbWFnZS0+c2NhbGVBbmRUaWxlSW5SZWN0KGRlc3QsIEZs
b2F0UmVjdChzeCwgc3ksIHN3LCBzaCksIGhSdWxlLCB2UnVsZSwgY29udGV4dCk7CiB9CiAKIHN0
YXRpYyBpbnQgZ2V0QmxlbmRlZENvbG9yQ29tcG9uZW50KGludCBjLCBpbnQgYSkKQEAgLTUxMSw3
ICs0MjIsNyBAQCBzdGF0aWMgaW50IGdldEJsZW5kZWRDb2xvckNvbXBvbmVudChpbnQgCiAKIENv
bG9yIEdyYXBoaWNzQ29udGV4dDo6c2VsZWN0ZWRUZXh0QmFja2dyb3VuZENvbG9yKCkgY29uc3QK
IHsKLSAgICBOU0NvbG9yICpjb2xvciA9IG1fdXNlc0luYWN0aXZlVGV4dEJhY2tncm91bmRDb2xv
ciA/IFtOU0NvbG9yIHNlY29uZGFyeVNlbGVjdGVkQ29udHJvbENvbG9yXSA6IFtOU0NvbG9yIHNl
bGVjdGVkVGV4dEJhY2tncm91bmRDb2xvcl07CisgICAgTlNDb2xvciAqY29sb3IgPSB1c2VzSW5h
Y3RpdmVUZXh0QmFja2dyb3VuZENvbG9yKCkgPyBbTlNDb2xvciBzZWNvbmRhcnlTZWxlY3RlZENv
bnRyb2xDb2xvcl0gOiBbTlNDb2xvciBzZWxlY3RlZFRleHRCYWNrZ3JvdW5kQ29sb3JdOwogICAg
IC8vIHRoaXMgbmVlZHMgdG8gYWx3YXlzIHVzZSBkZXZpY2UgY29sb3JzcGFjZSBzbyBpdCBjYW4g
ZGUtY2FsaWJyYXRlIHRoZSBjb2xvciBmb3IKICAgICAvLyBDb2xvciB0byBwb3NzaWJseSByZWNh
bGlicmF0ZSBpdAogICAgIGNvbG9yID0gW2NvbG9yIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpO
U0RldmljZVJHQkNvbG9yU3BhY2VdOwpAQCAtNTI5LDIzICs0NDAsMTggQEAgQ29sb3IgR3JhcGhp
Y3NDb250ZXh0OjpzZWxlY3RlZFRleHRCYWNrZwogICAgIHJldHVybiBjb2w7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgY29u
c3QgQnJ1c2gmIGJydXNoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QsIGNvbnN0IEJydXNoJiBicnVzaCkKIHsKLSAgICBpZiAobV9kYXRhLT5zdGF0
ZS5wYWludGluZ0Rpc2FibGVkKQorICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChicnVzaC5zdHlsZSgpID09IEJydXNoOjpTb2xpZFBhdHRlcm4p
Ci0gICAgICAgIGZpbGxSZWN0U291cmNlT3Zlcih4LCB5LCB3LCBoLCBicnVzaC5jb2xvcigpKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnN0IEJydXNoJiBicnVzaCkKLXsKLSAgICBmaWxsUmVjdChyZWN0LngoKSwgcmVjdC55KCks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgYnJ1c2gpOworICAgICAgICBmaWxsUmVjdFNv
dXJjZU92ZXIocmVjdCwgYnJ1c2guY29sb3IoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjphZGRDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKG1fZGF0YS0+c3RhdGUu
cGFpbnRpbmdEaXNhYmxlZCkKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBbTlNCZXppZXJQYXRoIGNsaXBSZWN0OnJlY3RdOwpAQCAtNTU0LDcgKzQ2
MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRDbGlwKGNvbnN0IEludFIKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjphZGRSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgY29u
c3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3Qg
SW50U2l6ZSYgYm90dG9tUmlnaHQpCiB7Ci0gICAgaWYgKG1fZGF0YS0+c3RhdGUucGFpbnRpbmdE
aXNhYmxlZCkKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBOZWVkIHN1ZmZpY2llbnQgd2lkdGggYW5kIGhlaWdodCB0byBjb250YWluIHRoZXNl
IGN1cnZlcy4gIFNhbml0eSBjaGVjayBvdXIgdG9wL2JvdHRvbQpAQCAtNjA1LDE2ICs1MTEsNiBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkUm91bmRlZFJlY3RDbGlwCiAgICAgQ0dDb250ZXh0
Q2xpcChjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBhaW50aW5nRGlz
YWJsZWQoYm9vbCBmKQotewotICAgIG1fZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZCA9IGY7
Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpwYWludGluZ0Rpc2FibGVkKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9kYXRhLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkOwotfQotCiBDR0NvbnRl
eHRSZWYgR3JhcGhpY3NDb250ZXh0OjpjdXJyZW50Q0dDb250ZXh0KCkKIHsKICAgICByZXR1cm4g
KENHQ29udGV4dFJlZilbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGlj
c1BvcnRdOwpAQCAtNjI5LDcgKzUyNSw3IEBAIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBHcmFw
aGljc0NvbnRleHQKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBpZiAobV9kYXRhLT5zdGF0ZS5wYWludGluZ0Rpc2Fi
bGVkKQorICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IGN1cnJlbnRDR0NvbnRleHQoKTsKICAgICBDR0NvbnRleHRT
YXZlR1N0YXRlKGNvbnRleHQpOwpAQCAtNjM5LDcgKzUzNSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUwKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5z
cGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAobV9kYXRhLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVk
KQorICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBDR0Nv
bnRleHRSZWYgY29udGV4dCA9IGN1cnJlbnRDR0NvbnRleHQoKTsKICAgICBDR0NvbnRleHRFbmRU
cmFuc3BhcmVuY3lMYXllcihjb250ZXh0KTsKQEAgLTY0OCw3ICs1NDQsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRTaGFkb3coaW50IHgsIGludCB5LCBpbnQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yKQogewot
ICAgIGlmIChtX2RhdGEtPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQpCisgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIENoZWNrIGZvciBhbiBpbnZhbGlk
IGNvbG9yLCBhcyB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvbG9yIHdhcyBub3Qgc2V0IGZvciB0aGUg
c2hhZG93CiAgICAgLy8gYW5kIHdlIHNob3VsZCB0aGVyZWZvcmUganVzdCB1c2UgdGhlIGRlZmF1
bHQgc2hhZG93IGNvbG9yLgpAQCAtNjY3LDcgKzU2Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRTaGFkb3coaW50IHgsIGkKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93
KCkKIHsKLSAgICBpZiAobV9kYXRhLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkKQorICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IGN1cnJlbnRDR0NvbnRleHQoKTsKICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29s
b3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgTlVMTCk7CkBAIC02NzUsMTcgKzU3MSwxOCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3coKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKG1fZGF0YS0+
c3RhdGUucGFpbnRpbmdEaXNhYmxlZCkKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgaW50IHJhZGl1cyA9IChtX2ZvY3VzUmluZ1dpZHRoIC0gMSkgLyAy
OwotICAgIGludCBvZmZzZXQgPSByYWRpdXMgKyBtX2ZvY3VzUmluZ09mZnNldDsKKyAgICBpbnQg
cmFkaXVzID0gKGZvY3VzUmluZ1dpZHRoKCkgLSAxKSAvIDI7CisgICAgaW50IG9mZnNldCA9IHJh
ZGl1cyArIGZvY3VzUmluZ09mZnNldCgpOwogICAgIENHQ29sb3JSZWYgY29sb3JSZWYgPSBjb2xv
ci5pc1ZhbGlkKCkgPyBjZ0NvbG9yKGNvbG9yKSA6IDA7CiAgICAgCiAgICAgQ0dNdXRhYmxlUGF0
aFJlZiBmb2N1c1JpbmdQYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOwotICAgIHVuc2lnbmVk
IHJlY3RDb3VudCA9IG1fZm9jdXNSaW5nUmVjdHMuc2l6ZSgpOworICAgIGNvbnN0IFZlY3RvcjxJ
bnRSZWN0PiYgcmVjdHMgPSBmb2N1c1JpbmdSZWN0cygpOworICAgIHVuc2lnbmVkIHJlY3RDb3Vu
dCA9IHJlY3RzLnNpemUoKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVj
dENvdW50OyBpKyspCi0gICAgICAgIENHUGF0aEFkZFJlY3QoZm9jdXNSaW5nUGF0aCwgMCwgQ0dS
ZWN0SW5zZXQobV9mb2N1c1JpbmdSZWN0c1tpXSwgLW9mZnNldCwgLW9mZnNldCkpOworICAgICAg
ICBDR1BhdGhBZGRSZWN0KGZvY3VzUmluZ1BhdGgsIDAsIENHUmVjdEluc2V0KHJlY3RzW2ldLCAt
b2Zmc2V0LCAtb2Zmc2V0KSk7CiAgICAgCiAgICAgW1tXZWJDb3JlR3JhcGhpY3NCcmlkZ2Ugc2hh
cmVkQnJpZGdlXSBkcmF3Rm9jdXNSaW5nV2l0aFBhdGg6Zm9jdXNSaW5nUGF0aCByYWRpdXM6cmFk
aXVzIGNvbG9yOmNvbG9yUmVmXTsKICAgICBDR0NvbG9yUmVsZWFzZShjb2xvclJlZik7CkluZGV4
OiBwbGF0Zm9ybS9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL0dy
YXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDEzMzcxKQorKysgcGxhdGZvcm0vR3JhcGhpY3ND
b250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMzMgKzI2LDE5NiBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCisjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNs
dWRlICJRU3RyaW5nLmgiCi0jaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIldpZGdldC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZSB7Cisg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSA6IHBhaW50aW5nRGlzYWJsZWQoZmFsc2UpIHsgfQor
ICAgIEZvbnQgZm9udDsKKyAgICBQZW4gcGVuOworICAgIEJydXNoIGJydXNoOworICAgIGJvb2wg
cGFpbnRpbmdEaXNhYmxlZDsKK307CisgICAgICAgIAorc3RydWN0IEdyYXBoaWNzQ29udGV4dFBy
aXZhdGUgeworICAgIEdyYXBoaWNzQ29udGV4dFByaXZhdGUoKTsKKyAgICB+R3JhcGhpY3NDb250
ZXh0UHJpdmF0ZSgpOworICAgIAorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIHN0YXRlOworICAg
IFZlY3RvcjxHcmFwaGljc0NvbnRleHRTdGF0ZT4gc3RhY2s7CisgICAgVmVjdG9yPEludFJlY3Q+
IG1fZm9jdXNSaW5nUmVjdHM7CisgICAgaW50IG1fZm9jdXNSaW5nV2lkdGg7CisgICAgaW50IG1f
Zm9jdXNSaW5nT2Zmc2V0OworICAgIGJvb2wgbV9pc0ZvclByaW50aW5nOworICAgIGJvb2wgbV91
c2VzSW5hY3RpdmVUZXh0QmFja2dyb3VuZENvbG9yOworICAgIGJvb2wgbV91cGRhdGluZ0NvbnRy
b2xUaW50czsKK307CisKK0dyYXBoaWNzQ29udGV4dFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBy
aXZhdGUoKQorICAgIDogbV9mb2N1c1JpbmdXaWR0aCgwKQorICAgICwgbV9mb2N1c1JpbmdPZmZz
ZXQoMCkKKyAgICAsIG1faXNGb3JQcmludGluZyhmYWxzZSkKKyAgICAsIG1fdXNlc0luYWN0aXZl
VGV4dEJhY2tncm91bmRDb2xvcihmYWxzZSkKKyAgICAsIG1fdXBkYXRpbmdDb250cm9sVGludHMo
ZmFsc2UpCit7Cit9CisKK0dyYXBoaWNzQ29udGV4dFByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQ
cml2YXRlKCkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogR3JhcGhpY3NDb250ZXh0
OjpjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkKK3sKKyAgICByZXR1cm4gbmV3IEdyYXBo
aWNzQ29udGV4dFByaXZhdGU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkZXN0cm95R3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZShHcmFwaGljc0NvbnRleHRQcml2YXRlKiBkZWxldGVNZSkKK3sK
KyAgICBkZWxldGUgZGVsZXRlTWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCkK
K3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2NvbW1vbi0+c3RhY2suYXBwZW5kKG1fY29tbW9uLT5zdGF0ZSk7CisgICAgCisgICAgc2F2ZVBs
YXRmb3JtU3RhdGUoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQorewor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X2NvbW1vbi0+c3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgIExPR19FUlJPUigiRVJST1Igdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKSBzdGFjayBpcyBlbXB0eSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIG1fY29tbW9uLT5zdGF0ZSA9IG1fY29tbW9uLT5zdGFjay5sYXN0
KCk7CisgICAgbV9jb21tb24tPnN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAKKyAgICByZXN0b3Jl
UGxhdGZvcm1TdGF0ZSgpOworfQorCitjb25zdCBGb250JiBHcmFwaGljc0NvbnRleHQ6OmZvbnQo
KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuZm9udDsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldEZvbnQoY29uc3QgRm9udCYgYUZvbnQpCit7CisgICAgbV9jb21t
b24tPnN0YXRlLmZvbnQgPSBhRm9udDsKK30KKworY29uc3QgUGVuJiBHcmFwaGljc0NvbnRleHQ6
OnBlbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5wZW47Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQZW4oY29uc3QgUGVuJiBwZW4pCit7CisgICAgbV9jb21t
b24tPnN0YXRlLnBlbiA9IHBlbjsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBlbihQ
ZW46OlBlblN0eWxlIHN0eWxlKQoreworICAgIG1fY29tbW9uLT5zdGF0ZS5wZW4uc2V0U3R5bGUo
c3R5bGUpOworICAgIG1fY29tbW9uLT5zdGF0ZS5wZW4uc2V0Q29sb3IoQ29sb3I6OmJsYWNrKTsK
KyAgICBtX2NvbW1vbi0+c3RhdGUucGVuLnNldFdpZHRoKDApOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0UGVuKFJHQkEzMiByZ2IpCit7CisgICAgbV9jb21tb24tPnN0YXRlLnBlbi5z
ZXRTdHlsZShQZW46OlNvbGlkTGluZSk7CisgICAgbV9jb21tb24tPnN0YXRlLnBlbi5zZXRDb2xv
cihyZ2IpOworICAgIG1fY29tbW9uLT5zdGF0ZS5wZW4uc2V0V2lkdGgoMCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRCcnVzaChjb25zdCBCcnVzaCYgYnJ1c2gpCit7CisgICAgbV9j
b21tb24tPnN0YXRlLmJydXNoID0gYnJ1c2g7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRCcnVzaChCcnVzaDo6QnJ1c2hTdHlsZSBzdHlsZSkKK3sKKyAgICBtX2NvbW1vbi0+c3RhdGUu
YnJ1c2guc2V0U3R5bGUoc3R5bGUpOworICAgIG1fY29tbW9uLT5zdGF0ZS5icnVzaC5zZXRDb2xv
cihDb2xvcjo6YmxhY2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QnJ1c2goUkdC
QTMyIHJnYikKK3sKKyAgICBtX2NvbW1vbi0+c3RhdGUuYnJ1c2guc2V0U3R5bGUoQnJ1c2g6OlNv
bGlkUGF0dGVybik7CisgICAgbV9jb21tb24tPnN0YXRlLmJydXNoLnNldENvbG9yKHJnYik7Cit9
CisKK2NvbnN0IEJydXNoJiBHcmFwaGljc0NvbnRleHQ6OmJydXNoKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9jb21tb24tPnN0YXRlLmJydXNoOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0VXNlc0luYWN0aXZlVGV4dEJhY2tncm91bmRDb2xvcihib29sIHUpCit7CisgICAgbV9jb21t
b24tPm1fdXNlc0luYWN0aXZlVGV4dEJhY2tncm91bmRDb2xvciA9IHU7Cit9CisKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0Ojp1c2VzSW5hY3RpdmVUZXh0QmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9jb21tb24tPm1fdXNlc0luYWN0aXZlVGV4dEJhY2tncm91bmRDb2xvcjsK
K30KKworYm9vbCBHcmFwaGljc0NvbnRleHQ6OnVwZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9jb21tb24tPm1fdXBkYXRpbmdDb250cm9sVGludHM7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVcGRhdGluZ0NvbnRyb2xUaW50cyhib29sIGIpCit7Cisg
ICAgc2V0UGFpbnRpbmdEaXNhYmxlZChiKTsKKyAgICBtX2NvbW1vbi0+bV91cGRhdGluZ0NvbnRy
b2xUaW50cyA9IGI7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQYWludGluZ0Rpc2Fi
bGVkKGJvb2wgZikKK3sKKyAgICBtX2NvbW1vbi0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZCA9IGY7
Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0OjpwYWludGluZ0Rpc2FibGVkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQ7Cit9CisKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0OjpwcmludGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29tbW9u
LT5tX2lzRm9yUHJpbnRpbmc7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VB
dFBvaW50KEltYWdlKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIHAsIEltYWdlOjpDb21wb3NpdGVP
cGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcikKIHsgICAgICAgIAotICAgIGRyYXdJbWFnZShpbWFn
ZSwgcC54KCksIHAueSgpLCAwLCAwLCAtMSwgLTEsIGNvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICBk
cmF3SW1hZ2UoaW1hZ2UsIHAsIDAsIDAsIC0xLCAtMSwgY29tcG9zaXRlT3BlcmF0b3IpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlSW5SZWN0KEltYWdlKiBpbWFnZSwgY29u
c3QgSW50UmVjdCYgciwgSW1hZ2U6OkNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
KQogewotICAgIGRyYXdJbWFnZShpbWFnZSwgci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVp
Z2h0KCksIDAsIDAsIC0xLCAtMSwgY29tcG9zaXRlT3BlcmF0b3IpOworICAgIGRyYXdJbWFnZShp
bWFnZSwgciwgMCwgMCwgLTEsIC0xLCBjb21wb3NpdGVPcGVyYXRvcik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBpbnQgeCwgaW50IHksCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UG9pbnQm
IGRlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN4LCBpbnQgc3ksIGludCBzdywg
aW50IHNoLCBJbWFnZTo6Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIHZvaWQq
IGNvbnRleHQpCiB7Ci0gICAgZHJhd0ltYWdlKGltYWdlLCB4LCB5LCBzdywgc2gsIHN4LCBzeSwg
c3csIHNoLCBjb21wb3NpdGVPcGVyYXRvciwgY29udGV4dCk7CisgICAgZHJhd0ltYWdlKGltYWdl
LCBJbnRSZWN0KGRlc3QsIEludFNpemUoc3csIHNoKSksIHN4LCBzeSwgc3csIHNoLCBjb21wb3Np
dGVPcGVyYXRvciwgY29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UoSW1hZ2UqIGltYWdlLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiBkZXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzeCwgaW50IHN5LCBpbnQgc3csIGludCBzaCwg
SW1hZ2U6OkNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCB2b2lkKiBjb250ZXh0
KQogewotICAgIGRyYXdGbG9hdEltYWdlKGltYWdlLCAoZmxvYXQpeCwgKGZsb2F0KXksIChmbG9h
dCl3LCAoZmxvYXQpaCwgKGZsb2F0KXN4LCAoZmxvYXQpc3ksIChmbG9hdClzdywgKGZsb2F0KXNo
LCBjb21wb3NpdGVPcGVyYXRvciwgY29udGV4dCk7CisgICAgZHJhd0Zsb2F0SW1hZ2UoaW1hZ2Us
IGRlc3QsIChmbG9hdClzeCwgKGZsb2F0KXN5LCAoZmxvYXQpc3csIChmbG9hdClzaCwgY29tcG9z
aXRlT3BlcmF0b3IsIGNvbnRleHQpOwogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVy
IHJlbW92aW5nIHRoaXMgZnVuY3Rpb24gYW5kIGhhdmluZyBjYWxsZXJzIGp1c3QgY2FsbCB0aGUg
bG93ZXItbGV2ZWwgZHJhd1RleHQgZGlyZWN0bHkuCkBAIC0xMjQsMjAgKzI4NywzNSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6aW5pdEZvY3VzUmluZyhpbnQgCiAgICAgICAgIHJldHVybjsKICAg
ICBjbGVhckZvY3VzUmluZygpOwogICAgIAotICAgIG1fZm9jdXNSaW5nV2lkdGggPSB3aWR0aDsK
LSAgICBtX2ZvY3VzUmluZ09mZnNldCA9IG9mZnNldDsKKyAgICBtX2NvbW1vbi0+bV9mb2N1c1Jp
bmdXaWR0aCA9IHdpZHRoOworICAgIG1fY29tbW9uLT5tX2ZvY3VzUmluZ09mZnNldCA9IG9mZnNl
dDsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyRm9jdXNSaW5nKCkKIHsKLSAgICBt
X2ZvY3VzUmluZ1JlY3RzLmNsZWFyKCk7CisgICAgbV9jb21tb24tPm1fZm9jdXNSaW5nUmVjdHMu
Y2xlYXIoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZEZvY3VzUmluZ1JlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgbV9mb2N1c1JpbmdSZWN0cy5hcHBlbmQocmVjdCk7CisgICAgbV9jb21t
b24tPm1fZm9jdXNSaW5nUmVjdHMuYXBwZW5kKHJlY3QpOworfQorCitpbnQgR3JhcGhpY3NDb250
ZXh0Ojpmb2N1c1JpbmdXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29tbW9uLT5tX2Zv
Y3VzUmluZ1dpZHRoOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0Ojpmb2N1c1JpbmdPZmZzZXQo
KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbW1vbi0+bV9mb2N1c1JpbmdPZmZzZXQ7Cit9CisK
K2NvbnN0IFZlY3RvcjxJbnRSZWN0PiYgR3JhcGhpY3NDb250ZXh0Ojpmb2N1c1JpbmdSZWN0cygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29tbW9uLT5tX2ZvY3VzUmluZ1JlY3RzOwogfQogCiB9
CkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL3JlbmRlcl9mcmFtZXMuY3BwCShyZXZpc2lvbiAxMzM3MSkKKysrIHJlbmRlcmluZy9yZW5k
ZXJfZnJhbWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE1LDE3ICs1MTUsMTcgQEAgYm9vbCBS
ZW5kZXJGcmFtZVNldDo6dXNlclJlc2l6ZSggTW91c2VFdgogICAgICAgICAgICAgICAgIHBhaW50
LnNldFBlbihQZW46Ok5vUGVuKTsKICAgICAgICAgICAgICAgICBwYWludC5zZXRCcnVzaChDb2xv
cjo6Z3JheSk7CiAgICAgICAgICAgICAgICAgdi0+c2V0RHJhd2luZ0FscGhhKDAuMjUpOwotICAg
ICAgICAgICAgICAgIHBhaW50LmRyYXdSZWN0KHAgKyBzdy8yIC0gckJvcmQsIHIueSgpLCAyKnJC
b3JkLCByLmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBwYWludC5kcmF3UmVjdChJbnRSZWN0
KHAgKyBzdy8yIC0gckJvcmQsIHIueSgpLCAyICogckJvcmQsIHIuaGVpZ2h0KCkpKTsKICAgICAg
ICAgICAgICAgICB2LT5zZXREcmF3aW5nQWxwaGEoMS4wKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChtX29sZHBvcyA+PSAwKQotICAgICAgICAgICAg
ICAgIHYtPnVwZGF0ZUNvbnRlbnRzKEludFJlY3Qoci54KCksIG1fb2xkcG9zICsgc3cvMiAtIHJC
b3JkLCByLndpZHRoKCksIDIqckJvcmQpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB2LT51cGRh
dGVDb250ZW50cyhJbnRSZWN0KHIueCgpLCBtX29sZHBvcyArIHN3LzIgLSByQm9yZCwgci53aWR0
aCgpLCAyICogckJvcmQpLCB0cnVlKTsKICAgICAgICAgICAgIGlmIChwID49IDApIHsKICAgICAg
ICAgICAgICAgICBwYWludC5zZXRQZW4oUGVuOjpOb1Blbik7CiAgICAgICAgICAgICAgICAgcGFp
bnQuc2V0QnJ1c2goQ29sb3I6OmdyYXkpOwogICAgICAgICAgICAgICAgIHYtPnNldERyYXdpbmdB
bHBoYSgwLjI1KTsKLSAgICAgICAgICAgICAgICBwYWludC5kcmF3UmVjdChyLngoKSwgcCArIHN3
LzIgLSByQm9yZCwgci53aWR0aCgpLCAyICogckJvcmQpOworICAgICAgICAgICAgICAgIHBhaW50
LmRyYXdSZWN0KEludFJlY3Qoci54KCksIHAgKyBzdy8yIC0gckJvcmQsIHIud2lkdGgoKSwgMiAq
IHJCb3JkKSk7CiAgICAgICAgICAgICAgICAgdi0+c2V0RHJhd2luZ0FscGhhKDEuMCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfYm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvcmVuZGVyX2JveC5jcHAJKHJldmlzaW9uIDEzMzcxKQorKysg
cmVuZGVyaW5nL3JlbmRlcl9ib3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzQsOCArNDM0LDgg
QEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50QmFja2dyb3VuZEV4dGVuZGVkKAogICAgIGlmICghYmdM
YXllci0+bmV4dCgpICYmIGJnQ29sb3IuaXNWYWxpZCgpICYmIGJnQ29sb3IuYWxwaGEoKSA+IDAp
IHsKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBhbHBoYSBhbmQgd2UgYXJlIHBhaW50aW5nIHRo
ZSByb290IGVsZW1lbnQsIGdvIGFoZWFkIGFuZCBibGVuZCB3aXRoIHdoaXRlLgogICAgICAgICBp
ZiAoYmdDb2xvci5hbHBoYSgpIDwgMHhGRiAmJiBpc1Jvb3QoKSAmJiAhY2FudmFzKCktPnZpZXco
KS0+aXNUcmFuc3BhcmVudCgpKQotICAgICAgICAgICAgcC0+ZmlsbFJlY3QoX3R4LCBjbGlweSwg
dywgY2xpcGgsIENvbG9yKENvbG9yOjp3aGl0ZSkpOwotICAgICAgICBwLT5maWxsUmVjdChfdHgs
IGNsaXB5LCB3LCBjbGlwaCwgYmdDb2xvcik7CisgICAgICAgICAgICBwLT5maWxsUmVjdChJbnRS
ZWN0KF90eCwgY2xpcHksIHcsIGNsaXBoKSwgQ29sb3IoQ29sb3I6OndoaXRlKSk7CisgICAgICAg
IHAtPmZpbGxSZWN0KEludFJlY3QoX3R4LCBjbGlweSwgdywgY2xpcGgpLCBiZ0NvbG9yKTsKICAg
ICB9CiAgICAgCiAgICAgLy8gbm8gcHJvZ3Jlc3NpdmUgbG9hZGluZyBvZiB0aGUgYmFja2dyb3Vu
ZCBpbWFnZQpAQCAtNTY4LDcgKzU2OCw3IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEJhY2tncm91
bmRFeHRlbmRlZCgKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjdz4wICYmIGNoPjApCi0gICAg
ICAgICAgICBwLT5kcmF3VGlsZWRJbWFnZShiZy0+aW1hZ2UoKSwgY3gsIGN5LCBjdywgY2gsIHN4
LCBzeSk7CisgICAgICAgICAgICBwLT5kcmF3VGlsZWRJbWFnZShiZy0+aW1hZ2UoKSwgSW50UmVj
dChjeCwgY3ksIGN3LCBjaCksIHN4LCBzeSk7CiAgICAgfQogICAgIAogICAgIGlmIChiZ0xheWVy
LT5iYWNrZ3JvdW5kQ2xpcCgpICE9IEJHQk9SREVSKQpAQCAtNTgyLDcgKzU4Miw3IEBAIHZvaWQg
UmVuZGVyQm94OjpvdXRsaW5lQm94KEdyYXBoaWNzQ29udGUKIHsKICAgICBwLT5zZXRQZW4oUGVu
KENvbG9yKGNvbG9yKSwgMSwgUGVuOjpEb3RMaW5lKSk7CiAgICAgcC0+c2V0QnJ1c2goV2ViQ29y
ZTo6QnJ1c2g6Ok5vQnJ1c2gpOwotICAgIHAtPmRyYXdSZWN0KF90eCwgX3R5LCBtX3dpZHRoLCBt
X2hlaWdodCk7CisgICAgcC0+ZHJhd1JlY3QoSW50UmVjdChfdHgsIF90eSwgbV93aWR0aCwgbV9o
ZWlnaHQpKTsKIH0KIAogSW50UmVjdCBSZW5kZXJCb3g6OmdldE92ZXJmbG93Q2xpcFJlY3QoaW50
IHR4LCBpbnQgdHkpCkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHJlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAJKHJldmlzaW9uIDEzMzcxKQorKysgcmVuZGVy
aW5nL3JlbmRlcl9saXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDE1ICs0MzAsMTUgQEAg
dm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgIHN3aXRjaChzdHls
ZSgpLT5saXN0U3R5bGVUeXBlKCkpIHsKICAgICBjYXNlIERJU0M6CiAgICAgICAgIHAtPnNldEJy
dXNoKGNvbG9yKTsKLSAgICAgICAgcC0+ZHJhd0VsbGlwc2UobWFya2VyLngoKSwgbWFya2VyLnko
KSwgbWFya2VyLndpZHRoKCksIG1hcmtlci5oZWlnaHQoKSk7CisgICAgICAgIHAtPmRyYXdFbGxp
cHNlKG1hcmtlcik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENJUkNMRToKICAgICAgICAg
cC0+c2V0QnJ1c2goV2ViQ29yZTo6QnJ1c2g6Ok5vQnJ1c2gpOwotICAgICAgICBwLT5kcmF3RWxs
aXBzZShtYXJrZXIueCgpLCBtYXJrZXIueSgpLCBtYXJrZXIud2lkdGgoKSwgbWFya2VyLmhlaWdo
dCgpKTsKKyAgICAgICAgcC0+ZHJhd0VsbGlwc2UobWFya2VyKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgU1FVQVJFOgogICAgICAgICBwLT5zZXRCcnVzaChjb2xvcik7Ci0gICAgICAgIHAt
PmRyYXdSZWN0KG1hcmtlci54KCksIG1hcmtlci55KCksIG1hcmtlci53aWR0aCgpLCBtYXJrZXIu
aGVpZ2h0KCkpOworICAgICAgICBwLT5kcmF3UmVjdChtYXJrZXIpOwogICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBMTk9ORToKICAgICAgICAgcmV0dXJuOwpJbmRleDogcmVuZGVyaW5nL3JlbmRl
cl9pbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5jcHAJKHJl
dmlzaW9uIDEzMzcxKQorKysgcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludChQYWludEluZm8m
IGksIGluCiAgICAgICAgICAgICBpZiAoIWVycm9yT2NjdXJyZWQoKSkgewogICAgICAgICAgICAg
ICAgIHAtPnNldFBlbiAoQ29sb3I6OmxpZ2h0R3JheSk7CiAgICAgICAgICAgICAgICAgcC0+c2V0
QnJ1c2ggKFdlYkNvcmU6OkJydXNoOjpOb0JydXNoKTsKLSAgICAgICAgICAgICAgICBwLT5kcmF3
UmVjdCAoX3R4ICsgbGVmdEJvcmRlciArIGxlZnRQYWQsIF90eSArIHRvcEJvcmRlciArIHRvcFBh
ZCwgY1dpZHRoLCBjSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBwLT5kcmF3UmVjdChJbnRSZWN0
KF90eCArIGxlZnRCb3JkZXIgKyBsZWZ0UGFkLCBfdHkgKyB0b3BCb3JkZXIgKyB0b3BQYWQsIGNX
aWR0aCwgY0hlaWdodCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBib29sIGVycm9yUGljdHVyZURyYXduID0gZmFsc2U7CkluZGV4OiByZW5kZXJpbmcvcmVuZGVy
X29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCShy
ZXZpc2lvbiAxMzM3MSkKKysrIHJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzkyLDE3ICs3OTIsMTUgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRyYXdCb3JkZXIo
R3JhcGhpY3NDbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9yZGVyU2lkZSBzLCBD
b2xvciBjLCBjb25zdCBDb2xvciYgdGV4dGNvbG9yLCBFQm9yZGVyU3R5bGUgc3R5bGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWRqYncxLCBpbnQgYWRqYncyLCBib29sIGlu
dmFsaWRpc0ludmVydCkKIHsKLSAgICBpbnQgd2lkdGggPSAocz09QlNUb3B8fHM9PUJTQm90dG9t
P3kyLXkxOngyLXgxKTsKKyAgICBpbnQgd2lkdGggPSAoKHMgPT0gQlNUb3AgfHwgcyA9PSBCU0Jv
dHRvbSkgPyB5MiAtIHkxIDogeDIgLSB4MSApOwogCiAgICAgaWYoc3R5bGUgPT0gRE9VQkxFICYm
IHdpZHRoIDwgMykKICAgICAgICAgc3R5bGUgPSBTT0xJRDsKIAogICAgIGlmKCFjLmlzVmFsaWQo
KSkgewogICAgICAgICBpZihpbnZhbGlkaXNJbnZlcnQpCi0gICAgICAgIHsKICAgICAgICAgICAg
IC8vIEZJWE1FOiBUaGUgb3JpZ2luYWwgS0hUTUwgZGlkIFhPUiBoZXJlIC0tIHdoYXQgZG8gd2Ug
d2FudCB0byBkbyBpbnN0ZWFkPwogICAgICAgICAgICAgYyA9IENvbG9yOjp3aGl0ZTsKLSAgICAg
ICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmIChzdHlsZSA9PSBJTlNFVCB8fCBz
dHlsZSA9PSBPVVRTRVQgfHwgc3R5bGUgPT0gUklER0UgfHwgc3R5bGUgPT0gR1JPT1ZFKQogICAg
ICAgICAgICAgICAgIGMuc2V0UmdiKDIzOCwgMjM4LCAyMzgpOwpAQCAtODI4LDExICs4MjYsMTEg
QEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRyYXdCb3JkZXIoR3JhcGhpY3NDbwogICAgICAgICAgICAg
ewogICAgICAgICAgICAgY2FzZSBCU0JvdHRvbToKICAgICAgICAgICAgIGNhc2UgQlNUb3A6Ci0g
ICAgICAgICAgICAgICAgcC0+ZHJhd0xpbmUoeDEsICh5MSt5MikvMiwgeDIsICh5MSt5MikvMik7
CisgICAgICAgICAgICAgICAgcC0+ZHJhd0xpbmUoSW50UG9pbnQoeDEsICh5MSt5MikvMiksIElu
dFBvaW50KHgyLCAoeTEreTIpLzIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgQlNSaWdodDoKICAgICAgICAgICAgIGNhc2UgQlNMZWZ0OgotICAgICAgICAgICAg
ICAgIHAtPmRyYXdMaW5lKCh4MSt4MikvMiwgeTEsICh4MSt4MikvMiwgeTIpOworICAgICAgICAg
ICAgICAgIHAtPmRyYXdMaW5lKEludFBvaW50KCh4MSt4MikvMiwgeTEpLCBJbnRQb2ludCgoeDEr
eDIpLzIsIHkyKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCkBAIC04NTAsMTYgKzg0OCwxNiBAQCB2b2lkIFJlbmRlck9iamVjdDo6ZHJh
d0JvcmRlcihHcmFwaGljc0NvCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICBjYXNlIEJTVG9w
OgogICAgICAgICAgICAgY2FzZSBCU0JvdHRvbToKLSAgICAgICAgICAgICAgICBwLT5kcmF3UmVj
dCh4MSwgeTEgICAgICAsIHgyLXgxLCB0aGlyZCk7Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd1Jl
Y3QoeDEsIHkyLXRoaXJkLCB4Mi14MSwgdGhpcmQpOworICAgICAgICAgICAgICAgIHAtPmRyYXdS
ZWN0KEludFJlY3QoeDEsIHkxICAgICAgLCB4Mi14MSwgdGhpcmQpKTsKKyAgICAgICAgICAgICAg
ICBwLT5kcmF3UmVjdChJbnRSZWN0KHgxLCB5Mi10aGlyZCwgeDIteDEsIHRoaXJkKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEJTTGVmdDoKLSAgICAgICAgICAg
ICAgICBwLT5kcmF3UmVjdCh4MSAgICAgICwgeTErMSwgdGhpcmQsIHkyLXkxLTEpOwotICAgICAg
ICAgICAgICAgIHAtPmRyYXdSZWN0KHgyLXRoaXJkLCB5MSsxLCB0aGlyZCwgeTIteTEtMSk7Cisg
ICAgICAgICAgICAgICAgcC0+ZHJhd1JlY3QoSW50UmVjdCh4MSAgICAgICwgeTErMSwgdGhpcmQs
IHkyLXkxLTEpKTsKKyAgICAgICAgICAgICAgICBwLT5kcmF3UmVjdChJbnRSZWN0KHgyLXRoaXJk
LCB5MSsxLCB0aGlyZCwgeTIteTEtMSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBCU1JpZ2h0OgotICAgICAgICAgICAgICAgIHAtPmRyYXdSZWN0KHgxICAgICAg
LCB5MSsxLCB0aGlyZCwgeTIteTEtMSk7Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd1JlY3QoeDIt
dGhpcmQsIHkxKzEsIHRoaXJkLCB5Mi15MS0xKTsKKyAgICAgICAgICAgICAgICBwLT5kcmF3UmVj
dChJbnRSZWN0KHgxICAgICAgLCB5MSsxLCB0aGlyZCwgeTIteTEtMSkpOworICAgICAgICAgICAg
ICAgIHAtPmRyYXdSZWN0KEludFJlY3QoeDItdGhpcmQsIHkxKzEsIHRoaXJkLCB5Mi15MS0xKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTkw
NCwxMyArOTAyLDEwIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3Qm9yZGVyKEdyYXBoaWNzQ28K
ICAgICB7CiAgICAgICAgIEVCb3JkZXJTdHlsZSBzMTsKICAgICAgICAgRUJvcmRlclN0eWxlIHMy
OwotICAgICAgICBpZiAoc3R5bGU9PUdST09WRSkKLSAgICAgICAgeworICAgICAgICBpZiAoc3R5
bGU9PUdST09WRSkgewogICAgICAgICAgICAgczEgPSBJTlNFVDsKICAgICAgICAgICAgIHMyID0g
T1VUU0VUOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgeworICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgczEgPSBPVVRTRVQ7CiAgICAgICAgICAgICBzMiA9IElOU0VUOwog
ICAgICAgICB9CkBAIC05NjMsNyArOTU4LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRyYXdCb3Jk
ZXIoR3JhcGhpY3NDbwogICAgICAgICBBU1NFUlQoeTIgPj0geTEpOwogICAgICAgICBpZiAoYWRq
YncxPT0wICYmIGFkamJ3MiA9PSAwKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIHAtPmRyYXdS
ZWN0KHgxLHkxLHgyLXgxLHkyLXkxKTsKKyAgICAgICAgICAgIHAtPmRyYXdSZWN0KEludFJlY3Qo
eDEsIHkxLCB4Mi14MSwgeTIteTEpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICB9
CiAgICAgICAgIHN3aXRjaChzKSB7CkBAIC0xMDQyLDE5ICsxMDM3LDE4IEBAIGJvb2wgUmVuZGVy
T2JqZWN0OjpwYWludEJvcmRlckltYWdlKEdyYXAKICAgICAgICAgLy8gVGhlIHRvcCBsZWZ0IGNv
cm5lciByZWN0IGlzIChfdHgsIF90eSwgbGVmdFdpZHRoLCB0b3BXaWR0aCkKICAgICAgICAgLy8g
VGhlIHJlY3QgdG8gdXNlIGZyb20gd2l0aGluIHRoZSBpbWFnZSBpcyBvYnRhaW5lZCBmcm9tIG91
ciBzbGljZSwgYW5kIGlzICgwLCAwLCBsZWZ0U2xpY2UsIHRvcFNsaWNlKQogICAgICAgICBpZiAo
ZHJhd1RvcCkKLSAgICAgICAgICAgIHAtPmRyYXdJbWFnZShib3JkZXJJbWFnZS0+aW1hZ2UoKSwg
X3R4LCBfdHksIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgc3R5bGUtPmJvcmRlclRvcFdpZHRo
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgbGVmdFNsaWNlLCB0b3BTbGljZSk7
CisgICAgICAgICAgICBwLT5kcmF3SW1hZ2UoYm9yZGVySW1hZ2UtPmltYWdlKCksIEludFJlY3Qo
X3R4LCBfdHksIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgc3R5bGUtPmJvcmRlclRvcFdpZHRo
KCkpLCAwLCAwLCBsZWZ0U2xpY2UsIHRvcFNsaWNlKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRo
ZSBib3R0b20gbGVmdCBjb3JuZXIgcmVjdCBpcyAoX3R4LCBfdHkgKyBoIC0gYm90dG9tV2lkdGgs
IGxlZnRXaWR0aCwgYm90dG9tV2lkdGgpCiAgICAgICAgIC8vIFRoZSByZWN0IHRvIHVzZSBmcm9t
IHdpdGhpbiB0aGUgaW1hZ2UgaXMgKDAsIGltYWdlSGVpZ2h0IC0gYm90dG9tU2xpY2UsIGxlZnRT
bGljZSwgYm90b21TbGljZSkKICAgICAgICAgaWYgKGRyYXdCb3R0b20pCi0gICAgICAgICAgICBw
LT5kcmF3SW1hZ2UoYm9yZGVySW1hZ2UtPmltYWdlKCksIF90eCwgX3R5ICsgaCAtIHN0eWxlLT5i
b3JkZXJCb3R0b21XaWR0aCgpLCBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIHN0eWxlLT5ib3Jk
ZXJCb3R0b21XaWR0aCgpLAorICAgICAgICAgICAgcC0+ZHJhd0ltYWdlKGJvcmRlckltYWdlLT5p
bWFnZSgpLCBJbnRSZWN0KF90eCwgX3R5ICsgaCAtIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgp
LCBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCBs
ZWZ0U2xpY2UsIGJvdHRvbVNsaWNlKTsKICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
Ly8gUGFpbnQgdGhlIGxlZnQgZWRnZS4KICAgICAgICAgLy8gSGF2ZSB0byBzY2FsZSBhbmQgdGls
ZSBpbnRvIHRoZSBib3JkZXIgcmVjdC4KLSAgICAgICAgcC0+ZHJhd1NjYWxlZEFuZFRpbGVkSW1h
Z2UoYm9yZGVySW1hZ2UtPmltYWdlKCksIF90eCwgX3R5ICsgc3R5bGUtPmJvcmRlclRvcFdpZHRo
KCksIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGggLSBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSAtIHN0eWxlLT5ib3JkZXJCb3R0
b21XaWR0aCgpLAorICAgICAgICBwLT5kcmF3U2NhbGVkQW5kVGlsZWRJbWFnZShib3JkZXJJbWFn
ZS0+aW1hZ2UoKSwgSW50UmVjdChfdHgsIF90eSArIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBz
dHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoIC0gc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkgLSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lk
dGgoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCB0b3BTbGljZSwg
bGVmdFNsaWNlLCBpbWFnZUhlaWdodCAtIHRvcFNsaWNlIC0gYm90dG9tU2xpY2UsIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U6OlN0cmV0Y2hUaWxlLCAoSW1hZ2U6
OlRpbGVSdWxlKXZSdWxlKTsKICAgICB9CkBAIC0xMDY0LDQxICsxMDU4LDQxIEBAIGJvb2wgUmVu
ZGVyT2JqZWN0OjpwYWludEJvcmRlckltYWdlKEdyYXAKICAgICAgICAgLy8gVGhlIHRvcCByaWdo
dCBjb3JuZXIgcmVjdCBpcyAoX3R4ICsgdyAtIHJpZ2h0V2lkdGgsIF90eSwgcmlnaHRXaWR0aCwg
dG9wV2lkdGgpCiAgICAgICAgIC8vIFRoZSByZWN0IHRvIHVzZSBmcm9tIHdpdGhpbiB0aGUgaW1h
Z2UgaXMgb2J0YWluZWQgZnJvbSBvdXIgc2xpY2UsIGFuZCBpcyAoaW1hZ2VXaWR0aCAtIHJpZ2h0
U2xpY2UsIDAsIHJpZ2h0U2xpY2UsIHRvcFNsaWNlKQogICAgICAgICBpZiAoZHJhd1RvcCkKLSAg
ICAgICAgICAgIHAtPmRyYXdJbWFnZShib3JkZXJJbWFnZS0+aW1hZ2UoKSwgX3R4ICsgdyAtIHN0
eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIF90eSwgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwg
c3R5bGUtPmJvcmRlclRvcFdpZHRoKCksCisgICAgICAgICAgICBwLT5kcmF3SW1hZ2UoYm9yZGVy
SW1hZ2UtPmltYWdlKCksIEludFJlY3QoX3R4ICsgdyAtIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRo
KCksIF90eSwgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwgc3R5bGUtPmJvcmRlclRvcFdpZHRo
KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlV2lkdGggLSByaWdodFNsaWNlLCAw
LCByaWdodFNsaWNlLCB0b3BTbGljZSk7CiAgICAgICAgIAogICAgICAgICAvLyBUaGUgYm90dG9t
IHJpZ2h0IGNvcm5lciByZWN0IGlzIChfdHggKyB3IC0gcmlnaHRXaWR0aCwgX3R5ICsgaCAtIGJv
dHRvbVdpZHRoLCByaWdodFdpZHRoLCBib3R0b21XaWR0aCkKICAgICAgICAgLy8gVGhlIHJlY3Qg
dG8gdXNlIGZyb20gd2l0aGluIHRoZSBpbWFnZSBpcyAoaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2Us
IGltYWdlSGVpZ2h0IC0gYm90dG9tU2xpY2UsIHJpZ2h0U2xpY2UsIGJvdG9tU2xpY2UpCiAgICAg
ICAgIGlmIChkcmF3Qm90dG9tKQotICAgICAgICAgICAgcC0+ZHJhd0ltYWdlKGJvcmRlckltYWdl
LT5pbWFnZSgpLCBfdHggKyB3IC0gc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwgX3R5ICsgaCAt
IHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpLCBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCBz
dHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwKKyAgICAgICAgICAgIHAtPmRyYXdJbWFnZShib3Jk
ZXJJbWFnZS0+aW1hZ2UoKSwgSW50UmVjdChfdHggKyB3IC0gc3R5bGUtPmJvcmRlclJpZ2h0V2lk
dGgoKSwgX3R5ICsgaCAtIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpLCBzdHlsZS0+Ym9yZGVy
UmlnaHRXaWR0aCgpLCBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2UsIGltYWdlSGVpZ2h0IC0gYm90dG9t
U2xpY2UsIHJpZ2h0U2xpY2UsIGJvdHRvbVNsaWNlKTsKICAgICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgLy8gUGFpbnQgdGhlIHJpZ2h0IGVkZ2UuCi0gICAgICAgIHAtPmRyYXdTY2FsZWRB
bmRUaWxlZEltYWdlKGJvcmRlckltYWdlLT5pbWFnZSgpLCBfdHggKyB3IC0gc3R5bGUtPmJvcmRl
clJpZ2h0V2lkdGgoKSwgX3R5ICsgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCksIHN0eWxlLT5ib3Jk
ZXJSaWdodFdpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGggLSBzdHlsZS0+Ym9y
ZGVyVG9wV2lkdGgoKSAtIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpLAorICAgICAgICBwLT5k
cmF3U2NhbGVkQW5kVGlsZWRJbWFnZShib3JkZXJJbWFnZS0+aW1hZ2UoKSwgSW50UmVjdChfdHgg
KyB3IC0gc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwgX3R5ICsgc3R5bGUtPmJvcmRlclRvcFdp
ZHRoKCksIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGggLSBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSAtIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0
aCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2Us
IHRvcFNsaWNlLCByaWdodFNsaWNlLCBpbWFnZUhlaWdodCAtIHRvcFNsaWNlIC0gYm90dG9tU2xp
Y2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlOjpTdHJldGNoVGlsZSwgKEltYWdl
OjpUaWxlUnVsZSl2UnVsZSk7CiAgICAgfQogCiAgICAgLy8gUGFpbnQgdGhlIHRvcCBlZGdlLgog
ICAgIGlmIChkcmF3VG9wKQotICAgICAgICBwLT5kcmF3U2NhbGVkQW5kVGlsZWRJbWFnZShib3Jk
ZXJJbWFnZS0+aW1hZ2UoKSwgX3R4ICsgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCBfdHksIHcg
LSBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkgLSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwKKyAgICAg
ICAgcC0+ZHJhd1NjYWxlZEFuZFRpbGVkSW1hZ2UoYm9yZGVySW1hZ2UtPmltYWdlKCksIEludFJl
Y3QoX3R4ICsgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCBfdHksIHcgLSBzdHlsZS0+Ym9yZGVy
TGVmdFdpZHRoKCkgLSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxlZnRTbGljZSwgMCwgaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2UgLSBsZWZ0U2xpY2Us
IHRvcFNsaWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAoSW1hZ2U6OlRpbGVSdWxlKWhS
dWxlLCBJbWFnZTo6U3RyZXRjaFRpbGUpOwogICAgIAogICAgIC8vIFBhaW50IHRoZSBib3R0b20g
ZWRnZS4KICAgICBpZiAoZHJhd0JvdHRvbSkKLSAgICAgICAgcC0+ZHJhd1NjYWxlZEFuZFRpbGVk
SW1hZ2UoYm9yZGVySW1hZ2UtPmltYWdlKCksIF90eCArIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgo
KSwgX3R5ICsgaCAtIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpLCAKKyAgICAgICAgcC0+ZHJh
d1NjYWxlZEFuZFRpbGVkSW1hZ2UoYm9yZGVySW1hZ2UtPmltYWdlKCksIEludFJlY3QoX3R4ICsg
c3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCBfdHkgKyBoIC0gc3R5bGUtPmJvcmRlckJvdHRvbVdp
ZHRoKCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICB3IC0gc3R5bGUtPmJvcmRlckxlZnRX
aWR0aCgpIC0gc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGVmdFNsaWNlLCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCBpbWFnZVdpZHRoIC0gcmln
aHRTbGljZSAtIGxlZnRTbGljZSwgYm90dG9tU2xpY2UsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChJbWFnZTo6VGlsZVJ1bGUpaFJ1bGUsIEltYWdlOjpTdHJldGNoVGlsZSk7CiAgICAgCiAg
ICAgLy8gUGFpbnQgdGhlIG1pZGRsZS4KICAgICBpZiAoZHJhd01pZGRsZSkKLSAgICAgICAgcC0+
ZHJhd1NjYWxlZEFuZFRpbGVkSW1hZ2UoYm9yZGVySW1hZ2UtPmltYWdlKCksIF90eCArIHN0eWxl
LT5ib3JkZXJMZWZ0V2lkdGgoKSwgX3R5ICsgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCksIHcgLSBz
dHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkgLSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBoIC0gc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkgLSBzdHls
ZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwKKyAgICAgICAgcC0+ZHJhd1NjYWxlZEFuZFRpbGVkSW1h
Z2UoYm9yZGVySW1hZ2UtPmltYWdlKCksIEludFJlY3QoX3R4ICsgc3R5bGUtPmJvcmRlckxlZnRX
aWR0aCgpLCBfdHkgKyBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwgdyAtIHN0eWxlLT5ib3JkZXJM
ZWZ0V2lkdGgoKSAtIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIGggLSBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSAtIHN0eWxlLT5ib3JkZXJCb3R0
b21XaWR0aCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNsaWNlLCB0b3BTbGlj
ZSwgaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2UgLSBsZWZ0U2xpY2UsIGltYWdlSGVpZ2h0IC0gdG9w
U2xpY2UgLSBib3R0b21TbGljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKEltYWdlOjpU
aWxlUnVsZSloUnVsZSwgKEltYWdlOjpUaWxlUnVsZSl2UnVsZSk7CiAKSW5kZXg6IGtjYW52YXMv
UmVuZGVyU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyU1ZHSW1hZ2Uu
Y3BwCShyZXZpc2lvbiAxMzM3MSkKKysrIGtjYW52YXMvUmVuZGVyU1ZHSW1hZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzAsOCArMTcwLDcgQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6cGFpbnQo
UGFpbnRJbmZvJiBwYQogICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QobV94LCBtX3ksIGNvbnRl
bnRXaWR0aCgpLCBjb250ZW50SGVpZ2h0KCkpOwogICAgICAgICBGbG9hdFJlY3Qgc3JjUmVjdCgw
LCAwLCBpbWFnZSgpLT53aWR0aCgpLCBpbWFnZSgpLT5oZWlnaHQoKSk7CiAgICAgICAgIGFkanVz
dFJlY3RzRm9yQXNwZWN0UmF0aW8oZGVzdFJlY3QsIHNyY1JlY3QsIGltYWdlRWx0LT5wcmVzZXJ2
ZUFzcGVjdFJhdGlvKCktPmJhc2VWYWwoKSk7Ci0gICAgICAgIHBhaW50SW5mby5wLT5kcmF3Rmxv
YXRJbWFnZShpbWFnZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFJlY3QueCgpLCBkZXN0UmVjdC55KCksIGRlc3RSZWN0LndpZHRoKCksIGRlc3RSZWN0LmhlaWdo
dCgpLCAKKyAgICAgICAgcGFpbnRJbmZvLnAtPmRyYXdGbG9hdEltYWdlKGltYWdlKCksIGRlc3RS
ZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUmVjdC54KCksIHNy
Y1JlY3QueSgpLCBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U6OkNvbXBvc2l0ZVNvdXJjZU92ZXIpOwog
ICAgIH0KSW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9u
IDEzMzcxKQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE1IEBACis8
PDw8PDw8IC5taW5lCis8PDw8PDw8IC5taW5lCisyMDA2LTAzLTE3ICBFcmljIFNlaWRlbCAgPGVz
ZWlkZWxAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE1vdmUgRm9ybSBjb2RlIGZyb20gTWFjRnJhbWUgdG8gRnJhbWUuCisgICAgICAg
IE1vdmUgR3JhcGhpY3NDb250ZXh0IGNvZGUgZnJvbSBHcmFwaGljc0NvbnRleHRNYWMgdG8gR3Jh
cGhpY3NDb250ZXh0LgorICAgICAgICBVc2UgSW50UmVjdCwgRmxvYXRSZWN0IGluIG1vcmUgcGxh
Y2VzIHRocm91Z2hvdXQgdGhlIGNvZGUuCisKKyAgICAgICAgKiBicmlkZ2UvbWFjL01hY0ZyYW1l
Lmg6CisgICAgICAgICogYnJpZGdlL21hYy9NYWNGcmFtZS5tbToKKyAgICAgICAgKFdlYkNvcmU6
Ok1hY0ZyYW1lOjpNYWNGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpNYWNGcmFtZTo6c2VhcmNo
Rm9yTGFiZWxzQWJvdmVDZWxsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hY0ZyYW1lOjpzZWFyY2hG
b3JMYWJlbHNCZWZvcmVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmRpY3Rpb25hcnlGcm9t
SGFzaE1hcCk6CisgICAgICAgIChXZWJDb3JlOjpNYWNGcmFtZTo6c3VibWl0Rm9ybSk6CisgICAg
ICAgIChXZWJDb3JlOjpNYWNGcmFtZTo6c2V0Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpNYWNG
cmFtZTo6Y3VycmVudEV2ZW50SXNNb3VzZURvd25JbldpZGdldCk6CisgICAgICAgIChXZWJDb3Jl
OjpNYWNGcmFtZTo6Y3VycmVudEV2ZW50SXNLZXlib2FyZE9wdGlvblRhYik6CisgICAgICAgIChX
ZWJDb3JlOjpNYWNGcmFtZTo6aGFuZGxlS2V5Ym9hcmRPcHRpb25UYWJJblZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6TWFjRnJhbWU6OnRhYnNUb0FsbENvbnRyb2xzKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1hY0ZyYW1lOjpzaG91bGREcmFnQXV0b05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TWFj
RnJhbWU6OnNlbGVjdGlvbkltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hY0ZyYW1lOjpzbmFw
c2hvdERyYWdJbWFnZSk6CisgICAgICAgICogYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2Uu
bW06CisgICAgICAgICgtW1dlYkNvcmVGcmFtZUJyaWRnZSBuZXh0S2V5Vmlld10pOgorICAgICAg
ICAoLVtXZWJDb3JlRnJhbWVCcmlkZ2UgcHJldmlvdXNLZXlWaWV3XSk6CisgICAgICAgICgtW1dl
YkNvcmVGcmFtZUJyaWRnZSBuZXh0S2V5Vmlld0luc2lkZVdlYkZyYW1lVmlld3NdKToKKyAgICAg
ICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdlIHByZXZpb3VzS2V5Vmlld0luc2lkZVdlYkZyYW1lVmll
d3NdKToKKyAgICAgICAgKiBrY2FudmFzL1JlbmRlclNWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR0ltYWdlOjpwYWludCk6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6OmNsZWFyUmVjb3JkZWRGb3JtVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpy
ZWNvcmRGb3JtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRpZE5vdE9wZW5VUkwp
OgorICAgICAgICAoV2ViQ29yZTo6c2NhbkZvckZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpwcmVwYXJlRm9yVXNlckFjdGlv
bik6CisgICAgICAgICogcGFnZS9GcmFtZS5oOgorICAgICAgICAqIHBsYXRmb3JtL0dyYXBoaWNz
Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UHJp
dmF0ZTo6R3JhcGhpY3NDb250ZXh0UHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UHJpdmF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zm9u
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZvbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwZW4pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzZXRQZW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzZXRCcnVzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmJydXNoKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VXNlc0luYWN0aXZlVGV4dEJh
Y2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnVzZXNJ
bmFjdGl2ZVRleHRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Ojp1cGRhdGluZ0NvbnRyb2xUaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldFVwZGF0aW5nQ29udHJvbFRpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0UGFpbnRpbmdEaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnBhaW50aW5nRGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpwcmludGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdJbWFnZUF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2VJblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojppbml0Rm9jdXNS
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJGb2N1c1Jpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphZGRGb2N1c1JpbmdSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zm9jdXNSaW5nV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpmb2N1c1JpbmdPZmZzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpmb2N1c1JpbmdSZWN0cyk6CisgICAgICAgICog
cGxhdGZvcm0vR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0dyYXBo
aWNzQ29udGV4dE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxSZWN0U291cmNlT3Zlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q29sb3JGcm9tQnJ1c2gpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb2xvckZyb21QZW4pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0FyYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQ
b2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0Zsb2F0SW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdTY2FsZWRBbmRUaWxlZElt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2VsZWN0ZWRUZXh0QmFj
a2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphZGRDbGlwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkUm91bmRlZFJlY3RDbGlwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcv
cmVuZGVyX2JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBhaW50QmFja2dy
b3VuZEV4dGVuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b3V0bGluZUJveCk6
CisgICAgICAgICogcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRnJhbWVTZXQ6OnVzZXJSZXNpemUpOgorICAgICAgICAqIHJlbmRlcmluZy9yZW5k
ZXJfaW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGlzdE1hcmtlcjo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9yZW5kZXJfb2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6ZHJhd0JvcmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnBhaW50Qm9yZGVySW1hZ2UpOgorCis9PT09PT09
Cis9PT09PT09CiAyMDA2LTAzLTE3ICBBbGljZSBMaXUgIDxhbGljZS5saXVAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEh5YXR0LgpAQCAtMzIwLDYgKzQzMiw3IEBACiAgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzVHJhbnNwYXJlbnQpOgogICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0OjpvcGFjaXR5KToKIAorPj4+Pj4+PiAucjEzMzcxCiAyMDA2LTAzLTE3
ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRlbGUuCkBAIC0zNjgsNiArNDgxLDcgQEAKICAgICAgICAgKiBwbGF0Zm9ybS93aW4vVGVt
cG9yYXJ5TGlua1N0dWJzLmNwcDoKICAgICAgICAgKEJyb3dzZXJFeHRlbnNpb25XaW46OmNyZWF0
ZU5ld1dpbmRvdyk6IGRpdHRvCiAKKz4+Pj4+Pj4gLnIxMzM2NQogMjAwNi0wMy0xNyAgQWRlbGUg
UGV0ZXJzb24gIDxhZGVsZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEgu
CkluZGV4OiBicmlkZ2UvbWFjL01hY0ZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJyaWRnZS9tYWMv
TWFjRnJhbWUubW0JKHJldmlzaW9uIDEzMzcxKQorKysgYnJpZGdlL21hYy9NYWNGcmFtZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTIwLDggKzEyMCw2IEBAIE1hY0ZyYW1lOjpNYWNGcmFtZShQYWdl
KiBwYWdlLCBSZW5kZXJQYXIKICAgICAsIF9tb3VzZURvd25NYXlTdGFydERyYWcoZmFsc2UpCiAg
ICAgLCBfbW91c2VEb3duTWF5U3RhcnRTZWxlY3QoZmFsc2UpCiAgICAgLCBfYWN0aXZhdGlvbkV2
ZW50TnVtYmVyKDApCi0gICAgLCBfZm9ybVZhbHVlc0Fib3V0VG9CZVN1Ym1pdHRlZChuaWwpCi0g
ICAgLCBfZm9ybUFib3V0VG9CZVN1Ym1pdHRlZChuaWwpCiAgICAgLCBfYmluZGluZ1Jvb3QoMCkK
ICAgICAsIF93aW5kb3dTY3JpcHRPYmplY3QoMCkKICAgICAsIF93aW5kb3dTY3JpcHROUE9iamVj
dCgwKQpAQCAtMjgzLDE0ICsyODEsMTIgQEAgTlNTdHJpbmcgKk1hY0ZyYW1lOjpzZWFyY2hGb3JM
YWJlbHNBYm92ZQogICAgICAgICAgICAgaWYgKGFib3ZlQ2VsbCkgewogICAgICAgICAgICAgICAg
IC8vIHNlYXJjaCB3aXRoaW4gdGhlIGFib3ZlIGNlbGwgd2UgZm91bmQgZm9yIGEgbWF0Y2gKICAg
ICAgICAgICAgICAgICBmb3IgKE5vZGVJbXBsICpuID0gYWJvdmVDZWxsLT5maXJzdENoaWxkKCk7
IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKGFib3ZlQ2VsbCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSAmJiBuLT5yZW5kZXJlcigpICYmIG4tPnJlbmRlcmVy
KCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQotICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkgJiYgbi0+cmVuZGVy
ZXIoKSAmJiBuLT5yZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGVhY2ggdGV4dCBjaHVuaywgcnVuIHRo
ZSByZWdleHAKICAgICAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgbm9kZVN0cmluZyA9IG4t
Pm5vZGVWYWx1ZSgpLnFzdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3Mg
PSByZWdFeHAtPnNlYXJjaFJldihub2RlU3RyaW5nKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwb3MgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyA+PSAwKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlU3RyaW5nLm1pZChwb3MsIHJl
Z0V4cC0+bWF0Y2hlZExlbmd0aCgpKS5nZXROU1N0cmluZygpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQpAQCAtMzE3LDQ2ICszMTMsMzcgQEAgTlNTdHJpbmcgKk1hY0ZyYW1lOjpzZWFyY2hG
b3JMYWJlbHNCZWZvcgogICAgIE5vZGVJbXBsICpuOwogICAgIGZvciAobiA9IGVsZW1lbnQtPnRy
YXZlcnNlUHJldmlvdXNOb2RlKCk7CiAgICAgICAgICBuICYmIGxlbmd0aFNlYXJjaGVkIDwgY2hh
cnNTZWFyY2hlZFRocmVzaG9sZDsKLSAgICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9k
ZSgpKQotICAgIHsKLSAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoZm9ybVRhZykKLSAgICAgICAg
ICAgIHx8IChuLT5pc0hUTUxFbGVtZW50KCkKLSAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudEltcGwgKj4obiktPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpKQotICAgICAg
ICB7CisgICAgICAgICBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUoKSkgeworICAgICAgICBp
ZiAobi0+aGFzVGFnTmFtZShmb3JtVGFnKSB8fCAobi0+aXNIVE1MRWxlbWVudCgpICYmIHN0YXRp
Y19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihuKS0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkpCiAg
ICAgICAgICAgICAvLyBXZSBoaXQgYW5vdGhlciBmb3JtIGVsZW1lbnQgb3IgdGhlIHN0YXJ0IG9m
IHRoZSBmb3JtIC0gYmFpbCBvdXQKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2Ug
aWYgKG4tPmhhc1RhZ05hbWUodGRUYWcpICYmICFzdGFydGluZ1RhYmxlQ2VsbCkgeworICAgICAg
ICBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKHRkVGFnKSAmJiAhc3RhcnRpbmdUYWJsZUNlbGwpCiAg
ICAgICAgICAgICBzdGFydGluZ1RhYmxlQ2VsbCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxF
bGVtZW50SW1wbCAqPihuKTsKLSAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKHRyVGFn
KSAmJiBzdGFydGluZ1RhYmxlQ2VsbCkgeworICAgICAgICBlbHNlIGlmIChuLT5oYXNUYWdOYW1l
KHRyVGFnKSAmJiBzdGFydGluZ1RhYmxlQ2VsbCkgewogICAgICAgICAgICAgTlNTdHJpbmcgKnJl
c3VsdCA9IHNlYXJjaEZvckxhYmVsc0Fib3ZlQ2VsbChyZWdFeHAsIHN0YXJ0aW5nVGFibGVDZWxs
KTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHNlYXJjaGVkQ2VsbEFib3ZlID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChuLT5pc1RleHRO
b2RlKCkgJiYgbi0+cmVuZGVyZXIoKSAmJiBuLT5yZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmls
aXR5KCkgPT0gVklTSUJMRSkKLSAgICAgICAgeworICAgICAgICB9IGVsc2UgaWYgKG4tPmlzVGV4
dE5vZGUoKSAmJiBuLT5yZW5kZXJlcigpICYmIG4tPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2li
aWxpdHkoKSA9PSBWSVNJQkxFKSB7CiAgICAgICAgICAgICAvLyBGb3IgZWFjaCB0ZXh0IGNodW5r
LCBydW4gdGhlIHJlZ2V4cAogICAgICAgICAgICAgUVN0cmluZyBub2RlU3RyaW5nID0gbi0+bm9k
ZVZhbHVlKCkucXN0cmluZygpOwogICAgICAgICAgICAgLy8gYWRkIDEwMCBmb3Igc2xvcCwgdG8g
bWFrZSBpdCBtb3JlIGxpa2VseSB0aGF0IHdlJ2xsIHNlYXJjaCB3aG9sZSBub2RlcwotICAgICAg
ICAgICAgaWYgKGxlbmd0aFNlYXJjaGVkICsgbm9kZVN0cmluZy5sZW5ndGgoKSA+IG1heENoYXJz
U2VhcmNoZWQpIHsKKyAgICAgICAgICAgIGlmIChsZW5ndGhTZWFyY2hlZCArIG5vZGVTdHJpbmcu
bGVuZ3RoKCkgPiBtYXhDaGFyc1NlYXJjaGVkKQogICAgICAgICAgICAgICAgIG5vZGVTdHJpbmcg
PSBub2RlU3RyaW5nLnJpZ2h0KGNoYXJzU2VhcmNoZWRUaHJlc2hvbGQgLSBsZW5ndGhTZWFyY2hl
ZCk7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBpbnQgcG9zID0gcmVnRXhwLT5zZWFyY2hS
ZXYobm9kZVN0cmluZyk7Ci0gICAgICAgICAgICBpZiAocG9zID49IDApIHsKKyAgICAgICAgICAg
IGlmIChwb3MgPj0gMCkKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZVN0cmluZy5taWQocG9z
LCByZWdFeHAtPm1hdGNoZWRMZW5ndGgoKSkuZ2V0TlNTdHJpbmcoKTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbGVuZ3RoU2VhcmNoZWQg
Kz0gbm9kZVN0cmluZy5sZW5ndGgoKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
IAogICAgIC8vIElmIHdlIHN0YXJ0ZWQgaW4gYSBjZWxsLCBidXQgYmFpbGVkIGJlY2F1c2Ugd2Ug
Zm91bmQgdGhlIHN0YXJ0IG9mIHRoZSBmb3JtIG9yIHRoZQogICAgIC8vIHByZXZpb3VzIGVsZW1l
bnQsIHdlIHN0aWxsIG1pZ2h0IG5lZWQgdG8gc2VhcmNoIHRoZSByb3cgYWJvdmUgdXMgZm9yIGEg
bGFiZWwuCi0gICAgaWYgKHN0YXJ0aW5nVGFibGVDZWxsICYmICFzZWFyY2hlZENlbGxBYm92ZSkg
eworICAgIGlmIChzdGFydGluZ1RhYmxlQ2VsbCAmJiAhc2VhcmNoZWRDZWxsQWJvdmUpCiAgICAg
ICAgICByZXR1cm4gc2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsKHJlZ0V4cCwgc3RhcnRpbmdUYWJs
ZUNlbGwpOwotICAgIH0gZWxzZSB7CisgICAgZWxzZQogICAgICAgICByZXR1cm4gbmlsOwotICAg
IH0KIH0KIAogTlNTdHJpbmcgKk1hY0ZyYW1lOjptYXRjaExhYmVsc0FnYWluc3RFbGVtZW50KE5T
QXJyYXkgKmxhYmVscywgRWxlbWVudEltcGwgKmVsZW1lbnQpCkBAIC00NDIsMzAgKzQyOSwxOSBA
QCBib29sIE1hY0ZyYW1lOjpmaW5kU3RyaW5nKE5TU3RyaW5nICpzdHJpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgTWFjRnJhbWU6OmNsZWFyUmVjb3JkZWRGb3JtVmFsdWVzKCkKLXsKLSAg
ICAvLyBJdCdzIHNhZmUgdG8gYXNzdW1lIHRoYXQgb3VyIG93biBjbGFzc2VzIGFuZCBGb3VuZGF0
aW9uIGRhdGEKLSAgICAvLyBzdHJ1Y3R1cmVzIHdvbid0IHJhaXNlIGV4Y2VwdGlvbnMgaW4gZGVh
bGxvYwotCi0gICAgS1dRUmVsZWFzZShfZm9ybVZhbHVlc0Fib3V0VG9CZVN1Ym1pdHRlZCk7Ci0g
ICAgX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQgPSBuaWw7Ci0gICAgS1dRUmVsZWFzZShf
Zm9ybUFib3V0VG9CZVN1Ym1pdHRlZCk7Ci0gICAgX2Zvcm1BYm91dFRvQmVTdWJtaXR0ZWQgPSBu
aWw7Ci19Ci0KLXZvaWQgTWFjRnJhbWU6OnJlY29yZEZvcm1WYWx1ZShjb25zdCBRU3RyaW5nICZu
YW1lLCBjb25zdCBRU3RyaW5nICZ2YWx1ZSwgSFRNTEZvcm1FbGVtZW50SW1wbCAqZWxlbWVudCkK
K3N0YXRpYyBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnlGcm9tSGFzaE1hcChjb25zdCBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiYgaGFzaE1hcCkKIHsKLSAgICAvLyBJdCdzIHNhZmUgdG8gYXNzdW1l
IHRoYXQgb3VyIG93biBjbGFzc2VzIGFuZCBiYXNpYyBGb3VuZGF0aW9uCi0gICAgLy8gZGF0YSBz
dHJ1Y3R1cmVzIHdvbid0IHJhaXNlIGV4Y2VwdGlvbnMKLQotICAgIGlmICghX2Zvcm1WYWx1ZXNB
Ym91dFRvQmVTdWJtaXR0ZWQpIHsKLSAgICAgICAgX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0
ZWQgPSBLV1FSZXRhaW5OU1JlbGVhc2UoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0
XSk7Ci0gICAgICAgIEFTU0VSVCghX2Zvcm1BYm91dFRvQmVTdWJtaXR0ZWQpOwotICAgICAgICBf
Zm9ybUFib3V0VG9CZVN1Ym1pdHRlZCA9IEtXUVJldGFpbihbRE9NRWxlbWVudCBfZWxlbWVudFdp
dGhJbXBsOmVsZW1lbnRdKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQoW19mb3JtQWJv
dXRUb0JlU3VibWl0dGVkIF9lbGVtZW50SW1wbF0gPT0gZWxlbWVudCk7Ci0gICAgfQotICAgIFtf
Zm9ybVZhbHVlc0Fib3V0VG9CZVN1Ym1pdHRlZCBzZXRPYmplY3Q6dmFsdWUuZ2V0TlNTdHJpbmco
KSBmb3JLZXk6bmFtZS5nZXROU1N0cmluZygpXTsKKyAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUwor
ICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmRpY3QgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0
aW9uYXJ5V2l0aENhcGFjaXR5Omhhc2hNYXAuc2l6ZSgpXTsKKyAgICAKKyAgICBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGFzaE1hcC5iZWdpbigpOworICAg
IGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IGhhc2hN
YXAuYmVnaW4oKTsgaXRyICE9IGVuZDsgKytpdHIpCisgICAgICAgIFtkaWN0IHNldFZhbHVlOml0
ci0+c2Vjb25kIGZvcktleTppdHItPmZpcnN0XTsKKyAgICAKKyAgICByZXR1cm4gZGljdDsKKyAg
ICBLV1FfVU5CTE9DS19FWENFUFRJT05TCisgICAgCisgICAgcmV0dXJuIG5pbDsKIH0KIAogdm9p
ZCBNYWNGcmFtZTo6c3VibWl0Rm9ybShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCkBA
IC00ODEsNyArNDU3LDcgQEAgdm9pZCBNYWNGcmFtZTo6c3VibWl0Rm9ybShjb25zdCBSZXNvdXJj
ZQogICAgIC8vIFRoZSBmb3JtIG11bHRpLXN1Ym1pdCBsb2dpYyBoZXJlIGlzIG9ubHkgbmVlZGVk
IHdoZW4gd2UgYXJlIHN1Ym1pdHRpbmcgYSBmb3JtIHRoYXQgYWZmZWN0cyB0aGlzIGZyYW1lLgog
ICAgIC8vIEZJWE1FOiBGcmFtZSB0YXJnZXRpbmcgaXMgb25seSBvbmUgb2YgdGhlIHdheXMgdGhl
IHN1Ym1pc3Npb24gY291bGQgZW5kIHVwIGRvaW5nIHNvbWV0aGluZyBvdGhlcgogICAgIC8vIHRo
YW4gcmVwbGFjaW5nIHRoaXMgZnJhbWUncyBjb250ZW50LCBzbyB0aGlzIGNoZWNrIGlzIGZsYXdl
ZC4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBjaGVjayBpcyBoYXJkbHkKLSAgICAvLyBuZWVkZWQg
YW55IG1vcmUgbm93IHRoYXQgd2UgcmVzZXQgX3N1Ym1pdHRlZEZvcm1VUkwgb24gZWFjaCBtb3Vz
ZSBvciBrZXkgZG93biBldmVudC4KKyAgICAvLyBuZWVkZWQgYW55IG1vcmUgbm93IHRoYXQgd2Ug
cmVzZXQgbV9zdWJtaXR0ZWRGb3JtVVJMIG9uIGVhY2ggbW91c2Ugb3Iga2V5IGRvd24gZXZlbnQu
CiAgICAgV2ViQ29yZUZyYW1lQnJpZGdlICp0YXJnZXQgPSByZXF1ZXN0LmZyYW1lTmFtZS5pc0Vt
cHR5KCkgPyBfYnJpZGdlIDogW19icmlkZ2UgZmluZEZyYW1lTmFtZWQ6cmVxdWVzdC5mcmFtZU5h
bWUuZ2V0TlNTdHJpbmcoKV07CiAgICAgRnJhbWUgKnRhcmdldFBhcnQgPSBbdGFyZ2V0IGltcGxd
OwogICAgIGJvb2wgd2lsbFJlcGxhY2VUaGlzRnJhbWUgPSBmYWxzZTsKQEAgLTQ5MiwxMCArNDY4
LDkgQEAgdm9pZCBNYWNGcmFtZTo6c3VibWl0Rm9ybShjb25zdCBSZXNvdXJjZQogICAgICAgICB9
CiAgICAgfQogICAgIGlmICh3aWxsUmVwbGFjZVRoaXNGcmFtZSkgewotICAgICAgICBpZiAoX3N1
Ym1pdHRlZEZvcm1VUkwgPT0gcmVxdWVzdC51cmwoKSkgeworICAgICAgICBpZiAobV9zdWJtaXR0
ZWRGb3JtVVJMID09IHJlcXVlc3QudXJsKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgX3N1Ym1pdHRlZEZvcm1VUkwgPSByZXF1ZXN0LnVybCgpOworICAgICAgICBt
X3N1Ym1pdHRlZEZvcm1VUkwgPSByZXF1ZXN0LnVybCgpOwogICAgIH0KIAogICAgIGlmICghcmVx
dWVzdC5kb1Bvc3QoKSkgewpAQCAtNTA1LDggKzQ4MCw4IEBAIHZvaWQgTWFjRnJhbWU6OnN1Ym1p
dEZvcm0oY29uc3QgUmVzb3VyY2UKICAgICAgICAgICAgICB1c2VyR2VzdHVyZTp0cnVlCiAgICAg
ICAgICAgICAgICAgICB0YXJnZXQ6cmVxdWVzdC5mcmFtZU5hbWUuZ2V0TlNTdHJpbmcoKQogICAg
ICAgICAgdHJpZ2dlcmluZ0V2ZW50Ol9jdXJyZW50RXZlbnQKLSAgICAgICAgICAgICAgICAgICAg
Zm9ybTpfZm9ybUFib3V0VG9CZVN1Ym1pdHRlZAotICAgICAgICAgICAgICBmb3JtVmFsdWVzOl9m
b3JtVmFsdWVzQWJvdXRUb0JlU3VibWl0dGVkXTsKKyAgICAgICAgICAgICAgICAgICAgZm9ybTpb
RE9NRWxlbWVudCBfZWxlbWVudFdpdGhJbXBsOm1fZm9ybUFib3V0VG9CZVN1Ym1pdHRlZC5nZXQo
KV0KKyAgICAgICAgICAgICAgZm9ybVZhbHVlczpkaWN0aW9uYXJ5RnJvbUhhc2hNYXAobV9mb3Jt
VmFsdWVzQWJvdXRUb0JlU3VibWl0dGVkKV07CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJU
KHJlcXVlc3QuY29udGVudFR5cGUoKS5zdGFydHNXaXRoKCJDb250ZW50LVR5cGU6ICIpKTsKICAg
ICAgICAgW19icmlkZ2UgcG9zdFdpdGhVUkw6cmVxdWVzdC51cmwoKS5nZXROU1VSTCgpCkBAIC01
MTUsOCArNDkwLDggQEAgdm9pZCBNYWNGcmFtZTo6c3VibWl0Rm9ybShjb25zdCBSZXNvdXJjZQog
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTphcnJheUZyb21Gb3JtRGF0YShyZXF1ZXN0LnBv
c3REYXRhKQogICAgICAgICAgICAgICAgICBjb250ZW50VHlwZTpyZXF1ZXN0LmNvbnRlbnRUeXBl
KCkubWlkKDE0KS5nZXROU1N0cmluZygpCiAgICAgICAgICAgICAgdHJpZ2dlcmluZ0V2ZW50Ol9j
dXJyZW50RXZlbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcm06X2Zvcm1BYm91dFRvQmVT
dWJtaXR0ZWQKLSAgICAgICAgICAgICAgICAgIGZvcm1WYWx1ZXM6X2Zvcm1WYWx1ZXNBYm91dFRv
QmVTdWJtaXR0ZWRdOworICAgICAgICAgICAgICAgICAgICAgICAgZm9ybTpbRE9NRWxlbWVudCBf
ZWxlbWVudFdpdGhJbXBsOm1fZm9ybUFib3V0VG9CZVN1Ym1pdHRlZC5nZXQoKV0KKyAgICAgICAg
ICAgICAgICAgIGZvcm1WYWx1ZXM6ZGljdGlvbmFyeUZyb21IYXNoTWFwKG1fZm9ybVZhbHVlc0Fi
b3V0VG9CZVN1Ym1pdHRlZCldOwogICAgIH0KICAgICBjbGVhclJlY29yZGVkRm9ybVZhbHVlcygp
OwogCkBAIC02MjksNyArNjA0LDcgQEAgdm9pZCBNYWNGcmFtZTo6c2V0VmlldyhGcmFtZVZpZXcg
KnZpZXcpCiAgICAgLy8gT25seSBvbmUgZm9ybSBzdWJtaXNzaW9uIGlzIGFsbG93ZWQgcGVyIHZp
ZXcgb2YgYSBwYXJ0LgogICAgIC8vIFNpbmNlIHRoaXMgcGFydCBtYXkgYmUgZ2V0dGluZyByZXVz
ZWQgYXMgYSByZXN1bHQgb2YgYmVpbmcKICAgICAvLyBwdWxsZWQgZnJvbSB0aGUgYmFjay9mb3J3
YXJkIGNhY2hlLCByZXNldCB0aGlzIGZsYWcuCi0gICAgX3N1Ym1pdHRlZEZvcm1VUkwgPSBLVVJM
KCk7CisgICAgbV9zdWJtaXR0ZWRGb3JtVVJMID0gS1VSTCgpOwogfQogCiB2b2lkIE1hY0ZyYW1l
OjpzZXRUaXRsZShjb25zdCBET01TdHJpbmcgJnRpdGxlKQpAQCAtOTg4LDcgKzk2Myw3IEBAIGJv
b2wgTWFjRnJhbWU6OmN1cnJlbnRFdmVudElzTW91c2VEb3duSW4KICAgICAgICAgY2FzZSBOU090
aGVyTW91c2VEb3duOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gTk87CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7CiAgICAgCkBAIC0xMDAxLDQwICs5NzYsMzcgQEAgYm9v
bCBNYWNGcmFtZTo6Y3VycmVudEV2ZW50SXNLZXlib2FyZE9wdAogewogICAgIEtXUV9CTE9DS19F
WENFUFRJT05TOwogICAgIE5TRXZlbnQgKmV2dCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOwotICAg
IGlmIChbZXZ0IHR5cGVdICE9IE5TS2V5RG93bikgewotICAgICAgICByZXR1cm4gTk87Ci0gICAg
fQorICAgIGlmIChbZXZ0IHR5cGVdICE9IE5TS2V5RG93bikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKChbZXZ0IG1vZGlmaWVyRmxhZ3NdICYgTlNBbHRlcm5hdGVLZXlNYXNrKSA9
PSAwKSB7Ci0gICAgICAgIHJldHVybiBOTzsKLSAgICB9CisgICAgaWYgKChbZXZ0IG1vZGlmaWVy
RmxhZ3NdICYgTlNBbHRlcm5hdGVLZXlNYXNrKSA9PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCiAgICAgTlNTdHJpbmcgKmNoYXJzID0gW2V2dCBjaGFyYWN0ZXJzSWdub3JpbmdNb2Rp
ZmllcnNdOwogICAgIGlmIChbY2hhcnMgbGVuZ3RoXSAhPSAxKQotICAgICAgICByZXR1cm4gTk87
CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBjb25zdCB1bmljaGFyIHRhYktleSA9
IDB4MDAwOTsKICAgICBjb25zdCB1bmljaGFyIHNoaWZ0VGFiS2V5ID0gMHgwMDE5OwogICAgIHVu
aWNoYXIgYyA9IFtjaGFycyBjaGFyYWN0ZXJBdEluZGV4OjBdOwogICAgIGlmIChjICE9IHRhYktl
eSAmJiBjICE9IHNoaWZ0VGFiS2V5KQotICAgICAgICByZXR1cm4gTk87CisgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKICAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwotICAgIHJldHVybiBZ
RVM7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgTWFjRnJhbWU6OmhhbmRsZUtleWJvYXJk
T3B0aW9uVGFiSW5WaWV3KE5TVmlldyAqdmlldykKIHsKICAgICBpZiAoTWFjRnJhbWU6OmN1cnJl
bnRFdmVudElzS2V5Ym9hcmRPcHRpb25UYWIoKSkgewotICAgICAgICBpZiAoKFtbTlNBcHAgY3Vy
cmVudEV2ZW50XSBtb2RpZmllckZsYWdzXSAmIE5TU2hpZnRLZXlNYXNrKSAhPSAwKSB7CisgICAg
ICAgIGlmIChbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10gJiBOU1NoaWZ0S2V5
TWFzaykKICAgICAgICAgICAgIFtbdmlldyB3aW5kb3ddIHNlbGVjdEtleVZpZXdQcmVjZWRpbmdW
aWV3OnZpZXddOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBlbHNlCiAgICAgICAgICAgICBb
W3ZpZXcgd2luZG93XSBzZWxlY3RLZXlWaWV3Rm9sbG93aW5nVmlldzp2aWV3XTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gWUVTOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
Ci0gICAgcmV0dXJuIE5POworICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBNYWNGcmFtZTo6
dGFic1RvTGlua3MoKSBjb25zdApAQCAtMTA1MSw5ICsxMDIzLDggQEAgYm9vbCBNYWNGcmFtZTo6
dGFic1RvQWxsQ29udHJvbHMoKSBjb25zdAogICAgIEJPT0wgaGFuZGxpbmdPcHRpb25UYWIgPSBN
YWNGcmFtZTo6Y3VycmVudEV2ZW50SXNLZXlib2FyZE9wdGlvblRhYigpOwogCiAgICAgLy8gSWYg
dGFiLXRvLWxpbmtzIGlzIG9mZiwgb3B0aW9uLXRhYiBhbHdheXMgaGlnaGxpZ2h0cyBhbGwgY29u
dHJvbHMKLSAgICBpZiAoKGtleWJvYXJkVUlNb2RlICYgV2ViQ29yZUtleWJvYXJkQWNjZXNzVGFi
c1RvTGlua3MpID09IDAgJiYgaGFuZGxpbmdPcHRpb25UYWIpIHsKKyAgICBpZiAoKGtleWJvYXJk
VUlNb2RlICYgV2ViQ29yZUtleWJvYXJkQWNjZXNzVGFic1RvTGlua3MpID09IDAgJiYgaGFuZGxp
bmdPcHRpb25UYWIpCiAgICAgICAgIHJldHVybiBZRVM7Ci0gICAgfQogICAgIAogICAgIC8vIElm
IHN5c3RlbSBwcmVmZXJlbmNlcyBzYXkgdG8gaW5jbHVkZSBhbGwgY29udHJvbHMsIHdlIGFsd2F5
cyBpbmNsdWRlIGFsbCBjb250cm9scwogICAgIGlmIChrZXlib2FyZFVJTW9kZSAmIFdlYkNvcmVL
ZXlib2FyZEFjY2Vzc0Z1bGwpIHsKQEAgLTIxNDYsNyArMjExNyw3IEBAIGJvb2wgTWFjRnJhbWU6
OnNob3VsZERyYWdBdXRvTm9kZShOb2RlSW0KICAgICAgICAgTlNQb2ludCBldmVudExvYyA9IHt3
aW5kb3dYLCB3aW5kb3dZfTsKICAgICAgICAgcmV0dXJuIFtfYnJpZGdlIG1heVN0YXJ0RHJhZ0F0
RXZlbnRMb2NhdGlvbjpldmVudExvY107CiAgICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBOTzsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIE1hY0ZyYW1lOjpzZW5kQ29udGV4dE1l
bnVFdmVudChOU0V2ZW50ICpldmVudCkKQEAgLTI3MDUsMTggKzI2NzYsMTcgQEAgTlNJbWFnZSAq
TWFjRnJhbWU6OmltYWdlRnJvbVJlY3QoTlNSZWN0IAogCiBOU0ltYWdlICpNYWNGcmFtZTo6c2Vs
ZWN0aW9uSW1hZ2UoKSBjb25zdAogewotICAgIF9kcmF3U2VsZWN0aW9uT25seSA9IHRydWU7ICAv
LyBpbnZva2Ugc3BlY2lhbCBkcmF3aW5nIG1vZGUKKyAgICBtX2RyYXdTZWxlY3Rpb25Pbmx5ID0g
dHJ1ZTsgIC8vIGludm9rZSBzcGVjaWFsIGRyYXdpbmcgbW9kZQogICAgIE5TSW1hZ2UgKnJlc3Vs
dCA9IGltYWdlRnJvbVJlY3QodmlzaWJsZVNlbGVjdGlvblJlY3QoKSk7Ci0gICAgX2RyYXdTZWxl
Y3Rpb25Pbmx5ID0gZmFsc2U7CisgICAgbV9kcmF3U2VsZWN0aW9uT25seSA9IGZhbHNlOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIE5TSW1hZ2UgKk1hY0ZyYW1lOjpzbmFwc2hvdERyYWdJbWFn
ZShOb2RlSW1wbCAqbm9kZSwgTlNSZWN0ICppbWFnZVJlY3QsIE5TUmVjdCAqZWxlbWVudFJlY3Qp
IGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7
Ci0gICAgaWYgKCFyZW5kZXJlcikgeworICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVy
biBuaWw7Ci0gICAgfQogICAgIAogICAgIHJlbmRlcmVyLT51cGRhdGVEcmFnU3RhdGUodHJ1ZSk7
ICAgIC8vIG1hcmsgZHJhZ2dlZCBub2RlcyAoc28gdGhleSBwaWNrIHVwIHRoZSByaWdodCBDU1Mp
CiAgICAgZC0+bV9kb2MtPnVwZGF0ZUxheW91dCgpOyAgICAgICAgLy8gZm9yY2VzIHN0eWxlIHJl
Y2FsYyAtIG5lZWRlZCBzaW5jZSBjaGFuZ2luZyB0aGUgZHJhZyBzdGF0ZSBtaWdodApAQCAtMjcy
NCwxOCArMjY5NCwxNiBAQCBOU0ltYWdlICpNYWNGcmFtZTo6c25hcHNob3REcmFnSW1hZ2UoTm9k
CiAgICAgSW50UmVjdCB0b3BMZXZlbFJlY3Q7CiAgICAgTlNSZWN0IHBhaW50aW5nUmVjdCA9IHJl
bmRlcmVyLT5wYWludGluZ1Jvb3RSZWN0KHRvcExldmVsUmVjdCk7CiAKLSAgICBfZWxlbWVudFRv
RHJhdyA9IG5vZGU7ICAgICAgICAgICAgICAvLyBpbnZva2Ugc3BlY2lhbCBzdWItdHJlZSBkcmF3
aW5nIG1vZGUKKyAgICBtX2VsZW1lbnRUb0RyYXcgPSBub2RlOyAgICAgICAgICAgICAgLy8gaW52
b2tlIHNwZWNpYWwgc3ViLXRyZWUgZHJhd2luZyBtb2RlCiAgICAgTlNJbWFnZSAqcmVzdWx0ID0g
aW1hZ2VGcm9tUmVjdChwYWludGluZ1JlY3QpOwogICAgIHJlbmRlcmVyLT51cGRhdGVEcmFnU3Rh
dGUoZmFsc2UpOwogICAgIGQtPm1fZG9jLT51cGRhdGVMYXlvdXQoKTsKLSAgICBfZWxlbWVudFRv
RHJhdyA9IDA7CisgICAgbV9lbGVtZW50VG9EcmF3ID0gMDsKIAotICAgIGlmIChlbGVtZW50UmVj
dCkgeworICAgIGlmIChlbGVtZW50UmVjdCkKICAgICAgICAgKmVsZW1lbnRSZWN0ID0gdG9wTGV2
ZWxSZWN0OwotICAgIH0KLSAgICBpZiAoaW1hZ2VSZWN0KSB7CisgICAgaWYgKGltYWdlUmVjdCkK
ICAgICAgICAgKmltYWdlUmVjdCA9IHBhaW50aW5nUmVjdDsKLSAgICB9CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIApJbmRleDogYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHJldmlzaW9uIDEzMzcx
KQorKysgYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHdvcmtpbmcgY29weSkKQEAg
LTEyNjIsMzggKzEyNjIsMzIgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVt
ZW50RgogLSAoTlNWaWV3ICopbmV4dEtleVZpZXcKIHsKICAgICBEb2N1bWVudEltcGwgKmRvYyA9
IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2MpIHsKKyAgICBpZiAoIWRvYykKICAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICB9CiAgICAgcmV0dXJuIG1fZnJhbWUtPm5leHRLZXlWaWV3
KGRvYy0+Zm9jdXNOb2RlKCksIEtXUVNlbGVjdGluZ05leHQpOwogfQogCiAtIChOU1ZpZXcgKilw
cmV2aW91c0tleVZpZXcKIHsKICAgICBEb2N1bWVudEltcGwgKmRvYyA9IG1fZnJhbWUtPmRvY3Vt
ZW50KCk7Ci0gICAgaWYgKCFkb2MpIHsKKyAgICBpZiAoIWRvYykKICAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICB9CiAgICAgcmV0dXJuIG1fZnJhbWUtPm5leHRLZXlWaWV3KGRvYy0+Zm9jdXNOb2Rl
KCksIEtXUVNlbGVjdGluZ1ByZXZpb3VzKTsKIH0KIAogLSAoTlNWaWV3ICopbmV4dEtleVZpZXdJ
bnNpZGVXZWJGcmFtZVZpZXdzCiB7CiAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpOwotICAgIGlmICghZG9jKSB7CisgICAgaWYgKCFkb2MpCiAgICAgICAgIHJldHVy
biBuaWw7Ci0gICAgfQotICAgIAogICAgIHJldHVybiBtX2ZyYW1lLT5uZXh0S2V5Vmlld0luRnJh
bWVIaWVyYXJjaHkoZG9jLT5mb2N1c05vZGUoKSwgS1dRU2VsZWN0aW5nTmV4dCk7CiB9CiAKIC0g
KE5TVmlldyAqKXByZXZpb3VzS2V5Vmlld0luc2lkZVdlYkZyYW1lVmlld3MKIHsKICAgICBEb2N1
bWVudEltcGwgKmRvYyA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2MpIHsKKyAg
ICBpZiAoIWRvYykKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0KICAgICByZXR1cm4gbV9m
cmFtZS0+bmV4dEtleVZpZXdJbkZyYW1lSGllcmFyY2h5KGRvYy0+Zm9jdXNOb2RlKCksIEtXUVNl
bGVjdGluZ1ByZXZpb3VzKTsKIH0KIApJbmRleDogYnJpZGdlL21hYy9NYWNGcmFtZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGJyaWRnZS9tYWMvTWFjRnJhbWUuaAkocmV2aXNpb24gMTMzNzEpCisrKyBicmlk
Z2UvbWFjL01hY0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw5ICsyMzIsNiBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIHBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2
ZW50V2l0aEhpdFRlc3RSZXN1bHRzICYpOwogICAgIHZpcnR1YWwgYm9vbCBwYXNzV2hlZWxFdmVu
dFRvQ2hpbGRXaWRnZXQoTm9kZUltcGwgKik7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGNsZWFy
UmVjb3JkZWRGb3JtVmFsdWVzKCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZEZvcm1WYWx1ZShj
b25zdCBRU3RyaW5nICZuYW1lLCBjb25zdCBRU3RyaW5nICZ2YWx1ZSwgSFRNTEZvcm1FbGVtZW50
SW1wbCAqZWxlbWVudCk7Ci0KICAgICBOU1N0cmluZyAqc2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxs
KFFSZWdFeHAgKnJlZ0V4cCwgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICpjZWxsKTsKICAgICBO
U1N0cmluZyAqc2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudChOU0FycmF5ICpsYWJlbHMsIEVs
ZW1lbnRJbXBsICplbGVtZW50KTsKICAgICBOU1N0cmluZyAqbWF0Y2hMYWJlbHNBZ2FpbnN0RWxl
bWVudChOU0FycmF5ICpsYWJlbHMsIEVsZW1lbnRJbXBsICplbGVtZW50KTsKQEAgLTM0OSw5ICsz
NDYsNiBAQCBwcml2YXRlOgogICAgIAogICAgIHN0YXRpYyBOU0V2ZW50ICpfY3VycmVudEV2ZW50
OwogCi0gICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0
ZWQ7Ci0gICAgT2JqQ0RPTUVsZW1lbnQgKl9mb3JtQWJvdXRUb0JlU3VibWl0dGVkOwotCiAgICAg
Ym9vbCBfaGF2ZVVuZG9SZWRvT3BlcmF0aW9uczsKICAgICAKICAgICBIYXNoU2V0PFJlZlB0cjxE
T01TdHJpbmdJbXBsPiA+IHVybHNCcmlkZ2VLbm93c0Fib3V0OwpJbmRleDogcGFnZS9GcmFtZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHBhZ2UvRnJhbWUuaAkocmV2aXNpb24gMTMzNzEpCisrKyBwYWdlL0Zy
YW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1Myw4ICs1NTMsNiBAQCBwdWJsaWM6CiAgIHZpcnR1
YWwgUVN0cmluZyB1c2VyQWdlbnQoKSBjb25zdCA9IDA7CiAgIHZpcnR1YWwgUVN0cmluZyBpbmNv
bWluZ1JlZmVycmVyKCkgY29uc3QgPSAwOwogICB2aXJ0dWFsIFFTdHJpbmcgbWltZVR5cGVGb3JG
aWxlTmFtZShjb25zdCBRU3RyaW5nICYpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCB2b2lkIGNsZWFy
UmVjb3JkZWRGb3JtVmFsdWVzKCkgPSAwOwotICB2aXJ0dWFsIHZvaWQgcmVjb3JkRm9ybVZhbHVl
KGNvbnN0IFFTdHJpbmcgJm5hbWUsIGNvbnN0IFFTdHJpbmcgJnZhbHVlLCBIVE1MRm9ybUVsZW1l
bnRJbXBsICplbGVtZW50KSA9IDA7CiAgIHZpcnR1YWwgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2Ug
KmdldEVtYmVkSW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KikgPSAwOwogICB2aXJ0dWFsIEtKUzo6
QmluZGluZ3M6Okluc3RhbmNlICpnZXRPYmplY3RJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqKSA9
IDA7CiAgIHZpcnR1YWwgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKmdldEFwcGxldEluc3RhbmNl
Rm9yV2lkZ2V0KFdpZGdldCopID0gMDsKQEAgLTc2NCw2ICs3NjIsOSBAQCBwcml2YXRlOgogICAv
LyBDdXJyZW50bHksIGFsbCB0aGlzIGRvZXMgaXMgY2xlYXIgdGhlICJkb24ndCBzdWJtaXQgZm9y
bSB0d2ljZSIgZGF0YSBtZW1iZXIuCiAgIHZvaWQgcHJlcGFyZUZvclVzZXJBY3Rpb24oKTsKICAg
Tm9kZUltcGwgKm1vdXNlUHJlc3NOb2RlKCk7CisgIAorICB2b2lkIGNsZWFyUmVjb3JkZWRGb3Jt
VmFsdWVzKCk7CisgIHZvaWQgcmVjb3JkRm9ybVZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgSFRNTEZvcm1FbGVtZW50SW1wbCopOwogCiAgIGJvb2wgaXNDb21w
bGV0ZSgpIGNvbnN0OwogICBib29sIGlzTG9hZGluZ01haW5SZXNvdXJjZSgpIGNvbnN0OwpAQCAt
ODI5LDkgKzgzMCwxMSBAQCBwdWJsaWM6CiAgIGZyaWVuZCBjbGFzcyBGcmFtZVByaXZhdGU7CiAg
IEZyYW1lUHJpdmF0ZSogZDsKICAgICAgIAotICBtdXRhYmxlIFJlZlB0cjxOb2RlSW1wbD4gX2Vs
ZW1lbnRUb0RyYXc7Ci0gIG11dGFibGUgYm9vbCBfZHJhd1NlbGVjdGlvbk9ubHk7Ci0gIEtVUkwg
X3N1Ym1pdHRlZEZvcm1VUkw7CisgIG11dGFibGUgUmVmUHRyPE5vZGVJbXBsPiBtX2VsZW1lbnRU
b0RyYXc7CisgIG11dGFibGUgYm9vbCBtX2RyYXdTZWxlY3Rpb25Pbmx5OworICBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBtX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQ7CisgIFJlZlB0cjxF
bGVtZW50SW1wbD4gbV9mb3JtQWJvdXRUb0JlU3VibWl0dGVkOworICBLVVJMIG1fc3VibWl0dGVk
Rm9ybVVSTDsKICAgYm9vbCBtX21hcmtlZFRleHRVc2VzVW5kZXJsaW5lczsKICAgUVZhbHVlTGlz
dDxNYXJrZWRUZXh0VW5kZXJsaW5lPiBtX21hcmtlZFRleHRVbmRlcmxpbmVzOwogICBib29sIG1f
d2luZG93SGFzRm9jdXM7CkluZGV4OiBwYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdl
L0ZyYW1lLmNwcAkocmV2aXNpb24gMTMzNzEpCisrKyBwYWdlL0ZyYW1lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ2LDcgKzE0Niw3IEBAIHN0YXRpYyBpbmxpbmUgRnJhbWUqIHBhcmVudEZyb21P
d25lclJlbmQKIAogRnJhbWU6OkZyYW1lKFBhZ2UqIHBhZ2UsIFJlbmRlclBhcnQqIG93bmVyUmVu
ZGVyZXIpIAogICAgIDogZChuZXcgRnJhbWVQcml2YXRlKHBhZ2UsIHBhcmVudEZyb21Pd25lclJl
bmRlcmVyKG93bmVyUmVuZGVyZXIpLCB0aGlzLCBvd25lclJlbmRlcmVyKSkKLSAgICAsIF9kcmF3
U2VsZWN0aW9uT25seShmYWxzZSkKKyAgICAsIG1fZHJhd1NlbGVjdGlvbk9ubHkoZmFsc2UpCiAg
ICAgLCBtX21hcmtlZFRleHRVc2VzVW5kZXJsaW5lcyhmYWxzZSkKICAgICAsIG1fd2luZG93SGFz
Rm9jdXMoZmFsc2UpCiAgICAgLCBmcmFtZUNvdW50KDApCkBAIC0xNDY1LDYgKzE0NjUsMTggQEAg
RnJhbWUqIEZyYW1lOjpsb2FkU3ViZnJhbWUoUmVuZGVyUGFydCogcgogICAgIHJldHVybiBmcmFt
ZTsKIH0KIAordm9pZCBGcmFtZTo6Y2xlYXJSZWNvcmRlZEZvcm1WYWx1ZXMoKQoreworICAgIG1f
Zm9ybUFib3V0VG9CZVN1Ym1pdHRlZCA9IDA7CisgICAgbV9mb3JtVmFsdWVzQWJvdXRUb0JlU3Vi
bWl0dGVkLmNsZWFyKCk7Cit9CisKK3ZvaWQgRnJhbWU6OnJlY29yZEZvcm1WYWx1ZShjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIEhUTUxGb3JtRWxlbWVudEltcGwqIGVs
ZW1lbnQpCit7CisgICAgbV9mb3JtQWJvdXRUb0JlU3VibWl0dGVkID0gZWxlbWVudDsKKyAgICBt
X2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQuc2V0KG5hbWUsIHZhbHVlKTsKK30KKwogdm9p
ZCBGcmFtZTo6c3VibWl0Rm9ybUFnYWluKCkKIHsKICAgICBGcmFtZVByaXZhdGU6OlN1Ym1pdEZv
cm0qIGZvcm0gPSBkLT5tX3N1Ym1pdEZvcm07CkBAIC0xNTcwLDcgKzE1ODIsNiBAQCB2b2lkIEZy
YW1lOjpzdWJtaXRGb3JtKGNvbnN0IGNoYXIgKmFjdGlvCiAgIH0KIH0KIAotCiB2b2lkIEZyYW1l
OjpwYXJlbnRDb21wbGV0ZWQoKQogewogICAgIGlmIChkLT5tX3NjaGVkdWxlZFJlZGlyZWN0aW9u
ICE9IG5vUmVkaXJlY3Rpb25TY2hlZHVsZWQgJiYgIWQtPm1fcmVkaXJlY3Rpb25UaW1lci5pc0Fj
dGl2ZSgpKQpAQCAtMjU2OSw5ICsyNTgwLDggQEAgYm9vbCBGcmFtZTo6b3BlblVSTChjb25zdCBL
VVJMICZVUkwpCiAKIHZvaWQgRnJhbWU6OmRpZE5vdE9wZW5VUkwoY29uc3QgS1VSTCAmVVJMKQog
ewotICAgIGlmIChfc3VibWl0dGVkRm9ybVVSTCA9PSBVUkwpIHsKLSAgICAgICAgX3N1Ym1pdHRl
ZEZvcm1VUkwgPSBLVVJMKCk7Ci0gICAgfQorICAgIGlmIChtX3N1Ym1pdHRlZEZvcm1VUkwgPT0g
VVJMKQorICAgICAgICBtX3N1Ym1pdHRlZEZvcm1VUkwgPSBLVVJMKCk7CiB9CiAKIC8vIFNjYW5z
IGxvZ2ljYWxseSBmb3J3YXJkIGZyb20gInN0YXJ0IiwgaW5jbHVkaW5nIGFueSBjaGlsZCBmcmFt
ZXMKQEAgLTI1NzksMTcgKzI1ODksMTQgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKnNj
YW5Gb3JGb3JtKAogewogICAgIE5vZGVJbXBsICpuOwogICAgIGZvciAobiA9IHN0YXJ0OyBuOyBu
ID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKGZv
cm1UYWcpKSB7CisgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKGZvcm1UYWcpKQogICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgKj4obik7Ci0gICAgICAg
IH0gZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVudCgpCi0gICAgICAgICAgICAgICAgICAgJiYgc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KG4pLT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpKSB7
CisgICAgICAgIGVsc2UgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxIVE1M
RWxlbWVudEltcGwgKj4obiktPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwgKj4obiktPmZvcm0o
KTsKLSAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKGZyYW1lVGFnKSB8fCBuLT5oYXNU
YWdOYW1lKGlmcmFtZVRhZykpIHsKKyAgICAgICAgZWxzZSBpZiAobi0+aGFzVGFnTmFtZShmcmFt
ZVRhZykgfHwgbi0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKSB7CiAgICAgICAgICAgICBOb2RlSW1w
bCAqY2hpbGREb2MgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAqPihuKS0+Y29u
dGVudERvY3VtZW50KCk7Ci0gICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpmcmFtZVJl
c3VsdCA9IHNjYW5Gb3JGb3JtKGNoaWxkRG9jKTsKLSAgICAgICAgICAgIGlmIChmcmFtZVJlc3Vs
dCkgeworICAgICAgICAgICAgaWYgKEhUTUxGb3JtRWxlbWVudEltcGwgKmZyYW1lUmVzdWx0ID0g
c2NhbkZvckZvcm0oY2hpbGREb2MpKQogICAgICAgICAgICAgICAgIHJldHVybiBmcmFtZVJlc3Vs
dDsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTI3
MjcsOSArMjczNCw5IEBAIHZvaWQgRnJhbWU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogcCwgY28K
ICAgICAgICAgZmlsbFdpdGhSZWQgPSBmYWxzZTsgLy8gU3ViZnJhbWUsIGRvbid0IGZpbGwgd2l0
aCByZWQuCiAgICAgZWxzZSBpZiAodmlldygpICYmIHZpZXcoKS0+aXNUcmFuc3BhcmVudCgpKQog
ICAgICAgICBmaWxsV2l0aFJlZCA9IGZhbHNlOyAvLyBUcmFuc3BhcmVudCwgZG9uJ3QgZmlsbCB3
aXRoIHJlZC4KLSAgICBlbHNlIGlmIChfZHJhd1NlbGVjdGlvbk9ubHkpCisgICAgZWxzZSBpZiAo
bV9kcmF3U2VsZWN0aW9uT25seSkKICAgICAgICAgZmlsbFdpdGhSZWQgPSBmYWxzZTsgLy8gU2Vs
ZWN0aW9ucyBhcmUgdHJhbnNwYXJlbnQsIGRvbid0IGZpbGwgd2l0aCByZWQuCi0gICAgZWxzZSBp
ZiAoX2VsZW1lbnRUb0RyYXcpCisgICAgZWxzZSBpZiAobV9lbGVtZW50VG9EcmF3KQogICAgICAg
ICBmaWxsV2l0aFJlZCA9IGZhbHNlOyAvLyBFbGVtZW50IGltYWdlcyBhcmUgdHJhbnNwYXJlbnQs
IGRvbid0IGZpbGwgd2l0aCByZWQuCiAgICAgZWxzZQogICAgICAgICBmaWxsV2l0aFJlZCA9IHRy
dWU7CkBAIC0yNzM5LDkgKzI3NDYsOSBAQCB2b2lkIEZyYW1lOjpwYWludChHcmFwaGljc0NvbnRl
eHQqIHAsIGNvCiAjZW5kaWYKICAgICAKICAgICBpZiAocmVuZGVyZXIoKSkgewotICAgICAgICAv
LyBfZWxlbWVudFRvRHJhdyBpcyB1c2VkIHRvIGRyYXcgb25seSBvbmUgZWxlbWVudAotICAgICAg
ICBSZW5kZXJPYmplY3QgKmVsdFJlbmRlcmVyID0gX2VsZW1lbnRUb0RyYXcgPyBfZWxlbWVudFRv
RHJhdy0+cmVuZGVyZXIoKSA6IDA7Ci0gICAgICAgIHJlbmRlcmVyKCktPmxheWVyKCktPnBhaW50
KHAsIHJlY3QsIF9kcmF3U2VsZWN0aW9uT25seSwgZWx0UmVuZGVyZXIpOworICAgICAgICAvLyBt
X2VsZW1lbnRUb0RyYXcgaXMgdXNlZCB0byBkcmF3IG9ubHkgb25lIGVsZW1lbnQKKyAgICAgICAg
UmVuZGVyT2JqZWN0ICplbHRSZW5kZXJlciA9IG1fZWxlbWVudFRvRHJhdyA/IG1fZWxlbWVudFRv
RHJhdy0+cmVuZGVyZXIoKSA6IDA7CisgICAgICAgIHJlbmRlcmVyKCktPmxheWVyKCktPnBhaW50
KHAsIHJlY3QsIG1fZHJhd1NlbGVjdGlvbk9ubHksIGVsdFJlbmRlcmVyKTsKIAogI2lmIF9fQVBQ
TEVfXwogICAgICAgICAvLyBSZWdpb25zIG1heSBoYXZlIGNoYW5nZWQgYXMgYSByZXN1bHQgb2Yg
dGhlIHZpc2liaWxpdHkvei1pbmRleCBvZiBlbGVtZW50IGNoYW5naW5nLgpAQCAtMzI3Myw3ICsz
MjgwLDcgQEAgdm9pZCBGcmFtZTo6cHJlcGFyZUZvclVzZXJBY3Rpb24oKQogewogICAgIC8vIFJl
c2V0IHRoZSBtdWx0aXBsZSBmb3JtIHN1Ym1pc3Npb24gcHJvdGVjdGlvbiBjb2RlLgogICAgIC8v
IFdlJ2xsIGxldCB5b3Ugc3VibWl0IHRoZSBzYW1lIGZvcm0gdHdpY2UgaWYgeW91IGRvIHR3byBz
ZXBhcmF0ZSB1c2VyIGFjdGlvbnMuCi0gICAgX3N1Ym1pdHRlZEZvcm1VUkwgPSBLVVJMKCk7Cisg
ICAgbV9zdWJtaXR0ZWRGb3JtVVJMID0gS1VSTCgpOwogfQogCiBOb2RlSW1wbCAqRnJhbWU6Om1v
dXNlUHJlc3NOb2RlKCkK
</data>
<flag name="review"
          id="1879"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7181</attachid>
            <date>2006-03-19 21:08:09 -0800</date>
            <delta_ts>2006-03-19 21:23:01 -0800</delta_ts>
            <desc>Same patch, updated after rename changes.</desc>
            <filename>new.patch</filename>
            <type>text/plain</type>
            <size>63545</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3Jt
L0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAxMzM5MykKKysrIHBsYXRmb3JtL0dyYXBoaWNz
Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIGNsYXNzIEZvbnQ7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0UHJpdmF0
ZTsKKyAgICBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CiAgICAgY2xhc3Mg
SW50UG9pbnQ7CiAgICAgY2xhc3MgSW50UG9pbnRBcnJheTsKIApAQCAtOTEsMzIgKzkyLDMxIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzYXZlKCk7CiAgICAgICAgIHZvaWQg
cmVzdG9yZSgpOwogICAgICAgICAKLSAgICAgICAgdm9pZCBkcmF3UmVjdChpbnQsIGludCwgaW50
LCBpbnQpOwotICAgICAgICB2b2lkIGRyYXdMaW5lKGludCwgaW50LCBpbnQsIGludCk7Ci0gICAg
ICAgIHZvaWQgZHJhd0VsbGlwc2UoaW50LCBpbnQsIGludCwgaW50KTsKKyAgICAgICAgdm9pZCBk
cmF3UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgSW50
UG9pbnQmLCBjb25zdCBJbnRQb2ludCYpOworICAgICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0
IEludFJlY3QmKTsKICAgICAgICAgdm9pZCBkcmF3QXJjKGludCwgaW50LCBpbnQsIGludCwgaW50
LCBpbnQpOwogICAgICAgICB2b2lkIGRyYXdDb252ZXhQb2x5Z29uKGNvbnN0IEludFBvaW50QXJy
YXkmKTsKIAotICAgICAgICB2b2lkIGZpbGxSZWN0KGludCwgaW50LCBpbnQsIGludCwgY29uc3Qg
QnJ1c2gmKTsKICAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBJbnRSZWN0JiwgY29uc3QgQnJ1
c2gmKTsKIAogICAgICAgICB2b2lkIGRyYXdJbWFnZUF0UG9pbnQoSW1hZ2UqLCBjb25zdCBJbnRQ
b2ludCYsIEltYWdlOjpDb21wb3NpdGVPcGVyYXRvciA9IEltYWdlOjpDb21wb3NpdGVTb3VyY2VP
dmVyKTsKICAgICAgICAgdm9pZCBkcmF3SW1hZ2VJblJlY3QoSW1hZ2UqLCBjb25zdCBJbnRSZWN0
JiwgSW1hZ2U6OkNvbXBvc2l0ZU9wZXJhdG9yID0gSW1hZ2U6OkNvbXBvc2l0ZVNvdXJjZU92ZXIp
OwogCi0gICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgaW50IHgsIGludCB5LCAKKyAgICAg
ICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYsIAogICAgICAgICAgICAg
aW50IHN4ID0gMCwgaW50IHN5ID0gMCwgaW50IHN3ID0gLTEsIGludCBzaCA9IC0xLAogICAgICAg
ICAgICAgSW1hZ2U6OkNvbXBvc2l0ZU9wZXJhdG9yID0gSW1hZ2U6OkNvbXBvc2l0ZVNvdXJjZU92
ZXIsIAogICAgICAgICAgICAgdm9pZCogbmF0aXZlRGF0YSA9IDApOwotICAgICAgICB2b2lkIGRy
YXdJbWFnZShJbWFnZSosIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAorICAgICAgICB2b2lk
IGRyYXdJbWFnZShJbWFnZSosIGNvbnN0IEludFJlY3QmLAogICAgICAgICAgICAgaW50IHN4ID0g
MCwgaW50IHN5ID0gMCwgaW50IHN3ID0gLTEsIGludCBzaCA9IC0xLAogICAgICAgICAgICAgSW1h
Z2U6OkNvbXBvc2l0ZU9wZXJhdG9yID0gSW1hZ2U6OkNvbXBvc2l0ZVNvdXJjZU92ZXIsIAogICAg
ICAgICAgICAgdm9pZCogbmF0aXZlRGF0YSA9IDApOwotICAgICAgICB2b2lkIGRyYXdGbG9hdElt
YWdlKEltYWdlKiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdywgZmxvYXQgaCwKKyAgICAgICAg
dm9pZCBkcmF3RmxvYXRJbWFnZShJbWFnZSosIGNvbnN0IEZsb2F0UmVjdCYsCiAgICAgICAgICAg
ICBmbG9hdCBzeCA9IDAsIGZsb2F0IHN5ID0gMCwgZmxvYXQgc3cgPSAtMSwgZmxvYXQgc2ggPSAt
MSwKICAgICAgICAgICAgIEltYWdlOjpDb21wb3NpdGVPcGVyYXRvciA9IEltYWdlOjpDb21wb3Np
dGVTb3VyY2VPdmVyLCAKICAgICAgICAgICAgIHZvaWQqIG5hdGl2ZURhdGEgPSAwKTsKLSAgICAg
ICAgdm9pZCBkcmF3VGlsZWRJbWFnZShJbWFnZSosIGludCwgaW50LCBpbnQsIGludCwgaW50IHN4
ID0gMCwgaW50IHN5ID0gMCwgdm9pZCogbmF0aXZlRGF0YSA9IDApOwotICAgICAgICB2b2lkIGRy
YXdTY2FsZWRBbmRUaWxlZEltYWdlKEltYWdlKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCwgaW50LCBpbnQsIAorICAgICAgICB2b2lkIGRyYXdUaWxlZEltYWdlKEltYWdlKiwgY29uc3Qg
SW50UmVjdCYgZGVzdCwgaW50IHN4ID0gMCwgaW50IHN5ID0gMCwgdm9pZCogbmF0aXZlRGF0YSA9
IDApOworICAgICAgICB2b2lkIGRyYXdTY2FsZWRBbmRUaWxlZEltYWdlKEltYWdlKiwgY29uc3Qg
SW50UmVjdCYsIGludCwgaW50LCBpbnQsIGludCwgCiAgICAgICAgICAgICBJbWFnZTo6VGlsZVJ1
bGUgaFJ1bGUgPSBJbWFnZTo6U3RyZXRjaFRpbGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSA9IElt
YWdlOjpTdHJldGNoVGlsZSwKICAgICAgICAgICAgIHZvaWQqIG5hdGl2ZURhdGEgPSAwKTsKIApA
QCAtMTM2LDEzICsxMzYsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgbWlz
c3BlbGxpbmdMaW5lVGhpY2tuZXNzKCkgY29uc3Q7CiAKICAgICAgICAgQ29sb3Igc2VsZWN0ZWRU
ZXh0QmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0VXNlc0luYWN0aXZl
VGV4dEJhY2tncm91bmRDb2xvcihib29sIHUpIHsgbV91c2VzSW5hY3RpdmVUZXh0QmFja2dyb3Vu
ZENvbG9yID0gdTsgfQorICAgICAgICB2b2lkIHNldFVzZXNJbmFjdGl2ZVRleHRCYWNrZ3JvdW5k
Q29sb3IoYm9vbCk7CisgICAgICAgIGJvb2wgdXNlc0luYWN0aXZlVGV4dEJhY2tncm91bmRDb2xv
cigpIGNvbnN0OwogICAgICAgICAKICAgICAgICAgYm9vbCBwYWludGluZ0Rpc2FibGVkKCkgY29u
c3Q7CiAgICAgICAgIHZvaWQgc2V0UGFpbnRpbmdEaXNhYmxlZChib29sKTsKICAgICAgICAgCi0g
ICAgICAgIGJvb2wgdXBkYXRpbmdDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVybiBtX3VwZGF0
aW5nQ29udHJvbFRpbnRzOyB9Ci0gICAgICAgIHZvaWQgc2V0VXBkYXRpbmdDb250cm9sVGludHMo
Ym9vbCBiKSB7IHNldFBhaW50aW5nRGlzYWJsZWQoYik7IG1fdXBkYXRpbmdDb250cm9sVGludHMg
PSBiOyB9CisgICAgICAgIGJvb2wgdXBkYXRpbmdDb250cm9sVGludHMoKSBjb25zdDsKKyAgICAg
ICAgdm9pZCBzZXRVcGRhdGluZ0NvbnRyb2xUaW50cyhib29sKTsKIAogICAgICAgICB2b2lkIGJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7CiAgICAgICAgIHZvaWQgZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKQEAgLTE3NCwxOSArMTc1LDI0IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgc3RhdGljIEtSZW5kZXJpbmdEZXZpY2UqIHJlbmRlcmluZ0RldmljZSgpOwog
I2VuZGlmCiAKLSAgICAgICAgYm9vbCBwcmludGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNGb3JQ
cmludGluZzsgfQorICAgICAgICBib29sIHByaW50aW5nKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAg
ICAgICAgIHZvaWQgc2V0Q29sb3JGcm9tQnJ1c2goKTsKICAgICAgICAgdm9pZCBzZXRDb2xvckZy
b21QZW4oKTsKLQotICAgICAgICBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBtX2RhdGE7Ci0gICAg
ICAgIFZlY3RvcjxJbnRSZWN0PiBtX2ZvY3VzUmluZ1JlY3RzOwotICAgICAgICBpbnQgbV9mb2N1
c1JpbmdXaWR0aDsKLSAgICAgICAgaW50IG1fZm9jdXNSaW5nT2Zmc2V0OwotICAgICAgICBib29s
IG1faXNGb3JQcmludGluZzsKLSAgICAgICAgYm9vbCBtX3VzZXNJbmFjdGl2ZVRleHRCYWNrZ3Jv
dW5kQ29sb3I7Ci0gICAgICAgIGJvb2wgbV91cGRhdGluZ0NvbnRyb2xUaW50czsKKyAgICAgICAg
CisgICAgICAgIHZvaWQgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKKyAgICAgICAgdm9pZCByZXN0b3Jl
UGxhdGZvcm1TdGF0ZSgpOworICAgICAgICAKKyAgICAgICAgaW50IGZvY3VzUmluZ1dpZHRoKCkg
Y29uc3Q7CisgICAgICAgIGludCBmb2N1c1JpbmdPZmZzZXQoKSBjb25zdDsKKyAgICAgICAgY29u
c3QgVmVjdG9yPEludFJlY3Q+JiBmb2N1c1JpbmdSZWN0cygpIGNvbnN0OworICAgICAgICAKKyAg
ICAgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dFByaXZhdGUqIGNyZWF0ZUdyYXBoaWNzQ29udGV4
dFByaXZhdGUoKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveUdyYXBoaWNzQ29udGV4dFBy
aXZhdGUoR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSopOworICAgICAgICAKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZSogbV9jb21tb247CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZSogbV9kYXRhOwogICAgIH07CiAKIH0KSW5kZXg6IHBsYXRmb3JtL21hYy9HcmFw
aGljc0NvbnRleHRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbWFjL0dyYXBoaWNzQ29u
dGV4dE1hYy5tbQkocmV2aXNpb24gMTMzOTMpCisrKyBwbGF0Zm9ybS9tYWMvR3JhcGhpY3NDb250
ZXh0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OCwyMCArNDgsMTEgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogLy8gY2FsbHMgaW4gdGhpcyBmaWxlIGFyZSBhbGwgZXhjZXB0aW9uLXNhZmUsIHNv
IHdlIGRvbid0IGJsb2NrCiAvLyBleGNlcHRpb25zIGZvciB0aG9zZS4KIAotc3RydWN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlIHsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSgpIDogcGFpbnRpbmdE
aXNhYmxlZChmYWxzZSkgeyB9Ci0gICAgRm9udCBmb250OwotICAgIFBlbiBwZW47Ci0gICAgQnJ1
c2ggYnJ1c2g7Ci0gICAgYm9vbCBwYWludGluZ0Rpc2FibGVkOwotfTsKLQotc3RydWN0IEdyYXBo
aWNzQ29udGV4dFByaXZhdGUgewotICAgIEdyYXBoaWNzQ29udGV4dFByaXZhdGUoKTsKLSAgICB+
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgc3Rh
dGU7ICAgIAotICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHRTdGF0ZT4gc3RhY2s7CitzdHJ1Y3Qg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlIHsKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUoKTsKKyAgICB+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCk7Cisg
ICAgCiAgICAgaWQgPFdlYkNvcmVUZXh0UmVuZGVyZXI+IHRleHRSZW5kZXJlcjsKICAgICBGb250
IHRleHRSZW5kZXJlckZvbnQ7CiAjaWYgU1ZHX1NVUFBPUlQKQEAgLTcwLDE5MiArNjEsMTEyIEBA
IHN0cnVjdCBHcmFwaGljc0NvbnRleHRQcml2YXRlIHsKIH07CiAKIC8vIEEgZmlsbFJlY3QgaGVs
cGVyIHRvIHdvcmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgTlNSZWN0RmlsbCB1c2VzIGNvcHkgbW9k
ZSwgbm90IHNvdXJjZSBvdmVyLgotc3RhdGljIGlubGluZSB2b2lkIGZpbGxSZWN0U291cmNlT3Zl
cihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3LCBmbG9hdCBoLCBjb25zdCBDb2xvciYgY29sKQor
c3RhdGljIGlubGluZSB2b2lkIGZpbGxSZWN0U291cmNlT3Zlcihjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2wpCiB7CiAgICAgW25zQ29sb3IoY29sKSBzZXRdOwotICAgIE5T
UmVjdEZpbGxVc2luZ09wZXJhdGlvbihOU01ha2VSZWN0KHgsIHksIHcsIGgpLCBOU0NvbXBvc2l0
ZVNvdXJjZU92ZXIpOworICAgIE5TUmVjdEZpbGxVc2luZ09wZXJhdGlvbihyZWN0LCBOU0NvbXBv
c2l0ZVNvdXJjZU92ZXIpOwogfQogCi0KLUdyYXBoaWNzQ29udGV4dFByaXZhdGU6OkdyYXBoaWNz
Q29udGV4dFByaXZhdGUoKQorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKQogICAgIDogdGV4dFJlbmRlcmVyKDApIAogewogfQog
Ci1HcmFwaGljc0NvbnRleHRQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpCitHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUoKQogewogICAgIEtXUVJlbGVhc2UodGV4dFJlbmRlcmVyKTsKIH0KIAogR3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHQoKQotICAgIDogbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQ
cml2YXRlKQotICAgICwgbV9mb2N1c1JpbmdXaWR0aCgwKQotICAgICwgbV9mb2N1c1JpbmdPZmZz
ZXQoMCkKLSAgICAsIG1faXNGb3JQcmludGluZyhmYWxzZSkKLSAgICAsIG1fdXNlc0luYWN0aXZl
VGV4dEJhY2tncm91bmRDb2xvcihmYWxzZSkKLSAgICAsIG1fdXBkYXRpbmdDb250cm9sVGludHMo
ZmFsc2UpCisgICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCisg
ICAgLCBtX2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSkKIHsKIH0KIAog
R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoYm9vbCBmb3JQcmludGluZykKLSAgICA6
IG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSkKLSAgICAsIG1fZm9jdXNSaW5nV2lk
dGgoMCkKLSAgICAsIG1fZm9jdXNSaW5nT2Zmc2V0KDApCi0gICAgLCBtX2lzRm9yUHJpbnRpbmco
Zm9yUHJpbnRpbmcpCi0gICAgLCBtX3VzZXNJbmFjdGl2ZVRleHRCYWNrZ3JvdW5kQ29sb3IoZmFs
c2UpCi0gICAgLCBtX3VwZGF0aW5nQ29udHJvbFRpbnRzKGZhbHNlKQorICAgIDogbV9jb21tb24o
Y3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQorICAgICwgbV9kYXRhKG5ldyBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCiB7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDo6fkdyYXBo
aWNzQ29udGV4dCgpCiB7CisgICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9jb21t
b24pOwogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKLWNvbnN0IEZvbnQmIEdyYXBoaWNzQ29udGV4
dDo6Zm9udCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS0+c3RhdGUuZm9udDsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZvbnQoY29uc3QgRm9udCYgYUZvbnQpCi17Ci0gICAg
bV9kYXRhLT5zdGF0ZS5mb250ID0gYUZvbnQ7Ci19Ci0KLWNvbnN0IFBlbiYgR3JhcGhpY3NDb250
ZXh0OjpwZW4oKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEtPnN0YXRlLnBlbjsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBlbihjb25zdCBQZW4mIHBlbikKLXsKLSAgICBtX2Rh
dGEtPnN0YXRlLnBlbiA9IHBlbjsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBlbihQ
ZW46OlBlblN0eWxlIHN0eWxlKQotewotICAgIG1fZGF0YS0+c3RhdGUucGVuLnNldFN0eWxlKHN0
eWxlKTsKLSAgICBtX2RhdGEtPnN0YXRlLnBlbi5zZXRDb2xvcihDb2xvcjo6YmxhY2spOwotICAg
IG1fZGF0YS0+c3RhdGUucGVuLnNldFdpZHRoKDApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0UGVuKFJHQkEzMiByZ2IpCi17Ci0gICAgbV9kYXRhLT5zdGF0ZS5wZW4uc2V0U3R5bGUo
UGVuOjpTb2xpZExpbmUpOwotICAgIG1fZGF0YS0+c3RhdGUucGVuLnNldENvbG9yKHJnYik7Ci0g
ICAgbV9kYXRhLT5zdGF0ZS5wZW4uc2V0V2lkdGgoMCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRCcnVzaChjb25zdCBCcnVzaCYgYnJ1c2gpCi17Ci0gICAgbV9kYXRhLT5zdGF0ZS5i
cnVzaCA9IGJydXNoOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QnJ1c2goQnJ1c2g6
OkJydXNoU3R5bGUgc3R5bGUpCi17Ci0gICAgbV9kYXRhLT5zdGF0ZS5icnVzaC5zZXRTdHlsZShz
dHlsZSk7Ci0gICAgbV9kYXRhLT5zdGF0ZS5icnVzaC5zZXRDb2xvcihDb2xvcjo6YmxhY2spOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QnJ1c2goUkdCQTMyIHJnYikKLXsKLSAgICBt
X2RhdGEtPnN0YXRlLmJydXNoLnNldFN0eWxlKEJydXNoOjpTb2xpZFBhdHRlcm4pOwotICAgIG1f
ZGF0YS0+c3RhdGUuYnJ1c2guc2V0Q29sb3IocmdiKTsKLX0KLQotY29uc3QgQnJ1c2gmIEdyYXBo
aWNzQ29udGV4dDo6YnJ1c2goKSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0
Zm9ybVN0YXRlKCkKIHsKLSAgICByZXR1cm4gbV9kYXRhLT5zdGF0ZS5icnVzaDsKKyAgICBbTlNH
cmFwaGljc0NvbnRleHQgc2F2ZUdyYXBoaWNzU3RhdGVdOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2F2ZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUo
KQogewotICAgIGlmIChtX2RhdGEtPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fZGF0YS0+c3RhY2suYXBwZW5kKG1fZGF0YS0+c3RhdGUpOwotCi0gICAg
W05TR3JhcGhpY3NDb250ZXh0IHNhdmVHcmFwaGljc1N0YXRlXTsgCi19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpyZXN0b3JlKCkKLXsKLSAgICBpZiAobV9kYXRhLT5zdGF0ZS5wYWludGluZ0Rp
c2FibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9kYXRhLT5zdGFjay5pc0VtcHR5
KCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFUlJPUiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVz
dG9yZSgpIHN0YWNrIGlzIGVtcHR5Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9k
YXRhLT5zdGF0ZSA9IG1fZGF0YS0+c3RhY2subGFzdCgpOwotICAgIG1fZGF0YS0+c3RhY2sucmVt
b3ZlTGFzdCgpOwotICAgICAKICAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNz
U3RhdGVdOwogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQg
Ym9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGludCB4LCBpbnQgeSwgaW50
IHcsIGludCBoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7Ci0gICAgaWYgKG1fZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZCkKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgICAgICAKLSAgICBp
ZiAobV9kYXRhLT5zdGF0ZS5icnVzaC5zdHlsZSgpICE9IEJydXNoOjpOb0JydXNoKQotICAgICAg
ICBmaWxsUmVjdFNvdXJjZU92ZXIoeCwgeSwgdywgaCwgbV9kYXRhLT5zdGF0ZS5icnVzaC5jb2xv
cigpKTsKKyAgICBpZiAoYnJ1c2goKS5zdHlsZSgpICE9IEJydXNoOjpOb0JydXNoKQorICAgICAg
ICBmaWxsUmVjdFNvdXJjZU92ZXIocmVjdCwgYnJ1c2goKS5jb2xvcigpKTsKIAotICAgIGlmICht
X2RhdGEtPnN0YXRlLnBlbi5zdHlsZSgpICE9IFBlbjo6UGVuOjpOb1BlbikgeworICAgIGlmIChw
ZW4oKS5zdHlsZSgpICE9IFBlbjo6UGVuOjpOb1BlbikgewogICAgICAgICBzZXRDb2xvckZyb21Q
ZW4oKTsKLSAgICAgICAgTlNGcmFtZVJlY3QoTlNNYWtlUmVjdCh4LCB5LCB3LCBoKSk7CisgICAg
ICAgIE5TRnJhbWVSZWN0KHJlY3QpOwogICAgIH0KIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldENvbG9yRnJvbUJydXNoKCkKIHsKLSAgICBbbnNDb2xvcihtX2RhdGEtPnN0YXRlLmJydXNo
LmNvbG9yKCkpIHNldF07CisgICAgW25zQ29sb3IoYnJ1c2goKS5jb2xvcigpKSBzZXRdOwogfQog
ICAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDb2xvckZyb21QZW4oKQogewotICAgIFtuc0Nv
bG9yKG1fZGF0YS0+c3RhdGUucGVuLmNvbG9yKCkpIHNldF07CisgICAgW25zQ29sb3IocGVuKCku
Y29sb3IoKSkgc2V0XTsKIH0KICAgCiAgIC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9y
ZGVycy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShpbnQgeDEsIGludCB5MSwgaW50
IHgyLCBpbnQgeTIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50UG9p
bnQmIHBvaW50MSwgY29uc3QgSW50UG9pbnQmIHBvaW50MikKIHsKLSAgICBpZiAobV9kYXRhLT5z
dGF0ZS5wYWludGluZ0Rpc2FibGVkKQorICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFBlbjo6UGVuU3R5bGUgcGVuU3R5bGUgPSBtX2RhdGEtPnN0YXRl
LnBlbi5zdHlsZSgpOworICAgIFBlbjo6UGVuU3R5bGUgcGVuU3R5bGUgPSBwZW4oKS5zdHlsZSgp
OwogICAgIGlmIChwZW5TdHlsZSA9PSBQZW46OlBlbjo6Tm9QZW4pCiAgICAgICAgIHJldHVybjsK
LSAgICBmbG9hdCB3aWR0aCA9IG1fZGF0YS0+c3RhdGUucGVuLndpZHRoKCk7CisgICAgZmxvYXQg
d2lkdGggPSBwZW4oKS53aWR0aCgpOwogICAgIGlmICh3aWR0aCA8IDEpCiAgICAgICAgIHdpZHRo
ID0gMTsKIAotICAgIE5TUG9pbnQgcDEgPSBOU01ha2VQb2ludCh4MSwgeTEpOwotICAgIE5TUG9p
bnQgcDIgPSBOU01ha2VQb2ludCh4MiwgeTIpOworICAgIE5TUG9pbnQgcDEgPSBwb2ludDE7Cisg
ICAgTlNQb2ludCBwMiA9IHBvaW50MjsKKyAgICBib29sIGlzVmVydGljYWxMaW5lID0gKHAxLngg
PT0gcDIueCk7CiAgICAgCiAgICAgLy8gRm9yIG9kZCB3aWR0aHMsIHdlIGFkZCBpbiAwLjUgdG8g
dGhlIGFwcHJvcHJpYXRlIHgveSBzbyB0aGF0IHRoZSBmbG9hdCBhcml0aG1ldGljCiAgICAgLy8g
d29ya3Mgb3V0LiAgRm9yIGV4YW1wbGUsIHdpdGggYSBib3JkZXIgd2lkdGggb2YgMywgS0hUTUwg
d2lsbCBwYXNzIHVzICh5MSt5MikvMiwgZS5nLiwKICAgICAvLyAoNTArNTMpLzIgPSAxMDMvMiA9
IDUxIHdoZW4gd2Ugd2FudCA1MS41LiAgSXQgaXMgYWx3YXlzIHRydWUgdGhhdCBhbiBldmVuIHdp
ZHRoIGdhdmUKICAgICAvLyB1cyBhIHBlcmZlY3QgcG9zaXRpb24sIGJ1dCBhbiBvZGQgd2lkdGgg
Z2F2ZSB1cyBhIHBvc2l0aW9uIHRoYXQgaXMgb2ZmIGJ5IGV4YWN0bHkgMC41LgogICAgIGlmIChw
ZW5TdHlsZSA9PSBQZW46OkRvdExpbmUgfHwgcGVuU3R5bGUgPT0gUGVuOjpEYXNoTGluZSkgewot
ICAgICAgICBpZiAoeDEgPT0geDIpIHsKKyAgICAgICAgaWYgKGlzVmVydGljYWxMaW5lKSB7CiAg
ICAgICAgICAgICBwMS55ICs9IHdpZHRoOwogICAgICAgICAgICAgcDIueSAtPSB3aWR0aDsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHAx
LnggKz0gd2lkdGg7CiAgICAgICAgICAgICBwMi54IC09IHdpZHRoOwogICAgICAgICB9CiAgICAg
fQogICAgIAogICAgIGlmICgoKGludCl3aWR0aCklMikgewotICAgICAgICBpZiAoeDEgPT0geDIp
IHsKKyAgICAgICAgaWYgKGlzVmVydGljYWxMaW5lKSB7CiAgICAgICAgICAgICAvLyBXZSdyZSBh
IHZlcnRpY2FsIGxpbmUuICBBZGp1c3Qgb3VyIHguCiAgICAgICAgICAgICBwMS54ICs9IDAuNTsK
ICAgICAgICAgICAgIHAyLnggKz0gMC41OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgeworICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2UncmUgYSBob3Jpem9udGFsIGxpbmUuIEFk
anVzdCBvdXIgeS4KICAgICAgICAgICAgIHAxLnkgKz0gMC41OwogICAgICAgICAgICAgcDIueSAr
PSAwLjU7CkBAIC0yODcsMTggKzE5OCwxOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmUoaW50IHgxLCBpCiAgICAgaWYgKHBhdFdpZHRoKSB7CiAgICAgICAgIC8vIERvIGEgcmVjdCBm
aWxsIG9mIG91ciBlbmRwb2ludHMuICBUaGlzIGVuc3VyZXMgd2UgYWx3YXlzIGhhdmUgdGhlCiAg
ICAgICAgIC8vIGFwcGVhcmFuY2Ugb2YgYmVpbmcgYSBib3JkZXIuICBXZSB0aGVuIGRyYXcgdGhl
IGFjdHVhbCBkb3R0ZWQvZGFzaGVkIGxpbmUuCi0gICAgICAgIGlmICh4MSA9PSB4MikgewotICAg
ICAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKHAxLngtd2lkdGgvMiwgcDEueS13aWR0aCwgd2lk
dGgsIHdpZHRoLCBtX2RhdGEtPnN0YXRlLnBlbi5jb2xvcigpKTsKLSAgICAgICAgICAgIGZpbGxS
ZWN0U291cmNlT3ZlcihwMi54LXdpZHRoLzIsIHAyLnksIHdpZHRoLCB3aWR0aCwgbV9kYXRhLT5z
dGF0ZS5wZW4uY29sb3IoKSk7CisgICAgICAgIGNvbnN0IENvbG9yJiBwZW5Db2xvciA9IHBlbigp
LmNvbG9yKCk7CisgICAgICAgIGlmIChpc1ZlcnRpY2FsTGluZSkgeworICAgICAgICAgICAgZmls
bFJlY3RTb3VyY2VPdmVyKEZsb2F0UmVjdChwMS54LXdpZHRoLzIsIHAxLnktd2lkdGgsIHdpZHRo
LCB3aWR0aCksIHBlbkNvbG9yKTsKKyAgICAgICAgICAgIGZpbGxSZWN0U291cmNlT3ZlcihGbG9h
dFJlY3QocDIueC13aWR0aC8yLCBwMi55LCB3aWR0aCwgd2lkdGgpLCBwZW5Db2xvcik7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmaWxsUmVjdFNvdXJjZU92ZXIocDEueC13aWR0aCwg
cDEueS13aWR0aC8yLCB3aWR0aCwgd2lkdGgsIG1fZGF0YS0+c3RhdGUucGVuLmNvbG9yKCkpOwot
ICAgICAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKHAyLngsIHAyLnktd2lkdGgvMiwgd2lkdGgs
IHdpZHRoLCBtX2RhdGEtPnN0YXRlLnBlbi5jb2xvcigpKTsKKyAgICAgICAgICAgIGZpbGxSZWN0
U291cmNlT3ZlcihGbG9hdFJlY3QocDEueC13aWR0aCwgcDEueS13aWR0aC8yLCB3aWR0aCwgd2lk
dGgpLCBwZW5Db2xvcik7CisgICAgICAgICAgICBmaWxsUmVjdFNvdXJjZU92ZXIoRmxvYXRSZWN0
KHAyLngsIHAyLnktd2lkdGgvMiwgd2lkdGgsIHdpZHRoKSwgcGVuQ29sb3IpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICAvLyBFeGFtcGxlOiA4MCBwaXhlbHMgd2l0aCBhIHdpZHRoIG9m
IDMwIHBpeGVscy4KICAgICAgICAgLy8gUmVtYWluZGVyIGlzIDIwLiAgVGhlIG1heGltdW0gcGl4
ZWxzIG9mIGxpbmUgd2UgY291bGQgcGFpbnQKICAgICAgICAgLy8gd2lsbCBiZSA1MCBwaXhlbHMu
Ci0gICAgICAgIGludCBkaXN0YW5jZSA9ICgoeDEgPT0geDIpID8gKHkyIC0geTEpIDogKHgyIC0g
eDEpKSAtIDIqKGludCl3aWR0aDsKKyAgICAgICAgaW50IGRpc3RhbmNlID0gKGlzVmVydGljYWxM
aW5lID8gKGludCkocDIueSAtIHAxLnkpIDogKGludCkocDIueCAtIHAxLngpKSAtIDIqKGludCl3
aWR0aDsKICAgICAgICAgaW50IHJlbWFpbmRlciA9IGRpc3RhbmNlJXBhdFdpZHRoOwogICAgICAg
ICBpbnQgY292ZXJhZ2UgPSBkaXN0YW5jZS1yZW1haW5kZXI7CiAgICAgICAgIGludCBudW1TZWdt
ZW50cyA9IGNvdmVyYWdlL3BhdFdpZHRoOwpAQCAtMzQxLDM5ICsyNTMsMzggQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lKGludCB4MSwgaQogCiAKIC8vIFRoaXMgbWV0aG9kIGlzIG9u
bHkgdXNlZCB0byBkcmF3IHRoZSBsaXR0bGUgY2lyY2xlcyB1c2VkIGluIGxpc3RzLgotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
CiAgICAgLy8gRklYTUU6IENHIGFkZGVkIENHQ29udGV4dEFkZEVsbGlwc2VpblJlY3QgaW4gVGln
ZXIsIHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIHF1aXRlIGVhc2lseSBkcmF3IGFuIGVsbGlwc2Uu
CiAgICAgLy8gVGhpcyBjb2RlIGNhbiBvbmx5IGhhbmRsZSBjaXJjbGVzLCBub3QgZWxsaXBzZXMu
IEJ1dCBraHRtbCBvbmx5CiAgICAgLy8gdXNlcyBpdCBmb3IgY2lyY2xlcy4KLSAgICBBU1NFUlQo
dyA9PSBoKTsKKyAgICBBU1NFUlQocmVjdC53aWR0aCgpID09IHJlY3QuaGVpZ2h0KCkpOwogCi0g
ICAgaWYgKG1fZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZCkKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gKENHQ29udGV4dFJlZilbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XSBncmFwaGljc1BvcnRdOwogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKLSAgICBm
bG9hdCByID0gKGZsb2F0KXcgLyAyOwotICAgIENHQ29udGV4dEFkZEFyYyhjb250ZXh0LCB4ICsg
ciwgeSArIHIsIHIsIDAsIDIqTV9QSSwgdHJ1ZSk7CisgICAgZmxvYXQgciA9IChmbG9hdClyZWN0
LndpZHRoKCkgLyAyOworICAgIENHQ29udGV4dEFkZEFyYyhjb250ZXh0LCByZWN0LngoKSArIHIs
IHJlY3QueSgpICsgciwgciwgMCwgMipNX1BJLCB0cnVlKTsKICAgICBDR0NvbnRleHRDbG9zZVBh
dGgoY29udGV4dCk7CiAKLSAgICBpZiAobV9kYXRhLT5zdGF0ZS5icnVzaC5zdHlsZSgpICE9IEJy
dXNoOjpOb0JydXNoKSB7CisgICAgaWYgKGJydXNoKCkuc3R5bGUoKSAhPSBCcnVzaDo6Tm9CcnVz
aCkgewogICAgICAgICBzZXRDb2xvckZyb21CcnVzaCgpOwotICAgICAgICBpZiAobV9kYXRhLT5z
dGF0ZS5wZW4uc3R5bGUoKSAhPSBQZW46Ok5vUGVuKSB7CisgICAgICAgIGlmIChwZW4oKS5zdHls
ZSgpICE9IFBlbjo6Tm9QZW4pIHsKICAgICAgICAgICAgIC8vIHN0cm9rZSBhbmQgZmlsbAogICAg
ICAgICAgICAgc2V0Q29sb3JGcm9tUGVuKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBwZW5XaWR0
aCA9IG1fZGF0YS0+c3RhdGUucGVuLndpZHRoKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBwZW5X
aWR0aCA9IHBlbigpLndpZHRoKCk7CiAgICAgICAgICAgICBpZiAocGVuV2lkdGggPT0gMCkgCiAg
ICAgICAgICAgICAgICAgcGVuV2lkdGgrKzsKICAgICAgICAgICAgIENHQ29udGV4dFNldExpbmVX
aWR0aChjb250ZXh0LCBwZW5XaWR0aCk7CiAgICAgICAgICAgICBDR0NvbnRleHREcmF3UGF0aChj
b250ZXh0LCBrQ0dQYXRoRmlsbFN0cm9rZSk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgQ0dDb250ZXh0RmlsbFBhdGgoY29udGV4dCk7Ci0gICAgICAgIH0K
ICAgICB9Ci0gICAgaWYgKG1fZGF0YS0+c3RhdGUucGVuLnN0eWxlKCkgIT0gUGVuOjpOb1Blbikg
eworICAgIGlmIChwZW4oKS5zdHlsZSgpICE9IFBlbjo6Tm9QZW4pIHsKICAgICAgICAgc2V0Q29s
b3JGcm9tUGVuKCk7Ci0gICAgICAgIHVuc2lnbmVkIHBlbldpZHRoID0gbV9kYXRhLT5zdGF0ZS5w
ZW4ud2lkdGgoKTsKKyAgICAgICAgdW5zaWduZWQgcGVuV2lkdGggPSBwZW4oKS53aWR0aCgpOwog
ICAgICAgICBpZiAocGVuV2lkdGggPT0gMCkgCiAgICAgICAgICAgICBwZW5XaWR0aCsrOwogICAg
ICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgcGVuV2lkdGgpOwpAQCAtMzgyLDE1
ICsyOTMsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGludCB4LAogfQog
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QXJjIChpbnQgeCwgaW50IHksIGludCB3LCBp
bnQgaCwgaW50IGEsIGludCBhbGVuKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdBcmMoaW50
IHgsIGludCB5LCBpbnQgdywgaW50IGgsIGludCBhLCBpbnQgYWxlbikKIHsgCiAgICAgLy8gT25s
eSBzdXBwb3J0cyBhcmMgb24gY2lyY2xlcy4gIFRoYXQncyBhbGwga2h0bWwgbmVlZHMuCiAgICAg
QVNTRVJUKHcgPT0gaCk7CiAKLSAgICBpZiAobV9kYXRhLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVk
KQorICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBpZiAobV9kYXRhLT5zdGF0ZS5wZW4uc3R5bGUoKSAhPSBQZW46Ok5vUGVuKSB7CisgICAgaWYg
KHBlbigpLnN0eWxlKCkgIT0gUGVuOjpOb1BlbikgewogICAgICAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IChDR0NvbnRleHRSZWYpW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0g
Z3JhcGhpY3NQb3J0XTsKICAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwogICAg
ICAgICAKQEAgLTQwMCwxNCArMzExLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QXJj
IChpbnQgeCwgaW4KICAgICAgICAgQ0dDb250ZXh0QWRkQXJjKGNvbnRleHQsIHggKyByLCB5ICsg
ciwgciwgLWZhICogTV9QSS8xODAsIC1mYWxlbiAqIE1fUEkvMTgwLCB0cnVlKTsKICAgICAgICAg
CiAgICAgICAgIHNldENvbG9yRnJvbVBlbigpOwotICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lk
dGgoY29udGV4dCwgbV9kYXRhLT5zdGF0ZS5wZW4ud2lkdGgoKSk7CisgICAgICAgIENHQ29udGV4
dFNldExpbmVXaWR0aChjb250ZXh0LCBwZW4oKS53aWR0aCgpKTsKICAgICAgICAgQ0dDb250ZXh0
U3Ryb2tlUGF0aChjb250ZXh0KTsKICAgICB9CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3Q29udmV4UG9seWdvbihjb25zdCBJbnRQb2ludEFycmF5JiBwb2ludHMpCiB7Ci0gICAgaWYg
KG1fZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZCkKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpbnQgbnBvaW50cyA9IHBvaW50cy5zaXplKCk7
CkBAIC00MjYsMTQgKzMzNywxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBv
bHlnb24oCiAgICAgICAgIENHQ29udGV4dEFkZExpbmVUb1BvaW50KGNvbnRleHQsIHBvaW50c1tp
XS54KCksIHBvaW50c1tpXS55KCkpOwogICAgIENHQ29udGV4dENsb3NlUGF0aChjb250ZXh0KTsK
IAotICAgIGlmIChtX2RhdGEtPnN0YXRlLmJydXNoLnN0eWxlKCkgIT0gQnJ1c2g6Ok5vQnJ1c2gp
IHsKKyAgICBpZiAoYnJ1c2goKS5zdHlsZSgpICE9IEJydXNoOjpOb0JydXNoKSB7CiAgICAgICAg
IHNldENvbG9yRnJvbUJydXNoKCk7CiAgICAgICAgIENHQ29udGV4dEVPRmlsbFBhdGgoY29udGV4
dCk7CiAgICAgfQogCi0gICAgaWYgKG1fZGF0YS0+c3RhdGUucGVuLnN0eWxlKCkgIT0gUGVuOjpO
b1BlbikgeworICAgIGlmIChwZW4oKS5zdHlsZSgpICE9IFBlbjo6Tm9QZW4pIHsKICAgICAgICAg
c2V0Q29sb3JGcm9tUGVuKCk7Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0aChjb250ZXh0
LCBtX2RhdGEtPnN0YXRlLnBlbi53aWR0aCgpKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdp
ZHRoKGNvbnRleHQsIHBlbigpLndpZHRoKCkpOwogICAgICAgICBDR0NvbnRleHRTdHJva2VQYXRo
KGNvbnRleHQpOwogICAgIH0KIApAQCAtNDU1LDE2ICszNjYsMTYgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdAogICAgIFtbV2ViQ29yZUltYWdlUmVuZGVyZXJGYWN0
b3J5IHNoYXJlZEZhY3RvcnldIHNldENHQ29tcG9zaXRlT3BlcmF0aW9uOm9wIGluQ29udGV4dDpj
b250ZXh0XTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGbG9hdEltYWdlKEltYWdl
KiBpbWFnZSwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdywgZmxvYXQgaCwgCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0Zsb2F0SW1hZ2UoSW1hZ2UqIGltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgc3gsIGZsb2F0IHN5
LCBmbG9hdCBzdywgZmxvYXQgc2gsIEltYWdlOjpDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVP
cGVyYXRvciwgdm9pZCogY29udGV4dCkKIHsKLSAgICBpZiAobV9kYXRhLT5zdGF0ZS5wYWludGlu
Z0Rpc2FibGVkKQorICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGZsb2F0IHRzdyA9IHN3OwogICAgIGZsb2F0IHRzaCA9IHNoOwotICAgIGZsb2F0IHR3
ID0gdzsKLSAgICBmbG9hdCB0aCA9IGg7CisgICAgZmxvYXQgdHcgPSBkZXN0LndpZHRoKCk7Cisg
ICAgZmxvYXQgdGggPSBkZXN0LmhlaWdodCgpOwogICAgICAgICAKICAgICBpZiAodHN3ID09IC0x
KQogICAgICAgICB0c3cgPSBpbWFnZS0+d2lkdGgoKTsKQEAgLTQ3NiwyOCArMzg3LDI4IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmxvYXRJbWFnZShJbWEKICAgICBpZiAodGggPT0gLTEp
CiAgICAgICAgIHRoID0gaW1hZ2UtPmhlaWdodCgpOwogCi0gICAgaW1hZ2UtPmRyYXdJblJlY3Qo
RmxvYXRSZWN0KHgsIHksIHR3LCB0aCksIEZsb2F0UmVjdChzeCwgc3ksIHRzdywgdHNoKSwgY29t
cG9zaXRlT3BlcmF0b3IsIGNvbnRleHQpOworICAgIGltYWdlLT5kcmF3SW5SZWN0KEZsb2F0UmVj
dChkZXN0LmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0dywgdGgpKSwgRmxvYXRSZWN0KHN4LCBzeSwg
dHN3LCB0c2gpLCBjb21wb3NpdGVPcGVyYXRvciwgY29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSogaW1hZ2UsIGludCB4LCBpbnQgeSwgaW50
IHcsIGludCBoLCBpbnQgc3gsIGludCBzeSwgdm9pZCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIHJlY3Qs
IGludCBzeCwgaW50IHN5LCB2b2lkKiBjb250ZXh0KQogewotICAgIGlmIChtX2RhdGEtPnN0YXRl
LnBhaW50aW5nRGlzYWJsZWQpCisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIGltYWdlLT50aWxlSW5SZWN0KEZsb2F0UmVjdCh4LCB5LCB3LCBo
KSwgRmxvYXRQb2ludChzeCwgc3kpLCBjb250ZXh0KTsKKyAgICBpbWFnZS0+dGlsZUluUmVjdChy
ZWN0LCBGbG9hdFBvaW50KHN4LCBzeSksIGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1NjYWxlZEFuZFRpbGVkSW1hZ2UoSW1hZ2UqIGltYWdlLCBpbnQgeCwgaW50IHks
IGludCB3LCBpbnQgaCwgaW50IHN4LCBpbnQgc3ksIGludCBzdywgaW50IHNoLCAKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3U2NhbGVkQW5kVGlsZWRJbWFnZShJbWFnZSogaW1hZ2UsIGNvbnN0
IEludFJlY3QmIGRlc3QsIGludCBzeCwgaW50IHN5LCBpbnQgc3csIGludCBzaCwgCiAgICAgSW1h
Z2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIHZvaWQqIGNvbnRleHQp
CiB7Ci0gICAgaWYgKG1fZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZCkKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaFJ1bGUgPT0gSW1h
Z2U6OlN0cmV0Y2hUaWxlICYmIHZSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSkKICAgICAgICAg
Ly8gSnVzdCBkbyBhIHNjYWxlLgotICAgICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCB4LCB5
LCB3LCBoLCBzeCwgc3ksIHN3LCBzaCwgSW1hZ2U6OkNvbXBvc2l0ZVNvdXJjZU92ZXIsIGNvbnRl
eHQpOworICAgICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0LCBzeCwgc3ksIHN3LCBz
aCwgSW1hZ2U6OkNvbXBvc2l0ZVNvdXJjZU92ZXIsIGNvbnRleHQpOwogCi0gICAgaW1hZ2UtPnNj
YWxlQW5kVGlsZUluUmVjdChGbG9hdFJlY3QoeCwgeSwgdywgaCksIEZsb2F0UmVjdChzeCwgc3ks
IHN3LCBzaCksIGhSdWxlLCB2UnVsZSwgY29udGV4dCk7CisgICAgaW1hZ2UtPnNjYWxlQW5kVGls
ZUluUmVjdChkZXN0LCBGbG9hdFJlY3Qoc3gsIHN5LCBzdywgc2gpLCBoUnVsZSwgdlJ1bGUsIGNv
bnRleHQpOwogfQogCiBzdGF0aWMgaW50IGdldEJsZW5kZWRDb2xvckNvbXBvbmVudChpbnQgYywg
aW50IGEpCkBAIC01MTEsNyArNDIyLDcgQEAgc3RhdGljIGludCBnZXRCbGVuZGVkQ29sb3JDb21w
b25lbnQoaW50IAogCiBDb2xvciBHcmFwaGljc0NvbnRleHQ6OnNlbGVjdGVkVGV4dEJhY2tncm91
bmRDb2xvcigpIGNvbnN0CiB7Ci0gICAgTlNDb2xvciAqY29sb3IgPSBtX3VzZXNJbmFjdGl2ZVRl
eHRCYWNrZ3JvdW5kQ29sb3IgPyBbTlNDb2xvciBzZWNvbmRhcnlTZWxlY3RlZENvbnRyb2xDb2xv
cl0gOiBbTlNDb2xvciBzZWxlY3RlZFRleHRCYWNrZ3JvdW5kQ29sb3JdOworICAgIE5TQ29sb3Ig
KmNvbG9yID0gdXNlc0luYWN0aXZlVGV4dEJhY2tncm91bmRDb2xvcigpID8gW05TQ29sb3Igc2Vj
b25kYXJ5U2VsZWN0ZWRDb250cm9sQ29sb3JdIDogW05TQ29sb3Igc2VsZWN0ZWRUZXh0QmFja2dy
b3VuZENvbG9yXTsKICAgICAvLyB0aGlzIG5lZWRzIHRvIGFsd2F5cyB1c2UgZGV2aWNlIGNvbG9y
c3BhY2Ugc28gaXQgY2FuIGRlLWNhbGlicmF0ZSB0aGUgY29sb3IgZm9yCiAgICAgLy8gQ29sb3Ig
dG8gcG9zc2libHkgcmVjYWxpYnJhdGUgaXQKICAgICBjb2xvciA9IFtjb2xvciBjb2xvclVzaW5n
Q29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXTsKQEAgLTUyOSwyMyArNDQwLDE4
IEBAIENvbG9yIEdyYXBoaWNzQ29udGV4dDo6c2VsZWN0ZWRUZXh0QmFja2cKICAgICByZXR1cm4g
Y29sOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoaW50IHgsIGludCB5LCBp
bnQgdywgaW50IGgsIGNvbnN0IEJydXNoJiBicnVzaCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBCcnVzaCYgYnJ1c2gpCiB7Ci0gICAg
aWYgKG1fZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZCkKKyAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYnJ1c2guc3R5bGUoKSA9PSBCcnVz
aDo6U29saWRQYXR0ZXJuKQotICAgICAgICBmaWxsUmVjdFNvdXJjZU92ZXIoeCwgeSwgdywgaCwg
YnJ1c2guY29sb3IoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25z
dCBJbnRSZWN0JiByZWN0LCBjb25zdCBCcnVzaCYgYnJ1c2gpCi17Ci0gICAgZmlsbFJlY3QocmVj
dC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksIGJydXNoKTsKKyAg
ICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKHJlY3QsIGJydXNoLmNvbG9yKCkpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6YWRkQ2xpcChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlm
IChtX2RhdGEtPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQpCisgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgW05TQmV6aWVyUGF0aCBjbGlwUmVjdDpyZWN0
XTsKQEAgLTU1NCw3ICs0NjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkQ2xpcChjb25z
dCBJbnRSCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkUm91bmRlZFJlY3RDbGlwKGNvbnN0IElu
dFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJp
Z2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIGJv
dHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0KQogewotICAgIGlmIChtX2RhdGEt
PnN0YXRlLnBhaW50aW5nRGlzYWJsZWQpCisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gTmVlZCBzdWZmaWNpZW50IHdpZHRoIGFuZCBoZWlnaHQg
dG8gY29udGFpbiB0aGVzZSBjdXJ2ZXMuICBTYW5pdHkgY2hlY2sgb3VyIHRvcC9ib3R0b20KQEAg
LTYwNSwxNiArNTExLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZFJvdW5kZWRSZWN0Q2xp
cAogICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQYWludGluZ0Rpc2FibGVkKGJvb2wgZikKLXsKLSAgICBtX2RhdGEtPnN0YXRlLnBhaW50
aW5nRGlzYWJsZWQgPSBmOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRpbmdEaXNh
YmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNhYmxl
ZDsKLX0KLQogQ0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dDo6Y3VycmVudENHQ29udGV4dCgp
CiB7CiAgICAgcmV0dXJuIChDR0NvbnRleHRSZWYpW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50
Q29udGV4dF0gZ3JhcGhpY3NQb3J0XTsKQEAgLTYyOSw3ICs1MjUsNyBAQCBLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dCogR3JhcGhpY3NDb250ZXh0CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgaWYgKG1fZGF0YS0+c3Rh
dGUucGFpbnRpbmdEaXNhYmxlZCkKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBjdXJyZW50Q0dDb250ZXh0KCk7
CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKQEAgLTYzOSw3ICs1MzUsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgaWYgKG1fZGF0YS0+c3RhdGUu
cGFpbnRpbmdEaXNhYmxlZCkKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBjdXJyZW50Q0dDb250ZXh0KCk7CiAg
ICAgQ0dDb250ZXh0RW5kVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dCk7CkBAIC02NDgsNyArNTQ0
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KGludCB4LCBpbnQgeSwgaW50IGJsdXIsIGNvbnN0IENv
bG9yJiBjb2xvcikKIHsKLSAgICBpZiAobV9kYXRhLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkKQor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBDaGVj
ayBmb3IgYW4gaW52YWxpZCBjb2xvciwgYXMgdGhpcyBtZWFucyB0aGF0IHRoZSBjb2xvciB3YXMg
bm90IHNldCBmb3IgdGhlIHNoYWRvdwogICAgIC8vIGFuZCB3ZSBzaG91bGQgdGhlcmVmb3JlIGp1
c3QgdXNlIHRoZSBkZWZhdWx0IHNoYWRvdyBjb2xvci4KQEAgLTY2Nyw3ICs1NjMsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KGludCB4LCBpCiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGVhclNoYWRvdygpCiB7Ci0gICAgaWYgKG1fZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNh
YmxlZCkKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBjdXJyZW50Q0dDb250ZXh0KCk7CiAgICAgQ0dDb250ZXh0
U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIE5VTEwpOwpAQCAtNjc1
LDE3ICs1NzEsMTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgQ29sb3ImIGNvbG9yKQogewot
ICAgIGlmIChtX2RhdGEtPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQpCisgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGludCByYWRpdXMgPSAobV9mb2N1c1Jp
bmdXaWR0aCAtIDEpIC8gMjsKLSAgICBpbnQgb2Zmc2V0ID0gcmFkaXVzICsgbV9mb2N1c1JpbmdP
ZmZzZXQ7CisgICAgaW50IHJhZGl1cyA9IChmb2N1c1JpbmdXaWR0aCgpIC0gMSkgLyAyOworICAg
IGludCBvZmZzZXQgPSByYWRpdXMgKyBmb2N1c1JpbmdPZmZzZXQoKTsKICAgICBDR0NvbG9yUmVm
IGNvbG9yUmVmID0gY29sb3IuaXNWYWxpZCgpID8gY2dDb2xvcihjb2xvcikgOiAwOwogICAgIAog
ICAgIENHTXV0YWJsZVBhdGhSZWYgZm9jdXNSaW5nUGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUo
KTsKLSAgICB1bnNpZ25lZCByZWN0Q291bnQgPSBtX2ZvY3VzUmluZ1JlY3RzLnNpemUoKTsKKyAg
ICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzID0gZm9jdXNSaW5nUmVjdHMoKTsKKyAgICB1
bnNpZ25lZCByZWN0Q291bnQgPSByZWN0cy5zaXplKCk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlY3RDb3VudDsgaSsrKQotICAgICAgICBDR1BhdGhBZGRSZWN0KGZvY3Vz
UmluZ1BhdGgsIDAsIENHUmVjdEluc2V0KG1fZm9jdXNSaW5nUmVjdHNbaV0sIC1vZmZzZXQsIC1v
ZmZzZXQpKTsKKyAgICAgICAgQ0dQYXRoQWRkUmVjdChmb2N1c1JpbmdQYXRoLCAwLCBDR1JlY3RJ
bnNldChyZWN0c1tpXSwgLW9mZnNldCwgLW9mZnNldCkpOwogICAgIAogICAgIFtbV2ViQ29yZUdy
YXBoaWNzQnJpZGdlIHNoYXJlZEJyaWRnZV0gZHJhd0ZvY3VzUmluZ1dpdGhQYXRoOmZvY3VzUmlu
Z1BhdGggcmFkaXVzOnJhZGl1cyBjb2xvcjpjb2xvclJlZl07CiAgICAgQ0dDb2xvclJlbGVhc2Uo
Y29sb3JSZWYpOwpJbmRleDogcGxhdGZvcm0vR3JhcGhpY3NDb250ZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBwbGF0Zm9ybS9HcmFwaGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiAxMzM5MykKKysrIHBs
YXRmb3JtL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDMzICsyNiwx
OTYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
IAorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCiAjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgotI2luY2x1ZGUgIkZvbnQu
aCIKICNpbmNsdWRlICJXaWRnZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUgeworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlKCkgOiBwYWlu
dGluZ0Rpc2FibGVkKGZhbHNlKSB7IH0KKyAgICBGb250IGZvbnQ7CisgICAgUGVuIHBlbjsKKyAg
ICBCcnVzaCBicnVzaDsKKyAgICBib29sIHBhaW50aW5nRGlzYWJsZWQ7Cit9OworICAgICAgICAK
K3N0cnVjdCBHcmFwaGljc0NvbnRleHRQcml2YXRlIHsKKyAgICBHcmFwaGljc0NvbnRleHRQcml2
YXRlKCk7CisgICAgfkdyYXBoaWNzQ29udGV4dFByaXZhdGUoKTsKKyAgICAKKyAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZSBzdGF0ZTsKKyAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0U3RhdGU+IHN0
YWNrOworICAgIFZlY3RvcjxJbnRSZWN0PiBtX2ZvY3VzUmluZ1JlY3RzOworICAgIGludCBtX2Zv
Y3VzUmluZ1dpZHRoOworICAgIGludCBtX2ZvY3VzUmluZ09mZnNldDsKKyAgICBib29sIG1faXNG
b3JQcmludGluZzsKKyAgICBib29sIG1fdXNlc0luYWN0aXZlVGV4dEJhY2tncm91bmRDb2xvcjsK
KyAgICBib29sIG1fdXBkYXRpbmdDb250cm9sVGludHM7Cit9OworCitHcmFwaGljc0NvbnRleHRQ
cml2YXRlOjpHcmFwaGljc0NvbnRleHRQcml2YXRlKCkKKyAgICA6IG1fZm9jdXNSaW5nV2lkdGgo
MCkKKyAgICAsIG1fZm9jdXNSaW5nT2Zmc2V0KDApCisgICAgLCBtX2lzRm9yUHJpbnRpbmcoZmFs
c2UpCisgICAgLCBtX3VzZXNJbmFjdGl2ZVRleHRCYWNrZ3JvdW5kQ29sb3IoZmFsc2UpCisgICAg
LCBtX3VwZGF0aW5nQ29udHJvbFRpbnRzKGZhbHNlKQoreworfQorCitHcmFwaGljc0NvbnRleHRQ
cml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpCit7Cit9CisKK0dyYXBoaWNzQ29udGV4
dFByaXZhdGUqIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgp
Cit7CisgICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRleHRQcml2YXRlOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUoR3JhcGhpY3NDb250
ZXh0UHJpdmF0ZSogZGVsZXRlTWUpCit7CisgICAgZGVsZXRlIGRlbGV0ZU1lOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb21tb24tPnN0YWNrLmFwcGVuZChtX2NvbW1vbi0+
c3RhdGUpOworICAgIAorICAgIHNhdmVQbGF0Zm9ybVN0YXRlKCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpyZXN0b3JlKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobV9jb21tb24tPnN0YWNrLmlzRW1wdHkoKSkgeworICAg
ICAgICBMT0dfRVJST1IoIkVSUk9SIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkgc3Rh
Y2sgaXMgZW1wdHkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbW1vbi0+c3Rh
dGUgPSBtX2NvbW1vbi0+c3RhY2subGFzdCgpOworICAgIG1fY29tbW9uLT5zdGFjay5yZW1vdmVM
YXN0KCk7CisgICAgCisgICAgcmVzdG9yZVBsYXRmb3JtU3RhdGUoKTsKK30KKworY29uc3QgRm9u
dCYgR3JhcGhpY3NDb250ZXh0Ojpmb250KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb21tb24t
PnN0YXRlLmZvbnQ7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGb250KGNvbnN0IEZv
bnQmIGFGb250KQoreworICAgIG1fY29tbW9uLT5zdGF0ZS5mb250ID0gYUZvbnQ7Cit9CisKK2Nv
bnN0IFBlbiYgR3JhcGhpY3NDb250ZXh0OjpwZW4oKSBjb25zdAoreworICAgIHJldHVybiBtX2Nv
bW1vbi0+c3RhdGUucGVuOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGVuKGNvbnN0
IFBlbiYgcGVuKQoreworICAgIG1fY29tbW9uLT5zdGF0ZS5wZW4gPSBwZW47Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQZW4oUGVuOjpQZW5TdHlsZSBzdHlsZSkKK3sKKyAgICBtX2Nv
bW1vbi0+c3RhdGUucGVuLnNldFN0eWxlKHN0eWxlKTsKKyAgICBtX2NvbW1vbi0+c3RhdGUucGVu
LnNldENvbG9yKENvbG9yOjpibGFjayk7CisgICAgbV9jb21tb24tPnN0YXRlLnBlbi5zZXRXaWR0
aCgwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBlbihSR0JBMzIgcmdiKQorewor
ICAgIG1fY29tbW9uLT5zdGF0ZS5wZW4uc2V0U3R5bGUoUGVuOjpTb2xpZExpbmUpOworICAgIG1f
Y29tbW9uLT5zdGF0ZS5wZW4uc2V0Q29sb3IocmdiKTsKKyAgICBtX2NvbW1vbi0+c3RhdGUucGVu
LnNldFdpZHRoKDApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QnJ1c2goY29uc3Qg
QnJ1c2gmIGJydXNoKQoreworICAgIG1fY29tbW9uLT5zdGF0ZS5icnVzaCA9IGJydXNoOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QnJ1c2goQnJ1c2g6OkJydXNoU3R5bGUgc3R5bGUp
Cit7CisgICAgbV9jb21tb24tPnN0YXRlLmJydXNoLnNldFN0eWxlKHN0eWxlKTsKKyAgICBtX2Nv
bW1vbi0+c3RhdGUuYnJ1c2guc2V0Q29sb3IoQ29sb3I6OmJsYWNrKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldEJydXNoKFJHQkEzMiByZ2IpCit7CisgICAgbV9jb21tb24tPnN0YXRl
LmJydXNoLnNldFN0eWxlKEJydXNoOjpTb2xpZFBhdHRlcm4pOworICAgIG1fY29tbW9uLT5zdGF0
ZS5icnVzaC5zZXRDb2xvcihyZ2IpOworfQorCitjb25zdCBCcnVzaCYgR3JhcGhpY3NDb250ZXh0
OjpicnVzaCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5icnVzaDsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVzZXNJbmFjdGl2ZVRleHRCYWNrZ3JvdW5kQ29s
b3IoYm9vbCB1KQoreworICAgIG1fY29tbW9uLT5tX3VzZXNJbmFjdGl2ZVRleHRCYWNrZ3JvdW5k
Q29sb3IgPSB1OworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDo6dXNlc0luYWN0aXZlVGV4dEJh
Y2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29tbW9uLT5tX3VzZXNJbmFj
dGl2ZVRleHRCYWNrZ3JvdW5kQ29sb3I7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0Ojp1cGRh
dGluZ0NvbnRyb2xUaW50cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29tbW9uLT5tX3VwZGF0
aW5nQ29udHJvbFRpbnRzOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VXBkYXRpbmdD
b250cm9sVGludHMoYm9vbCBiKQoreworICAgIHNldFBhaW50aW5nRGlzYWJsZWQoYik7CisgICAg
bV9jb21tb24tPm1fdXBkYXRpbmdDb250cm9sVGludHMgPSBiOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0UGFpbnRpbmdEaXNhYmxlZChib29sIGYpCit7CisgICAgbV9jb21tb24tPnN0
YXRlLnBhaW50aW5nRGlzYWJsZWQgPSBmOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDo6cGFp
bnRpbmdEaXNhYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5wYWlu
dGluZ0Rpc2FibGVkOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDo6cHJpbnRpbmcoKSBjb25z
dAoreworICAgIHJldHVybiBtX2NvbW1vbi0+bV9pc0ZvclByaW50aW5nOworfQorCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQXRQb2ludChJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBv
aW50JiBwLCBJbWFnZTo6Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IpCiB7ICAg
ICAgICAKLSAgICBkcmF3SW1hZ2UoaW1hZ2UsIHAueCgpLCBwLnkoKSwgMCwgMCwgLTEsIC0xLCBj
b21wb3NpdGVPcGVyYXRvcik7CisgICAgZHJhd0ltYWdlKGltYWdlLCBwLCAwLCAwLCAtMSwgLTEs
IGNvbXBvc2l0ZU9wZXJhdG9yKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFn
ZUluUmVjdChJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIHIsIEltYWdlOjpDb21wb3NpdGVP
cGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcikKIHsKLSAgICBkcmF3SW1hZ2UoaW1hZ2UsIHIueCgp
LCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpLCAwLCAwLCAtMSwgLTEsIGNvbXBvc2l0ZU9w
ZXJhdG9yKTsKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIHIsIDAsIDAsIC0xLCAtMSwgY29tcG9zaXRl
T3BlcmF0b3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBp
bWFnZSwgaW50IHgsIGludCB5LAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFn
ZSogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBkZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBzeCwgaW50IHN5LCBpbnQgc3csIGludCBzaCwgSW1hZ2U6OkNvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdG9yLCB2b2lkKiBjb250ZXh0KQogewotICAgIGRyYXdJbWFnZShpbWFn
ZSwgeCwgeSwgc3csIHNoLCBzeCwgc3ksIHN3LCBzaCwgY29tcG9zaXRlT3BlcmF0b3IsIGNvbnRl
eHQpOworICAgIGRyYXdJbWFnZShpbWFnZSwgSW50UmVjdChkZXN0LCBJbnRTaXplKHN3LCBzaCkp
LCBzeCwgc3ksIHN3LCBzaCwgY29tcG9zaXRlT3BlcmF0b3IsIGNvbnRleHQpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgaW50IHgsIGludCB5LCBp
bnQgdywgaW50IGgsCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFn
ZSwgY29uc3QgSW50UmVjdCYgZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3gs
IGludCBzeSwgaW50IHN3LCBpbnQgc2gsIEltYWdlOjpDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcGVyYXRvciwgdm9pZCogY29udGV4dCkKIHsKLSAgICBkcmF3RmxvYXRJbWFnZShpbWFnZSwg
KGZsb2F0KXgsIChmbG9hdCl5LCAoZmxvYXQpdywgKGZsb2F0KWgsIChmbG9hdClzeCwgKGZsb2F0
KXN5LCAoZmxvYXQpc3csIChmbG9hdClzaCwgY29tcG9zaXRlT3BlcmF0b3IsIGNvbnRleHQpOwor
ICAgIGRyYXdGbG9hdEltYWdlKGltYWdlLCBkZXN0LCAoZmxvYXQpc3gsIChmbG9hdClzeSwgKGZs
b2F0KXN3LCAoZmxvYXQpc2gsIGNvbXBvc2l0ZU9wZXJhdG9yLCBjb250ZXh0KTsKIH0KIAogLy8g
RklYTUU6IFdlIHNob3VsZCBjb25zaWRlciByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGFuZCBoYXZp
bmcgY2FsbGVycyBqdXN0IGNhbGwgdGhlIGxvd2VyLWxldmVsIGRyYXdUZXh0IGRpcmVjdGx5LgpA
QCAtMTI0LDIwICsyODcsMzUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmluaXRGb2N1c1Jpbmco
aW50IAogICAgICAgICByZXR1cm47CiAgICAgY2xlYXJGb2N1c1JpbmcoKTsKICAgICAKLSAgICBt
X2ZvY3VzUmluZ1dpZHRoID0gd2lkdGg7Ci0gICAgbV9mb2N1c1JpbmdPZmZzZXQgPSBvZmZzZXQ7
CisgICAgbV9jb21tb24tPm1fZm9jdXNSaW5nV2lkdGggPSB3aWR0aDsKKyAgICBtX2NvbW1vbi0+
bV9mb2N1c1JpbmdPZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGVhckZvY3VzUmluZygpCiB7Ci0gICAgbV9mb2N1c1JpbmdSZWN0cy5jbGVhcigpOworICAgIG1f
Y29tbW9uLT5tX2ZvY3VzUmluZ1JlY3RzLmNsZWFyKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjphZGRGb2N1c1JpbmdSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fZm9jdXNSaW5nUmVjdHMu
YXBwZW5kKHJlY3QpOworICAgIG1fY29tbW9uLT5tX2ZvY3VzUmluZ1JlY3RzLmFwcGVuZChyZWN0
KTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDo6Zm9jdXNSaW5nV2lkdGgoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2NvbW1vbi0+bV9mb2N1c1JpbmdXaWR0aDsKK30KKworaW50IEdyYXBoaWNz
Q29udGV4dDo6Zm9jdXNSaW5nT2Zmc2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb21tb24t
Pm1fZm9jdXNSaW5nT2Zmc2V0OworfQorCitjb25zdCBWZWN0b3I8SW50UmVjdD4mIEdyYXBoaWNz
Q29udGV4dDo6Zm9jdXNSaW5nUmVjdHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbW1vbi0+
bV9mb2N1c1JpbmdSZWN0czsKIH0KIAogfQpJbmRleDogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDEz
MzkzKQorKysgcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgy
OCwxMSArODI4LDExIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3Qm9yZGVyKEdyYXBoaWNzQ28K
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgIGNhc2UgQlNCb3R0b206CiAgICAgICAgICAgICBj
YXNlIEJTVG9wOgotICAgICAgICAgICAgICAgIHAtPmRyYXdMaW5lKHgxLCAoeTEreTIpLzIsIHgy
LCAoeTEreTIpLzIpOworICAgICAgICAgICAgICAgIHAtPmRyYXdMaW5lKEludFBvaW50KHgxLCAo
eTEreTIpLzIpLCBJbnRQb2ludCh4MiwgKHkxK3kyKS8yKSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIEJTUmlnaHQ6CiAgICAgICAgICAgICBjYXNlIEJTTGVmdDoK
LSAgICAgICAgICAgICAgICBwLT5kcmF3TGluZSgoeDEreDIpLzIsIHkxLCAoeDEreDIpLzIsIHky
KTsKKyAgICAgICAgICAgICAgICBwLT5kcmF3TGluZShJbnRQb2ludCgoeDEreDIpLzIsIHkxKSwg
SW50UG9pbnQoKHgxK3gyKS8yLCB5MikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtODUwLDI5ICs4NTAsMzMgQEAgdm9pZCBSZW5k
ZXJPYmplY3Q6OmRyYXdCb3JkZXIoR3JhcGhpY3NDbwogICAgICAgICAgICAgewogICAgICAgICAg
ICAgY2FzZSBCU1RvcDoKICAgICAgICAgICAgIGNhc2UgQlNCb3R0b206Ci0gICAgICAgICAgICAg
ICAgcC0+ZHJhd1JlY3QoeDEsIHkxICAgICAgLCB4Mi14MSwgdGhpcmQpOwotICAgICAgICAgICAg
ICAgIHAtPmRyYXdSZWN0KHgxLCB5Mi10aGlyZCwgeDIteDEsIHRoaXJkKTsKKyAgICAgICAgICAg
ICAgICBwLT5kcmF3UmVjdChJbnRSZWN0KHgxLCB5MSAgICAgICwgeDIteDEsIHRoaXJkKSk7Cisg
ICAgICAgICAgICAgICAgcC0+ZHJhd1JlY3QoSW50UmVjdCh4MSwgeTItdGhpcmQsIHgyLXgxLCB0
aGlyZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCU0xlZnQ6
Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd1JlY3QoeDEgICAgICAsIHkxKzEsIHRoaXJkLCB5Mi15
MS0xKTsKLSAgICAgICAgICAgICAgICBwLT5kcmF3UmVjdCh4Mi10aGlyZCwgeTErMSwgdGhpcmQs
IHkyLXkxLTEpOworICAgICAgICAgICAgICAgIHAtPmRyYXdSZWN0KEludFJlY3QoeDEgICAgICAs
IHkxKzEsIHRoaXJkLCB5Mi15MS0xKSk7CisgICAgICAgICAgICAgICAgcC0+ZHJhd1JlY3QoSW50
UmVjdCh4Mi10aGlyZCwgeTErMSwgdGhpcmQsIHkyLXkxLTEpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgQlNSaWdodDoKLSAgICAgICAgICAgICAgICBwLT5kcmF3
UmVjdCh4MSAgICAgICwgeTErMSwgdGhpcmQsIHkyLXkxLTEpOwotICAgICAgICAgICAgICAgIHAt
PmRyYXdSZWN0KHgyLXRoaXJkLCB5MSsxLCB0aGlyZCwgeTIteTEtMSk7CisgICAgICAgICAgICAg
ICAgcC0+ZHJhd1JlY3QoSW50UmVjdCh4MSAgICAgICwgeTErMSwgdGhpcmQsIHkyLXkxLTEpKTsK
KyAgICAgICAgICAgICAgICBwLT5kcmF3UmVjdChJbnRSZWN0KHgyLXRoaXJkLCB5MSsxLCB0aGly
ZCwgeTIteTEtMSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgICAgaW50IGFkamJ3MWJp
Z3RoaXJkOwotICAgICAgICAgICAgaWYgKGFkamJ3MT4wKSBhZGpidzFiaWd0aGlyZCA9IGFkamJ3
MSsxOwotICAgICAgICAgICAgZWxzZSBhZGpidzFiaWd0aGlyZCA9IGFkamJ3MSAtIDE7CisgICAg
ICAgICAgICBpZiAoYWRqYncxPjApCisgICAgICAgICAgICAgICAgYWRqYncxYmlndGhpcmQgPSBh
ZGpidzErMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhZGpidzFiaWd0aGly
ZCA9IGFkamJ3MSAtIDE7CiAgICAgICAgICAgICBhZGpidzFiaWd0aGlyZCAvPSAzOwogCiAgICAg
ICAgICAgICBpbnQgYWRqYncyYmlndGhpcmQ7Ci0gICAgICAgICAgICBpZiAoYWRqYncyPjApIGFk
amJ3MmJpZ3RoaXJkID0gYWRqYncyICsgMTsKLSAgICAgICAgICAgIGVsc2UgYWRqYncyYmlndGhp
cmQgPSBhZGpidzIgLSAxOworICAgICAgICAgICAgaWYgKGFkamJ3Mj4wKQorICAgICAgICAgICAg
ICAgIGFkamJ3MmJpZ3RoaXJkID0gYWRqYncyICsgMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBhZGpidzJiaWd0aGlyZCA9IGFkamJ3MiAtIDE7CiAgICAgICAgICAgICBhZGpi
dzJiaWd0aGlyZCAvPSAzOwogCiAgICAgICAgICAgc3dpdGNoKHMpCkBAIC05NjEsMTEgKzk2NSwx
MCBAQCB2b2lkIFJlbmRlck9iamVjdDo6ZHJhd0JvcmRlcihHcmFwaGljc0NvCiAgICAgICAgIHAt
PnNldEJydXNoKGMpOwogICAgICAgICBBU1NFUlQoeDIgPj0geDEpOwogICAgICAgICBBU1NFUlQo
eTIgPj0geTEpOwotICAgICAgICBpZiAoYWRqYncxPT0wICYmIGFkamJ3MiA9PSAwKQotICAgICAg
ICAgIHsKLSAgICAgICAgICAgIHAtPmRyYXdSZWN0KHgxLHkxLHgyLXgxLHkyLXkxKTsKKyAgICAg
ICAgaWYgKGFkamJ3MT09MCAmJiBhZGpidzIgPT0gMCkgeworICAgICAgICAgICAgcC0+ZHJhd1Jl
Y3QoSW50UmVjdCh4MSx5MSx4Mi14MSx5Mi15MSkpOwogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBzd2l0Y2gocykgewogICAgICAgICBjYXNlIEJT
VG9wOgogICAgICAgICAgICAgcXVhZC5zZXRQb2ludHMoNCwKQEAgLTEwNDIsMTkgKzEwNDUsMTkg
QEAgYm9vbCBSZW5kZXJPYmplY3Q6OnBhaW50Qm9yZGVySW1hZ2UoR3JhcAogICAgICAgICAvLyBU
aGUgdG9wIGxlZnQgY29ybmVyIHJlY3QgaXMgKF90eCwgX3R5LCBsZWZ0V2lkdGgsIHRvcFdpZHRo
KQogICAgICAgICAvLyBUaGUgcmVjdCB0byB1c2UgZnJvbSB3aXRoaW4gdGhlIGltYWdlIGlzIG9i
dGFpbmVkIGZyb20gb3VyIHNsaWNlLCBhbmQgaXMgKDAsIDAsIGxlZnRTbGljZSwgdG9wU2xpY2Up
CiAgICAgICAgIGlmIChkcmF3VG9wKQotICAgICAgICAgICAgcC0+ZHJhd0ltYWdlKGJvcmRlcklt
YWdlLT5pbWFnZSgpLCBfdHgsIF90eSwgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCBzdHlsZS0+
Ym9yZGVyVG9wV2lkdGgoKSwKKyAgICAgICAgICAgIHAtPmRyYXdJbWFnZShib3JkZXJJbWFnZS0+
aW1hZ2UoKSwgSW50UmVjdChfdHgsIF90eSwgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCBzdHls
ZS0+Ym9yZGVyVG9wV2lkdGgoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgbGVm
dFNsaWNlLCB0b3BTbGljZSk7CiAgICAgICAgIAogICAgICAgICAvLyBUaGUgYm90dG9tIGxlZnQg
Y29ybmVyIHJlY3QgaXMgKF90eCwgX3R5ICsgaCAtIGJvdHRvbVdpZHRoLCBsZWZ0V2lkdGgsIGJv
dHRvbVdpZHRoKQogICAgICAgICAvLyBUaGUgcmVjdCB0byB1c2UgZnJvbSB3aXRoaW4gdGhlIGlt
YWdlIGlzICgwLCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCBsZWZ0U2xpY2UsIGJvdG9tU2xp
Y2UpCiAgICAgICAgIGlmIChkcmF3Qm90dG9tKQotICAgICAgICAgICAgcC0+ZHJhd0ltYWdlKGJv
cmRlckltYWdlLT5pbWFnZSgpLCBfdHgsIF90eSArIGggLSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lk
dGgoKSwgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgo
KSwKKyAgICAgICAgICAgIHAtPmRyYXdJbWFnZShib3JkZXJJbWFnZS0+aW1hZ2UoKSwgSW50UmVj
dChfdHgsIF90eSArIGggLSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwgc3R5bGUtPmJvcmRl
ckxlZnRXaWR0aCgpLCBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgaW1hZ2VIZWlnaHQgLSBib3R0b21TbGljZSwgbGVmdFNsaWNlLCBib3R0
b21TbGljZSk7CiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgIC8vIFBhaW50IHRoZSBs
ZWZ0IGVkZ2UuCiAgICAgICAgIC8vIEhhdmUgdG8gc2NhbGUgYW5kIHRpbGUgaW50byB0aGUgYm9y
ZGVyIHJlY3QuCi0gICAgICAgIHAtPmRyYXdTY2FsZWRBbmRUaWxlZEltYWdlKGJvcmRlckltYWdl
LT5pbWFnZSgpLCBfdHgsIF90eSArIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBzdHlsZS0+Ym9y
ZGVyTGVmdFdpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoIC0g
c3R5bGUtPmJvcmRlclRvcFdpZHRoKCkgLSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwKKyAg
ICAgICAgcC0+ZHJhd1NjYWxlZEFuZFRpbGVkSW1hZ2UoYm9yZGVySW1hZ2UtPmltYWdlKCksIElu
dFJlY3QoX3R4LCBfdHkgKyBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwgc3R5bGUtPmJvcmRlckxl
ZnRXaWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCAtIHN0eWxl
LT5ib3JkZXJUb3BXaWR0aCgpIC0gc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgdG9wU2xpY2UsIGxlZnRTbGljZSwgaW1h
Z2VIZWlnaHQgLSB0b3BTbGljZSAtIGJvdHRvbVNsaWNlLCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEltYWdlOjpTdHJldGNoVGlsZSwgKEltYWdlOjpUaWxlUnVsZSl2UnVs
ZSk7CiAgICAgfQpAQCAtMTA2NCw0MSArMTA2NywzOSBAQCBib29sIFJlbmRlck9iamVjdDo6cGFp
bnRCb3JkZXJJbWFnZShHcmFwCiAgICAgICAgIC8vIFRoZSB0b3AgcmlnaHQgY29ybmVyIHJlY3Qg
aXMgKF90eCArIHcgLSByaWdodFdpZHRoLCBfdHksIHJpZ2h0V2lkdGgsIHRvcFdpZHRoKQogICAg
ICAgICAvLyBUaGUgcmVjdCB0byB1c2UgZnJvbSB3aXRoaW4gdGhlIGltYWdlIGlzIG9idGFpbmVk
IGZyb20gb3VyIHNsaWNlLCBhbmQgaXMgKGltYWdlV2lkdGggLSByaWdodFNsaWNlLCAwLCByaWdo
dFNsaWNlLCB0b3BTbGljZSkKICAgICAgICAgaWYgKGRyYXdUb3ApCi0gICAgICAgICAgICBwLT5k
cmF3SW1hZ2UoYm9yZGVySW1hZ2UtPmltYWdlKCksIF90eCArIHcgLSBzdHlsZS0+Ym9yZGVyUmln
aHRXaWR0aCgpLCBfdHksIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIHN0eWxlLT5ib3JkZXJU
b3BXaWR0aCgpLAorICAgICAgICAgICAgcC0+ZHJhd0ltYWdlKGJvcmRlckltYWdlLT5pbWFnZSgp
LCBJbnRSZWN0KF90eCArIHcgLSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCBfdHksIHN0eWxl
LT5ib3JkZXJSaWdodFdpZHRoKCksIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSwgMCwgcmlnaHRTbGljZSwg
dG9wU2xpY2UpOwogICAgICAgICAKICAgICAgICAgLy8gVGhlIGJvdHRvbSByaWdodCBjb3JuZXIg
cmVjdCBpcyAoX3R4ICsgdyAtIHJpZ2h0V2lkdGgsIF90eSArIGggLSBib3R0b21XaWR0aCwgcmln
aHRXaWR0aCwgYm90dG9tV2lkdGgpCiAgICAgICAgIC8vIFRoZSByZWN0IHRvIHVzZSBmcm9tIHdp
dGhpbiB0aGUgaW1hZ2UgaXMgKGltYWdlV2lkdGggLSByaWdodFNsaWNlLCBpbWFnZUhlaWdodCAt
IGJvdHRvbVNsaWNlLCByaWdodFNsaWNlLCBib3RvbVNsaWNlKQogICAgICAgICBpZiAoZHJhd0Jv
dHRvbSkKLSAgICAgICAgICAgIHAtPmRyYXdJbWFnZShib3JkZXJJbWFnZS0+aW1hZ2UoKSwgX3R4
ICsgdyAtIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIF90eSArIGggLSBzdHlsZS0+Ym9yZGVy
Qm90dG9tV2lkdGgoKSwgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwgc3R5bGUtPmJvcmRlckJv
dHRvbVdpZHRoKCksCisgICAgICAgICAgICBwLT5kcmF3SW1hZ2UoYm9yZGVySW1hZ2UtPmltYWdl
KCksIEludFJlY3QoX3R4ICsgdyAtIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIF90eSArIGgg
LSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwg
c3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlt
YWdlV2lkdGggLSByaWdodFNsaWNlLCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCByaWdodFNs
aWNlLCBib3R0b21TbGljZSk7CiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgIC8vIFBh
aW50IHRoZSByaWdodCBlZGdlLgotICAgICAgICBwLT5kcmF3U2NhbGVkQW5kVGlsZWRJbWFnZShi
b3JkZXJJbWFnZS0+aW1hZ2UoKSwgX3R4ICsgdyAtIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCks
IF90eSArIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICBoIC0gc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkg
LSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwKKyAgICAgICAgcC0+ZHJhd1NjYWxlZEFuZFRp
bGVkSW1hZ2UoYm9yZGVySW1hZ2UtPmltYWdlKCksIEludFJlY3QoX3R4ICsgdyAtIHN0eWxlLT5i
b3JkZXJSaWdodFdpZHRoKCksIF90eSArIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBzdHlsZS0+
Ym9yZGVyUmlnaHRXaWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoIC0gc3R5bGUt
PmJvcmRlclRvcFdpZHRoKCkgLSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGltYWdlV2lkdGggLSByaWdodFNsaWNlLCB0b3BTbGljZSwgcmln
aHRTbGljZSwgaW1hZ2VIZWlnaHQgLSB0b3BTbGljZSAtIGJvdHRvbVNsaWNlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbWFnZTo6U3RyZXRjaFRpbGUsIChJbWFnZTo6VGlsZVJ1bGUpdlJ1
bGUpOwogICAgIH0KIAogICAgIC8vIFBhaW50IHRoZSB0b3AgZWRnZS4KICAgICBpZiAoZHJhd1Rv
cCkKLSAgICAgICAgcC0+ZHJhd1NjYWxlZEFuZFRpbGVkSW1hZ2UoYm9yZGVySW1hZ2UtPmltYWdl
KCksIF90eCArIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgX3R5LCB3IC0gc3R5bGUtPmJvcmRl
ckxlZnRXaWR0aCgpIC0gc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCksCisgICAgICAgIHAtPmRyYXdTY2Fs
ZWRBbmRUaWxlZEltYWdlKGJvcmRlckltYWdlLT5pbWFnZSgpLCBJbnRSZWN0KF90eCArIHN0eWxl
LT5ib3JkZXJMZWZ0V2lkdGgoKSwgX3R5LCB3IC0gc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpIC0g
c3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U2xpY2UsIDAsIGltYWdlV2lkdGggLSByaWdodFNs
aWNlIC0gbGVmdFNsaWNlLCB0b3BTbGljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKElt
YWdlOjpUaWxlUnVsZSloUnVsZSwgSW1hZ2U6OlN0cmV0Y2hUaWxlKTsKICAgICAKICAgICAvLyBQ
YWludCB0aGUgYm90dG9tIGVkZ2UuCiAgICAgaWYgKGRyYXdCb3R0b20pCi0gICAgICAgIHAtPmRy
YXdTY2FsZWRBbmRUaWxlZEltYWdlKGJvcmRlckltYWdlLT5pbWFnZSgpLCBfdHggKyBzdHlsZS0+
Ym9yZGVyTGVmdFdpZHRoKCksIF90eSArIGggLSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHcgLSBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkg
LSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwKKyAgICAgICAgcC0+ZHJhd1NjYWxlZEFuZFRpbGVk
SW1hZ2UoYm9yZGVySW1hZ2UtPmltYWdlKCksIEludFJlY3QoX3R4ICsgc3R5bGUtPmJvcmRlckxl
ZnRXaWR0aCgpLCBfdHkgKyBoIC0gc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICB3IC0gc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpIC0gc3R5bGUt
PmJvcmRlclJpZ2h0V2lkdGgoKSwgc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBsZWZ0U2xpY2UsIGltYWdlSGVpZ2h0IC0gYm90dG9tU2xpY2Us
IGltYWdlV2lkdGggLSByaWdodFNsaWNlIC0gbGVmdFNsaWNlLCBib3R0b21TbGljZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKEltYWdlOjpUaWxlUnVsZSloUnVsZSwgSW1hZ2U6OlN0cmV0
Y2hUaWxlKTsKICAgICAKICAgICAvLyBQYWludCB0aGUgbWlkZGxlLgogICAgIGlmIChkcmF3TWlk
ZGxlKQotICAgICAgICBwLT5kcmF3U2NhbGVkQW5kVGlsZWRJbWFnZShib3JkZXJJbWFnZS0+aW1h
Z2UoKSwgX3R4ICsgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCBfdHkgKyBzdHlsZS0+Ym9yZGVy
VG9wV2lkdGgoKSwgdyAtIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSAtIHN0eWxlLT5ib3JkZXJS
aWdodFdpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGggLSBzdHlsZS0+Ym9yZGVy
VG9wV2lkdGgoKSAtIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpLAorICAgICAgICBwLT5kcmF3
U2NhbGVkQW5kVGlsZWRJbWFnZShib3JkZXJJbWFnZS0+aW1hZ2UoKSwgSW50UmVjdChfdHggKyBz
dHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIF90eSArIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCB3
IC0gc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpIC0gc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgaCAtIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpIC0g
c3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBs
ZWZ0U2xpY2UsIHRvcFNsaWNlLCBpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSAtIGxlZnRTbGljZSwg
aW1hZ2VIZWlnaHQgLSB0b3BTbGljZSAtIGJvdHRvbVNsaWNlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAoSW1hZ2U6OlRpbGVSdWxlKWhSdWxlLCAoSW1hZ2U6OlRpbGVSdWxlKXZSdWxlKTsK
IApJbmRleDogcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRl
cmluZy9yZW5kZXJfZnJhbWVzLmNwcAkocmV2aXNpb24gMTMzOTMpCisrKyByZW5kZXJpbmcvcmVu
ZGVyX2ZyYW1lcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNSwxNyArNTE1LDE3IEBAIGJvb2wg
UmVuZGVyRnJhbWVTZXQ6OnVzZXJSZXNpemUoIE1vdXNlRXYKICAgICAgICAgICAgICAgICBwYWlu
dC5zZXRQZW4oUGVuOjpOb1Blbik7CiAgICAgICAgICAgICAgICAgcGFpbnQuc2V0QnJ1c2goQ29s
b3I6OmdyYXkpOwogICAgICAgICAgICAgICAgIHYtPnNldERyYXdpbmdBbHBoYSgwLjI1KTsKLSAg
ICAgICAgICAgICAgICBwYWludC5kcmF3UmVjdChwICsgc3cvMiAtIHJCb3JkLCByLnkoKSwgMipy
Qm9yZCwgci5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgcGFpbnQuZHJhd1JlY3QoSW50UmVj
dChwICsgc3cvMiAtIHJCb3JkLCByLnkoKSwgMiAqIHJCb3JkLCByLmhlaWdodCgpKSk7CiAgICAg
ICAgICAgICAgICAgdi0+c2V0RHJhd2luZ0FscGhhKDEuMCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobV9vbGRwb3MgPj0gMCkKLSAgICAgICAgICAg
ICAgICB2LT51cGRhdGVDb250ZW50cyhJbnRSZWN0KHIueCgpLCBtX29sZHBvcyArIHN3LzIgLSBy
Qm9yZCwgci53aWR0aCgpLCAyKnJCb3JkKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgdi0+dXBk
YXRlQ29udGVudHMoSW50UmVjdChyLngoKSwgbV9vbGRwb3MgKyBzdy8yIC0gckJvcmQsIHIud2lk
dGgoKSwgMiAqIHJCb3JkKSwgdHJ1ZSk7CiAgICAgICAgICAgICBpZiAocCA+PSAwKSB7CiAgICAg
ICAgICAgICAgICAgcGFpbnQuc2V0UGVuKFBlbjo6Tm9QZW4pOwogICAgICAgICAgICAgICAgIHBh
aW50LnNldEJydXNoKENvbG9yOjpncmF5KTsKICAgICAgICAgICAgICAgICB2LT5zZXREcmF3aW5n
QWxwaGEoMC4yNSk7Ci0gICAgICAgICAgICAgICAgcGFpbnQuZHJhd1JlY3Qoci54KCksIHAgKyBz
dy8yIC0gckJvcmQsIHIud2lkdGgoKSwgMiAqIHJCb3JkKTsKKyAgICAgICAgICAgICAgICBwYWlu
dC5kcmF3UmVjdChJbnRSZWN0KHIueCgpLCBwICsgc3cvMiAtIHJCb3JkLCByLndpZHRoKCksIDIg
KiByQm9yZCkpOwogICAgICAgICAgICAgICAgIHYtPnNldERyYXdpbmdBbHBoYSgxLjApOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHJlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAJKHJldmlzaW9uIDEzMzkzKQor
KysgcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDE1ICs0
MzAsMTUgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgIHN3
aXRjaChzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCkpIHsKICAgICBjYXNlIERJU0M6CiAgICAgICAg
IHAtPnNldEJydXNoKGNvbG9yKTsKLSAgICAgICAgcC0+ZHJhd0VsbGlwc2UobWFya2VyLngoKSwg
bWFya2VyLnkoKSwgbWFya2VyLndpZHRoKCksIG1hcmtlci5oZWlnaHQoKSk7CisgICAgICAgIHAt
PmRyYXdFbGxpcHNlKG1hcmtlcik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENJUkNMRToK
ICAgICAgICAgcC0+c2V0QnJ1c2goV2ViQ29yZTo6QnJ1c2g6Ok5vQnJ1c2gpOwotICAgICAgICBw
LT5kcmF3RWxsaXBzZShtYXJrZXIueCgpLCBtYXJrZXIueSgpLCBtYXJrZXIud2lkdGgoKSwgbWFy
a2VyLmhlaWdodCgpKTsKKyAgICAgICAgcC0+ZHJhd0VsbGlwc2UobWFya2VyKTsKICAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgU1FVQVJFOgogICAgICAgICBwLT5zZXRCcnVzaChjb2xvcik7Ci0g
ICAgICAgIHAtPmRyYXdSZWN0KG1hcmtlci54KCksIG1hcmtlci55KCksIG1hcmtlci53aWR0aCgp
LCBtYXJrZXIuaGVpZ2h0KCkpOworICAgICAgICBwLT5kcmF3UmVjdChtYXJrZXIpOwogICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBMTk9ORToKICAgICAgICAgcmV0dXJuOwpJbmRleDogcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwCShyZXZpc2lvbiAxMzM5MykKKysrIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4OSw5ICsxODksOCBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludChQYWlu
dEluZm8mIGksIGluCiAgICAgYm9vbCBpc1ByaW50aW5nID0gaS5wLT5wcmludGluZygpOwogICAg
IGJvb2wgZHJhd1NlbGVjdGlvblRpbnQgPSBpc1NlbGVjdGVkKCkgJiYgIWlzUHJpbnRpbmc7CiAg
ICAgaWYgKGkucGhhc2UgPT0gUGFpbnRBY3Rpb25TZWxlY3Rpb24pIHsKLSAgICAgICAgaWYgKHNl
bGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uTm9uZSkgeworICAgICAgICBpZiAoc2VsZWN0aW9u
U3RhdGUoKSA9PSBTZWxlY3Rpb25Ob25lKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
CiAgICAgICAgIGRyYXdTZWxlY3Rpb25UaW50ID0gZmFsc2U7CiAgICAgfQogICAgICAgICAKQEAg
LTIxMyw3ICsyMTIsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludChQYWludEluZm8mIGksIGlu
CiAgICAgICAgICAgICBpZiAoIWVycm9yT2NjdXJyZWQoKSkgewogICAgICAgICAgICAgICAgIHAt
PnNldFBlbiAoQ29sb3I6OmxpZ2h0R3JheSk7CiAgICAgICAgICAgICAgICAgcC0+c2V0QnJ1c2gg
KFdlYkNvcmU6OkJydXNoOjpOb0JydXNoKTsKLSAgICAgICAgICAgICAgICBwLT5kcmF3UmVjdCAo
X3R4ICsgbGVmdEJvcmRlciArIGxlZnRQYWQsIF90eSArIHRvcEJvcmRlciArIHRvcFBhZCwgY1dp
ZHRoLCBjSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBwLT5kcmF3UmVjdCAoSW50UmVjdChfdHgg
KyBsZWZ0Qm9yZGVyICsgbGVmdFBhZCwgX3R5ICsgdG9wQm9yZGVyICsgdG9wUGFkLCBjV2lkdGgs
IGNIZWlnaHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgYm9v
bCBlcnJvclBpY3R1cmVEcmF3biA9IGZhbHNlOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDEzMzkz
KQorKysgcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMSwxMCAr
NDMxLDExIEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEJhY2tncm91bmRFeHRlbmRlZCgKIAogICAg
IC8vIFBhaW50IHRoZSBjb2xvciBmaXJzdCB1bmRlcm5lYXRoIGFsbCBpbWFnZXMuCiAgICAgaWYg
KCFiZ0xheWVyLT5uZXh0KCkgJiYgYmdDb2xvci5pc1ZhbGlkKCkgJiYgYmdDb2xvci5hbHBoYSgp
ID4gMCkgeworICAgICAgICBJbnRSZWN0IHJlY3QoX3R4LCBjbGlweSwgdywgY2xpcGgpOwogICAg
ICAgICAvLyBJZiB3ZSBoYXZlIGFuIGFscGhhIGFuZCB3ZSBhcmUgcGFpbnRpbmcgdGhlIHJvb3Qg
ZWxlbWVudCwgZ28gYWhlYWQgYW5kIGJsZW5kIHdpdGggd2hpdGUuCiAgICAgICAgIGlmIChiZ0Nv
bG9yLmFscGhhKCkgPCAweEZGICYmIGlzUm9vdCgpICYmICFjYW52YXMoKS0+dmlldygpLT5pc1Ry
YW5zcGFyZW50KCkpCi0gICAgICAgICAgICBwLT5maWxsUmVjdChfdHgsIGNsaXB5LCB3LCBjbGlw
aCwgQ29sb3IoQ29sb3I6OndoaXRlKSk7Ci0gICAgICAgIHAtPmZpbGxSZWN0KF90eCwgY2xpcHks
IHcsIGNsaXBoLCBiZ0NvbG9yKTsKKyAgICAgICAgICAgIHAtPmZpbGxSZWN0KHJlY3QsIENvbG9y
KENvbG9yOjp3aGl0ZSkpOworICAgICAgICBwLT5maWxsUmVjdChyZWN0LCBiZ0NvbG9yKTsKICAg
ICB9CiAgICAgCiAgICAgLy8gbm8gcHJvZ3Jlc3NpdmUgbG9hZGluZyBvZiB0aGUgYmFja2dyb3Vu
ZCBpbWFnZQpAQCAtNTY3LDcgKzU2OCw3IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEJhY2tncm91
bmRFeHRlbmRlZCgKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjdz4wICYmIGNoPjApCi0gICAg
ICAgICAgICBwLT5kcmF3VGlsZWRJbWFnZShiZy0+aW1hZ2UoKSwgY3gsIGN5LCBjdywgY2gsIHN4
LCBzeSk7CisgICAgICAgICAgICBwLT5kcmF3VGlsZWRJbWFnZShiZy0+aW1hZ2UoKSwgSW50UmVj
dChjeCwgY3ksIGN3LCBjaCksIHN4LCBzeSk7CiAgICAgfQogICAgIAogICAgIGlmIChiZ0xheWVy
LT5iYWNrZ3JvdW5kQ2xpcCgpICE9IEJHQk9SREVSKQpAQCAtNTc3LDExICs1NzgsMTEgQEAgdm9p
ZCBSZW5kZXJCb3g6OnBhaW50QmFja2dyb3VuZEV4dGVuZGVkKAogICAgICAgICBwLT5yZXN0b3Jl
KCk7IC8vIFVuZG8gdGhlIGJvcmRlciByYWRpdXMgY2xpcAogfQogCi12b2lkIFJlbmRlckJveDo6
b3V0bGluZUJveChHcmFwaGljc0NvbnRleHQqIHAsIGludCBfdHgsIGludCBfdHksIGNvbnN0IGNo
YXIgKmNvbG9yKQordm9pZCBSZW5kZXJCb3g6Om91dGxpbmVCb3goR3JhcGhpY3NDb250ZXh0KiBw
LCBpbnQgX3R4LCBpbnQgX3R5LCBjb25zdCBjaGFyKiBjb2xvcikKIHsKICAgICBwLT5zZXRQZW4o
UGVuKENvbG9yKGNvbG9yKSwgMSwgUGVuOjpEb3RMaW5lKSk7CiAgICAgcC0+c2V0QnJ1c2goV2Vi
Q29yZTo6QnJ1c2g6Ok5vQnJ1c2gpOwotICAgIHAtPmRyYXdSZWN0KF90eCwgX3R5LCBtX3dpZHRo
LCBtX2hlaWdodCk7CisgICAgcC0+ZHJhd1JlY3QoSW50UmVjdChfdHgsIF90eSwgbV93aWR0aCwg
bV9oZWlnaHQpKTsKIH0KIAogSW50UmVjdCBSZW5kZXJCb3g6OmdldE92ZXJmbG93Q2xpcFJlY3Qo
aW50IHR4LCBpbnQgdHkpCkluZGV4OiBrY2FudmFzL1JlbmRlclNWR0ltYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrY2FudmFzL1JlbmRlclNWR0ltYWdlLmNwcAkocmV2aXNpb24gMTMzOTMpCisrKyBr
Y2FudmFzL1JlbmRlclNWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDggKzE3MCw3
IEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OnBhaW50KFBhaW50SW5mbyYgcGEKICAgICAgICAgRmxv
YXRSZWN0IGRlc3RSZWN0KG1feCwgbV95LCBjb250ZW50V2lkdGgoKSwgY29udGVudEhlaWdodCgp
KTsKICAgICAgICAgRmxvYXRSZWN0IHNyY1JlY3QoMCwgMCwgaW1hZ2UoKS0+d2lkdGgoKSwgaW1h
Z2UoKS0+aGVpZ2h0KCkpOwogICAgICAgICBhZGp1c3RSZWN0c0ZvckFzcGVjdFJhdGlvKGRlc3RS
ZWN0LCBzcmNSZWN0LCBpbWFnZUVsdC0+cHJlc2VydmVBc3BlY3RSYXRpbygpLT5iYXNlVmFsKCkp
OwotICAgICAgICBwYWludEluZm8ucC0+ZHJhd0Zsb2F0SW1hZ2UoaW1hZ2UoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpLCBk
ZXN0UmVjdC53aWR0aCgpLCBkZXN0UmVjdC5oZWlnaHQoKSwgCisgICAgICAgIHBhaW50SW5mby5w
LT5kcmF3RmxvYXRJbWFnZShpbWFnZSgpLCBkZXN0UmVjdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNyY1JlY3QueCgpLCBzcmNSZWN0LnkoKSwgc3JjUmVjdC53aWR0aCgp
LCBzcmNSZWN0LmhlaWdodCgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEltYWdlOjpDb21wb3NpdGVTb3VyY2VPdmVyKTsKICAgICB9CkluZGV4OiBDaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzM5MykKKysrIENoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAwNi0wMy0xNyAgRXJpYyBTZWlkZWwgIDxl
c2VpZGVsQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBNb3ZlIEZvcm0gY29kZSBmcm9tIE1hY0ZyYW1lIHRvIEZyYW1lLgorICAgICAg
ICBNb3ZlIEdyYXBoaWNzQ29udGV4dCBjb2RlIGZyb20gR3JhcGhpY3NDb250ZXh0TWFjIHRvIEdy
YXBoaWNzQ29udGV4dC4KKyAgICAgICAgVXNlIEludFJlY3QsIEZsb2F0UmVjdCBpbiBtb3JlIHBs
YWNlcyB0aHJvdWdob3V0IHRoZSBjb2RlLgorCisgICAgICAgICogYnJpZGdlL21hYy9NYWNGcmFt
ZS5oOgorICAgICAgICAqIGJyaWRnZS9tYWMvTWFjRnJhbWUubW06CisgICAgICAgIChXZWJDb3Jl
OjpNYWNGcmFtZTo6TWFjRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWFjRnJhbWU6OnNlYXJj
aEZvckxhYmVsc0Fib3ZlQ2VsbCk6CisgICAgICAgIChXZWJDb3JlOjpNYWNGcmFtZTo6c2VhcmNo
Rm9yTGFiZWxzQmVmb3JlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpkaWN0aW9uYXJ5RnJv
bUhhc2hNYXApOgorICAgICAgICAoV2ViQ29yZTo6TWFjRnJhbWU6OnN1Ym1pdEZvcm0pOgorICAg
ICAgICAoV2ViQ29yZTo6TWFjRnJhbWU6OnNldFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6TWFj
RnJhbWU6OmN1cnJlbnRFdmVudElzTW91c2VEb3duSW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWFjRnJhbWU6OmN1cnJlbnRFdmVudElzS2V5Ym9hcmRPcHRpb25UYWIpOgorICAgICAgICAo
V2ViQ29yZTo6TWFjRnJhbWU6OmhhbmRsZUtleWJvYXJkT3B0aW9uVGFiSW5WaWV3KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hY0ZyYW1lOjp0YWJzVG9BbGxDb250cm9scyk6CisgICAgICAgIChXZWJD
b3JlOjpNYWNGcmFtZTo6c2hvdWxkRHJhZ0F1dG9Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1h
Y0ZyYW1lOjpzZWxlY3Rpb25JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpNYWNGcmFtZTo6c25h
cHNob3REcmFnSW1hZ2UpOgorICAgICAgICAqIGJyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdl
Lm1tOgorICAgICAgICAoLVtXZWJDb3JlRnJhbWVCcmlkZ2UgbmV4dEtleVZpZXddKToKKyAgICAg
ICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdlIHByZXZpb3VzS2V5Vmlld10pOgorICAgICAgICAoLVtX
ZWJDb3JlRnJhbWVCcmlkZ2UgbmV4dEtleVZpZXdJbnNpZGVXZWJGcmFtZVZpZXdzXSk6CisgICAg
ICAgICgtW1dlYkNvcmVGcmFtZUJyaWRnZSBwcmV2aW91c0tleVZpZXdJbnNpZGVXZWJGcmFtZVZp
ZXdzXSk6CisgICAgICAgICoga2NhbnZhcy9SZW5kZXJTVkdJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6cGFpbnQpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjpjbGVhclJlY29yZGVkRm9ybVZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6
cmVjb3JkRm9ybVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpkaWROb3RPcGVuVVJM
KToKKyAgICAgICAgKFdlYkNvcmU6OnNjYW5Gb3JGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cHJlcGFyZUZvclVzZXJBY3Rp
b24pOgorICAgICAgICAqIHBhZ2UvRnJhbWUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9HcmFwaGlj
c0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBy
aXZhdGU6OkdyYXBoaWNzQ29udGV4dFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFByaXZhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzYXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZv
bnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGb250KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGVuKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0UGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0QnJ1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpicnVzaCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFVzZXNJbmFjdGl2ZVRleHRC
YWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp1c2Vz
SW5hY3RpdmVUZXh0QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6dXBkYXRpbmdDb250cm9sVGludHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRVcGRhdGluZ0NvbnRyb2xUaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldFBhaW50aW5nRGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpwYWludGluZ0Rpc2FibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6cHJpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3SW1hZ2VBdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ltYWdlSW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aW5pdEZvY3Vz
UmluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyRm9jdXNSaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkRm9jdXNSaW5nUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZvY3VzUmluZ1dpZHRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zm9jdXNSaW5nT2Zmc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAq
IHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9HcmFw
aGljc0NvbnRleHRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpmaWxsUmVjdFNvdXJjZU92ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbG9yRnJvbUJydXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q29sb3JGcm9tUGVuKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdBcmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4
UG9seWdvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGbG9hdElt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3U2NhbGVkQW5kVGlsZWRJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNlbGVjdGVkVGV4dEJh
Y2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkQ2xpcCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFkZFJvdW5kZWRSZWN0Q2xpcCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgICogcmVuZGVyaW5n
L3JlbmRlcl9ib3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwYWludEJhY2tn
cm91bmRFeHRlbmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om91dGxpbmVCb3gp
OgorICAgICAgICAqIHJlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZyYW1lU2V0Ojp1c2VyUmVzaXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvcmVu
ZGVyX2ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpwYWludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxpc3RNYXJrZXI6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvcmVuZGVyX29iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmRyYXdCb3JkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpwYWludEJvcmRlckltYWdlKToKKwogMjAwNi0w
My0xOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgLSBnbG9iYWwg
cmVuYW1lLCBkb25lIGJ5IHNjcmlwdApJbmRleDogYnJpZGdlL21hYy9GcmFtZU1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBicmlkZ2UvbWFjL0ZyYW1lTWFjLm1tCShyZXZpc2lvbiAxMzM5MykKKysrIGJy
aWRnZS9tYWMvRnJhbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ0MiwzMiArNDQyLDYgQEAg
Ym9vbCBGcmFtZU1hYzo6ZmluZFN0cmluZyhOU1N0cmluZyAqc3RyaQogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIEZyYW1lTWFjOjpjbGVhclJlY29yZGVkRm9ybVZhbHVlcygpCi17Ci0gICAg
Ly8gSXQncyBzYWZlIHRvIGFzc3VtZSB0aGF0IG91ciBvd24gY2xhc3NlcyBhbmQgRm91bmRhdGlv
biBkYXRhCi0gICAgLy8gc3RydWN0dXJlcyB3b24ndCByYWlzZSBleGNlcHRpb25zIGluIGRlYWxs
b2MKLQotICAgIEtXUVJlbGVhc2UoX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQpOwotICAg
IF9mb3JtVmFsdWVzQWJvdXRUb0JlU3VibWl0dGVkID0gbmlsOwotICAgIEtXUVJlbGVhc2UoX2Zv
cm1BYm91dFRvQmVTdWJtaXR0ZWQpOwotICAgIF9mb3JtQWJvdXRUb0JlU3VibWl0dGVkID0gbmls
OwotfQotCi12b2lkIEZyYW1lTWFjOjpyZWNvcmRGb3JtVmFsdWUoY29uc3QgRGVwcmVjYXRlZFN0
cmluZyAmbmFtZSwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmdmFsdWUsIEhUTUxGb3JtRWxlbWVu
dCAqZWxlbWVudCkKLXsKLSAgICAvLyBJdCdzIHNhZmUgdG8gYXNzdW1lIHRoYXQgb3VyIG93biBj
bGFzc2VzIGFuZCBiYXNpYyBGb3VuZGF0aW9uCi0gICAgLy8gZGF0YSBzdHJ1Y3R1cmVzIHdvbid0
IHJhaXNlIGV4Y2VwdGlvbnMKLQotICAgIGlmICghX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0
ZWQpIHsKLSAgICAgICAgX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQgPSBLV1FSZXRhaW5O
U1JlbGVhc2UoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIEFT
U0VSVCghX2Zvcm1BYm91dFRvQmVTdWJtaXR0ZWQpOwotICAgICAgICBfZm9ybUFib3V0VG9CZVN1
Ym1pdHRlZCA9IEtXUVJldGFpbihbRE9NRWxlbWVudCBfZWxlbWVudFdpdGg6ZWxlbWVudF0pOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChbX2Zvcm1BYm91dFRvQmVTdWJtaXR0ZWQgX2Vs
ZW1lbnRdID09IGVsZW1lbnQpOwotICAgIH0KLSAgICBbX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJt
aXR0ZWQgc2V0T2JqZWN0OnZhbHVlLmdldE5TU3RyaW5nKCkgZm9yS2V5Om5hbWUuZ2V0TlNTdHJp
bmcoKV07Ci19Ci0KIHZvaWQgRnJhbWVNYWM6OnN1Ym1pdEZvcm0oY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKQEAgLTQ4
MSw3ICs0NTUsNyBAQCB2b2lkIEZyYW1lTWFjOjpzdWJtaXRGb3JtKGNvbnN0IFJlc291cmNlCiAg
ICAgLy8gVGhlIGZvcm0gbXVsdGktc3VibWl0IGxvZ2ljIGhlcmUgaXMgb25seSBuZWVkZWQgd2hl
biB3ZSBhcmUgc3VibWl0dGluZyBhIGZvcm0gdGhhdCBhZmZlY3RzIHRoaXMgZnJhbWUuCiAgICAg
Ly8gRklYTUU6IEZyYW1lIHRhcmdldGluZyBpcyBvbmx5IG9uZSBvZiB0aGUgd2F5cyB0aGUgc3Vi
bWlzc2lvbiBjb3VsZCBlbmQgdXAgZG9pbmcgc29tZXRoaW5nIG90aGVyCiAgICAgLy8gdGhhbiBy
ZXBsYWNpbmcgdGhpcyBmcmFtZSdzIGNvbnRlbnQsIHNvIHRoaXMgY2hlY2sgaXMgZmxhd2VkLiBP
biB0aGUgb3RoZXIgaGFuZCwgdGhlIGNoZWNrIGlzIGhhcmRseQotICAgIC8vIG5lZWRlZCBhbnkg
bW9yZSBub3cgdGhhdCB3ZSByZXNldCBfc3VibWl0dGVkRm9ybVVSTCBvbiBlYWNoIG1vdXNlIG9y
IGtleSBkb3duIGV2ZW50LgorICAgIC8vIG5lZWRlZCBhbnkgbW9yZSBub3cgdGhhdCB3ZSByZXNl
dCBtX3N1Ym1pdHRlZEZvcm1VUkwgb24gZWFjaCBtb3VzZSBvciBrZXkgZG93biBldmVudC4KICAg
ICBXZWJDb3JlRnJhbWVCcmlkZ2UgKnRhcmdldCA9IHJlcXVlc3QuZnJhbWVOYW1lLmlzRW1wdHko
KSA/IF9icmlkZ2UgOiBbX2JyaWRnZSBmaW5kRnJhbWVOYW1lZDpyZXF1ZXN0LmZyYW1lTmFtZS5n
ZXROU1N0cmluZygpXTsKICAgICBGcmFtZSAqdGFyZ2V0UGFydCA9IFt0YXJnZXQgaW1wbF07CiAg
ICAgYm9vbCB3aWxsUmVwbGFjZVRoaXNGcmFtZSA9IGZhbHNlOwpAQCAtNDkyLDEwICs0NjYsOSBA
QCB2b2lkIEZyYW1lTWFjOjpzdWJtaXRGb3JtKGNvbnN0IFJlc291cmNlCiAgICAgICAgIH0KICAg
ICB9CiAgICAgaWYgKHdpbGxSZXBsYWNlVGhpc0ZyYW1lKSB7Ci0gICAgICAgIGlmIChfc3VibWl0
dGVkRm9ybVVSTCA9PSByZXF1ZXN0LnVybCgpKSB7CisgICAgICAgIGlmIChtX3N1Ym1pdHRlZEZv
cm1VUkwgPT0gcmVxdWVzdC51cmwoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBfc3VibWl0dGVkRm9ybVVSTCA9IHJlcXVlc3QudXJsKCk7CisgICAgICAgIG1fc3Vi
bWl0dGVkRm9ybVVSTCA9IHJlcXVlc3QudXJsKCk7CiAgICAgfQogCiAgICAgaWYgKCFyZXF1ZXN0
LmRvUG9zdCgpKSB7CkBAIC02MjksNyArNjAyLDcgQEAgdm9pZCBGcmFtZU1hYzo6c2V0VmlldyhG
cmFtZVZpZXcgKnZpZXcpCiAgICAgLy8gT25seSBvbmUgZm9ybSBzdWJtaXNzaW9uIGlzIGFsbG93
ZWQgcGVyIHZpZXcgb2YgYSBwYXJ0LgogICAgIC8vIFNpbmNlIHRoaXMgcGFydCBtYXkgYmUgZ2V0
dGluZyByZXVzZWQgYXMgYSByZXN1bHQgb2YgYmVpbmcKICAgICAvLyBwdWxsZWQgZnJvbSB0aGUg
YmFjay9mb3J3YXJkIGNhY2hlLCByZXNldCB0aGlzIGZsYWcuCi0gICAgX3N1Ym1pdHRlZEZvcm1V
UkwgPSBLVVJMKCk7CisgICAgbV9zdWJtaXR0ZWRGb3JtVVJMID0gS1VSTCgpOwogfQogCiB2b2lk
IEZyYW1lTWFjOjpzZXRUaXRsZShjb25zdCBTdHJpbmcgJnRpdGxlKQpAQCAtMjcwNSwxOCArMjY3
OCwxNyBAQCBOU0ltYWdlICpGcmFtZU1hYzo6aW1hZ2VGcm9tUmVjdChOU1JlY3QgCiAKIE5TSW1h
Z2UgKkZyYW1lTWFjOjpzZWxlY3Rpb25JbWFnZSgpIGNvbnN0CiB7Ci0gICAgX2RyYXdTZWxlY3Rp
b25Pbmx5ID0gdHJ1ZTsgIC8vIGludm9rZSBzcGVjaWFsIGRyYXdpbmcgbW9kZQorICAgIG1fZHJh
d1NlbGVjdGlvbk9ubHkgPSB0cnVlOyAgLy8gaW52b2tlIHNwZWNpYWwgZHJhd2luZyBtb2RlCiAg
ICAgTlNJbWFnZSAqcmVzdWx0ID0gaW1hZ2VGcm9tUmVjdCh2aXNpYmxlU2VsZWN0aW9uUmVjdCgp
KTsKLSAgICBfZHJhd1NlbGVjdGlvbk9ubHkgPSBmYWxzZTsKKyAgICBtX2RyYXdTZWxlY3Rpb25P
bmx5ID0gZmFsc2U7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogTlNJbWFnZSAqRnJhbWVNYWM6
OnNuYXBzaG90RHJhZ0ltYWdlKE5vZGUgKm5vZGUsIE5TUmVjdCAqaW1hZ2VSZWN0LCBOU1JlY3Qg
KmVsZW1lbnRSZWN0KSBjb25zdAogewogICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBub2Rl
LT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpIHsKKyAgICBpZiAoIXJlbmRlcmVyKQog
ICAgICAgICByZXR1cm4gbmlsOwotICAgIH0KICAgICAKICAgICByZW5kZXJlci0+dXBkYXRlRHJh
Z1N0YXRlKHRydWUpOyAgICAvLyBtYXJrIGRyYWdnZWQgbm9kZXMgKHNvIHRoZXkgcGljayB1cCB0
aGUgcmlnaHQgQ1NTKQogICAgIGQtPm1fZG9jLT51cGRhdGVMYXlvdXQoKTsgICAgICAgIC8vIGZv
cmNlcyBzdHlsZSByZWNhbGMgLSBuZWVkZWQgc2luY2UgY2hhbmdpbmcgdGhlIGRyYWcgc3RhdGUg
bWlnaHQKQEAgLTI3MjQsMTggKzI2OTYsMTYgQEAgTlNJbWFnZSAqRnJhbWVNYWM6OnNuYXBzaG90
RHJhZ0ltYWdlKE5vZAogICAgIEludFJlY3QgdG9wTGV2ZWxSZWN0OwogICAgIE5TUmVjdCBwYWlu
dGluZ1JlY3QgPSByZW5kZXJlci0+cGFpbnRpbmdSb290UmVjdCh0b3BMZXZlbFJlY3QpOwogCi0g
ICAgX2VsZW1lbnRUb0RyYXcgPSBub2RlOyAgICAgICAgICAgICAgLy8gaW52b2tlIHNwZWNpYWwg
c3ViLXRyZWUgZHJhd2luZyBtb2RlCisgICAgbV9lbGVtZW50VG9EcmF3ID0gbm9kZTsgICAgICAg
ICAgICAgIC8vIGludm9rZSBzcGVjaWFsIHN1Yi10cmVlIGRyYXdpbmcgbW9kZQogICAgIE5TSW1h
Z2UgKnJlc3VsdCA9IGltYWdlRnJvbVJlY3QocGFpbnRpbmdSZWN0KTsKICAgICByZW5kZXJlci0+
dXBkYXRlRHJhZ1N0YXRlKGZhbHNlKTsKICAgICBkLT5tX2RvYy0+dXBkYXRlTGF5b3V0KCk7Ci0g
ICAgX2VsZW1lbnRUb0RyYXcgPSAwOworICAgIG1fZWxlbWVudFRvRHJhdyA9IDA7CiAKLSAgICBp
ZiAoZWxlbWVudFJlY3QpIHsKKyAgICBpZiAoZWxlbWVudFJlY3QpCiAgICAgICAgICplbGVtZW50
UmVjdCA9IHRvcExldmVsUmVjdDsKLSAgICB9Ci0gICAgaWYgKGltYWdlUmVjdCkgeworICAgIGlm
IChpbWFnZVJlY3QpCiAgICAgICAgICppbWFnZVJlY3QgPSBwYWludGluZ1JlY3Q7Ci0gICAgfQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IGJyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJp
ZGdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGJyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCShy
ZXZpc2lvbiAxMzM5MykKKysrIGJyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjYyLDM4ICsxMjYyLDMyIEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQg
KmZvcm1FbGVtZW50RnJvbUQKIC0gKE5TVmlldyAqKW5leHRLZXlWaWV3CiB7CiAgICAgRG9jdW1l
bnQgKmRvYyA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2MpIHsKKyAgICBpZiAo
IWRvYykKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9CiAgICAgcmV0dXJuIG1fZnJhbWUtPm5l
eHRLZXlWaWV3KGRvYy0+Zm9jdXNOb2RlKCksIEtXUVNlbGVjdGluZ05leHQpOwogfQogCiAtIChO
U1ZpZXcgKilwcmV2aW91c0tleVZpZXcKIHsKICAgICBEb2N1bWVudCAqZG9jID0gbV9mcmFtZS0+
ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvYykgeworICAgIGlmICghZG9jKQogICAgICAgICByZXR1
cm4gbmlsOwotICAgIH0KICAgICByZXR1cm4gbV9mcmFtZS0+bmV4dEtleVZpZXcoZG9jLT5mb2N1
c05vZGUoKSwgS1dRU2VsZWN0aW5nUHJldmlvdXMpOwogfQogCiAtIChOU1ZpZXcgKiluZXh0S2V5
Vmlld0luc2lkZVdlYkZyYW1lVmlld3MKIHsKICAgICBEb2N1bWVudCAqZG9jID0gbV9mcmFtZS0+
ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvYykgeworICAgIGlmICghZG9jKQogICAgICAgICByZXR1
cm4gbmlsOwotICAgIH0KLSAgICAKICAgICByZXR1cm4gbV9mcmFtZS0+bmV4dEtleVZpZXdJbkZy
YW1lSGllcmFyY2h5KGRvYy0+Zm9jdXNOb2RlKCksIEtXUVNlbGVjdGluZ05leHQpOwogfQogCiAt
IChOU1ZpZXcgKilwcmV2aW91c0tleVZpZXdJbnNpZGVXZWJGcmFtZVZpZXdzCiB7CiAgICAgRG9j
dW1lbnQgKmRvYyA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2MpIHsKKyAgICBp
ZiAoIWRvYykKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0KICAgICByZXR1cm4gbV9mcmFt
ZS0+bmV4dEtleVZpZXdJbkZyYW1lSGllcmFyY2h5KGRvYy0+Zm9jdXNOb2RlKCksIEtXUVNlbGVj
dGluZ1ByZXZpb3VzKTsKIH0KIApJbmRleDogYnJpZGdlL21hYy9GcmFtZU1hYy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGJyaWRnZS9tYWMvRnJhbWVNYWMuaAkocmV2aXNpb24gMTMzOTMpCisrKyBicmlkZ2Uv
bWFjL0ZyYW1lTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw5ICsyMzIsNiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIHBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50
V2l0aEhpdFRlc3RSZXN1bHRzICYpOwogICAgIHZpcnR1YWwgYm9vbCBwYXNzV2hlZWxFdmVudFRv
Q2hpbGRXaWRnZXQoTm9kZSAqKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZWNvcmRl
ZEZvcm1WYWx1ZXMoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRm9ybVZhbHVlKGNvbnN0IERl
cHJlY2F0ZWRTdHJpbmcgJm5hbWUsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnZhbHVlLCBIVE1M
Rm9ybUVsZW1lbnQgKmVsZW1lbnQpOwotCiAgICAgTlNTdHJpbmcgKnNlYXJjaEZvckxhYmVsc0Fi
b3ZlQ2VsbChSZWd1bGFyRXhwcmVzc2lvbiAqcmVnRXhwLCBIVE1MVGFibGVDZWxsRWxlbWVudCAq
Y2VsbCk7CiAgICAgTlNTdHJpbmcgKnNlYXJjaEZvckxhYmVsc0JlZm9yZUVsZW1lbnQoTlNBcnJh
eSAqbGFiZWxzLCBFbGVtZW50ICplbGVtZW50KTsKICAgICBOU1N0cmluZyAqbWF0Y2hMYWJlbHNB
Z2FpbnN0RWxlbWVudChOU0FycmF5ICpsYWJlbHMsIEVsZW1lbnQgKmVsZW1lbnQpOwpJbmRleDog
cGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRnJhbWUuaAkocmV2aXNpb24gMTMzOTMp
CisrKyBwYWdlL0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1Myw4ICs1NTMsNiBAQCBwdWJs
aWM6CiAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB1c2VyQWdlbnQoKSBjb25zdCA9IDA7CiAg
IHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyBpbmNvbWluZ1JlZmVycmVyKCkgY29uc3QgPSAwOwog
ICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgbWltZVR5cGVGb3JGaWxlTmFtZShjb25zdCBEZXBy
ZWNhdGVkU3RyaW5nICYpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCB2b2lkIGNsZWFyUmVjb3JkZWRG
b3JtVmFsdWVzKCkgPSAwOwotICB2aXJ0dWFsIHZvaWQgcmVjb3JkRm9ybVZhbHVlKGNvbnN0IERl
cHJlY2F0ZWRTdHJpbmcgJm5hbWUsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnZhbHVlLCBIVE1M
Rm9ybUVsZW1lbnQgKmVsZW1lbnQpID0gMDsKICAgdmlydHVhbCBLSlM6OkJpbmRpbmdzOjpJbnN0
YW5jZSAqZ2V0RW1iZWRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqKSA9IDA7CiAgIHZpcnR1YWwg
S0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKmdldE9iamVjdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdl
dCopID0gMDsKICAgdmlydHVhbCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSAqZ2V0QXBwbGV0SW5z
dGFuY2VGb3JXaWRnZXQoV2lkZ2V0KikgPSAwOwpAQCAtNzY0LDYgKzc2Miw5IEBAIHByaXZhdGU6
CiAgIC8vIEN1cnJlbnRseSwgYWxsIHRoaXMgZG9lcyBpcyBjbGVhciB0aGUgImRvbid0IHN1Ym1p
dCBmb3JtIHR3aWNlIiBkYXRhIG1lbWJlci4KICAgdm9pZCBwcmVwYXJlRm9yVXNlckFjdGlvbigp
OwogICBOb2RlICptb3VzZVByZXNzTm9kZSgpOworICAKKyAgdm9pZCBjbGVhclJlY29yZGVkRm9y
bVZhbHVlcygpOworICB2b2lkIHJlY29yZEZvcm1WYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgdmFsdWUsIEhUTUxGb3JtRWxlbWVudCopOwogCiAgIGJvb2wgaXNDb21wbGV0
ZSgpIGNvbnN0OwogICBib29sIGlzTG9hZGluZ01haW5SZXNvdXJjZSgpIGNvbnN0OwpAQCAtODI4
LDEwICs4MjksMTIgQEAgcHVibGljOgogIHByaXZhdGU6CiAgIGZyaWVuZCBjbGFzcyBGcmFtZVBy
aXZhdGU7CiAgIEZyYW1lUHJpdmF0ZSogZDsKLSAgICAgIAotICBtdXRhYmxlIFJlZlB0cjxOb2Rl
PiBfZWxlbWVudFRvRHJhdzsKLSAgbXV0YWJsZSBib29sIF9kcmF3U2VsZWN0aW9uT25seTsKLSAg
S1VSTCBfc3VibWl0dGVkRm9ybVVSTDsKKworICBtdXRhYmxlIFJlZlB0cjxOb2RlPiBtX2VsZW1l
bnRUb0RyYXc7CisgIG11dGFibGUgYm9vbCBtX2RyYXdTZWxlY3Rpb25Pbmx5OworICBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiBtX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQ7CisgIFJlZlB0
cjxFbGVtZW50PiBtX2Zvcm1BYm91dFRvQmVTdWJtaXR0ZWQ7CisgIEtVUkwgbV9zdWJtaXR0ZWRG
b3JtVVJMOwogICBib29sIG1fbWFya2VkVGV4dFVzZXNVbmRlcmxpbmVzOwogICBEZXByZWNhdGVk
VmFsdWVMaXN0PE1hcmtlZFRleHRVbmRlcmxpbmU+IG1fbWFya2VkVGV4dFVuZGVybGluZXM7CiAg
IGJvb2wgbV93aW5kb3dIYXNGb2N1czsKSW5kZXg6IHBhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHBhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAxMzM5MykKKysrIHBhZ2UvRnJhbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2LDcgQEAgc3RhdGljIGlubGluZSBGcmFtZSogcGFy
ZW50RnJvbU93bmVyUmVuZAogCiBGcmFtZTo6RnJhbWUoUGFnZSogcGFnZSwgUmVuZGVyUGFydCog
b3duZXJSZW5kZXJlcikgCiAgICAgOiBkKG5ldyBGcmFtZVByaXZhdGUocGFnZSwgcGFyZW50RnJv
bU93bmVyUmVuZGVyZXIob3duZXJSZW5kZXJlciksIHRoaXMsIG93bmVyUmVuZGVyZXIpKQotICAg
ICwgX2RyYXdTZWxlY3Rpb25Pbmx5KGZhbHNlKQorICAgICwgbV9kcmF3U2VsZWN0aW9uT25seShm
YWxzZSkKICAgICAsIG1fbWFya2VkVGV4dFVzZXNVbmRlcmxpbmVzKGZhbHNlKQogICAgICwgbV93
aW5kb3dIYXNGb2N1cyhmYWxzZSkKICAgICAsIGZyYW1lQ291bnQoMCkKQEAgLTE0NjUsNiArMTQ2
NSwxOCBAQCBGcmFtZSogRnJhbWU6OmxvYWRTdWJmcmFtZShSZW5kZXJQYXJ0KiByCiAgICAgcmV0
dXJuIGZyYW1lOwogfQogCit2b2lkIEZyYW1lOjpjbGVhclJlY29yZGVkRm9ybVZhbHVlcygpCit7
CisgICAgbV9mb3JtQWJvdXRUb0JlU3VibWl0dGVkID0gMDsKKyAgICBtX2Zvcm1WYWx1ZXNBYm91
dFRvQmVTdWJtaXR0ZWQuY2xlYXIoKTsKK30KKwordm9pZCBGcmFtZTo6cmVjb3JkRm9ybVZhbHVl
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgSFRNTEZvcm1FbGVtZW50
KiBlbGVtZW50KQoreworICAgIG1fZm9ybUFib3V0VG9CZVN1Ym1pdHRlZCA9IGVsZW1lbnQ7Cisg
ICAgbV9mb3JtVmFsdWVzQWJvdXRUb0JlU3VibWl0dGVkLnNldChuYW1lLCB2YWx1ZSk7Cit9CisK
IHZvaWQgRnJhbWU6OnN1Ym1pdEZvcm1BZ2FpbigpCiB7CiAgICAgRnJhbWVQcml2YXRlOjpTdWJt
aXRGb3JtKiBmb3JtID0gZC0+bV9zdWJtaXRGb3JtOwpAQCAtMTU3MCw3ICsxNTgyLDYgQEAgdm9p
ZCBGcmFtZTo6c3VibWl0Rm9ybShjb25zdCBjaGFyICphY3RpbwogICB9CiB9CiAKLQogdm9pZCBG
cmFtZTo6cGFyZW50Q29tcGxldGVkKCkKIHsKICAgICBpZiAoZC0+bV9zY2hlZHVsZWRSZWRpcmVj
dGlvbiAhPSBub1JlZGlyZWN0aW9uU2NoZWR1bGVkICYmICFkLT5tX3JlZGlyZWN0aW9uVGltZXIu
aXNBY3RpdmUoKSkKQEAgLTI1NjksOSArMjU4MCw4IEBAIGJvb2wgRnJhbWU6Om9wZW5VUkwoY29u
c3QgS1VSTCAmVVJMKQogCiB2b2lkIEZyYW1lOjpkaWROb3RPcGVuVVJMKGNvbnN0IEtVUkwgJlVS
TCkKIHsKLSAgICBpZiAoX3N1Ym1pdHRlZEZvcm1VUkwgPT0gVVJMKSB7Ci0gICAgICAgIF9zdWJt
aXR0ZWRGb3JtVVJMID0gS1VSTCgpOwotICAgIH0KKyAgICBpZiAobV9zdWJtaXR0ZWRGb3JtVVJM
ID09IFVSTCkKKyAgICAgICAgbV9zdWJtaXR0ZWRGb3JtVVJMID0gS1VSTCgpOwogfQogCiAvLyBT
Y2FucyBsb2dpY2FsbHkgZm9yd2FyZCBmcm9tICJzdGFydCIsIGluY2x1ZGluZyBhbnkgY2hpbGQg
ZnJhbWVzCkBAIC0yNTc5LDE3ICsyNTg5LDE0IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQgKnNj
YW5Gb3JGb3JtKE5vZGUKIHsKICAgICBOb2RlICpuOwogICAgIGZvciAobiA9IHN0YXJ0OyBuOyBu
ID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKGZv
cm1UYWcpKSB7CisgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKGZvcm1UYWcpKQogICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCAqPihuKTsKLSAgICAgICAgfSBl
bHNlIGlmIChuLT5pc0hUTUxFbGVtZW50KCkKLSAgICAgICAgICAgICAgICAgICAmJiBzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudCAqPihuKS0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkgewotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnQgKj4obiktPmZv
cm0oKTsKLSAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKGZyYW1lVGFnKSB8fCBuLT5o
YXNUYWdOYW1lKGlmcmFtZVRhZykpIHsKKyAgICAgICAgZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVu
dCgpICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obiktPmlzR2VuZXJpY0Zvcm1FbGVtZW50
KCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEdlbmVyaWNGb3JtRWxlbWVu
dCo+KG4pLT5mb3JtKCk7CisgICAgICAgIGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoZnJhbWVUYWcp
IHx8IG4tPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSkgewogICAgICAgICAgICAgTm9kZSAqY2hpbGRE
b2MgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50ICo+KG4pLT5jb250ZW50RG9jdW1lbnQo
KTsKLSAgICAgICAgICAgIEhUTUxGb3JtRWxlbWVudCAqZnJhbWVSZXN1bHQgPSBzY2FuRm9yRm9y
bShjaGlsZERvYyk7Ci0gICAgICAgICAgICBpZiAoZnJhbWVSZXN1bHQpIHsKKyAgICAgICAgICAg
IGlmIChIVE1MRm9ybUVsZW1lbnQgKmZyYW1lUmVzdWx0ID0gc2NhbkZvckZvcm0oY2hpbGREb2Mp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmcmFtZVJlc3VsdDsKLSAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTI3MjcsOSArMjczNCw5IEBAIHZvaWQg
RnJhbWU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogcCwgY28KICAgICAgICAgZmlsbFdpdGhSZWQg
PSBmYWxzZTsgLy8gU3ViZnJhbWUsIGRvbid0IGZpbGwgd2l0aCByZWQuCiAgICAgZWxzZSBpZiAo
dmlldygpICYmIHZpZXcoKS0+aXNUcmFuc3BhcmVudCgpKQogICAgICAgICBmaWxsV2l0aFJlZCA9
IGZhbHNlOyAvLyBUcmFuc3BhcmVudCwgZG9uJ3QgZmlsbCB3aXRoIHJlZC4KLSAgICBlbHNlIGlm
IChfZHJhd1NlbGVjdGlvbk9ubHkpCisgICAgZWxzZSBpZiAobV9kcmF3U2VsZWN0aW9uT25seSkK
ICAgICAgICAgZmlsbFdpdGhSZWQgPSBmYWxzZTsgLy8gU2VsZWN0aW9ucyBhcmUgdHJhbnNwYXJl
bnQsIGRvbid0IGZpbGwgd2l0aCByZWQuCi0gICAgZWxzZSBpZiAoX2VsZW1lbnRUb0RyYXcpCisg
ICAgZWxzZSBpZiAobV9lbGVtZW50VG9EcmF3KQogICAgICAgICBmaWxsV2l0aFJlZCA9IGZhbHNl
OyAvLyBFbGVtZW50IGltYWdlcyBhcmUgdHJhbnNwYXJlbnQsIGRvbid0IGZpbGwgd2l0aCByZWQu
CiAgICAgZWxzZQogICAgICAgICBmaWxsV2l0aFJlZCA9IHRydWU7CkBAIC0yNzM5LDkgKzI3NDYs
OSBAQCB2b2lkIEZyYW1lOjpwYWludChHcmFwaGljc0NvbnRleHQqIHAsIGNvCiAjZW5kaWYKICAg
ICAKICAgICBpZiAocmVuZGVyZXIoKSkgewotICAgICAgICAvLyBfZWxlbWVudFRvRHJhdyBpcyB1
c2VkIHRvIGRyYXcgb25seSBvbmUgZWxlbWVudAotICAgICAgICBSZW5kZXJPYmplY3QgKmVsdFJl
bmRlcmVyID0gX2VsZW1lbnRUb0RyYXcgPyBfZWxlbWVudFRvRHJhdy0+cmVuZGVyZXIoKSA6IDA7
Ci0gICAgICAgIHJlbmRlcmVyKCktPmxheWVyKCktPnBhaW50KHAsIHJlY3QsIF9kcmF3U2VsZWN0
aW9uT25seSwgZWx0UmVuZGVyZXIpOworICAgICAgICAvLyBtX2VsZW1lbnRUb0RyYXcgaXMgdXNl
ZCB0byBkcmF3IG9ubHkgb25lIGVsZW1lbnQKKyAgICAgICAgUmVuZGVyT2JqZWN0ICplbHRSZW5k
ZXJlciA9IG1fZWxlbWVudFRvRHJhdyA/IG1fZWxlbWVudFRvRHJhdy0+cmVuZGVyZXIoKSA6IDA7
CisgICAgICAgIHJlbmRlcmVyKCktPmxheWVyKCktPnBhaW50KHAsIHJlY3QsIG1fZHJhd1NlbGVj
dGlvbk9ubHksIGVsdFJlbmRlcmVyKTsKIAogI2lmIF9fQVBQTEVfXwogICAgICAgICAvLyBSZWdp
b25zIG1heSBoYXZlIGNoYW5nZWQgYXMgYSByZXN1bHQgb2YgdGhlIHZpc2liaWxpdHkvei1pbmRl
eCBvZiBlbGVtZW50IGNoYW5naW5nLgpAQCAtMzI3Myw3ICszMjgwLDcgQEAgdm9pZCBGcmFtZTo6
cHJlcGFyZUZvclVzZXJBY3Rpb24oKQogewogICAgIC8vIFJlc2V0IHRoZSBtdWx0aXBsZSBmb3Jt
IHN1Ym1pc3Npb24gcHJvdGVjdGlvbiBjb2RlLgogICAgIC8vIFdlJ2xsIGxldCB5b3Ugc3VibWl0
IHRoZSBzYW1lIGZvcm0gdHdpY2UgaWYgeW91IGRvIHR3byBzZXBhcmF0ZSB1c2VyIGFjdGlvbnMu
Ci0gICAgX3N1Ym1pdHRlZEZvcm1VUkwgPSBLVVJMKCk7CisgICAgbV9zdWJtaXR0ZWRGb3JtVVJM
ID0gS1VSTCgpOwogfQogCiBOb2RlICpGcmFtZTo6bW91c2VQcmVzc05vZGUoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7182</attachid>
            <date>2006-03-19 21:23:01 -0800</date>
            <delta_ts>2006-03-19 21:35:38 -0800</delta_ts>
            <desc>Better patch, with darin&apos;s suggested changes.</desc>
            <filename>new.patch</filename>
            <type>text/plain</type>
            <size>68709</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRt
bC9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzMzkzKQorKysga2h0bWwvaHRt
bC9IVE1MRm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTIsOCArMzUyLDcgQEAg
dm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCggYm9vbCBhY3RpdgogICAgICAgICAgICAgSFRN
TElucHV0RWxlbWVudCAqaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oY3Vy
cmVudCk7CiAgICAgICAgICAgICBpZiAoaW5wdXQtPmlucHV0VHlwZSgpID09IEhUTUxJbnB1dEVs
ZW1lbnQ6OlRFWFQKICAgICAgICAgICAgICAgICB8fCBpbnB1dC0+aW5wdXRUeXBlKCkgPT0gIEhU
TUxJbnB1dEVsZW1lbnQ6OlBBU1NXT1JECi0gICAgICAgICAgICAgICAgfHwgaW5wdXQtPmlucHV0
VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnQ6OlNFQVJDSCkKLSAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICB8fCBpbnB1dC0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudDo6U0VB
UkNIKSB7CiAgICAgICAgICAgICAgICAgZnJhbWUtPnJlY29yZEZvcm1WYWx1ZShpbnB1dC0+bmFt
ZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKSwgaW5wdXQtPnZhbHVlKCkuZGVwcmVjYXRlZFN0cmluZygp
LCB0aGlzKTsKICAgICAgICAgICAgICAgICBpZiAoaW5wdXQtPnJlbmRlcmVyKCkgJiYgaW5wdXQt
PmlucHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnQ6OlNFQVJDSCkKICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyTGluZUVkaXQqPihpbnB1dC0+cmVuZGVyZXIoKSktPmFk
ZFNlYXJjaFJlc3VsdCgpOwpAQCAtMzYxLDQ2ICszNjAsNDEgQEAgdm9pZCBIVE1MRm9ybUVsZW1l
bnQ6OnN1Ym1pdCggYm9vbCBhY3RpdgogICAgICAgICB9CiAKICAgICAgICAgaWYgKG5lZWRCdXR0
b25BY3RpdmF0aW9uKSB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudC0+aXNBY3RpdmF0ZWRTdWJt
aXQoKSkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmlzQWN0aXZhdGVkU3VibWl0KCkpCiAg
ICAgICAgICAgICAgICAgbmVlZEJ1dHRvbkFjdGl2YXRpb24gPSBmYWxzZTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uID09IDAgJiYgY3VycmVudC0+
aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKGZpcnN0
U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbiA9PSAwICYmIGN1cnJlbnQtPmlzU3VjY2Vzc2Z1bFN1Ym1p
dEJ1dHRvbigpKQogICAgICAgICAgICAgICAgIGZpcnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbiA9
IGN1cnJlbnQ7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobmVl
ZEJ1dHRvbkFjdGl2YXRpb24gJiYgZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uKSB7CisgICAg
aWYgKG5lZWRCdXR0b25BY3RpdmF0aW9uICYmIGZpcnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbikK
ICAgICAgICAgZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uLT5zZXRBY3RpdmF0ZWRTdWJtaXQo
dHJ1ZSk7Ci0gICAgfQogCiAgICAgaWYgKCFtX3Bvc3QpCiAgICAgICAgIG1fbXVsdGlwYXJ0ID0g
ZmFsc2U7CiAgICAgCiAgICAgRm9ybURhdGEgZm9ybV9kYXRhOwogICAgIGlmIChmb3JtRGF0YShm
b3JtX2RhdGEpKSB7Ci0gICAgICAgIGlmKG1fcG9zdCkgewotICAgICAgICAgICAgZnJhbWUtPnN1
Ym1pdEZvcm0oICJwb3N0IiwgbV91cmwuZGVwcmVjYXRlZFN0cmluZygpLCBmb3JtX2RhdGEsCisg
ICAgICAgIGlmKG1fcG9zdCkKKyAgICAgICAgICAgIGZyYW1lLT5zdWJtaXRGb3JtKCJwb3N0Iiwg
bV91cmwuZGVwcmVjYXRlZFN0cmluZygpLCBmb3JtX2RhdGEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fdGFyZ2V0LmRlcHJlY2F0ZWRTdHJpbmcoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jdHlwZSgpLmRlcHJlY2F0ZWRTdHJpbmco
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnkoKS5kZXBy
ZWNhdGVkU3RyaW5nKCkgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IGZyYW1lLT5zdWJtaXRGb3JtKCAiZ2V0IiwgbV91cmwuZGVwcmVjYXRlZFN0cmluZygpLCBmb3Jt
X2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdGFyZ2V0LmRl
cHJlY2F0ZWRTdHJpbmcoKSApOwotICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvdW5kYXJ5KCkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZnJhbWUtPnN1Ym1pdEZvcm0oImdldCIsIG1fdXJsLmRlcHJlY2F0ZWRT
dHJpbmcoKSwgZm9ybV9kYXRhLCBtX3RhcmdldC5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIH0K
IAotICAgIGlmIChuZWVkQnV0dG9uQWN0aXZhdGlvbiAmJiBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRC
dXR0b24pIHsKKyAgICBpZiAobmVlZEJ1dHRvbkFjdGl2YXRpb24gJiYgZmlyc3RTdWNjZXNzZnVs
U3VibWl0QnV0dG9uKQogICAgICAgICBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24tPnNldEFj
dGl2YXRlZFN1Ym1pdChmYWxzZSk7Ci0gICAgfQogICAgIAogICAgIG1fZG9pbmdzdWJtaXQgPSBt
X2luc3VibWl0ID0gZmFsc2U7CiB9CiAKLXZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZXNldCggICkK
K3ZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZXNldCgpCiB7CiAgICAgRnJhbWUgKmZyYW1lID0gZ2V0
RG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZihtX2lucmVzZXQgfHwgIWZyYW1lKSByZXR1cm47
CisgICAgaWYgKG1faW5yZXNldCB8fCAhZnJhbWUpCisgICAgICAgIHJldHVybjsKIAogICAgIG1f
aW5yZXNldCA9IHRydWU7CiAKQEAgLTQxOSw4ICs0MTMsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVu
dDo6cmVzZXQoICApCiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBhY3Rp
b25BdHRyKSAKLSAgICB7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBhY3Rpb25BdHRyKSB7CiAg
ICAgICAgIGJvb2wgb2xkVVJMV2FzU2VjdXJlID0gZm9ybVdvdWxkSGF2ZVNlY3VyZVN1Ym1pc3Np
b24obV91cmwpOwogICAgICAgICBtX3VybCA9IFdlYkNvcmU6OnBhcnNlVVJMKGF0dHItPnZhbHVl
KCkpOwogICAgICAgICBib29sIG5ld1VSTElzU2VjdXJlID0gZm9ybVdvdWxkSGF2ZVNlY3VyZVN1
Ym1pc3Npb24obV91cmwpOwpAQCAtNDMxLDI4ICs0MjQsMjggQEAgdm9pZCBIVE1MRm9ybUVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IGdldERvY3VtZW50KCktPnNlY3VyZUZvcm1SZW1vdmVkKCk7CiAgICAgfQotICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSB0YXJnZXRBdHRyKSB7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IHRhcmdldEF0dHIpCiAgICAgICAgIG1fdGFyZ2V0ID0gYXR0ci0+dmFsdWUoKTsKLSAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBtZXRob2RBdHRyKSB7CisgICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG1ldGhvZEF0dHIpIHsKICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGF0dHItPnZhbHVlKCksICJwb3N0IikpCiAgICAgICAgICAgICBtX3Bvc3QgPSB0cnVlOwogICAg
ICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiZ2V0IikpCiAg
ICAgICAgICAgICBtX3Bvc3QgPSBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBlbmN0eXBlQXR0cikgeworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGVuY3R5cGVB
dHRyKQogICAgICAgICBwYXJzZUVuY3R5cGUoYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gYWNjZXB0X2NoYXJzZXRBdHRyKSB7CisgICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IGFjY2VwdF9jaGFyc2V0QXR0cikKICAgICAgICAgLy8gc3BhY2Ugc2VwYXJh
dGVkIGxpc3Qgb2YgY2hhcnNldHMgdGhlIHNlcnZlcgogICAgICAgICAvLyBhY2NlcHRzIC0gc2Vl
IHJmYzIwNDUKICAgICAgICAgbV9hY2NlcHRjaGFyc2V0ID0gYXR0ci0+dmFsdWUoKTsKLSAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhY2NlcHRBdHRyKSB7CisgICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IGFjY2VwdEF0dHIpIHsKICAgICAgICAgLy8gaWdub3JlIHRoaXMgb25lIGZv
ciB0aGUgbW9tZW50Li4uCi0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYXV0b2NvbXBs
ZXRlQXR0cikgeworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGF1dG9jb21wbGV0ZUF0
dHIpCiAgICAgICAgIG1fYXV0b2NvbXBsZXRlID0gIWVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZh
bHVlKCksICJvZmYiKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnN1Ym1pdEF0
dHIpIHsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zdWJtaXRBdHRyKQogICAgICAg
ICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihzdWJtaXRFdmVudCwgYXR0cik7Ci0gICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gb25yZXNldEF0dHIpIHsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gb25yZXNldEF0dHIpCiAgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKHJlc2V0RXZl
bnQsIGF0dHIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7Cisg
ICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7CiAgICAgICAgIFN0cmluZyBu
ZXdOYW1lQXR0ciA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGlmIChpbkRvY3VtZW50KCkgJiYg
Z2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICAgICAgSFRNTERvY3Vt
ZW50ICpkb2N1bWVudCA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihnZXREb2N1bWVudCgp
KTsKSW5kZXg6IHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRm
b3JtL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAxMzM5MykKKysrIHBsYXRmb3JtL0dyYXBo
aWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgIGNsYXNzIEZvbnQ7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0UHJp
dmF0ZTsKKyAgICBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CiAgICAgY2xh
c3MgSW50UG9pbnQ7CiAgICAgY2xhc3MgSW50UG9pbnRBcnJheTsKIApAQCAtOTEsMzIgKzkyLDMx
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzYXZlKCk7CiAgICAgICAgIHZv
aWQgcmVzdG9yZSgpOwogICAgICAgICAKLSAgICAgICAgdm9pZCBkcmF3UmVjdChpbnQsIGludCwg
aW50LCBpbnQpOwotICAgICAgICB2b2lkIGRyYXdMaW5lKGludCwgaW50LCBpbnQsIGludCk7Ci0g
ICAgICAgIHZvaWQgZHJhd0VsbGlwc2UoaW50LCBpbnQsIGludCwgaW50KTsKKyAgICAgICAgdm9p
ZCBkcmF3UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZvaWQgZHJhd0xpbmUoY29uc3Qg
SW50UG9pbnQmLCBjb25zdCBJbnRQb2ludCYpOworICAgICAgICB2b2lkIGRyYXdFbGxpcHNlKGNv
bnN0IEludFJlY3QmKTsKICAgICAgICAgdm9pZCBkcmF3QXJjKGludCwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQpOwogICAgICAgICB2b2lkIGRyYXdDb252ZXhQb2x5Z29uKGNvbnN0IEludFBvaW50
QXJyYXkmKTsKIAotICAgICAgICB2b2lkIGZpbGxSZWN0KGludCwgaW50LCBpbnQsIGludCwgY29u
c3QgQnJ1c2gmKTsKICAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBJbnRSZWN0JiwgY29uc3Qg
QnJ1c2gmKTsKIAogICAgICAgICB2b2lkIGRyYXdJbWFnZUF0UG9pbnQoSW1hZ2UqLCBjb25zdCBJ
bnRQb2ludCYsIEltYWdlOjpDb21wb3NpdGVPcGVyYXRvciA9IEltYWdlOjpDb21wb3NpdGVTb3Vy
Y2VPdmVyKTsKICAgICAgICAgdm9pZCBkcmF3SW1hZ2VJblJlY3QoSW1hZ2UqLCBjb25zdCBJbnRS
ZWN0JiwgSW1hZ2U6OkNvbXBvc2l0ZU9wZXJhdG9yID0gSW1hZ2U6OkNvbXBvc2l0ZVNvdXJjZU92
ZXIpOwogCi0gICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgaW50IHgsIGludCB5LCAKKyAg
ICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYsIAogICAgICAgICAg
ICAgaW50IHN4ID0gMCwgaW50IHN5ID0gMCwgaW50IHN3ID0gLTEsIGludCBzaCA9IC0xLAogICAg
ICAgICAgICAgSW1hZ2U6OkNvbXBvc2l0ZU9wZXJhdG9yID0gSW1hZ2U6OkNvbXBvc2l0ZVNvdXJj
ZU92ZXIsIAogICAgICAgICAgICAgdm9pZCogbmF0aXZlRGF0YSA9IDApOwotICAgICAgICB2b2lk
IGRyYXdJbWFnZShJbWFnZSosIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAorICAgICAgICB2
b2lkIGRyYXdJbWFnZShJbWFnZSosIGNvbnN0IEludFJlY3QmLAogICAgICAgICAgICAgaW50IHN4
ID0gMCwgaW50IHN5ID0gMCwgaW50IHN3ID0gLTEsIGludCBzaCA9IC0xLAogICAgICAgICAgICAg
SW1hZ2U6OkNvbXBvc2l0ZU9wZXJhdG9yID0gSW1hZ2U6OkNvbXBvc2l0ZVNvdXJjZU92ZXIsIAog
ICAgICAgICAgICAgdm9pZCogbmF0aXZlRGF0YSA9IDApOwotICAgICAgICB2b2lkIGRyYXdGbG9h
dEltYWdlKEltYWdlKiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdywgZmxvYXQgaCwKKyAgICAg
ICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBjb25zdCBGbG9hdFJlY3QmLAogICAgICAgICAgICAg
ZmxvYXQgc3ggPSAwLCBmbG9hdCBzeSA9IDAsIGZsb2F0IHN3ID0gLTEsIGZsb2F0IHNoID0gLTEs
CiAgICAgICAgICAgICBJbWFnZTo6Q29tcG9zaXRlT3BlcmF0b3IgPSBJbWFnZTo6Q29tcG9zaXRl
U291cmNlT3ZlciwgCiAgICAgICAgICAgICB2b2lkKiBuYXRpdmVEYXRhID0gMCk7Ci0gICAgICAg
IHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCBzeCA9
IDAsIGludCBzeSA9IDAsIHZvaWQqIG5hdGl2ZURhdGEgPSAwKTsKLSAgICAgICAgdm9pZCBkcmF3
U2NhbGVkQW5kVGlsZWRJbWFnZShJbWFnZSosIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQs
IGludCwgaW50LCAKKyAgICAgICAgdm9pZCBkcmF3VGlsZWRJbWFnZShJbWFnZSosIGNvbnN0IElu
dFJlY3QmIGRlc3QsIGludCBzeCA9IDAsIGludCBzeSA9IDAsIHZvaWQqIG5hdGl2ZURhdGEgPSAw
KTsKKyAgICAgICAgdm9pZCBkcmF3U2NhbGVkQW5kVGlsZWRJbWFnZShJbWFnZSosIGNvbnN0IElu
dFJlY3QmLCBpbnQsIGludCwgaW50LCBpbnQsIAogICAgICAgICAgICAgSW1hZ2U6OlRpbGVSdWxl
IGhSdWxlID0gSW1hZ2U6OlN0cmV0Y2hUaWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUgPSBJbWFn
ZTo6U3RyZXRjaFRpbGUsCiAgICAgICAgICAgICB2b2lkKiBuYXRpdmVEYXRhID0gMCk7CiAKQEAg
LTEzNiwxMyArMTM2LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgaW50IG1pc3Nw
ZWxsaW5nTGluZVRoaWNrbmVzcygpIGNvbnN0OwogCiAgICAgICAgIENvbG9yIHNlbGVjdGVkVGV4
dEJhY2tncm91bmRDb2xvcigpIGNvbnN0OwotICAgICAgICB2b2lkIHNldFVzZXNJbmFjdGl2ZVRl
eHRCYWNrZ3JvdW5kQ29sb3IoYm9vbCB1KSB7IG1fdXNlc0luYWN0aXZlVGV4dEJhY2tncm91bmRD
b2xvciA9IHU7IH0KKyAgICAgICAgdm9pZCBzZXRVc2VzSW5hY3RpdmVUZXh0QmFja2dyb3VuZENv
bG9yKGJvb2wpOworICAgICAgICBib29sIHVzZXNJbmFjdGl2ZVRleHRCYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIGJvb2wgcGFpbnRpbmdEaXNhYmxlZCgpIGNvbnN0
OwogICAgICAgICB2b2lkIHNldFBhaW50aW5nRGlzYWJsZWQoYm9vbCk7CiAgICAgICAgIAotICAg
ICAgICBib29sIHVwZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gbV91cGRhdGlu
Z0NvbnRyb2xUaW50czsgfQotICAgICAgICB2b2lkIHNldFVwZGF0aW5nQ29udHJvbFRpbnRzKGJv
b2wgYikgeyBzZXRQYWludGluZ0Rpc2FibGVkKGIpOyBtX3VwZGF0aW5nQ29udHJvbFRpbnRzID0g
YjsgfQorICAgICAgICBib29sIHVwZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3Q7CisgICAgICAg
IHZvaWQgc2V0VXBkYXRpbmdDb250cm9sVGludHMoYm9vbCk7CiAKICAgICAgICAgdm9pZCBiZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwogICAgICAgICB2b2lkIGVuZFRyYW5z
cGFyZW5jeUxheWVyKCk7CkBAIC0xNzQsMTkgKzE3NSwyNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHN0YXRpYyBLUmVuZGVyaW5nRGV2aWNlKiByZW5kZXJpbmdEZXZpY2UoKTsKICNl
bmRpZgogCi0gICAgICAgIGJvb2wgcHJpbnRpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzRm9yUHJp
bnRpbmc7IH0KKyAgICAgICAgYm9vbCBwcmludGluZygpIGNvbnN0OwogCiBwcml2YXRlOgogICAg
ICAgICB2b2lkIHNldENvbG9yRnJvbUJydXNoKCk7CiAgICAgICAgIHZvaWQgc2V0Q29sb3JGcm9t
UGVuKCk7Ci0KLSAgICAgICAgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogbV9kYXRhOwotICAgICAg
ICBWZWN0b3I8SW50UmVjdD4gbV9mb2N1c1JpbmdSZWN0czsKLSAgICAgICAgaW50IG1fZm9jdXNS
aW5nV2lkdGg7Ci0gICAgICAgIGludCBtX2ZvY3VzUmluZ09mZnNldDsKLSAgICAgICAgYm9vbCBt
X2lzRm9yUHJpbnRpbmc7Ci0gICAgICAgIGJvb2wgbV91c2VzSW5hY3RpdmVUZXh0QmFja2dyb3Vu
ZENvbG9yOwotICAgICAgICBib29sIG1fdXBkYXRpbmdDb250cm9sVGludHM7CisgICAgICAgIAor
ICAgICAgICB2b2lkIHNhdmVQbGF0Zm9ybVN0YXRlKCk7CisgICAgICAgIHZvaWQgcmVzdG9yZVBs
YXRmb3JtU3RhdGUoKTsKKyAgICAgICAgCisgICAgICAgIGludCBmb2N1c1JpbmdXaWR0aCgpIGNv
bnN0OworICAgICAgICBpbnQgZm9jdXNSaW5nT2Zmc2V0KCkgY29uc3Q7CisgICAgICAgIGNvbnN0
IFZlY3RvcjxJbnRSZWN0PiYgZm9jdXNSaW5nUmVjdHMoKSBjb25zdDsKKyAgICAgICAgCisgICAg
ICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBjcmVhdGVHcmFwaGljc0NvbnRleHRQ
cml2YXRlKCk7CisgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2
YXRlKEdyYXBoaWNzQ29udGV4dFByaXZhdGUqKTsKKyAgICAgICAgCisgICAgICAgIEdyYXBoaWNz
Q29udGV4dFByaXZhdGUqIG1fY29tbW9uOworICAgICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUqIG1fZGF0YTsKICAgICB9OwogCiB9CkluZGV4OiBwbGF0Zm9ybS9tYWMvR3JhcGhp
Y3NDb250ZXh0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL21hYy9HcmFwaGljc0NvbnRl
eHRNYWMubW0JKHJldmlzaW9uIDEzMzkzKQorKysgcGxhdGZvcm0vbWFjL0dyYXBoaWNzQ29udGV4
dE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDgsMjAgKzQ4LDExIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIC8vIGNhbGxzIGluIHRoaXMgZmlsZSBhcmUgYWxsIGV4Y2VwdGlvbi1zYWZlLCBzbyB3
ZSBkb24ndCBibG9jawogLy8gZXhjZXB0aW9ucyBmb3IgdGhvc2UuCiAKLXN0cnVjdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSB7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSA6IHBhaW50aW5nRGlz
YWJsZWQoZmFsc2UpIHsgfQotICAgIEZvbnQgZm9udDsKLSAgICBQZW4gcGVuOwotICAgIEJydXNo
IGJydXNoOwotICAgIGJvb2wgcGFpbnRpbmdEaXNhYmxlZDsKLX07Ci0KLXN0cnVjdCBHcmFwaGlj
c0NvbnRleHRQcml2YXRlIHsKLSAgICBHcmFwaGljc0NvbnRleHRQcml2YXRlKCk7Ci0gICAgfkdy
YXBoaWNzQ29udGV4dFByaXZhdGUoKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIHN0YXRl
OyAgICAKLSAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0U3RhdGU+IHN0YWNrOworc3RydWN0IEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSB7CisgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKCk7CisgICAgfkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpOworICAg
IAogICAgIGlkIDxXZWJDb3JlVGV4dFJlbmRlcmVyPiB0ZXh0UmVuZGVyZXI7CiAgICAgRm9udCB0
ZXh0UmVuZGVyZXJGb250OwogI2lmIFNWR19TVVBQT1JUCkBAIC03MCwxOTIgKzYxLDExMiBAQCBz
dHJ1Y3QgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSB7CiB9OwogCiAvLyBBIGZpbGxSZWN0IGhlbHBl
ciB0byB3b3JrIGFyb3VuZCB0aGUgZmFjdCB0aGF0IE5TUmVjdEZpbGwgdXNlcyBjb3B5IG1vZGUs
IG5vdCBzb3VyY2Ugb3Zlci4KLXN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUmVjdFNvdXJjZU92ZXIo
ZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdywgZmxvYXQgaCwgY29uc3QgQ29sb3ImIGNvbCkKK3N0
YXRpYyBpbmxpbmUgdm9pZCBmaWxsUmVjdFNvdXJjZU92ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sKQogewogICAgIFtuc0NvbG9yKGNvbCkgc2V0XTsKLSAgICBOU1Jl
Y3RGaWxsVXNpbmdPcGVyYXRpb24oTlNNYWtlUmVjdCh4LCB5LCB3LCBoKSwgTlNDb21wb3NpdGVT
b3VyY2VPdmVyKTsKKyAgICBOU1JlY3RGaWxsVXNpbmdPcGVyYXRpb24ocmVjdCwgTlNDb21wb3Np
dGVTb3VyY2VPdmVyKTsKIH0KIAotCi1HcmFwaGljc0NvbnRleHRQcml2YXRlOjpHcmFwaGljc0Nv
bnRleHRQcml2YXRlKCkKK0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKCkKICAgICA6IHRleHRSZW5kZXJlcigwKSAKIHsKIH0KIAot
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFByaXZhdGUoKQorR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KCkKIHsKICAgICBLV1FSZWxlYXNlKHRleHRSZW5kZXJlcik7CiB9CiAKIEdyYXBoaWNzQ29udGV4
dDo6R3JhcGhpY3NDb250ZXh0KCkKLSAgICA6IG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UHJp
dmF0ZSkKLSAgICAsIG1fZm9jdXNSaW5nV2lkdGgoMCkKLSAgICAsIG1fZm9jdXNSaW5nT2Zmc2V0
KDApCi0gICAgLCBtX2lzRm9yUHJpbnRpbmcoZmFsc2UpCi0gICAgLCBtX3VzZXNJbmFjdGl2ZVRl
eHRCYWNrZ3JvdW5kQ29sb3IoZmFsc2UpCi0gICAgLCBtX3VwZGF0aW5nQ29udHJvbFRpbnRzKGZh
bHNlKQorICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQorICAg
ICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCiB7CiB9CiAKIEdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KGJvb2wgZm9yUHJpbnRpbmcpCi0gICAgOiBt
X2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFByaXZhdGUpCi0gICAgLCBtX2ZvY3VzUmluZ1dpZHRo
KDApCi0gICAgLCBtX2ZvY3VzUmluZ09mZnNldCgwKQotICAgICwgbV9pc0ZvclByaW50aW5nKGZv
clByaW50aW5nKQotICAgICwgbV91c2VzSW5hY3RpdmVUZXh0QmFja2dyb3VuZENvbG9yKGZhbHNl
KQotICAgICwgbV91cGRhdGluZ0NvbnRyb2xUaW50cyhmYWxzZSkKKyAgICA6IG1fY29tbW9uKGNy
ZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKKyAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKQogewogfQogCiBHcmFwaGljc0NvbnRleHQ6On5HcmFwaGlj
c0NvbnRleHQoKQogeworICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9u
KTsKICAgICBkZWxldGUgbV9kYXRhOwogfQogCi1jb25zdCBGb250JiBHcmFwaGljc0NvbnRleHQ6
OmZvbnQoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEtPnN0YXRlLmZvbnQ7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGb250KGNvbnN0IEZvbnQmIGFGb250KQotewotICAgIG1f
ZGF0YS0+c3RhdGUuZm9udCA9IGFGb250OwotfQotCi1jb25zdCBQZW4mIEdyYXBoaWNzQ29udGV4
dDo6cGVuKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5zdGF0ZS5wZW47Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQZW4oY29uc3QgUGVuJiBwZW4pCi17Ci0gICAgbV9kYXRh
LT5zdGF0ZS5wZW4gPSBwZW47Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQZW4oUGVu
OjpQZW5TdHlsZSBzdHlsZSkKLXsKLSAgICBtX2RhdGEtPnN0YXRlLnBlbi5zZXRTdHlsZShzdHls
ZSk7Ci0gICAgbV9kYXRhLT5zdGF0ZS5wZW4uc2V0Q29sb3IoQ29sb3I6OmJsYWNrKTsKLSAgICBt
X2RhdGEtPnN0YXRlLnBlbi5zZXRXaWR0aCgwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBlbihSR0JBMzIgcmdiKQotewotICAgIG1fZGF0YS0+c3RhdGUucGVuLnNldFN0eWxlKFBl
bjo6U29saWRMaW5lKTsKLSAgICBtX2RhdGEtPnN0YXRlLnBlbi5zZXRDb2xvcihyZ2IpOwotICAg
IG1fZGF0YS0+c3RhdGUucGVuLnNldFdpZHRoKDApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0QnJ1c2goY29uc3QgQnJ1c2gmIGJydXNoKQotewotICAgIG1fZGF0YS0+c3RhdGUuYnJ1
c2ggPSBicnVzaDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEJydXNoKEJydXNoOjpC
cnVzaFN0eWxlIHN0eWxlKQotewotICAgIG1fZGF0YS0+c3RhdGUuYnJ1c2guc2V0U3R5bGUoc3R5
bGUpOwotICAgIG1fZGF0YS0+c3RhdGUuYnJ1c2guc2V0Q29sb3IoQ29sb3I6OmJsYWNrKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEJydXNoKFJHQkEzMiByZ2IpCi17Ci0gICAgbV9k
YXRhLT5zdGF0ZS5icnVzaC5zZXRTdHlsZShCcnVzaDo6U29saWRQYXR0ZXJuKTsKLSAgICBtX2Rh
dGEtPnN0YXRlLmJydXNoLnNldENvbG9yKHJnYik7Ci19Ci0KLWNvbnN0IEJydXNoJiBHcmFwaGlj
c0NvbnRleHQ6OmJydXNoKCkgY29uc3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZv
cm1TdGF0ZSgpCiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+c3RhdGUuYnJ1c2g7CisgICAgW05TR3Jh
cGhpY3NDb250ZXh0IHNhdmVHcmFwaGljc1N0YXRlXTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNhdmUoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkK
IHsKLSAgICBpZiAobV9kYXRhLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2RhdGEtPnN0YWNrLmFwcGVuZChtX2RhdGEtPnN0YXRlKTsKLQotICAgIFtO
U0dyYXBoaWNzQ29udGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07IAotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6cmVzdG9yZSgpCi17Ci0gICAgaWYgKG1fZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNh
YmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZGF0YS0+c3RhY2suaXNFbXB0eSgp
KSB7Ci0gICAgICAgIExPR19FUlJPUigiRVJST1Igdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmUoKSBzdGFjayBpcyBlbXB0eSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fZGF0
YS0+c3RhdGUgPSBtX2RhdGEtPnN0YWNrLmxhc3QoKTsKLSAgICBtX2RhdGEtPnN0YWNrLnJlbW92
ZUxhc3QoKTsKLSAgICAgCiAgICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVHcmFwaGljc1N0
YXRlXTsKIH0KIAogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJv
cmRlci4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChpbnQgeCwgaW50IHksIGludCB3
LCBpbnQgaCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewotICAgIGlmIChtX2RhdGEtPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQpCisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAgCi0gICAgaWYg
KG1fZGF0YS0+c3RhdGUuYnJ1c2guc3R5bGUoKSAhPSBCcnVzaDo6Tm9CcnVzaCkKLSAgICAgICAg
ZmlsbFJlY3RTb3VyY2VPdmVyKHgsIHksIHcsIGgsIG1fZGF0YS0+c3RhdGUuYnJ1c2guY29sb3Io
KSk7CisgICAgaWYgKGJydXNoKCkuc3R5bGUoKSAhPSBCcnVzaDo6Tm9CcnVzaCkKKyAgICAgICAg
ZmlsbFJlY3RTb3VyY2VPdmVyKHJlY3QsIGJydXNoKCkuY29sb3IoKSk7CiAKLSAgICBpZiAobV9k
YXRhLT5zdGF0ZS5wZW4uc3R5bGUoKSAhPSBQZW46OlBlbjo6Tm9QZW4pIHsKKyAgICBpZiAocGVu
KCkuc3R5bGUoKSAhPSBQZW46OlBlbjo6Tm9QZW4pIHsKICAgICAgICAgc2V0Q29sb3JGcm9tUGVu
KCk7Ci0gICAgICAgIE5TRnJhbWVSZWN0KE5TTWFrZVJlY3QoeCwgeSwgdywgaCkpOworICAgICAg
ICBOU0ZyYW1lUmVjdChyZWN0KTsKICAgICB9CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRDb2xvckZyb21CcnVzaCgpCiB7Ci0gICAgW25zQ29sb3IobV9kYXRhLT5zdGF0ZS5icnVzaC5j
b2xvcigpKSBzZXRdOworICAgIFtuc0NvbG9yKGJydXNoKCkuY29sb3IoKSkgc2V0XTsKIH0KICAg
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q29sb3JGcm9tUGVuKCkKIHsKLSAgICBbbnNDb2xv
cihtX2RhdGEtPnN0YXRlLnBlbi5jb2xvcigpKSBzZXRdOworICAgIFtuc0NvbG9yKHBlbigpLmNv
bG9yKCkpIHNldF07CiB9CiAgIAogICAvLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRl
cnMuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoaW50IHgxLCBpbnQgeTEsIGludCB4
MiwgaW50IHkyKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludFBvaW50
JiBwb2ludDEsIGNvbnN0IEludFBvaW50JiBwb2ludDIpCiB7Ci0gICAgaWYgKG1fZGF0YS0+c3Rh
dGUucGFpbnRpbmdEaXNhYmxlZCkKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBQZW46OlBlblN0eWxlIHBlblN0eWxlID0gbV9kYXRhLT5zdGF0ZS5w
ZW4uc3R5bGUoKTsKKyAgICBQZW46OlBlblN0eWxlIHBlblN0eWxlID0gcGVuKCkuc3R5bGUoKTsK
ICAgICBpZiAocGVuU3R5bGUgPT0gUGVuOjpQZW46Ok5vUGVuKQogICAgICAgICByZXR1cm47Ci0g
ICAgZmxvYXQgd2lkdGggPSBtX2RhdGEtPnN0YXRlLnBlbi53aWR0aCgpOworICAgIGZsb2F0IHdp
ZHRoID0gcGVuKCkud2lkdGgoKTsKICAgICBpZiAod2lkdGggPCAxKQogICAgICAgICB3aWR0aCA9
IDE7CiAKLSAgICBOU1BvaW50IHAxID0gTlNNYWtlUG9pbnQoeDEsIHkxKTsKLSAgICBOU1BvaW50
IHAyID0gTlNNYWtlUG9pbnQoeDIsIHkyKTsKKyAgICBOU1BvaW50IHAxID0gcG9pbnQxOworICAg
IE5TUG9pbnQgcDIgPSBwb2ludDI7CisgICAgYm9vbCBpc1ZlcnRpY2FsTGluZSA9IChwMS54ID09
IHAyLngpOwogICAgIAogICAgIC8vIEZvciBvZGQgd2lkdGhzLCB3ZSBhZGQgaW4gMC41IHRvIHRo
ZSBhcHByb3ByaWF0ZSB4L3kgc28gdGhhdCB0aGUgZmxvYXQgYXJpdGhtZXRpYwogICAgIC8vIHdv
cmtzIG91dC4gIEZvciBleGFtcGxlLCB3aXRoIGEgYm9yZGVyIHdpZHRoIG9mIDMsIEtIVE1MIHdp
bGwgcGFzcyB1cyAoeTEreTIpLzIsIGUuZy4sCiAgICAgLy8gKDUwKzUzKS8yID0gMTAzLzIgPSA1
MSB3aGVuIHdlIHdhbnQgNTEuNS4gIEl0IGlzIGFsd2F5cyB0cnVlIHRoYXQgYW4gZXZlbiB3aWR0
aCBnYXZlCiAgICAgLy8gdXMgYSBwZXJmZWN0IHBvc2l0aW9uLCBidXQgYW4gb2RkIHdpZHRoIGdh
dmUgdXMgYSBwb3NpdGlvbiB0aGF0IGlzIG9mZiBieSBleGFjdGx5IDAuNS4KICAgICBpZiAocGVu
U3R5bGUgPT0gUGVuOjpEb3RMaW5lIHx8IHBlblN0eWxlID09IFBlbjo6RGFzaExpbmUpIHsKLSAg
ICAgICAgaWYgKHgxID09IHgyKSB7CisgICAgICAgIGlmIChpc1ZlcnRpY2FsTGluZSkgewogICAg
ICAgICAgICAgcDEueSArPSB3aWR0aDsKICAgICAgICAgICAgIHAyLnkgLT0gd2lkdGg7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSB7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwMS54
ICs9IHdpZHRoOwogICAgICAgICAgICAgcDIueCAtPSB3aWR0aDsKICAgICAgICAgfQogICAgIH0K
ICAgICAKICAgICBpZiAoKChpbnQpd2lkdGgpJTIpIHsKLSAgICAgICAgaWYgKHgxID09IHgyKSB7
CisgICAgICAgIGlmIChpc1ZlcnRpY2FsTGluZSkgewogICAgICAgICAgICAgLy8gV2UncmUgYSB2
ZXJ0aWNhbCBsaW5lLiAgQWRqdXN0IG91ciB4LgogICAgICAgICAgICAgcDEueCArPSAwLjU7CiAg
ICAgICAgICAgICBwMi54ICs9IDAuNTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlJ3JlIGEgaG9yaXpvbnRhbCBsaW5lLiBBZGp1
c3Qgb3VyIHkuCiAgICAgICAgICAgICBwMS55ICs9IDAuNTsKICAgICAgICAgICAgIHAyLnkgKz0g
MC41OwpAQCAtMjg3LDE4ICsxOTgsMTkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
KGludCB4MSwgaQogICAgIGlmIChwYXRXaWR0aCkgewogICAgICAgICAvLyBEbyBhIHJlY3QgZmls
bCBvZiBvdXIgZW5kcG9pbnRzLiAgVGhpcyBlbnN1cmVzIHdlIGFsd2F5cyBoYXZlIHRoZQogICAg
ICAgICAvLyBhcHBlYXJhbmNlIG9mIGJlaW5nIGEgYm9yZGVyLiAgV2UgdGhlbiBkcmF3IHRoZSBh
Y3R1YWwgZG90dGVkL2Rhc2hlZCBsaW5lLgotICAgICAgICBpZiAoeDEgPT0geDIpIHsKLSAgICAg
ICAgICAgIGZpbGxSZWN0U291cmNlT3ZlcihwMS54LXdpZHRoLzIsIHAxLnktd2lkdGgsIHdpZHRo
LCB3aWR0aCwgbV9kYXRhLT5zdGF0ZS5wZW4uY29sb3IoKSk7Ci0gICAgICAgICAgICBmaWxsUmVj
dFNvdXJjZU92ZXIocDIueC13aWR0aC8yLCBwMi55LCB3aWR0aCwgd2lkdGgsIG1fZGF0YS0+c3Rh
dGUucGVuLmNvbG9yKCkpOworICAgICAgICBjb25zdCBDb2xvciYgcGVuQ29sb3IgPSBwZW4oKS5j
b2xvcigpOworICAgICAgICBpZiAoaXNWZXJ0aWNhbExpbmUpIHsKKyAgICAgICAgICAgIGZpbGxS
ZWN0U291cmNlT3ZlcihGbG9hdFJlY3QocDEueC13aWR0aC8yLCBwMS55LXdpZHRoLCB3aWR0aCwg
d2lkdGgpLCBwZW5Db2xvcik7CisgICAgICAgICAgICBmaWxsUmVjdFNvdXJjZU92ZXIoRmxvYXRS
ZWN0KHAyLngtd2lkdGgvMiwgcDIueSwgd2lkdGgsIHdpZHRoKSwgcGVuQ29sb3IpOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKHAxLngtd2lkdGgsIHAx
Lnktd2lkdGgvMiwgd2lkdGgsIHdpZHRoLCBtX2RhdGEtPnN0YXRlLnBlbi5jb2xvcigpKTsKLSAg
ICAgICAgICAgIGZpbGxSZWN0U291cmNlT3ZlcihwMi54LCBwMi55LXdpZHRoLzIsIHdpZHRoLCB3
aWR0aCwgbV9kYXRhLT5zdGF0ZS5wZW4uY29sb3IoKSk7CisgICAgICAgICAgICBmaWxsUmVjdFNv
dXJjZU92ZXIoRmxvYXRSZWN0KHAxLngtd2lkdGgsIHAxLnktd2lkdGgvMiwgd2lkdGgsIHdpZHRo
KSwgcGVuQ29sb3IpOworICAgICAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKEZsb2F0UmVjdChw
Mi54LCBwMi55LXdpZHRoLzIsIHdpZHRoLCB3aWR0aCksIHBlbkNvbG9yKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgLy8gRXhhbXBsZTogODAgcGl4ZWxzIHdpdGggYSB3aWR0aCBvZiAz
MCBwaXhlbHMuCiAgICAgICAgIC8vIFJlbWFpbmRlciBpcyAyMC4gIFRoZSBtYXhpbXVtIHBpeGVs
cyBvZiBsaW5lIHdlIGNvdWxkIHBhaW50CiAgICAgICAgIC8vIHdpbGwgYmUgNTAgcGl4ZWxzLgot
ICAgICAgICBpbnQgZGlzdGFuY2UgPSAoKHgxID09IHgyKSA/ICh5MiAtIHkxKSA6ICh4MiAtIHgx
KSkgLSAyKihpbnQpd2lkdGg7CisgICAgICAgIGludCBkaXN0YW5jZSA9IChpc1ZlcnRpY2FsTGlu
ZSA/IChpbnQpKHAyLnkgLSBwMS55KSA6IChpbnQpKHAyLnggLSBwMS54KSkgLSAyKihpbnQpd2lk
dGg7CiAgICAgICAgIGludCByZW1haW5kZXIgPSBkaXN0YW5jZSVwYXRXaWR0aDsKICAgICAgICAg
aW50IGNvdmVyYWdlID0gZGlzdGFuY2UtcmVtYWluZGVyOwogICAgICAgICBpbnQgbnVtU2VnbWVu
dHMgPSBjb3ZlcmFnZS9wYXRXaWR0aDsKQEAgLTM0MSwzOSArMjUzLDM4IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZShpbnQgeDEsIGkKIAogCiAvLyBUaGlzIG1ldGhvZCBpcyBvbmx5
IHVzZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBJbnRSZWN0JiByZWN0KQogewog
ICAgIC8vIEZJWE1FOiBDRyBhZGRlZCBDR0NvbnRleHRBZGRFbGxpcHNlaW5SZWN0IGluIFRpZ2Vy
LCBzbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBxdWl0ZSBlYXNpbHkgZHJhdyBhbiBlbGxpcHNlLgog
ICAgIC8vIFRoaXMgY29kZSBjYW4gb25seSBoYW5kbGUgY2lyY2xlcywgbm90IGVsbGlwc2VzLiBC
dXQga2h0bWwgb25seQogICAgIC8vIHVzZXMgaXQgZm9yIGNpcmNsZXMuCi0gICAgQVNTRVJUKHcg
PT0gaCk7CisgICAgQVNTRVJUKHJlY3Qud2lkdGgoKSA9PSByZWN0LmhlaWdodCgpKTsKIAotICAg
IGlmIChtX2RhdGEtPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQpCisgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IChDR0NvbnRleHRSZWYpW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0g
Z3JhcGhpY3NQb3J0XTsKICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7Ci0gICAgZmxv
YXQgciA9IChmbG9hdCl3IC8gMjsKLSAgICBDR0NvbnRleHRBZGRBcmMoY29udGV4dCwgeCArIHIs
IHkgKyByLCByLCAwLCAyKk1fUEksIHRydWUpOworICAgIGZsb2F0IHIgPSAoZmxvYXQpcmVjdC53
aWR0aCgpIC8gMjsKKyAgICBDR0NvbnRleHRBZGRBcmMoY29udGV4dCwgcmVjdC54KCkgKyByLCBy
ZWN0LnkoKSArIHIsIHIsIDAsIDIqTV9QSSwgdHJ1ZSk7CiAgICAgQ0dDb250ZXh0Q2xvc2VQYXRo
KGNvbnRleHQpOwogCi0gICAgaWYgKG1fZGF0YS0+c3RhdGUuYnJ1c2guc3R5bGUoKSAhPSBCcnVz
aDo6Tm9CcnVzaCkgeworICAgIGlmIChicnVzaCgpLnN0eWxlKCkgIT0gQnJ1c2g6Ok5vQnJ1c2gp
IHsKICAgICAgICAgc2V0Q29sb3JGcm9tQnJ1c2goKTsKLSAgICAgICAgaWYgKG1fZGF0YS0+c3Rh
dGUucGVuLnN0eWxlKCkgIT0gUGVuOjpOb1BlbikgeworICAgICAgICBpZiAocGVuKCkuc3R5bGUo
KSAhPSBQZW46Ok5vUGVuKSB7CiAgICAgICAgICAgICAvLyBzdHJva2UgYW5kIGZpbGwKICAgICAg
ICAgICAgIHNldENvbG9yRnJvbVBlbigpOwotICAgICAgICAgICAgdW5zaWduZWQgcGVuV2lkdGgg
PSBtX2RhdGEtPnN0YXRlLnBlbi53aWR0aCgpOworICAgICAgICAgICAgdW5zaWduZWQgcGVuV2lk
dGggPSBwZW4oKS53aWR0aCgpOwogICAgICAgICAgICAgaWYgKHBlbldpZHRoID09IDApIAogICAg
ICAgICAgICAgICAgIHBlbldpZHRoKys7CiAgICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lk
dGgoY29udGV4dCwgcGVuV2lkdGgpOwogICAgICAgICAgICAgQ0dDb250ZXh0RHJhd1BhdGgoY29u
dGV4dCwga0NHUGF0aEZpbGxTdHJva2UpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIENHQ29udGV4dEZpbGxQYXRoKGNvbnRleHQpOwotICAgICAgICB9CiAg
ICAgfQotICAgIGlmIChtX2RhdGEtPnN0YXRlLnBlbi5zdHlsZSgpICE9IFBlbjo6Tm9QZW4pIHsK
KyAgICBpZiAocGVuKCkuc3R5bGUoKSAhPSBQZW46Ok5vUGVuKSB7CiAgICAgICAgIHNldENvbG9y
RnJvbVBlbigpOwotICAgICAgICB1bnNpZ25lZCBwZW5XaWR0aCA9IG1fZGF0YS0+c3RhdGUucGVu
LndpZHRoKCk7CisgICAgICAgIHVuc2lnbmVkIHBlbldpZHRoID0gcGVuKCkud2lkdGgoKTsKICAg
ICAgICAgaWYgKHBlbldpZHRoID09IDApIAogICAgICAgICAgICAgcGVuV2lkdGgrKzsKICAgICAg
ICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQsIHBlbldpZHRoKTsKQEAgLTM4MiwxNSAr
MjkzLDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShpbnQgeCwKIH0KIAog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0FyYyAoaW50IHgsIGludCB5LCBpbnQgdywgaW50
IGgsIGludCBhLCBpbnQgYWxlbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QXJjKGludCB4
LCBpbnQgeSwgaW50IHcsIGludCBoLCBpbnQgYSwgaW50IGFsZW4pCiB7IAogICAgIC8vIE9ubHkg
c3VwcG9ydHMgYXJjIG9uIGNpcmNsZXMuICBUaGF0J3MgYWxsIGtodG1sIG5lZWRzLgogICAgIEFT
U0VSVCh3ID09IGgpOwogCi0gICAgaWYgKG1fZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZCkK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
aWYgKG1fZGF0YS0+c3RhdGUucGVuLnN0eWxlKCkgIT0gUGVuOjpOb1BlbikgeworICAgIGlmIChw
ZW4oKS5zdHlsZSgpICE9IFBlbjo6Tm9QZW4pIHsKICAgICAgICAgQ0dDb250ZXh0UmVmIGNvbnRl
eHQgPSAoQ0dDb250ZXh0UmVmKVtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGdy
YXBoaWNzUG9ydF07CiAgICAgICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKICAgICAg
ICAgCkBAIC00MDAsMTQgKzMxMSwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0FyYyAo
aW50IHgsIGluCiAgICAgICAgIENHQ29udGV4dEFkZEFyYyhjb250ZXh0LCB4ICsgciwgeSArIHIs
IHIsIC1mYSAqIE1fUEkvMTgwLCAtZmFsZW4gKiBNX1BJLzE4MCwgdHJ1ZSk7CiAgICAgICAgIAog
ICAgICAgICBzZXRDb2xvckZyb21QZW4oKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRo
KGNvbnRleHQsIG1fZGF0YS0+c3RhdGUucGVuLndpZHRoKCkpOworICAgICAgICBDR0NvbnRleHRT
ZXRMaW5lV2lkdGgoY29udGV4dCwgcGVuKCkud2lkdGgoKSk7CiAgICAgICAgIENHQ29udGV4dFN0
cm9rZVBhdGgoY29udGV4dCk7CiAgICAgfQogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnZleFBvbHlnb24oY29uc3QgSW50UG9pbnRBcnJheSYgcG9pbnRzKQogewotICAgIGlmICht
X2RhdGEtPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQpCisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW50IG5wb2ludHMgPSBwb2ludHMuc2l6ZSgpOwpA
QCAtNDI2LDE0ICszMzcsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5
Z29uKAogICAgICAgICBDR0NvbnRleHRBZGRMaW5lVG9Qb2ludChjb250ZXh0LCBwb2ludHNbaV0u
eCgpLCBwb2ludHNbaV0ueSgpKTsKICAgICBDR0NvbnRleHRDbG9zZVBhdGgoY29udGV4dCk7CiAK
LSAgICBpZiAobV9kYXRhLT5zdGF0ZS5icnVzaC5zdHlsZSgpICE9IEJydXNoOjpOb0JydXNoKSB7
CisgICAgaWYgKGJydXNoKCkuc3R5bGUoKSAhPSBCcnVzaDo6Tm9CcnVzaCkgewogICAgICAgICBz
ZXRDb2xvckZyb21CcnVzaCgpOwogICAgICAgICBDR0NvbnRleHRFT0ZpbGxQYXRoKGNvbnRleHQp
OwogICAgIH0KIAotICAgIGlmIChtX2RhdGEtPnN0YXRlLnBlbi5zdHlsZSgpICE9IFBlbjo6Tm9Q
ZW4pIHsKKyAgICBpZiAocGVuKCkuc3R5bGUoKSAhPSBQZW46Ok5vUGVuKSB7CiAgICAgICAgIHNl
dENvbG9yRnJvbVBlbigpOwotICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwg
bV9kYXRhLT5zdGF0ZS5wZW4ud2lkdGgoKSk7CisgICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0
aChjb250ZXh0LCBwZW4oKS53aWR0aCgpKTsKICAgICAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChj
b250ZXh0KTsKICAgICB9CiAKQEAgLTQ1NSwxNiArMzY2LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXQKICAgICBbW1dlYkNvcmVJbWFnZVJlbmRlcmVyRmFjdG9y
eSBzaGFyZWRGYWN0b3J5XSBzZXRDR0NvbXBvc2l0ZU9wZXJhdGlvbjpvcCBpbkNvbnRleHQ6Y29u
dGV4dF07CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmxvYXRJbWFnZShJbWFnZSog
aW1hZ2UsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHcsIGZsb2F0IGgsIAordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdCwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0
IHN3LCBmbG9hdCBzaCwgSW1hZ2U6OkNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
LCB2b2lkKiBjb250ZXh0KQogewotICAgIGlmIChtX2RhdGEtPnN0YXRlLnBhaW50aW5nRGlzYWJs
ZWQpCisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
ZmxvYXQgdHN3ID0gc3c7CiAgICAgZmxvYXQgdHNoID0gc2g7Ci0gICAgZmxvYXQgdHcgPSB3Owot
ICAgIGZsb2F0IHRoID0gaDsKKyAgICBmbG9hdCB0dyA9IGRlc3Qud2lkdGgoKTsKKyAgICBmbG9h
dCB0aCA9IGRlc3QuaGVpZ2h0KCk7CiAgICAgICAgIAogICAgIGlmICh0c3cgPT0gLTEpCiAgICAg
ICAgIHRzdyA9IGltYWdlLT53aWR0aCgpOwpAQCAtNDc2LDI4ICszODcsMjggQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdGbG9hdEltYWdlKEltYQogICAgIGlmICh0aCA9PSAtMSkKICAgICAg
ICAgdGggPSBpbWFnZS0+aGVpZ2h0KCk7CiAKLSAgICBpbWFnZS0+ZHJhd0luUmVjdChGbG9hdFJl
Y3QoeCwgeSwgdHcsIHRoKSwgRmxvYXRSZWN0KHN4LCBzeSwgdHN3LCB0c2gpLCBjb21wb3NpdGVP
cGVyYXRvciwgY29udGV4dCk7CisgICAgaW1hZ2UtPmRyYXdJblJlY3QoRmxvYXRSZWN0KGRlc3Qu
bG9jYXRpb24oKSwgRmxvYXRTaXplKHR3LCB0aCkpLCBGbG9hdFJlY3Qoc3gsIHN5LCB0c3csIHRz
aCksIGNvbXBvc2l0ZU9wZXJhdG9yLCBjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlKiBpbWFnZSwgaW50IHgsIGludCB5LCBpbnQgdywgaW50
IGgsIGludCBzeCwgaW50IHN5LCB2b2lkKiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdUaWxlZEltYWdlKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHN4
LCBpbnQgc3ksIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgaWYgKG1fZGF0YS0+c3RhdGUucGFpbnRp
bmdEaXNhYmxlZCkKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgaW1hZ2UtPnRpbGVJblJlY3QoRmxvYXRSZWN0KHgsIHksIHcsIGgpLCBGbG9h
dFBvaW50KHN4LCBzeSksIGNvbnRleHQpOworICAgIGltYWdlLT50aWxlSW5SZWN0KHJlY3QsIEZs
b2F0UG9pbnQoc3gsIHN5KSwgY29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3U2NhbGVkQW5kVGlsZWRJbWFnZShJbWFnZSogaW1hZ2UsIGludCB4LCBpbnQgeSwgaW50IHcs
IGludCBoLCBpbnQgc3gsIGludCBzeSwgaW50IHN3LCBpbnQgc2gsIAordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdTY2FsZWRBbmRUaWxlZEltYWdlKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVj
dCYgZGVzdCwgaW50IHN4LCBpbnQgc3ksIGludCBzdywgaW50IHNoLCAKICAgICBJbWFnZTo6VGls
ZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgdm9pZCogY29udGV4dCkKIHsKLSAg
ICBpZiAobV9kYXRhLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkKQorICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChoUnVsZSA9PSBJbWFnZTo6U3Ry
ZXRjaFRpbGUgJiYgdlJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlKQogICAgICAgICAvLyBKdXN0
IGRvIGEgc2NhbGUuCi0gICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIHgsIHksIHcsIGgs
IHN4LCBzeSwgc3csIHNoLCBJbWFnZTo6Q29tcG9zaXRlU291cmNlT3ZlciwgY29udGV4dCk7Cisg
ICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3QsIHN4LCBzeSwgc3csIHNoLCBJbWFn
ZTo6Q29tcG9zaXRlU291cmNlT3ZlciwgY29udGV4dCk7CiAKLSAgICBpbWFnZS0+c2NhbGVBbmRU
aWxlSW5SZWN0KEZsb2F0UmVjdCh4LCB5LCB3LCBoKSwgRmxvYXRSZWN0KHN4LCBzeSwgc3csIHNo
KSwgaFJ1bGUsIHZSdWxlLCBjb250ZXh0KTsKKyAgICBpbWFnZS0+c2NhbGVBbmRUaWxlSW5SZWN0
KGRlc3QsIEZsb2F0UmVjdChzeCwgc3ksIHN3LCBzaCksIGhSdWxlLCB2UnVsZSwgY29udGV4dCk7
CiB9CiAKIHN0YXRpYyBpbnQgZ2V0QmxlbmRlZENvbG9yQ29tcG9uZW50KGludCBjLCBpbnQgYSkK
QEAgLTUxMSw3ICs0MjIsNyBAQCBzdGF0aWMgaW50IGdldEJsZW5kZWRDb2xvckNvbXBvbmVudChp
bnQgCiAKIENvbG9yIEdyYXBoaWNzQ29udGV4dDo6c2VsZWN0ZWRUZXh0QmFja2dyb3VuZENvbG9y
KCkgY29uc3QKIHsKLSAgICBOU0NvbG9yICpjb2xvciA9IG1fdXNlc0luYWN0aXZlVGV4dEJhY2tn
cm91bmRDb2xvciA/IFtOU0NvbG9yIHNlY29uZGFyeVNlbGVjdGVkQ29udHJvbENvbG9yXSA6IFtO
U0NvbG9yIHNlbGVjdGVkVGV4dEJhY2tncm91bmRDb2xvcl07CisgICAgTlNDb2xvciAqY29sb3Ig
PSB1c2VzSW5hY3RpdmVUZXh0QmFja2dyb3VuZENvbG9yKCkgPyBbTlNDb2xvciBzZWNvbmRhcnlT
ZWxlY3RlZENvbnRyb2xDb2xvcl0gOiBbTlNDb2xvciBzZWxlY3RlZFRleHRCYWNrZ3JvdW5kQ29s
b3JdOwogICAgIC8vIHRoaXMgbmVlZHMgdG8gYWx3YXlzIHVzZSBkZXZpY2UgY29sb3JzcGFjZSBz
byBpdCBjYW4gZGUtY2FsaWJyYXRlIHRoZSBjb2xvciBmb3IKICAgICAvLyBDb2xvciB0byBwb3Nz
aWJseSByZWNhbGlicmF0ZSBpdAogICAgIGNvbG9yID0gW2NvbG9yIGNvbG9yVXNpbmdDb2xvclNw
YWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdOwpAQCAtNTI5LDIzICs0NDAsMTggQEAgQ29s
b3IgR3JhcGhpY3NDb250ZXh0OjpzZWxlY3RlZFRleHRCYWNrZwogICAgIHJldHVybiBjb2w7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChpbnQgeCwgaW50IHksIGludCB3LCBp
bnQgaCwgY29uc3QgQnJ1c2gmIGJydXNoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEJydXNoJiBicnVzaCkKIHsKLSAgICBpZiAobV9k
YXRhLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkKQorICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChicnVzaC5zdHlsZSgpID09IEJydXNoOjpTb2xp
ZFBhdHRlcm4pCi0gICAgICAgIGZpbGxSZWN0U291cmNlT3Zlcih4LCB5LCB3LCBoLCBicnVzaC5j
b2xvcigpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QsIGNvbnN0IEJydXNoJiBicnVzaCkKLXsKLSAgICBmaWxsUmVjdChyZWN0LngoKSwg
cmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgYnJ1c2gpOworICAgICAgICBm
aWxsUmVjdFNvdXJjZU92ZXIocmVjdCwgYnJ1c2guY29sb3IoKSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjphZGRDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKG1fZGF0
YS0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZCkKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBbTlNCZXppZXJQYXRoIGNsaXBSZWN0OnJlY3RdOwpAQCAt
NTU0LDcgKzQ2MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRDbGlwKGNvbnN0IEludFIK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYg
cmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVm
dCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQpCiB7Ci0gICAgaWYgKG1fZGF0YS0+c3RhdGUu
cGFpbnRpbmdEaXNhYmxlZCkKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBOZWVkIHN1ZmZpY2llbnQgd2lkdGggYW5kIGhlaWdodCB0byBjb250
YWluIHRoZXNlIGN1cnZlcy4gIFNhbml0eSBjaGVjayBvdXIgdG9wL2JvdHRvbQpAQCAtNjA1LDE2
ICs1MTEsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkUm91bmRlZFJlY3RDbGlwCiAgICAg
Q0dDb250ZXh0Q2xpcChjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBh
aW50aW5nRGlzYWJsZWQoYm9vbCBmKQotewotICAgIG1fZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNh
YmxlZCA9IGY7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpwYWludGluZ0Rpc2FibGVkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkOwotfQot
CiBDR0NvbnRleHRSZWYgR3JhcGhpY3NDb250ZXh0OjpjdXJyZW50Q0dDb250ZXh0KCkKIHsKICAg
ICByZXR1cm4gKENHQ29udGV4dFJlZilbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XSBncmFwaGljc1BvcnRdOwpAQCAtNjI5LDcgKzUyNSw3IEBAIEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0KiBHcmFwaGljc0NvbnRleHQKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBpZiAobV9kYXRhLT5zdGF0ZS5wYWlu
dGluZ0Rpc2FibGVkKQorICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGN1cnJlbnRDR0NvbnRleHQoKTsKICAgICBD
R0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwpAQCAtNjM5LDcgKzUzNSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUwKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAobV9kYXRhLT5zdGF0ZS5wYWludGlu
Z0Rpc2FibGVkKQorICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGN1cnJlbnRDR0NvbnRleHQoKTsKICAgICBDR0Nv
bnRleHRFbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0KTsKQEAgLTY0OCw3ICs1NDQsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRTaGFkb3coaW50IHgsIGludCB5LCBpbnQgYmx1ciwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIGlmIChtX2RhdGEtPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQpCisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIENoZWNrIGZvciBh
biBpbnZhbGlkIGNvbG9yLCBhcyB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvbG9yIHdhcyBub3Qgc2V0
IGZvciB0aGUgc2hhZG93CiAgICAgLy8gYW5kIHdlIHNob3VsZCB0aGVyZWZvcmUganVzdCB1c2Ug
dGhlIGRlZmF1bHQgc2hhZG93IGNvbG9yLgpAQCAtNjY3LDcgKzU2Myw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRTaGFkb3coaW50IHgsIGkKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
ZWFyU2hhZG93KCkKIHsKLSAgICBpZiAobV9kYXRhLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkKQor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBDR0NvbnRl
eHRSZWYgY29udGV4dCA9IGN1cnJlbnRDR0NvbnRleHQoKTsKICAgICBDR0NvbnRleHRTZXRTaGFk
b3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgTlVMTCk7CkBAIC02NzUsMTcgKzU3
MSwxOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3coKQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYg
KG1fZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZCkKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaW50IHJhZGl1cyA9IChtX2ZvY3VzUmluZ1dpZHRo
IC0gMSkgLyAyOwotICAgIGludCBvZmZzZXQgPSByYWRpdXMgKyBtX2ZvY3VzUmluZ09mZnNldDsK
KyAgICBpbnQgcmFkaXVzID0gKGZvY3VzUmluZ1dpZHRoKCkgLSAxKSAvIDI7CisgICAgaW50IG9m
ZnNldCA9IHJhZGl1cyArIGZvY3VzUmluZ09mZnNldCgpOwogICAgIENHQ29sb3JSZWYgY29sb3JS
ZWYgPSBjb2xvci5pc1ZhbGlkKCkgPyBjZ0NvbG9yKGNvbG9yKSA6IDA7CiAgICAgCiAgICAgQ0dN
dXRhYmxlUGF0aFJlZiBmb2N1c1JpbmdQYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOwotICAg
IHVuc2lnbmVkIHJlY3RDb3VudCA9IG1fZm9jdXNSaW5nUmVjdHMuc2l6ZSgpOworICAgIGNvbnN0
IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMgPSBmb2N1c1JpbmdSZWN0cygpOworICAgIHVuc2lnbmVk
IHJlY3RDb3VudCA9IHJlY3RzLnNpemUoKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcmVjdENvdW50OyBpKyspCi0gICAgICAgIENHUGF0aEFkZFJlY3QoZm9jdXNSaW5nUGF0
aCwgMCwgQ0dSZWN0SW5zZXQobV9mb2N1c1JpbmdSZWN0c1tpXSwgLW9mZnNldCwgLW9mZnNldCkp
OworICAgICAgICBDR1BhdGhBZGRSZWN0KGZvY3VzUmluZ1BhdGgsIDAsIENHUmVjdEluc2V0KHJl
Y3RzW2ldLCAtb2Zmc2V0LCAtb2Zmc2V0KSk7CiAgICAgCiAgICAgW1tXZWJDb3JlR3JhcGhpY3NC
cmlkZ2Ugc2hhcmVkQnJpZGdlXSBkcmF3Rm9jdXNSaW5nV2l0aFBhdGg6Zm9jdXNSaW5nUGF0aCBy
YWRpdXM6cmFkaXVzIGNvbG9yOmNvbG9yUmVmXTsKICAgICBDR0NvbG9yUmVsZWFzZShjb2xvclJl
Zik7CkluZGV4OiBwbGF0Zm9ybS9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBs
YXRmb3JtL0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDEzMzkzKQorKysgcGxhdGZvcm0v
R3JhcGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMzMgKzI2LDE5MSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCisjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCi0jaW5jbHVkZSAiRm9udC5oIgogI2lu
Y2x1ZGUgIldpZGdldC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSB7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSA6IHBhaW50aW5nRGlz
YWJsZWQoZmFsc2UpIHsgfQorICAgIEZvbnQgZm9udDsKKyAgICBQZW4gcGVuOworICAgIEJydXNo
IGJydXNoOworICAgIGJvb2wgcGFpbnRpbmdEaXNhYmxlZDsKK307CisgICAgICAgIAorc3RydWN0
IEdyYXBoaWNzQ29udGV4dFByaXZhdGUgeworICAgIEdyYXBoaWNzQ29udGV4dFByaXZhdGUoKTsK
KyAgICAKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBzdGF0ZTsKKyAgICBWZWN0b3I8R3JhcGhp
Y3NDb250ZXh0U3RhdGU+IHN0YWNrOworICAgIFZlY3RvcjxJbnRSZWN0PiBtX2ZvY3VzUmluZ1Jl
Y3RzOworICAgIGludCBtX2ZvY3VzUmluZ1dpZHRoOworICAgIGludCBtX2ZvY3VzUmluZ09mZnNl
dDsKKyAgICBib29sIG1faXNGb3JQcmludGluZzsKKyAgICBib29sIG1fdXNlc0luYWN0aXZlVGV4
dEJhY2tncm91bmRDb2xvcjsKKyAgICBib29sIG1fdXBkYXRpbmdDb250cm9sVGludHM7Cit9Owor
CitHcmFwaGljc0NvbnRleHRQcml2YXRlOjpHcmFwaGljc0NvbnRleHRQcml2YXRlKCkKKyAgICA6
IG1fZm9jdXNSaW5nV2lkdGgoMCkKKyAgICAsIG1fZm9jdXNSaW5nT2Zmc2V0KDApCisgICAgLCBt
X2lzRm9yUHJpbnRpbmcoZmFsc2UpCisgICAgLCBtX3VzZXNJbmFjdGl2ZVRleHRCYWNrZ3JvdW5k
Q29sb3IoZmFsc2UpCisgICAgLCBtX3VwZGF0aW5nQ29udHJvbFRpbnRzKGZhbHNlKQoreworfQor
CitHcmFwaGljc0NvbnRleHRQcml2YXRlKiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZUdyYXBoaWNz
Q29udGV4dFByaXZhdGUoKQoreworICAgIHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0UHJpdmF0
ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2
YXRlKEdyYXBoaWNzQ29udGV4dFByaXZhdGUqIGRlbGV0ZU1lKQoreworICAgIGRlbGV0ZSBkZWxl
dGVNZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKQoreworICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29tbW9uLT5zdGFjay5h
cHBlbmQobV9jb21tb24tPnN0YXRlKTsKKyAgICAKKyAgICBzYXZlUGxhdGZvcm1TdGF0ZSgpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpCit7CisgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY29tbW9uLT5zdGFjay5p
c0VtcHR5KCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFUlJPUiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6cmVzdG9yZSgpIHN0YWNrIGlzIGVtcHR5Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9jb21tb24tPnN0YXRlID0gbV9jb21tb24tPnN0YWNrLmxhc3QoKTsKKyAgICBtX2NvbW1v
bi0+c3RhY2sucmVtb3ZlTGFzdCgpOworICAgIAorICAgIHJlc3RvcmVQbGF0Zm9ybVN0YXRlKCk7
Cit9CisKK2NvbnN0IEZvbnQmIEdyYXBoaWNzQ29udGV4dDo6Zm9udCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5mb250OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0Rm9udChjb25zdCBGb250JiBhRm9udCkKK3sKKyAgICBtX2NvbW1vbi0+c3RhdGUuZm9udCA9
IGFGb250OworfQorCitjb25zdCBQZW4mIEdyYXBoaWNzQ29udGV4dDo6cGVuKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnBlbjsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBlbihjb25zdCBQZW4mIHBlbikKK3sKKyAgICBtX2NvbW1vbi0+c3RhdGUucGVuID0g
cGVuOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGVuKFBlbjo6UGVuU3R5bGUgc3R5
bGUpCit7CisgICAgbV9jb21tb24tPnN0YXRlLnBlbi5zZXRTdHlsZShzdHlsZSk7CisgICAgbV9j
b21tb24tPnN0YXRlLnBlbi5zZXRDb2xvcihDb2xvcjo6YmxhY2spOworICAgIG1fY29tbW9uLT5z
dGF0ZS5wZW4uc2V0V2lkdGgoMCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQZW4o
UkdCQTMyIHJnYikKK3sKKyAgICBtX2NvbW1vbi0+c3RhdGUucGVuLnNldFN0eWxlKFBlbjo6U29s
aWRMaW5lKTsKKyAgICBtX2NvbW1vbi0+c3RhdGUucGVuLnNldENvbG9yKHJnYik7CisgICAgbV9j
b21tb24tPnN0YXRlLnBlbi5zZXRXaWR0aCgwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldEJydXNoKGNvbnN0IEJydXNoJiBicnVzaCkKK3sKKyAgICBtX2NvbW1vbi0+c3RhdGUuYnJ1
c2ggPSBicnVzaDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEJydXNoKEJydXNoOjpC
cnVzaFN0eWxlIHN0eWxlKQoreworICAgIG1fY29tbW9uLT5zdGF0ZS5icnVzaC5zZXRTdHlsZShz
dHlsZSk7CisgICAgbV9jb21tb24tPnN0YXRlLmJydXNoLnNldENvbG9yKENvbG9yOjpibGFjayk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRCcnVzaChSR0JBMzIgcmdiKQoreworICAg
IG1fY29tbW9uLT5zdGF0ZS5icnVzaC5zZXRTdHlsZShCcnVzaDo6U29saWRQYXR0ZXJuKTsKKyAg
ICBtX2NvbW1vbi0+c3RhdGUuYnJ1c2guc2V0Q29sb3IocmdiKTsKK30KKworY29uc3QgQnJ1c2gm
IEdyYXBoaWNzQ29udGV4dDo6YnJ1c2goKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbW1vbi0+
c3RhdGUuYnJ1c2g7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVc2VzSW5hY3RpdmVU
ZXh0QmFja2dyb3VuZENvbG9yKGJvb2wgdSkKK3sKKyAgICBtX2NvbW1vbi0+bV91c2VzSW5hY3Rp
dmVUZXh0QmFja2dyb3VuZENvbG9yID0gdTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQ6OnVz
ZXNJbmFjdGl2ZVRleHRCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2Nv
bW1vbi0+bV91c2VzSW5hY3RpdmVUZXh0QmFja2dyb3VuZENvbG9yOworfQorCitib29sIEdyYXBo
aWNzQ29udGV4dDo6dXBkYXRpbmdDb250cm9sVGludHMoKSBjb25zdAoreworICAgIHJldHVybiBt
X2NvbW1vbi0+bV91cGRhdGluZ0NvbnRyb2xUaW50czsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFVwZGF0aW5nQ29udHJvbFRpbnRzKGJvb2wgYikKK3sKKyAgICBzZXRQYWludGluZ0Rp
c2FibGVkKGIpOworICAgIG1fY29tbW9uLT5tX3VwZGF0aW5nQ29udHJvbFRpbnRzID0gYjsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBhaW50aW5nRGlzYWJsZWQoYm9vbCBmKQorewor
ICAgIG1fY29tbW9uLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkID0gZjsKK30KKworYm9vbCBHcmFw
aGljc0NvbnRleHQ6OnBhaW50aW5nRGlzYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2Nv
bW1vbi0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZDsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQ6
OnByaW50aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb21tb24tPm1faXNGb3JQcmludGlu
ZzsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUF0UG9pbnQoSW1hZ2UqIGlt
YWdlLCBjb25zdCBJbnRQb2ludCYgcCwgSW1hZ2U6OkNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wZXJhdG9yKQogeyAgICAgICAgCi0gICAgZHJhd0ltYWdlKGltYWdlLCBwLngoKSwgcC55KCks
IDAsIDAsIC0xLCAtMSwgY29tcG9zaXRlT3BlcmF0b3IpOworICAgIGRyYXdJbWFnZShpbWFnZSwg
cCwgMCwgMCwgLTEsIC0xLCBjb21wb3NpdGVPcGVyYXRvcik7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2VJblJlY3QoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiByLCBJ
bWFnZTo6Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IpCiB7Ci0gICAgZHJhd0lt
YWdlKGltYWdlLCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSwgMCwgMCwgLTEs
IC0xLCBjb21wb3NpdGVPcGVyYXRvcik7CisgICAgZHJhd0ltYWdlKGltYWdlLCByLCAwLCAwLCAt
MSwgLTEsIGNvbXBvc2l0ZU9wZXJhdG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZShJbWFnZSogaW1hZ2UsIGludCB4LCBpbnQgeSwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgZGVzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgc3gsIGludCBzeSwgaW50IHN3LCBpbnQgc2gsIEltYWdlOjpD
b21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgdm9pZCogY29udGV4dCkKIHsKLSAg
ICBkcmF3SW1hZ2UoaW1hZ2UsIHgsIHksIHN3LCBzaCwgc3gsIHN5LCBzdywgc2gsIGNvbXBvc2l0
ZU9wZXJhdG9yLCBjb250ZXh0KTsKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIEludFJlY3QoZGVzdCwg
SW50U2l6ZShzdywgc2gpKSwgc3gsIHN5LCBzdywgc2gsIGNvbXBvc2l0ZU9wZXJhdG9yLCBjb250
ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2Us
IGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJ
bWFnZShJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGRlc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHN4LCBpbnQgc3ksIGludCBzdywgaW50IHNoLCBJbWFnZTo6Q29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgZHJhd0Zs
b2F0SW1hZ2UoaW1hZ2UsIChmbG9hdCl4LCAoZmxvYXQpeSwgKGZsb2F0KXcsIChmbG9hdCloLCAo
ZmxvYXQpc3gsIChmbG9hdClzeSwgKGZsb2F0KXN3LCAoZmxvYXQpc2gsIGNvbXBvc2l0ZU9wZXJh
dG9yLCBjb250ZXh0KTsKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UmVjdChkZXN0KSwgKGZs
b2F0KXN4LCAoZmxvYXQpc3ksIChmbG9hdClzdywgKGZsb2F0KXNoLCBjb21wb3NpdGVPcGVyYXRv
ciwgY29udGV4dCk7CiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgcmVtb3Zpbmcg
dGhpcyBmdW5jdGlvbiBhbmQgaGF2aW5nIGNhbGxlcnMganVzdCBjYWxsIHRoZSBsb3dlci1sZXZl
bCBkcmF3VGV4dCBkaXJlY3RseS4KQEAgLTEyNCwyMCArMjgyLDM1IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0Ojppbml0Rm9jdXNSaW5nKGludCAKICAgICAgICAgcmV0dXJuOwogICAgIGNsZWFyRm9j
dXNSaW5nKCk7CiAgICAgCi0gICAgbV9mb2N1c1JpbmdXaWR0aCA9IHdpZHRoOwotICAgIG1fZm9j
dXNSaW5nT2Zmc2V0ID0gb2Zmc2V0OworICAgIG1fY29tbW9uLT5tX2ZvY3VzUmluZ1dpZHRoID0g
d2lkdGg7CisgICAgbV9jb21tb24tPm1fZm9jdXNSaW5nT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJGb2N1c1JpbmcoKQogewotICAgIG1fZm9jdXNSaW5n
UmVjdHMuY2xlYXIoKTsKKyAgICBtX2NvbW1vbi0+bV9mb2N1c1JpbmdSZWN0cy5jbGVhcigpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkRm9jdXNSaW5nUmVjdChjb25zdCBJbnRSZWN0
JiByZWN0KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBtX2ZvY3VzUmluZ1JlY3RzLmFwcGVuZChyZWN0KTsKKyAgICBtX2NvbW1vbi0+bV9mb2N1
c1JpbmdSZWN0cy5hcHBlbmQocmVjdCk7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQ6OmZvY3Vz
UmluZ1dpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb21tb24tPm1fZm9jdXNSaW5nV2lk
dGg7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQ6OmZvY3VzUmluZ09mZnNldCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fY29tbW9uLT5tX2ZvY3VzUmluZ09mZnNldDsKK30KKworY29uc3QgVmVj
dG9yPEludFJlY3Q+JiBHcmFwaGljc0NvbnRleHQ6OmZvY3VzUmluZ1JlY3RzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9jb21tb24tPm1fZm9jdXNSaW5nUmVjdHM7CiB9CiAKIH0KSW5kZXg6IHJl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCShyZXZpc2lvbiAxMzM5MykKKysrIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MjgsMTEgKzgyOCwxMSBAQCB2b2lkIFJlbmRlck9iamVjdDo6
ZHJhd0JvcmRlcihHcmFwaGljc0NvCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICBjYXNlIEJT
Qm90dG9tOgogICAgICAgICAgICAgY2FzZSBCU1RvcDoKLSAgICAgICAgICAgICAgICBwLT5kcmF3
TGluZSh4MSwgKHkxK3kyKS8yLCB4MiwgKHkxK3kyKS8yKTsKKyAgICAgICAgICAgICAgICBwLT5k
cmF3TGluZShJbnRQb2ludCh4MSwgKHkxK3kyKS8yKSwgSW50UG9pbnQoeDIsICh5MSt5MikvMikp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCU1JpZ2h0OgogICAg
ICAgICAgICAgY2FzZSBCU0xlZnQ6Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd0xpbmUoKHgxK3gy
KS8yLCB5MSwgKHgxK3gyKS8yLCB5Mik7CisgICAgICAgICAgICAgICAgcC0+ZHJhd0xpbmUoSW50
UG9pbnQoKHgxK3gyKS8yLCB5MSksIEludFBvaW50KCh4MSt4MikvMiwgeTIpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTg1MCwy
OSArODUwLDMzIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3Qm9yZGVyKEdyYXBoaWNzQ28KICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgIGNhc2UgQlNUb3A6CiAgICAgICAgICAgICBjYXNlIEJT
Qm90dG9tOgotICAgICAgICAgICAgICAgIHAtPmRyYXdSZWN0KHgxLCB5MSAgICAgICwgeDIteDEs
IHRoaXJkKTsKLSAgICAgICAgICAgICAgICBwLT5kcmF3UmVjdCh4MSwgeTItdGhpcmQsIHgyLXgx
LCB0aGlyZCk7CisgICAgICAgICAgICAgICAgcC0+ZHJhd1JlY3QoSW50UmVjdCh4MSwgeTEgICAg
ICAsIHgyLXgxLCB0aGlyZCkpOworICAgICAgICAgICAgICAgIHAtPmRyYXdSZWN0KEludFJlY3Qo
eDEsIHkyLXRoaXJkLCB4Mi14MSwgdGhpcmQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgQlNMZWZ0OgotICAgICAgICAgICAgICAgIHAtPmRyYXdSZWN0KHgxICAg
ICAgLCB5MSsxLCB0aGlyZCwgeTIteTEtMSk7Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd1JlY3Qo
eDItdGhpcmQsIHkxKzEsIHRoaXJkLCB5Mi15MS0xKTsKKyAgICAgICAgICAgICAgICBwLT5kcmF3
UmVjdChJbnRSZWN0KHgxICAgICAgLCB5MSsxLCB0aGlyZCwgeTIteTEtMSkpOworICAgICAgICAg
ICAgICAgIHAtPmRyYXdSZWN0KEludFJlY3QoeDItdGhpcmQsIHkxKzEsIHRoaXJkLCB5Mi15MS0x
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEJTUmlnaHQ6Ci0g
ICAgICAgICAgICAgICAgcC0+ZHJhd1JlY3QoeDEgICAgICAsIHkxKzEsIHRoaXJkLCB5Mi15MS0x
KTsKLSAgICAgICAgICAgICAgICBwLT5kcmF3UmVjdCh4Mi10aGlyZCwgeTErMSwgdGhpcmQsIHky
LXkxLTEpOworICAgICAgICAgICAgICAgIHAtPmRyYXdSZWN0KEludFJlY3QoeDEgICAgICAsIHkx
KzEsIHRoaXJkLCB5Mi15MS0xKSk7CisgICAgICAgICAgICAgICAgcC0+ZHJhd1JlY3QoSW50UmVj
dCh4Mi10aGlyZCwgeTErMSwgdGhpcmQsIHkyLXkxLTEpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGludCBhZGpidzFiaWd0aGlyZDsKLSAgICAgICAgICAgIGlmIChhZGpidzE+MCkg
YWRqYncxYmlndGhpcmQgPSBhZGpidzErMTsKLSAgICAgICAgICAgIGVsc2UgYWRqYncxYmlndGhp
cmQgPSBhZGpidzEgLSAxOworICAgICAgICAgICAgaWYgKGFkamJ3MT4wKQorICAgICAgICAgICAg
ICAgIGFkamJ3MWJpZ3RoaXJkID0gYWRqYncxKzE7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgYWRqYncxYmlndGhpcmQgPSBhZGpidzEgLSAxOwogICAgICAgICAgICAgYWRqYncx
YmlndGhpcmQgLz0gMzsKIAogICAgICAgICAgICAgaW50IGFkamJ3MmJpZ3RoaXJkOwotICAgICAg
ICAgICAgaWYgKGFkamJ3Mj4wKSBhZGpidzJiaWd0aGlyZCA9IGFkamJ3MiArIDE7Ci0gICAgICAg
ICAgICBlbHNlIGFkamJ3MmJpZ3RoaXJkID0gYWRqYncyIC0gMTsKKyAgICAgICAgICAgIGlmIChh
ZGpidzI+MCkKKyAgICAgICAgICAgICAgICBhZGpidzJiaWd0aGlyZCA9IGFkamJ3MiArIDE7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRqYncyYmlndGhpcmQgPSBhZGpidzIg
LSAxOwogICAgICAgICAgICAgYWRqYncyYmlndGhpcmQgLz0gMzsKIAogICAgICAgICAgIHN3aXRj
aChzKQpAQCAtOTYxLDExICs5NjUsMTAgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRyYXdCb3JkZXIo
R3JhcGhpY3NDbwogICAgICAgICBwLT5zZXRCcnVzaChjKTsKICAgICAgICAgQVNTRVJUKHgyID49
IHgxKTsKICAgICAgICAgQVNTRVJUKHkyID49IHkxKTsKLSAgICAgICAgaWYgKGFkamJ3MT09MCAm
JiBhZGpidzIgPT0gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwLT5kcmF3UmVjdCh4MSx5
MSx4Mi14MSx5Mi15MSk7CisgICAgICAgIGlmIChhZGpidzE9PTAgJiYgYWRqYncyID09IDApIHsK
KyAgICAgICAgICAgIHAtPmRyYXdSZWN0KEludFJlY3QoeDEseTEseDIteDEseTIteTEpKTsKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgc3dpdGNo
KHMpIHsKICAgICAgICAgY2FzZSBCU1RvcDoKICAgICAgICAgICAgIHF1YWQuc2V0UG9pbnRzKDQs
CkBAIC0xMDQyLDE5ICsxMDQ1LDE5IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpwYWludEJvcmRlcklt
YWdlKEdyYXAKICAgICAgICAgLy8gVGhlIHRvcCBsZWZ0IGNvcm5lciByZWN0IGlzIChfdHgsIF90
eSwgbGVmdFdpZHRoLCB0b3BXaWR0aCkKICAgICAgICAgLy8gVGhlIHJlY3QgdG8gdXNlIGZyb20g
d2l0aGluIHRoZSBpbWFnZSBpcyBvYnRhaW5lZCBmcm9tIG91ciBzbGljZSwgYW5kIGlzICgwLCAw
LCBsZWZ0U2xpY2UsIHRvcFNsaWNlKQogICAgICAgICBpZiAoZHJhd1RvcCkKLSAgICAgICAgICAg
IHAtPmRyYXdJbWFnZShib3JkZXJJbWFnZS0+aW1hZ2UoKSwgX3R4LCBfdHksIHN0eWxlLT5ib3Jk
ZXJMZWZ0V2lkdGgoKSwgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCksCisgICAgICAgICAgICBwLT5k
cmF3SW1hZ2UoYm9yZGVySW1hZ2UtPmltYWdlKCksIEludFJlY3QoX3R4LCBfdHksIHN0eWxlLT5i
b3JkZXJMZWZ0V2lkdGgoKSwgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIDAsIGxlZnRTbGljZSwgdG9wU2xpY2UpOwogICAgICAgICAKICAgICAg
ICAgLy8gVGhlIGJvdHRvbSBsZWZ0IGNvcm5lciByZWN0IGlzIChfdHgsIF90eSArIGggLSBib3R0
b21XaWR0aCwgbGVmdFdpZHRoLCBib3R0b21XaWR0aCkKICAgICAgICAgLy8gVGhlIHJlY3QgdG8g
dXNlIGZyb20gd2l0aGluIHRoZSBpbWFnZSBpcyAoMCwgaW1hZ2VIZWlnaHQgLSBib3R0b21TbGlj
ZSwgbGVmdFNsaWNlLCBib3RvbVNsaWNlKQogICAgICAgICBpZiAoZHJhd0JvdHRvbSkKLSAgICAg
ICAgICAgIHAtPmRyYXdJbWFnZShib3JkZXJJbWFnZS0+aW1hZ2UoKSwgX3R4LCBfdHkgKyBoIC0g
c3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgc3R5
bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksCisgICAgICAgICAgICBwLT5kcmF3SW1hZ2UoYm9yZGVy
SW1hZ2UtPmltYWdlKCksIEludFJlY3QoX3R4LCBfdHkgKyBoIC0gc3R5bGUtPmJvcmRlckJvdHRv
bVdpZHRoKCksIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgc3R5bGUtPmJvcmRlckJvdHRvbVdp
ZHRoKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGltYWdlSGVpZ2h0IC0gYm90dG9t
U2xpY2UsIGxlZnRTbGljZSwgYm90dG9tU2xpY2UpOwogICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAvLyBQYWludCB0aGUgbGVmdCBlZGdlLgogICAgICAgICAvLyBIYXZlIHRvIHNjYWxl
IGFuZCB0aWxlIGludG8gdGhlIGJvcmRlciByZWN0LgotICAgICAgICBwLT5kcmF3U2NhbGVkQW5k
VGlsZWRJbWFnZShib3JkZXJJbWFnZS0+aW1hZ2UoKSwgX3R4LCBfdHkgKyBzdHlsZS0+Ym9yZGVy
VG9wV2lkdGgoKSwgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaCAtIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpIC0gc3R5bGUtPmJv
cmRlckJvdHRvbVdpZHRoKCksCisgICAgICAgIHAtPmRyYXdTY2FsZWRBbmRUaWxlZEltYWdlKGJv
cmRlckltYWdlLT5pbWFnZSgpLCBJbnRSZWN0KF90eCwgX3R5ICsgc3R5bGUtPmJvcmRlclRvcFdp
ZHRoKCksIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGggLSBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSAtIHN0eWxlLT5ib3JkZXJC
b3R0b21XaWR0aCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHRv
cFNsaWNlLCBsZWZ0U2xpY2UsIGltYWdlSGVpZ2h0IC0gdG9wU2xpY2UgLSBib3R0b21TbGljZSwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZTo6U3RyZXRjaFRpbGUs
IChJbWFnZTo6VGlsZVJ1bGUpdlJ1bGUpOwogICAgIH0KQEAgLTEwNjQsNDEgKzEwNjcsMzkgQEAg
Ym9vbCBSZW5kZXJPYmplY3Q6OnBhaW50Qm9yZGVySW1hZ2UoR3JhcAogICAgICAgICAvLyBUaGUg
dG9wIHJpZ2h0IGNvcm5lciByZWN0IGlzIChfdHggKyB3IC0gcmlnaHRXaWR0aCwgX3R5LCByaWdo
dFdpZHRoLCB0b3BXaWR0aCkKICAgICAgICAgLy8gVGhlIHJlY3QgdG8gdXNlIGZyb20gd2l0aGlu
IHRoZSBpbWFnZSBpcyBvYnRhaW5lZCBmcm9tIG91ciBzbGljZSwgYW5kIGlzIChpbWFnZVdpZHRo
IC0gcmlnaHRTbGljZSwgMCwgcmlnaHRTbGljZSwgdG9wU2xpY2UpCiAgICAgICAgIGlmIChkcmF3
VG9wKQotICAgICAgICAgICAgcC0+ZHJhd0ltYWdlKGJvcmRlckltYWdlLT5pbWFnZSgpLCBfdHgg
KyB3IC0gc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwgX3R5LCBzdHlsZS0+Ym9yZGVyUmlnaHRX
aWR0aCgpLCBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwKKyAgICAgICAgICAgIHAtPmRyYXdJbWFn
ZShib3JkZXJJbWFnZS0+aW1hZ2UoKSwgSW50UmVjdChfdHggKyB3IC0gc3R5bGUtPmJvcmRlclJp
Z2h0V2lkdGgoKSwgX3R5LCBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCBzdHlsZS0+Ym9yZGVy
VG9wV2lkdGgoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VXaWR0aCAtIHJpZ2h0
U2xpY2UsIDAsIHJpZ2h0U2xpY2UsIHRvcFNsaWNlKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRo
ZSBib3R0b20gcmlnaHQgY29ybmVyIHJlY3QgaXMgKF90eCArIHcgLSByaWdodFdpZHRoLCBfdHkg
KyBoIC0gYm90dG9tV2lkdGgsIHJpZ2h0V2lkdGgsIGJvdHRvbVdpZHRoKQogICAgICAgICAvLyBU
aGUgcmVjdCB0byB1c2UgZnJvbSB3aXRoaW4gdGhlIGltYWdlIGlzIChpbWFnZVdpZHRoIC0gcmln
aHRTbGljZSwgaW1hZ2VIZWlnaHQgLSBib3R0b21TbGljZSwgcmlnaHRTbGljZSwgYm90b21TbGlj
ZSkKICAgICAgICAgaWYgKGRyYXdCb3R0b20pCi0gICAgICAgICAgICBwLT5kcmF3SW1hZ2UoYm9y
ZGVySW1hZ2UtPmltYWdlKCksIF90eCArIHcgLSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCBf
dHkgKyBoIC0gc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksIHN0eWxlLT5ib3JkZXJSaWdodFdp
ZHRoKCksIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpLAorICAgICAgICAgICAgcC0+ZHJhd0lt
YWdlKGJvcmRlckltYWdlLT5pbWFnZSgpLCBJbnRSZWN0KF90eCArIHcgLSBzdHlsZS0+Ym9yZGVy
UmlnaHRXaWR0aCgpLCBfdHkgKyBoIC0gc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksIHN0eWxl
LT5ib3JkZXJSaWdodFdpZHRoKCksIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSwgaW1hZ2VIZWlnaHQg
LSBib3R0b21TbGljZSwgcmlnaHRTbGljZSwgYm90dG9tU2xpY2UpOwogICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAvLyBQYWludCB0aGUgcmlnaHQgZWRnZS4KLSAgICAgICAgcC0+ZHJh
d1NjYWxlZEFuZFRpbGVkSW1hZ2UoYm9yZGVySW1hZ2UtPmltYWdlKCksIF90eCArIHcgLSBzdHls
ZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCBfdHkgKyBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwgc3R5
bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaCAtIHN0
eWxlLT5ib3JkZXJUb3BXaWR0aCgpIC0gc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksCisgICAg
ICAgIHAtPmRyYXdTY2FsZWRBbmRUaWxlZEltYWdlKGJvcmRlckltYWdlLT5pbWFnZSgpLCBJbnRS
ZWN0KF90eCArIHcgLSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCBfdHkgKyBzdHlsZS0+Ym9y
ZGVyVG9wV2lkdGgoKSwgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgaCAtIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpIC0gc3R5bGUtPmJvcmRlckJv
dHRvbVdpZHRoKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVdpZHRoIC0gcmln
aHRTbGljZSwgdG9wU2xpY2UsIHJpZ2h0U2xpY2UsIGltYWdlSGVpZ2h0IC0gdG9wU2xpY2UgLSBi
b3R0b21TbGljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U6OlN0cmV0Y2hUaWxl
LCAoSW1hZ2U6OlRpbGVSdWxlKXZSdWxlKTsKICAgICB9CiAKICAgICAvLyBQYWludCB0aGUgdG9w
IGVkZ2UuCiAgICAgaWYgKGRyYXdUb3ApCi0gICAgICAgIHAtPmRyYXdTY2FsZWRBbmRUaWxlZElt
YWdlKGJvcmRlckltYWdlLT5pbWFnZSgpLCBfdHggKyBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCks
IF90eSwgdyAtIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSAtIHN0eWxlLT5ib3JkZXJSaWdodFdp
ZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgp
LAorICAgICAgICBwLT5kcmF3U2NhbGVkQW5kVGlsZWRJbWFnZShib3JkZXJJbWFnZS0+aW1hZ2Uo
KSwgSW50UmVjdChfdHggKyBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIF90eSwgdyAtIHN0eWxl
LT5ib3JkZXJMZWZ0V2lkdGgoKSAtIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIHN0eWxlLT5i
b3JkZXJUb3BXaWR0aCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNsaWNlLCAw
LCBpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSAtIGxlZnRTbGljZSwgdG9wU2xpY2UsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChJbWFnZTo6VGlsZVJ1bGUpaFJ1bGUsIEltYWdlOjpTdHJldGNo
VGlsZSk7CiAgICAgCiAgICAgLy8gUGFpbnQgdGhlIGJvdHRvbSBlZGdlLgogICAgIGlmIChkcmF3
Qm90dG9tKQotICAgICAgICBwLT5kcmF3U2NhbGVkQW5kVGlsZWRJbWFnZShib3JkZXJJbWFnZS0+
aW1hZ2UoKSwgX3R4ICsgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCBfdHkgKyBoIC0gc3R5bGUt
PmJvcmRlckJvdHRvbVdpZHRoKCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICB3IC0gc3R5
bGUtPmJvcmRlckxlZnRXaWR0aCgpIC0gc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksCisgICAgICAg
IHAtPmRyYXdTY2FsZWRBbmRUaWxlZEltYWdlKGJvcmRlckltYWdlLT5pbWFnZSgpLCBJbnRSZWN0
KF90eCArIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgX3R5ICsgaCAtIHN0eWxlLT5ib3JkZXJC
b3R0b21XaWR0aCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdyAtIHN0eWxlLT5ib3Jk
ZXJMZWZ0V2lkdGgoKSAtIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIHN0eWxlLT5ib3JkZXJC
b3R0b21XaWR0aCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNsaWNlLCBpbWFn
ZUhlaWdodCAtIGJvdHRvbVNsaWNlLCBpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSAtIGxlZnRTbGlj
ZSwgYm90dG9tU2xpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbWFnZTo6VGlsZVJ1
bGUpaFJ1bGUsIEltYWdlOjpTdHJldGNoVGlsZSk7CiAgICAgCiAgICAgLy8gUGFpbnQgdGhlIG1p
ZGRsZS4KICAgICBpZiAoZHJhd01pZGRsZSkKLSAgICAgICAgcC0+ZHJhd1NjYWxlZEFuZFRpbGVk
SW1hZ2UoYm9yZGVySW1hZ2UtPmltYWdlKCksIF90eCArIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgo
KSwgX3R5ICsgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCksIHcgLSBzdHlsZS0+Ym9yZGVyTGVmdFdp
ZHRoKCkgLSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBoIC0gc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkgLSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lk
dGgoKSwKKyAgICAgICAgcC0+ZHJhd1NjYWxlZEFuZFRpbGVkSW1hZ2UoYm9yZGVySW1hZ2UtPmlt
YWdlKCksIEludFJlY3QoX3R4ICsgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCBfdHkgKyBzdHls
ZS0+Ym9yZGVyVG9wV2lkdGgoKSwgdyAtIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSAtIHN0eWxl
LT5ib3JkZXJSaWdodFdpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGggLSBzdHls
ZS0+Ym9yZGVyVG9wV2lkdGgoKSAtIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGVmdFNsaWNlLCB0b3BTbGljZSwgaW1hZ2VXaWR0aCAtIHJp
Z2h0U2xpY2UgLSBsZWZ0U2xpY2UsIGltYWdlSGVpZ2h0IC0gdG9wU2xpY2UgLSBib3R0b21TbGlj
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKEltYWdlOjpUaWxlUnVsZSloUnVsZSwgKElt
YWdlOjpUaWxlUnVsZSl2UnVsZSk7CiAKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAJKHJldmlzaW9uIDEz
MzkzKQorKysgcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MTUsMTcgKzUxNSwxNyBAQCBib29sIFJlbmRlckZyYW1lU2V0Ojp1c2VyUmVzaXplKCBNb3VzZUV2
CiAgICAgICAgICAgICAgICAgcGFpbnQuc2V0UGVuKFBlbjo6Tm9QZW4pOwogICAgICAgICAgICAg
ICAgIHBhaW50LnNldEJydXNoKENvbG9yOjpncmF5KTsKICAgICAgICAgICAgICAgICB2LT5zZXRE
cmF3aW5nQWxwaGEoMC4yNSk7Ci0gICAgICAgICAgICAgICAgcGFpbnQuZHJhd1JlY3QocCArIHN3
LzIgLSByQm9yZCwgci55KCksIDIqckJvcmQsIHIuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAg
IHBhaW50LmRyYXdSZWN0KEludFJlY3QocCArIHN3LzIgLSByQm9yZCwgci55KCksIDIgKiByQm9y
ZCwgci5oZWlnaHQoKSkpOwogICAgICAgICAgICAgICAgIHYtPnNldERyYXdpbmdBbHBoYSgxLjAp
OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKG1fb2xk
cG9zID49IDApCi0gICAgICAgICAgICAgICAgdi0+dXBkYXRlQ29udGVudHMoSW50UmVjdChyLngo
KSwgbV9vbGRwb3MgKyBzdy8yIC0gckJvcmQsIHIud2lkdGgoKSwgMipyQm9yZCksIHRydWUpOwor
ICAgICAgICAgICAgICAgIHYtPnVwZGF0ZUNvbnRlbnRzKEludFJlY3Qoci54KCksIG1fb2xkcG9z
ICsgc3cvMiAtIHJCb3JkLCByLndpZHRoKCksIDIgKiByQm9yZCksIHRydWUpOwogICAgICAgICAg
ICAgaWYgKHAgPj0gMCkgewogICAgICAgICAgICAgICAgIHBhaW50LnNldFBlbihQZW46Ok5vUGVu
KTsKICAgICAgICAgICAgICAgICBwYWludC5zZXRCcnVzaChDb2xvcjo6Z3JheSk7CiAgICAgICAg
ICAgICAgICAgdi0+c2V0RHJhd2luZ0FscGhhKDAuMjUpOwotICAgICAgICAgICAgICAgIHBhaW50
LmRyYXdSZWN0KHIueCgpLCBwICsgc3cvMiAtIHJCb3JkLCByLndpZHRoKCksIDIgKiByQm9yZCk7
CisgICAgICAgICAgICAgICAgcGFpbnQuZHJhd1JlY3QoSW50UmVjdChyLngoKSwgcCArIHN3LzIg
LSByQm9yZCwgci53aWR0aCgpLCAyICogckJvcmQpKTsKICAgICAgICAgICAgICAgICB2LT5zZXRE
cmF3aW5nQWxwaGEoMS4wKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogcmVuZGVy
aW5nL3JlbmRlcl9saXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvcmVuZGVyX2xpc3Qu
Y3BwCShyZXZpc2lvbiAxMzM5MykKKysrIHJlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzMCwxNSArNDMwLDE1IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFp
bnQoUGFpbnRJbmZvJiAKICAgICBzd2l0Y2goc3R5bGUoKS0+bGlzdFN0eWxlVHlwZSgpKSB7CiAg
ICAgY2FzZSBESVNDOgogICAgICAgICBwLT5zZXRCcnVzaChjb2xvcik7Ci0gICAgICAgIHAtPmRy
YXdFbGxpcHNlKG1hcmtlci54KCksIG1hcmtlci55KCksIG1hcmtlci53aWR0aCgpLCBtYXJrZXIu
aGVpZ2h0KCkpOworICAgICAgICBwLT5kcmF3RWxsaXBzZShtYXJrZXIpOwogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBDSVJDTEU6CiAgICAgICAgIHAtPnNldEJydXNoKFdlYkNvcmU6OkJydXNo
OjpOb0JydXNoKTsKLSAgICAgICAgcC0+ZHJhd0VsbGlwc2UobWFya2VyLngoKSwgbWFya2VyLnko
KSwgbWFya2VyLndpZHRoKCksIG1hcmtlci5oZWlnaHQoKSk7CisgICAgICAgIHAtPmRyYXdFbGxp
cHNlKG1hcmtlcik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNRVUFSRToKICAgICAgICAg
cC0+c2V0QnJ1c2goY29sb3IpOwotICAgICAgICBwLT5kcmF3UmVjdChtYXJrZXIueCgpLCBtYXJr
ZXIueSgpLCBtYXJrZXIud2lkdGgoKSwgbWFya2VyLmhlaWdodCgpKTsKKyAgICAgICAgcC0+ZHJh
d1JlY3QobWFya2VyKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgTE5PTkU6CiAgICAgICAg
IHJldHVybjsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gMTMzOTMpCisrKyByZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksOSArMTg5LDggQEAgdm9pZCBS
ZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbgogICAgIGJvb2wgaXNQcmludGluZyA9
IGkucC0+cHJpbnRpbmcoKTsKICAgICBib29sIGRyYXdTZWxlY3Rpb25UaW50ID0gaXNTZWxlY3Rl
ZCgpICYmICFpc1ByaW50aW5nOwogICAgIGlmIChpLnBoYXNlID09IFBhaW50QWN0aW9uU2VsZWN0
aW9uKSB7Ci0gICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbk5vbmUpIHsK
KyAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uTm9uZSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQogICAgICAgICBkcmF3U2VsZWN0aW9uVGludCA9IGZhbHNl
OwogICAgIH0KICAgICAgICAgCkBAIC0yMTMsNyArMjEyLDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6
cGFpbnQoUGFpbnRJbmZvJiBpLCBpbgogICAgICAgICAgICAgaWYgKCFlcnJvck9jY3VycmVkKCkp
IHsKICAgICAgICAgICAgICAgICBwLT5zZXRQZW4gKENvbG9yOjpsaWdodEdyYXkpOwogICAgICAg
ICAgICAgICAgIHAtPnNldEJydXNoIChXZWJDb3JlOjpCcnVzaDo6Tm9CcnVzaCk7Ci0gICAgICAg
ICAgICAgICAgcC0+ZHJhd1JlY3QgKF90eCArIGxlZnRCb3JkZXIgKyBsZWZ0UGFkLCBfdHkgKyB0
b3BCb3JkZXIgKyB0b3BQYWQsIGNXaWR0aCwgY0hlaWdodCk7CisgICAgICAgICAgICAgICAgcC0+
ZHJhd1JlY3QgKEludFJlY3QoX3R4ICsgbGVmdEJvcmRlciArIGxlZnRQYWQsIF90eSArIHRvcEJv
cmRlciArIHRvcFBhZCwgY1dpZHRoLCBjSGVpZ2h0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGJvb2wgZXJyb3JQaWN0dXJlRHJhd24gPSBmYWxzZTsKSW5kZXg6
IHJlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJC
b3guY3BwCShyZXZpc2lvbiAxMzM5MykKKysrIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MzEsMTAgKzQzMSwxMSBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCYWNr
Z3JvdW5kRXh0ZW5kZWQoCiAKICAgICAvLyBQYWludCB0aGUgY29sb3IgZmlyc3QgdW5kZXJuZWF0
aCBhbGwgaW1hZ2VzLgogICAgIGlmICghYmdMYXllci0+bmV4dCgpICYmIGJnQ29sb3IuaXNWYWxp
ZCgpICYmIGJnQ29sb3IuYWxwaGEoKSA+IDApIHsKKyAgICAgICAgSW50UmVjdCByZWN0KF90eCwg
Y2xpcHksIHcsIGNsaXBoKTsKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBhbHBoYSBhbmQgd2Ug
YXJlIHBhaW50aW5nIHRoZSByb290IGVsZW1lbnQsIGdvIGFoZWFkIGFuZCBibGVuZCB3aXRoIHdo
aXRlLgogICAgICAgICBpZiAoYmdDb2xvci5hbHBoYSgpIDwgMHhGRiAmJiBpc1Jvb3QoKSAmJiAh
Y2FudmFzKCktPnZpZXcoKS0+aXNUcmFuc3BhcmVudCgpKQotICAgICAgICAgICAgcC0+ZmlsbFJl
Y3QoX3R4LCBjbGlweSwgdywgY2xpcGgsIENvbG9yKENvbG9yOjp3aGl0ZSkpOwotICAgICAgICBw
LT5maWxsUmVjdChfdHgsIGNsaXB5LCB3LCBjbGlwaCwgYmdDb2xvcik7CisgICAgICAgICAgICBw
LT5maWxsUmVjdChyZWN0LCBDb2xvcihDb2xvcjo6d2hpdGUpKTsKKyAgICAgICAgcC0+ZmlsbFJl
Y3QocmVjdCwgYmdDb2xvcik7CiAgICAgfQogICAgIAogICAgIC8vIG5vIHByb2dyZXNzaXZlIGxv
YWRpbmcgb2YgdGhlIGJhY2tncm91bmQgaW1hZ2UKQEAgLTU2Nyw3ICs1NjgsNyBAQCB2b2lkIFJl
bmRlckJveDo6cGFpbnRCYWNrZ3JvdW5kRXh0ZW5kZWQoCiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoY3c+MCAmJiBjaD4wKQotICAgICAgICAgICAgcC0+ZHJhd1RpbGVkSW1hZ2UoYmctPmltYWdl
KCksIGN4LCBjeSwgY3csIGNoLCBzeCwgc3kpOworICAgICAgICAgICAgcC0+ZHJhd1RpbGVkSW1h
Z2UoYmctPmltYWdlKCksIEludFJlY3QoY3gsIGN5LCBjdywgY2gpLCBzeCwgc3kpOwogICAgIH0K
ICAgICAKICAgICBpZiAoYmdMYXllci0+YmFja2dyb3VuZENsaXAoKSAhPSBCR0JPUkRFUikKQEAg
LTU3NywxMSArNTc4LDExIEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEJhY2tncm91bmRFeHRlbmRl
ZCgKICAgICAgICAgcC0+cmVzdG9yZSgpOyAvLyBVbmRvIHRoZSBib3JkZXIgcmFkaXVzIGNsaXAK
IH0KIAotdm9pZCBSZW5kZXJCb3g6Om91dGxpbmVCb3goR3JhcGhpY3NDb250ZXh0KiBwLCBpbnQg
X3R4LCBpbnQgX3R5LCBjb25zdCBjaGFyICpjb2xvcikKK3ZvaWQgUmVuZGVyQm94OjpvdXRsaW5l
Qm94KEdyYXBoaWNzQ29udGV4dCogcCwgaW50IF90eCwgaW50IF90eSwgY29uc3QgY2hhciogY29s
b3IpCiB7CiAgICAgcC0+c2V0UGVuKFBlbihDb2xvcihjb2xvciksIDEsIFBlbjo6RG90TGluZSkp
OwogICAgIHAtPnNldEJydXNoKFdlYkNvcmU6OkJydXNoOjpOb0JydXNoKTsKLSAgICBwLT5kcmF3
UmVjdChfdHgsIF90eSwgbV93aWR0aCwgbV9oZWlnaHQpOworICAgIHAtPmRyYXdSZWN0KEludFJl
Y3QoX3R4LCBfdHksIG1fd2lkdGgsIG1faGVpZ2h0KSk7CiB9CiAKIEludFJlY3QgUmVuZGVyQm94
OjpnZXRPdmVyZmxvd0NsaXBSZWN0KGludCB0eCwgaW50IHR5KQpJbmRleDoga2NhbnZhcy9SZW5k
ZXJTVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9SZW5kZXJTVkdJbWFnZS5jcHAJ
KHJldmlzaW9uIDEzMzkzKQorKysga2NhbnZhcy9SZW5kZXJTVkdJbWFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3MCw4ICsxNzAsNyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjpwYWludChQYWlu
dEluZm8mIHBhCiAgICAgICAgIEZsb2F0UmVjdCBkZXN0UmVjdChtX3gsIG1feSwgY29udGVudFdp
ZHRoKCksIGNvbnRlbnRIZWlnaHQoKSk7CiAgICAgICAgIEZsb2F0UmVjdCBzcmNSZWN0KDAsIDAs
IGltYWdlKCktPndpZHRoKCksIGltYWdlKCktPmhlaWdodCgpKTsKICAgICAgICAgYWRqdXN0UmVj
dHNGb3JBc3BlY3RSYXRpbyhkZXN0UmVjdCwgc3JjUmVjdCwgaW1hZ2VFbHQtPnByZXNlcnZlQXNw
ZWN0UmF0aW8oKS0+YmFzZVZhbCgpKTsKLSAgICAgICAgcGFpbnRJbmZvLnAtPmRyYXdGbG9hdElt
YWdlKGltYWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UmVj
dC54KCksIGRlc3RSZWN0LnkoKSwgZGVzdFJlY3Qud2lkdGgoKSwgZGVzdFJlY3QuaGVpZ2h0KCks
IAorICAgICAgICBwYWludEluZm8ucC0+ZHJhd0ltYWdlKGltYWdlKCksIGRlc3RSZWN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUmVjdC54KCksIHNyY1JlY3QueSgp
LCBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSW1hZ2U6OkNvbXBvc2l0ZVNvdXJjZU92ZXIpOwogICAgIH0KSW5k
ZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzkzKQor
KysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTExIEBACisyMDA2LTAzLTE3
ICBFcmljIFNlaWRlbCAgPGVzZWlkZWxAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgRm9ybSBjb2RlIGZyb20gTWFjRnJhbWUg
dG8gRnJhbWUuCisgICAgICAgIE1vdmUgR3JhcGhpY3NDb250ZXh0IGNvZGUgZnJvbSBHcmFwaGlj
c0NvbnRleHRNYWMgdG8gR3JhcGhpY3NDb250ZXh0LgorICAgICAgICBVc2UgSW50UmVjdCwgRmxv
YXRSZWN0IGluIG1vcmUgcGxhY2VzIHRocm91Z2hvdXQgdGhlIGNvZGUuCisKKyAgICAgICAgKiBi
cmlkZ2UvbWFjL01hY0ZyYW1lLmg6CisgICAgICAgICogYnJpZGdlL21hYy9NYWNGcmFtZS5tbToK
KyAgICAgICAgKFdlYkNvcmU6Ok1hY0ZyYW1lOjpNYWNGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNYWNGcmFtZTo6c2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1hY0ZyYW1lOjpzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OmRpY3Rpb25hcnlGcm9tSGFzaE1hcCk6CisgICAgICAgIChXZWJDb3JlOjpNYWNGcmFtZTo6
c3VibWl0Rm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpNYWNGcmFtZTo6c2V0Vmlldyk6CisgICAg
ICAgIChXZWJDb3JlOjpNYWNGcmFtZTo6Y3VycmVudEV2ZW50SXNNb3VzZURvd25JbldpZGdldCk6
CisgICAgICAgIChXZWJDb3JlOjpNYWNGcmFtZTo6Y3VycmVudEV2ZW50SXNLZXlib2FyZE9wdGlv
blRhYik6CisgICAgICAgIChXZWJDb3JlOjpNYWNGcmFtZTo6aGFuZGxlS2V5Ym9hcmRPcHRpb25U
YWJJblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6TWFjRnJhbWU6OnRhYnNUb0FsbENvbnRyb2xz
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hY0ZyYW1lOjpzaG91bGREcmFnQXV0b05vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWFjRnJhbWU6OnNlbGVjdGlvbkltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1hY0ZyYW1lOjpzbmFwc2hvdERyYWdJbWFnZSk6CisgICAgICAgICogYnJpZGdlL21hYy9X
ZWJDb3JlRnJhbWVCcmlkZ2UubW06CisgICAgICAgICgtW1dlYkNvcmVGcmFtZUJyaWRnZSBuZXh0
S2V5Vmlld10pOgorICAgICAgICAoLVtXZWJDb3JlRnJhbWVCcmlkZ2UgcHJldmlvdXNLZXlWaWV3
XSk6CisgICAgICAgICgtW1dlYkNvcmVGcmFtZUJyaWRnZSBuZXh0S2V5Vmlld0luc2lkZVdlYkZy
YW1lVmlld3NdKToKKyAgICAgICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdlIHByZXZpb3VzS2V5Vmll
d0luc2lkZVdlYkZyYW1lVmlld3NdKToKKyAgICAgICAgKiBrY2FudmFzL1JlbmRlclNWR0ltYWdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjpwYWludCk6CisgICAgICAg
ICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6RnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWU6OmNsZWFyUmVjb3JkZWRGb3JtVmFsdWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpyZWNvcmRGb3JtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6OmRpZE5vdE9wZW5VUkwpOgorICAgICAgICAoV2ViQ29yZTo6c2NhbkZvckZvcm0pOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWU6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpw
cmVwYXJlRm9yVXNlckFjdGlvbik6CisgICAgICAgICogcGFnZS9GcmFtZS5oOgorICAgICAgICAq
IHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UHJpdmF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UHJpdmF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6Zm9udCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRCcnVzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmJydXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
VXNlc0luYWN0aXZlVGV4dEJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnVzZXNJbmFjdGl2ZVRleHRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp1cGRhdGluZ0NvbnRyb2xUaW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFVwZGF0aW5nQ29udHJvbFRpbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGFpbnRpbmdEaXNhYmxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBhaW50aW5nRGlzYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwcmludGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUF0UG9pbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VJblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Ojppbml0Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Y2xlYXJGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojph
ZGRGb2N1c1JpbmdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zm9j
dXNSaW5nV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpmb2N1c1Jp
bmdPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpmb2N1c1JpbmdS
ZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICog
cGxhdGZvcm0vbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmZp
bGxSZWN0U291cmNlT3Zlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFw
aGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhp
Y3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRm
b3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxh
dGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q29sb3JGcm9tQnJ1c2gp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb2xvckZyb21QZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0FyYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0Zsb2F0SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3VGlsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdTY2FsZWRBbmRUaWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2VsZWN0ZWRUZXh0QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjphZGRDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkUm91bmRl
ZFJlY3RDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFu
c3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmVuZFRy
YW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3cp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvcmVuZGVyX2JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OnBhaW50QmFja2dyb3VuZEV4dGVuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6b3V0bGluZUJveCk6CisgICAgICAgICogcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6OnVzZXJSZXNpemUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW1hZ2U6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9yZW5kZXJfb2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6
ZHJhd0JvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnBhaW50Qm9yZGVy
SW1hZ2UpOgorCiAyMDA2LTAzLTE5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAog
ICAgICAgICAtIGdsb2JhbCByZW5hbWUsIGRvbmUgYnkgc2NyaXB0CkluZGV4OiBicmlkZ2UvbWFj
L0ZyYW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJyaWRnZS9tYWMvRnJhbWVNYWMubW0JKHJldmlz
aW9uIDEzMzkzKQorKysgYnJpZGdlL21hYy9GcmFtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDQyLDMyICs0NDIsNiBAQCBib29sIEZyYW1lTWFjOjpmaW5kU3RyaW5nKE5TU3RyaW5nICpzdHJp
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRnJhbWVNYWM6OmNsZWFyUmVjb3JkZWRGb3Jt
VmFsdWVzKCkKLXsKLSAgICAvLyBJdCdzIHNhZmUgdG8gYXNzdW1lIHRoYXQgb3VyIG93biBjbGFz
c2VzIGFuZCBGb3VuZGF0aW9uIGRhdGEKLSAgICAvLyBzdHJ1Y3R1cmVzIHdvbid0IHJhaXNlIGV4
Y2VwdGlvbnMgaW4gZGVhbGxvYwotCi0gICAgS1dRUmVsZWFzZShfZm9ybVZhbHVlc0Fib3V0VG9C
ZVN1Ym1pdHRlZCk7Ci0gICAgX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQgPSBuaWw7Ci0g
ICAgS1dRUmVsZWFzZShfZm9ybUFib3V0VG9CZVN1Ym1pdHRlZCk7Ci0gICAgX2Zvcm1BYm91dFRv
QmVTdWJtaXR0ZWQgPSBuaWw7Ci19Ci0KLXZvaWQgRnJhbWVNYWM6OnJlY29yZEZvcm1WYWx1ZShj
b25zdCBEZXByZWNhdGVkU3RyaW5nICZuYW1lLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nICZ2YWx1
ZSwgSFRNTEZvcm1FbGVtZW50ICplbGVtZW50KQotewotICAgIC8vIEl0J3Mgc2FmZSB0byBhc3N1
bWUgdGhhdCBvdXIgb3duIGNsYXNzZXMgYW5kIGJhc2ljIEZvdW5kYXRpb24KLSAgICAvLyBkYXRh
IHN0cnVjdHVyZXMgd29uJ3QgcmFpc2UgZXhjZXB0aW9ucwotCi0gICAgaWYgKCFfZm9ybVZhbHVl
c0Fib3V0VG9CZVN1Ym1pdHRlZCkgewotICAgICAgICBfZm9ybVZhbHVlc0Fib3V0VG9CZVN1Ym1p
dHRlZCA9IEtXUVJldGFpbk5TUmVsZWFzZShbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGlu
aXRdKTsKLSAgICAgICAgQVNTRVJUKCFfZm9ybUFib3V0VG9CZVN1Ym1pdHRlZCk7Ci0gICAgICAg
IF9mb3JtQWJvdXRUb0JlU3VibWl0dGVkID0gS1dRUmV0YWluKFtET01FbGVtZW50IF9lbGVtZW50
V2l0aDplbGVtZW50XSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKFtfZm9ybUFib3V0
VG9CZVN1Ym1pdHRlZCBfZWxlbWVudF0gPT0gZWxlbWVudCk7Ci0gICAgfQotICAgIFtfZm9ybVZh
bHVlc0Fib3V0VG9CZVN1Ym1pdHRlZCBzZXRPYmplY3Q6dmFsdWUuZ2V0TlNTdHJpbmcoKSBmb3JL
ZXk6bmFtZS5nZXROU1N0cmluZygpXTsKLX0KLQogdm9pZCBGcmFtZU1hYzo6c3VibWl0Rm9ybShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwpAQCAtNDgxLDcgKzQ1NSw3IEBAIHZvaWQgRnJhbWVNYWM6OnN1Ym1pdEZvcm0o
Y29uc3QgUmVzb3VyY2UKICAgICAvLyBUaGUgZm9ybSBtdWx0aS1zdWJtaXQgbG9naWMgaGVyZSBp
cyBvbmx5IG5lZWRlZCB3aGVuIHdlIGFyZSBzdWJtaXR0aW5nIGEgZm9ybSB0aGF0IGFmZmVjdHMg
dGhpcyBmcmFtZS4KICAgICAvLyBGSVhNRTogRnJhbWUgdGFyZ2V0aW5nIGlzIG9ubHkgb25lIG9m
IHRoZSB3YXlzIHRoZSBzdWJtaXNzaW9uIGNvdWxkIGVuZCB1cCBkb2luZyBzb21ldGhpbmcgb3Ro
ZXIKICAgICAvLyB0aGFuIHJlcGxhY2luZyB0aGlzIGZyYW1lJ3MgY29udGVudCwgc28gdGhpcyBj
aGVjayBpcyBmbGF3ZWQuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgY2hlY2sgaXMgaGFyZGx5Ci0g
ICAgLy8gbmVlZGVkIGFueSBtb3JlIG5vdyB0aGF0IHdlIHJlc2V0IF9zdWJtaXR0ZWRGb3JtVVJM
IG9uIGVhY2ggbW91c2Ugb3Iga2V5IGRvd24gZXZlbnQuCisgICAgLy8gbmVlZGVkIGFueSBtb3Jl
IG5vdyB0aGF0IHdlIHJlc2V0IG1fc3VibWl0dGVkRm9ybVVSTCBvbiBlYWNoIG1vdXNlIG9yIGtl
eSBkb3duIGV2ZW50LgogICAgIFdlYkNvcmVGcmFtZUJyaWRnZSAqdGFyZ2V0ID0gcmVxdWVzdC5m
cmFtZU5hbWUuaXNFbXB0eSgpID8gX2JyaWRnZSA6IFtfYnJpZGdlIGZpbmRGcmFtZU5hbWVkOnJl
cXVlc3QuZnJhbWVOYW1lLmdldE5TU3RyaW5nKCldOwogICAgIEZyYW1lICp0YXJnZXRQYXJ0ID0g
W3RhcmdldCBpbXBsXTsKICAgICBib29sIHdpbGxSZXBsYWNlVGhpc0ZyYW1lID0gZmFsc2U7CkBA
IC00OTIsMTAgKzQ2Niw5IEBAIHZvaWQgRnJhbWVNYWM6OnN1Ym1pdEZvcm0oY29uc3QgUmVzb3Vy
Y2UKICAgICAgICAgfQogICAgIH0KICAgICBpZiAod2lsbFJlcGxhY2VUaGlzRnJhbWUpIHsKLSAg
ICAgICAgaWYgKF9zdWJtaXR0ZWRGb3JtVVJMID09IHJlcXVlc3QudXJsKCkpIHsKKyAgICAgICAg
aWYgKG1fc3VibWl0dGVkRm9ybVVSTCA9PSByZXF1ZXN0LnVybCgpKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIF9zdWJtaXR0ZWRGb3JtVVJMID0gcmVxdWVzdC51cmwo
KTsKKyAgICAgICAgbV9zdWJtaXR0ZWRGb3JtVVJMID0gcmVxdWVzdC51cmwoKTsKICAgICB9CiAK
ICAgICBpZiAoIXJlcXVlc3QuZG9Qb3N0KCkpIHsKQEAgLTYyOSw3ICs2MDIsNyBAQCB2b2lkIEZy
YW1lTWFjOjpzZXRWaWV3KEZyYW1lVmlldyAqdmlldykKICAgICAvLyBPbmx5IG9uZSBmb3JtIHN1
Ym1pc3Npb24gaXMgYWxsb3dlZCBwZXIgdmlldyBvZiBhIHBhcnQuCiAgICAgLy8gU2luY2UgdGhp
cyBwYXJ0IG1heSBiZSBnZXR0aW5nIHJldXNlZCBhcyBhIHJlc3VsdCBvZiBiZWluZwogICAgIC8v
IHB1bGxlZCBmcm9tIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUsIHJlc2V0IHRoaXMgZmxhZy4KLSAg
ICBfc3VibWl0dGVkRm9ybVVSTCA9IEtVUkwoKTsKKyAgICBtX3N1Ym1pdHRlZEZvcm1VUkwgPSBL
VVJMKCk7CiB9CiAKIHZvaWQgRnJhbWVNYWM6OnNldFRpdGxlKGNvbnN0IFN0cmluZyAmdGl0bGUp
CkBAIC0yNzA1LDE4ICsyNjc4LDE3IEBAIE5TSW1hZ2UgKkZyYW1lTWFjOjppbWFnZUZyb21SZWN0
KE5TUmVjdCAKIAogTlNJbWFnZSAqRnJhbWVNYWM6OnNlbGVjdGlvbkltYWdlKCkgY29uc3QKIHsK
LSAgICBfZHJhd1NlbGVjdGlvbk9ubHkgPSB0cnVlOyAgLy8gaW52b2tlIHNwZWNpYWwgZHJhd2lu
ZyBtb2RlCisgICAgbV9kcmF3U2VsZWN0aW9uT25seSA9IHRydWU7ICAvLyBpbnZva2Ugc3BlY2lh
bCBkcmF3aW5nIG1vZGUKICAgICBOU0ltYWdlICpyZXN1bHQgPSBpbWFnZUZyb21SZWN0KHZpc2li
bGVTZWxlY3Rpb25SZWN0KCkpOwotICAgIF9kcmF3U2VsZWN0aW9uT25seSA9IGZhbHNlOworICAg
IG1fZHJhd1NlbGVjdGlvbk9ubHkgPSBmYWxzZTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBO
U0ltYWdlICpGcmFtZU1hYzo6c25hcHNob3REcmFnSW1hZ2UoTm9kZSAqbm9kZSwgTlNSZWN0ICpp
bWFnZVJlY3QsIE5TUmVjdCAqZWxlbWVudFJlY3QpIGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0
ICpyZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlcikgeworICAg
IGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQogICAgIAogICAgIHJl
bmRlcmVyLT51cGRhdGVEcmFnU3RhdGUodHJ1ZSk7ICAgIC8vIG1hcmsgZHJhZ2dlZCBub2RlcyAo
c28gdGhleSBwaWNrIHVwIHRoZSByaWdodCBDU1MpCiAgICAgZC0+bV9kb2MtPnVwZGF0ZUxheW91
dCgpOyAgICAgICAgLy8gZm9yY2VzIHN0eWxlIHJlY2FsYyAtIG5lZWRlZCBzaW5jZSBjaGFuZ2lu
ZyB0aGUgZHJhZyBzdGF0ZSBtaWdodApAQCAtMjcyNCwxOCArMjY5NiwxNiBAQCBOU0ltYWdlICpG
cmFtZU1hYzo6c25hcHNob3REcmFnSW1hZ2UoTm9kCiAgICAgSW50UmVjdCB0b3BMZXZlbFJlY3Q7
CiAgICAgTlNSZWN0IHBhaW50aW5nUmVjdCA9IHJlbmRlcmVyLT5wYWludGluZ1Jvb3RSZWN0KHRv
cExldmVsUmVjdCk7CiAKLSAgICBfZWxlbWVudFRvRHJhdyA9IG5vZGU7ICAgICAgICAgICAgICAv
LyBpbnZva2Ugc3BlY2lhbCBzdWItdHJlZSBkcmF3aW5nIG1vZGUKKyAgICBtX2VsZW1lbnRUb0Ry
YXcgPSBub2RlOyAgICAgICAgICAgICAgLy8gaW52b2tlIHNwZWNpYWwgc3ViLXRyZWUgZHJhd2lu
ZyBtb2RlCiAgICAgTlNJbWFnZSAqcmVzdWx0ID0gaW1hZ2VGcm9tUmVjdChwYWludGluZ1JlY3Qp
OwogICAgIHJlbmRlcmVyLT51cGRhdGVEcmFnU3RhdGUoZmFsc2UpOwogICAgIGQtPm1fZG9jLT51
cGRhdGVMYXlvdXQoKTsKLSAgICBfZWxlbWVudFRvRHJhdyA9IDA7CisgICAgbV9lbGVtZW50VG9E
cmF3ID0gMDsKIAotICAgIGlmIChlbGVtZW50UmVjdCkgeworICAgIGlmIChlbGVtZW50UmVjdCkK
ICAgICAgICAgKmVsZW1lbnRSZWN0ID0gdG9wTGV2ZWxSZWN0OwotICAgIH0KLSAgICBpZiAoaW1h
Z2VSZWN0KSB7CisgICAgaWYgKGltYWdlUmVjdCkKICAgICAgICAgKmltYWdlUmVjdCA9IHBhaW50
aW5nUmVjdDsKLSAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogYnJpZGdlL21h
Yy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYnJpZGdlL21hYy9XZWJDb3Jl
RnJhbWVCcmlkZ2UubW0JKHJldmlzaW9uIDEzMzkzKQorKysgYnJpZGdlL21hYy9XZWJDb3JlRnJh
bWVCcmlkZ2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyNjIsMzggKzEyNjIsMzIgQEAgc3RhdGlj
IEhUTUxGb3JtRWxlbWVudCAqZm9ybUVsZW1lbnRGcm9tRAogLSAoTlNWaWV3ICopbmV4dEtleVZp
ZXcKIHsKICAgICBEb2N1bWVudCAqZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAo
IWRvYykgeworICAgIGlmICghZG9jKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIH0KICAgICBy
ZXR1cm4gbV9mcmFtZS0+bmV4dEtleVZpZXcoZG9jLT5mb2N1c05vZGUoKSwgS1dRU2VsZWN0aW5n
TmV4dCk7CiB9CiAKIC0gKE5TVmlldyAqKXByZXZpb3VzS2V5VmlldwogewogICAgIERvY3VtZW50
ICpkb2MgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jKSB7CisgICAgaWYgKCFk
b2MpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQogICAgIHJldHVybiBtX2ZyYW1lLT5uZXh0
S2V5Vmlldyhkb2MtPmZvY3VzTm9kZSgpLCBLV1FTZWxlY3RpbmdQcmV2aW91cyk7CiB9CiAKIC0g
KE5TVmlldyAqKW5leHRLZXlWaWV3SW5zaWRlV2ViRnJhbWVWaWV3cwogewogICAgIERvY3VtZW50
ICpkb2MgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jKSB7CisgICAgaWYgKCFk
b2MpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQotICAgIAogICAgIHJldHVybiBtX2ZyYW1l
LT5uZXh0S2V5Vmlld0luRnJhbWVIaWVyYXJjaHkoZG9jLT5mb2N1c05vZGUoKSwgS1dRU2VsZWN0
aW5nTmV4dCk7CiB9CiAKIC0gKE5TVmlldyAqKXByZXZpb3VzS2V5Vmlld0luc2lkZVdlYkZyYW1l
Vmlld3MKIHsKICAgICBEb2N1bWVudCAqZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBp
ZiAoIWRvYykgeworICAgIGlmICghZG9jKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIH0KLQog
ICAgIHJldHVybiBtX2ZyYW1lLT5uZXh0S2V5Vmlld0luRnJhbWVIaWVyYXJjaHkoZG9jLT5mb2N1
c05vZGUoKSwgS1dRU2VsZWN0aW5nUHJldmlvdXMpOwogfQogCkluZGV4OiBicmlkZ2UvbWFjL0Zy
YW1lTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gYnJpZGdlL21hYy9GcmFtZU1hYy5oCShyZXZpc2lvbiAx
MzM5MykKKysrIGJyaWRnZS9tYWMvRnJhbWVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDkg
KzIzMiw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcGFzc1N1YmZyYW1lRXZlbnRUb1N1
YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMgJik7CiAgICAgdmlydHVhbCBib29s
IHBhc3NXaGVlbEV2ZW50VG9DaGlsZFdpZGdldChOb2RlICopOwogICAgIAotICAgIHZpcnR1YWwg
dm9pZCBjbGVhclJlY29yZGVkRm9ybVZhbHVlcygpOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRG
b3JtVmFsdWUoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmbmFtZSwgY29uc3QgRGVwcmVjYXRlZFN0
cmluZyAmdmFsdWUsIEhUTUxGb3JtRWxlbWVudCAqZWxlbWVudCk7Ci0KICAgICBOU1N0cmluZyAq
c2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsKFJlZ3VsYXJFeHByZXNzaW9uICpyZWdFeHAsIEhUTUxU
YWJsZUNlbGxFbGVtZW50ICpjZWxsKTsKICAgICBOU1N0cmluZyAqc2VhcmNoRm9yTGFiZWxzQmVm
b3JlRWxlbWVudChOU0FycmF5ICpsYWJlbHMsIEVsZW1lbnQgKmVsZW1lbnQpOwogICAgIE5TU3Ry
aW5nICptYXRjaExhYmVsc0FnYWluc3RFbGVtZW50KE5TQXJyYXkgKmxhYmVscywgRWxlbWVudCAq
ZWxlbWVudCk7CkluZGV4OiBwYWdlL0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9GcmFtZS5o
CShyZXZpc2lvbiAxMzM5MykKKysrIHBhZ2UvRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUz
LDggKzU1Myw2IEBAIHB1YmxpYzoKICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHVzZXJBZ2Vu
dCgpIGNvbnN0ID0gMDsKICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIGluY29taW5nUmVmZXJy
ZXIoKSBjb25zdCA9IDA7CiAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyBtaW1lVHlwZUZvckZp
bGVOYW1lKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJikgY29uc3QgPSAwOwotICB2aXJ0dWFsIHZv
aWQgY2xlYXJSZWNvcmRlZEZvcm1WYWx1ZXMoKSA9IDA7Ci0gIHZpcnR1YWwgdm9pZCByZWNvcmRG
b3JtVmFsdWUoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmbmFtZSwgY29uc3QgRGVwcmVjYXRlZFN0
cmluZyAmdmFsdWUsIEhUTUxGb3JtRWxlbWVudCAqZWxlbWVudCkgPSAwOwogICB2aXJ0dWFsIEtK
Uzo6QmluZGluZ3M6Okluc3RhbmNlICpnZXRFbWJlZEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCop
ID0gMDsKICAgdmlydHVhbCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSAqZ2V0T2JqZWN0SW5zdGFu
Y2VGb3JXaWRnZXQoV2lkZ2V0KikgPSAwOwogICB2aXJ0dWFsIEtKUzo6QmluZGluZ3M6Okluc3Rh
bmNlICpnZXRBcHBsZXRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqKSA9IDA7CkBAIC03NjQsNiAr
NzYyLDkgQEAgcHJpdmF0ZToKICAgLy8gQ3VycmVudGx5LCBhbGwgdGhpcyBkb2VzIGlzIGNsZWFy
IHRoZSAiZG9uJ3Qgc3VibWl0IGZvcm0gdHdpY2UiIGRhdGEgbWVtYmVyLgogICB2b2lkIHByZXBh
cmVGb3JVc2VyQWN0aW9uKCk7CiAgIE5vZGUgKm1vdXNlUHJlc3NOb2RlKCk7CisgIAorICB2b2lk
IGNsZWFyUmVjb3JkZWRGb3JtVmFsdWVzKCk7CisgIHZvaWQgcmVjb3JkRm9ybVZhbHVlKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgUGFzc1JlZlB0cjxIVE1MRm9ybUVs
ZW1lbnQ+KTsKIAogICBib29sIGlzQ29tcGxldGUoKSBjb25zdDsKICAgYm9vbCBpc0xvYWRpbmdN
YWluUmVzb3VyY2UoKSBjb25zdDsKQEAgLTgyOCwxNCArODI5LDE2IEBAIHB1YmxpYzoKICBwcml2
YXRlOgogICBmcmllbmQgY2xhc3MgRnJhbWVQcml2YXRlOwogICBGcmFtZVByaXZhdGUqIGQ7Ci0g
ICAgICAKLSAgbXV0YWJsZSBSZWZQdHI8Tm9kZT4gX2VsZW1lbnRUb0RyYXc7Ci0gIG11dGFibGUg
Ym9vbCBfZHJhd1NlbGVjdGlvbk9ubHk7Ci0gIEtVUkwgX3N1Ym1pdHRlZEZvcm1VUkw7CisKKyAg
bXV0YWJsZSBSZWZQdHI8Tm9kZT4gbV9lbGVtZW50VG9EcmF3OworICBtdXRhYmxlIGJvb2wgbV9k
cmF3U2VsZWN0aW9uT25seTsKKyAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9mb3JtVmFsdWVz
QWJvdXRUb0JlU3VibWl0dGVkOworICBSZWZQdHI8RWxlbWVudD4gbV9mb3JtQWJvdXRUb0JlU3Vi
bWl0dGVkOworICBLVVJMIG1fc3VibWl0dGVkRm9ybVVSTDsKICAgYm9vbCBtX21hcmtlZFRleHRV
c2VzVW5kZXJsaW5lczsKICAgRGVwcmVjYXRlZFZhbHVlTGlzdDxNYXJrZWRUZXh0VW5kZXJsaW5l
PiBtX21hcmtlZFRleHRVbmRlcmxpbmVzOwogICBib29sIG1fd2luZG93SGFzRm9jdXM7Ci0gIGlu
dCBmcmFtZUNvdW50OworICB1bnNpZ25lZCBmcmFtZUNvdW50OwogfTsKIAogfQpJbmRleDogcGFn
ZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDEzMzkz
KQorKysgcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw3ICsxNDYsNyBAQCBz
dGF0aWMgaW5saW5lIEZyYW1lKiBwYXJlbnRGcm9tT3duZXJSZW5kCiAKIEZyYW1lOjpGcmFtZShQ
YWdlKiBwYWdlLCBSZW5kZXJQYXJ0KiBvd25lclJlbmRlcmVyKSAKICAgICA6IGQobmV3IEZyYW1l
UHJpdmF0ZShwYWdlLCBwYXJlbnRGcm9tT3duZXJSZW5kZXJlcihvd25lclJlbmRlcmVyKSwgdGhp
cywgb3duZXJSZW5kZXJlcikpCi0gICAgLCBfZHJhd1NlbGVjdGlvbk9ubHkoZmFsc2UpCisgICAg
LCBtX2RyYXdTZWxlY3Rpb25Pbmx5KGZhbHNlKQogICAgICwgbV9tYXJrZWRUZXh0VXNlc1VuZGVy
bGluZXMoZmFsc2UpCiAgICAgLCBtX3dpbmRvd0hhc0ZvY3VzKGZhbHNlKQogICAgICwgZnJhbWVD
b3VudCgwKQpAQCAtMTQ2NSw2ICsxNDY1LDE4IEBAIEZyYW1lKiBGcmFtZTo6bG9hZFN1YmZyYW1l
KFJlbmRlclBhcnQqIHIKICAgICByZXR1cm4gZnJhbWU7CiB9CiAKK3ZvaWQgRnJhbWU6OmNsZWFy
UmVjb3JkZWRGb3JtVmFsdWVzKCkKK3sKKyAgICBtX2Zvcm1BYm91dFRvQmVTdWJtaXR0ZWQgPSAw
OworICAgIG1fZm9ybVZhbHVlc0Fib3V0VG9CZVN1Ym1pdHRlZC5jbGVhcigpOworfQorCit2b2lk
IEZyYW1lOjpyZWNvcmRGb3JtVmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICBtX2Zv
cm1BYm91dFRvQmVTdWJtaXR0ZWQgPSBlbGVtZW50OworICAgIG1fZm9ybVZhbHVlc0Fib3V0VG9C
ZVN1Ym1pdHRlZC5zZXQobmFtZSwgdmFsdWUpOworfQorCiB2b2lkIEZyYW1lOjpzdWJtaXRGb3Jt
QWdhaW4oKQogewogICAgIEZyYW1lUHJpdmF0ZTo6U3VibWl0Rm9ybSogZm9ybSA9IGQtPm1fc3Vi
bWl0Rm9ybTsKQEAgLTE1NzAsNyArMTU4Miw2IEBAIHZvaWQgRnJhbWU6OnN1Ym1pdEZvcm0oY29u
c3QgY2hhciAqYWN0aW8KICAgfQogfQogCi0KIHZvaWQgRnJhbWU6OnBhcmVudENvbXBsZXRlZCgp
CiB7CiAgICAgaWYgKGQtPm1fc2NoZWR1bGVkUmVkaXJlY3Rpb24gIT0gbm9SZWRpcmVjdGlvblNj
aGVkdWxlZCAmJiAhZC0+bV9yZWRpcmVjdGlvblRpbWVyLmlzQWN0aXZlKCkpCkBAIC0yNTY5LDkg
KzI1ODAsOCBAQCBib29sIEZyYW1lOjpvcGVuVVJMKGNvbnN0IEtVUkwgJlVSTCkKIAogdm9pZCBG
cmFtZTo6ZGlkTm90T3BlblVSTChjb25zdCBLVVJMICZVUkwpCiB7Ci0gICAgaWYgKF9zdWJtaXR0
ZWRGb3JtVVJMID09IFVSTCkgewotICAgICAgICBfc3VibWl0dGVkRm9ybVVSTCA9IEtVUkwoKTsK
LSAgICB9CisgICAgaWYgKG1fc3VibWl0dGVkRm9ybVVSTCA9PSBVUkwpCisgICAgICAgIG1fc3Vi
bWl0dGVkRm9ybVVSTCA9IEtVUkwoKTsKIH0KIAogLy8gU2NhbnMgbG9naWNhbGx5IGZvcndhcmQg
ZnJvbSAic3RhcnQiLCBpbmNsdWRpbmcgYW55IGNoaWxkIGZyYW1lcwpAQCAtMjU3OSwxNyArMjU4
OSwxNCBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50ICpzY2FuRm9yRm9ybShOb2RlCiB7CiAgICAg
Tm9kZSAqbjsKICAgICBmb3IgKG4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUo
KSkgewotICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShmb3JtVGFnKSkgeworICAgICAgICBpZiAo
bi0+aGFzVGFnTmFtZShmb3JtVGFnKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxI
VE1MRm9ybUVsZW1lbnQgKj4obik7Ci0gICAgICAgIH0gZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVu
dCgpCi0gICAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQgKj4obikt
PmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50ICo+KG4pLT5mb3JtKCk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAobi0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwgbi0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKSB7
CisgICAgICAgIGVsc2UgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxIVE1M
RWxlbWVudCo+KG4pLT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpKQorICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnQqPihuKS0+Zm9ybSgpOworICAgICAg
ICBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKGZyYW1lVGFnKSB8fCBuLT5oYXNUYWdOYW1lKGlmcmFt
ZVRhZykpIHsKICAgICAgICAgICAgIE5vZGUgKmNoaWxkRG9jID0gc3RhdGljX2Nhc3Q8SFRNTEZy
YW1lRWxlbWVudCAqPihuKS0+Y29udGVudERvY3VtZW50KCk7Ci0gICAgICAgICAgICBIVE1MRm9y
bUVsZW1lbnQgKmZyYW1lUmVzdWx0ID0gc2NhbkZvckZvcm0oY2hpbGREb2MpOwotICAgICAgICAg
ICAgaWYgKGZyYW1lUmVzdWx0KSB7CisgICAgICAgICAgICBpZiAoSFRNTEZvcm1FbGVtZW50ICpm
cmFtZVJlc3VsdCA9IHNjYW5Gb3JGb3JtKGNoaWxkRG9jKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZnJhbWVSZXN1bHQ7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0
dXJuIDA7CkBAIC0yNzI3LDkgKzI3MzQsOSBAQCB2b2lkIEZyYW1lOjpwYWludChHcmFwaGljc0Nv
bnRleHQqIHAsIGNvCiAgICAgICAgIGZpbGxXaXRoUmVkID0gZmFsc2U7IC8vIFN1YmZyYW1lLCBk
b24ndCBmaWxsIHdpdGggcmVkLgogICAgIGVsc2UgaWYgKHZpZXcoKSAmJiB2aWV3KCktPmlzVHJh
bnNwYXJlbnQoKSkKICAgICAgICAgZmlsbFdpdGhSZWQgPSBmYWxzZTsgLy8gVHJhbnNwYXJlbnQs
IGRvbid0IGZpbGwgd2l0aCByZWQuCi0gICAgZWxzZSBpZiAoX2RyYXdTZWxlY3Rpb25Pbmx5KQor
ICAgIGVsc2UgaWYgKG1fZHJhd1NlbGVjdGlvbk9ubHkpCiAgICAgICAgIGZpbGxXaXRoUmVkID0g
ZmFsc2U7IC8vIFNlbGVjdGlvbnMgYXJlIHRyYW5zcGFyZW50LCBkb24ndCBmaWxsIHdpdGggcmVk
LgotICAgIGVsc2UgaWYgKF9lbGVtZW50VG9EcmF3KQorICAgIGVsc2UgaWYgKG1fZWxlbWVudFRv
RHJhdykKICAgICAgICAgZmlsbFdpdGhSZWQgPSBmYWxzZTsgLy8gRWxlbWVudCBpbWFnZXMgYXJl
IHRyYW5zcGFyZW50LCBkb24ndCBmaWxsIHdpdGggcmVkLgogICAgIGVsc2UKICAgICAgICAgZmls
bFdpdGhSZWQgPSB0cnVlOwpAQCAtMjczOSw5ICsyNzQ2LDkgQEAgdm9pZCBGcmFtZTo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0KiBwLCBjbwogI2VuZGlmCiAgICAgCiAgICAgaWYgKHJlbmRlcmVyKCkp
IHsKLSAgICAgICAgLy8gX2VsZW1lbnRUb0RyYXcgaXMgdXNlZCB0byBkcmF3IG9ubHkgb25lIGVs
ZW1lbnQKLSAgICAgICAgUmVuZGVyT2JqZWN0ICplbHRSZW5kZXJlciA9IF9lbGVtZW50VG9EcmF3
ID8gX2VsZW1lbnRUb0RyYXctPnJlbmRlcmVyKCkgOiAwOwotICAgICAgICByZW5kZXJlcigpLT5s
YXllcigpLT5wYWludChwLCByZWN0LCBfZHJhd1NlbGVjdGlvbk9ubHksIGVsdFJlbmRlcmVyKTsK
KyAgICAgICAgLy8gbV9lbGVtZW50VG9EcmF3IGlzIHVzZWQgdG8gZHJhdyBvbmx5IG9uZSBlbGVt
ZW50CisgICAgICAgIFJlbmRlck9iamVjdCAqZWx0UmVuZGVyZXIgPSBtX2VsZW1lbnRUb0RyYXcg
PyBtX2VsZW1lbnRUb0RyYXctPnJlbmRlcmVyKCkgOiAwOworICAgICAgICByZW5kZXJlcigpLT5s
YXllcigpLT5wYWludChwLCByZWN0LCBtX2RyYXdTZWxlY3Rpb25Pbmx5LCBlbHRSZW5kZXJlcik7
CiAKICNpZiBfX0FQUExFX18KICAgICAgICAgLy8gUmVnaW9ucyBtYXkgaGF2ZSBjaGFuZ2VkIGFz
IGEgcmVzdWx0IG9mIHRoZSB2aXNpYmlsaXR5L3otaW5kZXggb2YgZWxlbWVudCBjaGFuZ2luZy4K
QEAgLTMyNzMsNyArMzI4MCw3IEBAIHZvaWQgRnJhbWU6OnByZXBhcmVGb3JVc2VyQWN0aW9uKCkK
IHsKICAgICAvLyBSZXNldCB0aGUgbXVsdGlwbGUgZm9ybSBzdWJtaXNzaW9uIHByb3RlY3Rpb24g
Y29kZS4KICAgICAvLyBXZSdsbCBsZXQgeW91IHN1Ym1pdCB0aGUgc2FtZSBmb3JtIHR3aWNlIGlm
IHlvdSBkbyB0d28gc2VwYXJhdGUgdXNlciBhY3Rpb25zLgotICAgIF9zdWJtaXR0ZWRGb3JtVVJM
ID0gS1VSTCgpOworICAgIG1fc3VibWl0dGVkRm9ybVVSTCA9IEtVUkwoKTsKIH0KIAogTm9kZSAq
RnJhbWU6Om1vdXNlUHJlc3NOb2RlKCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7183</attachid>
            <date>2006-03-19 21:35:38 -0800</date>
            <delta_ts>2006-03-19 21:37:27 -0800</delta_ts>
            <desc>Better patch, now also moving all Frame members to FramePrivate</desc>
            <filename>new.patch</filename>
            <type>text/plain</type>
            <size>72386</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRt
bC9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzMzkzKQorKysga2h0bWwvaHRt
bC9IVE1MRm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTIsOCArMzUyLDcgQEAg
dm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCggYm9vbCBhY3RpdgogICAgICAgICAgICAgSFRN
TElucHV0RWxlbWVudCAqaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oY3Vy
cmVudCk7CiAgICAgICAgICAgICBpZiAoaW5wdXQtPmlucHV0VHlwZSgpID09IEhUTUxJbnB1dEVs
ZW1lbnQ6OlRFWFQKICAgICAgICAgICAgICAgICB8fCBpbnB1dC0+aW5wdXRUeXBlKCkgPT0gIEhU
TUxJbnB1dEVsZW1lbnQ6OlBBU1NXT1JECi0gICAgICAgICAgICAgICAgfHwgaW5wdXQtPmlucHV0
VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnQ6OlNFQVJDSCkKLSAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICB8fCBpbnB1dC0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudDo6U0VB
UkNIKSB7CiAgICAgICAgICAgICAgICAgZnJhbWUtPnJlY29yZEZvcm1WYWx1ZShpbnB1dC0+bmFt
ZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKSwgaW5wdXQtPnZhbHVlKCkuZGVwcmVjYXRlZFN0cmluZygp
LCB0aGlzKTsKICAgICAgICAgICAgICAgICBpZiAoaW5wdXQtPnJlbmRlcmVyKCkgJiYgaW5wdXQt
PmlucHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnQ6OlNFQVJDSCkKICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyTGluZUVkaXQqPihpbnB1dC0+cmVuZGVyZXIoKSktPmFk
ZFNlYXJjaFJlc3VsdCgpOwpAQCAtMzYxLDQ2ICszNjAsNDEgQEAgdm9pZCBIVE1MRm9ybUVsZW1l
bnQ6OnN1Ym1pdCggYm9vbCBhY3RpdgogICAgICAgICB9CiAKICAgICAgICAgaWYgKG5lZWRCdXR0
b25BY3RpdmF0aW9uKSB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudC0+aXNBY3RpdmF0ZWRTdWJt
aXQoKSkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmlzQWN0aXZhdGVkU3VibWl0KCkpCiAg
ICAgICAgICAgICAgICAgbmVlZEJ1dHRvbkFjdGl2YXRpb24gPSBmYWxzZTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uID09IDAgJiYgY3VycmVudC0+
aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKGZpcnN0
U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbiA9PSAwICYmIGN1cnJlbnQtPmlzU3VjY2Vzc2Z1bFN1Ym1p
dEJ1dHRvbigpKQogICAgICAgICAgICAgICAgIGZpcnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbiA9
IGN1cnJlbnQ7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobmVl
ZEJ1dHRvbkFjdGl2YXRpb24gJiYgZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uKSB7CisgICAg
aWYgKG5lZWRCdXR0b25BY3RpdmF0aW9uICYmIGZpcnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbikK
ICAgICAgICAgZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uLT5zZXRBY3RpdmF0ZWRTdWJtaXQo
dHJ1ZSk7Ci0gICAgfQogCiAgICAgaWYgKCFtX3Bvc3QpCiAgICAgICAgIG1fbXVsdGlwYXJ0ID0g
ZmFsc2U7CiAgICAgCiAgICAgRm9ybURhdGEgZm9ybV9kYXRhOwogICAgIGlmIChmb3JtRGF0YShm
b3JtX2RhdGEpKSB7Ci0gICAgICAgIGlmKG1fcG9zdCkgewotICAgICAgICAgICAgZnJhbWUtPnN1
Ym1pdEZvcm0oICJwb3N0IiwgbV91cmwuZGVwcmVjYXRlZFN0cmluZygpLCBmb3JtX2RhdGEsCisg
ICAgICAgIGlmKG1fcG9zdCkKKyAgICAgICAgICAgIGZyYW1lLT5zdWJtaXRGb3JtKCJwb3N0Iiwg
bV91cmwuZGVwcmVjYXRlZFN0cmluZygpLCBmb3JtX2RhdGEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fdGFyZ2V0LmRlcHJlY2F0ZWRTdHJpbmcoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jdHlwZSgpLmRlcHJlY2F0ZWRTdHJpbmco
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnkoKS5kZXBy
ZWNhdGVkU3RyaW5nKCkgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IGZyYW1lLT5zdWJtaXRGb3JtKCAiZ2V0IiwgbV91cmwuZGVwcmVjYXRlZFN0cmluZygpLCBmb3Jt
X2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdGFyZ2V0LmRl
cHJlY2F0ZWRTdHJpbmcoKSApOwotICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvdW5kYXJ5KCkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZnJhbWUtPnN1Ym1pdEZvcm0oImdldCIsIG1fdXJsLmRlcHJlY2F0ZWRT
dHJpbmcoKSwgZm9ybV9kYXRhLCBtX3RhcmdldC5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIH0K
IAotICAgIGlmIChuZWVkQnV0dG9uQWN0aXZhdGlvbiAmJiBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRC
dXR0b24pIHsKKyAgICBpZiAobmVlZEJ1dHRvbkFjdGl2YXRpb24gJiYgZmlyc3RTdWNjZXNzZnVs
U3VibWl0QnV0dG9uKQogICAgICAgICBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24tPnNldEFj
dGl2YXRlZFN1Ym1pdChmYWxzZSk7Ci0gICAgfQogICAgIAogICAgIG1fZG9pbmdzdWJtaXQgPSBt
X2luc3VibWl0ID0gZmFsc2U7CiB9CiAKLXZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZXNldCggICkK
K3ZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZXNldCgpCiB7CiAgICAgRnJhbWUgKmZyYW1lID0gZ2V0
RG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZihtX2lucmVzZXQgfHwgIWZyYW1lKSByZXR1cm47
CisgICAgaWYgKG1faW5yZXNldCB8fCAhZnJhbWUpCisgICAgICAgIHJldHVybjsKIAogICAgIG1f
aW5yZXNldCA9IHRydWU7CiAKQEAgLTQxOSw4ICs0MTMsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVu
dDo6cmVzZXQoICApCiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBhY3Rp
b25BdHRyKSAKLSAgICB7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBhY3Rpb25BdHRyKSB7CiAg
ICAgICAgIGJvb2wgb2xkVVJMV2FzU2VjdXJlID0gZm9ybVdvdWxkSGF2ZVNlY3VyZVN1Ym1pc3Np
b24obV91cmwpOwogICAgICAgICBtX3VybCA9IFdlYkNvcmU6OnBhcnNlVVJMKGF0dHItPnZhbHVl
KCkpOwogICAgICAgICBib29sIG5ld1VSTElzU2VjdXJlID0gZm9ybVdvdWxkSGF2ZVNlY3VyZVN1
Ym1pc3Npb24obV91cmwpOwpAQCAtNDMxLDI4ICs0MjQsMjggQEAgdm9pZCBIVE1MRm9ybUVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IGdldERvY3VtZW50KCktPnNlY3VyZUZvcm1SZW1vdmVkKCk7CiAgICAgfQotICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSB0YXJnZXRBdHRyKSB7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IHRhcmdldEF0dHIpCiAgICAgICAgIG1fdGFyZ2V0ID0gYXR0ci0+dmFsdWUoKTsKLSAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBtZXRob2RBdHRyKSB7CisgICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG1ldGhvZEF0dHIpIHsKICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGF0dHItPnZhbHVlKCksICJwb3N0IikpCiAgICAgICAgICAgICBtX3Bvc3QgPSB0cnVlOwogICAg
ICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiZ2V0IikpCiAg
ICAgICAgICAgICBtX3Bvc3QgPSBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBlbmN0eXBlQXR0cikgeworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGVuY3R5cGVB
dHRyKQogICAgICAgICBwYXJzZUVuY3R5cGUoYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gYWNjZXB0X2NoYXJzZXRBdHRyKSB7CisgICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IGFjY2VwdF9jaGFyc2V0QXR0cikKICAgICAgICAgLy8gc3BhY2Ugc2VwYXJh
dGVkIGxpc3Qgb2YgY2hhcnNldHMgdGhlIHNlcnZlcgogICAgICAgICAvLyBhY2NlcHRzIC0gc2Vl
IHJmYzIwNDUKICAgICAgICAgbV9hY2NlcHRjaGFyc2V0ID0gYXR0ci0+dmFsdWUoKTsKLSAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhY2NlcHRBdHRyKSB7CisgICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IGFjY2VwdEF0dHIpIHsKICAgICAgICAgLy8gaWdub3JlIHRoaXMgb25lIGZv
ciB0aGUgbW9tZW50Li4uCi0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYXV0b2NvbXBs
ZXRlQXR0cikgeworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGF1dG9jb21wbGV0ZUF0
dHIpCiAgICAgICAgIG1fYXV0b2NvbXBsZXRlID0gIWVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZh
bHVlKCksICJvZmYiKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnN1Ym1pdEF0
dHIpIHsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zdWJtaXRBdHRyKQogICAgICAg
ICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihzdWJtaXRFdmVudCwgYXR0cik7Ci0gICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gb25yZXNldEF0dHIpIHsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gb25yZXNldEF0dHIpCiAgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKHJlc2V0RXZl
bnQsIGF0dHIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7Cisg
ICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7CiAgICAgICAgIFN0cmluZyBu
ZXdOYW1lQXR0ciA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGlmIChpbkRvY3VtZW50KCkgJiYg
Z2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICAgICAgSFRNTERvY3Vt
ZW50ICpkb2N1bWVudCA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihnZXREb2N1bWVudCgp
KTsKSW5kZXg6IHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRm
b3JtL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAxMzM5MykKKysrIHBsYXRmb3JtL0dyYXBo
aWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgIGNsYXNzIEZvbnQ7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0UHJp
dmF0ZTsKKyAgICBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CiAgICAgY2xh
c3MgSW50UG9pbnQ7CiAgICAgY2xhc3MgSW50UG9pbnRBcnJheTsKIApAQCAtOTEsMzIgKzkyLDMx
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzYXZlKCk7CiAgICAgICAgIHZv
aWQgcmVzdG9yZSgpOwogICAgICAgICAKLSAgICAgICAgdm9pZCBkcmF3UmVjdChpbnQsIGludCwg
aW50LCBpbnQpOwotICAgICAgICB2b2lkIGRyYXdMaW5lKGludCwgaW50LCBpbnQsIGludCk7Ci0g
ICAgICAgIHZvaWQgZHJhd0VsbGlwc2UoaW50LCBpbnQsIGludCwgaW50KTsKKyAgICAgICAgdm9p
ZCBkcmF3UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZvaWQgZHJhd0xpbmUoY29uc3Qg
SW50UG9pbnQmLCBjb25zdCBJbnRQb2ludCYpOworICAgICAgICB2b2lkIGRyYXdFbGxpcHNlKGNv
bnN0IEludFJlY3QmKTsKICAgICAgICAgdm9pZCBkcmF3QXJjKGludCwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQpOwogICAgICAgICB2b2lkIGRyYXdDb252ZXhQb2x5Z29uKGNvbnN0IEludFBvaW50
QXJyYXkmKTsKIAotICAgICAgICB2b2lkIGZpbGxSZWN0KGludCwgaW50LCBpbnQsIGludCwgY29u
c3QgQnJ1c2gmKTsKICAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBJbnRSZWN0JiwgY29uc3Qg
QnJ1c2gmKTsKIAogICAgICAgICB2b2lkIGRyYXdJbWFnZUF0UG9pbnQoSW1hZ2UqLCBjb25zdCBJ
bnRQb2ludCYsIEltYWdlOjpDb21wb3NpdGVPcGVyYXRvciA9IEltYWdlOjpDb21wb3NpdGVTb3Vy
Y2VPdmVyKTsKICAgICAgICAgdm9pZCBkcmF3SW1hZ2VJblJlY3QoSW1hZ2UqLCBjb25zdCBJbnRS
ZWN0JiwgSW1hZ2U6OkNvbXBvc2l0ZU9wZXJhdG9yID0gSW1hZ2U6OkNvbXBvc2l0ZVNvdXJjZU92
ZXIpOwogCi0gICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgaW50IHgsIGludCB5LCAKKyAg
ICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYsIAogICAgICAgICAg
ICAgaW50IHN4ID0gMCwgaW50IHN5ID0gMCwgaW50IHN3ID0gLTEsIGludCBzaCA9IC0xLAogICAg
ICAgICAgICAgSW1hZ2U6OkNvbXBvc2l0ZU9wZXJhdG9yID0gSW1hZ2U6OkNvbXBvc2l0ZVNvdXJj
ZU92ZXIsIAogICAgICAgICAgICAgdm9pZCogbmF0aXZlRGF0YSA9IDApOwotICAgICAgICB2b2lk
IGRyYXdJbWFnZShJbWFnZSosIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAorICAgICAgICB2
b2lkIGRyYXdJbWFnZShJbWFnZSosIGNvbnN0IEludFJlY3QmLAogICAgICAgICAgICAgaW50IHN4
ID0gMCwgaW50IHN5ID0gMCwgaW50IHN3ID0gLTEsIGludCBzaCA9IC0xLAogICAgICAgICAgICAg
SW1hZ2U6OkNvbXBvc2l0ZU9wZXJhdG9yID0gSW1hZ2U6OkNvbXBvc2l0ZVNvdXJjZU92ZXIsIAog
ICAgICAgICAgICAgdm9pZCogbmF0aXZlRGF0YSA9IDApOwotICAgICAgICB2b2lkIGRyYXdGbG9h
dEltYWdlKEltYWdlKiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdywgZmxvYXQgaCwKKyAgICAg
ICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBjb25zdCBGbG9hdFJlY3QmLAogICAgICAgICAgICAg
ZmxvYXQgc3ggPSAwLCBmbG9hdCBzeSA9IDAsIGZsb2F0IHN3ID0gLTEsIGZsb2F0IHNoID0gLTEs
CiAgICAgICAgICAgICBJbWFnZTo6Q29tcG9zaXRlT3BlcmF0b3IgPSBJbWFnZTo6Q29tcG9zaXRl
U291cmNlT3ZlciwgCiAgICAgICAgICAgICB2b2lkKiBuYXRpdmVEYXRhID0gMCk7Ci0gICAgICAg
IHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCBzeCA9
IDAsIGludCBzeSA9IDAsIHZvaWQqIG5hdGl2ZURhdGEgPSAwKTsKLSAgICAgICAgdm9pZCBkcmF3
U2NhbGVkQW5kVGlsZWRJbWFnZShJbWFnZSosIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQs
IGludCwgaW50LCAKKyAgICAgICAgdm9pZCBkcmF3VGlsZWRJbWFnZShJbWFnZSosIGNvbnN0IElu
dFJlY3QmIGRlc3QsIGludCBzeCA9IDAsIGludCBzeSA9IDAsIHZvaWQqIG5hdGl2ZURhdGEgPSAw
KTsKKyAgICAgICAgdm9pZCBkcmF3U2NhbGVkQW5kVGlsZWRJbWFnZShJbWFnZSosIGNvbnN0IElu
dFJlY3QmLCBpbnQsIGludCwgaW50LCBpbnQsIAogICAgICAgICAgICAgSW1hZ2U6OlRpbGVSdWxl
IGhSdWxlID0gSW1hZ2U6OlN0cmV0Y2hUaWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUgPSBJbWFn
ZTo6U3RyZXRjaFRpbGUsCiAgICAgICAgICAgICB2b2lkKiBuYXRpdmVEYXRhID0gMCk7CiAKQEAg
LTEzNiwxMyArMTM2LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgaW50IG1pc3Nw
ZWxsaW5nTGluZVRoaWNrbmVzcygpIGNvbnN0OwogCiAgICAgICAgIENvbG9yIHNlbGVjdGVkVGV4
dEJhY2tncm91bmRDb2xvcigpIGNvbnN0OwotICAgICAgICB2b2lkIHNldFVzZXNJbmFjdGl2ZVRl
eHRCYWNrZ3JvdW5kQ29sb3IoYm9vbCB1KSB7IG1fdXNlc0luYWN0aXZlVGV4dEJhY2tncm91bmRD
b2xvciA9IHU7IH0KKyAgICAgICAgdm9pZCBzZXRVc2VzSW5hY3RpdmVUZXh0QmFja2dyb3VuZENv
bG9yKGJvb2wpOworICAgICAgICBib29sIHVzZXNJbmFjdGl2ZVRleHRCYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIGJvb2wgcGFpbnRpbmdEaXNhYmxlZCgpIGNvbnN0
OwogICAgICAgICB2b2lkIHNldFBhaW50aW5nRGlzYWJsZWQoYm9vbCk7CiAgICAgICAgIAotICAg
ICAgICBib29sIHVwZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gbV91cGRhdGlu
Z0NvbnRyb2xUaW50czsgfQotICAgICAgICB2b2lkIHNldFVwZGF0aW5nQ29udHJvbFRpbnRzKGJv
b2wgYikgeyBzZXRQYWludGluZ0Rpc2FibGVkKGIpOyBtX3VwZGF0aW5nQ29udHJvbFRpbnRzID0g
YjsgfQorICAgICAgICBib29sIHVwZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3Q7CisgICAgICAg
IHZvaWQgc2V0VXBkYXRpbmdDb250cm9sVGludHMoYm9vbCk7CiAKICAgICAgICAgdm9pZCBiZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwogICAgICAgICB2b2lkIGVuZFRyYW5z
cGFyZW5jeUxheWVyKCk7CkBAIC0xNzQsMTkgKzE3NSwyNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHN0YXRpYyBLUmVuZGVyaW5nRGV2aWNlKiByZW5kZXJpbmdEZXZpY2UoKTsKICNl
bmRpZgogCi0gICAgICAgIGJvb2wgcHJpbnRpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzRm9yUHJp
bnRpbmc7IH0KKyAgICAgICAgYm9vbCBwcmludGluZygpIGNvbnN0OwogCiBwcml2YXRlOgogICAg
ICAgICB2b2lkIHNldENvbG9yRnJvbUJydXNoKCk7CiAgICAgICAgIHZvaWQgc2V0Q29sb3JGcm9t
UGVuKCk7Ci0KLSAgICAgICAgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogbV9kYXRhOwotICAgICAg
ICBWZWN0b3I8SW50UmVjdD4gbV9mb2N1c1JpbmdSZWN0czsKLSAgICAgICAgaW50IG1fZm9jdXNS
aW5nV2lkdGg7Ci0gICAgICAgIGludCBtX2ZvY3VzUmluZ09mZnNldDsKLSAgICAgICAgYm9vbCBt
X2lzRm9yUHJpbnRpbmc7Ci0gICAgICAgIGJvb2wgbV91c2VzSW5hY3RpdmVUZXh0QmFja2dyb3Vu
ZENvbG9yOwotICAgICAgICBib29sIG1fdXBkYXRpbmdDb250cm9sVGludHM7CisgICAgICAgIAor
ICAgICAgICB2b2lkIHNhdmVQbGF0Zm9ybVN0YXRlKCk7CisgICAgICAgIHZvaWQgcmVzdG9yZVBs
YXRmb3JtU3RhdGUoKTsKKyAgICAgICAgCisgICAgICAgIGludCBmb2N1c1JpbmdXaWR0aCgpIGNv
bnN0OworICAgICAgICBpbnQgZm9jdXNSaW5nT2Zmc2V0KCkgY29uc3Q7CisgICAgICAgIGNvbnN0
IFZlY3RvcjxJbnRSZWN0PiYgZm9jdXNSaW5nUmVjdHMoKSBjb25zdDsKKyAgICAgICAgCisgICAg
ICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBjcmVhdGVHcmFwaGljc0NvbnRleHRQ
cml2YXRlKCk7CisgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2
YXRlKEdyYXBoaWNzQ29udGV4dFByaXZhdGUqKTsKKyAgICAgICAgCisgICAgICAgIEdyYXBoaWNz
Q29udGV4dFByaXZhdGUqIG1fY29tbW9uOworICAgICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUqIG1fZGF0YTsKICAgICB9OwogCiB9CkluZGV4OiBwbGF0Zm9ybS9tYWMvR3JhcGhp
Y3NDb250ZXh0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL21hYy9HcmFwaGljc0NvbnRl
eHRNYWMubW0JKHJldmlzaW9uIDEzMzkzKQorKysgcGxhdGZvcm0vbWFjL0dyYXBoaWNzQ29udGV4
dE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDgsMjAgKzQ4LDExIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIC8vIGNhbGxzIGluIHRoaXMgZmlsZSBhcmUgYWxsIGV4Y2VwdGlvbi1zYWZlLCBzbyB3
ZSBkb24ndCBibG9jawogLy8gZXhjZXB0aW9ucyBmb3IgdGhvc2UuCiAKLXN0cnVjdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSB7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSA6IHBhaW50aW5nRGlz
YWJsZWQoZmFsc2UpIHsgfQotICAgIEZvbnQgZm9udDsKLSAgICBQZW4gcGVuOwotICAgIEJydXNo
IGJydXNoOwotICAgIGJvb2wgcGFpbnRpbmdEaXNhYmxlZDsKLX07Ci0KLXN0cnVjdCBHcmFwaGlj
c0NvbnRleHRQcml2YXRlIHsKLSAgICBHcmFwaGljc0NvbnRleHRQcml2YXRlKCk7Ci0gICAgfkdy
YXBoaWNzQ29udGV4dFByaXZhdGUoKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIHN0YXRl
OyAgICAKLSAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0U3RhdGU+IHN0YWNrOworc3RydWN0IEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSB7CisgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKCk7CisgICAgfkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpOworICAg
IAogICAgIGlkIDxXZWJDb3JlVGV4dFJlbmRlcmVyPiB0ZXh0UmVuZGVyZXI7CiAgICAgRm9udCB0
ZXh0UmVuZGVyZXJGb250OwogI2lmIFNWR19TVVBQT1JUCkBAIC03MCwxOTIgKzYxLDExMiBAQCBz
dHJ1Y3QgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSB7CiB9OwogCiAvLyBBIGZpbGxSZWN0IGhlbHBl
ciB0byB3b3JrIGFyb3VuZCB0aGUgZmFjdCB0aGF0IE5TUmVjdEZpbGwgdXNlcyBjb3B5IG1vZGUs
IG5vdCBzb3VyY2Ugb3Zlci4KLXN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUmVjdFNvdXJjZU92ZXIo
ZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdywgZmxvYXQgaCwgY29uc3QgQ29sb3ImIGNvbCkKK3N0
YXRpYyBpbmxpbmUgdm9pZCBmaWxsUmVjdFNvdXJjZU92ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sKQogewogICAgIFtuc0NvbG9yKGNvbCkgc2V0XTsKLSAgICBOU1Jl
Y3RGaWxsVXNpbmdPcGVyYXRpb24oTlNNYWtlUmVjdCh4LCB5LCB3LCBoKSwgTlNDb21wb3NpdGVT
b3VyY2VPdmVyKTsKKyAgICBOU1JlY3RGaWxsVXNpbmdPcGVyYXRpb24ocmVjdCwgTlNDb21wb3Np
dGVTb3VyY2VPdmVyKTsKIH0KIAotCi1HcmFwaGljc0NvbnRleHRQcml2YXRlOjpHcmFwaGljc0Nv
bnRleHRQcml2YXRlKCkKK0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKCkKICAgICA6IHRleHRSZW5kZXJlcigwKSAKIHsKIH0KIAot
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFByaXZhdGUoKQorR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KCkKIHsKICAgICBLV1FSZWxlYXNlKHRleHRSZW5kZXJlcik7CiB9CiAKIEdyYXBoaWNzQ29udGV4
dDo6R3JhcGhpY3NDb250ZXh0KCkKLSAgICA6IG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UHJp
dmF0ZSkKLSAgICAsIG1fZm9jdXNSaW5nV2lkdGgoMCkKLSAgICAsIG1fZm9jdXNSaW5nT2Zmc2V0
KDApCi0gICAgLCBtX2lzRm9yUHJpbnRpbmcoZmFsc2UpCi0gICAgLCBtX3VzZXNJbmFjdGl2ZVRl
eHRCYWNrZ3JvdW5kQ29sb3IoZmFsc2UpCi0gICAgLCBtX3VwZGF0aW5nQ29udHJvbFRpbnRzKGZh
bHNlKQorICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQorICAg
ICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCiB7CiB9CiAKIEdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KGJvb2wgZm9yUHJpbnRpbmcpCi0gICAgOiBt
X2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFByaXZhdGUpCi0gICAgLCBtX2ZvY3VzUmluZ1dpZHRo
KDApCi0gICAgLCBtX2ZvY3VzUmluZ09mZnNldCgwKQotICAgICwgbV9pc0ZvclByaW50aW5nKGZv
clByaW50aW5nKQotICAgICwgbV91c2VzSW5hY3RpdmVUZXh0QmFja2dyb3VuZENvbG9yKGZhbHNl
KQotICAgICwgbV91cGRhdGluZ0NvbnRyb2xUaW50cyhmYWxzZSkKKyAgICA6IG1fY29tbW9uKGNy
ZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKKyAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKQogewogfQogCiBHcmFwaGljc0NvbnRleHQ6On5HcmFwaGlj
c0NvbnRleHQoKQogeworICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9u
KTsKICAgICBkZWxldGUgbV9kYXRhOwogfQogCi1jb25zdCBGb250JiBHcmFwaGljc0NvbnRleHQ6
OmZvbnQoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEtPnN0YXRlLmZvbnQ7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGb250KGNvbnN0IEZvbnQmIGFGb250KQotewotICAgIG1f
ZGF0YS0+c3RhdGUuZm9udCA9IGFGb250OwotfQotCi1jb25zdCBQZW4mIEdyYXBoaWNzQ29udGV4
dDo6cGVuKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5zdGF0ZS5wZW47Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQZW4oY29uc3QgUGVuJiBwZW4pCi17Ci0gICAgbV9kYXRh
LT5zdGF0ZS5wZW4gPSBwZW47Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQZW4oUGVu
OjpQZW5TdHlsZSBzdHlsZSkKLXsKLSAgICBtX2RhdGEtPnN0YXRlLnBlbi5zZXRTdHlsZShzdHls
ZSk7Ci0gICAgbV9kYXRhLT5zdGF0ZS5wZW4uc2V0Q29sb3IoQ29sb3I6OmJsYWNrKTsKLSAgICBt
X2RhdGEtPnN0YXRlLnBlbi5zZXRXaWR0aCgwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBlbihSR0JBMzIgcmdiKQotewotICAgIG1fZGF0YS0+c3RhdGUucGVuLnNldFN0eWxlKFBl
bjo6U29saWRMaW5lKTsKLSAgICBtX2RhdGEtPnN0YXRlLnBlbi5zZXRDb2xvcihyZ2IpOwotICAg
IG1fZGF0YS0+c3RhdGUucGVuLnNldFdpZHRoKDApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0QnJ1c2goY29uc3QgQnJ1c2gmIGJydXNoKQotewotICAgIG1fZGF0YS0+c3RhdGUuYnJ1
c2ggPSBicnVzaDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEJydXNoKEJydXNoOjpC
cnVzaFN0eWxlIHN0eWxlKQotewotICAgIG1fZGF0YS0+c3RhdGUuYnJ1c2guc2V0U3R5bGUoc3R5
bGUpOwotICAgIG1fZGF0YS0+c3RhdGUuYnJ1c2guc2V0Q29sb3IoQ29sb3I6OmJsYWNrKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEJydXNoKFJHQkEzMiByZ2IpCi17Ci0gICAgbV9k
YXRhLT5zdGF0ZS5icnVzaC5zZXRTdHlsZShCcnVzaDo6U29saWRQYXR0ZXJuKTsKLSAgICBtX2Rh
dGEtPnN0YXRlLmJydXNoLnNldENvbG9yKHJnYik7Ci19Ci0KLWNvbnN0IEJydXNoJiBHcmFwaGlj
c0NvbnRleHQ6OmJydXNoKCkgY29uc3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZv
cm1TdGF0ZSgpCiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+c3RhdGUuYnJ1c2g7CisgICAgW05TR3Jh
cGhpY3NDb250ZXh0IHNhdmVHcmFwaGljc1N0YXRlXTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNhdmUoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkK
IHsKLSAgICBpZiAobV9kYXRhLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2RhdGEtPnN0YWNrLmFwcGVuZChtX2RhdGEtPnN0YXRlKTsKLQotICAgIFtO
U0dyYXBoaWNzQ29udGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07IAotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6cmVzdG9yZSgpCi17Ci0gICAgaWYgKG1fZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNh
YmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZGF0YS0+c3RhY2suaXNFbXB0eSgp
KSB7Ci0gICAgICAgIExPR19FUlJPUigiRVJST1Igdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmUoKSBzdGFjayBpcyBlbXB0eSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fZGF0
YS0+c3RhdGUgPSBtX2RhdGEtPnN0YWNrLmxhc3QoKTsKLSAgICBtX2RhdGEtPnN0YWNrLnJlbW92
ZUxhc3QoKTsKLSAgICAgCiAgICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVHcmFwaGljc1N0
YXRlXTsKIH0KIAogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJv
cmRlci4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChpbnQgeCwgaW50IHksIGludCB3
LCBpbnQgaCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewotICAgIGlmIChtX2RhdGEtPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQpCisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAgCi0gICAgaWYg
KG1fZGF0YS0+c3RhdGUuYnJ1c2guc3R5bGUoKSAhPSBCcnVzaDo6Tm9CcnVzaCkKLSAgICAgICAg
ZmlsbFJlY3RTb3VyY2VPdmVyKHgsIHksIHcsIGgsIG1fZGF0YS0+c3RhdGUuYnJ1c2guY29sb3Io
KSk7CisgICAgaWYgKGJydXNoKCkuc3R5bGUoKSAhPSBCcnVzaDo6Tm9CcnVzaCkKKyAgICAgICAg
ZmlsbFJlY3RTb3VyY2VPdmVyKHJlY3QsIGJydXNoKCkuY29sb3IoKSk7CiAKLSAgICBpZiAobV9k
YXRhLT5zdGF0ZS5wZW4uc3R5bGUoKSAhPSBQZW46OlBlbjo6Tm9QZW4pIHsKKyAgICBpZiAocGVu
KCkuc3R5bGUoKSAhPSBQZW46OlBlbjo6Tm9QZW4pIHsKICAgICAgICAgc2V0Q29sb3JGcm9tUGVu
KCk7Ci0gICAgICAgIE5TRnJhbWVSZWN0KE5TTWFrZVJlY3QoeCwgeSwgdywgaCkpOworICAgICAg
ICBOU0ZyYW1lUmVjdChyZWN0KTsKICAgICB9CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRDb2xvckZyb21CcnVzaCgpCiB7Ci0gICAgW25zQ29sb3IobV9kYXRhLT5zdGF0ZS5icnVzaC5j
b2xvcigpKSBzZXRdOworICAgIFtuc0NvbG9yKGJydXNoKCkuY29sb3IoKSkgc2V0XTsKIH0KICAg
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q29sb3JGcm9tUGVuKCkKIHsKLSAgICBbbnNDb2xv
cihtX2RhdGEtPnN0YXRlLnBlbi5jb2xvcigpKSBzZXRdOworICAgIFtuc0NvbG9yKHBlbigpLmNv
bG9yKCkpIHNldF07CiB9CiAgIAogICAvLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRl
cnMuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoaW50IHgxLCBpbnQgeTEsIGludCB4
MiwgaW50IHkyKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludFBvaW50
JiBwb2ludDEsIGNvbnN0IEludFBvaW50JiBwb2ludDIpCiB7Ci0gICAgaWYgKG1fZGF0YS0+c3Rh
dGUucGFpbnRpbmdEaXNhYmxlZCkKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBQZW46OlBlblN0eWxlIHBlblN0eWxlID0gbV9kYXRhLT5zdGF0ZS5w
ZW4uc3R5bGUoKTsKKyAgICBQZW46OlBlblN0eWxlIHBlblN0eWxlID0gcGVuKCkuc3R5bGUoKTsK
ICAgICBpZiAocGVuU3R5bGUgPT0gUGVuOjpQZW46Ok5vUGVuKQogICAgICAgICByZXR1cm47Ci0g
ICAgZmxvYXQgd2lkdGggPSBtX2RhdGEtPnN0YXRlLnBlbi53aWR0aCgpOworICAgIGZsb2F0IHdp
ZHRoID0gcGVuKCkud2lkdGgoKTsKICAgICBpZiAod2lkdGggPCAxKQogICAgICAgICB3aWR0aCA9
IDE7CiAKLSAgICBOU1BvaW50IHAxID0gTlNNYWtlUG9pbnQoeDEsIHkxKTsKLSAgICBOU1BvaW50
IHAyID0gTlNNYWtlUG9pbnQoeDIsIHkyKTsKKyAgICBOU1BvaW50IHAxID0gcG9pbnQxOworICAg
IE5TUG9pbnQgcDIgPSBwb2ludDI7CisgICAgYm9vbCBpc1ZlcnRpY2FsTGluZSA9IChwMS54ID09
IHAyLngpOwogICAgIAogICAgIC8vIEZvciBvZGQgd2lkdGhzLCB3ZSBhZGQgaW4gMC41IHRvIHRo
ZSBhcHByb3ByaWF0ZSB4L3kgc28gdGhhdCB0aGUgZmxvYXQgYXJpdGhtZXRpYwogICAgIC8vIHdv
cmtzIG91dC4gIEZvciBleGFtcGxlLCB3aXRoIGEgYm9yZGVyIHdpZHRoIG9mIDMsIEtIVE1MIHdp
bGwgcGFzcyB1cyAoeTEreTIpLzIsIGUuZy4sCiAgICAgLy8gKDUwKzUzKS8yID0gMTAzLzIgPSA1
MSB3aGVuIHdlIHdhbnQgNTEuNS4gIEl0IGlzIGFsd2F5cyB0cnVlIHRoYXQgYW4gZXZlbiB3aWR0
aCBnYXZlCiAgICAgLy8gdXMgYSBwZXJmZWN0IHBvc2l0aW9uLCBidXQgYW4gb2RkIHdpZHRoIGdh
dmUgdXMgYSBwb3NpdGlvbiB0aGF0IGlzIG9mZiBieSBleGFjdGx5IDAuNS4KICAgICBpZiAocGVu
U3R5bGUgPT0gUGVuOjpEb3RMaW5lIHx8IHBlblN0eWxlID09IFBlbjo6RGFzaExpbmUpIHsKLSAg
ICAgICAgaWYgKHgxID09IHgyKSB7CisgICAgICAgIGlmIChpc1ZlcnRpY2FsTGluZSkgewogICAg
ICAgICAgICAgcDEueSArPSB3aWR0aDsKICAgICAgICAgICAgIHAyLnkgLT0gd2lkdGg7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSB7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwMS54
ICs9IHdpZHRoOwogICAgICAgICAgICAgcDIueCAtPSB3aWR0aDsKICAgICAgICAgfQogICAgIH0K
ICAgICAKICAgICBpZiAoKChpbnQpd2lkdGgpJTIpIHsKLSAgICAgICAgaWYgKHgxID09IHgyKSB7
CisgICAgICAgIGlmIChpc1ZlcnRpY2FsTGluZSkgewogICAgICAgICAgICAgLy8gV2UncmUgYSB2
ZXJ0aWNhbCBsaW5lLiAgQWRqdXN0IG91ciB4LgogICAgICAgICAgICAgcDEueCArPSAwLjU7CiAg
ICAgICAgICAgICBwMi54ICs9IDAuNTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlJ3JlIGEgaG9yaXpvbnRhbCBsaW5lLiBBZGp1
c3Qgb3VyIHkuCiAgICAgICAgICAgICBwMS55ICs9IDAuNTsKICAgICAgICAgICAgIHAyLnkgKz0g
MC41OwpAQCAtMjg3LDE4ICsxOTgsMTkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
KGludCB4MSwgaQogICAgIGlmIChwYXRXaWR0aCkgewogICAgICAgICAvLyBEbyBhIHJlY3QgZmls
bCBvZiBvdXIgZW5kcG9pbnRzLiAgVGhpcyBlbnN1cmVzIHdlIGFsd2F5cyBoYXZlIHRoZQogICAg
ICAgICAvLyBhcHBlYXJhbmNlIG9mIGJlaW5nIGEgYm9yZGVyLiAgV2UgdGhlbiBkcmF3IHRoZSBh
Y3R1YWwgZG90dGVkL2Rhc2hlZCBsaW5lLgotICAgICAgICBpZiAoeDEgPT0geDIpIHsKLSAgICAg
ICAgICAgIGZpbGxSZWN0U291cmNlT3ZlcihwMS54LXdpZHRoLzIsIHAxLnktd2lkdGgsIHdpZHRo
LCB3aWR0aCwgbV9kYXRhLT5zdGF0ZS5wZW4uY29sb3IoKSk7Ci0gICAgICAgICAgICBmaWxsUmVj
dFNvdXJjZU92ZXIocDIueC13aWR0aC8yLCBwMi55LCB3aWR0aCwgd2lkdGgsIG1fZGF0YS0+c3Rh
dGUucGVuLmNvbG9yKCkpOworICAgICAgICBjb25zdCBDb2xvciYgcGVuQ29sb3IgPSBwZW4oKS5j
b2xvcigpOworICAgICAgICBpZiAoaXNWZXJ0aWNhbExpbmUpIHsKKyAgICAgICAgICAgIGZpbGxS
ZWN0U291cmNlT3ZlcihGbG9hdFJlY3QocDEueC13aWR0aC8yLCBwMS55LXdpZHRoLCB3aWR0aCwg
d2lkdGgpLCBwZW5Db2xvcik7CisgICAgICAgICAgICBmaWxsUmVjdFNvdXJjZU92ZXIoRmxvYXRS
ZWN0KHAyLngtd2lkdGgvMiwgcDIueSwgd2lkdGgsIHdpZHRoKSwgcGVuQ29sb3IpOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKHAxLngtd2lkdGgsIHAx
Lnktd2lkdGgvMiwgd2lkdGgsIHdpZHRoLCBtX2RhdGEtPnN0YXRlLnBlbi5jb2xvcigpKTsKLSAg
ICAgICAgICAgIGZpbGxSZWN0U291cmNlT3ZlcihwMi54LCBwMi55LXdpZHRoLzIsIHdpZHRoLCB3
aWR0aCwgbV9kYXRhLT5zdGF0ZS5wZW4uY29sb3IoKSk7CisgICAgICAgICAgICBmaWxsUmVjdFNv
dXJjZU92ZXIoRmxvYXRSZWN0KHAxLngtd2lkdGgsIHAxLnktd2lkdGgvMiwgd2lkdGgsIHdpZHRo
KSwgcGVuQ29sb3IpOworICAgICAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKEZsb2F0UmVjdChw
Mi54LCBwMi55LXdpZHRoLzIsIHdpZHRoLCB3aWR0aCksIHBlbkNvbG9yKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgLy8gRXhhbXBsZTogODAgcGl4ZWxzIHdpdGggYSB3aWR0aCBvZiAz
MCBwaXhlbHMuCiAgICAgICAgIC8vIFJlbWFpbmRlciBpcyAyMC4gIFRoZSBtYXhpbXVtIHBpeGVs
cyBvZiBsaW5lIHdlIGNvdWxkIHBhaW50CiAgICAgICAgIC8vIHdpbGwgYmUgNTAgcGl4ZWxzLgot
ICAgICAgICBpbnQgZGlzdGFuY2UgPSAoKHgxID09IHgyKSA/ICh5MiAtIHkxKSA6ICh4MiAtIHgx
KSkgLSAyKihpbnQpd2lkdGg7CisgICAgICAgIGludCBkaXN0YW5jZSA9IChpc1ZlcnRpY2FsTGlu
ZSA/IChpbnQpKHAyLnkgLSBwMS55KSA6IChpbnQpKHAyLnggLSBwMS54KSkgLSAyKihpbnQpd2lk
dGg7CiAgICAgICAgIGludCByZW1haW5kZXIgPSBkaXN0YW5jZSVwYXRXaWR0aDsKICAgICAgICAg
aW50IGNvdmVyYWdlID0gZGlzdGFuY2UtcmVtYWluZGVyOwogICAgICAgICBpbnQgbnVtU2VnbWVu
dHMgPSBjb3ZlcmFnZS9wYXRXaWR0aDsKQEAgLTM0MSwzOSArMjUzLDM4IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZShpbnQgeDEsIGkKIAogCiAvLyBUaGlzIG1ldGhvZCBpcyBvbmx5
IHVzZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBJbnRSZWN0JiByZWN0KQogewog
ICAgIC8vIEZJWE1FOiBDRyBhZGRlZCBDR0NvbnRleHRBZGRFbGxpcHNlaW5SZWN0IGluIFRpZ2Vy
LCBzbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBxdWl0ZSBlYXNpbHkgZHJhdyBhbiBlbGxpcHNlLgog
ICAgIC8vIFRoaXMgY29kZSBjYW4gb25seSBoYW5kbGUgY2lyY2xlcywgbm90IGVsbGlwc2VzLiBC
dXQga2h0bWwgb25seQogICAgIC8vIHVzZXMgaXQgZm9yIGNpcmNsZXMuCi0gICAgQVNTRVJUKHcg
PT0gaCk7CisgICAgQVNTRVJUKHJlY3Qud2lkdGgoKSA9PSByZWN0LmhlaWdodCgpKTsKIAotICAg
IGlmIChtX2RhdGEtPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQpCisgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IChDR0NvbnRleHRSZWYpW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0g
Z3JhcGhpY3NQb3J0XTsKICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7Ci0gICAgZmxv
YXQgciA9IChmbG9hdCl3IC8gMjsKLSAgICBDR0NvbnRleHRBZGRBcmMoY29udGV4dCwgeCArIHIs
IHkgKyByLCByLCAwLCAyKk1fUEksIHRydWUpOworICAgIGZsb2F0IHIgPSAoZmxvYXQpcmVjdC53
aWR0aCgpIC8gMjsKKyAgICBDR0NvbnRleHRBZGRBcmMoY29udGV4dCwgcmVjdC54KCkgKyByLCBy
ZWN0LnkoKSArIHIsIHIsIDAsIDIqTV9QSSwgdHJ1ZSk7CiAgICAgQ0dDb250ZXh0Q2xvc2VQYXRo
KGNvbnRleHQpOwogCi0gICAgaWYgKG1fZGF0YS0+c3RhdGUuYnJ1c2guc3R5bGUoKSAhPSBCcnVz
aDo6Tm9CcnVzaCkgeworICAgIGlmIChicnVzaCgpLnN0eWxlKCkgIT0gQnJ1c2g6Ok5vQnJ1c2gp
IHsKICAgICAgICAgc2V0Q29sb3JGcm9tQnJ1c2goKTsKLSAgICAgICAgaWYgKG1fZGF0YS0+c3Rh
dGUucGVuLnN0eWxlKCkgIT0gUGVuOjpOb1BlbikgeworICAgICAgICBpZiAocGVuKCkuc3R5bGUo
KSAhPSBQZW46Ok5vUGVuKSB7CiAgICAgICAgICAgICAvLyBzdHJva2UgYW5kIGZpbGwKICAgICAg
ICAgICAgIHNldENvbG9yRnJvbVBlbigpOwotICAgICAgICAgICAgdW5zaWduZWQgcGVuV2lkdGgg
PSBtX2RhdGEtPnN0YXRlLnBlbi53aWR0aCgpOworICAgICAgICAgICAgdW5zaWduZWQgcGVuV2lk
dGggPSBwZW4oKS53aWR0aCgpOwogICAgICAgICAgICAgaWYgKHBlbldpZHRoID09IDApIAogICAg
ICAgICAgICAgICAgIHBlbldpZHRoKys7CiAgICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lk
dGgoY29udGV4dCwgcGVuV2lkdGgpOwogICAgICAgICAgICAgQ0dDb250ZXh0RHJhd1BhdGgoY29u
dGV4dCwga0NHUGF0aEZpbGxTdHJva2UpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIENHQ29udGV4dEZpbGxQYXRoKGNvbnRleHQpOwotICAgICAgICB9CiAg
ICAgfQotICAgIGlmIChtX2RhdGEtPnN0YXRlLnBlbi5zdHlsZSgpICE9IFBlbjo6Tm9QZW4pIHsK
KyAgICBpZiAocGVuKCkuc3R5bGUoKSAhPSBQZW46Ok5vUGVuKSB7CiAgICAgICAgIHNldENvbG9y
RnJvbVBlbigpOwotICAgICAgICB1bnNpZ25lZCBwZW5XaWR0aCA9IG1fZGF0YS0+c3RhdGUucGVu
LndpZHRoKCk7CisgICAgICAgIHVuc2lnbmVkIHBlbldpZHRoID0gcGVuKCkud2lkdGgoKTsKICAg
ICAgICAgaWYgKHBlbldpZHRoID09IDApIAogICAgICAgICAgICAgcGVuV2lkdGgrKzsKICAgICAg
ICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQsIHBlbldpZHRoKTsKQEAgLTM4MiwxNSAr
MjkzLDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShpbnQgeCwKIH0KIAog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0FyYyAoaW50IHgsIGludCB5LCBpbnQgdywgaW50
IGgsIGludCBhLCBpbnQgYWxlbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QXJjKGludCB4
LCBpbnQgeSwgaW50IHcsIGludCBoLCBpbnQgYSwgaW50IGFsZW4pCiB7IAogICAgIC8vIE9ubHkg
c3VwcG9ydHMgYXJjIG9uIGNpcmNsZXMuICBUaGF0J3MgYWxsIGtodG1sIG5lZWRzLgogICAgIEFT
U0VSVCh3ID09IGgpOwogCi0gICAgaWYgKG1fZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZCkK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
aWYgKG1fZGF0YS0+c3RhdGUucGVuLnN0eWxlKCkgIT0gUGVuOjpOb1BlbikgeworICAgIGlmIChw
ZW4oKS5zdHlsZSgpICE9IFBlbjo6Tm9QZW4pIHsKICAgICAgICAgQ0dDb250ZXh0UmVmIGNvbnRl
eHQgPSAoQ0dDb250ZXh0UmVmKVtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGdy
YXBoaWNzUG9ydF07CiAgICAgICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKICAgICAg
ICAgCkBAIC00MDAsMTQgKzMxMSwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0FyYyAo
aW50IHgsIGluCiAgICAgICAgIENHQ29udGV4dEFkZEFyYyhjb250ZXh0LCB4ICsgciwgeSArIHIs
IHIsIC1mYSAqIE1fUEkvMTgwLCAtZmFsZW4gKiBNX1BJLzE4MCwgdHJ1ZSk7CiAgICAgICAgIAog
ICAgICAgICBzZXRDb2xvckZyb21QZW4oKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRo
KGNvbnRleHQsIG1fZGF0YS0+c3RhdGUucGVuLndpZHRoKCkpOworICAgICAgICBDR0NvbnRleHRT
ZXRMaW5lV2lkdGgoY29udGV4dCwgcGVuKCkud2lkdGgoKSk7CiAgICAgICAgIENHQ29udGV4dFN0
cm9rZVBhdGgoY29udGV4dCk7CiAgICAgfQogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnZleFBvbHlnb24oY29uc3QgSW50UG9pbnRBcnJheSYgcG9pbnRzKQogewotICAgIGlmICht
X2RhdGEtPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQpCisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW50IG5wb2ludHMgPSBwb2ludHMuc2l6ZSgpOwpA
QCAtNDI2LDE0ICszMzcsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5
Z29uKAogICAgICAgICBDR0NvbnRleHRBZGRMaW5lVG9Qb2ludChjb250ZXh0LCBwb2ludHNbaV0u
eCgpLCBwb2ludHNbaV0ueSgpKTsKICAgICBDR0NvbnRleHRDbG9zZVBhdGgoY29udGV4dCk7CiAK
LSAgICBpZiAobV9kYXRhLT5zdGF0ZS5icnVzaC5zdHlsZSgpICE9IEJydXNoOjpOb0JydXNoKSB7
CisgICAgaWYgKGJydXNoKCkuc3R5bGUoKSAhPSBCcnVzaDo6Tm9CcnVzaCkgewogICAgICAgICBz
ZXRDb2xvckZyb21CcnVzaCgpOwogICAgICAgICBDR0NvbnRleHRFT0ZpbGxQYXRoKGNvbnRleHQp
OwogICAgIH0KIAotICAgIGlmIChtX2RhdGEtPnN0YXRlLnBlbi5zdHlsZSgpICE9IFBlbjo6Tm9Q
ZW4pIHsKKyAgICBpZiAocGVuKCkuc3R5bGUoKSAhPSBQZW46Ok5vUGVuKSB7CiAgICAgICAgIHNl
dENvbG9yRnJvbVBlbigpOwotICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwg
bV9kYXRhLT5zdGF0ZS5wZW4ud2lkdGgoKSk7CisgICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0
aChjb250ZXh0LCBwZW4oKS53aWR0aCgpKTsKICAgICAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChj
b250ZXh0KTsKICAgICB9CiAKQEAgLTQ1NSwxNiArMzY2LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXQKICAgICBbW1dlYkNvcmVJbWFnZVJlbmRlcmVyRmFjdG9y
eSBzaGFyZWRGYWN0b3J5XSBzZXRDR0NvbXBvc2l0ZU9wZXJhdGlvbjpvcCBpbkNvbnRleHQ6Y29u
dGV4dF07CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmxvYXRJbWFnZShJbWFnZSog
aW1hZ2UsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHcsIGZsb2F0IGgsIAordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdCwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0
IHN3LCBmbG9hdCBzaCwgSW1hZ2U6OkNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
LCB2b2lkKiBjb250ZXh0KQogewotICAgIGlmIChtX2RhdGEtPnN0YXRlLnBhaW50aW5nRGlzYWJs
ZWQpCisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
ZmxvYXQgdHN3ID0gc3c7CiAgICAgZmxvYXQgdHNoID0gc2g7Ci0gICAgZmxvYXQgdHcgPSB3Owot
ICAgIGZsb2F0IHRoID0gaDsKKyAgICBmbG9hdCB0dyA9IGRlc3Qud2lkdGgoKTsKKyAgICBmbG9h
dCB0aCA9IGRlc3QuaGVpZ2h0KCk7CiAgICAgICAgIAogICAgIGlmICh0c3cgPT0gLTEpCiAgICAg
ICAgIHRzdyA9IGltYWdlLT53aWR0aCgpOwpAQCAtNDc2LDI4ICszODcsMjggQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdGbG9hdEltYWdlKEltYQogICAgIGlmICh0aCA9PSAtMSkKICAgICAg
ICAgdGggPSBpbWFnZS0+aGVpZ2h0KCk7CiAKLSAgICBpbWFnZS0+ZHJhd0luUmVjdChGbG9hdFJl
Y3QoeCwgeSwgdHcsIHRoKSwgRmxvYXRSZWN0KHN4LCBzeSwgdHN3LCB0c2gpLCBjb21wb3NpdGVP
cGVyYXRvciwgY29udGV4dCk7CisgICAgaW1hZ2UtPmRyYXdJblJlY3QoRmxvYXRSZWN0KGRlc3Qu
bG9jYXRpb24oKSwgRmxvYXRTaXplKHR3LCB0aCkpLCBGbG9hdFJlY3Qoc3gsIHN5LCB0c3csIHRz
aCksIGNvbXBvc2l0ZU9wZXJhdG9yLCBjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlKiBpbWFnZSwgaW50IHgsIGludCB5LCBpbnQgdywgaW50
IGgsIGludCBzeCwgaW50IHN5LCB2b2lkKiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdUaWxlZEltYWdlKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHN4
LCBpbnQgc3ksIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgaWYgKG1fZGF0YS0+c3RhdGUucGFpbnRp
bmdEaXNhYmxlZCkKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgaW1hZ2UtPnRpbGVJblJlY3QoRmxvYXRSZWN0KHgsIHksIHcsIGgpLCBGbG9h
dFBvaW50KHN4LCBzeSksIGNvbnRleHQpOworICAgIGltYWdlLT50aWxlSW5SZWN0KHJlY3QsIEZs
b2F0UG9pbnQoc3gsIHN5KSwgY29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3U2NhbGVkQW5kVGlsZWRJbWFnZShJbWFnZSogaW1hZ2UsIGludCB4LCBpbnQgeSwgaW50IHcs
IGludCBoLCBpbnQgc3gsIGludCBzeSwgaW50IHN3LCBpbnQgc2gsIAordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdTY2FsZWRBbmRUaWxlZEltYWdlKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVj
dCYgZGVzdCwgaW50IHN4LCBpbnQgc3ksIGludCBzdywgaW50IHNoLCAKICAgICBJbWFnZTo6VGls
ZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgdm9pZCogY29udGV4dCkKIHsKLSAg
ICBpZiAobV9kYXRhLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkKQorICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChoUnVsZSA9PSBJbWFnZTo6U3Ry
ZXRjaFRpbGUgJiYgdlJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlKQogICAgICAgICAvLyBKdXN0
IGRvIGEgc2NhbGUuCi0gICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIHgsIHksIHcsIGgs
IHN4LCBzeSwgc3csIHNoLCBJbWFnZTo6Q29tcG9zaXRlU291cmNlT3ZlciwgY29udGV4dCk7Cisg
ICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3QsIHN4LCBzeSwgc3csIHNoLCBJbWFn
ZTo6Q29tcG9zaXRlU291cmNlT3ZlciwgY29udGV4dCk7CiAKLSAgICBpbWFnZS0+c2NhbGVBbmRU
aWxlSW5SZWN0KEZsb2F0UmVjdCh4LCB5LCB3LCBoKSwgRmxvYXRSZWN0KHN4LCBzeSwgc3csIHNo
KSwgaFJ1bGUsIHZSdWxlLCBjb250ZXh0KTsKKyAgICBpbWFnZS0+c2NhbGVBbmRUaWxlSW5SZWN0
KGRlc3QsIEZsb2F0UmVjdChzeCwgc3ksIHN3LCBzaCksIGhSdWxlLCB2UnVsZSwgY29udGV4dCk7
CiB9CiAKIHN0YXRpYyBpbnQgZ2V0QmxlbmRlZENvbG9yQ29tcG9uZW50KGludCBjLCBpbnQgYSkK
QEAgLTUxMSw3ICs0MjIsNyBAQCBzdGF0aWMgaW50IGdldEJsZW5kZWRDb2xvckNvbXBvbmVudChp
bnQgCiAKIENvbG9yIEdyYXBoaWNzQ29udGV4dDo6c2VsZWN0ZWRUZXh0QmFja2dyb3VuZENvbG9y
KCkgY29uc3QKIHsKLSAgICBOU0NvbG9yICpjb2xvciA9IG1fdXNlc0luYWN0aXZlVGV4dEJhY2tn
cm91bmRDb2xvciA/IFtOU0NvbG9yIHNlY29uZGFyeVNlbGVjdGVkQ29udHJvbENvbG9yXSA6IFtO
U0NvbG9yIHNlbGVjdGVkVGV4dEJhY2tncm91bmRDb2xvcl07CisgICAgTlNDb2xvciAqY29sb3Ig
PSB1c2VzSW5hY3RpdmVUZXh0QmFja2dyb3VuZENvbG9yKCkgPyBbTlNDb2xvciBzZWNvbmRhcnlT
ZWxlY3RlZENvbnRyb2xDb2xvcl0gOiBbTlNDb2xvciBzZWxlY3RlZFRleHRCYWNrZ3JvdW5kQ29s
b3JdOwogICAgIC8vIHRoaXMgbmVlZHMgdG8gYWx3YXlzIHVzZSBkZXZpY2UgY29sb3JzcGFjZSBz
byBpdCBjYW4gZGUtY2FsaWJyYXRlIHRoZSBjb2xvciBmb3IKICAgICAvLyBDb2xvciB0byBwb3Nz
aWJseSByZWNhbGlicmF0ZSBpdAogICAgIGNvbG9yID0gW2NvbG9yIGNvbG9yVXNpbmdDb2xvclNw
YWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdOwpAQCAtNTI5LDIzICs0NDAsMTggQEAgQ29s
b3IgR3JhcGhpY3NDb250ZXh0OjpzZWxlY3RlZFRleHRCYWNrZwogICAgIHJldHVybiBjb2w7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChpbnQgeCwgaW50IHksIGludCB3LCBp
bnQgaCwgY29uc3QgQnJ1c2gmIGJydXNoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEJydXNoJiBicnVzaCkKIHsKLSAgICBpZiAobV9k
YXRhLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkKQorICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChicnVzaC5zdHlsZSgpID09IEJydXNoOjpTb2xp
ZFBhdHRlcm4pCi0gICAgICAgIGZpbGxSZWN0U291cmNlT3Zlcih4LCB5LCB3LCBoLCBicnVzaC5j
b2xvcigpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QsIGNvbnN0IEJydXNoJiBicnVzaCkKLXsKLSAgICBmaWxsUmVjdChyZWN0LngoKSwg
cmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgYnJ1c2gpOworICAgICAgICBm
aWxsUmVjdFNvdXJjZU92ZXIocmVjdCwgYnJ1c2guY29sb3IoKSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjphZGRDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKG1fZGF0
YS0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZCkKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBbTlNCZXppZXJQYXRoIGNsaXBSZWN0OnJlY3RdOwpAQCAt
NTU0LDcgKzQ2MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRDbGlwKGNvbnN0IEludFIK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYg
cmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVm
dCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQpCiB7Ci0gICAgaWYgKG1fZGF0YS0+c3RhdGUu
cGFpbnRpbmdEaXNhYmxlZCkKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBOZWVkIHN1ZmZpY2llbnQgd2lkdGggYW5kIGhlaWdodCB0byBjb250
YWluIHRoZXNlIGN1cnZlcy4gIFNhbml0eSBjaGVjayBvdXIgdG9wL2JvdHRvbQpAQCAtNjA1LDE2
ICs1MTEsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkUm91bmRlZFJlY3RDbGlwCiAgICAg
Q0dDb250ZXh0Q2xpcChjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBh
aW50aW5nRGlzYWJsZWQoYm9vbCBmKQotewotICAgIG1fZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNh
YmxlZCA9IGY7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpwYWludGluZ0Rpc2FibGVkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkOwotfQot
CiBDR0NvbnRleHRSZWYgR3JhcGhpY3NDb250ZXh0OjpjdXJyZW50Q0dDb250ZXh0KCkKIHsKICAg
ICByZXR1cm4gKENHQ29udGV4dFJlZilbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XSBncmFwaGljc1BvcnRdOwpAQCAtNjI5LDcgKzUyNSw3IEBAIEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0KiBHcmFwaGljc0NvbnRleHQKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBpZiAobV9kYXRhLT5zdGF0ZS5wYWlu
dGluZ0Rpc2FibGVkKQorICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGN1cnJlbnRDR0NvbnRleHQoKTsKICAgICBD
R0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwpAQCAtNjM5LDcgKzUzNSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUwKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAobV9kYXRhLT5zdGF0ZS5wYWludGlu
Z0Rpc2FibGVkKQorICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGN1cnJlbnRDR0NvbnRleHQoKTsKICAgICBDR0Nv
bnRleHRFbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0KTsKQEAgLTY0OCw3ICs1NDQsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRTaGFkb3coaW50IHgsIGludCB5LCBpbnQgYmx1ciwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIGlmIChtX2RhdGEtPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQpCisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIENoZWNrIGZvciBh
biBpbnZhbGlkIGNvbG9yLCBhcyB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvbG9yIHdhcyBub3Qgc2V0
IGZvciB0aGUgc2hhZG93CiAgICAgLy8gYW5kIHdlIHNob3VsZCB0aGVyZWZvcmUganVzdCB1c2Ug
dGhlIGRlZmF1bHQgc2hhZG93IGNvbG9yLgpAQCAtNjY3LDcgKzU2Myw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRTaGFkb3coaW50IHgsIGkKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
ZWFyU2hhZG93KCkKIHsKLSAgICBpZiAobV9kYXRhLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkKQor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBDR0NvbnRl
eHRSZWYgY29udGV4dCA9IGN1cnJlbnRDR0NvbnRleHQoKTsKICAgICBDR0NvbnRleHRTZXRTaGFk
b3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgTlVMTCk7CkBAIC02NzUsMTcgKzU3
MSwxOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3coKQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYg
KG1fZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZCkKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaW50IHJhZGl1cyA9IChtX2ZvY3VzUmluZ1dpZHRo
IC0gMSkgLyAyOwotICAgIGludCBvZmZzZXQgPSByYWRpdXMgKyBtX2ZvY3VzUmluZ09mZnNldDsK
KyAgICBpbnQgcmFkaXVzID0gKGZvY3VzUmluZ1dpZHRoKCkgLSAxKSAvIDI7CisgICAgaW50IG9m
ZnNldCA9IHJhZGl1cyArIGZvY3VzUmluZ09mZnNldCgpOwogICAgIENHQ29sb3JSZWYgY29sb3JS
ZWYgPSBjb2xvci5pc1ZhbGlkKCkgPyBjZ0NvbG9yKGNvbG9yKSA6IDA7CiAgICAgCiAgICAgQ0dN
dXRhYmxlUGF0aFJlZiBmb2N1c1JpbmdQYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOwotICAg
IHVuc2lnbmVkIHJlY3RDb3VudCA9IG1fZm9jdXNSaW5nUmVjdHMuc2l6ZSgpOworICAgIGNvbnN0
IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMgPSBmb2N1c1JpbmdSZWN0cygpOworICAgIHVuc2lnbmVk
IHJlY3RDb3VudCA9IHJlY3RzLnNpemUoKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcmVjdENvdW50OyBpKyspCi0gICAgICAgIENHUGF0aEFkZFJlY3QoZm9jdXNSaW5nUGF0
aCwgMCwgQ0dSZWN0SW5zZXQobV9mb2N1c1JpbmdSZWN0c1tpXSwgLW9mZnNldCwgLW9mZnNldCkp
OworICAgICAgICBDR1BhdGhBZGRSZWN0KGZvY3VzUmluZ1BhdGgsIDAsIENHUmVjdEluc2V0KHJl
Y3RzW2ldLCAtb2Zmc2V0LCAtb2Zmc2V0KSk7CiAgICAgCiAgICAgW1tXZWJDb3JlR3JhcGhpY3NC
cmlkZ2Ugc2hhcmVkQnJpZGdlXSBkcmF3Rm9jdXNSaW5nV2l0aFBhdGg6Zm9jdXNSaW5nUGF0aCBy
YWRpdXM6cmFkaXVzIGNvbG9yOmNvbG9yUmVmXTsKICAgICBDR0NvbG9yUmVsZWFzZShjb2xvclJl
Zik7CkluZGV4OiBwbGF0Zm9ybS9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBs
YXRmb3JtL0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDEzMzkzKQorKysgcGxhdGZvcm0v
R3JhcGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMzMgKzI2LDE5MSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCisjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCi0jaW5jbHVkZSAiRm9udC5oIgogI2lu
Y2x1ZGUgIldpZGdldC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSB7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSA6IHBhaW50aW5nRGlz
YWJsZWQoZmFsc2UpIHsgfQorICAgIEZvbnQgZm9udDsKKyAgICBQZW4gcGVuOworICAgIEJydXNo
IGJydXNoOworICAgIGJvb2wgcGFpbnRpbmdEaXNhYmxlZDsKK307CisgICAgICAgIAorc3RydWN0
IEdyYXBoaWNzQ29udGV4dFByaXZhdGUgeworICAgIEdyYXBoaWNzQ29udGV4dFByaXZhdGUoKTsK
KyAgICAKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBzdGF0ZTsKKyAgICBWZWN0b3I8R3JhcGhp
Y3NDb250ZXh0U3RhdGU+IHN0YWNrOworICAgIFZlY3RvcjxJbnRSZWN0PiBtX2ZvY3VzUmluZ1Jl
Y3RzOworICAgIGludCBtX2ZvY3VzUmluZ1dpZHRoOworICAgIGludCBtX2ZvY3VzUmluZ09mZnNl
dDsKKyAgICBib29sIG1faXNGb3JQcmludGluZzsKKyAgICBib29sIG1fdXNlc0luYWN0aXZlVGV4
dEJhY2tncm91bmRDb2xvcjsKKyAgICBib29sIG1fdXBkYXRpbmdDb250cm9sVGludHM7Cit9Owor
CitHcmFwaGljc0NvbnRleHRQcml2YXRlOjpHcmFwaGljc0NvbnRleHRQcml2YXRlKCkKKyAgICA6
IG1fZm9jdXNSaW5nV2lkdGgoMCkKKyAgICAsIG1fZm9jdXNSaW5nT2Zmc2V0KDApCisgICAgLCBt
X2lzRm9yUHJpbnRpbmcoZmFsc2UpCisgICAgLCBtX3VzZXNJbmFjdGl2ZVRleHRCYWNrZ3JvdW5k
Q29sb3IoZmFsc2UpCisgICAgLCBtX3VwZGF0aW5nQ29udHJvbFRpbnRzKGZhbHNlKQoreworfQor
CitHcmFwaGljc0NvbnRleHRQcml2YXRlKiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZUdyYXBoaWNz
Q29udGV4dFByaXZhdGUoKQoreworICAgIHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0UHJpdmF0
ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2
YXRlKEdyYXBoaWNzQ29udGV4dFByaXZhdGUqIGRlbGV0ZU1lKQoreworICAgIGRlbGV0ZSBkZWxl
dGVNZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKQoreworICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29tbW9uLT5zdGFjay5h
cHBlbmQobV9jb21tb24tPnN0YXRlKTsKKyAgICAKKyAgICBzYXZlUGxhdGZvcm1TdGF0ZSgpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpCit7CisgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY29tbW9uLT5zdGFjay5p
c0VtcHR5KCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFUlJPUiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6cmVzdG9yZSgpIHN0YWNrIGlzIGVtcHR5Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9jb21tb24tPnN0YXRlID0gbV9jb21tb24tPnN0YWNrLmxhc3QoKTsKKyAgICBtX2NvbW1v
bi0+c3RhY2sucmVtb3ZlTGFzdCgpOworICAgIAorICAgIHJlc3RvcmVQbGF0Zm9ybVN0YXRlKCk7
Cit9CisKK2NvbnN0IEZvbnQmIEdyYXBoaWNzQ29udGV4dDo6Zm9udCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5mb250OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0Rm9udChjb25zdCBGb250JiBhRm9udCkKK3sKKyAgICBtX2NvbW1vbi0+c3RhdGUuZm9udCA9
IGFGb250OworfQorCitjb25zdCBQZW4mIEdyYXBoaWNzQ29udGV4dDo6cGVuKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnBlbjsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBlbihjb25zdCBQZW4mIHBlbikKK3sKKyAgICBtX2NvbW1vbi0+c3RhdGUucGVuID0g
cGVuOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGVuKFBlbjo6UGVuU3R5bGUgc3R5
bGUpCit7CisgICAgbV9jb21tb24tPnN0YXRlLnBlbi5zZXRTdHlsZShzdHlsZSk7CisgICAgbV9j
b21tb24tPnN0YXRlLnBlbi5zZXRDb2xvcihDb2xvcjo6YmxhY2spOworICAgIG1fY29tbW9uLT5z
dGF0ZS5wZW4uc2V0V2lkdGgoMCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQZW4o
UkdCQTMyIHJnYikKK3sKKyAgICBtX2NvbW1vbi0+c3RhdGUucGVuLnNldFN0eWxlKFBlbjo6U29s
aWRMaW5lKTsKKyAgICBtX2NvbW1vbi0+c3RhdGUucGVuLnNldENvbG9yKHJnYik7CisgICAgbV9j
b21tb24tPnN0YXRlLnBlbi5zZXRXaWR0aCgwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldEJydXNoKGNvbnN0IEJydXNoJiBicnVzaCkKK3sKKyAgICBtX2NvbW1vbi0+c3RhdGUuYnJ1
c2ggPSBicnVzaDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEJydXNoKEJydXNoOjpC
cnVzaFN0eWxlIHN0eWxlKQoreworICAgIG1fY29tbW9uLT5zdGF0ZS5icnVzaC5zZXRTdHlsZShz
dHlsZSk7CisgICAgbV9jb21tb24tPnN0YXRlLmJydXNoLnNldENvbG9yKENvbG9yOjpibGFjayk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRCcnVzaChSR0JBMzIgcmdiKQoreworICAg
IG1fY29tbW9uLT5zdGF0ZS5icnVzaC5zZXRTdHlsZShCcnVzaDo6U29saWRQYXR0ZXJuKTsKKyAg
ICBtX2NvbW1vbi0+c3RhdGUuYnJ1c2guc2V0Q29sb3IocmdiKTsKK30KKworY29uc3QgQnJ1c2gm
IEdyYXBoaWNzQ29udGV4dDo6YnJ1c2goKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbW1vbi0+
c3RhdGUuYnJ1c2g7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVc2VzSW5hY3RpdmVU
ZXh0QmFja2dyb3VuZENvbG9yKGJvb2wgdSkKK3sKKyAgICBtX2NvbW1vbi0+bV91c2VzSW5hY3Rp
dmVUZXh0QmFja2dyb3VuZENvbG9yID0gdTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQ6OnVz
ZXNJbmFjdGl2ZVRleHRCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2Nv
bW1vbi0+bV91c2VzSW5hY3RpdmVUZXh0QmFja2dyb3VuZENvbG9yOworfQorCitib29sIEdyYXBo
aWNzQ29udGV4dDo6dXBkYXRpbmdDb250cm9sVGludHMoKSBjb25zdAoreworICAgIHJldHVybiBt
X2NvbW1vbi0+bV91cGRhdGluZ0NvbnRyb2xUaW50czsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFVwZGF0aW5nQ29udHJvbFRpbnRzKGJvb2wgYikKK3sKKyAgICBzZXRQYWludGluZ0Rp
c2FibGVkKGIpOworICAgIG1fY29tbW9uLT5tX3VwZGF0aW5nQ29udHJvbFRpbnRzID0gYjsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBhaW50aW5nRGlzYWJsZWQoYm9vbCBmKQorewor
ICAgIG1fY29tbW9uLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkID0gZjsKK30KKworYm9vbCBHcmFw
aGljc0NvbnRleHQ6OnBhaW50aW5nRGlzYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2Nv
bW1vbi0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZDsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQ6
OnByaW50aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb21tb24tPm1faXNGb3JQcmludGlu
ZzsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUF0UG9pbnQoSW1hZ2UqIGlt
YWdlLCBjb25zdCBJbnRQb2ludCYgcCwgSW1hZ2U6OkNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wZXJhdG9yKQogeyAgICAgICAgCi0gICAgZHJhd0ltYWdlKGltYWdlLCBwLngoKSwgcC55KCks
IDAsIDAsIC0xLCAtMSwgY29tcG9zaXRlT3BlcmF0b3IpOworICAgIGRyYXdJbWFnZShpbWFnZSwg
cCwgMCwgMCwgLTEsIC0xLCBjb21wb3NpdGVPcGVyYXRvcik7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2VJblJlY3QoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiByLCBJ
bWFnZTo6Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IpCiB7Ci0gICAgZHJhd0lt
YWdlKGltYWdlLCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSwgMCwgMCwgLTEs
IC0xLCBjb21wb3NpdGVPcGVyYXRvcik7CisgICAgZHJhd0ltYWdlKGltYWdlLCByLCAwLCAwLCAt
MSwgLTEsIGNvbXBvc2l0ZU9wZXJhdG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZShJbWFnZSogaW1hZ2UsIGludCB4LCBpbnQgeSwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgZGVzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgc3gsIGludCBzeSwgaW50IHN3LCBpbnQgc2gsIEltYWdlOjpD
b21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgdm9pZCogY29udGV4dCkKIHsKLSAg
ICBkcmF3SW1hZ2UoaW1hZ2UsIHgsIHksIHN3LCBzaCwgc3gsIHN5LCBzdywgc2gsIGNvbXBvc2l0
ZU9wZXJhdG9yLCBjb250ZXh0KTsKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIEludFJlY3QoZGVzdCwg
SW50U2l6ZShzdywgc2gpKSwgc3gsIHN5LCBzdywgc2gsIGNvbXBvc2l0ZU9wZXJhdG9yLCBjb250
ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2Us
IGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJ
bWFnZShJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGRlc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHN4LCBpbnQgc3ksIGludCBzdywgaW50IHNoLCBJbWFnZTo6Q29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgZHJhd0Zs
b2F0SW1hZ2UoaW1hZ2UsIChmbG9hdCl4LCAoZmxvYXQpeSwgKGZsb2F0KXcsIChmbG9hdCloLCAo
ZmxvYXQpc3gsIChmbG9hdClzeSwgKGZsb2F0KXN3LCAoZmxvYXQpc2gsIGNvbXBvc2l0ZU9wZXJh
dG9yLCBjb250ZXh0KTsKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UmVjdChkZXN0KSwgKGZs
b2F0KXN4LCAoZmxvYXQpc3ksIChmbG9hdClzdywgKGZsb2F0KXNoLCBjb21wb3NpdGVPcGVyYXRv
ciwgY29udGV4dCk7CiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgcmVtb3Zpbmcg
dGhpcyBmdW5jdGlvbiBhbmQgaGF2aW5nIGNhbGxlcnMganVzdCBjYWxsIHRoZSBsb3dlci1sZXZl
bCBkcmF3VGV4dCBkaXJlY3RseS4KQEAgLTEyNCwyMCArMjgyLDM1IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0Ojppbml0Rm9jdXNSaW5nKGludCAKICAgICAgICAgcmV0dXJuOwogICAgIGNsZWFyRm9j
dXNSaW5nKCk7CiAgICAgCi0gICAgbV9mb2N1c1JpbmdXaWR0aCA9IHdpZHRoOwotICAgIG1fZm9j
dXNSaW5nT2Zmc2V0ID0gb2Zmc2V0OworICAgIG1fY29tbW9uLT5tX2ZvY3VzUmluZ1dpZHRoID0g
d2lkdGg7CisgICAgbV9jb21tb24tPm1fZm9jdXNSaW5nT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJGb2N1c1JpbmcoKQogewotICAgIG1fZm9jdXNSaW5n
UmVjdHMuY2xlYXIoKTsKKyAgICBtX2NvbW1vbi0+bV9mb2N1c1JpbmdSZWN0cy5jbGVhcigpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkRm9jdXNSaW5nUmVjdChjb25zdCBJbnRSZWN0
JiByZWN0KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBtX2ZvY3VzUmluZ1JlY3RzLmFwcGVuZChyZWN0KTsKKyAgICBtX2NvbW1vbi0+bV9mb2N1
c1JpbmdSZWN0cy5hcHBlbmQocmVjdCk7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQ6OmZvY3Vz
UmluZ1dpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb21tb24tPm1fZm9jdXNSaW5nV2lk
dGg7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQ6OmZvY3VzUmluZ09mZnNldCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fY29tbW9uLT5tX2ZvY3VzUmluZ09mZnNldDsKK30KKworY29uc3QgVmVj
dG9yPEludFJlY3Q+JiBHcmFwaGljc0NvbnRleHQ6OmZvY3VzUmluZ1JlY3RzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9jb21tb24tPm1fZm9jdXNSaW5nUmVjdHM7CiB9CiAKIH0KSW5kZXg6IHJl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCShyZXZpc2lvbiAxMzM5MykKKysrIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MjgsMTEgKzgyOCwxMSBAQCB2b2lkIFJlbmRlck9iamVjdDo6
ZHJhd0JvcmRlcihHcmFwaGljc0NvCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICBjYXNlIEJT
Qm90dG9tOgogICAgICAgICAgICAgY2FzZSBCU1RvcDoKLSAgICAgICAgICAgICAgICBwLT5kcmF3
TGluZSh4MSwgKHkxK3kyKS8yLCB4MiwgKHkxK3kyKS8yKTsKKyAgICAgICAgICAgICAgICBwLT5k
cmF3TGluZShJbnRQb2ludCh4MSwgKHkxK3kyKS8yKSwgSW50UG9pbnQoeDIsICh5MSt5MikvMikp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBCU1JpZ2h0OgogICAg
ICAgICAgICAgY2FzZSBCU0xlZnQ6Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd0xpbmUoKHgxK3gy
KS8yLCB5MSwgKHgxK3gyKS8yLCB5Mik7CisgICAgICAgICAgICAgICAgcC0+ZHJhd0xpbmUoSW50
UG9pbnQoKHgxK3gyKS8yLCB5MSksIEludFBvaW50KCh4MSt4MikvMiwgeTIpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTg1MCwy
OSArODUwLDMzIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3Qm9yZGVyKEdyYXBoaWNzQ28KICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgIGNhc2UgQlNUb3A6CiAgICAgICAgICAgICBjYXNlIEJT
Qm90dG9tOgotICAgICAgICAgICAgICAgIHAtPmRyYXdSZWN0KHgxLCB5MSAgICAgICwgeDIteDEs
IHRoaXJkKTsKLSAgICAgICAgICAgICAgICBwLT5kcmF3UmVjdCh4MSwgeTItdGhpcmQsIHgyLXgx
LCB0aGlyZCk7CisgICAgICAgICAgICAgICAgcC0+ZHJhd1JlY3QoSW50UmVjdCh4MSwgeTEgICAg
ICAsIHgyLXgxLCB0aGlyZCkpOworICAgICAgICAgICAgICAgIHAtPmRyYXdSZWN0KEludFJlY3Qo
eDEsIHkyLXRoaXJkLCB4Mi14MSwgdGhpcmQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgQlNMZWZ0OgotICAgICAgICAgICAgICAgIHAtPmRyYXdSZWN0KHgxICAg
ICAgLCB5MSsxLCB0aGlyZCwgeTIteTEtMSk7Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd1JlY3Qo
eDItdGhpcmQsIHkxKzEsIHRoaXJkLCB5Mi15MS0xKTsKKyAgICAgICAgICAgICAgICBwLT5kcmF3
UmVjdChJbnRSZWN0KHgxICAgICAgLCB5MSsxLCB0aGlyZCwgeTIteTEtMSkpOworICAgICAgICAg
ICAgICAgIHAtPmRyYXdSZWN0KEludFJlY3QoeDItdGhpcmQsIHkxKzEsIHRoaXJkLCB5Mi15MS0x
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEJTUmlnaHQ6Ci0g
ICAgICAgICAgICAgICAgcC0+ZHJhd1JlY3QoeDEgICAgICAsIHkxKzEsIHRoaXJkLCB5Mi15MS0x
KTsKLSAgICAgICAgICAgICAgICBwLT5kcmF3UmVjdCh4Mi10aGlyZCwgeTErMSwgdGhpcmQsIHky
LXkxLTEpOworICAgICAgICAgICAgICAgIHAtPmRyYXdSZWN0KEludFJlY3QoeDEgICAgICAsIHkx
KzEsIHRoaXJkLCB5Mi15MS0xKSk7CisgICAgICAgICAgICAgICAgcC0+ZHJhd1JlY3QoSW50UmVj
dCh4Mi10aGlyZCwgeTErMSwgdGhpcmQsIHkyLXkxLTEpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGludCBhZGpidzFiaWd0aGlyZDsKLSAgICAgICAgICAgIGlmIChhZGpidzE+MCkg
YWRqYncxYmlndGhpcmQgPSBhZGpidzErMTsKLSAgICAgICAgICAgIGVsc2UgYWRqYncxYmlndGhp
cmQgPSBhZGpidzEgLSAxOworICAgICAgICAgICAgaWYgKGFkamJ3MT4wKQorICAgICAgICAgICAg
ICAgIGFkamJ3MWJpZ3RoaXJkID0gYWRqYncxKzE7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgYWRqYncxYmlndGhpcmQgPSBhZGpidzEgLSAxOwogICAgICAgICAgICAgYWRqYncx
YmlndGhpcmQgLz0gMzsKIAogICAgICAgICAgICAgaW50IGFkamJ3MmJpZ3RoaXJkOwotICAgICAg
ICAgICAgaWYgKGFkamJ3Mj4wKSBhZGpidzJiaWd0aGlyZCA9IGFkamJ3MiArIDE7Ci0gICAgICAg
ICAgICBlbHNlIGFkamJ3MmJpZ3RoaXJkID0gYWRqYncyIC0gMTsKKyAgICAgICAgICAgIGlmIChh
ZGpidzI+MCkKKyAgICAgICAgICAgICAgICBhZGpidzJiaWd0aGlyZCA9IGFkamJ3MiArIDE7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWRqYncyYmlndGhpcmQgPSBhZGpidzIg
LSAxOwogICAgICAgICAgICAgYWRqYncyYmlndGhpcmQgLz0gMzsKIAogICAgICAgICAgIHN3aXRj
aChzKQpAQCAtOTYxLDExICs5NjUsMTAgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRyYXdCb3JkZXIo
R3JhcGhpY3NDbwogICAgICAgICBwLT5zZXRCcnVzaChjKTsKICAgICAgICAgQVNTRVJUKHgyID49
IHgxKTsKICAgICAgICAgQVNTRVJUKHkyID49IHkxKTsKLSAgICAgICAgaWYgKGFkamJ3MT09MCAm
JiBhZGpidzIgPT0gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwLT5kcmF3UmVjdCh4MSx5
MSx4Mi14MSx5Mi15MSk7CisgICAgICAgIGlmIChhZGpidzE9PTAgJiYgYWRqYncyID09IDApIHsK
KyAgICAgICAgICAgIHAtPmRyYXdSZWN0KEludFJlY3QoeDEseTEseDIteDEseTIteTEpKTsKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgc3dpdGNo
KHMpIHsKICAgICAgICAgY2FzZSBCU1RvcDoKICAgICAgICAgICAgIHF1YWQuc2V0UG9pbnRzKDQs
CkBAIC0xMDQyLDE5ICsxMDQ1LDE5IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpwYWludEJvcmRlcklt
YWdlKEdyYXAKICAgICAgICAgLy8gVGhlIHRvcCBsZWZ0IGNvcm5lciByZWN0IGlzIChfdHgsIF90
eSwgbGVmdFdpZHRoLCB0b3BXaWR0aCkKICAgICAgICAgLy8gVGhlIHJlY3QgdG8gdXNlIGZyb20g
d2l0aGluIHRoZSBpbWFnZSBpcyBvYnRhaW5lZCBmcm9tIG91ciBzbGljZSwgYW5kIGlzICgwLCAw
LCBsZWZ0U2xpY2UsIHRvcFNsaWNlKQogICAgICAgICBpZiAoZHJhd1RvcCkKLSAgICAgICAgICAg
IHAtPmRyYXdJbWFnZShib3JkZXJJbWFnZS0+aW1hZ2UoKSwgX3R4LCBfdHksIHN0eWxlLT5ib3Jk
ZXJMZWZ0V2lkdGgoKSwgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCksCisgICAgICAgICAgICBwLT5k
cmF3SW1hZ2UoYm9yZGVySW1hZ2UtPmltYWdlKCksIEludFJlY3QoX3R4LCBfdHksIHN0eWxlLT5i
b3JkZXJMZWZ0V2lkdGgoKSwgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIDAsIGxlZnRTbGljZSwgdG9wU2xpY2UpOwogICAgICAgICAKICAgICAg
ICAgLy8gVGhlIGJvdHRvbSBsZWZ0IGNvcm5lciByZWN0IGlzIChfdHgsIF90eSArIGggLSBib3R0
b21XaWR0aCwgbGVmdFdpZHRoLCBib3R0b21XaWR0aCkKICAgICAgICAgLy8gVGhlIHJlY3QgdG8g
dXNlIGZyb20gd2l0aGluIHRoZSBpbWFnZSBpcyAoMCwgaW1hZ2VIZWlnaHQgLSBib3R0b21TbGlj
ZSwgbGVmdFNsaWNlLCBib3RvbVNsaWNlKQogICAgICAgICBpZiAoZHJhd0JvdHRvbSkKLSAgICAg
ICAgICAgIHAtPmRyYXdJbWFnZShib3JkZXJJbWFnZS0+aW1hZ2UoKSwgX3R4LCBfdHkgKyBoIC0g
c3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgc3R5
bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksCisgICAgICAgICAgICBwLT5kcmF3SW1hZ2UoYm9yZGVy
SW1hZ2UtPmltYWdlKCksIEludFJlY3QoX3R4LCBfdHkgKyBoIC0gc3R5bGUtPmJvcmRlckJvdHRv
bVdpZHRoKCksIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgc3R5bGUtPmJvcmRlckJvdHRvbVdp
ZHRoKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGltYWdlSGVpZ2h0IC0gYm90dG9t
U2xpY2UsIGxlZnRTbGljZSwgYm90dG9tU2xpY2UpOwogICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAvLyBQYWludCB0aGUgbGVmdCBlZGdlLgogICAgICAgICAvLyBIYXZlIHRvIHNjYWxl
IGFuZCB0aWxlIGludG8gdGhlIGJvcmRlciByZWN0LgotICAgICAgICBwLT5kcmF3U2NhbGVkQW5k
VGlsZWRJbWFnZShib3JkZXJJbWFnZS0+aW1hZ2UoKSwgX3R4LCBfdHkgKyBzdHlsZS0+Ym9yZGVy
VG9wV2lkdGgoKSwgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaCAtIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpIC0gc3R5bGUtPmJv
cmRlckJvdHRvbVdpZHRoKCksCisgICAgICAgIHAtPmRyYXdTY2FsZWRBbmRUaWxlZEltYWdlKGJv
cmRlckltYWdlLT5pbWFnZSgpLCBJbnRSZWN0KF90eCwgX3R5ICsgc3R5bGUtPmJvcmRlclRvcFdp
ZHRoKCksIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGggLSBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSAtIHN0eWxlLT5ib3JkZXJC
b3R0b21XaWR0aCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHRv
cFNsaWNlLCBsZWZ0U2xpY2UsIGltYWdlSGVpZ2h0IC0gdG9wU2xpY2UgLSBib3R0b21TbGljZSwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZTo6U3RyZXRjaFRpbGUs
IChJbWFnZTo6VGlsZVJ1bGUpdlJ1bGUpOwogICAgIH0KQEAgLTEwNjQsNDEgKzEwNjcsMzkgQEAg
Ym9vbCBSZW5kZXJPYmplY3Q6OnBhaW50Qm9yZGVySW1hZ2UoR3JhcAogICAgICAgICAvLyBUaGUg
dG9wIHJpZ2h0IGNvcm5lciByZWN0IGlzIChfdHggKyB3IC0gcmlnaHRXaWR0aCwgX3R5LCByaWdo
dFdpZHRoLCB0b3BXaWR0aCkKICAgICAgICAgLy8gVGhlIHJlY3QgdG8gdXNlIGZyb20gd2l0aGlu
IHRoZSBpbWFnZSBpcyBvYnRhaW5lZCBmcm9tIG91ciBzbGljZSwgYW5kIGlzIChpbWFnZVdpZHRo
IC0gcmlnaHRTbGljZSwgMCwgcmlnaHRTbGljZSwgdG9wU2xpY2UpCiAgICAgICAgIGlmIChkcmF3
VG9wKQotICAgICAgICAgICAgcC0+ZHJhd0ltYWdlKGJvcmRlckltYWdlLT5pbWFnZSgpLCBfdHgg
KyB3IC0gc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwgX3R5LCBzdHlsZS0+Ym9yZGVyUmlnaHRX
aWR0aCgpLCBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwKKyAgICAgICAgICAgIHAtPmRyYXdJbWFn
ZShib3JkZXJJbWFnZS0+aW1hZ2UoKSwgSW50UmVjdChfdHggKyB3IC0gc3R5bGUtPmJvcmRlclJp
Z2h0V2lkdGgoKSwgX3R5LCBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCBzdHlsZS0+Ym9yZGVy
VG9wV2lkdGgoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VXaWR0aCAtIHJpZ2h0
U2xpY2UsIDAsIHJpZ2h0U2xpY2UsIHRvcFNsaWNlKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRo
ZSBib3R0b20gcmlnaHQgY29ybmVyIHJlY3QgaXMgKF90eCArIHcgLSByaWdodFdpZHRoLCBfdHkg
KyBoIC0gYm90dG9tV2lkdGgsIHJpZ2h0V2lkdGgsIGJvdHRvbVdpZHRoKQogICAgICAgICAvLyBU
aGUgcmVjdCB0byB1c2UgZnJvbSB3aXRoaW4gdGhlIGltYWdlIGlzIChpbWFnZVdpZHRoIC0gcmln
aHRTbGljZSwgaW1hZ2VIZWlnaHQgLSBib3R0b21TbGljZSwgcmlnaHRTbGljZSwgYm90b21TbGlj
ZSkKICAgICAgICAgaWYgKGRyYXdCb3R0b20pCi0gICAgICAgICAgICBwLT5kcmF3SW1hZ2UoYm9y
ZGVySW1hZ2UtPmltYWdlKCksIF90eCArIHcgLSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCBf
dHkgKyBoIC0gc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksIHN0eWxlLT5ib3JkZXJSaWdodFdp
ZHRoKCksIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpLAorICAgICAgICAgICAgcC0+ZHJhd0lt
YWdlKGJvcmRlckltYWdlLT5pbWFnZSgpLCBJbnRSZWN0KF90eCArIHcgLSBzdHlsZS0+Ym9yZGVy
UmlnaHRXaWR0aCgpLCBfdHkgKyBoIC0gc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksIHN0eWxl
LT5ib3JkZXJSaWdodFdpZHRoKCksIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSwgaW1hZ2VIZWlnaHQg
LSBib3R0b21TbGljZSwgcmlnaHRTbGljZSwgYm90dG9tU2xpY2UpOwogICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAvLyBQYWludCB0aGUgcmlnaHQgZWRnZS4KLSAgICAgICAgcC0+ZHJh
d1NjYWxlZEFuZFRpbGVkSW1hZ2UoYm9yZGVySW1hZ2UtPmltYWdlKCksIF90eCArIHcgLSBzdHls
ZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCBfdHkgKyBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwgc3R5
bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaCAtIHN0
eWxlLT5ib3JkZXJUb3BXaWR0aCgpIC0gc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksCisgICAg
ICAgIHAtPmRyYXdTY2FsZWRBbmRUaWxlZEltYWdlKGJvcmRlckltYWdlLT5pbWFnZSgpLCBJbnRS
ZWN0KF90eCArIHcgLSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCBfdHkgKyBzdHlsZS0+Ym9y
ZGVyVG9wV2lkdGgoKSwgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgaCAtIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpIC0gc3R5bGUtPmJvcmRlckJv
dHRvbVdpZHRoKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVdpZHRoIC0gcmln
aHRTbGljZSwgdG9wU2xpY2UsIHJpZ2h0U2xpY2UsIGltYWdlSGVpZ2h0IC0gdG9wU2xpY2UgLSBi
b3R0b21TbGljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U6OlN0cmV0Y2hUaWxl
LCAoSW1hZ2U6OlRpbGVSdWxlKXZSdWxlKTsKICAgICB9CiAKICAgICAvLyBQYWludCB0aGUgdG9w
IGVkZ2UuCiAgICAgaWYgKGRyYXdUb3ApCi0gICAgICAgIHAtPmRyYXdTY2FsZWRBbmRUaWxlZElt
YWdlKGJvcmRlckltYWdlLT5pbWFnZSgpLCBfdHggKyBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCks
IF90eSwgdyAtIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSAtIHN0eWxlLT5ib3JkZXJSaWdodFdp
ZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgp
LAorICAgICAgICBwLT5kcmF3U2NhbGVkQW5kVGlsZWRJbWFnZShib3JkZXJJbWFnZS0+aW1hZ2Uo
KSwgSW50UmVjdChfdHggKyBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIF90eSwgdyAtIHN0eWxl
LT5ib3JkZXJMZWZ0V2lkdGgoKSAtIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIHN0eWxlLT5i
b3JkZXJUb3BXaWR0aCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNsaWNlLCAw
LCBpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSAtIGxlZnRTbGljZSwgdG9wU2xpY2UsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChJbWFnZTo6VGlsZVJ1bGUpaFJ1bGUsIEltYWdlOjpTdHJldGNo
VGlsZSk7CiAgICAgCiAgICAgLy8gUGFpbnQgdGhlIGJvdHRvbSBlZGdlLgogICAgIGlmIChkcmF3
Qm90dG9tKQotICAgICAgICBwLT5kcmF3U2NhbGVkQW5kVGlsZWRJbWFnZShib3JkZXJJbWFnZS0+
aW1hZ2UoKSwgX3R4ICsgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCBfdHkgKyBoIC0gc3R5bGUt
PmJvcmRlckJvdHRvbVdpZHRoKCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICB3IC0gc3R5
bGUtPmJvcmRlckxlZnRXaWR0aCgpIC0gc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksCisgICAgICAg
IHAtPmRyYXdTY2FsZWRBbmRUaWxlZEltYWdlKGJvcmRlckltYWdlLT5pbWFnZSgpLCBJbnRSZWN0
KF90eCArIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgX3R5ICsgaCAtIHN0eWxlLT5ib3JkZXJC
b3R0b21XaWR0aCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdyAtIHN0eWxlLT5ib3Jk
ZXJMZWZ0V2lkdGgoKSAtIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIHN0eWxlLT5ib3JkZXJC
b3R0b21XaWR0aCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNsaWNlLCBpbWFn
ZUhlaWdodCAtIGJvdHRvbVNsaWNlLCBpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSAtIGxlZnRTbGlj
ZSwgYm90dG9tU2xpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbWFnZTo6VGlsZVJ1
bGUpaFJ1bGUsIEltYWdlOjpTdHJldGNoVGlsZSk7CiAgICAgCiAgICAgLy8gUGFpbnQgdGhlIG1p
ZGRsZS4KICAgICBpZiAoZHJhd01pZGRsZSkKLSAgICAgICAgcC0+ZHJhd1NjYWxlZEFuZFRpbGVk
SW1hZ2UoYm9yZGVySW1hZ2UtPmltYWdlKCksIF90eCArIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgo
KSwgX3R5ICsgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCksIHcgLSBzdHlsZS0+Ym9yZGVyTGVmdFdp
ZHRoKCkgLSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBoIC0gc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkgLSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lk
dGgoKSwKKyAgICAgICAgcC0+ZHJhd1NjYWxlZEFuZFRpbGVkSW1hZ2UoYm9yZGVySW1hZ2UtPmlt
YWdlKCksIEludFJlY3QoX3R4ICsgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCBfdHkgKyBzdHls
ZS0+Ym9yZGVyVG9wV2lkdGgoKSwgdyAtIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSAtIHN0eWxl
LT5ib3JkZXJSaWdodFdpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGggLSBzdHls
ZS0+Ym9yZGVyVG9wV2lkdGgoKSAtIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGVmdFNsaWNlLCB0b3BTbGljZSwgaW1hZ2VXaWR0aCAtIHJp
Z2h0U2xpY2UgLSBsZWZ0U2xpY2UsIGltYWdlSGVpZ2h0IC0gdG9wU2xpY2UgLSBib3R0b21TbGlj
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKEltYWdlOjpUaWxlUnVsZSloUnVsZSwgKElt
YWdlOjpUaWxlUnVsZSl2UnVsZSk7CiAKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAJKHJldmlzaW9uIDEz
MzkzKQorKysgcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MTUsMTcgKzUxNSwxNyBAQCBib29sIFJlbmRlckZyYW1lU2V0Ojp1c2VyUmVzaXplKCBNb3VzZUV2
CiAgICAgICAgICAgICAgICAgcGFpbnQuc2V0UGVuKFBlbjo6Tm9QZW4pOwogICAgICAgICAgICAg
ICAgIHBhaW50LnNldEJydXNoKENvbG9yOjpncmF5KTsKICAgICAgICAgICAgICAgICB2LT5zZXRE
cmF3aW5nQWxwaGEoMC4yNSk7Ci0gICAgICAgICAgICAgICAgcGFpbnQuZHJhd1JlY3QocCArIHN3
LzIgLSByQm9yZCwgci55KCksIDIqckJvcmQsIHIuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAg
IHBhaW50LmRyYXdSZWN0KEludFJlY3QocCArIHN3LzIgLSByQm9yZCwgci55KCksIDIgKiByQm9y
ZCwgci5oZWlnaHQoKSkpOwogICAgICAgICAgICAgICAgIHYtPnNldERyYXdpbmdBbHBoYSgxLjAp
OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKG1fb2xk
cG9zID49IDApCi0gICAgICAgICAgICAgICAgdi0+dXBkYXRlQ29udGVudHMoSW50UmVjdChyLngo
KSwgbV9vbGRwb3MgKyBzdy8yIC0gckJvcmQsIHIud2lkdGgoKSwgMipyQm9yZCksIHRydWUpOwor
ICAgICAgICAgICAgICAgIHYtPnVwZGF0ZUNvbnRlbnRzKEludFJlY3Qoci54KCksIG1fb2xkcG9z
ICsgc3cvMiAtIHJCb3JkLCByLndpZHRoKCksIDIgKiByQm9yZCksIHRydWUpOwogICAgICAgICAg
ICAgaWYgKHAgPj0gMCkgewogICAgICAgICAgICAgICAgIHBhaW50LnNldFBlbihQZW46Ok5vUGVu
KTsKICAgICAgICAgICAgICAgICBwYWludC5zZXRCcnVzaChDb2xvcjo6Z3JheSk7CiAgICAgICAg
ICAgICAgICAgdi0+c2V0RHJhd2luZ0FscGhhKDAuMjUpOwotICAgICAgICAgICAgICAgIHBhaW50
LmRyYXdSZWN0KHIueCgpLCBwICsgc3cvMiAtIHJCb3JkLCByLndpZHRoKCksIDIgKiByQm9yZCk7
CisgICAgICAgICAgICAgICAgcGFpbnQuZHJhd1JlY3QoSW50UmVjdChyLngoKSwgcCArIHN3LzIg
LSByQm9yZCwgci53aWR0aCgpLCAyICogckJvcmQpKTsKICAgICAgICAgICAgICAgICB2LT5zZXRE
cmF3aW5nQWxwaGEoMS4wKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogcmVuZGVy
aW5nL3JlbmRlcl9saXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvcmVuZGVyX2xpc3Qu
Y3BwCShyZXZpc2lvbiAxMzM5MykKKysrIHJlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzMCwxNSArNDMwLDE1IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFp
bnQoUGFpbnRJbmZvJiAKICAgICBzd2l0Y2goc3R5bGUoKS0+bGlzdFN0eWxlVHlwZSgpKSB7CiAg
ICAgY2FzZSBESVNDOgogICAgICAgICBwLT5zZXRCcnVzaChjb2xvcik7Ci0gICAgICAgIHAtPmRy
YXdFbGxpcHNlKG1hcmtlci54KCksIG1hcmtlci55KCksIG1hcmtlci53aWR0aCgpLCBtYXJrZXIu
aGVpZ2h0KCkpOworICAgICAgICBwLT5kcmF3RWxsaXBzZShtYXJrZXIpOwogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBDSVJDTEU6CiAgICAgICAgIHAtPnNldEJydXNoKFdlYkNvcmU6OkJydXNo
OjpOb0JydXNoKTsKLSAgICAgICAgcC0+ZHJhd0VsbGlwc2UobWFya2VyLngoKSwgbWFya2VyLnko
KSwgbWFya2VyLndpZHRoKCksIG1hcmtlci5oZWlnaHQoKSk7CisgICAgICAgIHAtPmRyYXdFbGxp
cHNlKG1hcmtlcik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNRVUFSRToKICAgICAgICAg
cC0+c2V0QnJ1c2goY29sb3IpOwotICAgICAgICBwLT5kcmF3UmVjdChtYXJrZXIueCgpLCBtYXJr
ZXIueSgpLCBtYXJrZXIud2lkdGgoKSwgbWFya2VyLmhlaWdodCgpKTsKKyAgICAgICAgcC0+ZHJh
d1JlY3QobWFya2VyKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgTE5PTkU6CiAgICAgICAg
IHJldHVybjsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gMTMzOTMpCisrKyByZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksOSArMTg5LDggQEAgdm9pZCBS
ZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbgogICAgIGJvb2wgaXNQcmludGluZyA9
IGkucC0+cHJpbnRpbmcoKTsKICAgICBib29sIGRyYXdTZWxlY3Rpb25UaW50ID0gaXNTZWxlY3Rl
ZCgpICYmICFpc1ByaW50aW5nOwogICAgIGlmIChpLnBoYXNlID09IFBhaW50QWN0aW9uU2VsZWN0
aW9uKSB7Ci0gICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbk5vbmUpIHsK
KyAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uTm9uZSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQogICAgICAgICBkcmF3U2VsZWN0aW9uVGludCA9IGZhbHNl
OwogICAgIH0KICAgICAgICAgCkBAIC0yMTMsNyArMjEyLDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6
cGFpbnQoUGFpbnRJbmZvJiBpLCBpbgogICAgICAgICAgICAgaWYgKCFlcnJvck9jY3VycmVkKCkp
IHsKICAgICAgICAgICAgICAgICBwLT5zZXRQZW4gKENvbG9yOjpsaWdodEdyYXkpOwogICAgICAg
ICAgICAgICAgIHAtPnNldEJydXNoIChXZWJDb3JlOjpCcnVzaDo6Tm9CcnVzaCk7Ci0gICAgICAg
ICAgICAgICAgcC0+ZHJhd1JlY3QgKF90eCArIGxlZnRCb3JkZXIgKyBsZWZ0UGFkLCBfdHkgKyB0
b3BCb3JkZXIgKyB0b3BQYWQsIGNXaWR0aCwgY0hlaWdodCk7CisgICAgICAgICAgICAgICAgcC0+
ZHJhd1JlY3QgKEludFJlY3QoX3R4ICsgbGVmdEJvcmRlciArIGxlZnRQYWQsIF90eSArIHRvcEJv
cmRlciArIHRvcFBhZCwgY1dpZHRoLCBjSGVpZ2h0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGJvb2wgZXJyb3JQaWN0dXJlRHJhd24gPSBmYWxzZTsKSW5kZXg6
IHJlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJC
b3guY3BwCShyZXZpc2lvbiAxMzM5MykKKysrIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MzEsMTAgKzQzMSwxMSBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCYWNr
Z3JvdW5kRXh0ZW5kZWQoCiAKICAgICAvLyBQYWludCB0aGUgY29sb3IgZmlyc3QgdW5kZXJuZWF0
aCBhbGwgaW1hZ2VzLgogICAgIGlmICghYmdMYXllci0+bmV4dCgpICYmIGJnQ29sb3IuaXNWYWxp
ZCgpICYmIGJnQ29sb3IuYWxwaGEoKSA+IDApIHsKKyAgICAgICAgSW50UmVjdCByZWN0KF90eCwg
Y2xpcHksIHcsIGNsaXBoKTsKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBhbHBoYSBhbmQgd2Ug
YXJlIHBhaW50aW5nIHRoZSByb290IGVsZW1lbnQsIGdvIGFoZWFkIGFuZCBibGVuZCB3aXRoIHdo
aXRlLgogICAgICAgICBpZiAoYmdDb2xvci5hbHBoYSgpIDwgMHhGRiAmJiBpc1Jvb3QoKSAmJiAh
Y2FudmFzKCktPnZpZXcoKS0+aXNUcmFuc3BhcmVudCgpKQotICAgICAgICAgICAgcC0+ZmlsbFJl
Y3QoX3R4LCBjbGlweSwgdywgY2xpcGgsIENvbG9yKENvbG9yOjp3aGl0ZSkpOwotICAgICAgICBw
LT5maWxsUmVjdChfdHgsIGNsaXB5LCB3LCBjbGlwaCwgYmdDb2xvcik7CisgICAgICAgICAgICBw
LT5maWxsUmVjdChyZWN0LCBDb2xvcihDb2xvcjo6d2hpdGUpKTsKKyAgICAgICAgcC0+ZmlsbFJl
Y3QocmVjdCwgYmdDb2xvcik7CiAgICAgfQogICAgIAogICAgIC8vIG5vIHByb2dyZXNzaXZlIGxv
YWRpbmcgb2YgdGhlIGJhY2tncm91bmQgaW1hZ2UKQEAgLTU2Nyw3ICs1NjgsNyBAQCB2b2lkIFJl
bmRlckJveDo6cGFpbnRCYWNrZ3JvdW5kRXh0ZW5kZWQoCiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoY3c+MCAmJiBjaD4wKQotICAgICAgICAgICAgcC0+ZHJhd1RpbGVkSW1hZ2UoYmctPmltYWdl
KCksIGN4LCBjeSwgY3csIGNoLCBzeCwgc3kpOworICAgICAgICAgICAgcC0+ZHJhd1RpbGVkSW1h
Z2UoYmctPmltYWdlKCksIEludFJlY3QoY3gsIGN5LCBjdywgY2gpLCBzeCwgc3kpOwogICAgIH0K
ICAgICAKICAgICBpZiAoYmdMYXllci0+YmFja2dyb3VuZENsaXAoKSAhPSBCR0JPUkRFUikKQEAg
LTU3NywxMSArNTc4LDExIEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEJhY2tncm91bmRFeHRlbmRl
ZCgKICAgICAgICAgcC0+cmVzdG9yZSgpOyAvLyBVbmRvIHRoZSBib3JkZXIgcmFkaXVzIGNsaXAK
IH0KIAotdm9pZCBSZW5kZXJCb3g6Om91dGxpbmVCb3goR3JhcGhpY3NDb250ZXh0KiBwLCBpbnQg
X3R4LCBpbnQgX3R5LCBjb25zdCBjaGFyICpjb2xvcikKK3ZvaWQgUmVuZGVyQm94OjpvdXRsaW5l
Qm94KEdyYXBoaWNzQ29udGV4dCogcCwgaW50IF90eCwgaW50IF90eSwgY29uc3QgY2hhciogY29s
b3IpCiB7CiAgICAgcC0+c2V0UGVuKFBlbihDb2xvcihjb2xvciksIDEsIFBlbjo6RG90TGluZSkp
OwogICAgIHAtPnNldEJydXNoKFdlYkNvcmU6OkJydXNoOjpOb0JydXNoKTsKLSAgICBwLT5kcmF3
UmVjdChfdHgsIF90eSwgbV93aWR0aCwgbV9oZWlnaHQpOworICAgIHAtPmRyYXdSZWN0KEludFJl
Y3QoX3R4LCBfdHksIG1fd2lkdGgsIG1faGVpZ2h0KSk7CiB9CiAKIEludFJlY3QgUmVuZGVyQm94
OjpnZXRPdmVyZmxvd0NsaXBSZWN0KGludCB0eCwgaW50IHR5KQpJbmRleDoga2NhbnZhcy9SZW5k
ZXJTVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9SZW5kZXJTVkdJbWFnZS5jcHAJ
KHJldmlzaW9uIDEzMzkzKQorKysga2NhbnZhcy9SZW5kZXJTVkdJbWFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3MCw4ICsxNzAsNyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjpwYWludChQYWlu
dEluZm8mIHBhCiAgICAgICAgIEZsb2F0UmVjdCBkZXN0UmVjdChtX3gsIG1feSwgY29udGVudFdp
ZHRoKCksIGNvbnRlbnRIZWlnaHQoKSk7CiAgICAgICAgIEZsb2F0UmVjdCBzcmNSZWN0KDAsIDAs
IGltYWdlKCktPndpZHRoKCksIGltYWdlKCktPmhlaWdodCgpKTsKICAgICAgICAgYWRqdXN0UmVj
dHNGb3JBc3BlY3RSYXRpbyhkZXN0UmVjdCwgc3JjUmVjdCwgaW1hZ2VFbHQtPnByZXNlcnZlQXNw
ZWN0UmF0aW8oKS0+YmFzZVZhbCgpKTsKLSAgICAgICAgcGFpbnRJbmZvLnAtPmRyYXdGbG9hdElt
YWdlKGltYWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UmVj
dC54KCksIGRlc3RSZWN0LnkoKSwgZGVzdFJlY3Qud2lkdGgoKSwgZGVzdFJlY3QuaGVpZ2h0KCks
IAorICAgICAgICBwYWludEluZm8ucC0+ZHJhd0ltYWdlKGltYWdlKCksIGRlc3RSZWN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUmVjdC54KCksIHNyY1JlY3QueSgp
LCBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSW1hZ2U6OkNvbXBvc2l0ZVNvdXJjZU92ZXIpOwogICAgIH0KSW5k
ZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzkzKQor
KysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEyIEBACisyMDA2LTAzLTE3
ICBFcmljIFNlaWRlbCAgPGVzZWlkZWxAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IGRhcmluLgorCisgICAgICAgIE1vdmUgRm9ybSBjb2RlIGZyb20gTWFjRnJhbWUgdG8gRnJhbWUu
CisgICAgICAgIE1vdmUgR3JhcGhpY3NDb250ZXh0IGNvZGUgZnJvbSBHcmFwaGljc0NvbnRleHRN
YWMgdG8gR3JhcGhpY3NDb250ZXh0LgorICAgICAgICBVc2UgSW50UmVjdCwgRmxvYXRSZWN0IGlu
IG1vcmUgcGxhY2VzIHRocm91Z2hvdXQgdGhlIGNvZGUuCisgICAgICAgIGh0dHA6Ly9idWd6aWxs
YS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzgyNAorCisgICAgICAgICogYnJpZGdl
L21hYy9NYWNGcmFtZS5oOgorICAgICAgICAqIGJyaWRnZS9tYWMvTWFjRnJhbWUubW06CisgICAg
ICAgIChXZWJDb3JlOjpNYWNGcmFtZTo6TWFjRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWFj
RnJhbWU6OnNlYXJjaEZvckxhYmVsc0Fib3ZlQ2VsbCk6CisgICAgICAgIChXZWJDb3JlOjpNYWNG
cmFtZTo6c2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpk
aWN0aW9uYXJ5RnJvbUhhc2hNYXApOgorICAgICAgICAoV2ViQ29yZTo6TWFjRnJhbWU6OnN1Ym1p
dEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6TWFjRnJhbWU6OnNldFZpZXcpOgorICAgICAgICAo
V2ViQ29yZTo6TWFjRnJhbWU6OmN1cnJlbnRFdmVudElzTW91c2VEb3duSW5XaWRnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWFjRnJhbWU6OmN1cnJlbnRFdmVudElzS2V5Ym9hcmRPcHRpb25UYWIp
OgorICAgICAgICAoV2ViQ29yZTo6TWFjRnJhbWU6OmhhbmRsZUtleWJvYXJkT3B0aW9uVGFiSW5W
aWV3KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hY0ZyYW1lOjp0YWJzVG9BbGxDb250cm9scyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNYWNGcmFtZTo6c2hvdWxkRHJhZ0F1dG9Ob2RlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1hY0ZyYW1lOjpzZWxlY3Rpb25JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpN
YWNGcmFtZTo6c25hcHNob3REcmFnSW1hZ2UpOgorICAgICAgICAqIGJyaWRnZS9tYWMvV2ViQ29y
ZUZyYW1lQnJpZGdlLm1tOgorICAgICAgICAoLVtXZWJDb3JlRnJhbWVCcmlkZ2UgbmV4dEtleVZp
ZXddKToKKyAgICAgICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdlIHByZXZpb3VzS2V5Vmlld10pOgor
ICAgICAgICAoLVtXZWJDb3JlRnJhbWVCcmlkZ2UgbmV4dEtleVZpZXdJbnNpZGVXZWJGcmFtZVZp
ZXdzXSk6CisgICAgICAgICgtW1dlYkNvcmVGcmFtZUJyaWRnZSBwcmV2aW91c0tleVZpZXdJbnNp
ZGVXZWJGcmFtZVZpZXdzXSk6CisgICAgICAgICoga2NhbnZhcy9SZW5kZXJTVkdJbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6cGFpbnQpOgorICAgICAgICAqIHBh
Z2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OkZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpjbGVhclJlY29yZGVkRm9ybVZhbHVlcyk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZTo6cmVjb3JkRm9ybVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpk
aWROb3RPcGVuVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OnNjYW5Gb3JGb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cHJlcGFy
ZUZvclVzZXJBY3Rpb24pOgorICAgICAgICAqIHBhZ2UvRnJhbWUuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFByaXZhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0UHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFByaXZhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzYXZlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRG
b250KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGVuKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0QnJ1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpicnVzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFVzZXNJ
bmFjdGl2ZVRleHRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Ojp1c2VzSW5hY3RpdmVUZXh0QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6dXBkYXRpbmdDb250cm9sVGludHMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRVcGRhdGluZ0NvbnRyb2xUaW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBhaW50aW5nRGlzYWJsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwYWludGluZ0Rpc2FibGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cHJpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VBdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlSW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6aW5pdEZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNs
ZWFyRm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkRm9j
dXNSaW5nUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZvY3VzUmlu
Z1dpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zm9jdXNSaW5nT2Zm
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zm9jdXNSaW5nUmVjdHMp
OgorICAgICAgICAqIHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpmaWxsUmVj
dFNvdXJjZU92ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3ND
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3Jt
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbG9yRnJvbUJydXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q29sb3JGcm9tUGVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdBcmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3Q29udmV4UG9seWdvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdGbG9hdEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RpbGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3U2Nh
bGVkQW5kVGlsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
bGVjdGVkVGV4dEJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRk
Q2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFkZFJvdW5kZWRSZWN0
Q2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3Bh
cmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRv
dyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAg
ICogcmVuZGVyaW5nL3JlbmRlcl9ib3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
OjpwYWludEJhY2tncm91bmRFeHRlbmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
Om91dGxpbmVCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYW1lU2V0Ojp1c2VyUmVzaXplKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdl
OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcv
cmVuZGVyX29iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmRyYXdC
b3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpwYWludEJvcmRlckltYWdl
KToKKwogMjAwNi0wMy0xOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgLSBnbG9iYWwgcmVuYW1lLCBkb25lIGJ5IHNjcmlwdApJbmRleDogYnJpZGdlL21hYy9GcmFt
ZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBicmlkZ2UvbWFjL0ZyYW1lTWFjLm1tCShyZXZpc2lvbiAx
MzM5MykKKysrIGJyaWRnZS9tYWMvRnJhbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ0Miwz
MiArNDQyLDYgQEAgYm9vbCBGcmFtZU1hYzo6ZmluZFN0cmluZyhOU1N0cmluZyAqc3RyaQogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIEZyYW1lTWFjOjpjbGVhclJlY29yZGVkRm9ybVZhbHVl
cygpCi17Ci0gICAgLy8gSXQncyBzYWZlIHRvIGFzc3VtZSB0aGF0IG91ciBvd24gY2xhc3NlcyBh
bmQgRm91bmRhdGlvbiBkYXRhCi0gICAgLy8gc3RydWN0dXJlcyB3b24ndCByYWlzZSBleGNlcHRp
b25zIGluIGRlYWxsb2MKLQotICAgIEtXUVJlbGVhc2UoX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJt
aXR0ZWQpOwotICAgIF9mb3JtVmFsdWVzQWJvdXRUb0JlU3VibWl0dGVkID0gbmlsOwotICAgIEtX
UVJlbGVhc2UoX2Zvcm1BYm91dFRvQmVTdWJtaXR0ZWQpOwotICAgIF9mb3JtQWJvdXRUb0JlU3Vi
bWl0dGVkID0gbmlsOwotfQotCi12b2lkIEZyYW1lTWFjOjpyZWNvcmRGb3JtVmFsdWUoY29uc3Qg
RGVwcmVjYXRlZFN0cmluZyAmbmFtZSwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmdmFsdWUsIEhU
TUxGb3JtRWxlbWVudCAqZWxlbWVudCkKLXsKLSAgICAvLyBJdCdzIHNhZmUgdG8gYXNzdW1lIHRo
YXQgb3VyIG93biBjbGFzc2VzIGFuZCBiYXNpYyBGb3VuZGF0aW9uCi0gICAgLy8gZGF0YSBzdHJ1
Y3R1cmVzIHdvbid0IHJhaXNlIGV4Y2VwdGlvbnMKLQotICAgIGlmICghX2Zvcm1WYWx1ZXNBYm91
dFRvQmVTdWJtaXR0ZWQpIHsKLSAgICAgICAgX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQg
PSBLV1FSZXRhaW5OU1JlbGVhc2UoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7
Ci0gICAgICAgIEFTU0VSVCghX2Zvcm1BYm91dFRvQmVTdWJtaXR0ZWQpOwotICAgICAgICBfZm9y
bUFib3V0VG9CZVN1Ym1pdHRlZCA9IEtXUVJldGFpbihbRE9NRWxlbWVudCBfZWxlbWVudFdpdGg6
ZWxlbWVudF0pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChbX2Zvcm1BYm91dFRvQmVT
dWJtaXR0ZWQgX2VsZW1lbnRdID09IGVsZW1lbnQpOwotICAgIH0KLSAgICBbX2Zvcm1WYWx1ZXNB
Ym91dFRvQmVTdWJtaXR0ZWQgc2V0T2JqZWN0OnZhbHVlLmdldE5TU3RyaW5nKCkgZm9yS2V5Om5h
bWUuZ2V0TlNTdHJpbmcoKV07Ci19Ci0KIHZvaWQgRnJhbWVNYWM6OnN1Ym1pdEZvcm0oY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKQEAgLTQ4MSw3ICs0NTUsNyBAQCB2b2lkIEZyYW1lTWFjOjpzdWJtaXRGb3JtKGNvbnN0
IFJlc291cmNlCiAgICAgLy8gVGhlIGZvcm0gbXVsdGktc3VibWl0IGxvZ2ljIGhlcmUgaXMgb25s
eSBuZWVkZWQgd2hlbiB3ZSBhcmUgc3VibWl0dGluZyBhIGZvcm0gdGhhdCBhZmZlY3RzIHRoaXMg
ZnJhbWUuCiAgICAgLy8gRklYTUU6IEZyYW1lIHRhcmdldGluZyBpcyBvbmx5IG9uZSBvZiB0aGUg
d2F5cyB0aGUgc3VibWlzc2lvbiBjb3VsZCBlbmQgdXAgZG9pbmcgc29tZXRoaW5nIG90aGVyCiAg
ICAgLy8gdGhhbiByZXBsYWNpbmcgdGhpcyBmcmFtZSdzIGNvbnRlbnQsIHNvIHRoaXMgY2hlY2sg
aXMgZmxhd2VkLiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGNoZWNrIGlzIGhhcmRseQotICAgIC8v
IG5lZWRlZCBhbnkgbW9yZSBub3cgdGhhdCB3ZSByZXNldCBfc3VibWl0dGVkRm9ybVVSTCBvbiBl
YWNoIG1vdXNlIG9yIGtleSBkb3duIGV2ZW50LgorICAgIC8vIG5lZWRlZCBhbnkgbW9yZSBub3cg
dGhhdCB3ZSByZXNldCBkLT5tX3N1Ym1pdHRlZEZvcm1VUkwgb24gZWFjaCBtb3VzZSBvciBrZXkg
ZG93biBldmVudC4KICAgICBXZWJDb3JlRnJhbWVCcmlkZ2UgKnRhcmdldCA9IHJlcXVlc3QuZnJh
bWVOYW1lLmlzRW1wdHkoKSA/IF9icmlkZ2UgOiBbX2JyaWRnZSBmaW5kRnJhbWVOYW1lZDpyZXF1
ZXN0LmZyYW1lTmFtZS5nZXROU1N0cmluZygpXTsKICAgICBGcmFtZSAqdGFyZ2V0UGFydCA9IFt0
YXJnZXQgaW1wbF07CiAgICAgYm9vbCB3aWxsUmVwbGFjZVRoaXNGcmFtZSA9IGZhbHNlOwpAQCAt
NDkyLDEwICs0NjYsOSBAQCB2b2lkIEZyYW1lTWFjOjpzdWJtaXRGb3JtKGNvbnN0IFJlc291cmNl
CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKHdpbGxSZXBsYWNlVGhpc0ZyYW1lKSB7Ci0gICAg
ICAgIGlmIChfc3VibWl0dGVkRm9ybVVSTCA9PSByZXF1ZXN0LnVybCgpKSB7CisgICAgICAgIGlm
IChkLT5tX3N1Ym1pdHRlZEZvcm1VUkwgPT0gcmVxdWVzdC51cmwoKSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBfc3VibWl0dGVkRm9ybVVSTCA9IHJlcXVlc3QudXJs
KCk7CisgICAgICAgIGQtPm1fc3VibWl0dGVkRm9ybVVSTCA9IHJlcXVlc3QudXJsKCk7CiAgICAg
fQogCiAgICAgaWYgKCFyZXF1ZXN0LmRvUG9zdCgpKSB7CkBAIC02MjksNyArNjAyLDcgQEAgdm9p
ZCBGcmFtZU1hYzo6c2V0VmlldyhGcmFtZVZpZXcgKnZpZXcpCiAgICAgLy8gT25seSBvbmUgZm9y
bSBzdWJtaXNzaW9uIGlzIGFsbG93ZWQgcGVyIHZpZXcgb2YgYSBwYXJ0LgogICAgIC8vIFNpbmNl
IHRoaXMgcGFydCBtYXkgYmUgZ2V0dGluZyByZXVzZWQgYXMgYSByZXN1bHQgb2YgYmVpbmcKICAg
ICAvLyBwdWxsZWQgZnJvbSB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLCByZXNldCB0aGlzIGZsYWcu
Ci0gICAgX3N1Ym1pdHRlZEZvcm1VUkwgPSBLVVJMKCk7CisgICAgZC0+bV9zdWJtaXR0ZWRGb3Jt
VVJMID0gS1VSTCgpOwogfQogCiB2b2lkIEZyYW1lTWFjOjpzZXRUaXRsZShjb25zdCBTdHJpbmcg
JnRpdGxlKQpAQCAtMjcwNSwxOCArMjY3OCwxNyBAQCBOU0ltYWdlICpGcmFtZU1hYzo6aW1hZ2VG
cm9tUmVjdChOU1JlY3QgCiAKIE5TSW1hZ2UgKkZyYW1lTWFjOjpzZWxlY3Rpb25JbWFnZSgpIGNv
bnN0CiB7Ci0gICAgX2RyYXdTZWxlY3Rpb25Pbmx5ID0gdHJ1ZTsgIC8vIGludm9rZSBzcGVjaWFs
IGRyYXdpbmcgbW9kZQorICAgIGQtPm1fZHJhd1NlbGVjdGlvbk9ubHkgPSB0cnVlOyAgLy8gaW52
b2tlIHNwZWNpYWwgZHJhd2luZyBtb2RlCiAgICAgTlNJbWFnZSAqcmVzdWx0ID0gaW1hZ2VGcm9t
UmVjdCh2aXNpYmxlU2VsZWN0aW9uUmVjdCgpKTsKLSAgICBfZHJhd1NlbGVjdGlvbk9ubHkgPSBm
YWxzZTsKKyAgICBkLT5tX2RyYXdTZWxlY3Rpb25Pbmx5ID0gZmFsc2U7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogTlNJbWFnZSAqRnJhbWVNYWM6OnNuYXBzaG90RHJhZ0ltYWdlKE5vZGUgKm5v
ZGUsIE5TUmVjdCAqaW1hZ2VSZWN0LCBOU1JlY3QgKmVsZW1lbnRSZWN0KSBjb25zdAogewogICAg
IFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVu
ZGVyZXIpIHsKKyAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIH0K
ICAgICAKICAgICByZW5kZXJlci0+dXBkYXRlRHJhZ1N0YXRlKHRydWUpOyAgICAvLyBtYXJrIGRy
YWdnZWQgbm9kZXMgKHNvIHRoZXkgcGljayB1cCB0aGUgcmlnaHQgQ1NTKQogICAgIGQtPm1fZG9j
LT51cGRhdGVMYXlvdXQoKTsgICAgICAgIC8vIGZvcmNlcyBzdHlsZSByZWNhbGMgLSBuZWVkZWQg
c2luY2UgY2hhbmdpbmcgdGhlIGRyYWcgc3RhdGUgbWlnaHQKQEAgLTI3MjQsMTggKzI2OTYsMTYg
QEAgTlNJbWFnZSAqRnJhbWVNYWM6OnNuYXBzaG90RHJhZ0ltYWdlKE5vZAogICAgIEludFJlY3Qg
dG9wTGV2ZWxSZWN0OwogICAgIE5TUmVjdCBwYWludGluZ1JlY3QgPSByZW5kZXJlci0+cGFpbnRp
bmdSb290UmVjdCh0b3BMZXZlbFJlY3QpOwogCi0gICAgX2VsZW1lbnRUb0RyYXcgPSBub2RlOyAg
ICAgICAgICAgICAgLy8gaW52b2tlIHNwZWNpYWwgc3ViLXRyZWUgZHJhd2luZyBtb2RlCisgICAg
ZC0+bV9lbGVtZW50VG9EcmF3ID0gbm9kZTsgICAgICAgICAgICAgIC8vIGludm9rZSBzcGVjaWFs
IHN1Yi10cmVlIGRyYXdpbmcgbW9kZQogICAgIE5TSW1hZ2UgKnJlc3VsdCA9IGltYWdlRnJvbVJl
Y3QocGFpbnRpbmdSZWN0KTsKICAgICByZW5kZXJlci0+dXBkYXRlRHJhZ1N0YXRlKGZhbHNlKTsK
ICAgICBkLT5tX2RvYy0+dXBkYXRlTGF5b3V0KCk7Ci0gICAgX2VsZW1lbnRUb0RyYXcgPSAwOwor
ICAgIGQtPm1fZWxlbWVudFRvRHJhdyA9IDA7CiAKLSAgICBpZiAoZWxlbWVudFJlY3QpIHsKKyAg
ICBpZiAoZWxlbWVudFJlY3QpCiAgICAgICAgICplbGVtZW50UmVjdCA9IHRvcExldmVsUmVjdDsK
LSAgICB9Ci0gICAgaWYgKGltYWdlUmVjdCkgeworICAgIGlmIChpbWFnZVJlY3QpCiAgICAgICAg
ICppbWFnZVJlY3QgPSBwYWludGluZ1JlY3Q7Ci0gICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKQEAgLTMzMDUsMjUgKzMyNzUsMjMgQEAgdm9pZCBGcmFtZU1hYzo6c2V0TWFya2VkVGV4dFJh
bmdlKGNvbnN0IAogICAgIEFTU0VSVCghcmFuZ2UgfHwgcmFuZ2UtPmNvbGxhcHNlZChleGNlcHRp
b24pIHx8IHJhbmdlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pLT5pc1RleHROb2RlKCkpOwog
CiAgICAgaWYgKGF0dHJpYnV0ZXMgPT0gbmlsKSB7Ci0gICAgICAgIG1fbWFya2VkVGV4dFVzZXNV
bmRlcmxpbmVzID0gZmFsc2U7Ci0gICAgICAgIG1fbWFya2VkVGV4dFVuZGVybGluZXMuY2xlYXIo
KTsKKyAgICAgICAgZC0+bV9tYXJrZWRUZXh0VXNlc1VuZGVybGluZXMgPSBmYWxzZTsKKyAgICAg
ICAgZC0+bV9tYXJrZWRUZXh0VW5kZXJsaW5lcy5jbGVhcigpOwogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIG1fbWFya2VkVGV4dFVzZXNVbmRlcmxpbmVzID0gdHJ1ZTsKLSAgICAgICAgbV9tYXJrZWRU
ZXh0VW5kZXJsaW5lcyA9IGNvbnZlcnRBdHRyaWJ1dGVzVG9VbmRlcmxpbmVzKHJhbmdlLCBhdHRy
aWJ1dGVzLCByYW5nZXMpOworICAgICAgICBkLT5tX21hcmtlZFRleHRVc2VzVW5kZXJsaW5lcyA9
IHRydWU7CisgICAgICAgIGQtPm1fbWFya2VkVGV4dFVuZGVybGluZXMgPSBjb252ZXJ0QXR0cmli
dXRlc1RvVW5kZXJsaW5lcyhyYW5nZSwgYXR0cmlidXRlcywgcmFuZ2VzKTsKICAgICB9CiAKICAg
ICBpZiAobV9tYXJrZWRUZXh0UmFuZ2UuZ2V0KCkgJiYgZG9jdW1lbnQoKSAmJiBtX21hcmtlZFRl
eHRSYW5nZS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKS0+cmVuZGVyZXIoKSkKICAgICAgICAg
bV9tYXJrZWRUZXh0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbiktPnJlbmRlcmVyKCkt
PnJlcGFpbnQoKTsKIAotICAgIGlmICggcmFuZ2UgJiYgcmFuZ2UtPmNvbGxhcHNlZChleGNlcHRp
b24pICkgeworICAgIGlmIChyYW5nZSAmJiByYW5nZS0+Y29sbGFwc2VkKGV4Y2VwdGlvbikpCiAg
ICAgICAgIG1fbWFya2VkVGV4dFJhbmdlID0gMDsKLSAgICB9IGVsc2UgeworICAgIGVsc2UKICAg
ICAgICAgbV9tYXJrZWRUZXh0UmFuZ2UgPSBjb25zdF9jYXN0PFJhbmdlICo+KHJhbmdlKTsKLSAg
ICB9CiAKLSAgICBpZiAobV9tYXJrZWRUZXh0UmFuZ2UuZ2V0KCkgJiYgZG9jdW1lbnQoKSAmJiBt
X21hcmtlZFRleHRSYW5nZS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKS0+cmVuZGVyZXIoKSkg
eworICAgIGlmIChtX21hcmtlZFRleHRSYW5nZS5nZXQoKSAmJiBkb2N1bWVudCgpICYmIG1fbWFy
a2VkVGV4dFJhbmdlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pLT5yZW5kZXJlcigpKQogICAg
ICAgICBtX21hcmtlZFRleHRSYW5nZS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKS0+cmVuZGVy
ZXIoKS0+cmVwYWludCgpOwotICAgIH0KIH0KIAogYm9vbCBGcmFtZU1hYzo6Y2FuR29CYWNrT3JG
b3J3YXJkKGludCBkaXN0YW5jZSkgY29uc3QKQEAgLTMzMzksOSArMzMwNyw4IEBAIHZvaWQgRnJh
bWVNYWM6OmRpZEZpcnN0TGF5b3V0KCkKIE5TTXV0YWJsZURpY3Rpb25hcnkgKkZyYW1lTWFjOjpk
YXNoYm9hcmRSZWdpb25zRGljdGlvbmFyeSgpCiB7CiAgICAgRG9jdW1lbnQgKmRvYyA9IGRvY3Vt
ZW50KCk7Ci0gICAgaWYgKCFkb2MpIHsKKyAgICBpZiAoIWRvYykKICAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICB9CiAKICAgICBjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0PERhc2hib2FyZFJlZ2lv
blZhbHVlPiByZWdpb25zID0gZG9jLT5kYXNoYm9hcmRSZWdpb25zKCk7CiAgICAgdW5zaWduZWQg
aSwgY291bnQgPSByZWdpb25zLmNvdW50KCk7CkluZGV4OiBicmlkZ2UvbWFjL1dlYkNvcmVGcmFt
ZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBicmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5t
bQkocmV2aXNpb24gMTMzOTMpCisrKyBicmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTI2MiwzOCArMTI2MiwzMiBAQCBzdGF0aWMgSFRNTEZvcm1FbGVt
ZW50ICpmb3JtRWxlbWVudEZyb21ECiAtIChOU1ZpZXcgKiluZXh0S2V5VmlldwogewogICAgIERv
Y3VtZW50ICpkb2MgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jKSB7CisgICAg
aWYgKCFkb2MpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQogICAgIHJldHVybiBtX2ZyYW1l
LT5uZXh0S2V5Vmlldyhkb2MtPmZvY3VzTm9kZSgpLCBLV1FTZWxlY3RpbmdOZXh0KTsKIH0KIAog
LSAoTlNWaWV3ICopcHJldmlvdXNLZXlWaWV3CiB7CiAgICAgRG9jdW1lbnQgKmRvYyA9IG1fZnJh
bWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2MpIHsKKyAgICBpZiAoIWRvYykKICAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICB9CiAgICAgcmV0dXJuIG1fZnJhbWUtPm5leHRLZXlWaWV3KGRvYy0+
Zm9jdXNOb2RlKCksIEtXUVNlbGVjdGluZ1ByZXZpb3VzKTsKIH0KIAogLSAoTlNWaWV3ICopbmV4
dEtleVZpZXdJbnNpZGVXZWJGcmFtZVZpZXdzCiB7CiAgICAgRG9jdW1lbnQgKmRvYyA9IG1fZnJh
bWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2MpIHsKKyAgICBpZiAoIWRvYykKICAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICB9Ci0gICAgCiAgICAgcmV0dXJuIG1fZnJhbWUtPm5leHRLZXlWaWV3
SW5GcmFtZUhpZXJhcmNoeShkb2MtPmZvY3VzTm9kZSgpLCBLV1FTZWxlY3RpbmdOZXh0KTsKIH0K
IAogLSAoTlNWaWV3ICopcHJldmlvdXNLZXlWaWV3SW5zaWRlV2ViRnJhbWVWaWV3cwogewogICAg
IERvY3VtZW50ICpkb2MgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jKSB7Cisg
ICAgaWYgKCFkb2MpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQotCiAgICAgcmV0dXJuIG1f
ZnJhbWUtPm5leHRLZXlWaWV3SW5GcmFtZUhpZXJhcmNoeShkb2MtPmZvY3VzTm9kZSgpLCBLV1FT
ZWxlY3RpbmdQcmV2aW91cyk7CiB9CiAKSW5kZXg6IGJyaWRnZS9tYWMvRnJhbWVNYWMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBicmlkZ2UvbWFjL0ZyYW1lTWFjLmgJKHJldmlzaW9uIDEzMzkzKQorKysgYnJp
ZGdlL21hYy9GcmFtZU1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsOSArMjMyLDYgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgYm9vbCBwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUoTW91c2VF
dmVudFdpdGhIaXRUZXN0UmVzdWx0cyAmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFzc1doZWVsRXZl
bnRUb0NoaWxkV2lkZ2V0KE5vZGUgKik7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGNsZWFyUmVj
b3JkZWRGb3JtVmFsdWVzKCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZEZvcm1WYWx1ZShjb25z
dCBEZXByZWNhdGVkU3RyaW5nICZuYW1lLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nICZ2YWx1ZSwg
SFRNTEZvcm1FbGVtZW50ICplbGVtZW50KTsKLQogICAgIE5TU3RyaW5nICpzZWFyY2hGb3JMYWJl
bHNBYm92ZUNlbGwoUmVndWxhckV4cHJlc3Npb24gKnJlZ0V4cCwgSFRNTFRhYmxlQ2VsbEVsZW1l
bnQgKmNlbGwpOwogICAgIE5TU3RyaW5nICpzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50KE5T
QXJyYXkgKmxhYmVscywgRWxlbWVudCAqZWxlbWVudCk7CiAgICAgTlNTdHJpbmcgKm1hdGNoTGFi
ZWxzQWdhaW5zdEVsZW1lbnQoTlNBcnJheSAqbGFiZWxzLCBFbGVtZW50ICplbGVtZW50KTsKSW5k
ZXg6IHBhZ2UvRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL0ZyYW1lLmgJKHJldmlzaW9uIDEz
MzkzKQorKysgcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NTMsOCArNTUzLDYgQEAg
cHVibGljOgogICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgdXNlckFnZW50KCkgY29uc3QgPSAw
OwogICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgaW5jb21pbmdSZWZlcnJlcigpIGNvbnN0ID0g
MDsKICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIG1pbWVUeXBlRm9yRmlsZU5hbWUoY29uc3Qg
RGVwcmVjYXRlZFN0cmluZyAmKSBjb25zdCA9IDA7Ci0gIHZpcnR1YWwgdm9pZCBjbGVhclJlY29y
ZGVkRm9ybVZhbHVlcygpID0gMDsKLSAgdmlydHVhbCB2b2lkIHJlY29yZEZvcm1WYWx1ZShjb25z
dCBEZXByZWNhdGVkU3RyaW5nICZuYW1lLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nICZ2YWx1ZSwg
SFRNTEZvcm1FbGVtZW50ICplbGVtZW50KSA9IDA7CiAgIHZpcnR1YWwgS0pTOjpCaW5kaW5nczo6
SW5zdGFuY2UgKmdldEVtYmVkSW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KikgPSAwOwogICB2aXJ0
dWFsIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpnZXRPYmplY3RJbnN0YW5jZUZvcldpZGdldChX
aWRnZXQqKSA9IDA7CiAgIHZpcnR1YWwgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKmdldEFwcGxl
dEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCopID0gMDsKQEAgLTc2NCw2ICs3NjIsOSBAQCBwcml2
YXRlOgogICAvLyBDdXJyZW50bHksIGFsbCB0aGlzIGRvZXMgaXMgY2xlYXIgdGhlICJkb24ndCBz
dWJtaXQgZm9ybSB0d2ljZSIgZGF0YSBtZW1iZXIuCiAgIHZvaWQgcHJlcGFyZUZvclVzZXJBY3Rp
b24oKTsKICAgTm9kZSAqbW91c2VQcmVzc05vZGUoKTsKKyAgCisgIHZvaWQgY2xlYXJSZWNvcmRl
ZEZvcm1WYWx1ZXMoKTsKKyAgdm9pZCByZWNvcmRGb3JtVmFsdWUoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4pOwogCiAg
IGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0OwogICBib29sIGlzTG9hZGluZ01haW5SZXNvdXJjZSgp
IGNvbnN0OwpAQCAtODI4LDE0ICs4MjksNiBAQCBwdWJsaWM6CiAgcHJpdmF0ZToKICAgZnJpZW5k
IGNsYXNzIEZyYW1lUHJpdmF0ZTsKICAgRnJhbWVQcml2YXRlKiBkOwotICAgICAgCi0gIG11dGFi
bGUgUmVmUHRyPE5vZGU+IF9lbGVtZW50VG9EcmF3OwotICBtdXRhYmxlIGJvb2wgX2RyYXdTZWxl
Y3Rpb25Pbmx5OwotICBLVVJMIF9zdWJtaXR0ZWRGb3JtVVJMOwotICBib29sIG1fbWFya2VkVGV4
dFVzZXNVbmRlcmxpbmVzOwotICBEZXByZWNhdGVkVmFsdWVMaXN0PE1hcmtlZFRleHRVbmRlcmxp
bmU+IG1fbWFya2VkVGV4dFVuZGVybGluZXM7Ci0gIGJvb2wgbV93aW5kb3dIYXNGb2N1czsKLSAg
aW50IGZyYW1lQ291bnQ7CiB9OwogCiB9CkluZGV4OiBwYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBwYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gMTMzOTMpCisrKyBwYWdlL0ZyYW1lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQ2LDEwICsxNDYsNiBAQCBzdGF0aWMgaW5saW5lIEZyYW1lKiBw
YXJlbnRGcm9tT3duZXJSZW5kCiAKIEZyYW1lOjpGcmFtZShQYWdlKiBwYWdlLCBSZW5kZXJQYXJ0
KiBvd25lclJlbmRlcmVyKSAKICAgICA6IGQobmV3IEZyYW1lUHJpdmF0ZShwYWdlLCBwYXJlbnRG
cm9tT3duZXJSZW5kZXJlcihvd25lclJlbmRlcmVyKSwgdGhpcywgb3duZXJSZW5kZXJlcikpCi0g
ICAgLCBfZHJhd1NlbGVjdGlvbk9ubHkoZmFsc2UpCi0gICAgLCBtX21hcmtlZFRleHRVc2VzVW5k
ZXJsaW5lcyhmYWxzZSkKLSAgICAsIG1fd2luZG93SGFzRm9jdXMoZmFsc2UpCi0gICAgLCBmcmFt
ZUNvdW50KDApCiB7CiAgICAgQXRvbWljU3RyaW5nOjppbml0KCk7CiAgICAgQ2FjaGU6OmluaXQo
KTsKQEAgLTE0NjUsNiArMTQ2MSwxOCBAQCBGcmFtZSogRnJhbWU6OmxvYWRTdWJmcmFtZShSZW5k
ZXJQYXJ0KiByCiAgICAgcmV0dXJuIGZyYW1lOwogfQogCit2b2lkIEZyYW1lOjpjbGVhclJlY29y
ZGVkRm9ybVZhbHVlcygpCit7CisgICAgZC0+bV9mb3JtQWJvdXRUb0JlU3VibWl0dGVkID0gMDsK
KyAgICBkLT5tX2Zvcm1WYWx1ZXNBYm91dFRvQmVTdWJtaXR0ZWQuY2xlYXIoKTsKK30KKwordm9p
ZCBGcmFtZTo6cmVjb3JkRm9ybVZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSwgUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgZC0+
bV9mb3JtQWJvdXRUb0JlU3VibWl0dGVkID0gZWxlbWVudDsKKyAgICBkLT5tX2Zvcm1WYWx1ZXNB
Ym91dFRvQmVTdWJtaXR0ZWQuc2V0KG5hbWUsIHZhbHVlKTsKK30KKwogdm9pZCBGcmFtZTo6c3Vi
bWl0Rm9ybUFnYWluKCkKIHsKICAgICBGcmFtZVByaXZhdGU6OlN1Ym1pdEZvcm0qIGZvcm0gPSBk
LT5tX3N1Ym1pdEZvcm07CkBAIC0xNTcwLDcgKzE1NzgsNiBAQCB2b2lkIEZyYW1lOjpzdWJtaXRG
b3JtKGNvbnN0IGNoYXIgKmFjdGlvCiAgIH0KIH0KIAotCiB2b2lkIEZyYW1lOjpwYXJlbnRDb21w
bGV0ZWQoKQogewogICAgIGlmIChkLT5tX3NjaGVkdWxlZFJlZGlyZWN0aW9uICE9IG5vUmVkaXJl
Y3Rpb25TY2hlZHVsZWQgJiYgIWQtPm1fcmVkaXJlY3Rpb25UaW1lci5pc0FjdGl2ZSgpKQpAQCAt
MjU2OSw5ICsyNTc2LDggQEAgYm9vbCBGcmFtZTo6b3BlblVSTChjb25zdCBLVVJMICZVUkwpCiAK
IHZvaWQgRnJhbWU6OmRpZE5vdE9wZW5VUkwoY29uc3QgS1VSTCAmVVJMKQogewotICAgIGlmIChf
c3VibWl0dGVkRm9ybVVSTCA9PSBVUkwpIHsKLSAgICAgICAgX3N1Ym1pdHRlZEZvcm1VUkwgPSBL
VVJMKCk7Ci0gICAgfQorICAgIGlmIChkLT5tX3N1Ym1pdHRlZEZvcm1VUkwgPT0gVVJMKQorICAg
ICAgICBkLT5tX3N1Ym1pdHRlZEZvcm1VUkwgPSBLVVJMKCk7CiB9CiAKIC8vIFNjYW5zIGxvZ2lj
YWxseSBmb3J3YXJkIGZyb20gInN0YXJ0IiwgaW5jbHVkaW5nIGFueSBjaGlsZCBmcmFtZXMKQEAg
LTI1NzksMTcgKzI1ODUsMTQgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCAqc2NhbkZvckZvcm0o
Tm9kZQogewogICAgIE5vZGUgKm47CiAgICAgZm9yIChuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2
ZXJzZU5leHROb2RlKCkpIHsKLSAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoZm9ybVRhZykpIHsK
KyAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoZm9ybVRhZykpCiAgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50ICo+KG4pOwotICAgICAgICB9IGVsc2UgaWYgKG4t
PmlzSFRNTEVsZW1lbnQoKQotICAgICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50ICo+KG4pLT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SFRNTEdlbmVyaWNGb3JtRWxlbWVudCAqPihuKS0+Zm9ybSgpOwotICAg
ICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoZnJhbWVUYWcpIHx8IG4tPmhhc1RhZ05hbWUo
aWZyYW1lVGFnKSkgeworICAgICAgICBlbHNlIGlmIChuLT5pc0hUTUxFbGVtZW50KCkgJiYgc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihuKS0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50Kj4obiktPmZv
cm0oKTsKKyAgICAgICAgZWxzZSBpZiAobi0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwgbi0+aGFz
VGFnTmFtZShpZnJhbWVUYWcpKSB7CiAgICAgICAgICAgICBOb2RlICpjaGlsZERvYyA9IHN0YXRp
Y19jYXN0PEhUTUxGcmFtZUVsZW1lbnQgKj4obiktPmNvbnRlbnREb2N1bWVudCgpOwotICAgICAg
ICAgICAgSFRNTEZvcm1FbGVtZW50ICpmcmFtZVJlc3VsdCA9IHNjYW5Gb3JGb3JtKGNoaWxkRG9j
KTsKLSAgICAgICAgICAgIGlmIChmcmFtZVJlc3VsdCkgeworICAgICAgICAgICAgaWYgKEhUTUxG
b3JtRWxlbWVudCAqZnJhbWVSZXN1bHQgPSBzY2FuRm9yRm9ybShjaGlsZERvYykpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZyYW1lUmVzdWx0OwotICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQogICAgIHJldHVybiAwOwpAQCAtMjcyNyw5ICsyNzMwLDkgQEAgdm9pZCBGcmFtZTo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0KiBwLCBjbwogICAgICAgICBmaWxsV2l0aFJlZCA9IGZhbHNlOyAv
LyBTdWJmcmFtZSwgZG9uJ3QgZmlsbCB3aXRoIHJlZC4KICAgICBlbHNlIGlmICh2aWV3KCkgJiYg
dmlldygpLT5pc1RyYW5zcGFyZW50KCkpCiAgICAgICAgIGZpbGxXaXRoUmVkID0gZmFsc2U7IC8v
IFRyYW5zcGFyZW50LCBkb24ndCBmaWxsIHdpdGggcmVkLgotICAgIGVsc2UgaWYgKF9kcmF3U2Vs
ZWN0aW9uT25seSkKKyAgICBlbHNlIGlmIChkLT5tX2RyYXdTZWxlY3Rpb25Pbmx5KQogICAgICAg
ICBmaWxsV2l0aFJlZCA9IGZhbHNlOyAvLyBTZWxlY3Rpb25zIGFyZSB0cmFuc3BhcmVudCwgZG9u
J3QgZmlsbCB3aXRoIHJlZC4KLSAgICBlbHNlIGlmIChfZWxlbWVudFRvRHJhdykKKyAgICBlbHNl
IGlmIChkLT5tX2VsZW1lbnRUb0RyYXcpCiAgICAgICAgIGZpbGxXaXRoUmVkID0gZmFsc2U7IC8v
IEVsZW1lbnQgaW1hZ2VzIGFyZSB0cmFuc3BhcmVudCwgZG9uJ3QgZmlsbCB3aXRoIHJlZC4KICAg
ICBlbHNlCiAgICAgICAgIGZpbGxXaXRoUmVkID0gdHJ1ZTsKQEAgLTI3MzksOSArMjc0Miw5IEBA
IHZvaWQgRnJhbWU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogcCwgY28KICNlbmRpZgogICAgIAog
ICAgIGlmIChyZW5kZXJlcigpKSB7Ci0gICAgICAgIC8vIF9lbGVtZW50VG9EcmF3IGlzIHVzZWQg
dG8gZHJhdyBvbmx5IG9uZSBlbGVtZW50Ci0gICAgICAgIFJlbmRlck9iamVjdCAqZWx0UmVuZGVy
ZXIgPSBfZWxlbWVudFRvRHJhdyA/IF9lbGVtZW50VG9EcmF3LT5yZW5kZXJlcigpIDogMDsKLSAg
ICAgICAgcmVuZGVyZXIoKS0+bGF5ZXIoKS0+cGFpbnQocCwgcmVjdCwgX2RyYXdTZWxlY3Rpb25P
bmx5LCBlbHRSZW5kZXJlcik7CisgICAgICAgIC8vIGQtPm1fZWxlbWVudFRvRHJhdyBpcyB1c2Vk
IHRvIGRyYXcgb25seSBvbmUgZWxlbWVudAorICAgICAgICBSZW5kZXJPYmplY3QgKmVsdFJlbmRl
cmVyID0gZC0+bV9lbGVtZW50VG9EcmF3ID8gZC0+bV9lbGVtZW50VG9EcmF3LT5yZW5kZXJlcigp
IDogMDsKKyAgICAgICAgcmVuZGVyZXIoKS0+bGF5ZXIoKS0+cGFpbnQocCwgcmVjdCwgZC0+bV9k
cmF3U2VsZWN0aW9uT25seSwgZWx0UmVuZGVyZXIpOwogCiAjaWYgX19BUFBMRV9fCiAgICAgICAg
IC8vIFJlZ2lvbnMgbWF5IGhhdmUgY2hhbmdlZCBhcyBhIHJlc3VsdCBvZiB0aGUgdmlzaWJpbGl0
eS96LWluZGV4IG9mIGVsZW1lbnQgY2hhbmdpbmcuCkBAIC0zMjE1LDkgKzMyMTgsOSBAQCB2b2lk
IEZyYW1lOjpzZXREaXNwbGF5c1dpdGhGb2N1c0F0dHJpYnV0CiAKIHZvaWQgRnJhbWU6OnNldFdp
bmRvd0hhc0ZvY3VzKGJvb2wgZmxhZykKIHsKLSAgICBpZiAobV93aW5kb3dIYXNGb2N1cyA9PSBm
bGFnKQorICAgIGlmIChkLT5tX3dpbmRvd0hhc0ZvY3VzID09IGZsYWcpCiAgICAgICAgIHJldHVy
bjsKLSAgICBtX3dpbmRvd0hhc0ZvY3VzID0gZmxhZzsKKyAgICBkLT5tX3dpbmRvd0hhc0ZvY3Vz
ID0gZmxhZzsKICAgICAKICAgICBpZiAoRG9jdW1lbnQgKmRvYyA9IGRvY3VtZW50KCkpCiAgICAg
ICAgIGRvYy0+ZGlzcGF0Y2hXaW5kb3dFdmVudChmbGFnID8gZm9jdXNFdmVudCA6IGJsdXJFdmVu
dCwgZmFsc2UsIGZhbHNlKTsKQEAgLTMyMzcsMTIgKzMyNDAsMTIgQEAgUUNoYXIgRnJhbWU6OmJh
Y2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKQogCiBib29sIEZyYW1lOjptYXJrZWRUZXh0VXNlc1Vu
ZGVybGluZXMoKSBjb25zdAogewotICAgIHJldHVybiBtX21hcmtlZFRleHRVc2VzVW5kZXJsaW5l
czsKKyAgICByZXR1cm4gZC0+bV9tYXJrZWRUZXh0VXNlc1VuZGVybGluZXM7CiB9CiAKIERlcHJl
Y2F0ZWRWYWx1ZUxpc3Q8TWFya2VkVGV4dFVuZGVybGluZT4gRnJhbWU6Om1hcmtlZFRleHRVbmRl
cmxpbmVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tYXJrZWRUZXh0VW5kZXJsaW5lczsKKyAg
ICByZXR1cm4gZC0+bV9tYXJrZWRUZXh0VW5kZXJsaW5lczsKIH0KIAogdW5zaWduZWQgRnJhbWU6
OmhpZ2hsaWdodEFsbE1hdGNoZXNGb3JTdHJpbmcoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmdGFy
Z2V0LCBib29sIGNhc2VGbGFnKQpAQCAtMzI3Myw3ICszMjc2LDcgQEAgdm9pZCBGcmFtZTo6cHJl
cGFyZUZvclVzZXJBY3Rpb24oKQogewogICAgIC8vIFJlc2V0IHRoZSBtdWx0aXBsZSBmb3JtIHN1
Ym1pc3Npb24gcHJvdGVjdGlvbiBjb2RlLgogICAgIC8vIFdlJ2xsIGxldCB5b3Ugc3VibWl0IHRo
ZSBzYW1lIGZvcm0gdHdpY2UgaWYgeW91IGRvIHR3byBzZXBhcmF0ZSB1c2VyIGFjdGlvbnMuCi0g
ICAgX3N1Ym1pdHRlZEZvcm1VUkwgPSBLVVJMKCk7CisgICAgZC0+bV9zdWJtaXR0ZWRGb3JtVVJM
ID0gS1VSTCgpOwogfQogCiBOb2RlICpGcmFtZTo6bW91c2VQcmVzc05vZGUoKQpJbmRleDogcGFn
ZS9GcmFtZVByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL0ZyYW1lUHJpdmF0ZS5oCShyZXZp
c2lvbiAxMzM5MykKKysrIHBhZ2UvRnJhbWVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2
LDYgKzk2LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV91c2VyU3R5
bGVTaGVldExvYWRlcigwKQogICAgICAgICAgICAgLCBtX2F1dG9zY3JvbGxUaW1lcih0aGlzRnJh
bWUsICZGcmFtZTo6YXV0b3Njcm9sbFRpbWVyRmlyZWQpCiAgICAgICAgICAgICAsIG1fYXV0b3Nj
cm9sbExheWVyKDApCisgICAgICAgICAgICAsIG1fZHJhd1NlbGVjdGlvbk9ubHkoZmFsc2UpCisg
ICAgICAgICAgICAsIG1fbWFya2VkVGV4dFVzZXNVbmRlcmxpbmVzKGZhbHNlKQorICAgICAgICAg
ICAgLCBtX3dpbmRvd0hhc0ZvY3VzKGZhbHNlKQorICAgICAgICAgICAgLCBmcmFtZUNvdW50KDAp
CiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0yMDcsOCArMjExLDIwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIFRpbWVyPEZyYW1lPiBtX2F1dG9zY3JvbGxUaW1l
cjsKICAgICAgICAgUmVuZGVyTGF5ZXIqIG1fYXV0b3Njcm9sbExheWVyOworICAgICAgICAKKyAg
ICAgICAgUmVmUHRyPE5vZGU+IG1fZWxlbWVudFRvRHJhdzsKKyAgICAgICAgYm9vbCBtX2RyYXdT
ZWxlY3Rpb25Pbmx5OworICAgICAgICAKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4g
bV9mb3JtVmFsdWVzQWJvdXRUb0JlU3VibWl0dGVkOworICAgICAgICBSZWZQdHI8RWxlbWVudD4g
bV9mb3JtQWJvdXRUb0JlU3VibWl0dGVkOworICAgICAgICBLVVJMIG1fc3VibWl0dGVkRm9ybVVS
TDsKKyAgICAgICAgCisgICAgICAgIGJvb2wgbV9tYXJrZWRUZXh0VXNlc1VuZGVybGluZXM7Cisg
ICAgICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8TWFya2VkVGV4dFVuZGVybGluZT4gbV9tYXJrZWRU
ZXh0VW5kZXJsaW5lczsKKyAgICAgICAgYm9vbCBtX3dpbmRvd0hhc0ZvY3VzOworICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgZnJhbWVDb3VudDsKICAgICB9OwotCiB9CiAKICNlbmRpZgo=
</data>
<flag name="review"
          id="1888"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>