<?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>138906</bug_id>
          
          <creation_ts>2014-11-19 19:06:11 -0800</creation_ts>
          <short_desc>[iOS] Codepoints not associated with languages are drawn as boxes</short_desc>
          <delta_ts>2014-12-15 11:04:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>139134</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>enrica</cc>
    
    <cc>jonlee</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1050031</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-11-19 19:06:11 -0800</bug_when>
    <thetext>[iOS] Codepoints not associated with languages are drawn as boxes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050032</commentid>
    <comment_count>1</comment_count>
      <attachid>241919</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-11-19 19:07:15 -0800</bug_when>
    <thetext>Created attachment 241919
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050033</commentid>
    <comment_count>2</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-11-19 19:07:55 -0800</bug_when>
    <thetext>&lt;rdar://problem/18568920&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050371</commentid>
    <comment_count>3</comment_count>
      <attachid>242022</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-11-20 21:36:45 -0800</bug_when>
    <thetext>Created attachment 242022
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050372</commentid>
    <comment_count>4</comment_count>
      <attachid>242022</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-11-20 21:40:34 -0800</bug_when>
    <thetext>Comment on attachment 242022
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Use CTFontCreateForString instead of hardcoded tables.

What&apos;s the perf impact?

&gt; LayoutTests/ChangeLog:11
&gt; +        * platform/ios-simulator/fast/text/non-language-font-fallback-expected.html: Added.
&gt; +        * platform/ios-simulator/fast/text/non-language-font-fallback.html: Added.

Why does the test need to be iOS-specific?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051514</commentid>
    <comment_count>5</comment_count>
      <attachid>242022</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-12-01 11:37:10 -0800</bug_when>
    <thetext>Comment on attachment 242022
Patch

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

&gt;&gt; LayoutTests/ChangeLog:11
&gt;&gt; +        * platform/ios-simulator/fast/text/non-language-font-fallback.html: Added.
&gt; 
&gt; Why does the test need to be iOS-specific?

It hardcodes the platform fallback font.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052914</commentid>
    <comment_count>6</comment_count>
      <attachid>242022</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-12-05 16:46:08 -0800</bug_when>
    <thetext>Comment on attachment 242022
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        Use CTFontCreateForString instead of hardcoded tables.
&gt; 
&gt; What&apos;s the perf impact?

10 runs:
With patch:
                      Aggregate   n        mean std dev   Cov
                      Mean Time  10    1109.035  36.169  3.3%
          Square-Mean-Root Time  10     945.647  24.060  2.5%
            Geometric Mean Time  10     776.209  17.717  2.3%
                     Total Time  10   64324.012 2097.807  3.3%
Without patch:
                      Aggregate   n        mean std dev   Cov
                      Mean Time  10    1102.113  26.177  2.4%
          Square-Mean-Root Time  10     947.070  21.834  2.3%
            Geometric Mean Time  10     781.305  19.639  2.5%
                     Total Time  10   63922.530 1518.268  2.4%





Pathological case:
Without patch:
                      Aggregate   n        mean std dev   Cov
            Geometric Mean Time  20     497.801  21.473  4.3%
          Square-Mean-Root Time  20     497.801  21.473  4.3%
                      Mean Time  20     497.801  21.473  4.3%
                     Total Time  20     497.801  21.473  4.3%
With patch:
                      Aggregate   n        mean std dev   Cov
            Geometric Mean Time  20     833.098  27.362  3.3%
          Square-Mean-Root Time  20     833.098  27.362  3.3%
                      Mean Time  20     833.098  27.362  3.3%
                     Total Time  20     833.098  27.362  3.3%</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052970</commentid>
    <comment_count>7</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-12-05 20:33:10 -0800</bug_when>
    <thetext>See https://bugs.webkit.org/show_bug.cgi?id=139332 for a performance test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054009</commentid>
    <comment_count>8</comment_count>
      <attachid>242022</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-12-09 17:42:26 -0800</bug_when>
    <thetext>Comment on attachment 242022
Patch

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

&gt;&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt;&gt; +        Use CTFontCreateForString instead of hardcoded tables.
&gt;&gt; 
&gt;&gt; What&apos;s the perf impact?
&gt; 
&gt; 10 runs:
&gt; With patch:
&gt;                       Aggregate   n        mean std dev   Cov
&gt;                       Mean Time  10    1109.035  36.169  3.3%
&gt;           Square-Mean-Root Time  10     945.647  24.060  2.5%
&gt;             Geometric Mean Time  10     776.209  17.717  2.3%
&gt;                      Total Time  10   64324.012 2097.807  3.3%
&gt; Without patch:
&gt;                       Aggregate   n        mean std dev   Cov
&gt;                       Mean Time  10    1102.113  26.177  2.4%
&gt;           Square-Mean-Root Time  10     947.070  21.834  2.3%
&gt;             Geometric Mean Time  10     781.305  19.639  2.5%
&gt;                      Total Time  10   63922.530 1518.268  2.4%
&gt; 
&gt; 
&gt; 
&gt; 
&gt; 
&gt; Pathological case:
&gt; Without patch:
&gt;                       Aggregate   n        mean std dev   Cov
&gt;             Geometric Mean Time  20     497.801  21.473  4.3%
&gt;           Square-Mean-Root Time  20     497.801  21.473  4.3%
&gt;                       Mean Time  20     497.801  21.473  4.3%
&gt;                      Total Time  20     497.801  21.473  4.3%
&gt; With patch:
&gt;                       Aggregate   n        mean std dev   Cov
&gt;             Geometric Mean Time  20     833.098  27.362  3.3%
&gt;           Square-Mean-Root Time  20     833.098  27.362  3.3%
&gt;                       Mean Time  20     833.098  27.362  3.3%
&gt;                      Total Time  20     833.098  27.362  3.3%

If I make the patch only call CTFontCreateForString when the language is unknown, I get these results for PLT (on a different device, so the numbers are not comparable to the previous comment):
Without patch
                      Aggregate   n        mean std dev   Cov
                      Mean Time  10    2583.726  41.309  1.6%
          Square-Mean-Root Time  10    2204.121  33.596  1.5%
            Geometric Mean Time  10    1802.632  29.113  1.6%
                     Total Time  10  149856.118 2395.939  1.6%
With patch
                      Aggregate   n        mean std dev   Cov
                      Mean Time  10    2592.926  35.085  1.4%
          Square-Mean-Root Time  10    2219.600  24.063  1.1%
            Geometric Mean Time  10    1822.290  19.138  1.1%
                     Total Time  10  150389.680 2034.925  1.4%</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054333</commentid>
    <comment_count>9</comment_count>
      <attachid>242022</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-12-10 15:50:25 -0800</bug_when>
    <thetext>Comment on attachment 242022
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt;&gt;&gt; +        Use CTFontCreateForString instead of hardcoded tables.
&gt;&gt;&gt; 
&gt;&gt;&gt; What&apos;s the perf impact?
&gt;&gt; 
&gt;&gt; 10 runs:
&gt;&gt; With patch:
&gt;&gt;                       Aggregate   n        mean std dev   Cov
&gt;&gt;                       Mean Time  10    1109.035  36.169  3.3%
&gt;&gt;           Square-Mean-Root Time  10     945.647  24.060  2.5%
&gt;&gt;             Geometric Mean Time  10     776.209  17.717  2.3%
&gt;&gt;                      Total Time  10   64324.012 2097.807  3.3%
&gt;&gt; Without patch:
&gt;&gt;                       Aggregate   n        mean std dev   Cov
&gt;&gt;                       Mean Time  10    1102.113  26.177  2.4%
&gt;&gt;           Square-Mean-Root Time  10     947.070  21.834  2.3%
&gt;&gt;             Geometric Mean Time  10     781.305  19.639  2.5%
&gt;&gt;                      Total Time  10   63922.530 1518.268  2.4%
&gt;&gt; 
&gt;&gt; 
&gt;&gt; 
&gt;&gt; 
&gt;&gt; 
&gt;&gt; Pathological case:
&gt;&gt; Without patch:
&gt;&gt;                       Aggregate   n        mean std dev   Cov
&gt;&gt;             Geometric Mean Time  20     497.801  21.473  4.3%
&gt;&gt;           Square-Mean-Root Time  20     497.801  21.473  4.3%
&gt;&gt;                       Mean Time  20     497.801  21.473  4.3%
&gt;&gt;                      Total Time  20     497.801  21.473  4.3%
&gt;&gt; With patch:
&gt;&gt;                       Aggregate   n        mean std dev   Cov
&gt;&gt;             Geometric Mean Time  20     833.098  27.362  3.3%
&gt;&gt;           Square-Mean-Root Time  20     833.098  27.362  3.3%
&gt;&gt;                       Mean Time  20     833.098  27.362  3.3%
&gt;&gt;                      Total Time  20     833.098  27.362  3.3%
&gt; 
&gt; If I make the patch only call CTFontCreateForString when the language is unknown, I get these results for PLT (on a different device, so the numbers are not comparable to the previous comment):
&gt; Without patch
&gt;                       Aggregate   n        mean std dev   Cov
&gt;                       Mean Time  10    2583.726  41.309  1.6%
&gt;           Square-Mean-Root Time  10    2204.121  33.596  1.5%
&gt;             Geometric Mean Time  10    1802.632  29.113  1.6%
&gt;                      Total Time  10  149856.118 2395.939  1.6%
&gt; With patch
&gt;                       Aggregate   n        mean std dev   Cov
&gt;                       Mean Time  10    2592.926  35.085  1.4%
&gt;           Square-Mean-Root Time  10    2219.600  24.063  1.1%
&gt;             Geometric Mean Time  10    1822.290  19.138  1.1%
&gt;                      Total Time  10  150389.680 2034.925  1.4%

Using SPI CTFontCreateForCharacters() isn&apos;t any better:
                      Aggregate   n        mean std dev   Cov
                      Mean Time  10    2596.975  37.488  1.4%
          Square-Mean-Root Time  10    2220.777  34.736  1.6%
            Geometric Mean Time  10    1822.128  36.250  2.0%
                     Total Time  10  150624.567 2174.284  1.4%</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054694</commentid>
    <comment_count>10</comment_count>
      <attachid>243163</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-12-11 16:57:42 -0800</bug_when>
    <thetext>Created attachment 243163
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055627</commentid>
    <comment_count>11</comment_count>
      <attachid>243163</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-12-15 09:01:27 -0800</bug_when>
    <thetext>Comment on attachment 243163
Patch

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

&gt; Source/WebCore/platform/graphics/ios/FontCacheIOS.mm:433
&gt; +            RetainPtr&lt;CFStringRef&gt; foundFontName = adoptCF(CTFontCopyPostScriptName(fallbackFont.get()));
&gt; +            if (foundFontName)

Seems like this could go inside the if.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055670</commentid>
    <comment_count>12</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-12-15 11:04:33 -0800</bug_when>
    <thetext>Committed r177292: &lt;http://trac.webkit.org/changeset/177292&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241919</attachid>
            <date>2014-11-19 19:07:15 -0800</date>
            <delta_ts>2014-11-20 21:36:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138906-20141119190730.patch</filename>
            <type>text/plain</type>
            <size>22461</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2Mzc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjJiZGFlMzEzZTU0NDNk
