<?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>139628</bug_id>
          
          <creation_ts>2014-12-14 12:39:51 -0800</creation_ts>
          <short_desc>Remove FontCachePurgePreventer</short_desc>
          <delta_ts>2015-01-24 08:49:41 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>mmaxfield</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1055508</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-12-14 12:39:51 -0800</bug_when>
    <thetext>We should only purge font cache on top of the runloop. Then this stack helper can go away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060487</commentid>
    <comment_count>1</comment_count>
      <attachid>244425</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-11 14:42:22 -0800</bug_when>
    <thetext>Created attachment 244425
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060490</commentid>
    <comment_count>2</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-11 14:58:50 -0800</bug_when>
    <thetext>https://trac.webkit.org/r178250</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060491</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-11 15:03:24 -0800</bug_when>
    <thetext>This fix rdar://problem/19431581 which was

0   com.apple.WebCore             	0x000000010a58cce0 WTF::Ref&lt;WebCore::FontGlyphs&gt;::get() + 16
1   com.apple.WebCore             	0x000000010a5893e0 WebCore::pruneUnreferencedEntriesFromFontGlyphsCache() + 176
2   com.apple.WebCore             	0x000000010a5995b2 WebCore::FontCache::purgeInactiveFontData(int) + 34
3   com.apple.WebCore             	0x000000010a59946c WebCore::FontCache::purgeInactiveFontDataIfNeeded() + 156
4   com.apple.WebCore             	0x0000000109ff962c WebCore::FontCache::enablePurging() + 108
5   com.apple.WebCore             	0x0000000109ff95b9 WebCore::FontCachePurgePreventer::~FontCachePurgePreventer() + 25
6   com.apple.WebCore             	0x0000000109ff6765 WebCore::FontCachePurgePreventer::~FontCachePurgePreventer() + 21
7   com.apple.WebCore             	0x000000010b6d036a WebCore::RenderSVGText::removeChild(WebCore::RenderObject&amp;) + 106
...
83  com.apple.WebCore             	0x000000010a589491 WebCore::pruneUnreferencedEntriesFromFontGlyphsCache() + 353
84  com.apple.WebCore             	0x000000010a589c21 WebCore::retrieveOrAddCachedFontGlyphs(WebCore::FontDescription const&amp;, WTF::PassRefPtr&lt;WebCore::FontSelector&gt;) + 1697</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063875</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-01-23 21:37:41 -0800</bug_when>
    <thetext>Looks like this was 2.5% regression on PLT (see Mavericks results)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063916</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-24 08:48:10 -0800</bug_when>
    <thetext>The regression was fixed in https://trac.webkit.org/r178673</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063917</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-24 08:49:41 -0800</bug_when>
    <thetext>Unfortunately the bot was down so the step change from the commit is not visible.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244425</attachid>
            <date>2015-01-11 14:42:22 -0800</date>
            <delta_ts>2015-01-11 14:54:52 -0800</delta_ts>
            <desc>patch</desc>
            <filename>fontcache-purgepreventer-remove-2.patch</filename>
            <type>text/plain</type>
            <size>30050</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODI0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBACisyMDE1LTAxLTExICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgRm9udENhY2hlUHVy
