<?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>167056</bug_id>
          
          <creation_ts>2017-01-14 13:41:33 -0800</creation_ts>
          <short_desc>[Cocoa] Unify font fallback between macOS and iOS for when the font-family list is exhausted</short_desc>
          <delta_ts>2017-01-22 22:37:12 -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>WebKit 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>
          
          <blocked>167068</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1266841</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-01-14 13:41:33 -0800</bug_when>
    <thetext>[Cocoa] Unify font fallback between macOS and iOS for when the font-family list is exhausted</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266846</commentid>
    <comment_count>1</comment_count>
      <attachid>298860</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-01-14 13:51:13 -0800</bug_when>
    <thetext>Created attachment 298860
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266875</commentid>
    <comment_count>2</comment_count>
      <attachid>298868</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-01-14 18:06:53 -0800</bug_when>
    <thetext>Created attachment 298868
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266906</commentid>
    <comment_count>3</comment_count>
      <attachid>298868</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-01-14 20:39:05 -0800</bug_when>
    <thetext>Comment on attachment 298868
Patch

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

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:880
&gt; +    RetainPtr&lt;CTFontRef&gt; result = adoptCF(CTFontCreateForCharactersWithLanguage(font, characters, length, localeString.get(), &amp;coveredLength));

This is one place where I really like auto. Like below when we do the CTFontCopyAttribute.

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:885
&gt; +    UChar32 c = *characters;
&gt; +    if (length &gt; 1 &amp;&amp; U16_IS_LEAD(c) &amp;&amp; U16_IS_TRAIL(characters[1]))
&gt; +        c = U16_GET_SUPPLEMENTARY(c, characters[1]);

This code is just something you are moving, but I have some thoughts on it.

This code assumes that length is not zero. We should assert that, I think, maybe at the top of the function.

I suggest we name this variable &quot;firstCharacter&quot; instead of &quot;c&quot;. But also, if we wanted to do this, we should use the ICU macro that exists for this whole operation instead of writing out the algorithm:

    UChar32 firstCharacter;
    U16_GET(characters, 0, 0, length, firstCharacter);

And further, the only thing we do with this character is check that it’s in the range 0x600-0x6FF, so there is no point on including all the surrogate logic. It can just be more like this:

    UChar firstCharacter = characters[0];