NTFlYmZkNDBmN2JlZmE2N2ZjN2MwNTQxNi4uMzZmMzAyM2M2MDMyYzcwODg1NzgwMjJiZDQ2ZWZm
MGVhNDM3M2QwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE0LTExLTE5ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gQ29k
ZXBvaW50cyBub3QgYXNzb2NpYXRlZCB3aXRoIGxhbmd1YWdlcyBhcmUgZHJhd24gYXMgYm94ZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODkwNgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBDVEZv
bnRDcmVhdGVGb3JTdHJpbmcgaW5zdGVhZCBvZiBoYXJkY29kZWQgdGFibGVzLgorCisgICAgICAg
IFRlc3Q6IHBsYXRmb3JtL2lvcy1zaW11bGF0b3IvZmFzdC90ZXh0L25vbi1sYW5ndWFnZS1mb250
LWZhbGxiYWNrLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2Fj
aGVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9y
Q2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5Rm9udENoYXJhY3RlclNldCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphcHBsZUNvbG9yRW1vamlDaGFyYWN0ZXJTZXQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cGhvbmVGYWxsYmFja0NoYXJhY3RlclNldCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsYW5ndWFnZVNwZWNpZmljRmFsbGJhY2tGb250KTog
RGVsZXRlZC4KKwogMjAxNC0xMS0xOSAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+
CiAKICAgICAgICAgUmVtb3ZlICJkb2N1bWVudCBoYXMgbm8gOjpiZWZvcmUgYW5kL29yIDo6YWZ0
ZXIgcnVsZXMiIG9wdGltaXphdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCmluZGV4IDA1OWEwYzhkNjE1M2NhN2Y0ZjVh
NTQyZTcxYzU2YTg5NmJmNTdlZTkuLjgwYzkyZjI5ODViODlkODNlM2QwZTk3YTM5MDI3ZDU2N2Y1
MDUzMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9G
b250Q2FjaGVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9z
L0ZvbnRDYWNoZUlPUy5tbQpAQCAtNTMsMjYgKzUzLDYgQEAgc3RhdGljIGlubGluZSBib29sIHJl
cXVpcmVzQ3VzdG9tRmFsbGJhY2tGb250KGNvbnN0IFVJbnQzMiBjaGFyYWN0ZXIpCiAgICAgcmV0
dXJuIGNoYXJhY3RlciA9PSBBcHBsZUxvZ28gfHwgY2hhcmFjdGVyID09IGJsYWNrQ2lyY2xlOwog
fQogCi1zdGF0aWMgQ0ZDaGFyYWN0ZXJTZXRSZWYgY29weUZvbnRDaGFyYWN0ZXJTZXQoQ0ZTdHJp
bmdSZWYgZm9udE5hbWUpCi17Ci0gICAgLy8gVGhlIHNpemUsIDEwLCBpcyBhcmJpdHJhcnkuCi0g
ICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IGZvbnREZXNjcmlwdG9yID0gYWRvcHRD
RihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aE5hbWVBbmRTaXplKGZvbnROYW1lLCAxMCkpOwot
ICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhG
b250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvci5nZXQoKSwgMTAsIG51bGxwdHIpKTsKLSAgICBy
ZXR1cm4gKENGQ2hhcmFjdGVyU2V0UmVmKUNURm9udERlc2NyaXB0b3JDb3B5QXR0cmlidXRlKGZv
bnREZXNjcmlwdG9yLmdldCgpLCBrQ1RGb250Q2hhcmFjdGVyU2V0QXR0cmlidXRlKTsKLX0KLQot
c3RhdGljIENGQ2hhcmFjdGVyU2V0UmVmIGFwcGxlQ29sb3JFbW9qaUNoYXJhY3RlclNldCgpCi17
Ci0gICAgc3RhdGljIENGQ2hhcmFjdGVyU2V0UmVmIGNoYXJhY3RlclNldCA9IGNvcHlGb250Q2hh
cmFjdGVyU2V0KENGU1RSKCJBcHBsZUNvbG9yRW1vamkiKSk7Ci0gICAgcmV0dXJuIGNoYXJhY3Rl
clNldDsKLX0KLQotc3RhdGljIENGQ2hhcmFjdGVyU2V0UmVmIHBob25lRmFsbGJhY2tDaGFyYWN0
ZXJTZXQoKQotewotICAgIHN0YXRpYyBDRkNoYXJhY3RlclNldFJlZiBjaGFyYWN0ZXJTZXQgPSBj
b3B5Rm9udENoYXJhY3RlclNldChDRlNUUigiLlBob25lRmFsbGJhY2siKSk7Ci0gICAgcmV0dXJu
IGNoYXJhY3RlclNldDsKLX0KLQogUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hl
OjpnZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICBjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBvcmlnaW5hbEZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KTsKQEAgLTExMyw4NyArOTMsNiBAQCBlbnVtIGNsYXNzIExhbmd1YWdlU3BlY2lmaWNGb250IHsK
ICAgICBFbW9qaSwKIH07CiAKLXN0YXRpYyBMYW5ndWFnZVNwZWNpZmljRm9udCBsYW5ndWFnZVNw
ZWNpZmljRmFsbGJhY2tGb250KFVDaGFyMzIgYykKLXsKLSAgICBzdGF0aWMgYm9vbCBpc0dCMTgw
MzBDb21wbGlhbmNlUmVxdWlyZWQgPSB3a0lzR0IxODAzMENvbXBsaWFuY2VSZXF1aXJlZCgpOwot
Ci0gICAgLy8gVGhlIGZvbGxvd2luZyByYW5nZXMgYXJlIEtvcmVhbiBIYW5ndWwgYW5kIHNob3Vs
ZCBiZSByZW5kZXJlZCBieSBBcHBsZVNER290aGljTmVvCi0gICAgLy8gVSsxMTAwIC0gVSsxMUZG
Ci0gICAgLy8gVSszMTMwIC0gVSszMThGCi0gICAgLy8gVStBQzAwIC0gVStEN0EzCi0KLSAgICAv
LyBUaGVzZSBhcmUgQ3lyaWxsaWMgYW5kIHNob3VsZCBiZSByZW5kZXJlZCBieSBIZWx2ZXRpY2Eg
TmV1ZQotICAgIC8vIFUrMDQwMCAtIFUrMDUyRgotCi0gICAgaWYgKGMgPCAweDQwMCkKLSAgICAg
ICAgcmV0dXJuIExhbmd1YWdlU3BlY2lmaWNGb250OjpOb25lOwotICAgIGlmIChjIDwgMHg1MzAp
Ci0gICAgICAgIHJldHVybiBMYW5ndWFnZVNwZWNpZmljRm9udDo6Q3lyaWxsaWM7Ci0gICAgaWYg
KGMgPCAweDU5MCkKLSAgICAgICAgcmV0dXJuIExhbmd1YWdlU3BlY2lmaWNGb250OjpOb25lOwot
ICAgIGlmIChjIDwgMHg2MDApCi0gICAgICAgIHJldHVybiBMYW5ndWFnZVNwZWNpZmljRm9udDo6
SGVicmV3OwotICAgIGlmIChjIDwgMHg3MDApCi0gICAgICAgIHJldHVybiBMYW5ndWFnZVNwZWNp
ZmljRm9udDo6QXJhYmljOwotICAgIGlmIChjIDwgMHg5MDApCi0gICAgICAgIHJldHVybiBMYW5n
dWFnZVNwZWNpZmljRm9udDo6Tm9uZTsKLSAgICBpZiAoYyA8IDB4RTAwKQotICAgICAgICByZXR1
cm4gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkluZGljOwotICAgIGlmIChjIDwgMHhFODApCi0gICAg
ICAgIHJldHVybiBMYW5ndWFnZVNwZWNpZmljRm9udDo6VGhhaTsKLSAgICBpZiAoYyA8IDB4MEYw
MCkKLSAgICAgICAgcmV0dXJuIExhbmd1YWdlU3BlY2lmaWNGb250OjpMYW87Ci0gICAgaWYgKGMg
PCAweDEwMDApCi0gICAgICAgIHJldHVybiBMYW5ndWFnZVNwZWNpZmljRm9udDo6VGliZXRhbjsK
LSAgICBpZiAoYyA8IDB4MTEwMCkKLSAgICAgICAgcmV0dXJuIExhbmd1YWdlU3BlY2lmaWNGb250
OjpOb25lOwotICAgIGlmIChjIDwgMHgxMjAwKQotICAgICAgICByZXR1cm4gTGFuZ3VhZ2VTcGVj
aWZpY0ZvbnQ6OktvcmVhbjsKLSAgICBpZiAoYyA8IDB4MTQwMSkKLSAgICAgICAgcmV0dXJuIExh
bmd1YWdlU3BlY2lmaWNGb250OjpLaG1lcjsgLy8gRklYTUU6IFRoZXNlIGNvZGVwb2ludHMgZG9u
J3QgYmVsb25nIHRvIEtobWVyCi0gICAgaWYgKGMgPCAweDE3ODApCi0gICAgICAgIHJldHVybiBM
YW5ndWFnZVNwZWNpZmljRm9udDo6Q2FuYWRpYW5BYm9yaWdpbmFsU3lsbGFiaWM7Ci0gICAgaWYg
KGMgPCAweDE4MDApCi0gICAgICAgIHJldHVybiBMYW5ndWFnZVNwZWNpZmljRm9udDo6S2htZXI7
Ci0gICAgaWYgKGMgPCAweDJFODApCi0gICAgICAgIHJldHVybiBMYW5ndWFnZVNwZWNpZmljRm9u
dDo6Tm9uZTsKLSAgICBpZiAoYyA8IDB4MzEzMCkKLSAgICAgICAgcmV0dXJuIExhbmd1YWdlU3Bl
Y2lmaWNGb250OjpDaGluZXNlSmFwYW5lc2U7Ci0gICAgaWYgKGMgPCAweDMxOTApCi0gICAgICAg
IHJldHVybiBMYW5ndWFnZVNwZWNpZmljRm9udDo6S29yZWFuOwotICAgIGlmIChjIDwgMHhBQzAw
KQotICAgICAgICByZXR1cm4gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkNoaW5lc2VKYXBhbmVzZTsK
LSAgICBpZiAoYyA8IDB4RDdBNCkKLSAgICAgICAgcmV0dXJuIExhbmd1YWdlU3BlY2lmaWNGb250
OjpLb3JlYW47Ci0gICAgaWYgKGMgPCAweEUwMDApCi0gICAgICAgIHJldHVybiBMYW5ndWFnZVNw
ZWNpZmljRm9udDo6Q2hpbmVzZUphcGFuZXNlOwotICAgIGlmIChjIDwgMHhFNjAwKQotICAgICAg
ICByZXR1cm4gaXNHQjE4MDMwQ29tcGxpYW5jZVJlcXVpcmVkID8gTGFuZ3VhZ2VTcGVjaWZpY0Zv
bnQ6OkNoaW5lc2VKYXBhbmVzZSA6IExhbmd1YWdlU3BlY2lmaWNGb250OjpFbW9qaTsKLSAgICBp
ZiAoYyA8IDB4RTg2NSAmJiBpc0dCMTgwMzBDb21wbGlhbmNlUmVxdWlyZWQpCi0gICAgICAgIHJl
dHVybiBMYW5ndWFnZVNwZWNpZmljRm9udDo6Q2hpbmVzZUphcGFuZXNlOwotICAgIGlmIChjIDwg
MHhGOTAwKQotICAgICAgICByZXR1cm4gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6Ok5vbmU7Ci0gICAg
aWYgKGMgPCAweEZCMDApCi0gICAgICAgIHJldHVybiBMYW5ndWFnZVNwZWNpZmljRm9udDo6Q2hp
bmVzZUphcGFuZXNlOwotICAgIGlmIChjIDwgMHhGQjUwKQotICAgICAgICByZXR1cm4gTGFuZ3Vh
Z2VTcGVjaWZpY0ZvbnQ6Ok5vbmU7Ci0gICAgaWYgKGMgPCAweEZFMDApCi0gICAgICAgIHJldHVy
biBMYW5ndWFnZVNwZWNpZmljRm9udDo6QXJhYmljOwotICAgIGlmIChjIDwgMHhGRTIwKQotICAg
ICAgICByZXR1cm4gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6Ok5vbmU7Ci0gICAgaWYgKGMgPCAweEZF
NzApCi0gICAgICAgIHJldHVybiBMYW5ndWFnZVNwZWNpZmljRm9udDo6Q2hpbmVzZUphcGFuZXNl
OwotICAgIGlmIChjIDwgMHhGRjAwKQotICAgICAgICByZXR1cm4gTGFuZ3VhZ2VTcGVjaWZpY0Zv
bnQ6OkFyYWJpYzsKLSAgICBpZiAoYyA8IDB4RkZGMCkKLSAgICAgICAgcmV0dXJuIExhbmd1YWdl
U3BlY2lmaWNGb250OjpDaGluZXNlSmFwYW5lc2U7Ci0gICAgaWYgKGMgPCAweDIwMDAwKQotICAg
ICAgICByZXR1cm4gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6Ok5vbmU7Ci0gICAgaWYgKGMgPCAweDMw
MDAwKQotICAgICAgICByZXR1cm4gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkNoaW5lc2VKYXBhbmVz
ZTsKLSAgICByZXR1cm4gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6Ok5vbmU7Ci19Ci0KIFBhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJz
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxl
bmd0aCkKIHsKICAgICAvLyBVbmxpa2UgT1MgWCwgb3VyIGZhbGxiYWNrIGZvbnQgb24gaVBob25l
IGlzIEFyaWFsIFVuaWNvZGUsIHdoaWNoIGRvZXNuJ3QgaGF2ZSBzb21lIGFwcGxlLXNwZWNpZmlj
IGdseXBocyBsaWtlIEY4RkYuCkBAIC0yMTIsMjI0ICsxMTEsMTAgQEAgUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3Qg
Rm9udERlc2MKICAgICAgICAgICAgIHJldHVybiBnZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFy
YWN0ZXJzKGRlc2NyaXB0aW9uLCBvcmlnaW5hbEZvbnREYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgp
OwogICAgIH0KIAotICAgIExhbmd1YWdlU3BlY2lmaWNGb250IGxhbmd1YWdlU3BlY2lmaWNGb250
ID0gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6Ok5vbmU7Ci0gICAgaWYgKGxlbmd0aCA+IDApCi0gICAg
ICAgIGxhbmd1YWdlU3BlY2lmaWNGb250ID0gbGFuZ3VhZ2VTcGVjaWZpY0ZhbGxiYWNrRm9udChj
KTsKLQotICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udERhdGE7Ci0KLSAgICBz
d2l0Y2ggKGxhbmd1YWdlU3BlY2lmaWNGb250KSB7Ci0gICAgY2FzZSBMYW5ndWFnZVNwZWNpZmlj
Rm9udDo6Q2hpbmVzZUphcGFuZXNlOiB7Ci0gICAgICAgIC8vIEJ5IGRlZmF1bHQsIENoaW5lc2Ug
Zm9udCBpcyBwcmVmZXJyZWQsIGZhbGwgYmFjayBvbiBKYXBhbmVzZS4KLQotICAgICAgICBlbnVt
IENKS0ZvbnRWYXJpYW50IHsKLSAgICAgICAgICAgIGtDSktGb250VXNlSGlyYWdpbm8gPSAwLAot
ICAgICAgICAgICAga0NKS0ZvbnRVc2VTVEhlaXRpU0MsCi0gICAgICAgICAgICBrQ0pLRm9udFVz
ZVNUSGVpdGlUQywKLSAgICAgICAgICAgIGtDSktGb250VXNlU1RIZWl0aUosCi0gICAgICAgICAg
ICBrQ0pLRm9udFVzZVNUSGVpdGlLLAotICAgICAgICAgICAga0NKS0ZvbnRzVXNlSEtHUFczVUkK
LSAgICAgICAgfTsKLQotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBwbGFpbkhpcmFnaW5vKCJIaXJhS2FrdVByb04tVzMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gcGxhaW5TVEhlaXRpU0MoIlNUSGVpdGlTQy1MaWdodCIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBwbGFpblNUSGVpdGlUQygiU1RIZWl0aVRDLUxpZ2h0IiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IHBsYWluU1RIZWl0aUooIlNUSGVpdGlKLUxpZ2h0IiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IHBsYWluU1RIZWl0aUsoIlNUSGVpdGlLLUxpZ2h0IiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IHBsYWluSEtHUFczVUkoIkhLR1BXM1VJIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBBdG9taWNTdHJpbmcqIGNqa1BsYWluW10gPSB7
ICAgICAKLSAgICAgICAgICAgICZwbGFpbkhpcmFnaW5vLmdldCgpLAotICAgICAgICAgICAgJnBs
YWluU1RIZWl0aVNDLmdldCgpLAotICAgICAgICAgICAgJnBsYWluU1RIZWl0aVRDLmdldCgpLAot
ICAgICAgICAgICAgJnBsYWluU1RIZWl0aUouZ2V0KCksCi0gICAgICAgICAgICAmcGxhaW5TVEhl
aXRpSy5nZXQoKSwKLSAgICAgICAgICAgICZwbGFpbkhLR1BXM1VJLmdldCgpLAotICAgICAgICB9
OwotCi0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGJvbGRIaXJh
Z2lubygiSGlyYUtha3VQcm9OLVc2IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGJvbGRTVEhl
aXRpU0MoIlNUSGVpdGlTQy1NZWRpdW0iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gYm9sZFNU
SGVpdGlUQygiU1RIZWl0aVRDLU1lZGl1bSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBib2xk
U1RIZWl0aUooIlNUSGVpdGlKLU1lZGl1bSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBib2xk
U1RIZWl0aUsoIlNUSGVpdGlLLU1lZGl1bSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBib2xk
SEtHUFczVUkoIkhLR1BXM1VJIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
Ci0gICAgICAgIHN0YXRpYyBBdG9taWNTdHJpbmcqIGNqa0JvbGRbXSA9IHsgIAotICAgICAgICAg
ICAgJmJvbGRIaXJhZ2luby5nZXQoKSwKLSAgICAgICAgICAgICZib2xkU1RIZWl0aVNDLmdldCgp
LAotICAgICAgICAgICAgJmJvbGRTVEhlaXRpVEMuZ2V0KCksCi0gICAgICAgICAgICAmYm9sZFNU
SGVpdGlKLmdldCgpLAotICAgICAgICAgICAgJmJvbGRTVEhlaXRpSy5nZXQoKSwKLSAgICAgICAg
ICAgICZib2xkSEtHUFczVUkuZ2V0KCksCi0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gRGVmYXVs
dCBiZWxvdyBpcyBmb3IgU2ltcGxpZmllZCBDaGluZXNlIHVzZXI6IHpoLUhhbnMgLSBub3RlIHRo
YXQgSGlyYWdpbm8gaXMgdGhlCi0gICAgICAgIC8vIHRoZSBzZWNvbmRhcnkgZm9udCBhcyB3ZSB3
YW50IGl0cyBmb3IgSGlyYWdhbmEgYW5kIEthdGFrYW5hLiBUaGUgb3RoZXIgQ0pLIGZvbnRzCi0g
ICAgICAgIC8vIGRvIG5vdCwgYW5kIHNob3VsZCBub3QsIGNvbnRhaW4gSGlyYWdhbmEgb3IgS2F0
YWthbmEgZ2x5cGhzLgotICAgICAgICBzdGF0aWMgQ0pLRm9udFZhcmlhbnQgcHJlZmVycmVkQ0pL
Rm9udCA9IGtDSktGb250VXNlU1RIZWl0aVNDOwotICAgICAgICBzdGF0aWMgQ0pLRm9udFZhcmlh
bnQgc2Vjb25kYXJ5Q0pLRm9udCA9IGtDSktGb250c1VzZUhLR1BXM1VJOwotCi0gICAgICAgIHN0
YXRpYyBib29sIENKS0ZvbnRJbml0aWFsaXplZDsKLSAgICAgICAgaWYgKCFDSktGb250SW5pdGlh
bGl6ZWQpIHsKLSAgICAgICAgICAgIENKS0ZvbnRJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgICAg
ICAgICAvLyBUZXN0aW5nOiBsYW5ndWFnZU5hbWUgPSAoQ0ZTdHJpbmdSZWYpQCJqYSI7Ci0gICAg
ICAgICAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRh
cmRVc2VyRGVmYXVsdHNdOwotICAgICAgICAgICAgTlNBcnJheSAqbGFuZ3VhZ2VzID0gW2RlZmF1
bHRzIHN0cmluZ0FycmF5Rm9yS2V5OkAiQXBwbGVMYW5ndWFnZXMiXTsKLQotICAgICAgICAgICAg
aWYgKGxhbmd1YWdlcykgewotICAgICAgICAgICAgICAgIGZvciAoTlNTdHJpbmcgKmxhbmd1YWdl
IGluIGxhbmd1YWdlcykgewotICAgICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IGxhbmd1YWdlTmFtZSA9IGFkb3B0Q0YoQ0ZMb2NhbGVDcmVhdGVDYW5vbmljYWxMYW5ndWFn
ZUlkZW50aWZpZXJGcm9tU3RyaW5nKG51bGxwdHIsIChDRlN0cmluZ1JlZilsYW5ndWFnZSkpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoQ0ZFcXVhbChsYW5ndWFnZU5hbWUuZ2V0KCksIENGU1RS
KCJ6aC1IYW5zIikpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIFNpbXBsaWZp
ZWQgQ2hpbmVzZSAtIGRlZmF1bHQgc2V0dGluZ3MKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoQ0ZFcXVhbChsYW5ndWFnZU5hbWUuZ2V0KCksIENGU1RSKCJqYSIpKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcHJlZmVycmVkQ0pLRm9udCA9IGtDSktGb250VXNlSGlyYWdpbm87IC8v
IEphcGFuZXNlIC0gcHJlZmVyIEhpcmFnaW5vIGFuZCBTVEhlaXRpIEphcGFuc2UgVmFyaWFudAot
ICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5Q0pLRm9udCA9IGtDSktGb250VXNlU1RI
ZWl0aUo7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChDRkVxdWFsKGxhbmd1YWdlTmFtZS5nZXQoKSwgQ0ZTVFIoImtvIikpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmVmZXJyZWRDSktGb250ID0ga0NKS0ZvbnRVc2VT
VEhlaXRpSzsgLy8gS29yZWFuIC0gcHJlZmVyIFNUSGVpdGkgS29yZWFuIFZhcmlhbnQgCi0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChDRkVxdWFsKGxhbmd1YWdlTmFtZS5nZXQoKSwgQ0ZTVFIoInpoLUhhbnQiKSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZENKS0ZvbnQgPSBrQ0pLRm9udFVzZVNUSGVpdGlU
QzsgLy8gVHJhZGl0aW9uYWwgQ2hpbmVzZSAtIHByZWZlciBTVEhlaXRpIFRyYWRpdGlvbmFsIFZh
cmlhbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250
V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyAqY2prQm9sZFtwcmVmZXJyZWRDSktG
b250XSA6ICpjamtQbGFpbltwcmVmZXJyZWRDSktGb250XSwgZmFsc2UsIERvTm90UmV0YWluKTsK
LSAgICAgICAgYm9vbCB1c2VTZWNvbmRhcnlGb250ID0gdHJ1ZTsKLSAgICAgICAgaWYgKHNpbXBs
ZUZvbnREYXRhKSB7Ci0gICAgICAgICAgICBDR0dseXBoIGdseXBoc1syXTsKLSAgICAgICAgICAg
IC8vIENHRm9udEdldEdseXBoc0ZvclVuaWNoYXJzIHRha2VzIFVURi0xNiBidWZmZXIuIFNob3Vs
ZCBvbmx5IGJlIDEgY29kZXBvaW50IGJ1dCBzaW5jZSB3ZSBtYXkgcGFzcyBpbiB0d28gVVRGLTE2
IGNoYXJhY3RlcnMsCi0gICAgICAgICAgICAvLyBtYWtlIHJvb20gZm9yIDIgZ2x5cGhzIGp1c3Qg
dG8gYmUgc2FmZS4KLSAgICAgICAgICAgIENHRm9udEdldEdseXBoc0ZvclVuaWNoYXJzKHNpbXBs
ZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgY2hhcmFjdGVycywgZ2x5cGhzLCBs
ZW5ndGgpOwotCi0gICAgICAgICAgICB1c2VTZWNvbmRhcnlGb250ID0gKGdseXBoc1swXSA9PSAw
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1c2VTZWNvbmRhcnlGb250KQotICAgICAgICAg
ICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250
V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyAqY2prQm9sZFtzZWNvbmRhcnlDSktG
b250XSA6ICpjamtQbGFpbltzZWNvbmRhcnlDSktGb250XSwgZmFsc2UsIERvTm90UmV0YWluKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6Oktv
cmVhbjogewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBrb3Jl
YW5QbGFpbigiQXBwbGVTREdvdGhpY05lby1NZWRpdW0iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4ga29yZWFuQm9sZCgiQXBwbGVTREdvdGhpY05lby1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9u
dERhdGEoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkp
ID8ga29yZWFuQm9sZCA6IGtvcmVhblBsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6Q3lyaWxsaWM6
IHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gY3lyaWxsaWNQ
bGFpbigiSGVsdmV0aWNhTmV1ZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjeXJpbGxpY0Jv
bGQoIkhlbHZldGljYU5ldWUtQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0
aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGN5cmlsbGljQm9s
ZCA6IGN5cmlsbGljUGxhaW4sIGZhbHNlLCBEb05vdFJldGFpbik7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpBcmFiaWM6IHsKLSAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gYXJhYmljUGxhaW4oIkdlZXphUHJv
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGFyYWJpY0JvbGQoIkdlZXphUHJvLUJvbGQiLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERh
dGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNj
cmlwdGlvbi53ZWlnaHQoKSkgPyBhcmFiaWNCb2xkIDogYXJhYmljUGxhaW4sIGZhbHNlLCBEb05v
dFJldGFpbik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIExhbmd1YWdlU3BlY2lm
aWNGb250OjpIZWJyZXc6IHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gaGVicmV3UGxhaW4oIkFyaWFsSGVicmV3IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+
IGhlYnJld0JvbGQoIkFyaWFsSGVicmV3LUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShk
ZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBoZWJy
ZXdCb2xkIDogaGVicmV3UGxhaW4sIGZhbHNlLCBEb05vdFJldGFpbik7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpJbmRpYzogewotICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBkZXZhbmFnYXJpRm9udCgiS29o
aW5vb3JEZXZhbmFnYXJpLUJvb2siLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gYmVuZ2FsaUZv
bnQoIkJhbmdsYVNhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGd1cm11a2hpRm9u
dCgiR3VybXVraGlNTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOyAvLyBN
aWdodCBiZSByZXBsYWNlZCBpbiBhIGZ1dHVyZSByZWxlYXNlIHdpdGggYSBTYW5nYW0gdmVyc2lv
bi4KLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ3VqYXJhdGlG
b250KCJHdWphcmF0aVNhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG9yaXlhRm9u
dCgiT3JpeWFTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwot
ICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0YW1pbEZvbnQoIlRh
bWlsU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGVsdWd1Rm9udCgiVGVsdWd1
U2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4ga2FubmFkYUZvbnQoIkthbm5hZGFT
YW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBtYWxheWFsYW1Gb250KCJNYWxheWFs
YW1TYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBzaW5oYWxhRm9udCgiU2luaGFs
YVNhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0KLSAgICAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZGV2YW5hZ2FyaUZvbnRCb2xk
KCJLb2hpbm9vckRldmFuYWdhcmktTWVkaXVtIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGJl
bmdhbGlGb250Qm9sZCgiQmFuZ2xhU2FuZ2FtTU4tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBndXJtdWtoaUZvbnRCb2xkKCJHdXJtdWtoaU1OLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsgLy8gTWlnaHQgYmUgcmVwbGFjZWQgaW4gYSBmdXR1cmUgcmVs
ZWFzZSB3aXRoIGEgU2FuZ2FtIHZlcnNpb24uCi0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IGd1amFyYXRpRm9udEJvbGQoIkd1amFyYXRpU2FuZ2FtTU4tQm9sZCIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBvcml5YUZvbnRCb2xkKCJPcml5YVNhbmdhbU1OLUJv
bGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGFtaWxGb250Qm9sZCgiVGFtaWxTYW5nYW1N
Ti1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRlbHVndUZvbnRCb2xkKCJUZWx1Z3VT
YW5nYW1NTi1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGthbm5hZGFGb250Qm9sZCgi
S2FubmFkYVNhbmdhbU1OLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbWFsYXlhbGFt
Rm9udEJvbGQoIk1hbGF5YWxhbVNhbmdhbU1OLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gc2luaGFsYUZvbnRCb2xkKCJTaW5oYWxhU2FuZ2FtTU4tQm9sZCIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotCi0gICAgICAgIHN0YXRpYyBBdG9taWNTdHJpbmcqIGlu
ZGljVW5pY29kZVBhZ2VGb250c1tdID0gewotICAgICAgICAgICAgJmRldmFuYWdhcmlGb250Lmdl
dCgpLAotICAgICAgICAgICAgJmJlbmdhbGlGb250LmdldCgpLAotICAgICAgICAgICAgJmd1cm11
a2hpRm9udC5nZXQoKSwKLSAgICAgICAgICAgICZndWphcmF0aUZvbnQuZ2V0KCksCi0gICAgICAg
ICAgICAmb3JpeWFGb250LmdldCgpLAotICAgICAgICAgICAgJnRhbWlsRm9udC5nZXQoKSwKLSAg
ICAgICAgICAgICZ0ZWx1Z3VGb250LmdldCgpLAotICAgICAgICAgICAgJmthbm5hZGFGb250Lmdl
dCgpLAotICAgICAgICAgICAgJm1hbGF5YWxhbUZvbnQuZ2V0KCksCi0gICAgICAgICAgICAmc2lu
aGFsYUZvbnQuZ2V0KCkKLSAgICAgICAgfTsKLQotICAgICAgICBzdGF0aWMgQXRvbWljU3RyaW5n
KiBpbmRpY1VuaWNvZGVQYWdlRm9udHNCb2xkW10gPSB7Ci0gICAgICAgICAgICAmZGV2YW5hZ2Fy
aUZvbnRCb2xkLmdldCgpLAotICAgICAgICAgICAgJmJlbmdhbGlGb250Qm9sZC5nZXQoKSwKLSAg
ICAgICAgICAgICZndXJtdWtoaUZvbnRCb2xkLmdldCgpLAotICAgICAgICAgICAgJmd1amFyYXRp
Rm9udEJvbGQuZ2V0KCksCi0gICAgICAgICAgICAmb3JpeWFGb250Qm9sZC5nZXQoKSwKLSAgICAg
ICAgICAgICZ0YW1pbEZvbnRCb2xkLmdldCgpLAotICAgICAgICAgICAgJnRlbHVndUZvbnRCb2xk
LmdldCgpLAotICAgICAgICAgICAgJmthbm5hZGFGb250Qm9sZC5nZXQoKSwKLSAgICAgICAgICAg
ICZtYWxheWFsYW1Gb250Qm9sZC5nZXQoKSwKLSAgICAgICAgICAgICZzaW5oYWxhRm9udEJvbGQu
Z2V0KCkKLSAgICAgICAgfTsKLQotICAgICAgICB1aW50MzJfdCBpbmRpY1BhZ2VPcmRlckluZGV4
ID0gKGMgLSAweDA5MDApIC8gMHgwMDgwOyAvLyBJbmRpYyBzY3JpcHRzIHN0YXJ0IGF0IDB4MDkw
MCBpbiBVbmljb2RlLiBFYWNoIHNjcmlwdCBpcyBhbGxvY2FsdGVkIGEgYmxvY2sgb2YgMHg4MCBj
aGFyYWN0ZXJzLgotICAgICAgICBpZiAoaW5kaWNQYWdlT3JkZXJJbmRleCA8IChzaXplb2YoaW5k
aWNVbmljb2RlUGFnZUZvbnRzKSAvIHNpemVvZihBdG9taWNTdHJpbmcqKSkpIHsKLSAgICAgICAg
ICAgIEF0b21pY1N0cmluZyogaW5kaWNGb250U3RyaW5nID0gaXNGb250V2VpZ2h0Qm9sZChkZXNj
cmlwdGlvbi53ZWlnaHQoKSkgPyBpbmRpY1VuaWNvZGVQYWdlRm9udHNCb2xkW2luZGljUGFnZU9y
ZGVySW5kZXhdIDogaW5kaWNVbmljb2RlUGFnZUZvbnRzW2luZGljUGFnZU9yZGVySW5kZXhdOwot
ICAgICAgICAgICAgaWYgKGluZGljRm9udFN0cmluZykKLSAgICAgICAgICAgICAgICBzaW1wbGVG
b250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCAqaW5kaWNGb250U3RyaW5n
LCBmYWxzZSwgRG9Ob3RSZXRhaW4pOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpUaGFpOiB7Ci0gICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRoYWlQbGFpbigiVGhvbmJ1cmkiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gdGhhaUJvbGQoIlRob25idXJpLUJvbGQiLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNo
ZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWln
aHQoKSkgPyB0aGFpQm9sZCA6IHRoYWlQbGFpbiwgZmFsc2UsIERvTm90UmV0YWluKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OlRpYmV0YW46
IHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGliZXRhblBs
YWluKCJLYWlsYXNhIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRpYmV0YW5Cb2xkKCJLYWls
YXNhLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAg
c2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2Vp
Z2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyB0aWJldGFuQm9sZCA6IHRpYmV0YW5QbGFp
biwgZmFsc2UsIERvTm90UmV0YWluKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
TGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkNhbmFkaWFuQWJvcmlnaW5hbFN5bGxhYmljOiB7Ci0gICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNhc1BsYWluKCJFdXBoZW1p
YVVDQVMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gY2FzQm9sZCgiRXVwaGVtaWFVQ0FTLUJv
bGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxl
Rm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9s
ZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBjYXNCb2xkIDogY2FzUGxhaW4sIGZhbHNlLCBEb05v
dFJldGFpbik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIExhbmd1YWdlU3BlY2lm
aWNGb250OjpLaG1lcjogewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBraG1lcigiS2htZXJTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2Ny
aXB0aW9uLCBraG1lciwgZmFsc2UsIERvTm90UmV0YWluKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkxhbzogewotICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBsYW8oIkxhb1NhbmdhbU1OIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0
Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGxhbywgZmFsc2UsIERvTm90UmV0YWluKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gYXBwbGVDb2xvckVtb2ppKCJBcHBsZUNvbG9yRW1vamki
LCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgYm9vbCB1c2VF
bW9qaUZvbnQgPSBsYW5ndWFnZVNwZWNpZmljRm9udCA9PSBMYW5ndWFnZVNwZWNpZmljRm9udDo6
RW1vamk7Ci0gICAgICAgIGlmICghdXNlRW1vamlGb250KSB7Ci0gICAgICAgICAgICBpZiAoIUNG
Q2hhcmFjdGVyU2V0SXNMb25nQ2hhcmFjdGVyTWVtYmVyKHBob25lRmFsbGJhY2tDaGFyYWN0ZXJT
ZXQoKSwgYykpCi0gICAgICAgICAgICAgICAgdXNlRW1vamlGb250ID0gQ0ZDaGFyYWN0ZXJTZXRJ
c0xvbmdDaGFyYWN0ZXJNZW1iZXIoYXBwbGVDb2xvckVtb2ppQ2hhcmFjdGVyU2V0KCksIGMpOwot
ICAgICAgICB9Ci0gICAgICAgIGlmICh1c2VFbW9qaUZvbnQpCi0gICAgICAgICAgICBzaW1wbGVG
b250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBhcHBsZUNvbG9yRW1vamks
IGZhbHNlLCBEb05vdFJldGFpbik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9CisgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZlN0cmluZyA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVyc05vQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjaGFyYWN0ZXJzLCBsZW5n
dGgsIGtDRkFsbG9jYXRvck51bGwpKTsKKyAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBmYWxsYmFj
a0ZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZUZvclN0cmluZyhvcmlnaW5hbEZvbnREYXRhLT5n
ZXRDVEZvbnQoKSwgY2ZTdHJpbmcuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIGxlbmd0aCkpKTsKKyAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZvdW5kRm9udE5hbWUgPSBhZG9wdENGKENURm9udENv
cHlQb3N0U2NyaXB0TmFtZShmYWxsYmFja0ZvbnQuZ2V0KCkpKTsKKyAgICBSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24s
IGZvdW5kRm9udE5hbWUuZ2V0KCksIGZhbHNlLCBEb05vdFJldGFpbik7CiAKICAgICBpZiAoc2lt
cGxlRm9udERhdGEpCiAgICAgICAgIHJldHVybiBzaW1wbGVGb250RGF0YS5yZWxlYXNlKCk7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggMDBiMGIzYTJlNTgzM2ZkZjA0MDAyY2I1ZTcyZmI5NmJiMzlmMDljMy4uMGZmM2E4YTQ2
NzA3NmUwZGE2MjhjYjA5ZDMwMDViOWY2MTAxZjkyZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE3IEBACiAy
MDE0LTExLTE5ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKKyAg
ICAgICAgW2lPU10gQ29kZXBvaW50cyBub3QgYXNzb2NpYXRlZCB3aXRoIGxhbmd1YWdlcyBhcmUg
ZHJhd24gYXMgYm94ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzODkwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIERyYXcgb25lIG9mIHRoZXNlIGNoYXJhY3RlcnMgd2l0aCBhbmQgd2l0aG91dCBhIHNw
ZWNpZmljIGZvbnQgc3BlY2lmaWVkLgorCisgICAgICAgICogcGxhdGZvcm0vaW9zLXNpbXVsYXRv
ci9mYXN0L3RleHQvbm9uLWxhbmd1YWdlLWZvbnQtZmFsbGJhY2stZXhwZWN0ZWQuaHRtbDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zLXNpbXVsYXRvci9mYXN0L3RleHQvbm9uLWxhbmd1
YWdlLWZvbnQtZmFsbGJhY2suaHRtbDogQWRkZWQuCisKKzIwMTQtMTEtMTkgIE15bGVzIEMuIE1h
eGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKwogICAgICAgICBbT1MgWF0gVXByaWdodCB2
ZXJ0aWNhbCB0ZXh0IGlzIGNvbXBsZXRlbHkgYnJva2VuIGZvciBtdWx0aS1jb2RlLXVuaXQgY29k
ZXBvaW50cwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM4ODkxCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy1zaW11bGF0b3Iv
ZmFzdC90ZXh0L25vbi1sYW5ndWFnZS1mb250LWZhbGxiYWNrLWV4cGVjdGVkLmh0bWwgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9pb3Mtc2ltdWxhdG9yL2Zhc3QvdGV4dC9ub24tbGFuZ3VhZ2UtZm9u
dC1mYWxsYmFjay1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3NTczYmRlM2QzMTZlYTU2OTJk
YmUxZDRlN2NjMmFlNmMzN2NmMWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9pb3Mtc2ltdWxhdG9yL2Zhc3QvdGV4dC9ub24tbGFuZ3VhZ2UtZm9udC1mYWxsYmFjay1l
eHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPC9oZWFkPgorPGJvZHk+CitUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IGdseXBocyBu
b3QgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBsYW5ndWFnZSBoYXZlIGFuIGFwcHJvcHJp
YXRlIGZvbnQgY2hvc2VuIGZvciB0aGVtLgorPGRpdiBzdHlsZT0iZm9udC1zaXplOiAyNTZweDsg
Zm9udC1mYW1pbHk6IE1lbmxvLVJlZ3VsYXI7Ij4mI3gyNjE5OzwvZGl2PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLXNpbXVsYXRvci9mYXN0
L3RleHQvbm9uLWxhbmd1YWdlLWZvbnQtZmFsbGJhY2suaHRtbCBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2lvcy1zaW11bGF0b3IvZmFzdC90ZXh0L25vbi1sYW5ndWFnZS1mb250LWZhbGxiYWNrLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNGUyYTQ4OGRjZmE3YThjNDA4YWIwODRhODQ5MmI4YTJhYWUzOTUxYgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy1zaW11bGF0b3IvZmFz
dC90ZXh0L25vbi1sYW5ndWFnZS1mb250LWZhbGxiYWNrLmh0bWwKQEAgLTAsMCArMSw5IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KK1RoaXMgdGVz
dCBtYWtlcyBzdXJlIHRoYXQgZ2x5cGhzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFy
IGxhbmd1YWdlIGhhdmUgYW4gYXBwcm9wcmlhdGUgZm9udCBjaG9zZW4gZm9yIHRoZW0uCis8ZGl2
IHN0eWxlPSJmb250LXNpemU6IDI1NnB4OyI+JiN4MjYxOTs8L2Rpdj4KKzwvYm9keT4KKzwvaHRt
bD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242022</attachid>
            <date>2014-11-20 21:36:45 -0800</date>
            <delta_ts>2014-12-11 16:57:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138906-20141120213701.patch</filename>
            <type>text/plain</type>
            <size>22377</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2NDA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjYyYzU0YTdlMjRmYWE0
