<?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>116783</bug_id>
          
          <creation_ts>2013-05-26 05:09:14 -0700</creation_ts>
          <short_desc>Use Vector instead of custom linked list for font families</short_desc>
          <delta_ts>2013-05-27 04:46:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Text</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          <dependson>116822</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eflews.bot</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>rego+ews</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>893742</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-26 05:09:14 -0700</bug_when>
    <thetext>And kill a few classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893744</commentid>
    <comment_count>1</comment_count>
      <attachid>202915</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-26 05:23:27 -0700</bug_when>
    <thetext>Created attachment 202915
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893745</commentid>
    <comment_count>2</comment_count>
      <attachid>202915</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-05-26 05:32:56 -0700</bug_when>
    <thetext>Comment on attachment 202915
patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests (OOPS!).

OOPS!

&gt; Source/WebCore/css/CSSComputedStyleDeclaration.cpp:1450
&gt;  static PassRefPtr&lt;CSSValueList&gt; fontFamilyFromStyle(RenderStyle* style)
&gt; -{
&gt; -    const FontFamily&amp; firstFamily = style-&gt;fontDescription().family();
&gt; +    {

Strange indentation here.

&gt; Source/WebCore/rendering/RenderText.cpp:211
&gt; -    } else if (oldStyle-&gt;font().needsTranscoding() != newStyle-&gt;font().needsTranscoding() || (newStyle-&gt;font().needsTranscoding() &amp;&amp; oldStyle-&gt;font().family().family() != newStyle-&gt;font().family().family())) {
&gt; +    } else if (oldStyle-&gt;font().needsTranscoding() != newStyle-&gt;font().needsTranscoding() || (newStyle-&gt;font().needsTranscoding() &amp;&amp; oldStyle-&gt;font().fontDescription().families() != newStyle-&gt;font().fontDescription().families())) {

You&apos;re now comparing all families here instead of just the first one. Looks wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893746</commentid>
    <comment_count>3</comment_count>
      <attachid>202915</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-05-26 05:33:26 -0700</bug_when>
    <thetext>Comment on attachment 202915
patch

Attachment 202915 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/677274</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893747</commentid>
    <comment_count>4</comment_count>
      <attachid>202915</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-05-26 05:34:10 -0700</bug_when>
    <thetext>Comment on attachment 202915
patch

Attachment 202915 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/677273</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893748</commentid>
    <comment_count>5</comment_count>
      <attachid>202915</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-05-26 05:35:42 -0700</bug_when>
    <thetext>Comment on attachment 202915
patch

Attachment 202915 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/665163</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893749</commentid>
    <comment_count>6</comment_count>
      <attachid>202915</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-05-26 05:49:50 -0700</bug_when>
    <thetext>Comment on attachment 202915
patch

Attachment 202915 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/744168</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893750</commentid>
    <comment_count>7</comment_count>
      <attachid>202915</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-05-26 05:52:25 -0700</bug_when>
    <thetext>Comment on attachment 202915
patch

Attachment 202915 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/744167</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893751</commentid>
    <comment_count>8</comment_count>
      <attachid>202916</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-26 06:05:36 -0700</bug_when>
    <thetext>Created attachment 202916
patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893754</commentid>
    <comment_count>9</comment_count>
      <attachid>202916</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-05-26 06:23:06 -0700</bug_when>
    <thetext>Comment on attachment 202916
patch 2

Attachment 202916 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/655189</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893756</commentid>
    <comment_count>10</comment_count>
      <attachid>202916</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-05-26 06:27:10 -0700</bug_when>
    <thetext>Comment on attachment 202916
patch 2

Attachment 202916 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/744171</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893757</commentid>
    <comment_count>11</comment_count>
      <attachid>202916</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-05-26 06:30:50 -0700</bug_when>
    <thetext>Comment on attachment 202916
patch 2

Attachment 202916 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/730153</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893759</commentid>
    <comment_count>12</comment_count>
      <attachid>202918</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-26 06:44:43 -0700</bug_when>
    <thetext>Created attachment 202918
more port fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893763</commentid>
    <comment_count>13</comment_count>
      <attachid>202918</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-05-26 07:06:44 -0700</bug_when>
    <thetext>Comment on attachment 202918
more port fixes

Attachment 202918 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/652347</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893767</commentid>
    <comment_count>14</comment_count>
      <attachid>202920</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-26 07:19:50 -0700</bug_when>
    <thetext>Created attachment 202920
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893768</commentid>
    <comment_count>15</comment_count>
      <attachid>202920</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-05-26 07:21:11 -0700</bug_when>
    <thetext>Comment on attachment 202920
another

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893770</commentid>
    <comment_count>16</comment_count>
      <attachid>202920</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-05-26 07:46:36 -0700</bug_when>
    <thetext>Comment on attachment 202920
another

Attachment 202920 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/744186</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893772</commentid>
    <comment_count>17</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-26 07:52:23 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/150716</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893839</commentid>
    <comment_count>18</comment_count>
      <attachid>202920</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-05-26 17:27:44 -0700</bug_when>
    <thetext>Comment on attachment 202920
another

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

&gt; Source/WebCore/platform/graphics/FontDescription.h:144
&gt; +    void setOneFamily(const AtomicString&amp; family) { ASSERT(m_families.size() == 1); m_families[0] = family; }

I am a little confused by this. How do callers know the families list already happens to be one family long in all the cases where this is used?

The name “set one family” also seems a little confusing to me. It sounds like this sets one of the families and leaves the rest alone. I would have maybe called this setSingleFamily. But really I am mystified by the way the code can assume there is only one family.

&gt; Source/WebCore/platform/graphics/FontDescription.h:173
&gt; -    FontFamily m_familyList; // The list of font families to be used.
&gt; +    Vector&lt;AtomicString, 1&gt; m_families;

The old thing was two pointers. Isn’t Vector&lt;AtomicString, 1&gt; much bigger than that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893845</commentid>
    <comment_count>19</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-26 17:53:26 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 202920 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=202920&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/FontDescription.h:144
&gt; &gt; +    void setOneFamily(const AtomicString&amp; family) { ASSERT(m_families.size() == 1); m_families[0] = family; }
&gt; 
&gt; I am a little confused by this. How do callers know the families list already happens to be one family long in all the cases where this is used?

FontDescription is not meant to be mutated after the initial setup. The size is set to one in constructor to match the old behaviour and limit the refactoring. This could actually assert that the family is null too.

&gt; The name “set one family” also seems a little confusing to me. It sounds like this sets one of the families and leaves the rest alone. I would have maybe called this setSingleFamily. But really I am mystified by the way the code can assume there is only one family.

Yeah, setSingleFamily would be a better name. Removing the whole thing in favour of constructor parameter would be better.

&gt; The old thing was two pointers. Isn’t Vector&lt;AtomicString, 1&gt; much bigger than that?

This is not meant to be the end state. A simplification step will hopefully be helpful to get bigger gains.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893846</commentid>
    <comment_count>20</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-05-26 17:54:58 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; (From update of attachment 202920 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=202920&amp;action=review
&gt; &gt; The old thing was two pointers. Isn’t Vector&lt;AtomicString, 1&gt; much bigger than that?
&gt; 
&gt; This is not meant to be the end state. A simplification step will hopefully be helpful to get bigger gains.

FWIW, the new object is one pointer bigger, but has much better heap layout with &gt;1 family.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202915</attachid>
            <date>2013-05-26 05:23:27 -0700</date>
            <delta_ts>2013-05-26 06:05:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>font-families-vector.patch</filename>
            <type>text/plain</type>
            <size>36522</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MDcxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDEzLTA1LTI2ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgVmVjdG9yIGluc3RlYWQg
b2YgY3VzdG9tIGxpbmtlZCBsaXN0IGZvciBmb250IGZhbWlsaWVzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY3ODMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKwor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpoYXNTYW1lRm9udCk6
CisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpmb250RmFtaWx5RnJvbVN0eWxlKToKKyAgICAgICAgKiBjc3MvRGVwcmVjYXRl
ZFN0eWxlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udEZh
bWlseTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUZvbnRGYW1pbHk6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlGb250RmFtaWx5OjphcHBseVZhbHVlKToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNv
bHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvckRvY3Vt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5
bGUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZvbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KToKKyAgICAg
ICAgKiBwYWdlL1ByaW50Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcmludENvbnRl
eHQ6OnBhZ2VQcm9wZXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Zmlyc3RGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udDo6ZmFtaWx5Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZmFtaWx5QXQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250RGVzY3JpcHRpb24uY3BwOgorICAgICAgICAoU2FtZVNpemVBc0ZvbnREZXNjcmlwdGlv
bik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OkZvbnREZXNjcmlwdGlvbik6CisgICAgICAg
IChGb250RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpm
YW1pbHlDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OmZpcnN0RmFt
aWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6ZmFtaWx5QXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpmYW1pbGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpGb250RGVzY3JpcHRpb246OnVzZUZpeGVkRGVmYXVsdFNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRPbmVGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udERlc2NyaXB0aW9uOjpzZXRGYW1pbGllcyk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OnN3YXBGYW1pbGllcyk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRp
b246Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHku
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL1RoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVNYWM6OmNvbnRy
b2xGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5zY29k
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFRyYW5zY29kZXI6OmNvbnZlcnRlclR5cGUp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHQ6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmNv
bXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6cHJlZmVycmVkQ29udGVudExvZ2ljYWxXaWR0aCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnN5c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnNldEZvbnRGcm9tQ29udHJvbFNpemUpOgorCiAyMDEzLTA1LTI2ICBBbmRyZWFzIEtsaW5nICA8
YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBUcmVlU2NvcGU6OnJvb3ROb2RlKCkgc2hvdWxk
IHJldHVybiBhIENvbnRhaW5lck5vZGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlz
aW9uIDE1MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNDIsNyArMzI0Miw3IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aGFzU2FtZUYKICAgICBpZiAoIW1fcmVuZGVy
ZXIgfHwgIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJu
IG1fcmVuZGVyZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmZhbWlseSgpID09IHJlbmRl
cmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5mYW1pbHkoKTsKKyAgICByZXR1cm4gbV9y
ZW5kZXJlci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuZmFtaWxpZXMoKSA9PSByZW5kZXJl
ci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuZmFtaWxpZXMoKTsKIH0KIAogYm9vbCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpoYXNTYW1lRm9udENvbG9yKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTUwNDI5KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0NDcsMTEgKzE0NDcsMTAgQEAgc3RhdGljIHZvaWQgbG9nVW5pbXBsZW1lbnRlZFByb3BlcnR5
SUQoQwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1pbHlGcm9t
U3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQotewotICAgIGNvbnN0IEZvbnRGYW1pbHkmIGZpcnN0
RmFtaWx5ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmZhbWlseSgpOworICAgIHsKICAgICBS
ZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFy
YXRlZCgpOwotICAgIGZvciAoY29uc3QgRm9udEZhbWlseSogZmFtaWx5ID0gJmZpcnN0RmFtaWx5
OyBmYW1pbHk7IGZhbWlseSA9IGZhbWlseS0+bmV4dCgpKQotICAgICAgICBsaXN0LT5hcHBlbmQo
dmFsdWVGb3JGYW1pbHkoZmFtaWx5LT5mYW1pbHkoKSkpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzdHlsZS0+Zm9udCgpLmZhbWlseUNvdW50KCk7ICsraSkKKyAgICAgICAgbGlzdC0+
YXBwZW5kKHZhbHVlRm9yRmFtaWx5KHN0eWxlLT5mb250KCkuZmFtaWx5QXQoaSkpKTsKICAgICBy
ZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXBy
ZWNhdGVkU3R5bGVCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
RGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAJKHJldmlzaW9uIDE1MDQyOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2NCw3ICs2
NjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBwYXJlbnRGb250RGVzY3Jp
cHRpb24gPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsK
ICAgICAgICAgCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KHBhcmVu
dEZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkpOwotICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0RmFtaWx5KHBhcmVudEZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpKTsKKyAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlsaWVzKHBhcmVudEZvbnREZXNjcmlwdGlvbi5mYW1p
bGllcygpKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzU3BlY2lmaWVkRm9udChwYXJl
bnRGb250RGVzY3JpcHRpb24uaXNTcGVjaWZpZWRGb250KCkpOwogICAgICAgICBzdHlsZVJlc29s
dmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtNjc5LDggKzY4MCw4IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlv
bi5rZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkp
CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24s
IHN0eWxlUmVzb2x2ZXItPmZvbnRTaXplRm9yS2V5d29yZChzdHlsZVJlc29sdmVyLT5kb2N1bWVu
dCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEs
IGZhbHNlKSk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KGluaXRp
YWxEZXNjLmdlbmVyaWNGYW1pbHkoKSk7Ci0gICAgICAgIGlmICghaW5pdGlhbERlc2MuZmlyc3RG
YW1pbHkoKS5mYW1pbHlJc0VtcHR5KCkpCi0gICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
RmFtaWx5KGluaXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkpOworICAgICAgICBpZiAoIWluaXRpYWxE
ZXNjLmZpcnN0RmFtaWx5KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldEZhbWlsaWVzKGluaXRpYWxEZXNjLmZhbWlsaWVzKCkpOwogCiAgICAgICAgIHN0eWxlUmVz
b2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICByZXR1
cm47CkBAIC02OTIsMjMgKzY5MywyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBGb250RmFtaWx5JiBmaXJzdEZh
bWlseSA9IGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpOwotICAgICAgICBGb250RmFtaWx5
KiBjdXJyRmFtaWx5ID0gMDsKLQogICAgICAgICAvLyBCZWZvcmUgbWFwcGluZyBpbiBhIG5ldyBm
b250LWZhbWlseSBwcm9wZXJ0eSwgd2Ugc2hvdWxkIHJlc2V0IHRoZSBnZW5lcmljIGZhbWlseS4K
ICAgICAgICAgYm9vbCBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSA9IGZvbnREZXNjcmlw
dGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRH
ZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOwogCisgICAgICAgIFZlY3Rv
cjxBdG9taWNTdHJpbmcsIDE+IGZhbWlsaWVzOwogICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0
ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CiAgICAgICAgICAg
ICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsKICAgICAgICAgICAgIGlmICghaXRlbS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4oaXRlbSk7CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgZmFjZTsKLSAgICAgICAg
ICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCktPnNldHRp
bmdzKCk7CiAgICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLT5pc1N0cmluZygpKQogICAgICAg
ICAgICAgICAgIGZhY2UgPSBjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChzZXR0aW5ncykgeworICAgICAgICAgICAgZWxzZSBpZiAoU2V0dGluZ3Mq
IHNldHRpbmdzID0gc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKSkgewogICAg
ICAgICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEJvZHk6CiAgICAgICAgICAgICAgICAgICAgIGZh
Y2UgPSBzZXR0aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5KCk7CkBAIC03NDAsMzEgKzczOCwyMSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBpZiAoIWZhY2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjdXJyRmFtaWx5
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZpbGxpbmcgaW4gdGhlIGZpcnN0IGZhbWlseS4K
LSAgICAgICAgICAgICAgICAgICAgZmlyc3RGYW1pbHkuc2V0RmFtaWx5KGZhY2UpOwotICAgICAg
ICAgICAgICAgICAgICBmaXJzdEZhbWlseS5hcHBlbmRGYW1pbHkoMCk7IC8vIFJlbW92ZSBhbnkg
aW5oZXJpdGVkIGZhbWlseS1mYWxsYmFjayBsaXN0LgotICAgICAgICAgICAgICAgICAgICBjdXJy
RmFtaWx5ID0gJmZpcnN0RmFtaWx5OwotICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0SXNTcGVjaWZpZWRGb250KGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkgPT0g
Rm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgUmVmUHRyPFNoYXJlZEZvbnRGYW1pbHk+IG5ld0ZhbWlseSA9IFNo
YXJlZEZvbnRGYW1pbHk6OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBuZXdGYW1pbHkt
PnNldEZhbWlseShmYWNlKTsKLSAgICAgICAgICAgICAgICAgICAgY3VyckZhbWlseS0+YXBwZW5k
RmFtaWx5KG5ld0ZhbWlseSk7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJGYW1pbHkgPSBuZXdG
YW1pbHkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKGZhY2UuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgaWYgKGZhbWlsaWVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0SXNTcGVjaWZpZWRGb250KGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkg
PT0gRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseSk7CisgICAgICAgICAgICBmYW1pbGllcy5hcHBl
bmQoZmFjZSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBXZSBjYW4ndCBjYWxsIHVzZUZpeGVk
RGVmYXVsdFNpemUoKSB1bnRpbCBhbGwgbmV3IGZvbnQgZmFtaWxpZXMgaGF2ZSBiZWVuIGFkZGVk
Ci0gICAgICAgIC8vIElmIGN1cnJGYW1pbHkgaXMgbm9uLXplcm8gdGhlbiB3ZSBzZXQgYXQgbGVh
c3Qgb25lIGZhbWlseSBvbiB0aGlzIGRlc2NyaXB0aW9uLgotICAgICAgICBpZiAoY3VyckZhbWls
eSkgewotICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZv
bnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkgIT0gb2xkRmFtaWx5VXNlZEZpeGVk
RGVmYXVsdFNpemUpCi0gICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUo
Zm9udERlc2NyaXB0aW9uLCBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQoc3R5bGVS
ZXNvbHZlci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtl
eXdvcmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpKTsKKyAgICAg
ICAgaWYgKGZhbWlsaWVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Zm9udERlc2NyaXB0aW9uLmFkb3B0RmFtaWxpZXMoZmFtaWxpZXMpOwogCi0gICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29y
ZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpICE9IG9sZEZh
bWlseVVzZWRGaXhlZERlZmF1bHRTaXplKQorICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0
Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdv
cmQoc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2Ny
aXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUp
KTsKKworICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRs
ZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJ
bml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmNwcAkocmV2aXNpb24gMTUwNDI5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjAsOCArOTIwLDcgQEAgUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cwogICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHN0YW5kYXJkRm9udCA9IHNldHRpbmdzLT5zdGFuZGFyZEZvbnRGYW1pbHkoZm9udERlc2Ny
aXB0aW9uLnNjcmlwdCgpKTsKICAgICAgICAgaWYgKCFzdGFuZGFyZEZvbnQuaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3Jp
cHRpb246OlN0YW5kYXJkRmFtaWx5KTsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJz
dEZhbWlseSgpLnNldEZhbWlseShzdGFuZGFyZEZvbnQpOwotICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLmZpcnN0RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDApOworICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldE9uZUZhbWlseShzdGFuZGFyZEZvbnQpOwogICAgICAgICB9CiAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVl
WHhTbWFsbCArIDEpOwogICAgICAgICBpbnQgc2l6ZSA9IFN0eWxlUmVzb2x2ZXI6OmZvbnRTaXpl
Rm9yS2V5d29yZChkb2N1bWVudCwgQ1NTVmFsdWVNZWRpdW0sIGZhbHNlKTsKQEAgLTMyNzEsMTAg
KzMyNzAsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUoCiAgICAg
Zm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdN
b2RlKCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChkb2N1bWVudCgp
LT5wcmludGluZygpIHx8ICFzZXR0aW5ncy0+c2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQo
KSk7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGFuZGFyZEZvbnRGYW1pbHkgPSBkb2N1bWVu
dFNldHRpbmdzKCktPnN0YW5kYXJkRm9udEZhbWlseSgpOwotICAgIGlmICghc3RhbmRhcmRGb250
RmFtaWx5LmlzRW1wdHkoKSkgewotICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHko
KS5zZXRGYW1pbHkoc3RhbmRhcmRGb250RmFtaWx5KTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9u
LmZpcnN0RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDApOwotICAgIH0KKyAgICBpZiAoIXN0YW5kYXJk
Rm9udEZhbWlseS5pc0VtcHR5KCkpCisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPbmVGYW1p
bHkoc3RhbmRhcmRGb250RmFtaWx5KTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNp
emUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKICAgICBzZXRGb250U2l6
ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1
ZU1lZGl1bSwgZmFsc2UpKTsKICAgICBtX3N0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVu
ZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZp
c2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgwLDEzICsxOTgwLDExIEBAIFN0
cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZvbnQoKSAKICAgICBzZXJpYWxpemVkRm9u
dC5hcHBlbmROdW1iZXIoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkpOwogICAg
IHNlcmlhbGl6ZWRGb250LmFwcGVuZExpdGVyYWwoInB4Iik7CiAKLSAgICBjb25zdCBGb250RmFt
aWx5JiBmaXJzdEZvbnRGYW1pbHkgPSBmb250RGVzY3JpcHRpb24uZmFtaWx5KCk7Ci0gICAgZm9y
IChjb25zdCBGb250RmFtaWx5KiBmb250RmFtaWx5ID0gJmZpcnN0Rm9udEZhbWlseTsgZm9udEZh
bWlseTsgZm9udEZhbWlseSA9IGZvbnRGYW1pbHktPm5leHQoKSkgewotICAgICAgICBpZiAoZm9u
dEZhbWlseSAhPSAmZmlyc3RGb250RmFtaWx5KQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdGF0ZSgpLm1fZm9udC5mYW1pbHlDb3VudCgpOyArK2kpIHsKKyAgICAgICAgaWYgKGkpCiAg
ICAgICAgICAgICBzZXJpYWxpemVkRm9udC5hcHBlbmQoJywnKTsKLQogICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGFwcGVuZCBmYW1pbHkgZGlyZWN0bHkgdG8gc2VyaWFsaXplZEZvbnQgcmF0
aGVyIHRoYW4gYnVpbGRpbmcgYSB0ZW1wb3Jhcnkgc3RyaW5nLgotICAgICAgICBTdHJpbmcgZmFt
aWx5ID0gZm9udEZhbWlseS0+ZmFtaWx5KCk7CisgICAgICAgIFN0cmluZyBmYW1pbHkgPSBzdGF0
ZSgpLm1fZm9udC5mYW1pbHlBdChpKTsKICAgICAgICAgaWYgKGZhbWlseS5zdGFydHNXaXRoKCIt
d2Via2l0LSIpKQogICAgICAgICAgICAgZmFtaWx5ID0gZmFtaWx5LnN1YnN0cmluZyg4KTsKICAg
ICAgICAgaWYgKGZhbWlseS5jb250YWlucygnICcpKQpAQCAtMjAyNywxMSArMjAyNSw4IEBAIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGMKICAgICBpZiAoUmVuZGVyU3R5
bGUqIGNvbXB1dGVkU3R5bGUgPSBjYW52YXMoKS0+Y29tcHV0ZWRTdHlsZSgpKQogICAgICAgICBu
ZXdTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGNvbXB1dGVkU3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpKTsKICAgICBlbHNlIHsKLSAgICAgICAgRm9udEZhbWlseSBmb250RmFtaWx5OwotICAgICAg
ICBmb250RmFtaWx5LnNldEZhbWlseShkZWZhdWx0Rm9udEZhbWlseSk7Ci0KICAgICAgICAgRm9u
dERlc2NyaXB0aW9uIGRlZmF1bHRGb250RGVzY3JpcHRpb247Ci0gICAgICAgIGRlZmF1bHRGb250
RGVzY3JpcHRpb24uc2V0RmFtaWx5KGZvbnRGYW1pbHkpOworICAgICAgICBkZWZhdWx0Rm9udERl
c2NyaXB0aW9uLnNldE9uZUZhbWlseShkZWZhdWx0Rm9udEZhbWlseSk7CiAgICAgICAgIGRlZmF1
bHRGb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShkZWZhdWx0Rm9udFNpemUpOwogICAg
ICAgICBkZWZhdWx0Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShkZWZhdWx0Rm9udFNp
emUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3BwCShyZXZpc2lvbiAx
NTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3OSw3ICsyNzksNyBAQCBTdHJpbmcgUHJpbnRDb250ZXh0OjpwYWdlUHJvcGVy
dHkoRnJhbWUqCiAgICAgaWYgKCFzdHJjbXAocHJvcGVydHlOYW1lLCAiZm9udC1zaXplIikpCiAg
ICAgICAgIHJldHVybiBTdHJpbmc6Om51bWJlcihzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuY29t
cHV0ZWRQaXhlbFNpemUoKSk7CiAgICAgaWYgKCFzdHJjbXAocHJvcGVydHlOYW1lLCAiZm9udC1m
YW1pbHkiKSkKLSAgICAgICAgcmV0dXJuIHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5mYW1pbHko
KS5mYW1pbHkoKS5zdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHN0eWxlLT5mb250RGVzY3JpcHRp
b24oKS5maXJzdEZhbWlseSgpOwogICAgIGlmICghc3RyY21wKHByb3BlcnR5TmFtZSwgInNpemUi
KSkKICAgICAgICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKHN0eWxlLT5wYWdlU2l6ZSgpLndpZHRo
KCkudmFsdWUoKSkgKyAnICcgKyBTdHJpbmc6Om51bWJlcihzdHlsZS0+cGFnZVNpemUoKS5oZWln
aHQoKS52YWx1ZSgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuaAkocmV2aXNpb24gMTUwNDI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsOCArMTMwLDkgQEAgcHVibGljOgogCiAg
ICAgVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlc2V0dGluZ0ZlYXR1cmVzOyB9CiAKLSAgICBGb250RmFtaWx5JiBmaXJzdEZhbWls
eSgpIHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7IH0KLSAgICBjb25z
dCBGb250RmFtaWx5JiBmYW1pbHkoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5m
YW1pbHkoKTsgfQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmlyc3RGYW1pbHkoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpOyB9CisgICAgdW5zaWduZWQg
ZmFtaWx5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5mYW1pbHlDb3Vu
dCgpOyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlBdCh1bnNpZ25lZCBpKSBjb25z
dCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5mYW1pbHlBdChpKTsgfQogCiAgICAgRm9udEl0
YWxpYyBpdGFsaWMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKTsg
fQogICAgIEZvbnRXZWlnaHQgd2VpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRp
b24ud2VpZ2h0KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTUwNDI5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBOaWNob2xhcyBTaGFu
a3MgPHdlYmtpdEBuaWNrc2hhbmtzLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQ3OSw0NCAr
NDc5LDM4IEBAIHNpemVfdCBGb250Q2FjaGU6OmluYWN0aXZlRm9udERhdGFDb3VudCgKIAogUGFz
c1JlZlB0cjxGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YShjb25zdCBGb250JiBmb250
LCBpbnQmIGZhbWlseUluZGV4LCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKIHsKKyAgICBB
U1NFUlQoZmFtaWx5SW5kZXggIT0gY0FsbEZhbWlsaWVzU2Nhbm5lZCk7CiAgICAgUmVmUHRyPEZv
bnREYXRhPiByZXN1bHQ7CiAKLSAgICBpbnQgc3RhcnRJbmRleCA9IGZhbWlseUluZGV4OwotICAg
IGNvbnN0IEZvbnRGYW1pbHkqIHN0YXJ0RmFtaWx5ID0gJmZvbnQuZm9udERlc2NyaXB0aW9uKCku
ZmFtaWx5KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IHN0YXJ0RmFtaWx5ICYmIGkgPCBzdGFydElu
ZGV4OyBpKyspCi0gICAgICAgIHN0YXJ0RmFtaWx5ID0gc3RhcnRGYW1pbHktPm5leHQoKTsKLSAg
ICBjb25zdCBGb250RmFtaWx5KiBjdXJyRmFtaWx5ID0gc3RhcnRGYW1pbHk7Ci0gICAgd2hpbGUg
KGN1cnJGYW1pbHkgJiYgIXJlc3VsdCkgewotICAgICAgICBmYW1pbHlJbmRleCsrOwotICAgICAg
ICBpZiAoY3VyckZhbWlseS0+ZmFtaWx5KCkubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGlmIChm
b250U2VsZWN0b3IpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gZm9udFNlbGVjdG9yLT5nZXRG
b250RGF0YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBjdXJyRmFtaWx5LT5mYW1pbHkoKSk7Ci0K
LSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGdldENh
Y2hlZEZvbnREYXRhKGZvbnQuZm9udERlc2NyaXB0aW9uKCksIGN1cnJGYW1pbHktPmZhbWlseSgp
KTsKLSAgICAgICAgfQotICAgICAgICBjdXJyRmFtaWx5ID0gY3VyckZhbWlseS0+bmV4dCgpOwor
ICAgIGJvb2wgaXNGaXJzdCA9ICFmYW1pbHlJbmRleDsKKyAgICBpbnQgZmFtaWx5Q291bnQgPSBm
b250LmZhbWlseUNvdW50KCk7CisgICAgZm9yICg7ZmFtaWx5SW5kZXggPCBmYW1pbHlDb3VudCAm
JiAhcmVzdWx0OyArK2ZhbWlseUluZGV4KSB7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5ID0gZm9udC5mYW1pbHlBdChmYW1pbHlJbmRleCk7CisgICAgICAgIGlmIChmYW1pbHku
aXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChmb250U2VsZWN0
b3IpCisgICAgICAgICAgICByZXN1bHQgPSBmb250U2VsZWN0b3ItPmdldEZvbnREYXRhKGZvbnQu
Zm9udERlc2NyaXB0aW9uKCksIGZhbWlseSk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAg
ICAgICAgcmVzdWx0ID0gZ2V0Q2FjaGVkRm9udERhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwg
ZmFtaWx5KTsKICAgICB9Ci0KLSAgICBpZiAoIWN1cnJGYW1pbHkpCisgICAgaWYgKGZhbWlseUlu
ZGV4ID09IGZhbWlseUNvdW50KQogICAgICAgICBmYW1pbHlJbmRleCA9IGNBbGxGYW1pbGllc1Nj
YW5uZWQ7CiAKLSAgICBpZiAoIXJlc3VsdCkKKyAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAv
LyBXZSBkaWRuJ3QgZmluZCBhIGZvbnQuIFRyeSB0byBmaW5kIGEgc2ltaWxhciBmb250IHVzaW5n
IG91ciBvd24gc3BlY2lmaWMga25vd2xlZGdlIGFib3V0IG91ciBwbGF0Zm9ybS4KICAgICAgICAg
Ly8gRm9yIGV4YW1wbGUgb24gT1MgWCwgd2Uga25vdyB0byBtYXAgYW55IGZhbWlsaWVzIGNvbnRh
aW5pbmcgdGhlIHdvcmRzIEFyYWJpYywgUGFzaHRvLCBvciBVcmR1IHRvIHRoZQogICAgICAgICAv
LyBHZWV6YSBQcm8gZm9udC4KICAgICAgICAgcmVzdWx0ID0gZ2V0U2ltaWxhckZvbnRQbGF0Zm9y
bURhdGEoZm9udCk7CisgICAgfQogCi0gICAgaWYgKCFyZXN1bHQgJiYgc3RhcnRJbmRleCA9PSAw
KSB7CisgICAgaWYgKCFyZXN1bHQgJiYgaXNGaXJzdCkgewogICAgICAgICAvLyBJZiBpdCdzIHRo
ZSBwcmltYXJ5IGZvbnQgdGhhdCB3ZSBjb3VsZG4ndCBmaW5kLCB3ZSB0cnkgdGhlIGZvbGxvd2lu
Zy4gSW4gYWxsIG90aGVyIGNhc2VzLCB3ZSB3aWxsCiAgICAgICAgIC8vIGp1c3QgdXNlIHBlci1j
aGFyYWN0ZXIgc3lzdGVtIGZhbGxiYWNrLgotCiAgICAgICAgIGlmIChmb250U2VsZWN0b3IpIHsK
ICAgICAgICAgICAgIC8vIFRyeSB0aGUgdXNlcidzIHByZWZlcnJlZCBzdGFuZGFyZCBmb250Lgog
ICAgICAgICAgICAgaWYgKFJlZlB0cjxGb250RGF0YT4gZGF0YSA9IGZvbnRTZWxlY3Rvci0+Z2V0
Rm9udERhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgc3RhbmRhcmRGYW1pbHkpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKICAgICAgICAgfQotCiAgICAgICAgIC8v
IFN0aWxsIG5vIHJlc3VsdC4gIEhhbmQgYmFjayBvdXIgbGFzdCByZXNvcnQgZmFsbGJhY2sgZm9u
dC4KICAgICAgICAgcmVzdWx0ID0gZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250LmZvbnRE
ZXNjcmlwdGlvbigpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250RGVzY3JpcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5jcHAJKHJldmlzaW9uIDE1MDQyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IE5p
Y2hvbGFzIFNoYW5rcyA8Y29udGFjdEBuaWNrc2hhbmtzLmNvbT4KLSAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHN0cnVjdCBTYW1lU2l6ZUFzRm9udERlc2NyaXB0aW9uIHsKLSAgICBGb250RmFtaWx5IGZhbWls
eUxpc3Q7CisgICAgVmVjdG9yPEF0b21pY1N0cmluZywgMT4gZmFtaWxpZXM7CiAgICAgUmVmUHRy
PEZvbnRGZWF0dXJlU2V0dGluZ3M+IG1fZmVhdHVyZVNldHRpbmdzOwogICAgIGZsb2F0IHNpemVz
WzJdOwogICAgIC8vIEZYSU1FOiBNYWtlIHRoZW0gZml0IGludG8gb25lIHdvcmQuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24u
aAkocmV2aXNpb24gMTUwNDI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udERlc2NyaXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDA3IE5pY2hvbGFzIFNoYW5rcyA8d2Via2l0QG5pY2tzaGFua3MuY29tPgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKQEAgLTc3LDcgKzc3LDggQEAgcHVibGljOgogICAgIGVudW0gTGlnYXR1cmVzU3RhdGUg
eyBOb3JtYWxMaWdhdHVyZXNTdGF0ZSwgRGlzYWJsZWRMaWdhdHVyZXNTdGF0ZSwgRW5hYmxlZExp
Z2F0dXJlc1N0YXRlIH07CiAKICAgICBGb250RGVzY3JpcHRpb24oKQotICAgICAgICA6IG1fc3Bl
Y2lmaWVkU2l6ZSgwKQorICAgICAgICA6IG1fZmFtaWxpZXMoMSkKKyAgICAgICAgLCBtX3NwZWNp
ZmllZFNpemUoMCkKICAgICAgICAgLCBtX2NvbXB1dGVkU2l6ZSgwKQogICAgICAgICAsIG1fb3Jp
ZW50YXRpb24oSG9yaXpvbnRhbCkKICAgICAgICAgLCBtX25vbkNKS0dseXBoT3JpZW50YXRpb24o
Tm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQpCkBAIC0xMDMsOSArMTA0LDEyIEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250RGVzY3JpcHRpb24mKSBj
b25zdDsKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9udERlc2NyaXB0aW9uJiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KLSAgICAKLSAgICBjb25zdCBGb250
RmFtaWx5JiBmYW1pbHkoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlseUxpc3Q7IH0KLSAgICBGb250
RmFtaWx5JiBmaXJzdEZhbWlseSgpIHsgcmV0dXJuIG1fZmFtaWx5TGlzdDsgfQorCisgICAgdW5z
aWduZWQgZmFtaWx5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlsaWVzLnNpemUoKTsgfQor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmlyc3RGYW1pbHkoKSBjb25zdCB7IHJldHVybiBmYW1p
bHlBdCgwKTsgfQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5QXQodW5zaWduZWQgaSkg
Y29uc3QgeyByZXR1cm4gbV9mYW1pbGllc1tpXTsgfQorICAgIGNvbnN0IFZlY3RvcjxBdG9taWNT
dHJpbmcsIDE+JiBmYW1pbGllcygpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWxpZXM7IH0KKwogICAg
IGZsb2F0IHNwZWNpZmllZFNpemUoKSBjb25zdCB7IHJldHVybiBtX3NwZWNpZmllZFNpemU7IH0K
ICAgICBmbG9hdCBjb21wdXRlZFNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbXB1dGVkU2l6ZTsg
fQogICAgIEZvbnRJdGFsaWMgaXRhbGljKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9u
dEl0YWxpYz4obV9pdGFsaWMpOyB9CkBAIC0xMTgsNyArMTIyLDcgQEAgcHVibGljOgogICAgIEdl
bmVyaWNGYW1pbHlUeXBlIGdlbmVyaWNGYW1pbHkoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxHZW5lcmljRmFtaWx5VHlwZT4obV9nZW5lcmljRmFtaWx5KTsgfQogICAgIGJvb2wgdXNlUHJp
bnRlckZvbnQoKSBjb25zdCB7IHJldHVybiBtX3VzZVByaW50ZXJGb250OyB9CiAgICAgLy8gb25s
eSB1c2UgZml4ZWQgZGVmYXVsdCBzaXplIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgZm9udCBmYW1p
bHksIGFuZCB0aGF0IGZhbWlseSBpcyAibW9ub3NwYWNlIgotICAgIGJvb2wgdXNlRml4ZWREZWZh
dWx0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGdlbmVyaWNGYW1pbHkoKSA9PSBNb25vc3BhY2VGYW1p
bHkgJiYgIWZhbWlseSgpLm5leHQoKSAmJiBmYW1pbHkoKS5mYW1pbHkoKSA9PSBtb25vc3BhY2VG
YW1pbHk7IH0KKyAgICBib29sIHVzZUZpeGVkRGVmYXVsdFNpemUoKSBjb25zdCB7IHJldHVybiBn
ZW5lcmljRmFtaWx5KCkgPT0gTW9ub3NwYWNlRmFtaWx5ICYmIGZhbWlseUNvdW50KCkgPT0gMSAm
JiBmaXJzdEZhbWlseSgpID09IG1vbm9zcGFjZUZhbWlseTsgfQogICAgIEZvbnRSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250UmVuZGVy
aW5nTW9kZT4obV9yZW5kZXJpbmdNb2RlKTsgfQogICAgIEtlcm5pbmcga2VybmluZygpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PEtlcm5pbmc+KG1fa2VybmluZyk7IH0KICAgICBMaWdhdHVy
ZXNTdGF0ZSBjb21tb25MaWdhdHVyZXNTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PExpZ2F0dXJlc1N0YXRlPihtX2NvbW1vbkxpZ2F0dXJlc1N0YXRlKTsgfQpAQCAtMTM3LDcgKzE0
MSw5IEBAIHB1YmxpYzoKICAgICBGb250RmVhdHVyZVNldHRpbmdzKiBmZWF0dXJlU2V0dGluZ3Mo
KSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVTZXR0aW5ncy5nZXQoKTsgfQogICAgIEZvbnREZXNj
cmlwdGlvbiBtYWtlTm9ybWFsRmVhdHVyZVNldHRpbmdzKCkgY29uc3Q7CiAKLSAgICB2b2lkIHNl
dEZhbWlseShjb25zdCBGb250RmFtaWx5JiBmYW1pbHkpIHsgbV9mYW1pbHlMaXN0ID0gZmFtaWx5
OyB9CisgICAgdm9pZCBzZXRPbmVGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpIHsg
QVNTRVJUKG1fZmFtaWxpZXMuc2l6ZSgpID09IDEpOyBtX2ZhbWlsaWVzWzBdID0gZmFtaWx5OyB9
CisgICAgdm9pZCBzZXRGYW1pbGllcyhjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nLCAxPiYgZmFt
aWxpZXMpIHsgbV9mYW1pbGllcyA9IGZhbWlsaWVzOyB9CisgICAgdm9pZCBhZG9wdEZhbWlsaWVz
KFZlY3RvcjxBdG9taWNTdHJpbmcsIDE+IGZhbWlsaWVzKSB7IG1fZmFtaWxpZXMuc3dhcChmYW1p
bGllcyk7IH0KICAgICB2b2lkIHNldENvbXB1dGVkU2l6ZShmbG9hdCBzKSB7IG1fY29tcHV0ZWRT
aXplID0gY2xhbXBUb0Zsb2F0KHMpOyB9CiAgICAgdm9pZCBzZXRTcGVjaWZpZWRTaXplKGZsb2F0
IHMpIHsgbV9zcGVjaWZpZWRTaXplID0gY2xhbXBUb0Zsb2F0KHMpOyB9CiAgICAgdm9pZCBzZXRJ
dGFsaWMoRm9udEl0YWxpYyBpKSB7IG1faXRhbGljID0gaTsgfQpAQCAtMTY0LDcgKzE3MCw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldEZlYXR1cmVTZXR0aW5ncyhQYXNzUmVmUHRyPEZvbnRGZWF0
dXJlU2V0dGluZ3M+IHNldHRpbmdzKSB7IG1fZmVhdHVyZVNldHRpbmdzID0gc2V0dGluZ3M7IH0K
IAogcHJpdmF0ZToKLSAgICBGb250RmFtaWx5IG1fZmFtaWx5TGlzdDsgLy8gVGhlIGxpc3Qgb2Yg
Zm9udCBmYW1pbGllcyB0byBiZSB1c2VkLgorICAgIFZlY3RvcjxBdG9taWNTdHJpbmcsIDE+IG1f
ZmFtaWxpZXM7CiAgICAgUmVmUHRyPEZvbnRGZWF0dXJlU2V0dGluZ3M+IG1fZmVhdHVyZVNldHRp
bmdzOwogCiAgICAgZmxvYXQgbV9zcGVjaWZpZWRTaXplOyAgIC8vIFNwZWNpZmllZCBDU1MgdmFs
dWUuIEluZGVwZW5kZW50IG9mIHJlbmRlcmluZyBpc3N1ZXMgc3VjaCBhcyBpbnRlZ2VyCkBAIC0y
MDMsNyArMjA5LDcgQEAgcHJpdmF0ZToKIAogaW5saW5lIGJvb2wgRm9udERlc2NyaXB0aW9uOjpv
cGVyYXRvcj09KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fZmFtaWx5TGlzdCA9PSBvdGhlci5tX2ZhbWlseUxpc3QKKyAgICByZXR1cm4gbV9mYW1p
bGllcyA9PSBvdGhlci5tX2ZhbWlsaWVzCiAgICAgICAgICYmIG1fc3BlY2lmaWVkU2l6ZSA9PSBv
dGhlci5tX3NwZWNpZmllZFNpemUKICAgICAgICAgJiYgbV9jb21wdXRlZFNpemUgPT0gb3RoZXIu
bV9jb21wdXRlZFNpemUKICAgICAgICAgJiYgbV9pdGFsaWMgPT0gb3RoZXIubV9pdGFsaWMKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuY3Bw
CShyZXZpc2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250RmFtaWx5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NiArMSBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250RmFtaWx5LmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRGYW1pbHkmIGEsIGNv
bnN0IEZvbnRGYW1pbHkmIGIpCi17Ci0gICAgaWYgKGEuZmFtaWx5KCkgIT0gYi5mYW1pbHkoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IEZvbnRGYW1pbHkqIGFwOwotICAgIGNv
bnN0IEZvbnRGYW1pbHkqIGJwOwotICAgIGZvciAoYXAgPSBhLm5leHQoKSwgYnAgPSBiLm5leHQo
KTsgYXAgIT0gYnA7IGFwID0gYXAtPm5leHQoKSwgYnAgPSBicC0+bmV4dCgpKSB7Ci0gICAgICAg
IGlmICghYXAgfHwgIWJwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAo
YXAtPmZhbWlseSgpICE9IGJwLT5mYW1pbHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KKy8vIFJlbW92ZSBtZS4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFtaWx5LmgJKHJldmlzaW9u
IDE1MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHku
aAkod29ya2luZyBjb3B5KQpAQCAtMSw5NiArMSBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
Zm5kZWYgRm9udEZhbWlseV9oCi0jZGVmaW5lIEZvbnRGYW1pbHlfaAotCi0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbWljU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU2hhcmVk
Rm9udEZhbWlseTsKLQotY2xhc3MgRm9udEZhbWlseSB7Ci1wdWJsaWM6Ci0gICAgRm9udEZhbWls
eSgpIHsgfQotICAgIH5Gb250RmFtaWx5KCk7Ci0KLSAgICB2b2lkIHNldEZhbWlseShjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseSkgeyBtX2ZhbWlseSA9IGZhbWlseTsgfQotICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgZmFtaWx5KCkgY29uc3QgeyByZXR1cm4gbV9mYW1pbHk7IH0KLSAgICBib29s
IGZhbWlseUlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlseS5pc0VtcHR5KCk7IH0KLQot
ICAgIGNvbnN0IEZvbnRGYW1pbHkqIG5leHQoKSBjb25zdDsKLQotICAgIHZvaWQgYXBwZW5kRmFt
aWx5KFBhc3NSZWZQdHI8U2hhcmVkRm9udEZhbWlseT4pOwotICAgIFBhc3NSZWZQdHI8U2hhcmVk
Rm9udEZhbWlseT4gcmVsZWFzZU5leHQoKTsKLQotcHJpdmF0ZToKLSAgICBBdG9taWNTdHJpbmcg
bV9mYW1pbHk7Ci0gICAgUmVmUHRyPFNoYXJlZEZvbnRGYW1pbHk+IG1fbmV4dDsKLX07Ci0KLWNs
YXNzIFNoYXJlZEZvbnRGYW1pbHkgOiBwdWJsaWMgRm9udEZhbWlseSwgcHVibGljIFJlZkNvdW50
ZWQ8U2hhcmVkRm9udEZhbWlseT4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNo
YXJlZEZvbnRGYW1pbHk+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNoYXJlZEZvbnRGYW1pbHkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBTaGFyZWRGb250
RmFtaWx5KCkgeyB9Ci19OwotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udEZhbWlseSYsIGNv
bnN0IEZvbnRGYW1pbHkmKTsKLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9udEZhbWls
eSYgYSwgY29uc3QgRm9udEZhbWlseSYgYikgeyByZXR1cm4gIShhID09IGIpOyB9Ci0KLWlubGlu
ZSBGb250RmFtaWx5Ojp+Rm9udEZhbWlseSgpCi17Ci0gICAgLy8gVGhpcyBjb2RlIGNhbWUgZnJv
bSByZW1vdmVkIExpc3RSZWZQdHIgdG8gYXZvaWQgcG9zc2libGUgb3ZlcmZsb3dpbmcgdGhlIHN0
YWNrLgotICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgbmVlZCBpdD8KLSAgICBSZWZQdHI8U2hh
cmVkRm9udEZhbWlseT4gcmVhcGVyID0gbV9uZXh0LnJlbGVhc2UoKTsKLSAgICB3aGlsZSAocmVh
cGVyICYmIHJlYXBlci0+aGFzT25lUmVmKCkpCi0gICAgICAgIHJlYXBlciA9IHJlYXBlci0+cmVs
ZWFzZU5leHQoKTsgLy8gaW1wbGljaXRseSBwcm90ZWN0cyByZWFwZXItPm5leHQsIHRoZW4gZGVy
ZWZzIHJlYXBlcgotfQotCi1pbmxpbmUgY29uc3QgRm9udEZhbWlseSogRm9udEZhbWlseTo6bmV4
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbmV4dC5nZXQoKTsKLX0KLQotaW5saW5lIHZvaWQg
Rm9udEZhbWlseTo6YXBwZW5kRmFtaWx5KFBhc3NSZWZQdHI8U2hhcmVkRm9udEZhbWlseT4gZmFt
aWx5KQotewotICAgIG1fbmV4dCA9IGZhbWlseTsKLX0KLQotaW5saW5lIFBhc3NSZWZQdHI8U2hh
cmVkRm9udEZhbWlseT4gRm9udEZhbWlseTo6cmVsZWFzZU5leHQoKQotewotICAgIHJldHVybiBt
X25leHQucmVsZWFzZSgpOwotfQotCi19Ci0KLSNlbmRpZgorLy8gUmVtb3ZlIG1lLgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hl
TWFjLm1tCShyZXZpc2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvRm9udENhY2hlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksMTggKzE1OSwx
NiBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdlCiAgICAgLy8gdGhl
IHByZXNlbmNlIG9mIGtleXdvcmRzIGluIHRoZSB0aGUgcmVxdWVzdGVkIG5hbWVzLiAgRm9yIGV4
YW1wbGUsIHdlJ2xsCiAgICAgLy8gbWF0Y2ggYW55IG5hbWUgdGhhdCBjb250YWlucyAiQXJhYmlj
IiB0byBHZWV6YSBQcm8uCiAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0
YTsKLSAgICBjb25zdCBGb250RmFtaWx5KiBjdXJyRmFtaWx5ID0gJmZvbnQuZm9udERlc2NyaXB0
aW9uKCkuZmFtaWx5KCk7Ci0gICAgd2hpbGUgKGN1cnJGYW1pbHkgJiYgIXNpbXBsZUZvbnREYXRh
KSB7Ci0gICAgICAgIGlmIChjdXJyRmFtaWx5LT5mYW1pbHkoKS5sZW5ndGgoKSkgewotICAgICAg
ICAgICAgc3RhdGljIFN0cmluZyogbWF0Y2hXb3Jkc1szXSA9IHsgbmV3IFN0cmluZygiQXJhYmlj
IiksIG5ldyBTdHJpbmcoIlBhc2h0byIpLCBuZXcgU3RyaW5nKCJVcmR1IikgfTsKLSAgICAgICAg
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBnZWV6YVN0ciwgKCJHZWV6YSBQ
cm8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgICAgICAgICBm
b3IgKGludCBqID0gMDsgaiA8IDMgJiYgIXNpbXBsZUZvbnREYXRhOyArK2opCi0gICAgICAgICAg
ICAgICAgaWYgKGN1cnJGYW1pbHktPmZhbWlseSgpLmNvbnRhaW5zKCptYXRjaFdvcmRzW2pdLCBm
YWxzZSkpCi0gICAgICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9u
dERhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgZ2VlemFTdHIpOwotICAgICAgICB9Ci0gICAg
ICAgIGN1cnJGYW1pbHkgPSBjdXJyRmFtaWx5LT5uZXh0KCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGZvbnQuZmFtaWx5Q291bnQoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5ID0gZm9udC5mYW1pbHlBdChpKTsKKyAgICAgICAgaWYgKGZhbWlseS5p
c0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgc3RhdGljIFN0cmluZyog
bWF0Y2hXb3Jkc1szXSA9IHsgbmV3IFN0cmluZygiQXJhYmljIiksIG5ldyBTdHJpbmcoIlBhc2h0
byIpLCBuZXcgU3RyaW5nKCJVcmR1IikgfTsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChB
dG9taWNTdHJpbmcsIGdlZXphU3RyLCAoIkdlZXphIFBybyIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpKTsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzICYmICFzaW1w
bGVGb250RGF0YTsgKytqKQorICAgICAgICAgICAgaWYgKGZhbWlseS5jb250YWlucygqbWF0Y2hX
b3Jkc1tqXSwgZmFsc2UpKQorICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2Fj
aGVkRm9udERhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgZ2VlemFTdHIpOwogICAgIH0KLQog
ICAgIHJldHVybiBzaW1wbGVGb250RGF0YS5yZWxlYXNlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0JKHJldmlzaW9uIDE1MDQyOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjA1
LDcgKzYwNSw3IEBAIEZvbnREZXNjcmlwdGlvbiBUaGVtZU1hYzo6Y29udHJvbEZvbnQoQ28KICAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlv
bjo6U2VyaWZGYW1pbHkpOwogCiAgICAgICAgICAgICBOU0ZvbnQqIG5zRm9udCA9IFtOU0ZvbnQg
c3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHN5c3RlbUZvbnRTaXplRm9yQ29udHJvbFNpemU6Y29u
dHJvbFNpemVGb3JGb250KGZvbnQpXV07Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRpb24uZmly
c3RGYW1pbHkoKS5zZXRGYW1pbHkoW25zRm9udCB3ZWJDb3JlRmFtaWx5TmFtZV0pOworICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShbbnNGb250IHdlYkNvcmVGYW1pbHlO
YW1lXSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFtuc0Zv
bnQgcG9pbnRTaXplXSAqIHpvb21GYWN0b3IpOwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldFNwZWNpZmllZFNpemUoW25zRm9udCBwb2ludFNpemVdICogem9vbUZhY3Rvcik7CiAgICAg
ICAgICAgICByZXR1cm4gZm9udERlc2NyaXB0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3Bw
CShyZXZpc2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5z
Y29kZXIvRm9udFRyYW5zY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBA
IEZvbnRUcmFuc2NvZGVyOjpGb250VHJhbnNjb2RlcigpCiAKIEZvbnRUcmFuc2NvZGVyOjpDb252
ZXJ0ZXJUeXBlIEZvbnRUcmFuc2NvZGVyOjpjb252ZXJ0ZXJUeXBlKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBUZXh0RW5jb2RpbmcqIGVuY29kaW5nKSBjb25z
dAogewotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZm9udEZhbWlseSA9IGZvbnREZXNjcmlwdGlv
bi5mYW1pbHkoKS5mYW1pbHkoKS5zdHJpbmcoKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZv
bnRGYW1pbHkgPSBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKTsKICAgICBpZiAoIWZvbnRG
YW1pbHkuaXNOdWxsKCkpIHsKICAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIENvbnZlcnRl
clR5cGU+Ojpjb25zdF9pdGVyYXRvciBmb3VuZCA9IG1fY29udmVydGVyVHlwZXMuZmluZChmb250
RmFtaWx5KTsKICAgICAgICAgaWYgKGZvdW5kICE9IG1fY29udmVydGVyVHlwZXMuZW5kKCkpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAxNTA0
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwOCw3ICsyMDgsNyBAQCB2b2lkIFJlbmRlclRleHQ6OnN0eWxlRGlkQ2hhbmdl
KFN0eWxlRGlmCiAgICAgaWYgKCFvbGRTdHlsZSkgewogICAgICAgICB1cGRhdGVOZWVkc1RyYW5z
Y29kaW5nKCk7CiAgICAgICAgIG5lZWRzUmVzZXRUZXh0ID0gbV9uZWVkc1RyYW5zY29kaW5nOwot
ICAgIH0gZWxzZSBpZiAob2xkU3R5bGUtPmZvbnQoKS5uZWVkc1RyYW5zY29kaW5nKCkgIT0gbmV3
U3R5bGUtPmZvbnQoKS5uZWVkc1RyYW5zY29kaW5nKCkgfHwgKG5ld1N0eWxlLT5mb250KCkubmVl
ZHNUcmFuc2NvZGluZygpICYmIG9sZFN0eWxlLT5mb250KCkuZmFtaWx5KCkuZmFtaWx5KCkgIT0g
bmV3U3R5bGUtPmZvbnQoKS5mYW1pbHkoKS5mYW1pbHkoKSkpIHsKKyAgICB9IGVsc2UgaWYgKG9s
ZFN0eWxlLT5mb250KCkubmVlZHNUcmFuc2NvZGluZygpICE9IG5ld1N0eWxlLT5mb250KCkubmVl
ZHNUcmFuc2NvZGluZygpIHx8IChuZXdTdHlsZS0+Zm9udCgpLm5lZWRzVHJhbnNjb2RpbmcoKSAm
JiBvbGRTdHlsZS0+Zm9udCgpLmZvbnREZXNjcmlwdGlvbigpLmZhbWlsaWVzKCkgIT0gbmV3U3R5
bGUtPmZvbnQoKS5mb250RGVzY3JpcHRpb24oKS5mYW1pbGllcygpKSkgewogICAgICAgICB1cGRh
dGVOZWVkc1RyYW5zY29kaW5nKCk7CiAgICAgICAgIG5lZWRzUmVzZXRUZXh0ID0gdHJ1ZTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bC5jcHAJKHJldmlzaW9uIDE1MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Miw3ICsyNjIsNyBAQCBmbG9h
dCBSZW5kZXJUZXh0Q29udHJvbDo6c2NhbGVFbVRvVW5pdHMoCiB2b2lkIFJlbmRlclRleHRDb250
cm9sOjpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2Fs
V2lkdGgsIExheW91dFVuaXQmIG1heExvZ2ljYWxXaWR0aCkgY29uc3QKIHsKICAgICAvLyBVc2Ug
YXZlcmFnZSBjaGFyYWN0ZXIgd2lkdGguIE1hdGNoZXMgSUUuCi0gICAgQXRvbWljU3RyaW5nIGZh
bWlseSA9IHN0eWxlKCktPmZvbnQoKS5mYW1pbHkoKS5mYW1pbHkoKTsKKyAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGZhbWlseSA9IHN0eWxlKCktPmZvbnQoKS5maXJzdEZhbWlseSgpOwogICAgIG1h
eExvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZENvbnRlbnRMb2dpY2FsV2lkdGgoY29uc3RfY2FzdDxS
ZW5kZXJUZXh0Q29udHJvbCo+KHRoaXMpLT5nZXRBdmdDaGFyV2lkdGgoZmFtaWx5KSk7CiAgICAg
aWYgKFJlbmRlckJveCogaW5uZXJUZXh0UmVuZGVyQm94ID0gaW5uZXJUZXh0RWxlbWVudCgpLT5y
ZW5kZXJCb3goKSkKICAgICAgICAgbWF4TG9naWNhbFdpZHRoICs9IGlubmVyVGV4dFJlbmRlckJv
eC0+cGFkZGluZ1N0YXJ0KCkgKyBpbm5lclRleHRSZW5kZXJCb3gtPnBhZGRpbmdFbmQoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIzLDcgKzMyMyw3IEBAIExheW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjoKICAgICBMYXlvdXRVbml0IHJlc3VsdCA9IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGNlaWxl
ZExheW91dFVuaXQoY2hhcldpZHRoICogZmFjdG9yKSk7CiAKICAgICBmbG9hdCBtYXhDaGFyV2lk
dGggPSAwLmY7Ci0gICAgQXRvbWljU3RyaW5nIGZhbWlseSA9IHN0eWxlKCktPmZvbnQoKS5mYW1p
bHkoKS5mYW1pbHkoKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSA9IHN0eWxlKCkt
PmZvbnQoKS5maXJzdEZhbWlseSgpOwogICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMgdGhl
IGRlZmF1bHQgZm9udCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAogICAgIC8vIG9m
IE1TIFNoZWxsIERsZywgdGhlIGRlZmF1bHQgZm9udCBmb3IgdGV4dGFyZWFzIGluIEZpcmVmb3gs
IFNhZmFyaSBXaW4gYW5kCiAgICAgLy8gSUUgZm9yIHNvbWUgZW5jb2RpbmdzIChpbiBJRSwgdGhl
IGRlZmF1bHQgZm9udCBpcyBlbmNvZGluZyBzcGVjaWZpYykuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAxNTA0MjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTY1MSw3ICs2NTEsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzeXN0ZW1Gb250KGludCBjc3NW
CiAgICAgICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hh
cmVkRm9udE1hbmFnZXJdOwogICAgICAgICBjYWNoZWREZXNjLT5zZXRJc0Fic29sdXRlU2l6ZSh0
cnVlKTsKICAgICAgICAgY2FjaGVkRGVzYy0+c2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRp
b246Ok5vRmFtaWx5KTsKLSAgICAgICAgY2FjaGVkRGVzYy0+Zmlyc3RGYW1pbHkoKS5zZXRGYW1p
bHkoW2ZvbnQgd2ViQ29yZUZhbWlseU5hbWVdKTsKKyAgICAgICAgY2FjaGVkRGVzYy0+c2V0T25l
RmFtaWx5KFtmb250IHdlYkNvcmVGYW1pbHlOYW1lXSk7CiAgICAgICAgIGNhY2hlZERlc2MtPnNl
dFNwZWNpZmllZFNpemUoW2ZvbnQgcG9pbnRTaXplXSk7CiAgICAgICAgIGNhY2hlZERlc2MtPnNl
dFdlaWdodCh0b0ZvbnRXZWlnaHQoW2ZvbnRNYW5hZ2VyIHdlaWdodE9mRm9udDpmb250XSkpOwog
ICAgICAgICBjYWNoZWREZXNjLT5zZXRJdGFsaWMoW2ZvbnRNYW5hZ2VyIHRyYWl0c09mRm9udDpm
b250XSAmIE5TSXRhbGljRm9udE1hc2spOwpAQCAtMTA1OCw3ICsxMDU4LDcgQEAgdm9pZCBSZW5k
ZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21Db250cm9sUwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRH
ZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHkpOwogCiAgICAgTlNGb250
KiBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQgc3lzdGVtRm9udFNpemVG
b3JDb250cm9sU2l6ZTpjb250cm9sU2l6ZV1dOwotICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZh
bWlseSgpLnNldEZhbWlseShbZm9udCB3ZWJDb3JlRmFtaWx5TmFtZV0pOworICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRPbmVGYW1pbHkoW2ZvbnQgd2ViQ29yZUZhbWlseU5hbWVdKTsKICAgICBmb250
RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFtmb250IHBvaW50U2l6ZV0gKiBzdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShbZm9u
dCBwb2ludFNpemVdICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSk7CiAK
</data>
<flag name="commit-queue"
          id="224338"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202916</attachid>
            <date>2013-05-26 06:05:36 -0700</date>
            <delta_ts>2013-05-26 06:44:54 -0700</delta_ts>
            <desc>patch 2</desc>
            <filename>font-families-vector-2.patch</filename>
            <type>text/plain</type>
            <size>39436</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MDcxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDEzLTA1LTI2ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgVmVjdG9yIGluc3RlYWQg
b2YgY3VzdG9tIGxpbmtlZCBsaXN0IGZvciBmb250IGZhbWlsaWVzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY3ODMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHZXQgcmlkIG9mIEZvbnRGYW1pbHkgYW5k
IFNoYXJlZEZvbnRGYW1pbHkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6aGFzU2FtZUZvbnQpOgorICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zm9udEZhbWlseUZyb21TdHlsZSk6Cisg
ICAgICAgICogY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUZvbnRGYW1pbHk6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250RmFtaWx5OjphcHBseUluaXRpYWxWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udEZhbWlseTo6YXBwbHlWYWx1ZSk6Cisg
ICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6c3R5bGVGb3JEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjppbml0aWFsaXplRm9udFN0eWxlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpmb250KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6c2V0Rm9udCk6CisgICAgICAgICogcGFnZS9QcmludENvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UHJpbnRDb250ZXh0OjpwYWdlUHJvcGVydHkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZpcnN0RmFtaWx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZhbWlseUNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnQ6OmZhbWlseUF0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fj
aGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250RGF0YSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcDoKKyAgICAgICAgKFNh
bWVTaXplQXNGb250RGVzY3JpcHRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnREZXNjcmlwdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpGb250
RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpmYW1pbHlD
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OmZpcnN0RmFtaWx5KToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6ZmFtaWx5QXQpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpmYW1pbGllcyk6CisgICAgICAgIChXZWJDb3JlOjpG
b250RGVzY3JpcHRpb246OnVzZUZpeGVkRGVmYXVsdFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udERlc2NyaXB0aW9uOjpzZXRPbmVGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uOjpzZXRGYW1pbGllcyk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRp
b246OnN3YXBGYW1pbGllcyk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246Om9w
ZXJhdG9yPT0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuY3BwOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0v
bWFjL1RoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVNYWM6OmNvbnRyb2xGb250
KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udFRyYW5zY29kZXI6OmNvbnZlcnRlclR5cGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHQ6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmNvbXB1dGVJ
bnRyaW5zaWNMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6cHJlZmVycmVkQ29udGVudExvZ2ljYWxXaWR0aCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OnN5c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldEZv
bnRGcm9tQ29udHJvbFNpemUpOgorCiAyMDEzLTA1LTI2ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5n
QGFwcGxlLmNvbT4KIAogICAgICAgICBUcmVlU2NvcGU6OnJvb3ROb2RlKCkgc2hvdWxkIHJldHVy
biBhIENvbnRhaW5lck5vZGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDE1
MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNDIsNyArMzI0Miw3IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aGFzU2FtZUYKICAgICBpZiAoIW1fcmVuZGVyZXIgfHwg
IXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuIG1fcmVu
ZGVyZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmZhbWlseSgpID09IHJlbmRlcmVyLT5z
dHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5mYW1pbHkoKTsKKyAgICByZXR1cm4gbV9yZW5kZXJl
ci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuZmFtaWxpZXMoKSA9PSByZW5kZXJlci0+c3R5
bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuZmFtaWxpZXMoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpoYXNTYW1lRm9udENvbG9yKFJlbmRlck9iamVjdCogcmVuZGVyZXIp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTUwNDI5KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NDcs
MTEgKzE0NDcsMTAgQEAgc3RhdGljIHZvaWQgbG9nVW5pbXBsZW1lbnRlZFByb3BlcnR5SUQoQwog
fQogCiBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1pbHlGcm9tU3R5bGUo
UmVuZGVyU3R5bGUqIHN0eWxlKQotewotICAgIGNvbnN0IEZvbnRGYW1pbHkmIGZpcnN0RmFtaWx5
ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmZhbWlseSgpOworICAgIHsKICAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgp
OwotICAgIGZvciAoY29uc3QgRm9udEZhbWlseSogZmFtaWx5ID0gJmZpcnN0RmFtaWx5OyBmYW1p
bHk7IGZhbWlseSA9IGZhbWlseS0+bmV4dCgpKQotICAgICAgICBsaXN0LT5hcHBlbmQodmFsdWVG
b3JGYW1pbHkoZmFtaWx5LT5mYW1pbHkoKSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdHlsZS0+Zm9udCgpLmZhbWlseUNvdW50KCk7ICsraSkKKyAgICAgICAgbGlzdC0+YXBwZW5k
KHZhbHVlRm9yRmFtaWx5KHN0eWxlLT5mb250KCkuZmFtaWx5QXQoaSkpKTsKICAgICByZXR1cm4g
bGlzdC5yZWxlYXNlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVk
U3R5bGVCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVj
YXRlZFN0eWxlQnVpbGRlci5jcHAJKHJldmlzaW9uIDE1MDQyOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2NCw3ICs2NjUsNyBA
QCBwdWJsaWM6CiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBwYXJlbnRGb250RGVzY3JpcHRpb24g
PSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAg
ICAgCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KHBhcmVudEZvbnRE
ZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
RmFtaWx5KHBhcmVudEZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpKTsKKyAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEZhbWlsaWVzKHBhcmVudEZvbnREZXNjcmlwdGlvbi5mYW1pbGllcygp
KTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzU3BlY2lmaWVkRm9udChwYXJlbnRGb250
RGVzY3JpcHRpb24uaXNTcGVjaWZpZWRGb250KCkpOwogICAgICAgICBzdHlsZVJlc29sdmVyLT5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
Njc5LDggKzY4MCw4IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3
b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpCiAgICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHN0eWxl
UmVzb2x2ZXItPmZvbnRTaXplRm9yS2V5d29yZChzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLCBD
U1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEsIGZhbHNl
KSk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KGluaXRpYWxEZXNj
LmdlbmVyaWNGYW1pbHkoKSk7Ci0gICAgICAgIGlmICghaW5pdGlhbERlc2MuZmlyc3RGYW1pbHko
KS5mYW1pbHlJc0VtcHR5KCkpCi0gICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5
KGluaXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkpOworICAgICAgICBpZiAoIWluaXRpYWxEZXNjLmZp
cnN0RmFtaWx5KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZh
bWlsaWVzKGluaXRpYWxEZXNjLmZhbWlsaWVzKCkpOwogCiAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICByZXR1cm47CkBA
IC02OTIsMjMgKzY5MywyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBGb250RmFtaWx5JiBmaXJzdEZhbWlseSA9
IGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpOwotICAgICAgICBGb250RmFtaWx5KiBjdXJy
RmFtaWx5ID0gMDsKLQogICAgICAgICAvLyBCZWZvcmUgbWFwcGluZyBpbiBhIG5ldyBmb250LWZh
bWlseSBwcm9wZXJ0eSwgd2Ugc2hvdWxkIHJlc2V0IHRoZSBnZW5lcmljIGZhbWlseS4KICAgICAg
ICAgYm9vbCBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSA9IGZvbnREZXNjcmlwdGlvbi51
c2VGaXhlZERlZmF1bHRTaXplKCk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmlj
RmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOwogCisgICAgICAgIFZlY3RvcjxBdG9t
aWNTdHJpbmcsIDE+IGZhbWlsaWVzOwogICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9y
IGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CiAgICAgICAgICAgICBDU1NW
YWx1ZSogaXRlbSA9IGkudmFsdWUoKTsKICAgICAgICAgICAgIGlmICghaXRlbS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4oaXRlbSk7CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgZmFjZTsKLSAgICAgICAgICAgIFNl
dHRpbmdzKiBzZXR0aW5ncyA9IHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCktPnNldHRpbmdzKCk7
CiAgICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLT5pc1N0cmluZygpKQogICAgICAgICAgICAg
ICAgIGZhY2UgPSBjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7Ci0gICAgICAgICAgICBl
bHNlIGlmIChzZXR0aW5ncykgeworICAgICAgICAgICAgZWxzZSBpZiAoU2V0dGluZ3MqIHNldHRp
bmdzID0gc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKSkgewogICAgICAgICAg
ICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAgICAg
ICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEJvZHk6CiAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBz
ZXR0aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5KCk7CkBAIC03NDAsMzEgKzczOCwyMSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
IWZhY2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjdXJyRmFtaWx5KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIEZpbGxpbmcgaW4gdGhlIGZpcnN0IGZhbWlseS4KLSAgICAg
ICAgICAgICAgICAgICAgZmlyc3RGYW1pbHkuc2V0RmFtaWx5KGZhY2UpOwotICAgICAgICAgICAg
ICAgICAgICBmaXJzdEZhbWlseS5hcHBlbmRGYW1pbHkoMCk7IC8vIFJlbW92ZSBhbnkgaW5oZXJp
dGVkIGZhbWlseS1mYWxsYmFjayBsaXN0LgotICAgICAgICAgICAgICAgICAgICBjdXJyRmFtaWx5
ID0gJmZpcnN0RmFtaWx5OwotICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
SXNTcGVjaWZpZWRGb250KGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkgPT0gRm9udERl
c2NyaXB0aW9uOjpOb0ZhbWlseSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgUmVmUHRyPFNoYXJlZEZvbnRGYW1pbHk+IG5ld0ZhbWlseSA9IFNoYXJlZEZv
bnRGYW1pbHk6OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBuZXdGYW1pbHktPnNldEZh
bWlseShmYWNlKTsKLSAgICAgICAgICAgICAgICAgICAgY3VyckZhbWlseS0+YXBwZW5kRmFtaWx5
KG5ld0ZhbWlseSk7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJGYW1pbHkgPSBuZXdGYW1pbHku
Z2V0KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGZhY2UuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
aWYgKGZhbWlsaWVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0SXNTcGVjaWZpZWRGb250KGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkgPT0gRm9u
dERlc2NyaXB0aW9uOjpOb0ZhbWlseSk7CisgICAgICAgICAgICBmYW1pbGllcy5hcHBlbmQoZmFj
ZSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBXZSBjYW4ndCBjYWxsIHVzZUZpeGVkRGVmYXVs
dFNpemUoKSB1bnRpbCBhbGwgbmV3IGZvbnQgZmFtaWxpZXMgaGF2ZSBiZWVuIGFkZGVkCi0gICAg
ICAgIC8vIElmIGN1cnJGYW1pbHkgaXMgbm9uLXplcm8gdGhlbiB3ZSBzZXQgYXQgbGVhc3Qgb25l
IGZhbWlseSBvbiB0aGlzIGRlc2NyaXB0aW9uLgotICAgICAgICBpZiAoY3VyckZhbWlseSkgewot
ICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNj
cmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkgIT0gb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVs
dFNpemUpCi0gICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUoZm9udERl
c2NyaXB0aW9uLCBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQoc3R5bGVSZXNvbHZl
ci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRT
aXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpKTsKKyAgICAgICAgaWYg
KGZhbWlsaWVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZm9udERl
c2NyaXB0aW9uLmFkb3B0RmFtaWxpZXMoZmFtaWxpZXMpOwogCi0gICAgICAgICAgICBzdHlsZVJl
c29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUo
KSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpICE9IG9sZEZhbWlseVVz
ZWRGaXhlZERlZmF1bHRTaXplKQorICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNp
emUoZm9udERlc2NyaXB0aW9uLCBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQoc3R5
bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9u
LmtleXdvcmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpKTsKKwor
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7
IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFs
VmFsdWUsICZhcHBseVZhbHVlKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAkocmV2aXNpb24gMTUwNDI5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjAsOCArOTIwLDcgQEAgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cwogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0
YW5kYXJkRm9udCA9IHNldHRpbmdzLT5zdGFuZGFyZEZvbnRGYW1pbHkoZm9udERlc2NyaXB0aW9u
LnNjcmlwdCgpKTsKICAgICAgICAgaWYgKCFzdGFuZGFyZEZvbnQuaXNFbXB0eSgpKSB7CiAgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246
OlN0YW5kYXJkRmFtaWx5KTsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWls
eSgpLnNldEZhbWlseShzdGFuZGFyZEZvbnQpOwotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LmZpcnN0RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDApOworICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldE9uZUZhbWlseShzdGFuZGFyZEZvbnQpOwogICAgICAgICB9CiAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVlWHhTbWFs
bCArIDEpOwogICAgICAgICBpbnQgc2l6ZSA9IFN0eWxlUmVzb2x2ZXI6OmZvbnRTaXplRm9yS2V5
d29yZChkb2N1bWVudCwgQ1NTVmFsdWVNZWRpdW0sIGZhbHNlKTsKQEAgLTMyNzEsMTAgKzMyNzAs
OCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUoCiAgICAgZm9udERl
c2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkp
OwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChkb2N1bWVudCgpLT5wcmlu
dGluZygpIHx8ICFzZXR0aW5ncy0+c2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQoKSk7CiAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGFuZGFyZEZvbnRGYW1pbHkgPSBkb2N1bWVudFNldHRp
bmdzKCktPnN0YW5kYXJkRm9udEZhbWlseSgpOwotICAgIGlmICghc3RhbmRhcmRGb250RmFtaWx5
LmlzRW1wdHkoKSkgewotICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRG
YW1pbHkoc3RhbmRhcmRGb250RmFtaWx5KTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0
RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDApOwotICAgIH0KKyAgICBpZiAoIXN0YW5kYXJkRm9udEZh
bWlseS5pc0VtcHR5KCkpCisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPbmVGYW1pbHkoc3Rh
bmRhcmRGb250RmFtaWx5KTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoQ1NT
VmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKICAgICBzZXRGb250U2l6ZShmb250
RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1
bSwgZmFsc2UpKTsKICAgICBtX3N0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5
bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAx
NTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgwLDEzICsxOTgwLDExIEBAIFN0cmluZyBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZvbnQoKSAKICAgICBzZXJpYWxpemVkRm9udC5hcHBl
bmROdW1iZXIoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkpOwogICAgIHNlcmlh
bGl6ZWRGb250LmFwcGVuZExpdGVyYWwoInB4Iik7CiAKLSAgICBjb25zdCBGb250RmFtaWx5JiBm
aXJzdEZvbnRGYW1pbHkgPSBmb250RGVzY3JpcHRpb24uZmFtaWx5KCk7Ci0gICAgZm9yIChjb25z
dCBGb250RmFtaWx5KiBmb250RmFtaWx5ID0gJmZpcnN0Rm9udEZhbWlseTsgZm9udEZhbWlseTsg
Zm9udEZhbWlseSA9IGZvbnRGYW1pbHktPm5leHQoKSkgewotICAgICAgICBpZiAoZm9udEZhbWls
eSAhPSAmZmlyc3RGb250RmFtaWx5KQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0
ZSgpLm1fZm9udC5mYW1pbHlDb3VudCgpOyArK2kpIHsKKyAgICAgICAgaWYgKGkpCiAgICAgICAg
ICAgICBzZXJpYWxpemVkRm9udC5hcHBlbmQoJywnKTsKLQogICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGFwcGVuZCBmYW1pbHkgZGlyZWN0bHkgdG8gc2VyaWFsaXplZEZvbnQgcmF0aGVyIHRo
YW4gYnVpbGRpbmcgYSB0ZW1wb3Jhcnkgc3RyaW5nLgotICAgICAgICBTdHJpbmcgZmFtaWx5ID0g
Zm9udEZhbWlseS0+ZmFtaWx5KCk7CisgICAgICAgIFN0cmluZyBmYW1pbHkgPSBzdGF0ZSgpLm1f
Zm9udC5mYW1pbHlBdChpKTsKICAgICAgICAgaWYgKGZhbWlseS5zdGFydHNXaXRoKCItd2Via2l0
LSIpKQogICAgICAgICAgICAgZmFtaWx5ID0gZmFtaWx5LnN1YnN0cmluZyg4KTsKICAgICAgICAg
aWYgKGZhbWlseS5jb250YWlucygnICcpKQpAQCAtMjAyNywxMSArMjAyNSw4IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGMKICAgICBpZiAoUmVuZGVyU3R5bGUqIGNv
bXB1dGVkU3R5bGUgPSBjYW52YXMoKS0+Y29tcHV0ZWRTdHlsZSgpKQogICAgICAgICBuZXdTdHls
ZS0+c2V0Rm9udERlc2NyaXB0aW9uKGNvbXB1dGVkU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgRm9udEZhbWlseSBmb250RmFtaWx5OwotICAgICAgICBmb250
RmFtaWx5LnNldEZhbWlseShkZWZhdWx0Rm9udEZhbWlseSk7Ci0KICAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGRlZmF1bHRGb250RGVzY3JpcHRpb247Ci0gICAgICAgIGRlZmF1bHRGb250RGVzY3Jp
cHRpb24uc2V0RmFtaWx5KGZvbnRGYW1pbHkpOworICAgICAgICBkZWZhdWx0Rm9udERlc2NyaXB0
aW9uLnNldE9uZUZhbWlseShkZWZhdWx0Rm9udEZhbWlseSk7CiAgICAgICAgIGRlZmF1bHRGb250
RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShkZWZhdWx0Rm9udFNpemUpOwogICAgICAgICBk
ZWZhdWx0Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShkZWZhdWx0Rm9udFNpemUpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3BwCShyZXZpc2lvbiAxNTA0Mjkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3OSw3ICsyNzksNyBAQCBTdHJpbmcgUHJpbnRDb250ZXh0OjpwYWdlUHJvcGVydHkoRnJh
bWUqCiAgICAgaWYgKCFzdHJjbXAocHJvcGVydHlOYW1lLCAiZm9udC1zaXplIikpCiAgICAgICAg
IHJldHVybiBTdHJpbmc6Om51bWJlcihzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRQ
aXhlbFNpemUoKSk7CiAgICAgaWYgKCFzdHJjbXAocHJvcGVydHlOYW1lLCAiZm9udC1mYW1pbHki
KSkKLSAgICAgICAgcmV0dXJuIHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5mYW1pbHkoKS5mYW1p
bHkoKS5zdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5m
aXJzdEZhbWlseSgpOwogICAgIGlmICghc3RyY21wKHByb3BlcnR5TmFtZSwgInNpemUiKSkKICAg
ICAgICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKHN0eWxlLT5wYWdlU2l6ZSgpLndpZHRoKCkudmFs
dWUoKSkgKyAnICcgKyBTdHJpbmc6Om51bWJlcihzdHlsZS0+cGFnZVNpemUoKS5oZWlnaHQoKS52
YWx1ZSgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1l
RWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVy
VGhlbWVFZmwuY3BwCShyZXZpc2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE4LDcgKzEwMTgs
NyBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjpzeXN0ZW1Gb250KGludCwgRm9uCiAgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIGZvbnRGYWNlLCAoQVNDSUlMaXRlcmFsKCJTYW5zIikpKTsK
ICAgICBmbG9hdCBmb250U2l6ZSA9IGRlZmF1bHRGb250U2l6ZTsKIAotICAgIGZvbnREZXNjcmlw
dGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseShmb250RmFjZSk7CisgICAgZm9udERlc2NyaXB0
aW9uLnNldE9uZUZhbWlseShmb250RmFjZSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNp
ZmllZFNpemUoZm9udFNpemUpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6
ZSh0cnVlKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3Jp
cHRpb246Ok5vRmFtaWx5KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmgJKHJldmlzaW9uIDE1MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDggKzEzMCw5IEBAIHB1YmxpYzoKIAog
ICAgIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcygpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZXNldHRpbmdGZWF0dXJlczsgfQogCi0gICAgRm9udEZhbWlseSYgZmlyc3RGYW1p
bHkoKSB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpOyB9Ci0gICAgY29u
c3QgRm9udEZhbWlseSYgZmFtaWx5KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24u
ZmFtaWx5KCk7IH0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZpcnN0RmFtaWx5KCkgY29uc3Qg
eyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKTsgfQorICAgIHVuc2lnbmVk
IGZhbWlseUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZmFtaWx5Q291
bnQoKTsgfQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5QXQodW5zaWduZWQgaSkgY29u
c3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZmFtaWx5QXQoaSk7IH0KIAogICAgIEZvbnRJ
dGFsaWMgaXRhbGljKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uaXRhbGljKCk7
IH0KICAgICBGb250V2VpZ2h0IHdlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0
aW9uLndlaWdodCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYWNoZS5jcHAJKHJldmlzaW9uIDE1MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmljaG9sYXMgU2hh
bmtzIDx3ZWJraXRAbmlja3NoYW5rcy5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00NzksNDQg
KzQ3OSwzOCBAQCBzaXplX3QgRm9udENhY2hlOjppbmFjdGl2ZUZvbnREYXRhQ291bnQoCiAKIFBh
c3NSZWZQdHI8Rm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udCYgZm9u
dCwgaW50JiBmYW1pbHlJbmRleCwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCiB7CisgICAg
QVNTRVJUKGZhbWlseUluZGV4ICE9IGNBbGxGYW1pbGllc1NjYW5uZWQpOwogICAgIFJlZlB0cjxG
b250RGF0YT4gcmVzdWx0OwogCi0gICAgaW50IHN0YXJ0SW5kZXggPSBmYW1pbHlJbmRleDsKLSAg
ICBjb25zdCBGb250RmFtaWx5KiBzdGFydEZhbWlseSA9ICZmb250LmZvbnREZXNjcmlwdGlvbigp
LmZhbWlseSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBzdGFydEZhbWlseSAmJiBpIDwgc3RhcnRJ
bmRleDsgaSsrKQotICAgICAgICBzdGFydEZhbWlseSA9IHN0YXJ0RmFtaWx5LT5uZXh0KCk7Ci0g
ICAgY29uc3QgRm9udEZhbWlseSogY3VyckZhbWlseSA9IHN0YXJ0RmFtaWx5OwotICAgIHdoaWxl
IChjdXJyRmFtaWx5ICYmICFyZXN1bHQpIHsKLSAgICAgICAgZmFtaWx5SW5kZXgrKzsKLSAgICAg
ICAgaWYgKGN1cnJGYW1pbHktPmZhbWlseSgpLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBpZiAo
Zm9udFNlbGVjdG9yKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZvbnRTZWxlY3Rvci0+Z2V0
Rm9udERhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgY3VyckZhbWlseS0+ZmFtaWx5KCkpOwot
Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBnZXRD
YWNoZWRGb250RGF0YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBjdXJyRmFtaWx5LT5mYW1pbHko
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgY3VyckZhbWlseSA9IGN1cnJGYW1pbHktPm5leHQoKTsK
KyAgICBib29sIGlzRmlyc3QgPSAhZmFtaWx5SW5kZXg7CisgICAgaW50IGZhbWlseUNvdW50ID0g
Zm9udC5mYW1pbHlDb3VudCgpOworICAgIGZvciAoO2ZhbWlseUluZGV4IDwgZmFtaWx5Q291bnQg
JiYgIXJlc3VsdDsgKytmYW1pbHlJbmRleCkgeworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGZhbWlseSA9IGZvbnQuZmFtaWx5QXQoZmFtaWx5SW5kZXgpOworICAgICAgICBpZiAoZmFtaWx5
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoZm9udFNlbGVj
dG9yKQorICAgICAgICAgICAgcmVzdWx0ID0gZm9udFNlbGVjdG9yLT5nZXRGb250RGF0YShmb250
LmZvbnREZXNjcmlwdGlvbigpLCBmYW1pbHkpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGdldENhY2hlZEZvbnREYXRhKGZvbnQuZm9udERlc2NyaXB0aW9uKCks
IGZhbWlseSk7CiAgICAgfQotCi0gICAgaWYgKCFjdXJyRmFtaWx5KQorICAgIGlmIChmYW1pbHlJ
bmRleCA9PSBmYW1pbHlDb3VudCkKICAgICAgICAgZmFtaWx5SW5kZXggPSBjQWxsRmFtaWxpZXNT
Y2FubmVkOwogCi0gICAgaWYgKCFyZXN1bHQpCisgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAg
Ly8gV2UgZGlkbid0IGZpbmQgYSBmb250LiBUcnkgdG8gZmluZCBhIHNpbWlsYXIgZm9udCB1c2lu
ZyBvdXIgb3duIHNwZWNpZmljIGtub3dsZWRnZSBhYm91dCBvdXIgcGxhdGZvcm0uCiAgICAgICAg
IC8vIEZvciBleGFtcGxlIG9uIE9TIFgsIHdlIGtub3cgdG8gbWFwIGFueSBmYW1pbGllcyBjb250
YWluaW5nIHRoZSB3b3JkcyBBcmFiaWMsIFBhc2h0bywgb3IgVXJkdSB0byB0aGUKICAgICAgICAg
Ly8gR2VlemEgUHJvIGZvbnQuCiAgICAgICAgIHJlc3VsdCA9IGdldFNpbWlsYXJGb250UGxhdGZv
cm1EYXRhKGZvbnQpOworICAgIH0KIAotICAgIGlmICghcmVzdWx0ICYmIHN0YXJ0SW5kZXggPT0g
MCkgeworICAgIGlmICghcmVzdWx0ICYmIGlzRmlyc3QpIHsKICAgICAgICAgLy8gSWYgaXQncyB0
aGUgcHJpbWFyeSBmb250IHRoYXQgd2UgY291bGRuJ3QgZmluZCwgd2UgdHJ5IHRoZSBmb2xsb3dp
bmcuIEluIGFsbCBvdGhlciBjYXNlcywgd2Ugd2lsbAogICAgICAgICAvLyBqdXN0IHVzZSBwZXIt
Y2hhcmFjdGVyIHN5c3RlbSBmYWxsYmFjay4KLQogICAgICAgICBpZiAoZm9udFNlbGVjdG9yKSB7
CiAgICAgICAgICAgICAvLyBUcnkgdGhlIHVzZXIncyBwcmVmZXJyZWQgc3RhbmRhcmQgZm9udC4K
ICAgICAgICAgICAgIGlmIChSZWZQdHI8Rm9udERhdGE+IGRhdGEgPSBmb250U2VsZWN0b3ItPmdl
dEZvbnREYXRhKGZvbnQuZm9udERlc2NyaXB0aW9uKCksIHN0YW5kYXJkRmFtaWx5KSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiAgICAgICAgIH0KLQogICAgICAgICAv
LyBTdGlsbCBubyByZXN1bHQuICBIYW5kIGJhY2sgb3VyIGxhc3QgcmVzb3J0IGZhbGxiYWNrIGZv
bnQuCiAgICAgICAgIHJlc3VsdCA9IGdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZm9udC5mb250
RGVzY3JpcHRpb24oKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uY3BwCShyZXZpc2lvbiAxNTA0MjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNyBO
aWNob2xhcyBTaGFua3MgPGNvbnRhY3RAbmlja3NoYW5rcy5jb20+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyArMzMsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBzdHJ1Y3QgU2FtZVNpemVBc0ZvbnREZXNjcmlwdGlvbiB7Ci0gICAgRm9udEZhbWlseSBmYW1p
bHlMaXN0OworICAgIFZlY3RvcjxBdG9taWNTdHJpbmcsIDE+IGZhbWlsaWVzOwogICAgIFJlZlB0
cjxGb250RmVhdHVyZVNldHRpbmdzPiBtX2ZlYXR1cmVTZXR0aW5nczsKICAgICBmbG9hdCBzaXpl
c1syXTsKICAgICAvLyBGWElNRTogTWFrZSB0aGVtIGZpdCBpbnRvIG9uZSB3b3JkLgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9u
LmgJKHJldmlzaW9uIDE1MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnREZXNjcmlwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwNyBOaWNob2xhcyBTaGFua3MgPHdlYmtpdEBuaWNrc2hhbmtzLmNvbT4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCkBAIC03Nyw3ICs3Nyw4IEBAIHB1YmxpYzoKICAgICBlbnVtIExpZ2F0dXJlc1N0YXRl
IHsgTm9ybWFsTGlnYXR1cmVzU3RhdGUsIERpc2FibGVkTGlnYXR1cmVzU3RhdGUsIEVuYWJsZWRM
aWdhdHVyZXNTdGF0ZSB9OwogCiAgICAgRm9udERlc2NyaXB0aW9uKCkKLSAgICAgICAgOiBtX3Nw
ZWNpZmllZFNpemUoMCkKKyAgICAgICAgOiBtX2ZhbWlsaWVzKDEpCisgICAgICAgICwgbV9zcGVj
aWZpZWRTaXplKDApCiAgICAgICAgICwgbV9jb21wdXRlZFNpemUoMCkKICAgICAgICAgLCBtX29y
aWVudGF0aW9uKEhvcml6b250YWwpCiAgICAgICAgICwgbV9ub25DSktHbHlwaE9yaWVudGF0aW9u
KE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KQpAQCAtMTAzLDkgKzEwNCwxMiBA
QCBwdWJsaWM6CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udERlc2NyaXB0aW9uJikg
Y29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9Ci0gICAgCi0gICAgY29uc3QgRm9u
dEZhbWlseSYgZmFtaWx5KCkgY29uc3QgeyByZXR1cm4gbV9mYW1pbHlMaXN0OyB9Ci0gICAgRm9u
dEZhbWlseSYgZmlyc3RGYW1pbHkoKSB7IHJldHVybiBtX2ZhbWlseUxpc3Q7IH0KKworICAgIHVu
c2lnbmVkIGZhbWlseUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9mYW1pbGllcy5zaXplKCk7IH0K
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZpcnN0RmFtaWx5KCkgY29uc3QgeyByZXR1cm4gZmFt
aWx5QXQoMCk7IH0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseUF0KHVuc2lnbmVkIGkp
IGNvbnN0IHsgcmV0dXJuIG1fZmFtaWxpZXNbaV07IH0KKyAgICBjb25zdCBWZWN0b3I8QXRvbWlj
U3RyaW5nLCAxPiYgZmFtaWxpZXMoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlsaWVzOyB9CisKICAg
ICBmbG9hdCBzcGVjaWZpZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpZWRTaXplOyB9
CiAgICAgZmxvYXQgY29tcHV0ZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb21wdXRlZFNpemU7
IH0KICAgICBGb250SXRhbGljIGl0YWxpYygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZv
bnRJdGFsaWM+KG1faXRhbGljKTsgfQpAQCAtMTE4LDcgKzEyMiw3IEBAIHB1YmxpYzoKICAgICBH
ZW5lcmljRmFtaWx5VHlwZSBnZW5lcmljRmFtaWx5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8R2VuZXJpY0ZhbWlseVR5cGU+KG1fZ2VuZXJpY0ZhbWlseSk7IH0KICAgICBib29sIHVzZVBy
aW50ZXJGb250KCkgY29uc3QgeyByZXR1cm4gbV91c2VQcmludGVyRm9udDsgfQogICAgIC8vIG9u
bHkgdXNlIGZpeGVkIGRlZmF1bHQgc2l6ZSB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGZvbnQgZmFt
aWx5LCBhbmQgdGhhdCBmYW1pbHkgaXMgIm1vbm9zcGFjZSIKLSAgICBib29sIHVzZUZpeGVkRGVm
YXVsdFNpemUoKSBjb25zdCB7IHJldHVybiBnZW5lcmljRmFtaWx5KCkgPT0gTW9ub3NwYWNlRmFt
aWx5ICYmICFmYW1pbHkoKS5uZXh0KCkgJiYgZmFtaWx5KCkuZmFtaWx5KCkgPT0gbW9ub3NwYWNl
RmFtaWx5OyB9CisgICAgYm9vbCB1c2VGaXhlZERlZmF1bHRTaXplKCkgY29uc3QgeyByZXR1cm4g
Z2VuZXJpY0ZhbWlseSgpID09IE1vbm9zcGFjZUZhbWlseSAmJiBmYW1pbHlDb3VudCgpID09IDEg
JiYgZmlyc3RGYW1pbHkoKSA9PSBtb25vc3BhY2VGYW1pbHk7IH0KICAgICBGb250UmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFJlbmRl
cmluZ01vZGU+KG1fcmVuZGVyaW5nTW9kZSk7IH0KICAgICBLZXJuaW5nIGtlcm5pbmcoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxLZXJuaW5nPihtX2tlcm5pbmcpOyB9CiAgICAgTGlnYXR1
cmVzU3RhdGUgY29tbW9uTGlnYXR1cmVzU3RhdGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxMaWdhdHVyZXNTdGF0ZT4obV9jb21tb25MaWdhdHVyZXNTdGF0ZSk7IH0KQEAgLTEzNyw3ICsx
NDEsOSBAQCBwdWJsaWM6CiAgICAgRm9udEZlYXR1cmVTZXR0aW5ncyogZmVhdHVyZVNldHRpbmdz
KCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlU2V0dGluZ3MuZ2V0KCk7IH0KICAgICBGb250RGVz
Y3JpcHRpb24gbWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygpIGNvbnN0OwogCi0gICAgdm9pZCBz
ZXRGYW1pbHkoY29uc3QgRm9udEZhbWlseSYgZmFtaWx5KSB7IG1fZmFtaWx5TGlzdCA9IGZhbWls
eTsgfQorICAgIHZvaWQgc2V0T25lRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KSB7
IEFTU0VSVChtX2ZhbWlsaWVzLnNpemUoKSA9PSAxKTsgbV9mYW1pbGllc1swXSA9IGZhbWlseTsg
fQorICAgIHZvaWQgc2V0RmFtaWxpZXMoY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZywgMT4mIGZh
bWlsaWVzKSB7IG1fZmFtaWxpZXMgPSBmYW1pbGllczsgfQorICAgIHZvaWQgYWRvcHRGYW1pbGll
cyhWZWN0b3I8QXRvbWljU3RyaW5nLCAxPiYgZmFtaWxpZXMpIHsgbV9mYW1pbGllcy5zd2FwKGZh
bWlsaWVzKTsgfQogICAgIHZvaWQgc2V0Q29tcHV0ZWRTaXplKGZsb2F0IHMpIHsgbV9jb21wdXRl
ZFNpemUgPSBjbGFtcFRvRmxvYXQocyk7IH0KICAgICB2b2lkIHNldFNwZWNpZmllZFNpemUoZmxv
YXQgcykgeyBtX3NwZWNpZmllZFNpemUgPSBjbGFtcFRvRmxvYXQocyk7IH0KICAgICB2b2lkIHNl
dEl0YWxpYyhGb250SXRhbGljIGkpIHsgbV9pdGFsaWMgPSBpOyB9CkBAIC0xNjQsNyArMTcwLDcg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0RmVhdHVyZVNldHRpbmdzKFBhc3NSZWZQdHI8Rm9udEZl
YXR1cmVTZXR0aW5ncz4gc2V0dGluZ3MpIHsgbV9mZWF0dXJlU2V0dGluZ3MgPSBzZXR0aW5nczsg
fQogCiBwcml2YXRlOgotICAgIEZvbnRGYW1pbHkgbV9mYW1pbHlMaXN0OyAvLyBUaGUgbGlzdCBv
ZiBmb250IGZhbWlsaWVzIHRvIGJlIHVzZWQuCisgICAgVmVjdG9yPEF0b21pY1N0cmluZywgMT4g
bV9mYW1pbGllczsKICAgICBSZWZQdHI8Rm9udEZlYXR1cmVTZXR0aW5ncz4gbV9mZWF0dXJlU2V0
dGluZ3M7CiAKICAgICBmbG9hdCBtX3NwZWNpZmllZFNpemU7ICAgLy8gU3BlY2lmaWVkIENTUyB2
YWx1ZS4gSW5kZXBlbmRlbnQgb2YgcmVuZGVyaW5nIGlzc3VlcyBzdWNoIGFzIGludGVnZXIKQEAg
LTIwMyw3ICsyMDksNyBAQCBwcml2YXRlOgogCiBpbmxpbmUgYm9vbCBGb250RGVzY3JpcHRpb246
Om9wZXJhdG9yPT0oY29uc3QgRm9udERlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9mYW1pbHlMaXN0ID09IG90aGVyLm1fZmFtaWx5TGlzdAorICAgIHJldHVybiBtX2Zh
bWlsaWVzID09IG90aGVyLm1fZmFtaWxpZXMKICAgICAgICAgJiYgbV9zcGVjaWZpZWRTaXplID09
IG90aGVyLm1fc3BlY2lmaWVkU2l6ZQogICAgICAgICAmJiBtX2NvbXB1dGVkU2l6ZSA9PSBvdGhl
ci5tX2NvbXB1dGVkU2l6ZQogICAgICAgICAmJiBtX2l0YWxpYyA9PSBvdGhlci5tX2l0YWxpYwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbWlseS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbWlseS5j
cHAJKHJldmlzaW9uIDE1MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRGYW1pbHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ2ICsxIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRGYW1pbHkuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udEZhbWlseSYgYSwg
Y29uc3QgRm9udEZhbWlseSYgYikKLXsKLSAgICBpZiAoYS5mYW1pbHkoKSAhPSBiLmZhbWlseSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgRm9udEZhbWlseSogYXA7Ci0gICAg
Y29uc3QgRm9udEZhbWlseSogYnA7Ci0gICAgZm9yIChhcCA9IGEubmV4dCgpLCBicCA9IGIubmV4
dCgpOyBhcCAhPSBicDsgYXAgPSBhcC0+bmV4dCgpLCBicCA9IGJwLT5uZXh0KCkpIHsKLSAgICAg
ICAgaWYgKCFhcCB8fCAhYnApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlm
IChhcC0+ZmFtaWx5KCkgIT0gYnAtPmZhbWlseSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfQorLy8gUmVtb3ZlIG1lLgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbWlseS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuaAkocmV2aXNp
b24gMTUwNDI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbWls
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk2ICsxIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2lmbmRlZiBGb250RmFtaWx5X2gKLSNkZWZpbmUgRm9udEZhbWlseV9oCi0KLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9BdG9taWNTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTaGFy
ZWRGb250RmFtaWx5OwotCi1jbGFzcyBGb250RmFtaWx5IHsKLXB1YmxpYzoKLSAgICBGb250RmFt
aWx5KCkgeyB9Ci0gICAgfkZvbnRGYW1pbHkoKTsKLQotICAgIHZvaWQgc2V0RmFtaWx5KGNvbnN0
IEF0b21pY1N0cmluZyYgZmFtaWx5KSB7IG1fZmFtaWx5ID0gZmFtaWx5OyB9Ci0gICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBmYW1pbHkoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlseTsgfQotICAgIGJv
b2wgZmFtaWx5SXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWx5LmlzRW1wdHkoKTsgfQot
Ci0gICAgY29uc3QgRm9udEZhbWlseSogbmV4dCgpIGNvbnN0OwotCi0gICAgdm9pZCBhcHBlbmRG
YW1pbHkoUGFzc1JlZlB0cjxTaGFyZWRGb250RmFtaWx5Pik7Ci0gICAgUGFzc1JlZlB0cjxTaGFy
ZWRGb250RmFtaWx5PiByZWxlYXNlTmV4dCgpOwotCi1wcml2YXRlOgotICAgIEF0b21pY1N0cmlu
ZyBtX2ZhbWlseTsKLSAgICBSZWZQdHI8U2hhcmVkRm9udEZhbWlseT4gbV9uZXh0OwotfTsKLQot
Y2xhc3MgU2hhcmVkRm9udEZhbWlseSA6IHB1YmxpYyBGb250RmFtaWx5LCBwdWJsaWMgUmVmQ291
bnRlZDxTaGFyZWRGb250RmFtaWx5PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
U2hhcmVkRm9udEZhbWlseT4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU2hhcmVkRm9udEZhbWlseSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFNoYXJlZEZv
bnRGYW1pbHkoKSB7IH0KLX07Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250RmFtaWx5Jiwg
Y29uc3QgRm9udEZhbWlseSYpOwotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250RmFt
aWx5JiBhLCBjb25zdCBGb250RmFtaWx5JiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KLQotaW5s
aW5lIEZvbnRGYW1pbHk6On5Gb250RmFtaWx5KCkKLXsKLSAgICAvLyBUaGlzIGNvZGUgY2FtZSBm
cm9tIHJlbW92ZWQgTGlzdFJlZlB0ciB0byBhdm9pZCBwb3NzaWJsZSBvdmVyZmxvd2luZyB0aGUg
c3RhY2suCi0gICAgLy8gRklYTUU6IERvIHdlIHJlYWxseSBuZWVkIGl0PwotICAgIFJlZlB0cjxT
aGFyZWRGb250RmFtaWx5PiByZWFwZXIgPSBtX25leHQucmVsZWFzZSgpOwotICAgIHdoaWxlIChy
ZWFwZXIgJiYgcmVhcGVyLT5oYXNPbmVSZWYoKSkKLSAgICAgICAgcmVhcGVyID0gcmVhcGVyLT5y
ZWxlYXNlTmV4dCgpOyAvLyBpbXBsaWNpdGx5IHByb3RlY3RzIHJlYXBlci0+bmV4dCwgdGhlbiBk
ZXJlZnMgcmVhcGVyCi19Ci0KLWlubGluZSBjb25zdCBGb250RmFtaWx5KiBGb250RmFtaWx5Ojpu
ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9uZXh0LmdldCgpOwotfQotCi1pbmxpbmUgdm9p
ZCBGb250RmFtaWx5OjphcHBlbmRGYW1pbHkoUGFzc1JlZlB0cjxTaGFyZWRGb250RmFtaWx5PiBm
YW1pbHkpCi17Ci0gICAgbV9uZXh0ID0gZmFtaWx5OwotfQotCi1pbmxpbmUgUGFzc1JlZlB0cjxT
aGFyZWRGb250RmFtaWx5PiBGb250RmFtaWx5OjpyZWxlYXNlTmV4dCgpCi17Ci0gICAgcmV0dXJu
IG1fbmV4dC5yZWxlYXNlKCk7Ci19Ci0KLX0KLQotI2VuZGlmCisvLyBSZW1vdmUgbWUuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2Fj
aGVNYWMubW0JKHJldmlzaW9uIDE1MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE1OSwxOCArMTU5
LDE2IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2UKICAgICAvLyB0
aGUgcHJlc2VuY2Ugb2Yga2V5d29yZHMgaW4gdGhlIHRoZSByZXF1ZXN0ZWQgbmFtZXMuICBGb3Ig
ZXhhbXBsZSwgd2UnbGwKICAgICAvLyBtYXRjaCBhbnkgbmFtZSB0aGF0IGNvbnRhaW5zICJBcmFi
aWMiIHRvIEdlZXphIFByby4KICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNpbXBsZUZvbnRE
YXRhOwotICAgIGNvbnN0IEZvbnRGYW1pbHkqIGN1cnJGYW1pbHkgPSAmZm9udC5mb250RGVzY3Jp
cHRpb24oKS5mYW1pbHkoKTsKLSAgICB3aGlsZSAoY3VyckZhbWlseSAmJiAhc2ltcGxlRm9udERh
dGEpIHsKLSAgICAgICAgaWYgKGN1cnJGYW1pbHktPmZhbWlseSgpLmxlbmd0aCgpKSB7Ci0gICAg
ICAgICAgICBzdGF0aWMgU3RyaW5nKiBtYXRjaFdvcmRzWzNdID0geyBuZXcgU3RyaW5nKCJBcmFi
aWMiKSwgbmV3IFN0cmluZygiUGFzaHRvIiksIG5ldyBTdHJpbmcoIlVyZHUiKSB9OwotICAgICAg
ICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGdlZXphU3RyLCAoIkdlZXph
IFBybyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICAgICAgICAg
IGZvciAoaW50IGogPSAwOyBqIDwgMyAmJiAhc2ltcGxlRm9udERhdGE7ICsraikKLSAgICAgICAg
ICAgICAgICBpZiAoY3VyckZhbWlseS0+ZmFtaWx5KCkuY29udGFpbnMoKm1hdGNoV29yZHNbal0s
IGZhbHNlKSkKLSAgICAgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRG
b250RGF0YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBnZWV6YVN0cik7Ci0gICAgICAgIH0KLSAg
ICAgICAgY3VyckZhbWlseSA9IGN1cnJGYW1pbHktPm5leHQoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZm9udC5mYW1pbHlDb3VudCgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBmYW1pbHkgPSBmb250LmZhbWlseUF0KGkpOworICAgICAgICBpZiAoZmFtaWx5
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBzdGF0aWMgU3RyaW5n
KiBtYXRjaFdvcmRzWzNdID0geyBuZXcgU3RyaW5nKCJBcmFiaWMiKSwgbmV3IFN0cmluZygiUGFz
aHRvIiksIG5ldyBTdHJpbmcoIlVyZHUiKSB9OworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KEF0b21pY1N0cmluZywgZ2VlemFTdHIsICgiR2VlemEgUHJvIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCkpOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDMgJiYgIXNp
bXBsZUZvbnREYXRhOyArK2opCisgICAgICAgICAgICBpZiAoZmFtaWx5LmNvbnRhaW5zKCptYXRj
aFdvcmRzW2pdLCBmYWxzZSkpCisgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRD
YWNoZWRGb250RGF0YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBnZWV6YVN0cik7CiAgICAgfQot
CiAgICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhLnJlbGVhc2UoKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcAko
cmV2aXNpb24gMTUwNDI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
Rm9udENhY2hlUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIFBhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2UKIAogUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQogewot
ICAgIGNvbnN0IEF0b21pY1N0cmluZyBmYWxsYmFja0ZhbWlseSA9IFFGb250KGZvbnREZXNjcmlw
dGlvbi5mYW1pbHkoKS5mYW1pbHkoKSkubGFzdFJlc29ydEZhbWlseSgpOworICAgIGNvbnN0IEF0
b21pY1N0cmluZyBmYWxsYmFja0ZhbWlseSA9IFFGb250KGZvbnREZXNjcmlwdGlvbi5maXJzdEZh
bWlseSgpKS5sYXN0UmVzb3J0RmFtaWx5KCk7CiAgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRh
KG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGYW1pbHkpLCBz
aG91bGRSZXRhaW4pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhl
bWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1l
TWFjLm1tCShyZXZpc2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
VGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTYwNSw3ICs2MDUsNyBAQCBGb250RGVzY3Jp
cHRpb24gVGhlbWVNYWM6OmNvbnRyb2xGb250KENvCiAgICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5KTsKIAogICAg
ICAgICAgICAgTlNGb250KiBuc0ZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9u
dCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOmNvbnRyb2xTaXplRm9yRm9udChmb250KV1d
OwotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KFtu
c0ZvbnQgd2ViQ29yZUZhbWlseU5hbWVdKTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRPbmVGYW1pbHkoW25zRm9udCB3ZWJDb3JlRmFtaWx5TmFtZV0pOwogICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShbbnNGb250IHBvaW50U2l6ZV0gKiB6b29tRmFj
dG9yKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKFtuc0Zv
bnQgcG9pbnRTaXplXSAqIHpvb21GYWN0b3IpOwogICAgICAgICAgICAgcmV0dXJuIGZvbnREZXNj
cmlwdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0
eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJU
aGVtZVFTdHlsZS5jcHAJKHJldmlzaW9uIDE1MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUwLDkgKzI1
MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdEJ1dHRvblN0eWwKICAgICBmb250
RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsKICNlbmRpZgog
Ci0gICAgRm9udEZhbWlseSBmb250RmFtaWx5OwotICAgIGZvbnRGYW1pbHkuc2V0RmFtaWx5KG1f
YnV0dG9uRm9udEZhbWlseSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShmb250RmFt
aWx5KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KG1fYnV0dG9uRm9udEZhbWls
eSk7CiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAg
IHN0eWxlLT5mb250KCkudXBkYXRlKHN0eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpKTsKICAg
ICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5z
Y29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJh
bnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHAJKHJldmlzaW9uIDE1MDQyOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgRm9udFRyYW5zY29kZXI6OkZvbnRUcmFuc2NvZGVy
KCkKIAogRm9udFRyYW5zY29kZXI6OkNvbnZlcnRlclR5cGUgRm9udFRyYW5zY29kZXI6OmNvbnZl
cnRlclR5cGUoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFRl
eHRFbmNvZGluZyogZW5jb2RpbmcpIGNvbnN0CiB7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBm
b250RmFtaWx5ID0gZm9udERlc2NyaXB0aW9uLmZhbWlseSgpLmZhbWlseSgpLnN0cmluZygpOwor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZm9udEZhbWlseSA9IGZvbnREZXNjcmlwdGlvbi5maXJz
dEZhbWlseSgpOwogICAgIGlmICghZm9udEZhbWlseS5pc051bGwoKSkgewogICAgICAgICBIYXNo
TWFwPEF0b21pY1N0cmluZywgQ29udmVydGVyVHlwZT46OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0g
bV9jb252ZXJ0ZXJUeXBlcy5maW5kKGZvbnRGYW1pbHkpOwogICAgICAgICBpZiAoZm91bmQgIT0g
bV9jb252ZXJ0ZXJUeXBlcy5lbmQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9EcmFnSW1hZ2VXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9EcmFnSW1hZ2VXaW4uY3BwCShyZXZpc2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDEw
ICsxMTAsNyBAQCBzdGF0aWMgRm9udCBkcmFnTGFiZWxGb250KGludCBzaXplLCBib29sCiAKICAg
ICBGb250RGVzY3JpcHRpb24gZGVzY3JpcHRpb247CiAgICAgZGVzY3JpcHRpb24uc2V0V2VpZ2h0
KGJvbGQgPyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3JtYWwpOwotCi0gICAgRm9udEZh
bWlseSBmYW1pbHk7Ci0gICAgZmFtaWx5LnNldEZhbWlseShtZXRyaWNzLmxmU21DYXB0aW9uRm9u
dC5sZkZhY2VOYW1lKTsKLSAgICBkZXNjcmlwdGlvbi5zZXRGYW1pbHkoZmFtaWx5KTsKKyAgICBk
ZXNjcmlwdGlvbi5zZXRPbmVGYW1pbHkobWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQubGZGYWNlTmFt
ZSk7CiAgICAgZGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZSgoZmxvYXQpc2l6ZSk7CiAgICAg
ZGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKChmbG9hdClzaXplKTsKICAgICBkZXNjcmlwdGlv
bi5zZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gMTUwNDI5KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4
LDcgQEAgdm9pZCBSZW5kZXJUZXh0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZgogICAgIGlmICgh
b2xkU3R5bGUpIHsKICAgICAgICAgdXBkYXRlTmVlZHNUcmFuc2NvZGluZygpOwogICAgICAgICBu
ZWVkc1Jlc2V0VGV4dCA9IG1fbmVlZHNUcmFuc2NvZGluZzsKLSAgICB9IGVsc2UgaWYgKG9sZFN0
eWxlLT5mb250KCkubmVlZHNUcmFuc2NvZGluZygpICE9IG5ld1N0eWxlLT5mb250KCkubmVlZHNU
cmFuc2NvZGluZygpIHx8IChuZXdTdHlsZS0+Zm9udCgpLm5lZWRzVHJhbnNjb2RpbmcoKSAmJiBv
bGRTdHlsZS0+Zm9udCgpLmZhbWlseSgpLmZhbWlseSgpICE9IG5ld1N0eWxlLT5mb250KCkuZmFt
aWx5KCkuZmFtaWx5KCkpKSB7CisgICAgfSBlbHNlIGlmIChvbGRTdHlsZS0+Zm9udCgpLm5lZWRz
VHJhbnNjb2RpbmcoKSAhPSBuZXdTdHlsZS0+Zm9udCgpLm5lZWRzVHJhbnNjb2RpbmcoKSB8fCAo
bmV3U3R5bGUtPmZvbnQoKS5uZWVkc1RyYW5zY29kaW5nKCkgJiYgb2xkU3R5bGUtPmZvbnQoKS5m
aXJzdEZhbWlseSgpICE9IG5ld1N0eWxlLT5mb250KCkuZmlyc3RGYW1pbHkoKSkpIHsKICAgICAg
ICAgdXBkYXRlTmVlZHNUcmFuc2NvZGluZygpOwogICAgICAgICBuZWVkc1Jlc2V0VGV4dCA9IHRy
dWU7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2wuY3BwCShyZXZpc2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsNyArMjYyLDcg
QEAgZmxvYXQgUmVuZGVyVGV4dENvbnRyb2w6OnNjYWxlRW1Ub1VuaXRzKAogdm9pZCBSZW5kZXJU
ZXh0Q29udHJvbDo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWlu
TG9naWNhbFdpZHRoLCBMYXlvdXRVbml0JiBtYXhMb2dpY2FsV2lkdGgpIGNvbnN0CiB7CiAgICAg
Ly8gVXNlIGF2ZXJhZ2UgY2hhcmFjdGVyIHdpZHRoLiBNYXRjaGVzIElFLgotICAgIEF0b21pY1N0
cmluZyBmYW1pbHkgPSBzdHlsZSgpLT5mb250KCkuZmFtaWx5KCkuZmFtaWx5KCk7CisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBmYW1pbHkgPSBzdHlsZSgpLT5mb250KCkuZmlyc3RGYW1pbHkoKTsK
ICAgICBtYXhMb2dpY2FsV2lkdGggPSBwcmVmZXJyZWRDb250ZW50TG9naWNhbFdpZHRoKGNvbnN0
X2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2wqPih0aGlzKS0+Z2V0QXZnQ2hhcldpZHRoKGZhbWlseSkp
OwogICAgIGlmIChSZW5kZXJCb3gqIGlubmVyVGV4dFJlbmRlckJveCA9IGlubmVyVGV4dEVsZW1l
bnQoKS0+cmVuZGVyQm94KCkpCiAgICAgICAgIG1heExvZ2ljYWxXaWR0aCArPSBpbm5lclRleHRS
ZW5kZXJCb3gtPnBhZGRpbmdTdGFydCgpICsgaW5uZXJUZXh0UmVuZGVyQm94LT5wYWRkaW5nRW5k
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gMTUwNDI5KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyMyw3ICszMjMsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6CiAgICAgTGF5b3V0VW5pdCByZXN1bHQgPSBzdGF0aWNfY2FzdDxMYXlvdXRVbml0
PihjZWlsZWRMYXlvdXRVbml0KGNoYXJXaWR0aCAqIGZhY3RvcikpOwogCiAgICAgZmxvYXQgbWF4
Q2hhcldpZHRoID0gMC5mOwotICAgIEF0b21pY1N0cmluZyBmYW1pbHkgPSBzdHlsZSgpLT5mb250
KCkuZmFtaWx5KCkuZmFtaWx5KCk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkgPSBz
dHlsZSgpLT5mb250KCkuZmlyc3RGYW1pbHkoKTsKICAgICAvLyBTaW5jZSBMdWNpZGEgR3JhbmRl
IGlzIHRoZSBkZWZhdWx0IGZvbnQsIHdlIHdhbnQgdGhpcyB0byBtYXRjaCB0aGUgd2lkdGgKICAg
ICAvLyBvZiBNUyBTaGVsbCBEbGcsIHRoZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVhcyBpbiBG
aXJlZm94LCBTYWZhcmkgV2luIGFuZAogICAgIC8vIElFIGZvciBzb21lIGVuY29kaW5ncyAoaW4g
SUUsIHRoZSBkZWZhdWx0IGZvbnQgaXMgZW5jb2Rpbmcgc3BlY2lmaWMpLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMTUwNDI5KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC02NTEsNyArNjUxLDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6c3lzdGVtRm9udChp
bnQgY3NzVgogICAgICAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5h
Z2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKICAgICAgICAgY2FjaGVkRGVzYy0+c2V0SXNBYnNvbHV0
ZVNpemUodHJ1ZSk7CiAgICAgICAgIGNhY2hlZERlc2MtPnNldEdlbmVyaWNGYW1pbHkoRm9udERl
c2NyaXB0aW9uOjpOb0ZhbWlseSk7Ci0gICAgICAgIGNhY2hlZERlc2MtPmZpcnN0RmFtaWx5KCku
c2V0RmFtaWx5KFtmb250IHdlYkNvcmVGYW1pbHlOYW1lXSk7CisgICAgICAgIGNhY2hlZERlc2Mt
PnNldE9uZUZhbWlseShbZm9udCB3ZWJDb3JlRmFtaWx5TmFtZV0pOwogICAgICAgICBjYWNoZWRE
ZXNjLT5zZXRTcGVjaWZpZWRTaXplKFtmb250IHBvaW50U2l6ZV0pOwogICAgICAgICBjYWNoZWRE
ZXNjLT5zZXRXZWlnaHQodG9Gb250V2VpZ2h0KFtmb250TWFuYWdlciB3ZWlnaHRPZkZvbnQ6Zm9u
dF0pKTsKICAgICAgICAgY2FjaGVkRGVzYy0+c2V0SXRhbGljKFtmb250TWFuYWdlciB0cmFpdHNP
ZkZvbnQ6Zm9udF0gJiBOU0l0YWxpY0ZvbnRNYXNrKTsKQEAgLTEwNTgsNyArMTA1OCw3IEBAIHZv
aWQgUmVuZGVyVGhlbWVNYWM6OnNldEZvbnRGcm9tQ29udHJvbFMKICAgICBmb250RGVzY3JpcHRp
b24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5KTsKIAogICAg
IE5TRm9udCogZm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHN5c3RlbUZv
bnRTaXplRm9yQ29udHJvbFNpemU6Y29udHJvbFNpemVdXTsKLSAgICBmb250RGVzY3JpcHRpb24u
Zmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoW2ZvbnQgd2ViQ29yZUZhbWlseU5hbWVdKTsKKyAgICBm
b250RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KFtmb250IHdlYkNvcmVGYW1pbHlOYW1lXSk7CiAg
ICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShbZm9udCBwb2ludFNpemVdICogc3R5
bGUtPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNp
emUoW2ZvbnQgcG9pbnRTaXplXSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOwogCg==
</data>
<flag name="commit-queue"
          id="224341"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202918</attachid>
            <date>2013-05-26 06:44:43 -0700</date>
            <delta_ts>2013-05-26 07:19:50 -0700</delta_ts>
            <desc>more port fixes</desc>
            <filename>font-families-vector-3.patch</filename>
            <type>text/plain</type>
            <size>40953</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MDcxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDEzLTA1LTI2ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgVmVjdG9yIGluc3RlYWQg
b2YgY3VzdG9tIGxpbmtlZCBsaXN0IGZvciBmb250IGZhbWlsaWVzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY3ODMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHZXQgcmlkIG9mIEZvbnRGYW1pbHkgYW5k
IFNoYXJlZEZvbnRGYW1pbHkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6aGFzU2FtZUZvbnQpOgorICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zm9udEZhbWlseUZyb21TdHlsZSk6Cisg
ICAgICAgICogY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUZvbnRGYW1pbHk6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250RmFtaWx5OjphcHBseUluaXRpYWxWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udEZhbWlseTo6YXBwbHlWYWx1ZSk6Cisg
ICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6c3R5bGVGb3JEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjppbml0aWFsaXplRm9udFN0eWxlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpmb250KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6c2V0Rm9udCk6CisgICAgICAgICogcGFnZS9QcmludENvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UHJpbnRDb250ZXh0OjpwYWdlUHJvcGVydHkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZpcnN0RmFtaWx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZhbWlseUNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnQ6OmZhbWlseUF0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fj
aGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250RGF0YSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcDoKKyAgICAgICAgKFNh
bWVTaXplQXNGb250RGVzY3JpcHRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnREZXNjcmlwdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpGb250
RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpmYW1pbHlD
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OmZpcnN0RmFtaWx5KToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6ZmFtaWx5QXQpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpmYW1pbGllcyk6CisgICAgICAgIChXZWJDb3JlOjpG
b250RGVzY3JpcHRpb246OnVzZUZpeGVkRGVmYXVsdFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udERlc2NyaXB0aW9uOjpzZXRPbmVGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uOjpzZXRGYW1pbGllcyk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRp
b246OnN3YXBGYW1pbGllcyk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246Om9w
ZXJhdG9yPT0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuY3BwOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0v
bWFjL1RoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVNYWM6OmNvbnRyb2xGb250
KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udFRyYW5zY29kZXI6OmNvbnZlcnRlclR5cGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHQ6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmNvbXB1dGVJ
bnRyaW5zaWNMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6cHJlZmVycmVkQ29udGVudExvZ2ljYWxXaWR0aCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OnN5c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldEZv
bnRGcm9tQ29udHJvbFNpemUpOgorCiAyMDEzLTA1LTI2ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5n
QGFwcGxlLmNvbT4KIAogICAgICAgICBUcmVlU2NvcGU6OnJvb3ROb2RlKCkgc2hvdWxkIHJldHVy
biBhIENvbnRhaW5lck5vZGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDE1
MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNDIsNyArMzI0Miw3IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aGFzU2FtZUYKICAgICBpZiAoIW1fcmVuZGVyZXIgfHwg
IXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuIG1fcmVu
ZGVyZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmZhbWlseSgpID09IHJlbmRlcmVyLT5z
dHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5mYW1pbHkoKTsKKyAgICByZXR1cm4gbV9yZW5kZXJl
ci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuZmFtaWxpZXMoKSA9PSByZW5kZXJlci0+c3R5
bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuZmFtaWxpZXMoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpoYXNTYW1lRm9udENvbG9yKFJlbmRlck9iamVjdCogcmVuZGVyZXIp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCShyZXZpc2lv
biAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw3ICsyNTIsNyBA
QCBzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiBnZXRBdHRyaWJ1dGVTZXRGCiAgICAgICAgIHJlc3Vs
dCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9u
YW1lKEFUS19URVhUX0FUVFJfSU5ERU5UKSwgYnVmZmVyLmdldCgpKTsKICAgICB9CiAKLSAgICBT
dHJpbmcgZm9udEZhbWlseU5hbWUgPSBzdHlsZS0+Zm9udCgpLmZhbWlseSgpLmZhbWlseSgpLnN0
cmluZygpOworICAgIFN0cmluZyBmb250RmFtaWx5TmFtZSA9IHN0eWxlLT5mb250KCkuZmlyc3RG
YW1pbHkoKTsKICAgICBpZiAoZm9udEZhbWlseU5hbWUubGVmdCg4KSA9PSAiLXdlYmtpdC0iKQog
ICAgICAgICBmb250RmFtaWx5TmFtZSA9IGZvbnRGYW1pbHlOYW1lLnN1YnN0cmluZyg4KTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5jcHAJKHJldmlzaW9uIDE1MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ3LDExICsxNDQ3
LDEwIEBAIHN0YXRpYyB2b2lkIGxvZ1VuaW1wbGVtZW50ZWRQcm9wZXJ0eUlEKEMKIH0KIAogc3Rh
dGljIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5RnJvbVN0eWxlKFJlbmRlclN0
eWxlKiBzdHlsZSkKLXsKLSAgICBjb25zdCBGb250RmFtaWx5JiBmaXJzdEZhbWlseSA9IHN0eWxl
LT5mb250RGVzY3JpcHRpb24oKS5mYW1pbHkoKTsKKyAgICB7CiAgICAgUmVmUHRyPENTU1ZhbHVl
TGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLSAgICBm
b3IgKGNvbnN0IEZvbnRGYW1pbHkqIGZhbWlseSA9ICZmaXJzdEZhbWlseTsgZmFtaWx5OyBmYW1p
bHkgPSBmYW1pbHktPm5leHQoKSkKLSAgICAgICAgbGlzdC0+YXBwZW5kKHZhbHVlRm9yRmFtaWx5
KGZhbWlseS0+ZmFtaWx5KCkpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUt
PmZvbnQoKS5mYW1pbHlDb3VudCgpOyArK2kpCisgICAgICAgIGxpc3QtPmFwcGVuZCh2YWx1ZUZv
ckZhbWlseShzdHlsZS0+Zm9udCgpLmZhbWlseUF0KGkpKSk7CiAgICAgcmV0dXJuIGxpc3QucmVs
ZWFzZSgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVp
bGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHls
ZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRGVw
cmVjYXRlZFN0eWxlQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NjQsNyArNjY1LDcgQEAgcHVibGlj
OgogICAgICAgICBGb250RGVzY3JpcHRpb24gcGFyZW50Rm9udERlc2NyaXB0aW9uID0gc3R5bGVS
ZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIAogICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShwYXJlbnRGb250RGVzY3JpcHRp
b24uZ2VuZXJpY0ZhbWlseSgpKTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShw
YXJlbnRGb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKSk7CisgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRGYW1pbGllcyhwYXJlbnRGb250RGVzY3JpcHRpb24uZmFtaWxpZXMoKSk7CiAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9udERlc2NyaXB0
aW9uLmlzU3BlY2lmaWVkRm9udCgpKTsKICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIHJldHVybjsKQEAgLTY3OSw4ICs2
ODAsOCBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUo
KSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKQogICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzdHlsZVJlc29sdmVy
LT5mb250U2l6ZUZvcktleXdvcmQoc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVY
eFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCBmYWxzZSkpOwogICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShpbml0aWFsRGVzYy5nZW5lcmlj
RmFtaWx5KCkpOwotICAgICAgICBpZiAoIWluaXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkuZmFtaWx5
SXNFbXB0eSgpKQotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShpbml0aWFs
RGVzYy5maXJzdEZhbWlseSgpKTsKKyAgICAgICAgaWYgKCFpbml0aWFsRGVzYy5maXJzdEZhbWls
eSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbGllcyhp
bml0aWFsRGVzYy5mYW1pbGllcygpKTsKIAogICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250
RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjkyLDIz
ICs2OTMsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEZvbnRE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250
RGVzY3JpcHRpb24oKTsKLSAgICAgICAgRm9udEZhbWlseSYgZmlyc3RGYW1pbHkgPSBmb250RGVz
Y3JpcHRpb24uZmlyc3RGYW1pbHkoKTsKLSAgICAgICAgRm9udEZhbWlseSogY3VyckZhbWlseSA9
IDA7Ci0KICAgICAgICAgLy8gQmVmb3JlIG1hcHBpbmcgaW4gYSBuZXcgZm9udC1mYW1pbHkgcHJv
cGVydHksIHdlIHNob3VsZCByZXNldCB0aGUgZ2VuZXJpYyBmYW1pbHkuCiAgICAgICAgIGJvb2wg
b2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUgPSBmb250RGVzY3JpcHRpb24udXNlRml4ZWRE
ZWZhdWx0U2l6ZSgpOwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShG
b250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKIAorICAgICAgICBWZWN0b3I8QXRvbWljU3RyaW5n
LCAxPiBmYW1pbGllczsKICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFs
dWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewogICAgICAgICAgICAgQ1NTVmFsdWUqIGl0
ZW0gPSBpLnZhbHVlKCk7CiAgICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUo
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0p
OwogICAgICAgICAgICAgQXRvbWljU3RyaW5nIGZhY2U7Ci0gICAgICAgICAgICBTZXR0aW5ncyog
c2V0dGluZ3MgPSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5zZXR0aW5ncygpOwogICAgICAg
ICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNTdHJpbmcoKSkKICAgICAgICAgICAgICAgICBmYWNl
ID0gY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwotICAgICAgICAgICAgZWxzZSBpZiAo
c2V0dGluZ3MpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IHN0
eWxlUmVzb2x2ZXItPmRvY3VtZW50KCktPnNldHRpbmdzKCkpIHsKICAgICAgICAgICAgICAgICBz
d2l0Y2ggKGNvbnRlbnRWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVXZWJraXRCb2R5OgogICAgICAgICAgICAgICAgICAgICBmYWNlID0gc2V0dGluZ3Mt
PnN0YW5kYXJkRm9udEZhbWlseSgpOwpAQCAtNzQwLDMxICs3MzgsMjEgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFmYWNlLmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGlmICghY3VyckZhbWlseSkgewotICAgICAgICAg
ICAgICAgICAgICAvLyBGaWxsaW5nIGluIHRoZSBmaXJzdCBmYW1pbHkuCi0gICAgICAgICAgICAg
ICAgICAgIGZpcnN0RmFtaWx5LnNldEZhbWlseShmYWNlKTsKLSAgICAgICAgICAgICAgICAgICAg
Zmlyc3RGYW1pbHkuYXBwZW5kRmFtaWx5KDApOyAvLyBSZW1vdmUgYW55IGluaGVyaXRlZCBmYW1p
bHktZmFsbGJhY2sgbGlzdC4KLSAgICAgICAgICAgICAgICAgICAgY3VyckZhbWlseSA9ICZmaXJz
dEZhbWlseTsKLSAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzU3BlY2lm
aWVkRm9udChmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpID09IEZvbnREZXNjcmlwdGlv
bjo6Tm9GYW1pbHkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFJlZlB0cjxTaGFyZWRGb250RmFtaWx5PiBuZXdGYW1pbHkgPSBTaGFyZWRGb250RmFtaWx5
OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICAgICAgbmV3RmFtaWx5LT5zZXRGYW1pbHkoZmFj
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJGYW1pbHktPmFwcGVuZEZhbWlseShuZXdGYW1p
bHkpOwotICAgICAgICAgICAgICAgICAgICBjdXJyRmFtaWx5ID0gbmV3RmFtaWx5LmdldCgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmYWNlLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChmYW1p
bGllcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzU3Bl
Y2lmaWVkRm9udChmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpID09IEZvbnREZXNjcmlw
dGlvbjo6Tm9GYW1pbHkpOworICAgICAgICAgICAgZmFtaWxpZXMuYXBwZW5kKGZhY2UpOwogICAg
ICAgICB9CiAKLSAgICAgICAgLy8gV2UgY2FuJ3QgY2FsbCB1c2VGaXhlZERlZmF1bHRTaXplKCkg
dW50aWwgYWxsIG5ldyBmb250IGZhbWlsaWVzIGhhdmUgYmVlbiBhZGRlZAotICAgICAgICAvLyBJ
ZiBjdXJyRmFtaWx5IGlzIG5vbi16ZXJvIHRoZW4gd2Ugc2V0IGF0IGxlYXN0IG9uZSBmYW1pbHkg
b24gdGhpcyBkZXNjcmlwdGlvbi4KLSAgICAgICAgaWYgKGN1cnJGYW1pbHkpIHsKLSAgICAgICAg
ICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24u
dXNlRml4ZWREZWZhdWx0U2l6ZSgpICE9IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKQot
ICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlv
biwgc3R5bGVSZXNvbHZlci0+Zm9udFNpemVGb3JLZXl3b3JkKHN0eWxlUmVzb2x2ZXItPmRvY3Vt
ZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0g
MSwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7CisgICAgICAgIGlmIChmYW1pbGll
cy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5hZG9wdEZhbWlsaWVzKGZhbWlsaWVzKTsKIAotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuOworICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgJiYgZm9u
dERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSAhPSBvbGRGYW1pbHlVc2VkRml4ZWRE
ZWZhdWx0U2l6ZSkKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRTaXplKGZvbnRE
ZXNjcmlwdGlvbiwgc3R5bGVSZXNvbHZlci0+Zm9udFNpemVGb3JLZXl3b3JkKHN0eWxlUmVzb2x2
ZXItPmRvY3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3Jk
U2l6ZSgpIC0gMSwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7CisKKyAgICAgICAg
c3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAg
fQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4g
UHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAm
YXBwbHlWYWx1ZSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJl
dmlzaW9uIDE1MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTIwLDggKzkyMCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IFN0eWxlUmVzb2x2ZXI6OnMKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGFuZGFyZEZv
bnQgPSBzZXR0aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5KGZvbnREZXNjcmlwdGlvbi5zY3JpcHQo
KSk7CiAgICAgICAgIGlmICghc3RhbmRhcmRGb250LmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTdGFuZGFy
ZEZhbWlseSk7Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRG
YW1pbHkoc3RhbmRhcmRGb250KTsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZh
bWlseSgpLmFwcGVuZEZhbWlseSgwKTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRP
bmVGYW1pbHkoc3RhbmRhcmRGb250KTsKICAgICAgICAgfQogICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsK
ICAgICAgICAgaW50IHNpemUgPSBTdHlsZVJlc29sdmVyOjpmb250U2l6ZUZvcktleXdvcmQoZG9j
dW1lbnQsIENTU1ZhbHVlTWVkaXVtLCBmYWxzZSk7CkBAIC0zMjcxLDEwICszMjcwLDggQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKAogICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKICAgICBm
b250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSB8
fCAhc2V0dGluZ3MtPnNjcmVlbkZvbnRTdWJzdGl0dXRpb25FbmFibGVkKCkpOwogICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgc3RhbmRhcmRGb250RmFtaWx5ID0gZG9jdW1lbnRTZXR0aW5ncygpLT5z
dGFuZGFyZEZvbnRGYW1pbHkoKTsKLSAgICBpZiAoIXN0YW5kYXJkRm9udEZhbWlseS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KHN0
YW5kYXJkRm9udEZhbWlseSk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgp
LmFwcGVuZEZhbWlseSgwKTsKLSAgICB9CisgICAgaWYgKCFzdGFuZGFyZEZvbnRGYW1pbHkuaXNF
bXB0eSgpKQorICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KHN0YW5kYXJkRm9u
dEZhbWlseSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVk
aXVtIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7CiAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0
aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZhbHNl
KSk7CiAgICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0
aWFsTGluZUhlaWdodCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMTUwNDI5KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTk4MCwxMyArMTk4MCwxMSBAQCBTdHJpbmcgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpmb250KCkgCiAgICAgc2VyaWFsaXplZEZvbnQuYXBwZW5kTnVtYmVy
KGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpKTsKICAgICBzZXJpYWxpemVkRm9u
dC5hcHBlbmRMaXRlcmFsKCJweCIpOwogCi0gICAgY29uc3QgRm9udEZhbWlseSYgZmlyc3RGb250
RmFtaWx5ID0gZm9udERlc2NyaXB0aW9uLmZhbWlseSgpOwotICAgIGZvciAoY29uc3QgRm9udEZh
bWlseSogZm9udEZhbWlseSA9ICZmaXJzdEZvbnRGYW1pbHk7IGZvbnRGYW1pbHk7IGZvbnRGYW1p
bHkgPSBmb250RmFtaWx5LT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKGZvbnRGYW1pbHkgIT0gJmZp
cnN0Rm9udEZhbWlseSkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUoKS5tX2Zv
bnQuZmFtaWx5Q291bnQoKTsgKytpKSB7CisgICAgICAgIGlmIChpKQogICAgICAgICAgICAgc2Vy
aWFsaXplZEZvbnQuYXBwZW5kKCcsJyk7Ci0KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBh
cHBlbmQgZmFtaWx5IGRpcmVjdGx5IHRvIHNlcmlhbGl6ZWRGb250IHJhdGhlciB0aGFuIGJ1aWxk
aW5nIGEgdGVtcG9yYXJ5IHN0cmluZy4KLSAgICAgICAgU3RyaW5nIGZhbWlseSA9IGZvbnRGYW1p
bHktPmZhbWlseSgpOworICAgICAgICBTdHJpbmcgZmFtaWx5ID0gc3RhdGUoKS5tX2ZvbnQuZmFt
aWx5QXQoaSk7CiAgICAgICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0aCgiLXdlYmtpdC0iKSkKICAg
ICAgICAgICAgIGZhbWlseSA9IGZhbWlseS5zdWJzdHJpbmcoOCk7CiAgICAgICAgIGlmIChmYW1p
bHkuY29udGFpbnMoJyAnKSkKQEAgLTIwMjcsMTEgKzIwMjUsOCBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0Rm9udChjCiAgICAgaWYgKFJlbmRlclN0eWxlKiBjb21wdXRlZFN0
eWxlID0gY2FudmFzKCktPmNvbXB1dGVkU3R5bGUoKSkKICAgICAgICAgbmV3U3R5bGUtPnNldEZv
bnREZXNjcmlwdGlvbihjb21wdXRlZFN0eWxlLT5mb250RGVzY3JpcHRpb24oKSk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIEZvbnRGYW1pbHkgZm9udEZhbWlseTsKLSAgICAgICAgZm9udEZhbWlseS5z
ZXRGYW1pbHkoZGVmYXVsdEZvbnRGYW1pbHkpOwotCiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBk
ZWZhdWx0Rm9udERlc2NyaXB0aW9uOwotICAgICAgICBkZWZhdWx0Rm9udERlc2NyaXB0aW9uLnNl
dEZhbWlseShmb250RmFtaWx5KTsKKyAgICAgICAgZGVmYXVsdEZvbnREZXNjcmlwdGlvbi5zZXRP
bmVGYW1pbHkoZGVmYXVsdEZvbnRGYW1pbHkpOwogICAgICAgICBkZWZhdWx0Rm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUoZGVmYXVsdEZvbnRTaXplKTsKICAgICAgICAgZGVmYXVsdEZv
bnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZGVmYXVsdEZvbnRTaXplKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAkocmV2aXNpb24gMTUwNDI5KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzks
NyArMjc5LDcgQEAgU3RyaW5nIFByaW50Q29udGV4dDo6cGFnZVByb3BlcnR5KEZyYW1lKgogICAg
IGlmICghc3RyY21wKHByb3BlcnR5TmFtZSwgImZvbnQtc2l6ZSIpKQogICAgICAgICByZXR1cm4g
U3RyaW5nOjpudW1iZXIoc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkUGl4ZWxTaXpl
KCkpOwogICAgIGlmICghc3RyY21wKHByb3BlcnR5TmFtZSwgImZvbnQtZmFtaWx5IikpCi0gICAg
ICAgIHJldHVybiBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuZmFtaWx5KCkuZmFtaWx5KCkuc3Ry
aW5nKCk7CisgICAgICAgIHJldHVybiBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuZmlyc3RGYW1p
bHkoKTsKICAgICBpZiAoIXN0cmNtcChwcm9wZXJ0eU5hbWUsICJzaXplIikpCiAgICAgICAgIHJl
dHVybiBTdHJpbmc6Om51bWJlcihzdHlsZS0+cGFnZVNpemUoKS53aWR0aCgpLnZhbHVlKCkpICsg
JyAnICsgU3RyaW5nOjpudW1iZXIoc3R5bGUtPnBhZ2VTaXplKCkuaGVpZ2h0KCkudmFsdWUoKSk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZs
LmNwcAkocmV2aXNpb24gMTUwNDI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Jl
bmRlclRoZW1lRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxOCw3ICsxMDE4LDcgQEAgdm9p
ZCBSZW5kZXJUaGVtZUVmbDo6c3lzdGVtRm9udChpbnQsIEZvbgogICAgIERFRklORV9TVEFUSUNf
TE9DQUwoU3RyaW5nLCBmb250RmFjZSwgKEFTQ0lJTGl0ZXJhbCgiU2FucyIpKSk7CiAgICAgZmxv
YXQgZm9udFNpemUgPSBkZWZhdWx0Rm9udFNpemU7CiAKLSAgICBmb250RGVzY3JpcHRpb24uZmly
c3RGYW1pbHkoKS5zZXRGYW1pbHkoZm9udEZhY2UpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRP
bmVGYW1pbHkoZm9udEZhY2UpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXpl
KGZvbnRTaXplKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpO
b0ZhbWlseSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCShy
ZXZpc2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw4ICsxMzAsOSBAQCBwdWJsaWM6CiAKICAgICBUeXBl
c2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX3R5
cGVzZXR0aW5nRmVhdHVyZXM7IH0KIAotICAgIEZvbnRGYW1pbHkmIGZpcnN0RmFtaWx5KCkgeyBy
ZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKTsgfQotICAgIGNvbnN0IEZvbnRG
YW1pbHkmIGZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLmZhbWlseSgp
OyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmaXJzdEZhbWlseSgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7IH0KKyAgICB1bnNpZ25lZCBmYW1pbHlD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7IH0K
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseUF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udERlc2NyaXB0aW9uLmZhbWlseUF0KGkpOyB9CiAKICAgICBGb250SXRhbGljIGl0
YWxpYygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLml0YWxpYygpOyB9CiAgICAg
Rm9udFdlaWdodCB3ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi53ZWln
aHQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FjaGUuY3BwCShyZXZpc2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IE5pY2hvbGFzIFNoYW5rcyA8d2Vi
a2l0QG5pY2tzaGFua3MuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDc5LDQ0ICs0NzksMzgg
QEAgc2l6ZV90IEZvbnRDYWNoZTo6aW5hY3RpdmVGb250RGF0YUNvdW50KAogCiBQYXNzUmVmUHRy
PEZvbnREYXRhPiBGb250Q2FjaGU6OmdldEZvbnREYXRhKGNvbnN0IEZvbnQmIGZvbnQsIGludCYg
ZmFtaWx5SW5kZXgsIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQogeworICAgIEFTU0VSVChm
YW1pbHlJbmRleCAhPSBjQWxsRmFtaWxpZXNTY2FubmVkKTsKICAgICBSZWZQdHI8Rm9udERhdGE+
IHJlc3VsdDsKIAotICAgIGludCBzdGFydEluZGV4ID0gZmFtaWx5SW5kZXg7Ci0gICAgY29uc3Qg
Rm9udEZhbWlseSogc3RhcnRGYW1pbHkgPSAmZm9udC5mb250RGVzY3JpcHRpb24oKS5mYW1pbHko
KTsKLSAgICBmb3IgKGludCBpID0gMDsgc3RhcnRGYW1pbHkgJiYgaSA8IHN0YXJ0SW5kZXg7IGkr
KykKLSAgICAgICAgc3RhcnRGYW1pbHkgPSBzdGFydEZhbWlseS0+bmV4dCgpOwotICAgIGNvbnN0
IEZvbnRGYW1pbHkqIGN1cnJGYW1pbHkgPSBzdGFydEZhbWlseTsKLSAgICB3aGlsZSAoY3VyckZh
bWlseSAmJiAhcmVzdWx0KSB7Ci0gICAgICAgIGZhbWlseUluZGV4Kys7Ci0gICAgICAgIGlmIChj
dXJyRmFtaWx5LT5mYW1pbHkoKS5sZW5ndGgoKSkgewotICAgICAgICAgICAgaWYgKGZvbnRTZWxl
Y3RvcikKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBmb250U2VsZWN0b3ItPmdldEZvbnREYXRh
KGZvbnQuZm9udERlc2NyaXB0aW9uKCksIGN1cnJGYW1pbHktPmZhbWlseSgpKTsKLQotICAgICAg
ICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gZ2V0Q2FjaGVkRm9u
dERhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgY3VyckZhbWlseS0+ZmFtaWx5KCkpOwotICAg
ICAgICB9Ci0gICAgICAgIGN1cnJGYW1pbHkgPSBjdXJyRmFtaWx5LT5uZXh0KCk7CisgICAgYm9v
bCBpc0ZpcnN0ID0gIWZhbWlseUluZGV4OworICAgIGludCBmYW1pbHlDb3VudCA9IGZvbnQuZmFt
aWx5Q291bnQoKTsKKyAgICBmb3IgKDtmYW1pbHlJbmRleCA8IGZhbWlseUNvdW50ICYmICFyZXN1
bHQ7ICsrZmFtaWx5SW5kZXgpIHsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkg
PSBmb250LmZhbWlseUF0KGZhbWlseUluZGV4KTsKKyAgICAgICAgaWYgKGZhbWlseS5pc0VtcHR5
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGZvbnRTZWxlY3RvcikKKyAg
ICAgICAgICAgIHJlc3VsdCA9IGZvbnRTZWxlY3Rvci0+Z2V0Rm9udERhdGEoZm9udC5mb250RGVz
Y3JpcHRpb24oKSwgZmFtaWx5KTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICBy
ZXN1bHQgPSBnZXRDYWNoZWRGb250RGF0YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBmYW1pbHkp
OwogICAgIH0KLQotICAgIGlmICghY3VyckZhbWlseSkKKyAgICBpZiAoZmFtaWx5SW5kZXggPT0g
ZmFtaWx5Q291bnQpCiAgICAgICAgIGZhbWlseUluZGV4ID0gY0FsbEZhbWlsaWVzU2Nhbm5lZDsK
IAotICAgIGlmICghcmVzdWx0KQorICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIGRp
ZG4ndCBmaW5kIGEgZm9udC4gVHJ5IHRvIGZpbmQgYSBzaW1pbGFyIGZvbnQgdXNpbmcgb3VyIG93
biBzcGVjaWZpYyBrbm93bGVkZ2UgYWJvdXQgb3VyIHBsYXRmb3JtLgogICAgICAgICAvLyBGb3Ig
ZXhhbXBsZSBvbiBPUyBYLCB3ZSBrbm93IHRvIG1hcCBhbnkgZmFtaWxpZXMgY29udGFpbmluZyB0
aGUgd29yZHMgQXJhYmljLCBQYXNodG8sIG9yIFVyZHUgdG8gdGhlCiAgICAgICAgIC8vIEdlZXph
IFBybyBmb250LgogICAgICAgICByZXN1bHQgPSBnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShm
b250KTsKKyAgICB9CiAKLSAgICBpZiAoIXJlc3VsdCAmJiBzdGFydEluZGV4ID09IDApIHsKKyAg
ICBpZiAoIXJlc3VsdCAmJiBpc0ZpcnN0KSB7CiAgICAgICAgIC8vIElmIGl0J3MgdGhlIHByaW1h
cnkgZm9udCB0aGF0IHdlIGNvdWxkbid0IGZpbmQsIHdlIHRyeSB0aGUgZm9sbG93aW5nLiBJbiBh
bGwgb3RoZXIgY2FzZXMsIHdlIHdpbGwKICAgICAgICAgLy8ganVzdCB1c2UgcGVyLWNoYXJhY3Rl
ciBzeXN0ZW0gZmFsbGJhY2suCi0KICAgICAgICAgaWYgKGZvbnRTZWxlY3RvcikgewogICAgICAg
ICAgICAgLy8gVHJ5IHRoZSB1c2VyJ3MgcHJlZmVycmVkIHN0YW5kYXJkIGZvbnQuCiAgICAgICAg
ICAgICBpZiAoUmVmUHRyPEZvbnREYXRhPiBkYXRhID0gZm9udFNlbGVjdG9yLT5nZXRGb250RGF0
YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBzdGFuZGFyZEZhbWlseSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogICAgICAgICB9Ci0KICAgICAgICAgLy8gU3RpbGwg
bm8gcmVzdWx0LiAgSGFuZCBiYWNrIG91ciBsYXN0IHJlc29ydCBmYWxsYmFjayBmb250LgogICAg
ICAgICByZXN1bHQgPSBnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGZvbnQuZm9udERlc2NyaXB0
aW9uKCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnREZXNjcmlwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAkocmV2aXNpb24gMTUwNDI5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmljaG9sYXMg
U2hhbmtzIDxjb250YWN0QG5pY2tzaGFua3MuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMzLDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0
IFNhbWVTaXplQXNGb250RGVzY3JpcHRpb24gewotICAgIEZvbnRGYW1pbHkgZmFtaWx5TGlzdDsK
KyAgICBWZWN0b3I8QXRvbWljU3RyaW5nLCAxPiBmYW1pbGllczsKICAgICBSZWZQdHI8Rm9udEZl
YXR1cmVTZXR0aW5ncz4gbV9mZWF0dXJlU2V0dGluZ3M7CiAgICAgZmxvYXQgc2l6ZXNbMl07CiAg
ICAgLy8gRlhJTUU6IE1ha2UgdGhlbSBmaXQgaW50byBvbmUgd29yZC4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5oCShyZXZp
c2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVz
Y3JpcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAo
QykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAw
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAw
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgTmljaG9sYXMgU2hhbmtzIDx3ZWJraXRAbmlja3NoYW5rcy5jb20+CiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpA
QCAtNzcsNyArNzcsOCBAQCBwdWJsaWM6CiAgICAgZW51bSBMaWdhdHVyZXNTdGF0ZSB7IE5vcm1h
bExpZ2F0dXJlc1N0YXRlLCBEaXNhYmxlZExpZ2F0dXJlc1N0YXRlLCBFbmFibGVkTGlnYXR1cmVz
U3RhdGUgfTsKIAogICAgIEZvbnREZXNjcmlwdGlvbigpCi0gICAgICAgIDogbV9zcGVjaWZpZWRT
aXplKDApCisgICAgICAgIDogbV9mYW1pbGllcygxKQorICAgICAgICAsIG1fc3BlY2lmaWVkU2l6
ZSgwKQogICAgICAgICAsIG1fY29tcHV0ZWRTaXplKDApCiAgICAgICAgICwgbV9vcmllbnRhdGlv
bihIb3Jpem9udGFsKQogICAgICAgICAsIG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbihOb25DSktH
bHlwaE9yaWVudGF0aW9uVmVydGljYWxSaWdodCkKQEAgLTEwMyw5ICsxMDQsMTIgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0Owog
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250RGVzY3JpcHRpb24mIG90aGVyKSBjb25zdCB7
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQotICAgIAotICAgIGNvbnN0IEZvbnRGYW1pbHkm
IGZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWx5TGlzdDsgfQotICAgIEZvbnRGYW1pbHkm
IGZpcnN0RmFtaWx5KCkgeyByZXR1cm4gbV9mYW1pbHlMaXN0OyB9CisKKyAgICB1bnNpZ25lZCBm
YW1pbHlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWxpZXMuc2l6ZSgpOyB9CisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBmaXJzdEZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIGZhbWlseUF0KDAp
OyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlBdCh1bnNpZ25lZCBpKSBjb25zdCB7
IHJldHVybiBtX2ZhbWlsaWVzW2ldOyB9CisgICAgY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZywg
MT4mIGZhbWlsaWVzKCkgY29uc3QgeyByZXR1cm4gbV9mYW1pbGllczsgfQorCiAgICAgZmxvYXQg
c3BlY2lmaWVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWVkU2l6ZTsgfQogICAgIGZs
b2F0IGNvbXB1dGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcHV0ZWRTaXplOyB9CiAgICAg
Rm9udEl0YWxpYyBpdGFsaWMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250SXRhbGlj
PihtX2l0YWxpYyk7IH0KQEAgLTExOCw3ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAgR2VuZXJpY0Zh
bWlseVR5cGUgZ2VuZXJpY0ZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEdlbmVy
aWNGYW1pbHlUeXBlPihtX2dlbmVyaWNGYW1pbHkpOyB9CiAgICAgYm9vbCB1c2VQcmludGVyRm9u
dCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlUHJpbnRlckZvbnQ7IH0KICAgICAvLyBvbmx5IHVzZSBm
aXhlZCBkZWZhdWx0IHNpemUgd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBmb250IGZhbWlseSwgYW5k
IHRoYXQgZmFtaWx5IGlzICJtb25vc3BhY2UiCi0gICAgYm9vbCB1c2VGaXhlZERlZmF1bHRTaXpl
KCkgY29uc3QgeyByZXR1cm4gZ2VuZXJpY0ZhbWlseSgpID09IE1vbm9zcGFjZUZhbWlseSAmJiAh
ZmFtaWx5KCkubmV4dCgpICYmIGZhbWlseSgpLmZhbWlseSgpID09IG1vbm9zcGFjZUZhbWlseTsg
fQorICAgIGJvb2wgdXNlRml4ZWREZWZhdWx0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGdlbmVyaWNG
YW1pbHkoKSA9PSBNb25vc3BhY2VGYW1pbHkgJiYgZmFtaWx5Q291bnQoKSA9PSAxICYmIGZpcnN0
RmFtaWx5KCkgPT0gbW9ub3NwYWNlRmFtaWx5OyB9CiAgICAgRm9udFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRSZW5kZXJpbmdNb2Rl
PihtX3JlbmRlcmluZ01vZGUpOyB9CiAgICAgS2VybmluZyBrZXJuaW5nKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8S2VybmluZz4obV9rZXJuaW5nKTsgfQogICAgIExpZ2F0dXJlc1N0YXRl
IGNvbW1vbkxpZ2F0dXJlc1N0YXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TGlnYXR1
cmVzU3RhdGU+KG1fY29tbW9uTGlnYXR1cmVzU3RhdGUpOyB9CkBAIC0xMzcsNyArMTQxLDkgQEAg
cHVibGljOgogICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZlYXR1cmVTZXR0aW5ncygpIGNvbnN0
IHsgcmV0dXJuIG1fZmVhdHVyZVNldHRpbmdzLmdldCgpOyB9CiAgICAgRm9udERlc2NyaXB0aW9u
IG1ha2VOb3JtYWxGZWF0dXJlU2V0dGluZ3MoKSBjb25zdDsKIAotICAgIHZvaWQgc2V0RmFtaWx5
KGNvbnN0IEZvbnRGYW1pbHkmIGZhbWlseSkgeyBtX2ZhbWlseUxpc3QgPSBmYW1pbHk7IH0KKyAg
ICB2b2lkIHNldE9uZUZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkgeyBBU1NFUlQo
bV9mYW1pbGllcy5zaXplKCkgPT0gMSk7IG1fZmFtaWxpZXNbMF0gPSBmYW1pbHk7IH0KKyAgICB2
b2lkIHNldEZhbWlsaWVzKGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmcsIDE+JiBmYW1pbGllcykg
eyBtX2ZhbWlsaWVzID0gZmFtaWxpZXM7IH0KKyAgICB2b2lkIGFkb3B0RmFtaWxpZXMoVmVjdG9y
PEF0b21pY1N0cmluZywgMT4mIGZhbWlsaWVzKSB7IG1fZmFtaWxpZXMuc3dhcChmYW1pbGllcyk7
IH0KICAgICB2b2lkIHNldENvbXB1dGVkU2l6ZShmbG9hdCBzKSB7IG1fY29tcHV0ZWRTaXplID0g
Y2xhbXBUb0Zsb2F0KHMpOyB9CiAgICAgdm9pZCBzZXRTcGVjaWZpZWRTaXplKGZsb2F0IHMpIHsg
bV9zcGVjaWZpZWRTaXplID0gY2xhbXBUb0Zsb2F0KHMpOyB9CiAgICAgdm9pZCBzZXRJdGFsaWMo
Rm9udEl0YWxpYyBpKSB7IG1faXRhbGljID0gaTsgfQpAQCAtMTY0LDcgKzE3MCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldEZlYXR1cmVTZXR0aW5ncyhQYXNzUmVmUHRyPEZvbnRGZWF0dXJlU2V0
dGluZ3M+IHNldHRpbmdzKSB7IG1fZmVhdHVyZVNldHRpbmdzID0gc2V0dGluZ3M7IH0KIAogcHJp
dmF0ZToKLSAgICBGb250RmFtaWx5IG1fZmFtaWx5TGlzdDsgLy8gVGhlIGxpc3Qgb2YgZm9udCBm
YW1pbGllcyB0byBiZSB1c2VkLgorICAgIFZlY3RvcjxBdG9taWNTdHJpbmcsIDE+IG1fZmFtaWxp
ZXM7CiAgICAgUmVmUHRyPEZvbnRGZWF0dXJlU2V0dGluZ3M+IG1fZmVhdHVyZVNldHRpbmdzOwog
CiAgICAgZmxvYXQgbV9zcGVjaWZpZWRTaXplOyAgIC8vIFNwZWNpZmllZCBDU1MgdmFsdWUuIElu
ZGVwZW5kZW50IG9mIHJlbmRlcmluZyBpc3N1ZXMgc3VjaCBhcyBpbnRlZ2VyCkBAIC0yMDMsNyAr
MjA5LDcgQEAgcHJpdmF0ZToKIAogaW5saW5lIGJvb2wgRm9udERlc2NyaXB0aW9uOjpvcGVyYXRv
cj09KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
ZmFtaWx5TGlzdCA9PSBvdGhlci5tX2ZhbWlseUxpc3QKKyAgICByZXR1cm4gbV9mYW1pbGllcyA9
PSBvdGhlci5tX2ZhbWlsaWVzCiAgICAgICAgICYmIG1fc3BlY2lmaWVkU2l6ZSA9PSBvdGhlci5t
X3NwZWNpZmllZFNpemUKICAgICAgICAgJiYgbV9jb21wdXRlZFNpemUgPT0gb3RoZXIubV9jb21w
dXRlZFNpemUKICAgICAgICAgJiYgbV9pdGFsaWMgPT0gb3RoZXIubV9pdGFsaWMKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuY3BwCShyZXZp
c2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFt
aWx5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NiArMSBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250RmFtaWx5LmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRGYW1pbHkmIGEsIGNvbnN0IEZv
bnRGYW1pbHkmIGIpCi17Ci0gICAgaWYgKGEuZmFtaWx5KCkgIT0gYi5mYW1pbHkoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IEZvbnRGYW1pbHkqIGFwOwotICAgIGNvbnN0IEZv
bnRGYW1pbHkqIGJwOwotICAgIGZvciAoYXAgPSBhLm5leHQoKSwgYnAgPSBiLm5leHQoKTsgYXAg
IT0gYnA7IGFwID0gYXAtPm5leHQoKSwgYnAgPSBicC0+bmV4dCgpKSB7Ci0gICAgICAgIGlmICgh
YXAgfHwgIWJwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoYXAtPmZh
bWlseSgpICE9IGJwLT5mYW1pbHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KKy8vIFJlbW92ZSBtZS4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFtaWx5LmgJKHJldmlzaW9uIDE1MDQy
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw5NiArMSBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYg
Rm9udEZhbWlseV9oCi0jZGVmaW5lIEZvbnRGYW1pbHlfaAotCi0jaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRv
bWljU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU2hhcmVkRm9udEZh
bWlseTsKLQotY2xhc3MgRm9udEZhbWlseSB7Ci1wdWJsaWM6Ci0gICAgRm9udEZhbWlseSgpIHsg
fQotICAgIH5Gb250RmFtaWx5KCk7Ci0KLSAgICB2b2lkIHNldEZhbWlseShjb25zdCBBdG9taWNT
dHJpbmcmIGZhbWlseSkgeyBtX2ZhbWlseSA9IGZhbWlseTsgfQotICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5KCkgY29uc3QgeyByZXR1cm4gbV9mYW1pbHk7IH0KLSAgICBib29sIGZhbWls
eUlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlseS5pc0VtcHR5KCk7IH0KLQotICAgIGNv
bnN0IEZvbnRGYW1pbHkqIG5leHQoKSBjb25zdDsKLQotICAgIHZvaWQgYXBwZW5kRmFtaWx5KFBh
c3NSZWZQdHI8U2hhcmVkRm9udEZhbWlseT4pOwotICAgIFBhc3NSZWZQdHI8U2hhcmVkRm9udEZh
bWlseT4gcmVsZWFzZU5leHQoKTsKLQotcHJpdmF0ZToKLSAgICBBdG9taWNTdHJpbmcgbV9mYW1p
bHk7Ci0gICAgUmVmUHRyPFNoYXJlZEZvbnRGYW1pbHk+IG1fbmV4dDsKLX07Ci0KLWNsYXNzIFNo
YXJlZEZvbnRGYW1pbHkgOiBwdWJsaWMgRm9udEZhbWlseSwgcHVibGljIFJlZkNvdW50ZWQ8U2hh
cmVkRm9udEZhbWlseT4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEZv
bnRGYW1pbHk+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNo
YXJlZEZvbnRGYW1pbHkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBTaGFyZWRGb250RmFtaWx5
KCkgeyB9Ci19OwotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udEZhbWlseSYsIGNvbnN0IEZv
bnRGYW1pbHkmKTsKLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9udEZhbWlseSYgYSwg
Y29uc3QgRm9udEZhbWlseSYgYikgeyByZXR1cm4gIShhID09IGIpOyB9Ci0KLWlubGluZSBGb250
RmFtaWx5Ojp+Rm9udEZhbWlseSgpCi17Ci0gICAgLy8gVGhpcyBjb2RlIGNhbWUgZnJvbSByZW1v
dmVkIExpc3RSZWZQdHIgdG8gYXZvaWQgcG9zc2libGUgb3ZlcmZsb3dpbmcgdGhlIHN0YWNrLgot
ICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgbmVlZCBpdD8KLSAgICBSZWZQdHI8U2hhcmVkRm9u
dEZhbWlseT4gcmVhcGVyID0gbV9uZXh0LnJlbGVhc2UoKTsKLSAgICB3aGlsZSAocmVhcGVyICYm
IHJlYXBlci0+aGFzT25lUmVmKCkpCi0gICAgICAgIHJlYXBlciA9IHJlYXBlci0+cmVsZWFzZU5l
eHQoKTsgLy8gaW1wbGljaXRseSBwcm90ZWN0cyByZWFwZXItPm5leHQsIHRoZW4gZGVyZWZzIHJl
YXBlcgotfQotCi1pbmxpbmUgY29uc3QgRm9udEZhbWlseSogRm9udEZhbWlseTo6bmV4dCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fbmV4dC5nZXQoKTsKLX0KLQotaW5saW5lIHZvaWQgRm9udEZh
bWlseTo6YXBwZW5kRmFtaWx5KFBhc3NSZWZQdHI8U2hhcmVkRm9udEZhbWlseT4gZmFtaWx5KQot
ewotICAgIG1fbmV4dCA9IGZhbWlseTsKLX0KLQotaW5saW5lIFBhc3NSZWZQdHI8U2hhcmVkRm9u
dEZhbWlseT4gRm9udEZhbWlseTo6cmVsZWFzZU5leHQoKQotewotICAgIHJldHVybiBtX25leHQu
cmVsZWFzZSgpOwotfQotCi19Ci0KLSNlbmRpZgorLy8gUmVtb3ZlIG1lLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1t
CShyZXZpc2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvRm9udENhY2hlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksMTggKzE1OSwxNiBAQCBQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdlCiAgICAgLy8gdGhlIHByZXNl
bmNlIG9mIGtleXdvcmRzIGluIHRoZSB0aGUgcmVxdWVzdGVkIG5hbWVzLiAgRm9yIGV4YW1wbGUs
IHdlJ2xsCiAgICAgLy8gbWF0Y2ggYW55IG5hbWUgdGhhdCBjb250YWlucyAiQXJhYmljIiB0byBH
ZWV6YSBQcm8uCiAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YTsKLSAg
ICBjb25zdCBGb250RmFtaWx5KiBjdXJyRmFtaWx5ID0gJmZvbnQuZm9udERlc2NyaXB0aW9uKCku
ZmFtaWx5KCk7Ci0gICAgd2hpbGUgKGN1cnJGYW1pbHkgJiYgIXNpbXBsZUZvbnREYXRhKSB7Ci0g
ICAgICAgIGlmIChjdXJyRmFtaWx5LT5mYW1pbHkoKS5sZW5ndGgoKSkgewotICAgICAgICAgICAg
c3RhdGljIFN0cmluZyogbWF0Y2hXb3Jkc1szXSA9IHsgbmV3IFN0cmluZygiQXJhYmljIiksIG5l
dyBTdHJpbmcoIlBhc2h0byIpLCBuZXcgU3RyaW5nKCJVcmR1IikgfTsKLSAgICAgICAgICAgIERF
RklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBnZWV6YVN0ciwgKCJHZWV6YSBQcm8iLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgICAgICAgICBmb3IgKGlu
dCBqID0gMDsgaiA8IDMgJiYgIXNpbXBsZUZvbnREYXRhOyArK2opCi0gICAgICAgICAgICAgICAg
aWYgKGN1cnJGYW1pbHktPmZhbWlseSgpLmNvbnRhaW5zKCptYXRjaFdvcmRzW2pdLCBmYWxzZSkp
Ci0gICAgICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEo
Zm9udC5mb250RGVzY3JpcHRpb24oKSwgZ2VlemFTdHIpOwotICAgICAgICB9Ci0gICAgICAgIGN1
cnJGYW1pbHkgPSBjdXJyRmFtaWx5LT5uZXh0KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGZvbnQuZmFtaWx5Q291bnQoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5ID0gZm9udC5mYW1pbHlBdChpKTsKKyAgICAgICAgaWYgKGZhbWlseS5pc0VtcHR5
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgc3RhdGljIFN0cmluZyogbWF0Y2hX
b3Jkc1szXSA9IHsgbmV3IFN0cmluZygiQXJhYmljIiksIG5ldyBTdHJpbmcoIlBhc2h0byIpLCBu
ZXcgU3RyaW5nKCJVcmR1IikgfTsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNT
dHJpbmcsIGdlZXphU3RyLCAoIkdlZXphIFBybyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpKTsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzICYmICFzaW1wbGVGb250
RGF0YTsgKytqKQorICAgICAgICAgICAgaWYgKGZhbWlseS5jb250YWlucygqbWF0Y2hXb3Jkc1tq
XSwgZmFsc2UpKQorICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9u
dERhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgZ2VlemFTdHIpOwogICAgIH0KLQogICAgIHJl
dHVybiBzaW1wbGVGb250RGF0YS5yZWxlYXNlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAJKHJldmlzaW9u
IDE1MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNo
ZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBGb250Q2FjaGU6OmdlCiAKIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZv
bnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKIHsKLSAgICBjb25z
dCBBdG9taWNTdHJpbmcgZmFsbGJhY2tGYW1pbHkgPSBRRm9udChmb250RGVzY3JpcHRpb24uZmFt
aWx5KCkuZmFtaWx5KCkpLmxhc3RSZXNvcnRGYW1pbHkoKTsKKyAgICBjb25zdCBBdG9taWNTdHJp
bmcgZmFsbGJhY2tGYW1pbHkgPSBRRm9udChmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKSku
bGFzdFJlc29ydEZhbWlseSgpOwogICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShuZXcgRm9u
dFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNrRmFtaWx5KSwgc2hvdWxkUmV0
YWluKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQko
cmV2aXNpb24gMTUwNDI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MDUsNyArNjA1LDcgQEAgRm9udERlc2NyaXB0aW9uIFRo
ZW1lTWFjOjpjb250cm9sRm9udChDbwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdl
bmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseSk7CiAKICAgICAgICAgICAg
IE5TRm9udCogbnNGb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQgc3lzdGVt
Rm9udFNpemVGb3JDb250cm9sU2l6ZTpjb250cm9sU2l6ZUZvckZvbnQoZm9udCldXTsKLSAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseShbbnNGb250IHdl
YkNvcmVGYW1pbHlOYW1lXSk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0T25lRmFt
aWx5KFtuc0ZvbnQgd2ViQ29yZUZhbWlseU5hbWVdKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRDb21wdXRlZFNpemUoW25zRm9udCBwb2ludFNpemVdICogem9vbUZhY3Rvcik7CiAg
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShbbnNGb250IHBvaW50
U2l6ZV0gKiB6b29tRmFjdG9yKTsKICAgICAgICAgICAgIHJldHVybiBmb250RGVzY3JpcHRpb247
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5
bGUuY3BwCShyZXZpc2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9S
ZW5kZXJUaGVtZVFTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw5ICsyNTAsNyBAQCB2
b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RCdXR0b25TdHlsCiAgICAgZm9udERlc2NyaXB0
aW9uLnNldENvbXB1dGVkU2l6ZShzdHlsZS0+Zm9udFNpemUoKSk7CiAjZW5kaWYKIAotICAgIEZv
bnRGYW1pbHkgZm9udEZhbWlseTsKLSAgICBmb250RmFtaWx5LnNldEZhbWlseShtX2J1dHRvbkZv
bnRGYW1pbHkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHkoZm9udEZhbWlseSk7Cisg
ICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShtX2J1dHRvbkZvbnRGYW1pbHkpOwogICAg
IHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICBzdHlsZS0+
Zm9udCgpLnVwZGF0ZShzdHlsZVJlc29sdmVyLT5mb250U2VsZWN0b3IoKSk7CiAgICAgc3R5bGUt
PnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIv
Rm9udFRyYW5zY29kZXIuY3BwCShyZXZpc2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Miw3ICs2Miw3IEBAIEZvbnRUcmFuc2NvZGVyOjpGb250VHJhbnNjb2RlcigpCiAKIEZv
bnRUcmFuc2NvZGVyOjpDb252ZXJ0ZXJUeXBlIEZvbnRUcmFuc2NvZGVyOjpjb252ZXJ0ZXJUeXBl
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBUZXh0RW5jb2Rp
bmcqIGVuY29kaW5nKSBjb25zdAogewotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZm9udEZhbWls
eSA9IGZvbnREZXNjcmlwdGlvbi5mYW1pbHkoKS5mYW1pbHkoKS5zdHJpbmcoKTsKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGZvbnRGYW1pbHkgPSBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHko
KTsKICAgICBpZiAoIWZvbnRGYW1pbHkuaXNOdWxsKCkpIHsKICAgICAgICAgSGFzaE1hcDxBdG9t
aWNTdHJpbmcsIENvbnZlcnRlclR5cGU+Ojpjb25zdF9pdGVyYXRvciBmb3VuZCA9IG1fY29udmVy
dGVyVHlwZXMuZmluZChmb250RmFtaWx5KTsKICAgICAgICAgaWYgKGZvdW5kICE9IG1fY29udmVy
dGVyVHlwZXMuZW5kKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0lt
YWdlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJh
Z0ltYWdlV2luLmNwcAkocmV2aXNpb24gMTUwNDI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL0RyYWdJbWFnZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCwxMCArMTEwLDcg
QEAgc3RhdGljIEZvbnQgZHJhZ0xhYmVsRm9udChpbnQgc2l6ZSwgYm9vbAogCiAgICAgRm9udERl
c2NyaXB0aW9uIGRlc2NyaXB0aW9uOwogICAgIGRlc2NyaXB0aW9uLnNldFdlaWdodChib2xkID8g
Rm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsKLQotICAgIEZvbnRGYW1pbHkgZmFt
aWx5OwotICAgIGZhbWlseS5zZXRGYW1pbHkobWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQubGZGYWNl
TmFtZSk7Ci0gICAgZGVzY3JpcHRpb24uc2V0RmFtaWx5KGZhbWlseSk7CisgICAgZGVzY3JpcHRp
b24uc2V0T25lRmFtaWx5KG1ldHJpY3MubGZTbUNhcHRpb25Gb250LmxmRmFjZU5hbWUpOwogICAg
IGRlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoKGZsb2F0KXNpemUpOwogICAgIGRlc2NyaXB0
aW9uLnNldENvbXB1dGVkU2l6ZSgoZmxvYXQpc2l6ZSk7CiAgICAgZGVzY3JpcHRpb24uc2V0UmVu
ZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDE1MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCw3IEBAIHZv
aWQgUmVuZGVyVGV4dDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWYKICAgICBpZiAoIW9sZFN0eWxl
KSB7CiAgICAgICAgIHVwZGF0ZU5lZWRzVHJhbnNjb2RpbmcoKTsKICAgICAgICAgbmVlZHNSZXNl
dFRleHQgPSBtX25lZWRzVHJhbnNjb2Rpbmc7Ci0gICAgfSBlbHNlIGlmIChvbGRTdHlsZS0+Zm9u
dCgpLm5lZWRzVHJhbnNjb2RpbmcoKSAhPSBuZXdTdHlsZS0+Zm9udCgpLm5lZWRzVHJhbnNjb2Rp
bmcoKSB8fCAobmV3U3R5bGUtPmZvbnQoKS5uZWVkc1RyYW5zY29kaW5nKCkgJiYgb2xkU3R5bGUt
PmZvbnQoKS5mYW1pbHkoKS5mYW1pbHkoKSAhPSBuZXdTdHlsZS0+Zm9udCgpLmZhbWlseSgpLmZh
bWlseSgpKSkgeworICAgIH0gZWxzZSBpZiAob2xkU3R5bGUtPmZvbnQoKS5uZWVkc1RyYW5zY29k
aW5nKCkgIT0gbmV3U3R5bGUtPmZvbnQoKS5uZWVkc1RyYW5zY29kaW5nKCkgfHwgKG5ld1N0eWxl
LT5mb250KCkubmVlZHNUcmFuc2NvZGluZygpICYmIG9sZFN0eWxlLT5mb250KCkuZmlyc3RGYW1p
bHkoKSAhPSBuZXdTdHlsZS0+Zm9udCgpLmZpcnN0RmFtaWx5KCkpKSB7CiAgICAgICAgIHVwZGF0
ZU5lZWRzVHJhbnNjb2RpbmcoKTsKICAgICAgICAgbmVlZHNSZXNldFRleHQgPSB0cnVlOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
LmNwcAkocmV2aXNpb24gMTUwNDI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYyLDcgKzI2Miw3IEBAIGZsb2F0
IFJlbmRlclRleHRDb250cm9sOjpzY2FsZUVtVG9Vbml0cygKIHZvaWQgUmVuZGVyVGV4dENvbnRy
b2w6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxX
aWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNhbFdpZHRoKSBjb25zdAogewogICAgIC8vIFVzZSBh
dmVyYWdlIGNoYXJhY3RlciB3aWR0aC4gTWF0Y2hlcyBJRS4KLSAgICBBdG9taWNTdHJpbmcgZmFt
aWx5ID0gc3R5bGUoKS0+Zm9udCgpLmZhbWlseSgpLmZhbWlseSgpOworICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5ID0gc3R5bGUoKS0+Zm9udCgpLmZpcnN0RmFtaWx5KCk7CiAgICAgbWF4
TG9naWNhbFdpZHRoID0gcHJlZmVycmVkQ29udGVudExvZ2ljYWxXaWR0aChjb25zdF9jYXN0PFJl
bmRlclRleHRDb250cm9sKj4odGhpcyktPmdldEF2Z0NoYXJXaWR0aChmYW1pbHkpKTsKICAgICBp
ZiAoUmVuZGVyQm94KiBpbm5lclRleHRSZW5kZXJCb3ggPSBpbm5lclRleHRFbGVtZW50KCktPnJl
bmRlckJveCgpKQogICAgICAgICBtYXhMb2dpY2FsV2lkdGggKz0gaW5uZXJUZXh0UmVuZGVyQm94
LT5wYWRkaW5nU3RhcnQoKSArIGlubmVyVGV4dFJlbmRlckJveC0+cGFkZGluZ0VuZCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5jcHAJKHJldmlzaW9uIDE1MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMjMsNyArMzIzLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OgogICAgIExheW91dFVuaXQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oY2VpbGVk
TGF5b3V0VW5pdChjaGFyV2lkdGggKiBmYWN0b3IpKTsKIAogICAgIGZsb2F0IG1heENoYXJXaWR0
aCA9IDAuZjsKLSAgICBBdG9taWNTdHJpbmcgZmFtaWx5ID0gc3R5bGUoKS0+Zm9udCgpLmZhbWls
eSgpLmZhbWlseSgpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5ID0gc3R5bGUoKS0+
Zm9udCgpLmZpcnN0RmFtaWx5KCk7CiAgICAgLy8gU2luY2UgTHVjaWRhIEdyYW5kZSBpcyB0aGUg
ZGVmYXVsdCBmb250LCB3ZSB3YW50IHRoaXMgdG8gbWF0Y2ggdGhlIHdpZHRoCiAgICAgLy8gb2Yg
TVMgU2hlbGwgRGxnLCB0aGUgZGVmYXVsdCBmb250IGZvciB0ZXh0YXJlYXMgaW4gRmlyZWZveCwg
U2FmYXJpIFdpbiBhbmQKICAgICAvLyBJRSBmb3Igc29tZSBlbmNvZGluZ3MgKGluIElFLCB0aGUg
ZGVmYXVsdCBmb250IGlzIGVuY29kaW5nIHNwZWNpZmljKS4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDE1MDQyOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NjUxLDcgKzY1MSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnN5c3RlbUZvbnQoaW50IGNzc1YK
ICAgICAgICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFy
ZWRGb250TWFuYWdlcl07CiAgICAgICAgIGNhY2hlZERlc2MtPnNldElzQWJzb2x1dGVTaXplKHRy
dWUpOwogICAgICAgICBjYWNoZWREZXNjLT5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlv
bjo6Tm9GYW1pbHkpOwotICAgICAgICBjYWNoZWREZXNjLT5maXJzdEZhbWlseSgpLnNldEZhbWls
eShbZm9udCB3ZWJDb3JlRmFtaWx5TmFtZV0pOworICAgICAgICBjYWNoZWREZXNjLT5zZXRPbmVG
YW1pbHkoW2ZvbnQgd2ViQ29yZUZhbWlseU5hbWVdKTsKICAgICAgICAgY2FjaGVkRGVzYy0+c2V0
U3BlY2lmaWVkU2l6ZShbZm9udCBwb2ludFNpemVdKTsKICAgICAgICAgY2FjaGVkRGVzYy0+c2V0
V2VpZ2h0KHRvRm9udFdlaWdodChbZm9udE1hbmFnZXIgd2VpZ2h0T2ZGb250OmZvbnRdKSk7CiAg
ICAgICAgIGNhY2hlZERlc2MtPnNldEl0YWxpYyhbZm9udE1hbmFnZXIgdHJhaXRzT2ZGb250OmZv
bnRdICYgTlNJdGFsaWNGb250TWFzayk7CkBAIC0xMDU4LDcgKzEwNTgsNyBAQCB2b2lkIFJlbmRl
clRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTCiAgICAgZm9udERlc2NyaXB0aW9uLnNldEdl
bmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseSk7CiAKICAgICBOU0ZvbnQq
IGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBzeXN0ZW1Gb250U2l6ZUZv
ckNvbnRyb2xTaXplOmNvbnRyb2xTaXplXV07Ci0gICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFt
aWx5KCkuc2V0RmFtaWx5KFtmb250IHdlYkNvcmVGYW1pbHlOYW1lXSk7CisgICAgZm9udERlc2Ny
aXB0aW9uLnNldE9uZUZhbWlseShbZm9udCB3ZWJDb3JlRmFtaWx5TmFtZV0pOwogICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoW2ZvbnQgcG9pbnRTaXplXSAqIHN0eWxlLT5lZmZl
Y3RpdmVab29tKCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKFtmb250
IHBvaW50U2l6ZV0gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCShyZXZpc2lvbiAxNTA0MjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yODUsNyArMjg1LDcgQEAgc3RhdGljIHZvaWQgZmlsbEZvbnREZXNjcmlwdGlvbihG
b250RGVzYwogeyAgICAKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1
ZSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9u
OjpOb0ZhbWlseSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5
KFN0cmluZyhsb2dGb250LmxmRmFjZU5hbWUpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0T25l
RmFtaWx5KFN0cmluZyhsb2dGb250LmxmRmFjZU5hbWUpKTsKICAgICBmb250RGVzY3JpcHRpb24u
c2V0U3BlY2lmaWVkU2l6ZShmb250U2l6ZSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdo
dChsb2dGb250LmxmV2VpZ2h0ID49IDcwMCA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5v
cm1hbCk7IC8vIEZJWE1FOiBVc2UgcmVhbCB3ZWlnaHQuCiAgICAgZm9udERlc2NyaXB0aW9uLnNl
dEl0YWxpYyhsb2dGb250LmxmSXRhbGljKTsK
</data>
<flag name="commit-queue"
          id="224344"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202920</attachid>
            <date>2013-05-26 07:19:50 -0700</date>
            <delta_ts>2013-05-26 17:27:44 -0700</delta_ts>
            <desc>another</desc>
            <filename>font-families-vector-4.patch</filename>
            <type>text/plain</type>
            <size>42782</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MDcxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDEzLTA1LTI2ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgVmVjdG9yIGluc3RlYWQg
b2YgY3VzdG9tIGxpbmtlZCBsaXN0IGZvciBmb250IGZhbWlsaWVzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY3ODMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHZXQgcmlkIG9mIEZvbnRGYW1pbHkgYW5k
IFNoYXJlZEZvbnRGYW1pbHkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6aGFzU2FtZUZvbnQpOgorICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zm9udEZhbWlseUZyb21TdHlsZSk6Cisg
ICAgICAgICogY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUZvbnRGYW1pbHk6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250RmFtaWx5OjphcHBseUluaXRpYWxWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udEZhbWlseTo6YXBwbHlWYWx1ZSk6Cisg
ICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6c3R5bGVGb3JEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjppbml0aWFsaXplRm9udFN0eWxlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpmb250KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6c2V0Rm9udCk6CisgICAgICAgICogcGFnZS9QcmludENvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UHJpbnRDb250ZXh0OjpwYWdlUHJvcGVydHkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZpcnN0RmFtaWx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZhbWlseUNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnQ6OmZhbWlseUF0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fj
aGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250RGF0YSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcDoKKyAgICAgICAgKFNh
bWVTaXplQXNGb250RGVzY3JpcHRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnREZXNjcmlwdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpGb250
RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpmYW1pbHlD
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OmZpcnN0RmFtaWx5KToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6ZmFtaWx5QXQpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpmYW1pbGllcyk6CisgICAgICAgIChXZWJDb3JlOjpG
b250RGVzY3JpcHRpb246OnVzZUZpeGVkRGVmYXVsdFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udERlc2NyaXB0aW9uOjpzZXRPbmVGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uOjpzZXRGYW1pbGllcyk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRp
b246OnN3YXBGYW1pbGllcyk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246Om9w
ZXJhdG9yPT0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuY3BwOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0v
bWFjL1RoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVNYWM6OmNvbnRyb2xGb250
KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udFRyYW5zY29kZXI6OmNvbnZlcnRlclR5cGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHQ6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmNvbXB1dGVJ
bnRyaW5zaWNMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6cHJlZmVycmVkQ29udGVudExvZ2ljYWxXaWR0aCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OnN5c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldEZv
bnRGcm9tQ29udHJvbFNpemUpOgorCiAyMDEzLTA1LTI2ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5n
QGFwcGxlLmNvbT4KIAogICAgICAgICBUcmVlU2NvcGU6OnJvb3ROb2RlKCkgc2hvdWxkIHJldHVy
biBhIENvbnRhaW5lck5vZGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDE1
MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNDIsNyArMzI0Miw3IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aGFzU2FtZUYKICAgICBpZiAoIW1fcmVuZGVyZXIgfHwg
IXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuIG1fcmVu
ZGVyZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmZhbWlseSgpID09IHJlbmRlcmVyLT5z
dHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5mYW1pbHkoKTsKKyAgICByZXR1cm4gbV9yZW5kZXJl
ci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuZmFtaWxpZXMoKSA9PSByZW5kZXJlci0+c3R5
bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuZmFtaWxpZXMoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpoYXNTYW1lRm9udENvbG9yKFJlbmRlck9iamVjdCogcmVuZGVyZXIp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCShyZXZpc2lv
biAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw3ICsyNTIsNyBA
QCBzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiBnZXRBdHRyaWJ1dGVTZXRGCiAgICAgICAgIHJlc3Vs
dCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9u
YW1lKEFUS19URVhUX0FUVFJfSU5ERU5UKSwgYnVmZmVyLmdldCgpKTsKICAgICB9CiAKLSAgICBT
dHJpbmcgZm9udEZhbWlseU5hbWUgPSBzdHlsZS0+Zm9udCgpLmZhbWlseSgpLmZhbWlseSgpLnN0
cmluZygpOworICAgIFN0cmluZyBmb250RmFtaWx5TmFtZSA9IHN0eWxlLT5mb250KCkuZmlyc3RG
YW1pbHkoKTsKICAgICBpZiAoZm9udEZhbWlseU5hbWUubGVmdCg4KSA9PSAiLXdlYmtpdC0iKQog
ICAgICAgICBmb250RmFtaWx5TmFtZSA9IGZvbnRGYW1pbHlOYW1lLnN1YnN0cmluZyg4KTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5jcHAJKHJldmlzaW9uIDE1MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ3LDExICsxNDQ3
LDEwIEBAIHN0YXRpYyB2b2lkIGxvZ1VuaW1wbGVtZW50ZWRQcm9wZXJ0eUlEKEMKIH0KIAogc3Rh
dGljIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5RnJvbVN0eWxlKFJlbmRlclN0
eWxlKiBzdHlsZSkKLXsKLSAgICBjb25zdCBGb250RmFtaWx5JiBmaXJzdEZhbWlseSA9IHN0eWxl
LT5mb250RGVzY3JpcHRpb24oKS5mYW1pbHkoKTsKKyAgICB7CiAgICAgUmVmUHRyPENTU1ZhbHVl
TGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLSAgICBm
b3IgKGNvbnN0IEZvbnRGYW1pbHkqIGZhbWlseSA9ICZmaXJzdEZhbWlseTsgZmFtaWx5OyBmYW1p
bHkgPSBmYW1pbHktPm5leHQoKSkKLSAgICAgICAgbGlzdC0+YXBwZW5kKHZhbHVlRm9yRmFtaWx5
KGZhbWlseS0+ZmFtaWx5KCkpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUt
PmZvbnQoKS5mYW1pbHlDb3VudCgpOyArK2kpCisgICAgICAgIGxpc3QtPmFwcGVuZCh2YWx1ZUZv
ckZhbWlseShzdHlsZS0+Zm9udCgpLmZhbWlseUF0KGkpKSk7CiAgICAgcmV0dXJuIGxpc3QucmVs
ZWFzZSgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVp
bGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHls
ZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRGVw
cmVjYXRlZFN0eWxlQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NjQsNyArNjY1LDcgQEAgcHVibGlj
OgogICAgICAgICBGb250RGVzY3JpcHRpb24gcGFyZW50Rm9udERlc2NyaXB0aW9uID0gc3R5bGVS
ZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIAogICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShwYXJlbnRGb250RGVzY3JpcHRp
b24uZ2VuZXJpY0ZhbWlseSgpKTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShw
YXJlbnRGb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKSk7CisgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRGYW1pbGllcyhwYXJlbnRGb250RGVzY3JpcHRpb24uZmFtaWxpZXMoKSk7CiAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9udERlc2NyaXB0
aW9uLmlzU3BlY2lmaWVkRm9udCgpKTsKICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIHJldHVybjsKQEAgLTY3OSw4ICs2
ODAsOCBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUo
KSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKQogICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzdHlsZVJlc29sdmVy
LT5mb250U2l6ZUZvcktleXdvcmQoc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVY
eFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCBmYWxzZSkpOwogICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShpbml0aWFsRGVzYy5nZW5lcmlj
RmFtaWx5KCkpOwotICAgICAgICBpZiAoIWluaXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkuZmFtaWx5
SXNFbXB0eSgpKQotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShpbml0aWFs
RGVzYy5maXJzdEZhbWlseSgpKTsKKyAgICAgICAgaWYgKCFpbml0aWFsRGVzYy5maXJzdEZhbWls
eSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbGllcyhp
bml0aWFsRGVzYy5mYW1pbGllcygpKTsKIAogICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250
RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjkyLDIz
ICs2OTMsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEZvbnRE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250
RGVzY3JpcHRpb24oKTsKLSAgICAgICAgRm9udEZhbWlseSYgZmlyc3RGYW1pbHkgPSBmb250RGVz
Y3JpcHRpb24uZmlyc3RGYW1pbHkoKTsKLSAgICAgICAgRm9udEZhbWlseSogY3VyckZhbWlseSA9
IDA7Ci0KICAgICAgICAgLy8gQmVmb3JlIG1hcHBpbmcgaW4gYSBuZXcgZm9udC1mYW1pbHkgcHJv
cGVydHksIHdlIHNob3VsZCByZXNldCB0aGUgZ2VuZXJpYyBmYW1pbHkuCiAgICAgICAgIGJvb2wg
b2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUgPSBmb250RGVzY3JpcHRpb24udXNlRml4ZWRE
ZWZhdWx0U2l6ZSgpOwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShG
b250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKIAorICAgICAgICBWZWN0b3I8QXRvbWljU3RyaW5n
LCAxPiBmYW1pbGllczsKICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFs
dWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewogICAgICAgICAgICAgQ1NTVmFsdWUqIGl0
ZW0gPSBpLnZhbHVlKCk7CiAgICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUo
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0p
OwogICAgICAgICAgICAgQXRvbWljU3RyaW5nIGZhY2U7Ci0gICAgICAgICAgICBTZXR0aW5ncyog
c2V0dGluZ3MgPSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5zZXR0aW5ncygpOwogICAgICAg
ICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNTdHJpbmcoKSkKICAgICAgICAgICAgICAgICBmYWNl
ID0gY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwotICAgICAgICAgICAgZWxzZSBpZiAo
c2V0dGluZ3MpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IHN0
eWxlUmVzb2x2ZXItPmRvY3VtZW50KCktPnNldHRpbmdzKCkpIHsKICAgICAgICAgICAgICAgICBz
d2l0Y2ggKGNvbnRlbnRWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVXZWJraXRCb2R5OgogICAgICAgICAgICAgICAgICAgICBmYWNlID0gc2V0dGluZ3Mt
PnN0YW5kYXJkRm9udEZhbWlseSgpOwpAQCAtNzQwLDMxICs3MzgsMjEgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFmYWNlLmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGlmICghY3VyckZhbWlseSkgewotICAgICAgICAg
ICAgICAgICAgICAvLyBGaWxsaW5nIGluIHRoZSBmaXJzdCBmYW1pbHkuCi0gICAgICAgICAgICAg
ICAgICAgIGZpcnN0RmFtaWx5LnNldEZhbWlseShmYWNlKTsKLSAgICAgICAgICAgICAgICAgICAg
Zmlyc3RGYW1pbHkuYXBwZW5kRmFtaWx5KDApOyAvLyBSZW1vdmUgYW55IGluaGVyaXRlZCBmYW1p
bHktZmFsbGJhY2sgbGlzdC4KLSAgICAgICAgICAgICAgICAgICAgY3VyckZhbWlseSA9ICZmaXJz
dEZhbWlseTsKLSAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzU3BlY2lm
aWVkRm9udChmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpID09IEZvbnREZXNjcmlwdGlv
bjo6Tm9GYW1pbHkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFJlZlB0cjxTaGFyZWRGb250RmFtaWx5PiBuZXdGYW1pbHkgPSBTaGFyZWRGb250RmFtaWx5
OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICAgICAgbmV3RmFtaWx5LT5zZXRGYW1pbHkoZmFj
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJGYW1pbHktPmFwcGVuZEZhbWlseShuZXdGYW1p
bHkpOwotICAgICAgICAgICAgICAgICAgICBjdXJyRmFtaWx5ID0gbmV3RmFtaWx5LmdldCgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmYWNlLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChmYW1p
bGllcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzU3Bl
Y2lmaWVkRm9udChmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpID09IEZvbnREZXNjcmlw
dGlvbjo6Tm9GYW1pbHkpOworICAgICAgICAgICAgZmFtaWxpZXMuYXBwZW5kKGZhY2UpOwogICAg
ICAgICB9CiAKLSAgICAgICAgLy8gV2UgY2FuJ3QgY2FsbCB1c2VGaXhlZERlZmF1bHRTaXplKCkg
dW50aWwgYWxsIG5ldyBmb250IGZhbWlsaWVzIGhhdmUgYmVlbiBhZGRlZAotICAgICAgICAvLyBJ
ZiBjdXJyRmFtaWx5IGlzIG5vbi16ZXJvIHRoZW4gd2Ugc2V0IGF0IGxlYXN0IG9uZSBmYW1pbHkg
b24gdGhpcyBkZXNjcmlwdGlvbi4KLSAgICAgICAgaWYgKGN1cnJGYW1pbHkpIHsKLSAgICAgICAg
ICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24u
dXNlRml4ZWREZWZhdWx0U2l6ZSgpICE9IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKQot
ICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlv
biwgc3R5bGVSZXNvbHZlci0+Zm9udFNpemVGb3JLZXl3b3JkKHN0eWxlUmVzb2x2ZXItPmRvY3Vt
ZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0g
MSwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7CisgICAgICAgIGlmIChmYW1pbGll
cy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5hZG9wdEZhbWlsaWVzKGZhbWlsaWVzKTsKIAotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuOworICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgJiYgZm9u
dERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSAhPSBvbGRGYW1pbHlVc2VkRml4ZWRE
ZWZhdWx0U2l6ZSkKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRTaXplKGZvbnRE
ZXNjcmlwdGlvbiwgc3R5bGVSZXNvbHZlci0+Zm9udFNpemVGb3JLZXl3b3JkKHN0eWxlUmVzb2x2
ZXItPmRvY3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3Jk
U2l6ZSgpIC0gMSwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7CisKKyAgICAgICAg
c3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAg
fQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4g
UHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAm
YXBwbHlWYWx1ZSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJl
dmlzaW9uIDE1MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTIwLDggKzkyMCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IFN0eWxlUmVzb2x2ZXI6OnMKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGFuZGFyZEZv
bnQgPSBzZXR0aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5KGZvbnREZXNjcmlwdGlvbi5zY3JpcHQo
KSk7CiAgICAgICAgIGlmICghc3RhbmRhcmRGb250LmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTdGFuZGFy
ZEZhbWlseSk7Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRG
YW1pbHkoc3RhbmRhcmRGb250KTsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZh
bWlseSgpLmFwcGVuZEZhbWlseSgwKTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRP
bmVGYW1pbHkoc3RhbmRhcmRGb250KTsKICAgICAgICAgfQogICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsK
ICAgICAgICAgaW50IHNpemUgPSBTdHlsZVJlc29sdmVyOjpmb250U2l6ZUZvcktleXdvcmQoZG9j
dW1lbnQsIENTU1ZhbHVlTWVkaXVtLCBmYWxzZSk7CkBAIC0zMjcxLDEwICszMjcwLDggQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKAogICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKICAgICBm
b250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSB8
fCAhc2V0dGluZ3MtPnNjcmVlbkZvbnRTdWJzdGl0dXRpb25FbmFibGVkKCkpOwogICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgc3RhbmRhcmRGb250RmFtaWx5ID0gZG9jdW1lbnRTZXR0aW5ncygpLT5z
dGFuZGFyZEZvbnRGYW1pbHkoKTsKLSAgICBpZiAoIXN0YW5kYXJkRm9udEZhbWlseS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KHN0
YW5kYXJkRm9udEZhbWlseSk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgp
LmFwcGVuZEZhbWlseSgwKTsKLSAgICB9CisgICAgaWYgKCFzdGFuZGFyZEZvbnRGYW1pbHkuaXNF
bXB0eSgpKQorICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KHN0YW5kYXJkRm9u
dEZhbWlseSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVk
aXVtIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7CiAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0
aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZhbHNl
KSk7CiAgICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0
aWFsTGluZUhlaWdodCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMTUwNDI5KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTk4MCwxMyArMTk4MCwxMSBAQCBTdHJpbmcgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpmb250KCkgCiAgICAgc2VyaWFsaXplZEZvbnQuYXBwZW5kTnVtYmVy
KGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpKTsKICAgICBzZXJpYWxpemVkRm9u
dC5hcHBlbmRMaXRlcmFsKCJweCIpOwogCi0gICAgY29uc3QgRm9udEZhbWlseSYgZmlyc3RGb250
RmFtaWx5ID0gZm9udERlc2NyaXB0aW9uLmZhbWlseSgpOwotICAgIGZvciAoY29uc3QgRm9udEZh
bWlseSogZm9udEZhbWlseSA9ICZmaXJzdEZvbnRGYW1pbHk7IGZvbnRGYW1pbHk7IGZvbnRGYW1p
bHkgPSBmb250RmFtaWx5LT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKGZvbnRGYW1pbHkgIT0gJmZp
cnN0Rm9udEZhbWlseSkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUoKS5tX2Zv
bnQuZmFtaWx5Q291bnQoKTsgKytpKSB7CisgICAgICAgIGlmIChpKQogICAgICAgICAgICAgc2Vy
aWFsaXplZEZvbnQuYXBwZW5kKCcsJyk7Ci0KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBh
cHBlbmQgZmFtaWx5IGRpcmVjdGx5IHRvIHNlcmlhbGl6ZWRGb250IHJhdGhlciB0aGFuIGJ1aWxk
aW5nIGEgdGVtcG9yYXJ5IHN0cmluZy4KLSAgICAgICAgU3RyaW5nIGZhbWlseSA9IGZvbnRGYW1p
bHktPmZhbWlseSgpOworICAgICAgICBTdHJpbmcgZmFtaWx5ID0gc3RhdGUoKS5tX2ZvbnQuZmFt
aWx5QXQoaSk7CiAgICAgICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0aCgiLXdlYmtpdC0iKSkKICAg
ICAgICAgICAgIGZhbWlseSA9IGZhbWlseS5zdWJzdHJpbmcoOCk7CiAgICAgICAgIGlmIChmYW1p
bHkuY29udGFpbnMoJyAnKSkKQEAgLTIwMjcsMTEgKzIwMjUsOCBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0Rm9udChjCiAgICAgaWYgKFJlbmRlclN0eWxlKiBjb21wdXRlZFN0
eWxlID0gY2FudmFzKCktPmNvbXB1dGVkU3R5bGUoKSkKICAgICAgICAgbmV3U3R5bGUtPnNldEZv
bnREZXNjcmlwdGlvbihjb21wdXRlZFN0eWxlLT5mb250RGVzY3JpcHRpb24oKSk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIEZvbnRGYW1pbHkgZm9udEZhbWlseTsKLSAgICAgICAgZm9udEZhbWlseS5z
ZXRGYW1pbHkoZGVmYXVsdEZvbnRGYW1pbHkpOwotCiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBk
ZWZhdWx0Rm9udERlc2NyaXB0aW9uOwotICAgICAgICBkZWZhdWx0Rm9udERlc2NyaXB0aW9uLnNl
dEZhbWlseShmb250RmFtaWx5KTsKKyAgICAgICAgZGVmYXVsdEZvbnREZXNjcmlwdGlvbi5zZXRP
bmVGYW1pbHkoZGVmYXVsdEZvbnRGYW1pbHkpOwogICAgICAgICBkZWZhdWx0Rm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUoZGVmYXVsdEZvbnRTaXplKTsKICAgICAgICAgZGVmYXVsdEZv
bnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZGVmYXVsdEZvbnRTaXplKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAkocmV2aXNpb24gMTUwNDI5KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzks
NyArMjc5LDcgQEAgU3RyaW5nIFByaW50Q29udGV4dDo6cGFnZVByb3BlcnR5KEZyYW1lKgogICAg
IGlmICghc3RyY21wKHByb3BlcnR5TmFtZSwgImZvbnQtc2l6ZSIpKQogICAgICAgICByZXR1cm4g
U3RyaW5nOjpudW1iZXIoc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkUGl4ZWxTaXpl
KCkpOwogICAgIGlmICghc3RyY21wKHByb3BlcnR5TmFtZSwgImZvbnQtZmFtaWx5IikpCi0gICAg
ICAgIHJldHVybiBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuZmFtaWx5KCkuZmFtaWx5KCkuc3Ry
aW5nKCk7CisgICAgICAgIHJldHVybiBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuZmlyc3RGYW1p
bHkoKTsKICAgICBpZiAoIXN0cmNtcChwcm9wZXJ0eU5hbWUsICJzaXplIikpCiAgICAgICAgIHJl
dHVybiBTdHJpbmc6Om51bWJlcihzdHlsZS0+cGFnZVNpemUoKS53aWR0aCgpLnZhbHVlKCkpICsg
JyAnICsgU3RyaW5nOjpudW1iZXIoc3R5bGUtPnBhZ2VTaXplKCkuaGVpZ2h0KCkudmFsdWUoKSk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZs
LmNwcAkocmV2aXNpb24gMTUwNDI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Jl
bmRlclRoZW1lRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxOCw3ICsxMDE4LDcgQEAgdm9p
ZCBSZW5kZXJUaGVtZUVmbDo6c3lzdGVtRm9udChpbnQsIEZvbgogICAgIERFRklORV9TVEFUSUNf
TE9DQUwoU3RyaW5nLCBmb250RmFjZSwgKEFTQ0lJTGl0ZXJhbCgiU2FucyIpKSk7CiAgICAgZmxv
YXQgZm9udFNpemUgPSBkZWZhdWx0Rm9udFNpemU7CiAKLSAgICBmb250RGVzY3JpcHRpb24uZmly
c3RGYW1pbHkoKS5zZXRGYW1pbHkoZm9udEZhY2UpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRP
bmVGYW1pbHkoZm9udEZhY2UpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXpl
KGZvbnRTaXplKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpO
b0ZhbWlseSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCShy
ZXZpc2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw4ICsxMzAsOSBAQCBwdWJsaWM6CiAKICAgICBUeXBl
c2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX3R5
cGVzZXR0aW5nRmVhdHVyZXM7IH0KIAotICAgIEZvbnRGYW1pbHkmIGZpcnN0RmFtaWx5KCkgeyBy
ZXR1cm4gbV9mb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKTsgfQotICAgIGNvbnN0IEZvbnRG
YW1pbHkmIGZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLmZhbWlseSgp
OyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmaXJzdEZhbWlseSgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7IH0KKyAgICB1bnNpZ25lZCBmYW1pbHlD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7IH0K
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseUF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udERlc2NyaXB0aW9uLmZhbWlseUF0KGkpOyB9CiAKICAgICBGb250SXRhbGljIGl0
YWxpYygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLml0YWxpYygpOyB9CiAgICAg
Rm9udFdlaWdodCB3ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi53ZWln
aHQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FjaGUuY3BwCShyZXZpc2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IE5pY2hvbGFzIFNoYW5rcyA8d2Vi
a2l0QG5pY2tzaGFua3MuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDc5LDQ0ICs0NzksMzgg
QEAgc2l6ZV90IEZvbnRDYWNoZTo6aW5hY3RpdmVGb250RGF0YUNvdW50KAogCiBQYXNzUmVmUHRy
PEZvbnREYXRhPiBGb250Q2FjaGU6OmdldEZvbnREYXRhKGNvbnN0IEZvbnQmIGZvbnQsIGludCYg
ZmFtaWx5SW5kZXgsIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQogeworICAgIEFTU0VSVChm
YW1pbHlJbmRleCAhPSBjQWxsRmFtaWxpZXNTY2FubmVkKTsKICAgICBSZWZQdHI8Rm9udERhdGE+
IHJlc3VsdDsKIAotICAgIGludCBzdGFydEluZGV4ID0gZmFtaWx5SW5kZXg7Ci0gICAgY29uc3Qg
Rm9udEZhbWlseSogc3RhcnRGYW1pbHkgPSAmZm9udC5mb250RGVzY3JpcHRpb24oKS5mYW1pbHko
KTsKLSAgICBmb3IgKGludCBpID0gMDsgc3RhcnRGYW1pbHkgJiYgaSA8IHN0YXJ0SW5kZXg7IGkr
KykKLSAgICAgICAgc3RhcnRGYW1pbHkgPSBzdGFydEZhbWlseS0+bmV4dCgpOwotICAgIGNvbnN0
IEZvbnRGYW1pbHkqIGN1cnJGYW1pbHkgPSBzdGFydEZhbWlseTsKLSAgICB3aGlsZSAoY3VyckZh
bWlseSAmJiAhcmVzdWx0KSB7Ci0gICAgICAgIGZhbWlseUluZGV4Kys7Ci0gICAgICAgIGlmIChj
dXJyRmFtaWx5LT5mYW1pbHkoKS5sZW5ndGgoKSkgewotICAgICAgICAgICAgaWYgKGZvbnRTZWxl
Y3RvcikKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBmb250U2VsZWN0b3ItPmdldEZvbnREYXRh
KGZvbnQuZm9udERlc2NyaXB0aW9uKCksIGN1cnJGYW1pbHktPmZhbWlseSgpKTsKLQotICAgICAg
ICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gZ2V0Q2FjaGVkRm9u
dERhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgY3VyckZhbWlseS0+ZmFtaWx5KCkpOwotICAg
ICAgICB9Ci0gICAgICAgIGN1cnJGYW1pbHkgPSBjdXJyRmFtaWx5LT5uZXh0KCk7CisgICAgYm9v
bCBpc0ZpcnN0ID0gIWZhbWlseUluZGV4OworICAgIGludCBmYW1pbHlDb3VudCA9IGZvbnQuZmFt
aWx5Q291bnQoKTsKKyAgICBmb3IgKDtmYW1pbHlJbmRleCA8IGZhbWlseUNvdW50ICYmICFyZXN1
bHQ7ICsrZmFtaWx5SW5kZXgpIHsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkg
PSBmb250LmZhbWlseUF0KGZhbWlseUluZGV4KTsKKyAgICAgICAgaWYgKGZhbWlseS5pc0VtcHR5
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGZvbnRTZWxlY3RvcikKKyAg
ICAgICAgICAgIHJlc3VsdCA9IGZvbnRTZWxlY3Rvci0+Z2V0Rm9udERhdGEoZm9udC5mb250RGVz
Y3JpcHRpb24oKSwgZmFtaWx5KTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICBy
ZXN1bHQgPSBnZXRDYWNoZWRGb250RGF0YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBmYW1pbHkp
OwogICAgIH0KLQotICAgIGlmICghY3VyckZhbWlseSkKKyAgICBpZiAoZmFtaWx5SW5kZXggPT0g
ZmFtaWx5Q291bnQpCiAgICAgICAgIGZhbWlseUluZGV4ID0gY0FsbEZhbWlsaWVzU2Nhbm5lZDsK
IAotICAgIGlmICghcmVzdWx0KQorICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIGRp
ZG4ndCBmaW5kIGEgZm9udC4gVHJ5IHRvIGZpbmQgYSBzaW1pbGFyIGZvbnQgdXNpbmcgb3VyIG93
biBzcGVjaWZpYyBrbm93bGVkZ2UgYWJvdXQgb3VyIHBsYXRmb3JtLgogICAgICAgICAvLyBGb3Ig
ZXhhbXBsZSBvbiBPUyBYLCB3ZSBrbm93IHRvIG1hcCBhbnkgZmFtaWxpZXMgY29udGFpbmluZyB0
aGUgd29yZHMgQXJhYmljLCBQYXNodG8sIG9yIFVyZHUgdG8gdGhlCiAgICAgICAgIC8vIEdlZXph
IFBybyBmb250LgogICAgICAgICByZXN1bHQgPSBnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShm
b250KTsKKyAgICB9CiAKLSAgICBpZiAoIXJlc3VsdCAmJiBzdGFydEluZGV4ID09IDApIHsKKyAg
ICBpZiAoIXJlc3VsdCAmJiBpc0ZpcnN0KSB7CiAgICAgICAgIC8vIElmIGl0J3MgdGhlIHByaW1h
cnkgZm9udCB0aGF0IHdlIGNvdWxkbid0IGZpbmQsIHdlIHRyeSB0aGUgZm9sbG93aW5nLiBJbiBh
bGwgb3RoZXIgY2FzZXMsIHdlIHdpbGwKICAgICAgICAgLy8ganVzdCB1c2UgcGVyLWNoYXJhY3Rl
ciBzeXN0ZW0gZmFsbGJhY2suCi0KICAgICAgICAgaWYgKGZvbnRTZWxlY3RvcikgewogICAgICAg
ICAgICAgLy8gVHJ5IHRoZSB1c2VyJ3MgcHJlZmVycmVkIHN0YW5kYXJkIGZvbnQuCiAgICAgICAg
ICAgICBpZiAoUmVmUHRyPEZvbnREYXRhPiBkYXRhID0gZm9udFNlbGVjdG9yLT5nZXRGb250RGF0
YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBzdGFuZGFyZEZhbWlseSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogICAgICAgICB9Ci0KICAgICAgICAgLy8gU3RpbGwg
bm8gcmVzdWx0LiAgSGFuZCBiYWNrIG91ciBsYXN0IHJlc29ydCBmYWxsYmFjayBmb250LgogICAg
ICAgICByZXN1bHQgPSBnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGZvbnQuZm9udERlc2NyaXB0
aW9uKCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnREZXNjcmlwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAkocmV2aXNpb24gMTUwNDI5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmljaG9sYXMg
U2hhbmtzIDxjb250YWN0QG5pY2tzaGFua3MuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMzLDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0
IFNhbWVTaXplQXNGb250RGVzY3JpcHRpb24gewotICAgIEZvbnRGYW1pbHkgZmFtaWx5TGlzdDsK
KyAgICBWZWN0b3I8QXRvbWljU3RyaW5nLCAxPiBmYW1pbGllczsKICAgICBSZWZQdHI8Rm9udEZl
YXR1cmVTZXR0aW5ncz4gbV9mZWF0dXJlU2V0dGluZ3M7CiAgICAgZmxvYXQgc2l6ZXNbMl07CiAg
ICAgLy8gRlhJTUU6IE1ha2UgdGhlbSBmaXQgaW50byBvbmUgd29yZC4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5oCShyZXZp
c2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVz
Y3JpcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAo
QykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAw
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAw
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgTmljaG9sYXMgU2hhbmtzIDx3ZWJraXRAbmlja3NoYW5rcy5jb20+CiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpA
QCAtNzcsNyArNzcsOCBAQCBwdWJsaWM6CiAgICAgZW51bSBMaWdhdHVyZXNTdGF0ZSB7IE5vcm1h
bExpZ2F0dXJlc1N0YXRlLCBEaXNhYmxlZExpZ2F0dXJlc1N0YXRlLCBFbmFibGVkTGlnYXR1cmVz
U3RhdGUgfTsKIAogICAgIEZvbnREZXNjcmlwdGlvbigpCi0gICAgICAgIDogbV9zcGVjaWZpZWRT
aXplKDApCisgICAgICAgIDogbV9mYW1pbGllcygxKQorICAgICAgICAsIG1fc3BlY2lmaWVkU2l6
ZSgwKQogICAgICAgICAsIG1fY29tcHV0ZWRTaXplKDApCiAgICAgICAgICwgbV9vcmllbnRhdGlv
bihIb3Jpem9udGFsKQogICAgICAgICAsIG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbihOb25DSktH
bHlwaE9yaWVudGF0aW9uVmVydGljYWxSaWdodCkKQEAgLTEwMyw5ICsxMDQsMTIgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0Owog
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250RGVzY3JpcHRpb24mIG90aGVyKSBjb25zdCB7
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQotICAgIAotICAgIGNvbnN0IEZvbnRGYW1pbHkm
IGZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWx5TGlzdDsgfQotICAgIEZvbnRGYW1pbHkm
IGZpcnN0RmFtaWx5KCkgeyByZXR1cm4gbV9mYW1pbHlMaXN0OyB9CisKKyAgICB1bnNpZ25lZCBm
YW1pbHlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWxpZXMuc2l6ZSgpOyB9CisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBmaXJzdEZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIGZhbWlseUF0KDAp
OyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlBdCh1bnNpZ25lZCBpKSBjb25zdCB7
IHJldHVybiBtX2ZhbWlsaWVzW2ldOyB9CisgICAgY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZywg
MT4mIGZhbWlsaWVzKCkgY29uc3QgeyByZXR1cm4gbV9mYW1pbGllczsgfQorCiAgICAgZmxvYXQg
c3BlY2lmaWVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWVkU2l6ZTsgfQogICAgIGZs
b2F0IGNvbXB1dGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcHV0ZWRTaXplOyB9CiAgICAg
Rm9udEl0YWxpYyBpdGFsaWMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250SXRhbGlj
PihtX2l0YWxpYyk7IH0KQEAgLTExOCw3ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAgR2VuZXJpY0Zh
bWlseVR5cGUgZ2VuZXJpY0ZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEdlbmVy
aWNGYW1pbHlUeXBlPihtX2dlbmVyaWNGYW1pbHkpOyB9CiAgICAgYm9vbCB1c2VQcmludGVyRm9u
dCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlUHJpbnRlckZvbnQ7IH0KICAgICAvLyBvbmx5IHVzZSBm
aXhlZCBkZWZhdWx0IHNpemUgd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBmb250IGZhbWlseSwgYW5k
IHRoYXQgZmFtaWx5IGlzICJtb25vc3BhY2UiCi0gICAgYm9vbCB1c2VGaXhlZERlZmF1bHRTaXpl
KCkgY29uc3QgeyByZXR1cm4gZ2VuZXJpY0ZhbWlseSgpID09IE1vbm9zcGFjZUZhbWlseSAmJiAh
ZmFtaWx5KCkubmV4dCgpICYmIGZhbWlseSgpLmZhbWlseSgpID09IG1vbm9zcGFjZUZhbWlseTsg
fQorICAgIGJvb2wgdXNlRml4ZWREZWZhdWx0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGdlbmVyaWNG
YW1pbHkoKSA9PSBNb25vc3BhY2VGYW1pbHkgJiYgZmFtaWx5Q291bnQoKSA9PSAxICYmIGZpcnN0
RmFtaWx5KCkgPT0gbW9ub3NwYWNlRmFtaWx5OyB9CiAgICAgRm9udFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRSZW5kZXJpbmdNb2Rl
PihtX3JlbmRlcmluZ01vZGUpOyB9CiAgICAgS2VybmluZyBrZXJuaW5nKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8S2VybmluZz4obV9rZXJuaW5nKTsgfQogICAgIExpZ2F0dXJlc1N0YXRl
IGNvbW1vbkxpZ2F0dXJlc1N0YXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TGlnYXR1
cmVzU3RhdGU+KG1fY29tbW9uTGlnYXR1cmVzU3RhdGUpOyB9CkBAIC0xMzcsNyArMTQxLDkgQEAg
cHVibGljOgogICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZlYXR1cmVTZXR0aW5ncygpIGNvbnN0
IHsgcmV0dXJuIG1fZmVhdHVyZVNldHRpbmdzLmdldCgpOyB9CiAgICAgRm9udERlc2NyaXB0aW9u
IG1ha2VOb3JtYWxGZWF0dXJlU2V0dGluZ3MoKSBjb25zdDsKIAotICAgIHZvaWQgc2V0RmFtaWx5
KGNvbnN0IEZvbnRGYW1pbHkmIGZhbWlseSkgeyBtX2ZhbWlseUxpc3QgPSBmYW1pbHk7IH0KKyAg
ICB2b2lkIHNldE9uZUZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkgeyBBU1NFUlQo
bV9mYW1pbGllcy5zaXplKCkgPT0gMSk7IG1fZmFtaWxpZXNbMF0gPSBmYW1pbHk7IH0KKyAgICB2
b2lkIHNldEZhbWlsaWVzKGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmcsIDE+JiBmYW1pbGllcykg
eyBtX2ZhbWlsaWVzID0gZmFtaWxpZXM7IH0KKyAgICB2b2lkIGFkb3B0RmFtaWxpZXMoVmVjdG9y
PEF0b21pY1N0cmluZywgMT4mIGZhbWlsaWVzKSB7IG1fZmFtaWxpZXMuc3dhcChmYW1pbGllcyk7
IH0KICAgICB2b2lkIHNldENvbXB1dGVkU2l6ZShmbG9hdCBzKSB7IG1fY29tcHV0ZWRTaXplID0g
Y2xhbXBUb0Zsb2F0KHMpOyB9CiAgICAgdm9pZCBzZXRTcGVjaWZpZWRTaXplKGZsb2F0IHMpIHsg
bV9zcGVjaWZpZWRTaXplID0gY2xhbXBUb0Zsb2F0KHMpOyB9CiAgICAgdm9pZCBzZXRJdGFsaWMo
Rm9udEl0YWxpYyBpKSB7IG1faXRhbGljID0gaTsgfQpAQCAtMTY0LDcgKzE3MCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldEZlYXR1cmVTZXR0aW5ncyhQYXNzUmVmUHRyPEZvbnRGZWF0dXJlU2V0
dGluZ3M+IHNldHRpbmdzKSB7IG1fZmVhdHVyZVNldHRpbmdzID0gc2V0dGluZ3M7IH0KIAogcHJp
dmF0ZToKLSAgICBGb250RmFtaWx5IG1fZmFtaWx5TGlzdDsgLy8gVGhlIGxpc3Qgb2YgZm9udCBm
YW1pbGllcyB0byBiZSB1c2VkLgorICAgIFZlY3RvcjxBdG9taWNTdHJpbmcsIDE+IG1fZmFtaWxp
ZXM7CiAgICAgUmVmUHRyPEZvbnRGZWF0dXJlU2V0dGluZ3M+IG1fZmVhdHVyZVNldHRpbmdzOwog
CiAgICAgZmxvYXQgbV9zcGVjaWZpZWRTaXplOyAgIC8vIFNwZWNpZmllZCBDU1MgdmFsdWUuIElu
ZGVwZW5kZW50IG9mIHJlbmRlcmluZyBpc3N1ZXMgc3VjaCBhcyBpbnRlZ2VyCkBAIC0yMDMsNyAr
MjA5LDcgQEAgcHJpdmF0ZToKIAogaW5saW5lIGJvb2wgRm9udERlc2NyaXB0aW9uOjpvcGVyYXRv
cj09KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
ZmFtaWx5TGlzdCA9PSBvdGhlci5tX2ZhbWlseUxpc3QKKyAgICByZXR1cm4gbV9mYW1pbGllcyA9
PSBvdGhlci5tX2ZhbWlsaWVzCiAgICAgICAgICYmIG1fc3BlY2lmaWVkU2l6ZSA9PSBvdGhlci5t
X3NwZWNpZmllZFNpemUKICAgICAgICAgJiYgbV9jb21wdXRlZFNpemUgPT0gb3RoZXIubV9jb21w
dXRlZFNpemUKICAgICAgICAgJiYgbV9pdGFsaWMgPT0gb3RoZXIubV9pdGFsaWMKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuY3BwCShyZXZp
c2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFt
aWx5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NiArMSBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250RmFtaWx5LmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRGYW1pbHkmIGEsIGNvbnN0IEZv
bnRGYW1pbHkmIGIpCi17Ci0gICAgaWYgKGEuZmFtaWx5KCkgIT0gYi5mYW1pbHkoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IEZvbnRGYW1pbHkqIGFwOwotICAgIGNvbnN0IEZv
bnRGYW1pbHkqIGJwOwotICAgIGZvciAoYXAgPSBhLm5leHQoKSwgYnAgPSBiLm5leHQoKTsgYXAg
IT0gYnA7IGFwID0gYXAtPm5leHQoKSwgYnAgPSBicC0+bmV4dCgpKSB7Ci0gICAgICAgIGlmICgh
YXAgfHwgIWJwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoYXAtPmZh
bWlseSgpICE9IGJwLT5mYW1pbHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KKy8vIFJlbW92ZSBtZS4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFtaWx5LmgJKHJldmlzaW9uIDE1MDQy
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw5NiArMSBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYg
Rm9udEZhbWlseV9oCi0jZGVmaW5lIEZvbnRGYW1pbHlfaAotCi0jaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRv
bWljU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU2hhcmVkRm9udEZh
bWlseTsKLQotY2xhc3MgRm9udEZhbWlseSB7Ci1wdWJsaWM6Ci0gICAgRm9udEZhbWlseSgpIHsg
fQotICAgIH5Gb250RmFtaWx5KCk7Ci0KLSAgICB2b2lkIHNldEZhbWlseShjb25zdCBBdG9taWNT
dHJpbmcmIGZhbWlseSkgeyBtX2ZhbWlseSA9IGZhbWlseTsgfQotICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5KCkgY29uc3QgeyByZXR1cm4gbV9mYW1pbHk7IH0KLSAgICBib29sIGZhbWls
eUlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlseS5pc0VtcHR5KCk7IH0KLQotICAgIGNv
bnN0IEZvbnRGYW1pbHkqIG5leHQoKSBjb25zdDsKLQotICAgIHZvaWQgYXBwZW5kRmFtaWx5KFBh
c3NSZWZQdHI8U2hhcmVkRm9udEZhbWlseT4pOwotICAgIFBhc3NSZWZQdHI8U2hhcmVkRm9udEZh
bWlseT4gcmVsZWFzZU5leHQoKTsKLQotcHJpdmF0ZToKLSAgICBBdG9taWNTdHJpbmcgbV9mYW1p
bHk7Ci0gICAgUmVmUHRyPFNoYXJlZEZvbnRGYW1pbHk+IG1fbmV4dDsKLX07Ci0KLWNsYXNzIFNo
YXJlZEZvbnRGYW1pbHkgOiBwdWJsaWMgRm9udEZhbWlseSwgcHVibGljIFJlZkNvdW50ZWQ8U2hh
cmVkRm9udEZhbWlseT4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEZv
bnRGYW1pbHk+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNo
YXJlZEZvbnRGYW1pbHkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBTaGFyZWRGb250RmFtaWx5
KCkgeyB9Ci19OwotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udEZhbWlseSYsIGNvbnN0IEZv
bnRGYW1pbHkmKTsKLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9udEZhbWlseSYgYSwg
Y29uc3QgRm9udEZhbWlseSYgYikgeyByZXR1cm4gIShhID09IGIpOyB9Ci0KLWlubGluZSBGb250
RmFtaWx5Ojp+Rm9udEZhbWlseSgpCi17Ci0gICAgLy8gVGhpcyBjb2RlIGNhbWUgZnJvbSByZW1v
dmVkIExpc3RSZWZQdHIgdG8gYXZvaWQgcG9zc2libGUgb3ZlcmZsb3dpbmcgdGhlIHN0YWNrLgot
ICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgbmVlZCBpdD8KLSAgICBSZWZQdHI8U2hhcmVkRm9u
dEZhbWlseT4gcmVhcGVyID0gbV9uZXh0LnJlbGVhc2UoKTsKLSAgICB3aGlsZSAocmVhcGVyICYm
IHJlYXBlci0+aGFzT25lUmVmKCkpCi0gICAgICAgIHJlYXBlciA9IHJlYXBlci0+cmVsZWFzZU5l
eHQoKTsgLy8gaW1wbGljaXRseSBwcm90ZWN0cyByZWFwZXItPm5leHQsIHRoZW4gZGVyZWZzIHJl
YXBlcgotfQotCi1pbmxpbmUgY29uc3QgRm9udEZhbWlseSogRm9udEZhbWlseTo6bmV4dCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fbmV4dC5nZXQoKTsKLX0KLQotaW5saW5lIHZvaWQgRm9udEZh
bWlseTo6YXBwZW5kRmFtaWx5KFBhc3NSZWZQdHI8U2hhcmVkRm9udEZhbWlseT4gZmFtaWx5KQot
ewotICAgIG1fbmV4dCA9IGZhbWlseTsKLX0KLQotaW5saW5lIFBhc3NSZWZQdHI8U2hhcmVkRm9u
dEZhbWlseT4gRm9udEZhbWlseTo6cmVsZWFzZU5leHQoKQotewotICAgIHJldHVybiBtX25leHQu
cmVsZWFzZSgpOwotfQotCi19Ci0KLSNlbmRpZgorLy8gUmVtb3ZlIG1lLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1t
CShyZXZpc2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvRm9udENhY2hlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksMTggKzE1OSwxNiBAQCBQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdlCiAgICAgLy8gdGhlIHByZXNl
bmNlIG9mIGtleXdvcmRzIGluIHRoZSB0aGUgcmVxdWVzdGVkIG5hbWVzLiAgRm9yIGV4YW1wbGUs
IHdlJ2xsCiAgICAgLy8gbWF0Y2ggYW55IG5hbWUgdGhhdCBjb250YWlucyAiQXJhYmljIiB0byBH
ZWV6YSBQcm8uCiAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YTsKLSAg
ICBjb25zdCBGb250RmFtaWx5KiBjdXJyRmFtaWx5ID0gJmZvbnQuZm9udERlc2NyaXB0aW9uKCku
ZmFtaWx5KCk7Ci0gICAgd2hpbGUgKGN1cnJGYW1pbHkgJiYgIXNpbXBsZUZvbnREYXRhKSB7Ci0g
ICAgICAgIGlmIChjdXJyRmFtaWx5LT5mYW1pbHkoKS5sZW5ndGgoKSkgewotICAgICAgICAgICAg
c3RhdGljIFN0cmluZyogbWF0Y2hXb3Jkc1szXSA9IHsgbmV3IFN0cmluZygiQXJhYmljIiksIG5l
dyBTdHJpbmcoIlBhc2h0byIpLCBuZXcgU3RyaW5nKCJVcmR1IikgfTsKLSAgICAgICAgICAgIERF
RklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBnZWV6YVN0ciwgKCJHZWV6YSBQcm8iLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgICAgICAgICBmb3IgKGlu
dCBqID0gMDsgaiA8IDMgJiYgIXNpbXBsZUZvbnREYXRhOyArK2opCi0gICAgICAgICAgICAgICAg
aWYgKGN1cnJGYW1pbHktPmZhbWlseSgpLmNvbnRhaW5zKCptYXRjaFdvcmRzW2pdLCBmYWxzZSkp
Ci0gICAgICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEo
Zm9udC5mb250RGVzY3JpcHRpb24oKSwgZ2VlemFTdHIpOwotICAgICAgICB9Ci0gICAgICAgIGN1
cnJGYW1pbHkgPSBjdXJyRmFtaWx5LT5uZXh0KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGZvbnQuZmFtaWx5Q291bnQoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5ID0gZm9udC5mYW1pbHlBdChpKTsKKyAgICAgICAgaWYgKGZhbWlseS5pc0VtcHR5
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgc3RhdGljIFN0cmluZyogbWF0Y2hX
b3Jkc1szXSA9IHsgbmV3IFN0cmluZygiQXJhYmljIiksIG5ldyBTdHJpbmcoIlBhc2h0byIpLCBu
ZXcgU3RyaW5nKCJVcmR1IikgfTsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNT
dHJpbmcsIGdlZXphU3RyLCAoIkdlZXphIFBybyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpKTsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzICYmICFzaW1wbGVGb250
RGF0YTsgKytqKQorICAgICAgICAgICAgaWYgKGZhbWlseS5jb250YWlucygqbWF0Y2hXb3Jkc1tq
XSwgZmFsc2UpKQorICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9u
dERhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgZ2VlemFTdHIpOwogICAgIH0KLQogICAgIHJl
dHVybiBzaW1wbGVGb250RGF0YS5yZWxlYXNlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAJKHJldmlzaW9u
IDE1MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNo
ZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBGb250Q2FjaGU6OmdlCiAKIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZv
bnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKIHsKLSAgICBjb25z
dCBBdG9taWNTdHJpbmcgZmFsbGJhY2tGYW1pbHkgPSBRRm9udChmb250RGVzY3JpcHRpb24uZmFt
aWx5KCkuZmFtaWx5KCkpLmxhc3RSZXNvcnRGYW1pbHkoKTsKKyAgICBjb25zdCBBdG9taWNTdHJp
bmcgZmFsbGJhY2tGYW1pbHkgPSBRRm9udChmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKSku
bGFzdFJlc29ydEZhbWlseSgpOwogICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShuZXcgRm9u
dFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNrRmFtaWx5KSwgc2hvdWxkUmV0
YWluKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1l
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVy
VGhlbWVHdGsuY3BwCShyZXZpc2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTEsNyArNDUxLDcg
QEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6c3lzdGVtRm9udChpbnQsIEZvbgogICAgIGlmICghcGFu
Z29EZXNjcmlwdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9udERlc2NyaXB0aW9uLmZp
cnN0RmFtaWx5KCkuc2V0RmFtaWx5KHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZ2V0X2ZhbWlseShw
YW5nb0Rlc2NyaXB0aW9uKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShwYW5n
b19mb250X2Rlc2NyaXB0aW9uX2dldF9mYW1pbHkocGFuZ29EZXNjcmlwdGlvbikpOwogCiAgICAg
aW50IHNpemUgPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2dldF9zaXplKHBhbmdvRGVzY3JpcHRp
b24pIC8gUEFOR09fU0NBTEU7CiAgICAgLy8gSWYgdGhlIHNpemUgb2YgdGhlIGZvbnQgaXMgaW4g
cG9pbnRzLCB3ZSBuZWVkIHRvIGNvbnZlcnQgaXQgdG8gcGl4ZWxzLgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQkocmV2aXNpb24gMTUwNDI5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MDUs
NyArNjA1LDcgQEAgRm9udERlc2NyaXB0aW9uIFRoZW1lTWFjOjpjb250cm9sRm9udChDbwogICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9u
OjpTZXJpZkZhbWlseSk7CiAKICAgICAgICAgICAgIE5TRm9udCogbnNGb250ID0gW05TRm9udCBz
eXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQgc3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZTpjb250
cm9sU2l6ZUZvckZvbnQoZm9udCldXTsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJz
dEZhbWlseSgpLnNldEZhbWlseShbbnNGb250IHdlYkNvcmVGYW1pbHlOYW1lXSk7CisgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KFtuc0ZvbnQgd2ViQ29yZUZhbWlseU5h
bWVdKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoW25zRm9u
dCBwb2ludFNpemVdICogem9vbUZhY3Rvcik7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0U3BlY2lmaWVkU2l6ZShbbnNGb250IHBvaW50U2l6ZV0gKiB6b29tRmFjdG9yKTsKICAgICAg
ICAgICAgIHJldHVybiBmb250RGVzY3JpcHRpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCShyZXZpc2lvbiAxNTA0MjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1MCw5ICsyNTAsNyBAQCB2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1
c3RCdXR0b25TdHlsCiAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShzdHlsZS0+
Zm9udFNpemUoKSk7CiAjZW5kaWYKIAotICAgIEZvbnRGYW1pbHkgZm9udEZhbWlseTsKLSAgICBm
b250RmFtaWx5LnNldEZhbWlseShtX2J1dHRvbkZvbnRGYW1pbHkpOwotICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRGYW1pbHkoZm9udEZhbWlseSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZh
bWlseShtX2J1dHRvbkZvbnRGYW1pbHkpOwogICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsKICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShzdHlsZVJlc29sdmVy
LT5mb250U2VsZWN0b3IoKSk7CiAgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6
OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC90cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3BwCShyZXZpc2lv
biAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9u
dFRyYW5zY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIEZvbnRUcmFu
c2NvZGVyOjpGb250VHJhbnNjb2RlcigpCiAKIEZvbnRUcmFuc2NvZGVyOjpDb252ZXJ0ZXJUeXBl
IEZvbnRUcmFuc2NvZGVyOjpjb252ZXJ0ZXJUeXBlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBjb25zdCBUZXh0RW5jb2RpbmcqIGVuY29kaW5nKSBjb25zdAogewotICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgZm9udEZhbWlseSA9IGZvbnREZXNjcmlwdGlvbi5mYW1pbHko
KS5mYW1pbHkoKS5zdHJpbmcoKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZvbnRGYW1pbHkg
PSBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKTsKICAgICBpZiAoIWZvbnRGYW1pbHkuaXNO
dWxsKCkpIHsKICAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIENvbnZlcnRlclR5cGU+Ojpj
b25zdF9pdGVyYXRvciBmb3VuZCA9IG1fY29udmVydGVyVHlwZXMuZmluZChmb250RmFtaWx5KTsK
ICAgICAgICAgaWYgKGZvdW5kICE9IG1fY29udmVydGVyVHlwZXMuZW5kKCkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAkocmV2aXNpb24gMTUw
NDI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExMCwxMCArMTEwLDcgQEAgc3RhdGljIEZvbnQgZHJhZ0xhYmVsRm9u
dChpbnQgc2l6ZSwgYm9vbAogCiAgICAgRm9udERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uOwogICAg
IGRlc2NyaXB0aW9uLnNldFdlaWdodChib2xkID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0
Tm9ybWFsKTsKLQotICAgIEZvbnRGYW1pbHkgZmFtaWx5OwotICAgIGZhbWlseS5zZXRGYW1pbHko
bWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQubGZGYWNlTmFtZSk7Ci0gICAgZGVzY3JpcHRpb24uc2V0
RmFtaWx5KGZhbWlseSk7CisgICAgZGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KG1ldHJpY3MubGZT
bUNhcHRpb25Gb250LmxmRmFjZU5hbWUpOwogICAgIGRlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNp
emUoKGZsb2F0KXNpemUpOwogICAgIGRlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZSgoZmxvYXQp
c2l6ZSk7CiAgICAgZGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDE1
MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6c3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWYKICAgICBpZiAoIW9sZFN0eWxlKSB7CiAgICAgICAgIHVwZGF0ZU5lZWRzVHJh
bnNjb2RpbmcoKTsKICAgICAgICAgbmVlZHNSZXNldFRleHQgPSBtX25lZWRzVHJhbnNjb2Rpbmc7
Ci0gICAgfSBlbHNlIGlmIChvbGRTdHlsZS0+Zm9udCgpLm5lZWRzVHJhbnNjb2RpbmcoKSAhPSBu
ZXdTdHlsZS0+Zm9udCgpLm5lZWRzVHJhbnNjb2RpbmcoKSB8fCAobmV3U3R5bGUtPmZvbnQoKS5u
ZWVkc1RyYW5zY29kaW5nKCkgJiYgb2xkU3R5bGUtPmZvbnQoKS5mYW1pbHkoKS5mYW1pbHkoKSAh
PSBuZXdTdHlsZS0+Zm9udCgpLmZhbWlseSgpLmZhbWlseSgpKSkgeworICAgIH0gZWxzZSBpZiAo
b2xkU3R5bGUtPmZvbnQoKS5uZWVkc1RyYW5zY29kaW5nKCkgIT0gbmV3U3R5bGUtPmZvbnQoKS5u
ZWVkc1RyYW5zY29kaW5nKCkgfHwgKG5ld1N0eWxlLT5mb250KCkubmVlZHNUcmFuc2NvZGluZygp
ICYmIG9sZFN0eWxlLT5mb250KCkuZmlyc3RGYW1pbHkoKSAhPSBuZXdTdHlsZS0+Zm9udCgpLmZp
cnN0RmFtaWx5KCkpKSB7CiAgICAgICAgIHVwZGF0ZU5lZWRzVHJhbnNjb2RpbmcoKTsKICAgICAg
ICAgbmVlZHNSZXNldFRleHQgPSB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gMTUwNDI5KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYyLDcgKzI2Miw3IEBAIGZsb2F0IFJlbmRlclRleHRDb250cm9sOjpzY2FsZUVt
VG9Vbml0cygKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2Fs
V2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNh
bFdpZHRoKSBjb25zdAogewogICAgIC8vIFVzZSBhdmVyYWdlIGNoYXJhY3RlciB3aWR0aC4gTWF0
Y2hlcyBJRS4KLSAgICBBdG9taWNTdHJpbmcgZmFtaWx5ID0gc3R5bGUoKS0+Zm9udCgpLmZhbWls
eSgpLmZhbWlseSgpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5ID0gc3R5bGUoKS0+
Zm9udCgpLmZpcnN0RmFtaWx5KCk7CiAgICAgbWF4TG9naWNhbFdpZHRoID0gcHJlZmVycmVkQ29u
dGVudExvZ2ljYWxXaWR0aChjb25zdF9jYXN0PFJlbmRlclRleHRDb250cm9sKj4odGhpcyktPmdl
dEF2Z0NoYXJXaWR0aChmYW1pbHkpKTsKICAgICBpZiAoUmVuZGVyQm94KiBpbm5lclRleHRSZW5k
ZXJCb3ggPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlckJveCgpKQogICAgICAgICBtYXhMb2dp
Y2FsV2lkdGggKz0gaW5uZXJUZXh0UmVuZGVyQm94LT5wYWRkaW5nU3RhcnQoKSArIGlubmVyVGV4
dFJlbmRlckJveC0+cGFkZGluZ0VuZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJldmlzaW9u
IDE1MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjMsNyArMzIzLDcgQEAgTGF5b3V0VW5p
dCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OgogICAgIExheW91dFVuaXQgcmVzdWx0ID0g
c3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oY2VpbGVkTGF5b3V0VW5pdChjaGFyV2lkdGggKiBmYWN0
b3IpKTsKIAogICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IDAuZjsKLSAgICBBdG9taWNTdHJpbmcg
ZmFtaWx5ID0gc3R5bGUoKS0+Zm9udCgpLmZhbWlseSgpLmZhbWlseSgpOworICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgZmFtaWx5ID0gc3R5bGUoKS0+Zm9udCgpLmZpcnN0RmFtaWx5KCk7CiAgICAg
Ly8gU2luY2UgTHVjaWRhIEdyYW5kZSBpcyB0aGUgZGVmYXVsdCBmb250LCB3ZSB3YW50IHRoaXMg
dG8gbWF0Y2ggdGhlIHdpZHRoCiAgICAgLy8gb2YgTVMgU2hlbGwgRGxnLCB0aGUgZGVmYXVsdCBm
b250IGZvciB0ZXh0YXJlYXMgaW4gRmlyZWZveCwgU2FmYXJpIFdpbiBhbmQKICAgICAvLyBJRSBm
b3Igc29tZSBlbmNvZGluZ3MgKGluIElFLCB0aGUgZGVmYXVsdCBmb250IGlzIGVuY29kaW5nIHNw
ZWNpZmljKS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
bW0JKHJldmlzaW9uIDE1MDQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjUxLDcgKzY1MSw3IEBAIHZvaWQgUmVuZGVy
VGhlbWVNYWM6OnN5c3RlbUZvbnQoaW50IGNzc1YKICAgICAgICAgTlNGb250TWFuYWdlciAqZm9u
dE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07CiAgICAgICAgIGNh
Y2hlZERlc2MtPnNldElzQWJzb2x1dGVTaXplKHRydWUpOwogICAgICAgICBjYWNoZWREZXNjLT5z
ZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOwotICAgICAgICBjYWNo
ZWREZXNjLT5maXJzdEZhbWlseSgpLnNldEZhbWlseShbZm9udCB3ZWJDb3JlRmFtaWx5TmFtZV0p
OworICAgICAgICBjYWNoZWREZXNjLT5zZXRPbmVGYW1pbHkoW2ZvbnQgd2ViQ29yZUZhbWlseU5h
bWVdKTsKICAgICAgICAgY2FjaGVkRGVzYy0+c2V0U3BlY2lmaWVkU2l6ZShbZm9udCBwb2ludFNp
emVdKTsKICAgICAgICAgY2FjaGVkRGVzYy0+c2V0V2VpZ2h0KHRvRm9udFdlaWdodChbZm9udE1h
bmFnZXIgd2VpZ2h0T2ZGb250OmZvbnRdKSk7CiAgICAgICAgIGNhY2hlZERlc2MtPnNldEl0YWxp
YyhbZm9udE1hbmFnZXIgdHJhaXRzT2ZGb250OmZvbnRdICYgTlNJdGFsaWNGb250TWFzayk7CkBA
IC0xMDU4LDcgKzEwNTgsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRy
b2xTCiAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9u
OjpTZXJpZkZhbWlseSk7CiAKICAgICBOU0ZvbnQqIGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRP
ZlNpemU6W05TRm9udCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOmNvbnRyb2xTaXplXV07
Ci0gICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KFtmb250IHdlYkNv
cmVGYW1pbHlOYW1lXSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShbZm9udCB3
ZWJDb3JlRmFtaWx5TmFtZV0pOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUo
W2ZvbnQgcG9pbnRTaXplXSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOwogICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKFtmb250IHBvaW50U2l6ZV0gKiBzdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
U2FmYXJpLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVTYWZhcmkuY3BwCShyZXZpc2lvbiAxNTA0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNyArMjM5
LDcgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c3lzdGVtRm9udChpbnQgcAogICAgIGlmIChm
b250U2l6ZSkgewogICAgICAgICBjYWNoZWREZXNjLT5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsK
ICAgICAgICAgY2FjaGVkRGVzYy0+c2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5v
RmFtaWx5KTsKLSAgICAgICAgY2FjaGVkRGVzYy0+Zmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoIkx1
Y2lkYSBHcmFuZGUiKTsKKyAgICAgICAgY2FjaGVkRGVzYy0+c2V0T25lRmFtaWx5KCJMdWNpZGEg
R3JhbmRlIik7CiAgICAgICAgIGNhY2hlZERlc2MtPnNldFNwZWNpZmllZFNpemUoZm9udFNpemUp
OwogICAgICAgICBjYWNoZWREZXNjLT5zZXRXZWlnaHQoRm9udFdlaWdodE5vcm1hbCk7CiAgICAg
ICAgIGNhY2hlZERlc2MtPnNldEl0YWxpYyhmYWxzZSk7CkBAIC0zOTAsNyArMzkwLDcgQEAgdm9p
ZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0Rm9udEZyb21Db250cgogICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHkpOwogCiAgICAg
ZmxvYXQgZm9udFNpemUgPSBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplKGNvbnRyb2xTaXpl
KTsKLSAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoIkx1Y2lkYSBH
cmFuZGUiKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KCJMdWNpZGEgR3JhbmRl
Iik7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShmb250U2l6ZSk7CiAgICAg
Zm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoZm9udFNpemUpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHJldmlzaW9uIDE1MDQy
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4NSw3ICsyODUsNyBAQCBzdGF0aWMgdm9pZCBmaWxsRm9udERlc2NyaXB0
aW9uKEZvbnREZXNjCiB7ICAgIAogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6
ZSh0cnVlKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3Jp
cHRpb246Ok5vRmFtaWx5KTsKLSAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRG
YW1pbHkoU3RyaW5nKGxvZ0ZvbnQubGZGYWNlTmFtZSkpOworICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRPbmVGYW1pbHkoU3RyaW5nKGxvZ0ZvbnQubGZGYWNlTmFtZSkpOwogICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRTcGVjaWZpZWRTaXplKGZvbnRTaXplKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0
V2VpZ2h0KGxvZ0ZvbnQubGZXZWlnaHQgPj0gNzAwID8gRm9udFdlaWdodEJvbGQgOiBGb250V2Vp
Z2h0Tm9ybWFsKTsgLy8gRklYTUU6IFVzZSByZWFsIHdlaWdodC4KICAgICBmb250RGVzY3JpcHRp
b24uc2V0SXRhbGljKGxvZ0ZvbnQubGZJdGFsaWMpOwo=
</data>
<flag name="review"
          id="224346"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="224347"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>