<?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>223995</bug_id>
          
          <creation_ts>2021-03-31 05:43:12 -0700</creation_ts>
          <short_desc>Make FontCache self-contained (remove static global variables)</short_desc>
          <delta_ts>2021-03-31 15:04:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>202793</blocked>
    
    <blocked>223997</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Lord">clord</reporter>
          <assigned_to name="Chris Lord">clord</assigned_to>
          <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1745599</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-31 05:43:12 -0700</bug_when>
    <thetext>Currently the FontCache singleton contains some of the structures it relies on, but also has some static global variables for reasons that are unclear to me. For example, the actual font cache lives on FontCache, but the list of FontCacheClients is a global variable.

The current plan is for OffscreenCanvas to use a separate FontCache so as not to affect the performance of the main FontCache. To do this, FontCache needs to be fully self-contained.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745602</commentid>
    <comment_count>1</comment_count>
      <attachid>424762</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-31 05:48:43 -0700</bug_when>
    <thetext>Created attachment 424762
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745674</commentid>
    <comment_count>2</comment_count>
      <attachid>424762</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-31 10:11:49 -0700</bug_when>
    <thetext>Comment on attachment 424762
Patch

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

&gt; Source/WebCore/platform/graphics/FontCache.h:299
&gt; +    struct FontPlatformDataCacheKey {

If we want to keep this all out of the header, we can put these things into a structure in a WTF::UniqueRef instead of directly into the FontCache object itself. Uses a little more memory, but helps keep the FontCache.h file smaller.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745776</commentid>
    <comment_count>3</comment_count>
      <attachid>424820</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-31 14:18:23 -0700</bug_when>
    <thetext>Created attachment 424820
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745778</commentid>
    <comment_count>4</comment_count>
      <attachid>424820</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-31 14:20:21 -0700</bug_when>
    <thetext>Comment on attachment 424820
Patch

Comment addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745799</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-03-31 15:03:12 -0700</bug_when>
    <thetext>Committed r275308: &lt;https://commits.webkit.org/r275308&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 424820.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745802</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-31 15:04:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/76072958&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424762</attachid>
            <date>2021-03-31 05:48:43 -0700</date>
            <delta_ts>2021-03-31 14:18:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223995-20210331134842.patch</filename>
            <type>text/plain</type>
            <size>21124</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0OTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTQ5YTY5YjI4NWQ2ZTFj
MTE3ZmYwN2FlYTY4ZTIyZTg1MTVjNWVhNi4uNDFiODJjOTE1MTFkMzM4ZjZhZDlmMDA4MDE0NTM0
ZTlhNDc0YjFiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIxLTAzLTMxICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBzZWxm
LWNvbnRhaW5lZCAocmVtb3ZlIHN0YXRpYyBnbG9iYWwgdmFyaWFibGVzKQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzOTk1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyByZWZhY3RvcnMgRm9udENh
Y2hlIHNvIHRoYXQgdGhlIGlPUyBmb250IGxvY2ssIHRoZQorICAgICAgICBGb250UGxhdGZvcm1E
YXRhQ2FjaGUsIHRoZSBGb250RGF0YUNhY2hlLCB0aGUgRm9udFZlcnRpY2FsRGF0YUNhY2hlLAor
ICAgICAgICB0aGUgRm9udFNlbGVjdG9yIGNsaWVudHMgbGlzdCBhbmQgdGhlIGdlbmVyYXRpb24g
Y291bnRlciBhbGwgbGl2ZSBvbgorICAgICAgICBGb250Q2FjaGUgaW5zdGVhZCBvZiBpbiBzdGF0
aWMgZ2xvYmFsIHZhcmlhYmxlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGNoYW5nZSBp
biBiZWhhdmlvci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OkZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleTo6
b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OkZvbnRQbGF0
Zm9ybURhdGFDYWNoZUtleUhhc2g6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hl
OjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Rm9udERhdGFDYWNoZUtleVRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250Q2FjaGU6OkZvbnREYXRhQ2FjaGVLZXlUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OkZvbnREYXRhQ2FjaGVLZXlUcmFpdHM6
OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6dmVydGljYWxE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3JtRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9udENvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYWNoZTo6aW5hY3RpdmVGb250Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhY2hlOjphZGRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpyZW1v
dmVDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6Z2VuZXJhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fj
aGU6OkZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleTo6Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5Ojpp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fj
aGU6OkZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2g6OmVxdWFsKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6Rm9udERhdGFDYWNoZUtleUhhc2g6Omhhc2gpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhY2hlOjpGb250RGF0YUNhY2hlS2V5SGFzaDo6ZXF1YWwpOgorCiAyMDIxLTAz
LTI0ICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CiAKICAgICAgICAgW2Nzcy1ncmlkXSBE
byBub3QgYWxsb3cgbmVnYXRpdmUgaGVpZ2h0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKaW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1N2JhY2MxYWY3
MmI0NmYwY2M5MDk2ZC4uZDhiYzYxN2VhMWVjMGQ0NmM3ODI3OGY4MjUyNzhkZDhkMzMyOWJlYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBA
IC00NiwxNSArNDYsNiBAQAogI2luY2x1ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCiAjZW5k
aWYKIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNp
bmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KLQotc3RhdGljIFJlY3Vyc2l2ZUxv
Y2sgZm9udExvY2s7Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKQEAgLTY5LDgyICs2MCwzOCBA
QCBGb250Q2FjaGU6OkZvbnRDYWNoZSgpCiB7CiB9CiAKLXN0cnVjdCBGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXkgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleSgpIHsgfQotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRT
ZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpCi0gICAg
ICAgIDogbV9mb250RGVzY3JpcHRpb25LZXkoZGVzY3JpcHRpb24pCi0gICAgICAgICwgbV9mYW1p
bHkoZmFtaWx5KQotICAgICAgICAsIG1fZm9udEZhY2VGZWF0dXJlcyhmb250RmFjZUZlYXR1cmVz
ID8gKmZvbnRGYWNlRmVhdHVyZXMgOiBGb250RmVhdHVyZVNldHRpbmdzKCkpCi0gICAgICAgICwg
bV9mb250RmFjZUNhcGFiaWxpdGllcyhmb250RmFjZUNhcGFiaWxpdGllcykKLSAgICB7IH0KLQot
ICAgIGV4cGxpY2l0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShIYXNoVGFibGVEZWxldGVkVmFs
dWVUeXBlIHQpCi0gICAgICAgIDogbV9mb250RGVzY3JpcHRpb25LZXkodCkKLSAgICB7IH0KLQot
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRE
ZXNjcmlwdGlvbktleS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9Ci0KLSAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBvdGhlcikgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbktleSAhPSBvdGhlci5tX2ZvbnREZXNj
cmlwdGlvbktleQotICAgICAgICAgICAgfHwgbV9mb250RmFjZUZlYXR1cmVzICE9IG90aGVyLm1f
Zm9udEZhY2VGZWF0dXJlcwotICAgICAgICAgICAgfHwgbV9mb250RmFjZUNhcGFiaWxpdGllcyAh
PSBvdGhlci5tX2ZvbnRGYWNlQ2FwYWJpbGl0aWVzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAobV9mYW1pbHkuaW1wbCgpID09IG90aGVyLm1fZmFtaWx5LmltcGwoKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAobV9mYW1pbHkuaXNOdWxsKCkg
fHwgb3RoZXIubV9mYW1pbHkuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVxdWFs
KG1fZmFtaWx5LCBvdGhlci5tX2ZhbWlseSk7Ci0gICAgfQotCi0gICAgRm9udERlc2NyaXB0aW9u
S2V5IG1fZm9udERlc2NyaXB0aW9uS2V5OwotICAgIEF0b21TdHJpbmcgbV9mYW1pbHk7Ci0gICAg
Rm9udEZlYXR1cmVTZXR0aW5ncyBtX2ZvbnRGYWNlRmVhdHVyZXM7Ci0gICAgRm9udFNlbGVjdGlv
blNwZWNpZmllZENhcGFiaWxpdGllcyBtX2ZvbnRGYWNlQ2FwYWJpbGl0aWVzOwotfTsKLQotc3Ry
dWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgZm9udEtleSkKLSAgICB7Ci0gICAg
ICAgIEludGVnZXJIYXNoZXIgaGFzaGVyOwotICAgICAgICBoYXNoZXIuYWRkKEZvbnRDYXNjYWRl
RGVzY3JpcHRpb246OmZhbWlseU5hbWVIYXNoKGZvbnRLZXkubV9mYW1pbHkpKTsKLSAgICAgICAg
aGFzaGVyLmFkZChmb250S2V5Lm1fZm9udERlc2NyaXB0aW9uS2V5LmNvbXB1dGVIYXNoKCkpOwot
ICAgICAgICBoYXNoZXIuYWRkKGZvbnRLZXkubV9mb250RmFjZUZlYXR1cmVzLmhhc2goKSk7Ci0g
ICAgICAgIGlmIChhdXRvIHdlaWdodCA9IGZvbnRLZXkubV9mb250RmFjZUNhcGFiaWxpdGllcy53
ZWlnaHQpCi0gICAgICAgICAgICBoYXNoZXIuYWRkKHdlaWdodC0+dW5pcXVlVmFsdWUoKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhhc2hlci5hZGQoc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgaWYgKGF1dG8gd2lkdGggPSBmb250S2V5Lm1fZm9u
dEZhY2VDYXBhYmlsaXRpZXMud2VpZ2h0KQotICAgICAgICAgICAgaGFzaGVyLmFkZCh3aWR0aC0+
dW5pcXVlVmFsdWUoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhhc2hlci5hZGQoc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgaWYgKGF1dG8gc2xv
cGUgPSBmb250S2V5Lm1fZm9udEZhY2VDYXBhYmlsaXRpZXMud2VpZ2h0KQotICAgICAgICAgICAg
aGFzaGVyLmFkZChzbG9wZS0+dW5pcXVlVmFsdWUoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGhhc2hlci5hZGQoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKLSAg
ICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Ci0gICAgfQotICAgICAgICAgCi0gICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBhLCBjb25zdCBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGIpCi0gICAgewotICAgICAgICByZXR1cm4gYSA9PSBiOwot
ICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxl
dGVkID0gdHJ1ZTsKLX07Ci0KLXN0cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoVHJh
aXRzIDogcHVibGljIFNpbXBsZUNsYXNzSGFzaFRyYWl0czxGb250UGxhdGZvcm1EYXRhQ2FjaGVL
ZXk+IHsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Ci19
OwotCi10eXBlZGVmIEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5LCBzdGQ6OnVuaXF1
ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4sIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2gsIEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2hUcmFpdHM+IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsK
K2Jvb2wgRm9udENhY2hlOjpGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXk6Om9wZXJhdG9yPT0oY29u
c3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobV9m
b250RGVzY3JpcHRpb25LZXkgIT0gb3RoZXIubV9mb250RGVzY3JpcHRpb25LZXkKKyAgICAgICAg
fHwgbV9mb250RmFjZUZlYXR1cmVzICE9IG90aGVyLm1fZm9udEZhY2VGZWF0dXJlcworICAgICAg
ICB8fCBtX2ZvbnRGYWNlQ2FwYWJpbGl0aWVzICE9IG90aGVyLm1fZm9udEZhY2VDYXBhYmlsaXRp
ZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9mYW1pbHkuaW1wbCgpID09IG90
aGVyLm1fZmFtaWx5LmltcGwoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1fZmFt
aWx5LmlzTnVsbCgpIHx8IG90aGVyLm1fZmFtaWx5LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJl
RXF1YWwobV9mYW1pbHksIG90aGVyLm1fZmFtaWx5KTsKK30KIAotc3RhdGljIEZvbnRQbGF0Zm9y
bURhdGFDYWNoZSYgZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkKK3Vuc2lnbmVkIEZvbnRDYWNoZTo6
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaDo6aGFzaChjb25zdCBGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXkmIGZvbnRLZXkpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRQbGF0
Zm9ybURhdGFDYWNoZT4gY2FjaGU7Ci0gICAgcmV0dXJuIGNhY2hlOworICAgIEludGVnZXJIYXNo
ZXIgaGFzaGVyOworICAgIGhhc2hlci5hZGQoRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5
TmFtZUhhc2goZm9udEtleS5tX2ZhbWlseSkpOworICAgIGhhc2hlci5hZGQoZm9udEtleS5tX2Zv
bnREZXNjcmlwdGlvbktleS5jb21wdXRlSGFzaCgpKTsKKyAgICBoYXNoZXIuYWRkKGZvbnRLZXku
bV9mb250RmFjZUZlYXR1cmVzLmhhc2goKSk7CisgICAgaWYgKGF1dG8gd2VpZ2h0ID0gZm9udEtl
eS5tX2ZvbnRGYWNlQ2FwYWJpbGl0aWVzLndlaWdodCkKKyAgICAgICAgaGFzaGVyLmFkZCh3ZWln
aHQtPnVuaXF1ZVZhbHVlKCkpOworICAgIGVsc2UKKyAgICAgICAgaGFzaGVyLmFkZChzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIGlmIChhdXRvIHdpZHRoID0gZm9u
dEtleS5tX2ZvbnRGYWNlQ2FwYWJpbGl0aWVzLndlaWdodCkKKyAgICAgICAgaGFzaGVyLmFkZCh3
aWR0aC0+dW5pcXVlVmFsdWUoKSk7CisgICAgZWxzZQorICAgICAgICBoYXNoZXIuYWRkKHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7CisgICAgaWYgKGF1dG8gc2xvcGUgPSBm
b250S2V5Lm1fZm9udEZhY2VDYXBhYmlsaXRpZXMud2VpZ2h0KQorICAgICAgICBoYXNoZXIuYWRk
KHNsb3BlLT51bmlxdWVWYWx1ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIGhhc2hlci5hZGQoc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICByZXR1cm4gaGFzaGVyLmhh
c2goKTsKIH0KIAogY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjphbHRlcm5hdGVGYW1pbHlO
YW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCkBAIC0xOTksOSArMTQ2LDkgQEAgRm9u
dFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm8KICAgICBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250
RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNl
Q2FwYWJpbGl0aWVzLCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExvY2spOworICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9mb250TG9jayk7CiAjZW5kaWYKLSAgICAKKwogI2lm
IE9TKFdJTkRPV1MpICYmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKICAgICAvLyBMZWFkaW5n
ICJAIiBpbiB0aGUgZm9udCBuYW1lIGVuYWJsZXMgV2luZG93cyB2ZXJ0aWNhbCBmbG93IGZsYWcg
Zm9yIHRoZSBmb250LgogICAgIC8vIEJlY2F1c2Ugd2UgZG8gdmVydGljYWwgZmxvdyBieSBvdXJz
ZWx2ZXMsIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBXaW5kb3dzIGZlYXR1cmUuCkBAIC0yMjAs
NyArMTY3LDcgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm8KIAogICAgIEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleSBrZXkoZmFtaWx5TmFtZSwgZm9udERlc2NyaXB0aW9uLCBmb250RmFjZUZlYXR1
cmVzLCBmb250RmFjZUNhcGFiaWxpdGllcyk7CiAKLSAgICBhdXRvIGFkZFJlc3VsdCA9IGZvbnRQ
bGF0Zm9ybURhdGFDYWNoZSgpLmFkZChrZXksIG51bGxwdHIpOworICAgIGF1dG8gYWRkUmVzdWx0
ID0gbV9mb250UGxhdGZvcm1EYXRhQ2FjaGUuYWRkKGtleSwgbnVsbHB0cik7CiAgICAgRm9udFBs
YXRmb3JtRGF0YUNhY2hlOjppdGVyYXRvciBpdCA9IGFkZFJlc3VsdC5pdGVyYXRvcjsKICAgICBp
ZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgaXQtPnZhbHVlID0gY3JlYXRlRm9u
dFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUsIGZvbnRGYWNlRmVhdHVy
ZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKTsKQEAgLTIzMyw4ICsxODAsOCBAQCBGb250UGxhdGZv
cm1EYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmbwogICAgICAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnRQbGF0
Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250
RGVzY3JpcHRpb24sIGFsdGVybmF0ZU5hbWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2Fw
YWJpbGl0aWVzLCB0cnVlKTsKICAgICAgICAgICAgICAgICAvLyBMb29rdXAgdGhlIGtleSBpbiB0
aGUgaGFzaCB0YWJsZSBhZ2FpbiBhcyB0aGUgcHJldmlvdXMgaXRlcmF0b3IgbWF5IGhhdmUKICAg
ICAgICAgICAgICAgICAvLyBiZWVuIGludmFsaWRhdGVkIGJ5IHRoZSByZWN1cnNpdmUgY2FsbCB0
byBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKCkuCi0gICAgICAgICAgICAgICAgaXQgPSBmb250
UGxhdGZvcm1EYXRhQ2FjaGUoKS5maW5kKGtleSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGl0
ICE9IGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmVuZCgpKTsKKyAgICAgICAgICAgICAgICBpdCA9
IG1fZm9udFBsYXRmb3JtRGF0YUNhY2hlLmZpbmQoa2V5KTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoaXQgIT0gbV9mb250UGxhdGZvcm1EYXRhQ2FjaGUuZW5kKCkpOwogICAgICAgICAgICAgICAg
IGlmIChmb250UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSkKICAgICAgICAgICAgICAgICAg
ICAgaXQtPnZhbHVlID0gbWFrZVVuaXF1ZTxGb250UGxhdGZvcm1EYXRhPigqZm9udFBsYXRmb3Jt
RGF0YUZvckFsdGVybmF0ZU5hbWUpOwogICAgICAgICAgICAgfQpAQCAtMjQ0LDU3ICsxOTEsMjcg
QEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm8KICAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwog
fQogCi1zdHJ1Y3QgRm9udERhdGFDYWNoZUtleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBwbGF0Zm9ybURhdGEuaGFzaCgpOwotICAgIH0KLSAgICAgICAgIAotICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGEsIGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIGIpCi0gICAgewotICAgICAgICByZXR1cm4gYSA9PSBiOwotICAgIH0KLQotICAgIHN0
YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLX07
Ci0KLXN0cnVjdCBGb250RGF0YUNhY2hlS2V5VHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0
czxGb250UGxhdGZvcm1EYXRhPiB7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlz
WmVybyA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGVtcHR5VmFs
dWUoKQotICAgIHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRQbGF0Zm9ybURh
dGE+IGtleSgwLmYsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIHJldHVybiBrZXk7Ci0gICAgfQot
ICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShGb250UGxhdGZvcm1EYXRhJiBz
bG90KQotICAgIHsKLSAgICAgICAgbmV3IChOb3ROdWxsLCAmc2xvdCkgRm9udFBsYXRmb3JtRGF0
YShIYXNoVGFibGVEZWxldGVkVmFsdWUpOwotICAgIH0KLSAgICBzdGF0aWMgYm9vbCBpc0RlbGV0
ZWRWYWx1ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwotICAgIH0KLX07Ci0KLXR5cGVk
ZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWY8Rm9udD4sIEZvbnREYXRhQ2FjaGVLZXlI
YXNoLCBGb250RGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0YUNhY2hlOwotCi1zdGF0aWMgRm9u
dERhdGFDYWNoZSYgY2FjaGVkRm9udHMoKQorY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgRm9udENh
Y2hlOjpGb250RGF0YUNhY2hlS2V5VHJhaXRzOjplbXB0eVZhbHVlKCkKIHsKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Rm9udERhdGFDYWNoZT4gY2FjaGU7Ci0gICAgcmV0dXJuIGNhY2hlOwor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250UGxhdGZvcm1EYXRhPiBrZXkoMC5mLCBmYWxz
ZSwgZmFsc2UpOworICAgIHJldHVybiBrZXk7CiB9CiAKLSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVS
VElDQUwpCi10eXBlZGVmIEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YSwgUmVmUHRyPE9wZW5UeXBl
VmVydGljYWxEYXRhPiwgRm9udERhdGFDYWNoZUtleUhhc2gsIEZvbnREYXRhQ2FjaGVLZXlUcmFp
dHM+IEZvbnRWZXJ0aWNhbERhdGFDYWNoZTsKK3ZvaWQgRm9udENhY2hlOjpGb250RGF0YUNhY2hl
S2V5VHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9udFBsYXRmb3JtRGF0YSYgc2xvdCkK
K3sKKyAgICBuZXcgKE5vdE51bGwsICZzbG90KSBGb250UGxhdGZvcm1EYXRhKEhhc2hUYWJsZURl
bGV0ZWRWYWx1ZSk7Cit9CiAKLUZvbnRWZXJ0aWNhbERhdGFDYWNoZSYgZm9udFZlcnRpY2FsRGF0
YUNhY2hlKCkKK2Jvb2wgRm9udENhY2hlOjpGb250RGF0YUNhY2hlS2V5VHJhaXRzOjppc0RlbGV0
ZWRWYWx1ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiB2YWx1ZSkKIHsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Rm9udFZlcnRpY2FsRGF0YUNhY2hlPiBmb250VmVydGljYWxEYXRhQ2FjaGU7
Ci0gICAgcmV0dXJuIGZvbnRWZXJ0aWNhbERhdGFDYWNoZTsKKyAgICByZXR1cm4gdmFsdWUuaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKTsKIH0KIAorCisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJ
Q0FMKQogUmVmUHRyPE9wZW5UeXBlVmVydGljYWxEYXRhPiBGb250Q2FjaGU6OnZlcnRpY2FsRGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiB7Ci0gICAgYXV0byBhZGRS
ZXN1bHQgPSBmb250VmVydGljYWxEYXRhQ2FjaGUoKS5lbnN1cmUocGxhdGZvcm1EYXRhLCBbJnBs
YXRmb3JtRGF0YV0geworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9mb250VmVydGljYWxEYXRhQ2Fj
aGUuZW5zdXJlKHBsYXRmb3JtRGF0YSwgWyZwbGF0Zm9ybURhdGFdIHsKICAgICAgICAgcmV0dXJu
IE9wZW5UeXBlVmVydGljYWxEYXRhOjpjcmVhdGUocGxhdGZvcm1EYXRhKTsKICAgICB9KTsKICAg
ICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKQEAgLTMyNiwxMCArMjQzLDEwIEBA
IFJlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24sIGNvCiBSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIHsKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExvY2sp
OworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9mb250TG9jayk7CiAjZW5kaWYKLSAgICAK
LSAgICBhdXRvIGFkZFJlc3VsdCA9IGNhY2hlZEZvbnRzKCkuZW5zdXJlKHBsYXRmb3JtRGF0YSwg
WyZdIHsKKworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9mb250RGF0YUNhY2hlLmVuc3VyZShwbGF0
Zm9ybURhdGEsIFsmXSB7CiAgICAgICAgIHJldHVybiBGb250OjpjcmVhdGUocGxhdGZvcm1EYXRh
KTsKICAgICB9KTsKIApAQCAtMzQ1LDcgKzI2Miw3IEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUlu
YWN0aXZlRm9udERhdGFJZk5lZWRlZCgpCiAKICAgICBMT0coRm9udHMsICJGb250Q2FjaGU6OnB1
cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKCkgLSB1bmRlck1lbW9yeVByZXNzdXJlICVkLCBp
bmFjdGl2ZUZvbnREYXRhTGltaXQgJXUiLCB1bmRlck1lbW9yeVByZXNzdXJlLCBpbmFjdGl2ZUZv
bnREYXRhTGltaXQpOwogCi0gICAgaWYgKGNhY2hlZEZvbnRzKCkuc2l6ZSgpIDwgaW5hY3RpdmVG
b250RGF0YUxpbWl0KQorICAgIGlmIChtX2ZvbnREYXRhQ2FjaGUuc2l6ZSgpIDwgaW5hY3RpdmVG
b250RGF0YUxpbWl0KQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgaW5hY3RpdmVDb3Vu
dCA9IGluYWN0aXZlRm9udENvdW50KCk7CiAgICAgaWYgKGluYWN0aXZlQ291bnQgPD0gaW5hY3Rp
dmVGb250RGF0YUxpbWl0KQpAQCAtMzYzLDEyICsyODAsMTIgQEAgdm9pZCBGb250Q2FjaGU6OnB1
cmdlSW5hY3RpdmVGb250RGF0YSh1bnNpZ25lZCBwdXJnZUNvdW50KQogICAgIHBydW5lU3lzdGVt
RmFsbGJhY2tGb250cygpOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
Zm9udExvY2spOwogI2VuZGlmCiAKICAgICB3aGlsZSAocHVyZ2VDb3VudCkgewogICAgICAgICBW
ZWN0b3I8UmVmPEZvbnQ+LCAyMD4gZm9udHNUb0RlbGV0ZTsKLSAgICAgICAgZm9yIChhdXRvJiBm
b250IDogY2FjaGVkRm9udHMoKS52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGZvbnQg
OiBtX2ZvbnREYXRhQ2FjaGUudmFsdWVzKCkpIHsKICAgICAgICAgICAgIExPRyhGb250cywgIiB0
cnlpbmcgdG8gcHVyZ2UgZm9udCAlcyAoaGFzIG9uZSByZWYgJWQpIiwgZm9udC0+cGxhdGZvcm1E
YXRhKCkuZGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgpLCBmb250LT5oYXNPbmVSZWYoKSk7CiAg
ICAgICAgICAgICBpZiAoIWZvbnQtPmhhc09uZVJlZigpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwpAQCAtMzgwLDI1ICsyOTcsMjUgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVG
b250RGF0YSh1bnNpZ25lZCBwdXJnZUNvdW50KQogICAgICAgICBpZiAoZm9udHNUb0RlbGV0ZS5p
c0VtcHR5KCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZm9yIChhdXRvJiBmb250IDog
Zm9udHNUb0RlbGV0ZSkgewotICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gY2FjaGVkRm9udHMo
KS5yZW1vdmUoZm9udC0+cGxhdGZvcm1EYXRhKCkpOworICAgICAgICAgICAgYm9vbCBzdWNjZXNz
ID0gbV9mb250RGF0YUNhY2hlLnJlbW92ZShmb250LT5wbGF0Zm9ybURhdGEoKSk7CiAgICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwogI2lmIEVOQUJMRShPUEVOVFlQ
RV9WRVJUSUNBTCkKLSAgICAgICAgICAgIGZvbnRWZXJ0aWNhbERhdGFDYWNoZSgpLnJlbW92ZShm
b250LT5wbGF0Zm9ybURhdGEoKSk7CisgICAgICAgICAgICBtX2ZvbnRWZXJ0aWNhbERhdGFDYWNo
ZS5yZW1vdmUoZm9udC0+cGxhdGZvcm1EYXRhKCkpOwogI2VuZGlmCiAgICAgICAgIH0KICAgICB9
OwogCiAgICAgVmVjdG9yPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleT4ga2V5c1RvUmVtb3ZlOwot
ICAgIGtleXNUb1JlbW92ZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZvbnRQbGF0Zm9ybURhdGFD
YWNoZSgpLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6IGZvbnRQbGF0Zm9ybURhdGFD
YWNoZSgpKSB7Ci0gICAgICAgIGlmIChlbnRyeS52YWx1ZSAmJiAhY2FjaGVkRm9udHMoKS5jb250
YWlucygqZW50cnkudmFsdWUpKQorICAgIGtleXNUb1JlbW92ZS5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KG1fZm9udFBsYXRmb3JtRGF0YUNhY2hlLnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBlbnRy
eSA6IG1fZm9udFBsYXRmb3JtRGF0YUNhY2hlKSB7CisgICAgICAgIGlmIChlbnRyeS52YWx1ZSAm
JiAhbV9mb250RGF0YUNhY2hlLmNvbnRhaW5zKCplbnRyeS52YWx1ZSkpCiAgICAgICAgICAgICBr
ZXlzVG9SZW1vdmUudW5jaGVja2VkQXBwZW5kKGVudHJ5LmtleSk7CiAgICAgfQogCiAgICAgTE9H
KEZvbnRzLCAiIHJlbW92aW5nICVsdSBrZXlzIiwga2V5c1RvUmVtb3ZlLnNpemUoKSk7CiAKICAg
ICBmb3IgKGF1dG8mIGtleSA6IGtleXNUb1JlbW92ZSkKLSAgICAgICAgZm9udFBsYXRmb3JtRGF0
YUNhY2hlKCkucmVtb3ZlKGtleSk7CisgICAgICAgIG1fZm9udFBsYXRmb3JtRGF0YUNhY2hlLnJl
bW92ZShrZXkpOwogCiAgICAgcGxhdGZvcm1QdXJnZUluYWN0aXZlRm9udERhdGEoKTsKIH0KQEAg
LTUwMiw2NiArNDE5LDQ4IEBAIHZvaWQgRm9udENhY2hlOjp1cGRhdGVGb250Q2FzY2FkZShjb25z
dCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUsIFJlZlB0cjxGb250U2VsCiAKIHNpemVfdCBGb250
Q2FjaGU6OmZvbnRDb3VudCgpCiB7Ci0gICAgcmV0dXJuIGNhY2hlZEZvbnRzKCkuc2l6ZSgpOwor
ICAgIHJldHVybiBtX2ZvbnREYXRhQ2FjaGUuc2l6ZSgpOwogfQogCiBzaXplX3QgRm9udENhY2hl
OjppbmFjdGl2ZUZvbnRDb3VudCgpCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1fZm9udExvY2spOwogI2VuZGlmCiAgICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIGZv
ciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKKyAgICBmb3IgKGF1dG8m
IGZvbnQgOiBtX2ZvbnREYXRhQ2FjaGUudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKGZvbnQtPmhh
c09uZVJlZigpKQogICAgICAgICAgICAgKytjb3VudDsKICAgICB9CiAgICAgcmV0dXJuIGNvdW50
OwogfQogCi1zdGF0aWMgSGFzaFNldDxGb250U2VsZWN0b3IqPiogZ0NsaWVudHM7Ci0KIHZvaWQg
Rm9udENhY2hlOjphZGRDbGllbnQoRm9udFNlbGVjdG9yJiBjbGllbnQpCiB7Ci0gICAgaWYgKCFn
Q2xpZW50cykKLSAgICAgICAgZ0NsaWVudHMgPSBuZXcgSGFzaFNldDxGb250U2VsZWN0b3IqPjsK
LQotICAgIEFTU0VSVCghZ0NsaWVudHMtPmNvbnRhaW5zKCZjbGllbnQpKTsKLSAgICBnQ2xpZW50
cy0+YWRkKCZjbGllbnQpOworICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKCZjbGllbnQp
KTsKKyAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOwogfQogCiB2b2lkIEZvbnRDYWNoZTo6cmVt
b3ZlQ2xpZW50KEZvbnRTZWxlY3RvciYgY2xpZW50KQogewotICAgIEFTU0VSVChnQ2xpZW50cyk7
Ci0gICAgQVNTRVJUKGdDbGllbnRzLT5jb250YWlucygmY2xpZW50KSk7Ci0KLSAgICBnQ2xpZW50
cy0+cmVtb3ZlKCZjbGllbnQpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgZ0dlbmVyYXRp
b24gPSAwOworICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwogCi11bnNp
Z25lZCBzaG9ydCBGb250Q2FjaGU6OmdlbmVyYXRpb24oKQotewotICAgIHJldHVybiBnR2VuZXJh
dGlvbjsKKyAgICBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOwogfQogCiB2b2lkIEZvbnRDYWNo
ZTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgaWYgKCFnQ2xpZW50cykgewotICAgICAgICBBU1NFUlQo
Zm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuaXNFbXB0eSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmNsZWFyKCk7CisgICAgbV9mb250UGxh
dGZvcm1EYXRhQ2FjaGUuY2xlYXIoKTsKICNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0g
ICAgZm9udFZlcnRpY2FsRGF0YUNhY2hlKCkuY2xlYXIoKTsKKyAgICBtX2ZvbnRWZXJ0aWNhbERh
dGFDYWNoZS5jbGVhcigpOwogI2VuZGlmCiAgICAgaW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUo
KTsKIAotICAgIGdHZW5lcmF0aW9uKys7CisgICAgbV9nZW5lcmF0aW9uKys7CiAKICAgICBWZWN0
b3I8UmVmPEZvbnRTZWxlY3Rvcj4+IGNsaWVudHM7Ci0gICAgY2xpZW50cy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGdDbGllbnRzLT5zaXplKCkpOwotICAgIGZvciAoYXV0byBpdCA9IGdDbGllbnRz
LT5iZWdpbigpLCBlbmQgPSBnQ2xpZW50cy0+ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICBj
bGllbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jbGllbnRzLnNpemUoKSk7CisgICAgZm9y
IChhdXRvIGl0ID0gbV9jbGllbnRzLmJlZ2luKCksIGVuZCA9IG1fY2xpZW50cy5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KQogICAgICAgICBjbGllbnRzLnVuY2hlY2tlZEFwcGVuZCgqKml0KTsKIAog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjbGllbnRzLnNpemUoKTsgKytpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAppbmRleCBkZWNkNjdlZGFk
NjhjNzcxZjA4MmQ4ZmNiNTc4YzMxMjNkNTdmZjJlLi5kYjM5ZDM1ZTg4NDQyNTljYTFjNGYwZDdj
NzI4NTEwYzBiMThkZDU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuaApAQCAtNDgsNiArNDgsMTEgQEAKICNpbmNsdWRlICJGb250Q2FjaGVDb3JlVGV4
dC5oIgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2luY2x1ZGUgPHd0Zi9M
b2NrLmg+CisjaW5jbHVkZSA8d3RmL1JlY3Vyc2l2ZUxvY2tBZGFwdGVyLmg+CisjZW5kaWYKKwog
I2lmIE9TKFdJTkRPV1MpCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPG9iamlkbC5o
PgpAQCAtMjM0LDcgKzIzOSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZENsaWVudChGb250U2Vs
ZWN0b3ImKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250U2VsZWN0b3ImKTsKIAotICAgIHVu
c2lnbmVkIHNob3J0IGdlbmVyYXRpb24oKTsKKyAgICB1bnNpZ25lZCBzaG9ydCBnZW5lcmF0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9nZW5lcmF0aW9uOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBpbnZhbGlkYXRlKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzaXplX3QgZm9udENvdW50KCk7
CkBAIC0yOTEsMTIgKzI5Niw3OCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBBdG9tU3Ry
aW5nJiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKICAgICBzdGF0aWMg
Y29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21T
dHJpbmcmKTsKIAorICAgIHN0cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkgeworICAgICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIEZvbnRQbGF0
Zm9ybURhdGFDYWNoZUtleSgpIHsgfQorICAgICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXko
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2Vs
ZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKQorICAgICAg
ICAgICAgOiBtX2ZvbnREZXNjcmlwdGlvbktleShkZXNjcmlwdGlvbikKKyAgICAgICAgICAgICwg
bV9mYW1pbHkoZmFtaWx5KQorICAgICAgICAgICAgLCBtX2ZvbnRGYWNlRmVhdHVyZXMoZm9udEZh
Y2VGZWF0dXJlcyA/ICpmb250RmFjZUZlYXR1cmVzIDogRm9udEZlYXR1cmVTZXR0aW5ncygpKQor
ICAgICAgICAgICAgLCBtX2ZvbnRGYWNlQ2FwYWJpbGl0aWVzKGZvbnRGYWNlQ2FwYWJpbGl0aWVz
KQorICAgICAgICB7IH0KKworICAgICAgICBleHBsaWNpdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVL
ZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlIHQpCisgICAgICAgICAgICA6IG1fZm9u
dERlc2NyaXB0aW9uS2V5KHQpCisgICAgICAgIHsgfQorCisgICAgICAgIGJvb2wgaXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbktleS5pc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBG
b250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmKSBjb25zdDsKKworICAgICAgICBGb250RGVzY3JpcHRp
b25LZXkgbV9mb250RGVzY3JpcHRpb25LZXk7CisgICAgICAgIEF0b21TdHJpbmcgbV9mYW1pbHk7
CisgICAgICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MgbV9mb250RmFjZUZlYXR1cmVzOworICAgICAg
ICBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIG1fZm9udEZhY2VDYXBhYmlsaXRp
ZXM7CisgICAgfTsKKworICAgIHN0cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoIHsK
KyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hl
S2V5JiBmb250S2V5KTsKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udFBsYXRm
b3JtRGF0YUNhY2hlS2V5JiBhLCBjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGIpIHsg
cmV0dXJuIGEgPT0gYjsgfQorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CisgICAgfTsKKworICAgIHN0cnVjdCBGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXlIYXNoVHJhaXRzIDogcHVibGljIFNpbXBsZUNsYXNzSGFzaFRyYWl0czxG
b250UGxhdGZvcm1EYXRhQ2FjaGVLZXk+IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1w
dHlWYWx1ZUlzWmVybyA9IGZhbHNlOworICAgIH07CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8Rm9u
dFBsYXRmb3JtRGF0YUNhY2hlS2V5LCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4s
IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2gsIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhh
c2hUcmFpdHM+IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsKKworICAgIHN0cnVjdCBGb250RGF0YUNh
Y2hlS2V5SGFzaCB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkgeyByZXR1cm4gcGxhdGZvcm1EYXRhLmhhc2goKTsgfQor
ICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBhLCBjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworICAgIH07
CisKKyAgICBzdHJ1Y3QgRm9udERhdGFDYWNoZUtleVRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hU
cmFpdHM8Rm9udFBsYXRmb3JtRGF0YT4geworICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0
eVZhbHVlSXNaZXJvID0gdHJ1ZTsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIGVtcHR5VmFsdWUoKTsKKyAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZh
bHVlKEZvbnRQbGF0Zm9ybURhdGEmKTsKKyAgICAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFs
dWUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOworICAgIH07CisKKyAgICB0eXBlZGVmIEhhc2hN
YXA8Rm9udFBsYXRmb3JtRGF0YSwgUmVmPEZvbnQ+LCBGb250RGF0YUNhY2hlS2V5SGFzaCwgRm9u
dERhdGFDYWNoZUtleVRyYWl0cz4gRm9udERhdGFDYWNoZTsKKyNpZiBFTkFCTEUoT1BFTlRZUEVf
VkVSVElDQUwpCisgICAgdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGEsIFJlZlB0cjxP
cGVuVHlwZVZlcnRpY2FsRGF0YT4sIEZvbnREYXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0YUNhY2hl
S2V5VHJhaXRzPiBGb250VmVydGljYWxEYXRhQ2FjaGU7CisjZW5kaWYKKwogICAgIFRpbWVyIG1f
cHVyZ2VUaW1lcjsKICAgICAKICAgICBib29sIG1fc2hvdWxkTW9ja0JvbGRTeXN0ZW1Gb250Rm9y
QWNjZXNzaWJpbGl0eSB7IGZhbHNlIH07CiAKKyAgICBIYXNoU2V0PEZvbnRTZWxlY3Rvcio+IG1f
Y2xpZW50czsKKyAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGUgbV9mb250UGxhdGZvcm1EYXRhQ2Fj
aGU7CisgICAgRm9udERhdGFDYWNoZSBtX2ZvbnREYXRhQ2FjaGU7CisjaWYgRU5BQkxFKE9QRU5U
WVBFX1ZFUlRJQ0FMKQorICAgIEZvbnRWZXJ0aWNhbERhdGFDYWNoZSBtX2ZvbnRWZXJ0aWNhbERh
dGFDYWNoZTsKKyNlbmRpZgogICAgIEZvbnRDYXNjYWRlQ2FjaGUgbV9mb250Q2FzY2FkZUNhY2hl
OwogCisgICAgdW5zaWduZWQgc2hvcnQgbV9nZW5lcmF0aW9uIHsgMCB9OworCisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICBSZWN1cnNpdmVMb2NrIG1fZm9udExvY2s7CisjZW5kaWYKKwog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIExpc3RIYXNoU2V0PFN0cmluZz4gbV9zZWVuRmFtaWxp
ZXNGb3JQcmV3YXJtaW5nOwogICAgIExpc3RIYXNoU2V0PFN0cmluZz4gbV9mb250TmFtZXNSZXF1
aXJpbmdTeXN0ZW1GYWxsYmFja0ZvclByZXdhcm1pbmc7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424820</attachid>
            <date>2021-03-31 14:18:23 -0700</date>
            <delta_ts>2021-03-31 15:03:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223995-20210331221822.patch</filename>
            <type>text/plain</type>
            <size>14910</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0OTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTQ5YTY5YjI4NWQ2ZTFj
MTE3ZmYwN2FlYTY4ZTIyZTg1MTVjNWVhNi4uYzJjOTgxODQzNjY1NDgzNjExNjU3MDg2NjYwNDQ2
M2FhODY5YzU2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDIxLTAzLTMxICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBzZWxm
LWNvbnRhaW5lZCAocmVtb3ZlIHN0YXRpYyBnbG9iYWwgdmFyaWFibGVzKQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzOTk1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgVGhpcyByZWZhY3RvcnMgRm9udENhY2hl
IHNvIHRoYXQgdGhlIGlPUyBmb250IGxvY2ssIHRoZQorICAgICAgICBGb250UGxhdGZvcm1EYXRh
Q2FjaGUsIHRoZSBGb250RGF0YUNhY2hlLCB0aGUgRm9udFZlcnRpY2FsRGF0YUNhY2hlLAorICAg
ICAgICB0aGUgRm9udFNlbGVjdG9yIGNsaWVudHMgbGlzdCBhbmQgdGhlIGdlbmVyYXRpb24gY291
bnRlciBhbGwgbGl2ZSBvbgorICAgICAgICBGb250Q2FjaGUgaW5zdGVhZCBvZiBpbiBzdGF0aWMg
Z2xvYmFsIHZhcmlhYmxlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGNoYW5nZSBpbiBi
ZWhhdmlvci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OkZvbnRDYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXk6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnZlcnRpY2FsRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FjaGU6OmZvbnRGb3JQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Q2FjaGU6OmZvbnRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fj
aGU6OmluYWN0aXZlRm9udENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6YWRk
Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cmVtb3ZlQ2xpZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6aW52YWxpZGF0ZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6Omdl
bmVyYXRpb24gY29uc3QpOgorCiAyMDIxLTAzLTI0ICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW2Nzcy1ncmlkXSBEbyBub3QgYWxsb3cgbmVnYXRpdmUgaGVpZ2h0cwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKaW5kZXgg
ZmIwZjg4ZGE3OTFhM2E2MWM1N2JhY2MxYWY3MmI0NmYwY2M5MDk2ZC4uZTkzOGJmMDdmMjI2YjM4
ZDg0YzdhOGQ5MzgyYWIwOTlmZWMyOGU3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBAIC00NiwxNSArNDYsNiBAQAogI2luY2x1ZGUgIk9w
ZW5UeXBlVmVydGljYWxEYXRhLmgiCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0
ZXIuaD4KLQotc3RhdGljIFJlY3Vyc2l2ZUxvY2sgZm9udExvY2s7Ci0KLSNlbmRpZiAvLyBQTEFU
Rk9STShJT1NfRkFNSUxZKQotCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFj
ZSBXVEY7CiAKQEAgLTY2LDYgKzU3LDExIEBAIEZvbnRDYWNoZSYgRm9udENhY2hlOjpzaW5nbGV0
b24oKQogCiBGb250Q2FjaGU6OkZvbnRDYWNoZSgpCiAgICAgOiBtX3B1cmdlVGltZXIoKnRoaXMs
ICZGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKQorICAgICwgbV9mb250
UGxhdGZvcm1EYXRhQ2FjaGUobWFrZVVuaXF1ZVJlZjxGb250UGxhdGZvcm1EYXRhQ2FjaGU+KCkp
CisgICAgLCBtX2ZvbnREYXRhQ2FjaGUobWFrZVVuaXF1ZVJlZjxGb250RGF0YUNhY2hlPigpKQor
I2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICAsIG1fZm9udFZlcnRpY2FsRGF0YUNh
Y2hlKG1ha2VVbmlxdWVSZWY8Rm9udFZlcnRpY2FsRGF0YUNhY2hlPigpKQorI2VuZGlmCiB7CiB9
CiAKQEAgLTg1LDcgKzgxLDYgQEAgcHVibGljOgogICAgIHsgfQogCiAgICAgYm9vbCBpc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uS2V5Lmlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KLQogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBG
b250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgaWYg
KG1fZm9udERlc2NyaXB0aW9uS2V5ICE9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uS2V5CkBAIC0x
MjYsNyArMTIxLDcgQEAgc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2ggewogICAg
ICAgICAgICAgaGFzaGVyLmFkZChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkp
OwogICAgICAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKICAgICB9Ci0gICAgICAgICAKKwogICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgYSwgY29u
c3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBiKQogICAgIHsKICAgICAgICAgcmV0dXJuIGEg
PT0gYjsKQEAgLTEzOSwxNCArMTM0LDYgQEAgc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eUhhc2hUcmFpdHMgOiBwdWJsaWMgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEZvbnRQbGEKICAgICBz
dGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7CiB9OwogCi10eXBlZGVm
IEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5LCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4sIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2gsIEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleUhhc2hUcmFpdHM+IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsKLQotc3RhdGljIEZv
bnRQbGF0Zm9ybURhdGFDYWNoZSYgZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkKLXsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udFBsYXRmb3JtRGF0YUNhY2hlPiBjYWNoZTsKLSAgICByZXR1
cm4gY2FjaGU7Ci19Ci0KIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFt
aWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQogewogICAgIHN0YXRpYyBNYWlu
VGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gYXJpYWwoIkFyaWFsIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwpAQCAtMTk5LDkgKzE4Niw5IEBAIEZvbnRQ
bGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvCiAgICAgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZh
Y2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNh
cGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7CiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fZm9udExvY2spOwogI2VuZGlmCi0gICAgCisKICNpZiBP
UyhXSU5ET1dTKSAmJiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCiAgICAgLy8gTGVhZGluZyAi
QCIgaW4gdGhlIGZvbnQgbmFtZSBlbmFibGVzIFdpbmRvd3MgdmVydGljYWwgZmxvdyBmbGFnIGZv
ciB0aGUgZm9udC4KICAgICAvLyBCZWNhdXNlIHdlIGRvIHZlcnRpY2FsIGZsb3cgYnkgb3Vyc2Vs
dmVzLCB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgV2luZG93cyBmZWF0dXJlLgpAQCAtMjIwLDcg
KzIwNyw3IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRm
b3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvCiAKICAgICBGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXkga2V5KGZhbWlseU5hbWUsIGZvbnREZXNjcmlwdGlvbiwgZm9udEZhY2VGZWF0dXJl
cywgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwogCi0gICAgYXV0byBhZGRSZXN1bHQgPSBmb250UGxh
dGZvcm1EYXRhQ2FjaGUoKS5hZGQoa2V5LCBudWxscHRyKTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fZm9udFBsYXRmb3JtRGF0YUNhY2hlLT5hZGQoa2V5LCBudWxscHRyKTsKICAgICBGb250UGxh
dGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gYWRkUmVzdWx0Lml0ZXJhdG9yOwogICAgIGlm
IChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICBpdC0+dmFsdWUgPSBjcmVhdGVGb250
UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSwgZm9udEZhY2VGZWF0dXJl
cywgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwpAQCAtMjMzLDggKzIyMCw4IEBAIEZvbnRQbGF0Zm9y
bURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvCiAgICAgICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogZm9udFBsYXRm
b3JtRGF0YUZvckFsdGVybmF0ZU5hbWUgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnRE
ZXNjcmlwdGlvbiwgYWx0ZXJuYXRlTmFtZSwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBh
YmlsaXRpZXMsIHRydWUpOwogICAgICAgICAgICAgICAgIC8vIExvb2t1cCB0aGUga2V5IGluIHRo
ZSBoYXNoIHRhYmxlIGFnYWluIGFzIHRoZSBwcmV2aW91cyBpdGVyYXRvciBtYXkgaGF2ZQogICAg
ICAgICAgICAgICAgIC8vIGJlZW4gaW52YWxpZGF0ZWQgYnkgdGhlIHJlY3Vyc2l2ZSBjYWxsIHRv
IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoKS4KLSAgICAgICAgICAgICAgICBpdCA9IGZvbnRQ
bGF0Zm9ybURhdGFDYWNoZSgpLmZpbmQoa2V5KTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoaXQg
IT0gZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuZW5kKCkpOworICAgICAgICAgICAgICAgIGl0ID0g
bV9mb250UGxhdGZvcm1EYXRhQ2FjaGUtPmZpbmQoa2V5KTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoaXQgIT0gbV9mb250UGxhdGZvcm1EYXRhQ2FjaGUtPmVuZCgpKTsKICAgICAgICAgICAgICAg
ICBpZiAoZm9udFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUpCiAgICAgICAgICAgICAgICAg
ICAgIGl0LT52YWx1ZSA9IG1ha2VVbmlxdWU8Rm9udFBsYXRmb3JtRGF0YT4oKmZvbnRQbGF0Zm9y
bURhdGFGb3JBbHRlcm5hdGVOYW1lKTsKICAgICAgICAgICAgIH0KQEAgLTI0OSw3ICsyMzYsNyBA
QCBzdHJ1Y3QgRm9udERhdGFDYWNoZUtleUhhc2ggewogICAgIHsKICAgICAgICAgcmV0dXJuIHBs
YXRmb3JtRGF0YS5oYXNoKCk7CiAgICAgfQotICAgICAgICAgCisKICAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBhLCBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBi
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGEgPT0gYjsKQEAgLTI3NSwyNiArMjYyLDEwIEBAIHN0
cnVjdCBGb250RGF0YUNhY2hlS2V5VHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxGb250
UGxhdGZvcm1EYXRhPiB7CiAgICAgfQogfTsKIAotdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9y
bURhdGEsIFJlZjxGb250PiwgRm9udERhdGFDYWNoZUtleUhhc2gsIEZvbnREYXRhQ2FjaGVLZXlU
cmFpdHM+IEZvbnREYXRhQ2FjaGU7Ci0KLXN0YXRpYyBGb250RGF0YUNhY2hlJiBjYWNoZWRGb250
cygpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREYXRhQ2FjaGU+IGNhY2hlOwot
ICAgIHJldHVybiBjYWNoZTsKLX0KLQogI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLXR5
cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8T3BlblR5cGVWZXJ0aWNhbERh
dGE+LCBGb250RGF0YUNhY2hlS2V5SGFzaCwgRm9udERhdGFDYWNoZUtleVRyYWl0cz4gRm9udFZl
cnRpY2FsRGF0YUNhY2hlOwotCi1Gb250VmVydGljYWxEYXRhQ2FjaGUmIGZvbnRWZXJ0aWNhbERh
dGFDYWNoZSgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRWZXJ0aWNhbERhdGFD
YWNoZT4gZm9udFZlcnRpY2FsRGF0YUNhY2hlOwotICAgIHJldHVybiBmb250VmVydGljYWxEYXRh
Q2FjaGU7Ci19Ci0KIFJlZlB0cjxPcGVuVHlwZVZlcnRpY2FsRGF0YT4gRm9udENhY2hlOjp2ZXJ0
aWNhbERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQogewotICAgIGF1
dG8gYWRkUmVzdWx0ID0gZm9udFZlcnRpY2FsRGF0YUNhY2hlKCkuZW5zdXJlKHBsYXRmb3JtRGF0
YSwgWyZwbGF0Zm9ybURhdGFdIHsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZm9udFZlcnRpY2Fs
RGF0YUNhY2hlLT5lbnN1cmUocGxhdGZvcm1EYXRhLCBbJnBsYXRmb3JtRGF0YV0gewogICAgICAg
ICByZXR1cm4gT3BlblR5cGVWZXJ0aWNhbERhdGE6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOwogICAg
IH0pOwogICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwpAQCAtMzI2LDEwICsy
OTcsMTAgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY28KIFJlZjxGb250PiBGb250Q2FjaGU6OmZv
bnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQog
ewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhm
b250TG9jayk7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2ZvbnRMb2NrKTsKICNlbmRp
ZgotICAgIAotICAgIGF1dG8gYWRkUmVzdWx0ID0gY2FjaGVkRm9udHMoKS5lbnN1cmUocGxhdGZv
cm1EYXRhLCBbJl0geworCisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2ZvbnREYXRhQ2FjaGUtPmVu
c3VyZShwbGF0Zm9ybURhdGEsIFsmXSB7CiAgICAgICAgIHJldHVybiBGb250OjpjcmVhdGUocGxh
dGZvcm1EYXRhKTsKICAgICB9KTsKIApAQCAtMzQ1LDcgKzMxNiw3IEBAIHZvaWQgRm9udENhY2hl
OjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCgpCiAKICAgICBMT0coRm9udHMsICJGb250
Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKCkgLSB1bmRlck1lbW9yeVByZXNz
dXJlICVkLCBpbmFjdGl2ZUZvbnREYXRhTGltaXQgJXUiLCB1bmRlck1lbW9yeVByZXNzdXJlLCBp
bmFjdGl2ZUZvbnREYXRhTGltaXQpOwogCi0gICAgaWYgKGNhY2hlZEZvbnRzKCkuc2l6ZSgpIDwg
aW5hY3RpdmVGb250RGF0YUxpbWl0KQorICAgIGlmIChtX2ZvbnREYXRhQ2FjaGUtPnNpemUoKSA8
IGluYWN0aXZlRm9udERhdGFMaW1pdCkKICAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIGlu
YWN0aXZlQ291bnQgPSBpbmFjdGl2ZUZvbnRDb3VudCgpOwogICAgIGlmIChpbmFjdGl2ZUNvdW50
IDw9IGluYWN0aXZlRm9udERhdGFMaW1pdCkKQEAgLTM2MywxMiArMzM0LDEyIEBAIHZvaWQgRm9u
dENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEodW5zaWduZWQgcHVyZ2VDb3VudCkKICAgICBw
cnVuZVN5c3RlbUZhbGxiYWNrRm9udHMoKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7CisgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2ZvbnRMb2NrKTsKICNlbmRpZgogCiAgICAgd2hpbGUgKHB1cmdlQ291bnQpIHsK
ICAgICAgICAgVmVjdG9yPFJlZjxGb250PiwgMjA+IGZvbnRzVG9EZWxldGU7Ci0gICAgICAgIGZv
ciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChh
dXRvJiBmb250IDogbV9mb250RGF0YUNhY2hlLT52YWx1ZXMoKSkgewogICAgICAgICAgICAgTE9H
KEZvbnRzLCAiIHRyeWluZyB0byBwdXJnZSBmb250ICVzIChoYXMgb25lIHJlZiAlZCkiLCBmb250
LT5wbGF0Zm9ybURhdGEoKS5kZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCksIGZvbnQtPmhhc09u
ZVJlZigpKTsKICAgICAgICAgICAgIGlmICghZm9udC0+aGFzT25lUmVmKCkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CkBAIC0zODAsMjUgKzM1MSwyNSBAQCB2b2lkIEZvbnRDYWNoZTo6cHVy
Z2VJbmFjdGl2ZUZvbnREYXRhKHVuc2lnbmVkIHB1cmdlQ291bnQpCiAgICAgICAgIGlmIChmb250
c1RvRGVsZXRlLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBmb3IgKGF1
dG8mIGZvbnQgOiBmb250c1RvRGVsZXRlKSB7Ci0gICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBj
YWNoZWRGb250cygpLnJlbW92ZShmb250LT5wbGF0Zm9ybURhdGEoKSk7CisgICAgICAgICAgICBi
b29sIHN1Y2Nlc3MgPSBtX2ZvbnREYXRhQ2FjaGUtPnJlbW92ZShmb250LT5wbGF0Zm9ybURhdGEo
KSk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwogI2lmIEVO
QUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLSAgICAgICAgICAgIGZvbnRWZXJ0aWNhbERhdGFDYWNo
ZSgpLnJlbW92ZShmb250LT5wbGF0Zm9ybURhdGEoKSk7CisgICAgICAgICAgICBtX2ZvbnRWZXJ0
aWNhbERhdGFDYWNoZS0+cmVtb3ZlKGZvbnQtPnBsYXRmb3JtRGF0YSgpKTsKICNlbmRpZgogICAg
ICAgICB9CiAgICAgfTsKIAogICAgIFZlY3RvcjxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXk+IGtl
eXNUb1JlbW92ZTsKLSAgICBrZXlzVG9SZW1vdmUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmb250
UGxhdGZvcm1EYXRhQ2FjaGUoKS5zaXplKCkpOwotICAgIGZvciAoYXV0byYgZW50cnkgOiBmb250
UGxhdGZvcm1EYXRhQ2FjaGUoKSkgewotICAgICAgICBpZiAoZW50cnkudmFsdWUgJiYgIWNhY2hl
ZEZvbnRzKCkuY29udGFpbnMoKmVudHJ5LnZhbHVlKSkKKyAgICBrZXlzVG9SZW1vdmUucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShtX2ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+c2l6ZSgpKTsKKyAgICBm
b3IgKGF1dG8mIGVudHJ5IDogbV9mb250UGxhdGZvcm1EYXRhQ2FjaGUuZ2V0KCkpIHsKKyAgICAg
ICAgaWYgKGVudHJ5LnZhbHVlICYmICFtX2ZvbnREYXRhQ2FjaGUtPmNvbnRhaW5zKCplbnRyeS52
YWx1ZSkpCiAgICAgICAgICAgICBrZXlzVG9SZW1vdmUudW5jaGVja2VkQXBwZW5kKGVudHJ5Lmtl
eSk7CiAgICAgfQogCiAgICAgTE9HKEZvbnRzLCAiIHJlbW92aW5nICVsdSBrZXlzIiwga2V5c1Rv
UmVtb3ZlLnNpemUoKSk7CiAKICAgICBmb3IgKGF1dG8mIGtleSA6IGtleXNUb1JlbW92ZSkKLSAg
ICAgICAgZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkucmVtb3ZlKGtleSk7CisgICAgICAgIG1fZm9u
dFBsYXRmb3JtRGF0YUNhY2hlLT5yZW1vdmUoa2V5KTsKIAogICAgIHBsYXRmb3JtUHVyZ2VJbmFj
dGl2ZUZvbnREYXRhKCk7CiB9CkBAIC01MDIsNjYgKzQ3Myw0OCBAQCB2b2lkIEZvbnRDYWNoZTo6
dXBkYXRlRm9udENhc2NhZGUoY29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlLCBSZWZQdHI8
Rm9udFNlbAogCiBzaXplX3QgRm9udENhY2hlOjpmb250Q291bnQoKQogewotICAgIHJldHVybiBj
YWNoZWRGb250cygpLnNpemUoKTsKKyAgICByZXR1cm4gbV9mb250RGF0YUNhY2hlLT5zaXplKCk7
CiB9CiAKIHNpemVfdCBGb250Q2FjaGU6OmluYWN0aXZlRm9udENvdW50KCkKIHsKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExvY2spOwor
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9mb250TG9jayk7CiAjZW5kaWYKICAgICB1bnNp
Z25lZCBjb3VudCA9IDA7Ci0gICAgZm9yIChhdXRvJiBmb250IDogY2FjaGVkRm9udHMoKS52YWx1
ZXMoKSkgeworICAgIGZvciAoYXV0byYgZm9udCA6IG1fZm9udERhdGFDYWNoZS0+dmFsdWVzKCkp
IHsKICAgICAgICAgaWYgKGZvbnQtPmhhc09uZVJlZigpKQogICAgICAgICAgICAgKytjb3VudDsK
ICAgICB9CiAgICAgcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgSGFzaFNldDxGb250U2VsZWN0
b3IqPiogZ0NsaWVudHM7Ci0KIHZvaWQgRm9udENhY2hlOjphZGRDbGllbnQoRm9udFNlbGVjdG9y
JiBjbGllbnQpCiB7Ci0gICAgaWYgKCFnQ2xpZW50cykKLSAgICAgICAgZ0NsaWVudHMgPSBuZXcg
SGFzaFNldDxGb250U2VsZWN0b3IqPjsKLQotICAgIEFTU0VSVCghZ0NsaWVudHMtPmNvbnRhaW5z
KCZjbGllbnQpKTsKLSAgICBnQ2xpZW50cy0+YWRkKCZjbGllbnQpOworICAgIEFTU0VSVCghbV9j
bGllbnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKKyAgICBtX2NsaWVudHMuYWRkKCZjbGllbnQpOwog
fQogCiB2b2lkIEZvbnRDYWNoZTo6cmVtb3ZlQ2xpZW50KEZvbnRTZWxlY3RvciYgY2xpZW50KQog
ewotICAgIEFTU0VSVChnQ2xpZW50cyk7Ci0gICAgQVNTRVJUKGdDbGllbnRzLT5jb250YWlucygm
Y2xpZW50KSk7Ci0KLSAgICBnQ2xpZW50cy0+cmVtb3ZlKCZjbGllbnQpOwotfQotCi1zdGF0aWMg
dW5zaWduZWQgc2hvcnQgZ0dlbmVyYXRpb24gPSAwOworICAgIEFTU0VSVChtX2NsaWVudHMuY29u
dGFpbnMoJmNsaWVudCkpOwogCi11bnNpZ25lZCBzaG9ydCBGb250Q2FjaGU6OmdlbmVyYXRpb24o
KQotewotICAgIHJldHVybiBnR2VuZXJhdGlvbjsKKyAgICBtX2NsaWVudHMucmVtb3ZlKCZjbGll
bnQpOwogfQogCiB2b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgaWYgKCFnQ2xp
ZW50cykgewotICAgICAgICBBU1NFUlQoZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuaXNFbXB0eSgp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgp
LmNsZWFyKCk7CisgICAgbV9mb250UGxhdGZvcm1EYXRhQ2FjaGUtPmNsZWFyKCk7CiAjaWYgRU5B
QkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQotICAgIGZvbnRWZXJ0aWNhbERhdGFDYWNoZSgpLmNsZWFy
KCk7CisgICAgbV9mb250VmVydGljYWxEYXRhQ2FjaGUtPmNsZWFyKCk7CiAjZW5kaWYKICAgICBp
bnZhbGlkYXRlRm9udENhc2NhZGVDYWNoZSgpOwogCi0gICAgZ0dlbmVyYXRpb24rKzsKKyAgICBt
X2dlbmVyYXRpb24rKzsKIAogICAgIFZlY3RvcjxSZWY8Rm9udFNlbGVjdG9yPj4gY2xpZW50czsK
LSAgICBjbGllbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZ0NsaWVudHMtPnNpemUoKSk7Ci0g
ICAgZm9yIChhdXRvIGl0ID0gZ0NsaWVudHMtPmJlZ2luKCksIGVuZCA9IGdDbGllbnRzLT5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KQorICAgIGNsaWVudHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X2NsaWVudHMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX2NsaWVudHMuYmVnaW4oKSwg
ZW5kID0gbV9jbGllbnRzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIGNsaWVudHMu
dW5jaGVja2VkQXBwZW5kKCoqaXQpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNs
aWVudHMuc2l6ZSgpOyArK2kpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYWNoZS5oCmluZGV4IGRlY2Q2N2VkYWQ2OGM3NzFmMDgyZDhmY2I1NzhjMzEyM2Q1N2ZmMmUu
LmE4ZTJhZDQ2OWMyZWY2YjQ0NmE0OWI2ZWIzOWNiYjk4MGQ3NWIyNjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCkBAIC0zOSw2ICszOSw3IEBACiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KQEAgLTQ4LDYgKzQ5LDExIEBACiAjaW5jbHVkZSAi
Rm9udENhY2hlQ29yZVRleHQuaCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9SZWN1cnNpdmVMb2NrQWRhcHRl
ci5oPgorI2VuZGlmCisKICNpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNp
bmNsdWRlIDxvYmppZGwuaD4KQEAgLTU3LDExICs2MywxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBGb250Q2FzY2FkZTsKLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7CiBjbGFzcyBG
b250U2VsZWN0b3I7CiBjbGFzcyBPcGVuVHlwZVZlcnRpY2FsRGF0YTsKIGNsYXNzIEZvbnQ7CiBl
bnVtIGNsYXNzIElzRm9yUGxhdGZvcm1Gb250IDogdWludDhfdDsKK3N0cnVjdCBGb250RGF0YUNh
Y2hlS2V5SGFzaDsKK3N0cnVjdCBGb250RGF0YUNhY2hlS2V5VHJhaXRzOworc3RydWN0IEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleTsKK3N0cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNo
Oworc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2hUcmFpdHM7CiAKICNpZiBQTEFU
Rk9STShXSU4pCiAjaWYgVVNFKElNTEFOR19GT05UX0xJTksyKQpAQCAtMTk3LDYgKzIwNywxMiBA
QCBwdWJsaWM6CiAvLyBGSVhNRTogU2hvdWxkIG1ha2UgaGFzaCB0cmFpdHMgZm9yIEZvbnRDYXNj
YWRlQ2FjaGVLZXkgaW5zdGVhZCBvZiB1c2luZyBhIGhhc2ggYXMgdGhlIGtleSAoc28gd2UgaGFz
aCBhIGhhc2gpLgogdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8Rm9u
dENhc2NhZGVDYWNoZUVudHJ5PiwgQWxyZWFkeUhhc2hlZD4gRm9udENhc2NhZGVDYWNoZTsKIAor
dHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSwgc3RkOjp1bmlxdWVfcHRy
PEZvbnRQbGF0Zm9ybURhdGE+LCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoLCBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXlIYXNoVHJhaXRzPiBGb250UGxhdGZvcm1EYXRhQ2FjaGU7Cit0eXBl
ZGVmIEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YSwgUmVmPEZvbnQ+LCBGb250RGF0YUNhY2hlS2V5
SGFzaCwgRm9udERhdGFDYWNoZUtleVRyYWl0cz4gRm9udERhdGFDYWNoZTsKKyNpZiBFTkFCTEUo
T1BFTlRZUEVfVkVSVElDQUwpCit0eXBlZGVmIEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YSwgUmVm
UHRyPE9wZW5UeXBlVmVydGljYWxEYXRhPiwgRm9udERhdGFDYWNoZUtleUhhc2gsIEZvbnREYXRh
Q2FjaGVLZXlUcmFpdHM+IEZvbnRWZXJ0aWNhbERhdGFDYWNoZTsKKyNlbmRpZgorCiBjbGFzcyBG
b250Q2FjaGUgewogICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPEZvbnRDYWNo
ZT47CiAKQEAgLTIzNCw3ICsyNTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRDbGllbnQoRm9u
dFNlbGVjdG9yJik7CiAgICAgdm9pZCByZW1vdmVDbGllbnQoRm9udFNlbGVjdG9yJik7CiAKLSAg
ICB1bnNpZ25lZCBzaG9ydCBnZW5lcmF0aW9uKCk7CisgICAgdW5zaWduZWQgc2hvcnQgZ2VuZXJh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZ2VuZXJhdGlvbjsgfQogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgaW52YWxpZGF0ZSgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IGZvbnRDb3Vu
dCgpOwpAQCAtMjk1LDggKzMxMSwyMCBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgbV9zaG91
bGRNb2NrQm9sZFN5c3RlbUZvbnRGb3JBY2Nlc3NpYmlsaXR5IHsgZmFsc2UgfTsKIAorICAgIEhh
c2hTZXQ8Rm9udFNlbGVjdG9yKj4gbV9jbGllbnRzOworICAgIFVuaXF1ZVJlZjxGb250UGxhdGZv
cm1EYXRhQ2FjaGU+IG1fZm9udFBsYXRmb3JtRGF0YUNhY2hlOworICAgIFVuaXF1ZVJlZjxGb250
RGF0YUNhY2hlPiBtX2ZvbnREYXRhQ2FjaGU7CisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FM
KQorICAgIFVuaXF1ZVJlZjxGb250VmVydGljYWxEYXRhQ2FjaGU+IG1fZm9udFZlcnRpY2FsRGF0
YUNhY2hlOworI2VuZGlmCiAgICAgRm9udENhc2NhZGVDYWNoZSBtX2ZvbnRDYXNjYWRlQ2FjaGU7
CiAKKyAgICB1bnNpZ25lZCBzaG9ydCBtX2dlbmVyYXRpb24geyAwIH07CisKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQorICAgIFJlY3Vyc2l2ZUxvY2sgbV9mb250TG9jazsKKyNlbmRpZgorCiAj
aWYgUExBVEZPUk0oQ09DT0EpCiAgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiBtX3NlZW5GYW1pbGll
c0ZvclByZXdhcm1pbmc7CiAgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiBtX2ZvbnROYW1lc1JlcXVp
cmluZ1N5c3RlbUZhbGxiYWNrRm9yUHJld2FybWluZzsK
</data>

          </attachment>
      

    </bug>

</bugzilla>