ZTg5ZTUxYWM1ZWY3Y2RjMmQ3ZGYzNGZkMi4uMzQwNmQzYmU4Njc1ZGEwMDdlZmNmYzE1YWE3NmI5
NzA3N2FjMjk3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE0LTExLTIwICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gQ29k
ZXBvaW50cyBub3QgYXNzb2NpYXRlZCB3aXRoIGxhbmd1YWdlcyBhcmUgZHJhd24gYXMgYm94ZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODkwNgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBDVEZv
bnRDcmVhdGVGb3JTdHJpbmcgaW5zdGVhZCBvZiBoYXJkY29kZWQgdGFibGVzLgorCisgICAgICAg
IFRlc3Q6IHBsYXRmb3JtL2lvcy1zaW11bGF0b3IvZmFzdC90ZXh0L25vbi1sYW5ndWFnZS1mb250
LWZhbGxiYWNrLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2Fj
aGVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9y
Q2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5Rm9udENoYXJhY3RlclNldCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphcHBsZUNvbG9yRW1vamlDaGFyYWN0ZXJTZXQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cGhvbmVGYWxsYmFja0NoYXJhY3RlclNldCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsYW5ndWFnZVNwZWNpZmljRmFsbGJhY2tGb250KTog
RGVsZXRlZC4KKwogMjAxNC0xMS0xOSAgQWRhIENoYW4gIDxhZGFjaGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZGQgYSB3YXkgdG8gbXV0ZSBhbiBBdWRpb0NvbnRleHQuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQppbmRleCAw
NTlhMGM4ZDYxNTNjYTdmNGY1YTU0MmU3MWM1NmE4OTZiZjU3ZWU5Li5kNTk5NTYxOTk5MTdmMWYy
OWY3OGViZjNmNzQ0OTE2MzZiNjM2YjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0KQEAgLTUzLDI2ICs1Myw2IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCByZXF1aXJlc0N1c3RvbUZhbGxiYWNrRm9udChjb25zdCBVSW50MzIg
Y2hhcmFjdGVyKQogICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gQXBwbGVMb2dvIHx8IGNoYXJhY3Rl
ciA9PSBibGFja0NpcmNsZTsKIH0KIAotc3RhdGljIENGQ2hhcmFjdGVyU2V0UmVmIGNvcHlGb250
Q2hhcmFjdGVyU2V0KENGU3RyaW5nUmVmIGZvbnROYW1lKQotewotICAgIC8vIFRoZSBzaXplLCAx
MCwgaXMgYXJiaXRyYXJ5LgotICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250
RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhOYW1lQW5kU2l6
ZShmb250TmFtZSwgMTApKTsKLSAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250ID0gYWRvcHRD
RihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3IuZ2V0KCksIDEw
LCBudWxscHRyKSk7Ci0gICAgcmV0dXJuIChDRkNoYXJhY3RlclNldFJlZilDVEZvbnREZXNjcmlw
dG9yQ29weUF0dHJpYnV0ZShmb250RGVzY3JpcHRvci5nZXQoKSwga0NURm9udENoYXJhY3RlclNl
dEF0dHJpYnV0ZSk7Ci19Ci0KLXN0YXRpYyBDRkNoYXJhY3RlclNldFJlZiBhcHBsZUNvbG9yRW1v
amlDaGFyYWN0ZXJTZXQoKQotewotICAgIHN0YXRpYyBDRkNoYXJhY3RlclNldFJlZiBjaGFyYWN0
ZXJTZXQgPSBjb3B5Rm9udENoYXJhY3RlclNldChDRlNUUigiQXBwbGVDb2xvckVtb2ppIikpOwot
ICAgIHJldHVybiBjaGFyYWN0ZXJTZXQ7Ci19Ci0KLXN0YXRpYyBDRkNoYXJhY3RlclNldFJlZiBw
aG9uZUZhbGxiYWNrQ2hhcmFjdGVyU2V0KCkKLXsKLSAgICBzdGF0aWMgQ0ZDaGFyYWN0ZXJTZXRS
ZWYgY2hhcmFjdGVyU2V0ID0gY29weUZvbnRDaGFyYWN0ZXJTZXQoQ0ZTVFIoIi5QaG9uZUZhbGxi
YWNrIikpOwotICAgIHJldHVybiBjaGFyYWN0ZXJTZXQ7Ci19Ci0KIFBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0U3lzdGVtRm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVycyhj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSog
b3JpZ2luYWxGb250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7
CiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gb3JpZ2luYWxGb250
RGF0YS0+cGxhdGZvcm1EYXRhKCk7CkBAIC0xMTMsODcgKzkzLDYgQEAgZW51bSBjbGFzcyBMYW5n
dWFnZVNwZWNpZmljRm9udCB7CiAgICAgRW1vamksCiB9OwogCi1zdGF0aWMgTGFuZ3VhZ2VTcGVj
aWZpY0ZvbnQgbGFuZ3VhZ2VTcGVjaWZpY0ZhbGxiYWNrRm9udChVQ2hhcjMyIGMpCi17Ci0gICAg
c3RhdGljIGJvb2wgaXNHQjE4MDMwQ29tcGxpYW5jZVJlcXVpcmVkID0gd2tJc0dCMTgwMzBDb21w
bGlhbmNlUmVxdWlyZWQoKTsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgcmFuZ2VzIGFyZSBLb3Jl
YW4gSGFuZ3VsIGFuZCBzaG91bGQgYmUgcmVuZGVyZWQgYnkgQXBwbGVTREdvdGhpY05lbwotICAg
IC8vIFUrMTEwMCAtIFUrMTFGRgotICAgIC8vIFUrMzEzMCAtIFUrMzE4RgotICAgIC8vIFUrQUMw
MCAtIFUrRDdBMwotCi0gICAgLy8gVGhlc2UgYXJlIEN5cmlsbGljIGFuZCBzaG91bGQgYmUgcmVu
ZGVyZWQgYnkgSGVsdmV0aWNhIE5ldWUKLSAgICAvLyBVKzA0MDAgLSBVKzA1MkYKLQotICAgIGlm
IChjIDwgMHg0MDApCi0gICAgICAgIHJldHVybiBMYW5ndWFnZVNwZWNpZmljRm9udDo6Tm9uZTsK
LSAgICBpZiAoYyA8IDB4NTMwKQotICAgICAgICByZXR1cm4gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6
OkN5cmlsbGljOwotICAgIGlmIChjIDwgMHg1OTApCi0gICAgICAgIHJldHVybiBMYW5ndWFnZVNw
ZWNpZmljRm9udDo6Tm9uZTsKLSAgICBpZiAoYyA8IDB4NjAwKQotICAgICAgICByZXR1cm4gTGFu
Z3VhZ2VTcGVjaWZpY0ZvbnQ6OkhlYnJldzsKLSAgICBpZiAoYyA8IDB4NzAwKQotICAgICAgICBy
ZXR1cm4gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkFyYWJpYzsKLSAgICBpZiAoYyA8IDB4OTAwKQot
ICAgICAgICByZXR1cm4gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6Ok5vbmU7Ci0gICAgaWYgKGMgPCAw
eEUwMCkKLSAgICAgICAgcmV0dXJuIExhbmd1YWdlU3BlY2lmaWNGb250OjpJbmRpYzsKLSAgICBp
ZiAoYyA8IDB4RTgwKQotICAgICAgICByZXR1cm4gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OlRoYWk7
Ci0gICAgaWYgKGMgPCAweDBGMDApCi0gICAgICAgIHJldHVybiBMYW5ndWFnZVNwZWNpZmljRm9u
dDo6TGFvOwotICAgIGlmIChjIDwgMHgxMDAwKQotICAgICAgICByZXR1cm4gTGFuZ3VhZ2VTcGVj
aWZpY0ZvbnQ6OlRpYmV0YW47Ci0gICAgaWYgKGMgPCAweDExMDApCi0gICAgICAgIHJldHVybiBM
YW5ndWFnZVNwZWNpZmljRm9udDo6Tm9uZTsKLSAgICBpZiAoYyA8IDB4MTIwMCkKLSAgICAgICAg
cmV0dXJuIExhbmd1YWdlU3BlY2lmaWNGb250OjpLb3JlYW47Ci0gICAgaWYgKGMgPCAweDE0MDEp
Ci0gICAgICAgIHJldHVybiBMYW5ndWFnZVNwZWNpZmljRm9udDo6S2htZXI7IC8vIEZJWE1FOiBU
aGVzZSBjb2RlcG9pbnRzIGRvbid0IGJlbG9uZyB0byBLaG1lcgotICAgIGlmIChjIDwgMHgxNzgw
KQotICAgICAgICByZXR1cm4gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkNhbmFkaWFuQWJvcmlnaW5h
bFN5bGxhYmljOwotICAgIGlmIChjIDwgMHgxODAwKQotICAgICAgICByZXR1cm4gTGFuZ3VhZ2VT
cGVjaWZpY0ZvbnQ6OktobWVyOwotICAgIGlmIChjIDwgMHgyRTgwKQotICAgICAgICByZXR1cm4g
TGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6Ok5vbmU7Ci0gICAgaWYgKGMgPCAweDMxMzApCi0gICAgICAg
IHJldHVybiBMYW5ndWFnZVNwZWNpZmljRm9udDo6Q2hpbmVzZUphcGFuZXNlOwotICAgIGlmIChj
IDwgMHgzMTkwKQotICAgICAgICByZXR1cm4gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OktvcmVhbjsK
LSAgICBpZiAoYyA8IDB4QUMwMCkKLSAgICAgICAgcmV0dXJuIExhbmd1YWdlU3BlY2lmaWNGb250
OjpDaGluZXNlSmFwYW5lc2U7Ci0gICAgaWYgKGMgPCAweEQ3QTQpCi0gICAgICAgIHJldHVybiBM
YW5ndWFnZVNwZWNpZmljRm9udDo6S29yZWFuOwotICAgIGlmIChjIDwgMHhFMDAwKQotICAgICAg
ICByZXR1cm4gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkNoaW5lc2VKYXBhbmVzZTsKLSAgICBpZiAo
YyA8IDB4RTYwMCkKLSAgICAgICAgcmV0dXJuIGlzR0IxODAzMENvbXBsaWFuY2VSZXF1aXJlZCA/
IExhbmd1YWdlU3BlY2lmaWNGb250OjpDaGluZXNlSmFwYW5lc2UgOiBMYW5ndWFnZVNwZWNpZmlj
Rm9udDo6RW1vamk7Ci0gICAgaWYgKGMgPCAweEU4NjUgJiYgaXNHQjE4MDMwQ29tcGxpYW5jZVJl
cXVpcmVkKQotICAgICAgICByZXR1cm4gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkNoaW5lc2VKYXBh
bmVzZTsKLSAgICBpZiAoYyA8IDB4RjkwMCkKLSAgICAgICAgcmV0dXJuIExhbmd1YWdlU3BlY2lm
aWNGb250OjpOb25lOwotICAgIGlmIChjIDwgMHhGQjAwKQotICAgICAgICByZXR1cm4gTGFuZ3Vh
Z2VTcGVjaWZpY0ZvbnQ6OkNoaW5lc2VKYXBhbmVzZTsKLSAgICBpZiAoYyA8IDB4RkI1MCkKLSAg
ICAgICAgcmV0dXJuIExhbmd1YWdlU3BlY2lmaWNGb250OjpOb25lOwotICAgIGlmIChjIDwgMHhG
RTAwKQotICAgICAgICByZXR1cm4gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkFyYWJpYzsKLSAgICBp
ZiAoYyA8IDB4RkUyMCkKLSAgICAgICAgcmV0dXJuIExhbmd1YWdlU3BlY2lmaWNGb250OjpOb25l
OwotICAgIGlmIChjIDwgMHhGRTcwKQotICAgICAgICByZXR1cm4gTGFuZ3VhZ2VTcGVjaWZpY0Zv
bnQ6OkNoaW5lc2VKYXBhbmVzZTsKLSAgICBpZiAoYyA8IDB4RkYwMCkKLSAgICAgICAgcmV0dXJu
IExhbmd1YWdlU3BlY2lmaWNGb250OjpBcmFiaWM7Ci0gICAgaWYgKGMgPCAweEZGRjApCi0gICAg
ICAgIHJldHVybiBMYW5ndWFnZVNwZWNpZmljRm9udDo6Q2hpbmVzZUphcGFuZXNlOwotICAgIGlm
IChjIDwgMHgyMDAwMCkKLSAgICAgICAgcmV0dXJuIExhbmd1YWdlU3BlY2lmaWNGb250OjpOb25l
OwotICAgIGlmIChjIDwgMHgzMDAwMCkKLSAgICAgICAgcmV0dXJuIExhbmd1YWdlU3BlY2lmaWNG
b250OjpDaGluZXNlSmFwYW5lc2U7Ci0gICAgcmV0dXJuIExhbmd1YWdlU3BlY2lmaWNGb250OjpO
b25lOwotfQotCiBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5c3RlbUZh
bGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBj
b25zdCBTaW1wbGVGb250RGF0YSogb3JpZ2luYWxGb250RGF0YSwgYm9vbCwgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAgLy8gVW5saWtlIE9TIFgsIG91ciBmYWxs
YmFjayBmb250IG9uIGlQaG9uZSBpcyBBcmlhbCBVbmljb2RlLCB3aGljaCBkb2Vzbid0IGhhdmUg
c29tZSBhcHBsZS1zcGVjaWZpYyBnbHlwaHMgbGlrZSBGOEZGLgpAQCAtMjEyLDIyNCArMTExLDEy
IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tG
b3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjCiAgICAgICAgICAgICByZXR1cm4gZ2V0U3lzdGVt
Rm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVycyhkZXNjcmlwdGlvbiwgb3JpZ2luYWxGb250RGF0YSwg
Y2hhcmFjdGVycywgbGVuZ3RoKTsKICAgICB9CiAKLSAgICBMYW5ndWFnZVNwZWNpZmljRm9udCBs
YW5ndWFnZVNwZWNpZmljRm9udCA9IExhbmd1YWdlU3BlY2lmaWNGb250OjpOb25lOwotICAgIGlm
IChsZW5ndGggPiAwKQotICAgICAgICBsYW5ndWFnZVNwZWNpZmljRm9udCA9IGxhbmd1YWdlU3Bl
Y2lmaWNGYWxsYmFja0ZvbnQoYyk7Ci0KICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNpbXBs
ZUZvbnREYXRhOwotCi0gICAgc3dpdGNoIChsYW5ndWFnZVNwZWNpZmljRm9udCkgewotICAgIGNh
c2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkNoaW5lc2VKYXBhbmVzZTogewotICAgICAgICAvLyBC
eSBkZWZhdWx0LCBDaGluZXNlIGZvbnQgaXMgcHJlZmVycmVkLCBmYWxsIGJhY2sgb24gSmFwYW5l
c2UuCi0KLSAgICAgICAgZW51bSBDSktGb250VmFyaWFudCB7Ci0gICAgICAgICAgICBrQ0pLRm9u
dFVzZUhpcmFnaW5vID0gMCwKLSAgICAgICAgICAgIGtDSktGb250VXNlU1RIZWl0aVNDLAotICAg
ICAgICAgICAga0NKS0ZvbnRVc2VTVEhlaXRpVEMsCi0gICAgICAgICAgICBrQ0pLRm9udFVzZVNU
SGVpdGlKLAotICAgICAgICAgICAga0NKS0ZvbnRVc2VTVEhlaXRpSywKLSAgICAgICAgICAgIGtD
SktGb250c1VzZUhLR1BXM1VJCi0gICAgICAgIH07Ci0KLSAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4gcGxhaW5IaXJhZ2lubygiSGlyYUtha3VQcm9OLVczIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IHBsYWluU1RIZWl0aVNDKCJTVEhlaXRpU0MtTGlnaHQiLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gcGxhaW5TVEhlaXRpVEMoIlNUSGVpdGlUQy1MaWdodCIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBwbGFpblNUSGVpdGlKKCJTVEhlaXRpSi1MaWdodCIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBwbGFpblNUSGVpdGlLKCJTVEhlaXRpSy1MaWdodCIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBwbGFpbkhLR1BXM1VJKCJIS0dQVzNVSSIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzdGF0aWMgQXRvbWljU3Ry
aW5nKiBjamtQbGFpbltdID0geyAgICAgCi0gICAgICAgICAgICAmcGxhaW5IaXJhZ2luby5nZXQo
KSwKLSAgICAgICAgICAgICZwbGFpblNUSGVpdGlTQy5nZXQoKSwKLSAgICAgICAgICAgICZwbGFp
blNUSGVpdGlUQy5nZXQoKSwKLSAgICAgICAgICAgICZwbGFpblNUSGVpdGlKLmdldCgpLAotICAg
ICAgICAgICAgJnBsYWluU1RIZWl0aUsuZ2V0KCksCi0gICAgICAgICAgICAmcGxhaW5IS0dQVzNV
SS5nZXQoKSwKLSAgICAgICAgfTsKLQotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiBib2xkSGlyYWdpbm8oIkhpcmFLYWt1UHJvTi1XNiIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiBib2xkU1RIZWl0aVNDKCJTVEhlaXRpU0MtTWVkaXVtIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxB
dG9taWNTdHJpbmc+IGJvbGRTVEhlaXRpVEMoIlNUSGVpdGlUQy1NZWRpdW0iLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEF0b21pY1N0cmluZz4gYm9sZFNUSGVpdGlKKCJTVEhlaXRpSi1NZWRpdW0iLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEF0b21pY1N0cmluZz4gYm9sZFNUSGVpdGlLKCJTVEhlaXRpSy1NZWRpdW0iLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEF0b21pY1N0cmluZz4gYm9sZEhLR1BXM1VJKCJIS0dQVzNVSSIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzdGF0aWMgQXRvbWljU3RyaW5nKiBjamtCb2xk
W10gPSB7ICAKLSAgICAgICAgICAgICZib2xkSGlyYWdpbm8uZ2V0KCksCi0gICAgICAgICAgICAm
Ym9sZFNUSGVpdGlTQy5nZXQoKSwKLSAgICAgICAgICAgICZib2xkU1RIZWl0aVRDLmdldCgpLAot
ICAgICAgICAgICAgJmJvbGRTVEhlaXRpSi5nZXQoKSwKLSAgICAgICAgICAgICZib2xkU1RIZWl0
aUsuZ2V0KCksCi0gICAgICAgICAgICAmYm9sZEhLR1BXM1VJLmdldCgpLAotICAgICAgICB9Owot
Ci0gICAgICAgIC8vIERlZmF1bHQgYmVsb3cgaXMgZm9yIFNpbXBsaWZpZWQgQ2hpbmVzZSB1c2Vy
OiB6aC1IYW5zIC0gbm90ZSB0aGF0IEhpcmFnaW5vIGlzIHRoZQotICAgICAgICAvLyB0aGUgc2Vj
b25kYXJ5IGZvbnQgYXMgd2Ugd2FudCBpdHMgZm9yIEhpcmFnYW5hIGFuZCBLYXRha2FuYS4gVGhl
IG90aGVyIENKSyBmb250cwotICAgICAgICAvLyBkbyBub3QsIGFuZCBzaG91bGQgbm90LCBjb250
YWluIEhpcmFnYW5hIG9yIEthdGFrYW5hIGdseXBocy4KLSAgICAgICAgc3RhdGljIENKS0ZvbnRW
YXJpYW50IHByZWZlcnJlZENKS0ZvbnQgPSBrQ0pLRm9udFVzZVNUSGVpdGlTQzsKLSAgICAgICAg
c3RhdGljIENKS0ZvbnRWYXJpYW50IHNlY29uZGFyeUNKS0ZvbnQgPSBrQ0pLRm9udHNVc2VIS0dQ
VzNVSTsKLQotICAgICAgICBzdGF0aWMgYm9vbCBDSktGb250SW5pdGlhbGl6ZWQ7Ci0gICAgICAg
IGlmICghQ0pLRm9udEluaXRpYWxpemVkKSB7Ci0gICAgICAgICAgICBDSktGb250SW5pdGlhbGl6
ZWQgPSB0cnVlOwotICAgICAgICAgICAgLy8gVGVzdGluZzogbGFuZ3VhZ2VOYW1lID0gKENGU3Ry
aW5nUmVmKUAiamEiOwotICAgICAgICAgICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0gW05T
VXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKLSAgICAgICAgICAgIE5TQXJyYXkg
Kmxhbmd1YWdlcyA9IFtkZWZhdWx0cyBzdHJpbmdBcnJheUZvcktleTpAIkFwcGxlTGFuZ3VhZ2Vz
Il07Ci0KLSAgICAgICAgICAgIGlmIChsYW5ndWFnZXMpIHsKLSAgICAgICAgICAgICAgICBmb3Ig
KE5TU3RyaW5nICpsYW5ndWFnZSBpbiBsYW5ndWFnZXMpIHsKLSAgICAgICAgICAgICAgICAgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBsYW5ndWFnZU5hbWUgPSBhZG9wdENGKENGTG9jYWxlQ3Jl
YXRlQ2Fub25pY2FsTGFuZ3VhZ2VJZGVudGlmaWVyRnJvbVN0cmluZyhudWxscHRyLCAoQ0ZTdHJp
bmdSZWYpbGFuZ3VhZ2UpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKENGRXF1YWwobGFuZ3Vh
Z2VOYW1lLmdldCgpLCBDRlNUUigiemgtSGFucyIpKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOyAvLyBTaW1wbGlmaWVkIENoaW5lc2UgLSBkZWZhdWx0IHNldHRpbmdzCi0gICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKENGRXF1YWwobGFuZ3VhZ2VOYW1lLmdldCgpLCBDRlNUUigi
amEiKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZENKS0ZvbnQgPSBrQ0pL
Rm9udFVzZUhpcmFnaW5vOyAvLyBKYXBhbmVzZSAtIHByZWZlciBIaXJhZ2lubyBhbmQgU1RIZWl0
aSBKYXBhbnNlIFZhcmlhbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeUNKS0Zv
bnQgPSBrQ0pLRm9udFVzZVNUSGVpdGlKOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQ0ZFcXVhbChsYW5ndWFnZU5hbWUuZ2V0
KCksIENGU1RSKCJrbyIpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkQ0pL
Rm9udCA9IGtDSktGb250VXNlU1RIZWl0aUs7IC8vIEtvcmVhbiAtIHByZWZlciBTVEhlaXRpIEtv
cmVhbiBWYXJpYW50IAotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoQ0ZFcXVhbChsYW5ndWFnZU5hbWUuZ2V0KCksIENGU1RSKCJ6
aC1IYW50IikpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmVmZXJyZWRDSktGb250ID0g
a0NKS0ZvbnRVc2VTVEhlaXRpVEM7IC8vIFRyYWRpdGlvbmFsIENoaW5lc2UgLSBwcmVmZXIgU1RI
ZWl0aSBUcmFkaXRpb25hbCBWYXJpYW50Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEo
ZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gKmNq
a0JvbGRbcHJlZmVycmVkQ0pLRm9udF0gOiAqY2prUGxhaW5bcHJlZmVycmVkQ0pLRm9udF0sIGZh
bHNlLCBEb05vdFJldGFpbik7Ci0gICAgICAgIGJvb2wgdXNlU2Vjb25kYXJ5Rm9udCA9IHRydWU7
Ci0gICAgICAgIGlmIChzaW1wbGVGb250RGF0YSkgewotICAgICAgICAgICAgQ0dHbHlwaCBnbHlw
aHNbMl07Ci0gICAgICAgICAgICAvLyBDR0ZvbnRHZXRHbHlwaHNGb3JVbmljaGFycyB0YWtlcyBV
VEYtMTYgYnVmZmVyLiBTaG91bGQgb25seSBiZSAxIGNvZGVwb2ludCBidXQgc2luY2Ugd2UgbWF5
IHBhc3MgaW4gdHdvIFVURi0xNiBjaGFyYWN0ZXJzLAotICAgICAgICAgICAgLy8gbWFrZSByb29t
IGZvciAyIGdseXBocyBqdXN0IHRvIGJlIHNhZmUuCi0gICAgICAgICAgICBDR0ZvbnRHZXRHbHlw
aHNGb3JVbmljaGFycyhzaW1wbGVGb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuY2dGb250KCksIGNo
YXJhY3RlcnMsIGdseXBocywgbGVuZ3RoKTsKLQotICAgICAgICAgICAgdXNlU2Vjb25kYXJ5Rm9u
dCA9IChnbHlwaHNbMF0gPT0gMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodXNlU2Vjb25k
YXJ5Rm9udCkKLSAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEo
ZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gKmNq
a0JvbGRbc2Vjb25kYXJ5Q0pLRm9udF0gOiAqY2prUGxhaW5bc2Vjb25kYXJ5Q0pLRm9udF0sIGZh
bHNlLCBEb05vdFJldGFpbik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIExhbmd1
YWdlU3BlY2lmaWNGb250OjpLb3JlYW46IHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEF0b21pY1N0cmluZz4ga29yZWFuUGxhaW4oIkFwcGxlU0RHb3RoaWNOZW8tTWVkaXVtIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IGtvcmVhbkJvbGQoIkFwcGxlU0RHb3RoaWNOZW8tQm9sZCIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250
RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRl
c2NyaXB0aW9uLndlaWdodCgpKSA/IGtvcmVhbkJvbGQgOiBrb3JlYW5QbGFpbiwgZmFsc2UsIERv
Tm90UmV0YWluKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgTGFuZ3VhZ2VTcGVj
aWZpY0ZvbnQ6OkN5cmlsbGljOiB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IGN5cmlsbGljUGxhaW4oIkhlbHZldGljYU5ldWUiLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21p
Y1N0cmluZz4gY3lyaWxsaWNCb2xkKCJIZWx2ZXRpY2FOZXVlLUJvbGQiLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNo
ZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWln
aHQoKSkgPyBjeXJpbGxpY0JvbGQgOiBjeXJpbGxpY1BsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4p
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6
QXJhYmljOiB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGFy
YWJpY1BsYWluKCJHZWV6YVBybyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBhcmFiaWNCb2xk
KCJHZWV6YVByby1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0g
ICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGlz
Rm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gYXJhYmljQm9sZCA6IGFyYWJp
Y1BsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6SGVicmV3OiB7Ci0gICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGhlYnJld1BsYWluKCJBcmlhbEhlYnJldyIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBoZWJyZXdCb2xkKCJBcmlhbEhlYnJldy1Cb2xkIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0g
Z2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRp
b24ud2VpZ2h0KCkpID8gaGVicmV3Qm9sZCA6IGhlYnJld1BsYWluLCBmYWxzZSwgRG9Ob3RSZXRh
aW4pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9u
dDo6SW5kaWM6IHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4g
ZGV2YW5hZ2FyaUZvbnQoIktvaGlub29yRGV2YW5hZ2FyaS1Cb29rIiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IGJlbmdhbGlGb250KCJCYW5nbGFTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBndXJtdWtoaUZvbnQoIkd1cm11a2hpTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsgLy8gTWlnaHQgYmUgcmVwbGFjZWQgaW4gYSBmdXR1cmUgcmVsZWFzZSB3
aXRoIGEgU2FuZ2FtIHZlcnNpb24uCi0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IGd1amFyYXRpRm9udCgiR3VqYXJhdGlTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiBvcml5YUZvbnQoIk9yaXlhU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gdGFtaWxGb250KCJUYW1pbFNhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+
IHRlbHVndUZvbnQoIlRlbHVndVNhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGth
bm5hZGFGb250KCJLYW5uYWRhU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbWFs
YXlhbGFtRm9udCgiTWFsYXlhbGFtU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4g
c2luaGFsYUZvbnQoIlNpbmhhbGFTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotCi0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+
IGRldmFuYWdhcmlGb250Qm9sZCgiS29oaW5vb3JEZXZhbmFnYXJpLU1lZGl1bSIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8QXRvbWljU3RyaW5nPiBiZW5nYWxpRm9udEJvbGQoIkJhbmdsYVNhbmdhbU1OLUJvbGQiLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ3VybXVraGlGb250Qm9sZCgiR3VybXVraGlNTi1Cb2xk
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7IC8vIE1pZ2h0IGJlIHJlcGxh
Y2VkIGluIGEgZnV0dXJlIHJlbGVhc2Ugd2l0aCBhIFNhbmdhbSB2ZXJzaW9uLgotICAgICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBndWphcmF0aUZvbnRCb2xkKCJHdWph
cmF0aVNhbmdhbU1OLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
LSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gb3JpeWFGb250Qm9s
ZCgiT3JpeWFTYW5nYW1NTi1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRhbWlsRm9u
dEJvbGQoIlRhbWlsU2FuZ2FtTU4tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0ZWx1
Z3VGb250Qm9sZCgiVGVsdWd1U2FuZ2FtTU4tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBrYW5uYWRhRm9udEJvbGQoIkthbm5hZGFTYW5nYW1NTi1Cb2xkIiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IG1hbGF5YWxhbUZvbnRCb2xkKCJNYWxheWFsYW1TYW5nYW1NTi1Cb2xkIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IHNpbmhhbGFGb250Qm9sZCgiU2luaGFsYVNhbmdhbU1OLUJv
bGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLQotICAgICAgICBzdGF0
aWMgQXRvbWljU3RyaW5nKiBpbmRpY1VuaWNvZGVQYWdlRm9udHNbXSA9IHsKLSAgICAgICAgICAg
ICZkZXZhbmFnYXJpRm9udC5nZXQoKSwKLSAgICAgICAgICAgICZiZW5nYWxpRm9udC5nZXQoKSwK
LSAgICAgICAgICAgICZndXJtdWtoaUZvbnQuZ2V0KCksCi0gICAgICAgICAgICAmZ3VqYXJhdGlG
b250LmdldCgpLAotICAgICAgICAgICAgJm9yaXlhRm9udC5nZXQoKSwKLSAgICAgICAgICAgICZ0
YW1pbEZvbnQuZ2V0KCksCi0gICAgICAgICAgICAmdGVsdWd1Rm9udC5nZXQoKSwKLSAgICAgICAg
ICAgICZrYW5uYWRhRm9udC5nZXQoKSwKLSAgICAgICAgICAgICZtYWxheWFsYW1Gb250LmdldCgp
LAotICAgICAgICAgICAgJnNpbmhhbGFGb250LmdldCgpCi0gICAgICAgIH07Ci0KLSAgICAgICAg
c3RhdGljIEF0b21pY1N0cmluZyogaW5kaWNVbmljb2RlUGFnZUZvbnRzQm9sZFtdID0gewotICAg
ICAgICAgICAgJmRldmFuYWdhcmlGb250Qm9sZC5nZXQoKSwKLSAgICAgICAgICAgICZiZW5nYWxp
Rm9udEJvbGQuZ2V0KCksCi0gICAgICAgICAgICAmZ3VybXVraGlGb250Qm9sZC5nZXQoKSwKLSAg
ICAgICAgICAgICZndWphcmF0aUZvbnRCb2xkLmdldCgpLAotICAgICAgICAgICAgJm9yaXlhRm9u
dEJvbGQuZ2V0KCksCi0gICAgICAgICAgICAmdGFtaWxGb250Qm9sZC5nZXQoKSwKLSAgICAgICAg
ICAgICZ0ZWx1Z3VGb250Qm9sZC5nZXQoKSwKLSAgICAgICAgICAgICZrYW5uYWRhRm9udEJvbGQu
Z2V0KCksCi0gICAgICAgICAgICAmbWFsYXlhbGFtRm9udEJvbGQuZ2V0KCksCi0gICAgICAgICAg
ICAmc2luaGFsYUZvbnRCb2xkLmdldCgpCi0gICAgICAgIH07Ci0KLSAgICAgICAgdWludDMyX3Qg
aW5kaWNQYWdlT3JkZXJJbmRleCA9IChjIC0gMHgwOTAwKSAvIDB4MDA4MDsgLy8gSW5kaWMgc2Ny
aXB0cyBzdGFydCBhdCAweDA5MDAgaW4gVW5pY29kZS4gRWFjaCBzY3JpcHQgaXMgYWxsb2NhbHRl
ZCBhIGJsb2NrIG9mIDB4ODAgY2hhcmFjdGVycy4KLSAgICAgICAgaWYgKGluZGljUGFnZU9yZGVy
SW5kZXggPCAoc2l6ZW9mKGluZGljVW5pY29kZVBhZ2VGb250cykgLyBzaXplb2YoQXRvbWljU3Ry
aW5nKikpKSB7Ci0gICAgICAgICAgICBBdG9taWNTdHJpbmcqIGluZGljRm9udFN0cmluZyA9IGlz
Rm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gaW5kaWNVbmljb2RlUGFnZUZv
bnRzQm9sZFtpbmRpY1BhZ2VPcmRlckluZGV4XSA6IGluZGljVW5pY29kZVBhZ2VGb250c1tpbmRp
Y1BhZ2VPcmRlckluZGV4XTsKLSAgICAgICAgICAgIGlmIChpbmRpY0ZvbnRTdHJpbmcpCi0gICAg
ICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlv
biwgKmluZGljRm9udFN0cmluZywgZmFsc2UsIERvTm90UmV0YWluKTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6VGhhaTog
ewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0aGFpUGxhaW4o
IlRob25idXJpIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRoYWlCb2xkKCJUaG9uYnVyaS1C
b2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBs
ZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJv
bGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gdGhhaUJvbGQgOiB0aGFpUGxhaW4sIGZhbHNlLCBE
b05vdFJldGFpbik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIExhbmd1YWdlU3Bl
Y2lmaWNGb250OjpUaWJldGFuOiB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IHRpYmV0YW5QbGFpbigiS2FpbGFzYSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiB0aWJldGFuQm9sZCgiS2FpbGFzYS1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVz
Y3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gdGliZXRh
bkJvbGQgOiB0aWJldGFuUGxhaW4sIGZhbHNlLCBEb05vdFJldGFpbik7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpDYW5hZGlhbkFib3JpZ2lu
YWxTeWxsYWJpYzogewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBjYXNQbGFpbigiRXVwaGVtaWFVQ0FTIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNhc0Jv
bGQoIkV1cGhlbWlhVUNBUy1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRp
b24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gY2FzQm9sZCA6IGNh
c1BsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6S2htZXI6IHsKLSAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4ga2htZXIoIktobWVyU2FuZ2FtTU4iLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRD
YWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwga2htZXIsIGZhbHNlLCBEb05vdFJldGFpbik7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpMYW86
IHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbGFvKCJMYW9T
YW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBz
aW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBsYW8sIGZhbHNl
LCBEb05vdFJldGFpbik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OiB7Ci0g
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGFwcGxlQ29sb3JFbW9q
aSgiQXBwbGVDb2xvckVtb2ppIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
Ci0gICAgICAgIGJvb2wgdXNlRW1vamlGb250ID0gbGFuZ3VhZ2VTcGVjaWZpY0ZvbnQgPT0gTGFu
Z3VhZ2VTcGVjaWZpY0ZvbnQ6OkVtb2ppOwotICAgICAgICBpZiAoIXVzZUVtb2ppRm9udCkgewot
ICAgICAgICAgICAgaWYgKCFDRkNoYXJhY3RlclNldElzTG9uZ0NoYXJhY3Rlck1lbWJlcihwaG9u
ZUZhbGxiYWNrQ2hhcmFjdGVyU2V0KCksIGMpKQotICAgICAgICAgICAgICAgIHVzZUVtb2ppRm9u
dCA9IENGQ2hhcmFjdGVyU2V0SXNMb25nQ2hhcmFjdGVyTWVtYmVyKGFwcGxlQ29sb3JFbW9qaUNo
YXJhY3RlclNldCgpLCBjKTsKLSAgICAgICAgfQotICAgICAgICBpZiAodXNlRW1vamlGb250KQot
ICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlv
biwgYXBwbGVDb2xvckVtb2ppLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgfQorICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZTdHJpbmcgPSBhZG9w
dENGKENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnNOb0NvcHkoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgY2hhcmFjdGVycywgbGVuZ3RoLCBrQ0ZBbGxvY2F0b3JOdWxsKSk7CisgICAgUmV0YWluUHRy
PENURm9udFJlZj4gZmFsbGJhY2tGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVGb3JTdHJpbmco
b3JpZ2luYWxGb250RGF0YS0+Z2V0Q1RGb250KCksIGNmU3RyaW5nLmdldCgpLCBDRlJhbmdlTWFr
ZSgwLCBsZW5ndGgpKSk7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmb3VuZEZvbnROYW1l
ID0gYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUoZmFsbGJhY2tGb250LmdldCgpKSk7
CisgICAgaWYgKGZvdW5kRm9udE5hbWUpCisgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2Fj
aGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGZvdW5kRm9udE5hbWUuZ2V0KCksIGZhbHNlLCBEb05v
dFJldGFpbik7CiAKICAgICBpZiAoc2ltcGxlRm9udERhdGEpCiAgICAgICAgIHJldHVybiBzaW1w
bGVGb250RGF0YS5yZWxlYXNlKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZTZmYzEzNDRiZmFkZTllMTdkZDVmYzYzOTI3
MGRhYzhiZmQ5ZmU5Mi4uYTgzMjQ2NDZhZmFkN2NkYzUxOTI1ZjYwODRhNzI4YzE3ODhiM2Y1MCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTExLTIwICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1t
YXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gQ29kZXBvaW50cyBub3QgYXNzb2Np
YXRlZCB3aXRoIGxhbmd1YWdlcyBhcmUgZHJhd24gYXMgYm94ZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODkwNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERyYXcgb25lIG9mIHRoZXNlIGNoYXJhY3Rl
cnMgd2l0aCBhbmQgd2l0aG91dCBhIHNwZWNpZmljIGZvbnQgc3BlY2lmaWVkLgorCisgICAgICAg
ICogcGxhdGZvcm0vaW9zLXNpbXVsYXRvci9mYXN0L3RleHQvbm9uLWxhbmd1YWdlLWZvbnQtZmFs
bGJhY2stZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zLXNpbXVs
YXRvci9mYXN0L3RleHQvbm9uLWxhbmd1YWdlLWZvbnQtZmFsbGJhY2suaHRtbDogQWRkZWQuCisK
IDIwMTQtMTEtMjAgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgVXBkYXRlIG1lZGlhL3RyYWNrL3RyYWNrLWluLWJhbmQtY3Vlcy1hZGRlZC1vbmNlLmh0
bWwgdG8gbWFrZSBmYWlsdXJlcyBlYXNpZXIgdG8gZGlhZ25vc2UKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL2lvcy1zaW11bGF0b3IvZmFzdC90ZXh0L25vbi1sYW5ndWFnZS1mb250
LWZhbGxiYWNrLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3Mtc2ltdWxh
dG9yL2Zhc3QvdGV4dC9ub24tbGFuZ3VhZ2UtZm9udC1mYWxsYmFjay1leHBlY3RlZC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjY3NTczYmRlM2QzMTZlYTU2OTJkYmUxZDRlN2NjMmFlNmMzN2NmMWQKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3Mtc2ltdWxhdG9yL2Zhc3QvdGV4
dC9ub24tbGFuZ3VhZ2UtZm9udC1mYWxsYmFjay1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsOSBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+CitUaGlz
IHRlc3QgbWFrZXMgc3VyZSB0aGF0IGdseXBocyBub3QgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGlj
dWxhciBsYW5ndWFnZSBoYXZlIGFuIGFwcHJvcHJpYXRlIGZvbnQgY2hvc2VuIGZvciB0aGVtLgor
PGRpdiBzdHlsZT0iZm9udC1zaXplOiAyNTZweDsgZm9udC1mYW1pbHk6IE1lbmxvLVJlZ3VsYXI7
Ij4mI3gyNjE5OzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vaW9zLXNpbXVsYXRvci9mYXN0L3RleHQvbm9uLWxhbmd1YWdlLWZvbnQtZmFs
bGJhY2suaHRtbCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy1zaW11bGF0b3IvZmFzdC90ZXh0
L25vbi1sYW5ndWFnZS1mb250LWZhbGxiYWNrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGUyYTQ4OGRjZmE3
YThjNDA4YWIwODRhODQ5MmI4YTJhYWUzOTUxYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2lvcy1zaW11bGF0b3IvZmFzdC90ZXh0L25vbi1sYW5ndWFnZS1mb250LWZh
bGxiYWNrLmh0bWwKQEAgLTAsMCArMSw5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8L2hlYWQ+Cis8Ym9keT4KK1RoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgZ2x5cGhzIG5v
dCBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIGxhbmd1YWdlIGhhdmUgYW4gYXBwcm9wcmlh
dGUgZm9udCBjaG9zZW4gZm9yIHRoZW0uCis8ZGl2IHN0eWxlPSJmb250LXNpemU6IDI1NnB4OyI+
JiN4MjYxOTs8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243163</attachid>
            <date>2014-12-11 16:57:42 -0800</date>
            <delta_ts>2014-12-15 09:01:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138906-20141211165826.patch</filename>
            <type>text/plain</type>
            <size>4767</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3MTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWQwM2IzMmJkNmRhZmEx
