<?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>48116</bug_id>
          
          <creation_ts>2010-10-22 00:20:05 -0700</creation_ts>
          <short_desc>[GTK] Move font related files.</short_desc>
          <delta_ts>2010-11-11 11:50:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>46029</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Ryuan Choi">ryuan.choi</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>antognolli+webkit</cc>
    
    <cc>aroben</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mrobinson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>297855</commentid>
    <comment_count>0</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2010-10-22 00:20:05 -0700</bug_when>
    <thetext>I&apos;ll moved font related files like below,
as following a guide of mrobinson at https://bugs.webkit.org/show_bug.cgi?id=46029

freetype related file -&gt; platform/graphics/freetype
pango related file -&gt; platform/graphics/pango
remove FontPlatformData.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297872</commentid>
    <comment_count>1</comment_count>
      <attachid>71537</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2010-10-22 02:02:28 -0700</bug_when>
    <thetext>Created attachment 71537
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297917</commentid>
    <comment_count>2</comment_count>
      <attachid>71552</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2010-10-22 05:23:29 -0700</bug_when>
    <thetext>Created attachment 71552
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297961</commentid>
    <comment_count>3</comment_count>
      <attachid>71552</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-10-22 07:02:14 -0700</bug_when>
    <thetext>Comment on attachment 71552
Patch

Nice! Lets wait Gtk&apos;s EWS to catch up on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297985</commentid>
    <comment_count>4</comment_count>
      <attachid>71552</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-22 08:32:20 -0700</bug_when>
    <thetext>Comment on attachment 71552
Patch

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

&gt; WebCore/GNUmakefile.am:3690
&gt; +webcoregtk_cppflags += -DUSE_FREETYPE=1 \
&gt; +                       -I$(srcdir)/WebCore/platform/graphics/freetype

Tiny nit, but to maintain consistency with the rest of the file, this should be:

webcoregt_cppflags += \
&lt;hardtab&gt;-DUSE_FREETYPE=1 \
&lt;hardtab&gt;-I$(srcdir)/WebCore/platform/graphics/freetype

I think this is going to break the WinCairo build. You have moved FontPlatformDataWinCairo.h to FontPlatformData.h somewhere in the include path for WinCairo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297986</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-22 08:32:51 -0700</bug_when>
    <thetext>
&gt; I think this is going to break the WinCairo build. You have moved FontPlatformDataWinCairo.h to FontPlatformData.h somewhere in the include path for WinCairo.

Have _not_ moved. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298346</commentid>
    <comment_count>6</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-23 00:58:10 -0700</bug_when>
    <thetext>Switching review flag for the reason stated above.  You might want to coordinate with Brent Fulgham on how best to position the WinCairo include.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298362</commentid>
    <comment_count>7</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2010-10-23 03:24:13 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Switching review flag for the reason stated above.  You might want to coordinate with Brent Fulgham on how best to position the WinCairo include.

NP, Now I&apos;m preparing windows environment to check WinCairo.
But It takes some times.
If possible, please let me know what should I do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298544</commentid>
    <comment_count>8</comment_count>
      <attachid>71676</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2010-10-24 02:06:29 -0700</bug_when>
    <thetext>Created attachment 71676
PatchConsideringWinCairo

I moved win/FontPlatformDataCairoWin.h to win/FontPlatformData.h and change WebCore.vcproj
but It was predicted because I am still struggling with windows environment.

please let me know whether it was right.

ps&gt; I changed GNUMakefile.am also like mentioned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300495</commentid>
    <comment_count>9</comment_count>
      <attachid>71676</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-27 13:11:27 -0700</bug_when>
    <thetext>Comment on attachment 71676
PatchConsideringWinCairo

Looks like the gtk-ews is happy with this change.  Shall we rock and roll?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300502</commentid>
    <comment_count>10</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-27 13:16:37 -0700</bug_when>
    <thetext>Brent Fulgham said he would take a look at this change today (hopefully).  It pretty seriously affects the WinCairo port, which has no EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307671</commentid>
    <comment_count>11</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-11-10 18:13:27 -0800</bug_when>
    <thetext>Well, it&apos;s been quite some time and there has been no objections, so I think we should just commit this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307672</commentid>
    <comment_count>12</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-11-10 18:14:37 -0800</bug_when>
    <thetext>Ryuan, FontPlatformDataFreetype has changed quite a bit since you posted this patch -- do you mind posting an updated version?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307678</commentid>
    <comment_count>13</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2010-11-10 18:33:05 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Ryuan, FontPlatformDataFreetype has changed quite a bit since you posted this patch -- do you mind posting an updated version?

sure, I&apos;ll do that now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307713</commentid>
    <comment_count>14</comment_count>
      <attachid>73577</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2010-11-10 21:13:43 -0800</bug_when>
    <thetext>Created attachment 73577
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307714</commentid>
    <comment_count>15</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2010-11-10 21:15:40 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Created an attachment (id=73577) [details]
&gt; Patch

I updated patch after checking GTK+ port(both freetype and pango) and EFL port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307740</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-10 23:22:09 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 73577:

fast/workers/storage/use-same-database-in-page-and-workers.html
fast/css/font-face-download-error.html

Please file bugs against the tests.  These tests were authored by dumi@chromium.org and yuzo@google.com.  The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307874</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-11 06:31:50 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 73577:

http/tests/appcache/top-frame-3.html

Please file bugs against the tests.  These tests were authored by ap@webkit.org and dimich@chromium.org.  The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307875</commentid>
    <comment_count>18</comment_count>
      <attachid>73577</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-11 06:33:40 -0800</bug_when>
    <thetext>Comment on attachment 73577
Patch

Clearing flags on attachment: 73577

Committed r71816: &lt;http://trac.webkit.org/changeset/71816&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307876</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-11 06:33:46 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307893</commentid>
    <comment_count>20</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-11-11 06:52:47 -0800</bug_when>
    <thetext>This broke the Windows build (see &lt;http://build.webkit.org/builders/Windows%20Debug%20%28Build%29/builds/27325/steps/compile-webkit/logs/stdio&gt;). It looks like the Cairo-specific FontPlatformData.h is overwriting the CG-specific one that we use on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307897</commentid>
    <comment_count>21</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-11-11 07:02:17 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; It looks like the Cairo-specific FontPlatformData.h is overwriting the CG-specific one that we use on Windows.

Here&apos;s a little more context:

The WebCoreGenerated project copies WebCore&apos;s headers into $WebKitOutputDir, where they are picked up by other projects (specifically, WebKit). It copies headers from a bunch of different directories. Here are the lines that are relevant to the build failure:

xcopy /y /d &quot;%ProjectDir%..\platform\graphics\*.h&quot; &quot;%WebKitOutputDir%\include\WebCore&quot;
xcopy /y /d &quot;%ProjectDir%..\platform\graphics\%1\*.h&quot; &quot;%WebKitOutputDir%\include\WebCore&quot;
xcopy /y /d &quot;%ProjectDir%..\platform\graphics\transforms\*.h&quot; &quot;%WebKitOutputDir%\include\WebCore&quot;
xcopy /y /d &quot;%ProjectDir%..\platform\graphics\win\*.h&quot; &quot;%WebKitOutputDir%\include\WebCore&quot;

%1 is either &quot;cairo&quot; or &quot;cg&quot;, depending on which configuration is being built.

So you can see that cairo/cg headers are copied first, then win headers are copied later. If the header names conflict, whichever header is newer will win (thanks to the /d flag). This patch made the Cairo-specific win/FontPlatformData.h header newer than the CG-specific one.

It seems wrong for a Cairo-specific file to be sitting in win/ without any mention of &quot;cairo&quot; in its name. Maybe it should be in a new win/cairo directory, or cairo/win?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307907</commentid>
    <comment_count>22</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-11-11 07:36:31 -0800</bug_when>
    <thetext>I&apos;m going to take care of fixing the build. I&apos;m going to move win/FontPlatformData.h to win/cairo/FontPlatformData.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308034</commentid>
    <comment_count>23</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2010-11-11 11:50:23 -0800</bug_when>
    <thetext>That sounds good to me.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71537</attachid>
            <date>2010-10-22 02:02:28 -0700</date>
            <delta_ts>2010-10-22 05:23:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48116-20101022180246.patch</filename>
            <type>text/plain</type>
            <size>132931</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDI5NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMTAtMTAtMjIgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1
bmcuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtHVEtdIE1vdmUgZm9udCByZWxhdGVkIGZpbGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgxMTYKKworICAgICAgICBNb3ZlIHBhbmdvIGFuZCBm
cmVldHlwZSByZWxhdGVkIGZpbGVzIHRvIHNoYXJlIG5vbi1HVEsrIHBsYXRmb3Jtcy4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGlzIGlzIHB1cmUgcmVmYWN0b3JpbmcuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzRWZsLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2FjaGVGcmVlVHlwZS5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udFBsYXRmb3JtRGF0YS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmg6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR2x5cGhQYWdlVHJlZU5vZGVD
YWlyby5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vU2lt
cGxlRm9udERhdGFDYWlyby5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZnJlZXR5cGU6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9Gb250Q2FjaGVGcmVlVHlwZS5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZnJlZXR5cGUvRm9udEN1c3RvbVBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcDogQ29waWVk
IGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZv
cm1EYXRhLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9u
dFBsYXRmb3JtRGF0YUZyZWVUeXBlLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJl
ZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0dseXBoUGFnZVRyZWVOb2RlRnJlZVR5
cGUuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dseXBo
UGFnZVRyZWVOb2RlQ2Fpcm8uY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0
eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL1NpbXBsZUZvbnREYXRhQ2Fpcm8uY3BwLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVQYW5nby5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURh
dGFQYW5nby5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Zv
bnRQbGF0Zm9ybURhdGFQYW5nby5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZVBhbmdvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ286IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDYWNoZVBhbmdvLmNwcDogQ29waWVkIGZyb20gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udENhY2hlUGFuZ28uY3BwLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHA6IENv
cGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21QbGF0Zm9y
bURhdGFQYW5nby5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBs
YXRmb3JtRGF0YS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
b250UGxhdGZvcm1EYXRhUGFuZ28uaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9wYW5n
by9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3BhbmdvL0dseXBoUGFnZVRyZWVOb2RlUGFuZ28uY3BwOiBDb3BpZWQgZnJv
bSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZVBhbmdvLmNw
cC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0YVBhbmdv
LmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9u
dERhdGFQYW5nby5jcHAuCisKIDIwMTAtMTAtMjIgIFpvbHRhbiBIZXJjemVnICA8emhlcmN6ZWdA
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaXJrIFNjaHVsemUuCkluZGV4OiBX
ZWJDb3JlL0NNYWtlTGlzdHNFZmwudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ01ha2VMaXN0
c0VmbC50eHQJKHJldmlzaW9uIDcwMjk2KQorKysgV2ViQ29yZS9DTWFrZUxpc3RzRWZsLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNjUsMTUgKzY1LDEyIEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogSUYgKFdURl9QTEFURk9STV9DQUlSTykKICAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNM
VURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZSIKICAg
KQogICBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9DYWlyb1V0aWxpdGllcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Db250
ZXh0U2hhZG93Q2Fpcm8uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhY2hl
RnJlZVR5cGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCi0g
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm8uY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApAQCAtODIsOCArNzksMTIgQEAgSUYg
KFdURl9QTEFURk9STV9DQUlSTykKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fp
cm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8uY3BwCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vU2ltcGxlRm9udERhdGFDYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvR2x5cGhQYWdlVHJlZU5vZGVGcmVlVHlw
ZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVU
eXBlLmNwcAogCiAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVy
Q2Fpcm8uY3BwCiAgICkKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNzAyOTYpCisrKyBXZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zNDc4LDcgKzM0NzgsNiBAQCB3ZWJjb3Jl
Z3RrX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRmxvYXRS
ZWN0Q2Fpcm8uY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWly
by5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9y
bURhdGEuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJv
LmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaCBcCkBAIC0zNjg3LDI4ICszNjg2LDMwIEBAIGVuZGlm
ICMgRU5EIEVOQUJMRV9GQVNUX01PQklMRV9TQ1JPTExJTkcKICMgRnJlZVR5cGUgZm9udCBiYWNr
ZW5kCiAjIC0tLQogaWYgVVNFX0ZSRUVUWVBFCi13ZWJjb3JlZ3RrX2NwcGZsYWdzICs9IC1EVVNF
X0ZSRUVUWVBFPTEKK3dlYmNvcmVndGtfY3BwZmxhZ3MgKz0gLURVU0VfRlJFRVRZUEU9MSBcCisg
ICAgICAgICAgICAgICAgICAgICAgIC1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZnJlZXR5cGUKIHdlYmNvcmVndGtfc291cmNlcyArPSBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9Gb250Q2FjaGVGcmVlVHlwZS5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgXAotCVdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcCBcCi0JV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuaCBc
Ci0JV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HbHlwaFBhZ2VUcmVlTm9kZUNhaXJv
LmNwcCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9TaW1wbGVGb250RGF0YUNh
aXJvLmNwcAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJl
ZVR5cGUuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhLmggXAorCVdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUvR2x5cGhQYWdlVHJlZU5vZGVGcmVlVHlwZS5jcHAgXAorCVdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5j
cHAKIGVuZGlmICMgRU5EIFVTRV9GUkVFVFlQRQogCiAjIC0tLQogIyBQYW5nbyBmb250IGJhY2tl
bmQKICMgLS0tCiBpZiBVU0VfUEFOR08KLXdlYmNvcmVndGtfY3BwZmxhZ3MgKz0gLURVU0VfUEFO
R089MQord2ViY29yZWd0a19jcHBmbGFncyArPSAtRFVTRV9QQU5HTz0xIFwKKyAgICAgICAgICAg
ICAgICAgICAgICAgLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nbwog
d2ViY29yZWd0a19zb3VyY2VzICs9IFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
b250Q2FjaGVQYW5nby5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZVBhbmdvLmNwcCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHAKKwlXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3BhbmdvL0ZvbnRDYWNoZVBhbmdvLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9wYW5nby9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwIFwKKwlXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAgXAorCVdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBsYXRmb3JtRGF0YS5oIFwKKwlXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0dseXBoUGFnZVRyZWVOb2RlUGFuZ28uY3BwIFwKKwlX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCiBl
bmRpZiAjIEVORCBVU0VfUEFOR08KIAogIyAtLS0tCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAkocmV2aXNpb24g
NzAyOTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWNoZUZyZWVU
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAy
MDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udENh
Y2hlLmgiCi0KLSNpbmNsdWRlICJDU3RyaW5nLmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1
ZGUgIk93blB0ckNhaXJvLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1SZWZQdHJDYWlyby5oIgotI2lu
Y2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KLSNpbmNsdWRl
IDxjYWlyby5oPgotI2luY2x1ZGUgPGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgotI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBGb250Q2Fj
aGU6OnBsYXRmb3JtSW5pdCgpCi17Ci0gICAgLy8gSXQncyBmaW5lIHRvIGNhbGwgRmNJbml0IG11
bHRpcGxlIHRpbWVzIHBlciB0aGUgZG9jdW1lbnRhdGlvbi4KLSAgICBpZiAoIUZjSW5pdCgpKQot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotY29uc3QgU2ltcGxlRm9udERhdGEq
IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQotewotICAgIEZjUmVzdWx0IGZyZXN1
bHQ7Ci0gICAgRm9udFBsYXRmb3JtRGF0YSogcHJpbSA9IGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3Jt
RGF0YSo+KCZmb250LnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpKTsKLQotICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBhcHBhcmVudGx5LiBXZSBhcmUgbnVsbC1jaGVj
a2luZwotICAgIC8vIGZvciBub3cganVzdCB0byBhdm9pZCBjcmFzaGluZy4KLSAgICBpZiAoIXBy
aW0gfHwgIXByaW0tPm1fcGF0dGVybikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIXBy
aW0tPm1fZmFsbGJhY2tzKQotICAgICAgICBwcmltLT5tX2ZhbGxiYWNrcyA9IEZjRm9udFNvcnQo
MCwgcHJpbS0+bV9wYXR0ZXJuLmdldCgpLCBGY1RydWUsIDAsICZmcmVzdWx0KTsKLQotICAgIEZj
Rm9udFNldCogZnMgPSBwcmltLT5tX2ZhbGxiYWNrczsKLQotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgZnMtPm5mb250OyBpKyspIHsKLSAgICAgICAgUGxhdGZvcm1SZWZQdHI8RmNQYXR0ZXJuPiBm
aW4gPSBhZG9wdFBsYXRmb3JtUmVmKEZjRm9udFJlbmRlclByZXBhcmUoMCwgcHJpbS0+bV9wYXR0
ZXJuLmdldCgpLCBmcy0+Zm9udHNbaV0pKTsKLSAgICAgICAgY2Fpcm9fZm9udF9mYWNlX3QqIGZv
bnRGYWNlID0gY2Fpcm9fZnRfZm9udF9mYWNlX2NyZWF0ZV9mb3JfcGF0dGVybihmaW4uZ2V0KCkp
OwotICAgICAgICBGb250UGxhdGZvcm1EYXRhIGFsdGVybmF0ZUZvbnQoZm9udEZhY2UsIGZvbnQu
Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRQaXhlbFNpemUoKSwgZmFsc2UsIGZhbHNlKTsKLSAg
ICAgICAgY2Fpcm9fZm9udF9mYWNlX2Rlc3Ryb3koZm9udEZhY2UpOwotICAgICAgICBhbHRlcm5h
dGVGb250Lm1fcGF0dGVybiA9IGZpbjsKLSAgICAgICAgU2ltcGxlRm9udERhdGEqIHNmZCA9IGdl
dENhY2hlZEZvbnREYXRhKCZhbHRlcm5hdGVGb250KTsKLSAgICAgICAgaWYgKHNmZC0+Y29udGFp
bnNDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0aCkpCi0gICAgICAgICAgICByZXR1cm4gc2Zk
OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hl
OjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQotewotICAgIHJl
dHVybiAwOwotfQotCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFs
bGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQotewotICAg
IC8vIFdlIHdhbnQgdG8gcmV0dXJuIGEgZmFsbGJhY2sgZm9udCBoZXJlLCBvdGhlcndpc2UgdGhl
IGxvZ2ljIHByZXZlbnRpbmcgRm9udENvbmZpZwotICAgIC8vIG1hdGNoZXMgZm9yIG5vbi1mYWxs
YmFjayBmb250cyBtaWdodCByZXR1cm4gMC4gU2VlIGlzRmFsbGJhY2tGb250QWxsb3dlZC4KLSAg
ICBzdGF0aWMgQXRvbWljU3RyaW5nIHRpbWVzU3RyKCJzZXJpZiIpOwotICAgIHJldHVybiBnZXRD
YWNoZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHRpbWVzU3RyKTsKLX0KLQotdm9pZCBGb250
Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwg
VmVjdG9yPHVuc2lnbmVkPiYgdHJhaXRzTWFza3MpCi17Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZ2V0
RmFtaWx5TmFtZVN0cmluZ0Zyb21Gb250RGVzY3JpcHRpb25BbmRGYW1pbHkoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQot
ewotICAgIC8vIElmIHdlJ3JlIGNyZWF0aW5nIGEgZmFsbGJhY2sgZm9udCAoZS5nLiAiLXdlYmtp
dC1tb25vc3BhY2UiKSwgY29udmVydCB0aGUgbmFtZSBpbnRvCi0gICAgLy8gdGhlIGZhbGxiYWNr
IG5hbWUgKGxpa2UgIm1vbm9zcGFjZSIpIHRoYXQgZm9udGNvbmZpZyB1bmRlcnN0YW5kcy4KLSAg
ICBpZiAoZmFtaWx5Lmxlbmd0aCgpICYmICFmYW1pbHkuc3RhcnRzV2l0aCgiLXdlYmtpdC0iKSkK
LSAgICAgICAgcmV0dXJuIGZhbWlseS5zdHJpbmcoKTsKLQotICAgIHN3aXRjaCAoZm9udERlc2Ny
aXB0aW9uLmdlbmVyaWNGYW1pbHkoKSkgewotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTdGFu
ZGFyZEZhbWlseToKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHk6Ci0gICAg
ICAgIHJldHVybiAic2VyaWYiOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTYW5zU2VyaWZG
YW1pbHk6Ci0gICAgICAgIHJldHVybiAic2Fucy1zZXJpZiI7Ci0gICAgY2FzZSBGb250RGVzY3Jp
cHRpb246Ok1vbm9zcGFjZUZhbWlseToKLSAgICAgICAgcmV0dXJuICJtb25vc3BhY2UiOwotICAg
IGNhc2UgRm9udERlc2NyaXB0aW9uOjpDdXJzaXZlRmFtaWx5OgotICAgICAgICByZXR1cm4gImN1
cnNpdmUiOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpGYW50YXN5RmFtaWx5OgotICAgICAg
ICByZXR1cm4gImZhbnRhc3kiOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseToK
LSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gIiI7Ci0gICAgfQotfQotCi1Gb250UGxhdGZv
cm1EYXRhKiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQotewot
ICAgIC8vIFRoZSBDU1MgZm9udCBtYXRjaGluZyBhbGdvcml0aG0gKGh0dHA6Ly93d3cudzMub3Jn
L1RSL2NzczMtZm9udHMvI2ZvbnQtbWF0Y2hpbmctYWxnb3JpdGhtKQotICAgIC8vIHNheXMgdGhh
dCB3ZSBtdXN0IGZpbmQgYW4gZXhhY3QgbWF0Y2ggZm9yIGZvbnQgZmFtaWx5LCBzbGFudCAoaXRh
bGljIG9yIG9ibGlxdWUgY2FuIGJlIHVzZWQpCi0gICAgLy8gYW5kIGZvbnQgd2VpZ2h0ICh3ZSBv
bmx5IG1hdGNoIGJvbGQvbm9uLWJvbGQgaGVyZSkuCi0gICAgUGxhdGZvcm1SZWZQdHI8RmNQYXR0
ZXJuPiBwYXR0ZXJuID0gYWRvcHRQbGF0Zm9ybVJlZihGY1BhdHRlcm5DcmVhdGUoKSk7Ci0gICAg
U3RyaW5nIGZhbWlseU5hbWVTdHJpbmcoZ2V0RmFtaWx5TmFtZVN0cmluZ0Zyb21Gb250RGVzY3Jp
cHRpb25BbmRGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpKTsKLSAgICBpZiAoIUZjUGF0
dGVybkFkZFN0cmluZyhwYXR0ZXJuLmdldCgpLCBGQ19GQU1JTFksIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgRmNDaGFyOCo+KGZhbWlseU5hbWVTdHJpbmcudXRmOCgpLmRhdGEoKSkpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIGJvb2wgaXRhbGljID0gZm9udERlc2NyaXB0aW9uLml0YWxpYygp
OwotICAgIGlmICghRmNQYXR0ZXJuQWRkSW50ZWdlcihwYXR0ZXJuLmdldCgpLCBGQ19TTEFOVCwg
aXRhbGljID8gRkNfU0xBTlRfSVRBTElDIDogRkNfU0xBTlRfUk9NQU4pKQotICAgICAgICByZXR1
cm4gMDsKLSAgICBib29sIGJvbGQgPSBmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkgPj0gRm9udFdl
aWdodEJvbGQ7Ci0gICAgaWYgKCFGY1BhdHRlcm5BZGRJbnRlZ2VyKHBhdHRlcm4uZ2V0KCksIEZD
X1dFSUdIVCwgYm9sZCA/IEZDX1dFSUdIVF9CT0xEIDogRkNfV0VJR0hUX05PUk1BTCkpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIGlmICghRmNQYXR0ZXJuQWRkRG91YmxlKHBhdHRlcm4uZ2V0KCks
IEZDX1BJWEVMX1NJWkUsIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBUaGUgc3RyYXRlZ3kgaXMgb3JpZ2luYWxseSBmcm9t
IFNraWEgKHNyYy9wb3J0cy9Ta0ZvbnRIb3N0X2ZvbnRjb25maWcuY3BwKToKLQotICAgIC8vIEFs
bG93IEZvbnRjb25maWcgdG8gZG8gcHJlLW1hdGNoIHN1YnN0aXR1dGlvbi4gVW5sZXNzIHdlIGFy
ZSBhY2Nlc3NpbmcgYSAiZmFsbGJhY2siCi0gICAgLy8gZmFtaWx5IGxpa2UgInNhbnMsIiB0aGlz
IGlzIHRoZSBvbmx5IHRpbWUgd2UgYWxsb3cgRm9udGNvbmZpZyB0byBzdWJzdGl0dXRlIG9uZQot
ICAgIC8vIGZhbWlseSBuYW1lIGZvciBhbm90aGVyIChpLmUuIGlmIHRoZSBmb250cyBhcmUgYWxp
YXNlZCB0byBlYWNoIG90aGVyKS4KLSAgICBGY0NvbmZpZ1N1YnN0aXR1dGUoMCwgcGF0dGVybi5n
ZXQoKSwgRmNNYXRjaFBhdHRlcm4pOwotICAgIEZjRGVmYXVsdFN1YnN0aXR1dGUocGF0dGVybi5n
ZXQoKSk7Ci0KLSAgICBGY0NoYXI4KiBmb250Q29uZmlnRmFtaWx5TmFtZUFmdGVyQ29uZmlndXJh
dGlvbjsKLSAgICBGY1BhdHRlcm5HZXRTdHJpbmcocGF0dGVybi5nZXQoKSwgRkNfRkFNSUxZLCAw
LCAmZm9udENvbmZpZ0ZhbWlseU5hbWVBZnRlckNvbmZpZ3VyYXRpb24pOwotICAgIFN0cmluZyBm
YW1pbHlOYW1lQWZ0ZXJDb25maWd1cmF0aW9uID0gU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJl
dF9jYXN0PGNoYXIqPihmb250Q29uZmlnRmFtaWx5TmFtZUFmdGVyQ29uZmlndXJhdGlvbikpOwot
Ci0gICAgRmNSZXN1bHQgZm9udENvbmZpZ1Jlc3VsdDsKLSAgICBQbGF0Zm9ybVJlZlB0cjxGY1Bh
dHRlcm4+IHJlc3VsdFBhdHRlcm4gPSBhZG9wdFBsYXRmb3JtUmVmKEZjRm9udE1hdGNoKDAsIHBh
dHRlcm4uZ2V0KCksICZmb250Q29uZmlnUmVzdWx0KSk7Ci0gICAgaWYgKCFyZXN1bHRQYXR0ZXJu
KSAvLyBObyBtYXRjaC4KLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBGY0NoYXI4KiBmb250Q29u
ZmlnRmFtaWx5TmFtZUFmdGVyTWF0Y2hpbmc7Ci0gICAgRmNQYXR0ZXJuR2V0U3RyaW5nKHJlc3Vs
dFBhdHRlcm4uZ2V0KCksIEZDX0ZBTUlMWSwgMCwgJmZvbnRDb25maWdGYW1pbHlOYW1lQWZ0ZXJN
YXRjaGluZyk7Ci0gICAgU3RyaW5nIGZhbWlseU5hbWVBZnRlck1hdGNoaW5nID0gU3RyaW5nOjpm
cm9tVVRGOChyZWludGVycHJldF9jYXN0PGNoYXIqPihmb250Q29uZmlnRmFtaWx5TmFtZUFmdGVy
TWF0Y2hpbmcpKTsKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5TmFtZUFmdGVyQ29u
ZmlndXJhdGlvbiwgZmFtaWx5TmFtZUFmdGVyTWF0Y2hpbmcpKQotICAgICAgICByZXR1cm4gbmV3
IEZvbnRQbGF0Zm9ybURhdGEocmVzdWx0UGF0dGVybi5nZXQoKSwgZm9udERlc2NyaXB0aW9uKTsK
LQotICAgIC8vIElmIEZvbnRjb25maWcgZ2F2ZSB1c2UgYSBkaWZmZXJlbnQgZm9udCBmYW1pbHkg
dGhhbiB0aGUgb25lIHdlIHJlcXVlc3RlZCwgd2Ugc2hvdWxkIGlnbm9yZSBpdAotICAgIC8vIGFu
ZCBhbGxvdyBXZWJDb3JlIHRvIGdpdmUgdXMgdGhlIG5leHQgZm9udCBvbiB0aGUgQ1NTIGZhbGxi
YWNrIGxpc3QuIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyBpZgotICAgIC8vIHRoaXMgZmFtaWx5IG5h
bWUgaXMgYSBjb21tb25seSB1c2VkIGdlbmVyaWMgZmFtaWx5LgotICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShmYW1pbHlOYW1lU3RyaW5nLCAic2FucyIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZh
bWlseU5hbWVTdHJpbmcsICJzYW5zLXNlcmlmIikKLSAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UoZmFtaWx5TmFtZVN0cmluZywgInNlcmlmIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5
TmFtZVN0cmluZywgIm1vbm9zcGFjZSIpCi0gICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZh
bWlseU5hbWVTdHJpbmcsICJmYW50YXN5IikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5TmFt
ZVN0cmluZywgImN1cnNpdmUiKSkKLSAgICAgICAgcmV0dXJuIG5ldyBGb250UGxhdGZvcm1EYXRh
KHJlc3VsdFBhdHRlcm4uZ2V0KCksIGZvbnREZXNjcmlwdGlvbik7Ci0KLSAgICAvLyBGb250Y29u
ZmlnIGRpZCBub3QgcmV0dXJuIGEgZ29vZCBtYXRjaC4KLSAgICByZXR1cm4gMDsKLX0KLQotfQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiA3MDI5NikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9r
ZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5o
IgotCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgotI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1zdGF0aWMgdm9pZCByZWxlYXNlQ3VzdG9tRm9udERhdGEodm9pZCog
ZGF0YSkKLXsKLSAgICBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihkYXRhKS0+ZGVyZWYoKTsK
LX0KLQotRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YShGVF9G
YWNlIGZyZWVUeXBlRmFjZSwgU2hhcmVkQnVmZmVyKiBidWZmZXIpCi0gICAgOiBtX2ZyZWVUeXBl
RmFjZShmcmVlVHlwZUZhY2UpCi0gICAgLCBtX2ZvbnRGYWNlKGNhaXJvX2Z0X2ZvbnRfZmFjZV9j
cmVhdGVfZm9yX2Z0X2ZhY2UoZnJlZVR5cGVGYWNlLCAwKSkKLXsKLSAgICAvLyBGSVhNRSBTaG91
bGQgd2UgYmUgc2V0dGluZyBzb21lIGhpbnRpbmcgb3B0aW9ucyBoZXJlPwotCi0gICAgYnVmZmVy
LT5yZWYoKTsgLy8gVGhpcyBpcyBiYWxhbmNlZCBieSB0aGUgYnVmZmVyLT5kZXJlZigpIGluIHJl
bGVhc2VDdXN0b21Gb250RGF0YS4KLSAgICBzdGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tleV90IGJ1
ZmZlcktleTsKLSAgICBjYWlyb19mb250X2ZhY2Vfc2V0X3VzZXJfZGF0YShtX2ZvbnRGYWNlLCAm
YnVmZmVyS2V5LCBidWZmZXIsCi0gICAgICAgICBzdGF0aWNfY2FzdDxjYWlyb19kZXN0cm95X2Z1
bmNfdD4ocmVsZWFzZUN1c3RvbUZvbnREYXRhKSk7Ci0KLSAgICAvLyBDYWlybyBkb2Vzbid0IGRv
IEZyZWVUeXBlIHJlZmVyZW5jZSBjb3VudGluZywgc28gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3
aGVuCi0gICAgLy8gdGhpcyBjYWlyb19mb250X2ZhY2VfdCBpcyBkZXN0cm95ZWQsIGl0IGNsZWFu
cyB1cCB0aGUgRnJlZVR5cGUgZmFjZSBhcyB3ZWxsLgotICAgIHN0YXRpYyBjYWlyb191c2VyX2Rh
dGFfa2V5X3QgZnJlZVR5cGVGYWNlS2V5OwotICAgIGNhaXJvX2ZvbnRfZmFjZV9zZXRfdXNlcl9k
YXRhKG1fZm9udEZhY2UsICZmcmVlVHlwZUZhY2VLZXksIGZyZWVUeXBlRmFjZSwKLSAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2Fpcm9fZGVzdHJveV9mdW5jX3Q+KEZUX0RvbmVfRmFjZSkpOwot
fQotCi1Gb250Q3VzdG9tUGxhdGZvcm1EYXRhOjp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpCi17
Ci0gICAgLy8gbV9mcmVlVHlwZUZhY2Ugd2lsbCBiZSBkZXN0cm95ZWQgYWxvbmcgd2l0aCBtX2Zv
bnRGYWNlLiBTZWUgdGhlIGNvbnN0cnVjdG9yLgotICAgIGNhaXJvX2ZvbnRfZmFjZV9kZXN0cm95
KG1fZm9udEZhY2UpOwotfQotCi1Gb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9ybURh
dGE6OmZvbnRQbGF0Zm9ybURhdGEoaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIEZv
bnRPcmllbnRhdGlvbiwgRm9udFJlbmRlcmluZ01vZGUpCi17Ci0gICAgcmV0dXJuIEZvbnRQbGF0
Zm9ybURhdGEobV9mb250RmFjZSwgc2l6ZSwgYm9sZCwgaXRhbGljKTsKLX0KLQotRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXIq
IGJ1ZmZlcikKLXsKLSAgICBBU1NFUlRfQVJHKGJ1ZmZlciwgYnVmZmVyKTsKLQotICAgIHN0YXRp
YyBGVF9MaWJyYXJ5IGxpYnJhcnkgPSAwOwotICAgIGlmICghbGlicmFyeSAmJiBGVF9Jbml0X0Zy
ZWVUeXBlKCZsaWJyYXJ5KSkgewotICAgICAgICBsaWJyYXJ5ID0gMDsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgRlRfRmFjZSBmcmVlVHlwZUZhY2U7Ci0gICAgaWYgKEZUX05ld19N
ZW1vcnlfRmFjZShsaWJyYXJ5LCByZWludGVycHJldF9jYXN0PGNvbnN0IEZUX0J5dGUqPihidWZm
ZXItPmRhdGEoKSksIGJ1ZmZlci0+c2l6ZSgpLCAwLCAmZnJlZVR5cGVGYWNlKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIG5ldyBGb250Q3VzdG9tUGxhdGZvcm1EYXRhKGZyZWVUeXBl
RmFjZSwgYnVmZmVyKTsKLX0KLQotYm9vbCBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpzdXBwb3J0
c0Zvcm1hdChjb25zdCBTdHJpbmcmIGZvcm1hdCkKLXsKLSAgICByZXR1cm4gZXF1YWxJZ25vcmlu
Z0Nhc2UoZm9ybWF0LCAidHJ1ZXR5cGUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShmb3JtYXQsICJv
cGVudHlwZSIpOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRQbGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGEuaAkocmV2aXNpb24gNzAyOTYpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwu
Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhX2gK
LSNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YV9oCi0KLSNpZiBkZWZpbmVkKFVTRV9GUkVFVFlQRSkK
LSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuaCIKLSNlbGlmIGRlZmluZWQoVVNF
X1BBTkdPKQotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGFQYW5nby5oIgotI2VsaWYgUExBVEZP
Uk0oV0lOKQotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5oIgotI2VuZGlmCi0K
LSNlbmRpZiAvLyBGb250UGxhdGZvcm1EYXRhX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5j
cHAJKHJldmlzaW9uIDcwMjk2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI2NCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLQotI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5j
bHVkZSA8Y2Fpcm8tZnQuaD4KLSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPGZvbnRjb25m
aWcvZmNmcmVldHlwZS5oPgotCi0jaWYgIVBMQVRGT1JNKEVGTCkgfHwgRU5BQkxFKEdMSUJfU1VQ
UE9SVCkKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jYWlyb19zdWJwaXhlbF9vcmRlcl90IGNvbnZlcnRGb250Q29uZmlnU3VicGl4ZWxPcmRl
cihpbnQgZm9udENvbmZpZ09yZGVyKQotewotICAgIHN3aXRjaCAoZm9udENvbmZpZ09yZGVyKSB7
Ci0gICAgY2FzZSBGQ19SR0JBX1JHQjoKLSAgICAgICAgcmV0dXJuIENBSVJPX1NVQlBJWEVMX09S
REVSX1JHQjsKLSAgICBjYXNlIEZDX1JHQkFfQkdSOgotICAgICAgICByZXR1cm4gQ0FJUk9fU1VC
UElYRUxfT1JERVJfQkdSOwotICAgIGNhc2UgRkNfUkdCQV9WUkdCOgotICAgICAgICByZXR1cm4g
Q0FJUk9fU1VCUElYRUxfT1JERVJfVlJHQjsKLSAgICBjYXNlIEZDX1JHQkFfVkJHUjoKLSAgICAg
ICAgcmV0dXJuIENBSVJPX1NVQlBJWEVMX09SREVSX1ZCR1I7Ci0gICAgY2FzZSBGQ19SR0JBX05P
TkU6Ci0gICAgY2FzZSBGQ19SR0JBX1VOS05PV046Ci0gICAgICAgIHJldHVybiBDQUlST19TVUJQ
SVhFTF9PUkRFUl9ERUZBVUxUOwotICAgIH0KLSAgICByZXR1cm4gQ0FJUk9fU1VCUElYRUxfT1JE
RVJfREVGQVVMVDsKLX0KLQotY2Fpcm9faGludF9zdHlsZV90IGNvbnZlcnRGb250Q29uZmlnSGlu
dFN0eWxlKGludCBmb250Q29uZmlnU3R5bGUpCi17Ci0gICAgc3dpdGNoIChmb250Q29uZmlnU3R5
bGUpIHsKLSAgICBjYXNlIEZDX0hJTlRfTk9ORToKLSAgICAgICAgcmV0dXJuIENBSVJPX0hJTlRf
U1RZTEVfTk9ORTsKLSAgICBjYXNlIEZDX0hJTlRfU0xJR0hUOgotICAgICAgICByZXR1cm4gQ0FJ
Uk9fSElOVF9TVFlMRV9TTElHSFQ7Ci0gICAgY2FzZSBGQ19ISU5UX01FRElVTToKLSAgICAgICAg
cmV0dXJuIENBSVJPX0hJTlRfU1RZTEVfTUVESVVNOwotICAgIGNhc2UgRkNfSElOVF9GVUxMOgot
ICAgICAgICByZXR1cm4gQ0FJUk9fSElOVF9TVFlMRV9GVUxMOwotICAgIH0KLSAgICByZXR1cm4g
Q0FJUk9fSElOVF9TVFlMRV9OT05FOwotfQotCi12b2lkIHNldENhaXJvRm9udE9wdGlvbnNGcm9t
Rm9udENvbmZpZ1BhdHRlcm4oY2Fpcm9fZm9udF9vcHRpb25zX3QqIG9wdGlvbnMsIEZjUGF0dGVy
biogcGF0dGVybikKLXsKLSAgICBGY0Jvb2wgYm9vbGVhblJlc3VsdDsKLSAgICBpbnQgaW50ZWdl
clJlc3VsdDsKLQotICAgIGlmIChGY1BhdHRlcm5HZXRJbnRlZ2VyKHBhdHRlcm4sIEZDX1JHQkEs
IDAsICZpbnRlZ2VyUmVzdWx0KSA9PSBGY1Jlc3VsdE1hdGNoKSB7Ci0gICAgICAgIGNhaXJvX2Zv
bnRfb3B0aW9uc19zZXRfc3VicGl4ZWxfb3JkZXIob3B0aW9ucywgY29udmVydEZvbnRDb25maWdT
dWJwaXhlbE9yZGVyKGludGVnZXJSZXN1bHQpKTsKLQotICAgICAgICAvLyBCYXNlZCBvbiB0aGUg
bG9naWMgaW4gY2Fpcm8tZnQtZm9udC5jIGluIHRoZSBjYWlybyBzb3VyY2UsIGEgZm9udCB3aXRo
Ci0gICAgICAgIC8vIGEgc3VicGl4ZWwgb3JkZXIgaW1wbGllcyB0aGF0IGlzIHVzZXMgc3VicGl4
ZWwgYW50aWFsaWFzaW5nLgotICAgICAgICBpZiAoaW50ZWdlclJlc3VsdCAhPSBGQ19SR0JBX05P
TkUpCi0gICAgICAgICAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2FudGlhbGlhcyhvcHRpb25z
LCBDQUlST19BTlRJQUxJQVNfU1VCUElYRUwpOwotICAgIH0KLQotICAgIGlmIChGY1BhdHRlcm5H
ZXRCb29sKHBhdHRlcm4sIEZDX0FOVElBTElBUywgMCwgJmJvb2xlYW5SZXN1bHQpID09IEZjUmVz
dWx0TWF0Y2gpIHsKLSAgICAgICAgLy8gT25seSBvdmVycmlkZSB0aGUgYW50aS1hbGlhc2luZyBz
ZXR0aW5nIGlmIHdhcyBwcmV2aW91c2x5IHR1cm5lZCBvZmYuIE90aGVyd2lzZQotICAgICAgICAv
LyB3ZSdsbCBvdmVycmlkZSB0aGUgcHJlZmVyZW5jZSB3aGljaCBkZWNpZGVzIGJldHdlZW4gZ3Jh
eSBhbnRpLWFsaWFzaW5nIGFuZAotICAgICAgICAvLyBzdWJwaXhlbCBhbnRpLWFsaWFzaW5nLgot
ICAgICAgICBpZiAoIWJvb2xlYW5SZXN1bHQpCi0gICAgICAgICAgICBjYWlyb19mb250X29wdGlv
bnNfc2V0X2FudGlhbGlhcyhvcHRpb25zLCBDQUlST19BTlRJQUxJQVNfTk9ORSk7Ci0gICAgICAg
IGVsc2UgaWYgKGNhaXJvX2ZvbnRfb3B0aW9uc19nZXRfYW50aWFsaWFzKG9wdGlvbnMpID09IENB
SVJPX0FOVElBTElBU19OT05FKQotICAgICAgICAgICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9h
bnRpYWxpYXMob3B0aW9ucywgQ0FJUk9fQU5USUFMSUFTX0dSQVkpOwotICAgIH0KLQotICAgIGlm
IChGY1BhdHRlcm5HZXRJbnRlZ2VyKHBhdHRlcm4sIEZDX0hJTlRfU1RZTEUsIDAsICZpbnRlZ2Vy
UmVzdWx0KSA9PSBGY1Jlc3VsdE1hdGNoKQotICAgICAgICBjYWlyb19mb250X29wdGlvbnNfc2V0
X2hpbnRfc3R5bGUob3B0aW9ucywgY29udmVydEZvbnRDb25maWdIaW50U3R5bGUoaW50ZWdlclJl
c3VsdCkpOwotICAgIGlmIChGY1BhdHRlcm5HZXRCb29sKHBhdHRlcm4sIEZDX0hJTlRJTkcsIDAs
ICZib29sZWFuUmVzdWx0KSA9PSBGY1Jlc3VsdE1hdGNoICYmICFib29sZWFuUmVzdWx0KQotICAg
ICAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2hpbnRfc3R5bGUob3B0aW9ucywgQ0FJUk9fSElO
VF9TVFlMRV9OT05FKTsKLX0KLQotc3RhdGljIGNvbnN0IGNhaXJvX2ZvbnRfb3B0aW9uc190KiBn
ZXREZWZhdWx0Rm9udE9wdGlvbnMoKQotewotICAgIHN0YXRpYyBjb25zdCBjYWlyb19mb250X29w
dGlvbnNfdCogb3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsKLSNpZiBQTEFU
Rk9STShHVEspIHx8IEVOQUJMRShHTElCX1NVUFBPUlQpCi0gICAgaWYgKEdka1NjcmVlbiogc2Ny
ZWVuID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKSB7Ci0gICAgICAgIGNvbnN0IGNhaXJvX2Zv
bnRfb3B0aW9uc190KiBzY3JlZW5PcHRpb25zID0gZ2RrX3NjcmVlbl9nZXRfZm9udF9vcHRpb25z
KHNjcmVlbik7Ci0gICAgICAgIGlmIChzY3JlZW5PcHRpb25zKQotICAgICAgICAgICAgb3B0aW9u
cyA9IHNjcmVlbk9wdGlvbnM7Ci0gICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIG9wdGlvbnM7Ci19
Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoRmNQYXR0ZXJuKiBwYXR0ZXJu
LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKLSAgICA6IG1fcGF0dGVy
bihwYXR0ZXJuKQotICAgICwgbV9mYWxsYmFja3MoMCkKLSAgICAsIG1fc2l6ZShmb250RGVzY3Jp
cHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkKLSAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkK
LSAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKLSAgICAsIG1fZml4ZWRXaWR0aChmYWxz
ZSkKLXsKLSAgICBQbGF0Zm9ybVJlZlB0cjxjYWlyb19mb250X2ZhY2VfdD4gZm9udEZhY2UgPSBh
ZG9wdFBsYXRmb3JtUmVmKGNhaXJvX2Z0X2ZvbnRfZmFjZV9jcmVhdGVfZm9yX3BhdHRlcm4obV9w
YXR0ZXJuLmdldCgpKSk7Ci0gICAgaW5pdGlhbGl6ZVdpdGhGb250RmFjZShmb250RmFjZS5nZXQo
KSk7Ci0KLSAgICBpbnQgc3BhY2luZzsKLSAgICBpZiAoRmNQYXR0ZXJuR2V0SW50ZWdlcihwYXR0
ZXJuLCBGQ19TUEFDSU5HLCAwLCAmc3BhY2luZykgPT0gRmNSZXN1bHRNYXRjaCAmJiBzcGFjaW5n
ID09IEZDX01PTk8pCi0gICAgICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7Ci0KLSAgICBpZiAoZm9u
dERlc2NyaXB0aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHRCb2xkKSB7Ci0gICAgICAgIC8vIFRo
ZSBGQ19FTUJPTERFTiBwcm9wZXJ0eSBpbnN0cnVjdHMgdXMgdG8gZmFrZSB0aGUgYm9sZG5lc3Mg
b2YgdGhlIGZvbnQuCi0gICAgICAgIEZjQm9vbCBmb250Q29uZmlnRW1ib2xkZW47Ci0gICAgICAg
IGlmIChGY1BhdHRlcm5HZXRCb29sKHBhdHRlcm4sIEZDX0VNQk9MREVOLCAwLCAmZm9udENvbmZp
Z0VtYm9sZGVuKSA9PSBGY1Jlc3VsdE1hdGNoKQotICAgICAgICAgICAgbV9zeW50aGV0aWNCb2xk
ID0gZm9udENvbmZpZ0VtYm9sZGVuOwotICAgIH0KLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6Rm9u
dFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKQotICAgIDog
bV9mYWxsYmFja3MoMCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9zeW50aGV0aWNCb2xk
KGJvbGQpCi0gICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoaXRhbGljKQotICAgICwgbV9maXhlZFdp
ZHRoKGZhbHNlKQotewotICAgIC8vIFdlIGNhbm5vdCBjcmVhdGUgYSBzY2FsZWQgZm9udCBoZXJl
LgotfQotCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFj
ZV90KiBmb250RmFjZSwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYykKLSAgICA6
IG1fZmFsbGJhY2tzKDApCi0gICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fc3ludGhldGljQm9s
ZChib2xkKQotICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGl0YWxpYykKLXsKLSAgICBpbml0aWFs
aXplV2l0aEZvbnRGYWNlKGZvbnRGYWNlKTsKLQotICAgIEZUX0ZhY2UgZm9udENvbmZpZ0ZhY2Ug
PSBjYWlyb19mdF9zY2FsZWRfZm9udF9sb2NrX2ZhY2UobV9zY2FsZWRGb250LmdldCgpKTsKLSAg
ICBpZiAoZm9udENvbmZpZ0ZhY2UpIHsKLSAgICAgICAgbV9maXhlZFdpZHRoID0gZm9udENvbmZp
Z0ZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfRklYRURfV0lEVEg7Ci0gICAgICAgIGNh
aXJvX2Z0X3NjYWxlZF9mb250X3VubG9ja19mYWNlKG1fc2NhbGVkRm9udC5nZXQoKSk7Ci0gICAg
fQotfQotCi1Gb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0oY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpCi17Ci0gICAgLy8gQ2hlY2sgZm9yIHNlbGYtYXNz
aWdubWVudC4KLSAgICBpZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgIHJldHVybiAqdGhpczsK
LQotICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKLSAgICBtX3N5bnRoZXRpY0JvbGQgPSBvdGhl
ci5tX3N5bnRoZXRpY0JvbGQ7Ci0gICAgbV9zeW50aGV0aWNPYmxpcXVlID0gb3RoZXIubV9zeW50
aGV0aWNPYmxpcXVlOwotICAgIG1fZml4ZWRXaWR0aCA9IG90aGVyLm1fZml4ZWRXaWR0aDsKLSAg
ICBtX3NjYWxlZEZvbnQgPSBvdGhlci5tX3NjYWxlZEZvbnQ7Ci0gICAgbV9wYXR0ZXJuID0gb3Ro
ZXIubV9wYXR0ZXJuOwotCi0gICAgaWYgKG1fZmFsbGJhY2tzKSB7Ci0gICAgICAgIEZjRm9udFNl
dERlc3Ryb3kobV9mYWxsYmFja3MpOwotICAgICAgICAvLyBUaGlzIHdpbGwgYmUgcmUtY3JlYXRl
ZCBvbiBkZW1hbmQuCi0gICAgICAgIG1fZmFsbGJhY2tzID0gMDsKLSAgICB9Ci0KLSAgICByZXR1
cm4gKnRoaXM7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpCi0gICAgOiBtX2ZhbGxiYWNrcygwKQotewotICAgICp0
aGlzID0gb3RoZXI7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIsIGZsb2F0IHNpemUpCi17Ci0gICAgKnRoaXMgPSBv
dGhlcjsKLQotICAgIC8vIFdlIG5lZWQgdG8gcmVpbml0aWFsaXplIHRoZSBpbnN0YW5jZSwgYmVj
YXVzZSB0aGUgZGlmZmVyZW5jZSBpbiBzaXplIAotICAgIC8vIG5lY2Vzc2l0YXRlcyBhIG5ldyBz
Y2FsZWQgZm9udCBpbnN0YW5jZS4KLSAgICBtX3NpemUgPSBzaXplOwotICAgIGluaXRpYWxpemVX
aXRoRm9udEZhY2UoY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2ZvbnRfZmFjZShtX3NjYWxlZEZvbnQu
Z2V0KCkpKTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQotewot
ICAgIGlmIChtX2ZhbGxiYWNrcykgewotICAgICAgICBGY0ZvbnRTZXREZXN0cm95KG1fZmFsbGJh
Y2tzKTsKLSAgICAgICAgbV9mYWxsYmFja3MgPSAwOwotICAgIH0KLX0KLQotYm9vbCBGb250UGxh
dGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKQotewotICAgIHJldHVybiBtX2ZpeGVkV2lkdGg7Ci19
Ci0KLWJvb2wgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBvdGhlcikgY29uc3QKLXsKLSAgICBpZiAobV9wYXR0ZXJuID09IG90aGVyLm1fcGF0dGVy
bikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFtX3BhdHRlcm4gfHwgbV9wYXR0ZXJu
LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgfHwgIW90aGVyLm1fcGF0dGVybiB8fCBvdGhlci5t
X3BhdHRlcm4uaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiBGY1BhdHRlcm5FcXVhbChtX3BhdHRlcm4uZ2V0KCksIG90aGVyLm1fcGF0
dGVybi5nZXQoKSk7Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi1TdHJpbmcgRm9udFBsYXRmb3JtRGF0
YTo6ZGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLSNlbmRp
ZgotCi12b2lkIEZvbnRQbGF0Zm9ybURhdGE6OmluaXRpYWxpemVXaXRoRm9udEZhY2UoY2Fpcm9f
Zm9udF9mYWNlX3QqIGZvbnRGYWNlKQotewotICAgIGNhaXJvX2ZvbnRfb3B0aW9uc190KiBvcHRp
b25zID0gY2Fpcm9fZm9udF9vcHRpb25zX2NvcHkoZ2V0RGVmYXVsdEZvbnRPcHRpb25zKCkpOwot
Ci0gICAgY2Fpcm9fbWF0cml4X3QgY3RtOwotICAgIGNhaXJvX21hdHJpeF9pbml0X2lkZW50aXR5
KCZjdG0pOwotCi0gICAgY2Fpcm9fbWF0cml4X3QgZm9udE1hdHJpeDsKLSAgICBpZiAoIW1fcGF0
dGVybikKLSAgICAgICAgY2Fpcm9fbWF0cml4X2luaXRfc2NhbGUoJmZvbnRNYXRyaXgsIG1fc2l6
ZSwgbV9zaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgc2V0Q2Fpcm9Gb250T3B0aW9uc0Zyb21G
b250Q29uZmlnUGF0dGVybihvcHRpb25zLCBtX3BhdHRlcm4uZ2V0KCkpOwotCi0gICAgICAgIC8v
IEZvbnRDb25maWcgbWF5IHJldHVybiBhIGxpc3Qgb2YgdHJhbnNmb3JtYXRpb24gbWF0cmljZXMg
d2l0aCB0aGUgcGF0dGVybiwgZm9yIGluc3RhbmNlLAotICAgICAgICAvLyBmb3IgZm9udHMgdGhh
dCBhcmUgb2JsaXF1ZS4gV2UgdXNlIHRoYXQgdG8gaW5pdGlhbGl6ZSB0aGUgY2Fpcm8gZm9udCBt
YXRyaXguCi0gICAgICAgIEZjTWF0cml4IGZvbnRDb25maWdNYXRyaXgsICp0ZW1wRm9udENvbmZp
Z01hdHJpeDsKLSAgICAgICAgRmNNYXRyaXhJbml0KCZmb250Q29uZmlnTWF0cml4KTsKLQotICAg
ICAgICAvLyBUaGVzZSBtYXRyaWNlcyBtYXkgYmUgc3RhY2tlZCBpbiB0aGUgcGF0dGVybiwgc28g
aXQncyBvdXIgam9iIHRvIGdldCB0aGVtIGFsbCBhbmQgbXVsdGlwbHkgdGhlbS4KLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IEZjUGF0dGVybkdldE1hdHJpeChtX3BhdHRlcm4uZ2V0KCksIEZDX01B
VFJJWCwgaSwgJnRlbXBGb250Q29uZmlnTWF0cml4KSA9PSBGY1Jlc3VsdE1hdGNoOyBpKyspCi0g
ICAgICAgICAgICBGY01hdHJpeE11bHRpcGx5KCZmb250Q29uZmlnTWF0cml4LCAmZm9udENvbmZp
Z01hdHJpeCwgdGVtcEZvbnRDb25maWdNYXRyaXgpOwotICAgICAgICBjYWlyb19tYXRyaXhfaW5p
dCgmZm9udE1hdHJpeCwgZm9udENvbmZpZ01hdHJpeC54eCwgLWZvbnRDb25maWdNYXRyaXgueXgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIC1mb250Q29uZmlnTWF0cml4Lnh5LCBmb250Q29u
ZmlnTWF0cml4Lnl5LCAwLCAwKTsKLQotICAgICAgICAvLyBUaGUgbWF0cml4IGZyb20gRm9udENv
bmZpZyBkb2VzIG5vdCBpbmNsdWRlIHRoZSBzY2FsZS4KLSAgICAgICAgY2Fpcm9fbWF0cml4X3Nj
YWxlKCZmb250TWF0cml4LCBtX3NpemUsIG1fc2l6ZSk7Ci0gICAgfQotCi0gICAgbV9zY2FsZWRG
b250ID0gYWRvcHRQbGF0Zm9ybVJlZihjYWlyb19zY2FsZWRfZm9udF9jcmVhdGUoZm9udEZhY2Us
ICZmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKSk7Ci0gICAgY2Fpcm9fZm9udF9vcHRpb25zX2Rl
c3Ryb3kob3B0aW9ucyk7Ci19Ci0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5oCShyZXZp
c2lvbiA3MDI5NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udFBsYXRm
b3JtRGF0YUZyZWVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLgotICogQ29weXJpZ2h0
IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIENvcHlyaWdo
dCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChDKSAy
MDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgotICogQ29weXJpZ2h0IChDKSAy
MDEwIElnYWxpYSBTLkwuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBGb250
UGxhdGZvcm1EYXRhRnJlZVR5cGVfaAotI2RlZmluZSBGb250UGxhdGZvcm1EYXRhRnJlZVR5cGVf
aAotCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIu
aCIKLSNpbmNsdWRlICJIYXNoRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1SZWZQdHJD
YWlyby5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9GY0Zv
bnRTZXQgRmNGb250U2V0OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZvbnRQbGF0
Zm9ybURhdGEgewotcHVibGljOgotICAgIEZvbnRQbGF0Zm9ybURhdGEoV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fZmFsbGJhY2tzKDApCi0gICAgICAgICwgbV9z
aXplKDApCi0gICAgICAgICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQotICAgICAgICAsIG1fc3lu
dGhldGljT2JsaXF1ZShmYWxzZSkKLSAgICAgICAgLCBtX3NjYWxlZEZvbnQoV1RGOjpIYXNoVGFi
bGVEZWxldGVkVmFsdWUpCi0gICAgICAgIHsgfQotCi0gICAgRm9udFBsYXRmb3JtRGF0YSgpCi0g
ICAgICAgIDogbV9mYWxsYmFja3MoMCkKLSAgICAgICAgLCBtX3NpemUoMCkKLSAgICAgICAgLCBt
X3N5bnRoZXRpY0JvbGQoZmFsc2UpCi0gICAgICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNl
KQotICAgICAgICB7IH0KLQotICAgIEZvbnRQbGF0Zm9ybURhdGEoRmNQYXR0ZXJuKiwgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJik7Ci0gICAgRm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2Vf
dCogZm9udEZhY2UsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpOwotICAgIEZv
bnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7Ci0gICAg
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci0gICAgRm9udFBsYXRm
b3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgZmxvYXQgc2l6ZSk7Ci0KLSAgICB+Rm9u
dFBsYXRmb3JtRGF0YSgpOwotCi0gICAgYm9vbCBpc0ZpeGVkUGl0Y2goKTsKLSAgICBmbG9hdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgdm9pZCBzZXRTaXplKGZsb2F0IHNp
emUpIHsgbV9zaXplID0gc2l6ZTsgfQotICAgIGJvb2wgc3ludGhldGljQm9sZCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3ludGhldGljQm9sZDsgfQotICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3ludGhldGljT2JsaXF1ZTsgfQotCi0gICAgY2Fpcm9fc2NhbGVkX2Zv
bnRfdCogc2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkRm9udC5nZXQoKTsgfQot
Ci0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gUHRySGFz
aDxjYWlyb19zY2FsZWRfZm9udF90Kj46Omhhc2gobV9zY2FsZWRGb250LmdldCgpKTsKLSAgICB9
Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpIGNvbnN0Owot
ICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7
Ci0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gbV9zY2FsZWRGb250LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7Ci0gICAgfQot
Ci0jaWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwotI2VuZGlm
Ci0KLSAgICBQbGF0Zm9ybVJlZlB0cjxGY1BhdHRlcm4+IG1fcGF0dGVybjsKLSAgICBGY0ZvbnRT
ZXQqIG1fZmFsbGJhY2tzOwotICAgIGZsb2F0IG1fc2l6ZTsKLSAgICBib29sIG1fc3ludGhldGlj
Qm9sZDsKLSAgICBib29sIG1fc3ludGhldGljT2JsaXF1ZTsKLSAgICBib29sIG1fZml4ZWRXaWR0
aDsKLSAgICBQbGF0Zm9ybVJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90PiBtX3NjYWxlZEZvbnQ7
Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBpbml0aWFsaXplV2l0aEZvbnRGYWNlKGNhaXJvX2ZvbnRf
ZmFjZV90Kik7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBGb250UGxhdGZvcm1EYXRhRnJlZVR5cGVf
aApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HbHlwaFBhZ2VUcmVlTm9k
ZUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm8uY3BwCShyZXZpc2lvbiA3MDI5NikKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR2x5cGhQYWdlVHJlZU5vZGVDYWlyby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
TWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3
IEFscCBUb2tlciA8YWxwLnRva2VyQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKLQotI2luY2x1ZGUgIlNpbXBsZUZvbnRE
YXRhLmgiCi0jaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KLSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1
ZGUgPGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJv
b2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hh
ciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
b250RGF0YSkKLXsKLSAgICAvLyBUaGUgYnVmZmVyTGVuZ3RoIHdpbGwgYmUgZ3JlYXRlciB0aGFu
IHRoZSBnbHlwaCBwYWdlIHNpemUgaWYgdGhlIGJ1ZmZlciBoYXMgVW5pY29kZSBzdXBwbGVtZW50
YXJ5IGNoYXJhY3RlcnMuCi0gICAgLy8gV2Ugd29uJ3Qgc3VwcG9ydCB0aGlzIGZvciBub3cuCi0g
ICAgaWYgKGJ1ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgRlRfRmFjZSBmYWNlID0gY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfbG9ja19mYWNl
KGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5tX3NjYWxlZEZvbnQuZ2V0KCkpOwotICAgIGlmICgh
ZmFjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBoYXZlR2x5cGhzID0gZmFs
c2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
IEdseXBoIGdseXBoID0gRmNGcmVlVHlwZUNoYXJJbmRleChmYWNlLCBidWZmZXJbaV0pOwotICAg
ICAgICBpZiAoIWdseXBoKQotICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0
ICsgaSwgMCwgMCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9y
SW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGgsIGZvbnREYXRhKTsKLSAgICAgICAgICAgIGhhdmVHbHlw
aHMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2Fpcm9fZnRfc2NhbGVkX2ZvbnRf
dW5sb2NrX2ZhY2UoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm1fc2NhbGVkRm9udC5nZXQoKSk7
Ci0KLSAgICByZXR1cm4gaGF2ZUdseXBoczsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9TaW1wbGVGb250RGF0YUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1NpbXBsZUZvbnREYXRhQ2Fpcm8uY3BwCShy
ZXZpc2lvbiA3MDI5NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vU2ltcGxl
Rm9udERhdGFDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTM5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdt
YWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tl
ci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIK
LSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNp
bXBsZUZvbnREYXRhLmgiCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGb250
LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgi
Ci0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlIDxjYWlyby1mdC5oPgotI2luY2x1
ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Zm9udGNvbmZpZy9mY2ZyZWV0eXBlLmg+Ci0jaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIFNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQotewotICAgIGNhaXJvX2ZvbnRfZXh0ZW50c190IGZv
bnRfZXh0ZW50czsKLSAgICBjYWlyb190ZXh0X2V4dGVudHNfdCB0ZXh0X2V4dGVudHM7Ci0gICAg
Y2Fpcm9fc2NhbGVkX2ZvbnRfZXh0ZW50cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQuZ2V0
KCksICZmb250X2V4dGVudHMpOwotICAgIG1fYXNjZW50ID0gc3RhdGljX2Nhc3Q8aW50Pihscm91
bmRmKGZvbnRfZXh0ZW50cy5hc2NlbnQpKTsKLSAgICBtX2Rlc2NlbnQgPSBzdGF0aWNfY2FzdDxp
bnQ+KGxyb3VuZGYoZm9udF9leHRlbnRzLmRlc2NlbnQpKTsKLSAgICBtX2xpbmVTcGFjaW5nID0g
c3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKGZvbnRfZXh0ZW50cy5oZWlnaHQpKTsKLSAgICAvLyBU
aGVyZSBzZWVtcyB0byBiZSBzb21lIHJvdW5kaW5nIGVycm9yIGluIGNhaXJvIChvciBpbiBob3cg
d2UKLSAgICAvLyB1c2UgY2Fpcm8pIHdpdGggc29tZSBmb250cywgbGlrZSBEZWphVnUgU2FucyBN
b25vLCB3aGljaCBtYWtlcwotICAgIC8vIGNhaXJvIHJlcG9ydCBhIGhlaWdodCBzbWFsbGVyIHRo
YW4gYXNjZW50ICsgZGVzY2VudCwgd2hpY2ggaXMKLSAgICAvLyB3cm9uZyBhbmQgY29uZnVzZXMg
V2ViQ29yZSdzIGxheW91dCBzeXN0ZW0uIFdvcmthcm91bmQgdGhpcwotICAgIC8vIHdoaWxlIHdl
IGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uLgotICAgIGlmIChtX2xpbmVTcGFjaW5nIDwgbV9h
c2NlbnQgKyBtX2Rlc2NlbnQpCi0gICAgICAgIG1fbGluZVNwYWNpbmcgPSBtX2FzY2VudCArIG1f
ZGVzY2VudDsKLSAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMobV9wbGF0Zm9ybURh
dGEubV9zY2FsZWRGb250LmdldCgpLCAieCIsICZ0ZXh0X2V4dGVudHMpOwotICAgIG1feEhlaWdo
dCA9IHRleHRfZXh0ZW50cy5oZWlnaHQ7Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF9leHRl
bnRzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udC5nZXQoKSwgIiAiLCAmdGV4dF9leHRlbnRz
KTsKLSAgICBtX3NwYWNlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4odGV4dF9leHRlbnRzLnhf
YWR2YW5jZSk7Ci0gICAgbV9saW5lR2FwID0gbV9saW5lU3BhY2luZyAtIG1fYXNjZW50IC0gbV9k
ZXNjZW50OwotICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRo
ZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtQ2hhcldpZHRoSW5pdCgpCi17Ci0gICAgbV9hdmdDaGFyV2lkdGggPSAwLmY7Ci0gICAgbV9t
YXhDaGFyV2lkdGggPSAwLmY7Ci0gICAgaW5pdENoYXJXaWR0aHMoKTsKLX0KLQotdm9pZCBTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLSAgICBkZWxldGUgbV9zbWFsbENhcHNG
b250RGF0YTsKLSAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gMDsKLX0KLQotU2ltcGxlRm9udERh
dGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSSB0aGluayB3ZSB3
YW50IHRvIGFzayBGb250Q29uZmlnIGZvciB0aGUgcmlnaHQgZm9udCBhZ2Fpbi4KLSAgICBpZiAo
IW1fc21hbGxDYXBzRm9udERhdGEpCi0gICAgICAgIG1fc21hbGxDYXBzRm9udERhdGEgPSBuZXcg
U2ltcGxlRm9udERhdGEoCi0gICAgICAgICAgICBGb250UGxhdGZvcm1EYXRhKGNhaXJvX3NjYWxl
ZF9mb250X2dldF9mb250X2ZhY2UobV9wbGF0Zm9ybURhdGEuc2NhbGVkRm9udCgpKSwKLSAgICAg
ICAgICAgIDAuNzBmICogZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpLCBtX3BsYXRmb3Jt
RGF0YS5zeW50aGV0aWNCb2xkKCksIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSkp
OwotCi0gICAgcmV0dXJuIG1fc21hbGxDYXBzRm9udERhdGE7Ci19Ci0KLWJvb2wgU2ltcGxlRm9u
dERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxl
bmd0aCkgY29uc3QKLXsKLSAgICBGVF9GYWNlIGZhY2UgPSBjYWlyb19mdF9zY2FsZWRfZm9udF9s
b2NrX2ZhY2UobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LmdldCgpKTsKLQotICAgIGlmICgh
ZmFjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoRmNGcmVlVHlwZUNoYXJJbmRleChmYWNlLCBjaGFy
YWN0ZXJzW2ldKSA9PSAwKSB7Ci0gICAgICAgICAgICBjYWlyb19mdF9zY2FsZWRfZm9udF91bmxv
Y2tfZmFjZShtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQuZ2V0KCkpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2Fpcm9fZnRfc2NhbGVkX2Zv
bnRfdW5sb2NrX2ZhY2UobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LmdldCgpKTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgp
Ci17Ci0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IG1fcGxhdGZvcm1EYXRhLmlzRml4ZWRQaXRj
aCgpOwotfQotCi1GbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5
cGgoR2x5cGgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotfQotCi1mbG9hdCBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAot
ewotICAgIEFTU0VSVChtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQpOwotCi0gICAgY2Fpcm9f
Z2x5cGhfdCBjZ2x5cGggPSB7IGdseXBoLCAwLCAwIH07Ci0gICAgY2Fpcm9fdGV4dF9leHRlbnRz
X3QgZXh0ZW50czsKLSAgICBjYWlyb19zY2FsZWRfZm9udF9nbHlwaF9leHRlbnRzKG1fcGxhdGZv
cm1EYXRhLm1fc2NhbGVkRm9udC5nZXQoKSwgJmNnbHlwaCwgMSwgJmV4dGVudHMpOwotCi0gICAg
ZmxvYXQgdyA9IChmbG9hdCltX3NwYWNlV2lkdGg7Ci0gICAgaWYgKGNhaXJvX3NjYWxlZF9mb250
X3N0YXR1cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQuZ2V0KCkpID09IENBSVJPX1NUQVRV
U19TVUNDRVNTICYmIGV4dGVudHMueF9hZHZhbmNlKQotICAgICAgICB3ID0gKGZsb2F0KWV4dGVu
dHMueF9hZHZhbmNlOwotCi0gICAgcmV0dXJuIHc7ICAgIAotfQotCi19CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVU
eXBlLmNwcAkocmV2aXNpb24gNzAyODcpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vRm9udENhY2hlRnJlZVR5cGUuY3BwOjcwMjg3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRva2VyIDxhbHBA
YXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorCisjaW5jbHVkZSAiQ1N0cmlu
Zy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJPd25QdHJDYWlyby5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtUmVmUHRyQ2Fpcm8uaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgor
I2luY2x1ZGUgPGNhaXJvLWZ0Lmg+CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxmb250
Y29uZmlnL2ZjZnJlZXR5cGUuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQoreworICAg
IC8vIEl0J3MgZmluZSB0byBjYWxsIEZjSW5pdCBtdWx0aXBsZSB0aW1lcyBwZXIgdGhlIGRvY3Vt
ZW50YXRpb24uCisgICAgaWYgKCFGY0luaXQoKSkKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK2NvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9y
Q2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50
IGxlbmd0aCkKK3sKKyAgICBGY1Jlc3VsdCBmcmVzdWx0OworICAgIEZvbnRQbGF0Zm9ybURhdGEq
IHByaW0gPSBjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPigmZm9udC5wcmltYXJ5Rm9udCgp
LT5wbGF0Zm9ybURhdGEoKSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGhhcHBl
biwgYXBwYXJlbnRseS4gV2UgYXJlIG51bGwtY2hlY2tpbmcKKyAgICAvLyBmb3Igbm93IGp1c3Qg
dG8gYXZvaWQgY3Jhc2hpbmcuCisgICAgaWYgKCFwcmltIHx8ICFwcmltLT5tX3BhdHRlcm4pCisg
ICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFwcmltLT5tX2ZhbGxiYWNrcykKKyAgICAgICAg
cHJpbS0+bV9mYWxsYmFja3MgPSBGY0ZvbnRTb3J0KDAsIHByaW0tPm1fcGF0dGVybi5nZXQoKSwg
RmNUcnVlLCAwLCAmZnJlc3VsdCk7CisKKyAgICBGY0ZvbnRTZXQqIGZzID0gcHJpbS0+bV9mYWxs
YmFja3M7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZzLT5uZm9udDsgaSsrKSB7CisgICAg
ICAgIFBsYXRmb3JtUmVmUHRyPEZjUGF0dGVybj4gZmluID0gYWRvcHRQbGF0Zm9ybVJlZihGY0Zv
bnRSZW5kZXJQcmVwYXJlKDAsIHByaW0tPm1fcGF0dGVybi5nZXQoKSwgZnMtPmZvbnRzW2ldKSk7
CisgICAgICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSA9IGNhaXJvX2Z0X2ZvbnRfZmFj
ZV9jcmVhdGVfZm9yX3BhdHRlcm4oZmluLmdldCgpKTsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0
YSBhbHRlcm5hdGVGb250KGZvbnRGYWNlLCBmb250LmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVk
UGl4ZWxTaXplKCksIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIGNhaXJvX2ZvbnRfZmFjZV9kZXN0
cm95KGZvbnRGYWNlKTsKKyAgICAgICAgYWx0ZXJuYXRlRm9udC5tX3BhdHRlcm4gPSBmaW47Cisg
ICAgICAgIFNpbXBsZUZvbnREYXRhKiBzZmQgPSBnZXRDYWNoZWRGb250RGF0YSgmYWx0ZXJuYXRl
Rm9udCk7CisgICAgICAgIGlmIChzZmQtPmNvbnRhaW5zQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBs
ZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIHNmZDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsK
K30KKworU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udCYgZm9udCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworU2ltcGxlRm9udERh
dGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbikKK3sKKyAgICAvLyBXZSB3YW50IHRvIHJldHVybiBhIGZh
bGxiYWNrIGZvbnQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBsb2dpYyBwcmV2ZW50aW5nIEZvbnRDb25m
aWcKKyAgICAvLyBtYXRjaGVzIGZvciBub24tZmFsbGJhY2sgZm9udHMgbWlnaHQgcmV0dXJuIDAu
IFNlZSBpc0ZhbGxiYWNrRm9udEFsbG93ZWQuCisgICAgc3RhdGljIEF0b21pY1N0cmluZyB0aW1l
c1N0cigic2VyaWYiKTsKKyAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoZm9udERlc2NyaXB0
aW9uLCB0aW1lc1N0cik7Cit9CisKK3ZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShj
b25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rvcjx1bnNpZ25lZD4mIHRyYWl0c01h
c2tzKQoreworfQorCitzdGF0aWMgU3RyaW5nIGdldEZhbWlseU5hbWVTdHJpbmdGcm9tRm9udERl
c2NyaXB0aW9uQW5kRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKK3sKKyAgICAvLyBJZiB3ZSdyZSBjcmVhdGlu
ZyBhIGZhbGxiYWNrIGZvbnQgKGUuZy4gIi13ZWJraXQtbW9ub3NwYWNlIiksIGNvbnZlcnQgdGhl
IG5hbWUgaW50bworICAgIC8vIHRoZSBmYWxsYmFjayBuYW1lIChsaWtlICJtb25vc3BhY2UiKSB0
aGF0IGZvbnRjb25maWcgdW5kZXJzdGFuZHMuCisgICAgaWYgKGZhbWlseS5sZW5ndGgoKSAmJiAh
ZmFtaWx5LnN0YXJ0c1dpdGgoIi13ZWJraXQtIikpCisgICAgICAgIHJldHVybiBmYW1pbHkuc3Ry
aW5nKCk7CisKKyAgICBzd2l0Y2ggKGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkpIHsK
KyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHk6CisgICAgY2FzZSBGb250
RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5OgorICAgICAgICByZXR1cm4gInNlcmlmIjsKKyAgICBj
YXNlIEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5OgorICAgICAgICByZXR1cm4gInNh
bnMtc2VyaWYiOworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHk6Cisg
ICAgICAgIHJldHVybiAibW9ub3NwYWNlIjsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Q3Vy
c2l2ZUZhbWlseToKKyAgICAgICAgcmV0dXJuICJjdXJzaXZlIjsKKyAgICBjYXNlIEZvbnREZXNj
cmlwdGlvbjo6RmFudGFzeUZhbWlseToKKyAgICAgICAgcmV0dXJuICJmYW50YXN5IjsKKyAgICBj
YXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHk6CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuICIiOworICAgIH0KK30KKworRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpjcmVhdGVG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBj
b25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKK3sKKyAgICAvLyBUaGUgQ1NTIGZvbnQgbWF0Y2hp
bmcgYWxnb3JpdGhtIChodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWZvbnRzLyNmb250LW1hdGNo
aW5nLWFsZ29yaXRobSkKKyAgICAvLyBzYXlzIHRoYXQgd2UgbXVzdCBmaW5kIGFuIGV4YWN0IG1h
dGNoIGZvciBmb250IGZhbWlseSwgc2xhbnQgKGl0YWxpYyBvciBvYmxpcXVlIGNhbiBiZSB1c2Vk
KQorICAgIC8vIGFuZCBmb250IHdlaWdodCAod2Ugb25seSBtYXRjaCBib2xkL25vbi1ib2xkIGhl
cmUpLgorICAgIFBsYXRmb3JtUmVmUHRyPEZjUGF0dGVybj4gcGF0dGVybiA9IGFkb3B0UGxhdGZv
cm1SZWYoRmNQYXR0ZXJuQ3JlYXRlKCkpOworICAgIFN0cmluZyBmYW1pbHlOYW1lU3RyaW5nKGdl
dEZhbWlseU5hbWVTdHJpbmdGcm9tRm9udERlc2NyaXB0aW9uQW5kRmFtaWx5KGZvbnREZXNjcmlw
dGlvbiwgZmFtaWx5KSk7CisgICAgaWYgKCFGY1BhdHRlcm5BZGRTdHJpbmcocGF0dGVybi5nZXQo
KSwgRkNfRkFNSUxZLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgqPihmYW1pbHlOYW1l
U3RyaW5nLnV0ZjgoKS5kYXRhKCkpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBib29sIGl0
YWxpYyA9IGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKTsKKyAgICBpZiAoIUZjUGF0dGVybkFkZElu
dGVnZXIocGF0dGVybi5nZXQoKSwgRkNfU0xBTlQsIGl0YWxpYyA/IEZDX1NMQU5UX0lUQUxJQyA6
IEZDX1NMQU5UX1JPTUFOKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgYm9vbCBib2xkID0gZm9u
dERlc2NyaXB0aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHRCb2xkOworICAgIGlmICghRmNQYXR0
ZXJuQWRkSW50ZWdlcihwYXR0ZXJuLmdldCgpLCBGQ19XRUlHSFQsIGJvbGQgPyBGQ19XRUlHSFRf
Qk9MRCA6IEZDX1dFSUdIVF9OT1JNQUwpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIUZj
UGF0dGVybkFkZERvdWJsZShwYXR0ZXJuLmdldCgpLCBGQ19QSVhFTF9TSVpFLCBmb250RGVzY3Jp
cHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8g
VGhlIHN0cmF0ZWd5IGlzIG9yaWdpbmFsbHkgZnJvbSBTa2lhIChzcmMvcG9ydHMvU2tGb250SG9z
dF9mb250Y29uZmlnLmNwcCk6CisKKyAgICAvLyBBbGxvdyBGb250Y29uZmlnIHRvIGRvIHByZS1t
YXRjaCBzdWJzdGl0dXRpb24uIFVubGVzcyB3ZSBhcmUgYWNjZXNzaW5nIGEgImZhbGxiYWNrIgor
ICAgIC8vIGZhbWlseSBsaWtlICJzYW5zLCIgdGhpcyBpcyB0aGUgb25seSB0aW1lIHdlIGFsbG93
IEZvbnRjb25maWcgdG8gc3Vic3RpdHV0ZSBvbmUKKyAgICAvLyBmYW1pbHkgbmFtZSBmb3IgYW5v
dGhlciAoaS5lLiBpZiB0aGUgZm9udHMgYXJlIGFsaWFzZWQgdG8gZWFjaCBvdGhlcikuCisgICAg
RmNDb25maWdTdWJzdGl0dXRlKDAsIHBhdHRlcm4uZ2V0KCksIEZjTWF0Y2hQYXR0ZXJuKTsKKyAg
ICBGY0RlZmF1bHRTdWJzdGl0dXRlKHBhdHRlcm4uZ2V0KCkpOworCisgICAgRmNDaGFyOCogZm9u
dENvbmZpZ0ZhbWlseU5hbWVBZnRlckNvbmZpZ3VyYXRpb247CisgICAgRmNQYXR0ZXJuR2V0U3Ry
aW5nKHBhdHRlcm4uZ2V0KCksIEZDX0ZBTUlMWSwgMCwgJmZvbnRDb25maWdGYW1pbHlOYW1lQWZ0
ZXJDb25maWd1cmF0aW9uKTsKKyAgICBTdHJpbmcgZmFtaWx5TmFtZUFmdGVyQ29uZmlndXJhdGlv
biA9IFN0cmluZzo6ZnJvbVVURjgocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZm9udENvbmZpZ0Zh
bWlseU5hbWVBZnRlckNvbmZpZ3VyYXRpb24pKTsKKworICAgIEZjUmVzdWx0IGZvbnRDb25maWdS
ZXN1bHQ7CisgICAgUGxhdGZvcm1SZWZQdHI8RmNQYXR0ZXJuPiByZXN1bHRQYXR0ZXJuID0gYWRv
cHRQbGF0Zm9ybVJlZihGY0ZvbnRNYXRjaCgwLCBwYXR0ZXJuLmdldCgpLCAmZm9udENvbmZpZ1Jl
c3VsdCkpOworICAgIGlmICghcmVzdWx0UGF0dGVybikgLy8gTm8gbWF0Y2guCisgICAgICAgIHJl
dHVybiAwOworCisgICAgRmNDaGFyOCogZm9udENvbmZpZ0ZhbWlseU5hbWVBZnRlck1hdGNoaW5n
OworICAgIEZjUGF0dGVybkdldFN0cmluZyhyZXN1bHRQYXR0ZXJuLmdldCgpLCBGQ19GQU1JTFks
IDAsICZmb250Q29uZmlnRmFtaWx5TmFtZUFmdGVyTWF0Y2hpbmcpOworICAgIFN0cmluZyBmYW1p
bHlOYW1lQWZ0ZXJNYXRjaGluZyA9IFN0cmluZzo6ZnJvbVVURjgocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oZm9udENvbmZpZ0ZhbWlseU5hbWVBZnRlck1hdGNoaW5nKSk7CisgICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKGZhbWlseU5hbWVBZnRlckNvbmZpZ3VyYXRpb24sIGZhbWlseU5hbWVBZnRl
ck1hdGNoaW5nKSkKKyAgICAgICAgcmV0dXJuIG5ldyBGb250UGxhdGZvcm1EYXRhKHJlc3VsdFBh
dHRlcm4uZ2V0KCksIGZvbnREZXNjcmlwdGlvbik7CisKKyAgICAvLyBJZiBGb250Y29uZmlnIGdh
dmUgdXNlIGEgZGlmZmVyZW50IGZvbnQgZmFtaWx5IHRoYW4gdGhlIG9uZSB3ZSByZXF1ZXN0ZWQs
IHdlIHNob3VsZCBpZ25vcmUgaXQKKyAgICAvLyBhbmQgYWxsb3cgV2ViQ29yZSB0byBnaXZlIHVz
IHRoZSBuZXh0IGZvbnQgb24gdGhlIENTUyBmYWxsYmFjayBsaXN0LiBUaGUgb25seSBleGNlcHRp
b24gaXMgaWYKKyAgICAvLyB0aGlzIGZhbWlseSBuYW1lIGlzIGEgY29tbW9ubHkgdXNlZCBnZW5l
cmljIGZhbWlseS4KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5TmFtZVN0cmluZywg
InNhbnMiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHlOYW1lU3RyaW5nLCAic2Fucy1zZXJp
ZiIpCisgICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWVTdHJpbmcsICJzZXJp
ZiIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWVTdHJpbmcsICJtb25vc3BhY2UiKQor
ICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHlOYW1lU3RyaW5nLCAiZmFudGFzeSIp
IHx8IGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWVTdHJpbmcsICJjdXJzaXZlIikpCisgICAg
ICAgIHJldHVybiBuZXcgRm9udFBsYXRmb3JtRGF0YShyZXN1bHRQYXR0ZXJuLmdldCgpLCBmb250
RGVzY3JpcHRpb24pOworCisgICAgLy8gRm9udGNvbmZpZyBkaWQgbm90IHJldHVybiBhIGdvb2Qg
bWF0Y2guCisgICAgcmV0dXJuIDA7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZnJlZXR5cGUvRm9udEN1c3RvbVBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGFGcmVlVHlwZS5jcHAJKHJldmlzaW9uIDcwMjg3KQkoZnJvbSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwOjcwMjg3KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRh
RnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZv
bnRDdXN0b21QbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIK
KyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxjYWlyby1mdC5oPgorI2luY2x1
ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgcmVsZWFz
ZUN1c3RvbUZvbnREYXRhKHZvaWQqIGRhdGEpCit7CisgICAgc3RhdGljX2Nhc3Q8U2hhcmVkQnVm
ZmVyKj4oZGF0YSktPmRlcmVmKCk7Cit9CisKK0ZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OkZvbnRD
dXN0b21QbGF0Zm9ybURhdGEoRlRfRmFjZSBmcmVlVHlwZUZhY2UsIFNoYXJlZEJ1ZmZlciogYnVm
ZmVyKQorICAgIDogbV9mcmVlVHlwZUZhY2UoZnJlZVR5cGVGYWNlKQorICAgICwgbV9mb250RmFj
ZShjYWlyb19mdF9mb250X2ZhY2VfY3JlYXRlX2Zvcl9mdF9mYWNlKGZyZWVUeXBlRmFjZSwgMCkp
Cit7CisgICAgLy8gRklYTUUgU2hvdWxkIHdlIGJlIHNldHRpbmcgc29tZSBoaW50aW5nIG9wdGlv
bnMgaGVyZT8KKworICAgIGJ1ZmZlci0+cmVmKCk7IC8vIFRoaXMgaXMgYmFsYW5jZWQgYnkgdGhl
IGJ1ZmZlci0+ZGVyZWYoKSBpbiByZWxlYXNlQ3VzdG9tRm9udERhdGEuCisgICAgc3RhdGljIGNh
aXJvX3VzZXJfZGF0YV9rZXlfdCBidWZmZXJLZXk7CisgICAgY2Fpcm9fZm9udF9mYWNlX3NldF91
c2VyX2RhdGEobV9mb250RmFjZSwgJmJ1ZmZlcktleSwgYnVmZmVyLAorICAgICAgICAgc3RhdGlj
X2Nhc3Q8Y2Fpcm9fZGVzdHJveV9mdW5jX3Q+KHJlbGVhc2VDdXN0b21Gb250RGF0YSkpOworCisg
ICAgLy8gQ2Fpcm8gZG9lc24ndCBkbyBGcmVlVHlwZSByZWZlcmVuY2UgY291bnRpbmcsIHNvIHdl
IG5lZWQgdG8gZW5zdXJlIHRoYXQgd2hlbgorICAgIC8vIHRoaXMgY2Fpcm9fZm9udF9mYWNlX3Qg
aXMgZGVzdHJveWVkLCBpdCBjbGVhbnMgdXAgdGhlIEZyZWVUeXBlIGZhY2UgYXMgd2VsbC4KKyAg
ICBzdGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tleV90IGZyZWVUeXBlRmFjZUtleTsKKyAgICBjYWly
b19mb250X2ZhY2Vfc2V0X3VzZXJfZGF0YShtX2ZvbnRGYWNlLCAmZnJlZVR5cGVGYWNlS2V5LCBm
cmVlVHlwZUZhY2UsCisgICAgICAgICByZWludGVycHJldF9jYXN0PGNhaXJvX2Rlc3Ryb3lfZnVu
Y190PihGVF9Eb25lX0ZhY2UpKTsKK30KKworRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6fkZvbnRD
dXN0b21QbGF0Zm9ybURhdGEoKQoreworICAgIC8vIG1fZnJlZVR5cGVGYWNlIHdpbGwgYmUgZGVz
dHJveWVkIGFsb25nIHdpdGggbV9mb250RmFjZS4gU2VlIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICBj
YWlyb19mb250X2ZhY2VfZGVzdHJveShtX2ZvbnRGYWNlKTsKK30KKworRm9udFBsYXRmb3JtRGF0
YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29s
IGJvbGQsIGJvb2wgaXRhbGljLCBGb250T3JpZW50YXRpb24sIEZvbnRSZW5kZXJpbmdNb2RlKQor
eworICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKG1fZm9udEZhY2UsIHNpemUsIGJvbGQsIGl0
YWxpYyk7Cit9CisKK0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEqIGNyZWF0ZUZvbnRDdXN0b21QbGF0
Zm9ybURhdGEoU2hhcmVkQnVmZmVyKiBidWZmZXIpCit7CisgICAgQVNTRVJUX0FSRyhidWZmZXIs
IGJ1ZmZlcik7CisKKyAgICBzdGF0aWMgRlRfTGlicmFyeSBsaWJyYXJ5ID0gMDsKKyAgICBpZiAo
IWxpYnJhcnkgJiYgRlRfSW5pdF9GcmVlVHlwZSgmbGlicmFyeSkpIHsKKyAgICAgICAgbGlicmFy
eSA9IDA7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEZUX0ZhY2UgZnJlZVR5cGVG
YWNlOworICAgIGlmIChGVF9OZXdfTWVtb3J5X0ZhY2UobGlicmFyeSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBGVF9CeXRlKj4oYnVmZmVyLT5kYXRhKCkpLCBidWZmZXItPnNpemUoKSwgMCwgJmZy
ZWVUeXBlRmFjZSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBuZXcgRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YShmcmVlVHlwZUZhY2UsIGJ1ZmZlcik7Cit9CisKK2Jvb2wgRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YTo6c3VwcG9ydHNGb3JtYXQoY29uc3QgU3RyaW5nJiBmb3JtYXQpCit7Cisg
ICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGZvcm1hdCwgInRydWV0eXBlIikgfHwgZXF1YWxJ
Z25vcmluZ0Nhc2UoZm9ybWF0LCAib3BlbnR5cGUiKTsKK30KKworfQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhLmgJ
KHJldmlzaW9uIDcwMjg3KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Zv
bnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5oOjcwMjg3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5j
b20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICog
Q29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgorICog
Q29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhRnJlZVR5cGVfaAorI2RlZmluZSBGb250UGxhdGZv
cm1EYXRhRnJlZVR5cGVfaAorCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVk
ZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJIYXNoRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1SZWZQdHJDYWlyby5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK3R5cGVk
ZWYgc3RydWN0IF9GY0ZvbnRTZXQgRmNGb250U2V0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZvbnRQbGF0Zm9ybURhdGEgeworcHVibGljOgorICAgIEZvbnRQbGF0Zm9ybURhdGEo
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fZmFsbGJhY2tzKDAp
CisgICAgICAgICwgbV9zaXplKDApCisgICAgICAgICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQor
ICAgICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKKyAgICAgICAgLCBtX3NjYWxlZEZv
bnQoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpCisgICAgICAgIHsgfQorCisgICAgRm9udFBs
YXRmb3JtRGF0YSgpCisgICAgICAgIDogbV9mYWxsYmFja3MoMCkKKyAgICAgICAgLCBtX3NpemUo
MCkKKyAgICAgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCisgICAgICAgICwgbV9zeW50aGV0
aWNPYmxpcXVlKGZhbHNlKQorICAgICAgICB7IH0KKworICAgIEZvbnRQbGF0Zm9ybURhdGEoRmNQ
YXR0ZXJuKiwgY29uc3QgRm9udERlc2NyaXB0aW9uJik7CisgICAgRm9udFBsYXRmb3JtRGF0YShj
YWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBp
dGFsaWMpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29s
IGl0YWxpYyk7CisgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7
CisgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgZmxvYXQgc2l6
ZSk7CisKKyAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOworCisgICAgYm9vbCBpc0ZpeGVkUGl0Y2go
KTsKKyAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgdm9pZCBz
ZXRTaXplKGZsb2F0IHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQorICAgIGJvb2wgc3ludGhldGlj
Qm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9sZDsgfQorICAgIGJvb2wgc3ludGhl
dGljT2JsaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljT2JsaXF1ZTsgfQorCisgICAg
Y2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVk
Rm9udC5nZXQoKTsgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gUHRySGFzaDxjYWlyb19zY2FsZWRfZm9udF90Kj46Omhhc2gobV9zY2FsZWRGb250
LmdldCgpKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYpIGNvbnN0OworICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9yPShjb25zdCBGb250
UGxhdGZvcm1EYXRhJik7CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9zY2FsZWRGb250LmlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCk7CisgICAgfQorCisjaWZuZGVmIE5ERUJVRworICAgIFN0cmluZyBkZXNjcmlwdGlvbigp
IGNvbnN0OworI2VuZGlmCisKKyAgICBQbGF0Zm9ybVJlZlB0cjxGY1BhdHRlcm4+IG1fcGF0dGVy
bjsKKyAgICBGY0ZvbnRTZXQqIG1fZmFsbGJhY2tzOworICAgIGZsb2F0IG1fc2l6ZTsKKyAgICBi
b29sIG1fc3ludGhldGljQm9sZDsKKyAgICBib29sIG1fc3ludGhldGljT2JsaXF1ZTsKKyAgICBi
b29sIG1fZml4ZWRXaWR0aDsKKyAgICBQbGF0Zm9ybVJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90
PiBtX3NjYWxlZEZvbnQ7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplV2l0aEZvbnRG
YWNlKGNhaXJvX2ZvbnRfZmFjZV90Kik7Cit9OworCit9CisKKyNlbmRpZiAvLyBGb250UGxhdGZv
cm1EYXRhRnJlZVR5cGVfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9Gb250UGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMjMsOCArMjMsOCBAQAogICoKICAqLwogCi0jaWZuZGVmIEZvbnRQbGF0Zm9ybURh
dGFGcmVlVHlwZV9oCi0jZGVmaW5lIEZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZV9oCisjaWZuZGVm
IEZvbnRQbGF0Zm9ybURhdGFfaAorI2RlZmluZSBGb250UGxhdGZvcm1EYXRhX2gKIAogI2luY2x1
ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCkBAIC05OSw0
ICs5OSw0IEBAIHByaXZhdGU6CiAKIH0KIAotI2VuZGlmIC8vIEZvbnRQbGF0Zm9ybURhdGFGcmVl
VHlwZV9oCisjZW5kaWYgLy8gRm9udFBsYXRmb3JtRGF0YV9oCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1E
YXRhRnJlZVR5cGUuY3BwCShyZXZpc2lvbiA3MDI4NykJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwOjcwMjg3KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjY0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFl
bCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4
IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEg
Uy5MLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisj
aW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KKyNpbmNs
dWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgorCisjaWYg
IVBMQVRGT1JNKEVGTCkgfHwgRU5BQkxFKEdMSUJfU1VQUE9SVCkKKyNpbmNsdWRlIDxnZGsvZ2Rr
Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjYWlyb19zdWJwaXhlbF9vcmRl
cl90IGNvbnZlcnRGb250Q29uZmlnU3VicGl4ZWxPcmRlcihpbnQgZm9udENvbmZpZ09yZGVyKQor
eworICAgIHN3aXRjaCAoZm9udENvbmZpZ09yZGVyKSB7CisgICAgY2FzZSBGQ19SR0JBX1JHQjoK
KyAgICAgICAgcmV0dXJuIENBSVJPX1NVQlBJWEVMX09SREVSX1JHQjsKKyAgICBjYXNlIEZDX1JH
QkFfQkdSOgorICAgICAgICByZXR1cm4gQ0FJUk9fU1VCUElYRUxfT1JERVJfQkdSOworICAgIGNh
c2UgRkNfUkdCQV9WUkdCOgorICAgICAgICByZXR1cm4gQ0FJUk9fU1VCUElYRUxfT1JERVJfVlJH
QjsKKyAgICBjYXNlIEZDX1JHQkFfVkJHUjoKKyAgICAgICAgcmV0dXJuIENBSVJPX1NVQlBJWEVM
X09SREVSX1ZCR1I7CisgICAgY2FzZSBGQ19SR0JBX05PTkU6CisgICAgY2FzZSBGQ19SR0JBX1VO
S05PV046CisgICAgICAgIHJldHVybiBDQUlST19TVUJQSVhFTF9PUkRFUl9ERUZBVUxUOworICAg
IH0KKyAgICByZXR1cm4gQ0FJUk9fU1VCUElYRUxfT1JERVJfREVGQVVMVDsKK30KKworY2Fpcm9f
aGludF9zdHlsZV90IGNvbnZlcnRGb250Q29uZmlnSGludFN0eWxlKGludCBmb250Q29uZmlnU3R5
bGUpCit7CisgICAgc3dpdGNoIChmb250Q29uZmlnU3R5bGUpIHsKKyAgICBjYXNlIEZDX0hJTlRf
Tk9ORToKKyAgICAgICAgcmV0dXJuIENBSVJPX0hJTlRfU1RZTEVfTk9ORTsKKyAgICBjYXNlIEZD
X0hJTlRfU0xJR0hUOgorICAgICAgICByZXR1cm4gQ0FJUk9fSElOVF9TVFlMRV9TTElHSFQ7Cisg
ICAgY2FzZSBGQ19ISU5UX01FRElVTToKKyAgICAgICAgcmV0dXJuIENBSVJPX0hJTlRfU1RZTEVf
TUVESVVNOworICAgIGNhc2UgRkNfSElOVF9GVUxMOgorICAgICAgICByZXR1cm4gQ0FJUk9fSElO
VF9TVFlMRV9GVUxMOworICAgIH0KKyAgICByZXR1cm4gQ0FJUk9fSElOVF9TVFlMRV9OT05FOwor
fQorCit2b2lkIHNldENhaXJvRm9udE9wdGlvbnNGcm9tRm9udENvbmZpZ1BhdHRlcm4oY2Fpcm9f
Zm9udF9vcHRpb25zX3QqIG9wdGlvbnMsIEZjUGF0dGVybiogcGF0dGVybikKK3sKKyAgICBGY0Jv
b2wgYm9vbGVhblJlc3VsdDsKKyAgICBpbnQgaW50ZWdlclJlc3VsdDsKKworICAgIGlmIChGY1Bh
dHRlcm5HZXRJbnRlZ2VyKHBhdHRlcm4sIEZDX1JHQkEsIDAsICZpbnRlZ2VyUmVzdWx0KSA9PSBG
Y1Jlc3VsdE1hdGNoKSB7CisgICAgICAgIGNhaXJvX2ZvbnRfb3B0aW9uc19zZXRfc3VicGl4ZWxf
b3JkZXIob3B0aW9ucywgY29udmVydEZvbnRDb25maWdTdWJwaXhlbE9yZGVyKGludGVnZXJSZXN1
bHQpKTsKKworICAgICAgICAvLyBCYXNlZCBvbiB0aGUgbG9naWMgaW4gY2Fpcm8tZnQtZm9udC5j
IGluIHRoZSBjYWlybyBzb3VyY2UsIGEgZm9udCB3aXRoCisgICAgICAgIC8vIGEgc3VicGl4ZWwg
b3JkZXIgaW1wbGllcyB0aGF0IGlzIHVzZXMgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgorICAgICAg
ICBpZiAoaW50ZWdlclJlc3VsdCAhPSBGQ19SR0JBX05PTkUpCisgICAgICAgICAgICBjYWlyb19m
b250X29wdGlvbnNfc2V0X2FudGlhbGlhcyhvcHRpb25zLCBDQUlST19BTlRJQUxJQVNfU1VCUElY
RUwpOworICAgIH0KKworICAgIGlmIChGY1BhdHRlcm5HZXRCb29sKHBhdHRlcm4sIEZDX0FOVElB
TElBUywgMCwgJmJvb2xlYW5SZXN1bHQpID09IEZjUmVzdWx0TWF0Y2gpIHsKKyAgICAgICAgLy8g
T25seSBvdmVycmlkZSB0aGUgYW50aS1hbGlhc2luZyBzZXR0aW5nIGlmIHdhcyBwcmV2aW91c2x5
IHR1cm5lZCBvZmYuIE90aGVyd2lzZQorICAgICAgICAvLyB3ZSdsbCBvdmVycmlkZSB0aGUgcHJl
ZmVyZW5jZSB3aGljaCBkZWNpZGVzIGJldHdlZW4gZ3JheSBhbnRpLWFsaWFzaW5nIGFuZAorICAg
ICAgICAvLyBzdWJwaXhlbCBhbnRpLWFsaWFzaW5nLgorICAgICAgICBpZiAoIWJvb2xlYW5SZXN1
bHQpCisgICAgICAgICAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2FudGlhbGlhcyhvcHRpb25z
LCBDQUlST19BTlRJQUxJQVNfTk9ORSk7CisgICAgICAgIGVsc2UgaWYgKGNhaXJvX2ZvbnRfb3B0
aW9uc19nZXRfYW50aWFsaWFzKG9wdGlvbnMpID09IENBSVJPX0FOVElBTElBU19OT05FKQorICAg
ICAgICAgICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9hbnRpYWxpYXMob3B0aW9ucywgQ0FJUk9f
QU5USUFMSUFTX0dSQVkpOworICAgIH0KKworICAgIGlmIChGY1BhdHRlcm5HZXRJbnRlZ2VyKHBh
dHRlcm4sIEZDX0hJTlRfU1RZTEUsIDAsICZpbnRlZ2VyUmVzdWx0KSA9PSBGY1Jlc3VsdE1hdGNo
KQorICAgICAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2hpbnRfc3R5bGUob3B0aW9ucywgY29u
dmVydEZvbnRDb25maWdIaW50U3R5bGUoaW50ZWdlclJlc3VsdCkpOworICAgIGlmIChGY1BhdHRl
cm5HZXRCb29sKHBhdHRlcm4sIEZDX0hJTlRJTkcsIDAsICZib29sZWFuUmVzdWx0KSA9PSBGY1Jl
c3VsdE1hdGNoICYmICFib29sZWFuUmVzdWx0KQorICAgICAgICBjYWlyb19mb250X29wdGlvbnNf
c2V0X2hpbnRfc3R5bGUob3B0aW9ucywgQ0FJUk9fSElOVF9TVFlMRV9OT05FKTsKK30KKworc3Rh
dGljIGNvbnN0IGNhaXJvX2ZvbnRfb3B0aW9uc190KiBnZXREZWZhdWx0Rm9udE9wdGlvbnMoKQor
eworICAgIHN0YXRpYyBjb25zdCBjYWlyb19mb250X29wdGlvbnNfdCogb3B0aW9ucyA9IGNhaXJv
X2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsKKyNpZiBQTEFURk9STShHVEspIHx8IEVOQUJMRShHTElC
X1NVUFBPUlQpCisgICAgaWYgKEdka1NjcmVlbiogc2NyZWVuID0gZ2RrX3NjcmVlbl9nZXRfZGVm
YXVsdCgpKSB7CisgICAgICAgIGNvbnN0IGNhaXJvX2ZvbnRfb3B0aW9uc190KiBzY3JlZW5PcHRp
b25zID0gZ2RrX3NjcmVlbl9nZXRfZm9udF9vcHRpb25zKHNjcmVlbik7CisgICAgICAgIGlmIChz
Y3JlZW5PcHRpb25zKQorICAgICAgICAgICAgb3B0aW9ucyA9IHNjcmVlbk9wdGlvbnM7CisgICAg
fQorI2VuZGlmCisgICAgcmV0dXJuIG9wdGlvbnM7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZv
bnRQbGF0Zm9ybURhdGEoRmNQYXR0ZXJuKiBwYXR0ZXJuLCBjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbikKKyAgICA6IG1fcGF0dGVybihwYXR0ZXJuKQorICAgICwgbV9mYWxs
YmFja3MoMCkKKyAgICAsIG1fc2l6ZShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUo
KSkKKyAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKKyAgICAsIG1fc3ludGhldGljT2JsaXF1
ZShmYWxzZSkKKyAgICAsIG1fZml4ZWRXaWR0aChmYWxzZSkKK3sKKyAgICBQbGF0Zm9ybVJlZlB0
cjxjYWlyb19mb250X2ZhY2VfdD4gZm9udEZhY2UgPSBhZG9wdFBsYXRmb3JtUmVmKGNhaXJvX2Z0
X2ZvbnRfZmFjZV9jcmVhdGVfZm9yX3BhdHRlcm4obV9wYXR0ZXJuLmdldCgpKSk7CisgICAgaW5p
dGlhbGl6ZVdpdGhGb250RmFjZShmb250RmFjZS5nZXQoKSk7CisKKyAgICBpbnQgc3BhY2luZzsK
KyAgICBpZiAoRmNQYXR0ZXJuR2V0SW50ZWdlcihwYXR0ZXJuLCBGQ19TUEFDSU5HLCAwLCAmc3Bh
Y2luZykgPT0gRmNSZXN1bHRNYXRjaCAmJiBzcGFjaW5nID09IEZDX01PTk8pCisgICAgICAgIG1f
Zml4ZWRXaWR0aCA9IHRydWU7CisKKyAgICBpZiAoZm9udERlc2NyaXB0aW9uLndlaWdodCgpID49
IEZvbnRXZWlnaHRCb2xkKSB7CisgICAgICAgIC8vIFRoZSBGQ19FTUJPTERFTiBwcm9wZXJ0eSBp
bnN0cnVjdHMgdXMgdG8gZmFrZSB0aGUgYm9sZG5lc3Mgb2YgdGhlIGZvbnQuCisgICAgICAgIEZj
Qm9vbCBmb250Q29uZmlnRW1ib2xkZW47CisgICAgICAgIGlmIChGY1BhdHRlcm5HZXRCb29sKHBh
dHRlcm4sIEZDX0VNQk9MREVOLCAwLCAmZm9udENvbmZpZ0VtYm9sZGVuKSA9PSBGY1Jlc3VsdE1h
dGNoKQorICAgICAgICAgICAgbV9zeW50aGV0aWNCb2xkID0gZm9udENvbmZpZ0VtYm9sZGVuOwor
ICAgIH0KK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXpl
LCBib29sIGJvbGQsIGJvb2wgaXRhbGljKQorICAgIDogbV9mYWxsYmFja3MoMCkKKyAgICAsIG1f
c2l6ZShzaXplKQorICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCisgICAgLCBtX3N5bnRoZXRp
Y09ibGlxdWUoaXRhbGljKQorICAgICwgbV9maXhlZFdpZHRoKGZhbHNlKQoreworICAgIC8vIFdl
IGNhbm5vdCBjcmVhdGUgYSBzY2FsZWQgZm9udCBoZXJlLgorfQorCitGb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSwgZmxvYXQgc2l6
ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYykKKyAgICA6IG1fZmFsbGJhY2tzKDApCisgICAgLCBt
X3NpemUoc2l6ZSkKKyAgICAsIG1fc3ludGhldGljQm9sZChib2xkKQorICAgICwgbV9zeW50aGV0
aWNPYmxpcXVlKGl0YWxpYykKK3sKKyAgICBpbml0aWFsaXplV2l0aEZvbnRGYWNlKGZvbnRGYWNl
KTsKKworICAgIEZUX0ZhY2UgZm9udENvbmZpZ0ZhY2UgPSBjYWlyb19mdF9zY2FsZWRfZm9udF9s
b2NrX2ZhY2UobV9zY2FsZWRGb250LmdldCgpKTsKKyAgICBpZiAoZm9udENvbmZpZ0ZhY2UpIHsK
KyAgICAgICAgbV9maXhlZFdpZHRoID0gZm9udENvbmZpZ0ZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9G
QUNFX0ZMQUdfRklYRURfV0lEVEg7CisgICAgICAgIGNhaXJvX2Z0X3NjYWxlZF9mb250X3VubG9j
a19mYWNlKG1fc2NhbGVkRm9udC5nZXQoKSk7CisgICAgfQorfQorCitGb250UGxhdGZvcm1EYXRh
JiBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3Ro
ZXIpCit7CisgICAgLy8gQ2hlY2sgZm9yIHNlbGYtYXNzaWdubWVudC4KKyAgICBpZiAodGhpcyA9
PSAmb3RoZXIpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIG1fc2l6ZSA9IG90aGVyLm1f
c2l6ZTsKKyAgICBtX3N5bnRoZXRpY0JvbGQgPSBvdGhlci5tX3N5bnRoZXRpY0JvbGQ7CisgICAg
bV9zeW50aGV0aWNPYmxpcXVlID0gb3RoZXIubV9zeW50aGV0aWNPYmxpcXVlOworICAgIG1fZml4
ZWRXaWR0aCA9IG90aGVyLm1fZml4ZWRXaWR0aDsKKyAgICBtX3NjYWxlZEZvbnQgPSBvdGhlci5t
X3NjYWxlZEZvbnQ7CisgICAgbV9wYXR0ZXJuID0gb3RoZXIubV9wYXR0ZXJuOworCisgICAgaWYg
KG1fZmFsbGJhY2tzKSB7CisgICAgICAgIEZjRm9udFNldERlc3Ryb3kobV9mYWxsYmFja3MpOwor
ICAgICAgICAvLyBUaGlzIHdpbGwgYmUgcmUtY3JlYXRlZCBvbiBkZW1hbmQuCisgICAgICAgIG1f
ZmFsbGJhY2tzID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0ZvbnRQbGF0
Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIp
CisgICAgOiBtX2ZhbGxiYWNrcygwKQoreworICAgICp0aGlzID0gb3RoZXI7Cit9CisKK0ZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3Ro
ZXIsIGZsb2F0IHNpemUpCit7CisgICAgKnRoaXMgPSBvdGhlcjsKKworICAgIC8vIFdlIG5lZWQg
dG8gcmVpbml0aWFsaXplIHRoZSBpbnN0YW5jZSwgYmVjYXVzZSB0aGUgZGlmZmVyZW5jZSBpbiBz
aXplIAorICAgIC8vIG5lY2Vzc2l0YXRlcyBhIG5ldyBzY2FsZWQgZm9udCBpbnN0YW5jZS4KKyAg
ICBtX3NpemUgPSBzaXplOworICAgIGluaXRpYWxpemVXaXRoRm9udEZhY2UoY2Fpcm9fc2NhbGVk
X2ZvbnRfZ2V0X2ZvbnRfZmFjZShtX3NjYWxlZEZvbnQuZ2V0KCkpKTsKK30KKworRm9udFBsYXRm
b3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQoreworICAgIGlmIChtX2ZhbGxiYWNrcykgewor
ICAgICAgICBGY0ZvbnRTZXREZXN0cm95KG1fZmFsbGJhY2tzKTsKKyAgICAgICAgbV9mYWxsYmFj
a3MgPSAwOworICAgIH0KK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2go
KQoreworICAgIHJldHVybiBtX2ZpeGVkV2lkdGg7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0
YTo6b3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKK3sKKyAg
ICBpZiAobV9wYXR0ZXJuID09IG90aGVyLm1fcGF0dGVybikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgaWYgKCFtX3BhdHRlcm4gfHwgbV9wYXR0ZXJuLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCkgfHwgIW90aGVyLm1fcGF0dGVybiB8fCBvdGhlci5tX3BhdHRlcm4uaXNIYXNoVGFibGVEZWxl
dGVkVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBGY1BhdHRlcm5F
cXVhbChtX3BhdHRlcm4uZ2V0KCksIG90aGVyLm1fcGF0dGVybi5nZXQoKSk7Cit9CisKKyNpZm5k
ZWYgTkRFQlVHCitTdHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24oKSBjb25zdAor
eworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKyNlbmRpZgorCit2b2lkIEZvbnRQbGF0Zm9ybURh
dGE6OmluaXRpYWxpemVXaXRoRm9udEZhY2UoY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlKQor
eworICAgIGNhaXJvX2ZvbnRfb3B0aW9uc190KiBvcHRpb25zID0gY2Fpcm9fZm9udF9vcHRpb25z
X2NvcHkoZ2V0RGVmYXVsdEZvbnRPcHRpb25zKCkpOworCisgICAgY2Fpcm9fbWF0cml4X3QgY3Rt
OworICAgIGNhaXJvX21hdHJpeF9pbml0X2lkZW50aXR5KCZjdG0pOworCisgICAgY2Fpcm9fbWF0
cml4X3QgZm9udE1hdHJpeDsKKyAgICBpZiAoIW1fcGF0dGVybikKKyAgICAgICAgY2Fpcm9fbWF0
cml4X2luaXRfc2NhbGUoJmZvbnRNYXRyaXgsIG1fc2l6ZSwgbV9zaXplKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgc2V0Q2Fpcm9Gb250T3B0aW9uc0Zyb21Gb250Q29uZmlnUGF0dGVybihvcHRpb25z
LCBtX3BhdHRlcm4uZ2V0KCkpOworCisgICAgICAgIC8vIEZvbnRDb25maWcgbWF5IHJldHVybiBh
IGxpc3Qgb2YgdHJhbnNmb3JtYXRpb24gbWF0cmljZXMgd2l0aCB0aGUgcGF0dGVybiwgZm9yIGlu
c3RhbmNlLAorICAgICAgICAvLyBmb3IgZm9udHMgdGhhdCBhcmUgb2JsaXF1ZS4gV2UgdXNlIHRo
YXQgdG8gaW5pdGlhbGl6ZSB0aGUgY2Fpcm8gZm9udCBtYXRyaXguCisgICAgICAgIEZjTWF0cml4
IGZvbnRDb25maWdNYXRyaXgsICp0ZW1wRm9udENvbmZpZ01hdHJpeDsKKyAgICAgICAgRmNNYXRy
aXhJbml0KCZmb250Q29uZmlnTWF0cml4KTsKKworICAgICAgICAvLyBUaGVzZSBtYXRyaWNlcyBt
YXkgYmUgc3RhY2tlZCBpbiB0aGUgcGF0dGVybiwgc28gaXQncyBvdXIgam9iIHRvIGdldCB0aGVt
IGFsbCBhbmQgbXVsdGlwbHkgdGhlbS4KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IEZjUGF0dGVy
bkdldE1hdHJpeChtX3BhdHRlcm4uZ2V0KCksIEZDX01BVFJJWCwgaSwgJnRlbXBGb250Q29uZmln
TWF0cml4KSA9PSBGY1Jlc3VsdE1hdGNoOyBpKyspCisgICAgICAgICAgICBGY01hdHJpeE11bHRp
cGx5KCZmb250Q29uZmlnTWF0cml4LCAmZm9udENvbmZpZ01hdHJpeCwgdGVtcEZvbnRDb25maWdN
YXRyaXgpOworICAgICAgICBjYWlyb19tYXRyaXhfaW5pdCgmZm9udE1hdHJpeCwgZm9udENvbmZp
Z01hdHJpeC54eCwgLWZvbnRDb25maWdNYXRyaXgueXgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIC1mb250Q29uZmlnTWF0cml4Lnh5LCBmb250Q29uZmlnTWF0cml4Lnl5LCAwLCAwKTsKKwor
ICAgICAgICAvLyBUaGUgbWF0cml4IGZyb20gRm9udENvbmZpZyBkb2VzIG5vdCBpbmNsdWRlIHRo
ZSBzY2FsZS4KKyAgICAgICAgY2Fpcm9fbWF0cml4X3NjYWxlKCZmb250TWF0cml4LCBtX3NpemUs
IG1fc2l6ZSk7CisgICAgfQorCisgICAgbV9zY2FsZWRGb250ID0gYWRvcHRQbGF0Zm9ybVJlZihj
YWlyb19zY2FsZWRfZm9udF9jcmVhdGUoZm9udEZhY2UsICZmb250TWF0cml4LCAmY3RtLCBvcHRp
b25zKSk7CisgICAgY2Fpcm9fZm9udF9vcHRpb25zX2Rlc3Ryb3kob3B0aW9ucyk7Cit9CisKKwor
fQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9HbHlwaFBhZ2VUcmVl
Tm9kZUZyZWVUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZyZWV0eXBlL0dseXBoUGFnZVRyZWVOb2RlRnJlZVR5cGUuY3BwCShyZXZpc2lvbiA3MDI4NykJ
KGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HbHlwaFBhZ2VUcmVlTm9kZUNh
aXJvLmNwcDo3MDI4NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvR2x5
cGhQYWdlVHJlZU5vZGVGcmVlVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVs
QGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNv
bGxhYm9yYS5jby51az4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlVHJl
ZU5vZGUuaCIKKworI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSA8Y2Fpcm8t
ZnQuaD4KKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPGZvbnRjb25maWcvZmNmcmVldHlw
ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZm
ZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3sKKyAgICAvLyBUaGUg
YnVmZmVyTGVuZ3RoIHdpbGwgYmUgZ3JlYXRlciB0aGFuIHRoZSBnbHlwaCBwYWdlIHNpemUgaWYg
dGhlIGJ1ZmZlciBoYXMgVW5pY29kZSBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMuCisgICAgLy8g
V2Ugd29uJ3Qgc3VwcG9ydCB0aGlzIGZvciBub3cuCisgICAgaWYgKGJ1ZmZlckxlbmd0aCA+IEds
eXBoUGFnZTo6c2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRlRfRmFjZSBmYWNl
ID0gY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfbG9ja19mYWNlKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS5tX3NjYWxlZEZvbnQuZ2V0KCkpOworICAgIGlmICghZmFjZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIEdseXBoIGdseXBoID0gRmNGcmVlVHlw
ZUNoYXJJbmRleChmYWNlLCBidWZmZXJbaV0pOworICAgICAgICBpZiAoIWdseXBoKQorICAgICAg
ICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgMCwgMCk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGgs
IGZvbnREYXRhKTsKKyAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfdW5sb2NrX2ZhY2UoZm9udERhdGEtPnBs
YXRmb3JtRGF0YSgpLm1fc2NhbGVkRm9udC5nZXQoKSk7CisKKyAgICByZXR1cm4gaGF2ZUdseXBo
czsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1w
bGVGb250RGF0YUZyZWVUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCShyZXZpc2lvbiA3MDI4
NykJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9TaW1wbGVGb250RGF0YUNh
aXJvLmNwcDo3MDI4NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2lt
cGxlRm9udERhdGFGcmVlVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFscCBUb2tlciA8YWxw
QGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0
aW9uLmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlIDxjYWlyby1mdC5oPgor
I2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8Zm9udGNvbmZpZy9mY2ZyZWV0eXBlLmg+Cisj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lk
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQoreworICAgIGNhaXJvX2ZvbnRfZXh0ZW50
c190IGZvbnRfZXh0ZW50czsKKyAgICBjYWlyb190ZXh0X2V4dGVudHNfdCB0ZXh0X2V4dGVudHM7
CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZXh0ZW50cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZv
bnQuZ2V0KCksICZmb250X2V4dGVudHMpOworICAgIG1fYXNjZW50ID0gc3RhdGljX2Nhc3Q8aW50
Pihscm91bmRmKGZvbnRfZXh0ZW50cy5hc2NlbnQpKTsKKyAgICBtX2Rlc2NlbnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGxyb3VuZGYoZm9udF9leHRlbnRzLmRlc2NlbnQpKTsKKyAgICBtX2xpbmVTcGFj
aW5nID0gc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKGZvbnRfZXh0ZW50cy5oZWlnaHQpKTsKKyAg
ICAvLyBUaGVyZSBzZWVtcyB0byBiZSBzb21lIHJvdW5kaW5nIGVycm9yIGluIGNhaXJvIChvciBp
biBob3cgd2UKKyAgICAvLyB1c2UgY2Fpcm8pIHdpdGggc29tZSBmb250cywgbGlrZSBEZWphVnUg
U2FucyBNb25vLCB3aGljaCBtYWtlcworICAgIC8vIGNhaXJvIHJlcG9ydCBhIGhlaWdodCBzbWFs
bGVyIHRoYW4gYXNjZW50ICsgZGVzY2VudCwgd2hpY2ggaXMKKyAgICAvLyB3cm9uZyBhbmQgY29u
ZnVzZXMgV2ViQ29yZSdzIGxheW91dCBzeXN0ZW0uIFdvcmthcm91bmQgdGhpcworICAgIC8vIHdo
aWxlIHdlIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uLgorICAgIGlmIChtX2xpbmVTcGFjaW5n
IDwgbV9hc2NlbnQgKyBtX2Rlc2NlbnQpCisgICAgICAgIG1fbGluZVNwYWNpbmcgPSBtX2FzY2Vu
dCArIG1fZGVzY2VudDsKKyAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMobV9wbGF0
Zm9ybURhdGEubV9zY2FsZWRGb250LmdldCgpLCAieCIsICZ0ZXh0X2V4dGVudHMpOworICAgIG1f
eEhlaWdodCA9IHRleHRfZXh0ZW50cy5oZWlnaHQ7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdGV4
dF9leHRlbnRzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udC5nZXQoKSwgIiAiLCAmdGV4dF9l
eHRlbnRzKTsKKyAgICBtX3NwYWNlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4odGV4dF9leHRl
bnRzLnhfYWR2YW5jZSk7CisgICAgbV9saW5lR2FwID0gbV9saW5lU3BhY2luZyAtIG1fYXNjZW50
IC0gbV9kZXNjZW50OworICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRh
LnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit7CisgICAgbV9hdmdDaGFyV2lkdGggPSAwLmY7Cisg
ICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7CisgICAgaW5pdENoYXJXaWR0aHMoKTsKK30KKwordm9p
ZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAgICBkZWxldGUgbV9zbWFs
bENhcHNGb250RGF0YTsKKyAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gMDsKK30KKworU2ltcGxl
Rm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSSB0aGlu
ayB3ZSB3YW50IHRvIGFzayBGb250Q29uZmlnIGZvciB0aGUgcmlnaHQgZm9udCBhZ2Fpbi4KKyAg
ICBpZiAoIW1fc21hbGxDYXBzRm9udERhdGEpCisgICAgICAgIG1fc21hbGxDYXBzRm9udERhdGEg
PSBuZXcgU2ltcGxlRm9udERhdGEoCisgICAgICAgICAgICBGb250UGxhdGZvcm1EYXRhKGNhaXJv
X3NjYWxlZF9mb250X2dldF9mb250X2ZhY2UobV9wbGF0Zm9ybURhdGEuc2NhbGVkRm9udCgpKSwK
KyAgICAgICAgICAgIDAuNzBmICogZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpLCBtX3Bs
YXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCksIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlx
dWUoKSkpOworCisgICAgcmV0dXJuIG1fc21hbGxDYXBzRm9udERhdGE7Cit9CisKK2Jvb2wgU2lt
cGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
aW50IGxlbmd0aCkgY29uc3QKK3sKKyAgICBGVF9GYWNlIGZhY2UgPSBjYWlyb19mdF9zY2FsZWRf
Zm9udF9sb2NrX2ZhY2UobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LmdldCgpKTsKKworICAg
IGlmICghZmFjZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoRmNGcmVlVHlwZUNoYXJJbmRleChmYWNl
LCBjaGFyYWN0ZXJzW2ldKSA9PSAwKSB7CisgICAgICAgICAgICBjYWlyb19mdF9zY2FsZWRfZm9u
dF91bmxvY2tfZmFjZShtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQuZ2V0KCkpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgY2Fpcm9fZnRfc2Nh
bGVkX2ZvbnRfdW5sb2NrX2ZhY2UobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LmdldCgpKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQ
aXRjaCgpCit7CisgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IG1fcGxhdGZvcm1EYXRhLmlzRml4
ZWRQaXRjaCgpOworfQorCitGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRz
Rm9yR2x5cGgoR2x5cGgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworfQorCitm
bG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBj
b25zdAoreworICAgIEFTU0VSVChtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQpOworCisgICAg
Y2Fpcm9fZ2x5cGhfdCBjZ2x5cGggPSB7IGdseXBoLCAwLCAwIH07CisgICAgY2Fpcm9fdGV4dF9l
eHRlbnRzX3QgZXh0ZW50czsKKyAgICBjYWlyb19zY2FsZWRfZm9udF9nbHlwaF9leHRlbnRzKG1f
cGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udC5nZXQoKSwgJmNnbHlwaCwgMSwgJmV4dGVudHMpOwor
CisgICAgZmxvYXQgdyA9IChmbG9hdCltX3NwYWNlV2lkdGg7CisgICAgaWYgKGNhaXJvX3NjYWxl
ZF9mb250X3N0YXR1cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQuZ2V0KCkpID09IENBSVJP
X1NUQVRVU19TVUNDRVNTICYmIGV4dGVudHMueF9hZHZhbmNlKQorICAgICAgICB3ID0gKGZsb2F0
KWV4dGVudHMueF9hZHZhbmNlOworCisgICAgcmV0dXJuIHc7ICAgIAorfQorCit9CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVQYW5nby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udENhY2hlUGFuZ28uY3BwCShy
ZXZpc2lvbiA3MDI5NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDYWNo
ZVBhbmdvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0KLSNpbmNsdWRlICJDU3RyaW5nLmgiCi0j
aW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIk93blB0ckNhaXJvLmgiCi0jaW5jbHVkZSAiU2lt
cGxlRm9udERhdGEuaCIKLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQotewotICAgIGlmICgh
Rm9udFBsYXRmb3JtRGF0YTo6aW5pdCgpKQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LX0KLQotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFy
YWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVu
Z3RoKQotewotICAgIHJldHVybiAwOwotfQotCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpn
ZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQotewotICAgIHJldHVy
biAwOwotfQotCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJh
Y2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQotewotICAgIC8v
IEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0aGUgdXNlcidzIGRl
ZmF1bHQgZm9udCBoZXJlLgotICAgIC8vIEZvciBub3cgd2UnbGwgcGljayB0aGUgZGVmYXVsdCB0
aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFueSBwcmVmcy4KLSAgICBz
dGF0aWMgQXRvbWljU3RyaW5nIHRpbWVzU3RyKCJUaW1lcyBOZXcgUm9tYW4iKTsKLSAgICByZXR1
cm4gZ2V0Q2FjaGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0cik7Ci19Ci0KLXZv
aWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWls
eU5hbWUsIFZlY3Rvcjx1bnNpZ25lZD4mIHRyYWl0c01hc2tzKQotewotfQotCi1Gb250UGxhdGZv
cm1EYXRhKiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQotewot
ICAgIHJldHVybiBuZXcgRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseSk7
Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21Q
bGF0Zm9ybURhdGFQYW5nby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdvLmNwcAkocmV2aXNpb24gNzAyOTYp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q3VzdG9tUGxhdGZvcm1EYXRh
UGFuZ28uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgiCi0KLSNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6fkZvbnRDdXN0b21QbGF0Zm9y
bURhdGEoKQotewotfQotCi1Gb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6
OmZvbnRQbGF0Zm9ybURhdGEoaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIEZvbnRP
cmllbnRhdGlvbiwgRm9udFJlbmRlcmluZ01vZGUpCi17Ci0gICAgcmV0dXJuIEZvbnRQbGF0Zm9y
bURhdGEobV9mb250RmFjZSwgc2l6ZSwgYm9sZCwgaXRhbGljKTsKLX0KLQotc3RhdGljIHZvaWQg
cmVsZWFzZURhdGEodm9pZCogZGF0YSkKLXsKLSAgICBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIq
PihkYXRhKS0+ZGVyZWYoKTsKLX0KLQotRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICAvLyBGSVhN
RTogd2UgbmVlZCBzdXBwb3J0IGluIHBhbmdvIHRvIHJlYWQgZm9udHMgZnJvbSBtZW1vcnkgdG8g
aW1wbGVtZW50IHRoaXMueQotICAgIHJldHVybiAwOwotfQotCi1ib29sIEZvbnRDdXN0b21QbGF0
Zm9ybURhdGE6OnN1cHBvcnRzRm9ybWF0KGNvbnN0IFN0cmluZyYgLyogZm9ybWF0ICovKQotewot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvRm9udFBsYXRmb3JtRGF0YVBhbmdvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwCShyZXZpc2lvbiA3
MDI5NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFQ
YW5nby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBN
aWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXIg
UmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBT
LkwuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZvbnRQbGF0Zm9ybURhdGEuaCIKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5j
bHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
I2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0KLSNpbmNsdWRlIDxwYW5n
by9wYW5nby5oPgotI2luY2x1ZGUgPHBhbmdvL3BhbmdvY2Fpcm8uaD4KLQotLy8gVXNlIGNhaXJv
LWZ0IGkgYSByZWNlbnQgZW5vdWdoIFBhbmdvIHZlcnNpb24gaXNuJ3QgYXZhaWxhYmxlCi0jaWYg
IVBBTkdPX1ZFUlNJT05fQ0hFQ0soMSwxOCwwKQotI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+Ci0jaW5j
bHVkZSA8cGFuZ28vcGFuZ29mYy1mb250bWFwLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxndGsvZ3Rr
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFuZ29Gb250TWFwKiBGb250UGxhdGZvcm1E
YXRhOjptX2ZvbnRNYXAgPSAwOwotR0hhc2hUYWJsZSogRm9udFBsYXRmb3JtRGF0YTo6bV9oYXNo
VGFibGUgPSAwOwotCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWls
eU5hbWUpCi0gICAgOiBtX2NvbnRleHQoMCkKLSAgICAsIG1fZm9udCgwKQotICAgICwgbV9zaXpl
KGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSkKLSAgICAsIG1fc3ludGhldGljQm9sZChm
YWxzZSkKLSAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKLSAgICAsIG1fc2NhbGVkRm9u
dCgwKQotewotICAgIEZvbnRQbGF0Zm9ybURhdGE6OmluaXQoKTsKLQotICAgIENTdHJpbmcgc3Rv
cmVkX2ZhbWlseSA9IGZhbWlseU5hbWUuc3RyaW5nKCkudXRmOCgpOwotICAgIGNoYXIgY29uc3Qq
IGZhbWlsaWVzW10gPSB7Ci0gICAgICBzdG9yZWRfZmFtaWx5LmRhdGEoKSwKLSAgICAgIE5VTEwK
LSAgICB9OwotCi0gICAgc3dpdGNoIChmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpKSB7
Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5OgotICAgICAgICBmYW1pbGll
c1sxXSA9ICJzZXJpZiI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9u
OjpTYW5zU2VyaWZGYW1pbHk6Ci0gICAgICAgIGZhbWlsaWVzWzFdID0gInNhbnMiOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5OgotICAg
ICAgICBmYW1pbGllc1sxXSA9ICJtb25vc3BhY2UiOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHk6Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246OlN0
YW5kYXJkRmFtaWx5OgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZhbWlsaWVzWzFdID0gInNhbnMi
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiogZGVz
Y3JpcHRpb24gPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX25ldygpOwotICAgIHBhbmdvX2ZvbnRf
ZGVzY3JpcHRpb25fc2V0X2Fic29sdXRlX3NpemUoZGVzY3JpcHRpb24sIGZvbnREZXNjcmlwdGlv
bi5jb21wdXRlZFNpemUoKSAqIFBBTkdPX1NDQUxFKTsKLQotICAgIC8vIEZJWE1FOiBNYXAgYWxs
IEZvbnRXZWlnaHQgdmFsdWVzIHRvIFBhbmdvIGZvbnQgd2VpZ2h0cy4KLSAgICBpZiAoZm9udERl
c2NyaXB0aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHQ2MDApCi0gICAgICAgIHBhbmdvX2ZvbnRf
ZGVzY3JpcHRpb25fc2V0X3dlaWdodChkZXNjcmlwdGlvbiwgUEFOR09fV0VJR0hUX0JPTEQpOwot
ICAgIGlmIChmb250RGVzY3JpcHRpb24uaXRhbGljKCkpCi0gICAgICAgIHBhbmdvX2ZvbnRfZGVz
Y3JpcHRpb25fc2V0X3N0eWxlKGRlc2NyaXB0aW9uLCBQQU5HT19TVFlMRV9JVEFMSUMpOwotCi0j
aWYgUEFOR09fVkVSU0lPTl9DSEVDSygxLDIxLDUpICAgLy8gZGVwcmVjYXRlZCBpbiAxLjIxCi0g
ICAgbV9jb250ZXh0ID0gcGFuZ29fZm9udF9tYXBfY3JlYXRlX2NvbnRleHQobV9mb250TWFwKTsK
LSNlbHNlCi0gICAgbV9jb250ZXh0ID0gcGFuZ29fY2Fpcm9fZm9udF9tYXBfY3JlYXRlX2NvbnRl
eHQoUEFOR09fQ0FJUk9fRk9OVF9NQVAobV9mb250TWFwKSk7Ci0jZW5kaWYKLSAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgIW1fZm9udCAmJiBpIDwgR19OX0VMRU1FTlRTKGZhbWlsaWVzKTsg
aSsrKSB7Ci0gICAgICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fc2V0X2ZhbWlseShkZXNjcmlw
dGlvbiwgZmFtaWxpZXNbaV0pOwotICAgICAgICBwYW5nb19jb250ZXh0X3NldF9mb250X2Rlc2Ny
aXB0aW9uKG1fY29udGV4dCwgZGVzY3JpcHRpb24pOwotICAgICAgICBtX2ZvbnQgPSBwYW5nb19m
b250X21hcF9sb2FkX2ZvbnQobV9mb250TWFwLCBtX2NvbnRleHQsIGRlc2NyaXB0aW9uKTsKLSAg
ICB9Ci0KLSNpZiBQQU5HT19WRVJTSU9OX0NIRUNLKDEsMTgsMCkKLSAgICBpZiAobV9mb250KQot
ICAgICAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9yZWZlcmVuY2UocGFuZ29f
Y2Fpcm9fZm9udF9nZXRfc2NhbGVkX2ZvbnQoUEFOR09fQ0FJUk9fRk9OVChtX2ZvbnQpKSk7Ci0j
ZWxzZQotICAgIC8vIFRoaXMgY29tcGF0aWJpbGl0eSBjb2RlIGZvciBvbGRlciB2ZXJzaW9ucyBv
ZiBQYW5nbyBpcyBub3Qgd2VsbC10ZXN0ZWQuCi0gICAgaWYgKG1fZm9udCkgewotICAgICAgICBQ
YW5nb0ZjRm9udCogZmNmb250ID0gUEFOR09fRkNfRk9OVChtX2ZvbnQpOwotICAgICAgICBjYWly
b19mb250X2ZhY2VfdCogZmFjZSA9IGNhaXJvX2Z0X2ZvbnRfZmFjZV9jcmVhdGVfZm9yX3BhdHRl
cm4oZmNmb250LT5mb250X3BhdHRlcm4pOwotICAgICAgICBkb3VibGUgc2l6ZTsKLSAgICAgICAg
aWYgKEZjUGF0dGVybkdldERvdWJsZShmY2ZvbnQtPmZvbnRfcGF0dGVybiwgRkNfUElYRUxfU0la
RSwgMCwgJnNpemUpICE9IEZjUmVzdWx0TWF0Y2gpCi0gICAgICAgICAgICBzaXplID0gMTIuMDsK
LSAgICAgICAgY2Fpcm9fbWF0cml4X3QgZm9udE1hdHJpeDsKLSAgICAgICAgY2Fpcm9fbWF0cml4
X2luaXRfc2NhbGUoJmZvbnRNYXRyaXgsIHNpemUsIHNpemUpOwotICAgICAgICBjYWlyb19mb250
X29wdGlvbnNfdCogZm9udE9wdGlvbnM7Ci0gICAgICAgIGlmIChwYW5nb19jYWlyb19jb250ZXh0
X2dldF9mb250X29wdGlvbnMobV9jb250ZXh0KSkKLSAgICAgICAgICAgIGZvbnRPcHRpb25zID0g
Y2Fpcm9fZm9udF9vcHRpb25zX2NvcHkocGFuZ29fY2Fpcm9fY29udGV4dF9nZXRfZm9udF9vcHRp
b25zKG1fY29udGV4dCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmb250T3B0aW9ucyA9
IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsKLSAgICAgICAgY2Fpcm9fbWF0cml4X3QgY3Rt
OwotICAgICAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKLSAgICAgICAgbV9z
Y2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfY3JlYXRlKGZhY2UsICZmb250TWF0cml4LCAm
Y3RtLCBmb250T3B0aW9ucyk7Ci0gICAgICAgIGNhaXJvX2ZvbnRfb3B0aW9uc19kZXN0cm95KGZv
bnRPcHRpb25zKTsKLSAgICAgICAgY2Fpcm9fZm9udF9mYWNlX2Rlc3Ryb3koZmFjZSk7Ci0gICAg
fQotI2VuZGlmCi0gICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKGRlc2NyaXB0aW9uKTsK
LX0KLQotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29s
IGJvbGQsIGJvb2wgaXRhbGljKQotICAgIDogbV9jb250ZXh0KDApCi0gICAgLCBtX2ZvbnQoMCkK
LSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCi0gICAgLCBt
X3N5bnRoZXRpY09ibGlxdWUoaXRhbGljKQotICAgICwgbV9zY2FsZWRGb250KDApCi17Ci19Ci0K
LUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY2Fpcm9fZm9udF9mYWNlX3QqIGZv
bnRGYWNlLCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKQotICAgIDogbV9jb250
ZXh0KDApCi0gICAgLCBtX2ZvbnQoMCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9zeW50
aGV0aWNCb2xkKGJvbGQpCi0gICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoaXRhbGljKQotICAgICwg
bV9zY2FsZWRGb250KDApCi17Ci0gICAgY2Fpcm9fbWF0cml4X3QgZm9udE1hdHJpeDsKLSAgICBj
YWlyb19tYXRyaXhfaW5pdF9zY2FsZSgmZm9udE1hdHJpeCwgc2l6ZSwgc2l6ZSk7Ci0gICAgY2Fp
cm9fbWF0cml4X3QgY3RtOwotICAgIGNhaXJvX21hdHJpeF9pbml0X2lkZW50aXR5KCZjdG0pOwot
ICAgIGNhaXJvX2ZvbnRfb3B0aW9uc190KiBvcHRpb25zID0gY2Fpcm9fZm9udF9vcHRpb25zX2Ny
ZWF0ZSgpOwotCi0gICAgLy8gV2UgZm9yY2UgYW50aWFsaWFzaW5nIGFuZCBkaXNhYmxlIGhpbnRp
bmcgdG8gcHJvdmlkZSBjb25zaXN0ZW50Ci0gICAgLy8gdHlwb2dyYXBoaWMgcXVhbGl0aWVzIGZv
ciBjdXN0b20gZm9udHMgb24gYWxsIHBsYXRmb3Jtcy4KLSAgICBjYWlyb19mb250X29wdGlvbnNf
c2V0X2hpbnRfc3R5bGUob3B0aW9ucywgQ0FJUk9fSElOVF9TVFlMRV9OT05FKTsKLSAgICBjYWly
b19mb250X29wdGlvbnNfc2V0X2FudGlhbGlhcyhvcHRpb25zLCBDQUlST19BTlRJQUxJQVNfR1JB
WSk7Ci0KLSAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9jcmVhdGUoZm9udEZh
Y2UsICZmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsKLSAgICBjYWlyb19mb250X29wdGlvbnNf
ZGVzdHJveShvcHRpb25zKTsKLX0KLQotYm9vbCBGb250UGxhdGZvcm1EYXRhOjppbml0KCkKLXsK
LSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwotICAgIGlmIChpbml0aWFsaXpl
ZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAg
aWYgKCFtX2ZvbnRNYXApCi0gICAgICAgIG1fZm9udE1hcCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFw
X2dldF9kZWZhdWx0KCk7Ci0gICAgaWYgKCFtX2hhc2hUYWJsZSkgewotICAgICAgICBQYW5nb0Zv
bnRGYW1pbHkqKiBmYW1pbGllcyA9IDA7Ci0gICAgICAgIGludCBuX2ZhbWlsaWVzID0gMDsKLQot
ICAgICAgICBtX2hhc2hUYWJsZSA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBn
X3N0cl9lcXVhbCwgZ19mcmVlLCBnX29iamVjdF91bnJlZik7Ci0KLSAgICAgICAgcGFuZ29fZm9u
dF9tYXBfbGlzdF9mYW1pbGllcyhtX2ZvbnRNYXAsICZmYW1pbGllcywgJm5fZmFtaWxpZXMpOwot
Ci0gICAgICAgIGZvciAoaW50IGZhbWlseSA9IDA7IGZhbWlseSA8IG5fZmFtaWxpZXM7IGZhbWls
eSsrKQotICAgICAgICAgICAgICAgIGdfaGFzaF90YWJsZV9pbnNlcnQobV9oYXNoVGFibGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3N0cmR1cChwYW5nb19mb250X2Zh
bWlseV9nZXRfbmFtZShmYW1pbGllc1tmYW1pbHldKSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnX29iamVjdF9yZWYoZmFtaWxpZXNbZmFtaWx5XSkpOwotCi0gICAgICAg
IGdfZnJlZShmYW1pbGllcyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUZvbnRQ
bGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkKLXsKLSAgICBpZiAobV9mb250ICYmIG1f
Zm9udCAhPSByZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+KC0xKSkgewotICAgICAgICBnX29i
amVjdF91bnJlZihtX2ZvbnQpOwotICAgICAgICBtX2ZvbnQgPSAwOwotICAgIH0KLQotICAgIGlm
IChtX2NvbnRleHQpIHsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYobV9jb250ZXh0KTsKLSAgICAg
ICAgbV9jb250ZXh0ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAobV9zY2FsZWRGb250KSB7Ci0gICAg
ICAgIGNhaXJvX3NjYWxlZF9mb250X2Rlc3Ryb3kobV9zY2FsZWRGb250KTsKLSAgICAgICAgbV9z
Y2FsZWRGb250ID0gMDsKLSAgICB9Ci19Ci0KLWJvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNGaXhl
ZFBpdGNoKCkKLXsKLSAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiogZGVzY3JpcHRpb24gPSBwYW5n
b19mb250X2Rlc2NyaWJlX3dpdGhfYWJzb2x1dGVfc2l6ZShtX2ZvbnQpOwotICAgIFBhbmdvRm9u
dEZhbWlseSogZmFtaWx5ID0gcmVpbnRlcnByZXRfY2FzdDxQYW5nb0ZvbnRGYW1pbHkqPihnX2hh
c2hfdGFibGVfbG9va3VwKG1faGFzaFRhYmxlLCBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2dldF9m
YW1pbHkoZGVzY3JpcHRpb24pKSk7Ci0gICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKGRl
c2NyaXB0aW9uKTsKLSAgICByZXR1cm4gcGFuZ29fZm9udF9mYW1pbHlfaXNfbW9ub3NwYWNlKGZh
bWlseSk7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9y
PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKLXsKLSAgICAvLyBDaGVjayBmb3Igc2Vs
Zi1hc3NpZ25tZW50LgotICAgIGlmICh0aGlzID09ICZvdGhlcikKLSAgICAgICAgcmV0dXJuICp0
aGlzOwotCi0gICAgbV9zaXplID0gb3RoZXIubV9zaXplOwotICAgIG1fc3ludGhldGljQm9sZCA9
IG90aGVyLm1fc3ludGhldGljQm9sZDsKLSAgICBtX3N5bnRoZXRpY09ibGlxdWUgPSBvdGhlci5t
X3N5bnRoZXRpY09ibGlxdWU7Ci0KLSAgICBpZiAob3RoZXIubV9zY2FsZWRGb250KQotICAgICAg
ICBjYWlyb19zY2FsZWRfZm9udF9yZWZlcmVuY2Uob3RoZXIubV9zY2FsZWRGb250KTsKLSAgICBp
ZiAobV9zY2FsZWRGb250KQotICAgICAgICBjYWlyb19zY2FsZWRfZm9udF9kZXN0cm95KG1fc2Nh
bGVkRm9udCk7Ci0gICAgbV9zY2FsZWRGb250ID0gb3RoZXIubV9zY2FsZWRGb250OwotCi0gICAg
aWYgKG90aGVyLm1fZm9udCkKLSAgICAgICAgZ19vYmplY3RfcmVmKG90aGVyLm1fZm9udCk7Ci0g
ICAgaWYgKG1fZm9udCkKLSAgICAgICAgZ19vYmplY3RfdW5yZWYobV9mb250KTsKLSAgICBtX2Zv
bnQgPSBvdGhlci5tX2ZvbnQ7Ci0KLSAgICBpZiAob3RoZXIubV9jb250ZXh0KQotICAgICAgICBn
X29iamVjdF9yZWYob3RoZXIubV9jb250ZXh0KTsKLSAgICBpZiAobV9jb250ZXh0KQotICAgICAg
ICBnX29iamVjdF91bnJlZihtX2NvbnRleHQpOwotICAgIG1fY29udGV4dCA9IG90aGVyLm1fY29u
dGV4dDsKLQotICAgIHJldHVybiAqdGhpczsKLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKLSAgICA6IG1fY29udGV4
dCgwKQotICAgICwgbV9mb250KDApCi0gICAgLCBtX3NjYWxlZEZvbnQoMCkKLXsKLSAgICAqdGhp
cyA9IG90aGVyOwotfQotCi1ib29sIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0oY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZm9udCA9PSBvdGhl
ci5tX2ZvbnQpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChtX2ZvbnQgPT0gMCB8fCBt
X2ZvbnQgPT0gcmVpbnRlcnByZXRfY2FzdDxQYW5nb0ZvbnQqPigtMSkKLSAgICAgICAgfHwgb3Ro
ZXIubV9mb250ID09IDAgfHwgb3RoZXIubV9mb250ID09IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29G
b250Kj4oLTEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUGFuZ29Gb250RGVzY3JpcHRp
b24qIHRoaXNEZXNjID0gcGFuZ29fZm9udF9kZXNjcmliZShtX2ZvbnQpOwotICAgIFBhbmdvRm9u
dERlc2NyaXB0aW9uKiBvdGhlckRlc2MgPSBwYW5nb19mb250X2Rlc2NyaWJlKG90aGVyLm1fZm9u
dCk7Ci0gICAgYm9vbCByZXN1bHQgPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2VxdWFsKHRoaXNE
ZXNjLCBvdGhlckRlc2MpOwotICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZShvdGhlckRl
c2MpOwotICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZSh0aGlzRGVzYyk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotI2lmbmRlZiBOREVCVUcKLVN0cmluZyBGb250UGxhdGZvcm1EYXRh
OjpkZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotI2VuZGlm
Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURh
dGFQYW5nby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Zv
bnRQbGF0Zm9ybURhdGFQYW5nby5oCShyZXZpc2lvbiA3MDI5NikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxA
Z21haWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIElu
Yy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIEZvbnRQbGF0Zm9ybURhdGFQ
YW5nb19oCi0jZGVmaW5lIEZvbnRQbGF0Zm9ybURhdGFQYW5nb19oCi0KLSNpbmNsdWRlICJGb250
RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgPGNhaXJv
Lmg+Ci0jaW5jbHVkZSA8cGFuZ28vcGFuZ29jYWlyby5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7Ci1w
dWJsaWM6Ci0gICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUpCi0gICAgICAgIDogbV9jb250ZXh0KDApCi0gICAgICAgICwgbV9mb250KGhhc2hUYWJsZURl
bGV0ZWRGb250VmFsdWUoKSkKLSAgICAgICAgLCBtX3NpemUoMCkKLSAgICAgICAgLCBtX3N5bnRo
ZXRpY0JvbGQoZmFsc2UpCi0gICAgICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNlKQotICAg
ICAgICAsIG1fc2NhbGVkRm9udCgwKQotICAgICAgICB7IH0KLQotICAgIEZvbnRQbGF0Zm9ybURh
dGEoKQotICAgICAgICA6IG1fY29udGV4dCgwKQotICAgICAgICAsIG1fZm9udCgwKQotICAgICAg
ICAsIG1fc2l6ZSgwKQotICAgICAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKLSAgICAgICAg
LCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2UpCi0gICAgICAgICwgbV9zY2FsZWRGb250KDApCi0g
ICAgICAgIHsgfQotCi0gICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7Ci0gICAgRm9udFBsYXRmb3JtRGF0YShjYWly
b19mb250X2ZhY2VfdCogZm9udEZhY2UsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFs
aWMpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0
YWxpYyk7Ci0gICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci0g
ICAgfkZvbnRQbGF0Zm9ybURhdGEoKTsKLQotICAgIHN0YXRpYyBib29sIGluaXQoKTsKLSAgICBi
b29sIGlzRml4ZWRQaXRjaCgpOwotICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KLSAgICB2b2lkIHNldFNpemUoZmxvYXQgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9Ci0g
ICAgYm9vbCBzeW50aGV0aWNCb2xkKCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNCb2xkOyB9
Ci0gICAgYm9vbCBzeW50aGV0aWNPYmxpcXVlKCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNP
YmxpcXVlOyB9Ci0KLSAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250KCkgY29uc3Qg
eyByZXR1cm4gbV9zY2FsZWRGb250OyB9Ci0KLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNbMV0gPSB7IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihtX3NjYWxlZEZvbnQpIH07Ci0gICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpj
b21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgc2l6ZW9mKGhh
c2hDb2RlcykgLyBzaXplb2YoVUNoYXIpKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYpIGNvbnN0OwotICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9w
ZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci0gICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9mb250ID09IGhhc2hU
YWJsZURlbGV0ZWRGb250VmFsdWUoKTsKLSAgICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgU3Ry
aW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIHN0YXRpYyBQYW5nb0ZvbnRN
YXAqIG1fZm9udE1hcDsKLSAgICBzdGF0aWMgR0hhc2hUYWJsZSogbV9oYXNoVGFibGU7Ci0gICAg
UGFuZ29Db250ZXh0KiBtX2NvbnRleHQ7Ci0gICAgUGFuZ29Gb250KiBtX2ZvbnQ7Ci0gICAgZmxv
YXQgbV9zaXplOwotICAgIGJvb2wgbV9zeW50aGV0aWNCb2xkOwotICAgIGJvb2wgbV9zeW50aGV0
aWNPYmxpcXVlOwotICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIG1fc2NhbGVkRm9udDsKLXByaXZh
dGU6Ci0gICAgc3RhdGljIFBhbmdvRm9udCAqaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpIHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpOyB9Ci19OwotCi19Ci0KLSNl
bmRpZiAvLyBGb250UGxhdGZvcm1EYXRhUGFuZ29faApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvR2x5cGhQYWdlVHJlZU5vZGVQYW5nby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2x5cGhQYWdlVHJlZU5vZGVQYW5nby5jcHAJKHJl
dmlzaW9uIDcwMjk2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2x5cGhQYWdl
VHJlZU5vZGVQYW5nby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNv
bQotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNvbGxhYm9yYS5j
by51az4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0Es
IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIK
LQotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSA8cGFuZ28vcGFuZ28tZm9u
dC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBQYW5nb0dseXBoIHBhbmdvX2Zv
bnRfZ2V0X2dseXBoKFBhbmdvRm9udCogZm9udCwgUGFuZ29Db250ZXh0KiBjb250ZXh0LCBndW5p
Y2hhciB3YykKLXsKLSAgICBQYW5nb0dseXBoIHJlc3VsdCA9IDA7Ci0gICAgZ2NoYXIgYnVmZmVy
WzddOwotCi0gICAgZ2ludCAgbGVuZ3RoID0gZ191bmljaGFyX3RvX3V0Zjgod2MsIGJ1ZmZlcik7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobGVuZ3RoLCAwKTsKLQotICAgIEdMaXN0KiBpdGVt
cyA9IHBhbmdvX2l0ZW1pemUoY29udGV4dCwgYnVmZmVyLCAwLCBsZW5ndGgsIE5VTEwsIE5VTEwp
OwotCi0gICAgaWYgKGdfbGlzdF9sZW5ndGgoaXRlbXMpID09IDEpIHsKLSAgICAgICAgUGFuZ29J
dGVtKiBpdGVtID0gcmVpbnRlcnByZXRfY2FzdDxQYW5nb0l0ZW0qPihpdGVtcy0+ZGF0YSk7Ci0g
ICAgICAgIFBhbmdvRm9udCogdG1wRm9udCA9IGl0ZW0tPmFuYWx5c2lzLmZvbnQ7Ci0gICAgICAg
IGl0ZW0tPmFuYWx5c2lzLmZvbnQgPSBmb250OwotCi0gICAgICAgIFBhbmdvR2x5cGhTdHJpbmcq
IGdseXBocyA9IHBhbmdvX2dseXBoX3N0cmluZ19uZXcoKTsKLSAgICAgICAgcGFuZ29fc2hhcGUo
YnVmZmVyLCBsZW5ndGgsICZpdGVtLT5hbmFseXNpcywgZ2x5cGhzKTsKLQotICAgICAgICBpdGVt
LT5hbmFseXNpcy5mb250ID0gdG1wRm9udDsKLQotICAgICAgICBpZiAoZ2x5cGhzLT5udW1fZ2x5
cGhzID09IDEpCi0gICAgICAgICAgICByZXN1bHQgPSBnbHlwaHMtPmdseXBoc1swXS5nbHlwaDsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ193YXJuaW5nKCJkaWRuJ3QgZ2V0IDEgZ2x5cGgg
YnV0ICVkIiwgZ2x5cGhzLT5udW1fZ2x5cGhzKTsKLQotICAgICAgICBwYW5nb19nbHlwaF9zdHJp
bmdfZnJlZShnbHlwaHMpOwotICAgIH0KLQotICAgIGdfbGlzdF9mb3JlYWNoKGl0ZW1zLCAoR0Z1
bmMpcGFuZ29faXRlbV9mcmVlLCBOVUxMKTsKLSAgICBnX2xpc3RfZnJlZShpdGVtcyk7Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3Ro
LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCi17Ci0gICAgLy8gVGhlIGJ1ZmZlckxl
bmd0aCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiB0aGUgZ2x5cGggcGFnZSBzaXplIGlmIHRoZSBidWZm
ZXIgaGFzIFVuaWNvZGUgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzLgotICAgIC8vIFdlIHdvbid0
IHN1cHBvcnQgdGhpcyBmb3Igbm93LgotICAgIGlmIChidWZmZXJMZW5ndGggPiBHbHlwaFBhZ2U6
OnNpemUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZm9udERhdGEtPnBsYXRm
b3JtRGF0YSgpLm1fZm9udCB8fCBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkubV9mb250ID09IHJl
aW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgR2x5cGggZ2x5cGggPSBwYW5nb19mb250X2dldF9n
bHlwaChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkubV9mb250LCBmb250RGF0YS0+cGxhdGZvcm1E
YXRhKCkubV9jb250ZXh0LCBidWZmZXJbaV0pOwotICAgICAgICBpZiAoIWdseXBoKQotICAgICAg
ICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgMCwgMCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGgs
IGZvbnREYXRhKTsKLSAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGhhdmVHbHlwaHM7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCShy
ZXZpc2lvbiA3MDI5NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZv
bnREYXRhUGFuZ28uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0MiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFp
bC5jb20KLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIu
Y29tPgotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIgVVNBLCBJbmMuCi0g
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaW1w
bGVGb250RGF0YS5oIgotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRm9udC5o
IgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgot
I2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtSW5pdCgpCi17Ci0gICAgY2Fpcm9fZm9udF9leHRlbnRzX3QgZm9udF9l
eHRlbnRzOwotICAgIGNhaXJvX3RleHRfZXh0ZW50c190IHRleHRfZXh0ZW50czsKLSAgICBjYWly
b19zY2FsZWRfZm9udF9leHRlbnRzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCwgJmZvbnRf
ZXh0ZW50cyk7Ci0gICAgbV9hc2NlbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoZm9udF9l
eHRlbnRzLmFzY2VudCkpOwotICAgIG1fZGVzY2VudCA9IHN0YXRpY19jYXN0PGludD4obHJvdW5k
Zihmb250X2V4dGVudHMuZGVzY2VudCkpOwotICAgIG1fbGluZVNwYWNpbmcgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGxyb3VuZGYoZm9udF9leHRlbnRzLmhlaWdodCkpOwotICAgIC8vIFRoZXJlIHNlZW1z
IHRvIGJlIHNvbWUgcm91bmRpbmcgZXJyb3IgaW4gY2Fpcm8gKG9yIGluIGhvdyB3ZQotICAgIC8v
IHVzZSBjYWlybykgd2l0aCBzb21lIGZvbnRzLCBsaWtlIERlamFWdSBTYW5zIE1vbm8sIHdoaWNo
IG1ha2VzCi0gICAgLy8gY2Fpcm8gcmVwb3J0IGEgaGVpZ2h0IHNtYWxsZXIgdGhhbiBhc2NlbnQg
KyBkZXNjZW50LCB3aGljaCBpcwotICAgIC8vIHdyb25nIGFuZCBjb25mdXNlcyBXZWJDb3JlJ3Mg
bGF5b3V0IHN5c3RlbS4gV29ya2Fyb3VuZCB0aGlzCi0gICAgLy8gd2hpbGUgd2UgZmlndXJlIG91
dCB3aGF0J3MgZ29pbmcgb24uCi0gICAgaWYgKG1fbGluZVNwYWNpbmcgPCBtX2FzY2VudCArIG1f
ZGVzY2VudCkKLSAgICAgICAgbV9saW5lU3BhY2luZyA9IG1fYXNjZW50ICsgbV9kZXNjZW50Owot
ICAgIGNhaXJvX3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxl
ZEZvbnQsICJ4IiwgJnRleHRfZXh0ZW50cyk7Ci0gICAgbV94SGVpZ2h0ID0gdGV4dF9leHRlbnRz
LmhlaWdodDsKLSAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMobV9wbGF0Zm9ybURh
dGEubV9zY2FsZWRGb250LCAiICIsICZ0ZXh0X2V4dGVudHMpOwotICAgIG1fc3BhY2VXaWR0aCA9
ICBzdGF0aWNfY2FzdDxmbG9hdD4odGV4dF9leHRlbnRzLnhfYWR2YW5jZSk7Ci0gICAgbV9saW5l
R2FwID0gbV9saW5lU3BhY2luZyAtIG1fYXNjZW50IC0gbV9kZXNjZW50OwotICAgIG1fc3ludGhl
dGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAw
LmY7Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCi17
Ci0gICAgbV9hdmdDaGFyV2lkdGggPSAwLmY7Ci0gICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7Ci0g
ICAgaW5pdENoYXJXaWR0aHMoKTsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1E
ZXN0cm95KCkKLXsKLSAgICBkZWxldGUgbV9zbWFsbENhcHNGb250RGF0YTsKLSAgICBtX3NtYWxs
Q2Fwc0ZvbnREYXRhID0gMDsKLX0KLQotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpz
bWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikg
Y29uc3QKLXsKLSAgICBpZiAoIW1fc21hbGxDYXBzRm9udERhdGEpIHsKLSAgICAgICAgRm9udERl
c2NyaXB0aW9uIGRlc2MgPSBGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAg
ICAgZGVzYy5zZXRTcGVjaWZpZWRTaXplKDAuNzBmICogZm9udERlc2NyaXB0aW9uLmNvbXB1dGVk
U2l6ZSgpKTsKLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBwbGF0Zm9ybURhdGEoZGVzYywgZGVz
Yy5mYW1pbHkoKS5mYW1pbHkoKSk7Ci0gICAgICAgIG1fc21hbGxDYXBzRm9udERhdGEgPSBuZXcg
U2ltcGxlRm9udERhdGEocGxhdGZvcm1EYXRhKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fc21hbGxD
YXBzRm9udERhdGE7Ci19Ci0KLWJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVy
cyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKLXsKLSAgICBib29s
IHJlc3VsdCA9IHRydWU7Ci0KLSAgICBQYW5nb0NvdmVyYWdlKiBjb3ZlcmFnZSA9IHBhbmdvX2Zv
bnRfZ2V0X2NvdmVyYWdlKG1fcGxhdGZvcm1EYXRhLm1fZm9udCwgcGFuZ29fbGFuZ3VhZ2VfZ2V0
X2RlZmF1bHQoKSk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgIGlmIChQQU5HT19DT1ZFUkFHRV9OT05FID09IHBhbmdvX2NvdmVyYWdlX2dldChjb3Zl
cmFnZSwgY2hhcmFjdGVyc1tpXSkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwYW5nb19jb3ZlcmFnZV91
bnJlZihjb3ZlcmFnZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFNpbXBsZUZv
bnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCi17Ci0gICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7Ci0g
ICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBtX3BsYXRmb3JtRGF0YS5pc0ZpeGVkUGl0
Y2goKTsKLX0KLQotRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0Zvckds
eXBoKEdseXBoKSBjb25zdAotewotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLX0KLQotZmxvYXQg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QK
LXsKLSAgICBBU1NFUlQobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250KTsKLQotICAgIGNhaXJv
X2dseXBoX3QgY2dseXBoID0geyBnbHlwaCwgMCwgMCB9OwotICAgIGNhaXJvX3RleHRfZXh0ZW50
c190IGV4dGVudHM7Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZ2x5cGhfZXh0ZW50cyhtX3BsYXRm
b3JtRGF0YS5tX3NjYWxlZEZvbnQsICZjZ2x5cGgsIDEsICZleHRlbnRzKTsKLQotICAgIGZsb2F0
IHdpZHRoID0gKGZsb2F0KW1fc3BhY2VXaWR0aDsKLSAgICBpZiAoY2Fpcm9fc2NhbGVkX2ZvbnRf
c3RhdHVzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NF
U1MgJiYgZXh0ZW50cy54X2FkdmFuY2UgIT0gMCkKLSAgICAgICAgd2lkdGggPSAoZmxvYXQpZXh0
ZW50cy54X2FkdmFuY2U7Ci0KLSAgICByZXR1cm4gd2lkdGg7ICAgIAotfQotCi19CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDYWNoZVBhbmdvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDYWNoZVBhbmdvLmNw
cAkocmV2aXNpb24gNzAyODcpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Zv
bnRDYWNoZVBhbmdvLmNwcDo3MDI4NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFu
Z28vRm9udENhY2hlUGFuZ28uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKworI2luY2x1ZGUgIkNT
dHJpbmcuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiT3duUHRyQ2Fpcm8uaCIKKyNp
bmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCit7
CisgICAgaWYgKCFGb250UGxhdGZvcm1EYXRhOjppbml0KCkpCisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCitjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250
RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIGludCBsZW5ndGgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK1NpbXBsZUZvbnREYXRhKiBG
b250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCit7
CisgICAgcmV0dXJuIDA7Cit9CisKK1NpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
Cit7CisgICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRo
ZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuCisgICAgLy8gRm9yIG5vdyB3ZSdsbCBwaWNrIHRo
ZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHBy
ZWZzLgorICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgdGltZXNTdHIoIlRpbWVzIE5ldyBSb21hbiIp
OworICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHRpbWVzU3Ry
KTsKK30KKwordm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5TmFtZSwgVmVjdG9yPHVuc2lnbmVkPiYgdHJhaXRzTWFza3MpCit7Cit9CisK
K0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBm
YW1pbHkpCit7CisgICAgcmV0dXJuIG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlv
biwgZmFtaWx5KTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5n
by9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdvLmNwcAko
cmV2aXNpb24gNzAyODcpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHA6NzAyODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3BhbmdvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIg
PGFscEBhdG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1
ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhOjp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpCit7Cit9CisKK0ZvbnRQ
bGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShpbnQg
c2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgRm9udE9yaWVudGF0aW9uLCBGb250UmVuZGVy
aW5nTW9kZSkKK3sKKyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShtX2ZvbnRGYWNlLCBzaXpl
LCBib2xkLCBpdGFsaWMpOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlRGF0YSh2b2lkKiBkYXRh
KQoreworICAgIHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGRhdGEpLT5kZXJlZigpOworfQor
CitGb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNo
YXJlZEJ1ZmZlciogYnVmZmVyKQoreworICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHN1cHBvcnQgaW4g
cGFuZ28gdG8gcmVhZCBmb250cyBmcm9tIG1lbW9yeSB0byBpbXBsZW1lbnQgdGhpcy55CisgICAg
cmV0dXJuIDA7Cit9CisKK2Jvb2wgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6c3VwcG9ydHNGb3Jt
YXQoY29uc3QgU3RyaW5nJiAvKiBmb3JtYXQgKi8pCit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQbGF0Zm9ybURh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQ
bGF0Zm9ybURhdGEuaAkocmV2aXNpb24gNzAyODcpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5oOjcwMjg3KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBn
bWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhl
cgorICogQ29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5j
LgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgRm9udFBsYXRmb3JtRGF0YVBh
bmdvX2gKKyNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YVBhbmdvX2gKKworI2luY2x1ZGUgIkZvbnRE
ZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSA8Y2Fpcm8u
aD4KKyNpbmNsdWRlIDxwYW5nby9wYW5nb2NhaXJvLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250UGxhdGZvcm1EYXRhIHsKK3B1
YmxpYzoKKyAgICBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlw
ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoMCkKKyAgICAgICAgLCBtX2ZvbnQoaGFzaFRhYmxlRGVs
ZXRlZEZvbnRWYWx1ZSgpKQorICAgICAgICAsIG1fc2l6ZSgwKQorICAgICAgICAsIG1fc3ludGhl
dGljQm9sZChmYWxzZSkKKyAgICAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2UpCisgICAg
ICAgICwgbV9zY2FsZWRGb250KDApCisgICAgICAgIHsgfQorCisgICAgRm9udFBsYXRmb3JtRGF0
YSgpCisgICAgICAgIDogbV9jb250ZXh0KDApCisgICAgICAgICwgbV9mb250KDApCisgICAgICAg
ICwgbV9zaXplKDApCisgICAgICAgICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQorICAgICAgICAs
IG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKKyAgICAgICAgLCBtX3NjYWxlZEZvbnQoMCkKKyAg
ICAgICAgeyB9CisKKyAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsKKyAgICBGb250UGxhdGZvcm1EYXRhKGNhaXJv
X2ZvbnRfZmFjZV90KiBmb250RmFjZSwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxp
Yyk7CisgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRh
bGljKTsKKyAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKyAg
ICB+Rm9udFBsYXRmb3JtRGF0YSgpOworCisgICAgc3RhdGljIGJvb2wgaW5pdCgpOworICAgIGJv
b2wgaXNGaXhlZFBpdGNoKCk7CisgICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQorICAgIHZvaWQgc2V0U2l6ZShmbG9hdCBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KKyAg
ICBib29sIHN5bnRoZXRpY0JvbGQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY0JvbGQ7IH0K
KyAgICBib29sIHN5bnRoZXRpY09ibGlxdWUoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY09i
bGlxdWU7IH0KKworICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQoKSBjb25zdCB7
IHJldHVybiBtX3NjYWxlZEZvbnQ7IH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAg
IHsKKyAgICAgICAgdWludHB0cl90IGhhc2hDb2Rlc1sxXSA9IHsgcmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KG1fc2NhbGVkRm9udCkgfTsKKyAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNv
bXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMpLCBzaXplb2YoaGFz
aENvZGVzKSAvIHNpemVvZihVQ2hhcikpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBGb250UGxhdGZvcm1EYXRhJikgY29uc3Q7CisgICAgRm9udFBsYXRmb3JtRGF0YSYgb3Bl
cmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKyAgICBib29sIGlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZvbnQgPT0gaGFzaFRh
YmxlRGVsZXRlZEZvbnRWYWx1ZSgpOworICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAgICBTdHJp
bmcgZGVzY3JpcHRpb24oKSBjb25zdDsKKyNlbmRpZgorCisgICAgc3RhdGljIFBhbmdvRm9udE1h
cCogbV9mb250TWFwOworICAgIHN0YXRpYyBHSGFzaFRhYmxlKiBtX2hhc2hUYWJsZTsKKyAgICBQ
YW5nb0NvbnRleHQqIG1fY29udGV4dDsKKyAgICBQYW5nb0ZvbnQqIG1fZm9udDsKKyAgICBmbG9h
dCBtX3NpemU7CisgICAgYm9vbCBtX3N5bnRoZXRpY0JvbGQ7CisgICAgYm9vbCBtX3N5bnRoZXRp
Y09ibGlxdWU7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogbV9zY2FsZWRGb250OworcHJpdmF0
ZToKKyAgICBzdGF0aWMgUGFuZ29Gb250ICpoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQYW5nb0ZvbnQqPigtMSk7IH0KK307CisKK30KKworI2Vu
ZGlmIC8vIEZvbnRQbGF0Zm9ybURhdGFQYW5nb19oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3BhbmdvL0ZvbnRQbGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQbGF0Zm9ybURhdGEuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBsYXRmb3JtRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgRm9udFBsYXRm
b3JtRGF0YVBhbmdvX2gKLSNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YVBhbmdvX2gKKyNpZm5kZWYg
Rm9udFBsYXRmb3JtRGF0YV9oCisjZGVmaW5lIEZvbnRQbGF0Zm9ybURhdGFfaAogCiAjaW5jbHVk
ZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKQEAgLTk5LDQg
Kzk5LDQgQEAgcHJpdmF0ZToKIAogfQogCi0jZW5kaWYgLy8gRm9udFBsYXRmb3JtRGF0YVBhbmdv
X2gKKyNlbmRpZiAvLyBGb250UGxhdGZvcm1EYXRhX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcGFuZ28vRm9udFBsYXRmb3JtRGF0YVBhbmdvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAJ
KHJldmlzaW9uIDcwMjg3KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250
UGxhdGZvcm1EYXRhUGFuZ28uY3BwOjcwMjg3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9wYW5nby9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNv
bQorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENv
cHlyaWdodCAoQykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBJZ2FsaWEgUy5MLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisKKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPGFz
c2VydC5oPgorCisjaW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4KKyNpbmNsdWRlIDxwYW5nby9wYW5n
b2NhaXJvLmg+CisKKy8vIFVzZSBjYWlyby1mdCBpIGEgcmVjZW50IGVub3VnaCBQYW5nbyB2ZXJz
aW9uIGlzbid0IGF2YWlsYWJsZQorI2lmICFQQU5HT19WRVJTSU9OX0NIRUNLKDEsMTgsMCkKKyNp
bmNsdWRlIDxjYWlyby1mdC5oPgorI2luY2x1ZGUgPHBhbmdvL3BhbmdvZmMtZm9udG1hcC5oPgor
I2VuZGlmCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bh
bmdvRm9udE1hcCogRm9udFBsYXRmb3JtRGF0YTo6bV9mb250TWFwID0gMDsKK0dIYXNoVGFibGUq
IEZvbnRQbGF0Zm9ybURhdGE6Om1faGFzaFRhYmxlID0gMDsKKworRm9udFBsYXRmb3JtRGF0YTo6
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQorICAgIDogbV9jb250ZXh0KDApCisgICAg
LCBtX2ZvbnQoMCkKKyAgICAsIG1fc2l6ZShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkp
CisgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCisgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUo
ZmFsc2UpCisgICAgLCBtX3NjYWxlZEZvbnQoMCkKK3sKKyAgICBGb250UGxhdGZvcm1EYXRhOjpp
bml0KCk7CisKKyAgICBDU3RyaW5nIHN0b3JlZF9mYW1pbHkgPSBmYW1pbHlOYW1lLnN0cmluZygp
LnV0ZjgoKTsKKyAgICBjaGFyIGNvbnN0KiBmYW1pbGllc1tdID0geworICAgICAgc3RvcmVkX2Zh
bWlseS5kYXRhKCksCisgICAgICBOVUxMCisgICAgfTsKKworICAgIHN3aXRjaCAoZm9udERlc2Ny
aXB0aW9uLmdlbmVyaWNGYW1pbHkoKSkgeworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTZXJp
ZkZhbWlseToKKyAgICAgICAgZmFtaWxpZXNbMV0gPSAic2VyaWYiOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5OgorICAgICAgICBmYW1p
bGllc1sxXSA9ICJzYW5zIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250RGVzY3JpcHRp
b246Ok1vbm9zcGFjZUZhbWlseToKKyAgICAgICAgZmFtaWxpZXNbMV0gPSAibW9ub3NwYWNlIjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5OgorICAg
IGNhc2UgRm9udERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseToKKyAgICBkZWZhdWx0OgorICAg
ICAgICBmYW1pbGllc1sxXSA9ICJzYW5zIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
UGFuZ29Gb250RGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uID0gcGFuZ29fZm9udF9kZXNjcmlwdGlv
bl9uZXcoKTsKKyAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX3NldF9hYnNvbHV0ZV9zaXplKGRl
c2NyaXB0aW9uLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkgKiBQQU5HT19TQ0FMRSk7
CisKKyAgICAvLyBGSVhNRTogTWFwIGFsbCBGb250V2VpZ2h0IHZhbHVlcyB0byBQYW5nbyBmb250
IHdlaWdodHMuCisgICAgaWYgKGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSA+PSBGb250V2VpZ2h0
NjAwKQorICAgICAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX3NldF93ZWlnaHQoZGVzY3JpcHRp
b24sIFBBTkdPX1dFSUdIVF9CT0xEKTsKKyAgICBpZiAoZm9udERlc2NyaXB0aW9uLml0YWxpYygp
KQorICAgICAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX3NldF9zdHlsZShkZXNjcmlwdGlvbiwg
UEFOR09fU1RZTEVfSVRBTElDKTsKKworI2lmIFBBTkdPX1ZFUlNJT05fQ0hFQ0soMSwyMSw1KSAg
IC8vIGRlcHJlY2F0ZWQgaW4gMS4yMQorICAgIG1fY29udGV4dCA9IHBhbmdvX2ZvbnRfbWFwX2Ny
ZWF0ZV9jb250ZXh0KG1fZm9udE1hcCk7CisjZWxzZQorICAgIG1fY29udGV4dCA9IHBhbmdvX2Nh
aXJvX2ZvbnRfbWFwX2NyZWF0ZV9jb250ZXh0KFBBTkdPX0NBSVJPX0ZPTlRfTUFQKG1fZm9udE1h
cCkpOworI2VuZGlmCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7ICFtX2ZvbnQgJiYgaSA8
IEdfTl9FTEVNRU5UUyhmYW1pbGllcyk7IGkrKykgeworICAgICAgICBwYW5nb19mb250X2Rlc2Ny
aXB0aW9uX3NldF9mYW1pbHkoZGVzY3JpcHRpb24sIGZhbWlsaWVzW2ldKTsKKyAgICAgICAgcGFu
Z29fY29udGV4dF9zZXRfZm9udF9kZXNjcmlwdGlvbihtX2NvbnRleHQsIGRlc2NyaXB0aW9uKTsK
KyAgICAgICAgbV9mb250ID0gcGFuZ29fZm9udF9tYXBfbG9hZF9mb250KG1fZm9udE1hcCwgbV9j
b250ZXh0LCBkZXNjcmlwdGlvbik7CisgICAgfQorCisjaWYgUEFOR09fVkVSU0lPTl9DSEVDSygx
LDE4LDApCisgICAgaWYgKG1fZm9udCkKKyAgICAgICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2Nh
bGVkX2ZvbnRfcmVmZXJlbmNlKHBhbmdvX2NhaXJvX2ZvbnRfZ2V0X3NjYWxlZF9mb250KFBBTkdP
X0NBSVJPX0ZPTlQobV9mb250KSkpOworI2Vsc2UKKyAgICAvLyBUaGlzIGNvbXBhdGliaWxpdHkg
Y29kZSBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgUGFuZ28gaXMgbm90IHdlbGwtdGVzdGVkLgorICAg
IGlmIChtX2ZvbnQpIHsKKyAgICAgICAgUGFuZ29GY0ZvbnQqIGZjZm9udCA9IFBBTkdPX0ZDX0ZP
TlQobV9mb250KTsKKyAgICAgICAgY2Fpcm9fZm9udF9mYWNlX3QqIGZhY2UgPSBjYWlyb19mdF9m
b250X2ZhY2VfY3JlYXRlX2Zvcl9wYXR0ZXJuKGZjZm9udC0+Zm9udF9wYXR0ZXJuKTsKKyAgICAg
ICAgZG91YmxlIHNpemU7CisgICAgICAgIGlmIChGY1BhdHRlcm5HZXREb3VibGUoZmNmb250LT5m
b250X3BhdHRlcm4sIEZDX1BJWEVMX1NJWkUsIDAsICZzaXplKSAhPSBGY1Jlc3VsdE1hdGNoKQor
ICAgICAgICAgICAgc2l6ZSA9IDEyLjA7CisgICAgICAgIGNhaXJvX21hdHJpeF90IGZvbnRNYXRy
aXg7CisgICAgICAgIGNhaXJvX21hdHJpeF9pbml0X3NjYWxlKCZmb250TWF0cml4LCBzaXplLCBz
aXplKTsKKyAgICAgICAgY2Fpcm9fZm9udF9vcHRpb25zX3QqIGZvbnRPcHRpb25zOworICAgICAg
ICBpZiAocGFuZ29fY2Fpcm9fY29udGV4dF9nZXRfZm9udF9vcHRpb25zKG1fY29udGV4dCkpCisg
ICAgICAgICAgICBmb250T3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jb3B5KHBhbmdvX2Nh
aXJvX2NvbnRleHRfZ2V0X2ZvbnRfb3B0aW9ucyhtX2NvbnRleHQpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZm9udE9wdGlvbnMgPSBjYWlyb19mb250X29wdGlvbnNfY3JlYXRlKCk7Cisg
ICAgICAgIGNhaXJvX21hdHJpeF90IGN0bTsKKyAgICAgICAgY2Fpcm9fbWF0cml4X2luaXRfaWRl
bnRpdHkoJmN0bSk7CisgICAgICAgIG1fc2NhbGVkRm9udCA9IGNhaXJvX3NjYWxlZF9mb250X2Ny
ZWF0ZShmYWNlLCAmZm9udE1hdHJpeCwgJmN0bSwgZm9udE9wdGlvbnMpOworICAgICAgICBjYWly
b19mb250X29wdGlvbnNfZGVzdHJveShmb250T3B0aW9ucyk7CisgICAgICAgIGNhaXJvX2ZvbnRf
ZmFjZV9kZXN0cm95KGZhY2UpOworICAgIH0KKyNlbmRpZgorICAgIHBhbmdvX2ZvbnRfZGVzY3Jp
cHRpb25fZnJlZShkZXNjcmlwdGlvbik7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0
Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYykKKyAgICA6IG1fY29u
dGV4dCgwKQorICAgICwgbV9mb250KDApCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fc3lu
dGhldGljQm9sZChib2xkKQorICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGl0YWxpYykKKyAgICAs
IG1fc2NhbGVkRm9udCgwKQoreworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1E
YXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBi
b29sIGl0YWxpYykKKyAgICA6IG1fY29udGV4dCgwKQorICAgICwgbV9mb250KDApCisgICAgLCBt
X3NpemUoc2l6ZSkKKyAgICAsIG1fc3ludGhldGljQm9sZChib2xkKQorICAgICwgbV9zeW50aGV0
aWNPYmxpcXVlKGl0YWxpYykKKyAgICAsIG1fc2NhbGVkRm9udCgwKQoreworICAgIGNhaXJvX21h
dHJpeF90IGZvbnRNYXRyaXg7CisgICAgY2Fpcm9fbWF0cml4X2luaXRfc2NhbGUoJmZvbnRNYXRy
aXgsIHNpemUsIHNpemUpOworICAgIGNhaXJvX21hdHJpeF90IGN0bTsKKyAgICBjYWlyb19tYXRy
aXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKKyAgICBjYWlyb19mb250X29wdGlvbnNfdCogb3B0aW9u
cyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsKKworICAgIC8vIFdlIGZvcmNlIGFudGlh
bGlhc2luZyBhbmQgZGlzYWJsZSBoaW50aW5nIHRvIHByb3ZpZGUgY29uc2lzdGVudAorICAgIC8v
IHR5cG9ncmFwaGljIHF1YWxpdGllcyBmb3IgY3VzdG9tIGZvbnRzIG9uIGFsbCBwbGF0Zm9ybXMu
CisgICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9oaW50X3N0eWxlKG9wdGlvbnMsIENBSVJPX0hJ
TlRfU1RZTEVfTk9ORSk7CisgICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9hbnRpYWxpYXMob3B0
aW9ucywgQ0FJUk9fQU5USUFMSUFTX0dSQVkpOworCisgICAgbV9zY2FsZWRGb250ID0gY2Fpcm9f
c2NhbGVkX2ZvbnRfY3JlYXRlKGZvbnRGYWNlLCAmZm9udE1hdHJpeCwgJmN0bSwgb3B0aW9ucyk7
CisgICAgY2Fpcm9fZm9udF9vcHRpb25zX2Rlc3Ryb3kob3B0aW9ucyk7Cit9CisKK2Jvb2wgRm9u
dFBsYXRmb3JtRGF0YTo6aW5pdCgpCit7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBm
YWxzZTsKKyAgICBpZiAoaW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlu
aXRpYWxpemVkID0gdHJ1ZTsKKworICAgIGlmICghbV9mb250TWFwKQorICAgICAgICBtX2ZvbnRN
YXAgPSBwYW5nb19jYWlyb19mb250X21hcF9nZXRfZGVmYXVsdCgpOworICAgIGlmICghbV9oYXNo
VGFibGUpIHsKKyAgICAgICAgUGFuZ29Gb250RmFtaWx5KiogZmFtaWxpZXMgPSAwOworICAgICAg
ICBpbnQgbl9mYW1pbGllcyA9IDA7CisKKyAgICAgICAgbV9oYXNoVGFibGUgPSBnX2hhc2hfdGFi
bGVfbmV3X2Z1bGwoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwsIGdfZnJlZSwgZ19vYmplY3RfdW5y
ZWYpOworCisgICAgICAgIHBhbmdvX2ZvbnRfbWFwX2xpc3RfZmFtaWxpZXMobV9mb250TWFwLCAm
ZmFtaWxpZXMsICZuX2ZhbWlsaWVzKTsKKworICAgICAgICBmb3IgKGludCBmYW1pbHkgPSAwOyBm
YW1pbHkgPCBuX2ZhbWlsaWVzOyBmYW1pbHkrKykKKyAgICAgICAgICAgICAgICBnX2hhc2hfdGFi
bGVfaW5zZXJ0KG1faGFzaFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ19zdHJkdXAocGFuZ29fZm9udF9mYW1pbHlfZ2V0X25hbWUoZmFtaWxpZXNbZmFtaWx5XSkp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19vYmplY3RfcmVmKGZhbWls
aWVzW2ZhbWlseV0pKTsKKworICAgICAgICBnX2ZyZWUoZmFtaWxpZXMpOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgp
Cit7CisgICAgaWYgKG1fZm9udCAmJiBtX2ZvbnQgIT0gcmVpbnRlcnByZXRfY2FzdDxQYW5nb0Zv
bnQqPigtMSkpIHsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobV9mb250KTsKKyAgICAgICAgbV9m
b250ID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9jb250ZXh0KSB7CisgICAgICAgIGdfb2JqZWN0
X3VucmVmKG1fY29udGV4dCk7CisgICAgICAgIG1fY29udGV4dCA9IDA7CisgICAgfQorCisgICAg
aWYgKG1fc2NhbGVkRm9udCkgeworICAgICAgICBjYWlyb19zY2FsZWRfZm9udF9kZXN0cm95KG1f
c2NhbGVkRm9udCk7CisgICAgICAgIG1fc2NhbGVkRm9udCA9IDA7CisgICAgfQorfQorCitib29s
IEZvbnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpCit7CisgICAgUGFuZ29Gb250RGVzY3Jp
cHRpb24qIGRlc2NyaXB0aW9uID0gcGFuZ29fZm9udF9kZXNjcmliZV93aXRoX2Fic29sdXRlX3Np
emUobV9mb250KTsKKyAgICBQYW5nb0ZvbnRGYW1pbHkqIGZhbWlseSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8UGFuZ29Gb250RmFtaWx5Kj4oZ19oYXNoX3RhYmxlX2xvb2t1cChtX2hhc2hUYWJsZSwgcGFu
Z29fZm9udF9kZXNjcmlwdGlvbl9nZXRfZmFtaWx5KGRlc2NyaXB0aW9uKSkpOworICAgIHBhbmdv
X2ZvbnRfZGVzY3JpcHRpb25fZnJlZShkZXNjcmlwdGlvbik7CisgICAgcmV0dXJuIHBhbmdvX2Zv
bnRfZmFtaWx5X2lzX21vbm9zcGFjZShmYW1pbHkpOworfQorCitGb250UGxhdGZvcm1EYXRhJiBG
b250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIp
Cit7CisgICAgLy8gQ2hlY2sgZm9yIHNlbGYtYXNzaWdubWVudC4KKyAgICBpZiAodGhpcyA9PSAm
b3RoZXIpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6
ZTsKKyAgICBtX3N5bnRoZXRpY0JvbGQgPSBvdGhlci5tX3N5bnRoZXRpY0JvbGQ7CisgICAgbV9z
eW50aGV0aWNPYmxpcXVlID0gb3RoZXIubV9zeW50aGV0aWNPYmxpcXVlOworCisgICAgaWYgKG90
aGVyLm1fc2NhbGVkRm9udCkKKyAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfcmVmZXJlbmNlKG90
aGVyLm1fc2NhbGVkRm9udCk7CisgICAgaWYgKG1fc2NhbGVkRm9udCkKKyAgICAgICAgY2Fpcm9f
c2NhbGVkX2ZvbnRfZGVzdHJveShtX3NjYWxlZEZvbnQpOworICAgIG1fc2NhbGVkRm9udCA9IG90
aGVyLm1fc2NhbGVkRm9udDsKKworICAgIGlmIChvdGhlci5tX2ZvbnQpCisgICAgICAgIGdfb2Jq
ZWN0X3JlZihvdGhlci5tX2ZvbnQpOworICAgIGlmIChtX2ZvbnQpCisgICAgICAgIGdfb2JqZWN0
X3VucmVmKG1fZm9udCk7CisgICAgbV9mb250ID0gb3RoZXIubV9mb250OworCisgICAgaWYgKG90
aGVyLm1fY29udGV4dCkKKyAgICAgICAgZ19vYmplY3RfcmVmKG90aGVyLm1fY29udGV4dCk7Cisg
ICAgaWYgKG1fY29udGV4dCkKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobV9jb250ZXh0KTsKKyAg
ICBtX2NvbnRleHQgPSBvdGhlci5tX2NvbnRleHQ7CisKKyAgICByZXR1cm4gKnRoaXM7Cit9CisK
K0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgb3RoZXIpCisgICAgOiBtX2NvbnRleHQoMCkKKyAgICAsIG1fZm9udCgwKQorICAgICwgbV9z
Y2FsZWRGb250KDApCit7CisgICAgKnRoaXMgPSBvdGhlcjsKK30KKworYm9vbCBGb250UGxhdGZv
cm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAor
eworICAgIGlmIChtX2ZvbnQgPT0gb3RoZXIubV9mb250KQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAobV9mb250ID09IDAgfHwgbV9mb250ID09IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29G
b250Kj4oLTEpCisgICAgICAgIHx8IG90aGVyLm1fZm9udCA9PSAwIHx8IG90aGVyLm1fZm9udCA9
PSByZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+KC0xKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiB0aGlzRGVzYyA9IHBhbmdvX2ZvbnRfZGVzY3Jp
YmUobV9mb250KTsKKyAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiogb3RoZXJEZXNjID0gcGFuZ29f
Zm9udF9kZXNjcmliZShvdGhlci5tX2ZvbnQpOworICAgIGJvb2wgcmVzdWx0ID0gcGFuZ29fZm9u
dF9kZXNjcmlwdGlvbl9lcXVhbCh0aGlzRGVzYywgb3RoZXJEZXNjKTsKKyAgICBwYW5nb19mb250
X2Rlc2NyaXB0aW9uX2ZyZWUob3RoZXJEZXNjKTsKKyAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9u
X2ZyZWUodGhpc0Rlc2MpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNpZm5kZWYgTkRFQlVH
CitTdHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIHJl
dHVybiBTdHJpbmcoKTsKK30KKyNlbmRpZgorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3BhbmdvL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGxhdGZv
cm1EYXRhUGFuZ28uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVk
ZSA8Y2Fpcm8tZnQuaD4KICNpbmNsdWRlIDxwYW5nby9wYW5nb2ZjLWZvbnRtYXAuaD4KICNlbmRp
ZgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0dseXBoUGFnZVRyZWVOb2RlUGFuZ28uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vR2x5cGhQYWdl
VHJlZU5vZGVQYW5nby5jcHAJKHJldmlzaW9uIDcwMjg3KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZVBhbmdvLmNwcDo3MDI4NykKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vR2x5cGhQYWdlVHJlZU5vZGVQYW5nby5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAy
MDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNvbGxhYm9yYS5jby51az4KKyAqIENvcHlyaWdodCAo
QykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKKworI2luY2x1ZGUgIlNpbXBsZUZv
bnREYXRhLmgiCisjaW5jbHVkZSA8cGFuZ28vcGFuZ28tZm9udC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBQYW5nb0dseXBoIHBhbmdvX2ZvbnRfZ2V0X2dseXBoKFBhbmdvRm9u
dCogZm9udCwgUGFuZ29Db250ZXh0KiBjb250ZXh0LCBndW5pY2hhciB3YykKK3sKKyAgICBQYW5n
b0dseXBoIHJlc3VsdCA9IDA7CisgICAgZ2NoYXIgYnVmZmVyWzddOworCisgICAgZ2ludCAgbGVu
Z3RoID0gZ191bmljaGFyX3RvX3V0Zjgod2MsIGJ1ZmZlcik7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwobGVuZ3RoLCAwKTsKKworICAgIEdMaXN0KiBpdGVtcyA9IHBhbmdvX2l0ZW1pemUoY29u
dGV4dCwgYnVmZmVyLCAwLCBsZW5ndGgsIE5VTEwsIE5VTEwpOworCisgICAgaWYgKGdfbGlzdF9s
ZW5ndGgoaXRlbXMpID09IDEpIHsKKyAgICAgICAgUGFuZ29JdGVtKiBpdGVtID0gcmVpbnRlcnBy
ZXRfY2FzdDxQYW5nb0l0ZW0qPihpdGVtcy0+ZGF0YSk7CisgICAgICAgIFBhbmdvRm9udCogdG1w
Rm9udCA9IGl0ZW0tPmFuYWx5c2lzLmZvbnQ7CisgICAgICAgIGl0ZW0tPmFuYWx5c2lzLmZvbnQg
PSBmb250OworCisgICAgICAgIFBhbmdvR2x5cGhTdHJpbmcqIGdseXBocyA9IHBhbmdvX2dseXBo
X3N0cmluZ19uZXcoKTsKKyAgICAgICAgcGFuZ29fc2hhcGUoYnVmZmVyLCBsZW5ndGgsICZpdGVt
LT5hbmFseXNpcywgZ2x5cGhzKTsKKworICAgICAgICBpdGVtLT5hbmFseXNpcy5mb250ID0gdG1w
Rm9udDsKKworICAgICAgICBpZiAoZ2x5cGhzLT5udW1fZ2x5cGhzID09IDEpCisgICAgICAgICAg
ICByZXN1bHQgPSBnbHlwaHMtPmdseXBoc1swXS5nbHlwaDsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZ193YXJuaW5nKCJkaWRuJ3QgZ2V0IDEgZ2x5cGggYnV0ICVkIiwgZ2x5cGhzLT5udW1f
Z2x5cGhzKTsKKworICAgICAgICBwYW5nb19nbHlwaF9zdHJpbmdfZnJlZShnbHlwaHMpOworICAg
IH0KKworICAgIGdfbGlzdF9mb3JlYWNoKGl0ZW1zLCAoR0Z1bmMpcGFuZ29faXRlbV9mcmVlLCBO
VUxMKTsKKyAgICBnX2xpc3RfZnJlZShpdGVtcyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Citib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwg
VUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udERhdGEpCit7CisgICAgLy8gVGhlIGJ1ZmZlckxlbmd0aCB3aWxsIGJlIGdyZWF0ZXIg
dGhhbiB0aGUgZ2x5cGggcGFnZSBzaXplIGlmIHRoZSBidWZmZXIgaGFzIFVuaWNvZGUgc3VwcGxl
bWVudGFyeSBjaGFyYWN0ZXJzLgorICAgIC8vIFdlIHdvbid0IHN1cHBvcnQgdGhpcyBmb3Igbm93
LgorICAgIGlmIChidWZmZXJMZW5ndGggPiBHbHlwaFBhZ2U6OnNpemUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmICghZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm1fZm9udCB8fCBm
b250RGF0YS0+cGxhdGZvcm1EYXRhKCkubV9mb250ID09IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29G
b250Kj4oLTEpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGhhdmVHbHlwaHMg
PSBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgR2x5cGggZ2x5cGggPSBwYW5nb19mb250X2dldF9nbHlwaChmb250RGF0YS0+cGxhdGZv
cm1EYXRhKCkubV9mb250LCBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkubV9jb250ZXh0LCBidWZm
ZXJbaV0pOworICAgICAgICBpZiAoIWdseXBoKQorICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9y
SW5kZXgob2Zmc2V0ICsgaSwgMCwgMCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2V0
R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGgsIGZvbnREYXRhKTsKKyAgICAgICAg
ICAgIGhhdmVHbHlwaHMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGhh
dmVHbHlwaHM7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28v
U2ltcGxlRm9udERhdGFQYW5nby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0YVBhbmdvLmNwcAkocmV2aXNpb24gNzAyODcpCShm
cm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhUGFuZ28uY3Bw
OjcwMjg3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0
YVBhbmdvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29t
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9u
dERhdGEuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNp
bmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNs
dWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybUluaXQoKQoreworICAgIGNhaXJvX2ZvbnRfZXh0ZW50c190IGZvbnRfZXh0ZW50
czsKKyAgICBjYWlyb190ZXh0X2V4dGVudHNfdCB0ZXh0X2V4dGVudHM7CisgICAgY2Fpcm9fc2Nh
bGVkX2ZvbnRfZXh0ZW50cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQsICZmb250X2V4dGVu
dHMpOworICAgIG1fYXNjZW50ID0gc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKGZvbnRfZXh0ZW50
cy5hc2NlbnQpKTsKKyAgICBtX2Rlc2NlbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoZm9u
dF9leHRlbnRzLmRlc2NlbnQpKTsKKyAgICBtX2xpbmVTcGFjaW5nID0gc3RhdGljX2Nhc3Q8aW50
Pihscm91bmRmKGZvbnRfZXh0ZW50cy5oZWlnaHQpKTsKKyAgICAvLyBUaGVyZSBzZWVtcyB0byBi
ZSBzb21lIHJvdW5kaW5nIGVycm9yIGluIGNhaXJvIChvciBpbiBob3cgd2UKKyAgICAvLyB1c2Ug
Y2Fpcm8pIHdpdGggc29tZSBmb250cywgbGlrZSBEZWphVnUgU2FucyBNb25vLCB3aGljaCBtYWtl
cworICAgIC8vIGNhaXJvIHJlcG9ydCBhIGhlaWdodCBzbWFsbGVyIHRoYW4gYXNjZW50ICsgZGVz
Y2VudCwgd2hpY2ggaXMKKyAgICAvLyB3cm9uZyBhbmQgY29uZnVzZXMgV2ViQ29yZSdzIGxheW91
dCBzeXN0ZW0uIFdvcmthcm91bmQgdGhpcworICAgIC8vIHdoaWxlIHdlIGZpZ3VyZSBvdXQgd2hh
dCdzIGdvaW5nIG9uLgorICAgIGlmIChtX2xpbmVTcGFjaW5nIDwgbV9hc2NlbnQgKyBtX2Rlc2Nl
bnQpCisgICAgICAgIG1fbGluZVNwYWNpbmcgPSBtX2FzY2VudCArIG1fZGVzY2VudDsKKyAgICBj
YWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250
LCAieCIsICZ0ZXh0X2V4dGVudHMpOworICAgIG1feEhlaWdodCA9IHRleHRfZXh0ZW50cy5oZWln
aHQ7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF9leHRlbnRzKG1fcGxhdGZvcm1EYXRhLm1f
c2NhbGVkRm9udCwgIiAiLCAmdGV4dF9leHRlbnRzKTsKKyAgICBtX3NwYWNlV2lkdGggPSAgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHRleHRfZXh0ZW50cy54X2FkdmFuY2UpOworICAgIG1fbGluZUdhcCA9
IG1fbGluZVNwYWNpbmcgLSBtX2FzY2VudCAtIG1fZGVzY2VudDsKKyAgICBtX3N5bnRoZXRpY0Jv
bGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkgPyAxLjBmIDogMC5mOwor
fQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQoreworICAg
IG1fYXZnQ2hhcldpZHRoID0gMC5mOworICAgIG1fbWF4Q2hhcldpZHRoID0gMC5mOworICAgIGlu
aXRDaGFyV2lkdGhzKCk7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJv
eSgpCit7CisgICAgZGVsZXRlIG1fc21hbGxDYXBzRm9udERhdGE7CisgICAgbV9zbWFsbENhcHNG
b250RGF0YSA9IDA7Cit9CisKK1NpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxD
YXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0
Cit7CisgICAgaWYgKCFtX3NtYWxsQ2Fwc0ZvbnREYXRhKSB7CisgICAgICAgIEZvbnREZXNjcmlw
dGlvbiBkZXNjID0gRm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIGRl
c2Muc2V0U3BlY2lmaWVkU2l6ZSgwLjcwZiAqIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUo
KSk7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhKGRlc2MsIGRlc2MuZmFt
aWx5KCkuZmFtaWx5KCkpOworICAgICAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gbmV3IFNpbXBs
ZUZvbnREYXRhKHBsYXRmb3JtRGF0YSk7CisgICAgfQorICAgIHJldHVybiBtX3NtYWxsQ2Fwc0Zv
bnREYXRhOworfQorCitib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Cit7CisgICAgYm9vbCByZXN1
bHQgPSB0cnVlOworCisgICAgUGFuZ29Db3ZlcmFnZSogY292ZXJhZ2UgPSBwYW5nb19mb250X2dl
dF9jb3ZlcmFnZShtX3BsYXRmb3JtRGF0YS5tX2ZvbnQsIHBhbmdvX2xhbmd1YWdlX2dldF9kZWZh
dWx0KCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAg
ICBpZiAoUEFOR09fQ09WRVJBR0VfTk9ORSA9PSBwYW5nb19jb3ZlcmFnZV9nZXQoY292ZXJhZ2Us
IGNoYXJhY3RlcnNbaV0pKSB7CisgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcGFuZ29fY292ZXJhZ2VfdW5yZWYo
Y292ZXJhZ2UpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBTaW1wbGVGb250RGF0
YTo6ZGV0ZXJtaW5lUGl0Y2goKQoreworICAgIGlmIChpc0N1c3RvbUZvbnQoKSkgeworICAgICAg
ICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gbV9wbGF0Zm9ybURhdGEuaXNGaXhlZFBpdGNoKCk7
Cit9CisKK0Zsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChH
bHlwaCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKK2Zsb2F0IFNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCk7CisKKyAgICBjYWlyb19nbHlw
aF90IGNnbHlwaCA9IHsgZ2x5cGgsIDAsIDAgfTsKKyAgICBjYWlyb190ZXh0X2V4dGVudHNfdCBl
eHRlbnRzOworICAgIGNhaXJvX3NjYWxlZF9mb250X2dseXBoX2V4dGVudHMobV9wbGF0Zm9ybURh
dGEubV9zY2FsZWRGb250LCAmY2dseXBoLCAxLCAmZXh0ZW50cyk7CisKKyAgICBmbG9hdCB3aWR0
aCA9IChmbG9hdCltX3NwYWNlV2lkdGg7CisgICAgaWYgKGNhaXJvX3NjYWxlZF9mb250X3N0YXR1
cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQpID09IENBSVJPX1NUQVRVU19TVUNDRVNTICYm
IGV4dGVudHMueF9hZHZhbmNlICE9IDApCisgICAgICAgIHdpZHRoID0gKGZsb2F0KWV4dGVudHMu
eF9hZHZhbmNlOworCisgICAgcmV0dXJuIHdpZHRoOyAgICAKK30KKworfQpJbmRleDogV2ViS2l0
L2VmbC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHJldmlz
aW9uIDcwMjk2KQorKysgV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNCBAQAorMjAxMC0xMC0yMiAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dU
S10gTW92ZSBmb250IHJlbGF0ZWQgZmlsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00ODExNgorCisgICAgICAgIEFkZCBuZXdseSBhZGRlZCBmb2xk
ZXIgdG8gaW5jbHVkZSBwYXRoLgorCisgICAgICAgICogQ01ha2VMaXN0c0VmbC50eHQ6CisKIDIw
MTAtMTAtMTkgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViS2l0L2VmbC9DTWFrZUxpc3RzRWZs
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0CShyZXZpc2lv
biA3MDI5NikKKysrIFdlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTExLDYgKzExLDcgQEAgTElTVChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMK
ICAgICAiJHtXRUJLSVRfRElSfS9lZmwvZXdrIgogICAgICIke1dFQktJVF9ESVJ9L2VmbC9XZWJD
b3JlU3VwcG9ydCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZWZsIgorICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZSIKICAgICAke0NhaXJvX0lOQ0xV
REVfRElSU30KICAgICAke0VDT1JFX1hfSU5DTFVERV9ESVJTfQogICAgICR7RURKRV9JTkNMVURF
X0RJUlN9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71552</attachid>
            <date>2010-10-22 05:23:29 -0700</date>
            <delta_ts>2010-10-24 02:06:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48116-20101022212348.patch</filename>
            <type>text/plain</type>
            <size>131352</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDMwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMTAtMTAtMjIgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1
bmcuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtHVEtdIE1vdmUgZm9udCByZWxhdGVkIGZpbGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgxMTYKKworICAgICAgICBNb3ZlIHBhbmdvIGFuZCBm
cmVldHlwZSByZWxhdGVkIGZpbGVzIHRvIHNoYXJlIG5vbi1HVEsrIHBsYXRmb3Jtcy4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGlzIGlzIHB1cmUgcmVmYWN0b3JpbmcuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzRWZsLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2FjaGVGcmVlVHlwZS5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udFBsYXRmb3JtRGF0YS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmg6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR2x5cGhQYWdlVHJlZU5vZGVD
YWlyby5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vU2lt
cGxlRm9udERhdGFDYWlyby5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZnJlZXR5cGU6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9Gb250Q2FjaGVGcmVlVHlwZS5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZnJlZXR5cGUvRm9udEN1c3RvbVBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcDogQ29waWVk
IGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZv
cm1EYXRhLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9u
dFBsYXRmb3JtRGF0YUZyZWVUeXBlLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJl
ZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0dseXBoUGFnZVRyZWVOb2RlRnJlZVR5
cGUuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dseXBo
UGFnZVRyZWVOb2RlQ2Fpcm8uY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0
eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL1NpbXBsZUZvbnREYXRhQ2Fpcm8uY3BwLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVQYW5nby5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURh
dGFQYW5nby5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Zv
bnRQbGF0Zm9ybURhdGFQYW5nby5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZVBhbmdvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ286IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDYWNoZVBhbmdvLmNwcDogQ29waWVkIGZyb20gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udENhY2hlUGFuZ28uY3BwLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHA6IENv
cGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21QbGF0Zm9y
bURhdGFQYW5nby5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBs
YXRmb3JtRGF0YS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
b250UGxhdGZvcm1EYXRhUGFuZ28uaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9wYW5n
by9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3BhbmdvL0dseXBoUGFnZVRyZWVOb2RlUGFuZ28uY3BwOiBDb3BpZWQgZnJv
bSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZVBhbmdvLmNw
cC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0YVBhbmdv
LmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9u
dERhdGFQYW5nby5jcHAuCisKIDIwMTAtMTAtMjIgIExlYW5kcm8gR3JhY2lhIEdpbCAgPGxlYW5k
cm9ncmFjaWFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKZXJlbXkgT3Jsb3cu
CkluZGV4OiBXZWJDb3JlL0NNYWtlTGlzdHNFZmwudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
Q01ha2VMaXN0c0VmbC50eHQJKHJldmlzaW9uIDcwMzAwKQorKysgV2ViQ29yZS9DTWFrZUxpc3Rz
RWZsLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTUgKzY1LDEyIEBAIExJU1QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogSUYgKFdURl9QTEFURk9STV9DQUlSTykKICAgTElTVChBUFBFTkQgV2Vi
Q29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVl
dHlwZSIKICAgKQogICBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9Db250ZXh0U2hhZG93Q2Fpcm8uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udENhY2hlRnJlZVR5cGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGEuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YUZyZWVU
eXBlLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dseXBoUGFnZVRyZWVOb2RlQ2Fp
cm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApAQCAtODIsOCArNzks
MTIgQEAgSUYgKFdURl9QTEFURk9STV9DQUlSTykKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJv
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8uY3Bw
Ci0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vU2ltcGxlRm9udERhdGFDYWlyby5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFGcmVlVHlw
ZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJl
ZVR5cGUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvR2x5cGhQYWdlVHJlZU5v
ZGVGcmVlVHlwZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250
RGF0YUZyZWVUeXBlLmNwcAogCiAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1h
Z2VEZWNvZGVyQ2Fpcm8uY3BwCiAgICkKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNzAzMDApCisrKyBX
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zNDc4LDcgKzM0NzgsNiBA
QCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRmxvYXRSZWN0Q2Fpcm8uY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyby5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Zv
bnRQbGF0Zm9ybURhdGEuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFk
aWVudENhaXJvLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaCBcCkBAIC0zNjg3LDI4ICszNjg2LDMw
IEBAIGVuZGlmICMgRU5EIEVOQUJMRV9GQVNUX01PQklMRV9TQ1JPTExJTkcKICMgRnJlZVR5cGUg
Zm9udCBiYWNrZW5kCiAjIC0tLQogaWYgVVNFX0ZSRUVUWVBFCi13ZWJjb3JlZ3RrX2NwcGZsYWdz
ICs9IC1EVVNFX0ZSRUVUWVBFPTEKK3dlYmNvcmVndGtfY3BwZmxhZ3MgKz0gLURVU0VfRlJFRVRZ
UEU9MSBcCisgICAgICAgICAgICAgICAgICAgICAgIC1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUKIHdlYmNvcmVndGtfc291cmNlcyArPSBcCi0JV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2FjaGVGcmVlVHlwZS5jcHAgXAotCVdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgXAotCVdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNw
cCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhRnJl
ZVR5cGUuaCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HbHlwaFBhZ2VUcmVl
Tm9kZUNhaXJvLmNwcCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9TaW1wbGVG
b250RGF0YUNhaXJvLmNwcAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9u
dENhY2hlRnJlZVR5cGUuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcCBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhLmggXAorCVdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvR2x5cGhQYWdlVHJlZU5vZGVGcmVlVHlwZS5j
cHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFG
cmVlVHlwZS5jcHAKIGVuZGlmICMgRU5EIFVTRV9GUkVFVFlQRQogCiAjIC0tLQogIyBQYW5nbyBm
b250IGJhY2tlbmQKICMgLS0tCiBpZiBVU0VfUEFOR08KLXdlYmNvcmVndGtfY3BwZmxhZ3MgKz0g
LURVU0VfUEFOR089MQord2ViY29yZWd0a19jcHBmbGFncyArPSAtRFVTRV9QQU5HTz0xIFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9wYW5nbwogd2ViY29yZWd0a19zb3VyY2VzICs9IFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9Gb250Q2FjaGVQYW5nby5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAgXAotCVdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5oIFwKLQlXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZVBhbmdvLmNwcCBcCi0JV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHAKKwlXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDYWNoZVBhbmdvLmNwcCBcCisJV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwIFwKKwlX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAg
XAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBsYXRmb3JtRGF0YS5oIFwK
KwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0dseXBoUGFnZVRyZWVOb2RlUGFuZ28u
Y3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1NpbXBsZUZvbnREYXRhUGFu
Z28uY3BwCiBlbmRpZiAjIEVORCBVU0VfUEFOR08KIAogIyAtLS0tCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAko
cmV2aXNpb24gNzAzMDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRD
YWNoZUZyZWVUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJp
Z2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRm9udENhY2hlLmgiCi0KLSNpbmNsdWRlICJDU3RyaW5nLmgiCi0jaW5jbHVkZSAiRm9udC5o
IgotI2luY2x1ZGUgIk93blB0ckNhaXJvLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1SZWZQdHJDYWly
by5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSA8Y2Fpcm8tZnQuaD4K
LSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgot
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9p
ZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCi17Ci0gICAgLy8gSXQncyBmaW5lIHRvIGNhbGwg
RmNJbml0IG11bHRpcGxlIHRpbWVzIHBlciB0aGUgZG9jdW1lbnRhdGlvbi4KLSAgICBpZiAoIUZj
SW5pdCgpKQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotY29uc3QgU2ltcGxl
Rm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQotewotICAgIEZjUmVz
dWx0IGZyZXN1bHQ7Ci0gICAgRm9udFBsYXRmb3JtRGF0YSogcHJpbSA9IGNvbnN0X2Nhc3Q8Rm9u
dFBsYXRmb3JtRGF0YSo+KCZmb250LnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpKTsKLQot
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBhcHBhcmVudGx5LiBXZSBhcmUg
bnVsbC1jaGVja2luZwotICAgIC8vIGZvciBub3cganVzdCB0byBhdm9pZCBjcmFzaGluZy4KLSAg
ICBpZiAoIXByaW0gfHwgIXByaW0tPm1fcGF0dGVybikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBpZiAoIXByaW0tPm1fZmFsbGJhY2tzKQotICAgICAgICBwcmltLT5tX2ZhbGxiYWNrcyA9IEZj
Rm9udFNvcnQoMCwgcHJpbS0+bV9wYXR0ZXJuLmdldCgpLCBGY1RydWUsIDAsICZmcmVzdWx0KTsK
LQotICAgIEZjRm9udFNldCogZnMgPSBwcmltLT5tX2ZhbGxiYWNrczsKLQotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgZnMtPm5mb250OyBpKyspIHsKLSAgICAgICAgUGxhdGZvcm1SZWZQdHI8RmNQ
YXR0ZXJuPiBmaW4gPSBhZG9wdFBsYXRmb3JtUmVmKEZjRm9udFJlbmRlclByZXBhcmUoMCwgcHJp
bS0+bV9wYXR0ZXJuLmdldCgpLCBmcy0+Zm9udHNbaV0pKTsKLSAgICAgICAgY2Fpcm9fZm9udF9m
YWNlX3QqIGZvbnRGYWNlID0gY2Fpcm9fZnRfZm9udF9mYWNlX2NyZWF0ZV9mb3JfcGF0dGVybihm
aW4uZ2V0KCkpOwotICAgICAgICBGb250UGxhdGZvcm1EYXRhIGFsdGVybmF0ZUZvbnQoZm9udEZh
Y2UsIGZvbnQuZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRQaXhlbFNpemUoKSwgZmFsc2UsIGZh
bHNlKTsKLSAgICAgICAgY2Fpcm9fZm9udF9mYWNlX2Rlc3Ryb3koZm9udEZhY2UpOwotICAgICAg
ICBhbHRlcm5hdGVGb250Lm1fcGF0dGVybiA9IGZpbjsKLSAgICAgICAgU2ltcGxlRm9udERhdGEq
IHNmZCA9IGdldENhY2hlZEZvbnREYXRhKCZhbHRlcm5hdGVGb250KTsKLSAgICAgICAgaWYgKHNm
ZC0+Y29udGFpbnNDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0aCkpCi0gICAgICAgICAgICBy
ZXR1cm4gc2ZkOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1TaW1wbGVGb250RGF0YSog
Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQot
ewotICAgIHJldHVybiAwOwotfQotCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0
UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KQotewotICAgIC8vIFdlIHdhbnQgdG8gcmV0dXJuIGEgZmFsbGJhY2sgZm9udCBoZXJlLCBvdGhl
cndpc2UgdGhlIGxvZ2ljIHByZXZlbnRpbmcgRm9udENvbmZpZwotICAgIC8vIG1hdGNoZXMgZm9y
IG5vbi1mYWxsYmFjayBmb250cyBtaWdodCByZXR1cm4gMC4gU2VlIGlzRmFsbGJhY2tGb250QWxs
b3dlZC4KLSAgICBzdGF0aWMgQXRvbWljU3RyaW5nIHRpbWVzU3RyKCJzZXJpZiIpOwotICAgIHJl
dHVybiBnZXRDYWNoZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHRpbWVzU3RyKTsKLX0KLQot
dm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5TmFtZSwgVmVjdG9yPHVuc2lnbmVkPiYgdHJhaXRzTWFza3MpCi17Ci19Ci0KLXN0YXRpYyBT
dHJpbmcgZ2V0RmFtaWx5TmFtZVN0cmluZ0Zyb21Gb250RGVzY3JpcHRpb25BbmRGYW1pbHkoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5KQotewotICAgIC8vIElmIHdlJ3JlIGNyZWF0aW5nIGEgZmFsbGJhY2sgZm9udCAoZS5n
LiAiLXdlYmtpdC1tb25vc3BhY2UiKSwgY29udmVydCB0aGUgbmFtZSBpbnRvCi0gICAgLy8gdGhl
IGZhbGxiYWNrIG5hbWUgKGxpa2UgIm1vbm9zcGFjZSIpIHRoYXQgZm9udGNvbmZpZyB1bmRlcnN0
YW5kcy4KLSAgICBpZiAoZmFtaWx5Lmxlbmd0aCgpICYmICFmYW1pbHkuc3RhcnRzV2l0aCgiLXdl
YmtpdC0iKSkKLSAgICAgICAgcmV0dXJuIGZhbWlseS5zdHJpbmcoKTsKLQotICAgIHN3aXRjaCAo
Zm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSkgewotICAgIGNhc2UgRm9udERlc2NyaXB0
aW9uOjpTdGFuZGFyZEZhbWlseToKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2VyaWZGYW1p
bHk6Ci0gICAgICAgIHJldHVybiAic2VyaWYiOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpT
YW5zU2VyaWZGYW1pbHk6Ci0gICAgICAgIHJldHVybiAic2Fucy1zZXJpZiI7Ci0gICAgY2FzZSBG
b250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseToKLSAgICAgICAgcmV0dXJuICJtb25vc3Bh
Y2UiOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpDdXJzaXZlRmFtaWx5OgotICAgICAgICBy
ZXR1cm4gImN1cnNpdmUiOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpGYW50YXN5RmFtaWx5
OgotICAgICAgICByZXR1cm4gImZhbnRhc3kiOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpO
b0ZhbWlseToKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gIiI7Ci0gICAgfQotfQotCi1G
b250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5KQotewotICAgIC8vIFRoZSBDU1MgZm9udCBtYXRjaGluZyBhbGdvcml0aG0gKGh0dHA6Ly93
d3cudzMub3JnL1RSL2NzczMtZm9udHMvI2ZvbnQtbWF0Y2hpbmctYWxnb3JpdGhtKQotICAgIC8v
IHNheXMgdGhhdCB3ZSBtdXN0IGZpbmQgYW4gZXhhY3QgbWF0Y2ggZm9yIGZvbnQgZmFtaWx5LCBz
bGFudCAoaXRhbGljIG9yIG9ibGlxdWUgY2FuIGJlIHVzZWQpCi0gICAgLy8gYW5kIGZvbnQgd2Vp
Z2h0ICh3ZSBvbmx5IG1hdGNoIGJvbGQvbm9uLWJvbGQgaGVyZSkuCi0gICAgUGxhdGZvcm1SZWZQ
dHI8RmNQYXR0ZXJuPiBwYXR0ZXJuID0gYWRvcHRQbGF0Zm9ybVJlZihGY1BhdHRlcm5DcmVhdGUo
KSk7Ci0gICAgU3RyaW5nIGZhbWlseU5hbWVTdHJpbmcoZ2V0RmFtaWx5TmFtZVN0cmluZ0Zyb21G
b250RGVzY3JpcHRpb25BbmRGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpKTsKLSAgICBp
ZiAoIUZjUGF0dGVybkFkZFN0cmluZyhwYXR0ZXJuLmdldCgpLCBGQ19GQU1JTFksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZhbWlseU5hbWVTdHJpbmcudXRmOCgpLmRhdGEoKSkp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGJvb2wgaXRhbGljID0gZm9udERlc2NyaXB0aW9u
Lml0YWxpYygpOwotICAgIGlmICghRmNQYXR0ZXJuQWRkSW50ZWdlcihwYXR0ZXJuLmdldCgpLCBG
Q19TTEFOVCwgaXRhbGljID8gRkNfU0xBTlRfSVRBTElDIDogRkNfU0xBTlRfUk9NQU4pKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBib29sIGJvbGQgPSBmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkg
Pj0gRm9udFdlaWdodEJvbGQ7Ci0gICAgaWYgKCFGY1BhdHRlcm5BZGRJbnRlZ2VyKHBhdHRlcm4u
Z2V0KCksIEZDX1dFSUdIVCwgYm9sZCA/IEZDX1dFSUdIVF9CT0xEIDogRkNfV0VJR0hUX05PUk1B
TCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghRmNQYXR0ZXJuQWRkRG91YmxlKHBhdHRl
cm4uZ2V0KCksIEZDX1BJWEVMX1NJWkUsIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6
ZSgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBUaGUgc3RyYXRlZ3kgaXMgb3JpZ2lu
YWxseSBmcm9tIFNraWEgKHNyYy9wb3J0cy9Ta0ZvbnRIb3N0X2ZvbnRjb25maWcuY3BwKToKLQot
ICAgIC8vIEFsbG93IEZvbnRjb25maWcgdG8gZG8gcHJlLW1hdGNoIHN1YnN0aXR1dGlvbi4gVW5s
ZXNzIHdlIGFyZSBhY2Nlc3NpbmcgYSAiZmFsbGJhY2siCi0gICAgLy8gZmFtaWx5IGxpa2UgInNh
bnMsIiB0aGlzIGlzIHRoZSBvbmx5IHRpbWUgd2UgYWxsb3cgRm9udGNvbmZpZyB0byBzdWJzdGl0
dXRlIG9uZQotICAgIC8vIGZhbWlseSBuYW1lIGZvciBhbm90aGVyIChpLmUuIGlmIHRoZSBmb250
cyBhcmUgYWxpYXNlZCB0byBlYWNoIG90aGVyKS4KLSAgICBGY0NvbmZpZ1N1YnN0aXR1dGUoMCwg
cGF0dGVybi5nZXQoKSwgRmNNYXRjaFBhdHRlcm4pOwotICAgIEZjRGVmYXVsdFN1YnN0aXR1dGUo
cGF0dGVybi5nZXQoKSk7Ci0KLSAgICBGY0NoYXI4KiBmb250Q29uZmlnRmFtaWx5TmFtZUFmdGVy
Q29uZmlndXJhdGlvbjsKLSAgICBGY1BhdHRlcm5HZXRTdHJpbmcocGF0dGVybi5nZXQoKSwgRkNf
RkFNSUxZLCAwLCAmZm9udENvbmZpZ0ZhbWlseU5hbWVBZnRlckNvbmZpZ3VyYXRpb24pOwotICAg
IFN0cmluZyBmYW1pbHlOYW1lQWZ0ZXJDb25maWd1cmF0aW9uID0gU3RyaW5nOjpmcm9tVVRGOChy
ZWludGVycHJldF9jYXN0PGNoYXIqPihmb250Q29uZmlnRmFtaWx5TmFtZUFmdGVyQ29uZmlndXJh
dGlvbikpOwotCi0gICAgRmNSZXN1bHQgZm9udENvbmZpZ1Jlc3VsdDsKLSAgICBQbGF0Zm9ybVJl
ZlB0cjxGY1BhdHRlcm4+IHJlc3VsdFBhdHRlcm4gPSBhZG9wdFBsYXRmb3JtUmVmKEZjRm9udE1h
dGNoKDAsIHBhdHRlcm4uZ2V0KCksICZmb250Q29uZmlnUmVzdWx0KSk7Ci0gICAgaWYgKCFyZXN1
bHRQYXR0ZXJuKSAvLyBObyBtYXRjaC4KLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBGY0NoYXI4
KiBmb250Q29uZmlnRmFtaWx5TmFtZUFmdGVyTWF0Y2hpbmc7Ci0gICAgRmNQYXR0ZXJuR2V0U3Ry
aW5nKHJlc3VsdFBhdHRlcm4uZ2V0KCksIEZDX0ZBTUlMWSwgMCwgJmZvbnRDb25maWdGYW1pbHlO
YW1lQWZ0ZXJNYXRjaGluZyk7Ci0gICAgU3RyaW5nIGZhbWlseU5hbWVBZnRlck1hdGNoaW5nID0g
U3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJldF9jYXN0PGNoYXIqPihmb250Q29uZmlnRmFtaWx5
TmFtZUFmdGVyTWF0Y2hpbmcpKTsKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5TmFt
ZUFmdGVyQ29uZmlndXJhdGlvbiwgZmFtaWx5TmFtZUFmdGVyTWF0Y2hpbmcpKQotICAgICAgICBy
ZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEocmVzdWx0UGF0dGVybi5nZXQoKSwgZm9udERlc2Ny
aXB0aW9uKTsKLQotICAgIC8vIElmIEZvbnRjb25maWcgZ2F2ZSB1c2UgYSBkaWZmZXJlbnQgZm9u
dCBmYW1pbHkgdGhhbiB0aGUgb25lIHdlIHJlcXVlc3RlZCwgd2Ugc2hvdWxkIGlnbm9yZSBpdAot
ICAgIC8vIGFuZCBhbGxvdyBXZWJDb3JlIHRvIGdpdmUgdXMgdGhlIG5leHQgZm9udCBvbiB0aGUg
Q1NTIGZhbGxiYWNrIGxpc3QuIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyBpZgotICAgIC8vIHRoaXMg
ZmFtaWx5IG5hbWUgaXMgYSBjb21tb25seSB1c2VkIGdlbmVyaWMgZmFtaWx5LgotICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShmYW1pbHlOYW1lU3RyaW5nLCAic2FucyIpIHx8IGVxdWFsSWdub3Jp
bmdDYXNlKGZhbWlseU5hbWVTdHJpbmcsICJzYW5zLXNlcmlmIikKLSAgICAgICAgfHwgZXF1YWxJ
Z25vcmluZ0Nhc2UoZmFtaWx5TmFtZVN0cmluZywgInNlcmlmIikgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UoZmFtaWx5TmFtZVN0cmluZywgIm1vbm9zcGFjZSIpCi0gICAgICAgIHx8IGVxdWFsSWdub3Jp
bmdDYXNlKGZhbWlseU5hbWVTdHJpbmcsICJmYW50YXN5IikgfHwgZXF1YWxJZ25vcmluZ0Nhc2Uo
ZmFtaWx5TmFtZVN0cmluZywgImN1cnNpdmUiKSkKLSAgICAgICAgcmV0dXJuIG5ldyBGb250UGxh
dGZvcm1EYXRhKHJlc3VsdFBhdHRlcm4uZ2V0KCksIGZvbnREZXNjcmlwdGlvbik7Ci0KLSAgICAv
LyBGb250Y29uZmlnIGRpZCBub3QgcmV0dXJuIGEgZ29vZCBtYXRjaC4KLSAgICByZXR1cm4gMDsK
LX0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiA3MDMwMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxp
YSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5oIgotCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIlNo
YXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgdm9pZCByZWxlYXNlQ3VzdG9tRm9udERh
dGEodm9pZCogZGF0YSkKLXsKLSAgICBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihkYXRhKS0+
ZGVyZWYoKTsKLX0KLQotRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Rm9udEN1c3RvbVBsYXRmb3Jt
RGF0YShGVF9GYWNlIGZyZWVUeXBlRmFjZSwgU2hhcmVkQnVmZmVyKiBidWZmZXIpCi0gICAgOiBt
X2ZyZWVUeXBlRmFjZShmcmVlVHlwZUZhY2UpCi0gICAgLCBtX2ZvbnRGYWNlKGNhaXJvX2Z0X2Zv
bnRfZmFjZV9jcmVhdGVfZm9yX2Z0X2ZhY2UoZnJlZVR5cGVGYWNlLCAwKSkKLXsKLSAgICAvLyBG
SVhNRSBTaG91bGQgd2UgYmUgc2V0dGluZyBzb21lIGhpbnRpbmcgb3B0aW9ucyBoZXJlPwotCi0g
ICAgYnVmZmVyLT5yZWYoKTsgLy8gVGhpcyBpcyBiYWxhbmNlZCBieSB0aGUgYnVmZmVyLT5kZXJl
ZigpIGluIHJlbGVhc2VDdXN0b21Gb250RGF0YS4KLSAgICBzdGF0aWMgY2Fpcm9fdXNlcl9kYXRh
X2tleV90IGJ1ZmZlcktleTsKLSAgICBjYWlyb19mb250X2ZhY2Vfc2V0X3VzZXJfZGF0YShtX2Zv
bnRGYWNlLCAmYnVmZmVyS2V5LCBidWZmZXIsCi0gICAgICAgICBzdGF0aWNfY2FzdDxjYWlyb19k
ZXN0cm95X2Z1bmNfdD4ocmVsZWFzZUN1c3RvbUZvbnREYXRhKSk7Ci0KLSAgICAvLyBDYWlybyBk
b2Vzbid0IGRvIEZyZWVUeXBlIHJlZmVyZW5jZSBjb3VudGluZywgc28gd2UgbmVlZCB0byBlbnN1
cmUgdGhhdCB3aGVuCi0gICAgLy8gdGhpcyBjYWlyb19mb250X2ZhY2VfdCBpcyBkZXN0cm95ZWQs
IGl0IGNsZWFucyB1cCB0aGUgRnJlZVR5cGUgZmFjZSBhcyB3ZWxsLgotICAgIHN0YXRpYyBjYWly
b191c2VyX2RhdGFfa2V5X3QgZnJlZVR5cGVGYWNlS2V5OwotICAgIGNhaXJvX2ZvbnRfZmFjZV9z
ZXRfdXNlcl9kYXRhKG1fZm9udEZhY2UsICZmcmVlVHlwZUZhY2VLZXksIGZyZWVUeXBlRmFjZSwK
LSAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2Fpcm9fZGVzdHJveV9mdW5jX3Q+KEZUX0RvbmVf
RmFjZSkpOwotfQotCi1Gb250Q3VzdG9tUGxhdGZvcm1EYXRhOjp+Rm9udEN1c3RvbVBsYXRmb3Jt
RGF0YSgpCi17Ci0gICAgLy8gbV9mcmVlVHlwZUZhY2Ugd2lsbCBiZSBkZXN0cm95ZWQgYWxvbmcg
d2l0aCBtX2ZvbnRGYWNlLiBTZWUgdGhlIGNvbnN0cnVjdG9yLgotICAgIGNhaXJvX2ZvbnRfZmFj
ZV9kZXN0cm95KG1fZm9udEZhY2UpOwotfQotCi1Gb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21Q
bGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEoaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBp
dGFsaWMsIEZvbnRPcmllbnRhdGlvbiwgRm9udFJlbmRlcmluZ01vZGUpCi17Ci0gICAgcmV0dXJu
IEZvbnRQbGF0Zm9ybURhdGEobV9mb250RmFjZSwgc2l6ZSwgYm9sZCwgaXRhbGljKTsKLX0KLQot
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YShTaGFy
ZWRCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBBU1NFUlRfQVJHKGJ1ZmZlciwgYnVmZmVyKTsKLQot
ICAgIHN0YXRpYyBGVF9MaWJyYXJ5IGxpYnJhcnkgPSAwOwotICAgIGlmICghbGlicmFyeSAmJiBG
VF9Jbml0X0ZyZWVUeXBlKCZsaWJyYXJ5KSkgewotICAgICAgICBsaWJyYXJ5ID0gMDsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgRlRfRmFjZSBmcmVlVHlwZUZhY2U7Ci0gICAgaWYg
KEZUX05ld19NZW1vcnlfRmFjZShsaWJyYXJ5LCByZWludGVycHJldF9jYXN0PGNvbnN0IEZUX0J5
dGUqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+c2l6ZSgpLCAwLCAmZnJlZVR5cGVGYWNlKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG5ldyBGb250Q3VzdG9tUGxhdGZvcm1EYXRh
KGZyZWVUeXBlRmFjZSwgYnVmZmVyKTsKLX0KLQotYm9vbCBGb250Q3VzdG9tUGxhdGZvcm1EYXRh
OjpzdXBwb3J0c0Zvcm1hdChjb25zdCBTdHJpbmcmIGZvcm1hdCkKLXsKLSAgICByZXR1cm4gZXF1
YWxJZ25vcmluZ0Nhc2UoZm9ybWF0LCAidHJ1ZXR5cGUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShm
b3JtYXQsICJvcGVudHlwZSIpOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGEuaAkocmV2aXNpb24gNzAzMDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEln
YWxpYSBTLkwuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBGb250UGxhdGZv
cm1EYXRhX2gKLSNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YV9oCi0KLSNpZiBkZWZpbmVkKFVTRV9G
UkVFVFlQRSkKLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuaCIKLSNlbGlmIGRl
ZmluZWQoVVNFX1BBTkdPKQotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGFQYW5nby5oIgotI2Vs
aWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5oIgot
I2VuZGlmCi0KLSNlbmRpZiAvLyBGb250UGxhdGZvcm1EYXRhX2gKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGFG
cmVlVHlwZS5jcHAJKHJldmlzaW9uIDcwMzAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDI2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWls
LmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5j
b20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgotICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIK
LQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9u
LmgiCi0jaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KLSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUg
PGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgotCi0jaWYgIVBMQVRGT1JNKEVGTCkgfHwgRU5BQkxF
KEdMSUJfU1VQUE9SVCkKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jYWlyb19zdWJwaXhlbF9vcmRlcl90IGNvbnZlcnRGb250Q29uZmlnU3Vi
cGl4ZWxPcmRlcihpbnQgZm9udENvbmZpZ09yZGVyKQotewotICAgIHN3aXRjaCAoZm9udENvbmZp
Z09yZGVyKSB7Ci0gICAgY2FzZSBGQ19SR0JBX1JHQjoKLSAgICAgICAgcmV0dXJuIENBSVJPX1NV
QlBJWEVMX09SREVSX1JHQjsKLSAgICBjYXNlIEZDX1JHQkFfQkdSOgotICAgICAgICByZXR1cm4g
Q0FJUk9fU1VCUElYRUxfT1JERVJfQkdSOwotICAgIGNhc2UgRkNfUkdCQV9WUkdCOgotICAgICAg
ICByZXR1cm4gQ0FJUk9fU1VCUElYRUxfT1JERVJfVlJHQjsKLSAgICBjYXNlIEZDX1JHQkFfVkJH
UjoKLSAgICAgICAgcmV0dXJuIENBSVJPX1NVQlBJWEVMX09SREVSX1ZCR1I7Ci0gICAgY2FzZSBG
Q19SR0JBX05PTkU6Ci0gICAgY2FzZSBGQ19SR0JBX1VOS05PV046Ci0gICAgICAgIHJldHVybiBD
QUlST19TVUJQSVhFTF9PUkRFUl9ERUZBVUxUOwotICAgIH0KLSAgICByZXR1cm4gQ0FJUk9fU1VC
UElYRUxfT1JERVJfREVGQVVMVDsKLX0KLQotY2Fpcm9faGludF9zdHlsZV90IGNvbnZlcnRGb250
Q29uZmlnSGludFN0eWxlKGludCBmb250Q29uZmlnU3R5bGUpCi17Ci0gICAgc3dpdGNoIChmb250
Q29uZmlnU3R5bGUpIHsKLSAgICBjYXNlIEZDX0hJTlRfTk9ORToKLSAgICAgICAgcmV0dXJuIENB
SVJPX0hJTlRfU1RZTEVfTk9ORTsKLSAgICBjYXNlIEZDX0hJTlRfU0xJR0hUOgotICAgICAgICBy
ZXR1cm4gQ0FJUk9fSElOVF9TVFlMRV9TTElHSFQ7Ci0gICAgY2FzZSBGQ19ISU5UX01FRElVTToK
LSAgICAgICAgcmV0dXJuIENBSVJPX0hJTlRfU1RZTEVfTUVESVVNOwotICAgIGNhc2UgRkNfSElO
VF9GVUxMOgotICAgICAgICByZXR1cm4gQ0FJUk9fSElOVF9TVFlMRV9GVUxMOwotICAgIH0KLSAg
ICByZXR1cm4gQ0FJUk9fSElOVF9TVFlMRV9OT05FOwotfQotCi12b2lkIHNldENhaXJvRm9udE9w
dGlvbnNGcm9tRm9udENvbmZpZ1BhdHRlcm4oY2Fpcm9fZm9udF9vcHRpb25zX3QqIG9wdGlvbnMs
IEZjUGF0dGVybiogcGF0dGVybikKLXsKLSAgICBGY0Jvb2wgYm9vbGVhblJlc3VsdDsKLSAgICBp
bnQgaW50ZWdlclJlc3VsdDsKLQotICAgIGlmIChGY1BhdHRlcm5HZXRJbnRlZ2VyKHBhdHRlcm4s
IEZDX1JHQkEsIDAsICZpbnRlZ2VyUmVzdWx0KSA9PSBGY1Jlc3VsdE1hdGNoKSB7Ci0gICAgICAg
IGNhaXJvX2ZvbnRfb3B0aW9uc19zZXRfc3VicGl4ZWxfb3JkZXIob3B0aW9ucywgY29udmVydEZv
bnRDb25maWdTdWJwaXhlbE9yZGVyKGludGVnZXJSZXN1bHQpKTsKLQotICAgICAgICAvLyBCYXNl
ZCBvbiB0aGUgbG9naWMgaW4gY2Fpcm8tZnQtZm9udC5jIGluIHRoZSBjYWlybyBzb3VyY2UsIGEg
Zm9udCB3aXRoCi0gICAgICAgIC8vIGEgc3VicGl4ZWwgb3JkZXIgaW1wbGllcyB0aGF0IGlzIHVz
ZXMgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgotICAgICAgICBpZiAoaW50ZWdlclJlc3VsdCAhPSBG
Q19SR0JBX05PTkUpCi0gICAgICAgICAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2FudGlhbGlh
cyhvcHRpb25zLCBDQUlST19BTlRJQUxJQVNfU1VCUElYRUwpOwotICAgIH0KLQotICAgIGlmIChG
Y1BhdHRlcm5HZXRCb29sKHBhdHRlcm4sIEZDX0FOVElBTElBUywgMCwgJmJvb2xlYW5SZXN1bHQp
ID09IEZjUmVzdWx0TWF0Y2gpIHsKLSAgICAgICAgLy8gT25seSBvdmVycmlkZSB0aGUgYW50aS1h
bGlhc2luZyBzZXR0aW5nIGlmIHdhcyBwcmV2aW91c2x5IHR1cm5lZCBvZmYuIE90aGVyd2lzZQot
ICAgICAgICAvLyB3ZSdsbCBvdmVycmlkZSB0aGUgcHJlZmVyZW5jZSB3aGljaCBkZWNpZGVzIGJl
dHdlZW4gZ3JheSBhbnRpLWFsaWFzaW5nIGFuZAotICAgICAgICAvLyBzdWJwaXhlbCBhbnRpLWFs
aWFzaW5nLgotICAgICAgICBpZiAoIWJvb2xlYW5SZXN1bHQpCi0gICAgICAgICAgICBjYWlyb19m
b250X29wdGlvbnNfc2V0X2FudGlhbGlhcyhvcHRpb25zLCBDQUlST19BTlRJQUxJQVNfTk9ORSk7
Ci0gICAgICAgIGVsc2UgaWYgKGNhaXJvX2ZvbnRfb3B0aW9uc19nZXRfYW50aWFsaWFzKG9wdGlv
bnMpID09IENBSVJPX0FOVElBTElBU19OT05FKQotICAgICAgICAgICAgY2Fpcm9fZm9udF9vcHRp
b25zX3NldF9hbnRpYWxpYXMob3B0aW9ucywgQ0FJUk9fQU5USUFMSUFTX0dSQVkpOwotICAgIH0K
LQotICAgIGlmIChGY1BhdHRlcm5HZXRJbnRlZ2VyKHBhdHRlcm4sIEZDX0hJTlRfU1RZTEUsIDAs
ICZpbnRlZ2VyUmVzdWx0KSA9PSBGY1Jlc3VsdE1hdGNoKQotICAgICAgICBjYWlyb19mb250X29w
dGlvbnNfc2V0X2hpbnRfc3R5bGUob3B0aW9ucywgY29udmVydEZvbnRDb25maWdIaW50U3R5bGUo
aW50ZWdlclJlc3VsdCkpOwotICAgIGlmIChGY1BhdHRlcm5HZXRCb29sKHBhdHRlcm4sIEZDX0hJ
TlRJTkcsIDAsICZib29sZWFuUmVzdWx0KSA9PSBGY1Jlc3VsdE1hdGNoICYmICFib29sZWFuUmVz
dWx0KQotICAgICAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2hpbnRfc3R5bGUob3B0aW9ucywg
Q0FJUk9fSElOVF9TVFlMRV9OT05FKTsKLX0KLQotc3RhdGljIGNvbnN0IGNhaXJvX2ZvbnRfb3B0
aW9uc190KiBnZXREZWZhdWx0Rm9udE9wdGlvbnMoKQotewotICAgIHN0YXRpYyBjb25zdCBjYWly
b19mb250X29wdGlvbnNfdCogb3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsK
LSNpZiBQTEFURk9STShHVEspIHx8IEVOQUJMRShHTElCX1NVUFBPUlQpCi0gICAgaWYgKEdka1Nj
cmVlbiogc2NyZWVuID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKSB7Ci0gICAgICAgIGNvbnN0
IGNhaXJvX2ZvbnRfb3B0aW9uc190KiBzY3JlZW5PcHRpb25zID0gZ2RrX3NjcmVlbl9nZXRfZm9u
dF9vcHRpb25zKHNjcmVlbik7Ci0gICAgICAgIGlmIChzY3JlZW5PcHRpb25zKQotICAgICAgICAg
ICAgb3B0aW9ucyA9IHNjcmVlbk9wdGlvbnM7Ci0gICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIG9w
dGlvbnM7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoRmNQYXR0ZXJu
KiBwYXR0ZXJuLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKLSAgICA6
IG1fcGF0dGVybihwYXR0ZXJuKQotICAgICwgbV9mYWxsYmFja3MoMCkKLSAgICAsIG1fc2l6ZShm
b250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkKLSAgICAsIG1fc3ludGhldGljQm9s
ZChmYWxzZSkKLSAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKLSAgICAsIG1fZml4ZWRX
aWR0aChmYWxzZSkKLXsKLSAgICBQbGF0Zm9ybVJlZlB0cjxjYWlyb19mb250X2ZhY2VfdD4gZm9u
dEZhY2UgPSBhZG9wdFBsYXRmb3JtUmVmKGNhaXJvX2Z0X2ZvbnRfZmFjZV9jcmVhdGVfZm9yX3Bh
dHRlcm4obV9wYXR0ZXJuLmdldCgpKSk7Ci0gICAgaW5pdGlhbGl6ZVdpdGhGb250RmFjZShmb250
RmFjZS5nZXQoKSk7Ci0KLSAgICBpbnQgc3BhY2luZzsKLSAgICBpZiAoRmNQYXR0ZXJuR2V0SW50
ZWdlcihwYXR0ZXJuLCBGQ19TUEFDSU5HLCAwLCAmc3BhY2luZykgPT0gRmNSZXN1bHRNYXRjaCAm
JiBzcGFjaW5nID09IEZDX01PTk8pCi0gICAgICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7Ci0KLSAg
ICBpZiAoZm9udERlc2NyaXB0aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHRCb2xkKSB7Ci0gICAg
ICAgIC8vIFRoZSBGQ19FTUJPTERFTiBwcm9wZXJ0eSBpbnN0cnVjdHMgdXMgdG8gZmFrZSB0aGUg
Ym9sZG5lc3Mgb2YgdGhlIGZvbnQuCi0gICAgICAgIEZjQm9vbCBmb250Q29uZmlnRW1ib2xkZW47
Ci0gICAgICAgIGlmIChGY1BhdHRlcm5HZXRCb29sKHBhdHRlcm4sIEZDX0VNQk9MREVOLCAwLCAm
Zm9udENvbmZpZ0VtYm9sZGVuKSA9PSBGY1Jlc3VsdE1hdGNoKQotICAgICAgICAgICAgbV9zeW50
aGV0aWNCb2xkID0gZm9udENvbmZpZ0VtYm9sZGVuOwotICAgIH0KLX0KLQotRm9udFBsYXRmb3Jt
RGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGlj
KQotICAgIDogbV9mYWxsYmFja3MoMCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9zeW50
aGV0aWNCb2xkKGJvbGQpCi0gICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoaXRhbGljKQotICAgICwg
bV9maXhlZFdpZHRoKGZhbHNlKQotewotICAgIC8vIFdlIGNhbm5vdCBjcmVhdGUgYSBzY2FsZWQg
Zm9udCBoZXJlLgotfQotCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNhaXJv
X2ZvbnRfZmFjZV90KiBmb250RmFjZSwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxp
YykKLSAgICA6IG1fZmFsbGJhY2tzKDApCi0gICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fc3lu
dGhldGljQm9sZChib2xkKQotICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGl0YWxpYykKLXsKLSAg
ICBpbml0aWFsaXplV2l0aEZvbnRGYWNlKGZvbnRGYWNlKTsKLQotICAgIEZUX0ZhY2UgZm9udENv
bmZpZ0ZhY2UgPSBjYWlyb19mdF9zY2FsZWRfZm9udF9sb2NrX2ZhY2UobV9zY2FsZWRGb250Lmdl
dCgpKTsKLSAgICBpZiAoZm9udENvbmZpZ0ZhY2UpIHsKLSAgICAgICAgbV9maXhlZFdpZHRoID0g
Zm9udENvbmZpZ0ZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfRklYRURfV0lEVEg7Ci0g
ICAgICAgIGNhaXJvX2Z0X3NjYWxlZF9mb250X3VubG9ja19mYWNlKG1fc2NhbGVkRm9udC5nZXQo
KSk7Ci0gICAgfQotfQotCi1Gb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpvcGVy
YXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpCi17Ci0gICAgLy8gQ2hlY2sgZm9y
IHNlbGYtYXNzaWdubWVudC4KLSAgICBpZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgIHJldHVy
biAqdGhpczsKLQotICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKLSAgICBtX3N5bnRoZXRpY0Jv
bGQgPSBvdGhlci5tX3N5bnRoZXRpY0JvbGQ7Ci0gICAgbV9zeW50aGV0aWNPYmxpcXVlID0gb3Ro
ZXIubV9zeW50aGV0aWNPYmxpcXVlOwotICAgIG1fZml4ZWRXaWR0aCA9IG90aGVyLm1fZml4ZWRX
aWR0aDsKLSAgICBtX3NjYWxlZEZvbnQgPSBvdGhlci5tX3NjYWxlZEZvbnQ7Ci0gICAgbV9wYXR0
ZXJuID0gb3RoZXIubV9wYXR0ZXJuOwotCi0gICAgaWYgKG1fZmFsbGJhY2tzKSB7Ci0gICAgICAg
IEZjRm9udFNldERlc3Ryb3kobV9mYWxsYmFja3MpOwotICAgICAgICAvLyBUaGlzIHdpbGwgYmUg
cmUtY3JlYXRlZCBvbiBkZW1hbmQuCi0gICAgICAgIG1fZmFsbGJhY2tzID0gMDsKLSAgICB9Ci0K
LSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpCi0gICAgOiBtX2ZhbGxiYWNrcygwKQot
ewotICAgICp0aGlzID0gb3RoZXI7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIsIGZsb2F0IHNpemUpCi17Ci0gICAg
KnRoaXMgPSBvdGhlcjsKLQotICAgIC8vIFdlIG5lZWQgdG8gcmVpbml0aWFsaXplIHRoZSBpbnN0
YW5jZSwgYmVjYXVzZSB0aGUgZGlmZmVyZW5jZSBpbiBzaXplIAotICAgIC8vIG5lY2Vzc2l0YXRl
cyBhIG5ldyBzY2FsZWQgZm9udCBpbnN0YW5jZS4KLSAgICBtX3NpemUgPSBzaXplOwotICAgIGlu
aXRpYWxpemVXaXRoRm9udEZhY2UoY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2ZvbnRfZmFjZShtX3Nj
YWxlZEZvbnQuZ2V0KCkpKTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURh
dGEoKQotewotICAgIGlmIChtX2ZhbGxiYWNrcykgewotICAgICAgICBGY0ZvbnRTZXREZXN0cm95
KG1fZmFsbGJhY2tzKTsKLSAgICAgICAgbV9mYWxsYmFja3MgPSAwOwotICAgIH0KLX0KLQotYm9v
bCBGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKQotewotICAgIHJldHVybiBtX2ZpeGVk
V2lkdGg7Ci19Ci0KLWJvb2wgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PShjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKLXsKLSAgICBpZiAobV9wYXR0ZXJuID09IG90aGVy
Lm1fcGF0dGVybikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFtX3BhdHRlcm4gfHwg
bV9wYXR0ZXJuLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgfHwgIW90aGVyLm1fcGF0dGVybiB8
fCBvdGhlci5tX3BhdHRlcm4uaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiBGY1BhdHRlcm5FcXVhbChtX3BhdHRlcm4uZ2V0KCksIG90
aGVyLm1fcGF0dGVybi5nZXQoKSk7Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi1TdHJpbmcgRm9udFBs
YXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmcoKTsK
LX0KLSNlbmRpZgotCi12b2lkIEZvbnRQbGF0Zm9ybURhdGE6OmluaXRpYWxpemVXaXRoRm9udEZh
Y2UoY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlKQotewotICAgIGNhaXJvX2ZvbnRfb3B0aW9u
c190KiBvcHRpb25zID0gY2Fpcm9fZm9udF9vcHRpb25zX2NvcHkoZ2V0RGVmYXVsdEZvbnRPcHRp
b25zKCkpOwotCi0gICAgY2Fpcm9fbWF0cml4X3QgY3RtOwotICAgIGNhaXJvX21hdHJpeF9pbml0
X2lkZW50aXR5KCZjdG0pOwotCi0gICAgY2Fpcm9fbWF0cml4X3QgZm9udE1hdHJpeDsKLSAgICBp
ZiAoIW1fcGF0dGVybikKLSAgICAgICAgY2Fpcm9fbWF0cml4X2luaXRfc2NhbGUoJmZvbnRNYXRy
aXgsIG1fc2l6ZSwgbV9zaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgc2V0Q2Fpcm9Gb250T3B0
aW9uc0Zyb21Gb250Q29uZmlnUGF0dGVybihvcHRpb25zLCBtX3BhdHRlcm4uZ2V0KCkpOwotCi0g
ICAgICAgIC8vIEZvbnRDb25maWcgbWF5IHJldHVybiBhIGxpc3Qgb2YgdHJhbnNmb3JtYXRpb24g
bWF0cmljZXMgd2l0aCB0aGUgcGF0dGVybiwgZm9yIGluc3RhbmNlLAotICAgICAgICAvLyBmb3Ig
Zm9udHMgdGhhdCBhcmUgb2JsaXF1ZS4gV2UgdXNlIHRoYXQgdG8gaW5pdGlhbGl6ZSB0aGUgY2Fp
cm8gZm9udCBtYXRyaXguCi0gICAgICAgIEZjTWF0cml4IGZvbnRDb25maWdNYXRyaXgsICp0ZW1w
Rm9udENvbmZpZ01hdHJpeDsKLSAgICAgICAgRmNNYXRyaXhJbml0KCZmb250Q29uZmlnTWF0cml4
KTsKLQotICAgICAgICAvLyBUaGVzZSBtYXRyaWNlcyBtYXkgYmUgc3RhY2tlZCBpbiB0aGUgcGF0
dGVybiwgc28gaXQncyBvdXIgam9iIHRvIGdldCB0aGVtIGFsbCBhbmQgbXVsdGlwbHkgdGhlbS4K
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IEZjUGF0dGVybkdldE1hdHJpeChtX3BhdHRlcm4uZ2V0
KCksIEZDX01BVFJJWCwgaSwgJnRlbXBGb250Q29uZmlnTWF0cml4KSA9PSBGY1Jlc3VsdE1hdGNo
OyBpKyspCi0gICAgICAgICAgICBGY01hdHJpeE11bHRpcGx5KCZmb250Q29uZmlnTWF0cml4LCAm
Zm9udENvbmZpZ01hdHJpeCwgdGVtcEZvbnRDb25maWdNYXRyaXgpOwotICAgICAgICBjYWlyb19t
YXRyaXhfaW5pdCgmZm9udE1hdHJpeCwgZm9udENvbmZpZ01hdHJpeC54eCwgLWZvbnRDb25maWdN
YXRyaXgueXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC1mb250Q29uZmlnTWF0cml4Lnh5
LCBmb250Q29uZmlnTWF0cml4Lnl5LCAwLCAwKTsKLQotICAgICAgICAvLyBUaGUgbWF0cml4IGZy
b20gRm9udENvbmZpZyBkb2VzIG5vdCBpbmNsdWRlIHRoZSBzY2FsZS4KLSAgICAgICAgY2Fpcm9f
bWF0cml4X3NjYWxlKCZmb250TWF0cml4LCBtX3NpemUsIG1fc2l6ZSk7Ci0gICAgfQotCi0gICAg
bV9zY2FsZWRGb250ID0gYWRvcHRQbGF0Zm9ybVJlZihjYWlyb19zY2FsZWRfZm9udF9jcmVhdGUo
Zm9udEZhY2UsICZmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKSk7Ci0gICAgY2Fpcm9fZm9udF9v
cHRpb25zX2Rlc3Ryb3kob3B0aW9ucyk7Ci19Ci0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlw
ZS5oCShyZXZpc2lvbiA3MDMwMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLgotICog
Q29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAq
IENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJp
Z2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgotICogQ29weXJp
Z2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lm
bmRlZiBGb250UGxhdGZvcm1EYXRhRnJlZVR5cGVfaAotI2RlZmluZSBGb250UGxhdGZvcm1EYXRh
RnJlZVR5cGVfaAotCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiR2x5
cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJIYXNoRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1SZWZQdHJDYWlyby5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLXR5cGVkZWYgc3Ry
dWN0IF9GY0ZvbnRTZXQgRmNGb250U2V0OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IEZvbnRQbGF0Zm9ybURhdGEgewotcHVibGljOgotICAgIEZvbnRQbGF0Zm9ybURhdGEoV1RGOjpI
YXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fZmFsbGJhY2tzKDApCi0gICAg
ICAgICwgbV9zaXplKDApCi0gICAgICAgICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQotICAgICAg
ICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKLSAgICAgICAgLCBtX3NjYWxlZEZvbnQoV1RG
OjpIYXNoVGFibGVEZWxldGVkVmFsdWUpCi0gICAgICAgIHsgfQotCi0gICAgRm9udFBsYXRmb3Jt
RGF0YSgpCi0gICAgICAgIDogbV9mYWxsYmFja3MoMCkKLSAgICAgICAgLCBtX3NpemUoMCkKLSAg
ICAgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCi0gICAgICAgICwgbV9zeW50aGV0aWNPYmxp
cXVlKGZhbHNlKQotICAgICAgICB7IH0KLQotICAgIEZvbnRQbGF0Zm9ybURhdGEoRmNQYXR0ZXJu
KiwgY29uc3QgRm9udERlc2NyaXB0aW9uJik7Ci0gICAgRm9udFBsYXRmb3JtRGF0YShjYWlyb19m
b250X2ZhY2VfdCogZm9udEZhY2UsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMp
OwotICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxp
Yyk7Ci0gICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci0gICAg
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgZmxvYXQgc2l6ZSk7Ci0K
LSAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOwotCi0gICAgYm9vbCBpc0ZpeGVkUGl0Y2goKTsKLSAg
ICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgdm9pZCBzZXRTaXpl
KGZsb2F0IHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQotICAgIGJvb2wgc3ludGhldGljQm9sZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9sZDsgfQotICAgIGJvb2wgc3ludGhldGljT2Js
aXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljT2JsaXF1ZTsgfQotCi0gICAgY2Fpcm9f
c2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkRm9udC5n
ZXQoKTsgfQotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gUHRySGFzaDxjYWlyb19zY2FsZWRfZm9udF90Kj46Omhhc2gobV9zY2FsZWRGb250LmdldCgp
KTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYp
IGNvbnN0OwotICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9yPShjb25zdCBGb250UGxhdGZv
cm1EYXRhJik7Ci0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbV9zY2FsZWRGb250LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7
Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0
OwotI2VuZGlmCi0KLSAgICBQbGF0Zm9ybVJlZlB0cjxGY1BhdHRlcm4+IG1fcGF0dGVybjsKLSAg
ICBGY0ZvbnRTZXQqIG1fZmFsbGJhY2tzOwotICAgIGZsb2F0IG1fc2l6ZTsKLSAgICBib29sIG1f
c3ludGhldGljQm9sZDsKLSAgICBib29sIG1fc3ludGhldGljT2JsaXF1ZTsKLSAgICBib29sIG1f
Zml4ZWRXaWR0aDsKLSAgICBQbGF0Zm9ybVJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90PiBtX3Nj
YWxlZEZvbnQ7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBpbml0aWFsaXplV2l0aEZvbnRGYWNlKGNh
aXJvX2ZvbnRfZmFjZV90Kik7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBGb250UGxhdGZvcm1EYXRh
RnJlZVR5cGVfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HbHlwaFBh
Z2VUcmVlTm9kZUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm8uY3BwCShyZXZpc2lvbiA3MDMwMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR2x5cGhQYWdlVHJlZU5vZGVDYWlyby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0
IChDKSAyMDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKLQotI2luY2x1ZGUgIlNp
bXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KLSNpbmNsdWRlIDxjYWlyby5o
PgotI2luY2x1ZGUgPGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWJvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSkKLXsKLSAgICAvLyBUaGUgYnVmZmVyTGVuZ3RoIHdpbGwgYmUgZ3Jl
YXRlciB0aGFuIHRoZSBnbHlwaCBwYWdlIHNpemUgaWYgdGhlIGJ1ZmZlciBoYXMgVW5pY29kZSBz
dXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMuCi0gICAgLy8gV2Ugd29uJ3Qgc3VwcG9ydCB0aGlzIGZv
ciBub3cuCi0gICAgaWYgKGJ1ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgRlRfRmFjZSBmYWNlID0gY2Fpcm9fZnRfc2NhbGVkX2ZvbnRf
bG9ja19mYWNlKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5tX3NjYWxlZEZvbnQuZ2V0KCkpOwot
ICAgIGlmICghZmFjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBoYXZlR2x5
cGhzID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgIEdseXBoIGdseXBoID0gRmNGcmVlVHlwZUNoYXJJbmRleChmYWNlLCBidWZmZXJb
aV0pOwotICAgICAgICBpZiAoIWdseXBoKQotICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5k
ZXgob2Zmc2V0ICsgaSwgMCwgMCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgc2V0R2x5
cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGgsIGZvbnREYXRhKTsKLSAgICAgICAgICAg
IGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2Fpcm9fZnRfc2Nh
bGVkX2ZvbnRfdW5sb2NrX2ZhY2UoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm1fc2NhbGVkRm9u
dC5nZXQoKSk7Ci0KLSAgICByZXR1cm4gaGF2ZUdseXBoczsKLX0KLQotfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9TaW1wbGVGb250RGF0YUNhaXJvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1NpbXBsZUZvbnREYXRhQ2Fp
cm8uY3BwCShyZXZpc2lvbiA3MDMwMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vU2ltcGxlRm9udERhdGFDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTM5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFscCBUb2tlciA8
YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNs
dWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udERlc2Ny
aXB0aW9uLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlIDxjYWlyby1mdC5o
PgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Zm9udGNvbmZpZy9mY2ZyZWV0eXBlLmg+
Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12
b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQotewotICAgIGNhaXJvX2ZvbnRfZXh0
ZW50c190IGZvbnRfZXh0ZW50czsKLSAgICBjYWlyb190ZXh0X2V4dGVudHNfdCB0ZXh0X2V4dGVu
dHM7Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZXh0ZW50cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxl
ZEZvbnQuZ2V0KCksICZmb250X2V4dGVudHMpOwotICAgIG1fYXNjZW50ID0gc3RhdGljX2Nhc3Q8
aW50Pihscm91bmRmKGZvbnRfZXh0ZW50cy5hc2NlbnQpKTsKLSAgICBtX2Rlc2NlbnQgPSBzdGF0
aWNfY2FzdDxpbnQ+KGxyb3VuZGYoZm9udF9leHRlbnRzLmRlc2NlbnQpKTsKLSAgICBtX2xpbmVT
cGFjaW5nID0gc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKGZvbnRfZXh0ZW50cy5oZWlnaHQpKTsK
LSAgICAvLyBUaGVyZSBzZWVtcyB0byBiZSBzb21lIHJvdW5kaW5nIGVycm9yIGluIGNhaXJvIChv
ciBpbiBob3cgd2UKLSAgICAvLyB1c2UgY2Fpcm8pIHdpdGggc29tZSBmb250cywgbGlrZSBEZWph
VnUgU2FucyBNb25vLCB3aGljaCBtYWtlcwotICAgIC8vIGNhaXJvIHJlcG9ydCBhIGhlaWdodCBz
bWFsbGVyIHRoYW4gYXNjZW50ICsgZGVzY2VudCwgd2hpY2ggaXMKLSAgICAvLyB3cm9uZyBhbmQg
Y29uZnVzZXMgV2ViQ29yZSdzIGxheW91dCBzeXN0ZW0uIFdvcmthcm91bmQgdGhpcwotICAgIC8v
IHdoaWxlIHdlIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uLgotICAgIGlmIChtX2xpbmVTcGFj
aW5nIDwgbV9hc2NlbnQgKyBtX2Rlc2NlbnQpCi0gICAgICAgIG1fbGluZVNwYWNpbmcgPSBtX2Fz
Y2VudCArIG1fZGVzY2VudDsKLSAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMobV9w
bGF0Zm9ybURhdGEubV9zY2FsZWRGb250LmdldCgpLCAieCIsICZ0ZXh0X2V4dGVudHMpOwotICAg
IG1feEhlaWdodCA9IHRleHRfZXh0ZW50cy5oZWlnaHQ7Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRf
dGV4dF9leHRlbnRzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udC5nZXQoKSwgIiAiLCAmdGV4
dF9leHRlbnRzKTsKLSAgICBtX3NwYWNlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4odGV4dF9l
eHRlbnRzLnhfYWR2YW5jZSk7Ci0gICAgbV9saW5lR2FwID0gbV9saW5lU3BhY2luZyAtIG1fYXNj
ZW50IC0gbV9kZXNjZW50OwotICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1E
YXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCi17Ci0gICAgbV9hdmdDaGFyV2lkdGggPSAwLmY7
Ci0gICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7Ci0gICAgaW5pdENoYXJXaWR0aHMoKTsKLX0KLQot
dm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLSAgICBkZWxldGUgbV9z
bWFsbENhcHNGb250RGF0YTsKLSAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gMDsKLX0KLQotU2lt
cGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSSB0
aGluayB3ZSB3YW50IHRvIGFzayBGb250Q29uZmlnIGZvciB0aGUgcmlnaHQgZm9udCBhZ2Fpbi4K
LSAgICBpZiAoIW1fc21hbGxDYXBzRm9udERhdGEpCi0gICAgICAgIG1fc21hbGxDYXBzRm9udERh
dGEgPSBuZXcgU2ltcGxlRm9udERhdGEoCi0gICAgICAgICAgICBGb250UGxhdGZvcm1EYXRhKGNh
aXJvX3NjYWxlZF9mb250X2dldF9mb250X2ZhY2UobV9wbGF0Zm9ybURhdGEuc2NhbGVkRm9udCgp
KSwKLSAgICAgICAgICAgIDAuNzBmICogZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpLCBt
X3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCksIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY09i
bGlxdWUoKSkpOwotCi0gICAgcmV0dXJuIG1fc21hbGxDYXBzRm9udERhdGE7Ci19Ci0KLWJvb2wg
U2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgaW50IGxlbmd0aCkgY29uc3QKLXsKLSAgICBGVF9GYWNlIGZhY2UgPSBjYWlyb19mdF9zY2Fs
ZWRfZm9udF9sb2NrX2ZhY2UobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LmdldCgpKTsKLQot
ICAgIGlmICghZmFjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoRmNGcmVlVHlwZUNoYXJJbmRleChm
YWNlLCBjaGFyYWN0ZXJzW2ldKSA9PSAwKSB7Ci0gICAgICAgICAgICBjYWlyb19mdF9zY2FsZWRf
Zm9udF91bmxvY2tfZmFjZShtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQuZ2V0KCkpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2Fpcm9fZnRf
c2NhbGVkX2ZvbnRfdW5sb2NrX2ZhY2UobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LmdldCgp
KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1p
bmVQaXRjaCgpCi17Ci0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IG1fcGxhdGZvcm1EYXRhLmlz
Rml4ZWRQaXRjaCgpOwotfQotCi1GbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91
bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotfQot
Ci1mbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAotewotICAgIEFTU0VSVChtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQpOwotCi0g
ICAgY2Fpcm9fZ2x5cGhfdCBjZ2x5cGggPSB7IGdseXBoLCAwLCAwIH07Ci0gICAgY2Fpcm9fdGV4
dF9leHRlbnRzX3QgZXh0ZW50czsKLSAgICBjYWlyb19zY2FsZWRfZm9udF9nbHlwaF9leHRlbnRz
KG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udC5nZXQoKSwgJmNnbHlwaCwgMSwgJmV4dGVudHMp
OwotCi0gICAgZmxvYXQgdyA9IChmbG9hdCltX3NwYWNlV2lkdGg7Ci0gICAgaWYgKGNhaXJvX3Nj
YWxlZF9mb250X3N0YXR1cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQuZ2V0KCkpID09IENB
SVJPX1NUQVRVU19TVUNDRVNTICYmIGV4dGVudHMueF9hZHZhbmNlKQotICAgICAgICB3ID0gKGZs
b2F0KWV4dGVudHMueF9hZHZhbmNlOwotCi0gICAgcmV0dXJuIHc7ICAgIAotfQotCi19CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRD
YWNoZUZyZWVUeXBlLmNwcAkocmV2aXNpb24gNzAyODcpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udENhY2hlRnJlZVR5cGUuY3BwOjcwMjg3KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRv
a2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorCisjaW5jbHVk
ZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJPd25QdHJDYWlyby5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtUmVmUHRyQ2Fpcm8uaCIKKyNpbmNsdWRlICJTaW1wbGVGb250
RGF0YS5oIgorI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNs
dWRlIDxmb250Y29uZmlnL2ZjZnJlZXR5cGUuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQo
KQoreworICAgIC8vIEl0J3MgZmluZSB0byBjYWxsIEZjSW5pdCBtdWx0aXBsZSB0aW1lcyBwZXIg
dGhlIGRvY3VtZW50YXRpb24uCisgICAgaWYgKCFGY0luaXQoKSkKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK2NvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZv
bnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgaW50IGxlbmd0aCkKK3sKKyAgICBGY1Jlc3VsdCBmcmVzdWx0OworICAgIEZvbnRQbGF0
Zm9ybURhdGEqIHByaW0gPSBjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPigmZm9udC5wcmlt
YXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
bm90IGhhcHBlbiwgYXBwYXJlbnRseS4gV2UgYXJlIG51bGwtY2hlY2tpbmcKKyAgICAvLyBmb3Ig
bm93IGp1c3QgdG8gYXZvaWQgY3Jhc2hpbmcuCisgICAgaWYgKCFwcmltIHx8ICFwcmltLT5tX3Bh
dHRlcm4pCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFwcmltLT5tX2ZhbGxiYWNrcykK
KyAgICAgICAgcHJpbS0+bV9mYWxsYmFja3MgPSBGY0ZvbnRTb3J0KDAsIHByaW0tPm1fcGF0dGVy
bi5nZXQoKSwgRmNUcnVlLCAwLCAmZnJlc3VsdCk7CisKKyAgICBGY0ZvbnRTZXQqIGZzID0gcHJp
bS0+bV9mYWxsYmFja3M7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZzLT5uZm9udDsgaSsr
KSB7CisgICAgICAgIFBsYXRmb3JtUmVmUHRyPEZjUGF0dGVybj4gZmluID0gYWRvcHRQbGF0Zm9y
bVJlZihGY0ZvbnRSZW5kZXJQcmVwYXJlKDAsIHByaW0tPm1fcGF0dGVybi5nZXQoKSwgZnMtPmZv
bnRzW2ldKSk7CisgICAgICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSA9IGNhaXJvX2Z0
X2ZvbnRfZmFjZV9jcmVhdGVfZm9yX3BhdHRlcm4oZmluLmdldCgpKTsKKyAgICAgICAgRm9udFBs
YXRmb3JtRGF0YSBhbHRlcm5hdGVGb250KGZvbnRGYWNlLCBmb250LmZvbnREZXNjcmlwdGlvbigp
LmNvbXB1dGVkUGl4ZWxTaXplKCksIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIGNhaXJvX2ZvbnRf
ZmFjZV9kZXN0cm95KGZvbnRGYWNlKTsKKyAgICAgICAgYWx0ZXJuYXRlRm9udC5tX3BhdHRlcm4g
PSBmaW47CisgICAgICAgIFNpbXBsZUZvbnREYXRhKiBzZmQgPSBnZXRDYWNoZWRGb250RGF0YSgm
YWx0ZXJuYXRlRm9udCk7CisgICAgICAgIGlmIChzZmQtPmNvbnRhaW5zQ2hhcmFjdGVycyhjaGFy
YWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIHNmZDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gMDsKK30KKworU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQ
bGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworU2lt
cGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKK3sKKyAgICAvLyBXZSB3YW50IHRvIHJl
dHVybiBhIGZhbGxiYWNrIGZvbnQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBsb2dpYyBwcmV2ZW50aW5n
IEZvbnRDb25maWcKKyAgICAvLyBtYXRjaGVzIGZvciBub24tZmFsbGJhY2sgZm9udHMgbWlnaHQg
cmV0dXJuIDAuIFNlZSBpc0ZhbGxiYWNrRm9udEFsbG93ZWQuCisgICAgc3RhdGljIEF0b21pY1N0
cmluZyB0aW1lc1N0cigic2VyaWYiKTsKKyAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoZm9u
dERlc2NyaXB0aW9uLCB0aW1lc1N0cik7Cit9CisKK3ZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJ
bkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rvcjx1bnNpZ25lZD4m
IHRyYWl0c01hc2tzKQoreworfQorCitzdGF0aWMgU3RyaW5nIGdldEZhbWlseU5hbWVTdHJpbmdG
cm9tRm9udERlc2NyaXB0aW9uQW5kRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKK3sKKyAgICAvLyBJZiB3ZSdy
ZSBjcmVhdGluZyBhIGZhbGxiYWNrIGZvbnQgKGUuZy4gIi13ZWJraXQtbW9ub3NwYWNlIiksIGNv
bnZlcnQgdGhlIG5hbWUgaW50bworICAgIC8vIHRoZSBmYWxsYmFjayBuYW1lIChsaWtlICJtb25v
c3BhY2UiKSB0aGF0IGZvbnRjb25maWcgdW5kZXJzdGFuZHMuCisgICAgaWYgKGZhbWlseS5sZW5n
dGgoKSAmJiAhZmFtaWx5LnN0YXJ0c1dpdGgoIi13ZWJraXQtIikpCisgICAgICAgIHJldHVybiBm
YW1pbHkuc3RyaW5nKCk7CisKKyAgICBzd2l0Y2ggKGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFt
aWx5KCkpIHsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHk6CisgICAg
Y2FzZSBGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5OgorICAgICAgICByZXR1cm4gInNlcmlm
IjsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5OgorICAgICAgICBy
ZXR1cm4gInNhbnMtc2VyaWYiOworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VG
YW1pbHk6CisgICAgICAgIHJldHVybiAibW9ub3NwYWNlIjsKKyAgICBjYXNlIEZvbnREZXNjcmlw
dGlvbjo6Q3Vyc2l2ZUZhbWlseToKKyAgICAgICAgcmV0dXJuICJjdXJzaXZlIjsKKyAgICBjYXNl
IEZvbnREZXNjcmlwdGlvbjo6RmFudGFzeUZhbWlseToKKyAgICAgICAgcmV0dXJuICJmYW50YXN5
IjsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHk6CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuICIiOworICAgIH0KK30KKworRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hl
OjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKK3sKKyAgICAvLyBUaGUgQ1NTIGZv
bnQgbWF0Y2hpbmcgYWxnb3JpdGhtIChodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWZvbnRzLyNm
b250LW1hdGNoaW5nLWFsZ29yaXRobSkKKyAgICAvLyBzYXlzIHRoYXQgd2UgbXVzdCBmaW5kIGFu
IGV4YWN0IG1hdGNoIGZvciBmb250IGZhbWlseSwgc2xhbnQgKGl0YWxpYyBvciBvYmxpcXVlIGNh
biBiZSB1c2VkKQorICAgIC8vIGFuZCBmb250IHdlaWdodCAod2Ugb25seSBtYXRjaCBib2xkL25v
bi1ib2xkIGhlcmUpLgorICAgIFBsYXRmb3JtUmVmUHRyPEZjUGF0dGVybj4gcGF0dGVybiA9IGFk
b3B0UGxhdGZvcm1SZWYoRmNQYXR0ZXJuQ3JlYXRlKCkpOworICAgIFN0cmluZyBmYW1pbHlOYW1l
U3RyaW5nKGdldEZhbWlseU5hbWVTdHJpbmdGcm9tRm9udERlc2NyaXB0aW9uQW5kRmFtaWx5KGZv
bnREZXNjcmlwdGlvbiwgZmFtaWx5KSk7CisgICAgaWYgKCFGY1BhdHRlcm5BZGRTdHJpbmcocGF0
dGVybi5nZXQoKSwgRkNfRkFNSUxZLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgqPihm
YW1pbHlOYW1lU3RyaW5nLnV0ZjgoKS5kYXRhKCkpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBib29sIGl0YWxpYyA9IGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKTsKKyAgICBpZiAoIUZjUGF0
dGVybkFkZEludGVnZXIocGF0dGVybi5nZXQoKSwgRkNfU0xBTlQsIGl0YWxpYyA/IEZDX1NMQU5U
X0lUQUxJQyA6IEZDX1NMQU5UX1JPTUFOKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgYm9vbCBi
b2xkID0gZm9udERlc2NyaXB0aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHRCb2xkOworICAgIGlm
ICghRmNQYXR0ZXJuQWRkSW50ZWdlcihwYXR0ZXJuLmdldCgpLCBGQ19XRUlHSFQsIGJvbGQgPyBG
Q19XRUlHSFRfQk9MRCA6IEZDX1dFSUdIVF9OT1JNQUwpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBpZiAoIUZjUGF0dGVybkFkZERvdWJsZShwYXR0ZXJuLmdldCgpLCBGQ19QSVhFTF9TSVpFLCBm
b250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgLy8gVGhlIHN0cmF0ZWd5IGlzIG9yaWdpbmFsbHkgZnJvbSBTa2lhIChzcmMvcG9ydHMv
U2tGb250SG9zdF9mb250Y29uZmlnLmNwcCk6CisKKyAgICAvLyBBbGxvdyBGb250Y29uZmlnIHRv
IGRvIHByZS1tYXRjaCBzdWJzdGl0dXRpb24uIFVubGVzcyB3ZSBhcmUgYWNjZXNzaW5nIGEgImZh
bGxiYWNrIgorICAgIC8vIGZhbWlseSBsaWtlICJzYW5zLCIgdGhpcyBpcyB0aGUgb25seSB0aW1l
IHdlIGFsbG93IEZvbnRjb25maWcgdG8gc3Vic3RpdHV0ZSBvbmUKKyAgICAvLyBmYW1pbHkgbmFt
ZSBmb3IgYW5vdGhlciAoaS5lLiBpZiB0aGUgZm9udHMgYXJlIGFsaWFzZWQgdG8gZWFjaCBvdGhl
cikuCisgICAgRmNDb25maWdTdWJzdGl0dXRlKDAsIHBhdHRlcm4uZ2V0KCksIEZjTWF0Y2hQYXR0
ZXJuKTsKKyAgICBGY0RlZmF1bHRTdWJzdGl0dXRlKHBhdHRlcm4uZ2V0KCkpOworCisgICAgRmND
aGFyOCogZm9udENvbmZpZ0ZhbWlseU5hbWVBZnRlckNvbmZpZ3VyYXRpb247CisgICAgRmNQYXR0
ZXJuR2V0U3RyaW5nKHBhdHRlcm4uZ2V0KCksIEZDX0ZBTUlMWSwgMCwgJmZvbnRDb25maWdGYW1p
bHlOYW1lQWZ0ZXJDb25maWd1cmF0aW9uKTsKKyAgICBTdHJpbmcgZmFtaWx5TmFtZUFmdGVyQ29u
ZmlndXJhdGlvbiA9IFN0cmluZzo6ZnJvbVVURjgocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZm9u
dENvbmZpZ0ZhbWlseU5hbWVBZnRlckNvbmZpZ3VyYXRpb24pKTsKKworICAgIEZjUmVzdWx0IGZv
bnRDb25maWdSZXN1bHQ7CisgICAgUGxhdGZvcm1SZWZQdHI8RmNQYXR0ZXJuPiByZXN1bHRQYXR0
ZXJuID0gYWRvcHRQbGF0Zm9ybVJlZihGY0ZvbnRNYXRjaCgwLCBwYXR0ZXJuLmdldCgpLCAmZm9u
dENvbmZpZ1Jlc3VsdCkpOworICAgIGlmICghcmVzdWx0UGF0dGVybikgLy8gTm8gbWF0Y2guCisg
ICAgICAgIHJldHVybiAwOworCisgICAgRmNDaGFyOCogZm9udENvbmZpZ0ZhbWlseU5hbWVBZnRl
ck1hdGNoaW5nOworICAgIEZjUGF0dGVybkdldFN0cmluZyhyZXN1bHRQYXR0ZXJuLmdldCgpLCBG
Q19GQU1JTFksIDAsICZmb250Q29uZmlnRmFtaWx5TmFtZUFmdGVyTWF0Y2hpbmcpOworICAgIFN0
cmluZyBmYW1pbHlOYW1lQWZ0ZXJNYXRjaGluZyA9IFN0cmluZzo6ZnJvbVVURjgocmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oZm9udENvbmZpZ0ZhbWlseU5hbWVBZnRlck1hdGNoaW5nKSk7CisgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWVBZnRlckNvbmZpZ3VyYXRpb24sIGZhbWls
eU5hbWVBZnRlck1hdGNoaW5nKSkKKyAgICAgICAgcmV0dXJuIG5ldyBGb250UGxhdGZvcm1EYXRh
KHJlc3VsdFBhdHRlcm4uZ2V0KCksIGZvbnREZXNjcmlwdGlvbik7CisKKyAgICAvLyBJZiBGb250
Y29uZmlnIGdhdmUgdXNlIGEgZGlmZmVyZW50IGZvbnQgZmFtaWx5IHRoYW4gdGhlIG9uZSB3ZSBy
ZXF1ZXN0ZWQsIHdlIHNob3VsZCBpZ25vcmUgaXQKKyAgICAvLyBhbmQgYWxsb3cgV2ViQ29yZSB0
byBnaXZlIHVzIHRoZSBuZXh0IGZvbnQgb24gdGhlIENTUyBmYWxsYmFjayBsaXN0LiBUaGUgb25s
eSBleGNlcHRpb24gaXMgaWYKKyAgICAvLyB0aGlzIGZhbWlseSBuYW1lIGlzIGEgY29tbW9ubHkg
dXNlZCBnZW5lcmljIGZhbWlseS4KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5TmFt
ZVN0cmluZywgInNhbnMiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHlOYW1lU3RyaW5nLCAi
c2Fucy1zZXJpZiIpCisgICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWVTdHJp
bmcsICJzZXJpZiIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWVTdHJpbmcsICJtb25v
c3BhY2UiKQorICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHlOYW1lU3RyaW5nLCAi
ZmFudGFzeSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWVTdHJpbmcsICJjdXJzaXZl
IikpCisgICAgICAgIHJldHVybiBuZXcgRm9udFBsYXRmb3JtRGF0YShyZXN1bHRQYXR0ZXJuLmdl
dCgpLCBmb250RGVzY3JpcHRpb24pOworCisgICAgLy8gRm9udGNvbmZpZyBkaWQgbm90IHJldHVy
biBhIGdvb2QgbWF0Y2guCisgICAgcmV0dXJuIDA7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udEN1c3RvbVBsYXRmb3JtRGF0YUZyZWVUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAJKHJldmlzaW9uIDcwMjg3KQkoZnJvbSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwOjcw
Mjg3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIkZvbnRQbGF0Zm9y
bURhdGEuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxjYWlyby1mdC5o
PgorI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZv
aWQgcmVsZWFzZUN1c3RvbUZvbnREYXRhKHZvaWQqIGRhdGEpCit7CisgICAgc3RhdGljX2Nhc3Q8
U2hhcmVkQnVmZmVyKj4oZGF0YSktPmRlcmVmKCk7Cit9CisKK0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGE6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGEoRlRfRmFjZSBmcmVlVHlwZUZhY2UsIFNoYXJlZEJ1
ZmZlciogYnVmZmVyKQorICAgIDogbV9mcmVlVHlwZUZhY2UoZnJlZVR5cGVGYWNlKQorICAgICwg
bV9mb250RmFjZShjYWlyb19mdF9mb250X2ZhY2VfY3JlYXRlX2Zvcl9mdF9mYWNlKGZyZWVUeXBl
RmFjZSwgMCkpCit7CisgICAgLy8gRklYTUUgU2hvdWxkIHdlIGJlIHNldHRpbmcgc29tZSBoaW50
aW5nIG9wdGlvbnMgaGVyZT8KKworICAgIGJ1ZmZlci0+cmVmKCk7IC8vIFRoaXMgaXMgYmFsYW5j
ZWQgYnkgdGhlIGJ1ZmZlci0+ZGVyZWYoKSBpbiByZWxlYXNlQ3VzdG9tRm9udERhdGEuCisgICAg
c3RhdGljIGNhaXJvX3VzZXJfZGF0YV9rZXlfdCBidWZmZXJLZXk7CisgICAgY2Fpcm9fZm9udF9m
YWNlX3NldF91c2VyX2RhdGEobV9mb250RmFjZSwgJmJ1ZmZlcktleSwgYnVmZmVyLAorICAgICAg
ICAgc3RhdGljX2Nhc3Q8Y2Fpcm9fZGVzdHJveV9mdW5jX3Q+KHJlbGVhc2VDdXN0b21Gb250RGF0
YSkpOworCisgICAgLy8gQ2Fpcm8gZG9lc24ndCBkbyBGcmVlVHlwZSByZWZlcmVuY2UgY291bnRp
bmcsIHNvIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2hlbgorICAgIC8vIHRoaXMgY2Fpcm9fZm9u
dF9mYWNlX3QgaXMgZGVzdHJveWVkLCBpdCBjbGVhbnMgdXAgdGhlIEZyZWVUeXBlIGZhY2UgYXMg
d2VsbC4KKyAgICBzdGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tleV90IGZyZWVUeXBlRmFjZUtleTsK
KyAgICBjYWlyb19mb250X2ZhY2Vfc2V0X3VzZXJfZGF0YShtX2ZvbnRGYWNlLCAmZnJlZVR5cGVG
YWNlS2V5LCBmcmVlVHlwZUZhY2UsCisgICAgICAgICByZWludGVycHJldF9jYXN0PGNhaXJvX2Rl
c3Ryb3lfZnVuY190PihGVF9Eb25lX0ZhY2UpKTsKK30KKworRm9udEN1c3RvbVBsYXRmb3JtRGF0
YTo6fkZvbnRDdXN0b21QbGF0Zm9ybURhdGEoKQoreworICAgIC8vIG1fZnJlZVR5cGVGYWNlIHdp
bGwgYmUgZGVzdHJveWVkIGFsb25nIHdpdGggbV9mb250RmFjZS4gU2VlIHRoZSBjb25zdHJ1Y3Rv
ci4KKyAgICBjYWlyb19mb250X2ZhY2VfZGVzdHJveShtX2ZvbnRGYWNlKTsKK30KKworRm9udFBs
YXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKGludCBz
aXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250T3JpZW50YXRpb24sIEZvbnRSZW5kZXJp
bmdNb2RlKQoreworICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKG1fZm9udEZhY2UsIHNpemUs
IGJvbGQsIGl0YWxpYyk7Cit9CisKK0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEqIGNyZWF0ZUZvbnRD
dXN0b21QbGF0Zm9ybURhdGEoU2hhcmVkQnVmZmVyKiBidWZmZXIpCit7CisgICAgQVNTRVJUX0FS
RyhidWZmZXIsIGJ1ZmZlcik7CisKKyAgICBzdGF0aWMgRlRfTGlicmFyeSBsaWJyYXJ5ID0gMDsK
KyAgICBpZiAoIWxpYnJhcnkgJiYgRlRfSW5pdF9GcmVlVHlwZSgmbGlicmFyeSkpIHsKKyAgICAg
ICAgbGlicmFyeSA9IDA7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEZUX0ZhY2Ug
ZnJlZVR5cGVGYWNlOworICAgIGlmIChGVF9OZXdfTWVtb3J5X0ZhY2UobGlicmFyeSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBGVF9CeXRlKj4oYnVmZmVyLT5kYXRhKCkpLCBidWZmZXItPnNpemUo
KSwgMCwgJmZyZWVUeXBlRmFjZSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBuZXcg
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YShmcmVlVHlwZUZhY2UsIGJ1ZmZlcik7Cit9CisKK2Jvb2wg
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6c3VwcG9ydHNGb3JtYXQoY29uc3QgU3RyaW5nJiBmb3Jt
YXQpCit7CisgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGZvcm1hdCwgInRydWV0eXBlIikg
fHwgZXF1YWxJZ25vcmluZ0Nhc2UoZm9ybWF0LCAib3BlbnR5cGUiKTsKK30KKworfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZv
cm1EYXRhLmgJKHJldmlzaW9uIDcwMjg3KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5oOjcwMjg3KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgg
QXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1l
bEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhRnJlZVR5cGVfaAorI2RlZmluZSBG
b250UGxhdGZvcm1EYXRhRnJlZVR5cGVfaAorCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgi
CisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJIYXNoRnVuY3Rpb25zLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1SZWZQdHJDYWlyby5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisKK3R5cGVkZWYgc3RydWN0IF9GY0ZvbnRTZXQgRmNGb250U2V0OworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGEgeworcHVibGljOgorICAgIEZvbnRQbGF0
Zm9ybURhdGEoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fZmFs
bGJhY2tzKDApCisgICAgICAgICwgbV9zaXplKDApCisgICAgICAgICwgbV9zeW50aGV0aWNCb2xk
KGZhbHNlKQorICAgICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKKyAgICAgICAgLCBt
X3NjYWxlZEZvbnQoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpCisgICAgICAgIHsgfQorCisg
ICAgRm9udFBsYXRmb3JtRGF0YSgpCisgICAgICAgIDogbV9mYWxsYmFja3MoMCkKKyAgICAgICAg
LCBtX3NpemUoMCkKKyAgICAgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCisgICAgICAgICwg
bV9zeW50aGV0aWNPYmxpcXVlKGZhbHNlKQorICAgICAgICB7IH0KKworICAgIEZvbnRQbGF0Zm9y
bURhdGEoRmNQYXR0ZXJuKiwgY29uc3QgRm9udERlc2NyaXB0aW9uJik7CisgICAgRm9udFBsYXRm
b3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UsIGZsb2F0IHNpemUsIGJvb2wgYm9s
ZCwgYm9vbCBpdGFsaWMpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBi
b2xkLCBib29sIGl0YWxpYyk7CisgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZv
cm1EYXRhJik7CisgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwg
ZmxvYXQgc2l6ZSk7CisKKyAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOworCisgICAgYm9vbCBpc0Zp
eGVkUGl0Y2goKTsKKyAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Cisg
ICAgdm9pZCBzZXRTaXplKGZsb2F0IHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQorICAgIGJvb2wg
c3ludGhldGljQm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9sZDsgfQorICAgIGJv
b2wgc3ludGhldGljT2JsaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljT2JsaXF1ZTsg
fQorCisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2NhbGVkRm9udC5nZXQoKTsgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gUHRySGFzaDxjYWlyb19zY2FsZWRfZm9udF90Kj46Omhhc2gobV9z
Y2FsZWRGb250LmdldCgpKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYpIGNvbnN0OworICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9yPShj
b25zdCBGb250UGxhdGZvcm1EYXRhJik7CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zY2FsZWRGb250LmlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCk7CisgICAgfQorCisjaWZuZGVmIE5ERUJVRworICAgIFN0cmluZyBkZXNj
cmlwdGlvbigpIGNvbnN0OworI2VuZGlmCisKKyAgICBQbGF0Zm9ybVJlZlB0cjxGY1BhdHRlcm4+
IG1fcGF0dGVybjsKKyAgICBGY0ZvbnRTZXQqIG1fZmFsbGJhY2tzOworICAgIGZsb2F0IG1fc2l6
ZTsKKyAgICBib29sIG1fc3ludGhldGljQm9sZDsKKyAgICBib29sIG1fc3ludGhldGljT2JsaXF1
ZTsKKyAgICBib29sIG1fZml4ZWRXaWR0aDsKKyAgICBQbGF0Zm9ybVJlZlB0cjxjYWlyb19zY2Fs
ZWRfZm9udF90PiBtX3NjYWxlZEZvbnQ7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXpl
V2l0aEZvbnRGYWNlKGNhaXJvX2ZvbnRfZmFjZV90Kik7Cit9OworCit9CisKKyNlbmRpZiAvLyBG
b250UGxhdGZvcm1EYXRhRnJlZVR5cGVfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBl
LmNwcAkocmV2aXNpb24gNzAyODcpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcDo3MDI4NykKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDI2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBbHAgVG9rZXIg
PGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgSWdhbGlhIFMuTC4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250UGxh
dGZvcm1EYXRhLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIkZv
bnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+CisjaW5jbHVkZSA8Y2Fpcm8u
aD4KKyNpbmNsdWRlIDxmb250Y29uZmlnL2ZjZnJlZXR5cGUuaD4KKworI2lmICFQTEFURk9STShF
RkwpIHx8IEVOQUJMRShHTElCX1NVUFBPUlQpCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2Fpcm9fc3VicGl4ZWxfb3JkZXJfdCBjb252ZXJ0
Rm9udENvbmZpZ1N1YnBpeGVsT3JkZXIoaW50IGZvbnRDb25maWdPcmRlcikKK3sKKyAgICBzd2l0
Y2ggKGZvbnRDb25maWdPcmRlcikgeworICAgIGNhc2UgRkNfUkdCQV9SR0I6CisgICAgICAgIHJl
dHVybiBDQUlST19TVUJQSVhFTF9PUkRFUl9SR0I7CisgICAgY2FzZSBGQ19SR0JBX0JHUjoKKyAg
ICAgICAgcmV0dXJuIENBSVJPX1NVQlBJWEVMX09SREVSX0JHUjsKKyAgICBjYXNlIEZDX1JHQkFf
VlJHQjoKKyAgICAgICAgcmV0dXJuIENBSVJPX1NVQlBJWEVMX09SREVSX1ZSR0I7CisgICAgY2Fz
ZSBGQ19SR0JBX1ZCR1I6CisgICAgICAgIHJldHVybiBDQUlST19TVUJQSVhFTF9PUkRFUl9WQkdS
OworICAgIGNhc2UgRkNfUkdCQV9OT05FOgorICAgIGNhc2UgRkNfUkdCQV9VTktOT1dOOgorICAg
ICAgICByZXR1cm4gQ0FJUk9fU1VCUElYRUxfT1JERVJfREVGQVVMVDsKKyAgICB9CisgICAgcmV0
dXJuIENBSVJPX1NVQlBJWEVMX09SREVSX0RFRkFVTFQ7Cit9CisKK2NhaXJvX2hpbnRfc3R5bGVf
dCBjb252ZXJ0Rm9udENvbmZpZ0hpbnRTdHlsZShpbnQgZm9udENvbmZpZ1N0eWxlKQoreworICAg
IHN3aXRjaCAoZm9udENvbmZpZ1N0eWxlKSB7CisgICAgY2FzZSBGQ19ISU5UX05PTkU6CisgICAg
ICAgIHJldHVybiBDQUlST19ISU5UX1NUWUxFX05PTkU7CisgICAgY2FzZSBGQ19ISU5UX1NMSUdI
VDoKKyAgICAgICAgcmV0dXJuIENBSVJPX0hJTlRfU1RZTEVfU0xJR0hUOworICAgIGNhc2UgRkNf
SElOVF9NRURJVU06CisgICAgICAgIHJldHVybiBDQUlST19ISU5UX1NUWUxFX01FRElVTTsKKyAg
ICBjYXNlIEZDX0hJTlRfRlVMTDoKKyAgICAgICAgcmV0dXJuIENBSVJPX0hJTlRfU1RZTEVfRlVM
TDsKKyAgICB9CisgICAgcmV0dXJuIENBSVJPX0hJTlRfU1RZTEVfTk9ORTsKK30KKwordm9pZCBz
ZXRDYWlyb0ZvbnRPcHRpb25zRnJvbUZvbnRDb25maWdQYXR0ZXJuKGNhaXJvX2ZvbnRfb3B0aW9u
c190KiBvcHRpb25zLCBGY1BhdHRlcm4qIHBhdHRlcm4pCit7CisgICAgRmNCb29sIGJvb2xlYW5S
ZXN1bHQ7CisgICAgaW50IGludGVnZXJSZXN1bHQ7CisKKyAgICBpZiAoRmNQYXR0ZXJuR2V0SW50
ZWdlcihwYXR0ZXJuLCBGQ19SR0JBLCAwLCAmaW50ZWdlclJlc3VsdCkgPT0gRmNSZXN1bHRNYXRj
aCkgeworICAgICAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X3N1YnBpeGVsX29yZGVyKG9wdGlv
bnMsIGNvbnZlcnRGb250Q29uZmlnU3VicGl4ZWxPcmRlcihpbnRlZ2VyUmVzdWx0KSk7CisKKyAg
ICAgICAgLy8gQmFzZWQgb24gdGhlIGxvZ2ljIGluIGNhaXJvLWZ0LWZvbnQuYyBpbiB0aGUgY2Fp
cm8gc291cmNlLCBhIGZvbnQgd2l0aAorICAgICAgICAvLyBhIHN1YnBpeGVsIG9yZGVyIGltcGxp
ZXMgdGhhdCBpcyB1c2VzIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KKyAgICAgICAgaWYgKGludGVn
ZXJSZXN1bHQgIT0gRkNfUkdCQV9OT05FKQorICAgICAgICAgICAgY2Fpcm9fZm9udF9vcHRpb25z
X3NldF9hbnRpYWxpYXMob3B0aW9ucywgQ0FJUk9fQU5USUFMSUFTX1NVQlBJWEVMKTsKKyAgICB9
CisKKyAgICBpZiAoRmNQYXR0ZXJuR2V0Qm9vbChwYXR0ZXJuLCBGQ19BTlRJQUxJQVMsIDAsICZi
b29sZWFuUmVzdWx0KSA9PSBGY1Jlc3VsdE1hdGNoKSB7CisgICAgICAgIC8vIE9ubHkgb3ZlcnJp
ZGUgdGhlIGFudGktYWxpYXNpbmcgc2V0dGluZyBpZiB3YXMgcHJldmlvdXNseSB0dXJuZWQgb2Zm
LiBPdGhlcndpc2UKKyAgICAgICAgLy8gd2UnbGwgb3ZlcnJpZGUgdGhlIHByZWZlcmVuY2Ugd2hp
Y2ggZGVjaWRlcyBiZXR3ZWVuIGdyYXkgYW50aS1hbGlhc2luZyBhbmQKKyAgICAgICAgLy8gc3Vi
cGl4ZWwgYW50aS1hbGlhc2luZy4KKyAgICAgICAgaWYgKCFib29sZWFuUmVzdWx0KQorICAgICAg
ICAgICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9hbnRpYWxpYXMob3B0aW9ucywgQ0FJUk9fQU5U
SUFMSUFTX05PTkUpOworICAgICAgICBlbHNlIGlmIChjYWlyb19mb250X29wdGlvbnNfZ2V0X2Fu
dGlhbGlhcyhvcHRpb25zKSA9PSBDQUlST19BTlRJQUxJQVNfTk9ORSkKKyAgICAgICAgICAgIGNh
aXJvX2ZvbnRfb3B0aW9uc19zZXRfYW50aWFsaWFzKG9wdGlvbnMsIENBSVJPX0FOVElBTElBU19H
UkFZKTsKKyAgICB9CisKKyAgICBpZiAoRmNQYXR0ZXJuR2V0SW50ZWdlcihwYXR0ZXJuLCBGQ19I
SU5UX1NUWUxFLCAwLCAmaW50ZWdlclJlc3VsdCkgPT0gRmNSZXN1bHRNYXRjaCkKKyAgICAgICAg
Y2Fpcm9fZm9udF9vcHRpb25zX3NldF9oaW50X3N0eWxlKG9wdGlvbnMsIGNvbnZlcnRGb250Q29u
ZmlnSGludFN0eWxlKGludGVnZXJSZXN1bHQpKTsKKyAgICBpZiAoRmNQYXR0ZXJuR2V0Qm9vbChw
YXR0ZXJuLCBGQ19ISU5USU5HLCAwLCAmYm9vbGVhblJlc3VsdCkgPT0gRmNSZXN1bHRNYXRjaCAm
JiAhYm9vbGVhblJlc3VsdCkKKyAgICAgICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9oaW50X3N0
eWxlKG9wdGlvbnMsIENBSVJPX0hJTlRfU1RZTEVfTk9ORSk7Cit9CisKK3N0YXRpYyBjb25zdCBj
YWlyb19mb250X29wdGlvbnNfdCogZ2V0RGVmYXVsdEZvbnRPcHRpb25zKCkKK3sKKyAgICBzdGF0
aWMgY29uc3QgY2Fpcm9fZm9udF9vcHRpb25zX3QqIG9wdGlvbnMgPSBjYWlyb19mb250X29wdGlv
bnNfY3JlYXRlKCk7CisjaWYgUExBVEZPUk0oR1RLKSB8fCBFTkFCTEUoR0xJQl9TVVBQT1JUKQor
ICAgIGlmIChHZGtTY3JlZW4qIHNjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSkgewor
ICAgICAgICBjb25zdCBjYWlyb19mb250X29wdGlvbnNfdCogc2NyZWVuT3B0aW9ucyA9IGdka19z
Y3JlZW5fZ2V0X2ZvbnRfb3B0aW9ucyhzY3JlZW4pOworICAgICAgICBpZiAoc2NyZWVuT3B0aW9u
cykKKyAgICAgICAgICAgIG9wdGlvbnMgPSBzY3JlZW5PcHRpb25zOworICAgIH0KKyNlbmRpZgor
ICAgIHJldHVybiBvcHRpb25zOworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1E
YXRhKEZjUGF0dGVybiogcGF0dGVybiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24pCisgICAgOiBtX3BhdHRlcm4ocGF0dGVybikKKyAgICAsIG1fZmFsbGJhY2tzKDApCisg
ICAgLCBtX3NpemUoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkpCisgICAgLCBt
X3N5bnRoZXRpY0JvbGQoZmFsc2UpCisgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2UpCisg
ICAgLCBtX2ZpeGVkV2lkdGgoZmFsc2UpCit7CisgICAgUGxhdGZvcm1SZWZQdHI8Y2Fpcm9fZm9u
dF9mYWNlX3Q+IGZvbnRGYWNlID0gYWRvcHRQbGF0Zm9ybVJlZihjYWlyb19mdF9mb250X2ZhY2Vf
Y3JlYXRlX2Zvcl9wYXR0ZXJuKG1fcGF0dGVybi5nZXQoKSkpOworICAgIGluaXRpYWxpemVXaXRo
Rm9udEZhY2UoZm9udEZhY2UuZ2V0KCkpOworCisgICAgaW50IHNwYWNpbmc7CisgICAgaWYgKEZj
UGF0dGVybkdldEludGVnZXIocGF0dGVybiwgRkNfU1BBQ0lORywgMCwgJnNwYWNpbmcpID09IEZj
UmVzdWx0TWF0Y2ggJiYgc3BhY2luZyA9PSBGQ19NT05PKQorICAgICAgICBtX2ZpeGVkV2lkdGgg
PSB0cnVlOworCisgICAgaWYgKGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSA+PSBGb250V2VpZ2h0
Qm9sZCkgeworICAgICAgICAvLyBUaGUgRkNfRU1CT0xERU4gcHJvcGVydHkgaW5zdHJ1Y3RzIHVz
IHRvIGZha2UgdGhlIGJvbGRuZXNzIG9mIHRoZSBmb250LgorICAgICAgICBGY0Jvb2wgZm9udENv
bmZpZ0VtYm9sZGVuOworICAgICAgICBpZiAoRmNQYXR0ZXJuR2V0Qm9vbChwYXR0ZXJuLCBGQ19F
TUJPTERFTiwgMCwgJmZvbnRDb25maWdFbWJvbGRlbikgPT0gRmNSZXN1bHRNYXRjaCkKKyAgICAg
ICAgICAgIG1fc3ludGhldGljQm9sZCA9IGZvbnRDb25maWdFbWJvbGRlbjsKKyAgICB9Cit9CisK
K0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xk
LCBib29sIGl0YWxpYykKKyAgICA6IG1fZmFsbGJhY2tzKDApCisgICAgLCBtX3NpemUoc2l6ZSkK
KyAgICAsIG1fc3ludGhldGljQm9sZChib2xkKQorICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGl0
YWxpYykKKyAgICAsIG1fZml4ZWRXaWR0aChmYWxzZSkKK3sKKyAgICAvLyBXZSBjYW5ub3QgY3Jl
YXRlIGEgc2NhbGVkIGZvbnQgaGVyZS4KK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRm
b3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UsIGZsb2F0IHNpemUsIGJvb2wgYm9s
ZCwgYm9vbCBpdGFsaWMpCisgICAgOiBtX2ZhbGxiYWNrcygwKQorICAgICwgbV9zaXplKHNpemUp
CisgICAgLCBtX3N5bnRoZXRpY0JvbGQoYm9sZCkKKyAgICAsIG1fc3ludGhldGljT2JsaXF1ZShp
dGFsaWMpCit7CisgICAgaW5pdGlhbGl6ZVdpdGhGb250RmFjZShmb250RmFjZSk7CisKKyAgICBG
VF9GYWNlIGZvbnRDb25maWdGYWNlID0gY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfbG9ja19mYWNlKG1f
c2NhbGVkRm9udC5nZXQoKSk7CisgICAgaWYgKGZvbnRDb25maWdGYWNlKSB7CisgICAgICAgIG1f
Zml4ZWRXaWR0aCA9IGZvbnRDb25maWdGYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0ZJ
WEVEX1dJRFRIOworICAgICAgICBjYWlyb19mdF9zY2FsZWRfZm9udF91bmxvY2tfZmFjZShtX3Nj
YWxlZEZvbnQuZ2V0KCkpOworICAgIH0KK30KKworRm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRm
b3JtRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKQoreworICAg
IC8vIENoZWNrIGZvciBzZWxmLWFzc2lnbm1lbnQuCisgICAgaWYgKHRoaXMgPT0gJm90aGVyKQor
ICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7CisgICAg
bV9zeW50aGV0aWNCb2xkID0gb3RoZXIubV9zeW50aGV0aWNCb2xkOworICAgIG1fc3ludGhldGlj
T2JsaXF1ZSA9IG90aGVyLm1fc3ludGhldGljT2JsaXF1ZTsKKyAgICBtX2ZpeGVkV2lkdGggPSBv
dGhlci5tX2ZpeGVkV2lkdGg7CisgICAgbV9zY2FsZWRGb250ID0gb3RoZXIubV9zY2FsZWRGb250
OworICAgIG1fcGF0dGVybiA9IG90aGVyLm1fcGF0dGVybjsKKworICAgIGlmIChtX2ZhbGxiYWNr
cykgeworICAgICAgICBGY0ZvbnRTZXREZXN0cm95KG1fZmFsbGJhY2tzKTsKKyAgICAgICAgLy8g
VGhpcyB3aWxsIGJlIHJlLWNyZWF0ZWQgb24gZGVtYW5kLgorICAgICAgICBtX2ZhbGxiYWNrcyA9
IDA7CisgICAgfQorCisgICAgcmV0dXJuICp0aGlzOworfQorCitGb250UGxhdGZvcm1EYXRhOjpG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKQorICAgIDogbV9m
YWxsYmFja3MoMCkKK3sKKyAgICAqdGhpcyA9IG90aGVyOworfQorCitGb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyLCBmbG9hdCBz
aXplKQoreworICAgICp0aGlzID0gb3RoZXI7CisKKyAgICAvLyBXZSBuZWVkIHRvIHJlaW5pdGlh
bGl6ZSB0aGUgaW5zdGFuY2UsIGJlY2F1c2UgdGhlIGRpZmZlcmVuY2UgaW4gc2l6ZSAKKyAgICAv
LyBuZWNlc3NpdGF0ZXMgYSBuZXcgc2NhbGVkIGZvbnQgaW5zdGFuY2UuCisgICAgbV9zaXplID0g
c2l6ZTsKKyAgICBpbml0aWFsaXplV2l0aEZvbnRGYWNlKGNhaXJvX3NjYWxlZF9mb250X2dldF9m
b250X2ZhY2UobV9zY2FsZWRGb250LmdldCgpKSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6On5G
b250UGxhdGZvcm1EYXRhKCkKK3sKKyAgICBpZiAobV9mYWxsYmFja3MpIHsKKyAgICAgICAgRmNG
b250U2V0RGVzdHJveShtX2ZhbGxiYWNrcyk7CisgICAgICAgIG1fZmFsbGJhY2tzID0gMDsKKyAg
ICB9Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNGaXhlZFBpdGNoKCkKK3sKKyAgICBy
ZXR1cm4gbV9maXhlZFdpZHRoOworfQorCitib29sIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9y
PT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG1fcGF0
dGVybiA9PSBvdGhlci5tX3BhdHRlcm4pCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICgh
bV9wYXR0ZXJuIHx8IG1fcGF0dGVybi5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIHx8ICFvdGhl
ci5tX3BhdHRlcm4gfHwgb3RoZXIubV9wYXR0ZXJuLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gRmNQYXR0ZXJuRXF1YWwobV9wYXR0
ZXJuLmdldCgpLCBvdGhlci5tX3BhdHRlcm4uZ2V0KCkpOworfQorCisjaWZuZGVmIE5ERUJVRwor
U3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisjZW5kaWYKKwordm9pZCBGb250UGxhdGZvcm1EYXRhOjppbml0aWFs
aXplV2l0aEZvbnRGYWNlKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSkKK3sKKyAgICBjYWly
b19mb250X29wdGlvbnNfdCogb3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jb3B5KGdldERl
ZmF1bHRGb250T3B0aW9ucygpKTsKKworICAgIGNhaXJvX21hdHJpeF90IGN0bTsKKyAgICBjYWly
b19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKKworICAgIGNhaXJvX21hdHJpeF90IGZvbnRN
YXRyaXg7CisgICAgaWYgKCFtX3BhdHRlcm4pCisgICAgICAgIGNhaXJvX21hdHJpeF9pbml0X3Nj
YWxlKCZmb250TWF0cml4LCBtX3NpemUsIG1fc2l6ZSk7CisgICAgZWxzZSB7CisgICAgICAgIHNl
dENhaXJvRm9udE9wdGlvbnNGcm9tRm9udENvbmZpZ1BhdHRlcm4ob3B0aW9ucywgbV9wYXR0ZXJu
LmdldCgpKTsKKworICAgICAgICAvLyBGb250Q29uZmlnIG1heSByZXR1cm4gYSBsaXN0IG9mIHRy
YW5zZm9ybWF0aW9uIG1hdHJpY2VzIHdpdGggdGhlIHBhdHRlcm4sIGZvciBpbnN0YW5jZSwKKyAg
ICAgICAgLy8gZm9yIGZvbnRzIHRoYXQgYXJlIG9ibGlxdWUuIFdlIHVzZSB0aGF0IHRvIGluaXRp
YWxpemUgdGhlIGNhaXJvIGZvbnQgbWF0cml4LgorICAgICAgICBGY01hdHJpeCBmb250Q29uZmln
TWF0cml4LCAqdGVtcEZvbnRDb25maWdNYXRyaXg7CisgICAgICAgIEZjTWF0cml4SW5pdCgmZm9u
dENvbmZpZ01hdHJpeCk7CisKKyAgICAgICAgLy8gVGhlc2UgbWF0cmljZXMgbWF5IGJlIHN0YWNr
ZWQgaW4gdGhlIHBhdHRlcm4sIHNvIGl0J3Mgb3VyIGpvYiB0byBnZXQgdGhlbSBhbGwgYW5kIG11
bHRpcGx5IHRoZW0uCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBGY1BhdHRlcm5HZXRNYXRyaXgo
bV9wYXR0ZXJuLmdldCgpLCBGQ19NQVRSSVgsIGksICZ0ZW1wRm9udENvbmZpZ01hdHJpeCkgPT0g
RmNSZXN1bHRNYXRjaDsgaSsrKQorICAgICAgICAgICAgRmNNYXRyaXhNdWx0aXBseSgmZm9udENv
bmZpZ01hdHJpeCwgJmZvbnRDb25maWdNYXRyaXgsIHRlbXBGb250Q29uZmlnTWF0cml4KTsKKyAg
ICAgICAgY2Fpcm9fbWF0cml4X2luaXQoJmZvbnRNYXRyaXgsIGZvbnRDb25maWdNYXRyaXgueHgs
IC1mb250Q29uZmlnTWF0cml4Lnl4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAtZm9udENv
bmZpZ01hdHJpeC54eSwgZm9udENvbmZpZ01hdHJpeC55eSwgMCwgMCk7CisKKyAgICAgICAgLy8g
VGhlIG1hdHJpeCBmcm9tIEZvbnRDb25maWcgZG9lcyBub3QgaW5jbHVkZSB0aGUgc2NhbGUuCisg
ICAgICAgIGNhaXJvX21hdHJpeF9zY2FsZSgmZm9udE1hdHJpeCwgbV9zaXplLCBtX3NpemUpOwor
ICAgIH0KKworICAgIG1fc2NhbGVkRm9udCA9IGFkb3B0UGxhdGZvcm1SZWYoY2Fpcm9fc2NhbGVk
X2ZvbnRfY3JlYXRlKGZvbnRGYWNlLCAmZm9udE1hdHJpeCwgJmN0bSwgb3B0aW9ucykpOworICAg
IGNhaXJvX2ZvbnRfb3B0aW9uc19kZXN0cm95KG9wdGlvbnMpOworfQorCisKK30KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvR2x5cGhQYWdlVHJlZU5vZGVGcmVlVHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9H
bHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNwcAkocmV2aXNpb24gNzAyODcpCShmcm9tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR2x5cGhQYWdlVHJlZU5vZGVDYWlyby5jcHA6NzAy
ODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0dseXBoUGFnZVRyZWVO
b2RlRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xsYWJvcmEuY28u
dWs+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCisK
KyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+CisjaW5j
bHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxmb250Y29uZmlnL2ZjZnJlZXR5cGUuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCit7CisgICAgLy8gVGhlIGJ1ZmZlckxlbmd0
aCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiB0aGUgZ2x5cGggcGFnZSBzaXplIGlmIHRoZSBidWZmZXIg
aGFzIFVuaWNvZGUgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzLgorICAgIC8vIFdlIHdvbid0IHN1
cHBvcnQgdGhpcyBmb3Igbm93LgorICAgIGlmIChidWZmZXJMZW5ndGggPiBHbHlwaFBhZ2U6OnNp
emUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEZUX0ZhY2UgZmFjZSA9IGNhaXJvX2Z0
X3NjYWxlZF9mb250X2xvY2tfZmFjZShmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkubV9zY2FsZWRG
b250LmdldCgpKTsKKyAgICBpZiAoIWZhY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgeworICAgICAgICBHbHlwaCBnbHlwaCA9IEZjRnJlZVR5cGVDaGFySW5kZXgo
ZmFjZSwgYnVmZmVyW2ldKTsKKyAgICAgICAgaWYgKCFnbHlwaCkKKyAgICAgICAgICAgIHNldEds
eXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIDAsIDApOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGdseXBoLCBmb250RGF0YSk7
CisgICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGNhaXJvX2Z0X3NjYWxlZF9mb250X3VubG9ja19mYWNlKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS5tX3NjYWxlZEZvbnQuZ2V0KCkpOworCisgICAgcmV0dXJuIGhhdmVHbHlwaHM7Cit9CisKK30K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFG
cmVlVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVl
dHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAkocmV2aXNpb24gNzAyODcpCShmcm9tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vU2ltcGxlRm9udERhdGFDYWlyby5jcHA6NzAy
ODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRh
RnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5j
b20KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29t
PgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVG
b250RGF0YS5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udC5oIgor
I2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2lu
Y2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KKyNpbmNsdWRlIDxj
YWlyby5oPgorI2luY2x1ZGUgPGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgorI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBjYWlyb19mb250X2V4dGVudHNfdCBmb250X2V4
dGVudHM7CisgICAgY2Fpcm9fdGV4dF9leHRlbnRzX3QgdGV4dF9leHRlbnRzOworICAgIGNhaXJv
X3NjYWxlZF9mb250X2V4dGVudHMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LmdldCgpLCAm
Zm9udF9leHRlbnRzKTsKKyAgICBtX2FzY2VudCA9IHN0YXRpY19jYXN0PGludD4obHJvdW5kZihm
b250X2V4dGVudHMuYXNjZW50KSk7CisgICAgbV9kZXNjZW50ID0gc3RhdGljX2Nhc3Q8aW50Pihs
cm91bmRmKGZvbnRfZXh0ZW50cy5kZXNjZW50KSk7CisgICAgbV9saW5lU3BhY2luZyA9IHN0YXRp
Y19jYXN0PGludD4obHJvdW5kZihmb250X2V4dGVudHMuaGVpZ2h0KSk7CisgICAgLy8gVGhlcmUg
c2VlbXMgdG8gYmUgc29tZSByb3VuZGluZyBlcnJvciBpbiBjYWlybyAob3IgaW4gaG93IHdlCisg
ICAgLy8gdXNlIGNhaXJvKSB3aXRoIHNvbWUgZm9udHMsIGxpa2UgRGVqYVZ1IFNhbnMgTW9ubywg
d2hpY2ggbWFrZXMKKyAgICAvLyBjYWlybyByZXBvcnQgYSBoZWlnaHQgc21hbGxlciB0aGFuIGFz
Y2VudCArIGRlc2NlbnQsIHdoaWNoIGlzCisgICAgLy8gd3JvbmcgYW5kIGNvbmZ1c2VzIFdlYkNv
cmUncyBsYXlvdXQgc3lzdGVtLiBXb3JrYXJvdW5kIHRoaXMKKyAgICAvLyB3aGlsZSB3ZSBmaWd1
cmUgb3V0IHdoYXQncyBnb2luZyBvbi4KKyAgICBpZiAobV9saW5lU3BhY2luZyA8IG1fYXNjZW50
ICsgbV9kZXNjZW50KQorICAgICAgICBtX2xpbmVTcGFjaW5nID0gbV9hc2NlbnQgKyBtX2Rlc2Nl
bnQ7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF9leHRlbnRzKG1fcGxhdGZvcm1EYXRhLm1f
c2NhbGVkRm9udC5nZXQoKSwgIngiLCAmdGV4dF9leHRlbnRzKTsKKyAgICBtX3hIZWlnaHQgPSB0
ZXh0X2V4dGVudHMuaGVpZ2h0OworICAgIGNhaXJvX3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyht
X3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQuZ2V0KCksICIgIiwgJnRleHRfZXh0ZW50cyk7Cisg
ICAgbV9zcGFjZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRleHRfZXh0ZW50cy54X2FkdmFu
Y2UpOworICAgIG1fbGluZUdhcCA9IG1fbGluZVNwYWNpbmcgLSBtX2FzY2VudCAtIG1fZGVzY2Vu
dDsKKyAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNC
b2xkKCkgPyAxLjBmIDogMC5mOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNo
YXJXaWR0aEluaXQoKQoreworICAgIG1fYXZnQ2hhcldpZHRoID0gMC5mOworICAgIG1fbWF4Q2hh
cldpZHRoID0gMC5mOworICAgIGluaXRDaGFyV2lkdGhzKCk7Cit9CisKK3ZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCit7CisgICAgZGVsZXRlIG1fc21hbGxDYXBzRm9udERh
dGE7CisgICAgbV9zbWFsbENhcHNGb250RGF0YSA9IDA7Cit9CisKK1NpbXBsZUZvbnREYXRhKiBT
aW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEkgdGhpbmsgd2Ugd2FudCB0
byBhc2sgRm9udENvbmZpZyBmb3IgdGhlIHJpZ2h0IGZvbnQgYWdhaW4uCisgICAgaWYgKCFtX3Nt
YWxsQ2Fwc0ZvbnREYXRhKQorICAgICAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gbmV3IFNpbXBs
ZUZvbnREYXRhKAorICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YShjYWlyb19zY2FsZWRfZm9u
dF9nZXRfZm9udF9mYWNlKG1fcGxhdGZvcm1EYXRhLnNjYWxlZEZvbnQoKSksCisgICAgICAgICAg
ICAwLjcwZiAqIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSwgbV9wbGF0Zm9ybURhdGEu
c3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCkpKTsKKwor
ICAgIHJldHVybiBtX3NtYWxsQ2Fwc0ZvbnREYXRhOworfQorCitib29sIFNpbXBsZUZvbnREYXRh
Ojpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgp
IGNvbnN0Cit7CisgICAgRlRfRmFjZSBmYWNlID0gY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfbG9ja19m
YWNlKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udC5nZXQoKSk7CisKKyAgICBpZiAoIWZhY2Up
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgaWYgKEZjRnJlZVR5cGVDaGFySW5kZXgoZmFjZSwgY2hhcmFjdGVy
c1tpXSkgPT0gMCkgeworICAgICAgICAgICAgY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfdW5sb2NrX2Zh
Y2UobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LmdldCgpKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNhaXJvX2Z0X3NjYWxlZF9mb250X3Vu
bG9ja19mYWNlKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udC5nZXQoKSk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQorewor
ICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBtX3BsYXRmb3JtRGF0YS5pc0ZpeGVkUGl0Y2goKTsK
K30KKworRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEds
eXBoKSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFJlY3QoKTsKK30KKworZmxvYXQgU2ltcGxl
Rm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250KTsKKworICAgIGNhaXJvX2dseXBo
X3QgY2dseXBoID0geyBnbHlwaCwgMCwgMCB9OworICAgIGNhaXJvX3RleHRfZXh0ZW50c190IGV4
dGVudHM7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZ2x5cGhfZXh0ZW50cyhtX3BsYXRmb3JtRGF0
YS5tX3NjYWxlZEZvbnQuZ2V0KCksICZjZ2x5cGgsIDEsICZleHRlbnRzKTsKKworICAgIGZsb2F0
IHcgPSAoZmxvYXQpbV9zcGFjZVdpZHRoOworICAgIGlmIChjYWlyb19zY2FsZWRfZm9udF9zdGF0
dXMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LmdldCgpKSA9PSBDQUlST19TVEFUVVNfU1VD
Q0VTUyAmJiBleHRlbnRzLnhfYWR2YW5jZSkKKyAgICAgICAgdyA9IChmbG9hdClleHRlbnRzLnhf
YWR2YW5jZTsKKworICAgIHJldHVybiB3OyAgICAKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvRm9udENhY2hlUGFuZ28uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDYWNoZVBhbmdvLmNwcAkocmV2aXNpb24gNzAz
MDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVQYW5nby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkZvbnRDYWNoZS5oIgotCi0jaW5jbHVkZSAiQ1N0cmluZy5oIgotI2luY2x1ZGUgIkZv
bnQuaCIKLSNpbmNsdWRlICJPd25QdHJDYWlyby5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRh
LmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci12b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKLXsKLSAgICBpZiAoIUZvbnRQbGF0Zm9y
bURhdGE6OmluaXQoKSkKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWNvbnN0
IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25z
dCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gMDsKLX0KLQotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZv
bnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQot
U2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKLXsKLSAgICAvLyBGSVhNRTogV291
bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQg
aGVyZS4KLSAgICAvLyBGb3Igbm93IHdlJ2xsIHBpY2sgdGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNl
ciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCi0gICAgc3RhdGljIEF0b21p
Y1N0cmluZyB0aW1lc1N0cigiVGltZXMgTmV3IFJvbWFuIik7Ci0gICAgcmV0dXJuIGdldENhY2hl
ZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgdGltZXNTdHIpOwotfQotCi12b2lkIEZvbnRDYWNo
ZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBWZWN0
b3I8dW5zaWduZWQ+JiB0cmFpdHNNYXNrcykKLXsKLX0KLQotRm9udFBsYXRmb3JtRGF0YSogRm9u
dENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKLXsKLSAgICByZXR1cm4g
bmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpOwotfQotCi19Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q3VzdG9tUGxhdGZvcm1EYXRh
UGFuZ28uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHAJKHJldmlzaW9uIDcwMzAwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdvLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4
IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgotCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLUZvbnRDdXN0b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkKLXsK
LX0KLQotRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZv
cm1EYXRhKGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250T3JpZW50YXRpb24s
IEZvbnRSZW5kZXJpbmdNb2RlKQotewotICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKG1fZm9u
dEZhY2UsIHNpemUsIGJvbGQsIGl0YWxpYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbGVhc2VEYXRh
KHZvaWQqIGRhdGEpCi17Ci0gICAgc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oZGF0YSktPmRl
cmVmKCk7Ci19Ci0KLUZvbnRDdXN0b21QbGF0Zm9ybURhdGEqIGNyZWF0ZUZvbnRDdXN0b21QbGF0
Zm9ybURhdGEoU2hhcmVkQnVmZmVyKiBidWZmZXIpCi17Ci0gICAgLy8gRklYTUU6IHdlIG5lZWQg
c3VwcG9ydCBpbiBwYW5nbyB0byByZWFkIGZvbnRzIGZyb20gbWVtb3J5IHRvIGltcGxlbWVudCB0
aGlzLnkKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpz
dXBwb3J0c0Zvcm1hdChjb25zdCBTdHJpbmcmIC8qIGZvcm1hdCAqLykKLXsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQ
bGF0Zm9ybURhdGFQYW5nby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YVBhbmdvLmNwcAkocmV2aXNpb24gNzAzMDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDI3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1l
bCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFscCBU
b2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMg
UGV0ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENl
bnRlciBVU0EsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBJZ2FsaWEgUy5MLgotICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250UGxhdGZv
cm1EYXRhLmgiCi0KLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIkZvbnRE
ZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDxj
YWlyby5oPgotI2luY2x1ZGUgPGFzc2VydC5oPgotCi0jaW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4K
LSNpbmNsdWRlIDxwYW5nby9wYW5nb2NhaXJvLmg+Ci0KLS8vIFVzZSBjYWlyby1mdCBpIGEgcmVj
ZW50IGVub3VnaCBQYW5nbyB2ZXJzaW9uIGlzbid0IGF2YWlsYWJsZQotI2lmICFQQU5HT19WRVJT
SU9OX0NIRUNLKDEsMTgsMCkKLSNpbmNsdWRlIDxjYWlyby1mdC5oPgotI2luY2x1ZGUgPHBhbmdv
L3BhbmdvZmMtZm9udG1hcC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLVBhbmdvRm9udE1hcCogRm9udFBsYXRmb3JtRGF0YTo6bV9mb250
TWFwID0gMDsKLUdIYXNoVGFibGUqIEZvbnRQbGF0Zm9ybURhdGE6Om1faGFzaFRhYmxlID0gMDsK
LQotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQotICAg
IDogbV9jb250ZXh0KDApCi0gICAgLCBtX2ZvbnQoMCkKLSAgICAsIG1fc2l6ZShmb250RGVzY3Jp
cHRpb24uY29tcHV0ZWRTaXplKCkpCi0gICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCi0gICAg
LCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2UpCi0gICAgLCBtX3NjYWxlZEZvbnQoMCkKLXsKLSAg
ICBGb250UGxhdGZvcm1EYXRhOjppbml0KCk7Ci0KLSAgICBDU3RyaW5nIHN0b3JlZF9mYW1pbHkg
PSBmYW1pbHlOYW1lLnN0cmluZygpLnV0ZjgoKTsKLSAgICBjaGFyIGNvbnN0KiBmYW1pbGllc1td
ID0gewotICAgICAgc3RvcmVkX2ZhbWlseS5kYXRhKCksCi0gICAgICBOVUxMCi0gICAgfTsKLQot
ICAgIHN3aXRjaCAoZm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSkgewotICAgIGNhc2Ug
Rm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseToKLSAgICAgICAgZmFtaWxpZXNbMV0gPSAic2Vy
aWYiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2Fuc1Nlcmlm
RmFtaWx5OgotICAgICAgICBmYW1pbGllc1sxXSA9ICJzYW5zIjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseToKLSAgICAgICAgZmFtaWxp
ZXNbMV0gPSAibW9ub3NwYWNlIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250RGVzY3Jp
cHRpb246Ok5vRmFtaWx5OgotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWls
eToKLSAgICBkZWZhdWx0OgotICAgICAgICBmYW1pbGllc1sxXSA9ICJzYW5zIjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgUGFuZ29Gb250RGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uID0g
cGFuZ29fZm9udF9kZXNjcmlwdGlvbl9uZXcoKTsKLSAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9u
X3NldF9hYnNvbHV0ZV9zaXplKGRlc2NyaXB0aW9uLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRT
aXplKCkgKiBQQU5HT19TQ0FMRSk7Ci0KLSAgICAvLyBGSVhNRTogTWFwIGFsbCBGb250V2VpZ2h0
IHZhbHVlcyB0byBQYW5nbyBmb250IHdlaWdodHMuCi0gICAgaWYgKGZvbnREZXNjcmlwdGlvbi53
ZWlnaHQoKSA+PSBGb250V2VpZ2h0NjAwKQotICAgICAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9u
X3NldF93ZWlnaHQoZGVzY3JpcHRpb24sIFBBTkdPX1dFSUdIVF9CT0xEKTsKLSAgICBpZiAoZm9u
dERlc2NyaXB0aW9uLml0YWxpYygpKQotICAgICAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX3Nl
dF9zdHlsZShkZXNjcmlwdGlvbiwgUEFOR09fU1RZTEVfSVRBTElDKTsKLQotI2lmIFBBTkdPX1ZF
UlNJT05fQ0hFQ0soMSwyMSw1KSAgIC8vIGRlcHJlY2F0ZWQgaW4gMS4yMQotICAgIG1fY29udGV4
dCA9IHBhbmdvX2ZvbnRfbWFwX2NyZWF0ZV9jb250ZXh0KG1fZm9udE1hcCk7Ci0jZWxzZQotICAg
IG1fY29udGV4dCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFwX2NyZWF0ZV9jb250ZXh0KFBBTkdPX0NB
SVJPX0ZPTlRfTUFQKG1fZm9udE1hcCkpOwotI2VuZGlmCi0gICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7ICFtX2ZvbnQgJiYgaSA8IEdfTl9FTEVNRU5UUyhmYW1pbGllcyk7IGkrKykgewotICAg
ICAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX3NldF9mYW1pbHkoZGVzY3JpcHRpb24sIGZhbWls
aWVzW2ldKTsKLSAgICAgICAgcGFuZ29fY29udGV4dF9zZXRfZm9udF9kZXNjcmlwdGlvbihtX2Nv
bnRleHQsIGRlc2NyaXB0aW9uKTsKLSAgICAgICAgbV9mb250ID0gcGFuZ29fZm9udF9tYXBfbG9h
ZF9mb250KG1fZm9udE1hcCwgbV9jb250ZXh0LCBkZXNjcmlwdGlvbik7Ci0gICAgfQotCi0jaWYg
UEFOR09fVkVSU0lPTl9DSEVDSygxLDE4LDApCi0gICAgaWYgKG1fZm9udCkKLSAgICAgICAgbV9z
Y2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfcmVmZXJlbmNlKHBhbmdvX2NhaXJvX2ZvbnRf
Z2V0X3NjYWxlZF9mb250KFBBTkdPX0NBSVJPX0ZPTlQobV9mb250KSkpOwotI2Vsc2UKLSAgICAv
LyBUaGlzIGNvbXBhdGliaWxpdHkgY29kZSBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgUGFuZ28gaXMg
bm90IHdlbGwtdGVzdGVkLgotICAgIGlmIChtX2ZvbnQpIHsKLSAgICAgICAgUGFuZ29GY0ZvbnQq
IGZjZm9udCA9IFBBTkdPX0ZDX0ZPTlQobV9mb250KTsKLSAgICAgICAgY2Fpcm9fZm9udF9mYWNl
X3QqIGZhY2UgPSBjYWlyb19mdF9mb250X2ZhY2VfY3JlYXRlX2Zvcl9wYXR0ZXJuKGZjZm9udC0+
Zm9udF9wYXR0ZXJuKTsKLSAgICAgICAgZG91YmxlIHNpemU7Ci0gICAgICAgIGlmIChGY1BhdHRl
cm5HZXREb3VibGUoZmNmb250LT5mb250X3BhdHRlcm4sIEZDX1BJWEVMX1NJWkUsIDAsICZzaXpl
KSAhPSBGY1Jlc3VsdE1hdGNoKQotICAgICAgICAgICAgc2l6ZSA9IDEyLjA7Ci0gICAgICAgIGNh
aXJvX21hdHJpeF90IGZvbnRNYXRyaXg7Ci0gICAgICAgIGNhaXJvX21hdHJpeF9pbml0X3NjYWxl
KCZmb250TWF0cml4LCBzaXplLCBzaXplKTsKLSAgICAgICAgY2Fpcm9fZm9udF9vcHRpb25zX3Qq
IGZvbnRPcHRpb25zOwotICAgICAgICBpZiAocGFuZ29fY2Fpcm9fY29udGV4dF9nZXRfZm9udF9v
cHRpb25zKG1fY29udGV4dCkpCi0gICAgICAgICAgICBmb250T3B0aW9ucyA9IGNhaXJvX2ZvbnRf
b3B0aW9uc19jb3B5KHBhbmdvX2NhaXJvX2NvbnRleHRfZ2V0X2ZvbnRfb3B0aW9ucyhtX2NvbnRl
eHQpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9udE9wdGlvbnMgPSBjYWlyb19mb250
X29wdGlvbnNfY3JlYXRlKCk7Ci0gICAgICAgIGNhaXJvX21hdHJpeF90IGN0bTsKLSAgICAgICAg
Y2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHkoJmN0bSk7Ci0gICAgICAgIG1fc2NhbGVkRm9udCA9
IGNhaXJvX3NjYWxlZF9mb250X2NyZWF0ZShmYWNlLCAmZm9udE1hdHJpeCwgJmN0bSwgZm9udE9w
dGlvbnMpOwotICAgICAgICBjYWlyb19mb250X29wdGlvbnNfZGVzdHJveShmb250T3B0aW9ucyk7
Ci0gICAgICAgIGNhaXJvX2ZvbnRfZmFjZV9kZXN0cm95KGZhY2UpOwotICAgIH0KLSNlbmRpZgot
ICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZShkZXNjcmlwdGlvbik7Ci19Ci0KLUZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29s
IGl0YWxpYykKLSAgICA6IG1fY29udGV4dCgwKQotICAgICwgbV9mb250KDApCi0gICAgLCBtX3Np
emUoc2l6ZSkKLSAgICAsIG1fc3ludGhldGljQm9sZChib2xkKQotICAgICwgbV9zeW50aGV0aWNP
YmxpcXVlKGl0YWxpYykKLSAgICAsIG1fc2NhbGVkRm9udCgwKQotewotfQotCi1Gb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSwgZmxv
YXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYykKLSAgICA6IG1fY29udGV4dCgwKQotICAg
ICwgbV9mb250KDApCi0gICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fc3ludGhldGljQm9sZChi
b2xkKQotICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGl0YWxpYykKLSAgICAsIG1fc2NhbGVkRm9u
dCgwKQotewotICAgIGNhaXJvX21hdHJpeF90IGZvbnRNYXRyaXg7Ci0gICAgY2Fpcm9fbWF0cml4
X2luaXRfc2NhbGUoJmZvbnRNYXRyaXgsIHNpemUsIHNpemUpOwotICAgIGNhaXJvX21hdHJpeF90
IGN0bTsKLSAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKLSAgICBjYWlyb19m
b250X29wdGlvbnNfdCogb3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsKLQot
ICAgIC8vIFdlIGZvcmNlIGFudGlhbGlhc2luZyBhbmQgZGlzYWJsZSBoaW50aW5nIHRvIHByb3Zp
ZGUgY29uc2lzdGVudAotICAgIC8vIHR5cG9ncmFwaGljIHF1YWxpdGllcyBmb3IgY3VzdG9tIGZv
bnRzIG9uIGFsbCBwbGF0Zm9ybXMuCi0gICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9oaW50X3N0
eWxlKG9wdGlvbnMsIENBSVJPX0hJTlRfU1RZTEVfTk9ORSk7Ci0gICAgY2Fpcm9fZm9udF9vcHRp
b25zX3NldF9hbnRpYWxpYXMob3B0aW9ucywgQ0FJUk9fQU5USUFMSUFTX0dSQVkpOwotCi0gICAg
bV9zY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfY3JlYXRlKGZvbnRGYWNlLCAmZm9udE1h
dHJpeCwgJmN0bSwgb3B0aW9ucyk7Ci0gICAgY2Fpcm9fZm9udF9vcHRpb25zX2Rlc3Ryb3kob3B0
aW9ucyk7Ci19Ci0KLWJvb2wgRm9udFBsYXRmb3JtRGF0YTo6aW5pdCgpCi17Ci0gICAgc3RhdGlj
IGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBpZiAoaW5pdGlhbGl6ZWQpCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIGlmICghbV9mb250
TWFwKQotICAgICAgICBtX2ZvbnRNYXAgPSBwYW5nb19jYWlyb19mb250X21hcF9nZXRfZGVmYXVs
dCgpOwotICAgIGlmICghbV9oYXNoVGFibGUpIHsKLSAgICAgICAgUGFuZ29Gb250RmFtaWx5Kiog
ZmFtaWxpZXMgPSAwOwotICAgICAgICBpbnQgbl9mYW1pbGllcyA9IDA7Ci0KLSAgICAgICAgbV9o
YXNoVGFibGUgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWws
IGdfZnJlZSwgZ19vYmplY3RfdW5yZWYpOwotCi0gICAgICAgIHBhbmdvX2ZvbnRfbWFwX2xpc3Rf
ZmFtaWxpZXMobV9mb250TWFwLCAmZmFtaWxpZXMsICZuX2ZhbWlsaWVzKTsKLQotICAgICAgICBm
b3IgKGludCBmYW1pbHkgPSAwOyBmYW1pbHkgPCBuX2ZhbWlsaWVzOyBmYW1pbHkrKykKLSAgICAg
ICAgICAgICAgICBnX2hhc2hfdGFibGVfaW5zZXJ0KG1faGFzaFRhYmxlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ19zdHJkdXAocGFuZ29fZm9udF9mYW1pbHlfZ2V0X25h
bWUoZmFtaWxpZXNbZmFtaWx5XSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ19vYmplY3RfcmVmKGZhbWlsaWVzW2ZhbWlseV0pKTsKLQotICAgICAgICBnX2ZyZWUoZmFt
aWxpZXMpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1Gb250UGxhdGZvcm1EYXRh
Ojp+Rm9udFBsYXRmb3JtRGF0YSgpCi17Ci0gICAgaWYgKG1fZm9udCAmJiBtX2ZvbnQgIT0gcmVp
bnRlcnByZXRfY2FzdDxQYW5nb0ZvbnQqPigtMSkpIHsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYo
bV9mb250KTsKLSAgICAgICAgbV9mb250ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAobV9jb250ZXh0
KSB7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKG1fY29udGV4dCk7Ci0gICAgICAgIG1fY29udGV4
dCA9IDA7Ci0gICAgfQotCi0gICAgaWYgKG1fc2NhbGVkRm9udCkgewotICAgICAgICBjYWlyb19z
Y2FsZWRfZm9udF9kZXN0cm95KG1fc2NhbGVkRm9udCk7Ci0gICAgICAgIG1fc2NhbGVkRm9udCA9
IDA7Ci0gICAgfQotfQotCi1ib29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpCi17
Ci0gICAgUGFuZ29Gb250RGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uID0gcGFuZ29fZm9udF9kZXNj
cmliZV93aXRoX2Fic29sdXRlX3NpemUobV9mb250KTsKLSAgICBQYW5nb0ZvbnRGYW1pbHkqIGZh
bWlseSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250RmFtaWx5Kj4oZ19oYXNoX3RhYmxlX2xv
b2t1cChtX2hhc2hUYWJsZSwgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9nZXRfZmFtaWx5KGRlc2Ny
aXB0aW9uKSkpOwotICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZShkZXNjcmlwdGlvbik7
Ci0gICAgcmV0dXJuIHBhbmdvX2ZvbnRfZmFtaWx5X2lzX21vbm9zcGFjZShmYW1pbHkpOwotfQot
Ci1Gb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0oY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYgb3RoZXIpCi17Ci0gICAgLy8gQ2hlY2sgZm9yIHNlbGYtYXNzaWdubWVu
dC4KLSAgICBpZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgIHJldHVybiAqdGhpczsKLQotICAg
IG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKLSAgICBtX3N5bnRoZXRpY0JvbGQgPSBvdGhlci5tX3N5
bnRoZXRpY0JvbGQ7Ci0gICAgbV9zeW50aGV0aWNPYmxpcXVlID0gb3RoZXIubV9zeW50aGV0aWNP
YmxpcXVlOwotCi0gICAgaWYgKG90aGVyLm1fc2NhbGVkRm9udCkKLSAgICAgICAgY2Fpcm9fc2Nh
bGVkX2ZvbnRfcmVmZXJlbmNlKG90aGVyLm1fc2NhbGVkRm9udCk7Ci0gICAgaWYgKG1fc2NhbGVk
Rm9udCkKLSAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJveShtX3NjYWxlZEZvbnQpOwot
ICAgIG1fc2NhbGVkRm9udCA9IG90aGVyLm1fc2NhbGVkRm9udDsKLQotICAgIGlmIChvdGhlci5t
X2ZvbnQpCi0gICAgICAgIGdfb2JqZWN0X3JlZihvdGhlci5tX2ZvbnQpOwotICAgIGlmIChtX2Zv
bnQpCi0gICAgICAgIGdfb2JqZWN0X3VucmVmKG1fZm9udCk7Ci0gICAgbV9mb250ID0gb3RoZXIu
bV9mb250OwotCi0gICAgaWYgKG90aGVyLm1fY29udGV4dCkKLSAgICAgICAgZ19vYmplY3RfcmVm
KG90aGVyLm1fY29udGV4dCk7Ci0gICAgaWYgKG1fY29udGV4dCkKLSAgICAgICAgZ19vYmplY3Rf
dW5yZWYobV9jb250ZXh0KTsKLSAgICBtX2NvbnRleHQgPSBvdGhlci5tX2NvbnRleHQ7Ci0KLSAg
ICByZXR1cm4gKnRoaXM7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpCi0gICAgOiBtX2NvbnRleHQoMCkKLSAgICAs
IG1fZm9udCgwKQotICAgICwgbV9zY2FsZWRGb250KDApCi17Ci0gICAgKnRoaXMgPSBvdGhlcjsK
LX0KLQotYm9vbCBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIG90aGVyKSBjb25zdAotewotICAgIGlmIChtX2ZvbnQgPT0gb3RoZXIubV9mb250KQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAobV9mb250ID09IDAgfHwgbV9mb250ID09IHJl
aW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpCi0gICAgICAgIHx8IG90aGVyLm1fZm9udCA9
PSAwIHx8IG90aGVyLm1fZm9udCA9PSByZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+KC0xKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiB0aGlzRGVz
YyA9IHBhbmdvX2ZvbnRfZGVzY3JpYmUobV9mb250KTsKLSAgICBQYW5nb0ZvbnREZXNjcmlwdGlv
biogb3RoZXJEZXNjID0gcGFuZ29fZm9udF9kZXNjcmliZShvdGhlci5tX2ZvbnQpOwotICAgIGJv
b2wgcmVzdWx0ID0gcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9lcXVhbCh0aGlzRGVzYywgb3RoZXJE
ZXNjKTsKLSAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUob3RoZXJEZXNjKTsKLSAgICBw
YW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUodGhpc0Rlc2MpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi1TdHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRp
b24oKSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLSNlbmRpZgotCi19CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1E
YXRhUGFuZ28uaAkocmV2aXNpb24gNzAzMDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIgVVNBLCBJbmMuCi0gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhUGFuZ29faAotI2Rl
ZmluZSBGb250UGxhdGZvcm1EYXRhUGFuZ29faAotCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9u
LmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1
ZGUgPHBhbmdvL3BhbmdvY2Fpcm8uaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGEgewotcHVibGljOgotICAg
IEZvbnRQbGF0Zm9ybURhdGEoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAg
ICA6IG1fY29udGV4dCgwKQotICAgICAgICAsIG1fZm9udChoYXNoVGFibGVEZWxldGVkRm9udFZh
bHVlKCkpCi0gICAgICAgICwgbV9zaXplKDApCi0gICAgICAgICwgbV9zeW50aGV0aWNCb2xkKGZh
bHNlKQotICAgICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKLSAgICAgICAgLCBtX3Nj
YWxlZEZvbnQoMCkKLSAgICAgICAgeyB9Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhKCkKLSAgICAg
ICAgOiBtX2NvbnRleHQoMCkKLSAgICAgICAgLCBtX2ZvbnQoMCkKLSAgICAgICAgLCBtX3NpemUo
MCkKLSAgICAgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCi0gICAgICAgICwgbV9zeW50aGV0
aWNPYmxpcXVlKGZhbHNlKQotICAgICAgICAsIG1fc2NhbGVkRm9udCgwKQotICAgICAgICB7IH0K
LQotICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRv
bWljU3RyaW5nJiBmYW1pbHkpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEoY2Fpcm9fZm9udF9mYWNl
X3QqIGZvbnRGYWNlLCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKTsKLSAgICBG
b250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpOwotICAg
IEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotICAgIH5Gb250UGxh
dGZvcm1EYXRhKCk7Ci0KLSAgICBzdGF0aWMgYm9vbCBpbml0KCk7Ci0gICAgYm9vbCBpc0ZpeGVk
UGl0Y2goKTsKLSAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAg
dm9pZCBzZXRTaXplKGZsb2F0IHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQotICAgIGJvb2wgc3lu
dGhldGljQm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9sZDsgfQotICAgIGJvb2wg
c3ludGhldGljT2JsaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljT2JsaXF1ZTsgfQot
Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2NhbGVkRm9udDsgfQotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICB1aW50cHRyX3QgaGFzaENvZGVzWzFdID0geyByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
bV9zY2FsZWRGb250KSB9OwotICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2go
cmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIHNpemVvZihoYXNoQ29kZXMpIC8g
c2l6ZW9mKFVDaGFyKSk7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmKSBjb25zdDsKLSAgICBGb250UGxhdGZvcm1EYXRhJiBvcGVyYXRvcj0oY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYpOwotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZm9udCA9PSBoYXNoVGFibGVEZWxldGVk
Rm9udFZhbHVlKCk7Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyBkZXNjcmlw
dGlvbigpIGNvbnN0OwotI2VuZGlmCi0KLSAgICBzdGF0aWMgUGFuZ29Gb250TWFwKiBtX2ZvbnRN
YXA7Ci0gICAgc3RhdGljIEdIYXNoVGFibGUqIG1faGFzaFRhYmxlOwotICAgIFBhbmdvQ29udGV4
dCogbV9jb250ZXh0OwotICAgIFBhbmdvRm9udCogbV9mb250OwotICAgIGZsb2F0IG1fc2l6ZTsK
LSAgICBib29sIG1fc3ludGhldGljQm9sZDsKLSAgICBib29sIG1fc3ludGhldGljT2JsaXF1ZTsK
LSAgICBjYWlyb19zY2FsZWRfZm9udF90KiBtX3NjYWxlZEZvbnQ7Ci1wcml2YXRlOgotICAgIHN0
YXRpYyBQYW5nb0ZvbnQgKmhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PFBhbmdvRm9udCo+KC0xKTsgfQotfTsKLQotfQotCi0jZW5kaWYgLy8gRm9u
dFBsYXRmb3JtRGF0YVBhbmdvX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0dseXBoUGFnZVRyZWVOb2RlUGFuZ28uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0dseXBoUGFnZVRyZWVOb2RlUGFuZ28uY3BwCShyZXZpc2lvbiA3MDMw
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dseXBoUGFnZVRyZWVOb2RlUGFu
Z28uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIENvcHly
aWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xsYWJvcmEuY28udWs+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIgVVNBLCBJbmMuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCi0KLSNpbmNsdWRl
ICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgPHBhbmdvL3BhbmdvLWZvbnQuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgUGFuZ29HbHlwaCBwYW5nb19mb250X2dldF9nbHlw
aChQYW5nb0ZvbnQqIGZvbnQsIFBhbmdvQ29udGV4dCogY29udGV4dCwgZ3VuaWNoYXIgd2MpCi17
Ci0gICAgUGFuZ29HbHlwaCByZXN1bHQgPSAwOwotICAgIGdjaGFyIGJ1ZmZlcls3XTsKLQotICAg
IGdpbnQgIGxlbmd0aCA9IGdfdW5pY2hhcl90b191dGY4KHdjLCBidWZmZXIpOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKGxlbmd0aCwgMCk7Ci0KLSAgICBHTGlzdCogaXRlbXMgPSBwYW5nb19p
dGVtaXplKGNvbnRleHQsIGJ1ZmZlciwgMCwgbGVuZ3RoLCBOVUxMLCBOVUxMKTsKLQotICAgIGlm
IChnX2xpc3RfbGVuZ3RoKGl0ZW1zKSA9PSAxKSB7Ci0gICAgICAgIFBhbmdvSXRlbSogaXRlbSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29JdGVtKj4oaXRlbXMtPmRhdGEpOwotICAgICAgICBQYW5n
b0ZvbnQqIHRtcEZvbnQgPSBpdGVtLT5hbmFseXNpcy5mb250OwotICAgICAgICBpdGVtLT5hbmFs
eXNpcy5mb250ID0gZm9udDsKLQotICAgICAgICBQYW5nb0dseXBoU3RyaW5nKiBnbHlwaHMgPSBw
YW5nb19nbHlwaF9zdHJpbmdfbmV3KCk7Ci0gICAgICAgIHBhbmdvX3NoYXBlKGJ1ZmZlciwgbGVu
Z3RoLCAmaXRlbS0+YW5hbHlzaXMsIGdseXBocyk7Ci0KLSAgICAgICAgaXRlbS0+YW5hbHlzaXMu
Zm9udCA9IHRtcEZvbnQ7Ci0KLSAgICAgICAgaWYgKGdseXBocy0+bnVtX2dseXBocyA9PSAxKQot
ICAgICAgICAgICAgcmVzdWx0ID0gZ2x5cGhzLT5nbHlwaHNbMF0uZ2x5cGg7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGdfd2FybmluZygiZGlkbid0IGdldCAxIGdseXBoIGJ1dCAlZCIsIGds
eXBocy0+bnVtX2dseXBocyk7Ci0KLSAgICAgICAgcGFuZ29fZ2x5cGhfc3RyaW5nX2ZyZWUoZ2x5
cGhzKTsKLSAgICB9Ci0KLSAgICBnX2xpc3RfZm9yZWFjaChpdGVtcywgKEdGdW5jKXBhbmdvX2l0
ZW1fZnJlZSwgTlVMTCk7Ci0gICAgZ19saXN0X2ZyZWUoaXRlbXMpOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2lt
cGxlRm9udERhdGEqIGZvbnREYXRhKQotewotICAgIC8vIFRoZSBidWZmZXJMZW5ndGggd2lsbCBi
ZSBncmVhdGVyIHRoYW4gdGhlIGdseXBoIHBhZ2Ugc2l6ZSBpZiB0aGUgYnVmZmVyIGhhcyBVbmlj
b2RlIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycy4KLSAgICAvLyBXZSB3b24ndCBzdXBwb3J0IHRo
aXMgZm9yIG5vdy4KLSAgICBpZiAoYnVmZmVyTGVuZ3RoID4gR2x5cGhQYWdlOjpzaXplKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5t
X2ZvbnQgfHwgZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm1fZm9udCA9PSByZWludGVycHJldF9j
YXN0PFBhbmdvRm9udCo+KC0xKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBo
YXZlR2x5cGhzID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgIEdseXBoIGdseXBoID0gcGFuZ29fZm9udF9nZXRfZ2x5cGgoZm9udERh
dGEtPnBsYXRmb3JtRGF0YSgpLm1fZm9udCwgZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm1fY29u
dGV4dCwgYnVmZmVyW2ldKTsKLSAgICAgICAgaWYgKCFnbHlwaCkKLSAgICAgICAgICAgIHNldEds
eXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIDAsIDApOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGdseXBoLCBmb250RGF0YSk7
Ci0gICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiBoYXZlR2x5cGhzOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9TaW1wbGVGb250RGF0YVBhbmdvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YVBhbmdvLmNwcAkocmV2aXNpb24gNzAz
MDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YVBhbmdv
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJpZ2h0
IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgotICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEu
aCIKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRl
ICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJH
bHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybUluaXQoKQotewotICAgIGNhaXJvX2ZvbnRfZXh0ZW50c190IGZvbnRfZXh0ZW50czsKLSAg
ICBjYWlyb190ZXh0X2V4dGVudHNfdCB0ZXh0X2V4dGVudHM7Ci0gICAgY2Fpcm9fc2NhbGVkX2Zv
bnRfZXh0ZW50cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQsICZmb250X2V4dGVudHMpOwot
ICAgIG1fYXNjZW50ID0gc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKGZvbnRfZXh0ZW50cy5hc2Nl
bnQpKTsKLSAgICBtX2Rlc2NlbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoZm9udF9leHRl
bnRzLmRlc2NlbnQpKTsKLSAgICBtX2xpbmVTcGFjaW5nID0gc3RhdGljX2Nhc3Q8aW50Pihscm91
bmRmKGZvbnRfZXh0ZW50cy5oZWlnaHQpKTsKLSAgICAvLyBUaGVyZSBzZWVtcyB0byBiZSBzb21l
IHJvdW5kaW5nIGVycm9yIGluIGNhaXJvIChvciBpbiBob3cgd2UKLSAgICAvLyB1c2UgY2Fpcm8p
IHdpdGggc29tZSBmb250cywgbGlrZSBEZWphVnUgU2FucyBNb25vLCB3aGljaCBtYWtlcwotICAg
IC8vIGNhaXJvIHJlcG9ydCBhIGhlaWdodCBzbWFsbGVyIHRoYW4gYXNjZW50ICsgZGVzY2VudCwg
d2hpY2ggaXMKLSAgICAvLyB3cm9uZyBhbmQgY29uZnVzZXMgV2ViQ29yZSdzIGxheW91dCBzeXN0
ZW0uIFdvcmthcm91bmQgdGhpcwotICAgIC8vIHdoaWxlIHdlIGZpZ3VyZSBvdXQgd2hhdCdzIGdv
aW5nIG9uLgotICAgIGlmIChtX2xpbmVTcGFjaW5nIDwgbV9hc2NlbnQgKyBtX2Rlc2NlbnQpCi0g
ICAgICAgIG1fbGluZVNwYWNpbmcgPSBtX2FzY2VudCArIG1fZGVzY2VudDsKLSAgICBjYWlyb19z
Y2FsZWRfZm9udF90ZXh0X2V4dGVudHMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LCAieCIs
ICZ0ZXh0X2V4dGVudHMpOwotICAgIG1feEhlaWdodCA9IHRleHRfZXh0ZW50cy5oZWlnaHQ7Ci0g
ICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF9leHRlbnRzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVk
Rm9udCwgIiAiLCAmdGV4dF9leHRlbnRzKTsKLSAgICBtX3NwYWNlV2lkdGggPSAgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHRleHRfZXh0ZW50cy54X2FkdmFuY2UpOwotICAgIG1fbGluZUdhcCA9IG1fbGlu
ZVNwYWNpbmcgLSBtX2FzY2VudCAtIG1fZGVzY2VudDsKLSAgICBtX3N5bnRoZXRpY0JvbGRPZmZz
ZXQgPSBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkgPyAxLjBmIDogMC5mOwotfQotCi12
b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQotewotICAgIG1fYXZn
Q2hhcldpZHRoID0gMC5mOwotICAgIG1fbWF4Q2hhcldpZHRoID0gMC5mOwotICAgIGluaXRDaGFy
V2lkdGhzKCk7Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCi17
Ci0gICAgZGVsZXRlIG1fc21hbGxDYXBzRm9udERhdGE7Ci0gICAgbV9zbWFsbENhcHNGb250RGF0
YSA9IDA7Ci19Ci0KLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX3NtYWxsQ2Fwc0ZvbnREYXRhKSB7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBk
ZXNjID0gRm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIGRlc2Muc2V0
U3BlY2lmaWVkU2l6ZSgwLjcwZiAqIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSk7Ci0g
ICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhKGRlc2MsIGRlc2MuZmFtaWx5KCku
ZmFtaWx5KCkpOwotICAgICAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gbmV3IFNpbXBsZUZvbnRE
YXRhKHBsYXRmb3JtRGF0YSk7Ci0gICAgfQotICAgIHJldHVybiBtX3NtYWxsQ2Fwc0ZvbnREYXRh
OwotfQotCi1ib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAgYm9vbCByZXN1bHQgPSB0
cnVlOwotCi0gICAgUGFuZ29Db3ZlcmFnZSogY292ZXJhZ2UgPSBwYW5nb19mb250X2dldF9jb3Zl
cmFnZShtX3BsYXRmb3JtRGF0YS5tX2ZvbnQsIHBhbmdvX2xhbmd1YWdlX2dldF9kZWZhdWx0KCkp
OwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBpZiAo
UEFOR09fQ09WRVJBR0VfTk9ORSA9PSBwYW5nb19jb3ZlcmFnZV9nZXQoY292ZXJhZ2UsIGNoYXJh
Y3RlcnNbaV0pKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcGFuZ29fY292ZXJhZ2VfdW5yZWYoY292ZXJh
Z2UpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0
ZXJtaW5lUGl0Y2goKQotewotICAgIGlmIChpc0N1c3RvbUZvbnQoKSkgewotICAgICAgICBtX3Ry
ZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBt
X3RyZWF0QXNGaXhlZFBpdGNoID0gbV9wbGF0Zm9ybURhdGEuaXNGaXhlZFBpdGNoKCk7Ci19Ci0K
LUZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci19Ci0KLWZsb2F0IFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCk7Ci0KLSAgICBjYWlyb19nbHlwaF90IGNn
bHlwaCA9IHsgZ2x5cGgsIDAsIDAgfTsKLSAgICBjYWlyb190ZXh0X2V4dGVudHNfdCBleHRlbnRz
OwotICAgIGNhaXJvX3NjYWxlZF9mb250X2dseXBoX2V4dGVudHMobV9wbGF0Zm9ybURhdGEubV9z
Y2FsZWRGb250LCAmY2dseXBoLCAxLCAmZXh0ZW50cyk7Ci0KLSAgICBmbG9hdCB3aWR0aCA9IChm
bG9hdCltX3NwYWNlV2lkdGg7Ci0gICAgaWYgKGNhaXJvX3NjYWxlZF9mb250X3N0YXR1cyhtX3Bs
YXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQpID09IENBSVJPX1NUQVRVU19TVUNDRVNTICYmIGV4dGVu
dHMueF9hZHZhbmNlICE9IDApCi0gICAgICAgIHdpZHRoID0gKGZsb2F0KWV4dGVudHMueF9hZHZh
bmNlOwotCi0gICAgcmV0dXJuIHdpZHRoOyAgICAKLX0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250Q2FjaGVQYW5nby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250Q2FjaGVQYW5nby5jcHAJKHJldmlzaW9u
IDcwMjg3KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVQYW5n
by5jcHA6NzAyODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDYWNo
ZVBhbmdvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisj
aW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIk93blB0ckNhaXJvLmgiCisjaW5jbHVkZSAiU2lt
cGxlRm9udERhdGEuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3ZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQoreworICAgIGlmICgh
Rm9udFBsYXRmb3JtRGF0YTo6aW5pdCgpKQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFy
YWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVu
Z3RoKQoreworICAgIHJldHVybiAwOworfQorCitTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpn
ZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQoreworICAgIHJldHVy
biAwOworfQorCitTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJh
Y2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQoreworICAgIC8v
IEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0aGUgdXNlcidzIGRl
ZmF1bHQgZm9udCBoZXJlLgorICAgIC8vIEZvciBub3cgd2UnbGwgcGljayB0aGUgZGVmYXVsdCB0
aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFueSBwcmVmcy4KKyAgICBz
dGF0aWMgQXRvbWljU3RyaW5nIHRpbWVzU3RyKCJUaW1lcyBOZXcgUm9tYW4iKTsKKyAgICByZXR1
cm4gZ2V0Q2FjaGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0cik7Cit9CisKK3Zv
aWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWls
eU5hbWUsIFZlY3Rvcjx1bnNpZ25lZD4mIHRyYWl0c01hc2tzKQoreworfQorCitGb250UGxhdGZv
cm1EYXRhKiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQorewor
ICAgIHJldHVybiBuZXcgRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseSk7
Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YVBhbmdvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3BhbmdvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHAJKHJldmlzaW9uIDcw
Mjg3KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q3VzdG9tUGxhdGZv
cm1EYXRhUGFuZ28uY3BwOjcwMjg3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5n
by9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2Vy
LmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmgiCisKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJGb250UGxh
dGZvcm1EYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YTo6fkZvbnRDdXN0b21QbGF0Zm9ybURhdGEoKQoreworfQorCitGb250UGxhdGZvcm1EYXRh
IEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEoaW50IHNpemUsIGJvb2wg
Ym9sZCwgYm9vbCBpdGFsaWMsIEZvbnRPcmllbnRhdGlvbiwgRm9udFJlbmRlcmluZ01vZGUpCit7
CisgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEobV9mb250RmFjZSwgc2l6ZSwgYm9sZCwgaXRh
bGljKTsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZURhdGEodm9pZCogZGF0YSkKK3sKKyAgICBz
dGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihkYXRhKS0+ZGVyZWYoKTsKK30KKworRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXIq
IGJ1ZmZlcikKK3sKKyAgICAvLyBGSVhNRTogd2UgbmVlZCBzdXBwb3J0IGluIHBhbmdvIHRvIHJl
YWQgZm9udHMgZnJvbSBtZW1vcnkgdG8gaW1wbGVtZW50IHRoaXMueQorICAgIHJldHVybiAwOwor
fQorCitib29sIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OnN1cHBvcnRzRm9ybWF0KGNvbnN0IFN0
cmluZyYgLyogZm9ybWF0ICovKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGxhdGZvcm1EYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGxhdGZvcm1EYXRh
LmgJKHJldmlzaW9uIDcwMjg3KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
b250UGxhdGZvcm1EYXRhUGFuZ28uaDo3MDI4NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcGFuZ28vRm9udFBsYXRmb3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHly
aWdodCAoQykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEZvbnRQbGF0Zm9ybURhdGFQYW5nb19oCisjZGVm
aW5lIEZvbnRQbGF0Zm9ybURhdGFQYW5nb19oCisKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24u
aCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVk
ZSA8cGFuZ28vcGFuZ29jYWlyby5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7CitwdWJsaWM6CisgICAg
Rm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAg
IDogbV9jb250ZXh0KDApCisgICAgICAgICwgbV9mb250KGhhc2hUYWJsZURlbGV0ZWRGb250VmFs
dWUoKSkKKyAgICAgICAgLCBtX3NpemUoMCkKKyAgICAgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFs
c2UpCisgICAgICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNlKQorICAgICAgICAsIG1fc2Nh
bGVkRm9udCgwKQorICAgICAgICB7IH0KKworICAgIEZvbnRQbGF0Zm9ybURhdGEoKQorICAgICAg
ICA6IG1fY29udGV4dCgwKQorICAgICAgICAsIG1fZm9udCgwKQorICAgICAgICAsIG1fc2l6ZSgw
KQorICAgICAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKKyAgICAgICAgLCBtX3N5bnRoZXRp
Y09ibGlxdWUoZmFsc2UpCisgICAgICAgICwgbV9zY2FsZWRGb250KDApCisgICAgICAgIHsgfQor
CisgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGZhbWlseSk7CisgICAgRm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2Vf
dCogZm9udEZhY2UsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpOworICAgIEZv
bnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7CisgICAg
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CisgICAgfkZvbnRQbGF0
Zm9ybURhdGEoKTsKKworICAgIHN0YXRpYyBib29sIGluaXQoKTsKKyAgICBib29sIGlzRml4ZWRQ
aXRjaCgpOworICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICB2
b2lkIHNldFNpemUoZmxvYXQgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CisgICAgYm9vbCBzeW50
aGV0aWNCb2xkKCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNCb2xkOyB9CisgICAgYm9vbCBz
eW50aGV0aWNPYmxpcXVlKCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNPYmxpcXVlOyB9CisK
KyAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250KCkgY29uc3QgeyByZXR1cm4gbV9z
Y2FsZWRGb250OyB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHVpbnRwdHJfdCBoYXNoQ29kZXNbMV0gPSB7IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Piht
X3NjYWxlZEZvbnQpIH07CisgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChy
ZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgc2l6ZW9mKGhhc2hDb2RlcykgLyBz
aXplb2YoVUNoYXIpKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYpIGNvbnN0OworICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9yPShjb25z
dCBGb250UGxhdGZvcm1EYXRhJik7CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9mb250ID09IGhhc2hUYWJsZURlbGV0ZWRG
b250VmFsdWUoKTsKKyAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIGRlc2NyaXB0
aW9uKCkgY29uc3Q7CisjZW5kaWYKKworICAgIHN0YXRpYyBQYW5nb0ZvbnRNYXAqIG1fZm9udE1h
cDsKKyAgICBzdGF0aWMgR0hhc2hUYWJsZSogbV9oYXNoVGFibGU7CisgICAgUGFuZ29Db250ZXh0
KiBtX2NvbnRleHQ7CisgICAgUGFuZ29Gb250KiBtX2ZvbnQ7CisgICAgZmxvYXQgbV9zaXplOwor
ICAgIGJvb2wgbV9zeW50aGV0aWNCb2xkOworICAgIGJvb2wgbV9zeW50aGV0aWNPYmxpcXVlOwor
ICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIG1fc2NhbGVkRm9udDsKK3ByaXZhdGU6CisgICAgc3Rh
dGljIFBhbmdvRm9udCAqaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpIHsgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpOyB9Cit9OworCit9CisKKyNlbmRpZiAvLyBGb250
UGxhdGZvcm1EYXRhUGFuZ29faApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5n
by9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBsYXRmb3JtRGF0YVBhbmdvLmNwcAkocmV2aXNpb24gNzAy
ODcpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFQ
YW5nby5jcHA6NzAyODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQ
bGF0Zm9ybURhdGFQYW5nby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAy
MDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAy
MDA5IElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNp
bmNsdWRlIDxwYW5nby9wYW5nby5oPgorI2luY2x1ZGUgPHBhbmdvL3BhbmdvY2Fpcm8uaD4KKwor
Ly8gVXNlIGNhaXJvLWZ0IGkgYSByZWNlbnQgZW5vdWdoIFBhbmdvIHZlcnNpb24gaXNuJ3QgYXZh
aWxhYmxlCisjaWYgIVBBTkdPX1ZFUlNJT05fQ0hFQ0soMSwxOCwwKQorI2luY2x1ZGUgPGNhaXJv
LWZ0Lmg+CisjaW5jbHVkZSA8cGFuZ28vcGFuZ29mYy1mb250bWFwLmg+CisjZW5kaWYKKyNpbmNs
dWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFuZ29Gb250TWFwKiBG
b250UGxhdGZvcm1EYXRhOjptX2ZvbnRNYXAgPSAwOworR0hhc2hUYWJsZSogRm9udFBsYXRmb3Jt
RGF0YTo6bV9oYXNoVGFibGUgPSAwOworCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNT
dHJpbmcmIGZhbWlseU5hbWUpCisgICAgOiBtX2NvbnRleHQoMCkKKyAgICAsIG1fZm9udCgwKQor
ICAgICwgbV9zaXplKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSkKKyAgICAsIG1fc3lu
dGhldGljQm9sZChmYWxzZSkKKyAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKKyAgICAs
IG1fc2NhbGVkRm9udCgwKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGE6OmluaXQoKTsKKworICAg
IENTdHJpbmcgc3RvcmVkX2ZhbWlseSA9IGZhbWlseU5hbWUuc3RyaW5nKCkudXRmOCgpOworICAg
IGNoYXIgY29uc3QqIGZhbWlsaWVzW10gPSB7CisgICAgICBzdG9yZWRfZmFtaWx5LmRhdGEoKSwK
KyAgICAgIE5VTEwKKyAgICB9OworCisgICAgc3dpdGNoIChmb250RGVzY3JpcHRpb24uZ2VuZXJp
Y0ZhbWlseSgpKSB7CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5OgorICAg
ICAgICBmYW1pbGllc1sxXSA9ICJzZXJpZiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9u
dERlc2NyaXB0aW9uOjpTYW5zU2VyaWZGYW1pbHk6CisgICAgICAgIGZhbWlsaWVzWzFdID0gInNh
bnMiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNl
RmFtaWx5OgorICAgICAgICBmYW1pbGllc1sxXSA9ICJtb25vc3BhY2UiOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHk6CisgICAgY2FzZSBGb250RGVz
Y3JpcHRpb246OlN0YW5kYXJkRmFtaWx5OgorICAgIGRlZmF1bHQ6CisgICAgICAgIGZhbWlsaWVz
WzFdID0gInNhbnMiOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBQYW5nb0ZvbnREZXNj
cmlwdGlvbiogZGVzY3JpcHRpb24gPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX25ldygpOworICAg
IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fc2V0X2Fic29sdXRlX3NpemUoZGVzY3JpcHRpb24sIGZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAqIFBBTkdPX1NDQUxFKTsKKworICAgIC8vIEZJ
WE1FOiBNYXAgYWxsIEZvbnRXZWlnaHQgdmFsdWVzIHRvIFBhbmdvIGZvbnQgd2VpZ2h0cy4KKyAg
ICBpZiAoZm9udERlc2NyaXB0aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHQ2MDApCisgICAgICAg
IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fc2V0X3dlaWdodChkZXNjcmlwdGlvbiwgUEFOR09fV0VJ
R0hUX0JPTEQpOworICAgIGlmIChmb250RGVzY3JpcHRpb24uaXRhbGljKCkpCisgICAgICAgIHBh
bmdvX2ZvbnRfZGVzY3JpcHRpb25fc2V0X3N0eWxlKGRlc2NyaXB0aW9uLCBQQU5HT19TVFlMRV9J
VEFMSUMpOworCisjaWYgUEFOR09fVkVSU0lPTl9DSEVDSygxLDIxLDUpICAgLy8gZGVwcmVjYXRl
ZCBpbiAxLjIxCisgICAgbV9jb250ZXh0ID0gcGFuZ29fZm9udF9tYXBfY3JlYXRlX2NvbnRleHQo
bV9mb250TWFwKTsKKyNlbHNlCisgICAgbV9jb250ZXh0ID0gcGFuZ29fY2Fpcm9fZm9udF9tYXBf
Y3JlYXRlX2NvbnRleHQoUEFOR09fQ0FJUk9fRk9OVF9NQVAobV9mb250TWFwKSk7CisjZW5kaWYK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgIW1fZm9udCAmJiBpIDwgR19OX0VMRU1FTlRT
KGZhbWlsaWVzKTsgaSsrKSB7CisgICAgICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fc2V0X2Zh
bWlseShkZXNjcmlwdGlvbiwgZmFtaWxpZXNbaV0pOworICAgICAgICBwYW5nb19jb250ZXh0X3Nl
dF9mb250X2Rlc2NyaXB0aW9uKG1fY29udGV4dCwgZGVzY3JpcHRpb24pOworICAgICAgICBtX2Zv
bnQgPSBwYW5nb19mb250X21hcF9sb2FkX2ZvbnQobV9mb250TWFwLCBtX2NvbnRleHQsIGRlc2Ny
aXB0aW9uKTsKKyAgICB9CisKKyNpZiBQQU5HT19WRVJTSU9OX0NIRUNLKDEsMTgsMCkKKyAgICBp
ZiAobV9mb250KQorICAgICAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9yZWZl
cmVuY2UocGFuZ29fY2Fpcm9fZm9udF9nZXRfc2NhbGVkX2ZvbnQoUEFOR09fQ0FJUk9fRk9OVCht
X2ZvbnQpKSk7CisjZWxzZQorICAgIC8vIFRoaXMgY29tcGF0aWJpbGl0eSBjb2RlIGZvciBvbGRl
ciB2ZXJzaW9ucyBvZiBQYW5nbyBpcyBub3Qgd2VsbC10ZXN0ZWQuCisgICAgaWYgKG1fZm9udCkg
eworICAgICAgICBQYW5nb0ZjRm9udCogZmNmb250ID0gUEFOR09fRkNfRk9OVChtX2ZvbnQpOwor
ICAgICAgICBjYWlyb19mb250X2ZhY2VfdCogZmFjZSA9IGNhaXJvX2Z0X2ZvbnRfZmFjZV9jcmVh
dGVfZm9yX3BhdHRlcm4oZmNmb250LT5mb250X3BhdHRlcm4pOworICAgICAgICBkb3VibGUgc2l6
ZTsKKyAgICAgICAgaWYgKEZjUGF0dGVybkdldERvdWJsZShmY2ZvbnQtPmZvbnRfcGF0dGVybiwg
RkNfUElYRUxfU0laRSwgMCwgJnNpemUpICE9IEZjUmVzdWx0TWF0Y2gpCisgICAgICAgICAgICBz
aXplID0gMTIuMDsKKyAgICAgICAgY2Fpcm9fbWF0cml4X3QgZm9udE1hdHJpeDsKKyAgICAgICAg
Y2Fpcm9fbWF0cml4X2luaXRfc2NhbGUoJmZvbnRNYXRyaXgsIHNpemUsIHNpemUpOworICAgICAg
ICBjYWlyb19mb250X29wdGlvbnNfdCogZm9udE9wdGlvbnM7CisgICAgICAgIGlmIChwYW5nb19j
YWlyb19jb250ZXh0X2dldF9mb250X29wdGlvbnMobV9jb250ZXh0KSkKKyAgICAgICAgICAgIGZv
bnRPcHRpb25zID0gY2Fpcm9fZm9udF9vcHRpb25zX2NvcHkocGFuZ29fY2Fpcm9fY29udGV4dF9n
ZXRfZm9udF9vcHRpb25zKG1fY29udGV4dCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBm
b250T3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsKKyAgICAgICAgY2Fpcm9f
bWF0cml4X3QgY3RtOworICAgICAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsK
KyAgICAgICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfY3JlYXRlKGZhY2UsICZm
b250TWF0cml4LCAmY3RtLCBmb250T3B0aW9ucyk7CisgICAgICAgIGNhaXJvX2ZvbnRfb3B0aW9u
c19kZXN0cm95KGZvbnRPcHRpb25zKTsKKyAgICAgICAgY2Fpcm9fZm9udF9mYWNlX2Rlc3Ryb3ko
ZmFjZSk7CisgICAgfQorI2VuZGlmCisgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKGRl
c2NyaXB0aW9uKTsKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9h
dCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKQorICAgIDogbV9jb250ZXh0KDApCisgICAg
LCBtX2ZvbnQoMCkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9zeW50aGV0aWNCb2xkKGJv
bGQpCisgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoaXRhbGljKQorICAgICwgbV9zY2FsZWRGb250
KDApCit7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY2Fpcm9fZm9u
dF9mYWNlX3QqIGZvbnRGYWNlLCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKQor
ICAgIDogbV9jb250ZXh0KDApCisgICAgLCBtX2ZvbnQoMCkKKyAgICAsIG1fc2l6ZShzaXplKQor
ICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCisgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoaXRh
bGljKQorICAgICwgbV9zY2FsZWRGb250KDApCit7CisgICAgY2Fpcm9fbWF0cml4X3QgZm9udE1h
dHJpeDsKKyAgICBjYWlyb19tYXRyaXhfaW5pdF9zY2FsZSgmZm9udE1hdHJpeCwgc2l6ZSwgc2l6
ZSk7CisgICAgY2Fpcm9fbWF0cml4X3QgY3RtOworICAgIGNhaXJvX21hdHJpeF9pbml0X2lkZW50
aXR5KCZjdG0pOworICAgIGNhaXJvX2ZvbnRfb3B0aW9uc190KiBvcHRpb25zID0gY2Fpcm9fZm9u
dF9vcHRpb25zX2NyZWF0ZSgpOworCisgICAgLy8gV2UgZm9yY2UgYW50aWFsaWFzaW5nIGFuZCBk
aXNhYmxlIGhpbnRpbmcgdG8gcHJvdmlkZSBjb25zaXN0ZW50CisgICAgLy8gdHlwb2dyYXBoaWMg
cXVhbGl0aWVzIGZvciBjdXN0b20gZm9udHMgb24gYWxsIHBsYXRmb3Jtcy4KKyAgICBjYWlyb19m
b250X29wdGlvbnNfc2V0X2hpbnRfc3R5bGUob3B0aW9ucywgQ0FJUk9fSElOVF9TVFlMRV9OT05F
KTsKKyAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2FudGlhbGlhcyhvcHRpb25zLCBDQUlST19B
TlRJQUxJQVNfR1JBWSk7CisKKyAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9j
cmVhdGUoZm9udEZhY2UsICZmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsKKyAgICBjYWlyb19m
b250X29wdGlvbnNfZGVzdHJveShvcHRpb25zKTsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRh
Ojppbml0KCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlm
IChpbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaW5pdGlhbGl6ZWQgPSB0
cnVlOworCisgICAgaWYgKCFtX2ZvbnRNYXApCisgICAgICAgIG1fZm9udE1hcCA9IHBhbmdvX2Nh
aXJvX2ZvbnRfbWFwX2dldF9kZWZhdWx0KCk7CisgICAgaWYgKCFtX2hhc2hUYWJsZSkgeworICAg
ICAgICBQYW5nb0ZvbnRGYW1pbHkqKiBmYW1pbGllcyA9IDA7CisgICAgICAgIGludCBuX2ZhbWls
aWVzID0gMDsKKworICAgICAgICBtX2hhc2hUYWJsZSA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbChn
X3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwgZ19mcmVlLCBnX29iamVjdF91bnJlZik7CisKKyAgICAg
ICAgcGFuZ29fZm9udF9tYXBfbGlzdF9mYW1pbGllcyhtX2ZvbnRNYXAsICZmYW1pbGllcywgJm5f
ZmFtaWxpZXMpOworCisgICAgICAgIGZvciAoaW50IGZhbWlseSA9IDA7IGZhbWlseSA8IG5fZmFt
aWxpZXM7IGZhbWlseSsrKQorICAgICAgICAgICAgICAgIGdfaGFzaF90YWJsZV9pbnNlcnQobV9o
YXNoVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3N0cmR1cChw
YW5nb19mb250X2ZhbWlseV9nZXRfbmFtZShmYW1pbGllc1tmYW1pbHldKSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnX29iamVjdF9yZWYoZmFtaWxpZXNbZmFtaWx5XSkp
OworCisgICAgICAgIGdfZnJlZShmYW1pbGllcyk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkKK3sKKyAgICBpZiAo
bV9mb250ICYmIG1fZm9udCAhPSByZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+KC0xKSkgewor
ICAgICAgICBnX29iamVjdF91bnJlZihtX2ZvbnQpOworICAgICAgICBtX2ZvbnQgPSAwOworICAg
IH0KKworICAgIGlmIChtX2NvbnRleHQpIHsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobV9jb250
ZXh0KTsKKyAgICAgICAgbV9jb250ZXh0ID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9zY2FsZWRG
b250KSB7CisgICAgICAgIGNhaXJvX3NjYWxlZF9mb250X2Rlc3Ryb3kobV9zY2FsZWRGb250KTsK
KyAgICAgICAgbV9zY2FsZWRGb250ID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgRm9udFBsYXRmb3Jt
RGF0YTo6aXNGaXhlZFBpdGNoKCkKK3sKKyAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiogZGVzY3Jp
cHRpb24gPSBwYW5nb19mb250X2Rlc2NyaWJlX3dpdGhfYWJzb2x1dGVfc2l6ZShtX2ZvbnQpOwor
ICAgIFBhbmdvRm9udEZhbWlseSogZmFtaWx5ID0gcmVpbnRlcnByZXRfY2FzdDxQYW5nb0ZvbnRG
YW1pbHkqPihnX2hhc2hfdGFibGVfbG9va3VwKG1faGFzaFRhYmxlLCBwYW5nb19mb250X2Rlc2Ny
aXB0aW9uX2dldF9mYW1pbHkoZGVzY3JpcHRpb24pKSk7CisgICAgcGFuZ29fZm9udF9kZXNjcmlw
dGlvbl9mcmVlKGRlc2NyaXB0aW9uKTsKKyAgICByZXR1cm4gcGFuZ29fZm9udF9mYW1pbHlfaXNf
bW9ub3NwYWNlKGZhbWlseSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURh
dGE6Om9wZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKK3sKKyAgICAvLyBD
aGVjayBmb3Igc2VsZi1hc3NpZ25tZW50LgorICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworCisgICAgbV9zaXplID0gb3RoZXIubV9zaXplOworICAgIG1fc3lu
dGhldGljQm9sZCA9IG90aGVyLm1fc3ludGhldGljQm9sZDsKKyAgICBtX3N5bnRoZXRpY09ibGlx
dWUgPSBvdGhlci5tX3N5bnRoZXRpY09ibGlxdWU7CisKKyAgICBpZiAob3RoZXIubV9zY2FsZWRG
b250KQorICAgICAgICBjYWlyb19zY2FsZWRfZm9udF9yZWZlcmVuY2Uob3RoZXIubV9zY2FsZWRG
b250KTsKKyAgICBpZiAobV9zY2FsZWRGb250KQorICAgICAgICBjYWlyb19zY2FsZWRfZm9udF9k
ZXN0cm95KG1fc2NhbGVkRm9udCk7CisgICAgbV9zY2FsZWRGb250ID0gb3RoZXIubV9zY2FsZWRG
b250OworCisgICAgaWYgKG90aGVyLm1fZm9udCkKKyAgICAgICAgZ19vYmplY3RfcmVmKG90aGVy
Lm1fZm9udCk7CisgICAgaWYgKG1fZm9udCkKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobV9mb250
KTsKKyAgICBtX2ZvbnQgPSBvdGhlci5tX2ZvbnQ7CisKKyAgICBpZiAob3RoZXIubV9jb250ZXh0
KQorICAgICAgICBnX29iamVjdF9yZWYob3RoZXIubV9jb250ZXh0KTsKKyAgICBpZiAobV9jb250
ZXh0KQorICAgICAgICBnX29iamVjdF91bnJlZihtX2NvbnRleHQpOworICAgIG1fY29udGV4dCA9
IG90aGVyLm1fY29udGV4dDsKKworICAgIHJldHVybiAqdGhpczsKK30KKworRm9udFBsYXRmb3Jt
RGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKKyAg
ICA6IG1fY29udGV4dCgwKQorICAgICwgbV9mb250KDApCisgICAgLCBtX3NjYWxlZEZvbnQoMCkK
K3sKKyAgICAqdGhpcyA9IG90aGVyOworfQorCitib29sIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJh
dG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG1f
Zm9udCA9PSBvdGhlci5tX2ZvbnQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtX2Zv
bnQgPT0gMCB8fCBtX2ZvbnQgPT0gcmVpbnRlcnByZXRfY2FzdDxQYW5nb0ZvbnQqPigtMSkKKyAg
ICAgICAgfHwgb3RoZXIubV9mb250ID09IDAgfHwgb3RoZXIubV9mb250ID09IHJlaW50ZXJwcmV0
X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUGFuZ29G
b250RGVzY3JpcHRpb24qIHRoaXNEZXNjID0gcGFuZ29fZm9udF9kZXNjcmliZShtX2ZvbnQpOwor
ICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiBvdGhlckRlc2MgPSBwYW5nb19mb250X2Rlc2NyaWJl
KG90aGVyLm1fZm9udCk7CisgICAgYm9vbCByZXN1bHQgPSBwYW5nb19mb250X2Rlc2NyaXB0aW9u
X2VxdWFsKHRoaXNEZXNjLCBvdGhlckRlc2MpOworICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25f
ZnJlZShvdGhlckRlc2MpOworICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZSh0aGlzRGVz
Yyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmbmRlZiBOREVCVUcKK1N0cmluZyBGb250
UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygp
OworfQorI2VuZGlmCisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28v
R2x5cGhQYWdlVHJlZU5vZGVQYW5nby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9wYW5nby9HbHlwaFBhZ2VUcmVlTm9kZVBhbmdvLmNwcAkocmV2aXNpb24gNzAy
ODcpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dseXBoUGFnZVRyZWVOb2Rl
UGFuZ28uY3BwOjcwMjg3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9HbHlw
aFBhZ2VUcmVlTm9kZVBhbmdvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21h
aWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHAudG9rZXJAY29sbGFi
b3JhLmNvLnVrPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVy
IFVTQSwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9k
ZS5oIgorCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlIDxwYW5nby9wYW5n
by1mb250Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFBhbmdvR2x5cGggcGFu
Z29fZm9udF9nZXRfZ2x5cGgoUGFuZ29Gb250KiBmb250LCBQYW5nb0NvbnRleHQqIGNvbnRleHQs
IGd1bmljaGFyIHdjKQoreworICAgIFBhbmdvR2x5cGggcmVzdWx0ID0gMDsKKyAgICBnY2hhciBi
dWZmZXJbN107CisKKyAgICBnaW50ICBsZW5ndGggPSBnX3VuaWNoYXJfdG9fdXRmOCh3YywgYnVm
ZmVyKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChsZW5ndGgsIDApOworCisgICAgR0xpc3Qq
IGl0ZW1zID0gcGFuZ29faXRlbWl6ZShjb250ZXh0LCBidWZmZXIsIDAsIGxlbmd0aCwgTlVMTCwg
TlVMTCk7CisKKyAgICBpZiAoZ19saXN0X2xlbmd0aChpdGVtcykgPT0gMSkgeworICAgICAgICBQ
YW5nb0l0ZW0qIGl0ZW0gPSByZWludGVycHJldF9jYXN0PFBhbmdvSXRlbSo+KGl0ZW1zLT5kYXRh
KTsKKyAgICAgICAgUGFuZ29Gb250KiB0bXBGb250ID0gaXRlbS0+YW5hbHlzaXMuZm9udDsKKyAg
ICAgICAgaXRlbS0+YW5hbHlzaXMuZm9udCA9IGZvbnQ7CisKKyAgICAgICAgUGFuZ29HbHlwaFN0
cmluZyogZ2x5cGhzID0gcGFuZ29fZ2x5cGhfc3RyaW5nX25ldygpOworICAgICAgICBwYW5nb19z
aGFwZShidWZmZXIsIGxlbmd0aCwgJml0ZW0tPmFuYWx5c2lzLCBnbHlwaHMpOworCisgICAgICAg
IGl0ZW0tPmFuYWx5c2lzLmZvbnQgPSB0bXBGb250OworCisgICAgICAgIGlmIChnbHlwaHMtPm51
bV9nbHlwaHMgPT0gMSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGdseXBocy0+Z2x5cGhzWzBdLmds
eXBoOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnX3dhcm5pbmcoImRpZG4ndCBnZXQgMSBn
bHlwaCBidXQgJWQiLCBnbHlwaHMtPm51bV9nbHlwaHMpOworCisgICAgICAgIHBhbmdvX2dseXBo
X3N0cmluZ19mcmVlKGdseXBocyk7CisgICAgfQorCisgICAgZ19saXN0X2ZvcmVhY2goaXRlbXMs
IChHRnVuYylwYW5nb19pdGVtX2ZyZWUsIE5VTEwpOworICAgIGdfbGlzdF9mcmVlKGl0ZW1zKTsK
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJM
ZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3sKKyAgICAvLyBUaGUgYnVm
ZmVyTGVuZ3RoIHdpbGwgYmUgZ3JlYXRlciB0aGFuIHRoZSBnbHlwaCBwYWdlIHNpemUgaWYgdGhl
IGJ1ZmZlciBoYXMgVW5pY29kZSBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMuCisgICAgLy8gV2Ug
d29uJ3Qgc3VwcG9ydCB0aGlzIGZvciBub3cuCisgICAgaWYgKGJ1ZmZlckxlbmd0aCA+IEdseXBo
UGFnZTo6c2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFmb250RGF0YS0+
cGxhdGZvcm1EYXRhKCkubV9mb250IHx8IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5tX2ZvbnQg
PT0gcmVpbnRlcnByZXRfY2FzdDxQYW5nb0ZvbnQqPigtMSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBHbHlwaCBnbHlwaCA9IHBhbmdvX2ZvbnRf
Z2V0X2dseXBoKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5tX2ZvbnQsIGZvbnREYXRhLT5wbGF0
Zm9ybURhdGEoKS5tX2NvbnRleHQsIGJ1ZmZlcltpXSk7CisgICAgICAgIGlmICghZ2x5cGgpCisg
ICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAwLCAwKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBn
bHlwaCwgZm9udERhdGEpOworICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gaGF2ZUdseXBoczsKK30KKworfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0YVBhbmdvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1NpbXBsZUZvbnREYXRhUGFu
Z28uY3BwCShyZXZpc2lvbiA3MDI4NykJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHA6NzAyODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3BhbmdvL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwg
RW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBB
bHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJj
aCBDZW50ZXIgVVNBLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUg
IkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSA8
Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCit7CisgICAgY2Fpcm9f
Zm9udF9leHRlbnRzX3QgZm9udF9leHRlbnRzOworICAgIGNhaXJvX3RleHRfZXh0ZW50c190IHRl
eHRfZXh0ZW50czsKKyAgICBjYWlyb19zY2FsZWRfZm9udF9leHRlbnRzKG1fcGxhdGZvcm1EYXRh
Lm1fc2NhbGVkRm9udCwgJmZvbnRfZXh0ZW50cyk7CisgICAgbV9hc2NlbnQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGxyb3VuZGYoZm9udF9leHRlbnRzLmFzY2VudCkpOworICAgIG1fZGVzY2VudCA9IHN0
YXRpY19jYXN0PGludD4obHJvdW5kZihmb250X2V4dGVudHMuZGVzY2VudCkpOworICAgIG1fbGlu
ZVNwYWNpbmcgPSBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoZm9udF9leHRlbnRzLmhlaWdodCkp
OworICAgIC8vIFRoZXJlIHNlZW1zIHRvIGJlIHNvbWUgcm91bmRpbmcgZXJyb3IgaW4gY2Fpcm8g
KG9yIGluIGhvdyB3ZQorICAgIC8vIHVzZSBjYWlybykgd2l0aCBzb21lIGZvbnRzLCBsaWtlIERl
amFWdSBTYW5zIE1vbm8sIHdoaWNoIG1ha2VzCisgICAgLy8gY2Fpcm8gcmVwb3J0IGEgaGVpZ2h0
IHNtYWxsZXIgdGhhbiBhc2NlbnQgKyBkZXNjZW50LCB3aGljaCBpcworICAgIC8vIHdyb25nIGFu
ZCBjb25mdXNlcyBXZWJDb3JlJ3MgbGF5b3V0IHN5c3RlbS4gV29ya2Fyb3VuZCB0aGlzCisgICAg
Ly8gd2hpbGUgd2UgZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24uCisgICAgaWYgKG1fbGluZVNw
YWNpbmcgPCBtX2FzY2VudCArIG1fZGVzY2VudCkKKyAgICAgICAgbV9saW5lU3BhY2luZyA9IG1f
YXNjZW50ICsgbV9kZXNjZW50OworICAgIGNhaXJvX3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyht
X3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQsICJ4IiwgJnRleHRfZXh0ZW50cyk7CisgICAgbV94
SGVpZ2h0ID0gdGV4dF9leHRlbnRzLmhlaWdodDsKKyAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0
X2V4dGVudHMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LCAiICIsICZ0ZXh0X2V4dGVudHMp
OworICAgIG1fc3BhY2VXaWR0aCA9ICBzdGF0aWNfY2FzdDxmbG9hdD4odGV4dF9leHRlbnRzLnhf
YWR2YW5jZSk7CisgICAgbV9saW5lR2FwID0gbV9saW5lU3BhY2luZyAtIG1fYXNjZW50IC0gbV9k
ZXNjZW50OworICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRo
ZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtQ2hhcldpZHRoSW5pdCgpCit7CisgICAgbV9hdmdDaGFyV2lkdGggPSAwLmY7CisgICAgbV9t
YXhDaGFyV2lkdGggPSAwLmY7CisgICAgaW5pdENoYXJXaWR0aHMoKTsKK30KKwordm9pZCBTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAgICBkZWxldGUgbV9zbWFsbENhcHNG
b250RGF0YTsKKyAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gMDsKK30KKworU2ltcGxlRm9udERh
dGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1fc21hbGxDYXBzRm9udERh
dGEpIHsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGRlc2MgPSBGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKKyAgICAgICAgZGVzYy5zZXRTcGVjaWZpZWRTaXplKDAuNzBmICogZm9u
dERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpKTsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBw
bGF0Zm9ybURhdGEoZGVzYywgZGVzYy5mYW1pbHkoKS5mYW1pbHkoKSk7CisgICAgICAgIG1fc21h
bGxDYXBzRm9udERhdGEgPSBuZXcgU2ltcGxlRm9udERhdGEocGxhdGZvcm1EYXRhKTsKKyAgICB9
CisgICAgcmV0dXJuIG1fc21hbGxDYXBzRm9udERhdGE7Cit9CisKK2Jvb2wgU2ltcGxlRm9udERh
dGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0
aCkgY29uc3QKK3sKKyAgICBib29sIHJlc3VsdCA9IHRydWU7CisKKyAgICBQYW5nb0NvdmVyYWdl
KiBjb3ZlcmFnZSA9IHBhbmdvX2ZvbnRfZ2V0X2NvdmVyYWdlKG1fcGxhdGZvcm1EYXRhLm1fZm9u
dCwgcGFuZ29fbGFuZ3VhZ2VfZ2V0X2RlZmF1bHQoKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChQQU5HT19DT1ZFUkFHRV9OT05FID09IHBh
bmdvX2NvdmVyYWdlX2dldChjb3ZlcmFnZSwgY2hhcmFjdGVyc1tpXSkpIHsKKyAgICAgICAgICAg
IHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBwYW5nb19jb3ZlcmFnZV91bnJlZihjb3ZlcmFnZSk7CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCit7CisgICAgaWYg
KGlzQ3VzdG9tRm9udCgpKSB7CisgICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBtX3Bs
YXRmb3JtRGF0YS5pc0ZpeGVkUGl0Y2goKTsKK30KKworRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdAoreworICAgIHJldHVybiBGbG9h
dFJlY3QoKTsKK30KKworZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlw
aChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wbGF0Zm9ybURhdGEubV9zY2Fs
ZWRGb250KTsKKworICAgIGNhaXJvX2dseXBoX3QgY2dseXBoID0geyBnbHlwaCwgMCwgMCB9Owor
ICAgIGNhaXJvX3RleHRfZXh0ZW50c190IGV4dGVudHM7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRf
Z2x5cGhfZXh0ZW50cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQsICZjZ2x5cGgsIDEsICZl
eHRlbnRzKTsKKworICAgIGZsb2F0IHdpZHRoID0gKGZsb2F0KW1fc3BhY2VXaWR0aDsKKyAgICBp
ZiAoY2Fpcm9fc2NhbGVkX2ZvbnRfc3RhdHVzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCkg
PT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MgJiYgZXh0ZW50cy54X2FkdmFuY2UgIT0gMCkKKyAgICAg
ICAgd2lkdGggPSAoZmxvYXQpZXh0ZW50cy54X2FkdmFuY2U7CisKKyAgICByZXR1cm4gd2lkdGg7
ICAgIAorfQorCit9CkluZGV4OiBXZWJLaXQvZWZsL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvZWZsL0NoYW5nZUxvZwkocmV2aXNpb24gNzAzMDEpCisrKyBXZWJLaXQvZWZsL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTEwLTIyICBSeXVhbiBD
aG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBNb3ZlIGZvbnQgcmVsYXRlZCBmaWxlcy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4MTE2CisKKyAg
ICAgICAgQWRkIGZyZWV0eXBlLyB0byBpbmNsdWRlIHBhdGguCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzRWZsLnR4dDoKKwogMjAxMC0xMC0xOSAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3Vu
Zy5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJLaXQv
ZWZsL0NNYWtlTGlzdHNFZmwudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9lZmwvQ01ha2VMaXN0
c0VmbC50eHQJKHJldmlzaW9uIDcwMzAwKQorKysgV2ViS2l0L2VmbC9DTWFrZUxpc3RzRWZsLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXRfSU5D
TFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVF9ESVJ9L2VmbC9ld2siCiAgICAgIiR7V0VC
S0lUX0RJUn0vZWZsL1dlYkNvcmVTdXBwb3J0IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bS9lZmwiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlIgog
ICAgICR7Q2Fpcm9fSU5DTFVERV9ESVJTfQogICAgICR7RUNPUkVfWF9JTkNMVURFX0RJUlN9CiAg
ICAgJHtFREpFX0lOQ0xVREVfRElSU30K
</data>
<flag name="review"
          id="61633"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71676</attachid>
            <date>2010-10-24 02:06:29 -0700</date>
            <delta_ts>2010-11-10 21:13:37 -0800</delta_ts>
            <desc>PatchConsideringWinCairo</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>139462</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDQwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMTAtMjQgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1
bmcuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtHVEtdIE1vdmUgZm9udCByZWxhdGVkIGZpbGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgxMTYKKworICAgICAgICBNb3ZlIHBhbmdvIGFuZCBm
cmVldHlwZSByZWxhdGVkIGZpbGVzIHRvIHNoYXJlIG5vbi1HVEsrIHBsYXRmb3Jtcy4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGlzIGlzIHB1cmUgcmVmYWN0b3JpbmcuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzRWZsLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9Gb250Q2FjaGVGcmVlVHlwZS5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0
YS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0
Zm9ybURhdGFGcmVlVHlwZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR2x5cGhQYWdlVHJlZU5vZGVDYWlyby5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vU2ltcGxlRm9udERhdGFDYWly
by5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGU6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVU
eXBlLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250
Q2FjaGVGcmVlVHlwZS5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUv
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhLmg6IENvcGll
ZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YUZy
ZWVUeXBlLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRm
b3JtRGF0YUZyZWVUeXBlLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZyZWV0eXBlL0dseXBoUGFnZVRyZWVOb2RlRnJlZVR5cGUuY3BwOiBDb3BpZWQg
ZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dseXBoUGFnZVRyZWVOb2RlQ2Fp
cm8uY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnRE
YXRhRnJlZVR5cGUuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1NpbXBsZUZvbnREYXRhQ2Fpcm8uY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2d0ay9Gb250Q2FjaGVQYW5nby5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFQ
YW5nby5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBh
Z2VUcmVlTm9kZVBhbmdvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcGFuZ286IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Bh
bmdvL0ZvbnRDYWNoZVBhbmdvLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvRm9udENhY2hlUGFuZ28uY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3BhbmdvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHA6IENvcGllZCBmcm9tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHAu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBsYXRmb3JtRGF0YS5oOiBD
b3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRh
UGFuZ28uaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGxhdGZvcm1E
YXRhUGFuZ28uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
b250UGxhdGZvcm1EYXRhUGFuZ28uY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Bh
bmdvL0dseXBoUGFnZVRyZWVOb2RlUGFuZ28uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZVBhbmdvLmNwcC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0YVBhbmdvLmNwcDogQ29waWVkIGZy
b20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHAu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGEuaDogQ29w
aWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNh
aXJvV2luLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURh
dGFDYWlyb1dpbi5oOiBSZW1vdmVkLgorCiAyMDEwLTEwLTIzICBEYW5pZWwgQmF0ZXMgIDxkYmF0
ZXNAcmltLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2Vi
Q29yZS9DTWFrZUxpc3RzRWZsLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHNF
ZmwudHh0CShyZXZpc2lvbiA3MDQwOSkKKysrIFdlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTY1LDE1ICs2NSwxMiBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKIElGIChXVEZfUExBVEZPUk1fQ0FJUk8pCiAgIExJU1QoQVBQRU5EIFdlYkNvcmVfSU5DTFVE
RV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
byIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUiCiAgICkK
ICAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ29udGV4
dFNoYWRvd0NhaXJvLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWNoZUZy
ZWVUeXBlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HbHlwaFBhZ2VUcmVlTm9kZUNhaXJvLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKQEAgLTgyLDggKzc5LDEyIEBAIElGIChX
VEZfUExBVEZPUk1fQ0FJUk8pCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJv
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybVJlZlB0ckNhaXJvLmNwcAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL1NpbXBsZUZvbnREYXRhQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhDYWlyby5jcHAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9mcmVldHlwZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0dseXBoUGFnZVRyZWVOb2RlRnJlZVR5cGUu
Y3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlw
ZS5jcHAKIAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNh
aXJvLmNwcAogICApCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDcwNDA5KQorKysgV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMzQ3OSw3ICszNDc5LDYgQEAgd2ViY29yZWd0
a19zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Zsb2F0UmVj
dENhaXJvLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8u
Y3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDdXN0b21QbGF0Zm9y
bURhdGEuaCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1E
YXRhLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5j
cHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fp
cm8uY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmggXApAQCAtMzY4OCwyOCArMzY4NywzNCBAQCBlbmRpZiAj
IEVORCBFTkFCTEVfRkFTVF9NT0JJTEVfU0NST0xMSU5HCiAjIEZyZWVUeXBlIGZvbnQgYmFja2Vu
ZAogIyAtLS0KIGlmIFVTRV9GUkVFVFlQRQotd2ViY29yZWd0a19jcHBmbGFncyArPSAtRFVTRV9G
UkVFVFlQRT0xCit3ZWJjb3JlZ3RrX2NwcGZsYWdzICs9IFwKKwktRFVTRV9GUkVFVFlQRT0xIFwK
KwktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlCisKIHdlYmNv
cmVndGtfc291cmNlcyArPSBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250
Q2FjaGVGcmVlVHlwZS5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuaCBcCi0JV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HbHlwaFBhZ2VUcmVlTm9kZUNhaXJvLmNwcCBcCi0JV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9TaW1wbGVGb250RGF0YUNhaXJvLmNwcAorCVdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwIFwKKwlXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFGcmVl
VHlwZS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRm
b3JtRGF0YUZyZWVUeXBlLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9Gb250UGxhdGZvcm1EYXRhLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5
cGUvR2x5cGhQYWdlVHJlZU5vZGVGcmVlVHlwZS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAKIGVuZGlmICMgRU5EIFVT
RV9GUkVFVFlQRQogCiAjIC0tLQogIyBQYW5nbyBmb250IGJhY2tlbmQKICMgLS0tCiBpZiBVU0Vf
UEFOR08KLXdlYmNvcmVndGtfY3BwZmxhZ3MgKz0gLURVU0VfUEFOR089MQord2ViY29yZWd0a19j
cHBmbGFncyArPSBcCisJLURVU0VfUEFOR089MSBcCisJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9wYW5nbworCiB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAotCVdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDYWNoZVBhbmdvLmNwcCBcCi0JV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdvLmNwcCBcCi0JV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YVBhbmdvLmNwcCBcCi0J
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YVBhbmdvLmggXAot
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dseXBoUGFnZVRyZWVOb2RlUGFuZ28uY3Bw
IFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YVBhbmdvLmNw
cAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udENhY2hlUGFuZ28uY3BwIFwK
KwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQ
YW5nby5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBsYXRmb3Jt
RGF0YVBhbmdvLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGxh
dGZvcm1EYXRhLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vR2x5cGhQYWdl
VHJlZU5vZGVQYW5nby5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vU2lt
cGxlRm9udERhdGFQYW5nby5jcHAKIGVuZGlmICMgRU5EIFVTRV9QQU5HTwogCiAjIC0tLS0KSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNzA0MDkpCisr
KyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjcxNyw3ICsyNjcxNyw3IEBACiAJCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQkJ
PC9GaWxlPg0KIAkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXGNhaXJvXEZvbnRQbGF0Zm9ybURhdGEuaCINCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXHdpblxGb250UGxhdGZvcm1EYXRhLmgiDQogCQkJCQkJPg0KIAkJ
CQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KIAkJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWNoZUZy
ZWVUeXBlLmNwcAkocmV2aXNpb24gNzA0MDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNjkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29t
PgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0KLSNpbmNsdWRlICJDU3RyaW5nLmgiCi0jaW5j
bHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIk93blB0ckNhaXJvLmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1SZWZQdHJDYWlyby5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSA8
Y2Fpcm8tZnQuaD4KLSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPGZvbnRjb25maWcvZmNm
cmVldHlwZS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotdm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCi17Ci0gICAgLy8gSXQncyBm
aW5lIHRvIGNhbGwgRmNJbml0IG11bHRpcGxlIHRpbWVzIHBlciB0aGUgZG9jdW1lbnRhdGlvbi4K
LSAgICBpZiAoIUZjSW5pdCgpKQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
Y29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJz
KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQot
ewotICAgIEZjUmVzdWx0IGZyZXN1bHQ7Ci0gICAgRm9udFBsYXRmb3JtRGF0YSogcHJpbSA9IGNv
bnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KCZmb250LnByaW1hcnlGb250KCktPnBsYXRmb3Jt
RGF0YSgpKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBhcHBhcmVu
dGx5LiBXZSBhcmUgbnVsbC1jaGVja2luZwotICAgIC8vIGZvciBub3cganVzdCB0byBhdm9pZCBj
cmFzaGluZy4KLSAgICBpZiAoIXByaW0gfHwgIXByaW0tPm1fcGF0dGVybikKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBpZiAoIXByaW0tPm1fZmFsbGJhY2tzKQotICAgICAgICBwcmltLT5tX2Zh
bGxiYWNrcyA9IEZjRm9udFNvcnQoMCwgcHJpbS0+bV9wYXR0ZXJuLmdldCgpLCBGY1RydWUsIDAs
ICZmcmVzdWx0KTsKLQotICAgIEZjRm9udFNldCogZnMgPSBwcmltLT5tX2ZhbGxiYWNrczsKLQot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnMtPm5mb250OyBpKyspIHsKLSAgICAgICAgUGxhdGZv
cm1SZWZQdHI8RmNQYXR0ZXJuPiBmaW4gPSBhZG9wdFBsYXRmb3JtUmVmKEZjRm9udFJlbmRlclBy
ZXBhcmUoMCwgcHJpbS0+bV9wYXR0ZXJuLmdldCgpLCBmcy0+Zm9udHNbaV0pKTsKLSAgICAgICAg
Y2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlID0gY2Fpcm9fZnRfZm9udF9mYWNlX2NyZWF0ZV9m
b3JfcGF0dGVybihmaW4uZ2V0KCkpOwotICAgICAgICBGb250UGxhdGZvcm1EYXRhIGFsdGVybmF0
ZUZvbnQoZm9udEZhY2UsIGZvbnQuZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRQaXhlbFNpemUo
KSwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgY2Fpcm9fZm9udF9mYWNlX2Rlc3Ryb3koZm9udEZh
Y2UpOwotICAgICAgICBhbHRlcm5hdGVGb250Lm1fcGF0dGVybiA9IGZpbjsKLSAgICAgICAgU2lt
cGxlRm9udERhdGEqIHNmZCA9IGdldENhY2hlZEZvbnREYXRhKCZhbHRlcm5hdGVGb250KTsKLSAg
ICAgICAgaWYgKHNmZC0+Y29udGFpbnNDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0aCkpCi0g
ICAgICAgICAgICByZXR1cm4gc2ZkOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1TaW1w
bGVGb250RGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250JiBmb250KQotewotICAgIHJldHVybiAwOwotfQotCi1TaW1wbGVGb250RGF0YSogRm9udENh
Y2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uKQotewotICAgIC8vIFdlIHdhbnQgdG8gcmV0dXJuIGEgZmFsbGJhY2sgZm9u
dCBoZXJlLCBvdGhlcndpc2UgdGhlIGxvZ2ljIHByZXZlbnRpbmcgRm9udENvbmZpZwotICAgIC8v
IG1hdGNoZXMgZm9yIG5vbi1mYWxsYmFjayBmb250cyBtaWdodCByZXR1cm4gMC4gU2VlIGlzRmFs
bGJhY2tGb250QWxsb3dlZC4KLSAgICBzdGF0aWMgQXRvbWljU3RyaW5nIHRpbWVzU3RyKCJzZXJp
ZiIpOwotICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHRpbWVz
U3RyKTsKLX0KLQotdm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5TmFtZSwgVmVjdG9yPHVuc2lnbmVkPiYgdHJhaXRzTWFza3MpCi17Ci19
Ci0KLXN0YXRpYyBTdHJpbmcgZ2V0RmFtaWx5TmFtZVN0cmluZ0Zyb21Gb250RGVzY3JpcHRpb25B
bmRGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0
b21pY1N0cmluZyYgZmFtaWx5KQotewotICAgIC8vIElmIHdlJ3JlIGNyZWF0aW5nIGEgZmFsbGJh
Y2sgZm9udCAoZS5nLiAiLXdlYmtpdC1tb25vc3BhY2UiKSwgY29udmVydCB0aGUgbmFtZSBpbnRv
Ci0gICAgLy8gdGhlIGZhbGxiYWNrIG5hbWUgKGxpa2UgIm1vbm9zcGFjZSIpIHRoYXQgZm9udGNv
bmZpZyB1bmRlcnN0YW5kcy4KLSAgICBpZiAoZmFtaWx5Lmxlbmd0aCgpICYmICFmYW1pbHkuc3Rh
cnRzV2l0aCgiLXdlYmtpdC0iKSkKLSAgICAgICAgcmV0dXJuIGZhbWlseS5zdHJpbmcoKTsKLQot
ICAgIHN3aXRjaCAoZm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSkgewotICAgIGNhc2Ug
Rm9udERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseToKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlv
bjo6U2VyaWZGYW1pbHk6Ci0gICAgICAgIHJldHVybiAic2VyaWYiOwotICAgIGNhc2UgRm9udERl
c2NyaXB0aW9uOjpTYW5zU2VyaWZGYW1pbHk6Ci0gICAgICAgIHJldHVybiAic2Fucy1zZXJpZiI7
Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseToKLSAgICAgICAgcmV0
dXJuICJtb25vc3BhY2UiOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpDdXJzaXZlRmFtaWx5
OgotICAgICAgICByZXR1cm4gImN1cnNpdmUiOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpG
YW50YXN5RmFtaWx5OgotICAgICAgICByZXR1cm4gImZhbnRhc3kiOwotICAgIGNhc2UgRm9udERl
c2NyaXB0aW9uOjpOb0ZhbWlseToKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gIiI7Ci0g
ICAgfQotfQotCi1Gb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5KQotewotICAgIC8vIFRoZSBDU1MgZm9udCBtYXRjaGluZyBhbGdvcml0
aG0gKGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtZm9udHMvI2ZvbnQtbWF0Y2hpbmctYWxnb3Jp
dGhtKQotICAgIC8vIHNheXMgdGhhdCB3ZSBtdXN0IGZpbmQgYW4gZXhhY3QgbWF0Y2ggZm9yIGZv
bnQgZmFtaWx5LCBzbGFudCAoaXRhbGljIG9yIG9ibGlxdWUgY2FuIGJlIHVzZWQpCi0gICAgLy8g
YW5kIGZvbnQgd2VpZ2h0ICh3ZSBvbmx5IG1hdGNoIGJvbGQvbm9uLWJvbGQgaGVyZSkuCi0gICAg
UGxhdGZvcm1SZWZQdHI8RmNQYXR0ZXJuPiBwYXR0ZXJuID0gYWRvcHRQbGF0Zm9ybVJlZihGY1Bh
dHRlcm5DcmVhdGUoKSk7Ci0gICAgU3RyaW5nIGZhbWlseU5hbWVTdHJpbmcoZ2V0RmFtaWx5TmFt
ZVN0cmluZ0Zyb21Gb250RGVzY3JpcHRpb25BbmRGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1p
bHkpKTsKLSAgICBpZiAoIUZjUGF0dGVybkFkZFN0cmluZyhwYXR0ZXJuLmdldCgpLCBGQ19GQU1J
TFksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZhbWlseU5hbWVTdHJpbmcudXRm
OCgpLmRhdGEoKSkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGJvb2wgaXRhbGljID0gZm9u
dERlc2NyaXB0aW9uLml0YWxpYygpOwotICAgIGlmICghRmNQYXR0ZXJuQWRkSW50ZWdlcihwYXR0
ZXJuLmdldCgpLCBGQ19TTEFOVCwgaXRhbGljID8gRkNfU0xBTlRfSVRBTElDIDogRkNfU0xBTlRf
Uk9NQU4pKQotICAgICAgICByZXR1cm4gMDsKLSAgICBib29sIGJvbGQgPSBmb250RGVzY3JpcHRp
b24ud2VpZ2h0KCkgPj0gRm9udFdlaWdodEJvbGQ7Ci0gICAgaWYgKCFGY1BhdHRlcm5BZGRJbnRl
Z2VyKHBhdHRlcm4uZ2V0KCksIEZDX1dFSUdIVCwgYm9sZCA/IEZDX1dFSUdIVF9CT0xEIDogRkNf
V0VJR0hUX05PUk1BTCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghRmNQYXR0ZXJuQWRk
RG91YmxlKHBhdHRlcm4uZ2V0KCksIEZDX1BJWEVMX1NJWkUsIGZvbnREZXNjcmlwdGlvbi5jb21w
dXRlZFBpeGVsU2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBUaGUgc3RyYXRl
Z3kgaXMgb3JpZ2luYWxseSBmcm9tIFNraWEgKHNyYy9wb3J0cy9Ta0ZvbnRIb3N0X2ZvbnRjb25m
aWcuY3BwKToKLQotICAgIC8vIEFsbG93IEZvbnRjb25maWcgdG8gZG8gcHJlLW1hdGNoIHN1YnN0
aXR1dGlvbi4gVW5sZXNzIHdlIGFyZSBhY2Nlc3NpbmcgYSAiZmFsbGJhY2siCi0gICAgLy8gZmFt
aWx5IGxpa2UgInNhbnMsIiB0aGlzIGlzIHRoZSBvbmx5IHRpbWUgd2UgYWxsb3cgRm9udGNvbmZp
ZyB0byBzdWJzdGl0dXRlIG9uZQotICAgIC8vIGZhbWlseSBuYW1lIGZvciBhbm90aGVyIChpLmUu
IGlmIHRoZSBmb250cyBhcmUgYWxpYXNlZCB0byBlYWNoIG90aGVyKS4KLSAgICBGY0NvbmZpZ1N1
YnN0aXR1dGUoMCwgcGF0dGVybi5nZXQoKSwgRmNNYXRjaFBhdHRlcm4pOwotICAgIEZjRGVmYXVs
dFN1YnN0aXR1dGUocGF0dGVybi5nZXQoKSk7Ci0KLSAgICBGY0NoYXI4KiBmb250Q29uZmlnRmFt
aWx5TmFtZUFmdGVyQ29uZmlndXJhdGlvbjsKLSAgICBGY1BhdHRlcm5HZXRTdHJpbmcocGF0dGVy
bi5nZXQoKSwgRkNfRkFNSUxZLCAwLCAmZm9udENvbmZpZ0ZhbWlseU5hbWVBZnRlckNvbmZpZ3Vy
YXRpb24pOwotICAgIFN0cmluZyBmYW1pbHlOYW1lQWZ0ZXJDb25maWd1cmF0aW9uID0gU3RyaW5n
Ojpmcm9tVVRGOChyZWludGVycHJldF9jYXN0PGNoYXIqPihmb250Q29uZmlnRmFtaWx5TmFtZUFm
dGVyQ29uZmlndXJhdGlvbikpOwotCi0gICAgRmNSZXN1bHQgZm9udENvbmZpZ1Jlc3VsdDsKLSAg
ICBQbGF0Zm9ybVJlZlB0cjxGY1BhdHRlcm4+IHJlc3VsdFBhdHRlcm4gPSBhZG9wdFBsYXRmb3Jt
UmVmKEZjRm9udE1hdGNoKDAsIHBhdHRlcm4uZ2V0KCksICZmb250Q29uZmlnUmVzdWx0KSk7Ci0g
ICAgaWYgKCFyZXN1bHRQYXR0ZXJuKSAvLyBObyBtYXRjaC4KLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBGY0NoYXI4KiBmb250Q29uZmlnRmFtaWx5TmFtZUFmdGVyTWF0Y2hpbmc7Ci0gICAgRmNQ
YXR0ZXJuR2V0U3RyaW5nKHJlc3VsdFBhdHRlcm4uZ2V0KCksIEZDX0ZBTUlMWSwgMCwgJmZvbnRD
b25maWdGYW1pbHlOYW1lQWZ0ZXJNYXRjaGluZyk7Ci0gICAgU3RyaW5nIGZhbWlseU5hbWVBZnRl
ck1hdGNoaW5nID0gU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJldF9jYXN0PGNoYXIqPihmb250
Q29uZmlnRmFtaWx5TmFtZUFmdGVyTWF0Y2hpbmcpKTsKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UoZmFtaWx5TmFtZUFmdGVyQ29uZmlndXJhdGlvbiwgZmFtaWx5TmFtZUFmdGVyTWF0Y2hpbmcp
KQotICAgICAgICByZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEocmVzdWx0UGF0dGVybi5nZXQo
KSwgZm9udERlc2NyaXB0aW9uKTsKLQotICAgIC8vIElmIEZvbnRjb25maWcgZ2F2ZSB1c2UgYSBk
aWZmZXJlbnQgZm9udCBmYW1pbHkgdGhhbiB0aGUgb25lIHdlIHJlcXVlc3RlZCwgd2Ugc2hvdWxk
IGlnbm9yZSBpdAotICAgIC8vIGFuZCBhbGxvdyBXZWJDb3JlIHRvIGdpdmUgdXMgdGhlIG5leHQg
Zm9udCBvbiB0aGUgQ1NTIGZhbGxiYWNrIGxpc3QuIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyBpZgot
ICAgIC8vIHRoaXMgZmFtaWx5IG5hbWUgaXMgYSBjb21tb25seSB1c2VkIGdlbmVyaWMgZmFtaWx5
LgotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHlOYW1lU3RyaW5nLCAic2FucyIpIHx8
IGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWVTdHJpbmcsICJzYW5zLXNlcmlmIikKLSAgICAg
ICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5TmFtZVN0cmluZywgInNlcmlmIikgfHwgZXF1
YWxJZ25vcmluZ0Nhc2UoZmFtaWx5TmFtZVN0cmluZywgIm1vbm9zcGFjZSIpCi0gICAgICAgIHx8
IGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWVTdHJpbmcsICJmYW50YXN5IikgfHwgZXF1YWxJ
Z25vcmluZ0Nhc2UoZmFtaWx5TmFtZVN0cmluZywgImN1cnNpdmUiKSkKLSAgICAgICAgcmV0dXJu
IG5ldyBGb250UGxhdGZvcm1EYXRhKHJlc3VsdFBhdHRlcm4uZ2V0KCksIGZvbnREZXNjcmlwdGlv
bik7Ci0KLSAgICAvLyBGb250Y29uZmlnIGRpZCBub3QgcmV0dXJuIGEgZ29vZCBtYXRjaC4KLSAg
ICByZXR1cm4gMDsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiA3
MDQwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChD
KSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YS5oIgotCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgot
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+Ci0jaW5jbHVk
ZSA8Y2Fpcm8uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgdm9pZCByZWxlYXNl
Q3VzdG9tRm9udERhdGEodm9pZCogZGF0YSkKLXsKLSAgICBzdGF0aWNfY2FzdDxTaGFyZWRCdWZm
ZXIqPihkYXRhKS0+ZGVyZWYoKTsKLX0KLQotRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Rm9udEN1
c3RvbVBsYXRmb3JtRGF0YShGVF9GYWNlIGZyZWVUeXBlRmFjZSwgU2hhcmVkQnVmZmVyKiBidWZm
ZXIpCi0gICAgOiBtX2ZyZWVUeXBlRmFjZShmcmVlVHlwZUZhY2UpCi0gICAgLCBtX2ZvbnRGYWNl
KGNhaXJvX2Z0X2ZvbnRfZmFjZV9jcmVhdGVfZm9yX2Z0X2ZhY2UoZnJlZVR5cGVGYWNlLCAwKSkK
LXsKLSAgICAvLyBGSVhNRSBTaG91bGQgd2UgYmUgc2V0dGluZyBzb21lIGhpbnRpbmcgb3B0aW9u
cyBoZXJlPwotCi0gICAgYnVmZmVyLT5yZWYoKTsgLy8gVGhpcyBpcyBiYWxhbmNlZCBieSB0aGUg
YnVmZmVyLT5kZXJlZigpIGluIHJlbGVhc2VDdXN0b21Gb250RGF0YS4KLSAgICBzdGF0aWMgY2Fp
cm9fdXNlcl9kYXRhX2tleV90IGJ1ZmZlcktleTsKLSAgICBjYWlyb19mb250X2ZhY2Vfc2V0X3Vz
ZXJfZGF0YShtX2ZvbnRGYWNlLCAmYnVmZmVyS2V5LCBidWZmZXIsCi0gICAgICAgICBzdGF0aWNf
Y2FzdDxjYWlyb19kZXN0cm95X2Z1bmNfdD4ocmVsZWFzZUN1c3RvbUZvbnREYXRhKSk7Ci0KLSAg
ICAvLyBDYWlybyBkb2Vzbid0IGRvIEZyZWVUeXBlIHJlZmVyZW5jZSBjb3VudGluZywgc28gd2Ug
bmVlZCB0byBlbnN1cmUgdGhhdCB3aGVuCi0gICAgLy8gdGhpcyBjYWlyb19mb250X2ZhY2VfdCBp
cyBkZXN0cm95ZWQsIGl0IGNsZWFucyB1cCB0aGUgRnJlZVR5cGUgZmFjZSBhcyB3ZWxsLgotICAg
IHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3QgZnJlZVR5cGVGYWNlS2V5OwotICAgIGNhaXJv
X2ZvbnRfZmFjZV9zZXRfdXNlcl9kYXRhKG1fZm9udEZhY2UsICZmcmVlVHlwZUZhY2VLZXksIGZy
ZWVUeXBlRmFjZSwKLSAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2Fpcm9fZGVzdHJveV9mdW5j
X3Q+KEZUX0RvbmVfRmFjZSkpOwotfQotCi1Gb250Q3VzdG9tUGxhdGZvcm1EYXRhOjp+Rm9udEN1
c3RvbVBsYXRmb3JtRGF0YSgpCi17Ci0gICAgLy8gbV9mcmVlVHlwZUZhY2Ugd2lsbCBiZSBkZXN0
cm95ZWQgYWxvbmcgd2l0aCBtX2ZvbnRGYWNlLiBTZWUgdGhlIGNvbnN0cnVjdG9yLgotICAgIGNh
aXJvX2ZvbnRfZmFjZV9kZXN0cm95KG1fZm9udEZhY2UpOwotfQotCi1Gb250UGxhdGZvcm1EYXRh
IEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEoaW50IHNpemUsIGJvb2wg
Ym9sZCwgYm9vbCBpdGFsaWMsIEZvbnRPcmllbnRhdGlvbiwgRm9udFJlbmRlcmluZ01vZGUpCi17
Ci0gICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEobV9mb250RmFjZSwgc2l6ZSwgYm9sZCwgaXRh
bGljKTsKLX0KLQotRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1c3RvbVBsYXRm
b3JtRGF0YShTaGFyZWRCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBBU1NFUlRfQVJHKGJ1ZmZlciwg
YnVmZmVyKTsKLQotICAgIHN0YXRpYyBGVF9MaWJyYXJ5IGxpYnJhcnkgPSAwOwotICAgIGlmICgh
bGlicmFyeSAmJiBGVF9Jbml0X0ZyZWVUeXBlKCZsaWJyYXJ5KSkgewotICAgICAgICBsaWJyYXJ5
ID0gMDsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgRlRfRmFjZSBmcmVlVHlwZUZh
Y2U7Ci0gICAgaWYgKEZUX05ld19NZW1vcnlfRmFjZShsaWJyYXJ5LCByZWludGVycHJldF9jYXN0
PGNvbnN0IEZUX0J5dGUqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+c2l6ZSgpLCAwLCAmZnJl
ZVR5cGVGYWNlKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG5ldyBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhKGZyZWVUeXBlRmFjZSwgYnVmZmVyKTsKLX0KLQotYm9vbCBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhOjpzdXBwb3J0c0Zvcm1hdChjb25zdCBTdHJpbmcmIGZvcm1hdCkKLXsKLSAg
ICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoZm9ybWF0LCAidHJ1ZXR5cGUiKSB8fCBlcXVhbEln
bm9yaW5nQ2FzZShmb3JtYXQsICJvcGVudHlwZSIpOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGEuaAkocmV2aXNp
b24gNzA0MDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9y
bURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRl
ZiBGb250UGxhdGZvcm1EYXRhX2gKLSNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YV9oCi0KLSNpZiBk
ZWZpbmVkKFVTRV9GUkVFVFlQRSkKLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhRnJlZVR5cGUu
aCIKLSNlbGlmIGRlZmluZWQoVVNFX1BBTkdPKQotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGFQ
YW5nby5oIgotI2VsaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGFD
YWlyb1dpbi5oIgotI2VuZGlmCi0KLSNlbmRpZiAvLyBGb250UGxhdGZvcm1EYXRhX2gKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQ
bGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAJKHJldmlzaW9uIDcwNDA5KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDI2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFscCBUb2tlciA8
YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgotICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRQbGF0
Zm9ybURhdGEuaCIKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiRm9u
dERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KLSNpbmNsdWRlIDxjYWlyby5o
PgotI2luY2x1ZGUgPGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgotCi0jaWYgIVBMQVRGT1JNKEVG
TCkgfHwgRU5BQkxFKEdMSUJfU1VQUE9SVCkKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jZW5kaWYK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jYWlyb19zdWJwaXhlbF9vcmRlcl90IGNvbnZlcnRG
b250Q29uZmlnU3VicGl4ZWxPcmRlcihpbnQgZm9udENvbmZpZ09yZGVyKQotewotICAgIHN3aXRj
aCAoZm9udENvbmZpZ09yZGVyKSB7Ci0gICAgY2FzZSBGQ19SR0JBX1JHQjoKLSAgICAgICAgcmV0
dXJuIENBSVJPX1NVQlBJWEVMX09SREVSX1JHQjsKLSAgICBjYXNlIEZDX1JHQkFfQkdSOgotICAg
ICAgICByZXR1cm4gQ0FJUk9fU1VCUElYRUxfT1JERVJfQkdSOwotICAgIGNhc2UgRkNfUkdCQV9W
UkdCOgotICAgICAgICByZXR1cm4gQ0FJUk9fU1VCUElYRUxfT1JERVJfVlJHQjsKLSAgICBjYXNl
IEZDX1JHQkFfVkJHUjoKLSAgICAgICAgcmV0dXJuIENBSVJPX1NVQlBJWEVMX09SREVSX1ZCR1I7
Ci0gICAgY2FzZSBGQ19SR0JBX05PTkU6Ci0gICAgY2FzZSBGQ19SR0JBX1VOS05PV046Ci0gICAg
ICAgIHJldHVybiBDQUlST19TVUJQSVhFTF9PUkRFUl9ERUZBVUxUOwotICAgIH0KLSAgICByZXR1
cm4gQ0FJUk9fU1VCUElYRUxfT1JERVJfREVGQVVMVDsKLX0KLQotY2Fpcm9faGludF9zdHlsZV90
IGNvbnZlcnRGb250Q29uZmlnSGludFN0eWxlKGludCBmb250Q29uZmlnU3R5bGUpCi17Ci0gICAg
c3dpdGNoIChmb250Q29uZmlnU3R5bGUpIHsKLSAgICBjYXNlIEZDX0hJTlRfTk9ORToKLSAgICAg
ICAgcmV0dXJuIENBSVJPX0hJTlRfU1RZTEVfTk9ORTsKLSAgICBjYXNlIEZDX0hJTlRfU0xJR0hU
OgotICAgICAgICByZXR1cm4gQ0FJUk9fSElOVF9TVFlMRV9TTElHSFQ7Ci0gICAgY2FzZSBGQ19I
SU5UX01FRElVTToKLSAgICAgICAgcmV0dXJuIENBSVJPX0hJTlRfU1RZTEVfTUVESVVNOwotICAg
IGNhc2UgRkNfSElOVF9GVUxMOgotICAgICAgICByZXR1cm4gQ0FJUk9fSElOVF9TVFlMRV9GVUxM
OwotICAgIH0KLSAgICByZXR1cm4gQ0FJUk9fSElOVF9TVFlMRV9OT05FOwotfQotCi12b2lkIHNl
dENhaXJvRm9udE9wdGlvbnNGcm9tRm9udENvbmZpZ1BhdHRlcm4oY2Fpcm9fZm9udF9vcHRpb25z
X3QqIG9wdGlvbnMsIEZjUGF0dGVybiogcGF0dGVybikKLXsKLSAgICBGY0Jvb2wgYm9vbGVhblJl
c3VsdDsKLSAgICBpbnQgaW50ZWdlclJlc3VsdDsKLQotICAgIGlmIChGY1BhdHRlcm5HZXRJbnRl
Z2VyKHBhdHRlcm4sIEZDX1JHQkEsIDAsICZpbnRlZ2VyUmVzdWx0KSA9PSBGY1Jlc3VsdE1hdGNo
KSB7Ci0gICAgICAgIGNhaXJvX2ZvbnRfb3B0aW9uc19zZXRfc3VicGl4ZWxfb3JkZXIob3B0aW9u
cywgY29udmVydEZvbnRDb25maWdTdWJwaXhlbE9yZGVyKGludGVnZXJSZXN1bHQpKTsKLQotICAg
ICAgICAvLyBCYXNlZCBvbiB0aGUgbG9naWMgaW4gY2Fpcm8tZnQtZm9udC5jIGluIHRoZSBjYWly
byBzb3VyY2UsIGEgZm9udCB3aXRoCi0gICAgICAgIC8vIGEgc3VicGl4ZWwgb3JkZXIgaW1wbGll
cyB0aGF0IGlzIHVzZXMgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgotICAgICAgICBpZiAoaW50ZWdl
clJlc3VsdCAhPSBGQ19SR0JBX05PTkUpCi0gICAgICAgICAgICBjYWlyb19mb250X29wdGlvbnNf
c2V0X2FudGlhbGlhcyhvcHRpb25zLCBDQUlST19BTlRJQUxJQVNfU1VCUElYRUwpOwotICAgIH0K
LQotICAgIGlmIChGY1BhdHRlcm5HZXRCb29sKHBhdHRlcm4sIEZDX0FOVElBTElBUywgMCwgJmJv
b2xlYW5SZXN1bHQpID09IEZjUmVzdWx0TWF0Y2gpIHsKLSAgICAgICAgLy8gT25seSBvdmVycmlk
ZSB0aGUgYW50aS1hbGlhc2luZyBzZXR0aW5nIGlmIHdhcyBwcmV2aW91c2x5IHR1cm5lZCBvZmYu
IE90aGVyd2lzZQotICAgICAgICAvLyB3ZSdsbCBvdmVycmlkZSB0aGUgcHJlZmVyZW5jZSB3aGlj
aCBkZWNpZGVzIGJldHdlZW4gZ3JheSBhbnRpLWFsaWFzaW5nIGFuZAotICAgICAgICAvLyBzdWJw
aXhlbCBhbnRpLWFsaWFzaW5nLgotICAgICAgICBpZiAoIWJvb2xlYW5SZXN1bHQpCi0gICAgICAg
ICAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2FudGlhbGlhcyhvcHRpb25zLCBDQUlST19BTlRJ
QUxJQVNfTk9ORSk7Ci0gICAgICAgIGVsc2UgaWYgKGNhaXJvX2ZvbnRfb3B0aW9uc19nZXRfYW50
aWFsaWFzKG9wdGlvbnMpID09IENBSVJPX0FOVElBTElBU19OT05FKQotICAgICAgICAgICAgY2Fp
cm9fZm9udF9vcHRpb25zX3NldF9hbnRpYWxpYXMob3B0aW9ucywgQ0FJUk9fQU5USUFMSUFTX0dS
QVkpOwotICAgIH0KLQotICAgIGlmIChGY1BhdHRlcm5HZXRJbnRlZ2VyKHBhdHRlcm4sIEZDX0hJ
TlRfU1RZTEUsIDAsICZpbnRlZ2VyUmVzdWx0KSA9PSBGY1Jlc3VsdE1hdGNoKQotICAgICAgICBj
YWlyb19mb250X29wdGlvbnNfc2V0X2hpbnRfc3R5bGUob3B0aW9ucywgY29udmVydEZvbnRDb25m
aWdIaW50U3R5bGUoaW50ZWdlclJlc3VsdCkpOwotICAgIGlmIChGY1BhdHRlcm5HZXRCb29sKHBh
dHRlcm4sIEZDX0hJTlRJTkcsIDAsICZib29sZWFuUmVzdWx0KSA9PSBGY1Jlc3VsdE1hdGNoICYm
ICFib29sZWFuUmVzdWx0KQotICAgICAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2hpbnRfc3R5
bGUob3B0aW9ucywgQ0FJUk9fSElOVF9TVFlMRV9OT05FKTsKLX0KLQotc3RhdGljIGNvbnN0IGNh
aXJvX2ZvbnRfb3B0aW9uc190KiBnZXREZWZhdWx0Rm9udE9wdGlvbnMoKQotewotICAgIHN0YXRp
YyBjb25zdCBjYWlyb19mb250X29wdGlvbnNfdCogb3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9u
c19jcmVhdGUoKTsKLSNpZiBQTEFURk9STShHVEspIHx8IEVOQUJMRShHTElCX1NVUFBPUlQpCi0g
ICAgaWYgKEdka1NjcmVlbiogc2NyZWVuID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKSB7Ci0g
ICAgICAgIGNvbnN0IGNhaXJvX2ZvbnRfb3B0aW9uc190KiBzY3JlZW5PcHRpb25zID0gZ2RrX3Nj
cmVlbl9nZXRfZm9udF9vcHRpb25zKHNjcmVlbik7Ci0gICAgICAgIGlmIChzY3JlZW5PcHRpb25z
KQotICAgICAgICAgICAgb3B0aW9ucyA9IHNjcmVlbk9wdGlvbnM7Ci0gICAgfQotI2VuZGlmCi0g
ICAgcmV0dXJuIG9wdGlvbnM7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURh
dGEoRmNQYXR0ZXJuKiBwYXR0ZXJuLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikKLSAgICA6IG1fcGF0dGVybihwYXR0ZXJuKQotICAgICwgbV9mYWxsYmFja3MoMCkKLSAg
ICAsIG1fc2l6ZShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkKLSAgICAsIG1f
c3ludGhldGljQm9sZChmYWxzZSkKLSAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKLSAg
ICAsIG1fZml4ZWRXaWR0aChmYWxzZSkKLXsKLSAgICBQbGF0Zm9ybVJlZlB0cjxjYWlyb19mb250
X2ZhY2VfdD4gZm9udEZhY2UgPSBhZG9wdFBsYXRmb3JtUmVmKGNhaXJvX2Z0X2ZvbnRfZmFjZV9j
cmVhdGVfZm9yX3BhdHRlcm4obV9wYXR0ZXJuLmdldCgpKSk7Ci0gICAgaW5pdGlhbGl6ZVdpdGhG
b250RmFjZShmb250RmFjZS5nZXQoKSk7Ci0KLSAgICBpbnQgc3BhY2luZzsKLSAgICBpZiAoRmNQ
YXR0ZXJuR2V0SW50ZWdlcihwYXR0ZXJuLCBGQ19TUEFDSU5HLCAwLCAmc3BhY2luZykgPT0gRmNS
ZXN1bHRNYXRjaCAmJiBzcGFjaW5nID09IEZDX01PTk8pCi0gICAgICAgIG1fZml4ZWRXaWR0aCA9
IHRydWU7Ci0KLSAgICBpZiAoZm9udERlc2NyaXB0aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHRC
b2xkKSB7Ci0gICAgICAgIC8vIFRoZSBGQ19FTUJPTERFTiBwcm9wZXJ0eSBpbnN0cnVjdHMgdXMg
dG8gZmFrZSB0aGUgYm9sZG5lc3Mgb2YgdGhlIGZvbnQuCi0gICAgICAgIEZjQm9vbCBmb250Q29u
ZmlnRW1ib2xkZW47Ci0gICAgICAgIGlmIChGY1BhdHRlcm5HZXRCb29sKHBhdHRlcm4sIEZDX0VN
Qk9MREVOLCAwLCAmZm9udENvbmZpZ0VtYm9sZGVuKSA9PSBGY1Jlc3VsdE1hdGNoKQotICAgICAg
ICAgICAgbV9zeW50aGV0aWNCb2xkID0gZm9udENvbmZpZ0VtYm9sZGVuOwotICAgIH0KLX0KLQot
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQs
IGJvb2wgaXRhbGljKQotICAgIDogbV9mYWxsYmFja3MoMCkKLSAgICAsIG1fc2l6ZShzaXplKQot
ICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCi0gICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoaXRh
bGljKQotICAgICwgbV9maXhlZFdpZHRoKGZhbHNlKQotewotICAgIC8vIFdlIGNhbm5vdCBjcmVh
dGUgYSBzY2FsZWQgZm9udCBoZXJlLgotfQotCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSwgZmxvYXQgc2l6ZSwgYm9vbCBib2xk
LCBib29sIGl0YWxpYykKLSAgICA6IG1fZmFsbGJhY2tzKDApCi0gICAgLCBtX3NpemUoc2l6ZSkK
LSAgICAsIG1fc3ludGhldGljQm9sZChib2xkKQotICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGl0
YWxpYykKLXsKLSAgICBpbml0aWFsaXplV2l0aEZvbnRGYWNlKGZvbnRGYWNlKTsKLQotICAgIEZU
X0ZhY2UgZm9udENvbmZpZ0ZhY2UgPSBjYWlyb19mdF9zY2FsZWRfZm9udF9sb2NrX2ZhY2UobV9z
Y2FsZWRGb250LmdldCgpKTsKLSAgICBpZiAoZm9udENvbmZpZ0ZhY2UpIHsKLSAgICAgICAgbV9m
aXhlZFdpZHRoID0gZm9udENvbmZpZ0ZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfRklY
RURfV0lEVEg7Ci0gICAgICAgIGNhaXJvX2Z0X3NjYWxlZF9mb250X3VubG9ja19mYWNlKG1fc2Nh
bGVkRm9udC5nZXQoKSk7Ci0gICAgfQotfQotCi1Gb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZv
cm1EYXRhOjpvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpCi17Ci0gICAg
Ly8gQ2hlY2sgZm9yIHNlbGYtYXNzaWdubWVudC4KLSAgICBpZiAodGhpcyA9PSAmb3RoZXIpCi0g
ICAgICAgIHJldHVybiAqdGhpczsKLQotICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKLSAgICBt
X3N5bnRoZXRpY0JvbGQgPSBvdGhlci5tX3N5bnRoZXRpY0JvbGQ7Ci0gICAgbV9zeW50aGV0aWNP
YmxpcXVlID0gb3RoZXIubV9zeW50aGV0aWNPYmxpcXVlOwotICAgIG1fZml4ZWRXaWR0aCA9IG90
aGVyLm1fZml4ZWRXaWR0aDsKLSAgICBtX3NjYWxlZEZvbnQgPSBvdGhlci5tX3NjYWxlZEZvbnQ7
Ci0gICAgbV9wYXR0ZXJuID0gb3RoZXIubV9wYXR0ZXJuOwotCi0gICAgaWYgKG1fZmFsbGJhY2tz
KSB7Ci0gICAgICAgIEZjRm9udFNldERlc3Ryb3kobV9mYWxsYmFja3MpOwotICAgICAgICAvLyBU
aGlzIHdpbGwgYmUgcmUtY3JlYXRlZCBvbiBkZW1hbmQuCi0gICAgICAgIG1fZmFsbGJhY2tzID0g
MDsKLSAgICB9Ci0KLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZv
bnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpCi0gICAgOiBtX2Zh
bGxiYWNrcygwKQotewotICAgICp0aGlzID0gb3RoZXI7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6
OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIsIGZsb2F0IHNp
emUpCi17Ci0gICAgKnRoaXMgPSBvdGhlcjsKLQotICAgIC8vIFdlIG5lZWQgdG8gcmVpbml0aWFs
aXplIHRoZSBpbnN0YW5jZSwgYmVjYXVzZSB0aGUgZGlmZmVyZW5jZSBpbiBzaXplIAotICAgIC8v
IG5lY2Vzc2l0YXRlcyBhIG5ldyBzY2FsZWQgZm9udCBpbnN0YW5jZS4KLSAgICBtX3NpemUgPSBz
aXplOwotICAgIGluaXRpYWxpemVXaXRoRm9udEZhY2UoY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2Zv
bnRfZmFjZShtX3NjYWxlZEZvbnQuZ2V0KCkpKTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6fkZv
bnRQbGF0Zm9ybURhdGEoKQotewotICAgIGlmIChtX2ZhbGxiYWNrcykgewotICAgICAgICBGY0Zv
bnRTZXREZXN0cm95KG1fZmFsbGJhY2tzKTsKLSAgICAgICAgbV9mYWxsYmFja3MgPSAwOwotICAg
IH0KLX0KLQotYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKQotewotICAgIHJl
dHVybiBtX2ZpeGVkV2lkdGg7Ci19Ci0KLWJvb2wgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9
PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKLXsKLSAgICBpZiAobV9wYXR0
ZXJuID09IG90aGVyLm1fcGF0dGVybikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFt
X3BhdHRlcm4gfHwgbV9wYXR0ZXJuLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgfHwgIW90aGVy
Lm1fcGF0dGVybiB8fCBvdGhlci5tX3BhdHRlcm4uaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBGY1BhdHRlcm5FcXVhbChtX3BhdHRl
cm4uZ2V0KCksIG90aGVyLm1fcGF0dGVybi5nZXQoKSk7Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi1T
dHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVy
biBTdHJpbmcoKTsKLX0KLSNlbmRpZgotCi12b2lkIEZvbnRQbGF0Zm9ybURhdGE6OmluaXRpYWxp
emVXaXRoRm9udEZhY2UoY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlKQotewotICAgIGNhaXJv
X2ZvbnRfb3B0aW9uc190KiBvcHRpb25zID0gY2Fpcm9fZm9udF9vcHRpb25zX2NvcHkoZ2V0RGVm
YXVsdEZvbnRPcHRpb25zKCkpOwotCi0gICAgY2Fpcm9fbWF0cml4X3QgY3RtOwotICAgIGNhaXJv
X21hdHJpeF9pbml0X2lkZW50aXR5KCZjdG0pOwotCi0gICAgY2Fpcm9fbWF0cml4X3QgZm9udE1h
dHJpeDsKLSAgICBpZiAoIW1fcGF0dGVybikKLSAgICAgICAgY2Fpcm9fbWF0cml4X2luaXRfc2Nh
bGUoJmZvbnRNYXRyaXgsIG1fc2l6ZSwgbV9zaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgc2V0
Q2Fpcm9Gb250T3B0aW9uc0Zyb21Gb250Q29uZmlnUGF0dGVybihvcHRpb25zLCBtX3BhdHRlcm4u
Z2V0KCkpOwotCi0gICAgICAgIC8vIEZvbnRDb25maWcgbWF5IHJldHVybiBhIGxpc3Qgb2YgdHJh
bnNmb3JtYXRpb24gbWF0cmljZXMgd2l0aCB0aGUgcGF0dGVybiwgZm9yIGluc3RhbmNlLAotICAg
ICAgICAvLyBmb3IgZm9udHMgdGhhdCBhcmUgb2JsaXF1ZS4gV2UgdXNlIHRoYXQgdG8gaW5pdGlh
bGl6ZSB0aGUgY2Fpcm8gZm9udCBtYXRyaXguCi0gICAgICAgIEZjTWF0cml4IGZvbnRDb25maWdN
YXRyaXgsICp0ZW1wRm9udENvbmZpZ01hdHJpeDsKLSAgICAgICAgRmNNYXRyaXhJbml0KCZmb250
Q29uZmlnTWF0cml4KTsKLQotICAgICAgICAvLyBUaGVzZSBtYXRyaWNlcyBtYXkgYmUgc3RhY2tl
ZCBpbiB0aGUgcGF0dGVybiwgc28gaXQncyBvdXIgam9iIHRvIGdldCB0aGVtIGFsbCBhbmQgbXVs
dGlwbHkgdGhlbS4KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IEZjUGF0dGVybkdldE1hdHJpeCht
X3BhdHRlcm4uZ2V0KCksIEZDX01BVFJJWCwgaSwgJnRlbXBGb250Q29uZmlnTWF0cml4KSA9PSBG
Y1Jlc3VsdE1hdGNoOyBpKyspCi0gICAgICAgICAgICBGY01hdHJpeE11bHRpcGx5KCZmb250Q29u
ZmlnTWF0cml4LCAmZm9udENvbmZpZ01hdHJpeCwgdGVtcEZvbnRDb25maWdNYXRyaXgpOwotICAg
ICAgICBjYWlyb19tYXRyaXhfaW5pdCgmZm9udE1hdHJpeCwgZm9udENvbmZpZ01hdHJpeC54eCwg
LWZvbnRDb25maWdNYXRyaXgueXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC1mb250Q29u
ZmlnTWF0cml4Lnh5LCBmb250Q29uZmlnTWF0cml4Lnl5LCAwLCAwKTsKLQotICAgICAgICAvLyBU
aGUgbWF0cml4IGZyb20gRm9udENvbmZpZyBkb2VzIG5vdCBpbmNsdWRlIHRoZSBzY2FsZS4KLSAg
ICAgICAgY2Fpcm9fbWF0cml4X3NjYWxlKCZmb250TWF0cml4LCBtX3NpemUsIG1fc2l6ZSk7Ci0g
ICAgfQotCi0gICAgbV9zY2FsZWRGb250ID0gYWRvcHRQbGF0Zm9ybVJlZihjYWlyb19zY2FsZWRf
Zm9udF9jcmVhdGUoZm9udEZhY2UsICZmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKSk7Ci0gICAg
Y2Fpcm9fZm9udF9vcHRpb25zX2Rlc3Ryb3kob3B0aW9ucyk7Ci19Ci0KLQotfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9y
bURhdGFGcmVlVHlwZS5oCShyZXZpc2lvbiA3MDQwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBn
bWFpbC5jb20KLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhl
cgotICogQ29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5j
LgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
Ci0gKi8KLQotI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhRnJlZVR5cGVfaAotI2RlZmluZSBGb250
UGxhdGZvcm1EYXRhRnJlZVR5cGVfaAotCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0j
aW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJIYXNoRnVuY3Rpb25zLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1SZWZQdHJDYWlyby5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0K
LXR5cGVkZWYgc3RydWN0IF9GY0ZvbnRTZXQgRmNGb250U2V0OwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGEgewotcHVibGljOgotICAgIEZvbnRQbGF0Zm9y
bURhdGEoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fZmFsbGJh
Y2tzKDApCi0gICAgICAgICwgbV9zaXplKDApCi0gICAgICAgICwgbV9zeW50aGV0aWNCb2xkKGZh
bHNlKQotICAgICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKLSAgICAgICAgLCBtX3Nj
YWxlZEZvbnQoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpCi0gICAgICAgIHsgfQotCi0gICAg
Rm9udFBsYXRmb3JtRGF0YSgpCi0gICAgICAgIDogbV9mYWxsYmFja3MoMCkKLSAgICAgICAgLCBt
X3NpemUoMCkKLSAgICAgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCi0gICAgICAgICwgbV9z
eW50aGV0aWNPYmxpcXVlKGZhbHNlKQotICAgICAgICB7IH0KLQotICAgIEZvbnRQbGF0Zm9ybURh
dGEoRmNQYXR0ZXJuKiwgY29uc3QgRm9udERlc2NyaXB0aW9uJik7Ci0gICAgRm9udFBsYXRmb3Jt
RGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwg
Ym9vbCBpdGFsaWMpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xk
LCBib29sIGl0YWxpYyk7Ci0gICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1E
YXRhJik7Ci0gICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgZmxv
YXQgc2l6ZSk7Ci0KLSAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOwotCi0gICAgYm9vbCBpc0ZpeGVk
UGl0Y2goKTsKLSAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAg
dm9pZCBzZXRTaXplKGZsb2F0IHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQotICAgIGJvb2wgc3lu
dGhldGljQm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9sZDsgfQotICAgIGJvb2wg
c3ludGhldGljT2JsaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljT2JsaXF1ZTsgfQot
Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2NhbGVkRm9udC5nZXQoKTsgfQotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gUHRySGFzaDxjYWlyb19zY2FsZWRfZm9udF90Kj46Omhhc2gobV9zY2Fs
ZWRGb250LmdldCgpKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYpIGNvbnN0OwotICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9yPShjb25z
dCBGb250UGxhdGZvcm1EYXRhJik7Ci0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zY2FsZWRGb250LmlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCk7Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyBkZXNjcmlw
dGlvbigpIGNvbnN0OwotI2VuZGlmCi0KLSAgICBQbGF0Zm9ybVJlZlB0cjxGY1BhdHRlcm4+IG1f
cGF0dGVybjsKLSAgICBGY0ZvbnRTZXQqIG1fZmFsbGJhY2tzOwotICAgIGZsb2F0IG1fc2l6ZTsK
LSAgICBib29sIG1fc3ludGhldGljQm9sZDsKLSAgICBib29sIG1fc3ludGhldGljT2JsaXF1ZTsK
LSAgICBib29sIG1fZml4ZWRXaWR0aDsKLSAgICBQbGF0Zm9ybVJlZlB0cjxjYWlyb19zY2FsZWRf
Zm9udF90PiBtX3NjYWxlZEZvbnQ7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBpbml0aWFsaXplV2l0
aEZvbnRGYWNlKGNhaXJvX2ZvbnRfZmFjZV90Kik7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBGb250
UGxhdGZvcm1EYXRhRnJlZVR5cGVfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HbHlwaFBhZ2VUcmVlTm9kZUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm8uY3BwCShyZXZpc2lv
biA3MDQwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR2x5cGhQYWdlVHJl
ZU5vZGVDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNvbGxhYm9yYS5jby51
az4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKLQot
I2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KLSNpbmNs
dWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKLXsKLSAgICAvLyBUaGUgYnVmZmVyTGVuZ3Ro
IHdpbGwgYmUgZ3JlYXRlciB0aGFuIHRoZSBnbHlwaCBwYWdlIHNpemUgaWYgdGhlIGJ1ZmZlciBo
YXMgVW5pY29kZSBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMuCi0gICAgLy8gV2Ugd29uJ3Qgc3Vw
cG9ydCB0aGlzIGZvciBub3cuCi0gICAgaWYgKGJ1ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6c2l6
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRlRfRmFjZSBmYWNlID0gY2Fpcm9fZnRf
c2NhbGVkX2ZvbnRfbG9ja19mYWNlKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5tX3NjYWxlZEZv
bnQuZ2V0KCkpOwotICAgIGlmICghZmFjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Ym9vbCBoYXZlR2x5cGhzID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgIEdseXBoIGdseXBoID0gRmNGcmVlVHlwZUNoYXJJbmRleChm
YWNlLCBidWZmZXJbaV0pOwotICAgICAgICBpZiAoIWdseXBoKQotICAgICAgICAgICAgc2V0R2x5
cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgMCwgMCk7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGgsIGZvbnREYXRhKTsK
LSAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Y2Fpcm9fZnRfc2NhbGVkX2ZvbnRfdW5sb2NrX2ZhY2UoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgp
Lm1fc2NhbGVkRm9udC5nZXQoKSk7Ci0KLSAgICByZXR1cm4gaGF2ZUdseXBoczsKLX0KLQotfQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9TaW1wbGVGb250RGF0YUNhaXJv
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1NpbXBs
ZUZvbnREYXRhQ2Fpcm8uY3BwCShyZXZpc2lvbiA3MDQwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vU2ltcGxlRm9udERhdGFDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFl
bCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4
IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0KLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVk
ZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRl
IDxjYWlyby1mdC5oPgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Zm9udGNvbmZpZy9m
Y2ZyZWV0eXBlLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQotewotICAgIGNh
aXJvX2ZvbnRfZXh0ZW50c190IGZvbnRfZXh0ZW50czsKLSAgICBjYWlyb190ZXh0X2V4dGVudHNf
dCB0ZXh0X2V4dGVudHM7Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZXh0ZW50cyhtX3BsYXRmb3Jt
RGF0YS5tX3NjYWxlZEZvbnQuZ2V0KCksICZmb250X2V4dGVudHMpOwotICAgIG1fYXNjZW50ID0g
c3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKGZvbnRfZXh0ZW50cy5hc2NlbnQpKTsKLSAgICBtX2Rl
c2NlbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoZm9udF9leHRlbnRzLmRlc2NlbnQpKTsK
LSAgICBtX2xpbmVTcGFjaW5nID0gc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKGZvbnRfZXh0ZW50
cy5oZWlnaHQpKTsKLSAgICAvLyBUaGVyZSBzZWVtcyB0byBiZSBzb21lIHJvdW5kaW5nIGVycm9y
IGluIGNhaXJvIChvciBpbiBob3cgd2UKLSAgICAvLyB1c2UgY2Fpcm8pIHdpdGggc29tZSBmb250
cywgbGlrZSBEZWphVnUgU2FucyBNb25vLCB3aGljaCBtYWtlcwotICAgIC8vIGNhaXJvIHJlcG9y
dCBhIGhlaWdodCBzbWFsbGVyIHRoYW4gYXNjZW50ICsgZGVzY2VudCwgd2hpY2ggaXMKLSAgICAv
LyB3cm9uZyBhbmQgY29uZnVzZXMgV2ViQ29yZSdzIGxheW91dCBzeXN0ZW0uIFdvcmthcm91bmQg
dGhpcwotICAgIC8vIHdoaWxlIHdlIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uLgotICAgIGlm
IChtX2xpbmVTcGFjaW5nIDwgbV9hc2NlbnQgKyBtX2Rlc2NlbnQpCi0gICAgICAgIG1fbGluZVNw
YWNpbmcgPSBtX2FzY2VudCArIG1fZGVzY2VudDsKLSAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0
X2V4dGVudHMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LmdldCgpLCAieCIsICZ0ZXh0X2V4
dGVudHMpOwotICAgIG1feEhlaWdodCA9IHRleHRfZXh0ZW50cy5oZWlnaHQ7Ci0gICAgY2Fpcm9f
c2NhbGVkX2ZvbnRfdGV4dF9leHRlbnRzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udC5nZXQo
KSwgIiAiLCAmdGV4dF9leHRlbnRzKTsKLSAgICBtX3NwYWNlV2lkdGggPSBzdGF0aWNfY2FzdDxm
bG9hdD4odGV4dF9leHRlbnRzLnhfYWR2YW5jZSk7Ci0gICAgbV9saW5lR2FwID0gbV9saW5lU3Bh
Y2luZyAtIG1fYXNjZW50IC0gbV9kZXNjZW50OwotICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9
IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7Ci19Ci0KLXZvaWQg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCi17Ci0gICAgbV9hdmdDaGFy
V2lkdGggPSAwLmY7Ci0gICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7Ci0gICAgaW5pdENoYXJXaWR0
aHMoKTsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLSAg
ICBkZWxldGUgbV9zbWFsbENhcHNGb250RGF0YTsKLSAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0g
MDsKLX0KLQotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICAv
LyBGSVhNRTogSSB0aGluayB3ZSB3YW50IHRvIGFzayBGb250Q29uZmlnIGZvciB0aGUgcmlnaHQg
Zm9udCBhZ2Fpbi4KLSAgICBpZiAoIW1fc21hbGxDYXBzRm9udERhdGEpCi0gICAgICAgIG1fc21h
bGxDYXBzRm9udERhdGEgPSBuZXcgU2ltcGxlRm9udERhdGEoCi0gICAgICAgICAgICBGb250UGxh
dGZvcm1EYXRhKGNhaXJvX3NjYWxlZF9mb250X2dldF9mb250X2ZhY2UobV9wbGF0Zm9ybURhdGEu
c2NhbGVkRm9udCgpKSwKLSAgICAgICAgICAgIDAuNzBmICogZm9udERlc2NyaXB0aW9uLmNvbXB1
dGVkU2l6ZSgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCksIG1fcGxhdGZvcm1EYXRh
LnN5bnRoZXRpY09ibGlxdWUoKSkpOwotCi0gICAgcmV0dXJuIG1fc21hbGxDYXBzRm9udERhdGE7
Ci19Ci0KLWJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKLXsKLSAgICBGVF9GYWNlIGZhY2UgPSBj
YWlyb19mdF9zY2FsZWRfZm9udF9sb2NrX2ZhY2UobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250
LmdldCgpKTsKLQotICAgIGlmICghZmFjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoRmNGcmVlVHlw
ZUNoYXJJbmRleChmYWNlLCBjaGFyYWN0ZXJzW2ldKSA9PSAwKSB7Ci0gICAgICAgICAgICBjYWly
b19mdF9zY2FsZWRfZm9udF91bmxvY2tfZmFjZShtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQu
Z2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfdW5sb2NrX2ZhY2UobV9wbGF0Zm9ybURhdGEubV9zY2Fs
ZWRGb250LmdldCgpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNpbXBsZUZvbnRE
YXRhOjpkZXRlcm1pbmVQaXRjaCgpCi17Ci0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IG1fcGxh
dGZvcm1EYXRhLmlzRml4ZWRQaXRjaCgpOwotfQotCi1GbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEZsb2F0
UmVjdCgpOwotfQotCi1mbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBo
KEdseXBoIGdseXBoKSBjb25zdAotewotICAgIEFTU0VSVChtX3BsYXRmb3JtRGF0YS5tX3NjYWxl
ZEZvbnQpOwotCi0gICAgY2Fpcm9fZ2x5cGhfdCBjZ2x5cGggPSB7IGdseXBoLCAwLCAwIH07Ci0g
ICAgY2Fpcm9fdGV4dF9leHRlbnRzX3QgZXh0ZW50czsKLSAgICBjYWlyb19zY2FsZWRfZm9udF9n
bHlwaF9leHRlbnRzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udC5nZXQoKSwgJmNnbHlwaCwg
MSwgJmV4dGVudHMpOwotCi0gICAgZmxvYXQgdyA9IChmbG9hdCltX3NwYWNlV2lkdGg7Ci0gICAg
aWYgKGNhaXJvX3NjYWxlZF9mb250X3N0YXR1cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQu
Z2V0KCkpID09IENBSVJPX1NUQVRVU19TVUNDRVNTICYmIGV4dGVudHMueF9hZHZhbmNlKQotICAg
ICAgICB3ID0gKGZsb2F0KWV4dGVudHMueF9hZHZhbmNlOwotCi0gICAgcmV0dXJuIHc7ICAgIAot
fQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNo
ZUZyZWVUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zy
ZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAkocmV2aXNpb24gNzAyODcpCShmcm9tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhY2hlRnJlZVR5cGUuY3BwOjcwMjg3KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5o
IgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJP
d25QdHJDYWlyby5oIgorI2luY2x1ZGUgIlBsYXRmb3JtUmVmUHRyQ2Fpcm8uaCIKKyNpbmNsdWRl
ICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+CisjaW5jbHVkZSA8Y2Fp
cm8uaD4KKyNpbmNsdWRlIDxmb250Y29uZmlnL2ZjZnJlZXR5cGUuaD4KKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRm9udENhY2hlOjpw
bGF0Zm9ybUluaXQoKQoreworICAgIC8vIEl0J3MgZmluZSB0byBjYWxsIEZjSW5pdCBtdWx0aXBs
ZSB0aW1lcyBwZXIgdGhlIGRvY3VtZW50YXRpb24uCisgICAgaWYgKCFGY0luaXQoKSkKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2NvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250
Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK3sKKyAgICBGY1Jlc3VsdCBmcmVzdWx0Owor
ICAgIEZvbnRQbGF0Zm9ybURhdGEqIHByaW0gPSBjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEq
PigmZm9udC5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKSk7CisKKyAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYXBwYXJlbnRseS4gV2UgYXJlIG51bGwtY2hlY2tpbmcK
KyAgICAvLyBmb3Igbm93IGp1c3QgdG8gYXZvaWQgY3Jhc2hpbmcuCisgICAgaWYgKCFwcmltIHx8
ICFwcmltLT5tX3BhdHRlcm4pCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFwcmltLT5t
X2ZhbGxiYWNrcykKKyAgICAgICAgcHJpbS0+bV9mYWxsYmFja3MgPSBGY0ZvbnRTb3J0KDAsIHBy
aW0tPm1fcGF0dGVybi5nZXQoKSwgRmNUcnVlLCAwLCAmZnJlc3VsdCk7CisKKyAgICBGY0ZvbnRT
ZXQqIGZzID0gcHJpbS0+bV9mYWxsYmFja3M7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZz
LT5uZm9udDsgaSsrKSB7CisgICAgICAgIFBsYXRmb3JtUmVmUHRyPEZjUGF0dGVybj4gZmluID0g
YWRvcHRQbGF0Zm9ybVJlZihGY0ZvbnRSZW5kZXJQcmVwYXJlKDAsIHByaW0tPm1fcGF0dGVybi5n
ZXQoKSwgZnMtPmZvbnRzW2ldKSk7CisgICAgICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFj
ZSA9IGNhaXJvX2Z0X2ZvbnRfZmFjZV9jcmVhdGVfZm9yX3BhdHRlcm4oZmluLmdldCgpKTsKKyAg
ICAgICAgRm9udFBsYXRmb3JtRGF0YSBhbHRlcm5hdGVGb250KGZvbnRGYWNlLCBmb250LmZvbnRE
ZXNjcmlwdGlvbigpLmNvbXB1dGVkUGl4ZWxTaXplKCksIGZhbHNlLCBmYWxzZSk7CisgICAgICAg
IGNhaXJvX2ZvbnRfZmFjZV9kZXN0cm95KGZvbnRGYWNlKTsKKyAgICAgICAgYWx0ZXJuYXRlRm9u
dC5tX3BhdHRlcm4gPSBmaW47CisgICAgICAgIFNpbXBsZUZvbnREYXRhKiBzZmQgPSBnZXRDYWNo
ZWRGb250RGF0YSgmYWx0ZXJuYXRlRm9udCk7CisgICAgICAgIGlmIChzZmQtPmNvbnRhaW5zQ2hh
cmFjdGVycyhjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIHNmZDsKKyAg
ICB9CisKKyAgICByZXR1cm4gMDsKK30KKworU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0
U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKK3sKKyAgICByZXR1cm4g
MDsKK30KKworU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNr
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKK3sKKyAgICAvLyBX
ZSB3YW50IHRvIHJldHVybiBhIGZhbGxiYWNrIGZvbnQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBsb2dp
YyBwcmV2ZW50aW5nIEZvbnRDb25maWcKKyAgICAvLyBtYXRjaGVzIGZvciBub24tZmFsbGJhY2sg
Zm9udHMgbWlnaHQgcmV0dXJuIDAuIFNlZSBpc0ZhbGxiYWNrRm9udEFsbG93ZWQuCisgICAgc3Rh
dGljIEF0b21pY1N0cmluZyB0aW1lc1N0cigic2VyaWYiKTsKKyAgICByZXR1cm4gZ2V0Q2FjaGVk
Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0cik7Cit9CisKK3ZvaWQgRm9udENhY2hl
OjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rv
cjx1bnNpZ25lZD4mIHRyYWl0c01hc2tzKQoreworfQorCitzdGF0aWMgU3RyaW5nIGdldEZhbWls
eU5hbWVTdHJpbmdGcm9tRm9udERlc2NyaXB0aW9uQW5kRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKK3sKKyAg
ICAvLyBJZiB3ZSdyZSBjcmVhdGluZyBhIGZhbGxiYWNrIGZvbnQgKGUuZy4gIi13ZWJraXQtbW9u
b3NwYWNlIiksIGNvbnZlcnQgdGhlIG5hbWUgaW50bworICAgIC8vIHRoZSBmYWxsYmFjayBuYW1l
IChsaWtlICJtb25vc3BhY2UiKSB0aGF0IGZvbnRjb25maWcgdW5kZXJzdGFuZHMuCisgICAgaWYg
KGZhbWlseS5sZW5ndGgoKSAmJiAhZmFtaWx5LnN0YXJ0c1dpdGgoIi13ZWJraXQtIikpCisgICAg
ICAgIHJldHVybiBmYW1pbHkuc3RyaW5nKCk7CisKKyAgICBzd2l0Y2ggKGZvbnREZXNjcmlwdGlv
bi5nZW5lcmljRmFtaWx5KCkpIHsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRG
YW1pbHk6CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5OgorICAgICAgICBy
ZXR1cm4gInNlcmlmIjsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5
OgorICAgICAgICByZXR1cm4gInNhbnMtc2VyaWYiOworICAgIGNhc2UgRm9udERlc2NyaXB0aW9u
OjpNb25vc3BhY2VGYW1pbHk6CisgICAgICAgIHJldHVybiAibW9ub3NwYWNlIjsKKyAgICBjYXNl
IEZvbnREZXNjcmlwdGlvbjo6Q3Vyc2l2ZUZhbWlseToKKyAgICAgICAgcmV0dXJuICJjdXJzaXZl
IjsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6RmFudGFzeUZhbWlseToKKyAgICAgICAgcmV0
dXJuICJmYW50YXN5IjsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHk6CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KK30KKworRm9udFBsYXRmb3JtRGF0
YSogRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKK3sKKyAgICAv
LyBUaGUgQ1NTIGZvbnQgbWF0Y2hpbmcgYWxnb3JpdGhtIChodHRwOi8vd3d3LnczLm9yZy9UUi9j
c3MzLWZvbnRzLyNmb250LW1hdGNoaW5nLWFsZ29yaXRobSkKKyAgICAvLyBzYXlzIHRoYXQgd2Ug
bXVzdCBmaW5kIGFuIGV4YWN0IG1hdGNoIGZvciBmb250IGZhbWlseSwgc2xhbnQgKGl0YWxpYyBv
ciBvYmxpcXVlIGNhbiBiZSB1c2VkKQorICAgIC8vIGFuZCBmb250IHdlaWdodCAod2Ugb25seSBt
YXRjaCBib2xkL25vbi1ib2xkIGhlcmUpLgorICAgIFBsYXRmb3JtUmVmUHRyPEZjUGF0dGVybj4g
cGF0dGVybiA9IGFkb3B0UGxhdGZvcm1SZWYoRmNQYXR0ZXJuQ3JlYXRlKCkpOworICAgIFN0cmlu
ZyBmYW1pbHlOYW1lU3RyaW5nKGdldEZhbWlseU5hbWVTdHJpbmdGcm9tRm9udERlc2NyaXB0aW9u
QW5kRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5KSk7CisgICAgaWYgKCFGY1BhdHRlcm5B
ZGRTdHJpbmcocGF0dGVybi5nZXQoKSwgRkNfRkFNSUxZLCByZWludGVycHJldF9jYXN0PGNvbnN0
IEZjQ2hhcjgqPihmYW1pbHlOYW1lU3RyaW5nLnV0ZjgoKS5kYXRhKCkpKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBib29sIGl0YWxpYyA9IGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKTsKKyAg
ICBpZiAoIUZjUGF0dGVybkFkZEludGVnZXIocGF0dGVybi5nZXQoKSwgRkNfU0xBTlQsIGl0YWxp
YyA/IEZDX1NMQU5UX0lUQUxJQyA6IEZDX1NMQU5UX1JPTUFOKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgYm9vbCBib2xkID0gZm9udERlc2NyaXB0aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHRC
b2xkOworICAgIGlmICghRmNQYXR0ZXJuQWRkSW50ZWdlcihwYXR0ZXJuLmdldCgpLCBGQ19XRUlH
SFQsIGJvbGQgPyBGQ19XRUlHSFRfQk9MRCA6IEZDX1dFSUdIVF9OT1JNQUwpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBpZiAoIUZjUGF0dGVybkFkZERvdWJsZShwYXR0ZXJuLmdldCgpLCBGQ19Q
SVhFTF9TSVpFLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgLy8gVGhlIHN0cmF0ZWd5IGlzIG9yaWdpbmFsbHkgZnJvbSBTa2lh
IChzcmMvcG9ydHMvU2tGb250SG9zdF9mb250Y29uZmlnLmNwcCk6CisKKyAgICAvLyBBbGxvdyBG
b250Y29uZmlnIHRvIGRvIHByZS1tYXRjaCBzdWJzdGl0dXRpb24uIFVubGVzcyB3ZSBhcmUgYWNj
ZXNzaW5nIGEgImZhbGxiYWNrIgorICAgIC8vIGZhbWlseSBsaWtlICJzYW5zLCIgdGhpcyBpcyB0
aGUgb25seSB0aW1lIHdlIGFsbG93IEZvbnRjb25maWcgdG8gc3Vic3RpdHV0ZSBvbmUKKyAgICAv
LyBmYW1pbHkgbmFtZSBmb3IgYW5vdGhlciAoaS5lLiBpZiB0aGUgZm9udHMgYXJlIGFsaWFzZWQg
dG8gZWFjaCBvdGhlcikuCisgICAgRmNDb25maWdTdWJzdGl0dXRlKDAsIHBhdHRlcm4uZ2V0KCks
IEZjTWF0Y2hQYXR0ZXJuKTsKKyAgICBGY0RlZmF1bHRTdWJzdGl0dXRlKHBhdHRlcm4uZ2V0KCkp
OworCisgICAgRmNDaGFyOCogZm9udENvbmZpZ0ZhbWlseU5hbWVBZnRlckNvbmZpZ3VyYXRpb247
CisgICAgRmNQYXR0ZXJuR2V0U3RyaW5nKHBhdHRlcm4uZ2V0KCksIEZDX0ZBTUlMWSwgMCwgJmZv
bnRDb25maWdGYW1pbHlOYW1lQWZ0ZXJDb25maWd1cmF0aW9uKTsKKyAgICBTdHJpbmcgZmFtaWx5
TmFtZUFmdGVyQ29uZmlndXJhdGlvbiA9IFN0cmluZzo6ZnJvbVVURjgocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oZm9udENvbmZpZ0ZhbWlseU5hbWVBZnRlckNvbmZpZ3VyYXRpb24pKTsKKworICAg
IEZjUmVzdWx0IGZvbnRDb25maWdSZXN1bHQ7CisgICAgUGxhdGZvcm1SZWZQdHI8RmNQYXR0ZXJu
PiByZXN1bHRQYXR0ZXJuID0gYWRvcHRQbGF0Zm9ybVJlZihGY0ZvbnRNYXRjaCgwLCBwYXR0ZXJu
LmdldCgpLCAmZm9udENvbmZpZ1Jlc3VsdCkpOworICAgIGlmICghcmVzdWx0UGF0dGVybikgLy8g
Tm8gbWF0Y2guCisgICAgICAgIHJldHVybiAwOworCisgICAgRmNDaGFyOCogZm9udENvbmZpZ0Zh
bWlseU5hbWVBZnRlck1hdGNoaW5nOworICAgIEZjUGF0dGVybkdldFN0cmluZyhyZXN1bHRQYXR0
ZXJuLmdldCgpLCBGQ19GQU1JTFksIDAsICZmb250Q29uZmlnRmFtaWx5TmFtZUFmdGVyTWF0Y2hp
bmcpOworICAgIFN0cmluZyBmYW1pbHlOYW1lQWZ0ZXJNYXRjaGluZyA9IFN0cmluZzo6ZnJvbVVU
RjgocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZm9udENvbmZpZ0ZhbWlseU5hbWVBZnRlck1hdGNo
aW5nKSk7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWVBZnRlckNvbmZpZ3Vy
YXRpb24sIGZhbWlseU5hbWVBZnRlck1hdGNoaW5nKSkKKyAgICAgICAgcmV0dXJuIG5ldyBGb250
UGxhdGZvcm1EYXRhKHJlc3VsdFBhdHRlcm4uZ2V0KCksIGZvbnREZXNjcmlwdGlvbik7CisKKyAg
ICAvLyBJZiBGb250Y29uZmlnIGdhdmUgdXNlIGEgZGlmZmVyZW50IGZvbnQgZmFtaWx5IHRoYW4g
dGhlIG9uZSB3ZSByZXF1ZXN0ZWQsIHdlIHNob3VsZCBpZ25vcmUgaXQKKyAgICAvLyBhbmQgYWxs
b3cgV2ViQ29yZSB0byBnaXZlIHVzIHRoZSBuZXh0IGZvbnQgb24gdGhlIENTUyBmYWxsYmFjayBs
aXN0LiBUaGUgb25seSBleGNlcHRpb24gaXMgaWYKKyAgICAvLyB0aGlzIGZhbWlseSBuYW1lIGlz
IGEgY29tbW9ubHkgdXNlZCBnZW5lcmljIGZhbWlseS4KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UoZmFtaWx5TmFtZVN0cmluZywgInNhbnMiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHlO
YW1lU3RyaW5nLCAic2Fucy1zZXJpZiIpCisgICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZh
bWlseU5hbWVTdHJpbmcsICJzZXJpZiIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWVT
dHJpbmcsICJtb25vc3BhY2UiKQorICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHlO
YW1lU3RyaW5nLCAiZmFudGFzeSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWVTdHJp
bmcsICJjdXJzaXZlIikpCisgICAgICAgIHJldHVybiBuZXcgRm9udFBsYXRmb3JtRGF0YShyZXN1
bHRQYXR0ZXJuLmdldCgpLCBmb250RGVzY3JpcHRpb24pOworCisgICAgLy8gRm9udGNvbmZpZyBk
aWQgbm90IHJldHVybiBhIGdvb2QgbWF0Y2guCisgICAgcmV0dXJuIDA7Cit9CisKK30KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udEN1c3RvbVBsYXRmb3JtRGF0
YUZyZWVUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zy
ZWV0eXBlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAJKHJldmlzaW9uIDcwMjg3
KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDdXN0b21QbGF0Zm9y
bURhdGEuY3BwOjcwMjg3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2Vy
LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUg
IkZvbnRQbGF0Zm9ybURhdGEuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRl
IDxjYWlyby1mdC5oPgorI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIHZvaWQgcmVsZWFzZUN1c3RvbUZvbnREYXRhKHZvaWQqIGRhdGEpCit7CisgICAg
c3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oZGF0YSktPmRlcmVmKCk7Cit9CisKK0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGE6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGEoRlRfRmFjZSBmcmVlVHlwZUZh
Y2UsIFNoYXJlZEJ1ZmZlciogYnVmZmVyKQorICAgIDogbV9mcmVlVHlwZUZhY2UoZnJlZVR5cGVG
YWNlKQorICAgICwgbV9mb250RmFjZShjYWlyb19mdF9mb250X2ZhY2VfY3JlYXRlX2Zvcl9mdF9m
YWNlKGZyZWVUeXBlRmFjZSwgMCkpCit7CisgICAgLy8gRklYTUUgU2hvdWxkIHdlIGJlIHNldHRp
bmcgc29tZSBoaW50aW5nIG9wdGlvbnMgaGVyZT8KKworICAgIGJ1ZmZlci0+cmVmKCk7IC8vIFRo
aXMgaXMgYmFsYW5jZWQgYnkgdGhlIGJ1ZmZlci0+ZGVyZWYoKSBpbiByZWxlYXNlQ3VzdG9tRm9u
dERhdGEuCisgICAgc3RhdGljIGNhaXJvX3VzZXJfZGF0YV9rZXlfdCBidWZmZXJLZXk7CisgICAg
Y2Fpcm9fZm9udF9mYWNlX3NldF91c2VyX2RhdGEobV9mb250RmFjZSwgJmJ1ZmZlcktleSwgYnVm
ZmVyLAorICAgICAgICAgc3RhdGljX2Nhc3Q8Y2Fpcm9fZGVzdHJveV9mdW5jX3Q+KHJlbGVhc2VD
dXN0b21Gb250RGF0YSkpOworCisgICAgLy8gQ2Fpcm8gZG9lc24ndCBkbyBGcmVlVHlwZSByZWZl
cmVuY2UgY291bnRpbmcsIHNvIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2hlbgorICAgIC8vIHRo
aXMgY2Fpcm9fZm9udF9mYWNlX3QgaXMgZGVzdHJveWVkLCBpdCBjbGVhbnMgdXAgdGhlIEZyZWVU
eXBlIGZhY2UgYXMgd2VsbC4KKyAgICBzdGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tleV90IGZyZWVU
eXBlRmFjZUtleTsKKyAgICBjYWlyb19mb250X2ZhY2Vfc2V0X3VzZXJfZGF0YShtX2ZvbnRGYWNl
LCAmZnJlZVR5cGVGYWNlS2V5LCBmcmVlVHlwZUZhY2UsCisgICAgICAgICByZWludGVycHJldF9j
YXN0PGNhaXJvX2Rlc3Ryb3lfZnVuY190PihGVF9Eb25lX0ZhY2UpKTsKK30KKworRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YTo6fkZvbnRDdXN0b21QbGF0Zm9ybURhdGEoKQoreworICAgIC8vIG1fZnJl
ZVR5cGVGYWNlIHdpbGwgYmUgZGVzdHJveWVkIGFsb25nIHdpdGggbV9mb250RmFjZS4gU2VlIHRo
ZSBjb25zdHJ1Y3Rvci4KKyAgICBjYWlyb19mb250X2ZhY2VfZGVzdHJveShtX2ZvbnRGYWNlKTsK
K30KKworRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZv
cm1EYXRhKGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250T3JpZW50YXRpb24s
IEZvbnRSZW5kZXJpbmdNb2RlKQoreworICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKG1fZm9u
dEZhY2UsIHNpemUsIGJvbGQsIGl0YWxpYyk7Cit9CisKK0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEq
IGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoU2hhcmVkQnVmZmVyKiBidWZmZXIpCit7Cisg
ICAgQVNTRVJUX0FSRyhidWZmZXIsIGJ1ZmZlcik7CisKKyAgICBzdGF0aWMgRlRfTGlicmFyeSBs
aWJyYXJ5ID0gMDsKKyAgICBpZiAoIWxpYnJhcnkgJiYgRlRfSW5pdF9GcmVlVHlwZSgmbGlicmFy
eSkpIHsKKyAgICAgICAgbGlicmFyeSA9IDA7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIEZUX0ZhY2UgZnJlZVR5cGVGYWNlOworICAgIGlmIChGVF9OZXdfTWVtb3J5X0ZhY2UobGli
cmFyeSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGVF9CeXRlKj4oYnVmZmVyLT5kYXRhKCkpLCBi
dWZmZXItPnNpemUoKSwgMCwgJmZyZWVUeXBlRmFjZSkpCisgICAgICAgIHJldHVybiAwOworICAg
IHJldHVybiBuZXcgRm9udEN1c3RvbVBsYXRmb3JtRGF0YShmcmVlVHlwZUZhY2UsIGJ1ZmZlcik7
Cit9CisKK2Jvb2wgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6c3VwcG9ydHNGb3JtYXQoY29uc3Qg
U3RyaW5nJiBmb3JtYXQpCit7CisgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGZvcm1hdCwg
InRydWV0eXBlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZm9ybWF0LCAib3BlbnR5cGUiKTsKK30K
KworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZv
cm1EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9Gb250UGxhdGZvcm1EYXRhLmgJKHJldmlzaW9uIDcwMjg3KQkoZnJvbSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5oOjcwMjg3KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1t
ZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFu
cyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2gg
Q2VudGVyIFVTQSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhRnJlZVR5cGVf
aAorI2RlZmluZSBGb250UGxhdGZvcm1EYXRhRnJlZVR5cGVfaAorCisjaW5jbHVkZSAiRm9udERl
c2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJIYXNoRnVu
Y3Rpb25zLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1SZWZQdHJDYWlyby5oIgorI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisKK3R5cGVkZWYgc3RydWN0IF9GY0ZvbnRTZXQgRmNGb250U2V0OworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGEgeworcHVibGljOgor
ICAgIEZvbnRQbGF0Zm9ybURhdGEoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAg
ICAgICA6IG1fZmFsbGJhY2tzKDApCisgICAgICAgICwgbV9zaXplKDApCisgICAgICAgICwgbV9z
eW50aGV0aWNCb2xkKGZhbHNlKQorICAgICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkK
KyAgICAgICAgLCBtX3NjYWxlZEZvbnQoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpCisgICAg
ICAgIHsgfQorCisgICAgRm9udFBsYXRmb3JtRGF0YSgpCisgICAgICAgIDogbV9mYWxsYmFja3Mo
MCkKKyAgICAgICAgLCBtX3NpemUoMCkKKyAgICAgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2Up
CisgICAgICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNlKQorICAgICAgICB7IH0KKworICAg
IEZvbnRQbGF0Zm9ybURhdGEoRmNQYXR0ZXJuKiwgY29uc3QgRm9udERlc2NyaXB0aW9uJik7Cisg
ICAgRm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UsIGZsb2F0IHNp
emUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQg
c2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7CisgICAgRm9udFBsYXRmb3JtRGF0YShjb25z
dCBGb250UGxhdGZvcm1EYXRhJik7CisgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiwgZmxvYXQgc2l6ZSk7CisKKyAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOworCisg
ICAgYm9vbCBpc0ZpeGVkUGl0Y2goKTsKKyAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zaXplOyB9CisgICAgdm9pZCBzZXRTaXplKGZsb2F0IHNpemUpIHsgbV9zaXplID0gc2l6ZTsg
fQorICAgIGJvb2wgc3ludGhldGljQm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9s
ZDsgfQorICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhl
dGljT2JsaXF1ZTsgfQorCisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2NhbGVkRm9udC5nZXQoKTsgfQorCisgICAgdW5zaWduZWQgaGFzaCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gUHRySGFzaDxjYWlyb19zY2FsZWRfZm9udF90
Kj46Omhhc2gobV9zY2FsZWRGb250LmdldCgpKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpIGNvbnN0OworICAgIEZvbnRQbGF0Zm9ybURhdGEm
IG9wZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CisgICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zY2FsZWRGb250
LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CisgICAgfQorCisjaWZuZGVmIE5ERUJVRworICAg
IFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OworI2VuZGlmCisKKyAgICBQbGF0Zm9ybVJlZlB0
cjxGY1BhdHRlcm4+IG1fcGF0dGVybjsKKyAgICBGY0ZvbnRTZXQqIG1fZmFsbGJhY2tzOworICAg
IGZsb2F0IG1fc2l6ZTsKKyAgICBib29sIG1fc3ludGhldGljQm9sZDsKKyAgICBib29sIG1fc3lu
dGhldGljT2JsaXF1ZTsKKyAgICBib29sIG1fZml4ZWRXaWR0aDsKKyAgICBQbGF0Zm9ybVJlZlB0
cjxjYWlyb19zY2FsZWRfZm9udF90PiBtX3NjYWxlZEZvbnQ7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCBpbml0aWFsaXplV2l0aEZvbnRGYWNlKGNhaXJvX2ZvbnRfZmFjZV90Kik7Cit9OworCit9CisK
KyNlbmRpZiAvLyBGb250UGxhdGZvcm1EYXRhRnJlZVR5cGVfaApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3Jt
RGF0YUZyZWVUeXBlLmNwcAkocmV2aXNpb24gNzAyODcpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcDo3MDI4NykKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hh
ZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdl
ciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgSWdhbGlh
IFMuTC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgor
I2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+CisjaW5j
bHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxmb250Y29uZmlnL2ZjZnJlZXR5cGUuaD4KKworI2lm
ICFQTEFURk9STShFRkwpIHx8IEVOQUJMRShHTElCX1NVUFBPUlQpCisjaW5jbHVkZSA8Z2RrL2dk
ay5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2Fpcm9fc3VicGl4ZWxfb3Jk
ZXJfdCBjb252ZXJ0Rm9udENvbmZpZ1N1YnBpeGVsT3JkZXIoaW50IGZvbnRDb25maWdPcmRlcikK
K3sKKyAgICBzd2l0Y2ggKGZvbnRDb25maWdPcmRlcikgeworICAgIGNhc2UgRkNfUkdCQV9SR0I6
CisgICAgICAgIHJldHVybiBDQUlST19TVUJQSVhFTF9PUkRFUl9SR0I7CisgICAgY2FzZSBGQ19S
R0JBX0JHUjoKKyAgICAgICAgcmV0dXJuIENBSVJPX1NVQlBJWEVMX09SREVSX0JHUjsKKyAgICBj
YXNlIEZDX1JHQkFfVlJHQjoKKyAgICAgICAgcmV0dXJuIENBSVJPX1NVQlBJWEVMX09SREVSX1ZS
R0I7CisgICAgY2FzZSBGQ19SR0JBX1ZCR1I6CisgICAgICAgIHJldHVybiBDQUlST19TVUJQSVhF
TF9PUkRFUl9WQkdSOworICAgIGNhc2UgRkNfUkdCQV9OT05FOgorICAgIGNhc2UgRkNfUkdCQV9V
TktOT1dOOgorICAgICAgICByZXR1cm4gQ0FJUk9fU1VCUElYRUxfT1JERVJfREVGQVVMVDsKKyAg
ICB9CisgICAgcmV0dXJuIENBSVJPX1NVQlBJWEVMX09SREVSX0RFRkFVTFQ7Cit9CisKK2NhaXJv
X2hpbnRfc3R5bGVfdCBjb252ZXJ0Rm9udENvbmZpZ0hpbnRTdHlsZShpbnQgZm9udENvbmZpZ1N0
eWxlKQoreworICAgIHN3aXRjaCAoZm9udENvbmZpZ1N0eWxlKSB7CisgICAgY2FzZSBGQ19ISU5U
X05PTkU6CisgICAgICAgIHJldHVybiBDQUlST19ISU5UX1NUWUxFX05PTkU7CisgICAgY2FzZSBG
Q19ISU5UX1NMSUdIVDoKKyAgICAgICAgcmV0dXJuIENBSVJPX0hJTlRfU1RZTEVfU0xJR0hUOwor
ICAgIGNhc2UgRkNfSElOVF9NRURJVU06CisgICAgICAgIHJldHVybiBDQUlST19ISU5UX1NUWUxF
X01FRElVTTsKKyAgICBjYXNlIEZDX0hJTlRfRlVMTDoKKyAgICAgICAgcmV0dXJuIENBSVJPX0hJ
TlRfU1RZTEVfRlVMTDsKKyAgICB9CisgICAgcmV0dXJuIENBSVJPX0hJTlRfU1RZTEVfTk9ORTsK
K30KKwordm9pZCBzZXRDYWlyb0ZvbnRPcHRpb25zRnJvbUZvbnRDb25maWdQYXR0ZXJuKGNhaXJv
X2ZvbnRfb3B0aW9uc190KiBvcHRpb25zLCBGY1BhdHRlcm4qIHBhdHRlcm4pCit7CisgICAgRmNC
b29sIGJvb2xlYW5SZXN1bHQ7CisgICAgaW50IGludGVnZXJSZXN1bHQ7CisKKyAgICBpZiAoRmNQ
YXR0ZXJuR2V0SW50ZWdlcihwYXR0ZXJuLCBGQ19SR0JBLCAwLCAmaW50ZWdlclJlc3VsdCkgPT0g
RmNSZXN1bHRNYXRjaCkgeworICAgICAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X3N1YnBpeGVs
X29yZGVyKG9wdGlvbnMsIGNvbnZlcnRGb250Q29uZmlnU3VicGl4ZWxPcmRlcihpbnRlZ2VyUmVz
dWx0KSk7CisKKyAgICAgICAgLy8gQmFzZWQgb24gdGhlIGxvZ2ljIGluIGNhaXJvLWZ0LWZvbnQu
YyBpbiB0aGUgY2Fpcm8gc291cmNlLCBhIGZvbnQgd2l0aAorICAgICAgICAvLyBhIHN1YnBpeGVs
IG9yZGVyIGltcGxpZXMgdGhhdCBpcyB1c2VzIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KKyAgICAg
ICAgaWYgKGludGVnZXJSZXN1bHQgIT0gRkNfUkdCQV9OT05FKQorICAgICAgICAgICAgY2Fpcm9f
Zm9udF9vcHRpb25zX3NldF9hbnRpYWxpYXMob3B0aW9ucywgQ0FJUk9fQU5USUFMSUFTX1NVQlBJ
WEVMKTsKKyAgICB9CisKKyAgICBpZiAoRmNQYXR0ZXJuR2V0Qm9vbChwYXR0ZXJuLCBGQ19BTlRJ
QUxJQVMsIDAsICZib29sZWFuUmVzdWx0KSA9PSBGY1Jlc3VsdE1hdGNoKSB7CisgICAgICAgIC8v
IE9ubHkgb3ZlcnJpZGUgdGhlIGFudGktYWxpYXNpbmcgc2V0dGluZyBpZiB3YXMgcHJldmlvdXNs
eSB0dXJuZWQgb2ZmLiBPdGhlcndpc2UKKyAgICAgICAgLy8gd2UnbGwgb3ZlcnJpZGUgdGhlIHBy
ZWZlcmVuY2Ugd2hpY2ggZGVjaWRlcyBiZXR3ZWVuIGdyYXkgYW50aS1hbGlhc2luZyBhbmQKKyAg
ICAgICAgLy8gc3VicGl4ZWwgYW50aS1hbGlhc2luZy4KKyAgICAgICAgaWYgKCFib29sZWFuUmVz
dWx0KQorICAgICAgICAgICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9hbnRpYWxpYXMob3B0aW9u
cywgQ0FJUk9fQU5USUFMSUFTX05PTkUpOworICAgICAgICBlbHNlIGlmIChjYWlyb19mb250X29w
dGlvbnNfZ2V0X2FudGlhbGlhcyhvcHRpb25zKSA9PSBDQUlST19BTlRJQUxJQVNfTk9ORSkKKyAg
ICAgICAgICAgIGNhaXJvX2ZvbnRfb3B0aW9uc19zZXRfYW50aWFsaWFzKG9wdGlvbnMsIENBSVJP
X0FOVElBTElBU19HUkFZKTsKKyAgICB9CisKKyAgICBpZiAoRmNQYXR0ZXJuR2V0SW50ZWdlcihw
YXR0ZXJuLCBGQ19ISU5UX1NUWUxFLCAwLCAmaW50ZWdlclJlc3VsdCkgPT0gRmNSZXN1bHRNYXRj
aCkKKyAgICAgICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9oaW50X3N0eWxlKG9wdGlvbnMsIGNv
bnZlcnRGb250Q29uZmlnSGludFN0eWxlKGludGVnZXJSZXN1bHQpKTsKKyAgICBpZiAoRmNQYXR0
ZXJuR2V0Qm9vbChwYXR0ZXJuLCBGQ19ISU5USU5HLCAwLCAmYm9vbGVhblJlc3VsdCkgPT0gRmNS
ZXN1bHRNYXRjaCAmJiAhYm9vbGVhblJlc3VsdCkKKyAgICAgICAgY2Fpcm9fZm9udF9vcHRpb25z
X3NldF9oaW50X3N0eWxlKG9wdGlvbnMsIENBSVJPX0hJTlRfU1RZTEVfTk9ORSk7Cit9CisKK3N0
YXRpYyBjb25zdCBjYWlyb19mb250X29wdGlvbnNfdCogZ2V0RGVmYXVsdEZvbnRPcHRpb25zKCkK
K3sKKyAgICBzdGF0aWMgY29uc3QgY2Fpcm9fZm9udF9vcHRpb25zX3QqIG9wdGlvbnMgPSBjYWly
b19mb250X29wdGlvbnNfY3JlYXRlKCk7CisjaWYgUExBVEZPUk0oR1RLKSB8fCBFTkFCTEUoR0xJ
Ql9TVVBQT1JUKQorICAgIGlmIChHZGtTY3JlZW4qIHNjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2Rl
ZmF1bHQoKSkgeworICAgICAgICBjb25zdCBjYWlyb19mb250X29wdGlvbnNfdCogc2NyZWVuT3B0
aW9ucyA9IGdka19zY3JlZW5fZ2V0X2ZvbnRfb3B0aW9ucyhzY3JlZW4pOworICAgICAgICBpZiAo
c2NyZWVuT3B0aW9ucykKKyAgICAgICAgICAgIG9wdGlvbnMgPSBzY3JlZW5PcHRpb25zOworICAg
IH0KKyNlbmRpZgorICAgIHJldHVybiBvcHRpb25zOworfQorCitGb250UGxhdGZvcm1EYXRhOjpG
b250UGxhdGZvcm1EYXRhKEZjUGF0dGVybiogcGF0dGVybiwgY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24pCisgICAgOiBtX3BhdHRlcm4ocGF0dGVybikKKyAgICAsIG1fZmFs
bGJhY2tzKDApCisgICAgLCBtX3NpemUoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXpl
KCkpCisgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCisgICAgLCBtX3N5bnRoZXRpY09ibGlx
dWUoZmFsc2UpCisgICAgLCBtX2ZpeGVkV2lkdGgoZmFsc2UpCit7CisgICAgUGxhdGZvcm1SZWZQ
dHI8Y2Fpcm9fZm9udF9mYWNlX3Q+IGZvbnRGYWNlID0gYWRvcHRQbGF0Zm9ybVJlZihjYWlyb19m
dF9mb250X2ZhY2VfY3JlYXRlX2Zvcl9wYXR0ZXJuKG1fcGF0dGVybi5nZXQoKSkpOworICAgIGlu
aXRpYWxpemVXaXRoRm9udEZhY2UoZm9udEZhY2UuZ2V0KCkpOworCisgICAgaW50IHNwYWNpbmc7
CisgICAgaWYgKEZjUGF0dGVybkdldEludGVnZXIocGF0dGVybiwgRkNfU1BBQ0lORywgMCwgJnNw
YWNpbmcpID09IEZjUmVzdWx0TWF0Y2ggJiYgc3BhY2luZyA9PSBGQ19NT05PKQorICAgICAgICBt
X2ZpeGVkV2lkdGggPSB0cnVlOworCisgICAgaWYgKGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSA+
PSBGb250V2VpZ2h0Qm9sZCkgeworICAgICAgICAvLyBUaGUgRkNfRU1CT0xERU4gcHJvcGVydHkg
aW5zdHJ1Y3RzIHVzIHRvIGZha2UgdGhlIGJvbGRuZXNzIG9mIHRoZSBmb250LgorICAgICAgICBG
Y0Jvb2wgZm9udENvbmZpZ0VtYm9sZGVuOworICAgICAgICBpZiAoRmNQYXR0ZXJuR2V0Qm9vbChw
YXR0ZXJuLCBGQ19FTUJPTERFTiwgMCwgJmZvbnRDb25maWdFbWJvbGRlbikgPT0gRmNSZXN1bHRN
YXRjaCkKKyAgICAgICAgICAgIG1fc3ludGhldGljQm9sZCA9IGZvbnRDb25maWdFbWJvbGRlbjsK
KyAgICB9Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6
ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYykKKyAgICA6IG1fZmFsbGJhY2tzKDApCisgICAgLCBt
X3NpemUoc2l6ZSkKKyAgICAsIG1fc3ludGhldGljQm9sZChib2xkKQorICAgICwgbV9zeW50aGV0
aWNPYmxpcXVlKGl0YWxpYykKKyAgICAsIG1fZml4ZWRXaWR0aChmYWxzZSkKK3sKKyAgICAvLyBX
ZSBjYW5ub3QgY3JlYXRlIGEgc2NhbGVkIGZvbnQgaGVyZS4KK30KKworRm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UsIGZsb2F0IHNp
emUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCisgICAgOiBtX2ZhbGxiYWNrcygwKQorICAgICwg
bV9zaXplKHNpemUpCisgICAgLCBtX3N5bnRoZXRpY0JvbGQoYm9sZCkKKyAgICAsIG1fc3ludGhl
dGljT2JsaXF1ZShpdGFsaWMpCit7CisgICAgaW5pdGlhbGl6ZVdpdGhGb250RmFjZShmb250RmFj
ZSk7CisKKyAgICBGVF9GYWNlIGZvbnRDb25maWdGYWNlID0gY2Fpcm9fZnRfc2NhbGVkX2ZvbnRf
bG9ja19mYWNlKG1fc2NhbGVkRm9udC5nZXQoKSk7CisgICAgaWYgKGZvbnRDb25maWdGYWNlKSB7
CisgICAgICAgIG1fZml4ZWRXaWR0aCA9IGZvbnRDb25maWdGYWNlLT5mYWNlX2ZsYWdzICYgRlRf
RkFDRV9GTEFHX0ZJWEVEX1dJRFRIOworICAgICAgICBjYWlyb19mdF9zY2FsZWRfZm9udF91bmxv
Y2tfZmFjZShtX3NjYWxlZEZvbnQuZ2V0KCkpOworICAgIH0KK30KKworRm9udFBsYXRmb3JtRGF0
YSYgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90
aGVyKQoreworICAgIC8vIENoZWNrIGZvciBzZWxmLWFzc2lnbm1lbnQuCisgICAgaWYgKHRoaXMg
PT0gJm90aGVyKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBtX3NpemUgPSBvdGhlci5t
X3NpemU7CisgICAgbV9zeW50aGV0aWNCb2xkID0gb3RoZXIubV9zeW50aGV0aWNCb2xkOworICAg
IG1fc3ludGhldGljT2JsaXF1ZSA9IG90aGVyLm1fc3ludGhldGljT2JsaXF1ZTsKKyAgICBtX2Zp
eGVkV2lkdGggPSBvdGhlci5tX2ZpeGVkV2lkdGg7CisgICAgbV9zY2FsZWRGb250ID0gb3RoZXIu
bV9zY2FsZWRGb250OworICAgIG1fcGF0dGVybiA9IG90aGVyLm1fcGF0dGVybjsKKworICAgIGlm
IChtX2ZhbGxiYWNrcykgeworICAgICAgICBGY0ZvbnRTZXREZXN0cm95KG1fZmFsbGJhY2tzKTsK
KyAgICAgICAgLy8gVGhpcyB3aWxsIGJlIHJlLWNyZWF0ZWQgb24gZGVtYW5kLgorICAgICAgICBt
X2ZhbGxiYWNrcyA9IDA7CisgICAgfQorCisgICAgcmV0dXJuICp0aGlzOworfQorCitGb250UGxh
dGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVy
KQorICAgIDogbV9mYWxsYmFja3MoMCkKK3sKKyAgICAqdGhpcyA9IG90aGVyOworfQorCitGb250
UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90
aGVyLCBmbG9hdCBzaXplKQoreworICAgICp0aGlzID0gb3RoZXI7CisKKyAgICAvLyBXZSBuZWVk
IHRvIHJlaW5pdGlhbGl6ZSB0aGUgaW5zdGFuY2UsIGJlY2F1c2UgdGhlIGRpZmZlcmVuY2UgaW4g
c2l6ZSAKKyAgICAvLyBuZWNlc3NpdGF0ZXMgYSBuZXcgc2NhbGVkIGZvbnQgaW5zdGFuY2UuCisg
ICAgbV9zaXplID0gc2l6ZTsKKyAgICBpbml0aWFsaXplV2l0aEZvbnRGYWNlKGNhaXJvX3NjYWxl
ZF9mb250X2dldF9mb250X2ZhY2UobV9zY2FsZWRGb250LmdldCgpKSk7Cit9CisKK0ZvbnRQbGF0
Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkKK3sKKyAgICBpZiAobV9mYWxsYmFja3MpIHsK
KyAgICAgICAgRmNGb250U2V0RGVzdHJveShtX2ZhbGxiYWNrcyk7CisgICAgICAgIG1fZmFsbGJh
Y2tzID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNGaXhlZFBpdGNo
KCkKK3sKKyAgICByZXR1cm4gbV9maXhlZFdpZHRoOworfQorCitib29sIEZvbnRQbGF0Zm9ybURh
dGE6Om9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fcGF0dGVybiA9PSBvdGhlci5tX3BhdHRlcm4pCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGlmICghbV9wYXR0ZXJuIHx8IG1fcGF0dGVybi5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIHx8ICFvdGhlci5tX3BhdHRlcm4gfHwgb3RoZXIubV9wYXR0ZXJuLmlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gRmNQYXR0ZXJu
RXF1YWwobV9wYXR0ZXJuLmdldCgpLCBvdGhlci5tX3BhdHRlcm4uZ2V0KCkpOworfQorCisjaWZu
ZGVmIE5ERUJVRworU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisjZW5kaWYKKwordm9pZCBGb250UGxhdGZvcm1E
YXRhOjppbml0aWFsaXplV2l0aEZvbnRGYWNlKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSkK
K3sKKyAgICBjYWlyb19mb250X29wdGlvbnNfdCogb3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9u
c19jb3B5KGdldERlZmF1bHRGb250T3B0aW9ucygpKTsKKworICAgIGNhaXJvX21hdHJpeF90IGN0
bTsKKyAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKKworICAgIGNhaXJvX21h
dHJpeF90IGZvbnRNYXRyaXg7CisgICAgaWYgKCFtX3BhdHRlcm4pCisgICAgICAgIGNhaXJvX21h
dHJpeF9pbml0X3NjYWxlKCZmb250TWF0cml4LCBtX3NpemUsIG1fc2l6ZSk7CisgICAgZWxzZSB7
CisgICAgICAgIHNldENhaXJvRm9udE9wdGlvbnNGcm9tRm9udENvbmZpZ1BhdHRlcm4ob3B0aW9u
cywgbV9wYXR0ZXJuLmdldCgpKTsKKworICAgICAgICAvLyBGb250Q29uZmlnIG1heSByZXR1cm4g
YSBsaXN0IG9mIHRyYW5zZm9ybWF0aW9uIG1hdHJpY2VzIHdpdGggdGhlIHBhdHRlcm4sIGZvciBp
bnN0YW5jZSwKKyAgICAgICAgLy8gZm9yIGZvbnRzIHRoYXQgYXJlIG9ibGlxdWUuIFdlIHVzZSB0
aGF0IHRvIGluaXRpYWxpemUgdGhlIGNhaXJvIGZvbnQgbWF0cml4LgorICAgICAgICBGY01hdHJp
eCBmb250Q29uZmlnTWF0cml4LCAqdGVtcEZvbnRDb25maWdNYXRyaXg7CisgICAgICAgIEZjTWF0
cml4SW5pdCgmZm9udENvbmZpZ01hdHJpeCk7CisKKyAgICAgICAgLy8gVGhlc2UgbWF0cmljZXMg
bWF5IGJlIHN0YWNrZWQgaW4gdGhlIHBhdHRlcm4sIHNvIGl0J3Mgb3VyIGpvYiB0byBnZXQgdGhl
bSBhbGwgYW5kIG11bHRpcGx5IHRoZW0uCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBGY1BhdHRl
cm5HZXRNYXRyaXgobV9wYXR0ZXJuLmdldCgpLCBGQ19NQVRSSVgsIGksICZ0ZW1wRm9udENvbmZp
Z01hdHJpeCkgPT0gRmNSZXN1bHRNYXRjaDsgaSsrKQorICAgICAgICAgICAgRmNNYXRyaXhNdWx0
aXBseSgmZm9udENvbmZpZ01hdHJpeCwgJmZvbnRDb25maWdNYXRyaXgsIHRlbXBGb250Q29uZmln
TWF0cml4KTsKKyAgICAgICAgY2Fpcm9fbWF0cml4X2luaXQoJmZvbnRNYXRyaXgsIGZvbnRDb25m
aWdNYXRyaXgueHgsIC1mb250Q29uZmlnTWF0cml4Lnl4LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAtZm9udENvbmZpZ01hdHJpeC54eSwgZm9udENvbmZpZ01hdHJpeC55eSwgMCwgMCk7CisK
KyAgICAgICAgLy8gVGhlIG1hdHJpeCBmcm9tIEZvbnRDb25maWcgZG9lcyBub3QgaW5jbHVkZSB0
aGUgc2NhbGUuCisgICAgICAgIGNhaXJvX21hdHJpeF9zY2FsZSgmZm9udE1hdHJpeCwgbV9zaXpl
LCBtX3NpemUpOworICAgIH0KKworICAgIG1fc2NhbGVkRm9udCA9IGFkb3B0UGxhdGZvcm1SZWYo
Y2Fpcm9fc2NhbGVkX2ZvbnRfY3JlYXRlKGZvbnRGYWNlLCAmZm9udE1hdHJpeCwgJmN0bSwgb3B0
aW9ucykpOworICAgIGNhaXJvX2ZvbnRfb3B0aW9uc19kZXN0cm95KG9wdGlvbnMpOworfQorCisK
K30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvR2x5cGhQYWdlVHJl
ZU5vZGVGcmVlVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9mcmVldHlwZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNwcAkocmV2aXNpb24gNzAyODcp
CShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR2x5cGhQYWdlVHJlZU5vZGVD
YWlyby5jcHA6NzAyODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ds
eXBoUGFnZVRyZWVOb2RlRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1l
bEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBj
b2xsYWJvcmEuY28udWs+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdseXBoUGFnZVRy
ZWVOb2RlLmgiCisKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgPGNhaXJv
LWZ0Lmg+CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxmb250Y29uZmlnL2ZjZnJlZXR5
cGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVm
ZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCit7CisgICAgLy8gVGhl
IGJ1ZmZlckxlbmd0aCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiB0aGUgZ2x5cGggcGFnZSBzaXplIGlm
IHRoZSBidWZmZXIgaGFzIFVuaWNvZGUgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzLgorICAgIC8v
IFdlIHdvbid0IHN1cHBvcnQgdGhpcyBmb3Igbm93LgorICAgIGlmIChidWZmZXJMZW5ndGggPiBH
bHlwaFBhZ2U6OnNpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEZUX0ZhY2UgZmFj
ZSA9IGNhaXJvX2Z0X3NjYWxlZF9mb250X2xvY2tfZmFjZShmb250RGF0YS0+cGxhdGZvcm1EYXRh
KCkubV9zY2FsZWRGb250LmdldCgpKTsKKyAgICBpZiAoIWZhY2UpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBHbHlwaCBnbHlwaCA9IEZjRnJlZVR5
cGVDaGFySW5kZXgoZmFjZSwgYnVmZmVyW2ldKTsKKyAgICAgICAgaWYgKCFnbHlwaCkKKyAgICAg
ICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIDAsIDApOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGdseXBo
LCBmb250RGF0YSk7CisgICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGNhaXJvX2Z0X3NjYWxlZF9mb250X3VubG9ja19mYWNlKGZvbnREYXRhLT5w
bGF0Zm9ybURhdGEoKS5tX3NjYWxlZEZvbnQuZ2V0KCkpOworCisgICAgcmV0dXJuIGhhdmVHbHlw
aHM7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2lt
cGxlRm9udERhdGFGcmVlVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAkocmV2aXNpb24gNzAy
ODcpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vU2ltcGxlRm9udERhdGFD
YWlyby5jcHA6NzAyODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1Np
bXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5l
bW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBbHAgVG9rZXIgPGFs
cEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlw
dGlvbi5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSA8Y2Fpcm8tZnQuaD4K
KyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgor
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9p
ZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBjYWlyb19mb250X2V4dGVu
dHNfdCBmb250X2V4dGVudHM7CisgICAgY2Fpcm9fdGV4dF9leHRlbnRzX3QgdGV4dF9leHRlbnRz
OworICAgIGNhaXJvX3NjYWxlZF9mb250X2V4dGVudHMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRG
b250LmdldCgpLCAmZm9udF9leHRlbnRzKTsKKyAgICBtX2FzY2VudCA9IHN0YXRpY19jYXN0PGlu
dD4obHJvdW5kZihmb250X2V4dGVudHMuYXNjZW50KSk7CisgICAgbV9kZXNjZW50ID0gc3RhdGlj
X2Nhc3Q8aW50Pihscm91bmRmKGZvbnRfZXh0ZW50cy5kZXNjZW50KSk7CisgICAgbV9saW5lU3Bh
Y2luZyA9IHN0YXRpY19jYXN0PGludD4obHJvdW5kZihmb250X2V4dGVudHMuaGVpZ2h0KSk7Cisg
ICAgLy8gVGhlcmUgc2VlbXMgdG8gYmUgc29tZSByb3VuZGluZyBlcnJvciBpbiBjYWlybyAob3Ig
aW4gaG93IHdlCisgICAgLy8gdXNlIGNhaXJvKSB3aXRoIHNvbWUgZm9udHMsIGxpa2UgRGVqYVZ1
IFNhbnMgTW9ubywgd2hpY2ggbWFrZXMKKyAgICAvLyBjYWlybyByZXBvcnQgYSBoZWlnaHQgc21h
bGxlciB0aGFuIGFzY2VudCArIGRlc2NlbnQsIHdoaWNoIGlzCisgICAgLy8gd3JvbmcgYW5kIGNv
bmZ1c2VzIFdlYkNvcmUncyBsYXlvdXQgc3lzdGVtLiBXb3JrYXJvdW5kIHRoaXMKKyAgICAvLyB3
aGlsZSB3ZSBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbi4KKyAgICBpZiAobV9saW5lU3BhY2lu
ZyA8IG1fYXNjZW50ICsgbV9kZXNjZW50KQorICAgICAgICBtX2xpbmVTcGFjaW5nID0gbV9hc2Nl
bnQgKyBtX2Rlc2NlbnQ7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF9leHRlbnRzKG1fcGxh
dGZvcm1EYXRhLm1fc2NhbGVkRm9udC5nZXQoKSwgIngiLCAmdGV4dF9leHRlbnRzKTsKKyAgICBt
X3hIZWlnaHQgPSB0ZXh0X2V4dGVudHMuaGVpZ2h0OworICAgIGNhaXJvX3NjYWxlZF9mb250X3Rl
eHRfZXh0ZW50cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQuZ2V0KCksICIgIiwgJnRleHRf
ZXh0ZW50cyk7CisgICAgbV9zcGFjZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRleHRfZXh0
ZW50cy54X2FkdmFuY2UpOworICAgIG1fbGluZUdhcCA9IG1fbGluZVNwYWNpbmcgLSBtX2FzY2Vu
dCAtIG1fZGVzY2VudDsKKyAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0
YS5zeW50aGV0aWNCb2xkKCkgPyAxLjBmIDogMC5mOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQoreworICAgIG1fYXZnQ2hhcldpZHRoID0gMC5mOwor
ICAgIG1fbWF4Q2hhcldpZHRoID0gMC5mOworICAgIGluaXRDaGFyV2lkdGhzKCk7Cit9CisKK3Zv
aWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCit7CisgICAgZGVsZXRlIG1fc21h
bGxDYXBzRm9udERhdGE7CisgICAgbV9zbWFsbENhcHNGb250RGF0YSA9IDA7Cit9CisKK1NpbXBs
ZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEkgdGhp
bmsgd2Ugd2FudCB0byBhc2sgRm9udENvbmZpZyBmb3IgdGhlIHJpZ2h0IGZvbnQgYWdhaW4uCisg
ICAgaWYgKCFtX3NtYWxsQ2Fwc0ZvbnREYXRhKQorICAgICAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRh
ID0gbmV3IFNpbXBsZUZvbnREYXRhKAorICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YShjYWly
b19zY2FsZWRfZm9udF9nZXRfZm9udF9mYWNlKG1fcGxhdGZvcm1EYXRhLnNjYWxlZEZvbnQoKSks
CisgICAgICAgICAgICAwLjcwZiAqIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSwgbV9w
bGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxp
cXVlKCkpKTsKKworICAgIHJldHVybiBtX3NtYWxsQ2Fwc0ZvbnREYXRhOworfQorCitib29sIFNp
bXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IGludCBsZW5ndGgpIGNvbnN0Cit7CisgICAgRlRfRmFjZSBmYWNlID0gY2Fpcm9fZnRfc2NhbGVk
X2ZvbnRfbG9ja19mYWNlKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udC5nZXQoKSk7CisKKyAg
ICBpZiAoIWZhY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKEZjRnJlZVR5cGVDaGFySW5kZXgoZmFj
ZSwgY2hhcmFjdGVyc1tpXSkgPT0gMCkgeworICAgICAgICAgICAgY2Fpcm9fZnRfc2NhbGVkX2Zv
bnRfdW5sb2NrX2ZhY2UobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LmdldCgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNhaXJvX2Z0X3Nj
YWxlZF9mb250X3VubG9ja19mYWNlKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udC5nZXQoKSk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5l
UGl0Y2goKQoreworICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBtX3BsYXRmb3JtRGF0YS5pc0Zp
eGVkUGl0Y2goKTsKK30KKworRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5k
c0ZvckdseXBoKEdseXBoKSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFJlY3QoKTsKK30KKwor
ZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250KTsKKworICAg
IGNhaXJvX2dseXBoX3QgY2dseXBoID0geyBnbHlwaCwgMCwgMCB9OworICAgIGNhaXJvX3RleHRf
ZXh0ZW50c190IGV4dGVudHM7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZ2x5cGhfZXh0ZW50cyht
X3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQuZ2V0KCksICZjZ2x5cGgsIDEsICZleHRlbnRzKTsK
KworICAgIGZsb2F0IHcgPSAoZmxvYXQpbV9zcGFjZVdpZHRoOworICAgIGlmIChjYWlyb19zY2Fs
ZWRfZm9udF9zdGF0dXMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LmdldCgpKSA9PSBDQUlS
T19TVEFUVVNfU1VDQ0VTUyAmJiBleHRlbnRzLnhfYWR2YW5jZSkKKyAgICAgICAgdyA9IChmbG9h
dClleHRlbnRzLnhfYWR2YW5jZTsKKworICAgIHJldHVybiB3OyAgICAKK30KKworfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udENhY2hlUGFuZ28uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDYWNoZVBhbmdvLmNwcAko
cmV2aXNpb24gNzA0MDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q2Fj
aGVQYW5nby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotCi0jaW5jbHVkZSAiQ1N0cmluZy5oIgot
I2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJPd25QdHJDYWlyby5oIgotI2luY2x1ZGUgIlNp
bXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi12b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKLXsKLSAgICBpZiAo
IUZvbnRQbGF0Zm9ybURhdGE6OmluaXQoKSkKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci19Ci0KLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hh
cmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxl
bmd0aCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6
Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKLXsKLSAgICByZXR1
cm4gMDsKLX0KLQotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxi
YWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKLXsKLSAgICAv
LyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBk
ZWZhdWx0IGZvbnQgaGVyZS4KLSAgICAvLyBGb3Igbm93IHdlJ2xsIHBpY2sgdGhlIGRlZmF1bHQg
dGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCi0gICAg
c3RhdGljIEF0b21pY1N0cmluZyB0aW1lc1N0cigiVGltZXMgTmV3IFJvbWFuIik7Ci0gICAgcmV0
dXJuIGdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgdGltZXNTdHIpOwotfQotCi12
b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1p
bHlOYW1lLCBWZWN0b3I8dW5zaWduZWQ+JiB0cmFpdHNNYXNrcykKLXsKLX0KLQotRm9udFBsYXRm
b3JtRGF0YSogRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKLXsK
LSAgICByZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkp
OwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhUGFuZ28uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHAJKHJldmlzaW9uIDcwNDA5
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0
YVBhbmdvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgotCi0jaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLUZvbnRDdXN0b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZv
cm1EYXRhKCkKLXsKLX0KLQotRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRh
Ojpmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250
T3JpZW50YXRpb24sIEZvbnRSZW5kZXJpbmdNb2RlKQotewotICAgIHJldHVybiBGb250UGxhdGZv
cm1EYXRhKG1fZm9udEZhY2UsIHNpemUsIGJvbGQsIGl0YWxpYyk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHJlbGVhc2VEYXRhKHZvaWQqIGRhdGEpCi17Ci0gICAgc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVy
Kj4oZGF0YSktPmRlcmVmKCk7Ci19Ci0KLUZvbnRDdXN0b21QbGF0Zm9ybURhdGEqIGNyZWF0ZUZv
bnRDdXN0b21QbGF0Zm9ybURhdGEoU2hhcmVkQnVmZmVyKiBidWZmZXIpCi17Ci0gICAgLy8gRklY
TUU6IHdlIG5lZWQgc3VwcG9ydCBpbiBwYW5nbyB0byByZWFkIGZvbnRzIGZyb20gbWVtb3J5IHRv
IGltcGxlbWVudCB0aGlzLnkKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBGb250Q3VzdG9tUGxh
dGZvcm1EYXRhOjpzdXBwb3J0c0Zvcm1hdChjb25zdCBTdHJpbmcmIC8qIGZvcm1hdCAqLykKLXsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YVBhbmdvLmNwcAkocmV2aXNpb24g
NzA0MDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRh
UGFuZ28uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI3OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
TWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3
LCAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcg
SG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVy
IFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBJZ2FsaWEg
Uy5MLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJGb250UGxhdGZvcm1EYXRhLmgiCi0KLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2lu
Y2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPGFzc2VydC5oPgotCi0jaW5jbHVkZSA8cGFu
Z28vcGFuZ28uaD4KLSNpbmNsdWRlIDxwYW5nby9wYW5nb2NhaXJvLmg+Ci0KLS8vIFVzZSBjYWly
by1mdCBpIGEgcmVjZW50IGVub3VnaCBQYW5nbyB2ZXJzaW9uIGlzbid0IGF2YWlsYWJsZQotI2lm
ICFQQU5HT19WRVJTSU9OX0NIRUNLKDEsMTgsMCkKLSNpbmNsdWRlIDxjYWlyby1mdC5oPgotI2lu
Y2x1ZGUgPHBhbmdvL3BhbmdvZmMtZm9udG1hcC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8Z3RrL2d0
ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhbmdvRm9udE1hcCogRm9udFBsYXRmb3Jt
RGF0YTo6bV9mb250TWFwID0gMDsKLUdIYXNoVGFibGUqIEZvbnRQbGF0Zm9ybURhdGE6Om1faGFz
aFRhYmxlID0gMDsKLQotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1p
bHlOYW1lKQotICAgIDogbV9jb250ZXh0KDApCi0gICAgLCBtX2ZvbnQoMCkKLSAgICAsIG1fc2l6
ZShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpCi0gICAgLCBtX3N5bnRoZXRpY0JvbGQo
ZmFsc2UpCi0gICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2UpCi0gICAgLCBtX3NjYWxlZEZv
bnQoMCkKLXsKLSAgICBGb250UGxhdGZvcm1EYXRhOjppbml0KCk7Ci0KLSAgICBDU3RyaW5nIHN0
b3JlZF9mYW1pbHkgPSBmYW1pbHlOYW1lLnN0cmluZygpLnV0ZjgoKTsKLSAgICBjaGFyIGNvbnN0
KiBmYW1pbGllc1tdID0gewotICAgICAgc3RvcmVkX2ZhbWlseS5kYXRhKCksCi0gICAgICBOVUxM
Ci0gICAgfTsKLQotICAgIHN3aXRjaCAoZm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSkg
ewotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseToKLSAgICAgICAgZmFtaWxp
ZXNbMV0gPSAic2VyaWYiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlv
bjo6U2Fuc1NlcmlmRmFtaWx5OgotICAgICAgICBmYW1pbGllc1sxXSA9ICJzYW5zIjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseToKLSAg
ICAgICAgZmFtaWxpZXNbMV0gPSAibW9ub3NwYWNlIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5OgotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpT
dGFuZGFyZEZhbWlseToKLSAgICBkZWZhdWx0OgotICAgICAgICBmYW1pbGllc1sxXSA9ICJzYW5z
IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgUGFuZ29Gb250RGVzY3JpcHRpb24qIGRl
c2NyaXB0aW9uID0gcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9uZXcoKTsKLSAgICBwYW5nb19mb250
X2Rlc2NyaXB0aW9uX3NldF9hYnNvbHV0ZV9zaXplKGRlc2NyaXB0aW9uLCBmb250RGVzY3JpcHRp
b24uY29tcHV0ZWRTaXplKCkgKiBQQU5HT19TQ0FMRSk7Ci0KLSAgICAvLyBGSVhNRTogTWFwIGFs
bCBGb250V2VpZ2h0IHZhbHVlcyB0byBQYW5nbyBmb250IHdlaWdodHMuCi0gICAgaWYgKGZvbnRE
ZXNjcmlwdGlvbi53ZWlnaHQoKSA+PSBGb250V2VpZ2h0NjAwKQotICAgICAgICBwYW5nb19mb250
X2Rlc2NyaXB0aW9uX3NldF93ZWlnaHQoZGVzY3JpcHRpb24sIFBBTkdPX1dFSUdIVF9CT0xEKTsK
LSAgICBpZiAoZm9udERlc2NyaXB0aW9uLml0YWxpYygpKQotICAgICAgICBwYW5nb19mb250X2Rl
c2NyaXB0aW9uX3NldF9zdHlsZShkZXNjcmlwdGlvbiwgUEFOR09fU1RZTEVfSVRBTElDKTsKLQot
I2lmIFBBTkdPX1ZFUlNJT05fQ0hFQ0soMSwyMSw1KSAgIC8vIGRlcHJlY2F0ZWQgaW4gMS4yMQot
ICAgIG1fY29udGV4dCA9IHBhbmdvX2ZvbnRfbWFwX2NyZWF0ZV9jb250ZXh0KG1fZm9udE1hcCk7
Ci0jZWxzZQotICAgIG1fY29udGV4dCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFwX2NyZWF0ZV9jb250
ZXh0KFBBTkdPX0NBSVJPX0ZPTlRfTUFQKG1fZm9udE1hcCkpOwotI2VuZGlmCi0gICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7ICFtX2ZvbnQgJiYgaSA8IEdfTl9FTEVNRU5UUyhmYW1pbGllcyk7
IGkrKykgewotICAgICAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX3NldF9mYW1pbHkoZGVzY3Jp
cHRpb24sIGZhbWlsaWVzW2ldKTsKLSAgICAgICAgcGFuZ29fY29udGV4dF9zZXRfZm9udF9kZXNj
cmlwdGlvbihtX2NvbnRleHQsIGRlc2NyaXB0aW9uKTsKLSAgICAgICAgbV9mb250ID0gcGFuZ29f
Zm9udF9tYXBfbG9hZF9mb250KG1fZm9udE1hcCwgbV9jb250ZXh0LCBkZXNjcmlwdGlvbik7Ci0g
ICAgfQotCi0jaWYgUEFOR09fVkVSU0lPTl9DSEVDSygxLDE4LDApCi0gICAgaWYgKG1fZm9udCkK
LSAgICAgICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfcmVmZXJlbmNlKHBhbmdv
X2NhaXJvX2ZvbnRfZ2V0X3NjYWxlZF9mb250KFBBTkdPX0NBSVJPX0ZPTlQobV9mb250KSkpOwot
I2Vsc2UKLSAgICAvLyBUaGlzIGNvbXBhdGliaWxpdHkgY29kZSBmb3Igb2xkZXIgdmVyc2lvbnMg
b2YgUGFuZ28gaXMgbm90IHdlbGwtdGVzdGVkLgotICAgIGlmIChtX2ZvbnQpIHsKLSAgICAgICAg
UGFuZ29GY0ZvbnQqIGZjZm9udCA9IFBBTkdPX0ZDX0ZPTlQobV9mb250KTsKLSAgICAgICAgY2Fp
cm9fZm9udF9mYWNlX3QqIGZhY2UgPSBjYWlyb19mdF9mb250X2ZhY2VfY3JlYXRlX2Zvcl9wYXR0
ZXJuKGZjZm9udC0+Zm9udF9wYXR0ZXJuKTsKLSAgICAgICAgZG91YmxlIHNpemU7Ci0gICAgICAg
IGlmIChGY1BhdHRlcm5HZXREb3VibGUoZmNmb250LT5mb250X3BhdHRlcm4sIEZDX1BJWEVMX1NJ
WkUsIDAsICZzaXplKSAhPSBGY1Jlc3VsdE1hdGNoKQotICAgICAgICAgICAgc2l6ZSA9IDEyLjA7
Ci0gICAgICAgIGNhaXJvX21hdHJpeF90IGZvbnRNYXRyaXg7Ci0gICAgICAgIGNhaXJvX21hdHJp
eF9pbml0X3NjYWxlKCZmb250TWF0cml4LCBzaXplLCBzaXplKTsKLSAgICAgICAgY2Fpcm9fZm9u
dF9vcHRpb25zX3QqIGZvbnRPcHRpb25zOwotICAgICAgICBpZiAocGFuZ29fY2Fpcm9fY29udGV4
dF9nZXRfZm9udF9vcHRpb25zKG1fY29udGV4dCkpCi0gICAgICAgICAgICBmb250T3B0aW9ucyA9
IGNhaXJvX2ZvbnRfb3B0aW9uc19jb3B5KHBhbmdvX2NhaXJvX2NvbnRleHRfZ2V0X2ZvbnRfb3B0
aW9ucyhtX2NvbnRleHQpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9udE9wdGlvbnMg
PSBjYWlyb19mb250X29wdGlvbnNfY3JlYXRlKCk7Ci0gICAgICAgIGNhaXJvX21hdHJpeF90IGN0
bTsKLSAgICAgICAgY2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHkoJmN0bSk7Ci0gICAgICAgIG1f
c2NhbGVkRm9udCA9IGNhaXJvX3NjYWxlZF9mb250X2NyZWF0ZShmYWNlLCAmZm9udE1hdHJpeCwg
JmN0bSwgZm9udE9wdGlvbnMpOwotICAgICAgICBjYWlyb19mb250X29wdGlvbnNfZGVzdHJveShm
b250T3B0aW9ucyk7Ci0gICAgICAgIGNhaXJvX2ZvbnRfZmFjZV9kZXN0cm95KGZhY2UpOwotICAg
IH0KLSNlbmRpZgotICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZShkZXNjcmlwdGlvbik7
Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9v
bCBib2xkLCBib29sIGl0YWxpYykKLSAgICA6IG1fY29udGV4dCgwKQotICAgICwgbV9mb250KDAp
Ci0gICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fc3ludGhldGljQm9sZChib2xkKQotICAgICwg
bV9zeW50aGV0aWNPYmxpcXVlKGl0YWxpYykKLSAgICAsIG1fc2NhbGVkRm9udCgwKQotewotfQot
Ci1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBm
b250RmFjZSwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYykKLSAgICA6IG1fY29u
dGV4dCgwKQotICAgICwgbV9mb250KDApCi0gICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fc3lu
dGhldGljQm9sZChib2xkKQotICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGl0YWxpYykKLSAgICAs
IG1fc2NhbGVkRm9udCgwKQotewotICAgIGNhaXJvX21hdHJpeF90IGZvbnRNYXRyaXg7Ci0gICAg
Y2Fpcm9fbWF0cml4X2luaXRfc2NhbGUoJmZvbnRNYXRyaXgsIHNpemUsIHNpemUpOwotICAgIGNh
aXJvX21hdHJpeF90IGN0bTsKLSAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsK
LSAgICBjYWlyb19mb250X29wdGlvbnNfdCogb3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19j
cmVhdGUoKTsKLQotICAgIC8vIFdlIGZvcmNlIGFudGlhbGlhc2luZyBhbmQgZGlzYWJsZSBoaW50
aW5nIHRvIHByb3ZpZGUgY29uc2lzdGVudAotICAgIC8vIHR5cG9ncmFwaGljIHF1YWxpdGllcyBm
b3IgY3VzdG9tIGZvbnRzIG9uIGFsbCBwbGF0Zm9ybXMuCi0gICAgY2Fpcm9fZm9udF9vcHRpb25z
X3NldF9oaW50X3N0eWxlKG9wdGlvbnMsIENBSVJPX0hJTlRfU1RZTEVfTk9ORSk7Ci0gICAgY2Fp
cm9fZm9udF9vcHRpb25zX3NldF9hbnRpYWxpYXMob3B0aW9ucywgQ0FJUk9fQU5USUFMSUFTX0dS
QVkpOwotCi0gICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfY3JlYXRlKGZvbnRG
YWNlLCAmZm9udE1hdHJpeCwgJmN0bSwgb3B0aW9ucyk7Ci0gICAgY2Fpcm9fZm9udF9vcHRpb25z
X2Rlc3Ryb3kob3B0aW9ucyk7Ci19Ci0KLWJvb2wgRm9udFBsYXRmb3JtRGF0YTo6aW5pdCgpCi17
Ci0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBpZiAoaW5pdGlhbGl6
ZWQpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLQotICAg
IGlmICghbV9mb250TWFwKQotICAgICAgICBtX2ZvbnRNYXAgPSBwYW5nb19jYWlyb19mb250X21h
cF9nZXRfZGVmYXVsdCgpOwotICAgIGlmICghbV9oYXNoVGFibGUpIHsKLSAgICAgICAgUGFuZ29G
b250RmFtaWx5KiogZmFtaWxpZXMgPSAwOwotICAgICAgICBpbnQgbl9mYW1pbGllcyA9IDA7Ci0K
LSAgICAgICAgbV9oYXNoVGFibGUgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19zdHJfaGFzaCwg
Z19zdHJfZXF1YWwsIGdfZnJlZSwgZ19vYmplY3RfdW5yZWYpOwotCi0gICAgICAgIHBhbmdvX2Zv
bnRfbWFwX2xpc3RfZmFtaWxpZXMobV9mb250TWFwLCAmZmFtaWxpZXMsICZuX2ZhbWlsaWVzKTsK
LQotICAgICAgICBmb3IgKGludCBmYW1pbHkgPSAwOyBmYW1pbHkgPCBuX2ZhbWlsaWVzOyBmYW1p
bHkrKykKLSAgICAgICAgICAgICAgICBnX2hhc2hfdGFibGVfaW5zZXJ0KG1faGFzaFRhYmxlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19zdHJkdXAocGFuZ29fZm9udF9m
YW1pbHlfZ2V0X25hbWUoZmFtaWxpZXNbZmFtaWx5XSkpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ19vYmplY3RfcmVmKGZhbWlsaWVzW2ZhbWlseV0pKTsKLQotICAgICAg
ICBnX2ZyZWUoZmFtaWxpZXMpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1Gb250
UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCi17Ci0gICAgaWYgKG1fZm9udCAmJiBt
X2ZvbnQgIT0gcmVpbnRlcnByZXRfY2FzdDxQYW5nb0ZvbnQqPigtMSkpIHsKLSAgICAgICAgZ19v
YmplY3RfdW5yZWYobV9mb250KTsKLSAgICAgICAgbV9mb250ID0gMDsKLSAgICB9Ci0KLSAgICBp
ZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKG1fY29udGV4dCk7Ci0gICAg
ICAgIG1fY29udGV4dCA9IDA7Ci0gICAgfQotCi0gICAgaWYgKG1fc2NhbGVkRm9udCkgewotICAg
ICAgICBjYWlyb19zY2FsZWRfZm9udF9kZXN0cm95KG1fc2NhbGVkRm9udCk7Ci0gICAgICAgIG1f
c2NhbGVkRm9udCA9IDA7Ci0gICAgfQotfQotCi1ib29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzRml4
ZWRQaXRjaCgpCi17Ci0gICAgUGFuZ29Gb250RGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uID0gcGFu
Z29fZm9udF9kZXNjcmliZV93aXRoX2Fic29sdXRlX3NpemUobV9mb250KTsKLSAgICBQYW5nb0Zv
bnRGYW1pbHkqIGZhbWlseSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250RmFtaWx5Kj4oZ19o
YXNoX3RhYmxlX2xvb2t1cChtX2hhc2hUYWJsZSwgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9nZXRf
ZmFtaWx5KGRlc2NyaXB0aW9uKSkpOwotICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZShk
ZXNjcmlwdGlvbik7Ci0gICAgcmV0dXJuIHBhbmdvX2ZvbnRfZmFtaWx5X2lzX21vbm9zcGFjZShm
YW1pbHkpOwotfQotCi1Gb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRv
cj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpCi17Ci0gICAgLy8gQ2hlY2sgZm9yIHNl
bGYtYXNzaWdubWVudC4KLSAgICBpZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgIHJldHVybiAq
dGhpczsKLQotICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKLSAgICBtX3N5bnRoZXRpY0JvbGQg
PSBvdGhlci5tX3N5bnRoZXRpY0JvbGQ7Ci0gICAgbV9zeW50aGV0aWNPYmxpcXVlID0gb3RoZXIu
bV9zeW50aGV0aWNPYmxpcXVlOwotCi0gICAgaWYgKG90aGVyLm1fc2NhbGVkRm9udCkKLSAgICAg
ICAgY2Fpcm9fc2NhbGVkX2ZvbnRfcmVmZXJlbmNlKG90aGVyLm1fc2NhbGVkRm9udCk7Ci0gICAg
aWYgKG1fc2NhbGVkRm9udCkKLSAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJveShtX3Nj
YWxlZEZvbnQpOwotICAgIG1fc2NhbGVkRm9udCA9IG90aGVyLm1fc2NhbGVkRm9udDsKLQotICAg
IGlmIChvdGhlci5tX2ZvbnQpCi0gICAgICAgIGdfb2JqZWN0X3JlZihvdGhlci5tX2ZvbnQpOwot
ICAgIGlmIChtX2ZvbnQpCi0gICAgICAgIGdfb2JqZWN0X3VucmVmKG1fZm9udCk7Ci0gICAgbV9m
b250ID0gb3RoZXIubV9mb250OwotCi0gICAgaWYgKG90aGVyLm1fY29udGV4dCkKLSAgICAgICAg
Z19vYmplY3RfcmVmKG90aGVyLm1fY29udGV4dCk7Ci0gICAgaWYgKG1fY29udGV4dCkKLSAgICAg
ICAgZ19vYmplY3RfdW5yZWYobV9jb250ZXh0KTsKLSAgICBtX2NvbnRleHQgPSBvdGhlci5tX2Nv
bnRleHQ7Ci0KLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQ
bGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpCi0gICAgOiBtX2NvbnRl
eHQoMCkKLSAgICAsIG1fZm9udCgwKQotICAgICwgbV9zY2FsZWRGb250KDApCi17Ci0gICAgKnRo
aXMgPSBvdGhlcjsKLX0KLQotYm9vbCBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAotewotICAgIGlmIChtX2ZvbnQgPT0gb3Ro
ZXIubV9mb250KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAobV9mb250ID09IDAgfHwg
bV9mb250ID09IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpCi0gICAgICAgIHx8IG90
aGVyLm1fZm9udCA9PSAwIHx8IG90aGVyLm1fZm9udCA9PSByZWludGVycHJldF9jYXN0PFBhbmdv
Rm9udCo+KC0xKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFBhbmdvRm9udERlc2NyaXB0
aW9uKiB0aGlzRGVzYyA9IHBhbmdvX2ZvbnRfZGVzY3JpYmUobV9mb250KTsKLSAgICBQYW5nb0Zv
bnREZXNjcmlwdGlvbiogb3RoZXJEZXNjID0gcGFuZ29fZm9udF9kZXNjcmliZShvdGhlci5tX2Zv
bnQpOwotICAgIGJvb2wgcmVzdWx0ID0gcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9lcXVhbCh0aGlz
RGVzYywgb3RoZXJEZXNjKTsKLSAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUob3RoZXJE
ZXNjKTsKLSAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUodGhpc0Rlc2MpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi1TdHJpbmcgRm9udFBsYXRmb3JtRGF0
YTo6ZGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLSNlbmRp
ZgotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1E
YXRhUGFuZ28uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
b250UGxhdGZvcm1EYXRhUGFuZ28uaAkocmV2aXNpb24gNzA0MDkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uaAkod29ya2luZyBjb3B5KQpA
QCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVs
QGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0
aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIgVVNBLCBJ
bmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBGb250UGxhdGZvcm1EYXRh
UGFuZ29faAotI2RlZmluZSBGb250UGxhdGZvcm1EYXRhUGFuZ29faAotCi0jaW5jbHVkZSAiRm9u
dERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlIDxjYWly
by5oPgotI2luY2x1ZGUgPHBhbmdvL3BhbmdvY2Fpcm8uaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGEgewot
cHVibGljOgotICAgIEZvbnRQbGF0Zm9ybURhdGEoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVU
eXBlKQotICAgICAgICA6IG1fY29udGV4dCgwKQotICAgICAgICAsIG1fZm9udChoYXNoVGFibGVE
ZWxldGVkRm9udFZhbHVlKCkpCi0gICAgICAgICwgbV9zaXplKDApCi0gICAgICAgICwgbV9zeW50
aGV0aWNCb2xkKGZhbHNlKQotICAgICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKLSAg
ICAgICAgLCBtX3NjYWxlZEZvbnQoMCkKLSAgICAgICAgeyB9Ci0KLSAgICBGb250UGxhdGZvcm1E
YXRhKCkKLSAgICAgICAgOiBtX2NvbnRleHQoMCkKLSAgICAgICAgLCBtX2ZvbnQoMCkKLSAgICAg
ICAgLCBtX3NpemUoMCkKLSAgICAgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCi0gICAgICAg
ICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNlKQotICAgICAgICAsIG1fc2NhbGVkRm9udCgwKQot
ICAgICAgICB7IH0KLQotICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEoY2Fp
cm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlLCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRh
bGljKTsKLSAgICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBp
dGFsaWMpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwot
ICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7Ci0KLSAgICBzdGF0aWMgYm9vbCBpbml0KCk7Ci0gICAg
Ym9vbCBpc0ZpeGVkUGl0Y2goKTsKLSAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplOyB9Ci0gICAgdm9pZCBzZXRTaXplKGZsb2F0IHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQot
ICAgIGJvb2wgc3ludGhldGljQm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9sZDsg
fQotICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGlj
T2JsaXF1ZTsgfQotCi0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2NhbGVkRm9udDsgfQotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICB1aW50cHRyX3QgaGFzaENvZGVzWzFdID0geyByZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4obV9zY2FsZWRGb250KSB9OwotICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6
Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIHNpemVvZiho
YXNoQ29kZXMpIC8gc2l6ZW9mKFVDaGFyKSk7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKSBjb25zdDsKLSAgICBGb250UGxhdGZvcm1EYXRhJiBv
cGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZm9udCA9PSBoYXNo
VGFibGVEZWxldGVkRm9udFZhbHVlKCk7Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIFN0
cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwotI2VuZGlmCi0KLSAgICBzdGF0aWMgUGFuZ29Gb250
TWFwKiBtX2ZvbnRNYXA7Ci0gICAgc3RhdGljIEdIYXNoVGFibGUqIG1faGFzaFRhYmxlOwotICAg
IFBhbmdvQ29udGV4dCogbV9jb250ZXh0OwotICAgIFBhbmdvRm9udCogbV9mb250OwotICAgIGZs
b2F0IG1fc2l6ZTsKLSAgICBib29sIG1fc3ludGhldGljQm9sZDsKLSAgICBib29sIG1fc3ludGhl
dGljT2JsaXF1ZTsKLSAgICBjYWlyb19zY2FsZWRfZm9udF90KiBtX3NjYWxlZEZvbnQ7Ci1wcml2
YXRlOgotICAgIHN0YXRpYyBQYW5nb0ZvbnQgKmhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSB7
IHJldHVybiByZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+KC0xKTsgfQotfTsKLQotfQotCi0j
ZW5kaWYgLy8gRm9udFBsYXRmb3JtRGF0YVBhbmdvX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0dseXBoUGFnZVRyZWVOb2RlUGFuZ28uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dseXBoUGFnZVRyZWVOb2RlUGFuZ28uY3BwCShy
ZXZpc2lvbiA3MDQwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dseXBoUGFn
ZVRyZWVOb2RlUGFuZ28uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5j
b20KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xsYWJvcmEu
Y28udWs+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIgVVNB
LCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgi
Ci0KLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgPHBhbmdvL3BhbmdvLWZv
bnQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgUGFuZ29HbHlwaCBwYW5nb19m
b250X2dldF9nbHlwaChQYW5nb0ZvbnQqIGZvbnQsIFBhbmdvQ29udGV4dCogY29udGV4dCwgZ3Vu
aWNoYXIgd2MpCi17Ci0gICAgUGFuZ29HbHlwaCByZXN1bHQgPSAwOwotICAgIGdjaGFyIGJ1ZmZl
cls3XTsKLQotICAgIGdpbnQgIGxlbmd0aCA9IGdfdW5pY2hhcl90b191dGY4KHdjLCBidWZmZXIp
OwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGxlbmd0aCwgMCk7Ci0KLSAgICBHTGlzdCogaXRl
bXMgPSBwYW5nb19pdGVtaXplKGNvbnRleHQsIGJ1ZmZlciwgMCwgbGVuZ3RoLCBOVUxMLCBOVUxM
KTsKLQotICAgIGlmIChnX2xpc3RfbGVuZ3RoKGl0ZW1zKSA9PSAxKSB7Ci0gICAgICAgIFBhbmdv
SXRlbSogaXRlbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29JdGVtKj4oaXRlbXMtPmRhdGEpOwot
ICAgICAgICBQYW5nb0ZvbnQqIHRtcEZvbnQgPSBpdGVtLT5hbmFseXNpcy5mb250OwotICAgICAg
ICBpdGVtLT5hbmFseXNpcy5mb250ID0gZm9udDsKLQotICAgICAgICBQYW5nb0dseXBoU3RyaW5n
KiBnbHlwaHMgPSBwYW5nb19nbHlwaF9zdHJpbmdfbmV3KCk7Ci0gICAgICAgIHBhbmdvX3NoYXBl
KGJ1ZmZlciwgbGVuZ3RoLCAmaXRlbS0+YW5hbHlzaXMsIGdseXBocyk7Ci0KLSAgICAgICAgaXRl
bS0+YW5hbHlzaXMuZm9udCA9IHRtcEZvbnQ7Ci0KLSAgICAgICAgaWYgKGdseXBocy0+bnVtX2ds
eXBocyA9PSAxKQotICAgICAgICAgICAgcmVzdWx0ID0gZ2x5cGhzLT5nbHlwaHNbMF0uZ2x5cGg7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdfd2FybmluZygiZGlkbid0IGdldCAxIGdseXBo
IGJ1dCAlZCIsIGdseXBocy0+bnVtX2dseXBocyk7Ci0KLSAgICAgICAgcGFuZ29fZ2x5cGhfc3Ry
aW5nX2ZyZWUoZ2x5cGhzKTsKLSAgICB9Ci0KLSAgICBnX2xpc3RfZm9yZWFjaChpdGVtcywgKEdG
dW5jKXBhbmdvX2l0ZW1fZnJlZSwgTlVMTCk7Ci0gICAgZ19saXN0X2ZyZWUoaXRlbXMpOwotCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0
aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQotewotICAgIC8vIFRoZSBidWZmZXJM
ZW5ndGggd2lsbCBiZSBncmVhdGVyIHRoYW4gdGhlIGdseXBoIHBhZ2Ugc2l6ZSBpZiB0aGUgYnVm
ZmVyIGhhcyBVbmljb2RlIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycy4KLSAgICAvLyBXZSB3b24n
dCBzdXBwb3J0IHRoaXMgZm9yIG5vdy4KLSAgICBpZiAoYnVmZmVyTGVuZ3RoID4gR2x5cGhQYWdl
OjpzaXplKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWZvbnREYXRhLT5wbGF0
Zm9ybURhdGEoKS5tX2ZvbnQgfHwgZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm1fZm9udCA9PSBy
ZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+KC0xKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIEdseXBoIGdseXBoID0gcGFuZ29fZm9udF9nZXRf
Z2x5cGgoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm1fZm9udCwgZm9udERhdGEtPnBsYXRmb3Jt
RGF0YSgpLm1fY29udGV4dCwgYnVmZmVyW2ldKTsKLSAgICAgICAgaWYgKCFnbHlwaCkKLSAgICAg
ICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIDAsIDApOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGdseXBo
LCBmb250RGF0YSk7Ci0gICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBoYXZlR2x5cGhzOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YVBhbmdvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YVBhbmdvLmNwcAko
cmV2aXNpb24gNzA0MDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVG
b250RGF0YVBhbmdvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21h
aWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2Vy
LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgot
ICogQ29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgot
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2lt
cGxlRm9udERhdGEuaCIKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZvbnQu
aCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIK
LSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybUluaXQoKQotewotICAgIGNhaXJvX2ZvbnRfZXh0ZW50c190IGZvbnRf
ZXh0ZW50czsKLSAgICBjYWlyb190ZXh0X2V4dGVudHNfdCB0ZXh0X2V4dGVudHM7Ci0gICAgY2Fp
cm9fc2NhbGVkX2ZvbnRfZXh0ZW50cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQsICZmb250
X2V4dGVudHMpOwotICAgIG1fYXNjZW50ID0gc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKGZvbnRf
ZXh0ZW50cy5hc2NlbnQpKTsKLSAgICBtX2Rlc2NlbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGxyb3Vu
ZGYoZm9udF9leHRlbnRzLmRlc2NlbnQpKTsKLSAgICBtX2xpbmVTcGFjaW5nID0gc3RhdGljX2Nh
c3Q8aW50Pihscm91bmRmKGZvbnRfZXh0ZW50cy5oZWlnaHQpKTsKLSAgICAvLyBUaGVyZSBzZWVt
cyB0byBiZSBzb21lIHJvdW5kaW5nIGVycm9yIGluIGNhaXJvIChvciBpbiBob3cgd2UKLSAgICAv
LyB1c2UgY2Fpcm8pIHdpdGggc29tZSBmb250cywgbGlrZSBEZWphVnUgU2FucyBNb25vLCB3aGlj
aCBtYWtlcwotICAgIC8vIGNhaXJvIHJlcG9ydCBhIGhlaWdodCBzbWFsbGVyIHRoYW4gYXNjZW50
ICsgZGVzY2VudCwgd2hpY2ggaXMKLSAgICAvLyB3cm9uZyBhbmQgY29uZnVzZXMgV2ViQ29yZSdz
IGxheW91dCBzeXN0ZW0uIFdvcmthcm91bmQgdGhpcwotICAgIC8vIHdoaWxlIHdlIGZpZ3VyZSBv
dXQgd2hhdCdzIGdvaW5nIG9uLgotICAgIGlmIChtX2xpbmVTcGFjaW5nIDwgbV9hc2NlbnQgKyBt
X2Rlc2NlbnQpCi0gICAgICAgIG1fbGluZVNwYWNpbmcgPSBtX2FzY2VudCArIG1fZGVzY2VudDsK
LSAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMobV9wbGF0Zm9ybURhdGEubV9zY2Fs
ZWRGb250LCAieCIsICZ0ZXh0X2V4dGVudHMpOwotICAgIG1feEhlaWdodCA9IHRleHRfZXh0ZW50
cy5oZWlnaHQ7Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF9leHRlbnRzKG1fcGxhdGZvcm1E
YXRhLm1fc2NhbGVkRm9udCwgIiAiLCAmdGV4dF9leHRlbnRzKTsKLSAgICBtX3NwYWNlV2lkdGgg
PSAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRleHRfZXh0ZW50cy54X2FkdmFuY2UpOwotICAgIG1fbGlu
ZUdhcCA9IG1fbGluZVNwYWNpbmcgLSBtX2FzY2VudCAtIG1fZGVzY2VudDsKLSAgICBtX3N5bnRo
ZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkgPyAxLjBmIDog
MC5mOwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQot
ewotICAgIG1fYXZnQ2hhcldpZHRoID0gMC5mOwotICAgIG1fbWF4Q2hhcldpZHRoID0gMC5mOwot
ICAgIGluaXRDaGFyV2lkdGhzKCk7Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
RGVzdHJveSgpCi17Ci0gICAgZGVsZXRlIG1fc21hbGxDYXBzRm9udERhdGE7Ci0gICAgbV9zbWFs
bENhcHNGb250RGF0YSA9IDA7Ci19Ci0KLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6
c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX3NtYWxsQ2Fwc0ZvbnREYXRhKSB7Ci0gICAgICAgIEZvbnRE
ZXNjcmlwdGlvbiBkZXNjID0gRm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAg
ICAgIGRlc2Muc2V0U3BlY2lmaWVkU2l6ZSgwLjcwZiAqIGZvbnREZXNjcmlwdGlvbi5jb21wdXRl
ZFNpemUoKSk7Ci0gICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhKGRlc2MsIGRl
c2MuZmFtaWx5KCkuZmFtaWx5KCkpOwotICAgICAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gbmV3
IFNpbXBsZUZvbnREYXRhKHBsYXRmb3JtRGF0YSk7Ci0gICAgfQotICAgIHJldHVybiBtX3NtYWxs
Q2Fwc0ZvbnREYXRhOwotfQotCi1ib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3Rl
cnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAgYm9v
bCByZXN1bHQgPSB0cnVlOwotCi0gICAgUGFuZ29Db3ZlcmFnZSogY292ZXJhZ2UgPSBwYW5nb19m
b250X2dldF9jb3ZlcmFnZShtX3BsYXRmb3JtRGF0YS5tX2ZvbnQsIHBhbmdvX2xhbmd1YWdlX2dl
dF9kZWZhdWx0KCkpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewot
ICAgICAgICBpZiAoUEFOR09fQ09WRVJBR0VfTk9ORSA9PSBwYW5nb19jb3ZlcmFnZV9nZXQoY292
ZXJhZ2UsIGNoYXJhY3RlcnNbaV0pKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcGFuZ29fY292ZXJhZ2Vf
dW5yZWYoY292ZXJhZ2UpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBTaW1wbGVG
b250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQotewotICAgIGlmIChpc0N1c3RvbUZvbnQoKSkgewot
ICAgICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gbV9wbGF0Zm9ybURhdGEuaXNGaXhlZFBp
dGNoKCk7Ci19Ci0KLUZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JH
bHlwaChHbHlwaCkgY29uc3QKLXsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci19Ci0KLWZsb2F0
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCk7Ci0KLSAgICBjYWly
b19nbHlwaF90IGNnbHlwaCA9IHsgZ2x5cGgsIDAsIDAgfTsKLSAgICBjYWlyb190ZXh0X2V4dGVu
dHNfdCBleHRlbnRzOwotICAgIGNhaXJvX3NjYWxlZF9mb250X2dseXBoX2V4dGVudHMobV9wbGF0
Zm9ybURhdGEubV9zY2FsZWRGb250LCAmY2dseXBoLCAxLCAmZXh0ZW50cyk7Ci0KLSAgICBmbG9h
dCB3aWR0aCA9IChmbG9hdCltX3NwYWNlV2lkdGg7Ci0gICAgaWYgKGNhaXJvX3NjYWxlZF9mb250
X3N0YXR1cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQpID09IENBSVJPX1NUQVRVU19TVUND
RVNTICYmIGV4dGVudHMueF9hZHZhbmNlICE9IDApCi0gICAgICAgIHdpZHRoID0gKGZsb2F0KWV4
dGVudHMueF9hZHZhbmNlOwotCi0gICAgcmV0dXJuIHdpZHRoOyAgICAKLX0KLQotfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250Q2FjaGVQYW5nby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250Q2FjaGVQYW5nby5j
cHAJKHJldmlzaW9uIDcwMjg3KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
b250Q2FjaGVQYW5nby5jcHA6NzAyODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Bh
bmdvL0ZvbnRDYWNoZVBhbmdvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisKKyNpbmNsdWRlICJD
U3RyaW5nLmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIk93blB0ckNhaXJvLmgiCisj
aW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQor
eworICAgIGlmICghRm9udFBsYXRmb3JtRGF0YTo6aW5pdCgpKQorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9u
dERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCBpbnQgbGVuZ3RoKQoreworICAgIHJldHVybiAwOworfQorCitTaW1wbGVGb250RGF0YSog
Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQor
eworICAgIHJldHVybiAwOworfQorCitTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0
UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KQoreworICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0
aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLgorICAgIC8vIEZvciBub3cgd2UnbGwgcGljayB0
aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFueSBw
cmVmcy4KKyAgICBzdGF0aWMgQXRvbWljU3RyaW5nIHRpbWVzU3RyKCJUaW1lcyBOZXcgUm9tYW4i
KTsKKyAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0
cik7Cit9CisKK3ZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNT
dHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rvcjx1bnNpZ25lZD4mIHRyYWl0c01hc2tzKQoreworfQor
CitGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5KQoreworICAgIHJldHVybiBuZXcgRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRp
b24sIGZhbWlseSk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFu
Z28vRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHAJ
KHJldmlzaW9uIDcwMjg3KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwOjcwMjg3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9wYW5nby9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRva2Vy
IDxhbHBAYXRva2VyLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmgiCisKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNs
dWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRm9udEN1
c3RvbVBsYXRmb3JtRGF0YTo6fkZvbnRDdXN0b21QbGF0Zm9ybURhdGEoKQoreworfQorCitGb250
UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEoaW50
IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIEZvbnRPcmllbnRhdGlvbiwgRm9udFJlbmRl
cmluZ01vZGUpCit7CisgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEobV9mb250RmFjZSwgc2l6
ZSwgYm9sZCwgaXRhbGljKTsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZURhdGEodm9pZCogZGF0
YSkKK3sKKyAgICBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihkYXRhKS0+ZGVyZWYoKTsKK30K
KworRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YShT
aGFyZWRCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICAvLyBGSVhNRTogd2UgbmVlZCBzdXBwb3J0IGlu
IHBhbmdvIHRvIHJlYWQgZm9udHMgZnJvbSBtZW1vcnkgdG8gaW1wbGVtZW50IHRoaXMueQorICAg
IHJldHVybiAwOworfQorCitib29sIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OnN1cHBvcnRzRm9y
bWF0KGNvbnN0IFN0cmluZyYgLyogZm9ybWF0ICovKQoreworICAgIHJldHVybiBmYWxzZTsKK30K
KworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGxhdGZvcm1E
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250
UGxhdGZvcm1EYXRhLmgJKHJldmlzaW9uIDcwMjg3KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uaDo3MDI4NykKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBsYXRmb3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxA
Z21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIElu
Yy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEZvbnRQbGF0Zm9ybURhdGFQ
YW5nb19oCisjZGVmaW5lIEZvbnRQbGF0Zm9ybURhdGFQYW5nb19oCisKKyNpbmNsdWRlICJGb250
RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgPGNhaXJv
Lmg+CisjaW5jbHVkZSA8cGFuZ28vcGFuZ29jYWlyby5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7Citw
dWJsaWM6CisgICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUpCisgICAgICAgIDogbV9jb250ZXh0KDApCisgICAgICAgICwgbV9mb250KGhhc2hUYWJsZURl
bGV0ZWRGb250VmFsdWUoKSkKKyAgICAgICAgLCBtX3NpemUoMCkKKyAgICAgICAgLCBtX3N5bnRo
ZXRpY0JvbGQoZmFsc2UpCisgICAgICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNlKQorICAg
ICAgICAsIG1fc2NhbGVkRm9udCgwKQorICAgICAgICB7IH0KKworICAgIEZvbnRQbGF0Zm9ybURh
dGEoKQorICAgICAgICA6IG1fY29udGV4dCgwKQorICAgICAgICAsIG1fZm9udCgwKQorICAgICAg
ICAsIG1fc2l6ZSgwKQorICAgICAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKKyAgICAgICAg
LCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2UpCisgICAgICAgICwgbV9zY2FsZWRGb250KDApCisg
ICAgICAgIHsgfQorCisgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CisgICAgRm9udFBsYXRmb3JtRGF0YShjYWly
b19mb250X2ZhY2VfdCogZm9udEZhY2UsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFs
aWMpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0
YWxpYyk7CisgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Cisg
ICAgfkZvbnRQbGF0Zm9ybURhdGEoKTsKKworICAgIHN0YXRpYyBib29sIGluaXQoKTsKKyAgICBi
b29sIGlzRml4ZWRQaXRjaCgpOworICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KKyAgICB2b2lkIHNldFNpemUoZmxvYXQgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9Cisg
ICAgYm9vbCBzeW50aGV0aWNCb2xkKCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNCb2xkOyB9
CisgICAgYm9vbCBzeW50aGV0aWNPYmxpcXVlKCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNP
YmxpcXVlOyB9CisKKyAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250KCkgY29uc3Qg
eyByZXR1cm4gbV9zY2FsZWRGb250OyB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNbMV0gPSB7IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihtX3NjYWxlZEZvbnQpIH07CisgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpj
b21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgc2l6ZW9mKGhh
c2hDb2RlcykgLyBzaXplb2YoVUNoYXIpKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYpIGNvbnN0OworICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9w
ZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CisgICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9mb250ID09IGhhc2hU
YWJsZURlbGV0ZWRGb250VmFsdWUoKTsKKyAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgU3Ry
aW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisjZW5kaWYKKworICAgIHN0YXRpYyBQYW5nb0ZvbnRN
YXAqIG1fZm9udE1hcDsKKyAgICBzdGF0aWMgR0hhc2hUYWJsZSogbV9oYXNoVGFibGU7CisgICAg
UGFuZ29Db250ZXh0KiBtX2NvbnRleHQ7CisgICAgUGFuZ29Gb250KiBtX2ZvbnQ7CisgICAgZmxv
YXQgbV9zaXplOworICAgIGJvb2wgbV9zeW50aGV0aWNCb2xkOworICAgIGJvb2wgbV9zeW50aGV0
aWNPYmxpcXVlOworICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIG1fc2NhbGVkRm9udDsKK3ByaXZh
dGU6CisgICAgc3RhdGljIFBhbmdvRm9udCAqaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpIHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpOyB9Cit9OworCit9CisKKyNl
bmRpZiAvLyBGb250UGxhdGZvcm1EYXRhUGFuZ29faApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9wYW5nby9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBsYXRmb3JtRGF0YVBhbmdvLmNwcAko
cmV2aXNpb24gNzAyODcpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQ
bGF0Zm9ybURhdGFQYW5nby5jcHA6NzAyODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3BhbmdvL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29t
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8YXNz
ZXJ0Lmg+CisKKyNpbmNsdWRlIDxwYW5nby9wYW5nby5oPgorI2luY2x1ZGUgPHBhbmdvL3Bhbmdv
Y2Fpcm8uaD4KKworLy8gVXNlIGNhaXJvLWZ0IGkgYSByZWNlbnQgZW5vdWdoIFBhbmdvIHZlcnNp
b24gaXNuJ3QgYXZhaWxhYmxlCisjaWYgIVBBTkdPX1ZFUlNJT05fQ0hFQ0soMSwxOCwwKQorI2lu
Y2x1ZGUgPGNhaXJvLWZ0Lmg+CisjaW5jbHVkZSA8cGFuZ28vcGFuZ29mYy1mb250bWFwLmg+Cisj
ZW5kaWYKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFu
Z29Gb250TWFwKiBGb250UGxhdGZvcm1EYXRhOjptX2ZvbnRNYXAgPSAwOworR0hhc2hUYWJsZSog
Rm9udFBsYXRmb3JtRGF0YTo6bV9oYXNoVGFibGUgPSAwOworCitGb250UGxhdGZvcm1EYXRhOjpG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBj
b25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCisgICAgOiBtX2NvbnRleHQoMCkKKyAgICAs
IG1fZm9udCgwKQorICAgICwgbV9zaXplKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSkK
KyAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKKyAgICAsIG1fc3ludGhldGljT2JsaXF1ZShm
YWxzZSkKKyAgICAsIG1fc2NhbGVkRm9udCgwKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGE6Omlu
aXQoKTsKKworICAgIENTdHJpbmcgc3RvcmVkX2ZhbWlseSA9IGZhbWlseU5hbWUuc3RyaW5nKCku
dXRmOCgpOworICAgIGNoYXIgY29uc3QqIGZhbWlsaWVzW10gPSB7CisgICAgICBzdG9yZWRfZmFt
aWx5LmRhdGEoKSwKKyAgICAgIE5VTEwKKyAgICB9OworCisgICAgc3dpdGNoIChmb250RGVzY3Jp
cHRpb24uZ2VuZXJpY0ZhbWlseSgpKSB7CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNlcmlm
RmFtaWx5OgorICAgICAgICBmYW1pbGllc1sxXSA9ICJzZXJpZiI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTYW5zU2VyaWZGYW1pbHk6CisgICAgICAgIGZhbWls
aWVzWzFdID0gInNhbnMiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlv
bjo6TW9ub3NwYWNlRmFtaWx5OgorICAgICAgICBmYW1pbGllc1sxXSA9ICJtb25vc3BhY2UiOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHk6CisgICAg
Y2FzZSBGb250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFtaWx5OgorICAgIGRlZmF1bHQ6CisgICAg
ICAgIGZhbWlsaWVzWzFdID0gInNhbnMiOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBQ
YW5nb0ZvbnREZXNjcmlwdGlvbiogZGVzY3JpcHRpb24gPSBwYW5nb19mb250X2Rlc2NyaXB0aW9u
X25ldygpOworICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fc2V0X2Fic29sdXRlX3NpemUoZGVz
Y3JpcHRpb24sIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAqIFBBTkdPX1NDQUxFKTsK
KworICAgIC8vIEZJWE1FOiBNYXAgYWxsIEZvbnRXZWlnaHQgdmFsdWVzIHRvIFBhbmdvIGZvbnQg
d2VpZ2h0cy4KKyAgICBpZiAoZm9udERlc2NyaXB0aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHQ2
MDApCisgICAgICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fc2V0X3dlaWdodChkZXNjcmlwdGlv
biwgUEFOR09fV0VJR0hUX0JPTEQpOworICAgIGlmIChmb250RGVzY3JpcHRpb24uaXRhbGljKCkp
CisgICAgICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fc2V0X3N0eWxlKGRlc2NyaXB0aW9uLCBQ
QU5HT19TVFlMRV9JVEFMSUMpOworCisjaWYgUEFOR09fVkVSU0lPTl9DSEVDSygxLDIxLDUpICAg
Ly8gZGVwcmVjYXRlZCBpbiAxLjIxCisgICAgbV9jb250ZXh0ID0gcGFuZ29fZm9udF9tYXBfY3Jl
YXRlX2NvbnRleHQobV9mb250TWFwKTsKKyNlbHNlCisgICAgbV9jb250ZXh0ID0gcGFuZ29fY2Fp
cm9fZm9udF9tYXBfY3JlYXRlX2NvbnRleHQoUEFOR09fQ0FJUk9fRk9OVF9NQVAobV9mb250TWFw
KSk7CisjZW5kaWYKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgIW1fZm9udCAmJiBpIDwg
R19OX0VMRU1FTlRTKGZhbWlsaWVzKTsgaSsrKSB7CisgICAgICAgIHBhbmdvX2ZvbnRfZGVzY3Jp
cHRpb25fc2V0X2ZhbWlseShkZXNjcmlwdGlvbiwgZmFtaWxpZXNbaV0pOworICAgICAgICBwYW5n
b19jb250ZXh0X3NldF9mb250X2Rlc2NyaXB0aW9uKG1fY29udGV4dCwgZGVzY3JpcHRpb24pOwor
ICAgICAgICBtX2ZvbnQgPSBwYW5nb19mb250X21hcF9sb2FkX2ZvbnQobV9mb250TWFwLCBtX2Nv
bnRleHQsIGRlc2NyaXB0aW9uKTsKKyAgICB9CisKKyNpZiBQQU5HT19WRVJTSU9OX0NIRUNLKDEs
MTgsMCkKKyAgICBpZiAobV9mb250KQorICAgICAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2Fs
ZWRfZm9udF9yZWZlcmVuY2UocGFuZ29fY2Fpcm9fZm9udF9nZXRfc2NhbGVkX2ZvbnQoUEFOR09f
Q0FJUk9fRk9OVChtX2ZvbnQpKSk7CisjZWxzZQorICAgIC8vIFRoaXMgY29tcGF0aWJpbGl0eSBj
b2RlIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBQYW5nbyBpcyBub3Qgd2VsbC10ZXN0ZWQuCisgICAg
aWYgKG1fZm9udCkgeworICAgICAgICBQYW5nb0ZjRm9udCogZmNmb250ID0gUEFOR09fRkNfRk9O
VChtX2ZvbnQpOworICAgICAgICBjYWlyb19mb250X2ZhY2VfdCogZmFjZSA9IGNhaXJvX2Z0X2Zv
bnRfZmFjZV9jcmVhdGVfZm9yX3BhdHRlcm4oZmNmb250LT5mb250X3BhdHRlcm4pOworICAgICAg
ICBkb3VibGUgc2l6ZTsKKyAgICAgICAgaWYgKEZjUGF0dGVybkdldERvdWJsZShmY2ZvbnQtPmZv
bnRfcGF0dGVybiwgRkNfUElYRUxfU0laRSwgMCwgJnNpemUpICE9IEZjUmVzdWx0TWF0Y2gpCisg
ICAgICAgICAgICBzaXplID0gMTIuMDsKKyAgICAgICAgY2Fpcm9fbWF0cml4X3QgZm9udE1hdHJp
eDsKKyAgICAgICAgY2Fpcm9fbWF0cml4X2luaXRfc2NhbGUoJmZvbnRNYXRyaXgsIHNpemUsIHNp
emUpOworICAgICAgICBjYWlyb19mb250X29wdGlvbnNfdCogZm9udE9wdGlvbnM7CisgICAgICAg
IGlmIChwYW5nb19jYWlyb19jb250ZXh0X2dldF9mb250X29wdGlvbnMobV9jb250ZXh0KSkKKyAg
ICAgICAgICAgIGZvbnRPcHRpb25zID0gY2Fpcm9fZm9udF9vcHRpb25zX2NvcHkocGFuZ29fY2Fp
cm9fY29udGV4dF9nZXRfZm9udF9vcHRpb25zKG1fY29udGV4dCkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBmb250T3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsKKyAg
ICAgICAgY2Fpcm9fbWF0cml4X3QgY3RtOworICAgICAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVu
dGl0eSgmY3RtKTsKKyAgICAgICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfY3Jl
YXRlKGZhY2UsICZmb250TWF0cml4LCAmY3RtLCBmb250T3B0aW9ucyk7CisgICAgICAgIGNhaXJv
X2ZvbnRfb3B0aW9uc19kZXN0cm95KGZvbnRPcHRpb25zKTsKKyAgICAgICAgY2Fpcm9fZm9udF9m
YWNlX2Rlc3Ryb3koZmFjZSk7CisgICAgfQorI2VuZGlmCisgICAgcGFuZ29fZm9udF9kZXNjcmlw
dGlvbl9mcmVlKGRlc2NyaXB0aW9uKTsKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRm
b3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKQorICAgIDogbV9jb250
ZXh0KDApCisgICAgLCBtX2ZvbnQoMCkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9zeW50
aGV0aWNCb2xkKGJvbGQpCisgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoaXRhbGljKQorICAgICwg
bV9zY2FsZWRGb250KDApCit7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURh
dGEoY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlLCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJv
b2wgaXRhbGljKQorICAgIDogbV9jb250ZXh0KDApCisgICAgLCBtX2ZvbnQoMCkKKyAgICAsIG1f
c2l6ZShzaXplKQorICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCisgICAgLCBtX3N5bnRoZXRp
Y09ibGlxdWUoaXRhbGljKQorICAgICwgbV9zY2FsZWRGb250KDApCit7CisgICAgY2Fpcm9fbWF0
cml4X3QgZm9udE1hdHJpeDsKKyAgICBjYWlyb19tYXRyaXhfaW5pdF9zY2FsZSgmZm9udE1hdHJp
eCwgc2l6ZSwgc2l6ZSk7CisgICAgY2Fpcm9fbWF0cml4X3QgY3RtOworICAgIGNhaXJvX21hdHJp
eF9pbml0X2lkZW50aXR5KCZjdG0pOworICAgIGNhaXJvX2ZvbnRfb3B0aW9uc190KiBvcHRpb25z
ID0gY2Fpcm9fZm9udF9vcHRpb25zX2NyZWF0ZSgpOworCisgICAgLy8gV2UgZm9yY2UgYW50aWFs
aWFzaW5nIGFuZCBkaXNhYmxlIGhpbnRpbmcgdG8gcHJvdmlkZSBjb25zaXN0ZW50CisgICAgLy8g
dHlwb2dyYXBoaWMgcXVhbGl0aWVzIGZvciBjdXN0b20gZm9udHMgb24gYWxsIHBsYXRmb3Jtcy4K
KyAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2hpbnRfc3R5bGUob3B0aW9ucywgQ0FJUk9fSElO
VF9TVFlMRV9OT05FKTsKKyAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2FudGlhbGlhcyhvcHRp
b25zLCBDQUlST19BTlRJQUxJQVNfR1JBWSk7CisKKyAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19z
Y2FsZWRfZm9udF9jcmVhdGUoZm9udEZhY2UsICZmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsK
KyAgICBjYWlyb19mb250X29wdGlvbnNfZGVzdHJveShvcHRpb25zKTsKK30KKworYm9vbCBGb250
UGxhdGZvcm1EYXRhOjppbml0KCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZh
bHNlOworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaW5p
dGlhbGl6ZWQgPSB0cnVlOworCisgICAgaWYgKCFtX2ZvbnRNYXApCisgICAgICAgIG1fZm9udE1h
cCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFwX2dldF9kZWZhdWx0KCk7CisgICAgaWYgKCFtX2hhc2hU
YWJsZSkgeworICAgICAgICBQYW5nb0ZvbnRGYW1pbHkqKiBmYW1pbGllcyA9IDA7CisgICAgICAg
IGludCBuX2ZhbWlsaWVzID0gMDsKKworICAgICAgICBtX2hhc2hUYWJsZSA9IGdfaGFzaF90YWJs
ZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwgZ19mcmVlLCBnX29iamVjdF91bnJl
Zik7CisKKyAgICAgICAgcGFuZ29fZm9udF9tYXBfbGlzdF9mYW1pbGllcyhtX2ZvbnRNYXAsICZm
YW1pbGllcywgJm5fZmFtaWxpZXMpOworCisgICAgICAgIGZvciAoaW50IGZhbWlseSA9IDA7IGZh
bWlseSA8IG5fZmFtaWxpZXM7IGZhbWlseSsrKQorICAgICAgICAgICAgICAgIGdfaGFzaF90YWJs
ZV9pbnNlcnQobV9oYXNoVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnX3N0cmR1cChwYW5nb19mb250X2ZhbWlseV9nZXRfbmFtZShmYW1pbGllc1tmYW1pbHldKSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX29iamVjdF9yZWYoZmFtaWxp
ZXNbZmFtaWx5XSkpOworCisgICAgICAgIGdfZnJlZShmYW1pbGllcyk7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkK
K3sKKyAgICBpZiAobV9mb250ICYmIG1fZm9udCAhPSByZWludGVycHJldF9jYXN0PFBhbmdvRm9u
dCo+KC0xKSkgeworICAgICAgICBnX29iamVjdF91bnJlZihtX2ZvbnQpOworICAgICAgICBtX2Zv
bnQgPSAwOworICAgIH0KKworICAgIGlmIChtX2NvbnRleHQpIHsKKyAgICAgICAgZ19vYmplY3Rf
dW5yZWYobV9jb250ZXh0KTsKKyAgICAgICAgbV9jb250ZXh0ID0gMDsKKyAgICB9CisKKyAgICBp
ZiAobV9zY2FsZWRGb250KSB7CisgICAgICAgIGNhaXJvX3NjYWxlZF9mb250X2Rlc3Ryb3kobV9z
Y2FsZWRGb250KTsKKyAgICAgICAgbV9zY2FsZWRGb250ID0gMDsKKyAgICB9Cit9CisKK2Jvb2wg
Rm9udFBsYXRmb3JtRGF0YTo6aXNGaXhlZFBpdGNoKCkKK3sKKyAgICBQYW5nb0ZvbnREZXNjcmlw
dGlvbiogZGVzY3JpcHRpb24gPSBwYW5nb19mb250X2Rlc2NyaWJlX3dpdGhfYWJzb2x1dGVfc2l6
ZShtX2ZvbnQpOworICAgIFBhbmdvRm9udEZhbWlseSogZmFtaWx5ID0gcmVpbnRlcnByZXRfY2Fz
dDxQYW5nb0ZvbnRGYW1pbHkqPihnX2hhc2hfdGFibGVfbG9va3VwKG1faGFzaFRhYmxlLCBwYW5n
b19mb250X2Rlc2NyaXB0aW9uX2dldF9mYW1pbHkoZGVzY3JpcHRpb24pKSk7CisgICAgcGFuZ29f
Zm9udF9kZXNjcmlwdGlvbl9mcmVlKGRlc2NyaXB0aW9uKTsKKyAgICByZXR1cm4gcGFuZ29fZm9u
dF9mYW1pbHlfaXNfbW9ub3NwYWNlKGZhbWlseSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEmIEZv
bnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikK
K3sKKyAgICAvLyBDaGVjayBmb3Igc2VsZi1hc3NpZ25tZW50LgorICAgIGlmICh0aGlzID09ICZv
dGhlcikKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgbV9zaXplID0gb3RoZXIubV9zaXpl
OworICAgIG1fc3ludGhldGljQm9sZCA9IG90aGVyLm1fc3ludGhldGljQm9sZDsKKyAgICBtX3N5
bnRoZXRpY09ibGlxdWUgPSBvdGhlci5tX3N5bnRoZXRpY09ibGlxdWU7CisKKyAgICBpZiAob3Ro
ZXIubV9zY2FsZWRGb250KQorICAgICAgICBjYWlyb19zY2FsZWRfZm9udF9yZWZlcmVuY2Uob3Ro
ZXIubV9zY2FsZWRGb250KTsKKyAgICBpZiAobV9zY2FsZWRGb250KQorICAgICAgICBjYWlyb19z
Y2FsZWRfZm9udF9kZXN0cm95KG1fc2NhbGVkRm9udCk7CisgICAgbV9zY2FsZWRGb250ID0gb3Ro
ZXIubV9zY2FsZWRGb250OworCisgICAgaWYgKG90aGVyLm1fZm9udCkKKyAgICAgICAgZ19vYmpl
Y3RfcmVmKG90aGVyLm1fZm9udCk7CisgICAgaWYgKG1fZm9udCkKKyAgICAgICAgZ19vYmplY3Rf
dW5yZWYobV9mb250KTsKKyAgICBtX2ZvbnQgPSBvdGhlci5tX2ZvbnQ7CisKKyAgICBpZiAob3Ro
ZXIubV9jb250ZXh0KQorICAgICAgICBnX29iamVjdF9yZWYob3RoZXIubV9jb250ZXh0KTsKKyAg
ICBpZiAobV9jb250ZXh0KQorICAgICAgICBnX29iamVjdF91bnJlZihtX2NvbnRleHQpOworICAg
IG1fY29udGV4dCA9IG90aGVyLm1fY29udGV4dDsKKworICAgIHJldHVybiAqdGhpczsKK30KKwor
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRh
JiBvdGhlcikKKyAgICA6IG1fY29udGV4dCgwKQorICAgICwgbV9mb250KDApCisgICAgLCBtX3Nj
YWxlZEZvbnQoMCkKK3sKKyAgICAqdGhpcyA9IG90aGVyOworfQorCitib29sIEZvbnRQbGF0Zm9y
bURhdGE6Om9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0Cit7
CisgICAgaWYgKG1fZm9udCA9PSBvdGhlci5tX2ZvbnQpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGlmIChtX2ZvbnQgPT0gMCB8fCBtX2ZvbnQgPT0gcmVpbnRlcnByZXRfY2FzdDxQYW5nb0Zv
bnQqPigtMSkKKyAgICAgICAgfHwgb3RoZXIubV9mb250ID09IDAgfHwgb3RoZXIubV9mb250ID09
IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgUGFuZ29Gb250RGVzY3JpcHRpb24qIHRoaXNEZXNjID0gcGFuZ29fZm9udF9kZXNjcmli
ZShtX2ZvbnQpOworICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiBvdGhlckRlc2MgPSBwYW5nb19m
b250X2Rlc2NyaWJlKG90aGVyLm1fZm9udCk7CisgICAgYm9vbCByZXN1bHQgPSBwYW5nb19mb250
X2Rlc2NyaXB0aW9uX2VxdWFsKHRoaXNEZXNjLCBvdGhlckRlc2MpOworICAgIHBhbmdvX2ZvbnRf
ZGVzY3JpcHRpb25fZnJlZShvdGhlckRlc2MpOworICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25f
ZnJlZSh0aGlzRGVzYyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmbmRlZiBOREVCVUcK
K1N0cmluZyBGb250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFN0cmluZygpOworfQorI2VuZGlmCisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcGFuZ28vR2x5cGhQYWdlVHJlZU5vZGVQYW5nby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9HbHlwaFBhZ2VUcmVlTm9kZVBhbmdvLmNwcAko
cmV2aXNpb24gNzAyODcpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dseXBo
UGFnZVRyZWVOb2RlUGFuZ28uY3BwOjcwMjg3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9wYW5nby9HbHlwaFBhZ2VUcmVlTm9kZVBhbmdvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHAu
dG9rZXJAY29sbGFib3JhLmNvLnVrPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXIgUmVz
ZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHbHlw
aFBhZ2VUcmVlTm9kZS5oIgorCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRl
IDxwYW5nby9wYW5nby1mb250Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFBh
bmdvR2x5cGggcGFuZ29fZm9udF9nZXRfZ2x5cGgoUGFuZ29Gb250KiBmb250LCBQYW5nb0NvbnRl
eHQqIGNvbnRleHQsIGd1bmljaGFyIHdjKQoreworICAgIFBhbmdvR2x5cGggcmVzdWx0ID0gMDsK
KyAgICBnY2hhciBidWZmZXJbN107CisKKyAgICBnaW50ICBsZW5ndGggPSBnX3VuaWNoYXJfdG9f
dXRmOCh3YywgYnVmZmVyKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChsZW5ndGgsIDApOwor
CisgICAgR0xpc3QqIGl0ZW1zID0gcGFuZ29faXRlbWl6ZShjb250ZXh0LCBidWZmZXIsIDAsIGxl
bmd0aCwgTlVMTCwgTlVMTCk7CisKKyAgICBpZiAoZ19saXN0X2xlbmd0aChpdGVtcykgPT0gMSkg
eworICAgICAgICBQYW5nb0l0ZW0qIGl0ZW0gPSByZWludGVycHJldF9jYXN0PFBhbmdvSXRlbSo+
KGl0ZW1zLT5kYXRhKTsKKyAgICAgICAgUGFuZ29Gb250KiB0bXBGb250ID0gaXRlbS0+YW5hbHlz
aXMuZm9udDsKKyAgICAgICAgaXRlbS0+YW5hbHlzaXMuZm9udCA9IGZvbnQ7CisKKyAgICAgICAg
UGFuZ29HbHlwaFN0cmluZyogZ2x5cGhzID0gcGFuZ29fZ2x5cGhfc3RyaW5nX25ldygpOworICAg
ICAgICBwYW5nb19zaGFwZShidWZmZXIsIGxlbmd0aCwgJml0ZW0tPmFuYWx5c2lzLCBnbHlwaHMp
OworCisgICAgICAgIGl0ZW0tPmFuYWx5c2lzLmZvbnQgPSB0bXBGb250OworCisgICAgICAgIGlm
IChnbHlwaHMtPm51bV9nbHlwaHMgPT0gMSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGdseXBocy0+
Z2x5cGhzWzBdLmdseXBoOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnX3dhcm5pbmcoImRp
ZG4ndCBnZXQgMSBnbHlwaCBidXQgJWQiLCBnbHlwaHMtPm51bV9nbHlwaHMpOworCisgICAgICAg
IHBhbmdvX2dseXBoX3N0cmluZ19mcmVlKGdseXBocyk7CisgICAgfQorCisgICAgZ19saXN0X2Zv
cmVhY2goaXRlbXMsIChHRnVuYylwYW5nb19pdGVtX2ZyZWUsIE5VTEwpOworICAgIGdfbGlzdF9m
cmVlKGl0ZW1zKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgR2x5cGhQYWdlOjpm
aWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNp
Z25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3sKKyAg
ICAvLyBUaGUgYnVmZmVyTGVuZ3RoIHdpbGwgYmUgZ3JlYXRlciB0aGFuIHRoZSBnbHlwaCBwYWdl
IHNpemUgaWYgdGhlIGJ1ZmZlciBoYXMgVW5pY29kZSBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMu
CisgICAgLy8gV2Ugd29uJ3Qgc3VwcG9ydCB0aGlzIGZvciBub3cuCisgICAgaWYgKGJ1ZmZlckxl
bmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KCFmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkubV9mb250IHx8IGZvbnREYXRhLT5wbGF0Zm9ybURh
dGEoKS5tX2ZvbnQgPT0gcmVpbnRlcnByZXRfY2FzdDxQYW5nb0ZvbnQqPigtMSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBHbHlwaCBnbHlwaCA9
IHBhbmdvX2ZvbnRfZ2V0X2dseXBoKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5tX2ZvbnQsIGZv
bnREYXRhLT5wbGF0Zm9ybURhdGEoKS5tX2NvbnRleHQsIGJ1ZmZlcltpXSk7CisgICAgICAgIGlm
ICghZ2x5cGgpCisgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAw
LCAwKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChv
ZmZzZXQgKyBpLCBnbHlwaCwgZm9udERhdGEpOworICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaGF2ZUdseXBoczsKK30KKworfQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0YVBhbmdv
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1NpbXBs
ZUZvbnREYXRhUGFuZ28uY3BwCShyZXZpc2lvbiA3MDI4NykJKGZyb20gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHA6NzAyODcpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAy
MDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlv
bmVlciBSZXNlYXJjaCBDZW50ZXIgVVNBLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5o
IgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgi
CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCit7
CisgICAgY2Fpcm9fZm9udF9leHRlbnRzX3QgZm9udF9leHRlbnRzOworICAgIGNhaXJvX3RleHRf
ZXh0ZW50c190IHRleHRfZXh0ZW50czsKKyAgICBjYWlyb19zY2FsZWRfZm9udF9leHRlbnRzKG1f
cGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCwgJmZvbnRfZXh0ZW50cyk7CisgICAgbV9hc2NlbnQg
PSBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoZm9udF9leHRlbnRzLmFzY2VudCkpOworICAgIG1f
ZGVzY2VudCA9IHN0YXRpY19jYXN0PGludD4obHJvdW5kZihmb250X2V4dGVudHMuZGVzY2VudCkp
OworICAgIG1fbGluZVNwYWNpbmcgPSBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoZm9udF9leHRl
bnRzLmhlaWdodCkpOworICAgIC8vIFRoZXJlIHNlZW1zIHRvIGJlIHNvbWUgcm91bmRpbmcgZXJy
b3IgaW4gY2Fpcm8gKG9yIGluIGhvdyB3ZQorICAgIC8vIHVzZSBjYWlybykgd2l0aCBzb21lIGZv
bnRzLCBsaWtlIERlamFWdSBTYW5zIE1vbm8sIHdoaWNoIG1ha2VzCisgICAgLy8gY2Fpcm8gcmVw
b3J0IGEgaGVpZ2h0IHNtYWxsZXIgdGhhbiBhc2NlbnQgKyBkZXNjZW50LCB3aGljaCBpcworICAg
IC8vIHdyb25nIGFuZCBjb25mdXNlcyBXZWJDb3JlJ3MgbGF5b3V0IHN5c3RlbS4gV29ya2Fyb3Vu
ZCB0aGlzCisgICAgLy8gd2hpbGUgd2UgZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24uCisgICAg
aWYgKG1fbGluZVNwYWNpbmcgPCBtX2FzY2VudCArIG1fZGVzY2VudCkKKyAgICAgICAgbV9saW5l
U3BhY2luZyA9IG1fYXNjZW50ICsgbV9kZXNjZW50OworICAgIGNhaXJvX3NjYWxlZF9mb250X3Rl
eHRfZXh0ZW50cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQsICJ4IiwgJnRleHRfZXh0ZW50
cyk7CisgICAgbV94SGVpZ2h0ID0gdGV4dF9leHRlbnRzLmhlaWdodDsKKyAgICBjYWlyb19zY2Fs
ZWRfZm9udF90ZXh0X2V4dGVudHMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LCAiICIsICZ0
ZXh0X2V4dGVudHMpOworICAgIG1fc3BhY2VXaWR0aCA9ICBzdGF0aWNfY2FzdDxmbG9hdD4odGV4
dF9leHRlbnRzLnhfYWR2YW5jZSk7CisgICAgbV9saW5lR2FwID0gbV9saW5lU3BhY2luZyAtIG1f
YXNjZW50IC0gbV9kZXNjZW50OworICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZv
cm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7Cit9CisKK3ZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit7CisgICAgbV9hdmdDaGFyV2lkdGggPSAw
LmY7CisgICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7CisgICAgaW5pdENoYXJXaWR0aHMoKTsKK30K
Kwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAgICBkZWxldGUg
bV9zbWFsbENhcHNGb250RGF0YTsKKyAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gMDsKK30KKwor
U2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1fc21h
bGxDYXBzRm9udERhdGEpIHsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGRlc2MgPSBGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgZGVzYy5zZXRTcGVjaWZpZWRTaXpl
KDAuNzBmICogZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpKTsKKyAgICAgICAgRm9udFBs
YXRmb3JtRGF0YSBwbGF0Zm9ybURhdGEoZGVzYywgZGVzYy5mYW1pbHkoKS5mYW1pbHkoKSk7Cisg
ICAgICAgIG1fc21hbGxDYXBzRm9udERhdGEgPSBuZXcgU2ltcGxlRm9udERhdGEocGxhdGZvcm1E
YXRhKTsKKyAgICB9CisgICAgcmV0dXJuIG1fc21hbGxDYXBzRm9udERhdGE7Cit9CisKK2Jvb2wg
U2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgaW50IGxlbmd0aCkgY29uc3QKK3sKKyAgICBib29sIHJlc3VsdCA9IHRydWU7CisKKyAgICBQ
YW5nb0NvdmVyYWdlKiBjb3ZlcmFnZSA9IHBhbmdvX2ZvbnRfZ2V0X2NvdmVyYWdlKG1fcGxhdGZv
cm1EYXRhLm1fZm9udCwgcGFuZ29fbGFuZ3VhZ2VfZ2V0X2RlZmF1bHQoKSk7CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChQQU5HT19DT1ZFUkFH
RV9OT05FID09IHBhbmdvX2NvdmVyYWdlX2dldChjb3ZlcmFnZSwgY2hhcmFjdGVyc1tpXSkpIHsK
KyAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBwYW5nb19jb3ZlcmFnZV91bnJlZihjb3ZlcmFnZSk7CisKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgp
Cit7CisgICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7CisgICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0
Y2ggPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fdHJlYXRBc0ZpeGVk
UGl0Y2ggPSBtX3BsYXRmb3JtRGF0YS5pc0ZpeGVkUGl0Y2goKTsKK30KKworRmxvYXRSZWN0IFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdAoreworICAg
IHJldHVybiBGbG9hdFJlY3QoKTsKK30KKworZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
V2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wbGF0Zm9y
bURhdGEubV9zY2FsZWRGb250KTsKKworICAgIGNhaXJvX2dseXBoX3QgY2dseXBoID0geyBnbHlw
aCwgMCwgMCB9OworICAgIGNhaXJvX3RleHRfZXh0ZW50c190IGV4dGVudHM7CisgICAgY2Fpcm9f
c2NhbGVkX2ZvbnRfZ2x5cGhfZXh0ZW50cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQsICZj
Z2x5cGgsIDEsICZleHRlbnRzKTsKKworICAgIGZsb2F0IHdpZHRoID0gKGZsb2F0KW1fc3BhY2VX
aWR0aDsKKyAgICBpZiAoY2Fpcm9fc2NhbGVkX2ZvbnRfc3RhdHVzKG1fcGxhdGZvcm1EYXRhLm1f
c2NhbGVkRm9udCkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MgJiYgZXh0ZW50cy54X2FkdmFuY2Ug
IT0gMCkKKyAgICAgICAgd2lkdGggPSAoZmxvYXQpZXh0ZW50cy54X2FkdmFuY2U7CisKKyAgICBy
ZXR1cm4gd2lkdGg7ICAgIAorfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250UGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YS5oCShyZXZpc2lvbiA3MDQwOSkJKGZyb20gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmg6NzA0
MDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwg
RW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIg
SGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFy
Y2ggQ2VudGVyIFVTQSwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYg
Rm9udFBsYXRmb3JtRGF0YUNhaXJvV2luX2gKKyNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YUNhaXJv
V2luX2gKKworI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCisjaW5jbHVkZSAiUmVmQ291bnRlZEdESUhhbmRsZS5oIgorI2luY2x1ZGUgIlN0cmlu
Z0ltcGwuaCIKKyNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgorI2luY2x1ZGUgPGNhaXJvLmg+Cisj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKwordHlwZWRlZiBzdHJ1Y3QgSEZPTlRfXyogSEZPTlQ7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7CitwdWJs
aWM6CisgICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
CisgICAgICAgIDogbV9mb250RmFjZSgwKQorICAgICAgICAsIG1fdXNlR0RJKGZhbHNlKQorICAg
ICAgICAsIG1fZm9udChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKKyAgICAgICAgLCBtX3Np
emUoMCkKKyAgICAgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCisgICAgICAgICwgbV9zeW50
aGV0aWNPYmxpcXVlKGZhbHNlKQorICAgICAgICAsIG1fc2NhbGVkRm9udCgwKQorICAgICAgICB7
IH0KKworICAgIEZvbnRQbGF0Zm9ybURhdGEoKQorICAgICAgICA6IG1fZm9udEZhY2UoMCkKKyAg
ICAgICAgLCBtX3VzZUdESShmYWxzZSkKKyAgICAgICAgLCBtX3NpemUoMCkKKyAgICAgICAgLCBt
X3N5bnRoZXRpY0JvbGQoZmFsc2UpCisgICAgICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNl
KQorICAgICAgICAsIG1fc2NhbGVkRm9udCgwKQorICAgICAgICB7IH0KKworICAgIEZvbnRQbGF0
Zm9ybURhdGEoSEZPTlQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBib29s
IHVzZUdESSk7CisgICAgRm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZh
Y2UsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpOworICAgIEZvbnRQbGF0Zm9y
bURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7CisgICAgRm9udFBsYXRm
b3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CisgICAgfkZvbnRQbGF0Zm9ybURhdGEo
KTsKKworICAgIEhGT05UIGhmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250LT5oYW5kbGUoKTsg
fQorICAgIGJvb2wgdXNlR0RJKCkgY29uc3QgeyByZXR1cm4gbV91c2VHREk7IH0KKyAgICBjYWly
b19mb250X2ZhY2VfdCogZm9udEZhY2UoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRGYWNlOyB9CisK
KyAgICBib29sIGlzRml4ZWRQaXRjaCgpOworICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX3NpemU7IH0KKyAgICB2b2lkIHNldFNpemUoZmxvYXQgc2l6ZSkgeyBtX3NpemUgPSBzaXpl
OyB9CisgICAgYm9vbCBzeW50aGV0aWNCb2xkKCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNC
b2xkOyB9CisgICAgYm9vbCBzeW50aGV0aWNPYmxpcXVlKCkgY29uc3QgeyByZXR1cm4gbV9zeW50
aGV0aWNPYmxpcXVlOyB9CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2NhbGVkRm9udDsgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9mb250LT5oYXNoKCk7CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKSBjb25zdDsKKyAgICBGb250UGxh
dGZvcm1EYXRhJiBvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOworICAgIGJvb2wg
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
Zm9udC5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworICAgIH0KKworI2lmbmRlZiBOREVCVUcK
KyAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAg
IHZvaWQgcGxhdGZvcm1EYXRhSW5pdChIRk9OVCwgZmxvYXQgc2l6ZSwgSERDLCBXQ0hBUiogZmFj
ZU5hbWUpOworCisgICAgUmVmUHRyPFJlZkNvdW50ZWRHRElIYW5kbGU8SEZPTlQ+ID4gbV9mb250
OworICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBtX2ZvbnRGYWNlOworICAgIGJvb2wgbV91c2VHREk7
CisgICAgZmxvYXQgbV9zaXplOworICAgIGJvb2wgbV9zeW50aGV0aWNCb2xkOworICAgIGJvb2wg
bV9zeW50aGV0aWNPYmxpcXVlOworICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIG1fc2NhbGVkRm9u
dDsKK307CisKK30KKworI2VuZGlmIC8vIEZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbl9oCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZv
cm1EYXRhQ2Fpcm9XaW4uaAkocmV2aXNpb24gNzA0MDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uaAkod29ya2luZyBjb3B5KQpAQCAt
MSwxMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdt
YWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIgVVNBLCBJbmMu
Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhQ2Fp
cm9XaW5faAotI2RlZmluZSBGb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW5faAotCi0jaW5jbHVkZSAi
Rm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJS
ZWZDb3VudGVkR0RJSGFuZGxlLmgiCi0jaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgotI2luY2x1ZGUg
PGNhaXJvLXdpbjMyLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgotCi10eXBlZGVmIHN0cnVjdCBIRk9OVF9fKiBIRk9OVDsKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBGb250UGxhdGZvcm1EYXRhIHsKLXB1YmxpYzoKLSAgICBGb250UGxhdGZv
cm1EYXRhKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICAgICAgOiBtX2ZvbnRG
YWNlKDApCi0gICAgICAgICwgbV91c2VHREkoZmFsc2UpCi0gICAgICAgICwgbV9mb250KFdURjo6
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKQotICAgICAgICAsIG1fc2l6ZSgwKQotICAgICAgICAsIG1f
c3ludGhldGljQm9sZChmYWxzZSkKLSAgICAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2Up
Ci0gICAgICAgICwgbV9zY2FsZWRGb250KDApCi0gICAgICAgIHsgfQotCi0gICAgRm9udFBsYXRm
b3JtRGF0YSgpCi0gICAgICAgIDogbV9mb250RmFjZSgwKQotICAgICAgICAsIG1fdXNlR0RJKGZh
bHNlKQotICAgICAgICAsIG1fc2l6ZSgwKQotICAgICAgICAsIG1fc3ludGhldGljQm9sZChmYWxz
ZSkKLSAgICAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2UpCi0gICAgICAgICwgbV9zY2Fs
ZWRGb250KDApCi0gICAgICAgIHsgfQotCi0gICAgRm9udFBsYXRmb3JtRGF0YShIRk9OVCwgZmxv
YXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKTsKLSAgICBGb250
UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSwgZmxvYXQgc2l6ZSwgYm9v
bCBib2xkLCBib29sIGl0YWxpYyk7Ci0gICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBi
b29sIGJvbGQsIGJvb2wgaXRhbGljKTsKLSAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmKTsKLSAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOwotCi0gICAgSEZPTlQgaGZv
bnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQtPmhhbmRsZSgpOyB9Ci0gICAgYm9vbCB1c2VHREko
KSBjb25zdCB7IHJldHVybiBtX3VzZUdESTsgfQotICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250
RmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udEZhY2U7IH0KLQotICAgIGJvb2wgaXNGaXhlZFBp
dGNoKCk7Ci0gICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIHZv
aWQgc2V0U2l6ZShmbG9hdCBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KLSAgICBib29sIHN5bnRo
ZXRpY0JvbGQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY0JvbGQ7IH0KLSAgICBib29sIHN5
bnRoZXRpY09ibGlxdWUoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY09ibGlxdWU7IH0KLSAg
ICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250KCkgY29uc3QgeyByZXR1cm4gbV9zY2Fs
ZWRGb250OyB9Ci0KLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2ZvbnQtPmhhc2goKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYpIGNvbnN0OwotICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9y
PShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRW
YWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9mb250LmlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCk7Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyBkZXNjcmlw
dGlvbigpIGNvbnN0OwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgdm9pZCBwbGF0Zm9ybURhdGFJ
bml0KEhGT05ULCBmbG9hdCBzaXplLCBIREMsIFdDSEFSKiBmYWNlTmFtZSk7Ci0KLSAgICBSZWZQ
dHI8UmVmQ291bnRlZEdESUhhbmRsZTxIRk9OVD4gPiBtX2ZvbnQ7Ci0gICAgY2Fpcm9fZm9udF9m
YWNlX3QqIG1fZm9udEZhY2U7Ci0gICAgYm9vbCBtX3VzZUdESTsKLSAgICBmbG9hdCBtX3NpemU7
Ci0gICAgYm9vbCBtX3N5bnRoZXRpY0JvbGQ7Ci0gICAgYm9vbCBtX3N5bnRoZXRpY09ibGlxdWU7
Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogbV9zY2FsZWRGb250OwotfTsKLQotfQotCi0jZW5k
aWYgLy8gRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luX2gKSW5kZXg6IFdlYktpdC9lZmwvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9lZmwvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MDQwOSkK
KysrIFdlYktpdC9lZmwvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMTAtMjQgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIE1vdmUgZm9u
dCByZWxhdGVkIGZpbGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDgxMTYKKworICAgICAgICBBZGQgZnJlZXR5cGUvIHRvIGluY2x1ZGUgcGF0aC4K
KworICAgICAgICAqIENNYWtlTGlzdHNFZmwudHh0OgorCiAyMDEwLTEwLTIyICBTYW0gV2Vpbmln
ICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29u
LgpJbmRleDogV2ViS2l0L2VmbC9DTWFrZUxpc3RzRWZsLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0CShyZXZpc2lvbiA3MDQwOSkKKysrIFdlYktpdC9lZmwv
Q01ha2VMaXN0c0VmbC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzExLDcgQEAgTElTVChB
UFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVRfRElSfS9lZmwv
ZXdrIgogICAgICIke1dFQktJVF9ESVJ9L2VmbC9XZWJDb3JlU3VwcG9ydCIKICAgICAiJHtXRUJD
T1JFX0RJUn0vcGxhdGZvcm0vZWZsIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFw
aGljcy9mcmVldHlwZSIKICAgICAke0NhaXJvX0lOQ0xVREVfRElSU30KICAgICAke0VDT1JFX1hf
SU5DTFVERV9ESVJTfQogICAgICR7RURKRV9JTkNMVURFX0RJUlN9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73577</attachid>
            <date>2010-11-10 21:13:43 -0800</date>
            <delta_ts>2010-11-11 06:33:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48116-20101111141341.patch</filename>
            <type>text/plain</type>
            <size>142186</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTc5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMTEtMTAgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1
bmcuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAgW0dU
S10gTW92ZSBmb250IHJlbGF0ZWQgZmlsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00ODExNgorCisgICAgICAgIE1vdmUgcGFuZ28gYW5kIGZyZWV0
eXBlIHJlbGF0ZWQgZmlsZXMgdG8gc2hhcmUgbm9uLUdUSysgcGxhdGZvcm1zLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoaXMgaXMgcHVyZSByZWZhY3RvcmluZy4KKworICAgICAg
ICAqIENNYWtlTGlzdHNFZmwudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAg
ICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udFBsYXRmb3Jt
RGF0YUZyZWVUeXBlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HbHlwaFBhZ2VUcmVlTm9kZUNhaXJvLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9TaW1wbGVGb250RGF0YUNhaXJvLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZTogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUu
Y3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWNo
ZUZyZWVUeXBlLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGEuaDogQ29waWVkIGZy
b20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhRnJlZVR5
cGUuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1E
YXRhRnJlZVR5cGUuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZnJlZXR5cGUvR2x5cGhQYWdlVHJlZU5vZGVGcmVlVHlwZS5jcHA6IENvcGllZCBmcm9t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR2x5cGhQYWdlVHJlZU5vZGVDYWlyby5j
cHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFG
cmVlVHlwZS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
U2ltcGxlRm9udERhdGFDYWlyby5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0ZvbnRDYWNoZVBhbmdvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YVBhbmdvLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YVBhbmdv
Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dseXBoUGFnZVRy
ZWVOb2RlUGFuZ28uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0
ay9TaW1wbGVGb250RGF0YVBhbmdvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9wYW5nbzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28v
Rm9udENhY2hlUGFuZ28uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9Gb250Q2FjaGVQYW5nby5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcGFu
Z28vRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdvLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdvLmNwcC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGxhdGZvcm1EYXRhLmg6IENvcGll
ZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFQYW5n
by5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQbGF0Zm9ybURhdGFQ
YW5nby5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQ
bGF0Zm9ybURhdGFQYW5nby5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28v
R2x5cGhQYWdlVHJlZU5vZGVQYW5nby5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0dseXBoUGFnZVRyZWVOb2RlUGFuZ28uY3BwLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3BhbmdvL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwOiBDb3BpZWQgZnJvbSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YVBhbmdvLmNwcC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YS5oOiBDb3BpZWQg
ZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9X
aW4uaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNh
aXJvV2luLmg6IFJlbW92ZWQuCisKIDIwMTAtMTAtMTUgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2Jp
bnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBMb3Blei4KSW5kZXg6
IFdlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFrZUxp
c3RzRWZsLnR4dAkocmV2aXNpb24gNzE3OTEpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHNFZmwudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC02NSwxNSArNjUsMTIgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiBJRiAoV1RGX1BMQVRGT1JNX0NBSVJPKQogICBMSVNUKEFQUEVORCBXZWJDb3JlX0lO
Q0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8iCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlIgog
ICApCiAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Nv
bnRleHRTaGFkb3dDYWlyby5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fj
aGVGcmVlVHlwZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3Bw
Ci0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3Bw
Ci0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR2x5cGhQYWdlVHJlZU5vZGVDYWlyby5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCkBAIC04Miw4ICs3OSwxMiBAQCBJ
RiAoV1RGX1BMQVRGT1JNX0NBSVJPKQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhD
YWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vU2ltcGxlRm9udERhdGFDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2ZyZWV0eXBlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvR2x5cGhQYWdlVHJlZU5vZGVGcmVlVHlwZS5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNw
cAogCiAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8u
Y3BwCiAgICkKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNzE3OTEpCisrKyBXZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zNTM2LDcgKzM1MzYsNiBAQCB3ZWJjb3JlZ3RrX3Nv
dXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRmxvYXRSZWN0Q2Fp
cm8uY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAg
XAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udEN1c3RvbVBsYXRmb3JtRGF0
YS5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGEu
aCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcCBc
CiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlQ2Fpcm8uaCBcCkBAIC0zNzUwLDI4ICszNzQ5LDM0IEBAIGVuZGlmICMgRU5E
IEVOQUJMRV9GQVNUX01PQklMRV9TQ1JPTExJTkcKICMgRnJlZVR5cGUgZm9udCBiYWNrZW5kCiAj
IC0tLQogaWYgVVNFX0ZSRUVUWVBFCi13ZWJjb3JlZ3RrX2NwcGZsYWdzICs9IC1EVVNFX0ZSRUVU
WVBFPTEKK3dlYmNvcmVndGtfY3BwZmxhZ3MgKz0gXAorCS1EVVNFX0ZSRUVUWVBFPTEgXAorCS1J
JChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUKKwogd2ViY29yZWd0
a19zb3VyY2VzICs9IFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWNo
ZUZyZWVUeXBlLmNwcCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmNwcCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm8uY3BwIFwKLQlXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL1NpbXBsZUZvbnREYXRhQ2Fpcm8uY3BwCisJV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAgXAorCVdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udEN1c3RvbVBsYXRmb3JtRGF0YUZyZWVUeXBl
LmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1E
YXRhRnJlZVR5cGUuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0Zv
bnRQbGF0Zm9ybURhdGEuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9H
bHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAogZW5kaWYgIyBFTkQgVVNFX0ZS
RUVUWVBFCiAKICMgLS0tCiAjIFBhbmdvIGZvbnQgYmFja2VuZAogIyAtLS0KIGlmIFVTRV9QQU5H
Twotd2ViY29yZWd0a19jcHBmbGFncyArPSAtRFVTRV9QQU5HTz0xCit3ZWJjb3JlZ3RrX2NwcGZs
YWdzICs9IFwKKwktRFVTRV9QQU5HTz0xIFwKKwktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3BhbmdvCisKIHdlYmNvcmVndGtfc291cmNlcyArPSBcCi0JV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvRm9udENhY2hlUGFuZ28uY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwIFwKLQlXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwIFwKLQlXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uaCBcCi0JV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2x5cGhQYWdlVHJlZU5vZGVQYW5nby5jcHAgXAot
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCisJ
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250Q2FjaGVQYW5nby5jcHAgXAorCVdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdv
LmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGxhdGZvcm1EYXRh
UGFuZ28uY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQbGF0Zm9y
bURhdGEuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9HbHlwaFBhZ2VUcmVl
Tm9kZVBhbmdvLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1wbGVG
b250RGF0YVBhbmdvLmNwcAogZW5kaWYgIyBFTkQgVVNFX1BBTkdPCiAKICMgLS0tLQpJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA3MTc5MSkKKysrIFdl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI3
MTkwLDcgKzI3MTkwLDcgQEAKIAkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCQk8L0Zp
bGU+DQogCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcY2Fpcm9cRm9udFBsYXRmb3JtRGF0YS5oIg0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3Ncd2luXEZvbnRQbGF0Zm9ybURhdGEuaCINCiAJCQkJCQk+DQogCQkJCQkJ
PEZpbGVDb25maWd1cmF0aW9uDQogCQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhY2hlRnJlZVR5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhY2hlRnJlZVR5
cGUuY3BwCShyZXZpc2lvbiA3MTc5MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRm9udENhY2hlRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLQotI2luY2x1ZGUgIkNTdHJpbmcuaCIKLSNpbmNsdWRl
ICJGb250LmgiCi0jaW5jbHVkZSAiT3duUHRyQ2Fpcm8uaCIKLSNpbmNsdWRlICJSZWZQdHJDYWly
by5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSA8Y2Fpcm8tZnQuaD4K
LSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgot
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9p
ZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCi17Ci0gICAgLy8gSXQncyBmaW5lIHRvIGNhbGwg
RmNJbml0IG11bHRpcGxlIHRpbWVzIHBlciB0aGUgZG9jdW1lbnRhdGlvbi4KLSAgICBpZiAoIUZj
SW5pdCgpKQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotRmNQYXR0ZXJuKiBj
cmVhdGVGb250Q29uZmlnUGF0dGVybkZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIGludCBsZW5ndGgpCi17Ci0gICAgRmNQYXR0ZXJuKiBwYXR0ZXJuID0gRmNQYXR0ZXJuQ3Jl
YXRlKCk7Ci0KLSAgICBGY0NoYXJTZXQqIGZvbnRDb25maWdDaGFyU2V0ID0gRmNDaGFyU2V0Q3Jl
YXRlKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBp
ZiAoVTE2X0lTX1NVUlJPR0FURShjaGFyYWN0ZXJzW2ldKSAmJiBVMTZfSVNfU1VSUk9HQVRFX0xF
QUQoY2hhcmFjdGVyc1tpXSkKLSAgICAgICAgICAgICAgICAmJiBpICE9IGxlbmd0aCAtIDEgJiYg
VTE2X0lTX1RSQUlMKGNoYXJhY3RlcnNbaSArIDFdKSkgewotICAgICAgICAgICAgRmNDaGFyU2V0
QWRkQ2hhcihmb250Q29uZmlnQ2hhclNldCwgVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGNoYXJhY3Rl
cnNbaV0sIGNoYXJhY3RlcnNbaSsxXSkpOwotICAgICAgICAgICAgaSsrOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIEZjQ2hhclNldEFkZENoYXIoZm9udENvbmZpZ0NoYXJTZXQsIGNoYXJh
Y3RlcnNbaV0pOwotICAgIH0KLSAgICBGY1BhdHRlcm5BZGRDaGFyU2V0KHBhdHRlcm4sIEZDX0NI
QVJTRVQsIGZvbnRDb25maWdDaGFyU2V0KTsKLSAgICBGY0NoYXJTZXREZXN0cm95KGZvbnRDb25m
aWdDaGFyU2V0KTsKLQotICAgIEZjUGF0dGVybkFkZEJvb2wocGF0dGVybiwgRkNfU0NBTEFCTEUs
IEZjVHJ1ZSk7Ci0gICAgRmNDb25maWdTdWJzdGl0dXRlKDAsIHBhdHRlcm4sIEZjTWF0Y2hQYXR0
ZXJuKTsKLSAgICBGY0RlZmF1bHRTdWJzdGl0dXRlKHBhdHRlcm4pOwotICAgIHJldHVybiBwYXR0
ZXJuOwotfQotCi1GY1BhdHRlcm4qIGZpbmRCZXN0Rm9udEdpdmVuRmFsbGJhY2tzKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBGY1BhdHRlcm4qIHBhdHRlcm4pCi17Ci0gICAgaWYg
KCFmb250RGF0YS5tX3BhdHRlcm4pCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFmb250
RGF0YS5tX2ZhbGxiYWNrcykgewotICAgICAgICBGY1Jlc3VsdCBmb250Q29uZmlnUmVzdWx0Owot
ICAgICAgICBmb250RGF0YS5tX2ZhbGxiYWNrcyA9IEZjRm9udFNvcnQoMCwgZm9udERhdGEubV9w
YXR0ZXJuLmdldCgpLCBGY1RydWUsIDAsICZmb250Q29uZmlnUmVzdWx0KTsKLSAgICB9Ci0KLSAg
ICBpZiAoIWZvbnREYXRhLm1fZmFsbGJhY2tzKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEZj
Rm9udFNldCogc2V0c1tdID0geyBmb250RGF0YS5tX2ZhbGxiYWNrcyB9OwotICAgIEZjUmVzdWx0
IGZvbnRDb25maWdSZXN1bHQ7Ci0gICAgcmV0dXJuIEZjRm9udFNldE1hdGNoKDAsIHNldHMsIDEs
IHBhdHRlcm4sICZmb250Q29uZmlnUmVzdWx0KTsKLX0KLQotY29uc3QgU2ltcGxlRm9udERhdGEq
IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQotewotICAgIFJlZlB0cjxGY1BhdHRl
cm4+IHBhdHRlcm4gPSBhZG9wdFJlZihjcmVhdGVGb250Q29uZmlnUGF0dGVybkZvckNoYXJhY3Rl
cnMoY2hhcmFjdGVycywgbGVuZ3RoKSk7Ci0gICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9u
dERhdGEgPSBmb250LnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpOwotCi0gICAgUmVmUHRy
PEZjUGF0dGVybj4gZmFsbGJhY2tQYXR0ZXJuID0gYWRvcHRSZWYoZmluZEJlc3RGb250R2l2ZW5G
YWxsYmFja3MoZm9udERhdGEsIHBhdHRlcm4uZ2V0KCkpKTsKLSAgICBpZiAoZmFsbGJhY2tQYXR0
ZXJuKSB7Ci0gICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgYWx0ZXJuYXRlRm9udERhdGEoZmFsbGJh
Y2tQYXR0ZXJuLmdldCgpLCBmb250LmZvbnREZXNjcmlwdGlvbigpKTsKLSAgICAgICAgcmV0dXJu
IGdldENhY2hlZEZvbnREYXRhKCZhbHRlcm5hdGVGb250RGF0YSk7Ci0gICAgfQotCi0gICAgRmNS
ZXN1bHQgZm9udENvbmZpZ1Jlc3VsdDsKLSAgICBSZWZQdHI8RmNQYXR0ZXJuPiByZXN1bHRQYXR0
ZXJuID0gYWRvcHRSZWYoRmNGb250TWF0Y2goMCwgcGF0dGVybi5nZXQoKSwgJmZvbnRDb25maWdS
ZXN1bHQpKTsKLSAgICBpZiAoIXJlc3VsdFBhdHRlcm4pCi0gICAgICAgIHJldHVybiAwOwotICAg
IEZvbnRQbGF0Zm9ybURhdGEgYWx0ZXJuYXRlRm9udERhdGEocmVzdWx0UGF0dGVybi5nZXQoKSwg
Zm9udC5mb250RGVzY3JpcHRpb24oKSk7Ci0gICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKCZh
bHRlcm5hdGVGb250RGF0YSk7Ci19Ci0KLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNp
bWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCi17Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0Zv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCi17Ci0gICAgLy8gV2Ug
d2FudCB0byByZXR1cm4gYSBmYWxsYmFjayBmb250IGhlcmUsIG90aGVyd2lzZSB0aGUgbG9naWMg
cHJldmVudGluZyBGb250Q29uZmlnCi0gICAgLy8gbWF0Y2hlcyBmb3Igbm9uLWZhbGxiYWNrIGZv
bnRzIG1pZ2h0IHJldHVybiAwLiBTZWUgaXNGYWxsYmFja0ZvbnRBbGxvd2VkLgotICAgIHN0YXRp
YyBBdG9taWNTdHJpbmcgdGltZXNTdHIoInNlcmlmIik7Ci0gICAgcmV0dXJuIGdldENhY2hlZEZv
bnREYXRhKGZvbnREZXNjcmlwdGlvbiwgdGltZXNTdHIpOwotfQotCi12b2lkIEZvbnRDYWNoZTo6
Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBWZWN0b3I8
dW5zaWduZWQ+JiB0cmFpdHNNYXNrcykKLXsKLX0KLQotc3RhdGljIFN0cmluZyBnZXRGYW1pbHlO
YW1lU3RyaW5nRnJvbUZvbnREZXNjcmlwdGlvbkFuZEZhbWlseShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCi17Ci0gICAg
Ly8gSWYgd2UncmUgY3JlYXRpbmcgYSBmYWxsYmFjayBmb250IChlLmcuICItd2Via2l0LW1vbm9z
cGFjZSIpLCBjb252ZXJ0IHRoZSBuYW1lIGludG8KLSAgICAvLyB0aGUgZmFsbGJhY2sgbmFtZSAo
bGlrZSAibW9ub3NwYWNlIikgdGhhdCBmb250Y29uZmlnIHVuZGVyc3RhbmRzLgotICAgIGlmIChm
YW1pbHkubGVuZ3RoKCkgJiYgIWZhbWlseS5zdGFydHNXaXRoKCItd2Via2l0LSIpKQotICAgICAg
ICByZXR1cm4gZmFtaWx5LnN0cmluZygpOwotCi0gICAgc3dpdGNoIChmb250RGVzY3JpcHRpb24u
Z2VuZXJpY0ZhbWlseSgpKSB7Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFt
aWx5OgotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseToKLSAgICAgICAgcmV0
dXJuICJzZXJpZiI7Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseToK
LSAgICAgICAgcmV0dXJuICJzYW5zLXNlcmlmIjsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6
TW9ub3NwYWNlRmFtaWx5OgotICAgICAgICByZXR1cm4gIm1vbm9zcGFjZSI7Ci0gICAgY2FzZSBG
b250RGVzY3JpcHRpb246OkN1cnNpdmVGYW1pbHk6Ci0gICAgICAgIHJldHVybiAiY3Vyc2l2ZSI7
Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246OkZhbnRhc3lGYW1pbHk6Ci0gICAgICAgIHJldHVy
biAiZmFudGFzeSI7Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5OgotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGEq
IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCi17Ci0gICAgLy8g
VGhlIENTUyBmb250IG1hdGNoaW5nIGFsZ29yaXRobSAoaHR0cDovL3d3dy53My5vcmcvVFIvY3Nz
My1mb250cy8jZm9udC1tYXRjaGluZy1hbGdvcml0aG0pCi0gICAgLy8gc2F5cyB0aGF0IHdlIG11
c3QgZmluZCBhbiBleGFjdCBtYXRjaCBmb3IgZm9udCBmYW1pbHksIHNsYW50IChpdGFsaWMgb3Ig
b2JsaXF1ZSBjYW4gYmUgdXNlZCkKLSAgICAvLyBhbmQgZm9udCB3ZWlnaHQgKHdlIG9ubHkgbWF0
Y2ggYm9sZC9ub24tYm9sZCBoZXJlKS4KLSAgICBSZWZQdHI8RmNQYXR0ZXJuPiBwYXR0ZXJuID0g
YWRvcHRSZWYoRmNQYXR0ZXJuQ3JlYXRlKCkpOwotICAgIFN0cmluZyBmYW1pbHlOYW1lU3RyaW5n
KGdldEZhbWlseU5hbWVTdHJpbmdGcm9tRm9udERlc2NyaXB0aW9uQW5kRmFtaWx5KGZvbnREZXNj
cmlwdGlvbiwgZmFtaWx5KSk7Ci0gICAgaWYgKCFGY1BhdHRlcm5BZGRTdHJpbmcocGF0dGVybi5n
ZXQoKSwgRkNfRkFNSUxZLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgqPihmYW1pbHlO
YW1lU3RyaW5nLnV0ZjgoKS5kYXRhKCkpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBib29s
IGl0YWxpYyA9IGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKTsKLSAgICBpZiAoIUZjUGF0dGVybkFk
ZEludGVnZXIocGF0dGVybi5nZXQoKSwgRkNfU0xBTlQsIGl0YWxpYyA/IEZDX1NMQU5UX0lUQUxJ
QyA6IEZDX1NMQU5UX1JPTUFOKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgYm9vbCBib2xkID0g
Zm9udERlc2NyaXB0aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHRCb2xkOwotICAgIGlmICghRmNQ
YXR0ZXJuQWRkSW50ZWdlcihwYXR0ZXJuLmdldCgpLCBGQ19XRUlHSFQsIGJvbGQgPyBGQ19XRUlH
SFRfQk9MRCA6IEZDX1dFSUdIVF9OT1JNQUwpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAo
IUZjUGF0dGVybkFkZERvdWJsZShwYXR0ZXJuLmdldCgpLCBGQ19QSVhFTF9TSVpFLCBmb250RGVz
Y3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
Ly8gVGhlIHN0cmF0ZWd5IGlzIG9yaWdpbmFsbHkgZnJvbSBTa2lhIChzcmMvcG9ydHMvU2tGb250
SG9zdF9mb250Y29uZmlnLmNwcCk6Ci0KLSAgICAvLyBBbGxvdyBGb250Y29uZmlnIHRvIGRvIHBy
ZS1tYXRjaCBzdWJzdGl0dXRpb24uIFVubGVzcyB3ZSBhcmUgYWNjZXNzaW5nIGEgImZhbGxiYWNr
IgotICAgIC8vIGZhbWlseSBsaWtlICJzYW5zLCIgdGhpcyBpcyB0aGUgb25seSB0aW1lIHdlIGFs
bG93IEZvbnRjb25maWcgdG8gc3Vic3RpdHV0ZSBvbmUKLSAgICAvLyBmYW1pbHkgbmFtZSBmb3Ig
YW5vdGhlciAoaS5lLiBpZiB0aGUgZm9udHMgYXJlIGFsaWFzZWQgdG8gZWFjaCBvdGhlcikuCi0g
ICAgRmNDb25maWdTdWJzdGl0dXRlKDAsIHBhdHRlcm4uZ2V0KCksIEZjTWF0Y2hQYXR0ZXJuKTsK
LSAgICBGY0RlZmF1bHRTdWJzdGl0dXRlKHBhdHRlcm4uZ2V0KCkpOwotCi0gICAgRmNDaGFyOCog
Zm9udENvbmZpZ0ZhbWlseU5hbWVBZnRlckNvbmZpZ3VyYXRpb247Ci0gICAgRmNQYXR0ZXJuR2V0
U3RyaW5nKHBhdHRlcm4uZ2V0KCksIEZDX0ZBTUlMWSwgMCwgJmZvbnRDb25maWdGYW1pbHlOYW1l
QWZ0ZXJDb25maWd1cmF0aW9uKTsKLSAgICBTdHJpbmcgZmFtaWx5TmFtZUFmdGVyQ29uZmlndXJh
dGlvbiA9IFN0cmluZzo6ZnJvbVVURjgocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZm9udENvbmZp
Z0ZhbWlseU5hbWVBZnRlckNvbmZpZ3VyYXRpb24pKTsKLQotICAgIEZjUmVzdWx0IGZvbnRDb25m
aWdSZXN1bHQ7Ci0gICAgUmVmUHRyPEZjUGF0dGVybj4gcmVzdWx0UGF0dGVybiA9IGFkb3B0UmVm
KEZjRm9udE1hdGNoKDAsIHBhdHRlcm4uZ2V0KCksICZmb250Q29uZmlnUmVzdWx0KSk7Ci0gICAg
aWYgKCFyZXN1bHRQYXR0ZXJuKSAvLyBObyBtYXRjaC4KLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBGY0NoYXI4KiBmb250Q29uZmlnRmFtaWx5TmFtZUFmdGVyTWF0Y2hpbmc7Ci0gICAgRmNQYXR0
ZXJuR2V0U3RyaW5nKHJlc3VsdFBhdHRlcm4uZ2V0KCksIEZDX0ZBTUlMWSwgMCwgJmZvbnRDb25m
aWdGYW1pbHlOYW1lQWZ0ZXJNYXRjaGluZyk7Ci0gICAgU3RyaW5nIGZhbWlseU5hbWVBZnRlck1h
dGNoaW5nID0gU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJldF9jYXN0PGNoYXIqPihmb250Q29u
ZmlnRmFtaWx5TmFtZUFmdGVyTWF0Y2hpbmcpKTsKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
ZmFtaWx5TmFtZUFmdGVyQ29uZmlndXJhdGlvbiwgZmFtaWx5TmFtZUFmdGVyTWF0Y2hpbmcpKQot
ICAgICAgICByZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEocmVzdWx0UGF0dGVybi5nZXQoKSwg
Zm9udERlc2NyaXB0aW9uKTsKLQotICAgIC8vIElmIEZvbnRjb25maWcgZ2F2ZSB1c2UgYSBkaWZm
ZXJlbnQgZm9udCBmYW1pbHkgdGhhbiB0aGUgb25lIHdlIHJlcXVlc3RlZCwgd2Ugc2hvdWxkIGln
bm9yZSBpdAotICAgIC8vIGFuZCBhbGxvdyBXZWJDb3JlIHRvIGdpdmUgdXMgdGhlIG5leHQgZm9u
dCBvbiB0aGUgQ1NTIGZhbGxiYWNrIGxpc3QuIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyBpZgotICAg
IC8vIHRoaXMgZmFtaWx5IG5hbWUgaXMgYSBjb21tb25seSB1c2VkIGdlbmVyaWMgZmFtaWx5Lgot
ICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHlOYW1lU3RyaW5nLCAic2FucyIpIHx8IGVx
dWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWVTdHJpbmcsICJzYW5zLXNlcmlmIikKLSAgICAgICAg
fHwgZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5TmFtZVN0cmluZywgInNlcmlmIikgfHwgZXF1YWxJ
Z25vcmluZ0Nhc2UoZmFtaWx5TmFtZVN0cmluZywgIm1vbm9zcGFjZSIpCi0gICAgICAgIHx8IGVx
dWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWVTdHJpbmcsICJmYW50YXN5IikgfHwgZXF1YWxJZ25v
cmluZ0Nhc2UoZmFtaWx5TmFtZVN0cmluZywgImN1cnNpdmUiKSkKLSAgICAgICAgcmV0dXJuIG5l
dyBGb250UGxhdGZvcm1EYXRhKHJlc3VsdFBhdHRlcm4uZ2V0KCksIGZvbnREZXNjcmlwdGlvbik7
Ci0KLSAgICAvLyBGb250Y29uZmlnIGRpZCBub3QgcmV0dXJuIGEgZ29vZCBtYXRjaC4KLSAgICBy
ZXR1cm4gMDsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiA3MTc5
MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAy
MDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5oIgotCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+Ci0jaW5jbHVkZSA8
Y2Fpcm8uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgdm9pZCByZWxlYXNlQ3Vz
dG9tRm9udERhdGEodm9pZCogZGF0YSkKLXsKLSAgICBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIq
PihkYXRhKS0+ZGVyZWYoKTsKLX0KLQotRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Rm9udEN1c3Rv
bVBsYXRmb3JtRGF0YShGVF9GYWNlIGZyZWVUeXBlRmFjZSwgU2hhcmVkQnVmZmVyKiBidWZmZXIp
Ci0gICAgOiBtX2ZyZWVUeXBlRmFjZShmcmVlVHlwZUZhY2UpCi0gICAgLCBtX2ZvbnRGYWNlKGNh
aXJvX2Z0X2ZvbnRfZmFjZV9jcmVhdGVfZm9yX2Z0X2ZhY2UoZnJlZVR5cGVGYWNlLCAwKSkKLXsK
LSAgICAvLyBGSVhNRSBTaG91bGQgd2UgYmUgc2V0dGluZyBzb21lIGhpbnRpbmcgb3B0aW9ucyBo
ZXJlPwotCi0gICAgYnVmZmVyLT5yZWYoKTsgLy8gVGhpcyBpcyBiYWxhbmNlZCBieSB0aGUgYnVm
ZmVyLT5kZXJlZigpIGluIHJlbGVhc2VDdXN0b21Gb250RGF0YS4KLSAgICBzdGF0aWMgY2Fpcm9f
dXNlcl9kYXRhX2tleV90IGJ1ZmZlcktleTsKLSAgICBjYWlyb19mb250X2ZhY2Vfc2V0X3VzZXJf
ZGF0YShtX2ZvbnRGYWNlLCAmYnVmZmVyS2V5LCBidWZmZXIsCi0gICAgICAgICBzdGF0aWNfY2Fz
dDxjYWlyb19kZXN0cm95X2Z1bmNfdD4ocmVsZWFzZUN1c3RvbUZvbnREYXRhKSk7Ci0KLSAgICAv
LyBDYWlybyBkb2Vzbid0IGRvIEZyZWVUeXBlIHJlZmVyZW5jZSBjb3VudGluZywgc28gd2UgbmVl
ZCB0byBlbnN1cmUgdGhhdCB3aGVuCi0gICAgLy8gdGhpcyBjYWlyb19mb250X2ZhY2VfdCBpcyBk
ZXN0cm95ZWQsIGl0IGNsZWFucyB1cCB0aGUgRnJlZVR5cGUgZmFjZSBhcyB3ZWxsLgotICAgIHN0
YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3QgZnJlZVR5cGVGYWNlS2V5OwotICAgIGNhaXJvX2Zv
bnRfZmFjZV9zZXRfdXNlcl9kYXRhKG1fZm9udEZhY2UsICZmcmVlVHlwZUZhY2VLZXksIGZyZWVU
eXBlRmFjZSwKLSAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2Fpcm9fZGVzdHJveV9mdW5jX3Q+
KEZUX0RvbmVfRmFjZSkpOwotfQotCi1Gb250Q3VzdG9tUGxhdGZvcm1EYXRhOjp+Rm9udEN1c3Rv
bVBsYXRmb3JtRGF0YSgpCi17Ci0gICAgLy8gbV9mcmVlVHlwZUZhY2Ugd2lsbCBiZSBkZXN0cm95
ZWQgYWxvbmcgd2l0aCBtX2ZvbnRGYWNlLiBTZWUgdGhlIGNvbnN0cnVjdG9yLgotICAgIGNhaXJv
X2ZvbnRfZmFjZV9kZXN0cm95KG1fZm9udEZhY2UpOwotfQotCi1Gb250UGxhdGZvcm1EYXRhIEZv
bnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEoaW50IHNpemUsIGJvb2wgYm9s
ZCwgYm9vbCBpdGFsaWMsIEZvbnRPcmllbnRhdGlvbiwgRm9udFJlbmRlcmluZ01vZGUpCi17Ci0g
ICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEobV9mb250RmFjZSwgc2l6ZSwgYm9sZCwgaXRhbGlj
KTsKLX0KLQotRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YShTaGFyZWRCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBBU1NFUlRfQVJHKGJ1ZmZlciwgYnVm
ZmVyKTsKLQotICAgIHN0YXRpYyBGVF9MaWJyYXJ5IGxpYnJhcnkgPSAwOwotICAgIGlmICghbGli
cmFyeSAmJiBGVF9Jbml0X0ZyZWVUeXBlKCZsaWJyYXJ5KSkgewotICAgICAgICBsaWJyYXJ5ID0g
MDsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgRlRfRmFjZSBmcmVlVHlwZUZhY2U7
Ci0gICAgaWYgKEZUX05ld19NZW1vcnlfRmFjZShsaWJyYXJ5LCByZWludGVycHJldF9jYXN0PGNv
bnN0IEZUX0J5dGUqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+c2l6ZSgpLCAwLCAmZnJlZVR5
cGVGYWNlKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG5ldyBGb250Q3VzdG9tUGxh
dGZvcm1EYXRhKGZyZWVUeXBlRmFjZSwgYnVmZmVyKTsKLX0KLQotYm9vbCBGb250Q3VzdG9tUGxh
dGZvcm1EYXRhOjpzdXBwb3J0c0Zvcm1hdChjb25zdCBTdHJpbmcmIGZvcm1hdCkKLXsKLSAgICBy
ZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoZm9ybWF0LCAidHJ1ZXR5cGUiKSB8fCBlcXVhbElnbm9y
aW5nQ2FzZShmb3JtYXQsICJvcGVudHlwZSIpOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGEuaAkocmV2aXNpb24g
NzE3OTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIElnYWxpYSBTLkwuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBG
b250UGxhdGZvcm1EYXRhX2gKLSNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YV9oCi0KLSNpZiBkZWZp
bmVkKFVTRV9GUkVFVFlQRSkKLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuaCIK
LSNlbGlmIGRlZmluZWQoVVNFX1BBTkdPKQotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGFQYW5n
by5oIgotI2VsaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGFDYWly
b1dpbi5oIgotI2VuZGlmCi0KLSNlbmRpZiAvLyBGb250UGxhdGZvcm1EYXRhX2gKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0
Zm9ybURhdGFGcmVlVHlwZS5jcHAJKHJldmlzaW9uIDcxNzkxKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDI3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFscCBUb2tlciA8YWxw
QGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgotICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRQbGF0Zm9y
bURhdGEuaCIKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiRm9udERl
c2NyaXB0aW9uLmgiCi0jaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KLSNpbmNsdWRlIDxjYWlyby5oPgot
I2luY2x1ZGUgPGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgotCi0jaWYgIVBMQVRGT1JNKEVGTCkg
fHwgRU5BQkxFKEdMSUJfU1VQUE9SVCkKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jZW5kaWYKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jYWlyb19zdWJwaXhlbF9vcmRlcl90IGNvbnZlcnRGb250
Q29uZmlnU3VicGl4ZWxPcmRlcihpbnQgZm9udENvbmZpZ09yZGVyKQotewotICAgIHN3aXRjaCAo
Zm9udENvbmZpZ09yZGVyKSB7Ci0gICAgY2FzZSBGQ19SR0JBX1JHQjoKLSAgICAgICAgcmV0dXJu
IENBSVJPX1NVQlBJWEVMX09SREVSX1JHQjsKLSAgICBjYXNlIEZDX1JHQkFfQkdSOgotICAgICAg
ICByZXR1cm4gQ0FJUk9fU1VCUElYRUxfT1JERVJfQkdSOwotICAgIGNhc2UgRkNfUkdCQV9WUkdC
OgotICAgICAgICByZXR1cm4gQ0FJUk9fU1VCUElYRUxfT1JERVJfVlJHQjsKLSAgICBjYXNlIEZD
X1JHQkFfVkJHUjoKLSAgICAgICAgcmV0dXJuIENBSVJPX1NVQlBJWEVMX09SREVSX1ZCR1I7Ci0g
ICAgY2FzZSBGQ19SR0JBX05PTkU6Ci0gICAgY2FzZSBGQ19SR0JBX1VOS05PV046Ci0gICAgICAg
IHJldHVybiBDQUlST19TVUJQSVhFTF9PUkRFUl9ERUZBVUxUOwotICAgIH0KLSAgICByZXR1cm4g
Q0FJUk9fU1VCUElYRUxfT1JERVJfREVGQVVMVDsKLX0KLQotY2Fpcm9faGludF9zdHlsZV90IGNv
bnZlcnRGb250Q29uZmlnSGludFN0eWxlKGludCBmb250Q29uZmlnU3R5bGUpCi17Ci0gICAgc3dp
dGNoIChmb250Q29uZmlnU3R5bGUpIHsKLSAgICBjYXNlIEZDX0hJTlRfTk9ORToKLSAgICAgICAg
cmV0dXJuIENBSVJPX0hJTlRfU1RZTEVfTk9ORTsKLSAgICBjYXNlIEZDX0hJTlRfU0xJR0hUOgot
ICAgICAgICByZXR1cm4gQ0FJUk9fSElOVF9TVFlMRV9TTElHSFQ7Ci0gICAgY2FzZSBGQ19ISU5U
X01FRElVTToKLSAgICAgICAgcmV0dXJuIENBSVJPX0hJTlRfU1RZTEVfTUVESVVNOwotICAgIGNh
c2UgRkNfSElOVF9GVUxMOgotICAgICAgICByZXR1cm4gQ0FJUk9fSElOVF9TVFlMRV9GVUxMOwot
ICAgIH0KLSAgICByZXR1cm4gQ0FJUk9fSElOVF9TVFlMRV9OT05FOwotfQotCi12b2lkIHNldENh
aXJvRm9udE9wdGlvbnNGcm9tRm9udENvbmZpZ1BhdHRlcm4oY2Fpcm9fZm9udF9vcHRpb25zX3Qq
IG9wdGlvbnMsIEZjUGF0dGVybiogcGF0dGVybikKLXsKLSAgICBGY0Jvb2wgYm9vbGVhblJlc3Vs
dDsKLSAgICBpbnQgaW50ZWdlclJlc3VsdDsKLQotICAgIGlmIChGY1BhdHRlcm5HZXRJbnRlZ2Vy
KHBhdHRlcm4sIEZDX1JHQkEsIDAsICZpbnRlZ2VyUmVzdWx0KSA9PSBGY1Jlc3VsdE1hdGNoKSB7
Ci0gICAgICAgIGNhaXJvX2ZvbnRfb3B0aW9uc19zZXRfc3VicGl4ZWxfb3JkZXIob3B0aW9ucywg
Y29udmVydEZvbnRDb25maWdTdWJwaXhlbE9yZGVyKGludGVnZXJSZXN1bHQpKTsKLQotICAgICAg
ICAvLyBCYXNlZCBvbiB0aGUgbG9naWMgaW4gY2Fpcm8tZnQtZm9udC5jIGluIHRoZSBjYWlybyBz
b3VyY2UsIGEgZm9udCB3aXRoCi0gICAgICAgIC8vIGEgc3VicGl4ZWwgb3JkZXIgaW1wbGllcyB0
aGF0IGlzIHVzZXMgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgotICAgICAgICBpZiAoaW50ZWdlclJl
c3VsdCAhPSBGQ19SR0JBX05PTkUpCi0gICAgICAgICAgICBjYWlyb19mb250X29wdGlvbnNfc2V0
X2FudGlhbGlhcyhvcHRpb25zLCBDQUlST19BTlRJQUxJQVNfU1VCUElYRUwpOwotICAgIH0KLQot
ICAgIGlmIChGY1BhdHRlcm5HZXRCb29sKHBhdHRlcm4sIEZDX0FOVElBTElBUywgMCwgJmJvb2xl
YW5SZXN1bHQpID09IEZjUmVzdWx0TWF0Y2gpIHsKLSAgICAgICAgLy8gT25seSBvdmVycmlkZSB0
aGUgYW50aS1hbGlhc2luZyBzZXR0aW5nIGlmIHdhcyBwcmV2aW91c2x5IHR1cm5lZCBvZmYuIE90
aGVyd2lzZQotICAgICAgICAvLyB3ZSdsbCBvdmVycmlkZSB0aGUgcHJlZmVyZW5jZSB3aGljaCBk
ZWNpZGVzIGJldHdlZW4gZ3JheSBhbnRpLWFsaWFzaW5nIGFuZAotICAgICAgICAvLyBzdWJwaXhl
bCBhbnRpLWFsaWFzaW5nLgotICAgICAgICBpZiAoIWJvb2xlYW5SZXN1bHQpCi0gICAgICAgICAg
ICBjYWlyb19mb250X29wdGlvbnNfc2V0X2FudGlhbGlhcyhvcHRpb25zLCBDQUlST19BTlRJQUxJ
QVNfTk9ORSk7Ci0gICAgICAgIGVsc2UgaWYgKGNhaXJvX2ZvbnRfb3B0aW9uc19nZXRfYW50aWFs
aWFzKG9wdGlvbnMpID09IENBSVJPX0FOVElBTElBU19OT05FKQotICAgICAgICAgICAgY2Fpcm9f
Zm9udF9vcHRpb25zX3NldF9hbnRpYWxpYXMob3B0aW9ucywgQ0FJUk9fQU5USUFMSUFTX0dSQVkp
OwotICAgIH0KLQotICAgIGlmIChGY1BhdHRlcm5HZXRJbnRlZ2VyKHBhdHRlcm4sIEZDX0hJTlRf
U1RZTEUsIDAsICZpbnRlZ2VyUmVzdWx0KSA9PSBGY1Jlc3VsdE1hdGNoKQotICAgICAgICBjYWly
b19mb250X29wdGlvbnNfc2V0X2hpbnRfc3R5bGUob3B0aW9ucywgY29udmVydEZvbnRDb25maWdI
aW50U3R5bGUoaW50ZWdlclJlc3VsdCkpOwotICAgIGlmIChGY1BhdHRlcm5HZXRCb29sKHBhdHRl
cm4sIEZDX0hJTlRJTkcsIDAsICZib29sZWFuUmVzdWx0KSA9PSBGY1Jlc3VsdE1hdGNoICYmICFi
b29sZWFuUmVzdWx0KQotICAgICAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2hpbnRfc3R5bGUo
b3B0aW9ucywgQ0FJUk9fSElOVF9TVFlMRV9OT05FKTsKLX0KLQotc3RhdGljIGNvbnN0IGNhaXJv
X2ZvbnRfb3B0aW9uc190KiBnZXREZWZhdWx0Rm9udE9wdGlvbnMoKQotewotICAgIHN0YXRpYyBj
b25zdCBjYWlyb19mb250X29wdGlvbnNfdCogb3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19j
cmVhdGUoKTsKLSNpZiBQTEFURk9STShHVEspIHx8IEVOQUJMRShHTElCX1NVUFBPUlQpCi0gICAg
aWYgKEdka1NjcmVlbiogc2NyZWVuID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKSB7Ci0gICAg
ICAgIGNvbnN0IGNhaXJvX2ZvbnRfb3B0aW9uc190KiBzY3JlZW5PcHRpb25zID0gZ2RrX3NjcmVl
bl9nZXRfZm9udF9vcHRpb25zKHNjcmVlbik7Ci0gICAgICAgIGlmIChzY3JlZW5PcHRpb25zKQot
ICAgICAgICAgICAgb3B0aW9ucyA9IHNjcmVlbk9wdGlvbnM7Ci0gICAgfQotI2VuZGlmCi0gICAg
cmV0dXJuIG9wdGlvbnM7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEo
RmNQYXR0ZXJuKiBwYXR0ZXJuLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
bikKLSAgICA6IG1fcGF0dGVybihwYXR0ZXJuKQotICAgICwgbV9mYWxsYmFja3MoMCkKLSAgICAs
IG1fc2l6ZShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkKLSAgICAsIG1fc3lu
dGhldGljQm9sZChmYWxzZSkKLSAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKLSAgICAs
IG1fZml4ZWRXaWR0aChmYWxzZSkKLSAgICAsIG1fc2NhbGVkRm9udCgwKQotewotICAgIFJlZlB0
cjxjYWlyb19mb250X2ZhY2VfdD4gZm9udEZhY2UgPSBhZG9wdFJlZihjYWlyb19mdF9mb250X2Zh
Y2VfY3JlYXRlX2Zvcl9wYXR0ZXJuKG1fcGF0dGVybi5nZXQoKSkpOwotICAgIGluaXRpYWxpemVX
aXRoRm9udEZhY2UoZm9udEZhY2UuZ2V0KCkpOwotCi0gICAgaW50IHNwYWNpbmc7Ci0gICAgaWYg
KEZjUGF0dGVybkdldEludGVnZXIocGF0dGVybiwgRkNfU1BBQ0lORywgMCwgJnNwYWNpbmcpID09
IEZjUmVzdWx0TWF0Y2ggJiYgc3BhY2luZyA9PSBGQ19NT05PKQotICAgICAgICBtX2ZpeGVkV2lk
dGggPSB0cnVlOwotCi0gICAgaWYgKGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSA+PSBGb250V2Vp
Z2h0Qm9sZCkgewotICAgICAgICAvLyBUaGUgRkNfRU1CT0xERU4gcHJvcGVydHkgaW5zdHJ1Y3Rz
IHVzIHRvIGZha2UgdGhlIGJvbGRuZXNzIG9mIHRoZSBmb250LgotICAgICAgICBGY0Jvb2wgZm9u
dENvbmZpZ0VtYm9sZGVuOwotICAgICAgICBpZiAoRmNQYXR0ZXJuR2V0Qm9vbChwYXR0ZXJuLCBG
Q19FTUJPTERFTiwgMCwgJmZvbnRDb25maWdFbWJvbGRlbikgPT0gRmNSZXN1bHRNYXRjaCkKLSAg
ICAgICAgICAgIG1fc3ludGhldGljQm9sZCA9IGZvbnRDb25maWdFbWJvbGRlbjsKLSAgICB9Ci19
Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBi
b2xkLCBib29sIGl0YWxpYykKLSAgICA6IG1fZmFsbGJhY2tzKDApCi0gICAgLCBtX3NpemUoc2l6
ZSkKLSAgICAsIG1fc3ludGhldGljQm9sZChib2xkKQotICAgICwgbV9zeW50aGV0aWNPYmxpcXVl
KGl0YWxpYykKLSAgICAsIG1fZml4ZWRXaWR0aChmYWxzZSkKLSAgICAsIG1fc2NhbGVkRm9udCgw
KQotewotICAgIC8vIFdlIGNhbm5vdCBjcmVhdGUgYSBzY2FsZWQgZm9udCBoZXJlLgotfQotCi1G
b250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250
RmFjZSwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYykKLSAgICA6IG1fZmFsbGJh
Y2tzKDApCi0gICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fc3ludGhldGljQm9sZChib2xkKQot
ICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGl0YWxpYykKLSAgICAsIG1fc2NhbGVkRm9udCgwKQot
ewotICAgIGluaXRpYWxpemVXaXRoRm9udEZhY2UoZm9udEZhY2UpOwotCi0gICAgRlRfRmFjZSBm
b250Q29uZmlnRmFjZSA9IGNhaXJvX2Z0X3NjYWxlZF9mb250X2xvY2tfZmFjZShtX3NjYWxlZEZv
bnQpOwotICAgIGlmIChmb250Q29uZmlnRmFjZSkgewotICAgICAgICBtX2ZpeGVkV2lkdGggPSBm
b250Q29uZmlnRmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19GSVhFRF9XSURUSDsKLSAg
ICAgICAgY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfdW5sb2NrX2ZhY2UobV9zY2FsZWRGb250KTsKLSAg
ICB9Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKLXsKLSAgICAvLyBDaGVjayBmb3Igc2VsZi1h
c3NpZ25tZW50LgotICAgIGlmICh0aGlzID09ICZvdGhlcikKLSAgICAgICAgcmV0dXJuICp0aGlz
OwotCi0gICAgbV9zaXplID0gb3RoZXIubV9zaXplOwotICAgIG1fc3ludGhldGljQm9sZCA9IG90
aGVyLm1fc3ludGhldGljQm9sZDsKLSAgICBtX3N5bnRoZXRpY09ibGlxdWUgPSBvdGhlci5tX3N5
bnRoZXRpY09ibGlxdWU7Ci0gICAgbV9maXhlZFdpZHRoID0gb3RoZXIubV9maXhlZFdpZHRoOwot
ICAgIG1fcGF0dGVybiA9IG90aGVyLm1fcGF0dGVybjsKLQotICAgIGlmIChtX2ZhbGxiYWNrcykg
ewotICAgICAgICBGY0ZvbnRTZXREZXN0cm95KG1fZmFsbGJhY2tzKTsKLSAgICAgICAgLy8gVGhp
cyB3aWxsIGJlIHJlLWNyZWF0ZWQgb24gZGVtYW5kLgotICAgICAgICBtX2ZhbGxiYWNrcyA9IDA7
Ci0gICAgfQotCi0gICAgaWYgKG1fc2NhbGVkRm9udCAmJiBtX3NjYWxlZEZvbnQgIT0gaGFzaFRh
YmxlRGVsZXRlZEZvbnRWYWx1ZSgpKQotICAgICAgICBjYWlyb19zY2FsZWRfZm9udF9kZXN0cm95
KG1fc2NhbGVkRm9udCk7Ci0gICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfcmVm
ZXJlbmNlKG90aGVyLm1fc2NhbGVkRm9udCk7Ci0KLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLUZv
bnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
b3RoZXIpCi0gICAgOiBtX2ZhbGxiYWNrcygwKQotICAgICwgbV9zY2FsZWRGb250KDApCi17Ci0g
ICAgKnRoaXMgPSBvdGhlcjsKLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlciwgZmxvYXQgc2l6ZSkKLXsKLSAgICAqdGhp
cyA9IG90aGVyOwotCi0gICAgLy8gV2UgbmVlZCB0byByZWluaXRpYWxpemUgdGhlIGluc3RhbmNl
LCBiZWNhdXNlIHRoZSBkaWZmZXJlbmNlIGluIHNpemUgCi0gICAgLy8gbmVjZXNzaXRhdGVzIGEg
bmV3IHNjYWxlZCBmb250IGluc3RhbmNlLgotICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgaW5pdGlh
bGl6ZVdpdGhGb250RmFjZShjYWlyb19zY2FsZWRfZm9udF9nZXRfZm9udF9mYWNlKG1fc2NhbGVk
Rm9udCkpOwotfQotCi1Gb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCi17Ci0g
ICAgaWYgKG1fZmFsbGJhY2tzKSB7Ci0gICAgICAgIEZjRm9udFNldERlc3Ryb3kobV9mYWxsYmFj
a3MpOwotICAgICAgICBtX2ZhbGxiYWNrcyA9IDA7Ci0gICAgfQotCi0gICAgaWYgKG1fc2NhbGVk
Rm9udCAmJiBtX3NjYWxlZEZvbnQgIT0gaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpKQotICAg
ICAgICBjYWlyb19zY2FsZWRfZm9udF9kZXN0cm95KG1fc2NhbGVkRm9udCk7Ci19Ci0KLWJvb2wg
Rm9udFBsYXRmb3JtRGF0YTo6aXNGaXhlZFBpdGNoKCkKLXsKLSAgICByZXR1cm4gbV9maXhlZFdp
ZHRoOwotfQotCi1ib29sIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0oY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcGF0dGVybiA9PSBvdGhlci5t
X3BhdHRlcm4pCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICghbV9wYXR0ZXJuIHx8ICFv
dGhlci5tX3BhdHRlcm4pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gRmNQYXR0
ZXJuRXF1YWwobV9wYXR0ZXJuLmdldCgpLCBvdGhlci5tX3BhdHRlcm4uZ2V0KCkpOwotfQotCi0j
aWZuZGVmIE5ERUJVRwotU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBGb250UGxhdGZv
cm1EYXRhOjppbml0aWFsaXplV2l0aEZvbnRGYWNlKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFj
ZSkKLXsKLSAgICBjYWlyb19mb250X29wdGlvbnNfdCogb3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0
aW9uc19jb3B5KGdldERlZmF1bHRGb250T3B0aW9ucygpKTsKLQotICAgIGNhaXJvX21hdHJpeF90
IGN0bTsKLSAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKLQotICAgIGNhaXJv
X21hdHJpeF90IGZvbnRNYXRyaXg7Ci0gICAgaWYgKCFtX3BhdHRlcm4pCi0gICAgICAgIGNhaXJv
X21hdHJpeF9pbml0X3NjYWxlKCZmb250TWF0cml4LCBtX3NpemUsIG1fc2l6ZSk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIHNldENhaXJvRm9udE9wdGlvbnNGcm9tRm9udENvbmZpZ1BhdHRlcm4ob3B0
aW9ucywgbV9wYXR0ZXJuLmdldCgpKTsKLQotICAgICAgICAvLyBGb250Q29uZmlnIG1heSByZXR1
cm4gYSBsaXN0IG9mIHRyYW5zZm9ybWF0aW9uIG1hdHJpY2VzIHdpdGggdGhlIHBhdHRlcm4sIGZv
ciBpbnN0YW5jZSwKLSAgICAgICAgLy8gZm9yIGZvbnRzIHRoYXQgYXJlIG9ibGlxdWUuIFdlIHVz
ZSB0aGF0IHRvIGluaXRpYWxpemUgdGhlIGNhaXJvIGZvbnQgbWF0cml4LgotICAgICAgICBGY01h
dHJpeCBmb250Q29uZmlnTWF0cml4LCAqdGVtcEZvbnRDb25maWdNYXRyaXg7Ci0gICAgICAgIEZj
TWF0cml4SW5pdCgmZm9udENvbmZpZ01hdHJpeCk7Ci0KLSAgICAgICAgLy8gVGhlc2UgbWF0cmlj
ZXMgbWF5IGJlIHN0YWNrZWQgaW4gdGhlIHBhdHRlcm4sIHNvIGl0J3Mgb3VyIGpvYiB0byBnZXQg
dGhlbSBhbGwgYW5kIG11bHRpcGx5IHRoZW0uCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBGY1Bh
dHRlcm5HZXRNYXRyaXgobV9wYXR0ZXJuLmdldCgpLCBGQ19NQVRSSVgsIGksICZ0ZW1wRm9udENv
bmZpZ01hdHJpeCkgPT0gRmNSZXN1bHRNYXRjaDsgaSsrKQotICAgICAgICAgICAgRmNNYXRyaXhN
dWx0aXBseSgmZm9udENvbmZpZ01hdHJpeCwgJmZvbnRDb25maWdNYXRyaXgsIHRlbXBGb250Q29u
ZmlnTWF0cml4KTsKLSAgICAgICAgY2Fpcm9fbWF0cml4X2luaXQoJmZvbnRNYXRyaXgsIGZvbnRD
b25maWdNYXRyaXgueHgsIC1mb250Q29uZmlnTWF0cml4Lnl4LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAtZm9udENvbmZpZ01hdHJpeC54eSwgZm9udENvbmZpZ01hdHJpeC55eSwgMCwgMCk7
Ci0KLSAgICAgICAgLy8gVGhlIG1hdHJpeCBmcm9tIEZvbnRDb25maWcgZG9lcyBub3QgaW5jbHVk
ZSB0aGUgc2NhbGUuCi0gICAgICAgIGNhaXJvX21hdHJpeF9zY2FsZSgmZm9udE1hdHJpeCwgbV9z
aXplLCBtX3NpemUpOwotICAgIH0KLQotICAgIG1fc2NhbGVkRm9udCA9IGNhaXJvX3NjYWxlZF9m
b250X2NyZWF0ZShmb250RmFjZSwgJmZvbnRNYXRyaXgsICZjdG0sIG9wdGlvbnMpOwotICAgIGNh
aXJvX2ZvbnRfb3B0aW9uc19kZXN0cm95KG9wdGlvbnMpOwotfQotCi0KLX0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1E
YXRhRnJlZVR5cGUuaAkocmV2aXNpb24gNzE3OTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDEwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21h
aWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIK
LSAqIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4K
LSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgot
ICovCi0KLSNpZm5kZWYgRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlX2gKLSNkZWZpbmUgRm9udFBs
YXRmb3JtRGF0YUZyZWVUeXBlX2gKLQotI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2lu
Y2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiSGFzaEZ1bmN0aW9ucy5oIgotI2luY2x1
ZGUgIlJlZlB0ckNhaXJvLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotdHlwZWRlZiBz
dHJ1Y3QgX0ZjRm9udFNldCBGY0ZvbnRTZXQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgRm9udFBsYXRmb3JtRGF0YSB7Ci1wdWJsaWM6Ci0gICAgRm9udFBsYXRmb3JtRGF0YShXVEY6
Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDogbV9mYWxsYmFja3MoMCkKLSAg
ICAgICAgLCBtX3NpemUoMCkKLSAgICAgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCi0gICAg
ICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNlKQotICAgICAgICAsIG1fc2NhbGVkRm9udCho
YXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkpCi0gICAgICAgIHsgfQotCi0gICAgRm9udFBsYXRm
b3JtRGF0YSgpCi0gICAgICAgIDogbV9mYWxsYmFja3MoMCkKLSAgICAgICAgLCBtX3NpemUoMCkK
LSAgICAgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCi0gICAgICAgICwgbV9zeW50aGV0aWNP
YmxpcXVlKGZhbHNlKQotICAgICAgICAsIG1fc2NhbGVkRm9udCgwKQotICAgICAgICB7IH0KLQot
ICAgIEZvbnRQbGF0Zm9ybURhdGEoRmNQYXR0ZXJuKiwgY29uc3QgRm9udERlc2NyaXB0aW9uJik7
Ci0gICAgRm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UsIGZsb2F0
IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxv
YXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7Ci0gICAgRm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci0gICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250
UGxhdGZvcm1EYXRhJiwgZmxvYXQgc2l6ZSk7Ci0KLSAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOwot
Ci0gICAgYm9vbCBpc0ZpeGVkUGl0Y2goKTsKLSAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9Ci0gICAgdm9pZCBzZXRTaXplKGZsb2F0IHNpemUpIHsgbV9zaXplID0gc2l6
ZTsgfQotICAgIGJvb2wgc3ludGhldGljQm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGlj
Qm9sZDsgfQotICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3lu
dGhldGljT2JsaXF1ZTsgfQotCi0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkRm9udDsgfQotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gUHRySGFzaDxjYWlyb19zY2FsZWRfZm9udF90Kj46
Omhhc2gobV9zY2FsZWRGb250KTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYpIGNvbnN0OwotICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9y
PShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRW
YWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zY2FsZWRGb250ID09IGhhc2hU
YWJsZURlbGV0ZWRGb250VmFsdWUoKTsKLSAgICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgU3Ry
aW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIFJlZlB0cjxGY1BhdHRlcm4+
IG1fcGF0dGVybjsKLSAgICBtdXRhYmxlIEZjRm9udFNldCogbV9mYWxsYmFja3M7IC8vIEluaXRp
YWxpemVkIGxhemlseS4KLSAgICBmbG9hdCBtX3NpemU7Ci0gICAgYm9vbCBtX3N5bnRoZXRpY0Jv
bGQ7Ci0gICAgYm9vbCBtX3N5bnRoZXRpY09ibGlxdWU7Ci0gICAgYm9vbCBtX2ZpeGVkV2lkdGg7
Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogbV9zY2FsZWRGb250OwotCi1wcml2YXRlOgotICAg
IHZvaWQgaW5pdGlhbGl6ZVdpdGhGb250RmFjZShjYWlyb19mb250X2ZhY2VfdCopOwotICAgIHN0
YXRpYyBjYWlyb19zY2FsZWRfZm9udF90KiBoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjYWlyb19zY2FsZWRfZm9udF90Kj4oLTEpOyB9Ci19Owot
Ci19Ci0KLSNlbmRpZiAvLyBGb250UGxhdGZvcm1EYXRhRnJlZVR5cGVfaApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HbHlwaFBhZ2VUcmVlTm9kZUNhaXJvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dseXBoUGFnZVRyZWVO
b2RlQ2Fpcm8uY3BwCShyZXZpc2lvbiA3MTc5MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR2x5cGhQYWdlVHJlZU5vZGVDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBt
aWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxw
LnRva2VyQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5
cGhQYWdlVHJlZU5vZGUuaCIKLQotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVk
ZSA8Y2Fpcm8tZnQuaD4KLSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPGZvbnRjb25maWcv
ZmNmcmVldHlwZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgR2x5cGhQYWdlOjpm
aWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNp
Z25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKLXsKLSAg
ICAvLyBUaGUgYnVmZmVyTGVuZ3RoIHdpbGwgYmUgZ3JlYXRlciB0aGFuIHRoZSBnbHlwaCBwYWdl
IHNpemUgaWYgdGhlIGJ1ZmZlciBoYXMgVW5pY29kZSBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMu
Ci0gICAgLy8gV2Ugd29uJ3Qgc3VwcG9ydCB0aGlzIGZvciBub3cuCi0gICAgaWYgKGJ1ZmZlckxl
bmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRlRf
RmFjZSBmYWNlID0gY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfbG9ja19mYWNlKGZvbnREYXRhLT5wbGF0
Zm9ybURhdGEoKS5zY2FsZWRGb250KCkpOwotICAgIGlmICghZmFjZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIEdseXBoIGdseXBoID0gRmNGcmVl
VHlwZUNoYXJJbmRleChmYWNlLCBidWZmZXJbaV0pOwotICAgICAgICBpZiAoIWdseXBoKQotICAg
ICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgMCwgMCk7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5
cGgsIGZvbnREYXRhKTsKLSAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfdW5sb2NrX2ZhY2UoZm9udERhdGEt
PnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKSk7Ci0KLSAgICByZXR1cm4gaGF2ZUdseXBoczsK
LX0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9TaW1wbGVGb250
RGF0YUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1NpbXBsZUZvbnREYXRhQ2Fpcm8uY3BwCShyZXZpc2lvbiA3MTc5MSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vU2ltcGxlRm9udERhdGFDYWlyby5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0KLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgi
Ci0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIK
LSNpbmNsdWRlIDxjYWlyby1mdC5oPgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Zm9u
dGNvbmZpZy9mY2ZyZWV0eXBlLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQot
ewotICAgIGNhaXJvX2ZvbnRfZXh0ZW50c190IGZvbnRfZXh0ZW50czsKLSAgICBjYWlyb190ZXh0
X2V4dGVudHNfdCB0ZXh0X2V4dGVudHM7Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZXh0ZW50cyht
X3BsYXRmb3JtRGF0YS5zY2FsZWRGb250KCksICZmb250X2V4dGVudHMpOwotICAgIG1fYXNjZW50
ID0gc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKGZvbnRfZXh0ZW50cy5hc2NlbnQpKTsKLSAgICBt
X2Rlc2NlbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoZm9udF9leHRlbnRzLmRlc2NlbnQp
KTsKLSAgICBtX2xpbmVTcGFjaW5nID0gc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKGZvbnRfZXh0
ZW50cy5oZWlnaHQpKTsKLSAgICAvLyBUaGVyZSBzZWVtcyB0byBiZSBzb21lIHJvdW5kaW5nIGVy
cm9yIGluIGNhaXJvIChvciBpbiBob3cgd2UKLSAgICAvLyB1c2UgY2Fpcm8pIHdpdGggc29tZSBm
b250cywgbGlrZSBEZWphVnUgU2FucyBNb25vLCB3aGljaCBtYWtlcwotICAgIC8vIGNhaXJvIHJl
cG9ydCBhIGhlaWdodCBzbWFsbGVyIHRoYW4gYXNjZW50ICsgZGVzY2VudCwgd2hpY2ggaXMKLSAg
ICAvLyB3cm9uZyBhbmQgY29uZnVzZXMgV2ViQ29yZSdzIGxheW91dCBzeXN0ZW0uIFdvcmthcm91
bmQgdGhpcwotICAgIC8vIHdoaWxlIHdlIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uLgotICAg
IGlmIChtX2xpbmVTcGFjaW5nIDwgbV9hc2NlbnQgKyBtX2Rlc2NlbnQpCi0gICAgICAgIG1fbGlu
ZVNwYWNpbmcgPSBtX2FzY2VudCArIG1fZGVzY2VudDsKLSAgICBjYWlyb19zY2FsZWRfZm9udF90
ZXh0X2V4dGVudHMobV9wbGF0Zm9ybURhdGEuc2NhbGVkRm9udCgpLCAieCIsICZ0ZXh0X2V4dGVu
dHMpOwotICAgIG1feEhlaWdodCA9IHRleHRfZXh0ZW50cy5oZWlnaHQ7Ci0gICAgY2Fpcm9fc2Nh
bGVkX2ZvbnRfdGV4dF9leHRlbnRzKG1fcGxhdGZvcm1EYXRhLnNjYWxlZEZvbnQoKSwgIiAiLCAm
dGV4dF9leHRlbnRzKTsKLSAgICBtX3NwYWNlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4odGV4
dF9leHRlbnRzLnhfYWR2YW5jZSk7Ci0gICAgbV9saW5lR2FwID0gbV9saW5lU3BhY2luZyAtIG1f
YXNjZW50IC0gbV9kZXNjZW50OwotICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZv
cm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7Ci19Ci0KLXZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCi17Ci0gICAgbV9hdmdDaGFyV2lkdGggPSAw
LmY7Ci0gICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7Ci0gICAgaW5pdENoYXJXaWR0aHMoKTsKLX0K
LQotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLSAgICBkZWxldGUg
bV9zbWFsbENhcHNGb250RGF0YTsKLSAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gMDsKLX0KLQot
U2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICAvLyBGSVhNRTog
SSB0aGluayB3ZSB3YW50IHRvIGFzayBGb250Q29uZmlnIGZvciB0aGUgcmlnaHQgZm9udCBhZ2Fp
bi4KLSAgICBpZiAoIW1fc21hbGxDYXBzRm9udERhdGEpCi0gICAgICAgIG1fc21hbGxDYXBzRm9u
dERhdGEgPSBuZXcgU2ltcGxlRm9udERhdGEoCi0gICAgICAgICAgICBGb250UGxhdGZvcm1EYXRh
KGNhaXJvX3NjYWxlZF9mb250X2dldF9mb250X2ZhY2UobV9wbGF0Zm9ybURhdGEuc2NhbGVkRm9u
dCgpKSwKLSAgICAgICAgICAgIDAuNzBmICogZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgp
LCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCksIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRp
Y09ibGlxdWUoKSkpOwotCi0gICAgcmV0dXJuIG1fc21hbGxDYXBzRm9udERhdGE7Ci19Ci0KLWJv
b2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgaW50IGxlbmd0aCkgY29uc3QKLXsKLSAgICBGVF9GYWNlIGZhY2UgPSBjYWlyb19mdF9z
Y2FsZWRfZm9udF9sb2NrX2ZhY2UobV9wbGF0Zm9ybURhdGEuc2NhbGVkRm9udCgpKTsKLQotICAg
IGlmICghZmFjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoRmNGcmVlVHlwZUNoYXJJbmRleChmYWNl
LCBjaGFyYWN0ZXJzW2ldKSA9PSAwKSB7Ci0gICAgICAgICAgICBjYWlyb19mdF9zY2FsZWRfZm9u
dF91bmxvY2tfZmFjZShtX3BsYXRmb3JtRGF0YS5zY2FsZWRGb250KCkpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2Fpcm9fZnRfc2NhbGVkX2Zv
bnRfdW5sb2NrX2ZhY2UobV9wbGF0Zm9ybURhdGEuc2NhbGVkRm9udCgpKTsKLQotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCi17Ci0g
ICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IG1fcGxhdGZvcm1EYXRhLmlzRml4ZWRQaXRjaCgpOwot
fQotCi1GbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5
cGgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotfQotCi1mbG9hdCBTaW1wbGVG
b250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAg
IEFTU0VSVChtX3BsYXRmb3JtRGF0YS5zY2FsZWRGb250KCkpOwotCi0gICAgY2Fpcm9fZ2x5cGhf
dCBjZ2x5cGggPSB7IGdseXBoLCAwLCAwIH07Ci0gICAgY2Fpcm9fdGV4dF9leHRlbnRzX3QgZXh0
ZW50czsKLSAgICBjYWlyb19zY2FsZWRfZm9udF9nbHlwaF9leHRlbnRzKG1fcGxhdGZvcm1EYXRh
LnNjYWxlZEZvbnQoKSwgJmNnbHlwaCwgMSwgJmV4dGVudHMpOwotCi0gICAgZmxvYXQgdyA9IChm
bG9hdCltX3NwYWNlV2lkdGg7Ci0gICAgaWYgKGNhaXJvX3NjYWxlZF9mb250X3N0YXR1cyhtX3Bs
YXRmb3JtRGF0YS5zY2FsZWRGb250KCkpID09IENBSVJPX1NUQVRVU19TVUNDRVNTICYmIGV4dGVu
dHMueF9hZHZhbmNlKQotICAgICAgICB3ID0gKGZsb2F0KWV4dGVudHMueF9hZHZhbmNlOwotCi0g
ICAgcmV0dXJuIHc7ICAgIAotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAkocmV2aXNpb24g
NzE3OTEpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhY2hlRnJl
ZVR5cGUuY3BwOjcxNzkxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9G
b250Q2FjaGVGcmVlVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZvbnRDYWNoZS5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkZv
bnQuaCIKKyNpbmNsdWRlICJPd25QdHJDYWlyby5oIgorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgi
CisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlIDxjYWlyby1mdC5oPgorI2lu
Y2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8Zm9udGNvbmZpZy9mY2ZyZWV0eXBlLmg+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZv
bnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICAvLyBJdCdzIGZpbmUgdG8gY2FsbCBGY0lu
aXQgbXVsdGlwbGUgdGltZXMgcGVyIHRoZSBkb2N1bWVudGF0aW9uLgorICAgIGlmICghRmNJbml0
KCkpCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitGY1BhdHRlcm4qIGNyZWF0
ZUZvbnRDb25maWdQYXR0ZXJuRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
aW50IGxlbmd0aCkKK3sKKyAgICBGY1BhdHRlcm4qIHBhdHRlcm4gPSBGY1BhdHRlcm5DcmVhdGUo
KTsKKworICAgIEZjQ2hhclNldCogZm9udENvbmZpZ0NoYXJTZXQgPSBGY0NoYXJTZXRDcmVhdGUo
KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChV
MTZfSVNfU1VSUk9HQVRFKGNoYXJhY3RlcnNbaV0pICYmIFUxNl9JU19TVVJST0dBVEVfTEVBRChj
aGFyYWN0ZXJzW2ldKQorICAgICAgICAgICAgICAgICYmIGkgIT0gbGVuZ3RoIC0gMSAmJiBVMTZf
SVNfVFJBSUwoY2hhcmFjdGVyc1tpICsgMV0pKSB7CisgICAgICAgICAgICBGY0NoYXJTZXRBZGRD
aGFyKGZvbnRDb25maWdDaGFyU2V0LCBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoY2hhcmFjdGVyc1tp
XSwgY2hhcmFjdGVyc1tpKzFdKSk7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgRmNDaGFyU2V0QWRkQ2hhcihmb250Q29uZmlnQ2hhclNldCwgY2hhcmFjdGVy
c1tpXSk7CisgICAgfQorICAgIEZjUGF0dGVybkFkZENoYXJTZXQocGF0dGVybiwgRkNfQ0hBUlNF
VCwgZm9udENvbmZpZ0NoYXJTZXQpOworICAgIEZjQ2hhclNldERlc3Ryb3koZm9udENvbmZpZ0No
YXJTZXQpOworCisgICAgRmNQYXR0ZXJuQWRkQm9vbChwYXR0ZXJuLCBGQ19TQ0FMQUJMRSwgRmNU
cnVlKTsKKyAgICBGY0NvbmZpZ1N1YnN0aXR1dGUoMCwgcGF0dGVybiwgRmNNYXRjaFBhdHRlcm4p
OworICAgIEZjRGVmYXVsdFN1YnN0aXR1dGUocGF0dGVybik7CisgICAgcmV0dXJuIHBhdHRlcm47
Cit9CisKK0ZjUGF0dGVybiogZmluZEJlc3RGb250R2l2ZW5GYWxsYmFja3MoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgZm9udERhdGEsIEZjUGF0dGVybiogcGF0dGVybikKK3sKKyAgICBpZiAoIWZv
bnREYXRhLm1fcGF0dGVybikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIWZvbnREYXRh
Lm1fZmFsbGJhY2tzKSB7CisgICAgICAgIEZjUmVzdWx0IGZvbnRDb25maWdSZXN1bHQ7CisgICAg
ICAgIGZvbnREYXRhLm1fZmFsbGJhY2tzID0gRmNGb250U29ydCgwLCBmb250RGF0YS5tX3BhdHRl
cm4uZ2V0KCksIEZjVHJ1ZSwgMCwgJmZvbnRDb25maWdSZXN1bHQpOworICAgIH0KKworICAgIGlm
ICghZm9udERhdGEubV9mYWxsYmFja3MpCisgICAgICAgIHJldHVybiAwOworCisgICAgRmNGb250
U2V0KiBzZXRzW10gPSB7IGZvbnREYXRhLm1fZmFsbGJhY2tzIH07CisgICAgRmNSZXN1bHQgZm9u
dENvbmZpZ1Jlc3VsdDsKKyAgICByZXR1cm4gRmNGb250U2V0TWF0Y2goMCwgc2V0cywgMSwgcGF0
dGVybiwgJmZvbnRDb25maWdSZXN1bHQpOworfQorCitjb25zdCBTaW1wbGVGb250RGF0YSogRm9u
dENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEZjUGF0dGVybj4g
cGF0dGVybiA9IGFkb3B0UmVmKGNyZWF0ZUZvbnRDb25maWdQYXR0ZXJuRm9yQ2hhcmFjdGVycyhj
aGFyYWN0ZXJzLCBsZW5ndGgpKTsKKyAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0
YSA9IGZvbnQucHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCk7CisKKyAgICBSZWZQdHI8RmNQ
YXR0ZXJuPiBmYWxsYmFja1BhdHRlcm4gPSBhZG9wdFJlZihmaW5kQmVzdEZvbnRHaXZlbkZhbGxi
YWNrcyhmb250RGF0YSwgcGF0dGVybi5nZXQoKSkpOworICAgIGlmIChmYWxsYmFja1BhdHRlcm4p
IHsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBhbHRlcm5hdGVGb250RGF0YShmYWxsYmFja1Bh
dHRlcm4uZ2V0KCksIGZvbnQuZm9udERlc2NyaXB0aW9uKCkpOworICAgICAgICByZXR1cm4gZ2V0
Q2FjaGVkRm9udERhdGEoJmFsdGVybmF0ZUZvbnREYXRhKTsKKyAgICB9CisKKyAgICBGY1Jlc3Vs
dCBmb250Q29uZmlnUmVzdWx0OworICAgIFJlZlB0cjxGY1BhdHRlcm4+IHJlc3VsdFBhdHRlcm4g
PSBhZG9wdFJlZihGY0ZvbnRNYXRjaCgwLCBwYXR0ZXJuLmdldCgpLCAmZm9udENvbmZpZ1Jlc3Vs
dCkpOworICAgIGlmICghcmVzdWx0UGF0dGVybikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgRm9u
dFBsYXRmb3JtRGF0YSBhbHRlcm5hdGVGb250RGF0YShyZXN1bHRQYXR0ZXJuLmdldCgpLCBmb250
LmZvbnREZXNjcmlwdGlvbigpKTsKKyAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoJmFsdGVy
bmF0ZUZvbnREYXRhKTsKK30KKworU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxh
ckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKK3sKKyAgICByZXR1cm4gMDsKK30K
KworU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKK3sKKyAgICAvLyBXZSB3YW50
IHRvIHJldHVybiBhIGZhbGxiYWNrIGZvbnQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBsb2dpYyBwcmV2
ZW50aW5nIEZvbnRDb25maWcKKyAgICAvLyBtYXRjaGVzIGZvciBub24tZmFsbGJhY2sgZm9udHMg
bWlnaHQgcmV0dXJuIDAuIFNlZSBpc0ZhbGxiYWNrRm9udEFsbG93ZWQuCisgICAgc3RhdGljIEF0
b21pY1N0cmluZyB0aW1lc1N0cigic2VyaWYiKTsKKyAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERh
dGEoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0cik7Cit9CisKK3ZvaWQgRm9udENhY2hlOjpnZXRU
cmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rvcjx1bnNp
Z25lZD4mIHRyYWl0c01hc2tzKQoreworfQorCitzdGF0aWMgU3RyaW5nIGdldEZhbWlseU5hbWVT
dHJpbmdGcm9tRm9udERlc2NyaXB0aW9uQW5kRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKK3sKKyAgICAvLyBJ
ZiB3ZSdyZSBjcmVhdGluZyBhIGZhbGxiYWNrIGZvbnQgKGUuZy4gIi13ZWJraXQtbW9ub3NwYWNl
IiksIGNvbnZlcnQgdGhlIG5hbWUgaW50bworICAgIC8vIHRoZSBmYWxsYmFjayBuYW1lIChsaWtl
ICJtb25vc3BhY2UiKSB0aGF0IGZvbnRjb25maWcgdW5kZXJzdGFuZHMuCisgICAgaWYgKGZhbWls
eS5sZW5ndGgoKSAmJiAhZmFtaWx5LnN0YXJ0c1dpdGgoIi13ZWJraXQtIikpCisgICAgICAgIHJl
dHVybiBmYW1pbHkuc3RyaW5nKCk7CisKKyAgICBzd2l0Y2ggKGZvbnREZXNjcmlwdGlvbi5nZW5l
cmljRmFtaWx5KCkpIHsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHk6
CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5OgorICAgICAgICByZXR1cm4g
InNlcmlmIjsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5OgorICAg
ICAgICByZXR1cm4gInNhbnMtc2VyaWYiOworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpNb25v
c3BhY2VGYW1pbHk6CisgICAgICAgIHJldHVybiAibW9ub3NwYWNlIjsKKyAgICBjYXNlIEZvbnRE
ZXNjcmlwdGlvbjo6Q3Vyc2l2ZUZhbWlseToKKyAgICAgICAgcmV0dXJuICJjdXJzaXZlIjsKKyAg
ICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6RmFudGFzeUZhbWlseToKKyAgICAgICAgcmV0dXJuICJm
YW50YXN5IjsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHk6CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KK30KKworRm9udFBsYXRmb3JtRGF0YSogRm9u
dENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKK3sKKyAgICAvLyBUaGUg
Q1NTIGZvbnQgbWF0Y2hpbmcgYWxnb3JpdGhtIChodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWZv
bnRzLyNmb250LW1hdGNoaW5nLWFsZ29yaXRobSkKKyAgICAvLyBzYXlzIHRoYXQgd2UgbXVzdCBm
aW5kIGFuIGV4YWN0IG1hdGNoIGZvciBmb250IGZhbWlseSwgc2xhbnQgKGl0YWxpYyBvciBvYmxp
cXVlIGNhbiBiZSB1c2VkKQorICAgIC8vIGFuZCBmb250IHdlaWdodCAod2Ugb25seSBtYXRjaCBi
b2xkL25vbi1ib2xkIGhlcmUpLgorICAgIFJlZlB0cjxGY1BhdHRlcm4+IHBhdHRlcm4gPSBhZG9w
dFJlZihGY1BhdHRlcm5DcmVhdGUoKSk7CisgICAgU3RyaW5nIGZhbWlseU5hbWVTdHJpbmcoZ2V0
RmFtaWx5TmFtZVN0cmluZ0Zyb21Gb250RGVzY3JpcHRpb25BbmRGYW1pbHkoZm9udERlc2NyaXB0
aW9uLCBmYW1pbHkpKTsKKyAgICBpZiAoIUZjUGF0dGVybkFkZFN0cmluZyhwYXR0ZXJuLmdldCgp
LCBGQ19GQU1JTFksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZhbWlseU5hbWVT
dHJpbmcudXRmOCgpLmRhdGEoKSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGJvb2wgaXRh
bGljID0gZm9udERlc2NyaXB0aW9uLml0YWxpYygpOworICAgIGlmICghRmNQYXR0ZXJuQWRkSW50
ZWdlcihwYXR0ZXJuLmdldCgpLCBGQ19TTEFOVCwgaXRhbGljID8gRkNfU0xBTlRfSVRBTElDIDog
RkNfU0xBTlRfUk9NQU4pKQorICAgICAgICByZXR1cm4gMDsKKyAgICBib29sIGJvbGQgPSBmb250
RGVzY3JpcHRpb24ud2VpZ2h0KCkgPj0gRm9udFdlaWdodEJvbGQ7CisgICAgaWYgKCFGY1BhdHRl
cm5BZGRJbnRlZ2VyKHBhdHRlcm4uZ2V0KCksIEZDX1dFSUdIVCwgYm9sZCA/IEZDX1dFSUdIVF9C
T0xEIDogRkNfV0VJR0hUX05PUk1BTCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICghRmNQ
YXR0ZXJuQWRkRG91YmxlKHBhdHRlcm4uZ2V0KCksIEZDX1BJWEVMX1NJWkUsIGZvbnREZXNjcmlw
dGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBU
aGUgc3RyYXRlZ3kgaXMgb3JpZ2luYWxseSBmcm9tIFNraWEgKHNyYy9wb3J0cy9Ta0ZvbnRIb3N0
X2ZvbnRjb25maWcuY3BwKToKKworICAgIC8vIEFsbG93IEZvbnRjb25maWcgdG8gZG8gcHJlLW1h
dGNoIHN1YnN0aXR1dGlvbi4gVW5sZXNzIHdlIGFyZSBhY2Nlc3NpbmcgYSAiZmFsbGJhY2siCisg
ICAgLy8gZmFtaWx5IGxpa2UgInNhbnMsIiB0aGlzIGlzIHRoZSBvbmx5IHRpbWUgd2UgYWxsb3cg
Rm9udGNvbmZpZyB0byBzdWJzdGl0dXRlIG9uZQorICAgIC8vIGZhbWlseSBuYW1lIGZvciBhbm90
aGVyIChpLmUuIGlmIHRoZSBmb250cyBhcmUgYWxpYXNlZCB0byBlYWNoIG90aGVyKS4KKyAgICBG
Y0NvbmZpZ1N1YnN0aXR1dGUoMCwgcGF0dGVybi5nZXQoKSwgRmNNYXRjaFBhdHRlcm4pOworICAg
IEZjRGVmYXVsdFN1YnN0aXR1dGUocGF0dGVybi5nZXQoKSk7CisKKyAgICBGY0NoYXI4KiBmb250
Q29uZmlnRmFtaWx5TmFtZUFmdGVyQ29uZmlndXJhdGlvbjsKKyAgICBGY1BhdHRlcm5HZXRTdHJp
bmcocGF0dGVybi5nZXQoKSwgRkNfRkFNSUxZLCAwLCAmZm9udENvbmZpZ0ZhbWlseU5hbWVBZnRl
ckNvbmZpZ3VyYXRpb24pOworICAgIFN0cmluZyBmYW1pbHlOYW1lQWZ0ZXJDb25maWd1cmF0aW9u
ID0gU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJldF9jYXN0PGNoYXIqPihmb250Q29uZmlnRmFt
aWx5TmFtZUFmdGVyQ29uZmlndXJhdGlvbikpOworCisgICAgRmNSZXN1bHQgZm9udENvbmZpZ1Jl
c3VsdDsKKyAgICBSZWZQdHI8RmNQYXR0ZXJuPiByZXN1bHRQYXR0ZXJuID0gYWRvcHRSZWYoRmNG
b250TWF0Y2goMCwgcGF0dGVybi5nZXQoKSwgJmZvbnRDb25maWdSZXN1bHQpKTsKKyAgICBpZiAo
IXJlc3VsdFBhdHRlcm4pIC8vIE5vIG1hdGNoLgorICAgICAgICByZXR1cm4gMDsKKworICAgIEZj
Q2hhcjgqIGZvbnRDb25maWdGYW1pbHlOYW1lQWZ0ZXJNYXRjaGluZzsKKyAgICBGY1BhdHRlcm5H
ZXRTdHJpbmcocmVzdWx0UGF0dGVybi5nZXQoKSwgRkNfRkFNSUxZLCAwLCAmZm9udENvbmZpZ0Zh
bWlseU5hbWVBZnRlck1hdGNoaW5nKTsKKyAgICBTdHJpbmcgZmFtaWx5TmFtZUFmdGVyTWF0Y2hp
bmcgPSBTdHJpbmc6OmZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZvbnRDb25maWdG
YW1pbHlOYW1lQWZ0ZXJNYXRjaGluZykpOworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1p
bHlOYW1lQWZ0ZXJDb25maWd1cmF0aW9uLCBmYW1pbHlOYW1lQWZ0ZXJNYXRjaGluZykpCisgICAg
ICAgIHJldHVybiBuZXcgRm9udFBsYXRmb3JtRGF0YShyZXN1bHRQYXR0ZXJuLmdldCgpLCBmb250
RGVzY3JpcHRpb24pOworCisgICAgLy8gSWYgRm9udGNvbmZpZyBnYXZlIHVzZSBhIGRpZmZlcmVu
dCBmb250IGZhbWlseSB0aGFuIHRoZSBvbmUgd2UgcmVxdWVzdGVkLCB3ZSBzaG91bGQgaWdub3Jl
IGl0CisgICAgLy8gYW5kIGFsbG93IFdlYkNvcmUgdG8gZ2l2ZSB1cyB0aGUgbmV4dCBmb250IG9u
IHRoZSBDU1MgZmFsbGJhY2sgbGlzdC4gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIGlmCisgICAgLy8g
dGhpcyBmYW1pbHkgbmFtZSBpcyBhIGNvbW1vbmx5IHVzZWQgZ2VuZXJpYyBmYW1pbHkuCisgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWVTdHJpbmcsICJzYW5zIikgfHwgZXF1YWxJ
Z25vcmluZ0Nhc2UoZmFtaWx5TmFtZVN0cmluZywgInNhbnMtc2VyaWYiKQorICAgICAgICB8fCBl
cXVhbElnbm9yaW5nQ2FzZShmYW1pbHlOYW1lU3RyaW5nLCAic2VyaWYiKSB8fCBlcXVhbElnbm9y
aW5nQ2FzZShmYW1pbHlOYW1lU3RyaW5nLCAibW9ub3NwYWNlIikKKyAgICAgICAgfHwgZXF1YWxJ
Z25vcmluZ0Nhc2UoZmFtaWx5TmFtZVN0cmluZywgImZhbnRhc3kiKSB8fCBlcXVhbElnbm9yaW5n
Q2FzZShmYW1pbHlOYW1lU3RyaW5nLCAiY3Vyc2l2ZSIpKQorICAgICAgICByZXR1cm4gbmV3IEZv
bnRQbGF0Zm9ybURhdGEocmVzdWx0UGF0dGVybi5nZXQoKSwgZm9udERlc2NyaXB0aW9uKTsKKwor
ICAgIC8vIEZvbnRjb25maWcgZGlkIG5vdCByZXR1cm4gYSBnb29kIG1hdGNoLgorICAgIHJldHVy
biAwOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhRnJlZVR5cGUu
Y3BwCShyZXZpc2lvbiA3MTc5MSkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDo3MTc5MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZnJlZXR5cGUvRm9udEN1c3RvbVBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFs
cCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmgiCisKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisjaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCisjaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KKyNpbmNsdWRlIDxjYWlyby5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VDdXN0b21Gb250RGF0YSh2
b2lkKiBkYXRhKQoreworICAgIHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGRhdGEpLT5kZXJl
ZigpOworfQorCitGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRh
KEZUX0ZhY2UgZnJlZVR5cGVGYWNlLCBTaGFyZWRCdWZmZXIqIGJ1ZmZlcikKKyAgICA6IG1fZnJl
ZVR5cGVGYWNlKGZyZWVUeXBlRmFjZSkKKyAgICAsIG1fZm9udEZhY2UoY2Fpcm9fZnRfZm9udF9m
YWNlX2NyZWF0ZV9mb3JfZnRfZmFjZShmcmVlVHlwZUZhY2UsIDApKQoreworICAgIC8vIEZJWE1F
IFNob3VsZCB3ZSBiZSBzZXR0aW5nIHNvbWUgaGludGluZyBvcHRpb25zIGhlcmU/CisKKyAgICBi
dWZmZXItPnJlZigpOyAvLyBUaGlzIGlzIGJhbGFuY2VkIGJ5IHRoZSBidWZmZXItPmRlcmVmKCkg
aW4gcmVsZWFzZUN1c3RvbUZvbnREYXRhLgorICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5
X3QgYnVmZmVyS2V5OworICAgIGNhaXJvX2ZvbnRfZmFjZV9zZXRfdXNlcl9kYXRhKG1fZm9udEZh
Y2UsICZidWZmZXJLZXksIGJ1ZmZlciwKKyAgICAgICAgIHN0YXRpY19jYXN0PGNhaXJvX2Rlc3Ry
b3lfZnVuY190PihyZWxlYXNlQ3VzdG9tRm9udERhdGEpKTsKKworICAgIC8vIENhaXJvIGRvZXNu
J3QgZG8gRnJlZVR5cGUgcmVmZXJlbmNlIGNvdW50aW5nLCBzbyB3ZSBuZWVkIHRvIGVuc3VyZSB0
aGF0IHdoZW4KKyAgICAvLyB0aGlzIGNhaXJvX2ZvbnRfZmFjZV90IGlzIGRlc3Ryb3llZCwgaXQg
Y2xlYW5zIHVwIHRoZSBGcmVlVHlwZSBmYWNlIGFzIHdlbGwuCisgICAgc3RhdGljIGNhaXJvX3Vz
ZXJfZGF0YV9rZXlfdCBmcmVlVHlwZUZhY2VLZXk7CisgICAgY2Fpcm9fZm9udF9mYWNlX3NldF91
c2VyX2RhdGEobV9mb250RmFjZSwgJmZyZWVUeXBlRmFjZUtleSwgZnJlZVR5cGVGYWNlLAorICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxjYWlyb19kZXN0cm95X2Z1bmNfdD4oRlRfRG9uZV9GYWNl
KSk7Cit9CisKK0ZvbnRDdXN0b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRh
KCkKK3sKKyAgICAvLyBtX2ZyZWVUeXBlRmFjZSB3aWxsIGJlIGRlc3Ryb3llZCBhbG9uZyB3aXRo
IG1fZm9udEZhY2UuIFNlZSB0aGUgY29uc3RydWN0b3IuCisgICAgY2Fpcm9fZm9udF9mYWNlX2Rl
c3Ryb3kobV9mb250RmFjZSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRm
b3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxp
YywgRm9udE9yaWVudGF0aW9uLCBGb250UmVuZGVyaW5nTW9kZSkKK3sKKyAgICByZXR1cm4gRm9u
dFBsYXRmb3JtRGF0YShtX2ZvbnRGYWNlLCBzaXplLCBib2xkLCBpdGFsaWMpOworfQorCitGb250
Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1
ZmZlciogYnVmZmVyKQoreworICAgIEFTU0VSVF9BUkcoYnVmZmVyLCBidWZmZXIpOworCisgICAg
c3RhdGljIEZUX0xpYnJhcnkgbGlicmFyeSA9IDA7CisgICAgaWYgKCFsaWJyYXJ5ICYmIEZUX0lu
aXRfRnJlZVR5cGUoJmxpYnJhcnkpKSB7CisgICAgICAgIGxpYnJhcnkgPSAwOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBGVF9GYWNlIGZyZWVUeXBlRmFjZTsKKyAgICBpZiAoRlRf
TmV3X01lbW9yeV9GYWNlKGxpYnJhcnksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRlRfQnl0ZSo+
KGJ1ZmZlci0+ZGF0YSgpKSwgYnVmZmVyLT5zaXplKCksIDAsICZmcmVlVHlwZUZhY2UpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbmV3IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEoZnJl
ZVR5cGVGYWNlLCBidWZmZXIpOworfQorCitib29sIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OnN1
cHBvcnRzRm9ybWF0KGNvbnN0IFN0cmluZyYgZm9ybWF0KQoreworICAgIHJldHVybiBlcXVhbEln
bm9yaW5nQ2FzZShmb3JtYXQsICJ0cnVldHlwZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZvcm1h
dCwgIm9wZW50eXBlIik7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YS5oCShyZXZpc2lvbiA3MTc5MSkJ
KGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhRnJl
ZVR5cGUuaDo3MTc5MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9u
dFBsYXRmb3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAw
NyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBJZ2FsaWEgUy5MLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgRm9udFBs
YXRmb3JtRGF0YUZyZWVUeXBlX2gKKyNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlX2gK
KworI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgi
CisjaW5jbHVkZSAiSGFzaEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0ZjRm9udFNldCBGY0Zv
bnRTZXQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7
CitwdWJsaWM6CisgICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1
ZVR5cGUpCisgICAgICAgIDogbV9mYWxsYmFja3MoMCkKKyAgICAgICAgLCBtX3NpemUoMCkKKyAg
ICAgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCisgICAgICAgICwgbV9zeW50aGV0aWNPYmxp
cXVlKGZhbHNlKQorICAgICAgICAsIG1fc2NhbGVkRm9udChoYXNoVGFibGVEZWxldGVkRm9udFZh
bHVlKCkpCisgICAgICAgIHsgfQorCisgICAgRm9udFBsYXRmb3JtRGF0YSgpCisgICAgICAgIDog
bV9mYWxsYmFja3MoMCkKKyAgICAgICAgLCBtX3NpemUoMCkKKyAgICAgICAgLCBtX3N5bnRoZXRp
Y0JvbGQoZmFsc2UpCisgICAgICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNlKQorICAgICAg
ICAsIG1fc2NhbGVkRm9udCgwKQorICAgICAgICB7IH0KKworICAgIEZvbnRQbGF0Zm9ybURhdGEo
RmNQYXR0ZXJuKiwgY29uc3QgRm9udERlc2NyaXB0aW9uJik7CisgICAgRm9udFBsYXRmb3JtRGF0
YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9v
bCBpdGFsaWMpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBi
b29sIGl0YWxpYyk7CisgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRh
Jik7CisgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgZmxvYXQg
c2l6ZSk7CisKKyAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOworCisgICAgYm9vbCBpc0ZpeGVkUGl0
Y2goKTsKKyAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgdm9p
ZCBzZXRTaXplKGZsb2F0IHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQorICAgIGJvb2wgc3ludGhl
dGljQm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9sZDsgfQorICAgIGJvb2wgc3lu
dGhldGljT2JsaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljT2JsaXF1ZTsgfQorCisg
ICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nh
bGVkRm9udDsgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gUHRySGFzaDxjYWlyb19zY2FsZWRfZm9udF90Kj46Omhhc2gobV9zY2FsZWRGb250KTsK
KyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpIGNv
bnN0OworICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1E
YXRhJik7CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9zY2FsZWRGb250ID09IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUo
KTsKKyAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29u
c3Q7CisjZW5kaWYKKworICAgIFJlZlB0cjxGY1BhdHRlcm4+IG1fcGF0dGVybjsKKyAgICBtdXRh
YmxlIEZjRm9udFNldCogbV9mYWxsYmFja3M7IC8vIEluaXRpYWxpemVkIGxhemlseS4KKyAgICBm
bG9hdCBtX3NpemU7CisgICAgYm9vbCBtX3N5bnRoZXRpY0JvbGQ7CisgICAgYm9vbCBtX3N5bnRo
ZXRpY09ibGlxdWU7CisgICAgYm9vbCBtX2ZpeGVkV2lkdGg7CisgICAgY2Fpcm9fc2NhbGVkX2Zv
bnRfdCogbV9zY2FsZWRGb250OworCitwcml2YXRlOgorICAgIHZvaWQgaW5pdGlhbGl6ZVdpdGhG
b250RmFjZShjYWlyb19mb250X2ZhY2VfdCopOworICAgIHN0YXRpYyBjYWlyb19zY2FsZWRfZm9u
dF90KiBoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjYWlyb19zY2FsZWRfZm9udF90Kj4oLTEpOyB9Cit9OworCit9CisKKyNlbmRpZiAvLyBGb250
UGxhdGZvcm1EYXRhRnJlZVR5cGVfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
cmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNw
cAkocmV2aXNpb24gNzE3OTEpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcDo3MTc5MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5l
bW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBbHAgVG9rZXIgPGFs
cEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgSWdhbGlhIFMuTC4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250UGxhdGZv
cm1EYXRhLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIkZvbnRE
ZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+CisjaW5jbHVkZSA8Y2Fpcm8uaD4K
KyNpbmNsdWRlIDxmb250Y29uZmlnL2ZjZnJlZXR5cGUuaD4KKworI2lmICFQTEFURk9STShFRkwp
IHx8IEVOQUJMRShHTElCX1NVUFBPUlQpCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2Fpcm9fc3VicGl4ZWxfb3JkZXJfdCBjb252ZXJ0Rm9u
dENvbmZpZ1N1YnBpeGVsT3JkZXIoaW50IGZvbnRDb25maWdPcmRlcikKK3sKKyAgICBzd2l0Y2gg
KGZvbnRDb25maWdPcmRlcikgeworICAgIGNhc2UgRkNfUkdCQV9SR0I6CisgICAgICAgIHJldHVy
biBDQUlST19TVUJQSVhFTF9PUkRFUl9SR0I7CisgICAgY2FzZSBGQ19SR0JBX0JHUjoKKyAgICAg
ICAgcmV0dXJuIENBSVJPX1NVQlBJWEVMX09SREVSX0JHUjsKKyAgICBjYXNlIEZDX1JHQkFfVlJH
QjoKKyAgICAgICAgcmV0dXJuIENBSVJPX1NVQlBJWEVMX09SREVSX1ZSR0I7CisgICAgY2FzZSBG
Q19SR0JBX1ZCR1I6CisgICAgICAgIHJldHVybiBDQUlST19TVUJQSVhFTF9PUkRFUl9WQkdSOwor
ICAgIGNhc2UgRkNfUkdCQV9OT05FOgorICAgIGNhc2UgRkNfUkdCQV9VTktOT1dOOgorICAgICAg
ICByZXR1cm4gQ0FJUk9fU1VCUElYRUxfT1JERVJfREVGQVVMVDsKKyAgICB9CisgICAgcmV0dXJu
IENBSVJPX1NVQlBJWEVMX09SREVSX0RFRkFVTFQ7Cit9CisKK2NhaXJvX2hpbnRfc3R5bGVfdCBj
b252ZXJ0Rm9udENvbmZpZ0hpbnRTdHlsZShpbnQgZm9udENvbmZpZ1N0eWxlKQoreworICAgIHN3
aXRjaCAoZm9udENvbmZpZ1N0eWxlKSB7CisgICAgY2FzZSBGQ19ISU5UX05PTkU6CisgICAgICAg
IHJldHVybiBDQUlST19ISU5UX1NUWUxFX05PTkU7CisgICAgY2FzZSBGQ19ISU5UX1NMSUdIVDoK
KyAgICAgICAgcmV0dXJuIENBSVJPX0hJTlRfU1RZTEVfU0xJR0hUOworICAgIGNhc2UgRkNfSElO
VF9NRURJVU06CisgICAgICAgIHJldHVybiBDQUlST19ISU5UX1NUWUxFX01FRElVTTsKKyAgICBj
YXNlIEZDX0hJTlRfRlVMTDoKKyAgICAgICAgcmV0dXJuIENBSVJPX0hJTlRfU1RZTEVfRlVMTDsK
KyAgICB9CisgICAgcmV0dXJuIENBSVJPX0hJTlRfU1RZTEVfTk9ORTsKK30KKwordm9pZCBzZXRD
YWlyb0ZvbnRPcHRpb25zRnJvbUZvbnRDb25maWdQYXR0ZXJuKGNhaXJvX2ZvbnRfb3B0aW9uc190
KiBvcHRpb25zLCBGY1BhdHRlcm4qIHBhdHRlcm4pCit7CisgICAgRmNCb29sIGJvb2xlYW5SZXN1
bHQ7CisgICAgaW50IGludGVnZXJSZXN1bHQ7CisKKyAgICBpZiAoRmNQYXR0ZXJuR2V0SW50ZWdl
cihwYXR0ZXJuLCBGQ19SR0JBLCAwLCAmaW50ZWdlclJlc3VsdCkgPT0gRmNSZXN1bHRNYXRjaCkg
eworICAgICAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X3N1YnBpeGVsX29yZGVyKG9wdGlvbnMs
IGNvbnZlcnRGb250Q29uZmlnU3VicGl4ZWxPcmRlcihpbnRlZ2VyUmVzdWx0KSk7CisKKyAgICAg
ICAgLy8gQmFzZWQgb24gdGhlIGxvZ2ljIGluIGNhaXJvLWZ0LWZvbnQuYyBpbiB0aGUgY2Fpcm8g
c291cmNlLCBhIGZvbnQgd2l0aAorICAgICAgICAvLyBhIHN1YnBpeGVsIG9yZGVyIGltcGxpZXMg
dGhhdCBpcyB1c2VzIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KKyAgICAgICAgaWYgKGludGVnZXJS
ZXN1bHQgIT0gRkNfUkdCQV9OT05FKQorICAgICAgICAgICAgY2Fpcm9fZm9udF9vcHRpb25zX3Nl
dF9hbnRpYWxpYXMob3B0aW9ucywgQ0FJUk9fQU5USUFMSUFTX1NVQlBJWEVMKTsKKyAgICB9CisK
KyAgICBpZiAoRmNQYXR0ZXJuR2V0Qm9vbChwYXR0ZXJuLCBGQ19BTlRJQUxJQVMsIDAsICZib29s
ZWFuUmVzdWx0KSA9PSBGY1Jlc3VsdE1hdGNoKSB7CisgICAgICAgIC8vIE9ubHkgb3ZlcnJpZGUg
dGhlIGFudGktYWxpYXNpbmcgc2V0dGluZyBpZiB3YXMgcHJldmlvdXNseSB0dXJuZWQgb2ZmLiBP
dGhlcndpc2UKKyAgICAgICAgLy8gd2UnbGwgb3ZlcnJpZGUgdGhlIHByZWZlcmVuY2Ugd2hpY2gg
ZGVjaWRlcyBiZXR3ZWVuIGdyYXkgYW50aS1hbGlhc2luZyBhbmQKKyAgICAgICAgLy8gc3VicGl4
ZWwgYW50aS1hbGlhc2luZy4KKyAgICAgICAgaWYgKCFib29sZWFuUmVzdWx0KQorICAgICAgICAg
ICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9hbnRpYWxpYXMob3B0aW9ucywgQ0FJUk9fQU5USUFM
SUFTX05PTkUpOworICAgICAgICBlbHNlIGlmIChjYWlyb19mb250X29wdGlvbnNfZ2V0X2FudGlh
bGlhcyhvcHRpb25zKSA9PSBDQUlST19BTlRJQUxJQVNfTk9ORSkKKyAgICAgICAgICAgIGNhaXJv
X2ZvbnRfb3B0aW9uc19zZXRfYW50aWFsaWFzKG9wdGlvbnMsIENBSVJPX0FOVElBTElBU19HUkFZ
KTsKKyAgICB9CisKKyAgICBpZiAoRmNQYXR0ZXJuR2V0SW50ZWdlcihwYXR0ZXJuLCBGQ19ISU5U
X1NUWUxFLCAwLCAmaW50ZWdlclJlc3VsdCkgPT0gRmNSZXN1bHRNYXRjaCkKKyAgICAgICAgY2Fp
cm9fZm9udF9vcHRpb25zX3NldF9oaW50X3N0eWxlKG9wdGlvbnMsIGNvbnZlcnRGb250Q29uZmln
SGludFN0eWxlKGludGVnZXJSZXN1bHQpKTsKKyAgICBpZiAoRmNQYXR0ZXJuR2V0Qm9vbChwYXR0
ZXJuLCBGQ19ISU5USU5HLCAwLCAmYm9vbGVhblJlc3VsdCkgPT0gRmNSZXN1bHRNYXRjaCAmJiAh
Ym9vbGVhblJlc3VsdCkKKyAgICAgICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9oaW50X3N0eWxl
KG9wdGlvbnMsIENBSVJPX0hJTlRfU1RZTEVfTk9ORSk7Cit9CisKK3N0YXRpYyBjb25zdCBjYWly
b19mb250X29wdGlvbnNfdCogZ2V0RGVmYXVsdEZvbnRPcHRpb25zKCkKK3sKKyAgICBzdGF0aWMg
Y29uc3QgY2Fpcm9fZm9udF9vcHRpb25zX3QqIG9wdGlvbnMgPSBjYWlyb19mb250X29wdGlvbnNf
Y3JlYXRlKCk7CisjaWYgUExBVEZPUk0oR1RLKSB8fCBFTkFCTEUoR0xJQl9TVVBQT1JUKQorICAg
IGlmIChHZGtTY3JlZW4qIHNjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSkgeworICAg
ICAgICBjb25zdCBjYWlyb19mb250X29wdGlvbnNfdCogc2NyZWVuT3B0aW9ucyA9IGdka19zY3Jl
ZW5fZ2V0X2ZvbnRfb3B0aW9ucyhzY3JlZW4pOworICAgICAgICBpZiAoc2NyZWVuT3B0aW9ucykK
KyAgICAgICAgICAgIG9wdGlvbnMgPSBzY3JlZW5PcHRpb25zOworICAgIH0KKyNlbmRpZgorICAg
IHJldHVybiBvcHRpb25zOworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRh
KEZjUGF0dGVybiogcGF0dGVybiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pCisgICAgOiBtX3BhdHRlcm4ocGF0dGVybikKKyAgICAsIG1fZmFsbGJhY2tzKDApCisgICAg
LCBtX3NpemUoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkpCisgICAgLCBtX3N5
bnRoZXRpY0JvbGQoZmFsc2UpCisgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2UpCisgICAg
LCBtX2ZpeGVkV2lkdGgoZmFsc2UpCisgICAgLCBtX3NjYWxlZEZvbnQoMCkKK3sKKyAgICBSZWZQ
dHI8Y2Fpcm9fZm9udF9mYWNlX3Q+IGZvbnRGYWNlID0gYWRvcHRSZWYoY2Fpcm9fZnRfZm9udF9m
YWNlX2NyZWF0ZV9mb3JfcGF0dGVybihtX3BhdHRlcm4uZ2V0KCkpKTsKKyAgICBpbml0aWFsaXpl
V2l0aEZvbnRGYWNlKGZvbnRGYWNlLmdldCgpKTsKKworICAgIGludCBzcGFjaW5nOworICAgIGlm
IChGY1BhdHRlcm5HZXRJbnRlZ2VyKHBhdHRlcm4sIEZDX1NQQUNJTkcsIDAsICZzcGFjaW5nKSA9
PSBGY1Jlc3VsdE1hdGNoICYmIHNwYWNpbmcgPT0gRkNfTU9OTykKKyAgICAgICAgbV9maXhlZFdp
ZHRoID0gdHJ1ZTsKKworICAgIGlmIChmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkgPj0gRm9udFdl
aWdodEJvbGQpIHsKKyAgICAgICAgLy8gVGhlIEZDX0VNQk9MREVOIHByb3BlcnR5IGluc3RydWN0
cyB1cyB0byBmYWtlIHRoZSBib2xkbmVzcyBvZiB0aGUgZm9udC4KKyAgICAgICAgRmNCb29sIGZv
bnRDb25maWdFbWJvbGRlbjsKKyAgICAgICAgaWYgKEZjUGF0dGVybkdldEJvb2wocGF0dGVybiwg
RkNfRU1CT0xERU4sIDAsICZmb250Q29uZmlnRW1ib2xkZW4pID09IEZjUmVzdWx0TWF0Y2gpCisg
ICAgICAgICAgICBtX3N5bnRoZXRpY0JvbGQgPSBmb250Q29uZmlnRW1ib2xkZW47CisgICAgfQor
fQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wg
Ym9sZCwgYm9vbCBpdGFsaWMpCisgICAgOiBtX2ZhbGxiYWNrcygwKQorICAgICwgbV9zaXplKHNp
emUpCisgICAgLCBtX3N5bnRoZXRpY0JvbGQoYm9sZCkKKyAgICAsIG1fc3ludGhldGljT2JsaXF1
ZShpdGFsaWMpCisgICAgLCBtX2ZpeGVkV2lkdGgoZmFsc2UpCisgICAgLCBtX3NjYWxlZEZvbnQo
MCkKK3sKKyAgICAvLyBXZSBjYW5ub3QgY3JlYXRlIGEgc2NhbGVkIGZvbnQgaGVyZS4KK30KKwor
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9u
dEZhY2UsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCisgICAgOiBtX2ZhbGxi
YWNrcygwKQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX3N5bnRoZXRpY0JvbGQoYm9sZCkK
KyAgICAsIG1fc3ludGhldGljT2JsaXF1ZShpdGFsaWMpCisgICAgLCBtX3NjYWxlZEZvbnQoMCkK
K3sKKyAgICBpbml0aWFsaXplV2l0aEZvbnRGYWNlKGZvbnRGYWNlKTsKKworICAgIEZUX0ZhY2Ug
Zm9udENvbmZpZ0ZhY2UgPSBjYWlyb19mdF9zY2FsZWRfZm9udF9sb2NrX2ZhY2UobV9zY2FsZWRG
b250KTsKKyAgICBpZiAoZm9udENvbmZpZ0ZhY2UpIHsKKyAgICAgICAgbV9maXhlZFdpZHRoID0g
Zm9udENvbmZpZ0ZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfRklYRURfV0lEVEg7Cisg
ICAgICAgIGNhaXJvX2Z0X3NjYWxlZF9mb250X3VubG9ja19mYWNlKG1fc2NhbGVkRm9udCk7Cisg
ICAgfQorfQorCitGb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0o
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpCit7CisgICAgLy8gQ2hlY2sgZm9yIHNlbGYt
YXNzaWdubWVudC4KKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVybiAqdGhp
czsKKworICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICBtX3N5bnRoZXRpY0JvbGQgPSBv
dGhlci5tX3N5bnRoZXRpY0JvbGQ7CisgICAgbV9zeW50aGV0aWNPYmxpcXVlID0gb3RoZXIubV9z
eW50aGV0aWNPYmxpcXVlOworICAgIG1fZml4ZWRXaWR0aCA9IG90aGVyLm1fZml4ZWRXaWR0aDsK
KyAgICBtX3BhdHRlcm4gPSBvdGhlci5tX3BhdHRlcm47CisKKyAgICBpZiAobV9mYWxsYmFja3Mp
IHsKKyAgICAgICAgRmNGb250U2V0RGVzdHJveShtX2ZhbGxiYWNrcyk7CisgICAgICAgIC8vIFRo
aXMgd2lsbCBiZSByZS1jcmVhdGVkIG9uIGRlbWFuZC4KKyAgICAgICAgbV9mYWxsYmFja3MgPSAw
OworICAgIH0KKworICAgIGlmIChtX3NjYWxlZEZvbnQgJiYgbV9zY2FsZWRGb250ICE9IGhhc2hU
YWJsZURlbGV0ZWRGb250VmFsdWUoKSkKKyAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJv
eShtX3NjYWxlZEZvbnQpOworICAgIG1fc2NhbGVkRm9udCA9IGNhaXJvX3NjYWxlZF9mb250X3Jl
ZmVyZW5jZShvdGhlci5tX3NjYWxlZEZvbnQpOworCisgICAgcmV0dXJuICp0aGlzOworfQorCitG
b250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IG90aGVyKQorICAgIDogbV9mYWxsYmFja3MoMCkKKyAgICAsIG1fc2NhbGVkRm9udCgwKQorewor
ICAgICp0aGlzID0gb3RoZXI7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIsIGZsb2F0IHNpemUpCit7CisgICAgKnRo
aXMgPSBvdGhlcjsKKworICAgIC8vIFdlIG5lZWQgdG8gcmVpbml0aWFsaXplIHRoZSBpbnN0YW5j
ZSwgYmVjYXVzZSB0aGUgZGlmZmVyZW5jZSBpbiBzaXplIAorICAgIC8vIG5lY2Vzc2l0YXRlcyBh
IG5ldyBzY2FsZWQgZm9udCBpbnN0YW5jZS4KKyAgICBtX3NpemUgPSBzaXplOworICAgIGluaXRp
YWxpemVXaXRoRm9udEZhY2UoY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2ZvbnRfZmFjZShtX3NjYWxl
ZEZvbnQpKTsKK30KKworRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQorewor
ICAgIGlmIChtX2ZhbGxiYWNrcykgeworICAgICAgICBGY0ZvbnRTZXREZXN0cm95KG1fZmFsbGJh
Y2tzKTsKKyAgICAgICAgbV9mYWxsYmFja3MgPSAwOworICAgIH0KKworICAgIGlmIChtX3NjYWxl
ZEZvbnQgJiYgbV9zY2FsZWRGb250ICE9IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSkKKyAg
ICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJveShtX3NjYWxlZEZvbnQpOworfQorCitib29s
IEZvbnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpCit7CisgICAgcmV0dXJuIG1fZml4ZWRX
aWR0aDsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAoreworICAgIGlmIChtX3BhdHRlcm4gPT0gb3RoZXIu
bV9wYXR0ZXJuKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIW1fcGF0dGVybiB8fCAh
b3RoZXIubV9wYXR0ZXJuKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIEZjUGF0
dGVybkVxdWFsKG1fcGF0dGVybi5nZXQoKSwgb3RoZXIubV9wYXR0ZXJuLmdldCgpKTsKK30KKwor
I2lmbmRlZiBOREVCVUcKK1N0cmluZyBGb250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlvbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorI2VuZGlmCisKK3ZvaWQgRm9udFBsYXRm
b3JtRGF0YTo6aW5pdGlhbGl6ZVdpdGhGb250RmFjZShjYWlyb19mb250X2ZhY2VfdCogZm9udEZh
Y2UpCit7CisgICAgY2Fpcm9fZm9udF9vcHRpb25zX3QqIG9wdGlvbnMgPSBjYWlyb19mb250X29w
dGlvbnNfY29weShnZXREZWZhdWx0Rm9udE9wdGlvbnMoKSk7CisKKyAgICBjYWlyb19tYXRyaXhf
dCBjdG07CisgICAgY2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHkoJmN0bSk7CisKKyAgICBjYWly
b19tYXRyaXhfdCBmb250TWF0cml4OworICAgIGlmICghbV9wYXR0ZXJuKQorICAgICAgICBjYWly
b19tYXRyaXhfaW5pdF9zY2FsZSgmZm9udE1hdHJpeCwgbV9zaXplLCBtX3NpemUpOworICAgIGVs
c2UgeworICAgICAgICBzZXRDYWlyb0ZvbnRPcHRpb25zRnJvbUZvbnRDb25maWdQYXR0ZXJuKG9w
dGlvbnMsIG1fcGF0dGVybi5nZXQoKSk7CisKKyAgICAgICAgLy8gRm9udENvbmZpZyBtYXkgcmV0
dXJuIGEgbGlzdCBvZiB0cmFuc2Zvcm1hdGlvbiBtYXRyaWNlcyB3aXRoIHRoZSBwYXR0ZXJuLCBm
b3IgaW5zdGFuY2UsCisgICAgICAgIC8vIGZvciBmb250cyB0aGF0IGFyZSBvYmxpcXVlLiBXZSB1
c2UgdGhhdCB0byBpbml0aWFsaXplIHRoZSBjYWlybyBmb250IG1hdHJpeC4KKyAgICAgICAgRmNN
YXRyaXggZm9udENvbmZpZ01hdHJpeCwgKnRlbXBGb250Q29uZmlnTWF0cml4OworICAgICAgICBG
Y01hdHJpeEluaXQoJmZvbnRDb25maWdNYXRyaXgpOworCisgICAgICAgIC8vIFRoZXNlIG1hdHJp
Y2VzIG1heSBiZSBzdGFja2VkIGluIHRoZSBwYXR0ZXJuLCBzbyBpdCdzIG91ciBqb2IgdG8gZ2V0
IHRoZW0gYWxsIGFuZCBtdWx0aXBseSB0aGVtLgorICAgICAgICBmb3IgKGludCBpID0gMDsgRmNQ
YXR0ZXJuR2V0TWF0cml4KG1fcGF0dGVybi5nZXQoKSwgRkNfTUFUUklYLCBpLCAmdGVtcEZvbnRD
b25maWdNYXRyaXgpID09IEZjUmVzdWx0TWF0Y2g7IGkrKykKKyAgICAgICAgICAgIEZjTWF0cml4
TXVsdGlwbHkoJmZvbnRDb25maWdNYXRyaXgsICZmb250Q29uZmlnTWF0cml4LCB0ZW1wRm9udENv
bmZpZ01hdHJpeCk7CisgICAgICAgIGNhaXJvX21hdHJpeF9pbml0KCZmb250TWF0cml4LCBmb250
Q29uZmlnTWF0cml4Lnh4LCAtZm9udENvbmZpZ01hdHJpeC55eCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgLWZvbnRDb25maWdNYXRyaXgueHksIGZvbnRDb25maWdNYXRyaXgueXksIDAsIDAp
OworCisgICAgICAgIC8vIFRoZSBtYXRyaXggZnJvbSBGb250Q29uZmlnIGRvZXMgbm90IGluY2x1
ZGUgdGhlIHNjYWxlLgorICAgICAgICBjYWlyb19tYXRyaXhfc2NhbGUoJmZvbnRNYXRyaXgsIG1f
c2l6ZSwgbV9zaXplKTsKKyAgICB9CisKKyAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRf
Zm9udF9jcmVhdGUoZm9udEZhY2UsICZmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsKKyAgICBj
YWlyb19mb250X29wdGlvbnNfZGVzdHJveShvcHRpb25zKTsKK30KKworCit9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0dseXBoUGFnZVRyZWVOb2RlRnJlZVR5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvR2x5
cGhQYWdlVHJlZU5vZGVGcmVlVHlwZS5jcHAJKHJldmlzaW9uIDcxNzkxKQkoZnJvbSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm8uY3BwOjcxNzkx
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9HbHlwaFBhZ2VUcmVlTm9k
ZUZyZWVUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHAudG9rZXJAY29sbGFib3JhLmNvLnVr
PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgorCisj
aW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlIDxjYWlyby1mdC5oPgorI2luY2x1
ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8Zm9udGNvbmZpZy9mY2ZyZWV0eXBlLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQoreworICAgIC8vIFRoZSBidWZmZXJMZW5ndGgg
d2lsbCBiZSBncmVhdGVyIHRoYW4gdGhlIGdseXBoIHBhZ2Ugc2l6ZSBpZiB0aGUgYnVmZmVyIGhh
cyBVbmljb2RlIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycy4KKyAgICAvLyBXZSB3b24ndCBzdXBw
b3J0IHRoaXMgZm9yIG5vdy4KKyAgICBpZiAoYnVmZmVyTGVuZ3RoID4gR2x5cGhQYWdlOjpzaXpl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBGVF9GYWNlIGZhY2UgPSBjYWlyb19mdF9z
Y2FsZWRfZm9udF9sb2NrX2ZhY2UoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQo
KSk7CisgICAgaWYgKCFmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGhh
dmVHbHlwaHMgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgR2x5cGggZ2x5cGggPSBGY0ZyZWVUeXBlQ2hhckluZGV4KGZhY2UsIGJ1
ZmZlcltpXSk7CisgICAgICAgIGlmICghZ2x5cGgpCisgICAgICAgICAgICBzZXRHbHlwaERhdGFG
b3JJbmRleChvZmZzZXQgKyBpLCAwLCAwKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBz
ZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaCwgZm9udERhdGEpOworICAgICAg
ICAgICAgaGF2ZUdseXBocyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjYWlyb19m
dF9zY2FsZWRfZm9udF91bmxvY2tfZmFjZShmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuc2NhbGVk
Rm9udCgpKTsKKworICAgIHJldHVybiBoYXZlR2x5cGhzOworfQorCit9CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9u
dERhdGFGcmVlVHlwZS5jcHAJKHJldmlzaW9uIDcxNzkxKQkoZnJvbSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1NpbXBsZUZvbnREYXRhQ2Fpcm8uY3BwOjcxNzkxKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKwor
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250
Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJHbHlwaEJ1
ZmZlci5oIgorI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNs
dWRlIDxmb250Y29uZmlnL2ZjZnJlZXR5cGUuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
SW5pdCgpCit7CisgICAgY2Fpcm9fZm9udF9leHRlbnRzX3QgZm9udF9leHRlbnRzOworICAgIGNh
aXJvX3RleHRfZXh0ZW50c190IHRleHRfZXh0ZW50czsKKyAgICBjYWlyb19zY2FsZWRfZm9udF9l
eHRlbnRzKG1fcGxhdGZvcm1EYXRhLnNjYWxlZEZvbnQoKSwgJmZvbnRfZXh0ZW50cyk7CisgICAg
bV9hc2NlbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoZm9udF9leHRlbnRzLmFzY2VudCkp
OworICAgIG1fZGVzY2VudCA9IHN0YXRpY19jYXN0PGludD4obHJvdW5kZihmb250X2V4dGVudHMu
ZGVzY2VudCkpOworICAgIG1fbGluZVNwYWNpbmcgPSBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYo
Zm9udF9leHRlbnRzLmhlaWdodCkpOworICAgIC8vIFRoZXJlIHNlZW1zIHRvIGJlIHNvbWUgcm91
bmRpbmcgZXJyb3IgaW4gY2Fpcm8gKG9yIGluIGhvdyB3ZQorICAgIC8vIHVzZSBjYWlybykgd2l0
aCBzb21lIGZvbnRzLCBsaWtlIERlamFWdSBTYW5zIE1vbm8sIHdoaWNoIG1ha2VzCisgICAgLy8g
Y2Fpcm8gcmVwb3J0IGEgaGVpZ2h0IHNtYWxsZXIgdGhhbiBhc2NlbnQgKyBkZXNjZW50LCB3aGlj
aCBpcworICAgIC8vIHdyb25nIGFuZCBjb25mdXNlcyBXZWJDb3JlJ3MgbGF5b3V0IHN5c3RlbS4g
V29ya2Fyb3VuZCB0aGlzCisgICAgLy8gd2hpbGUgd2UgZmlndXJlIG91dCB3aGF0J3MgZ29pbmcg
b24uCisgICAgaWYgKG1fbGluZVNwYWNpbmcgPCBtX2FzY2VudCArIG1fZGVzY2VudCkKKyAgICAg
ICAgbV9saW5lU3BhY2luZyA9IG1fYXNjZW50ICsgbV9kZXNjZW50OworICAgIGNhaXJvX3NjYWxl
ZF9mb250X3RleHRfZXh0ZW50cyhtX3BsYXRmb3JtRGF0YS5zY2FsZWRGb250KCksICJ4IiwgJnRl
eHRfZXh0ZW50cyk7CisgICAgbV94SGVpZ2h0ID0gdGV4dF9leHRlbnRzLmhlaWdodDsKKyAgICBj
YWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMobV9wbGF0Zm9ybURhdGEuc2NhbGVkRm9udCgp
LCAiICIsICZ0ZXh0X2V4dGVudHMpOworICAgIG1fc3BhY2VXaWR0aCA9IHN0YXRpY19jYXN0PGZs
b2F0Pih0ZXh0X2V4dGVudHMueF9hZHZhbmNlKTsKKyAgICBtX2xpbmVHYXAgPSBtX2xpbmVTcGFj
aW5nIC0gbV9hc2NlbnQgLSBtX2Rlc2NlbnQ7CisgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0g
bV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpID8gMS4wZiA6IDAuZjsKK30KKwordm9pZCBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKK3sKKyAgICBtX2F2Z0NoYXJX
aWR0aCA9IDAuZjsKKyAgICBtX21heENoYXJXaWR0aCA9IDAuZjsKKyAgICBpbml0Q2hhcldpZHRo
cygpOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQoreworICAg
IGRlbGV0ZSBtX3NtYWxsQ2Fwc0ZvbnREYXRhOworICAgIG1fc21hbGxDYXBzRm9udERhdGEgPSAw
OworfQorCitTaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAoreworICAgIC8v
IEZJWE1FOiBJIHRoaW5rIHdlIHdhbnQgdG8gYXNrIEZvbnRDb25maWcgZm9yIHRoZSByaWdodCBm
b250IGFnYWluLgorICAgIGlmICghbV9zbWFsbENhcHNGb250RGF0YSkKKyAgICAgICAgbV9zbWFs
bENhcHNGb250RGF0YSA9IG5ldyBTaW1wbGVGb250RGF0YSgKKyAgICAgICAgICAgIEZvbnRQbGF0
Zm9ybURhdGEoY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2ZvbnRfZmFjZShtX3BsYXRmb3JtRGF0YS5z
Y2FsZWRGb250KCkpLAorICAgICAgICAgICAgMC43MGYgKiBmb250RGVzY3JpcHRpb24uY29tcHV0
ZWRTaXplKCksIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSwgbV9wbGF0Zm9ybURhdGEu
c3ludGhldGljT2JsaXF1ZSgpKSk7CisKKyAgICByZXR1cm4gbV9zbWFsbENhcHNGb250RGF0YTsK
K30KKworYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAoreworICAgIEZUX0ZhY2UgZmFjZSA9IGNh
aXJvX2Z0X3NjYWxlZF9mb250X2xvY2tfZmFjZShtX3BsYXRmb3JtRGF0YS5zY2FsZWRGb250KCkp
OworCisgICAgaWYgKCFmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChGY0ZyZWVUeXBlQ2hhcklu
ZGV4KGZhY2UsIGNoYXJhY3RlcnNbaV0pID09IDApIHsKKyAgICAgICAgICAgIGNhaXJvX2Z0X3Nj
YWxlZF9mb250X3VubG9ja19mYWNlKG1fcGxhdGZvcm1EYXRhLnNjYWxlZEZvbnQoKSk7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjYWlyb19mdF9z
Y2FsZWRfZm9udF91bmxvY2tfZmFjZShtX3BsYXRmb3JtRGF0YS5zY2FsZWRGb250KCkpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNo
KCkKK3sKKyAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gbV9wbGF0Zm9ybURhdGEuaXNGaXhlZFBp
dGNoKCk7Cit9CisKK0Zsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JH
bHlwaChHbHlwaCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKK2Zsb2F0
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0
Cit7CisgICAgQVNTRVJUKG1fcGxhdGZvcm1EYXRhLnNjYWxlZEZvbnQoKSk7CisKKyAgICBjYWly
b19nbHlwaF90IGNnbHlwaCA9IHsgZ2x5cGgsIDAsIDAgfTsKKyAgICBjYWlyb190ZXh0X2V4dGVu
dHNfdCBleHRlbnRzOworICAgIGNhaXJvX3NjYWxlZF9mb250X2dseXBoX2V4dGVudHMobV9wbGF0
Zm9ybURhdGEuc2NhbGVkRm9udCgpLCAmY2dseXBoLCAxLCAmZXh0ZW50cyk7CisKKyAgICBmbG9h
dCB3ID0gKGZsb2F0KW1fc3BhY2VXaWR0aDsKKyAgICBpZiAoY2Fpcm9fc2NhbGVkX2ZvbnRfc3Rh
dHVzKG1fcGxhdGZvcm1EYXRhLnNjYWxlZEZvbnQoKSkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1Mg
JiYgZXh0ZW50cy54X2FkdmFuY2UpCisgICAgICAgIHcgPSAoZmxvYXQpZXh0ZW50cy54X2FkdmFu
Y2U7CisKKyAgICByZXR1cm4gdzsgICAgCit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0ZvbnRDYWNoZVBhbmdvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVQYW5nby5jcHAJKHJldmlzaW9uIDcxNzkxKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udENhY2hlUGFuZ28uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxw
IFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJGb250Q2FjaGUuaCIKLQotI2luY2x1ZGUgIkNTdHJpbmcuaCIKLSNpbmNsdWRlICJGb250Lmgi
Ci0jaW5jbHVkZSAiT3duUHRyQ2Fpcm8uaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgot
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9p
ZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCi17Ci0gICAgaWYgKCFGb250UGxhdGZvcm1EYXRh
Ojppbml0KCkpCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1jb25zdCBTaW1w
bGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCi17Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVNpbXBs
ZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCi17Ci0gICAgLy8gRklYTUU6IFdvdWxkIGJl
IGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUu
Ci0gICAgLy8gRm9yIG5vdyB3ZSdsbCBwaWNrIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291
bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgotICAgIHN0YXRpYyBBdG9taWNTdHJp
bmcgdGltZXNTdHIoIlRpbWVzIE5ldyBSb21hbiIpOwotICAgIHJldHVybiBnZXRDYWNoZWRGb250
RGF0YShmb250RGVzY3JpcHRpb24sIHRpbWVzU3RyKTsKLX0KLQotdm9pZCBGb250Q2FjaGU6Omdl
dFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwgVmVjdG9yPHVu
c2lnbmVkPiYgdHJhaXRzTWFza3MpCi17Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNo
ZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCi17Ci0gICAgcmV0dXJuIG5ldyBG
b250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5KTsKLX0KLQotfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdv
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwCShyZXZpc2lvbiA3MTc5MSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAg
VG9rZXIgPGFscEBhdG9rZXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCIKLQotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgot
I2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1G
b250Q3VzdG9tUGxhdGZvcm1EYXRhOjp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpCi17Ci19Ci0K
LUZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0
YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgRm9udE9yaWVudGF0aW9uLCBGb250
UmVuZGVyaW5nTW9kZSkKLXsKLSAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShtX2ZvbnRGYWNl
LCBzaXplLCBib2xkLCBpdGFsaWMpOwotfQotCi1zdGF0aWMgdm9pZCByZWxlYXNlRGF0YSh2b2lk
KiBkYXRhKQotewotICAgIHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGRhdGEpLT5kZXJlZigp
OwotfQotCi1Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1E
YXRhKFNoYXJlZEJ1ZmZlciogYnVmZmVyKQotewotICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHN1cHBv
cnQgaW4gcGFuZ28gdG8gcmVhZCBmb250cyBmcm9tIG1lbW9yeSB0byBpbXBsZW1lbnQgdGhpcy55
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6c3VwcG9y
dHNGb3JtYXQoY29uc3QgU3RyaW5nJiAvKiBmb3JtYXQgKi8pCi17Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZv
cm1EYXRhUGFuZ28uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAJKHJldmlzaW9uIDcxNzkxKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YVBhbmdvLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwyNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20KLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBbHAgVG9rZXIg
PGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIg
VVNBLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4KLSAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0
YS5oIgotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJGb250RGVzY3Jp
cHRpb24uaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8u
aD4KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLQotI2luY2x1ZGUgPHBhbmdvL3BhbmdvLmg+Ci0jaW5j
bHVkZSA8cGFuZ28vcGFuZ29jYWlyby5oPgotCi0vLyBVc2UgY2Fpcm8tZnQgaSBhIHJlY2VudCBl
bm91Z2ggUGFuZ28gdmVyc2lvbiBpc24ndCBhdmFpbGFibGUKLSNpZiAhUEFOR09fVkVSU0lPTl9D
SEVDSygxLDE4LDApCi0jaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KLSNpbmNsdWRlIDxwYW5nby9wYW5n
b2ZjLWZvbnRtYXAuaD4KLSNlbmRpZgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1QYW5nb0ZvbnRNYXAqIEZvbnRQbGF0Zm9ybURhdGE6Om1fZm9udE1hcCA9
IDA7Ci1HSGFzaFRhYmxlKiBGb250UGxhdGZvcm1EYXRhOjptX2hhc2hUYWJsZSA9IDA7Ci0KLUZv
bnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKLSAgICA6IG1f
Y29udGV4dCgwKQotICAgICwgbV9mb250KDApCi0gICAgLCBtX3NpemUoZm9udERlc2NyaXB0aW9u
LmNvbXB1dGVkU2l6ZSgpKQotICAgICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQotICAgICwgbV9z
eW50aGV0aWNPYmxpcXVlKGZhbHNlKQotICAgICwgbV9zY2FsZWRGb250KDApCi17Ci0gICAgRm9u
dFBsYXRmb3JtRGF0YTo6aW5pdCgpOwotCi0gICAgQ1N0cmluZyBzdG9yZWRfZmFtaWx5ID0gZmFt
aWx5TmFtZS5zdHJpbmcoKS51dGY4KCk7Ci0gICAgY2hhciBjb25zdCogZmFtaWxpZXNbXSA9IHsK
LSAgICAgIHN0b3JlZF9mYW1pbHkuZGF0YSgpLAotICAgICAgTlVMTAotICAgIH07Ci0KLSAgICBz
d2l0Y2ggKGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkpIHsKLSAgICBjYXNlIEZvbnRE
ZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHk6Ci0gICAgICAgIGZhbWlsaWVzWzFdID0gInNlcmlmIjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWls
eToKLSAgICAgICAgZmFtaWxpZXNbMV0gPSAic2FucyI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHk6Ci0gICAgICAgIGZhbWlsaWVzWzFd
ID0gIm1vbm9zcGFjZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9u
OjpOb0ZhbWlseToKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHk6Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgZmFtaWxpZXNbMV0gPSAic2FucyI7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiBkZXNjcmlwdGlvbiA9IHBhbmdv
X2ZvbnRfZGVzY3JpcHRpb25fbmV3KCk7Ci0gICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRf
YWJzb2x1dGVfc2l6ZShkZXNjcmlwdGlvbiwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgp
ICogUEFOR09fU0NBTEUpOwotCi0gICAgLy8gRklYTUU6IE1hcCBhbGwgRm9udFdlaWdodCB2YWx1
ZXMgdG8gUGFuZ28gZm9udCB3ZWlnaHRzLgotICAgIGlmIChmb250RGVzY3JpcHRpb24ud2VpZ2h0
KCkgPj0gRm9udFdlaWdodDYwMCkKLSAgICAgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRf
d2VpZ2h0KGRlc2NyaXB0aW9uLCBQQU5HT19XRUlHSFRfQk9MRCk7Ci0gICAgaWYgKGZvbnREZXNj
cmlwdGlvbi5pdGFsaWMoKSkKLSAgICAgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfc3R5
bGUoZGVzY3JpcHRpb24sIFBBTkdPX1NUWUxFX0lUQUxJQyk7Ci0KLSNpZiBQQU5HT19WRVJTSU9O
X0NIRUNLKDEsMjEsNSkgICAvLyBkZXByZWNhdGVkIGluIDEuMjEKLSAgICBtX2NvbnRleHQgPSBw
YW5nb19mb250X21hcF9jcmVhdGVfY29udGV4dChtX2ZvbnRNYXApOwotI2Vsc2UKLSAgICBtX2Nv
bnRleHQgPSBwYW5nb19jYWlyb19mb250X21hcF9jcmVhdGVfY29udGV4dChQQU5HT19DQUlST19G
T05UX01BUChtX2ZvbnRNYXApKTsKLSNlbmRpZgotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyAhbV9mb250ICYmIGkgPCBHX05fRUxFTUVOVFMoZmFtaWxpZXMpOyBpKyspIHsKLSAgICAgICAg
cGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfZmFtaWx5KGRlc2NyaXB0aW9uLCBmYW1pbGllc1tp
XSk7Ci0gICAgICAgIHBhbmdvX2NvbnRleHRfc2V0X2ZvbnRfZGVzY3JpcHRpb24obV9jb250ZXh0
LCBkZXNjcmlwdGlvbik7Ci0gICAgICAgIG1fZm9udCA9IHBhbmdvX2ZvbnRfbWFwX2xvYWRfZm9u
dChtX2ZvbnRNYXAsIG1fY29udGV4dCwgZGVzY3JpcHRpb24pOwotICAgIH0KLQotI2lmIFBBTkdP
X1ZFUlNJT05fQ0hFQ0soMSwxOCwwKQotICAgIGlmIChtX2ZvbnQpCi0gICAgICAgIG1fc2NhbGVk
Rm9udCA9IGNhaXJvX3NjYWxlZF9mb250X3JlZmVyZW5jZShwYW5nb19jYWlyb19mb250X2dldF9z
Y2FsZWRfZm9udChQQU5HT19DQUlST19GT05UKG1fZm9udCkpKTsKLSNlbHNlCi0gICAgLy8gVGhp
cyBjb21wYXRpYmlsaXR5IGNvZGUgZm9yIG9sZGVyIHZlcnNpb25zIG9mIFBhbmdvIGlzIG5vdCB3
ZWxsLXRlc3RlZC4KLSAgICBpZiAobV9mb250KSB7Ci0gICAgICAgIFBhbmdvRmNGb250KiBmY2Zv
bnQgPSBQQU5HT19GQ19GT05UKG1fZm9udCk7Ci0gICAgICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBm
YWNlID0gY2Fpcm9fZnRfZm9udF9mYWNlX2NyZWF0ZV9mb3JfcGF0dGVybihmY2ZvbnQtPmZvbnRf
cGF0dGVybik7Ci0gICAgICAgIGRvdWJsZSBzaXplOwotICAgICAgICBpZiAoRmNQYXR0ZXJuR2V0
RG91YmxlKGZjZm9udC0+Zm9udF9wYXR0ZXJuLCBGQ19QSVhFTF9TSVpFLCAwLCAmc2l6ZSkgIT0g
RmNSZXN1bHRNYXRjaCkKLSAgICAgICAgICAgIHNpemUgPSAxMi4wOwotICAgICAgICBjYWlyb19t
YXRyaXhfdCBmb250TWF0cml4OwotICAgICAgICBjYWlyb19tYXRyaXhfaW5pdF9zY2FsZSgmZm9u
dE1hdHJpeCwgc2l6ZSwgc2l6ZSk7Ci0gICAgICAgIGNhaXJvX2ZvbnRfb3B0aW9uc190KiBmb250
T3B0aW9uczsKLSAgICAgICAgaWYgKHBhbmdvX2NhaXJvX2NvbnRleHRfZ2V0X2ZvbnRfb3B0aW9u
cyhtX2NvbnRleHQpKQotICAgICAgICAgICAgZm9udE9wdGlvbnMgPSBjYWlyb19mb250X29wdGlv
bnNfY29weShwYW5nb19jYWlyb19jb250ZXh0X2dldF9mb250X29wdGlvbnMobV9jb250ZXh0KSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZvbnRPcHRpb25zID0gY2Fpcm9fZm9udF9vcHRp
b25zX2NyZWF0ZSgpOwotICAgICAgICBjYWlyb19tYXRyaXhfdCBjdG07Ci0gICAgICAgIGNhaXJv
X21hdHJpeF9pbml0X2lkZW50aXR5KCZjdG0pOwotICAgICAgICBtX3NjYWxlZEZvbnQgPSBjYWly
b19zY2FsZWRfZm9udF9jcmVhdGUoZmFjZSwgJmZvbnRNYXRyaXgsICZjdG0sIGZvbnRPcHRpb25z
KTsKLSAgICAgICAgY2Fpcm9fZm9udF9vcHRpb25zX2Rlc3Ryb3koZm9udE9wdGlvbnMpOwotICAg
ICAgICBjYWlyb19mb250X2ZhY2VfZGVzdHJveShmYWNlKTsKLSAgICB9Ci0jZW5kaWYKLSAgICBw
YW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUoZGVzY3JpcHRpb24pOwotfQotCi1Gb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFs
aWMpCi0gICAgOiBtX2NvbnRleHQoMCkKLSAgICAsIG1fZm9udCgwKQotICAgICwgbV9zaXplKHNp
emUpCi0gICAgLCBtX3N5bnRoZXRpY0JvbGQoYm9sZCkKLSAgICAsIG1fc3ludGhldGljT2JsaXF1
ZShpdGFsaWMpCi0gICAgLCBtX3NjYWxlZEZvbnQoMCkKLXsKLX0KLQotRm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UsIGZsb2F0IHNp
emUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCi0gICAgOiBtX2NvbnRleHQoMCkKLSAgICAsIG1f
Zm9udCgwKQotICAgICwgbV9zaXplKHNpemUpCi0gICAgLCBtX3N5bnRoZXRpY0JvbGQoYm9sZCkK
LSAgICAsIG1fc3ludGhldGljT2JsaXF1ZShpdGFsaWMpCi0gICAgLCBtX3NjYWxlZEZvbnQoMCkK
LXsKLSAgICBjYWlyb19tYXRyaXhfdCBmb250TWF0cml4OwotICAgIGNhaXJvX21hdHJpeF9pbml0
X3NjYWxlKCZmb250TWF0cml4LCBzaXplLCBzaXplKTsKLSAgICBjYWlyb19tYXRyaXhfdCBjdG07
Ci0gICAgY2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHkoJmN0bSk7Ci0gICAgY2Fpcm9fZm9udF9v
cHRpb25zX3QqIG9wdGlvbnMgPSBjYWlyb19mb250X29wdGlvbnNfY3JlYXRlKCk7Ci0KLSAgICAv
LyBXZSBmb3JjZSBhbnRpYWxpYXNpbmcgYW5kIGRpc2FibGUgaGludGluZyB0byBwcm92aWRlIGNv
bnNpc3RlbnQKLSAgICAvLyB0eXBvZ3JhcGhpYyBxdWFsaXRpZXMgZm9yIGN1c3RvbSBmb250cyBv
biBhbGwgcGxhdGZvcm1zLgotICAgIGNhaXJvX2ZvbnRfb3B0aW9uc19zZXRfaGludF9zdHlsZShv
cHRpb25zLCBDQUlST19ISU5UX1NUWUxFX05PTkUpOwotICAgIGNhaXJvX2ZvbnRfb3B0aW9uc19z
ZXRfYW50aWFsaWFzKG9wdGlvbnMsIENBSVJPX0FOVElBTElBU19HUkFZKTsKLQotICAgIG1fc2Nh
bGVkRm9udCA9IGNhaXJvX3NjYWxlZF9mb250X2NyZWF0ZShmb250RmFjZSwgJmZvbnRNYXRyaXgs
ICZjdG0sIG9wdGlvbnMpOwotICAgIGNhaXJvX2ZvbnRfb3B0aW9uc19kZXN0cm95KG9wdGlvbnMp
OwotfQotCi1ib29sIEZvbnRQbGF0Zm9ybURhdGE6OmluaXQoKQotewotICAgIHN0YXRpYyBib29s
IGluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgaWYgKGluaXRpYWxpemVkKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICBpZiAoIW1fZm9udE1hcCkK
LSAgICAgICAgbV9mb250TWFwID0gcGFuZ29fY2Fpcm9fZm9udF9tYXBfZ2V0X2RlZmF1bHQoKTsK
LSAgICBpZiAoIW1faGFzaFRhYmxlKSB7Ci0gICAgICAgIFBhbmdvRm9udEZhbWlseSoqIGZhbWls
aWVzID0gMDsKLSAgICAgICAgaW50IG5fZmFtaWxpZXMgPSAwOwotCi0gICAgICAgIG1faGFzaFRh
YmxlID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLCBnX2Zy
ZWUsIGdfb2JqZWN0X3VucmVmKTsKLQotICAgICAgICBwYW5nb19mb250X21hcF9saXN0X2ZhbWls
aWVzKG1fZm9udE1hcCwgJmZhbWlsaWVzLCAmbl9mYW1pbGllcyk7Ci0KLSAgICAgICAgZm9yIChp
bnQgZmFtaWx5ID0gMDsgZmFtaWx5IDwgbl9mYW1pbGllczsgZmFtaWx5KyspCi0gICAgICAgICAg
ICAgICAgZ19oYXNoX3RhYmxlX2luc2VydChtX2hhc2hUYWJsZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdfc3RyZHVwKHBhbmdvX2ZvbnRfZmFtaWx5X2dldF9uYW1lKGZh
bWlsaWVzW2ZhbWlseV0pKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdf
b2JqZWN0X3JlZihmYW1pbGllc1tmYW1pbHldKSk7Ci0KLSAgICAgICAgZ19mcmVlKGZhbWlsaWVz
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6fkZv
bnRQbGF0Zm9ybURhdGEoKQotewotICAgIGlmIChtX2ZvbnQgJiYgbV9mb250ICE9IHJlaW50ZXJw
cmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpKSB7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKG1fZm9u
dCk7Ci0gICAgICAgIG1fZm9udCA9IDA7Ci0gICAgfQotCi0gICAgaWYgKG1fY29udGV4dCkgewot
ICAgICAgICBnX29iamVjdF91bnJlZihtX2NvbnRleHQpOwotICAgICAgICBtX2NvbnRleHQgPSAw
OwotICAgIH0KLQotICAgIGlmIChtX3NjYWxlZEZvbnQpIHsKLSAgICAgICAgY2Fpcm9fc2NhbGVk
X2ZvbnRfZGVzdHJveShtX3NjYWxlZEZvbnQpOwotICAgICAgICBtX3NjYWxlZEZvbnQgPSAwOwot
ICAgIH0KLX0KLQotYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKQotewotICAg
IFBhbmdvRm9udERlc2NyaXB0aW9uKiBkZXNjcmlwdGlvbiA9IHBhbmdvX2ZvbnRfZGVzY3JpYmVf
d2l0aF9hYnNvbHV0ZV9zaXplKG1fZm9udCk7Ci0gICAgUGFuZ29Gb250RmFtaWx5KiBmYW1pbHkg
PSByZWludGVycHJldF9jYXN0PFBhbmdvRm9udEZhbWlseSo+KGdfaGFzaF90YWJsZV9sb29rdXAo
bV9oYXNoVGFibGUsIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZ2V0X2ZhbWlseShkZXNjcmlwdGlv
bikpKTsKLSAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUoZGVzY3JpcHRpb24pOwotICAg
IHJldHVybiBwYW5nb19mb250X2ZhbWlseV9pc19tb25vc3BhY2UoZmFtaWx5KTsKLX0KLQotRm9u
dFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIG90aGVyKQotewotICAgIC8vIENoZWNrIGZvciBzZWxmLWFzc2lnbm1lbnQuCi0g
ICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICBtX3Np
emUgPSBvdGhlci5tX3NpemU7Ci0gICAgbV9zeW50aGV0aWNCb2xkID0gb3RoZXIubV9zeW50aGV0
aWNCb2xkOwotICAgIG1fc3ludGhldGljT2JsaXF1ZSA9IG90aGVyLm1fc3ludGhldGljT2JsaXF1
ZTsKLQotICAgIGlmIChvdGhlci5tX3NjYWxlZEZvbnQpCi0gICAgICAgIGNhaXJvX3NjYWxlZF9m
b250X3JlZmVyZW5jZShvdGhlci5tX3NjYWxlZEZvbnQpOwotICAgIGlmIChtX3NjYWxlZEZvbnQp
Ci0gICAgICAgIGNhaXJvX3NjYWxlZF9mb250X2Rlc3Ryb3kobV9zY2FsZWRGb250KTsKLSAgICBt
X3NjYWxlZEZvbnQgPSBvdGhlci5tX3NjYWxlZEZvbnQ7Ci0KLSAgICBpZiAob3RoZXIubV9mb250
KQotICAgICAgICBnX29iamVjdF9yZWYob3RoZXIubV9mb250KTsKLSAgICBpZiAobV9mb250KQot
ICAgICAgICBnX29iamVjdF91bnJlZihtX2ZvbnQpOwotICAgIG1fZm9udCA9IG90aGVyLm1fZm9u
dDsKLQotICAgIGlmIChvdGhlci5tX2NvbnRleHQpCi0gICAgICAgIGdfb2JqZWN0X3JlZihvdGhl
ci5tX2NvbnRleHQpOwotICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgIGdfb2JqZWN0X3VucmVm
KG1fY29udGV4dCk7Ci0gICAgbV9jb250ZXh0ID0gb3RoZXIubV9jb250ZXh0OwotCi0gICAgcmV0
dXJuICp0aGlzOwotfQotCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKQotICAgIDogbV9jb250ZXh0KDApCi0gICAgLCBtX2Zv
bnQoMCkKLSAgICAsIG1fc2NhbGVkRm9udCgwKQotewotICAgICp0aGlzID0gb3RoZXI7Ci19Ci0K
LWJvb2wgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRh
JiBvdGhlcikgY29uc3QKLXsKLSAgICBpZiAobV9mb250ID09IG90aGVyLm1fZm9udCkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKG1fZm9udCA9PSAwIHx8IG1fZm9udCA9PSByZWludGVy
cHJldF9jYXN0PFBhbmdvRm9udCo+KC0xKQotICAgICAgICB8fCBvdGhlci5tX2ZvbnQgPT0gMCB8
fCBvdGhlci5tX2ZvbnQgPT0gcmVpbnRlcnByZXRfY2FzdDxQYW5nb0ZvbnQqPigtMSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiogdGhpc0Rlc2MgPSBw
YW5nb19mb250X2Rlc2NyaWJlKG1fZm9udCk7Ci0gICAgUGFuZ29Gb250RGVzY3JpcHRpb24qIG90
aGVyRGVzYyA9IHBhbmdvX2ZvbnRfZGVzY3JpYmUob3RoZXIubV9mb250KTsKLSAgICBib29sIHJl
c3VsdCA9IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZXF1YWwodGhpc0Rlc2MsIG90aGVyRGVzYyk7
Ci0gICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKG90aGVyRGVzYyk7Ci0gICAgcGFuZ29f
Zm9udF9kZXNjcmlwdGlvbl9mcmVlKHRoaXNEZXNjKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci0jaWZuZGVmIE5ERUJVRwotU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0jZW5kaWYKLQotfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YVBhbmdvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YVBh
bmdvLmgJKHJldmlzaW9uIDcxNzkxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
Rm9udFBsYXRmb3JtRGF0YVBhbmdvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJpZ2h0
IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgotICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKgotICovCi0KLSNpZm5kZWYgRm9udFBsYXRmb3JtRGF0YVBhbmdvX2gKLSNkZWZpbmUg
Rm9udFBsYXRmb3JtRGF0YVBhbmdvX2gKLQotI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgot
I2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDxw
YW5nby9wYW5nb2NhaXJvLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBGb250UGxhdGZvcm1EYXRhIHsKLXB1YmxpYzoKLSAgICBGb250
UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICAgICAgOiBt
X2NvbnRleHQoMCkKLSAgICAgICAgLCBtX2ZvbnQoaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgp
KQotICAgICAgICAsIG1fc2l6ZSgwKQotICAgICAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkK
LSAgICAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2UpCi0gICAgICAgICwgbV9zY2FsZWRG
b250KDApCi0gICAgICAgIHsgfQotCi0gICAgRm9udFBsYXRmb3JtRGF0YSgpCi0gICAgICAgIDog
bV9jb250ZXh0KDApCi0gICAgICAgICwgbV9mb250KDApCi0gICAgICAgICwgbV9zaXplKDApCi0g
ICAgICAgICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQotICAgICAgICAsIG1fc3ludGhldGljT2Js
aXF1ZShmYWxzZSkKLSAgICAgICAgLCBtX3NjYWxlZEZvbnQoMCkKLSAgICAgICAgeyB9Ci0KLSAg
ICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5KTsKLSAgICBGb250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBm
b250RmFjZSwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7Ci0gICAgRm9udFBs
YXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKTsKLSAgICBGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLSAgICB+Rm9udFBsYXRmb3Jt
RGF0YSgpOwotCi0gICAgc3RhdGljIGJvb2wgaW5pdCgpOwotICAgIGJvb2wgaXNGaXhlZFBpdGNo
KCk7Ci0gICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIHZvaWQg
c2V0U2l6ZShmbG9hdCBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KLSAgICBib29sIHN5bnRoZXRp
Y0JvbGQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY0JvbGQ7IH0KLSAgICBib29sIHN5bnRo
ZXRpY09ibGlxdWUoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY09ibGlxdWU7IH0KLQotICAg
IGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQoKSBjb25zdCB7IHJldHVybiBtX3NjYWxl
ZEZvbnQ7IH0KLQotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAgdWlu
dHB0cl90IGhhc2hDb2Rlc1sxXSA9IHsgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc2Nh
bGVkRm9udCkgfTsKLSAgICAgICAgcmV0dXJuIFdURjo6U3RyaW5nSGFzaGVyOjpjcmVhdGVCbG9i
SGFzaDxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVzKTsKLSAgICB9Ci0KLSAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpIGNvbnN0OwotICAgIEZvbnRQbGF0Zm9y
bURhdGEmIG9wZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci0gICAgYm9vbCBpc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9mb250
ID09IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKTsKLSAgICB9Ci0KLSNpZm5kZWYgTkRFQlVH
Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIHN0YXRpYyBQ
YW5nb0ZvbnRNYXAqIG1fZm9udE1hcDsKLSAgICBzdGF0aWMgR0hhc2hUYWJsZSogbV9oYXNoVGFi
bGU7Ci0gICAgUGFuZ29Db250ZXh0KiBtX2NvbnRleHQ7Ci0gICAgUGFuZ29Gb250KiBtX2ZvbnQ7
Ci0gICAgZmxvYXQgbV9zaXplOwotICAgIGJvb2wgbV9zeW50aGV0aWNCb2xkOwotICAgIGJvb2wg
bV9zeW50aGV0aWNPYmxpcXVlOwotICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIG1fc2NhbGVkRm9u
dDsKLXByaXZhdGU6Ci0gICAgc3RhdGljIFBhbmdvRm9udCAqaGFzaFRhYmxlRGVsZXRlZEZvbnRW
YWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpOyB9Ci19Owot
Ci19Ci0KLSNlbmRpZiAvLyBGb250UGxhdGZvcm1EYXRhUGFuZ29faApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvR2x5cGhQYWdlVHJlZU5vZGVQYW5nby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2x5cGhQYWdlVHJlZU5vZGVQYW5n
by5jcHAJKHJldmlzaW9uIDcxNzkxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
R2x5cGhQYWdlVHJlZU5vZGVQYW5nby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVs
QGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNv
bGxhYm9yYS5jby51az4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENl
bnRlciBVU0EsIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdlVHJl
ZU5vZGUuaCIKLQotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSA8cGFuZ28v
cGFuZ28tZm9udC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBQYW5nb0dseXBo
IHBhbmdvX2ZvbnRfZ2V0X2dseXBoKFBhbmdvRm9udCogZm9udCwgUGFuZ29Db250ZXh0KiBjb250
ZXh0LCBndW5pY2hhciB3YykKLXsKLSAgICBQYW5nb0dseXBoIHJlc3VsdCA9IDA7Ci0gICAgZ2No
YXIgYnVmZmVyWzddOwotCi0gICAgZ2ludCAgbGVuZ3RoID0gZ191bmljaGFyX3RvX3V0Zjgod2Ms
IGJ1ZmZlcik7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobGVuZ3RoLCAwKTsKLQotICAgIEdM
aXN0KiBpdGVtcyA9IHBhbmdvX2l0ZW1pemUoY29udGV4dCwgYnVmZmVyLCAwLCBsZW5ndGgsIE5V
TEwsIE5VTEwpOwotCi0gICAgaWYgKGdfbGlzdF9sZW5ndGgoaXRlbXMpID09IDEpIHsKLSAgICAg
ICAgUGFuZ29JdGVtKiBpdGVtID0gcmVpbnRlcnByZXRfY2FzdDxQYW5nb0l0ZW0qPihpdGVtcy0+
ZGF0YSk7Ci0gICAgICAgIFBhbmdvRm9udCogdG1wRm9udCA9IGl0ZW0tPmFuYWx5c2lzLmZvbnQ7
Ci0gICAgICAgIGl0ZW0tPmFuYWx5c2lzLmZvbnQgPSBmb250OwotCi0gICAgICAgIFBhbmdvR2x5
cGhTdHJpbmcqIGdseXBocyA9IHBhbmdvX2dseXBoX3N0cmluZ19uZXcoKTsKLSAgICAgICAgcGFu
Z29fc2hhcGUoYnVmZmVyLCBsZW5ndGgsICZpdGVtLT5hbmFseXNpcywgZ2x5cGhzKTsKLQotICAg
ICAgICBpdGVtLT5hbmFseXNpcy5mb250ID0gdG1wRm9udDsKLQotICAgICAgICBpZiAoZ2x5cGhz
LT5udW1fZ2x5cGhzID09IDEpCi0gICAgICAgICAgICByZXN1bHQgPSBnbHlwaHMtPmdseXBoc1sw
XS5nbHlwaDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ193YXJuaW5nKCJkaWRuJ3QgZ2V0
IDEgZ2x5cGggYnV0ICVkIiwgZ2x5cGhzLT5udW1fZ2x5cGhzKTsKLQotICAgICAgICBwYW5nb19n
bHlwaF9zdHJpbmdfZnJlZShnbHlwaHMpOwotICAgIH0KLQotICAgIGdfbGlzdF9mb3JlYWNoKGl0
ZW1zLCAoR0Z1bmMpcGFuZ29faXRlbV9mcmVlLCBOVUxMKTsKLSAgICBnX2xpc3RfZnJlZShpdGVt
cyk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVm
ZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCi17Ci0gICAgLy8gVGhl
IGJ1ZmZlckxlbmd0aCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiB0aGUgZ2x5cGggcGFnZSBzaXplIGlm
IHRoZSBidWZmZXIgaGFzIFVuaWNvZGUgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzLgotICAgIC8v
IFdlIHdvbid0IHN1cHBvcnQgdGhpcyBmb3Igbm93LgotICAgIGlmIChidWZmZXJMZW5ndGggPiBH
bHlwaFBhZ2U6OnNpemUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZm9udERh
dGEtPnBsYXRmb3JtRGF0YSgpLm1fZm9udCB8fCBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkubV9m
b250ID09IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgR2x5cGggZ2x5cGggPSBwYW5nb19m
b250X2dldF9nbHlwaChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkubV9mb250LCBmb250RGF0YS0+
cGxhdGZvcm1EYXRhKCkubV9jb250ZXh0LCBidWZmZXJbaV0pOwotICAgICAgICBpZiAoIWdseXBo
KQotICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgMCwgMCk7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsg
aSwgZ2x5cGgsIGZvbnREYXRhKTsKLSAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGhhdmVHbHlwaHM7Ci19Ci0KLX0KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhUGFu
Z28uY3BwCShyZXZpc2lvbiA3MTc5MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5l
bW1lbEBnbWFpbC5jb20KLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBbHAgVG9rZXIgPGFs
cEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIgVVNB
LCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJTaW1wbGVGb250RGF0YS5oIgotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVk
ZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZvbnREZXNjcmlw
dGlvbi5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCi17Ci0gICAgY2Fpcm9fZm9udF9leHRlbnRz
X3QgZm9udF9leHRlbnRzOwotICAgIGNhaXJvX3RleHRfZXh0ZW50c190IHRleHRfZXh0ZW50czsK
LSAgICBjYWlyb19zY2FsZWRfZm9udF9leHRlbnRzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9u
dCwgJmZvbnRfZXh0ZW50cyk7Ci0gICAgbV9hc2NlbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGxyb3Vu
ZGYoZm9udF9leHRlbnRzLmFzY2VudCkpOwotICAgIG1fZGVzY2VudCA9IHN0YXRpY19jYXN0PGlu
dD4obHJvdW5kZihmb250X2V4dGVudHMuZGVzY2VudCkpOwotICAgIG1fbGluZVNwYWNpbmcgPSBz
dGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoZm9udF9leHRlbnRzLmhlaWdodCkpOwotICAgIC8vIFRo
ZXJlIHNlZW1zIHRvIGJlIHNvbWUgcm91bmRpbmcgZXJyb3IgaW4gY2Fpcm8gKG9yIGluIGhvdyB3
ZQotICAgIC8vIHVzZSBjYWlybykgd2l0aCBzb21lIGZvbnRzLCBsaWtlIERlamFWdSBTYW5zIE1v
bm8sIHdoaWNoIG1ha2VzCi0gICAgLy8gY2Fpcm8gcmVwb3J0IGEgaGVpZ2h0IHNtYWxsZXIgdGhh
biBhc2NlbnQgKyBkZXNjZW50LCB3aGljaCBpcwotICAgIC8vIHdyb25nIGFuZCBjb25mdXNlcyBX
ZWJDb3JlJ3MgbGF5b3V0IHN5c3RlbS4gV29ya2Fyb3VuZCB0aGlzCi0gICAgLy8gd2hpbGUgd2Ug
ZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24uCi0gICAgaWYgKG1fbGluZVNwYWNpbmcgPCBtX2Fz
Y2VudCArIG1fZGVzY2VudCkKLSAgICAgICAgbV9saW5lU3BhY2luZyA9IG1fYXNjZW50ICsgbV9k
ZXNjZW50OwotICAgIGNhaXJvX3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyhtX3BsYXRmb3JtRGF0
YS5tX3NjYWxlZEZvbnQsICJ4IiwgJnRleHRfZXh0ZW50cyk7Ci0gICAgbV94SGVpZ2h0ID0gdGV4
dF9leHRlbnRzLmhlaWdodDsKLSAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMobV9w
bGF0Zm9ybURhdGEubV9zY2FsZWRGb250LCAiICIsICZ0ZXh0X2V4dGVudHMpOwotICAgIG1fc3Bh
Y2VXaWR0aCA9ICBzdGF0aWNfY2FzdDxmbG9hdD4odGV4dF9leHRlbnRzLnhfYWR2YW5jZSk7Ci0g
ICAgbV9saW5lR2FwID0gbV9saW5lU3BhY2luZyAtIG1fYXNjZW50IC0gbV9kZXNjZW50OwotICAg
IG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/
IDEuMGYgOiAwLmY7Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRo
SW5pdCgpCi17Ci0gICAgbV9hdmdDaGFyV2lkdGggPSAwLmY7Ci0gICAgbV9tYXhDaGFyV2lkdGgg
PSAwLmY7Ci0gICAgaW5pdENoYXJXaWR0aHMoKTsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6
cGxhdGZvcm1EZXN0cm95KCkKLXsKLSAgICBkZWxldGUgbV9zbWFsbENhcHNGb250RGF0YTsKLSAg
ICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gMDsKLX0KLQotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZv
bnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fc21hbGxDYXBzRm9udERhdGEpIHsKLSAgICAg
ICAgRm9udERlc2NyaXB0aW9uIGRlc2MgPSBGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKLSAgICAgICAgZGVzYy5zZXRTcGVjaWZpZWRTaXplKDAuNzBmICogZm9udERlc2NyaXB0aW9u
LmNvbXB1dGVkU2l6ZSgpKTsKLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBwbGF0Zm9ybURhdGEo
ZGVzYywgZGVzYy5mYW1pbHkoKS5mYW1pbHkoKSk7Ci0gICAgICAgIG1fc21hbGxDYXBzRm9udERh
dGEgPSBuZXcgU2ltcGxlRm9udERhdGEocGxhdGZvcm1EYXRhKTsKLSAgICB9Ci0gICAgcmV0dXJu
IG1fc21hbGxDYXBzRm9udERhdGE7Ci19Ci0KLWJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5z
Q2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKLXsK
LSAgICBib29sIHJlc3VsdCA9IHRydWU7Ci0KLSAgICBQYW5nb0NvdmVyYWdlKiBjb3ZlcmFnZSA9
IHBhbmdvX2ZvbnRfZ2V0X2NvdmVyYWdlKG1fcGxhdGZvcm1EYXRhLm1fZm9udCwgcGFuZ29fbGFu
Z3VhZ2VfZ2V0X2RlZmF1bHQoKSk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgIGlmIChQQU5HT19DT1ZFUkFHRV9OT05FID09IHBhbmdvX2NvdmVyYWdl
X2dldChjb3ZlcmFnZSwgY2hhcmFjdGVyc1tpXSkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGZh
bHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwYW5nb19j
b3ZlcmFnZV91bnJlZihjb3ZlcmFnZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lk
IFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCi17Ci0gICAgaWYgKGlzQ3VzdG9tRm9u
dCgpKSB7Ci0gICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBtX3BsYXRmb3JtRGF0YS5p
c0ZpeGVkUGl0Y2goKTsKLX0KLQotRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJv
dW5kc0ZvckdseXBoKEdseXBoKSBjb25zdAotewotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLX0K
LQotZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlw
aCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250KTsKLQot
ICAgIGNhaXJvX2dseXBoX3QgY2dseXBoID0geyBnbHlwaCwgMCwgMCB9OwotICAgIGNhaXJvX3Rl
eHRfZXh0ZW50c190IGV4dGVudHM7Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZ2x5cGhfZXh0ZW50
cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQsICZjZ2x5cGgsIDEsICZleHRlbnRzKTsKLQot
ICAgIGZsb2F0IHdpZHRoID0gKGZsb2F0KW1fc3BhY2VXaWR0aDsKLSAgICBpZiAoY2Fpcm9fc2Nh
bGVkX2ZvbnRfc3RhdHVzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCkgPT0gQ0FJUk9fU1RB
VFVTX1NVQ0NFU1MgJiYgZXh0ZW50cy54X2FkdmFuY2UgIT0gMCkKLSAgICAgICAgd2lkdGggPSAo
ZmxvYXQpZXh0ZW50cy54X2FkdmFuY2U7Ci0KLSAgICByZXR1cm4gd2lkdGg7ICAgIAotfQotCi19
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDYWNoZVBhbmdvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDYWNo
ZVBhbmdvLmNwcAkocmV2aXNpb24gNzE3OTEpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0ZvbnRDYWNoZVBhbmdvLmNwcDo3MTc5MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcGFuZ28vRm9udENhY2hlUGFuZ28uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNv
bT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKworI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiT3duUHRyQ2Fp
cm8uaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250Q2FjaGU6OnBsYXRmb3Jt
SW5pdCgpCit7CisgICAgaWYgKCFGb250UGxhdGZvcm1EYXRhOjppbml0KCkpCisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hl
OjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK1NpbXBsZUZv
bnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQm
IGZvbnQpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK1NpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6
OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24pCit7CisgICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVo
b3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuCisgICAgLy8gRm9yIG5vdyB3ZSds
bCBwaWNrIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdp
bmcgYW55IHByZWZzLgorICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgdGltZXNTdHIoIlRpbWVzIE5l
dyBSb21hbiIpOworICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShmb250RGVzY3JpcHRpb24s
IHRpbWVzU3RyKTsKK30KKwordm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0
IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwgVmVjdG9yPHVuc2lnbmVkPiYgdHJhaXRzTWFza3Mp
Cit7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3Jt
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBmYW1pbHkpCit7CisgICAgcmV0dXJuIG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnRE
ZXNjcmlwdGlvbiwgZmFtaWx5KTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9wYW5nby9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBh
bmdvLmNwcAkocmV2aXNpb24gNzE3OTEpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHA6NzE3OTEpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
bHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpCit7Cit9
CisKK0ZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3Jt
RGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgRm9udE9yaWVudGF0aW9uLCBG
b250UmVuZGVyaW5nTW9kZSkKK3sKKyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShtX2ZvbnRG
YWNlLCBzaXplLCBib2xkLCBpdGFsaWMpOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlRGF0YSh2
b2lkKiBkYXRhKQoreworICAgIHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGRhdGEpLT5kZXJl
ZigpOworfQorCitGb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZv
cm1EYXRhKFNoYXJlZEJ1ZmZlciogYnVmZmVyKQoreworICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHN1
cHBvcnQgaW4gcGFuZ28gdG8gcmVhZCBmb250cyBmcm9tIG1lbW9yeSB0byBpbXBsZW1lbnQgdGhp
cy55CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6c3Vw
cG9ydHNGb3JtYXQoY29uc3QgU3RyaW5nJiAvKiBmb3JtYXQgKi8pCit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQ
bGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Bh
bmdvL0ZvbnRQbGF0Zm9ybURhdGEuaAkocmV2aXNpb24gNzE3OTEpCShmcm9tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5oOjcxNzkxKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVy
IFVTQSwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgRm9udFBsYXRm
b3JtRGF0YVBhbmdvX2gKKyNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YVBhbmdvX2gKKworI2luY2x1
ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVk
ZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxwYW5nby9wYW5nb2NhaXJvLmg+CisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250UGxhdGZvcm1E
YXRhIHsKK3B1YmxpYzoKKyAgICBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX2NvbnRleHQoMCkKKyAgICAgICAgLCBtX2ZvbnQoaGFz
aFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpKQorICAgICAgICAsIG1fc2l6ZSgwKQorICAgICAgICAs
IG1fc3ludGhldGljQm9sZChmYWxzZSkKKyAgICAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoZmFs
c2UpCisgICAgICAgICwgbV9zY2FsZWRGb250KDApCisgICAgICAgIHsgfQorCisgICAgRm9udFBs
YXRmb3JtRGF0YSgpCisgICAgICAgIDogbV9jb250ZXh0KDApCisgICAgICAgICwgbV9mb250KDAp
CisgICAgICAgICwgbV9zaXplKDApCisgICAgICAgICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQor
ICAgICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKKyAgICAgICAgLCBtX3NjYWxlZEZv
bnQoMCkKKyAgICAgICAgeyB9CisKKyAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsKKyAgICBGb250UGxhdGZvcm1E
YXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBi
b29sIGl0YWxpYyk7CisgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQs
IGJvb2wgaXRhbGljKTsKKyAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmKTsKKyAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOworCisgICAgc3RhdGljIGJvb2wgaW5pdCgp
OworICAgIGJvb2wgaXNGaXhlZFBpdGNoKCk7CisgICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQorICAgIHZvaWQgc2V0U2l6ZShmbG9hdCBzaXplKSB7IG1fc2l6ZSA9IHNp
emU7IH0KKyAgICBib29sIHN5bnRoZXRpY0JvbGQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRp
Y0JvbGQ7IH0KKyAgICBib29sIHN5bnRoZXRpY09ibGlxdWUoKSBjb25zdCB7IHJldHVybiBtX3N5
bnRoZXRpY09ibGlxdWU7IH0KKworICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQo
KSBjb25zdCB7IHJldHVybiBtX3NjYWxlZEZvbnQ7IH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdAorICAgIHsKKyAgICAgICAgdWludHB0cl90IGhhc2hDb2Rlc1sxXSA9IHsgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KG1fc2NhbGVkRm9udCkgfTsKKyAgICAgICAgcmV0dXJuIFdURjo6
U3RyaW5nSGFzaGVyOjpjcmVhdGVCbG9iSGFzaDxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVz
KTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYp
IGNvbnN0OworICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9yPShjb25zdCBGb250UGxhdGZv
cm1EYXRhJik7CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9mb250ID09IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKTsK
KyAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7
CisjZW5kaWYKKworICAgIHN0YXRpYyBQYW5nb0ZvbnRNYXAqIG1fZm9udE1hcDsKKyAgICBzdGF0
aWMgR0hhc2hUYWJsZSogbV9oYXNoVGFibGU7CisgICAgUGFuZ29Db250ZXh0KiBtX2NvbnRleHQ7
CisgICAgUGFuZ29Gb250KiBtX2ZvbnQ7CisgICAgZmxvYXQgbV9zaXplOworICAgIGJvb2wgbV9z
eW50aGV0aWNCb2xkOworICAgIGJvb2wgbV9zeW50aGV0aWNPYmxpcXVlOworICAgIGNhaXJvX3Nj
YWxlZF9mb250X3QqIG1fc2NhbGVkRm9udDsKK3ByaXZhdGU6CisgICAgc3RhdGljIFBhbmdvRm9u
dCAqaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
UGFuZ29Gb250Kj4oLTEpOyB9Cit9OworCit9CisKKyNlbmRpZiAvLyBGb250UGxhdGZvcm1EYXRh
UGFuZ29faApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGxhdGZv
cm1EYXRhUGFuZ28uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cGFuZ28vRm9udFBsYXRmb3JtRGF0YVBhbmdvLmNwcAkocmV2aXNpb24gNzE3OTEpCShmcm9tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHA6NzE3
OTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQbGF0Zm9ybURhdGFQ
YW5nby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBN
aWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXIg
UmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBT
LkwuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZvbnRQbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
I2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlIDxwYW5n
by9wYW5nby5oPgorI2luY2x1ZGUgPHBhbmdvL3BhbmdvY2Fpcm8uaD4KKworLy8gVXNlIGNhaXJv
LWZ0IGkgYSByZWNlbnQgZW5vdWdoIFBhbmdvIHZlcnNpb24gaXNuJ3QgYXZhaWxhYmxlCisjaWYg
IVBBTkdPX1ZFUlNJT05fQ0hFQ0soMSwxOCwwKQorI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+CisjaW5j
bHVkZSA8cGFuZ28vcGFuZ29mYy1mb250bWFwLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxndGsvZ3Rr
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFuZ29Gb250TWFwKiBGb250UGxhdGZvcm1E
YXRhOjptX2ZvbnRNYXAgPSAwOworR0hhc2hUYWJsZSogRm9udFBsYXRmb3JtRGF0YTo6bV9oYXNo
VGFibGUgPSAwOworCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWls
eU5hbWUpCisgICAgOiBtX2NvbnRleHQoMCkKKyAgICAsIG1fZm9udCgwKQorICAgICwgbV9zaXpl
KGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSkKKyAgICAsIG1fc3ludGhldGljQm9sZChm
YWxzZSkKKyAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKKyAgICAsIG1fc2NhbGVkRm9u
dCgwKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGE6OmluaXQoKTsKKworICAgIENTdHJpbmcgc3Rv
cmVkX2ZhbWlseSA9IGZhbWlseU5hbWUuc3RyaW5nKCkudXRmOCgpOworICAgIGNoYXIgY29uc3Qq
IGZhbWlsaWVzW10gPSB7CisgICAgICBzdG9yZWRfZmFtaWx5LmRhdGEoKSwKKyAgICAgIE5VTEwK
KyAgICB9OworCisgICAgc3dpdGNoIChmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpKSB7
CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5OgorICAgICAgICBmYW1pbGll
c1sxXSA9ICJzZXJpZiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udERlc2NyaXB0aW9u
OjpTYW5zU2VyaWZGYW1pbHk6CisgICAgICAgIGZhbWlsaWVzWzFdID0gInNhbnMiOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5OgorICAg
ICAgICBmYW1pbGllc1sxXSA9ICJtb25vc3BhY2UiOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHk6CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlN0
YW5kYXJkRmFtaWx5OgorICAgIGRlZmF1bHQ6CisgICAgICAgIGZhbWlsaWVzWzFdID0gInNhbnMi
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiogZGVz
Y3JpcHRpb24gPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX25ldygpOworICAgIHBhbmdvX2ZvbnRf
ZGVzY3JpcHRpb25fc2V0X2Fic29sdXRlX3NpemUoZGVzY3JpcHRpb24sIGZvbnREZXNjcmlwdGlv
bi5jb21wdXRlZFNpemUoKSAqIFBBTkdPX1NDQUxFKTsKKworICAgIC8vIEZJWE1FOiBNYXAgYWxs
IEZvbnRXZWlnaHQgdmFsdWVzIHRvIFBhbmdvIGZvbnQgd2VpZ2h0cy4KKyAgICBpZiAoZm9udERl
c2NyaXB0aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHQ2MDApCisgICAgICAgIHBhbmdvX2ZvbnRf
ZGVzY3JpcHRpb25fc2V0X3dlaWdodChkZXNjcmlwdGlvbiwgUEFOR09fV0VJR0hUX0JPTEQpOwor
ICAgIGlmIChmb250RGVzY3JpcHRpb24uaXRhbGljKCkpCisgICAgICAgIHBhbmdvX2ZvbnRfZGVz
Y3JpcHRpb25fc2V0X3N0eWxlKGRlc2NyaXB0aW9uLCBQQU5HT19TVFlMRV9JVEFMSUMpOworCisj
aWYgUEFOR09fVkVSU0lPTl9DSEVDSygxLDIxLDUpICAgLy8gZGVwcmVjYXRlZCBpbiAxLjIxCisg
ICAgbV9jb250ZXh0ID0gcGFuZ29fZm9udF9tYXBfY3JlYXRlX2NvbnRleHQobV9mb250TWFwKTsK
KyNlbHNlCisgICAgbV9jb250ZXh0ID0gcGFuZ29fY2Fpcm9fZm9udF9tYXBfY3JlYXRlX2NvbnRl
eHQoUEFOR09fQ0FJUk9fRk9OVF9NQVAobV9mb250TWFwKSk7CisjZW5kaWYKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgIW1fZm9udCAmJiBpIDwgR19OX0VMRU1FTlRTKGZhbWlsaWVzKTsg
aSsrKSB7CisgICAgICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fc2V0X2ZhbWlseShkZXNjcmlw
dGlvbiwgZmFtaWxpZXNbaV0pOworICAgICAgICBwYW5nb19jb250ZXh0X3NldF9mb250X2Rlc2Ny
aXB0aW9uKG1fY29udGV4dCwgZGVzY3JpcHRpb24pOworICAgICAgICBtX2ZvbnQgPSBwYW5nb19m
b250X21hcF9sb2FkX2ZvbnQobV9mb250TWFwLCBtX2NvbnRleHQsIGRlc2NyaXB0aW9uKTsKKyAg
ICB9CisKKyNpZiBQQU5HT19WRVJTSU9OX0NIRUNLKDEsMTgsMCkKKyAgICBpZiAobV9mb250KQor
ICAgICAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9yZWZlcmVuY2UocGFuZ29f
Y2Fpcm9fZm9udF9nZXRfc2NhbGVkX2ZvbnQoUEFOR09fQ0FJUk9fRk9OVChtX2ZvbnQpKSk7Cisj
ZWxzZQorICAgIC8vIFRoaXMgY29tcGF0aWJpbGl0eSBjb2RlIGZvciBvbGRlciB2ZXJzaW9ucyBv
ZiBQYW5nbyBpcyBub3Qgd2VsbC10ZXN0ZWQuCisgICAgaWYgKG1fZm9udCkgeworICAgICAgICBQ
YW5nb0ZjRm9udCogZmNmb250ID0gUEFOR09fRkNfRk9OVChtX2ZvbnQpOworICAgICAgICBjYWly
b19mb250X2ZhY2VfdCogZmFjZSA9IGNhaXJvX2Z0X2ZvbnRfZmFjZV9jcmVhdGVfZm9yX3BhdHRl
cm4oZmNmb250LT5mb250X3BhdHRlcm4pOworICAgICAgICBkb3VibGUgc2l6ZTsKKyAgICAgICAg
aWYgKEZjUGF0dGVybkdldERvdWJsZShmY2ZvbnQtPmZvbnRfcGF0dGVybiwgRkNfUElYRUxfU0la
RSwgMCwgJnNpemUpICE9IEZjUmVzdWx0TWF0Y2gpCisgICAgICAgICAgICBzaXplID0gMTIuMDsK
KyAgICAgICAgY2Fpcm9fbWF0cml4X3QgZm9udE1hdHJpeDsKKyAgICAgICAgY2Fpcm9fbWF0cml4
X2luaXRfc2NhbGUoJmZvbnRNYXRyaXgsIHNpemUsIHNpemUpOworICAgICAgICBjYWlyb19mb250
X29wdGlvbnNfdCogZm9udE9wdGlvbnM7CisgICAgICAgIGlmIChwYW5nb19jYWlyb19jb250ZXh0
X2dldF9mb250X29wdGlvbnMobV9jb250ZXh0KSkKKyAgICAgICAgICAgIGZvbnRPcHRpb25zID0g
Y2Fpcm9fZm9udF9vcHRpb25zX2NvcHkocGFuZ29fY2Fpcm9fY29udGV4dF9nZXRfZm9udF9vcHRp
b25zKG1fY29udGV4dCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmb250T3B0aW9ucyA9
IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsKKyAgICAgICAgY2Fpcm9fbWF0cml4X3QgY3Rt
OworICAgICAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKKyAgICAgICAgbV9z
Y2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfY3JlYXRlKGZhY2UsICZmb250TWF0cml4LCAm
Y3RtLCBmb250T3B0aW9ucyk7CisgICAgICAgIGNhaXJvX2ZvbnRfb3B0aW9uc19kZXN0cm95KGZv
bnRPcHRpb25zKTsKKyAgICAgICAgY2Fpcm9fZm9udF9mYWNlX2Rlc3Ryb3koZmFjZSk7CisgICAg
fQorI2VuZGlmCisgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKGRlc2NyaXB0aW9uKTsK
K30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29s
IGJvbGQsIGJvb2wgaXRhbGljKQorICAgIDogbV9jb250ZXh0KDApCisgICAgLCBtX2ZvbnQoMCkK
KyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCisgICAgLCBt
X3N5bnRoZXRpY09ibGlxdWUoaXRhbGljKQorICAgICwgbV9zY2FsZWRGb250KDApCit7Cit9CisK
K0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY2Fpcm9fZm9udF9mYWNlX3QqIGZv
bnRGYWNlLCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKQorICAgIDogbV9jb250
ZXh0KDApCisgICAgLCBtX2ZvbnQoMCkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9zeW50
aGV0aWNCb2xkKGJvbGQpCisgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoaXRhbGljKQorICAgICwg
bV9zY2FsZWRGb250KDApCit7CisgICAgY2Fpcm9fbWF0cml4X3QgZm9udE1hdHJpeDsKKyAgICBj
YWlyb19tYXRyaXhfaW5pdF9zY2FsZSgmZm9udE1hdHJpeCwgc2l6ZSwgc2l6ZSk7CisgICAgY2Fp
cm9fbWF0cml4X3QgY3RtOworICAgIGNhaXJvX21hdHJpeF9pbml0X2lkZW50aXR5KCZjdG0pOwor
ICAgIGNhaXJvX2ZvbnRfb3B0aW9uc190KiBvcHRpb25zID0gY2Fpcm9fZm9udF9vcHRpb25zX2Ny
ZWF0ZSgpOworCisgICAgLy8gV2UgZm9yY2UgYW50aWFsaWFzaW5nIGFuZCBkaXNhYmxlIGhpbnRp
bmcgdG8gcHJvdmlkZSBjb25zaXN0ZW50CisgICAgLy8gdHlwb2dyYXBoaWMgcXVhbGl0aWVzIGZv
ciBjdXN0b20gZm9udHMgb24gYWxsIHBsYXRmb3Jtcy4KKyAgICBjYWlyb19mb250X29wdGlvbnNf
c2V0X2hpbnRfc3R5bGUob3B0aW9ucywgQ0FJUk9fSElOVF9TVFlMRV9OT05FKTsKKyAgICBjYWly
b19mb250X29wdGlvbnNfc2V0X2FudGlhbGlhcyhvcHRpb25zLCBDQUlST19BTlRJQUxJQVNfR1JB
WSk7CisKKyAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9jcmVhdGUoZm9udEZh
Y2UsICZmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsKKyAgICBjYWlyb19mb250X29wdGlvbnNf
ZGVzdHJveShvcHRpb25zKTsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjppbml0KCkKK3sK
KyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlmIChpbml0aWFsaXpl
ZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAg
aWYgKCFtX2ZvbnRNYXApCisgICAgICAgIG1fZm9udE1hcCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFw
X2dldF9kZWZhdWx0KCk7CisgICAgaWYgKCFtX2hhc2hUYWJsZSkgeworICAgICAgICBQYW5nb0Zv
bnRGYW1pbHkqKiBmYW1pbGllcyA9IDA7CisgICAgICAgIGludCBuX2ZhbWlsaWVzID0gMDsKKwor
ICAgICAgICBtX2hhc2hUYWJsZSA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBn
X3N0cl9lcXVhbCwgZ19mcmVlLCBnX29iamVjdF91bnJlZik7CisKKyAgICAgICAgcGFuZ29fZm9u
dF9tYXBfbGlzdF9mYW1pbGllcyhtX2ZvbnRNYXAsICZmYW1pbGllcywgJm5fZmFtaWxpZXMpOwor
CisgICAgICAgIGZvciAoaW50IGZhbWlseSA9IDA7IGZhbWlseSA8IG5fZmFtaWxpZXM7IGZhbWls
eSsrKQorICAgICAgICAgICAgICAgIGdfaGFzaF90YWJsZV9pbnNlcnQobV9oYXNoVGFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3N0cmR1cChwYW5nb19mb250X2Zh
bWlseV9nZXRfbmFtZShmYW1pbGllc1tmYW1pbHldKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnX29iamVjdF9yZWYoZmFtaWxpZXNbZmFtaWx5XSkpOworCisgICAgICAg
IGdfZnJlZShmYW1pbGllcyk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0ZvbnRQ
bGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkKK3sKKyAgICBpZiAobV9mb250ICYmIG1f
Zm9udCAhPSByZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+KC0xKSkgeworICAgICAgICBnX29i
amVjdF91bnJlZihtX2ZvbnQpOworICAgICAgICBtX2ZvbnQgPSAwOworICAgIH0KKworICAgIGlm
IChtX2NvbnRleHQpIHsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobV9jb250ZXh0KTsKKyAgICAg
ICAgbV9jb250ZXh0ID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9zY2FsZWRGb250KSB7CisgICAg
ICAgIGNhaXJvX3NjYWxlZF9mb250X2Rlc3Ryb3kobV9zY2FsZWRGb250KTsKKyAgICAgICAgbV9z
Y2FsZWRGb250ID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNGaXhl
ZFBpdGNoKCkKK3sKKyAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiogZGVzY3JpcHRpb24gPSBwYW5n
b19mb250X2Rlc2NyaWJlX3dpdGhfYWJzb2x1dGVfc2l6ZShtX2ZvbnQpOworICAgIFBhbmdvRm9u
dEZhbWlseSogZmFtaWx5ID0gcmVpbnRlcnByZXRfY2FzdDxQYW5nb0ZvbnRGYW1pbHkqPihnX2hh
c2hfdGFibGVfbG9va3VwKG1faGFzaFRhYmxlLCBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2dldF9m
YW1pbHkoZGVzY3JpcHRpb24pKSk7CisgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKGRl
c2NyaXB0aW9uKTsKKyAgICByZXR1cm4gcGFuZ29fZm9udF9mYW1pbHlfaXNfbW9ub3NwYWNlKGZh
bWlseSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9y
PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKK3sKKyAgICAvLyBDaGVjayBmb3Igc2Vs
Zi1hc3NpZ25tZW50LgorICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgcmV0dXJuICp0
aGlzOworCisgICAgbV9zaXplID0gb3RoZXIubV9zaXplOworICAgIG1fc3ludGhldGljQm9sZCA9
IG90aGVyLm1fc3ludGhldGljQm9sZDsKKyAgICBtX3N5bnRoZXRpY09ibGlxdWUgPSBvdGhlci5t
X3N5bnRoZXRpY09ibGlxdWU7CisKKyAgICBpZiAob3RoZXIubV9zY2FsZWRGb250KQorICAgICAg
ICBjYWlyb19zY2FsZWRfZm9udF9yZWZlcmVuY2Uob3RoZXIubV9zY2FsZWRGb250KTsKKyAgICBp
ZiAobV9zY2FsZWRGb250KQorICAgICAgICBjYWlyb19zY2FsZWRfZm9udF9kZXN0cm95KG1fc2Nh
bGVkRm9udCk7CisgICAgbV9zY2FsZWRGb250ID0gb3RoZXIubV9zY2FsZWRGb250OworCisgICAg
aWYgKG90aGVyLm1fZm9udCkKKyAgICAgICAgZ19vYmplY3RfcmVmKG90aGVyLm1fZm9udCk7Cisg
ICAgaWYgKG1fZm9udCkKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobV9mb250KTsKKyAgICBtX2Zv
bnQgPSBvdGhlci5tX2ZvbnQ7CisKKyAgICBpZiAob3RoZXIubV9jb250ZXh0KQorICAgICAgICBn
X29iamVjdF9yZWYob3RoZXIubV9jb250ZXh0KTsKKyAgICBpZiAobV9jb250ZXh0KQorICAgICAg
ICBnX29iamVjdF91bnJlZihtX2NvbnRleHQpOworICAgIG1fY29udGV4dCA9IG90aGVyLm1fY29u
dGV4dDsKKworICAgIHJldHVybiAqdGhpczsKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKKyAgICA6IG1fY29udGV4
dCgwKQorICAgICwgbV9mb250KDApCisgICAgLCBtX3NjYWxlZEZvbnQoMCkKK3sKKyAgICAqdGhp
cyA9IG90aGVyOworfQorCitib29sIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0oY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG1fZm9udCA9PSBvdGhl
ci5tX2ZvbnQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtX2ZvbnQgPT0gMCB8fCBt
X2ZvbnQgPT0gcmVpbnRlcnByZXRfY2FzdDxQYW5nb0ZvbnQqPigtMSkKKyAgICAgICAgfHwgb3Ro
ZXIubV9mb250ID09IDAgfHwgb3RoZXIubV9mb250ID09IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29G
b250Kj4oLTEpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUGFuZ29Gb250RGVzY3JpcHRp
b24qIHRoaXNEZXNjID0gcGFuZ29fZm9udF9kZXNjcmliZShtX2ZvbnQpOworICAgIFBhbmdvRm9u
dERlc2NyaXB0aW9uKiBvdGhlckRlc2MgPSBwYW5nb19mb250X2Rlc2NyaWJlKG90aGVyLm1fZm9u
dCk7CisgICAgYm9vbCByZXN1bHQgPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2VxdWFsKHRoaXNE
ZXNjLCBvdGhlckRlc2MpOworICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZShvdGhlckRl
c2MpOworICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZSh0aGlzRGVzYyk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworI2lmbmRlZiBOREVCVUcKK1N0cmluZyBGb250UGxhdGZvcm1EYXRh
OjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorI2VuZGlm
CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vR2x5cGhQYWdlVHJl
ZU5vZGVQYW5nby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9w
YW5nby9HbHlwaFBhZ2VUcmVlTm9kZVBhbmdvLmNwcAkocmV2aXNpb24gNzE3OTEpCShmcm9tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dseXBoUGFnZVRyZWVOb2RlUGFuZ28uY3BwOjcx
NzkxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9HbHlwaFBhZ2VUcmVlTm9k
ZVBhbmdvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHAudG9rZXJAY29sbGFib3JhLmNvLnVrPgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgorCisjaW5j
bHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlIDxwYW5nby9wYW5nby1mb250Lmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFBhbmdvR2x5cGggcGFuZ29fZm9udF9nZXRf
Z2x5cGgoUGFuZ29Gb250KiBmb250LCBQYW5nb0NvbnRleHQqIGNvbnRleHQsIGd1bmljaGFyIHdj
KQoreworICAgIFBhbmdvR2x5cGggcmVzdWx0ID0gMDsKKyAgICBnY2hhciBidWZmZXJbN107CisK
KyAgICBnaW50ICBsZW5ndGggPSBnX3VuaWNoYXJfdG9fdXRmOCh3YywgYnVmZmVyKTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChsZW5ndGgsIDApOworCisgICAgR0xpc3QqIGl0ZW1zID0gcGFu
Z29faXRlbWl6ZShjb250ZXh0LCBidWZmZXIsIDAsIGxlbmd0aCwgTlVMTCwgTlVMTCk7CisKKyAg
ICBpZiAoZ19saXN0X2xlbmd0aChpdGVtcykgPT0gMSkgeworICAgICAgICBQYW5nb0l0ZW0qIGl0
ZW0gPSByZWludGVycHJldF9jYXN0PFBhbmdvSXRlbSo+KGl0ZW1zLT5kYXRhKTsKKyAgICAgICAg
UGFuZ29Gb250KiB0bXBGb250ID0gaXRlbS0+YW5hbHlzaXMuZm9udDsKKyAgICAgICAgaXRlbS0+
YW5hbHlzaXMuZm9udCA9IGZvbnQ7CisKKyAgICAgICAgUGFuZ29HbHlwaFN0cmluZyogZ2x5cGhz
ID0gcGFuZ29fZ2x5cGhfc3RyaW5nX25ldygpOworICAgICAgICBwYW5nb19zaGFwZShidWZmZXIs
IGxlbmd0aCwgJml0ZW0tPmFuYWx5c2lzLCBnbHlwaHMpOworCisgICAgICAgIGl0ZW0tPmFuYWx5
c2lzLmZvbnQgPSB0bXBGb250OworCisgICAgICAgIGlmIChnbHlwaHMtPm51bV9nbHlwaHMgPT0g
MSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGdseXBocy0+Z2x5cGhzWzBdLmdseXBoOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBnX3dhcm5pbmcoImRpZG4ndCBnZXQgMSBnbHlwaCBidXQgJWQi
LCBnbHlwaHMtPm51bV9nbHlwaHMpOworCisgICAgICAgIHBhbmdvX2dseXBoX3N0cmluZ19mcmVl
KGdseXBocyk7CisgICAgfQorCisgICAgZ19saXN0X2ZvcmVhY2goaXRlbXMsIChHRnVuYylwYW5n
b19pdGVtX2ZyZWUsIE5VTEwpOworICAgIGdfbGlzdF9mcmVlKGl0ZW1zKTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3sKKyAgICAvLyBUaGUgYnVmZmVyTGVuZ3RoIHdp
bGwgYmUgZ3JlYXRlciB0aGFuIHRoZSBnbHlwaCBwYWdlIHNpemUgaWYgdGhlIGJ1ZmZlciBoYXMg
VW5pY29kZSBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMuCisgICAgLy8gV2Ugd29uJ3Qgc3VwcG9y
dCB0aGlzIGZvciBub3cuCisgICAgaWYgKGJ1ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFmb250RGF0YS0+cGxhdGZvcm1EYXRh
KCkubV9mb250IHx8IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5tX2ZvbnQgPT0gcmVpbnRlcnBy
ZXRfY2FzdDxQYW5nb0ZvbnQqPigtMSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJv
b2wgaGF2ZUdseXBocyA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgeworICAgICAgICBHbHlwaCBnbHlwaCA9IHBhbmdvX2ZvbnRfZ2V0X2dseXBoKGZv
bnREYXRhLT5wbGF0Zm9ybURhdGEoKS5tX2ZvbnQsIGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5t
X2NvbnRleHQsIGJ1ZmZlcltpXSk7CisgICAgICAgIGlmICghZ2x5cGgpCisgICAgICAgICAgICBz
ZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAwLCAwKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaCwgZm9udERh
dGEpOworICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gaGF2ZUdseXBoczsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0YVBhbmdvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCShyZXZp
c2lvbiA3MTc5MSkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9u
dERhdGFQYW5nby5jcHA6NzE3OTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Bhbmdv
L1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5l
bW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBbHAgVG9rZXIgPGFs
cEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIgVVNB
LCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlw
dGlvbi5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCit7CisgICAgY2Fpcm9fZm9udF9leHRlbnRz
X3QgZm9udF9leHRlbnRzOworICAgIGNhaXJvX3RleHRfZXh0ZW50c190IHRleHRfZXh0ZW50czsK
KyAgICBjYWlyb19zY2FsZWRfZm9udF9leHRlbnRzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9u
dCwgJmZvbnRfZXh0ZW50cyk7CisgICAgbV9hc2NlbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGxyb3Vu
ZGYoZm9udF9leHRlbnRzLmFzY2VudCkpOworICAgIG1fZGVzY2VudCA9IHN0YXRpY19jYXN0PGlu
dD4obHJvdW5kZihmb250X2V4dGVudHMuZGVzY2VudCkpOworICAgIG1fbGluZVNwYWNpbmcgPSBz
dGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoZm9udF9leHRlbnRzLmhlaWdodCkpOworICAgIC8vIFRo
ZXJlIHNlZW1zIHRvIGJlIHNvbWUgcm91bmRpbmcgZXJyb3IgaW4gY2Fpcm8gKG9yIGluIGhvdyB3
ZQorICAgIC8vIHVzZSBjYWlybykgd2l0aCBzb21lIGZvbnRzLCBsaWtlIERlamFWdSBTYW5zIE1v
bm8sIHdoaWNoIG1ha2VzCisgICAgLy8gY2Fpcm8gcmVwb3J0IGEgaGVpZ2h0IHNtYWxsZXIgdGhh
biBhc2NlbnQgKyBkZXNjZW50LCB3aGljaCBpcworICAgIC8vIHdyb25nIGFuZCBjb25mdXNlcyBX
ZWJDb3JlJ3MgbGF5b3V0IHN5c3RlbS4gV29ya2Fyb3VuZCB0aGlzCisgICAgLy8gd2hpbGUgd2Ug
ZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24uCisgICAgaWYgKG1fbGluZVNwYWNpbmcgPCBtX2Fz
Y2VudCArIG1fZGVzY2VudCkKKyAgICAgICAgbV9saW5lU3BhY2luZyA9IG1fYXNjZW50ICsgbV9k
ZXNjZW50OworICAgIGNhaXJvX3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyhtX3BsYXRmb3JtRGF0
YS5tX3NjYWxlZEZvbnQsICJ4IiwgJnRleHRfZXh0ZW50cyk7CisgICAgbV94SGVpZ2h0ID0gdGV4
dF9leHRlbnRzLmhlaWdodDsKKyAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMobV9w
bGF0Zm9ybURhdGEubV9zY2FsZWRGb250LCAiICIsICZ0ZXh0X2V4dGVudHMpOworICAgIG1fc3Bh
Y2VXaWR0aCA9ICBzdGF0aWNfY2FzdDxmbG9hdD4odGV4dF9leHRlbnRzLnhfYWR2YW5jZSk7Cisg
ICAgbV9saW5lR2FwID0gbV9saW5lU3BhY2luZyAtIG1fYXNjZW50IC0gbV9kZXNjZW50OworICAg
IG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/
IDEuMGYgOiAwLmY7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRo
SW5pdCgpCit7CisgICAgbV9hdmdDaGFyV2lkdGggPSAwLmY7CisgICAgbV9tYXhDaGFyV2lkdGgg
PSAwLmY7CisgICAgaW5pdENoYXJXaWR0aHMoKTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6
cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAgICBkZWxldGUgbV9zbWFsbENhcHNGb250RGF0YTsKKyAg
ICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gMDsKK30KKworU2ltcGxlRm9udERhdGEqIFNpbXBsZUZv
bnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1fc21hbGxDYXBzRm9udERhdGEpIHsKKyAgICAg
ICAgRm9udERlc2NyaXB0aW9uIGRlc2MgPSBGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKKyAgICAgICAgZGVzYy5zZXRTcGVjaWZpZWRTaXplKDAuNzBmICogZm9udERlc2NyaXB0aW9u
LmNvbXB1dGVkU2l6ZSgpKTsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBwbGF0Zm9ybURhdGEo
ZGVzYywgZGVzYy5mYW1pbHkoKS5mYW1pbHkoKSk7CisgICAgICAgIG1fc21hbGxDYXBzRm9udERh
dGEgPSBuZXcgU2ltcGxlRm9udERhdGEocGxhdGZvcm1EYXRhKTsKKyAgICB9CisgICAgcmV0dXJu
IG1fc21hbGxDYXBzRm9udERhdGE7Cit9CisKK2Jvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5z
Q2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKK3sK
KyAgICBib29sIHJlc3VsdCA9IHRydWU7CisKKyAgICBQYW5nb0NvdmVyYWdlKiBjb3ZlcmFnZSA9
IHBhbmdvX2ZvbnRfZ2V0X2NvdmVyYWdlKG1fcGxhdGZvcm1EYXRhLm1fZm9udCwgcGFuZ29fbGFu
Z3VhZ2VfZ2V0X2RlZmF1bHQoKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CisgICAgICAgIGlmIChQQU5HT19DT1ZFUkFHRV9OT05FID09IHBhbmdvX2NvdmVyYWdl
X2dldChjb3ZlcmFnZSwgY2hhcmFjdGVyc1tpXSkpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZh
bHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwYW5nb19j
b3ZlcmFnZV91bnJlZihjb3ZlcmFnZSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCit7CisgICAgaWYgKGlzQ3VzdG9tRm9u
dCgpKSB7CisgICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBtX3BsYXRmb3JtRGF0YS5p
c0ZpeGVkUGl0Y2goKTsKK30KKworRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJv
dW5kc0ZvckdseXBoKEdseXBoKSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFJlY3QoKTsKK30K
KworZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlw
aCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250KTsKKwor
ICAgIGNhaXJvX2dseXBoX3QgY2dseXBoID0geyBnbHlwaCwgMCwgMCB9OworICAgIGNhaXJvX3Rl
eHRfZXh0ZW50c190IGV4dGVudHM7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZ2x5cGhfZXh0ZW50
cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQsICZjZ2x5cGgsIDEsICZleHRlbnRzKTsKKwor
ICAgIGZsb2F0IHdpZHRoID0gKGZsb2F0KW1fc3BhY2VXaWR0aDsKKyAgICBpZiAoY2Fpcm9fc2Nh
bGVkX2ZvbnRfc3RhdHVzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCkgPT0gQ0FJUk9fU1RB
VFVTX1NVQ0NFU1MgJiYgZXh0ZW50cy54X2FkdmFuY2UgIT0gMCkKKyAgICAgICAgd2lkdGggPSAo
ZmxvYXQpZXh0ZW50cy54X2FkdmFuY2U7CisKKyAgICByZXR1cm4gd2lkdGg7ICAgIAorfQorCit9
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3Jt
RGF0YS5oCShyZXZpc2lvbiA3MTc5MSkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmg6NzE3OTEpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5j
b20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICog
Q29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgRm9udFBsYXRmb3JtRGF0YUNhaXJvV2lu
X2gKKyNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luX2gKKworI2luY2x1ZGUgIkZvbnRE
ZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiUmVmQ291
bnRlZEdESUhhbmRsZS5oIgorI2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIKKyNpbmNsdWRlIDxjYWly
by13aW4zMi5oPgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
KwordHlwZWRlZiBzdHJ1Y3QgSEZPTlRfXyogSEZPTlQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7CitwdWJsaWM6CisgICAgRm9udFBsYXRmb3JtRGF0
YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9mb250RmFjZSgw
KQorICAgICAgICAsIG1fdXNlR0RJKGZhbHNlKQorICAgICAgICAsIG1fZm9udChXVEY6Okhhc2hU
YWJsZURlbGV0ZWRWYWx1ZSkKKyAgICAgICAgLCBtX3NpemUoMCkKKyAgICAgICAgLCBtX3N5bnRo
ZXRpY0JvbGQoZmFsc2UpCisgICAgICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNlKQorICAg
ICAgICAsIG1fc2NhbGVkRm9udCgwKQorICAgICAgICB7IH0KKworICAgIEZvbnRQbGF0Zm9ybURh
dGEoKQorICAgICAgICA6IG1fZm9udEZhY2UoMCkKKyAgICAgICAgLCBtX3VzZUdESShmYWxzZSkK
KyAgICAgICAgLCBtX3NpemUoMCkKKyAgICAgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCisg
ICAgICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNlKQorICAgICAgICAsIG1fc2NhbGVkRm9u
dCgwKQorICAgICAgICB7IH0KKworICAgIEZvbnRQbGF0Zm9ybURhdGEoSEZPTlQsIGZsb2F0IHNp
emUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBib29sIHVzZUdESSk7CisgICAgRm9udFBsYXRm
b3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UsIGZsb2F0IHNpemUsIGJvb2wgYm9s
ZCwgYm9vbCBpdGFsaWMpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBi
b2xkLCBib29sIGl0YWxpYyk7CisgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZv
cm1EYXRhJik7CisgICAgfkZvbnRQbGF0Zm9ybURhdGEoKTsKKworICAgIEhGT05UIGhmb250KCkg
Y29uc3QgeyByZXR1cm4gbV9mb250LT5oYW5kbGUoKTsgfQorICAgIGJvb2wgdXNlR0RJKCkgY29u
c3QgeyByZXR1cm4gbV91c2VHREk7IH0KKyAgICBjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2Uo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnRGYWNlOyB9CisKKyAgICBib29sIGlzRml4ZWRQaXRjaCgp
OworICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICB2b2lkIHNl
dFNpemUoZmxvYXQgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CisgICAgYm9vbCBzeW50aGV0aWNC
b2xkKCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNCb2xkOyB9CisgICAgYm9vbCBzeW50aGV0
aWNPYmxpcXVlKCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNPYmxpcXVlOyB9CisgICAgY2Fp
cm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkRm9u
dDsgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9mb250LT5oYXNoKCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmKSBjb25zdDsKKyAgICBGb250UGxhdGZvcm1EYXRhJiBvcGVyYXRvcj0oY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYpOworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZm9udC5pc0hhc2hUYWJsZURlbGV0ZWRW
YWx1ZSgpOworICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAgICBTdHJpbmcgZGVzY3JpcHRpb24o
KSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIHZvaWQgcGxhdGZvcm1EYXRhSW5pdChI
Rk9OVCwgZmxvYXQgc2l6ZSwgSERDLCBXQ0hBUiogZmFjZU5hbWUpOworCisgICAgUmVmUHRyPFJl
ZkNvdW50ZWRHRElIYW5kbGU8SEZPTlQ+ID4gbV9mb250OworICAgIGNhaXJvX2ZvbnRfZmFjZV90
KiBtX2ZvbnRGYWNlOworICAgIGJvb2wgbV91c2VHREk7CisgICAgZmxvYXQgbV9zaXplOworICAg
IGJvb2wgbV9zeW50aGV0aWNCb2xkOworICAgIGJvb2wgbV9zeW50aGV0aWNPYmxpcXVlOworICAg
IGNhaXJvX3NjYWxlZF9mb250X3QqIG1fc2NhbGVkRm9udDsKK307CisKK30KKworI2VuZGlmIC8v
IEZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbl9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uaAkocmV2aXNp
b24gNzE3OTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhQ2Fpcm9XaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChD
KSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcg
UGlvbmVlciBSZXNlYXJjaCBDZW50ZXIgVVNBLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0g
Ki8KLQotI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW5faAotI2RlZmluZSBGb250UGxh
dGZvcm1EYXRhQ2Fpcm9XaW5faAotCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5j
bHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJSZWZDb3VudGVkR0RJSGFuZGxlLmgiCi0j
aW5jbHVkZSAiU3RyaW5nSW1wbC5oIgotI2luY2x1ZGUgPGNhaXJvLXdpbjMyLmg+Ci0jaW5jbHVk
ZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi10eXBlZGVmIHN0cnVjdCBI
Rk9OVF9fKiBIRk9OVDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGb250UGxhdGZv
cm1EYXRhIHsKLXB1YmxpYzoKLSAgICBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVs
ZXRlZFZhbHVlVHlwZSkKLSAgICAgICAgOiBtX2ZvbnRGYWNlKDApCi0gICAgICAgICwgbV91c2VH
REkoZmFsc2UpCi0gICAgICAgICwgbV9mb250KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKQot
ICAgICAgICAsIG1fc2l6ZSgwKQotICAgICAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKLSAg
ICAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2UpCi0gICAgICAgICwgbV9zY2FsZWRGb250
KDApCi0gICAgICAgIHsgfQotCi0gICAgRm9udFBsYXRmb3JtRGF0YSgpCi0gICAgICAgIDogbV9m
b250RmFjZSgwKQotICAgICAgICAsIG1fdXNlR0RJKGZhbHNlKQotICAgICAgICAsIG1fc2l6ZSgw
KQotICAgICAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKLSAgICAgICAgLCBtX3N5bnRoZXRp
Y09ibGlxdWUoZmFsc2UpCi0gICAgICAgICwgbV9zY2FsZWRGb250KDApCi0gICAgICAgIHsgfQot
Ci0gICAgRm9udFBsYXRmb3JtRGF0YShIRk9OVCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29s
IG9ibGlxdWUsIGJvb2wgdXNlR0RJKTsKLSAgICBGb250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRf
ZmFjZV90KiBmb250RmFjZSwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7Ci0g
ICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKTsK
LSAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLSAgICB+Rm9u
dFBsYXRmb3JtRGF0YSgpOwotCi0gICAgSEZPTlQgaGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2Zv
bnQtPmhhbmRsZSgpOyB9Ci0gICAgYm9vbCB1c2VHREkoKSBjb25zdCB7IHJldHVybiBtX3VzZUdE
STsgfQotICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9udEZhY2U7IH0KLQotICAgIGJvb2wgaXNGaXhlZFBpdGNoKCk7Ci0gICAgZmxvYXQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIHZvaWQgc2V0U2l6ZShmbG9hdCBzaXplKSB7
IG1fc2l6ZSA9IHNpemU7IH0KLSAgICBib29sIHN5bnRoZXRpY0JvbGQoKSBjb25zdCB7IHJldHVy
biBtX3N5bnRoZXRpY0JvbGQ7IH0KLSAgICBib29sIHN5bnRoZXRpY09ibGlxdWUoKSBjb25zdCB7
IHJldHVybiBtX3N5bnRoZXRpY09ibGlxdWU7IH0KLSAgICBjYWlyb19zY2FsZWRfZm9udF90KiBz
Y2FsZWRGb250KCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZWRGb250OyB9Ci0KLSAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ZvbnQtPmhhc2goKTsKLSAg
ICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpIGNvbnN0
OwotICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRh
Jik7Ci0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV9mb250LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7Ci0gICAgfQotCi0j
aWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwotI2VuZGlmCi0K
LXByaXZhdGU6Ci0gICAgdm9pZCBwbGF0Zm9ybURhdGFJbml0KEhGT05ULCBmbG9hdCBzaXplLCBI
REMsIFdDSEFSKiBmYWNlTmFtZSk7Ci0KLSAgICBSZWZQdHI8UmVmQ291bnRlZEdESUhhbmRsZTxI
Rk9OVD4gPiBtX2ZvbnQ7Ci0gICAgY2Fpcm9fZm9udF9mYWNlX3QqIG1fZm9udEZhY2U7Ci0gICAg
Ym9vbCBtX3VzZUdESTsKLSAgICBmbG9hdCBtX3NpemU7Ci0gICAgYm9vbCBtX3N5bnRoZXRpY0Jv
bGQ7Ci0gICAgYm9vbCBtX3N5bnRoZXRpY09ibGlxdWU7Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRf
dCogbV9zY2FsZWRGb250OwotfTsKLQotfQotCi0jZW5kaWYgLy8gRm9udFBsYXRmb3JtRGF0YUNh
aXJvV2luX2gKSW5kZXg6IFdlYktpdC9lZmwvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9lZmwvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MTc5NCkKKysrIFdlYktpdC9lZmwvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTEtMTAgIFJ5dWFuIENob2kg
IDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFy
dGguCisKKyAgICAgICAgW0dUS10gTW92ZSBmb250IHJlbGF0ZWQgZmlsZXMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODExNgorCisgICAgICAgIEFk
ZCBmcmVldHlwZS8gdG8gaW5jbHVkZSBwYXRoLgorCisgICAgICAgICogQ01ha2VMaXN0c0VmbC50
eHQ6CisKIDIwMTAtMTEtMDggIFJhZmFlbCBBbnRvZ25vbGxpICA8YW50b2dub2xsaUBwcm9mdXNp
b24ubW9iaT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbnRvbmlvIEdvbWVzLgpJbmRleDogV2Vi
S2l0L2VmbC9DTWFrZUxpc3RzRWZsLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZWZsL0NNYWtl
TGlzdHNFZmwudHh0CShyZXZpc2lvbiA3MTc5MSkKKysrIFdlYktpdC9lZmwvQ01ha2VMaXN0c0Vm
bC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzExLDcgQEAgTElTVChBUFBFTkQgV2ViS2l0
X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVRfRElSfS9lZmwvZXdrIgogICAgICIk
e1dFQktJVF9ESVJ9L2VmbC9XZWJDb3JlU3VwcG9ydCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZWZsIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZSIKICAgICAke0NhaXJvX0lOQ0xVREVfRElSU30KICAgICAke0VDT1JFX1hfSU5DTFVERV9ESVJT
fQogICAgICR7RURKRV9JTkNMVURFX0RJUlN9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>