Z2VQcmV2ZW50ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzOTYyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgc3RhY2sgdHlwZSBpcyBidWcgcHJvbmUgYW5kIGludmFzaXZlLiBBIG1pc3Npbmcg
Rm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgaW4gYSBjb2RlIHRoYXQgdG91Y2hlcyBmb250cyBpcyBh
bHdheXMKKyAgICAgICAgYSBoYXJkLXRvLWRldGVjdCBidWcgYW5kIHRoZXJlIGFyZSBtYW55IHBs
YWNlcyB0aGF0IG5lZWQgaXQuIEluc3RlYWQgcHVyZ2UgdGhlIGZvbnQgY2FjaGUgb24gdG9wIG9m
IHRoZSBydW5sb29wLgorCisgICAgICAgIFRoZSBwdXJnZSB0aW1lciBjb3VsZCBpbiBwcmluY2lw
bGUgZmlyZSBpbiBhIG5lc3RlZCBydW5sb29wLiBIb3dldmVyIHdlIHNob3VsZCBuZXZlciBoYXZl
IHVucmVmZXJlbmNlZAorICAgICAgICBTaW1wbGVGb250RGF0YSBvYmplY3RzIGluIHRoZSBzdGFj
ayBpbiBzdWNoIGNhc2UgKEdseXBoRGF0YSBvYmplY3RzIGRvbid0IGN1cnJlbnRseSByZWYgdGhl
IGZvbnQpIGJlY2F1c2UgdGhvc2UKKyAgICAgICAgb25seSBvY2N1ciBkdXJpbmcgbGF5b3V0IGFu
ZCBwYWludGluZy4gTGF5b3V0IGFuZCBwYWludGluZyBjYW4ndCB0cmlnZ2VyIGEgbmVzdGVkIHJ1
bmxvb3BzIGFzIHRoZXJlIHdvdWxkIGJlCisgICAgICAgIGJpZ2dlciBwcm9ibGVtcy4KKworICAg
ICAgICBQdXJnaW5nIG1heSBhbHNvIGJlIHRyaWdnZXJlZCBzeW5jaHJvbm91c2x5IGJ5IGEgbWVt
b3J5IG5vdGlmaWNhdGlvbi4gVGhhdCB3b24ndCBoYXZlIGFueSBHbHlwaERhdGFzIGluIHN0YWNr
IGVpdGhlci4KKworICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6Om1lYXN1
cmVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJh
d1RleHRJbnRlcm5hbCk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVWaWV3OjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpGb250Q2FjaGUpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhY2hlOjpmb250Rm9yRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6cHVyZ2VUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6ZGlzYWJsZVB1cmdpbmcpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjplbmFibGVQdXJnaW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZVB1cmdlUHJldmVudGVyOjpGb250Q2Fj
aGVQdXJnZVByZXZlbnRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGVQ
dXJnZVByZXZlbnRlcjo6fkZvbnRDYWNoZVB1cmdlUHJldmVudGVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udDo6ZW1waGFzaXNNYXJrQXNjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmVt
cGhhc2lzTWFya0Rlc2NlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZW1waGFzaXNNYXJr
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJu
YWwuY3BwOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRpc3BsYXlDYWxs
YmFjayk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OndpZHRoV2l0aEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0F0UG9pbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayk6CisgICAgICAgICog
cGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVE
cmFnSW1hZ2VGb3JMaW5rKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV2ViQ29yZVRleHRSZW5k
ZXJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkb0RyYXdUZXh0QXRQb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJDb3JlVGV4dEZsb2F0V2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmxvY2Fs
U2VsZWN0aW9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpvZmZzZXRG
b3JQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZv
ck9mZnNldCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckltYWdlOjpzZXRJbWFnZVNpemVGb3JBbHRUZXh0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnVwZGF0
ZUZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnBhaW50SXRl
bUZvcmVncm91bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6Cisg
ICAgICAgIChSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RJbnB1
dEVsZW1lbnRCdXR0b25TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxPcGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6dXBkYXRlU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjpzdWJ0cmVlQ2hpbGRXYXNBZGRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjpzdWJ0cmVlU3R5bGVEaWRDaGFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6c3VidHJlZVRleHREaWRDaGFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6cmVtb3ZlQ2hpbGQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KToKKwog
MjAxNS0wMS0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1v
dmUgbW9yZSBTVkcgQ1NTIHByb3BlcnRpZXMgdG8gdGhlIG5ldyBTdHlsZUJ1aWxkZXIKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcAkocmV2aXNpb24gMTc4MjQ2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NyArNDIsNiBAQAogI2luY2x1ZGUgIkRPTVBhdGguaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
UGxhY2Vob2xkZXIuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJGb250Q2Fj
aGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MSW1hZ2VF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgpAQCAtMjI1Nyw4ICsyMjU2
LDYgQEAgc3RhdGljIHZvaWQgbm9ybWFsaXplU3BhY2VzKFN0cmluZyYgdGV4dAogCiBQYXNzUmVm
UHRyPFRleHRNZXRyaWNzPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6Om1lYXN1cmVUZXh0KGNv
bnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2Fj
aGVQdXJnZVByZXZlbnRlcjsKLQogICAgIFJlZlB0cjxUZXh0TWV0cmljcz4gbWV0cmljcyA9IFRl
eHRNZXRyaWNzOjpjcmVhdGUoKTsKIAogICAgIFN0cmluZyBub3JtYWxpemVkVGV4dCA9IHRleHQ7
CkBAIC0yMjkwLDggKzIyODcsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJh
d1RleHRJCiAgICAgaWYgKGZpbGwgJiYgZ3JhZGllbnQgJiYgZ3JhZGllbnQtPmlzWmVyb1NpemUo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENh
Y2hlUHVyZ2VQcmV2ZW50ZXI7Ci0KICAgICBjb25zdCBGb250JiBmb250ID0gYWNjZXNzRm9udCgp
OwogICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnQuZm9udE1ldHJpY3Mo
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gMTc4MjQ2KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRm9udENhY2hl
LmgiCiAjaW5jbHVkZSAiRm9udExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTEyMjIsNyArMTIyMSw2IEBAIHZvaWQg
RnJhbWVWaWV3OjpsYXlvdXQoYm9vbCBhbGxvd1N1YnRyZWUKICAgICAgICAgLy8gVGhlIG5leHQg
YmxvY2sgc2V0cyBtX2xheW91dFNjaGVkdWxpbmdFbmFibGVkIGJhY2sgdG8gZmFsc2Ugb25jZSBh
Z2Fpbi4KICAgICB9CiAKLSAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQdXJn
ZVByZXZlbnRlcjsKICAgICBSZW5kZXJMYXllciogbGF5ZXI7CiAKICAgICArK21fbmVzdGVkTGF5
b3V0Q291bnQ7CkBAIC0zODQ2LDggKzM4NDQsNiBAQCB2b2lkIEZyYW1lVmlldzo6cGFpbnRDb250
ZW50cyhHcmFwaGljc0NvCiAgICAgUGFpbnRpbmdTdGF0ZSBwYWludGluZ1N0YXRlOwogICAgIHdp
bGxQYWludENvbnRlbnRzKGNvbnRleHQsIGRpcnR5UmVjdCwgcGFpbnRpbmdTdGF0ZSk7CiAKLSAg
ICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVByZXZlbnRlcjsKLQogICAg
IC8vIG1fbm9kZVRvRHJhdyBpcyB1c2VkIHRvIGRyYXcgb25seSBvbmUgZWxlbWVudCAoYW5kIGl0
cyBkZXNjZW5kYW50cykKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9ub2RlVG9EcmF3
ID8gbV9ub2RlVG9EcmF3LT5yZW5kZXJlcigpIDogbnVsbHB0cjsKICAgICBSZW5kZXJMYXllciog
cm9vdExheWVyID0gcmVuZGVyVmlldy0+bGF5ZXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTc4MjQ2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTMsNyArOTMsNyBAQCBGb250Q2FjaGUmIGZvbnRDYWNoZSgpCiB9CiAKIEZvbnRD
YWNoZTo6Rm9udENhY2hlKCkKLSAgICA6IG1fcHVyZ2VQcmV2ZW50Q291bnQoMCkKKyAgICA6IG1f
cHVyZ2VUaW1lcigqdGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VUaW1lckZpcmVkKQogewogfQogCkBA
IC0zODEsNiArMzgxLDkgQEAgY29uc3QgaW50IGNUYXJnZXRVbmRlck1lbW9yeVByZXNzdXJlSW5h
YwogCiBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBm
YW1pbHksIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQogeworICAgIGlmICghbV9wdXJnZVRp
bWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fcHVyZ2VUaW1lci5zdGFydE9uZVNob3Qoc3RkOjpj
aHJvbm86Om1pbGxpc2Vjb25kczo6emVybygpKTsKKwogICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBs
YXRmb3JtRGF0YSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBm
YW1pbHksIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSk7CiAgICAgaWYgKCFwbGF0Zm9ybURhdGEpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNDAxLDYgKzQwNCwxMSBAQCBSZWY8U2ltcGxlRm9u
dERhdGE+IEZvbnRDYWNoZTo6Zm9udEZvclBsCiAgICAgcmV0dXJuICphZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlOwogfQogCit2b2lkIEZvbnRDYWNoZTo6cHVyZ2VUaW1lckZpcmVkKCkKK3sKKyAg
ICBwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCgpOworfQorCiB2b2lkIEZvbnRDYWNoZTo6
cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQoKQogewogICAgIGJvb2wgdW5kZXJNZW1vcnlQ
cmVzc3VyZSA9IG1lbW9yeVByZXNzdXJlSGFuZGxlcigpLmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgp
OwpAQCAtNDIwLDkgKzQyOCw2IEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERh
dGEoaW4KIHsKICAgICBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udEdseXBoc0NhY2hl
KCk7CiAKLSAgICBpZiAobV9wdXJnZVByZXZlbnRDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCiAj
aWYgUExBVEZPUk0oSU9TKQogICAgIEZvbnRMb2NrZXIgZm9udExvY2tlcjsKICNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHJldmlz
aW9uIDE3ODI0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjZGVmaW5lIEZvbnRDYWNoZV9o
CiAKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJUaW1lci5oIgogI2lu
Y2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KQEAgLTEwMyw3ICsxMDQsNiBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9u
Rm9udERhdGFDYWNoZUtleSB7CiB9OwogCiBjbGFzcyBGb250Q2FjaGUgewotICAgIGZyaWVuZCBj
bGFzcyBGb250Q2FjaGVQdXJnZVByZXZlbnRlcjsKICAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZl
ckRlc3Ryb3llZDxGb250Q2FjaGU+OwogCiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9udENh
Y2hlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC0xNjMsMTUgKzE2Myw5IEBAIHByaXZh
dGU6CiAgICAgRm9udENhY2hlKCk7CiAgICAgfkZvbnRDYWNoZSgpOwogCi0gICAgdm9pZCBkaXNh
YmxlUHVyZ2luZygpIHsgbV9wdXJnZVByZXZlbnRDb3VudCsrOyB9Ci0gICAgdm9pZCBlbmFibGVQ
dXJnaW5nKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3B1cmdlUHJldmVudENvdW50KTsKLSAg
ICAgICAgaWYgKCEtLW1fcHVyZ2VQcmV2ZW50Q291bnQpCi0gICAgICAgICAgICBwdXJnZUluYWN0
aXZlRm9udERhdGFJZk5lZWRlZCgpOwotICAgIH0KKyAgICB2b2lkIHB1cmdlVGltZXJGaXJlZCgp
OwogCi0gICAgdm9pZCBXRUJDT1JFX0VYUE9SVCBwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRl
ZCgpOworICAgIHZvaWQgcHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQoKTsKIAogICAgIC8v
IEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgZXZlbnR1YWxseSBiZSByZW1vdmVkLgogICAgIEZv
bnRQbGF0Zm9ybURhdGEqIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIGJvb2wgY2hlY2tpbmdBbHRlcm5h
dGVOYW1lID0gZmFsc2UpOwpAQCAtMTgzLDggKzE3Nyw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAK
LSAgICAvLyBEb24ndCBwdXJnZSBpZiB0aGlzIGNvdW50IGlzID4gMDsKLSAgICBpbnQgbV9wdXJn
ZVByZXZlbnRDb3VudDsKKyAgICBUaW1lciBtX3B1cmdlVGltZXI7CiAKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICBmcmllbmQgY2xhc3MgQ29tcGxleFRleHRDb250cm9sbGVyOwpAQCAtMTk1LDEy
ICsxODgsNiBAQCBwcml2YXRlOgogLy8gR2V0IHRoZSBnbG9iYWwgZm9udENhY2hlLgogV0VCQ09S
RV9FWFBPUlQgRm9udENhY2hlJiBmb250Q2FjaGUoKTsKIAotY2xhc3MgRm9udENhY2hlUHVyZ2VQ
cmV2ZW50ZXIgewotcHVibGljOgotICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyKCkgeyBmb250
Q2FjaGUoKS5kaXNhYmxlUHVyZ2luZygpOyB9Ci0gICAgfkZvbnRDYWNoZVB1cmdlUHJldmVudGVy
KCkgeyBmb250Q2FjaGUoKS5lbmFibGVQdXJnaW5nKCk7IH0KLX07Ci0KIH0KIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0
aC5jcHAJKHJldmlzaW9uIDE3ODI0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRGYXN0UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDYgQEAKICNp
bmNsdWRlICJGb250LmgiCiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGb250
Q2FjaGUuaCIKICNpbmNsdWRlICJGb250R2x5cGhzLmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIu
aCIKICNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCkBAIC02OSw4ICs2OCw2IEBAIGJvb2wgRm9udDo6
Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnMKIAogaW50IEZvbnQ6OmVtcGhhc2lzTWFya0Fz
Y2VudChjb25zdCBBdG9taWNTdHJpbmcmIG1hcmspIGNvbnN0CiB7Ci0gICAgRm9udENhY2hlUHVy
Z2VQcmV2ZW50ZXIgcHVyZ2VQcmV2ZW50ZXI7Ci0gICAgCiAgICAgR2x5cGhEYXRhIG1hcmtHbHlw
aERhdGE7CiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBo
RGF0YSkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtODUsOCArODIsNiBAQCBpbnQgRm9udDo6ZW1w
aGFzaXNNYXJrQXNjZW50KGNvbnN0IEF0b21pCiAKIGludCBGb250OjplbXBoYXNpc01hcmtEZXNj
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaykgY29uc3QKIHsKLSAgICBGb250Q2FjaGVQdXJn
ZVByZXZlbnRlciBwdXJnZVByZXZlbnRlcjsKLSAgICAKICAgICBHbHlwaERhdGEgbWFya0dseXBo
RGF0YTsKICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJrR2x5cGhE
YXRhKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMDEsOCArOTYsNiBAQCBpbnQgRm9udDo6ZW1w
aGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9tCiAKIGludCBGb250OjplbXBoYXNpc01hcmtIZWln
aHQoY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrKSBjb25zdAogewotICAgIEZvbnRDYWNoZVB1cmdl
UHJldmVudGVyIHB1cmdlUHJldmVudGVyOwotCiAgICAgR2x5cGhEYXRhIG1hcmtHbHlwaERhdGE7
CiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjQwLDggKzIzMyw2IEBAIGlubGluZSBzdGF0aWMgZmxv
YXQgb2Zmc2V0VG9NaWRkbGVPZkdseXAKIAogdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrcyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KSBjb25zdAogewotICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIHB1cmdl
UHJldmVudGVyOwotICAgIAogICAgIEdseXBoRGF0YSBtYXJrR2x5cGhEYXRhOwogICAgIGlmICgh
Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQogICAgICAgICBy
ZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAJ
KHJldmlzaW9uIDE3ODI0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDYgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5oIgogCiAj
aW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgogI2luY2x1ZGUgIlRl
eHRSdW4uaCIKQEAgLTEzMSw4ICsxMzAsNiBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVy
bmFsOjpkaXNwbGF5CiAjZW5kaWYKIAogICAgIGlmIChvd25lcigpLT5vd25lcigpLT5wbGF0Zm9y
bUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIob3duZXIoKSkpIHsKLSAgICAgICAgRm9udENhY2hl
UHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7Ci0KICAgICAgICAgU3RyaW5n
IHRleHQgPSBTdHJpbmc6Om51bWJlcihvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJJ
bmNyZW1lbnRSZXBhaW50Q291bnQob3duZXIoKSkpOwogCiAgICAgICAgIENHQ29udGV4dFNhdmVH
U3RhdGUoY29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0lt
YWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFn
SW1hZ2VNYWMubW0JKHJldmlzaW9uIDE3ODI0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9EcmFnSW1hZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNp
ZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogI2ltcG9ydCAiQml0bWFwSW1hZ2UuaCIKICNpbXBvcnQg
IkZvbnQuaCIKLSNpbXBvcnQgIkZvbnRDYWNoZS5oIgogI2ltcG9ydCAiRm9udERlc2NyaXB0aW9u
LmgiCiAjaW1wb3J0ICJGb250U2VsZWN0b3IuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5o
IgpAQCAtMTkyLDggKzE5MSw2IEBAIHN0YXRpYyBmbG9hdCB3aWR0aFdpdGhGb250KE5TU3RyaW5n
ICpzdHIKICAgICBbc3RyaW5nIGdldENoYXJhY3RlcnM6YnVmZmVyLmRhdGEoKV07CiAgICAgCiAg
ICAgaWYgKGNhblVzZUZhc3RSZW5kZXJlcihidWZmZXIuZGF0YSgpLCBsZW5ndGgpKSB7Ci0gICAg
ICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwotCiAg
ICAgICAgIEZvbnQgd2ViQ29yZUZvbnQoRm9udFBsYXRmb3JtRGF0YShmb250LCBbZm9udCBwb2lu
dFNpemVdKSwgIVtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGlzRHJhd2luZ1Rv
U2NyZWVuXSk7CiAgICAgICAgIFRleHRSdW4gcnVuKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCk7CiAg
ICAgICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwpAQCAtMjE4LDggKzIxNSw2IEBAIHN0
YXRpYyB2b2lkIGRyYXdBdFBvaW50KE5TU3RyaW5nICpzdHJpbmcKICAgICBbc3RyaW5nIGdldENo
YXJhY3RlcnM6YnVmZmVyLmRhdGEoKV07CiAgICAgCiAgICAgaWYgKGNhblVzZUZhc3RSZW5kZXJl
cihidWZmZXIuZGF0YSgpLCBsZW5ndGgpKSB7Ci0gICAgICAgIEZvbnRDYWNoZVB1cmdlUHJldmVu
dGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwotCiAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcg
aXMgYSBoYWxmLWFzc2VkIGF0dGVtcHQgdG8gbWF0Y2ggQXBwS2l0J3Mgcm91bmRpbmcgcnVsZXMg
Zm9yIGRyYXdBdFBvaW50LgogICAgICAgICAvLyBJdCdzIHByb2JhYmx5IGluY29ycmVjdCBmb3Ig
aGlnaCBEUEkuCiAgICAgICAgIC8vIElmIHlvdSBjaGFuZ2UgdGhpcywgYmUgc3VyZSB0byB0ZXN0
IGFsbCB0aGUgdGV4dCBkcmF3biB0aGlzIHdheSBpbiBTYWZhcmksIGluY2x1ZGluZwpAQCAtMjcy
LDggKzI2Nyw2IEBAIHN0YXRpYyB2b2lkIGRyYXdEb3VibGVkQXRQb2ludChOU1N0cmluZyAKIAog
RHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUsIEZvbnRSZW5kZXJpbmdNb2RlKQogewotICAgIEZvbnRDYWNoZVB1cmdlUHJldmVu
dGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwotCiAgICAgTlNTdHJpbmcgKmxhYmVsID0gbnNT
dHJpbmdOaWxJZkVtcHR5KHRpdGxlKTsKICAgICBOU1VSTCAqY29jb2FVUkwgPSB1cmw7CiAgICAg
TlNTdHJpbmcgKnVybFN0cmluZyA9IFtjb2NvYVVSTCBhYnNvbHV0ZVN0cmluZ107CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAkocmV2aXNpb24g
MTc4MjQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkZsb2F0Um91bmRl
ZFJlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5j
bHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0xMjYsNyArMTI1LDYgQEAgRHJhZ0ltYWdlUmVm
IGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoVVJMJgogCiAgICAgY29uc3QgRm9udCogbGFiZWxGb250
OwogICAgIGNvbnN0IEZvbnQqIHVybEZvbnQ7Ci0gICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIg
Zm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7CiAKICAgICBpZiAoZm9udFJlbmRlcmluZ01vZGUgPT0g
QWx0ZXJuYXRlUmVuZGVyaW5nTW9kZSkgewogICAgICAgICBzdGF0aWMgY29uc3QgRm9udCBhbHRl
cm5hdGVSZW5kZXJpbmdNb2RlTGFiZWxGb250ID0gZHJhZ0xhYmVsRm9udChEcmFnTGlua0xhYmVs
Rm9udHNpemUsIHRydWUsIEFsdGVybmF0ZVJlbmRlcmluZ01vZGUpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL1dlYkNvcmVUZXh0UmVuZGVyZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XZWJDb3JlVGV4dFJlbmRlcmVyLmNwcAkocmV2
aXNpb24gMTc4MjQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dlYkNvcmVUZXh0
UmVuZGVyZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAi
V2ViQ29yZVRleHRSZW5kZXJlci5oIgogCiAjaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZv
bnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlN0cmluZ1RydW5jYXRvci5oIgpAQCAtNDgsOCArNDcs
NiBAQCBzdGF0aWMgYm9vbCBpc09uZUxlZnRUb1JpZ2h0UnVuKGNvbnN0IFRlCiAKIHN0YXRpYyB2
b2lkIGRvRHJhd1RleHRBdFBvaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgU3Ry
aW5nJiB0ZXh0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IENvbG9yJiBjb2xvciwgaW50IHVuZGVybGluZWRJbmRleCkKIHsKLSAgICBGb250Q2FjaGVQdXJn
ZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVByZXZlbnRlcjsKLQogICAgIFRleHRSdW4gcnVuKHRl
eHQpOwogCiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoY29sb3IsIENvbG9yU3BhY2VEZXZpY2VS
R0IpOwpAQCAtOTQsOCArOTEsNiBAQCB2b2lkIFdlYkNvcmVEcmF3RG91YmxlZFRleHRBdFBvaW50
KEdyYXBoCiAKIGZsb2F0IFdlYkNvcmVUZXh0RmxvYXRXaWR0aChjb25zdCBTdHJpbmcmIHRleHQs
IGNvbnN0IEZvbnQmIGZvbnQpCiB7Ci0gICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENh
Y2hlUHVyZ2VQcmV2ZW50ZXI7Ci0KICAgICByZXR1cm4gU3RyaW5nVHJ1bmNhdG9yOjp3aWR0aCh0
ZXh0LCBmb250LCBTdHJpbmdUcnVuY2F0b3I6OkVuYWJsZVJvdW5kaW5nSGFja3MpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lv
biAxNzgyNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFbGxpcHNpc0Jv
eC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgpAQCAtMjY0
LDggKzI2Myw2IEBAIExheW91dFJlY3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb24KICAg
ICBpZiAoc1BvcyA+IGVQb3MpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKLSAgICBG
b250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVByZXZlbnRlcjsKLQogICAgIExh
eW91dFVuaXQgc2VsZWN0aW9uVG9wID0gdGhpcy0+c2VsZWN0aW9uVG9wKCk7CiAgICAgTGF5b3V0
VW5pdCBzZWxlY3Rpb25IZWlnaHQgPSB0aGlzLT5zZWxlY3Rpb25IZWlnaHQoKTsKICAgICBjb25z
dCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CkBAIC0xMzMxLDgg
KzEzMjgsNiBAQCBpbnQgSW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb24oZmxvCiAgICAg
aWYgKGxpbmVPZmZzZXQgLSBsb2dpY2FsTGVmdCgpIDwgMCkKICAgICAgICAgcmV0dXJuIGlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSA/IDAgOiBsZW4oKTsKIAotICAgIEZvbnRDYWNoZVB1cmdlUHJl
dmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwotCiAgICAgY29uc3QgUmVuZGVyU3R5bGUm
IGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwogICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBm
b250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKICAgICByZXR1cm4gZm9udC5vZmZzZXRG
b3JQb3NpdGlvbihjb25zdHJ1Y3RUZXh0UnVuKGxpbmVTdHlsZSwgZm9udCksIGxpbmVPZmZzZXQg
LSBsb2dpY2FsTGVmdCgpLCBpbmNsdWRlUGFydGlhbEdseXBocyk7CkBAIC0xMzQ2LDggKzEzNDEs
NiBAQCBmbG9hdCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldChpCiAgICAgaWYgKGlz
TGluZUJyZWFrKCkpCiAgICAgICAgIHJldHVybiBsb2dpY2FsTGVmdCgpOwogCi0gICAgRm9udENh
Y2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7Ci0KICAgICBjb25zdCBS
ZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAgICAgY29uc3QgRm9u
dCYgZm9udCA9IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOwogICAgIGludCBmcm9t
ID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG9mZnNldCAtIG1fc3RhcnQgOiAwOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiAxNzgy
NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTIsOCArMTkyLDYgQEAgYm9vbCBSZW5kZXJJbWFnZTo6c2V0SW1hZ2VTaXpl
Rm9yQWx0VGV4dAogCiAgICAgLy8gd2UgaGF2ZSBhbiBhbHQgYW5kIHRoZSB1c2VyIG1lYW50IGl0
IChpdHMgbm90IGEgdGV4dCB3ZSBpbnZlbnRlZCkKICAgICBpZiAoIW1fYWx0VGV4dC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2
ZW50ZXI7Ci0KICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkuZm9udCgpOwogICAg
ICAgICBJbnRTaXplIHBhZGRlZFRleHRTaXplKHBhZGRpbmdXaWR0aCArIHN0ZDo6bWluKGNlaWxm
KGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgbV9h
bHRUZXh0LCBzdHlsZSgpKSkpLCBtYXhBbHRUZXh0V2lkdGgpLCBwYWRkaW5nSGVpZ2h0ICsgc3Rk
OjptaW4oZm9udC5mb250TWV0cmljcygpLmhlaWdodCgpLCBtYXhBbHRUZXh0SGVpZ2h0KSk7CiAg
ICAgICAgIGltYWdlU2l6ZSA9IGltYWdlU2l6ZS5leHBhbmRlZFRvKHBhZGRlZFRleHRTaXplKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCShyZXZpc2lvbiAxNzgyNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1
ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0UmVuZGVyZXIuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0xheWVyLmgiCkBAIC0yMTg1LDggKzIxODQsNiBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6
cGFpbnRJbnRvTGF5ZXIoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBGb250Q2FjaGVQ
dXJnZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVByZXZlbnRlcjsKLSAgICAKICAgICBSZW5kZXJM
YXllcjo6UGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MgPSAwOwogICAgIGlmIChwYWludGluZ1Bo
YXNlICYgR3JhcGhpY3NMYXllclBhaW50QmFja2dyb3VuZCkKICAgICAgICAgcGFpbnRGbGFncyB8
PSBSZW5kZXJMYXllcjo6UGFpbnRMYXllclBhaW50aW5nQ29tcG9zaXRpbmdCYWNrZ3JvdW5kUGhh
c2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShy
ZXZpc2lvbiAxNzgyNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJEb2N1bWVu
dEV2ZW50UXVldWUuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJGb2N1
c0NvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBA
IC0xMDUsOCArMTA0LDYgQEAgSFRNTFNlbGVjdEVsZW1lbnQmIFJlbmRlckxpc3RCb3g6OnNlbGVj
dAogCiB2b2lkIFJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KCkKIHsKLSAgICBGb250
Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVByZXZlbnRlcjsKLQogICAgIGlmICht
X29wdGlvbnNDaGFuZ2VkKSB7CiAgICAgICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBs
aXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50KCkubGlzdEl0ZW1zKCk7CiAgICAgICAgIGludCBzaXpl
ID0gbnVtSXRlbXMoKTsKQEAgLTM3Miw4ICszNjksNiBAQCBzdGF0aWMgTGF5b3V0U2l6ZSBpdGVt
T2Zmc2V0Rm9yQWxpZ25tZW50CiAKIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdy
b3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
LCBpbnQgbGlzdEluZGV4KQogewotICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNo
ZVB1cmdlUHJldmVudGVyOwotCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJ
dGVtcyA9IHNlbGVjdEVsZW1lbnQoKS5saXN0SXRlbXMoKTsKICAgICBIVE1MRWxlbWVudCogbGlz
dEl0ZW1FbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRleF07CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gMTc4MjQ2KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNZW51TGlzdC5oIgog
I2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1
ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC0yMDksNyArMjA4LDYgQEAgdm9pZCBSZW5k
ZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKAogICAgIGZsb2F0IG1heE9wdGlvbldpZHRo
ID0gMDsKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0
RWxlbWVudCgpLmxpc3RJdGVtcygpOwogICAgIGludCBzaXplID0gbGlzdEl0ZW1zLnNpemUoKTsg
ICAgCi0gICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7
CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBIVE1MRWxl
bWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tpXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHJldmlzaW9uIDE3ODI0NikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTgzLDcg
KzU4Myw2IEBAIHN0YXRpYyB2b2lkIGFkanVzdElucHV0RWxlbWVudEJ1dHRvblN0eWwKICAgICBp
ZiAoZm9udC5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSAmJiAhcmVuZGVyZXIpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQ
dXJnZVByZXZlbnRlcjsKICAgICBmbG9hdCBtYXhpbXVtV2lkdGggPSBsb2NhbGl6ZWREYXRlQ2Fj
aGUoKS5tYXhpbXVtV2lkdGhGb3JEYXRlVHlwZShkYXRlVHlwZSwgZm9udCwgUmVuZGVyVGhlbWVN
ZWFzdXJlVGV4dENsaWVudChmb250LCAqcmVuZGVyZXIsIHN0eWxlKSk7CiAKICAgICBBU1NFUlQo
bWF4aW11bVdpZHRoID49IDApOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAJKHJldmlzaW9uIDE3ODI0
NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAKICNpbmNsdWRlICJSZW5k
ZXJNYXRoTUxPcGVyYXRvci5oIgogCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAi
Rm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiTWF0aE1MTmFtZXMuaCIKICNpbmNsdWRlICJQYWlu
dEluZm8uaCIKQEAgLTE2NTksOCArMTY1OCw2IEBAIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJl
dGNoeURhdGEgUmVuZGUKIAogdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUo
KQogewotICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVy
OwotCiAgICAgQVNTRVJUKGZpcnN0Q2hpbGQoKSk7CiAgICAgaWYgKCFmaXJzdENoaWxkKCkpCiAg
ICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0LmNwcAkocmV2aXNpb24gMTc4MjQ2KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NiBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKIAogI2luY2x1ZGUgIkZsb2F0UXVhZC5o
IgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgpA
QCAtMTcwLDkgKzE2OSw2IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6c3VidHJlZUNoaWxkV2FzQWRk
ZWQKICAgICBpZiAoIXNob3VsZEhhbmRsZVN1YnRyZWVNdXRhdGlvbnMoKSB8fCBkb2N1bWVudEJl
aW5nRGVzdHJveWVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEFsd2F5cyBwcm90ZWN0
IHRoZSBjYWNoZSBiZWZvcmUgY2xlYXJpbmcgdGV4dCBwb3NpdGlvbmluZyBlbGVtZW50cyB3aGVu
IHRoZSBjYWNoZSB3aWxsIHN1YnNlcXVlbnRseSBiZSByZWJ1aWx0LgotICAgIEZvbnRDYWNoZVB1
cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwotCiAgICAgLy8gVGhlIHBvc2l0
aW9uaW5nIGVsZW1lbnRzIGNhY2hlIGRvZXNuJ3QgaW5jbHVkZSB0aGUgbmV3ICdjaGlsZCcgeWV0
LiBDbGVhciB0aGUKICAgICAvLyBjYWNoZSwgYXMgdGhlIG5leHQgYnVpbGRMYXlvdXRBdHRyaWJ1
dGVzRm9yVGV4dFJlbmRlcmVyKCkgY2FsbCByZWJ1aWxkcyBpdC4KICAgICBtX2xheW91dEF0dHJp
YnV0ZXNCdWlsZGVyLmNsZWFyVGV4dFBvc2l0aW9uaW5nRWxlbWVudHMoKTsKQEAgLTI5NSw3ICsy
OTEsNiBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OnN1YnRyZWVTdHlsZURpZENoYW5nCiAKICAgICAv
LyBPbmx5IHVwZGF0ZSB0aGUgbWV0cmljcyBjYWNoZSwgYnV0IG5vdCB0aGUgdGV4dCBwb3NpdGlv
bmluZyBlbGVtZW50IGNhY2hlCiAgICAgLy8gbm9yIHRoZSBsYXlvdXQgYXR0cmlidXRlcyBjYWNo
ZWQgaW4gdGhlIGxlYWYgI3RleHQgcmVuZGVyZXJzLgotICAgIEZvbnRDYWNoZVB1cmdlUHJldmVu
dGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBkZXNj
ZW5kYW50ID0gdGV4dDsgZGVzY2VuZGFudDsgZGVzY2VuZGFudCA9IGRlc2NlbmRhbnQtPm5leHRJ
blByZU9yZGVyKHRleHQpKSB7CiAgICAgICAgIGlmIChpczxSZW5kZXJTVkdJbmxpbmVUZXh0Pigq
ZGVzY2VuZGFudCkpCiAgICAgICAgICAgICBtX2xheW91dEF0dHJpYnV0ZXNCdWlsZGVyLnJlYnVp
bGRNZXRyaWNzRm9yVGV4dFJlbmRlcmVyKGRvd25jYXN0PFJlbmRlclNWR0lubGluZVRleHQ+KCpk
ZXNjZW5kYW50KSk7CkBAIC0zMTcsOSArMzEyLDYgQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjpzdWJ0
cmVlVGV4dERpZENoYW5nZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gQWx3YXlz
IHByb3RlY3QgdGhlIGNhY2hlIGJlZm9yZSBjbGVhcmluZyB0ZXh0IHBvc2l0aW9uaW5nIGVsZW1l
bnRzIHdoZW4gdGhlIGNhY2hlIHdpbGwgc3Vic2VxdWVudGx5IGJlIHJlYnVpbHQuCi0gICAgRm9u
dENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7Ci0KICAgICAvLyBU
aGUgcG9zaXRpb25pbmcgZWxlbWVudHMgY2FjaGUgZGVwZW5kcyBvbiB0aGUgc2l6ZSBvZiBlYWNo
IHRleHQgcmVuZGVyZXIgaW4gdGhlCiAgICAgLy8gc3VidHJlZS4gSWYgdGhpcyBjaGFuZ2VzLCBj
bGVhciB0aGUgY2FjaGUuIEl0J3MgZ29pbmcgdG8gYmUgcmVidWlsdCBiZWxvdy4KICAgICBtX2xh
eW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNsZWFyVGV4dFBvc2l0aW9uaW5nRWxlbWVudHMoKTsKQEAg
LTU0NCw3ICs1MzYsNiBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OnJlbW92ZUNoaWxkKFJlbmRlck9i
CiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdpbGxCZVJlbW92ZWRGcm9tVHJlZShjaGls
ZCk7CiAKICAgICBWZWN0b3I8U1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqLCAyPiBhZmZlY3RlZEF0
dHJpYnV0ZXM7Ci0gICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2
ZW50ZXI7CiAgICAgc3VidHJlZUNoaWxkV2lsbEJlUmVtb3ZlZCgmY2hpbGQsIGFmZmVjdGVkQXR0
cmlidXRlcyk7CiAgICAgUmVuZGVyU1ZHQmxvY2s6OnJlbW92ZUNoaWxkKGNoaWxkKTsKICAgICBz
dWJ0cmVlQ2hpbGRXYXNSZW1vdmVkKGFmZmVjdGVkQXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHJldmlz
aW9uIDE3ODI0NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4
dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94LmgiCiAKLSNpbmNsdWRlICJGb250Q2Fj
aGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtMTE0LDggKzExMyw2IEBAIEZsb2F0UmVjdCBTVkdJ
bmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWMKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihzdGFydFBvc2l0aW9uIDwgZW5kUG9zaXRpb24pOwogICAgIEFTU0VSVChzdHlsZSk7
CiAKLSAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVByZXZlbnRlcjsK
LQogICAgIGZsb2F0IHNjYWxpbmdGYWN0b3IgPSByZW5kZXJlcigpLnNjYWxpbmdGYWN0b3IoKTsK
ICAgICBBU1NFUlQoc2NhbGluZ0ZhY3Rvcik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01p
c2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQkocmV2aXNpb24gMTc4MjQ2KQorKysgU291
cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjksNyArMjksNiBAQAogI2ltcG9ydCAiV2ViS2l0TlNTdHJpbmdFeHRyYXMuaCIKIAog
I2ltcG9ydCA8V2ViQ29yZS9Gb250Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZvbnRDYWNoZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4
dFJ1bi5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlTlNTdHJpbmdFeHRyYXMuaD4KQEAgLTEw
MSw4ICsxMDAsNiBAQCAtICh2b2lkKV93ZWJfZHJhd0F0UG9pbnQ6KE5TUG9pbnQpcG9pbnQgCiAg
ICAgICAgIGlmICghZmxpcHBlZCkKICAgICAgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNnQ29u
dGV4dCwgMSwgLTEpOwogCi0gICAgICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNo
ZVB1cmdlUHJldmVudGVyOwotCiAgICAgICAgIEZvbnQgd2ViQ29yZUZvbnQoRm9udFBsYXRmb3Jt
RGF0YShmb250LCBbZm9udCBwb2ludFNpemVdKSwgIVtuc0NvbnRleHQgaXNEcmF3aW5nVG9TY3Jl
ZW5dLCBmb250U21vb3RoaW5nSXNBbGxvd2VkID8gQXV0b1Ntb290aGluZyA6IEFudGlhbGlhc2Vk
KTsKICAgICAgICAgVGV4dFJ1biBydW4oYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKTsKICAgICAgICAg
cnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CkBAIC0xNDksOCArMTQ2LDYgQEAgLSAoZmxvYXQp
X3dlYl93aWR0aFdpdGhGb250OihOU0ZvbnQgKilmbwogICAgIFtzZWxmIGdldENoYXJhY3RlcnM6
YnVmZmVyLmRhdGEoKV07CiAKICAgICBpZiAoY2FuVXNlRmFzdFJlbmRlcmVyKGJ1ZmZlci5kYXRh
KCksIGxlbmd0aCkpIHsKLSAgICAgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hl
UHVyZ2VQcmV2ZW50ZXI7Ci0KICAgICAgICAgRm9udCB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1E
YXRhKGZvbnQsIFtmb250IHBvaW50U2l6ZV0pLCAhW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50
Q29udGV4dF0gaXNEcmF3aW5nVG9TY3JlZW5dKTsKICAgICAgICAgVGV4dFJ1biBydW4oYnVmZmVy
LmRhdGEoKSwgbGVuZ3RoKTsKICAgICAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYlN0cmluZ1RydW5jYXRvci5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYlN0cmluZ1RydW5jYXRvci5tbQkocmV2
aXNpb24gMTc4MjQ2KQorKysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJTdHJpbmdUcnVuY2F0
b3IubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2ltcG9ydCAiV2ViU3lz
dGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnQuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvRm9udENhY2hlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRQbGF0Zm9ybURhdGEuaD4KICNp
bXBvcnQgPFdlYkNvcmUvU3RyaW5nVHJ1bmNhdG9yLmg+CiAjaW1wb3J0IDxydW50aW1lL0luaXRp
YWxpemVUaHJlYWRpbmcuaD4KQEAgLTYwLDI1ICs1OSwyMSBAQCArICh2b2lkKWluaXRpYWxpemUK
ICsgKE5TU3RyaW5nICopY2VudGVyVHJ1bmNhdGVTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHRv
V2lkdGg6KGZsb2F0KW1heFdpZHRoCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFp
blB0cjxOU0ZvbnQ+PiBtZW51Rm9udCA9IFtOU0ZvbnQgbWVudUZvbnRPZlNpemU6MF07Ci0gICAg
V2ViQ29yZTo6Rm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7
CiAgICAgcmV0dXJuIFdlYkNvcmU6OlN0cmluZ1RydW5jYXRvcjo6Y2VudGVyVHJ1bmNhdGUoc3Ry
aW5nLCBtYXhXaWR0aCwgZm9udEZyb21OU0ZvbnQobWVudUZvbnQuZ2V0KCkuZ2V0KCkpKTsKIH0K
IAogKyAoTlNTdHJpbmcgKiljZW50ZXJUcnVuY2F0ZVN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcg
dG9XaWR0aDooZmxvYXQpbWF4V2lkdGggd2l0aEZvbnQ6KE5TRm9udCAqKWZvbnQKIHsKLSAgICBX
ZWJDb3JlOjpGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVByZXZlbnRlcjsK
ICAgICByZXR1cm4gV2ViQ29yZTo6U3RyaW5nVHJ1bmNhdG9yOjpjZW50ZXJUcnVuY2F0ZShzdHJp
bmcsIG1heFdpZHRoLCBmb250RnJvbU5TRm9udChmb250KSk7CiB9CiAKICsgKE5TU3RyaW5nICop
cmlnaHRUcnVuY2F0ZVN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgdG9XaWR0aDooZmxvYXQpbWF4
V2lkdGggd2l0aEZvbnQ6KE5TRm9udCAqKWZvbnQKIHsKLSAgICBXZWJDb3JlOjpGb250Q2FjaGVQ
dXJnZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVByZXZlbnRlcjsKICAgICByZXR1cm4gV2ViQ29y
ZTo6U3RyaW5nVHJ1bmNhdG9yOjpyaWdodFRydW5jYXRlKHN0cmluZywgbWF4V2lkdGgsIGZvbnRG
cm9tTlNGb250KGZvbnQpKTsKIH0KIAogKyAoZmxvYXQpd2lkdGhPZlN0cmluZzooTlNTdHJpbmcg
KilzdHJpbmcgZm9udDooTlNGb250ICopZm9udAogewotICAgIFdlYkNvcmU6OkZvbnRDYWNoZVB1
cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwogICAgIHJldHVybiBXZWJDb3Jl
OjpTdHJpbmdUcnVuY2F0b3I6OndpZHRoKHN0cmluZywgZm9udEZyb21OU0ZvbnQoZm9udCkpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlz
aW9uIDE3ODI0NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0J
KHdvcmtpbmcgY29weSkKQEAgLTQ4NzgsNyArNDg3OCw2IEBAIHN0YXRpYyBOU1N0cmluZyAqZm9u
dE5hbWVGb3JEZXNjcmlwdGlvbigKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKGl0YWxp
Yyk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChib2xkID8gRm9udFdlaWdodDkwMCA6
IEZvbnRXZWlnaHQ1MDApOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHBv
aW50U2l6ZSk7Ci0gICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgcHVyZ2VQcmV2ZW50ZXI7CiAg
ICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YSA9IGZvbnRDYWNoZSgpLmZv
bnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKICAgICByZXR1cm4gW3Np
bXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKSBmb250TmFtZV07CiB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRHcmFwaGljcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC93aW4vV2ViS2l0R3JhcGhpY3MuY3BwCShyZXZpc2lvbiAxNzgyNDYpCisrKyBT
b3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRHcmFwaGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDYgQEAKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgogCiAjaW5jbHVkZSA8V2Vi
Q29yZS9Gb250Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Gb250Q2FjaGUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ZvbnREZXNjcmlwdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRm9udFNlbGVjdG9y
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KQEAgLTExNCw4ICsxMTMs
NiBAQCB1bnNpZ25lZCBDZW50ZXJUcnVuY2F0ZVN0cmluZ1RvV2lkdGgoTFBDCiB7CiAgICAgQVNT
RVJUKGJ1ZmZlcik7CiAKLSAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQdXJn
ZVByZXZlbnRlcjsKLQogICAgIFN0cmluZyByZXN1bHQgPSBTdHJpbmdUcnVuY2F0b3I6OmNlbnRl
clRydW5jYXRlKFN0cmluZyh0ZXh0LCBsZW5ndGgpLCB3aWR0aCwgbWFrZUZvbnQoZGVzY3JpcHRp
b24pLCBTdHJpbmdUcnVuY2F0b3I6OkVuYWJsZVJvdW5kaW5nSGFja3MpOwogICAgIFN0cmluZ1Zp
ZXcocmVzdWx0KS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChidWZmZXIpOwogICAgIGJ1ZmZl
cltyZXN1bHQubGVuZ3RoKCldID0gJ1wwJzsKQEAgLTEyNiw4ICsxMjMsNiBAQCB1bnNpZ25lZCBS
aWdodFRydW5jYXRlU3RyaW5nVG9XaWR0aChMUENUCiB7CiAgICAgQVNTRVJUKGJ1ZmZlcik7CiAK
LSAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVByZXZlbnRlcjsKLQog
ICAgIFN0cmluZyByZXN1bHQgPSBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUoU3RyaW5n
KHRleHQsIGxlbmd0aCksIHdpZHRoLCBtYWtlRm9udChkZXNjcmlwdGlvbiksIFN0cmluZ1RydW5j
YXRvcjo6RW5hYmxlUm91bmRpbmdIYWNrcyk7CiAgICAgU3RyaW5nVmlldyhyZXN1bHQpLmdldENo
YXJhY3RlcnNXaXRoVXBjb252ZXJ0KGJ1ZmZlcik7CiAgICAgYnVmZmVyW3Jlc3VsdC5sZW5ndGgo
KV0gPSAnXDAnOwo=
</data>
<flag name="review"
          id="269357"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>