YmU4ZWIwMDVhNzRmYTUzZDg4MGFhMzEwYy4uYTM3YjE5MDRiMmU0ZTgwMWMxNWY0OGEwMGIzYmRk
NWZlMWFiZDU5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE0LTEyLTExICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gQ29k
ZXBvaW50cyBub3QgYXNzb2NpYXRlZCB3aXRoIGxhbmd1YWdlcyBhcmUgZHJhd24gYXMgYm94ZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODkwNgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBTUEkg
Q1RGb250Q3JlYXRlRm9yQ2hhcmFjdGVycygpLCBidXQgb25seSBpZiB3ZSBkb24ndCBhbHJlYWR5
IGtub3cgd2hhdCB0byBkbworICAgICAgICB3aXRoIHRoZSBjaGFyYWN0ZXJzLgorCisgICAgICAg
IFRlc3Q6IHBsYXRmb3JtL2lvcy1zaW11bGF0b3IvZmFzdC90ZXh0L25vbi1sYW5ndWFnZS1mb250
LWZhbGxiYWNrLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2Fj
aGVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9y
Q2hhcmFjdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg6
CisKIDIwMTQtMTItMTEgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAog
ICAgICAgICBGaXggaU9TIGJ1aWxkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0KaW5kZXggYjYzMDZiMTJmZDdiMDI4YjRhNzYx
MDdmZDcwZDg3ODgwODE0MjAxNi4uYWIwNTU5ZjcyZmY1ZWUwYjE2MWZlYTZlY2Y5MGViMGQzMTQ3
ZWRmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0Zv
bnRDYWNoZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3Mv
Rm9udENhY2hlSU9TLm1tCkBAIC00MjcsNiArNDI3LDEyIEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnRE
ZXNjCiAgICAgICAgIH0KICAgICAgICAgaWYgKHVzZUVtb2ppRm9udCkKICAgICAgICAgICAgIHNp
bXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGFwcGxlQ29sb3JF
bW9qaSwgZmFsc2UsIERvTm90UmV0YWluKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBS
ZXRhaW5QdHI8Q1RGb250UmVmPiBmYWxsYmFja0ZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZUZv
ckNoYXJhY3RlcnMob3JpZ2luYWxGb250RGF0YS0+Z2V0Q1RGb250KCksIGNoYXJhY3RlcnMsIGxl
bmd0aCwgbnVsbHB0cikpOworICAgICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmb3Vu
ZEZvbnROYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUoZmFsbGJhY2tGb250
LmdldCgpKSk7CisgICAgICAgICAgICBpZiAoZm91bmRGb250TmFtZSkKKyAgICAgICAgICAgICAg
ICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBmb3VuZEZv
bnROYW1lLmdldCgpLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cGkvY29jb2EvQ29yZVRleHRTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2Nv
YS9Db3JlVGV4dFNQSS5oCmluZGV4IGYxOGQwNWVjNjRkOWJiMGI3YzNiOWVjNjcyMzExZWNlMzE2
Zjc3OGQuLjIzMzYyYjc3MThmZTZmZjc5ZWFjM2M2ZDIwOWFiZDUxN2RkNTI5NDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9Db3JlVGV4dFNQSS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9Db3JlVGV4dFNQSS5oCkBAIC05MCw2
ICs5MCw3IEBAIENURm9udFJlZiBDVEZvbnRDcmVhdGVQaHlzaWNhbEZvbnRGb3JDaGFyYWN0ZXJz
V2l0aExhbmd1YWdlKENURm9udFJlZiwgY29uc3QgVVRGCiBib29sIENURm9udElzQXBwbGVDb2xv
ckVtb2ppKENURm9udFJlZik7CiBib29sIENURm9udERlc2NyaXB0b3JJc1N5c3RlbVVJRm9udChD
VEZvbnREZXNjcmlwdG9yUmVmKTsKIENURm9udFJlZiBDVEZvbnRDcmVhdGVGb3JDU1MoQ0ZTdHJp
bmdSZWYgbmFtZSwgdWludDE2X3Qgd2VpZ2h0LCBDVEZvbnRTeW1ib2xpY1RyYWl0cywgQ0dGbG9h
dCBzaXplKTsKK0NURm9udFJlZiBDVEZvbnRDcmVhdGVGb3JDaGFyYWN0ZXJzKENURm9udFJlZiBj
dXJyZW50Rm9udCwgY29uc3QgVVRGMTZDaGFyICpjaGFyYWN0ZXJzLCBDRkluZGV4IGxlbmd0aCwg
Q0ZJbmRleCAqY292ZXJlZExlbmd0aCk7CiAKIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGU5YjllOWIxZjc0MzE3Njdj
ZmJiZjM1YjJhMTYwOGFhY2Y3N2Y3ZmEuLmY1YWNmMzRkMzcyMDAzZmZmMzg1NmMzODFiOWFjZGM2
YjYxNjAyNDIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxNC0xMi0xMSAgTXlsZXMgQy4gTWF4
ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIENvZGVwb2ludHMg
bm90IGFzc29jaWF0ZWQgd2l0aCBsYW5ndWFnZXMgYXJlIGRyYXduIGFzIGJveGVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg5MDYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2lvcy1z
aW11bGF0b3IvZmFzdC90ZXh0L25vbi1sYW5ndWFnZS1mb250LWZhbGxiYWNrLWV4cGVjdGVkLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy1zaW11bGF0b3IvZmFzdC90ZXh0L25v
bi1sYW5ndWFnZS1mb250LWZhbGxiYWNrLmh0bWw6IEFkZGVkLgorCiAyMDE0LTEyLTExICBBbGV4
ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIGZhc3Qvd29ya2Vycy93
b3JrZXItY29uc3RydWN0b3IuaHRtbCBmcmVxdWVudGx5IGNyYXNoZXMKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2lvcy1zaW11bGF0b3IvZmFzdC90ZXh0L25vbi1sYW5ndWFnZS1m
b250LWZhbGxiYWNrLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3Mtc2lt
dWxhdG9yL2Zhc3QvdGV4dC9ub24tbGFuZ3VhZ2UtZm9udC1mYWxsYmFjay1leHBlY3RlZC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM1OTE0MWQ2MDlhODNiMjAwYWRmOTU1YzNhNjc2YWJmZDE0Y2EwMTYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3Mtc2ltdWxhdG9yL2Zhc3Qv
dGV4dC9ub24tbGFuZ3VhZ2UtZm9udC1mYWxsYmFjay1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEs
OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+CitU
aGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IGdseXBocyBub3QgYXNzb2NpYXRlZCB3aXRoIGEgcGFy
dGljdWxhciBsYW5ndWFnZSBoYXZlIGFuIGFwcHJvcHJpYXRlIGZvbnQgY2hvc2VuIGZvciB0aGVt
LgorPGRpdiBzdHlsZT0iZm9udC1zaXplOiAyNTZweDsgZm9udC1mYW1pbHk6IE1lbmxvLVJlZ3Vs
YXI7Ij4mI3gyNjFBOzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vaW9zLXNpbXVsYXRvci9mYXN0L3RleHQvbm9uLWxhbmd1YWdlLWZvbnQt
ZmFsbGJhY2suaHRtbCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy1zaW11bGF0b3IvZmFzdC90
ZXh0L25vbi1sYW5ndWFnZS1mb250LWZhbGxiYWNrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzhmOTNhOThh
NWIwZDZlOTNhNmIwZGQwM2YwZWU5ZTY4YzVlM2YwYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2lvcy1zaW11bGF0b3IvZmFzdC90ZXh0L25vbi1sYW5ndWFnZS1mb250
LWZhbGxiYWNrLmh0bWwKQEAgLTAsMCArMSw5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KK1RoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgZ2x5cGhz
IG5vdCBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIGxhbmd1YWdlIGhhdmUgYW4gYXBwcm9w
cmlhdGUgZm9udCBjaG9zZW4gZm9yIHRoZW0uCis8ZGl2IHN0eWxlPSJmb250LXNpemU6IDI1NnB4
OyI+JiN4MjYxQTs8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="268015"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>