Could use a “why” comment about why it’s OK to only look at the first character.

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:887
&gt; +    // Arabic
&gt; +    if (c &gt;= 0x0600 &amp;&amp; c &lt;= 0x06ff) {

I personally prefer capitalized hex. Also might make this slightly more self documenting if we encapsulated this check in an isArabicCharacter function. We would not need that comment.

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:893
&gt; +            RetainPtr&lt;CFDictionaryRef&gt; attributes = adoptCF(CFDictionaryCreate(kCFAllocatorDefault, keys, values, WTF_ARRAY_LENGTH(keys), &amp;kCFTypeDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks));

auto here

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:894
&gt; +            RetainPtr&lt;CTFontDescriptorRef&gt; modification = adoptCF(CTFontDescriptorCreateWithAttributes(attributes.get()));

auto here

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:917
&gt; +    RetainPtr&lt;CTFontRef&gt; result = lookupFallbackFont(platformData.font(), description.weight(), description.locale(), characters, length);

auto here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266913</commentid>
    <comment_count>4</comment_count>
      <attachid>298884</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-01-14 21:18:27 -0800</bug_when>
    <thetext>Created attachment 298884
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266946</commentid>
    <comment_count>5</comment_count>
      <attachid>298884</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-15 00:24:39 -0800</bug_when>
    <thetext>Comment on attachment 298884
Patch for committing

Clearing flags on attachment: 298884

Committed r210776: &lt;http://trac.webkit.org/changeset/210776&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298860</attachid>
            <date>2017-01-14 13:51:13 -0800</date>
            <delta_ts>2017-01-14 18:06:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167056-20170114134942.patch</filename>
            <type>text/plain</type>
            <size>10392</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwNzY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTNkNDNkZmVjMjJlZjUz
ZGY4YzZiNzEwNzk2Yzg3OGRmNjkyNmVkNi4uNGQ5ZGQ1YzQ1YjMyYjE4NzQyZDUyYjQ2N2ViNDY0
MTVmNjQwMDU0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE3LTAxLTE0ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBV
bmlmeSBmb250IGZhbGxiYWNrIGJldHdlZW4gbWFjT1MgYW5kIGlPUyBmb3Igd2hlbiB0aGUgZm9u
dC1mYW1pbHkgbGlzdCBpcyBleGhhdXN0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NzA1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdoZW4gcGVyZm9ybWluZyBmb250IGZhbGxiYWNrLCBlYWNoIGl0
ZW0gaW4gdGhlIGZvbnQtZmFtaWx5IGxpc3QgaXMgZXhhbWluZWQuCisgICAgICAgIElmIG5vIGFw
cHJvcHJpYXRlIGZvbnRzIGFyZSBmb3VuZCwgV2ViS2l0IGFza3MgdGhlIHN5c3RlbSBmb3IgYW4g
YXBwcm9wcmlhdGUKKyAgICAgICAgZm9udC4gQXMgb2YgYSBmZXcgeWVhcnMgYWdvLCBib3RoIG1h
Y09TIGFuZCBpT1MgdXNlZCBwbGF0Zm9ybSBjYWxscyB0bworICAgICAgICBwcm9kdWNlIGEgZm9u
dDsgaG93ZXZlciwgZWFjaCBwbGF0Zm9ybSB1c2VkIGEgZGlmZmVyZW50IHBsYXRmb3JtIGNhbGwu
IFRoaXMKKyAgICAgICAgcGF0Y2ggbWlncmF0ZXMgYm90aCBwbGF0Zm9ybXMgdG8gdXNlIGEgc2hh
cmVkIGZ1bmN0aW9uIHdoaWNoIHVzZXMgb25seQorICAgICAgICBvbmUgb2YgdGhlIHBsYXRmb3Jt
IGNhbGxzICh3aGljaCBtZWFucyB0aGUgb3RoZXIgcGxhdGZvcm0gY2FsbCBpcyBuZXZlciB1c2Vk
KS4gCisKKyAgICAgICAgVGhlcmUgYXJlIHN0aWxsIHNvbWUgYmVoYXZpb3IgZGlmZmVyZW5jZXMg
YmV0d2VlbiBtYWNPUyBhbmQgaU9TICh3aGljaCBhcmUgbm93CisgICAgICAgIGhpZGRlbiBiZWhp
bmQgYSBQTEFURk9STSgpIGd1YXJkKSwgYnV0IEknZCBsaWtlIHRvIG1pbmltaXplIGFuZCBlbGlt
aW5hdGUgdGhlc2UKKyAgICAgICAgaW4gdGhlIGZ1dHVyZS4gVXNpbmcgYSBzaGFyZWQgZnVuY3Rp
b24gaXMgYSBzdGVwIHRvd2FyZCB0aGlzIGdvYWwuIAorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBi
ZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRDYWNoZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omxvb2t1cEZhbGxiYWNr
Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hh
cmFjdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OmdldFN5c3RlbUZvbnRGYWxsYmFja0ZvckNoYXJhY3RlcnMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1Mb29rdXBGYWxsYmFja0ZvbnQp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpwbGF0Zm9ybUxvb2t1cEZhbGxiYWNrRm9udCk6IERlbGV0
ZWQuCisKIDIwMTctMDEtMTQgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZW5kZXJlcnMgc2hvdWxkIGhhdmUgYSBzaW1wbGUgd2F5IHRvIGFjY2VzcyBTZXR0aW5n
cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKaW5kZXgg
YWY0OGIwYjkyNDJjNTk3MDBlZWViMzYyY2FiNmUwM2U1YWY2ZDI1ZS4uY2IwNGE0NTg1ZjQ4NzMy
MDE2OWM1Yjk1NGY0NzZhMWYwZWUxZmZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTI3Niw3ICsyNzYsNiBAQCB2b2lkIHBsYXRmb3JtSW52
YWxpZGF0ZUZvbnRDYWNoZSgpOwogU3ludGhlc2lzUGFpciBjb21wdXRlTmVjZXNzYXJ5U3ludGhl
c2lzKENURm9udFJlZiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBpc1BsYXRmb3JtRm9u
dCA9IGZhbHNlKTsKIFJldGFpblB0cjxDVEZvbnRSZWY+IHBsYXRmb3JtRm9udFdpdGhGYW1pbHlT
cGVjaWFsQ2FzZShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgRm9udFdlaWdodCwgQ1RGb250
U3ltYm9saWNUcmFpdHMsIGZsb2F0IHNpemUpOwogUmV0YWluUHRyPENURm9udFJlZj4gcGxhdGZv
cm1Gb250V2l0aEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgQ1RGb250U3ltYm9s
aWNUcmFpdHMsIEZvbnRXZWlnaHQsIFRleHRSZW5kZXJpbmdNb2RlLCBmbG9hdCBzaXplKTsKLVJl
dGFpblB0cjxDVEZvbnRSZWY+IHBsYXRmb3JtTG9va3VwRmFsbGJhY2tGb250KENURm9udFJlZiwg
Rm9udFdlaWdodCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUsIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpOwogYm9vbCByZXF1aXJlc0N1c3RvbUZhbGxiYWNrRm9u
dChVQ2hhcjMyIGNoYXJhY3Rlcik7CiAKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKaW5k
ZXggNDM3Y2Q3YjlmZjE3MDFlZWY2NTUzZWVjNDQzZGI4NjUwMjRhYzIwNy4uZGJkM2YyZTA3Mzgy
MjI4YmExM2ViMmZhZmY4YTEwN2U3NGQ3NzZhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcApA
QCAtODY2LDYgKzg2Niw0MCBAQCB2b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1QdXJnZUluYWN0aXZl
Rm9udERhdGEoKQogICAgICAgICBmYWxsYmFja0RlZHVwU2V0KCkucmVtb3ZlKGZvbnQpOwogfQog
CitzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gbG9va3VwRmFsbGJhY2tGb250KENURm9udFJl
ZiBmb250LCBGb250V2VpZ2h0IGZvbnRXZWlnaHQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxl
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gbG9jYWxlU3RyaW5nOworI2lmIChQTEFURk9STShJT1MpICYmIF9f
SVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMDAwMCkgfHwgKFBMQVRGT1JNKE1B
QykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDApCisgICAgaWYg
KCFsb2NhbGUuaXNOdWxsKCkpCisgICAgICAgIGxvY2FsZVN0cmluZyA9IGxvY2FsZS5zdHJpbmco
KS5jcmVhdGVDRlN0cmluZygpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0obG9jYWxlKTsKKyNl
bmRpZgorCisgICAgQ0ZJbmRleCBjb3ZlcmVkTGVuZ3RoID0gMDsKKyAgICBSZXRhaW5QdHI8Q1RG
b250UmVmPiByZXN1bHQgPSBhZG9wdENGKENURm9udENyZWF0ZUZvckNoYXJhY3RlcnNXaXRoTGFu
Z3VhZ2UoZm9udCwgY2hhcmFjdGVycywgbGVuZ3RoLCBsb2NhbGVTdHJpbmcuZ2V0KCksICZjb3Zl
cmVkTGVuZ3RoKSk7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgVUNoYXIzMiBjID0gKmNoYXJh
Y3RlcnM7CisgICAgaWYgKGxlbmd0aCA+IDEgJiYgVTE2X0lTX0xFQUQoYykgJiYgVTE2X0lTX1RS
QUlMKGNoYXJhY3RlcnNbMV0pKQorICAgICAgICBjID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGMs
IGNoYXJhY3RlcnNbMV0pOworICAgIC8vIEFyYWJpYworICAgIGlmIChjID49IDB4MDYwMCAmJiBj
IDw9IDB4MDZmZikgeworICAgICAgICBhdXRvIGZhbWlseU5hbWUgPSBhZG9wdENGKHN0YXRpY19j
YXN0PENGU3RyaW5nUmVmPihDVEZvbnRDb3B5QXR0cmlidXRlKHJlc3VsdC5nZXQoKSwga0NURm9u
dEZhbWlseU5hbWVBdHRyaWJ1dGUpKSk7CisgICAgICAgIGlmIChmb250RmFtaWx5U2hvdWxkTm90
QmVVc2VkRm9yQXJhYmljKGZhbWlseU5hbWUuZ2V0KCkpKSB7CisgICAgICAgICAgICBDRlN0cmlu
Z1JlZiBuZXdGYW1pbHlOYW1lID0gaXNGb250V2VpZ2h0Qm9sZChmb250V2VpZ2h0KSA/IENGU1RS
KCJHZWV6YVByby1Cb2xkIikgOiBDRlNUUigiR2VlemFQcm8iKTsKKyAgICAgICAgICAgIENGVHlw
ZVJlZiBrZXlzW10gPSB7IGtDVEZvbnROYW1lQXR0cmlidXRlIH07CisgICAgICAgICAgICBDRlR5
cGVSZWYgdmFsdWVzW10gPSB7IG5ld0ZhbWlseU5hbWUgfTsKKyAgICAgICAgICAgIFJldGFpblB0
cjxDRkRpY3Rpb25hcnlSZWY+IGF0dHJpYnV0ZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5
cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFs
dWVDYWxsQmFja3MpKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVm
PiBtb2RpZmljYXRpb24gPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoQXR0cmli
dXRlcyhhdHRyaWJ1dGVzLmdldCgpKSk7CisgICAgICAgICAgICByZXN1bHQgPSBhZG9wdENGKENU
Rm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhyZXN1bHQuZ2V0KCksIENURm9udEdldFNpemUo
cmVzdWx0LmdldCgpKSwgbnVsbHB0ciwgbW9kaWZpY2F0aW9uLmdldCgpKSk7CisgICAgICAgIH0K
KyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFJlZlB0cjxGb250PiBG
b250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBib29sIGlzUGxh
dGZvcm1Gb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogewog
I2lmIFBMQVRGT1JNKElPUykKQEAgLTg3OCw3ICs5MTIsNyBAQCBSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBk
ZXNjcgogI2VuZGlmCiAKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEg
PSBvcmlnaW5hbEZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKTsKLSAgICBSZXRhaW5QdHI8Q1RGb250
UmVmPiByZXN1bHQgPSBwbGF0Zm9ybUxvb2t1cEZhbGxiYWNrRm9udChwbGF0Zm9ybURhdGEuZm9u
dCgpLCBkZXNjcmlwdGlvbi53ZWlnaHQoKSwgZGVzY3JpcHRpb24ubG9jYWxlKCksIGNoYXJhY3Rl
cnMsIGxlbmd0aCk7CisgICAgUmV0YWluUHRyPENURm9udFJlZj4gcmVzdWx0ID0gbG9va3VwRmFs
bGJhY2tGb250KHBsYXRmb3JtRGF0YS5mb250KCksIGRlc2NyaXB0aW9uLndlaWdodCgpLCBkZXNj
cmlwdGlvbi5sb2NhbGUoKSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKICAgICByZXN1bHQgPSBwcmVw
YXJlUGxhdGZvcm1Gb250KHJlc3VsdC5nZXQoKSwgZGVzY3JpcHRpb24udGV4dFJlbmRlcmluZ01v
ZGUoKSwgbnVsbHB0ciwgbnVsbHB0ciwgZGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCksIGRl
c2NyaXB0aW9uLnZhcmlhbnRTZXR0aW5ncygpLCBkZXNjcmlwdGlvbi52YXJpYXRpb25TZXR0aW5n
cygpKTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGxhc3RSZXNvcnRGYWxsYmFj
a0ZvbnQoZGVzY3JpcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0KaW5kZXggNGRhMTQyMjlkYjVjNjI3NzU2ZTBiOGYw
OTNhYTgxOTFlM2QyMWY2MC4uNjlhNDU1ZGJhNWUyODQzNDQyNWJiOWJmNjY5NWNlMGMwNmQ5MjM3
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRD
YWNoZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9u
dENhY2hlSU9TLm1tCkBAIC03OCw0NiArNzgsNiBAQCBGb250UGxhdGZvcm1EYXRhKiBGb250Q2Fj
aGU6OmdldEN1c3RvbUZhbGxiYWNrRm9udChjb25zdCBVSW50MzIgYywgY29uc3QgRm9udERlcwog
ICAgIHJldHVybiBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uLCAqZmFtaWx5
KTsKIH0KIAotc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGdldFN5c3RlbUZvbnRGYWxsYmFj
a0ZvckNoYXJhY3RlcnMoQ1RGb250UmVmIGZvbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxl
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIC8vIEZJ
WE1FOiBVbmlmeSB0aGlzIHdpdGggcGxhdGZvcm1Mb29rdXBGYWxsYmFja0ZvbnQoKQotICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gbG9jYWxlU3RyaW5nOwotICAgIGlmICghbG9jYWxlLmlzTnVs
bCgpKQotICAgICAgICBsb2NhbGVTdHJpbmcgPSBsb2NhbGUuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJp
bmcoKTsKLQotICAgIENGSW5kZXggY292ZXJlZExlbmd0aCA9IDA7Ci0gICAgcmV0dXJuIGFkb3B0
Q0YoQ1RGb250Q3JlYXRlUGh5c2ljYWxGb250Rm9yQ2hhcmFjdGVyc1dpdGhMYW5ndWFnZShmb250
LCAoY29uc3QgVVRGMTZDaGFyKiljaGFyYWN0ZXJzLCAoQ0ZJbmRleClsZW5ndGgsIGxvY2FsZVN0
cmluZy5nZXQoKSwgJmNvdmVyZWRMZW5ndGgpKTsKLX0KLQotUmV0YWluUHRyPENURm9udFJlZj4g
cGxhdGZvcm1Mb29rdXBGYWxsYmFja0ZvbnQoQ1RGb250UmVmIGZvbnQsIEZvbnRXZWlnaHQgZm9u
dFdlaWdodCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUsIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgLy8gRm9yIHN5c3RlbSBmb250cyB3ZSB1c2Ug
Q29yZVRleHQgZmFsbGJhY2sgbWVjaGFuaXNtLgotICAgIGlmIChsZW5ndGggJiYgQ1RGb250RGVz
Y3JpcHRvcklzU3lzdGVtVUlGb250KGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKGZv
bnQpKS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBnZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFy
YWN0ZXJzKGZvbnQsIGxvY2FsZSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKLQotICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gbG9jYWxlU3RyaW5nOwotI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwMDAwMAotICAgIGlmICghbG9jYWxlLmlzTnVsbCgpKQotICAgICAgICBs
b2NhbGVTdHJpbmcgPSBsb2NhbGUuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSNlbmRpZgot
ICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmYWxsYmFja0ZvbnREZXNjcmlwdG9y
ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVQaHlzaWNhbEZvbnREZXNjcmlwdG9yRm9yQ2hhcmFjdGVy
c1dpdGhMYW5ndWFnZShmb250LCBjaGFyYWN0ZXJzLCBsZW5ndGgsIGxvY2FsZVN0cmluZy5nZXQo
KSwgbnVsbHB0cikpOwotICAgIFVDaGFyMzIgYyA9ICpjaGFyYWN0ZXJzOwotICAgIGlmIChsZW5n
dGggPiAxICYmIFUxNl9JU19MRUFEKGMpICYmIFUxNl9JU19UUkFJTChjaGFyYWN0ZXJzWzFdKSkK
LSAgICAgICAgYyA9IFUxNl9HRVRfU1VQUExFTUVOVEFSWShjLCBjaGFyYWN0ZXJzWzFdKTsKLSAg
ICAvLyBBcmFiaWMKLSAgICBpZiAoYyA+PSAweDA2MDAgJiYgYyA8PSAweDA2ZmYpIHsKLSAgICAg
ICAgYXV0byBmYW1pbHlOYW1lID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oQ1RG
b250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZmFsbGJhY2tGb250RGVzY3JpcHRvci5nZXQoKSwg
a0NURm9udEZhbWlseU5hbWVBdHRyaWJ1dGUpKSk7Ci0gICAgICAgIGlmIChmb250RmFtaWx5U2hv
dWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbWlseU5hbWUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBD
RlN0cmluZ1JlZiBuZXdGYW1pbHlOYW1lID0gaXNGb250V2VpZ2h0Qm9sZChmb250V2VpZ2h0KSA/
IENGU1RSKCJHZWV6YVByby1Cb2xkIikgOiBDRlNUUigiR2VlemFQcm8iKTsKLSAgICAgICAgICAg
IENGVHlwZVJlZiBrZXlzW10gPSB7IGtDVEZvbnROYW1lQXR0cmlidXRlIH07Ci0gICAgICAgICAg
ICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IG5ld0ZhbWlseU5hbWUgfTsKLSAgICAgICAgICAgIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGF0dHJpYnV0ZXMgPSBhZG9wdENGKENGRGljdGlvbmFy
eUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJBWV9MRU5H
VEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9u
YXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICAgICAgICAgIGZhbGxiYWNrRm9udERlc2NyaXB0b3Ig
PSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVDb3B5V2l0aEF0dHJpYnV0ZXMoZmFsbGJh
Y2tGb250RGVzY3JpcHRvci5nZXQoKSwgYXR0cmlidXRlcy5nZXQoKSkpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBhZG9wdENGKENURm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihm
YWxsYmFja0ZvbnREZXNjcmlwdG9yLmdldCgpLCBDVEZvbnRHZXRTaXplKGZvbnQpLCBudWxscHRy
KSk7Ci19Ci0KIFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCiB7CiAgICAgcmV0dXJuICpmb250
Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgQXRvbWljU3RyaW5nKCIuUGhvbmVGYWxsYmFjayIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCmluZGV4IDNmMDZl
ZGQwMGM1OWE4ZTM3NjFlMTMzMjFhOTE4MTZmYmU4NGNkYTYuLjk3ODI3NzNlZTlkYjdiMTQxODU2
NWViYjBlZDUzNGI2ZWU3MWUyNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQpAQCAtMzc2LDIwICszNzYsNiBAQCB2b2lk
IHBsYXRmb3JtSW52YWxpZGF0ZUZvbnRDYWNoZSgpCiAjZW5kaWYKIH0KIAotUmV0YWluUHRyPENU
Rm9udFJlZj4gcGxhdGZvcm1Mb29rdXBGYWxsYmFja0ZvbnQoQ1RGb250UmVmIGZvbnQsIEZvbnRX
ZWlnaHQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlLCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbG9jYWxl
U3RyaW5nOwotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDExMDAKLSAg
ICBpZiAoIWxvY2FsZS5pc051bGwoKSkKLSAgICAgICAgbG9jYWxlU3RyaW5nID0gbG9jYWxlLnN0
cmluZygpLmNyZWF0ZUNGU3RyaW5nKCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShsb2NhbGUp
OwotI2VuZGlmCi0KLSAgICBDRkluZGV4IGNvdmVyZWRMZW5ndGggPSAwOwotICAgIHJldHVybiBh
ZG9wdENGKENURm9udENyZWF0ZUZvckNoYXJhY3RlcnNXaXRoTGFuZ3VhZ2UoZm9udCwgY2hhcmFj
dGVycywgbGVuZ3RoLCBsb2NhbGVTdHJpbmcuZ2V0KCksICZjb3ZlcmVkTGVuZ3RoKSk7Ci19Ci0K
IFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCiB7CiAgICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2
ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuICBG
b3Igbm93IHdlJ2xsIHBpY2sK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298868</attachid>
            <date>2017-01-14 18:06:53 -0800</date>
            <delta_ts>2017-01-14 20:39:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167056-20170114180513.patch</filename>
            <type>text/plain</type>
            <size>10408</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwNzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTQxOTRlNjQ2MmViZmMx
OWRlNTYxM2FhOTcxOGQ3YzNhYThkMjA1ZS4uMTc2NzUyNjJiNDdkYTk0YzM5NGI5YWU3NDYwNDkw
NzJhOTdiYTM1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE3LTAxLTE0ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBV
bmlmeSBmb250IGZhbGxiYWNrIGJldHdlZW4gbWFjT1MgYW5kIGlPUyBmb3Igd2hlbiB0aGUgZm9u
dC1mYW1pbHkgbGlzdCBpcyBleGhhdXN0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NzA1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdoZW4gcGVyZm9ybWluZyBmb250IGZhbGxiYWNrLCBlYWNoIGl0
ZW0gaW4gdGhlIGZvbnQtZmFtaWx5IGxpc3QgaXMgZXhhbWluZWQuCisgICAgICAgIElmIG5vIGFw
cHJvcHJpYXRlIGZvbnRzIGFyZSBmb3VuZCwgV2ViS2l0IGFza3MgdGhlIHN5c3RlbSBmb3IgYW4g
YXBwcm9wcmlhdGUKKyAgICAgICAgZm9udC4gQXMgb2YgYSBmZXcgeWVhcnMgYWdvLCBib3RoIG1h
Y09TIGFuZCBpT1MgdXNlZCBwbGF0Zm9ybSBjYWxscyB0bworICAgICAgICBwcm9kdWNlIGEgZm9u
dDsgaG93ZXZlciwgZWFjaCBwbGF0Zm9ybSB1c2VkIGEgZGlmZmVyZW50IHBsYXRmb3JtIGNhbGwu
IFRoaXMKKyAgICAgICAgcGF0Y2ggbWlncmF0ZXMgYm90aCBwbGF0Zm9ybXMgdG8gdXNlIGEgc2hh
cmVkIGZ1bmN0aW9uIHdoaWNoIHVzZXMgb25seQorICAgICAgICBvbmUgb2YgdGhlIHBsYXRmb3Jt
IGNhbGxzICh3aGljaCBtZWFucyB0aGUgb3RoZXIgcGxhdGZvcm0gY2FsbCBpcyBuZXZlciB1c2Vk
KS4gCisKKyAgICAgICAgVGhlcmUgYXJlIHN0aWxsIHNvbWUgYmVoYXZpb3IgZGlmZmVyZW5jZXMg
YmV0d2VlbiBtYWNPUyBhbmQgaU9TICh3aGljaCBhcmUgbm93CisgICAgICAgIGhpZGRlbiBiZWhp
bmQgYSBQTEFURk9STSgpIGd1YXJkKSwgYnV0IEknZCBsaWtlIHRvIG1pbmltaXplIGFuZCBlbGlt
aW5hdGUgdGhlc2UKKyAgICAgICAgaW4gdGhlIGZ1dHVyZS4gVXNpbmcgYSBzaGFyZWQgZnVuY3Rp
b24gaXMgYSBzdGVwIHRvd2FyZCB0aGlzIGdvYWwuIAorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBi
ZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRDYWNoZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omxvb2t1cEZhbGxiYWNr
Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hh
cmFjdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OmdldFN5c3RlbUZvbnRGYWxsYmFja0ZvckNoYXJhY3RlcnMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1Mb29rdXBGYWxsYmFja0ZvbnQp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpwbGF0Zm9ybUxvb2t1cEZhbGxiYWNrRm9udCk6IERlbGV0
ZWQuCisKIDIwMTctMDEtMTQgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBTbWFsbCBjb2RlIGNsZWFudXAgYWZ0ZXIgcjIxMDc2MApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAppbmRleCBhZjQ4YjBiOTI0MmM1OTcwMGVlZWIz
NjJjYWI2ZTAzZTVhZjZkMjVlLi5jYjA0YTQ1ODVmNDg3MzIwMTY5YzViOTU0ZjQ3NmExZjBlZTFm
ZmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fj
aGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaApA
QCAtMjc2LDcgKzI3Niw2IEBAIHZvaWQgcGxhdGZvcm1JbnZhbGlkYXRlRm9udENhY2hlKCk7CiBT
eW50aGVzaXNQYWlyIGNvbXB1dGVOZWNlc3NhcnlTeW50aGVzaXMoQ1RGb250UmVmLCBjb25zdCBG
b250RGVzY3JpcHRpb24mLCBib29sIGlzUGxhdGZvcm1Gb250ID0gZmFsc2UpOwogUmV0YWluUHRy
PENURm9udFJlZj4gcGxhdGZvcm1Gb250V2l0aEZhbWlseVNwZWNpYWxDYXNlKGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5LCBGb250V2VpZ2h0LCBDVEZvbnRTeW1ib2xpY1RyYWl0cywgZmxvYXQg
c2l6ZSk7CiBSZXRhaW5QdHI8Q1RGb250UmVmPiBwbGF0Zm9ybUZvbnRXaXRoRmFtaWx5KGNvbnN0
IEF0b21pY1N0cmluZyYgZmFtaWx5LCBDVEZvbnRTeW1ib2xpY1RyYWl0cywgRm9udFdlaWdodCwg
VGV4dFJlbmRlcmluZ01vZGUsIGZsb2F0IHNpemUpOwotUmV0YWluUHRyPENURm9udFJlZj4gcGxh
dGZvcm1Mb29rdXBGYWxsYmFja0ZvbnQoQ1RGb250UmVmLCBGb250V2VpZ2h0LCBjb25zdCBBdG9t
aWNTdHJpbmcmIGxvY2FsZSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0
aCk7CiBib29sIHJlcXVpcmVzQ3VzdG9tRmFsbGJhY2tGb250KFVDaGFyMzIgY2hhcmFjdGVyKTsK
IAogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAppbmRleCA0MzdjZDdiOWZmMTcwMWVlZjY1
NTNlZWM0NDNkYjg2NTAyNGFjMjA3Li45ZTdiYTE5OGRhZjkxM2EzM2QwZjUzNDdhZjllNjAxYzNj
NjI4NTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCkBAIC04NjYsNiArODY2LDQyIEBAIHZv
aWQgRm9udENhY2hlOjpwbGF0Zm9ybVB1cmdlSW5hY3RpdmVGb250RGF0YSgpCiAgICAgICAgIGZh
bGxiYWNrRGVkdXBTZXQoKS5yZW1vdmUoZm9udCk7CiB9CiAKK3N0YXRpYyBSZXRhaW5QdHI8Q1RG
b250UmVmPiBsb29rdXBGYWxsYmFja0ZvbnQoQ1RGb250UmVmIGZvbnQsIEZvbnRXZWlnaHQgZm9u
dFdlaWdodCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUsIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBsb2Nh
bGVTdHJpbmc7CisjaWYgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTAwMDAwKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEID49IDEwMTIwMCkKKyAgICBpZiAoIWxvY2FsZS5pc051bGwoKSkKKyAg
ICAgICAgbG9jYWxlU3RyaW5nID0gbG9jYWxlLnN0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShsb2NhbGUpOworI2VuZGlmCisKKyAgICBDRkluZGV4IGNv
dmVyZWRMZW5ndGggPSAwOworICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IHJlc3VsdCA9IGFkb3B0
Q0YoQ1RGb250Q3JlYXRlRm9yQ2hhcmFjdGVyc1dpdGhMYW5ndWFnZShmb250LCBjaGFyYWN0ZXJz
LCBsZW5ndGgsIGxvY2FsZVN0cmluZy5nZXQoKSwgJmNvdmVyZWRMZW5ndGgpKTsKKworI2lmIFBM
QVRGT1JNKElPUykKKyAgICBVQ2hhcjMyIGMgPSAqY2hhcmFjdGVyczsKKyAgICBpZiAobGVuZ3Ro
ID4gMSAmJiBVMTZfSVNfTEVBRChjKSAmJiBVMTZfSVNfVFJBSUwoY2hhcmFjdGVyc1sxXSkpCisg
ICAgICAgIGMgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoYywgY2hhcmFjdGVyc1sxXSk7CisgICAg
Ly8gQXJhYmljCisgICAgaWYgKGMgPj0gMHgwNjAwICYmIGMgPD0gMHgwNmZmKSB7CisgICAgICAg
IGF1dG8gZmFtaWx5TmFtZSA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENURm9u
dENvcHlBdHRyaWJ1dGUocmVzdWx0LmdldCgpLCBrQ1RGb250RmFtaWx5TmFtZUF0dHJpYnV0ZSkp
KTsKKyAgICAgICAgaWYgKGZvbnRGYW1pbHlTaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoZmFtaWx5
TmFtZS5nZXQoKSkpIHsKKyAgICAgICAgICAgIENGU3RyaW5nUmVmIG5ld0ZhbWlseU5hbWUgPSBp
c0ZvbnRXZWlnaHRCb2xkKGZvbnRXZWlnaHQpID8gQ0ZTVFIoIkdlZXphUHJvLUJvbGQiKSA6IENG
U1RSKCJHZWV6YVBybyIpOworICAgICAgICAgICAgQ0ZUeXBlUmVmIGtleXNbXSA9IHsga0NURm9u
dE5hbWVBdHRyaWJ1dGUgfTsKKyAgICAgICAgICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsgbmV3
RmFtaWx5TmFtZSB9OworICAgICAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gYXR0
cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChrZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5
S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgICAg
ICAgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IG1vZGlmaWNhdGlvbiA9IGFkb3B0
Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMuZ2V0KCkp
KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRy
aWJ1dGVzKHJlc3VsdC5nZXQoKSwgQ1RGb250R2V0U2l6ZShyZXN1bHQuZ2V0KCkpLCBudWxscHRy
LCBtb2RpZmljYXRpb24uZ2V0KCkpKTsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGZvbnRXZWlnaHQpOworI2VuZGlmCisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CiBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udCogb3JpZ2luYWxGb250
RGF0YSwgYm9vbCBpc1BsYXRmb3JtRm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCkKIHsKICNpZiBQTEFURk9STShJT1MpCkBAIC04NzgsNyArOTE0LDcgQEAgUmVm
UHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3IKICNlbmRpZgogCiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgcGxhdGZvcm1EYXRhID0gb3JpZ2luYWxGb250RGF0YS0+cGxhdGZvcm1EYXRhKCk7Ci0gICAg
UmV0YWluUHRyPENURm9udFJlZj4gcmVzdWx0ID0gcGxhdGZvcm1Mb29rdXBGYWxsYmFja0ZvbnQo
cGxhdGZvcm1EYXRhLmZvbnQoKSwgZGVzY3JpcHRpb24ud2VpZ2h0KCksIGRlc2NyaXB0aW9uLmxv
Y2FsZSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IHJl
c3VsdCA9IGxvb2t1cEZhbGxiYWNrRm9udChwbGF0Zm9ybURhdGEuZm9udCgpLCBkZXNjcmlwdGlv
bi53ZWlnaHQoKSwgZGVzY3JpcHRpb24ubG9jYWxlKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAg
ICAgcmVzdWx0ID0gcHJlcGFyZVBsYXRmb3JtRm9udChyZXN1bHQuZ2V0KCksIGRlc2NyaXB0aW9u
LnRleHRSZW5kZXJpbmdNb2RlKCksIG51bGxwdHIsIG51bGxwdHIsIGRlc2NyaXB0aW9uLmZlYXR1
cmVTZXR0aW5ncygpLCBkZXNjcmlwdGlvbi52YXJpYW50U2V0dGluZ3MoKSwgZGVzY3JpcHRpb24u
dmFyaWF0aW9uU2V0dGluZ3MoKSk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBs
YXN0UmVzb3J0RmFsbGJhY2tGb250KGRlc2NyaXB0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCmluZGV4IDRkYTE0MjI5
ZGI1YzYyNzc1NmUwYjhmMDkzYWE4MTkxZTNkMjFmNjAuLjY5YTQ1NWRiYTVlMjg0MzQ0MjViYjli
ZjY2OTVjZTBjMDZkOTIzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQpAQCAtNzgsNDYgKzc4LDYgQEAgRm9udFBsYXRm
b3JtRGF0YSogRm9udENhY2hlOjpnZXRDdXN0b21GYWxsYmFja0ZvbnQoY29uc3QgVUludDMyIGMs
IGNvbnN0IEZvbnREZXMKICAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShkZXNj
cmlwdGlvbiwgKmZhbWlseSk7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBnZXRT
eXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKENURm9udFJlZiBmb250LCBjb25zdCBBdG9t
aWNTdHJpbmcmIGxvY2FsZSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0
aCkKLXsKLSAgICAvLyBGSVhNRTogVW5pZnkgdGhpcyB3aXRoIHBsYXRmb3JtTG9va3VwRmFsbGJh
Y2tGb250KCkKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGxvY2FsZVN0cmluZzsKLSAgICBp
ZiAoIWxvY2FsZS5pc051bGwoKSkKLSAgICAgICAgbG9jYWxlU3RyaW5nID0gbG9jYWxlLnN0cmlu
ZygpLmNyZWF0ZUNGU3RyaW5nKCk7Ci0KLSAgICBDRkluZGV4IGNvdmVyZWRMZW5ndGggPSAwOwot
ICAgIHJldHVybiBhZG9wdENGKENURm9udENyZWF0ZVBoeXNpY2FsRm9udEZvckNoYXJhY3RlcnNX
aXRoTGFuZ3VhZ2UoZm9udCwgKGNvbnN0IFVURjE2Q2hhciopY2hhcmFjdGVycywgKENGSW5kZXgp
bGVuZ3RoLCBsb2NhbGVTdHJpbmcuZ2V0KCksICZjb3ZlcmVkTGVuZ3RoKSk7Ci19Ci0KLVJldGFp
blB0cjxDVEZvbnRSZWY+IHBsYXRmb3JtTG9va3VwRmFsbGJhY2tGb250KENURm9udFJlZiBmb250
LCBGb250V2VpZ2h0IGZvbnRXZWlnaHQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlLCBjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIC8vIEZvciBzeXN0
ZW0gZm9udHMgd2UgdXNlIENvcmVUZXh0IGZhbGxiYWNrIG1lY2hhbmlzbS4KLSAgICBpZiAobGVu
Z3RoICYmIENURm9udERlc2NyaXB0b3JJc1N5c3RlbVVJRm9udChhZG9wdENGKENURm9udENvcHlG
b250RGVzY3JpcHRvcihmb250KSkuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZ2V0U3lzdGVtRm9u
dEZhbGxiYWNrRm9yQ2hhcmFjdGVycyhmb250LCBsb2NhbGUsIGNoYXJhY3RlcnMsIGxlbmd0aCk7
Ci0KLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGxvY2FsZVN0cmluZzsKLSNpZiBfX0lQSE9O
RV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDAwMDAKLSAgICBpZiAoIWxvY2FsZS5pc051
bGwoKSkKLSAgICAgICAgbG9jYWxlU3RyaW5nID0gbG9jYWxlLnN0cmluZygpLmNyZWF0ZUNGU3Ry
aW5nKCk7Ci0jZW5kaWYKLSAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZmFsbGJh
Y2tGb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlUGh5c2ljYWxGb250RGVzY3Jp
cHRvckZvckNoYXJhY3RlcnNXaXRoTGFuZ3VhZ2UoZm9udCwgY2hhcmFjdGVycywgbGVuZ3RoLCBs
b2NhbGVTdHJpbmcuZ2V0KCksIG51bGxwdHIpKTsKLSAgICBVQ2hhcjMyIGMgPSAqY2hhcmFjdGVy
czsKLSAgICBpZiAobGVuZ3RoID4gMSAmJiBVMTZfSVNfTEVBRChjKSAmJiBVMTZfSVNfVFJBSUwo
Y2hhcmFjdGVyc1sxXSkpCi0gICAgICAgIGMgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoYywgY2hh
cmFjdGVyc1sxXSk7Ci0gICAgLy8gQXJhYmljCi0gICAgaWYgKGMgPj0gMHgwNjAwICYmIGMgPD0g
MHgwNmZmKSB7Ci0gICAgICAgIGF1dG8gZmFtaWx5TmFtZSA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8
Q0ZTdHJpbmdSZWY+KENURm9udERlc2NyaXB0b3JDb3B5QXR0cmlidXRlKGZhbGxiYWNrRm9udERl
c2NyaXB0b3IuZ2V0KCksIGtDVEZvbnRGYW1pbHlOYW1lQXR0cmlidXRlKSkpOwotICAgICAgICBp
ZiAoZm9udEZhbWlseVNob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhmYW1pbHlOYW1lLmdldCgpKSkg
ewotICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgbmV3RmFtaWx5TmFtZSA9IGlzRm9udFdlaWdodEJv
bGQoZm9udFdlaWdodCkgPyBDRlNUUigiR2VlemFQcm8tQm9sZCIpIDogQ0ZTVFIoIkdlZXphUHJv
Iik7Ci0gICAgICAgICAgICBDRlR5cGVSZWYga2V5c1tdID0geyBrQ1RGb250TmFtZUF0dHJpYnV0
ZSB9OwotICAgICAgICAgICAgQ0ZUeXBlUmVmIHZhbHVlc1tdID0geyBuZXdGYW1pbHlOYW1lIH07
Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBhdHRyaWJ1dGVzID0gYWRv
cHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVz
LCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3Ms
ICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgICAgICAgICBmYWxsYmFj
a0ZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlQ29weVdpdGhB
dHRyaWJ1dGVzKGZhbGxiYWNrRm9udERlc2NyaXB0b3IuZ2V0KCksIGF0dHJpYnV0ZXMuZ2V0KCkp
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRo
Rm9udERlc2NyaXB0b3IoZmFsbGJhY2tGb250RGVzY3JpcHRvci5nZXQoKSwgQ1RGb250R2V0U2l6
ZShmb250KSwgbnVsbHB0cikpOwotfQotCiBSZWY8Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0
RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQogewog
ICAgIHJldHVybiAqZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIEF0b21pY1N0cmluZygi
LlBob25lRmFsbGJhY2siLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hl
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1h
Yy5tbQppbmRleCAzZjA2ZWRkMDBjNTlhOGUzNzYxZTEzMzIxYTkxODE2ZmJlODRjZGE2Li45Nzgy
NzczZWU5ZGI3YjE0MTg1NjVlYmIwZWQ1MzRiNmVlNzFlMjY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0KQEAgLTM3Niwy
MCArMzc2LDYgQEAgdm9pZCBwbGF0Zm9ybUludmFsaWRhdGVGb250Q2FjaGUoKQogI2VuZGlmCiB9
CiAKLVJldGFpblB0cjxDVEZvbnRSZWY+IHBsYXRmb3JtTG9va3VwRmFsbGJhY2tGb250KENURm9u
dFJlZiBmb250LCBGb250V2VpZ2h0LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSwgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IGxvY2FsZVN0cmluZzsKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID4gMTAxMTAwCi0gICAgaWYgKCFsb2NhbGUuaXNOdWxsKCkpCi0gICAgICAgIGxvY2FsZVN0
cmluZyA9IGxvY2FsZS5zdHJpbmcoKS5jcmVhdGVDRlN0cmluZygpOwotI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0obG9jYWxlKTsKLSNlbmRpZgotCi0gICAgQ0ZJbmRleCBjb3ZlcmVkTGVuZ3RoID0g
MDsKLSAgICByZXR1cm4gYWRvcHRDRihDVEZvbnRDcmVhdGVGb3JDaGFyYWN0ZXJzV2l0aExhbmd1
YWdlKGZvbnQsIGNoYXJhY3RlcnMsIGxlbmd0aCwgbG9jYWxlU3RyaW5nLmdldCgpLCAmY292ZXJl
ZExlbmd0aCkpOwotfQotCiBSZWY8Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQogewogICAgIC8vIEZJ
WE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0aGUgdXNlcidzIGRlZmF1
bHQgZm9udCBoZXJlLiAgRm9yIG5vdyB3ZSdsbCBwaWNrCg==
</data>
<flag name="review"
          id="320965"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298884</attachid>
            <date>2017-01-14 21:18:27 -0800</date>
            <delta_ts>2017-01-15 00:24:39 -0800</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-167056-20170114211655.patch</filename>
            <type>text/plain</type>
            <size>19511</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwNzY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTNkNDNkZmVjMjJlZjUz
ZGY4YzZiNzEwNzk2Yzg3OGRmNjkyNmVkNi4uOGI4YTYzYjZiN2M1ZTlhMjg0YTJkOTMyOGI3OGE1
YjExYWJmYmQ4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE3LTAxLTE0ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBV
bmlmeSBmb250IGZhbGxiYWNrIGJldHdlZW4gbWFjT1MgYW5kIGlPUyBmb3Igd2hlbiB0aGUgZm9u
dC1mYW1pbHkgbGlzdCBpcyBleGhhdXN0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NzA1NgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgorCisgICAgICAgIFdoZW4gcGVyZm9ybWluZyBmb250IGZhbGxiYWNrLCBlYWNoIGl0ZW0g
aW4gdGhlIGZvbnQtZmFtaWx5IGxpc3QgaXMgZXhhbWluZWQuCisgICAgICAgIElmIG5vIGFwcHJv
cHJpYXRlIGZvbnRzIGFyZSBmb3VuZCwgV2ViS2l0IGFza3MgdGhlIHN5c3RlbSBmb3IgYW4gYXBw
cm9wcmlhdGUKKyAgICAgICAgZm9udC4gQXMgb2YgYSBmZXcgeWVhcnMgYWdvLCBib3RoIG1hY09T
IGFuZCBpT1MgdXNlZCBwbGF0Zm9ybSBjYWxscyB0bworICAgICAgICBwcm9kdWNlIGEgZm9udDsg
aG93ZXZlciwgZWFjaCBwbGF0Zm9ybSB1c2VkIGEgZGlmZmVyZW50IHBsYXRmb3JtIGNhbGwuIFRo
aXMKKyAgICAgICAgcGF0Y2ggbWlncmF0ZXMgYm90aCBwbGF0Zm9ybXMgdG8gdXNlIGEgc2hhcmVk
IGZ1bmN0aW9uIHdoaWNoIHVzZXMgb25seQorICAgICAgICBvbmUgb2YgdGhlIHBsYXRmb3JtIGNh
bGxzICh3aGljaCBtZWFucyB0aGUgb3RoZXIgcGxhdGZvcm0gY2FsbCBpcyBuZXZlciB1c2VkKS4g
CisKKyAgICAgICAgVGhlcmUgYXJlIHN0aWxsIHNvbWUgYmVoYXZpb3IgZGlmZmVyZW5jZXMgYmV0
d2VlbiBtYWNPUyBhbmQgaU9TICh3aGljaCBhcmUgbm93CisgICAgICAgIGhpZGRlbiBiZWhpbmQg
YSBQTEFURk9STSgpIGd1YXJkKSwgYnV0IEknZCBsaWtlIHRvIG1pbmltaXplIGFuZCBlbGltaW5h
dGUgdGhlc2UKKyAgICAgICAgaW4gdGhlIGZ1dHVyZS4gVXNpbmcgYSBzaGFyZWQgZnVuY3Rpb24g
aXMgYSBzdGVwIHRvd2FyZCB0aGlzIGdvYWwuIAorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNh
dXNlIHRoZXJlIGlzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zv
bnRDYWNoZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omxvb2t1cEZhbGxiYWNrRm9u
dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFj
dGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OmdldFN5c3RlbUZvbnRGYWxsYmFja0ZvckNoYXJhY3RlcnMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1Mb29rdXBGYWxsYmFja0ZvbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpwbGF0Zm9ybUxvb2t1cEZhbGxiYWNrRm9udCk6IERlbGV0ZWQu
CisKIDIwMTctMDEtMTQgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZW5kZXJlcnMgc2hvdWxkIGhhdmUgYSBzaW1wbGUgd2F5IHRvIGFjY2VzcyBTZXR0aW5ncy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKaW5kZXggYWY0
OGIwYjkyNDJjNTk3MDBlZWViMzYyY2FiNmUwM2U1YWY2ZDI1ZS4uY2IwNGE0NTg1ZjQ4NzMyMDE2
OWM1Yjk1NGY0NzZhMWYwZWUxZmZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhY2hlLmgKQEAgLTI3Niw3ICsyNzYsNiBAQCB2b2lkIHBsYXRmb3JtSW52YWxp
ZGF0ZUZvbnRDYWNoZSgpOwogU3ludGhlc2lzUGFpciBjb21wdXRlTmVjZXNzYXJ5U3ludGhlc2lz
KENURm9udFJlZiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBpc1BsYXRmb3JtRm9udCA9
IGZhbHNlKTsKIFJldGFpblB0cjxDVEZvbnRSZWY+IHBsYXRmb3JtRm9udFdpdGhGYW1pbHlTcGVj
aWFsQ2FzZShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgRm9udFdlaWdodCwgQ1RGb250U3lt
Ym9saWNUcmFpdHMsIGZsb2F0IHNpemUpOwogUmV0YWluUHRyPENURm9udFJlZj4gcGxhdGZvcm1G
b250V2l0aEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgQ1RGb250U3ltYm9saWNU
cmFpdHMsIEZvbnRXZWlnaHQsIFRleHRSZW5kZXJpbmdNb2RlLCBmbG9hdCBzaXplKTsKLVJldGFp
blB0cjxDVEZvbnRSZWY+IHBsYXRmb3JtTG9va3VwRmFsbGJhY2tGb250KENURm9udFJlZiwgRm9u
dFdlaWdodCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUsIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgpOwogYm9vbCByZXF1aXJlc0N1c3RvbUZhbGxiYWNrRm9udChV
Q2hhcjMyIGNoYXJhY3Rlcik7CiAKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKaW5kZXgg
NDM3Y2Q3YjlmZjE3MDFlZWY2NTUzZWVjNDQzZGI4NjUwMjRhYzIwNy4uMTM4ZWZhZjEwNjcxZDk4
MDAyYTc5YmQ5OWZmYWViNzdhNTM3NzJhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcApAQCAt
MzksMTEgKzM5LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGlubGluZSB2b2lk
IGFwcGVuZFJhd1RydWVUeXBlRmVhdHVyZShDRk11dGFibGVBcnJheVJlZiBmZWF0dXJlcywgaW50
IHR5cGUsIGludCBzZWxlY3RvcikKIHsKLSAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHR5cGVO
dW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51
bWJlckludFR5cGUsICZ0eXBlKSk7Ci0gICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBzZWxlY3Rv
ck51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NG
TnVtYmVySW50VHlwZSwgJnNlbGVjdG9yKSk7CisgICAgYXV0byB0eXBlTnVtYmVyID0gYWRvcHRD
RihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAm
dHlwZSkpOworICAgIGF1dG8gc2VsZWN0b3JOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZzZWxlY3RvcikpOwogICAg
IENGVHlwZVJlZiBmZWF0dXJlS2V5c1tdID0geyBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVy
S2V5LCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSB9OwogICAgIENGVHlwZVJl
ZiBmZWF0dXJlVmFsdWVzW10gPSB7IHR5cGVOdW1iZXIuZ2V0KCksIHNlbGVjdG9yTnVtYmVyLmdl
dCgpIH07Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gZmVhdHVyZSA9IGFkb3B0Q0Yo
Q0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZlYXR1cmVLZXlzLCBmZWF0
dXJlVmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGZlYXR1cmVLZXlzKSwgJmtDRlR5cGVEaWN0aW9u
YXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAg
IGF1dG8gZmVhdHVyZSA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIGZlYXR1cmVLZXlzLCBmZWF0dXJlVmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGZlYXR1
cmVLZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25h
cnlWYWx1ZUNhbGxCYWNrcykpOwogICAgIENGQXJyYXlBcHBlbmRWYWx1ZShmZWF0dXJlcywgZmVh
dHVyZS5nZXQoKSk7CiB9CiAKQEAgLTEzMywxMiArMTMzLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBhcHBlbmRUcnVlVHlwZUZlYXR1cmUoQ0ZNdXRhYmxlQXJyYXlSZWYgZmVhdHVyZXMsIGNvbnN0
IEZvbnRGCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRPcGVuVHlwZUZlYXR1cmUoQ0ZNdXRh
YmxlQXJyYXlSZWYgZmVhdHVyZXMsIGNvbnN0IEZvbnRGZWF0dXJlJiBmZWF0dXJlKQogewotICAg
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmVhdHVyZUtleSA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVh
dGVXaXRoQnl0ZXMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBV
SW50OCo+KGZlYXR1cmUudGFnKCkuZGF0YSgpKSwgZmVhdHVyZS50YWcoKS5zaXplKCkgKiBzaXpl
b2YoRm9udFRhZzo6dmFsdWVfdHlwZSksIGtDRlN0cmluZ0VuY29kaW5nQVNDSUksIGZhbHNlKSk7
CisgICAgYXV0byBmZWF0dXJlS2V5ID0gYWRvcHRDRihDRlN0cmluZ0NyZWF0ZVdpdGhCeXRlcyhr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oZmVhdHVy
ZS50YWcoKS5kYXRhKCkpLCBmZWF0dXJlLnRhZygpLnNpemUoKSAqIHNpemVvZihGb250VGFnOjp2
YWx1ZV90eXBlKSwga0NGU3RyaW5nRW5jb2RpbmdBU0NJSSwgZmFsc2UpKTsKICAgICBpbnQgcmF3
RmVhdHVyZVZhbHVlID0gZmVhdHVyZS52YWx1ZSgpOwotICAgIFJldGFpblB0cjxDRk51bWJlclJl
Zj4gZmVhdHVyZVZhbHVlID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3RmVhdHVyZVZhbHVlKSk7CisgICAgYXV0byBmZWF0
dXJlVmFsdWUgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtD
Rk51bWJlckludFR5cGUsICZyYXdGZWF0dXJlVmFsdWUpKTsKICAgICBDRlR5cGVSZWYgZmVhdHVy
ZURpY3Rpb25hcnlLZXlzW10gPSB7IGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcsIGtDVEZvbnRP
cGVuVHlwZUZlYXR1cmVWYWx1ZSB9OwogICAgIENGVHlwZVJlZiBmZWF0dXJlRGljdGlvbmFyeVZh
bHVlc1tdID0geyBmZWF0dXJlS2V5LmdldCgpLCBmZWF0dXJlVmFsdWUuZ2V0KCkgfTsKLSAgICBS
ZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBmZWF0dXJlRGljdGlvbmFyeSA9IGFkb3B0Q0YoQ0ZE
aWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZlYXR1cmVEaWN0aW9uYXJ5S2V5
cywgZmVhdHVyZURpY3Rpb25hcnlWYWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoZmVhdHVyZURpY3Rp
b25hcnlWYWx1ZXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgYXV0byBmZWF0dXJlRGljdGlvbmFyeSA9IGFk
b3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZlYXR1cmVEaWN0
aW9uYXJ5S2V5cywgZmVhdHVyZURpY3Rpb25hcnlWYWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoZmVh
dHVyZURpY3Rpb25hcnlWYWx1ZXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZr
Q0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAgICAgQ0ZBcnJheUFwcGVuZFZhbHVl
KGZlYXR1cmVzLCBmZWF0dXJlRGljdGlvbmFyeS5nZXQoKSk7CiB9CiAKQEAgLTQ3OSw5ICs0Nzks
OSBAQCBSZXRhaW5QdHI8Q1RGb250UmVmPiBwcmVwYXJlUGxhdGZvcm1Gb250KENURm9udFJlZiBv
cmlnaW5hbEZvbnQsIFRleHRSZW5kZXJpbmdNbwogICAgIH0KICNlbmRpZgogCi0gICAgUmV0YWlu
UHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IGF0dHJpYnV0ZXMgPSBhZG9wdENGKENGRGljdGlv
bmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMiwgJmtDRlR5cGVEaWN0aW9u
YXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAg
IGF1dG8gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCAyLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZU
eXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAgICAgaWYgKCFmZWF0dXJlc1RvQmVBcHBs
aWVkLmlzRW1wdHkoKSkgewotICAgICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGZl
YXR1cmVBcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgZmVhdHVyZXMuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CisgICAgICAg
IGF1dG8gZmVhdHVyZUFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBmZWF0dXJlcy5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsK
ICAgICAgICAgZm9yIChhdXRvJiBwIDogZmVhdHVyZXNUb0JlQXBwbGllZCkgewogICAgICAgICAg
ICAgYXV0byBmZWF0dXJlID0gRm9udEZlYXR1cmUocC5rZXksIHAudmFsdWUpOwogICAgICAgICAg
ICAgYXBwZW5kVHJ1ZVR5cGVGZWF0dXJlKGZlYXR1cmVBcnJheS5nZXQoKSwgZmVhdHVyZSk7CkBA
IC01MDUsMTAgKzUwNSwxMCBAQCBSZXRhaW5QdHI8Q1RGb250UmVmPiBwcmVwYXJlUGxhdGZvcm1G
b250KENURm9udFJlZiBvcmlnaW5hbEZvbnQsIFRleHRSZW5kZXJpbmdNbwogCiAgICAgaWYgKHRl
eHRSZW5kZXJpbmdNb2RlID09IE9wdGltaXplTGVnaWJpbGl0eSkgewogICAgICAgICBDR0Zsb2F0
IHNpemUgPSBDVEZvbnRHZXRTaXplKG9yaWdpbmFsRm9udCk7Ci0gICAgICAgIFJldGFpblB0cjxD
Rk51bWJlclJlZj4gc2l6ZU51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwga0NGTnVtYmVyQ0dGbG9hdFR5cGUsICZzaXplKSk7CisgICAgICAgIGF1dG8g
c2l6ZU51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
a0NGTnVtYmVyQ0dGbG9hdFR5cGUsICZzaXplKSk7CiAgICAgICAgIENGRGljdGlvbmFyeUFkZFZh
bHVlKGF0dHJpYnV0ZXMuZ2V0KCksIGtDVEZvbnRPcHRpY2FsU2l6ZUF0dHJpYnV0ZSwgc2l6ZU51
bWJlci5nZXQoKSk7CiAgICAgfQotICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBk
ZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aEF0dHJpYnV0ZXMo
YXR0cmlidXRlcy5nZXQoKSkpOworICAgIGF1dG8gZGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250
RGVzY3JpcHRvckNyZWF0ZVdpdGhBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMuZ2V0KCkpKTsKICAgICBh
dXRvIHJlc3VsdCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKG9yaWdp
bmFsRm9udCwgQ1RGb250R2V0U2l6ZShvcmlnaW5hbEZvbnQpLCBudWxscHRyLCBkZXNjcmlwdG9y
LmdldCgpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTYyNiwxMiArNjI2LDEyIEBAIFJl
ZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24sIGNvbnN0IEF0CiAKIFZlY3RvcjxGb250VHJhaXRzTWFzaz4gRm9udENhY2hl
OjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0g
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmYW1pbHlOYW1lU3RyID0gZmFtaWx5TmFtZS5zdHJp
bmcoKS5jcmVhdGVDRlN0cmluZygpOworICAgIGF1dG8gZmFtaWx5TmFtZVN0ciA9IGZhbWlseU5h
bWUuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKICAgICBDRlR5cGVSZWYga2V5c1tdID0geyBr
Q1RGb250RmFtaWx5TmFtZUF0dHJpYnV0ZSB9OwogICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsg
ZmFtaWx5TmFtZVN0ci5nZXQoKSB9OwotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGF0
dHJpYnV0ZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFy
eUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICBS
ZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENU
Rm9udERlc2NyaXB0b3JDcmVhdGVXaXRoQXR0cmlidXRlcyhhdHRyaWJ1dGVzLmdldCgpKSk7Ci0g
ICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IG1hdGNoZWREZXNjcmlwdG9ycyA9IGFkb3B0Q0YoQ1RG
b250RGVzY3JpcHRvckNyZWF0ZU1hdGNoaW5nRm9udERlc2NyaXB0b3JzKGZvbnREZXNjcmlwdG9y
LmdldCgpLCBudWxscHRyKSk7CisgICAgYXV0byBhdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rp
b25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlf
TEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgYXV0byBmb250RGVzY3JpcHRvciA9IGFkb3B0
Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMuZ2V0KCkp
KTsKKyAgICBhdXRvIG1hdGNoZWREZXNjcmlwdG9ycyA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRv
ckNyZWF0ZU1hdGNoaW5nRm9udERlc2NyaXB0b3JzKGZvbnREZXNjcmlwdG9yLmdldCgpLCBudWxs
cHRyKSk7CiAgICAgaWYgKCFtYXRjaGVkRGVzY3JpcHRvcnMpCiAgICAgICAgIHJldHVybiB7IH07
CiAKQEAgLTY0Miw3ICs2NDIsNyBAQCBWZWN0b3I8Rm9udFRyYWl0c01hc2s+IEZvbnRDYWNoZTo6
Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYQogICAgIFZlY3Rv
cjxGb250VHJhaXRzTWFzaz4gdHJhaXRzTWFza3M7CiAgICAgdHJhaXRzTWFza3MucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShudW1NYXRjaGVzKTsKICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBu
dW1NYXRjaGVzOyArK2kpIHsKLSAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gdHJh
aXRzID0gYWRvcHRDRigoQ0ZEaWN0aW9uYXJ5UmVmKUNURm9udERlc2NyaXB0b3JDb3B5QXR0cmli
dXRlKChDVEZvbnREZXNjcmlwdG9yUmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgobWF0Y2hlZERl
c2NyaXB0b3JzLmdldCgpLCBpKSwga0NURm9udFRyYWl0c0F0dHJpYnV0ZSkpOworICAgICAgICBh
dXRvIHRyYWl0cyA9IGFkb3B0Q0YoKENGRGljdGlvbmFyeVJlZilDVEZvbnREZXNjcmlwdG9yQ29w
eUF0dHJpYnV0ZSgoQ1RGb250RGVzY3JpcHRvclJlZilDRkFycmF5R2V0VmFsdWVBdEluZGV4KG1h
dGNoZWREZXNjcmlwdG9ycy5nZXQoKSwgaSksIGtDVEZvbnRUcmFpdHNBdHRyaWJ1dGUpKTsKICAg
ICAgICAgQ0ZOdW1iZXJSZWYgcmVzdWx0UmVmID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdl
dFZhbHVlKHRyYWl0cy5nZXQoKSwga0NURm9udFN5bWJvbGljVHJhaXQpOwogICAgICAgICBDRk51
bWJlclJlZiB3ZWlnaHRSZWYgPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUodHJh
aXRzLmdldCgpLCBrQ1RGb250V2VpZ2h0VHJhaXQpOwogICAgICAgICBpZiAocmVzdWx0UmVmICYm
IHdlaWdodFJlZikgewpAQCAtNjg2LDcgKzY4Niw3IEBAIHZvaWQgRm9udENhY2hlOjpwbGF0Zm9y
bUluaXQoKQogVmVjdG9yPFN0cmluZz4gRm9udENhY2hlOjpzeXN0ZW1Gb250RmFtaWxpZXMoKQog
ewogICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMjE4OTAxODg+Ci0gICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIG51bGxwdHIsIDAsICZrQ0ZUeXBlRGljdGlv
bmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAg
ICBhdXRvIGF0dHJpYnV0ZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBudWxscHRyLCBudWxscHRyLCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxs
QmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAgICAgYXV0byBlbXB0
eUZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aEF0dHJp
YnV0ZXMoYXR0cmlidXRlcy5nZXQoKSkpOwogICAgIGF1dG8gbWF0Y2hlZERlc2NyaXB0b3JzID0g
YWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlTWF0Y2hpbmdGb250RGVzY3JpcHRvcnMoZW1w
dHlGb250RGVzY3JpcHRvci5nZXQoKSwgbnVsbHB0cikpOwogICAgIGlmICghbWF0Y2hlZERlc2Ny
aXB0b3JzKQpAQCAtNzc2LDcgKzc3Niw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBm
b250V2l0aEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgQ1RGb250U3ltCiAgICAg
aWYgKGZhbWlseS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmV0
YWluUHRyPENURm9udFJlZj4gZm91bmRGb250ID0gcGxhdGZvcm1Gb250V2l0aEZhbWlseVNwZWNp
YWxDYXNlKGZhbWlseSwgd2VpZ2h0LCBkZXNpcmVkVHJhaXRzLCBzaXplKTsKKyAgICBhdXRvIGZv
dW5kRm9udCA9IHBsYXRmb3JtRm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShmYW1pbHksIHdlaWdo
dCwgZGVzaXJlZFRyYWl0cywgc2l6ZSk7CiAgICAgaWYgKCFmb3VuZEZvbnQpIHsKICNpZiBFTkFC
TEUoUExBVEZPUk1fRk9OVF9MT09LVVApCiAgICAgICAgIGZvdW5kRm9udCA9IHBsYXRmb3JtRm9u
dExvb2t1cFdpdGhGYW1pbHkoZmFtaWx5LCBkZXNpcmVkVHJhaXRzLCB3ZWlnaHQsIHNpemUpOwpA
QCAtODI0LDcgKzgyNCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250
Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlCiAgICAgQ1RGb250U3lt
Ym9saWNUcmFpdHMgdHJhaXRzID0gY29tcHV0ZVRyYWl0cyhmb250RGVzY3JpcHRpb24pOwogICAg
IGZsb2F0IHNpemUgPSBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKTsKIAotICAg
IFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnQgPSBmb250V2l0aEZhbWlseShmYW1pbHksIHRyYWl0
cywgZm9udERlc2NyaXB0aW9uLndlaWdodCgpLCBmb250RGVzY3JpcHRpb24uZmVhdHVyZVNldHRp
bmdzKCksIGZvbnREZXNjcmlwdGlvbi52YXJpYW50U2V0dGluZ3MoKSwgZm9udERlc2NyaXB0aW9u
LnZhcmlhdGlvblNldHRpbmdzKCksIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlVmFyaWFudFNl
dHRpbmdzLCBmb250RGVzY3JpcHRpb24udGV4dFJlbmRlcmluZ01vZGUoKSwgc2l6ZSk7CisgICAg
YXV0byBmb250ID0gZm9udFdpdGhGYW1pbHkoZmFtaWx5LCB0cmFpdHMsIGZvbnREZXNjcmlwdGlv
bi53ZWlnaHQoKSwgZm9udERlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpLCBmb250RGVzY3Jp
cHRpb24udmFyaWFudFNldHRpbmdzKCksIGZvbnREZXNjcmlwdGlvbi52YXJpYXRpb25TZXR0aW5n
cygpLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZVZhcmlhbnRTZXR0aW5ncywgZm9udERlc2Ny
aXB0aW9uLnRleHRSZW5kZXJpbmdNb2RlKCksIHNpemUpOwogCiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIGlmICghZm9udCkgewpAQCAtODY2LDYgKzg2Niw1MCBAQCB2b2lkIEZvbnRDYWNoZTo6cGxh
dGZvcm1QdXJnZUluYWN0aXZlRm9udERhdGEoKQogICAgICAgICBmYWxsYmFja0RlZHVwU2V0KCku
cmVtb3ZlKGZvbnQpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIGlubGluZSBib29s
IGlzQXJhYmljQ2hhcmFjdGVyKFVDaGFyIGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gY2hhcmFj
dGVyID49IDB4MDYwMCAmJiBjaGFyYWN0ZXIgPD0gMHgwNkZGOworfQorI2VuZGlmCisKK3N0YXRp
YyBSZXRhaW5QdHI8Q1RGb250UmVmPiBsb29rdXBGYWxsYmFja0ZvbnQoQ1RGb250UmVmIGZvbnQs
IEZvbnRXZWlnaHQgZm9udFdlaWdodCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUsIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQVNTRVJUKGxlbmd0
aCA+IDApOworCisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBsb2NhbGVTdHJpbmc7CisjaWYg
KFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAw
MDAwKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwMTIwMCkKKyAgICBpZiAoIWxvY2FsZS5pc051bGwoKSkKKyAgICAgICAgbG9jYWxlU3Ry
aW5nID0gbG9jYWxlLnN0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShsb2NhbGUpOworI2VuZGlmCisKKyAgICBDRkluZGV4IGNvdmVyZWRMZW5ndGggPSAw
OworICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVGb3JDaGFyYWN0ZXJzV2l0
aExhbmd1YWdlKGZvbnQsIGNoYXJhY3RlcnMsIGxlbmd0aCwgbG9jYWxlU3RyaW5nLmdldCgpLCAm
Y292ZXJlZExlbmd0aCkpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIENhbGxlcnMgb2Yg
dGhpcyBmdW5jdGlvbiB3b24ndCBpbmNsdWRlIG11bHRpcGxlIGNvZGUgcG9pbnRzLiAiTGVuZ3Ro
IiBpcyB0byBrbm93IGhvdyBtYW55IGNvZGUgdW5pdHMKKyAgICAvLyBhcmUgaW4gdGhlIGNvZGUg
cG9pbnQuCisgICAgVUNoYXIgZmlyc3RDaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzWzBdOworICAgIGlm
IChpc0FyYWJpY0NoYXJhY3RlcihmaXJzdENoYXJhY3RlcikpIHsKKyAgICAgICAgYXV0byBmYW1p
bHlOYW1lID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oQ1RGb250Q29weUF0dHJp
YnV0ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGYW1pbHlOYW1lQXR0cmlidXRlKSkpOworICAgICAg
ICBpZiAoZm9udEZhbWlseVNob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhmYW1pbHlOYW1lLmdldCgp
KSkgeworICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgbmV3RmFtaWx5TmFtZSA9IGlzRm9udFdlaWdo
dEJvbGQoZm9udFdlaWdodCkgPyBDRlNUUigiR2VlemFQcm8tQm9sZCIpIDogQ0ZTVFIoIkdlZXph
UHJvIik7CisgICAgICAgICAgICBDRlR5cGVSZWYga2V5c1tdID0geyBrQ1RGb250TmFtZUF0dHJp
YnV0ZSB9OworICAgICAgICAgICAgQ0ZUeXBlUmVmIHZhbHVlc1tdID0geyBuZXdGYW1pbHlOYW1l
IH07CisgICAgICAgICAgICBhdXRvIGF0dHJpYnV0ZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNy
ZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgo
a2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5
VmFsdWVDYWxsQmFja3MpKTsKKyAgICAgICAgICAgIGF1dG8gbW9kaWZpY2F0aW9uID0gYWRvcHRD
RihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aEF0dHJpYnV0ZXMoYXR0cmlidXRlcy5nZXQoKSkp
OworICAgICAgICAgICAgcmVzdWx0ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVDb3B5V2l0aEF0dHJp
YnV0ZXMocmVzdWx0LmdldCgpLCBDVEZvbnRHZXRTaXplKHJlc3VsdC5nZXQoKSksIG51bGxwdHIs
IG1vZGlmaWNhdGlvbi5nZXQoKSkpOworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oZm9udFdlaWdodCk7CisjZW5kaWYKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
IFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25z
dCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnRE
YXRhLCBib29sIGlzUGxhdGZvcm1Gb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoKQogewogI2lmIFBMQVRGT1JNKElPUykKQEAgLTg3OCw3ICs5MjIsNyBAQCBSZWZQ
dHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBkZXNjcgogI2VuZGlmCiAKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRh
JiBwbGF0Zm9ybURhdGEgPSBvcmlnaW5hbEZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKTsKLSAgICBS
ZXRhaW5QdHI8Q1RGb250UmVmPiByZXN1bHQgPSBwbGF0Zm9ybUxvb2t1cEZhbGxiYWNrRm9udChw
bGF0Zm9ybURhdGEuZm9udCgpLCBkZXNjcmlwdGlvbi53ZWlnaHQoKSwgZGVzY3JpcHRpb24ubG9j
YWxlKCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgYXV0byByZXN1bHQgPSBsb29rdXBGYWxs
YmFja0ZvbnQocGxhdGZvcm1EYXRhLmZvbnQoKSwgZGVzY3JpcHRpb24ud2VpZ2h0KCksIGRlc2Ny
aXB0aW9uLmxvY2FsZSgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogICAgIHJlc3VsdCA9IHByZXBh
cmVQbGF0Zm9ybUZvbnQocmVzdWx0LmdldCgpLCBkZXNjcmlwdGlvbi50ZXh0UmVuZGVyaW5nTW9k
ZSgpLCBudWxscHRyLCBudWxscHRyLCBkZXNjcmlwdGlvbi5mZWF0dXJlU2V0dGluZ3MoKSwgZGVz
Y3JpcHRpb24udmFyaWFudFNldHRpbmdzKCksIGRlc2NyaXB0aW9uLnZhcmlhdGlvblNldHRpbmdz
KCkpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gbGFzdFJlc29ydEZhbGxiYWNr
Rm9udChkZXNjcmlwdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQppbmRleCA0ZGExNDIyOWRiNWM2Mjc3NTZlMGI4ZjA5
M2FhODE5MWUzZDIxZjYwLi42OWE0NTVkYmE1ZTI4NDM0NDI1YmI5YmY2Njk1Y2UwYzA2ZDkyMzdm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENh
Y2hlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250
Q2FjaGVJT1MubW0KQEAgLTc4LDQ2ICs3OCw2IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNo
ZTo6Z2V0Q3VzdG9tRmFsbGJhY2tGb250KGNvbnN0IFVJbnQzMiBjLCBjb25zdCBGb250RGVzCiAg
ICAgcmV0dXJuIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24sICpmYW1pbHkp
OwogfQogCi1zdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZ2V0U3lzdGVtRm9udEZhbGxiYWNr
Rm9yQ2hhcmFjdGVycyhDVEZvbnRSZWYgZm9udCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUs
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgLy8gRklY
TUU6IFVuaWZ5IHRoaXMgd2l0aCBwbGF0Zm9ybUxvb2t1cEZhbGxiYWNrRm9udCgpCi0gICAgUmV0
YWluUHRyPENGU3RyaW5nUmVmPiBsb2NhbGVTdHJpbmc7Ci0gICAgaWYgKCFsb2NhbGUuaXNOdWxs
KCkpCi0gICAgICAgIGxvY2FsZVN0cmluZyA9IGxvY2FsZS5zdHJpbmcoKS5jcmVhdGVDRlN0cmlu
ZygpOwotCi0gICAgQ0ZJbmRleCBjb3ZlcmVkTGVuZ3RoID0gMDsKLSAgICByZXR1cm4gYWRvcHRD
RihDVEZvbnRDcmVhdGVQaHlzaWNhbEZvbnRGb3JDaGFyYWN0ZXJzV2l0aExhbmd1YWdlKGZvbnQs
IChjb25zdCBVVEYxNkNoYXIqKWNoYXJhY3RlcnMsIChDRkluZGV4KWxlbmd0aCwgbG9jYWxlU3Ry
aW5nLmdldCgpLCAmY292ZXJlZExlbmd0aCkpOwotfQotCi1SZXRhaW5QdHI8Q1RGb250UmVmPiBw
bGF0Zm9ybUxvb2t1cEZhbGxiYWNrRm9udChDVEZvbnRSZWYgZm9udCwgRm9udFdlaWdodCBmb250
V2VpZ2h0LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSwgY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICAvLyBGb3Igc3lzdGVtIGZvbnRzIHdlIHVzZSBD
b3JlVGV4dCBmYWxsYmFjayBtZWNoYW5pc20uCi0gICAgaWYgKGxlbmd0aCAmJiBDVEZvbnREZXNj
cmlwdG9ySXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9u
dCkpLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGdldFN5c3RlbUZvbnRGYWxsYmFja0ZvckNoYXJh
Y3RlcnMoZm9udCwgbG9jYWxlLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwotCi0gICAgUmV0YWluUHRy
PENGU3RyaW5nUmVmPiBsb2NhbGVTdHJpbmc7Ci0jaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTAwMDAwCi0gICAgaWYgKCFsb2NhbGUuaXNOdWxsKCkpCi0gICAgICAgIGxv
Y2FsZVN0cmluZyA9IGxvY2FsZS5zdHJpbmcoKS5jcmVhdGVDRlN0cmluZygpOwotI2VuZGlmCi0g
ICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IGZhbGxiYWNrRm9udERlc2NyaXB0b3Ig
PSBhZG9wdENGKENURm9udENyZWF0ZVBoeXNpY2FsRm9udERlc2NyaXB0b3JGb3JDaGFyYWN0ZXJz
V2l0aExhbmd1YWdlKGZvbnQsIGNoYXJhY3RlcnMsIGxlbmd0aCwgbG9jYWxlU3RyaW5nLmdldCgp
LCBudWxscHRyKSk7Ci0gICAgVUNoYXIzMiBjID0gKmNoYXJhY3RlcnM7Ci0gICAgaWYgKGxlbmd0
aCA+IDEgJiYgVTE2X0lTX0xFQUQoYykgJiYgVTE2X0lTX1RSQUlMKGNoYXJhY3RlcnNbMV0pKQot
ICAgICAgICBjID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGMsIGNoYXJhY3RlcnNbMV0pOwotICAg
IC8vIEFyYWJpYwotICAgIGlmIChjID49IDB4MDYwMCAmJiBjIDw9IDB4MDZmZikgewotICAgICAg
ICBhdXRvIGZhbWlseU5hbWUgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihDVEZv
bnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmYWxsYmFja0ZvbnREZXNjcmlwdG9yLmdldCgpLCBr
Q1RGb250RmFtaWx5TmFtZUF0dHJpYnV0ZSkpKTsKLSAgICAgICAgaWYgKGZvbnRGYW1pbHlTaG91
bGROb3RCZVVzZWRGb3JBcmFiaWMoZmFtaWx5TmFtZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIENG
U3RyaW5nUmVmIG5ld0ZhbWlseU5hbWUgPSBpc0ZvbnRXZWlnaHRCb2xkKGZvbnRXZWlnaHQpID8g
Q0ZTVFIoIkdlZXphUHJvLUJvbGQiKSA6IENGU1RSKCJHZWV6YVBybyIpOwotICAgICAgICAgICAg
Q0ZUeXBlUmVmIGtleXNbXSA9IHsga0NURm9udE5hbWVBdHRyaWJ1dGUgfTsKLSAgICAgICAgICAg
IENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsgbmV3RmFtaWx5TmFtZSB9OwotICAgICAgICAgICAgUmV0
YWluUHRyPENGRGljdGlvbmFyeVJlZj4gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5
Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdU
SChrZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25h
cnlWYWx1ZUNhbGxCYWNrcykpOwotICAgICAgICAgICAgZmFsbGJhY2tGb250RGVzY3JpcHRvciA9
IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhmYWxsYmFj
a0ZvbnREZXNjcmlwdG9yLmdldCgpLCBhdHRyaWJ1dGVzLmdldCgpKSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKGZh
bGxiYWNrRm9udERlc2NyaXB0b3IuZ2V0KCksIENURm9udEdldFNpemUoZm9udCksIG51bGxwdHIp
KTsKLX0KLQogUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKICAgICByZXR1cm4gKmZvbnRG
b3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBBdG9taWNTdHJpbmcoIi5QaG9uZUZhbGxiYWNrIiwg
QXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0KaW5kZXggM2YwNmVk
ZDAwYzU5YThlMzc2MWUxMzMyMWE5MTgxNmZiZTg0Y2RhNi4uOTc4Mjc3M2VlOWRiN2IxNDE4NTY1
ZWJiMGVkNTM0YjZlZTcxZTI2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCkBAIC0zNzYsMjAgKzM3Niw2IEBAIHZvaWQg
cGxhdGZvcm1JbnZhbGlkYXRlRm9udENhY2hlKCkKICNlbmRpZgogfQogCi1SZXRhaW5QdHI8Q1RG
b250UmVmPiBwbGF0Zm9ybUxvb2t1cEZhbGxiYWNrRm9udChDVEZvbnRSZWYgZm9udCwgRm9udFdl
aWdodCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBsb2NhbGVT
dHJpbmc7Ci0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwMTEwMAotICAg
IGlmICghbG9jYWxlLmlzTnVsbCgpKQotICAgICAgICBsb2NhbGVTdHJpbmcgPSBsb2NhbGUuc3Ry
aW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGxvY2FsZSk7
Ci0jZW5kaWYKLQotICAgIENGSW5kZXggY292ZXJlZExlbmd0aCA9IDA7Ci0gICAgcmV0dXJuIGFk
b3B0Q0YoQ1RGb250Q3JlYXRlRm9yQ2hhcmFjdGVyc1dpdGhMYW5ndWFnZShmb250LCBjaGFyYWN0
ZXJzLCBsZW5ndGgsIGxvY2FsZVN0cmluZy5nZXQoKSwgJmNvdmVyZWRMZW5ndGgpKTsKLX0KLQog
UmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKICAgICAvLyBGSVhNRTogV291bGQgYmUgZXZl
biBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gIEZv
ciBub3cgd2UnbGwgcGljawo=
</data>

          </attachment>
      

    </bug>

</bugzilla>