<?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>162608</bug_id>
          
          <creation_ts>2016-09-27 06:08:39 -0700</creation_ts>
          <short_desc>[GTK] Update WOFF2 decoder</short_desc>
          <delta_ts>2016-09-28 08:44:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugzilla.mozilla.org/show_bug.cgi?id=1305944</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=162678</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>162668</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Khaled Hosny">dr.khaled.hosny</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fred.wang</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1233831</commentid>
    <comment_count>0</comment_count>
    <who name="Khaled Hosny">dr.khaled.hosny</who>
    <bug_when>2016-09-27 06:08:39 -0700</bug_when>
    <thetext>The WOFF2 reference implementation have been updated to match the latest version of the spec in handling totalSfntSize (See https://github.com/google/woff2/pull/48). We need to update the code and use the new API otherwise some valid WOFF2 fonts will not be decoded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233855</commentid>
    <comment_count>1</comment_count>
      <attachid>289942</attachid>
    <who name="Khaled Hosny">dr.khaled.hosny</who>
    <bug_when>2016-09-27 08:08:50 -0700</bug_when>
    <thetext>Created attachment 289942
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233856</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-27 08:11:26 -0700</bug_when>
    <thetext>Attachment 289942 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/WOFFFileFormat.cpp:117:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 2 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233868</commentid>
    <comment_count>3</comment_count>
      <attachid>289945</attachid>
    <who name="Khaled Hosny">dr.khaled.hosny</who>
    <bug_when>2016-09-27 08:35:54 -0700</bug_when>
    <thetext>Created attachment 289945
Patch, v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233871</commentid>
    <comment_count>4</comment_count>
      <attachid>289945</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-09-27 08:45:37 -0700</bug_when>
    <thetext>Comment on attachment 289945
Patch, v2

View in context: https://bugs.webkit.org/attachment.cgi?id=289945&amp;action=review

&gt; Source/WebCore/platform/graphics/WOFFFileFormat.cpp:103
&gt; +        return Write(data, m_size, n);

I think this should be removed.

&gt; Source/WebCore/platform/graphics/WOFFFileFormat.cpp:104
&gt; +        if (!m_vector.tryReserveCapacity(m_size + n))

Is it needed? It seems that WTF::Vector::append already calls expandCapacity.

&gt; Source/WebCore/platform/graphics/WOFFFileFormat.cpp:113
&gt; +        if (!m_vector.tryReserveCapacity(m_size + n))

Same here.

&gt; Source/WebCore/platform/graphics/WOFFFileFormat.cpp:116
&gt; +        m_vector.insert(offset, static_cast&lt;const char*&gt;(data), n);

I wonder if it&apos;s possible to copy the data in one step.

&gt; Source/WebCore/platform/graphics/WOFFFileFormat.cpp:128
&gt; +    size_t m_size;

Do you really need this member? It seems that you can just use m_vector::size()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233917</commentid>
    <comment_count>5</comment_count>
      <attachid>289945</attachid>
    <who name="Khaled Hosny">dr.khaled.hosny</who>
    <bug_when>2016-09-27 10:01:07 -0700</bug_when>
    <thetext>Comment on attachment 289945
Patch, v2

View in context: https://bugs.webkit.org/attachment.cgi?id=289945&amp;action=review

&gt;&gt; Source/WebCore/platform/graphics/WOFFFileFormat.cpp:103
&gt;&gt; +        return Write(data, m_size, n);
&gt; 
&gt; I think this should be removed.

Good catch, I think it was a left over from previous trials.

&gt;&gt; Source/WebCore/platform/graphics/WOFFFileFormat.cpp:104
&gt;&gt; +        if (!m_vector.tryReserveCapacity(m_size + n))
&gt; 
&gt; Is it needed? It seems that WTF::Vector::append already calls expandCapacity.

I’m not sure what is going on, but if I don’t do that decoding will always fail.

&gt;&gt; Source/WebCore/platform/graphics/WOFFFileFormat.cpp:116
&gt;&gt; +        m_vector.insert(offset, static_cast&lt;const char*&gt;(data), n);
&gt; 
&gt; I wonder if it&apos;s possible to copy the data in one step.

I’m not sure if Vector has an API to do that, I didn’t seem to find any.

&gt;&gt; Source/WebCore/platform/graphics/WOFFFileFormat.cpp:128
&gt;&gt; +    size_t m_size;
&gt; 
&gt; Do you really need this member? It seems that you can just use m_vector::size()

I removed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233921</commentid>
    <comment_count>6</comment_count>
      <attachid>289962</attachid>
    <who name="Khaled Hosny">dr.khaled.hosny</who>
    <bug_when>2016-09-27 10:02:09 -0700</bug_when>
    <thetext>Created attachment 289962
Patch, v3

This should address the comments on the previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234294</commentid>
    <comment_count>7</comment_count>
      <attachid>289962</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-09-28 01:09:32 -0700</bug_when>
    <thetext>Comment on attachment 289962
Patch, v3

View in context: https://bugs.webkit.org/attachment.cgi?id=289962&amp;action=review

r=me on the condition that Frederic says it&apos;s good.

&gt; Source/WebCore/platform/graphics/WOFFFileFormat.cpp:100
&gt; +    bool Write(const void *data, size_t n)

void* data, not void *data

Is this a virtual method? If so you need to mark it override. If not, it should be named write with a lowercase W, since WebKit methods are camelCase.

&gt; Source/WebCore/platform/graphics/WOFFFileFormat.cpp:108
&gt; +    bool Write(const void *data, size_t offset, size_t n)

Ditto

&gt; Source/WebCore/platform/graphics/WOFFFileFormat.cpp:125
&gt; +    Vector&lt;char&gt;&amp; m_vector;

Optional: I think it would be safer to keep a plain Vector&lt;char&gt; here instead of a reference, and sink it to WOFF2VectorOut by changing the constructor to take a Vector&lt;char&gt;&amp;&amp; instead of a Vector&lt;char&gt;. Then you will need to use WTFMove to pass the vector to the constructor. The advantage of doing it that way is the WOFF2VectorOut becomes harder to misuse (more robust to future modification); currently it breaks badly if the passed in vector goes out of scope before the WOFF2VectorOut does. But this is optional; the current way is OK too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234299</commentid>
    <comment_count>8</comment_count>
      <attachid>289962</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-09-28 01:34:23 -0700</bug_when>
    <thetext>Comment on attachment 289962
Patch, v3

View in context: https://bugs.webkit.org/attachment.cgi?id=289962&amp;action=review

Yes, this looks good to me with Michael&apos;s comments addressed.

&gt;&gt; Source/WebCore/platform/graphics/WOFFFileFormat.cpp:100
&gt;&gt; +    bool Write(const void *data, size_t n)
&gt; 
&gt; void* data, not void *data
&gt; 
&gt; Is this a virtual method? If so you need to mark it override. If not, it should be named write with a lowercase W, since WebKit methods are camelCase.

Yes, they are pure virtual and should indeed be marked override.
https://github.com/google/woff2/blob/4e698b8c6c5e070d53c340db9ddf160e21070ede/src/woff2_out.h#L59</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234302</commentid>
    <comment_count>9</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-09-28 02:10:34 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 289962 [details]
&gt; Patch, v3
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=289962&amp;action=review
&gt; 
&gt; Yes, this looks good to me with Michael&apos;s comments addressed.

We should also import

http://test.csswg.org/harness/test/woff2_dev/single/header-totalsfntsize-001/

as the patch makes this test passes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234310</commentid>
    <comment_count>10</comment_count>
      <attachid>289962</attachid>
    <who name="Khaled Hosny">dr.khaled.hosny</who>
    <bug_when>2016-09-28 02:44:05 -0700</bug_when>
    <thetext>Comment on attachment 289962
Patch, v3

View in context: https://bugs.webkit.org/attachment.cgi?id=289962&amp;action=review

&gt;&gt; Source/WebCore/platform/graphics/WOFFFileFormat.cpp:125
&gt;&gt; +    Vector&lt;char&gt;&amp; m_vector;
&gt; 
&gt; Optional: I think it would be safer to keep a plain Vector&lt;char&gt; here instead of a reference, and sink it to WOFF2VectorOut by changing the constructor to take a Vector&lt;char&gt;&amp;&amp; instead of a Vector&lt;char&gt;. Then you will need to use WTFMove to pass the vector to the constructor. The advantage of doing it that way is the WOFF2VectorOut becomes harder to misuse (more robust to future modification); currently it breaks badly if the passed in vector goes out of scope before the WOFF2VectorOut does. But this is optional; the current way is OK too.

I tried doing that, but then nothing was written to the `sfnt` vector, not sure if I’m doing something wrong:
diff --git a/Source/WebCore/platform/graphics/WOFFFileFormat.cpp b/Source/WebCore/platform/graphics/WOFFFileFormat.cpp
index c2323cf..60eb7df 100644
--- a/Source/WebCore/platform/graphics/WOFFFileFormat.cpp
+++ b/Source/WebCore/platform/graphics/WOFFFileFormat.cpp
@@ -93,8 +93,8 @@ bool isWOFF(SharedBuffer&amp; buffer)
 #if USE(WOFF2)
 class WOFF2VectorOut : public woff2::WOFF2Out {
 public:
-    WOFF2VectorOut(Vector&lt;char&gt;&amp; vector)
-        : m_vector(vector)
+    WOFF2VectorOut(Vector&lt;char&gt;&amp;&amp; vector)
+        : m_vector(WTFMove(vector))
     { }
 
     bool Write(const void* data, size_t n) override
@@ -122,7 +122,7 @@ public:
     }
 
 private:
-    Vector&lt;char&gt;&amp; m_vector;
+    Vector&lt;char&gt; m_vector;
 };
 #endif
 
@@ -148,7 +148,7 @@ bool convertWOFFToSfnt(SharedBuffer&amp; woff, Vector&lt;char&gt;&amp; sfnt)
         if (!sfnt.tryReserveCapacity(sfntSize))
             return false;
 
-        WOFF2VectorOut out(sfnt);
+        WOFF2VectorOut out(WTFMove(sfnt));
         return woff2::ConvertWOFF2ToTTF(woffData, woffSize, &amp;out);
     }
 #endif</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234311</commentid>
    <comment_count>11</comment_count>
      <attachid>290070</attachid>
    <who name="Khaled Hosny">dr.khaled.hosny</who>
    <bug_when>2016-09-28 02:46:04 -0700</bug_when>
    <thetext>Created attachment 290070
Patch, v4

Updated the patch to address the style comments and add a new test based on the one in WOFF2 test suite.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234314</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-09-28 03:15:02 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; I tried doing that, but then nothing was written to the `sfnt` vector, not
&gt; sure if I’m doing something wrong:

No, I simply missed that sfnt was a parameter passed by reference and needs to be kept valid, so my suggestion was wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234322</commentid>
    <comment_count>13</comment_count>
      <attachid>290072</attachid>
    <who name="Khaled Hosny">dr.khaled.hosny</who>
    <bug_when>2016-09-28 03:37:37 -0700</bug_when>
    <thetext>Created attachment 290072
Patch, v5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234342</commentid>
    <comment_count>14</comment_count>
      <attachid>290072</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-28 05:32:15 -0700</bug_when>
    <thetext>Comment on attachment 290072
Patch, v5

Rejecting attachment 290072 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 290072, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in LayoutTests/ChangeLog contains OOPS!.

Full output: http://webkit-queues.webkit.org/results/2161227</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234350</commentid>
    <comment_count>15</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-09-28 05:48:46 -0700</bug_when>
    <thetext>Committed r206511: &lt;http://trac.webkit.org/changeset/206511&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289942</attachid>
            <date>2016-09-27 08:08:50 -0700</date>
            <delta_ts>2016-09-27 08:35:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-GTK-Update-woff2-decoder.patch</filename>
            <type>text/plain</type>
            <size>85635</size>
            <attacher name="Khaled Hosny">dr.khaled.hosny</attacher>
            
              <data encoding="base64">RnJvbSA4ZGZmMTRiZDEzMWM3OWMyYjAwMjljNTgxYTcyOGFjNmI4YjBmMmE3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLaGFsZWQgSG9zbnkgPGtoYWxlZGhvc255QGVnbHVnLm9yZz4K
RGF0ZTogVHVlLCAyNyBTZXAgMjAxNiAxNzowMToyMyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFtH
VEtdIFVwZGF0ZSB3b2ZmMiBkZWNvZGVyCgotLS0KIFNvdXJjZS9UaGlyZFBhcnR5L0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyOSArCiBTb3VyY2UvVGhpcmRQYXJ0eS93b2Zm
Mi9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICB8ICAgIDEgKwogU291cmNlL1RoaXJkUGFydHkv
d29mZjIvUkVBRE1FLndlYmtpdCAgICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvVGhpcmRQ
YXJ0eS93b2ZmMi9zcmMvZmlsZS5oICAgICAgICAgICAgICAgICB8ICAgMTYgKy0KIFNvdXJjZS9U
aGlyZFBhcnR5L3dvZmYyL3NyYy9mb250LmNjICAgICAgICAgICAgICAgIHwgICAyMyArLQogU291
cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL2ZvbnQuaCAgICAgICAgICAgICAgICAgfCAgICAxICsK
IFNvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9nbHlwaC5jYyAgICAgICAgICAgICAgIHwgICAg
NiArLQogU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3N0b3JlX2J5dGVzLmggICAgICAgICAg
fCAgICAzICstCiBTb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvdHJhbnNmb3JtLmNjICAgICAg
ICAgICB8ICAgIDIgKy0KIFNvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9jb21tb24u
Y2MgICAgICAgIHwgICAxMyArLQogU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2Nv
bXByZXNzLmNjICAgICAgfCAgICAyICstCiBTb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29m
ZjJfZGVjLmNjICAgICAgICAgICB8IDEwNDEgKysrKysrKysrKy0tLS0tLS0tLS0KIFNvdXJjZS9U
aGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9kZWMuaCAgICAgICAgICAgIHwgICAgOCArCiBTb3Vy
Y2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfZGVjb21wcmVzcy5jYyAgICB8ICAgMzAgKy0K
IFNvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9lbmMuY2MgICAgICAgICAgIHwgICA0
NCArLQogU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX291dC5jYyAgICAgICAgICAg
fCAgIDczICsrCiBTb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmggICAgICAg
ICAgICB8ICAxMTQgKysrCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgMTUgKwogLi4uL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZp
bGVGb3JtYXQuY3BwICAgfCAgIDQyICstCiAxOSBmaWxlcyBjaGFuZ2VkLCA4NDkgaW5zZXJ0aW9u
cygrKSwgNjE2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBh
cnR5L3dvZmYyL3NyYy93b2ZmMl9vdXQuY2MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhp
cmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9DaGFuZ2VMb2cKaW5kZXggZWVmOGE1
Yy4uMTU5M2Q1YiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE2LTA5LTI3
ICBLaGFsZWQgSG9zbnkgIDxraGFsZWRob3NueUBlZ2x1Zy5vcmc+CisKKyAgICAgICAgVXBkYXRl
IHdvZmYyIHRvIGxhdGVzdCByZXZpc2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiB3b2ZmMi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3b2Zm
Mi9SRUFETUUud2Via2l0OgorICAgICAgICAqIHdvZmYyL3NyYy9maWxlLmg6CisgICAgICAgICh3
b2ZmMjo6R2V0RmlsZUNvbnRlbnQpOgorICAgICAgICAod29mZjI6OlNldEZpbGVDb250ZW50cyk6
CisgICAgICAgICogd29mZjIvc3JjL2ZvbnQuY2M6CisgICAgICAgICogd29mZjIvc3JjL2ZvbnQu
aDoKKyAgICAgICAgKiB3b2ZmMi9zcmMvZ2x5cGguY2M6CisgICAgICAgICogd29mZjIvc3JjL3N0
b3JlX2J5dGVzLmg6CisgICAgICAgICh3b2ZmMjo6U3RvcmUxNik6CisgICAgICAgICogd29mZjIv
c3JjL3RyYW5zZm9ybS5jYzoKKyAgICAgICAgKiB3b2ZmMi9zcmMvd29mZjJfY29tbW9uLmNjOgor
ICAgICAgICAqIHdvZmYyL3NyYy93b2ZmMl9jb21wcmVzcy5jYzoKKyAgICAgICAgKiB3b2ZmMi9z
cmMvd29mZjJfZGVjLmNjOgorICAgICAgICAqIHdvZmYyL3NyYy93b2ZmMl9kZWMuaDoKKyAgICAg
ICAgKiB3b2ZmMi9zcmMvd29mZjJfZGVjb21wcmVzcy5jYzoKKyAgICAgICAgKiB3b2ZmMi9zcmMv
d29mZjJfZW5jLmNjOgorICAgICAgICAqIHdvZmYyL3NyYy93b2ZmMl9vdXQuY2M6IEFkZGVkLgor
ICAgICAgICAqIHdvZmYyL3NyYy93b2ZmMl9vdXQuaDogQWRkZWQuCisgICAgICAgICh3b2ZmMjo6
V09GRjJPdXQ6On5XT0ZGMk91dCk6CisgICAgICAgICh3b2ZmMjo6V09GRjJTdHJpbmdPdXQ6Ok1h
eFNpemUpOgorCiAyMDE2LTA5LTI3ICBLb25zdGFudGluIFRva2FyZXYgIDxhbm51bGVuQHlhbmRl
eC5ydT4gYW5kIFZpdGFsaXkgU2xvYm9kaW4gIDx2aXRhbGl5LnNsb2JvZGluQGdtYWlsLmNvbT4K
IAogICAgICAgICBGaXhlZCBjb21waWxhdGlvbiBvZiBXT0ZGMiBvbiBXaW5kb3dzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9UaGly
ZFBhcnR5L3dvZmYyL0NNYWtlTGlzdHMudHh0CmluZGV4IGFiNDgxNDguLjMwZjA0OGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L3dvZmYyL0NNYWtlTGlzdHMudHh0CkBAIC05LDYgKzksNyBAQCBzZXQoV09G
RjJfU09VUkNFUwogICAke1dPRkYyX0RJUn0vc3JjL3ZhcmlhYmxlX2xlbmd0aC5jYwogICAke1dP
RkYyX0RJUn0vc3JjL3dvZmYyX2NvbW1vbi5jYwogICAke1dPRkYyX0RJUn0vc3JjL3dvZmYyX2Rl
Yy5jYworICAke1dPRkYyX0RJUn0vc3JjL3dvZmYyX291dC5jYwogKQogCiBpbmNsdWRlX2RpcmVj
dG9yaWVzKCIke1RISVJEUEFSVFlfRElSfS9icm90bGkvZGVjIikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L3dvZmYyL1JFQURNRS53ZWJraXQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2Zm
Mi9SRUFETUUud2Via2l0CmluZGV4IDBlMDkyMDIuLjkzNDgxNzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L3dvZmYyL1JFQURNRS53ZWJraXQKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
d29mZjIvUkVBRE1FLndlYmtpdApAQCAtMTEsNCArMTEsNCBAQCBUaGUgaW4tdHJlZSBjb3B5IGlz
IHVwZGF0ZWQgYnkgcnVubmluZwogICBzaCB1cGRhdGUuc2gKIGZyb20gd2l0aGluIHRoZSBtb2R1
bGVzL3dvZmYyIGRpcmVjdG9yeS4KIAotQ3VycmVudCB2ZXJzaW9uOiBbY29tbWl0IDY0M2M3YjQ1
ODkxY2JlYjVkYzFmNzU5OWE0YzliNTNmYmU4MmEwOGZdLgorQ3VycmVudCB2ZXJzaW9uOiBbY29t
bWl0IDYzYjhmYjZkMGQ3OTdmMDRlNzdlZTgyNWZkOGZjZjdlYTYyMDVhYWNdLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL2ZpbGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L3dvZmYyL3NyYy9maWxlLmgKaW5kZXggNjlhOTJmOC4uN2FmY2IzMSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL2ZpbGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93
b2ZmMi9zcmMvZmlsZS5oCkBAIC0xMiw3ICsxMiw3IEBACiAvLyBTZWUgdGhlIExpY2Vuc2UgZm9y
IHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAvLyBsaW1p
dGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIC8vCi0vLyBGaWxlIElPIGhlbHBlcnMKKy8vIEZp
bGUgSU8gaGVscGVycy4KIAogI2lmbmRlZiBXT0ZGMl9GSUxFX0hfCiAjZGVmaW5lIFdPRkYyX0ZJ
TEVfSF8KQEAgLTIyLDE4ICsyMiwyMCBAQAogCiBuYW1lc3BhY2Ugd29mZjIgewogCi1pbmxpbmUg
c3RkOjpzdHJpbmcgR2V0RmlsZUNvbnRlbnQoc3RkOjpzdHJpbmcgZmlsZW5hbWUpIHsKK3VzaW5n
IHN0ZDo6c3RyaW5nOworCisKK2lubGluZSBzdHJpbmcgR2V0RmlsZUNvbnRlbnQoc3RyaW5nIGZp
bGVuYW1lKSB7CiAgIHN0ZDo6aWZzdHJlYW0gaWZzKGZpbGVuYW1lLmNfc3RyKCksIHN0ZDo6aW9z
OjpiaW5hcnkpOwotICByZXR1cm4gc3RkOjpzdHJpbmcoCisgIHJldHVybiBzdHJpbmcoCiAgICAg
c3RkOjppc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+KGlmcy5yZGJ1ZigpKSwKICAgICBzdGQ6Omlz
dHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4oKSk7CiB9CiAKLWlubGluZSB2b2lkIFNldEZpbGVDb250
ZW50cyhzdGQ6OnN0cmluZyBmaWxlbmFtZSwgc3RkOjpzdHJpbmcgY29udGVudCkgeworaW5saW5l
IHZvaWQgU2V0RmlsZUNvbnRlbnRzKHN0cmluZyBmaWxlbmFtZSwgc3RyaW5nOjppdGVyYXRvciBz
dGFydCwKKyAgICBzdHJpbmc6Oml0ZXJhdG9yIGVuZCkgewogICBzdGQ6Om9mc3RyZWFtIG9mcyhm
aWxlbmFtZS5jX3N0cigpLCBzdGQ6Omlvczo6YmluYXJ5KTsKLSAgc3RkOjpjb3B5KGNvbnRlbnQu
YmVnaW4oKSwKLSAgICAgICAgICAgIGNvbnRlbnQuZW5kKCksCi0gICAgICAgICAgICBzdGQ6Om9z
dHJlYW1faXRlcmF0b3I8Y2hhcj4ob2ZzKSk7CisgIHN0ZDo6Y29weShzdGFydCwgZW5kLCBzdGQ6
Om9zdHJlYW1faXRlcmF0b3I8Y2hhcj4ob2ZzKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIHdvZmYy
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvZm9udC5jYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9mb250LmNjCmluZGV4IDdjYzU2ODguLjA2MDY3MzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9mb250LmNjCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9mb250LmNjCkBAIC00OSwxMSArNDksNyBAQCBzdGQ6OnZl
Y3Rvcjx1aW50MzJfdD4gRm9udDo6T3V0cHV0T3JkZXJlZFRhZ3MoKSBjb25zdCB7CiAgICAgb3V0
cHV0X29yZGVyLnB1c2hfYmFjayh0YWJsZS50YWcpOwogICB9CiAKLSAgLy8gQWxwaGFiZXRpemUg
YW5kIGRvIG5vdCBwdXQgbG9jYSBpbW1lZGlhdGVseSBhZnRlciBnbHlmCi0gIC8vIFRoaXMgdmlv
bGF0ZXMgd29mZjIgc3BlYyBidXQgcmVzdWx0cyBpbiBhIGZvbnQgdGhhdCBwYXNzZXMgT1RTCi0g
IHN0ZDo6c29ydChvdXRwdXRfb3JkZXIuYmVnaW4oKSwgb3V0cHV0X29yZGVyLmVuZCgpKTsKLSAg
Ly8gVE9ETyh1c2VyKTogY2hhbmdlIHRvIG1hdGNoIHNwZWMgb25jZSBicm93c2VycyBhcmUgb24g
bmV3ZXIgT1RTCi0gIC8qCisgIC8vIEFscGhhYmV0aXplIHRoZW4gcHV0IGxvY2EgaW1tZWRpYXRl
bHkgYWZ0ZXIgZ2x5ZgogICBhdXRvIGdseWZfbG9jID0gc3RkOjpmaW5kKG91dHB1dF9vcmRlci5i
ZWdpbigpLCBvdXRwdXRfb3JkZXIuZW5kKCksCiAgICAgICBrR2x5ZlRhYmxlVGFnKTsKICAgYXV0
byBsb2NhX2xvYyA9IHN0ZDo6ZmluZChvdXRwdXRfb3JkZXIuYmVnaW4oKSwgb3V0cHV0X29yZGVy
LmVuZCgpLApAQCAtNjIsNyArNTgsNyBAQCBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4gRm9udDo6T3V0
cHV0T3JkZXJlZFRhZ3MoKSBjb25zdCB7CiAgICAgb3V0cHV0X29yZGVyLmVyYXNlKGxvY2FfbG9j
KTsKICAgICBvdXRwdXRfb3JkZXIuaW5zZXJ0KHN0ZDo6ZmluZChvdXRwdXRfb3JkZXIuYmVnaW4o
KSwgb3V0cHV0X29yZGVyLmVuZCgpLAogICAgICAga0dseWZUYWJsZVRhZykgKyAxLCBrTG9jYVRh
YmxlVGFnKTsKLSAgfSovCisgIH0KIAogICByZXR1cm4gb3V0cHV0X29yZGVyOwogfQpAQCAtMTQ1
LDcgKzE0MSw3IEBAIGJvb2wgUmVhZFRydWVUeXBlQ29sbGVjdGlvbihCdWZmZXIqIGZpbGUsIGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW4sCiAgICAgfQogCiAgICAgc3RkOjp2ZWN0b3I8
dWludDMyX3Q+IG9mZnNldHM7Ci0gICAgZm9yIChhdXRvIGkgPSAwOyBpIDwgbnVtX2ZvbnRzOyBp
KyspIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bV9mb250czsgaSsrKSB7CiAgICAg
ICB1aW50MzJfdCBvZmZzZXQ7CiAgICAgICBpZiAoIWZpbGUtPlJlYWRVMzIoJm9mZnNldCkpIHsK
ICAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwpAQCAtMTg1LDE1ICsx
ODEsMTQgQEAgYm9vbCBSZWFkRm9udENvbGxlY3Rpb24oY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRDb2xsZWN0aW9uKiBmb250X2Nv
bGxlY3Rpb24pIHsKICAgQnVmZmVyIGZpbGUoZGF0YSwgbGVuKTsKIAotICB1aW50MzJfdCBmbGF2
b3I7Ci0gIGlmICghZmlsZS5SZWFkVTMyKCZmbGF2b3IpKSB7CisgIGlmICghZmlsZS5SZWFkVTMy
KCZmb250X2NvbGxlY3Rpb24tPmZsYXZvcikpIHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lP
Tl9GQUlMVVJFKCk7CiAgIH0KIAotICBpZiAoZmxhdm9yICE9IGtUdGNGb250Rmxhdm9yKSB7Cisg
IGlmIChmb250X2NvbGxlY3Rpb24tPmZsYXZvciAhPSBrVHRjRm9udEZsYXZvcikgewogICAgIGZv
bnRfY29sbGVjdGlvbi0+Zm9udHMucmVzaXplKDEpOwogICAgIEZvbnQmIGZvbnQgPSBmb250X2Nv
bGxlY3Rpb24tPmZvbnRzWzBdOwotICAgIGZvbnQuZmxhdm9yID0gZmxhdm9yOworICAgIGZvbnQu
Zmxhdm9yID0gZm9udF9jb2xsZWN0aW9uLT5mbGF2b3I7CiAgICAgcmV0dXJuIFJlYWRUcnVlVHlw
ZUZvbnQoJmZpbGUsIGRhdGEsIGxlbiwgJmZvbnQpOwogICB9CiAgIHJldHVybiBSZWFkVHJ1ZVR5
cGVDb2xsZWN0aW9uKCZmaWxlLCBkYXRhLCBsZW4sIGZvbnRfY29sbGVjdGlvbik7CkBAIC0yOTAs
NyArMjg1LDcgQEAgYm9vbCBXcml0ZUZvbnRDb2xsZWN0aW9uKGNvbnN0IEZvbnRDb2xsZWN0aW9u
JiBmb250X2NvbGxlY3Rpb24sIHVpbnQ4X3QqIGRzdCwKICAgc2l6ZV90IG9mZnNldCA9IDA7CiAK
ICAgLy8gSXQncyBzaW1wbGVyIGlmIHRoaXMganVzdCBhIHNpbXBsZSBzZm50Ci0gIGlmIChmb250
X2NvbGxlY3Rpb24uZm9udHMuc2l6ZSgpID09IDEpIHsKKyAgaWYgKGZvbnRfY29sbGVjdGlvbi5m
bGF2b3IgIT0ga1R0Y0ZvbnRGbGF2b3IpIHsKICAgICByZXR1cm4gV3JpdGVGb250KGZvbnRfY29s
bGVjdGlvbi5mb250c1swXSwgJm9mZnNldCwgZHN0LCBkc3Rfc2l6ZSk7CiAgIH0KIApAQCAtMzAx
LDcgKzI5Niw3IEBAIGJvb2wgV3JpdGVGb250Q29sbGVjdGlvbihjb25zdCBGb250Q29sbGVjdGlv
biYgZm9udF9jb2xsZWN0aW9uLCB1aW50OF90KiBkc3QsCiAKICAgLy8gT2Zmc2V0IFRhYmxlLCB6
ZXJvZWQgZm9yIG5vdwogICBzaXplX3Qgb2Zmc2V0X3RhYmxlID0gb2Zmc2V0OyAgLy8gd2hlcmUg
dG8gd3JpdGUgb2Zmc2V0cyBsYXRlcgotICBmb3IgKGludCBpID0gMDsgaSA8IGZvbnRfY29sbGVj
dGlvbi5mb250cy5zaXplKCk7IGkrKykgeworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZvbnRf
Y29sbGVjdGlvbi5mb250cy5zaXplKCk7IGkrKykgewogICAgIFN0b3JlVTMyKDAsICZvZmZzZXQs
IGRzdCk7CiAgIH0KIApAQCAtMzEyLDcgKzMwNyw3IEBAIGJvb2wgV3JpdGVGb250Q29sbGVjdGlv
bihjb25zdCBGb250Q29sbGVjdGlvbiYgZm9udF9jb2xsZWN0aW9uLCB1aW50OF90KiBkc3QsCiAg
IH0KIAogICAvLyBXcml0ZSBmb250cyBhbmQgdGhlaXIgb2Zmc2V0cy4KLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCBmb250X2NvbGxlY3Rpb24uZm9udHMuc2l6ZSgpOyBpKyspIHsKKyAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmb250X2NvbGxlY3Rpb24uZm9udHMuc2l6ZSgpOyBpKyspIHsKICAgICBj
b25zdCBhdXRvJiBmb250ID0gZm9udF9jb2xsZWN0aW9uLmZvbnRzW2ldOwogICAgIFN0b3JlVTMy
KG9mZnNldCwgJm9mZnNldF90YWJsZSwgZHN0KTsKICAgICBpZiAoIVdyaXRlRm9udChmb250LCAm
b2Zmc2V0LCBkc3QsIGRzdF9zaXplKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
d29mZjIvc3JjL2ZvbnQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9mb250LmgKaW5k
ZXggNjAxYzRjOC4uOTM4MDZlNiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIv
c3JjL2ZvbnQuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvZm9udC5oCkBAIC02
MSw2ICs2MSw3IEBAIHN0cnVjdCBGb250IHsKIAogLy8gQWNjb21vZGF0ZXMgYm90aCBzaW5ndWxh
ciAoT1RGLCBUVEYpIGFuZCBjb2xsZWN0aW9uIChUVEMpIGZvbnRzCiBzdHJ1Y3QgRm9udENvbGxl
Y3Rpb24geworICB1aW50MzJfdCBmbGF2b3I7CiAgIHVpbnQzMl90IGhlYWRlcl92ZXJzaW9uOwog
ICAvLyAob2Zmc2V0LCBmaXJzdCB1c2Ugb2YgdGFibGUqKSBwYWlycwogICBzdGQ6Om1hcDx1aW50
MzJfdCwgRm9udDo6VGFibGUqPiB0YWJsZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS93b2ZmMi9zcmMvZ2x5cGguY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvZ2x5cGgu
Y2MKaW5kZXggMTdiZWYzOC4uMWRhZGFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
d29mZjIvc3JjL2dseXBoLmNjCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9nbHlw
aC5jYwpAQCAtMTIyLDcgKzEyMiw3IEBAIGJvb2wgUmVhZEdseXBoKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBsZW4sIEdseXBoKiBnbHlwaCkgewogICAgIHVpbnQ4X3QgZmxhZ19yZXBlYXQg
PSAwOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2NvbnRvdXJzOyArK2kpIHsKICAgICAg
IGZsYWdzW2ldLnJlc2l6ZShnbHlwaC0+Y29udG91cnNbaV0uc2l6ZSgpKTsKLSAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgZ2x5cGgtPmNvbnRvdXJzW2ldLnNpemUoKTsgKytqKSB7CisgICAgICBm
b3IgKHNpemVfdCBqID0gMDsgaiA8IGdseXBoLT5jb250b3Vyc1tpXS5zaXplKCk7ICsraikgewog
ICAgICAgICBpZiAoZmxhZ19yZXBlYXQgPT0gMCkgewogICAgICAgICAgIGlmICghYnVmZmVyLlJl
YWRVOCgmZmxhZykpIHsKICAgICAgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxV
UkUoKTsKQEAgLTE0Myw3ICsxNDMsNyBAQCBib29sIFJlYWRHbHlwaChjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3QgbGVuLCBHbHlwaCogZ2x5cGgpIHsKICAgICAvLyBSZWFkIHRoZSB4IGNvb3Jk
aW5hdGVzLgogICAgIGludCBwcmV2X3ggPSAwOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
X2NvbnRvdXJzOyArK2kpIHsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZ2x5cGgtPmNvbnRv
dXJzW2ldLnNpemUoKTsgKytqKSB7CisgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGdseXBo
LT5jb250b3Vyc1tpXS5zaXplKCk7ICsraikgewogICAgICAgICB1aW50OF90IGZsYWcgPSBmbGFn
c1tpXVtqXTsKICAgICAgICAgaWYgKGZsYWcgJiBrRkxBR19YU0hPUlQpIHsKICAgICAgICAgICAv
LyBzaW5nbGUgYnl0ZSB4LWRlbHRhIGNvb3JkIHZhbHVlCkBAIC0xNzAsNyArMTcwLDcgQEAgYm9v
bCBSZWFkR2x5cGgoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbiwgR2x5cGgqIGdseXBo
KSB7CiAgICAgLy8gUmVhZCB0aGUgeSBjb29yZGluYXRlcy4KICAgICBpbnQgcHJldl95ID0gMDsK
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9jb250b3VyczsgKytpKSB7Ci0gICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IGdseXBoLT5jb250b3Vyc1tpXS5zaXplKCk7ICsraikgeworICAgICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCBnbHlwaC0+Y29udG91cnNbaV0uc2l6ZSgpOyArK2opIHsK
ICAgICAgICAgdWludDhfdCBmbGFnID0gZmxhZ3NbaV1bal07CiAgICAgICAgIGlmIChmbGFnICYg
a0ZMQUdfWVNIT1JUKSB7CiAgICAgICAgICAgLy8gc2luZ2xlIGJ5dGUgeS1kZWx0YSBjb29yZCB2
YWx1ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3N0b3JlX2J5dGVz
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvc3RvcmVfYnl0ZXMuaAppbmRleCBlMWEx
MWYzLi43NGIyNzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvc3Rv
cmVfYnl0ZXMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvc3RvcmVfYnl0ZXMu
aApAQCAtNTgsOCArNTgsNyBAQCBpbmxpbmUgdm9pZCBTdG9yZTE2KGludCB2YWwsIHNpemVfdCog
b2Zmc2V0LCB1aW50OF90KiBkc3QpIHsKICAgICAgICgodmFsICYgMHhGRikgPDwgOCkgfCAoKHZh
bCAmIDB4RkYwMCkgPj4gOCk7CiAgICpvZmZzZXQgKz0gMjsKICNlbGlmIChkZWZpbmVkKF9fQllU
RV9PUkRFUl9fKSAmJiAoX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9CSUdfRU5ESUFOX18pKQot
ICAqcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGRzdCArICpvZmZzZXQpID0KLSAgICAgIHN0
YXRpY19jYXN0PHVpbnQxNl90Pih2YWwpOworICAqcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+
KGRzdCArICpvZmZzZXQpID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHZhbCk7CiAgICpvZmZzZXQg
Kz0gMjsKICNlbHNlCiAgIGRzdFsoKm9mZnNldCkrK10gPSB2YWwgPj4gODsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy90cmFuc2Zvcm0uY2MgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS93b2ZmMi9zcmMvdHJhbnNmb3JtLmNjCmluZGV4IGI3YjBjZjAuLjJhZDhiMTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy90cmFuc2Zvcm0uY2MKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3RyYW5zZm9ybS5jYwpAQCAtMzksNyArMzksNyBAQCB2
b2lkIFdyaXRlQnl0ZXMoc3RkOjp2ZWN0b3I8dWludDhfdD4qIG91dCwgY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90IGxlbikgewogfQogCiB2b2lkIFdyaXRlQnl0ZXMoc3RkOjp2ZWN0b3I8dWlu
dDhfdD4qIG91dCwgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIGluKSB7Ci0gIGZvciAoaW50
IGkgPSAwOyBpIDwgaW4uc2l6ZSgpOyArK2kpIHsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
bi5zaXplKCk7ICsraSkgewogICAgIG91dC0+cHVzaF9iYWNrKGluW2ldKTsKICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2NvbW1vbi5jYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9jb21tb24uY2MKaW5kZXggMzlkYzU0ZS4u
ZWJhNmE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2Nv
bW1vbi5jYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfY29tbW9uLmNj
CkBAIC0yMyw3ICsyMyw4IEBAIG5hbWVzcGFjZSB3b2ZmMiB7CiAKIHVpbnQzMl90IENvbXB1dGVV
TG9uZ1N1bShjb25zdCB1aW50OF90KiBidWYsIHNpemVfdCBzaXplKSB7CiAgIHVpbnQzMl90IGNo
ZWNrc3VtID0gMDsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsKKyAg
c2l6ZV90IGFsaWduZWRfc2l6ZSA9IHNpemUgJiB+MzsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhbGlnbmVkX3NpemU7IGkgKz0gNCkgewogI2lmIChkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAm
JiAoX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9MSVRUTEVfRU5ESUFOX18pKQogICAgIHVpbnQz
Ml90IHYgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGJ1ZiArIGkpOwogICAg
IGNoZWNrc3VtICs9ICgoKHYgJiAweEZGKSA8PCAyNCkgfCAoKHYgJiAweEZGMDApIDw8IDgpIHwK
QEAgLTM1LDYgKzM2LDE2IEBAIHVpbnQzMl90IENvbXB1dGVVTG9uZ1N1bShjb25zdCB1aW50OF90
KiBidWYsIHNpemVfdCBzaXplKSB7CiAgICAgICAoYnVmW2kgKyAyXSA8PCA4KSB8IGJ1ZltpICsg
M107CiAjZW5kaWYKICAgfQorCisgIC8vIHRyZWF0IHNpemUgbm90IGFsaWduZWQgb24gNCBhcyBp
ZiBpdCB3ZXJlIHBhZGRlZCB0byA0IHdpdGggMCdzCisgIGlmIChzaXplICE9IGFsaWduZWRfc2l6
ZSkgeworICAgIHVpbnQzMl90IHYgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSBhbGlnbmVkX3Np
emU7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgIHYgfD0gYnVmW2ldIDw8ICgyNCAtIDggKiAoaSAm
IDMpKTsKKyAgICB9CisgICAgY2hlY2tzdW0gKz0gdjsKKyAgfQorCiAgIHJldHVybiBjaGVja3N1
bTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2Nv
bXByZXNzLmNjIGIvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2NvbXByZXNzLmNj
CmluZGV4IGVjNDFhZDUuLmU1Y2Y3MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dv
ZmYyL3NyYy93b2ZmMl9jb21wcmVzcy5jYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9z
cmMvd29mZjJfY29tcHJlc3MuY2MKQEAgLTQ3LDcgKzQ3LDcgQEAgaW50IG1haW4oaW50IGFyZ2Ms
IGNoYXIgKiphcmd2KSB7CiAgIH0KICAgb3V0cHV0LnJlc2l6ZShvdXRwdXRfc2l6ZSk7CiAKLSAg
d29mZjI6OlNldEZpbGVDb250ZW50cyhvdXRmaWxlbmFtZSwgb3V0cHV0KTsKKyAgd29mZjI6OlNl
dEZpbGVDb250ZW50cyhvdXRmaWxlbmFtZSwgb3V0cHV0LmJlZ2luKCksIG91dHB1dC5lbmQoKSk7
CiAKICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9z
cmMvd29mZjJfZGVjLmNjIGIvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2RlYy5j
YwppbmRleCAyZmEyOTFjLi5lYzc1Nzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS93
b2ZmMi9zcmMvd29mZjJfZGVjLmNjCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93
b2ZmMl9kZWMuY2MKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAjaW5jbHVk
ZSA8bWFwPgogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVk
ZSAiLi9kZWNvZGUuaCIKICNpbmNsdWRlICIuL2J1ZmZlci5oIgpAQCAtNjUsMTMgKzY2LDU0IEBA
IGNvbnN0IHNpemVfdCBrQ2hlY2tTdW1BZGp1c3RtZW50T2Zmc2V0ID0gODsKIGNvbnN0IHNpemVf
dCBrRW5kUHRzT2ZDb250b3Vyc09mZnNldCA9IDEwOwogY29uc3Qgc2l6ZV90IGtDb21wb3NpdGVH
bHlwaEJlZ2luID0gMTA7CiAKKy8vIDk4JSBvZiBHb29nbGUgRm9udHMgaGF2ZSBubyBnbHlwaCBh
Ym92ZSA1ayBieXRlcworLy8gTGFyZ2VzdCBnbHlwaCBldmVyIG9ic2VydmVkIHdhcyA3MmsgYnl0
ZXMKK2NvbnN0IHNpemVfdCBrRGVmYXVsdEdseXBoQnVmID0gNTEyMDsKKworLy8gT3ZlciAxNGsg
dGVzdCBmb250cyB0aGUgbWF4IGNvbXByZXNzaW9uIHJhdGlvIHNlZW4gdG8gZGF0ZSB3YXMgfjIw
LgorLy8gPjEwMCBzdWdnZXN0cyB5b3Ugd3JvdGUgYSBiYWQgdW5jb21wcmVzc2VkIHNpemUuCitj
b25zdCBmbG9hdCBrTWF4UGxhdXNpYmxlQ29tcHJlc3Npb25SYXRpbyA9IDEwMC4wOworCiAvLyBt
ZXRhZGF0YSBmb3IgYSBUVEMgZm9udCBlbnRyeQogc3RydWN0IFR0Y0ZvbnQgewogICB1aW50MzJf
dCBmbGF2b3I7CiAgIHVpbnQzMl90IGRzdF9vZmZzZXQ7CisgIHVpbnQzMl90IGhlYWRlcl9jaGVj
a3N1bTsKICAgc3RkOjp2ZWN0b3I8dWludDE2X3Q+IHRhYmxlX2luZGljZXM7CiB9OwogCitzdHJ1
Y3QgV09GRjJIZWFkZXIgeworICB1aW50MzJfdCBmbGF2b3I7CisgIHVpbnQzMl90IGhlYWRlcl92
ZXJzaW9uOworICB1aW50MTZfdCBudW1fdGFibGVzOworICB1aW50NjRfdCBjb21wcmVzc2VkX29m
ZnNldDsKKyAgdWludDMyX3QgY29tcHJlc3NlZF9sZW5ndGg7CisgIHVpbnQzMl90IHVuY29tcHJl
c3NlZF9zaXplOworICBzdGQ6OnZlY3RvcjxUYWJsZT4gdGFibGVzOyAgLy8gbnVtX3RhYmxlcyB1
bmlxdWUgdGFibGVzCisgIHN0ZDo6dmVjdG9yPFR0Y0ZvbnQ+IHR0Y19mb250czsgIC8vIG1ldGFk
YXRhIHRvIGhlbHAgcmVidWlsZCBmb250Cit9OworCisvKioKKyAqIEFjY3VtdWxhdGVzIGRhdGEg
d2UgbWF5IG5lZWQgdG8gcmVjb25zdHJ1Y3QgYSBzaW5nbGUgZm9udC4gT25lIHBlciBmb250Cisg
KiBjcmVhdGVkIGZvciBhIFRUQy4KKyAqLworc3RydWN0IFdPRkYyRm9udEluZm8geworICB1aW50
MTZfdCBudW1fZ2x5cGhzOworICB1aW50MTZfdCBpbmRleF9mb3JtYXQ7CisgIHVpbnQxNl90IG51
bV9obWV0cmljczsKKyAgc3RkOjp2ZWN0b3I8aW50MTZfdD4geF9taW5zOworICBzdGQ6Om1hcDx1
aW50MzJfdCwgdWludDMyX3Q+IHRhYmxlX2VudHJ5X2J5X3RhZzsKK307CisKKy8vIEFjY3VtdWxh
dGVzIG1ldGFkYXRhIGFzIHdlIHJlYnVpbGQgdGhlIGZvbnQKK3N0cnVjdCBSZWJ1aWxkTWV0YWRh
dGEgeworICB1aW50MzJfdCBoZWFkZXJfY2hlY2tzdW07ICAvLyBzZXQgYnkgV3JpdGVIZWFkZXJz
CisgIHN0ZDo6dmVjdG9yPFdPRkYyRm9udEluZm8+IGZvbnRfaW5mb3M7CisgIC8vIGNoZWNrc3Vt
cyBmb3IgdGFibGVzIHRoYXQgaGF2ZSBiZWVuIHdyaXR0ZW4uCisgIC8vICh0YWcsIHNyY19vZmZz
ZXQpID0+IGNoZWNrc3VtLiBOZWVkIGJvdGggYmVjYXVzZSAwLWxlbmd0aCBsb2NhLgorICBzdGQ6
Om1hcDxzdGQ6OnBhaXI8dWludDMyX3QsIHVpbnQzMl90PiwgdWludDMyX3Q+IGNoZWNrc3VtczsK
K307CisKIGludCBXaXRoU2lnbihpbnQgZmxhZywgaW50IGJhc2V2YWwpIHsKICAgLy8gUHJlY29u
ZGl0aW9uOiAwIDw9IGJhc2V2YWwgPCA2NTUzNiAodG8gYXZvaWQgaW50ZWdlciBvdmVyZmxvdykK
ICAgcmV0dXJuIChmbGFnICYgMSkgPyBiYXNldmFsIDogLWJhc2V2YWw7CkBAIC0yNDQsNiArMjg2
LDcgQEAgYm9vbCBTdG9yZVBvaW50cyh1bnNpZ25lZCBpbnQgbl9wb2ludHMsIGNvbnN0IFBvaW50
KiBwb2ludHMsCiAKIC8vIENvbXB1dGUgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgY29vcmRpbmF0
ZXMsIGFuZCBzdG9yZSBpbnRvIGEgZ2x5ZiBidWZmZXIuCiAvLyBBIHByZWNvbmRpdGlvbiBpcyB0
aGF0IHRoZXJlIGFyZSBhdCBsZWFzdCAxMCBieXRlcyBhdmFpbGFibGUuCisvLyBkc3Qgc2hvdWxk
IHBvaW50IHRvIHRoZSBiZWdpbm5pbmcgb2YgYSAnZ2x5ZicgcmVjb3JkLgogdm9pZCBDb21wdXRl
QmJveCh1bnNpZ25lZCBpbnQgbl9wb2ludHMsIGNvbnN0IFBvaW50KiBwb2ludHMsIHVpbnQ4X3Qq
IGRzdCkgewogICBpbnQgeF9taW4gPSAwOwogICBpbnQgeV9taW4gPSAwOwpAQCAtMjcxLDE0ICsz
MTQsMTUgQEAgdm9pZCBDb21wdXRlQmJveCh1bnNpZ25lZCBpbnQgbl9wb2ludHMsIGNvbnN0IFBv
aW50KiBwb2ludHMsIHVpbnQ4X3QqIGRzdCkgewogICBvZmZzZXQgPSBTdG9yZTE2KGRzdCwgb2Zm
c2V0LCB5X21heCk7CiB9CiAKLWJvb2wgUHJvY2Vzc0NvbXBvc2l0ZShCdWZmZXIqIGNvbXBvc2l0
ZV9zdHJlYW0sIHVpbnQ4X3QqIGRzdCwKLSAgICBzaXplX3QgZHN0X3NpemUsIHNpemVfdCogZ2x5
cGhfc2l6ZSwgYm9vbCogaGF2ZV9pbnN0cnVjdGlvbnMpIHsKLSAgc2l6ZV90IHN0YXJ0X29mZnNl
dCA9IGNvbXBvc2l0ZV9zdHJlYW0tPm9mZnNldCgpOworCitib29sIFNpemVPZkNvbXBvc2l0ZShC
dWZmZXIgY29tcG9zaXRlX3N0cmVhbSwgc2l6ZV90KiBzaXplLAorICAgICAgICAgICAgICAgICAg
ICAgYm9vbCogaGF2ZV9pbnN0cnVjdGlvbnMpIHsKKyAgc2l6ZV90IHN0YXJ0X29mZnNldCA9IGNv
bXBvc2l0ZV9zdHJlYW0ub2Zmc2V0KCk7CiAgIGJvb2wgd2VfaGF2ZV9pbnN0cnVjdGlvbnMgPSBm
YWxzZTsKIAogICB1aW50MTZfdCBmbGFncyA9IEZMQUdfTU9SRV9DT01QT05FTlRTOwogICB3aGls
ZSAoZmxhZ3MgJiBGTEFHX01PUkVfQ09NUE9ORU5UUykgewotICAgIGlmIChQUkVESUNUX0ZBTFNF
KCFjb21wb3NpdGVfc3RyZWFtLT5SZWFkVTE2KCZmbGFncykpKSB7CisgICAgaWYgKFBSRURJQ1Rf
RkFMU0UoIWNvbXBvc2l0ZV9zdHJlYW0uUmVhZFUxNigmZmxhZ3MpKSkgewogICAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0KICAgICB3ZV9oYXZlX2luc3RydWN0
aW9ucyB8PSAoZmxhZ3MgJiBGTEFHX1dFX0hBVkVfSU5TVFJVQ1RJT05TKSAhPSAwOwpAQCAtMjk1
LDM0ICszMzksNDMgQEAgYm9vbCBQcm9jZXNzQ29tcG9zaXRlKEJ1ZmZlciogY29tcG9zaXRlX3N0
cmVhbSwgdWludDhfdCogZHN0LAogICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiBGTEFHX1dFX0hBVkVf
QV9UV09fQllfVFdPKSB7CiAgICAgICBhcmdfc2l6ZSArPSA4OwogICAgIH0KLSAgICBpZiAoUFJF
RElDVF9GQUxTRSghY29tcG9zaXRlX3N0cmVhbS0+U2tpcChhcmdfc2l6ZSkpKSB7CisgICAgaWYg
KFBSRURJQ1RfRkFMU0UoIWNvbXBvc2l0ZV9zdHJlYW0uU2tpcChhcmdfc2l6ZSkpKSB7CiAgICAg
ICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgfQogICB9Ci0gIHNpemVf
dCBjb21wb3NpdGVfZ2x5cGhfc2l6ZSA9IGNvbXBvc2l0ZV9zdHJlYW0tPm9mZnNldCgpIC0gc3Rh
cnRfb2Zmc2V0OwotICBpZiAoUFJFRElDVF9GQUxTRShjb21wb3NpdGVfZ2x5cGhfc2l6ZSArIGtD
b21wb3NpdGVHbHlwaEJlZ2luID4gZHN0X3NpemUpKSB7CisKKyAgKnNpemUgPSBjb21wb3NpdGVf
c3RyZWFtLm9mZnNldCgpIC0gc3RhcnRfb2Zmc2V0OworICAqaGF2ZV9pbnN0cnVjdGlvbnMgPSB3
ZV9oYXZlX2luc3RydWN0aW9uczsKKworICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQYWQ0KFdP
RkYyT3V0KiBvdXQpIHsKKyAgdWludDhfdCB6ZXJvZXNbXSA9IHswLCAwLCAwfTsKKyAgaWYgKFBS
RURJQ1RfRkFMU0Uob3V0LT5TaXplKCkgKyAzIDwgb3V0LT5TaXplKCkpKSB7CiAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9Ci0gIFN0b3JlMTYoZHN0LCAwLCAweGZm
ZmYpOyAgLy8gbkNvbnRvdXJzID0gLTEgZm9yIGNvbXBvc2l0ZSBnbHlwaAotICBzdGQ6Om1lbWNw
eShkc3QgKyBrQ29tcG9zaXRlR2x5cGhCZWdpbiwKLSAgICAgIGNvbXBvc2l0ZV9zdHJlYW0tPmJ1
ZmZlcigpICsgc3RhcnRfb2Zmc2V0LAotICAgICAgY29tcG9zaXRlX2dseXBoX3NpemUpOwotICAq
Z2x5cGhfc2l6ZSA9IGtDb21wb3NpdGVHbHlwaEJlZ2luICsgY29tcG9zaXRlX2dseXBoX3NpemU7
Ci0gICpoYXZlX2luc3RydWN0aW9ucyA9IHdlX2hhdmVfaW5zdHJ1Y3Rpb25zOworICB1aW50MzJf
dCBwYWRfYnl0ZXMgPSBSb3VuZDQob3V0LT5TaXplKCkpIC0gb3V0LT5TaXplKCk7CisgIGlmIChw
YWRfYnl0ZXMgPiAwKSB7CisgICAgaWYgKFBSRURJQ1RfRkFMU0UoIW91dC0+V3JpdGUoJnplcm9l
cywgcGFkX2J5dGVzKSkpIHsKKyAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUo
KTsKKyAgICB9CisgIH0KICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vIEJ1aWxkIFRydWVUeXBlIGxv
Y2EgdGFibGUKIGJvb2wgU3RvcmVMb2NhKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQzMl90PiYgbG9j
YV92YWx1ZXMsIGludCBpbmRleF9mb3JtYXQsCi0gICAgICAgICAgICAgICB1aW50OF90KiBkc3Qs
IHNpemVfdCBkc3Rfc2l6ZSkgeworICAgICAgICAgICAgICAgdWludDMyX3QqIGNoZWNrc3VtLCBX
T0ZGMk91dCogb3V0KSB7CisgIC8vIFRPRE8odXNlcikgZmlndXJlIG91dCB3aGF0IGluZGV4IGZv
cm1hdCB0byB1c2UgYmFzZWQgb24gd2hldGhlciBtYXgKKyAgLy8gb2Zmc2V0IGZpdHMgaW50byB1
aW50MTZfdCBvciBub3QKICAgY29uc3QgdWludDY0X3QgbG9jYV9zaXplID0gbG9jYV92YWx1ZXMu
c2l6ZSgpOwogICBjb25zdCB1aW50NjRfdCBvZmZzZXRfc2l6ZSA9IGluZGV4X2Zvcm1hdCA/IDQg
OiAyOwogICBpZiAoUFJFRElDVF9GQUxTRSgobG9jYV9zaXplIDw8IDIpID4+IDIgIT0gbG9jYV9z
aXplKSkgewogICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQotICBp
ZiAoUFJFRElDVF9GQUxTRShvZmZzZXRfc2l6ZSAqIGxvY2Ffc2l6ZSA+IGRzdF9zaXplKSkgewot
ICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQorICBzdGQ6OnZlY3Rv
cjx1aW50OF90PiBsb2NhX2NvbnRlbnQobG9jYV9zaXplICogb2Zmc2V0X3NpemUpOworICB1aW50
OF90KiBkc3QgPSAmbG9jYV9jb250ZW50WzBdOwogICBzaXplX3Qgb2Zmc2V0ID0gMDsKICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsb2NhX3ZhbHVlcy5zaXplKCk7ICsraSkgewogICAgIHVpbnQz
Ml90IHZhbHVlID0gbG9jYV92YWx1ZXNbaV07CkBAIC0zMzIsMzAgKzM4NSwzNCBAQCBib29sIFN0
b3JlTG9jYShjb25zdCBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4mIGxvY2FfdmFsdWVzLCBpbnQgaW5k
ZXhfZm9ybWF0LAogICAgICAgb2Zmc2V0ID0gU3RvcmUxNihkc3QsIG9mZnNldCwgdmFsdWUgPj4g
MSk7CiAgICAgfQogICB9CisgICpjaGVja3N1bSA9IENvbXB1dGVVTG9uZ1N1bSgmbG9jYV9jb250
ZW50WzBdLCBsb2NhX2NvbnRlbnQuc2l6ZSgpKTsKKyAgaWYgKFBSRURJQ1RfRkFMU0UoIW91dC0+
V3JpdGUoJmxvY2FfY29udGVudFswXSwgbG9jYV9jb250ZW50LnNpemUoKSkpKSB7CisgICAgcmV0
dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICB9CiAgIHJldHVybiB0cnVlOwogfQog
CiAvLyBSZWNvbnN0cnVjdCBlbnRpcmUgZ2x5ZiB0YWJsZSBiYXNlZCBvbiB0cmFuc2Zvcm1lZCBv
cmlnaW5hbAotYm9vbCBSZWNvbnN0cnVjdEdseWYoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IGRhdGFfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdCwgc2l6ZV90IGRz
dF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogbG9jYV9idWYsIHNpemVfdCBs
b2NhX3NpemUpIHsKK2Jvb2wgUmVjb25zdHJ1Y3RHbHlmKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIFRh
YmxlKiBnbHlmX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIGdseWZfY2hl
Y2tzdW0sIFRhYmxlICogbG9jYV90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
KiBsb2NhX2NoZWNrc3VtLCBXT0ZGMkZvbnRJbmZvKiBpbmZvLAorICAgICAgICAgICAgICAgICAg
ICAgV09GRjJPdXQqIG91dCkgewogICBzdGF0aWMgY29uc3QgaW50IGtOdW1TdWJTdHJlYW1zID0g
NzsKLSAgQnVmZmVyIGZpbGUoZGF0YSwgZGF0YV9zaXplKTsKKyAgQnVmZmVyIGZpbGUoZGF0YSwg
Z2x5Zl90YWJsZS0+dHJhbnNmb3JtX2xlbmd0aCk7CiAgIHVpbnQzMl90IHZlcnNpb247CiAgIHN0
ZDo6dmVjdG9yPHN0ZDo6cGFpcjxjb25zdCB1aW50OF90Kiwgc2l6ZV90PiA+IHN1YnN0cmVhbXMo
a051bVN1YlN0cmVhbXMpOworICBjb25zdCBzaXplX3QgZ2x5Zl9zdGFydCA9IG91dC0+U2l6ZSgp
OwogCiAgIGlmIChQUkVESUNUX0ZBTFNFKCFmaWxlLlJlYWRVMzIoJnZlcnNpb24pKSkgewogICAg
IHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQotICB1aW50MTZfdCBudW1f
Z2x5cGhzOwotICB1aW50MTZfdCBpbmRleF9mb3JtYXQ7Ci0gIGlmIChQUkVESUNUX0ZBTFNFKCFm
aWxlLlJlYWRVMTYoJm51bV9nbHlwaHMpIHx8Ci0gICAgICAhZmlsZS5SZWFkVTE2KCZpbmRleF9m
b3JtYXQpKSkgeworICBpZiAoUFJFRElDVF9GQUxTRSghZmlsZS5SZWFkVTE2KCZpbmZvLT5udW1f
Z2x5cGhzKSB8fAorICAgICAgIWZpbGUuUmVhZFUxNigmaW5mby0+aW5kZXhfZm9ybWF0KSkpIHsK
ICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0KIAogICB1bnNpZ25l
ZCBpbnQgb2Zmc2V0ID0gKDIgKyBrTnVtU3ViU3RyZWFtcykgKiA0OwotICBpZiAoUFJFRElDVF9G
QUxTRShvZmZzZXQgPiBkYXRhX3NpemUpKSB7CisgIGlmIChQUkVESUNUX0ZBTFNFKG9mZnNldCA+
IGdseWZfdGFibGUtPnRyYW5zZm9ybV9sZW5ndGgpKSB7CiAgICAgcmV0dXJuIEZPTlRfQ09NUFJF
U1NJT05fRkFJTFVSRSgpOwogICB9CiAgIC8vIEludmFyaWFudCBmcm9tIGhlcmUgb246IGRhdGFf
c2l6ZSA+PSBvZmZzZXQKQEAgLTM2NCw3ICs0MjEsNyBAQCBib29sIFJlY29uc3RydWN0R2x5Zihj
b25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YV9zaXplLAogICAgIGlmIChQUkVESUNUX0ZB
TFNFKCFmaWxlLlJlYWRVMzIoJnN1YnN0cmVhbV9zaXplKSkpIHsKICAgICAgIHJldHVybiBGT05U
X0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgICB9Ci0gICAgaWYgKFBSRURJQ1RfRkFMU0Uoc3Vi
c3RyZWFtX3NpemUgPiBkYXRhX3NpemUgLSBvZmZzZXQpKSB7CisgICAgaWYgKFBSRURJQ1RfRkFM
U0Uoc3Vic3RyZWFtX3NpemUgPiBnbHlmX3RhYmxlLT50cmFuc2Zvcm1fbGVuZ3RoIC0gb2Zmc2V0
KSkgewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0KICAg
ICBzdWJzdHJlYW1zW2ldID0gc3RkOjptYWtlX3BhaXIoZGF0YSArIG9mZnNldCwgc3Vic3RyZWFt
X3NpemUpOwpAQCAtMzc4LDE4ICs0MzUsMjMgQEAgYm9vbCBSZWNvbnN0cnVjdEdseWYoY29uc3Qg
dWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSwKICAgQnVmZmVyIGJib3hfc3RyZWFtKHN1
YnN0cmVhbXNbNV0uZmlyc3QsIHN1YnN0cmVhbXNbNV0uc2Vjb25kKTsKICAgQnVmZmVyIGluc3Ry
dWN0aW9uX3N0cmVhbShzdWJzdHJlYW1zWzZdLmZpcnN0LCBzdWJzdHJlYW1zWzZdLnNlY29uZCk7
CiAKLSAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IGxvY2FfdmFsdWVzKG51bV9nbHlwaHMgKyAxKTsK
KyAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IGxvY2FfdmFsdWVzKGluZm8tPm51bV9nbHlwaHMgKyAx
KTsKICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQgaW50PiBuX3BvaW50c192ZWM7CiAgIHN0ZDo6dW5p
cXVlX3B0cjxQb2ludFtdPiBwb2ludHM7CiAgIHNpemVfdCBwb2ludHNfc2l6ZSA9IDA7Ci0gIHVp
bnQzMl90IGxvY2Ffb2Zmc2V0ID0gMDsKICAgY29uc3QgdWludDhfdCogYmJveF9iaXRtYXAgPSBi
Ym94X3N0cmVhbS5idWZmZXIoKTsKICAgLy8gU2FmZSBiZWNhdXNlIG51bV9nbHlwaHMgaXMgYm91
bmRlZAotICB1bnNpZ25lZCBpbnQgYml0bWFwX2xlbmd0aCA9ICgobnVtX2dseXBocyArIDMxKSA+
PiA1KSA8PCAyOworICB1bnNpZ25lZCBpbnQgYml0bWFwX2xlbmd0aCA9ICgoaW5mby0+bnVtX2ds
eXBocyArIDMxKSA+PiA1KSA8PCAyOwogICBpZiAoIWJib3hfc3RyZWFtLlNraXAoYml0bWFwX2xl
bmd0aCkpIHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0KLSAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1fZ2x5cGhzOyArK2kpIHsKKworICAvLyBU
ZW1wIGJ1ZmZlciBmb3IgZ2x5cGgncy4KKyAgc2l6ZV90IGdseXBoX2J1Zl9zaXplID0ga0RlZmF1
bHRHbHlwaEJ1ZjsKKyAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gZ2x5cGhfYnVmKG5ldyB1
aW50OF90W2dseXBoX2J1Zl9zaXplXSk7CisKKyAgaW5mby0+eF9taW5zLnJlc2l6ZShpbmZvLT5u
dW1fZ2x5cGhzKTsKKyAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBpbmZvLT5udW1fZ2x5
cGhzOyArK2kpIHsKICAgICBzaXplX3QgZ2x5cGhfc2l6ZSA9IDA7CiAgICAgdWludDE2X3Qgbl9j
b250b3VycyA9IDA7CiAgICAgYm9vbCBoYXZlX2Jib3ggPSBmYWxzZTsKQEAgLTM5OSw4ICs0NjEs
NiBAQCBib29sIFJlY29uc3RydWN0R2x5Zihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0
YV9zaXplLAogICAgIGlmIChQUkVESUNUX0ZBTFNFKCFuX2NvbnRvdXJfc3RyZWFtLlJlYWRVMTYo
Jm5fY29udG91cnMpKSkgewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgp
OwogICAgIH0KLSAgICB1aW50OF90KiBnbHlmX2RzdCA9IGRzdCArIGxvY2Ffb2Zmc2V0OwotICAg
IHNpemVfdCBnbHlmX2RzdF9zaXplID0gZHN0X3NpemUgLSBsb2NhX29mZnNldDsKIAogICAgIGlm
IChuX2NvbnRvdXJzID09IDB4ZmZmZikgewogICAgICAgLy8gY29tcG9zaXRlIGdseXBoCkBAIC00
MTAsMjYgKzQ3MCw0MiBAQCBib29sIFJlY29uc3RydWN0R2x5Zihjb25zdCB1aW50OF90KiBkYXRh
LCBzaXplX3QgZGF0YV9zaXplLAogICAgICAgICAvLyBjb21wb3NpdGUgZ2x5cGhzIG11c3QgaGF2
ZSBhbiBleHBsaWNpdCBiYm94CiAgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxV
UkUoKTsKICAgICAgIH0KLSAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFQcm9jZXNzQ29tcG9zaXRl
KCZjb21wb3NpdGVfc3RyZWFtLCBnbHlmX2RzdCwKLSAgICAgICAgICAgIGdseWZfZHN0X3NpemUs
ICZnbHlwaF9zaXplLCAmaGF2ZV9pbnN0cnVjdGlvbnMpKSkgewotICAgICAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9Ci0gICAgICBpZiAoUFJFRElDVF9GQUxT
RSghYmJveF9zdHJlYW0uUmVhZChnbHlmX2RzdCArIDIsIDgpKSkgeworCisgICAgICBzaXplX3Qg
Y29tcG9zaXRlX3NpemU7CisgICAgICBpZiAoUFJFRElDVF9GQUxTRSghU2l6ZU9mQ29tcG9zaXRl
KGNvbXBvc2l0ZV9zdHJlYW0sICZjb21wb3NpdGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJmhhdmVfaW5zdHJ1Y3Rpb25zKSkpIHsKICAgICAgICAgcmV0
dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgICAgfQogICAgICAgaWYgKGhhdmVf
aW5zdHJ1Y3Rpb25zKSB7CiAgICAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFSZWFkMjU1VVNob3J0
KCZnbHlwaF9zdHJlYW0sICZpbnN0cnVjdGlvbl9zaXplKSkpIHsKICAgICAgICAgICByZXR1cm4g
Rk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKFBSRURJ
Q1RfRkFMU0UoaW5zdHJ1Y3Rpb25fc2l6ZSArIDIgPiBnbHlmX2RzdF9zaXplIC0gZ2x5cGhfc2l6
ZSkpIHsKLSAgICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgU3RvcmUxNihnbHlmX2RzdCwgZ2x5cGhfc2l6ZSwgaW5zdHJ1Y3Rpb25f
c2l6ZSk7Ci0gICAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFpbnN0cnVjdGlvbl9zdHJlYW0uUmVh
ZChnbHlmX2RzdCArIGdseXBoX3NpemUgKyAyLAorICAgICAgfQorCisgICAgICBzaXplX3Qgc2l6
ZV9uZWVkZWQgPSAxMiArIGNvbXBvc2l0ZV9zaXplICsgaW5zdHJ1Y3Rpb25fc2l6ZTsKKyAgICAg
IGlmIChQUkVESUNUX0ZBTFNFKGdseXBoX2J1Zl9zaXplIDwgc2l6ZV9uZWVkZWQpKSB7CisgICAg
ICAgIGdseXBoX2J1Zi5yZXNldChuZXcgdWludDhfdFtzaXplX25lZWRlZF0pOworICAgICAgICBn
bHlwaF9idWZfc2l6ZSA9IHNpemVfbmVlZGVkOworICAgICAgfQorCisgICAgICBnbHlwaF9zaXpl
ID0gU3RvcmUxNihnbHlwaF9idWYuZ2V0KCksIGdseXBoX3NpemUsIG5fY29udG91cnMpOworICAg
ICAgaWYgKFBSRURJQ1RfRkFMU0UoIWJib3hfc3RyZWFtLlJlYWQoZ2x5cGhfYnVmLmdldCgpICsg
Z2x5cGhfc2l6ZSwgOCkpKSB7CisgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxV
UkUoKTsKKyAgICAgIH0KKyAgICAgIGdseXBoX3NpemUgKz0gODsKKworICAgICAgaWYgKFBSRURJ
Q1RfRkFMU0UoIWNvbXBvc2l0ZV9zdHJlYW0uUmVhZChnbHlwaF9idWYuZ2V0KCkgKyBnbHlwaF9z
aXplLAorICAgICAgICAgICAgY29tcG9zaXRlX3NpemUpKSkgeworICAgICAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CisgICAgICB9CisgICAgICBnbHlwaF9zaXplICs9IGNv
bXBvc2l0ZV9zaXplOworICAgICAgaWYgKGhhdmVfaW5zdHJ1Y3Rpb25zKSB7CisgICAgICAgIGds
eXBoX3NpemUgPSBTdG9yZTE2KGdseXBoX2J1Zi5nZXQoKSwgZ2x5cGhfc2l6ZSwgaW5zdHJ1Y3Rp
b25fc2l6ZSk7CisgICAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFpbnN0cnVjdGlvbl9zdHJlYW0u
UmVhZChnbHlwaF9idWYuZ2V0KCkgKyBnbHlwaF9zaXplLAogICAgICAgICAgICAgICBpbnN0cnVj
dGlvbl9zaXplKSkpIHsKICAgICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJF
KCk7CiAgICAgICAgIH0KLSAgICAgICAgZ2x5cGhfc2l6ZSArPSBpbnN0cnVjdGlvbl9zaXplICsg
MjsKKyAgICAgICAgZ2x5cGhfc2l6ZSArPSBpbnN0cnVjdGlvbl9zaXplOwogICAgICAgfQogICAg
IH0gZWxzZSBpZiAobl9jb250b3VycyA+IDApIHsKICAgICAgIC8vIHNpbXBsZSBnbHlwaApAQCAt
NDY1LDE0MSArNTQxLDExMCBAQCBib29sIFJlY29uc3RydWN0R2x5Zihjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3QgZGF0YV9zaXplLAogICAgICAgICAgIHRvdGFsX25fcG9pbnRzLCBwb2ludHMu
Z2V0KCksICZ0cmlwbGV0X2J5dGVzX2NvbnN1bWVkKSkpIHsKICAgICAgICAgcmV0dXJuIEZPTlRf
Q09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgICAgfQotICAgICAgY29uc3QgdWludDMyX3QgaGVh
ZGVyX2FuZF9lbmRwdHNfY29udG91cnNfc2l6ZSA9Ci0gICAgICAgICAga0VuZFB0c09mQ29udG91
cnNPZmZzZXQgKyAyICogbl9jb250b3VyczsKLSAgICAgIGlmIChQUkVESUNUX0ZBTFNFKGdseWZf
ZHN0X3NpemUgPCBoZWFkZXJfYW5kX2VuZHB0c19jb250b3Vyc19zaXplKSkgeworICAgICAgaWYg
KFBSRURJQ1RfRkFMU0UoIWZsYWdfc3RyZWFtLlNraXAoZmxhZ19zaXplKSkpIHsKICAgICAgICAg
cmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgICAgfQotICAgICAgU3RvcmUx
NihnbHlmX2RzdCwgMCwgbl9jb250b3Vycyk7CisgICAgICBpZiAoUFJFRElDVF9GQUxTRSghZ2x5
cGhfc3RyZWFtLlNraXAodHJpcGxldF9ieXRlc19jb25zdW1lZCkpKSB7CisgICAgICAgIHJldHVy
biBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICAgIH0KKyAgICAgIHVuc2lnbmVkIGlu
dCBpbnN0cnVjdGlvbl9zaXplOworICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoIVJlYWQyNTVVU2hv
cnQoJmdseXBoX3N0cmVhbSwgJmluc3RydWN0aW9uX3NpemUpKSkgeworICAgICAgICByZXR1cm4g
Rk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CisgICAgICB9CisKKyAgICAgIGlmIChQUkVESUNU
X0ZBTFNFKHRvdGFsX25fcG9pbnRzID49ICgxIDw8IDI3KQorICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgaW5zdHJ1Y3Rpb25fc2l6ZSA+PSAoMSA8PCAzMCkpKSB7CisgICAgICAgIHJldHVybiBG
T05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICAgIH0KKyAgICAgIHNpemVfdCBzaXplX25l
ZWRlZCA9IDEyICsgMiAqIG5fY29udG91cnMgKyA1ICogdG90YWxfbl9wb2ludHMKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICsgaW5zdHJ1Y3Rpb25fc2l6ZTsKKyAgICAgIGlmIChQUkVESUNU
X0ZBTFNFKGdseXBoX2J1Zl9zaXplIDwgc2l6ZV9uZWVkZWQpKSB7CisgICAgICAgIGdseXBoX2J1
Zi5yZXNldChuZXcgdWludDhfdFtzaXplX25lZWRlZF0pOworICAgICAgICBnbHlwaF9idWZfc2l6
ZSA9IHNpemVfbmVlZGVkOworICAgICAgfQorCisgICAgICBnbHlwaF9zaXplID0gU3RvcmUxNihn
bHlwaF9idWYuZ2V0KCksIGdseXBoX3NpemUsIG5fY29udG91cnMpOwogICAgICAgaWYgKGhhdmVf
YmJveCkgewotICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSghYmJveF9zdHJlYW0uUmVhZChnbHlm
X2RzdCArIDIsIDgpKSkgeworICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSghYmJveF9zdHJlYW0u
UmVhZChnbHlwaF9idWYuZ2V0KCkgKyBnbHlwaF9zaXplLCA4KSkpIHsKICAgICAgICAgICByZXR1
cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICAgIH0KICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIENvbXB1dGVCYm94KHRvdGFsX25fcG9pbnRzLCBwb2ludHMuZ2V0KCksIGdseWZf
ZHN0KTsKKyAgICAgICAgQ29tcHV0ZUJib3godG90YWxfbl9wb2ludHMsIHBvaW50cy5nZXQoKSwg
Z2x5cGhfYnVmLmdldCgpKTsKICAgICAgIH0KLSAgICAgIHNpemVfdCBvZmZzZXQgPSBrRW5kUHRz
T2ZDb250b3Vyc09mZnNldDsKKyAgICAgIGdseXBoX3NpemUgPSBrRW5kUHRzT2ZDb250b3Vyc09m
ZnNldDsKICAgICAgIGludCBlbmRfcG9pbnQgPSAtMTsKICAgICAgIGZvciAodW5zaWduZWQgaW50
IGNvbnRvdXJfaXggPSAwOyBjb250b3VyX2l4IDwgbl9jb250b3VyczsgKytjb250b3VyX2l4KSB7
CiAgICAgICAgIGVuZF9wb2ludCArPSBuX3BvaW50c192ZWNbY29udG91cl9peF07CiAgICAgICAg
IGlmIChQUkVESUNUX0ZBTFNFKGVuZF9wb2ludCA+PSA2NTUzNikpIHsKICAgICAgICAgICByZXR1
cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICAgIH0KLSAgICAgICAgb2Zmc2V0
ID0gU3RvcmUxNihnbHlmX2RzdCwgb2Zmc2V0LCBlbmRfcG9pbnQpOwotICAgICAgfQotICAgICAg
aWYgKFBSRURJQ1RfRkFMU0UoIWZsYWdfc3RyZWFtLlNraXAoZmxhZ19zaXplKSkpIHsKLSAgICAg
ICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICAgICAgICBnbHlwaF9zaXpl
ID0gU3RvcmUxNihnbHlwaF9idWYuZ2V0KCksIGdseXBoX3NpemUsIGVuZF9wb2ludCk7CiAgICAg
ICB9Ci0gICAgICBpZiAoUFJFRElDVF9GQUxTRSghZ2x5cGhfc3RyZWFtLlNraXAodHJpcGxldF9i
eXRlc19jb25zdW1lZCkpKSB7Ci0gICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxV
UkUoKTsKLSAgICAgIH0KLSAgICAgIHVuc2lnbmVkIGludCBpbnN0cnVjdGlvbl9zaXplOwotICAg
ICAgaWYgKFBSRURJQ1RfRkFMU0UoIVJlYWQyNTVVU2hvcnQoJmdseXBoX3N0cmVhbSwgJmluc3Ry
dWN0aW9uX3NpemUpKSkgewotICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJF
KCk7Ci0gICAgICB9Ci0gICAgICBpZiAoUFJFRElDVF9GQUxTRShnbHlmX2RzdF9zaXplIC0gaGVh
ZGVyX2FuZF9lbmRwdHNfY29udG91cnNfc2l6ZSA8Ci0gICAgICAgICAgaW5zdHJ1Y3Rpb25fc2l6
ZSArIDIpKSB7Ci0gICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAg
ICAgIH0KLSAgICAgIHVpbnQ4X3QqIGluc3RydWN0aW9uX2RzdCA9IGdseWZfZHN0ICsgaGVhZGVy
X2FuZF9lbmRwdHNfY29udG91cnNfc2l6ZTsKLSAgICAgIFN0b3JlMTYoaW5zdHJ1Y3Rpb25fZHN0
LCAwLCBpbnN0cnVjdGlvbl9zaXplKTsKLSAgICAgIGlmIChQUkVESUNUX0ZBTFNFKAotICAgICAg
ICAgICFpbnN0cnVjdGlvbl9zdHJlYW0uUmVhZChpbnN0cnVjdGlvbl9kc3QgKyAyLCBpbnN0cnVj
dGlvbl9zaXplKSkpIHsKKworICAgICAgZ2x5cGhfc2l6ZSA9IFN0b3JlMTYoZ2x5cGhfYnVmLmdl
dCgpLCBnbHlwaF9zaXplLCBpbnN0cnVjdGlvbl9zaXplKTsKKyAgICAgIGlmIChQUkVESUNUX0ZB
TFNFKCFpbnN0cnVjdGlvbl9zdHJlYW0uUmVhZChnbHlwaF9idWYuZ2V0KCkgKyBnbHlwaF9zaXpl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3Ry
dWN0aW9uX3NpemUpKSkgewogICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJF
KCk7CiAgICAgICB9CisgICAgICBnbHlwaF9zaXplICs9IGluc3RydWN0aW9uX3NpemU7CisKICAg
ICAgIGlmIChQUkVESUNUX0ZBTFNFKCFTdG9yZVBvaW50cyh0b3RhbF9uX3BvaW50cywgcG9pbnRz
LmdldCgpLCBuX2NvbnRvdXJzLAotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25fc2l6ZSwgZ2x5Zl9k
c3QsIGdseWZfZHN0X3NpemUsICZnbHlwaF9zaXplKSkpIHsKKyAgICAgICAgICAgIGluc3RydWN0
aW9uX3NpemUsIGdseXBoX2J1Zi5nZXQoKSwgZ2x5cGhfYnVmX3NpemUsICZnbHlwaF9zaXplKSkp
IHsKICAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICBnbHlwaF9zaXplID0gMDsKICAgICB9Ci0gICAgbG9jYV92YWx1
ZXNbaV0gPSBsb2NhX29mZnNldDsKLSAgICBpZiAoUFJFRElDVF9GQUxTRShnbHlwaF9zaXplICsg
MyA8IGdseXBoX3NpemUpKSB7CisKKyAgICBsb2NhX3ZhbHVlc1tpXSA9IG91dC0+U2l6ZSgpIC0g
Z2x5Zl9zdGFydDsKKyAgICBpZiAoUFJFRElDVF9GQUxTRSghb3V0LT5Xcml0ZShnbHlwaF9idWYu
Z2V0KCksIGdseXBoX3NpemUpKSkgewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJ
TFVSRSgpOwogICAgIH0KLSAgICBnbHlwaF9zaXplID0gUm91bmQ0KGdseXBoX3NpemUpOwotICAg
IGlmIChQUkVESUNUX0ZBTFNFKGdseXBoX3NpemUgPiBkc3Rfc2l6ZSAtIGxvY2Ffb2Zmc2V0KSkg
ewotICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBidXQgdGhpcyB0ZXN0IGRlZmVuc2l2
ZWx5IG1haW50YWlucyB0aGUKLSAgICAgIC8vIGludmFyaWFudCB0aGF0IGxvY2Ffb2Zmc2V0IDw9
IGRzdF9zaXplLgorCisgICAgLy8gVE9ETyh1c2VyKSBPbGQgY29kZSBhbGlnbmVkIGdseXBocyAu
Li4gYnV0IGRvIHdlIGFjdHVhbGx5IG5lZWQgdG8/CisgICAgaWYgKFBSRURJQ1RfRkFMU0UoIVBh
ZDQob3V0KSkpIHsKICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAg
ICB9Ci0gICAgbG9jYV9vZmZzZXQgKz0gZ2x5cGhfc2l6ZTsKLSAgfQotICBsb2NhX3ZhbHVlc1tu
dW1fZ2x5cGhzXSA9IGxvY2Ffb2Zmc2V0OwotICByZXR1cm4gU3RvcmVMb2NhKGxvY2FfdmFsdWVz
LCBpbmRleF9mb3JtYXQsIGxvY2FfYnVmLCBsb2NhX3NpemUpOwotfQogCi0vLyBUaGlzIGlzIGxp
bmVhciBzZWFyY2gsIGJ1dCBjb3VsZCBiZSBjaGFuZ2VkIHRvIGJpbmFyeSBiZWNhdXNlIHdlCi0v
LyBkbyBoYXZlIGEgZ3VhcmFudGVlIHRoYXQgdGhlIHRhYmxlcyBhcmUgc29ydGVkIGJ5IHRhZy4g
QnV0IHRoZSB0b3RhbAotLy8gY3B1IHRpbWUgaXMgZXhwZWN0ZWQgdG8gYmUgdmVyeSBzbWFsbCBp
biBhbnkgY2FzZS4KLWNvbnN0IFRhYmxlKiBGaW5kVGFibGUoY29uc3Qgc3RkOjp2ZWN0b3I8VGFi
bGU+JiB0YWJsZXMsIHVpbnQzMl90IHRhZykgewotICBzaXplX3Qgbl90YWJsZXMgPSB0YWJsZXMu
c2l6ZSgpOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5fdGFibGVzOyArK2kpIHsKLSAgICBp
ZiAodGFibGVzW2ldLnRhZyA9PSB0YWcpIHsKLSAgICAgIHJldHVybiAmdGFibGVzW2ldOworICAg
ICpnbHlmX2NoZWNrc3VtICs9IENvbXB1dGVVTG9uZ1N1bShnbHlwaF9idWYuZ2V0KCksIGdseXBo
X3NpemUpOworCisgICAgLy8gV2UgbWF5IG5lZWQgeF9taW4gdG8gcmVjb25zdHJ1Y3QgJ2htdHgn
CisgICAgaWYgKG5fY29udG91cnMgPiAwKSB7CisgICAgICBCdWZmZXIgeF9taW5fYnVmKGdseXBo
X2J1Zi5nZXQoKSArIDIsIDIpOworICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoIXhfbWluX2J1Zi5S
ZWFkUzE2KCZpbmZvLT54X21pbnNbaV0pKSkgeworICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVT
U0lPTl9GQUlMVVJFKCk7CisgICAgICB9CiAgICAgfQogICB9Ci0gIHJldHVybiBOVUxMOwotfQog
Ci0vLyBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL21heHAuaHRt
Ci1ib29sIFJlYWROdW1HbHlwaHMoY29uc3QgVGFibGUqIG1heHBfdGFibGUsCi0gICAgICAgICAg
ICAgICAgICAgdWludDhfdCogZHN0LCBzaXplX3QgZHN0X2xlbmd0aCwgdWludDE2X3QqIG51bV9n
bHlwaHMpIHsKLSAgaWYgKFBSRURJQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1heHBf
dGFibGUtPmRzdF9vZmZzZXQgKwotICAgICAgbWF4cF90YWJsZS0+ZHN0X2xlbmd0aCkgPiBkc3Rf
bGVuZ3RoKSkgewotICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQot
ICBCdWZmZXIgYnVmZmVyKGRzdCArIG1heHBfdGFibGUtPmRzdF9vZmZzZXQsIG1heHBfdGFibGUt
PmRzdF9sZW5ndGgpOwotICAvLyBTa2lwIDQgdG8gcmVhY2ggJ21heHAnIG51bUdseXBocwotICBp
ZiAoUFJFRElDVF9GQUxTRSghYnVmZmVyLlNraXAoNCkgfHwgIWJ1ZmZlci5SZWFkVTE2KG51bV9n
bHlwaHMpKSkgeworICAvLyBnbHlmX3RhYmxlIGRzdF9vZmZzZXQgd2FzIHNldCBieSBSZWNvbnN0
cnVjdEZvbnQKKyAgZ2x5Zl90YWJsZS0+ZHN0X2xlbmd0aCA9IG91dC0+U2l6ZSgpIC0gZ2x5Zl90
YWJsZS0+ZHN0X29mZnNldDsKKyAgbG9jYV90YWJsZS0+ZHN0X29mZnNldCA9IG91dC0+U2l6ZSgp
OworICAvLyBsb2NhW25dIHdpbGwgYmUgZXF1YWwgdGhlIGxlbmd0aCBvZiB0aGUgZ2x5cGggZGF0
YSAoJ2dseWYnKSB0YWJsZQorICBsb2NhX3ZhbHVlc1tpbmZvLT5udW1fZ2x5cGhzXSA9IGdseWZf
dGFibGUtPmRzdF9sZW5ndGg7CisgIGlmIChQUkVESUNUX0ZBTFNFKCFTdG9yZUxvY2EobG9jYV92
YWx1ZXMsIGluZm8tPmluZGV4X2Zvcm1hdCwgbG9jYV9jaGVja3N1bSwKKyAgICAgIG91dCkpKSB7
CiAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9Ci0gIHJldHVybiB0
cnVlOwotfQorICBsb2NhX3RhYmxlLT5kc3RfbGVuZ3RoID0gb3V0LT5TaXplKCkgLSBsb2NhX3Rh
YmxlLT5kc3Rfb2Zmc2V0OwogCi0vLyBHZXQgbnVtYmVyT2ZITWV0cmljcywgaHR0cHM6Ly93d3cu
bWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L290c3BlYy9oaGVhLmh0bQotYm9vbCBSZWFkTnVtSE1l
dHJpY3MoY29uc3QgVGFibGUqIGhoZWFfdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICB1aW50
OF90KiBkc3QsIHNpemVfdCBkc3RfbGVuZ3RoLCB1aW50MTZfdCogbnVtX2htZXRyaWNzKSB7Ci0g
IGlmIChQUkVESUNUX0ZBTFNFKHN0YXRpY19jYXN0PHVpbnQ2NF90PihoaGVhX3RhYmxlLT5kc3Rf
b2Zmc2V0ICsKLSAgICAgIGhoZWFfdGFibGUtPmRzdF9sZW5ndGgpID4gZHN0X2xlbmd0aCkpIHsK
LSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAgLy8gU2tpcCAz
NCB0byByZWFjaCAnaGhlYScgbnVtYmVyT2ZITWV0cmljcwotICBCdWZmZXIgYnVmZmVyKGRzdCAr
IGhoZWFfdGFibGUtPmRzdF9vZmZzZXQsIGhoZWFfdGFibGUtPmRzdF9sZW5ndGgpOwotICBpZiAo
UFJFRElDVF9GQUxTRSghYnVmZmVyLlNraXAoMzQpIHx8ICFidWZmZXIuUmVhZFUxNihudW1faG1l
dHJpY3MpKSkgewotICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQog
ICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8geF9taW4gZm9yIGdseXBoOyBodHRwczovL3d3dy5taWNy
b3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL2dseWYuaHRtCi1ib29sIFJlYWRHbHlwaFhNaW4o
QnVmZmVyKiBnbHlmX2J1ZmYsIEJ1ZmZlciogbG9jYV9idWZmLCBpbnQxNl90IGxvY2FfZm9ybWF0
LAotICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGluZGV4LCBpbnQxNl90KiB4X21pbikgewot
ICB1aW50MzJfdCBvZmZzZXQxLCBvZmZzZXQyOwotICBsb2NhX2J1ZmYtPnNldF9vZmZzZXQoKGxv
Y2FfZm9ybWF0ID09IDAgPyAyIDogNCkgKiBpbmRleCk7Ci0gIGlmIChsb2NhX2Zvcm1hdCA9PSAw
KSB7Ci0gICAgdWludDE2X3QgdG1wMSwgdG1wMjsKLSAgICBpZiAoUFJFRElDVF9GQUxTRSghbG9j
YV9idWZmLT5SZWFkVTE2KCZ0bXAxKSB8fAotICAgICAgICAgICAgICAgICAgICAgICFsb2NhX2J1
ZmYtPlJlYWRVMTYoJnRtcDIpKSkgewotICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJ
TFVSRSgpOworVGFibGUqIEZpbmRUYWJsZShzdGQ6OnZlY3RvcjxUYWJsZSo+KiB0YWJsZXMsIHVp
bnQzMl90IHRhZykgeworICBmb3IgKFRhYmxlKiB0YWJsZSA6ICp0YWJsZXMpIHsKKyAgICBpZiAo
dGFibGUtPnRhZyA9PSB0YWcpIHsKKyAgICAgIHJldHVybiB0YWJsZTsKICAgICB9Ci0gICAgLy8g
aHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L290c3BlYy9sb2NhLmh0bQotICAg
IC8vICJUaGUgYWN0dWFsIGxvY2FsIG9mZnNldCBkaXZpZGVkIGJ5IDIgaXMgc3RvcmVkLiIKLSAg
ICBvZmZzZXQxID0gdG1wMSAqIDI7Ci0gICAgb2Zmc2V0MiA9IHRtcDIgKiAyOwotICB9IGVsc2Ug
aWYgKFBSRURJQ1RfRkFMU0UoIWxvY2FfYnVmZi0+UmVhZFUzMigmb2Zmc2V0MSkgfHwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICFsb2NhX2J1ZmYtPlJlYWRVMzIoJm9mZnNldDIpKSkgewot
ICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQorICByZXR1cm4gTlVM
TDsKK30KIAotICBpZiAob2Zmc2V0MSAhPSBvZmZzZXQyKSB7Ci0gICAgZ2x5Zl9idWZmLT5zZXRf
b2Zmc2V0KG9mZnNldDEgKyAyKTsKLSAgICBpZiAoIWdseWZfYnVmZi0+UmVhZFMxNih4X21pbikp
IHsKLSAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9Ci0gIH0g
ZWxzZSB7Ci0gICAgKnhfbWluID0gMDsKKy8vIEdldCBudW1iZXJPZkhNZXRyaWNzLCBodHRwczov
L3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL2hoZWEuaHRtCitib29sIFJlYWRO
dW1ITWV0cmljcyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YV9zaXplLAorICAgICAg
ICAgICAgICAgICAgICAgdWludDE2X3QqIG51bV9obWV0cmljcykgeworICAvLyBTa2lwIDM0IHRv
IHJlYWNoICdoaGVhJyBudW1iZXJPZkhNZXRyaWNzCisgIEJ1ZmZlciBidWZmZXIoZGF0YSwgZGF0
YV9zaXplKTsKKyAgaWYgKFBSRURJQ1RfRkFMU0UoIWJ1ZmZlci5Ta2lwKDM0KSB8fCAhYnVmZmVy
LlJlYWRVMTYobnVtX2htZXRyaWNzKSkpIHsKKyAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9G
QUlMVVJFKCk7CiAgIH0KICAgcmV0dXJuIHRydWU7CiB9CkBAIC02MDcsNDAgKzY1MiwxMSBAQCBi
b29sIFJlYWRHbHlwaFhNaW4oQnVmZmVyKiBnbHlmX2J1ZmYsIEJ1ZmZlciogbG9jYV9idWZmLCBp
bnQxNl90IGxvY2FfZm9ybWF0LAogLy8gaHR0cDovL2Rldi53My5vcmcvd2ViZm9udHMvV09GRjIv
c3BlYy9PdmVydmlldy5odG1sI2htdHhfdGFibGVfZm9ybWF0CiBib29sIFJlY29uc3RydWN0VHJh
bnNmb3JtZWRIbXR4KGNvbnN0IHVpbnQ4X3QqIHRyYW5zZm9ybWVkX2J1ZiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRyYW5zZm9ybWVkX3NpemUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRhYmxlKiBnbHlmX3RhYmxlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUYWJsZSogaGhlYV90YWJsZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGFibGUqIGhtdHhfdGFibGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRhYmxlKiBsb2NhX3RhYmxlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUYWJsZSogbWF4cF90YWJsZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogZHN0LCBzaXplX3QgZHN0X2xlbmd0
aCkgewotICBpZiAoUFJFRElDVF9GQUxTRSghZ2x5Zl90YWJsZSkpIHsKLSAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAgaWYgKFBSRURJQ1RfRkFMU0UoIWhoZWFf
dGFibGUpKSB7Ci0gICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwotICB9Ci0g
IGlmIChQUkVESUNUX0ZBTFNFKCFobXR4X3RhYmxlKSkgewotICAgIHJldHVybiBGT05UX0NPTVBS
RVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQotICBpZiAoUFJFRElDVF9GQUxTRSghbG9jYV90YWJsZSkp
IHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAgaWYgKFBS
RURJQ1RfRkFMU0UoIW1heHBfdGFibGUpKSB7Ci0gICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05f
RkFJTFVSRSgpOwotICB9Ci0KLSAgdWludDE2X3QgbnVtX2dseXBocywgbnVtX2htZXRyaWNzOwot
ICBpZiAoIVJlYWROdW1HbHlwaHMobWF4cF90YWJsZSwgZHN0LCBkc3RfbGVuZ3RoLCAmbnVtX2ds
eXBocykpIHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAg
aWYgKCFSZWFkTnVtSE1ldHJpY3MoaGhlYV90YWJsZSwgZHN0LCBkc3RfbGVuZ3RoLCAmbnVtX2ht
ZXRyaWNzKSkgewotICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQot
Ci0gIGlmIChQUkVESUNUX0ZBTFNFKHN0YXRpY19jYXN0PHVpbnQ2NF90PihobXR4X3RhYmxlLT5k
c3Rfb2Zmc2V0ICsKLSAgICAgIGhtdHhfdGFibGUtPmRzdF9sZW5ndGgpID4gZHN0X2xlbmd0aCkp
IHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgbnVtX2dseXBocywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgbnVtX2htZXRyaWNzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxpbnQxNl90PiYgeF9taW5zLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogY2hlY2tzdW0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPRkYyT3V0KiBvdXQpIHsKICAgQnVmZmVyIGht
dHhfYnVmZl9pbih0cmFuc2Zvcm1lZF9idWYsIHRyYW5zZm9ybWVkX3NpemUpOwogCiAgIHVpbnQ4
X3QgaG10eF9mbGFnczsKQEAgLTY1OCwyMyArNjc0LDE2IEBAIGJvb2wgUmVjb25zdHJ1Y3RUcmFu
c2Zvcm1lZEhtdHgoY29uc3QgdWludDhfdCogdHJhbnNmb3JtZWRfYnVmLAogICAgIHJldHVybiBG
T05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQogCi0gIC8vIGdseWYvbG9jYSBhcmUgZG9u
ZSBhbHJlYWR5IHNvIHdlIGNhbiB1c2UgdGhlbSB0byByZWNvdmVyIHhfbWluJ3MKLSAgaWYgKFBS
RURJQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdseWZfdGFibGUtPmRzdF9vZmZzZXQg
KwotICAgICAgZ2x5Zl90YWJsZS0+ZHN0X2xlbmd0aCkgPiBkc3RfbGVuZ3RoKSkgewotICAgIHJl
dHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQotICBpZiAoUFJFRElDVF9GQUxT
RShzdGF0aWNfY2FzdDx1aW50NjRfdD4obG9jYV90YWJsZS0+ZHN0X29mZnNldCArCi0gICAgICBs
b2NhX3RhYmxlLT5kc3RfbGVuZ3RoKSA+IGRzdF9sZW5ndGgpKSB7CisgIGFzc2VydCh4X21pbnMu
c2l6ZSgpID09IG51bV9nbHlwaHMpOworCisgIC8vIG51bV9nbHlwaHMgMCBpcyBPSyBpZiB0aGVy
ZSBpcyBubyAnZ2x5ZicgYnV0IGNhbm5vdCB0aGVuIHhmb3JtICdobXR4Jy4KKyAgaWYgKFBSRURJ
Q1RfRkFMU0UobnVtX2htZXRyaWNzID4gbnVtX2dseXBocykpIHsKICAgICByZXR1cm4gRk9OVF9D
T01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0KLSAgQnVmZmVyIGdseWZfYnVmZihkc3QgKyBnbHlm
X3RhYmxlLT5kc3Rfb2Zmc2V0LCBnbHlmX3RhYmxlLT5kc3RfbGVuZ3RoKTsKLSAgQnVmZmVyIGxv
Y2FfYnVmZihkc3QgKyBsb2NhX3RhYmxlLT5kc3Rfb2Zmc2V0LCBsb2NhX3RhYmxlLT5kc3RfbGVu
Z3RoKTsKLSAgaW50MTZfdCBsb2NhX2Zvcm1hdDsKLSAgaWYgKGxvY2FfdGFibGUtPmRzdF9sZW5n
dGggPT0gMiAqIChudW1fZ2x5cGhzICsgMSkpIHsKLSAgICBsb2NhX2Zvcm1hdCA9IDA7Ci0gIH0g
ZWxzZSBpZiAobG9jYV90YWJsZS0+ZHN0X2xlbmd0aCA9PSA0ICogKG51bV9nbHlwaHMgKyAxKSkg
ewotICAgIGxvY2FfZm9ybWF0ID0gMTsKLSAgfSBlbHNlIHsKKworICAvLyBodHRwczovL3d3dy5t
aWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL2htdHguaHRtCisgIC8vICIuLi5vbmx5IG9u
ZSBlbnRyeSBuZWVkIGJlIGluIHRoZSBhcnJheSwgYnV0IHRoYXQgZW50cnkgaXMgcmVxdWlyZWQu
IgorICBpZiAoUFJFRElDVF9GQUxTRShudW1faG1ldHJpY3MgPCAxKSkgewogICAgIHJldHVybiBG
T05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQogCkBAIC02OTMsMTAgKzcwMiw3IEBAIGJv
b2wgUmVjb25zdHJ1Y3RUcmFuc2Zvcm1lZEhtdHgoY29uc3QgdWludDhfdCogdHJhbnNmb3JtZWRf
YnVmLAogICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICB9
CiAgICAgfSBlbHNlIHsKLSAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFSZWFkR2x5cGhYTWluKCZn
bHlmX2J1ZmYsICZsb2NhX2J1ZmYsIGxvY2FfZm9ybWF0LCBpLAotICAgICAgICAgICZsc2IpKSkg
ewotICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9Cisg
ICAgICBsc2IgPSB4X21pbnNbaV07CiAgICAgfQogICAgIGxzYnMucHVzaF9iYWNrKGxzYik7CiAg
IH0KQEAgLTcwOCwyNSArNzE0LDE2IEBAIGJvb2wgUmVjb25zdHJ1Y3RUcmFuc2Zvcm1lZEhtdHgo
Y29uc3QgdWludDhfdCogdHJhbnNmb3JtZWRfYnVmLAogICAgICAgICByZXR1cm4gRk9OVF9DT01Q
UkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgIGlmIChQUkVE
SUNUX0ZBTFNFKCFSZWFkR2x5cGhYTWluKCZnbHlmX2J1ZmYsICZsb2NhX2J1ZmYsIGxvY2FfZm9y
bWF0LCBpLAotICAgICAgICAgICZsc2IpKSkgewotICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVT
U0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9CisgICAgICBsc2IgPSB4X21pbnNbaV07CiAgICAgfQog
ICAgIGxzYnMucHVzaF9iYWNrKGxzYik7CiAgIH0KIAogICAvLyBiYWtlIG1lIGEgc2hpbnkgbmV3
IGhtdHggdGFibGUKICAgdWludDMyX3QgaG10eF9vdXRwdXRfc2l6ZSA9IDIgKiBudW1fZ2x5cGhz
ICsgMiAqIG51bV9obWV0cmljczsKLSAgaWYgKGhtdHhfb3V0cHV0X3NpemUgPiBobXR4X3RhYmxl
LT5kc3RfbGVuZ3RoKSB7Ci0gICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwot
ICB9Ci0gIGlmIChQUkVESUNUX0ZBTFNFKHN0YXRpY19jYXN0PHVpbnQ2NF90PihobXR4X3RhYmxl
LT5kc3Rfb2Zmc2V0ICsKLSAgICAgIGhtdHhfdGFibGUtPmRzdF9sZW5ndGgpID4gZHN0X2xlbmd0
aCkpIHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLQotICBz
aXplX3QgZHN0X29mZnNldCA9IGhtdHhfdGFibGUtPmRzdF9vZmZzZXQ7CisgIHN0ZDo6dmVjdG9y
PHVpbnQ4X3Q+IGhtdHhfdGFibGUoaG10eF9vdXRwdXRfc2l6ZSk7CisgIHVpbnQ4X3QqIGRzdCA9
ICZobXR4X3RhYmxlWzBdOworICBzaXplX3QgZHN0X29mZnNldCA9IDA7CiAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBudW1fZ2x5cGhzOyBpKyspIHsKICAgICBpZiAoaSA8IG51bV9obWV0cmlj
cykgewogICAgICAgU3RvcmUxNihhZHZhbmNlX3dpZHRoc1tpXSwgJmRzdF9vZmZzZXQsIGRzdCk7
CkBAIC03MzQsMTUyICs3MzEsMTQgQEAgYm9vbCBSZWNvbnN0cnVjdFRyYW5zZm9ybWVkSG10eChj
b25zdCB1aW50OF90KiB0cmFuc2Zvcm1lZF9idWYsCiAgICAgU3RvcmUxNihsc2JzW2ldLCAmZHN0
X29mZnNldCwgZHN0KTsKICAgfQogCi0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlY29uc3Ry
dWN0VHJhbnNmb3JtZWRHbHlmKGNvbnN0IHVpbnQ4X3QqIHRyYW5zZm9ybWVkX2J1ZiwKLSAgICBz
aXplX3QgdHJhbnNmb3JtZWRfc2l6ZSwgY29uc3QgVGFibGUqIGdseWZfdGFibGUsIGNvbnN0IFRh
YmxlKiBsb2NhX3RhYmxlLAotICAgIHVpbnQ4X3QqIGRzdCwgc2l6ZV90IGRzdF9sZW5ndGgpIHsK
LSAgaWYgKFBSRURJQ1RfRkFMU0UoZ2x5Zl90YWJsZSA9PSBOVUxMIHx8IGxvY2FfdGFibGUgPT0g
TlVMTCkpIHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAg
aWYgKFBSRURJQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdseWZfdGFibGUtPmRzdF9v
ZmZzZXQgKwotICAgICAgZ2x5Zl90YWJsZS0+ZHN0X2xlbmd0aCkgPiBkc3RfbGVuZ3RoKSkgewot
ICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQotICBpZiAoUFJFRElD
VF9GQUxTRShzdGF0aWNfY2FzdDx1aW50NjRfdD4obG9jYV90YWJsZS0+ZHN0X29mZnNldCArCi0g
ICAgIGxvY2FfdGFibGUtPmRzdF9sZW5ndGgpID4gZHN0X2xlbmd0aCkpIHsKLSAgICByZXR1cm4g
Rk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAgcmV0dXJuIFJlY29uc3RydWN0R2x5
Zih0cmFuc2Zvcm1lZF9idWYsIHRyYW5zZm9ybWVkX3NpemUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgZHN0ICsgZ2x5Zl90YWJsZS0+ZHN0X29mZnNldCwgZ2x5Zl90YWJsZS0+ZHN0X2xlbmd0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkc3QgKyBsb2NhX3RhYmxlLT5kc3Rfb2Zmc2V0
LCBsb2NhX3RhYmxlLT5kc3RfbGVuZ3RoKTsKLX0KLQotLy8gUmVjb25zdHJ1Y3RzIGEgc2luZ2xl
IGZvbnQuIHRhYmxlcyBtdXN0IG5vdCBjb250YWluIGR1cGxpY2F0ZXMuCi1ib29sIFJlY29uc3Ry
dWN0VHJhbnNmb3JtZWQoY29uc3Qgc3RkOjp2ZWN0b3I8VGFibGU+JiB0YWJsZXMsIHVpbnQzMl90
IHRhZywKLSAgICBjb25zdCB1aW50OF90KiB0cmFuc2Zvcm1lZF9idWYsIHNpemVfdCB0cmFuc2Zv
cm1lZF9zaXplLAotICAgIHVpbnQ4X3QqIGRzdCwgc2l6ZV90IGRzdF9sZW5ndGgpIHsKLQotICBp
ZiAodGFnID09IGtHbHlmVGFibGVUYWcpIHsKLSAgICBjb25zdCBUYWJsZSogZ2x5Zl90YWJsZSA9
IEZpbmRUYWJsZSh0YWJsZXMsIHRhZyk7Ci0gICAgY29uc3QgVGFibGUqIGxvY2FfdGFibGUgPSBG
aW5kVGFibGUodGFibGVzLCBrTG9jYVRhYmxlVGFnKTsKLSAgICByZXR1cm4gUmVjb25zdHJ1Y3RU
cmFuc2Zvcm1lZEdseWYodHJhbnNmb3JtZWRfYnVmLCB0cmFuc2Zvcm1lZF9zaXplLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlmX3RhYmxlLCBsb2NhX3RhYmxlLCBk
c3QsIGRzdF9sZW5ndGgpOwotICB9IGVsc2UgaWYgKHRhZyA9PSBrTG9jYVRhYmxlVGFnKSB7Ci0g
ICAgLy8gcHJvY2Vzc2luZyB3YXMgYWxyZWFkeSBkb25lIGJ5IGdseWYgdGFibGUsIGJ1dCB2YWxp
ZGF0ZQotICAgIGlmIChQUkVESUNUX0ZBTFNFKCFGaW5kVGFibGUodGFibGVzLCBrR2x5ZlRhYmxl
VGFnKSkpIHsKLSAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9
Ci0gIH0gZWxzZSBpZiAodGFnID09IGtIbXR4VGFibGVUYWcpIHsKLSAgICAvLyBUYWJsZXMgYXJl
IHNvcnRlZCBmb3IgYSBub24tY29sbGVjdGlvbi4KLSAgICAvLyBnbHlmIGlzIGJlZm9yZSBobXR4
IGFuZCBpbmNsdWRlcyBsb2NhIHNvIGFsbCBvdXIgYWNjZXNzZXMgYXJlIHNhZmUuCi0gICAgY29u
c3QgVGFibGUqIGdseWZfdGFibGUgPSBGaW5kVGFibGUodGFibGVzLCBrR2x5ZlRhYmxlVGFnKTsK
LSAgICBjb25zdCBUYWJsZSogaGhlYV90YWJsZSA9IEZpbmRUYWJsZSh0YWJsZXMsIGtIaGVhVGFi
bGVUYWcpOwotICAgIGNvbnN0IFRhYmxlKiBobXR4X3RhYmxlID0gRmluZFRhYmxlKHRhYmxlcywg
a0htdHhUYWJsZVRhZyk7Ci0gICAgY29uc3QgVGFibGUqIGxvY2FfdGFibGUgPSBGaW5kVGFibGUo
dGFibGVzLCBrTG9jYVRhYmxlVGFnKTsKLSAgICBjb25zdCBUYWJsZSogbWF4cF90YWJsZSA9IEZp
bmRUYWJsZSh0YWJsZXMsIGtNYXhwVGFibGVUYWcpOwotCi0gICAgaWYgKFBSRURJQ1RfRkFMU0Uo
IVJlY29uc3RydWN0VHJhbnNmb3JtZWRIbXR4KAotICAgICAgICB0cmFuc2Zvcm1lZF9idWYsIHRy
YW5zZm9ybWVkX3NpemUsIGdseWZfdGFibGUsIGhoZWFfdGFibGUsCi0gICAgICAgIGhtdHhfdGFi
bGUsIGxvY2FfdGFibGUsIG1heHBfdGFibGUsIGRzdCwgZHN0X2xlbmd0aCkpKSB7Ci0gICAgICBy
ZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgfQotICB9IGVsc2UgewotICAg
IC8vIHRyYW5zZm9ybSBmb3IgdGhlIHRhZyBpcyBub3Qga25vd24KKyAgKmNoZWNrc3VtID0gQ29t
cHV0ZVVMb25nU3VtKCZobXR4X3RhYmxlWzBdLCBobXR4X291dHB1dF9zaXplKTsKKyAgaWYgKFBS
RURJQ1RfRkFMU0UoIW91dC0+V3JpdGUoJmhtdHhfdGFibGVbMF0sIGhtdHhfb3V0cHV0X3NpemUp
KSkgewogICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQotICByZXR1
cm4gdHJ1ZTsKLX0KLQotdWludDMyX3QgQ29tcHV0ZUNoZWNrc3VtKGNvbnN0IFRhYmxlKiB0YWJs
ZSwgY29uc3QgdWludDhfdCogZHN0KSB7Ci0gIHJldHVybiBDb21wdXRlVUxvbmdTdW0oZHN0ICsg
dGFibGUtPmRzdF9vZmZzZXQsIHRhYmxlLT5kc3RfbGVuZ3RoKTsKLX0KLQotY29uc3QgVGFibGUq
IEZpbmRUYWJsZShUdGNGb250IHR0Y19mb250LCBjb25zdCBzdGQ6OnZlY3RvcjxUYWJsZT4mIHRh
YmxlcywKLSAgdWludDMyX3QgdGFnKSB7Ci0gIGZvciAoY29uc3QgYXV0byBpIDogdHRjX2ZvbnQu
dGFibGVfaW5kaWNlcykgewotICAgIGlmICh0YWJsZXNbaV0udGFnID09IHRhZykgcmV0dXJuICZ0
YWJsZXNbaV07Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLWJvb2wgRml4Q29sbGVjdGlvbkNo
ZWNrc3VtcyhzaXplX3QgaGVhZGVyX3ZlcnNpb24sCi0gIGNvbnN0IHN0ZDo6dmVjdG9yPFRhYmxl
PiYgdGFibGVzLCBjb25zdCBzdGQ6OnZlY3RvcjxUdGNGb250PiYgdHRjX2ZvbnRzLAotICB1aW50
OF90KiBkc3QpIHsKLSAgc2l6ZV90IG9mZnNldCA9IENvbGxlY3Rpb25IZWFkZXJTaXplKGhlYWRl
cl92ZXJzaW9uLCB0dGNfZm9udHMuc2l6ZSgpKTsKLQotICBmb3IgKGNvbnN0IGF1dG8mIHR0Y19m
b250IDogdHRjX2ZvbnRzKSB7Ci0gICAgb2Zmc2V0ICs9IDEyOyAgLy8gbW92ZSB0byBzdGFydCBv
ZiBPZmZzZXQgVGFibGUKLSAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50MTZfdD4mIHRhYmxlX2lu
ZGljZXMgPSB0dGNfZm9udC50YWJsZV9pbmRpY2VzOwotCi0gICAgY29uc3QgVGFibGUqIGhlYWRf
dGFibGUgPSBGaW5kVGFibGUodHRjX2ZvbnQsIHRhYmxlcywga0hlYWRUYWJsZVRhZyk7Ci0gICAg
aWYgKFBSRURJQ1RfRkFMU0UoaGVhZF90YWJsZSA9PSBOVUxMIHx8Ci0gICAgICAgIGhlYWRfdGFi
bGUtPmRzdF9sZW5ndGggPCBrQ2hlY2tTdW1BZGp1c3RtZW50T2Zmc2V0ICsgNCkpIHsKLSAgICAg
IHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9Ci0KLSAgICBzaXplX3Qg
Zmlyc3RfdGFibGVfb2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsK
LSAgICBmb3IgKGNvbnN0IGF1dG8gaW5kZXggOiB0YWJsZV9pbmRpY2VzKSB7Ci0gICAgICBjb25z
dCBhdXRvJiB0YWJsZSA9IHRhYmxlc1tpbmRleF07Ci0gICAgICBpZiAodGFibGUuZHN0X29mZnNl
dCA8IGZpcnN0X3RhYmxlX29mZnNldCkgewotICAgICAgICBmaXJzdF90YWJsZV9vZmZzZXQgPSB0
YWJsZS5kc3Rfb2Zmc2V0OwotICAgICAgfQotICAgIH0KLQotICAgIHNpemVfdCBhZGp1c3RtZW50
X29mZnNldCA9IGhlYWRfdGFibGUtPmRzdF9vZmZzZXQKLSAgICAgICsga0NoZWNrU3VtQWRqdXN0
bWVudE9mZnNldDsKLSAgICBTdG9yZVUzMihkc3QsIGFkanVzdG1lbnRfb2Zmc2V0LCAwKTsKLQot
ICAgIHVpbnQzMl90IGZpbGVfY2hlY2tzdW0gPSAwOwotICAgIC8vIGNvbXB1dGUgZWFjaCB0YWJs
ZXMgY2hlY2tzdW0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhYmxlX2luZGljZXMuc2l6
ZSgpOyBpKyspIHsKLSAgICAgIGNvbnN0IFRhYmxlJiB0YWJsZSA9IHRhYmxlc1t0YWJsZV9pbmRp
Y2VzW2ldXTsKLSAgICAgIHVpbnQzMl90IHRhYmxlX2NoZWNrc3VtID0gQ29tcHV0ZUNoZWNrc3Vt
KCZ0YWJsZSwgZHN0KTsKLSAgICAgIHNpemVfdCBjaGVja3N1bV9vZmZzZXQgPSBvZmZzZXQgKyA0
OyAgLy8gc2tpcCBwYXN0IHRhZyB0byBjaGVja1N1bQotCi0gICAgICAvLyB3cml0ZSB0aGUgY2hl
Y2tzdW0gZm9yIHRoZSBUYWJsZSBSZWNvcmQKLSAgICAgIFN0b3JlVTMyKGRzdCwgY2hlY2tzdW1f
b2Zmc2V0LCB0YWJsZV9jaGVja3N1bSk7Ci0gICAgICBmaWxlX2NoZWNrc3VtICs9IHRhYmxlX2No
ZWNrc3VtOwotICAgICAgLy8gbmV4dCBUYWJsZSBSZWNvcmQKLSAgICAgIG9mZnNldCArPSAxNjsK
LSAgICB9Ci0KLSAgICBzaXplX3QgaGVhZGVyX3NpemUgPSBrU2ZudEhlYWRlclNpemUgKwotICAg
ICAga1NmbnRFbnRyeVNpemUgKiB0YWJsZV9pbmRpY2VzLnNpemUoKTsKLSAgICB1aW50MzJfdCBo
ZWFkZXJfY2hlY2tzdW0gPSBDb21wdXRlVUxvbmdTdW0oZHN0ICsgdHRjX2ZvbnQuZHN0X29mZnNl
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVy
X3NpemUpOwotCi0gICAgZmlsZV9jaGVja3N1bSArPSBoZWFkZXJfY2hlY2tzdW07Ci0gICAgdWlu
dDMyX3QgY2hlY2tzdW1fYWRqdXN0bWVudCA9IDB4YjFiMGFmYmEgLSBmaWxlX2NoZWNrc3VtOwot
ICAgIFN0b3JlVTMyKGRzdCwgYWRqdXN0bWVudF9vZmZzZXQsIGNoZWNrc3VtX2FkanVzdG1lbnQp
OwotICB9CiAKICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRml4Q2hlY2tzdW1zKGNvbnN0IHN0
ZDo6dmVjdG9yPFRhYmxlPiYgdGFibGVzLCB1aW50OF90KiBkc3QpIHsKLSAgY29uc3QgVGFibGUq
IGhlYWRfdGFibGUgPSBGaW5kVGFibGUodGFibGVzLCBrSGVhZFRhYmxlVGFnKTsKLSAgaWYgKFBS
RURJQ1RfRkFMU0UoaGVhZF90YWJsZSA9PSBOVUxMIHx8Ci0gICAgICBoZWFkX3RhYmxlLT5kc3Rf
bGVuZ3RoIDwga0NoZWNrU3VtQWRqdXN0bWVudE9mZnNldCArIDQpKSB7Ci0gICAgcmV0dXJuIEZP
TlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwotICB9Ci0gIHNpemVfdCBhZGp1c3RtZW50X29mZnNl
dCA9IGhlYWRfdGFibGUtPmRzdF9vZmZzZXQgKyBrQ2hlY2tTdW1BZGp1c3RtZW50T2Zmc2V0Owot
ICBTdG9yZVUzMihkc3QsIGFkanVzdG1lbnRfb2Zmc2V0LCAwKTsKLSAgc2l6ZV90IG5fdGFibGVz
ID0gdGFibGVzLnNpemUoKTsKLSAgdWludDMyX3QgZmlsZV9jaGVja3N1bSA9IDA7Ci0gIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbl90YWJsZXM7ICsraSkgewotICAgIHVpbnQzMl90IGNoZWNrc3Vt
ID0gQ29tcHV0ZUNoZWNrc3VtKCZ0YWJsZXNbaV0sIGRzdCk7Ci0gICAgU3RvcmVVMzIoZHN0LCBr
U2ZudEhlYWRlclNpemUgKyBpICoga1NmbnRFbnRyeVNpemUgKyA0LCBjaGVja3N1bSk7Ci0gICAg
ZmlsZV9jaGVja3N1bSArPSBjaGVja3N1bTsKLSAgfQotICBmaWxlX2NoZWNrc3VtICs9IENvbXB1
dGVVTG9uZ1N1bShkc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTZm50
SGVhZGVyU2l6ZSArIGtTZm50RW50cnlTaXplICogbl90YWJsZXMpOwotICB1aW50MzJfdCBjaGVj
a3N1bV9hZGp1c3RtZW50ID0gMHhiMWIwYWZiYSAtIGZpbGVfY2hlY2tzdW07Ci0gIFN0b3JlVTMy
KGRzdCwgYWRqdXN0bWVudF9vZmZzZXQsIGNoZWNrc3VtX2FkanVzdG1lbnQpOwotICByZXR1cm4g
dHJ1ZTsKLX0KLQogYm9vbCBXb2ZmMlVuY29tcHJlc3ModWludDhfdCogZHN0X2J1Ziwgc2l6ZV90
IGRzdF9zaXplLAogICBjb25zdCB1aW50OF90KiBzcmNfYnVmLCBzaXplX3Qgc3JjX3NpemUpIHsK
ICAgc2l6ZV90IHVuY29tcHJlc3NlZF9zaXplID0gZHN0X3NpemU7CkBAIC04OTMsNiArNzUyLDcg
QEAgYm9vbCBXb2ZmMlVuY29tcHJlc3ModWludDhfdCogZHN0X2J1Ziwgc2l6ZV90IGRzdF9zaXpl
LAogCiBib29sIFJlYWRUYWJsZURpcmVjdG9yeShCdWZmZXIqIGZpbGUsIHN0ZDo6dmVjdG9yPFRh
YmxlPiogdGFibGVzLAogICAgIHNpemVfdCBudW1fdGFibGVzKSB7CisgIHVpbnQzMl90IHNyY19v
ZmZzZXQgPSAwOwogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bV90YWJsZXM7ICsraSkgewog
ICAgIFRhYmxlKiB0YWJsZSA9ICYoKnRhYmxlcylbaV07CiAgICAgdWludDhfdCBmbGFnX2J5dGU7
CkBAIC05MzMsNiArNzkzLDEzIEBAIGJvb2wgUmVhZFRhYmxlRGlyZWN0b3J5KEJ1ZmZlciogZmls
ZSwgc3RkOjp2ZWN0b3I8VGFibGU+KiB0YWJsZXMsCiAgICAgICAgIHJldHVybiBGT05UX0NPTVBS
RVNTSU9OX0ZBSUxVUkUoKTsKICAgICAgIH0KICAgICB9CisgICAgaWYgKFBSRURJQ1RfRkFMU0Uo
c3JjX29mZnNldCArIHRyYW5zZm9ybV9sZW5ndGggPCBzcmNfb2Zmc2V0KSkgeworICAgICAgcmV0
dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICAgIH0KKyAgICB0YWJsZS0+c3JjX29m
ZnNldCA9IHNyY19vZmZzZXQ7CisgICAgdGFibGUtPnNyY19sZW5ndGggPSB0cmFuc2Zvcm1fbGVu
Z3RoOworICAgIHNyY19vZmZzZXQgKz0gdHJhbnNmb3JtX2xlbmd0aDsKKwogICAgIHRhYmxlLT50
YWcgPSB0YWc7CiAgICAgdGFibGUtPmZsYWdzID0gZmxhZ3M7CiAgICAgdGFibGUtPnRyYW5zZm9y
bV9sZW5ndGggPSB0cmFuc2Zvcm1fbGVuZ3RoOwpAQCAtOTQxLDE5ICs4MDgsNiBAQCBib29sIFJl
YWRUYWJsZURpcmVjdG9yeShCdWZmZXIqIGZpbGUsIHN0ZDo6dmVjdG9yPFRhYmxlPiogdGFibGVz
LAogICByZXR1cm4gdHJ1ZTsKIH0KIAotfSAgLy8gbmFtZXNwYWNlCi0KLXNpemVfdCBDb21wdXRl
V09GRjJGaW5hbFNpemUoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkgewotICBC
dWZmZXIgZmlsZShkYXRhLCBsZW5ndGgpOwotICB1aW50MzJfdCB0b3RhbF9sZW5ndGg7Ci0KLSAg
aWYgKCFmaWxlLlNraXAoMTYpIHx8Ci0gICAgICAhZmlsZS5SZWFkVTMyKCZ0b3RhbF9sZW5ndGgp
KSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgcmV0dXJuIHRvdGFsX2xlbmd0aDsKLX0KLQogLy8g
V3JpdGVzIGEgc2luZ2xlIE9mZnNldCBUYWJsZSBlbnRyeQogc2l6ZV90IFN0b3JlT2Zmc2V0VGFi
bGUodWludDhfdCogcmVzdWx0LCBzaXplX3Qgb2Zmc2V0LCB1aW50MzJfdCBmbGF2b3IsCiAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBudW1fdGFibGVzKSB7CkBAIC05NzEsNjIgKzgy
NSwxODUgQEAgc2l6ZV90IFN0b3JlT2Zmc2V0VGFibGUodWludDhfdCogcmVzdWx0LCBzaXplX3Qg
b2Zmc2V0LCB1aW50MzJfdCBmbGF2b3IsCiAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLXNpemVfdCBT
dG9yZVRhYmxlRW50cnkodWludDhfdCogcmVzdWx0LCBjb25zdCBUYWJsZSYgdGFibGUsIHNpemVf
dCBvZmZzZXQpIHsKLSAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIHRhYmxlLnRh
Zyk7Ci0gIG9mZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCAwKTsgIC8vIGNoZWNrc3Vt
LCB0byBmaWxsIGluIGxhdGVyCi0gIG9mZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCB0
YWJsZS5kc3Rfb2Zmc2V0KTsKLSAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIHRh
YmxlLmRzdF9sZW5ndGgpOworc2l6ZV90IFN0b3JlVGFibGVFbnRyeSh1aW50OF90KiByZXN1bHQs
IHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgdGFnKSB7CisgIG9mZnNldCA9IFN0b3JlVTMyKHJl
c3VsdCwgb2Zmc2V0LCB0YWcpOworICBvZmZzZXQgPSBTdG9yZVUzMihyZXN1bHQsIG9mZnNldCwg
MCk7CisgIG9mZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCAwKTsKKyAgb2Zmc2V0ID0g
U3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIDApOwogICByZXR1cm4gb2Zmc2V0OwogfQogCiAvLyBG
aXJzdCB0YWJsZSBnb2VzIGFmdGVyIGFsbCB0aGUgaGVhZGVycywgdGFibGUgZGlyZWN0b3J5LCBl
dGMKLXVpbnQ2NF90IENvbXB1dGVPZmZzZXRUb0ZpcnN0VGFibGUoY29uc3QgdWludDMyX3QgaGVh
ZGVyX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVp
bnQxNl90IG51bV90YWJsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPFR0Y0ZvbnQ+JiB0dGNfZm9udHMpIHsKK3VpbnQ2NF90IENvbXB1dGVP
ZmZzZXRUb0ZpcnN0VGFibGUoY29uc3QgV09GRjJIZWFkZXImIGhkcikgewogICB1aW50NjRfdCBv
ZmZzZXQgPSBrU2ZudEhlYWRlclNpemUgKwotICAgIGtTZm50RW50cnlTaXplICogc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KG51bV90YWJsZXMpOwotICBpZiAoaGVhZGVyX3ZlcnNpb24pIHsKLSAgICBv
ZmZzZXQgPSBDb2xsZWN0aW9uSGVhZGVyU2l6ZShoZWFkZXJfdmVyc2lvbiwgdHRjX2ZvbnRzLnNp
emUoKSkKLSAgICAgICsga1NmbnRIZWFkZXJTaXplICogdHRjX2ZvbnRzLnNpemUoKTsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIHR0Y19mb250IDogdHRjX2ZvbnRzKSB7Ci0gICAgICBvZmZzZXQgKz0K
LSAgICAgICAga1NmbnRFbnRyeVNpemUgKiB0dGNfZm9udC50YWJsZV9pbmRpY2VzLnNpemUoKTsK
KyAgICBrU2ZudEVudHJ5U2l6ZSAqIHN0YXRpY19jYXN0PHVpbnQ2NF90PihoZHIubnVtX3RhYmxl
cyk7CisgIGlmIChoZHIuaGVhZGVyX3ZlcnNpb24pIHsKKyAgICBvZmZzZXQgPSBDb2xsZWN0aW9u
SGVhZGVyU2l6ZShoZHIuaGVhZGVyX3ZlcnNpb24sIGhkci50dGNfZm9udHMuc2l6ZSgpKQorICAg
ICAgKyBrU2ZudEhlYWRlclNpemUgKiBoZHIudHRjX2ZvbnRzLnNpemUoKTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIHR0Y19mb250IDogaGRyLnR0Y19mb250cykgeworICAgICAgb2Zmc2V0ICs9IGtT
Zm50RW50cnlTaXplICogdHRjX2ZvbnQudGFibGVfaW5kaWNlcy5zaXplKCk7CiAgICAgfQogICB9
CiAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLWJvb2wgUmVjb25zdHJ1Y3RUcmFuc2Zvcm1lZEZvbnQo
Y29uc3Qgc3RkOjp2ZWN0b3I8VGFibGU+JiB0YWJsZXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6bWFwPHVpbnQzMl90LCBjb25zdCB1aW50OF90Kj4qIHNyY19ieV9kZXN0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiByZXN1bHQsIHNpemVf
dCByZXN1bHRfbGVuZ3RoKSB7Ci0gIGZvciAoY29uc3QgYXV0byYgdGFibGUgOiB0YWJsZXMpIHsK
LSAgICBpZiAoKHRhYmxlLmZsYWdzICYga1dvZmYyRmxhZ3NUcmFuc2Zvcm0pICE9IGtXb2ZmMkZs
YWdzVHJhbnNmb3JtKSB7Ci0gICAgICBjb250aW51ZTsKK3N0ZDo6dmVjdG9yPFRhYmxlKj4gVGFi
bGVzKFdPRkYySGVhZGVyKiBoZHIsIHNpemVfdCBmb250X2luZGV4KSB7CisgIHN0ZDo6dmVjdG9y
PFRhYmxlKj4gdGFibGVzOworICBpZiAoUFJFRElDVF9GQUxTRShoZHItPmhlYWRlcl92ZXJzaW9u
KSkgeworICAgIGZvciAoYXV0byBpbmRleCA6IGhkci0+dHRjX2ZvbnRzW2ZvbnRfaW5kZXhdLnRh
YmxlX2luZGljZXMpIHsKKyAgICAgIHRhYmxlcy5wdXNoX2JhY2soJmhkci0+dGFibGVzW2luZGV4
XSk7CisgICAgfQorICB9IGVsc2UgeworICAgIGZvciAoYXV0byYgdGFibGUgOiBoZHItPnRhYmxl
cykgeworICAgICAgdGFibGVzLnB1c2hfYmFjaygmdGFibGUpOworICAgIH0KKyAgfQorICByZXR1
cm4gdGFibGVzOworfQorCisvLyBPZmZzZXQgdGFibGVzIGFzc3VtZWQgdG8gaGF2ZSBiZWVuIHdy
aXR0ZW4gaW4gd2l0aCAwJ3MgaW5pdGlhbGx5LgorLy8gV09GRjJIZWFkZXIgaXNuJ3QgY29uc3Qg
c28gd2UgY2FuIHVzZSBbXSBpbnN0ZWFkIG9mIGF0KCkgKHdoaWNoIHVwc2V0cyBGRikKK2Jvb2wg
UmVjb25zdHJ1Y3RGb250KHVpbnQ4X3QqIHRyYW5zZm9ybWVkX2J1ZiwKKyAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQzMl90IHRyYW5zZm9ybWVkX2J1Zl9zaXplLAorICAgICAgICAgICAg
ICAgICAgICAgUmVidWlsZE1ldGFkYXRhKiBtZXRhZGF0YSwKKyAgICAgICAgICAgICAgICAgICAg
IFdPRkYySGVhZGVyKiBoZHIsCisgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZm9udF9pbmRl
eCwKKyAgICAgICAgICAgICAgICAgICAgIFdPRkYyT3V0KiBvdXQpIHsKKyAgc2l6ZV90IGRlc3Rf
b2Zmc2V0ID0gb3V0LT5TaXplKCk7CisgIHVpbnQ4X3QgdGFibGVfZW50cnlbMTJdOworICBXT0ZG
MkZvbnRJbmZvKiBpbmZvID0gJm1ldGFkYXRhLT5mb250X2luZm9zW2ZvbnRfaW5kZXhdOworICBz
dGQ6OnZlY3RvcjxUYWJsZSo+IHRhYmxlcyA9IFRhYmxlcyhoZHIsIGZvbnRfaW5kZXgpOworCisg
IC8vICdnbHlmJyB3aXRob3V0ICdsb2NhJyBkb2Vzbid0IG1ha2Ugc2Vuc2UKKyAgaWYgKFBSRURJ
Q1RfRkFMU0Uoc3RhdGljX2Nhc3Q8Ym9vbD4oRmluZFRhYmxlKCZ0YWJsZXMsIGtHbHlmVGFibGVU
YWcpKSAhPQorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxib29sPihGaW5kVGFibGUo
JnRhYmxlcywga0xvY2FUYWJsZVRhZykpKSkgeworICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9O
X0ZBSUxVUkUoKTsKKyAgfQorCisgIHVpbnQzMl90IGZvbnRfY2hlY2tzdW0gPSBtZXRhZGF0YS0+
aGVhZGVyX2NoZWNrc3VtOworICBpZiAoaGRyLT5oZWFkZXJfdmVyc2lvbikgeworICAgIGZvbnRf
Y2hlY2tzdW0gPSBoZHItPnR0Y19mb250c1tmb250X2luZGV4XS5oZWFkZXJfY2hlY2tzdW07Cisg
IH0KKworICB1aW50MzJfdCBsb2NhX2NoZWNrc3VtID0gMDsKKyAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB0YWJsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICBUYWJsZSYgdGFibGUgPSAqdGFibGVzW2ld
OworCisgICAgc3RkOjpwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4gY2hlY2tzdW1fa2V5ID0ge3Rh
YmxlLnRhZywgdGFibGUuc3JjX29mZnNldH07CisgICAgYm9vbCByZXVzZWQgPSBtZXRhZGF0YS0+
Y2hlY2tzdW1zLmZpbmQoY2hlY2tzdW1fa2V5KQorICAgICAgICAgICAgICAgIT0gbWV0YWRhdGEt
PmNoZWNrc3Vtcy5lbmQoKTsKKyAgICBpZiAoUFJFRElDVF9GQUxTRShmb250X2luZGV4ID09IDAg
JiYgcmV1c2VkKSkgeworICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwor
ICAgIH0KKworICAgIC8vIFRPRE8odXNlcikgYSBjb2xsZWN0aW9uIHdpdGggb3B0aW1pemVkIGht
dHggdGhhdCByZXVzZWQgZ2x5Zi9sb2NhCisgICAgLy8gd291bGQgZmFpbC4gV2UgZG9uJ3Qgb3B0
aW1pemUgaG10eCBmb3IgY29sbGVjdGlvbnMgeWV0LgorICAgIGlmIChQUkVESUNUX0ZBTFNFKHN0
YXRpY19jYXN0PHVpbnQ2NF90Pih0YWJsZS5zcmNfb2Zmc2V0ICsgdGFibGUuc3JjX2xlbmd0aCkK
KyAgICAgICAgPiB0cmFuc2Zvcm1lZF9idWZfc2l6ZSkpIHsKKyAgICAgIHJldHVybiBGT05UX0NP
TVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICB9CisKKyAgICBpZiAodGFibGUudGFnID09IGtIaGVh
VGFibGVUYWcpIHsKKyAgICAgIGlmICghUmVhZE51bUhNZXRyaWNzKHRyYW5zZm9ybWVkX2J1ZiAr
IHRhYmxlLnNyY19vZmZzZXQsCisgICAgICAgICAgdGFibGUuc3JjX2xlbmd0aCwgJmluZm8tPm51
bV9obWV0cmljcykpIHsKKyAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgp
OworICAgICAgfQorICAgIH0KKworICAgIHVpbnQzMl90IGNoZWNrc3VtID0gMDsKKyAgICBpZiAo
IXJldXNlZCkgeworICAgICAgaWYgKCh0YWJsZS5mbGFncyAmIGtXb2ZmMkZsYWdzVHJhbnNmb3Jt
KSAhPSBrV29mZjJGbGFnc1RyYW5zZm9ybSkgeworICAgICAgICBpZiAodGFibGUudGFnID09IGtI
ZWFkVGFibGVUYWcpIHsKKyAgICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSh0YWJsZS5zcmNfbGVu
Z3RoIDwgMTIpKSB7CisgICAgICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJF
KCk7CisgICAgICAgICAgfQorICAgICAgICAgIC8vIGNoZWNrU3VtQWRqdXN0bWVudCA9IDAKKyAg
ICAgICAgICBTdG9yZVUzMih0cmFuc2Zvcm1lZF9idWYgKyB0YWJsZS5zcmNfb2Zmc2V0LCA4LCAw
KTsKKyAgICAgICAgfQorICAgICAgICB0YWJsZS5kc3Rfb2Zmc2V0ID0gZGVzdF9vZmZzZXQ7Cisg
ICAgICAgIGNoZWNrc3VtID0gQ29tcHV0ZVVMb25nU3VtKHRyYW5zZm9ybWVkX2J1ZiArIHRhYmxl
LnNyY19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLnNy
Y19sZW5ndGgpOworICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSghb3V0LT5Xcml0ZSh0cmFuc2Zv
cm1lZF9idWYgKyB0YWJsZS5zcmNfb2Zmc2V0LAorICAgICAgICAgICAgdGFibGUuc3JjX2xlbmd0
aCkpKSB7CisgICAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICAg
ICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAodGFibGUudGFnID09IGtHbHlmVGFi
bGVUYWcpIHsKKyAgICAgICAgICB0YWJsZS5kc3Rfb2Zmc2V0ID0gZGVzdF9vZmZzZXQ7CisKKyAg
ICAgICAgICBUYWJsZSogbG9jYV90YWJsZSA9IEZpbmRUYWJsZSgmdGFibGVzLCBrTG9jYVRhYmxl
VGFnKTsKKyAgICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSghUmVjb25zdHJ1Y3RHbHlmKHRyYW5z
Zm9ybWVkX2J1ZiArIHRhYmxlLnNyY19vZmZzZXQsCisgICAgICAgICAgICAgICZ0YWJsZSwgJmNo
ZWNrc3VtLCBsb2NhX3RhYmxlLCAmbG9jYV9jaGVja3N1bSwgaW5mbywgb3V0KSkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAodGFibGUudGFnID09IGtMb2NhVGFibGVUYWcpIHsKKyAgICAgICAg
ICAvLyBBbGwgdGhlIHdvcmsgd2FzIGRvbmUgYnkgUmVjb25zdHJ1Y3RHbHlmLiBXZSBhbHJlYWR5
IGtub3cgY2hlY2tzdW0uCisgICAgICAgICAgY2hlY2tzdW0gPSBsb2NhX2NoZWNrc3VtOworICAg
ICAgICB9IGVsc2UgaWYgKHRhYmxlLnRhZyA9PSBrSG10eFRhYmxlVGFnKSB7CisgICAgICAgICAg
dGFibGUuZHN0X29mZnNldCA9IGRlc3Rfb2Zmc2V0OworICAgICAgICAgIC8vIFRhYmxlcyBhcmUg
c29ydGVkIHNvIGFsbCB0aGUgaW5mbyB3ZSBuZWVkIGhhcyBiZWVuIGdhdGhlcmVkLgorICAgICAg
ICAgIGlmIChQUkVESUNUX0ZBTFNFKCFSZWNvbnN0cnVjdFRyYW5zZm9ybWVkSG10eCgKKyAgICAg
ICAgICAgICAgdHJhbnNmb3JtZWRfYnVmICsgdGFibGUuc3JjX29mZnNldCwgdGFibGUuc3JjX2xl
bmd0aCwKKyAgICAgICAgICAgICAgaW5mby0+bnVtX2dseXBocywgaW5mby0+bnVtX2htZXRyaWNz
LCBpbmZvLT54X21pbnMsICZjaGVja3N1bSwKKyAgICAgICAgICAgICAgb3V0KSkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVS
RSgpOyAgLy8gdHJhbnNmb3JtIHVua25vd24KKyAgICAgICAgfQorICAgICAgfQorICAgICAgbWV0
YWRhdGEtPmNoZWNrc3Vtc1tjaGVja3N1bV9rZXldID0gY2hlY2tzdW07CisgICAgfSBlbHNlIHsK
KyAgICAgIGNoZWNrc3VtID0gbWV0YWRhdGEtPmNoZWNrc3Vtc1tjaGVja3N1bV9rZXldOworICAg
IH0KKyAgICBmb250X2NoZWNrc3VtICs9IGNoZWNrc3VtOworCisgICAgLy8gdXBkYXRlIHRoZSB0
YWJsZSBlbnRyeSB3aXRoIHJlYWwgdmFsdWVzLgorICAgIFN0b3JlVTMyKHRhYmxlX2VudHJ5LCAw
LCBjaGVja3N1bSk7CisgICAgU3RvcmVVMzIodGFibGVfZW50cnksIDQsIHRhYmxlLmRzdF9vZmZz
ZXQpOworICAgIFN0b3JlVTMyKHRhYmxlX2VudHJ5LCA4LCB0YWJsZS5kc3RfbGVuZ3RoKTsKKyAg
ICBpZiAoUFJFRElDVF9GQUxTRSghb3V0LT5Xcml0ZSh0YWJsZV9lbnRyeSwKKyAgICAgICAgaW5m
by0+dGFibGVfZW50cnlfYnlfdGFnW3RhYmxlLnRhZ10gKyA0LCAxMikpKSB7CisgICAgICByZXR1
cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CisgICAgfQorCisgICAgLy8gV2UgcmVwbGFj
ZWQgMCdzLiBVcGRhdGUgb3ZlcmFsbCBjaGVja3N1bS4KKyAgICBmb250X2NoZWNrc3VtICs9IENv
bXB1dGVVTG9uZ1N1bSh0YWJsZV9lbnRyeSwgMTIpOworCisgICAgaWYgKFBSRURJQ1RfRkFMU0Uo
IVBhZDQob3V0KSkpIHsKKyAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsK
ICAgICB9Ci0gICAgY29uc3QgYXV0byBpdCA9IHNyY19ieV9kZXN0LT5maW5kKHRhYmxlLmRzdF9v
ZmZzZXQpOwotICAgIGlmIChpdCA9PSBzcmNfYnlfZGVzdC0+ZW5kKCkpIHsKLSAgICAgIGNvbnRp
bnVlOworCisgICAgaWYgKFBSRURJQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRhYmxl
LmRzdF9vZmZzZXQgKyB0YWJsZS5kc3RfbGVuZ3RoKQorICAgICAgICA+IG91dC0+U2l6ZSgpKSkg
eworICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0KLSAgICBj
b25zdCB1aW50OF90KiB0cmFuc2Zvcm1fYnVmID0gKCppdCkuc2Vjb25kOwotICAgIHNyY19ieV9k
ZXN0LT5lcmFzZSh0YWJsZS5kc3Rfb2Zmc2V0KTsKKyAgICBkZXN0X29mZnNldCA9IG91dC0+U2l6
ZSgpOworICB9CiAKLSAgICBzaXplX3QgdHJhbnNmb3JtX2xlbmd0aCA9IHRhYmxlLnRyYW5zZm9y
bV9sZW5ndGg7Ci0gICAgaWYgKFBSRURJQ1RfRkFMU0UoIVJlY29uc3RydWN0VHJhbnNmb3JtZWQo
dGFibGVzLCB0YWJsZS50YWcsCi0gICAgICAgICAgICB0cmFuc2Zvcm1fYnVmLCB0cmFuc2Zvcm1f
bGVuZ3RoLCByZXN1bHQsIHJlc3VsdF9sZW5ndGgpKSkgeworICAvLyBVcGRhdGUgJ2hlYWQnIGNo
ZWNrU3VtQWRqdXN0bWVudC4gV2UgYWxyZWFkeSBzZXQgaXQgdG8gMCBhbmQgc3VtbWVkIGZvbnQu
CisgIFRhYmxlKiBoZWFkX3RhYmxlID0gRmluZFRhYmxlKCZ0YWJsZXMsIGtIZWFkVGFibGVUYWcp
OworICBpZiAoaGVhZF90YWJsZSkgeworICAgIGlmIChQUkVESUNUX0ZBTFNFKGhlYWRfdGFibGUt
PmRzdF9sZW5ndGggPCAxMikpIHsKKyAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxV
UkUoKTsKKyAgICB9CisgICAgdWludDhfdCBjaGVja3N1bV9hZGp1c3RtZW50WzRdOworICAgIFN0
b3JlVTMyKGNoZWNrc3VtX2FkanVzdG1lbnQsIDAsIDB4QjFCMEFGQkEgLSBmb250X2NoZWNrc3Vt
KTsKKyAgICBpZiAoUFJFRElDVF9GQUxTRSghb3V0LT5Xcml0ZShjaGVja3N1bV9hZGp1c3RtZW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRfdGFibGUtPmRzdF9vZmZz
ZXQgKyA4LCA0KSkpIHsKICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsK
ICAgICB9CiAgIH0KKwogICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDb252ZXJ0V09GRjJUb1RU
Rih1aW50OF90KiByZXN1bHQsIHNpemVfdCByZXN1bHRfbGVuZ3RoLAotICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7Citib29sIFJlYWRX
T0ZGMkhlYWRlcihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBXT0ZGMkhlYWRl
ciogaGRyKSB7CiAgIEJ1ZmZlciBmaWxlKGRhdGEsIGxlbmd0aCk7CiAKICAgdWludDMyX3Qgc2ln
bmF0dXJlOwotICB1aW50MzJfdCBmbGF2b3I7CiAgIGlmIChQUkVESUNUX0ZBTFNFKCFmaWxlLlJl
YWRVMzIoJnNpZ25hdHVyZSkgfHwgc2lnbmF0dXJlICE9IGtXb2ZmMlNpZ25hdHVyZSB8fAotICAg
ICAgIWZpbGUuUmVhZFUzMigmZmxhdm9yKSkpIHsKKyAgICAgICFmaWxlLlJlYWRVMzIoJmhkci0+
Zmxhdm9yKSkpIHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0K
IApAQCAtMTAzNywxOCArMTAxNCwxNyBAQCBib29sIENvbnZlcnRXT0ZGMlRvVFRGKHVpbnQ4X3Qq
IHJlc3VsdCwgc2l6ZV90IHJlc3VsdF9sZW5ndGgsCiAgICAgICAhZmlsZS5SZWFkVTMyKCZyZXBv
cnRlZF9sZW5ndGgpIHx8IGxlbmd0aCAhPSByZXBvcnRlZF9sZW5ndGgpKSB7CiAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9Ci0gIHVpbnQxNl90IG51bV90YWJsZXM7
Ci0gIGlmIChQUkVESUNUX0ZBTFNFKCFmaWxlLlJlYWRVMTYoJm51bV90YWJsZXMpIHx8ICFudW1f
dGFibGVzKSkgeworICBpZiAoUFJFRElDVF9GQUxTRSghZmlsZS5SZWFkVTE2KCZoZHItPm51bV90
YWJsZXMpIHx8ICFoZHItPm51bV90YWJsZXMpKSB7CiAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJ
T05fRkFJTFVSRSgpOwogICB9CisKICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGVzZSBmaWVs
ZHMgb2YgdGhlIGhlYWRlcjoKICAgLy8gICB1aW50MTZfdCByZXNlcnZlZAotICAvLyAgIHVpbnQz
Ml90IHRvdGFsX3NmbnRfc2l6ZSwgdGhlIGNhbGxlciBhbHJlYWR5IHBhc3NlcyBpdCBhcyByZXN1
bHRfbGVuZ3RoCisgIC8vICAgdWludDMyX3QgdG90YWxfc2ZudF9zaXplLCB3ZSBkb24ndCBiZWxp
ZXZlIHRoaXMsIHdpbGwgY29tcHV0ZSBsYXRlcgogICBpZiAoUFJFRElDVF9GQUxTRSghZmlsZS5T
a2lwKDYpKSkgewogICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQot
ICB1aW50MzJfdCBjb21wcmVzc2VkX2xlbmd0aDsKLSAgaWYgKFBSRURJQ1RfRkFMU0UoIWZpbGUu
UmVhZFUzMigmY29tcHJlc3NlZF9sZW5ndGgpKSkgeworICBpZiAoUFJFRElDVF9GQUxTRSghZmls
ZS5SZWFkVTMyKCZoZHItPmNvbXByZXNzZWRfbGVuZ3RoKSkpIHsKICAgICByZXR1cm4gRk9OVF9D
T01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0KICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGVz
ZSBmaWVsZHMgb2YgdGhlIGhlYWRlcjoKQEAgLTEwODIsMjggKzEwNTgsMzcgQEAgYm9vbCBDb252
ZXJ0V09GRjJUb1RURih1aW50OF90KiByZXN1bHQsIHNpemVfdCByZXN1bHRfbGVuZ3RoLAogICAg
ICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0KICAgfQotICBzdGQ6
OnZlY3RvcjxUYWJsZT4gdGFibGVzKG51bV90YWJsZXMpOwotICBpZiAoUFJFRElDVF9GQUxTRSgh
UmVhZFRhYmxlRGlyZWN0b3J5KCZmaWxlLCAmdGFibGVzLCBudW1fdGFibGVzKSkpIHsKKyAgaGRy
LT50YWJsZXMucmVzaXplKGhkci0+bnVtX3RhYmxlcyk7CisgIGlmIChQUkVESUNUX0ZBTFNFKCFS
ZWFkVGFibGVEaXJlY3RvcnkoCisgICAgICAgICAgJmZpbGUsICZoZHItPnRhYmxlcywgaGRyLT5u
dW1fdGFibGVzKSkpIHsKKyAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Cisg
IH0KKworICAvLyBCZWZvcmUgd2Ugc29ydCBmb3Igb3V0cHV0IHRoZSBsYXN0IHRhYmxlIGVuZCBp
cyB0aGUgdW5jb21wcmVzc2VkIHNpemUuCisgIFRhYmxlJiBsYXN0X3RhYmxlID0gaGRyLT50YWJs
ZXMuYmFjaygpOworICBoZHItPnVuY29tcHJlc3NlZF9zaXplID0gbGFzdF90YWJsZS5zcmNfb2Zm
c2V0ICsgbGFzdF90YWJsZS5zcmNfbGVuZ3RoOworICBpZiAoUFJFRElDVF9GQUxTRShoZHItPnVu
Y29tcHJlc3NlZF9zaXplIDwgbGFzdF90YWJsZS5zcmNfb2Zmc2V0KSkgewogICAgIHJldHVybiBG
T05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQogCi0gIHVpbnQzMl90IGhlYWRlcl92ZXJz
aW9uID0gMDsKLSAgLy8gZm9yIGVhY2ggZm9udCBpbiBhIHR0YywgbWV0YWRhdGEgdG8gdXNlIHdo
ZW4gcmVidWlsZGluZwotICBzdGQ6OnZlY3RvcjxUdGNGb250PiB0dGNfZm9udHM7Ci0gIHN0ZDo6
bWFwPGNvbnN0IFRhYmxlKiwgY29uc3QgVGFibGUqPiBsb2NhX2J5X2dseWY7CisgIGhkci0+aGVh
ZGVyX3ZlcnNpb24gPSAwOwogCi0gIGlmIChmbGF2b3IgPT0ga1R0Y0ZvbnRGbGF2b3IpIHsKLSAg
ICBpZiAoUFJFRElDVF9GQUxTRSghZmlsZS5SZWFkVTMyKCZoZWFkZXJfdmVyc2lvbikpKSB7Cisg
IGlmIChoZHItPmZsYXZvciA9PSBrVHRjRm9udEZsYXZvcikgeworICAgIGlmIChQUkVESUNUX0ZB
TFNFKCFmaWxlLlJlYWRVMzIoJmhkci0+aGVhZGVyX3ZlcnNpb24pKSkgeworICAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICAgIH0KKyAgICBpZiAoUFJFRElDVF9GQUxT
RShoZHItPmhlYWRlcl92ZXJzaW9uICE9IDB4MDAwMTAwMDAKKyAgICAgICAgICAgICAgICAgICAm
JiBoZHItPmhlYWRlcl92ZXJzaW9uICE9IDB4MDAwMjAwMDApKSB7CiAgICAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgfQogICAgIHVpbnQzMl90IG51bV9mb250czsK
ICAgICBpZiAoUFJFRElDVF9GQUxTRSghUmVhZDI1NVVTaG9ydCgmZmlsZSwgJm51bV9mb250cykg
fHwgIW51bV9mb250cykpIHsKICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUo
KTsKICAgICB9Ci0gICAgdHRjX2ZvbnRzLnJlc2l6ZShudW1fZm9udHMpOworICAgIGhkci0+dHRj
X2ZvbnRzLnJlc2l6ZShudW1fZm9udHMpOwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IG51bV9mb250czsgaSsrKSB7Ci0gICAgICBUdGNGb250JiB0dGNfZm9udCA9IHR0Y19mb250c1tp
XTsKKyAgICAgIFR0Y0ZvbnQmIHR0Y19mb250ID0gaGRyLT50dGNfZm9udHNbaV07CiAgICAgICB1
aW50MzJfdCBudW1fdGFibGVzOwogICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoIVJlYWQyNTVVU2hv
cnQoJmZpbGUsICZudW1fdGFibGVzKSB8fCAhbnVtX3RhYmxlcykpIHsKICAgICAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwpAQCAtMTExNiwyNSArMTEwMSwyMSBAQCBib29s
IENvbnZlcnRXT0ZGMlRvVFRGKHVpbnQ4X3QqIHJlc3VsdCwgc2l6ZV90IHJlc3VsdF9sZW5ndGgs
CiAKICAgICAgIGNvbnN0IFRhYmxlKiBnbHlmX3RhYmxlID0gTlVMTDsKICAgICAgIGNvbnN0IFRh
YmxlKiBsb2NhX3RhYmxlID0gTlVMTDsKLSAgICAgIHVpbnQxNl90IGdseWZfaWR4OwotICAgICAg
dWludDE2X3QgbG9jYV9pZHg7CiAKICAgICAgIGZvciAodWludDMyX3QgaiA9IDA7IGogPCBudW1f
dGFibGVzOyBqKyspIHsKICAgICAgICAgdW5zaWduZWQgaW50IHRhYmxlX2lkeDsKICAgICAgICAg
aWYgKFBSRURJQ1RfRkFMU0UoIVJlYWQyNTVVU2hvcnQoJmZpbGUsICZ0YWJsZV9pZHgpKSB8fAot
ICAgICAgICAgICAgdGFibGVfaWR4ID49IHRhYmxlcy5zaXplKCkpIHsKKyAgICAgICAgICAgIHRh
YmxlX2lkeCA+PSBoZHItPnRhYmxlcy5zaXplKCkpIHsKICAgICAgICAgICByZXR1cm4gRk9OVF9D
T01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICAgIH0KICAgICAgICAgdHRjX2ZvbnQudGFibGVf
aW5kaWNlc1tqXSA9IHRhYmxlX2lkeDsKIAotICAgICAgICBjb25zdCBUYWJsZSYgdGFibGUgPSB0
YWJsZXNbdGFibGVfaWR4XTsKKyAgICAgICAgY29uc3QgVGFibGUmIHRhYmxlID0gaGRyLT50YWJs
ZXNbdGFibGVfaWR4XTsKICAgICAgICAgaWYgKHRhYmxlLnRhZyA9PSBrTG9jYVRhYmxlVGFnKSB7
CiAgICAgICAgICAgbG9jYV90YWJsZSA9ICZ0YWJsZTsKLSAgICAgICAgICBsb2NhX2lkeCA9IHRh
YmxlX2lkeDsKICAgICAgICAgfQogICAgICAgICBpZiAodGFibGUudGFnID09IGtHbHlmVGFibGVU
YWcpIHsKICAgICAgICAgICBnbHlmX3RhYmxlID0gJnRhYmxlOwotICAgICAgICAgIGdseWZfaWR4
ID0gdGFibGVfaWR4OwogICAgICAgICB9CiAKICAgICAgIH0KQEAgLTExNDUsNjUgKzExMjYsMjgg
QEAgYm9vbCBDb252ZXJ0V09GRjJUb1RURih1aW50OF90KiByZXN1bHQsIHNpemVfdCByZXN1bHRf
bGVuZ3RoLAogI2VuZGlmCiAgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUo
KTsKICAgICAgIH0KLQotICAgICAgaWYgKGdseWZfdGFibGUgIT0gTlVMTCAmJiBsb2NhX3RhYmxl
ICE9IE5VTEwpIHsKLSAgICAgICAgbG9jYV9ieV9nbHlmW2dseWZfdGFibGVdID0gbG9jYV90YWJs
ZTsKLSAgICAgIH0KICAgICB9CiAgIH0KIAotICBjb25zdCB1aW50NjRfdCBmaXJzdF90YWJsZV9v
ZmZzZXQgPQotICAgIENvbXB1dGVPZmZzZXRUb0ZpcnN0VGFibGUoaGVhZGVyX3ZlcnNpb24sIG51
bV90YWJsZXMsIHR0Y19mb250cyk7Ci0KLSAgaWYgKFBSRURJQ1RfRkFMU0UoZmlyc3RfdGFibGVf
b2Zmc2V0ID4gcmVzdWx0X2xlbmd0aCkpIHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9G
QUlMVVJFKCk7Ci0gIH0KKyAgY29uc3QgdWludDY0X3QgZmlyc3RfdGFibGVfb2Zmc2V0ID0gQ29t
cHV0ZU9mZnNldFRvRmlyc3RUYWJsZSgqaGRyKTsKIAotICB1aW50NjRfdCBjb21wcmVzc2VkX29m
ZnNldCA9IGZpbGUub2Zmc2V0KCk7Ci0gIGlmIChQUkVESUNUX0ZBTFNFKGNvbXByZXNzZWRfb2Zm
c2V0ID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkgeworICBoZHItPmNv
bXByZXNzZWRfb2Zmc2V0ID0gZmlsZS5vZmZzZXQoKTsKKyAgaWYgKFBSRURJQ1RfRkFMU0UoaGRy
LT5jb21wcmVzc2VkX29mZnNldCA+CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSkpIHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9G
QUlMVVJFKCk7CiAgIH0KLSAgdWludDY0X3Qgc3JjX29mZnNldCA9IFJvdW5kNChjb21wcmVzc2Vk
X29mZnNldCArIGNvbXByZXNzZWRfbGVuZ3RoKTsKKyAgdWludDY0X3Qgc3JjX29mZnNldCA9IFJv
dW5kNChoZHItPmNvbXByZXNzZWRfb2Zmc2V0ICsgaGRyLT5jb21wcmVzc2VkX2xlbmd0aCk7CiAg
IHVpbnQ2NF90IGRzdF9vZmZzZXQgPSBmaXJzdF90YWJsZV9vZmZzZXQ7CiAKIAotICBmb3IgKHVp
bnQxNl90IGkgPSAwOyBpIDwgbnVtX3RhYmxlczsgKytpKSB7Ci0gICAgVGFibGUqIHRhYmxlID0g
JnRhYmxlc1tpXTsKLSAgICB0YWJsZS0+ZHN0X29mZnNldCA9IGRzdF9vZmZzZXQ7Ci0gICAgZHN0
X29mZnNldCArPSB0YWJsZS0+ZHN0X2xlbmd0aDsKLSAgICBpZiAoUFJFRElDVF9GQUxTRShkc3Rf
b2Zmc2V0ID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkgewotICAgICAg
cmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwotICAgIH0KLSAgICBkc3Rfb2Zmc2V0
ID0gUm91bmQ0KGRzdF9vZmZzZXQpOwotICB9Ci0gIGlmIChQUkVESUNUX0ZBTFNFKHNyY19vZmZz
ZXQgPiBsZW5ndGggfHwgZHN0X29mZnNldCAhPSByZXN1bHRfbGVuZ3RoKSkgeworICBpZiAoUFJF
RElDVF9GQUxTRShzcmNfb2Zmc2V0ID4gbGVuZ3RoKSkgewogI2lmZGVmIEZPTlRfQ09NUFJFU1NJ
T05fQklOCiAgICAgZnByaW50ZihzdGRlcnIsICJvZmZzZXQgZmFpbDsgc3JjX29mZnNldCAlIiBQ
Ukl1NjQgIiBsZW5ndGggJWx1ICIKLSAgICAgICJkc3Rfb2Zmc2V0ICUiIFBSSXU2NCAiIHJlc3Vs
dF9sZW5ndGggJWx1XG4iLAotICAgICAgc3JjX29mZnNldCwgbGVuZ3RoLCBkc3Rfb2Zmc2V0LCBy
ZXN1bHRfbGVuZ3RoKTsKKyAgICAgICJkc3Rfb2Zmc2V0ICUiIFBSSXU2NCAiXG4iLAorICAgICAg
c3JjX29mZnNldCwgbGVuZ3RoLCBkc3Rfb2Zmc2V0KTsKICNlbmRpZgogICAgIHJldHVybiBGT05U
X0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQotCi0gIC8vIFJlLW9yZGVyIHRhYmxlcyBpbiBv
dXRwdXQgKE9UU3BlYykgb3JkZXIKLSAgc3RkOjp2ZWN0b3I8VGFibGU+IHNvcnRlZF90YWJsZXMo
dGFibGVzKTsKLSAgaWYgKGhlYWRlcl92ZXJzaW9uKSB7Ci0gICAgLy8gY29sbGVjdGlvbjsgd2Ug
aGF2ZSB0byBzb3J0IHRoZSB0YWJsZSBvZmZzZXQgdmVjdG9yIGluIGVhY2ggZm9udAotICAgIGZv
ciAoYXV0byYgdHRjX2ZvbnQgOiB0dGNfZm9udHMpIHsKLSAgICAgIHN0ZDo6bWFwPHVpbnQzMl90
LCB1aW50MTZfdD4gc29ydGVkX2luZGV4X2J5X3RhZzsKLSAgICAgIGZvciAoYXV0byB0YWJsZV9p
bmRleCA6IHR0Y19mb250LnRhYmxlX2luZGljZXMpIHsKLSAgICAgICAgc29ydGVkX2luZGV4X2J5
X3RhZ1t0YWJsZXNbdGFibGVfaW5kZXhdLnRhZ10gPSB0YWJsZV9pbmRleDsKLSAgICAgIH0KLSAg
ICAgIHVpbnQxNl90IGluZGV4ID0gMDsKLSAgICAgIGZvciAoYXV0byYgaSA6IHNvcnRlZF9pbmRl
eF9ieV90YWcpIHsKLSAgICAgICAgdHRjX2ZvbnQudGFibGVfaW5kaWNlc1tpbmRleCsrXSA9IGku
c2Vjb25kOwotICAgICAgfQotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvLyBub24tY29sbGVjdGlv
bjsgd2UgY2FuIGp1c3Qgc29ydCB0aGUgdGFibGVzCi0gICAgc3RkOjpzb3J0KHNvcnRlZF90YWJs
ZXMuYmVnaW4oKSwgc29ydGVkX3RhYmxlcy5lbmQoKSk7Ci0gIH0KLQogICBpZiAobWV0YV9vZmZz
ZXQpIHsKICAgICBpZiAoUFJFRElDVF9GQUxTRShzcmNfb2Zmc2V0ICE9IG1ldGFfb2Zmc2V0KSkg
ewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwpAQCAtMTIyOCwyOCAr
MTE3Miw1OCBAQCBib29sIENvbnZlcnRXT0ZGMlRvVFRGKHVpbnQ4X3QqIHJlc3VsdCwgc2l6ZV90
IHJlc3VsdF9sZW5ndGgsCiAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwog
ICB9CiAKKyAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFdyaXRlIGV2ZXJ5dGhpbmcgYmVmb3JlIHRo
ZSBhY3R1YWwgdGFibGUgZGF0YQorYm9vbCBXcml0ZUhlYWRlcnMoY29uc3QgdWludDhfdCogZGF0
YSwgc2l6ZV90IGxlbmd0aCwgUmVidWlsZE1ldGFkYXRhKiBtZXRhZGF0YSwKKyAgICAgICAgICAg
ICAgICAgIFdPRkYySGVhZGVyKiBoZHIsIFdPRkYyT3V0KiBvdXQpIHsKKyAgc3RkOjp2ZWN0b3I8
dWludDhfdD4gb3V0cHV0KENvbXB1dGVPZmZzZXRUb0ZpcnN0VGFibGUoKmhkciksIDApOworCisg
IC8vIFJlLW9yZGVyIHRhYmxlcyBpbiBvdXRwdXQgKE9UU3BlYykgb3JkZXIKKyAgc3RkOjp2ZWN0
b3I8VGFibGU+IHNvcnRlZF90YWJsZXMoaGRyLT50YWJsZXMpOworICBpZiAoaGRyLT5oZWFkZXJf
dmVyc2lvbikgeworICAgIC8vIGNvbGxlY3Rpb247IHdlIGhhdmUgdG8gc29ydCB0aGUgdGFibGUg
b2Zmc2V0IHZlY3RvciBpbiBlYWNoIGZvbnQKKyAgICBmb3IgKGF1dG8mIHR0Y19mb250IDogaGRy
LT50dGNfZm9udHMpIHsKKyAgICAgIHN0ZDo6bWFwPHVpbnQzMl90LCB1aW50MTZfdD4gc29ydGVk
X2luZGV4X2J5X3RhZzsKKyAgICAgIGZvciAoYXV0byB0YWJsZV9pbmRleCA6IHR0Y19mb250LnRh
YmxlX2luZGljZXMpIHsKKyAgICAgICAgc29ydGVkX2luZGV4X2J5X3RhZ1toZHItPnRhYmxlc1t0
YWJsZV9pbmRleF0udGFnXSA9IHRhYmxlX2luZGV4OworICAgICAgfQorICAgICAgdWludDE2X3Qg
aW5kZXggPSAwOworICAgICAgZm9yIChhdXRvJiBpIDogc29ydGVkX2luZGV4X2J5X3RhZykgewor
ICAgICAgICB0dGNfZm9udC50YWJsZV9pbmRpY2VzW2luZGV4KytdID0gaS5zZWNvbmQ7CisgICAg
ICB9CisgICAgfQorICB9IGVsc2UgeworICAgIC8vIG5vbi1jb2xsZWN0aW9uOyB3ZSBjYW4ganVz
dCBzb3J0IHRoZSB0YWJsZXMKKyAgICBzdGQ6OnNvcnQoc29ydGVkX3RhYmxlcy5iZWdpbigpLCBz
b3J0ZWRfdGFibGVzLmVuZCgpKTsKKyAgfQorCiAgIC8vIFN0YXJ0IGJ1aWxkaW5nIHRoZSBmb250
CisgIHVpbnQ4X3QqIHJlc3VsdCA9ICZvdXRwdXRbMF07CiAgIHNpemVfdCBvZmZzZXQgPSAwOwot
ICBzaXplX3Qgb2Zmc2V0X3RhYmxlID0gMDsKLSAgaWYgKGhlYWRlcl92ZXJzaW9uKSB7CisgIGlm
IChoZHItPmhlYWRlcl92ZXJzaW9uKSB7CiAgICAgLy8gVFRDIGhlYWRlcgotICAgIG9mZnNldCA9
IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCBmbGF2b3IpOyAgLy8gVEFHIFRUQ1RhZwotICAgIG9m
ZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCBoZWFkZXJfdmVyc2lvbik7ICAvLyBGSVhF
RCBWZXJzaW9uCi0gICAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIHR0Y19mb250
cy5zaXplKCkpOyAgLy8gVUxPTkcgbnVtRm9udHMKKyAgICBvZmZzZXQgPSBTdG9yZVUzMihyZXN1
bHQsIG9mZnNldCwgaGRyLT5mbGF2b3IpOyAgLy8gVEFHIFRUQ1RhZworICAgIG9mZnNldCA9IFN0
b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCBoZHItPmhlYWRlcl92ZXJzaW9uKTsgIC8vIEZJWEVEIFZl
cnNpb24KKyAgICBvZmZzZXQgPSBTdG9yZVUzMihyZXN1bHQsIG9mZnNldCwgaGRyLT50dGNfZm9u
dHMuc2l6ZSgpKTsgIC8vIFVMT05HIG51bUZvbnRzCiAgICAgLy8gU3BhY2UgZm9yIFVMT05HIE9m
ZnNldFRhYmxlW251bUZvbnRzXSAoemVyb2VkIGluaXRpYWxseSkKLSAgICBvZmZzZXRfdGFibGUg
PSBvZmZzZXQ7ICAvLyBrZWVwIHN0YXJ0IG9mIG9mZnNldCB0YWJsZSBmb3IgbGF0ZXIKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHR0Y19mb250cy5zaXplKCk7IGkrKykgeworICAgIHNpemVf
dCBvZmZzZXRfdGFibGUgPSBvZmZzZXQ7ICAvLyBrZWVwIHN0YXJ0IG9mIG9mZnNldCB0YWJsZSBm
b3IgbGF0ZXIKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhkci0+dHRjX2ZvbnRzLnNpemUo
KTsgaSsrKSB7CiAgICAgICBvZmZzZXQgPSBTdG9yZVUzMihyZXN1bHQsIG9mZnNldCwgMCk7ICAv
LyB3aWxsIGZpbGwgcmVhbCB2YWx1ZXMgaW4gbGF0ZXIKICAgICB9CiAgICAgLy8gc3BhY2UgZm9y
IERTSUcgZmllbGRzIGZvciBoZWFkZXIgdjIKLSAgICBpZiAoaGVhZGVyX3ZlcnNpb24gPT0gMHgw
MDAyMDAwMCkgeworICAgIGlmIChoZHItPmhlYWRlcl92ZXJzaW9uID09IDB4MDAwMjAwMDApIHsK
ICAgICAgIG9mZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCAwKTsgIC8vIFVMT05HIHVs
RHNpZ1RhZwogICAgICAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIDApOyAgLy8g
VUxPTkcgdWxEc2lnTGVuZ3RoCiAgICAgICBvZmZzZXQgPSBTdG9yZVUzMihyZXN1bHQsIG9mZnNl
dCwgMCk7ICAvLyBVTE9ORyB1bERzaWdPZmZzZXQKICAgICB9CiAKICAgICAvLyB3cml0ZSBPZmZz
ZXQgVGFibGVzIGFuZCBzdG9yZSB0aGUgbG9jYXRpb24gb2YgZWFjaCBpbiBUVEMgSGVhZGVyCi0g
ICAgZm9yIChhdXRvJiB0dGNfZm9udCA6IHR0Y19mb250cykgeworICAgIG1ldGFkYXRhLT5mb250
X2luZm9zLnJlc2l6ZShoZHItPnR0Y19mb250cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaGRyLT50dGNfZm9udHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgIFR0Y0ZvbnQmIHR0
Y19mb250ID0gaGRyLT50dGNfZm9udHNbaV07CisKICAgICAgIC8vIHdyaXRlIE9mZnNldCBUYWJs
ZSBsb2NhdGlvbiBpbnRvIFRUQyBIZWFkZXIKICAgICAgIG9mZnNldF90YWJsZSA9IFN0b3JlVTMy
KHJlc3VsdCwgb2Zmc2V0X3RhYmxlLCBvZmZzZXQpOwogCkBAIC0xMjU4LDk5ICsxMjMyLDgyIEBA
IGJvb2wgQ29udmVydFdPRkYyVG9UVEYodWludDhfdCogcmVzdWx0LCBzaXplX3QgcmVzdWx0X2xl
bmd0aCwKICAgICAgIG9mZnNldCA9IFN0b3JlT2Zmc2V0VGFibGUocmVzdWx0LCBvZmZzZXQsIHR0
Y19mb250LmZsYXZvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRjX2ZvbnQu
dGFibGVfaW5kaWNlcy5zaXplKCkpOwogCi0gICAgICAvLyB3cml0ZSB0YWJsZSBlbnRyaWVzCiAg
ICAgICBmb3IgKGNvbnN0IGF1dG8gdGFibGVfaW5kZXggOiB0dGNfZm9udC50YWJsZV9pbmRpY2Vz
KSB7Ci0gICAgICAgIG9mZnNldCA9IFN0b3JlVGFibGVFbnRyeShyZXN1bHQsIHRhYmxlc1t0YWJs
ZV9pbmRleF0sIG9mZnNldCk7CisgICAgICAgIHVpbnQzMl90IHRhZyA9IGhkci0+dGFibGVzW3Rh
YmxlX2luZGV4XS50YWc7CisgICAgICAgIG1ldGFkYXRhLT5mb250X2luZm9zW2ldLnRhYmxlX2Vu
dHJ5X2J5X3RhZ1t0YWddID0gb2Zmc2V0OworICAgICAgICBvZmZzZXQgPSBTdG9yZVRhYmxlRW50
cnkocmVzdWx0LCBvZmZzZXQsIHRhZyk7CiAgICAgICB9CisKKyAgICAgIHR0Y19mb250LmhlYWRl
cl9jaGVja3N1bSA9IENvbXB1dGVVTG9uZ1N1bSgmb3V0cHV0W3R0Y19mb250LmRzdF9vZmZzZXRd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNl
dCAtIHR0Y19mb250LmRzdF9vZmZzZXQpOwogICAgIH0KICAgfSBlbHNlIHsKLSAgICBvZmZzZXQg
PSBTdG9yZU9mZnNldFRhYmxlKHJlc3VsdCwgb2Zmc2V0LCBmbGF2b3IsIG51bV90YWJsZXMpOwot
ICAgIGZvciAodWludDE2X3QgaSA9IDA7IGkgPCBudW1fdGFibGVzOyArK2kpIHsKLSAgICAgIG9m
ZnNldCA9IFN0b3JlVGFibGVFbnRyeShyZXN1bHQsIHNvcnRlZF90YWJsZXNbaV0sIG9mZnNldCk7
CisgICAgbWV0YWRhdGEtPmZvbnRfaW5mb3MucmVzaXplKDEpOworICAgIG9mZnNldCA9IFN0b3Jl
T2Zmc2V0VGFibGUocmVzdWx0LCBvZmZzZXQsIGhkci0+Zmxhdm9yLCBoZHItPm51bV90YWJsZXMp
OworICAgIGZvciAodWludDE2X3QgaSA9IDA7IGkgPCBoZHItPm51bV90YWJsZXM7ICsraSkgewor
ICAgICAgbWV0YWRhdGEtPmZvbnRfaW5mb3NbMF0udGFibGVfZW50cnlfYnlfdGFnW3NvcnRlZF90
YWJsZXNbaV0udGFnXSA9IG9mZnNldDsKKyAgICAgIG9mZnNldCA9IFN0b3JlVGFibGVFbnRyeShy
ZXN1bHQsIG9mZnNldCwgc29ydGVkX3RhYmxlc1tpXS50YWcpOwogICAgIH0KICAgfQogCi0gIHN0
ZDo6dmVjdG9yPHVpbnQ4X3Q+IHVuY29tcHJlc3NlZF9idWY7Ci0gIGNvbnN0IHVpbnQ4X3QqIHRy
YW5zZm9ybV9idWYgPSBOVUxMOwotICB1aW50NjRfdCB0b3RhbF9zaXplID0gMDsKLSAgZm9yICh1
aW50MTZfdCBpID0gMDsgaSA8IG51bV90YWJsZXM7ICsraSkgewotICAgIHRvdGFsX3NpemUgKz0g
dGFibGVzW2ldLnRyYW5zZm9ybV9sZW5ndGg7Ci0gICAgaWYgKFBSRURJQ1RfRkFMU0UodG90YWxf
c2l6ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpIHsKLSAgICAgIHJl
dHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9Ci0gIH0KLSAgdW5jb21wcmVz
c2VkX2J1Zi5yZXNpemUodG90YWxfc2l6ZSk7Ci0gIGNvbnN0IHVpbnQ4X3QqIHNyY19idWYgPSBk
YXRhICsgY29tcHJlc3NlZF9vZmZzZXQ7Ci0gIGlmIChQUkVESUNUX0ZBTFNFKCFXb2ZmMlVuY29t
cHJlc3MoJnVuY29tcHJlc3NlZF9idWZbMF0sIHRvdGFsX3NpemUsCi0gICAgICAgICAgICAgICAg
ICAgICAgIHNyY19idWYsIGNvbXByZXNzZWRfbGVuZ3RoKSkpIHsKKyAgaWYgKFBSRURJQ1RfRkFM
U0UoIW91dC0+V3JpdGUoJm91dHB1dFswXSwgb3V0cHV0LnNpemUoKSkpKSB7CiAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9CisgIG1ldGFkYXRhLT5oZWFkZXJfY2hl
Y2tzdW0gPSBDb21wdXRlVUxvbmdTdW0oJm91dHB1dFswXSwgb3V0cHV0LnNpemUoKSk7CisgIHJl
dHVybiB0cnVlOworfQogCi0gIC8vIHJvdW5kIDEsIGNvcHkgYWNyb3NzIGFsbCB0aGUgdW5tb2Rp
ZmllZCB0YWJsZXMKLSAgdHJhbnNmb3JtX2J1ZiA9ICZ1bmNvbXByZXNzZWRfYnVmWzBdOwotICBj
b25zdCB1aW50OF90KiBjb25zdCB0cmFuc2Zvcm1fYnVmX2VuZCA9ICZ1bmNvbXByZXNzZWRfYnVm
WzBdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB1bmNvbXBy
ZXNzZWRfYnVmLnNpemUoKTsKK30gIC8vIG5hbWVzcGFjZQogCi0gIC8vIFdlIHdpcGUgb3V0IHRo
ZSB2YWx1ZXMgYXMgdGhleSBnZXQgd3JpdHRlbiBpbnRvIHRoZSBmaW5hbCByZXN1bHQgdG8gZGVk
dXAKLSAgc3RkOjptYXA8dWludDMyX3QsIGNvbnN0IHVpbnQ4X3QqPiBzcmNfYnlfZGVzdDsKLSAg
Zm9yICh1aW50MTZfdCBpID0gMDsgaSA8IG51bV90YWJsZXM7ICsraSkgewotICAgIGNvbnN0IFRh
YmxlKiB0YWJsZSA9ICZ0YWJsZXNbaV07Ci0gICAgc2l6ZV90IHRyYW5zZm9ybV9sZW5ndGggPSB0
YWJsZS0+dHJhbnNmb3JtX2xlbmd0aDsKK3NpemVfdCBDb21wdXRlV09GRjJGaW5hbFNpemUoY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeworICBCdWZmZXIgZmlsZShkYXRhLCBs
ZW5ndGgpOworICB1aW50MzJfdCB0b3RhbF9sZW5ndGg7CiAKLSAgICBzcmNfYnlfZGVzdFt0YWJs
ZS0+ZHN0X29mZnNldF0gPSB0cmFuc2Zvcm1fYnVmOworICBpZiAoIWZpbGUuU2tpcCgxNikgfHwK
KyAgICAgICFmaWxlLlJlYWRVMzIoJnRvdGFsX2xlbmd0aCkpIHsKKyAgICByZXR1cm4gMDsKKyAg
fQorICByZXR1cm4gdG90YWxfbGVuZ3RoOworfQogCi0gICAgaWYgKFBSRURJQ1RfRkFMU0UodHJh
bnNmb3JtX2J1ZiArIHRyYW5zZm9ybV9sZW5ndGggPiB0cmFuc2Zvcm1fYnVmX2VuZCkpIHsKLSAg
ICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9Ci0gICAgdHJhbnNm
b3JtX2J1ZiArPSB0cmFuc2Zvcm1fbGVuZ3RoOworYm9vbCBDb252ZXJ0V09GRjJUb1RURih1aW50
OF90ICpyZXN1bHQsIHNpemVfdCByZXN1bHRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoKSB7CisgIFdPRkYyTWVtb3J5T3V0
IG91dChyZXN1bHQsIHJlc3VsdF9sZW5ndGgpOworICByZXR1cm4gQ29udmVydFdPRkYyVG9UVEYo
ZGF0YSwgbGVuZ3RoLCAmb3V0KTsKK30KKworYm9vbCBDb252ZXJ0V09GRjJUb1RURihjb25zdCB1
aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBXT0ZG
Mk91dCogb3V0KSB7CisgIFJlYnVpbGRNZXRhZGF0YSBtZXRhZGF0YTsKKyAgV09GRjJIZWFkZXIg
aGRyOworICBpZiAoIVJlYWRXT0ZGMkhlYWRlcihkYXRhLCBsZW5ndGgsICZoZHIpKSB7CisgICAg
cmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9CiAKLSAgZm9yICh1aW50MTZf
dCBpID0gMDsgaSA8IG51bV90YWJsZXM7ICsraSkgewotICAgIGNvbnN0IFRhYmxlKiB0YWJsZSA9
ICZ0YWJsZXNbaV07Ci0gICAgY29uc3Qgc2l6ZV90IHRyYW5zZm9ybV9sZW5ndGggPSB0YWJsZS0+
dHJhbnNmb3JtX2xlbmd0aDsKKyAgaWYgKCFXcml0ZUhlYWRlcnMoZGF0YSwgbGVuZ3RoLCAmbWV0
YWRhdGEsICZoZHIsIG91dCkpIHsKKyAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJF
KCk7CisgIH0KIAotICAgIGlmICgodGFibGUtPmZsYWdzICYga1dvZmYyRmxhZ3NUcmFuc2Zvcm0p
ICE9IGtXb2ZmMkZsYWdzVHJhbnNmb3JtKSB7Ci0gICAgICBpZiAoUFJFRElDVF9GQUxTRSh0cmFu
c2Zvcm1fbGVuZ3RoICE9IHRhYmxlLT5kc3RfbGVuZ3RoKSkgewotICAgICAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9Ci0gICAgICBpZiAoUFJFRElDVF9GQUxT
RShzdGF0aWNfY2FzdDx1aW50NjRfdD4odGFibGUtPmRzdF9vZmZzZXQgKwotICAgICAgICAgIHRy
YW5zZm9ybV9sZW5ndGgpID4gcmVzdWx0X2xlbmd0aCkpIHsKLSAgICAgICAgcmV0dXJuIEZPTlRf
Q09NUFJFU1NJT05fRkFJTFVSRSgpOwotICAgICAgfQotICAgICAgdHJhbnNmb3JtX2J1ZiA9IHNy
Y19ieV9kZXN0W3RhYmxlLT5kc3Rfb2Zmc2V0XTsKLSAgICAgIHNyY19ieV9kZXN0LmVyYXNlKHRh
YmxlLT5kc3Rfb2Zmc2V0KTsKLSAgICAgIHN0ZDo6bWVtY3B5KHJlc3VsdCArIHRhYmxlLT5kc3Rf
b2Zmc2V0LCB0cmFuc2Zvcm1fYnVmLCB0cmFuc2Zvcm1fbGVuZ3RoKTsKLSAgICB9CisgIGNvbnN0
IGZsb2F0IGNvbXByZXNzaW9uX3JhdGlvID0gKGZsb2F0KSBoZHIudW5jb21wcmVzc2VkX3NpemUg
LyBsZW5ndGg7CisgIGlmIChjb21wcmVzc2lvbl9yYXRpbyA+IGtNYXhQbGF1c2libGVDb21wcmVz
c2lvblJhdGlvKSB7CisjaWZkZWYgRk9OVF9DT01QUkVTU0lPTl9CSU4KKyAgICBmcHJpbnRmKHN0
ZGVyciwgIkltcGxhdXNpYmxlIGNvbXByZXNzaW9uIHJhdGlvICUuMDFmXG4iLCBjb21wcmVzc2lv
bl9yYXRpbyk7CisjZW5kaWYKKyAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7
CiAgIH0KIAotICAvLyByb3VuZCAyLCByZWNvbnN0cnVjdCB0cmFuc2Zvcm1lZCB0YWJsZXMKLSAg
aWYgKFBSRURJQ1RfRkFMU0UoaGVhZGVyX3ZlcnNpb24pKSB7Ci0gICAgLy8gUmVidWlsZCBjb2xs
ZWN0aW9uIGZvbnQgYnkgZm9udC4KLSAgICBzdGQ6OnZlY3RvcjxUYWJsZT4gZm9udF90YWJsZXM7
Ci0gICAgZm9yIChjb25zdCBhdXRvJiB0dGNfZm9udCA6IHR0Y19mb250cykgewotICAgICAgZm9u
dF90YWJsZXMucmVzaXplKHR0Y19mb250LnRhYmxlX2luZGljZXMuc2l6ZSgpKTsKLSAgICAgIGZv
ciAoYXV0byBpID0gMDsgaSA8IHR0Y19mb250LnRhYmxlX2luZGljZXMuc2l6ZSgpOyBpKyspIHsK
LSAgICAgICAgZm9udF90YWJsZXNbaV0gPSB0YWJsZXNbdHRjX2ZvbnQudGFibGVfaW5kaWNlc1tp
XV07Ci0gICAgICB9Ci0gICAgICBpZiAoUFJFRElDVF9GQUxTRSghUmVjb25zdHJ1Y3RUcmFuc2Zv
cm1lZEZvbnQoZm9udF90YWJsZXMsICZzcmNfYnlfZGVzdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsIHJlc3VsdF9sZW5ndGgpKSkg
ewotICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9Ci0g
ICAgfQotICB9IGVsc2UgewotICAgIGlmIChQUkVESUNUX0ZBTFNFKCFSZWNvbnN0cnVjdFRyYW5z
Zm9ybWVkRm9udCh0YWJsZXMsICZzcmNfYnlfZGVzdCwgcmVzdWx0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfbGVuZ3RoKSkpIHsKLSAg
ICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9CisgIGNvbnN0IHVp
bnQ4X3QqIHNyY19idWYgPSBkYXRhICsgaGRyLmNvbXByZXNzZWRfb2Zmc2V0OworICBzdGQ6OnZl
Y3Rvcjx1aW50OF90PiB1bmNvbXByZXNzZWRfYnVmKGhkci51bmNvbXByZXNzZWRfc2l6ZSk7Cisg
IGlmIChQUkVESUNUX0ZBTFNFKCFXb2ZmMlVuY29tcHJlc3MoJnVuY29tcHJlc3NlZF9idWZbMF0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRyLnVuY29tcHJlc3NlZF9z
aXplLCBzcmNfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkci5j
b21wcmVzc2VkX2xlbmd0aCkpKSB7CisgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVS
RSgpOwogICB9CiAKLSAgaWYgKGhlYWRlcl92ZXJzaW9uKSB7Ci0gICAgaWYgKFBSRURJQ1RfRkFM
U0UoCi0gICAgICAgICFGaXhDb2xsZWN0aW9uQ2hlY2tzdW1zKGhlYWRlcl92ZXJzaW9uLCB0YWJs
ZXMsIHR0Y19mb250cywgcmVzdWx0KSkpIHsKLSAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9O
X0ZBSUxVUkUoKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKFBSRURJQ1RfRkFMU0UoIUZp
eENoZWNrc3Vtcyhzb3J0ZWRfdGFibGVzLCByZXN1bHQpKSkgeworICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1ldGFkYXRhLmZvbnRfaW5mb3Muc2l6ZSgpOyBpKyspIHsKKyAgICBpZiAoUFJFRElD
VF9GQUxTRSghUmVjb25zdHJ1Y3RGb250KCZ1bmNvbXByZXNzZWRfYnVmWzBdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRyLnVuY29tcHJlc3NlZF9zaXplLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1ldGFkYXRhLCAmaGRyLCBpLCBv
dXQpKSkgewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0K
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2RlYy5o
IGIvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2RlYy5oCmluZGV4IDc0YmE3ZjUu
LmI4ODk4MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9k
ZWMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfZGVjLmgKQEAgLTE5
LDYgKzE5LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPGludHR5cGVzLmg+
CisjaW5jbHVkZSAiLi93b2ZmMl9vdXQuaCIKIAogbmFtZXNwYWNlIHdvZmYyIHsKIApAQCAtMjgs
OSArMjksMTYgQEAgc2l6ZV90IENvbXB1dGVXT0ZGMkZpbmFsU2l6ZShjb25zdCB1aW50OF90ICpk
YXRhLCBzaXplX3QgbGVuZ3RoKTsKIC8vIERlY29tcHJlc3NlcyB0aGUgZm9udCBpbnRvIHRoZSB0
YXJnZXQgYnVmZmVyLiBUaGUgcmVzdWx0X2xlbmd0aCBzaG91bGQKIC8vIGJlIHRoZSBzYW1lIGFz
IGRldGVybWluZWQgYnkgQ29tcHV0ZUZpbmFsU2l6ZSgpLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vz
c2Z1bAogLy8gZGVjb21wcmVzc2lvbi4KKy8vIERFUFJFQ0FURUQ7IHBsZWFzZSBwcmVmZXIgdGhl
IHZlcnNpb24gdGhhdCB0YWtlcyBhIFdPRkYyT3V0KgogYm9vbCBDb252ZXJ0V09GRjJUb1RURih1
aW50OF90ICpyZXN1bHQsIHNpemVfdCByZXN1bHRfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoKTsKIAorLy8gRGVjb21wcmVz
c2VzIHRoZSBmb250IGludG8gb3V0LiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4KKy8vIFdvcmtz
IGV2ZW4gaWYgV09GRjJIZWFkZXIgdG90YWxTZm50U2l6ZSBpcyB3cm9uZy4KKy8vIFBsZWFzZSBw
cmVmZXIgdGhpcyBBUEkuCitib29sIENvbnZlcnRXT0ZGMlRvVFRGKGNvbnN0IHVpbnQ4X3QgKmRh
dGEsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIFdPRkYyT3V0KiBvdXQp
OworCiB9IC8vIG5hbWVzcGFjZSB3b2ZmMgogCiAjZW5kaWYgIC8vIFdPRkYyX1dPRkYyX0RFQ19I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2RlY29tcHJl
c3MuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfZGVjb21wcmVzcy5jYwpp
bmRleCA3NjY4YzRlLi5mMjljNzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2Zm
Mi9zcmMvd29mZjJfZGVjb21wcmVzcy5jYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9z
cmMvd29mZjJfZGVjb21wcmVzcy5jYwpAQCAtMTcsMTAgKzE3LDEwIEBACiAKICNpbmNsdWRlIDxz
dHJpbmc+CiAKLQotI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICIuL2ZpbGUuaCIKICNpbmNs
dWRlICIuL3dvZmYyX2RlYy5oIgogCisKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikg
ewogICB1c2luZyBzdGQ6OnN0cmluZzsKIApAQCAtMzEsMjQgKzMxLDE4IEBAIGludCBtYWluKGlu
dCBhcmdjLCBjaGFyICoqYXJndikgewogCiAgIHN0cmluZyBmaWxlbmFtZShhcmd2WzFdKTsKICAg
c3RyaW5nIG91dGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyKDAsIGZpbGVuYW1lLmZpbmRfbGFz
dF9vZigiLiIpKSArICIudHRmIjsKLSAgZnByaW50ZihzdGRvdXQsICJQcm9jZXNzaW5nICVzID0+
ICVzXG4iLAotICAgIGZpbGVuYW1lLmNfc3RyKCksIG91dGZpbGVuYW1lLmNfc3RyKCkpOworCiAg
IHN0cmluZyBpbnB1dCA9IHdvZmYyOjpHZXRGaWxlQ29udGVudChmaWxlbmFtZSk7CisgIGNvbnN0
IHVpbnQ4X3QqIHJhd19pbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlu
cHV0LmRhdGEoKSk7CisgIHN0cmluZyBvdXRwdXQoc3RkOjptaW4od29mZjI6OkNvbXB1dGVXT0ZG
MkZpbmFsU2l6ZShyYXdfaW5wdXQsIGlucHV0LnNpemUoKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgd29mZjI6OmtEZWZhdWx0TWF4U2l6ZSksIDApOworICB3b2ZmMjo6V09GRjJTdHJpbmdP
dXQgb3V0KCZvdXRwdXQpOwogCi0gIHNpemVfdCBkZWNvbXByZXNzZWRfc2l6ZSA9IHdvZmYyOjpD
b21wdXRlV09GRjJGaW5hbFNpemUoCi0gICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCkpOwotICBzdHJpbmcgb3V0cHV0KGRlY29t
cHJlc3NlZF9zaXplLCAwKTsKLSAgY29uc3QgYm9vbCBvayA9IHdvZmYyOjpDb252ZXJ0V09GRjJU
b1RURigKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZvdXRwdXRbMF0pLCBkZWNv
bXByZXNzZWRfc2l6ZSwKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlu
cHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSk7CisgIGNvbnN0IGJvb2wgb2sgPSB3b2ZmMjo6Q29u
dmVydFdPRkYyVG9UVEYocmF3X2lucHV0LCBpbnB1dC5zaXplKCksICZvdXQpOwogCi0gIGlmICgh
b2spIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkRlY29tcHJlc3Npb24gZmFpbGVkXG4iKTsKLSAg
ICByZXR1cm4gMTsKKyAgaWYgKG9rKSB7CisgICAgd29mZjI6OlNldEZpbGVDb250ZW50cyhvdXRm
aWxlbmFtZSwgb3V0cHV0LmJlZ2luKCksCisgICAgICAgIG91dHB1dC5iZWdpbigpICsgb3V0LlNp
emUoKSk7CiAgIH0KLQotICB3b2ZmMjo6U2V0RmlsZUNvbnRlbnRzKG91dGZpbGVuYW1lLCBvdXRw
dXQpOwotCi0gIHJldHVybiAwOworICByZXR1cm4gb2sgPyAwIDogMTsKIH0KLQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2VuYy5jYyBiL1NvdXJjZS9UaGly
ZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9lbmMuY2MKaW5kZXggNTI1NWFhNS4uZDEwMGFkNSAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2VuYy5jYworKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfZW5jLmNjCkBAIC0yMyw4ICsyMyw4IEBA
CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgIi4vY29t
cHJlc3Nvci5oIgogI2luY2x1ZGUgIi4vYnVmZmVyLmgiCi0jaW5jbHVkZSAiLi9lbmNvZGUuaCIK
ICNpbmNsdWRlICIuL2ZvbnQuaCIKICNpbmNsdWRlICIuL25vcm1hbGl6ZS5oIgogI2luY2x1ZGUg
Ii4vcm91bmQuaCIKQEAgLTQ3LDYgKzQ3LDcgQEAgdXNpbmcgc3RkOjp2ZWN0b3I7CiBjb25zdCBz
aXplX3Qga1dvZmYySGVhZGVyU2l6ZSA9IDQ4OwogY29uc3Qgc2l6ZV90IGtXb2ZmMkVudHJ5U2l6
ZSA9IDIwOwogCisKIGJvb2wgQ29tcHJlc3MoY29uc3QgdWludDhfdCogZGF0YSwgY29uc3Qgc2l6
ZV90IGxlbiwKICAgICAgICAgICAgICAgdWludDhfdCogcmVzdWx0LCB1aW50MzJfdCogcmVzdWx0
X2xlbiwKICAgICAgICAgICAgICAgYnJvdGxpOjpCcm90bGlQYXJhbXM6Ok1vZGUgbW9kZSwgaW50
IHF1YWxpdHkpIHsKQEAgLTEyMCw3ICsxMjEsNyBAQCBzaXplX3QgQ29tcHV0ZVdvZmYyTGVuZ3Ro
KGNvbnN0IEZvbnRDb2xsZWN0aW9uJiBmb250X2NvbGxlY3Rpb24sCiAgIH0KIAogICAvLyBmb3Ig
Y29sbGVjdGlvbnMgb25seSwgY29sbGVjdGlvbiB0YWJsZXMKLSAgaWYgKGZvbnRfY29sbGVjdGlv
bi5mb250cy5zaXplKCkgPiAxKSB7CisgIGlmIChmb250X2NvbGxlY3Rpb24uZmxhdm9yID09IGtU
dGNGb250Rmxhdm9yKSB7CiAgICAgc2l6ZSArPSA0OyAgLy8gVUludDMyIFZlcnNpb24gb2YgVFRD
IEhlYWRlcgogICAgIHNpemUgKz0gU2l6ZTI1NVVTaG9ydChmb250X2NvbGxlY3Rpb24uZm9udHMu
c2l6ZSgpKTsgIC8vIDI1NVVJbnQxNiBudW1Gb250cwogCkBAIC0xNDcsMTQgKzE0OCw2IEBAIHNp
emVfdCBDb21wdXRlV29mZjJMZW5ndGgoY29uc3QgRm9udENvbGxlY3Rpb24mIGZvbnRfY29sbGVj
dGlvbiwKICAgcmV0dXJuIHNpemU7CiB9CiAKLXNpemVfdCBDb21wdXRlVFRGTGVuZ3RoKGNvbnN0
IHN0ZDo6dmVjdG9yPFRhYmxlPiYgdGFibGVzKSB7Ci0gIHNpemVfdCBzaXplID0gMTIgKyAxNiAq
IHRhYmxlcy5zaXplKCk7ICAvLyBzZm50IGhlYWRlcgotICBmb3IgKGNvbnN0IGF1dG8mIHRhYmxl
IDogdGFibGVzKSB7Ci0gICAgc2l6ZSArPSBSb3VuZDQodGFibGUuc3JjX2xlbmd0aCk7Ci0gIH0K
LSAgcmV0dXJuIHNpemU7Ci19Ci0KIHNpemVfdCBDb21wdXRlVW5jb21wcmVzc2VkTGVuZ3RoKGNv
bnN0IEZvbnQmIGZvbnQpIHsKICAgLy8gc2ZudCBoZWFkZXIgKyBvZmZzZXQgdGFibGUKICAgc2l6
ZV90IHNpemUgPSAxMiArIDE2ICogZm9udC5udW1fdGFibGVzOwpAQCAtMTY4LDcgKzE2MSw3IEBA
IHNpemVfdCBDb21wdXRlVW5jb21wcmVzc2VkTGVuZ3RoKGNvbnN0IEZvbnQmIGZvbnQpIHsKIH0K
IAogc2l6ZV90IENvbXB1dGVVbmNvbXByZXNzZWRMZW5ndGgoY29uc3QgRm9udENvbGxlY3Rpb24m
IGZvbnRfY29sbGVjdGlvbikgewotICBpZiAoZm9udF9jb2xsZWN0aW9uLmZvbnRzLnNpemUoKSA9
PSAxKSB7CisgIGlmIChmb250X2NvbGxlY3Rpb24uZmxhdm9yICE9IGtUdGNGb250Rmxhdm9yKSB7
CiAgICAgcmV0dXJuIENvbXB1dGVVbmNvbXByZXNzZWRMZW5ndGgoZm9udF9jb2xsZWN0aW9uLmZv
bnRzWzBdKTsKICAgfQogICBzaXplX3Qgc2l6ZSA9IENvbGxlY3Rpb25IZWFkZXJTaXplKGZvbnRf
Y29sbGVjdGlvbi5oZWFkZXJfdmVyc2lvbiwKQEAgLTI3OSwyMCArMjcyLDIyIEBAIGJvb2wgQ29u
dmVydFRURlRvV09GRjIoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbmd0aCwKICAgc3Rk
Ojp2ZWN0b3I8dWludDhfdD4gY29tcHJlc3Npb25fYnVmKGNvbXByZXNzaW9uX2J1ZmZlcl9zaXpl
KTsKICAgdWludDMyX3QgdG90YWxfY29tcHJlc3NlZF9sZW5ndGggPSBjb21wcmVzc2lvbl9idWZm
ZXJfc2l6ZTsKIAotICAvLyBDb2xsZWN0IGFsbCB0cmFuc2Zvcm1lZCBkYXRhIGludG8gb25lIHBs
YWNlLgorICAvLyBDb2xsZWN0IGFsbCB0cmFuc2Zvcm1lZCBkYXRhIGludG8gb25lIHBsYWNlIGlu
IG91dHB1dCBvcmRlci4KICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gdHJhbnNmb3JtX2J1Zih0b3Rh
bF90cmFuc2Zvcm1fbGVuZ3RoKTsKICAgc2l6ZV90IHRyYW5zZm9ybV9vZmZzZXQgPSAwOwogICBm
b3IgKGNvbnN0IGF1dG8mIGZvbnQgOiBmb250X2NvbGxlY3Rpb24uZm9udHMpIHsKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIGkgOiBmb250LnRhYmxlcykgewotICAgICAgY29uc3QgRm9udDo6VGFibGUq
IHRhYmxlID0gZm9udC5GaW5kVGFibGUoaS5zZWNvbmQudGFnIF4gMHg4MDgwODA4MCk7Ci0gICAg
ICBpZiAoaS5zZWNvbmQuSXNSZXVzZWQoKSkgY29udGludWU7Ci0gICAgICBpZiAoaS5zZWNvbmQu
dGFnICYgMHg4MDgwODA4MCkgY29udGludWU7CisgICAgZm9yIChjb25zdCBhdXRvIHRhZyA6IGZv
bnQuT3V0cHV0T3JkZXJlZFRhZ3MoKSkgeworICAgICAgY29uc3QgRm9udDo6VGFibGUmIG9yaWdp
bmFsID0gZm9udC50YWJsZXMuYXQodGFnKTsKKyAgICAgIGlmIChvcmlnaW5hbC5Jc1JldXNlZCgp
KSBjb250aW51ZTsKKyAgICAgIGlmICh0YWcgJiAweDgwODA4MDgwKSBjb250aW51ZTsKKyAgICAg
IGNvbnN0IEZvbnQ6OlRhYmxlKiB0YWJsZV90b19zdG9yZSA9IGZvbnQuRmluZFRhYmxlKHRhZyBe
IDB4ODA4MDgwODApOworICAgICAgaWYgKHRhYmxlX3RvX3N0b3JlID09IE5VTEwpIHRhYmxlX3Rv
X3N0b3JlID0gJm9yaWdpbmFsOwogCi0gICAgICBpZiAodGFibGUgPT0gTlVMTCkgdGFibGUgPSAm
aS5zZWNvbmQ7Ci0gICAgICBTdG9yZUJ5dGVzKHRhYmxlLT5kYXRhLCB0YWJsZS0+bGVuZ3RoLAor
ICAgICAgU3RvcmVCeXRlcyh0YWJsZV90b19zdG9yZS0+ZGF0YSwgdGFibGVfdG9fc3RvcmUtPmxl
bmd0aCwKICAgICAgICAgICAgICAgICAgJnRyYW5zZm9ybV9vZmZzZXQsICZ0cmFuc2Zvcm1fYnVm
WzBdKTsKICAgICB9CiAgIH0KKwogICAvLyBDb21wcmVzcyBhbGwgdHJhbnNmb3JtZWQgZGF0YSBp
biBvbmUgc3RyZWFtLgogICBpZiAoIVdvZmYyQ29tcHJlc3ModHJhbnNmb3JtX2J1Zi5kYXRhKCks
IHRvdGFsX3RyYW5zZm9ybV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAmY29tcHJlc3Np
b25fYnVmWzBdLApAQCAtMzc3LDEzICszNzIsMTIgQEAgYm9vbCBDb252ZXJ0VFRGVG9XT0ZGMihj
b25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoLAogICB9CiAgICpyZXN1bHRfbGVuZ3Ro
ID0gd29mZjJfbGVuZ3RoOwogCi0gIGNvbnN0IEZvbnQmIGZpcnN0X2ZvbnQgPSBmb250X2NvbGxl
Y3Rpb24uZm9udHNbMF07CiAgIHNpemVfdCBvZmZzZXQgPSAwOwogCiAgIC8vIHN0YXJ0IG9mIHdv
ZmYyIGhlYWRlciAoaHR0cDovL3d3dy53My5vcmcvVFIvV09GRjIvI3dvZmYyMEhlYWRlcikKICAg
U3RvcmVVMzIoa1dvZmYyU2lnbmF0dXJlLCAmb2Zmc2V0LCByZXN1bHQpOwotICBpZiAoZm9udF9j
b2xsZWN0aW9uLmZvbnRzLnNpemUoKSA9PSAxKSB7Ci0gICAgU3RvcmVVMzIoZmlyc3RfZm9udC5m
bGF2b3IsICZvZmZzZXQsIHJlc3VsdCk7CisgIGlmIChmb250X2NvbGxlY3Rpb24uZmxhdm9yICE9
IGtUdGNGb250Rmxhdm9yKSB7CisgICAgU3RvcmVVMzIoZm9udF9jb2xsZWN0aW9uLmZvbnRzWzBd
LmZsYXZvciwgJm9mZnNldCwgcmVzdWx0KTsKICAgfSBlbHNlIHsKICAgICBTdG9yZVUzMihrVHRj
Rm9udEZsYXZvciwgJm9mZnNldCwgcmVzdWx0KTsKICAgfQpAQCAtMzk0LDkgKzM4OCw5IEBAIGJv
b2wgQ29udmVydFRURlRvV09GRjIoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbmd0aCwK
ICAgU3RvcmVVMzIoQ29tcHV0ZVVuY29tcHJlc3NlZExlbmd0aChmb250X2NvbGxlY3Rpb24pLCAm
b2Zmc2V0LCByZXN1bHQpOwogICBTdG9yZVUzMih0b3RhbF9jb21wcmVzc2VkX2xlbmd0aCwgJm9m
ZnNldCwgcmVzdWx0KTsgIC8vIHRvdGFsQ29tcHJlc3NlZFNpemUKIAotICAvLyBUT0RPKHVzZXIp
OiBpcyBhbHdheXMgdGFraW5nIHRoaXMgZnJvbSB0aGUgZmlyc3QgdGFibGVzIGhlYWQgT0s/Ci0g
IC8vIGZvbnQgcmV2aXNpb24KLSAgU3RvcmVCeXRlcyhmaXJzdF9mb250LkZpbmRUYWJsZShrSGVh
ZFRhYmxlVGFnKS0+ZGF0YSArIDQsIDQsICZvZmZzZXQsIHJlc3VsdCk7CisgIC8vIExldCdzIGp1
c3QgYWxsIGJlIHYxLjAKKyAgU3RvcmUxNigxLCAmb2Zmc2V0LCByZXN1bHQpOyAgLy8gbWFqb3JW
ZXJzaW9uCisgIFN0b3JlMTYoMCwgJm9mZnNldCwgcmVzdWx0KTsgIC8vIG1pbm9yVmVyc2lvbgog
ICBpZiAoY29tcHJlc3NlZF9tZXRhZGF0YV9idWZfbGVuZ3RoID4gMCkgewogICAgIFN0b3JlVTMy
KHdvZmYyX2xlbmd0aCAtIGNvbXByZXNzZWRfbWV0YWRhdGFfYnVmX2xlbmd0aCwKICAgICAgICAg
ICAgICAmb2Zmc2V0LCByZXN1bHQpOyAgLy8gbWV0YU9mZnNldApAQCAtNDE4LDcgKzQxMiw3IEBA
IGJvb2wgQ29udmVydFRURlRvV09GRjIoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbmd0
aCwKICAgfQogCiAgIC8vIGZvciBjb2xsZWN0aW9ucyBvbmx5LCBjb2xsZWN0aW9uIHRhYmxlIGRp
cmVjdG9yeQotICBpZiAoZm9udF9jb2xsZWN0aW9uLmZvbnRzLnNpemUoKSA+IDEpIHsKKyAgaWYg
KGZvbnRfY29sbGVjdGlvbi5mbGF2b3IgPT0ga1R0Y0ZvbnRGbGF2b3IpIHsKICAgICBTdG9yZVUz
Mihmb250X2NvbGxlY3Rpb24uaGVhZGVyX3ZlcnNpb24sICZvZmZzZXQsIHJlc3VsdCk7CiAgICAg
U3RvcmUyNTVVU2hvcnQoZm9udF9jb2xsZWN0aW9uLmZvbnRzLnNpemUoKSwgJm9mZnNldCwgcmVz
dWx0KTsKICAgICBmb3IgKGNvbnN0IEZvbnQmIGZvbnQgOiBmb250X2NvbGxlY3Rpb24uZm9udHMp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9vdXQuY2Mg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmNjCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ODIzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmNjCkBAIC0wLDAgKzEsNzMgQEAKKy8vIENv
cHlyaWdodCAyMDE0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGlj
ZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNl
Iik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdp
dGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2Ug
YXQKKy8vCisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8v
CisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy
aXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0
cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUg
dGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lv
bnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vCisvLyBPdXRwdXQg
YnVmZmVyIGZvciBXT0ZGMiBkZWNvbXByZXNzaW9uLgorCisjaW5jbHVkZSAiLi93b2ZmMl9vdXQu
aCIKKworbmFtZXNwYWNlIHdvZmYyIHsKKworV09GRjJTdHJpbmdPdXQ6OldPRkYyU3RyaW5nT3V0
KHN0cmluZyogYnVmKQorICA6IGJ1Zl8oYnVmKSwKKyAgICBtYXhfc2l6ZV8oa0RlZmF1bHRNYXhT
aXplKSwKKyAgICBvZmZzZXRfKDApIHt9CisKK2Jvb2wgV09GRjJTdHJpbmdPdXQ6OldyaXRlKGNv
bnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IG4pIHsKKyAgcmV0dXJuIFdyaXRlKGJ1Ziwgb2Zmc2V0Xywg
bik7Cit9CisKK2Jvb2wgV09GRjJTdHJpbmdPdXQ6OldyaXRlKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6
ZV90IG9mZnNldCwgc2l6ZV90IG4pIHsKKyAgaWYgKG9mZnNldCA+IG1heF9zaXplXyB8fCBuID4g
bWF4X3NpemVfIC0gb2Zmc2V0KSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGlmIChvZmZz
ZXQgPT0gYnVmXy0+c2l6ZSgpKSB7CisgICAgYnVmXy0+YXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihidWYpLCBuKTsKKyAgfSBlbHNlIHsKKyAgICBpZiAob2Zmc2V0ICsgbiA+IGJ1Zl8t
PnNpemUoKSkgeworICAgICAgYnVmXy0+YXBwZW5kKG9mZnNldCArIG4gLSBidWZfLT5zaXplKCks
IDApOworICAgIH0KKyAgICBidWZfLT5yZXBsYWNlKG9mZnNldCwgbiwgc3RhdGljX2Nhc3Q8Y29u
c3QgY2hhcio+KGJ1ZiksIG4pOworICB9CisgIG9mZnNldF8gPSBzdGQ6Om1heChvZmZzZXRfLCBv
ZmZzZXQgKyBuKTsKKworICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXT0ZGMlN0cmluZ091dDo6
U2V0TWF4U2l6ZShzaXplX3QgbWF4X3NpemUpIHsKKyAgbWF4X3NpemVfID0gbWF4X3NpemU7Cisg
IGlmIChvZmZzZXRfID4gbWF4X3NpemVfKSB7CisgICAgb2Zmc2V0XyA9IG1heF9zaXplXzsKKyAg
fQorfQorCitXT0ZGMk1lbW9yeU91dDo6V09GRjJNZW1vcnlPdXQodWludDhfdCogYnVmLCBzaXpl
X3QgYnVmX3NpemUpCisgIDogYnVmXyhidWYpLAorICAgIGJ1Zl9zaXplXyhidWZfc2l6ZSksCisg
ICAgb2Zmc2V0XygwKSB7fQorCitib29sIFdPRkYyTWVtb3J5T3V0OjpXcml0ZShjb25zdCB2b2lk
ICpidWYsIHNpemVfdCBuKSB7CisgIHJldHVybiBXcml0ZShidWYsIG9mZnNldF8sIG4pOworfQor
Citib29sIFdPRkYyTWVtb3J5T3V0OjpXcml0ZShjb25zdCB2b2lkICpidWYsIHNpemVfdCBvZmZz
ZXQsIHNpemVfdCBuKSB7CisgIGlmIChvZmZzZXQgPiBidWZfc2l6ZV8gfHwgbiA+IGJ1Zl9zaXpl
XyAtIG9mZnNldCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBzdGQ6Om1lbWNweShidWZf
ICsgb2Zmc2V0LCBidWYsIG4pOworICBvZmZzZXRfID0gc3RkOjptYXgob2Zmc2V0Xywgb2Zmc2V0
ICsgbik7CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIHdvZmYyCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYzk1NmFmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L3dvZmYyL3NyYy93b2ZmMl9vdXQuaApAQCAtMCwwICsxLDExNCBAQAorLy8gQ29weXJpZ2h0IDIw
MTYgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRl
ciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlv
dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGlj
ZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8v
IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVz
cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m
dHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5z
ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8v
IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8KKy8vIE91dHB1dCBidWZmZXIgZm9y
IFdPRkYyIGRlY29tcHJlc3Npb24uCisKKy8vIENvcHlyaWdodCAyMDE2IEdvb2dsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNl
bnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyBodHRwOi8vd3d3LmFwYWNo
ZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBw
bGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmli
dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lT
LAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhl
ciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZp
YyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRl
ciB0aGUgTGljZW5zZS4KKy8vCisvLyBPdXRwdXQgYnVmZmVyIGZvciBXT0ZGMiBkZWNvbXByZXNz
aW9uLgorCisjaWZuZGVmIFdPRkYyX1dPRkYyX09VVF9IXworI2RlZmluZSBXT0ZGMl9XT0ZGMl9P
VVRfSF8KKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1
ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSAiLi9wb3J0LmgiCisKK25h
bWVzcGFjZSB3b2ZmMiB7CisKKy8vIFN1Z2dlc3RlZCBtYXggc2l6ZSBmb3Igb3V0cHV0LgorY29u
c3Qgc2l6ZV90IGtEZWZhdWx0TWF4U2l6ZSA9IDMwICogMTAyNCAqIDEwMjQ7CisKK3VzaW5nIHN0
ZDo6c3RyaW5nOworCisKKy8qKgorICogT3V0cHV0IGludGVyZmFjZSBmb3IgdGhlIHdvZmYyIGRl
Y29kaW5nLgorICoKKyAqIFdyaXRlcyB0byBhcmJpdHJhcnkgb2Zmc2V0cyBhcmUgc3VwcG9ydGVk
IHRvIGZhY2lsaXRhdGUgdXBkYXRpbmcgb2Zmc2V0CisgKiB0YWJsZSBhbmQgY2hlY2tzdW1zIGFm
dGVyIHRhYmxlcyBhcmUgcmVhZHkuIFJlYWRpbmcgdGhlIGN1cnJlbnQgc2l6ZSBpcworICogc3Vw
cG9ydGVkIHNvIGEgJ2xvY2EnIHRhYmxlIGNhbiBiZSBidWlsdCB1cCB3aGlsZSB3cml0aW5nIGds
eXBocy4KKyAqCisgKiBCeSBkZWZhdWx0IGxpbWl0cyBzaXplIHRvIGtEZWZhdWx0TWF4U2l6ZS4K
KyAqLworY2xhc3MgV09GRjJPdXQgeworIHB1YmxpYzoKKyAgdmlydHVhbCB+V09GRjJPdXQodm9p
ZCkge30KKworICAvLyBBcHBlbmQgbiBieXRlcyBvZiBkYXRhIGZyb20gYnVmLgorICAvLyBSZXR1
cm4gdHJ1ZSBpZiBhbGwgd3JpdHRlbiwgZmFsc2Ugb3RoZXJ3aXNlLgorICB2aXJ0dWFsIGJvb2wg
V3JpdGUoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbikgPSAwOworCisgIC8vIFdyaXRlIG4gYnl0
ZXMgb2YgZGF0YSBmcm9tIGJ1ZiBhdCBvZmZzZXQuCisgIC8vIFJldHVybiB0cnVlIGlmIGFsbCB3
cml0dGVuLCBmYWxzZSBvdGhlcndpc2UuCisgIHZpcnR1YWwgYm9vbCBXcml0ZShjb25zdCB2b2lk
ICpidWYsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBuKSA9IDA7CisKKyAgdmlydHVhbCBzaXplX3Qg
U2l6ZSgpID0gMDsKK307CisKKy8qKgorICogRXhwYW5kaW5nIG1lbW9yeSBibG9jayBmb3Igd29m
ZjIgb3V0LiBCeSBkZWZhdWx0IGxpbWl0ZWQgdG8ga0RlZmF1bHRNYXhTaXplLgorICovCitjbGFz
cyBXT0ZGMlN0cmluZ091dCA6IHB1YmxpYyBXT0ZGMk91dCB7CisgcHVibGljOgorICAvLyBDcmVh
dGUgYSB3cml0ZXIgdGhhdCB3cml0ZXMgaXRzIGRhdGEgdG8gYnVmLgorICAvLyBidWYtPnNpemUo
KSB3aWxsIGdyb3cgdG8gYXQgbW9zdCBtYXhfc2l6ZQorICAvLyBidWYgbWF5IGJlIHNpemVkIChl
LmcuIHVzaW5nIEVzdGltYXRlV09GRjJGaW5hbFNpemUpIG9yIGVtcHR5LgorICBleHBsaWNpdCBX
T0ZGMlN0cmluZ091dChzdHJpbmcqIGJ1Zik7CisKKyAgYm9vbCBXcml0ZShjb25zdCB2b2lkICpi
dWYsIHNpemVfdCBuKSBvdmVycmlkZTsKKyAgYm9vbCBXcml0ZShjb25zdCB2b2lkICpidWYsIHNp
emVfdCBvZmZzZXQsIHNpemVfdCBuKSBvdmVycmlkZTsKKyAgc2l6ZV90IFNpemUoKSBvdmVycmlk
ZSB7IHJldHVybiBvZmZzZXRfOyB9CisgIHNpemVfdCBNYXhTaXplKCkgeyByZXR1cm4gbWF4X3Np
emVfOyB9CisgIHZvaWQgU2V0TWF4U2l6ZShzaXplX3QgbWF4X3NpemUpOworIHByaXZhdGU6Cisg
IHN0cmluZyogYnVmXzsKKyAgc2l6ZV90IG1heF9zaXplXzsKKyAgc2l6ZV90IG9mZnNldF87Cit9
OworCisvKioKKyAqIEZpeGVkIG1lbW9yeSBibG9jayBmb3Igd29mZjIgb3V0LgorICovCitjbGFz
cyBXT0ZGMk1lbW9yeU91dCA6IHB1YmxpYyBXT0ZGMk91dCB7CisgcHVibGljOgorICAvLyBDcmVh
dGUgYSB3cml0ZXIgdGhhdCB3cml0ZXMgaXRzIGRhdGEgdG8gYnVmLgorICBXT0ZGMk1lbW9yeU91
dCh1aW50OF90KiBidWYsIHNpemVfdCBidWZfc2l6ZSk7CisKKyAgYm9vbCBXcml0ZShjb25zdCB2
b2lkICpidWYsIHNpemVfdCBuKSBvdmVycmlkZTsKKyAgYm9vbCBXcml0ZShjb25zdCB2b2lkICpi
dWYsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBuKSBvdmVycmlkZTsKKyAgc2l6ZV90IFNpemUoKSBv
dmVycmlkZSB7IHJldHVybiBvZmZzZXRfOyB9CisgcHJpdmF0ZToKKyAgdWludDhfdCogYnVmXzsK
KyAgc2l6ZV90IGJ1Zl9zaXplXzsKKyAgc2l6ZV90IG9mZnNldF87Cit9OworCit9IC8vIG5hbWVz
cGFjZSB3b2ZmMgorCisjZW5kaWYgIC8vIFdPRkYyX1dPRkYyX09VVF9IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDgwYmU2MTAuLmI3ZjI0MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxNi0wOS0y
NyAgS2hhbGVkIEhvc255ICA8a2hhbGVkaG9zbnlAZWdsdWcub3JnPgorCisgICAgICAgIFVzZSBu
ZXcgd29mZjIgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjI2MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1dPRkZGaWxlRm9ybWF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldPRkYyVmVjdG9yT3V0OjpX
T0ZGMlZlY3Rvck91dCk6CisgICAgICAgIChXZWJDb3JlOjpXT0ZGMlZlY3Rvck91dDo6V3JpdGUp
OgorICAgICAgICAoV2ViQ29yZTo6V09GRjJWZWN0b3JPdXQ6OlNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udmVydFdPRkZUb1NmbnQpOgorCiAyMDE2LTA5LTI3ICBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBbRmV0Y2ggQVBJXSBSZW1vdmUgUmVhZGFibGVT
dHJlYW1Tb3VyY2UgZmlyc3RSZWFkQ2FsbGJhY2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcAppbmRleCA0MjBmYTQ4Li43NDNjZGJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZv
cm1hdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVG
b3JtYXQuY3BwCkBAIC05MCw2ICs5MCw0NSBAQCBib29sIGlzV09GRihTaGFyZWRCdWZmZXImIGJ1
ZmZlcikKICNlbmRpZgogfQogCisjaWYgVVNFKFdPRkYyKQorY2xhc3MgV09GRjJWZWN0b3JPdXQg
OiBwdWJsaWMgd29mZjI6OldPRkYyT3V0IHsKK3B1YmxpYzoKKyAgICBXT0ZGMlZlY3Rvck91dChW
ZWN0b3I8Y2hhcj4mIHZlY3RvcikKKyAgICAgICAgOiBtX3ZlY3Rvcih2ZWN0b3IpCisgICAgICAg
ICwgbV9zaXplKDApCisgICAgeyB9CisKKyAgICBib29sIFdyaXRlKGNvbnN0IHZvaWQgKmRhdGEs
IHNpemVfdCBuKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdyaXRlKGRhdGEsIG1fc2l6ZSwgbik7
CisgICAgICAgIGlmICghbV92ZWN0b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fc2l6ZSArIG4pKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoc3RhdGlj
X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLCBuKTsKKyAgICAgICAgbV9zaXplICs9IG47CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgV3JpdGUoY29uc3Qgdm9pZCAqZGF0
YSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IG4pCisgICAgeworICAgICAgICBpZiAoIW1fdmVjdG9y
LnRyeVJlc2VydmVDYXBhY2l0eShtX3NpemUgKyBuKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgbV92ZWN0b3IucmVtb3ZlKG9mZnNldCwgbik7CisgICAgICAgIG1fdmVjdG9y
Lmluc2VydChvZmZzZXQsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwgbik7CisgICAg
ICAgIG1fc2l6ZSA9IHN0ZDo6bWF4KG1fc2l6ZSwgb2Zmc2V0ICsgbik7OworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzaXplX3QgU2l6ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gbV9zaXplOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8Y2hhcj4mIG1fdmVjdG9y
OworICAgIHNpemVfdCBtX3NpemU7Cit9OworI2VuZGlmCisKIGJvb2wgY29udmVydFdPRkZUb1Nm
bnQoU2hhcmVkQnVmZmVyJiB3b2ZmLCBWZWN0b3I8Y2hhcj4mIHNmbnQpCiB7CiAgICAgQVNTRVJU
X0FSRyhzZm50LCBzZm50LmlzRW1wdHkoKSk7CkBAIC0xMTMsNyArMTUyLDggQEAgYm9vbCBjb252
ZXJ0V09GRlRvU2ZudChTaGFyZWRCdWZmZXImIHdvZmYsIFZlY3RvcjxjaGFyPiYgc2ZudCkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgc2ZudC5yZXNpemUoc2ZudFNpemUpOwog
Ci0gICAgICAgIHJldHVybiB3b2ZmMjo6Q29udmVydFdPRkYyVG9UVEYocmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oc2ZudC5kYXRhKCkpLCBzZm50LnNpemUoKSwgd29mZkRhdGEsIHdvZmZTaXpl
KTsKKyAgICAgICAgV09GRjJWZWN0b3JPdXQgb3V0KHNmbnQpOworICAgICAgICByZXR1cm4gd29m
ZjI6OkNvbnZlcnRXT0ZGMlRvVFRGKHdvZmZEYXRhLCB3b2ZmU2l6ZSwgJm91dCk7CiAgICAgfQog
I2VuZGlmCiAKLS0gCjIuMTAuMAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289945</attachid>
            <date>2016-09-27 08:35:54 -0700</date>
            <delta_ts>2016-09-27 10:02:09 -0700</delta_ts>
            <desc>Patch, v2</desc>
            <filename>0001-GTK-Update-woff2-decoder.patch</filename>
            <type>text/plain</type>
            <size>85653</size>
            <attacher name="Khaled Hosny">dr.khaled.hosny</attacher>
            
              <data encoding="base64">RnJvbSAyNTE5OGE1OGM3YmI3NDdkNGY0ZThiMDBkZjg5NDRlYTRiOTJiMjg2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLaGFsZWQgSG9zbnkgPGtoYWxlZGhvc255QGVnbHVnLm9yZz4K
RGF0ZTogVHVlLCAyNyBTZXAgMjAxNiAxNzowMToyMyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFtH
VEtdIFVwZGF0ZSB3b2ZmMiBkZWNvZGVyCgotLS0KIFNvdXJjZS9UaGlyZFBhcnR5L0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyOSArCiBTb3VyY2UvVGhpcmRQYXJ0eS93b2Zm
Mi9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICB8ICAgIDEgKwogU291cmNlL1RoaXJkUGFydHkv
d29mZjIvUkVBRE1FLndlYmtpdCAgICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvVGhpcmRQ
YXJ0eS93b2ZmMi9zcmMvZmlsZS5oICAgICAgICAgICAgICAgICB8ICAgMTYgKy0KIFNvdXJjZS9U
aGlyZFBhcnR5L3dvZmYyL3NyYy9mb250LmNjICAgICAgICAgICAgICAgIHwgICAyMyArLQogU291
cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL2ZvbnQuaCAgICAgICAgICAgICAgICAgfCAgICAxICsK
IFNvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9nbHlwaC5jYyAgICAgICAgICAgICAgIHwgICAg
NiArLQogU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3N0b3JlX2J5dGVzLmggICAgICAgICAg
fCAgICAzICstCiBTb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvdHJhbnNmb3JtLmNjICAgICAg
ICAgICB8ICAgIDIgKy0KIFNvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9jb21tb24u
Y2MgICAgICAgIHwgICAxMyArLQogU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2Nv
bXByZXNzLmNjICAgICAgfCAgICAyICstCiBTb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29m
ZjJfZGVjLmNjICAgICAgICAgICB8IDEwNDEgKysrKysrKysrKy0tLS0tLS0tLS0KIFNvdXJjZS9U
aGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9kZWMuaCAgICAgICAgICAgIHwgICAgOCArCiBTb3Vy
Y2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfZGVjb21wcmVzcy5jYyAgICB8ICAgMzAgKy0K
IFNvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9lbmMuY2MgICAgICAgICAgIHwgICA0
NCArLQogU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX291dC5jYyAgICAgICAgICAg
fCAgIDczICsrCiBTb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmggICAgICAg
ICAgICB8ICAxMTQgKysrCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgMTUgKwogLi4uL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZp
bGVGb3JtYXQuY3BwICAgfCAgIDQyICstCiAxOSBmaWxlcyBjaGFuZ2VkLCA4NDkgaW5zZXJ0aW9u
cygrKSwgNjE2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBh
cnR5L3dvZmYyL3NyYy93b2ZmMl9vdXQuY2MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhp
cmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9DaGFuZ2VMb2cKaW5kZXggZWVmOGE1
Yy4uMTU5M2Q1YiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE2LTA5LTI3
ICBLaGFsZWQgSG9zbnkgIDxraGFsZWRob3NueUBlZ2x1Zy5vcmc+CisKKyAgICAgICAgVXBkYXRl
IHdvZmYyIHRvIGxhdGVzdCByZXZpc2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiB3b2ZmMi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3b2Zm
Mi9SRUFETUUud2Via2l0OgorICAgICAgICAqIHdvZmYyL3NyYy9maWxlLmg6CisgICAgICAgICh3
b2ZmMjo6R2V0RmlsZUNvbnRlbnQpOgorICAgICAgICAod29mZjI6OlNldEZpbGVDb250ZW50cyk6
CisgICAgICAgICogd29mZjIvc3JjL2ZvbnQuY2M6CisgICAgICAgICogd29mZjIvc3JjL2ZvbnQu
aDoKKyAgICAgICAgKiB3b2ZmMi9zcmMvZ2x5cGguY2M6CisgICAgICAgICogd29mZjIvc3JjL3N0
b3JlX2J5dGVzLmg6CisgICAgICAgICh3b2ZmMjo6U3RvcmUxNik6CisgICAgICAgICogd29mZjIv
c3JjL3RyYW5zZm9ybS5jYzoKKyAgICAgICAgKiB3b2ZmMi9zcmMvd29mZjJfY29tbW9uLmNjOgor
ICAgICAgICAqIHdvZmYyL3NyYy93b2ZmMl9jb21wcmVzcy5jYzoKKyAgICAgICAgKiB3b2ZmMi9z
cmMvd29mZjJfZGVjLmNjOgorICAgICAgICAqIHdvZmYyL3NyYy93b2ZmMl9kZWMuaDoKKyAgICAg
ICAgKiB3b2ZmMi9zcmMvd29mZjJfZGVjb21wcmVzcy5jYzoKKyAgICAgICAgKiB3b2ZmMi9zcmMv
d29mZjJfZW5jLmNjOgorICAgICAgICAqIHdvZmYyL3NyYy93b2ZmMl9vdXQuY2M6IEFkZGVkLgor
ICAgICAgICAqIHdvZmYyL3NyYy93b2ZmMl9vdXQuaDogQWRkZWQuCisgICAgICAgICh3b2ZmMjo6
V09GRjJPdXQ6On5XT0ZGMk91dCk6CisgICAgICAgICh3b2ZmMjo6V09GRjJTdHJpbmdPdXQ6Ok1h
eFNpemUpOgorCiAyMDE2LTA5LTI3ICBLb25zdGFudGluIFRva2FyZXYgIDxhbm51bGVuQHlhbmRl
eC5ydT4gYW5kIFZpdGFsaXkgU2xvYm9kaW4gIDx2aXRhbGl5LnNsb2JvZGluQGdtYWlsLmNvbT4K
IAogICAgICAgICBGaXhlZCBjb21waWxhdGlvbiBvZiBXT0ZGMiBvbiBXaW5kb3dzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9UaGly
ZFBhcnR5L3dvZmYyL0NNYWtlTGlzdHMudHh0CmluZGV4IGFiNDgxNDguLjMwZjA0OGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L3dvZmYyL0NNYWtlTGlzdHMudHh0CkBAIC05LDYgKzksNyBAQCBzZXQoV09G
RjJfU09VUkNFUwogICAke1dPRkYyX0RJUn0vc3JjL3ZhcmlhYmxlX2xlbmd0aC5jYwogICAke1dP
RkYyX0RJUn0vc3JjL3dvZmYyX2NvbW1vbi5jYwogICAke1dPRkYyX0RJUn0vc3JjL3dvZmYyX2Rl
Yy5jYworICAke1dPRkYyX0RJUn0vc3JjL3dvZmYyX291dC5jYwogKQogCiBpbmNsdWRlX2RpcmVj
dG9yaWVzKCIke1RISVJEUEFSVFlfRElSfS9icm90bGkvZGVjIikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L3dvZmYyL1JFQURNRS53ZWJraXQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2Zm
Mi9SRUFETUUud2Via2l0CmluZGV4IDBlMDkyMDIuLjkzNDgxNzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L3dvZmYyL1JFQURNRS53ZWJraXQKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
d29mZjIvUkVBRE1FLndlYmtpdApAQCAtMTEsNCArMTEsNCBAQCBUaGUgaW4tdHJlZSBjb3B5IGlz
IHVwZGF0ZWQgYnkgcnVubmluZwogICBzaCB1cGRhdGUuc2gKIGZyb20gd2l0aGluIHRoZSBtb2R1
bGVzL3dvZmYyIGRpcmVjdG9yeS4KIAotQ3VycmVudCB2ZXJzaW9uOiBbY29tbWl0IDY0M2M3YjQ1
ODkxY2JlYjVkYzFmNzU5OWE0YzliNTNmYmU4MmEwOGZdLgorQ3VycmVudCB2ZXJzaW9uOiBbY29t
bWl0IDYzYjhmYjZkMGQ3OTdmMDRlNzdlZTgyNWZkOGZjZjdlYTYyMDVhYWNdLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL2ZpbGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L3dvZmYyL3NyYy9maWxlLmgKaW5kZXggNjlhOTJmOC4uN2FmY2IzMSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL2ZpbGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93
b2ZmMi9zcmMvZmlsZS5oCkBAIC0xMiw3ICsxMiw3IEBACiAvLyBTZWUgdGhlIExpY2Vuc2UgZm9y
IHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAvLyBsaW1p
dGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIC8vCi0vLyBGaWxlIElPIGhlbHBlcnMKKy8vIEZp
bGUgSU8gaGVscGVycy4KIAogI2lmbmRlZiBXT0ZGMl9GSUxFX0hfCiAjZGVmaW5lIFdPRkYyX0ZJ
TEVfSF8KQEAgLTIyLDE4ICsyMiwyMCBAQAogCiBuYW1lc3BhY2Ugd29mZjIgewogCi1pbmxpbmUg
c3RkOjpzdHJpbmcgR2V0RmlsZUNvbnRlbnQoc3RkOjpzdHJpbmcgZmlsZW5hbWUpIHsKK3VzaW5n
IHN0ZDo6c3RyaW5nOworCisKK2lubGluZSBzdHJpbmcgR2V0RmlsZUNvbnRlbnQoc3RyaW5nIGZp
bGVuYW1lKSB7CiAgIHN0ZDo6aWZzdHJlYW0gaWZzKGZpbGVuYW1lLmNfc3RyKCksIHN0ZDo6aW9z
OjpiaW5hcnkpOwotICByZXR1cm4gc3RkOjpzdHJpbmcoCisgIHJldHVybiBzdHJpbmcoCiAgICAg
c3RkOjppc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+KGlmcy5yZGJ1ZigpKSwKICAgICBzdGQ6Omlz
dHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4oKSk7CiB9CiAKLWlubGluZSB2b2lkIFNldEZpbGVDb250
ZW50cyhzdGQ6OnN0cmluZyBmaWxlbmFtZSwgc3RkOjpzdHJpbmcgY29udGVudCkgeworaW5saW5l
IHZvaWQgU2V0RmlsZUNvbnRlbnRzKHN0cmluZyBmaWxlbmFtZSwgc3RyaW5nOjppdGVyYXRvciBz
dGFydCwKKyAgICBzdHJpbmc6Oml0ZXJhdG9yIGVuZCkgewogICBzdGQ6Om9mc3RyZWFtIG9mcyhm
aWxlbmFtZS5jX3N0cigpLCBzdGQ6Omlvczo6YmluYXJ5KTsKLSAgc3RkOjpjb3B5KGNvbnRlbnQu
YmVnaW4oKSwKLSAgICAgICAgICAgIGNvbnRlbnQuZW5kKCksCi0gICAgICAgICAgICBzdGQ6Om9z
dHJlYW1faXRlcmF0b3I8Y2hhcj4ob2ZzKSk7CisgIHN0ZDo6Y29weShzdGFydCwgZW5kLCBzdGQ6
Om9zdHJlYW1faXRlcmF0b3I8Y2hhcj4ob2ZzKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIHdvZmYy
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvZm9udC5jYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9mb250LmNjCmluZGV4IDdjYzU2ODguLjA2MDY3MzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9mb250LmNjCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9mb250LmNjCkBAIC00OSwxMSArNDksNyBAQCBzdGQ6OnZl
Y3Rvcjx1aW50MzJfdD4gRm9udDo6T3V0cHV0T3JkZXJlZFRhZ3MoKSBjb25zdCB7CiAgICAgb3V0
cHV0X29yZGVyLnB1c2hfYmFjayh0YWJsZS50YWcpOwogICB9CiAKLSAgLy8gQWxwaGFiZXRpemUg
YW5kIGRvIG5vdCBwdXQgbG9jYSBpbW1lZGlhdGVseSBhZnRlciBnbHlmCi0gIC8vIFRoaXMgdmlv
bGF0ZXMgd29mZjIgc3BlYyBidXQgcmVzdWx0cyBpbiBhIGZvbnQgdGhhdCBwYXNzZXMgT1RTCi0g
IHN0ZDo6c29ydChvdXRwdXRfb3JkZXIuYmVnaW4oKSwgb3V0cHV0X29yZGVyLmVuZCgpKTsKLSAg
Ly8gVE9ETyh1c2VyKTogY2hhbmdlIHRvIG1hdGNoIHNwZWMgb25jZSBicm93c2VycyBhcmUgb24g
bmV3ZXIgT1RTCi0gIC8qCisgIC8vIEFscGhhYmV0aXplIHRoZW4gcHV0IGxvY2EgaW1tZWRpYXRl
bHkgYWZ0ZXIgZ2x5ZgogICBhdXRvIGdseWZfbG9jID0gc3RkOjpmaW5kKG91dHB1dF9vcmRlci5i
ZWdpbigpLCBvdXRwdXRfb3JkZXIuZW5kKCksCiAgICAgICBrR2x5ZlRhYmxlVGFnKTsKICAgYXV0
byBsb2NhX2xvYyA9IHN0ZDo6ZmluZChvdXRwdXRfb3JkZXIuYmVnaW4oKSwgb3V0cHV0X29yZGVy
LmVuZCgpLApAQCAtNjIsNyArNTgsNyBAQCBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4gRm9udDo6T3V0
cHV0T3JkZXJlZFRhZ3MoKSBjb25zdCB7CiAgICAgb3V0cHV0X29yZGVyLmVyYXNlKGxvY2FfbG9j
KTsKICAgICBvdXRwdXRfb3JkZXIuaW5zZXJ0KHN0ZDo6ZmluZChvdXRwdXRfb3JkZXIuYmVnaW4o
KSwgb3V0cHV0X29yZGVyLmVuZCgpLAogICAgICAga0dseWZUYWJsZVRhZykgKyAxLCBrTG9jYVRh
YmxlVGFnKTsKLSAgfSovCisgIH0KIAogICByZXR1cm4gb3V0cHV0X29yZGVyOwogfQpAQCAtMTQ1
LDcgKzE0MSw3IEBAIGJvb2wgUmVhZFRydWVUeXBlQ29sbGVjdGlvbihCdWZmZXIqIGZpbGUsIGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW4sCiAgICAgfQogCiAgICAgc3RkOjp2ZWN0b3I8
dWludDMyX3Q+IG9mZnNldHM7Ci0gICAgZm9yIChhdXRvIGkgPSAwOyBpIDwgbnVtX2ZvbnRzOyBp
KyspIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bV9mb250czsgaSsrKSB7CiAgICAg
ICB1aW50MzJfdCBvZmZzZXQ7CiAgICAgICBpZiAoIWZpbGUtPlJlYWRVMzIoJm9mZnNldCkpIHsK
ICAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwpAQCAtMTg1LDE1ICsx
ODEsMTQgQEAgYm9vbCBSZWFkRm9udENvbGxlY3Rpb24oY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRDb2xsZWN0aW9uKiBmb250X2Nv
bGxlY3Rpb24pIHsKICAgQnVmZmVyIGZpbGUoZGF0YSwgbGVuKTsKIAotICB1aW50MzJfdCBmbGF2
b3I7Ci0gIGlmICghZmlsZS5SZWFkVTMyKCZmbGF2b3IpKSB7CisgIGlmICghZmlsZS5SZWFkVTMy
KCZmb250X2NvbGxlY3Rpb24tPmZsYXZvcikpIHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lP
Tl9GQUlMVVJFKCk7CiAgIH0KIAotICBpZiAoZmxhdm9yICE9IGtUdGNGb250Rmxhdm9yKSB7Cisg
IGlmIChmb250X2NvbGxlY3Rpb24tPmZsYXZvciAhPSBrVHRjRm9udEZsYXZvcikgewogICAgIGZv
bnRfY29sbGVjdGlvbi0+Zm9udHMucmVzaXplKDEpOwogICAgIEZvbnQmIGZvbnQgPSBmb250X2Nv
bGxlY3Rpb24tPmZvbnRzWzBdOwotICAgIGZvbnQuZmxhdm9yID0gZmxhdm9yOworICAgIGZvbnQu
Zmxhdm9yID0gZm9udF9jb2xsZWN0aW9uLT5mbGF2b3I7CiAgICAgcmV0dXJuIFJlYWRUcnVlVHlw
ZUZvbnQoJmZpbGUsIGRhdGEsIGxlbiwgJmZvbnQpOwogICB9CiAgIHJldHVybiBSZWFkVHJ1ZVR5
cGVDb2xsZWN0aW9uKCZmaWxlLCBkYXRhLCBsZW4sIGZvbnRfY29sbGVjdGlvbik7CkBAIC0yOTAs
NyArMjg1LDcgQEAgYm9vbCBXcml0ZUZvbnRDb2xsZWN0aW9uKGNvbnN0IEZvbnRDb2xsZWN0aW9u
JiBmb250X2NvbGxlY3Rpb24sIHVpbnQ4X3QqIGRzdCwKICAgc2l6ZV90IG9mZnNldCA9IDA7CiAK
ICAgLy8gSXQncyBzaW1wbGVyIGlmIHRoaXMganVzdCBhIHNpbXBsZSBzZm50Ci0gIGlmIChmb250
X2NvbGxlY3Rpb24uZm9udHMuc2l6ZSgpID09IDEpIHsKKyAgaWYgKGZvbnRfY29sbGVjdGlvbi5m
bGF2b3IgIT0ga1R0Y0ZvbnRGbGF2b3IpIHsKICAgICByZXR1cm4gV3JpdGVGb250KGZvbnRfY29s
bGVjdGlvbi5mb250c1swXSwgJm9mZnNldCwgZHN0LCBkc3Rfc2l6ZSk7CiAgIH0KIApAQCAtMzAx
LDcgKzI5Niw3IEBAIGJvb2wgV3JpdGVGb250Q29sbGVjdGlvbihjb25zdCBGb250Q29sbGVjdGlv
biYgZm9udF9jb2xsZWN0aW9uLCB1aW50OF90KiBkc3QsCiAKICAgLy8gT2Zmc2V0IFRhYmxlLCB6
ZXJvZWQgZm9yIG5vdwogICBzaXplX3Qgb2Zmc2V0X3RhYmxlID0gb2Zmc2V0OyAgLy8gd2hlcmUg
dG8gd3JpdGUgb2Zmc2V0cyBsYXRlcgotICBmb3IgKGludCBpID0gMDsgaSA8IGZvbnRfY29sbGVj
dGlvbi5mb250cy5zaXplKCk7IGkrKykgeworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZvbnRf
Y29sbGVjdGlvbi5mb250cy5zaXplKCk7IGkrKykgewogICAgIFN0b3JlVTMyKDAsICZvZmZzZXQs
IGRzdCk7CiAgIH0KIApAQCAtMzEyLDcgKzMwNyw3IEBAIGJvb2wgV3JpdGVGb250Q29sbGVjdGlv
bihjb25zdCBGb250Q29sbGVjdGlvbiYgZm9udF9jb2xsZWN0aW9uLCB1aW50OF90KiBkc3QsCiAg
IH0KIAogICAvLyBXcml0ZSBmb250cyBhbmQgdGhlaXIgb2Zmc2V0cy4KLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCBmb250X2NvbGxlY3Rpb24uZm9udHMuc2l6ZSgpOyBpKyspIHsKKyAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmb250X2NvbGxlY3Rpb24uZm9udHMuc2l6ZSgpOyBpKyspIHsKICAgICBj
b25zdCBhdXRvJiBmb250ID0gZm9udF9jb2xsZWN0aW9uLmZvbnRzW2ldOwogICAgIFN0b3JlVTMy
KG9mZnNldCwgJm9mZnNldF90YWJsZSwgZHN0KTsKICAgICBpZiAoIVdyaXRlRm9udChmb250LCAm
b2Zmc2V0LCBkc3QsIGRzdF9zaXplKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
d29mZjIvc3JjL2ZvbnQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9mb250LmgKaW5k
ZXggNjAxYzRjOC4uOTM4MDZlNiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIv
c3JjL2ZvbnQuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvZm9udC5oCkBAIC02
MSw2ICs2MSw3IEBAIHN0cnVjdCBGb250IHsKIAogLy8gQWNjb21vZGF0ZXMgYm90aCBzaW5ndWxh
ciAoT1RGLCBUVEYpIGFuZCBjb2xsZWN0aW9uIChUVEMpIGZvbnRzCiBzdHJ1Y3QgRm9udENvbGxl
Y3Rpb24geworICB1aW50MzJfdCBmbGF2b3I7CiAgIHVpbnQzMl90IGhlYWRlcl92ZXJzaW9uOwog
ICAvLyAob2Zmc2V0LCBmaXJzdCB1c2Ugb2YgdGFibGUqKSBwYWlycwogICBzdGQ6Om1hcDx1aW50
MzJfdCwgRm9udDo6VGFibGUqPiB0YWJsZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS93b2ZmMi9zcmMvZ2x5cGguY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvZ2x5cGgu
Y2MKaW5kZXggMTdiZWYzOC4uMWRhZGFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
d29mZjIvc3JjL2dseXBoLmNjCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9nbHlw
aC5jYwpAQCAtMTIyLDcgKzEyMiw3IEBAIGJvb2wgUmVhZEdseXBoKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBsZW4sIEdseXBoKiBnbHlwaCkgewogICAgIHVpbnQ4X3QgZmxhZ19yZXBlYXQg
PSAwOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2NvbnRvdXJzOyArK2kpIHsKICAgICAg
IGZsYWdzW2ldLnJlc2l6ZShnbHlwaC0+Y29udG91cnNbaV0uc2l6ZSgpKTsKLSAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgZ2x5cGgtPmNvbnRvdXJzW2ldLnNpemUoKTsgKytqKSB7CisgICAgICBm
b3IgKHNpemVfdCBqID0gMDsgaiA8IGdseXBoLT5jb250b3Vyc1tpXS5zaXplKCk7ICsraikgewog
ICAgICAgICBpZiAoZmxhZ19yZXBlYXQgPT0gMCkgewogICAgICAgICAgIGlmICghYnVmZmVyLlJl
YWRVOCgmZmxhZykpIHsKICAgICAgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxV
UkUoKTsKQEAgLTE0Myw3ICsxNDMsNyBAQCBib29sIFJlYWRHbHlwaChjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3QgbGVuLCBHbHlwaCogZ2x5cGgpIHsKICAgICAvLyBSZWFkIHRoZSB4IGNvb3Jk
aW5hdGVzLgogICAgIGludCBwcmV2X3ggPSAwOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
X2NvbnRvdXJzOyArK2kpIHsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZ2x5cGgtPmNvbnRv
dXJzW2ldLnNpemUoKTsgKytqKSB7CisgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGdseXBo
LT5jb250b3Vyc1tpXS5zaXplKCk7ICsraikgewogICAgICAgICB1aW50OF90IGZsYWcgPSBmbGFn
c1tpXVtqXTsKICAgICAgICAgaWYgKGZsYWcgJiBrRkxBR19YU0hPUlQpIHsKICAgICAgICAgICAv
LyBzaW5nbGUgYnl0ZSB4LWRlbHRhIGNvb3JkIHZhbHVlCkBAIC0xNzAsNyArMTcwLDcgQEAgYm9v
bCBSZWFkR2x5cGgoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbiwgR2x5cGgqIGdseXBo
KSB7CiAgICAgLy8gUmVhZCB0aGUgeSBjb29yZGluYXRlcy4KICAgICBpbnQgcHJldl95ID0gMDsK
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9jb250b3VyczsgKytpKSB7Ci0gICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IGdseXBoLT5jb250b3Vyc1tpXS5zaXplKCk7ICsraikgeworICAgICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCBnbHlwaC0+Y29udG91cnNbaV0uc2l6ZSgpOyArK2opIHsK
ICAgICAgICAgdWludDhfdCBmbGFnID0gZmxhZ3NbaV1bal07CiAgICAgICAgIGlmIChmbGFnICYg
a0ZMQUdfWVNIT1JUKSB7CiAgICAgICAgICAgLy8gc2luZ2xlIGJ5dGUgeS1kZWx0YSBjb29yZCB2
YWx1ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3N0b3JlX2J5dGVz
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvc3RvcmVfYnl0ZXMuaAppbmRleCBlMWEx
MWYzLi43NGIyNzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvc3Rv
cmVfYnl0ZXMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvc3RvcmVfYnl0ZXMu
aApAQCAtNTgsOCArNTgsNyBAQCBpbmxpbmUgdm9pZCBTdG9yZTE2KGludCB2YWwsIHNpemVfdCog
b2Zmc2V0LCB1aW50OF90KiBkc3QpIHsKICAgICAgICgodmFsICYgMHhGRikgPDwgOCkgfCAoKHZh
bCAmIDB4RkYwMCkgPj4gOCk7CiAgICpvZmZzZXQgKz0gMjsKICNlbGlmIChkZWZpbmVkKF9fQllU
RV9PUkRFUl9fKSAmJiAoX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9CSUdfRU5ESUFOX18pKQot
ICAqcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGRzdCArICpvZmZzZXQpID0KLSAgICAgIHN0
YXRpY19jYXN0PHVpbnQxNl90Pih2YWwpOworICAqcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+
KGRzdCArICpvZmZzZXQpID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHZhbCk7CiAgICpvZmZzZXQg
Kz0gMjsKICNlbHNlCiAgIGRzdFsoKm9mZnNldCkrK10gPSB2YWwgPj4gODsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy90cmFuc2Zvcm0uY2MgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS93b2ZmMi9zcmMvdHJhbnNmb3JtLmNjCmluZGV4IGI3YjBjZjAuLjJhZDhiMTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy90cmFuc2Zvcm0uY2MKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3RyYW5zZm9ybS5jYwpAQCAtMzksNyArMzksNyBAQCB2
b2lkIFdyaXRlQnl0ZXMoc3RkOjp2ZWN0b3I8dWludDhfdD4qIG91dCwgY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90IGxlbikgewogfQogCiB2b2lkIFdyaXRlQnl0ZXMoc3RkOjp2ZWN0b3I8dWlu
dDhfdD4qIG91dCwgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIGluKSB7Ci0gIGZvciAoaW50
IGkgPSAwOyBpIDwgaW4uc2l6ZSgpOyArK2kpIHsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
bi5zaXplKCk7ICsraSkgewogICAgIG91dC0+cHVzaF9iYWNrKGluW2ldKTsKICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2NvbW1vbi5jYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9jb21tb24uY2MKaW5kZXggMzlkYzU0ZS4u
ZWJhNmE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2Nv
bW1vbi5jYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfY29tbW9uLmNj
CkBAIC0yMyw3ICsyMyw4IEBAIG5hbWVzcGFjZSB3b2ZmMiB7CiAKIHVpbnQzMl90IENvbXB1dGVV
TG9uZ1N1bShjb25zdCB1aW50OF90KiBidWYsIHNpemVfdCBzaXplKSB7CiAgIHVpbnQzMl90IGNo
ZWNrc3VtID0gMDsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsKKyAg
c2l6ZV90IGFsaWduZWRfc2l6ZSA9IHNpemUgJiB+MzsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhbGlnbmVkX3NpemU7IGkgKz0gNCkgewogI2lmIChkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAm
JiAoX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9MSVRUTEVfRU5ESUFOX18pKQogICAgIHVpbnQz
Ml90IHYgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGJ1ZiArIGkpOwogICAg
IGNoZWNrc3VtICs9ICgoKHYgJiAweEZGKSA8PCAyNCkgfCAoKHYgJiAweEZGMDApIDw8IDgpIHwK
QEAgLTM1LDYgKzM2LDE2IEBAIHVpbnQzMl90IENvbXB1dGVVTG9uZ1N1bShjb25zdCB1aW50OF90
KiBidWYsIHNpemVfdCBzaXplKSB7CiAgICAgICAoYnVmW2kgKyAyXSA8PCA4KSB8IGJ1ZltpICsg
M107CiAjZW5kaWYKICAgfQorCisgIC8vIHRyZWF0IHNpemUgbm90IGFsaWduZWQgb24gNCBhcyBp
ZiBpdCB3ZXJlIHBhZGRlZCB0byA0IHdpdGggMCdzCisgIGlmIChzaXplICE9IGFsaWduZWRfc2l6
ZSkgeworICAgIHVpbnQzMl90IHYgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSBhbGlnbmVkX3Np
emU7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgIHYgfD0gYnVmW2ldIDw8ICgyNCAtIDggKiAoaSAm
IDMpKTsKKyAgICB9CisgICAgY2hlY2tzdW0gKz0gdjsKKyAgfQorCiAgIHJldHVybiBjaGVja3N1
bTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2Nv
bXByZXNzLmNjIGIvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2NvbXByZXNzLmNj
CmluZGV4IGVjNDFhZDUuLmU1Y2Y3MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dv
ZmYyL3NyYy93b2ZmMl9jb21wcmVzcy5jYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9z
cmMvd29mZjJfY29tcHJlc3MuY2MKQEAgLTQ3LDcgKzQ3LDcgQEAgaW50IG1haW4oaW50IGFyZ2Ms
IGNoYXIgKiphcmd2KSB7CiAgIH0KICAgb3V0cHV0LnJlc2l6ZShvdXRwdXRfc2l6ZSk7CiAKLSAg
d29mZjI6OlNldEZpbGVDb250ZW50cyhvdXRmaWxlbmFtZSwgb3V0cHV0KTsKKyAgd29mZjI6OlNl
dEZpbGVDb250ZW50cyhvdXRmaWxlbmFtZSwgb3V0cHV0LmJlZ2luKCksIG91dHB1dC5lbmQoKSk7
CiAKICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9z
cmMvd29mZjJfZGVjLmNjIGIvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2RlYy5j
YwppbmRleCAyZmEyOTFjLi5lYzc1Nzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS93
b2ZmMi9zcmMvd29mZjJfZGVjLmNjCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93
b2ZmMl9kZWMuY2MKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAjaW5jbHVk
ZSA8bWFwPgogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVk
ZSAiLi9kZWNvZGUuaCIKICNpbmNsdWRlICIuL2J1ZmZlci5oIgpAQCAtNjUsMTMgKzY2LDU0IEBA
IGNvbnN0IHNpemVfdCBrQ2hlY2tTdW1BZGp1c3RtZW50T2Zmc2V0ID0gODsKIGNvbnN0IHNpemVf
dCBrRW5kUHRzT2ZDb250b3Vyc09mZnNldCA9IDEwOwogY29uc3Qgc2l6ZV90IGtDb21wb3NpdGVH
bHlwaEJlZ2luID0gMTA7CiAKKy8vIDk4JSBvZiBHb29nbGUgRm9udHMgaGF2ZSBubyBnbHlwaCBh
Ym92ZSA1ayBieXRlcworLy8gTGFyZ2VzdCBnbHlwaCBldmVyIG9ic2VydmVkIHdhcyA3MmsgYnl0
ZXMKK2NvbnN0IHNpemVfdCBrRGVmYXVsdEdseXBoQnVmID0gNTEyMDsKKworLy8gT3ZlciAxNGsg
dGVzdCBmb250cyB0aGUgbWF4IGNvbXByZXNzaW9uIHJhdGlvIHNlZW4gdG8gZGF0ZSB3YXMgfjIw
LgorLy8gPjEwMCBzdWdnZXN0cyB5b3Ugd3JvdGUgYSBiYWQgdW5jb21wcmVzc2VkIHNpemUuCitj
b25zdCBmbG9hdCBrTWF4UGxhdXNpYmxlQ29tcHJlc3Npb25SYXRpbyA9IDEwMC4wOworCiAvLyBt
ZXRhZGF0YSBmb3IgYSBUVEMgZm9udCBlbnRyeQogc3RydWN0IFR0Y0ZvbnQgewogICB1aW50MzJf
dCBmbGF2b3I7CiAgIHVpbnQzMl90IGRzdF9vZmZzZXQ7CisgIHVpbnQzMl90IGhlYWRlcl9jaGVj
a3N1bTsKICAgc3RkOjp2ZWN0b3I8dWludDE2X3Q+IHRhYmxlX2luZGljZXM7CiB9OwogCitzdHJ1
Y3QgV09GRjJIZWFkZXIgeworICB1aW50MzJfdCBmbGF2b3I7CisgIHVpbnQzMl90IGhlYWRlcl92
ZXJzaW9uOworICB1aW50MTZfdCBudW1fdGFibGVzOworICB1aW50NjRfdCBjb21wcmVzc2VkX29m
ZnNldDsKKyAgdWludDMyX3QgY29tcHJlc3NlZF9sZW5ndGg7CisgIHVpbnQzMl90IHVuY29tcHJl
c3NlZF9zaXplOworICBzdGQ6OnZlY3RvcjxUYWJsZT4gdGFibGVzOyAgLy8gbnVtX3RhYmxlcyB1
bmlxdWUgdGFibGVzCisgIHN0ZDo6dmVjdG9yPFR0Y0ZvbnQ+IHR0Y19mb250czsgIC8vIG1ldGFk
YXRhIHRvIGhlbHAgcmVidWlsZCBmb250Cit9OworCisvKioKKyAqIEFjY3VtdWxhdGVzIGRhdGEg
d2UgbWF5IG5lZWQgdG8gcmVjb25zdHJ1Y3QgYSBzaW5nbGUgZm9udC4gT25lIHBlciBmb250Cisg
KiBjcmVhdGVkIGZvciBhIFRUQy4KKyAqLworc3RydWN0IFdPRkYyRm9udEluZm8geworICB1aW50
MTZfdCBudW1fZ2x5cGhzOworICB1aW50MTZfdCBpbmRleF9mb3JtYXQ7CisgIHVpbnQxNl90IG51
bV9obWV0cmljczsKKyAgc3RkOjp2ZWN0b3I8aW50MTZfdD4geF9taW5zOworICBzdGQ6Om1hcDx1
aW50MzJfdCwgdWludDMyX3Q+IHRhYmxlX2VudHJ5X2J5X3RhZzsKK307CisKKy8vIEFjY3VtdWxh
dGVzIG1ldGFkYXRhIGFzIHdlIHJlYnVpbGQgdGhlIGZvbnQKK3N0cnVjdCBSZWJ1aWxkTWV0YWRh
dGEgeworICB1aW50MzJfdCBoZWFkZXJfY2hlY2tzdW07ICAvLyBzZXQgYnkgV3JpdGVIZWFkZXJz
CisgIHN0ZDo6dmVjdG9yPFdPRkYyRm9udEluZm8+IGZvbnRfaW5mb3M7CisgIC8vIGNoZWNrc3Vt
cyBmb3IgdGFibGVzIHRoYXQgaGF2ZSBiZWVuIHdyaXR0ZW4uCisgIC8vICh0YWcsIHNyY19vZmZz
ZXQpID0+IGNoZWNrc3VtLiBOZWVkIGJvdGggYmVjYXVzZSAwLWxlbmd0aCBsb2NhLgorICBzdGQ6
Om1hcDxzdGQ6OnBhaXI8dWludDMyX3QsIHVpbnQzMl90PiwgdWludDMyX3Q+IGNoZWNrc3VtczsK
K307CisKIGludCBXaXRoU2lnbihpbnQgZmxhZywgaW50IGJhc2V2YWwpIHsKICAgLy8gUHJlY29u
ZGl0aW9uOiAwIDw9IGJhc2V2YWwgPCA2NTUzNiAodG8gYXZvaWQgaW50ZWdlciBvdmVyZmxvdykK
ICAgcmV0dXJuIChmbGFnICYgMSkgPyBiYXNldmFsIDogLWJhc2V2YWw7CkBAIC0yNDQsNiArMjg2
LDcgQEAgYm9vbCBTdG9yZVBvaW50cyh1bnNpZ25lZCBpbnQgbl9wb2ludHMsIGNvbnN0IFBvaW50
KiBwb2ludHMsCiAKIC8vIENvbXB1dGUgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgY29vcmRpbmF0
ZXMsIGFuZCBzdG9yZSBpbnRvIGEgZ2x5ZiBidWZmZXIuCiAvLyBBIHByZWNvbmRpdGlvbiBpcyB0
aGF0IHRoZXJlIGFyZSBhdCBsZWFzdCAxMCBieXRlcyBhdmFpbGFibGUuCisvLyBkc3Qgc2hvdWxk
IHBvaW50IHRvIHRoZSBiZWdpbm5pbmcgb2YgYSAnZ2x5ZicgcmVjb3JkLgogdm9pZCBDb21wdXRl
QmJveCh1bnNpZ25lZCBpbnQgbl9wb2ludHMsIGNvbnN0IFBvaW50KiBwb2ludHMsIHVpbnQ4X3Qq
IGRzdCkgewogICBpbnQgeF9taW4gPSAwOwogICBpbnQgeV9taW4gPSAwOwpAQCAtMjcxLDE0ICsz
MTQsMTUgQEAgdm9pZCBDb21wdXRlQmJveCh1bnNpZ25lZCBpbnQgbl9wb2ludHMsIGNvbnN0IFBv
aW50KiBwb2ludHMsIHVpbnQ4X3QqIGRzdCkgewogICBvZmZzZXQgPSBTdG9yZTE2KGRzdCwgb2Zm
c2V0LCB5X21heCk7CiB9CiAKLWJvb2wgUHJvY2Vzc0NvbXBvc2l0ZShCdWZmZXIqIGNvbXBvc2l0
ZV9zdHJlYW0sIHVpbnQ4X3QqIGRzdCwKLSAgICBzaXplX3QgZHN0X3NpemUsIHNpemVfdCogZ2x5
cGhfc2l6ZSwgYm9vbCogaGF2ZV9pbnN0cnVjdGlvbnMpIHsKLSAgc2l6ZV90IHN0YXJ0X29mZnNl
dCA9IGNvbXBvc2l0ZV9zdHJlYW0tPm9mZnNldCgpOworCitib29sIFNpemVPZkNvbXBvc2l0ZShC
dWZmZXIgY29tcG9zaXRlX3N0cmVhbSwgc2l6ZV90KiBzaXplLAorICAgICAgICAgICAgICAgICAg
ICAgYm9vbCogaGF2ZV9pbnN0cnVjdGlvbnMpIHsKKyAgc2l6ZV90IHN0YXJ0X29mZnNldCA9IGNv
bXBvc2l0ZV9zdHJlYW0ub2Zmc2V0KCk7CiAgIGJvb2wgd2VfaGF2ZV9pbnN0cnVjdGlvbnMgPSBm
YWxzZTsKIAogICB1aW50MTZfdCBmbGFncyA9IEZMQUdfTU9SRV9DT01QT05FTlRTOwogICB3aGls
ZSAoZmxhZ3MgJiBGTEFHX01PUkVfQ09NUE9ORU5UUykgewotICAgIGlmIChQUkVESUNUX0ZBTFNF
KCFjb21wb3NpdGVfc3RyZWFtLT5SZWFkVTE2KCZmbGFncykpKSB7CisgICAgaWYgKFBSRURJQ1Rf
RkFMU0UoIWNvbXBvc2l0ZV9zdHJlYW0uUmVhZFUxNigmZmxhZ3MpKSkgewogICAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0KICAgICB3ZV9oYXZlX2luc3RydWN0
aW9ucyB8PSAoZmxhZ3MgJiBGTEFHX1dFX0hBVkVfSU5TVFJVQ1RJT05TKSAhPSAwOwpAQCAtMjk1
LDM0ICszMzksNDMgQEAgYm9vbCBQcm9jZXNzQ29tcG9zaXRlKEJ1ZmZlciogY29tcG9zaXRlX3N0
cmVhbSwgdWludDhfdCogZHN0LAogICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiBGTEFHX1dFX0hBVkVf
QV9UV09fQllfVFdPKSB7CiAgICAgICBhcmdfc2l6ZSArPSA4OwogICAgIH0KLSAgICBpZiAoUFJF
RElDVF9GQUxTRSghY29tcG9zaXRlX3N0cmVhbS0+U2tpcChhcmdfc2l6ZSkpKSB7CisgICAgaWYg
KFBSRURJQ1RfRkFMU0UoIWNvbXBvc2l0ZV9zdHJlYW0uU2tpcChhcmdfc2l6ZSkpKSB7CiAgICAg
ICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgfQogICB9Ci0gIHNpemVf
dCBjb21wb3NpdGVfZ2x5cGhfc2l6ZSA9IGNvbXBvc2l0ZV9zdHJlYW0tPm9mZnNldCgpIC0gc3Rh
cnRfb2Zmc2V0OwotICBpZiAoUFJFRElDVF9GQUxTRShjb21wb3NpdGVfZ2x5cGhfc2l6ZSArIGtD
b21wb3NpdGVHbHlwaEJlZ2luID4gZHN0X3NpemUpKSB7CisKKyAgKnNpemUgPSBjb21wb3NpdGVf
c3RyZWFtLm9mZnNldCgpIC0gc3RhcnRfb2Zmc2V0OworICAqaGF2ZV9pbnN0cnVjdGlvbnMgPSB3
ZV9oYXZlX2luc3RydWN0aW9uczsKKworICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQYWQ0KFdP
RkYyT3V0KiBvdXQpIHsKKyAgdWludDhfdCB6ZXJvZXNbXSA9IHswLCAwLCAwfTsKKyAgaWYgKFBS
RURJQ1RfRkFMU0Uob3V0LT5TaXplKCkgKyAzIDwgb3V0LT5TaXplKCkpKSB7CiAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9Ci0gIFN0b3JlMTYoZHN0LCAwLCAweGZm
ZmYpOyAgLy8gbkNvbnRvdXJzID0gLTEgZm9yIGNvbXBvc2l0ZSBnbHlwaAotICBzdGQ6Om1lbWNw
eShkc3QgKyBrQ29tcG9zaXRlR2x5cGhCZWdpbiwKLSAgICAgIGNvbXBvc2l0ZV9zdHJlYW0tPmJ1
ZmZlcigpICsgc3RhcnRfb2Zmc2V0LAotICAgICAgY29tcG9zaXRlX2dseXBoX3NpemUpOwotICAq
Z2x5cGhfc2l6ZSA9IGtDb21wb3NpdGVHbHlwaEJlZ2luICsgY29tcG9zaXRlX2dseXBoX3NpemU7
Ci0gICpoYXZlX2luc3RydWN0aW9ucyA9IHdlX2hhdmVfaW5zdHJ1Y3Rpb25zOworICB1aW50MzJf
dCBwYWRfYnl0ZXMgPSBSb3VuZDQob3V0LT5TaXplKCkpIC0gb3V0LT5TaXplKCk7CisgIGlmIChw
YWRfYnl0ZXMgPiAwKSB7CisgICAgaWYgKFBSRURJQ1RfRkFMU0UoIW91dC0+V3JpdGUoJnplcm9l
cywgcGFkX2J5dGVzKSkpIHsKKyAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUo
KTsKKyAgICB9CisgIH0KICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vIEJ1aWxkIFRydWVUeXBlIGxv
Y2EgdGFibGUKIGJvb2wgU3RvcmVMb2NhKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQzMl90PiYgbG9j
YV92YWx1ZXMsIGludCBpbmRleF9mb3JtYXQsCi0gICAgICAgICAgICAgICB1aW50OF90KiBkc3Qs
IHNpemVfdCBkc3Rfc2l6ZSkgeworICAgICAgICAgICAgICAgdWludDMyX3QqIGNoZWNrc3VtLCBX
T0ZGMk91dCogb3V0KSB7CisgIC8vIFRPRE8odXNlcikgZmlndXJlIG91dCB3aGF0IGluZGV4IGZv
cm1hdCB0byB1c2UgYmFzZWQgb24gd2hldGhlciBtYXgKKyAgLy8gb2Zmc2V0IGZpdHMgaW50byB1
aW50MTZfdCBvciBub3QKICAgY29uc3QgdWludDY0X3QgbG9jYV9zaXplID0gbG9jYV92YWx1ZXMu
c2l6ZSgpOwogICBjb25zdCB1aW50NjRfdCBvZmZzZXRfc2l6ZSA9IGluZGV4X2Zvcm1hdCA/IDQg
OiAyOwogICBpZiAoUFJFRElDVF9GQUxTRSgobG9jYV9zaXplIDw8IDIpID4+IDIgIT0gbG9jYV9z
aXplKSkgewogICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQotICBp
ZiAoUFJFRElDVF9GQUxTRShvZmZzZXRfc2l6ZSAqIGxvY2Ffc2l6ZSA+IGRzdF9zaXplKSkgewot
ICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQorICBzdGQ6OnZlY3Rv
cjx1aW50OF90PiBsb2NhX2NvbnRlbnQobG9jYV9zaXplICogb2Zmc2V0X3NpemUpOworICB1aW50
OF90KiBkc3QgPSAmbG9jYV9jb250ZW50WzBdOwogICBzaXplX3Qgb2Zmc2V0ID0gMDsKICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsb2NhX3ZhbHVlcy5zaXplKCk7ICsraSkgewogICAgIHVpbnQz
Ml90IHZhbHVlID0gbG9jYV92YWx1ZXNbaV07CkBAIC0zMzIsMzAgKzM4NSwzNCBAQCBib29sIFN0
b3JlTG9jYShjb25zdCBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4mIGxvY2FfdmFsdWVzLCBpbnQgaW5k
ZXhfZm9ybWF0LAogICAgICAgb2Zmc2V0ID0gU3RvcmUxNihkc3QsIG9mZnNldCwgdmFsdWUgPj4g
MSk7CiAgICAgfQogICB9CisgICpjaGVja3N1bSA9IENvbXB1dGVVTG9uZ1N1bSgmbG9jYV9jb250
ZW50WzBdLCBsb2NhX2NvbnRlbnQuc2l6ZSgpKTsKKyAgaWYgKFBSRURJQ1RfRkFMU0UoIW91dC0+
V3JpdGUoJmxvY2FfY29udGVudFswXSwgbG9jYV9jb250ZW50LnNpemUoKSkpKSB7CisgICAgcmV0
dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICB9CiAgIHJldHVybiB0cnVlOwogfQog
CiAvLyBSZWNvbnN0cnVjdCBlbnRpcmUgZ2x5ZiB0YWJsZSBiYXNlZCBvbiB0cmFuc2Zvcm1lZCBv
cmlnaW5hbAotYm9vbCBSZWNvbnN0cnVjdEdseWYoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IGRhdGFfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdCwgc2l6ZV90IGRz
dF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogbG9jYV9idWYsIHNpemVfdCBs
b2NhX3NpemUpIHsKK2Jvb2wgUmVjb25zdHJ1Y3RHbHlmKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIFRh
YmxlKiBnbHlmX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIGdseWZfY2hl
Y2tzdW0sIFRhYmxlICogbG9jYV90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
KiBsb2NhX2NoZWNrc3VtLCBXT0ZGMkZvbnRJbmZvKiBpbmZvLAorICAgICAgICAgICAgICAgICAg
ICAgV09GRjJPdXQqIG91dCkgewogICBzdGF0aWMgY29uc3QgaW50IGtOdW1TdWJTdHJlYW1zID0g
NzsKLSAgQnVmZmVyIGZpbGUoZGF0YSwgZGF0YV9zaXplKTsKKyAgQnVmZmVyIGZpbGUoZGF0YSwg
Z2x5Zl90YWJsZS0+dHJhbnNmb3JtX2xlbmd0aCk7CiAgIHVpbnQzMl90IHZlcnNpb247CiAgIHN0
ZDo6dmVjdG9yPHN0ZDo6cGFpcjxjb25zdCB1aW50OF90Kiwgc2l6ZV90PiA+IHN1YnN0cmVhbXMo
a051bVN1YlN0cmVhbXMpOworICBjb25zdCBzaXplX3QgZ2x5Zl9zdGFydCA9IG91dC0+U2l6ZSgp
OwogCiAgIGlmIChQUkVESUNUX0ZBTFNFKCFmaWxlLlJlYWRVMzIoJnZlcnNpb24pKSkgewogICAg
IHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQotICB1aW50MTZfdCBudW1f
Z2x5cGhzOwotICB1aW50MTZfdCBpbmRleF9mb3JtYXQ7Ci0gIGlmIChQUkVESUNUX0ZBTFNFKCFm
aWxlLlJlYWRVMTYoJm51bV9nbHlwaHMpIHx8Ci0gICAgICAhZmlsZS5SZWFkVTE2KCZpbmRleF9m
b3JtYXQpKSkgeworICBpZiAoUFJFRElDVF9GQUxTRSghZmlsZS5SZWFkVTE2KCZpbmZvLT5udW1f
Z2x5cGhzKSB8fAorICAgICAgIWZpbGUuUmVhZFUxNigmaW5mby0+aW5kZXhfZm9ybWF0KSkpIHsK
ICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0KIAogICB1bnNpZ25l
ZCBpbnQgb2Zmc2V0ID0gKDIgKyBrTnVtU3ViU3RyZWFtcykgKiA0OwotICBpZiAoUFJFRElDVF9G
QUxTRShvZmZzZXQgPiBkYXRhX3NpemUpKSB7CisgIGlmIChQUkVESUNUX0ZBTFNFKG9mZnNldCA+
IGdseWZfdGFibGUtPnRyYW5zZm9ybV9sZW5ndGgpKSB7CiAgICAgcmV0dXJuIEZPTlRfQ09NUFJF
U1NJT05fRkFJTFVSRSgpOwogICB9CiAgIC8vIEludmFyaWFudCBmcm9tIGhlcmUgb246IGRhdGFf
c2l6ZSA+PSBvZmZzZXQKQEAgLTM2NCw3ICs0MjEsNyBAQCBib29sIFJlY29uc3RydWN0R2x5Zihj
b25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YV9zaXplLAogICAgIGlmIChQUkVESUNUX0ZB
TFNFKCFmaWxlLlJlYWRVMzIoJnN1YnN0cmVhbV9zaXplKSkpIHsKICAgICAgIHJldHVybiBGT05U
X0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgICB9Ci0gICAgaWYgKFBSRURJQ1RfRkFMU0Uoc3Vi
c3RyZWFtX3NpemUgPiBkYXRhX3NpemUgLSBvZmZzZXQpKSB7CisgICAgaWYgKFBSRURJQ1RfRkFM
U0Uoc3Vic3RyZWFtX3NpemUgPiBnbHlmX3RhYmxlLT50cmFuc2Zvcm1fbGVuZ3RoIC0gb2Zmc2V0
KSkgewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0KICAg
ICBzdWJzdHJlYW1zW2ldID0gc3RkOjptYWtlX3BhaXIoZGF0YSArIG9mZnNldCwgc3Vic3RyZWFt
X3NpemUpOwpAQCAtMzc4LDE4ICs0MzUsMjMgQEAgYm9vbCBSZWNvbnN0cnVjdEdseWYoY29uc3Qg
dWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSwKICAgQnVmZmVyIGJib3hfc3RyZWFtKHN1
YnN0cmVhbXNbNV0uZmlyc3QsIHN1YnN0cmVhbXNbNV0uc2Vjb25kKTsKICAgQnVmZmVyIGluc3Ry
dWN0aW9uX3N0cmVhbShzdWJzdHJlYW1zWzZdLmZpcnN0LCBzdWJzdHJlYW1zWzZdLnNlY29uZCk7
CiAKLSAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IGxvY2FfdmFsdWVzKG51bV9nbHlwaHMgKyAxKTsK
KyAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IGxvY2FfdmFsdWVzKGluZm8tPm51bV9nbHlwaHMgKyAx
KTsKICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQgaW50PiBuX3BvaW50c192ZWM7CiAgIHN0ZDo6dW5p
cXVlX3B0cjxQb2ludFtdPiBwb2ludHM7CiAgIHNpemVfdCBwb2ludHNfc2l6ZSA9IDA7Ci0gIHVp
bnQzMl90IGxvY2Ffb2Zmc2V0ID0gMDsKICAgY29uc3QgdWludDhfdCogYmJveF9iaXRtYXAgPSBi
Ym94X3N0cmVhbS5idWZmZXIoKTsKICAgLy8gU2FmZSBiZWNhdXNlIG51bV9nbHlwaHMgaXMgYm91
bmRlZAotICB1bnNpZ25lZCBpbnQgYml0bWFwX2xlbmd0aCA9ICgobnVtX2dseXBocyArIDMxKSA+
PiA1KSA8PCAyOworICB1bnNpZ25lZCBpbnQgYml0bWFwX2xlbmd0aCA9ICgoaW5mby0+bnVtX2ds
eXBocyArIDMxKSA+PiA1KSA8PCAyOwogICBpZiAoIWJib3hfc3RyZWFtLlNraXAoYml0bWFwX2xl
bmd0aCkpIHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0KLSAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1fZ2x5cGhzOyArK2kpIHsKKworICAvLyBU
ZW1wIGJ1ZmZlciBmb3IgZ2x5cGgncy4KKyAgc2l6ZV90IGdseXBoX2J1Zl9zaXplID0ga0RlZmF1
bHRHbHlwaEJ1ZjsKKyAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gZ2x5cGhfYnVmKG5ldyB1
aW50OF90W2dseXBoX2J1Zl9zaXplXSk7CisKKyAgaW5mby0+eF9taW5zLnJlc2l6ZShpbmZvLT5u
dW1fZ2x5cGhzKTsKKyAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBpbmZvLT5udW1fZ2x5
cGhzOyArK2kpIHsKICAgICBzaXplX3QgZ2x5cGhfc2l6ZSA9IDA7CiAgICAgdWludDE2X3Qgbl9j
b250b3VycyA9IDA7CiAgICAgYm9vbCBoYXZlX2Jib3ggPSBmYWxzZTsKQEAgLTM5OSw4ICs0NjEs
NiBAQCBib29sIFJlY29uc3RydWN0R2x5Zihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0
YV9zaXplLAogICAgIGlmIChQUkVESUNUX0ZBTFNFKCFuX2NvbnRvdXJfc3RyZWFtLlJlYWRVMTYo
Jm5fY29udG91cnMpKSkgewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgp
OwogICAgIH0KLSAgICB1aW50OF90KiBnbHlmX2RzdCA9IGRzdCArIGxvY2Ffb2Zmc2V0OwotICAg
IHNpemVfdCBnbHlmX2RzdF9zaXplID0gZHN0X3NpemUgLSBsb2NhX29mZnNldDsKIAogICAgIGlm
IChuX2NvbnRvdXJzID09IDB4ZmZmZikgewogICAgICAgLy8gY29tcG9zaXRlIGdseXBoCkBAIC00
MTAsMjYgKzQ3MCw0MiBAQCBib29sIFJlY29uc3RydWN0R2x5Zihjb25zdCB1aW50OF90KiBkYXRh
LCBzaXplX3QgZGF0YV9zaXplLAogICAgICAgICAvLyBjb21wb3NpdGUgZ2x5cGhzIG11c3QgaGF2
ZSBhbiBleHBsaWNpdCBiYm94CiAgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxV
UkUoKTsKICAgICAgIH0KLSAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFQcm9jZXNzQ29tcG9zaXRl
KCZjb21wb3NpdGVfc3RyZWFtLCBnbHlmX2RzdCwKLSAgICAgICAgICAgIGdseWZfZHN0X3NpemUs
ICZnbHlwaF9zaXplLCAmaGF2ZV9pbnN0cnVjdGlvbnMpKSkgewotICAgICAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9Ci0gICAgICBpZiAoUFJFRElDVF9GQUxT
RSghYmJveF9zdHJlYW0uUmVhZChnbHlmX2RzdCArIDIsIDgpKSkgeworCisgICAgICBzaXplX3Qg
Y29tcG9zaXRlX3NpemU7CisgICAgICBpZiAoUFJFRElDVF9GQUxTRSghU2l6ZU9mQ29tcG9zaXRl
KGNvbXBvc2l0ZV9zdHJlYW0sICZjb21wb3NpdGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJmhhdmVfaW5zdHJ1Y3Rpb25zKSkpIHsKICAgICAgICAgcmV0
dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgICAgfQogICAgICAgaWYgKGhhdmVf
aW5zdHJ1Y3Rpb25zKSB7CiAgICAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFSZWFkMjU1VVNob3J0
KCZnbHlwaF9zdHJlYW0sICZpbnN0cnVjdGlvbl9zaXplKSkpIHsKICAgICAgICAgICByZXR1cm4g
Rk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKFBSRURJ
Q1RfRkFMU0UoaW5zdHJ1Y3Rpb25fc2l6ZSArIDIgPiBnbHlmX2RzdF9zaXplIC0gZ2x5cGhfc2l6
ZSkpIHsKLSAgICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgU3RvcmUxNihnbHlmX2RzdCwgZ2x5cGhfc2l6ZSwgaW5zdHJ1Y3Rpb25f
c2l6ZSk7Ci0gICAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFpbnN0cnVjdGlvbl9zdHJlYW0uUmVh
ZChnbHlmX2RzdCArIGdseXBoX3NpemUgKyAyLAorICAgICAgfQorCisgICAgICBzaXplX3Qgc2l6
ZV9uZWVkZWQgPSAxMiArIGNvbXBvc2l0ZV9zaXplICsgaW5zdHJ1Y3Rpb25fc2l6ZTsKKyAgICAg
IGlmIChQUkVESUNUX0ZBTFNFKGdseXBoX2J1Zl9zaXplIDwgc2l6ZV9uZWVkZWQpKSB7CisgICAg
ICAgIGdseXBoX2J1Zi5yZXNldChuZXcgdWludDhfdFtzaXplX25lZWRlZF0pOworICAgICAgICBn
bHlwaF9idWZfc2l6ZSA9IHNpemVfbmVlZGVkOworICAgICAgfQorCisgICAgICBnbHlwaF9zaXpl
ID0gU3RvcmUxNihnbHlwaF9idWYuZ2V0KCksIGdseXBoX3NpemUsIG5fY29udG91cnMpOworICAg
ICAgaWYgKFBSRURJQ1RfRkFMU0UoIWJib3hfc3RyZWFtLlJlYWQoZ2x5cGhfYnVmLmdldCgpICsg
Z2x5cGhfc2l6ZSwgOCkpKSB7CisgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxV
UkUoKTsKKyAgICAgIH0KKyAgICAgIGdseXBoX3NpemUgKz0gODsKKworICAgICAgaWYgKFBSRURJ
Q1RfRkFMU0UoIWNvbXBvc2l0ZV9zdHJlYW0uUmVhZChnbHlwaF9idWYuZ2V0KCkgKyBnbHlwaF9z
aXplLAorICAgICAgICAgICAgY29tcG9zaXRlX3NpemUpKSkgeworICAgICAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CisgICAgICB9CisgICAgICBnbHlwaF9zaXplICs9IGNv
bXBvc2l0ZV9zaXplOworICAgICAgaWYgKGhhdmVfaW5zdHJ1Y3Rpb25zKSB7CisgICAgICAgIGds
eXBoX3NpemUgPSBTdG9yZTE2KGdseXBoX2J1Zi5nZXQoKSwgZ2x5cGhfc2l6ZSwgaW5zdHJ1Y3Rp
b25fc2l6ZSk7CisgICAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFpbnN0cnVjdGlvbl9zdHJlYW0u
UmVhZChnbHlwaF9idWYuZ2V0KCkgKyBnbHlwaF9zaXplLAogICAgICAgICAgICAgICBpbnN0cnVj
dGlvbl9zaXplKSkpIHsKICAgICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJF
KCk7CiAgICAgICAgIH0KLSAgICAgICAgZ2x5cGhfc2l6ZSArPSBpbnN0cnVjdGlvbl9zaXplICsg
MjsKKyAgICAgICAgZ2x5cGhfc2l6ZSArPSBpbnN0cnVjdGlvbl9zaXplOwogICAgICAgfQogICAg
IH0gZWxzZSBpZiAobl9jb250b3VycyA+IDApIHsKICAgICAgIC8vIHNpbXBsZSBnbHlwaApAQCAt
NDY1LDE0MSArNTQxLDExMCBAQCBib29sIFJlY29uc3RydWN0R2x5Zihjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3QgZGF0YV9zaXplLAogICAgICAgICAgIHRvdGFsX25fcG9pbnRzLCBwb2ludHMu
Z2V0KCksICZ0cmlwbGV0X2J5dGVzX2NvbnN1bWVkKSkpIHsKICAgICAgICAgcmV0dXJuIEZPTlRf
Q09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgICAgfQotICAgICAgY29uc3QgdWludDMyX3QgaGVh
ZGVyX2FuZF9lbmRwdHNfY29udG91cnNfc2l6ZSA9Ci0gICAgICAgICAga0VuZFB0c09mQ29udG91
cnNPZmZzZXQgKyAyICogbl9jb250b3VyczsKLSAgICAgIGlmIChQUkVESUNUX0ZBTFNFKGdseWZf
ZHN0X3NpemUgPCBoZWFkZXJfYW5kX2VuZHB0c19jb250b3Vyc19zaXplKSkgeworICAgICAgaWYg
KFBSRURJQ1RfRkFMU0UoIWZsYWdfc3RyZWFtLlNraXAoZmxhZ19zaXplKSkpIHsKICAgICAgICAg
cmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgICAgfQotICAgICAgU3RvcmUx
NihnbHlmX2RzdCwgMCwgbl9jb250b3Vycyk7CisgICAgICBpZiAoUFJFRElDVF9GQUxTRSghZ2x5
cGhfc3RyZWFtLlNraXAodHJpcGxldF9ieXRlc19jb25zdW1lZCkpKSB7CisgICAgICAgIHJldHVy
biBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICAgIH0KKyAgICAgIHVuc2lnbmVkIGlu
dCBpbnN0cnVjdGlvbl9zaXplOworICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoIVJlYWQyNTVVU2hv
cnQoJmdseXBoX3N0cmVhbSwgJmluc3RydWN0aW9uX3NpemUpKSkgeworICAgICAgICByZXR1cm4g
Rk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CisgICAgICB9CisKKyAgICAgIGlmIChQUkVESUNU
X0ZBTFNFKHRvdGFsX25fcG9pbnRzID49ICgxIDw8IDI3KQorICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgaW5zdHJ1Y3Rpb25fc2l6ZSA+PSAoMSA8PCAzMCkpKSB7CisgICAgICAgIHJldHVybiBG
T05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICAgIH0KKyAgICAgIHNpemVfdCBzaXplX25l
ZWRlZCA9IDEyICsgMiAqIG5fY29udG91cnMgKyA1ICogdG90YWxfbl9wb2ludHMKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICsgaW5zdHJ1Y3Rpb25fc2l6ZTsKKyAgICAgIGlmIChQUkVESUNU
X0ZBTFNFKGdseXBoX2J1Zl9zaXplIDwgc2l6ZV9uZWVkZWQpKSB7CisgICAgICAgIGdseXBoX2J1
Zi5yZXNldChuZXcgdWludDhfdFtzaXplX25lZWRlZF0pOworICAgICAgICBnbHlwaF9idWZfc2l6
ZSA9IHNpemVfbmVlZGVkOworICAgICAgfQorCisgICAgICBnbHlwaF9zaXplID0gU3RvcmUxNihn
bHlwaF9idWYuZ2V0KCksIGdseXBoX3NpemUsIG5fY29udG91cnMpOwogICAgICAgaWYgKGhhdmVf
YmJveCkgewotICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSghYmJveF9zdHJlYW0uUmVhZChnbHlm
X2RzdCArIDIsIDgpKSkgeworICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSghYmJveF9zdHJlYW0u
UmVhZChnbHlwaF9idWYuZ2V0KCkgKyBnbHlwaF9zaXplLCA4KSkpIHsKICAgICAgICAgICByZXR1
cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICAgIH0KICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIENvbXB1dGVCYm94KHRvdGFsX25fcG9pbnRzLCBwb2ludHMuZ2V0KCksIGdseWZf
ZHN0KTsKKyAgICAgICAgQ29tcHV0ZUJib3godG90YWxfbl9wb2ludHMsIHBvaW50cy5nZXQoKSwg
Z2x5cGhfYnVmLmdldCgpKTsKICAgICAgIH0KLSAgICAgIHNpemVfdCBvZmZzZXQgPSBrRW5kUHRz
T2ZDb250b3Vyc09mZnNldDsKKyAgICAgIGdseXBoX3NpemUgPSBrRW5kUHRzT2ZDb250b3Vyc09m
ZnNldDsKICAgICAgIGludCBlbmRfcG9pbnQgPSAtMTsKICAgICAgIGZvciAodW5zaWduZWQgaW50
IGNvbnRvdXJfaXggPSAwOyBjb250b3VyX2l4IDwgbl9jb250b3VyczsgKytjb250b3VyX2l4KSB7
CiAgICAgICAgIGVuZF9wb2ludCArPSBuX3BvaW50c192ZWNbY29udG91cl9peF07CiAgICAgICAg
IGlmIChQUkVESUNUX0ZBTFNFKGVuZF9wb2ludCA+PSA2NTUzNikpIHsKICAgICAgICAgICByZXR1
cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICAgIH0KLSAgICAgICAgb2Zmc2V0
ID0gU3RvcmUxNihnbHlmX2RzdCwgb2Zmc2V0LCBlbmRfcG9pbnQpOwotICAgICAgfQotICAgICAg
aWYgKFBSRURJQ1RfRkFMU0UoIWZsYWdfc3RyZWFtLlNraXAoZmxhZ19zaXplKSkpIHsKLSAgICAg
ICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICAgICAgICBnbHlwaF9zaXpl
ID0gU3RvcmUxNihnbHlwaF9idWYuZ2V0KCksIGdseXBoX3NpemUsIGVuZF9wb2ludCk7CiAgICAg
ICB9Ci0gICAgICBpZiAoUFJFRElDVF9GQUxTRSghZ2x5cGhfc3RyZWFtLlNraXAodHJpcGxldF9i
eXRlc19jb25zdW1lZCkpKSB7Ci0gICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxV
UkUoKTsKLSAgICAgIH0KLSAgICAgIHVuc2lnbmVkIGludCBpbnN0cnVjdGlvbl9zaXplOwotICAg
ICAgaWYgKFBSRURJQ1RfRkFMU0UoIVJlYWQyNTVVU2hvcnQoJmdseXBoX3N0cmVhbSwgJmluc3Ry
dWN0aW9uX3NpemUpKSkgewotICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJF
KCk7Ci0gICAgICB9Ci0gICAgICBpZiAoUFJFRElDVF9GQUxTRShnbHlmX2RzdF9zaXplIC0gaGVh
ZGVyX2FuZF9lbmRwdHNfY29udG91cnNfc2l6ZSA8Ci0gICAgICAgICAgaW5zdHJ1Y3Rpb25fc2l6
ZSArIDIpKSB7Ci0gICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAg
ICAgIH0KLSAgICAgIHVpbnQ4X3QqIGluc3RydWN0aW9uX2RzdCA9IGdseWZfZHN0ICsgaGVhZGVy
X2FuZF9lbmRwdHNfY29udG91cnNfc2l6ZTsKLSAgICAgIFN0b3JlMTYoaW5zdHJ1Y3Rpb25fZHN0
LCAwLCBpbnN0cnVjdGlvbl9zaXplKTsKLSAgICAgIGlmIChQUkVESUNUX0ZBTFNFKAotICAgICAg
ICAgICFpbnN0cnVjdGlvbl9zdHJlYW0uUmVhZChpbnN0cnVjdGlvbl9kc3QgKyAyLCBpbnN0cnVj
dGlvbl9zaXplKSkpIHsKKworICAgICAgZ2x5cGhfc2l6ZSA9IFN0b3JlMTYoZ2x5cGhfYnVmLmdl
dCgpLCBnbHlwaF9zaXplLCBpbnN0cnVjdGlvbl9zaXplKTsKKyAgICAgIGlmIChQUkVESUNUX0ZB
TFNFKCFpbnN0cnVjdGlvbl9zdHJlYW0uUmVhZChnbHlwaF9idWYuZ2V0KCkgKyBnbHlwaF9zaXpl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3Ry
dWN0aW9uX3NpemUpKSkgewogICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJF
KCk7CiAgICAgICB9CisgICAgICBnbHlwaF9zaXplICs9IGluc3RydWN0aW9uX3NpemU7CisKICAg
ICAgIGlmIChQUkVESUNUX0ZBTFNFKCFTdG9yZVBvaW50cyh0b3RhbF9uX3BvaW50cywgcG9pbnRz
LmdldCgpLCBuX2NvbnRvdXJzLAotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25fc2l6ZSwgZ2x5Zl9k
c3QsIGdseWZfZHN0X3NpemUsICZnbHlwaF9zaXplKSkpIHsKKyAgICAgICAgICAgIGluc3RydWN0
aW9uX3NpemUsIGdseXBoX2J1Zi5nZXQoKSwgZ2x5cGhfYnVmX3NpemUsICZnbHlwaF9zaXplKSkp
IHsKICAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICBnbHlwaF9zaXplID0gMDsKICAgICB9Ci0gICAgbG9jYV92YWx1
ZXNbaV0gPSBsb2NhX29mZnNldDsKLSAgICBpZiAoUFJFRElDVF9GQUxTRShnbHlwaF9zaXplICsg
MyA8IGdseXBoX3NpemUpKSB7CisKKyAgICBsb2NhX3ZhbHVlc1tpXSA9IG91dC0+U2l6ZSgpIC0g
Z2x5Zl9zdGFydDsKKyAgICBpZiAoUFJFRElDVF9GQUxTRSghb3V0LT5Xcml0ZShnbHlwaF9idWYu
Z2V0KCksIGdseXBoX3NpemUpKSkgewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJ
TFVSRSgpOwogICAgIH0KLSAgICBnbHlwaF9zaXplID0gUm91bmQ0KGdseXBoX3NpemUpOwotICAg
IGlmIChQUkVESUNUX0ZBTFNFKGdseXBoX3NpemUgPiBkc3Rfc2l6ZSAtIGxvY2Ffb2Zmc2V0KSkg
ewotICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBidXQgdGhpcyB0ZXN0IGRlZmVuc2l2
ZWx5IG1haW50YWlucyB0aGUKLSAgICAgIC8vIGludmFyaWFudCB0aGF0IGxvY2Ffb2Zmc2V0IDw9
IGRzdF9zaXplLgorCisgICAgLy8gVE9ETyh1c2VyKSBPbGQgY29kZSBhbGlnbmVkIGdseXBocyAu
Li4gYnV0IGRvIHdlIGFjdHVhbGx5IG5lZWQgdG8/CisgICAgaWYgKFBSRURJQ1RfRkFMU0UoIVBh
ZDQob3V0KSkpIHsKICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAg
ICB9Ci0gICAgbG9jYV9vZmZzZXQgKz0gZ2x5cGhfc2l6ZTsKLSAgfQotICBsb2NhX3ZhbHVlc1tu
dW1fZ2x5cGhzXSA9IGxvY2Ffb2Zmc2V0OwotICByZXR1cm4gU3RvcmVMb2NhKGxvY2FfdmFsdWVz
LCBpbmRleF9mb3JtYXQsIGxvY2FfYnVmLCBsb2NhX3NpemUpOwotfQogCi0vLyBUaGlzIGlzIGxp
bmVhciBzZWFyY2gsIGJ1dCBjb3VsZCBiZSBjaGFuZ2VkIHRvIGJpbmFyeSBiZWNhdXNlIHdlCi0v
LyBkbyBoYXZlIGEgZ3VhcmFudGVlIHRoYXQgdGhlIHRhYmxlcyBhcmUgc29ydGVkIGJ5IHRhZy4g
QnV0IHRoZSB0b3RhbAotLy8gY3B1IHRpbWUgaXMgZXhwZWN0ZWQgdG8gYmUgdmVyeSBzbWFsbCBp
biBhbnkgY2FzZS4KLWNvbnN0IFRhYmxlKiBGaW5kVGFibGUoY29uc3Qgc3RkOjp2ZWN0b3I8VGFi
bGU+JiB0YWJsZXMsIHVpbnQzMl90IHRhZykgewotICBzaXplX3Qgbl90YWJsZXMgPSB0YWJsZXMu
c2l6ZSgpOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5fdGFibGVzOyArK2kpIHsKLSAgICBp
ZiAodGFibGVzW2ldLnRhZyA9PSB0YWcpIHsKLSAgICAgIHJldHVybiAmdGFibGVzW2ldOworICAg
ICpnbHlmX2NoZWNrc3VtICs9IENvbXB1dGVVTG9uZ1N1bShnbHlwaF9idWYuZ2V0KCksIGdseXBo
X3NpemUpOworCisgICAgLy8gV2UgbWF5IG5lZWQgeF9taW4gdG8gcmVjb25zdHJ1Y3QgJ2htdHgn
CisgICAgaWYgKG5fY29udG91cnMgPiAwKSB7CisgICAgICBCdWZmZXIgeF9taW5fYnVmKGdseXBo
X2J1Zi5nZXQoKSArIDIsIDIpOworICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoIXhfbWluX2J1Zi5S
ZWFkUzE2KCZpbmZvLT54X21pbnNbaV0pKSkgeworICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVT
U0lPTl9GQUlMVVJFKCk7CisgICAgICB9CiAgICAgfQogICB9Ci0gIHJldHVybiBOVUxMOwotfQog
Ci0vLyBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL21heHAuaHRt
Ci1ib29sIFJlYWROdW1HbHlwaHMoY29uc3QgVGFibGUqIG1heHBfdGFibGUsCi0gICAgICAgICAg
ICAgICAgICAgdWludDhfdCogZHN0LCBzaXplX3QgZHN0X2xlbmd0aCwgdWludDE2X3QqIG51bV9n
bHlwaHMpIHsKLSAgaWYgKFBSRURJQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1heHBf
dGFibGUtPmRzdF9vZmZzZXQgKwotICAgICAgbWF4cF90YWJsZS0+ZHN0X2xlbmd0aCkgPiBkc3Rf
bGVuZ3RoKSkgewotICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQot
ICBCdWZmZXIgYnVmZmVyKGRzdCArIG1heHBfdGFibGUtPmRzdF9vZmZzZXQsIG1heHBfdGFibGUt
PmRzdF9sZW5ndGgpOwotICAvLyBTa2lwIDQgdG8gcmVhY2ggJ21heHAnIG51bUdseXBocwotICBp
ZiAoUFJFRElDVF9GQUxTRSghYnVmZmVyLlNraXAoNCkgfHwgIWJ1ZmZlci5SZWFkVTE2KG51bV9n
bHlwaHMpKSkgeworICAvLyBnbHlmX3RhYmxlIGRzdF9vZmZzZXQgd2FzIHNldCBieSBSZWNvbnN0
cnVjdEZvbnQKKyAgZ2x5Zl90YWJsZS0+ZHN0X2xlbmd0aCA9IG91dC0+U2l6ZSgpIC0gZ2x5Zl90
YWJsZS0+ZHN0X29mZnNldDsKKyAgbG9jYV90YWJsZS0+ZHN0X29mZnNldCA9IG91dC0+U2l6ZSgp
OworICAvLyBsb2NhW25dIHdpbGwgYmUgZXF1YWwgdGhlIGxlbmd0aCBvZiB0aGUgZ2x5cGggZGF0
YSAoJ2dseWYnKSB0YWJsZQorICBsb2NhX3ZhbHVlc1tpbmZvLT5udW1fZ2x5cGhzXSA9IGdseWZf
dGFibGUtPmRzdF9sZW5ndGg7CisgIGlmIChQUkVESUNUX0ZBTFNFKCFTdG9yZUxvY2EobG9jYV92
YWx1ZXMsIGluZm8tPmluZGV4X2Zvcm1hdCwgbG9jYV9jaGVja3N1bSwKKyAgICAgIG91dCkpKSB7
CiAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9Ci0gIHJldHVybiB0
cnVlOwotfQorICBsb2NhX3RhYmxlLT5kc3RfbGVuZ3RoID0gb3V0LT5TaXplKCkgLSBsb2NhX3Rh
YmxlLT5kc3Rfb2Zmc2V0OwogCi0vLyBHZXQgbnVtYmVyT2ZITWV0cmljcywgaHR0cHM6Ly93d3cu
bWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L290c3BlYy9oaGVhLmh0bQotYm9vbCBSZWFkTnVtSE1l
dHJpY3MoY29uc3QgVGFibGUqIGhoZWFfdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICB1aW50
OF90KiBkc3QsIHNpemVfdCBkc3RfbGVuZ3RoLCB1aW50MTZfdCogbnVtX2htZXRyaWNzKSB7Ci0g
IGlmIChQUkVESUNUX0ZBTFNFKHN0YXRpY19jYXN0PHVpbnQ2NF90PihoaGVhX3RhYmxlLT5kc3Rf
b2Zmc2V0ICsKLSAgICAgIGhoZWFfdGFibGUtPmRzdF9sZW5ndGgpID4gZHN0X2xlbmd0aCkpIHsK
LSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAgLy8gU2tpcCAz
NCB0byByZWFjaCAnaGhlYScgbnVtYmVyT2ZITWV0cmljcwotICBCdWZmZXIgYnVmZmVyKGRzdCAr
IGhoZWFfdGFibGUtPmRzdF9vZmZzZXQsIGhoZWFfdGFibGUtPmRzdF9sZW5ndGgpOwotICBpZiAo
UFJFRElDVF9GQUxTRSghYnVmZmVyLlNraXAoMzQpIHx8ICFidWZmZXIuUmVhZFUxNihudW1faG1l
dHJpY3MpKSkgewotICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQog
ICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8geF9taW4gZm9yIGdseXBoOyBodHRwczovL3d3dy5taWNy
b3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL2dseWYuaHRtCi1ib29sIFJlYWRHbHlwaFhNaW4o
QnVmZmVyKiBnbHlmX2J1ZmYsIEJ1ZmZlciogbG9jYV9idWZmLCBpbnQxNl90IGxvY2FfZm9ybWF0
LAotICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGluZGV4LCBpbnQxNl90KiB4X21pbikgewot
ICB1aW50MzJfdCBvZmZzZXQxLCBvZmZzZXQyOwotICBsb2NhX2J1ZmYtPnNldF9vZmZzZXQoKGxv
Y2FfZm9ybWF0ID09IDAgPyAyIDogNCkgKiBpbmRleCk7Ci0gIGlmIChsb2NhX2Zvcm1hdCA9PSAw
KSB7Ci0gICAgdWludDE2X3QgdG1wMSwgdG1wMjsKLSAgICBpZiAoUFJFRElDVF9GQUxTRSghbG9j
YV9idWZmLT5SZWFkVTE2KCZ0bXAxKSB8fAotICAgICAgICAgICAgICAgICAgICAgICFsb2NhX2J1
ZmYtPlJlYWRVMTYoJnRtcDIpKSkgewotICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJ
TFVSRSgpOworVGFibGUqIEZpbmRUYWJsZShzdGQ6OnZlY3RvcjxUYWJsZSo+KiB0YWJsZXMsIHVp
bnQzMl90IHRhZykgeworICBmb3IgKFRhYmxlKiB0YWJsZSA6ICp0YWJsZXMpIHsKKyAgICBpZiAo
dGFibGUtPnRhZyA9PSB0YWcpIHsKKyAgICAgIHJldHVybiB0YWJsZTsKICAgICB9Ci0gICAgLy8g
aHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L290c3BlYy9sb2NhLmh0bQotICAg
IC8vICJUaGUgYWN0dWFsIGxvY2FsIG9mZnNldCBkaXZpZGVkIGJ5IDIgaXMgc3RvcmVkLiIKLSAg
ICBvZmZzZXQxID0gdG1wMSAqIDI7Ci0gICAgb2Zmc2V0MiA9IHRtcDIgKiAyOwotICB9IGVsc2Ug
aWYgKFBSRURJQ1RfRkFMU0UoIWxvY2FfYnVmZi0+UmVhZFUzMigmb2Zmc2V0MSkgfHwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICFsb2NhX2J1ZmYtPlJlYWRVMzIoJm9mZnNldDIpKSkgewot
ICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQorICByZXR1cm4gTlVM
TDsKK30KIAotICBpZiAob2Zmc2V0MSAhPSBvZmZzZXQyKSB7Ci0gICAgZ2x5Zl9idWZmLT5zZXRf
b2Zmc2V0KG9mZnNldDEgKyAyKTsKLSAgICBpZiAoIWdseWZfYnVmZi0+UmVhZFMxNih4X21pbikp
IHsKLSAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9Ci0gIH0g
ZWxzZSB7Ci0gICAgKnhfbWluID0gMDsKKy8vIEdldCBudW1iZXJPZkhNZXRyaWNzLCBodHRwczov
L3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL2hoZWEuaHRtCitib29sIFJlYWRO
dW1ITWV0cmljcyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YV9zaXplLAorICAgICAg
ICAgICAgICAgICAgICAgdWludDE2X3QqIG51bV9obWV0cmljcykgeworICAvLyBTa2lwIDM0IHRv
IHJlYWNoICdoaGVhJyBudW1iZXJPZkhNZXRyaWNzCisgIEJ1ZmZlciBidWZmZXIoZGF0YSwgZGF0
YV9zaXplKTsKKyAgaWYgKFBSRURJQ1RfRkFMU0UoIWJ1ZmZlci5Ta2lwKDM0KSB8fCAhYnVmZmVy
LlJlYWRVMTYobnVtX2htZXRyaWNzKSkpIHsKKyAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9G
QUlMVVJFKCk7CiAgIH0KICAgcmV0dXJuIHRydWU7CiB9CkBAIC02MDcsNDAgKzY1MiwxMSBAQCBi
b29sIFJlYWRHbHlwaFhNaW4oQnVmZmVyKiBnbHlmX2J1ZmYsIEJ1ZmZlciogbG9jYV9idWZmLCBp
bnQxNl90IGxvY2FfZm9ybWF0LAogLy8gaHR0cDovL2Rldi53My5vcmcvd2ViZm9udHMvV09GRjIv
c3BlYy9PdmVydmlldy5odG1sI2htdHhfdGFibGVfZm9ybWF0CiBib29sIFJlY29uc3RydWN0VHJh
bnNmb3JtZWRIbXR4KGNvbnN0IHVpbnQ4X3QqIHRyYW5zZm9ybWVkX2J1ZiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRyYW5zZm9ybWVkX3NpemUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRhYmxlKiBnbHlmX3RhYmxlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUYWJsZSogaGhlYV90YWJsZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGFibGUqIGhtdHhfdGFibGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRhYmxlKiBsb2NhX3RhYmxlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUYWJsZSogbWF4cF90YWJsZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogZHN0LCBzaXplX3QgZHN0X2xlbmd0
aCkgewotICBpZiAoUFJFRElDVF9GQUxTRSghZ2x5Zl90YWJsZSkpIHsKLSAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAgaWYgKFBSRURJQ1RfRkFMU0UoIWhoZWFf
dGFibGUpKSB7Ci0gICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwotICB9Ci0g
IGlmIChQUkVESUNUX0ZBTFNFKCFobXR4X3RhYmxlKSkgewotICAgIHJldHVybiBGT05UX0NPTVBS
RVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQotICBpZiAoUFJFRElDVF9GQUxTRSghbG9jYV90YWJsZSkp
IHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAgaWYgKFBS
RURJQ1RfRkFMU0UoIW1heHBfdGFibGUpKSB7Ci0gICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05f
RkFJTFVSRSgpOwotICB9Ci0KLSAgdWludDE2X3QgbnVtX2dseXBocywgbnVtX2htZXRyaWNzOwot
ICBpZiAoIVJlYWROdW1HbHlwaHMobWF4cF90YWJsZSwgZHN0LCBkc3RfbGVuZ3RoLCAmbnVtX2ds
eXBocykpIHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAg
aWYgKCFSZWFkTnVtSE1ldHJpY3MoaGhlYV90YWJsZSwgZHN0LCBkc3RfbGVuZ3RoLCAmbnVtX2ht
ZXRyaWNzKSkgewotICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQot
Ci0gIGlmIChQUkVESUNUX0ZBTFNFKHN0YXRpY19jYXN0PHVpbnQ2NF90PihobXR4X3RhYmxlLT5k
c3Rfb2Zmc2V0ICsKLSAgICAgIGhtdHhfdGFibGUtPmRzdF9sZW5ndGgpID4gZHN0X2xlbmd0aCkp
IHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgbnVtX2dseXBocywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgbnVtX2htZXRyaWNzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxpbnQxNl90PiYgeF9taW5zLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogY2hlY2tzdW0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPRkYyT3V0KiBvdXQpIHsKICAgQnVmZmVyIGht
dHhfYnVmZl9pbih0cmFuc2Zvcm1lZF9idWYsIHRyYW5zZm9ybWVkX3NpemUpOwogCiAgIHVpbnQ4
X3QgaG10eF9mbGFnczsKQEAgLTY1OCwyMyArNjc0LDE2IEBAIGJvb2wgUmVjb25zdHJ1Y3RUcmFu
c2Zvcm1lZEhtdHgoY29uc3QgdWludDhfdCogdHJhbnNmb3JtZWRfYnVmLAogICAgIHJldHVybiBG
T05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQogCi0gIC8vIGdseWYvbG9jYSBhcmUgZG9u
ZSBhbHJlYWR5IHNvIHdlIGNhbiB1c2UgdGhlbSB0byByZWNvdmVyIHhfbWluJ3MKLSAgaWYgKFBS
RURJQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdseWZfdGFibGUtPmRzdF9vZmZzZXQg
KwotICAgICAgZ2x5Zl90YWJsZS0+ZHN0X2xlbmd0aCkgPiBkc3RfbGVuZ3RoKSkgewotICAgIHJl
dHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQotICBpZiAoUFJFRElDVF9GQUxT
RShzdGF0aWNfY2FzdDx1aW50NjRfdD4obG9jYV90YWJsZS0+ZHN0X29mZnNldCArCi0gICAgICBs
b2NhX3RhYmxlLT5kc3RfbGVuZ3RoKSA+IGRzdF9sZW5ndGgpKSB7CisgIGFzc2VydCh4X21pbnMu
c2l6ZSgpID09IG51bV9nbHlwaHMpOworCisgIC8vIG51bV9nbHlwaHMgMCBpcyBPSyBpZiB0aGVy
ZSBpcyBubyAnZ2x5ZicgYnV0IGNhbm5vdCB0aGVuIHhmb3JtICdobXR4Jy4KKyAgaWYgKFBSRURJ
Q1RfRkFMU0UobnVtX2htZXRyaWNzID4gbnVtX2dseXBocykpIHsKICAgICByZXR1cm4gRk9OVF9D
T01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0KLSAgQnVmZmVyIGdseWZfYnVmZihkc3QgKyBnbHlm
X3RhYmxlLT5kc3Rfb2Zmc2V0LCBnbHlmX3RhYmxlLT5kc3RfbGVuZ3RoKTsKLSAgQnVmZmVyIGxv
Y2FfYnVmZihkc3QgKyBsb2NhX3RhYmxlLT5kc3Rfb2Zmc2V0LCBsb2NhX3RhYmxlLT5kc3RfbGVu
Z3RoKTsKLSAgaW50MTZfdCBsb2NhX2Zvcm1hdDsKLSAgaWYgKGxvY2FfdGFibGUtPmRzdF9sZW5n
dGggPT0gMiAqIChudW1fZ2x5cGhzICsgMSkpIHsKLSAgICBsb2NhX2Zvcm1hdCA9IDA7Ci0gIH0g
ZWxzZSBpZiAobG9jYV90YWJsZS0+ZHN0X2xlbmd0aCA9PSA0ICogKG51bV9nbHlwaHMgKyAxKSkg
ewotICAgIGxvY2FfZm9ybWF0ID0gMTsKLSAgfSBlbHNlIHsKKworICAvLyBodHRwczovL3d3dy5t
aWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL2htdHguaHRtCisgIC8vICIuLi5vbmx5IG9u
ZSBlbnRyeSBuZWVkIGJlIGluIHRoZSBhcnJheSwgYnV0IHRoYXQgZW50cnkgaXMgcmVxdWlyZWQu
IgorICBpZiAoUFJFRElDVF9GQUxTRShudW1faG1ldHJpY3MgPCAxKSkgewogICAgIHJldHVybiBG
T05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQogCkBAIC02OTMsMTAgKzcwMiw3IEBAIGJv
b2wgUmVjb25zdHJ1Y3RUcmFuc2Zvcm1lZEhtdHgoY29uc3QgdWludDhfdCogdHJhbnNmb3JtZWRf
YnVmLAogICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICB9
CiAgICAgfSBlbHNlIHsKLSAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFSZWFkR2x5cGhYTWluKCZn
bHlmX2J1ZmYsICZsb2NhX2J1ZmYsIGxvY2FfZm9ybWF0LCBpLAotICAgICAgICAgICZsc2IpKSkg
ewotICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9Cisg
ICAgICBsc2IgPSB4X21pbnNbaV07CiAgICAgfQogICAgIGxzYnMucHVzaF9iYWNrKGxzYik7CiAg
IH0KQEAgLTcwOCwyNSArNzE0LDE2IEBAIGJvb2wgUmVjb25zdHJ1Y3RUcmFuc2Zvcm1lZEhtdHgo
Y29uc3QgdWludDhfdCogdHJhbnNmb3JtZWRfYnVmLAogICAgICAgICByZXR1cm4gRk9OVF9DT01Q
UkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgIGlmIChQUkVE
SUNUX0ZBTFNFKCFSZWFkR2x5cGhYTWluKCZnbHlmX2J1ZmYsICZsb2NhX2J1ZmYsIGxvY2FfZm9y
bWF0LCBpLAotICAgICAgICAgICZsc2IpKSkgewotICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVT
U0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9CisgICAgICBsc2IgPSB4X21pbnNbaV07CiAgICAgfQog
ICAgIGxzYnMucHVzaF9iYWNrKGxzYik7CiAgIH0KIAogICAvLyBiYWtlIG1lIGEgc2hpbnkgbmV3
IGhtdHggdGFibGUKICAgdWludDMyX3QgaG10eF9vdXRwdXRfc2l6ZSA9IDIgKiBudW1fZ2x5cGhz
ICsgMiAqIG51bV9obWV0cmljczsKLSAgaWYgKGhtdHhfb3V0cHV0X3NpemUgPiBobXR4X3RhYmxl
LT5kc3RfbGVuZ3RoKSB7Ci0gICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwot
ICB9Ci0gIGlmIChQUkVESUNUX0ZBTFNFKHN0YXRpY19jYXN0PHVpbnQ2NF90PihobXR4X3RhYmxl
LT5kc3Rfb2Zmc2V0ICsKLSAgICAgIGhtdHhfdGFibGUtPmRzdF9sZW5ndGgpID4gZHN0X2xlbmd0
aCkpIHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLQotICBz
aXplX3QgZHN0X29mZnNldCA9IGhtdHhfdGFibGUtPmRzdF9vZmZzZXQ7CisgIHN0ZDo6dmVjdG9y
PHVpbnQ4X3Q+IGhtdHhfdGFibGUoaG10eF9vdXRwdXRfc2l6ZSk7CisgIHVpbnQ4X3QqIGRzdCA9
ICZobXR4X3RhYmxlWzBdOworICBzaXplX3QgZHN0X29mZnNldCA9IDA7CiAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBudW1fZ2x5cGhzOyBpKyspIHsKICAgICBpZiAoaSA8IG51bV9obWV0cmlj
cykgewogICAgICAgU3RvcmUxNihhZHZhbmNlX3dpZHRoc1tpXSwgJmRzdF9vZmZzZXQsIGRzdCk7
CkBAIC03MzQsMTUyICs3MzEsMTQgQEAgYm9vbCBSZWNvbnN0cnVjdFRyYW5zZm9ybWVkSG10eChj
b25zdCB1aW50OF90KiB0cmFuc2Zvcm1lZF9idWYsCiAgICAgU3RvcmUxNihsc2JzW2ldLCAmZHN0
X29mZnNldCwgZHN0KTsKICAgfQogCi0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlY29uc3Ry
dWN0VHJhbnNmb3JtZWRHbHlmKGNvbnN0IHVpbnQ4X3QqIHRyYW5zZm9ybWVkX2J1ZiwKLSAgICBz
aXplX3QgdHJhbnNmb3JtZWRfc2l6ZSwgY29uc3QgVGFibGUqIGdseWZfdGFibGUsIGNvbnN0IFRh
YmxlKiBsb2NhX3RhYmxlLAotICAgIHVpbnQ4X3QqIGRzdCwgc2l6ZV90IGRzdF9sZW5ndGgpIHsK
LSAgaWYgKFBSRURJQ1RfRkFMU0UoZ2x5Zl90YWJsZSA9PSBOVUxMIHx8IGxvY2FfdGFibGUgPT0g
TlVMTCkpIHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAg
aWYgKFBSRURJQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdseWZfdGFibGUtPmRzdF9v
ZmZzZXQgKwotICAgICAgZ2x5Zl90YWJsZS0+ZHN0X2xlbmd0aCkgPiBkc3RfbGVuZ3RoKSkgewot
ICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQotICBpZiAoUFJFRElD
VF9GQUxTRShzdGF0aWNfY2FzdDx1aW50NjRfdD4obG9jYV90YWJsZS0+ZHN0X29mZnNldCArCi0g
ICAgIGxvY2FfdGFibGUtPmRzdF9sZW5ndGgpID4gZHN0X2xlbmd0aCkpIHsKLSAgICByZXR1cm4g
Rk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAgcmV0dXJuIFJlY29uc3RydWN0R2x5
Zih0cmFuc2Zvcm1lZF9idWYsIHRyYW5zZm9ybWVkX3NpemUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgZHN0ICsgZ2x5Zl90YWJsZS0+ZHN0X29mZnNldCwgZ2x5Zl90YWJsZS0+ZHN0X2xlbmd0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkc3QgKyBsb2NhX3RhYmxlLT5kc3Rfb2Zmc2V0
LCBsb2NhX3RhYmxlLT5kc3RfbGVuZ3RoKTsKLX0KLQotLy8gUmVjb25zdHJ1Y3RzIGEgc2luZ2xl
IGZvbnQuIHRhYmxlcyBtdXN0IG5vdCBjb250YWluIGR1cGxpY2F0ZXMuCi1ib29sIFJlY29uc3Ry
dWN0VHJhbnNmb3JtZWQoY29uc3Qgc3RkOjp2ZWN0b3I8VGFibGU+JiB0YWJsZXMsIHVpbnQzMl90
IHRhZywKLSAgICBjb25zdCB1aW50OF90KiB0cmFuc2Zvcm1lZF9idWYsIHNpemVfdCB0cmFuc2Zv
cm1lZF9zaXplLAotICAgIHVpbnQ4X3QqIGRzdCwgc2l6ZV90IGRzdF9sZW5ndGgpIHsKLQotICBp
ZiAodGFnID09IGtHbHlmVGFibGVUYWcpIHsKLSAgICBjb25zdCBUYWJsZSogZ2x5Zl90YWJsZSA9
IEZpbmRUYWJsZSh0YWJsZXMsIHRhZyk7Ci0gICAgY29uc3QgVGFibGUqIGxvY2FfdGFibGUgPSBG
aW5kVGFibGUodGFibGVzLCBrTG9jYVRhYmxlVGFnKTsKLSAgICByZXR1cm4gUmVjb25zdHJ1Y3RU
cmFuc2Zvcm1lZEdseWYodHJhbnNmb3JtZWRfYnVmLCB0cmFuc2Zvcm1lZF9zaXplLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlmX3RhYmxlLCBsb2NhX3RhYmxlLCBk
c3QsIGRzdF9sZW5ndGgpOwotICB9IGVsc2UgaWYgKHRhZyA9PSBrTG9jYVRhYmxlVGFnKSB7Ci0g
ICAgLy8gcHJvY2Vzc2luZyB3YXMgYWxyZWFkeSBkb25lIGJ5IGdseWYgdGFibGUsIGJ1dCB2YWxp
ZGF0ZQotICAgIGlmIChQUkVESUNUX0ZBTFNFKCFGaW5kVGFibGUodGFibGVzLCBrR2x5ZlRhYmxl
VGFnKSkpIHsKLSAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9
Ci0gIH0gZWxzZSBpZiAodGFnID09IGtIbXR4VGFibGVUYWcpIHsKLSAgICAvLyBUYWJsZXMgYXJl
IHNvcnRlZCBmb3IgYSBub24tY29sbGVjdGlvbi4KLSAgICAvLyBnbHlmIGlzIGJlZm9yZSBobXR4
IGFuZCBpbmNsdWRlcyBsb2NhIHNvIGFsbCBvdXIgYWNjZXNzZXMgYXJlIHNhZmUuCi0gICAgY29u
c3QgVGFibGUqIGdseWZfdGFibGUgPSBGaW5kVGFibGUodGFibGVzLCBrR2x5ZlRhYmxlVGFnKTsK
LSAgICBjb25zdCBUYWJsZSogaGhlYV90YWJsZSA9IEZpbmRUYWJsZSh0YWJsZXMsIGtIaGVhVGFi
bGVUYWcpOwotICAgIGNvbnN0IFRhYmxlKiBobXR4X3RhYmxlID0gRmluZFRhYmxlKHRhYmxlcywg
a0htdHhUYWJsZVRhZyk7Ci0gICAgY29uc3QgVGFibGUqIGxvY2FfdGFibGUgPSBGaW5kVGFibGUo
dGFibGVzLCBrTG9jYVRhYmxlVGFnKTsKLSAgICBjb25zdCBUYWJsZSogbWF4cF90YWJsZSA9IEZp
bmRUYWJsZSh0YWJsZXMsIGtNYXhwVGFibGVUYWcpOwotCi0gICAgaWYgKFBSRURJQ1RfRkFMU0Uo
IVJlY29uc3RydWN0VHJhbnNmb3JtZWRIbXR4KAotICAgICAgICB0cmFuc2Zvcm1lZF9idWYsIHRy
YW5zZm9ybWVkX3NpemUsIGdseWZfdGFibGUsIGhoZWFfdGFibGUsCi0gICAgICAgIGhtdHhfdGFi
bGUsIGxvY2FfdGFibGUsIG1heHBfdGFibGUsIGRzdCwgZHN0X2xlbmd0aCkpKSB7Ci0gICAgICBy
ZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgfQotICB9IGVsc2UgewotICAg
IC8vIHRyYW5zZm9ybSBmb3IgdGhlIHRhZyBpcyBub3Qga25vd24KKyAgKmNoZWNrc3VtID0gQ29t
cHV0ZVVMb25nU3VtKCZobXR4X3RhYmxlWzBdLCBobXR4X291dHB1dF9zaXplKTsKKyAgaWYgKFBS
RURJQ1RfRkFMU0UoIW91dC0+V3JpdGUoJmhtdHhfdGFibGVbMF0sIGhtdHhfb3V0cHV0X3NpemUp
KSkgewogICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQotICByZXR1
cm4gdHJ1ZTsKLX0KLQotdWludDMyX3QgQ29tcHV0ZUNoZWNrc3VtKGNvbnN0IFRhYmxlKiB0YWJs
ZSwgY29uc3QgdWludDhfdCogZHN0KSB7Ci0gIHJldHVybiBDb21wdXRlVUxvbmdTdW0oZHN0ICsg
dGFibGUtPmRzdF9vZmZzZXQsIHRhYmxlLT5kc3RfbGVuZ3RoKTsKLX0KLQotY29uc3QgVGFibGUq
IEZpbmRUYWJsZShUdGNGb250IHR0Y19mb250LCBjb25zdCBzdGQ6OnZlY3RvcjxUYWJsZT4mIHRh
YmxlcywKLSAgdWludDMyX3QgdGFnKSB7Ci0gIGZvciAoY29uc3QgYXV0byBpIDogdHRjX2ZvbnQu
dGFibGVfaW5kaWNlcykgewotICAgIGlmICh0YWJsZXNbaV0udGFnID09IHRhZykgcmV0dXJuICZ0
YWJsZXNbaV07Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLWJvb2wgRml4Q29sbGVjdGlvbkNo
ZWNrc3VtcyhzaXplX3QgaGVhZGVyX3ZlcnNpb24sCi0gIGNvbnN0IHN0ZDo6dmVjdG9yPFRhYmxl
PiYgdGFibGVzLCBjb25zdCBzdGQ6OnZlY3RvcjxUdGNGb250PiYgdHRjX2ZvbnRzLAotICB1aW50
OF90KiBkc3QpIHsKLSAgc2l6ZV90IG9mZnNldCA9IENvbGxlY3Rpb25IZWFkZXJTaXplKGhlYWRl
cl92ZXJzaW9uLCB0dGNfZm9udHMuc2l6ZSgpKTsKLQotICBmb3IgKGNvbnN0IGF1dG8mIHR0Y19m
b250IDogdHRjX2ZvbnRzKSB7Ci0gICAgb2Zmc2V0ICs9IDEyOyAgLy8gbW92ZSB0byBzdGFydCBv
ZiBPZmZzZXQgVGFibGUKLSAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50MTZfdD4mIHRhYmxlX2lu
ZGljZXMgPSB0dGNfZm9udC50YWJsZV9pbmRpY2VzOwotCi0gICAgY29uc3QgVGFibGUqIGhlYWRf
dGFibGUgPSBGaW5kVGFibGUodHRjX2ZvbnQsIHRhYmxlcywga0hlYWRUYWJsZVRhZyk7Ci0gICAg
aWYgKFBSRURJQ1RfRkFMU0UoaGVhZF90YWJsZSA9PSBOVUxMIHx8Ci0gICAgICAgIGhlYWRfdGFi
bGUtPmRzdF9sZW5ndGggPCBrQ2hlY2tTdW1BZGp1c3RtZW50T2Zmc2V0ICsgNCkpIHsKLSAgICAg
IHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9Ci0KLSAgICBzaXplX3Qg
Zmlyc3RfdGFibGVfb2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsK
LSAgICBmb3IgKGNvbnN0IGF1dG8gaW5kZXggOiB0YWJsZV9pbmRpY2VzKSB7Ci0gICAgICBjb25z
dCBhdXRvJiB0YWJsZSA9IHRhYmxlc1tpbmRleF07Ci0gICAgICBpZiAodGFibGUuZHN0X29mZnNl
dCA8IGZpcnN0X3RhYmxlX29mZnNldCkgewotICAgICAgICBmaXJzdF90YWJsZV9vZmZzZXQgPSB0
YWJsZS5kc3Rfb2Zmc2V0OwotICAgICAgfQotICAgIH0KLQotICAgIHNpemVfdCBhZGp1c3RtZW50
X29mZnNldCA9IGhlYWRfdGFibGUtPmRzdF9vZmZzZXQKLSAgICAgICsga0NoZWNrU3VtQWRqdXN0
bWVudE9mZnNldDsKLSAgICBTdG9yZVUzMihkc3QsIGFkanVzdG1lbnRfb2Zmc2V0LCAwKTsKLQot
ICAgIHVpbnQzMl90IGZpbGVfY2hlY2tzdW0gPSAwOwotICAgIC8vIGNvbXB1dGUgZWFjaCB0YWJs
ZXMgY2hlY2tzdW0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhYmxlX2luZGljZXMuc2l6
ZSgpOyBpKyspIHsKLSAgICAgIGNvbnN0IFRhYmxlJiB0YWJsZSA9IHRhYmxlc1t0YWJsZV9pbmRp
Y2VzW2ldXTsKLSAgICAgIHVpbnQzMl90IHRhYmxlX2NoZWNrc3VtID0gQ29tcHV0ZUNoZWNrc3Vt
KCZ0YWJsZSwgZHN0KTsKLSAgICAgIHNpemVfdCBjaGVja3N1bV9vZmZzZXQgPSBvZmZzZXQgKyA0
OyAgLy8gc2tpcCBwYXN0IHRhZyB0byBjaGVja1N1bQotCi0gICAgICAvLyB3cml0ZSB0aGUgY2hl
Y2tzdW0gZm9yIHRoZSBUYWJsZSBSZWNvcmQKLSAgICAgIFN0b3JlVTMyKGRzdCwgY2hlY2tzdW1f
b2Zmc2V0LCB0YWJsZV9jaGVja3N1bSk7Ci0gICAgICBmaWxlX2NoZWNrc3VtICs9IHRhYmxlX2No
ZWNrc3VtOwotICAgICAgLy8gbmV4dCBUYWJsZSBSZWNvcmQKLSAgICAgIG9mZnNldCArPSAxNjsK
LSAgICB9Ci0KLSAgICBzaXplX3QgaGVhZGVyX3NpemUgPSBrU2ZudEhlYWRlclNpemUgKwotICAg
ICAga1NmbnRFbnRyeVNpemUgKiB0YWJsZV9pbmRpY2VzLnNpemUoKTsKLSAgICB1aW50MzJfdCBo
ZWFkZXJfY2hlY2tzdW0gPSBDb21wdXRlVUxvbmdTdW0oZHN0ICsgdHRjX2ZvbnQuZHN0X29mZnNl
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVy
X3NpemUpOwotCi0gICAgZmlsZV9jaGVja3N1bSArPSBoZWFkZXJfY2hlY2tzdW07Ci0gICAgdWlu
dDMyX3QgY2hlY2tzdW1fYWRqdXN0bWVudCA9IDB4YjFiMGFmYmEgLSBmaWxlX2NoZWNrc3VtOwot
ICAgIFN0b3JlVTMyKGRzdCwgYWRqdXN0bWVudF9vZmZzZXQsIGNoZWNrc3VtX2FkanVzdG1lbnQp
OwotICB9CiAKICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRml4Q2hlY2tzdW1zKGNvbnN0IHN0
ZDo6dmVjdG9yPFRhYmxlPiYgdGFibGVzLCB1aW50OF90KiBkc3QpIHsKLSAgY29uc3QgVGFibGUq
IGhlYWRfdGFibGUgPSBGaW5kVGFibGUodGFibGVzLCBrSGVhZFRhYmxlVGFnKTsKLSAgaWYgKFBS
RURJQ1RfRkFMU0UoaGVhZF90YWJsZSA9PSBOVUxMIHx8Ci0gICAgICBoZWFkX3RhYmxlLT5kc3Rf
bGVuZ3RoIDwga0NoZWNrU3VtQWRqdXN0bWVudE9mZnNldCArIDQpKSB7Ci0gICAgcmV0dXJuIEZP
TlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwotICB9Ci0gIHNpemVfdCBhZGp1c3RtZW50X29mZnNl
dCA9IGhlYWRfdGFibGUtPmRzdF9vZmZzZXQgKyBrQ2hlY2tTdW1BZGp1c3RtZW50T2Zmc2V0Owot
ICBTdG9yZVUzMihkc3QsIGFkanVzdG1lbnRfb2Zmc2V0LCAwKTsKLSAgc2l6ZV90IG5fdGFibGVz
ID0gdGFibGVzLnNpemUoKTsKLSAgdWludDMyX3QgZmlsZV9jaGVja3N1bSA9IDA7Ci0gIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbl90YWJsZXM7ICsraSkgewotICAgIHVpbnQzMl90IGNoZWNrc3Vt
ID0gQ29tcHV0ZUNoZWNrc3VtKCZ0YWJsZXNbaV0sIGRzdCk7Ci0gICAgU3RvcmVVMzIoZHN0LCBr
U2ZudEhlYWRlclNpemUgKyBpICoga1NmbnRFbnRyeVNpemUgKyA0LCBjaGVja3N1bSk7Ci0gICAg
ZmlsZV9jaGVja3N1bSArPSBjaGVja3N1bTsKLSAgfQotICBmaWxlX2NoZWNrc3VtICs9IENvbXB1
dGVVTG9uZ1N1bShkc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTZm50
SGVhZGVyU2l6ZSArIGtTZm50RW50cnlTaXplICogbl90YWJsZXMpOwotICB1aW50MzJfdCBjaGVj
a3N1bV9hZGp1c3RtZW50ID0gMHhiMWIwYWZiYSAtIGZpbGVfY2hlY2tzdW07Ci0gIFN0b3JlVTMy
KGRzdCwgYWRqdXN0bWVudF9vZmZzZXQsIGNoZWNrc3VtX2FkanVzdG1lbnQpOwotICByZXR1cm4g
dHJ1ZTsKLX0KLQogYm9vbCBXb2ZmMlVuY29tcHJlc3ModWludDhfdCogZHN0X2J1Ziwgc2l6ZV90
IGRzdF9zaXplLAogICBjb25zdCB1aW50OF90KiBzcmNfYnVmLCBzaXplX3Qgc3JjX3NpemUpIHsK
ICAgc2l6ZV90IHVuY29tcHJlc3NlZF9zaXplID0gZHN0X3NpemU7CkBAIC04OTMsNiArNzUyLDcg
QEAgYm9vbCBXb2ZmMlVuY29tcHJlc3ModWludDhfdCogZHN0X2J1Ziwgc2l6ZV90IGRzdF9zaXpl
LAogCiBib29sIFJlYWRUYWJsZURpcmVjdG9yeShCdWZmZXIqIGZpbGUsIHN0ZDo6dmVjdG9yPFRh
YmxlPiogdGFibGVzLAogICAgIHNpemVfdCBudW1fdGFibGVzKSB7CisgIHVpbnQzMl90IHNyY19v
ZmZzZXQgPSAwOwogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bV90YWJsZXM7ICsraSkgewog
ICAgIFRhYmxlKiB0YWJsZSA9ICYoKnRhYmxlcylbaV07CiAgICAgdWludDhfdCBmbGFnX2J5dGU7
CkBAIC05MzMsNiArNzkzLDEzIEBAIGJvb2wgUmVhZFRhYmxlRGlyZWN0b3J5KEJ1ZmZlciogZmls
ZSwgc3RkOjp2ZWN0b3I8VGFibGU+KiB0YWJsZXMsCiAgICAgICAgIHJldHVybiBGT05UX0NPTVBS
RVNTSU9OX0ZBSUxVUkUoKTsKICAgICAgIH0KICAgICB9CisgICAgaWYgKFBSRURJQ1RfRkFMU0Uo
c3JjX29mZnNldCArIHRyYW5zZm9ybV9sZW5ndGggPCBzcmNfb2Zmc2V0KSkgeworICAgICAgcmV0
dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICAgIH0KKyAgICB0YWJsZS0+c3JjX29m
ZnNldCA9IHNyY19vZmZzZXQ7CisgICAgdGFibGUtPnNyY19sZW5ndGggPSB0cmFuc2Zvcm1fbGVu
Z3RoOworICAgIHNyY19vZmZzZXQgKz0gdHJhbnNmb3JtX2xlbmd0aDsKKwogICAgIHRhYmxlLT50
YWcgPSB0YWc7CiAgICAgdGFibGUtPmZsYWdzID0gZmxhZ3M7CiAgICAgdGFibGUtPnRyYW5zZm9y
bV9sZW5ndGggPSB0cmFuc2Zvcm1fbGVuZ3RoOwpAQCAtOTQxLDE5ICs4MDgsNiBAQCBib29sIFJl
YWRUYWJsZURpcmVjdG9yeShCdWZmZXIqIGZpbGUsIHN0ZDo6dmVjdG9yPFRhYmxlPiogdGFibGVz
LAogICByZXR1cm4gdHJ1ZTsKIH0KIAotfSAgLy8gbmFtZXNwYWNlCi0KLXNpemVfdCBDb21wdXRl
V09GRjJGaW5hbFNpemUoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkgewotICBC
dWZmZXIgZmlsZShkYXRhLCBsZW5ndGgpOwotICB1aW50MzJfdCB0b3RhbF9sZW5ndGg7Ci0KLSAg
aWYgKCFmaWxlLlNraXAoMTYpIHx8Ci0gICAgICAhZmlsZS5SZWFkVTMyKCZ0b3RhbF9sZW5ndGgp
KSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgcmV0dXJuIHRvdGFsX2xlbmd0aDsKLX0KLQogLy8g
V3JpdGVzIGEgc2luZ2xlIE9mZnNldCBUYWJsZSBlbnRyeQogc2l6ZV90IFN0b3JlT2Zmc2V0VGFi
bGUodWludDhfdCogcmVzdWx0LCBzaXplX3Qgb2Zmc2V0LCB1aW50MzJfdCBmbGF2b3IsCiAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBudW1fdGFibGVzKSB7CkBAIC05NzEsNjIgKzgy
NSwxODUgQEAgc2l6ZV90IFN0b3JlT2Zmc2V0VGFibGUodWludDhfdCogcmVzdWx0LCBzaXplX3Qg
b2Zmc2V0LCB1aW50MzJfdCBmbGF2b3IsCiAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLXNpemVfdCBT
dG9yZVRhYmxlRW50cnkodWludDhfdCogcmVzdWx0LCBjb25zdCBUYWJsZSYgdGFibGUsIHNpemVf
dCBvZmZzZXQpIHsKLSAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIHRhYmxlLnRh
Zyk7Ci0gIG9mZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCAwKTsgIC8vIGNoZWNrc3Vt
LCB0byBmaWxsIGluIGxhdGVyCi0gIG9mZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCB0
YWJsZS5kc3Rfb2Zmc2V0KTsKLSAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIHRh
YmxlLmRzdF9sZW5ndGgpOworc2l6ZV90IFN0b3JlVGFibGVFbnRyeSh1aW50OF90KiByZXN1bHQs
IHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgdGFnKSB7CisgIG9mZnNldCA9IFN0b3JlVTMyKHJl
c3VsdCwgb2Zmc2V0LCB0YWcpOworICBvZmZzZXQgPSBTdG9yZVUzMihyZXN1bHQsIG9mZnNldCwg
MCk7CisgIG9mZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCAwKTsKKyAgb2Zmc2V0ID0g
U3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIDApOwogICByZXR1cm4gb2Zmc2V0OwogfQogCiAvLyBG
aXJzdCB0YWJsZSBnb2VzIGFmdGVyIGFsbCB0aGUgaGVhZGVycywgdGFibGUgZGlyZWN0b3J5LCBl
dGMKLXVpbnQ2NF90IENvbXB1dGVPZmZzZXRUb0ZpcnN0VGFibGUoY29uc3QgdWludDMyX3QgaGVh
ZGVyX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVp
bnQxNl90IG51bV90YWJsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPFR0Y0ZvbnQ+JiB0dGNfZm9udHMpIHsKK3VpbnQ2NF90IENvbXB1dGVP
ZmZzZXRUb0ZpcnN0VGFibGUoY29uc3QgV09GRjJIZWFkZXImIGhkcikgewogICB1aW50NjRfdCBv
ZmZzZXQgPSBrU2ZudEhlYWRlclNpemUgKwotICAgIGtTZm50RW50cnlTaXplICogc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KG51bV90YWJsZXMpOwotICBpZiAoaGVhZGVyX3ZlcnNpb24pIHsKLSAgICBv
ZmZzZXQgPSBDb2xsZWN0aW9uSGVhZGVyU2l6ZShoZWFkZXJfdmVyc2lvbiwgdHRjX2ZvbnRzLnNp
emUoKSkKLSAgICAgICsga1NmbnRIZWFkZXJTaXplICogdHRjX2ZvbnRzLnNpemUoKTsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIHR0Y19mb250IDogdHRjX2ZvbnRzKSB7Ci0gICAgICBvZmZzZXQgKz0K
LSAgICAgICAga1NmbnRFbnRyeVNpemUgKiB0dGNfZm9udC50YWJsZV9pbmRpY2VzLnNpemUoKTsK
KyAgICBrU2ZudEVudHJ5U2l6ZSAqIHN0YXRpY19jYXN0PHVpbnQ2NF90PihoZHIubnVtX3RhYmxl
cyk7CisgIGlmIChoZHIuaGVhZGVyX3ZlcnNpb24pIHsKKyAgICBvZmZzZXQgPSBDb2xsZWN0aW9u
SGVhZGVyU2l6ZShoZHIuaGVhZGVyX3ZlcnNpb24sIGhkci50dGNfZm9udHMuc2l6ZSgpKQorICAg
ICAgKyBrU2ZudEhlYWRlclNpemUgKiBoZHIudHRjX2ZvbnRzLnNpemUoKTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIHR0Y19mb250IDogaGRyLnR0Y19mb250cykgeworICAgICAgb2Zmc2V0ICs9IGtT
Zm50RW50cnlTaXplICogdHRjX2ZvbnQudGFibGVfaW5kaWNlcy5zaXplKCk7CiAgICAgfQogICB9
CiAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLWJvb2wgUmVjb25zdHJ1Y3RUcmFuc2Zvcm1lZEZvbnQo
Y29uc3Qgc3RkOjp2ZWN0b3I8VGFibGU+JiB0YWJsZXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6bWFwPHVpbnQzMl90LCBjb25zdCB1aW50OF90Kj4qIHNyY19ieV9kZXN0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiByZXN1bHQsIHNpemVf
dCByZXN1bHRfbGVuZ3RoKSB7Ci0gIGZvciAoY29uc3QgYXV0byYgdGFibGUgOiB0YWJsZXMpIHsK
LSAgICBpZiAoKHRhYmxlLmZsYWdzICYga1dvZmYyRmxhZ3NUcmFuc2Zvcm0pICE9IGtXb2ZmMkZs
YWdzVHJhbnNmb3JtKSB7Ci0gICAgICBjb250aW51ZTsKK3N0ZDo6dmVjdG9yPFRhYmxlKj4gVGFi
bGVzKFdPRkYySGVhZGVyKiBoZHIsIHNpemVfdCBmb250X2luZGV4KSB7CisgIHN0ZDo6dmVjdG9y
PFRhYmxlKj4gdGFibGVzOworICBpZiAoUFJFRElDVF9GQUxTRShoZHItPmhlYWRlcl92ZXJzaW9u
KSkgeworICAgIGZvciAoYXV0byBpbmRleCA6IGhkci0+dHRjX2ZvbnRzW2ZvbnRfaW5kZXhdLnRh
YmxlX2luZGljZXMpIHsKKyAgICAgIHRhYmxlcy5wdXNoX2JhY2soJmhkci0+dGFibGVzW2luZGV4
XSk7CisgICAgfQorICB9IGVsc2UgeworICAgIGZvciAoYXV0byYgdGFibGUgOiBoZHItPnRhYmxl
cykgeworICAgICAgdGFibGVzLnB1c2hfYmFjaygmdGFibGUpOworICAgIH0KKyAgfQorICByZXR1
cm4gdGFibGVzOworfQorCisvLyBPZmZzZXQgdGFibGVzIGFzc3VtZWQgdG8gaGF2ZSBiZWVuIHdy
aXR0ZW4gaW4gd2l0aCAwJ3MgaW5pdGlhbGx5LgorLy8gV09GRjJIZWFkZXIgaXNuJ3QgY29uc3Qg
c28gd2UgY2FuIHVzZSBbXSBpbnN0ZWFkIG9mIGF0KCkgKHdoaWNoIHVwc2V0cyBGRikKK2Jvb2wg
UmVjb25zdHJ1Y3RGb250KHVpbnQ4X3QqIHRyYW5zZm9ybWVkX2J1ZiwKKyAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQzMl90IHRyYW5zZm9ybWVkX2J1Zl9zaXplLAorICAgICAgICAgICAg
ICAgICAgICAgUmVidWlsZE1ldGFkYXRhKiBtZXRhZGF0YSwKKyAgICAgICAgICAgICAgICAgICAg
IFdPRkYySGVhZGVyKiBoZHIsCisgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZm9udF9pbmRl
eCwKKyAgICAgICAgICAgICAgICAgICAgIFdPRkYyT3V0KiBvdXQpIHsKKyAgc2l6ZV90IGRlc3Rf
b2Zmc2V0ID0gb3V0LT5TaXplKCk7CisgIHVpbnQ4X3QgdGFibGVfZW50cnlbMTJdOworICBXT0ZG
MkZvbnRJbmZvKiBpbmZvID0gJm1ldGFkYXRhLT5mb250X2luZm9zW2ZvbnRfaW5kZXhdOworICBz
dGQ6OnZlY3RvcjxUYWJsZSo+IHRhYmxlcyA9IFRhYmxlcyhoZHIsIGZvbnRfaW5kZXgpOworCisg
IC8vICdnbHlmJyB3aXRob3V0ICdsb2NhJyBkb2Vzbid0IG1ha2Ugc2Vuc2UKKyAgaWYgKFBSRURJ
Q1RfRkFMU0Uoc3RhdGljX2Nhc3Q8Ym9vbD4oRmluZFRhYmxlKCZ0YWJsZXMsIGtHbHlmVGFibGVU
YWcpKSAhPQorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxib29sPihGaW5kVGFibGUo
JnRhYmxlcywga0xvY2FUYWJsZVRhZykpKSkgeworICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9O
X0ZBSUxVUkUoKTsKKyAgfQorCisgIHVpbnQzMl90IGZvbnRfY2hlY2tzdW0gPSBtZXRhZGF0YS0+
aGVhZGVyX2NoZWNrc3VtOworICBpZiAoaGRyLT5oZWFkZXJfdmVyc2lvbikgeworICAgIGZvbnRf
Y2hlY2tzdW0gPSBoZHItPnR0Y19mb250c1tmb250X2luZGV4XS5oZWFkZXJfY2hlY2tzdW07Cisg
IH0KKworICB1aW50MzJfdCBsb2NhX2NoZWNrc3VtID0gMDsKKyAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB0YWJsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICBUYWJsZSYgdGFibGUgPSAqdGFibGVzW2ld
OworCisgICAgc3RkOjpwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4gY2hlY2tzdW1fa2V5ID0ge3Rh
YmxlLnRhZywgdGFibGUuc3JjX29mZnNldH07CisgICAgYm9vbCByZXVzZWQgPSBtZXRhZGF0YS0+
Y2hlY2tzdW1zLmZpbmQoY2hlY2tzdW1fa2V5KQorICAgICAgICAgICAgICAgIT0gbWV0YWRhdGEt
PmNoZWNrc3Vtcy5lbmQoKTsKKyAgICBpZiAoUFJFRElDVF9GQUxTRShmb250X2luZGV4ID09IDAg
JiYgcmV1c2VkKSkgeworICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwor
ICAgIH0KKworICAgIC8vIFRPRE8odXNlcikgYSBjb2xsZWN0aW9uIHdpdGggb3B0aW1pemVkIGht
dHggdGhhdCByZXVzZWQgZ2x5Zi9sb2NhCisgICAgLy8gd291bGQgZmFpbC4gV2UgZG9uJ3Qgb3B0
aW1pemUgaG10eCBmb3IgY29sbGVjdGlvbnMgeWV0LgorICAgIGlmIChQUkVESUNUX0ZBTFNFKHN0
YXRpY19jYXN0PHVpbnQ2NF90Pih0YWJsZS5zcmNfb2Zmc2V0ICsgdGFibGUuc3JjX2xlbmd0aCkK
KyAgICAgICAgPiB0cmFuc2Zvcm1lZF9idWZfc2l6ZSkpIHsKKyAgICAgIHJldHVybiBGT05UX0NP
TVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICB9CisKKyAgICBpZiAodGFibGUudGFnID09IGtIaGVh
VGFibGVUYWcpIHsKKyAgICAgIGlmICghUmVhZE51bUhNZXRyaWNzKHRyYW5zZm9ybWVkX2J1ZiAr
IHRhYmxlLnNyY19vZmZzZXQsCisgICAgICAgICAgdGFibGUuc3JjX2xlbmd0aCwgJmluZm8tPm51
bV9obWV0cmljcykpIHsKKyAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgp
OworICAgICAgfQorICAgIH0KKworICAgIHVpbnQzMl90IGNoZWNrc3VtID0gMDsKKyAgICBpZiAo
IXJldXNlZCkgeworICAgICAgaWYgKCh0YWJsZS5mbGFncyAmIGtXb2ZmMkZsYWdzVHJhbnNmb3Jt
KSAhPSBrV29mZjJGbGFnc1RyYW5zZm9ybSkgeworICAgICAgICBpZiAodGFibGUudGFnID09IGtI
ZWFkVGFibGVUYWcpIHsKKyAgICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSh0YWJsZS5zcmNfbGVu
Z3RoIDwgMTIpKSB7CisgICAgICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJF
KCk7CisgICAgICAgICAgfQorICAgICAgICAgIC8vIGNoZWNrU3VtQWRqdXN0bWVudCA9IDAKKyAg
ICAgICAgICBTdG9yZVUzMih0cmFuc2Zvcm1lZF9idWYgKyB0YWJsZS5zcmNfb2Zmc2V0LCA4LCAw
KTsKKyAgICAgICAgfQorICAgICAgICB0YWJsZS5kc3Rfb2Zmc2V0ID0gZGVzdF9vZmZzZXQ7Cisg
ICAgICAgIGNoZWNrc3VtID0gQ29tcHV0ZVVMb25nU3VtKHRyYW5zZm9ybWVkX2J1ZiArIHRhYmxl
LnNyY19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLnNy
Y19sZW5ndGgpOworICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSghb3V0LT5Xcml0ZSh0cmFuc2Zv
cm1lZF9idWYgKyB0YWJsZS5zcmNfb2Zmc2V0LAorICAgICAgICAgICAgdGFibGUuc3JjX2xlbmd0
aCkpKSB7CisgICAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICAg
ICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAodGFibGUudGFnID09IGtHbHlmVGFi
bGVUYWcpIHsKKyAgICAgICAgICB0YWJsZS5kc3Rfb2Zmc2V0ID0gZGVzdF9vZmZzZXQ7CisKKyAg
ICAgICAgICBUYWJsZSogbG9jYV90YWJsZSA9IEZpbmRUYWJsZSgmdGFibGVzLCBrTG9jYVRhYmxl
VGFnKTsKKyAgICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSghUmVjb25zdHJ1Y3RHbHlmKHRyYW5z
Zm9ybWVkX2J1ZiArIHRhYmxlLnNyY19vZmZzZXQsCisgICAgICAgICAgICAgICZ0YWJsZSwgJmNo
ZWNrc3VtLCBsb2NhX3RhYmxlLCAmbG9jYV9jaGVja3N1bSwgaW5mbywgb3V0KSkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAodGFibGUudGFnID09IGtMb2NhVGFibGVUYWcpIHsKKyAgICAgICAg
ICAvLyBBbGwgdGhlIHdvcmsgd2FzIGRvbmUgYnkgUmVjb25zdHJ1Y3RHbHlmLiBXZSBhbHJlYWR5
IGtub3cgY2hlY2tzdW0uCisgICAgICAgICAgY2hlY2tzdW0gPSBsb2NhX2NoZWNrc3VtOworICAg
ICAgICB9IGVsc2UgaWYgKHRhYmxlLnRhZyA9PSBrSG10eFRhYmxlVGFnKSB7CisgICAgICAgICAg
dGFibGUuZHN0X29mZnNldCA9IGRlc3Rfb2Zmc2V0OworICAgICAgICAgIC8vIFRhYmxlcyBhcmUg
c29ydGVkIHNvIGFsbCB0aGUgaW5mbyB3ZSBuZWVkIGhhcyBiZWVuIGdhdGhlcmVkLgorICAgICAg
ICAgIGlmIChQUkVESUNUX0ZBTFNFKCFSZWNvbnN0cnVjdFRyYW5zZm9ybWVkSG10eCgKKyAgICAg
ICAgICAgICAgdHJhbnNmb3JtZWRfYnVmICsgdGFibGUuc3JjX29mZnNldCwgdGFibGUuc3JjX2xl
bmd0aCwKKyAgICAgICAgICAgICAgaW5mby0+bnVtX2dseXBocywgaW5mby0+bnVtX2htZXRyaWNz
LCBpbmZvLT54X21pbnMsICZjaGVja3N1bSwKKyAgICAgICAgICAgICAgb3V0KSkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVS
RSgpOyAgLy8gdHJhbnNmb3JtIHVua25vd24KKyAgICAgICAgfQorICAgICAgfQorICAgICAgbWV0
YWRhdGEtPmNoZWNrc3Vtc1tjaGVja3N1bV9rZXldID0gY2hlY2tzdW07CisgICAgfSBlbHNlIHsK
KyAgICAgIGNoZWNrc3VtID0gbWV0YWRhdGEtPmNoZWNrc3Vtc1tjaGVja3N1bV9rZXldOworICAg
IH0KKyAgICBmb250X2NoZWNrc3VtICs9IGNoZWNrc3VtOworCisgICAgLy8gdXBkYXRlIHRoZSB0
YWJsZSBlbnRyeSB3aXRoIHJlYWwgdmFsdWVzLgorICAgIFN0b3JlVTMyKHRhYmxlX2VudHJ5LCAw
LCBjaGVja3N1bSk7CisgICAgU3RvcmVVMzIodGFibGVfZW50cnksIDQsIHRhYmxlLmRzdF9vZmZz
ZXQpOworICAgIFN0b3JlVTMyKHRhYmxlX2VudHJ5LCA4LCB0YWJsZS5kc3RfbGVuZ3RoKTsKKyAg
ICBpZiAoUFJFRElDVF9GQUxTRSghb3V0LT5Xcml0ZSh0YWJsZV9lbnRyeSwKKyAgICAgICAgaW5m
by0+dGFibGVfZW50cnlfYnlfdGFnW3RhYmxlLnRhZ10gKyA0LCAxMikpKSB7CisgICAgICByZXR1
cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CisgICAgfQorCisgICAgLy8gV2UgcmVwbGFj
ZWQgMCdzLiBVcGRhdGUgb3ZlcmFsbCBjaGVja3N1bS4KKyAgICBmb250X2NoZWNrc3VtICs9IENv
bXB1dGVVTG9uZ1N1bSh0YWJsZV9lbnRyeSwgMTIpOworCisgICAgaWYgKFBSRURJQ1RfRkFMU0Uo
IVBhZDQob3V0KSkpIHsKKyAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsK
ICAgICB9Ci0gICAgY29uc3QgYXV0byBpdCA9IHNyY19ieV9kZXN0LT5maW5kKHRhYmxlLmRzdF9v
ZmZzZXQpOwotICAgIGlmIChpdCA9PSBzcmNfYnlfZGVzdC0+ZW5kKCkpIHsKLSAgICAgIGNvbnRp
bnVlOworCisgICAgaWYgKFBSRURJQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRhYmxl
LmRzdF9vZmZzZXQgKyB0YWJsZS5kc3RfbGVuZ3RoKQorICAgICAgICA+IG91dC0+U2l6ZSgpKSkg
eworICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0KLSAgICBj
b25zdCB1aW50OF90KiB0cmFuc2Zvcm1fYnVmID0gKCppdCkuc2Vjb25kOwotICAgIHNyY19ieV9k
ZXN0LT5lcmFzZSh0YWJsZS5kc3Rfb2Zmc2V0KTsKKyAgICBkZXN0X29mZnNldCA9IG91dC0+U2l6
ZSgpOworICB9CiAKLSAgICBzaXplX3QgdHJhbnNmb3JtX2xlbmd0aCA9IHRhYmxlLnRyYW5zZm9y
bV9sZW5ndGg7Ci0gICAgaWYgKFBSRURJQ1RfRkFMU0UoIVJlY29uc3RydWN0VHJhbnNmb3JtZWQo
dGFibGVzLCB0YWJsZS50YWcsCi0gICAgICAgICAgICB0cmFuc2Zvcm1fYnVmLCB0cmFuc2Zvcm1f
bGVuZ3RoLCByZXN1bHQsIHJlc3VsdF9sZW5ndGgpKSkgeworICAvLyBVcGRhdGUgJ2hlYWQnIGNo
ZWNrU3VtQWRqdXN0bWVudC4gV2UgYWxyZWFkeSBzZXQgaXQgdG8gMCBhbmQgc3VtbWVkIGZvbnQu
CisgIFRhYmxlKiBoZWFkX3RhYmxlID0gRmluZFRhYmxlKCZ0YWJsZXMsIGtIZWFkVGFibGVUYWcp
OworICBpZiAoaGVhZF90YWJsZSkgeworICAgIGlmIChQUkVESUNUX0ZBTFNFKGhlYWRfdGFibGUt
PmRzdF9sZW5ndGggPCAxMikpIHsKKyAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxV
UkUoKTsKKyAgICB9CisgICAgdWludDhfdCBjaGVja3N1bV9hZGp1c3RtZW50WzRdOworICAgIFN0
b3JlVTMyKGNoZWNrc3VtX2FkanVzdG1lbnQsIDAsIDB4QjFCMEFGQkEgLSBmb250X2NoZWNrc3Vt
KTsKKyAgICBpZiAoUFJFRElDVF9GQUxTRSghb3V0LT5Xcml0ZShjaGVja3N1bV9hZGp1c3RtZW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRfdGFibGUtPmRzdF9vZmZz
ZXQgKyA4LCA0KSkpIHsKICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsK
ICAgICB9CiAgIH0KKwogICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDb252ZXJ0V09GRjJUb1RU
Rih1aW50OF90KiByZXN1bHQsIHNpemVfdCByZXN1bHRfbGVuZ3RoLAotICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7Citib29sIFJlYWRX
T0ZGMkhlYWRlcihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBXT0ZGMkhlYWRl
ciogaGRyKSB7CiAgIEJ1ZmZlciBmaWxlKGRhdGEsIGxlbmd0aCk7CiAKICAgdWludDMyX3Qgc2ln
bmF0dXJlOwotICB1aW50MzJfdCBmbGF2b3I7CiAgIGlmIChQUkVESUNUX0ZBTFNFKCFmaWxlLlJl
YWRVMzIoJnNpZ25hdHVyZSkgfHwgc2lnbmF0dXJlICE9IGtXb2ZmMlNpZ25hdHVyZSB8fAotICAg
ICAgIWZpbGUuUmVhZFUzMigmZmxhdm9yKSkpIHsKKyAgICAgICFmaWxlLlJlYWRVMzIoJmhkci0+
Zmxhdm9yKSkpIHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0K
IApAQCAtMTAzNywxOCArMTAxNCwxNyBAQCBib29sIENvbnZlcnRXT0ZGMlRvVFRGKHVpbnQ4X3Qq
IHJlc3VsdCwgc2l6ZV90IHJlc3VsdF9sZW5ndGgsCiAgICAgICAhZmlsZS5SZWFkVTMyKCZyZXBv
cnRlZF9sZW5ndGgpIHx8IGxlbmd0aCAhPSByZXBvcnRlZF9sZW5ndGgpKSB7CiAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9Ci0gIHVpbnQxNl90IG51bV90YWJsZXM7
Ci0gIGlmIChQUkVESUNUX0ZBTFNFKCFmaWxlLlJlYWRVMTYoJm51bV90YWJsZXMpIHx8ICFudW1f
dGFibGVzKSkgeworICBpZiAoUFJFRElDVF9GQUxTRSghZmlsZS5SZWFkVTE2KCZoZHItPm51bV90
YWJsZXMpIHx8ICFoZHItPm51bV90YWJsZXMpKSB7CiAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJ
T05fRkFJTFVSRSgpOwogICB9CisKICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGVzZSBmaWVs
ZHMgb2YgdGhlIGhlYWRlcjoKICAgLy8gICB1aW50MTZfdCByZXNlcnZlZAotICAvLyAgIHVpbnQz
Ml90IHRvdGFsX3NmbnRfc2l6ZSwgdGhlIGNhbGxlciBhbHJlYWR5IHBhc3NlcyBpdCBhcyByZXN1
bHRfbGVuZ3RoCisgIC8vICAgdWludDMyX3QgdG90YWxfc2ZudF9zaXplLCB3ZSBkb24ndCBiZWxp
ZXZlIHRoaXMsIHdpbGwgY29tcHV0ZSBsYXRlcgogICBpZiAoUFJFRElDVF9GQUxTRSghZmlsZS5T
a2lwKDYpKSkgewogICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQot
ICB1aW50MzJfdCBjb21wcmVzc2VkX2xlbmd0aDsKLSAgaWYgKFBSRURJQ1RfRkFMU0UoIWZpbGUu
UmVhZFUzMigmY29tcHJlc3NlZF9sZW5ndGgpKSkgeworICBpZiAoUFJFRElDVF9GQUxTRSghZmls
ZS5SZWFkVTMyKCZoZHItPmNvbXByZXNzZWRfbGVuZ3RoKSkpIHsKICAgICByZXR1cm4gRk9OVF9D
T01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0KICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGVz
ZSBmaWVsZHMgb2YgdGhlIGhlYWRlcjoKQEAgLTEwODIsMjggKzEwNTgsMzcgQEAgYm9vbCBDb252
ZXJ0V09GRjJUb1RURih1aW50OF90KiByZXN1bHQsIHNpemVfdCByZXN1bHRfbGVuZ3RoLAogICAg
ICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0KICAgfQotICBzdGQ6
OnZlY3RvcjxUYWJsZT4gdGFibGVzKG51bV90YWJsZXMpOwotICBpZiAoUFJFRElDVF9GQUxTRSgh
UmVhZFRhYmxlRGlyZWN0b3J5KCZmaWxlLCAmdGFibGVzLCBudW1fdGFibGVzKSkpIHsKKyAgaGRy
LT50YWJsZXMucmVzaXplKGhkci0+bnVtX3RhYmxlcyk7CisgIGlmIChQUkVESUNUX0ZBTFNFKCFS
ZWFkVGFibGVEaXJlY3RvcnkoCisgICAgICAgICAgJmZpbGUsICZoZHItPnRhYmxlcywgaGRyLT5u
dW1fdGFibGVzKSkpIHsKKyAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Cisg
IH0KKworICAvLyBCZWZvcmUgd2Ugc29ydCBmb3Igb3V0cHV0IHRoZSBsYXN0IHRhYmxlIGVuZCBp
cyB0aGUgdW5jb21wcmVzc2VkIHNpemUuCisgIFRhYmxlJiBsYXN0X3RhYmxlID0gaGRyLT50YWJs
ZXMuYmFjaygpOworICBoZHItPnVuY29tcHJlc3NlZF9zaXplID0gbGFzdF90YWJsZS5zcmNfb2Zm
c2V0ICsgbGFzdF90YWJsZS5zcmNfbGVuZ3RoOworICBpZiAoUFJFRElDVF9GQUxTRShoZHItPnVu
Y29tcHJlc3NlZF9zaXplIDwgbGFzdF90YWJsZS5zcmNfb2Zmc2V0KSkgewogICAgIHJldHVybiBG
T05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQogCi0gIHVpbnQzMl90IGhlYWRlcl92ZXJz
aW9uID0gMDsKLSAgLy8gZm9yIGVhY2ggZm9udCBpbiBhIHR0YywgbWV0YWRhdGEgdG8gdXNlIHdo
ZW4gcmVidWlsZGluZwotICBzdGQ6OnZlY3RvcjxUdGNGb250PiB0dGNfZm9udHM7Ci0gIHN0ZDo6
bWFwPGNvbnN0IFRhYmxlKiwgY29uc3QgVGFibGUqPiBsb2NhX2J5X2dseWY7CisgIGhkci0+aGVh
ZGVyX3ZlcnNpb24gPSAwOwogCi0gIGlmIChmbGF2b3IgPT0ga1R0Y0ZvbnRGbGF2b3IpIHsKLSAg
ICBpZiAoUFJFRElDVF9GQUxTRSghZmlsZS5SZWFkVTMyKCZoZWFkZXJfdmVyc2lvbikpKSB7Cisg
IGlmIChoZHItPmZsYXZvciA9PSBrVHRjRm9udEZsYXZvcikgeworICAgIGlmIChQUkVESUNUX0ZB
TFNFKCFmaWxlLlJlYWRVMzIoJmhkci0+aGVhZGVyX3ZlcnNpb24pKSkgeworICAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICAgIH0KKyAgICBpZiAoUFJFRElDVF9GQUxT
RShoZHItPmhlYWRlcl92ZXJzaW9uICE9IDB4MDAwMTAwMDAKKyAgICAgICAgICAgICAgICAgICAm
JiBoZHItPmhlYWRlcl92ZXJzaW9uICE9IDB4MDAwMjAwMDApKSB7CiAgICAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgfQogICAgIHVpbnQzMl90IG51bV9mb250czsK
ICAgICBpZiAoUFJFRElDVF9GQUxTRSghUmVhZDI1NVVTaG9ydCgmZmlsZSwgJm51bV9mb250cykg
fHwgIW51bV9mb250cykpIHsKICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUo
KTsKICAgICB9Ci0gICAgdHRjX2ZvbnRzLnJlc2l6ZShudW1fZm9udHMpOworICAgIGhkci0+dHRj
X2ZvbnRzLnJlc2l6ZShudW1fZm9udHMpOwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IG51bV9mb250czsgaSsrKSB7Ci0gICAgICBUdGNGb250JiB0dGNfZm9udCA9IHR0Y19mb250c1tp
XTsKKyAgICAgIFR0Y0ZvbnQmIHR0Y19mb250ID0gaGRyLT50dGNfZm9udHNbaV07CiAgICAgICB1
aW50MzJfdCBudW1fdGFibGVzOwogICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoIVJlYWQyNTVVU2hv
cnQoJmZpbGUsICZudW1fdGFibGVzKSB8fCAhbnVtX3RhYmxlcykpIHsKICAgICAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwpAQCAtMTExNiwyNSArMTEwMSwyMSBAQCBib29s
IENvbnZlcnRXT0ZGMlRvVFRGKHVpbnQ4X3QqIHJlc3VsdCwgc2l6ZV90IHJlc3VsdF9sZW5ndGgs
CiAKICAgICAgIGNvbnN0IFRhYmxlKiBnbHlmX3RhYmxlID0gTlVMTDsKICAgICAgIGNvbnN0IFRh
YmxlKiBsb2NhX3RhYmxlID0gTlVMTDsKLSAgICAgIHVpbnQxNl90IGdseWZfaWR4OwotICAgICAg
dWludDE2X3QgbG9jYV9pZHg7CiAKICAgICAgIGZvciAodWludDMyX3QgaiA9IDA7IGogPCBudW1f
dGFibGVzOyBqKyspIHsKICAgICAgICAgdW5zaWduZWQgaW50IHRhYmxlX2lkeDsKICAgICAgICAg
aWYgKFBSRURJQ1RfRkFMU0UoIVJlYWQyNTVVU2hvcnQoJmZpbGUsICZ0YWJsZV9pZHgpKSB8fAot
ICAgICAgICAgICAgdGFibGVfaWR4ID49IHRhYmxlcy5zaXplKCkpIHsKKyAgICAgICAgICAgIHRh
YmxlX2lkeCA+PSBoZHItPnRhYmxlcy5zaXplKCkpIHsKICAgICAgICAgICByZXR1cm4gRk9OVF9D
T01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICAgIH0KICAgICAgICAgdHRjX2ZvbnQudGFibGVf
aW5kaWNlc1tqXSA9IHRhYmxlX2lkeDsKIAotICAgICAgICBjb25zdCBUYWJsZSYgdGFibGUgPSB0
YWJsZXNbdGFibGVfaWR4XTsKKyAgICAgICAgY29uc3QgVGFibGUmIHRhYmxlID0gaGRyLT50YWJs
ZXNbdGFibGVfaWR4XTsKICAgICAgICAgaWYgKHRhYmxlLnRhZyA9PSBrTG9jYVRhYmxlVGFnKSB7
CiAgICAgICAgICAgbG9jYV90YWJsZSA9ICZ0YWJsZTsKLSAgICAgICAgICBsb2NhX2lkeCA9IHRh
YmxlX2lkeDsKICAgICAgICAgfQogICAgICAgICBpZiAodGFibGUudGFnID09IGtHbHlmVGFibGVU
YWcpIHsKICAgICAgICAgICBnbHlmX3RhYmxlID0gJnRhYmxlOwotICAgICAgICAgIGdseWZfaWR4
ID0gdGFibGVfaWR4OwogICAgICAgICB9CiAKICAgICAgIH0KQEAgLTExNDUsNjUgKzExMjYsMjgg
QEAgYm9vbCBDb252ZXJ0V09GRjJUb1RURih1aW50OF90KiByZXN1bHQsIHNpemVfdCByZXN1bHRf
bGVuZ3RoLAogI2VuZGlmCiAgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUo
KTsKICAgICAgIH0KLQotICAgICAgaWYgKGdseWZfdGFibGUgIT0gTlVMTCAmJiBsb2NhX3RhYmxl
ICE9IE5VTEwpIHsKLSAgICAgICAgbG9jYV9ieV9nbHlmW2dseWZfdGFibGVdID0gbG9jYV90YWJs
ZTsKLSAgICAgIH0KICAgICB9CiAgIH0KIAotICBjb25zdCB1aW50NjRfdCBmaXJzdF90YWJsZV9v
ZmZzZXQgPQotICAgIENvbXB1dGVPZmZzZXRUb0ZpcnN0VGFibGUoaGVhZGVyX3ZlcnNpb24sIG51
bV90YWJsZXMsIHR0Y19mb250cyk7Ci0KLSAgaWYgKFBSRURJQ1RfRkFMU0UoZmlyc3RfdGFibGVf
b2Zmc2V0ID4gcmVzdWx0X2xlbmd0aCkpIHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9G
QUlMVVJFKCk7Ci0gIH0KKyAgY29uc3QgdWludDY0X3QgZmlyc3RfdGFibGVfb2Zmc2V0ID0gQ29t
cHV0ZU9mZnNldFRvRmlyc3RUYWJsZSgqaGRyKTsKIAotICB1aW50NjRfdCBjb21wcmVzc2VkX29m
ZnNldCA9IGZpbGUub2Zmc2V0KCk7Ci0gIGlmIChQUkVESUNUX0ZBTFNFKGNvbXByZXNzZWRfb2Zm
c2V0ID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkgeworICBoZHItPmNv
bXByZXNzZWRfb2Zmc2V0ID0gZmlsZS5vZmZzZXQoKTsKKyAgaWYgKFBSRURJQ1RfRkFMU0UoaGRy
LT5jb21wcmVzc2VkX29mZnNldCA+CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSkpIHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9G
QUlMVVJFKCk7CiAgIH0KLSAgdWludDY0X3Qgc3JjX29mZnNldCA9IFJvdW5kNChjb21wcmVzc2Vk
X29mZnNldCArIGNvbXByZXNzZWRfbGVuZ3RoKTsKKyAgdWludDY0X3Qgc3JjX29mZnNldCA9IFJv
dW5kNChoZHItPmNvbXByZXNzZWRfb2Zmc2V0ICsgaGRyLT5jb21wcmVzc2VkX2xlbmd0aCk7CiAg
IHVpbnQ2NF90IGRzdF9vZmZzZXQgPSBmaXJzdF90YWJsZV9vZmZzZXQ7CiAKIAotICBmb3IgKHVp
bnQxNl90IGkgPSAwOyBpIDwgbnVtX3RhYmxlczsgKytpKSB7Ci0gICAgVGFibGUqIHRhYmxlID0g
JnRhYmxlc1tpXTsKLSAgICB0YWJsZS0+ZHN0X29mZnNldCA9IGRzdF9vZmZzZXQ7Ci0gICAgZHN0
X29mZnNldCArPSB0YWJsZS0+ZHN0X2xlbmd0aDsKLSAgICBpZiAoUFJFRElDVF9GQUxTRShkc3Rf
b2Zmc2V0ID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkgewotICAgICAg
cmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwotICAgIH0KLSAgICBkc3Rfb2Zmc2V0
ID0gUm91bmQ0KGRzdF9vZmZzZXQpOwotICB9Ci0gIGlmIChQUkVESUNUX0ZBTFNFKHNyY19vZmZz
ZXQgPiBsZW5ndGggfHwgZHN0X29mZnNldCAhPSByZXN1bHRfbGVuZ3RoKSkgeworICBpZiAoUFJF
RElDVF9GQUxTRShzcmNfb2Zmc2V0ID4gbGVuZ3RoKSkgewogI2lmZGVmIEZPTlRfQ09NUFJFU1NJ
T05fQklOCiAgICAgZnByaW50ZihzdGRlcnIsICJvZmZzZXQgZmFpbDsgc3JjX29mZnNldCAlIiBQ
Ukl1NjQgIiBsZW5ndGggJWx1ICIKLSAgICAgICJkc3Rfb2Zmc2V0ICUiIFBSSXU2NCAiIHJlc3Vs
dF9sZW5ndGggJWx1XG4iLAotICAgICAgc3JjX29mZnNldCwgbGVuZ3RoLCBkc3Rfb2Zmc2V0LCBy
ZXN1bHRfbGVuZ3RoKTsKKyAgICAgICJkc3Rfb2Zmc2V0ICUiIFBSSXU2NCAiXG4iLAorICAgICAg
c3JjX29mZnNldCwgbGVuZ3RoLCBkc3Rfb2Zmc2V0KTsKICNlbmRpZgogICAgIHJldHVybiBGT05U
X0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQotCi0gIC8vIFJlLW9yZGVyIHRhYmxlcyBpbiBv
dXRwdXQgKE9UU3BlYykgb3JkZXIKLSAgc3RkOjp2ZWN0b3I8VGFibGU+IHNvcnRlZF90YWJsZXMo
dGFibGVzKTsKLSAgaWYgKGhlYWRlcl92ZXJzaW9uKSB7Ci0gICAgLy8gY29sbGVjdGlvbjsgd2Ug
aGF2ZSB0byBzb3J0IHRoZSB0YWJsZSBvZmZzZXQgdmVjdG9yIGluIGVhY2ggZm9udAotICAgIGZv
ciAoYXV0byYgdHRjX2ZvbnQgOiB0dGNfZm9udHMpIHsKLSAgICAgIHN0ZDo6bWFwPHVpbnQzMl90
LCB1aW50MTZfdD4gc29ydGVkX2luZGV4X2J5X3RhZzsKLSAgICAgIGZvciAoYXV0byB0YWJsZV9p
bmRleCA6IHR0Y19mb250LnRhYmxlX2luZGljZXMpIHsKLSAgICAgICAgc29ydGVkX2luZGV4X2J5
X3RhZ1t0YWJsZXNbdGFibGVfaW5kZXhdLnRhZ10gPSB0YWJsZV9pbmRleDsKLSAgICAgIH0KLSAg
ICAgIHVpbnQxNl90IGluZGV4ID0gMDsKLSAgICAgIGZvciAoYXV0byYgaSA6IHNvcnRlZF9pbmRl
eF9ieV90YWcpIHsKLSAgICAgICAgdHRjX2ZvbnQudGFibGVfaW5kaWNlc1tpbmRleCsrXSA9IGku
c2Vjb25kOwotICAgICAgfQotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvLyBub24tY29sbGVjdGlv
bjsgd2UgY2FuIGp1c3Qgc29ydCB0aGUgdGFibGVzCi0gICAgc3RkOjpzb3J0KHNvcnRlZF90YWJs
ZXMuYmVnaW4oKSwgc29ydGVkX3RhYmxlcy5lbmQoKSk7Ci0gIH0KLQogICBpZiAobWV0YV9vZmZz
ZXQpIHsKICAgICBpZiAoUFJFRElDVF9GQUxTRShzcmNfb2Zmc2V0ICE9IG1ldGFfb2Zmc2V0KSkg
ewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwpAQCAtMTIyOCwyOCAr
MTE3Miw1OCBAQCBib29sIENvbnZlcnRXT0ZGMlRvVFRGKHVpbnQ4X3QqIHJlc3VsdCwgc2l6ZV90
IHJlc3VsdF9sZW5ndGgsCiAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwog
ICB9CiAKKyAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFdyaXRlIGV2ZXJ5dGhpbmcgYmVmb3JlIHRo
ZSBhY3R1YWwgdGFibGUgZGF0YQorYm9vbCBXcml0ZUhlYWRlcnMoY29uc3QgdWludDhfdCogZGF0
YSwgc2l6ZV90IGxlbmd0aCwgUmVidWlsZE1ldGFkYXRhKiBtZXRhZGF0YSwKKyAgICAgICAgICAg
ICAgICAgIFdPRkYySGVhZGVyKiBoZHIsIFdPRkYyT3V0KiBvdXQpIHsKKyAgc3RkOjp2ZWN0b3I8
dWludDhfdD4gb3V0cHV0KENvbXB1dGVPZmZzZXRUb0ZpcnN0VGFibGUoKmhkciksIDApOworCisg
IC8vIFJlLW9yZGVyIHRhYmxlcyBpbiBvdXRwdXQgKE9UU3BlYykgb3JkZXIKKyAgc3RkOjp2ZWN0
b3I8VGFibGU+IHNvcnRlZF90YWJsZXMoaGRyLT50YWJsZXMpOworICBpZiAoaGRyLT5oZWFkZXJf
dmVyc2lvbikgeworICAgIC8vIGNvbGxlY3Rpb247IHdlIGhhdmUgdG8gc29ydCB0aGUgdGFibGUg
b2Zmc2V0IHZlY3RvciBpbiBlYWNoIGZvbnQKKyAgICBmb3IgKGF1dG8mIHR0Y19mb250IDogaGRy
LT50dGNfZm9udHMpIHsKKyAgICAgIHN0ZDo6bWFwPHVpbnQzMl90LCB1aW50MTZfdD4gc29ydGVk
X2luZGV4X2J5X3RhZzsKKyAgICAgIGZvciAoYXV0byB0YWJsZV9pbmRleCA6IHR0Y19mb250LnRh
YmxlX2luZGljZXMpIHsKKyAgICAgICAgc29ydGVkX2luZGV4X2J5X3RhZ1toZHItPnRhYmxlc1t0
YWJsZV9pbmRleF0udGFnXSA9IHRhYmxlX2luZGV4OworICAgICAgfQorICAgICAgdWludDE2X3Qg
aW5kZXggPSAwOworICAgICAgZm9yIChhdXRvJiBpIDogc29ydGVkX2luZGV4X2J5X3RhZykgewor
ICAgICAgICB0dGNfZm9udC50YWJsZV9pbmRpY2VzW2luZGV4KytdID0gaS5zZWNvbmQ7CisgICAg
ICB9CisgICAgfQorICB9IGVsc2UgeworICAgIC8vIG5vbi1jb2xsZWN0aW9uOyB3ZSBjYW4ganVz
dCBzb3J0IHRoZSB0YWJsZXMKKyAgICBzdGQ6OnNvcnQoc29ydGVkX3RhYmxlcy5iZWdpbigpLCBz
b3J0ZWRfdGFibGVzLmVuZCgpKTsKKyAgfQorCiAgIC8vIFN0YXJ0IGJ1aWxkaW5nIHRoZSBmb250
CisgIHVpbnQ4X3QqIHJlc3VsdCA9ICZvdXRwdXRbMF07CiAgIHNpemVfdCBvZmZzZXQgPSAwOwot
ICBzaXplX3Qgb2Zmc2V0X3RhYmxlID0gMDsKLSAgaWYgKGhlYWRlcl92ZXJzaW9uKSB7CisgIGlm
IChoZHItPmhlYWRlcl92ZXJzaW9uKSB7CiAgICAgLy8gVFRDIGhlYWRlcgotICAgIG9mZnNldCA9
IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCBmbGF2b3IpOyAgLy8gVEFHIFRUQ1RhZwotICAgIG9m
ZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCBoZWFkZXJfdmVyc2lvbik7ICAvLyBGSVhF
RCBWZXJzaW9uCi0gICAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIHR0Y19mb250
cy5zaXplKCkpOyAgLy8gVUxPTkcgbnVtRm9udHMKKyAgICBvZmZzZXQgPSBTdG9yZVUzMihyZXN1
bHQsIG9mZnNldCwgaGRyLT5mbGF2b3IpOyAgLy8gVEFHIFRUQ1RhZworICAgIG9mZnNldCA9IFN0
b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCBoZHItPmhlYWRlcl92ZXJzaW9uKTsgIC8vIEZJWEVEIFZl
cnNpb24KKyAgICBvZmZzZXQgPSBTdG9yZVUzMihyZXN1bHQsIG9mZnNldCwgaGRyLT50dGNfZm9u
dHMuc2l6ZSgpKTsgIC8vIFVMT05HIG51bUZvbnRzCiAgICAgLy8gU3BhY2UgZm9yIFVMT05HIE9m
ZnNldFRhYmxlW251bUZvbnRzXSAoemVyb2VkIGluaXRpYWxseSkKLSAgICBvZmZzZXRfdGFibGUg
PSBvZmZzZXQ7ICAvLyBrZWVwIHN0YXJ0IG9mIG9mZnNldCB0YWJsZSBmb3IgbGF0ZXIKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHR0Y19mb250cy5zaXplKCk7IGkrKykgeworICAgIHNpemVf
dCBvZmZzZXRfdGFibGUgPSBvZmZzZXQ7ICAvLyBrZWVwIHN0YXJ0IG9mIG9mZnNldCB0YWJsZSBm
b3IgbGF0ZXIKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhkci0+dHRjX2ZvbnRzLnNpemUo
KTsgaSsrKSB7CiAgICAgICBvZmZzZXQgPSBTdG9yZVUzMihyZXN1bHQsIG9mZnNldCwgMCk7ICAv
LyB3aWxsIGZpbGwgcmVhbCB2YWx1ZXMgaW4gbGF0ZXIKICAgICB9CiAgICAgLy8gc3BhY2UgZm9y
IERTSUcgZmllbGRzIGZvciBoZWFkZXIgdjIKLSAgICBpZiAoaGVhZGVyX3ZlcnNpb24gPT0gMHgw
MDAyMDAwMCkgeworICAgIGlmIChoZHItPmhlYWRlcl92ZXJzaW9uID09IDB4MDAwMjAwMDApIHsK
ICAgICAgIG9mZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCAwKTsgIC8vIFVMT05HIHVs
RHNpZ1RhZwogICAgICAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIDApOyAgLy8g
VUxPTkcgdWxEc2lnTGVuZ3RoCiAgICAgICBvZmZzZXQgPSBTdG9yZVUzMihyZXN1bHQsIG9mZnNl
dCwgMCk7ICAvLyBVTE9ORyB1bERzaWdPZmZzZXQKICAgICB9CiAKICAgICAvLyB3cml0ZSBPZmZz
ZXQgVGFibGVzIGFuZCBzdG9yZSB0aGUgbG9jYXRpb24gb2YgZWFjaCBpbiBUVEMgSGVhZGVyCi0g
ICAgZm9yIChhdXRvJiB0dGNfZm9udCA6IHR0Y19mb250cykgeworICAgIG1ldGFkYXRhLT5mb250
X2luZm9zLnJlc2l6ZShoZHItPnR0Y19mb250cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaGRyLT50dGNfZm9udHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgIFR0Y0ZvbnQmIHR0
Y19mb250ID0gaGRyLT50dGNfZm9udHNbaV07CisKICAgICAgIC8vIHdyaXRlIE9mZnNldCBUYWJs
ZSBsb2NhdGlvbiBpbnRvIFRUQyBIZWFkZXIKICAgICAgIG9mZnNldF90YWJsZSA9IFN0b3JlVTMy
KHJlc3VsdCwgb2Zmc2V0X3RhYmxlLCBvZmZzZXQpOwogCkBAIC0xMjU4LDk5ICsxMjMyLDgyIEBA
IGJvb2wgQ29udmVydFdPRkYyVG9UVEYodWludDhfdCogcmVzdWx0LCBzaXplX3QgcmVzdWx0X2xl
bmd0aCwKICAgICAgIG9mZnNldCA9IFN0b3JlT2Zmc2V0VGFibGUocmVzdWx0LCBvZmZzZXQsIHR0
Y19mb250LmZsYXZvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRjX2ZvbnQu
dGFibGVfaW5kaWNlcy5zaXplKCkpOwogCi0gICAgICAvLyB3cml0ZSB0YWJsZSBlbnRyaWVzCiAg
ICAgICBmb3IgKGNvbnN0IGF1dG8gdGFibGVfaW5kZXggOiB0dGNfZm9udC50YWJsZV9pbmRpY2Vz
KSB7Ci0gICAgICAgIG9mZnNldCA9IFN0b3JlVGFibGVFbnRyeShyZXN1bHQsIHRhYmxlc1t0YWJs
ZV9pbmRleF0sIG9mZnNldCk7CisgICAgICAgIHVpbnQzMl90IHRhZyA9IGhkci0+dGFibGVzW3Rh
YmxlX2luZGV4XS50YWc7CisgICAgICAgIG1ldGFkYXRhLT5mb250X2luZm9zW2ldLnRhYmxlX2Vu
dHJ5X2J5X3RhZ1t0YWddID0gb2Zmc2V0OworICAgICAgICBvZmZzZXQgPSBTdG9yZVRhYmxlRW50
cnkocmVzdWx0LCBvZmZzZXQsIHRhZyk7CiAgICAgICB9CisKKyAgICAgIHR0Y19mb250LmhlYWRl
cl9jaGVja3N1bSA9IENvbXB1dGVVTG9uZ1N1bSgmb3V0cHV0W3R0Y19mb250LmRzdF9vZmZzZXRd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNl
dCAtIHR0Y19mb250LmRzdF9vZmZzZXQpOwogICAgIH0KICAgfSBlbHNlIHsKLSAgICBvZmZzZXQg
PSBTdG9yZU9mZnNldFRhYmxlKHJlc3VsdCwgb2Zmc2V0LCBmbGF2b3IsIG51bV90YWJsZXMpOwot
ICAgIGZvciAodWludDE2X3QgaSA9IDA7IGkgPCBudW1fdGFibGVzOyArK2kpIHsKLSAgICAgIG9m
ZnNldCA9IFN0b3JlVGFibGVFbnRyeShyZXN1bHQsIHNvcnRlZF90YWJsZXNbaV0sIG9mZnNldCk7
CisgICAgbWV0YWRhdGEtPmZvbnRfaW5mb3MucmVzaXplKDEpOworICAgIG9mZnNldCA9IFN0b3Jl
T2Zmc2V0VGFibGUocmVzdWx0LCBvZmZzZXQsIGhkci0+Zmxhdm9yLCBoZHItPm51bV90YWJsZXMp
OworICAgIGZvciAodWludDE2X3QgaSA9IDA7IGkgPCBoZHItPm51bV90YWJsZXM7ICsraSkgewor
ICAgICAgbWV0YWRhdGEtPmZvbnRfaW5mb3NbMF0udGFibGVfZW50cnlfYnlfdGFnW3NvcnRlZF90
YWJsZXNbaV0udGFnXSA9IG9mZnNldDsKKyAgICAgIG9mZnNldCA9IFN0b3JlVGFibGVFbnRyeShy
ZXN1bHQsIG9mZnNldCwgc29ydGVkX3RhYmxlc1tpXS50YWcpOwogICAgIH0KICAgfQogCi0gIHN0
ZDo6dmVjdG9yPHVpbnQ4X3Q+IHVuY29tcHJlc3NlZF9idWY7Ci0gIGNvbnN0IHVpbnQ4X3QqIHRy
YW5zZm9ybV9idWYgPSBOVUxMOwotICB1aW50NjRfdCB0b3RhbF9zaXplID0gMDsKLSAgZm9yICh1
aW50MTZfdCBpID0gMDsgaSA8IG51bV90YWJsZXM7ICsraSkgewotICAgIHRvdGFsX3NpemUgKz0g
dGFibGVzW2ldLnRyYW5zZm9ybV9sZW5ndGg7Ci0gICAgaWYgKFBSRURJQ1RfRkFMU0UodG90YWxf
c2l6ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpIHsKLSAgICAgIHJl
dHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9Ci0gIH0KLSAgdW5jb21wcmVz
c2VkX2J1Zi5yZXNpemUodG90YWxfc2l6ZSk7Ci0gIGNvbnN0IHVpbnQ4X3QqIHNyY19idWYgPSBk
YXRhICsgY29tcHJlc3NlZF9vZmZzZXQ7Ci0gIGlmIChQUkVESUNUX0ZBTFNFKCFXb2ZmMlVuY29t
cHJlc3MoJnVuY29tcHJlc3NlZF9idWZbMF0sIHRvdGFsX3NpemUsCi0gICAgICAgICAgICAgICAg
ICAgICAgIHNyY19idWYsIGNvbXByZXNzZWRfbGVuZ3RoKSkpIHsKKyAgaWYgKFBSRURJQ1RfRkFM
U0UoIW91dC0+V3JpdGUoJm91dHB1dFswXSwgb3V0cHV0LnNpemUoKSkpKSB7CiAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9CisgIG1ldGFkYXRhLT5oZWFkZXJfY2hl
Y2tzdW0gPSBDb21wdXRlVUxvbmdTdW0oJm91dHB1dFswXSwgb3V0cHV0LnNpemUoKSk7CisgIHJl
dHVybiB0cnVlOworfQogCi0gIC8vIHJvdW5kIDEsIGNvcHkgYWNyb3NzIGFsbCB0aGUgdW5tb2Rp
ZmllZCB0YWJsZXMKLSAgdHJhbnNmb3JtX2J1ZiA9ICZ1bmNvbXByZXNzZWRfYnVmWzBdOwotICBj
b25zdCB1aW50OF90KiBjb25zdCB0cmFuc2Zvcm1fYnVmX2VuZCA9ICZ1bmNvbXByZXNzZWRfYnVm
WzBdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB1bmNvbXBy
ZXNzZWRfYnVmLnNpemUoKTsKK30gIC8vIG5hbWVzcGFjZQogCi0gIC8vIFdlIHdpcGUgb3V0IHRo
ZSB2YWx1ZXMgYXMgdGhleSBnZXQgd3JpdHRlbiBpbnRvIHRoZSBmaW5hbCByZXN1bHQgdG8gZGVk
dXAKLSAgc3RkOjptYXA8dWludDMyX3QsIGNvbnN0IHVpbnQ4X3QqPiBzcmNfYnlfZGVzdDsKLSAg
Zm9yICh1aW50MTZfdCBpID0gMDsgaSA8IG51bV90YWJsZXM7ICsraSkgewotICAgIGNvbnN0IFRh
YmxlKiB0YWJsZSA9ICZ0YWJsZXNbaV07Ci0gICAgc2l6ZV90IHRyYW5zZm9ybV9sZW5ndGggPSB0
YWJsZS0+dHJhbnNmb3JtX2xlbmd0aDsKK3NpemVfdCBDb21wdXRlV09GRjJGaW5hbFNpemUoY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeworICBCdWZmZXIgZmlsZShkYXRhLCBs
ZW5ndGgpOworICB1aW50MzJfdCB0b3RhbF9sZW5ndGg7CiAKLSAgICBzcmNfYnlfZGVzdFt0YWJs
ZS0+ZHN0X29mZnNldF0gPSB0cmFuc2Zvcm1fYnVmOworICBpZiAoIWZpbGUuU2tpcCgxNikgfHwK
KyAgICAgICFmaWxlLlJlYWRVMzIoJnRvdGFsX2xlbmd0aCkpIHsKKyAgICByZXR1cm4gMDsKKyAg
fQorICByZXR1cm4gdG90YWxfbGVuZ3RoOworfQogCi0gICAgaWYgKFBSRURJQ1RfRkFMU0UodHJh
bnNmb3JtX2J1ZiArIHRyYW5zZm9ybV9sZW5ndGggPiB0cmFuc2Zvcm1fYnVmX2VuZCkpIHsKLSAg
ICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9Ci0gICAgdHJhbnNm
b3JtX2J1ZiArPSB0cmFuc2Zvcm1fbGVuZ3RoOworYm9vbCBDb252ZXJ0V09GRjJUb1RURih1aW50
OF90ICpyZXN1bHQsIHNpemVfdCByZXN1bHRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoKSB7CisgIFdPRkYyTWVtb3J5T3V0
IG91dChyZXN1bHQsIHJlc3VsdF9sZW5ndGgpOworICByZXR1cm4gQ29udmVydFdPRkYyVG9UVEYo
ZGF0YSwgbGVuZ3RoLCAmb3V0KTsKK30KKworYm9vbCBDb252ZXJ0V09GRjJUb1RURihjb25zdCB1
aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBXT0ZG
Mk91dCogb3V0KSB7CisgIFJlYnVpbGRNZXRhZGF0YSBtZXRhZGF0YTsKKyAgV09GRjJIZWFkZXIg
aGRyOworICBpZiAoIVJlYWRXT0ZGMkhlYWRlcihkYXRhLCBsZW5ndGgsICZoZHIpKSB7CisgICAg
cmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9CiAKLSAgZm9yICh1aW50MTZf
dCBpID0gMDsgaSA8IG51bV90YWJsZXM7ICsraSkgewotICAgIGNvbnN0IFRhYmxlKiB0YWJsZSA9
ICZ0YWJsZXNbaV07Ci0gICAgY29uc3Qgc2l6ZV90IHRyYW5zZm9ybV9sZW5ndGggPSB0YWJsZS0+
dHJhbnNmb3JtX2xlbmd0aDsKKyAgaWYgKCFXcml0ZUhlYWRlcnMoZGF0YSwgbGVuZ3RoLCAmbWV0
YWRhdGEsICZoZHIsIG91dCkpIHsKKyAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJF
KCk7CisgIH0KIAotICAgIGlmICgodGFibGUtPmZsYWdzICYga1dvZmYyRmxhZ3NUcmFuc2Zvcm0p
ICE9IGtXb2ZmMkZsYWdzVHJhbnNmb3JtKSB7Ci0gICAgICBpZiAoUFJFRElDVF9GQUxTRSh0cmFu
c2Zvcm1fbGVuZ3RoICE9IHRhYmxlLT5kc3RfbGVuZ3RoKSkgewotICAgICAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9Ci0gICAgICBpZiAoUFJFRElDVF9GQUxT
RShzdGF0aWNfY2FzdDx1aW50NjRfdD4odGFibGUtPmRzdF9vZmZzZXQgKwotICAgICAgICAgIHRy
YW5zZm9ybV9sZW5ndGgpID4gcmVzdWx0X2xlbmd0aCkpIHsKLSAgICAgICAgcmV0dXJuIEZPTlRf
Q09NUFJFU1NJT05fRkFJTFVSRSgpOwotICAgICAgfQotICAgICAgdHJhbnNmb3JtX2J1ZiA9IHNy
Y19ieV9kZXN0W3RhYmxlLT5kc3Rfb2Zmc2V0XTsKLSAgICAgIHNyY19ieV9kZXN0LmVyYXNlKHRh
YmxlLT5kc3Rfb2Zmc2V0KTsKLSAgICAgIHN0ZDo6bWVtY3B5KHJlc3VsdCArIHRhYmxlLT5kc3Rf
b2Zmc2V0LCB0cmFuc2Zvcm1fYnVmLCB0cmFuc2Zvcm1fbGVuZ3RoKTsKLSAgICB9CisgIGNvbnN0
IGZsb2F0IGNvbXByZXNzaW9uX3JhdGlvID0gKGZsb2F0KSBoZHIudW5jb21wcmVzc2VkX3NpemUg
LyBsZW5ndGg7CisgIGlmIChjb21wcmVzc2lvbl9yYXRpbyA+IGtNYXhQbGF1c2libGVDb21wcmVz
c2lvblJhdGlvKSB7CisjaWZkZWYgRk9OVF9DT01QUkVTU0lPTl9CSU4KKyAgICBmcHJpbnRmKHN0
ZGVyciwgIkltcGxhdXNpYmxlIGNvbXByZXNzaW9uIHJhdGlvICUuMDFmXG4iLCBjb21wcmVzc2lv
bl9yYXRpbyk7CisjZW5kaWYKKyAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7
CiAgIH0KIAotICAvLyByb3VuZCAyLCByZWNvbnN0cnVjdCB0cmFuc2Zvcm1lZCB0YWJsZXMKLSAg
aWYgKFBSRURJQ1RfRkFMU0UoaGVhZGVyX3ZlcnNpb24pKSB7Ci0gICAgLy8gUmVidWlsZCBjb2xs
ZWN0aW9uIGZvbnQgYnkgZm9udC4KLSAgICBzdGQ6OnZlY3RvcjxUYWJsZT4gZm9udF90YWJsZXM7
Ci0gICAgZm9yIChjb25zdCBhdXRvJiB0dGNfZm9udCA6IHR0Y19mb250cykgewotICAgICAgZm9u
dF90YWJsZXMucmVzaXplKHR0Y19mb250LnRhYmxlX2luZGljZXMuc2l6ZSgpKTsKLSAgICAgIGZv
ciAoYXV0byBpID0gMDsgaSA8IHR0Y19mb250LnRhYmxlX2luZGljZXMuc2l6ZSgpOyBpKyspIHsK
LSAgICAgICAgZm9udF90YWJsZXNbaV0gPSB0YWJsZXNbdHRjX2ZvbnQudGFibGVfaW5kaWNlc1tp
XV07Ci0gICAgICB9Ci0gICAgICBpZiAoUFJFRElDVF9GQUxTRSghUmVjb25zdHJ1Y3RUcmFuc2Zv
cm1lZEZvbnQoZm9udF90YWJsZXMsICZzcmNfYnlfZGVzdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsIHJlc3VsdF9sZW5ndGgpKSkg
ewotICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9Ci0g
ICAgfQotICB9IGVsc2UgewotICAgIGlmIChQUkVESUNUX0ZBTFNFKCFSZWNvbnN0cnVjdFRyYW5z
Zm9ybWVkRm9udCh0YWJsZXMsICZzcmNfYnlfZGVzdCwgcmVzdWx0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfbGVuZ3RoKSkpIHsKLSAg
ICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9CisgIGNvbnN0IHVp
bnQ4X3QqIHNyY19idWYgPSBkYXRhICsgaGRyLmNvbXByZXNzZWRfb2Zmc2V0OworICBzdGQ6OnZl
Y3Rvcjx1aW50OF90PiB1bmNvbXByZXNzZWRfYnVmKGhkci51bmNvbXByZXNzZWRfc2l6ZSk7Cisg
IGlmIChQUkVESUNUX0ZBTFNFKCFXb2ZmMlVuY29tcHJlc3MoJnVuY29tcHJlc3NlZF9idWZbMF0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRyLnVuY29tcHJlc3NlZF9z
aXplLCBzcmNfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkci5j
b21wcmVzc2VkX2xlbmd0aCkpKSB7CisgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVS
RSgpOwogICB9CiAKLSAgaWYgKGhlYWRlcl92ZXJzaW9uKSB7Ci0gICAgaWYgKFBSRURJQ1RfRkFM
U0UoCi0gICAgICAgICFGaXhDb2xsZWN0aW9uQ2hlY2tzdW1zKGhlYWRlcl92ZXJzaW9uLCB0YWJs
ZXMsIHR0Y19mb250cywgcmVzdWx0KSkpIHsKLSAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9O
X0ZBSUxVUkUoKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKFBSRURJQ1RfRkFMU0UoIUZp
eENoZWNrc3Vtcyhzb3J0ZWRfdGFibGVzLCByZXN1bHQpKSkgeworICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1ldGFkYXRhLmZvbnRfaW5mb3Muc2l6ZSgpOyBpKyspIHsKKyAgICBpZiAoUFJFRElD
VF9GQUxTRSghUmVjb25zdHJ1Y3RGb250KCZ1bmNvbXByZXNzZWRfYnVmWzBdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRyLnVuY29tcHJlc3NlZF9zaXplLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1ldGFkYXRhLCAmaGRyLCBpLCBv
dXQpKSkgewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0K
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2RlYy5o
IGIvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2RlYy5oCmluZGV4IDc0YmE3ZjUu
LmI4ODk4MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9k
ZWMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfZGVjLmgKQEAgLTE5
LDYgKzE5LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPGludHR5cGVzLmg+
CisjaW5jbHVkZSAiLi93b2ZmMl9vdXQuaCIKIAogbmFtZXNwYWNlIHdvZmYyIHsKIApAQCAtMjgs
OSArMjksMTYgQEAgc2l6ZV90IENvbXB1dGVXT0ZGMkZpbmFsU2l6ZShjb25zdCB1aW50OF90ICpk
YXRhLCBzaXplX3QgbGVuZ3RoKTsKIC8vIERlY29tcHJlc3NlcyB0aGUgZm9udCBpbnRvIHRoZSB0
YXJnZXQgYnVmZmVyLiBUaGUgcmVzdWx0X2xlbmd0aCBzaG91bGQKIC8vIGJlIHRoZSBzYW1lIGFz
IGRldGVybWluZWQgYnkgQ29tcHV0ZUZpbmFsU2l6ZSgpLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vz
c2Z1bAogLy8gZGVjb21wcmVzc2lvbi4KKy8vIERFUFJFQ0FURUQ7IHBsZWFzZSBwcmVmZXIgdGhl
IHZlcnNpb24gdGhhdCB0YWtlcyBhIFdPRkYyT3V0KgogYm9vbCBDb252ZXJ0V09GRjJUb1RURih1
aW50OF90ICpyZXN1bHQsIHNpemVfdCByZXN1bHRfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoKTsKIAorLy8gRGVjb21wcmVz
c2VzIHRoZSBmb250IGludG8gb3V0LiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4KKy8vIFdvcmtz
IGV2ZW4gaWYgV09GRjJIZWFkZXIgdG90YWxTZm50U2l6ZSBpcyB3cm9uZy4KKy8vIFBsZWFzZSBw
cmVmZXIgdGhpcyBBUEkuCitib29sIENvbnZlcnRXT0ZGMlRvVFRGKGNvbnN0IHVpbnQ4X3QgKmRh
dGEsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIFdPRkYyT3V0KiBvdXQp
OworCiB9IC8vIG5hbWVzcGFjZSB3b2ZmMgogCiAjZW5kaWYgIC8vIFdPRkYyX1dPRkYyX0RFQ19I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2RlY29tcHJl
c3MuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfZGVjb21wcmVzcy5jYwpp
bmRleCA3NjY4YzRlLi5mMjljNzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2Zm
Mi9zcmMvd29mZjJfZGVjb21wcmVzcy5jYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9z
cmMvd29mZjJfZGVjb21wcmVzcy5jYwpAQCAtMTcsMTAgKzE3LDEwIEBACiAKICNpbmNsdWRlIDxz
dHJpbmc+CiAKLQotI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICIuL2ZpbGUuaCIKICNpbmNs
dWRlICIuL3dvZmYyX2RlYy5oIgogCisKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikg
ewogICB1c2luZyBzdGQ6OnN0cmluZzsKIApAQCAtMzEsMjQgKzMxLDE4IEBAIGludCBtYWluKGlu
dCBhcmdjLCBjaGFyICoqYXJndikgewogCiAgIHN0cmluZyBmaWxlbmFtZShhcmd2WzFdKTsKICAg
c3RyaW5nIG91dGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyKDAsIGZpbGVuYW1lLmZpbmRfbGFz
dF9vZigiLiIpKSArICIudHRmIjsKLSAgZnByaW50ZihzdGRvdXQsICJQcm9jZXNzaW5nICVzID0+
ICVzXG4iLAotICAgIGZpbGVuYW1lLmNfc3RyKCksIG91dGZpbGVuYW1lLmNfc3RyKCkpOworCiAg
IHN0cmluZyBpbnB1dCA9IHdvZmYyOjpHZXRGaWxlQ29udGVudChmaWxlbmFtZSk7CisgIGNvbnN0
IHVpbnQ4X3QqIHJhd19pbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlu
cHV0LmRhdGEoKSk7CisgIHN0cmluZyBvdXRwdXQoc3RkOjptaW4od29mZjI6OkNvbXB1dGVXT0ZG
MkZpbmFsU2l6ZShyYXdfaW5wdXQsIGlucHV0LnNpemUoKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgd29mZjI6OmtEZWZhdWx0TWF4U2l6ZSksIDApOworICB3b2ZmMjo6V09GRjJTdHJpbmdP
dXQgb3V0KCZvdXRwdXQpOwogCi0gIHNpemVfdCBkZWNvbXByZXNzZWRfc2l6ZSA9IHdvZmYyOjpD
b21wdXRlV09GRjJGaW5hbFNpemUoCi0gICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCkpOwotICBzdHJpbmcgb3V0cHV0KGRlY29t
cHJlc3NlZF9zaXplLCAwKTsKLSAgY29uc3QgYm9vbCBvayA9IHdvZmYyOjpDb252ZXJ0V09GRjJU
b1RURigKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZvdXRwdXRbMF0pLCBkZWNv
bXByZXNzZWRfc2l6ZSwKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlu
cHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSk7CisgIGNvbnN0IGJvb2wgb2sgPSB3b2ZmMjo6Q29u
dmVydFdPRkYyVG9UVEYocmF3X2lucHV0LCBpbnB1dC5zaXplKCksICZvdXQpOwogCi0gIGlmICgh
b2spIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkRlY29tcHJlc3Npb24gZmFpbGVkXG4iKTsKLSAg
ICByZXR1cm4gMTsKKyAgaWYgKG9rKSB7CisgICAgd29mZjI6OlNldEZpbGVDb250ZW50cyhvdXRm
aWxlbmFtZSwgb3V0cHV0LmJlZ2luKCksCisgICAgICAgIG91dHB1dC5iZWdpbigpICsgb3V0LlNp
emUoKSk7CiAgIH0KLQotICB3b2ZmMjo6U2V0RmlsZUNvbnRlbnRzKG91dGZpbGVuYW1lLCBvdXRw
dXQpOwotCi0gIHJldHVybiAwOworICByZXR1cm4gb2sgPyAwIDogMTsKIH0KLQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2VuYy5jYyBiL1NvdXJjZS9UaGly
ZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9lbmMuY2MKaW5kZXggNTI1NWFhNS4uZDEwMGFkNSAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2VuYy5jYworKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfZW5jLmNjCkBAIC0yMyw4ICsyMyw4IEBA
CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgIi4vY29t
cHJlc3Nvci5oIgogI2luY2x1ZGUgIi4vYnVmZmVyLmgiCi0jaW5jbHVkZSAiLi9lbmNvZGUuaCIK
ICNpbmNsdWRlICIuL2ZvbnQuaCIKICNpbmNsdWRlICIuL25vcm1hbGl6ZS5oIgogI2luY2x1ZGUg
Ii4vcm91bmQuaCIKQEAgLTQ3LDYgKzQ3LDcgQEAgdXNpbmcgc3RkOjp2ZWN0b3I7CiBjb25zdCBz
aXplX3Qga1dvZmYySGVhZGVyU2l6ZSA9IDQ4OwogY29uc3Qgc2l6ZV90IGtXb2ZmMkVudHJ5U2l6
ZSA9IDIwOwogCisKIGJvb2wgQ29tcHJlc3MoY29uc3QgdWludDhfdCogZGF0YSwgY29uc3Qgc2l6
ZV90IGxlbiwKICAgICAgICAgICAgICAgdWludDhfdCogcmVzdWx0LCB1aW50MzJfdCogcmVzdWx0
X2xlbiwKICAgICAgICAgICAgICAgYnJvdGxpOjpCcm90bGlQYXJhbXM6Ok1vZGUgbW9kZSwgaW50
IHF1YWxpdHkpIHsKQEAgLTEyMCw3ICsxMjEsNyBAQCBzaXplX3QgQ29tcHV0ZVdvZmYyTGVuZ3Ro
KGNvbnN0IEZvbnRDb2xsZWN0aW9uJiBmb250X2NvbGxlY3Rpb24sCiAgIH0KIAogICAvLyBmb3Ig
Y29sbGVjdGlvbnMgb25seSwgY29sbGVjdGlvbiB0YWJsZXMKLSAgaWYgKGZvbnRfY29sbGVjdGlv
bi5mb250cy5zaXplKCkgPiAxKSB7CisgIGlmIChmb250X2NvbGxlY3Rpb24uZmxhdm9yID09IGtU
dGNGb250Rmxhdm9yKSB7CiAgICAgc2l6ZSArPSA0OyAgLy8gVUludDMyIFZlcnNpb24gb2YgVFRD
IEhlYWRlcgogICAgIHNpemUgKz0gU2l6ZTI1NVVTaG9ydChmb250X2NvbGxlY3Rpb24uZm9udHMu
c2l6ZSgpKTsgIC8vIDI1NVVJbnQxNiBudW1Gb250cwogCkBAIC0xNDcsMTQgKzE0OCw2IEBAIHNp
emVfdCBDb21wdXRlV29mZjJMZW5ndGgoY29uc3QgRm9udENvbGxlY3Rpb24mIGZvbnRfY29sbGVj
dGlvbiwKICAgcmV0dXJuIHNpemU7CiB9CiAKLXNpemVfdCBDb21wdXRlVFRGTGVuZ3RoKGNvbnN0
IHN0ZDo6dmVjdG9yPFRhYmxlPiYgdGFibGVzKSB7Ci0gIHNpemVfdCBzaXplID0gMTIgKyAxNiAq
IHRhYmxlcy5zaXplKCk7ICAvLyBzZm50IGhlYWRlcgotICBmb3IgKGNvbnN0IGF1dG8mIHRhYmxl
IDogdGFibGVzKSB7Ci0gICAgc2l6ZSArPSBSb3VuZDQodGFibGUuc3JjX2xlbmd0aCk7Ci0gIH0K
LSAgcmV0dXJuIHNpemU7Ci19Ci0KIHNpemVfdCBDb21wdXRlVW5jb21wcmVzc2VkTGVuZ3RoKGNv
bnN0IEZvbnQmIGZvbnQpIHsKICAgLy8gc2ZudCBoZWFkZXIgKyBvZmZzZXQgdGFibGUKICAgc2l6
ZV90IHNpemUgPSAxMiArIDE2ICogZm9udC5udW1fdGFibGVzOwpAQCAtMTY4LDcgKzE2MSw3IEBA
IHNpemVfdCBDb21wdXRlVW5jb21wcmVzc2VkTGVuZ3RoKGNvbnN0IEZvbnQmIGZvbnQpIHsKIH0K
IAogc2l6ZV90IENvbXB1dGVVbmNvbXByZXNzZWRMZW5ndGgoY29uc3QgRm9udENvbGxlY3Rpb24m
IGZvbnRfY29sbGVjdGlvbikgewotICBpZiAoZm9udF9jb2xsZWN0aW9uLmZvbnRzLnNpemUoKSA9
PSAxKSB7CisgIGlmIChmb250X2NvbGxlY3Rpb24uZmxhdm9yICE9IGtUdGNGb250Rmxhdm9yKSB7
CiAgICAgcmV0dXJuIENvbXB1dGVVbmNvbXByZXNzZWRMZW5ndGgoZm9udF9jb2xsZWN0aW9uLmZv
bnRzWzBdKTsKICAgfQogICBzaXplX3Qgc2l6ZSA9IENvbGxlY3Rpb25IZWFkZXJTaXplKGZvbnRf
Y29sbGVjdGlvbi5oZWFkZXJfdmVyc2lvbiwKQEAgLTI3OSwyMCArMjcyLDIyIEBAIGJvb2wgQ29u
dmVydFRURlRvV09GRjIoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbmd0aCwKICAgc3Rk
Ojp2ZWN0b3I8dWludDhfdD4gY29tcHJlc3Npb25fYnVmKGNvbXByZXNzaW9uX2J1ZmZlcl9zaXpl
KTsKICAgdWludDMyX3QgdG90YWxfY29tcHJlc3NlZF9sZW5ndGggPSBjb21wcmVzc2lvbl9idWZm
ZXJfc2l6ZTsKIAotICAvLyBDb2xsZWN0IGFsbCB0cmFuc2Zvcm1lZCBkYXRhIGludG8gb25lIHBs
YWNlLgorICAvLyBDb2xsZWN0IGFsbCB0cmFuc2Zvcm1lZCBkYXRhIGludG8gb25lIHBsYWNlIGlu
IG91dHB1dCBvcmRlci4KICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gdHJhbnNmb3JtX2J1Zih0b3Rh
bF90cmFuc2Zvcm1fbGVuZ3RoKTsKICAgc2l6ZV90IHRyYW5zZm9ybV9vZmZzZXQgPSAwOwogICBm
b3IgKGNvbnN0IGF1dG8mIGZvbnQgOiBmb250X2NvbGxlY3Rpb24uZm9udHMpIHsKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIGkgOiBmb250LnRhYmxlcykgewotICAgICAgY29uc3QgRm9udDo6VGFibGUq
IHRhYmxlID0gZm9udC5GaW5kVGFibGUoaS5zZWNvbmQudGFnIF4gMHg4MDgwODA4MCk7Ci0gICAg
ICBpZiAoaS5zZWNvbmQuSXNSZXVzZWQoKSkgY29udGludWU7Ci0gICAgICBpZiAoaS5zZWNvbmQu
dGFnICYgMHg4MDgwODA4MCkgY29udGludWU7CisgICAgZm9yIChjb25zdCBhdXRvIHRhZyA6IGZv
bnQuT3V0cHV0T3JkZXJlZFRhZ3MoKSkgeworICAgICAgY29uc3QgRm9udDo6VGFibGUmIG9yaWdp
bmFsID0gZm9udC50YWJsZXMuYXQodGFnKTsKKyAgICAgIGlmIChvcmlnaW5hbC5Jc1JldXNlZCgp
KSBjb250aW51ZTsKKyAgICAgIGlmICh0YWcgJiAweDgwODA4MDgwKSBjb250aW51ZTsKKyAgICAg
IGNvbnN0IEZvbnQ6OlRhYmxlKiB0YWJsZV90b19zdG9yZSA9IGZvbnQuRmluZFRhYmxlKHRhZyBe
IDB4ODA4MDgwODApOworICAgICAgaWYgKHRhYmxlX3RvX3N0b3JlID09IE5VTEwpIHRhYmxlX3Rv
X3N0b3JlID0gJm9yaWdpbmFsOwogCi0gICAgICBpZiAodGFibGUgPT0gTlVMTCkgdGFibGUgPSAm
aS5zZWNvbmQ7Ci0gICAgICBTdG9yZUJ5dGVzKHRhYmxlLT5kYXRhLCB0YWJsZS0+bGVuZ3RoLAor
ICAgICAgU3RvcmVCeXRlcyh0YWJsZV90b19zdG9yZS0+ZGF0YSwgdGFibGVfdG9fc3RvcmUtPmxl
bmd0aCwKICAgICAgICAgICAgICAgICAgJnRyYW5zZm9ybV9vZmZzZXQsICZ0cmFuc2Zvcm1fYnVm
WzBdKTsKICAgICB9CiAgIH0KKwogICAvLyBDb21wcmVzcyBhbGwgdHJhbnNmb3JtZWQgZGF0YSBp
biBvbmUgc3RyZWFtLgogICBpZiAoIVdvZmYyQ29tcHJlc3ModHJhbnNmb3JtX2J1Zi5kYXRhKCks
IHRvdGFsX3RyYW5zZm9ybV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAmY29tcHJlc3Np
b25fYnVmWzBdLApAQCAtMzc3LDEzICszNzIsMTIgQEAgYm9vbCBDb252ZXJ0VFRGVG9XT0ZGMihj
b25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoLAogICB9CiAgICpyZXN1bHRfbGVuZ3Ro
ID0gd29mZjJfbGVuZ3RoOwogCi0gIGNvbnN0IEZvbnQmIGZpcnN0X2ZvbnQgPSBmb250X2NvbGxl
Y3Rpb24uZm9udHNbMF07CiAgIHNpemVfdCBvZmZzZXQgPSAwOwogCiAgIC8vIHN0YXJ0IG9mIHdv
ZmYyIGhlYWRlciAoaHR0cDovL3d3dy53My5vcmcvVFIvV09GRjIvI3dvZmYyMEhlYWRlcikKICAg
U3RvcmVVMzIoa1dvZmYyU2lnbmF0dXJlLCAmb2Zmc2V0LCByZXN1bHQpOwotICBpZiAoZm9udF9j
b2xsZWN0aW9uLmZvbnRzLnNpemUoKSA9PSAxKSB7Ci0gICAgU3RvcmVVMzIoZmlyc3RfZm9udC5m
bGF2b3IsICZvZmZzZXQsIHJlc3VsdCk7CisgIGlmIChmb250X2NvbGxlY3Rpb24uZmxhdm9yICE9
IGtUdGNGb250Rmxhdm9yKSB7CisgICAgU3RvcmVVMzIoZm9udF9jb2xsZWN0aW9uLmZvbnRzWzBd
LmZsYXZvciwgJm9mZnNldCwgcmVzdWx0KTsKICAgfSBlbHNlIHsKICAgICBTdG9yZVUzMihrVHRj
Rm9udEZsYXZvciwgJm9mZnNldCwgcmVzdWx0KTsKICAgfQpAQCAtMzk0LDkgKzM4OCw5IEBAIGJv
b2wgQ29udmVydFRURlRvV09GRjIoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbmd0aCwK
ICAgU3RvcmVVMzIoQ29tcHV0ZVVuY29tcHJlc3NlZExlbmd0aChmb250X2NvbGxlY3Rpb24pLCAm
b2Zmc2V0LCByZXN1bHQpOwogICBTdG9yZVUzMih0b3RhbF9jb21wcmVzc2VkX2xlbmd0aCwgJm9m
ZnNldCwgcmVzdWx0KTsgIC8vIHRvdGFsQ29tcHJlc3NlZFNpemUKIAotICAvLyBUT0RPKHVzZXIp
OiBpcyBhbHdheXMgdGFraW5nIHRoaXMgZnJvbSB0aGUgZmlyc3QgdGFibGVzIGhlYWQgT0s/Ci0g
IC8vIGZvbnQgcmV2aXNpb24KLSAgU3RvcmVCeXRlcyhmaXJzdF9mb250LkZpbmRUYWJsZShrSGVh
ZFRhYmxlVGFnKS0+ZGF0YSArIDQsIDQsICZvZmZzZXQsIHJlc3VsdCk7CisgIC8vIExldCdzIGp1
c3QgYWxsIGJlIHYxLjAKKyAgU3RvcmUxNigxLCAmb2Zmc2V0LCByZXN1bHQpOyAgLy8gbWFqb3JW
ZXJzaW9uCisgIFN0b3JlMTYoMCwgJm9mZnNldCwgcmVzdWx0KTsgIC8vIG1pbm9yVmVyc2lvbgog
ICBpZiAoY29tcHJlc3NlZF9tZXRhZGF0YV9idWZfbGVuZ3RoID4gMCkgewogICAgIFN0b3JlVTMy
KHdvZmYyX2xlbmd0aCAtIGNvbXByZXNzZWRfbWV0YWRhdGFfYnVmX2xlbmd0aCwKICAgICAgICAg
ICAgICAmb2Zmc2V0LCByZXN1bHQpOyAgLy8gbWV0YU9mZnNldApAQCAtNDE4LDcgKzQxMiw3IEBA
IGJvb2wgQ29udmVydFRURlRvV09GRjIoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbmd0
aCwKICAgfQogCiAgIC8vIGZvciBjb2xsZWN0aW9ucyBvbmx5LCBjb2xsZWN0aW9uIHRhYmxlIGRp
cmVjdG9yeQotICBpZiAoZm9udF9jb2xsZWN0aW9uLmZvbnRzLnNpemUoKSA+IDEpIHsKKyAgaWYg
KGZvbnRfY29sbGVjdGlvbi5mbGF2b3IgPT0ga1R0Y0ZvbnRGbGF2b3IpIHsKICAgICBTdG9yZVUz
Mihmb250X2NvbGxlY3Rpb24uaGVhZGVyX3ZlcnNpb24sICZvZmZzZXQsIHJlc3VsdCk7CiAgICAg
U3RvcmUyNTVVU2hvcnQoZm9udF9jb2xsZWN0aW9uLmZvbnRzLnNpemUoKSwgJm9mZnNldCwgcmVz
dWx0KTsKICAgICBmb3IgKGNvbnN0IEZvbnQmIGZvbnQgOiBmb250X2NvbGxlY3Rpb24uZm9udHMp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9vdXQuY2Mg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmNjCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ODIzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmNjCkBAIC0wLDAgKzEsNzMgQEAKKy8vIENv
cHlyaWdodCAyMDE0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGlj
ZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNl
Iik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdp
dGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2Ug
YXQKKy8vCisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8v
CisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy
aXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0
cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUg
dGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lv
bnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vCisvLyBPdXRwdXQg
YnVmZmVyIGZvciBXT0ZGMiBkZWNvbXByZXNzaW9uLgorCisjaW5jbHVkZSAiLi93b2ZmMl9vdXQu
aCIKKworbmFtZXNwYWNlIHdvZmYyIHsKKworV09GRjJTdHJpbmdPdXQ6OldPRkYyU3RyaW5nT3V0
KHN0cmluZyogYnVmKQorICA6IGJ1Zl8oYnVmKSwKKyAgICBtYXhfc2l6ZV8oa0RlZmF1bHRNYXhT
aXplKSwKKyAgICBvZmZzZXRfKDApIHt9CisKK2Jvb2wgV09GRjJTdHJpbmdPdXQ6OldyaXRlKGNv
bnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IG4pIHsKKyAgcmV0dXJuIFdyaXRlKGJ1Ziwgb2Zmc2V0Xywg
bik7Cit9CisKK2Jvb2wgV09GRjJTdHJpbmdPdXQ6OldyaXRlKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6
ZV90IG9mZnNldCwgc2l6ZV90IG4pIHsKKyAgaWYgKG9mZnNldCA+IG1heF9zaXplXyB8fCBuID4g
bWF4X3NpemVfIC0gb2Zmc2V0KSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGlmIChvZmZz
ZXQgPT0gYnVmXy0+c2l6ZSgpKSB7CisgICAgYnVmXy0+YXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihidWYpLCBuKTsKKyAgfSBlbHNlIHsKKyAgICBpZiAob2Zmc2V0ICsgbiA+IGJ1Zl8t
PnNpemUoKSkgeworICAgICAgYnVmXy0+YXBwZW5kKG9mZnNldCArIG4gLSBidWZfLT5zaXplKCks
IDApOworICAgIH0KKyAgICBidWZfLT5yZXBsYWNlKG9mZnNldCwgbiwgc3RhdGljX2Nhc3Q8Y29u
c3QgY2hhcio+KGJ1ZiksIG4pOworICB9CisgIG9mZnNldF8gPSBzdGQ6Om1heChvZmZzZXRfLCBv
ZmZzZXQgKyBuKTsKKworICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXT0ZGMlN0cmluZ091dDo6
U2V0TWF4U2l6ZShzaXplX3QgbWF4X3NpemUpIHsKKyAgbWF4X3NpemVfID0gbWF4X3NpemU7Cisg
IGlmIChvZmZzZXRfID4gbWF4X3NpemVfKSB7CisgICAgb2Zmc2V0XyA9IG1heF9zaXplXzsKKyAg
fQorfQorCitXT0ZGMk1lbW9yeU91dDo6V09GRjJNZW1vcnlPdXQodWludDhfdCogYnVmLCBzaXpl
X3QgYnVmX3NpemUpCisgIDogYnVmXyhidWYpLAorICAgIGJ1Zl9zaXplXyhidWZfc2l6ZSksCisg
ICAgb2Zmc2V0XygwKSB7fQorCitib29sIFdPRkYyTWVtb3J5T3V0OjpXcml0ZShjb25zdCB2b2lk
ICpidWYsIHNpemVfdCBuKSB7CisgIHJldHVybiBXcml0ZShidWYsIG9mZnNldF8sIG4pOworfQor
Citib29sIFdPRkYyTWVtb3J5T3V0OjpXcml0ZShjb25zdCB2b2lkICpidWYsIHNpemVfdCBvZmZz
ZXQsIHNpemVfdCBuKSB7CisgIGlmIChvZmZzZXQgPiBidWZfc2l6ZV8gfHwgbiA+IGJ1Zl9zaXpl
XyAtIG9mZnNldCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBzdGQ6Om1lbWNweShidWZf
ICsgb2Zmc2V0LCBidWYsIG4pOworICBvZmZzZXRfID0gc3RkOjptYXgob2Zmc2V0Xywgb2Zmc2V0
ICsgbik7CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIHdvZmYyCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYzk1NmFmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L3dvZmYyL3NyYy93b2ZmMl9vdXQuaApAQCAtMCwwICsxLDExNCBAQAorLy8gQ29weXJpZ2h0IDIw
MTYgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRl
ciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlv
dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGlj
ZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8v
IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVz
cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m
dHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5z
ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8v
IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8KKy8vIE91dHB1dCBidWZmZXIgZm9y
IFdPRkYyIGRlY29tcHJlc3Npb24uCisKKy8vIENvcHlyaWdodCAyMDE2IEdvb2dsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNl
bnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyBodHRwOi8vd3d3LmFwYWNo
ZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBw
bGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmli
dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lT
LAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhl
ciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZp
YyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRl
ciB0aGUgTGljZW5zZS4KKy8vCisvLyBPdXRwdXQgYnVmZmVyIGZvciBXT0ZGMiBkZWNvbXByZXNz
aW9uLgorCisjaWZuZGVmIFdPRkYyX1dPRkYyX09VVF9IXworI2RlZmluZSBXT0ZGMl9XT0ZGMl9P
VVRfSF8KKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1
ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSAiLi9wb3J0LmgiCisKK25h
bWVzcGFjZSB3b2ZmMiB7CisKKy8vIFN1Z2dlc3RlZCBtYXggc2l6ZSBmb3Igb3V0cHV0LgorY29u
c3Qgc2l6ZV90IGtEZWZhdWx0TWF4U2l6ZSA9IDMwICogMTAyNCAqIDEwMjQ7CisKK3VzaW5nIHN0
ZDo6c3RyaW5nOworCisKKy8qKgorICogT3V0cHV0IGludGVyZmFjZSBmb3IgdGhlIHdvZmYyIGRl
Y29kaW5nLgorICoKKyAqIFdyaXRlcyB0byBhcmJpdHJhcnkgb2Zmc2V0cyBhcmUgc3VwcG9ydGVk
IHRvIGZhY2lsaXRhdGUgdXBkYXRpbmcgb2Zmc2V0CisgKiB0YWJsZSBhbmQgY2hlY2tzdW1zIGFm
dGVyIHRhYmxlcyBhcmUgcmVhZHkuIFJlYWRpbmcgdGhlIGN1cnJlbnQgc2l6ZSBpcworICogc3Vw
cG9ydGVkIHNvIGEgJ2xvY2EnIHRhYmxlIGNhbiBiZSBidWlsdCB1cCB3aGlsZSB3cml0aW5nIGds
eXBocy4KKyAqCisgKiBCeSBkZWZhdWx0IGxpbWl0cyBzaXplIHRvIGtEZWZhdWx0TWF4U2l6ZS4K
KyAqLworY2xhc3MgV09GRjJPdXQgeworIHB1YmxpYzoKKyAgdmlydHVhbCB+V09GRjJPdXQodm9p
ZCkge30KKworICAvLyBBcHBlbmQgbiBieXRlcyBvZiBkYXRhIGZyb20gYnVmLgorICAvLyBSZXR1
cm4gdHJ1ZSBpZiBhbGwgd3JpdHRlbiwgZmFsc2Ugb3RoZXJ3aXNlLgorICB2aXJ0dWFsIGJvb2wg
V3JpdGUoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbikgPSAwOworCisgIC8vIFdyaXRlIG4gYnl0
ZXMgb2YgZGF0YSBmcm9tIGJ1ZiBhdCBvZmZzZXQuCisgIC8vIFJldHVybiB0cnVlIGlmIGFsbCB3
cml0dGVuLCBmYWxzZSBvdGhlcndpc2UuCisgIHZpcnR1YWwgYm9vbCBXcml0ZShjb25zdCB2b2lk
ICpidWYsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBuKSA9IDA7CisKKyAgdmlydHVhbCBzaXplX3Qg
U2l6ZSgpID0gMDsKK307CisKKy8qKgorICogRXhwYW5kaW5nIG1lbW9yeSBibG9jayBmb3Igd29m
ZjIgb3V0LiBCeSBkZWZhdWx0IGxpbWl0ZWQgdG8ga0RlZmF1bHRNYXhTaXplLgorICovCitjbGFz
cyBXT0ZGMlN0cmluZ091dCA6IHB1YmxpYyBXT0ZGMk91dCB7CisgcHVibGljOgorICAvLyBDcmVh
dGUgYSB3cml0ZXIgdGhhdCB3cml0ZXMgaXRzIGRhdGEgdG8gYnVmLgorICAvLyBidWYtPnNpemUo
KSB3aWxsIGdyb3cgdG8gYXQgbW9zdCBtYXhfc2l6ZQorICAvLyBidWYgbWF5IGJlIHNpemVkIChl
LmcuIHVzaW5nIEVzdGltYXRlV09GRjJGaW5hbFNpemUpIG9yIGVtcHR5LgorICBleHBsaWNpdCBX
T0ZGMlN0cmluZ091dChzdHJpbmcqIGJ1Zik7CisKKyAgYm9vbCBXcml0ZShjb25zdCB2b2lkICpi
dWYsIHNpemVfdCBuKSBvdmVycmlkZTsKKyAgYm9vbCBXcml0ZShjb25zdCB2b2lkICpidWYsIHNp
emVfdCBvZmZzZXQsIHNpemVfdCBuKSBvdmVycmlkZTsKKyAgc2l6ZV90IFNpemUoKSBvdmVycmlk
ZSB7IHJldHVybiBvZmZzZXRfOyB9CisgIHNpemVfdCBNYXhTaXplKCkgeyByZXR1cm4gbWF4X3Np
emVfOyB9CisgIHZvaWQgU2V0TWF4U2l6ZShzaXplX3QgbWF4X3NpemUpOworIHByaXZhdGU6Cisg
IHN0cmluZyogYnVmXzsKKyAgc2l6ZV90IG1heF9zaXplXzsKKyAgc2l6ZV90IG9mZnNldF87Cit9
OworCisvKioKKyAqIEZpeGVkIG1lbW9yeSBibG9jayBmb3Igd29mZjIgb3V0LgorICovCitjbGFz
cyBXT0ZGMk1lbW9yeU91dCA6IHB1YmxpYyBXT0ZGMk91dCB7CisgcHVibGljOgorICAvLyBDcmVh
dGUgYSB3cml0ZXIgdGhhdCB3cml0ZXMgaXRzIGRhdGEgdG8gYnVmLgorICBXT0ZGMk1lbW9yeU91
dCh1aW50OF90KiBidWYsIHNpemVfdCBidWZfc2l6ZSk7CisKKyAgYm9vbCBXcml0ZShjb25zdCB2
b2lkICpidWYsIHNpemVfdCBuKSBvdmVycmlkZTsKKyAgYm9vbCBXcml0ZShjb25zdCB2b2lkICpi
dWYsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBuKSBvdmVycmlkZTsKKyAgc2l6ZV90IFNpemUoKSBv
dmVycmlkZSB7IHJldHVybiBvZmZzZXRfOyB9CisgcHJpdmF0ZToKKyAgdWludDhfdCogYnVmXzsK
KyAgc2l6ZV90IGJ1Zl9zaXplXzsKKyAgc2l6ZV90IG9mZnNldF87Cit9OworCit9IC8vIG5hbWVz
cGFjZSB3b2ZmMgorCisjZW5kaWYgIC8vIFdPRkYyX1dPRkYyX09VVF9IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDgwYmU2MTAuLjFlZjlhOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxNi0wOS0y
NyAgS2hhbGVkIEhvc255ICA8a2hhbGVkaG9zbnlAZWdsdWcub3JnPgorCisgICAgICAgIFVzZSBu
ZXcgd29mZjIgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjI2MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXT0ZGMlZlY3Rvck91dDo6V09GRjJWZWN0b3JPdXQpOgorICAgICAgICAoV2ViQ29yZTo6V09G
RjJWZWN0b3JPdXQ6OldyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldPRkYyVmVjdG9yT3V0OjpT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRXT0ZGVG9TZm50KToKKwogMjAxNi0wOS0y
NyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgW0ZldGNoIEFQ
SV0gUmVtb3ZlIFJlYWRhYmxlU3RyZWFtU291cmNlIGZpcnN0UmVhZENhbGxiYWNrCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKaW5k
ZXggNDIwZmE0OC4uZjUwZTI2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcApAQCAtOTAsNiArOTAsNDUgQEAgYm9vbCBpc1dP
RkYoU2hhcmVkQnVmZmVyJiBidWZmZXIpCiAjZW5kaWYKIH0KIAorI2lmIFVTRShXT0ZGMikKK2Ns
YXNzIFdPRkYyVmVjdG9yT3V0IDogcHVibGljIHdvZmYyOjpXT0ZGMk91dCB7CitwdWJsaWM6Cisg
ICAgV09GRjJWZWN0b3JPdXQoVmVjdG9yPGNoYXI+JiB2ZWN0b3IpCisgICAgICAgIDogbV92ZWN0
b3IodmVjdG9yKQorICAgICAgICAsIG1fc2l6ZSgwKQorICAgIHsgfQorCisgICAgYm9vbCBXcml0
ZShjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbikKKyAgICB7CisgICAgICAgIHJldHVybiBXcml0
ZShkYXRhLCBtX3NpemUsIG4pOworICAgICAgICBpZiAoIW1fdmVjdG9yLnRyeVJlc2VydmVDYXBh
Y2l0eShtX3NpemUgKyBuKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV92
ZWN0b3IuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwgbik7CisgICAgICAg
IG1fc2l6ZSArPSBuOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIFdy
aXRlKGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBuKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX3ZlY3Rvci50cnlSZXNlcnZlQ2FwYWNpdHkobV9zaXplICsgbikpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fdmVjdG9yLnJlbW92ZShvZmZzZXQsIG4p
OworICAgICAgICBtX3ZlY3Rvci5pbnNlcnQob2Zmc2V0LCBzdGF0aWNfY2FzdDxjb25zdCBjaGFy
Kj4oZGF0YSksIG4pOworICAgICAgICBtX3NpemUgPSBzdGQ6Om1heChtX3NpemUsIG9mZnNldCAr
IG4pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzaXplX3QgU2l6ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9zaXplOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0
b3I8Y2hhcj4mIG1fdmVjdG9yOworICAgIHNpemVfdCBtX3NpemU7Cit9OworI2VuZGlmCisKIGJv
b2wgY29udmVydFdPRkZUb1NmbnQoU2hhcmVkQnVmZmVyJiB3b2ZmLCBWZWN0b3I8Y2hhcj4mIHNm
bnQpCiB7CiAgICAgQVNTRVJUX0FSRyhzZm50LCBzZm50LmlzRW1wdHkoKSk7CkBAIC0xMTMsNyAr
MTUyLDggQEAgYm9vbCBjb252ZXJ0V09GRlRvU2ZudChTaGFyZWRCdWZmZXImIHdvZmYsIFZlY3Rv
cjxjaGFyPiYgc2ZudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgc2ZudC5y
ZXNpemUoc2ZudFNpemUpOwogCi0gICAgICAgIHJldHVybiB3b2ZmMjo6Q29udmVydFdPRkYyVG9U
VEYocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc2ZudC5kYXRhKCkpLCBzZm50LnNpemUoKSwg
d29mZkRhdGEsIHdvZmZTaXplKTsKKyAgICAgICAgV09GRjJWZWN0b3JPdXQgb3V0KHNmbnQpOwor
ICAgICAgICByZXR1cm4gd29mZjI6OkNvbnZlcnRXT0ZGMlRvVFRGKHdvZmZEYXRhLCB3b2ZmU2l6
ZSwgJm91dCk7CiAgICAgfQogI2VuZGlmCiAKLS0gCjIuMTAuMAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289962</attachid>
            <date>2016-09-27 10:02:09 -0700</date>
            <delta_ts>2016-09-28 02:46:04 -0700</delta_ts>
            <desc>Patch, v3</desc>
            <filename>0001-GTK-Update-woff2-decoder.patch</filename>
            <type>text/plain</type>
            <size>85656</size>
            <attacher name="Khaled Hosny">dr.khaled.hosny</attacher>
            
              <data encoding="base64">RnJvbSA1NzdmNDQxOTcyNjI4ZTU3ZTJkNGIzN2VlNTc1ZjJiNmFmYzFkNThhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLaGFsZWQgSG9zbnkgPGtoYWxlZGhvc255QGVnbHVnLm9yZz4K
RGF0ZTogVHVlLCAyNyBTZXAgMjAxNiAxNzowMToyMyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFtH
VEtdIFVwZGF0ZSB3b2ZmMiBkZWNvZGVyCgotLS0KIFNvdXJjZS9UaGlyZFBhcnR5L0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyOSArCiBTb3VyY2UvVGhpcmRQYXJ0eS93b2Zm
Mi9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICB8ICAgIDEgKwogU291cmNlL1RoaXJkUGFydHkv
d29mZjIvUkVBRE1FLndlYmtpdCAgICAgICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvVGhpcmRQ
YXJ0eS93b2ZmMi9zcmMvZmlsZS5oICAgICAgICAgICAgICAgICB8ICAgMTYgKy0KIFNvdXJjZS9U
aGlyZFBhcnR5L3dvZmYyL3NyYy9mb250LmNjICAgICAgICAgICAgICAgIHwgICAyMyArLQogU291
cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL2ZvbnQuaCAgICAgICAgICAgICAgICAgfCAgICAxICsK
IFNvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9nbHlwaC5jYyAgICAgICAgICAgICAgIHwgICAg
NiArLQogU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3N0b3JlX2J5dGVzLmggICAgICAgICAg
fCAgICAzICstCiBTb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvdHJhbnNmb3JtLmNjICAgICAg
ICAgICB8ICAgIDIgKy0KIFNvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9jb21tb24u
Y2MgICAgICAgIHwgICAxMyArLQogU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2Nv
bXByZXNzLmNjICAgICAgfCAgICAyICstCiBTb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29m
ZjJfZGVjLmNjICAgICAgICAgICB8IDEwNDEgKysrKysrKysrKy0tLS0tLS0tLS0KIFNvdXJjZS9U
aGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9kZWMuaCAgICAgICAgICAgIHwgICAgOCArCiBTb3Vy
Y2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfZGVjb21wcmVzcy5jYyAgICB8ICAgMzAgKy0K
IFNvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9lbmMuY2MgICAgICAgICAgIHwgICA0
NCArLQogU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX291dC5jYyAgICAgICAgICAg
fCAgIDczICsrCiBTb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmggICAgICAg
ICAgICB8ICAxMTQgKysrCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgMTUgKwogLi4uL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZp
bGVGb3JtYXQuY3BwICAgfCAgIDQwICstCiAxOSBmaWxlcyBjaGFuZ2VkLCA4NDYgaW5zZXJ0aW9u
cygrKSwgNjE3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBh
cnR5L3dvZmYyL3NyYy93b2ZmMl9vdXQuY2MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhp
cmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9DaGFuZ2VMb2cKaW5kZXggZWVmOGE1
Yy4uMTU5M2Q1YiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE2LTA5LTI3
ICBLaGFsZWQgSG9zbnkgIDxraGFsZWRob3NueUBlZ2x1Zy5vcmc+CisKKyAgICAgICAgVXBkYXRl
IHdvZmYyIHRvIGxhdGVzdCByZXZpc2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiB3b2ZmMi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3b2Zm
Mi9SRUFETUUud2Via2l0OgorICAgICAgICAqIHdvZmYyL3NyYy9maWxlLmg6CisgICAgICAgICh3
b2ZmMjo6R2V0RmlsZUNvbnRlbnQpOgorICAgICAgICAod29mZjI6OlNldEZpbGVDb250ZW50cyk6
CisgICAgICAgICogd29mZjIvc3JjL2ZvbnQuY2M6CisgICAgICAgICogd29mZjIvc3JjL2ZvbnQu
aDoKKyAgICAgICAgKiB3b2ZmMi9zcmMvZ2x5cGguY2M6CisgICAgICAgICogd29mZjIvc3JjL3N0
b3JlX2J5dGVzLmg6CisgICAgICAgICh3b2ZmMjo6U3RvcmUxNik6CisgICAgICAgICogd29mZjIv
c3JjL3RyYW5zZm9ybS5jYzoKKyAgICAgICAgKiB3b2ZmMi9zcmMvd29mZjJfY29tbW9uLmNjOgor
ICAgICAgICAqIHdvZmYyL3NyYy93b2ZmMl9jb21wcmVzcy5jYzoKKyAgICAgICAgKiB3b2ZmMi9z
cmMvd29mZjJfZGVjLmNjOgorICAgICAgICAqIHdvZmYyL3NyYy93b2ZmMl9kZWMuaDoKKyAgICAg
ICAgKiB3b2ZmMi9zcmMvd29mZjJfZGVjb21wcmVzcy5jYzoKKyAgICAgICAgKiB3b2ZmMi9zcmMv
d29mZjJfZW5jLmNjOgorICAgICAgICAqIHdvZmYyL3NyYy93b2ZmMl9vdXQuY2M6IEFkZGVkLgor
ICAgICAgICAqIHdvZmYyL3NyYy93b2ZmMl9vdXQuaDogQWRkZWQuCisgICAgICAgICh3b2ZmMjo6
V09GRjJPdXQ6On5XT0ZGMk91dCk6CisgICAgICAgICh3b2ZmMjo6V09GRjJTdHJpbmdPdXQ6Ok1h
eFNpemUpOgorCiAyMDE2LTA5LTI3ICBLb25zdGFudGluIFRva2FyZXYgIDxhbm51bGVuQHlhbmRl
eC5ydT4gYW5kIFZpdGFsaXkgU2xvYm9kaW4gIDx2aXRhbGl5LnNsb2JvZGluQGdtYWlsLmNvbT4K
IAogICAgICAgICBGaXhlZCBjb21waWxhdGlvbiBvZiBXT0ZGMiBvbiBXaW5kb3dzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9UaGly
ZFBhcnR5L3dvZmYyL0NNYWtlTGlzdHMudHh0CmluZGV4IGFiNDgxNDguLjMwZjA0OGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L3dvZmYyL0NNYWtlTGlzdHMudHh0CkBAIC05LDYgKzksNyBAQCBzZXQoV09G
RjJfU09VUkNFUwogICAke1dPRkYyX0RJUn0vc3JjL3ZhcmlhYmxlX2xlbmd0aC5jYwogICAke1dP
RkYyX0RJUn0vc3JjL3dvZmYyX2NvbW1vbi5jYwogICAke1dPRkYyX0RJUn0vc3JjL3dvZmYyX2Rl
Yy5jYworICAke1dPRkYyX0RJUn0vc3JjL3dvZmYyX291dC5jYwogKQogCiBpbmNsdWRlX2RpcmVj
dG9yaWVzKCIke1RISVJEUEFSVFlfRElSfS9icm90bGkvZGVjIikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L3dvZmYyL1JFQURNRS53ZWJraXQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2Zm
Mi9SRUFETUUud2Via2l0CmluZGV4IDBlMDkyMDIuLjkzNDgxNzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L3dvZmYyL1JFQURNRS53ZWJraXQKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
d29mZjIvUkVBRE1FLndlYmtpdApAQCAtMTEsNCArMTEsNCBAQCBUaGUgaW4tdHJlZSBjb3B5IGlz
IHVwZGF0ZWQgYnkgcnVubmluZwogICBzaCB1cGRhdGUuc2gKIGZyb20gd2l0aGluIHRoZSBtb2R1
bGVzL3dvZmYyIGRpcmVjdG9yeS4KIAotQ3VycmVudCB2ZXJzaW9uOiBbY29tbWl0IDY0M2M3YjQ1
ODkxY2JlYjVkYzFmNzU5OWE0YzliNTNmYmU4MmEwOGZdLgorQ3VycmVudCB2ZXJzaW9uOiBbY29t
bWl0IDYzYjhmYjZkMGQ3OTdmMDRlNzdlZTgyNWZkOGZjZjdlYTYyMDVhYWNdLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL2ZpbGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L3dvZmYyL3NyYy9maWxlLmgKaW5kZXggNjlhOTJmOC4uN2FmY2IzMSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL2ZpbGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93
b2ZmMi9zcmMvZmlsZS5oCkBAIC0xMiw3ICsxMiw3IEBACiAvLyBTZWUgdGhlIExpY2Vuc2UgZm9y
IHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAvLyBsaW1p
dGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIC8vCi0vLyBGaWxlIElPIGhlbHBlcnMKKy8vIEZp
bGUgSU8gaGVscGVycy4KIAogI2lmbmRlZiBXT0ZGMl9GSUxFX0hfCiAjZGVmaW5lIFdPRkYyX0ZJ
TEVfSF8KQEAgLTIyLDE4ICsyMiwyMCBAQAogCiBuYW1lc3BhY2Ugd29mZjIgewogCi1pbmxpbmUg
c3RkOjpzdHJpbmcgR2V0RmlsZUNvbnRlbnQoc3RkOjpzdHJpbmcgZmlsZW5hbWUpIHsKK3VzaW5n
IHN0ZDo6c3RyaW5nOworCisKK2lubGluZSBzdHJpbmcgR2V0RmlsZUNvbnRlbnQoc3RyaW5nIGZp
bGVuYW1lKSB7CiAgIHN0ZDo6aWZzdHJlYW0gaWZzKGZpbGVuYW1lLmNfc3RyKCksIHN0ZDo6aW9z
OjpiaW5hcnkpOwotICByZXR1cm4gc3RkOjpzdHJpbmcoCisgIHJldHVybiBzdHJpbmcoCiAgICAg
c3RkOjppc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+KGlmcy5yZGJ1ZigpKSwKICAgICBzdGQ6Omlz
dHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4oKSk7CiB9CiAKLWlubGluZSB2b2lkIFNldEZpbGVDb250
ZW50cyhzdGQ6OnN0cmluZyBmaWxlbmFtZSwgc3RkOjpzdHJpbmcgY29udGVudCkgeworaW5saW5l
IHZvaWQgU2V0RmlsZUNvbnRlbnRzKHN0cmluZyBmaWxlbmFtZSwgc3RyaW5nOjppdGVyYXRvciBz
dGFydCwKKyAgICBzdHJpbmc6Oml0ZXJhdG9yIGVuZCkgewogICBzdGQ6Om9mc3RyZWFtIG9mcyhm
aWxlbmFtZS5jX3N0cigpLCBzdGQ6Omlvczo6YmluYXJ5KTsKLSAgc3RkOjpjb3B5KGNvbnRlbnQu
YmVnaW4oKSwKLSAgICAgICAgICAgIGNvbnRlbnQuZW5kKCksCi0gICAgICAgICAgICBzdGQ6Om9z
dHJlYW1faXRlcmF0b3I8Y2hhcj4ob2ZzKSk7CisgIHN0ZDo6Y29weShzdGFydCwgZW5kLCBzdGQ6
Om9zdHJlYW1faXRlcmF0b3I8Y2hhcj4ob2ZzKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIHdvZmYy
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvZm9udC5jYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9mb250LmNjCmluZGV4IDdjYzU2ODguLjA2MDY3MzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9mb250LmNjCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9mb250LmNjCkBAIC00OSwxMSArNDksNyBAQCBzdGQ6OnZl
Y3Rvcjx1aW50MzJfdD4gRm9udDo6T3V0cHV0T3JkZXJlZFRhZ3MoKSBjb25zdCB7CiAgICAgb3V0
cHV0X29yZGVyLnB1c2hfYmFjayh0YWJsZS50YWcpOwogICB9CiAKLSAgLy8gQWxwaGFiZXRpemUg
YW5kIGRvIG5vdCBwdXQgbG9jYSBpbW1lZGlhdGVseSBhZnRlciBnbHlmCi0gIC8vIFRoaXMgdmlv
bGF0ZXMgd29mZjIgc3BlYyBidXQgcmVzdWx0cyBpbiBhIGZvbnQgdGhhdCBwYXNzZXMgT1RTCi0g
IHN0ZDo6c29ydChvdXRwdXRfb3JkZXIuYmVnaW4oKSwgb3V0cHV0X29yZGVyLmVuZCgpKTsKLSAg
Ly8gVE9ETyh1c2VyKTogY2hhbmdlIHRvIG1hdGNoIHNwZWMgb25jZSBicm93c2VycyBhcmUgb24g
bmV3ZXIgT1RTCi0gIC8qCisgIC8vIEFscGhhYmV0aXplIHRoZW4gcHV0IGxvY2EgaW1tZWRpYXRl
bHkgYWZ0ZXIgZ2x5ZgogICBhdXRvIGdseWZfbG9jID0gc3RkOjpmaW5kKG91dHB1dF9vcmRlci5i
ZWdpbigpLCBvdXRwdXRfb3JkZXIuZW5kKCksCiAgICAgICBrR2x5ZlRhYmxlVGFnKTsKICAgYXV0
byBsb2NhX2xvYyA9IHN0ZDo6ZmluZChvdXRwdXRfb3JkZXIuYmVnaW4oKSwgb3V0cHV0X29yZGVy
LmVuZCgpLApAQCAtNjIsNyArNTgsNyBAQCBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4gRm9udDo6T3V0
cHV0T3JkZXJlZFRhZ3MoKSBjb25zdCB7CiAgICAgb3V0cHV0X29yZGVyLmVyYXNlKGxvY2FfbG9j
KTsKICAgICBvdXRwdXRfb3JkZXIuaW5zZXJ0KHN0ZDo6ZmluZChvdXRwdXRfb3JkZXIuYmVnaW4o
KSwgb3V0cHV0X29yZGVyLmVuZCgpLAogICAgICAga0dseWZUYWJsZVRhZykgKyAxLCBrTG9jYVRh
YmxlVGFnKTsKLSAgfSovCisgIH0KIAogICByZXR1cm4gb3V0cHV0X29yZGVyOwogfQpAQCAtMTQ1
LDcgKzE0MSw3IEBAIGJvb2wgUmVhZFRydWVUeXBlQ29sbGVjdGlvbihCdWZmZXIqIGZpbGUsIGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW4sCiAgICAgfQogCiAgICAgc3RkOjp2ZWN0b3I8
dWludDMyX3Q+IG9mZnNldHM7Ci0gICAgZm9yIChhdXRvIGkgPSAwOyBpIDwgbnVtX2ZvbnRzOyBp
KyspIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bV9mb250czsgaSsrKSB7CiAgICAg
ICB1aW50MzJfdCBvZmZzZXQ7CiAgICAgICBpZiAoIWZpbGUtPlJlYWRVMzIoJm9mZnNldCkpIHsK
ICAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwpAQCAtMTg1LDE1ICsx
ODEsMTQgQEAgYm9vbCBSZWFkRm9udENvbGxlY3Rpb24oY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRDb2xsZWN0aW9uKiBmb250X2Nv
bGxlY3Rpb24pIHsKICAgQnVmZmVyIGZpbGUoZGF0YSwgbGVuKTsKIAotICB1aW50MzJfdCBmbGF2
b3I7Ci0gIGlmICghZmlsZS5SZWFkVTMyKCZmbGF2b3IpKSB7CisgIGlmICghZmlsZS5SZWFkVTMy
KCZmb250X2NvbGxlY3Rpb24tPmZsYXZvcikpIHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lP
Tl9GQUlMVVJFKCk7CiAgIH0KIAotICBpZiAoZmxhdm9yICE9IGtUdGNGb250Rmxhdm9yKSB7Cisg
IGlmIChmb250X2NvbGxlY3Rpb24tPmZsYXZvciAhPSBrVHRjRm9udEZsYXZvcikgewogICAgIGZv
bnRfY29sbGVjdGlvbi0+Zm9udHMucmVzaXplKDEpOwogICAgIEZvbnQmIGZvbnQgPSBmb250X2Nv
bGxlY3Rpb24tPmZvbnRzWzBdOwotICAgIGZvbnQuZmxhdm9yID0gZmxhdm9yOworICAgIGZvbnQu
Zmxhdm9yID0gZm9udF9jb2xsZWN0aW9uLT5mbGF2b3I7CiAgICAgcmV0dXJuIFJlYWRUcnVlVHlw
ZUZvbnQoJmZpbGUsIGRhdGEsIGxlbiwgJmZvbnQpOwogICB9CiAgIHJldHVybiBSZWFkVHJ1ZVR5
cGVDb2xsZWN0aW9uKCZmaWxlLCBkYXRhLCBsZW4sIGZvbnRfY29sbGVjdGlvbik7CkBAIC0yOTAs
NyArMjg1LDcgQEAgYm9vbCBXcml0ZUZvbnRDb2xsZWN0aW9uKGNvbnN0IEZvbnRDb2xsZWN0aW9u
JiBmb250X2NvbGxlY3Rpb24sIHVpbnQ4X3QqIGRzdCwKICAgc2l6ZV90IG9mZnNldCA9IDA7CiAK
ICAgLy8gSXQncyBzaW1wbGVyIGlmIHRoaXMganVzdCBhIHNpbXBsZSBzZm50Ci0gIGlmIChmb250
X2NvbGxlY3Rpb24uZm9udHMuc2l6ZSgpID09IDEpIHsKKyAgaWYgKGZvbnRfY29sbGVjdGlvbi5m
bGF2b3IgIT0ga1R0Y0ZvbnRGbGF2b3IpIHsKICAgICByZXR1cm4gV3JpdGVGb250KGZvbnRfY29s
bGVjdGlvbi5mb250c1swXSwgJm9mZnNldCwgZHN0LCBkc3Rfc2l6ZSk7CiAgIH0KIApAQCAtMzAx
LDcgKzI5Niw3IEBAIGJvb2wgV3JpdGVGb250Q29sbGVjdGlvbihjb25zdCBGb250Q29sbGVjdGlv
biYgZm9udF9jb2xsZWN0aW9uLCB1aW50OF90KiBkc3QsCiAKICAgLy8gT2Zmc2V0IFRhYmxlLCB6
ZXJvZWQgZm9yIG5vdwogICBzaXplX3Qgb2Zmc2V0X3RhYmxlID0gb2Zmc2V0OyAgLy8gd2hlcmUg
dG8gd3JpdGUgb2Zmc2V0cyBsYXRlcgotICBmb3IgKGludCBpID0gMDsgaSA8IGZvbnRfY29sbGVj
dGlvbi5mb250cy5zaXplKCk7IGkrKykgeworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZvbnRf
Y29sbGVjdGlvbi5mb250cy5zaXplKCk7IGkrKykgewogICAgIFN0b3JlVTMyKDAsICZvZmZzZXQs
IGRzdCk7CiAgIH0KIApAQCAtMzEyLDcgKzMwNyw3IEBAIGJvb2wgV3JpdGVGb250Q29sbGVjdGlv
bihjb25zdCBGb250Q29sbGVjdGlvbiYgZm9udF9jb2xsZWN0aW9uLCB1aW50OF90KiBkc3QsCiAg
IH0KIAogICAvLyBXcml0ZSBmb250cyBhbmQgdGhlaXIgb2Zmc2V0cy4KLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCBmb250X2NvbGxlY3Rpb24uZm9udHMuc2l6ZSgpOyBpKyspIHsKKyAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmb250X2NvbGxlY3Rpb24uZm9udHMuc2l6ZSgpOyBpKyspIHsKICAgICBj
b25zdCBhdXRvJiBmb250ID0gZm9udF9jb2xsZWN0aW9uLmZvbnRzW2ldOwogICAgIFN0b3JlVTMy
KG9mZnNldCwgJm9mZnNldF90YWJsZSwgZHN0KTsKICAgICBpZiAoIVdyaXRlRm9udChmb250LCAm
b2Zmc2V0LCBkc3QsIGRzdF9zaXplKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
d29mZjIvc3JjL2ZvbnQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9mb250LmgKaW5k
ZXggNjAxYzRjOC4uOTM4MDZlNiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIv
c3JjL2ZvbnQuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvZm9udC5oCkBAIC02
MSw2ICs2MSw3IEBAIHN0cnVjdCBGb250IHsKIAogLy8gQWNjb21vZGF0ZXMgYm90aCBzaW5ndWxh
ciAoT1RGLCBUVEYpIGFuZCBjb2xsZWN0aW9uIChUVEMpIGZvbnRzCiBzdHJ1Y3QgRm9udENvbGxl
Y3Rpb24geworICB1aW50MzJfdCBmbGF2b3I7CiAgIHVpbnQzMl90IGhlYWRlcl92ZXJzaW9uOwog
ICAvLyAob2Zmc2V0LCBmaXJzdCB1c2Ugb2YgdGFibGUqKSBwYWlycwogICBzdGQ6Om1hcDx1aW50
MzJfdCwgRm9udDo6VGFibGUqPiB0YWJsZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS93b2ZmMi9zcmMvZ2x5cGguY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvZ2x5cGgu
Y2MKaW5kZXggMTdiZWYzOC4uMWRhZGFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
d29mZjIvc3JjL2dseXBoLmNjCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9nbHlw
aC5jYwpAQCAtMTIyLDcgKzEyMiw3IEBAIGJvb2wgUmVhZEdseXBoKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBsZW4sIEdseXBoKiBnbHlwaCkgewogICAgIHVpbnQ4X3QgZmxhZ19yZXBlYXQg
PSAwOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2NvbnRvdXJzOyArK2kpIHsKICAgICAg
IGZsYWdzW2ldLnJlc2l6ZShnbHlwaC0+Y29udG91cnNbaV0uc2l6ZSgpKTsKLSAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgZ2x5cGgtPmNvbnRvdXJzW2ldLnNpemUoKTsgKytqKSB7CisgICAgICBm
b3IgKHNpemVfdCBqID0gMDsgaiA8IGdseXBoLT5jb250b3Vyc1tpXS5zaXplKCk7ICsraikgewog
ICAgICAgICBpZiAoZmxhZ19yZXBlYXQgPT0gMCkgewogICAgICAgICAgIGlmICghYnVmZmVyLlJl
YWRVOCgmZmxhZykpIHsKICAgICAgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxV
UkUoKTsKQEAgLTE0Myw3ICsxNDMsNyBAQCBib29sIFJlYWRHbHlwaChjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3QgbGVuLCBHbHlwaCogZ2x5cGgpIHsKICAgICAvLyBSZWFkIHRoZSB4IGNvb3Jk
aW5hdGVzLgogICAgIGludCBwcmV2X3ggPSAwOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
X2NvbnRvdXJzOyArK2kpIHsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZ2x5cGgtPmNvbnRv
dXJzW2ldLnNpemUoKTsgKytqKSB7CisgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGdseXBo
LT5jb250b3Vyc1tpXS5zaXplKCk7ICsraikgewogICAgICAgICB1aW50OF90IGZsYWcgPSBmbGFn
c1tpXVtqXTsKICAgICAgICAgaWYgKGZsYWcgJiBrRkxBR19YU0hPUlQpIHsKICAgICAgICAgICAv
LyBzaW5nbGUgYnl0ZSB4LWRlbHRhIGNvb3JkIHZhbHVlCkBAIC0xNzAsNyArMTcwLDcgQEAgYm9v
bCBSZWFkR2x5cGgoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbiwgR2x5cGgqIGdseXBo
KSB7CiAgICAgLy8gUmVhZCB0aGUgeSBjb29yZGluYXRlcy4KICAgICBpbnQgcHJldl95ID0gMDsK
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9jb250b3VyczsgKytpKSB7Ci0gICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IGdseXBoLT5jb250b3Vyc1tpXS5zaXplKCk7ICsraikgeworICAgICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCBnbHlwaC0+Y29udG91cnNbaV0uc2l6ZSgpOyArK2opIHsK
ICAgICAgICAgdWludDhfdCBmbGFnID0gZmxhZ3NbaV1bal07CiAgICAgICAgIGlmIChmbGFnICYg
a0ZMQUdfWVNIT1JUKSB7CiAgICAgICAgICAgLy8gc2luZ2xlIGJ5dGUgeS1kZWx0YSBjb29yZCB2
YWx1ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3N0b3JlX2J5dGVz
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvc3RvcmVfYnl0ZXMuaAppbmRleCBlMWEx
MWYzLi43NGIyNzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvc3Rv
cmVfYnl0ZXMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvc3RvcmVfYnl0ZXMu
aApAQCAtNTgsOCArNTgsNyBAQCBpbmxpbmUgdm9pZCBTdG9yZTE2KGludCB2YWwsIHNpemVfdCog
b2Zmc2V0LCB1aW50OF90KiBkc3QpIHsKICAgICAgICgodmFsICYgMHhGRikgPDwgOCkgfCAoKHZh
bCAmIDB4RkYwMCkgPj4gOCk7CiAgICpvZmZzZXQgKz0gMjsKICNlbGlmIChkZWZpbmVkKF9fQllU
RV9PUkRFUl9fKSAmJiAoX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9CSUdfRU5ESUFOX18pKQot
ICAqcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGRzdCArICpvZmZzZXQpID0KLSAgICAgIHN0
YXRpY19jYXN0PHVpbnQxNl90Pih2YWwpOworICAqcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+
KGRzdCArICpvZmZzZXQpID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHZhbCk7CiAgICpvZmZzZXQg
Kz0gMjsKICNlbHNlCiAgIGRzdFsoKm9mZnNldCkrK10gPSB2YWwgPj4gODsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy90cmFuc2Zvcm0uY2MgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS93b2ZmMi9zcmMvdHJhbnNmb3JtLmNjCmluZGV4IGI3YjBjZjAuLjJhZDhiMTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy90cmFuc2Zvcm0uY2MKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3RyYW5zZm9ybS5jYwpAQCAtMzksNyArMzksNyBAQCB2
b2lkIFdyaXRlQnl0ZXMoc3RkOjp2ZWN0b3I8dWludDhfdD4qIG91dCwgY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90IGxlbikgewogfQogCiB2b2lkIFdyaXRlQnl0ZXMoc3RkOjp2ZWN0b3I8dWlu
dDhfdD4qIG91dCwgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIGluKSB7Ci0gIGZvciAoaW50
IGkgPSAwOyBpIDwgaW4uc2l6ZSgpOyArK2kpIHsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
bi5zaXplKCk7ICsraSkgewogICAgIG91dC0+cHVzaF9iYWNrKGluW2ldKTsKICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2NvbW1vbi5jYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9jb21tb24uY2MKaW5kZXggMzlkYzU0ZS4u
ZWJhNmE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2Nv
bW1vbi5jYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfY29tbW9uLmNj
CkBAIC0yMyw3ICsyMyw4IEBAIG5hbWVzcGFjZSB3b2ZmMiB7CiAKIHVpbnQzMl90IENvbXB1dGVV
TG9uZ1N1bShjb25zdCB1aW50OF90KiBidWYsIHNpemVfdCBzaXplKSB7CiAgIHVpbnQzMl90IGNo
ZWNrc3VtID0gMDsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsKKyAg
c2l6ZV90IGFsaWduZWRfc2l6ZSA9IHNpemUgJiB+MzsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhbGlnbmVkX3NpemU7IGkgKz0gNCkgewogI2lmIChkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAm
JiAoX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9MSVRUTEVfRU5ESUFOX18pKQogICAgIHVpbnQz
Ml90IHYgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGJ1ZiArIGkpOwogICAg
IGNoZWNrc3VtICs9ICgoKHYgJiAweEZGKSA8PCAyNCkgfCAoKHYgJiAweEZGMDApIDw8IDgpIHwK
QEAgLTM1LDYgKzM2LDE2IEBAIHVpbnQzMl90IENvbXB1dGVVTG9uZ1N1bShjb25zdCB1aW50OF90
KiBidWYsIHNpemVfdCBzaXplKSB7CiAgICAgICAoYnVmW2kgKyAyXSA8PCA4KSB8IGJ1ZltpICsg
M107CiAjZW5kaWYKICAgfQorCisgIC8vIHRyZWF0IHNpemUgbm90IGFsaWduZWQgb24gNCBhcyBp
ZiBpdCB3ZXJlIHBhZGRlZCB0byA0IHdpdGggMCdzCisgIGlmIChzaXplICE9IGFsaWduZWRfc2l6
ZSkgeworICAgIHVpbnQzMl90IHYgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSBhbGlnbmVkX3Np
emU7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgIHYgfD0gYnVmW2ldIDw8ICgyNCAtIDggKiAoaSAm
IDMpKTsKKyAgICB9CisgICAgY2hlY2tzdW0gKz0gdjsKKyAgfQorCiAgIHJldHVybiBjaGVja3N1
bTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2Nv
bXByZXNzLmNjIGIvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2NvbXByZXNzLmNj
CmluZGV4IGVjNDFhZDUuLmU1Y2Y3MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dv
ZmYyL3NyYy93b2ZmMl9jb21wcmVzcy5jYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9z
cmMvd29mZjJfY29tcHJlc3MuY2MKQEAgLTQ3LDcgKzQ3LDcgQEAgaW50IG1haW4oaW50IGFyZ2Ms
IGNoYXIgKiphcmd2KSB7CiAgIH0KICAgb3V0cHV0LnJlc2l6ZShvdXRwdXRfc2l6ZSk7CiAKLSAg
d29mZjI6OlNldEZpbGVDb250ZW50cyhvdXRmaWxlbmFtZSwgb3V0cHV0KTsKKyAgd29mZjI6OlNl
dEZpbGVDb250ZW50cyhvdXRmaWxlbmFtZSwgb3V0cHV0LmJlZ2luKCksIG91dHB1dC5lbmQoKSk7
CiAKICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9z
cmMvd29mZjJfZGVjLmNjIGIvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2RlYy5j
YwppbmRleCAyZmEyOTFjLi5lYzc1Nzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS93
b2ZmMi9zcmMvd29mZjJfZGVjLmNjCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93
b2ZmMl9kZWMuY2MKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAjaW5jbHVk
ZSA8bWFwPgogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVk
ZSAiLi9kZWNvZGUuaCIKICNpbmNsdWRlICIuL2J1ZmZlci5oIgpAQCAtNjUsMTMgKzY2LDU0IEBA
IGNvbnN0IHNpemVfdCBrQ2hlY2tTdW1BZGp1c3RtZW50T2Zmc2V0ID0gODsKIGNvbnN0IHNpemVf
dCBrRW5kUHRzT2ZDb250b3Vyc09mZnNldCA9IDEwOwogY29uc3Qgc2l6ZV90IGtDb21wb3NpdGVH
bHlwaEJlZ2luID0gMTA7CiAKKy8vIDk4JSBvZiBHb29nbGUgRm9udHMgaGF2ZSBubyBnbHlwaCBh
Ym92ZSA1ayBieXRlcworLy8gTGFyZ2VzdCBnbHlwaCBldmVyIG9ic2VydmVkIHdhcyA3MmsgYnl0
ZXMKK2NvbnN0IHNpemVfdCBrRGVmYXVsdEdseXBoQnVmID0gNTEyMDsKKworLy8gT3ZlciAxNGsg
dGVzdCBmb250cyB0aGUgbWF4IGNvbXByZXNzaW9uIHJhdGlvIHNlZW4gdG8gZGF0ZSB3YXMgfjIw
LgorLy8gPjEwMCBzdWdnZXN0cyB5b3Ugd3JvdGUgYSBiYWQgdW5jb21wcmVzc2VkIHNpemUuCitj
b25zdCBmbG9hdCBrTWF4UGxhdXNpYmxlQ29tcHJlc3Npb25SYXRpbyA9IDEwMC4wOworCiAvLyBt
ZXRhZGF0YSBmb3IgYSBUVEMgZm9udCBlbnRyeQogc3RydWN0IFR0Y0ZvbnQgewogICB1aW50MzJf
dCBmbGF2b3I7CiAgIHVpbnQzMl90IGRzdF9vZmZzZXQ7CisgIHVpbnQzMl90IGhlYWRlcl9jaGVj
a3N1bTsKICAgc3RkOjp2ZWN0b3I8dWludDE2X3Q+IHRhYmxlX2luZGljZXM7CiB9OwogCitzdHJ1
Y3QgV09GRjJIZWFkZXIgeworICB1aW50MzJfdCBmbGF2b3I7CisgIHVpbnQzMl90IGhlYWRlcl92
ZXJzaW9uOworICB1aW50MTZfdCBudW1fdGFibGVzOworICB1aW50NjRfdCBjb21wcmVzc2VkX29m
ZnNldDsKKyAgdWludDMyX3QgY29tcHJlc3NlZF9sZW5ndGg7CisgIHVpbnQzMl90IHVuY29tcHJl
c3NlZF9zaXplOworICBzdGQ6OnZlY3RvcjxUYWJsZT4gdGFibGVzOyAgLy8gbnVtX3RhYmxlcyB1
bmlxdWUgdGFibGVzCisgIHN0ZDo6dmVjdG9yPFR0Y0ZvbnQ+IHR0Y19mb250czsgIC8vIG1ldGFk
YXRhIHRvIGhlbHAgcmVidWlsZCBmb250Cit9OworCisvKioKKyAqIEFjY3VtdWxhdGVzIGRhdGEg
d2UgbWF5IG5lZWQgdG8gcmVjb25zdHJ1Y3QgYSBzaW5nbGUgZm9udC4gT25lIHBlciBmb250Cisg
KiBjcmVhdGVkIGZvciBhIFRUQy4KKyAqLworc3RydWN0IFdPRkYyRm9udEluZm8geworICB1aW50
MTZfdCBudW1fZ2x5cGhzOworICB1aW50MTZfdCBpbmRleF9mb3JtYXQ7CisgIHVpbnQxNl90IG51
bV9obWV0cmljczsKKyAgc3RkOjp2ZWN0b3I8aW50MTZfdD4geF9taW5zOworICBzdGQ6Om1hcDx1
aW50MzJfdCwgdWludDMyX3Q+IHRhYmxlX2VudHJ5X2J5X3RhZzsKK307CisKKy8vIEFjY3VtdWxh
dGVzIG1ldGFkYXRhIGFzIHdlIHJlYnVpbGQgdGhlIGZvbnQKK3N0cnVjdCBSZWJ1aWxkTWV0YWRh
dGEgeworICB1aW50MzJfdCBoZWFkZXJfY2hlY2tzdW07ICAvLyBzZXQgYnkgV3JpdGVIZWFkZXJz
CisgIHN0ZDo6dmVjdG9yPFdPRkYyRm9udEluZm8+IGZvbnRfaW5mb3M7CisgIC8vIGNoZWNrc3Vt
cyBmb3IgdGFibGVzIHRoYXQgaGF2ZSBiZWVuIHdyaXR0ZW4uCisgIC8vICh0YWcsIHNyY19vZmZz
ZXQpID0+IGNoZWNrc3VtLiBOZWVkIGJvdGggYmVjYXVzZSAwLWxlbmd0aCBsb2NhLgorICBzdGQ6
Om1hcDxzdGQ6OnBhaXI8dWludDMyX3QsIHVpbnQzMl90PiwgdWludDMyX3Q+IGNoZWNrc3VtczsK
K307CisKIGludCBXaXRoU2lnbihpbnQgZmxhZywgaW50IGJhc2V2YWwpIHsKICAgLy8gUHJlY29u
ZGl0aW9uOiAwIDw9IGJhc2V2YWwgPCA2NTUzNiAodG8gYXZvaWQgaW50ZWdlciBvdmVyZmxvdykK
ICAgcmV0dXJuIChmbGFnICYgMSkgPyBiYXNldmFsIDogLWJhc2V2YWw7CkBAIC0yNDQsNiArMjg2
LDcgQEAgYm9vbCBTdG9yZVBvaW50cyh1bnNpZ25lZCBpbnQgbl9wb2ludHMsIGNvbnN0IFBvaW50
KiBwb2ludHMsCiAKIC8vIENvbXB1dGUgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgY29vcmRpbmF0
ZXMsIGFuZCBzdG9yZSBpbnRvIGEgZ2x5ZiBidWZmZXIuCiAvLyBBIHByZWNvbmRpdGlvbiBpcyB0
aGF0IHRoZXJlIGFyZSBhdCBsZWFzdCAxMCBieXRlcyBhdmFpbGFibGUuCisvLyBkc3Qgc2hvdWxk
IHBvaW50IHRvIHRoZSBiZWdpbm5pbmcgb2YgYSAnZ2x5ZicgcmVjb3JkLgogdm9pZCBDb21wdXRl
QmJveCh1bnNpZ25lZCBpbnQgbl9wb2ludHMsIGNvbnN0IFBvaW50KiBwb2ludHMsIHVpbnQ4X3Qq
IGRzdCkgewogICBpbnQgeF9taW4gPSAwOwogICBpbnQgeV9taW4gPSAwOwpAQCAtMjcxLDE0ICsz
MTQsMTUgQEAgdm9pZCBDb21wdXRlQmJveCh1bnNpZ25lZCBpbnQgbl9wb2ludHMsIGNvbnN0IFBv
aW50KiBwb2ludHMsIHVpbnQ4X3QqIGRzdCkgewogICBvZmZzZXQgPSBTdG9yZTE2KGRzdCwgb2Zm
c2V0LCB5X21heCk7CiB9CiAKLWJvb2wgUHJvY2Vzc0NvbXBvc2l0ZShCdWZmZXIqIGNvbXBvc2l0
ZV9zdHJlYW0sIHVpbnQ4X3QqIGRzdCwKLSAgICBzaXplX3QgZHN0X3NpemUsIHNpemVfdCogZ2x5
cGhfc2l6ZSwgYm9vbCogaGF2ZV9pbnN0cnVjdGlvbnMpIHsKLSAgc2l6ZV90IHN0YXJ0X29mZnNl
dCA9IGNvbXBvc2l0ZV9zdHJlYW0tPm9mZnNldCgpOworCitib29sIFNpemVPZkNvbXBvc2l0ZShC
dWZmZXIgY29tcG9zaXRlX3N0cmVhbSwgc2l6ZV90KiBzaXplLAorICAgICAgICAgICAgICAgICAg
ICAgYm9vbCogaGF2ZV9pbnN0cnVjdGlvbnMpIHsKKyAgc2l6ZV90IHN0YXJ0X29mZnNldCA9IGNv
bXBvc2l0ZV9zdHJlYW0ub2Zmc2V0KCk7CiAgIGJvb2wgd2VfaGF2ZV9pbnN0cnVjdGlvbnMgPSBm
YWxzZTsKIAogICB1aW50MTZfdCBmbGFncyA9IEZMQUdfTU9SRV9DT01QT05FTlRTOwogICB3aGls
ZSAoZmxhZ3MgJiBGTEFHX01PUkVfQ09NUE9ORU5UUykgewotICAgIGlmIChQUkVESUNUX0ZBTFNF
KCFjb21wb3NpdGVfc3RyZWFtLT5SZWFkVTE2KCZmbGFncykpKSB7CisgICAgaWYgKFBSRURJQ1Rf
RkFMU0UoIWNvbXBvc2l0ZV9zdHJlYW0uUmVhZFUxNigmZmxhZ3MpKSkgewogICAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0KICAgICB3ZV9oYXZlX2luc3RydWN0
aW9ucyB8PSAoZmxhZ3MgJiBGTEFHX1dFX0hBVkVfSU5TVFJVQ1RJT05TKSAhPSAwOwpAQCAtMjk1
LDM0ICszMzksNDMgQEAgYm9vbCBQcm9jZXNzQ29tcG9zaXRlKEJ1ZmZlciogY29tcG9zaXRlX3N0
cmVhbSwgdWludDhfdCogZHN0LAogICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiBGTEFHX1dFX0hBVkVf
QV9UV09fQllfVFdPKSB7CiAgICAgICBhcmdfc2l6ZSArPSA4OwogICAgIH0KLSAgICBpZiAoUFJF
RElDVF9GQUxTRSghY29tcG9zaXRlX3N0cmVhbS0+U2tpcChhcmdfc2l6ZSkpKSB7CisgICAgaWYg
KFBSRURJQ1RfRkFMU0UoIWNvbXBvc2l0ZV9zdHJlYW0uU2tpcChhcmdfc2l6ZSkpKSB7CiAgICAg
ICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgfQogICB9Ci0gIHNpemVf
dCBjb21wb3NpdGVfZ2x5cGhfc2l6ZSA9IGNvbXBvc2l0ZV9zdHJlYW0tPm9mZnNldCgpIC0gc3Rh
cnRfb2Zmc2V0OwotICBpZiAoUFJFRElDVF9GQUxTRShjb21wb3NpdGVfZ2x5cGhfc2l6ZSArIGtD
b21wb3NpdGVHbHlwaEJlZ2luID4gZHN0X3NpemUpKSB7CisKKyAgKnNpemUgPSBjb21wb3NpdGVf
c3RyZWFtLm9mZnNldCgpIC0gc3RhcnRfb2Zmc2V0OworICAqaGF2ZV9pbnN0cnVjdGlvbnMgPSB3
ZV9oYXZlX2luc3RydWN0aW9uczsKKworICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQYWQ0KFdP
RkYyT3V0KiBvdXQpIHsKKyAgdWludDhfdCB6ZXJvZXNbXSA9IHswLCAwLCAwfTsKKyAgaWYgKFBS
RURJQ1RfRkFMU0Uob3V0LT5TaXplKCkgKyAzIDwgb3V0LT5TaXplKCkpKSB7CiAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9Ci0gIFN0b3JlMTYoZHN0LCAwLCAweGZm
ZmYpOyAgLy8gbkNvbnRvdXJzID0gLTEgZm9yIGNvbXBvc2l0ZSBnbHlwaAotICBzdGQ6Om1lbWNw
eShkc3QgKyBrQ29tcG9zaXRlR2x5cGhCZWdpbiwKLSAgICAgIGNvbXBvc2l0ZV9zdHJlYW0tPmJ1
ZmZlcigpICsgc3RhcnRfb2Zmc2V0LAotICAgICAgY29tcG9zaXRlX2dseXBoX3NpemUpOwotICAq
Z2x5cGhfc2l6ZSA9IGtDb21wb3NpdGVHbHlwaEJlZ2luICsgY29tcG9zaXRlX2dseXBoX3NpemU7
Ci0gICpoYXZlX2luc3RydWN0aW9ucyA9IHdlX2hhdmVfaW5zdHJ1Y3Rpb25zOworICB1aW50MzJf
dCBwYWRfYnl0ZXMgPSBSb3VuZDQob3V0LT5TaXplKCkpIC0gb3V0LT5TaXplKCk7CisgIGlmIChw
YWRfYnl0ZXMgPiAwKSB7CisgICAgaWYgKFBSRURJQ1RfRkFMU0UoIW91dC0+V3JpdGUoJnplcm9l
cywgcGFkX2J5dGVzKSkpIHsKKyAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUo
KTsKKyAgICB9CisgIH0KICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vIEJ1aWxkIFRydWVUeXBlIGxv
Y2EgdGFibGUKIGJvb2wgU3RvcmVMb2NhKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQzMl90PiYgbG9j
YV92YWx1ZXMsIGludCBpbmRleF9mb3JtYXQsCi0gICAgICAgICAgICAgICB1aW50OF90KiBkc3Qs
IHNpemVfdCBkc3Rfc2l6ZSkgeworICAgICAgICAgICAgICAgdWludDMyX3QqIGNoZWNrc3VtLCBX
T0ZGMk91dCogb3V0KSB7CisgIC8vIFRPRE8odXNlcikgZmlndXJlIG91dCB3aGF0IGluZGV4IGZv
cm1hdCB0byB1c2UgYmFzZWQgb24gd2hldGhlciBtYXgKKyAgLy8gb2Zmc2V0IGZpdHMgaW50byB1
aW50MTZfdCBvciBub3QKICAgY29uc3QgdWludDY0X3QgbG9jYV9zaXplID0gbG9jYV92YWx1ZXMu
c2l6ZSgpOwogICBjb25zdCB1aW50NjRfdCBvZmZzZXRfc2l6ZSA9IGluZGV4X2Zvcm1hdCA/IDQg
OiAyOwogICBpZiAoUFJFRElDVF9GQUxTRSgobG9jYV9zaXplIDw8IDIpID4+IDIgIT0gbG9jYV9z
aXplKSkgewogICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQotICBp
ZiAoUFJFRElDVF9GQUxTRShvZmZzZXRfc2l6ZSAqIGxvY2Ffc2l6ZSA+IGRzdF9zaXplKSkgewot
ICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQorICBzdGQ6OnZlY3Rv
cjx1aW50OF90PiBsb2NhX2NvbnRlbnQobG9jYV9zaXplICogb2Zmc2V0X3NpemUpOworICB1aW50
OF90KiBkc3QgPSAmbG9jYV9jb250ZW50WzBdOwogICBzaXplX3Qgb2Zmc2V0ID0gMDsKICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsb2NhX3ZhbHVlcy5zaXplKCk7ICsraSkgewogICAgIHVpbnQz
Ml90IHZhbHVlID0gbG9jYV92YWx1ZXNbaV07CkBAIC0zMzIsMzAgKzM4NSwzNCBAQCBib29sIFN0
b3JlTG9jYShjb25zdCBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4mIGxvY2FfdmFsdWVzLCBpbnQgaW5k
ZXhfZm9ybWF0LAogICAgICAgb2Zmc2V0ID0gU3RvcmUxNihkc3QsIG9mZnNldCwgdmFsdWUgPj4g
MSk7CiAgICAgfQogICB9CisgICpjaGVja3N1bSA9IENvbXB1dGVVTG9uZ1N1bSgmbG9jYV9jb250
ZW50WzBdLCBsb2NhX2NvbnRlbnQuc2l6ZSgpKTsKKyAgaWYgKFBSRURJQ1RfRkFMU0UoIW91dC0+
V3JpdGUoJmxvY2FfY29udGVudFswXSwgbG9jYV9jb250ZW50LnNpemUoKSkpKSB7CisgICAgcmV0
dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICB9CiAgIHJldHVybiB0cnVlOwogfQog
CiAvLyBSZWNvbnN0cnVjdCBlbnRpcmUgZ2x5ZiB0YWJsZSBiYXNlZCBvbiB0cmFuc2Zvcm1lZCBv
cmlnaW5hbAotYm9vbCBSZWNvbnN0cnVjdEdseWYoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IGRhdGFfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdCwgc2l6ZV90IGRz
dF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogbG9jYV9idWYsIHNpemVfdCBs
b2NhX3NpemUpIHsKK2Jvb2wgUmVjb25zdHJ1Y3RHbHlmKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIFRh
YmxlKiBnbHlmX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIGdseWZfY2hl
Y2tzdW0sIFRhYmxlICogbG9jYV90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
KiBsb2NhX2NoZWNrc3VtLCBXT0ZGMkZvbnRJbmZvKiBpbmZvLAorICAgICAgICAgICAgICAgICAg
ICAgV09GRjJPdXQqIG91dCkgewogICBzdGF0aWMgY29uc3QgaW50IGtOdW1TdWJTdHJlYW1zID0g
NzsKLSAgQnVmZmVyIGZpbGUoZGF0YSwgZGF0YV9zaXplKTsKKyAgQnVmZmVyIGZpbGUoZGF0YSwg
Z2x5Zl90YWJsZS0+dHJhbnNmb3JtX2xlbmd0aCk7CiAgIHVpbnQzMl90IHZlcnNpb247CiAgIHN0
ZDo6dmVjdG9yPHN0ZDo6cGFpcjxjb25zdCB1aW50OF90Kiwgc2l6ZV90PiA+IHN1YnN0cmVhbXMo
a051bVN1YlN0cmVhbXMpOworICBjb25zdCBzaXplX3QgZ2x5Zl9zdGFydCA9IG91dC0+U2l6ZSgp
OwogCiAgIGlmIChQUkVESUNUX0ZBTFNFKCFmaWxlLlJlYWRVMzIoJnZlcnNpb24pKSkgewogICAg
IHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQotICB1aW50MTZfdCBudW1f
Z2x5cGhzOwotICB1aW50MTZfdCBpbmRleF9mb3JtYXQ7Ci0gIGlmIChQUkVESUNUX0ZBTFNFKCFm
aWxlLlJlYWRVMTYoJm51bV9nbHlwaHMpIHx8Ci0gICAgICAhZmlsZS5SZWFkVTE2KCZpbmRleF9m
b3JtYXQpKSkgeworICBpZiAoUFJFRElDVF9GQUxTRSghZmlsZS5SZWFkVTE2KCZpbmZvLT5udW1f
Z2x5cGhzKSB8fAorICAgICAgIWZpbGUuUmVhZFUxNigmaW5mby0+aW5kZXhfZm9ybWF0KSkpIHsK
ICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0KIAogICB1bnNpZ25l
ZCBpbnQgb2Zmc2V0ID0gKDIgKyBrTnVtU3ViU3RyZWFtcykgKiA0OwotICBpZiAoUFJFRElDVF9G
QUxTRShvZmZzZXQgPiBkYXRhX3NpemUpKSB7CisgIGlmIChQUkVESUNUX0ZBTFNFKG9mZnNldCA+
IGdseWZfdGFibGUtPnRyYW5zZm9ybV9sZW5ndGgpKSB7CiAgICAgcmV0dXJuIEZPTlRfQ09NUFJF
U1NJT05fRkFJTFVSRSgpOwogICB9CiAgIC8vIEludmFyaWFudCBmcm9tIGhlcmUgb246IGRhdGFf
c2l6ZSA+PSBvZmZzZXQKQEAgLTM2NCw3ICs0MjEsNyBAQCBib29sIFJlY29uc3RydWN0R2x5Zihj
b25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YV9zaXplLAogICAgIGlmIChQUkVESUNUX0ZB
TFNFKCFmaWxlLlJlYWRVMzIoJnN1YnN0cmVhbV9zaXplKSkpIHsKICAgICAgIHJldHVybiBGT05U
X0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgICB9Ci0gICAgaWYgKFBSRURJQ1RfRkFMU0Uoc3Vi
c3RyZWFtX3NpemUgPiBkYXRhX3NpemUgLSBvZmZzZXQpKSB7CisgICAgaWYgKFBSRURJQ1RfRkFM
U0Uoc3Vic3RyZWFtX3NpemUgPiBnbHlmX3RhYmxlLT50cmFuc2Zvcm1fbGVuZ3RoIC0gb2Zmc2V0
KSkgewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0KICAg
ICBzdWJzdHJlYW1zW2ldID0gc3RkOjptYWtlX3BhaXIoZGF0YSArIG9mZnNldCwgc3Vic3RyZWFt
X3NpemUpOwpAQCAtMzc4LDE4ICs0MzUsMjMgQEAgYm9vbCBSZWNvbnN0cnVjdEdseWYoY29uc3Qg
dWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSwKICAgQnVmZmVyIGJib3hfc3RyZWFtKHN1
YnN0cmVhbXNbNV0uZmlyc3QsIHN1YnN0cmVhbXNbNV0uc2Vjb25kKTsKICAgQnVmZmVyIGluc3Ry
dWN0aW9uX3N0cmVhbShzdWJzdHJlYW1zWzZdLmZpcnN0LCBzdWJzdHJlYW1zWzZdLnNlY29uZCk7
CiAKLSAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IGxvY2FfdmFsdWVzKG51bV9nbHlwaHMgKyAxKTsK
KyAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IGxvY2FfdmFsdWVzKGluZm8tPm51bV9nbHlwaHMgKyAx
KTsKICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQgaW50PiBuX3BvaW50c192ZWM7CiAgIHN0ZDo6dW5p
cXVlX3B0cjxQb2ludFtdPiBwb2ludHM7CiAgIHNpemVfdCBwb2ludHNfc2l6ZSA9IDA7Ci0gIHVp
bnQzMl90IGxvY2Ffb2Zmc2V0ID0gMDsKICAgY29uc3QgdWludDhfdCogYmJveF9iaXRtYXAgPSBi
Ym94X3N0cmVhbS5idWZmZXIoKTsKICAgLy8gU2FmZSBiZWNhdXNlIG51bV9nbHlwaHMgaXMgYm91
bmRlZAotICB1bnNpZ25lZCBpbnQgYml0bWFwX2xlbmd0aCA9ICgobnVtX2dseXBocyArIDMxKSA+
PiA1KSA8PCAyOworICB1bnNpZ25lZCBpbnQgYml0bWFwX2xlbmd0aCA9ICgoaW5mby0+bnVtX2ds
eXBocyArIDMxKSA+PiA1KSA8PCAyOwogICBpZiAoIWJib3hfc3RyZWFtLlNraXAoYml0bWFwX2xl
bmd0aCkpIHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0KLSAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1fZ2x5cGhzOyArK2kpIHsKKworICAvLyBU
ZW1wIGJ1ZmZlciBmb3IgZ2x5cGgncy4KKyAgc2l6ZV90IGdseXBoX2J1Zl9zaXplID0ga0RlZmF1
bHRHbHlwaEJ1ZjsKKyAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gZ2x5cGhfYnVmKG5ldyB1
aW50OF90W2dseXBoX2J1Zl9zaXplXSk7CisKKyAgaW5mby0+eF9taW5zLnJlc2l6ZShpbmZvLT5u
dW1fZ2x5cGhzKTsKKyAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBpbmZvLT5udW1fZ2x5
cGhzOyArK2kpIHsKICAgICBzaXplX3QgZ2x5cGhfc2l6ZSA9IDA7CiAgICAgdWludDE2X3Qgbl9j
b250b3VycyA9IDA7CiAgICAgYm9vbCBoYXZlX2Jib3ggPSBmYWxzZTsKQEAgLTM5OSw4ICs0NjEs
NiBAQCBib29sIFJlY29uc3RydWN0R2x5Zihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0
YV9zaXplLAogICAgIGlmIChQUkVESUNUX0ZBTFNFKCFuX2NvbnRvdXJfc3RyZWFtLlJlYWRVMTYo
Jm5fY29udG91cnMpKSkgewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgp
OwogICAgIH0KLSAgICB1aW50OF90KiBnbHlmX2RzdCA9IGRzdCArIGxvY2Ffb2Zmc2V0OwotICAg
IHNpemVfdCBnbHlmX2RzdF9zaXplID0gZHN0X3NpemUgLSBsb2NhX29mZnNldDsKIAogICAgIGlm
IChuX2NvbnRvdXJzID09IDB4ZmZmZikgewogICAgICAgLy8gY29tcG9zaXRlIGdseXBoCkBAIC00
MTAsMjYgKzQ3MCw0MiBAQCBib29sIFJlY29uc3RydWN0R2x5Zihjb25zdCB1aW50OF90KiBkYXRh
LCBzaXplX3QgZGF0YV9zaXplLAogICAgICAgICAvLyBjb21wb3NpdGUgZ2x5cGhzIG11c3QgaGF2
ZSBhbiBleHBsaWNpdCBiYm94CiAgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxV
UkUoKTsKICAgICAgIH0KLSAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFQcm9jZXNzQ29tcG9zaXRl
KCZjb21wb3NpdGVfc3RyZWFtLCBnbHlmX2RzdCwKLSAgICAgICAgICAgIGdseWZfZHN0X3NpemUs
ICZnbHlwaF9zaXplLCAmaGF2ZV9pbnN0cnVjdGlvbnMpKSkgewotICAgICAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9Ci0gICAgICBpZiAoUFJFRElDVF9GQUxT
RSghYmJveF9zdHJlYW0uUmVhZChnbHlmX2RzdCArIDIsIDgpKSkgeworCisgICAgICBzaXplX3Qg
Y29tcG9zaXRlX3NpemU7CisgICAgICBpZiAoUFJFRElDVF9GQUxTRSghU2l6ZU9mQ29tcG9zaXRl
KGNvbXBvc2l0ZV9zdHJlYW0sICZjb21wb3NpdGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJmhhdmVfaW5zdHJ1Y3Rpb25zKSkpIHsKICAgICAgICAgcmV0
dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgICAgfQogICAgICAgaWYgKGhhdmVf
aW5zdHJ1Y3Rpb25zKSB7CiAgICAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFSZWFkMjU1VVNob3J0
KCZnbHlwaF9zdHJlYW0sICZpbnN0cnVjdGlvbl9zaXplKSkpIHsKICAgICAgICAgICByZXR1cm4g
Rk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKFBSRURJ
Q1RfRkFMU0UoaW5zdHJ1Y3Rpb25fc2l6ZSArIDIgPiBnbHlmX2RzdF9zaXplIC0gZ2x5cGhfc2l6
ZSkpIHsKLSAgICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgU3RvcmUxNihnbHlmX2RzdCwgZ2x5cGhfc2l6ZSwgaW5zdHJ1Y3Rpb25f
c2l6ZSk7Ci0gICAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFpbnN0cnVjdGlvbl9zdHJlYW0uUmVh
ZChnbHlmX2RzdCArIGdseXBoX3NpemUgKyAyLAorICAgICAgfQorCisgICAgICBzaXplX3Qgc2l6
ZV9uZWVkZWQgPSAxMiArIGNvbXBvc2l0ZV9zaXplICsgaW5zdHJ1Y3Rpb25fc2l6ZTsKKyAgICAg
IGlmIChQUkVESUNUX0ZBTFNFKGdseXBoX2J1Zl9zaXplIDwgc2l6ZV9uZWVkZWQpKSB7CisgICAg
ICAgIGdseXBoX2J1Zi5yZXNldChuZXcgdWludDhfdFtzaXplX25lZWRlZF0pOworICAgICAgICBn
bHlwaF9idWZfc2l6ZSA9IHNpemVfbmVlZGVkOworICAgICAgfQorCisgICAgICBnbHlwaF9zaXpl
ID0gU3RvcmUxNihnbHlwaF9idWYuZ2V0KCksIGdseXBoX3NpemUsIG5fY29udG91cnMpOworICAg
ICAgaWYgKFBSRURJQ1RfRkFMU0UoIWJib3hfc3RyZWFtLlJlYWQoZ2x5cGhfYnVmLmdldCgpICsg
Z2x5cGhfc2l6ZSwgOCkpKSB7CisgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxV
UkUoKTsKKyAgICAgIH0KKyAgICAgIGdseXBoX3NpemUgKz0gODsKKworICAgICAgaWYgKFBSRURJ
Q1RfRkFMU0UoIWNvbXBvc2l0ZV9zdHJlYW0uUmVhZChnbHlwaF9idWYuZ2V0KCkgKyBnbHlwaF9z
aXplLAorICAgICAgICAgICAgY29tcG9zaXRlX3NpemUpKSkgeworICAgICAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CisgICAgICB9CisgICAgICBnbHlwaF9zaXplICs9IGNv
bXBvc2l0ZV9zaXplOworICAgICAgaWYgKGhhdmVfaW5zdHJ1Y3Rpb25zKSB7CisgICAgICAgIGds
eXBoX3NpemUgPSBTdG9yZTE2KGdseXBoX2J1Zi5nZXQoKSwgZ2x5cGhfc2l6ZSwgaW5zdHJ1Y3Rp
b25fc2l6ZSk7CisgICAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFpbnN0cnVjdGlvbl9zdHJlYW0u
UmVhZChnbHlwaF9idWYuZ2V0KCkgKyBnbHlwaF9zaXplLAogICAgICAgICAgICAgICBpbnN0cnVj
dGlvbl9zaXplKSkpIHsKICAgICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJF
KCk7CiAgICAgICAgIH0KLSAgICAgICAgZ2x5cGhfc2l6ZSArPSBpbnN0cnVjdGlvbl9zaXplICsg
MjsKKyAgICAgICAgZ2x5cGhfc2l6ZSArPSBpbnN0cnVjdGlvbl9zaXplOwogICAgICAgfQogICAg
IH0gZWxzZSBpZiAobl9jb250b3VycyA+IDApIHsKICAgICAgIC8vIHNpbXBsZSBnbHlwaApAQCAt
NDY1LDE0MSArNTQxLDExMCBAQCBib29sIFJlY29uc3RydWN0R2x5Zihjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3QgZGF0YV9zaXplLAogICAgICAgICAgIHRvdGFsX25fcG9pbnRzLCBwb2ludHMu
Z2V0KCksICZ0cmlwbGV0X2J5dGVzX2NvbnN1bWVkKSkpIHsKICAgICAgICAgcmV0dXJuIEZPTlRf
Q09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgICAgfQotICAgICAgY29uc3QgdWludDMyX3QgaGVh
ZGVyX2FuZF9lbmRwdHNfY29udG91cnNfc2l6ZSA9Ci0gICAgICAgICAga0VuZFB0c09mQ29udG91
cnNPZmZzZXQgKyAyICogbl9jb250b3VyczsKLSAgICAgIGlmIChQUkVESUNUX0ZBTFNFKGdseWZf
ZHN0X3NpemUgPCBoZWFkZXJfYW5kX2VuZHB0c19jb250b3Vyc19zaXplKSkgeworICAgICAgaWYg
KFBSRURJQ1RfRkFMU0UoIWZsYWdfc3RyZWFtLlNraXAoZmxhZ19zaXplKSkpIHsKICAgICAgICAg
cmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgICAgfQotICAgICAgU3RvcmUx
NihnbHlmX2RzdCwgMCwgbl9jb250b3Vycyk7CisgICAgICBpZiAoUFJFRElDVF9GQUxTRSghZ2x5
cGhfc3RyZWFtLlNraXAodHJpcGxldF9ieXRlc19jb25zdW1lZCkpKSB7CisgICAgICAgIHJldHVy
biBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICAgIH0KKyAgICAgIHVuc2lnbmVkIGlu
dCBpbnN0cnVjdGlvbl9zaXplOworICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoIVJlYWQyNTVVU2hv
cnQoJmdseXBoX3N0cmVhbSwgJmluc3RydWN0aW9uX3NpemUpKSkgeworICAgICAgICByZXR1cm4g
Rk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CisgICAgICB9CisKKyAgICAgIGlmIChQUkVESUNU
X0ZBTFNFKHRvdGFsX25fcG9pbnRzID49ICgxIDw8IDI3KQorICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgaW5zdHJ1Y3Rpb25fc2l6ZSA+PSAoMSA8PCAzMCkpKSB7CisgICAgICAgIHJldHVybiBG
T05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICAgIH0KKyAgICAgIHNpemVfdCBzaXplX25l
ZWRlZCA9IDEyICsgMiAqIG5fY29udG91cnMgKyA1ICogdG90YWxfbl9wb2ludHMKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICsgaW5zdHJ1Y3Rpb25fc2l6ZTsKKyAgICAgIGlmIChQUkVESUNU
X0ZBTFNFKGdseXBoX2J1Zl9zaXplIDwgc2l6ZV9uZWVkZWQpKSB7CisgICAgICAgIGdseXBoX2J1
Zi5yZXNldChuZXcgdWludDhfdFtzaXplX25lZWRlZF0pOworICAgICAgICBnbHlwaF9idWZfc2l6
ZSA9IHNpemVfbmVlZGVkOworICAgICAgfQorCisgICAgICBnbHlwaF9zaXplID0gU3RvcmUxNihn
bHlwaF9idWYuZ2V0KCksIGdseXBoX3NpemUsIG5fY29udG91cnMpOwogICAgICAgaWYgKGhhdmVf
YmJveCkgewotICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSghYmJveF9zdHJlYW0uUmVhZChnbHlm
X2RzdCArIDIsIDgpKSkgeworICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSghYmJveF9zdHJlYW0u
UmVhZChnbHlwaF9idWYuZ2V0KCkgKyBnbHlwaF9zaXplLCA4KSkpIHsKICAgICAgICAgICByZXR1
cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICAgIH0KICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIENvbXB1dGVCYm94KHRvdGFsX25fcG9pbnRzLCBwb2ludHMuZ2V0KCksIGdseWZf
ZHN0KTsKKyAgICAgICAgQ29tcHV0ZUJib3godG90YWxfbl9wb2ludHMsIHBvaW50cy5nZXQoKSwg
Z2x5cGhfYnVmLmdldCgpKTsKICAgICAgIH0KLSAgICAgIHNpemVfdCBvZmZzZXQgPSBrRW5kUHRz
T2ZDb250b3Vyc09mZnNldDsKKyAgICAgIGdseXBoX3NpemUgPSBrRW5kUHRzT2ZDb250b3Vyc09m
ZnNldDsKICAgICAgIGludCBlbmRfcG9pbnQgPSAtMTsKICAgICAgIGZvciAodW5zaWduZWQgaW50
IGNvbnRvdXJfaXggPSAwOyBjb250b3VyX2l4IDwgbl9jb250b3VyczsgKytjb250b3VyX2l4KSB7
CiAgICAgICAgIGVuZF9wb2ludCArPSBuX3BvaW50c192ZWNbY29udG91cl9peF07CiAgICAgICAg
IGlmIChQUkVESUNUX0ZBTFNFKGVuZF9wb2ludCA+PSA2NTUzNikpIHsKICAgICAgICAgICByZXR1
cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICAgIH0KLSAgICAgICAgb2Zmc2V0
ID0gU3RvcmUxNihnbHlmX2RzdCwgb2Zmc2V0LCBlbmRfcG9pbnQpOwotICAgICAgfQotICAgICAg
aWYgKFBSRURJQ1RfRkFMU0UoIWZsYWdfc3RyZWFtLlNraXAoZmxhZ19zaXplKSkpIHsKLSAgICAg
ICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICAgICAgICBnbHlwaF9zaXpl
ID0gU3RvcmUxNihnbHlwaF9idWYuZ2V0KCksIGdseXBoX3NpemUsIGVuZF9wb2ludCk7CiAgICAg
ICB9Ci0gICAgICBpZiAoUFJFRElDVF9GQUxTRSghZ2x5cGhfc3RyZWFtLlNraXAodHJpcGxldF9i
eXRlc19jb25zdW1lZCkpKSB7Ci0gICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxV
UkUoKTsKLSAgICAgIH0KLSAgICAgIHVuc2lnbmVkIGludCBpbnN0cnVjdGlvbl9zaXplOwotICAg
ICAgaWYgKFBSRURJQ1RfRkFMU0UoIVJlYWQyNTVVU2hvcnQoJmdseXBoX3N0cmVhbSwgJmluc3Ry
dWN0aW9uX3NpemUpKSkgewotICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJF
KCk7Ci0gICAgICB9Ci0gICAgICBpZiAoUFJFRElDVF9GQUxTRShnbHlmX2RzdF9zaXplIC0gaGVh
ZGVyX2FuZF9lbmRwdHNfY29udG91cnNfc2l6ZSA8Ci0gICAgICAgICAgaW5zdHJ1Y3Rpb25fc2l6
ZSArIDIpKSB7Ci0gICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAg
ICAgIH0KLSAgICAgIHVpbnQ4X3QqIGluc3RydWN0aW9uX2RzdCA9IGdseWZfZHN0ICsgaGVhZGVy
X2FuZF9lbmRwdHNfY29udG91cnNfc2l6ZTsKLSAgICAgIFN0b3JlMTYoaW5zdHJ1Y3Rpb25fZHN0
LCAwLCBpbnN0cnVjdGlvbl9zaXplKTsKLSAgICAgIGlmIChQUkVESUNUX0ZBTFNFKAotICAgICAg
ICAgICFpbnN0cnVjdGlvbl9zdHJlYW0uUmVhZChpbnN0cnVjdGlvbl9kc3QgKyAyLCBpbnN0cnVj
dGlvbl9zaXplKSkpIHsKKworICAgICAgZ2x5cGhfc2l6ZSA9IFN0b3JlMTYoZ2x5cGhfYnVmLmdl
dCgpLCBnbHlwaF9zaXplLCBpbnN0cnVjdGlvbl9zaXplKTsKKyAgICAgIGlmIChQUkVESUNUX0ZB
TFNFKCFpbnN0cnVjdGlvbl9zdHJlYW0uUmVhZChnbHlwaF9idWYuZ2V0KCkgKyBnbHlwaF9zaXpl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3Ry
dWN0aW9uX3NpemUpKSkgewogICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJF
KCk7CiAgICAgICB9CisgICAgICBnbHlwaF9zaXplICs9IGluc3RydWN0aW9uX3NpemU7CisKICAg
ICAgIGlmIChQUkVESUNUX0ZBTFNFKCFTdG9yZVBvaW50cyh0b3RhbF9uX3BvaW50cywgcG9pbnRz
LmdldCgpLCBuX2NvbnRvdXJzLAotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25fc2l6ZSwgZ2x5Zl9k
c3QsIGdseWZfZHN0X3NpemUsICZnbHlwaF9zaXplKSkpIHsKKyAgICAgICAgICAgIGluc3RydWN0
aW9uX3NpemUsIGdseXBoX2J1Zi5nZXQoKSwgZ2x5cGhfYnVmX3NpemUsICZnbHlwaF9zaXplKSkp
IHsKICAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICBnbHlwaF9zaXplID0gMDsKICAgICB9Ci0gICAgbG9jYV92YWx1
ZXNbaV0gPSBsb2NhX29mZnNldDsKLSAgICBpZiAoUFJFRElDVF9GQUxTRShnbHlwaF9zaXplICsg
MyA8IGdseXBoX3NpemUpKSB7CisKKyAgICBsb2NhX3ZhbHVlc1tpXSA9IG91dC0+U2l6ZSgpIC0g
Z2x5Zl9zdGFydDsKKyAgICBpZiAoUFJFRElDVF9GQUxTRSghb3V0LT5Xcml0ZShnbHlwaF9idWYu
Z2V0KCksIGdseXBoX3NpemUpKSkgewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJ
TFVSRSgpOwogICAgIH0KLSAgICBnbHlwaF9zaXplID0gUm91bmQ0KGdseXBoX3NpemUpOwotICAg
IGlmIChQUkVESUNUX0ZBTFNFKGdseXBoX3NpemUgPiBkc3Rfc2l6ZSAtIGxvY2Ffb2Zmc2V0KSkg
ewotICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBidXQgdGhpcyB0ZXN0IGRlZmVuc2l2
ZWx5IG1haW50YWlucyB0aGUKLSAgICAgIC8vIGludmFyaWFudCB0aGF0IGxvY2Ffb2Zmc2V0IDw9
IGRzdF9zaXplLgorCisgICAgLy8gVE9ETyh1c2VyKSBPbGQgY29kZSBhbGlnbmVkIGdseXBocyAu
Li4gYnV0IGRvIHdlIGFjdHVhbGx5IG5lZWQgdG8/CisgICAgaWYgKFBSRURJQ1RfRkFMU0UoIVBh
ZDQob3V0KSkpIHsKICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAg
ICB9Ci0gICAgbG9jYV9vZmZzZXQgKz0gZ2x5cGhfc2l6ZTsKLSAgfQotICBsb2NhX3ZhbHVlc1tu
dW1fZ2x5cGhzXSA9IGxvY2Ffb2Zmc2V0OwotICByZXR1cm4gU3RvcmVMb2NhKGxvY2FfdmFsdWVz
LCBpbmRleF9mb3JtYXQsIGxvY2FfYnVmLCBsb2NhX3NpemUpOwotfQogCi0vLyBUaGlzIGlzIGxp
bmVhciBzZWFyY2gsIGJ1dCBjb3VsZCBiZSBjaGFuZ2VkIHRvIGJpbmFyeSBiZWNhdXNlIHdlCi0v
LyBkbyBoYXZlIGEgZ3VhcmFudGVlIHRoYXQgdGhlIHRhYmxlcyBhcmUgc29ydGVkIGJ5IHRhZy4g
QnV0IHRoZSB0b3RhbAotLy8gY3B1IHRpbWUgaXMgZXhwZWN0ZWQgdG8gYmUgdmVyeSBzbWFsbCBp
biBhbnkgY2FzZS4KLWNvbnN0IFRhYmxlKiBGaW5kVGFibGUoY29uc3Qgc3RkOjp2ZWN0b3I8VGFi
bGU+JiB0YWJsZXMsIHVpbnQzMl90IHRhZykgewotICBzaXplX3Qgbl90YWJsZXMgPSB0YWJsZXMu
c2l6ZSgpOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5fdGFibGVzOyArK2kpIHsKLSAgICBp
ZiAodGFibGVzW2ldLnRhZyA9PSB0YWcpIHsKLSAgICAgIHJldHVybiAmdGFibGVzW2ldOworICAg
ICpnbHlmX2NoZWNrc3VtICs9IENvbXB1dGVVTG9uZ1N1bShnbHlwaF9idWYuZ2V0KCksIGdseXBo
X3NpemUpOworCisgICAgLy8gV2UgbWF5IG5lZWQgeF9taW4gdG8gcmVjb25zdHJ1Y3QgJ2htdHgn
CisgICAgaWYgKG5fY29udG91cnMgPiAwKSB7CisgICAgICBCdWZmZXIgeF9taW5fYnVmKGdseXBo
X2J1Zi5nZXQoKSArIDIsIDIpOworICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoIXhfbWluX2J1Zi5S
ZWFkUzE2KCZpbmZvLT54X21pbnNbaV0pKSkgeworICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVT
U0lPTl9GQUlMVVJFKCk7CisgICAgICB9CiAgICAgfQogICB9Ci0gIHJldHVybiBOVUxMOwotfQog
Ci0vLyBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL21heHAuaHRt
Ci1ib29sIFJlYWROdW1HbHlwaHMoY29uc3QgVGFibGUqIG1heHBfdGFibGUsCi0gICAgICAgICAg
ICAgICAgICAgdWludDhfdCogZHN0LCBzaXplX3QgZHN0X2xlbmd0aCwgdWludDE2X3QqIG51bV9n
bHlwaHMpIHsKLSAgaWYgKFBSRURJQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1heHBf
dGFibGUtPmRzdF9vZmZzZXQgKwotICAgICAgbWF4cF90YWJsZS0+ZHN0X2xlbmd0aCkgPiBkc3Rf
bGVuZ3RoKSkgewotICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQot
ICBCdWZmZXIgYnVmZmVyKGRzdCArIG1heHBfdGFibGUtPmRzdF9vZmZzZXQsIG1heHBfdGFibGUt
PmRzdF9sZW5ndGgpOwotICAvLyBTa2lwIDQgdG8gcmVhY2ggJ21heHAnIG51bUdseXBocwotICBp
ZiAoUFJFRElDVF9GQUxTRSghYnVmZmVyLlNraXAoNCkgfHwgIWJ1ZmZlci5SZWFkVTE2KG51bV9n
bHlwaHMpKSkgeworICAvLyBnbHlmX3RhYmxlIGRzdF9vZmZzZXQgd2FzIHNldCBieSBSZWNvbnN0
cnVjdEZvbnQKKyAgZ2x5Zl90YWJsZS0+ZHN0X2xlbmd0aCA9IG91dC0+U2l6ZSgpIC0gZ2x5Zl90
YWJsZS0+ZHN0X29mZnNldDsKKyAgbG9jYV90YWJsZS0+ZHN0X29mZnNldCA9IG91dC0+U2l6ZSgp
OworICAvLyBsb2NhW25dIHdpbGwgYmUgZXF1YWwgdGhlIGxlbmd0aCBvZiB0aGUgZ2x5cGggZGF0
YSAoJ2dseWYnKSB0YWJsZQorICBsb2NhX3ZhbHVlc1tpbmZvLT5udW1fZ2x5cGhzXSA9IGdseWZf
dGFibGUtPmRzdF9sZW5ndGg7CisgIGlmIChQUkVESUNUX0ZBTFNFKCFTdG9yZUxvY2EobG9jYV92
YWx1ZXMsIGluZm8tPmluZGV4X2Zvcm1hdCwgbG9jYV9jaGVja3N1bSwKKyAgICAgIG91dCkpKSB7
CiAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9Ci0gIHJldHVybiB0
cnVlOwotfQorICBsb2NhX3RhYmxlLT5kc3RfbGVuZ3RoID0gb3V0LT5TaXplKCkgLSBsb2NhX3Rh
YmxlLT5kc3Rfb2Zmc2V0OwogCi0vLyBHZXQgbnVtYmVyT2ZITWV0cmljcywgaHR0cHM6Ly93d3cu
bWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L290c3BlYy9oaGVhLmh0bQotYm9vbCBSZWFkTnVtSE1l
dHJpY3MoY29uc3QgVGFibGUqIGhoZWFfdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICB1aW50
OF90KiBkc3QsIHNpemVfdCBkc3RfbGVuZ3RoLCB1aW50MTZfdCogbnVtX2htZXRyaWNzKSB7Ci0g
IGlmIChQUkVESUNUX0ZBTFNFKHN0YXRpY19jYXN0PHVpbnQ2NF90PihoaGVhX3RhYmxlLT5kc3Rf
b2Zmc2V0ICsKLSAgICAgIGhoZWFfdGFibGUtPmRzdF9sZW5ndGgpID4gZHN0X2xlbmd0aCkpIHsK
LSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAgLy8gU2tpcCAz
NCB0byByZWFjaCAnaGhlYScgbnVtYmVyT2ZITWV0cmljcwotICBCdWZmZXIgYnVmZmVyKGRzdCAr
IGhoZWFfdGFibGUtPmRzdF9vZmZzZXQsIGhoZWFfdGFibGUtPmRzdF9sZW5ndGgpOwotICBpZiAo
UFJFRElDVF9GQUxTRSghYnVmZmVyLlNraXAoMzQpIHx8ICFidWZmZXIuUmVhZFUxNihudW1faG1l
dHJpY3MpKSkgewotICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQog
ICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8geF9taW4gZm9yIGdseXBoOyBodHRwczovL3d3dy5taWNy
b3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL2dseWYuaHRtCi1ib29sIFJlYWRHbHlwaFhNaW4o
QnVmZmVyKiBnbHlmX2J1ZmYsIEJ1ZmZlciogbG9jYV9idWZmLCBpbnQxNl90IGxvY2FfZm9ybWF0
LAotICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGluZGV4LCBpbnQxNl90KiB4X21pbikgewot
ICB1aW50MzJfdCBvZmZzZXQxLCBvZmZzZXQyOwotICBsb2NhX2J1ZmYtPnNldF9vZmZzZXQoKGxv
Y2FfZm9ybWF0ID09IDAgPyAyIDogNCkgKiBpbmRleCk7Ci0gIGlmIChsb2NhX2Zvcm1hdCA9PSAw
KSB7Ci0gICAgdWludDE2X3QgdG1wMSwgdG1wMjsKLSAgICBpZiAoUFJFRElDVF9GQUxTRSghbG9j
YV9idWZmLT5SZWFkVTE2KCZ0bXAxKSB8fAotICAgICAgICAgICAgICAgICAgICAgICFsb2NhX2J1
ZmYtPlJlYWRVMTYoJnRtcDIpKSkgewotICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJ
TFVSRSgpOworVGFibGUqIEZpbmRUYWJsZShzdGQ6OnZlY3RvcjxUYWJsZSo+KiB0YWJsZXMsIHVp
bnQzMl90IHRhZykgeworICBmb3IgKFRhYmxlKiB0YWJsZSA6ICp0YWJsZXMpIHsKKyAgICBpZiAo
dGFibGUtPnRhZyA9PSB0YWcpIHsKKyAgICAgIHJldHVybiB0YWJsZTsKICAgICB9Ci0gICAgLy8g
aHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L290c3BlYy9sb2NhLmh0bQotICAg
IC8vICJUaGUgYWN0dWFsIGxvY2FsIG9mZnNldCBkaXZpZGVkIGJ5IDIgaXMgc3RvcmVkLiIKLSAg
ICBvZmZzZXQxID0gdG1wMSAqIDI7Ci0gICAgb2Zmc2V0MiA9IHRtcDIgKiAyOwotICB9IGVsc2Ug
aWYgKFBSRURJQ1RfRkFMU0UoIWxvY2FfYnVmZi0+UmVhZFUzMigmb2Zmc2V0MSkgfHwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICFsb2NhX2J1ZmYtPlJlYWRVMzIoJm9mZnNldDIpKSkgewot
ICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQorICByZXR1cm4gTlVM
TDsKK30KIAotICBpZiAob2Zmc2V0MSAhPSBvZmZzZXQyKSB7Ci0gICAgZ2x5Zl9idWZmLT5zZXRf
b2Zmc2V0KG9mZnNldDEgKyAyKTsKLSAgICBpZiAoIWdseWZfYnVmZi0+UmVhZFMxNih4X21pbikp
IHsKLSAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9Ci0gIH0g
ZWxzZSB7Ci0gICAgKnhfbWluID0gMDsKKy8vIEdldCBudW1iZXJPZkhNZXRyaWNzLCBodHRwczov
L3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL2hoZWEuaHRtCitib29sIFJlYWRO
dW1ITWV0cmljcyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YV9zaXplLAorICAgICAg
ICAgICAgICAgICAgICAgdWludDE2X3QqIG51bV9obWV0cmljcykgeworICAvLyBTa2lwIDM0IHRv
IHJlYWNoICdoaGVhJyBudW1iZXJPZkhNZXRyaWNzCisgIEJ1ZmZlciBidWZmZXIoZGF0YSwgZGF0
YV9zaXplKTsKKyAgaWYgKFBSRURJQ1RfRkFMU0UoIWJ1ZmZlci5Ta2lwKDM0KSB8fCAhYnVmZmVy
LlJlYWRVMTYobnVtX2htZXRyaWNzKSkpIHsKKyAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9G
QUlMVVJFKCk7CiAgIH0KICAgcmV0dXJuIHRydWU7CiB9CkBAIC02MDcsNDAgKzY1MiwxMSBAQCBi
b29sIFJlYWRHbHlwaFhNaW4oQnVmZmVyKiBnbHlmX2J1ZmYsIEJ1ZmZlciogbG9jYV9idWZmLCBp
bnQxNl90IGxvY2FfZm9ybWF0LAogLy8gaHR0cDovL2Rldi53My5vcmcvd2ViZm9udHMvV09GRjIv
c3BlYy9PdmVydmlldy5odG1sI2htdHhfdGFibGVfZm9ybWF0CiBib29sIFJlY29uc3RydWN0VHJh
bnNmb3JtZWRIbXR4KGNvbnN0IHVpbnQ4X3QqIHRyYW5zZm9ybWVkX2J1ZiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRyYW5zZm9ybWVkX3NpemUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRhYmxlKiBnbHlmX3RhYmxlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUYWJsZSogaGhlYV90YWJsZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGFibGUqIGhtdHhfdGFibGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRhYmxlKiBsb2NhX3RhYmxlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUYWJsZSogbWF4cF90YWJsZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogZHN0LCBzaXplX3QgZHN0X2xlbmd0
aCkgewotICBpZiAoUFJFRElDVF9GQUxTRSghZ2x5Zl90YWJsZSkpIHsKLSAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAgaWYgKFBSRURJQ1RfRkFMU0UoIWhoZWFf
dGFibGUpKSB7Ci0gICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwotICB9Ci0g
IGlmIChQUkVESUNUX0ZBTFNFKCFobXR4X3RhYmxlKSkgewotICAgIHJldHVybiBGT05UX0NPTVBS
RVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQotICBpZiAoUFJFRElDVF9GQUxTRSghbG9jYV90YWJsZSkp
IHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAgaWYgKFBS
RURJQ1RfRkFMU0UoIW1heHBfdGFibGUpKSB7Ci0gICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05f
RkFJTFVSRSgpOwotICB9Ci0KLSAgdWludDE2X3QgbnVtX2dseXBocywgbnVtX2htZXRyaWNzOwot
ICBpZiAoIVJlYWROdW1HbHlwaHMobWF4cF90YWJsZSwgZHN0LCBkc3RfbGVuZ3RoLCAmbnVtX2ds
eXBocykpIHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAg
aWYgKCFSZWFkTnVtSE1ldHJpY3MoaGhlYV90YWJsZSwgZHN0LCBkc3RfbGVuZ3RoLCAmbnVtX2ht
ZXRyaWNzKSkgewotICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQot
Ci0gIGlmIChQUkVESUNUX0ZBTFNFKHN0YXRpY19jYXN0PHVpbnQ2NF90PihobXR4X3RhYmxlLT5k
c3Rfb2Zmc2V0ICsKLSAgICAgIGhtdHhfdGFibGUtPmRzdF9sZW5ndGgpID4gZHN0X2xlbmd0aCkp
IHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgbnVtX2dseXBocywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgbnVtX2htZXRyaWNzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxpbnQxNl90PiYgeF9taW5zLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogY2hlY2tzdW0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPRkYyT3V0KiBvdXQpIHsKICAgQnVmZmVyIGht
dHhfYnVmZl9pbih0cmFuc2Zvcm1lZF9idWYsIHRyYW5zZm9ybWVkX3NpemUpOwogCiAgIHVpbnQ4
X3QgaG10eF9mbGFnczsKQEAgLTY1OCwyMyArNjc0LDE2IEBAIGJvb2wgUmVjb25zdHJ1Y3RUcmFu
c2Zvcm1lZEhtdHgoY29uc3QgdWludDhfdCogdHJhbnNmb3JtZWRfYnVmLAogICAgIHJldHVybiBG
T05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQogCi0gIC8vIGdseWYvbG9jYSBhcmUgZG9u
ZSBhbHJlYWR5IHNvIHdlIGNhbiB1c2UgdGhlbSB0byByZWNvdmVyIHhfbWluJ3MKLSAgaWYgKFBS
RURJQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdseWZfdGFibGUtPmRzdF9vZmZzZXQg
KwotICAgICAgZ2x5Zl90YWJsZS0+ZHN0X2xlbmd0aCkgPiBkc3RfbGVuZ3RoKSkgewotICAgIHJl
dHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQotICBpZiAoUFJFRElDVF9GQUxT
RShzdGF0aWNfY2FzdDx1aW50NjRfdD4obG9jYV90YWJsZS0+ZHN0X29mZnNldCArCi0gICAgICBs
b2NhX3RhYmxlLT5kc3RfbGVuZ3RoKSA+IGRzdF9sZW5ndGgpKSB7CisgIGFzc2VydCh4X21pbnMu
c2l6ZSgpID09IG51bV9nbHlwaHMpOworCisgIC8vIG51bV9nbHlwaHMgMCBpcyBPSyBpZiB0aGVy
ZSBpcyBubyAnZ2x5ZicgYnV0IGNhbm5vdCB0aGVuIHhmb3JtICdobXR4Jy4KKyAgaWYgKFBSRURJ
Q1RfRkFMU0UobnVtX2htZXRyaWNzID4gbnVtX2dseXBocykpIHsKICAgICByZXR1cm4gRk9OVF9D
T01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0KLSAgQnVmZmVyIGdseWZfYnVmZihkc3QgKyBnbHlm
X3RhYmxlLT5kc3Rfb2Zmc2V0LCBnbHlmX3RhYmxlLT5kc3RfbGVuZ3RoKTsKLSAgQnVmZmVyIGxv
Y2FfYnVmZihkc3QgKyBsb2NhX3RhYmxlLT5kc3Rfb2Zmc2V0LCBsb2NhX3RhYmxlLT5kc3RfbGVu
Z3RoKTsKLSAgaW50MTZfdCBsb2NhX2Zvcm1hdDsKLSAgaWYgKGxvY2FfdGFibGUtPmRzdF9sZW5n
dGggPT0gMiAqIChudW1fZ2x5cGhzICsgMSkpIHsKLSAgICBsb2NhX2Zvcm1hdCA9IDA7Ci0gIH0g
ZWxzZSBpZiAobG9jYV90YWJsZS0+ZHN0X2xlbmd0aCA9PSA0ICogKG51bV9nbHlwaHMgKyAxKSkg
ewotICAgIGxvY2FfZm9ybWF0ID0gMTsKLSAgfSBlbHNlIHsKKworICAvLyBodHRwczovL3d3dy5t
aWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL2htdHguaHRtCisgIC8vICIuLi5vbmx5IG9u
ZSBlbnRyeSBuZWVkIGJlIGluIHRoZSBhcnJheSwgYnV0IHRoYXQgZW50cnkgaXMgcmVxdWlyZWQu
IgorICBpZiAoUFJFRElDVF9GQUxTRShudW1faG1ldHJpY3MgPCAxKSkgewogICAgIHJldHVybiBG
T05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQogCkBAIC02OTMsMTAgKzcwMiw3IEBAIGJv
b2wgUmVjb25zdHJ1Y3RUcmFuc2Zvcm1lZEhtdHgoY29uc3QgdWludDhfdCogdHJhbnNmb3JtZWRf
YnVmLAogICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICB9
CiAgICAgfSBlbHNlIHsKLSAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFSZWFkR2x5cGhYTWluKCZn
bHlmX2J1ZmYsICZsb2NhX2J1ZmYsIGxvY2FfZm9ybWF0LCBpLAotICAgICAgICAgICZsc2IpKSkg
ewotICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9Cisg
ICAgICBsc2IgPSB4X21pbnNbaV07CiAgICAgfQogICAgIGxzYnMucHVzaF9iYWNrKGxzYik7CiAg
IH0KQEAgLTcwOCwyNSArNzE0LDE2IEBAIGJvb2wgUmVjb25zdHJ1Y3RUcmFuc2Zvcm1lZEhtdHgo
Y29uc3QgdWludDhfdCogdHJhbnNmb3JtZWRfYnVmLAogICAgICAgICByZXR1cm4gRk9OVF9DT01Q
UkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgIGlmIChQUkVE
SUNUX0ZBTFNFKCFSZWFkR2x5cGhYTWluKCZnbHlmX2J1ZmYsICZsb2NhX2J1ZmYsIGxvY2FfZm9y
bWF0LCBpLAotICAgICAgICAgICZsc2IpKSkgewotICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVT
U0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9CisgICAgICBsc2IgPSB4X21pbnNbaV07CiAgICAgfQog
ICAgIGxzYnMucHVzaF9iYWNrKGxzYik7CiAgIH0KIAogICAvLyBiYWtlIG1lIGEgc2hpbnkgbmV3
IGhtdHggdGFibGUKICAgdWludDMyX3QgaG10eF9vdXRwdXRfc2l6ZSA9IDIgKiBudW1fZ2x5cGhz
ICsgMiAqIG51bV9obWV0cmljczsKLSAgaWYgKGhtdHhfb3V0cHV0X3NpemUgPiBobXR4X3RhYmxl
LT5kc3RfbGVuZ3RoKSB7Ci0gICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwot
ICB9Ci0gIGlmIChQUkVESUNUX0ZBTFNFKHN0YXRpY19jYXN0PHVpbnQ2NF90PihobXR4X3RhYmxl
LT5kc3Rfb2Zmc2V0ICsKLSAgICAgIGhtdHhfdGFibGUtPmRzdF9sZW5ndGgpID4gZHN0X2xlbmd0
aCkpIHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLQotICBz
aXplX3QgZHN0X29mZnNldCA9IGhtdHhfdGFibGUtPmRzdF9vZmZzZXQ7CisgIHN0ZDo6dmVjdG9y
PHVpbnQ4X3Q+IGhtdHhfdGFibGUoaG10eF9vdXRwdXRfc2l6ZSk7CisgIHVpbnQ4X3QqIGRzdCA9
ICZobXR4X3RhYmxlWzBdOworICBzaXplX3QgZHN0X29mZnNldCA9IDA7CiAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBudW1fZ2x5cGhzOyBpKyspIHsKICAgICBpZiAoaSA8IG51bV9obWV0cmlj
cykgewogICAgICAgU3RvcmUxNihhZHZhbmNlX3dpZHRoc1tpXSwgJmRzdF9vZmZzZXQsIGRzdCk7
CkBAIC03MzQsMTUyICs3MzEsMTQgQEAgYm9vbCBSZWNvbnN0cnVjdFRyYW5zZm9ybWVkSG10eChj
b25zdCB1aW50OF90KiB0cmFuc2Zvcm1lZF9idWYsCiAgICAgU3RvcmUxNihsc2JzW2ldLCAmZHN0
X29mZnNldCwgZHN0KTsKICAgfQogCi0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlY29uc3Ry
dWN0VHJhbnNmb3JtZWRHbHlmKGNvbnN0IHVpbnQ4X3QqIHRyYW5zZm9ybWVkX2J1ZiwKLSAgICBz
aXplX3QgdHJhbnNmb3JtZWRfc2l6ZSwgY29uc3QgVGFibGUqIGdseWZfdGFibGUsIGNvbnN0IFRh
YmxlKiBsb2NhX3RhYmxlLAotICAgIHVpbnQ4X3QqIGRzdCwgc2l6ZV90IGRzdF9sZW5ndGgpIHsK
LSAgaWYgKFBSRURJQ1RfRkFMU0UoZ2x5Zl90YWJsZSA9PSBOVUxMIHx8IGxvY2FfdGFibGUgPT0g
TlVMTCkpIHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAg
aWYgKFBSRURJQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdseWZfdGFibGUtPmRzdF9v
ZmZzZXQgKwotICAgICAgZ2x5Zl90YWJsZS0+ZHN0X2xlbmd0aCkgPiBkc3RfbGVuZ3RoKSkgewot
ICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQotICBpZiAoUFJFRElD
VF9GQUxTRShzdGF0aWNfY2FzdDx1aW50NjRfdD4obG9jYV90YWJsZS0+ZHN0X29mZnNldCArCi0g
ICAgIGxvY2FfdGFibGUtPmRzdF9sZW5ndGgpID4gZHN0X2xlbmd0aCkpIHsKLSAgICByZXR1cm4g
Rk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAgcmV0dXJuIFJlY29uc3RydWN0R2x5
Zih0cmFuc2Zvcm1lZF9idWYsIHRyYW5zZm9ybWVkX3NpemUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgZHN0ICsgZ2x5Zl90YWJsZS0+ZHN0X29mZnNldCwgZ2x5Zl90YWJsZS0+ZHN0X2xlbmd0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkc3QgKyBsb2NhX3RhYmxlLT5kc3Rfb2Zmc2V0
LCBsb2NhX3RhYmxlLT5kc3RfbGVuZ3RoKTsKLX0KLQotLy8gUmVjb25zdHJ1Y3RzIGEgc2luZ2xl
IGZvbnQuIHRhYmxlcyBtdXN0IG5vdCBjb250YWluIGR1cGxpY2F0ZXMuCi1ib29sIFJlY29uc3Ry
dWN0VHJhbnNmb3JtZWQoY29uc3Qgc3RkOjp2ZWN0b3I8VGFibGU+JiB0YWJsZXMsIHVpbnQzMl90
IHRhZywKLSAgICBjb25zdCB1aW50OF90KiB0cmFuc2Zvcm1lZF9idWYsIHNpemVfdCB0cmFuc2Zv
cm1lZF9zaXplLAotICAgIHVpbnQ4X3QqIGRzdCwgc2l6ZV90IGRzdF9sZW5ndGgpIHsKLQotICBp
ZiAodGFnID09IGtHbHlmVGFibGVUYWcpIHsKLSAgICBjb25zdCBUYWJsZSogZ2x5Zl90YWJsZSA9
IEZpbmRUYWJsZSh0YWJsZXMsIHRhZyk7Ci0gICAgY29uc3QgVGFibGUqIGxvY2FfdGFibGUgPSBG
aW5kVGFibGUodGFibGVzLCBrTG9jYVRhYmxlVGFnKTsKLSAgICByZXR1cm4gUmVjb25zdHJ1Y3RU
cmFuc2Zvcm1lZEdseWYodHJhbnNmb3JtZWRfYnVmLCB0cmFuc2Zvcm1lZF9zaXplLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlmX3RhYmxlLCBsb2NhX3RhYmxlLCBk
c3QsIGRzdF9sZW5ndGgpOwotICB9IGVsc2UgaWYgKHRhZyA9PSBrTG9jYVRhYmxlVGFnKSB7Ci0g
ICAgLy8gcHJvY2Vzc2luZyB3YXMgYWxyZWFkeSBkb25lIGJ5IGdseWYgdGFibGUsIGJ1dCB2YWxp
ZGF0ZQotICAgIGlmIChQUkVESUNUX0ZBTFNFKCFGaW5kVGFibGUodGFibGVzLCBrR2x5ZlRhYmxl
VGFnKSkpIHsKLSAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9
Ci0gIH0gZWxzZSBpZiAodGFnID09IGtIbXR4VGFibGVUYWcpIHsKLSAgICAvLyBUYWJsZXMgYXJl
IHNvcnRlZCBmb3IgYSBub24tY29sbGVjdGlvbi4KLSAgICAvLyBnbHlmIGlzIGJlZm9yZSBobXR4
IGFuZCBpbmNsdWRlcyBsb2NhIHNvIGFsbCBvdXIgYWNjZXNzZXMgYXJlIHNhZmUuCi0gICAgY29u
c3QgVGFibGUqIGdseWZfdGFibGUgPSBGaW5kVGFibGUodGFibGVzLCBrR2x5ZlRhYmxlVGFnKTsK
LSAgICBjb25zdCBUYWJsZSogaGhlYV90YWJsZSA9IEZpbmRUYWJsZSh0YWJsZXMsIGtIaGVhVGFi
bGVUYWcpOwotICAgIGNvbnN0IFRhYmxlKiBobXR4X3RhYmxlID0gRmluZFRhYmxlKHRhYmxlcywg
a0htdHhUYWJsZVRhZyk7Ci0gICAgY29uc3QgVGFibGUqIGxvY2FfdGFibGUgPSBGaW5kVGFibGUo
dGFibGVzLCBrTG9jYVRhYmxlVGFnKTsKLSAgICBjb25zdCBUYWJsZSogbWF4cF90YWJsZSA9IEZp
bmRUYWJsZSh0YWJsZXMsIGtNYXhwVGFibGVUYWcpOwotCi0gICAgaWYgKFBSRURJQ1RfRkFMU0Uo
IVJlY29uc3RydWN0VHJhbnNmb3JtZWRIbXR4KAotICAgICAgICB0cmFuc2Zvcm1lZF9idWYsIHRy
YW5zZm9ybWVkX3NpemUsIGdseWZfdGFibGUsIGhoZWFfdGFibGUsCi0gICAgICAgIGhtdHhfdGFi
bGUsIGxvY2FfdGFibGUsIG1heHBfdGFibGUsIGRzdCwgZHN0X2xlbmd0aCkpKSB7Ci0gICAgICBy
ZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgfQotICB9IGVsc2UgewotICAg
IC8vIHRyYW5zZm9ybSBmb3IgdGhlIHRhZyBpcyBub3Qga25vd24KKyAgKmNoZWNrc3VtID0gQ29t
cHV0ZVVMb25nU3VtKCZobXR4X3RhYmxlWzBdLCBobXR4X291dHB1dF9zaXplKTsKKyAgaWYgKFBS
RURJQ1RfRkFMU0UoIW91dC0+V3JpdGUoJmhtdHhfdGFibGVbMF0sIGhtdHhfb3V0cHV0X3NpemUp
KSkgewogICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQotICByZXR1
cm4gdHJ1ZTsKLX0KLQotdWludDMyX3QgQ29tcHV0ZUNoZWNrc3VtKGNvbnN0IFRhYmxlKiB0YWJs
ZSwgY29uc3QgdWludDhfdCogZHN0KSB7Ci0gIHJldHVybiBDb21wdXRlVUxvbmdTdW0oZHN0ICsg
dGFibGUtPmRzdF9vZmZzZXQsIHRhYmxlLT5kc3RfbGVuZ3RoKTsKLX0KLQotY29uc3QgVGFibGUq
IEZpbmRUYWJsZShUdGNGb250IHR0Y19mb250LCBjb25zdCBzdGQ6OnZlY3RvcjxUYWJsZT4mIHRh
YmxlcywKLSAgdWludDMyX3QgdGFnKSB7Ci0gIGZvciAoY29uc3QgYXV0byBpIDogdHRjX2ZvbnQu
dGFibGVfaW5kaWNlcykgewotICAgIGlmICh0YWJsZXNbaV0udGFnID09IHRhZykgcmV0dXJuICZ0
YWJsZXNbaV07Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLWJvb2wgRml4Q29sbGVjdGlvbkNo
ZWNrc3VtcyhzaXplX3QgaGVhZGVyX3ZlcnNpb24sCi0gIGNvbnN0IHN0ZDo6dmVjdG9yPFRhYmxl
PiYgdGFibGVzLCBjb25zdCBzdGQ6OnZlY3RvcjxUdGNGb250PiYgdHRjX2ZvbnRzLAotICB1aW50
OF90KiBkc3QpIHsKLSAgc2l6ZV90IG9mZnNldCA9IENvbGxlY3Rpb25IZWFkZXJTaXplKGhlYWRl
cl92ZXJzaW9uLCB0dGNfZm9udHMuc2l6ZSgpKTsKLQotICBmb3IgKGNvbnN0IGF1dG8mIHR0Y19m
b250IDogdHRjX2ZvbnRzKSB7Ci0gICAgb2Zmc2V0ICs9IDEyOyAgLy8gbW92ZSB0byBzdGFydCBv
ZiBPZmZzZXQgVGFibGUKLSAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50MTZfdD4mIHRhYmxlX2lu
ZGljZXMgPSB0dGNfZm9udC50YWJsZV9pbmRpY2VzOwotCi0gICAgY29uc3QgVGFibGUqIGhlYWRf
dGFibGUgPSBGaW5kVGFibGUodHRjX2ZvbnQsIHRhYmxlcywga0hlYWRUYWJsZVRhZyk7Ci0gICAg
aWYgKFBSRURJQ1RfRkFMU0UoaGVhZF90YWJsZSA9PSBOVUxMIHx8Ci0gICAgICAgIGhlYWRfdGFi
bGUtPmRzdF9sZW5ndGggPCBrQ2hlY2tTdW1BZGp1c3RtZW50T2Zmc2V0ICsgNCkpIHsKLSAgICAg
IHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9Ci0KLSAgICBzaXplX3Qg
Zmlyc3RfdGFibGVfb2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsK
LSAgICBmb3IgKGNvbnN0IGF1dG8gaW5kZXggOiB0YWJsZV9pbmRpY2VzKSB7Ci0gICAgICBjb25z
dCBhdXRvJiB0YWJsZSA9IHRhYmxlc1tpbmRleF07Ci0gICAgICBpZiAodGFibGUuZHN0X29mZnNl
dCA8IGZpcnN0X3RhYmxlX29mZnNldCkgewotICAgICAgICBmaXJzdF90YWJsZV9vZmZzZXQgPSB0
YWJsZS5kc3Rfb2Zmc2V0OwotICAgICAgfQotICAgIH0KLQotICAgIHNpemVfdCBhZGp1c3RtZW50
X29mZnNldCA9IGhlYWRfdGFibGUtPmRzdF9vZmZzZXQKLSAgICAgICsga0NoZWNrU3VtQWRqdXN0
bWVudE9mZnNldDsKLSAgICBTdG9yZVUzMihkc3QsIGFkanVzdG1lbnRfb2Zmc2V0LCAwKTsKLQot
ICAgIHVpbnQzMl90IGZpbGVfY2hlY2tzdW0gPSAwOwotICAgIC8vIGNvbXB1dGUgZWFjaCB0YWJs
ZXMgY2hlY2tzdW0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhYmxlX2luZGljZXMuc2l6
ZSgpOyBpKyspIHsKLSAgICAgIGNvbnN0IFRhYmxlJiB0YWJsZSA9IHRhYmxlc1t0YWJsZV9pbmRp
Y2VzW2ldXTsKLSAgICAgIHVpbnQzMl90IHRhYmxlX2NoZWNrc3VtID0gQ29tcHV0ZUNoZWNrc3Vt
KCZ0YWJsZSwgZHN0KTsKLSAgICAgIHNpemVfdCBjaGVja3N1bV9vZmZzZXQgPSBvZmZzZXQgKyA0
OyAgLy8gc2tpcCBwYXN0IHRhZyB0byBjaGVja1N1bQotCi0gICAgICAvLyB3cml0ZSB0aGUgY2hl
Y2tzdW0gZm9yIHRoZSBUYWJsZSBSZWNvcmQKLSAgICAgIFN0b3JlVTMyKGRzdCwgY2hlY2tzdW1f
b2Zmc2V0LCB0YWJsZV9jaGVja3N1bSk7Ci0gICAgICBmaWxlX2NoZWNrc3VtICs9IHRhYmxlX2No
ZWNrc3VtOwotICAgICAgLy8gbmV4dCBUYWJsZSBSZWNvcmQKLSAgICAgIG9mZnNldCArPSAxNjsK
LSAgICB9Ci0KLSAgICBzaXplX3QgaGVhZGVyX3NpemUgPSBrU2ZudEhlYWRlclNpemUgKwotICAg
ICAga1NmbnRFbnRyeVNpemUgKiB0YWJsZV9pbmRpY2VzLnNpemUoKTsKLSAgICB1aW50MzJfdCBo
ZWFkZXJfY2hlY2tzdW0gPSBDb21wdXRlVUxvbmdTdW0oZHN0ICsgdHRjX2ZvbnQuZHN0X29mZnNl
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVy
X3NpemUpOwotCi0gICAgZmlsZV9jaGVja3N1bSArPSBoZWFkZXJfY2hlY2tzdW07Ci0gICAgdWlu
dDMyX3QgY2hlY2tzdW1fYWRqdXN0bWVudCA9IDB4YjFiMGFmYmEgLSBmaWxlX2NoZWNrc3VtOwot
ICAgIFN0b3JlVTMyKGRzdCwgYWRqdXN0bWVudF9vZmZzZXQsIGNoZWNrc3VtX2FkanVzdG1lbnQp
OwotICB9CiAKICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRml4Q2hlY2tzdW1zKGNvbnN0IHN0
ZDo6dmVjdG9yPFRhYmxlPiYgdGFibGVzLCB1aW50OF90KiBkc3QpIHsKLSAgY29uc3QgVGFibGUq
IGhlYWRfdGFibGUgPSBGaW5kVGFibGUodGFibGVzLCBrSGVhZFRhYmxlVGFnKTsKLSAgaWYgKFBS
RURJQ1RfRkFMU0UoaGVhZF90YWJsZSA9PSBOVUxMIHx8Ci0gICAgICBoZWFkX3RhYmxlLT5kc3Rf
bGVuZ3RoIDwga0NoZWNrU3VtQWRqdXN0bWVudE9mZnNldCArIDQpKSB7Ci0gICAgcmV0dXJuIEZP
TlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwotICB9Ci0gIHNpemVfdCBhZGp1c3RtZW50X29mZnNl
dCA9IGhlYWRfdGFibGUtPmRzdF9vZmZzZXQgKyBrQ2hlY2tTdW1BZGp1c3RtZW50T2Zmc2V0Owot
ICBTdG9yZVUzMihkc3QsIGFkanVzdG1lbnRfb2Zmc2V0LCAwKTsKLSAgc2l6ZV90IG5fdGFibGVz
ID0gdGFibGVzLnNpemUoKTsKLSAgdWludDMyX3QgZmlsZV9jaGVja3N1bSA9IDA7Ci0gIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbl90YWJsZXM7ICsraSkgewotICAgIHVpbnQzMl90IGNoZWNrc3Vt
ID0gQ29tcHV0ZUNoZWNrc3VtKCZ0YWJsZXNbaV0sIGRzdCk7Ci0gICAgU3RvcmVVMzIoZHN0LCBr
U2ZudEhlYWRlclNpemUgKyBpICoga1NmbnRFbnRyeVNpemUgKyA0LCBjaGVja3N1bSk7Ci0gICAg
ZmlsZV9jaGVja3N1bSArPSBjaGVja3N1bTsKLSAgfQotICBmaWxlX2NoZWNrc3VtICs9IENvbXB1
dGVVTG9uZ1N1bShkc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTZm50
SGVhZGVyU2l6ZSArIGtTZm50RW50cnlTaXplICogbl90YWJsZXMpOwotICB1aW50MzJfdCBjaGVj
a3N1bV9hZGp1c3RtZW50ID0gMHhiMWIwYWZiYSAtIGZpbGVfY2hlY2tzdW07Ci0gIFN0b3JlVTMy
KGRzdCwgYWRqdXN0bWVudF9vZmZzZXQsIGNoZWNrc3VtX2FkanVzdG1lbnQpOwotICByZXR1cm4g
dHJ1ZTsKLX0KLQogYm9vbCBXb2ZmMlVuY29tcHJlc3ModWludDhfdCogZHN0X2J1Ziwgc2l6ZV90
IGRzdF9zaXplLAogICBjb25zdCB1aW50OF90KiBzcmNfYnVmLCBzaXplX3Qgc3JjX3NpemUpIHsK
ICAgc2l6ZV90IHVuY29tcHJlc3NlZF9zaXplID0gZHN0X3NpemU7CkBAIC04OTMsNiArNzUyLDcg
QEAgYm9vbCBXb2ZmMlVuY29tcHJlc3ModWludDhfdCogZHN0X2J1Ziwgc2l6ZV90IGRzdF9zaXpl
LAogCiBib29sIFJlYWRUYWJsZURpcmVjdG9yeShCdWZmZXIqIGZpbGUsIHN0ZDo6dmVjdG9yPFRh
YmxlPiogdGFibGVzLAogICAgIHNpemVfdCBudW1fdGFibGVzKSB7CisgIHVpbnQzMl90IHNyY19v
ZmZzZXQgPSAwOwogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bV90YWJsZXM7ICsraSkgewog
ICAgIFRhYmxlKiB0YWJsZSA9ICYoKnRhYmxlcylbaV07CiAgICAgdWludDhfdCBmbGFnX2J5dGU7
CkBAIC05MzMsNiArNzkzLDEzIEBAIGJvb2wgUmVhZFRhYmxlRGlyZWN0b3J5KEJ1ZmZlciogZmls
ZSwgc3RkOjp2ZWN0b3I8VGFibGU+KiB0YWJsZXMsCiAgICAgICAgIHJldHVybiBGT05UX0NPTVBS
RVNTSU9OX0ZBSUxVUkUoKTsKICAgICAgIH0KICAgICB9CisgICAgaWYgKFBSRURJQ1RfRkFMU0Uo
c3JjX29mZnNldCArIHRyYW5zZm9ybV9sZW5ndGggPCBzcmNfb2Zmc2V0KSkgeworICAgICAgcmV0
dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICAgIH0KKyAgICB0YWJsZS0+c3JjX29m
ZnNldCA9IHNyY19vZmZzZXQ7CisgICAgdGFibGUtPnNyY19sZW5ndGggPSB0cmFuc2Zvcm1fbGVu
Z3RoOworICAgIHNyY19vZmZzZXQgKz0gdHJhbnNmb3JtX2xlbmd0aDsKKwogICAgIHRhYmxlLT50
YWcgPSB0YWc7CiAgICAgdGFibGUtPmZsYWdzID0gZmxhZ3M7CiAgICAgdGFibGUtPnRyYW5zZm9y
bV9sZW5ndGggPSB0cmFuc2Zvcm1fbGVuZ3RoOwpAQCAtOTQxLDE5ICs4MDgsNiBAQCBib29sIFJl
YWRUYWJsZURpcmVjdG9yeShCdWZmZXIqIGZpbGUsIHN0ZDo6dmVjdG9yPFRhYmxlPiogdGFibGVz
LAogICByZXR1cm4gdHJ1ZTsKIH0KIAotfSAgLy8gbmFtZXNwYWNlCi0KLXNpemVfdCBDb21wdXRl
V09GRjJGaW5hbFNpemUoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkgewotICBC
dWZmZXIgZmlsZShkYXRhLCBsZW5ndGgpOwotICB1aW50MzJfdCB0b3RhbF9sZW5ndGg7Ci0KLSAg
aWYgKCFmaWxlLlNraXAoMTYpIHx8Ci0gICAgICAhZmlsZS5SZWFkVTMyKCZ0b3RhbF9sZW5ndGgp
KSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgcmV0dXJuIHRvdGFsX2xlbmd0aDsKLX0KLQogLy8g
V3JpdGVzIGEgc2luZ2xlIE9mZnNldCBUYWJsZSBlbnRyeQogc2l6ZV90IFN0b3JlT2Zmc2V0VGFi
bGUodWludDhfdCogcmVzdWx0LCBzaXplX3Qgb2Zmc2V0LCB1aW50MzJfdCBmbGF2b3IsCiAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBudW1fdGFibGVzKSB7CkBAIC05NzEsNjIgKzgy
NSwxODUgQEAgc2l6ZV90IFN0b3JlT2Zmc2V0VGFibGUodWludDhfdCogcmVzdWx0LCBzaXplX3Qg
b2Zmc2V0LCB1aW50MzJfdCBmbGF2b3IsCiAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLXNpemVfdCBT
dG9yZVRhYmxlRW50cnkodWludDhfdCogcmVzdWx0LCBjb25zdCBUYWJsZSYgdGFibGUsIHNpemVf
dCBvZmZzZXQpIHsKLSAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIHRhYmxlLnRh
Zyk7Ci0gIG9mZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCAwKTsgIC8vIGNoZWNrc3Vt
LCB0byBmaWxsIGluIGxhdGVyCi0gIG9mZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCB0
YWJsZS5kc3Rfb2Zmc2V0KTsKLSAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIHRh
YmxlLmRzdF9sZW5ndGgpOworc2l6ZV90IFN0b3JlVGFibGVFbnRyeSh1aW50OF90KiByZXN1bHQs
IHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgdGFnKSB7CisgIG9mZnNldCA9IFN0b3JlVTMyKHJl
c3VsdCwgb2Zmc2V0LCB0YWcpOworICBvZmZzZXQgPSBTdG9yZVUzMihyZXN1bHQsIG9mZnNldCwg
MCk7CisgIG9mZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCAwKTsKKyAgb2Zmc2V0ID0g
U3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIDApOwogICByZXR1cm4gb2Zmc2V0OwogfQogCiAvLyBG
aXJzdCB0YWJsZSBnb2VzIGFmdGVyIGFsbCB0aGUgaGVhZGVycywgdGFibGUgZGlyZWN0b3J5LCBl
dGMKLXVpbnQ2NF90IENvbXB1dGVPZmZzZXRUb0ZpcnN0VGFibGUoY29uc3QgdWludDMyX3QgaGVh
ZGVyX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVp
bnQxNl90IG51bV90YWJsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPFR0Y0ZvbnQ+JiB0dGNfZm9udHMpIHsKK3VpbnQ2NF90IENvbXB1dGVP
ZmZzZXRUb0ZpcnN0VGFibGUoY29uc3QgV09GRjJIZWFkZXImIGhkcikgewogICB1aW50NjRfdCBv
ZmZzZXQgPSBrU2ZudEhlYWRlclNpemUgKwotICAgIGtTZm50RW50cnlTaXplICogc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KG51bV90YWJsZXMpOwotICBpZiAoaGVhZGVyX3ZlcnNpb24pIHsKLSAgICBv
ZmZzZXQgPSBDb2xsZWN0aW9uSGVhZGVyU2l6ZShoZWFkZXJfdmVyc2lvbiwgdHRjX2ZvbnRzLnNp
emUoKSkKLSAgICAgICsga1NmbnRIZWFkZXJTaXplICogdHRjX2ZvbnRzLnNpemUoKTsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIHR0Y19mb250IDogdHRjX2ZvbnRzKSB7Ci0gICAgICBvZmZzZXQgKz0K
LSAgICAgICAga1NmbnRFbnRyeVNpemUgKiB0dGNfZm9udC50YWJsZV9pbmRpY2VzLnNpemUoKTsK
KyAgICBrU2ZudEVudHJ5U2l6ZSAqIHN0YXRpY19jYXN0PHVpbnQ2NF90PihoZHIubnVtX3RhYmxl
cyk7CisgIGlmIChoZHIuaGVhZGVyX3ZlcnNpb24pIHsKKyAgICBvZmZzZXQgPSBDb2xsZWN0aW9u
SGVhZGVyU2l6ZShoZHIuaGVhZGVyX3ZlcnNpb24sIGhkci50dGNfZm9udHMuc2l6ZSgpKQorICAg
ICAgKyBrU2ZudEhlYWRlclNpemUgKiBoZHIudHRjX2ZvbnRzLnNpemUoKTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIHR0Y19mb250IDogaGRyLnR0Y19mb250cykgeworICAgICAgb2Zmc2V0ICs9IGtT
Zm50RW50cnlTaXplICogdHRjX2ZvbnQudGFibGVfaW5kaWNlcy5zaXplKCk7CiAgICAgfQogICB9
CiAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLWJvb2wgUmVjb25zdHJ1Y3RUcmFuc2Zvcm1lZEZvbnQo
Y29uc3Qgc3RkOjp2ZWN0b3I8VGFibGU+JiB0YWJsZXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6bWFwPHVpbnQzMl90LCBjb25zdCB1aW50OF90Kj4qIHNyY19ieV9kZXN0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiByZXN1bHQsIHNpemVf
dCByZXN1bHRfbGVuZ3RoKSB7Ci0gIGZvciAoY29uc3QgYXV0byYgdGFibGUgOiB0YWJsZXMpIHsK
LSAgICBpZiAoKHRhYmxlLmZsYWdzICYga1dvZmYyRmxhZ3NUcmFuc2Zvcm0pICE9IGtXb2ZmMkZs
YWdzVHJhbnNmb3JtKSB7Ci0gICAgICBjb250aW51ZTsKK3N0ZDo6dmVjdG9yPFRhYmxlKj4gVGFi
bGVzKFdPRkYySGVhZGVyKiBoZHIsIHNpemVfdCBmb250X2luZGV4KSB7CisgIHN0ZDo6dmVjdG9y
PFRhYmxlKj4gdGFibGVzOworICBpZiAoUFJFRElDVF9GQUxTRShoZHItPmhlYWRlcl92ZXJzaW9u
KSkgeworICAgIGZvciAoYXV0byBpbmRleCA6IGhkci0+dHRjX2ZvbnRzW2ZvbnRfaW5kZXhdLnRh
YmxlX2luZGljZXMpIHsKKyAgICAgIHRhYmxlcy5wdXNoX2JhY2soJmhkci0+dGFibGVzW2luZGV4
XSk7CisgICAgfQorICB9IGVsc2UgeworICAgIGZvciAoYXV0byYgdGFibGUgOiBoZHItPnRhYmxl
cykgeworICAgICAgdGFibGVzLnB1c2hfYmFjaygmdGFibGUpOworICAgIH0KKyAgfQorICByZXR1
cm4gdGFibGVzOworfQorCisvLyBPZmZzZXQgdGFibGVzIGFzc3VtZWQgdG8gaGF2ZSBiZWVuIHdy
aXR0ZW4gaW4gd2l0aCAwJ3MgaW5pdGlhbGx5LgorLy8gV09GRjJIZWFkZXIgaXNuJ3QgY29uc3Qg
c28gd2UgY2FuIHVzZSBbXSBpbnN0ZWFkIG9mIGF0KCkgKHdoaWNoIHVwc2V0cyBGRikKK2Jvb2wg
UmVjb25zdHJ1Y3RGb250KHVpbnQ4X3QqIHRyYW5zZm9ybWVkX2J1ZiwKKyAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQzMl90IHRyYW5zZm9ybWVkX2J1Zl9zaXplLAorICAgICAgICAgICAg
ICAgICAgICAgUmVidWlsZE1ldGFkYXRhKiBtZXRhZGF0YSwKKyAgICAgICAgICAgICAgICAgICAg
IFdPRkYySGVhZGVyKiBoZHIsCisgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZm9udF9pbmRl
eCwKKyAgICAgICAgICAgICAgICAgICAgIFdPRkYyT3V0KiBvdXQpIHsKKyAgc2l6ZV90IGRlc3Rf
b2Zmc2V0ID0gb3V0LT5TaXplKCk7CisgIHVpbnQ4X3QgdGFibGVfZW50cnlbMTJdOworICBXT0ZG
MkZvbnRJbmZvKiBpbmZvID0gJm1ldGFkYXRhLT5mb250X2luZm9zW2ZvbnRfaW5kZXhdOworICBz
dGQ6OnZlY3RvcjxUYWJsZSo+IHRhYmxlcyA9IFRhYmxlcyhoZHIsIGZvbnRfaW5kZXgpOworCisg
IC8vICdnbHlmJyB3aXRob3V0ICdsb2NhJyBkb2Vzbid0IG1ha2Ugc2Vuc2UKKyAgaWYgKFBSRURJ
Q1RfRkFMU0Uoc3RhdGljX2Nhc3Q8Ym9vbD4oRmluZFRhYmxlKCZ0YWJsZXMsIGtHbHlmVGFibGVU
YWcpKSAhPQorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxib29sPihGaW5kVGFibGUo
JnRhYmxlcywga0xvY2FUYWJsZVRhZykpKSkgeworICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9O
X0ZBSUxVUkUoKTsKKyAgfQorCisgIHVpbnQzMl90IGZvbnRfY2hlY2tzdW0gPSBtZXRhZGF0YS0+
aGVhZGVyX2NoZWNrc3VtOworICBpZiAoaGRyLT5oZWFkZXJfdmVyc2lvbikgeworICAgIGZvbnRf
Y2hlY2tzdW0gPSBoZHItPnR0Y19mb250c1tmb250X2luZGV4XS5oZWFkZXJfY2hlY2tzdW07Cisg
IH0KKworICB1aW50MzJfdCBsb2NhX2NoZWNrc3VtID0gMDsKKyAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB0YWJsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICBUYWJsZSYgdGFibGUgPSAqdGFibGVzW2ld
OworCisgICAgc3RkOjpwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4gY2hlY2tzdW1fa2V5ID0ge3Rh
YmxlLnRhZywgdGFibGUuc3JjX29mZnNldH07CisgICAgYm9vbCByZXVzZWQgPSBtZXRhZGF0YS0+
Y2hlY2tzdW1zLmZpbmQoY2hlY2tzdW1fa2V5KQorICAgICAgICAgICAgICAgIT0gbWV0YWRhdGEt
PmNoZWNrc3Vtcy5lbmQoKTsKKyAgICBpZiAoUFJFRElDVF9GQUxTRShmb250X2luZGV4ID09IDAg
JiYgcmV1c2VkKSkgeworICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwor
ICAgIH0KKworICAgIC8vIFRPRE8odXNlcikgYSBjb2xsZWN0aW9uIHdpdGggb3B0aW1pemVkIGht
dHggdGhhdCByZXVzZWQgZ2x5Zi9sb2NhCisgICAgLy8gd291bGQgZmFpbC4gV2UgZG9uJ3Qgb3B0
aW1pemUgaG10eCBmb3IgY29sbGVjdGlvbnMgeWV0LgorICAgIGlmIChQUkVESUNUX0ZBTFNFKHN0
YXRpY19jYXN0PHVpbnQ2NF90Pih0YWJsZS5zcmNfb2Zmc2V0ICsgdGFibGUuc3JjX2xlbmd0aCkK
KyAgICAgICAgPiB0cmFuc2Zvcm1lZF9idWZfc2l6ZSkpIHsKKyAgICAgIHJldHVybiBGT05UX0NP
TVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICB9CisKKyAgICBpZiAodGFibGUudGFnID09IGtIaGVh
VGFibGVUYWcpIHsKKyAgICAgIGlmICghUmVhZE51bUhNZXRyaWNzKHRyYW5zZm9ybWVkX2J1ZiAr
IHRhYmxlLnNyY19vZmZzZXQsCisgICAgICAgICAgdGFibGUuc3JjX2xlbmd0aCwgJmluZm8tPm51
bV9obWV0cmljcykpIHsKKyAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgp
OworICAgICAgfQorICAgIH0KKworICAgIHVpbnQzMl90IGNoZWNrc3VtID0gMDsKKyAgICBpZiAo
IXJldXNlZCkgeworICAgICAgaWYgKCh0YWJsZS5mbGFncyAmIGtXb2ZmMkZsYWdzVHJhbnNmb3Jt
KSAhPSBrV29mZjJGbGFnc1RyYW5zZm9ybSkgeworICAgICAgICBpZiAodGFibGUudGFnID09IGtI
ZWFkVGFibGVUYWcpIHsKKyAgICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSh0YWJsZS5zcmNfbGVu
Z3RoIDwgMTIpKSB7CisgICAgICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJF
KCk7CisgICAgICAgICAgfQorICAgICAgICAgIC8vIGNoZWNrU3VtQWRqdXN0bWVudCA9IDAKKyAg
ICAgICAgICBTdG9yZVUzMih0cmFuc2Zvcm1lZF9idWYgKyB0YWJsZS5zcmNfb2Zmc2V0LCA4LCAw
KTsKKyAgICAgICAgfQorICAgICAgICB0YWJsZS5kc3Rfb2Zmc2V0ID0gZGVzdF9vZmZzZXQ7Cisg
ICAgICAgIGNoZWNrc3VtID0gQ29tcHV0ZVVMb25nU3VtKHRyYW5zZm9ybWVkX2J1ZiArIHRhYmxl
LnNyY19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLnNy
Y19sZW5ndGgpOworICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSghb3V0LT5Xcml0ZSh0cmFuc2Zv
cm1lZF9idWYgKyB0YWJsZS5zcmNfb2Zmc2V0LAorICAgICAgICAgICAgdGFibGUuc3JjX2xlbmd0
aCkpKSB7CisgICAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICAg
ICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAodGFibGUudGFnID09IGtHbHlmVGFi
bGVUYWcpIHsKKyAgICAgICAgICB0YWJsZS5kc3Rfb2Zmc2V0ID0gZGVzdF9vZmZzZXQ7CisKKyAg
ICAgICAgICBUYWJsZSogbG9jYV90YWJsZSA9IEZpbmRUYWJsZSgmdGFibGVzLCBrTG9jYVRhYmxl
VGFnKTsKKyAgICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSghUmVjb25zdHJ1Y3RHbHlmKHRyYW5z
Zm9ybWVkX2J1ZiArIHRhYmxlLnNyY19vZmZzZXQsCisgICAgICAgICAgICAgICZ0YWJsZSwgJmNo
ZWNrc3VtLCBsb2NhX3RhYmxlLCAmbG9jYV9jaGVja3N1bSwgaW5mbywgb3V0KSkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAodGFibGUudGFnID09IGtMb2NhVGFibGVUYWcpIHsKKyAgICAgICAg
ICAvLyBBbGwgdGhlIHdvcmsgd2FzIGRvbmUgYnkgUmVjb25zdHJ1Y3RHbHlmLiBXZSBhbHJlYWR5
IGtub3cgY2hlY2tzdW0uCisgICAgICAgICAgY2hlY2tzdW0gPSBsb2NhX2NoZWNrc3VtOworICAg
ICAgICB9IGVsc2UgaWYgKHRhYmxlLnRhZyA9PSBrSG10eFRhYmxlVGFnKSB7CisgICAgICAgICAg
dGFibGUuZHN0X29mZnNldCA9IGRlc3Rfb2Zmc2V0OworICAgICAgICAgIC8vIFRhYmxlcyBhcmUg
c29ydGVkIHNvIGFsbCB0aGUgaW5mbyB3ZSBuZWVkIGhhcyBiZWVuIGdhdGhlcmVkLgorICAgICAg
ICAgIGlmIChQUkVESUNUX0ZBTFNFKCFSZWNvbnN0cnVjdFRyYW5zZm9ybWVkSG10eCgKKyAgICAg
ICAgICAgICAgdHJhbnNmb3JtZWRfYnVmICsgdGFibGUuc3JjX29mZnNldCwgdGFibGUuc3JjX2xl
bmd0aCwKKyAgICAgICAgICAgICAgaW5mby0+bnVtX2dseXBocywgaW5mby0+bnVtX2htZXRyaWNz
LCBpbmZvLT54X21pbnMsICZjaGVja3N1bSwKKyAgICAgICAgICAgICAgb3V0KSkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVS
RSgpOyAgLy8gdHJhbnNmb3JtIHVua25vd24KKyAgICAgICAgfQorICAgICAgfQorICAgICAgbWV0
YWRhdGEtPmNoZWNrc3Vtc1tjaGVja3N1bV9rZXldID0gY2hlY2tzdW07CisgICAgfSBlbHNlIHsK
KyAgICAgIGNoZWNrc3VtID0gbWV0YWRhdGEtPmNoZWNrc3Vtc1tjaGVja3N1bV9rZXldOworICAg
IH0KKyAgICBmb250X2NoZWNrc3VtICs9IGNoZWNrc3VtOworCisgICAgLy8gdXBkYXRlIHRoZSB0
YWJsZSBlbnRyeSB3aXRoIHJlYWwgdmFsdWVzLgorICAgIFN0b3JlVTMyKHRhYmxlX2VudHJ5LCAw
LCBjaGVja3N1bSk7CisgICAgU3RvcmVVMzIodGFibGVfZW50cnksIDQsIHRhYmxlLmRzdF9vZmZz
ZXQpOworICAgIFN0b3JlVTMyKHRhYmxlX2VudHJ5LCA4LCB0YWJsZS5kc3RfbGVuZ3RoKTsKKyAg
ICBpZiAoUFJFRElDVF9GQUxTRSghb3V0LT5Xcml0ZSh0YWJsZV9lbnRyeSwKKyAgICAgICAgaW5m
by0+dGFibGVfZW50cnlfYnlfdGFnW3RhYmxlLnRhZ10gKyA0LCAxMikpKSB7CisgICAgICByZXR1
cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CisgICAgfQorCisgICAgLy8gV2UgcmVwbGFj
ZWQgMCdzLiBVcGRhdGUgb3ZlcmFsbCBjaGVja3N1bS4KKyAgICBmb250X2NoZWNrc3VtICs9IENv
bXB1dGVVTG9uZ1N1bSh0YWJsZV9lbnRyeSwgMTIpOworCisgICAgaWYgKFBSRURJQ1RfRkFMU0Uo
IVBhZDQob3V0KSkpIHsKKyAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsK
ICAgICB9Ci0gICAgY29uc3QgYXV0byBpdCA9IHNyY19ieV9kZXN0LT5maW5kKHRhYmxlLmRzdF9v
ZmZzZXQpOwotICAgIGlmIChpdCA9PSBzcmNfYnlfZGVzdC0+ZW5kKCkpIHsKLSAgICAgIGNvbnRp
bnVlOworCisgICAgaWYgKFBSRURJQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRhYmxl
LmRzdF9vZmZzZXQgKyB0YWJsZS5kc3RfbGVuZ3RoKQorICAgICAgICA+IG91dC0+U2l6ZSgpKSkg
eworICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0KLSAgICBj
b25zdCB1aW50OF90KiB0cmFuc2Zvcm1fYnVmID0gKCppdCkuc2Vjb25kOwotICAgIHNyY19ieV9k
ZXN0LT5lcmFzZSh0YWJsZS5kc3Rfb2Zmc2V0KTsKKyAgICBkZXN0X29mZnNldCA9IG91dC0+U2l6
ZSgpOworICB9CiAKLSAgICBzaXplX3QgdHJhbnNmb3JtX2xlbmd0aCA9IHRhYmxlLnRyYW5zZm9y
bV9sZW5ndGg7Ci0gICAgaWYgKFBSRURJQ1RfRkFMU0UoIVJlY29uc3RydWN0VHJhbnNmb3JtZWQo
dGFibGVzLCB0YWJsZS50YWcsCi0gICAgICAgICAgICB0cmFuc2Zvcm1fYnVmLCB0cmFuc2Zvcm1f
bGVuZ3RoLCByZXN1bHQsIHJlc3VsdF9sZW5ndGgpKSkgeworICAvLyBVcGRhdGUgJ2hlYWQnIGNo
ZWNrU3VtQWRqdXN0bWVudC4gV2UgYWxyZWFkeSBzZXQgaXQgdG8gMCBhbmQgc3VtbWVkIGZvbnQu
CisgIFRhYmxlKiBoZWFkX3RhYmxlID0gRmluZFRhYmxlKCZ0YWJsZXMsIGtIZWFkVGFibGVUYWcp
OworICBpZiAoaGVhZF90YWJsZSkgeworICAgIGlmIChQUkVESUNUX0ZBTFNFKGhlYWRfdGFibGUt
PmRzdF9sZW5ndGggPCAxMikpIHsKKyAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxV
UkUoKTsKKyAgICB9CisgICAgdWludDhfdCBjaGVja3N1bV9hZGp1c3RtZW50WzRdOworICAgIFN0
b3JlVTMyKGNoZWNrc3VtX2FkanVzdG1lbnQsIDAsIDB4QjFCMEFGQkEgLSBmb250X2NoZWNrc3Vt
KTsKKyAgICBpZiAoUFJFRElDVF9GQUxTRSghb3V0LT5Xcml0ZShjaGVja3N1bV9hZGp1c3RtZW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRfdGFibGUtPmRzdF9vZmZz
ZXQgKyA4LCA0KSkpIHsKICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsK
ICAgICB9CiAgIH0KKwogICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDb252ZXJ0V09GRjJUb1RU
Rih1aW50OF90KiByZXN1bHQsIHNpemVfdCByZXN1bHRfbGVuZ3RoLAotICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7Citib29sIFJlYWRX
T0ZGMkhlYWRlcihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBXT0ZGMkhlYWRl
ciogaGRyKSB7CiAgIEJ1ZmZlciBmaWxlKGRhdGEsIGxlbmd0aCk7CiAKICAgdWludDMyX3Qgc2ln
bmF0dXJlOwotICB1aW50MzJfdCBmbGF2b3I7CiAgIGlmIChQUkVESUNUX0ZBTFNFKCFmaWxlLlJl
YWRVMzIoJnNpZ25hdHVyZSkgfHwgc2lnbmF0dXJlICE9IGtXb2ZmMlNpZ25hdHVyZSB8fAotICAg
ICAgIWZpbGUuUmVhZFUzMigmZmxhdm9yKSkpIHsKKyAgICAgICFmaWxlLlJlYWRVMzIoJmhkci0+
Zmxhdm9yKSkpIHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0K
IApAQCAtMTAzNywxOCArMTAxNCwxNyBAQCBib29sIENvbnZlcnRXT0ZGMlRvVFRGKHVpbnQ4X3Qq
IHJlc3VsdCwgc2l6ZV90IHJlc3VsdF9sZW5ndGgsCiAgICAgICAhZmlsZS5SZWFkVTMyKCZyZXBv
cnRlZF9sZW5ndGgpIHx8IGxlbmd0aCAhPSByZXBvcnRlZF9sZW5ndGgpKSB7CiAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9Ci0gIHVpbnQxNl90IG51bV90YWJsZXM7
Ci0gIGlmIChQUkVESUNUX0ZBTFNFKCFmaWxlLlJlYWRVMTYoJm51bV90YWJsZXMpIHx8ICFudW1f
dGFibGVzKSkgeworICBpZiAoUFJFRElDVF9GQUxTRSghZmlsZS5SZWFkVTE2KCZoZHItPm51bV90
YWJsZXMpIHx8ICFoZHItPm51bV90YWJsZXMpKSB7CiAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJ
T05fRkFJTFVSRSgpOwogICB9CisKICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGVzZSBmaWVs
ZHMgb2YgdGhlIGhlYWRlcjoKICAgLy8gICB1aW50MTZfdCByZXNlcnZlZAotICAvLyAgIHVpbnQz
Ml90IHRvdGFsX3NmbnRfc2l6ZSwgdGhlIGNhbGxlciBhbHJlYWR5IHBhc3NlcyBpdCBhcyByZXN1
bHRfbGVuZ3RoCisgIC8vICAgdWludDMyX3QgdG90YWxfc2ZudF9zaXplLCB3ZSBkb24ndCBiZWxp
ZXZlIHRoaXMsIHdpbGwgY29tcHV0ZSBsYXRlcgogICBpZiAoUFJFRElDVF9GQUxTRSghZmlsZS5T
a2lwKDYpKSkgewogICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQot
ICB1aW50MzJfdCBjb21wcmVzc2VkX2xlbmd0aDsKLSAgaWYgKFBSRURJQ1RfRkFMU0UoIWZpbGUu
UmVhZFUzMigmY29tcHJlc3NlZF9sZW5ndGgpKSkgeworICBpZiAoUFJFRElDVF9GQUxTRSghZmls
ZS5SZWFkVTMyKCZoZHItPmNvbXByZXNzZWRfbGVuZ3RoKSkpIHsKICAgICByZXR1cm4gRk9OVF9D
T01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0KICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGVz
ZSBmaWVsZHMgb2YgdGhlIGhlYWRlcjoKQEAgLTEwODIsMjggKzEwNTgsMzcgQEAgYm9vbCBDb252
ZXJ0V09GRjJUb1RURih1aW50OF90KiByZXN1bHQsIHNpemVfdCByZXN1bHRfbGVuZ3RoLAogICAg
ICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0KICAgfQotICBzdGQ6
OnZlY3RvcjxUYWJsZT4gdGFibGVzKG51bV90YWJsZXMpOwotICBpZiAoUFJFRElDVF9GQUxTRSgh
UmVhZFRhYmxlRGlyZWN0b3J5KCZmaWxlLCAmdGFibGVzLCBudW1fdGFibGVzKSkpIHsKKyAgaGRy
LT50YWJsZXMucmVzaXplKGhkci0+bnVtX3RhYmxlcyk7CisgIGlmIChQUkVESUNUX0ZBTFNFKCFS
ZWFkVGFibGVEaXJlY3RvcnkoCisgICAgICAgICAgJmZpbGUsICZoZHItPnRhYmxlcywgaGRyLT5u
dW1fdGFibGVzKSkpIHsKKyAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Cisg
IH0KKworICAvLyBCZWZvcmUgd2Ugc29ydCBmb3Igb3V0cHV0IHRoZSBsYXN0IHRhYmxlIGVuZCBp
cyB0aGUgdW5jb21wcmVzc2VkIHNpemUuCisgIFRhYmxlJiBsYXN0X3RhYmxlID0gaGRyLT50YWJs
ZXMuYmFjaygpOworICBoZHItPnVuY29tcHJlc3NlZF9zaXplID0gbGFzdF90YWJsZS5zcmNfb2Zm
c2V0ICsgbGFzdF90YWJsZS5zcmNfbGVuZ3RoOworICBpZiAoUFJFRElDVF9GQUxTRShoZHItPnVu
Y29tcHJlc3NlZF9zaXplIDwgbGFzdF90YWJsZS5zcmNfb2Zmc2V0KSkgewogICAgIHJldHVybiBG
T05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQogCi0gIHVpbnQzMl90IGhlYWRlcl92ZXJz
aW9uID0gMDsKLSAgLy8gZm9yIGVhY2ggZm9udCBpbiBhIHR0YywgbWV0YWRhdGEgdG8gdXNlIHdo
ZW4gcmVidWlsZGluZwotICBzdGQ6OnZlY3RvcjxUdGNGb250PiB0dGNfZm9udHM7Ci0gIHN0ZDo6
bWFwPGNvbnN0IFRhYmxlKiwgY29uc3QgVGFibGUqPiBsb2NhX2J5X2dseWY7CisgIGhkci0+aGVh
ZGVyX3ZlcnNpb24gPSAwOwogCi0gIGlmIChmbGF2b3IgPT0ga1R0Y0ZvbnRGbGF2b3IpIHsKLSAg
ICBpZiAoUFJFRElDVF9GQUxTRSghZmlsZS5SZWFkVTMyKCZoZWFkZXJfdmVyc2lvbikpKSB7Cisg
IGlmIChoZHItPmZsYXZvciA9PSBrVHRjRm9udEZsYXZvcikgeworICAgIGlmIChQUkVESUNUX0ZB
TFNFKCFmaWxlLlJlYWRVMzIoJmhkci0+aGVhZGVyX3ZlcnNpb24pKSkgeworICAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICAgIH0KKyAgICBpZiAoUFJFRElDVF9GQUxT
RShoZHItPmhlYWRlcl92ZXJzaW9uICE9IDB4MDAwMTAwMDAKKyAgICAgICAgICAgICAgICAgICAm
JiBoZHItPmhlYWRlcl92ZXJzaW9uICE9IDB4MDAwMjAwMDApKSB7CiAgICAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgfQogICAgIHVpbnQzMl90IG51bV9mb250czsK
ICAgICBpZiAoUFJFRElDVF9GQUxTRSghUmVhZDI1NVVTaG9ydCgmZmlsZSwgJm51bV9mb250cykg
fHwgIW51bV9mb250cykpIHsKICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUo
KTsKICAgICB9Ci0gICAgdHRjX2ZvbnRzLnJlc2l6ZShudW1fZm9udHMpOworICAgIGhkci0+dHRj
X2ZvbnRzLnJlc2l6ZShudW1fZm9udHMpOwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IG51bV9mb250czsgaSsrKSB7Ci0gICAgICBUdGNGb250JiB0dGNfZm9udCA9IHR0Y19mb250c1tp
XTsKKyAgICAgIFR0Y0ZvbnQmIHR0Y19mb250ID0gaGRyLT50dGNfZm9udHNbaV07CiAgICAgICB1
aW50MzJfdCBudW1fdGFibGVzOwogICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoIVJlYWQyNTVVU2hv
cnQoJmZpbGUsICZudW1fdGFibGVzKSB8fCAhbnVtX3RhYmxlcykpIHsKICAgICAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwpAQCAtMTExNiwyNSArMTEwMSwyMSBAQCBib29s
IENvbnZlcnRXT0ZGMlRvVFRGKHVpbnQ4X3QqIHJlc3VsdCwgc2l6ZV90IHJlc3VsdF9sZW5ndGgs
CiAKICAgICAgIGNvbnN0IFRhYmxlKiBnbHlmX3RhYmxlID0gTlVMTDsKICAgICAgIGNvbnN0IFRh
YmxlKiBsb2NhX3RhYmxlID0gTlVMTDsKLSAgICAgIHVpbnQxNl90IGdseWZfaWR4OwotICAgICAg
dWludDE2X3QgbG9jYV9pZHg7CiAKICAgICAgIGZvciAodWludDMyX3QgaiA9IDA7IGogPCBudW1f
dGFibGVzOyBqKyspIHsKICAgICAgICAgdW5zaWduZWQgaW50IHRhYmxlX2lkeDsKICAgICAgICAg
aWYgKFBSRURJQ1RfRkFMU0UoIVJlYWQyNTVVU2hvcnQoJmZpbGUsICZ0YWJsZV9pZHgpKSB8fAot
ICAgICAgICAgICAgdGFibGVfaWR4ID49IHRhYmxlcy5zaXplKCkpIHsKKyAgICAgICAgICAgIHRh
YmxlX2lkeCA+PSBoZHItPnRhYmxlcy5zaXplKCkpIHsKICAgICAgICAgICByZXR1cm4gRk9OVF9D
T01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICAgIH0KICAgICAgICAgdHRjX2ZvbnQudGFibGVf
aW5kaWNlc1tqXSA9IHRhYmxlX2lkeDsKIAotICAgICAgICBjb25zdCBUYWJsZSYgdGFibGUgPSB0
YWJsZXNbdGFibGVfaWR4XTsKKyAgICAgICAgY29uc3QgVGFibGUmIHRhYmxlID0gaGRyLT50YWJs
ZXNbdGFibGVfaWR4XTsKICAgICAgICAgaWYgKHRhYmxlLnRhZyA9PSBrTG9jYVRhYmxlVGFnKSB7
CiAgICAgICAgICAgbG9jYV90YWJsZSA9ICZ0YWJsZTsKLSAgICAgICAgICBsb2NhX2lkeCA9IHRh
YmxlX2lkeDsKICAgICAgICAgfQogICAgICAgICBpZiAodGFibGUudGFnID09IGtHbHlmVGFibGVU
YWcpIHsKICAgICAgICAgICBnbHlmX3RhYmxlID0gJnRhYmxlOwotICAgICAgICAgIGdseWZfaWR4
ID0gdGFibGVfaWR4OwogICAgICAgICB9CiAKICAgICAgIH0KQEAgLTExNDUsNjUgKzExMjYsMjgg
QEAgYm9vbCBDb252ZXJ0V09GRjJUb1RURih1aW50OF90KiByZXN1bHQsIHNpemVfdCByZXN1bHRf
bGVuZ3RoLAogI2VuZGlmCiAgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUo
KTsKICAgICAgIH0KLQotICAgICAgaWYgKGdseWZfdGFibGUgIT0gTlVMTCAmJiBsb2NhX3RhYmxl
ICE9IE5VTEwpIHsKLSAgICAgICAgbG9jYV9ieV9nbHlmW2dseWZfdGFibGVdID0gbG9jYV90YWJs
ZTsKLSAgICAgIH0KICAgICB9CiAgIH0KIAotICBjb25zdCB1aW50NjRfdCBmaXJzdF90YWJsZV9v
ZmZzZXQgPQotICAgIENvbXB1dGVPZmZzZXRUb0ZpcnN0VGFibGUoaGVhZGVyX3ZlcnNpb24sIG51
bV90YWJsZXMsIHR0Y19mb250cyk7Ci0KLSAgaWYgKFBSRURJQ1RfRkFMU0UoZmlyc3RfdGFibGVf
b2Zmc2V0ID4gcmVzdWx0X2xlbmd0aCkpIHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9G
QUlMVVJFKCk7Ci0gIH0KKyAgY29uc3QgdWludDY0X3QgZmlyc3RfdGFibGVfb2Zmc2V0ID0gQ29t
cHV0ZU9mZnNldFRvRmlyc3RUYWJsZSgqaGRyKTsKIAotICB1aW50NjRfdCBjb21wcmVzc2VkX29m
ZnNldCA9IGZpbGUub2Zmc2V0KCk7Ci0gIGlmIChQUkVESUNUX0ZBTFNFKGNvbXByZXNzZWRfb2Zm
c2V0ID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkgeworICBoZHItPmNv
bXByZXNzZWRfb2Zmc2V0ID0gZmlsZS5vZmZzZXQoKTsKKyAgaWYgKFBSRURJQ1RfRkFMU0UoaGRy
LT5jb21wcmVzc2VkX29mZnNldCA+CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSkpIHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9G
QUlMVVJFKCk7CiAgIH0KLSAgdWludDY0X3Qgc3JjX29mZnNldCA9IFJvdW5kNChjb21wcmVzc2Vk
X29mZnNldCArIGNvbXByZXNzZWRfbGVuZ3RoKTsKKyAgdWludDY0X3Qgc3JjX29mZnNldCA9IFJv
dW5kNChoZHItPmNvbXByZXNzZWRfb2Zmc2V0ICsgaGRyLT5jb21wcmVzc2VkX2xlbmd0aCk7CiAg
IHVpbnQ2NF90IGRzdF9vZmZzZXQgPSBmaXJzdF90YWJsZV9vZmZzZXQ7CiAKIAotICBmb3IgKHVp
bnQxNl90IGkgPSAwOyBpIDwgbnVtX3RhYmxlczsgKytpKSB7Ci0gICAgVGFibGUqIHRhYmxlID0g
JnRhYmxlc1tpXTsKLSAgICB0YWJsZS0+ZHN0X29mZnNldCA9IGRzdF9vZmZzZXQ7Ci0gICAgZHN0
X29mZnNldCArPSB0YWJsZS0+ZHN0X2xlbmd0aDsKLSAgICBpZiAoUFJFRElDVF9GQUxTRShkc3Rf
b2Zmc2V0ID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkgewotICAgICAg
cmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwotICAgIH0KLSAgICBkc3Rfb2Zmc2V0
ID0gUm91bmQ0KGRzdF9vZmZzZXQpOwotICB9Ci0gIGlmIChQUkVESUNUX0ZBTFNFKHNyY19vZmZz
ZXQgPiBsZW5ndGggfHwgZHN0X29mZnNldCAhPSByZXN1bHRfbGVuZ3RoKSkgeworICBpZiAoUFJF
RElDVF9GQUxTRShzcmNfb2Zmc2V0ID4gbGVuZ3RoKSkgewogI2lmZGVmIEZPTlRfQ09NUFJFU1NJ
T05fQklOCiAgICAgZnByaW50ZihzdGRlcnIsICJvZmZzZXQgZmFpbDsgc3JjX29mZnNldCAlIiBQ
Ukl1NjQgIiBsZW5ndGggJWx1ICIKLSAgICAgICJkc3Rfb2Zmc2V0ICUiIFBSSXU2NCAiIHJlc3Vs
dF9sZW5ndGggJWx1XG4iLAotICAgICAgc3JjX29mZnNldCwgbGVuZ3RoLCBkc3Rfb2Zmc2V0LCBy
ZXN1bHRfbGVuZ3RoKTsKKyAgICAgICJkc3Rfb2Zmc2V0ICUiIFBSSXU2NCAiXG4iLAorICAgICAg
c3JjX29mZnNldCwgbGVuZ3RoLCBkc3Rfb2Zmc2V0KTsKICNlbmRpZgogICAgIHJldHVybiBGT05U
X0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQotCi0gIC8vIFJlLW9yZGVyIHRhYmxlcyBpbiBv
dXRwdXQgKE9UU3BlYykgb3JkZXIKLSAgc3RkOjp2ZWN0b3I8VGFibGU+IHNvcnRlZF90YWJsZXMo
dGFibGVzKTsKLSAgaWYgKGhlYWRlcl92ZXJzaW9uKSB7Ci0gICAgLy8gY29sbGVjdGlvbjsgd2Ug
aGF2ZSB0byBzb3J0IHRoZSB0YWJsZSBvZmZzZXQgdmVjdG9yIGluIGVhY2ggZm9udAotICAgIGZv
ciAoYXV0byYgdHRjX2ZvbnQgOiB0dGNfZm9udHMpIHsKLSAgICAgIHN0ZDo6bWFwPHVpbnQzMl90
LCB1aW50MTZfdD4gc29ydGVkX2luZGV4X2J5X3RhZzsKLSAgICAgIGZvciAoYXV0byB0YWJsZV9p
bmRleCA6IHR0Y19mb250LnRhYmxlX2luZGljZXMpIHsKLSAgICAgICAgc29ydGVkX2luZGV4X2J5
X3RhZ1t0YWJsZXNbdGFibGVfaW5kZXhdLnRhZ10gPSB0YWJsZV9pbmRleDsKLSAgICAgIH0KLSAg
ICAgIHVpbnQxNl90IGluZGV4ID0gMDsKLSAgICAgIGZvciAoYXV0byYgaSA6IHNvcnRlZF9pbmRl
eF9ieV90YWcpIHsKLSAgICAgICAgdHRjX2ZvbnQudGFibGVfaW5kaWNlc1tpbmRleCsrXSA9IGku
c2Vjb25kOwotICAgICAgfQotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvLyBub24tY29sbGVjdGlv
bjsgd2UgY2FuIGp1c3Qgc29ydCB0aGUgdGFibGVzCi0gICAgc3RkOjpzb3J0KHNvcnRlZF90YWJs
ZXMuYmVnaW4oKSwgc29ydGVkX3RhYmxlcy5lbmQoKSk7Ci0gIH0KLQogICBpZiAobWV0YV9vZmZz
ZXQpIHsKICAgICBpZiAoUFJFRElDVF9GQUxTRShzcmNfb2Zmc2V0ICE9IG1ldGFfb2Zmc2V0KSkg
ewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwpAQCAtMTIyOCwyOCAr
MTE3Miw1OCBAQCBib29sIENvbnZlcnRXT0ZGMlRvVFRGKHVpbnQ4X3QqIHJlc3VsdCwgc2l6ZV90
IHJlc3VsdF9sZW5ndGgsCiAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwog
ICB9CiAKKyAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFdyaXRlIGV2ZXJ5dGhpbmcgYmVmb3JlIHRo
ZSBhY3R1YWwgdGFibGUgZGF0YQorYm9vbCBXcml0ZUhlYWRlcnMoY29uc3QgdWludDhfdCogZGF0
YSwgc2l6ZV90IGxlbmd0aCwgUmVidWlsZE1ldGFkYXRhKiBtZXRhZGF0YSwKKyAgICAgICAgICAg
ICAgICAgIFdPRkYySGVhZGVyKiBoZHIsIFdPRkYyT3V0KiBvdXQpIHsKKyAgc3RkOjp2ZWN0b3I8
dWludDhfdD4gb3V0cHV0KENvbXB1dGVPZmZzZXRUb0ZpcnN0VGFibGUoKmhkciksIDApOworCisg
IC8vIFJlLW9yZGVyIHRhYmxlcyBpbiBvdXRwdXQgKE9UU3BlYykgb3JkZXIKKyAgc3RkOjp2ZWN0
b3I8VGFibGU+IHNvcnRlZF90YWJsZXMoaGRyLT50YWJsZXMpOworICBpZiAoaGRyLT5oZWFkZXJf
dmVyc2lvbikgeworICAgIC8vIGNvbGxlY3Rpb247IHdlIGhhdmUgdG8gc29ydCB0aGUgdGFibGUg
b2Zmc2V0IHZlY3RvciBpbiBlYWNoIGZvbnQKKyAgICBmb3IgKGF1dG8mIHR0Y19mb250IDogaGRy
LT50dGNfZm9udHMpIHsKKyAgICAgIHN0ZDo6bWFwPHVpbnQzMl90LCB1aW50MTZfdD4gc29ydGVk
X2luZGV4X2J5X3RhZzsKKyAgICAgIGZvciAoYXV0byB0YWJsZV9pbmRleCA6IHR0Y19mb250LnRh
YmxlX2luZGljZXMpIHsKKyAgICAgICAgc29ydGVkX2luZGV4X2J5X3RhZ1toZHItPnRhYmxlc1t0
YWJsZV9pbmRleF0udGFnXSA9IHRhYmxlX2luZGV4OworICAgICAgfQorICAgICAgdWludDE2X3Qg
aW5kZXggPSAwOworICAgICAgZm9yIChhdXRvJiBpIDogc29ydGVkX2luZGV4X2J5X3RhZykgewor
ICAgICAgICB0dGNfZm9udC50YWJsZV9pbmRpY2VzW2luZGV4KytdID0gaS5zZWNvbmQ7CisgICAg
ICB9CisgICAgfQorICB9IGVsc2UgeworICAgIC8vIG5vbi1jb2xsZWN0aW9uOyB3ZSBjYW4ganVz
dCBzb3J0IHRoZSB0YWJsZXMKKyAgICBzdGQ6OnNvcnQoc29ydGVkX3RhYmxlcy5iZWdpbigpLCBz
b3J0ZWRfdGFibGVzLmVuZCgpKTsKKyAgfQorCiAgIC8vIFN0YXJ0IGJ1aWxkaW5nIHRoZSBmb250
CisgIHVpbnQ4X3QqIHJlc3VsdCA9ICZvdXRwdXRbMF07CiAgIHNpemVfdCBvZmZzZXQgPSAwOwot
ICBzaXplX3Qgb2Zmc2V0X3RhYmxlID0gMDsKLSAgaWYgKGhlYWRlcl92ZXJzaW9uKSB7CisgIGlm
IChoZHItPmhlYWRlcl92ZXJzaW9uKSB7CiAgICAgLy8gVFRDIGhlYWRlcgotICAgIG9mZnNldCA9
IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCBmbGF2b3IpOyAgLy8gVEFHIFRUQ1RhZwotICAgIG9m
ZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCBoZWFkZXJfdmVyc2lvbik7ICAvLyBGSVhF
RCBWZXJzaW9uCi0gICAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIHR0Y19mb250
cy5zaXplKCkpOyAgLy8gVUxPTkcgbnVtRm9udHMKKyAgICBvZmZzZXQgPSBTdG9yZVUzMihyZXN1
bHQsIG9mZnNldCwgaGRyLT5mbGF2b3IpOyAgLy8gVEFHIFRUQ1RhZworICAgIG9mZnNldCA9IFN0
b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCBoZHItPmhlYWRlcl92ZXJzaW9uKTsgIC8vIEZJWEVEIFZl
cnNpb24KKyAgICBvZmZzZXQgPSBTdG9yZVUzMihyZXN1bHQsIG9mZnNldCwgaGRyLT50dGNfZm9u
dHMuc2l6ZSgpKTsgIC8vIFVMT05HIG51bUZvbnRzCiAgICAgLy8gU3BhY2UgZm9yIFVMT05HIE9m
ZnNldFRhYmxlW251bUZvbnRzXSAoemVyb2VkIGluaXRpYWxseSkKLSAgICBvZmZzZXRfdGFibGUg
PSBvZmZzZXQ7ICAvLyBrZWVwIHN0YXJ0IG9mIG9mZnNldCB0YWJsZSBmb3IgbGF0ZXIKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHR0Y19mb250cy5zaXplKCk7IGkrKykgeworICAgIHNpemVf
dCBvZmZzZXRfdGFibGUgPSBvZmZzZXQ7ICAvLyBrZWVwIHN0YXJ0IG9mIG9mZnNldCB0YWJsZSBm
b3IgbGF0ZXIKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhkci0+dHRjX2ZvbnRzLnNpemUo
KTsgaSsrKSB7CiAgICAgICBvZmZzZXQgPSBTdG9yZVUzMihyZXN1bHQsIG9mZnNldCwgMCk7ICAv
LyB3aWxsIGZpbGwgcmVhbCB2YWx1ZXMgaW4gbGF0ZXIKICAgICB9CiAgICAgLy8gc3BhY2UgZm9y
IERTSUcgZmllbGRzIGZvciBoZWFkZXIgdjIKLSAgICBpZiAoaGVhZGVyX3ZlcnNpb24gPT0gMHgw
MDAyMDAwMCkgeworICAgIGlmIChoZHItPmhlYWRlcl92ZXJzaW9uID09IDB4MDAwMjAwMDApIHsK
ICAgICAgIG9mZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCAwKTsgIC8vIFVMT05HIHVs
RHNpZ1RhZwogICAgICAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIDApOyAgLy8g
VUxPTkcgdWxEc2lnTGVuZ3RoCiAgICAgICBvZmZzZXQgPSBTdG9yZVUzMihyZXN1bHQsIG9mZnNl
dCwgMCk7ICAvLyBVTE9ORyB1bERzaWdPZmZzZXQKICAgICB9CiAKICAgICAvLyB3cml0ZSBPZmZz
ZXQgVGFibGVzIGFuZCBzdG9yZSB0aGUgbG9jYXRpb24gb2YgZWFjaCBpbiBUVEMgSGVhZGVyCi0g
ICAgZm9yIChhdXRvJiB0dGNfZm9udCA6IHR0Y19mb250cykgeworICAgIG1ldGFkYXRhLT5mb250
X2luZm9zLnJlc2l6ZShoZHItPnR0Y19mb250cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaGRyLT50dGNfZm9udHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgIFR0Y0ZvbnQmIHR0
Y19mb250ID0gaGRyLT50dGNfZm9udHNbaV07CisKICAgICAgIC8vIHdyaXRlIE9mZnNldCBUYWJs
ZSBsb2NhdGlvbiBpbnRvIFRUQyBIZWFkZXIKICAgICAgIG9mZnNldF90YWJsZSA9IFN0b3JlVTMy
KHJlc3VsdCwgb2Zmc2V0X3RhYmxlLCBvZmZzZXQpOwogCkBAIC0xMjU4LDk5ICsxMjMyLDgyIEBA
IGJvb2wgQ29udmVydFdPRkYyVG9UVEYodWludDhfdCogcmVzdWx0LCBzaXplX3QgcmVzdWx0X2xl
bmd0aCwKICAgICAgIG9mZnNldCA9IFN0b3JlT2Zmc2V0VGFibGUocmVzdWx0LCBvZmZzZXQsIHR0
Y19mb250LmZsYXZvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRjX2ZvbnQu
dGFibGVfaW5kaWNlcy5zaXplKCkpOwogCi0gICAgICAvLyB3cml0ZSB0YWJsZSBlbnRyaWVzCiAg
ICAgICBmb3IgKGNvbnN0IGF1dG8gdGFibGVfaW5kZXggOiB0dGNfZm9udC50YWJsZV9pbmRpY2Vz
KSB7Ci0gICAgICAgIG9mZnNldCA9IFN0b3JlVGFibGVFbnRyeShyZXN1bHQsIHRhYmxlc1t0YWJs
ZV9pbmRleF0sIG9mZnNldCk7CisgICAgICAgIHVpbnQzMl90IHRhZyA9IGhkci0+dGFibGVzW3Rh
YmxlX2luZGV4XS50YWc7CisgICAgICAgIG1ldGFkYXRhLT5mb250X2luZm9zW2ldLnRhYmxlX2Vu
dHJ5X2J5X3RhZ1t0YWddID0gb2Zmc2V0OworICAgICAgICBvZmZzZXQgPSBTdG9yZVRhYmxlRW50
cnkocmVzdWx0LCBvZmZzZXQsIHRhZyk7CiAgICAgICB9CisKKyAgICAgIHR0Y19mb250LmhlYWRl
cl9jaGVja3N1bSA9IENvbXB1dGVVTG9uZ1N1bSgmb3V0cHV0W3R0Y19mb250LmRzdF9vZmZzZXRd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNl
dCAtIHR0Y19mb250LmRzdF9vZmZzZXQpOwogICAgIH0KICAgfSBlbHNlIHsKLSAgICBvZmZzZXQg
PSBTdG9yZU9mZnNldFRhYmxlKHJlc3VsdCwgb2Zmc2V0LCBmbGF2b3IsIG51bV90YWJsZXMpOwot
ICAgIGZvciAodWludDE2X3QgaSA9IDA7IGkgPCBudW1fdGFibGVzOyArK2kpIHsKLSAgICAgIG9m
ZnNldCA9IFN0b3JlVGFibGVFbnRyeShyZXN1bHQsIHNvcnRlZF90YWJsZXNbaV0sIG9mZnNldCk7
CisgICAgbWV0YWRhdGEtPmZvbnRfaW5mb3MucmVzaXplKDEpOworICAgIG9mZnNldCA9IFN0b3Jl
T2Zmc2V0VGFibGUocmVzdWx0LCBvZmZzZXQsIGhkci0+Zmxhdm9yLCBoZHItPm51bV90YWJsZXMp
OworICAgIGZvciAodWludDE2X3QgaSA9IDA7IGkgPCBoZHItPm51bV90YWJsZXM7ICsraSkgewor
ICAgICAgbWV0YWRhdGEtPmZvbnRfaW5mb3NbMF0udGFibGVfZW50cnlfYnlfdGFnW3NvcnRlZF90
YWJsZXNbaV0udGFnXSA9IG9mZnNldDsKKyAgICAgIG9mZnNldCA9IFN0b3JlVGFibGVFbnRyeShy
ZXN1bHQsIG9mZnNldCwgc29ydGVkX3RhYmxlc1tpXS50YWcpOwogICAgIH0KICAgfQogCi0gIHN0
ZDo6dmVjdG9yPHVpbnQ4X3Q+IHVuY29tcHJlc3NlZF9idWY7Ci0gIGNvbnN0IHVpbnQ4X3QqIHRy
YW5zZm9ybV9idWYgPSBOVUxMOwotICB1aW50NjRfdCB0b3RhbF9zaXplID0gMDsKLSAgZm9yICh1
aW50MTZfdCBpID0gMDsgaSA8IG51bV90YWJsZXM7ICsraSkgewotICAgIHRvdGFsX3NpemUgKz0g
dGFibGVzW2ldLnRyYW5zZm9ybV9sZW5ndGg7Ci0gICAgaWYgKFBSRURJQ1RfRkFMU0UodG90YWxf
c2l6ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpIHsKLSAgICAgIHJl
dHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9Ci0gIH0KLSAgdW5jb21wcmVz
c2VkX2J1Zi5yZXNpemUodG90YWxfc2l6ZSk7Ci0gIGNvbnN0IHVpbnQ4X3QqIHNyY19idWYgPSBk
YXRhICsgY29tcHJlc3NlZF9vZmZzZXQ7Ci0gIGlmIChQUkVESUNUX0ZBTFNFKCFXb2ZmMlVuY29t
cHJlc3MoJnVuY29tcHJlc3NlZF9idWZbMF0sIHRvdGFsX3NpemUsCi0gICAgICAgICAgICAgICAg
ICAgICAgIHNyY19idWYsIGNvbXByZXNzZWRfbGVuZ3RoKSkpIHsKKyAgaWYgKFBSRURJQ1RfRkFM
U0UoIW91dC0+V3JpdGUoJm91dHB1dFswXSwgb3V0cHV0LnNpemUoKSkpKSB7CiAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9CisgIG1ldGFkYXRhLT5oZWFkZXJfY2hl
Y2tzdW0gPSBDb21wdXRlVUxvbmdTdW0oJm91dHB1dFswXSwgb3V0cHV0LnNpemUoKSk7CisgIHJl
dHVybiB0cnVlOworfQogCi0gIC8vIHJvdW5kIDEsIGNvcHkgYWNyb3NzIGFsbCB0aGUgdW5tb2Rp
ZmllZCB0YWJsZXMKLSAgdHJhbnNmb3JtX2J1ZiA9ICZ1bmNvbXByZXNzZWRfYnVmWzBdOwotICBj
b25zdCB1aW50OF90KiBjb25zdCB0cmFuc2Zvcm1fYnVmX2VuZCA9ICZ1bmNvbXByZXNzZWRfYnVm
WzBdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB1bmNvbXBy
ZXNzZWRfYnVmLnNpemUoKTsKK30gIC8vIG5hbWVzcGFjZQogCi0gIC8vIFdlIHdpcGUgb3V0IHRo
ZSB2YWx1ZXMgYXMgdGhleSBnZXQgd3JpdHRlbiBpbnRvIHRoZSBmaW5hbCByZXN1bHQgdG8gZGVk
dXAKLSAgc3RkOjptYXA8dWludDMyX3QsIGNvbnN0IHVpbnQ4X3QqPiBzcmNfYnlfZGVzdDsKLSAg
Zm9yICh1aW50MTZfdCBpID0gMDsgaSA8IG51bV90YWJsZXM7ICsraSkgewotICAgIGNvbnN0IFRh
YmxlKiB0YWJsZSA9ICZ0YWJsZXNbaV07Ci0gICAgc2l6ZV90IHRyYW5zZm9ybV9sZW5ndGggPSB0
YWJsZS0+dHJhbnNmb3JtX2xlbmd0aDsKK3NpemVfdCBDb21wdXRlV09GRjJGaW5hbFNpemUoY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeworICBCdWZmZXIgZmlsZShkYXRhLCBs
ZW5ndGgpOworICB1aW50MzJfdCB0b3RhbF9sZW5ndGg7CiAKLSAgICBzcmNfYnlfZGVzdFt0YWJs
ZS0+ZHN0X29mZnNldF0gPSB0cmFuc2Zvcm1fYnVmOworICBpZiAoIWZpbGUuU2tpcCgxNikgfHwK
KyAgICAgICFmaWxlLlJlYWRVMzIoJnRvdGFsX2xlbmd0aCkpIHsKKyAgICByZXR1cm4gMDsKKyAg
fQorICByZXR1cm4gdG90YWxfbGVuZ3RoOworfQogCi0gICAgaWYgKFBSRURJQ1RfRkFMU0UodHJh
bnNmb3JtX2J1ZiArIHRyYW5zZm9ybV9sZW5ndGggPiB0cmFuc2Zvcm1fYnVmX2VuZCkpIHsKLSAg
ICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9Ci0gICAgdHJhbnNm
b3JtX2J1ZiArPSB0cmFuc2Zvcm1fbGVuZ3RoOworYm9vbCBDb252ZXJ0V09GRjJUb1RURih1aW50
OF90ICpyZXN1bHQsIHNpemVfdCByZXN1bHRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoKSB7CisgIFdPRkYyTWVtb3J5T3V0
IG91dChyZXN1bHQsIHJlc3VsdF9sZW5ndGgpOworICByZXR1cm4gQ29udmVydFdPRkYyVG9UVEYo
ZGF0YSwgbGVuZ3RoLCAmb3V0KTsKK30KKworYm9vbCBDb252ZXJ0V09GRjJUb1RURihjb25zdCB1
aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBXT0ZG
Mk91dCogb3V0KSB7CisgIFJlYnVpbGRNZXRhZGF0YSBtZXRhZGF0YTsKKyAgV09GRjJIZWFkZXIg
aGRyOworICBpZiAoIVJlYWRXT0ZGMkhlYWRlcihkYXRhLCBsZW5ndGgsICZoZHIpKSB7CisgICAg
cmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9CiAKLSAgZm9yICh1aW50MTZf
dCBpID0gMDsgaSA8IG51bV90YWJsZXM7ICsraSkgewotICAgIGNvbnN0IFRhYmxlKiB0YWJsZSA9
ICZ0YWJsZXNbaV07Ci0gICAgY29uc3Qgc2l6ZV90IHRyYW5zZm9ybV9sZW5ndGggPSB0YWJsZS0+
dHJhbnNmb3JtX2xlbmd0aDsKKyAgaWYgKCFXcml0ZUhlYWRlcnMoZGF0YSwgbGVuZ3RoLCAmbWV0
YWRhdGEsICZoZHIsIG91dCkpIHsKKyAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJF
KCk7CisgIH0KIAotICAgIGlmICgodGFibGUtPmZsYWdzICYga1dvZmYyRmxhZ3NUcmFuc2Zvcm0p
ICE9IGtXb2ZmMkZsYWdzVHJhbnNmb3JtKSB7Ci0gICAgICBpZiAoUFJFRElDVF9GQUxTRSh0cmFu
c2Zvcm1fbGVuZ3RoICE9IHRhYmxlLT5kc3RfbGVuZ3RoKSkgewotICAgICAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9Ci0gICAgICBpZiAoUFJFRElDVF9GQUxT
RShzdGF0aWNfY2FzdDx1aW50NjRfdD4odGFibGUtPmRzdF9vZmZzZXQgKwotICAgICAgICAgIHRy
YW5zZm9ybV9sZW5ndGgpID4gcmVzdWx0X2xlbmd0aCkpIHsKLSAgICAgICAgcmV0dXJuIEZPTlRf
Q09NUFJFU1NJT05fRkFJTFVSRSgpOwotICAgICAgfQotICAgICAgdHJhbnNmb3JtX2J1ZiA9IHNy
Y19ieV9kZXN0W3RhYmxlLT5kc3Rfb2Zmc2V0XTsKLSAgICAgIHNyY19ieV9kZXN0LmVyYXNlKHRh
YmxlLT5kc3Rfb2Zmc2V0KTsKLSAgICAgIHN0ZDo6bWVtY3B5KHJlc3VsdCArIHRhYmxlLT5kc3Rf
b2Zmc2V0LCB0cmFuc2Zvcm1fYnVmLCB0cmFuc2Zvcm1fbGVuZ3RoKTsKLSAgICB9CisgIGNvbnN0
IGZsb2F0IGNvbXByZXNzaW9uX3JhdGlvID0gKGZsb2F0KSBoZHIudW5jb21wcmVzc2VkX3NpemUg
LyBsZW5ndGg7CisgIGlmIChjb21wcmVzc2lvbl9yYXRpbyA+IGtNYXhQbGF1c2libGVDb21wcmVz
c2lvblJhdGlvKSB7CisjaWZkZWYgRk9OVF9DT01QUkVTU0lPTl9CSU4KKyAgICBmcHJpbnRmKHN0
ZGVyciwgIkltcGxhdXNpYmxlIGNvbXByZXNzaW9uIHJhdGlvICUuMDFmXG4iLCBjb21wcmVzc2lv
bl9yYXRpbyk7CisjZW5kaWYKKyAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7
CiAgIH0KIAotICAvLyByb3VuZCAyLCByZWNvbnN0cnVjdCB0cmFuc2Zvcm1lZCB0YWJsZXMKLSAg
aWYgKFBSRURJQ1RfRkFMU0UoaGVhZGVyX3ZlcnNpb24pKSB7Ci0gICAgLy8gUmVidWlsZCBjb2xs
ZWN0aW9uIGZvbnQgYnkgZm9udC4KLSAgICBzdGQ6OnZlY3RvcjxUYWJsZT4gZm9udF90YWJsZXM7
Ci0gICAgZm9yIChjb25zdCBhdXRvJiB0dGNfZm9udCA6IHR0Y19mb250cykgewotICAgICAgZm9u
dF90YWJsZXMucmVzaXplKHR0Y19mb250LnRhYmxlX2luZGljZXMuc2l6ZSgpKTsKLSAgICAgIGZv
ciAoYXV0byBpID0gMDsgaSA8IHR0Y19mb250LnRhYmxlX2luZGljZXMuc2l6ZSgpOyBpKyspIHsK
LSAgICAgICAgZm9udF90YWJsZXNbaV0gPSB0YWJsZXNbdHRjX2ZvbnQudGFibGVfaW5kaWNlc1tp
XV07Ci0gICAgICB9Ci0gICAgICBpZiAoUFJFRElDVF9GQUxTRSghUmVjb25zdHJ1Y3RUcmFuc2Zv
cm1lZEZvbnQoZm9udF90YWJsZXMsICZzcmNfYnlfZGVzdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsIHJlc3VsdF9sZW5ndGgpKSkg
ewotICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9Ci0g
ICAgfQotICB9IGVsc2UgewotICAgIGlmIChQUkVESUNUX0ZBTFNFKCFSZWNvbnN0cnVjdFRyYW5z
Zm9ybWVkRm9udCh0YWJsZXMsICZzcmNfYnlfZGVzdCwgcmVzdWx0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfbGVuZ3RoKSkpIHsKLSAg
ICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9CisgIGNvbnN0IHVp
bnQ4X3QqIHNyY19idWYgPSBkYXRhICsgaGRyLmNvbXByZXNzZWRfb2Zmc2V0OworICBzdGQ6OnZl
Y3Rvcjx1aW50OF90PiB1bmNvbXByZXNzZWRfYnVmKGhkci51bmNvbXByZXNzZWRfc2l6ZSk7Cisg
IGlmIChQUkVESUNUX0ZBTFNFKCFXb2ZmMlVuY29tcHJlc3MoJnVuY29tcHJlc3NlZF9idWZbMF0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRyLnVuY29tcHJlc3NlZF9z
aXplLCBzcmNfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkci5j
b21wcmVzc2VkX2xlbmd0aCkpKSB7CisgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVS
RSgpOwogICB9CiAKLSAgaWYgKGhlYWRlcl92ZXJzaW9uKSB7Ci0gICAgaWYgKFBSRURJQ1RfRkFM
U0UoCi0gICAgICAgICFGaXhDb2xsZWN0aW9uQ2hlY2tzdW1zKGhlYWRlcl92ZXJzaW9uLCB0YWJs
ZXMsIHR0Y19mb250cywgcmVzdWx0KSkpIHsKLSAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9O
X0ZBSUxVUkUoKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKFBSRURJQ1RfRkFMU0UoIUZp
eENoZWNrc3Vtcyhzb3J0ZWRfdGFibGVzLCByZXN1bHQpKSkgeworICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1ldGFkYXRhLmZvbnRfaW5mb3Muc2l6ZSgpOyBpKyspIHsKKyAgICBpZiAoUFJFRElD
VF9GQUxTRSghUmVjb25zdHJ1Y3RGb250KCZ1bmNvbXByZXNzZWRfYnVmWzBdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRyLnVuY29tcHJlc3NlZF9zaXplLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1ldGFkYXRhLCAmaGRyLCBpLCBv
dXQpKSkgewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0K
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2RlYy5o
IGIvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2RlYy5oCmluZGV4IDc0YmE3ZjUu
LmI4ODk4MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9k
ZWMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfZGVjLmgKQEAgLTE5
LDYgKzE5LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPGludHR5cGVzLmg+
CisjaW5jbHVkZSAiLi93b2ZmMl9vdXQuaCIKIAogbmFtZXNwYWNlIHdvZmYyIHsKIApAQCAtMjgs
OSArMjksMTYgQEAgc2l6ZV90IENvbXB1dGVXT0ZGMkZpbmFsU2l6ZShjb25zdCB1aW50OF90ICpk
YXRhLCBzaXplX3QgbGVuZ3RoKTsKIC8vIERlY29tcHJlc3NlcyB0aGUgZm9udCBpbnRvIHRoZSB0
YXJnZXQgYnVmZmVyLiBUaGUgcmVzdWx0X2xlbmd0aCBzaG91bGQKIC8vIGJlIHRoZSBzYW1lIGFz
IGRldGVybWluZWQgYnkgQ29tcHV0ZUZpbmFsU2l6ZSgpLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vz
c2Z1bAogLy8gZGVjb21wcmVzc2lvbi4KKy8vIERFUFJFQ0FURUQ7IHBsZWFzZSBwcmVmZXIgdGhl
IHZlcnNpb24gdGhhdCB0YWtlcyBhIFdPRkYyT3V0KgogYm9vbCBDb252ZXJ0V09GRjJUb1RURih1
aW50OF90ICpyZXN1bHQsIHNpemVfdCByZXN1bHRfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoKTsKIAorLy8gRGVjb21wcmVz
c2VzIHRoZSBmb250IGludG8gb3V0LiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4KKy8vIFdvcmtz
IGV2ZW4gaWYgV09GRjJIZWFkZXIgdG90YWxTZm50U2l6ZSBpcyB3cm9uZy4KKy8vIFBsZWFzZSBw
cmVmZXIgdGhpcyBBUEkuCitib29sIENvbnZlcnRXT0ZGMlRvVFRGKGNvbnN0IHVpbnQ4X3QgKmRh
dGEsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIFdPRkYyT3V0KiBvdXQp
OworCiB9IC8vIG5hbWVzcGFjZSB3b2ZmMgogCiAjZW5kaWYgIC8vIFdPRkYyX1dPRkYyX0RFQ19I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2RlY29tcHJl
c3MuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfZGVjb21wcmVzcy5jYwpp
bmRleCA3NjY4YzRlLi5mMjljNzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2Zm
Mi9zcmMvd29mZjJfZGVjb21wcmVzcy5jYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9z
cmMvd29mZjJfZGVjb21wcmVzcy5jYwpAQCAtMTcsMTAgKzE3LDEwIEBACiAKICNpbmNsdWRlIDxz
dHJpbmc+CiAKLQotI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICIuL2ZpbGUuaCIKICNpbmNs
dWRlICIuL3dvZmYyX2RlYy5oIgogCisKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikg
ewogICB1c2luZyBzdGQ6OnN0cmluZzsKIApAQCAtMzEsMjQgKzMxLDE4IEBAIGludCBtYWluKGlu
dCBhcmdjLCBjaGFyICoqYXJndikgewogCiAgIHN0cmluZyBmaWxlbmFtZShhcmd2WzFdKTsKICAg
c3RyaW5nIG91dGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyKDAsIGZpbGVuYW1lLmZpbmRfbGFz
dF9vZigiLiIpKSArICIudHRmIjsKLSAgZnByaW50ZihzdGRvdXQsICJQcm9jZXNzaW5nICVzID0+
ICVzXG4iLAotICAgIGZpbGVuYW1lLmNfc3RyKCksIG91dGZpbGVuYW1lLmNfc3RyKCkpOworCiAg
IHN0cmluZyBpbnB1dCA9IHdvZmYyOjpHZXRGaWxlQ29udGVudChmaWxlbmFtZSk7CisgIGNvbnN0
IHVpbnQ4X3QqIHJhd19pbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlu
cHV0LmRhdGEoKSk7CisgIHN0cmluZyBvdXRwdXQoc3RkOjptaW4od29mZjI6OkNvbXB1dGVXT0ZG
MkZpbmFsU2l6ZShyYXdfaW5wdXQsIGlucHV0LnNpemUoKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgd29mZjI6OmtEZWZhdWx0TWF4U2l6ZSksIDApOworICB3b2ZmMjo6V09GRjJTdHJpbmdP
dXQgb3V0KCZvdXRwdXQpOwogCi0gIHNpemVfdCBkZWNvbXByZXNzZWRfc2l6ZSA9IHdvZmYyOjpD
b21wdXRlV09GRjJGaW5hbFNpemUoCi0gICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCkpOwotICBzdHJpbmcgb3V0cHV0KGRlY29t
cHJlc3NlZF9zaXplLCAwKTsKLSAgY29uc3QgYm9vbCBvayA9IHdvZmYyOjpDb252ZXJ0V09GRjJU
b1RURigKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZvdXRwdXRbMF0pLCBkZWNv
bXByZXNzZWRfc2l6ZSwKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlu
cHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSk7CisgIGNvbnN0IGJvb2wgb2sgPSB3b2ZmMjo6Q29u
dmVydFdPRkYyVG9UVEYocmF3X2lucHV0LCBpbnB1dC5zaXplKCksICZvdXQpOwogCi0gIGlmICgh
b2spIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkRlY29tcHJlc3Npb24gZmFpbGVkXG4iKTsKLSAg
ICByZXR1cm4gMTsKKyAgaWYgKG9rKSB7CisgICAgd29mZjI6OlNldEZpbGVDb250ZW50cyhvdXRm
aWxlbmFtZSwgb3V0cHV0LmJlZ2luKCksCisgICAgICAgIG91dHB1dC5iZWdpbigpICsgb3V0LlNp
emUoKSk7CiAgIH0KLQotICB3b2ZmMjo6U2V0RmlsZUNvbnRlbnRzKG91dGZpbGVuYW1lLCBvdXRw
dXQpOwotCi0gIHJldHVybiAwOworICByZXR1cm4gb2sgPyAwIDogMTsKIH0KLQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2VuYy5jYyBiL1NvdXJjZS9UaGly
ZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9lbmMuY2MKaW5kZXggNTI1NWFhNS4uZDEwMGFkNSAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2VuYy5jYworKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfZW5jLmNjCkBAIC0yMyw4ICsyMyw4IEBA
CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgIi4vY29t
cHJlc3Nvci5oIgogI2luY2x1ZGUgIi4vYnVmZmVyLmgiCi0jaW5jbHVkZSAiLi9lbmNvZGUuaCIK
ICNpbmNsdWRlICIuL2ZvbnQuaCIKICNpbmNsdWRlICIuL25vcm1hbGl6ZS5oIgogI2luY2x1ZGUg
Ii4vcm91bmQuaCIKQEAgLTQ3LDYgKzQ3LDcgQEAgdXNpbmcgc3RkOjp2ZWN0b3I7CiBjb25zdCBz
aXplX3Qga1dvZmYySGVhZGVyU2l6ZSA9IDQ4OwogY29uc3Qgc2l6ZV90IGtXb2ZmMkVudHJ5U2l6
ZSA9IDIwOwogCisKIGJvb2wgQ29tcHJlc3MoY29uc3QgdWludDhfdCogZGF0YSwgY29uc3Qgc2l6
ZV90IGxlbiwKICAgICAgICAgICAgICAgdWludDhfdCogcmVzdWx0LCB1aW50MzJfdCogcmVzdWx0
X2xlbiwKICAgICAgICAgICAgICAgYnJvdGxpOjpCcm90bGlQYXJhbXM6Ok1vZGUgbW9kZSwgaW50
IHF1YWxpdHkpIHsKQEAgLTEyMCw3ICsxMjEsNyBAQCBzaXplX3QgQ29tcHV0ZVdvZmYyTGVuZ3Ro
KGNvbnN0IEZvbnRDb2xsZWN0aW9uJiBmb250X2NvbGxlY3Rpb24sCiAgIH0KIAogICAvLyBmb3Ig
Y29sbGVjdGlvbnMgb25seSwgY29sbGVjdGlvbiB0YWJsZXMKLSAgaWYgKGZvbnRfY29sbGVjdGlv
bi5mb250cy5zaXplKCkgPiAxKSB7CisgIGlmIChmb250X2NvbGxlY3Rpb24uZmxhdm9yID09IGtU
dGNGb250Rmxhdm9yKSB7CiAgICAgc2l6ZSArPSA0OyAgLy8gVUludDMyIFZlcnNpb24gb2YgVFRD
IEhlYWRlcgogICAgIHNpemUgKz0gU2l6ZTI1NVVTaG9ydChmb250X2NvbGxlY3Rpb24uZm9udHMu
c2l6ZSgpKTsgIC8vIDI1NVVJbnQxNiBudW1Gb250cwogCkBAIC0xNDcsMTQgKzE0OCw2IEBAIHNp
emVfdCBDb21wdXRlV29mZjJMZW5ndGgoY29uc3QgRm9udENvbGxlY3Rpb24mIGZvbnRfY29sbGVj
dGlvbiwKICAgcmV0dXJuIHNpemU7CiB9CiAKLXNpemVfdCBDb21wdXRlVFRGTGVuZ3RoKGNvbnN0
IHN0ZDo6dmVjdG9yPFRhYmxlPiYgdGFibGVzKSB7Ci0gIHNpemVfdCBzaXplID0gMTIgKyAxNiAq
IHRhYmxlcy5zaXplKCk7ICAvLyBzZm50IGhlYWRlcgotICBmb3IgKGNvbnN0IGF1dG8mIHRhYmxl
IDogdGFibGVzKSB7Ci0gICAgc2l6ZSArPSBSb3VuZDQodGFibGUuc3JjX2xlbmd0aCk7Ci0gIH0K
LSAgcmV0dXJuIHNpemU7Ci19Ci0KIHNpemVfdCBDb21wdXRlVW5jb21wcmVzc2VkTGVuZ3RoKGNv
bnN0IEZvbnQmIGZvbnQpIHsKICAgLy8gc2ZudCBoZWFkZXIgKyBvZmZzZXQgdGFibGUKICAgc2l6
ZV90IHNpemUgPSAxMiArIDE2ICogZm9udC5udW1fdGFibGVzOwpAQCAtMTY4LDcgKzE2MSw3IEBA
IHNpemVfdCBDb21wdXRlVW5jb21wcmVzc2VkTGVuZ3RoKGNvbnN0IEZvbnQmIGZvbnQpIHsKIH0K
IAogc2l6ZV90IENvbXB1dGVVbmNvbXByZXNzZWRMZW5ndGgoY29uc3QgRm9udENvbGxlY3Rpb24m
IGZvbnRfY29sbGVjdGlvbikgewotICBpZiAoZm9udF9jb2xsZWN0aW9uLmZvbnRzLnNpemUoKSA9
PSAxKSB7CisgIGlmIChmb250X2NvbGxlY3Rpb24uZmxhdm9yICE9IGtUdGNGb250Rmxhdm9yKSB7
CiAgICAgcmV0dXJuIENvbXB1dGVVbmNvbXByZXNzZWRMZW5ndGgoZm9udF9jb2xsZWN0aW9uLmZv
bnRzWzBdKTsKICAgfQogICBzaXplX3Qgc2l6ZSA9IENvbGxlY3Rpb25IZWFkZXJTaXplKGZvbnRf
Y29sbGVjdGlvbi5oZWFkZXJfdmVyc2lvbiwKQEAgLTI3OSwyMCArMjcyLDIyIEBAIGJvb2wgQ29u
dmVydFRURlRvV09GRjIoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbmd0aCwKICAgc3Rk
Ojp2ZWN0b3I8dWludDhfdD4gY29tcHJlc3Npb25fYnVmKGNvbXByZXNzaW9uX2J1ZmZlcl9zaXpl
KTsKICAgdWludDMyX3QgdG90YWxfY29tcHJlc3NlZF9sZW5ndGggPSBjb21wcmVzc2lvbl9idWZm
ZXJfc2l6ZTsKIAotICAvLyBDb2xsZWN0IGFsbCB0cmFuc2Zvcm1lZCBkYXRhIGludG8gb25lIHBs
YWNlLgorICAvLyBDb2xsZWN0IGFsbCB0cmFuc2Zvcm1lZCBkYXRhIGludG8gb25lIHBsYWNlIGlu
IG91dHB1dCBvcmRlci4KICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gdHJhbnNmb3JtX2J1Zih0b3Rh
bF90cmFuc2Zvcm1fbGVuZ3RoKTsKICAgc2l6ZV90IHRyYW5zZm9ybV9vZmZzZXQgPSAwOwogICBm
b3IgKGNvbnN0IGF1dG8mIGZvbnQgOiBmb250X2NvbGxlY3Rpb24uZm9udHMpIHsKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIGkgOiBmb250LnRhYmxlcykgewotICAgICAgY29uc3QgRm9udDo6VGFibGUq
IHRhYmxlID0gZm9udC5GaW5kVGFibGUoaS5zZWNvbmQudGFnIF4gMHg4MDgwODA4MCk7Ci0gICAg
ICBpZiAoaS5zZWNvbmQuSXNSZXVzZWQoKSkgY29udGludWU7Ci0gICAgICBpZiAoaS5zZWNvbmQu
dGFnICYgMHg4MDgwODA4MCkgY29udGludWU7CisgICAgZm9yIChjb25zdCBhdXRvIHRhZyA6IGZv
bnQuT3V0cHV0T3JkZXJlZFRhZ3MoKSkgeworICAgICAgY29uc3QgRm9udDo6VGFibGUmIG9yaWdp
bmFsID0gZm9udC50YWJsZXMuYXQodGFnKTsKKyAgICAgIGlmIChvcmlnaW5hbC5Jc1JldXNlZCgp
KSBjb250aW51ZTsKKyAgICAgIGlmICh0YWcgJiAweDgwODA4MDgwKSBjb250aW51ZTsKKyAgICAg
IGNvbnN0IEZvbnQ6OlRhYmxlKiB0YWJsZV90b19zdG9yZSA9IGZvbnQuRmluZFRhYmxlKHRhZyBe
IDB4ODA4MDgwODApOworICAgICAgaWYgKHRhYmxlX3RvX3N0b3JlID09IE5VTEwpIHRhYmxlX3Rv
X3N0b3JlID0gJm9yaWdpbmFsOwogCi0gICAgICBpZiAodGFibGUgPT0gTlVMTCkgdGFibGUgPSAm
aS5zZWNvbmQ7Ci0gICAgICBTdG9yZUJ5dGVzKHRhYmxlLT5kYXRhLCB0YWJsZS0+bGVuZ3RoLAor
ICAgICAgU3RvcmVCeXRlcyh0YWJsZV90b19zdG9yZS0+ZGF0YSwgdGFibGVfdG9fc3RvcmUtPmxl
bmd0aCwKICAgICAgICAgICAgICAgICAgJnRyYW5zZm9ybV9vZmZzZXQsICZ0cmFuc2Zvcm1fYnVm
WzBdKTsKICAgICB9CiAgIH0KKwogICAvLyBDb21wcmVzcyBhbGwgdHJhbnNmb3JtZWQgZGF0YSBp
biBvbmUgc3RyZWFtLgogICBpZiAoIVdvZmYyQ29tcHJlc3ModHJhbnNmb3JtX2J1Zi5kYXRhKCks
IHRvdGFsX3RyYW5zZm9ybV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAmY29tcHJlc3Np
b25fYnVmWzBdLApAQCAtMzc3LDEzICszNzIsMTIgQEAgYm9vbCBDb252ZXJ0VFRGVG9XT0ZGMihj
b25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoLAogICB9CiAgICpyZXN1bHRfbGVuZ3Ro
ID0gd29mZjJfbGVuZ3RoOwogCi0gIGNvbnN0IEZvbnQmIGZpcnN0X2ZvbnQgPSBmb250X2NvbGxl
Y3Rpb24uZm9udHNbMF07CiAgIHNpemVfdCBvZmZzZXQgPSAwOwogCiAgIC8vIHN0YXJ0IG9mIHdv
ZmYyIGhlYWRlciAoaHR0cDovL3d3dy53My5vcmcvVFIvV09GRjIvI3dvZmYyMEhlYWRlcikKICAg
U3RvcmVVMzIoa1dvZmYyU2lnbmF0dXJlLCAmb2Zmc2V0LCByZXN1bHQpOwotICBpZiAoZm9udF9j
b2xsZWN0aW9uLmZvbnRzLnNpemUoKSA9PSAxKSB7Ci0gICAgU3RvcmVVMzIoZmlyc3RfZm9udC5m
bGF2b3IsICZvZmZzZXQsIHJlc3VsdCk7CisgIGlmIChmb250X2NvbGxlY3Rpb24uZmxhdm9yICE9
IGtUdGNGb250Rmxhdm9yKSB7CisgICAgU3RvcmVVMzIoZm9udF9jb2xsZWN0aW9uLmZvbnRzWzBd
LmZsYXZvciwgJm9mZnNldCwgcmVzdWx0KTsKICAgfSBlbHNlIHsKICAgICBTdG9yZVUzMihrVHRj
Rm9udEZsYXZvciwgJm9mZnNldCwgcmVzdWx0KTsKICAgfQpAQCAtMzk0LDkgKzM4OCw5IEBAIGJv
b2wgQ29udmVydFRURlRvV09GRjIoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbmd0aCwK
ICAgU3RvcmVVMzIoQ29tcHV0ZVVuY29tcHJlc3NlZExlbmd0aChmb250X2NvbGxlY3Rpb24pLCAm
b2Zmc2V0LCByZXN1bHQpOwogICBTdG9yZVUzMih0b3RhbF9jb21wcmVzc2VkX2xlbmd0aCwgJm9m
ZnNldCwgcmVzdWx0KTsgIC8vIHRvdGFsQ29tcHJlc3NlZFNpemUKIAotICAvLyBUT0RPKHVzZXIp
OiBpcyBhbHdheXMgdGFraW5nIHRoaXMgZnJvbSB0aGUgZmlyc3QgdGFibGVzIGhlYWQgT0s/Ci0g
IC8vIGZvbnQgcmV2aXNpb24KLSAgU3RvcmVCeXRlcyhmaXJzdF9mb250LkZpbmRUYWJsZShrSGVh
ZFRhYmxlVGFnKS0+ZGF0YSArIDQsIDQsICZvZmZzZXQsIHJlc3VsdCk7CisgIC8vIExldCdzIGp1
c3QgYWxsIGJlIHYxLjAKKyAgU3RvcmUxNigxLCAmb2Zmc2V0LCByZXN1bHQpOyAgLy8gbWFqb3JW
ZXJzaW9uCisgIFN0b3JlMTYoMCwgJm9mZnNldCwgcmVzdWx0KTsgIC8vIG1pbm9yVmVyc2lvbgog
ICBpZiAoY29tcHJlc3NlZF9tZXRhZGF0YV9idWZfbGVuZ3RoID4gMCkgewogICAgIFN0b3JlVTMy
KHdvZmYyX2xlbmd0aCAtIGNvbXByZXNzZWRfbWV0YWRhdGFfYnVmX2xlbmd0aCwKICAgICAgICAg
ICAgICAmb2Zmc2V0LCByZXN1bHQpOyAgLy8gbWV0YU9mZnNldApAQCAtNDE4LDcgKzQxMiw3IEBA
IGJvb2wgQ29udmVydFRURlRvV09GRjIoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbmd0
aCwKICAgfQogCiAgIC8vIGZvciBjb2xsZWN0aW9ucyBvbmx5LCBjb2xsZWN0aW9uIHRhYmxlIGRp
cmVjdG9yeQotICBpZiAoZm9udF9jb2xsZWN0aW9uLmZvbnRzLnNpemUoKSA+IDEpIHsKKyAgaWYg
KGZvbnRfY29sbGVjdGlvbi5mbGF2b3IgPT0ga1R0Y0ZvbnRGbGF2b3IpIHsKICAgICBTdG9yZVUz
Mihmb250X2NvbGxlY3Rpb24uaGVhZGVyX3ZlcnNpb24sICZvZmZzZXQsIHJlc3VsdCk7CiAgICAg
U3RvcmUyNTVVU2hvcnQoZm9udF9jb2xsZWN0aW9uLmZvbnRzLnNpemUoKSwgJm9mZnNldCwgcmVz
dWx0KTsKICAgICBmb3IgKGNvbnN0IEZvbnQmIGZvbnQgOiBmb250X2NvbGxlY3Rpb24uZm9udHMp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9vdXQuY2Mg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmNjCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ODIzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmNjCkBAIC0wLDAgKzEsNzMgQEAKKy8vIENv
cHlyaWdodCAyMDE0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGlj
ZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNl
Iik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdp
dGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2Ug
YXQKKy8vCisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8v
CisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy
aXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0
cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUg
dGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lv
bnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vCisvLyBPdXRwdXQg
YnVmZmVyIGZvciBXT0ZGMiBkZWNvbXByZXNzaW9uLgorCisjaW5jbHVkZSAiLi93b2ZmMl9vdXQu
aCIKKworbmFtZXNwYWNlIHdvZmYyIHsKKworV09GRjJTdHJpbmdPdXQ6OldPRkYyU3RyaW5nT3V0
KHN0cmluZyogYnVmKQorICA6IGJ1Zl8oYnVmKSwKKyAgICBtYXhfc2l6ZV8oa0RlZmF1bHRNYXhT
aXplKSwKKyAgICBvZmZzZXRfKDApIHt9CisKK2Jvb2wgV09GRjJTdHJpbmdPdXQ6OldyaXRlKGNv
bnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IG4pIHsKKyAgcmV0dXJuIFdyaXRlKGJ1Ziwgb2Zmc2V0Xywg
bik7Cit9CisKK2Jvb2wgV09GRjJTdHJpbmdPdXQ6OldyaXRlKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6
ZV90IG9mZnNldCwgc2l6ZV90IG4pIHsKKyAgaWYgKG9mZnNldCA+IG1heF9zaXplXyB8fCBuID4g
bWF4X3NpemVfIC0gb2Zmc2V0KSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGlmIChvZmZz
ZXQgPT0gYnVmXy0+c2l6ZSgpKSB7CisgICAgYnVmXy0+YXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihidWYpLCBuKTsKKyAgfSBlbHNlIHsKKyAgICBpZiAob2Zmc2V0ICsgbiA+IGJ1Zl8t
PnNpemUoKSkgeworICAgICAgYnVmXy0+YXBwZW5kKG9mZnNldCArIG4gLSBidWZfLT5zaXplKCks
IDApOworICAgIH0KKyAgICBidWZfLT5yZXBsYWNlKG9mZnNldCwgbiwgc3RhdGljX2Nhc3Q8Y29u
c3QgY2hhcio+KGJ1ZiksIG4pOworICB9CisgIG9mZnNldF8gPSBzdGQ6Om1heChvZmZzZXRfLCBv
ZmZzZXQgKyBuKTsKKworICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXT0ZGMlN0cmluZ091dDo6
U2V0TWF4U2l6ZShzaXplX3QgbWF4X3NpemUpIHsKKyAgbWF4X3NpemVfID0gbWF4X3NpemU7Cisg
IGlmIChvZmZzZXRfID4gbWF4X3NpemVfKSB7CisgICAgb2Zmc2V0XyA9IG1heF9zaXplXzsKKyAg
fQorfQorCitXT0ZGMk1lbW9yeU91dDo6V09GRjJNZW1vcnlPdXQodWludDhfdCogYnVmLCBzaXpl
X3QgYnVmX3NpemUpCisgIDogYnVmXyhidWYpLAorICAgIGJ1Zl9zaXplXyhidWZfc2l6ZSksCisg
ICAgb2Zmc2V0XygwKSB7fQorCitib29sIFdPRkYyTWVtb3J5T3V0OjpXcml0ZShjb25zdCB2b2lk
ICpidWYsIHNpemVfdCBuKSB7CisgIHJldHVybiBXcml0ZShidWYsIG9mZnNldF8sIG4pOworfQor
Citib29sIFdPRkYyTWVtb3J5T3V0OjpXcml0ZShjb25zdCB2b2lkICpidWYsIHNpemVfdCBvZmZz
ZXQsIHNpemVfdCBuKSB7CisgIGlmIChvZmZzZXQgPiBidWZfc2l6ZV8gfHwgbiA+IGJ1Zl9zaXpl
XyAtIG9mZnNldCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBzdGQ6Om1lbWNweShidWZf
ICsgb2Zmc2V0LCBidWYsIG4pOworICBvZmZzZXRfID0gc3RkOjptYXgob2Zmc2V0Xywgb2Zmc2V0
ICsgbik7CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIHdvZmYyCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYzk1NmFmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L3dvZmYyL3NyYy93b2ZmMl9vdXQuaApAQCAtMCwwICsxLDExNCBAQAorLy8gQ29weXJpZ2h0IDIw
MTYgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRl
ciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlv
dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGlj
ZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8v
IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVz
cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m
dHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5z
ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8v
IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8KKy8vIE91dHB1dCBidWZmZXIgZm9y
IFdPRkYyIGRlY29tcHJlc3Npb24uCisKKy8vIENvcHlyaWdodCAyMDE2IEdvb2dsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNl
bnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyBodHRwOi8vd3d3LmFwYWNo
ZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBw
bGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmli
dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lT
LAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhl
ciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZp
YyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRl
ciB0aGUgTGljZW5zZS4KKy8vCisvLyBPdXRwdXQgYnVmZmVyIGZvciBXT0ZGMiBkZWNvbXByZXNz
aW9uLgorCisjaWZuZGVmIFdPRkYyX1dPRkYyX09VVF9IXworI2RlZmluZSBXT0ZGMl9XT0ZGMl9P
VVRfSF8KKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1
ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSAiLi9wb3J0LmgiCisKK25h
bWVzcGFjZSB3b2ZmMiB7CisKKy8vIFN1Z2dlc3RlZCBtYXggc2l6ZSBmb3Igb3V0cHV0LgorY29u
c3Qgc2l6ZV90IGtEZWZhdWx0TWF4U2l6ZSA9IDMwICogMTAyNCAqIDEwMjQ7CisKK3VzaW5nIHN0
ZDo6c3RyaW5nOworCisKKy8qKgorICogT3V0cHV0IGludGVyZmFjZSBmb3IgdGhlIHdvZmYyIGRl
Y29kaW5nLgorICoKKyAqIFdyaXRlcyB0byBhcmJpdHJhcnkgb2Zmc2V0cyBhcmUgc3VwcG9ydGVk
IHRvIGZhY2lsaXRhdGUgdXBkYXRpbmcgb2Zmc2V0CisgKiB0YWJsZSBhbmQgY2hlY2tzdW1zIGFm
dGVyIHRhYmxlcyBhcmUgcmVhZHkuIFJlYWRpbmcgdGhlIGN1cnJlbnQgc2l6ZSBpcworICogc3Vw
cG9ydGVkIHNvIGEgJ2xvY2EnIHRhYmxlIGNhbiBiZSBidWlsdCB1cCB3aGlsZSB3cml0aW5nIGds
eXBocy4KKyAqCisgKiBCeSBkZWZhdWx0IGxpbWl0cyBzaXplIHRvIGtEZWZhdWx0TWF4U2l6ZS4K
KyAqLworY2xhc3MgV09GRjJPdXQgeworIHB1YmxpYzoKKyAgdmlydHVhbCB+V09GRjJPdXQodm9p
ZCkge30KKworICAvLyBBcHBlbmQgbiBieXRlcyBvZiBkYXRhIGZyb20gYnVmLgorICAvLyBSZXR1
cm4gdHJ1ZSBpZiBhbGwgd3JpdHRlbiwgZmFsc2Ugb3RoZXJ3aXNlLgorICB2aXJ0dWFsIGJvb2wg
V3JpdGUoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbikgPSAwOworCisgIC8vIFdyaXRlIG4gYnl0
ZXMgb2YgZGF0YSBmcm9tIGJ1ZiBhdCBvZmZzZXQuCisgIC8vIFJldHVybiB0cnVlIGlmIGFsbCB3
cml0dGVuLCBmYWxzZSBvdGhlcndpc2UuCisgIHZpcnR1YWwgYm9vbCBXcml0ZShjb25zdCB2b2lk
ICpidWYsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBuKSA9IDA7CisKKyAgdmlydHVhbCBzaXplX3Qg
U2l6ZSgpID0gMDsKK307CisKKy8qKgorICogRXhwYW5kaW5nIG1lbW9yeSBibG9jayBmb3Igd29m
ZjIgb3V0LiBCeSBkZWZhdWx0IGxpbWl0ZWQgdG8ga0RlZmF1bHRNYXhTaXplLgorICovCitjbGFz
cyBXT0ZGMlN0cmluZ091dCA6IHB1YmxpYyBXT0ZGMk91dCB7CisgcHVibGljOgorICAvLyBDcmVh
dGUgYSB3cml0ZXIgdGhhdCB3cml0ZXMgaXRzIGRhdGEgdG8gYnVmLgorICAvLyBidWYtPnNpemUo
KSB3aWxsIGdyb3cgdG8gYXQgbW9zdCBtYXhfc2l6ZQorICAvLyBidWYgbWF5IGJlIHNpemVkIChl
LmcuIHVzaW5nIEVzdGltYXRlV09GRjJGaW5hbFNpemUpIG9yIGVtcHR5LgorICBleHBsaWNpdCBX
T0ZGMlN0cmluZ091dChzdHJpbmcqIGJ1Zik7CisKKyAgYm9vbCBXcml0ZShjb25zdCB2b2lkICpi
dWYsIHNpemVfdCBuKSBvdmVycmlkZTsKKyAgYm9vbCBXcml0ZShjb25zdCB2b2lkICpidWYsIHNp
emVfdCBvZmZzZXQsIHNpemVfdCBuKSBvdmVycmlkZTsKKyAgc2l6ZV90IFNpemUoKSBvdmVycmlk
ZSB7IHJldHVybiBvZmZzZXRfOyB9CisgIHNpemVfdCBNYXhTaXplKCkgeyByZXR1cm4gbWF4X3Np
emVfOyB9CisgIHZvaWQgU2V0TWF4U2l6ZShzaXplX3QgbWF4X3NpemUpOworIHByaXZhdGU6Cisg
IHN0cmluZyogYnVmXzsKKyAgc2l6ZV90IG1heF9zaXplXzsKKyAgc2l6ZV90IG9mZnNldF87Cit9
OworCisvKioKKyAqIEZpeGVkIG1lbW9yeSBibG9jayBmb3Igd29mZjIgb3V0LgorICovCitjbGFz
cyBXT0ZGMk1lbW9yeU91dCA6IHB1YmxpYyBXT0ZGMk91dCB7CisgcHVibGljOgorICAvLyBDcmVh
dGUgYSB3cml0ZXIgdGhhdCB3cml0ZXMgaXRzIGRhdGEgdG8gYnVmLgorICBXT0ZGMk1lbW9yeU91
dCh1aW50OF90KiBidWYsIHNpemVfdCBidWZfc2l6ZSk7CisKKyAgYm9vbCBXcml0ZShjb25zdCB2
b2lkICpidWYsIHNpemVfdCBuKSBvdmVycmlkZTsKKyAgYm9vbCBXcml0ZShjb25zdCB2b2lkICpi
dWYsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBuKSBvdmVycmlkZTsKKyAgc2l6ZV90IFNpemUoKSBv
dmVycmlkZSB7IHJldHVybiBvZmZzZXRfOyB9CisgcHJpdmF0ZToKKyAgdWludDhfdCogYnVmXzsK
KyAgc2l6ZV90IGJ1Zl9zaXplXzsKKyAgc2l6ZV90IG9mZnNldF87Cit9OworCit9IC8vIG5hbWVz
cGFjZSB3b2ZmMgorCisjZW5kaWYgIC8vIFdPRkYyX1dPRkYyX09VVF9IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDgwYmU2MTAuLjFlZjlhOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxNi0wOS0y
NyAgS2hhbGVkIEhvc255ICA8a2hhbGVkaG9zbnlAZWdsdWcub3JnPgorCisgICAgICAgIFVzZSBu
ZXcgd29mZjIgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjI2MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXT0ZGMlZlY3Rvck91dDo6V09GRjJWZWN0b3JPdXQpOgorICAgICAgICAoV2ViQ29yZTo6V09G
RjJWZWN0b3JPdXQ6OldyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldPRkYyVmVjdG9yT3V0OjpT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRXT0ZGVG9TZm50KToKKwogMjAxNi0wOS0y
NyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgW0ZldGNoIEFQ
SV0gUmVtb3ZlIFJlYWRhYmxlU3RyZWFtU291cmNlIGZpcnN0UmVhZENhbGxiYWNrCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKaW5k
ZXggNDIwZmE0OC4uY2M4ZDQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcApAQCAtOTAsNiArOTAsNDIgQEAgYm9vbCBpc1dP
RkYoU2hhcmVkQnVmZmVyJiBidWZmZXIpCiAjZW5kaWYKIH0KIAorI2lmIFVTRShXT0ZGMikKK2Ns
YXNzIFdPRkYyVmVjdG9yT3V0IDogcHVibGljIHdvZmYyOjpXT0ZGMk91dCB7CitwdWJsaWM6Cisg
ICAgV09GRjJWZWN0b3JPdXQoVmVjdG9yPGNoYXI+JiB2ZWN0b3IpCisgICAgICAgIDogbV92ZWN0
b3IodmVjdG9yKQorICAgIHsgfQorCisgICAgYm9vbCBXcml0ZShjb25zdCB2b2lkICpkYXRhLCBz
aXplX3QgbikKKyAgICB7CisgICAgICAgIGlmICghbV92ZWN0b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5
KG1fdmVjdG9yLnNpemUoKSArIG4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBtX3ZlY3Rvci5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLCBuKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBXcml0ZShjb25zdCB2b2lkICpk
YXRhLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbikKKyAgICB7CisgICAgICAgIGlmICghbV92ZWN0
b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5KG9mZnNldCArIG4pKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAob2Zmc2V0ICsgbiA+IG1fdmVjdG9yLnNpemUoKSkKKyAgICAgICAg
ICAgIG1fdmVjdG9yLnJlc2l6ZShvZmZzZXQgKyBuKTsKKyAgICAgICAgbV92ZWN0b3IucmVtb3Zl
KG9mZnNldCwgbik7CisgICAgICAgIG1fdmVjdG9yLmluc2VydChvZmZzZXQsIHN0YXRpY19jYXN0
PGNvbnN0IGNoYXIqPihkYXRhKSwgbik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIHNpemVfdCBTaXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3Rvci5zaXplKCk7
CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxjaGFyPiYgbV92ZWN0b3I7Cit9OworI2Vu
ZGlmCisKIGJvb2wgY29udmVydFdPRkZUb1NmbnQoU2hhcmVkQnVmZmVyJiB3b2ZmLCBWZWN0b3I8
Y2hhcj4mIHNmbnQpCiB7CiAgICAgQVNTRVJUX0FSRyhzZm50LCBzZm50LmlzRW1wdHkoKSk7CkBA
IC0xMTEsOSArMTQ3LDkgQEAgYm9vbCBjb252ZXJ0V09GRlRvU2ZudChTaGFyZWRCdWZmZXImIHdv
ZmYsIFZlY3RvcjxjaGFyPiYgc2ZudCkKIAogICAgICAgICBpZiAoIXNmbnQudHJ5UmVzZXJ2ZUNh
cGFjaXR5KHNmbnRTaXplKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgc2Zu
dC5yZXNpemUoc2ZudFNpemUpOwogCi0gICAgICAgIHJldHVybiB3b2ZmMjo6Q29udmVydFdPRkYy
VG9UVEYocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc2ZudC5kYXRhKCkpLCBzZm50LnNpemUo
KSwgd29mZkRhdGEsIHdvZmZTaXplKTsKKyAgICAgICAgV09GRjJWZWN0b3JPdXQgb3V0KHNmbnQp
OworICAgICAgICByZXR1cm4gd29mZjI6OkNvbnZlcnRXT0ZGMlRvVFRGKHdvZmZEYXRhLCB3b2Zm
U2l6ZSwgJm91dCk7CiAgICAgfQogI2VuZGlmCiAKLS0gCjIuMTAuMAoK
</data>
<flag name="review"
          id="313157"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290070</attachid>
            <date>2016-09-28 02:46:04 -0700</date>
            <delta_ts>2016-09-28 03:37:37 -0700</delta_ts>
            <desc>Patch, v4</desc>
            <filename>0001-GTK-Update-woff2-decoder.patch</filename>
            <type>text/plain</type>
            <size>92070</size>
            <attacher name="Khaled Hosny">dr.khaled.hosny</attacher>
            
              <data encoding="base64">RnJvbSA4NTMwZWQ2ODc0ZTI4MWZiODhkOGM2YjBkMDk2MTU0YmE2ZWIwZmZjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLaGFsZWQgSG9zbnkgPGtoYWxlZGhvc255QGVnbHVnLm9yZz4K
RGF0ZTogV2VkLCAyOCBTZXAgMjAxNiAxMTo0MToyMiArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFtH
VEtdIFVwZGF0ZSB3b2ZmMiBkZWNvZGVyCgotLS0KIExheW91dFRlc3RzL0NoYW5nZUxvZyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArCiAuLi4vdGV4dC9yZXNvdXJjZXMvaGVh
ZGVyLXRvdGFsc2ZudHNpemUtMDAxLnR0ZiAgICB8ICBCaW4gMCAtPiAxODU2IGJ5dGVzCiAuLi4v
dGV4dC9yZXNvdXJjZXMvaGVhZGVyLXRvdGFsc2ZudHNpemUtMDAxLndvZmYyICB8ICBCaW4gMCAt
PiA5ODAgYnl0ZXMKIC4uLi9mYXN0L3RleHQvd29mZjItdG90YWxzZm50c2l6ZS1leHBlY3RlZC5o
dG1sICAgIHwgICAyOSArCiBMYXlvdXRUZXN0cy9mYXN0L3RleHQvd29mZjItdG90YWxzZm50c2l6
ZS5odG1sICAgICB8ICAgMjkgKwogU291cmNlL1RoaXJkUGFydHkvQ2hhbmdlTG9nICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDI5ICsKIFNvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL0NNYWtlTGlz
dHMudHh0ICAgICAgICAgICAgIHwgICAgMSArCiBTb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9SRUFE
TUUud2Via2l0ICAgICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9UaGlyZFBhcnR5L3dvZmYy
L3NyYy9maWxlLmggICAgICAgICAgICAgICAgIHwgICAxNiArLQogU291cmNlL1RoaXJkUGFydHkv
d29mZjIvc3JjL2ZvbnQuY2MgICAgICAgICAgICAgICAgfCAgIDIzICstCiBTb3VyY2UvVGhpcmRQ
YXJ0eS93b2ZmMi9zcmMvZm9udC5oICAgICAgICAgICAgICAgICB8ICAgIDEgKwogU291cmNlL1Ro
aXJkUGFydHkvd29mZjIvc3JjL2dseXBoLmNjICAgICAgICAgICAgICAgfCAgICA2ICstCiBTb3Vy
Y2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvc3RvcmVfYnl0ZXMuaCAgICAgICAgICB8ICAgIDMgKy0K
IFNvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy90cmFuc2Zvcm0uY2MgICAgICAgICAgIHwgICAg
MiArLQogU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2NvbW1vbi5jYyAgICAgICAg
fCAgIDEzICstCiBTb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfY29tcHJlc3MuY2Mg
ICAgICB8ICAgIDIgKy0KIFNvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9kZWMuY2Mg
ICAgICAgICAgIHwgMTA0MSArKysrKysrKysrLS0tLS0tLS0tLQogU291cmNlL1RoaXJkUGFydHkv
d29mZjIvc3JjL3dvZmYyX2RlYy5oICAgICAgICAgICAgfCAgICA4ICsKIFNvdXJjZS9UaGlyZFBh
cnR5L3dvZmYyL3NyYy93b2ZmMl9kZWNvbXByZXNzLmNjICAgIHwgICAzMCArLQogU291cmNlL1Ro
aXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2VuYy5jYyAgICAgICAgICAgfCAgIDQ0ICstCiBTb3Vy
Y2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmNjICAgICAgICAgICB8ICAgNzMgKysK
IFNvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9vdXQuaCAgICAgICAgICAgIHwgIDEx
NCArKysKIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAxNSArCiAuLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5j
cHAgICB8ICAgNDAgKy0KIDI0IGZpbGVzIGNoYW5nZWQsIDkxNiBpbnNlcnRpb25zKCspLCA2MTcg
ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC90ZXh0L3Jl
c291cmNlcy9oZWFkZXItdG90YWxzZm50c2l6ZS0wMDEudHRmCiBjcmVhdGUgbW9kZSAxMDA2NDQg
TGF5b3V0VGVzdHMvZmFzdC90ZXh0L3Jlc291cmNlcy9oZWFkZXItdG90YWxzZm50c2l6ZS0wMDEu
d29mZjIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L3RleHQvd29mZjItdG90
YWxzZm50c2l6ZS1leHBlY3RlZC5odG1sCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMv
ZmFzdC90ZXh0L3dvZmYyLXRvdGFsc2ZudHNpemUuaHRtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9vdXQuY2MKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmgKCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzMyYzYw
ZC4uY2M0NzMwNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE2LTA5LTI4ICBLaGFsZWQgSG9z
bnkgIDxraGFsZWRob3NueUBlZ2x1Zy5vcmc+CisKKyAgICAgICAgVXNlIG5ldyB3b2ZmMiBBUEkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjYwOAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC90
ZXh0L3Jlc291cmNlcy9oZWFkZXItdG90YWxzZm50c2l6ZS0wMDEudHRmOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L3RleHQvcmVzb3VyY2VzL2hlYWRlci10b3RhbHNmbnRzaXplLTAwMS53b2ZmMjog
QWRkZWQuCisgICAgICAgICogZmFzdC90ZXh0L3dvZmYyLXRvdGFsc2ZudHNpemUtZXhwZWN0ZWQu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC90ZXh0L3dvZmYyLXRvdGFsc2ZudHNpemUuaHRt
bDogQWRkZWQuCisKIDIwMTYtMDktMjcgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFw
cGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyMDU4ODMpOiBMZXR0ZXJwcmVzc2VkIHRl
eHQgaXMgaW52aXNpYmxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQvcmVzb3Vy
Y2VzL2hlYWRlci10b3RhbHNmbnRzaXplLTAwMS50dGYgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQv
cmVzb3VyY2VzL2hlYWRlci10b3RhbHNmbnRzaXplLTAwMS50dGYKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTVhYWFi
MjFhZDRhMTNkZWFmNjQ2ZDMwOWI4ZTFiYWIyYzMxNzkwNQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVy
YWwgMTg1Ngp6Y21jSWxaJWtXTjYjdT5VeSs7V01JQjdOZmVaO3YlZ3wwTmhfQHt8KGJSO21eajdx
MThWdTM7dCs2U2VPVyQ3WDsKeiopb1I0c1VLSj5PSSswV1hGKSRLdmMtVnppfU4zVGFHRHNDVk1n
TW4kPktEfGREfnBEbz1le2xiYTgoMXl4ZXp3Cno9aUdEN0pAPyU2P3NJIytaZShIJVg1e1R+eHdN
SWtidHdTVGZYVkp8K3ZZclFWKGNYMDE9Mm0kNzRpP19VRmpsVgp6RStfZClGeVFZdEotWU1+QW1A
YEA5VkE2byh4UXt4TGh8TmREN3g+P1p9MTdwZ0N5c0x7UUN3V2RrRCY3XmlzcUEKelB+ZzVfS0Qk
S241bjV3dlAjPXpfJmNYPn5YZiZAJGtZen1jbDwjeDlUOzlOTmxvRzdpNlgrY29ASkVFY0VSbDt1
CnpwKCM7aFA4Nz5PUFprNH4+RXVDJFMjcVptdnp1NyU/SiFHez9lMlNweUMoY0t1fHAlazI0JC1y
M0hiKj1MMXx6cwp6RGp9TiluNVpoOSgjdHRIX2F4dTJ6MEktfCl9ZnhfI0V6PUdGWD5WRTlQdCY4
dk9IdkM8TG41VlZBWHRyKzFQMVQKenY7MngkcSZpblQpPG0yJkB0TVJsQTZOTSRsRyU5REx3TVE2
X2dYKlpgeEt0Nz00Z28kY0hZVj1tS0lxQyVjeHI5Cno2e1k8QipwKEhoQmdXP0FUaTYqam5hJDV3
VzktZCVRd0QhQT1+QTlpeHhSY15hWWRmY0oleHYzWSRgc2FIVSghYwp6eWswdVhFRERSTS18YF9Q
YVcmYSYpeUVEV0l4eH5QXkkjIypiMzlVM3skVnJRK0ZIc3NgUUdZaUQ1JiMzUj0ydE8Kek9WK1R6
Qip0SGV0MCRqNzl6U3ZSUkxAVV4lPVdffnZ3WVk4MSVMU0tRbDM1a156MnMhN2UxSTx5dTdmRFhC
e3R6Cnp2citZclV3TjA2WEZjOT5lQFNmdWl8Vzw2N01Aa2c3UzM1Ml8odXZLUWozJmw2Q005ITIw
ND9IWVZ1JHs5ZWlldwp6bHshWE51MW0rRFAlai1kP0lwUTYmN34qZGx0am1fQ3B6aUJzOHRVS3E7
dF5WRjxuY2spWmFnWDFuS31IPXtNNmcKelZrOG9valp1YElMa25xeVJTeyUzaCtGNn01IWN7P0Nu
ZGZsMUVyUXliRShzWTdwYjhsUFZZPUt0PzVMWlRobzhECnp4XiowM0F1fDB0aTUtZUhYZ3UpIUx2
dE91NGM5R1pRNGlxTDs9NWozPHo8SzMoNEczLUdIcDZmdlV4MklgSztEMgp6R1pXfVd3YEY+NVpe
QktHRU5Vcit1Jns4bDBeSkFsPlJiLXFHMytKV013O3xhT35AY0FqbTs9UXpKY1grSFZSZUkKelkz
Tm5sZiZCKXl6PXIzPDNDV3FIRFpyfStIWCNTfDF+I0pzcEJxQGw3QWVFUDNYVnc/MjNGVlVFaHZ9
ZkgoVmFaCnpnO0hzRUkyYHEmbGo/N0JVJHFBISErbTtLT0l2eGBHPjBQJWdMPD99NTA4b29kKTQ7
KGtpUzJtTXw8bzhlVnRDeQp6STRmJnZ0Rilicz9Uc3lOJitmKW4/QGREYzAtWXtCOTM5cXRkWmZR
RSteZy0xPXAlI2ghQSh1KmYoOT1GNylGJVAKemojYlNibDZ4X04wcihOMnlVdEZuRTFyNl5MUHda
cD4oeygqX0ArSDh1K2pJJTh2a3o5UDd4IU5MRW1iMFpOcktsCnp2ezdEU180Um9LJHVmJHJScl50
elB0Vnk9aDMlQUVpMU9+SW44SyFxdkxCJHhvend0Z0E5bXVFczZqMitZU0BXSgp6dzl7eXpUNm5P
VlAlQmwjTjR9akAzOTs4RzwpeDhFcndzY2tQTTlqQVZIWmd7UmZ2OUQ7KEgpVXkoailsfEQtPHcK
RGAyKUwrCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L3RleHQvcmVzb3VyY2VzL2hlYWRlci10b3RhbHNmbnRzaXplLTAwMS53b2ZmMiBiL0xheW91
dFRlc3RzL2Zhc3QvdGV4dC9yZXNvdXJjZXMvaGVhZGVyLXRvdGFsc2ZudHNpemUtMDAxLndvZmYy
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjczODU2MDUxOGIzNGE5MDkwMjIyMjMwODE1NTc1ZTcxNzU2MjMwY2MKR0lU
IGJpbmFyeSBwYXRjaApsaXRlcmFsIDk4MAp6Y21WO18xMXRQQFBldzlOUjgmc0AwMFl6ajI+PHs5
MDA0bWkwMFdFdzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKejAwMDBEZ2YwZVAwRCkhIUhVY0NB
NUNqR1ZnJTx9UDg9M31EbG5QRWxfSCk2dSl4YyZFTGcpcDlLX1hLTVNMaloqCnpxQiFePTktaEEr
Yj8kcUFzKihwUVo3azl0SG1yZnk3RTZiMFhmcnB+d3dJMXhVd3Vefns3e1F4N0NJJENZdXh1PAp6
I3FKZHwza25ETGkmaURDVylDZ0FibzR8cEB0ZTVqRzZ7WUdHVDxvRnM/YXI2ZDRnPl45OTRtP2I+
ezx+QGwwZXgKei1jcCZIb0E0UXtMczV1YD03VlVXKTF6V3BCSVUrSzs8JVIke0hYSW9KXmtwO0tZ
RUp5KkZCKjhgT2lLQTwjbXNLCno+e0l3JipNTiY/OVRKTUY1bXpDTyRMYXtfeUAjRiE1SjREWTtG
Rk1LcnxuLU1CVikqSTtjVyo9MEAtdjI4bF9fdAp6T1N1Pz1Ne3Z+cUxWaGd8ZFNMYGMhM2hQU1Rm
N0B3Xy1tO0t3VG9aR3UqKUY/Y2Q7dzZIeWBTU2xBJW1valFkQWIKemVoe1dHPWRwI0w2cVY2b3dj
czJCbU1APXpEMk9eZk1ONGZ3KWJWY0smWll5N0U7b1l4bCN7fiFPYjJYVDl3TGYhCnpUb0NEfFNq
flMrZzZjQT5XN0xOX1Y5RH1ZOGQ5P0IpK1goSkFWIzJyS0V6dFdlJilpTj5Za3kmJmNeSXJwNlYh
UAp6PEVMd0pKUkZScHZfVDx4VGVnUnFUU0JVdmZ6d1UhWHcmTXorMndUSV53UTw0NCh1clVzdCZ5
T1BlSlRpYEJuNzIKenFtNUVXJWw2JD95TElmeSkzO1p3UUY1dSlhJWlJZWVfPWpAbDQlajxUQ1N8
WFF+TFF4MVdJYmRsQGttSTs4fXZUCnpSRCg+Zyp7eHFIR2RAbmFKfCNfSzA5MEpJMEFLUG85eDVT
U3I0KFN4b0Z4dktPX1B7fF8qfWhAV1p2cjZjPD1zRwp6QCpWdmtBaWt0YD1tKkhpPSpFQztvSXAz
O0pXI0cmTE87XmplX2pZUHl4ZnVQN1JwT0tNVFBabi12SmhVZk8xSHIKelZ8aD1ve01WbUAqd1dZ
WG9iVFlhTjk2fiY5VDtxej9weWl1YlBpYnAhTXgzMVFOZytDSiVeUD1ubUZBSWFvUFBnCnoxXmJ7
dHRycjQ+OG57NEdyVXVBKnI4fHBzcHV7PjhEQW5ZaEY0eVdhNHN1Yzk+LTJTanF9RDRTVGs7MUFx
bT08QQp6OSVrOEQ4YUd7VHg+cE5eWSFPaSNGUUZraDRZZU1LbEM3bnJJaD43bilUUGUmdmlrYnw2
eW5JUj5VYkdZREdicmcKeilvdG42b0hQd1RhUT1zRXk9c0h+Kl9iZmZfM3x1cjMyMSpjXndrbDlJ
JVkxZVAhPUlBR1lkQ2NCV0RKY1BUclNNCnpiRmVwKURKZGdsTD1PZFNNVUhRS1gzajJGNCkoQ01i
VkQxdSlpSWUlMlVuQjRoQzZ2cTw/ditlakJMISh4NlBAeAp6Uj5uLXxoY2cqYDBTQyY3Xmg3R144
bWJ+UzllcCFuPFk0ZFcwYChvN1pMSTdxcHVEcSNuPEViUnxJIzd9MDAwMkEKQ1hVN0JwCgpsaXRl
cmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQvd29m
ZjItdG90YWxzZm50c2l6ZS1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L3dv
ZmYyLXRvdGFsc2ZudHNpemUtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi42MGIwYjY2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90
ZXh0L3dvZmYyLXRvdGFsc2ZudHNpemUtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDI5IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CitAZm9udC1mYWNlIHsKKyAg
ICBmb250LWZhbWlseTogIndlYmZvbnQiOworICAgIHNyYzogdXJsKCJyZXNvdXJjZXMvaGVhZGVy
LXRvdGFsc2ZudHNpemUtMDAxLnR0ZiIpIGZvcm1hdCgidHJ1ZXR5cGUiKTsKK30KKyNjb250YWlu
ZXIgeworCXdpZHRoOiAxMDBweDsKKwloZWlnaHQ6IDM4cHg7CisJcG9zaXRpb246IHJlbGF0aXZl
OworICAgIG92ZXJmbG93OiBoaWRkZW47Cit9CisjdGVzdCB7CisgICAgZm9udDogNDFweCAid2Vi
Zm9udCI7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHdpZHRoOiA0MXB4OworICAgIGhl
aWdodDogNDFweDsKKyAgICBsZWZ0OiAtMXB4OworICAgIHRvcDogLTFweDsKK30KKzwvc3R5bGU+
Cis8L2hlYWQ+Cis8Ym9keT4KK1RoaXMgdGVzdCBtYWtlcyBzdXJlIFdPRkYyIHJlbmRlcnMgYXMg
ZXhwZWN0ZWQuIFRoZSB0ZXN0IHBhc3NlcyBpZiB5b3Ugc2VlIHRoZSB3b3JkIFBBU1MgYmVsb3cu
Cis8ZGl2IGlkPSJjb250YWluZXIiPjxkaXYgaWQ9InRlc3QiPlA8L2Rpdj48L2Rpdj4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC93b2ZmMi10b3Rh
bHNmbnRzaXplLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvd29mZjItdG90YWxzZm50c2l6
ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNGNiMDcKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvd29mZjItdG90YWxzZm50c2l6ZS5o
dG1sCkBAIC0wLDAgKzEsMjkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxz
dHlsZT4KK0Bmb250LWZhY2UgeworICAgIGZvbnQtZmFtaWx5OiAid2ViZm9udCI7CisgICAgc3Jj
OiB1cmwoInJlc291cmNlcy9oZWFkZXItdG90YWxzZm50c2l6ZS0wMDEud29mZjIiKSBmb3JtYXQo
IndvZmYyIik7Cit9CisjY29udGFpbmVyIHsKKwl3aWR0aDogMTAwcHg7CisJaGVpZ2h0OiAzOHB4
OworCXBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworfQorI3Rlc3Qg
eworICAgIGZvbnQ6IDQxcHggIndlYmZvbnQiOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAg
ICB3aWR0aDogNDFweDsKKyAgICBoZWlnaHQ6IDQxcHg7CisgICAgbGVmdDogLTFweDsKKyAgICB0
b3A6IC0xcHg7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CitUaGlzIHRlc3QgbWFrZXMg
c3VyZSBXT0ZGMiByZW5kZXJzIGFzIGV4cGVjdGVkLiBUaGUgdGVzdCBwYXNzZXMgaWYgeW91IHNl
ZSB0aGUgd29yZCBQQVNTIGJlbG93LgorPGRpdiBpZD0iY29udGFpbmVyIj48ZGl2IGlkPSJ0ZXN0
Ij5QPC9kaXY+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9DaGFuZ2VMb2cKaW5kZXggZWVm
OGE1Yy4uMTU5M2Q1YiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE2LTA5
LTI3ICBLaGFsZWQgSG9zbnkgIDxraGFsZWRob3NueUBlZ2x1Zy5vcmc+CisKKyAgICAgICAgVXBk
YXRlIHdvZmYyIHRvIGxhdGVzdCByZXZpc2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiB3b2ZmMi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3
b2ZmMi9SRUFETUUud2Via2l0OgorICAgICAgICAqIHdvZmYyL3NyYy9maWxlLmg6CisgICAgICAg
ICh3b2ZmMjo6R2V0RmlsZUNvbnRlbnQpOgorICAgICAgICAod29mZjI6OlNldEZpbGVDb250ZW50
cyk6CisgICAgICAgICogd29mZjIvc3JjL2ZvbnQuY2M6CisgICAgICAgICogd29mZjIvc3JjL2Zv
bnQuaDoKKyAgICAgICAgKiB3b2ZmMi9zcmMvZ2x5cGguY2M6CisgICAgICAgICogd29mZjIvc3Jj
L3N0b3JlX2J5dGVzLmg6CisgICAgICAgICh3b2ZmMjo6U3RvcmUxNik6CisgICAgICAgICogd29m
ZjIvc3JjL3RyYW5zZm9ybS5jYzoKKyAgICAgICAgKiB3b2ZmMi9zcmMvd29mZjJfY29tbW9uLmNj
OgorICAgICAgICAqIHdvZmYyL3NyYy93b2ZmMl9jb21wcmVzcy5jYzoKKyAgICAgICAgKiB3b2Zm
Mi9zcmMvd29mZjJfZGVjLmNjOgorICAgICAgICAqIHdvZmYyL3NyYy93b2ZmMl9kZWMuaDoKKyAg
ICAgICAgKiB3b2ZmMi9zcmMvd29mZjJfZGVjb21wcmVzcy5jYzoKKyAgICAgICAgKiB3b2ZmMi9z
cmMvd29mZjJfZW5jLmNjOgorICAgICAgICAqIHdvZmYyL3NyYy93b2ZmMl9vdXQuY2M6IEFkZGVk
LgorICAgICAgICAqIHdvZmYyL3NyYy93b2ZmMl9vdXQuaDogQWRkZWQuCisgICAgICAgICh3b2Zm
Mjo6V09GRjJPdXQ6On5XT0ZGMk91dCk6CisgICAgICAgICh3b2ZmMjo6V09GRjJTdHJpbmdPdXQ6
Ok1heFNpemUpOgorCiAyMDE2LTA5LTI3ICBLb25zdGFudGluIFRva2FyZXYgIDxhbm51bGVuQHlh
bmRleC5ydT4gYW5kIFZpdGFsaXkgU2xvYm9kaW4gIDx2aXRhbGl5LnNsb2JvZGluQGdtYWlsLmNv
bT4KIAogICAgICAgICBGaXhlZCBjb21waWxhdGlvbiBvZiBXT0ZGMiBvbiBXaW5kb3dzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9U
aGlyZFBhcnR5L3dvZmYyL0NNYWtlTGlzdHMudHh0CmluZGV4IGFiNDgxNDguLjMwZjA0OGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L3dvZmYyL0NNYWtlTGlzdHMudHh0CkBAIC05LDYgKzksNyBAQCBzZXQo
V09GRjJfU09VUkNFUwogICAke1dPRkYyX0RJUn0vc3JjL3ZhcmlhYmxlX2xlbmd0aC5jYwogICAk
e1dPRkYyX0RJUn0vc3JjL3dvZmYyX2NvbW1vbi5jYwogICAke1dPRkYyX0RJUn0vc3JjL3dvZmYy
X2RlYy5jYworICAke1dPRkYyX0RJUn0vc3JjL3dvZmYyX291dC5jYwogKQogCiBpbmNsdWRlX2Rp
cmVjdG9yaWVzKCIke1RISVJEUEFSVFlfRElSfS9icm90bGkvZGVjIikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L3dvZmYyL1JFQURNRS53ZWJraXQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93
b2ZmMi9SRUFETUUud2Via2l0CmluZGV4IDBlMDkyMDIuLjkzNDgxNzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L3dvZmYyL1JFQURNRS53ZWJraXQKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvd29mZjIvUkVBRE1FLndlYmtpdApAQCAtMTEsNCArMTEsNCBAQCBUaGUgaW4tdHJlZSBjb3B5
IGlzIHVwZGF0ZWQgYnkgcnVubmluZwogICBzaCB1cGRhdGUuc2gKIGZyb20gd2l0aGluIHRoZSBt
b2R1bGVzL3dvZmYyIGRpcmVjdG9yeS4KIAotQ3VycmVudCB2ZXJzaW9uOiBbY29tbWl0IDY0M2M3
YjQ1ODkxY2JlYjVkYzFmNzU5OWE0YzliNTNmYmU4MmEwOGZdLgorQ3VycmVudCB2ZXJzaW9uOiBb
Y29tbWl0IDYzYjhmYjZkMGQ3OTdmMDRlNzdlZTgyNWZkOGZjZjdlYTYyMDVhYWNdLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL2ZpbGUuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L3dvZmYyL3NyYy9maWxlLmgKaW5kZXggNjlhOTJmOC4uN2FmY2IzMSAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL2ZpbGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS93b2ZmMi9zcmMvZmlsZS5oCkBAIC0xMiw3ICsxMiw3IEBACiAvLyBTZWUgdGhlIExpY2Vuc2Ug
Zm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAvLyBs
aW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIC8vCi0vLyBGaWxlIElPIGhlbHBlcnMKKy8v
IEZpbGUgSU8gaGVscGVycy4KIAogI2lmbmRlZiBXT0ZGMl9GSUxFX0hfCiAjZGVmaW5lIFdPRkYy
X0ZJTEVfSF8KQEAgLTIyLDE4ICsyMiwyMCBAQAogCiBuYW1lc3BhY2Ugd29mZjIgewogCi1pbmxp
bmUgc3RkOjpzdHJpbmcgR2V0RmlsZUNvbnRlbnQoc3RkOjpzdHJpbmcgZmlsZW5hbWUpIHsKK3Vz
aW5nIHN0ZDo6c3RyaW5nOworCisKK2lubGluZSBzdHJpbmcgR2V0RmlsZUNvbnRlbnQoc3RyaW5n
IGZpbGVuYW1lKSB7CiAgIHN0ZDo6aWZzdHJlYW0gaWZzKGZpbGVuYW1lLmNfc3RyKCksIHN0ZDo6
aW9zOjpiaW5hcnkpOwotICByZXR1cm4gc3RkOjpzdHJpbmcoCisgIHJldHVybiBzdHJpbmcoCiAg
ICAgc3RkOjppc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+KGlmcy5yZGJ1ZigpKSwKICAgICBzdGQ6
OmlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4oKSk7CiB9CiAKLWlubGluZSB2b2lkIFNldEZpbGVD
b250ZW50cyhzdGQ6OnN0cmluZyBmaWxlbmFtZSwgc3RkOjpzdHJpbmcgY29udGVudCkgeworaW5s
aW5lIHZvaWQgU2V0RmlsZUNvbnRlbnRzKHN0cmluZyBmaWxlbmFtZSwgc3RyaW5nOjppdGVyYXRv
ciBzdGFydCwKKyAgICBzdHJpbmc6Oml0ZXJhdG9yIGVuZCkgewogICBzdGQ6Om9mc3RyZWFtIG9m
cyhmaWxlbmFtZS5jX3N0cigpLCBzdGQ6Omlvczo6YmluYXJ5KTsKLSAgc3RkOjpjb3B5KGNvbnRl
bnQuYmVnaW4oKSwKLSAgICAgICAgICAgIGNvbnRlbnQuZW5kKCksCi0gICAgICAgICAgICBzdGQ6
Om9zdHJlYW1faXRlcmF0b3I8Y2hhcj4ob2ZzKSk7CisgIHN0ZDo6Y29weShzdGFydCwgZW5kLCBz
dGQ6Om9zdHJlYW1faXRlcmF0b3I8Y2hhcj4ob2ZzKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIHdv
ZmYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvZm9udC5jYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9mb250LmNjCmluZGV4IDdjYzU2ODguLjA2MDY3MzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9mb250LmNjCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9mb250LmNjCkBAIC00OSwxMSArNDksNyBAQCBzdGQ6
OnZlY3Rvcjx1aW50MzJfdD4gRm9udDo6T3V0cHV0T3JkZXJlZFRhZ3MoKSBjb25zdCB7CiAgICAg
b3V0cHV0X29yZGVyLnB1c2hfYmFjayh0YWJsZS50YWcpOwogICB9CiAKLSAgLy8gQWxwaGFiZXRp
emUgYW5kIGRvIG5vdCBwdXQgbG9jYSBpbW1lZGlhdGVseSBhZnRlciBnbHlmCi0gIC8vIFRoaXMg
dmlvbGF0ZXMgd29mZjIgc3BlYyBidXQgcmVzdWx0cyBpbiBhIGZvbnQgdGhhdCBwYXNzZXMgT1RT
Ci0gIHN0ZDo6c29ydChvdXRwdXRfb3JkZXIuYmVnaW4oKSwgb3V0cHV0X29yZGVyLmVuZCgpKTsK
LSAgLy8gVE9ETyh1c2VyKTogY2hhbmdlIHRvIG1hdGNoIHNwZWMgb25jZSBicm93c2VycyBhcmUg
b24gbmV3ZXIgT1RTCi0gIC8qCisgIC8vIEFscGhhYmV0aXplIHRoZW4gcHV0IGxvY2EgaW1tZWRp
YXRlbHkgYWZ0ZXIgZ2x5ZgogICBhdXRvIGdseWZfbG9jID0gc3RkOjpmaW5kKG91dHB1dF9vcmRl
ci5iZWdpbigpLCBvdXRwdXRfb3JkZXIuZW5kKCksCiAgICAgICBrR2x5ZlRhYmxlVGFnKTsKICAg
YXV0byBsb2NhX2xvYyA9IHN0ZDo6ZmluZChvdXRwdXRfb3JkZXIuYmVnaW4oKSwgb3V0cHV0X29y
ZGVyLmVuZCgpLApAQCAtNjIsNyArNTgsNyBAQCBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4gRm9udDo6
T3V0cHV0T3JkZXJlZFRhZ3MoKSBjb25zdCB7CiAgICAgb3V0cHV0X29yZGVyLmVyYXNlKGxvY2Ff
bG9jKTsKICAgICBvdXRwdXRfb3JkZXIuaW5zZXJ0KHN0ZDo6ZmluZChvdXRwdXRfb3JkZXIuYmVn
aW4oKSwgb3V0cHV0X29yZGVyLmVuZCgpLAogICAgICAga0dseWZUYWJsZVRhZykgKyAxLCBrTG9j
YVRhYmxlVGFnKTsKLSAgfSovCisgIH0KIAogICByZXR1cm4gb3V0cHV0X29yZGVyOwogfQpAQCAt
MTQ1LDcgKzE0MSw3IEBAIGJvb2wgUmVhZFRydWVUeXBlQ29sbGVjdGlvbihCdWZmZXIqIGZpbGUs
IGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW4sCiAgICAgfQogCiAgICAgc3RkOjp2ZWN0
b3I8dWludDMyX3Q+IG9mZnNldHM7Ci0gICAgZm9yIChhdXRvIGkgPSAwOyBpIDwgbnVtX2ZvbnRz
OyBpKyspIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bV9mb250czsgaSsrKSB7CiAg
ICAgICB1aW50MzJfdCBvZmZzZXQ7CiAgICAgICBpZiAoIWZpbGUtPlJlYWRVMzIoJm9mZnNldCkp
IHsKICAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwpAQCAtMTg1LDE1
ICsxODEsMTQgQEAgYm9vbCBSZWFkRm9udENvbGxlY3Rpb24oY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRDb2xsZWN0aW9uKiBmb250
X2NvbGxlY3Rpb24pIHsKICAgQnVmZmVyIGZpbGUoZGF0YSwgbGVuKTsKIAotICB1aW50MzJfdCBm
bGF2b3I7Ci0gIGlmICghZmlsZS5SZWFkVTMyKCZmbGF2b3IpKSB7CisgIGlmICghZmlsZS5SZWFk
VTMyKCZmb250X2NvbGxlY3Rpb24tPmZsYXZvcikpIHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVT
U0lPTl9GQUlMVVJFKCk7CiAgIH0KIAotICBpZiAoZmxhdm9yICE9IGtUdGNGb250Rmxhdm9yKSB7
CisgIGlmIChmb250X2NvbGxlY3Rpb24tPmZsYXZvciAhPSBrVHRjRm9udEZsYXZvcikgewogICAg
IGZvbnRfY29sbGVjdGlvbi0+Zm9udHMucmVzaXplKDEpOwogICAgIEZvbnQmIGZvbnQgPSBmb250
X2NvbGxlY3Rpb24tPmZvbnRzWzBdOwotICAgIGZvbnQuZmxhdm9yID0gZmxhdm9yOworICAgIGZv
bnQuZmxhdm9yID0gZm9udF9jb2xsZWN0aW9uLT5mbGF2b3I7CiAgICAgcmV0dXJuIFJlYWRUcnVl
VHlwZUZvbnQoJmZpbGUsIGRhdGEsIGxlbiwgJmZvbnQpOwogICB9CiAgIHJldHVybiBSZWFkVHJ1
ZVR5cGVDb2xsZWN0aW9uKCZmaWxlLCBkYXRhLCBsZW4sIGZvbnRfY29sbGVjdGlvbik7CkBAIC0y
OTAsNyArMjg1LDcgQEAgYm9vbCBXcml0ZUZvbnRDb2xsZWN0aW9uKGNvbnN0IEZvbnRDb2xsZWN0
aW9uJiBmb250X2NvbGxlY3Rpb24sIHVpbnQ4X3QqIGRzdCwKICAgc2l6ZV90IG9mZnNldCA9IDA7
CiAKICAgLy8gSXQncyBzaW1wbGVyIGlmIHRoaXMganVzdCBhIHNpbXBsZSBzZm50Ci0gIGlmIChm
b250X2NvbGxlY3Rpb24uZm9udHMuc2l6ZSgpID09IDEpIHsKKyAgaWYgKGZvbnRfY29sbGVjdGlv
bi5mbGF2b3IgIT0ga1R0Y0ZvbnRGbGF2b3IpIHsKICAgICByZXR1cm4gV3JpdGVGb250KGZvbnRf
Y29sbGVjdGlvbi5mb250c1swXSwgJm9mZnNldCwgZHN0LCBkc3Rfc2l6ZSk7CiAgIH0KIApAQCAt
MzAxLDcgKzI5Niw3IEBAIGJvb2wgV3JpdGVGb250Q29sbGVjdGlvbihjb25zdCBGb250Q29sbGVj
dGlvbiYgZm9udF9jb2xsZWN0aW9uLCB1aW50OF90KiBkc3QsCiAKICAgLy8gT2Zmc2V0IFRhYmxl
LCB6ZXJvZWQgZm9yIG5vdwogICBzaXplX3Qgb2Zmc2V0X3RhYmxlID0gb2Zmc2V0OyAgLy8gd2hl
cmUgdG8gd3JpdGUgb2Zmc2V0cyBsYXRlcgotICBmb3IgKGludCBpID0gMDsgaSA8IGZvbnRfY29s
bGVjdGlvbi5mb250cy5zaXplKCk7IGkrKykgeworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZv
bnRfY29sbGVjdGlvbi5mb250cy5zaXplKCk7IGkrKykgewogICAgIFN0b3JlVTMyKDAsICZvZmZz
ZXQsIGRzdCk7CiAgIH0KIApAQCAtMzEyLDcgKzMwNyw3IEBAIGJvb2wgV3JpdGVGb250Q29sbGVj
dGlvbihjb25zdCBGb250Q29sbGVjdGlvbiYgZm9udF9jb2xsZWN0aW9uLCB1aW50OF90KiBkc3Qs
CiAgIH0KIAogICAvLyBXcml0ZSBmb250cyBhbmQgdGhlaXIgb2Zmc2V0cy4KLSAgZm9yIChpbnQg
aSA9IDA7IGkgPCBmb250X2NvbGxlY3Rpb24uZm9udHMuc2l6ZSgpOyBpKyspIHsKKyAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBmb250X2NvbGxlY3Rpb24uZm9udHMuc2l6ZSgpOyBpKyspIHsKICAg
ICBjb25zdCBhdXRvJiBmb250ID0gZm9udF9jb2xsZWN0aW9uLmZvbnRzW2ldOwogICAgIFN0b3Jl
VTMyKG9mZnNldCwgJm9mZnNldF90YWJsZSwgZHN0KTsKICAgICBpZiAoIVdyaXRlRm9udChmb250
LCAmb2Zmc2V0LCBkc3QsIGRzdF9zaXplKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvd29mZjIvc3JjL2ZvbnQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9mb250LmgK
aW5kZXggNjAxYzRjOC4uOTM4MDZlNiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvd29m
ZjIvc3JjL2ZvbnQuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvZm9udC5oCkBA
IC02MSw2ICs2MSw3IEBAIHN0cnVjdCBGb250IHsKIAogLy8gQWNjb21vZGF0ZXMgYm90aCBzaW5n
dWxhciAoT1RGLCBUVEYpIGFuZCBjb2xsZWN0aW9uIChUVEMpIGZvbnRzCiBzdHJ1Y3QgRm9udENv
bGxlY3Rpb24geworICB1aW50MzJfdCBmbGF2b3I7CiAgIHVpbnQzMl90IGhlYWRlcl92ZXJzaW9u
OwogICAvLyAob2Zmc2V0LCBmaXJzdCB1c2Ugb2YgdGFibGUqKSBwYWlycwogICBzdGQ6Om1hcDx1
aW50MzJfdCwgRm9udDo6VGFibGUqPiB0YWJsZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS93b2ZmMi9zcmMvZ2x5cGguY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvZ2x5
cGguY2MKaW5kZXggMTdiZWYzOC4uMWRhZGFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvd29mZjIvc3JjL2dseXBoLmNjCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9n
bHlwaC5jYwpAQCAtMTIyLDcgKzEyMiw3IEBAIGJvb2wgUmVhZEdseXBoKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBsZW4sIEdseXBoKiBnbHlwaCkgewogICAgIHVpbnQ4X3QgZmxhZ19yZXBl
YXQgPSAwOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2NvbnRvdXJzOyArK2kpIHsKICAg
ICAgIGZsYWdzW2ldLnJlc2l6ZShnbHlwaC0+Y29udG91cnNbaV0uc2l6ZSgpKTsKLSAgICAgIGZv
ciAoaW50IGogPSAwOyBqIDwgZ2x5cGgtPmNvbnRvdXJzW2ldLnNpemUoKTsgKytqKSB7CisgICAg
ICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGdseXBoLT5jb250b3Vyc1tpXS5zaXplKCk7ICsraikg
ewogICAgICAgICBpZiAoZmxhZ19yZXBlYXQgPT0gMCkgewogICAgICAgICAgIGlmICghYnVmZmVy
LlJlYWRVOCgmZmxhZykpIHsKICAgICAgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZB
SUxVUkUoKTsKQEAgLTE0Myw3ICsxNDMsNyBAQCBib29sIFJlYWRHbHlwaChjb25zdCB1aW50OF90
KiBkYXRhLCBzaXplX3QgbGVuLCBHbHlwaCogZ2x5cGgpIHsKICAgICAvLyBSZWFkIHRoZSB4IGNv
b3JkaW5hdGVzLgogICAgIGludCBwcmV2X3ggPSAwOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bnVtX2NvbnRvdXJzOyArK2kpIHsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZ2x5cGgtPmNv
bnRvdXJzW2ldLnNpemUoKTsgKytqKSB7CisgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGds
eXBoLT5jb250b3Vyc1tpXS5zaXplKCk7ICsraikgewogICAgICAgICB1aW50OF90IGZsYWcgPSBm
bGFnc1tpXVtqXTsKICAgICAgICAgaWYgKGZsYWcgJiBrRkxBR19YU0hPUlQpIHsKICAgICAgICAg
ICAvLyBzaW5nbGUgYnl0ZSB4LWRlbHRhIGNvb3JkIHZhbHVlCkBAIC0xNzAsNyArMTcwLDcgQEAg
Ym9vbCBSZWFkR2x5cGgoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbiwgR2x5cGgqIGds
eXBoKSB7CiAgICAgLy8gUmVhZCB0aGUgeSBjb29yZGluYXRlcy4KICAgICBpbnQgcHJldl95ID0g
MDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9jb250b3VyczsgKytpKSB7Ci0gICAgICBm
b3IgKGludCBqID0gMDsgaiA8IGdseXBoLT5jb250b3Vyc1tpXS5zaXplKCk7ICsraikgeworICAg
ICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBnbHlwaC0+Y29udG91cnNbaV0uc2l6ZSgpOyArK2op
IHsKICAgICAgICAgdWludDhfdCBmbGFnID0gZmxhZ3NbaV1bal07CiAgICAgICAgIGlmIChmbGFn
ICYga0ZMQUdfWVNIT1JUKSB7CiAgICAgICAgICAgLy8gc2luZ2xlIGJ5dGUgeS1kZWx0YSBjb29y
ZCB2YWx1ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3N0b3JlX2J5
dGVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvc3RvcmVfYnl0ZXMuaAppbmRleCBl
MWExMWYzLi43NGIyNzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMv
c3RvcmVfYnl0ZXMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvc3RvcmVfYnl0
ZXMuaApAQCAtNTgsOCArNTgsNyBAQCBpbmxpbmUgdm9pZCBTdG9yZTE2KGludCB2YWwsIHNpemVf
dCogb2Zmc2V0LCB1aW50OF90KiBkc3QpIHsKICAgICAgICgodmFsICYgMHhGRikgPDwgOCkgfCAo
KHZhbCAmIDB4RkYwMCkgPj4gOCk7CiAgICpvZmZzZXQgKz0gMjsKICNlbGlmIChkZWZpbmVkKF9f
QllURV9PUkRFUl9fKSAmJiAoX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9CSUdfRU5ESUFOX18p
KQotICAqcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGRzdCArICpvZmZzZXQpID0KLSAgICAg
IHN0YXRpY19jYXN0PHVpbnQxNl90Pih2YWwpOworICAqcmVpbnRlcnByZXRfY2FzdDx1aW50MTZf
dCo+KGRzdCArICpvZmZzZXQpID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHZhbCk7CiAgICpvZmZz
ZXQgKz0gMjsKICNlbHNlCiAgIGRzdFsoKm9mZnNldCkrK10gPSB2YWwgPj4gODsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy90cmFuc2Zvcm0uY2MgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS93b2ZmMi9zcmMvdHJhbnNmb3JtLmNjCmluZGV4IGI3YjBjZjAuLjJhZDhiMTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy90cmFuc2Zvcm0uY2MKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3RyYW5zZm9ybS5jYwpAQCAtMzksNyArMzksNyBA
QCB2b2lkIFdyaXRlQnl0ZXMoc3RkOjp2ZWN0b3I8dWludDhfdD4qIG91dCwgY29uc3QgdWludDhf
dCogZGF0YSwgc2l6ZV90IGxlbikgewogfQogCiB2b2lkIFdyaXRlQnl0ZXMoc3RkOjp2ZWN0b3I8
dWludDhfdD4qIG91dCwgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIGluKSB7Ci0gIGZvciAo
aW50IGkgPSAwOyBpIDwgaW4uc2l6ZSgpOyArK2kpIHsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBpbi5zaXplKCk7ICsraSkgewogICAgIG91dC0+cHVzaF9iYWNrKGluW2ldKTsKICAgfQogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2NvbW1vbi5jYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9jb21tb24uY2MKaW5kZXggMzlkYzU0
ZS4uZWJhNmE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYy
X2NvbW1vbi5jYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfY29tbW9u
LmNjCkBAIC0yMyw3ICsyMyw4IEBAIG5hbWVzcGFjZSB3b2ZmMiB7CiAKIHVpbnQzMl90IENvbXB1
dGVVTG9uZ1N1bShjb25zdCB1aW50OF90KiBidWYsIHNpemVfdCBzaXplKSB7CiAgIHVpbnQzMl90
IGNoZWNrc3VtID0gMDsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsK
KyAgc2l6ZV90IGFsaWduZWRfc2l6ZSA9IHNpemUgJiB+MzsKKyAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBhbGlnbmVkX3NpemU7IGkgKz0gNCkgewogI2lmIChkZWZpbmVkKF9fQllURV9PUkRFUl9f
KSAmJiAoX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9MSVRUTEVfRU5ESUFOX18pKQogICAgIHVp
bnQzMl90IHYgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGJ1ZiArIGkpOwog
ICAgIGNoZWNrc3VtICs9ICgoKHYgJiAweEZGKSA8PCAyNCkgfCAoKHYgJiAweEZGMDApIDw8IDgp
IHwKQEAgLTM1LDYgKzM2LDE2IEBAIHVpbnQzMl90IENvbXB1dGVVTG9uZ1N1bShjb25zdCB1aW50
OF90KiBidWYsIHNpemVfdCBzaXplKSB7CiAgICAgICAoYnVmW2kgKyAyXSA8PCA4KSB8IGJ1Zltp
ICsgM107CiAjZW5kaWYKICAgfQorCisgIC8vIHRyZWF0IHNpemUgbm90IGFsaWduZWQgb24gNCBh
cyBpZiBpdCB3ZXJlIHBhZGRlZCB0byA0IHdpdGggMCdzCisgIGlmIChzaXplICE9IGFsaWduZWRf
c2l6ZSkgeworICAgIHVpbnQzMl90IHYgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSBhbGlnbmVk
X3NpemU7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgIHYgfD0gYnVmW2ldIDw8ICgyNCAtIDggKiAo
aSAmIDMpKTsKKyAgICB9CisgICAgY2hlY2tzdW0gKz0gdjsKKyAgfQorCiAgIHJldHVybiBjaGVj
a3N1bTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYy
X2NvbXByZXNzLmNjIGIvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2NvbXByZXNz
LmNjCmluZGV4IGVjNDFhZDUuLmU1Y2Y3MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L3dvZmYyL3NyYy93b2ZmMl9jb21wcmVzcy5jYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2Zm
Mi9zcmMvd29mZjJfY29tcHJlc3MuY2MKQEAgLTQ3LDcgKzQ3LDcgQEAgaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIgKiphcmd2KSB7CiAgIH0KICAgb3V0cHV0LnJlc2l6ZShvdXRwdXRfc2l6ZSk7CiAK
LSAgd29mZjI6OlNldEZpbGVDb250ZW50cyhvdXRmaWxlbmFtZSwgb3V0cHV0KTsKKyAgd29mZjI6
OlNldEZpbGVDb250ZW50cyhvdXRmaWxlbmFtZSwgb3V0cHV0LmJlZ2luKCksIG91dHB1dC5lbmQo
KSk7CiAKICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2Zm
Mi9zcmMvd29mZjJfZGVjLmNjIGIvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2Rl
Yy5jYwppbmRleCAyZmEyOTFjLi5lYzc1Nzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS93b2ZmMi9zcmMvd29mZjJfZGVjLmNjCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3Ny
Yy93b2ZmMl9kZWMuY2MKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAjaW5j
bHVkZSA8bWFwPgogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5j
bHVkZSAiLi9kZWNvZGUuaCIKICNpbmNsdWRlICIuL2J1ZmZlci5oIgpAQCAtNjUsMTMgKzY2LDU0
IEBAIGNvbnN0IHNpemVfdCBrQ2hlY2tTdW1BZGp1c3RtZW50T2Zmc2V0ID0gODsKIGNvbnN0IHNp
emVfdCBrRW5kUHRzT2ZDb250b3Vyc09mZnNldCA9IDEwOwogY29uc3Qgc2l6ZV90IGtDb21wb3Np
dGVHbHlwaEJlZ2luID0gMTA7CiAKKy8vIDk4JSBvZiBHb29nbGUgRm9udHMgaGF2ZSBubyBnbHlw
aCBhYm92ZSA1ayBieXRlcworLy8gTGFyZ2VzdCBnbHlwaCBldmVyIG9ic2VydmVkIHdhcyA3Mmsg
Ynl0ZXMKK2NvbnN0IHNpemVfdCBrRGVmYXVsdEdseXBoQnVmID0gNTEyMDsKKworLy8gT3ZlciAx
NGsgdGVzdCBmb250cyB0aGUgbWF4IGNvbXByZXNzaW9uIHJhdGlvIHNlZW4gdG8gZGF0ZSB3YXMg
fjIwLgorLy8gPjEwMCBzdWdnZXN0cyB5b3Ugd3JvdGUgYSBiYWQgdW5jb21wcmVzc2VkIHNpemUu
Citjb25zdCBmbG9hdCBrTWF4UGxhdXNpYmxlQ29tcHJlc3Npb25SYXRpbyA9IDEwMC4wOworCiAv
LyBtZXRhZGF0YSBmb3IgYSBUVEMgZm9udCBlbnRyeQogc3RydWN0IFR0Y0ZvbnQgewogICB1aW50
MzJfdCBmbGF2b3I7CiAgIHVpbnQzMl90IGRzdF9vZmZzZXQ7CisgIHVpbnQzMl90IGhlYWRlcl9j
aGVja3N1bTsKICAgc3RkOjp2ZWN0b3I8dWludDE2X3Q+IHRhYmxlX2luZGljZXM7CiB9OwogCitz
dHJ1Y3QgV09GRjJIZWFkZXIgeworICB1aW50MzJfdCBmbGF2b3I7CisgIHVpbnQzMl90IGhlYWRl
cl92ZXJzaW9uOworICB1aW50MTZfdCBudW1fdGFibGVzOworICB1aW50NjRfdCBjb21wcmVzc2Vk
X29mZnNldDsKKyAgdWludDMyX3QgY29tcHJlc3NlZF9sZW5ndGg7CisgIHVpbnQzMl90IHVuY29t
cHJlc3NlZF9zaXplOworICBzdGQ6OnZlY3RvcjxUYWJsZT4gdGFibGVzOyAgLy8gbnVtX3RhYmxl
cyB1bmlxdWUgdGFibGVzCisgIHN0ZDo6dmVjdG9yPFR0Y0ZvbnQ+IHR0Y19mb250czsgIC8vIG1l
dGFkYXRhIHRvIGhlbHAgcmVidWlsZCBmb250Cit9OworCisvKioKKyAqIEFjY3VtdWxhdGVzIGRh
dGEgd2UgbWF5IG5lZWQgdG8gcmVjb25zdHJ1Y3QgYSBzaW5nbGUgZm9udC4gT25lIHBlciBmb250
CisgKiBjcmVhdGVkIGZvciBhIFRUQy4KKyAqLworc3RydWN0IFdPRkYyRm9udEluZm8geworICB1
aW50MTZfdCBudW1fZ2x5cGhzOworICB1aW50MTZfdCBpbmRleF9mb3JtYXQ7CisgIHVpbnQxNl90
IG51bV9obWV0cmljczsKKyAgc3RkOjp2ZWN0b3I8aW50MTZfdD4geF9taW5zOworICBzdGQ6Om1h
cDx1aW50MzJfdCwgdWludDMyX3Q+IHRhYmxlX2VudHJ5X2J5X3RhZzsKK307CisKKy8vIEFjY3Vt
dWxhdGVzIG1ldGFkYXRhIGFzIHdlIHJlYnVpbGQgdGhlIGZvbnQKK3N0cnVjdCBSZWJ1aWxkTWV0
YWRhdGEgeworICB1aW50MzJfdCBoZWFkZXJfY2hlY2tzdW07ICAvLyBzZXQgYnkgV3JpdGVIZWFk
ZXJzCisgIHN0ZDo6dmVjdG9yPFdPRkYyRm9udEluZm8+IGZvbnRfaW5mb3M7CisgIC8vIGNoZWNr
c3VtcyBmb3IgdGFibGVzIHRoYXQgaGF2ZSBiZWVuIHdyaXR0ZW4uCisgIC8vICh0YWcsIHNyY19v
ZmZzZXQpID0+IGNoZWNrc3VtLiBOZWVkIGJvdGggYmVjYXVzZSAwLWxlbmd0aCBsb2NhLgorICBz
dGQ6Om1hcDxzdGQ6OnBhaXI8dWludDMyX3QsIHVpbnQzMl90PiwgdWludDMyX3Q+IGNoZWNrc3Vt
czsKK307CisKIGludCBXaXRoU2lnbihpbnQgZmxhZywgaW50IGJhc2V2YWwpIHsKICAgLy8gUHJl
Y29uZGl0aW9uOiAwIDw9IGJhc2V2YWwgPCA2NTUzNiAodG8gYXZvaWQgaW50ZWdlciBvdmVyZmxv
dykKICAgcmV0dXJuIChmbGFnICYgMSkgPyBiYXNldmFsIDogLWJhc2V2YWw7CkBAIC0yNDQsNiAr
Mjg2LDcgQEAgYm9vbCBTdG9yZVBvaW50cyh1bnNpZ25lZCBpbnQgbl9wb2ludHMsIGNvbnN0IFBv
aW50KiBwb2ludHMsCiAKIC8vIENvbXB1dGUgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgY29vcmRp
bmF0ZXMsIGFuZCBzdG9yZSBpbnRvIGEgZ2x5ZiBidWZmZXIuCiAvLyBBIHByZWNvbmRpdGlvbiBp
cyB0aGF0IHRoZXJlIGFyZSBhdCBsZWFzdCAxMCBieXRlcyBhdmFpbGFibGUuCisvLyBkc3Qgc2hv
dWxkIHBvaW50IHRvIHRoZSBiZWdpbm5pbmcgb2YgYSAnZ2x5ZicgcmVjb3JkLgogdm9pZCBDb21w
dXRlQmJveCh1bnNpZ25lZCBpbnQgbl9wb2ludHMsIGNvbnN0IFBvaW50KiBwb2ludHMsIHVpbnQ4
X3QqIGRzdCkgewogICBpbnQgeF9taW4gPSAwOwogICBpbnQgeV9taW4gPSAwOwpAQCAtMjcxLDE0
ICszMTQsMTUgQEAgdm9pZCBDb21wdXRlQmJveCh1bnNpZ25lZCBpbnQgbl9wb2ludHMsIGNvbnN0
IFBvaW50KiBwb2ludHMsIHVpbnQ4X3QqIGRzdCkgewogICBvZmZzZXQgPSBTdG9yZTE2KGRzdCwg
b2Zmc2V0LCB5X21heCk7CiB9CiAKLWJvb2wgUHJvY2Vzc0NvbXBvc2l0ZShCdWZmZXIqIGNvbXBv
c2l0ZV9zdHJlYW0sIHVpbnQ4X3QqIGRzdCwKLSAgICBzaXplX3QgZHN0X3NpemUsIHNpemVfdCog
Z2x5cGhfc2l6ZSwgYm9vbCogaGF2ZV9pbnN0cnVjdGlvbnMpIHsKLSAgc2l6ZV90IHN0YXJ0X29m
ZnNldCA9IGNvbXBvc2l0ZV9zdHJlYW0tPm9mZnNldCgpOworCitib29sIFNpemVPZkNvbXBvc2l0
ZShCdWZmZXIgY29tcG9zaXRlX3N0cmVhbSwgc2l6ZV90KiBzaXplLAorICAgICAgICAgICAgICAg
ICAgICAgYm9vbCogaGF2ZV9pbnN0cnVjdGlvbnMpIHsKKyAgc2l6ZV90IHN0YXJ0X29mZnNldCA9
IGNvbXBvc2l0ZV9zdHJlYW0ub2Zmc2V0KCk7CiAgIGJvb2wgd2VfaGF2ZV9pbnN0cnVjdGlvbnMg
PSBmYWxzZTsKIAogICB1aW50MTZfdCBmbGFncyA9IEZMQUdfTU9SRV9DT01QT05FTlRTOwogICB3
aGlsZSAoZmxhZ3MgJiBGTEFHX01PUkVfQ09NUE9ORU5UUykgewotICAgIGlmIChQUkVESUNUX0ZB
TFNFKCFjb21wb3NpdGVfc3RyZWFtLT5SZWFkVTE2KCZmbGFncykpKSB7CisgICAgaWYgKFBSRURJ
Q1RfRkFMU0UoIWNvbXBvc2l0ZV9zdHJlYW0uUmVhZFUxNigmZmxhZ3MpKSkgewogICAgICAgcmV0
dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0KICAgICB3ZV9oYXZlX2luc3Ry
dWN0aW9ucyB8PSAoZmxhZ3MgJiBGTEFHX1dFX0hBVkVfSU5TVFJVQ1RJT05TKSAhPSAwOwpAQCAt
Mjk1LDM0ICszMzksNDMgQEAgYm9vbCBQcm9jZXNzQ29tcG9zaXRlKEJ1ZmZlciogY29tcG9zaXRl
X3N0cmVhbSwgdWludDhfdCogZHN0LAogICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiBGTEFHX1dFX0hB
VkVfQV9UV09fQllfVFdPKSB7CiAgICAgICBhcmdfc2l6ZSArPSA4OwogICAgIH0KLSAgICBpZiAo
UFJFRElDVF9GQUxTRSghY29tcG9zaXRlX3N0cmVhbS0+U2tpcChhcmdfc2l6ZSkpKSB7CisgICAg
aWYgKFBSRURJQ1RfRkFMU0UoIWNvbXBvc2l0ZV9zdHJlYW0uU2tpcChhcmdfc2l6ZSkpKSB7CiAg
ICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgfQogICB9Ci0gIHNp
emVfdCBjb21wb3NpdGVfZ2x5cGhfc2l6ZSA9IGNvbXBvc2l0ZV9zdHJlYW0tPm9mZnNldCgpIC0g
c3RhcnRfb2Zmc2V0OwotICBpZiAoUFJFRElDVF9GQUxTRShjb21wb3NpdGVfZ2x5cGhfc2l6ZSAr
IGtDb21wb3NpdGVHbHlwaEJlZ2luID4gZHN0X3NpemUpKSB7CisKKyAgKnNpemUgPSBjb21wb3Np
dGVfc3RyZWFtLm9mZnNldCgpIC0gc3RhcnRfb2Zmc2V0OworICAqaGF2ZV9pbnN0cnVjdGlvbnMg
PSB3ZV9oYXZlX2luc3RydWN0aW9uczsKKworICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQYWQ0
KFdPRkYyT3V0KiBvdXQpIHsKKyAgdWludDhfdCB6ZXJvZXNbXSA9IHswLCAwLCAwfTsKKyAgaWYg
KFBSRURJQ1RfRkFMU0Uob3V0LT5TaXplKCkgKyAzIDwgb3V0LT5TaXplKCkpKSB7CiAgICAgcmV0
dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9Ci0gIFN0b3JlMTYoZHN0LCAwLCAw
eGZmZmYpOyAgLy8gbkNvbnRvdXJzID0gLTEgZm9yIGNvbXBvc2l0ZSBnbHlwaAotICBzdGQ6Om1l
bWNweShkc3QgKyBrQ29tcG9zaXRlR2x5cGhCZWdpbiwKLSAgICAgIGNvbXBvc2l0ZV9zdHJlYW0t
PmJ1ZmZlcigpICsgc3RhcnRfb2Zmc2V0LAotICAgICAgY29tcG9zaXRlX2dseXBoX3NpemUpOwot
ICAqZ2x5cGhfc2l6ZSA9IGtDb21wb3NpdGVHbHlwaEJlZ2luICsgY29tcG9zaXRlX2dseXBoX3Np
emU7Ci0gICpoYXZlX2luc3RydWN0aW9ucyA9IHdlX2hhdmVfaW5zdHJ1Y3Rpb25zOworICB1aW50
MzJfdCBwYWRfYnl0ZXMgPSBSb3VuZDQob3V0LT5TaXplKCkpIC0gb3V0LT5TaXplKCk7CisgIGlm
IChwYWRfYnl0ZXMgPiAwKSB7CisgICAgaWYgKFBSRURJQ1RfRkFMU0UoIW91dC0+V3JpdGUoJnpl
cm9lcywgcGFkX2J5dGVzKSkpIHsKKyAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxV
UkUoKTsKKyAgICB9CisgIH0KICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vIEJ1aWxkIFRydWVUeXBl
IGxvY2EgdGFibGUKIGJvb2wgU3RvcmVMb2NhKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQzMl90PiYg
bG9jYV92YWx1ZXMsIGludCBpbmRleF9mb3JtYXQsCi0gICAgICAgICAgICAgICB1aW50OF90KiBk
c3QsIHNpemVfdCBkc3Rfc2l6ZSkgeworICAgICAgICAgICAgICAgdWludDMyX3QqIGNoZWNrc3Vt
LCBXT0ZGMk91dCogb3V0KSB7CisgIC8vIFRPRE8odXNlcikgZmlndXJlIG91dCB3aGF0IGluZGV4
IGZvcm1hdCB0byB1c2UgYmFzZWQgb24gd2hldGhlciBtYXgKKyAgLy8gb2Zmc2V0IGZpdHMgaW50
byB1aW50MTZfdCBvciBub3QKICAgY29uc3QgdWludDY0X3QgbG9jYV9zaXplID0gbG9jYV92YWx1
ZXMuc2l6ZSgpOwogICBjb25zdCB1aW50NjRfdCBvZmZzZXRfc2l6ZSA9IGluZGV4X2Zvcm1hdCA/
IDQgOiAyOwogICBpZiAoUFJFRElDVF9GQUxTRSgobG9jYV9zaXplIDw8IDIpID4+IDIgIT0gbG9j
YV9zaXplKSkgewogICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQot
ICBpZiAoUFJFRElDVF9GQUxTRShvZmZzZXRfc2l6ZSAqIGxvY2Ffc2l6ZSA+IGRzdF9zaXplKSkg
ewotICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQorICBzdGQ6OnZl
Y3Rvcjx1aW50OF90PiBsb2NhX2NvbnRlbnQobG9jYV9zaXplICogb2Zmc2V0X3NpemUpOworICB1
aW50OF90KiBkc3QgPSAmbG9jYV9jb250ZW50WzBdOwogICBzaXplX3Qgb2Zmc2V0ID0gMDsKICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsb2NhX3ZhbHVlcy5zaXplKCk7ICsraSkgewogICAgIHVp
bnQzMl90IHZhbHVlID0gbG9jYV92YWx1ZXNbaV07CkBAIC0zMzIsMzAgKzM4NSwzNCBAQCBib29s
IFN0b3JlTG9jYShjb25zdCBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4mIGxvY2FfdmFsdWVzLCBpbnQg
aW5kZXhfZm9ybWF0LAogICAgICAgb2Zmc2V0ID0gU3RvcmUxNihkc3QsIG9mZnNldCwgdmFsdWUg
Pj4gMSk7CiAgICAgfQogICB9CisgICpjaGVja3N1bSA9IENvbXB1dGVVTG9uZ1N1bSgmbG9jYV9j
b250ZW50WzBdLCBsb2NhX2NvbnRlbnQuc2l6ZSgpKTsKKyAgaWYgKFBSRURJQ1RfRkFMU0UoIW91
dC0+V3JpdGUoJmxvY2FfY29udGVudFswXSwgbG9jYV9jb250ZW50LnNpemUoKSkpKSB7CisgICAg
cmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICB9CiAgIHJldHVybiB0cnVlOwog
fQogCiAvLyBSZWNvbnN0cnVjdCBlbnRpcmUgZ2x5ZiB0YWJsZSBiYXNlZCBvbiB0cmFuc2Zvcm1l
ZCBvcmlnaW5hbAotYm9vbCBSZWNvbnN0cnVjdEdseWYoY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IGRhdGFfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdCwgc2l6ZV90
IGRzdF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogbG9jYV9idWYsIHNpemVf
dCBsb2NhX3NpemUpIHsKK2Jvb2wgUmVjb25zdHJ1Y3RHbHlmKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IFRhYmxlKiBnbHlmX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIGdseWZf
Y2hlY2tzdW0sIFRhYmxlICogbG9jYV90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90KiBsb2NhX2NoZWNrc3VtLCBXT0ZGMkZvbnRJbmZvKiBpbmZvLAorICAgICAgICAgICAgICAg
ICAgICAgV09GRjJPdXQqIG91dCkgewogICBzdGF0aWMgY29uc3QgaW50IGtOdW1TdWJTdHJlYW1z
ID0gNzsKLSAgQnVmZmVyIGZpbGUoZGF0YSwgZGF0YV9zaXplKTsKKyAgQnVmZmVyIGZpbGUoZGF0
YSwgZ2x5Zl90YWJsZS0+dHJhbnNmb3JtX2xlbmd0aCk7CiAgIHVpbnQzMl90IHZlcnNpb247CiAg
IHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxjb25zdCB1aW50OF90Kiwgc2l6ZV90PiA+IHN1YnN0cmVh
bXMoa051bVN1YlN0cmVhbXMpOworICBjb25zdCBzaXplX3QgZ2x5Zl9zdGFydCA9IG91dC0+U2l6
ZSgpOwogCiAgIGlmIChQUkVESUNUX0ZBTFNFKCFmaWxlLlJlYWRVMzIoJnZlcnNpb24pKSkgewog
ICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQotICB1aW50MTZfdCBu
dW1fZ2x5cGhzOwotICB1aW50MTZfdCBpbmRleF9mb3JtYXQ7Ci0gIGlmIChQUkVESUNUX0ZBTFNF
KCFmaWxlLlJlYWRVMTYoJm51bV9nbHlwaHMpIHx8Ci0gICAgICAhZmlsZS5SZWFkVTE2KCZpbmRl
eF9mb3JtYXQpKSkgeworICBpZiAoUFJFRElDVF9GQUxTRSghZmlsZS5SZWFkVTE2KCZpbmZvLT5u
dW1fZ2x5cGhzKSB8fAorICAgICAgIWZpbGUuUmVhZFUxNigmaW5mby0+aW5kZXhfZm9ybWF0KSkp
IHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0KIAogICB1bnNp
Z25lZCBpbnQgb2Zmc2V0ID0gKDIgKyBrTnVtU3ViU3RyZWFtcykgKiA0OwotICBpZiAoUFJFRElD
VF9GQUxTRShvZmZzZXQgPiBkYXRhX3NpemUpKSB7CisgIGlmIChQUkVESUNUX0ZBTFNFKG9mZnNl
dCA+IGdseWZfdGFibGUtPnRyYW5zZm9ybV9sZW5ndGgpKSB7CiAgICAgcmV0dXJuIEZPTlRfQ09N
UFJFU1NJT05fRkFJTFVSRSgpOwogICB9CiAgIC8vIEludmFyaWFudCBmcm9tIGhlcmUgb246IGRh
dGFfc2l6ZSA+PSBvZmZzZXQKQEAgLTM2NCw3ICs0MjEsNyBAQCBib29sIFJlY29uc3RydWN0R2x5
Zihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YV9zaXplLAogICAgIGlmIChQUkVESUNU
X0ZBTFNFKCFmaWxlLlJlYWRVMzIoJnN1YnN0cmVhbV9zaXplKSkpIHsKICAgICAgIHJldHVybiBG
T05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgICB9Ci0gICAgaWYgKFBSRURJQ1RfRkFMU0Uo
c3Vic3RyZWFtX3NpemUgPiBkYXRhX3NpemUgLSBvZmZzZXQpKSB7CisgICAgaWYgKFBSRURJQ1Rf
RkFMU0Uoc3Vic3RyZWFtX3NpemUgPiBnbHlmX3RhYmxlLT50cmFuc2Zvcm1fbGVuZ3RoIC0gb2Zm
c2V0KSkgewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0K
ICAgICBzdWJzdHJlYW1zW2ldID0gc3RkOjptYWtlX3BhaXIoZGF0YSArIG9mZnNldCwgc3Vic3Ry
ZWFtX3NpemUpOwpAQCAtMzc4LDE4ICs0MzUsMjMgQEAgYm9vbCBSZWNvbnN0cnVjdEdseWYoY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSwKICAgQnVmZmVyIGJib3hfc3RyZWFt
KHN1YnN0cmVhbXNbNV0uZmlyc3QsIHN1YnN0cmVhbXNbNV0uc2Vjb25kKTsKICAgQnVmZmVyIGlu
c3RydWN0aW9uX3N0cmVhbShzdWJzdHJlYW1zWzZdLmZpcnN0LCBzdWJzdHJlYW1zWzZdLnNlY29u
ZCk7CiAKLSAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IGxvY2FfdmFsdWVzKG51bV9nbHlwaHMgKyAx
KTsKKyAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IGxvY2FfdmFsdWVzKGluZm8tPm51bV9nbHlwaHMg
KyAxKTsKICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQgaW50PiBuX3BvaW50c192ZWM7CiAgIHN0ZDo6
dW5pcXVlX3B0cjxQb2ludFtdPiBwb2ludHM7CiAgIHNpemVfdCBwb2ludHNfc2l6ZSA9IDA7Ci0g
IHVpbnQzMl90IGxvY2Ffb2Zmc2V0ID0gMDsKICAgY29uc3QgdWludDhfdCogYmJveF9iaXRtYXAg
PSBiYm94X3N0cmVhbS5idWZmZXIoKTsKICAgLy8gU2FmZSBiZWNhdXNlIG51bV9nbHlwaHMgaXMg
Ym91bmRlZAotICB1bnNpZ25lZCBpbnQgYml0bWFwX2xlbmd0aCA9ICgobnVtX2dseXBocyArIDMx
KSA+PiA1KSA8PCAyOworICB1bnNpZ25lZCBpbnQgYml0bWFwX2xlbmd0aCA9ICgoaW5mby0+bnVt
X2dseXBocyArIDMxKSA+PiA1KSA8PCAyOwogICBpZiAoIWJib3hfc3RyZWFtLlNraXAoYml0bWFw
X2xlbmd0aCkpIHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0K
LSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1fZ2x5cGhzOyArK2kpIHsKKworICAv
LyBUZW1wIGJ1ZmZlciBmb3IgZ2x5cGgncy4KKyAgc2l6ZV90IGdseXBoX2J1Zl9zaXplID0ga0Rl
ZmF1bHRHbHlwaEJ1ZjsKKyAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gZ2x5cGhfYnVmKG5l
dyB1aW50OF90W2dseXBoX2J1Zl9zaXplXSk7CisKKyAgaW5mby0+eF9taW5zLnJlc2l6ZShpbmZv
LT5udW1fZ2x5cGhzKTsKKyAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBpbmZvLT5udW1f
Z2x5cGhzOyArK2kpIHsKICAgICBzaXplX3QgZ2x5cGhfc2l6ZSA9IDA7CiAgICAgdWludDE2X3Qg
bl9jb250b3VycyA9IDA7CiAgICAgYm9vbCBoYXZlX2Jib3ggPSBmYWxzZTsKQEAgLTM5OSw4ICs0
NjEsNiBAQCBib29sIFJlY29uc3RydWN0R2x5Zihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qg
ZGF0YV9zaXplLAogICAgIGlmIChQUkVESUNUX0ZBTFNFKCFuX2NvbnRvdXJfc3RyZWFtLlJlYWRV
MTYoJm5fY29udG91cnMpKSkgewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVS
RSgpOwogICAgIH0KLSAgICB1aW50OF90KiBnbHlmX2RzdCA9IGRzdCArIGxvY2Ffb2Zmc2V0Owot
ICAgIHNpemVfdCBnbHlmX2RzdF9zaXplID0gZHN0X3NpemUgLSBsb2NhX29mZnNldDsKIAogICAg
IGlmIChuX2NvbnRvdXJzID09IDB4ZmZmZikgewogICAgICAgLy8gY29tcG9zaXRlIGdseXBoCkBA
IC00MTAsMjYgKzQ3MCw0MiBAQCBib29sIFJlY29uc3RydWN0R2x5Zihjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3QgZGF0YV9zaXplLAogICAgICAgICAvLyBjb21wb3NpdGUgZ2x5cGhzIG11c3Qg
aGF2ZSBhbiBleHBsaWNpdCBiYm94CiAgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZB
SUxVUkUoKTsKICAgICAgIH0KLSAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFQcm9jZXNzQ29tcG9z
aXRlKCZjb21wb3NpdGVfc3RyZWFtLCBnbHlmX2RzdCwKLSAgICAgICAgICAgIGdseWZfZHN0X3Np
emUsICZnbHlwaF9zaXplLCAmaGF2ZV9pbnN0cnVjdGlvbnMpKSkgewotICAgICAgICByZXR1cm4g
Rk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9Ci0gICAgICBpZiAoUFJFRElDVF9G
QUxTRSghYmJveF9zdHJlYW0uUmVhZChnbHlmX2RzdCArIDIsIDgpKSkgeworCisgICAgICBzaXpl
X3QgY29tcG9zaXRlX3NpemU7CisgICAgICBpZiAoUFJFRElDVF9GQUxTRSghU2l6ZU9mQ29tcG9z
aXRlKGNvbXBvc2l0ZV9zdHJlYW0sICZjb21wb3NpdGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJmhhdmVfaW5zdHJ1Y3Rpb25zKSkpIHsKICAgICAgICAg
cmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgICAgfQogICAgICAgaWYgKGhh
dmVfaW5zdHJ1Y3Rpb25zKSB7CiAgICAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFSZWFkMjU1VVNo
b3J0KCZnbHlwaF9zdHJlYW0sICZpbnN0cnVjdGlvbl9zaXplKSkpIHsKICAgICAgICAgICByZXR1
cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKFBS
RURJQ1RfRkFMU0UoaW5zdHJ1Y3Rpb25fc2l6ZSArIDIgPiBnbHlmX2RzdF9zaXplIC0gZ2x5cGhf
c2l6ZSkpIHsKLSAgICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgU3RvcmUxNihnbHlmX2RzdCwgZ2x5cGhfc2l6ZSwgaW5zdHJ1Y3Rp
b25fc2l6ZSk7Ci0gICAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFpbnN0cnVjdGlvbl9zdHJlYW0u
UmVhZChnbHlmX2RzdCArIGdseXBoX3NpemUgKyAyLAorICAgICAgfQorCisgICAgICBzaXplX3Qg
c2l6ZV9uZWVkZWQgPSAxMiArIGNvbXBvc2l0ZV9zaXplICsgaW5zdHJ1Y3Rpb25fc2l6ZTsKKyAg
ICAgIGlmIChQUkVESUNUX0ZBTFNFKGdseXBoX2J1Zl9zaXplIDwgc2l6ZV9uZWVkZWQpKSB7Cisg
ICAgICAgIGdseXBoX2J1Zi5yZXNldChuZXcgdWludDhfdFtzaXplX25lZWRlZF0pOworICAgICAg
ICBnbHlwaF9idWZfc2l6ZSA9IHNpemVfbmVlZGVkOworICAgICAgfQorCisgICAgICBnbHlwaF9z
aXplID0gU3RvcmUxNihnbHlwaF9idWYuZ2V0KCksIGdseXBoX3NpemUsIG5fY29udG91cnMpOwor
ICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoIWJib3hfc3RyZWFtLlJlYWQoZ2x5cGhfYnVmLmdldCgp
ICsgZ2x5cGhfc2l6ZSwgOCkpKSB7CisgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZB
SUxVUkUoKTsKKyAgICAgIH0KKyAgICAgIGdseXBoX3NpemUgKz0gODsKKworICAgICAgaWYgKFBS
RURJQ1RfRkFMU0UoIWNvbXBvc2l0ZV9zdHJlYW0uUmVhZChnbHlwaF9idWYuZ2V0KCkgKyBnbHlw
aF9zaXplLAorICAgICAgICAgICAgY29tcG9zaXRlX3NpemUpKSkgeworICAgICAgICByZXR1cm4g
Rk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CisgICAgICB9CisgICAgICBnbHlwaF9zaXplICs9
IGNvbXBvc2l0ZV9zaXplOworICAgICAgaWYgKGhhdmVfaW5zdHJ1Y3Rpb25zKSB7CisgICAgICAg
IGdseXBoX3NpemUgPSBTdG9yZTE2KGdseXBoX2J1Zi5nZXQoKSwgZ2x5cGhfc2l6ZSwgaW5zdHJ1
Y3Rpb25fc2l6ZSk7CisgICAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFpbnN0cnVjdGlvbl9zdHJl
YW0uUmVhZChnbHlwaF9idWYuZ2V0KCkgKyBnbHlwaF9zaXplLAogICAgICAgICAgICAgICBpbnN0
cnVjdGlvbl9zaXplKSkpIHsKICAgICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlM
VVJFKCk7CiAgICAgICAgIH0KLSAgICAgICAgZ2x5cGhfc2l6ZSArPSBpbnN0cnVjdGlvbl9zaXpl
ICsgMjsKKyAgICAgICAgZ2x5cGhfc2l6ZSArPSBpbnN0cnVjdGlvbl9zaXplOwogICAgICAgfQog
ICAgIH0gZWxzZSBpZiAobl9jb250b3VycyA+IDApIHsKICAgICAgIC8vIHNpbXBsZSBnbHlwaApA
QCAtNDY1LDE0MSArNTQxLDExMCBAQCBib29sIFJlY29uc3RydWN0R2x5Zihjb25zdCB1aW50OF90
KiBkYXRhLCBzaXplX3QgZGF0YV9zaXplLAogICAgICAgICAgIHRvdGFsX25fcG9pbnRzLCBwb2lu
dHMuZ2V0KCksICZ0cmlwbGV0X2J5dGVzX2NvbnN1bWVkKSkpIHsKICAgICAgICAgcmV0dXJuIEZP
TlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgICAgfQotICAgICAgY29uc3QgdWludDMyX3Qg
aGVhZGVyX2FuZF9lbmRwdHNfY29udG91cnNfc2l6ZSA9Ci0gICAgICAgICAga0VuZFB0c09mQ29u
dG91cnNPZmZzZXQgKyAyICogbl9jb250b3VyczsKLSAgICAgIGlmIChQUkVESUNUX0ZBTFNFKGds
eWZfZHN0X3NpemUgPCBoZWFkZXJfYW5kX2VuZHB0c19jb250b3Vyc19zaXplKSkgeworICAgICAg
aWYgKFBSRURJQ1RfRkFMU0UoIWZsYWdfc3RyZWFtLlNraXAoZmxhZ19zaXplKSkpIHsKICAgICAg
ICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgICAgfQotICAgICAgU3Rv
cmUxNihnbHlmX2RzdCwgMCwgbl9jb250b3Vycyk7CisgICAgICBpZiAoUFJFRElDVF9GQUxTRSgh
Z2x5cGhfc3RyZWFtLlNraXAodHJpcGxldF9ieXRlc19jb25zdW1lZCkpKSB7CisgICAgICAgIHJl
dHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICAgIH0KKyAgICAgIHVuc2lnbmVk
IGludCBpbnN0cnVjdGlvbl9zaXplOworICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoIVJlYWQyNTVV
U2hvcnQoJmdseXBoX3N0cmVhbSwgJmluc3RydWN0aW9uX3NpemUpKSkgeworICAgICAgICByZXR1
cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CisgICAgICB9CisKKyAgICAgIGlmIChQUkVE
SUNUX0ZBTFNFKHRvdGFsX25fcG9pbnRzID49ICgxIDw8IDI3KQorICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgaW5zdHJ1Y3Rpb25fc2l6ZSA+PSAoMSA8PCAzMCkpKSB7CisgICAgICAgIHJldHVy
biBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICAgIH0KKyAgICAgIHNpemVfdCBzaXpl
X25lZWRlZCA9IDEyICsgMiAqIG5fY29udG91cnMgKyA1ICogdG90YWxfbl9wb2ludHMKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICsgaW5zdHJ1Y3Rpb25fc2l6ZTsKKyAgICAgIGlmIChQUkVE
SUNUX0ZBTFNFKGdseXBoX2J1Zl9zaXplIDwgc2l6ZV9uZWVkZWQpKSB7CisgICAgICAgIGdseXBo
X2J1Zi5yZXNldChuZXcgdWludDhfdFtzaXplX25lZWRlZF0pOworICAgICAgICBnbHlwaF9idWZf
c2l6ZSA9IHNpemVfbmVlZGVkOworICAgICAgfQorCisgICAgICBnbHlwaF9zaXplID0gU3RvcmUx
NihnbHlwaF9idWYuZ2V0KCksIGdseXBoX3NpemUsIG5fY29udG91cnMpOwogICAgICAgaWYgKGhh
dmVfYmJveCkgewotICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSghYmJveF9zdHJlYW0uUmVhZChn
bHlmX2RzdCArIDIsIDgpKSkgeworICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSghYmJveF9zdHJl
YW0uUmVhZChnbHlwaF9idWYuZ2V0KCkgKyBnbHlwaF9zaXplLCA4KSkpIHsKICAgICAgICAgICBy
ZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICAgIH0KICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIENvbXB1dGVCYm94KHRvdGFsX25fcG9pbnRzLCBwb2ludHMuZ2V0KCksIGds
eWZfZHN0KTsKKyAgICAgICAgQ29tcHV0ZUJib3godG90YWxfbl9wb2ludHMsIHBvaW50cy5nZXQo
KSwgZ2x5cGhfYnVmLmdldCgpKTsKICAgICAgIH0KLSAgICAgIHNpemVfdCBvZmZzZXQgPSBrRW5k
UHRzT2ZDb250b3Vyc09mZnNldDsKKyAgICAgIGdseXBoX3NpemUgPSBrRW5kUHRzT2ZDb250b3Vy
c09mZnNldDsKICAgICAgIGludCBlbmRfcG9pbnQgPSAtMTsKICAgICAgIGZvciAodW5zaWduZWQg
aW50IGNvbnRvdXJfaXggPSAwOyBjb250b3VyX2l4IDwgbl9jb250b3VyczsgKytjb250b3VyX2l4
KSB7CiAgICAgICAgIGVuZF9wb2ludCArPSBuX3BvaW50c192ZWNbY29udG91cl9peF07CiAgICAg
ICAgIGlmIChQUkVESUNUX0ZBTFNFKGVuZF9wb2ludCA+PSA2NTUzNikpIHsKICAgICAgICAgICBy
ZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICAgIH0KLSAgICAgICAgb2Zm
c2V0ID0gU3RvcmUxNihnbHlmX2RzdCwgb2Zmc2V0LCBlbmRfcG9pbnQpOwotICAgICAgfQotICAg
ICAgaWYgKFBSRURJQ1RfRkFMU0UoIWZsYWdfc3RyZWFtLlNraXAoZmxhZ19zaXplKSkpIHsKLSAg
ICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICAgICAgICBnbHlwaF9z
aXplID0gU3RvcmUxNihnbHlwaF9idWYuZ2V0KCksIGdseXBoX3NpemUsIGVuZF9wb2ludCk7CiAg
ICAgICB9Ci0gICAgICBpZiAoUFJFRElDVF9GQUxTRSghZ2x5cGhfc3RyZWFtLlNraXAodHJpcGxl
dF9ieXRlc19jb25zdW1lZCkpKSB7Ci0gICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZB
SUxVUkUoKTsKLSAgICAgIH0KLSAgICAgIHVuc2lnbmVkIGludCBpbnN0cnVjdGlvbl9zaXplOwot
ICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoIVJlYWQyNTVVU2hvcnQoJmdseXBoX3N0cmVhbSwgJmlu
c3RydWN0aW9uX3NpemUpKSkgewotICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlM
VVJFKCk7Ci0gICAgICB9Ci0gICAgICBpZiAoUFJFRElDVF9GQUxTRShnbHlmX2RzdF9zaXplIC0g
aGVhZGVyX2FuZF9lbmRwdHNfY29udG91cnNfc2l6ZSA8Ci0gICAgICAgICAgaW5zdHJ1Y3Rpb25f
c2l6ZSArIDIpKSB7Ci0gICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsK
LSAgICAgIH0KLSAgICAgIHVpbnQ4X3QqIGluc3RydWN0aW9uX2RzdCA9IGdseWZfZHN0ICsgaGVh
ZGVyX2FuZF9lbmRwdHNfY29udG91cnNfc2l6ZTsKLSAgICAgIFN0b3JlMTYoaW5zdHJ1Y3Rpb25f
ZHN0LCAwLCBpbnN0cnVjdGlvbl9zaXplKTsKLSAgICAgIGlmIChQUkVESUNUX0ZBTFNFKAotICAg
ICAgICAgICFpbnN0cnVjdGlvbl9zdHJlYW0uUmVhZChpbnN0cnVjdGlvbl9kc3QgKyAyLCBpbnN0
cnVjdGlvbl9zaXplKSkpIHsKKworICAgICAgZ2x5cGhfc2l6ZSA9IFN0b3JlMTYoZ2x5cGhfYnVm
LmdldCgpLCBnbHlwaF9zaXplLCBpbnN0cnVjdGlvbl9zaXplKTsKKyAgICAgIGlmIChQUkVESUNU
X0ZBTFNFKCFpbnN0cnVjdGlvbl9zdHJlYW0uUmVhZChnbHlwaF9idWYuZ2V0KCkgKyBnbHlwaF9z
aXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
c3RydWN0aW9uX3NpemUpKSkgewogICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlM
VVJFKCk7CiAgICAgICB9CisgICAgICBnbHlwaF9zaXplICs9IGluc3RydWN0aW9uX3NpemU7CisK
ICAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFTdG9yZVBvaW50cyh0b3RhbF9uX3BvaW50cywgcG9p
bnRzLmdldCgpLCBuX2NvbnRvdXJzLAotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25fc2l6ZSwgZ2x5
Zl9kc3QsIGdseWZfZHN0X3NpemUsICZnbHlwaF9zaXplKSkpIHsKKyAgICAgICAgICAgIGluc3Ry
dWN0aW9uX3NpemUsIGdseXBoX2J1Zi5nZXQoKSwgZ2x5cGhfYnVmX3NpemUsICZnbHlwaF9zaXpl
KSkpIHsKICAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgICAg
fQotICAgIH0gZWxzZSB7Ci0gICAgICBnbHlwaF9zaXplID0gMDsKICAgICB9Ci0gICAgbG9jYV92
YWx1ZXNbaV0gPSBsb2NhX29mZnNldDsKLSAgICBpZiAoUFJFRElDVF9GQUxTRShnbHlwaF9zaXpl
ICsgMyA8IGdseXBoX3NpemUpKSB7CisKKyAgICBsb2NhX3ZhbHVlc1tpXSA9IG91dC0+U2l6ZSgp
IC0gZ2x5Zl9zdGFydDsKKyAgICBpZiAoUFJFRElDVF9GQUxTRSghb3V0LT5Xcml0ZShnbHlwaF9i
dWYuZ2V0KCksIGdseXBoX3NpemUpKSkgewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05f
RkFJTFVSRSgpOwogICAgIH0KLSAgICBnbHlwaF9zaXplID0gUm91bmQ0KGdseXBoX3NpemUpOwot
ICAgIGlmIChQUkVESUNUX0ZBTFNFKGdseXBoX3NpemUgPiBkc3Rfc2l6ZSAtIGxvY2Ffb2Zmc2V0
KSkgewotICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBidXQgdGhpcyB0ZXN0IGRlZmVu
c2l2ZWx5IG1haW50YWlucyB0aGUKLSAgICAgIC8vIGludmFyaWFudCB0aGF0IGxvY2Ffb2Zmc2V0
IDw9IGRzdF9zaXplLgorCisgICAgLy8gVE9ETyh1c2VyKSBPbGQgY29kZSBhbGlnbmVkIGdseXBo
cyAuLi4gYnV0IGRvIHdlIGFjdHVhbGx5IG5lZWQgdG8/CisgICAgaWYgKFBSRURJQ1RfRkFMU0Uo
IVBhZDQob3V0KSkpIHsKICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsK
ICAgICB9Ci0gICAgbG9jYV9vZmZzZXQgKz0gZ2x5cGhfc2l6ZTsKLSAgfQotICBsb2NhX3ZhbHVl
c1tudW1fZ2x5cGhzXSA9IGxvY2Ffb2Zmc2V0OwotICByZXR1cm4gU3RvcmVMb2NhKGxvY2FfdmFs
dWVzLCBpbmRleF9mb3JtYXQsIGxvY2FfYnVmLCBsb2NhX3NpemUpOwotfQogCi0vLyBUaGlzIGlz
IGxpbmVhciBzZWFyY2gsIGJ1dCBjb3VsZCBiZSBjaGFuZ2VkIHRvIGJpbmFyeSBiZWNhdXNlIHdl
Ci0vLyBkbyBoYXZlIGEgZ3VhcmFudGVlIHRoYXQgdGhlIHRhYmxlcyBhcmUgc29ydGVkIGJ5IHRh
Zy4gQnV0IHRoZSB0b3RhbAotLy8gY3B1IHRpbWUgaXMgZXhwZWN0ZWQgdG8gYmUgdmVyeSBzbWFs
bCBpbiBhbnkgY2FzZS4KLWNvbnN0IFRhYmxlKiBGaW5kVGFibGUoY29uc3Qgc3RkOjp2ZWN0b3I8
VGFibGU+JiB0YWJsZXMsIHVpbnQzMl90IHRhZykgewotICBzaXplX3Qgbl90YWJsZXMgPSB0YWJs
ZXMuc2l6ZSgpOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5fdGFibGVzOyArK2kpIHsKLSAg
ICBpZiAodGFibGVzW2ldLnRhZyA9PSB0YWcpIHsKLSAgICAgIHJldHVybiAmdGFibGVzW2ldOwor
ICAgICpnbHlmX2NoZWNrc3VtICs9IENvbXB1dGVVTG9uZ1N1bShnbHlwaF9idWYuZ2V0KCksIGds
eXBoX3NpemUpOworCisgICAgLy8gV2UgbWF5IG5lZWQgeF9taW4gdG8gcmVjb25zdHJ1Y3QgJ2ht
dHgnCisgICAgaWYgKG5fY29udG91cnMgPiAwKSB7CisgICAgICBCdWZmZXIgeF9taW5fYnVmKGds
eXBoX2J1Zi5nZXQoKSArIDIsIDIpOworICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoIXhfbWluX2J1
Zi5SZWFkUzE2KCZpbmZvLT54X21pbnNbaV0pKSkgeworICAgICAgICByZXR1cm4gRk9OVF9DT01Q
UkVTU0lPTl9GQUlMVVJFKCk7CisgICAgICB9CiAgICAgfQogICB9Ci0gIHJldHVybiBOVUxMOwot
fQogCi0vLyBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL21heHAu
aHRtCi1ib29sIFJlYWROdW1HbHlwaHMoY29uc3QgVGFibGUqIG1heHBfdGFibGUsCi0gICAgICAg
ICAgICAgICAgICAgdWludDhfdCogZHN0LCBzaXplX3QgZHN0X2xlbmd0aCwgdWludDE2X3QqIG51
bV9nbHlwaHMpIHsKLSAgaWYgKFBSRURJQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1h
eHBfdGFibGUtPmRzdF9vZmZzZXQgKwotICAgICAgbWF4cF90YWJsZS0+ZHN0X2xlbmd0aCkgPiBk
c3RfbGVuZ3RoKSkgewotICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAg
fQotICBCdWZmZXIgYnVmZmVyKGRzdCArIG1heHBfdGFibGUtPmRzdF9vZmZzZXQsIG1heHBfdGFi
bGUtPmRzdF9sZW5ndGgpOwotICAvLyBTa2lwIDQgdG8gcmVhY2ggJ21heHAnIG51bUdseXBocwot
ICBpZiAoUFJFRElDVF9GQUxTRSghYnVmZmVyLlNraXAoNCkgfHwgIWJ1ZmZlci5SZWFkVTE2KG51
bV9nbHlwaHMpKSkgeworICAvLyBnbHlmX3RhYmxlIGRzdF9vZmZzZXQgd2FzIHNldCBieSBSZWNv
bnN0cnVjdEZvbnQKKyAgZ2x5Zl90YWJsZS0+ZHN0X2xlbmd0aCA9IG91dC0+U2l6ZSgpIC0gZ2x5
Zl90YWJsZS0+ZHN0X29mZnNldDsKKyAgbG9jYV90YWJsZS0+ZHN0X29mZnNldCA9IG91dC0+U2l6
ZSgpOworICAvLyBsb2NhW25dIHdpbGwgYmUgZXF1YWwgdGhlIGxlbmd0aCBvZiB0aGUgZ2x5cGgg
ZGF0YSAoJ2dseWYnKSB0YWJsZQorICBsb2NhX3ZhbHVlc1tpbmZvLT5udW1fZ2x5cGhzXSA9IGds
eWZfdGFibGUtPmRzdF9sZW5ndGg7CisgIGlmIChQUkVESUNUX0ZBTFNFKCFTdG9yZUxvY2EobG9j
YV92YWx1ZXMsIGluZm8tPmluZGV4X2Zvcm1hdCwgbG9jYV9jaGVja3N1bSwKKyAgICAgIG91dCkp
KSB7CiAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9Ci0gIHJldHVy
biB0cnVlOwotfQorICBsb2NhX3RhYmxlLT5kc3RfbGVuZ3RoID0gb3V0LT5TaXplKCkgLSBsb2Nh
X3RhYmxlLT5kc3Rfb2Zmc2V0OwogCi0vLyBHZXQgbnVtYmVyT2ZITWV0cmljcywgaHR0cHM6Ly93
d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L290c3BlYy9oaGVhLmh0bQotYm9vbCBSZWFkTnVt
SE1ldHJpY3MoY29uc3QgVGFibGUqIGhoZWFfdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICB1
aW50OF90KiBkc3QsIHNpemVfdCBkc3RfbGVuZ3RoLCB1aW50MTZfdCogbnVtX2htZXRyaWNzKSB7
Ci0gIGlmIChQUkVESUNUX0ZBTFNFKHN0YXRpY19jYXN0PHVpbnQ2NF90PihoaGVhX3RhYmxlLT5k
c3Rfb2Zmc2V0ICsKLSAgICAgIGhoZWFfdGFibGUtPmRzdF9sZW5ndGgpID4gZHN0X2xlbmd0aCkp
IHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAgLy8gU2tp
cCAzNCB0byByZWFjaCAnaGhlYScgbnVtYmVyT2ZITWV0cmljcwotICBCdWZmZXIgYnVmZmVyKGRz
dCArIGhoZWFfdGFibGUtPmRzdF9vZmZzZXQsIGhoZWFfdGFibGUtPmRzdF9sZW5ndGgpOwotICBp
ZiAoUFJFRElDVF9GQUxTRSghYnVmZmVyLlNraXAoMzQpIHx8ICFidWZmZXIuUmVhZFUxNihudW1f
aG1ldHJpY3MpKSkgewotICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAg
fQogICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8geF9taW4gZm9yIGdseXBoOyBodHRwczovL3d3dy5t
aWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL2dseWYuaHRtCi1ib29sIFJlYWRHbHlwaFhN
aW4oQnVmZmVyKiBnbHlmX2J1ZmYsIEJ1ZmZlciogbG9jYV9idWZmLCBpbnQxNl90IGxvY2FfZm9y
bWF0LAotICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGluZGV4LCBpbnQxNl90KiB4X21pbikg
ewotICB1aW50MzJfdCBvZmZzZXQxLCBvZmZzZXQyOwotICBsb2NhX2J1ZmYtPnNldF9vZmZzZXQo
KGxvY2FfZm9ybWF0ID09IDAgPyAyIDogNCkgKiBpbmRleCk7Ci0gIGlmIChsb2NhX2Zvcm1hdCA9
PSAwKSB7Ci0gICAgdWludDE2X3QgdG1wMSwgdG1wMjsKLSAgICBpZiAoUFJFRElDVF9GQUxTRSgh
bG9jYV9idWZmLT5SZWFkVTE2KCZ0bXAxKSB8fAotICAgICAgICAgICAgICAgICAgICAgICFsb2Nh
X2J1ZmYtPlJlYWRVMTYoJnRtcDIpKSkgewotICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05f
RkFJTFVSRSgpOworVGFibGUqIEZpbmRUYWJsZShzdGQ6OnZlY3RvcjxUYWJsZSo+KiB0YWJsZXMs
IHVpbnQzMl90IHRhZykgeworICBmb3IgKFRhYmxlKiB0YWJsZSA6ICp0YWJsZXMpIHsKKyAgICBp
ZiAodGFibGUtPnRhZyA9PSB0YWcpIHsKKyAgICAgIHJldHVybiB0YWJsZTsKICAgICB9Ci0gICAg
Ly8gaHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L290c3BlYy9sb2NhLmh0bQot
ICAgIC8vICJUaGUgYWN0dWFsIGxvY2FsIG9mZnNldCBkaXZpZGVkIGJ5IDIgaXMgc3RvcmVkLiIK
LSAgICBvZmZzZXQxID0gdG1wMSAqIDI7Ci0gICAgb2Zmc2V0MiA9IHRtcDIgKiAyOwotICB9IGVs
c2UgaWYgKFBSRURJQ1RfRkFMU0UoIWxvY2FfYnVmZi0+UmVhZFUzMigmb2Zmc2V0MSkgfHwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICFsb2NhX2J1ZmYtPlJlYWRVMzIoJm9mZnNldDIpKSkg
ewotICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQorICByZXR1cm4g
TlVMTDsKK30KIAotICBpZiAob2Zmc2V0MSAhPSBvZmZzZXQyKSB7Ci0gICAgZ2x5Zl9idWZmLT5z
ZXRfb2Zmc2V0KG9mZnNldDEgKyAyKTsKLSAgICBpZiAoIWdseWZfYnVmZi0+UmVhZFMxNih4X21p
bikpIHsKLSAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9Ci0g
IH0gZWxzZSB7Ci0gICAgKnhfbWluID0gMDsKKy8vIEdldCBudW1iZXJPZkhNZXRyaWNzLCBodHRw
czovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL2hoZWEuaHRtCitib29sIFJl
YWROdW1ITWV0cmljcyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YV9zaXplLAorICAg
ICAgICAgICAgICAgICAgICAgdWludDE2X3QqIG51bV9obWV0cmljcykgeworICAvLyBTa2lwIDM0
IHRvIHJlYWNoICdoaGVhJyBudW1iZXJPZkhNZXRyaWNzCisgIEJ1ZmZlciBidWZmZXIoZGF0YSwg
ZGF0YV9zaXplKTsKKyAgaWYgKFBSRURJQ1RfRkFMU0UoIWJ1ZmZlci5Ta2lwKDM0KSB8fCAhYnVm
ZmVyLlJlYWRVMTYobnVtX2htZXRyaWNzKSkpIHsKKyAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lP
Tl9GQUlMVVJFKCk7CiAgIH0KICAgcmV0dXJuIHRydWU7CiB9CkBAIC02MDcsNDAgKzY1MiwxMSBA
QCBib29sIFJlYWRHbHlwaFhNaW4oQnVmZmVyKiBnbHlmX2J1ZmYsIEJ1ZmZlciogbG9jYV9idWZm
LCBpbnQxNl90IGxvY2FfZm9ybWF0LAogLy8gaHR0cDovL2Rldi53My5vcmcvd2ViZm9udHMvV09G
RjIvc3BlYy9PdmVydmlldy5odG1sI2htdHhfdGFibGVfZm9ybWF0CiBib29sIFJlY29uc3RydWN0
VHJhbnNmb3JtZWRIbXR4KGNvbnN0IHVpbnQ4X3QqIHRyYW5zZm9ybWVkX2J1ZiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRyYW5zZm9ybWVkX3NpemUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRhYmxlKiBnbHlmX3RhYmxlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUYWJsZSogaGhlYV90YWJsZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGFibGUqIGhtdHhfdGFibGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRhYmxlKiBsb2NhX3RhYmxlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUYWJsZSogbWF4cF90YWJsZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogZHN0LCBzaXplX3QgZHN0X2xl
bmd0aCkgewotICBpZiAoUFJFRElDVF9GQUxTRSghZ2x5Zl90YWJsZSkpIHsKLSAgICByZXR1cm4g
Rk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAgaWYgKFBSRURJQ1RfRkFMU0UoIWho
ZWFfdGFibGUpKSB7Ci0gICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwotICB9
Ci0gIGlmIChQUkVESUNUX0ZBTFNFKCFobXR4X3RhYmxlKSkgewotICAgIHJldHVybiBGT05UX0NP
TVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQotICBpZiAoUFJFRElDVF9GQUxTRSghbG9jYV90YWJs
ZSkpIHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAgaWYg
KFBSRURJQ1RfRkFMU0UoIW1heHBfdGFibGUpKSB7Ci0gICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJ
T05fRkFJTFVSRSgpOwotICB9Ci0KLSAgdWludDE2X3QgbnVtX2dseXBocywgbnVtX2htZXRyaWNz
OwotICBpZiAoIVJlYWROdW1HbHlwaHMobWF4cF90YWJsZSwgZHN0LCBkc3RfbGVuZ3RoLCAmbnVt
X2dseXBocykpIHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0K
LSAgaWYgKCFSZWFkTnVtSE1ldHJpY3MoaGhlYV90YWJsZSwgZHN0LCBkc3RfbGVuZ3RoLCAmbnVt
X2htZXRyaWNzKSkgewotICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAg
fQotCi0gIGlmIChQUkVESUNUX0ZBTFNFKHN0YXRpY19jYXN0PHVpbnQ2NF90PihobXR4X3RhYmxl
LT5kc3Rfb2Zmc2V0ICsKLSAgICAgIGhtdHhfdGFibGUtPmRzdF9sZW5ndGgpID4gZHN0X2xlbmd0
aCkpIHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgbnVtX2dseXBocywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgbnVtX2htZXRyaWNzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxpbnQxNl90PiYgeF9taW5z
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogY2hlY2tzdW0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPRkYyT3V0KiBvdXQpIHsKICAgQnVmZmVy
IGhtdHhfYnVmZl9pbih0cmFuc2Zvcm1lZF9idWYsIHRyYW5zZm9ybWVkX3NpemUpOwogCiAgIHVp
bnQ4X3QgaG10eF9mbGFnczsKQEAgLTY1OCwyMyArNjc0LDE2IEBAIGJvb2wgUmVjb25zdHJ1Y3RU
cmFuc2Zvcm1lZEhtdHgoY29uc3QgdWludDhfdCogdHJhbnNmb3JtZWRfYnVmLAogICAgIHJldHVy
biBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQogCi0gIC8vIGdseWYvbG9jYSBhcmUg
ZG9uZSBhbHJlYWR5IHNvIHdlIGNhbiB1c2UgdGhlbSB0byByZWNvdmVyIHhfbWluJ3MKLSAgaWYg
KFBSRURJQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdseWZfdGFibGUtPmRzdF9vZmZz
ZXQgKwotICAgICAgZ2x5Zl90YWJsZS0+ZHN0X2xlbmd0aCkgPiBkc3RfbGVuZ3RoKSkgewotICAg
IHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQotICBpZiAoUFJFRElDVF9G
QUxTRShzdGF0aWNfY2FzdDx1aW50NjRfdD4obG9jYV90YWJsZS0+ZHN0X29mZnNldCArCi0gICAg
ICBsb2NhX3RhYmxlLT5kc3RfbGVuZ3RoKSA+IGRzdF9sZW5ndGgpKSB7CisgIGFzc2VydCh4X21p
bnMuc2l6ZSgpID09IG51bV9nbHlwaHMpOworCisgIC8vIG51bV9nbHlwaHMgMCBpcyBPSyBpZiB0
aGVyZSBpcyBubyAnZ2x5ZicgYnV0IGNhbm5vdCB0aGVuIHhmb3JtICdobXR4Jy4KKyAgaWYgKFBS
RURJQ1RfRkFMU0UobnVtX2htZXRyaWNzID4gbnVtX2dseXBocykpIHsKICAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0KLSAgQnVmZmVyIGdseWZfYnVmZihkc3QgKyBn
bHlmX3RhYmxlLT5kc3Rfb2Zmc2V0LCBnbHlmX3RhYmxlLT5kc3RfbGVuZ3RoKTsKLSAgQnVmZmVy
IGxvY2FfYnVmZihkc3QgKyBsb2NhX3RhYmxlLT5kc3Rfb2Zmc2V0LCBsb2NhX3RhYmxlLT5kc3Rf
bGVuZ3RoKTsKLSAgaW50MTZfdCBsb2NhX2Zvcm1hdDsKLSAgaWYgKGxvY2FfdGFibGUtPmRzdF9s
ZW5ndGggPT0gMiAqIChudW1fZ2x5cGhzICsgMSkpIHsKLSAgICBsb2NhX2Zvcm1hdCA9IDA7Ci0g
IH0gZWxzZSBpZiAobG9jYV90YWJsZS0+ZHN0X2xlbmd0aCA9PSA0ICogKG51bV9nbHlwaHMgKyAx
KSkgewotICAgIGxvY2FfZm9ybWF0ID0gMTsKLSAgfSBlbHNlIHsKKworICAvLyBodHRwczovL3d3
dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL2htdHguaHRtCisgIC8vICIuLi5vbmx5
IG9uZSBlbnRyeSBuZWVkIGJlIGluIHRoZSBhcnJheSwgYnV0IHRoYXQgZW50cnkgaXMgcmVxdWly
ZWQuIgorICBpZiAoUFJFRElDVF9GQUxTRShudW1faG1ldHJpY3MgPCAxKSkgewogICAgIHJldHVy
biBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQogCkBAIC02OTMsMTAgKzcwMiw3IEBA
IGJvb2wgUmVjb25zdHJ1Y3RUcmFuc2Zvcm1lZEhtdHgoY29uc3QgdWludDhfdCogdHJhbnNmb3Jt
ZWRfYnVmLAogICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAg
ICB9CiAgICAgfSBlbHNlIHsKLSAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFSZWFkR2x5cGhYTWlu
KCZnbHlmX2J1ZmYsICZsb2NhX2J1ZmYsIGxvY2FfZm9ybWF0LCBpLAotICAgICAgICAgICZsc2Ip
KSkgewotICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9
CisgICAgICBsc2IgPSB4X21pbnNbaV07CiAgICAgfQogICAgIGxzYnMucHVzaF9iYWNrKGxzYik7
CiAgIH0KQEAgLTcwOCwyNSArNzE0LDE2IEBAIGJvb2wgUmVjb25zdHJ1Y3RUcmFuc2Zvcm1lZEht
dHgoY29uc3QgdWludDhfdCogdHJhbnNmb3JtZWRfYnVmLAogICAgICAgICByZXR1cm4gRk9OVF9D
T01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgIGlmIChQ
UkVESUNUX0ZBTFNFKCFSZWFkR2x5cGhYTWluKCZnbHlmX2J1ZmYsICZsb2NhX2J1ZmYsIGxvY2Ff
Zm9ybWF0LCBpLAotICAgICAgICAgICZsc2IpKSkgewotICAgICAgICByZXR1cm4gRk9OVF9DT01Q
UkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9CisgICAgICBsc2IgPSB4X21pbnNbaV07CiAgICAg
fQogICAgIGxzYnMucHVzaF9iYWNrKGxzYik7CiAgIH0KIAogICAvLyBiYWtlIG1lIGEgc2hpbnkg
bmV3IGhtdHggdGFibGUKICAgdWludDMyX3QgaG10eF9vdXRwdXRfc2l6ZSA9IDIgKiBudW1fZ2x5
cGhzICsgMiAqIG51bV9obWV0cmljczsKLSAgaWYgKGhtdHhfb3V0cHV0X3NpemUgPiBobXR4X3Rh
YmxlLT5kc3RfbGVuZ3RoKSB7Ci0gICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgp
OwotICB9Ci0gIGlmIChQUkVESUNUX0ZBTFNFKHN0YXRpY19jYXN0PHVpbnQ2NF90PihobXR4X3Rh
YmxlLT5kc3Rfb2Zmc2V0ICsKLSAgICAgIGhtdHhfdGFibGUtPmRzdF9sZW5ndGgpID4gZHN0X2xl
bmd0aCkpIHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLQot
ICBzaXplX3QgZHN0X29mZnNldCA9IGhtdHhfdGFibGUtPmRzdF9vZmZzZXQ7CisgIHN0ZDo6dmVj
dG9yPHVpbnQ4X3Q+IGhtdHhfdGFibGUoaG10eF9vdXRwdXRfc2l6ZSk7CisgIHVpbnQ4X3QqIGRz
dCA9ICZobXR4X3RhYmxlWzBdOworICBzaXplX3QgZHN0X29mZnNldCA9IDA7CiAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBudW1fZ2x5cGhzOyBpKyspIHsKICAgICBpZiAoaSA8IG51bV9obWV0
cmljcykgewogICAgICAgU3RvcmUxNihhZHZhbmNlX3dpZHRoc1tpXSwgJmRzdF9vZmZzZXQsIGRz
dCk7CkBAIC03MzQsMTUyICs3MzEsMTQgQEAgYm9vbCBSZWNvbnN0cnVjdFRyYW5zZm9ybWVkSG10
eChjb25zdCB1aW50OF90KiB0cmFuc2Zvcm1lZF9idWYsCiAgICAgU3RvcmUxNihsc2JzW2ldLCAm
ZHN0X29mZnNldCwgZHN0KTsKICAgfQogCi0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlY29u
c3RydWN0VHJhbnNmb3JtZWRHbHlmKGNvbnN0IHVpbnQ4X3QqIHRyYW5zZm9ybWVkX2J1ZiwKLSAg
ICBzaXplX3QgdHJhbnNmb3JtZWRfc2l6ZSwgY29uc3QgVGFibGUqIGdseWZfdGFibGUsIGNvbnN0
IFRhYmxlKiBsb2NhX3RhYmxlLAotICAgIHVpbnQ4X3QqIGRzdCwgc2l6ZV90IGRzdF9sZW5ndGgp
IHsKLSAgaWYgKFBSRURJQ1RfRkFMU0UoZ2x5Zl90YWJsZSA9PSBOVUxMIHx8IGxvY2FfdGFibGUg
PT0gTlVMTCkpIHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0K
LSAgaWYgKFBSRURJQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdseWZfdGFibGUtPmRz
dF9vZmZzZXQgKwotICAgICAgZ2x5Zl90YWJsZS0+ZHN0X2xlbmd0aCkgPiBkc3RfbGVuZ3RoKSkg
ewotICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQotICBpZiAoUFJF
RElDVF9GQUxTRShzdGF0aWNfY2FzdDx1aW50NjRfdD4obG9jYV90YWJsZS0+ZHN0X29mZnNldCAr
Ci0gICAgIGxvY2FfdGFibGUtPmRzdF9sZW5ndGgpID4gZHN0X2xlbmd0aCkpIHsKLSAgICByZXR1
cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAgcmV0dXJuIFJlY29uc3RydWN0
R2x5Zih0cmFuc2Zvcm1lZF9idWYsIHRyYW5zZm9ybWVkX3NpemUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgZHN0ICsgZ2x5Zl90YWJsZS0+ZHN0X29mZnNldCwgZ2x5Zl90YWJsZS0+ZHN0X2xl
bmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkc3QgKyBsb2NhX3RhYmxlLT5kc3Rfb2Zm
c2V0LCBsb2NhX3RhYmxlLT5kc3RfbGVuZ3RoKTsKLX0KLQotLy8gUmVjb25zdHJ1Y3RzIGEgc2lu
Z2xlIGZvbnQuIHRhYmxlcyBtdXN0IG5vdCBjb250YWluIGR1cGxpY2F0ZXMuCi1ib29sIFJlY29u
c3RydWN0VHJhbnNmb3JtZWQoY29uc3Qgc3RkOjp2ZWN0b3I8VGFibGU+JiB0YWJsZXMsIHVpbnQz
Ml90IHRhZywKLSAgICBjb25zdCB1aW50OF90KiB0cmFuc2Zvcm1lZF9idWYsIHNpemVfdCB0cmFu
c2Zvcm1lZF9zaXplLAotICAgIHVpbnQ4X3QqIGRzdCwgc2l6ZV90IGRzdF9sZW5ndGgpIHsKLQot
ICBpZiAodGFnID09IGtHbHlmVGFibGVUYWcpIHsKLSAgICBjb25zdCBUYWJsZSogZ2x5Zl90YWJs
ZSA9IEZpbmRUYWJsZSh0YWJsZXMsIHRhZyk7Ci0gICAgY29uc3QgVGFibGUqIGxvY2FfdGFibGUg
PSBGaW5kVGFibGUodGFibGVzLCBrTG9jYVRhYmxlVGFnKTsKLSAgICByZXR1cm4gUmVjb25zdHJ1
Y3RUcmFuc2Zvcm1lZEdseWYodHJhbnNmb3JtZWRfYnVmLCB0cmFuc2Zvcm1lZF9zaXplLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlmX3RhYmxlLCBsb2NhX3RhYmxl
LCBkc3QsIGRzdF9sZW5ndGgpOwotICB9IGVsc2UgaWYgKHRhZyA9PSBrTG9jYVRhYmxlVGFnKSB7
Ci0gICAgLy8gcHJvY2Vzc2luZyB3YXMgYWxyZWFkeSBkb25lIGJ5IGdseWYgdGFibGUsIGJ1dCB2
YWxpZGF0ZQotICAgIGlmIChQUkVESUNUX0ZBTFNFKCFGaW5kVGFibGUodGFibGVzLCBrR2x5ZlRh
YmxlVGFnKSkpIHsKLSAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAg
ICB9Ci0gIH0gZWxzZSBpZiAodGFnID09IGtIbXR4VGFibGVUYWcpIHsKLSAgICAvLyBUYWJsZXMg
YXJlIHNvcnRlZCBmb3IgYSBub24tY29sbGVjdGlvbi4KLSAgICAvLyBnbHlmIGlzIGJlZm9yZSBo
bXR4IGFuZCBpbmNsdWRlcyBsb2NhIHNvIGFsbCBvdXIgYWNjZXNzZXMgYXJlIHNhZmUuCi0gICAg
Y29uc3QgVGFibGUqIGdseWZfdGFibGUgPSBGaW5kVGFibGUodGFibGVzLCBrR2x5ZlRhYmxlVGFn
KTsKLSAgICBjb25zdCBUYWJsZSogaGhlYV90YWJsZSA9IEZpbmRUYWJsZSh0YWJsZXMsIGtIaGVh
VGFibGVUYWcpOwotICAgIGNvbnN0IFRhYmxlKiBobXR4X3RhYmxlID0gRmluZFRhYmxlKHRhYmxl
cywga0htdHhUYWJsZVRhZyk7Ci0gICAgY29uc3QgVGFibGUqIGxvY2FfdGFibGUgPSBGaW5kVGFi
bGUodGFibGVzLCBrTG9jYVRhYmxlVGFnKTsKLSAgICBjb25zdCBUYWJsZSogbWF4cF90YWJsZSA9
IEZpbmRUYWJsZSh0YWJsZXMsIGtNYXhwVGFibGVUYWcpOwotCi0gICAgaWYgKFBSRURJQ1RfRkFM
U0UoIVJlY29uc3RydWN0VHJhbnNmb3JtZWRIbXR4KAotICAgICAgICB0cmFuc2Zvcm1lZF9idWYs
IHRyYW5zZm9ybWVkX3NpemUsIGdseWZfdGFibGUsIGhoZWFfdGFibGUsCi0gICAgICAgIGhtdHhf
dGFibGUsIGxvY2FfdGFibGUsIG1heHBfdGFibGUsIGRzdCwgZHN0X2xlbmd0aCkpKSB7Ci0gICAg
ICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgfQotICB9IGVsc2Ugewot
ICAgIC8vIHRyYW5zZm9ybSBmb3IgdGhlIHRhZyBpcyBub3Qga25vd24KKyAgKmNoZWNrc3VtID0g
Q29tcHV0ZVVMb25nU3VtKCZobXR4X3RhYmxlWzBdLCBobXR4X291dHB1dF9zaXplKTsKKyAgaWYg
KFBSRURJQ1RfRkFMU0UoIW91dC0+V3JpdGUoJmhtdHhfdGFibGVbMF0sIGhtdHhfb3V0cHV0X3Np
emUpKSkgewogICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQotICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdWludDMyX3QgQ29tcHV0ZUNoZWNrc3VtKGNvbnN0IFRhYmxlKiB0
YWJsZSwgY29uc3QgdWludDhfdCogZHN0KSB7Ci0gIHJldHVybiBDb21wdXRlVUxvbmdTdW0oZHN0
ICsgdGFibGUtPmRzdF9vZmZzZXQsIHRhYmxlLT5kc3RfbGVuZ3RoKTsKLX0KLQotY29uc3QgVGFi
bGUqIEZpbmRUYWJsZShUdGNGb250IHR0Y19mb250LCBjb25zdCBzdGQ6OnZlY3RvcjxUYWJsZT4m
IHRhYmxlcywKLSAgdWludDMyX3QgdGFnKSB7Ci0gIGZvciAoY29uc3QgYXV0byBpIDogdHRjX2Zv
bnQudGFibGVfaW5kaWNlcykgewotICAgIGlmICh0YWJsZXNbaV0udGFnID09IHRhZykgcmV0dXJu
ICZ0YWJsZXNbaV07Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLWJvb2wgRml4Q29sbGVjdGlv
bkNoZWNrc3VtcyhzaXplX3QgaGVhZGVyX3ZlcnNpb24sCi0gIGNvbnN0IHN0ZDo6dmVjdG9yPFRh
YmxlPiYgdGFibGVzLCBjb25zdCBzdGQ6OnZlY3RvcjxUdGNGb250PiYgdHRjX2ZvbnRzLAotICB1
aW50OF90KiBkc3QpIHsKLSAgc2l6ZV90IG9mZnNldCA9IENvbGxlY3Rpb25IZWFkZXJTaXplKGhl
YWRlcl92ZXJzaW9uLCB0dGNfZm9udHMuc2l6ZSgpKTsKLQotICBmb3IgKGNvbnN0IGF1dG8mIHR0
Y19mb250IDogdHRjX2ZvbnRzKSB7Ci0gICAgb2Zmc2V0ICs9IDEyOyAgLy8gbW92ZSB0byBzdGFy
dCBvZiBPZmZzZXQgVGFibGUKLSAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50MTZfdD4mIHRhYmxl
X2luZGljZXMgPSB0dGNfZm9udC50YWJsZV9pbmRpY2VzOwotCi0gICAgY29uc3QgVGFibGUqIGhl
YWRfdGFibGUgPSBGaW5kVGFibGUodHRjX2ZvbnQsIHRhYmxlcywga0hlYWRUYWJsZVRhZyk7Ci0g
ICAgaWYgKFBSRURJQ1RfRkFMU0UoaGVhZF90YWJsZSA9PSBOVUxMIHx8Ci0gICAgICAgIGhlYWRf
dGFibGUtPmRzdF9sZW5ndGggPCBrQ2hlY2tTdW1BZGp1c3RtZW50T2Zmc2V0ICsgNCkpIHsKLSAg
ICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9Ci0KLSAgICBzaXpl
X3QgZmlyc3RfdGFibGVfb2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgo
KTsKLSAgICBmb3IgKGNvbnN0IGF1dG8gaW5kZXggOiB0YWJsZV9pbmRpY2VzKSB7Ci0gICAgICBj
b25zdCBhdXRvJiB0YWJsZSA9IHRhYmxlc1tpbmRleF07Ci0gICAgICBpZiAodGFibGUuZHN0X29m
ZnNldCA8IGZpcnN0X3RhYmxlX29mZnNldCkgewotICAgICAgICBmaXJzdF90YWJsZV9vZmZzZXQg
PSB0YWJsZS5kc3Rfb2Zmc2V0OwotICAgICAgfQotICAgIH0KLQotICAgIHNpemVfdCBhZGp1c3Rt
ZW50X29mZnNldCA9IGhlYWRfdGFibGUtPmRzdF9vZmZzZXQKLSAgICAgICsga0NoZWNrU3VtQWRq
dXN0bWVudE9mZnNldDsKLSAgICBTdG9yZVUzMihkc3QsIGFkanVzdG1lbnRfb2Zmc2V0LCAwKTsK
LQotICAgIHVpbnQzMl90IGZpbGVfY2hlY2tzdW0gPSAwOwotICAgIC8vIGNvbXB1dGUgZWFjaCB0
YWJsZXMgY2hlY2tzdW0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhYmxlX2luZGljZXMu
c2l6ZSgpOyBpKyspIHsKLSAgICAgIGNvbnN0IFRhYmxlJiB0YWJsZSA9IHRhYmxlc1t0YWJsZV9p
bmRpY2VzW2ldXTsKLSAgICAgIHVpbnQzMl90IHRhYmxlX2NoZWNrc3VtID0gQ29tcHV0ZUNoZWNr
c3VtKCZ0YWJsZSwgZHN0KTsKLSAgICAgIHNpemVfdCBjaGVja3N1bV9vZmZzZXQgPSBvZmZzZXQg
KyA0OyAgLy8gc2tpcCBwYXN0IHRhZyB0byBjaGVja1N1bQotCi0gICAgICAvLyB3cml0ZSB0aGUg
Y2hlY2tzdW0gZm9yIHRoZSBUYWJsZSBSZWNvcmQKLSAgICAgIFN0b3JlVTMyKGRzdCwgY2hlY2tz
dW1fb2Zmc2V0LCB0YWJsZV9jaGVja3N1bSk7Ci0gICAgICBmaWxlX2NoZWNrc3VtICs9IHRhYmxl
X2NoZWNrc3VtOwotICAgICAgLy8gbmV4dCBUYWJsZSBSZWNvcmQKLSAgICAgIG9mZnNldCArPSAx
NjsKLSAgICB9Ci0KLSAgICBzaXplX3QgaGVhZGVyX3NpemUgPSBrU2ZudEhlYWRlclNpemUgKwot
ICAgICAga1NmbnRFbnRyeVNpemUgKiB0YWJsZV9pbmRpY2VzLnNpemUoKTsKLSAgICB1aW50MzJf
dCBoZWFkZXJfY2hlY2tzdW0gPSBDb21wdXRlVUxvbmdTdW0oZHN0ICsgdHRjX2ZvbnQuZHN0X29m
ZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVh
ZGVyX3NpemUpOwotCi0gICAgZmlsZV9jaGVja3N1bSArPSBoZWFkZXJfY2hlY2tzdW07Ci0gICAg
dWludDMyX3QgY2hlY2tzdW1fYWRqdXN0bWVudCA9IDB4YjFiMGFmYmEgLSBmaWxlX2NoZWNrc3Vt
OwotICAgIFN0b3JlVTMyKGRzdCwgYWRqdXN0bWVudF9vZmZzZXQsIGNoZWNrc3VtX2FkanVzdG1l
bnQpOwotICB9CiAKICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRml4Q2hlY2tzdW1zKGNvbnN0
IHN0ZDo6dmVjdG9yPFRhYmxlPiYgdGFibGVzLCB1aW50OF90KiBkc3QpIHsKLSAgY29uc3QgVGFi
bGUqIGhlYWRfdGFibGUgPSBGaW5kVGFibGUodGFibGVzLCBrSGVhZFRhYmxlVGFnKTsKLSAgaWYg
KFBSRURJQ1RfRkFMU0UoaGVhZF90YWJsZSA9PSBOVUxMIHx8Ci0gICAgICBoZWFkX3RhYmxlLT5k
c3RfbGVuZ3RoIDwga0NoZWNrU3VtQWRqdXN0bWVudE9mZnNldCArIDQpKSB7Ci0gICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwotICB9Ci0gIHNpemVfdCBhZGp1c3RtZW50X29m
ZnNldCA9IGhlYWRfdGFibGUtPmRzdF9vZmZzZXQgKyBrQ2hlY2tTdW1BZGp1c3RtZW50T2Zmc2V0
OwotICBTdG9yZVUzMihkc3QsIGFkanVzdG1lbnRfb2Zmc2V0LCAwKTsKLSAgc2l6ZV90IG5fdGFi
bGVzID0gdGFibGVzLnNpemUoKTsKLSAgdWludDMyX3QgZmlsZV9jaGVja3N1bSA9IDA7Ci0gIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbl90YWJsZXM7ICsraSkgewotICAgIHVpbnQzMl90IGNoZWNr
c3VtID0gQ29tcHV0ZUNoZWNrc3VtKCZ0YWJsZXNbaV0sIGRzdCk7Ci0gICAgU3RvcmVVMzIoZHN0
LCBrU2ZudEhlYWRlclNpemUgKyBpICoga1NmbnRFbnRyeVNpemUgKyA0LCBjaGVja3N1bSk7Ci0g
ICAgZmlsZV9jaGVja3N1bSArPSBjaGVja3N1bTsKLSAgfQotICBmaWxlX2NoZWNrc3VtICs9IENv
bXB1dGVVTG9uZ1N1bShkc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtT
Zm50SGVhZGVyU2l6ZSArIGtTZm50RW50cnlTaXplICogbl90YWJsZXMpOwotICB1aW50MzJfdCBj
aGVja3N1bV9hZGp1c3RtZW50ID0gMHhiMWIwYWZiYSAtIGZpbGVfY2hlY2tzdW07Ci0gIFN0b3Jl
VTMyKGRzdCwgYWRqdXN0bWVudF9vZmZzZXQsIGNoZWNrc3VtX2FkanVzdG1lbnQpOwotICByZXR1
cm4gdHJ1ZTsKLX0KLQogYm9vbCBXb2ZmMlVuY29tcHJlc3ModWludDhfdCogZHN0X2J1Ziwgc2l6
ZV90IGRzdF9zaXplLAogICBjb25zdCB1aW50OF90KiBzcmNfYnVmLCBzaXplX3Qgc3JjX3NpemUp
IHsKICAgc2l6ZV90IHVuY29tcHJlc3NlZF9zaXplID0gZHN0X3NpemU7CkBAIC04OTMsNiArNzUy
LDcgQEAgYm9vbCBXb2ZmMlVuY29tcHJlc3ModWludDhfdCogZHN0X2J1Ziwgc2l6ZV90IGRzdF9z
aXplLAogCiBib29sIFJlYWRUYWJsZURpcmVjdG9yeShCdWZmZXIqIGZpbGUsIHN0ZDo6dmVjdG9y
PFRhYmxlPiogdGFibGVzLAogICAgIHNpemVfdCBudW1fdGFibGVzKSB7CisgIHVpbnQzMl90IHNy
Y19vZmZzZXQgPSAwOwogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bV90YWJsZXM7ICsraSkg
ewogICAgIFRhYmxlKiB0YWJsZSA9ICYoKnRhYmxlcylbaV07CiAgICAgdWludDhfdCBmbGFnX2J5
dGU7CkBAIC05MzMsNiArNzkzLDEzIEBAIGJvb2wgUmVhZFRhYmxlRGlyZWN0b3J5KEJ1ZmZlciog
ZmlsZSwgc3RkOjp2ZWN0b3I8VGFibGU+KiB0YWJsZXMsCiAgICAgICAgIHJldHVybiBGT05UX0NP
TVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgICAgIH0KICAgICB9CisgICAgaWYgKFBSRURJQ1RfRkFM
U0Uoc3JjX29mZnNldCArIHRyYW5zZm9ybV9sZW5ndGggPCBzcmNfb2Zmc2V0KSkgeworICAgICAg
cmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICAgIH0KKyAgICB0YWJsZS0+c3Jj
X29mZnNldCA9IHNyY19vZmZzZXQ7CisgICAgdGFibGUtPnNyY19sZW5ndGggPSB0cmFuc2Zvcm1f
bGVuZ3RoOworICAgIHNyY19vZmZzZXQgKz0gdHJhbnNmb3JtX2xlbmd0aDsKKwogICAgIHRhYmxl
LT50YWcgPSB0YWc7CiAgICAgdGFibGUtPmZsYWdzID0gZmxhZ3M7CiAgICAgdGFibGUtPnRyYW5z
Zm9ybV9sZW5ndGggPSB0cmFuc2Zvcm1fbGVuZ3RoOwpAQCAtOTQxLDE5ICs4MDgsNiBAQCBib29s
IFJlYWRUYWJsZURpcmVjdG9yeShCdWZmZXIqIGZpbGUsIHN0ZDo6dmVjdG9yPFRhYmxlPiogdGFi
bGVzLAogICByZXR1cm4gdHJ1ZTsKIH0KIAotfSAgLy8gbmFtZXNwYWNlCi0KLXNpemVfdCBDb21w
dXRlV09GRjJGaW5hbFNpemUoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkgewot
ICBCdWZmZXIgZmlsZShkYXRhLCBsZW5ndGgpOwotICB1aW50MzJfdCB0b3RhbF9sZW5ndGg7Ci0K
LSAgaWYgKCFmaWxlLlNraXAoMTYpIHx8Ci0gICAgICAhZmlsZS5SZWFkVTMyKCZ0b3RhbF9sZW5n
dGgpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgcmV0dXJuIHRvdGFsX2xlbmd0aDsKLX0KLQog
Ly8gV3JpdGVzIGEgc2luZ2xlIE9mZnNldCBUYWJsZSBlbnRyeQogc2l6ZV90IFN0b3JlT2Zmc2V0
VGFibGUodWludDhfdCogcmVzdWx0LCBzaXplX3Qgb2Zmc2V0LCB1aW50MzJfdCBmbGF2b3IsCiAg
ICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBudW1fdGFibGVzKSB7CkBAIC05NzEsNjIg
KzgyNSwxODUgQEAgc2l6ZV90IFN0b3JlT2Zmc2V0VGFibGUodWludDhfdCogcmVzdWx0LCBzaXpl
X3Qgb2Zmc2V0LCB1aW50MzJfdCBmbGF2b3IsCiAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLXNpemVf
dCBTdG9yZVRhYmxlRW50cnkodWludDhfdCogcmVzdWx0LCBjb25zdCBUYWJsZSYgdGFibGUsIHNp
emVfdCBvZmZzZXQpIHsKLSAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIHRhYmxl
LnRhZyk7Ci0gIG9mZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCAwKTsgIC8vIGNoZWNr
c3VtLCB0byBmaWxsIGluIGxhdGVyCi0gIG9mZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0
LCB0YWJsZS5kc3Rfb2Zmc2V0KTsKLSAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQs
IHRhYmxlLmRzdF9sZW5ndGgpOworc2l6ZV90IFN0b3JlVGFibGVFbnRyeSh1aW50OF90KiByZXN1
bHQsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgdGFnKSB7CisgIG9mZnNldCA9IFN0b3JlVTMy
KHJlc3VsdCwgb2Zmc2V0LCB0YWcpOworICBvZmZzZXQgPSBTdG9yZVUzMihyZXN1bHQsIG9mZnNl
dCwgMCk7CisgIG9mZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCAwKTsKKyAgb2Zmc2V0
ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIDApOwogICByZXR1cm4gb2Zmc2V0OwogfQogCiAv
LyBGaXJzdCB0YWJsZSBnb2VzIGFmdGVyIGFsbCB0aGUgaGVhZGVycywgdGFibGUgZGlyZWN0b3J5
LCBldGMKLXVpbnQ2NF90IENvbXB1dGVPZmZzZXRUb0ZpcnN0VGFibGUoY29uc3QgdWludDMyX3Qg
aGVhZGVyX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVpbnQxNl90IG51bV90YWJsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6dmVjdG9yPFR0Y0ZvbnQ+JiB0dGNfZm9udHMpIHsKK3VpbnQ2NF90IENvbXB1
dGVPZmZzZXRUb0ZpcnN0VGFibGUoY29uc3QgV09GRjJIZWFkZXImIGhkcikgewogICB1aW50NjRf
dCBvZmZzZXQgPSBrU2ZudEhlYWRlclNpemUgKwotICAgIGtTZm50RW50cnlTaXplICogc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KG51bV90YWJsZXMpOwotICBpZiAoaGVhZGVyX3ZlcnNpb24pIHsKLSAg
ICBvZmZzZXQgPSBDb2xsZWN0aW9uSGVhZGVyU2l6ZShoZWFkZXJfdmVyc2lvbiwgdHRjX2ZvbnRz
LnNpemUoKSkKLSAgICAgICsga1NmbnRIZWFkZXJTaXplICogdHRjX2ZvbnRzLnNpemUoKTsKLSAg
ICBmb3IgKGNvbnN0IGF1dG8mIHR0Y19mb250IDogdHRjX2ZvbnRzKSB7Ci0gICAgICBvZmZzZXQg
Kz0KLSAgICAgICAga1NmbnRFbnRyeVNpemUgKiB0dGNfZm9udC50YWJsZV9pbmRpY2VzLnNpemUo
KTsKKyAgICBrU2ZudEVudHJ5U2l6ZSAqIHN0YXRpY19jYXN0PHVpbnQ2NF90PihoZHIubnVtX3Rh
Ymxlcyk7CisgIGlmIChoZHIuaGVhZGVyX3ZlcnNpb24pIHsKKyAgICBvZmZzZXQgPSBDb2xsZWN0
aW9uSGVhZGVyU2l6ZShoZHIuaGVhZGVyX3ZlcnNpb24sIGhkci50dGNfZm9udHMuc2l6ZSgpKQor
ICAgICAgKyBrU2ZudEhlYWRlclNpemUgKiBoZHIudHRjX2ZvbnRzLnNpemUoKTsKKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIHR0Y19mb250IDogaGRyLnR0Y19mb250cykgeworICAgICAgb2Zmc2V0ICs9
IGtTZm50RW50cnlTaXplICogdHRjX2ZvbnQudGFibGVfaW5kaWNlcy5zaXplKCk7CiAgICAgfQog
ICB9CiAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLWJvb2wgUmVjb25zdHJ1Y3RUcmFuc2Zvcm1lZEZv
bnQoY29uc3Qgc3RkOjp2ZWN0b3I8VGFibGU+JiB0YWJsZXMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bWFwPHVpbnQzMl90LCBjb25zdCB1aW50OF90Kj4qIHNyY19ieV9k
ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiByZXN1bHQsIHNp
emVfdCByZXN1bHRfbGVuZ3RoKSB7Ci0gIGZvciAoY29uc3QgYXV0byYgdGFibGUgOiB0YWJsZXMp
IHsKLSAgICBpZiAoKHRhYmxlLmZsYWdzICYga1dvZmYyRmxhZ3NUcmFuc2Zvcm0pICE9IGtXb2Zm
MkZsYWdzVHJhbnNmb3JtKSB7Ci0gICAgICBjb250aW51ZTsKK3N0ZDo6dmVjdG9yPFRhYmxlKj4g
VGFibGVzKFdPRkYySGVhZGVyKiBoZHIsIHNpemVfdCBmb250X2luZGV4KSB7CisgIHN0ZDo6dmVj
dG9yPFRhYmxlKj4gdGFibGVzOworICBpZiAoUFJFRElDVF9GQUxTRShoZHItPmhlYWRlcl92ZXJz
aW9uKSkgeworICAgIGZvciAoYXV0byBpbmRleCA6IGhkci0+dHRjX2ZvbnRzW2ZvbnRfaW5kZXhd
LnRhYmxlX2luZGljZXMpIHsKKyAgICAgIHRhYmxlcy5wdXNoX2JhY2soJmhkci0+dGFibGVzW2lu
ZGV4XSk7CisgICAgfQorICB9IGVsc2UgeworICAgIGZvciAoYXV0byYgdGFibGUgOiBoZHItPnRh
YmxlcykgeworICAgICAgdGFibGVzLnB1c2hfYmFjaygmdGFibGUpOworICAgIH0KKyAgfQorICBy
ZXR1cm4gdGFibGVzOworfQorCisvLyBPZmZzZXQgdGFibGVzIGFzc3VtZWQgdG8gaGF2ZSBiZWVu
IHdyaXR0ZW4gaW4gd2l0aCAwJ3MgaW5pdGlhbGx5LgorLy8gV09GRjJIZWFkZXIgaXNuJ3QgY29u
c3Qgc28gd2UgY2FuIHVzZSBbXSBpbnN0ZWFkIG9mIGF0KCkgKHdoaWNoIHVwc2V0cyBGRikKK2Jv
b2wgUmVjb25zdHJ1Y3RGb250KHVpbnQ4X3QqIHRyYW5zZm9ybWVkX2J1ZiwKKyAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHVpbnQzMl90IHRyYW5zZm9ybWVkX2J1Zl9zaXplLAorICAgICAgICAg
ICAgICAgICAgICAgUmVidWlsZE1ldGFkYXRhKiBtZXRhZGF0YSwKKyAgICAgICAgICAgICAgICAg
ICAgIFdPRkYySGVhZGVyKiBoZHIsCisgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZm9udF9p
bmRleCwKKyAgICAgICAgICAgICAgICAgICAgIFdPRkYyT3V0KiBvdXQpIHsKKyAgc2l6ZV90IGRl
c3Rfb2Zmc2V0ID0gb3V0LT5TaXplKCk7CisgIHVpbnQ4X3QgdGFibGVfZW50cnlbMTJdOworICBX
T0ZGMkZvbnRJbmZvKiBpbmZvID0gJm1ldGFkYXRhLT5mb250X2luZm9zW2ZvbnRfaW5kZXhdOwor
ICBzdGQ6OnZlY3RvcjxUYWJsZSo+IHRhYmxlcyA9IFRhYmxlcyhoZHIsIGZvbnRfaW5kZXgpOwor
CisgIC8vICdnbHlmJyB3aXRob3V0ICdsb2NhJyBkb2Vzbid0IG1ha2Ugc2Vuc2UKKyAgaWYgKFBS
RURJQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8Ym9vbD4oRmluZFRhYmxlKCZ0YWJsZXMsIGtHbHlmVGFi
bGVUYWcpKSAhPQorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxib29sPihGaW5kVGFi
bGUoJnRhYmxlcywga0xvY2FUYWJsZVRhZykpKSkgeworICAgIHJldHVybiBGT05UX0NPTVBSRVNT
SU9OX0ZBSUxVUkUoKTsKKyAgfQorCisgIHVpbnQzMl90IGZvbnRfY2hlY2tzdW0gPSBtZXRhZGF0
YS0+aGVhZGVyX2NoZWNrc3VtOworICBpZiAoaGRyLT5oZWFkZXJfdmVyc2lvbikgeworICAgIGZv
bnRfY2hlY2tzdW0gPSBoZHItPnR0Y19mb250c1tmb250X2luZGV4XS5oZWFkZXJfY2hlY2tzdW07
CisgIH0KKworICB1aW50MzJfdCBsb2NhX2NoZWNrc3VtID0gMDsKKyAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0YWJsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICBUYWJsZSYgdGFibGUgPSAqdGFibGVz
W2ldOworCisgICAgc3RkOjpwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4gY2hlY2tzdW1fa2V5ID0g
e3RhYmxlLnRhZywgdGFibGUuc3JjX29mZnNldH07CisgICAgYm9vbCByZXVzZWQgPSBtZXRhZGF0
YS0+Y2hlY2tzdW1zLmZpbmQoY2hlY2tzdW1fa2V5KQorICAgICAgICAgICAgICAgIT0gbWV0YWRh
dGEtPmNoZWNrc3Vtcy5lbmQoKTsKKyAgICBpZiAoUFJFRElDVF9GQUxTRShmb250X2luZGV4ID09
IDAgJiYgcmV1c2VkKSkgeworICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgp
OworICAgIH0KKworICAgIC8vIFRPRE8odXNlcikgYSBjb2xsZWN0aW9uIHdpdGggb3B0aW1pemVk
IGhtdHggdGhhdCByZXVzZWQgZ2x5Zi9sb2NhCisgICAgLy8gd291bGQgZmFpbC4gV2UgZG9uJ3Qg
b3B0aW1pemUgaG10eCBmb3IgY29sbGVjdGlvbnMgeWV0LgorICAgIGlmIChQUkVESUNUX0ZBTFNF
KHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0YWJsZS5zcmNfb2Zmc2V0ICsgdGFibGUuc3JjX2xlbmd0
aCkKKyAgICAgICAgPiB0cmFuc2Zvcm1lZF9idWZfc2l6ZSkpIHsKKyAgICAgIHJldHVybiBGT05U
X0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICB9CisKKyAgICBpZiAodGFibGUudGFnID09IGtI
aGVhVGFibGVUYWcpIHsKKyAgICAgIGlmICghUmVhZE51bUhNZXRyaWNzKHRyYW5zZm9ybWVkX2J1
ZiArIHRhYmxlLnNyY19vZmZzZXQsCisgICAgICAgICAgdGFibGUuc3JjX2xlbmd0aCwgJmluZm8t
Pm51bV9obWV0cmljcykpIHsKKyAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVS
RSgpOworICAgICAgfQorICAgIH0KKworICAgIHVpbnQzMl90IGNoZWNrc3VtID0gMDsKKyAgICBp
ZiAoIXJldXNlZCkgeworICAgICAgaWYgKCh0YWJsZS5mbGFncyAmIGtXb2ZmMkZsYWdzVHJhbnNm
b3JtKSAhPSBrV29mZjJGbGFnc1RyYW5zZm9ybSkgeworICAgICAgICBpZiAodGFibGUudGFnID09
IGtIZWFkVGFibGVUYWcpIHsKKyAgICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSh0YWJsZS5zcmNf
bGVuZ3RoIDwgMTIpKSB7CisgICAgICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlM
VVJFKCk7CisgICAgICAgICAgfQorICAgICAgICAgIC8vIGNoZWNrU3VtQWRqdXN0bWVudCA9IDAK
KyAgICAgICAgICBTdG9yZVUzMih0cmFuc2Zvcm1lZF9idWYgKyB0YWJsZS5zcmNfb2Zmc2V0LCA4
LCAwKTsKKyAgICAgICAgfQorICAgICAgICB0YWJsZS5kc3Rfb2Zmc2V0ID0gZGVzdF9vZmZzZXQ7
CisgICAgICAgIGNoZWNrc3VtID0gQ29tcHV0ZVVMb25nU3VtKHRyYW5zZm9ybWVkX2J1ZiArIHRh
YmxlLnNyY19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxl
LnNyY19sZW5ndGgpOworICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSghb3V0LT5Xcml0ZSh0cmFu
c2Zvcm1lZF9idWYgKyB0YWJsZS5zcmNfb2Zmc2V0LAorICAgICAgICAgICAgdGFibGUuc3JjX2xl
bmd0aCkpKSB7CisgICAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwor
ICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAodGFibGUudGFnID09IGtHbHlm
VGFibGVUYWcpIHsKKyAgICAgICAgICB0YWJsZS5kc3Rfb2Zmc2V0ID0gZGVzdF9vZmZzZXQ7CisK
KyAgICAgICAgICBUYWJsZSogbG9jYV90YWJsZSA9IEZpbmRUYWJsZSgmdGFibGVzLCBrTG9jYVRh
YmxlVGFnKTsKKyAgICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSghUmVjb25zdHJ1Y3RHbHlmKHRy
YW5zZm9ybWVkX2J1ZiArIHRhYmxlLnNyY19vZmZzZXQsCisgICAgICAgICAgICAgICZ0YWJsZSwg
JmNoZWNrc3VtLCBsb2NhX3RhYmxlLCAmbG9jYV9jaGVja3N1bSwgaW5mbywgb3V0KSkpIHsKKyAg
ICAgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAodGFibGUudGFnID09IGtMb2NhVGFibGVUYWcpIHsKKyAgICAg
ICAgICAvLyBBbGwgdGhlIHdvcmsgd2FzIGRvbmUgYnkgUmVjb25zdHJ1Y3RHbHlmLiBXZSBhbHJl
YWR5IGtub3cgY2hlY2tzdW0uCisgICAgICAgICAgY2hlY2tzdW0gPSBsb2NhX2NoZWNrc3VtOwor
ICAgICAgICB9IGVsc2UgaWYgKHRhYmxlLnRhZyA9PSBrSG10eFRhYmxlVGFnKSB7CisgICAgICAg
ICAgdGFibGUuZHN0X29mZnNldCA9IGRlc3Rfb2Zmc2V0OworICAgICAgICAgIC8vIFRhYmxlcyBh
cmUgc29ydGVkIHNvIGFsbCB0aGUgaW5mbyB3ZSBuZWVkIGhhcyBiZWVuIGdhdGhlcmVkLgorICAg
ICAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFSZWNvbnN0cnVjdFRyYW5zZm9ybWVkSG10eCgKKyAg
ICAgICAgICAgICAgdHJhbnNmb3JtZWRfYnVmICsgdGFibGUuc3JjX29mZnNldCwgdGFibGUuc3Jj
X2xlbmd0aCwKKyAgICAgICAgICAgICAgaW5mby0+bnVtX2dseXBocywgaW5mby0+bnVtX2htZXRy
aWNzLCBpbmZvLT54X21pbnMsICZjaGVja3N1bSwKKyAgICAgICAgICAgICAgb3V0KSkpIHsKKyAg
ICAgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJ
TFVSRSgpOyAgLy8gdHJhbnNmb3JtIHVua25vd24KKyAgICAgICAgfQorICAgICAgfQorICAgICAg
bWV0YWRhdGEtPmNoZWNrc3Vtc1tjaGVja3N1bV9rZXldID0gY2hlY2tzdW07CisgICAgfSBlbHNl
IHsKKyAgICAgIGNoZWNrc3VtID0gbWV0YWRhdGEtPmNoZWNrc3Vtc1tjaGVja3N1bV9rZXldOwor
ICAgIH0KKyAgICBmb250X2NoZWNrc3VtICs9IGNoZWNrc3VtOworCisgICAgLy8gdXBkYXRlIHRo
ZSB0YWJsZSBlbnRyeSB3aXRoIHJlYWwgdmFsdWVzLgorICAgIFN0b3JlVTMyKHRhYmxlX2VudHJ5
LCAwLCBjaGVja3N1bSk7CisgICAgU3RvcmVVMzIodGFibGVfZW50cnksIDQsIHRhYmxlLmRzdF9v
ZmZzZXQpOworICAgIFN0b3JlVTMyKHRhYmxlX2VudHJ5LCA4LCB0YWJsZS5kc3RfbGVuZ3RoKTsK
KyAgICBpZiAoUFJFRElDVF9GQUxTRSghb3V0LT5Xcml0ZSh0YWJsZV9lbnRyeSwKKyAgICAgICAg
aW5mby0+dGFibGVfZW50cnlfYnlfdGFnW3RhYmxlLnRhZ10gKyA0LCAxMikpKSB7CisgICAgICBy
ZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CisgICAgfQorCisgICAgLy8gV2UgcmVw
bGFjZWQgMCdzLiBVcGRhdGUgb3ZlcmFsbCBjaGVja3N1bS4KKyAgICBmb250X2NoZWNrc3VtICs9
IENvbXB1dGVVTG9uZ1N1bSh0YWJsZV9lbnRyeSwgMTIpOworCisgICAgaWYgKFBSRURJQ1RfRkFM
U0UoIVBhZDQob3V0KSkpIHsKKyAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUo
KTsKICAgICB9Ci0gICAgY29uc3QgYXV0byBpdCA9IHNyY19ieV9kZXN0LT5maW5kKHRhYmxlLmRz
dF9vZmZzZXQpOwotICAgIGlmIChpdCA9PSBzcmNfYnlfZGVzdC0+ZW5kKCkpIHsKLSAgICAgIGNv
bnRpbnVlOworCisgICAgaWYgKFBSRURJQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRh
YmxlLmRzdF9vZmZzZXQgKyB0YWJsZS5kc3RfbGVuZ3RoKQorICAgICAgICA+IG91dC0+U2l6ZSgp
KSkgeworICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0KLSAg
ICBjb25zdCB1aW50OF90KiB0cmFuc2Zvcm1fYnVmID0gKCppdCkuc2Vjb25kOwotICAgIHNyY19i
eV9kZXN0LT5lcmFzZSh0YWJsZS5kc3Rfb2Zmc2V0KTsKKyAgICBkZXN0X29mZnNldCA9IG91dC0+
U2l6ZSgpOworICB9CiAKLSAgICBzaXplX3QgdHJhbnNmb3JtX2xlbmd0aCA9IHRhYmxlLnRyYW5z
Zm9ybV9sZW5ndGg7Ci0gICAgaWYgKFBSRURJQ1RfRkFMU0UoIVJlY29uc3RydWN0VHJhbnNmb3Jt
ZWQodGFibGVzLCB0YWJsZS50YWcsCi0gICAgICAgICAgICB0cmFuc2Zvcm1fYnVmLCB0cmFuc2Zv
cm1fbGVuZ3RoLCByZXN1bHQsIHJlc3VsdF9sZW5ndGgpKSkgeworICAvLyBVcGRhdGUgJ2hlYWQn
IGNoZWNrU3VtQWRqdXN0bWVudC4gV2UgYWxyZWFkeSBzZXQgaXQgdG8gMCBhbmQgc3VtbWVkIGZv
bnQuCisgIFRhYmxlKiBoZWFkX3RhYmxlID0gRmluZFRhYmxlKCZ0YWJsZXMsIGtIZWFkVGFibGVU
YWcpOworICBpZiAoaGVhZF90YWJsZSkgeworICAgIGlmIChQUkVESUNUX0ZBTFNFKGhlYWRfdGFi
bGUtPmRzdF9sZW5ndGggPCAxMikpIHsKKyAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZB
SUxVUkUoKTsKKyAgICB9CisgICAgdWludDhfdCBjaGVja3N1bV9hZGp1c3RtZW50WzRdOworICAg
IFN0b3JlVTMyKGNoZWNrc3VtX2FkanVzdG1lbnQsIDAsIDB4QjFCMEFGQkEgLSBmb250X2NoZWNr
c3VtKTsKKyAgICBpZiAoUFJFRElDVF9GQUxTRSghb3V0LT5Xcml0ZShjaGVja3N1bV9hZGp1c3Rt
ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRfdGFibGUtPmRzdF9v
ZmZzZXQgKyA4LCA0KSkpIHsKICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUo
KTsKICAgICB9CiAgIH0KKwogICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDb252ZXJ0V09GRjJU
b1RURih1aW50OF90KiByZXN1bHQsIHNpemVfdCByZXN1bHRfbGVuZ3RoLAotICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7Citib29sIFJl
YWRXT0ZGMkhlYWRlcihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBXT0ZGMkhl
YWRlciogaGRyKSB7CiAgIEJ1ZmZlciBmaWxlKGRhdGEsIGxlbmd0aCk7CiAKICAgdWludDMyX3Qg
c2lnbmF0dXJlOwotICB1aW50MzJfdCBmbGF2b3I7CiAgIGlmIChQUkVESUNUX0ZBTFNFKCFmaWxl
LlJlYWRVMzIoJnNpZ25hdHVyZSkgfHwgc2lnbmF0dXJlICE9IGtXb2ZmMlNpZ25hdHVyZSB8fAot
ICAgICAgIWZpbGUuUmVhZFUzMigmZmxhdm9yKSkpIHsKKyAgICAgICFmaWxlLlJlYWRVMzIoJmhk
ci0+Zmxhdm9yKSkpIHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAg
IH0KIApAQCAtMTAzNywxOCArMTAxNCwxNyBAQCBib29sIENvbnZlcnRXT0ZGMlRvVFRGKHVpbnQ4
X3QqIHJlc3VsdCwgc2l6ZV90IHJlc3VsdF9sZW5ndGgsCiAgICAgICAhZmlsZS5SZWFkVTMyKCZy
ZXBvcnRlZF9sZW5ndGgpIHx8IGxlbmd0aCAhPSByZXBvcnRlZF9sZW5ndGgpKSB7CiAgICAgcmV0
dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9Ci0gIHVpbnQxNl90IG51bV90YWJs
ZXM7Ci0gIGlmIChQUkVESUNUX0ZBTFNFKCFmaWxlLlJlYWRVMTYoJm51bV90YWJsZXMpIHx8ICFu
dW1fdGFibGVzKSkgeworICBpZiAoUFJFRElDVF9GQUxTRSghZmlsZS5SZWFkVTE2KCZoZHItPm51
bV90YWJsZXMpIHx8ICFoZHItPm51bV90YWJsZXMpKSB7CiAgICAgcmV0dXJuIEZPTlRfQ09NUFJF
U1NJT05fRkFJTFVSRSgpOwogICB9CisKICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGVzZSBm
aWVsZHMgb2YgdGhlIGhlYWRlcjoKICAgLy8gICB1aW50MTZfdCByZXNlcnZlZAotICAvLyAgIHVp
bnQzMl90IHRvdGFsX3NmbnRfc2l6ZSwgdGhlIGNhbGxlciBhbHJlYWR5IHBhc3NlcyBpdCBhcyBy
ZXN1bHRfbGVuZ3RoCisgIC8vICAgdWludDMyX3QgdG90YWxfc2ZudF9zaXplLCB3ZSBkb24ndCBi
ZWxpZXZlIHRoaXMsIHdpbGwgY29tcHV0ZSBsYXRlcgogICBpZiAoUFJFRElDVF9GQUxTRSghZmls
ZS5Ta2lwKDYpKSkgewogICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAg
fQotICB1aW50MzJfdCBjb21wcmVzc2VkX2xlbmd0aDsKLSAgaWYgKFBSRURJQ1RfRkFMU0UoIWZp
bGUuUmVhZFUzMigmY29tcHJlc3NlZF9sZW5ndGgpKSkgeworICBpZiAoUFJFRElDVF9GQUxTRSgh
ZmlsZS5SZWFkVTMyKCZoZHItPmNvbXByZXNzZWRfbGVuZ3RoKSkpIHsKICAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0KICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCB0
aGVzZSBmaWVsZHMgb2YgdGhlIGhlYWRlcjoKQEAgLTEwODIsMjggKzEwNTgsMzcgQEAgYm9vbCBD
b252ZXJ0V09GRjJUb1RURih1aW50OF90KiByZXN1bHQsIHNpemVfdCByZXN1bHRfbGVuZ3RoLAog
ICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0KICAgfQotICBz
dGQ6OnZlY3RvcjxUYWJsZT4gdGFibGVzKG51bV90YWJsZXMpOwotICBpZiAoUFJFRElDVF9GQUxT
RSghUmVhZFRhYmxlRGlyZWN0b3J5KCZmaWxlLCAmdGFibGVzLCBudW1fdGFibGVzKSkpIHsKKyAg
aGRyLT50YWJsZXMucmVzaXplKGhkci0+bnVtX3RhYmxlcyk7CisgIGlmIChQUkVESUNUX0ZBTFNF
KCFSZWFkVGFibGVEaXJlY3RvcnkoCisgICAgICAgICAgJmZpbGUsICZoZHItPnRhYmxlcywgaGRy
LT5udW1fdGFibGVzKSkpIHsKKyAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7
CisgIH0KKworICAvLyBCZWZvcmUgd2Ugc29ydCBmb3Igb3V0cHV0IHRoZSBsYXN0IHRhYmxlIGVu
ZCBpcyB0aGUgdW5jb21wcmVzc2VkIHNpemUuCisgIFRhYmxlJiBsYXN0X3RhYmxlID0gaGRyLT50
YWJsZXMuYmFjaygpOworICBoZHItPnVuY29tcHJlc3NlZF9zaXplID0gbGFzdF90YWJsZS5zcmNf
b2Zmc2V0ICsgbGFzdF90YWJsZS5zcmNfbGVuZ3RoOworICBpZiAoUFJFRElDVF9GQUxTRShoZHIt
PnVuY29tcHJlc3NlZF9zaXplIDwgbGFzdF90YWJsZS5zcmNfb2Zmc2V0KSkgewogICAgIHJldHVy
biBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQogCi0gIHVpbnQzMl90IGhlYWRlcl92
ZXJzaW9uID0gMDsKLSAgLy8gZm9yIGVhY2ggZm9udCBpbiBhIHR0YywgbWV0YWRhdGEgdG8gdXNl
IHdoZW4gcmVidWlsZGluZwotICBzdGQ6OnZlY3RvcjxUdGNGb250PiB0dGNfZm9udHM7Ci0gIHN0
ZDo6bWFwPGNvbnN0IFRhYmxlKiwgY29uc3QgVGFibGUqPiBsb2NhX2J5X2dseWY7CisgIGhkci0+
aGVhZGVyX3ZlcnNpb24gPSAwOwogCi0gIGlmIChmbGF2b3IgPT0ga1R0Y0ZvbnRGbGF2b3IpIHsK
LSAgICBpZiAoUFJFRElDVF9GQUxTRSghZmlsZS5SZWFkVTMyKCZoZWFkZXJfdmVyc2lvbikpKSB7
CisgIGlmIChoZHItPmZsYXZvciA9PSBrVHRjRm9udEZsYXZvcikgeworICAgIGlmIChQUkVESUNU
X0ZBTFNFKCFmaWxlLlJlYWRVMzIoJmhkci0+aGVhZGVyX3ZlcnNpb24pKSkgeworICAgICAgcmV0
dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICAgIH0KKyAgICBpZiAoUFJFRElDVF9G
QUxTRShoZHItPmhlYWRlcl92ZXJzaW9uICE9IDB4MDAwMTAwMDAKKyAgICAgICAgICAgICAgICAg
ICAmJiBoZHItPmhlYWRlcl92ZXJzaW9uICE9IDB4MDAwMjAwMDApKSB7CiAgICAgICByZXR1cm4g
Rk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgfQogICAgIHVpbnQzMl90IG51bV9mb250
czsKICAgICBpZiAoUFJFRElDVF9GQUxTRSghUmVhZDI1NVVTaG9ydCgmZmlsZSwgJm51bV9mb250
cykgfHwgIW51bV9mb250cykpIHsKICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxV
UkUoKTsKICAgICB9Ci0gICAgdHRjX2ZvbnRzLnJlc2l6ZShudW1fZm9udHMpOworICAgIGhkci0+
dHRjX2ZvbnRzLnJlc2l6ZShudW1fZm9udHMpOwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IG51bV9mb250czsgaSsrKSB7Ci0gICAgICBUdGNGb250JiB0dGNfZm9udCA9IHR0Y19mb250
c1tpXTsKKyAgICAgIFR0Y0ZvbnQmIHR0Y19mb250ID0gaGRyLT50dGNfZm9udHNbaV07CiAgICAg
ICB1aW50MzJfdCBudW1fdGFibGVzOwogICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoIVJlYWQyNTVV
U2hvcnQoJmZpbGUsICZudW1fdGFibGVzKSB8fCAhbnVtX3RhYmxlcykpIHsKICAgICAgICAgcmV0
dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwpAQCAtMTExNiwyNSArMTEwMSwyMSBAQCBi
b29sIENvbnZlcnRXT0ZGMlRvVFRGKHVpbnQ4X3QqIHJlc3VsdCwgc2l6ZV90IHJlc3VsdF9sZW5n
dGgsCiAKICAgICAgIGNvbnN0IFRhYmxlKiBnbHlmX3RhYmxlID0gTlVMTDsKICAgICAgIGNvbnN0
IFRhYmxlKiBsb2NhX3RhYmxlID0gTlVMTDsKLSAgICAgIHVpbnQxNl90IGdseWZfaWR4OwotICAg
ICAgdWludDE2X3QgbG9jYV9pZHg7CiAKICAgICAgIGZvciAodWludDMyX3QgaiA9IDA7IGogPCBu
dW1fdGFibGVzOyBqKyspIHsKICAgICAgICAgdW5zaWduZWQgaW50IHRhYmxlX2lkeDsKICAgICAg
ICAgaWYgKFBSRURJQ1RfRkFMU0UoIVJlYWQyNTVVU2hvcnQoJmZpbGUsICZ0YWJsZV9pZHgpKSB8
fAotICAgICAgICAgICAgdGFibGVfaWR4ID49IHRhYmxlcy5zaXplKCkpIHsKKyAgICAgICAgICAg
IHRhYmxlX2lkeCA+PSBoZHItPnRhYmxlcy5zaXplKCkpIHsKICAgICAgICAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICAgIH0KICAgICAgICAgdHRjX2ZvbnQudGFi
bGVfaW5kaWNlc1tqXSA9IHRhYmxlX2lkeDsKIAotICAgICAgICBjb25zdCBUYWJsZSYgdGFibGUg
PSB0YWJsZXNbdGFibGVfaWR4XTsKKyAgICAgICAgY29uc3QgVGFibGUmIHRhYmxlID0gaGRyLT50
YWJsZXNbdGFibGVfaWR4XTsKICAgICAgICAgaWYgKHRhYmxlLnRhZyA9PSBrTG9jYVRhYmxlVGFn
KSB7CiAgICAgICAgICAgbG9jYV90YWJsZSA9ICZ0YWJsZTsKLSAgICAgICAgICBsb2NhX2lkeCA9
IHRhYmxlX2lkeDsKICAgICAgICAgfQogICAgICAgICBpZiAodGFibGUudGFnID09IGtHbHlmVGFi
bGVUYWcpIHsKICAgICAgICAgICBnbHlmX3RhYmxlID0gJnRhYmxlOwotICAgICAgICAgIGdseWZf
aWR4ID0gdGFibGVfaWR4OwogICAgICAgICB9CiAKICAgICAgIH0KQEAgLTExNDUsNjUgKzExMjYs
MjggQEAgYm9vbCBDb252ZXJ0V09GRjJUb1RURih1aW50OF90KiByZXN1bHQsIHNpemVfdCByZXN1
bHRfbGVuZ3RoLAogI2VuZGlmCiAgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxV
UkUoKTsKICAgICAgIH0KLQotICAgICAgaWYgKGdseWZfdGFibGUgIT0gTlVMTCAmJiBsb2NhX3Rh
YmxlICE9IE5VTEwpIHsKLSAgICAgICAgbG9jYV9ieV9nbHlmW2dseWZfdGFibGVdID0gbG9jYV90
YWJsZTsKLSAgICAgIH0KICAgICB9CiAgIH0KIAotICBjb25zdCB1aW50NjRfdCBmaXJzdF90YWJs
ZV9vZmZzZXQgPQotICAgIENvbXB1dGVPZmZzZXRUb0ZpcnN0VGFibGUoaGVhZGVyX3ZlcnNpb24s
IG51bV90YWJsZXMsIHR0Y19mb250cyk7Ci0KLSAgaWYgKFBSRURJQ1RfRkFMU0UoZmlyc3RfdGFi
bGVfb2Zmc2V0ID4gcmVzdWx0X2xlbmd0aCkpIHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lP
Tl9GQUlMVVJFKCk7Ci0gIH0KKyAgY29uc3QgdWludDY0X3QgZmlyc3RfdGFibGVfb2Zmc2V0ID0g
Q29tcHV0ZU9mZnNldFRvRmlyc3RUYWJsZSgqaGRyKTsKIAotICB1aW50NjRfdCBjb21wcmVzc2Vk
X29mZnNldCA9IGZpbGUub2Zmc2V0KCk7Ci0gIGlmIChQUkVESUNUX0ZBTFNFKGNvbXByZXNzZWRf
b2Zmc2V0ID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkgeworICBoZHIt
PmNvbXByZXNzZWRfb2Zmc2V0ID0gZmlsZS5vZmZzZXQoKTsKKyAgaWYgKFBSRURJQ1RfRkFMU0Uo
aGRyLT5jb21wcmVzc2VkX29mZnNldCA+CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpIHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lP
Tl9GQUlMVVJFKCk7CiAgIH0KLSAgdWludDY0X3Qgc3JjX29mZnNldCA9IFJvdW5kNChjb21wcmVz
c2VkX29mZnNldCArIGNvbXByZXNzZWRfbGVuZ3RoKTsKKyAgdWludDY0X3Qgc3JjX29mZnNldCA9
IFJvdW5kNChoZHItPmNvbXByZXNzZWRfb2Zmc2V0ICsgaGRyLT5jb21wcmVzc2VkX2xlbmd0aCk7
CiAgIHVpbnQ2NF90IGRzdF9vZmZzZXQgPSBmaXJzdF90YWJsZV9vZmZzZXQ7CiAKIAotICBmb3Ig
KHVpbnQxNl90IGkgPSAwOyBpIDwgbnVtX3RhYmxlczsgKytpKSB7Ci0gICAgVGFibGUqIHRhYmxl
ID0gJnRhYmxlc1tpXTsKLSAgICB0YWJsZS0+ZHN0X29mZnNldCA9IGRzdF9vZmZzZXQ7Ci0gICAg
ZHN0X29mZnNldCArPSB0YWJsZS0+ZHN0X2xlbmd0aDsKLSAgICBpZiAoUFJFRElDVF9GQUxTRShk
c3Rfb2Zmc2V0ID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkgewotICAg
ICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwotICAgIH0KLSAgICBkc3Rfb2Zm
c2V0ID0gUm91bmQ0KGRzdF9vZmZzZXQpOwotICB9Ci0gIGlmIChQUkVESUNUX0ZBTFNFKHNyY19v
ZmZzZXQgPiBsZW5ndGggfHwgZHN0X29mZnNldCAhPSByZXN1bHRfbGVuZ3RoKSkgeworICBpZiAo
UFJFRElDVF9GQUxTRShzcmNfb2Zmc2V0ID4gbGVuZ3RoKSkgewogI2lmZGVmIEZPTlRfQ09NUFJF
U1NJT05fQklOCiAgICAgZnByaW50ZihzdGRlcnIsICJvZmZzZXQgZmFpbDsgc3JjX29mZnNldCAl
IiBQUkl1NjQgIiBsZW5ndGggJWx1ICIKLSAgICAgICJkc3Rfb2Zmc2V0ICUiIFBSSXU2NCAiIHJl
c3VsdF9sZW5ndGggJWx1XG4iLAotICAgICAgc3JjX29mZnNldCwgbGVuZ3RoLCBkc3Rfb2Zmc2V0
LCByZXN1bHRfbGVuZ3RoKTsKKyAgICAgICJkc3Rfb2Zmc2V0ICUiIFBSSXU2NCAiXG4iLAorICAg
ICAgc3JjX29mZnNldCwgbGVuZ3RoLCBkc3Rfb2Zmc2V0KTsKICNlbmRpZgogICAgIHJldHVybiBG
T05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQotCi0gIC8vIFJlLW9yZGVyIHRhYmxlcyBp
biBvdXRwdXQgKE9UU3BlYykgb3JkZXIKLSAgc3RkOjp2ZWN0b3I8VGFibGU+IHNvcnRlZF90YWJs
ZXModGFibGVzKTsKLSAgaWYgKGhlYWRlcl92ZXJzaW9uKSB7Ci0gICAgLy8gY29sbGVjdGlvbjsg
d2UgaGF2ZSB0byBzb3J0IHRoZSB0YWJsZSBvZmZzZXQgdmVjdG9yIGluIGVhY2ggZm9udAotICAg
IGZvciAoYXV0byYgdHRjX2ZvbnQgOiB0dGNfZm9udHMpIHsKLSAgICAgIHN0ZDo6bWFwPHVpbnQz
Ml90LCB1aW50MTZfdD4gc29ydGVkX2luZGV4X2J5X3RhZzsKLSAgICAgIGZvciAoYXV0byB0YWJs
ZV9pbmRleCA6IHR0Y19mb250LnRhYmxlX2luZGljZXMpIHsKLSAgICAgICAgc29ydGVkX2luZGV4
X2J5X3RhZ1t0YWJsZXNbdGFibGVfaW5kZXhdLnRhZ10gPSB0YWJsZV9pbmRleDsKLSAgICAgIH0K
LSAgICAgIHVpbnQxNl90IGluZGV4ID0gMDsKLSAgICAgIGZvciAoYXV0byYgaSA6IHNvcnRlZF9p
bmRleF9ieV90YWcpIHsKLSAgICAgICAgdHRjX2ZvbnQudGFibGVfaW5kaWNlc1tpbmRleCsrXSA9
IGkuc2Vjb25kOwotICAgICAgfQotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvLyBub24tY29sbGVj
dGlvbjsgd2UgY2FuIGp1c3Qgc29ydCB0aGUgdGFibGVzCi0gICAgc3RkOjpzb3J0KHNvcnRlZF90
YWJsZXMuYmVnaW4oKSwgc29ydGVkX3RhYmxlcy5lbmQoKSk7Ci0gIH0KLQogICBpZiAobWV0YV9v
ZmZzZXQpIHsKICAgICBpZiAoUFJFRElDVF9GQUxTRShzcmNfb2Zmc2V0ICE9IG1ldGFfb2Zmc2V0
KSkgewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwpAQCAtMTIyOCwy
OCArMTE3Miw1OCBAQCBib29sIENvbnZlcnRXT0ZGMlRvVFRGKHVpbnQ4X3QqIHJlc3VsdCwgc2l6
ZV90IHJlc3VsdF9sZW5ndGgsCiAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgp
OwogICB9CiAKKyAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFdyaXRlIGV2ZXJ5dGhpbmcgYmVmb3Jl
IHRoZSBhY3R1YWwgdGFibGUgZGF0YQorYm9vbCBXcml0ZUhlYWRlcnMoY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90IGxlbmd0aCwgUmVidWlsZE1ldGFkYXRhKiBtZXRhZGF0YSwKKyAgICAgICAg
ICAgICAgICAgIFdPRkYySGVhZGVyKiBoZHIsIFdPRkYyT3V0KiBvdXQpIHsKKyAgc3RkOjp2ZWN0
b3I8dWludDhfdD4gb3V0cHV0KENvbXB1dGVPZmZzZXRUb0ZpcnN0VGFibGUoKmhkciksIDApOwor
CisgIC8vIFJlLW9yZGVyIHRhYmxlcyBpbiBvdXRwdXQgKE9UU3BlYykgb3JkZXIKKyAgc3RkOjp2
ZWN0b3I8VGFibGU+IHNvcnRlZF90YWJsZXMoaGRyLT50YWJsZXMpOworICBpZiAoaGRyLT5oZWFk
ZXJfdmVyc2lvbikgeworICAgIC8vIGNvbGxlY3Rpb247IHdlIGhhdmUgdG8gc29ydCB0aGUgdGFi
bGUgb2Zmc2V0IHZlY3RvciBpbiBlYWNoIGZvbnQKKyAgICBmb3IgKGF1dG8mIHR0Y19mb250IDog
aGRyLT50dGNfZm9udHMpIHsKKyAgICAgIHN0ZDo6bWFwPHVpbnQzMl90LCB1aW50MTZfdD4gc29y
dGVkX2luZGV4X2J5X3RhZzsKKyAgICAgIGZvciAoYXV0byB0YWJsZV9pbmRleCA6IHR0Y19mb250
LnRhYmxlX2luZGljZXMpIHsKKyAgICAgICAgc29ydGVkX2luZGV4X2J5X3RhZ1toZHItPnRhYmxl
c1t0YWJsZV9pbmRleF0udGFnXSA9IHRhYmxlX2luZGV4OworICAgICAgfQorICAgICAgdWludDE2
X3QgaW5kZXggPSAwOworICAgICAgZm9yIChhdXRvJiBpIDogc29ydGVkX2luZGV4X2J5X3RhZykg
eworICAgICAgICB0dGNfZm9udC50YWJsZV9pbmRpY2VzW2luZGV4KytdID0gaS5zZWNvbmQ7Cisg
ICAgICB9CisgICAgfQorICB9IGVsc2UgeworICAgIC8vIG5vbi1jb2xsZWN0aW9uOyB3ZSBjYW4g
anVzdCBzb3J0IHRoZSB0YWJsZXMKKyAgICBzdGQ6OnNvcnQoc29ydGVkX3RhYmxlcy5iZWdpbigp
LCBzb3J0ZWRfdGFibGVzLmVuZCgpKTsKKyAgfQorCiAgIC8vIFN0YXJ0IGJ1aWxkaW5nIHRoZSBm
b250CisgIHVpbnQ4X3QqIHJlc3VsdCA9ICZvdXRwdXRbMF07CiAgIHNpemVfdCBvZmZzZXQgPSAw
OwotICBzaXplX3Qgb2Zmc2V0X3RhYmxlID0gMDsKLSAgaWYgKGhlYWRlcl92ZXJzaW9uKSB7Cisg
IGlmIChoZHItPmhlYWRlcl92ZXJzaW9uKSB7CiAgICAgLy8gVFRDIGhlYWRlcgotICAgIG9mZnNl
dCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCBmbGF2b3IpOyAgLy8gVEFHIFRUQ1RhZwotICAg
IG9mZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCBoZWFkZXJfdmVyc2lvbik7ICAvLyBG
SVhFRCBWZXJzaW9uCi0gICAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIHR0Y19m
b250cy5zaXplKCkpOyAgLy8gVUxPTkcgbnVtRm9udHMKKyAgICBvZmZzZXQgPSBTdG9yZVUzMihy
ZXN1bHQsIG9mZnNldCwgaGRyLT5mbGF2b3IpOyAgLy8gVEFHIFRUQ1RhZworICAgIG9mZnNldCA9
IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCBoZHItPmhlYWRlcl92ZXJzaW9uKTsgIC8vIEZJWEVE
IFZlcnNpb24KKyAgICBvZmZzZXQgPSBTdG9yZVUzMihyZXN1bHQsIG9mZnNldCwgaGRyLT50dGNf
Zm9udHMuc2l6ZSgpKTsgIC8vIFVMT05HIG51bUZvbnRzCiAgICAgLy8gU3BhY2UgZm9yIFVMT05H
IE9mZnNldFRhYmxlW251bUZvbnRzXSAoemVyb2VkIGluaXRpYWxseSkKLSAgICBvZmZzZXRfdGFi
bGUgPSBvZmZzZXQ7ICAvLyBrZWVwIHN0YXJ0IG9mIG9mZnNldCB0YWJsZSBmb3IgbGF0ZXIKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHR0Y19mb250cy5zaXplKCk7IGkrKykgeworICAgIHNp
emVfdCBvZmZzZXRfdGFibGUgPSBvZmZzZXQ7ICAvLyBrZWVwIHN0YXJ0IG9mIG9mZnNldCB0YWJs
ZSBmb3IgbGF0ZXIKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhkci0+dHRjX2ZvbnRzLnNp
emUoKTsgaSsrKSB7CiAgICAgICBvZmZzZXQgPSBTdG9yZVUzMihyZXN1bHQsIG9mZnNldCwgMCk7
ICAvLyB3aWxsIGZpbGwgcmVhbCB2YWx1ZXMgaW4gbGF0ZXIKICAgICB9CiAgICAgLy8gc3BhY2Ug
Zm9yIERTSUcgZmllbGRzIGZvciBoZWFkZXIgdjIKLSAgICBpZiAoaGVhZGVyX3ZlcnNpb24gPT0g
MHgwMDAyMDAwMCkgeworICAgIGlmIChoZHItPmhlYWRlcl92ZXJzaW9uID09IDB4MDAwMjAwMDAp
IHsKICAgICAgIG9mZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCAwKTsgIC8vIFVMT05H
IHVsRHNpZ1RhZwogICAgICAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIDApOyAg
Ly8gVUxPTkcgdWxEc2lnTGVuZ3RoCiAgICAgICBvZmZzZXQgPSBTdG9yZVUzMihyZXN1bHQsIG9m
ZnNldCwgMCk7ICAvLyBVTE9ORyB1bERzaWdPZmZzZXQKICAgICB9CiAKICAgICAvLyB3cml0ZSBP
ZmZzZXQgVGFibGVzIGFuZCBzdG9yZSB0aGUgbG9jYXRpb24gb2YgZWFjaCBpbiBUVEMgSGVhZGVy
Ci0gICAgZm9yIChhdXRvJiB0dGNfZm9udCA6IHR0Y19mb250cykgeworICAgIG1ldGFkYXRhLT5m
b250X2luZm9zLnJlc2l6ZShoZHItPnR0Y19mb250cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaGRyLT50dGNfZm9udHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgIFR0Y0ZvbnQm
IHR0Y19mb250ID0gaGRyLT50dGNfZm9udHNbaV07CisKICAgICAgIC8vIHdyaXRlIE9mZnNldCBU
YWJsZSBsb2NhdGlvbiBpbnRvIFRUQyBIZWFkZXIKICAgICAgIG9mZnNldF90YWJsZSA9IFN0b3Jl
VTMyKHJlc3VsdCwgb2Zmc2V0X3RhYmxlLCBvZmZzZXQpOwogCkBAIC0xMjU4LDk5ICsxMjMyLDgy
IEBAIGJvb2wgQ29udmVydFdPRkYyVG9UVEYodWludDhfdCogcmVzdWx0LCBzaXplX3QgcmVzdWx0
X2xlbmd0aCwKICAgICAgIG9mZnNldCA9IFN0b3JlT2Zmc2V0VGFibGUocmVzdWx0LCBvZmZzZXQs
IHR0Y19mb250LmZsYXZvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRjX2Zv
bnQudGFibGVfaW5kaWNlcy5zaXplKCkpOwogCi0gICAgICAvLyB3cml0ZSB0YWJsZSBlbnRyaWVz
CiAgICAgICBmb3IgKGNvbnN0IGF1dG8gdGFibGVfaW5kZXggOiB0dGNfZm9udC50YWJsZV9pbmRp
Y2VzKSB7Ci0gICAgICAgIG9mZnNldCA9IFN0b3JlVGFibGVFbnRyeShyZXN1bHQsIHRhYmxlc1t0
YWJsZV9pbmRleF0sIG9mZnNldCk7CisgICAgICAgIHVpbnQzMl90IHRhZyA9IGhkci0+dGFibGVz
W3RhYmxlX2luZGV4XS50YWc7CisgICAgICAgIG1ldGFkYXRhLT5mb250X2luZm9zW2ldLnRhYmxl
X2VudHJ5X2J5X3RhZ1t0YWddID0gb2Zmc2V0OworICAgICAgICBvZmZzZXQgPSBTdG9yZVRhYmxl
RW50cnkocmVzdWx0LCBvZmZzZXQsIHRhZyk7CiAgICAgICB9CisKKyAgICAgIHR0Y19mb250Lmhl
YWRlcl9jaGVja3N1bSA9IENvbXB1dGVVTG9uZ1N1bSgmb3V0cHV0W3R0Y19mb250LmRzdF9vZmZz
ZXRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9m
ZnNldCAtIHR0Y19mb250LmRzdF9vZmZzZXQpOwogICAgIH0KICAgfSBlbHNlIHsKLSAgICBvZmZz
ZXQgPSBTdG9yZU9mZnNldFRhYmxlKHJlc3VsdCwgb2Zmc2V0LCBmbGF2b3IsIG51bV90YWJsZXMp
OwotICAgIGZvciAodWludDE2X3QgaSA9IDA7IGkgPCBudW1fdGFibGVzOyArK2kpIHsKLSAgICAg
IG9mZnNldCA9IFN0b3JlVGFibGVFbnRyeShyZXN1bHQsIHNvcnRlZF90YWJsZXNbaV0sIG9mZnNl
dCk7CisgICAgbWV0YWRhdGEtPmZvbnRfaW5mb3MucmVzaXplKDEpOworICAgIG9mZnNldCA9IFN0
b3JlT2Zmc2V0VGFibGUocmVzdWx0LCBvZmZzZXQsIGhkci0+Zmxhdm9yLCBoZHItPm51bV90YWJs
ZXMpOworICAgIGZvciAodWludDE2X3QgaSA9IDA7IGkgPCBoZHItPm51bV90YWJsZXM7ICsraSkg
eworICAgICAgbWV0YWRhdGEtPmZvbnRfaW5mb3NbMF0udGFibGVfZW50cnlfYnlfdGFnW3NvcnRl
ZF90YWJsZXNbaV0udGFnXSA9IG9mZnNldDsKKyAgICAgIG9mZnNldCA9IFN0b3JlVGFibGVFbnRy
eShyZXN1bHQsIG9mZnNldCwgc29ydGVkX3RhYmxlc1tpXS50YWcpOwogICAgIH0KICAgfQogCi0g
IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IHVuY29tcHJlc3NlZF9idWY7Ci0gIGNvbnN0IHVpbnQ4X3Qq
IHRyYW5zZm9ybV9idWYgPSBOVUxMOwotICB1aW50NjRfdCB0b3RhbF9zaXplID0gMDsKLSAgZm9y
ICh1aW50MTZfdCBpID0gMDsgaSA8IG51bV90YWJsZXM7ICsraSkgewotICAgIHRvdGFsX3NpemUg
Kz0gdGFibGVzW2ldLnRyYW5zZm9ybV9sZW5ndGg7Ci0gICAgaWYgKFBSRURJQ1RfRkFMU0UodG90
YWxfc2l6ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpIHsKLSAgICAg
IHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9Ci0gIH0KLSAgdW5jb21w
cmVzc2VkX2J1Zi5yZXNpemUodG90YWxfc2l6ZSk7Ci0gIGNvbnN0IHVpbnQ4X3QqIHNyY19idWYg
PSBkYXRhICsgY29tcHJlc3NlZF9vZmZzZXQ7Ci0gIGlmIChQUkVESUNUX0ZBTFNFKCFXb2ZmMlVu
Y29tcHJlc3MoJnVuY29tcHJlc3NlZF9idWZbMF0sIHRvdGFsX3NpemUsCi0gICAgICAgICAgICAg
ICAgICAgICAgIHNyY19idWYsIGNvbXByZXNzZWRfbGVuZ3RoKSkpIHsKKyAgaWYgKFBSRURJQ1Rf
RkFMU0UoIW91dC0+V3JpdGUoJm91dHB1dFswXSwgb3V0cHV0LnNpemUoKSkpKSB7CiAgICAgcmV0
dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9CisgIG1ldGFkYXRhLT5oZWFkZXJf
Y2hlY2tzdW0gPSBDb21wdXRlVUxvbmdTdW0oJm91dHB1dFswXSwgb3V0cHV0LnNpemUoKSk7Cisg
IHJldHVybiB0cnVlOworfQogCi0gIC8vIHJvdW5kIDEsIGNvcHkgYWNyb3NzIGFsbCB0aGUgdW5t
b2RpZmllZCB0YWJsZXMKLSAgdHJhbnNmb3JtX2J1ZiA9ICZ1bmNvbXByZXNzZWRfYnVmWzBdOwot
ICBjb25zdCB1aW50OF90KiBjb25zdCB0cmFuc2Zvcm1fYnVmX2VuZCA9ICZ1bmNvbXByZXNzZWRf
YnVmWzBdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB1bmNv
bXByZXNzZWRfYnVmLnNpemUoKTsKK30gIC8vIG5hbWVzcGFjZQogCi0gIC8vIFdlIHdpcGUgb3V0
IHRoZSB2YWx1ZXMgYXMgdGhleSBnZXQgd3JpdHRlbiBpbnRvIHRoZSBmaW5hbCByZXN1bHQgdG8g
ZGVkdXAKLSAgc3RkOjptYXA8dWludDMyX3QsIGNvbnN0IHVpbnQ4X3QqPiBzcmNfYnlfZGVzdDsK
LSAgZm9yICh1aW50MTZfdCBpID0gMDsgaSA8IG51bV90YWJsZXM7ICsraSkgewotICAgIGNvbnN0
IFRhYmxlKiB0YWJsZSA9ICZ0YWJsZXNbaV07Ci0gICAgc2l6ZV90IHRyYW5zZm9ybV9sZW5ndGgg
PSB0YWJsZS0+dHJhbnNmb3JtX2xlbmd0aDsKK3NpemVfdCBDb21wdXRlV09GRjJGaW5hbFNpemUo
Y29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeworICBCdWZmZXIgZmlsZShkYXRh
LCBsZW5ndGgpOworICB1aW50MzJfdCB0b3RhbF9sZW5ndGg7CiAKLSAgICBzcmNfYnlfZGVzdFt0
YWJsZS0+ZHN0X29mZnNldF0gPSB0cmFuc2Zvcm1fYnVmOworICBpZiAoIWZpbGUuU2tpcCgxNikg
fHwKKyAgICAgICFmaWxlLlJlYWRVMzIoJnRvdGFsX2xlbmd0aCkpIHsKKyAgICByZXR1cm4gMDsK
KyAgfQorICByZXR1cm4gdG90YWxfbGVuZ3RoOworfQogCi0gICAgaWYgKFBSRURJQ1RfRkFMU0Uo
dHJhbnNmb3JtX2J1ZiArIHRyYW5zZm9ybV9sZW5ndGggPiB0cmFuc2Zvcm1fYnVmX2VuZCkpIHsK
LSAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9Ci0gICAgdHJh
bnNmb3JtX2J1ZiArPSB0cmFuc2Zvcm1fbGVuZ3RoOworYm9vbCBDb252ZXJ0V09GRjJUb1RURih1
aW50OF90ICpyZXN1bHQsIHNpemVfdCByZXN1bHRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoKSB7CisgIFdPRkYyTWVtb3J5
T3V0IG91dChyZXN1bHQsIHJlc3VsdF9sZW5ndGgpOworICByZXR1cm4gQ29udmVydFdPRkYyVG9U
VEYoZGF0YSwgbGVuZ3RoLCAmb3V0KTsKK30KKworYm9vbCBDb252ZXJ0V09GRjJUb1RURihjb25z
dCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBX
T0ZGMk91dCogb3V0KSB7CisgIFJlYnVpbGRNZXRhZGF0YSBtZXRhZGF0YTsKKyAgV09GRjJIZWFk
ZXIgaGRyOworICBpZiAoIVJlYWRXT0ZGMkhlYWRlcihkYXRhLCBsZW5ndGgsICZoZHIpKSB7Cisg
ICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9CiAKLSAgZm9yICh1aW50
MTZfdCBpID0gMDsgaSA8IG51bV90YWJsZXM7ICsraSkgewotICAgIGNvbnN0IFRhYmxlKiB0YWJs
ZSA9ICZ0YWJsZXNbaV07Ci0gICAgY29uc3Qgc2l6ZV90IHRyYW5zZm9ybV9sZW5ndGggPSB0YWJs
ZS0+dHJhbnNmb3JtX2xlbmd0aDsKKyAgaWYgKCFXcml0ZUhlYWRlcnMoZGF0YSwgbGVuZ3RoLCAm
bWV0YWRhdGEsICZoZHIsIG91dCkpIHsKKyAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlM
VVJFKCk7CisgIH0KIAotICAgIGlmICgodGFibGUtPmZsYWdzICYga1dvZmYyRmxhZ3NUcmFuc2Zv
cm0pICE9IGtXb2ZmMkZsYWdzVHJhbnNmb3JtKSB7Ci0gICAgICBpZiAoUFJFRElDVF9GQUxTRSh0
cmFuc2Zvcm1fbGVuZ3RoICE9IHRhYmxlLT5kc3RfbGVuZ3RoKSkgewotICAgICAgICByZXR1cm4g
Rk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9Ci0gICAgICBpZiAoUFJFRElDVF9G
QUxTRShzdGF0aWNfY2FzdDx1aW50NjRfdD4odGFibGUtPmRzdF9vZmZzZXQgKwotICAgICAgICAg
IHRyYW5zZm9ybV9sZW5ndGgpID4gcmVzdWx0X2xlbmd0aCkpIHsKLSAgICAgICAgcmV0dXJuIEZP
TlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwotICAgICAgfQotICAgICAgdHJhbnNmb3JtX2J1ZiA9
IHNyY19ieV9kZXN0W3RhYmxlLT5kc3Rfb2Zmc2V0XTsKLSAgICAgIHNyY19ieV9kZXN0LmVyYXNl
KHRhYmxlLT5kc3Rfb2Zmc2V0KTsKLSAgICAgIHN0ZDo6bWVtY3B5KHJlc3VsdCArIHRhYmxlLT5k
c3Rfb2Zmc2V0LCB0cmFuc2Zvcm1fYnVmLCB0cmFuc2Zvcm1fbGVuZ3RoKTsKLSAgICB9CisgIGNv
bnN0IGZsb2F0IGNvbXByZXNzaW9uX3JhdGlvID0gKGZsb2F0KSBoZHIudW5jb21wcmVzc2VkX3Np
emUgLyBsZW5ndGg7CisgIGlmIChjb21wcmVzc2lvbl9yYXRpbyA+IGtNYXhQbGF1c2libGVDb21w
cmVzc2lvblJhdGlvKSB7CisjaWZkZWYgRk9OVF9DT01QUkVTU0lPTl9CSU4KKyAgICBmcHJpbnRm
KHN0ZGVyciwgIkltcGxhdXNpYmxlIGNvbXByZXNzaW9uIHJhdGlvICUuMDFmXG4iLCBjb21wcmVz
c2lvbl9yYXRpbyk7CisjZW5kaWYKKyAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJF
KCk7CiAgIH0KIAotICAvLyByb3VuZCAyLCByZWNvbnN0cnVjdCB0cmFuc2Zvcm1lZCB0YWJsZXMK
LSAgaWYgKFBSRURJQ1RfRkFMU0UoaGVhZGVyX3ZlcnNpb24pKSB7Ci0gICAgLy8gUmVidWlsZCBj
b2xsZWN0aW9uIGZvbnQgYnkgZm9udC4KLSAgICBzdGQ6OnZlY3RvcjxUYWJsZT4gZm9udF90YWJs
ZXM7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB0dGNfZm9udCA6IHR0Y19mb250cykgewotICAgICAg
Zm9udF90YWJsZXMucmVzaXplKHR0Y19mb250LnRhYmxlX2luZGljZXMuc2l6ZSgpKTsKLSAgICAg
IGZvciAoYXV0byBpID0gMDsgaSA8IHR0Y19mb250LnRhYmxlX2luZGljZXMuc2l6ZSgpOyBpKysp
IHsKLSAgICAgICAgZm9udF90YWJsZXNbaV0gPSB0YWJsZXNbdHRjX2ZvbnQudGFibGVfaW5kaWNl
c1tpXV07Ci0gICAgICB9Ci0gICAgICBpZiAoUFJFRElDVF9GQUxTRSghUmVjb25zdHJ1Y3RUcmFu
c2Zvcm1lZEZvbnQoZm9udF90YWJsZXMsICZzcmNfYnlfZGVzdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsIHJlc3VsdF9sZW5ndGgp
KSkgewotICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9
Ci0gICAgfQotICB9IGVsc2UgewotICAgIGlmIChQUkVESUNUX0ZBTFNFKCFSZWNvbnN0cnVjdFRy
YW5zZm9ybWVkRm9udCh0YWJsZXMsICZzcmNfYnlfZGVzdCwgcmVzdWx0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfbGVuZ3RoKSkpIHsK
LSAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICB9CisgIGNvbnN0
IHVpbnQ4X3QqIHNyY19idWYgPSBkYXRhICsgaGRyLmNvbXByZXNzZWRfb2Zmc2V0OworICBzdGQ6
OnZlY3Rvcjx1aW50OF90PiB1bmNvbXByZXNzZWRfYnVmKGhkci51bmNvbXByZXNzZWRfc2l6ZSk7
CisgIGlmIChQUkVESUNUX0ZBTFNFKCFXb2ZmMlVuY29tcHJlc3MoJnVuY29tcHJlc3NlZF9idWZb
MF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRyLnVuY29tcHJlc3Nl
ZF9zaXplLCBzcmNfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhk
ci5jb21wcmVzc2VkX2xlbmd0aCkpKSB7CisgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJ
TFVSRSgpOwogICB9CiAKLSAgaWYgKGhlYWRlcl92ZXJzaW9uKSB7Ci0gICAgaWYgKFBSRURJQ1Rf
RkFMU0UoCi0gICAgICAgICFGaXhDb2xsZWN0aW9uQ2hlY2tzdW1zKGhlYWRlcl92ZXJzaW9uLCB0
YWJsZXMsIHR0Y19mb250cywgcmVzdWx0KSkpIHsKLSAgICAgIHJldHVybiBGT05UX0NPTVBSRVNT
SU9OX0ZBSUxVUkUoKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKFBSRURJQ1RfRkFMU0Uo
IUZpeENoZWNrc3Vtcyhzb3J0ZWRfdGFibGVzLCByZXN1bHQpKSkgeworICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1ldGFkYXRhLmZvbnRfaW5mb3Muc2l6ZSgpOyBpKyspIHsKKyAgICBpZiAoUFJF
RElDVF9GQUxTRSghUmVjb25zdHJ1Y3RGb250KCZ1bmNvbXByZXNzZWRfYnVmWzBdLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRyLnVuY29tcHJlc3NlZF9zaXplLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1ldGFkYXRhLCAmaGRyLCBp
LCBvdXQpKSkgewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAg
IH0KICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2Rl
Yy5oIGIvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2RlYy5oCmluZGV4IDc0YmE3
ZjUuLmI4ODk4MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2Zm
Ml9kZWMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfZGVjLmgKQEAg
LTE5LDYgKzE5LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPGludHR5cGVz
Lmg+CisjaW5jbHVkZSAiLi93b2ZmMl9vdXQuaCIKIAogbmFtZXNwYWNlIHdvZmYyIHsKIApAQCAt
MjgsOSArMjksMTYgQEAgc2l6ZV90IENvbXB1dGVXT0ZGMkZpbmFsU2l6ZShjb25zdCB1aW50OF90
ICpkYXRhLCBzaXplX3QgbGVuZ3RoKTsKIC8vIERlY29tcHJlc3NlcyB0aGUgZm9udCBpbnRvIHRo
ZSB0YXJnZXQgYnVmZmVyLiBUaGUgcmVzdWx0X2xlbmd0aCBzaG91bGQKIC8vIGJlIHRoZSBzYW1l
IGFzIGRldGVybWluZWQgYnkgQ29tcHV0ZUZpbmFsU2l6ZSgpLiBSZXR1cm5zIHRydWUgb24gc3Vj
Y2Vzc2Z1bAogLy8gZGVjb21wcmVzc2lvbi4KKy8vIERFUFJFQ0FURUQ7IHBsZWFzZSBwcmVmZXIg
dGhlIHZlcnNpb24gdGhhdCB0YWtlcyBhIFdPRkYyT3V0KgogYm9vbCBDb252ZXJ0V09GRjJUb1RU
Rih1aW50OF90ICpyZXN1bHQsIHNpemVfdCByZXN1bHRfbGVuZ3RoLAogICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoKTsKIAorLy8gRGVjb21w
cmVzc2VzIHRoZSBmb250IGludG8gb3V0LiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4KKy8vIFdv
cmtzIGV2ZW4gaWYgV09GRjJIZWFkZXIgdG90YWxTZm50U2l6ZSBpcyB3cm9uZy4KKy8vIFBsZWFz
ZSBwcmVmZXIgdGhpcyBBUEkuCitib29sIENvbnZlcnRXT0ZGMlRvVFRGKGNvbnN0IHVpbnQ4X3Qg
KmRhdGEsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIFdPRkYyT3V0KiBv
dXQpOworCiB9IC8vIG5hbWVzcGFjZSB3b2ZmMgogCiAjZW5kaWYgIC8vIFdPRkYyX1dPRkYyX0RF
Q19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2RlY29t
cHJlc3MuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfZGVjb21wcmVzcy5j
YwppbmRleCA3NjY4YzRlLi5mMjljNzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS93
b2ZmMi9zcmMvd29mZjJfZGVjb21wcmVzcy5jYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2Zm
Mi9zcmMvd29mZjJfZGVjb21wcmVzcy5jYwpAQCAtMTcsMTAgKzE3LDEwIEBACiAKICNpbmNsdWRl
IDxzdHJpbmc+CiAKLQotI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICIuL2ZpbGUuaCIKICNp
bmNsdWRlICIuL3dvZmYyX2RlYy5oIgogCisKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn
dikgewogICB1c2luZyBzdGQ6OnN0cmluZzsKIApAQCAtMzEsMjQgKzMxLDE4IEBAIGludCBtYWlu
KGludCBhcmdjLCBjaGFyICoqYXJndikgewogCiAgIHN0cmluZyBmaWxlbmFtZShhcmd2WzFdKTsK
ICAgc3RyaW5nIG91dGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyKDAsIGZpbGVuYW1lLmZpbmRf
bGFzdF9vZigiLiIpKSArICIudHRmIjsKLSAgZnByaW50ZihzdGRvdXQsICJQcm9jZXNzaW5nICVz
ID0+ICVzXG4iLAotICAgIGZpbGVuYW1lLmNfc3RyKCksIG91dGZpbGVuYW1lLmNfc3RyKCkpOwor
CiAgIHN0cmluZyBpbnB1dCA9IHdvZmYyOjpHZXRGaWxlQ29udGVudChmaWxlbmFtZSk7CisgIGNv
bnN0IHVpbnQ4X3QqIHJhd19pbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KGlucHV0LmRhdGEoKSk7CisgIHN0cmluZyBvdXRwdXQoc3RkOjptaW4od29mZjI6OkNvbXB1dGVX
T0ZGMkZpbmFsU2l6ZShyYXdfaW5wdXQsIGlucHV0LnNpemUoKSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgd29mZjI6OmtEZWZhdWx0TWF4U2l6ZSksIDApOworICB3b2ZmMjo6V09GRjJTdHJp
bmdPdXQgb3V0KCZvdXRwdXQpOwogCi0gIHNpemVfdCBkZWNvbXByZXNzZWRfc2l6ZSA9IHdvZmYy
OjpDb21wdXRlV09GRjJGaW5hbFNpemUoCi0gICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPihpbnB1dC5kYXRhKCkpLCBpbnB1dC5zaXplKCkpOwotICBzdHJpbmcgb3V0cHV0KGRl
Y29tcHJlc3NlZF9zaXplLCAwKTsKLSAgY29uc3QgYm9vbCBvayA9IHdvZmYyOjpDb252ZXJ0V09G
RjJUb1RURigKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZvdXRwdXRbMF0pLCBk
ZWNvbXByZXNzZWRfc2l6ZSwKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUoKSk7CisgIGNvbnN0IGJvb2wgb2sgPSB3b2ZmMjo6
Q29udmVydFdPRkYyVG9UVEYocmF3X2lucHV0LCBpbnB1dC5zaXplKCksICZvdXQpOwogCi0gIGlm
ICghb2spIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkRlY29tcHJlc3Npb24gZmFpbGVkXG4iKTsK
LSAgICByZXR1cm4gMTsKKyAgaWYgKG9rKSB7CisgICAgd29mZjI6OlNldEZpbGVDb250ZW50cyhv
dXRmaWxlbmFtZSwgb3V0cHV0LmJlZ2luKCksCisgICAgICAgIG91dHB1dC5iZWdpbigpICsgb3V0
LlNpemUoKSk7CiAgIH0KLQotICB3b2ZmMjo6U2V0RmlsZUNvbnRlbnRzKG91dGZpbGVuYW1lLCBv
dXRwdXQpOwotCi0gIHJldHVybiAwOworICByZXR1cm4gb2sgPyAwIDogMTsKIH0KLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2VuYy5jYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9lbmMuY2MKaW5kZXggNTI1NWFhNS4uZDEwMGFkNSAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2VuYy5jYworKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfZW5jLmNjCkBAIC0yMyw4ICsyMyw4
IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgIi4v
Y29tcHJlc3Nvci5oIgogI2luY2x1ZGUgIi4vYnVmZmVyLmgiCi0jaW5jbHVkZSAiLi9lbmNvZGUu
aCIKICNpbmNsdWRlICIuL2ZvbnQuaCIKICNpbmNsdWRlICIuL25vcm1hbGl6ZS5oIgogI2luY2x1
ZGUgIi4vcm91bmQuaCIKQEAgLTQ3LDYgKzQ3LDcgQEAgdXNpbmcgc3RkOjp2ZWN0b3I7CiBjb25z
dCBzaXplX3Qga1dvZmYySGVhZGVyU2l6ZSA9IDQ4OwogY29uc3Qgc2l6ZV90IGtXb2ZmMkVudHJ5
U2l6ZSA9IDIwOwogCisKIGJvb2wgQ29tcHJlc3MoY29uc3QgdWludDhfdCogZGF0YSwgY29uc3Qg
c2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgdWludDhfdCogcmVzdWx0LCB1aW50MzJfdCogcmVz
dWx0X2xlbiwKICAgICAgICAgICAgICAgYnJvdGxpOjpCcm90bGlQYXJhbXM6Ok1vZGUgbW9kZSwg
aW50IHF1YWxpdHkpIHsKQEAgLTEyMCw3ICsxMjEsNyBAQCBzaXplX3QgQ29tcHV0ZVdvZmYyTGVu
Z3RoKGNvbnN0IEZvbnRDb2xsZWN0aW9uJiBmb250X2NvbGxlY3Rpb24sCiAgIH0KIAogICAvLyBm
b3IgY29sbGVjdGlvbnMgb25seSwgY29sbGVjdGlvbiB0YWJsZXMKLSAgaWYgKGZvbnRfY29sbGVj
dGlvbi5mb250cy5zaXplKCkgPiAxKSB7CisgIGlmIChmb250X2NvbGxlY3Rpb24uZmxhdm9yID09
IGtUdGNGb250Rmxhdm9yKSB7CiAgICAgc2l6ZSArPSA0OyAgLy8gVUludDMyIFZlcnNpb24gb2Yg
VFRDIEhlYWRlcgogICAgIHNpemUgKz0gU2l6ZTI1NVVTaG9ydChmb250X2NvbGxlY3Rpb24uZm9u
dHMuc2l6ZSgpKTsgIC8vIDI1NVVJbnQxNiBudW1Gb250cwogCkBAIC0xNDcsMTQgKzE0OCw2IEBA
IHNpemVfdCBDb21wdXRlV29mZjJMZW5ndGgoY29uc3QgRm9udENvbGxlY3Rpb24mIGZvbnRfY29s
bGVjdGlvbiwKICAgcmV0dXJuIHNpemU7CiB9CiAKLXNpemVfdCBDb21wdXRlVFRGTGVuZ3RoKGNv
bnN0IHN0ZDo6dmVjdG9yPFRhYmxlPiYgdGFibGVzKSB7Ci0gIHNpemVfdCBzaXplID0gMTIgKyAx
NiAqIHRhYmxlcy5zaXplKCk7ICAvLyBzZm50IGhlYWRlcgotICBmb3IgKGNvbnN0IGF1dG8mIHRh
YmxlIDogdGFibGVzKSB7Ci0gICAgc2l6ZSArPSBSb3VuZDQodGFibGUuc3JjX2xlbmd0aCk7Ci0g
IH0KLSAgcmV0dXJuIHNpemU7Ci19Ci0KIHNpemVfdCBDb21wdXRlVW5jb21wcmVzc2VkTGVuZ3Ro
KGNvbnN0IEZvbnQmIGZvbnQpIHsKICAgLy8gc2ZudCBoZWFkZXIgKyBvZmZzZXQgdGFibGUKICAg
c2l6ZV90IHNpemUgPSAxMiArIDE2ICogZm9udC5udW1fdGFibGVzOwpAQCAtMTY4LDcgKzE2MSw3
IEBAIHNpemVfdCBDb21wdXRlVW5jb21wcmVzc2VkTGVuZ3RoKGNvbnN0IEZvbnQmIGZvbnQpIHsK
IH0KIAogc2l6ZV90IENvbXB1dGVVbmNvbXByZXNzZWRMZW5ndGgoY29uc3QgRm9udENvbGxlY3Rp
b24mIGZvbnRfY29sbGVjdGlvbikgewotICBpZiAoZm9udF9jb2xsZWN0aW9uLmZvbnRzLnNpemUo
KSA9PSAxKSB7CisgIGlmIChmb250X2NvbGxlY3Rpb24uZmxhdm9yICE9IGtUdGNGb250Rmxhdm9y
KSB7CiAgICAgcmV0dXJuIENvbXB1dGVVbmNvbXByZXNzZWRMZW5ndGgoZm9udF9jb2xsZWN0aW9u
LmZvbnRzWzBdKTsKICAgfQogICBzaXplX3Qgc2l6ZSA9IENvbGxlY3Rpb25IZWFkZXJTaXplKGZv
bnRfY29sbGVjdGlvbi5oZWFkZXJfdmVyc2lvbiwKQEAgLTI3OSwyMCArMjcyLDIyIEBAIGJvb2wg
Q29udmVydFRURlRvV09GRjIoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbmd0aCwKICAg
c3RkOjp2ZWN0b3I8dWludDhfdD4gY29tcHJlc3Npb25fYnVmKGNvbXByZXNzaW9uX2J1ZmZlcl9z
aXplKTsKICAgdWludDMyX3QgdG90YWxfY29tcHJlc3NlZF9sZW5ndGggPSBjb21wcmVzc2lvbl9i
dWZmZXJfc2l6ZTsKIAotICAvLyBDb2xsZWN0IGFsbCB0cmFuc2Zvcm1lZCBkYXRhIGludG8gb25l
IHBsYWNlLgorICAvLyBDb2xsZWN0IGFsbCB0cmFuc2Zvcm1lZCBkYXRhIGludG8gb25lIHBsYWNl
IGluIG91dHB1dCBvcmRlci4KICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gdHJhbnNmb3JtX2J1Zih0
b3RhbF90cmFuc2Zvcm1fbGVuZ3RoKTsKICAgc2l6ZV90IHRyYW5zZm9ybV9vZmZzZXQgPSAwOwog
ICBmb3IgKGNvbnN0IGF1dG8mIGZvbnQgOiBmb250X2NvbGxlY3Rpb24uZm9udHMpIHsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGkgOiBmb250LnRhYmxlcykgewotICAgICAgY29uc3QgRm9udDo6VGFi
bGUqIHRhYmxlID0gZm9udC5GaW5kVGFibGUoaS5zZWNvbmQudGFnIF4gMHg4MDgwODA4MCk7Ci0g
ICAgICBpZiAoaS5zZWNvbmQuSXNSZXVzZWQoKSkgY29udGludWU7Ci0gICAgICBpZiAoaS5zZWNv
bmQudGFnICYgMHg4MDgwODA4MCkgY29udGludWU7CisgICAgZm9yIChjb25zdCBhdXRvIHRhZyA6
IGZvbnQuT3V0cHV0T3JkZXJlZFRhZ3MoKSkgeworICAgICAgY29uc3QgRm9udDo6VGFibGUmIG9y
aWdpbmFsID0gZm9udC50YWJsZXMuYXQodGFnKTsKKyAgICAgIGlmIChvcmlnaW5hbC5Jc1JldXNl
ZCgpKSBjb250aW51ZTsKKyAgICAgIGlmICh0YWcgJiAweDgwODA4MDgwKSBjb250aW51ZTsKKyAg
ICAgIGNvbnN0IEZvbnQ6OlRhYmxlKiB0YWJsZV90b19zdG9yZSA9IGZvbnQuRmluZFRhYmxlKHRh
ZyBeIDB4ODA4MDgwODApOworICAgICAgaWYgKHRhYmxlX3RvX3N0b3JlID09IE5VTEwpIHRhYmxl
X3RvX3N0b3JlID0gJm9yaWdpbmFsOwogCi0gICAgICBpZiAodGFibGUgPT0gTlVMTCkgdGFibGUg
PSAmaS5zZWNvbmQ7Ci0gICAgICBTdG9yZUJ5dGVzKHRhYmxlLT5kYXRhLCB0YWJsZS0+bGVuZ3Ro
LAorICAgICAgU3RvcmVCeXRlcyh0YWJsZV90b19zdG9yZS0+ZGF0YSwgdGFibGVfdG9fc3RvcmUt
Pmxlbmd0aCwKICAgICAgICAgICAgICAgICAgJnRyYW5zZm9ybV9vZmZzZXQsICZ0cmFuc2Zvcm1f
YnVmWzBdKTsKICAgICB9CiAgIH0KKwogICAvLyBDb21wcmVzcyBhbGwgdHJhbnNmb3JtZWQgZGF0
YSBpbiBvbmUgc3RyZWFtLgogICBpZiAoIVdvZmYyQ29tcHJlc3ModHJhbnNmb3JtX2J1Zi5kYXRh
KCksIHRvdGFsX3RyYW5zZm9ybV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAmY29tcHJl
c3Npb25fYnVmWzBdLApAQCAtMzc3LDEzICszNzIsMTIgQEAgYm9vbCBDb252ZXJ0VFRGVG9XT0ZG
Mihjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoLAogICB9CiAgICpyZXN1bHRfbGVu
Z3RoID0gd29mZjJfbGVuZ3RoOwogCi0gIGNvbnN0IEZvbnQmIGZpcnN0X2ZvbnQgPSBmb250X2Nv
bGxlY3Rpb24uZm9udHNbMF07CiAgIHNpemVfdCBvZmZzZXQgPSAwOwogCiAgIC8vIHN0YXJ0IG9m
IHdvZmYyIGhlYWRlciAoaHR0cDovL3d3dy53My5vcmcvVFIvV09GRjIvI3dvZmYyMEhlYWRlcikK
ICAgU3RvcmVVMzIoa1dvZmYyU2lnbmF0dXJlLCAmb2Zmc2V0LCByZXN1bHQpOwotICBpZiAoZm9u
dF9jb2xsZWN0aW9uLmZvbnRzLnNpemUoKSA9PSAxKSB7Ci0gICAgU3RvcmVVMzIoZmlyc3RfZm9u
dC5mbGF2b3IsICZvZmZzZXQsIHJlc3VsdCk7CisgIGlmIChmb250X2NvbGxlY3Rpb24uZmxhdm9y
ICE9IGtUdGNGb250Rmxhdm9yKSB7CisgICAgU3RvcmVVMzIoZm9udF9jb2xsZWN0aW9uLmZvbnRz
WzBdLmZsYXZvciwgJm9mZnNldCwgcmVzdWx0KTsKICAgfSBlbHNlIHsKICAgICBTdG9yZVUzMihr
VHRjRm9udEZsYXZvciwgJm9mZnNldCwgcmVzdWx0KTsKICAgfQpAQCAtMzk0LDkgKzM4OCw5IEBA
IGJvb2wgQ29udmVydFRURlRvV09GRjIoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbmd0
aCwKICAgU3RvcmVVMzIoQ29tcHV0ZVVuY29tcHJlc3NlZExlbmd0aChmb250X2NvbGxlY3Rpb24p
LCAmb2Zmc2V0LCByZXN1bHQpOwogICBTdG9yZVUzMih0b3RhbF9jb21wcmVzc2VkX2xlbmd0aCwg
Jm9mZnNldCwgcmVzdWx0KTsgIC8vIHRvdGFsQ29tcHJlc3NlZFNpemUKIAotICAvLyBUT0RPKHVz
ZXIpOiBpcyBhbHdheXMgdGFraW5nIHRoaXMgZnJvbSB0aGUgZmlyc3QgdGFibGVzIGhlYWQgT0s/
Ci0gIC8vIGZvbnQgcmV2aXNpb24KLSAgU3RvcmVCeXRlcyhmaXJzdF9mb250LkZpbmRUYWJsZShr
SGVhZFRhYmxlVGFnKS0+ZGF0YSArIDQsIDQsICZvZmZzZXQsIHJlc3VsdCk7CisgIC8vIExldCdz
IGp1c3QgYWxsIGJlIHYxLjAKKyAgU3RvcmUxNigxLCAmb2Zmc2V0LCByZXN1bHQpOyAgLy8gbWFq
b3JWZXJzaW9uCisgIFN0b3JlMTYoMCwgJm9mZnNldCwgcmVzdWx0KTsgIC8vIG1pbm9yVmVyc2lv
bgogICBpZiAoY29tcHJlc3NlZF9tZXRhZGF0YV9idWZfbGVuZ3RoID4gMCkgewogICAgIFN0b3Jl
VTMyKHdvZmYyX2xlbmd0aCAtIGNvbXByZXNzZWRfbWV0YWRhdGFfYnVmX2xlbmd0aCwKICAgICAg
ICAgICAgICAmb2Zmc2V0LCByZXN1bHQpOyAgLy8gbWV0YU9mZnNldApAQCAtNDE4LDcgKzQxMiw3
IEBAIGJvb2wgQ29udmVydFRURlRvV09GRjIoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxl
bmd0aCwKICAgfQogCiAgIC8vIGZvciBjb2xsZWN0aW9ucyBvbmx5LCBjb2xsZWN0aW9uIHRhYmxl
IGRpcmVjdG9yeQotICBpZiAoZm9udF9jb2xsZWN0aW9uLmZvbnRzLnNpemUoKSA+IDEpIHsKKyAg
aWYgKGZvbnRfY29sbGVjdGlvbi5mbGF2b3IgPT0ga1R0Y0ZvbnRGbGF2b3IpIHsKICAgICBTdG9y
ZVUzMihmb250X2NvbGxlY3Rpb24uaGVhZGVyX3ZlcnNpb24sICZvZmZzZXQsIHJlc3VsdCk7CiAg
ICAgU3RvcmUyNTVVU2hvcnQoZm9udF9jb2xsZWN0aW9uLmZvbnRzLnNpemUoKSwgJm9mZnNldCwg
cmVzdWx0KTsKICAgICBmb3IgKGNvbnN0IEZvbnQmIGZvbnQgOiBmb250X2NvbGxlY3Rpb24uZm9u
dHMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9vdXQu
Y2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmNjCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ODIzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmNjCkBAIC0wLDAgKzEsNzMgQEAKKy8v
IENvcHlyaWdodCAyMDE0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8g
TGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNl
bnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKKy8vCisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAK
Ky8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGlu
IHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk
aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBT
ZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlz
c2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vCisvLyBPdXRw
dXQgYnVmZmVyIGZvciBXT0ZGMiBkZWNvbXByZXNzaW9uLgorCisjaW5jbHVkZSAiLi93b2ZmMl9v
dXQuaCIKKworbmFtZXNwYWNlIHdvZmYyIHsKKworV09GRjJTdHJpbmdPdXQ6OldPRkYyU3RyaW5n
T3V0KHN0cmluZyogYnVmKQorICA6IGJ1Zl8oYnVmKSwKKyAgICBtYXhfc2l6ZV8oa0RlZmF1bHRN
YXhTaXplKSwKKyAgICBvZmZzZXRfKDApIHt9CisKK2Jvb2wgV09GRjJTdHJpbmdPdXQ6OldyaXRl
KGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IG4pIHsKKyAgcmV0dXJuIFdyaXRlKGJ1Ziwgb2Zmc2V0
Xywgbik7Cit9CisKK2Jvb2wgV09GRjJTdHJpbmdPdXQ6OldyaXRlKGNvbnN0IHZvaWQgKmJ1Ziwg
c2l6ZV90IG9mZnNldCwgc2l6ZV90IG4pIHsKKyAgaWYgKG9mZnNldCA+IG1heF9zaXplXyB8fCBu
ID4gbWF4X3NpemVfIC0gb2Zmc2V0KSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGlmIChv
ZmZzZXQgPT0gYnVmXy0+c2l6ZSgpKSB7CisgICAgYnVmXy0+YXBwZW5kKHN0YXRpY19jYXN0PGNv
bnN0IGNoYXIqPihidWYpLCBuKTsKKyAgfSBlbHNlIHsKKyAgICBpZiAob2Zmc2V0ICsgbiA+IGJ1
Zl8tPnNpemUoKSkgeworICAgICAgYnVmXy0+YXBwZW5kKG9mZnNldCArIG4gLSBidWZfLT5zaXpl
KCksIDApOworICAgIH0KKyAgICBidWZfLT5yZXBsYWNlKG9mZnNldCwgbiwgc3RhdGljX2Nhc3Q8
Y29uc3QgY2hhcio+KGJ1ZiksIG4pOworICB9CisgIG9mZnNldF8gPSBzdGQ6Om1heChvZmZzZXRf
LCBvZmZzZXQgKyBuKTsKKworICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXT0ZGMlN0cmluZ091
dDo6U2V0TWF4U2l6ZShzaXplX3QgbWF4X3NpemUpIHsKKyAgbWF4X3NpemVfID0gbWF4X3NpemU7
CisgIGlmIChvZmZzZXRfID4gbWF4X3NpemVfKSB7CisgICAgb2Zmc2V0XyA9IG1heF9zaXplXzsK
KyAgfQorfQorCitXT0ZGMk1lbW9yeU91dDo6V09GRjJNZW1vcnlPdXQodWludDhfdCogYnVmLCBz
aXplX3QgYnVmX3NpemUpCisgIDogYnVmXyhidWYpLAorICAgIGJ1Zl9zaXplXyhidWZfc2l6ZSks
CisgICAgb2Zmc2V0XygwKSB7fQorCitib29sIFdPRkYyTWVtb3J5T3V0OjpXcml0ZShjb25zdCB2
b2lkICpidWYsIHNpemVfdCBuKSB7CisgIHJldHVybiBXcml0ZShidWYsIG9mZnNldF8sIG4pOwor
fQorCitib29sIFdPRkYyTWVtb3J5T3V0OjpXcml0ZShjb25zdCB2b2lkICpidWYsIHNpemVfdCBv
ZmZzZXQsIHNpemVfdCBuKSB7CisgIGlmIChvZmZzZXQgPiBidWZfc2l6ZV8gfHwgbiA+IGJ1Zl9z
aXplXyAtIG9mZnNldCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBzdGQ6Om1lbWNweShi
dWZfICsgb2Zmc2V0LCBidWYsIG4pOworICBvZmZzZXRfID0gc3RkOjptYXgob2Zmc2V0Xywgb2Zm
c2V0ICsgbik7CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIHdvZmYyCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYzk1NmFmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L3dvZmYyL3NyYy93b2ZmMl9vdXQuaApAQCAtMCwwICsxLDExNCBAQAorLy8gQ29weXJpZ2h0
IDIwMTYgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1
bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8v
IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUg
TGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8K
Ky8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVu
bGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywg
c29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVk
IG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9O
UyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGlj
ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQK
Ky8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8KKy8vIE91dHB1dCBidWZmZXIg
Zm9yIFdPRkYyIGRlY29tcHJlc3Npb24uCisKKy8vIENvcHlyaWdodCAyMDE2IEdvb2dsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM
aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2Ug
dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyBodHRwOi8vd3d3LmFw
YWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkg
YXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0
cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJB
U0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVp
dGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVj
aWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1
bmRlciB0aGUgTGljZW5zZS4KKy8vCisvLyBPdXRwdXQgYnVmZmVyIGZvciBXT0ZGMiBkZWNvbXBy
ZXNzaW9uLgorCisjaWZuZGVmIFdPRkYyX1dPRkYyX09VVF9IXworI2RlZmluZSBXT0ZGMl9XT0ZG
Ml9PVVRfSF8KKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2lu
Y2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSAiLi9wb3J0LmgiCisK
K25hbWVzcGFjZSB3b2ZmMiB7CisKKy8vIFN1Z2dlc3RlZCBtYXggc2l6ZSBmb3Igb3V0cHV0Lgor
Y29uc3Qgc2l6ZV90IGtEZWZhdWx0TWF4U2l6ZSA9IDMwICogMTAyNCAqIDEwMjQ7CisKK3VzaW5n
IHN0ZDo6c3RyaW5nOworCisKKy8qKgorICogT3V0cHV0IGludGVyZmFjZSBmb3IgdGhlIHdvZmYy
IGRlY29kaW5nLgorICoKKyAqIFdyaXRlcyB0byBhcmJpdHJhcnkgb2Zmc2V0cyBhcmUgc3VwcG9y
dGVkIHRvIGZhY2lsaXRhdGUgdXBkYXRpbmcgb2Zmc2V0CisgKiB0YWJsZSBhbmQgY2hlY2tzdW1z
IGFmdGVyIHRhYmxlcyBhcmUgcmVhZHkuIFJlYWRpbmcgdGhlIGN1cnJlbnQgc2l6ZSBpcworICog
c3VwcG9ydGVkIHNvIGEgJ2xvY2EnIHRhYmxlIGNhbiBiZSBidWlsdCB1cCB3aGlsZSB3cml0aW5n
IGdseXBocy4KKyAqCisgKiBCeSBkZWZhdWx0IGxpbWl0cyBzaXplIHRvIGtEZWZhdWx0TWF4U2l6
ZS4KKyAqLworY2xhc3MgV09GRjJPdXQgeworIHB1YmxpYzoKKyAgdmlydHVhbCB+V09GRjJPdXQo
dm9pZCkge30KKworICAvLyBBcHBlbmQgbiBieXRlcyBvZiBkYXRhIGZyb20gYnVmLgorICAvLyBS
ZXR1cm4gdHJ1ZSBpZiBhbGwgd3JpdHRlbiwgZmFsc2Ugb3RoZXJ3aXNlLgorICB2aXJ0dWFsIGJv
b2wgV3JpdGUoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbikgPSAwOworCisgIC8vIFdyaXRlIG4g
Ynl0ZXMgb2YgZGF0YSBmcm9tIGJ1ZiBhdCBvZmZzZXQuCisgIC8vIFJldHVybiB0cnVlIGlmIGFs
bCB3cml0dGVuLCBmYWxzZSBvdGhlcndpc2UuCisgIHZpcnR1YWwgYm9vbCBXcml0ZShjb25zdCB2
b2lkICpidWYsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBuKSA9IDA7CisKKyAgdmlydHVhbCBzaXpl
X3QgU2l6ZSgpID0gMDsKK307CisKKy8qKgorICogRXhwYW5kaW5nIG1lbW9yeSBibG9jayBmb3Ig
d29mZjIgb3V0LiBCeSBkZWZhdWx0IGxpbWl0ZWQgdG8ga0RlZmF1bHRNYXhTaXplLgorICovCitj
bGFzcyBXT0ZGMlN0cmluZ091dCA6IHB1YmxpYyBXT0ZGMk91dCB7CisgcHVibGljOgorICAvLyBD
cmVhdGUgYSB3cml0ZXIgdGhhdCB3cml0ZXMgaXRzIGRhdGEgdG8gYnVmLgorICAvLyBidWYtPnNp
emUoKSB3aWxsIGdyb3cgdG8gYXQgbW9zdCBtYXhfc2l6ZQorICAvLyBidWYgbWF5IGJlIHNpemVk
IChlLmcuIHVzaW5nIEVzdGltYXRlV09GRjJGaW5hbFNpemUpIG9yIGVtcHR5LgorICBleHBsaWNp
dCBXT0ZGMlN0cmluZ091dChzdHJpbmcqIGJ1Zik7CisKKyAgYm9vbCBXcml0ZShjb25zdCB2b2lk
ICpidWYsIHNpemVfdCBuKSBvdmVycmlkZTsKKyAgYm9vbCBXcml0ZShjb25zdCB2b2lkICpidWYs
IHNpemVfdCBvZmZzZXQsIHNpemVfdCBuKSBvdmVycmlkZTsKKyAgc2l6ZV90IFNpemUoKSBvdmVy
cmlkZSB7IHJldHVybiBvZmZzZXRfOyB9CisgIHNpemVfdCBNYXhTaXplKCkgeyByZXR1cm4gbWF4
X3NpemVfOyB9CisgIHZvaWQgU2V0TWF4U2l6ZShzaXplX3QgbWF4X3NpemUpOworIHByaXZhdGU6
CisgIHN0cmluZyogYnVmXzsKKyAgc2l6ZV90IG1heF9zaXplXzsKKyAgc2l6ZV90IG9mZnNldF87
Cit9OworCisvKioKKyAqIEZpeGVkIG1lbW9yeSBibG9jayBmb3Igd29mZjIgb3V0LgorICovCitj
bGFzcyBXT0ZGMk1lbW9yeU91dCA6IHB1YmxpYyBXT0ZGMk91dCB7CisgcHVibGljOgorICAvLyBD
cmVhdGUgYSB3cml0ZXIgdGhhdCB3cml0ZXMgaXRzIGRhdGEgdG8gYnVmLgorICBXT0ZGMk1lbW9y
eU91dCh1aW50OF90KiBidWYsIHNpemVfdCBidWZfc2l6ZSk7CisKKyAgYm9vbCBXcml0ZShjb25z
dCB2b2lkICpidWYsIHNpemVfdCBuKSBvdmVycmlkZTsKKyAgYm9vbCBXcml0ZShjb25zdCB2b2lk
ICpidWYsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBuKSBvdmVycmlkZTsKKyAgc2l6ZV90IFNpemUo
KSBvdmVycmlkZSB7IHJldHVybiBvZmZzZXRfOyB9CisgcHJpdmF0ZToKKyAgdWludDhfdCogYnVm
XzsKKyAgc2l6ZV90IGJ1Zl9zaXplXzsKKyAgc2l6ZV90IG9mZnNldF87Cit9OworCit9IC8vIG5h
bWVzcGFjZSB3b2ZmMgorCisjZW5kaWYgIC8vIFdPRkYyX1dPRkYyX09VVF9IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDgwYmU2MTAuLjg1YjRmM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxNi0w
OS0yNyAgS2hhbGVkIEhvc255ICA8a2hhbGVkaG9zbnlAZWdsdWcub3JnPgorCisgICAgICAgIFVz
ZSBuZXcgd29mZjIgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjI2MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUZXN0OiBmYXN0L3RleHQvd29mZjItdG90YWxzZm50c2l6ZS5odG1sCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXT0ZGMlZlY3Rvck91dDo6V09GRjJWZWN0b3JPdXQpOgorICAgICAgICAoV2ViQ29yZTo6
V09GRjJWZWN0b3JPdXQ6OldyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldPRkYyVmVjdG9yT3V0
OjpTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRXT0ZGVG9TZm50KToKKwogMjAxNi0w
OS0yNyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgW0ZldGNo
IEFQSV0gUmVtb3ZlIFJlYWRhYmxlU3RyZWFtU291cmNlIGZpcnN0UmVhZENhbGxiYWNrCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAK
aW5kZXggNDIwZmE0OC4uYzIzMjNjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcApAQCAtOTAsNiArOTAsNDIgQEAgYm9vbCBp
c1dPRkYoU2hhcmVkQnVmZmVyJiBidWZmZXIpCiAjZW5kaWYKIH0KIAorI2lmIFVTRShXT0ZGMikK
K2NsYXNzIFdPRkYyVmVjdG9yT3V0IDogcHVibGljIHdvZmYyOjpXT0ZGMk91dCB7CitwdWJsaWM6
CisgICAgV09GRjJWZWN0b3JPdXQoVmVjdG9yPGNoYXI+JiB2ZWN0b3IpCisgICAgICAgIDogbV92
ZWN0b3IodmVjdG9yKQorICAgIHsgfQorCisgICAgYm9vbCBXcml0ZShjb25zdCB2b2lkKiBkYXRh
LCBzaXplX3Qgbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghbV92ZWN0b3IudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KG1fdmVjdG9yLnNpemUoKSArIG4pKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRh
dGEpLCBuKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBXcml0ZShj
b25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgbikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmICghbV92ZWN0b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5KG9mZnNldCArIG4pKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAob2Zmc2V0ICsgbiA+IG1fdmVj
dG9yLnNpemUoKSkKKyAgICAgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShvZmZzZXQgKyBuKTsKKyAg
ICAgICAgbV92ZWN0b3IucmVtb3ZlKG9mZnNldCwgbik7CisgICAgICAgIG1fdmVjdG9yLmluc2Vy
dChvZmZzZXQsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwgbik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHNpemVfdCBTaXplKCkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3ZlY3Rvci5zaXplKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFZl
Y3RvcjxjaGFyPiYgbV92ZWN0b3I7Cit9OworI2VuZGlmCisKIGJvb2wgY29udmVydFdPRkZUb1Nm
bnQoU2hhcmVkQnVmZmVyJiB3b2ZmLCBWZWN0b3I8Y2hhcj4mIHNmbnQpCiB7CiAgICAgQVNTRVJU
X0FSRyhzZm50LCBzZm50LmlzRW1wdHkoKSk7CkBAIC0xMTEsOSArMTQ3LDkgQEAgYm9vbCBjb252
ZXJ0V09GRlRvU2ZudChTaGFyZWRCdWZmZXImIHdvZmYsIFZlY3RvcjxjaGFyPiYgc2ZudCkKIAog
ICAgICAgICBpZiAoIXNmbnQudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNmbnRTaXplKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgc2ZudC5yZXNpemUoc2ZudFNpemUpOwogCi0gICAg
ICAgIHJldHVybiB3b2ZmMjo6Q29udmVydFdPRkYyVG9UVEYocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oc2ZudC5kYXRhKCkpLCBzZm50LnNpemUoKSwgd29mZkRhdGEsIHdvZmZTaXplKTsKKyAg
ICAgICAgV09GRjJWZWN0b3JPdXQgb3V0KHNmbnQpOworICAgICAgICByZXR1cm4gd29mZjI6OkNv
bnZlcnRXT0ZGMlRvVFRGKHdvZmZEYXRhLCB3b2ZmU2l6ZSwgJm91dCk7CiAgICAgfQogI2VuZGlm
CiAKLS0gCjIuMTAuMAoK
</data>
<flag name="review"
          id="313269"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290072</attachid>
            <date>2016-09-28 03:37:37 -0700</date>
            <delta_ts>2016-09-28 05:32:15 -0700</delta_ts>
            <desc>Patch, v5</desc>
            <filename>0001-GTK-Update-woff2-decoder.patch</filename>
            <type>text/plain</type>
            <size>94430</size>
            <attacher name="Khaled Hosny">dr.khaled.hosny</attacher>
            
              <data encoding="base64">RnJvbSBkM2EzODFiNjUyYzBhZjI1NGUzMzRhM2YyNTkzNmU5NDZiN2NiMWVjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLaGFsZWQgSG9zbnkgPGtoYWxlZGhvc255QGVnbHVnLm9yZz4K
RGF0ZTogV2VkLCAyOCBTZXAgMjAxNiAxMTo0MToyMiArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFtH
VEtdIFVwZGF0ZSB3b2ZmMiBkZWNvZGVyCgotLS0KIExheW91dFRlc3RzL0NoYW5nZUxvZyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNSArCiAuLi4vdGV4dC9yZXNvdXJjZXMvaGVh
ZGVyLXRvdGFsc2ZudHNpemUtMDAxLnR0ZiAgICB8ICBCaW4gMCAtPiAxODU2IGJ5dGVzCiAuLi4v
dGV4dC9yZXNvdXJjZXMvaGVhZGVyLXRvdGFsc2ZudHNpemUtMDAxLndvZmYyICB8ICBCaW4gMCAt
PiA5ODAgYnl0ZXMKIC4uLi9mYXN0L3RleHQvd29mZjItdG90YWxzZm50c2l6ZS1leHBlY3RlZC5o
dG1sICAgIHwgICAyOSArCiBMYXlvdXRUZXN0cy9mYXN0L3RleHQvd29mZjItdG90YWxzZm50c2l6
ZS5odG1sICAgICB8ICAgMjkgKwogLi4uL3BsYXRmb3JtL2lvcy1zaW11bGF0b3IvVGVzdEV4cGVj
dGF0aW9ucyAgICAgICAgfCAgICAyICsKIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhw
ZWN0YXRpb25zICAgICAgICAgIHwgICAgMiArCiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVz
dEV4cGVjdGF0aW9ucyAgICAgICAgICB8ICAgIDIgKwogU291cmNlL1RoaXJkUGFydHkvQ2hhbmdl
TG9nICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDI5ICsKIFNvdXJjZS9UaGlyZFBhcnR5L3dv
ZmYyL0NNYWtlTGlzdHMudHh0ICAgICAgICAgICAgIHwgICAgMSArCiBTb3VyY2UvVGhpcmRQYXJ0
eS93b2ZmMi9SRUFETUUud2Via2l0ICAgICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9UaGly
ZFBhcnR5L3dvZmYyL3NyYy9maWxlLmggICAgICAgICAgICAgICAgIHwgICAxNiArLQogU291cmNl
L1RoaXJkUGFydHkvd29mZjIvc3JjL2ZvbnQuY2MgICAgICAgICAgICAgICAgfCAgIDIzICstCiBT
b3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvZm9udC5oICAgICAgICAgICAgICAgICB8ICAgIDEg
KwogU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL2dseXBoLmNjICAgICAgICAgICAgICAgfCAg
ICA2ICstCiBTb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvc3RvcmVfYnl0ZXMuaCAgICAgICAg
ICB8ICAgIDMgKy0KIFNvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy90cmFuc2Zvcm0uY2MgICAg
ICAgICAgIHwgICAgMiArLQogU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2NvbW1v
bi5jYyAgICAgICAgfCAgIDEzICstCiBTb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJf
Y29tcHJlc3MuY2MgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93
b2ZmMl9kZWMuY2MgICAgICAgICAgIHwgMTA0MSArKysrKysrKysrLS0tLS0tLS0tLQogU291cmNl
L1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2RlYy5oICAgICAgICAgICAgfCAgICA4ICsKIFNv
dXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9kZWNvbXByZXNzLmNjICAgIHwgICAzMCAr
LQogU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2VuYy5jYyAgICAgICAgICAgfCAg
IDQ0ICstCiBTb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmNjICAgICAgICAg
ICB8ICAgNzMgKysKIFNvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9vdXQuaCAgICAg
ICAgICAgIHwgIDExNCArKysKIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAxNSArCiAuLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZG
RmlsZUZvcm1hdC5jcHAgICB8ICAgNDAgKy0KIDI3IGZpbGVzIGNoYW5nZWQsIDkyNSBpbnNlcnRp
b25zKCspLCA2MTcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMv
ZmFzdC90ZXh0L3Jlc291cmNlcy9oZWFkZXItdG90YWxzZm50c2l6ZS0wMDEudHRmCiBjcmVhdGUg
bW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC90ZXh0L3Jlc291cmNlcy9oZWFkZXItdG90YWxz
Zm50c2l6ZS0wMDEud29mZjIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L3Rl
eHQvd29mZjItdG90YWxzZm50c2l6ZS1leHBlY3RlZC5odG1sCiBjcmVhdGUgbW9kZSAxMDA2NDQg
TGF5b3V0VGVzdHMvZmFzdC90ZXh0L3dvZmYyLXRvdGFsc2ZudHNpemUuaHRtbAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9vdXQuY2MKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfb3V0LmgKCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggMzMyYzYwZC4uZTI2YmY2ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE2LTA5LTI4
ICBLaGFsZWQgSG9zbnkgIDxraGFsZWRob3NueUBlZ2x1Zy5vcmc+CisKKyAgICAgICAgVXNlIG5l
dyB3b2ZmMiBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MjYwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogZmFzdC90ZXh0L3Jlc291cmNlcy9oZWFkZXItdG90YWxzZm50c2l6ZS0wMDEudHRmOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L3RleHQvcmVzb3VyY2VzL2hlYWRlci10b3RhbHNmbnRzaXpl
LTAwMS53b2ZmMjogQWRkZWQuCisgICAgICAgICogZmFzdC90ZXh0L3dvZmYyLXRvdGFsc2ZudHNp
emUtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC90ZXh0L3dvZmYyLXRvdGFs
c2ZudHNpemUuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zLXNpbXVsYXRvci9U
ZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25z
OgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDE2LTA5LTI3
ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgUkVH
UkVTU0lPTihyMjA1ODgzKTogTGV0dGVycHJlc3NlZCB0ZXh0IGlzIGludmlzaWJsZQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L3Jlc291cmNlcy9oZWFkZXItdG90YWxzZm50c2l6
ZS0wMDEudHRmIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L3Jlc291cmNlcy9oZWFkZXItdG90YWxz
Zm50c2l6ZS0wMDEudHRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1YWFhYjIxYWQ0YTEzZGVhZjY0NmQzMDliOGUx
YmFiMmMzMTc5MDUKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDE4NTYKemNtY0lsWiVrV042I3U+
VXkrO1dNSUI3TmZlWjt2JWd8ME5oX0B7fChiUjttXmo3cTE4VnUzO3QrNlNlT1ckN1g7CnoqKW9S
NHNVS0o+T0krMFdYRikkS3ZjLVZ6aX1OM1RhR0RzQ1ZNZ01uJD5LRHxkRH5wRG89ZXtsYmE4KDF5
eGV6dwp6PWlHRDdKQD8lNj9zSSMrWmUoSCVYNXtUfnh3TUlrYnR3U1RmWFZKfCt2WXJRVihjWDAx
PTJtJDc0aT9fVUZqbFYKekUrX2QpRnlRWXRKLVlNfkFtQGBAOVZBNm8oeFF7eExofE5kRDd4Pj9a
fTE3cGdDeXNMe1FDd1dka0QmN15pc3FBCnpQfmc1X0tEJEtuNW41d3ZQIz16XyZjWD5+WGYmQCRr
WXp9Y2w8I3g5VDs5Tk5sb0c3aTZYK2NvQEpFRWNFUmw7dQp6cCgjO2hQODc+T1BaazR+PkV1QyRT
I3FabXZ6dTclP0ohR3s/ZTJTcHlDKGNLdXxwJWsyNCQtcjNIYio9TDF8enMKekRqfU4pbjVaaDko
I3R0SF9heHUyejBJLXwpfWZ4XyNFej1HRlg+VkU5UHQmOHZPSHZDPExuNVZWQVh0cisxUDFUCnp2
OzJ4JHEmaW5UKTxtMiZAdE1SbEE2Tk0kbEclOURMd01RNl9nWCpaYHhLdDc9NGdvJGNIWVY9bUtJ
cUMlY3hyOQp6NntZPEIqcChIaEJnVz9BVGk2KmpuYSQ1d1c5LWQlUXdEIUE9fkE5aXh4UmNeYVlk
ZmNKJXh2M1kkYHNhSFUoIWMKenlrMHVYRUREUk0tfGBfUGFXJmEmKXlFRFdJeHh+UF5JIyMqYjM5
VTN7JFZyUStGSHNzYFFHWWlENSYjM1I9MnRPCnpPVitUekIqdEhldDAkajc5elN2UlJMQFVeJT1X
X352d1lZODElTFNLUWwzNWteejJzITdlMUk8eXU3ZkRYQnt0egp6dnIrWXJVd04wNlhGYzk+ZUBT
ZnVpfFc8NjdNQGtnN1MzNTJfKHV2S1FqMyZsNkNNOSEyMDQ/SFlWdSR7OWVpZXcKemx7IVhOdTFt
K0RQJWotZD9JcFE2Jjd+KmRsdGptX0NwemlCczh0VUtxO3ReVkY8bmNrKVphZ1gxbkt9SD17TTZn
CnpWazhvb2padWBJTGtucXlSU3slM2grRjZ9NSFjez9DbmRmbDFFclF5YkUoc1k3cGI4bFBWWT1L
dD81TFpUaG84RAp6eF4qMDNBdXwwdGk1LWVIWGd1KSFMdnRPdTRjOUdaUTRpcUw7PTVqMzx6PEsz
KDRHMy1HSHA2ZnZVeDJJYEs7RDIKekdaV31Xd2BGPjVaXkJLR0VOVXIrdSZ7OGwwXkpBbD5SYi1x
RzMrSldNdzt8YU9+QGNBam07PVF6SmNYK0hWUmVJCnpZM05ubGYmQil5ej1yMzwzQ1dxSERacn0r
SFgjU3wxfiNKc3BCcUBsN0FlRVAzWFZ3PzIzRlZVRWh2fWZIKFZhWgp6ZztIc0VJMmBxJmxqPzdC
VSRxQSEhK207S09JdnhgRz4wUCVnTDw/fTUwOG9vZCk0OyhraVMybU18PG84ZVZ0Q3kKekk0ZiZ2
dEYpYnM/VHN5TiYrZiluP0BkRGMwLVl7QjkzOXF0ZFpmUUUrXmctMT1wJSNoIUEodSpmKDk9Rjcp
RiVQCnpqI2JTYmw2eF9OMHIoTjJ5VXRGbkUxcjZeTFB3WnA+KHsoKl9AK0g4dStqSSU4dmt6OVA3
eCFOTEVtYjBaTnJLbAp6dns3RFNfNFJvSyR1ZiRyUnJedHpQdFZ5PWgzJUFFaTFPfkluOEshcXZM
QiR4b3p3dGdBOW11RXM2ajIrWVNAV0oKenc5e3l6VDZuT1ZQJUJsI040fWpAMzk7OEc8KXg4RXJ3
c2NrUE05akFWSFpne1JmdjlEOyhIKVV5KGopbHxELTx3CkRgMilMKwoKbGl0ZXJhbCAwCkhjbVY/
ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L3Jlc291cmNlcy9oZWFk
ZXItdG90YWxzZm50c2l6ZS0wMDEud29mZjIgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvcmVzb3Vy
Y2VzL2hlYWRlci10b3RhbHNmbnRzaXplLTAwMS53b2ZmMgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Mzg1NjA1MThi
MzRhOTA5MDIyMjIzMDgxNTU3NWU3MTc1NjIzMGNjCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA5
ODAKemNtVjtfMTF0UEBQZXc5TlI4JnNAMDBZemoyPjx7OTAwNG1pMDBXRXcwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCnowMDAwRGdmMGVQMEQpISFIVWNDQTVDakdWZyU8fVA4PTN9RGxuUEVsX0gp
NnUpeGMmRUxnKXA5S19YS01TTGpaKgp6cUIhXj05LWhBK2I/JHFBcyoocFFaN2s5dEhtcmZ5N0U2
YjBYZnJwfnd3STF4VXd1Xn57N3tReDdDSSRDWXV4dTwKeiNxSmR8M2tuRExpJmlEQ1cpQ2dBYm80
fHBAdGU1akc2e1lHR1Q8b0ZzP2FyNmQ0Zz5eOTk0bT9iPns8fkBsMGV4CnotY3AmSG9BNFF7THM1
dWA9N1ZVVykxeldwQklVK0s7PCVSJHtIWElvSl5rcDtLWUVKeSpGQio4YE9pS0E8I21zSwp6PntJ
dyYqTU4mPzlUSk1GNW16Q08kTGF7X3lAI0YhNUo0RFk7RkZNS3J8bi1NQlYpKkk7Y1cqPTBALXYy
OGxfX3QKek9TdT89TXt2fnFMVmhnfGRTTGBjITNoUFNUZjdAd18tbTtLd1RvWkd1KilGP2NkO3c2
SHlgU1NsQSVtb2pRZEFiCnplaHtXRz1kcCNMNnFWNm93Y3MyQm1NQD16RDJPXmZNTjRmdyliVmNL
JlpZeTdFO29ZeGwje34hT2IyWFQ5d0xmIQp6VG9DRHxTan5TK2c2Y0E+VzdMTl9WOUR9WThkOT9C
KStYKEpBViMycktFenRXZSYpaU4+WWt5JiZjXklycDZWIVAKejxFTHdKSlJGUnB2X1Q8eFRlZ1Jx
VFNCVXZmendVIVh3Jk16KzJ3VEled1E8NDQodXJVc3QmeU9QZUpUaWBCbjcyCnpxbTVFVyVsNiQ/
eUxJZnkpMztad1FGNXUpYSVpSWVlXz1qQGw0JWo8VENTfFhRfkxReDFXSWJkbEBrbUk7OH12VAp6
UkQoPmcqe3hxSEdkQG5hSnwjX0swOTBKSTBBS1BvOXg1U1NyNChTeG9GeHZLT19Qe3xfKn1oQFda
dnI2Yzw9c0cKekAqVnZrQWlrdGA9bSpIaT0qRUM7b0lwMztKVyNHJkxPO15qZV9qWVB5eGZ1UDdS
cE9LTVRQWm4tdkpoVWZPMUhyCnpWfGg9b3tNVm1AKndXWVhvYlRZYU45Nn4mOVQ7cXo/cHlpdWJQ
aWJwIU14MzFRTmcrQ0olXlA9bm1GQUlhb1BQZwp6MV5ie3R0cnI0PjhuezRHclV1QSpyOHxwc3B1
ez44REFuWWhGNHlXYTRzdWM5Pi0yU2pxfUQ0U1RrOzFBcW09PEEKejklazhEOGFHe1R4PnBOXlkh
T2kjRlFGa2g0WWVNS2xDN25ySWg+N24pVFBlJnZpa2J8NnluSVI+VWJHWURHYnJnCnopb3RuNm9I
UHdUYVE9c0V5PXNIfipfYmZmXzN8dXIzMjEqY153a2w5SSVZMWVQIT1JQUdZZENjQldESmNQVHJT
TQp6YkZlcClESmRnbEw9T2RTTVVIUUtYM2oyRjQpKENNYlZEMXUpaUllJTJVbkI0aEM2dnE8P3Yr
ZWpCTCEoeDZQQHgKelI+bi18aGNnKmAwU0MmN15oN0deOG1iflM5ZXAhbjxZNGRXMGAobzdaTEk3
cXB1RHEjbjxFYlJ8SSM3fTAwMDJBCkNYVTdCcAoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L3dvZmYyLXRvdGFsc2ZudHNpemUtZXhwZWN0
ZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC93b2ZmMi10b3RhbHNmbnRzaXplLWV4cGVj
dGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBiMGI2NgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC93b2ZmMi10b3RhbHNmbnRzaXpl
LWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwyOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPHN0eWxlPgorQGZvbnQtZmFjZSB7CisgICAgZm9udC1mYW1pbHk6ICJ3ZWJmb250
IjsKKyAgICBzcmM6IHVybCgicmVzb3VyY2VzL2hlYWRlci10b3RhbHNmbnRzaXplLTAwMS50dGYi
KSBmb3JtYXQoInRydWV0eXBlIik7Cit9CisjY29udGFpbmVyIHsKKwl3aWR0aDogMTAwcHg7CisJ
aGVpZ2h0OiAzOHB4OworCXBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBvdmVyZmxvdzogaGlkZGVu
OworfQorI3Rlc3QgeworICAgIGZvbnQ6IDQxcHggIndlYmZvbnQiOworICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKKyAgICB3aWR0aDogNDFweDsKKyAgICBoZWlnaHQ6IDQxcHg7CisgICAgbGVmdDog
LTFweDsKKyAgICB0b3A6IC0xcHg7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CitUaGlz
IHRlc3QgbWFrZXMgc3VyZSBXT0ZGMiByZW5kZXJzIGFzIGV4cGVjdGVkLiBUaGUgdGVzdCBwYXNz
ZXMgaWYgeW91IHNlZSB0aGUgd29yZCBQQVNTIGJlbG93LgorPGRpdiBpZD0iY29udGFpbmVyIj48
ZGl2IGlkPSJ0ZXN0Ij5QPC9kaXY+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L3RleHQvd29mZjItdG90YWxzZm50c2l6ZS5odG1sIGIvTGF5b3V0
VGVzdHMvZmFzdC90ZXh0L3dvZmYyLXRvdGFsc2ZudHNpemUuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5lMzRjYjA3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC90ZXh0L3dvZmYyLXRvdGFsc2ZudHNpemUuaHRtbApAQCAtMCwwICsxLDI5IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CitAZm9udC1mYWNlIHsKKyAg
ICBmb250LWZhbWlseTogIndlYmZvbnQiOworICAgIHNyYzogdXJsKCJyZXNvdXJjZXMvaGVhZGVy
LXRvdGFsc2ZudHNpemUtMDAxLndvZmYyIikgZm9ybWF0KCJ3b2ZmMiIpOworfQorI2NvbnRhaW5l
ciB7CisJd2lkdGg6IDEwMHB4OworCWhlaWdodDogMzhweDsKKwlwb3NpdGlvbjogcmVsYXRpdmU7
CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKK30KKyN0ZXN0IHsKKyAgICBmb250OiA0MXB4ICJ3ZWJm
b250IjsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgd2lkdGg6IDQxcHg7CisgICAgaGVp
Z2h0OiA0MXB4OworICAgIGxlZnQ6IC0xcHg7CisgICAgdG9wOiAtMXB4OworfQorPC9zdHlsZT4K
KzwvaGVhZD4KKzxib2R5PgorVGhpcyB0ZXN0IG1ha2VzIHN1cmUgV09GRjIgcmVuZGVycyBhcyBl
eHBlY3RlZC4gVGhlIHRlc3QgcGFzc2VzIGlmIHlvdSBzZWUgdGhlIHdvcmQgUEFTUyBiZWxvdy4K
KzxkaXYgaWQ9ImNvbnRhaW5lciI+PGRpdiBpZD0idGVzdCI+UDwvZGl2PjwvZGl2PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLXNpbXVsYXRv
ci9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLXNpbXVsYXRvci9U
ZXN0RXhwZWN0YXRpb25zCmluZGV4IDZkNDhmNTIuLjM2NDY2ZDIgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL2lvcy1zaW11bGF0b3IvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9pb3Mtc2ltdWxhdG9yL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTIwNSw2
ICsyMDUsOCBAQCB3ZWJraXQub3JnL2IvMTEyNzU1IGZhc3QvY3NzMy10ZXh0L2NzczMtdGV4dC1p
bmRlbnQKICMgVW5zdXBwb3J0ZWQgb24gY2VydGFpbiBPUyB2ZXJzaW9ucwogd2Via2l0Lm9yZy9i
LzE1MjQ5MSBmYXN0L3RleHQvd29mZjIuaHRtbCBbIFNraXAgXQogCit3ZWJraXQub3JnL2IvMTYy
NjY4IGZhc3QvdGV4dC93b2ZmMi10b3RhbHNmbnRzaXplLmh0bWwgWyBTa2lwIF0KKwogIyBOZWVk
cyB0ZXN0UnVubmVyLmVuYWJsZUF1dG9SZXNpemVNb2RlKCkKIGZhc3QvYXV0b3Jlc2l6ZQogCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDRiN2VkYjguLjg2
OWJlZDM5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0
aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwpAQCAt
MTI3NCw2ICsxMjc0LDggQEAgd2Via2l0Lm9yZy9iLzE1OTcyNCBbIERlYnVnIF0gaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9zZW4KICMgV09GRjIgaXMgb25s
eSBzdXBwb3J0ZWQgb24gY2VydGFpbiBPcGVyYXRpbmcgU3lzdGVtcy4KIHdlYmtpdC5vcmcvYi8x
NTA4MzAgWyBZb3NlbWl0ZSBFbENhcGl0YW4gXSBmYXN0L3RleHQvd29mZjIuaHRtbCBbIEltYWdl
T25seUZhaWx1cmUgXQogCit3ZWJraXQub3JnL2IvMTYyNjY4IGZhc3QvdGV4dC93b2ZmMi10b3Rh
bHNmbnRzaXplLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KKwogd2Via2l0Lm9yZy9iLzE0MDIx
NyBodHRwL3Rlc3RzL25hdmlnYXRpb24vZm9yd2FyZC1hbmQtY2FuY2VsLmh0bWwgWyBQYXNzIEZh
aWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMTUxNDY5IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvaHRtbC9zeW50YXgvcGFyc2luZy90ZW1wbGF0ZS9jcmVhdGluZy1hbi1lbGVtZW50LWZv
ci10aGUtdG9rZW4vdGVtcGxhdGUtb3duZXItZG9jdW1lbnQuaHRtbCBbIFBhc3MgQ3Jhc2ggXQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwppbmRleCA1NDFmZDhkLi41
OWEwMjRmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0
aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwpAQCAt
MjU1Miw2ICsyNTUyLDggQEAgd2Via2l0Lm9yZy9iLzE0OTYzMiBmYXN0L2Zvcm1zL3RleHRhcmVh
LWlucHV0LWV2ZW50Lmh0bWwgWyBTa2lwIF0KIAogd2Via2l0Lm9yZy9iLzE1MDgzMCBmYXN0L3Rl
eHQvd29mZjIuaHRtbCBbIFNraXAgXQogCit3ZWJraXQub3JnL2IvMTYyNjY4IGZhc3QvdGV4dC93
b2ZmMi10b3RhbHNmbnRzaXplLmh0bWwgWyBTa2lwIF0KKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgU3RhcnQgbGlzdCBvZiBVTlJFVklFV0VEIGZh
aWx1cmVzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0NoYW5nZUxvZyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0NoYW5nZUxvZwppbmRleCBlZWY4YTVjLi4xNTkzZDViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTYtMDktMjcgIEtoYWxlZCBIb3NueSAgPGtoYWxlZGhvc255QGVn
bHVnLm9yZz4KKworICAgICAgICBVcGRhdGUgd29mZjIgdG8gbGF0ZXN0IHJldmlzaW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2MDgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdvZmYyL0NNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIHdvZmYyL1JFQURNRS53ZWJraXQ6CisgICAgICAgICogd29m
ZjIvc3JjL2ZpbGUuaDoKKyAgICAgICAgKHdvZmYyOjpHZXRGaWxlQ29udGVudCk6CisgICAgICAg
ICh3b2ZmMjo6U2V0RmlsZUNvbnRlbnRzKToKKyAgICAgICAgKiB3b2ZmMi9zcmMvZm9udC5jYzoK
KyAgICAgICAgKiB3b2ZmMi9zcmMvZm9udC5oOgorICAgICAgICAqIHdvZmYyL3NyYy9nbHlwaC5j
YzoKKyAgICAgICAgKiB3b2ZmMi9zcmMvc3RvcmVfYnl0ZXMuaDoKKyAgICAgICAgKHdvZmYyOjpT
dG9yZTE2KToKKyAgICAgICAgKiB3b2ZmMi9zcmMvdHJhbnNmb3JtLmNjOgorICAgICAgICAqIHdv
ZmYyL3NyYy93b2ZmMl9jb21tb24uY2M6CisgICAgICAgICogd29mZjIvc3JjL3dvZmYyX2NvbXBy
ZXNzLmNjOgorICAgICAgICAqIHdvZmYyL3NyYy93b2ZmMl9kZWMuY2M6CisgICAgICAgICogd29m
ZjIvc3JjL3dvZmYyX2RlYy5oOgorICAgICAgICAqIHdvZmYyL3NyYy93b2ZmMl9kZWNvbXByZXNz
LmNjOgorICAgICAgICAqIHdvZmYyL3NyYy93b2ZmMl9lbmMuY2M6CisgICAgICAgICogd29mZjIv
c3JjL3dvZmYyX291dC5jYzogQWRkZWQuCisgICAgICAgICogd29mZjIvc3JjL3dvZmYyX291dC5o
OiBBZGRlZC4KKyAgICAgICAgKHdvZmYyOjpXT0ZGMk91dDo6fldPRkYyT3V0KToKKyAgICAgICAg
KHdvZmYyOjpXT0ZGMlN0cmluZ091dDo6TWF4U2l6ZSk6CisKIDIwMTYtMDktMjcgIEtvbnN0YW50
aW4gVG9rYXJldiAgPGFubnVsZW5AeWFuZGV4LnJ1PiBhbmQgVml0YWxpeSBTbG9ib2RpbiAgPHZp
dGFsaXkuc2xvYm9kaW5AZ21haWwuY29tPgogCiAgICAgICAgIEZpeGVkIGNvbXBpbGF0aW9uIG9m
IFdPRkYyIG9uIFdpbmRvd3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1RoaXJkUGFydHkvd29mZjIvQ01ha2VMaXN0cy50eHQKaW5k
ZXggYWI0ODE0OC4uMzBmMDQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIv
Q01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1RoaXJkUGFydHkvd29mZjIvQ01ha2VMaXN0cy50
eHQKQEAgLTksNiArOSw3IEBAIHNldChXT0ZGMl9TT1VSQ0VTCiAgICR7V09GRjJfRElSfS9zcmMv
dmFyaWFibGVfbGVuZ3RoLmNjCiAgICR7V09GRjJfRElSfS9zcmMvd29mZjJfY29tbW9uLmNjCiAg
ICR7V09GRjJfRElSfS9zcmMvd29mZjJfZGVjLmNjCisgICR7V09GRjJfRElSfS9zcmMvd29mZjJf
b3V0LmNjCiApCiAKIGluY2x1ZGVfZGlyZWN0b3JpZXMoIiR7VEhJUkRQQVJUWV9ESVJ9L2Jyb3Rs
aS9kZWMiKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvUkVBRE1FLndlYmtp
dCBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL1JFQURNRS53ZWJraXQKaW5kZXggMGUwOTIwMi4u
OTM0ODE3MSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvUkVBRE1FLndlYmtp
dAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9SRUFETUUud2Via2l0CkBAIC0xMSw0ICsx
MSw0IEBAIFRoZSBpbi10cmVlIGNvcHkgaXMgdXBkYXRlZCBieSBydW5uaW5nCiAgIHNoIHVwZGF0
ZS5zaAogZnJvbSB3aXRoaW4gdGhlIG1vZHVsZXMvd29mZjIgZGlyZWN0b3J5LgogCi1DdXJyZW50
IHZlcnNpb246IFtjb21taXQgNjQzYzdiNDU4OTFjYmViNWRjMWY3NTk5YTRjOWI1M2ZiZTgyYTA4
Zl0uCitDdXJyZW50IHZlcnNpb246IFtjb21taXQgNjNiOGZiNmQwZDc5N2YwNGU3N2VlODI1ZmQ4
ZmNmN2VhNjIwNWFhY10uCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMv
ZmlsZS5oIGIvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL2ZpbGUuaAppbmRleCA2OWE5MmY4
Li43YWZjYjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvZmlsZS5o
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9maWxlLmgKQEAgLTEyLDcgKzEyLDcg
QEAKIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmlu
ZyBwZXJtaXNzaW9ucyBhbmQKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogLy8K
LS8vIEZpbGUgSU8gaGVscGVycworLy8gRmlsZSBJTyBoZWxwZXJzLgogCiAjaWZuZGVmIFdPRkYy
X0ZJTEVfSF8KICNkZWZpbmUgV09GRjJfRklMRV9IXwpAQCAtMjIsMTggKzIyLDIwIEBACiAKIG5h
bWVzcGFjZSB3b2ZmMiB7CiAKLWlubGluZSBzdGQ6OnN0cmluZyBHZXRGaWxlQ29udGVudChzdGQ6
OnN0cmluZyBmaWxlbmFtZSkgewordXNpbmcgc3RkOjpzdHJpbmc7CisKKworaW5saW5lIHN0cmlu
ZyBHZXRGaWxlQ29udGVudChzdHJpbmcgZmlsZW5hbWUpIHsKICAgc3RkOjppZnN0cmVhbSBpZnMo
ZmlsZW5hbWUuY19zdHIoKSwgc3RkOjppb3M6OmJpbmFyeSk7Ci0gIHJldHVybiBzdGQ6OnN0cmlu
ZygKKyAgcmV0dXJuIHN0cmluZygKICAgICBzdGQ6OmlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4o
aWZzLnJkYnVmKCkpLAogICAgIHN0ZDo6aXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPigpKTsKIH0K
IAotaW5saW5lIHZvaWQgU2V0RmlsZUNvbnRlbnRzKHN0ZDo6c3RyaW5nIGZpbGVuYW1lLCBzdGQ6
OnN0cmluZyBjb250ZW50KSB7CitpbmxpbmUgdm9pZCBTZXRGaWxlQ29udGVudHMoc3RyaW5nIGZp
bGVuYW1lLCBzdHJpbmc6Oml0ZXJhdG9yIHN0YXJ0LAorICAgIHN0cmluZzo6aXRlcmF0b3IgZW5k
KSB7CiAgIHN0ZDo6b2ZzdHJlYW0gb2ZzKGZpbGVuYW1lLmNfc3RyKCksIHN0ZDo6aW9zOjpiaW5h
cnkpOwotICBzdGQ6OmNvcHkoY29udGVudC5iZWdpbigpLAotICAgICAgICAgICAgY29udGVudC5l
bmQoKSwKLSAgICAgICAgICAgIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxjaGFyPihvZnMpKTsKKyAg
c3RkOjpjb3B5KHN0YXJ0LCBlbmQsIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxjaGFyPihvZnMpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2Ugd29mZjIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L3dvZmYyL3NyYy9mb250LmNjIGIvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL2ZvbnQuY2MK
aW5kZXggN2NjNTY4OC4uMDYwNjczMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvd29m
ZjIvc3JjL2ZvbnQuY2MKKysrIGIvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL2ZvbnQuY2MK
QEAgLTQ5LDExICs0OSw3IEBAIHN0ZDo6dmVjdG9yPHVpbnQzMl90PiBGb250OjpPdXRwdXRPcmRl
cmVkVGFncygpIGNvbnN0IHsKICAgICBvdXRwdXRfb3JkZXIucHVzaF9iYWNrKHRhYmxlLnRhZyk7
CiAgIH0KIAotICAvLyBBbHBoYWJldGl6ZSBhbmQgZG8gbm90IHB1dCBsb2NhIGltbWVkaWF0ZWx5
IGFmdGVyIGdseWYKLSAgLy8gVGhpcyB2aW9sYXRlcyB3b2ZmMiBzcGVjIGJ1dCByZXN1bHRzIGlu
IGEgZm9udCB0aGF0IHBhc3NlcyBPVFMKLSAgc3RkOjpzb3J0KG91dHB1dF9vcmRlci5iZWdpbigp
LCBvdXRwdXRfb3JkZXIuZW5kKCkpOwotICAvLyBUT0RPKHVzZXIpOiBjaGFuZ2UgdG8gbWF0Y2gg
c3BlYyBvbmNlIGJyb3dzZXJzIGFyZSBvbiBuZXdlciBPVFMKLSAgLyoKKyAgLy8gQWxwaGFiZXRp
emUgdGhlbiBwdXQgbG9jYSBpbW1lZGlhdGVseSBhZnRlciBnbHlmCiAgIGF1dG8gZ2x5Zl9sb2Mg
PSBzdGQ6OmZpbmQob3V0cHV0X29yZGVyLmJlZ2luKCksIG91dHB1dF9vcmRlci5lbmQoKSwKICAg
ICAgIGtHbHlmVGFibGVUYWcpOwogICBhdXRvIGxvY2FfbG9jID0gc3RkOjpmaW5kKG91dHB1dF9v
cmRlci5iZWdpbigpLCBvdXRwdXRfb3JkZXIuZW5kKCksCkBAIC02Miw3ICs1OCw3IEBAIHN0ZDo6
dmVjdG9yPHVpbnQzMl90PiBGb250OjpPdXRwdXRPcmRlcmVkVGFncygpIGNvbnN0IHsKICAgICBv
dXRwdXRfb3JkZXIuZXJhc2UobG9jYV9sb2MpOwogICAgIG91dHB1dF9vcmRlci5pbnNlcnQoc3Rk
OjpmaW5kKG91dHB1dF9vcmRlci5iZWdpbigpLCBvdXRwdXRfb3JkZXIuZW5kKCksCiAgICAgICBr
R2x5ZlRhYmxlVGFnKSArIDEsIGtMb2NhVGFibGVUYWcpOwotICB9Ki8KKyAgfQogCiAgIHJldHVy
biBvdXRwdXRfb3JkZXI7CiB9CkBAIC0xNDUsNyArMTQxLDcgQEAgYm9vbCBSZWFkVHJ1ZVR5cGVD
b2xsZWN0aW9uKEJ1ZmZlciogZmlsZSwgY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbiwK
ICAgICB9CiAKICAgICBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4gb2Zmc2V0czsKLSAgICBmb3IgKGF1
dG8gaSA9IDA7IGkgPCBudW1fZm9udHM7IGkrKykgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtX2ZvbnRzOyBpKyspIHsKICAgICAgIHVpbnQzMl90IG9mZnNldDsKICAgICAgIGlmICgh
ZmlsZS0+UmVhZFUzMigmb2Zmc2V0KSkgewogICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lP
Tl9GQUlMVVJFKCk7CkBAIC0xODUsMTUgKzE4MSwxNCBAQCBib29sIFJlYWRGb250Q29sbGVjdGlv
bihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgRm9udENvbGxlY3Rpb24qIGZvbnRfY29sbGVjdGlvbikgewogICBCdWZmZXIgZmlsZShkYXRh
LCBsZW4pOwogCi0gIHVpbnQzMl90IGZsYXZvcjsKLSAgaWYgKCFmaWxlLlJlYWRVMzIoJmZsYXZv
cikpIHsKKyAgaWYgKCFmaWxlLlJlYWRVMzIoJmZvbnRfY29sbGVjdGlvbi0+Zmxhdm9yKSkgewog
ICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQogCi0gIGlmIChmbGF2
b3IgIT0ga1R0Y0ZvbnRGbGF2b3IpIHsKKyAgaWYgKGZvbnRfY29sbGVjdGlvbi0+Zmxhdm9yICE9
IGtUdGNGb250Rmxhdm9yKSB7CiAgICAgZm9udF9jb2xsZWN0aW9uLT5mb250cy5yZXNpemUoMSk7
CiAgICAgRm9udCYgZm9udCA9IGZvbnRfY29sbGVjdGlvbi0+Zm9udHNbMF07Ci0gICAgZm9udC5m
bGF2b3IgPSBmbGF2b3I7CisgICAgZm9udC5mbGF2b3IgPSBmb250X2NvbGxlY3Rpb24tPmZsYXZv
cjsKICAgICByZXR1cm4gUmVhZFRydWVUeXBlRm9udCgmZmlsZSwgZGF0YSwgbGVuLCAmZm9udCk7
CiAgIH0KICAgcmV0dXJuIFJlYWRUcnVlVHlwZUNvbGxlY3Rpb24oJmZpbGUsIGRhdGEsIGxlbiwg
Zm9udF9jb2xsZWN0aW9uKTsKQEAgLTI5MCw3ICsyODUsNyBAQCBib29sIFdyaXRlRm9udENvbGxl
Y3Rpb24oY29uc3QgRm9udENvbGxlY3Rpb24mIGZvbnRfY29sbGVjdGlvbiwgdWludDhfdCogZHN0
LAogICBzaXplX3Qgb2Zmc2V0ID0gMDsKIAogICAvLyBJdCdzIHNpbXBsZXIgaWYgdGhpcyBqdXN0
IGEgc2ltcGxlIHNmbnQKLSAgaWYgKGZvbnRfY29sbGVjdGlvbi5mb250cy5zaXplKCkgPT0gMSkg
eworICBpZiAoZm9udF9jb2xsZWN0aW9uLmZsYXZvciAhPSBrVHRjRm9udEZsYXZvcikgewogICAg
IHJldHVybiBXcml0ZUZvbnQoZm9udF9jb2xsZWN0aW9uLmZvbnRzWzBdLCAmb2Zmc2V0LCBkc3Qs
IGRzdF9zaXplKTsKICAgfQogCkBAIC0zMDEsNyArMjk2LDcgQEAgYm9vbCBXcml0ZUZvbnRDb2xs
ZWN0aW9uKGNvbnN0IEZvbnRDb2xsZWN0aW9uJiBmb250X2NvbGxlY3Rpb24sIHVpbnQ4X3QqIGRz
dCwKIAogICAvLyBPZmZzZXQgVGFibGUsIHplcm9lZCBmb3Igbm93CiAgIHNpemVfdCBvZmZzZXRf
dGFibGUgPSBvZmZzZXQ7ICAvLyB3aGVyZSB0byB3cml0ZSBvZmZzZXRzIGxhdGVyCi0gIGZvciAo
aW50IGkgPSAwOyBpIDwgZm9udF9jb2xsZWN0aW9uLmZvbnRzLnNpemUoKTsgaSsrKSB7CisgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZm9udF9jb2xsZWN0aW9uLmZvbnRzLnNpemUoKTsgaSsrKSB7
CiAgICAgU3RvcmVVMzIoMCwgJm9mZnNldCwgZHN0KTsKICAgfQogCkBAIC0zMTIsNyArMzA3LDcg
QEAgYm9vbCBXcml0ZUZvbnRDb2xsZWN0aW9uKGNvbnN0IEZvbnRDb2xsZWN0aW9uJiBmb250X2Nv
bGxlY3Rpb24sIHVpbnQ4X3QqIGRzdCwKICAgfQogCiAgIC8vIFdyaXRlIGZvbnRzIGFuZCB0aGVp
ciBvZmZzZXRzLgotICBmb3IgKGludCBpID0gMDsgaSA8IGZvbnRfY29sbGVjdGlvbi5mb250cy5z
aXplKCk7IGkrKykgeworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZvbnRfY29sbGVjdGlvbi5m
b250cy5zaXplKCk7IGkrKykgewogICAgIGNvbnN0IGF1dG8mIGZvbnQgPSBmb250X2NvbGxlY3Rp
b24uZm9udHNbaV07CiAgICAgU3RvcmVVMzIob2Zmc2V0LCAmb2Zmc2V0X3RhYmxlLCBkc3QpOwog
ICAgIGlmICghV3JpdGVGb250KGZvbnQsICZvZmZzZXQsIGRzdCwgZHN0X3NpemUpKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvZm9udC5oIGIvU291cmNlL1RoaXJk
UGFydHkvd29mZjIvc3JjL2ZvbnQuaAppbmRleCA2MDFjNGM4Li45MzgwNmU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvZm9udC5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L3dvZmYyL3NyYy9mb250LmgKQEAgLTYxLDYgKzYxLDcgQEAgc3RydWN0IEZvbnQgewogCiAv
LyBBY2NvbW9kYXRlcyBib3RoIHNpbmd1bGFyIChPVEYsIFRURikgYW5kIGNvbGxlY3Rpb24gKFRU
QykgZm9udHMKIHN0cnVjdCBGb250Q29sbGVjdGlvbiB7CisgIHVpbnQzMl90IGZsYXZvcjsKICAg
dWludDMyX3QgaGVhZGVyX3ZlcnNpb247CiAgIC8vIChvZmZzZXQsIGZpcnN0IHVzZSBvZiB0YWJs
ZSopIHBhaXJzCiAgIHN0ZDo6bWFwPHVpbnQzMl90LCBGb250OjpUYWJsZSo+IHRhYmxlczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9nbHlwaC5jYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L3dvZmYyL3NyYy9nbHlwaC5jYwppbmRleCAxN2JlZjM4Li4xZGFkYWZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvZ2x5cGguY2MKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvd29mZjIvc3JjL2dseXBoLmNjCkBAIC0xMjIsNyArMTIyLDcgQEAgYm9vbCBS
ZWFkR2x5cGgoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbiwgR2x5cGgqIGdseXBoKSB7
CiAgICAgdWludDhfdCBmbGFnX3JlcGVhdCA9IDA7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1fY29udG91cnM7ICsraSkgewogICAgICAgZmxhZ3NbaV0ucmVzaXplKGdseXBoLT5jb250b3Vy
c1tpXS5zaXplKCkpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBnbHlwaC0+Y29udG91cnNb
aV0uc2l6ZSgpOyArK2opIHsKKyAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgZ2x5cGgtPmNv
bnRvdXJzW2ldLnNpemUoKTsgKytqKSB7CiAgICAgICAgIGlmIChmbGFnX3JlcGVhdCA9PSAwKSB7
CiAgICAgICAgICAgaWYgKCFidWZmZXIuUmVhZFU4KCZmbGFnKSkgewogICAgICAgICAgICAgcmV0
dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwpAQCAtMTQzLDcgKzE0Myw3IEBAIGJvb2wg
UmVhZEdseXBoKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW4sIEdseXBoKiBnbHlwaCkg
ewogICAgIC8vIFJlYWQgdGhlIHggY29vcmRpbmF0ZXMuCiAgICAgaW50IHByZXZfeCA9IDA7CiAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fY29udG91cnM7ICsraSkgewotICAgICAgZm9yIChp
bnQgaiA9IDA7IGogPCBnbHlwaC0+Y29udG91cnNbaV0uc2l6ZSgpOyArK2opIHsKKyAgICAgIGZv
ciAoc2l6ZV90IGogPSAwOyBqIDwgZ2x5cGgtPmNvbnRvdXJzW2ldLnNpemUoKTsgKytqKSB7CiAg
ICAgICAgIHVpbnQ4X3QgZmxhZyA9IGZsYWdzW2ldW2pdOwogICAgICAgICBpZiAoZmxhZyAmIGtG
TEFHX1hTSE9SVCkgewogICAgICAgICAgIC8vIHNpbmdsZSBieXRlIHgtZGVsdGEgY29vcmQgdmFs
dWUKQEAgLTE3MCw3ICsxNzAsNyBAQCBib29sIFJlYWRHbHlwaChjb25zdCB1aW50OF90KiBkYXRh
LCBzaXplX3QgbGVuLCBHbHlwaCogZ2x5cGgpIHsKICAgICAvLyBSZWFkIHRoZSB5IGNvb3JkaW5h
dGVzLgogICAgIGludCBwcmV2X3kgPSAwOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2Nv
bnRvdXJzOyArK2kpIHsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZ2x5cGgtPmNvbnRvdXJz
W2ldLnNpemUoKTsgKytqKSB7CisgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGdseXBoLT5j
b250b3Vyc1tpXS5zaXplKCk7ICsraikgewogICAgICAgICB1aW50OF90IGZsYWcgPSBmbGFnc1tp
XVtqXTsKICAgICAgICAgaWYgKGZsYWcgJiBrRkxBR19ZU0hPUlQpIHsKICAgICAgICAgICAvLyBz
aW5nbGUgYnl0ZSB5LWRlbHRhIGNvb3JkIHZhbHVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS93b2ZmMi9zcmMvc3RvcmVfYnl0ZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3Ny
Yy9zdG9yZV9ieXRlcy5oCmluZGV4IGUxYTExZjMuLjc0YjI3OWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy9zdG9yZV9ieXRlcy5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L3dvZmYyL3NyYy9zdG9yZV9ieXRlcy5oCkBAIC01OCw4ICs1OCw3IEBAIGlubGluZSB2b2lk
IFN0b3JlMTYoaW50IHZhbCwgc2l6ZV90KiBvZmZzZXQsIHVpbnQ4X3QqIGRzdCkgewogICAgICAg
KCh2YWwgJiAweEZGKSA8PCA4KSB8ICgodmFsICYgMHhGRjAwKSA+PiA4KTsKICAgKm9mZnNldCAr
PSAyOwogI2VsaWYgKGRlZmluZWQoX19CWVRFX09SREVSX18pICYmIChfX0JZVEVfT1JERVJfXyA9
PSBfX09SREVSX0JJR19FTkRJQU5fXykpCi0gICpyZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4o
ZHN0ICsgKm9mZnNldCkgPQotICAgICAgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHZhbCk7CisgICpy
ZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZHN0ICsgKm9mZnNldCkgPSBzdGF0aWNfY2FzdDx1
aW50MTZfdD4odmFsKTsKICAgKm9mZnNldCArPSAyOwogI2Vsc2UKICAgZHN0Wygqb2Zmc2V0KSsr
XSA9IHZhbCA+PiA4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3Ry
YW5zZm9ybS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy90cmFuc2Zvcm0uY2MKaW5k
ZXggYjdiMGNmMC4uMmFkOGIxNiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIv
c3JjL3RyYW5zZm9ybS5jYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMvdHJhbnNm
b3JtLmNjCkBAIC0zOSw3ICszOSw3IEBAIHZvaWQgV3JpdGVCeXRlcyhzdGQ6OnZlY3Rvcjx1aW50
OF90Piogb3V0LCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuKSB7CiB9CiAKIHZvaWQg
V3JpdGVCeXRlcyhzdGQ6OnZlY3Rvcjx1aW50OF90Piogb3V0LCBjb25zdCBzdGQ6OnZlY3Rvcjx1
aW50OF90PiYgaW4pIHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbi5zaXplKCk7ICsraSkgewor
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluLnNpemUoKTsgKytpKSB7CiAgICAgb3V0LT5wdXNo
X2JhY2soaW5baV0pOwogICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2Zm
Mi9zcmMvd29mZjJfY29tbW9uLmNjIGIvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYy
X2NvbW1vbi5jYwppbmRleCAzOWRjNTRlLi5lYmE2YTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfY29tbW9uLmNjCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L3dvZmYyL3NyYy93b2ZmMl9jb21tb24uY2MKQEAgLTIzLDcgKzIzLDggQEAgbmFtZXNwYWNlIHdv
ZmYyIHsKIAogdWludDMyX3QgQ29tcHV0ZVVMb25nU3VtKGNvbnN0IHVpbnQ4X3QqIGJ1Ziwgc2l6
ZV90IHNpemUpIHsKICAgdWludDMyX3QgY2hlY2tzdW0gPSAwOwotICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7IGkgKz0gNCkgeworICBzaXplX3QgYWxpZ25lZF9zaXplID0gc2l6ZSAmIH4z
OworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFsaWduZWRfc2l6ZTsgaSArPSA0KSB7CiAjaWYg
KGRlZmluZWQoX19CWVRFX09SREVSX18pICYmIChfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0xJ
VFRMRV9FTkRJQU5fXykpCiAgICAgdWludDMyX3QgdiA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQzMl90Kj4oYnVmICsgaSk7CiAgICAgY2hlY2tzdW0gKz0gKCgodiAmIDB4RkYpIDw8IDI0
KSB8ICgodiAmIDB4RkYwMCkgPDwgOCkgfApAQCAtMzUsNiArMzYsMTYgQEAgdWludDMyX3QgQ29t
cHV0ZVVMb25nU3VtKGNvbnN0IHVpbnQ4X3QqIGJ1Ziwgc2l6ZV90IHNpemUpIHsKICAgICAgIChi
dWZbaSArIDJdIDw8IDgpIHwgYnVmW2kgKyAzXTsKICNlbmRpZgogICB9CisKKyAgLy8gdHJlYXQg
c2l6ZSBub3QgYWxpZ25lZCBvbiA0IGFzIGlmIGl0IHdlcmUgcGFkZGVkIHRvIDQgd2l0aCAwJ3MK
KyAgaWYgKHNpemUgIT0gYWxpZ25lZF9zaXplKSB7CisgICAgdWludDMyX3QgdiA9IDA7CisgICAg
Zm9yIChzaXplX3QgaSA9IGFsaWduZWRfc2l6ZTsgaSA8IHNpemU7ICsraSkgeworICAgICAgdiB8
PSBidWZbaV0gPDwgKDI0IC0gOCAqIChpICYgMykpOworICAgIH0KKyAgICBjaGVja3N1bSArPSB2
OworICB9CisKICAgcmV0dXJuIGNoZWNrc3VtOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS93b2ZmMi9zcmMvd29mZjJfY29tcHJlc3MuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS93
b2ZmMi9zcmMvd29mZjJfY29tcHJlc3MuY2MKaW5kZXggZWM0MWFkNS4uZTVjZjcxMCAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2NvbXByZXNzLmNjCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9jb21wcmVzcy5jYwpAQCAtNDcsNyAr
NDcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKICAgfQogICBvdXRwdXQu
cmVzaXplKG91dHB1dF9zaXplKTsKIAotICB3b2ZmMjo6U2V0RmlsZUNvbnRlbnRzKG91dGZpbGVu
YW1lLCBvdXRwdXQpOworICB3b2ZmMjo6U2V0RmlsZUNvbnRlbnRzKG91dGZpbGVuYW1lLCBvdXRw
dXQuYmVnaW4oKSwgb3V0cHV0LmVuZCgpKTsKIAogICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9kZWMuY2MgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS93b2ZmMi9zcmMvd29mZjJfZGVjLmNjCmluZGV4IDJmYTI5MWMuLmVjNzU3NzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9kZWMuY2MKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2RlYy5jYwpAQCAtMjUsNiArMjUsNyBAQAog
I2luY2x1ZGUgPHZlY3Rvcj4KICNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8bWVtb3J5PgorI2lu
Y2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlICIuL2RlY29kZS5oIgogI2luY2x1ZGUgIi4vYnVm
ZmVyLmgiCkBAIC02NSwxMyArNjYsNTQgQEAgY29uc3Qgc2l6ZV90IGtDaGVja1N1bUFkanVzdG1l
bnRPZmZzZXQgPSA4OwogY29uc3Qgc2l6ZV90IGtFbmRQdHNPZkNvbnRvdXJzT2Zmc2V0ID0gMTA7
CiBjb25zdCBzaXplX3Qga0NvbXBvc2l0ZUdseXBoQmVnaW4gPSAxMDsKIAorLy8gOTglIG9mIEdv
b2dsZSBGb250cyBoYXZlIG5vIGdseXBoIGFib3ZlIDVrIGJ5dGVzCisvLyBMYXJnZXN0IGdseXBo
IGV2ZXIgb2JzZXJ2ZWQgd2FzIDcyayBieXRlcworY29uc3Qgc2l6ZV90IGtEZWZhdWx0R2x5cGhC
dWYgPSA1MTIwOworCisvLyBPdmVyIDE0ayB0ZXN0IGZvbnRzIHRoZSBtYXggY29tcHJlc3Npb24g
cmF0aW8gc2VlbiB0byBkYXRlIHdhcyB+MjAuCisvLyA+MTAwIHN1Z2dlc3RzIHlvdSB3cm90ZSBh
IGJhZCB1bmNvbXByZXNzZWQgc2l6ZS4KK2NvbnN0IGZsb2F0IGtNYXhQbGF1c2libGVDb21wcmVz
c2lvblJhdGlvID0gMTAwLjA7CisKIC8vIG1ldGFkYXRhIGZvciBhIFRUQyBmb250IGVudHJ5CiBz
dHJ1Y3QgVHRjRm9udCB7CiAgIHVpbnQzMl90IGZsYXZvcjsKICAgdWludDMyX3QgZHN0X29mZnNl
dDsKKyAgdWludDMyX3QgaGVhZGVyX2NoZWNrc3VtOwogICBzdGQ6OnZlY3Rvcjx1aW50MTZfdD4g
dGFibGVfaW5kaWNlczsKIH07CiAKK3N0cnVjdCBXT0ZGMkhlYWRlciB7CisgIHVpbnQzMl90IGZs
YXZvcjsKKyAgdWludDMyX3QgaGVhZGVyX3ZlcnNpb247CisgIHVpbnQxNl90IG51bV90YWJsZXM7
CisgIHVpbnQ2NF90IGNvbXByZXNzZWRfb2Zmc2V0OworICB1aW50MzJfdCBjb21wcmVzc2VkX2xl
bmd0aDsKKyAgdWludDMyX3QgdW5jb21wcmVzc2VkX3NpemU7CisgIHN0ZDo6dmVjdG9yPFRhYmxl
PiB0YWJsZXM7ICAvLyBudW1fdGFibGVzIHVuaXF1ZSB0YWJsZXMKKyAgc3RkOjp2ZWN0b3I8VHRj
Rm9udD4gdHRjX2ZvbnRzOyAgLy8gbWV0YWRhdGEgdG8gaGVscCByZWJ1aWxkIGZvbnQKK307CisK
Ky8qKgorICogQWNjdW11bGF0ZXMgZGF0YSB3ZSBtYXkgbmVlZCB0byByZWNvbnN0cnVjdCBhIHNp
bmdsZSBmb250LiBPbmUgcGVyIGZvbnQKKyAqIGNyZWF0ZWQgZm9yIGEgVFRDLgorICovCitzdHJ1
Y3QgV09GRjJGb250SW5mbyB7CisgIHVpbnQxNl90IG51bV9nbHlwaHM7CisgIHVpbnQxNl90IGlu
ZGV4X2Zvcm1hdDsKKyAgdWludDE2X3QgbnVtX2htZXRyaWNzOworICBzdGQ6OnZlY3RvcjxpbnQx
Nl90PiB4X21pbnM7CisgIHN0ZDo6bWFwPHVpbnQzMl90LCB1aW50MzJfdD4gdGFibGVfZW50cnlf
YnlfdGFnOworfTsKKworLy8gQWNjdW11bGF0ZXMgbWV0YWRhdGEgYXMgd2UgcmVidWlsZCB0aGUg
Zm9udAorc3RydWN0IFJlYnVpbGRNZXRhZGF0YSB7CisgIHVpbnQzMl90IGhlYWRlcl9jaGVja3N1
bTsgIC8vIHNldCBieSBXcml0ZUhlYWRlcnMKKyAgc3RkOjp2ZWN0b3I8V09GRjJGb250SW5mbz4g
Zm9udF9pbmZvczsKKyAgLy8gY2hlY2tzdW1zIGZvciB0YWJsZXMgdGhhdCBoYXZlIGJlZW4gd3Jp
dHRlbi4KKyAgLy8gKHRhZywgc3JjX29mZnNldCkgPT4gY2hlY2tzdW0uIE5lZWQgYm90aCBiZWNh
dXNlIDAtbGVuZ3RoIGxvY2EuCisgIHN0ZDo6bWFwPHN0ZDo6cGFpcjx1aW50MzJfdCwgdWludDMy
X3Q+LCB1aW50MzJfdD4gY2hlY2tzdW1zOworfTsKKwogaW50IFdpdGhTaWduKGludCBmbGFnLCBp
bnQgYmFzZXZhbCkgewogICAvLyBQcmVjb25kaXRpb246IDAgPD0gYmFzZXZhbCA8IDY1NTM2ICh0
byBhdm9pZCBpbnRlZ2VyIG92ZXJmbG93KQogICByZXR1cm4gKGZsYWcgJiAxKSA/IGJhc2V2YWwg
OiAtYmFzZXZhbDsKQEAgLTI0NCw2ICsyODYsNyBAQCBib29sIFN0b3JlUG9pbnRzKHVuc2lnbmVk
IGludCBuX3BvaW50cywgY29uc3QgUG9pbnQqIHBvaW50cywKIAogLy8gQ29tcHV0ZSB0aGUgYm91
bmRpbmcgYm94IG9mIHRoZSBjb29yZGluYXRlcywgYW5kIHN0b3JlIGludG8gYSBnbHlmIGJ1ZmZl
ci4KIC8vIEEgcHJlY29uZGl0aW9uIGlzIHRoYXQgdGhlcmUgYXJlIGF0IGxlYXN0IDEwIGJ5dGVz
IGF2YWlsYWJsZS4KKy8vIGRzdCBzaG91bGQgcG9pbnQgdG8gdGhlIGJlZ2lubmluZyBvZiBhICdn
bHlmJyByZWNvcmQuCiB2b2lkIENvbXB1dGVCYm94KHVuc2lnbmVkIGludCBuX3BvaW50cywgY29u
c3QgUG9pbnQqIHBvaW50cywgdWludDhfdCogZHN0KSB7CiAgIGludCB4X21pbiA9IDA7CiAgIGlu
dCB5X21pbiA9IDA7CkBAIC0yNzEsMTQgKzMxNCwxNSBAQCB2b2lkIENvbXB1dGVCYm94KHVuc2ln
bmVkIGludCBuX3BvaW50cywgY29uc3QgUG9pbnQqIHBvaW50cywgdWludDhfdCogZHN0KSB7CiAg
IG9mZnNldCA9IFN0b3JlMTYoZHN0LCBvZmZzZXQsIHlfbWF4KTsKIH0KIAotYm9vbCBQcm9jZXNz
Q29tcG9zaXRlKEJ1ZmZlciogY29tcG9zaXRlX3N0cmVhbSwgdWludDhfdCogZHN0LAotICAgIHNp
emVfdCBkc3Rfc2l6ZSwgc2l6ZV90KiBnbHlwaF9zaXplLCBib29sKiBoYXZlX2luc3RydWN0aW9u
cykgewotICBzaXplX3Qgc3RhcnRfb2Zmc2V0ID0gY29tcG9zaXRlX3N0cmVhbS0+b2Zmc2V0KCk7
CisKK2Jvb2wgU2l6ZU9mQ29tcG9zaXRlKEJ1ZmZlciBjb21wb3NpdGVfc3RyZWFtLCBzaXplX3Qq
IHNpemUsCisgICAgICAgICAgICAgICAgICAgICBib29sKiBoYXZlX2luc3RydWN0aW9ucykgewor
ICBzaXplX3Qgc3RhcnRfb2Zmc2V0ID0gY29tcG9zaXRlX3N0cmVhbS5vZmZzZXQoKTsKICAgYm9v
bCB3ZV9oYXZlX2luc3RydWN0aW9ucyA9IGZhbHNlOwogCiAgIHVpbnQxNl90IGZsYWdzID0gRkxB
R19NT1JFX0NPTVBPTkVOVFM7CiAgIHdoaWxlIChmbGFncyAmIEZMQUdfTU9SRV9DT01QT05FTlRT
KSB7Ci0gICAgaWYgKFBSRURJQ1RfRkFMU0UoIWNvbXBvc2l0ZV9zdHJlYW0tPlJlYWRVMTYoJmZs
YWdzKSkpIHsKKyAgICBpZiAoUFJFRElDVF9GQUxTRSghY29tcG9zaXRlX3N0cmVhbS5SZWFkVTE2
KCZmbGFncykpKSB7CiAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAg
ICAgfQogICAgIHdlX2hhdmVfaW5zdHJ1Y3Rpb25zIHw9IChmbGFncyAmIEZMQUdfV0VfSEFWRV9J
TlNUUlVDVElPTlMpICE9IDA7CkBAIC0yOTUsMzQgKzMzOSw0MyBAQCBib29sIFByb2Nlc3NDb21w
b3NpdGUoQnVmZmVyKiBjb21wb3NpdGVfc3RyZWFtLCB1aW50OF90KiBkc3QsCiAgICAgfSBlbHNl
IGlmIChmbGFncyAmIEZMQUdfV0VfSEFWRV9BX1RXT19CWV9UV08pIHsKICAgICAgIGFyZ19zaXpl
ICs9IDg7CiAgICAgfQotICAgIGlmIChQUkVESUNUX0ZBTFNFKCFjb21wb3NpdGVfc3RyZWFtLT5T
a2lwKGFyZ19zaXplKSkpIHsKKyAgICBpZiAoUFJFRElDVF9GQUxTRSghY29tcG9zaXRlX3N0cmVh
bS5Ta2lwKGFyZ19zaXplKSkpIHsKICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxV
UkUoKTsKICAgICB9CiAgIH0KLSAgc2l6ZV90IGNvbXBvc2l0ZV9nbHlwaF9zaXplID0gY29tcG9z
aXRlX3N0cmVhbS0+b2Zmc2V0KCkgLSBzdGFydF9vZmZzZXQ7Ci0gIGlmIChQUkVESUNUX0ZBTFNF
KGNvbXBvc2l0ZV9nbHlwaF9zaXplICsga0NvbXBvc2l0ZUdseXBoQmVnaW4gPiBkc3Rfc2l6ZSkp
IHsKKworICAqc2l6ZSA9IGNvbXBvc2l0ZV9zdHJlYW0ub2Zmc2V0KCkgLSBzdGFydF9vZmZzZXQ7
CisgICpoYXZlX2luc3RydWN0aW9ucyA9IHdlX2hhdmVfaW5zdHJ1Y3Rpb25zOworCisgIHJldHVy
biB0cnVlOworfQorCitib29sIFBhZDQoV09GRjJPdXQqIG91dCkgeworICB1aW50OF90IHplcm9l
c1tdID0gezAsIDAsIDB9OworICBpZiAoUFJFRElDVF9GQUxTRShvdXQtPlNpemUoKSArIDMgPCBv
dXQtPlNpemUoKSkpIHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAg
IH0KLSAgU3RvcmUxNihkc3QsIDAsIDB4ZmZmZik7ICAvLyBuQ29udG91cnMgPSAtMSBmb3IgY29t
cG9zaXRlIGdseXBoCi0gIHN0ZDo6bWVtY3B5KGRzdCArIGtDb21wb3NpdGVHbHlwaEJlZ2luLAot
ICAgICAgY29tcG9zaXRlX3N0cmVhbS0+YnVmZmVyKCkgKyBzdGFydF9vZmZzZXQsCi0gICAgICBj
b21wb3NpdGVfZ2x5cGhfc2l6ZSk7Ci0gICpnbHlwaF9zaXplID0ga0NvbXBvc2l0ZUdseXBoQmVn
aW4gKyBjb21wb3NpdGVfZ2x5cGhfc2l6ZTsKLSAgKmhhdmVfaW5zdHJ1Y3Rpb25zID0gd2VfaGF2
ZV9pbnN0cnVjdGlvbnM7CisgIHVpbnQzMl90IHBhZF9ieXRlcyA9IFJvdW5kNChvdXQtPlNpemUo
KSkgLSBvdXQtPlNpemUoKTsKKyAgaWYgKHBhZF9ieXRlcyA+IDApIHsKKyAgICBpZiAoUFJFRElD
VF9GQUxTRSghb3V0LT5Xcml0ZSgmemVyb2VzLCBwYWRfYnl0ZXMpKSkgeworICAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICAgIH0KKyAgfQogICByZXR1cm4gdHJ1ZTsK
IH0KIAogLy8gQnVpbGQgVHJ1ZVR5cGUgbG9jYSB0YWJsZQogYm9vbCBTdG9yZUxvY2EoY29uc3Qg
c3RkOjp2ZWN0b3I8dWludDMyX3Q+JiBsb2NhX3ZhbHVlcywgaW50IGluZGV4X2Zvcm1hdCwKLSAg
ICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdCwgc2l6ZV90IGRzdF9zaXplKSB7CisgICAgICAgICAg
ICAgICB1aW50MzJfdCogY2hlY2tzdW0sIFdPRkYyT3V0KiBvdXQpIHsKKyAgLy8gVE9ETyh1c2Vy
KSBmaWd1cmUgb3V0IHdoYXQgaW5kZXggZm9ybWF0IHRvIHVzZSBiYXNlZCBvbiB3aGV0aGVyIG1h
eAorICAvLyBvZmZzZXQgZml0cyBpbnRvIHVpbnQxNl90IG9yIG5vdAogICBjb25zdCB1aW50NjRf
dCBsb2NhX3NpemUgPSBsb2NhX3ZhbHVlcy5zaXplKCk7CiAgIGNvbnN0IHVpbnQ2NF90IG9mZnNl
dF9zaXplID0gaW5kZXhfZm9ybWF0ID8gNCA6IDI7CiAgIGlmIChQUkVESUNUX0ZBTFNFKChsb2Nh
X3NpemUgPDwgMikgPj4gMiAhPSBsb2NhX3NpemUpKSB7CiAgICAgcmV0dXJuIEZPTlRfQ09NUFJF
U1NJT05fRkFJTFVSRSgpOwogICB9Ci0gIGlmIChQUkVESUNUX0ZBTFNFKG9mZnNldF9zaXplICog
bG9jYV9zaXplID4gZHN0X3NpemUpKSB7Ci0gICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJ
TFVSRSgpOwotICB9CisgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGxvY2FfY29udGVudChsb2NhX3Np
emUgKiBvZmZzZXRfc2l6ZSk7CisgIHVpbnQ4X3QqIGRzdCA9ICZsb2NhX2NvbnRlbnRbMF07CiAg
IHNpemVfdCBvZmZzZXQgPSAwOwogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxvY2FfdmFsdWVz
LnNpemUoKTsgKytpKSB7CiAgICAgdWludDMyX3QgdmFsdWUgPSBsb2NhX3ZhbHVlc1tpXTsKQEAg
LTMzMiwzMCArMzg1LDM0IEBAIGJvb2wgU3RvcmVMb2NhKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQz
Ml90PiYgbG9jYV92YWx1ZXMsIGludCBpbmRleF9mb3JtYXQsCiAgICAgICBvZmZzZXQgPSBTdG9y
ZTE2KGRzdCwgb2Zmc2V0LCB2YWx1ZSA+PiAxKTsKICAgICB9CiAgIH0KKyAgKmNoZWNrc3VtID0g
Q29tcHV0ZVVMb25nU3VtKCZsb2NhX2NvbnRlbnRbMF0sIGxvY2FfY29udGVudC5zaXplKCkpOwor
ICBpZiAoUFJFRElDVF9GQUxTRSghb3V0LT5Xcml0ZSgmbG9jYV9jb250ZW50WzBdLCBsb2NhX2Nv
bnRlbnQuc2l6ZSgpKSkpIHsKKyAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7
CisgIH0KICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vIFJlY29uc3RydWN0IGVudGlyZSBnbHlmIHRh
YmxlIGJhc2VkIG9uIHRyYW5zZm9ybWVkIG9yaWdpbmFsCi1ib29sIFJlY29uc3RydWN0R2x5Zihj
b25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YV9zaXplLAotICAgICAgICAgICAgICAgICAg
ICAgdWludDhfdCogZHN0LCBzaXplX3QgZHN0X3NpemUsCi0gICAgICAgICAgICAgICAgICAgICB1
aW50OF90KiBsb2NhX2J1Ziwgc2l6ZV90IGxvY2Ffc2l6ZSkgeworYm9vbCBSZWNvbnN0cnVjdEds
eWYoY29uc3QgdWludDhfdCogZGF0YSwgVGFibGUqIGdseWZfdGFibGUsCisgICAgICAgICAgICAg
ICAgICAgICB1aW50MzJfdCogZ2x5Zl9jaGVja3N1bSwgVGFibGUgKiBsb2NhX3RhYmxlLAorICAg
ICAgICAgICAgICAgICAgICAgdWludDMyX3QqIGxvY2FfY2hlY2tzdW0sIFdPRkYyRm9udEluZm8q
IGluZm8sCisgICAgICAgICAgICAgICAgICAgICBXT0ZGMk91dCogb3V0KSB7CiAgIHN0YXRpYyBj
b25zdCBpbnQga051bVN1YlN0cmVhbXMgPSA3OwotICBCdWZmZXIgZmlsZShkYXRhLCBkYXRhX3Np
emUpOworICBCdWZmZXIgZmlsZShkYXRhLCBnbHlmX3RhYmxlLT50cmFuc2Zvcm1fbGVuZ3RoKTsK
ICAgdWludDMyX3QgdmVyc2lvbjsKICAgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3Q+ID4gc3Vic3RyZWFtcyhrTnVtU3ViU3RyZWFtcyk7CisgIGNvbnN0IHNpemVf
dCBnbHlmX3N0YXJ0ID0gb3V0LT5TaXplKCk7CiAKICAgaWYgKFBSRURJQ1RfRkFMU0UoIWZpbGUu
UmVhZFUzMigmdmVyc2lvbikpKSB7CiAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVS
RSgpOwogICB9Ci0gIHVpbnQxNl90IG51bV9nbHlwaHM7Ci0gIHVpbnQxNl90IGluZGV4X2Zvcm1h
dDsKLSAgaWYgKFBSRURJQ1RfRkFMU0UoIWZpbGUuUmVhZFUxNigmbnVtX2dseXBocykgfHwKLSAg
ICAgICFmaWxlLlJlYWRVMTYoJmluZGV4X2Zvcm1hdCkpKSB7CisgIGlmIChQUkVESUNUX0ZBTFNF
KCFmaWxlLlJlYWRVMTYoJmluZm8tPm51bV9nbHlwaHMpIHx8CisgICAgICAhZmlsZS5SZWFkVTE2
KCZpbmZvLT5pbmRleF9mb3JtYXQpKSkgewogICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZB
SUxVUkUoKTsKICAgfQogCiAgIHVuc2lnbmVkIGludCBvZmZzZXQgPSAoMiArIGtOdW1TdWJTdHJl
YW1zKSAqIDQ7Ci0gIGlmIChQUkVESUNUX0ZBTFNFKG9mZnNldCA+IGRhdGFfc2l6ZSkpIHsKKyAg
aWYgKFBSRURJQ1RfRkFMU0Uob2Zmc2V0ID4gZ2x5Zl90YWJsZS0+dHJhbnNmb3JtX2xlbmd0aCkp
IHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0KICAgLy8gSW52
YXJpYW50IGZyb20gaGVyZSBvbjogZGF0YV9zaXplID49IG9mZnNldApAQCAtMzY0LDcgKzQyMSw3
IEBAIGJvb2wgUmVjb25zdHJ1Y3RHbHlmKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRh
X3NpemUsCiAgICAgaWYgKFBSRURJQ1RfRkFMU0UoIWZpbGUuUmVhZFUzMigmc3Vic3RyZWFtX3Np
emUpKSkgewogICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0K
LSAgICBpZiAoUFJFRElDVF9GQUxTRShzdWJzdHJlYW1fc2l6ZSA+IGRhdGFfc2l6ZSAtIG9mZnNl
dCkpIHsKKyAgICBpZiAoUFJFRElDVF9GQUxTRShzdWJzdHJlYW1fc2l6ZSA+IGdseWZfdGFibGUt
PnRyYW5zZm9ybV9sZW5ndGggLSBvZmZzZXQpKSB7CiAgICAgICByZXR1cm4gRk9OVF9DT01QUkVT
U0lPTl9GQUlMVVJFKCk7CiAgICAgfQogICAgIHN1YnN0cmVhbXNbaV0gPSBzdGQ6Om1ha2VfcGFp
cihkYXRhICsgb2Zmc2V0LCBzdWJzdHJlYW1fc2l6ZSk7CkBAIC0zNzgsMTggKzQzNSwyMyBAQCBi
b29sIFJlY29uc3RydWN0R2x5Zihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YV9zaXpl
LAogICBCdWZmZXIgYmJveF9zdHJlYW0oc3Vic3RyZWFtc1s1XS5maXJzdCwgc3Vic3RyZWFtc1s1
XS5zZWNvbmQpOwogICBCdWZmZXIgaW5zdHJ1Y3Rpb25fc3RyZWFtKHN1YnN0cmVhbXNbNl0uZmly
c3QsIHN1YnN0cmVhbXNbNl0uc2Vjb25kKTsKIAotICBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4gbG9j
YV92YWx1ZXMobnVtX2dseXBocyArIDEpOworICBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4gbG9jYV92
YWx1ZXMoaW5mby0+bnVtX2dseXBocyArIDEpOwogICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBpbnQ+
IG5fcG9pbnRzX3ZlYzsKICAgc3RkOjp1bmlxdWVfcHRyPFBvaW50W10+IHBvaW50czsKICAgc2l6
ZV90IHBvaW50c19zaXplID0gMDsKLSAgdWludDMyX3QgbG9jYV9vZmZzZXQgPSAwOwogICBjb25z
dCB1aW50OF90KiBiYm94X2JpdG1hcCA9IGJib3hfc3RyZWFtLmJ1ZmZlcigpOwogICAvLyBTYWZl
IGJlY2F1c2UgbnVtX2dseXBocyBpcyBib3VuZGVkCi0gIHVuc2lnbmVkIGludCBiaXRtYXBfbGVu
Z3RoID0gKChudW1fZ2x5cGhzICsgMzEpID4+IDUpIDw8IDI7CisgIHVuc2lnbmVkIGludCBiaXRt
YXBfbGVuZ3RoID0gKChpbmZvLT5udW1fZ2x5cGhzICsgMzEpID4+IDUpIDw8IDI7CiAgIGlmICgh
YmJveF9zdHJlYW0uU2tpcChiaXRtYXBfbGVuZ3RoKSkgewogICAgIHJldHVybiBGT05UX0NPTVBS
RVNTSU9OX0ZBSUxVUkUoKTsKICAgfQotICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51
bV9nbHlwaHM7ICsraSkgeworCisgIC8vIFRlbXAgYnVmZmVyIGZvciBnbHlwaCdzLgorICBzaXpl
X3QgZ2x5cGhfYnVmX3NpemUgPSBrRGVmYXVsdEdseXBoQnVmOworICBzdGQ6OnVuaXF1ZV9wdHI8
dWludDhfdFtdPiBnbHlwaF9idWYobmV3IHVpbnQ4X3RbZ2x5cGhfYnVmX3NpemVdKTsKKworICBp
bmZvLT54X21pbnMucmVzaXplKGluZm8tPm51bV9nbHlwaHMpOworICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGluZm8tPm51bV9nbHlwaHM7ICsraSkgewogICAgIHNpemVfdCBnbHlwaF9z
aXplID0gMDsKICAgICB1aW50MTZfdCBuX2NvbnRvdXJzID0gMDsKICAgICBib29sIGhhdmVfYmJv
eCA9IGZhbHNlOwpAQCAtMzk5LDggKzQ2MSw2IEBAIGJvb2wgUmVjb25zdHJ1Y3RHbHlmKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhX3NpemUsCiAgICAgaWYgKFBSRURJQ1RfRkFMU0Uo
IW5fY29udG91cl9zdHJlYW0uUmVhZFUxNigmbl9jb250b3VycykpKSB7CiAgICAgICByZXR1cm4g
Rk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgfQotICAgIHVpbnQ4X3QqIGdseWZfZHN0
ID0gZHN0ICsgbG9jYV9vZmZzZXQ7Ci0gICAgc2l6ZV90IGdseWZfZHN0X3NpemUgPSBkc3Rfc2l6
ZSAtIGxvY2Ffb2Zmc2V0OwogCiAgICAgaWYgKG5fY29udG91cnMgPT0gMHhmZmZmKSB7CiAgICAg
ICAvLyBjb21wb3NpdGUgZ2x5cGgKQEAgLTQxMCwyNiArNDcwLDQyIEBAIGJvb2wgUmVjb25zdHJ1
Y3RHbHlmKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhX3NpemUsCiAgICAgICAgIC8v
IGNvbXBvc2l0ZSBnbHlwaHMgbXVzdCBoYXZlIGFuIGV4cGxpY2l0IGJib3gKICAgICAgICAgcmV0
dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgICAgfQotICAgICAgaWYgKFBSRURJ
Q1RfRkFMU0UoIVByb2Nlc3NDb21wb3NpdGUoJmNvbXBvc2l0ZV9zdHJlYW0sIGdseWZfZHN0LAot
ICAgICAgICAgICAgZ2x5Zl9kc3Rfc2l6ZSwgJmdseXBoX3NpemUsICZoYXZlX2luc3RydWN0aW9u
cykpKSB7Ci0gICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICAg
IH0KLSAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFiYm94X3N0cmVhbS5SZWFkKGdseWZfZHN0ICsg
MiwgOCkpKSB7CisKKyAgICAgIHNpemVfdCBjb21wb3NpdGVfc2l6ZTsKKyAgICAgIGlmIChQUkVE
SUNUX0ZBTFNFKCFTaXplT2ZDb21wb3NpdGUoY29tcG9zaXRlX3N0cmVhbSwgJmNvbXBvc2l0ZV9z
aXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGF2ZV9pbnN0
cnVjdGlvbnMpKSkgewogICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7
CiAgICAgICB9CiAgICAgICBpZiAoaGF2ZV9pbnN0cnVjdGlvbnMpIHsKICAgICAgICAgaWYgKFBS
RURJQ1RfRkFMU0UoIVJlYWQyNTVVU2hvcnQoJmdseXBoX3N0cmVhbSwgJmluc3RydWN0aW9uX3Np
emUpKSkgewogICAgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAg
ICAgICAgfQotICAgICAgICBpZiAoUFJFRElDVF9GQUxTRShpbnN0cnVjdGlvbl9zaXplICsgMiA+
IGdseWZfZHN0X3NpemUgLSBnbHlwaF9zaXplKSkgewotICAgICAgICAgIHJldHVybiBGT05UX0NP
TVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICAgICAgfQotICAgICAgICBTdG9yZTE2KGdseWZfZHN0
LCBnbHlwaF9zaXplLCBpbnN0cnVjdGlvbl9zaXplKTsKLSAgICAgICAgaWYgKFBSRURJQ1RfRkFM
U0UoIWluc3RydWN0aW9uX3N0cmVhbS5SZWFkKGdseWZfZHN0ICsgZ2x5cGhfc2l6ZSArIDIsCisg
ICAgICB9CisKKyAgICAgIHNpemVfdCBzaXplX25lZWRlZCA9IDEyICsgY29tcG9zaXRlX3NpemUg
KyBpbnN0cnVjdGlvbl9zaXplOworICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoZ2x5cGhfYnVmX3Np
emUgPCBzaXplX25lZWRlZCkpIHsKKyAgICAgICAgZ2x5cGhfYnVmLnJlc2V0KG5ldyB1aW50OF90
W3NpemVfbmVlZGVkXSk7CisgICAgICAgIGdseXBoX2J1Zl9zaXplID0gc2l6ZV9uZWVkZWQ7Cisg
ICAgICB9CisKKyAgICAgIGdseXBoX3NpemUgPSBTdG9yZTE2KGdseXBoX2J1Zi5nZXQoKSwgZ2x5
cGhfc2l6ZSwgbl9jb250b3Vycyk7CisgICAgICBpZiAoUFJFRElDVF9GQUxTRSghYmJveF9zdHJl
YW0uUmVhZChnbHlwaF9idWYuZ2V0KCkgKyBnbHlwaF9zaXplLCA4KSkpIHsKKyAgICAgICAgcmV0
dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICAgICAgfQorICAgICAgZ2x5cGhfc2l6
ZSArPSA4OworCisgICAgICBpZiAoUFJFRElDVF9GQUxTRSghY29tcG9zaXRlX3N0cmVhbS5SZWFk
KGdseXBoX2J1Zi5nZXQoKSArIGdseXBoX3NpemUsCisgICAgICAgICAgICBjb21wb3NpdGVfc2l6
ZSkpKSB7CisgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICAg
IH0KKyAgICAgIGdseXBoX3NpemUgKz0gY29tcG9zaXRlX3NpemU7CisgICAgICBpZiAoaGF2ZV9p
bnN0cnVjdGlvbnMpIHsKKyAgICAgICAgZ2x5cGhfc2l6ZSA9IFN0b3JlMTYoZ2x5cGhfYnVmLmdl
dCgpLCBnbHlwaF9zaXplLCBpbnN0cnVjdGlvbl9zaXplKTsKKyAgICAgICAgaWYgKFBSRURJQ1Rf
RkFMU0UoIWluc3RydWN0aW9uX3N0cmVhbS5SZWFkKGdseXBoX2J1Zi5nZXQoKSArIGdseXBoX3Np
emUsCiAgICAgICAgICAgICAgIGluc3RydWN0aW9uX3NpemUpKSkgewogICAgICAgICAgIHJldHVy
biBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgICAgICAgfQotICAgICAgICBnbHlwaF9z
aXplICs9IGluc3RydWN0aW9uX3NpemUgKyAyOworICAgICAgICBnbHlwaF9zaXplICs9IGluc3Ry
dWN0aW9uX3NpemU7CiAgICAgICB9CiAgICAgfSBlbHNlIGlmIChuX2NvbnRvdXJzID4gMCkgewog
ICAgICAgLy8gc2ltcGxlIGdseXBoCkBAIC00NjUsMTQxICs1NDEsMTEwIEBAIGJvb2wgUmVjb25z
dHJ1Y3RHbHlmKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhX3NpemUsCiAgICAgICAg
ICAgdG90YWxfbl9wb2ludHMsIHBvaW50cy5nZXQoKSwgJnRyaXBsZXRfYnl0ZXNfY29uc3VtZWQp
KSkgewogICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgICB9
Ci0gICAgICBjb25zdCB1aW50MzJfdCBoZWFkZXJfYW5kX2VuZHB0c19jb250b3Vyc19zaXplID0K
LSAgICAgICAgICBrRW5kUHRzT2ZDb250b3Vyc09mZnNldCArIDIgKiBuX2NvbnRvdXJzOwotICAg
ICAgaWYgKFBSRURJQ1RfRkFMU0UoZ2x5Zl9kc3Rfc2l6ZSA8IGhlYWRlcl9hbmRfZW5kcHRzX2Nv
bnRvdXJzX3NpemUpKSB7CisgICAgICBpZiAoUFJFRElDVF9GQUxTRSghZmxhZ19zdHJlYW0uU2tp
cChmbGFnX3NpemUpKSkgewogICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJF
KCk7CiAgICAgICB9Ci0gICAgICBTdG9yZTE2KGdseWZfZHN0LCAwLCBuX2NvbnRvdXJzKTsKKyAg
ICAgIGlmIChQUkVESUNUX0ZBTFNFKCFnbHlwaF9zdHJlYW0uU2tpcCh0cmlwbGV0X2J5dGVzX2Nv
bnN1bWVkKSkpIHsKKyAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwor
ICAgICAgfQorICAgICAgdW5zaWduZWQgaW50IGluc3RydWN0aW9uX3NpemU7CisgICAgICBpZiAo
UFJFRElDVF9GQUxTRSghUmVhZDI1NVVTaG9ydCgmZ2x5cGhfc3RyZWFtLCAmaW5zdHJ1Y3Rpb25f
c2l6ZSkpKSB7CisgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAg
ICAgIH0KKworICAgICAgaWYgKFBSRURJQ1RfRkFMU0UodG90YWxfbl9wb2ludHMgPj0gKDEgPDwg
MjcpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBpbnN0cnVjdGlvbl9zaXplID49ICgxIDw8
IDMwKSkpIHsKKyAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICAg
ICAgfQorICAgICAgc2l6ZV90IHNpemVfbmVlZGVkID0gMTIgKyAyICogbl9jb250b3VycyArIDUg
KiB0b3RhbF9uX3BvaW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnN0cnVjdGlv
bl9zaXplOworICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoZ2x5cGhfYnVmX3NpemUgPCBzaXplX25l
ZWRlZCkpIHsKKyAgICAgICAgZ2x5cGhfYnVmLnJlc2V0KG5ldyB1aW50OF90W3NpemVfbmVlZGVk
XSk7CisgICAgICAgIGdseXBoX2J1Zl9zaXplID0gc2l6ZV9uZWVkZWQ7CisgICAgICB9CisKKyAg
ICAgIGdseXBoX3NpemUgPSBTdG9yZTE2KGdseXBoX2J1Zi5nZXQoKSwgZ2x5cGhfc2l6ZSwgbl9j
b250b3Vycyk7CiAgICAgICBpZiAoaGF2ZV9iYm94KSB7Ci0gICAgICAgIGlmIChQUkVESUNUX0ZB
TFNFKCFiYm94X3N0cmVhbS5SZWFkKGdseWZfZHN0ICsgMiwgOCkpKSB7CisgICAgICAgIGlmIChQ
UkVESUNUX0ZBTFNFKCFiYm94X3N0cmVhbS5SZWFkKGdseXBoX2J1Zi5nZXQoKSArIGdseXBoX3Np
emUsIDgpKSkgewogICAgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsK
ICAgICAgICAgfQogICAgICAgfSBlbHNlIHsKLSAgICAgICAgQ29tcHV0ZUJib3godG90YWxfbl9w
b2ludHMsIHBvaW50cy5nZXQoKSwgZ2x5Zl9kc3QpOworICAgICAgICBDb21wdXRlQmJveCh0b3Rh
bF9uX3BvaW50cywgcG9pbnRzLmdldCgpLCBnbHlwaF9idWYuZ2V0KCkpOwogICAgICAgfQotICAg
ICAgc2l6ZV90IG9mZnNldCA9IGtFbmRQdHNPZkNvbnRvdXJzT2Zmc2V0OworICAgICAgZ2x5cGhf
c2l6ZSA9IGtFbmRQdHNPZkNvbnRvdXJzT2Zmc2V0OwogICAgICAgaW50IGVuZF9wb2ludCA9IC0x
OwogICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29udG91cl9peCA9IDA7IGNvbnRvdXJfaXggPCBu
X2NvbnRvdXJzOyArK2NvbnRvdXJfaXgpIHsKICAgICAgICAgZW5kX3BvaW50ICs9IG5fcG9pbnRz
X3ZlY1tjb250b3VyX2l4XTsKICAgICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoZW5kX3BvaW50ID49
IDY1NTM2KSkgewogICAgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsK
ICAgICAgICAgfQotICAgICAgICBvZmZzZXQgPSBTdG9yZTE2KGdseWZfZHN0LCBvZmZzZXQsIGVu
ZF9wb2ludCk7Ci0gICAgICB9Ci0gICAgICBpZiAoUFJFRElDVF9GQUxTRSghZmxhZ19zdHJlYW0u
U2tpcChmbGFnX3NpemUpKSkgewotICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlM
VVJFKCk7CisgICAgICAgIGdseXBoX3NpemUgPSBTdG9yZTE2KGdseXBoX2J1Zi5nZXQoKSwgZ2x5
cGhfc2l6ZSwgZW5kX3BvaW50KTsKICAgICAgIH0KLSAgICAgIGlmIChQUkVESUNUX0ZBTFNFKCFn
bHlwaF9zdHJlYW0uU2tpcCh0cmlwbGV0X2J5dGVzX2NvbnN1bWVkKSkpIHsKLSAgICAgICAgcmV0
dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwotICAgICAgfQotICAgICAgdW5zaWduZWQg
aW50IGluc3RydWN0aW9uX3NpemU7Ci0gICAgICBpZiAoUFJFRElDVF9GQUxTRSghUmVhZDI1NVVT
aG9ydCgmZ2x5cGhfc3RyZWFtLCAmaW5zdHJ1Y3Rpb25fc2l6ZSkpKSB7Ci0gICAgICAgIHJldHVy
biBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICAgIH0KLSAgICAgIGlmIChQUkVESUNU
X0ZBTFNFKGdseWZfZHN0X3NpemUgLSBoZWFkZXJfYW5kX2VuZHB0c19jb250b3Vyc19zaXplIDwK
LSAgICAgICAgICBpbnN0cnVjdGlvbl9zaXplICsgMikpIHsKLSAgICAgICAgcmV0dXJuIEZPTlRf
Q09NUFJFU1NJT05fRkFJTFVSRSgpOwotICAgICAgfQotICAgICAgdWludDhfdCogaW5zdHJ1Y3Rp
b25fZHN0ID0gZ2x5Zl9kc3QgKyBoZWFkZXJfYW5kX2VuZHB0c19jb250b3Vyc19zaXplOwotICAg
ICAgU3RvcmUxNihpbnN0cnVjdGlvbl9kc3QsIDAsIGluc3RydWN0aW9uX3NpemUpOwotICAgICAg
aWYgKFBSRURJQ1RfRkFMU0UoCi0gICAgICAgICAgIWluc3RydWN0aW9uX3N0cmVhbS5SZWFkKGlu
c3RydWN0aW9uX2RzdCArIDIsIGluc3RydWN0aW9uX3NpemUpKSkgeworCisgICAgICBnbHlwaF9z
aXplID0gU3RvcmUxNihnbHlwaF9idWYuZ2V0KCksIGdseXBoX3NpemUsIGluc3RydWN0aW9uX3Np
emUpOworICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoIWluc3RydWN0aW9uX3N0cmVhbS5SZWFkKGds
eXBoX2J1Zi5nZXQoKSArIGdseXBoX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25fc2l6ZSkpKSB7CiAgICAgICAgIHJldHVy
biBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgICAgIH0KKyAgICAgIGdseXBoX3NpemUg
Kz0gaW5zdHJ1Y3Rpb25fc2l6ZTsKKwogICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoIVN0b3JlUG9p
bnRzKHRvdGFsX25fcG9pbnRzLCBwb2ludHMuZ2V0KCksIG5fY29udG91cnMsCi0gICAgICAgICAg
ICBpbnN0cnVjdGlvbl9zaXplLCBnbHlmX2RzdCwgZ2x5Zl9kc3Rfc2l6ZSwgJmdseXBoX3NpemUp
KSkgeworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25fc2l6ZSwgZ2x5cGhfYnVmLmdldCgpLCBnbHlw
aF9idWZfc2l6ZSwgJmdseXBoX3NpemUpKSkgewogICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVT
U0lPTl9GQUlMVVJFKCk7CiAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdseXBoX3NpemUg
PSAwOwogICAgIH0KLSAgICBsb2NhX3ZhbHVlc1tpXSA9IGxvY2Ffb2Zmc2V0OwotICAgIGlmIChQ
UkVESUNUX0ZBTFNFKGdseXBoX3NpemUgKyAzIDwgZ2x5cGhfc2l6ZSkpIHsKKworICAgIGxvY2Ff
dmFsdWVzW2ldID0gb3V0LT5TaXplKCkgLSBnbHlmX3N0YXJ0OworICAgIGlmIChQUkVESUNUX0ZB
TFNFKCFvdXQtPldyaXRlKGdseXBoX2J1Zi5nZXQoKSwgZ2x5cGhfc2l6ZSkpKSB7CiAgICAgICBy
ZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgfQotICAgIGdseXBoX3NpemUg
PSBSb3VuZDQoZ2x5cGhfc2l6ZSk7Ci0gICAgaWYgKFBSRURJQ1RfRkFMU0UoZ2x5cGhfc2l6ZSA+
IGRzdF9zaXplIC0gbG9jYV9vZmZzZXQpKSB7Ci0gICAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBw
ZW4sIGJ1dCB0aGlzIHRlc3QgZGVmZW5zaXZlbHkgbWFpbnRhaW5zIHRoZQotICAgICAgLy8gaW52
YXJpYW50IHRoYXQgbG9jYV9vZmZzZXQgPD0gZHN0X3NpemUuCisKKyAgICAvLyBUT0RPKHVzZXIp
IE9sZCBjb2RlIGFsaWduZWQgZ2x5cGhzIC4uLiBidXQgZG8gd2UgYWN0dWFsbHkgbmVlZCB0bz8K
KyAgICBpZiAoUFJFRElDVF9GQUxTRSghUGFkNChvdXQpKSkgewogICAgICAgcmV0dXJuIEZPTlRf
Q09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0KLSAgICBsb2NhX29mZnNldCArPSBnbHlwaF9z
aXplOwotICB9Ci0gIGxvY2FfdmFsdWVzW251bV9nbHlwaHNdID0gbG9jYV9vZmZzZXQ7Ci0gIHJl
dHVybiBTdG9yZUxvY2EobG9jYV92YWx1ZXMsIGluZGV4X2Zvcm1hdCwgbG9jYV9idWYsIGxvY2Ff
c2l6ZSk7Ci19CiAKLS8vIFRoaXMgaXMgbGluZWFyIHNlYXJjaCwgYnV0IGNvdWxkIGJlIGNoYW5n
ZWQgdG8gYmluYXJ5IGJlY2F1c2Ugd2UKLS8vIGRvIGhhdmUgYSBndWFyYW50ZWUgdGhhdCB0aGUg
dGFibGVzIGFyZSBzb3J0ZWQgYnkgdGFnLiBCdXQgdGhlIHRvdGFsCi0vLyBjcHUgdGltZSBpcyBl
eHBlY3RlZCB0byBiZSB2ZXJ5IHNtYWxsIGluIGFueSBjYXNlLgotY29uc3QgVGFibGUqIEZpbmRU
YWJsZShjb25zdCBzdGQ6OnZlY3RvcjxUYWJsZT4mIHRhYmxlcywgdWludDMyX3QgdGFnKSB7Ci0g
IHNpemVfdCBuX3RhYmxlcyA9IHRhYmxlcy5zaXplKCk7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbl90YWJsZXM7ICsraSkgewotICAgIGlmICh0YWJsZXNbaV0udGFnID09IHRhZykgewotICAg
ICAgcmV0dXJuICZ0YWJsZXNbaV07CisgICAgKmdseWZfY2hlY2tzdW0gKz0gQ29tcHV0ZVVMb25n
U3VtKGdseXBoX2J1Zi5nZXQoKSwgZ2x5cGhfc2l6ZSk7CisKKyAgICAvLyBXZSBtYXkgbmVlZCB4
X21pbiB0byByZWNvbnN0cnVjdCAnaG10eCcKKyAgICBpZiAobl9jb250b3VycyA+IDApIHsKKyAg
ICAgIEJ1ZmZlciB4X21pbl9idWYoZ2x5cGhfYnVmLmdldCgpICsgMiwgMik7CisgICAgICBpZiAo
UFJFRElDVF9GQUxTRSgheF9taW5fYnVmLlJlYWRTMTYoJmluZm8tPnhfbWluc1tpXSkpKSB7Cisg
ICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICAgIH0KICAgICB9
CiAgIH0KLSAgcmV0dXJuIE5VTEw7Ci19CiAKLS8vIGh0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20v
dHlwb2dyYXBoeS9vdHNwZWMvbWF4cC5odG0KLWJvb2wgUmVhZE51bUdseXBocyhjb25zdCBUYWJs
ZSogbWF4cF90YWJsZSwKLSAgICAgICAgICAgICAgICAgICB1aW50OF90KiBkc3QsIHNpemVfdCBk
c3RfbGVuZ3RoLCB1aW50MTZfdCogbnVtX2dseXBocykgewotICBpZiAoUFJFRElDVF9GQUxTRShz
dGF0aWNfY2FzdDx1aW50NjRfdD4obWF4cF90YWJsZS0+ZHN0X29mZnNldCArCi0gICAgICBtYXhw
X3RhYmxlLT5kc3RfbGVuZ3RoKSA+IGRzdF9sZW5ndGgpKSB7Ci0gICAgcmV0dXJuIEZPTlRfQ09N
UFJFU1NJT05fRkFJTFVSRSgpOwotICB9Ci0gIEJ1ZmZlciBidWZmZXIoZHN0ICsgbWF4cF90YWJs
ZS0+ZHN0X29mZnNldCwgbWF4cF90YWJsZS0+ZHN0X2xlbmd0aCk7Ci0gIC8vIFNraXAgNCB0byBy
ZWFjaCAnbWF4cCcgbnVtR2x5cGhzCi0gIGlmIChQUkVESUNUX0ZBTFNFKCFidWZmZXIuU2tpcCg0
KSB8fCAhYnVmZmVyLlJlYWRVMTYobnVtX2dseXBocykpKSB7CisgIC8vIGdseWZfdGFibGUgZHN0
X29mZnNldCB3YXMgc2V0IGJ5IFJlY29uc3RydWN0Rm9udAorICBnbHlmX3RhYmxlLT5kc3RfbGVu
Z3RoID0gb3V0LT5TaXplKCkgLSBnbHlmX3RhYmxlLT5kc3Rfb2Zmc2V0OworICBsb2NhX3RhYmxl
LT5kc3Rfb2Zmc2V0ID0gb3V0LT5TaXplKCk7CisgIC8vIGxvY2Fbbl0gd2lsbCBiZSBlcXVhbCB0
aGUgbGVuZ3RoIG9mIHRoZSBnbHlwaCBkYXRhICgnZ2x5ZicpIHRhYmxlCisgIGxvY2FfdmFsdWVz
W2luZm8tPm51bV9nbHlwaHNdID0gZ2x5Zl90YWJsZS0+ZHN0X2xlbmd0aDsKKyAgaWYgKFBSRURJ
Q1RfRkFMU0UoIVN0b3JlTG9jYShsb2NhX3ZhbHVlcywgaW5mby0+aW5kZXhfZm9ybWF0LCBsb2Nh
X2NoZWNrc3VtLAorICAgICAgb3V0KSkpIHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9G
QUlMVVJFKCk7CiAgIH0KLSAgcmV0dXJuIHRydWU7Ci19CisgIGxvY2FfdGFibGUtPmRzdF9sZW5n
dGggPSBvdXQtPlNpemUoKSAtIGxvY2FfdGFibGUtPmRzdF9vZmZzZXQ7CiAKLS8vIEdldCBudW1i
ZXJPZkhNZXRyaWNzLCBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVj
L2hoZWEuaHRtCi1ib29sIFJlYWROdW1ITWV0cmljcyhjb25zdCBUYWJsZSogaGhlYV90YWJsZSwK
LSAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdCwgc2l6ZV90IGRzdF9sZW5ndGgsIHVp
bnQxNl90KiBudW1faG1ldHJpY3MpIHsKLSAgaWYgKFBSRURJQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KGhoZWFfdGFibGUtPmRzdF9vZmZzZXQgKwotICAgICAgaGhlYV90YWJsZS0+ZHN0
X2xlbmd0aCkgPiBkc3RfbGVuZ3RoKSkgewotICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZB
SUxVUkUoKTsKLSAgfQotICAvLyBTa2lwIDM0IHRvIHJlYWNoICdoaGVhJyBudW1iZXJPZkhNZXRy
aWNzCi0gIEJ1ZmZlciBidWZmZXIoZHN0ICsgaGhlYV90YWJsZS0+ZHN0X29mZnNldCwgaGhlYV90
YWJsZS0+ZHN0X2xlbmd0aCk7Ci0gIGlmIChQUkVESUNUX0ZBTFNFKCFidWZmZXIuU2tpcCgzNCkg
fHwgIWJ1ZmZlci5SZWFkVTE2KG51bV9obWV0cmljcykpKSB7Ci0gICAgcmV0dXJuIEZPTlRfQ09N
UFJFU1NJT05fRkFJTFVSRSgpOwotICB9CiAgIHJldHVybiB0cnVlOwogfQogCi0vLyB4X21pbiBm
b3IgZ2x5cGg7IGh0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9vdHNwZWMvZ2x5
Zi5odG0KLWJvb2wgUmVhZEdseXBoWE1pbihCdWZmZXIqIGdseWZfYnVmZiwgQnVmZmVyKiBsb2Nh
X2J1ZmYsIGludDE2X3QgbG9jYV9mb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgdWludDE2X3Qg
aW5kZXgsIGludDE2X3QqIHhfbWluKSB7Ci0gIHVpbnQzMl90IG9mZnNldDEsIG9mZnNldDI7Ci0g
IGxvY2FfYnVmZi0+c2V0X29mZnNldCgobG9jYV9mb3JtYXQgPT0gMCA/IDIgOiA0KSAqIGluZGV4
KTsKLSAgaWYgKGxvY2FfZm9ybWF0ID09IDApIHsKLSAgICB1aW50MTZfdCB0bXAxLCB0bXAyOwot
ICAgIGlmIChQUkVESUNUX0ZBTFNFKCFsb2NhX2J1ZmYtPlJlYWRVMTYoJnRtcDEpIHx8Ci0gICAg
ICAgICAgICAgICAgICAgICAgIWxvY2FfYnVmZi0+UmVhZFUxNigmdG1wMikpKSB7Ci0gICAgICBy
ZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CitUYWJsZSogRmluZFRhYmxlKHN0ZDo6
dmVjdG9yPFRhYmxlKj4qIHRhYmxlcywgdWludDMyX3QgdGFnKSB7CisgIGZvciAoVGFibGUqIHRh
YmxlIDogKnRhYmxlcykgeworICAgIGlmICh0YWJsZS0+dGFnID09IHRhZykgeworICAgICAgcmV0
dXJuIHRhYmxlOwogICAgIH0KLSAgICAvLyBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9n
cmFwaHkvb3RzcGVjL2xvY2EuaHRtCi0gICAgLy8gIlRoZSBhY3R1YWwgbG9jYWwgb2Zmc2V0IGRp
dmlkZWQgYnkgMiBpcyBzdG9yZWQuIgotICAgIG9mZnNldDEgPSB0bXAxICogMjsKLSAgICBvZmZz
ZXQyID0gdG1wMiAqIDI7Ci0gIH0gZWxzZSBpZiAoUFJFRElDVF9GQUxTRSghbG9jYV9idWZmLT5S
ZWFkVTMyKCZvZmZzZXQxKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIWxvY2FfYnVm
Zi0+UmVhZFUzMigmb2Zmc2V0MikpKSB7Ci0gICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJ
TFVSRSgpOwogICB9CisgIHJldHVybiBOVUxMOworfQogCi0gIGlmIChvZmZzZXQxICE9IG9mZnNl
dDIpIHsKLSAgICBnbHlmX2J1ZmYtPnNldF9vZmZzZXQob2Zmc2V0MSArIDIpOwotICAgIGlmICgh
Z2x5Zl9idWZmLT5SZWFkUzE2KHhfbWluKSkgewotICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJ
T05fRkFJTFVSRSgpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAqeF9taW4gPSAwOworLy8gR2V0
IG51bWJlck9mSE1ldHJpY3MsIGh0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9v
dHNwZWMvaGhlYS5odG0KK2Jvb2wgUmVhZE51bUhNZXRyaWNzKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBkYXRhX3NpemUsCisgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCogbnVtX2ht
ZXRyaWNzKSB7CisgIC8vIFNraXAgMzQgdG8gcmVhY2ggJ2hoZWEnIG51bWJlck9mSE1ldHJpY3MK
KyAgQnVmZmVyIGJ1ZmZlcihkYXRhLCBkYXRhX3NpemUpOworICBpZiAoUFJFRElDVF9GQUxTRSgh
YnVmZmVyLlNraXAoMzQpIHx8ICFidWZmZXIuUmVhZFUxNihudW1faG1ldHJpY3MpKSkgeworICAg
IHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQogICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTYwNyw0MCArNjUyLDExIEBAIGJvb2wgUmVhZEdseXBoWE1pbihCdWZmZXIqIGdseWZf
YnVmZiwgQnVmZmVyKiBsb2NhX2J1ZmYsIGludDE2X3QgbG9jYV9mb3JtYXQsCiAvLyBodHRwOi8v
ZGV2LnczLm9yZy93ZWJmb250cy9XT0ZGMi9zcGVjL092ZXJ2aWV3Lmh0bWwjaG10eF90YWJsZV9m
b3JtYXQKIGJvb2wgUmVjb25zdHJ1Y3RUcmFuc2Zvcm1lZEhtdHgoY29uc3QgdWludDhfdCogdHJh
bnNmb3JtZWRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdHJh
bnNmb3JtZWRfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGFi
bGUqIGdseWZfdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRh
YmxlKiBoaGVhX3RhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
YWJsZSogaG10eF90YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VGFibGUqIGxvY2FfdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRhYmxlKiBtYXhwX3RhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
OF90KiBkc3QsIHNpemVfdCBkc3RfbGVuZ3RoKSB7Ci0gIGlmIChQUkVESUNUX0ZBTFNFKCFnbHlm
X3RhYmxlKSkgewotICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQot
ICBpZiAoUFJFRElDVF9GQUxTRSghaGhlYV90YWJsZSkpIHsKLSAgICByZXR1cm4gRk9OVF9DT01Q
UkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAgaWYgKFBSRURJQ1RfRkFMU0UoIWhtdHhfdGFibGUp
KSB7Ci0gICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwotICB9Ci0gIGlmIChQ
UkVESUNUX0ZBTFNFKCFsb2NhX3RhYmxlKSkgewotICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9O
X0ZBSUxVUkUoKTsKLSAgfQotICBpZiAoUFJFRElDVF9GQUxTRSghbWF4cF90YWJsZSkpIHsKLSAg
ICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLQotICB1aW50MTZfdCBu
dW1fZ2x5cGhzLCBudW1faG1ldHJpY3M7Ci0gIGlmICghUmVhZE51bUdseXBocyhtYXhwX3RhYmxl
LCBkc3QsIGRzdF9sZW5ndGgsICZudW1fZ2x5cGhzKSkgewotICAgIHJldHVybiBGT05UX0NPTVBS
RVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQotICBpZiAoIVJlYWROdW1ITWV0cmljcyhoaGVhX3RhYmxl
LCBkc3QsIGRzdF9sZW5ndGgsICZudW1faG1ldHJpY3MpKSB7Ci0gICAgcmV0dXJuIEZPTlRfQ09N
UFJFU1NJT05fRkFJTFVSRSgpOwotICB9Ci0KLSAgaWYgKFBSRURJQ1RfRkFMU0Uoc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KGhtdHhfdGFibGUtPmRzdF9vZmZzZXQgKwotICAgICAgaG10eF90YWJsZS0+
ZHN0X2xlbmd0aCkgPiBkc3RfbGVuZ3RoKSkgewotICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9O
X0ZBSUxVUkUoKTsKLSAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZf
dCBudW1fZ2x5cGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBu
dW1faG1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6
dmVjdG9yPGludDE2X3Q+JiB4X21pbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90KiBjaGVja3N1bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09G
RjJPdXQqIG91dCkgewogICBCdWZmZXIgaG10eF9idWZmX2luKHRyYW5zZm9ybWVkX2J1ZiwgdHJh
bnNmb3JtZWRfc2l6ZSk7CiAKICAgdWludDhfdCBobXR4X2ZsYWdzOwpAQCAtNjU4LDIzICs2NzQs
MTYgQEAgYm9vbCBSZWNvbnN0cnVjdFRyYW5zZm9ybWVkSG10eChjb25zdCB1aW50OF90KiB0cmFu
c2Zvcm1lZF9idWYsCiAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9
CiAKLSAgLy8gZ2x5Zi9sb2NhIGFyZSBkb25lIGFscmVhZHkgc28gd2UgY2FuIHVzZSB0aGVtIHRv
IHJlY292ZXIgeF9taW4ncwotICBpZiAoUFJFRElDVF9GQUxTRShzdGF0aWNfY2FzdDx1aW50NjRf
dD4oZ2x5Zl90YWJsZS0+ZHN0X29mZnNldCArCi0gICAgICBnbHlmX3RhYmxlLT5kc3RfbGVuZ3Ro
KSA+IGRzdF9sZW5ndGgpKSB7Ci0gICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgp
OwotICB9Ci0gIGlmIChQUkVESUNUX0ZBTFNFKHN0YXRpY19jYXN0PHVpbnQ2NF90Pihsb2NhX3Rh
YmxlLT5kc3Rfb2Zmc2V0ICsKLSAgICAgIGxvY2FfdGFibGUtPmRzdF9sZW5ndGgpID4gZHN0X2xl
bmd0aCkpIHsKKyAgYXNzZXJ0KHhfbWlucy5zaXplKCkgPT0gbnVtX2dseXBocyk7CisKKyAgLy8g
bnVtX2dseXBocyAwIGlzIE9LIGlmIHRoZXJlIGlzIG5vICdnbHlmJyBidXQgY2Fubm90IHRoZW4g
eGZvcm0gJ2htdHgnLgorICBpZiAoUFJFRElDVF9GQUxTRShudW1faG1ldHJpY3MgPiBudW1fZ2x5
cGhzKSkgewogICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQotICBC
dWZmZXIgZ2x5Zl9idWZmKGRzdCArIGdseWZfdGFibGUtPmRzdF9vZmZzZXQsIGdseWZfdGFibGUt
PmRzdF9sZW5ndGgpOwotICBCdWZmZXIgbG9jYV9idWZmKGRzdCArIGxvY2FfdGFibGUtPmRzdF9v
ZmZzZXQsIGxvY2FfdGFibGUtPmRzdF9sZW5ndGgpOwotICBpbnQxNl90IGxvY2FfZm9ybWF0Owot
ICBpZiAobG9jYV90YWJsZS0+ZHN0X2xlbmd0aCA9PSAyICogKG51bV9nbHlwaHMgKyAxKSkgewot
ICAgIGxvY2FfZm9ybWF0ID0gMDsKLSAgfSBlbHNlIGlmIChsb2NhX3RhYmxlLT5kc3RfbGVuZ3Ro
ID09IDQgKiAobnVtX2dseXBocyArIDEpKSB7Ci0gICAgbG9jYV9mb3JtYXQgPSAxOwotICB9IGVs
c2UgeworCisgIC8vIGh0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9vdHNwZWMv
aG10eC5odG0KKyAgLy8gIi4uLm9ubHkgb25lIGVudHJ5IG5lZWQgYmUgaW4gdGhlIGFycmF5LCBi
dXQgdGhhdCBlbnRyeSBpcyByZXF1aXJlZC4iCisgIGlmIChQUkVESUNUX0ZBTFNFKG51bV9obWV0
cmljcyA8IDEpKSB7CiAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9
CiAKQEAgLTY5MywxMCArNzAyLDcgQEAgYm9vbCBSZWNvbnN0cnVjdFRyYW5zZm9ybWVkSG10eChj
b25zdCB1aW50OF90KiB0cmFuc2Zvcm1lZF9idWYsCiAgICAgICAgIHJldHVybiBGT05UX0NPTVBS
RVNTSU9OX0ZBSUxVUkUoKTsKICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgaWYgKFBSRURJ
Q1RfRkFMU0UoIVJlYWRHbHlwaFhNaW4oJmdseWZfYnVmZiwgJmxvY2FfYnVmZiwgbG9jYV9mb3Jt
YXQsIGksCi0gICAgICAgICAgJmxzYikpKSB7Ci0gICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNT
SU9OX0ZBSUxVUkUoKTsKLSAgICAgIH0KKyAgICAgIGxzYiA9IHhfbWluc1tpXTsKICAgICB9CiAg
ICAgbHNicy5wdXNoX2JhY2sobHNiKTsKICAgfQpAQCAtNzA4LDI1ICs3MTQsMTYgQEAgYm9vbCBS
ZWNvbnN0cnVjdFRyYW5zZm9ybWVkSG10eChjb25zdCB1aW50OF90KiB0cmFuc2Zvcm1lZF9idWYs
CiAgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgICAgIH0KICAg
ICB9IGVsc2UgewotICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoIVJlYWRHbHlwaFhNaW4oJmdseWZf
YnVmZiwgJmxvY2FfYnVmZiwgbG9jYV9mb3JtYXQsIGksCi0gICAgICAgICAgJmxzYikpKSB7Ci0g
ICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICAgIH0KKyAgICAg
IGxzYiA9IHhfbWluc1tpXTsKICAgICB9CiAgICAgbHNicy5wdXNoX2JhY2sobHNiKTsKICAgfQog
CiAgIC8vIGJha2UgbWUgYSBzaGlueSBuZXcgaG10eCB0YWJsZQogICB1aW50MzJfdCBobXR4X291
dHB1dF9zaXplID0gMiAqIG51bV9nbHlwaHMgKyAyICogbnVtX2htZXRyaWNzOwotICBpZiAoaG10
eF9vdXRwdXRfc2l6ZSA+IGhtdHhfdGFibGUtPmRzdF9sZW5ndGgpIHsKLSAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0KLSAgaWYgKFBSRURJQ1RfRkFMU0Uoc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KGhtdHhfdGFibGUtPmRzdF9vZmZzZXQgKwotICAgICAgaG10eF90YWJs
ZS0+ZHN0X2xlbmd0aCkgPiBkc3RfbGVuZ3RoKSkgewotICAgIHJldHVybiBGT05UX0NPTVBSRVNT
SU9OX0ZBSUxVUkUoKTsKLSAgfQotCi0gIHNpemVfdCBkc3Rfb2Zmc2V0ID0gaG10eF90YWJsZS0+
ZHN0X29mZnNldDsKKyAgc3RkOjp2ZWN0b3I8dWludDhfdD4gaG10eF90YWJsZShobXR4X291dHB1
dF9zaXplKTsKKyAgdWludDhfdCogZHN0ID0gJmhtdHhfdGFibGVbMF07CisgIHNpemVfdCBkc3Rf
b2Zmc2V0ID0gMDsKICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bV9nbHlwaHM7IGkrKykg
ewogICAgIGlmIChpIDwgbnVtX2htZXRyaWNzKSB7CiAgICAgICBTdG9yZTE2KGFkdmFuY2Vfd2lk
dGhzW2ldLCAmZHN0X29mZnNldCwgZHN0KTsKQEAgLTczNCwxNTIgKzczMSwxNCBAQCBib29sIFJl
Y29uc3RydWN0VHJhbnNmb3JtZWRIbXR4KGNvbnN0IHVpbnQ4X3QqIHRyYW5zZm9ybWVkX2J1ZiwK
ICAgICBTdG9yZTE2KGxzYnNbaV0sICZkc3Rfb2Zmc2V0LCBkc3QpOwogICB9CiAKLSAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgUmVjb25zdHJ1Y3RUcmFuc2Zvcm1lZEdseWYoY29uc3QgdWludDhf
dCogdHJhbnNmb3JtZWRfYnVmLAotICAgIHNpemVfdCB0cmFuc2Zvcm1lZF9zaXplLCBjb25zdCBU
YWJsZSogZ2x5Zl90YWJsZSwgY29uc3QgVGFibGUqIGxvY2FfdGFibGUsCi0gICAgdWludDhfdCog
ZHN0LCBzaXplX3QgZHN0X2xlbmd0aCkgewotICBpZiAoUFJFRElDVF9GQUxTRShnbHlmX3RhYmxl
ID09IE5VTEwgfHwgbG9jYV90YWJsZSA9PSBOVUxMKSkgewotICAgIHJldHVybiBGT05UX0NPTVBS
RVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQotICBpZiAoUFJFRElDVF9GQUxTRShzdGF0aWNfY2FzdDx1
aW50NjRfdD4oZ2x5Zl90YWJsZS0+ZHN0X29mZnNldCArCi0gICAgICBnbHlmX3RhYmxlLT5kc3Rf
bGVuZ3RoKSA+IGRzdF9sZW5ndGgpKSB7Ci0gICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJ
TFVSRSgpOwotICB9Ci0gIGlmIChQUkVESUNUX0ZBTFNFKHN0YXRpY19jYXN0PHVpbnQ2NF90Pihs
b2NhX3RhYmxlLT5kc3Rfb2Zmc2V0ICsKLSAgICAgbG9jYV90YWJsZS0+ZHN0X2xlbmd0aCkgPiBk
c3RfbGVuZ3RoKSkgewotICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAg
fQotICByZXR1cm4gUmVjb25zdHJ1Y3RHbHlmKHRyYW5zZm9ybWVkX2J1ZiwgdHJhbnNmb3JtZWRf
c2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkc3QgKyBnbHlmX3RhYmxlLT5kc3Rfb2Zm
c2V0LCBnbHlmX3RhYmxlLT5kc3RfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRz
dCArIGxvY2FfdGFibGUtPmRzdF9vZmZzZXQsIGxvY2FfdGFibGUtPmRzdF9sZW5ndGgpOwotfQot
Ci0vLyBSZWNvbnN0cnVjdHMgYSBzaW5nbGUgZm9udC4gdGFibGVzIG11c3Qgbm90IGNvbnRhaW4g
ZHVwbGljYXRlcy4KLWJvb2wgUmVjb25zdHJ1Y3RUcmFuc2Zvcm1lZChjb25zdCBzdGQ6OnZlY3Rv
cjxUYWJsZT4mIHRhYmxlcywgdWludDMyX3QgdGFnLAotICAgIGNvbnN0IHVpbnQ4X3QqIHRyYW5z
Zm9ybWVkX2J1Ziwgc2l6ZV90IHRyYW5zZm9ybWVkX3NpemUsCi0gICAgdWludDhfdCogZHN0LCBz
aXplX3QgZHN0X2xlbmd0aCkgewotCi0gIGlmICh0YWcgPT0ga0dseWZUYWJsZVRhZykgewotICAg
IGNvbnN0IFRhYmxlKiBnbHlmX3RhYmxlID0gRmluZFRhYmxlKHRhYmxlcywgdGFnKTsKLSAgICBj
b25zdCBUYWJsZSogbG9jYV90YWJsZSA9IEZpbmRUYWJsZSh0YWJsZXMsIGtMb2NhVGFibGVUYWcp
OwotICAgIHJldHVybiBSZWNvbnN0cnVjdFRyYW5zZm9ybWVkR2x5Zih0cmFuc2Zvcm1lZF9idWYs
IHRyYW5zZm9ybWVkX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdseWZfdGFibGUsIGxvY2FfdGFibGUsIGRzdCwgZHN0X2xlbmd0aCk7Ci0gIH0gZWxzZSBpZiAo
dGFnID09IGtMb2NhVGFibGVUYWcpIHsKLSAgICAvLyBwcm9jZXNzaW5nIHdhcyBhbHJlYWR5IGRv
bmUgYnkgZ2x5ZiB0YWJsZSwgYnV0IHZhbGlkYXRlCi0gICAgaWYgKFBSRURJQ1RfRkFMU0UoIUZp
bmRUYWJsZSh0YWJsZXMsIGtHbHlmVGFibGVUYWcpKSkgewotICAgICAgcmV0dXJuIEZPTlRfQ09N
UFJFU1NJT05fRkFJTFVSRSgpOwotICAgIH0KLSAgfSBlbHNlIGlmICh0YWcgPT0ga0htdHhUYWJs
ZVRhZykgewotICAgIC8vIFRhYmxlcyBhcmUgc29ydGVkIGZvciBhIG5vbi1jb2xsZWN0aW9uLgot
ICAgIC8vIGdseWYgaXMgYmVmb3JlIGhtdHggYW5kIGluY2x1ZGVzIGxvY2Egc28gYWxsIG91ciBh
Y2Nlc3NlcyBhcmUgc2FmZS4KLSAgICBjb25zdCBUYWJsZSogZ2x5Zl90YWJsZSA9IEZpbmRUYWJs
ZSh0YWJsZXMsIGtHbHlmVGFibGVUYWcpOwotICAgIGNvbnN0IFRhYmxlKiBoaGVhX3RhYmxlID0g
RmluZFRhYmxlKHRhYmxlcywga0hoZWFUYWJsZVRhZyk7Ci0gICAgY29uc3QgVGFibGUqIGhtdHhf
dGFibGUgPSBGaW5kVGFibGUodGFibGVzLCBrSG10eFRhYmxlVGFnKTsKLSAgICBjb25zdCBUYWJs
ZSogbG9jYV90YWJsZSA9IEZpbmRUYWJsZSh0YWJsZXMsIGtMb2NhVGFibGVUYWcpOwotICAgIGNv
bnN0IFRhYmxlKiBtYXhwX3RhYmxlID0gRmluZFRhYmxlKHRhYmxlcywga01heHBUYWJsZVRhZyk7
Ci0KLSAgICBpZiAoUFJFRElDVF9GQUxTRSghUmVjb25zdHJ1Y3RUcmFuc2Zvcm1lZEhtdHgoCi0g
ICAgICAgIHRyYW5zZm9ybWVkX2J1ZiwgdHJhbnNmb3JtZWRfc2l6ZSwgZ2x5Zl90YWJsZSwgaGhl
YV90YWJsZSwKLSAgICAgICAgaG10eF90YWJsZSwgbG9jYV90YWJsZSwgbWF4cF90YWJsZSwgZHN0
LCBkc3RfbGVuZ3RoKSkpIHsKLSAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUo
KTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLy8gdHJhbnNmb3JtIGZvciB0aGUgdGFnIGlzIG5v
dCBrbm93bgorICAqY2hlY2tzdW0gPSBDb21wdXRlVUxvbmdTdW0oJmhtdHhfdGFibGVbMF0sIGht
dHhfb3V0cHV0X3NpemUpOworICBpZiAoUFJFRElDVF9GQUxTRSghb3V0LT5Xcml0ZSgmaG10eF90
YWJsZVswXSwgaG10eF9vdXRwdXRfc2l6ZSkpKSB7CiAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJ
T05fRkFJTFVSRSgpOwogICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi11aW50MzJfdCBDb21wdXRl
Q2hlY2tzdW0oY29uc3QgVGFibGUqIHRhYmxlLCBjb25zdCB1aW50OF90KiBkc3QpIHsKLSAgcmV0
dXJuIENvbXB1dGVVTG9uZ1N1bShkc3QgKyB0YWJsZS0+ZHN0X29mZnNldCwgdGFibGUtPmRzdF9s
ZW5ndGgpOwotfQotCi1jb25zdCBUYWJsZSogRmluZFRhYmxlKFR0Y0ZvbnQgdHRjX2ZvbnQsIGNv
bnN0IHN0ZDo6dmVjdG9yPFRhYmxlPiYgdGFibGVzLAotICB1aW50MzJfdCB0YWcpIHsKLSAgZm9y
IChjb25zdCBhdXRvIGkgOiB0dGNfZm9udC50YWJsZV9pbmRpY2VzKSB7Ci0gICAgaWYgKHRhYmxl
c1tpXS50YWcgPT0gdGFnKSByZXR1cm4gJnRhYmxlc1tpXTsKLSAgfQotICByZXR1cm4gTlVMTDsK
LX0KLQotYm9vbCBGaXhDb2xsZWN0aW9uQ2hlY2tzdW1zKHNpemVfdCBoZWFkZXJfdmVyc2lvbiwK
LSAgY29uc3Qgc3RkOjp2ZWN0b3I8VGFibGU+JiB0YWJsZXMsIGNvbnN0IHN0ZDo6dmVjdG9yPFR0
Y0ZvbnQ+JiB0dGNfZm9udHMsCi0gIHVpbnQ4X3QqIGRzdCkgewotICBzaXplX3Qgb2Zmc2V0ID0g
Q29sbGVjdGlvbkhlYWRlclNpemUoaGVhZGVyX3ZlcnNpb24sIHR0Y19mb250cy5zaXplKCkpOwot
Ci0gIGZvciAoY29uc3QgYXV0byYgdHRjX2ZvbnQgOiB0dGNfZm9udHMpIHsKLSAgICBvZmZzZXQg
Kz0gMTI7ICAvLyBtb3ZlIHRvIHN0YXJ0IG9mIE9mZnNldCBUYWJsZQotICAgIGNvbnN0IHN0ZDo6
dmVjdG9yPHVpbnQxNl90PiYgdGFibGVfaW5kaWNlcyA9IHR0Y19mb250LnRhYmxlX2luZGljZXM7
Ci0KLSAgICBjb25zdCBUYWJsZSogaGVhZF90YWJsZSA9IEZpbmRUYWJsZSh0dGNfZm9udCwgdGFi
bGVzLCBrSGVhZFRhYmxlVGFnKTsKLSAgICBpZiAoUFJFRElDVF9GQUxTRShoZWFkX3RhYmxlID09
IE5VTEwgfHwKLSAgICAgICAgaGVhZF90YWJsZS0+ZHN0X2xlbmd0aCA8IGtDaGVja1N1bUFkanVz
dG1lbnRPZmZzZXQgKyA0KSkgewotICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVS
RSgpOwotICAgIH0KLQotICAgIHNpemVfdCBmaXJzdF90YWJsZV9vZmZzZXQgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHNpemVfdD46Om1heCgpOwotICAgIGZvciAoY29uc3QgYXV0byBpbmRleCA6IHRh
YmxlX2luZGljZXMpIHsKLSAgICAgIGNvbnN0IGF1dG8mIHRhYmxlID0gdGFibGVzW2luZGV4XTsK
LSAgICAgIGlmICh0YWJsZS5kc3Rfb2Zmc2V0IDwgZmlyc3RfdGFibGVfb2Zmc2V0KSB7Ci0gICAg
ICAgIGZpcnN0X3RhYmxlX29mZnNldCA9IHRhYmxlLmRzdF9vZmZzZXQ7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgc2l6ZV90IGFkanVzdG1lbnRfb2Zmc2V0ID0gaGVhZF90YWJsZS0+ZHN0X29mZnNl
dAotICAgICAgKyBrQ2hlY2tTdW1BZGp1c3RtZW50T2Zmc2V0OwotICAgIFN0b3JlVTMyKGRzdCwg
YWRqdXN0bWVudF9vZmZzZXQsIDApOwotCi0gICAgdWludDMyX3QgZmlsZV9jaGVja3N1bSA9IDA7
Ci0gICAgLy8gY29tcHV0ZSBlYWNoIHRhYmxlcyBjaGVja3N1bQotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdGFibGVfaW5kaWNlcy5zaXplKCk7IGkrKykgewotICAgICAgY29uc3QgVGFibGUm
IHRhYmxlID0gdGFibGVzW3RhYmxlX2luZGljZXNbaV1dOwotICAgICAgdWludDMyX3QgdGFibGVf
Y2hlY2tzdW0gPSBDb21wdXRlQ2hlY2tzdW0oJnRhYmxlLCBkc3QpOwotICAgICAgc2l6ZV90IGNo
ZWNrc3VtX29mZnNldCA9IG9mZnNldCArIDQ7ICAvLyBza2lwIHBhc3QgdGFnIHRvIGNoZWNrU3Vt
Ci0KLSAgICAgIC8vIHdyaXRlIHRoZSBjaGVja3N1bSBmb3IgdGhlIFRhYmxlIFJlY29yZAotICAg
ICAgU3RvcmVVMzIoZHN0LCBjaGVja3N1bV9vZmZzZXQsIHRhYmxlX2NoZWNrc3VtKTsKLSAgICAg
IGZpbGVfY2hlY2tzdW0gKz0gdGFibGVfY2hlY2tzdW07Ci0gICAgICAvLyBuZXh0IFRhYmxlIFJl
Y29yZAotICAgICAgb2Zmc2V0ICs9IDE2OwotICAgIH0KLQotICAgIHNpemVfdCBoZWFkZXJfc2l6
ZSA9IGtTZm50SGVhZGVyU2l6ZSArCi0gICAgICBrU2ZudEVudHJ5U2l6ZSAqIHRhYmxlX2luZGlj
ZXMuc2l6ZSgpOwotICAgIHVpbnQzMl90IGhlYWRlcl9jaGVja3N1bSA9IENvbXB1dGVVTG9uZ1N1
bShkc3QgKyB0dGNfZm9udC5kc3Rfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWFkZXJfc2l6ZSk7Ci0KLSAgICBmaWxlX2NoZWNrc3VtICs9
IGhlYWRlcl9jaGVja3N1bTsKLSAgICB1aW50MzJfdCBjaGVja3N1bV9hZGp1c3RtZW50ID0gMHhi
MWIwYWZiYSAtIGZpbGVfY2hlY2tzdW07Ci0gICAgU3RvcmVVMzIoZHN0LCBhZGp1c3RtZW50X29m
ZnNldCwgY2hlY2tzdW1fYWRqdXN0bWVudCk7Ci0gIH0KIAogICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBGaXhDaGVja3N1bXMoY29uc3Qgc3RkOjp2ZWN0b3I8VGFibGU+JiB0YWJsZXMsIHVpbnQ4
X3QqIGRzdCkgewotICBjb25zdCBUYWJsZSogaGVhZF90YWJsZSA9IEZpbmRUYWJsZSh0YWJsZXMs
IGtIZWFkVGFibGVUYWcpOwotICBpZiAoUFJFRElDVF9GQUxTRShoZWFkX3RhYmxlID09IE5VTEwg
fHwKLSAgICAgIGhlYWRfdGFibGUtPmRzdF9sZW5ndGggPCBrQ2hlY2tTdW1BZGp1c3RtZW50T2Zm
c2V0ICsgNCkpIHsKLSAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gIH0K
LSAgc2l6ZV90IGFkanVzdG1lbnRfb2Zmc2V0ID0gaGVhZF90YWJsZS0+ZHN0X29mZnNldCArIGtD
aGVja1N1bUFkanVzdG1lbnRPZmZzZXQ7Ci0gIFN0b3JlVTMyKGRzdCwgYWRqdXN0bWVudF9vZmZz
ZXQsIDApOwotICBzaXplX3Qgbl90YWJsZXMgPSB0YWJsZXMuc2l6ZSgpOwotICB1aW50MzJfdCBm
aWxlX2NoZWNrc3VtID0gMDsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuX3RhYmxlczsgKytp
KSB7Ci0gICAgdWludDMyX3QgY2hlY2tzdW0gPSBDb21wdXRlQ2hlY2tzdW0oJnRhYmxlc1tpXSwg
ZHN0KTsKLSAgICBTdG9yZVUzMihkc3QsIGtTZm50SGVhZGVyU2l6ZSArIGkgKiBrU2ZudEVudHJ5
U2l6ZSArIDQsIGNoZWNrc3VtKTsKLSAgICBmaWxlX2NoZWNrc3VtICs9IGNoZWNrc3VtOwotICB9
Ci0gIGZpbGVfY2hlY2tzdW0gKz0gQ29tcHV0ZVVMb25nU3VtKGRzdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAga1NmbnRIZWFkZXJTaXplICsga1NmbnRFbnRyeVNpemUgKiBu
X3RhYmxlcyk7Ci0gIHVpbnQzMl90IGNoZWNrc3VtX2FkanVzdG1lbnQgPSAweGIxYjBhZmJhIC0g
ZmlsZV9jaGVja3N1bTsKLSAgU3RvcmVVMzIoZHN0LCBhZGp1c3RtZW50X29mZnNldCwgY2hlY2tz
dW1fYWRqdXN0bWVudCk7Ci0gIHJldHVybiB0cnVlOwotfQotCiBib29sIFdvZmYyVW5jb21wcmVz
cyh1aW50OF90KiBkc3RfYnVmLCBzaXplX3QgZHN0X3NpemUsCiAgIGNvbnN0IHVpbnQ4X3QqIHNy
Y19idWYsIHNpemVfdCBzcmNfc2l6ZSkgewogICBzaXplX3QgdW5jb21wcmVzc2VkX3NpemUgPSBk
c3Rfc2l6ZTsKQEAgLTg5Myw2ICs3NTIsNyBAQCBib29sIFdvZmYyVW5jb21wcmVzcyh1aW50OF90
KiBkc3RfYnVmLCBzaXplX3QgZHN0X3NpemUsCiAKIGJvb2wgUmVhZFRhYmxlRGlyZWN0b3J5KEJ1
ZmZlciogZmlsZSwgc3RkOjp2ZWN0b3I8VGFibGU+KiB0YWJsZXMsCiAgICAgc2l6ZV90IG51bV90
YWJsZXMpIHsKKyAgdWludDMyX3Qgc3JjX29mZnNldCA9IDA7CiAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtX3RhYmxlczsgKytpKSB7CiAgICAgVGFibGUqIHRhYmxlID0gJigqdGFibGVzKVtp
XTsKICAgICB1aW50OF90IGZsYWdfYnl0ZTsKQEAgLTkzMyw2ICs3OTMsMTMgQEAgYm9vbCBSZWFk
VGFibGVEaXJlY3RvcnkoQnVmZmVyKiBmaWxlLCBzdGQ6OnZlY3RvcjxUYWJsZT4qIHRhYmxlcywK
ICAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgICAgfQogICAg
IH0KKyAgICBpZiAoUFJFRElDVF9GQUxTRShzcmNfb2Zmc2V0ICsgdHJhbnNmb3JtX2xlbmd0aCA8
IHNyY19vZmZzZXQpKSB7CisgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7
CisgICAgfQorICAgIHRhYmxlLT5zcmNfb2Zmc2V0ID0gc3JjX29mZnNldDsKKyAgICB0YWJsZS0+
c3JjX2xlbmd0aCA9IHRyYW5zZm9ybV9sZW5ndGg7CisgICAgc3JjX29mZnNldCArPSB0cmFuc2Zv
cm1fbGVuZ3RoOworCiAgICAgdGFibGUtPnRhZyA9IHRhZzsKICAgICB0YWJsZS0+ZmxhZ3MgPSBm
bGFnczsKICAgICB0YWJsZS0+dHJhbnNmb3JtX2xlbmd0aCA9IHRyYW5zZm9ybV9sZW5ndGg7CkBA
IC05NDEsMTkgKzgwOCw2IEBAIGJvb2wgUmVhZFRhYmxlRGlyZWN0b3J5KEJ1ZmZlciogZmlsZSwg
c3RkOjp2ZWN0b3I8VGFibGU+KiB0YWJsZXMsCiAgIHJldHVybiB0cnVlOwogfQogCi19ICAvLyBu
YW1lc3BhY2UKLQotc2l6ZV90IENvbXB1dGVXT0ZGMkZpbmFsU2l6ZShjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3QgbGVuZ3RoKSB7Ci0gIEJ1ZmZlciBmaWxlKGRhdGEsIGxlbmd0aCk7Ci0gIHVp
bnQzMl90IHRvdGFsX2xlbmd0aDsKLQotICBpZiAoIWZpbGUuU2tpcCgxNikgfHwKLSAgICAgICFm
aWxlLlJlYWRVMzIoJnRvdGFsX2xlbmd0aCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICByZXR1
cm4gdG90YWxfbGVuZ3RoOwotfQotCiAvLyBXcml0ZXMgYSBzaW5nbGUgT2Zmc2V0IFRhYmxlIGVu
dHJ5CiBzaXplX3QgU3RvcmVPZmZzZXRUYWJsZSh1aW50OF90KiByZXN1bHQsIHNpemVfdCBvZmZz
ZXQsIHVpbnQzMl90IGZsYXZvciwKICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IG51
bV90YWJsZXMpIHsKQEAgLTk3MSw2MiArODI1LDE4NSBAQCBzaXplX3QgU3RvcmVPZmZzZXRUYWJs
ZSh1aW50OF90KiByZXN1bHQsIHNpemVfdCBvZmZzZXQsIHVpbnQzMl90IGZsYXZvciwKICAgcmV0
dXJuIG9mZnNldDsKIH0KIAotc2l6ZV90IFN0b3JlVGFibGVFbnRyeSh1aW50OF90KiByZXN1bHQs
IGNvbnN0IFRhYmxlJiB0YWJsZSwgc2l6ZV90IG9mZnNldCkgewotICBvZmZzZXQgPSBTdG9yZVUz
MihyZXN1bHQsIG9mZnNldCwgdGFibGUudGFnKTsKLSAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0
LCBvZmZzZXQsIDApOyAgLy8gY2hlY2tzdW0sIHRvIGZpbGwgaW4gbGF0ZXIKLSAgb2Zmc2V0ID0g
U3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIHRhYmxlLmRzdF9vZmZzZXQpOwotICBvZmZzZXQgPSBT
dG9yZVUzMihyZXN1bHQsIG9mZnNldCwgdGFibGUuZHN0X2xlbmd0aCk7CitzaXplX3QgU3RvcmVU
YWJsZUVudHJ5KHVpbnQ4X3QqIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCB0YWcp
IHsKKyAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIHRhZyk7CisgIG9mZnNldCA9
IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCAwKTsKKyAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0
LCBvZmZzZXQsIDApOworICBvZmZzZXQgPSBTdG9yZVUzMihyZXN1bHQsIG9mZnNldCwgMCk7CiAg
IHJldHVybiBvZmZzZXQ7CiB9CiAKIC8vIEZpcnN0IHRhYmxlIGdvZXMgYWZ0ZXIgYWxsIHRoZSBo
ZWFkZXJzLCB0YWJsZSBkaXJlY3RvcnksIGV0YwotdWludDY0X3QgQ29tcHV0ZU9mZnNldFRvRmly
c3RUYWJsZShjb25zdCB1aW50MzJfdCBoZWFkZXJfdmVyc2lvbiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgdWludDE2X3QgbnVtX3RhYmxlcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8VHRjRm9udD4mIHR0Y19m
b250cykgewordWludDY0X3QgQ29tcHV0ZU9mZnNldFRvRmlyc3RUYWJsZShjb25zdCBXT0ZGMkhl
YWRlciYgaGRyKSB7CiAgIHVpbnQ2NF90IG9mZnNldCA9IGtTZm50SGVhZGVyU2l6ZSArCi0gICAg
a1NmbnRFbnRyeVNpemUgKiBzdGF0aWNfY2FzdDx1aW50NjRfdD4obnVtX3RhYmxlcyk7Ci0gIGlm
IChoZWFkZXJfdmVyc2lvbikgewotICAgIG9mZnNldCA9IENvbGxlY3Rpb25IZWFkZXJTaXplKGhl
YWRlcl92ZXJzaW9uLCB0dGNfZm9udHMuc2l6ZSgpKQotICAgICAgKyBrU2ZudEhlYWRlclNpemUg
KiB0dGNfZm9udHMuc2l6ZSgpOwotICAgIGZvciAoY29uc3QgYXV0byYgdHRjX2ZvbnQgOiB0dGNf
Zm9udHMpIHsKLSAgICAgIG9mZnNldCArPQotICAgICAgICBrU2ZudEVudHJ5U2l6ZSAqIHR0Y19m
b250LnRhYmxlX2luZGljZXMuc2l6ZSgpOworICAgIGtTZm50RW50cnlTaXplICogc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KGhkci5udW1fdGFibGVzKTsKKyAgaWYgKGhkci5oZWFkZXJfdmVyc2lvbikg
eworICAgIG9mZnNldCA9IENvbGxlY3Rpb25IZWFkZXJTaXplKGhkci5oZWFkZXJfdmVyc2lvbiwg
aGRyLnR0Y19mb250cy5zaXplKCkpCisgICAgICArIGtTZm50SGVhZGVyU2l6ZSAqIGhkci50dGNf
Zm9udHMuc2l6ZSgpOworICAgIGZvciAoY29uc3QgYXV0byYgdHRjX2ZvbnQgOiBoZHIudHRjX2Zv
bnRzKSB7CisgICAgICBvZmZzZXQgKz0ga1NmbnRFbnRyeVNpemUgKiB0dGNfZm9udC50YWJsZV9p
bmRpY2VzLnNpemUoKTsKICAgICB9CiAgIH0KICAgcmV0dXJuIG9mZnNldDsKIH0KIAotYm9vbCBS
ZWNvbnN0cnVjdFRyYW5zZm9ybWVkRm9udChjb25zdCBzdGQ6OnZlY3RvcjxUYWJsZT4mIHRhYmxl
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXA8dWludDMyX3QsIGNv
bnN0IHVpbnQ4X3QqPiogc3JjX2J5X2Rlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVpbnQ4X3QqIHJlc3VsdCwgc2l6ZV90IHJlc3VsdF9sZW5ndGgpIHsKLSAgZm9yIChjb25z
dCBhdXRvJiB0YWJsZSA6IHRhYmxlcykgewotICAgIGlmICgodGFibGUuZmxhZ3MgJiBrV29mZjJG
bGFnc1RyYW5zZm9ybSkgIT0ga1dvZmYyRmxhZ3NUcmFuc2Zvcm0pIHsKLSAgICAgIGNvbnRpbnVl
Oworc3RkOjp2ZWN0b3I8VGFibGUqPiBUYWJsZXMoV09GRjJIZWFkZXIqIGhkciwgc2l6ZV90IGZv
bnRfaW5kZXgpIHsKKyAgc3RkOjp2ZWN0b3I8VGFibGUqPiB0YWJsZXM7CisgIGlmIChQUkVESUNU
X0ZBTFNFKGhkci0+aGVhZGVyX3ZlcnNpb24pKSB7CisgICAgZm9yIChhdXRvIGluZGV4IDogaGRy
LT50dGNfZm9udHNbZm9udF9pbmRleF0udGFibGVfaW5kaWNlcykgeworICAgICAgdGFibGVzLnB1
c2hfYmFjaygmaGRyLT50YWJsZXNbaW5kZXhdKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgZm9y
IChhdXRvJiB0YWJsZSA6IGhkci0+dGFibGVzKSB7CisgICAgICB0YWJsZXMucHVzaF9iYWNrKCZ0
YWJsZSk7CisgICAgfQorICB9CisgIHJldHVybiB0YWJsZXM7Cit9CisKKy8vIE9mZnNldCB0YWJs
ZXMgYXNzdW1lZCB0byBoYXZlIGJlZW4gd3JpdHRlbiBpbiB3aXRoIDAncyBpbml0aWFsbHkuCisv
LyBXT0ZGMkhlYWRlciBpc24ndCBjb25zdCBzbyB3ZSBjYW4gdXNlIFtdIGluc3RlYWQgb2YgYXQo
KSAod2hpY2ggdXBzZXRzIEZGKQorYm9vbCBSZWNvbnN0cnVjdEZvbnQodWludDhfdCogdHJhbnNm
b3JtZWRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QgdHJhbnNmb3Jt
ZWRfYnVmX3NpemUsCisgICAgICAgICAgICAgICAgICAgICBSZWJ1aWxkTWV0YWRhdGEqIG1ldGFk
YXRhLAorICAgICAgICAgICAgICAgICAgICAgV09GRjJIZWFkZXIqIGhkciwKKyAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBmb250X2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgV09GRjJP
dXQqIG91dCkgeworICBzaXplX3QgZGVzdF9vZmZzZXQgPSBvdXQtPlNpemUoKTsKKyAgdWludDhf
dCB0YWJsZV9lbnRyeVsxMl07CisgIFdPRkYyRm9udEluZm8qIGluZm8gPSAmbWV0YWRhdGEtPmZv
bnRfaW5mb3NbZm9udF9pbmRleF07CisgIHN0ZDo6dmVjdG9yPFRhYmxlKj4gdGFibGVzID0gVGFi
bGVzKGhkciwgZm9udF9pbmRleCk7CisKKyAgLy8gJ2dseWYnIHdpdGhvdXQgJ2xvY2EnIGRvZXNu
J3QgbWFrZSBzZW5zZQorICBpZiAoUFJFRElDVF9GQUxTRShzdGF0aWNfY2FzdDxib29sPihGaW5k
VGFibGUoJnRhYmxlcywga0dseWZUYWJsZVRhZykpICE9CisgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PGJvb2w+KEZpbmRUYWJsZSgmdGFibGVzLCBrTG9jYVRhYmxlVGFnKSkpKSB7Cisg
ICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICB9CisKKyAgdWludDMyX3Qg
Zm9udF9jaGVja3N1bSA9IG1ldGFkYXRhLT5oZWFkZXJfY2hlY2tzdW07CisgIGlmIChoZHItPmhl
YWRlcl92ZXJzaW9uKSB7CisgICAgZm9udF9jaGVja3N1bSA9IGhkci0+dHRjX2ZvbnRzW2ZvbnRf
aW5kZXhdLmhlYWRlcl9jaGVja3N1bTsKKyAgfQorCisgIHVpbnQzMl90IGxvY2FfY2hlY2tzdW0g
PSAwOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhYmxlcy5zaXplKCk7IGkrKykgeworICAg
IFRhYmxlJiB0YWJsZSA9ICp0YWJsZXNbaV07CisKKyAgICBzdGQ6OnBhaXI8dWludDMyX3QsIHVp
bnQzMl90PiBjaGVja3N1bV9rZXkgPSB7dGFibGUudGFnLCB0YWJsZS5zcmNfb2Zmc2V0fTsKKyAg
ICBib29sIHJldXNlZCA9IG1ldGFkYXRhLT5jaGVja3N1bXMuZmluZChjaGVja3N1bV9rZXkpCisg
ICAgICAgICAgICAgICAhPSBtZXRhZGF0YS0+Y2hlY2tzdW1zLmVuZCgpOworICAgIGlmIChQUkVE
SUNUX0ZBTFNFKGZvbnRfaW5kZXggPT0gMCAmJiByZXVzZWQpKSB7CisgICAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CisgICAgfQorCisgICAgLy8gVE9ETyh1c2VyKSBhIGNv
bGxlY3Rpb24gd2l0aCBvcHRpbWl6ZWQgaG10eCB0aGF0IHJldXNlZCBnbHlmL2xvY2EKKyAgICAv
LyB3b3VsZCBmYWlsLiBXZSBkb24ndCBvcHRpbWl6ZSBobXR4IGZvciBjb2xsZWN0aW9ucyB5ZXQu
CisgICAgaWYgKFBSRURJQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRhYmxlLnNyY19v
ZmZzZXQgKyB0YWJsZS5zcmNfbGVuZ3RoKQorICAgICAgICA+IHRyYW5zZm9ybWVkX2J1Zl9zaXpl
KSkgeworICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICAgIH0KKwor
ICAgIGlmICh0YWJsZS50YWcgPT0ga0hoZWFUYWJsZVRhZykgeworICAgICAgaWYgKCFSZWFkTnVt
SE1ldHJpY3ModHJhbnNmb3JtZWRfYnVmICsgdGFibGUuc3JjX29mZnNldCwKKyAgICAgICAgICB0
YWJsZS5zcmNfbGVuZ3RoLCAmaW5mby0+bnVtX2htZXRyaWNzKSkgeworICAgICAgICByZXR1cm4g
Rk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CisgICAgICB9CisgICAgfQorCisgICAgdWludDMy
X3QgY2hlY2tzdW0gPSAwOworICAgIGlmICghcmV1c2VkKSB7CisgICAgICBpZiAoKHRhYmxlLmZs
YWdzICYga1dvZmYyRmxhZ3NUcmFuc2Zvcm0pICE9IGtXb2ZmMkZsYWdzVHJhbnNmb3JtKSB7Cisg
ICAgICAgIGlmICh0YWJsZS50YWcgPT0ga0hlYWRUYWJsZVRhZykgeworICAgICAgICAgIGlmIChQ
UkVESUNUX0ZBTFNFKHRhYmxlLnNyY19sZW5ndGggPCAxMikpIHsKKyAgICAgICAgICAgIHJldHVy
biBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgICAgICAgICB9CisgICAgICAgICAgLy8g
Y2hlY2tTdW1BZGp1c3RtZW50ID0gMAorICAgICAgICAgIFN0b3JlVTMyKHRyYW5zZm9ybWVkX2J1
ZiArIHRhYmxlLnNyY19vZmZzZXQsIDgsIDApOworICAgICAgICB9CisgICAgICAgIHRhYmxlLmRz
dF9vZmZzZXQgPSBkZXN0X29mZnNldDsKKyAgICAgICAgY2hlY2tzdW0gPSBDb21wdXRlVUxvbmdT
dW0odHJhbnNmb3JtZWRfYnVmICsgdGFibGUuc3JjX29mZnNldCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGFibGUuc3JjX2xlbmd0aCk7CisgICAgICAgIGlmIChQUkVESUNU
X0ZBTFNFKCFvdXQtPldyaXRlKHRyYW5zZm9ybWVkX2J1ZiArIHRhYmxlLnNyY19vZmZzZXQsCisg
ICAgICAgICAgICB0YWJsZS5zcmNfbGVuZ3RoKSkpIHsKKyAgICAgICAgICByZXR1cm4gRk9OVF9D
T01QUkVTU0lPTl9GQUlMVVJFKCk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAg
IGlmICh0YWJsZS50YWcgPT0ga0dseWZUYWJsZVRhZykgeworICAgICAgICAgIHRhYmxlLmRzdF9v
ZmZzZXQgPSBkZXN0X29mZnNldDsKKworICAgICAgICAgIFRhYmxlKiBsb2NhX3RhYmxlID0gRmlu
ZFRhYmxlKCZ0YWJsZXMsIGtMb2NhVGFibGVUYWcpOworICAgICAgICAgIGlmIChQUkVESUNUX0ZB
TFNFKCFSZWNvbnN0cnVjdEdseWYodHJhbnNmb3JtZWRfYnVmICsgdGFibGUuc3JjX29mZnNldCwK
KyAgICAgICAgICAgICAgJnRhYmxlLCAmY2hlY2tzdW0sIGxvY2FfdGFibGUsICZsb2NhX2NoZWNr
c3VtLCBpbmZvLCBvdXQpKSkgeworICAgICAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05f
RkFJTFVSRSgpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0YWJsZS50YWcgPT0g
a0xvY2FUYWJsZVRhZykgeworICAgICAgICAgIC8vIEFsbCB0aGUgd29yayB3YXMgZG9uZSBieSBS
ZWNvbnN0cnVjdEdseWYuIFdlIGFscmVhZHkga25vdyBjaGVja3N1bS4KKyAgICAgICAgICBjaGVj
a3N1bSA9IGxvY2FfY2hlY2tzdW07CisgICAgICAgIH0gZWxzZSBpZiAodGFibGUudGFnID09IGtI
bXR4VGFibGVUYWcpIHsKKyAgICAgICAgICB0YWJsZS5kc3Rfb2Zmc2V0ID0gZGVzdF9vZmZzZXQ7
CisgICAgICAgICAgLy8gVGFibGVzIGFyZSBzb3J0ZWQgc28gYWxsIHRoZSBpbmZvIHdlIG5lZWQg
aGFzIGJlZW4gZ2F0aGVyZWQuCisgICAgICAgICAgaWYgKFBSRURJQ1RfRkFMU0UoIVJlY29uc3Ry
dWN0VHJhbnNmb3JtZWRIbXR4KAorICAgICAgICAgICAgICB0cmFuc2Zvcm1lZF9idWYgKyB0YWJs
ZS5zcmNfb2Zmc2V0LCB0YWJsZS5zcmNfbGVuZ3RoLAorICAgICAgICAgICAgICBpbmZvLT5udW1f
Z2x5cGhzLCBpbmZvLT5udW1faG1ldHJpY3MsIGluZm8tPnhfbWlucywgJmNoZWNrc3VtLAorICAg
ICAgICAgICAgICBvdXQpKSkgeworICAgICAgICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05f
RkFJTFVSRSgpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1
cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7ICAvLyB0cmFuc2Zvcm0gdW5rbm93bgorICAg
ICAgICB9CisgICAgICB9CisgICAgICBtZXRhZGF0YS0+Y2hlY2tzdW1zW2NoZWNrc3VtX2tleV0g
PSBjaGVja3N1bTsKKyAgICB9IGVsc2UgeworICAgICAgY2hlY2tzdW0gPSBtZXRhZGF0YS0+Y2hl
Y2tzdW1zW2NoZWNrc3VtX2tleV07CisgICAgfQorICAgIGZvbnRfY2hlY2tzdW0gKz0gY2hlY2tz
dW07CisKKyAgICAvLyB1cGRhdGUgdGhlIHRhYmxlIGVudHJ5IHdpdGggcmVhbCB2YWx1ZXMuCisg
ICAgU3RvcmVVMzIodGFibGVfZW50cnksIDAsIGNoZWNrc3VtKTsKKyAgICBTdG9yZVUzMih0YWJs
ZV9lbnRyeSwgNCwgdGFibGUuZHN0X29mZnNldCk7CisgICAgU3RvcmVVMzIodGFibGVfZW50cnks
IDgsIHRhYmxlLmRzdF9sZW5ndGgpOworICAgIGlmIChQUkVESUNUX0ZBTFNFKCFvdXQtPldyaXRl
KHRhYmxlX2VudHJ5LAorICAgICAgICBpbmZvLT50YWJsZV9lbnRyeV9ieV90YWdbdGFibGUudGFn
XSArIDQsIDEyKSkpIHsKKyAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsK
KyAgICB9CisKKyAgICAvLyBXZSByZXBsYWNlZCAwJ3MuIFVwZGF0ZSBvdmVyYWxsIGNoZWNrc3Vt
LgorICAgIGZvbnRfY2hlY2tzdW0gKz0gQ29tcHV0ZVVMb25nU3VtKHRhYmxlX2VudHJ5LCAxMik7
CisKKyAgICBpZiAoUFJFRElDVF9GQUxTRSghUGFkNChvdXQpKSkgeworICAgICAgcmV0dXJuIEZP
TlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0KLSAgICBjb25zdCBhdXRvIGl0ID0gc3Jj
X2J5X2Rlc3QtPmZpbmQodGFibGUuZHN0X29mZnNldCk7Ci0gICAgaWYgKGl0ID09IHNyY19ieV9k
ZXN0LT5lbmQoKSkgewotICAgICAgY29udGludWU7CisKKyAgICBpZiAoUFJFRElDVF9GQUxTRShz
dGF0aWNfY2FzdDx1aW50NjRfdD4odGFibGUuZHN0X29mZnNldCArIHRhYmxlLmRzdF9sZW5ndGgp
CisgICAgICAgID4gb3V0LT5TaXplKCkpKSB7CisgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lP
Tl9GQUlMVVJFKCk7CiAgICAgfQotICAgIGNvbnN0IHVpbnQ4X3QqIHRyYW5zZm9ybV9idWYgPSAo
Kml0KS5zZWNvbmQ7Ci0gICAgc3JjX2J5X2Rlc3QtPmVyYXNlKHRhYmxlLmRzdF9vZmZzZXQpOwor
ICAgIGRlc3Rfb2Zmc2V0ID0gb3V0LT5TaXplKCk7CisgIH0KIAotICAgIHNpemVfdCB0cmFuc2Zv
cm1fbGVuZ3RoID0gdGFibGUudHJhbnNmb3JtX2xlbmd0aDsKLSAgICBpZiAoUFJFRElDVF9GQUxT
RSghUmVjb25zdHJ1Y3RUcmFuc2Zvcm1lZCh0YWJsZXMsIHRhYmxlLnRhZywKLSAgICAgICAgICAg
IHRyYW5zZm9ybV9idWYsIHRyYW5zZm9ybV9sZW5ndGgsIHJlc3VsdCwgcmVzdWx0X2xlbmd0aCkp
KSB7CisgIC8vIFVwZGF0ZSAnaGVhZCcgY2hlY2tTdW1BZGp1c3RtZW50LiBXZSBhbHJlYWR5IHNl
dCBpdCB0byAwIGFuZCBzdW1tZWQgZm9udC4KKyAgVGFibGUqIGhlYWRfdGFibGUgPSBGaW5kVGFi
bGUoJnRhYmxlcywga0hlYWRUYWJsZVRhZyk7CisgIGlmIChoZWFkX3RhYmxlKSB7CisgICAgaWYg
KFBSRURJQ1RfRkFMU0UoaGVhZF90YWJsZS0+ZHN0X2xlbmd0aCA8IDEyKSkgeworICAgICAgcmV0
dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOworICAgIH0KKyAgICB1aW50OF90IGNoZWNr
c3VtX2FkanVzdG1lbnRbNF07CisgICAgU3RvcmVVMzIoY2hlY2tzdW1fYWRqdXN0bWVudCwgMCwg
MHhCMUIwQUZCQSAtIGZvbnRfY2hlY2tzdW0pOworICAgIGlmIChQUkVESUNUX0ZBTFNFKCFvdXQt
PldyaXRlKGNoZWNrc3VtX2FkanVzdG1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVhZF90YWJsZS0+ZHN0X29mZnNldCArIDgsIDQpKSkgewogICAgICAgcmV0dXJuIEZP
TlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0KICAgfQorCiAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIENvbnZlcnRXT0ZGMlRvVFRGKHVpbnQ4X3QqIHJlc3VsdCwgc2l6ZV90IHJlc3Vs
dF9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBsZW5ndGgpIHsKK2Jvb2wgUmVhZFdPRkYySGVhZGVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBsZW5ndGgsIFdPRkYySGVhZGVyKiBoZHIpIHsKICAgQnVmZmVyIGZpbGUoZGF0YSwg
bGVuZ3RoKTsKIAogICB1aW50MzJfdCBzaWduYXR1cmU7Ci0gIHVpbnQzMl90IGZsYXZvcjsKICAg
aWYgKFBSRURJQ1RfRkFMU0UoIWZpbGUuUmVhZFUzMigmc2lnbmF0dXJlKSB8fCBzaWduYXR1cmUg
IT0ga1dvZmYyU2lnbmF0dXJlIHx8Ci0gICAgICAhZmlsZS5SZWFkVTMyKCZmbGF2b3IpKSkgewor
ICAgICAgIWZpbGUuUmVhZFUzMigmaGRyLT5mbGF2b3IpKSkgewogICAgIHJldHVybiBGT05UX0NP
TVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQogCkBAIC0xMDM3LDE4ICsxMDE0LDE3IEBAIGJvb2wg
Q29udmVydFdPRkYyVG9UVEYodWludDhfdCogcmVzdWx0LCBzaXplX3QgcmVzdWx0X2xlbmd0aCwK
ICAgICAgICFmaWxlLlJlYWRVMzIoJnJlcG9ydGVkX2xlbmd0aCkgfHwgbGVuZ3RoICE9IHJlcG9y
dGVkX2xlbmd0aCkpIHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAg
IH0KLSAgdWludDE2X3QgbnVtX3RhYmxlczsKLSAgaWYgKFBSRURJQ1RfRkFMU0UoIWZpbGUuUmVh
ZFUxNigmbnVtX3RhYmxlcykgfHwgIW51bV90YWJsZXMpKSB7CisgIGlmIChQUkVESUNUX0ZBTFNF
KCFmaWxlLlJlYWRVMTYoJmhkci0+bnVtX3RhYmxlcykgfHwgIWhkci0+bnVtX3RhYmxlcykpIHsK
ICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0KKwogICAvLyBXZSBk
b24ndCBjYXJlIGFib3V0IHRoZXNlIGZpZWxkcyBvZiB0aGUgaGVhZGVyOgogICAvLyAgIHVpbnQx
Nl90IHJlc2VydmVkCi0gIC8vICAgdWludDMyX3QgdG90YWxfc2ZudF9zaXplLCB0aGUgY2FsbGVy
IGFscmVhZHkgcGFzc2VzIGl0IGFzIHJlc3VsdF9sZW5ndGgKKyAgLy8gICB1aW50MzJfdCB0b3Rh
bF9zZm50X3NpemUsIHdlIGRvbid0IGJlbGlldmUgdGhpcywgd2lsbCBjb21wdXRlIGxhdGVyCiAg
IGlmIChQUkVESUNUX0ZBTFNFKCFmaWxlLlNraXAoNikpKSB7CiAgICAgcmV0dXJuIEZPTlRfQ09N
UFJFU1NJT05fRkFJTFVSRSgpOwogICB9Ci0gIHVpbnQzMl90IGNvbXByZXNzZWRfbGVuZ3RoOwot
ICBpZiAoUFJFRElDVF9GQUxTRSghZmlsZS5SZWFkVTMyKCZjb21wcmVzc2VkX2xlbmd0aCkpKSB7
CisgIGlmIChQUkVESUNUX0ZBTFNFKCFmaWxlLlJlYWRVMzIoJmhkci0+Y29tcHJlc3NlZF9sZW5n
dGgpKSkgewogICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQogICAv
LyBXZSBkb24ndCBjYXJlIGFib3V0IHRoZXNlIGZpZWxkcyBvZiB0aGUgaGVhZGVyOgpAQCAtMTA4
MiwyOCArMTA1OCwzNyBAQCBib29sIENvbnZlcnRXT0ZGMlRvVFRGKHVpbnQ4X3QqIHJlc3VsdCwg
c2l6ZV90IHJlc3VsdF9sZW5ndGgsCiAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlM
VVJFKCk7CiAgICAgfQogICB9Ci0gIHN0ZDo6dmVjdG9yPFRhYmxlPiB0YWJsZXMobnVtX3RhYmxl
cyk7Ci0gIGlmIChQUkVESUNUX0ZBTFNFKCFSZWFkVGFibGVEaXJlY3RvcnkoJmZpbGUsICZ0YWJs
ZXMsIG51bV90YWJsZXMpKSkgeworICBoZHItPnRhYmxlcy5yZXNpemUoaGRyLT5udW1fdGFibGVz
KTsKKyAgaWYgKFBSRURJQ1RfRkFMU0UoIVJlYWRUYWJsZURpcmVjdG9yeSgKKyAgICAgICAgICAm
ZmlsZSwgJmhkci0+dGFibGVzLCBoZHItPm51bV90YWJsZXMpKSkgeworICAgIHJldHVybiBGT05U
X0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgfQorCisgIC8vIEJlZm9yZSB3ZSBzb3J0IGZvciBv
dXRwdXQgdGhlIGxhc3QgdGFibGUgZW5kIGlzIHRoZSB1bmNvbXByZXNzZWQgc2l6ZS4KKyAgVGFi
bGUmIGxhc3RfdGFibGUgPSBoZHItPnRhYmxlcy5iYWNrKCk7CisgIGhkci0+dW5jb21wcmVzc2Vk
X3NpemUgPSBsYXN0X3RhYmxlLnNyY19vZmZzZXQgKyBsYXN0X3RhYmxlLnNyY19sZW5ndGg7Cisg
IGlmIChQUkVESUNUX0ZBTFNFKGhkci0+dW5jb21wcmVzc2VkX3NpemUgPCBsYXN0X3RhYmxlLnNy
Y19vZmZzZXQpKSB7CiAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9
CiAKLSAgdWludDMyX3QgaGVhZGVyX3ZlcnNpb24gPSAwOwotICAvLyBmb3IgZWFjaCBmb250IGlu
IGEgdHRjLCBtZXRhZGF0YSB0byB1c2Ugd2hlbiByZWJ1aWxkaW5nCi0gIHN0ZDo6dmVjdG9yPFR0
Y0ZvbnQ+IHR0Y19mb250czsKLSAgc3RkOjptYXA8Y29uc3QgVGFibGUqLCBjb25zdCBUYWJsZSo+
IGxvY2FfYnlfZ2x5ZjsKKyAgaGRyLT5oZWFkZXJfdmVyc2lvbiA9IDA7CiAKLSAgaWYgKGZsYXZv
ciA9PSBrVHRjRm9udEZsYXZvcikgewotICAgIGlmIChQUkVESUNUX0ZBTFNFKCFmaWxlLlJlYWRV
MzIoJmhlYWRlcl92ZXJzaW9uKSkpIHsKKyAgaWYgKGhkci0+Zmxhdm9yID09IGtUdGNGb250Rmxh
dm9yKSB7CisgICAgaWYgKFBSRURJQ1RfRkFMU0UoIWZpbGUuUmVhZFUzMigmaGRyLT5oZWFkZXJf
dmVyc2lvbikpKSB7CisgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Cisg
ICAgfQorICAgIGlmIChQUkVESUNUX0ZBTFNFKGhkci0+aGVhZGVyX3ZlcnNpb24gIT0gMHgwMDAx
MDAwMAorICAgICAgICAgICAgICAgICAgICYmIGhkci0+aGVhZGVyX3ZlcnNpb24gIT0gMHgwMDAy
MDAwMCkpIHsKICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgICB9
CiAgICAgdWludDMyX3QgbnVtX2ZvbnRzOwogICAgIGlmIChQUkVESUNUX0ZBTFNFKCFSZWFkMjU1
VVNob3J0KCZmaWxlLCAmbnVtX2ZvbnRzKSB8fCAhbnVtX2ZvbnRzKSkgewogICAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgIH0KLSAgICB0dGNfZm9udHMucmVzaXpl
KG51bV9mb250cyk7CisgICAgaGRyLT50dGNfZm9udHMucmVzaXplKG51bV9mb250cyk7CiAKICAg
ICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtX2ZvbnRzOyBpKyspIHsKLSAgICAgIFR0Y0Zv
bnQmIHR0Y19mb250ID0gdHRjX2ZvbnRzW2ldOworICAgICAgVHRjRm9udCYgdHRjX2ZvbnQgPSBo
ZHItPnR0Y19mb250c1tpXTsKICAgICAgIHVpbnQzMl90IG51bV90YWJsZXM7CiAgICAgICBpZiAo
UFJFRElDVF9GQUxTRSghUmVhZDI1NVVTaG9ydCgmZmlsZSwgJm51bV90YWJsZXMpIHx8ICFudW1f
dGFibGVzKSkgewogICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CkBA
IC0xMTE2LDI1ICsxMTAxLDIxIEBAIGJvb2wgQ29udmVydFdPRkYyVG9UVEYodWludDhfdCogcmVz
dWx0LCBzaXplX3QgcmVzdWx0X2xlbmd0aCwKIAogICAgICAgY29uc3QgVGFibGUqIGdseWZfdGFi
bGUgPSBOVUxMOwogICAgICAgY29uc3QgVGFibGUqIGxvY2FfdGFibGUgPSBOVUxMOwotICAgICAg
dWludDE2X3QgZ2x5Zl9pZHg7Ci0gICAgICB1aW50MTZfdCBsb2NhX2lkeDsKIAogICAgICAgZm9y
ICh1aW50MzJfdCBqID0gMDsgaiA8IG51bV90YWJsZXM7IGorKykgewogICAgICAgICB1bnNpZ25l
ZCBpbnQgdGFibGVfaWR4OwogICAgICAgICBpZiAoUFJFRElDVF9GQUxTRSghUmVhZDI1NVVTaG9y
dCgmZmlsZSwgJnRhYmxlX2lkeCkpIHx8Ci0gICAgICAgICAgICB0YWJsZV9pZHggPj0gdGFibGVz
LnNpemUoKSkgeworICAgICAgICAgICAgdGFibGVfaWR4ID49IGhkci0+dGFibGVzLnNpemUoKSkg
ewogICAgICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgICAgICAg
fQogICAgICAgICB0dGNfZm9udC50YWJsZV9pbmRpY2VzW2pdID0gdGFibGVfaWR4OwogCi0gICAg
ICAgIGNvbnN0IFRhYmxlJiB0YWJsZSA9IHRhYmxlc1t0YWJsZV9pZHhdOworICAgICAgICBjb25z
dCBUYWJsZSYgdGFibGUgPSBoZHItPnRhYmxlc1t0YWJsZV9pZHhdOwogICAgICAgICBpZiAodGFi
bGUudGFnID09IGtMb2NhVGFibGVUYWcpIHsKICAgICAgICAgICBsb2NhX3RhYmxlID0gJnRhYmxl
OwotICAgICAgICAgIGxvY2FfaWR4ID0gdGFibGVfaWR4OwogICAgICAgICB9CiAgICAgICAgIGlm
ICh0YWJsZS50YWcgPT0ga0dseWZUYWJsZVRhZykgewogICAgICAgICAgIGdseWZfdGFibGUgPSAm
dGFibGU7Ci0gICAgICAgICAgZ2x5Zl9pZHggPSB0YWJsZV9pZHg7CiAgICAgICAgIH0KIAogICAg
ICAgfQpAQCAtMTE0NSw2NSArMTEyNiwyOCBAQCBib29sIENvbnZlcnRXT0ZGMlRvVFRGKHVpbnQ4
X3QqIHJlc3VsdCwgc2l6ZV90IHJlc3VsdF9sZW5ndGgsCiAjZW5kaWYKICAgICAgICAgcmV0dXJu
IEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICAgICAgfQotCi0gICAgICBpZiAoZ2x5Zl90
YWJsZSAhPSBOVUxMICYmIGxvY2FfdGFibGUgIT0gTlVMTCkgewotICAgICAgICBsb2NhX2J5X2ds
eWZbZ2x5Zl90YWJsZV0gPSBsb2NhX3RhYmxlOwotICAgICAgfQogICAgIH0KICAgfQogCi0gIGNv
bnN0IHVpbnQ2NF90IGZpcnN0X3RhYmxlX29mZnNldCA9Ci0gICAgQ29tcHV0ZU9mZnNldFRvRmly
c3RUYWJsZShoZWFkZXJfdmVyc2lvbiwgbnVtX3RhYmxlcywgdHRjX2ZvbnRzKTsKLQotICBpZiAo
UFJFRElDVF9GQUxTRShmaXJzdF90YWJsZV9vZmZzZXQgPiByZXN1bHRfbGVuZ3RoKSkgewotICAg
IHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgfQorICBjb25zdCB1aW50NjRf
dCBmaXJzdF90YWJsZV9vZmZzZXQgPSBDb21wdXRlT2Zmc2V0VG9GaXJzdFRhYmxlKCpoZHIpOwog
Ci0gIHVpbnQ2NF90IGNvbXByZXNzZWRfb2Zmc2V0ID0gZmlsZS5vZmZzZXQoKTsKLSAgaWYgKFBS
RURJQ1RfRkFMU0UoY29tcHJlc3NlZF9vZmZzZXQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCkpKSB7CisgIGhkci0+Y29tcHJlc3NlZF9vZmZzZXQgPSBmaWxlLm9mZnNldCgp
OworICBpZiAoUFJFRElDVF9GQUxTRShoZHItPmNvbXByZXNzZWRfb2Zmc2V0ID4KKyAgICAgICAg
ICAgICAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkgewogICAg
IHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQotICB1aW50NjRfdCBzcmNf
b2Zmc2V0ID0gUm91bmQ0KGNvbXByZXNzZWRfb2Zmc2V0ICsgY29tcHJlc3NlZF9sZW5ndGgpOwor
ICB1aW50NjRfdCBzcmNfb2Zmc2V0ID0gUm91bmQ0KGhkci0+Y29tcHJlc3NlZF9vZmZzZXQgKyBo
ZHItPmNvbXByZXNzZWRfbGVuZ3RoKTsKICAgdWludDY0X3QgZHN0X29mZnNldCA9IGZpcnN0X3Rh
YmxlX29mZnNldDsKIAogCi0gIGZvciAodWludDE2X3QgaSA9IDA7IGkgPCBudW1fdGFibGVzOyAr
K2kpIHsKLSAgICBUYWJsZSogdGFibGUgPSAmdGFibGVzW2ldOwotICAgIHRhYmxlLT5kc3Rfb2Zm
c2V0ID0gZHN0X29mZnNldDsKLSAgICBkc3Rfb2Zmc2V0ICs9IHRhYmxlLT5kc3RfbGVuZ3RoOwot
ICAgIGlmIChQUkVESUNUX0ZBTFNFKGRzdF9vZmZzZXQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQzMl90Pjo6bWF4KCkpKSB7Ci0gICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJF
KCk7Ci0gICAgfQotICAgIGRzdF9vZmZzZXQgPSBSb3VuZDQoZHN0X29mZnNldCk7Ci0gIH0KLSAg
aWYgKFBSRURJQ1RfRkFMU0Uoc3JjX29mZnNldCA+IGxlbmd0aCB8fCBkc3Rfb2Zmc2V0ICE9IHJl
c3VsdF9sZW5ndGgpKSB7CisgIGlmIChQUkVESUNUX0ZBTFNFKHNyY19vZmZzZXQgPiBsZW5ndGgp
KSB7CiAjaWZkZWYgRk9OVF9DT01QUkVTU0lPTl9CSU4KICAgICBmcHJpbnRmKHN0ZGVyciwgIm9m
ZnNldCBmYWlsOyBzcmNfb2Zmc2V0ICUiIFBSSXU2NCAiIGxlbmd0aCAlbHUgIgotICAgICAgImRz
dF9vZmZzZXQgJSIgUFJJdTY0ICIgcmVzdWx0X2xlbmd0aCAlbHVcbiIsCi0gICAgICBzcmNfb2Zm
c2V0LCBsZW5ndGgsIGRzdF9vZmZzZXQsIHJlc3VsdF9sZW5ndGgpOworICAgICAgImRzdF9vZmZz
ZXQgJSIgUFJJdTY0ICJcbiIsCisgICAgICBzcmNfb2Zmc2V0LCBsZW5ndGgsIGRzdF9vZmZzZXQp
OwogI2VuZGlmCiAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwogICB9Ci0K
LSAgLy8gUmUtb3JkZXIgdGFibGVzIGluIG91dHB1dCAoT1RTcGVjKSBvcmRlcgotICBzdGQ6OnZl
Y3RvcjxUYWJsZT4gc29ydGVkX3RhYmxlcyh0YWJsZXMpOwotICBpZiAoaGVhZGVyX3ZlcnNpb24p
IHsKLSAgICAvLyBjb2xsZWN0aW9uOyB3ZSBoYXZlIHRvIHNvcnQgdGhlIHRhYmxlIG9mZnNldCB2
ZWN0b3IgaW4gZWFjaCBmb250Ci0gICAgZm9yIChhdXRvJiB0dGNfZm9udCA6IHR0Y19mb250cykg
ewotICAgICAgc3RkOjptYXA8dWludDMyX3QsIHVpbnQxNl90PiBzb3J0ZWRfaW5kZXhfYnlfdGFn
OwotICAgICAgZm9yIChhdXRvIHRhYmxlX2luZGV4IDogdHRjX2ZvbnQudGFibGVfaW5kaWNlcykg
ewotICAgICAgICBzb3J0ZWRfaW5kZXhfYnlfdGFnW3RhYmxlc1t0YWJsZV9pbmRleF0udGFnXSA9
IHRhYmxlX2luZGV4OwotICAgICAgfQotICAgICAgdWludDE2X3QgaW5kZXggPSAwOwotICAgICAg
Zm9yIChhdXRvJiBpIDogc29ydGVkX2luZGV4X2J5X3RhZykgewotICAgICAgICB0dGNfZm9udC50
YWJsZV9pbmRpY2VzW2luZGV4KytdID0gaS5zZWNvbmQ7Ci0gICAgICB9Ci0gICAgfQotICB9IGVs
c2UgewotICAgIC8vIG5vbi1jb2xsZWN0aW9uOyB3ZSBjYW4ganVzdCBzb3J0IHRoZSB0YWJsZXMK
LSAgICBzdGQ6OnNvcnQoc29ydGVkX3RhYmxlcy5iZWdpbigpLCBzb3J0ZWRfdGFibGVzLmVuZCgp
KTsKLSAgfQotCiAgIGlmIChtZXRhX29mZnNldCkgewogICAgIGlmIChQUkVESUNUX0ZBTFNFKHNy
Y19vZmZzZXQgIT0gbWV0YV9vZmZzZXQpKSB7CiAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lP
Tl9GQUlMVVJFKCk7CkBAIC0xMjI4LDI4ICsxMTcyLDU4IEBAIGJvb2wgQ29udmVydFdPRkYyVG9U
VEYodWludDhfdCogcmVzdWx0LCBzaXplX3QgcmVzdWx0X2xlbmd0aCwKICAgICByZXR1cm4gRk9O
VF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0KIAorICByZXR1cm4gdHJ1ZTsKK30KKworLy8g
V3JpdGUgZXZlcnl0aGluZyBiZWZvcmUgdGhlIGFjdHVhbCB0YWJsZSBkYXRhCitib29sIFdyaXRl
SGVhZGVycyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBSZWJ1aWxkTWV0YWRh
dGEqIG1ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgV09GRjJIZWFkZXIqIGhkciwgV09GRjJP
dXQqIG91dCkgeworICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBvdXRwdXQoQ29tcHV0ZU9mZnNldFRv
Rmlyc3RUYWJsZSgqaGRyKSwgMCk7CisKKyAgLy8gUmUtb3JkZXIgdGFibGVzIGluIG91dHB1dCAo
T1RTcGVjKSBvcmRlcgorICBzdGQ6OnZlY3RvcjxUYWJsZT4gc29ydGVkX3RhYmxlcyhoZHItPnRh
Ymxlcyk7CisgIGlmIChoZHItPmhlYWRlcl92ZXJzaW9uKSB7CisgICAgLy8gY29sbGVjdGlvbjsg
d2UgaGF2ZSB0byBzb3J0IHRoZSB0YWJsZSBvZmZzZXQgdmVjdG9yIGluIGVhY2ggZm9udAorICAg
IGZvciAoYXV0byYgdHRjX2ZvbnQgOiBoZHItPnR0Y19mb250cykgeworICAgICAgc3RkOjptYXA8
dWludDMyX3QsIHVpbnQxNl90PiBzb3J0ZWRfaW5kZXhfYnlfdGFnOworICAgICAgZm9yIChhdXRv
IHRhYmxlX2luZGV4IDogdHRjX2ZvbnQudGFibGVfaW5kaWNlcykgeworICAgICAgICBzb3J0ZWRf
aW5kZXhfYnlfdGFnW2hkci0+dGFibGVzW3RhYmxlX2luZGV4XS50YWddID0gdGFibGVfaW5kZXg7
CisgICAgICB9CisgICAgICB1aW50MTZfdCBpbmRleCA9IDA7CisgICAgICBmb3IgKGF1dG8mIGkg
OiBzb3J0ZWRfaW5kZXhfYnlfdGFnKSB7CisgICAgICAgIHR0Y19mb250LnRhYmxlX2luZGljZXNb
aW5kZXgrK10gPSBpLnNlY29uZDsKKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSB7CisgICAgLy8g
bm9uLWNvbGxlY3Rpb247IHdlIGNhbiBqdXN0IHNvcnQgdGhlIHRhYmxlcworICAgIHN0ZDo6c29y
dChzb3J0ZWRfdGFibGVzLmJlZ2luKCksIHNvcnRlZF90YWJsZXMuZW5kKCkpOworICB9CisKICAg
Ly8gU3RhcnQgYnVpbGRpbmcgdGhlIGZvbnQKKyAgdWludDhfdCogcmVzdWx0ID0gJm91dHB1dFsw
XTsKICAgc2l6ZV90IG9mZnNldCA9IDA7Ci0gIHNpemVfdCBvZmZzZXRfdGFibGUgPSAwOwotICBp
ZiAoaGVhZGVyX3ZlcnNpb24pIHsKKyAgaWYgKGhkci0+aGVhZGVyX3ZlcnNpb24pIHsKICAgICAv
LyBUVEMgaGVhZGVyCi0gICAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIGZsYXZv
cik7ICAvLyBUQUcgVFRDVGFnCi0gICAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQs
IGhlYWRlcl92ZXJzaW9uKTsgIC8vIEZJWEVEIFZlcnNpb24KLSAgICBvZmZzZXQgPSBTdG9yZVUz
MihyZXN1bHQsIG9mZnNldCwgdHRjX2ZvbnRzLnNpemUoKSk7ICAvLyBVTE9ORyBudW1Gb250cwor
ICAgIG9mZnNldCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCBoZHItPmZsYXZvcik7ICAvLyBU
QUcgVFRDVGFnCisgICAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXQsIGhkci0+aGVh
ZGVyX3ZlcnNpb24pOyAgLy8gRklYRUQgVmVyc2lvbgorICAgIG9mZnNldCA9IFN0b3JlVTMyKHJl
c3VsdCwgb2Zmc2V0LCBoZHItPnR0Y19mb250cy5zaXplKCkpOyAgLy8gVUxPTkcgbnVtRm9udHMK
ICAgICAvLyBTcGFjZSBmb3IgVUxPTkcgT2Zmc2V0VGFibGVbbnVtRm9udHNdICh6ZXJvZWQgaW5p
dGlhbGx5KQotICAgIG9mZnNldF90YWJsZSA9IG9mZnNldDsgIC8vIGtlZXAgc3RhcnQgb2Ygb2Zm
c2V0IHRhYmxlIGZvciBsYXRlcgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHRjX2ZvbnRz
LnNpemUoKTsgaSsrKSB7CisgICAgc2l6ZV90IG9mZnNldF90YWJsZSA9IG9mZnNldDsgIC8vIGtl
ZXAgc3RhcnQgb2Ygb2Zmc2V0IHRhYmxlIGZvciBsYXRlcgorICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgaGRyLT50dGNfZm9udHMuc2l6ZSgpOyBpKyspIHsKICAgICAgIG9mZnNldCA9IFN0b3Jl
VTMyKHJlc3VsdCwgb2Zmc2V0LCAwKTsgIC8vIHdpbGwgZmlsbCByZWFsIHZhbHVlcyBpbiBsYXRl
cgogICAgIH0KICAgICAvLyBzcGFjZSBmb3IgRFNJRyBmaWVsZHMgZm9yIGhlYWRlciB2MgotICAg
IGlmIChoZWFkZXJfdmVyc2lvbiA9PSAweDAwMDIwMDAwKSB7CisgICAgaWYgKGhkci0+aGVhZGVy
X3ZlcnNpb24gPT0gMHgwMDAyMDAwMCkgewogICAgICAgb2Zmc2V0ID0gU3RvcmVVMzIocmVzdWx0
LCBvZmZzZXQsIDApOyAgLy8gVUxPTkcgdWxEc2lnVGFnCiAgICAgICBvZmZzZXQgPSBTdG9yZVUz
MihyZXN1bHQsIG9mZnNldCwgMCk7ICAvLyBVTE9ORyB1bERzaWdMZW5ndGgKICAgICAgIG9mZnNl
dCA9IFN0b3JlVTMyKHJlc3VsdCwgb2Zmc2V0LCAwKTsgIC8vIFVMT05HIHVsRHNpZ09mZnNldAog
ICAgIH0KIAogICAgIC8vIHdyaXRlIE9mZnNldCBUYWJsZXMgYW5kIHN0b3JlIHRoZSBsb2NhdGlv
biBvZiBlYWNoIGluIFRUQyBIZWFkZXIKLSAgICBmb3IgKGF1dG8mIHR0Y19mb250IDogdHRjX2Zv
bnRzKSB7CisgICAgbWV0YWRhdGEtPmZvbnRfaW5mb3MucmVzaXplKGhkci0+dHRjX2ZvbnRzLnNp
emUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoZHItPnR0Y19mb250cy5zaXplKCk7
IGkrKykgeworICAgICAgVHRjRm9udCYgdHRjX2ZvbnQgPSBoZHItPnR0Y19mb250c1tpXTsKKwog
ICAgICAgLy8gd3JpdGUgT2Zmc2V0IFRhYmxlIGxvY2F0aW9uIGludG8gVFRDIEhlYWRlcgogICAg
ICAgb2Zmc2V0X3RhYmxlID0gU3RvcmVVMzIocmVzdWx0LCBvZmZzZXRfdGFibGUsIG9mZnNldCk7
CiAKQEAgLTEyNTgsOTkgKzEyMzIsODIgQEAgYm9vbCBDb252ZXJ0V09GRjJUb1RURih1aW50OF90
KiByZXN1bHQsIHNpemVfdCByZXN1bHRfbGVuZ3RoLAogICAgICAgb2Zmc2V0ID0gU3RvcmVPZmZz
ZXRUYWJsZShyZXN1bHQsIG9mZnNldCwgdHRjX2ZvbnQuZmxhdm9yLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0dGNfZm9udC50YWJsZV9pbmRpY2VzLnNpemUoKSk7CiAKLSAgICAg
IC8vIHdyaXRlIHRhYmxlIGVudHJpZXMKICAgICAgIGZvciAoY29uc3QgYXV0byB0YWJsZV9pbmRl
eCA6IHR0Y19mb250LnRhYmxlX2luZGljZXMpIHsKLSAgICAgICAgb2Zmc2V0ID0gU3RvcmVUYWJs
ZUVudHJ5KHJlc3VsdCwgdGFibGVzW3RhYmxlX2luZGV4XSwgb2Zmc2V0KTsKKyAgICAgICAgdWlu
dDMyX3QgdGFnID0gaGRyLT50YWJsZXNbdGFibGVfaW5kZXhdLnRhZzsKKyAgICAgICAgbWV0YWRh
dGEtPmZvbnRfaW5mb3NbaV0udGFibGVfZW50cnlfYnlfdGFnW3RhZ10gPSBvZmZzZXQ7CisgICAg
ICAgIG9mZnNldCA9IFN0b3JlVGFibGVFbnRyeShyZXN1bHQsIG9mZnNldCwgdGFnKTsKICAgICAg
IH0KKworICAgICAgdHRjX2ZvbnQuaGVhZGVyX2NoZWNrc3VtID0gQ29tcHV0ZVVMb25nU3VtKCZv
dXRwdXRbdHRjX2ZvbnQuZHN0X29mZnNldF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0IC0gdHRjX2ZvbnQuZHN0X29mZnNldCk7CiAgICAg
fQogICB9IGVsc2UgewotICAgIG9mZnNldCA9IFN0b3JlT2Zmc2V0VGFibGUocmVzdWx0LCBvZmZz
ZXQsIGZsYXZvciwgbnVtX3RhYmxlcyk7Ci0gICAgZm9yICh1aW50MTZfdCBpID0gMDsgaSA8IG51
bV90YWJsZXM7ICsraSkgewotICAgICAgb2Zmc2V0ID0gU3RvcmVUYWJsZUVudHJ5KHJlc3VsdCwg
c29ydGVkX3RhYmxlc1tpXSwgb2Zmc2V0KTsKKyAgICBtZXRhZGF0YS0+Zm9udF9pbmZvcy5yZXNp
emUoMSk7CisgICAgb2Zmc2V0ID0gU3RvcmVPZmZzZXRUYWJsZShyZXN1bHQsIG9mZnNldCwgaGRy
LT5mbGF2b3IsIGhkci0+bnVtX3RhYmxlcyk7CisgICAgZm9yICh1aW50MTZfdCBpID0gMDsgaSA8
IGhkci0+bnVtX3RhYmxlczsgKytpKSB7CisgICAgICBtZXRhZGF0YS0+Zm9udF9pbmZvc1swXS50
YWJsZV9lbnRyeV9ieV90YWdbc29ydGVkX3RhYmxlc1tpXS50YWddID0gb2Zmc2V0OworICAgICAg
b2Zmc2V0ID0gU3RvcmVUYWJsZUVudHJ5KHJlc3VsdCwgb2Zmc2V0LCBzb3J0ZWRfdGFibGVzW2ld
LnRhZyk7CiAgICAgfQogICB9CiAKLSAgc3RkOjp2ZWN0b3I8dWludDhfdD4gdW5jb21wcmVzc2Vk
X2J1ZjsKLSAgY29uc3QgdWludDhfdCogdHJhbnNmb3JtX2J1ZiA9IE5VTEw7Ci0gIHVpbnQ2NF90
IHRvdGFsX3NpemUgPSAwOwotICBmb3IgKHVpbnQxNl90IGkgPSAwOyBpIDwgbnVtX3RhYmxlczsg
KytpKSB7Ci0gICAgdG90YWxfc2l6ZSArPSB0YWJsZXNbaV0udHJhbnNmb3JtX2xlbmd0aDsKLSAg
ICBpZiAoUFJFRElDVF9GQUxTRSh0b3RhbF9zaXplID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50
MzJfdD46Om1heCgpKSkgewotICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgp
OwotICAgIH0KLSAgfQotICB1bmNvbXByZXNzZWRfYnVmLnJlc2l6ZSh0b3RhbF9zaXplKTsKLSAg
Y29uc3QgdWludDhfdCogc3JjX2J1ZiA9IGRhdGEgKyBjb21wcmVzc2VkX29mZnNldDsKLSAgaWYg
KFBSRURJQ1RfRkFMU0UoIVdvZmYyVW5jb21wcmVzcygmdW5jb21wcmVzc2VkX2J1ZlswXSwgdG90
YWxfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3JjX2J1ZiwgY29tcHJlc3NlZF9sZW5n
dGgpKSkgeworICBpZiAoUFJFRElDVF9GQUxTRSghb3V0LT5Xcml0ZSgmb3V0cHV0WzBdLCBvdXRw
dXQuc2l6ZSgpKSkpIHsKICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAg
IH0KKyAgbWV0YWRhdGEtPmhlYWRlcl9jaGVja3N1bSA9IENvbXB1dGVVTG9uZ1N1bSgmb3V0cHV0
WzBdLCBvdXRwdXQuc2l6ZSgpKTsKKyAgcmV0dXJuIHRydWU7Cit9CiAKLSAgLy8gcm91bmQgMSwg
Y29weSBhY3Jvc3MgYWxsIHRoZSB1bm1vZGlmaWVkIHRhYmxlcwotICB0cmFuc2Zvcm1fYnVmID0g
JnVuY29tcHJlc3NlZF9idWZbMF07Ci0gIGNvbnN0IHVpbnQ4X3QqIGNvbnN0IHRyYW5zZm9ybV9i
dWZfZW5kID0gJnVuY29tcHJlc3NlZF9idWZbMF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICArIHVuY29tcHJlc3NlZF9idWYuc2l6ZSgpOworfSAgLy8gbmFtZXNw
YWNlCiAKLSAgLy8gV2Ugd2lwZSBvdXQgdGhlIHZhbHVlcyBhcyB0aGV5IGdldCB3cml0dGVuIGlu
dG8gdGhlIGZpbmFsIHJlc3VsdCB0byBkZWR1cAotICBzdGQ6Om1hcDx1aW50MzJfdCwgY29uc3Qg
dWludDhfdCo+IHNyY19ieV9kZXN0OwotICBmb3IgKHVpbnQxNl90IGkgPSAwOyBpIDwgbnVtX3Rh
YmxlczsgKytpKSB7Ci0gICAgY29uc3QgVGFibGUqIHRhYmxlID0gJnRhYmxlc1tpXTsKLSAgICBz
aXplX3QgdHJhbnNmb3JtX2xlbmd0aCA9IHRhYmxlLT50cmFuc2Zvcm1fbGVuZ3RoOworc2l6ZV90
IENvbXB1dGVXT0ZGMkZpbmFsU2l6ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3Ro
KSB7CisgIEJ1ZmZlciBmaWxlKGRhdGEsIGxlbmd0aCk7CisgIHVpbnQzMl90IHRvdGFsX2xlbmd0
aDsKIAotICAgIHNyY19ieV9kZXN0W3RhYmxlLT5kc3Rfb2Zmc2V0XSA9IHRyYW5zZm9ybV9idWY7
CisgIGlmICghZmlsZS5Ta2lwKDE2KSB8fAorICAgICAgIWZpbGUuUmVhZFUzMigmdG90YWxfbGVu
Z3RoKSkgeworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiB0b3RhbF9sZW5ndGg7Cit9CiAK
LSAgICBpZiAoUFJFRElDVF9GQUxTRSh0cmFuc2Zvcm1fYnVmICsgdHJhbnNmb3JtX2xlbmd0aCA+
IHRyYW5zZm9ybV9idWZfZW5kKSkgewotICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJ
TFVSRSgpOwotICAgIH0KLSAgICB0cmFuc2Zvcm1fYnVmICs9IHRyYW5zZm9ybV9sZW5ndGg7Citi
b29sIENvbnZlcnRXT0ZGMlRvVFRGKHVpbnQ4X3QgKnJlc3VsdCwgc2l6ZV90IHJlc3VsdF9sZW5n
dGgsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBs
ZW5ndGgpIHsKKyAgV09GRjJNZW1vcnlPdXQgb3V0KHJlc3VsdCwgcmVzdWx0X2xlbmd0aCk7Cisg
IHJldHVybiBDb252ZXJ0V09GRjJUb1RURihkYXRhLCBsZW5ndGgsICZvdXQpOworfQorCitib29s
IENvbnZlcnRXT0ZGMlRvVFRGKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgsCisg
ICAgICAgICAgICAgICAgICAgICAgIFdPRkYyT3V0KiBvdXQpIHsKKyAgUmVidWlsZE1ldGFkYXRh
IG1ldGFkYXRhOworICBXT0ZGMkhlYWRlciBoZHI7CisgIGlmICghUmVhZFdPRkYySGVhZGVyKGRh
dGEsIGxlbmd0aCwgJmhkcikpIHsKKyAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJF
KCk7CiAgIH0KIAotICBmb3IgKHVpbnQxNl90IGkgPSAwOyBpIDwgbnVtX3RhYmxlczsgKytpKSB7
Ci0gICAgY29uc3QgVGFibGUqIHRhYmxlID0gJnRhYmxlc1tpXTsKLSAgICBjb25zdCBzaXplX3Qg
dHJhbnNmb3JtX2xlbmd0aCA9IHRhYmxlLT50cmFuc2Zvcm1fbGVuZ3RoOworICBpZiAoIVdyaXRl
SGVhZGVycyhkYXRhLCBsZW5ndGgsICZtZXRhZGF0YSwgJmhkciwgb3V0KSkgeworICAgIHJldHVy
biBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKKyAgfQogCi0gICAgaWYgKCh0YWJsZS0+Zmxh
Z3MgJiBrV29mZjJGbGFnc1RyYW5zZm9ybSkgIT0ga1dvZmYyRmxhZ3NUcmFuc2Zvcm0pIHsKLSAg
ICAgIGlmIChQUkVESUNUX0ZBTFNFKHRyYW5zZm9ybV9sZW5ndGggIT0gdGFibGUtPmRzdF9sZW5n
dGgpKSB7Ci0gICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKLSAgICAg
IH0KLSAgICAgIGlmIChQUkVESUNUX0ZBTFNFKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0YWJsZS0+
ZHN0X29mZnNldCArCi0gICAgICAgICAgdHJhbnNmb3JtX2xlbmd0aCkgPiByZXN1bHRfbGVuZ3Ro
KSkgewotICAgICAgICByZXR1cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7Ci0gICAgICB9
Ci0gICAgICB0cmFuc2Zvcm1fYnVmID0gc3JjX2J5X2Rlc3RbdGFibGUtPmRzdF9vZmZzZXRdOwot
ICAgICAgc3JjX2J5X2Rlc3QuZXJhc2UodGFibGUtPmRzdF9vZmZzZXQpOwotICAgICAgc3RkOjpt
ZW1jcHkocmVzdWx0ICsgdGFibGUtPmRzdF9vZmZzZXQsIHRyYW5zZm9ybV9idWYsIHRyYW5zZm9y
bV9sZW5ndGgpOwotICAgIH0KKyAgY29uc3QgZmxvYXQgY29tcHJlc3Npb25fcmF0aW8gPSAoZmxv
YXQpIGhkci51bmNvbXByZXNzZWRfc2l6ZSAvIGxlbmd0aDsKKyAgaWYgKGNvbXByZXNzaW9uX3Jh
dGlvID4ga01heFBsYXVzaWJsZUNvbXByZXNzaW9uUmF0aW8pIHsKKyNpZmRlZiBGT05UX0NPTVBS
RVNTSU9OX0JJTgorICAgIGZwcmludGYoc3RkZXJyLCAiSW1wbGF1c2libGUgY29tcHJlc3Npb24g
cmF0aW8gJS4wMWZcbiIsIGNvbXByZXNzaW9uX3JhdGlvKTsKKyNlbmRpZgorICAgIHJldHVybiBG
T05UX0NPTVBSRVNTSU9OX0ZBSUxVUkUoKTsKICAgfQogCi0gIC8vIHJvdW5kIDIsIHJlY29uc3Ry
dWN0IHRyYW5zZm9ybWVkIHRhYmxlcwotICBpZiAoUFJFRElDVF9GQUxTRShoZWFkZXJfdmVyc2lv
bikpIHsKLSAgICAvLyBSZWJ1aWxkIGNvbGxlY3Rpb24gZm9udCBieSBmb250LgotICAgIHN0ZDo6
dmVjdG9yPFRhYmxlPiBmb250X3RhYmxlczsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHR0Y19mb250
IDogdHRjX2ZvbnRzKSB7Ci0gICAgICBmb250X3RhYmxlcy5yZXNpemUodHRjX2ZvbnQudGFibGVf
aW5kaWNlcy5zaXplKCkpOwotICAgICAgZm9yIChhdXRvIGkgPSAwOyBpIDwgdHRjX2ZvbnQudGFi
bGVfaW5kaWNlcy5zaXplKCk7IGkrKykgewotICAgICAgICBmb250X3RhYmxlc1tpXSA9IHRhYmxl
c1t0dGNfZm9udC50YWJsZV9pbmRpY2VzW2ldXTsKLSAgICAgIH0KLSAgICAgIGlmIChQUkVESUNU
X0ZBTFNFKCFSZWNvbnN0cnVjdFRyYW5zZm9ybWVkRm9udChmb250X3RhYmxlcywgJnNyY19ieV9k
ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCwgcmVzdWx0X2xlbmd0aCkpKSB7Ci0gICAgICAgIHJldHVybiBGT05UX0NPTVBSRVNT
SU9OX0ZBSUxVUkUoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKFBSRURJ
Q1RfRkFMU0UoIVJlY29uc3RydWN0VHJhbnNmb3JtZWRGb250KHRhYmxlcywgJnNyY19ieV9kZXN0
LCByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdF9sZW5ndGgpKSkgewotICAgICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJ
TFVSRSgpOwotICAgIH0KKyAgY29uc3QgdWludDhfdCogc3JjX2J1ZiA9IGRhdGEgKyBoZHIuY29t
cHJlc3NlZF9vZmZzZXQ7CisgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IHVuY29tcHJlc3NlZF9idWYo
aGRyLnVuY29tcHJlc3NlZF9zaXplKTsKKyAgaWYgKFBSRURJQ1RfRkFMU0UoIVdvZmYyVW5jb21w
cmVzcygmdW5jb21wcmVzc2VkX2J1ZlswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZHIudW5jb21wcmVzc2VkX3NpemUsIHNyY19idWYsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGRyLmNvbXByZXNzZWRfbGVuZ3RoKSkpIHsKKyAgICByZXR1
cm4gRk9OVF9DT01QUkVTU0lPTl9GQUlMVVJFKCk7CiAgIH0KIAotICBpZiAoaGVhZGVyX3ZlcnNp
b24pIHsKLSAgICBpZiAoUFJFRElDVF9GQUxTRSgKLSAgICAgICAgIUZpeENvbGxlY3Rpb25DaGVj
a3N1bXMoaGVhZGVyX3ZlcnNpb24sIHRhYmxlcywgdHRjX2ZvbnRzLCByZXN1bHQpKSkgewotICAg
ICAgcmV0dXJuIEZPTlRfQ09NUFJFU1NJT05fRkFJTFVSRSgpOwotICAgIH0KLSAgfSBlbHNlIHsK
LSAgICBpZiAoUFJFRElDVF9GQUxTRSghRml4Q2hlY2tzdW1zKHNvcnRlZF90YWJsZXMsIHJlc3Vs
dCkpKSB7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWV0YWRhdGEuZm9udF9pbmZvcy5zaXpl
KCk7IGkrKykgeworICAgIGlmIChQUkVESUNUX0ZBTFNFKCFSZWNvbnN0cnVjdEZvbnQoJnVuY29t
cHJlc3NlZF9idWZbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZHIudW5jb21wcmVzc2VkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmbWV0YWRhdGEsICZoZHIsIGksIG91dCkpKSB7CiAgICAgICByZXR1cm4gRk9OVF9DT01Q
UkVTU0lPTl9GQUlMVVJFKCk7CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS93b2ZmMi9zcmMvd29mZjJfZGVjLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMv
d29mZjJfZGVjLmgKaW5kZXggNzRiYTdmNS4uYjg4OTgxMiAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2RlYy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3dv
ZmYyL3NyYy93b2ZmMl9kZWMuaApAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVkZSA8c3RkZGVm
Lmg+CiAjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlICIuL3dvZmYyX291dC5oIgogCiBu
YW1lc3BhY2Ugd29mZjIgewogCkBAIC0yOCw5ICsyOSwxNiBAQCBzaXplX3QgQ29tcHV0ZVdPRkYy
RmluYWxTaXplKGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBsZW5ndGgpOwogLy8gRGVjb21w
cmVzc2VzIHRoZSBmb250IGludG8gdGhlIHRhcmdldCBidWZmZXIuIFRoZSByZXN1bHRfbGVuZ3Ro
IHNob3VsZAogLy8gYmUgdGhlIHNhbWUgYXMgZGV0ZXJtaW5lZCBieSBDb21wdXRlRmluYWxTaXpl
KCkuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsCiAvLyBkZWNvbXByZXNzaW9uLgorLy8gREVQ
UkVDQVRFRDsgcGxlYXNlIHByZWZlciB0aGUgdmVyc2lvbiB0aGF0IHRha2VzIGEgV09GRjJPdXQq
CiBib29sIENvbnZlcnRXT0ZGMlRvVFRGKHVpbnQ4X3QgKnJlc3VsdCwgc2l6ZV90IHJlc3VsdF9s
ZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVf
dCBsZW5ndGgpOwogCisvLyBEZWNvbXByZXNzZXMgdGhlIGZvbnQgaW50byBvdXQuIFJldHVybnMg
dHJ1ZSBvbiBzdWNjZXNzLgorLy8gV29ya3MgZXZlbiBpZiBXT0ZGMkhlYWRlciB0b3RhbFNmbnRT
aXplIGlzIHdyb25nLgorLy8gUGxlYXNlIHByZWZlciB0aGlzIEFQSS4KK2Jvb2wgQ29udmVydFdP
RkYyVG9UVEYoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgV09GRjJPdXQqIG91dCk7CisKIH0gLy8gbmFtZXNwYWNlIHdvZmYyCiAKICNl
bmRpZiAgLy8gV09GRjJfV09GRjJfREVDX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS93b2ZmMi9zcmMvd29mZjJfZGVjb21wcmVzcy5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYy
L3NyYy93b2ZmMl9kZWNvbXByZXNzLmNjCmluZGV4IDc2NjhjNGUuLmYyOWM3OTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9kZWNvbXByZXNzLmNjCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9kZWNvbXByZXNzLmNjCkBAIC0xNywx
MCArMTcsMTAgQEAKIAogI2luY2x1ZGUgPHN0cmluZz4KIAotCi0jaW5jbHVkZSAiZmlsZS5oIgor
I2luY2x1ZGUgIi4vZmlsZS5oIgogI2luY2x1ZGUgIi4vd29mZjJfZGVjLmgiCiAKKwogaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CiAgIHVzaW5nIHN0ZDo6c3RyaW5nOwogCkBAIC0z
MSwyNCArMzEsMTggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CiAKICAgc3Ry
aW5nIGZpbGVuYW1lKGFyZ3ZbMV0pOwogICBzdHJpbmcgb3V0ZmlsZW5hbWUgPSBmaWxlbmFtZS5z
dWJzdHIoMCwgZmlsZW5hbWUuZmluZF9sYXN0X29mKCIuIikpICsgIi50dGYiOwotICBmcHJpbnRm
KHN0ZG91dCwgIlByb2Nlc3NpbmcgJXMgPT4gJXNcbiIsCi0gICAgZmlsZW5hbWUuY19zdHIoKSwg
b3V0ZmlsZW5hbWUuY19zdHIoKSk7CisKICAgc3RyaW5nIGlucHV0ID0gd29mZjI6OkdldEZpbGVD
b250ZW50KGZpbGVuYW1lKTsKKyAgY29uc3QgdWludDhfdCogcmF3X2lucHV0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKTsKKyAgc3RyaW5nIG91dHB1dChz
dGQ6Om1pbih3b2ZmMjo6Q29tcHV0ZVdPRkYyRmluYWxTaXplKHJhd19pbnB1dCwgaW5wdXQuc2l6
ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB3b2ZmMjo6a0RlZmF1bHRNYXhTaXplKSwg
MCk7CisgIHdvZmYyOjpXT0ZGMlN0cmluZ091dCBvdXQoJm91dHB1dCk7CiAKLSAgc2l6ZV90IGRl
Y29tcHJlc3NlZF9zaXplID0gd29mZjI6OkNvbXB1dGVXT0ZGMkZpbmFsU2l6ZSgKLSAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0LmRhdGEoKSksIGlucHV0LnNpemUo
KSk7Ci0gIHN0cmluZyBvdXRwdXQoZGVjb21wcmVzc2VkX3NpemUsIDApOwotICBjb25zdCBib29s
IG9rID0gd29mZjI6OkNvbnZlcnRXT0ZGMlRvVFRGKAotICAgICAgcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oJm91dHB1dFswXSksIGRlY29tcHJlc3NlZF9zaXplLAotICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5wdXQuZGF0YSgpKSwgaW5wdXQuc2l6ZSgpKTsKKyAg
Y29uc3QgYm9vbCBvayA9IHdvZmYyOjpDb252ZXJ0V09GRjJUb1RURihyYXdfaW5wdXQsIGlucHV0
LnNpemUoKSwgJm91dCk7CiAKLSAgaWYgKCFvaykgewotICAgIGZwcmludGYoc3RkZXJyLCAiRGVj
b21wcmVzc2lvbiBmYWlsZWRcbiIpOwotICAgIHJldHVybiAxOworICBpZiAob2spIHsKKyAgICB3
b2ZmMjo6U2V0RmlsZUNvbnRlbnRzKG91dGZpbGVuYW1lLCBvdXRwdXQuYmVnaW4oKSwKKyAgICAg
ICAgb3V0cHV0LmJlZ2luKCkgKyBvdXQuU2l6ZSgpKTsKICAgfQotCi0gIHdvZmYyOjpTZXRGaWxl
Q29udGVudHMob3V0ZmlsZW5hbWUsIG91dHB1dCk7Ci0KLSAgcmV0dXJuIDA7CisgIHJldHVybiBv
ayA/IDAgOiAxOwogfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2ZmMi9zcmMv
d29mZjJfZW5jLmNjIGIvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX2VuYy5jYwpp
bmRleCA1MjU1YWE1Li5kMTAwYWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS93b2Zm
Mi9zcmMvd29mZjJfZW5jLmNjCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2Zm
Ml9lbmMuY2MKQEAgLTIzLDggKzIzLDggQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8
dmVjdG9yPgogCisjaW5jbHVkZSAiLi9jb21wcmVzc29yLmgiCiAjaW5jbHVkZSAiLi9idWZmZXIu
aCIKLSNpbmNsdWRlICIuL2VuY29kZS5oIgogI2luY2x1ZGUgIi4vZm9udC5oIgogI2luY2x1ZGUg
Ii4vbm9ybWFsaXplLmgiCiAjaW5jbHVkZSAiLi9yb3VuZC5oIgpAQCAtNDcsNiArNDcsNyBAQCB1
c2luZyBzdGQ6OnZlY3RvcjsKIGNvbnN0IHNpemVfdCBrV29mZjJIZWFkZXJTaXplID0gNDg7CiBj
b25zdCBzaXplX3Qga1dvZmYyRW50cnlTaXplID0gMjA7CiAKKwogYm9vbCBDb21wcmVzcyhjb25z
dCB1aW50OF90KiBkYXRhLCBjb25zdCBzaXplX3QgbGVuLAogICAgICAgICAgICAgICB1aW50OF90
KiByZXN1bHQsIHVpbnQzMl90KiByZXN1bHRfbGVuLAogICAgICAgICAgICAgICBicm90bGk6OkJy
b3RsaVBhcmFtczo6TW9kZSBtb2RlLCBpbnQgcXVhbGl0eSkgewpAQCAtMTIwLDcgKzEyMSw3IEBA
IHNpemVfdCBDb21wdXRlV29mZjJMZW5ndGgoY29uc3QgRm9udENvbGxlY3Rpb24mIGZvbnRfY29s
bGVjdGlvbiwKICAgfQogCiAgIC8vIGZvciBjb2xsZWN0aW9ucyBvbmx5LCBjb2xsZWN0aW9uIHRh
YmxlcwotICBpZiAoZm9udF9jb2xsZWN0aW9uLmZvbnRzLnNpemUoKSA+IDEpIHsKKyAgaWYgKGZv
bnRfY29sbGVjdGlvbi5mbGF2b3IgPT0ga1R0Y0ZvbnRGbGF2b3IpIHsKICAgICBzaXplICs9IDQ7
ICAvLyBVSW50MzIgVmVyc2lvbiBvZiBUVEMgSGVhZGVyCiAgICAgc2l6ZSArPSBTaXplMjU1VVNo
b3J0KGZvbnRfY29sbGVjdGlvbi5mb250cy5zaXplKCkpOyAgLy8gMjU1VUludDE2IG51bUZvbnRz
CiAKQEAgLTE0NywxNCArMTQ4LDYgQEAgc2l6ZV90IENvbXB1dGVXb2ZmMkxlbmd0aChjb25zdCBG
b250Q29sbGVjdGlvbiYgZm9udF9jb2xsZWN0aW9uLAogICByZXR1cm4gc2l6ZTsKIH0KIAotc2l6
ZV90IENvbXB1dGVUVEZMZW5ndGgoY29uc3Qgc3RkOjp2ZWN0b3I8VGFibGU+JiB0YWJsZXMpIHsK
LSAgc2l6ZV90IHNpemUgPSAxMiArIDE2ICogdGFibGVzLnNpemUoKTsgIC8vIHNmbnQgaGVhZGVy
Ci0gIGZvciAoY29uc3QgYXV0byYgdGFibGUgOiB0YWJsZXMpIHsKLSAgICBzaXplICs9IFJvdW5k
NCh0YWJsZS5zcmNfbGVuZ3RoKTsKLSAgfQotICByZXR1cm4gc2l6ZTsKLX0KLQogc2l6ZV90IENv
bXB1dGVVbmNvbXByZXNzZWRMZW5ndGgoY29uc3QgRm9udCYgZm9udCkgewogICAvLyBzZm50IGhl
YWRlciArIG9mZnNldCB0YWJsZQogICBzaXplX3Qgc2l6ZSA9IDEyICsgMTYgKiBmb250Lm51bV90
YWJsZXM7CkBAIC0xNjgsNyArMTYxLDcgQEAgc2l6ZV90IENvbXB1dGVVbmNvbXByZXNzZWRMZW5n
dGgoY29uc3QgRm9udCYgZm9udCkgewogfQogCiBzaXplX3QgQ29tcHV0ZVVuY29tcHJlc3NlZExl
bmd0aChjb25zdCBGb250Q29sbGVjdGlvbiYgZm9udF9jb2xsZWN0aW9uKSB7Ci0gIGlmIChmb250
X2NvbGxlY3Rpb24uZm9udHMuc2l6ZSgpID09IDEpIHsKKyAgaWYgKGZvbnRfY29sbGVjdGlvbi5m
bGF2b3IgIT0ga1R0Y0ZvbnRGbGF2b3IpIHsKICAgICByZXR1cm4gQ29tcHV0ZVVuY29tcHJlc3Nl
ZExlbmd0aChmb250X2NvbGxlY3Rpb24uZm9udHNbMF0pOwogICB9CiAgIHNpemVfdCBzaXplID0g
Q29sbGVjdGlvbkhlYWRlclNpemUoZm9udF9jb2xsZWN0aW9uLmhlYWRlcl92ZXJzaW9uLApAQCAt
Mjc5LDIwICsyNzIsMjIgQEAgYm9vbCBDb252ZXJ0VFRGVG9XT0ZGMihjb25zdCB1aW50OF90ICpk
YXRhLCBzaXplX3QgbGVuZ3RoLAogICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBjb21wcmVzc2lvbl9i
dWYoY29tcHJlc3Npb25fYnVmZmVyX3NpemUpOwogICB1aW50MzJfdCB0b3RhbF9jb21wcmVzc2Vk
X2xlbmd0aCA9IGNvbXByZXNzaW9uX2J1ZmZlcl9zaXplOwogCi0gIC8vIENvbGxlY3QgYWxsIHRy
YW5zZm9ybWVkIGRhdGEgaW50byBvbmUgcGxhY2UuCisgIC8vIENvbGxlY3QgYWxsIHRyYW5zZm9y
bWVkIGRhdGEgaW50byBvbmUgcGxhY2UgaW4gb3V0cHV0IG9yZGVyLgogICBzdGQ6OnZlY3Rvcjx1
aW50OF90PiB0cmFuc2Zvcm1fYnVmKHRvdGFsX3RyYW5zZm9ybV9sZW5ndGgpOwogICBzaXplX3Qg
dHJhbnNmb3JtX29mZnNldCA9IDA7CiAgIGZvciAoY29uc3QgYXV0byYgZm9udCA6IGZvbnRfY29s
bGVjdGlvbi5mb250cykgewotICAgIGZvciAoY29uc3QgYXV0byYgaSA6IGZvbnQudGFibGVzKSB7
Ci0gICAgICBjb25zdCBGb250OjpUYWJsZSogdGFibGUgPSBmb250LkZpbmRUYWJsZShpLnNlY29u
ZC50YWcgXiAweDgwODA4MDgwKTsKLSAgICAgIGlmIChpLnNlY29uZC5Jc1JldXNlZCgpKSBjb250
aW51ZTsKLSAgICAgIGlmIChpLnNlY29uZC50YWcgJiAweDgwODA4MDgwKSBjb250aW51ZTsKKyAg
ICBmb3IgKGNvbnN0IGF1dG8gdGFnIDogZm9udC5PdXRwdXRPcmRlcmVkVGFncygpKSB7CisgICAg
ICBjb25zdCBGb250OjpUYWJsZSYgb3JpZ2luYWwgPSBmb250LnRhYmxlcy5hdCh0YWcpOworICAg
ICAgaWYgKG9yaWdpbmFsLklzUmV1c2VkKCkpIGNvbnRpbnVlOworICAgICAgaWYgKHRhZyAmIDB4
ODA4MDgwODApIGNvbnRpbnVlOworICAgICAgY29uc3QgRm9udDo6VGFibGUqIHRhYmxlX3RvX3N0
b3JlID0gZm9udC5GaW5kVGFibGUodGFnIF4gMHg4MDgwODA4MCk7CisgICAgICBpZiAodGFibGVf
dG9fc3RvcmUgPT0gTlVMTCkgdGFibGVfdG9fc3RvcmUgPSAmb3JpZ2luYWw7CiAKLSAgICAgIGlm
ICh0YWJsZSA9PSBOVUxMKSB0YWJsZSA9ICZpLnNlY29uZDsKLSAgICAgIFN0b3JlQnl0ZXModGFi
bGUtPmRhdGEsIHRhYmxlLT5sZW5ndGgsCisgICAgICBTdG9yZUJ5dGVzKHRhYmxlX3RvX3N0b3Jl
LT5kYXRhLCB0YWJsZV90b19zdG9yZS0+bGVuZ3RoLAogICAgICAgICAgICAgICAgICAmdHJhbnNm
b3JtX29mZnNldCwgJnRyYW5zZm9ybV9idWZbMF0pOwogICAgIH0KICAgfQorCiAgIC8vIENvbXBy
ZXNzIGFsbCB0cmFuc2Zvcm1lZCBkYXRhIGluIG9uZSBzdHJlYW0uCiAgIGlmICghV29mZjJDb21w
cmVzcyh0cmFuc2Zvcm1fYnVmLmRhdGEoKSwgdG90YWxfdHJhbnNmb3JtX2xlbmd0aCwKICAgICAg
ICAgICAgICAgICAgICAgICZjb21wcmVzc2lvbl9idWZbMF0sCkBAIC0zNzcsMTMgKzM3MiwxMiBA
QCBib29sIENvbnZlcnRUVEZUb1dPRkYyKGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBsZW5n
dGgsCiAgIH0KICAgKnJlc3VsdF9sZW5ndGggPSB3b2ZmMl9sZW5ndGg7CiAKLSAgY29uc3QgRm9u
dCYgZmlyc3RfZm9udCA9IGZvbnRfY29sbGVjdGlvbi5mb250c1swXTsKICAgc2l6ZV90IG9mZnNl
dCA9IDA7CiAKICAgLy8gc3RhcnQgb2Ygd29mZjIgaGVhZGVyIChodHRwOi8vd3d3LnczLm9yZy9U
Ui9XT0ZGMi8jd29mZjIwSGVhZGVyKQogICBTdG9yZVUzMihrV29mZjJTaWduYXR1cmUsICZvZmZz
ZXQsIHJlc3VsdCk7Ci0gIGlmIChmb250X2NvbGxlY3Rpb24uZm9udHMuc2l6ZSgpID09IDEpIHsK
LSAgICBTdG9yZVUzMihmaXJzdF9mb250LmZsYXZvciwgJm9mZnNldCwgcmVzdWx0KTsKKyAgaWYg
KGZvbnRfY29sbGVjdGlvbi5mbGF2b3IgIT0ga1R0Y0ZvbnRGbGF2b3IpIHsKKyAgICBTdG9yZVUz
Mihmb250X2NvbGxlY3Rpb24uZm9udHNbMF0uZmxhdm9yLCAmb2Zmc2V0LCByZXN1bHQpOwogICB9
IGVsc2UgewogICAgIFN0b3JlVTMyKGtUdGNGb250Rmxhdm9yLCAmb2Zmc2V0LCByZXN1bHQpOwog
ICB9CkBAIC0zOTQsOSArMzg4LDkgQEAgYm9vbCBDb252ZXJ0VFRGVG9XT0ZGMihjb25zdCB1aW50
OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoLAogICBTdG9yZVUzMihDb21wdXRlVW5jb21wcmVzc2Vk
TGVuZ3RoKGZvbnRfY29sbGVjdGlvbiksICZvZmZzZXQsIHJlc3VsdCk7CiAgIFN0b3JlVTMyKHRv
dGFsX2NvbXByZXNzZWRfbGVuZ3RoLCAmb2Zmc2V0LCByZXN1bHQpOyAgLy8gdG90YWxDb21wcmVz
c2VkU2l6ZQogCi0gIC8vIFRPRE8odXNlcik6IGlzIGFsd2F5cyB0YWtpbmcgdGhpcyBmcm9tIHRo
ZSBmaXJzdCB0YWJsZXMgaGVhZCBPSz8KLSAgLy8gZm9udCByZXZpc2lvbgotICBTdG9yZUJ5dGVz
KGZpcnN0X2ZvbnQuRmluZFRhYmxlKGtIZWFkVGFibGVUYWcpLT5kYXRhICsgNCwgNCwgJm9mZnNl
dCwgcmVzdWx0KTsKKyAgLy8gTGV0J3MganVzdCBhbGwgYmUgdjEuMAorICBTdG9yZTE2KDEsICZv
ZmZzZXQsIHJlc3VsdCk7ICAvLyBtYWpvclZlcnNpb24KKyAgU3RvcmUxNigwLCAmb2Zmc2V0LCBy
ZXN1bHQpOyAgLy8gbWlub3JWZXJzaW9uCiAgIGlmIChjb21wcmVzc2VkX21ldGFkYXRhX2J1Zl9s
ZW5ndGggPiAwKSB7CiAgICAgU3RvcmVVMzIod29mZjJfbGVuZ3RoIC0gY29tcHJlc3NlZF9tZXRh
ZGF0YV9idWZfbGVuZ3RoLAogICAgICAgICAgICAgICZvZmZzZXQsIHJlc3VsdCk7ICAvLyBtZXRh
T2Zmc2V0CkBAIC00MTgsNyArNDEyLDcgQEAgYm9vbCBDb252ZXJ0VFRGVG9XT0ZGMihjb25zdCB1
aW50OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoLAogICB9CiAKICAgLy8gZm9yIGNvbGxlY3Rpb25z
IG9ubHksIGNvbGxlY3Rpb24gdGFibGUgZGlyZWN0b3J5Ci0gIGlmIChmb250X2NvbGxlY3Rpb24u
Zm9udHMuc2l6ZSgpID4gMSkgeworICBpZiAoZm9udF9jb2xsZWN0aW9uLmZsYXZvciA9PSBrVHRj
Rm9udEZsYXZvcikgewogICAgIFN0b3JlVTMyKGZvbnRfY29sbGVjdGlvbi5oZWFkZXJfdmVyc2lv
biwgJm9mZnNldCwgcmVzdWx0KTsKICAgICBTdG9yZTI1NVVTaG9ydChmb250X2NvbGxlY3Rpb24u
Zm9udHMuc2l6ZSgpLCAmb2Zmc2V0LCByZXN1bHQpOwogICAgIGZvciAoY29uc3QgRm9udCYgZm9u
dCA6IGZvbnRfY29sbGVjdGlvbi5mb250cykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvd29mZjIvc3JjL3dvZmYyX291dC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93
b2ZmMl9vdXQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg4MjMwNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9vdXQu
Y2MKQEAgLTAsMCArMSw3MyBAQAorLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2Us
IFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp
bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0
YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9y
Zy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNh
YmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisv
LyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4
cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxh
bmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRo
ZSBMaWNlbnNlLgorLy8KKy8vIE91dHB1dCBidWZmZXIgZm9yIFdPRkYyIGRlY29tcHJlc3Npb24u
CisKKyNpbmNsdWRlICIuL3dvZmYyX291dC5oIgorCituYW1lc3BhY2Ugd29mZjIgeworCitXT0ZG
MlN0cmluZ091dDo6V09GRjJTdHJpbmdPdXQoc3RyaW5nKiBidWYpCisgIDogYnVmXyhidWYpLAor
ICAgIG1heF9zaXplXyhrRGVmYXVsdE1heFNpemUpLAorICAgIG9mZnNldF8oMCkge30KKworYm9v
bCBXT0ZGMlN0cmluZ091dDo6V3JpdGUoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbikgeworICBy
ZXR1cm4gV3JpdGUoYnVmLCBvZmZzZXRfLCBuKTsKK30KKworYm9vbCBXT0ZGMlN0cmluZ091dDo6
V3JpdGUoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbikgeworICBpZiAo
b2Zmc2V0ID4gbWF4X3NpemVfIHx8IG4gPiBtYXhfc2l6ZV8gLSBvZmZzZXQpIHsKKyAgICByZXR1
cm4gZmFsc2U7CisgIH0KKyAgaWYgKG9mZnNldCA9PSBidWZfLT5zaXplKCkpIHsKKyAgICBidWZf
LT5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZiksIG4pOworICB9IGVsc2Ugewor
ICAgIGlmIChvZmZzZXQgKyBuID4gYnVmXy0+c2l6ZSgpKSB7CisgICAgICBidWZfLT5hcHBlbmQo
b2Zmc2V0ICsgbiAtIGJ1Zl8tPnNpemUoKSwgMCk7CisgICAgfQorICAgIGJ1Zl8tPnJlcGxhY2Uo
b2Zmc2V0LCBuLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYnVmKSwgbik7CisgIH0KKyAgb2Zm
c2V0XyA9IHN0ZDo6bWF4KG9mZnNldF8sIG9mZnNldCArIG4pOworCisgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFdPRkYyU3RyaW5nT3V0OjpTZXRNYXhTaXplKHNpemVfdCBtYXhfc2l6ZSkgewor
ICBtYXhfc2l6ZV8gPSBtYXhfc2l6ZTsKKyAgaWYgKG9mZnNldF8gPiBtYXhfc2l6ZV8pIHsKKyAg
ICBvZmZzZXRfID0gbWF4X3NpemVfOworICB9Cit9CisKK1dPRkYyTWVtb3J5T3V0OjpXT0ZGMk1l
bW9yeU91dCh1aW50OF90KiBidWYsIHNpemVfdCBidWZfc2l6ZSkKKyAgOiBidWZfKGJ1ZiksCisg
ICAgYnVmX3NpemVfKGJ1Zl9zaXplKSwKKyAgICBvZmZzZXRfKDApIHt9CisKK2Jvb2wgV09GRjJN
ZW1vcnlPdXQ6OldyaXRlKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IG4pIHsKKyAgcmV0dXJuIFdy
aXRlKGJ1Ziwgb2Zmc2V0Xywgbik7Cit9CisKK2Jvb2wgV09GRjJNZW1vcnlPdXQ6OldyaXRlKGNv
bnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IG4pIHsKKyAgaWYgKG9mZnNldCA+
IGJ1Zl9zaXplXyB8fCBuID4gYnVmX3NpemVfIC0gb2Zmc2V0KSB7CisgICAgcmV0dXJuIGZhbHNl
OworICB9CisgIHN0ZDo6bWVtY3B5KGJ1Zl8gKyBvZmZzZXQsIGJ1Ziwgbik7CisgIG9mZnNldF8g
PSBzdGQ6Om1heChvZmZzZXRfLCBvZmZzZXQgKyBuKTsKKworICByZXR1cm4gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2Ugd29mZjIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYy
L3NyYy93b2ZmMl9vdXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L3dvZmYyL3NyYy93b2ZmMl9vdXQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTU2YWZhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvd29mZjIvc3JjL3dvZmYyX291dC5oCkBAIC0wLDAg
KzEsMTE0IEBACisvLyBDb3B5cmlnaHQgMjAxNiBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAy
LjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg
aW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5
IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2Vz
L0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9y
IGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQg
V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBp
bXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292
ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2Uu
CisvLworLy8gT3V0cHV0IGJ1ZmZlciBmb3IgV09GRjIgZGVjb21wcmVzc2lvbi4KKworLy8gQ29w
eXJpZ2h0IDIwMTYgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNl
bnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2Ui
KTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0
aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBh
dAorLy8KKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8K
Ky8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3Jp
dGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3Ry
aWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09O
RElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0
aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9u
cyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8KKy8vIE91dHB1dCBi
dWZmZXIgZm9yIFdPRkYyIGRlY29tcHJlc3Npb24uCisKKyNpZm5kZWYgV09GRjJfV09GRjJfT1VU
X0hfCisjZGVmaW5lIFdPRkYyX1dPRkYyX09VVF9IXworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgor
I2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHN0cmluZz4K
KyNpbmNsdWRlICIuL3BvcnQuaCIKKworbmFtZXNwYWNlIHdvZmYyIHsKKworLy8gU3VnZ2VzdGVk
IG1heCBzaXplIGZvciBvdXRwdXQuCitjb25zdCBzaXplX3Qga0RlZmF1bHRNYXhTaXplID0gMzAg
KiAxMDI0ICogMTAyNDsKKwordXNpbmcgc3RkOjpzdHJpbmc7CisKKworLyoqCisgKiBPdXRwdXQg
aW50ZXJmYWNlIGZvciB0aGUgd29mZjIgZGVjb2RpbmcuCisgKgorICogV3JpdGVzIHRvIGFyYml0
cmFyeSBvZmZzZXRzIGFyZSBzdXBwb3J0ZWQgdG8gZmFjaWxpdGF0ZSB1cGRhdGluZyBvZmZzZXQK
KyAqIHRhYmxlIGFuZCBjaGVja3N1bXMgYWZ0ZXIgdGFibGVzIGFyZSByZWFkeS4gUmVhZGluZyB0
aGUgY3VycmVudCBzaXplIGlzCisgKiBzdXBwb3J0ZWQgc28gYSAnbG9jYScgdGFibGUgY2FuIGJl
IGJ1aWx0IHVwIHdoaWxlIHdyaXRpbmcgZ2x5cGhzLgorICoKKyAqIEJ5IGRlZmF1bHQgbGltaXRz
IHNpemUgdG8ga0RlZmF1bHRNYXhTaXplLgorICovCitjbGFzcyBXT0ZGMk91dCB7CisgcHVibGlj
OgorICB2aXJ0dWFsIH5XT0ZGMk91dCh2b2lkKSB7fQorCisgIC8vIEFwcGVuZCBuIGJ5dGVzIG9m
IGRhdGEgZnJvbSBidWYuCisgIC8vIFJldHVybiB0cnVlIGlmIGFsbCB3cml0dGVuLCBmYWxzZSBv
dGhlcndpc2UuCisgIHZpcnR1YWwgYm9vbCBXcml0ZShjb25zdCB2b2lkICpidWYsIHNpemVfdCBu
KSA9IDA7CisKKyAgLy8gV3JpdGUgbiBieXRlcyBvZiBkYXRhIGZyb20gYnVmIGF0IG9mZnNldC4K
KyAgLy8gUmV0dXJuIHRydWUgaWYgYWxsIHdyaXR0ZW4sIGZhbHNlIG90aGVyd2lzZS4KKyAgdmly
dHVhbCBib29sIFdyaXRlKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IG4p
ID0gMDsKKworICB2aXJ0dWFsIHNpemVfdCBTaXplKCkgPSAwOworfTsKKworLyoqCisgKiBFeHBh
bmRpbmcgbWVtb3J5IGJsb2NrIGZvciB3b2ZmMiBvdXQuIEJ5IGRlZmF1bHQgbGltaXRlZCB0byBr
RGVmYXVsdE1heFNpemUuCisgKi8KK2NsYXNzIFdPRkYyU3RyaW5nT3V0IDogcHVibGljIFdPRkYy
T3V0IHsKKyBwdWJsaWM6CisgIC8vIENyZWF0ZSBhIHdyaXRlciB0aGF0IHdyaXRlcyBpdHMgZGF0
YSB0byBidWYuCisgIC8vIGJ1Zi0+c2l6ZSgpIHdpbGwgZ3JvdyB0byBhdCBtb3N0IG1heF9zaXpl
CisgIC8vIGJ1ZiBtYXkgYmUgc2l6ZWQgKGUuZy4gdXNpbmcgRXN0aW1hdGVXT0ZGMkZpbmFsU2l6
ZSkgb3IgZW1wdHkuCisgIGV4cGxpY2l0IFdPRkYyU3RyaW5nT3V0KHN0cmluZyogYnVmKTsKKwor
ICBib29sIFdyaXRlKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IG4pIG92ZXJyaWRlOworICBib29s
IFdyaXRlKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IG4pIG92ZXJyaWRl
OworICBzaXplX3QgU2l6ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG9mZnNldF87IH0KKyAgc2l6ZV90
IE1heFNpemUoKSB7IHJldHVybiBtYXhfc2l6ZV87IH0KKyAgdm9pZCBTZXRNYXhTaXplKHNpemVf
dCBtYXhfc2l6ZSk7CisgcHJpdmF0ZToKKyAgc3RyaW5nKiBidWZfOworICBzaXplX3QgbWF4X3Np
emVfOworICBzaXplX3Qgb2Zmc2V0XzsKK307CisKKy8qKgorICogRml4ZWQgbWVtb3J5IGJsb2Nr
IGZvciB3b2ZmMiBvdXQuCisgKi8KK2NsYXNzIFdPRkYyTWVtb3J5T3V0IDogcHVibGljIFdPRkYy
T3V0IHsKKyBwdWJsaWM6CisgIC8vIENyZWF0ZSBhIHdyaXRlciB0aGF0IHdyaXRlcyBpdHMgZGF0
YSB0byBidWYuCisgIFdPRkYyTWVtb3J5T3V0KHVpbnQ4X3QqIGJ1Ziwgc2l6ZV90IGJ1Zl9zaXpl
KTsKKworICBib29sIFdyaXRlKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IG4pIG92ZXJyaWRlOwor
ICBib29sIFdyaXRlKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IG4pIG92
ZXJyaWRlOworICBzaXplX3QgU2l6ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG9mZnNldF87IH0KKyBw
cml2YXRlOgorICB1aW50OF90KiBidWZfOworICBzaXplX3QgYnVmX3NpemVfOworICBzaXplX3Qg
b2Zmc2V0XzsKK307CisKK30gLy8gbmFtZXNwYWNlIHdvZmYyCisKKyNlbmRpZiAgLy8gV09GRjJf
V09GRjJfT1VUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODBiZTYxMC4uODViNGYzZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE4IEBACisyMDE2LTA5LTI3ICBLaGFsZWQgSG9zbnkgIDxraGFsZWRob3NueUBl
Z2x1Zy5vcmc+CisKKyAgICAgICAgVXNlIG5ldyB3b2ZmMiBBUEkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjYwOAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IGZhc3QvdGV4dC93b2ZmMi10b3Rh
bHNmbnRzaXplLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9y
bWF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldPRkYyVmVjdG9yT3V0OjpXT0ZGMlZlY3Rvck91
dCk6CisgICAgICAgIChXZWJDb3JlOjpXT0ZGMlZlY3Rvck91dDo6V3JpdGUpOgorICAgICAgICAo
V2ViQ29yZTo6V09GRjJWZWN0b3JPdXQ6OlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVy
dFdPRkZUb1NmbnQpOgorCiAyMDE2LTA5LTI3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxl
LmNvbT4KIAogICAgICAgICBbRmV0Y2ggQVBJXSBSZW1vdmUgUmVhZGFibGVTdHJlYW1Tb3VyY2Ug
Zmlyc3RSZWFkQ2FsbGJhY2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1dPRkZGaWxlRm9ybWF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1dPRkZGaWxlRm9ybWF0LmNwcAppbmRleCA0MjBmYTQ4Li5jMjMyM2NmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCkBA
IC05MCw2ICs5MCw0MiBAQCBib29sIGlzV09GRihTaGFyZWRCdWZmZXImIGJ1ZmZlcikKICNlbmRp
ZgogfQogCisjaWYgVVNFKFdPRkYyKQorY2xhc3MgV09GRjJWZWN0b3JPdXQgOiBwdWJsaWMgd29m
ZjI6OldPRkYyT3V0IHsKK3B1YmxpYzoKKyAgICBXT0ZGMlZlY3Rvck91dChWZWN0b3I8Y2hhcj4m
IHZlY3RvcikKKyAgICAgICAgOiBtX3ZlY3Rvcih2ZWN0b3IpCisgICAgeyB9CisKKyAgICBib29s
IFdyaXRlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBuKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX3ZlY3Rvci50cnlSZXNlcnZlQ2FwYWNpdHkobV92ZWN0b3Iuc2l6ZSgpICsgbikp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fdmVjdG9yLmFwcGVuZChzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSksIG4pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBib29sIFdyaXRlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBvZmZzZXQsIHNp
emVfdCBuKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFtX3ZlY3Rvci50cnlSZXNlcnZl
Q2FwYWNpdHkob2Zmc2V0ICsgbikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmIChvZmZzZXQgKyBuID4gbV92ZWN0b3Iuc2l6ZSgpKQorICAgICAgICAgICAgbV92ZWN0b3Iu
cmVzaXplKG9mZnNldCArIG4pOworICAgICAgICBtX3ZlY3Rvci5yZW1vdmUob2Zmc2V0LCBuKTsK
KyAgICAgICAgbV92ZWN0b3IuaW5zZXJ0KG9mZnNldCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+
KGRhdGEpLCBuKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc2l6ZV90IFNp
emUoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yLnNpemUoKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPGNoYXI+JiBtX3ZlY3RvcjsKK307CisjZW5kaWYK
KwogYm9vbCBjb252ZXJ0V09GRlRvU2ZudChTaGFyZWRCdWZmZXImIHdvZmYsIFZlY3RvcjxjaGFy
PiYgc2ZudCkKIHsKICAgICBBU1NFUlRfQVJHKHNmbnQsIHNmbnQuaXNFbXB0eSgpKTsKQEAgLTEx
MSw5ICsxNDcsOSBAQCBib29sIGNvbnZlcnRXT0ZGVG9TZm50KFNoYXJlZEJ1ZmZlciYgd29mZiwg
VmVjdG9yPGNoYXI+JiBzZm50KQogCiAgICAgICAgIGlmICghc2ZudC50cnlSZXNlcnZlQ2FwYWNp
dHkoc2ZudFNpemUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBzZm50LnJl
c2l6ZShzZm50U2l6ZSk7CiAKLSAgICAgICAgcmV0dXJuIHdvZmYyOjpDb252ZXJ0V09GRjJUb1RU
RihyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzZm50LmRhdGEoKSksIHNmbnQuc2l6ZSgpLCB3
b2ZmRGF0YSwgd29mZlNpemUpOworICAgICAgICBXT0ZGMlZlY3Rvck91dCBvdXQoc2ZudCk7Cisg
ICAgICAgIHJldHVybiB3b2ZmMjo6Q29udmVydFdPRkYyVG9UVEYod29mZkRhdGEsIHdvZmZTaXpl
LCAmb3V0KTsKICAgICB9CiAjZW5kaWYKIAotLSAKMi4xMC4wCgo=
</data>
<flag name="commit-queue"
          id="313278"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>