<?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>141754</bug_id>
          
          <creation_ts>2015-02-18 08:17:25 -0800</creation_ts>
          <short_desc>Rename FontGlyphs to FontCascadeFonts</short_desc>
          <delta_ts>2015-02-18 14:23:39 -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>commit-queue</cc>
    
    <cc>mmaxfield</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1070111</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-18 08:17:25 -0800</bug_when>
    <thetext>The name is misleading.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070112</commentid>
    <comment_count>1</comment_count>
      <attachid>246816</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-18 08:24:49 -0800</bug_when>
    <thetext>Created attachment 246816
patch

FontGlyphs -&gt; FontCascadeFonts

Not a great name but the best I could come up with. FontCascadeImpl would be more vague.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070150</commentid>
    <comment_count>2</comment_count>
      <attachid>246828</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-18 11:19:29 -0800</bug_when>
    <thetext>Created attachment 246828
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070154</commentid>
    <comment_count>3</comment_count>
      <attachid>246829</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-18 11:30:58 -0800</bug_when>
    <thetext>Created attachment 246829
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070177</commentid>
    <comment_count>4</comment_count>
      <attachid>246829</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-02-18 12:04:40 -0800</bug_when>
    <thetext>Comment on attachment 246829
another

r=me :|

     1&gt;..\platform\graphics\win\FontWin.cpp(30): fatal error C1083: Cannot open include file: &apos;FontGlyphs.h&apos;: No such file or directory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070184</commentid>
    <comment_count>5</comment_count>
      <attachid>246836</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-18 12:09:01 -0800</bug_when>
    <thetext>Created attachment 246836
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070196</commentid>
    <comment_count>6</comment_count>
      <attachid>246841</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-18 12:38:41 -0800</bug_when>
    <thetext>Created attachment 246841
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070228</commentid>
    <comment_count>7</comment_count>
      <attachid>246841</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-18 14:23:35 -0800</bug_when>
    <thetext>Comment on attachment 246841
another

Clearing flags on attachment: 246841

Committed r180294: &lt;http://trac.webkit.org/changeset/180294&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070229</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-18 14:23:39 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246816</attachid>
            <date>2015-02-18 08:24:49 -0800</date>
            <delta_ts>2015-02-18 11:19:29 -0800</delta_ts>
            <desc>patch</desc>
            <filename>rename-font-glyphs-2.patch</filename>
            <type>text/plain</type>
            <size>74981</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE1LTAyLTE4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgRm9udEdseXBocwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNzU0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSXRzIHB1cnBv
c2UgaXMgdG8gb3duIHRvIGNyZWF0ZSBhbmQgb3duIHRoZSByZWFsaXplZCBGb250IGluc3RhbmNl
cyBhbmQgdGhlIGFzc29jaWF0ZWQgY2FjaGVzLgorCisgICAgICAgIEZvbnRHbHlwaHMgLT4gRm9u
dENhc2NhZGVGb250cworCiAyMDE1LTAyLTE4ICBUaW1vdGh5IEhvcnRvbiAgPHRpbW90aHlfaG9y
dG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgbW9yZSByZWZlcmVuY2VzIHRvIFdlYkNv
cmUuZXhwLmluCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODAyNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ3MjQsOCAr
NDcyNCw4IEBACiAJCUIyQzNEQTY0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTUzMEQwMDZDRDYw
MEVGNkYyNiAvKiBGb250LmNwcCAqLzsgfTsKIAkJQjJDM0RBNjUwRDAwNkNENjAwRUY2RjI2IC8q
IEZvbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
QzNEQTU0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNjYwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnREZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjJDM0RBNTUwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnREZXNjcmlwdGlvbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUIyQzNEQTY3MEQw
MDZDRDYwMEVGNkYyNiAvKiBGb250R2x5cGhzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTU2MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250R2x5
cGhzLmNwcCAqLzsgfTsKLQkJQjJDM0RBNjgwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTU3
MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250R2x5cGhzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQjJDM0RBNjcwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYXNjYWRlRm9udHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlRm9udHMuY3Bw
ICovOyB9OworCQlCMkMzREE2ODBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGVGb250cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTcw
RDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlRm9udHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2QjBEMDA2Q0Q2MDBFRjZGMjYg
LyogRm9udFNlbGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMkMzREE1QTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udFNlbGVjdG9yLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNkMwRDAw
NkNENjAwRUY2RjI2IC8qIEdseXBoQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1QjBEMDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhCdWZm
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlC
MkM5NkQ4RDBCM0FGMkI3MDA1RTgwRUMgLyogSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzk2RDhDMEIzQUYyQjcw
MDVFODBFQyAvKiBKU1NWR1BhdGhTZWdDdXN0b20uY3BwICovOyB9OwpAQCAtMTIxMjUsOCArMTIx
MjUsOCBAQAogCQlCMkMzREE1MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQzNEQTU0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyQzNEQTU1MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250RGVzY3JpcHRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnREZXNjcmlwdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCMkMzREE1NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEds
eXBocy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udEdseXBo
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQzNEQTU3MEQwMDZDRDYwMEVG
NkYyNiAvKiBGb250R2x5cGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
b250R2x5cGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyQzNEQTU2MEQwMDZD
RDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZUZvbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGb250Q2FzY2FkZUZvbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQjJDM0RBNTcwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlRm9udHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYXNjYWRlRm9udHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBNUEwRDAwNkNENjAwRUY2RjI2IC8q
IEZvbnRTZWxlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udFNl
bGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTVCMEQwMDZDRDYw
MEVGNkYyNiAvKiBHbHlwaEJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR2x5cGhCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDOTZEOEMw
QjNBRjJCNzAwNUU4MEVDIC8qIEpTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNDk0LDggKzIwNDk0LDYgQEAKIAkJCQlCMjc1MzUzODBC
MDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuY3BwICovLAogCQkJCUIyNzUzNTM5MEIwNTM4MTQwMDJD
RTY0RiAvKiBDb2xvci5oICovLAogCQkJCTkzODJERjU3MTBBOEQ1QzkwMDkyNTY1MiAvKiBDb2xv
clNwYWNlLmggKi8sCi0JCQkJQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRl
LmNwcCAqLywKLQkJCQlCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAq
LywKIAkJCQkyRDJGQzA1NDE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1h
Z2UuY3BwICovLAogCQkJCTJEMkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZS5oICovLAogCQkJCUE4Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBEYXNoQXJy
YXkuaCAqLywKQEAgLTIwNTI0LDE0ICsyMDUyMiwxNiBAQAogCQkJCUJDQjkyRDRFMTI5MzU1MEIw
MEM4Mzg3RiAvKiBGb250QmFzZWxpbmUuaCAqLywKIAkJCQlCMkMzREE1MTBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udENhY2hlLmNwcCAqLywKIAkJCQlCMkMzREE1MjBEMDA2Q0Q2MDBFRjZGMjYgLyog
Rm9udENhY2hlLmggKi8sCisJCQkJQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNj
YWRlLmNwcCAqLywKKwkJCQlCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUu
aCAqLywKKwkJCQlCMkMzREE1NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGVGb250cy5j
cHAgKi8sCisJCQkJQjJDM0RBNTcwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlRm9udHMu
aCAqLywKIAkJCQkzN0FDQ0U2MjBEQTJBQTk2MDA4OUU2MDIgLyogRm9udERlc2NyaXB0aW9uLmNw
cCAqLywKIAkJCQlCMkMzREE1NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udERlc2NyaXB0aW9uLmgg
Ki8sCiAJCQkJNEE2RTlGQzUxM0MxN0Q1NzAwNDZBN0Y4IC8qIEZvbnRGZWF0dXJlU2V0dGluZ3Mu
Y3BwICovLAogCQkJCTRBNkU5RkM2MTNDMTdENTcwMDQ2QTdGOCAvKiBGb250RmVhdHVyZVNldHRp
bmdzLmggKi8sCiAJCQkJRTQ0RUUzQTYxNzU3NkU1NTAwRUVFOENGIC8qIEZvbnRHZW5lcmljRmFt
aWxpZXMuY3BwICovLAogCQkJCUU0NEVFM0E3MTc1NzZFNTUwMEVFRThDRiAvKiBGb250R2VuZXJp
Y0ZhbWlsaWVzLmggKi8sCi0JCQkJQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRHbHlw
aHMuY3BwICovLAotCQkJCUIyQzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250R2x5cGhzLmgg
Ki8sCiAJCQkJMDg0NTY4MDcxMkI5MERBNjAwOTYwQTlGIC8qIEZvbnRNZXRyaWNzLmggKi8sCiAJ
CQkJRjdBMDM0QzMxMjZCRjZCRTAwN0RDMTlFIC8qIEZvbnRPcmllbnRhdGlvbi5oICovLAogCQkJ
CTg0QjYyNjg0MTMzMTM4RjkwMDk1QTQ4OSAvKiBGb250UGxhdGZvcm1EYXRhLmNwcCAqLywKQEAg
LTI0NDE1LDcgKzI0NDE1LDcgQEAKIAkJCQlCMkFGRkM3RTBEMDBBNUMxMDAzMDA3NEQgLyogRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNjYwRDAwNkNE
NjAwRUY2RjI2IC8qIEZvbnREZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEE2RTlG
QzgxM0MxN0Q1NzAwNDZBN0Y4IC8qIEZvbnRGZWF0dXJlU2V0dGluZ3MuaCBpbiBIZWFkZXJzICov
LAotCQkJCUIyQzNEQTY4MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250R2x5cGhzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlCMkMzREE2ODBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGVGb250cy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDA5RUJEQjYxNkI3RUVBMzAwQ0JBM0ZDIC8qIEZvbnRMb2Fk
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NDU2ODA4MTJCOTBEQTYwMDk2MEE5RiAvKiBGb250
TWV0cmljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjdBMDM0QzQxMjZCRjZCRTAwN0RDMTlFIC8q
IEZvbnRPcmllbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzg5Nyw3ICsyNzg5Nyw3IEBA
CiAJCQkJMzdBQ0NGNjkwREE0MTRFNzAwODlFNjAyIC8qIEZvbnREZXNjcmlwdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk0QTZFOUZDNzEzQzE3RDU3MDA0NkE3RjggLyogRm9udEZlYXR1cmVT
ZXR0aW5ncy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDRFRTNBODE3NTc3RUJEMDBFRUU4Q0Yg
LyogRm9udEdlbmVyaWNGYW1pbGllcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMkMzREE2NzBE
MDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMkMz
REE2NzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGVGb250cy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlGRDk2Qzk5NzE5ODJGQkRGMDA4NkUxNTYgLyogRm9udExvYWRlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCMkFGRkM4MDBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhc2NhZGVDb2Nv
YS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg0QjYyNjg1MTMzMTM4RjkwMDk1QTQ4OSAvKiBGb250
UGxhdGZvcm1EYXRhLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9TZXR0aW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy5jcHAJKHJldmlzaW9uIDE4MDI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyB2b2lkIHNldEltYWdl
TG9hZGluZ1NldHRpbmdzKFBhZ2UKIAogc3RhdGljIHZvaWQgaW52YWxpZGF0ZUFmdGVyR2VuZXJp
Y0ZhbWlseUNoYW5nZShQYWdlKiBwYWdlKQogewotICAgIGludmFsaWRhdGVGb250R2x5cGhzQ2Fj
aGUoKTsKKyAgICBpbnZhbGlkYXRlRm9udENhc2NhZGVDYWNoZSgpOwogICAgIGlmIChwYWdlKQog
ICAgICAgICBwYWdlLT5zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkocmV2
aXNpb24gMTgwMjY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkZvbnRD
YWNoZS5oIgogCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJGb250R2x5cGhz
LmgiCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rv
ci5oIgogI2luY2x1ZGUgIk1lbW9yeVByZXNzdXJlSGFuZGxlci5oIgpAQCAtNDI2LDcgKzQyNSw3
IEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk4KIAogdm9pZCBGb250
Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbnQgcHVyZ2VDb3VudCkKIHsKLSAgICBwcnVu
ZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udEdseXBoc0NhY2hlKCk7CisgICAgcHJ1bmVVbnJl
ZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRDYXNjYWRlQ2FjaGUoKTsKICAgICBwcnVuZVN5c3RlbUZh
bGxiYWNrRm9udHMoKTsKIAogI2lmIFBMQVRGT1JNKElPUykKQEAgLTUzNSw3ICs1MzQsNyBAQCB2
b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZSgpCiAgICAgfQogCiAgICAgZm9udFBsYXRmb3JtRGF0
YUNhY2hlKCkuY2xlYXIoKTsKLSAgICBpbnZhbGlkYXRlRm9udEdseXBoc0NhY2hlKCk7CisgICAg
aW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUoKTsKIAogICAgIGdHZW5lcmF0aW9uKys7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHAJKHJldmlzaW9uIDE4MDI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYXNjYWRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCB0ZW1wbGF0
ZSA8PiB2b2lkIGRlbGV0ZU93bmVkUHRyPFdlYkNvcmU6CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotc3RhdGljIFJlZjxGb250R2x5cGhzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udEdseXBocyhj
b25zdCBGb250RGVzY3JpcHRpb24mLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOworc3RhdGlj
IFJlZjxGb250Q2FzY2FkZUZvbnRzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKIAogY29uc3QgdWludDhf
dCBGb250Q2FzY2FkZTo6c19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdID0gewogICAg
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEgLypcdCovLCAxIC8qXG4qLywgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKQEAg
LTEyNSw4ICsxMjUsOCBAQCBGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udERlc2Ny
CiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3Jt
LWluZGVwZW5kZW50LgotRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotICAgIDog
bV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnQpKQorRm9udENh
c2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBGb250
U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKKyAgICA6IG1fZm9udHMoRm9udENhc2Nh
ZGVGb250czo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkKICAgICAsIG1fbGV0dGVy
U3BhY2luZygwKQogICAgICwgbV93b3JkU3BhY2luZygwKQogICAgICwgbV91c2VCYWNrc2xhc2hB
c1llblN5bWJvbChmYWxzZSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBGb250Q2FzY2FkZTo6Rm9udENh
c2NhZGUoY29uc3QgRm9udFBsYXRmCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25z
dHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KICNpZiBQTEFURk9STShJT1MpCiBGb250Q2Fz
Y2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udCwgUGFzc1JlZlB0
cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKLSAgICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6
OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250KSkKKyAgICA6IG1fZ2x5cGhzKEZvbnRDYXNjYWRl
Rm9udHM6OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250KSkKICAgICAsIG1fbGV0dGVyU3BhY2lu
ZygwKQogICAgICwgbV93b3JkU3BhY2luZygwKQogICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVz
KGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkpCkBAIC0xNTQsMTMgKzE1NCwxMyBAQCBGb250
Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udFBsYXRmCiAgICAgbV9mb250RGVzY3JpcHRp
b24uc2V0Q29tcHV0ZWRTaXplKENURm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsKICAgICBtX2Zv
bnREZXNjcmlwdGlvbi5zZXRJc0l0YWxpYyhDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5
Rm9udCkgJiBrQ1RGb250VHJhaXRJdGFsaWMpOwogICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFdl
aWdodCgoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMocHJpbWFyeUZvbnQpICYga0NURm9udFRyYWl0
Qm9sZCkgPyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3JtYWwpOwotICAgIG1fZ2x5cGhz
ID0gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMobV9mb250RGVzY3JpcHRpb24sIGZvbnRT
ZWxlY3Rvci5nZXQoKSk7CisgICAgbV9nbHlwaHMgPSByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udENh
c2NhZGVGb250cyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKIH0KICNl
bmRpZgogCiBGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udENhc2NhZGUmIG90aGVy
KQogICAgIDogbV9mb250RGVzY3JpcHRpb24ob3RoZXIubV9mb250RGVzY3JpcHRpb24pCi0gICAg
LCBtX2dseXBocyhvdGhlci5tX2dseXBocykKKyAgICAsIG1fZm9udHMob3RoZXIubV9mb250cykK
ICAgICAsIG1fbGV0dGVyU3BhY2luZyhvdGhlci5tX2xldHRlclNwYWNpbmcpCiAgICAgLCBtX3dv
cmRTcGFjaW5nKG90aGVyLm1fd29yZFNwYWNpbmcpCiAgICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVu
U3ltYm9sKG90aGVyLm1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2wpCkBAIC0xNzEsNyArMTcxLDcg
QEAgRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRDYXNjYQogRm9udENhc2NhZGUm
IEZvbnRDYXNjYWRlOjpvcGVyYXRvcj0oY29uc3QgRm9udENhc2NhZGUmIG90aGVyKQogewogICAg
IG1fZm9udERlc2NyaXB0aW9uID0gb3RoZXIubV9mb250RGVzY3JpcHRpb247Ci0gICAgbV9nbHlw
aHMgPSBvdGhlci5tX2dseXBoczsKKyAgICBtX2ZvbnRzID0gb3RoZXIubV9mb250czsKICAgICBt
X2xldHRlclNwYWNpbmcgPSBvdGhlci5tX2xldHRlclNwYWNpbmc7CiAgICAgbV93b3JkU3BhY2lu
ZyA9IG90aGVyLm1fd29yZFNwYWNpbmc7CiAgICAgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCA9
IG90aGVyLm1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2w7CkBAIC0xODYsMjEgKzE4NiwyMSBAQCBi
b29sIEZvbnRDYXNjYWRlOjpvcGVyYXRvcj09KGNvbnN0IEZvbnRDCiAKICAgICBpZiAobV9mb250
RGVzY3JpcHRpb24gIT0gb3RoZXIubV9mb250RGVzY3JpcHRpb24gfHwgbV9sZXR0ZXJTcGFjaW5n
ICE9IG90aGVyLm1fbGV0dGVyU3BhY2luZyB8fCBtX3dvcmRTcGFjaW5nICE9IG90aGVyLm1fd29y
ZFNwYWNpbmcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9nbHlwaHMgPT0gb3Ro
ZXIubV9nbHlwaHMpCisgICAgaWYgKG1fZm9udHMgPT0gb3RoZXIubV9mb250cykKICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgaWYgKCFtX2dseXBocyB8fCAhb3RoZXIubV9nbHlwaHMpCisgICAg
aWYgKCFtX2ZvbnRzIHx8ICFvdGhlci5tX2ZvbnRzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKG1fZ2x5cGhzLT5mb250U2VsZWN0b3IoKSAhPSBvdGhlci5tX2dseXBocy0+Zm9udFNl
bGVjdG9yKCkpCisgICAgaWYgKG1fZm9udHMtPmZvbnRTZWxlY3RvcigpICE9IG90aGVyLm1fZm9u
dHMtPmZvbnRTZWxlY3RvcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgLy8gQ2FuIHRo
ZXNlIGNhc2VzIGFjdHVhbGx5IHNvbWVob3cgb2NjdXI/IEFsbCBmb250cyBzaG91bGQgZ2V0IHdp
cGVkIG91dCBieSBmdWxsIHN0eWxlIHJlY2FsYy4KLSAgICBpZiAobV9nbHlwaHMtPmZvbnRTZWxl
Y3RvclZlcnNpb24oKSAhPSBvdGhlci5tX2dseXBocy0+Zm9udFNlbGVjdG9yVmVyc2lvbigpKQor
ICAgIGlmIChtX2ZvbnRzLT5mb250U2VsZWN0b3JWZXJzaW9uKCkgIT0gb3RoZXIubV9mb250cy0+
Zm9udFNlbGVjdG9yVmVyc2lvbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1f
Z2x5cGhzLT5nZW5lcmF0aW9uKCkgIT0gb3RoZXIubV9nbHlwaHMtPmdlbmVyYXRpb24oKSkKKyAg
ICBpZiAobV9mb250cy0+Z2VuZXJhdGlvbigpICE9IG90aGVyLm1fZm9udHMtPmdlbmVyYXRpb24o
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdHJ1Y3Qg
Rm9udEdseXBoc0NhY2hlS2V5IHsKK3N0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5IHsKICAgICAv
LyBUaGlzIHBhcnQgb2YgdGhlIGtleSBpcyBzaGFyZWQgd2l0aCB0aGUgbG93ZXIgbGV2ZWwgRm9u
dENhY2hlIChjYWNoaW5nIEZvbnREYXRhIG9iamVjdHMpLgogICAgIEZvbnREZXNjcmlwdGlvbkZv
bnREYXRhQ2FjaGVLZXkgZm9udERlc2NyaXB0aW9uQ2FjaGVLZXk7CiAgICAgVmVjdG9yPEF0b21p
Y1N0cmluZywgMz4gZmFtaWxpZXM7CkBAIC0yMDksMjAgKzIwOSwyMCBAQCBzdHJ1Y3QgRm9udEds
eXBoc0NhY2hlS2V5IHsKICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JGbGFnczsKIH07CiAKLXN0
cnVjdCBGb250R2x5cGhzQ2FjaGVFbnRyeSB7CitzdHJ1Y3QgRm9udENhc2NhZGVDYWNoZUVudHJ5
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBGb250R2x5cGhz
Q2FjaGVFbnRyeShGb250R2x5cGhzQ2FjaGVLZXkmJiBrLCBSZWY8Rm9udEdseXBocz4mJiBnKQot
ICAgICAgICA6IGtleShXVEY6Om1vdmUoaykpCi0gICAgICAgICwgZ2x5cGhzKFdURjo6bW92ZShn
KSkKKyAgICBGb250Q2FzY2FkZUNhY2hlRW50cnkoRm9udENhc2NhZGVDYWNoZUtleSYmIGtleSwg
UmVmPEZvbnRDYXNjYWRlRm9udHM+JiYgZm9udHMpCisgICAgICAgIDoga2V5KFdURjo6bW92ZShr
ZXkpKQorICAgICAgICAsIGZvbnRzKFdURjo6bW92ZShmb250cykpCiAgICAgeyB9Ci0gICAgRm9u
dEdseXBoc0NhY2hlS2V5IGtleTsKLSAgICBSZWY8Rm9udEdseXBocz4gZ2x5cGhzOworICAgIEZv
bnRDYXNjYWRlQ2FjaGVLZXkga2V5OworICAgIFJlZjxGb250Q2FzY2FkZUZvbnRzPiBmb250czsK
IH07CiAKLXR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRyPEZvbnRHbHlw
aHNDYWNoZUVudHJ5PiwgQWxyZWFkeUhhc2hlZD4gRm9udEdseXBoc0NhY2hlOwordHlwZWRlZiBI
YXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udENhc2NhZGVDYWNoZUVudHJ5Piwg
QWxyZWFkeUhhc2hlZD4gRm9udENhc2NhZGVDYWNoZTsKIAotc3RhdGljIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBGb250R2x5cGhzQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRHbHlwaHNDYWNoZUtleSYg
YikKK3N0YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYgYSwg
Y29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYgYikKIHsKICAgICBpZiAoYS5mb250RGVzY3JpcHRp
b25DYWNoZUtleSAhPSBiLmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0yMzcsMjEgKzIzNywyMSBAQCBzdGF0aWMgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZvbnRHbHlwaHNDCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBGb250R2x5cGhzQ2Fj
aGUmIGZvbnRHbHlwaHNDYWNoZSgpCitzdGF0aWMgRm9udENhc2NhZGVDYWNoZSYgZm9udENhc2Nh
ZGVDYWNoZSgpCiB7Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnRHbHlw
aHNDYWNoZSwgY2FjaGUsICgpKTsKKyAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwo
Rm9udENhc2NhZGVDYWNoZSwgY2FjaGUsICgpKTsKICAgICByZXR1cm4gY2FjaGU7CiB9CiAKLXZv
aWQgaW52YWxpZGF0ZUZvbnRHbHlwaHNDYWNoZSgpCit2b2lkIGludmFsaWRhdGVGb250Q2FzY2Fk
ZUNhY2hlKCkKIHsKLSAgICBmb250R2x5cGhzQ2FjaGUoKS5jbGVhcigpOworICAgIGZvbnRDYXNj
YWRlQ2FjaGUoKS5jbGVhcigpOwogfQogCiB2b2lkIGNsZWFyV2lkdGhDYWNoZXMoKQogewotICAg
IGZvciAoYXV0byBpdCA9IGZvbnRHbHlwaHNDYWNoZSgpLmJlZ2luKCksIGVuZCA9IGZvbnRHbHlw
aHNDYWNoZSgpLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT52YWx1ZS0+Z2x5
cGhzLmdldCgpLndpZHRoQ2FjaGUoKS5jbGVhcigpOworICAgIGZvciAoYXV0byYgdmFsdWUgOiBm
b250Q2FzY2FkZUNhY2hlKCkudmFsdWVzKCkpCisgICAgICAgIHZhbHVlLT5mb250cy5nZXQoKS53
aWR0aENhY2hlKCkuY2xlYXIoKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIG1ha2VGb250U2VsZWN0
b3JGbGFncyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQpAQCAtMjU5LDE3ICsy
NTksMTkgQEAgc3RhdGljIHVuc2lnbmVkIG1ha2VGb250U2VsZWN0b3JGbGFncyhjbwogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24uc2NyaXB0KCkpIDw8IDEgfCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24uc21hbGxDYXBzKCkpOwogfQogCi1zdGF0
aWMgdm9pZCBtYWtlRm9udEdseXBoc0NhY2hlS2V5KEZvbnRHbHlwaHNDYWNoZUtleSYga2V5LCBj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250U2VsZWN0b3IqIGZvbnRTZWxl
Y3RvcikKK3N0YXRpYyBGb250Q2FzY2FkZUNhY2hlS2V5IG1ha2VGb250Q2FzY2FkZUNhY2hlS2V5
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRTZWxlY3RvciogZm9udFNl
bGVjdG9yKQogeworICAgIEZvbnRDYXNjYWRlQ2FjaGVLZXkga2V5OwogICAgIGtleS5mb250RGVz
Y3JpcHRpb25DYWNoZUtleSA9IEZvbnREZXNjcmlwdGlvbkZvbnREYXRhQ2FjaGVLZXkoZGVzY3Jp
cHRpb24pOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXNjcmlwdGlvbi5mYW1pbHlD
b3VudCgpOyArK2kpCiAgICAgICAgIGtleS5mYW1pbGllcy5hcHBlbmQoZGVzY3JpcHRpb24uZmFt
aWx5QXQoaSkpOwogICAgIGtleS5mb250U2VsZWN0b3JJZCA9IGZvbnRTZWxlY3RvciA/IGZvbnRT
ZWxlY3Rvci0+dW5pcXVlSWQoKSA6IDA7CiAgICAga2V5LmZvbnRTZWxlY3RvclZlcnNpb24gPSBm
b250U2VsZWN0b3IgPyBmb250U2VsZWN0b3ItPnZlcnNpb24oKSA6IDA7CiAgICAga2V5LmZvbnRT
ZWxlY3RvckZsYWdzID0gZm9udFNlbGVjdG9yICYmIGZvbnRTZWxlY3Rvci0+cmVzb2x2ZXNGYW1p
bHlGb3IoZGVzY3JpcHRpb24pID8gbWFrZUZvbnRTZWxlY3RvckZsYWdzKGRlc2NyaXB0aW9uKSA6
IDA7CisgICAgcmV0dXJuIGtleTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVGb250R2x5
cGhzQ2FjaGVIYXNoKGNvbnN0IEZvbnRHbHlwaHNDYWNoZUtleSYga2V5KQorc3RhdGljIHVuc2ln
bmVkIGNvbXB1dGVGb250Q2FzY2FkZUNhY2hlSGFzaChjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5
JiBrZXkpCiB7CiAgICAgVmVjdG9yPHVuc2lnbmVkLCA3PiBoYXNoQ29kZXM7CiAgICAgaGFzaENv
ZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoNCArIGtleS5mYW1pbGllcy5zaXplKCkpOwpAQCAt
Mjg0LDQ4ICsyODYsNDcgQEAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVGb250R2x5cGhzQ2FjaGVI
YQogICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoaGFzaENvZGVzLmRhdGEoKSwg
aGFzaENvZGVzLnNpemUoKSAqIHNpemVvZih1bnNpZ25lZCkpOwogfQogCi12b2lkIHBydW5lVW5y
ZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2FjaGUoKQordm9pZCBwcnVuZVVucmVmZXJl
bmNlZEVudHJpZXNGcm9tRm9udENhc2NhZGVDYWNoZSgpCiB7Ci0gICAgZm9udEdseXBoc0NhY2hl
KCkucmVtb3ZlSWYoW10oRm9udEdseXBoc0NhY2hlOjpLZXlWYWx1ZVBhaXJUeXBlJiBlbnRyeSkg
ewotICAgICAgICByZXR1cm4gZW50cnkudmFsdWUtPmdseXBocy5nZXQoKS5oYXNPbmVSZWYoKTsK
KyAgICBmb250Q2FzY2FkZUNhY2hlKCkucmVtb3ZlSWYoW10oRm9udENhc2NhZGVDYWNoZTo6S2V5
VmFsdWVQYWlyVHlwZSYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlLT5mb250
cy5nZXQoKS5oYXNPbmVSZWYoKTsKICAgICB9KTsKIH0KIAogdm9pZCBwcnVuZVN5c3RlbUZhbGxi
YWNrRm9udHMoKQogewotICAgIGZvciAoYXV0byYgZW50cnkgOiBmb250R2x5cGhzQ2FjaGUoKS52
YWx1ZXMoKSkKLSAgICAgICAgZW50cnktPmdseXBocy0+cHJ1bmVTeXN0ZW1GYWxsYmFja3MoKTsK
KyAgICBmb3IgKGF1dG8mIGVudHJ5IDogZm9udENhc2NhZGVDYWNoZSgpLnZhbHVlcygpKQorICAg
ICAgICBlbnRyeS0+Zm9udHMtPnBydW5lU3lzdGVtRmFsbGJhY2tzKCk7CiB9CiAKLXN0YXRpYyBS
ZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250
U2VsZWN0b3IpCitzdGF0aWMgUmVmPEZvbnRDYXNjYWRlRm9udHM+IHJldHJpZXZlT3JBZGRDYWNo
ZWRGb250cyhjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgUGFzc1JlZlB0
cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKIHsKLSAgICBGb250R2x5cGhzQ2FjaGVLZXkg
a2V5OwotICAgIG1ha2VGb250R2x5cGhzQ2FjaGVLZXkoa2V5LCBmb250RGVzY3JpcHRpb24sIGZv
bnRTZWxlY3Rvci5nZXQoKSk7CisgICAgYXV0byBrZXkgPSBtYWtlRm9udENhc2NhZGVDYWNoZUtl
eShmb250RGVzY3JpcHRpb24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7CiAKLSAgICB1bnNpZ25lZCBo
YXNoID0gY29tcHV0ZUZvbnRHbHlwaHNDYWNoZUhhc2goa2V5KTsKLSAgICBGb250R2x5cGhzQ2Fj
aGU6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBmb250R2x5cGhzQ2FjaGUoKS5hZGQoaGFzaCwgc3Rk
Ojp1bmlxdWVfcHRyPEZvbnRHbHlwaHNDYWNoZUVudHJ5PigpKTsKKyAgICB1bnNpZ25lZCBoYXNo
ID0gY29tcHV0ZUZvbnRDYXNjYWRlQ2FjaGVIYXNoKGtleSk7CisgICAgYXV0byBhZGRSZXN1bHQg
PSBmb250Q2FzY2FkZUNhY2hlKCkuYWRkKGhhc2gsIHN0ZDo6dW5pcXVlX3B0cjxGb250Q2FzY2Fk
ZUNhY2hlRW50cnk+KCkpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkgJiYgYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IGtleSkKLSAgICAgICAgcmV0dXJuIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUtPmdseXBocy5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUtPmZvbnRzLmdldCgpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZv
bnRHbHlwaHNDYWNoZUVudHJ5PiYgbmV3RW50cnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
OwotICAgIG5ld0VudHJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxGb250R2x5cGhzQ2FjaGVFbnRyeT4o
V1RGOjptb3ZlKGtleSksIEZvbnRHbHlwaHM6OmNyZWF0ZShmb250U2VsZWN0b3IpKTsKLSAgICBS
ZWY8Rm9udEdseXBocz4gZ2x5cGhzID0gbmV3RW50cnktPmdseXBocy5nZXQoKTsKKyAgICBhdXRv
JiBuZXdFbnRyeSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgbmV3RW50cnkgPSBz
dGQ6Om1ha2VfdW5pcXVlPEZvbnRDYXNjYWRlQ2FjaGVFbnRyeT4oV1RGOjptb3ZlKGtleSksIEZv
bnRDYXNjYWRlRm9udHM6OmNyZWF0ZShmb250U2VsZWN0b3IpKTsKKyAgICBSZWY8Rm9udENhc2Nh
ZGVGb250cz4gZ2x5cGhzID0gbmV3RW50cnktPmZvbnRzLmdldCgpOwogCiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHVucmVmZXJlbmNlZFBydW5lSW50ZXJ2YWwgPSA1MDsKICAgICBzdGF0aWMg
Y29uc3QgaW50IG1heGltdW1FbnRyaWVzID0gNDAwOwogICAgIHN0YXRpYyB1bnNpZ25lZCBwcnVu
ZUNvdW50ZXI7Ci0gICAgLy8gUmVmZXJlbmNlZCBGb250R2x5cGhzIHdvdWxkIGV4aXN0IGFueXdh
eSBzbyBwcnVuaW5nIHRoZW0gc2F2ZXMgbGl0dGxlIG1lbW9yeS4KKyAgICAvLyBSZWZlcmVuY2Vk
IEZvbnRDYXNjYWRlRm9udHMgd291bGQgZXhpc3QgYW55d2F5IHNvIHBydW5pbmcgdGhlbSBzYXZl
cyBsaXR0bGUgbWVtb3J5LgogICAgIGlmICghKCsrcHJ1bmVDb3VudGVyICUgdW5yZWZlcmVuY2Vk
UHJ1bmVJbnRlcnZhbCkpCi0gICAgICAgIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250
R2x5cGhzQ2FjaGUoKTsKKyAgICAgICAgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRD
YXNjYWRlQ2FjaGUoKTsKICAgICAvLyBQcmV2ZW50IHBhdGhvbG9naWNhbCBncm93dGguCi0gICAg
aWYgKGZvbnRHbHlwaHNDYWNoZSgpLnNpemUoKSA+IG1heGltdW1FbnRyaWVzKQotICAgICAgICBm
b250R2x5cGhzQ2FjaGUoKS5yZW1vdmUoZm9udEdseXBoc0NhY2hlKCkuYmVnaW4oKSk7CisgICAg
aWYgKGZvbnRDYXNjYWRlQ2FjaGUoKS5zaXplKCkgPiBtYXhpbXVtRW50cmllcykKKyAgICAgICAg
Zm9udENhc2NhZGVDYWNoZSgpLnJlbW92ZShmb250Q2FzY2FkZUNhY2hlKCkuYmVnaW4oKSk7CiAg
ICAgcmV0dXJuIGdseXBoczsKIH0KIAogdm9pZCBGb250Q2FzY2FkZTo6dXBkYXRlKFBhc3NSZWZQ
dHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpIGNvbnN0CiB7Ci0gICAgbV9nbHlwaHMgPSBy
ZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udEdseXBocyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVj
dG9yLmdldCgpKTsKKyAgICBtX2ZvbnRzID0gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKG1fZm9u
dERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOwogICAgIG1fdXNlQmFja3NsYXNoQXNZ
ZW5TeW1ib2wgPSB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHkoZmlyc3RGYW1pbHkoKSk7
CiAgICAgbV90eXBlc2V0dGluZ0ZlYXR1cmVzID0gY29tcHV0ZVR5cGVzZXR0aW5nRmVhdHVyZXMo
KTsKIH0KQEAgLTM4NCw3ICszODUsNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoY29uc3Qg
VGV4dFJ1biYgCiAKICAgICBib29sIGhhc0tlcm5pbmdPckxpZ2F0dXJlcyA9IHR5cGVzZXR0aW5n
RmVhdHVyZXMoKSAmIChLZXJuaW5nIHwgTGlnYXR1cmVzKTsKICAgICBib29sIGhhc1dvcmRTcGFj
aW5nT3JMZXR0ZXJTcGFjaW5nID0gd29yZFNwYWNpbmcoKSB8fCBsZXR0ZXJTcGFjaW5nKCk7Ci0g
ICAgZmxvYXQqIGNhY2hlRW50cnkgPSBtX2dseXBocy0+d2lkdGhDYWNoZSgpLmFkZChydW4sIHN0
ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKSwgaGFzS2VybmluZ09yTGlnYXR1
cmVzLCBoYXNXb3JkU3BhY2luZ09yTGV0dGVyU3BhY2luZywgZ2x5cGhPdmVyZmxvdyk7CisgICAg
ZmxvYXQqIGNhY2hlRW50cnkgPSBtX2ZvbnRzLT53aWR0aENhY2hlKCkuYWRkKHJ1biwgc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpLCBoYXNLZXJuaW5nT3JMaWdhdHVyZXMs
IGhhc1dvcmRTcGFjaW5nT3JMZXR0ZXJTcGFjaW5nLCBnbHlwaE92ZXJmbG93KTsKICAgICBpZiAo
Y2FjaGVFbnRyeSAmJiAhc3RkOjppc25hbigqY2FjaGVFbnRyeSkpCiAgICAgICAgIHJldHVybiAq
Y2FjaGVFbnRyeTsKIApAQCAtNDMyLDcgKzQzMyw3IEBAIEdseXBoRGF0YSBGb250Q2FzY2FkZTo6
Z2x5cGhEYXRhRm9yQ2hhcmEKICAgICBpZiAobWlycm9yKQogICAgICAgICBjID0gdV9jaGFyTWly
cm9yKGMpOwogCi0gICAgcmV0dXJuIG1fZ2x5cGhzLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywg
bV9mb250RGVzY3JpcHRpb24sIHZhcmlhbnQpOworICAgIHJldHVybiBtX2ZvbnRzLT5nbHlwaERh
dGFGb3JDaGFyYWN0ZXIoYywgbV9mb250RGVzY3JpcHRpb24sIHZhcmlhbnQpOwogfQogCiAjaWYg
IVBMQVRGT1JNKENPQ09BKQpAQCAtMTA5NSw3ICsxMDk2LDcgQEAgYm9vbCBGb250Q2FzY2FkZTo6
Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcwogCiBib29sIEZvbnRDYXNjYWRlOjppc0xvYWRpbmdDdXN0
b21Gb250cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZ2x5cGhzICYmIG1fZ2x5cGhzLT5pc0xv
YWRpbmdDdXN0b21Gb250cygpOworICAgIHJldHVybiBtX2ZvbnRzICYmIG1fZm9udHMtPmlzTG9h
ZGluZ0N1c3RvbUZvbnRzKCk7CiB9CiAgICAgCiBHbHlwaFRvUGF0aFRyYW5zbGF0b3I6OkdseXBo
VW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShjb25zdCBUZXh0UnVuJiB0ZXh0UnVu
LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBpbmRleCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAkocmV2aXNpb24g
MTgwMjY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogCiAjaW5jbHVkZSAiRGFzaEFycmF5
LmgiCiAjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlRm9udHMuaCIKICNp
bmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJGb250R2x5cGhzLmgiCiAjaW5j
bHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNsdWRlICJUeXBl
c2V0dGluZ0ZlYXR1cmVzLmgiCkBAIC0xNjksNyArMTY5LDcgQEAgcHVibGljOgogICAgIEZvbnRX
ZWlnaHQgd2VpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24ud2VpZ2h0KCk7
IH0KICAgICBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCgpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9udERlc2NyaXB0aW9uLndpZHRoVmFyaWFudCgpOyB9CiAKLSAgICBib29sIGlzUGxhdGZvcm1G
b250KCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHMtPmlzRm9yUGxhdGZvcm1Gb250KCk7IH0KKyAg
ICBib29sIGlzUGxhdGZvcm1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250cy0+aXNGb3JQbGF0
Zm9ybUZvbnQoKTsgfQogCiAgICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgY29u
c3QgeyByZXR1cm4gcHJpbWFyeUZvbnQoKS5mb250TWV0cmljcygpOyB9CiAgICAgZmxvYXQgc3Bh
Y2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlGb250KCkuc3BhY2VXaWR0aCgpICsgbV9s
ZXR0ZXJTcGFjaW5nOyB9CkBAIC0yODUsNyArMjg1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBT
dHJpbmcgbm9ybWFsaXplU3BhY2VzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKIAog
ICAgIGJvb2wgdXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSBjb25zdCB7IHJldHVybiBtX3VzZUJh
Y2tzbGFzaEFzWWVuU3ltYm9sOyB9Ci0gICAgRm9udEdseXBocyogZ2x5cGhzKCkgY29uc3QgeyBy
ZXR1cm4gbV9nbHlwaHMuZ2V0KCk7IH0KKyAgICBGb250Q2FzY2FkZUZvbnRzKiBmb250cygpIGNv
bnN0IHsgcmV0dXJuIG1fZm9udHMuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICBib29sIGlzTG9h
ZGluZ0N1c3RvbUZvbnRzKCkgY29uc3Q7CkBAIC0zMzUsMTUgKzMzNSwxNSBAQCBwcml2YXRlOgog
ICAgIHN0YXRpYyBUeXBlc2V0dGluZ0ZlYXR1cmVzIHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVy
ZXM7CiAKICAgICBGb250RGVzY3JpcHRpb24gbV9mb250RGVzY3JpcHRpb247Ci0gICAgbXV0YWJs
ZSBSZWZQdHI8Rm9udEdseXBocz4gbV9nbHlwaHM7CisgICAgbXV0YWJsZSBSZWZQdHI8Rm9udENh
c2NhZGVGb250cz4gbV9mb250czsKICAgICBmbG9hdCBtX2xldHRlclNwYWNpbmc7CiAgICAgZmxv
YXQgbV93b3JkU3BhY2luZzsKICAgICBtdXRhYmxlIGJvb2wgbV91c2VCYWNrc2xhc2hBc1llblN5
bWJvbDsKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA6IDI7IC8v
IChUeXBlc2V0dGluZ0ZlYXR1cmVzKSBDYWNoZXMgdmFsdWVzIGNvbXB1dGVkIGZyb20gbV9mb250
RGVzY3JpcHRpb24uCiB9OwogCi12b2lkIGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKTsKLXZv
aWQgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwordm9pZCBp
bnZhbGlkYXRlRm9udENhc2NhZGVDYWNoZSgpOwordm9pZCBwcnVuZVVucmVmZXJlbmNlZEVudHJp
ZXNGcm9tRm9udENhc2NhZGVDYWNoZSgpOwogdm9pZCBwcnVuZVN5c3RlbUZhbGxiYWNrRm9udHMo
KTsKIHZvaWQgY2xlYXJXaWR0aENhY2hlcygpOwogCkBAIC0zNTMsMjUgKzM1MywyNSBAQCBpbmxp
bmUgRm9udENhc2NhZGU6On5Gb250Q2FzY2FkZSgpCiAKIGlubGluZSBjb25zdCBGb250JiBGb250
Q2FzY2FkZTo6cHJpbWFyeUZvbnQoKSBjb25zdAogewotICAgIEFTU0VSVChtX2dseXBocyk7Ci0g
ICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5Rm9udChtX2ZvbnREZXNjcmlwdGlvbik7CisgICAg
QVNTRVJUKG1fZm9udHMpOworICAgIHJldHVybiBtX2ZvbnRzLT5wcmltYXJ5Rm9udChtX2ZvbnRE
ZXNjcmlwdGlvbik7CiB9CiAKIGlubGluZSBjb25zdCBGb250UmFuZ2VzJiBGb250Q2FzY2FkZTo6
ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9n
bHlwaHMpOwotICAgIHJldHVybiBtX2dseXBocy0+cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQobV9m
b250RGVzY3JpcHRpb24sIGluZGV4KTsKKyAgICBBU1NFUlQobV9mb250cyk7CisgICAgcmV0dXJu
IG1fZm9udHMtPnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KG1fZm9udERlc2NyaXB0aW9uLCBpbmRl
eCk7CiB9CiAKIGlubGluZSBib29sIEZvbnRDYXNjYWRlOjppc0ZpeGVkUGl0Y2goKSBjb25zdAog
ewotICAgIEFTU0VSVChtX2dseXBocyk7Ci0gICAgcmV0dXJuIG1fZ2x5cGhzLT5pc0ZpeGVkUGl0
Y2gobV9mb250RGVzY3JpcHRpb24pOworICAgIEFTU0VSVChtX2ZvbnRzKTsKKyAgICByZXR1cm4g
bV9mb250cy0+aXNGaXhlZFBpdGNoKG1fZm9udERlc2NyaXB0aW9uKTsKIH0KIAogaW5saW5lIEZv
bnRTZWxlY3RvciogRm9udENhc2NhZGU6OmZvbnRTZWxlY3RvcigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fZ2x5cGhzID8gbV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpIDogMDsKKyAgICByZXR1cm4g
bV9mb250cyA/IG1fZm9udHMtPmZvbnRTZWxlY3RvcigpIDogMDsKIH0KIAogaW5saW5lIGZsb2F0
IEZvbnRDYXNjYWRlOjp0YWJXaWR0aChjb25zdCBGb250JiBmb250LCB1bnNpZ25lZCB0YWJTaXpl
LCBmbG9hdCBwb3NpdGlvbikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCShyZXZpc2lvbiAxODAyNjQp
CShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwOjE4
MDI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9u
dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDA4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
IAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGb250R2x5cGhzLmgiCisKKyNpbmNsdWRlICJGb250Q2FjaGUu
aCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1ZGUgIkdseXBoUGFnZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKworRm9udEdseXBoczo6Rm9udEdseXBocyhQYXNzUmVmUHRy
PEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQorICAgIDogbV9jYWNoZWRQcmltYXJ5Rm9udCgw
KQorICAgICwgbV9mb250U2VsZWN0b3IoZm9udFNlbGVjdG9yKQorICAgICwgbV9mb250U2VsZWN0
b3JWZXJzaW9uKG1fZm9udFNlbGVjdG9yID8gbV9mb250U2VsZWN0b3ItPnZlcnNpb24oKSA6IDAp
CisgICAgLCBtX2dlbmVyYXRpb24oZm9udENhY2hlKCkuZ2VuZXJhdGlvbigpKQoreworfQorCitG
b250R2x5cGhzOjpGb250R2x5cGhzKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0
YSkKKyAgICA6IG1fY2FjaGVkUHJpbWFyeUZvbnQoMCkKKyAgICAsIG1fZm9udFNlbGVjdG9yKDAp
CisgICAgLCBtX2ZvbnRTZWxlY3RvclZlcnNpb24oMCkKKyAgICAsIG1fZ2VuZXJhdGlvbihmb250
Q2FjaGUoKS5nZW5lcmF0aW9uKCkpCisgICAgLCBtX2lzRm9yUGxhdGZvcm1Gb250KHRydWUpCit7
CisgICAgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmFwcGVuZChGb250UmFuZ2VzKGZvbnRDYWNo
ZSgpLmZvbnRGb3JQbGF0Zm9ybURhdGEocGxhdGZvcm1EYXRhKSkpOworfQorCitGb250R2x5cGhz
Ojp+Rm9udEdseXBocygpCit7Cit9CisKK3ZvaWQgRm9udEdseXBoczo6ZGV0ZXJtaW5lUGl0Y2go
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAgICBhdXRvJiBwcmltYXJ5
UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApOworICAgIHVu
c2lnbmVkIG51bVJhbmdlcyA9IHByaW1hcnlSYW5nZXMuc2l6ZSgpOworICAgIGlmIChudW1SYW5n
ZXMgPT0gMSkKKyAgICAgICAgbV9waXRjaCA9IHByaW1hcnlSYW5nZXMucmFuZ2VBdCgwKS5mb250
KCkucGl0Y2goKTsKKyAgICBlbHNlCisgICAgICAgIG1fcGl0Y2ggPSBWYXJpYWJsZVBpdGNoOwor
fQorCitib29sIEZvbnRHbHlwaHM6OmlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgY29uc3QKK3sKKyAg
ICBmb3IgKGF1dG8mIGZvbnRSYW5nZXMgOiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMpIHsKKyAg
ICAgICAgaWYgKGZvbnRSYW5nZXMuaXNMb2FkaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgRm9udFJhbmdlcyByZWFs
aXplTmV4dEZhbGxiYWNrKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2ln
bmVkJiBpbmRleCwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCit7CisgICAgQVNTRVJUKGlu
ZGV4IDwgZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKSk7CisKKyAgICB3aGlsZSAoaW5kZXggPCBk
ZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpKSB7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5ID0gZGVzY3JpcHRpb24uZmFtaWx5QXQoaW5kZXgrKyk7CisgICAgICAgIGlmIChmYW1p
bHkuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChmb250U2Vs
ZWN0b3IpIHsKKyAgICAgICAgICAgIGF1dG8gcmFuZ2VzID0gZm9udFNlbGVjdG9yLT5mb250UmFu
Z2VzRm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBmYW1pbHkpOworICAgICAgICAgICAgaWYgKCFyYW5n
ZXMuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlczsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoYXV0byBmb250ID0gZm9udENhY2hlKCkuZm9udEZvckZhbWlseShkZXNjcmlw
dGlvbiwgZmFtaWx5KSkKKyAgICAgICAgICAgIHJldHVybiBGb250UmFuZ2VzKFdURjo6bW92ZShm
b250KSk7CisgICAgfQorICAgIC8vIFdlIGRpZG4ndCBmaW5kIGEgZm9udC4gVHJ5IHRvIGZpbmQg
YSBzaW1pbGFyIGZvbnQgdXNpbmcgb3VyIG93biBzcGVjaWZpYyBrbm93bGVkZ2UgYWJvdXQgb3Vy
IHBsYXRmb3JtLgorICAgIC8vIEZvciBleGFtcGxlIG9uIE9TIFgsIHdlIGtub3cgdG8gbWFwIGFu
eSBmYW1pbGllcyBjb250YWluaW5nIHRoZSB3b3JkcyBBcmFiaWMsIFBhc2h0bywgb3IgVXJkdSB0
byB0aGUKKyAgICAvLyBHZWV6YSBQcm8gZm9udC4KKyAgICByZXR1cm4gRm9udFJhbmdlcyhmb250
Q2FjaGUoKS5zaW1pbGFyRm9udChkZXNjcmlwdGlvbikpOworfQorCitjb25zdCBGb250UmFuZ2Vz
JiBGb250R2x5cGhzOjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250RGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBpZiAoaW5kZXggPCBtX3Jl
YWxpemVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbV9yZWFsaXplZEZh
bGxiYWNrUmFuZ2VzW2luZGV4XTsKKworICAgIEFTU0VSVChpbmRleCA9PSBtX3JlYWxpemVkRmFs
bGJhY2tSYW5nZXMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoZm9udENhY2hlKCkuZ2VuZXJhdGlvbigp
ID09IG1fZ2VuZXJhdGlvbik7CisKKyAgICBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuYXBwZW5k
KEZvbnRSYW5nZXMoKSk7CisgICAgYXV0byYgZm9udFJhbmdlcyA9IG1fcmVhbGl6ZWRGYWxsYmFj
a1Jhbmdlcy5sYXN0KCk7CisKKyAgICBpZiAoIWluZGV4KSB7CisgICAgICAgIGZvbnRSYW5nZXMg
PSByZWFsaXplTmV4dEZhbGxiYWNrKGRlc2NyaXB0aW9uLCBtX2xhc3RSZWFsaXplZEZhbGxiYWNr
SW5kZXgsIG1fZm9udFNlbGVjdG9yLmdldCgpKTsKKyAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNO
dWxsKCkgJiYgbV9mb250U2VsZWN0b3IpCisgICAgICAgICAgICBmb250UmFuZ2VzID0gbV9mb250
U2VsZWN0b3ItPmZvbnRSYW5nZXNGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHN0YW5kYXJkRmFtaWx5
KTsKKyAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkpCisgICAgICAgICAgICBmb250UmFu
Z2VzID0gRm9udFJhbmdlcyhmb250Q2FjaGUoKS5sYXN0UmVzb3J0RmFsbGJhY2tGb250KGRlc2Ny
aXB0aW9uKSk7CisgICAgICAgIHJldHVybiBmb250UmFuZ2VzOworICAgIH0KKworICAgIGlmICht
X2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPCBkZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpKQor
ICAgICAgICBmb250UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxsYmFjayhkZXNjcmlwdGlvbiwgbV9s
YXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7CisKKyAgICBp
ZiAoZm9udFJhbmdlcy5pc051bGwoKSAmJiBtX2ZvbnRTZWxlY3RvcikgeworICAgICAgICBBU1NF
UlQobV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4ID49IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50
KCkpOworCisgICAgICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXggPSBtX2xh
c3RSZWFsaXplZEZhbGxiYWNrSW5kZXggLSBkZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpOworICAg
ICAgICBpZiAoZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRleCA9PSBtX2ZvbnRTZWxlY3Rvci0+ZmFs
bGJhY2tGb250Q291bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmb250UmFuZ2VzOworICAgICAg
ICArK21fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleDsKKyAgICAgICAgZm9udFJhbmdlcyA9IEZv
bnRSYW5nZXMobV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udEF0KGRlc2NyaXB0aW9uLCBmb250
U2VsZWN0b3JGYWxsYmFja0luZGV4KSk7CisgICAgfQorCisgICAgcmV0dXJuIGZvbnRSYW5nZXM7
Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0luUmFuZ2UoVUNoYXIzMiBjaGFyYWN0ZXIsIFVD
aGFyMzIgbG93ZXJCb3VuZCwgVUNoYXIzMiB1cHBlckJvdW5kKQoreworICAgIHJldHVybiBjaGFy
YWN0ZXIgPj0gbG93ZXJCb3VuZCAmJiBjaGFyYWN0ZXIgPD0gdXBwZXJCb3VuZDsKK30KKworc3Rh
dGljIGJvb2wgc2hvdWxkSWdub3JlUm90YXRpb24oVUNoYXIzMiBjaGFyYWN0ZXIpCit7CisgICAg
aWYgKGNoYXJhY3RlciA9PSAweDAwMEE3IHx8IGNoYXJhY3RlciA9PSAweDAwMEE5IHx8IGNoYXJh
Y3RlciA9PSAweDAwMEFFKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjaGFyYWN0
ZXIgPT0gMHgwMDBCNiB8fCBjaGFyYWN0ZXIgPT0gMHgwMDBCQyB8fCBjaGFyYWN0ZXIgPT0gMHgw
MDBCRCB8fCBjaGFyYWN0ZXIgPT0gMHgwMDBCRSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMDJFNSwgMHgwMDJFQikpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIAorICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAxMTAwLCAw
eDAxMUZGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAxNDAxLCAweDAxNjdGKSB8fCBpc0lu
UmFuZ2UoY2hhcmFjdGVyLCAweDAxODAwLCAweDAxOEZGKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoY2hhcmFjdGVyID09IDB4MDIwMTYgfHwgY2hhcmFjdGVyID09IDB4MDIwMjAg
fHwgY2hhcmFjdGVyID09IDB4MDIwMjEgfHwgY2hhcmFjdGVyID09IDB4MjAzMCB8fCBjaGFyYWN0
ZXIgPT0gMHgwMjAzMSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXNJblJhbmdl
KGNoYXJhY3RlciwgMHgwMjAzQiwgMHgwMjAzRCkgfHwgY2hhcmFjdGVyID09IDB4MDIwNDIgfHwg
Y2hhcmFjdGVyID09IDB4MDIwNDQgfHwgY2hhcmFjdGVyID09IDB4MDIwNDcKKyAgICAgICAgfHwg
Y2hhcmFjdGVyID09IDB4MDIwNDggfHwgY2hhcmFjdGVyID09IDB4MDIwNDkgfHwgY2hhcmFjdGVy
ID09IDB4MjA1MSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXNJblJhbmdlKGNo
YXJhY3RlciwgMHgwMjA2NSwgMHgwMjA2OSkgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjBE
RCwgMHgwMjBFMCkKKyAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjBFMiwgMHgw
MjBFNCkgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjEwMCwgMHgwMjExNykKKyAgICAgICAg
fHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjExOSwgMHgwMjEzMSkgfHwgaXNJblJhbmdlKGNo
YXJhY3RlciwgMHgwMjEzMywgMHgwMjEzRikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIxNDUsIDB4MDIxNEEpIHx8IGNoYXJhY3RlciA9
PSAweDAyMTRDIHx8IGNoYXJhY3RlciA9PSAweDAyMTRECisgICAgICAgIHx8IGlzSW5SYW5nZShj
aGFyYWN0ZXIsIDB4MDIxNEYsIDB4MDIxOEYpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMzAwLCAweDAyMzA3KSB8fCBpc0luUmFuZ2Uo
Y2hhcmFjdGVyLCAweDAyMzBDLCAweDAyMzFGKQorICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFj
dGVyLCAweDAyMzIyLCAweDAyMzJCKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMzdELCAw
eDAyMzlBKQorICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyM0I0LCAweDAyM0I2
KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyM0JBLCAweDAyM0NGKQorICAgICAgICB8fCBp
c0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyM0QxLCAweDAyM0RCKSB8fCBpc0luUmFuZ2UoY2hhcmFj
dGVyLCAweDAyM0UyLCAweDAyNEZGKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
aXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjVBMCwgMHgwMjYxOSkgfHwgaXNJblJhbmdlKGNoYXJh
Y3RlciwgMHgwMjYyMCwgMHgwMjc2NykKKyAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3Rlciwg
MHgwMjc3NiwgMHgwMjc5MykgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMkIxMiwgMHgwMkIy
RikKKyAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMkI0RCwgMHgwMkJGRikgfHwg
aXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMkU4MCwgMHgwMzAwNykpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKGNoYXJhY3RlciA9PSAweDAzMDEyIHx8IGNoYXJhY3RlciA9PSAweDAz
MDEzIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDMwMjAsIDB4MDMwMkYpCisgICAgICAgIHx8
IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDMwMzEsIDB4MDMwOUYpIHx8IGlzSW5SYW5nZShjaGFy
YWN0ZXIsIDB4MDMwQTEsIDB4MDMwRkIpCisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIs
IDB4MDMwRkQsIDB4MEE0Q0YpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChpc0lu
UmFuZ2UoY2hhcmFjdGVyLCAweDBBODQwLCAweDBBODdGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVy
LCAweDBBOTYwLCAweDBBOTdGKQorICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBB
QzAwLCAweDBEN0ZGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBFMDAwLCAweDBGQUZGKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgw
RkUxMCwgMHgwRkUxRikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkUzMCwgMHgwRkU0OCkK
KyAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkU1MCwgMHgwRkU1NykgfHwgaXNJ
blJhbmdlKGNoYXJhY3RlciwgMHgwRkU1RiwgMHgwRkU2MikKKyAgICAgICAgfHwgaXNJblJhbmdl
KGNoYXJhY3RlciwgMHgwRkU2NywgMHgwRkU2RikpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZGMDEsIDB4MEZGMDcpIHx8IGlzSW5SYW5n
ZShjaGFyYWN0ZXIsIDB4MEZGMEEsIDB4MEZGMEMpCisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFy
YWN0ZXIsIDB4MEZGMEUsIDB4MEZGMTkpIHx8IGNoYXJhY3RlciA9PSAweDBGRjFCIHx8IGlzSW5S
YW5nZShjaGFyYWN0ZXIsIDB4MEZGMUYsIDB4MEZGM0EpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGlmIChjaGFyYWN0ZXIgPT0gMHgwRkYzQyB8fCBjaGFyYWN0ZXIgPT0gMHgwRkYzRSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgw
RkY0MCwgMHgwRkY1QSkgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkZFMCwgMHgwRkZFMikK
KyAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkZFNCwgMHgwRkZFNykgfHwgaXNJ
blJhbmdlKGNoYXJhY3RlciwgMHgwRkZGMCwgMHgwRkZGOCkKKyAgICAgICAgfHwgY2hhcmFjdGVy
ID09IDB4MEZGRkQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGlzSW5SYW5nZShj
aGFyYWN0ZXIsIDB4MTMwMDAsIDB4MTM0MkYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MUIw
MDAsIDB4MUIwRkYpCisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MUQwMDAsIDB4
MUQxRkYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MUQzMDAsIDB4MUQzN0YpCisgICAgICAg
IHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MUYwMDAsIDB4MUY2NEYpIHx8IGlzSW5SYW5nZShj
aGFyYWN0ZXIsIDB4MUY2ODAsIDB4MUY3N0YpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAK
KyAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgyMDAwMCwgMHgyRkZGRCkgfHwgaXNJblJh
bmdlKGNoYXJhY3RlciwgMHgzMDAwMCwgMHgzRkZGRCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYgUExBVEZPUk0oQ09DT0EpCitzdGF0aWMgR2x5
cGhEYXRhIGdseXBoRGF0YUZvckNKS0NoYXJhY3RlcldpdGhvdXRTeW50aGV0aWNJdGFsaWMoVUNo
YXIzMiBjaGFyYWN0ZXIsIEdseXBoRGF0YSYgZGF0YSkKK3sKKyAgICBHbHlwaERhdGEgbm9uSXRh
bGljRGF0YSA9IGRhdGEuZm9udC0+bm9uU3ludGhldGljSXRhbGljRm9udCgpLT5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICBpZiAobm9uSXRhbGljRGF0YS5mb250KQorICAg
ICAgICByZXR1cm4gbm9uSXRhbGljRGF0YTsKKyAgICByZXR1cm4gZGF0YTsKK30KKyNlbmRpZgor
ICAgIAorc3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5
cGhPcmllbnRhdGlvbihVQ2hhcjMyIGNoYXJhY3RlciwgTm9uQ0pLR2x5cGhPcmllbnRhdGlvbiBv
cmllbnRhdGlvbiwgY29uc3QgR2x5cGhEYXRhJiBkYXRhKQoreworICAgIGlmIChvcmllbnRhdGlv
biA9PSBOb25DSktHbHlwaE9yaWVudGF0aW9uVXByaWdodCB8fCBzaG91bGRJZ25vcmVSb3RhdGlv
bihjaGFyYWN0ZXIpKSB7CisgICAgICAgIEdseXBoRGF0YSB1cHJpZ2h0RGF0YSA9IGRhdGEuZm9u
dC0+dXByaWdodE9yaWVudGF0aW9uRm9udCgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFj
dGVyKTsKKyAgICAgICAgLy8gSWYgdGhlIGdseXBocyBhcmUgdGhlIHNhbWUsIHRoZW4gd2Uga25v
dyB3ZSBjYW4ganVzdCB1c2UgdGhlIGhvcml6b250YWwgZ2x5cGggcm90YXRlZCB2ZXJ0aWNhbGx5
IHRvIGJlIHVwcmlnaHQuCisgICAgICAgIGlmIChkYXRhLmdseXBoID09IHVwcmlnaHREYXRhLmds
eXBoKQorICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgIC8vIFRoZSBnbHlwaHMgYXJl
IGRpc3RpbmN0LCBtZWFuaW5nIHRoYXQgdGhlIGZvbnQgaGFzIGEgdmVydGljYWwtcmlnaHQgZ2x5
cGggYmFrZWQgaW50byBpdC4gV2UgY2FuJ3QgdXNlIHRoYXQKKyAgICAgICAgLy8gZ2x5cGgsIHNv
IHdlIGZhbGwgYmFjayB0byB0aGUgdXByaWdodCBkYXRhIGFuZCB1c2UgdGhlIGhvcml6b250YWwg
Z2x5cGguCisgICAgICAgIGlmICh1cHJpZ2h0RGF0YS5mb250KQorICAgICAgICAgICAgcmV0dXJu
IHVwcmlnaHREYXRhOworICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb24gPT0gTm9uQ0pLR2x5cGhP
cmllbnRhdGlvblZlcnRpY2FsUmlnaHQpIHsKKyAgICAgICAgR2x5cGhEYXRhIHZlcnRpY2FsUmln
aHREYXRhID0gZGF0YS5mb250LT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCktPmdseXBo
RGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAgICAgICAvLyBJZiB0aGUgZ2x5cGhzIGFy
ZSBkaXN0aW5jdCwgd2Ugd2lsbCBtYWtlIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGZvbnQgaGFz
IGEgdmVydGljYWwtcmlnaHQgZ2x5cGggYmFrZWQKKyAgICAgICAgLy8gaW50byBpdC4KKyAgICAg
ICAgaWYgKGRhdGEuZ2x5cGggIT0gdmVydGljYWxSaWdodERhdGEuZ2x5cGgpCisgICAgICAgICAg
ICByZXR1cm4gZGF0YTsKKyAgICAgICAgLy8gVGhlIGdseXBocyBhcmUgaWRlbnRpY2FsLCBtZWFu
aW5nIHRoYXQgd2Ugc2hvdWxkIGp1c3QgdXNlIHRoZSBob3Jpem9udGFsIGdseXBoLgorICAgICAg
ICBpZiAodmVydGljYWxSaWdodERhdGEuZm9udCkKKyAgICAgICAgICAgIHJldHVybiB2ZXJ0aWNh
bFJpZ2h0RGF0YTsKKyAgICB9CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK0dseXBoRGF0YSBGb250
R2x5cGhzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyIGMsIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQpCit7CisgICAgLy8g
U3lzdGVtIGZhbGxiYWNrIGlzIGNoYXJhY3Rlci1kZXBlbmRlbnQuCisgICAgYXV0byYgcHJpbWFy
eVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKKyAgICBh
dXRvKiBvcmlnaW5hbEZvbnQgPSBwcmltYXJ5UmFuZ2VzLmZvbnRGb3JDaGFyYWN0ZXIoYyk7Cisg
ICAgaWYgKCFvcmlnaW5hbEZvbnQpCisgICAgICAgIG9yaWdpbmFsRm9udCA9ICZwcmltYXJ5UmFu
Z2VzLmZvbnRGb3JGaXJzdFJhbmdlKCk7CisKKyAgICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJh
Y2tGb250ID0gb3JpZ2luYWxGb250LT5zeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIoYywg
ZGVzY3JpcHRpb24sIG1faXNGb3JQbGF0Zm9ybUZvbnQpOworICAgIGlmICghc3lzdGVtRmFsbGJh
Y2tGb250KQorICAgICAgICByZXR1cm4gR2x5cGhEYXRhKCk7CisKKyAgICBpZiAoc3lzdGVtRmFs
bGJhY2tGb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFz
eXN0ZW1GYWxsYmFja0ZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkgJiYgRm9udENhc2NhZGU6Omlz
Q0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCisgICAgICAgIHZhcmlhbnQgPSBCcm9rZW5JZGVvZ3Jh
cGhWYXJpYW50OworCisgICAgR2x5cGhEYXRhIGZhbGxiYWNrR2x5cGhEYXRhOworICAgIGlmICh2
YXJpYW50ID09IE5vcm1hbFZhcmlhbnQpCisgICAgICAgIGZhbGxiYWNrR2x5cGhEYXRhID0gc3lz
dGVtRmFsbGJhY2tGb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CisgICAgZWxzZQorICAg
ICAgICBmYWxsYmFja0dseXBoRGF0YSA9IHN5c3RlbUZhbGxiYWNrRm9udC0+dmFyaWFudEZvbnQo
ZGVzY3JpcHRpb24sIHZhcmlhbnQpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CisKKyAgICBp
ZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50ICYmIGZhbGxiYWNrR2x5cGhEYXRhLmZvbnQpIHsK
KyAgICAgICAgaWYgKCFGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjKSAmJiBm
YWxsYmFja0dseXBoRGF0YS5mb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZl
cnRpY2FsICYmICFmYWxsYmFja0dseXBoRGF0YS5mb250LT5pc1RleHRPcmllbnRhdGlvbkZhbGxi
YWNrKCkpCisgICAgICAgICAgICBmYWxsYmFja0dseXBoRGF0YSA9IGdseXBoRGF0YUZvck5vbkNK
S0NoYXJhY3RlcldpdGhHbHlwaE9yaWVudGF0aW9uKGMsIGRlc2NyaXB0aW9uLm5vbkNKS0dseXBo
T3JpZW50YXRpb24oKSwgZmFsbGJhY2tHbHlwaERhdGEpOworICAgIH0KKworICAgIC8vIEtlZXAg
dGhlIHN5c3RlbSBmYWxsYmFjayBmb250cyB3ZSB1c2UgYWxpdmUuCisgICAgaWYgKGZhbGxiYWNr
R2x5cGhEYXRhLmdseXBoKQorICAgICAgICBtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5hZGQoc3lz
dGVtRmFsbGJhY2tGb250LnJlbGVhc2UoKSk7CisKKyAgICByZXR1cm4gZmFsbGJhY2tHbHlwaERh
dGE7Cit9CisKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFy
MzIgYywgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFy
aWFudCwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCkKK3sKKyAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICBhdXRvJiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRp
b24sIGZhbGxiYWNrSW5kZXgrKyk7CisgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGF1dG8qIGZvbnQgPSBmb250UmFuZ2VzLmZvbnRG
b3JDaGFyYWN0ZXIoYyk7CisgICAgICAgIEdseXBoRGF0YSBkYXRhID0gZm9udCA/IGZvbnQtPmds
eXBoRGF0YUZvckNoYXJhY3RlcihjKSA6IEdseXBoRGF0YSgpOworICAgICAgICBpZiAoZGF0YS5m
b250KSB7CisgICAgICAgICAgICAvLyBUaGUgdmFyaWFudEZvbnQgZnVuY3Rpb24gc2hvdWxkIG5v
dCBub3JtYWxseSByZXR1cm4gMC4KKyAgICAgICAgICAgIC8vIEJ1dCBpZiBpdCBkb2VzLCB3ZSB3
aWxsIGp1c3QgcmVuZGVyIHRoZSBjYXBpdGFsIGxldHRlciBiaWcuCisgICAgICAgICAgICBSZWZQ
dHI8Rm9udD4gdmFyaWFudEZvbnQgPSBkYXRhLmZvbnQtPnZhcmlhbnRGb250KGRlc2NyaXB0aW9u
LCB2YXJpYW50KTsKKyAgICAgICAgICAgIGlmICghdmFyaWFudEZvbnQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGRhdGE7CisKKyAgICAgICAgICAgIHJldHVybiB2YXJpYW50Rm9udC0+Z2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKGMpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGdseXBo
RGF0YUZvclN5c3RlbUZhbGxiYWNrKGMsIGRlc2NyaXB0aW9uLCB2YXJpYW50KTsKK30KKworR2x5
cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoVUNoYXIzMiBjLCBj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIGNvbnN0IHVuc2lnbmVk
IHBhZ2VOdW1iZXIgPSBjIC8gR2x5cGhQYWdlOjpzaXplOworCisgICAgZm9yICh1bnNpZ25lZCBm
YWxsYmFja0luZGV4ID0gMDsgdHJ1ZTsgKytmYWxsYmFja0luZGV4KSB7CisgICAgICAgIGF1dG8m
IGZvbnRSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJh
Y2tJbmRleCk7CisgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGF1dG8qIGZvbnQgPSBmb250UmFuZ2VzLmZvbnRGb3JDaGFyYWN0ZXIo
Yyk7CisgICAgICAgIGF1dG8qIHBhZ2UgPSBmb250ID8gZm9udC0+Z2x5cGhQYWdlKHBhZ2VOdW1i
ZXIpIDogbnVsbHB0cjsKKyAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIEdseXBoRGF0YSBkYXRhID0gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMp
OworICAgICAgICBpZiAoZGF0YS5mb250KSB7CisgICAgICAgICAgICBpZiAoZGF0YS5mb250LT5w
bGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFkYXRhLmZvbnQtPmlz
VGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkgeworICAgICAgICAgICAgICAgIGlmICghRm9udENh
c2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihjLCBk
ZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCksIGRhdGEpOworCisgICAgICAgICAg
ICAgICAgaWYgKCFkYXRhLmZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gVXNlIHRoZSBicm9rZW4gaWRlb2dyYXBoIGZvbnQgZGF0YS4gVGhlIGJyb2tl
biBpZGVvZ3JhcGggZm9udCB3aWxsIHVzZSB0aGUgaG9yaXpvbnRhbCB3aWR0aCBvZiBnbHlwaHMK
KyAgICAgICAgICAgICAgICAgICAgLy8gdG8gbWFrZSBzdXJlIHlvdSBnZXQgYSBzcXVhcmUgKGV2
ZW4gZm9yIGJyb2tlbiBnbHlwaHMgbGlrZSBzeW1ib2xzIHVzZWQgZm9yIHB1bmN0dWF0aW9uKS4K
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdseXBoRGF0YUZvclZhcmlhbnQoYywgZGVzY3Jp
cHRpb24sIEJyb2tlbklkZW9ncmFwaFZhcmlhbnQsIGZhbGxiYWNrSW5kZXgpOworICAgICAgICAg
ICAgICAgIH0KKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgICAgICAgICBpZiAoZGF0YS5m
b250LT5wbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbHlwaERhdGFGb3JDSktDaGFyYWN0ZXJXaXRob3V0U3ludGhldGljSXRhbGlj
KGMsIGRhdGEpOworI2VuZGlmCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBk
YXRhOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGdseXBoRGF0YUZvclN5c3RlbUZh
bGxiYWNrKGMsIGRlc2NyaXB0aW9uLCBOb3JtYWxWYXJpYW50KTsKK30KKworc3RhdGljIFJlZlB0
cjxHbHlwaFBhZ2U+IGdseXBoUGFnZUZyb21Gb250UmFuZ2VzKHVuc2lnbmVkIHBhZ2VOdW1iZXIs
IGNvbnN0IEZvbnRSYW5nZXMmIGZvbnRSYW5nZXMpCit7CisgICAgY29uc3QgRm9udCogZm9udCA9
IG51bGxwdHI7CisgICAgVUNoYXIzMiBwYWdlUmFuZ2VGcm9tID0gcGFnZU51bWJlciAqIEdseXBo
UGFnZTo6c2l6ZTsKKyAgICBVQ2hhcjMyIHBhZ2VSYW5nZVRvID0gcGFnZVJhbmdlRnJvbSArIEds
eXBoUGFnZTo6c2l6ZSAtIDE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvbnRSYW5n
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byYgcmFuZ2UgPSBmb250UmFuZ2VzLnJhbmdl
QXQoaSk7CisgICAgICAgIGlmIChyYW5nZS50bygpKSB7CisgICAgICAgICAgICBpZiAocmFuZ2Uu
ZnJvbSgpIDw9IHBhZ2VSYW5nZUZyb20gJiYgcGFnZVJhbmdlVG8gPD0gcmFuZ2UudG8oKSkKKyAg
ICAgICAgICAgICAgICBmb250ID0gJnJhbmdlLmZvbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorICAgIGlmICghZm9udCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBpZiAoZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNh
bCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gY29uc3RfY2FzdDxHbHlw
aFBhZ2UqPihmb250LT5nbHlwaFBhZ2UocGFnZU51bWJlcikpOworfQorCitHbHlwaERhdGEgRm9u
dEdseXBoczo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCh2YXJpYW50ICE9IEF1dG9WYXJpYW50KTsKKwor
ICAgIGlmICh2YXJpYW50ICE9IE5vcm1hbFZhcmlhbnQpCisgICAgICAgIHJldHVybiBnbHlwaERh
dGFGb3JWYXJpYW50KGMsIGRlc2NyaXB0aW9uLCB2YXJpYW50LCAwKTsKKworICAgIGNvbnN0IHVu
c2lnbmVkIHBhZ2VOdW1iZXIgPSBjIC8gR2x5cGhQYWdlOjpzaXplOworCisgICAgUmVmUHRyPEds
eXBoUGFnZT4mIGNhY2hlZFBhZ2UgPSBwYWdlTnVtYmVyID8gbV9jYWNoZWRQYWdlcy5hZGQocGFn
ZU51bWJlciwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlIDogbV9jYWNoZWRQYWdlWmVybzsKKyAg
ICBpZiAoIWNhY2hlZFBhZ2UpCisgICAgICAgIGNhY2hlZFBhZ2UgPSBnbHlwaFBhZ2VGcm9tRm9u
dFJhbmdlcyhwYWdlTnVtYmVyLCByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwg
MCkpOworCisgICAgR2x5cGhEYXRhIGdseXBoRGF0YSA9IGNhY2hlZFBhZ2UgPyBjYWNoZWRQYWdl
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYykgOiBHbHlwaERhdGEoKTsKKyAgICBpZiAoIWdseXBo
RGF0YS5nbHlwaCkgeworICAgICAgICBpZiAoIWNhY2hlZFBhZ2UpCisgICAgICAgICAgICBjYWNo
ZWRQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JNaXhlZEZvbnRzKCk7CisgICAgICAgIGVsc2Ug
aWYgKGNhY2hlZFBhZ2UtPmlzSW1tdXRhYmxlKCkpCisgICAgICAgICAgICBjYWNoZWRQYWdlID0g
R2x5cGhQYWdlOjpjcmVhdGVDb3B5Rm9yTWl4ZWRGb250cygqY2FjaGVkUGFnZSk7CisKKyAgICAg
ICAgZ2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChjLCBkZXNjcmlwdGlvbik7
CisgICAgICAgIGNhY2hlZFBhZ2UtPnNldEdseXBoRGF0YUZvckNoYXJhY3RlcihjLCBnbHlwaERh
dGEuZ2x5cGgsIGdseXBoRGF0YS5mb250KTsKKyAgICB9CisgICAgcmV0dXJuIGdseXBoRGF0YTsK
K30KKwordm9pZCBGb250R2x5cGhzOjpwcnVuZVN5c3RlbUZhbGxiYWNrcygpCit7CisgICAgaWYg
KG1fc3lzdGVtRmFsbGJhY2tGb250U2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IC8vIE11dGFibGUgZ2x5cGggcGFnZXMgbWF5IHJlZmVyZW5jZSBmYWxsYmFjayBmb250cy4KKyAg
ICBpZiAobV9jYWNoZWRQYWdlWmVybyAmJiAhbV9jYWNoZWRQYWdlWmVyby0+aXNJbW11dGFibGUo
KSkKKyAgICAgICAgbV9jYWNoZWRQYWdlWmVybyA9IG51bGxwdHI7CisgICAgbV9jYWNoZWRQYWdl
cy5yZW1vdmVJZihbXShkZWNsdHlwZShtX2NhY2hlZFBhZ2VzKTo6S2V5VmFsdWVQYWlyVHlwZSYg
a2V5QW5kVmFsdWUpIHsKKyAgICAgICAgcmV0dXJuICFrZXlBbmRWYWx1ZS52YWx1ZS0+aXNJbW11
dGFibGUoKTsKKyAgICB9KTsKKyAgICBtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5jbGVhcigpOwor
fQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZUZvbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZUZvbnRzLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDcgKzI3LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9u
dEdseXBocy5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlRm9udHMuaCIKIAogI2luY2x1ZGUgIkZv
bnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCkBAIC0zNiw3ICszNiw3IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIAotRm9udEdseXBoczo6Rm9udEdseXBocyhQYXNzUmVmUHRy
PEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQorRm9udENhc2NhZGVGb250czo6Rm9udENhc2Nh
ZGVGb250cyhQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQogICAgIDogbV9j
YWNoZWRQcmltYXJ5Rm9udCgwKQogICAgICwgbV9mb250U2VsZWN0b3IoZm9udFNlbGVjdG9yKQog
ICAgICwgbV9mb250U2VsZWN0b3JWZXJzaW9uKG1fZm9udFNlbGVjdG9yID8gbV9mb250U2VsZWN0
b3ItPnZlcnNpb24oKSA6IDApCkBAIC00NCw3ICs0NCw3IEBAIEZvbnRHbHlwaHM6OkZvbnRHbHlw
aHMoUGFzc1JlZlB0cjxGb250U2UKIHsKIH0KIAotRm9udEdseXBoczo6Rm9udEdseXBocyhjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCitGb250Q2FzY2FkZUZvbnRzOjpGb250
Q2FzY2FkZUZvbnRzKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKICAgICA6
IG1fY2FjaGVkUHJpbWFyeUZvbnQoMCkKICAgICAsIG1fZm9udFNlbGVjdG9yKDApCiAgICAgLCBt
X2ZvbnRTZWxlY3RvclZlcnNpb24oMCkKQEAgLTU0LDExICs1NCwxMSBAQCBGb250R2x5cGhzOjpG
b250R2x5cGhzKGNvbnN0IEZvbnRQbGF0Zm9yCiAgICAgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2Vz
LmFwcGVuZChGb250UmFuZ2VzKGZvbnRDYWNoZSgpLmZvbnRGb3JQbGF0Zm9ybURhdGEocGxhdGZv
cm1EYXRhKSkpOwogfQogCi1Gb250R2x5cGhzOjp+Rm9udEdseXBocygpCitGb250Q2FzY2FkZUZv
bnRzOjp+Rm9udENhc2NhZGVGb250cygpCiB7CiB9CiAKLXZvaWQgRm9udEdseXBoczo6ZGV0ZXJt
aW5lUGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK3ZvaWQgRm9udENh
c2NhZGVGb250czo6ZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlw
dGlvbikKIHsKICAgICBhdXRvJiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2Vz
QXQoZGVzY3JpcHRpb24sIDApOwogICAgIHVuc2lnbmVkIG51bVJhbmdlcyA9IHByaW1hcnlSYW5n
ZXMuc2l6ZSgpOwpAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEZvbnRHbHlwaHM6OmRldGVybWluZVBp
dGNoKGNvbnN0IEZvCiAgICAgICAgIG1fcGl0Y2ggPSBWYXJpYWJsZVBpdGNoOwogfQogCi1ib29s
IEZvbnRHbHlwaHM6OmlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgY29uc3QKK2Jvb2wgRm9udENhc2Nh
ZGVGb250czo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdAogewogICAgIGZvciAoYXV0byYg
Zm9udFJhbmdlcyA6IG1fcmVhbGl6ZWRGYWxsYmFja1JhbmdlcykgewogICAgICAgICBpZiAoZm9u
dFJhbmdlcy5pc0xvYWRpbmcoKSkKQEAgLTk5LDcgKzk5LDcgQEAgc3RhdGljIEZvbnRSYW5nZXMg
cmVhbGl6ZU5leHRGYWxsYmFjayhjbwogICAgIHJldHVybiBGb250UmFuZ2VzKGZvbnRDYWNoZSgp
LnNpbWlsYXJGb250KGRlc2NyaXB0aW9uKSk7CiB9CiAKLWNvbnN0IEZvbnRSYW5nZXMmIEZvbnRH
bHlwaHM6OnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24sIHVuc2lnbmVkIGluZGV4KQorY29uc3QgRm9udFJhbmdlcyYgRm9udENhc2NhZGVG
b250czo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4IDwgbV9yZWFsaXplZEZh
bGxiYWNrUmFuZ2VzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIG1fcmVhbGl6ZWRGYWxsYmFja1Jh
bmdlc1tpbmRleF07CkBAIC0yNTIsNyArMjUyLDcgQEAgc3RhdGljIEdseXBoRGF0YSBnbHlwaERh
dGFGb3JOb25DSktDaGFyYQogICAgIHJldHVybiBkYXRhOwogfQogCi1HbHlwaERhdGEgRm9udEds
eXBoczo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiBjLCBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KQorR2x5cGhEYXRhIEZv
bnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIgYywgY29u
c3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkKIHsK
ICAgICAvLyBTeXN0ZW0gZmFsbGJhY2sgaXMgY2hhcmFjdGVyLWRlcGVuZGVudC4KICAgICBhdXRv
JiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDAp
OwpAQCAtMjg1LDcgKzI4NSw3IEBAIEdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JT
eXN0ZW0KICAgICByZXR1cm4gZmFsbGJhY2tHbHlwaERhdGE7CiB9CiAKLUdseXBoRGF0YSBGb250
R2x5cGhzOjpnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIgYywgY29uc3QgRm9udERlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJ
bmRleCkKK0dseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JWYXJpYW50KFVD
aGFyMzIgYywgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQg
dmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCkKIHsKICAgICB3aGlsZSAodHJ1ZSkgewog
ICAgICAgICBhdXRvJiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3Jp
cHRpb24sIGZhbGxiYWNrSW5kZXgrKyk7CkBAIC0zMDcsNyArMzA3LDcgQEAgR2x5cGhEYXRhIEZv
bnRHbHlwaHM6OmdseXBoRGF0YUZvclZhcmlhbgogICAgIHJldHVybiBnbHlwaERhdGFGb3JTeXN0
ZW1GYWxsYmFjayhjLCBkZXNjcmlwdGlvbiwgdmFyaWFudCk7CiB9CiAKLUdseXBoRGF0YSBGb250
R2x5cGhzOjpnbHlwaERhdGFGb3JOb3JtYWxWYXJpYW50KFVDaGFyMzIgYywgY29uc3QgRm9udERl
c2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK0dseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlw
aERhdGFGb3JOb3JtYWxWYXJpYW50KFVDaGFyMzIgYywgY29uc3QgRm9udERlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbikKIHsKICAgICBjb25zdCB1bnNpZ25lZCBwYWdlTnVtYmVyID0gYyAvIEdseXBo
UGFnZTo6c2l6ZTsKIApAQCAtMzY1LDcgKzM2NSw3IEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdl
PiBnbHlwaFBhZ2VGcm9tRm8KICAgICByZXR1cm4gY29uc3RfY2FzdDxHbHlwaFBhZ2UqPihmb250
LT5nbHlwaFBhZ2UocGFnZU51bWJlcikpOwogfQogCi1HbHlwaERhdGEgRm9udEdseXBoczo6Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkKK0dseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRz
OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KQogewogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAgICAgQVNTRVJUKHZhcmlhbnQgIT0gQXV0b1ZhcmlhbnQpOwpAQCAtMzkyLDcg
KzM5Miw3IEBAIEdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWMKICAgICBy
ZXR1cm4gZ2x5cGhEYXRhOwogfQogCi12b2lkIEZvbnRHbHlwaHM6OnBydW5lU3lzdGVtRmFsbGJh
Y2tzKCkKK3ZvaWQgRm9udENhc2NhZGVGb250czo6cHJ1bmVTeXN0ZW1GYWxsYmFja3MoKQogewog
ICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9u
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZUZvbnRzLmgJKHJldmlzaW9uIDE4MDI2NCkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5oOjE4MDI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAxMCwgMjAxMy0yMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgRm9udEdseXBoc19oCisj
ZGVmaW5lIEZvbnRHbHlwaHNfaAorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRS
YW5nZXMuaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJHbHlwaFBhZ2Uu
aCIKKyNpbmNsdWRlICJXaWR0aENhY2hlLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUg
IldlYkNvcmVUaHJlYWQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBGb250RGVzY3JpcHRpb247
CitjbGFzcyBGb250UGxhdGZvcm1EYXRhOworY2xhc3MgRm9udFNlbGVjdG9yOworCitjbGFzcyBG
b250R2x5cGhzIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udEdseXBocz4geworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEZvbnRHbHlwaHMpOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Rm9udEds
eXBocz4gY3JlYXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRm9udEdseXBocyhmb250U2VsZWN0b3IpKTsgfQorICAgIHN0YXRp
YyBSZWY8Rm9udEdseXBocz4gY3JlYXRlRm9yUGxhdGZvcm1Gb250KGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIHBsYXRmb3JtRGF0YSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBGb250R2x5cGhzKHBs
YXRmb3JtRGF0YSkpOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCB+Rm9udEdseXBocygpOworCisg
ICAgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGb3JQbGF0Zm9y
bUZvbnQ7IH0KKworICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQpOworCisgICAgYm9vbCBpc0ZpeGVk
UGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJik7CisgICAgdm9pZCBkZXRlcm1pbmVQaXRjaChj
b25zdCBGb250RGVzY3JpcHRpb24mKTsKKworICAgIGJvb2wgaXNMb2FkaW5nQ3VzdG9tRm9udHMo
KSBjb25zdDsKKworICAgIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgeyByZXR1cm4gbV9m
b250U2VsZWN0b3IuZ2V0KCk7IH0KKyAgICAvLyBGSVhNRTogSXQgc2hvdWxkIGJlIHBvc3NpYmxl
IHRvIGNvbWJpbmUgZm9udFNlbGVjdG9yVmVyc2lvbiBhbmQgZ2VuZXJhdGlvbi4KKyAgICB1bnNp
Z25lZCBmb250U2VsZWN0b3JWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9mb250U2VsZWN0b3JW
ZXJzaW9uOyB9CisgICAgdW5zaWduZWQgZ2VuZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZ2Vu
ZXJhdGlvbjsgfQorCisgICAgV2lkdGhDYWNoZSYgd2lkdGhDYWNoZSgpIHsgcmV0dXJuIG1fd2lk
dGhDYWNoZTsgfQorICAgIGNvbnN0IFdpZHRoQ2FjaGUmIHdpZHRoQ2FjaGUoKSBjb25zdCB7IHJl
dHVybiBtX3dpZHRoQ2FjaGU7IH0KKworICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYpOworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnRSYW5nZXMm
IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIHVuc2lnbmVk
IGZhbGxiYWNrSW5kZXgpOworCisgICAgdm9pZCBwcnVuZVN5c3RlbUZhbGxiYWNrcygpOworCitw
cml2YXRlOgorICAgIEZvbnRHbHlwaHMoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKKyAgICBG
b250R2x5cGhzKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKworICAgIEdseXBoRGF0YSBnbHlw
aERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBG
b250VmFyaWFudCk7CisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoVUNo
YXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJik7CisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZv
clZhcmlhbnQoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIHVu
c2lnbmVkIGZhbGxiYWNrSW5kZXgpOworCisgICAgVmVjdG9yPEZvbnRSYW5nZXMsIDE+IG1fcmVh
bGl6ZWRGYWxsYmFja1JhbmdlczsKKyAgICB1bnNpZ25lZCBtX2xhc3RSZWFsaXplZEZhbGxiYWNr
SW5kZXggeyAwIH07CisKKyAgICBSZWZQdHI8R2x5cGhQYWdlPiBtX2NhY2hlZFBhZ2VaZXJvOwor
ICAgIEhhc2hNYXA8aW50LCBSZWZQdHI8R2x5cGhQYWdlPj4gbV9jYWNoZWRQYWdlczsKKworICAg
IEhhc2hTZXQ8UmVmUHRyPEZvbnQ+PiBtX3N5c3RlbUZhbGxiYWNrRm9udFNldDsKKworICAgIGNv
bnN0IEZvbnQqIG1fY2FjaGVkUHJpbWFyeUZvbnQ7CisgICAgUmVmUHRyPEZvbnRTZWxlY3Rvcj4g
bV9mb250U2VsZWN0b3I7CisKKyAgICBXaWR0aENhY2hlIG1fd2lkdGhDYWNoZTsKKworICAgIHVu
c2lnbmVkIG1fZm9udFNlbGVjdG9yVmVyc2lvbjsKKyAgICB1bnNpZ25lZCBzaG9ydCBtX2dlbmVy
YXRpb247CisgICAgUGl0Y2ggbV9waXRjaCB7IFVua25vd25QaXRjaCB9OworICAgIGJvb2wgbV9p
c0ZvclBsYXRmb3JtRm9udCB7IGZhbHNlIH07Cit9OworCitpbmxpbmUgYm9vbCBGb250R2x5cGhz
Ojppc0ZpeGVkUGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAg
ICBpZiAobV9waXRjaCA9PSBVbmtub3duUGl0Y2gpCisgICAgICAgIGRldGVybWluZVBpdGNoKGRl
c2NyaXB0aW9uKTsKKyAgICByZXR1cm4gbV9waXRjaCA9PSBGaXhlZFBpdGNoOworfTsKKworaW5s
aW5lIGNvbnN0IEZvbnQmIEZvbnRHbHlwaHM6OnByaW1hcnlGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24pCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBp
ZiAoIW1fY2FjaGVkUHJpbWFyeUZvbnQpIHsKKyAgICAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9
IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKKyAgICAgICAgbV9jYWNo
ZWRQcmltYXJ5Rm9udCA9IHByaW1hcnlSYW5nZXMuZm9udEZvckNoYXJhY3RlcignICcpOworICAg
ICAgICBpZiAoIW1fY2FjaGVkUHJpbWFyeUZvbnQpCisgICAgICAgICAgICBtX2NhY2hlZFByaW1h
cnlGb250ID0gJnByaW1hcnlSYW5nZXMuZm9udEZvckZpcnN0UmFuZ2UoKTsKKyAgICB9CisgICAg
cmV0dXJuICptX2NhY2hlZFByaW1hcnlGb250OworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMu
aAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGVGb250cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOCw4ICsxOCw4IEBACiAgKgogICov
CiAKLSNpZm5kZWYgRm9udEdseXBoc19oCi0jZGVmaW5lIEZvbnRHbHlwaHNfaAorI2lmbmRlZiBG
b250Q2FzY2FkZUZvbnRzX2gKKyNkZWZpbmUgRm9udENhc2NhZGVGb250c19oCiAKICNpbmNsdWRl
ICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFJhbmdlcy5oIgpAQCAtNDEsMTMgKzQxLDEzIEBAIGNs
YXNzIEZvbnREZXNjcmlwdGlvbjsKIGNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7CiBjbGFzcyBGb250
U2VsZWN0b3I7CiAKLWNsYXNzIEZvbnRHbHlwaHMgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250R2x5
cGhzPiB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9udEdseXBocyk7CitjbGFzcyBGb250
Q2FzY2FkZUZvbnRzIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udENhc2NhZGVGb250cz4geworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEZvbnRDYXNjYWRlRm9udHMpOwogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8Rm9udEdseXBocz4gY3JlYXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250
U2VsZWN0b3IpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRm9udEdseXBocyhmb250U2VsZWN0b3Ip
KTsgfQotICAgIHN0YXRpYyBSZWY8Rm9udEdseXBocz4gY3JlYXRlRm9yUGxhdGZvcm1Gb250KGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkgeyByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGb250R2x5cGhzKHBsYXRmb3JtRGF0YSkpOyB9CisgICAgc3RhdGljIFJlZjxGb250Q2FzY2Fk
ZUZvbnRzPiBjcmVhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikgeyBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGb250Q2FzY2FkZUZvbnRzKGZvbnRTZWxlY3RvcikpOyB9Cisg
ICAgc3RhdGljIFJlZjxGb250Q2FzY2FkZUZvbnRzPiBjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3
IEZvbnRDYXNjYWRlRm9udHMocGxhdGZvcm1EYXRhKSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JU
IH5Gb250R2x5cGhzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgfkZvbnRDYXNjYWRlRm9udHMoKTsK
IAogICAgIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2lzRm9yUGxh
dGZvcm1Gb250OyB9CiAKQEAgLTcyLDggKzcyLDggQEAgcHVibGljOgogICAgIHZvaWQgcHJ1bmVT
eXN0ZW1GYWxsYmFja3MoKTsKIAogcHJpdmF0ZToKLSAgICBGb250R2x5cGhzKFBhc3NSZWZQdHI8
Rm9udFNlbGVjdG9yPik7Ci0gICAgRm9udEdseXBocyhjb25zdCBGb250UGxhdGZvcm1EYXRhJik7
CisgICAgRm9udENhc2NhZGVGb250cyhQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOworICAgIEZv
bnRDYXNjYWRlRm9udHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwogCiAgICAgR2x5cGhEYXRh
IGdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIEZvbnRWYXJpYW50KTsKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFu
dChVQ2hhcjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mKTsKQEAgLTk4LDE0ICs5OCwxNCBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9pc0ZvclBsYXRmb3JtRm9udCB7IGZhbHNlIH07CiB9OwogCi1p
bmxpbmUgYm9vbCBGb250R2x5cGhzOjppc0ZpeGVkUGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbikKK2lubGluZSBib29sIEZvbnRDYXNjYWRlRm9udHM6OmlzRml4ZWRQaXRj
aChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewogICAgIGlmIChtX3BpdGNo
ID09IFVua25vd25QaXRjaCkKICAgICAgICAgZGV0ZXJtaW5lUGl0Y2goZGVzY3JpcHRpb24pOwog
ICAgIHJldHVybiBtX3BpdGNoID09IEZpeGVkUGl0Y2g7CiB9OwogCi1pbmxpbmUgY29uc3QgRm9u
dCYgRm9udEdseXBoczo6cHJpbWFyeUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlw
dGlvbikKK2lubGluZSBjb25zdCBGb250JiBGb250Q2FzY2FkZUZvbnRzOjpwcmltYXJ5Rm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250KSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcAkocmV2aXNpb24g
MTgwMjY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMTMtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKLQotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgot
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdlLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotCi1Gb250R2x5cGhzOjpGb250R2x5cGhzKFBhc3NSZWZQdHI8Rm9u
dFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCi0gICAgOiBtX2NhY2hlZFByaW1hcnlGb250KDApCi0g
ICAgLCBtX2ZvbnRTZWxlY3Rvcihmb250U2VsZWN0b3IpCi0gICAgLCBtX2ZvbnRTZWxlY3RvclZl
cnNpb24obV9mb250U2VsZWN0b3IgPyBtX2ZvbnRTZWxlY3Rvci0+dmVyc2lvbigpIDogMCkKLSAg
ICAsIG1fZ2VuZXJhdGlvbihmb250Q2FjaGUoKS5nZW5lcmF0aW9uKCkpCi17Ci19Ci0KLUZvbnRH
bHlwaHM6OkZvbnRHbHlwaHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQot
ICAgIDogbV9jYWNoZWRQcmltYXJ5Rm9udCgwKQotICAgICwgbV9mb250U2VsZWN0b3IoMCkKLSAg
ICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbigwKQotICAgICwgbV9nZW5lcmF0aW9uKGZvbnRDYWNo
ZSgpLmdlbmVyYXRpb24oKSkKLSAgICAsIG1faXNGb3JQbGF0Zm9ybUZvbnQodHJ1ZSkKLXsKLSAg
ICBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuYXBwZW5kKEZvbnRSYW5nZXMoZm9udENhY2hlKCku
Zm9udEZvclBsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEpKSk7Ci19Ci0KLUZvbnRHbHlwaHM6On5G
b250R2x5cGhzKCkKLXsKLX0KLQotdm9pZCBGb250R2x5cGhzOjpkZXRlcm1pbmVQaXRjaChjb25z
dCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQotewotICAgIGF1dG8mIHByaW1hcnlSYW5n
ZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7Ci0gICAgdW5zaWdu
ZWQgbnVtUmFuZ2VzID0gcHJpbWFyeVJhbmdlcy5zaXplKCk7Ci0gICAgaWYgKG51bVJhbmdlcyA9
PSAxKQotICAgICAgICBtX3BpdGNoID0gcHJpbWFyeVJhbmdlcy5yYW5nZUF0KDApLmZvbnQoKS5w
aXRjaCgpOwotICAgIGVsc2UKLSAgICAgICAgbV9waXRjaCA9IFZhcmlhYmxlUGl0Y2g7Ci19Ci0K
LWJvb2wgRm9udEdseXBoczo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdAotewotICAgIGZv
ciAoYXV0byYgZm9udFJhbmdlcyA6IG1fcmVhbGl6ZWRGYWxsYmFja1JhbmdlcykgewotICAgICAg
ICBpZiAoZm9udFJhbmdlcy5pc0xvYWRpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBGb250UmFuZ2VzIHJlYWxpemVO
ZXh0RmFsbGJhY2soY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQm
IGluZGV4LCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKLXsKLSAgICBBU1NFUlQoaW5kZXgg
PCBkZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpKTsKLQotICAgIHdoaWxlIChpbmRleCA8IGRlc2Ny
aXB0aW9uLmZhbWlseUNvdW50KCkpIHsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1p
bHkgPSBkZXNjcmlwdGlvbi5mYW1pbHlBdChpbmRleCsrKTsKLSAgICAgICAgaWYgKGZhbWlseS5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGZvbnRTZWxlY3Rv
cikgewotICAgICAgICAgICAgYXV0byByYW5nZXMgPSBmb250U2VsZWN0b3ItPmZvbnRSYW5nZXNG
b3JGYW1pbHkoZGVzY3JpcHRpb24sIGZhbWlseSk7Ci0gICAgICAgICAgICBpZiAoIXJhbmdlcy5p
c051bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2VzOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChhdXRvIGZvbnQgPSBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9u
LCBmYW1pbHkpKQotICAgICAgICAgICAgcmV0dXJuIEZvbnRSYW5nZXMoV1RGOjptb3ZlKGZvbnQp
KTsKLSAgICB9Ci0gICAgLy8gV2UgZGlkbid0IGZpbmQgYSBmb250LiBUcnkgdG8gZmluZCBhIHNp
bWlsYXIgZm9udCB1c2luZyBvdXIgb3duIHNwZWNpZmljIGtub3dsZWRnZSBhYm91dCBvdXIgcGxh
dGZvcm0uCi0gICAgLy8gRm9yIGV4YW1wbGUgb24gT1MgWCwgd2Uga25vdyB0byBtYXAgYW55IGZh
bWlsaWVzIGNvbnRhaW5pbmcgdGhlIHdvcmRzIEFyYWJpYywgUGFzaHRvLCBvciBVcmR1IHRvIHRo
ZQotICAgIC8vIEdlZXphIFBybyBmb250LgotICAgIHJldHVybiBGb250UmFuZ2VzKGZvbnRDYWNo
ZSgpLnNpbWlsYXJGb250KGRlc2NyaXB0aW9uKSk7Ci19Ci0KLWNvbnN0IEZvbnRSYW5nZXMmIEZv
bnRHbHlwaHM6OnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24sIHVuc2lnbmVkIGluZGV4KQotewotICAgIGlmIChpbmRleCA8IG1fcmVhbGl6
ZWRGYWxsYmFja1Jhbmdlcy5zaXplKCkpCi0gICAgICAgIHJldHVybiBtX3JlYWxpemVkRmFsbGJh
Y2tSYW5nZXNbaW5kZXhdOwotCi0gICAgQVNTRVJUKGluZGV4ID09IG1fcmVhbGl6ZWRGYWxsYmFj
a1Jhbmdlcy5zaXplKCkpOwotICAgIEFTU0VSVChmb250Q2FjaGUoKS5nZW5lcmF0aW9uKCkgPT0g
bV9nZW5lcmF0aW9uKTsKLQotICAgIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5hcHBlbmQoRm9u
dFJhbmdlcygpKTsKLSAgICBhdXRvJiBmb250UmFuZ2VzID0gbV9yZWFsaXplZEZhbGxiYWNrUmFu
Z2VzLmxhc3QoKTsKLQotICAgIGlmICghaW5kZXgpIHsKLSAgICAgICAgZm9udFJhbmdlcyA9IHJl
YWxpemVOZXh0RmFsbGJhY2soZGVzY3JpcHRpb24sIG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRl
eCwgbV9mb250U2VsZWN0b3IuZ2V0KCkpOwotICAgICAgICBpZiAoZm9udFJhbmdlcy5pc051bGwo
KSAmJiBtX2ZvbnRTZWxlY3RvcikKLSAgICAgICAgICAgIGZvbnRSYW5nZXMgPSBtX2ZvbnRTZWxl
Y3Rvci0+Zm9udFJhbmdlc0ZvckZhbWlseShkZXNjcmlwdGlvbiwgc3RhbmRhcmRGYW1pbHkpOwot
ICAgICAgICBpZiAoZm9udFJhbmdlcy5pc051bGwoKSkKLSAgICAgICAgICAgIGZvbnRSYW5nZXMg
PSBGb250UmFuZ2VzKGZvbnRDYWNoZSgpLmxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZGVzY3JpcHRp
b24pKTsKLSAgICAgICAgcmV0dXJuIGZvbnRSYW5nZXM7Ci0gICAgfQotCi0gICAgaWYgKG1fbGFz
dFJlYWxpemVkRmFsbGJhY2tJbmRleCA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCkpCi0gICAg
ICAgIGZvbnRSYW5nZXMgPSByZWFsaXplTmV4dEZhbGxiYWNrKGRlc2NyaXB0aW9uLCBtX2xhc3RS
ZWFsaXplZEZhbGxiYWNrSW5kZXgsIG1fZm9udFNlbGVjdG9yLmdldCgpKTsKLQotICAgIGlmIChm
b250UmFuZ2VzLmlzTnVsbCgpICYmIG1fZm9udFNlbGVjdG9yKSB7Ci0gICAgICAgIEFTU0VSVCht
X2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPj0gZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKSk7
Ci0KLSAgICAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRleCA9IG1fbGFzdFJl
YWxpemVkRmFsbGJhY2tJbmRleCAtIGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7Ci0gICAgICAg
IGlmIChmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID09IG1fZm9udFNlbGVjdG9yLT5mYWxsYmFj
a0ZvbnRDb3VudCgpKQotICAgICAgICAgICAgcmV0dXJuIGZvbnRSYW5nZXM7Ci0gICAgICAgICsr
bV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4OwotICAgICAgICBmb250UmFuZ2VzID0gRm9udFJh
bmdlcyhtX2ZvbnRTZWxlY3Rvci0+ZmFsbGJhY2tGb250QXQoZGVzY3JpcHRpb24sIGZvbnRTZWxl
Y3RvckZhbGxiYWNrSW5kZXgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZm9udFJhbmdlczsKLX0K
LQotc3RhdGljIGlubGluZSBib29sIGlzSW5SYW5nZShVQ2hhcjMyIGNoYXJhY3RlciwgVUNoYXIz
MiBsb3dlckJvdW5kLCBVQ2hhcjMyIHVwcGVyQm91bmQpCi17Ci0gICAgcmV0dXJuIGNoYXJhY3Rl
ciA+PSBsb3dlckJvdW5kICYmIGNoYXJhY3RlciA8PSB1cHBlckJvdW5kOwotfQotCi1zdGF0aWMg
Ym9vbCBzaG91bGRJZ25vcmVSb3RhdGlvbihVQ2hhcjMyIGNoYXJhY3RlcikKLXsKLSAgICBpZiAo
Y2hhcmFjdGVyID09IDB4MDAwQTcgfHwgY2hhcmFjdGVyID09IDB4MDAwQTkgfHwgY2hhcmFjdGVy
ID09IDB4MDAwQUUpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGNoYXJhY3RlciA9
PSAweDAwMEI2IHx8IGNoYXJhY3RlciA9PSAweDAwMEJDIHx8IGNoYXJhY3RlciA9PSAweDAwMEJE
IHx8IGNoYXJhY3RlciA9PSAweDAwMEJFKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlm
IChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAwMkU1LCAweDAwMkVCKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgCi0gICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDExMDAsIDB4MDEx
RkYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDE0MDEsIDB4MDE2N0YpIHx8IGlzSW5SYW5n
ZShjaGFyYWN0ZXIsIDB4MDE4MDAsIDB4MDE4RkYpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGlmIChjaGFyYWN0ZXIgPT0gMHgwMjAxNiB8fCBjaGFyYWN0ZXIgPT0gMHgwMjAyMCB8fCBj
aGFyYWN0ZXIgPT0gMHgwMjAyMSB8fCBjaGFyYWN0ZXIgPT0gMHgyMDMwIHx8IGNoYXJhY3RlciA9
PSAweDAyMDMxKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChpc0luUmFuZ2UoY2hh
cmFjdGVyLCAweDAyMDNCLCAweDAyMDNEKSB8fCBjaGFyYWN0ZXIgPT0gMHgwMjA0MiB8fCBjaGFy
YWN0ZXIgPT0gMHgwMjA0NCB8fCBjaGFyYWN0ZXIgPT0gMHgwMjA0NwotICAgICAgICB8fCBjaGFy
YWN0ZXIgPT0gMHgwMjA0OCB8fCBjaGFyYWN0ZXIgPT0gMHgwMjA0OSB8fCBjaGFyYWN0ZXIgPT0g
MHgyMDUxKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChpc0luUmFuZ2UoY2hhcmFj
dGVyLCAweDAyMDY1LCAweDAyMDY5KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMERELCAw
eDAyMEUwKQotICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMEUyLCAweDAyMEU0
KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMTAwLCAweDAyMTE3KQotICAgICAgICB8fCBp
c0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMTE5LCAweDAyMTMxKSB8fCBpc0luUmFuZ2UoY2hhcmFj
dGVyLCAweDAyMTMzLCAweDAyMTNGKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
aXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjE0NSwgMHgwMjE0QSkgfHwgY2hhcmFjdGVyID09IDB4
MDIxNEMgfHwgY2hhcmFjdGVyID09IDB4MDIxNEQKLSAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJh
Y3RlciwgMHgwMjE0RiwgMHgwMjE4RikpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYg
KGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzMDAsIDB4MDIzMDcpIHx8IGlzSW5SYW5nZShjaGFy
YWN0ZXIsIDB4MDIzMEMsIDB4MDIzMUYpCi0gICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIs
IDB4MDIzMjIsIDB4MDIzMkIpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzN0QsIDB4MDIz
OUEpCi0gICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzQjQsIDB4MDIzQjYpIHx8
IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzQkEsIDB4MDIzQ0YpCi0gICAgICAgIHx8IGlzSW5S
YW5nZShjaGFyYWN0ZXIsIDB4MDIzRDEsIDB4MDIzREIpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIs
IDB4MDIzRTIsIDB4MDI0RkYpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChpc0lu
UmFuZ2UoY2hhcmFjdGVyLCAweDAyNUEwLCAweDAyNjE5KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVy
LCAweDAyNjIwLCAweDAyNzY3KQotICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAy
Nzc2LCAweDAyNzkzKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyQjEyLCAweDAyQjJGKQot
ICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyQjRELCAweDAyQkZGKSB8fCBpc0lu
UmFuZ2UoY2hhcmFjdGVyLCAweDAyRTgwLCAweDAzMDA3KSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpZiAoY2hhcmFjdGVyID09IDB4MDMwMTIgfHwgY2hhcmFjdGVyID09IDB4MDMwMTMg
fHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMzAyMCwgMHgwMzAyRikKLSAgICAgICAgfHwgaXNJ
blJhbmdlKGNoYXJhY3RlciwgMHgwMzAzMSwgMHgwMzA5RikgfHwgaXNJblJhbmdlKGNoYXJhY3Rl
ciwgMHgwMzBBMSwgMHgwMzBGQikKLSAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgw
MzBGRCwgMHgwQTRDRikpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGlzSW5SYW5n
ZShjaGFyYWN0ZXIsIDB4MEE4NDAsIDB4MEE4N0YpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4
MEE5NjAsIDB4MEE5N0YpCi0gICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEFDMDAs
IDB4MEQ3RkYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEUwMDAsIDB4MEZBRkYpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRTEw
LCAweDBGRTFGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRTMwLCAweDBGRTQ4KQotICAg
ICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRTUwLCAweDBGRTU3KSB8fCBpc0luUmFu
Z2UoY2hhcmFjdGVyLCAweDBGRTVGLCAweDBGRTYyKQotICAgICAgICB8fCBpc0luUmFuZ2UoY2hh
cmFjdGVyLCAweDBGRTY3LCAweDBGRTZGKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBp
ZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkYwMSwgMHgwRkYwNykgfHwgaXNJblJhbmdlKGNo
YXJhY3RlciwgMHgwRkYwQSwgMHgwRkYwQykKLSAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3Rl
ciwgMHgwRkYwRSwgMHgwRkYxOSkgfHwgY2hhcmFjdGVyID09IDB4MEZGMUIgfHwgaXNJblJhbmdl
KGNoYXJhY3RlciwgMHgwRkYxRiwgMHgwRkYzQSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgaWYgKGNoYXJhY3RlciA9PSAweDBGRjNDIHx8IGNoYXJhY3RlciA9PSAweDBGRjNFKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRjQw
LCAweDBGRjVBKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRkUwLCAweDBGRkUyKQotICAg
ICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRkU0LCAweDBGRkU3KSB8fCBpc0luUmFu
Z2UoY2hhcmFjdGVyLCAweDBGRkYwLCAweDBGRkY4KQotICAgICAgICB8fCBjaGFyYWN0ZXIgPT0g
MHgwRkZGRCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoaXNJblJhbmdlKGNoYXJh
Y3RlciwgMHgxMzAwMCwgMHgxMzQyRikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgxQjAwMCwg
MHgxQjBGRikKLSAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgxRDAwMCwgMHgxRDFG
RikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgxRDMwMCwgMHgxRDM3RikKLSAgICAgICAgfHwg
aXNJblJhbmdlKGNoYXJhY3RlciwgMHgxRjAwMCwgMHgxRjY0RikgfHwgaXNJblJhbmdlKGNoYXJh
Y3RlciwgMHgxRjY4MCwgMHgxRjc3RikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAg
IGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDIwMDAwLCAweDJGRkZEKSB8fCBpc0luUmFuZ2Uo
Y2hhcmFjdGVyLCAweDMwMDAwLCAweDNGRkZEKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLXN0YXRpYyBHbHlwaERh
dGEgZ2x5cGhEYXRhRm9yQ0pLQ2hhcmFjdGVyV2l0aG91dFN5bnRoZXRpY0l0YWxpYyhVQ2hhcjMy
IGNoYXJhY3RlciwgR2x5cGhEYXRhJiBkYXRhKQotewotICAgIEdseXBoRGF0YSBub25JdGFsaWNE
YXRhID0gZGF0YS5mb250LT5ub25TeW50aGV0aWNJdGFsaWNGb250KCktPmdseXBoRGF0YUZvckNo
YXJhY3RlcihjaGFyYWN0ZXIpOwotICAgIGlmIChub25JdGFsaWNEYXRhLmZvbnQpCi0gICAgICAg
IHJldHVybiBub25JdGFsaWNEYXRhOwotICAgIHJldHVybiBkYXRhOwotfQotI2VuZGlmCi0gICAg
Ci1zdGF0aWMgR2x5cGhEYXRhIGdseXBoRGF0YUZvck5vbkNKS0NoYXJhY3RlcldpdGhHbHlwaE9y
aWVudGF0aW9uKFVDaGFyMzIgY2hhcmFjdGVyLCBOb25DSktHbHlwaE9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBjb25zdCBHbHlwaERhdGEmIGRhdGEpCi17Ci0gICAgaWYgKG9yaWVudGF0aW9uID09
IE5vbkNKS0dseXBoT3JpZW50YXRpb25VcHJpZ2h0IHx8IHNob3VsZElnbm9yZVJvdGF0aW9uKGNo
YXJhY3RlcikpIHsKLSAgICAgICAgR2x5cGhEYXRhIHVwcmlnaHREYXRhID0gZGF0YS5mb250LT51
cHJpZ2h0T3JpZW50YXRpb25Gb250KCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIp
OwotICAgICAgICAvLyBJZiB0aGUgZ2x5cGhzIGFyZSB0aGUgc2FtZSwgdGhlbiB3ZSBrbm93IHdl
IGNhbiBqdXN0IHVzZSB0aGUgaG9yaXpvbnRhbCBnbHlwaCByb3RhdGVkIHZlcnRpY2FsbHkgdG8g
YmUgdXByaWdodC4KLSAgICAgICAgaWYgKGRhdGEuZ2x5cGggPT0gdXByaWdodERhdGEuZ2x5cGgp
Ci0gICAgICAgICAgICByZXR1cm4gZGF0YTsKLSAgICAgICAgLy8gVGhlIGdseXBocyBhcmUgZGlz
dGluY3QsIG1lYW5pbmcgdGhhdCB0aGUgZm9udCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBi
YWtlZCBpbnRvIGl0LiBXZSBjYW4ndCB1c2UgdGhhdAotICAgICAgICAvLyBnbHlwaCwgc28gd2Ug
ZmFsbCBiYWNrIHRvIHRoZSB1cHJpZ2h0IGRhdGEgYW5kIHVzZSB0aGUgaG9yaXpvbnRhbCBnbHlw
aC4KLSAgICAgICAgaWYgKHVwcmlnaHREYXRhLmZvbnQpCi0gICAgICAgICAgICByZXR1cm4gdXBy
aWdodERhdGE7Ci0gICAgfSBlbHNlIGlmIChvcmllbnRhdGlvbiA9PSBOb25DSktHbHlwaE9yaWVu
dGF0aW9uVmVydGljYWxSaWdodCkgewotICAgICAgICBHbHlwaERhdGEgdmVydGljYWxSaWdodERh
dGEgPSBkYXRhLmZvbnQtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKS0+Z2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Ci0gICAgICAgIC8vIElmIHRoZSBnbHlwaHMgYXJlIGRp
c3RpbmN0LCB3ZSB3aWxsIG1ha2UgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZm9udCBoYXMgYSB2
ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZAotICAgICAgICAvLyBpbnRvIGl0LgotICAgICAgICBp
ZiAoZGF0YS5nbHlwaCAhPSB2ZXJ0aWNhbFJpZ2h0RGF0YS5nbHlwaCkKLSAgICAgICAgICAgIHJl
dHVybiBkYXRhOwotICAgICAgICAvLyBUaGUgZ2x5cGhzIGFyZSBpZGVudGljYWwsIG1lYW5pbmcg
dGhhdCB3ZSBzaG91bGQganVzdCB1c2UgdGhlIGhvcml6b250YWwgZ2x5cGguCi0gICAgICAgIGlm
ICh2ZXJ0aWNhbFJpZ2h0RGF0YS5mb250KQotICAgICAgICAgICAgcmV0dXJuIHZlcnRpY2FsUmln
aHREYXRhOwotICAgIH0KLSAgICByZXR1cm4gZGF0YTsKLX0KLQotR2x5cGhEYXRhIEZvbnRHbHlw
aHM6OmdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIgYywgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkKLXsKLSAgICAvLyBTeXN0
ZW0gZmFsbGJhY2sgaXMgY2hhcmFjdGVyLWRlcGVuZGVudC4KLSAgICBhdXRvJiBwcmltYXJ5UmFu
Z2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApOwotICAgIGF1dG8q
IG9yaWdpbmFsRm9udCA9IHByaW1hcnlSYW5nZXMuZm9udEZvckNoYXJhY3RlcihjKTsKLSAgICBp
ZiAoIW9yaWdpbmFsRm9udCkKLSAgICAgICAgb3JpZ2luYWxGb250ID0gJnByaW1hcnlSYW5nZXMu
Zm9udEZvckZpcnN0UmFuZ2UoKTsKLQotICAgIFJlZlB0cjxGb250PiBzeXN0ZW1GYWxsYmFja0Zv
bnQgPSBvcmlnaW5hbEZvbnQtPnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3RlcihjLCBkZXNj
cmlwdGlvbiwgbV9pc0ZvclBsYXRmb3JtRm9udCk7Ci0gICAgaWYgKCFzeXN0ZW1GYWxsYmFja0Zv
bnQpCi0gICAgICAgIHJldHVybiBHbHlwaERhdGEoKTsKLQotICAgIGlmIChzeXN0ZW1GYWxsYmFj
a0ZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIXN5c3Rl
bUZhbGxiYWNrRm9udC0+aGFzVmVydGljYWxHbHlwaHMoKSAmJiBGb250Q2FzY2FkZTo6aXNDSktJ
ZGVvZ3JhcGhPclN5bWJvbChjKSkKLSAgICAgICAgdmFyaWFudCA9IEJyb2tlbklkZW9ncmFwaFZh
cmlhbnQ7Ci0KLSAgICBHbHlwaERhdGEgZmFsbGJhY2tHbHlwaERhdGE7Ci0gICAgaWYgKHZhcmlh
bnQgPT0gTm9ybWFsVmFyaWFudCkKLSAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBzeXN0ZW1G
YWxsYmFja0ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKLSAgICBlbHNlCi0gICAgICAg
IGZhbGxiYWNrR2x5cGhEYXRhID0gc3lzdGVtRmFsbGJhY2tGb250LT52YXJpYW50Rm9udChkZXNj
cmlwdGlvbiwgdmFyaWFudCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKLQotICAgIGlmICh2
YXJpYW50ID09IE5vcm1hbFZhcmlhbnQgJiYgZmFsbGJhY2tHbHlwaERhdGEuZm9udCkgewotICAg
ICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpICYmIGZhbGxi
YWNrR2x5cGhEYXRhLmZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGlj
YWwgJiYgIWZhbGxiYWNrR2x5cGhEYXRhLmZvbnQtPmlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2so
KSkKLSAgICAgICAgICAgIGZhbGxiYWNrR2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hh
cmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oYywgZGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmll
bnRhdGlvbigpLCBmYWxsYmFja0dseXBoRGF0YSk7Ci0gICAgfQotCi0gICAgLy8gS2VlcCB0aGUg
c3lzdGVtIGZhbGxiYWNrIGZvbnRzIHdlIHVzZSBhbGl2ZS4KLSAgICBpZiAoZmFsbGJhY2tHbHlw
aERhdGEuZ2x5cGgpCi0gICAgICAgIG1fc3lzdGVtRmFsbGJhY2tGb250U2V0LmFkZChzeXN0ZW1G
YWxsYmFja0ZvbnQucmVsZWFzZSgpKTsKLQotICAgIHJldHVybiBmYWxsYmFja0dseXBoRGF0YTsK
LX0KLQotR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiBj
LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50
LCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KQotewotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAg
IGF1dG8mIGZvbnRSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwg
ZmFsbGJhY2tJbmRleCsrKTsKLSAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgYXV0byogZm9udCA9IGZvbnRSYW5nZXMuZm9udEZvckNo
YXJhY3RlcihjKTsKLSAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBmb250ID8gZm9udC0+Z2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKGMpIDogR2x5cGhEYXRhKCk7Ci0gICAgICAgIGlmIChkYXRhLmZvbnQp
IHsKLSAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9udCBmdW5jdGlvbiBzaG91bGQgbm90IG5v
cm1hbGx5IHJldHVybiAwLgotICAgICAgICAgICAgLy8gQnV0IGlmIGl0IGRvZXMsIHdlIHdpbGwg
anVzdCByZW5kZXIgdGhlIGNhcGl0YWwgbGV0dGVyIGJpZy4KLSAgICAgICAgICAgIFJlZlB0cjxG
b250PiB2YXJpYW50Rm9udCA9IGRhdGEuZm9udC0+dmFyaWFudEZvbnQoZGVzY3JpcHRpb24sIHZh
cmlhbnQpOwotICAgICAgICAgICAgaWYgKCF2YXJpYW50Rm9udCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZGF0YTsKLQotICAgICAgICAgICAgcmV0dXJuIHZhcmlhbnRGb250LT5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoYyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZ2x5cGhEYXRh
Rm9yU3lzdGVtRmFsbGJhY2soYywgZGVzY3JpcHRpb24sIHZhcmlhbnQpOwotfQotCi1HbHlwaERh
dGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChVQ2hhcjMyIGMsIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCi17Ci0gICAgY29uc3QgdW5zaWduZWQgcGFn
ZU51bWJlciA9IGMgLyBHbHlwaFBhZ2U6OnNpemU7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGZhbGxi
YWNrSW5kZXggPSAwOyB0cnVlOyArK2ZhbGxiYWNrSW5kZXgpIHsKLSAgICAgICAgYXV0byYgZm9u
dFJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCBmYWxsYmFja0lu
ZGV4KTsKLSAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgYXV0byogZm9udCA9IGZvbnRSYW5nZXMuZm9udEZvckNoYXJhY3RlcihjKTsK
LSAgICAgICAgYXV0byogcGFnZSA9IGZvbnQgPyBmb250LT5nbHlwaFBhZ2UocGFnZU51bWJlcikg
OiBudWxscHRyOwotICAgICAgICBpZiAoIXBhZ2UpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgR2x5cGhEYXRhIGRhdGEgPSBwYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7Ci0g
ICAgICAgIGlmIChkYXRhLmZvbnQpIHsKLSAgICAgICAgICAgIGlmIChkYXRhLmZvbnQtPnBsYXRm
b3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWRhdGEuZm9udC0+aXNUZXh0
T3JpZW50YXRpb25GYWxsYmFjaygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFGb250Q2FzY2Fk
ZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdseXBoRGF0YUZvck5vbkNKS0NoYXJhY3RlcldpdGhHbHlwaE9yaWVudGF0aW9uKGMsIGRlc2Ny
aXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSwgZGF0YSk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoIWRhdGEuZm9udC0+aGFzVmVydGljYWxHbHlwaHMoKSkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBVc2UgdGhlIGJyb2tlbiBpZGVvZ3JhcGggZm9udCBkYXRhLiBUaGUgYnJva2VuIGlk
ZW9ncmFwaCBmb250IHdpbGwgdXNlIHRoZSBob3Jpem9udGFsIHdpZHRoIG9mIGdseXBocwotICAg
ICAgICAgICAgICAgICAgICAvLyB0byBtYWtlIHN1cmUgeW91IGdldCBhIHNxdWFyZSAoZXZlbiBm
b3IgYnJva2VuIGdseXBocyBsaWtlIHN5bWJvbHMgdXNlZCBmb3IgcHVuY3R1YXRpb24pLgotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yVmFyaWFudChjLCBkZXNjcmlwdGlv
biwgQnJva2VuSWRlb2dyYXBoVmFyaWFudCwgZmFsbGJhY2tJbmRleCk7Ci0gICAgICAgICAgICAg
ICAgfQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICAgICAgICAgIGlmIChkYXRhLmZvbnQt
PnBsYXRmb3JtRGF0YSgpLnN5bnRoZXRpY09ibGlxdWUoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdseXBoRGF0YUZvckNKS0NoYXJhY3RlcldpdGhvdXRTeW50aGV0aWNJdGFsaWMoYywg
ZGF0YSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGRhdGE7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZ2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJh
Y2soYywgZGVzY3JpcHRpb24sIE5vcm1hbFZhcmlhbnQpOwotfQotCi1zdGF0aWMgUmVmUHRyPEds
eXBoUGFnZT4gZ2x5cGhQYWdlRnJvbUZvbnRSYW5nZXModW5zaWduZWQgcGFnZU51bWJlciwgY29u
c3QgRm9udFJhbmdlcyYgZm9udFJhbmdlcykKLXsKLSAgICBjb25zdCBGb250KiBmb250ID0gbnVs
bHB0cjsKLSAgICBVQ2hhcjMyIHBhZ2VSYW5nZUZyb20gPSBwYWdlTnVtYmVyICogR2x5cGhQYWdl
OjpzaXplOwotICAgIFVDaGFyMzIgcGFnZVJhbmdlVG8gPSBwYWdlUmFuZ2VGcm9tICsgR2x5cGhQ
YWdlOjpzaXplIC0gMTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9udFJhbmdlcy5z
aXplKCk7ICsraSkgewotICAgICAgICBhdXRvJiByYW5nZSA9IGZvbnRSYW5nZXMucmFuZ2VBdChp
KTsKLSAgICAgICAgaWYgKHJhbmdlLnRvKCkpIHsKLSAgICAgICAgICAgIGlmIChyYW5nZS5mcm9t
KCkgPD0gcGFnZVJhbmdlRnJvbSAmJiBwYWdlUmFuZ2VUbyA8PSByYW5nZS50bygpKQotICAgICAg
ICAgICAgICAgIGZvbnQgPSAmcmFuZ2UuZm9udCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgaWYgKCFmb250KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBjb25zdF9jYXN0PEdseXBoUGFn
ZSo+KGZvbnQtPmdseXBoUGFnZShwYWdlTnVtYmVyKSk7Ci19Ci0KLUdseXBoRGF0YSBGb250R2x5
cGhzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KQotewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKHZhcmlhbnQgIT0gQXV0b1ZhcmlhbnQpOwotCi0gICAg
aWYgKHZhcmlhbnQgIT0gTm9ybWFsVmFyaWFudCkKLSAgICAgICAgcmV0dXJuIGdseXBoRGF0YUZv
clZhcmlhbnQoYywgZGVzY3JpcHRpb24sIHZhcmlhbnQsIDApOwotCi0gICAgY29uc3QgdW5zaWdu
ZWQgcGFnZU51bWJlciA9IGMgLyBHbHlwaFBhZ2U6OnNpemU7Ci0KLSAgICBSZWZQdHI8R2x5cGhQ
YWdlPiYgY2FjaGVkUGFnZSA9IHBhZ2VOdW1iZXIgPyBtX2NhY2hlZFBhZ2VzLmFkZChwYWdlTnVt
YmVyLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWUgOiBtX2NhY2hlZFBhZ2VaZXJvOwotICAgIGlm
ICghY2FjaGVkUGFnZSkKLSAgICAgICAgY2FjaGVkUGFnZSA9IGdseXBoUGFnZUZyb21Gb250UmFu
Z2VzKHBhZ2VOdW1iZXIsIHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKSk7
Ci0KLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRhID0gY2FjaGVkUGFnZSA/IGNhY2hlZFBhZ2UtPmds
eXBoRGF0YUZvckNoYXJhY3RlcihjKSA6IEdseXBoRGF0YSgpOwotICAgIGlmICghZ2x5cGhEYXRh
LmdseXBoKSB7Ci0gICAgICAgIGlmICghY2FjaGVkUGFnZSkKLSAgICAgICAgICAgIGNhY2hlZFBh
Z2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUZvck1peGVkRm9udHMoKTsKLSAgICAgICAgZWxzZSBpZiAo
Y2FjaGVkUGFnZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgIGNhY2hlZFBhZ2UgPSBHbHlw
aFBhZ2U6OmNyZWF0ZUNvcHlGb3JNaXhlZEZvbnRzKCpjYWNoZWRQYWdlKTsKLQotICAgICAgICBn
bHlwaERhdGEgPSBnbHlwaERhdGFGb3JOb3JtYWxWYXJpYW50KGMsIGRlc2NyaXB0aW9uKTsKLSAg
ICAgICAgY2FjaGVkUGFnZS0+c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIGdseXBoRGF0YS5n
bHlwaCwgZ2x5cGhEYXRhLmZvbnQpOwotICAgIH0KLSAgICByZXR1cm4gZ2x5cGhEYXRhOwotfQot
Ci12b2lkIEZvbnRHbHlwaHM6OnBydW5lU3lzdGVtRmFsbGJhY2tzKCkKLXsKLSAgICBpZiAobV9z
eXN0ZW1GYWxsYmFja0ZvbnRTZXQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgLy8g
TXV0YWJsZSBnbHlwaCBwYWdlcyBtYXkgcmVmZXJlbmNlIGZhbGxiYWNrIGZvbnRzLgotICAgIGlm
IChtX2NhY2hlZFBhZ2VaZXJvICYmICFtX2NhY2hlZFBhZ2VaZXJvLT5pc0ltbXV0YWJsZSgpKQot
ICAgICAgICBtX2NhY2hlZFBhZ2VaZXJvID0gbnVsbHB0cjsKLSAgICBtX2NhY2hlZFBhZ2VzLnJl
bW92ZUlmKFtdKGRlY2x0eXBlKG1fY2FjaGVkUGFnZXMpOjpLZXlWYWx1ZVBhaXJUeXBlJiBrZXlB
bmRWYWx1ZSkgewotICAgICAgICByZXR1cm4gIWtleUFuZFZhbHVlLnZhbHVlLT5pc0ltbXV0YWJs
ZSgpOwotICAgIH0pOwotICAgIG1fc3lzdGVtRmFsbGJhY2tGb250U2V0LmNsZWFyKCk7Ci19Ci0K
LX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhz
LmgJKHJldmlzaW9uIDE4MDI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRHbHlwaHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAxMCwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKgotICovCi0KLSNpZm5kZWYgRm9udEdseXBoc19oCi0jZGVmaW5lIEZvbnRHbHlwaHNfaAot
Ci0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRSYW5nZXMuaCIKLSNpbmNsdWRlICJG
b250U2VsZWN0b3IuaCIKLSNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKLSNpbmNsdWRlICJXaWR0aENh
Y2hlLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgotCi0jaWYgUExBVEZPUk0oSU9TKQotI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKLSNl
bmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNs
YXNzIEludFJlY3Q7Ci1jbGFzcyBGb250RGVzY3JpcHRpb247Ci1jbGFzcyBGb250UGxhdGZvcm1E
YXRhOwotY2xhc3MgRm9udFNlbGVjdG9yOwotCi1jbGFzcyBGb250R2x5cGhzIDogcHVibGljIFJl
ZkNvdW50ZWQ8Rm9udEdseXBocz4gewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvbnRHbHlw
aHMpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Rm9udEdseXBocz4gY3JlYXRlKFBhc3NSZWZQ
dHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRm9u
dEdseXBocyhmb250U2VsZWN0b3IpKTsgfQotICAgIHN0YXRpYyBSZWY8Rm9udEdseXBocz4gY3Jl
YXRlRm9yUGxhdGZvcm1Gb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkg
eyByZXR1cm4gYWRvcHRSZWYoKm5ldyBGb250R2x5cGhzKHBsYXRmb3JtRGF0YSkpOyB9Ci0KLSAg
ICBXRUJDT1JFX0VYUE9SVCB+Rm9udEdseXBocygpOwotCi0gICAgYm9vbCBpc0ZvclBsYXRmb3Jt
Rm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGb3JQbGF0Zm9ybUZvbnQ7IH0KLQotICAgIEdseXBo
RGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgRm9udFZhcmlhbnQpOwotCi0gICAgYm9vbCBpc0ZpeGVkUGl0Y2goY29uc3QgRm9udERlc2Ny
aXB0aW9uJik7Ci0gICAgdm9pZCBkZXRlcm1pbmVQaXRjaChjb25zdCBGb250RGVzY3JpcHRpb24m
KTsKLQotICAgIGJvb2wgaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdDsKLQotICAgIEZvbnRT
ZWxlY3RvciogZm9udFNlbGVjdG9yKCkgeyByZXR1cm4gbV9mb250U2VsZWN0b3IuZ2V0KCk7IH0K
LSAgICAvLyBGSVhNRTogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGNvbWJpbmUgZm9udFNlbGVj
dG9yVmVyc2lvbiBhbmQgZ2VuZXJhdGlvbi4KLSAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JWZXJz
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mb250U2VsZWN0b3JWZXJzaW9uOyB9Ci0gICAgdW5zaWdu
ZWQgZ2VuZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZ2VuZXJhdGlvbjsgfQotCi0gICAgV2lk
dGhDYWNoZSYgd2lkdGhDYWNoZSgpIHsgcmV0dXJuIG1fd2lkdGhDYWNoZTsgfQotICAgIGNvbnN0
IFdpZHRoQ2FjaGUmIHdpZHRoQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoQ2FjaGU7IH0K
LQotICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnRSYW5nZXMmIHJlYWxpemVGYWxsYmFja1Jhbmdl
c0F0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpOwotCi0g
ICAgdm9pZCBwcnVuZVN5c3RlbUZhbGxiYWNrcygpOwotCi1wcml2YXRlOgotICAgIEZvbnRHbHlw
aHMoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKLSAgICBGb250R2x5cGhzKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmKTsKLQotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFj
ayhVQ2hhcjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBGb250VmFyaWFudCk7Ci0gICAgR2x5
cGhEYXRhIGdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoVUNoYXIzMiwgY29uc3QgRm9udERlc2Ny
aXB0aW9uJik7Ci0gICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiwgY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgp
OwotCi0gICAgVmVjdG9yPEZvbnRSYW5nZXMsIDE+IG1fcmVhbGl6ZWRGYWxsYmFja1JhbmdlczsK
LSAgICB1bnNpZ25lZCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggeyAwIH07Ci0KLSAgICBS
ZWZQdHI8R2x5cGhQYWdlPiBtX2NhY2hlZFBhZ2VaZXJvOwotICAgIEhhc2hNYXA8aW50LCBSZWZQ
dHI8R2x5cGhQYWdlPj4gbV9jYWNoZWRQYWdlczsKLQotICAgIEhhc2hTZXQ8UmVmUHRyPEZvbnQ+
PiBtX3N5c3RlbUZhbGxiYWNrRm9udFNldDsKLQotICAgIGNvbnN0IEZvbnQqIG1fY2FjaGVkUHJp
bWFyeUZvbnQ7Ci0gICAgUmVmUHRyPEZvbnRTZWxlY3Rvcj4gbV9mb250U2VsZWN0b3I7Ci0KLSAg
ICBXaWR0aENhY2hlIG1fd2lkdGhDYWNoZTsKLQotICAgIHVuc2lnbmVkIG1fZm9udFNlbGVjdG9y
VmVyc2lvbjsKLSAgICB1bnNpZ25lZCBzaG9ydCBtX2dlbmVyYXRpb247Ci0gICAgUGl0Y2ggbV9w
aXRjaCB7IFVua25vd25QaXRjaCB9OwotICAgIGJvb2wgbV9pc0ZvclBsYXRmb3JtRm9udCB7IGZh
bHNlIH07Ci19OwotCi1pbmxpbmUgYm9vbCBGb250R2x5cGhzOjppc0ZpeGVkUGl0Y2goY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKLXsKLSAgICBpZiAobV9waXRjaCA9PSBVbmtu
b3duUGl0Y2gpCi0gICAgICAgIGRldGVybWluZVBpdGNoKGRlc2NyaXB0aW9uKTsKLSAgICByZXR1
cm4gbV9waXRjaCA9PSBGaXhlZFBpdGNoOwotfTsKLQotaW5saW5lIGNvbnN0IEZvbnQmIEZvbnRH
bHlwaHM6OnByaW1hcnlGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCi17
Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fY2FjaGVkUHJpbWFyeUZv
bnQpIHsKLSAgICAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdl
c0F0KGRlc2NyaXB0aW9uLCAwKTsKLSAgICAgICAgbV9jYWNoZWRQcmltYXJ5Rm9udCA9IHByaW1h
cnlSYW5nZXMuZm9udEZvckNoYXJhY3RlcignICcpOwotICAgICAgICBpZiAoIW1fY2FjaGVkUHJp
bWFyeUZvbnQpCi0gICAgICAgICAgICBtX2NhY2hlZFByaW1hcnlGb250ID0gJnByaW1hcnlSYW5n
ZXMuZm9udEZvckZpcnN0UmFuZ2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuICptX2NhY2hlZFByaW1h
cnlGb250OwotfQotCi19Ci0KLSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246828</attachid>
            <date>2015-02-18 11:19:29 -0800</date>
            <delta_ts>2015-02-18 11:30:58 -0800</delta_ts>
            <desc>patch</desc>
            <filename>rename-font-glyphs-3.patch</filename>
            <type>text/plain</type>
            <size>78360</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE1LTAyLTE4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgRm9udEdseXBocwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNzU0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSXRzIHB1cnBv
c2UgaXMgdG8gb3duIHRvIGNyZWF0ZSBhbmQgb3duIHRoZSByZWFsaXplZCBGb250IGluc3RhbmNl
cyBhbmQgdGhlIGFzc29jaWF0ZWQgY2FjaGVzLgorCisgICAgICAgIEZvbnRHbHlwaHMgLT4gRm9u
dENhc2NhZGVGb250cworCiAyMDE1LTAyLTE4ICBUaW1vdGh5IEhvcnRvbiAgPHRpbW90aHlfaG9y
dG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgbW9yZSByZWZlcmVuY2VzIHRvIFdlYkNv
cmUuZXhwLmluCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTgwMjY0KQorKysg
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwNzEsMTAg
KzIwNzEsMTAgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlRm9udHMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGZWF0dXJlU2V0dGluZ3MuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udEdlbmVyaWNGYW1pbGllcy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250R2x5cGhzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR2VvbWV0cnlVdGlsaXRpZXMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4MDI2NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTgyMzksOSArODIzOSw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xGb250LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXEZvbnRDYWNoZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FzY2FkZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FzY2FkZUZvbnRzLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnREZXNjcmlwdGlv
bi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xG
b250R2VuZXJpY0ZhbWlsaWVzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXEZvbnRHbHlwaHMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEZlYXR1cmVTZXR0aW5ncy5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250UGxhdGZvcm1EYXRh
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZv
bnRSYW5nZXMuY3BwIiAvPgpAQCAtMTk3NzYsOSArMTk3NzYsOSBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhY2hlLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FzY2FkZS5oIiAvPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGVGb250
cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9u
dERlc2NyaXB0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xGb250R2VuZXJpY0ZhbWlsaWVzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250R2x5cGhzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250RmVhdHVyZVNldHRpbmdzLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250TWV0cmljcy5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udFBs
YXRmb3JtRGF0YS5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTgwMjY0KQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00
NzI0LDggKzQ3MjQsOCBAQAogCQlCMkMzREE2NDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MzBE
MDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi87IH07CiAJCUIyQzNEQTY1MEQwMDZDRDYwMEVG
NkYyNiAvKiBGb250LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMkMzREE1NDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTY2MEQwMDZDRDYwMEVGNkYy
NiAvKiBGb250RGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyQzNEQTU1MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250RGVzY3JpcHRpb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCMkMz
REE2NzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1NjBEMDA2Q0Q2MDBFRjZGMjYgLyog
Rm9udEdseXBocy5jcHAgKi87IH07Ci0JCUIyQzNEQTY4MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
R2x5cGhzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkMzREE1NzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUIyQzNEQTY3MEQwMDZDRDYwMEVGNkYy
NiAvKiBGb250Q2FzY2FkZUZvbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyQzNEQTU2MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZUZv
bnRzLmNwcCAqLzsgfTsKKwkJQjJDM0RBNjgwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRl
Rm9udHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
QzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZUZvbnRzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNkIwRDAwNkNENjAw
RUY2RjI2IC8qIEZvbnRTZWxlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjJDM0RBNUEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRTZWxlY3Rvci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQzNE
QTZDMEQwMDZDRDYwMEVGNkYyNiAvKiBHbHlwaEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNUIwRDAwNkNENjAwRUY2RjI2IC8qIEds
eXBoQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQjJDOTZEOEQwQjNBRjJCNzAwNUU4MEVDIC8qIEpTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkM5NkQ4QzBC
M0FGMkI3MDA1RTgwRUMgLyogSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcCAqLzsgfTsKQEAgLTEyMTI1
LDggKzEyMTI1LDggQEAKIAkJQjJDM0RBNTMwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCMkMzREE1NDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMkMzREE1NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udERlc2NyaXB0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250RGVzY3JpcHRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8q
IEZvbnRHbHlwaHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZv
bnRHbHlwaHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkMzREE1NzBEMDA2
Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRm9udEdseXBocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkMzREE1
NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGVGb250cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENhc2NhZGVGb250cy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUIyQzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2Fk
ZUZvbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250Q2FzY2FkZUZv
bnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTVBMEQwMDZDRDYwMEVG
NkYyNiAvKiBGb250U2VsZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZvbnRTZWxlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzREE1QjBE
MDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdseXBoQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIy
Qzk2RDhDMEIzQUYyQjcwMDVFODBFQyAvKiBKU1NWR1BhdGhTZWdDdXN0b20uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHUGF0aFNlZ0N1c3RvbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDQ5NCw4ICsyMDQ5NCw2IEBACiAJCQkJQjI3
NTM1MzgwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmNwcCAqLywKIAkJCQlCMjc1MzUzOTBCMDUz
ODE0MDAyQ0U2NEYgLyogQ29sb3IuaCAqLywKIAkJCQk5MzgyREY1NzEwQThENUM5MDA5MjU2NTIg
LyogQ29sb3JTcGFjZS5oICovLAotCQkJCUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
Q2FzY2FkZS5jcHAgKi8sCi0JCQkJQjJDM0RBNTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNj
YWRlLmggKi8sCiAJCQkJMkQyRkMwNTQxNDYwQ0Q2RjAwMjYzNjMzIC8qIENyb3NzZmFkZUdlbmVy
YXRlZEltYWdlLmNwcCAqLywKIAkJCQkyRDJGQzA1NTE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3Nm
YWRlR2VuZXJhdGVkSW1hZ2UuaCAqLywKIAkJCQlBOENCNDEwMjBFODVCOEE1MDAzMkM0RjAgLyog
RGFzaEFycmF5LmggKi8sCkBAIC0yMDUyNCwxNCArMjA1MjIsMTYgQEAKIAkJCQlCQ0I5MkQ0RTEy
OTM1NTBCMDBDODM4N0YgLyogRm9udEJhc2VsaW5lLmggKi8sCiAJCQkJQjJDM0RBNTEwRDAwNkNE
NjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgKi8sCiAJCQkJQjJDM0RBNTIwRDAwNkNENjAwRUY2
RjI2IC8qIEZvbnRDYWNoZS5oICovLAorCQkJCUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBG
b250Q2FzY2FkZS5jcHAgKi8sCisJCQkJQjJDM0RBNTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRD
YXNjYWRlLmggKi8sCisJCQkJQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRl
Rm9udHMuY3BwICovLAorCQkJCUIyQzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2Fk
ZUZvbnRzLmggKi8sCiAJCQkJMzdBQ0NFNjIwREEyQUE5NjAwODlFNjAyIC8qIEZvbnREZXNjcmlw
dGlvbi5jcHAgKi8sCiAJCQkJQjJDM0RBNTUwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnREZXNjcmlw
dGlvbi5oICovLAogCQkJCTRBNkU5RkM1MTNDMTdENTcwMDQ2QTdGOCAvKiBGb250RmVhdHVyZVNl
dHRpbmdzLmNwcCAqLywKIAkJCQk0QTZFOUZDNjEzQzE3RDU3MDA0NkE3RjggLyogRm9udEZlYXR1
cmVTZXR0aW5ncy5oICovLAogCQkJCUU0NEVFM0E2MTc1NzZFNTUwMEVFRThDRiAvKiBGb250R2Vu
ZXJpY0ZhbWlsaWVzLmNwcCAqLywKIAkJCQlFNDRFRTNBNzE3NTc2RTU1MDBFRUU4Q0YgLyogRm9u
dEdlbmVyaWNGYW1pbGllcy5oICovLAotCQkJCUIyQzNEQTU2MEQwMDZDRDYwMEVGNkYyNiAvKiBG
b250R2x5cGhzLmNwcCAqLywKLQkJCQlCMkMzREE1NzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEds
eXBocy5oICovLAogCQkJCTA4NDU2ODA3MTJCOTBEQTYwMDk2MEE5RiAvKiBGb250TWV0cmljcy5o
ICovLAogCQkJCUY3QTAzNEMzMTI2QkY2QkUwMDdEQzE5RSAvKiBGb250T3JpZW50YXRpb24uaCAq
LywKIAkJCQk4NEI2MjY4NDEzMzEzOEY5MDA5NUE0ODkgLyogRm9udFBsYXRmb3JtRGF0YS5jcHAg
Ki8sCkBAIC0yNDQxNSw3ICsyNDQxNSw3IEBACiAJCQkJQjJBRkZDN0UwRDAwQTVDMTAwMzAwNzRE
IC8qIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTY2
MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250RGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTRBNkU5RkM4MTNDMTdENTcwMDQ2QTdGOCAvKiBGb250RmVhdHVyZVNldHRpbmdzLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlCMkMzREE2ODBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQjJDM0RBNjgwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRl
Rm9udHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQwOUVCREI2MTZCN0VFQTMwMENCQTNGQyAvKiBG
b250TG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODQ1NjgwODEyQjkwREE2MDA5NjBBOUYg
LyogRm9udE1ldHJpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUY3QTAzNEM0MTI2QkY2QkUwMDdE
QzE5RSAvKiBGb250T3JpZW50YXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjc4OTcsNyArMjc4
OTcsNyBAQAogCQkJCTM3QUNDRjY5MERBNDE0RTcwMDg5RTYwMiAvKiBGb250RGVzY3JpcHRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEE2RTlGQzcxM0MxN0Q1NzAwNDZBN0Y4IC8qIEZvbnRG
ZWF0dXJlU2V0dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ0RUUzQTgxNzU3N0VCRDAw
RUVFOENGIC8qIEZvbnRHZW5lcmljRmFtaWxpZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjJD
M0RBNjcwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQjJDM0RBNjcwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlRm9udHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkQ5NkM5OTcxOTgyRkJERjAwODZFMTU2IC8qIEZvbnRMb2FkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjJBRkZDODAwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYXNj
YWRlQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NEI2MjY4NTEzMzEzOEY5MDA5NUE0ODkg
LyogRm9udFBsYXRmb3JtRGF0YS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuY3BwCShyZXZpc2lvbiAxODAyNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Nl
dHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBzdGF0aWMgdm9pZCBz
ZXRJbWFnZUxvYWRpbmdTZXR0aW5ncyhQYWdlCiAKIHN0YXRpYyB2b2lkIGludmFsaWRhdGVBZnRl
ckdlbmVyaWNGYW1pbHlDaGFuZ2UoUGFnZSogcGFnZSkKIHsKLSAgICBpbnZhbGlkYXRlRm9udEds
eXBoc0NhY2hlKCk7CisgICAgaW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUoKTsKICAgICBpZiAo
cGFnZSkKICAgICAgICAgcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5j
cHAJKHJldmlzaW9uIDE4MDI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRl
ICJGb250Q2FjaGUuaCIKIAogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiRm9u
dEdseXBocy5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJGb250
U2VsZWN0b3IuaCIKICNpbmNsdWRlICJNZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCIKQEAgLTQyNiw3
ICs0MjUsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOCiAKIHZv
aWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IHB1cmdlQ291bnQpCiB7Ci0g
ICAgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOworICAgIHBy
dW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250Q2FzY2FkZUNhY2hlKCk7CiAgICAgcHJ1bmVT
eXN0ZW1GYWxsYmFja0ZvbnRzKCk7CiAKICNpZiBQTEFURk9STShJT1MpCkBAIC01MzUsNyArNTM0
LDcgQEAgdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGUoKQogICAgIH0KIAogICAgIGZvbnRQbGF0
Zm9ybURhdGFDYWNoZSgpLmNsZWFyKCk7Ci0gICAgaW52YWxpZGF0ZUZvbnRHbHlwaHNDYWNoZSgp
OworICAgIGludmFsaWRhdGVGb250Q2FzY2FkZUNhY2hlKCk7CiAKICAgICBnR2VuZXJhdGlvbisr
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuY3BwCShyZXZpc2lvbiAxODAyNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAg
dGVtcGxhdGUgPD4gdm9pZCBkZWxldGVPd25lZFB0cjxXZWJDb3JlOgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXN0YXRpYyBSZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRH
bHlwaHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsK
K3N0YXRpYyBSZWY8Rm9udENhc2NhZGVGb250cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CiAKIGNvbnN0
IHVpbnQ4X3QgRm9udENhc2NhZGU6OnNfcm91bmRpbmdIYWNrQ2hhcmFjdGVyVGFibGVbMjU2XSA9
IHsKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qXHQqLywgMSAvKlxuKi8sIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsCkBAIC0xMjUsOCArMTI1LDggQEAgRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZv
bnREZXNjcgogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBw
bGF0Zm9ybS1pbmRlcGVuZGVudC4KLUZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBmb250LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkK
LSAgICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250KSkK
K0ZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0
YSwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCisgICAgOiBtX2ZvbnRzKEZv
bnRDYXNjYWRlRm9udHM6OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250RGF0YSkpCiAgICAgLCBt
X2xldHRlclNwYWNpbmcoMCkKICAgICAsIG1fd29yZFNwYWNpbmcoMCkKICAgICAsIG1fdXNlQmFj
a3NsYXNoQXNZZW5TeW1ib2woZmFsc2UpCkBAIC0xMzQsMzMgKzEzNCwzMyBAQCBGb250Q2FzY2Fk
ZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udFBsYXRmCiB7CiAgICAgbV9mb250RGVzY3JpcHRpb24u
c2V0Rm9udFNtb290aGluZyhmb250U21vb3RoaW5nTW9kZSk7CiAjaWYgUExBVEZPUk0oSU9TKQot
ICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShmb250
LmZvbnQoKSkpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRH
ZXRTaXplKGZvbnQuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMo
Q1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udC5mb250KCkpICYga0NURm9udFRyYWl0SXRhbGlj
KTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdldFN5bWJvbGljVHJh
aXRzKGZvbnQuZm9udCgpKSAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBG
b250V2VpZ2h0Tm9ybWFsKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXpl
KENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7CisgICAgbV9mb250RGVzY3JpcHRpb24u
c2V0Q29tcHV0ZWRTaXplKENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7CisgICAgbV9m
b250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udERh
dGEuZm9udCgpKSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CisgICAgbV9mb250RGVzY3JpcHRpb24u
c2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkpICYga0NU
Rm9udFRyYWl0Qm9sZCkgPyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3JtYWwpOwogI2Vu
ZGlmCiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRm
b3JtLWluZGVwZW5kZW50LgogI2lmIFBMQVRGT1JNKElPUykKLUZvbnRDYXNjYWRlOjpGb250Q2Fz
Y2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250LCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rv
cj4gZm9udFNlbGVjdG9yKQotICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxh
dGZvcm1Gb250KGZvbnQpKQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIGZvbnREYXRhLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9y
KQorICAgIDogbV9nbHlwaHMoRm9udENhc2NhZGVGb250czo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250
KGZvbnREYXRhKSkKICAgICAsIG1fbGV0dGVyU3BhY2luZygwKQogICAgICwgbV93b3JkU3BhY2lu
ZygwKQogICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1
cmVzKCkpCiB7Ci0gICAgQ1RGb250UmVmIHByaW1hcnlGb250ID0gZm9udC5mb250KCk7CisgICAg
Q1RGb250UmVmIHByaW1hcnlGb250ID0gZm9udERhdGEuZm9udCgpOwogICAgIG1fZm9udERlc2Ny
aXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShwcmltYXJ5Rm9udCkpOwogICAg
IG1fZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKHByaW1hcnlG
b250KSk7CiAgICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9s
aWNUcmFpdHMocHJpbWFyeUZvbnQpICYga0NURm9udFRyYWl0SXRhbGljKTsKICAgICBtX2ZvbnRE
ZXNjcmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdldFN5bWJvbGljVHJhaXRzKHByaW1hcnlGb250
KSAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFs
KTsKLSAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKG1fZm9udERl
c2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworICAgIG1fZ2x5cGhzID0gcmV0cmlldmVP
ckFkZENhY2hlZEZvbnRDYXNjYWRlRm9udHMobV9mb250RGVzY3JpcHRpb24sIGZvbnRTZWxlY3Rv
ci5nZXQoKSk7CiB9CiAjZW5kaWYKIAogRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZv
bnRDYXNjYWRlJiBvdGhlcikKICAgICA6IG1fZm9udERlc2NyaXB0aW9uKG90aGVyLm1fZm9udERl
c2NyaXB0aW9uKQotICAgICwgbV9nbHlwaHMob3RoZXIubV9nbHlwaHMpCisgICAgLCBtX2ZvbnRz
KG90aGVyLm1fZm9udHMpCiAgICAgLCBtX2xldHRlclNwYWNpbmcob3RoZXIubV9sZXR0ZXJTcGFj
aW5nKQogICAgICwgbV93b3JkU3BhY2luZyhvdGhlci5tX3dvcmRTcGFjaW5nKQogICAgICwgbV91
c2VCYWNrc2xhc2hBc1llblN5bWJvbChvdGhlci5tX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKQpA
QCAtMTcxLDcgKzE3MSw3IEBAIEZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250Q2Fz
Y2EKIEZvbnRDYXNjYWRlJiBGb250Q2FzY2FkZTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRDYXNjYWRl
JiBvdGhlcikKIHsKICAgICBtX2ZvbnREZXNjcmlwdGlvbiA9IG90aGVyLm1fZm9udERlc2NyaXB0
aW9uOwotICAgIG1fZ2x5cGhzID0gb3RoZXIubV9nbHlwaHM7CisgICAgbV9mb250cyA9IG90aGVy
Lm1fZm9udHM7CiAgICAgbV9sZXR0ZXJTcGFjaW5nID0gb3RoZXIubV9sZXR0ZXJTcGFjaW5nOwog
ICAgIG1fd29yZFNwYWNpbmcgPSBvdGhlci5tX3dvcmRTcGFjaW5nOwogICAgIG1fdXNlQmFja3Ns
YXNoQXNZZW5TeW1ib2wgPSBvdGhlci5tX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sOwpAQCAtMTg2
LDIxICsxODYsMjEgQEAgYm9vbCBGb250Q2FzY2FkZTo6b3BlcmF0b3I9PShjb25zdCBGb250Qwog
CiAgICAgaWYgKG1fZm9udERlc2NyaXB0aW9uICE9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uIHx8
IG1fbGV0dGVyU3BhY2luZyAhPSBvdGhlci5tX2xldHRlclNwYWNpbmcgfHwgbV93b3JkU3BhY2lu
ZyAhPSBvdGhlci5tX3dvcmRTcGFjaW5nKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KG1fZ2x5cGhzID09IG90aGVyLm1fZ2x5cGhzKQorICAgIGlmIChtX2ZvbnRzID09IG90aGVyLm1f
Zm9udHMpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICghbV9nbHlwaHMgfHwgIW90aGVy
Lm1fZ2x5cGhzKQorICAgIGlmICghbV9mb250cyB8fCAhb3RoZXIubV9mb250cykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2dseXBocy0+Zm9udFNlbGVjdG9yKCkgIT0gb3RoZXIu
bV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpKQorICAgIGlmIChtX2ZvbnRzLT5mb250U2VsZWN0b3Io
KSAhPSBvdGhlci5tX2ZvbnRzLT5mb250U2VsZWN0b3IoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIC8vIENhbiB0aGVzZSBjYXNlcyBhY3R1YWxseSBzb21laG93IG9jY3VyPyBBbGwgZm9u
dHMgc2hvdWxkIGdldCB3aXBlZCBvdXQgYnkgZnVsbCBzdHlsZSByZWNhbGMuCi0gICAgaWYgKG1f
Z2x5cGhzLT5mb250U2VsZWN0b3JWZXJzaW9uKCkgIT0gb3RoZXIubV9nbHlwaHMtPmZvbnRTZWxl
Y3RvclZlcnNpb24oKSkKKyAgICBpZiAobV9mb250cy0+Zm9udFNlbGVjdG9yVmVyc2lvbigpICE9
IG90aGVyLm1fZm9udHMtPmZvbnRTZWxlY3RvclZlcnNpb24oKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChtX2dseXBocy0+Z2VuZXJhdGlvbigpICE9IG90aGVyLm1fZ2x5cGhzLT5n
ZW5lcmF0aW9uKCkpCisgICAgaWYgKG1fZm9udHMtPmdlbmVyYXRpb24oKSAhPSBvdGhlci5tX2Zv
bnRzLT5nZW5lcmF0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotc3RydWN0IEZvbnRHbHlwaHNDYWNoZUtleSB7CitzdHJ1Y3QgRm9udENhc2NhZGVD
YWNoZUtleSB7CiAgICAgLy8gVGhpcyBwYXJ0IG9mIHRoZSBrZXkgaXMgc2hhcmVkIHdpdGggdGhl
IGxvd2VyIGxldmVsIEZvbnRDYWNoZSAoY2FjaGluZyBGb250RGF0YSBvYmplY3RzKS4KICAgICBG
b250RGVzY3JpcHRpb25Gb250RGF0YUNhY2hlS2V5IGZvbnREZXNjcmlwdGlvbkNhY2hlS2V5Owog
ICAgIFZlY3RvcjxBdG9taWNTdHJpbmcsIDM+IGZhbWlsaWVzOwpAQCAtMjA5LDIwICsyMDksMjAg
QEAgc3RydWN0IEZvbnRHbHlwaHNDYWNoZUtleSB7CiAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9y
RmxhZ3M7CiB9OwogCi1zdHJ1Y3QgRm9udEdseXBoc0NhY2hlRW50cnkgeworc3RydWN0IEZvbnRD
YXNjYWRlQ2FjaGVFbnRyeSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgRm9udEdseXBoc0NhY2hlRW50cnkoRm9udEdseXBoc0NhY2hlS2V5JiYgaywgUmVmPEZv
bnRHbHlwaHM+JiYgZykKLSAgICAgICAgOiBrZXkoV1RGOjptb3ZlKGspKQotICAgICAgICAsIGds
eXBocyhXVEY6Om1vdmUoZykpCisgICAgRm9udENhc2NhZGVDYWNoZUVudHJ5KEZvbnRDYXNjYWRl
Q2FjaGVLZXkmJiBrZXksIFJlZjxGb250Q2FzY2FkZUZvbnRzPiYmIGZvbnRzKQorICAgICAgICA6
IGtleShXVEY6Om1vdmUoa2V5KSkKKyAgICAgICAgLCBmb250cyhXVEY6Om1vdmUoZm9udHMpKQog
ICAgIHsgfQotICAgIEZvbnRHbHlwaHNDYWNoZUtleSBrZXk7Ci0gICAgUmVmPEZvbnRHbHlwaHM+
IGdseXBoczsKKyAgICBGb250Q2FzY2FkZUNhY2hlS2V5IGtleTsKKyAgICBSZWY8Rm9udENhc2Nh
ZGVGb250cz4gZm9udHM7CiB9OwogCi10eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5p
cXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4sIEFscmVhZHlIYXNoZWQ+IEZvbnRHbHlwaHND
YWNoZTsKK3R5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRyPEZvbnRDYXNj
YWRlQ2FjaGVFbnRyeT4sIEFscmVhZHlIYXNoZWQ+IEZvbnRDYXNjYWRlQ2FjaGU7CiAKLXN0YXRp
YyBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udEdseXBoc0NhY2hlS2V5JiBhLCBjb25zdCBGb250
R2x5cGhzQ2FjaGVLZXkmIGIpCitzdGF0aWMgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRDYXNj
YWRlQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkmIGIpCiB7CiAgICAgaWYg
KGEuZm9udERlc2NyaXB0aW9uQ2FjaGVLZXkgIT0gYi5mb250RGVzY3JpcHRpb25DYWNoZUtleSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjM3LDIxICsyMzcsMjEgQEAgc3RhdGljIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBGb250R2x5cGhzQwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0
aWMgRm9udEdseXBoc0NhY2hlJiBmb250R2x5cGhzQ2FjaGUoKQorc3RhdGljIEZvbnRDYXNjYWRl
Q2FjaGUmIGZvbnRDYXNjYWRlQ2FjaGUoKQogewotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJ
Q19MT0NBTChGb250R2x5cGhzQ2FjaGUsIGNhY2hlLCAoKSk7CisgICAgREVQUkVDQVRFRF9ERUZJ
TkVfU1RBVElDX0xPQ0FMKEZvbnRDYXNjYWRlQ2FjaGUsIGNhY2hlLCAoKSk7CiAgICAgcmV0dXJu
IGNhY2hlOwogfQogCi12b2lkIGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKQordm9pZCBpbnZh
bGlkYXRlRm9udENhc2NhZGVDYWNoZSgpCiB7Ci0gICAgZm9udEdseXBoc0NhY2hlKCkuY2xlYXIo
KTsKKyAgICBmb250Q2FzY2FkZUNhY2hlKCkuY2xlYXIoKTsKIH0KIAogdm9pZCBjbGVhcldpZHRo
Q2FjaGVzKCkKIHsKLSAgICBmb3IgKGF1dG8gaXQgPSBmb250R2x5cGhzQ2FjaGUoKS5iZWdpbigp
LCBlbmQgPSBmb250R2x5cGhzQ2FjaGUoKS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICBpdC0+dmFsdWUtPmdseXBocy5nZXQoKS53aWR0aENhY2hlKCkuY2xlYXIoKTsKKyAgICBmb3Ig
KGF1dG8mIHZhbHVlIDogZm9udENhc2NhZGVDYWNoZSgpLnZhbHVlcygpKQorICAgICAgICB2YWx1
ZS0+Zm9udHMuZ2V0KCkud2lkdGhDYWNoZSgpLmNsZWFyKCk7CiB9CiAKIHN0YXRpYyB1bnNpZ25l
ZCBtYWtlRm9udFNlbGVjdG9yRmxhZ3MoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
bikKQEAgLTI1OSwxNyArMjU5LDE5IEBAIHN0YXRpYyB1bnNpZ25lZCBtYWtlRm9udFNlbGVjdG9y
RmxhZ3MoY28KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnNj
cmlwdCgpKSA8PCAxIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnNtYWxsQ2Fw
cygpKTsKIH0KIAotc3RhdGljIHZvaWQgbWFrZUZvbnRHbHlwaHNDYWNoZUtleShGb250R2x5cGhz
Q2FjaGVLZXkmIGtleSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFNl
bGVjdG9yKiBmb250U2VsZWN0b3IpCitzdGF0aWMgRm9udENhc2NhZGVDYWNoZUtleSBtYWtlRm9u
dENhc2NhZGVDYWNoZUtleShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250
U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKIHsKKyAgICBGb250Q2FzY2FkZUNhY2hlS2V5IGtleTsK
ICAgICBrZXkuZm9udERlc2NyaXB0aW9uQ2FjaGVLZXkgPSBGb250RGVzY3JpcHRpb25Gb250RGF0
YUNhY2hlS2V5KGRlc2NyaXB0aW9uKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVz
Y3JpcHRpb24uZmFtaWx5Q291bnQoKTsgKytpKQogICAgICAgICBrZXkuZmFtaWxpZXMuYXBwZW5k
KGRlc2NyaXB0aW9uLmZhbWlseUF0KGkpKTsKICAgICBrZXkuZm9udFNlbGVjdG9ySWQgPSBmb250
U2VsZWN0b3IgPyBmb250U2VsZWN0b3ItPnVuaXF1ZUlkKCkgOiAwOwogICAgIGtleS5mb250U2Vs
ZWN0b3JWZXJzaW9uID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAw
OwogICAgIGtleS5mb250U2VsZWN0b3JGbGFncyA9IGZvbnRTZWxlY3RvciAmJiBmb250U2VsZWN0
b3ItPnJlc29sdmVzRmFtaWx5Rm9yKGRlc2NyaXB0aW9uKSA/IG1ha2VGb250U2VsZWN0b3JGbGFn
cyhkZXNjcmlwdGlvbikgOiAwOworICAgIHJldHVybiBrZXk7CiB9CiAKLXN0YXRpYyB1bnNpZ25l
ZCBjb21wdXRlRm9udEdseXBoc0NhY2hlSGFzaChjb25zdCBGb250R2x5cGhzQ2FjaGVLZXkmIGtl
eSkKK3N0YXRpYyB1bnNpZ25lZCBjb21wdXRlRm9udENhc2NhZGVDYWNoZUhhc2goY29uc3QgRm9u
dENhc2NhZGVDYWNoZUtleSYga2V5KQogewogICAgIFZlY3Rvcjx1bnNpZ25lZCwgNz4gaGFzaENv
ZGVzOwogICAgIGhhc2hDb2Rlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDQgKyBrZXkuZmFtaWxp
ZXMuc2l6ZSgpKTsKQEAgLTI4NCw0OCArMjg2LDQ3IEBAIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRl
Rm9udEdseXBoc0NhY2hlSGEKICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KGhh
c2hDb2Rlcy5kYXRhKCksIGhhc2hDb2Rlcy5zaXplKCkgKiBzaXplb2YodW5zaWduZWQpKTsKIH0K
IAotdm9pZCBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udEdseXBoc0NhY2hlKCkKK3Zv
aWQgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRDYXNjYWRlQ2FjaGUoKQogewotICAg
IGZvbnRHbHlwaHNDYWNoZSgpLnJlbW92ZUlmKFtdKEZvbnRHbHlwaHNDYWNoZTo6S2V5VmFsdWVQ
YWlyVHlwZSYgZW50cnkpIHsKLSAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlLT5nbHlwaHMuZ2V0
KCkuaGFzT25lUmVmKCk7CisgICAgZm9udENhc2NhZGVDYWNoZSgpLnJlbW92ZUlmKFtdKEZvbnRD
YXNjYWRlQ2FjaGU6OktleVZhbHVlUGFpclR5cGUmIGVudHJ5KSB7CisgICAgICAgIHJldHVybiBl
bnRyeS52YWx1ZS0+Zm9udHMuZ2V0KCkuaGFzT25lUmVmKCk7CiAgICAgfSk7CiB9CiAKIHZvaWQg
cHJ1bmVTeXN0ZW1GYWxsYmFja0ZvbnRzKCkKIHsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogZm9u
dEdseXBoc0NhY2hlKCkudmFsdWVzKCkpCi0gICAgICAgIGVudHJ5LT5nbHlwaHMtPnBydW5lU3lz
dGVtRmFsbGJhY2tzKCk7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IGZvbnRDYXNjYWRlQ2FjaGUo
KS52YWx1ZXMoKSkKKyAgICAgICAgZW50cnktPmZvbnRzLT5wcnVuZVN5c3RlbUZhbGxiYWNrcygp
OwogfQogCi1zdGF0aWMgUmVmPEZvbnRHbHlwaHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5
cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBQYXNzUmVmUHRyPEZv
bnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQorc3RhdGljIFJlZjxGb250Q2FzY2FkZUZvbnRzPiBy
ZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCiB7Ci0gICAgRm9u
dEdseXBoc0NhY2hlS2V5IGtleTsKLSAgICBtYWtlRm9udEdseXBoc0NhY2hlS2V5KGtleSwgZm9u
dERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworICAgIGF1dG8ga2V5ID0gbWFrZUZv
bnRDYXNjYWRlQ2FjaGVLZXkoZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOwog
Ci0gICAgdW5zaWduZWQgaGFzaCA9IGNvbXB1dGVGb250R2x5cGhzQ2FjaGVIYXNoKGtleSk7Ci0g
ICAgRm9udEdseXBoc0NhY2hlOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gZm9udEdseXBoc0NhY2hl
KCkuYWRkKGhhc2gsIHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4oKSk7Cisg
ICAgdW5zaWduZWQgaGFzaCA9IGNvbXB1dGVGb250Q2FzY2FkZUNhY2hlSGFzaChrZXkpOworICAg
IGF1dG8gYWRkUmVzdWx0ID0gZm9udENhc2NhZGVDYWNoZSgpLmFkZChoYXNoLCBzdGQ6OnVuaXF1
ZV9wdHI8Rm9udENhc2NhZGVDYWNoZUVudHJ5PigpKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05l
d0VudHJ5ICYmIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmtleSA9PSBrZXkpCi0gICAgICAg
IHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5nbHlwaHMuZ2V0KCk7CisgICAgICAg
IHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5mb250cy5nZXQoKTsKIAotICAgIHN0
ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4mIG5ld0VudHJ5ID0gYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICBuZXdFbnRyeSA9IHN0ZDo6bWFrZV91bmlxdWU8Rm9udEds
eXBoc0NhY2hlRW50cnk+KFdURjo6bW92ZShrZXkpLCBGb250R2x5cGhzOjpjcmVhdGUoZm9udFNl
bGVjdG9yKSk7Ci0gICAgUmVmPEZvbnRHbHlwaHM+IGdseXBocyA9IG5ld0VudHJ5LT5nbHlwaHMu
Z2V0KCk7CisgICAgYXV0byYgbmV3RW50cnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwor
ICAgIG5ld0VudHJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxGb250Q2FzY2FkZUNhY2hlRW50cnk+KFdU
Rjo6bW92ZShrZXkpLCBGb250Q2FzY2FkZUZvbnRzOjpjcmVhdGUoZm9udFNlbGVjdG9yKSk7Cisg
ICAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IGdseXBocyA9IG5ld0VudHJ5LT5mb250cy5nZXQoKTsK
IAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsID0g
NTA7CiAgICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtRW50cmllcyA9IDQwMDsKICAgICBzdGF0
aWMgdW5zaWduZWQgcHJ1bmVDb3VudGVyOwotICAgIC8vIFJlZmVyZW5jZWQgRm9udEdseXBocyB3
b3VsZCBleGlzdCBhbnl3YXkgc28gcHJ1bmluZyB0aGVtIHNhdmVzIGxpdHRsZSBtZW1vcnkuCisg
ICAgLy8gUmVmZXJlbmNlZCBGb250Q2FzY2FkZUZvbnRzIHdvdWxkIGV4aXN0IGFueXdheSBzbyBw
cnVuaW5nIHRoZW0gc2F2ZXMgbGl0dGxlIG1lbW9yeS4KICAgICBpZiAoISgrK3BydW5lQ291bnRl
ciAlIHVucmVmZXJlbmNlZFBydW5lSW50ZXJ2YWwpKQotICAgICAgICBwcnVuZVVucmVmZXJlbmNl
ZEVudHJpZXNGcm9tRm9udEdseXBoc0NhY2hlKCk7CisgICAgICAgIHBydW5lVW5yZWZlcmVuY2Vk
RW50cmllc0Zyb21Gb250Q2FzY2FkZUNhY2hlKCk7CiAgICAgLy8gUHJldmVudCBwYXRob2xvZ2lj
YWwgZ3Jvd3RoLgotICAgIGlmIChmb250R2x5cGhzQ2FjaGUoKS5zaXplKCkgPiBtYXhpbXVtRW50
cmllcykKLSAgICAgICAgZm9udEdseXBoc0NhY2hlKCkucmVtb3ZlKGZvbnRHbHlwaHNDYWNoZSgp
LmJlZ2luKCkpOworICAgIGlmIChmb250Q2FzY2FkZUNhY2hlKCkuc2l6ZSgpID4gbWF4aW11bUVu
dHJpZXMpCisgICAgICAgIGZvbnRDYXNjYWRlQ2FjaGUoKS5yZW1vdmUoZm9udENhc2NhZGVDYWNo
ZSgpLmJlZ2luKCkpOwogICAgIHJldHVybiBnbHlwaHM7CiB9CiAKIHZvaWQgRm9udENhc2NhZGU6
OnVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSBjb25zdAogewot
ICAgIG1fZ2x5cGhzID0gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMobV9mb250RGVzY3Jp
cHRpb24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7CisgICAgbV9mb250cyA9IHJldHJpZXZlT3JBZGRD
YWNoZWRGb250cyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKICAgICBt
X3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sID0gdXNlQmFja3NsYXNoQXNZZW5TaWduRm9yRmFtaWx5
KGZpcnN0RmFtaWx5KCkpOwogICAgIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA9IGNvbXB1dGVUeXBl
c2V0dGluZ0ZlYXR1cmVzKCk7CiB9CkBAIC0zODQsNyArMzg1LDcgQEAgZmxvYXQgRm9udENhc2Nh
ZGU6OndpZHRoKGNvbnN0IFRleHRSdW4mIAogCiAgICAgYm9vbCBoYXNLZXJuaW5nT3JMaWdhdHVy
ZXMgPSB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiAoS2VybmluZyB8IExpZ2F0dXJlcyk7CiAgICAg
Ym9vbCBoYXNXb3JkU3BhY2luZ09yTGV0dGVyU3BhY2luZyA9IHdvcmRTcGFjaW5nKCkgfHwgbGV0
dGVyU3BhY2luZygpOwotICAgIGZsb2F0KiBjYWNoZUVudHJ5ID0gbV9nbHlwaHMtPndpZHRoQ2Fj
aGUoKS5hZGQocnVuLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCksIGhh
c0tlcm5pbmdPckxpZ2F0dXJlcywgaGFzV29yZFNwYWNpbmdPckxldHRlclNwYWNpbmcsIGdseXBo
T3ZlcmZsb3cpOworICAgIGZsb2F0KiBjYWNoZUVudHJ5ID0gbV9mb250cy0+d2lkdGhDYWNoZSgp
LmFkZChydW4sIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKSwgaGFzS2Vy
bmluZ09yTGlnYXR1cmVzLCBoYXNXb3JkU3BhY2luZ09yTGV0dGVyU3BhY2luZywgZ2x5cGhPdmVy
Zmxvdyk7CiAgICAgaWYgKGNhY2hlRW50cnkgJiYgIXN0ZDo6aXNuYW4oKmNhY2hlRW50cnkpKQog
ICAgICAgICByZXR1cm4gKmNhY2hlRW50cnk7CiAKQEAgLTQzMiw3ICs0MzMsNyBAQCBHbHlwaERh
dGEgRm9udENhc2NhZGU6OmdseXBoRGF0YUZvckNoYXJhCiAgICAgaWYgKG1pcnJvcikKICAgICAg
ICAgYyA9IHVfY2hhck1pcnJvcihjKTsKIAotICAgIHJldHVybiBtX2dseXBocy0+Z2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKGMsIG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KTsKKyAgICByZXR1cm4g
bV9mb250cy0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIG1fZm9udERlc2NyaXB0aW9uLCB2YXJp
YW50KTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKQEAgLTEwOTUsNyArMTA5Niw3IEBAIGJv
b2wgRm9udENhc2NhZGU6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMKIAogYm9vbCBGb250Q2FzY2Fk
ZTo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdAogewotICAgIHJldHVybiBtX2dseXBocyAm
JiBtX2dseXBocy0+aXNMb2FkaW5nQ3VzdG9tRm9udHMoKTsKKyAgICByZXR1cm4gbV9mb250cyAm
JiBtX2ZvbnRzLT5pc0xvYWRpbmdDdXN0b21Gb250cygpOwogfQogICAgIAogR2x5cGhUb1BhdGhU
cmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGUgY29tcHV0ZVVuZGVybGluZVR5cGUoY29uc3Qg
VGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgaW5k
ZXgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlLmgJKHJldmlzaW9uIDE4MDI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKIAogI2lu
Y2x1ZGUgIkRhc2hBcnJheS5oIgogI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2Fz
Y2FkZUZvbnRzLmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9u
dEdseXBocy5oIgogI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgi
CiAjaW5jbHVkZSAiVHlwZXNldHRpbmdGZWF0dXJlcy5oIgpAQCAtMTY5LDcgKzE2OSw3IEBAIHB1
YmxpYzoKICAgICBGb250V2VpZ2h0IHdlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2Ny
aXB0aW9uLndlaWdodCgpOyB9CiAgICAgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQoKSBj
b25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKTsgfQogCi0gICAg
Ym9vbCBpc1BsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzLT5pc0ZvclBsYXRm
b3JtRm9udCgpOyB9CisgICAgYm9vbCBpc1BsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9udHMtPmlzRm9yUGxhdGZvcm1Gb250KCk7IH0KIAogICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBm
b250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlGb250KCkuZm9udE1ldHJpY3MoKTsg
fQogICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9udCgpLnNw
YWNlV2lkdGgoKSArIG1fbGV0dGVyU3BhY2luZzsgfQpAQCAtMjg1LDcgKzI4NSw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlcyhjb25zdCBVQ2hhciosIHVuc2ln
bmVkIGxlbmd0aCk7CiAKICAgICBib29sIHVzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkgY29uc3Qg
eyByZXR1cm4gbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsgfQotICAgIEZvbnRHbHlwaHMqIGds
eXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzLmdldCgpOyB9CisgICAgRm9udENhc2NhZGVG
b250cyogZm9udHMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRzLmdldCgpOyB9CiAKIHByaXZhdGU6
CiAgICAgYm9vbCBpc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0OwpAQCAtMzM1LDE1ICszMzUs
MTUgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgVHlwZXNldHRpbmdGZWF0dXJlcyBzX2RlZmF1bHRU
eXBlc2V0dGluZ0ZlYXR1cmVzOwogCiAgICAgRm9udERlc2NyaXB0aW9uIG1fZm9udERlc2NyaXB0
aW9uOwotICAgIG11dGFibGUgUmVmUHRyPEZvbnRHbHlwaHM+IG1fZ2x5cGhzOworICAgIG11dGFi
bGUgUmVmUHRyPEZvbnRDYXNjYWRlRm9udHM+IG1fZm9udHM7CiAgICAgZmxvYXQgbV9sZXR0ZXJT
cGFjaW5nOwogICAgIGZsb2F0IG1fd29yZFNwYWNpbmc7CiAgICAgbXV0YWJsZSBib29sIG1fdXNl
QmFja3NsYXNoQXNZZW5TeW1ib2w7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3R5cGVzZXR0aW5n
RmVhdHVyZXMgOiAyOyAvLyAoVHlwZXNldHRpbmdGZWF0dXJlcykgQ2FjaGVzIHZhbHVlcyBjb21w
dXRlZCBmcm9tIG1fZm9udERlc2NyaXB0aW9uLgogfTsKIAotdm9pZCBpbnZhbGlkYXRlRm9udEds
eXBoc0NhY2hlKCk7Ci12b2lkIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhz
Q2FjaGUoKTsKK3ZvaWQgaW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUoKTsKK3ZvaWQgcHJ1bmVV
bnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRDYXNjYWRlQ2FjaGUoKTsKIHZvaWQgcHJ1bmVTeXN0
ZW1GYWxsYmFja0ZvbnRzKCk7CiB2b2lkIGNsZWFyV2lkdGhDYWNoZXMoKTsKIApAQCAtMzUzLDI1
ICszNTMsMjUgQEAgaW5saW5lIEZvbnRDYXNjYWRlOjp+Rm9udENhc2NhZGUoKQogCiBpbmxpbmUg
Y29uc3QgRm9udCYgRm9udENhc2NhZGU6OnByaW1hcnlGb250KCkgY29uc3QKIHsKLSAgICBBU1NF
UlQobV9nbHlwaHMpOwotICAgIHJldHVybiBtX2dseXBocy0+cHJpbWFyeUZvbnQobV9mb250RGVz
Y3JpcHRpb24pOworICAgIEFTU0VSVChtX2ZvbnRzKTsKKyAgICByZXR1cm4gbV9mb250cy0+cHJp
bWFyeUZvbnQobV9mb250RGVzY3JpcHRpb24pOwogfQogCiBpbmxpbmUgY29uc3QgRm9udFJhbmdl
cyYgRm9udENhc2NhZGU6OmZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKG1fZ2x5cGhzKTsKLSAgICByZXR1cm4gbV9nbHlwaHMtPnJlYWxpemVGYWxs
YmFja1Jhbmdlc0F0KG1fZm9udERlc2NyaXB0aW9uLCBpbmRleCk7CisgICAgQVNTRVJUKG1fZm9u
dHMpOworICAgIHJldHVybiBtX2ZvbnRzLT5yZWFsaXplRmFsbGJhY2tSYW5nZXNBdChtX2ZvbnRE
ZXNjcmlwdGlvbiwgaW5kZXgpOwogfQogCiBpbmxpbmUgYm9vbCBGb250Q2FzY2FkZTo6aXNGaXhl
ZFBpdGNoKCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9nbHlwaHMpOwotICAgIHJldHVybiBtX2ds
eXBocy0+aXNGaXhlZFBpdGNoKG1fZm9udERlc2NyaXB0aW9uKTsKKyAgICBBU1NFUlQobV9mb250
cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmlzRml4ZWRQaXRjaChtX2ZvbnREZXNjcmlwdGlvbik7
CiB9CiAKIGlubGluZSBGb250U2VsZWN0b3IqIEZvbnRDYXNjYWRlOjpmb250U2VsZWN0b3IoKSBj
b25zdAogewotICAgIHJldHVybiBtX2dseXBocyA/IG1fZ2x5cGhzLT5mb250U2VsZWN0b3IoKSA6
IDA7CisgICAgcmV0dXJuIG1fZm9udHMgPyBtX2ZvbnRzLT5mb250U2VsZWN0b3IoKSA6IDA7CiB9
CiAKIGlubGluZSBmbG9hdCBGb250Q2FzY2FkZTo6dGFiV2lkdGgoY29uc3QgRm9udCYgZm9udCwg
dW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAko
cmV2aXNpb24gMTgwMjY0KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250R2x5cGhzLmNwcDoxODAyNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZUZvbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAxMy0yMDE1IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udEdseXBocy5oIgorCisjaW5j
bHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJH
bHlwaFBhZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisKK0ZvbnRHbHlwaHM6OkZvbnRH
bHlwaHMoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKKyAgICA6IG1fY2Fj
aGVkUHJpbWFyeUZvbnQoMCkKKyAgICAsIG1fZm9udFNlbGVjdG9yKGZvbnRTZWxlY3RvcikKKyAg
ICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbihtX2ZvbnRTZWxlY3RvciA/IG1fZm9udFNlbGVjdG9y
LT52ZXJzaW9uKCkgOiAwKQorICAgICwgbV9nZW5lcmF0aW9uKGZvbnRDYWNoZSgpLmdlbmVyYXRp
b24oKSkKK3sKK30KKworRm9udEdseXBoczo6Rm9udEdseXBocyhjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBwbGF0Zm9ybURhdGEpCisgICAgOiBtX2NhY2hlZFByaW1hcnlGb250KDApCisgICAgLCBt
X2ZvbnRTZWxlY3RvcigwKQorICAgICwgbV9mb250U2VsZWN0b3JWZXJzaW9uKDApCisgICAgLCBt
X2dlbmVyYXRpb24oZm9udENhY2hlKCkuZ2VuZXJhdGlvbigpKQorICAgICwgbV9pc0ZvclBsYXRm
b3JtRm9udCh0cnVlKQoreworICAgIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5hcHBlbmQoRm9u
dFJhbmdlcyhmb250Q2FjaGUoKS5mb250Rm9yUGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkpKTsK
K30KKworRm9udEdseXBoczo6fkZvbnRHbHlwaHMoKQoreworfQorCit2b2lkIEZvbnRHbHlwaHM6
OmRldGVybWluZVBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7Cisg
ICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0
aW9uLCAwKTsKKyAgICB1bnNpZ25lZCBudW1SYW5nZXMgPSBwcmltYXJ5UmFuZ2VzLnNpemUoKTsK
KyAgICBpZiAobnVtUmFuZ2VzID09IDEpCisgICAgICAgIG1fcGl0Y2ggPSBwcmltYXJ5UmFuZ2Vz
LnJhbmdlQXQoMCkuZm9udCgpLnBpdGNoKCk7CisgICAgZWxzZQorICAgICAgICBtX3BpdGNoID0g
VmFyaWFibGVQaXRjaDsKK30KKworYm9vbCBGb250R2x5cGhzOjppc0xvYWRpbmdDdXN0b21Gb250
cygpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiBmb250UmFuZ2VzIDogbV9yZWFsaXplZEZhbGxi
YWNrUmFuZ2VzKSB7CisgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTG9hZGluZygpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGlj
IEZvbnRSYW5nZXMgcmVhbGl6ZU5leHRGYWxsYmFjayhjb25zdCBGb250RGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCB1bnNpZ25lZCYgaW5kZXgsIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQor
eworICAgIEFTU0VSVChpbmRleCA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCkpOworCisgICAg
d2hpbGUgKGluZGV4IDwgZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKSkgeworICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGZhbWlseSA9IGRlc2NyaXB0aW9uLmZhbWlseUF0KGluZGV4KyspOwor
ICAgICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBpZiAoZm9udFNlbGVjdG9yKSB7CisgICAgICAgICAgICBhdXRvIHJhbmdlcyA9IGZvbnRT
ZWxlY3Rvci0+Zm9udFJhbmdlc0ZvckZhbWlseShkZXNjcmlwdGlvbiwgZmFtaWx5KTsKKyAgICAg
ICAgICAgIGlmICghcmFuZ2VzLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiByYW5n
ZXM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8gZm9udCA9IGZvbnRDYWNoZSgpLmZvbnRG
b3JGYW1pbHkoZGVzY3JpcHRpb24sIGZhbWlseSkpCisgICAgICAgICAgICByZXR1cm4gRm9udFJh
bmdlcyhXVEY6Om1vdmUoZm9udCkpOworICAgIH0KKyAgICAvLyBXZSBkaWRuJ3QgZmluZCBhIGZv
bnQuIFRyeSB0byBmaW5kIGEgc2ltaWxhciBmb250IHVzaW5nIG91ciBvd24gc3BlY2lmaWMga25v
d2xlZGdlIGFib3V0IG91ciBwbGF0Zm9ybS4KKyAgICAvLyBGb3IgZXhhbXBsZSBvbiBPUyBYLCB3
ZSBrbm93IHRvIG1hcCBhbnkgZmFtaWxpZXMgY29udGFpbmluZyB0aGUgd29yZHMgQXJhYmljLCBQ
YXNodG8sIG9yIFVyZHUgdG8gdGhlCisgICAgLy8gR2VlemEgUHJvIGZvbnQuCisgICAgcmV0dXJu
IEZvbnRSYW5nZXMoZm9udENhY2hlKCkuc2ltaWxhckZvbnQoZGVzY3JpcHRpb24pKTsKK30KKwor
Y29uc3QgRm9udFJhbmdlcyYgRm9udEdseXBoczo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCit7CisgICAg
aWYgKGluZGV4IDwgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLnNpemUoKSkKKyAgICAgICAgcmV0
dXJuIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlc1tpbmRleF07CisKKyAgICBBU1NFUlQoaW5kZXgg
PT0gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLnNpemUoKSk7CisgICAgQVNTRVJUKGZvbnRDYWNo
ZSgpLmdlbmVyYXRpb24oKSA9PSBtX2dlbmVyYXRpb24pOworCisgICAgbV9yZWFsaXplZEZhbGxi
YWNrUmFuZ2VzLmFwcGVuZChGb250UmFuZ2VzKCkpOworICAgIGF1dG8mIGZvbnRSYW5nZXMgPSBt
X3JlYWxpemVkRmFsbGJhY2tSYW5nZXMubGFzdCgpOworCisgICAgaWYgKCFpbmRleCkgeworICAg
ICAgICBmb250UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxsYmFjayhkZXNjcmlwdGlvbiwgbV9sYXN0
UmVhbGl6ZWRGYWxsYmFja0luZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7CisgICAgICAgIGlm
IChmb250UmFuZ2VzLmlzTnVsbCgpICYmIG1fZm9udFNlbGVjdG9yKQorICAgICAgICAgICAgZm9u
dFJhbmdlcyA9IG1fZm9udFNlbGVjdG9yLT5mb250UmFuZ2VzRm9yRmFtaWx5KGRlc2NyaXB0aW9u
LCBzdGFuZGFyZEZhbWlseSk7CisgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQorICAg
ICAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMoZm9udENhY2hlKCkubGFzdFJlc29ydEZh
bGxiYWNrRm9udChkZXNjcmlwdGlvbikpOworICAgICAgICByZXR1cm4gZm9udFJhbmdlczsKKyAg
ICB9CisKKyAgICBpZiAobV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IDwgZGVzY3JpcHRpb24u
ZmFtaWx5Q291bnQoKSkKKyAgICAgICAgZm9udFJhbmdlcyA9IHJlYWxpemVOZXh0RmFsbGJhY2so
ZGVzY3JpcHRpb24sIG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCwgbV9mb250U2VsZWN0b3Iu
Z2V0KCkpOworCisgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkgJiYgbV9mb250U2VsZWN0b3Ip
IHsKKyAgICAgICAgQVNTRVJUKG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCA+PSBkZXNjcmlw
dGlvbi5mYW1pbHlDb3VudCgpKTsKKworICAgICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JGYWxs
YmFja0luZGV4ID0gbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IC0gZGVzY3JpcHRpb24uZmFt
aWx5Q291bnQoKTsKKyAgICAgICAgaWYgKGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXggPT0gbV9m
b250U2VsZWN0b3ItPmZhbGxiYWNrRm9udENvdW50KCkpCisgICAgICAgICAgICByZXR1cm4gZm9u
dFJhbmdlczsKKyAgICAgICAgKyttX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXg7CisgICAgICAg
IGZvbnRSYW5nZXMgPSBGb250UmFuZ2VzKG1fZm9udFNlbGVjdG9yLT5mYWxsYmFja0ZvbnRBdChk
ZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRleCkpOworICAgIH0KKworICAgIHJl
dHVybiBmb250UmFuZ2VzOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNJblJhbmdlKFVDaGFy
MzIgY2hhcmFjdGVyLCBVQ2hhcjMyIGxvd2VyQm91bmQsIFVDaGFyMzIgdXBwZXJCb3VuZCkKK3sK
KyAgICByZXR1cm4gY2hhcmFjdGVyID49IGxvd2VyQm91bmQgJiYgY2hhcmFjdGVyIDw9IHVwcGVy
Qm91bmQ7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZElnbm9yZVJvdGF0aW9uKFVDaGFyMzIgY2hh
cmFjdGVyKQoreworICAgIGlmIChjaGFyYWN0ZXIgPT0gMHgwMDBBNyB8fCBjaGFyYWN0ZXIgPT0g
MHgwMDBBOSB8fCBjaGFyYWN0ZXIgPT0gMHgwMDBBRSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBpZiAoY2hhcmFjdGVyID09IDB4MDAwQjYgfHwgY2hhcmFjdGVyID09IDB4MDAwQkMgfHwg
Y2hhcmFjdGVyID09IDB4MDAwQkQgfHwgY2hhcmFjdGVyID09IDB4MDAwQkUpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDAyRTUsIDB4MDAy
RUIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoaXNJblJhbmdlKGNoYXJh
Y3RlciwgMHgwMTEwMCwgMHgwMTFGRikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMTQwMSwg
MHgwMTY3RikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMTgwMCwgMHgwMThGRikpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGNoYXJhY3RlciA9PSAweDAyMDE2IHx8IGNoYXJh
Y3RlciA9PSAweDAyMDIwIHx8IGNoYXJhY3RlciA9PSAweDAyMDIxIHx8IGNoYXJhY3RlciA9PSAw
eDIwMzAgfHwgY2hhcmFjdGVyID09IDB4MDIwMzEpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIwM0IsIDB4MDIwM0QpIHx8IGNoYXJhY3Rl
ciA9PSAweDAyMDQyIHx8IGNoYXJhY3RlciA9PSAweDAyMDQ0IHx8IGNoYXJhY3RlciA9PSAweDAy
MDQ3CisgICAgICAgIHx8IGNoYXJhY3RlciA9PSAweDAyMDQ4IHx8IGNoYXJhY3RlciA9PSAweDAy
MDQ5IHx8IGNoYXJhY3RlciA9PSAweDIwNTEpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIwNjUsIDB4MDIwNjkpIHx8IGlzSW5SYW5nZShj
aGFyYWN0ZXIsIDB4MDIwREQsIDB4MDIwRTApCisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0
ZXIsIDB4MDIwRTIsIDB4MDIwRTQpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIxMDAsIDB4
MDIxMTcpCisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIxMTksIDB4MDIxMzEp
IHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIxMzMsIDB4MDIxM0YpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMTQ1LCAweDAyMTRB
KSB8fCBjaGFyYWN0ZXIgPT0gMHgwMjE0QyB8fCBjaGFyYWN0ZXIgPT0gMHgwMjE0RAorICAgICAg
ICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMTRGLCAweDAyMThGKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjMwMCwgMHgwMjMw
NykgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjMwQywgMHgwMjMxRikKKyAgICAgICAgfHwg
aXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjMyMiwgMHgwMjMyQikgfHwgaXNJblJhbmdlKGNoYXJh
Y3RlciwgMHgwMjM3RCwgMHgwMjM5QSkKKyAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3Rlciwg
MHgwMjNCNCwgMHgwMjNCNikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjNCQSwgMHgwMjND
RikKKyAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjNEMSwgMHgwMjNEQikgfHwg
aXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjNFMiwgMHgwMjRGRikpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDI1QTAsIDB4MDI2MTkpIHx8
IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDI2MjAsIDB4MDI3NjcpCisgICAgICAgIHx8IGlzSW5S
YW5nZShjaGFyYWN0ZXIsIDB4MDI3NzYsIDB4MDI3OTMpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIs
IDB4MDJCMTIsIDB4MDJCMkYpCisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDJC
NEQsIDB4MDJCRkYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDJFODAsIDB4MDMwMDcpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjaGFyYWN0ZXIgPT0gMHgwMzAxMiB8fCBj
aGFyYWN0ZXIgPT0gMHgwMzAxMyB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAzMDIwLCAweDAz
MDJGKQorICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAzMDMxLCAweDAzMDlGKSB8
fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAzMEExLCAweDAzMEZCKQorICAgICAgICB8fCBpc0lu
UmFuZ2UoY2hhcmFjdGVyLCAweDAzMEZELCAweDBBNENGKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwQTg0MCwgMHgwQTg3RikgfHwgaXNJ
blJhbmdlKGNoYXJhY3RlciwgMHgwQTk2MCwgMHgwQTk3RikKKyAgICAgICAgfHwgaXNJblJhbmdl
KGNoYXJhY3RlciwgMHgwQUMwMCwgMHgwRDdGRikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgw
RTAwMCwgMHgwRkFGRikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGlzSW5SYW5n
ZShjaGFyYWN0ZXIsIDB4MEZFMTAsIDB4MEZFMUYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4
MEZFMzAsIDB4MEZFNDgpCisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZFNTAs
IDB4MEZFNTcpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZFNUYsIDB4MEZFNjIpCisgICAg
ICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZFNjcsIDB4MEZFNkYpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRjAxLCAweDBG
RjA3KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRjBBLCAweDBGRjBDKQorICAgICAgICB8
fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRjBFLCAweDBGRjE5KSB8fCBjaGFyYWN0ZXIgPT0g
MHgwRkYxQiB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRjFGLCAweDBGRjNBKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoY2hhcmFjdGVyID09IDB4MEZGM0MgfHwgY2hhcmFj
dGVyID09IDB4MEZGM0UpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGlzSW5SYW5n
ZShjaGFyYWN0ZXIsIDB4MEZGNDAsIDB4MEZGNUEpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4
MEZGRTAsIDB4MEZGRTIpCisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZGRTQs
IDB4MEZGRTcpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZGRjAsIDB4MEZGRjgpCisgICAg
ICAgIHx8IGNoYXJhY3RlciA9PSAweDBGRkZEKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDEzMDAwLCAweDEzNDJGKSB8fCBpc0luUmFuZ2Uo
Y2hhcmFjdGVyLCAweDFCMDAwLCAweDFCMEZGKQorICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFj
dGVyLCAweDFEMDAwLCAweDFEMUZGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDFEMzAwLCAw
eDFEMzdGKQorICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDFGMDAwLCAweDFGNjRG
KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDFGNjgwLCAweDFGNzdGKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgCisgICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MjAwMDAsIDB4
MkZGRkQpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MzAwMDAsIDB4M0ZGRkQpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmIFBMQVRGT1JNKENP
Q09BKQorc3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDSktDaGFyYWN0ZXJXaXRob3V0U3lu
dGhldGljSXRhbGljKFVDaGFyMzIgY2hhcmFjdGVyLCBHbHlwaERhdGEmIGRhdGEpCit7CisgICAg
R2x5cGhEYXRhIG5vbkl0YWxpY0RhdGEgPSBkYXRhLmZvbnQtPm5vblN5bnRoZXRpY0l0YWxpY0Zv
bnQoKS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CisgICAgaWYgKG5vbkl0YWxp
Y0RhdGEuZm9udCkKKyAgICAgICAgcmV0dXJuIG5vbkl0YWxpY0RhdGE7CisgICAgcmV0dXJuIGRh
dGE7Cit9CisjZW5kaWYKKyAgICAKK3N0YXRpYyBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yTm9uQ0pL
Q2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oVUNoYXIzMiBjaGFyYWN0ZXIsIE5vbkNKS0ds
eXBoT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGNvbnN0IEdseXBoRGF0YSYgZGF0YSkKK3sKKyAg
ICBpZiAob3JpZW50YXRpb24gPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblVwcmlnaHQgfHwgc2hv
dWxkSWdub3JlUm90YXRpb24oY2hhcmFjdGVyKSkgeworICAgICAgICBHbHlwaERhdGEgdXByaWdo
dERhdGEgPSBkYXRhLmZvbnQtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnQoKS0+Z2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKGNoYXJhY3Rlcik7CisgICAgICAgIC8vIElmIHRoZSBnbHlwaHMgYXJlIHRoZSBz
YW1lLCB0aGVuIHdlIGtub3cgd2UgY2FuIGp1c3QgdXNlIHRoZSBob3Jpem9udGFsIGdseXBoIHJv
dGF0ZWQgdmVydGljYWxseSB0byBiZSB1cHJpZ2h0LgorICAgICAgICBpZiAoZGF0YS5nbHlwaCA9
PSB1cHJpZ2h0RGF0YS5nbHlwaCkKKyAgICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAgICAv
LyBUaGUgZ2x5cGhzIGFyZSBkaXN0aW5jdCwgbWVhbmluZyB0aGF0IHRoZSBmb250IGhhcyBhIHZl
cnRpY2FsLXJpZ2h0IGdseXBoIGJha2VkIGludG8gaXQuIFdlIGNhbid0IHVzZSB0aGF0CisgICAg
ICAgIC8vIGdseXBoLCBzbyB3ZSBmYWxsIGJhY2sgdG8gdGhlIHVwcmlnaHQgZGF0YSBhbmQgdXNl
IHRoZSBob3Jpem9udGFsIGdseXBoLgorICAgICAgICBpZiAodXByaWdodERhdGEuZm9udCkKKyAg
ICAgICAgICAgIHJldHVybiB1cHJpZ2h0RGF0YTsKKyAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9u
ID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KSB7CisgICAgICAgIEdseXBo
RGF0YSB2ZXJ0aWNhbFJpZ2h0RGF0YSA9IGRhdGEuZm9udC0+dmVydGljYWxSaWdodE9yaWVudGF0
aW9uRm9udCgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICAgICAgLy8g
SWYgdGhlIGdseXBocyBhcmUgZGlzdGluY3QsIHdlIHdpbGwgbWFrZSB0aGUgYXNzdW1wdGlvbiB0
aGF0IHRoZSBmb250IGhhcyBhIHZlcnRpY2FsLXJpZ2h0IGdseXBoIGJha2VkCisgICAgICAgIC8v
IGludG8gaXQuCisgICAgICAgIGlmIChkYXRhLmdseXBoICE9IHZlcnRpY2FsUmlnaHREYXRhLmds
eXBoKQorICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgIC8vIFRoZSBnbHlwaHMgYXJl
IGlkZW50aWNhbCwgbWVhbmluZyB0aGF0IHdlIHNob3VsZCBqdXN0IHVzZSB0aGUgaG9yaXpvbnRh
bCBnbHlwaC4KKyAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHREYXRhLmZvbnQpCisgICAgICAgICAg
ICByZXR1cm4gdmVydGljYWxSaWdodERhdGE7CisgICAgfQorICAgIHJldHVybiBkYXRhOworfQor
CitHbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIz
MiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJp
YW50KQoreworICAgIC8vIFN5c3RlbSBmYWxsYmFjayBpcyBjaGFyYWN0ZXItZGVwZW5kZW50Lgor
ICAgIGF1dG8mIHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlw
dGlvbiwgMCk7CisgICAgYXV0byogb3JpZ2luYWxGb250ID0gcHJpbWFyeVJhbmdlcy5mb250Rm9y
Q2hhcmFjdGVyKGMpOworICAgIGlmICghb3JpZ2luYWxGb250KQorICAgICAgICBvcmlnaW5hbEZv
bnQgPSAmcHJpbWFyeVJhbmdlcy5mb250Rm9yRmlyc3RSYW5nZSgpOworCisgICAgUmVmUHRyPEZv
bnQ+IHN5c3RlbUZhbGxiYWNrRm9udCA9IG9yaWdpbmFsRm9udC0+c3lzdGVtRmFsbGJhY2tGb250
Rm9yQ2hhcmFjdGVyKGMsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250KTsKKyAgICBp
ZiAoIXN5c3RlbUZhbGxiYWNrRm9udCkKKyAgICAgICAgcmV0dXJuIEdseXBoRGF0YSgpOworCisg
ICAgaWYgKHN5c3RlbUZhbGxiYWNrRm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9
PSBWZXJ0aWNhbCAmJiAhc3lzdGVtRmFsbGJhY2tGb250LT5oYXNWZXJ0aWNhbEdseXBocygpICYm
IEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQorICAgICAgICB2YXJpYW50
ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsKKworICAgIEdseXBoRGF0YSBmYWxsYmFja0dseXBo
RGF0YTsKKyAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50KQorICAgICAgICBmYWxsYmFj
a0dseXBoRGF0YSA9IHN5c3RlbUZhbGxiYWNrRm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMp
OworICAgIGVsc2UKKyAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBzeXN0ZW1GYWxsYmFja0Zv
bnQtPnZhcmlhbnRGb250KGRlc2NyaXB0aW9uLCB2YXJpYW50KS0+Z2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKGMpOworCisgICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCAmJiBmYWxsYmFja0ds
eXBoRGF0YS5mb250KSB7CisgICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBo
T3JTeW1ib2woYykgJiYgZmFsbGJhY2tHbHlwaERhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3Jp
ZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhZmFsbGJhY2tHbHlwaERhdGEuZm9udC0+aXNUZXh0
T3JpZW50YXRpb25GYWxsYmFjaygpKQorICAgICAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBn
bHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihjLCBkZXNjcmlw
dGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCksIGZhbGxiYWNrR2x5cGhEYXRhKTsKKyAgICB9
CisKKyAgICAvLyBLZWVwIHRoZSBzeXN0ZW0gZmFsbGJhY2sgZm9udHMgd2UgdXNlIGFsaXZlLgor
ICAgIGlmIChmYWxsYmFja0dseXBoRGF0YS5nbHlwaCkKKyAgICAgICAgbV9zeXN0ZW1GYWxsYmFj
a0ZvbnRTZXQuYWRkKHN5c3RlbUZhbGxiYWNrRm9udC5yZWxlYXNlKCkpOworCisgICAgcmV0dXJu
IGZhbGxiYWNrR2x5cGhEYXRhOworfQorCitHbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRh
Rm9yVmFyaWFudChVQ2hhcjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24s
IEZvbnRWYXJpYW50IHZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpCit7CisgICAgd2hp
bGUgKHRydWUpIHsKKyAgICAgICAgYXV0byYgZm9udFJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jh
bmdlc0F0KGRlc2NyaXB0aW9uLCBmYWxsYmFja0luZGV4KyspOworICAgICAgICBpZiAoZm9udFJh
bmdlcy5pc051bGwoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBhdXRvKiBmb250ID0g
Zm9udFJhbmdlcy5mb250Rm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBHbHlwaERhdGEgZGF0YSA9
IGZvbnQgPyBmb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYykgOiBHbHlwaERhdGEoKTsKKyAg
ICAgICAgaWYgKGRhdGEuZm9udCkgeworICAgICAgICAgICAgLy8gVGhlIHZhcmlhbnRGb250IGZ1
bmN0aW9uIHNob3VsZCBub3Qgbm9ybWFsbHkgcmV0dXJuIDAuCisgICAgICAgICAgICAvLyBCdXQg
aWYgaXQgZG9lcywgd2Ugd2lsbCBqdXN0IHJlbmRlciB0aGUgY2FwaXRhbCBsZXR0ZXIgYmlnLgor
ICAgICAgICAgICAgUmVmUHRyPEZvbnQ+IHZhcmlhbnRGb250ID0gZGF0YS5mb250LT52YXJpYW50
Rm9udChkZXNjcmlwdGlvbiwgdmFyaWFudCk7CisgICAgICAgICAgICBpZiAoIXZhcmlhbnRGb250
KQorICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOworCisgICAgICAgICAgICByZXR1cm4gdmFy
aWFudEZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhjLCBkZXNjcmlwdGlvbiwgdmFy
aWFudCk7Cit9CisKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JOb3JtYWxWYXJp
YW50KFVDaGFyMzIgYywgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAg
ICBjb25zdCB1bnNpZ25lZCBwYWdlTnVtYmVyID0gYyAvIEdseXBoUGFnZTo6c2l6ZTsKKworICAg
IGZvciAodW5zaWduZWQgZmFsbGJhY2tJbmRleCA9IDA7IHRydWU7ICsrZmFsbGJhY2tJbmRleCkg
eworICAgICAgICBhdXRvJiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVz
Y3JpcHRpb24sIGZhbGxiYWNrSW5kZXgpOworICAgICAgICBpZiAoZm9udFJhbmdlcy5pc051bGwo
KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBhdXRvKiBmb250ID0gZm9udFJhbmdlcy5m
b250Rm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBhdXRvKiBwYWdlID0gZm9udCA/IGZvbnQtPmds
eXBoUGFnZShwYWdlTnVtYmVyKSA6IG51bGxwdHI7CisgICAgICAgIGlmICghcGFnZSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBHbHlwaERhdGEgZGF0YSA9IHBhZ2UtPmdseXBoRGF0
YUZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgaWYgKGRhdGEuZm9udCkgeworICAgICAgICAgICAg
aWYgKGRhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAm
JiAhZGF0YS5mb250LT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBo
T3JpZW50YXRpb24oYywgZGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpLCBkYXRh
KTsKKworICAgICAgICAgICAgICAgIGlmICghZGF0YS5mb250LT5oYXNWZXJ0aWNhbEdseXBocygp
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgYnJva2VuIGlkZW9ncmFwaCBmb250
IGRhdGEuIFRoZSBicm9rZW4gaWRlb2dyYXBoIGZvbnQgd2lsbCB1c2UgdGhlIGhvcml6b250YWwg
d2lkdGggb2YgZ2x5cGhzCisgICAgICAgICAgICAgICAgICAgIC8vIHRvIG1ha2Ugc3VyZSB5b3Ug
Z2V0IGEgc3F1YXJlIChldmVuIGZvciBicm9rZW4gZ2x5cGhzIGxpa2Ugc3ltYm9scyB1c2VkIGZv
ciBwdW5jdHVhdGlvbikuCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaERhdGFGb3JW
YXJpYW50KGMsIGRlc2NyaXB0aW9uLCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50LCBmYWxsYmFja0lu
ZGV4KTsKKyAgICAgICAgICAgICAgICB9CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgICAg
ICAgICAgaWYgKGRhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkuc3ludGhldGljT2JsaXF1ZSgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yQ0pLQ2hhcmFjdGVyV2l0aG91
dFN5bnRoZXRpY0l0YWxpYyhjLCBkYXRhKTsKKyNlbmRpZgorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBnbHlw
aERhdGFGb3JTeXN0ZW1GYWxsYmFjayhjLCBkZXNjcmlwdGlvbiwgTm9ybWFsVmFyaWFudCk7Cit9
CisKK3N0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2VGcm9tRm9udFJhbmdlcyh1bnNp
Z25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250UmFuZ2VzJiBmb250UmFuZ2VzKQoreworICAgIGNv
bnN0IEZvbnQqIGZvbnQgPSBudWxscHRyOworICAgIFVDaGFyMzIgcGFnZVJhbmdlRnJvbSA9IHBh
Z2VOdW1iZXIgKiBHbHlwaFBhZ2U6OnNpemU7CisgICAgVUNoYXIzMiBwYWdlUmFuZ2VUbyA9IHBh
Z2VSYW5nZUZyb20gKyBHbHlwaFBhZ2U6OnNpemUgLSAxOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBmb250UmFuZ2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIHJhbmdlID0g
Zm9udFJhbmdlcy5yYW5nZUF0KGkpOworICAgICAgICBpZiAocmFuZ2UudG8oKSkgeworICAgICAg
ICAgICAgaWYgKHJhbmdlLmZyb20oKSA8PSBwYWdlUmFuZ2VGcm9tICYmIHBhZ2VSYW5nZVRvIDw9
IHJhbmdlLnRvKCkpCisgICAgICAgICAgICAgICAgZm9udCA9ICZyYW5nZS5mb250KCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWZvbnQpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgaWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0
aW9uKCkgPT0gVmVydGljYWwpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8R2x5cGhQYWdlKj4oZm9udC0+Z2x5cGhQYWdlKHBhZ2VOdW1iZXIpKTsKK30K
KworR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMs
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQodmFyaWFudCAhPSBB
dXRvVmFyaWFudCk7CisKKyAgICBpZiAodmFyaWFudCAhPSBOb3JtYWxWYXJpYW50KQorICAgICAg
ICByZXR1cm4gZ2x5cGhEYXRhRm9yVmFyaWFudChjLCBkZXNjcmlwdGlvbiwgdmFyaWFudCwgMCk7
CisKKyAgICBjb25zdCB1bnNpZ25lZCBwYWdlTnVtYmVyID0gYyAvIEdseXBoUGFnZTo6c2l6ZTsK
KworICAgIFJlZlB0cjxHbHlwaFBhZ2U+JiBjYWNoZWRQYWdlID0gcGFnZU51bWJlciA/IG1fY2Fj
aGVkUGFnZXMuYWRkKHBhZ2VOdW1iZXIsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZSA6IG1fY2Fj
aGVkUGFnZVplcm87CisgICAgaWYgKCFjYWNoZWRQYWdlKQorICAgICAgICBjYWNoZWRQYWdlID0g
Z2x5cGhQYWdlRnJvbUZvbnRSYW5nZXMocGFnZU51bWJlciwgcmVhbGl6ZUZhbGxiYWNrUmFuZ2Vz
QXQoZGVzY3JpcHRpb24sIDApKTsKKworICAgIEdseXBoRGF0YSBnbHlwaERhdGEgPSBjYWNoZWRQ
YWdlID8gY2FjaGVkUGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDogR2x5cGhEYXRhKCk7
CisgICAgaWYgKCFnbHlwaERhdGEuZ2x5cGgpIHsKKyAgICAgICAgaWYgKCFjYWNoZWRQYWdlKQor
ICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250cygp
OworICAgICAgICBlbHNlIGlmIChjYWNoZWRQYWdlLT5pc0ltbXV0YWJsZSgpKQorICAgICAgICAg
ICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlQ29weUZvck1peGVkRm9udHMoKmNhY2hl
ZFBhZ2UpOworCisgICAgICAgIGdseXBoRGF0YSA9IGdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQo
YywgZGVzY3JpcHRpb24pOworICAgICAgICBjYWNoZWRQYWdlLT5zZXRHbHlwaERhdGFGb3JDaGFy
YWN0ZXIoYywgZ2x5cGhEYXRhLmdseXBoLCBnbHlwaERhdGEuZm9udCk7CisgICAgfQorICAgIHJl
dHVybiBnbHlwaERhdGE7Cit9CisKK3ZvaWQgRm9udEdseXBoczo6cHJ1bmVTeXN0ZW1GYWxsYmFj
a3MoKQoreworICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAvLyBNdXRhYmxlIGdseXBoIHBhZ2VzIG1heSByZWZlcmVuY2UgZmFs
bGJhY2sgZm9udHMuCisgICAgaWYgKG1fY2FjaGVkUGFnZVplcm8gJiYgIW1fY2FjaGVkUGFnZVpl
cm8tPmlzSW1tdXRhYmxlKCkpCisgICAgICAgIG1fY2FjaGVkUGFnZVplcm8gPSBudWxscHRyOwor
ICAgIG1fY2FjaGVkUGFnZXMucmVtb3ZlSWYoW10oZGVjbHR5cGUobV9jYWNoZWRQYWdlcyk6Oktl
eVZhbHVlUGFpclR5cGUmIGtleUFuZFZhbHVlKSB7CisgICAgICAgIHJldHVybiAha2V5QW5kVmFs
dWUudmFsdWUtPmlzSW1tdXRhYmxlKCk7CisgICAgfSk7CisgICAgbV9zeXN0ZW1GYWxsYmFja0Zv
bnRTZXQuY2xlYXIoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAJKHdvcmtpbmcgY29weSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZUZvbnRzLmgi
CiAKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgpAQCAt
MzYsNyArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAKLUZvbnRHbHlwaHM6OkZvbnRH
bHlwaHMoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKK0ZvbnRDYXNjYWRl
Rm9udHM6OkZvbnRDYXNjYWRlRm9udHMoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxl
Y3RvcikKICAgICA6IG1fY2FjaGVkUHJpbWFyeUZvbnQoMCkKICAgICAsIG1fZm9udFNlbGVjdG9y
KGZvbnRTZWxlY3RvcikKICAgICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbihtX2ZvbnRTZWxlY3Rv
ciA/IG1fZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAwKQpAQCAtNDQsNyArNDQsNyBAQCBGb250
R2x5cGhzOjpGb250R2x5cGhzKFBhc3NSZWZQdHI8Rm9udFNlCiB7CiB9CiAKLUZvbnRHbHlwaHM6
OkZvbnRHbHlwaHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQorRm9udENh
c2NhZGVGb250czo6Rm9udENhc2NhZGVGb250cyhjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0
Zm9ybURhdGEpCiAgICAgOiBtX2NhY2hlZFByaW1hcnlGb250KDApCiAgICAgLCBtX2ZvbnRTZWxl
Y3RvcigwKQogICAgICwgbV9mb250U2VsZWN0b3JWZXJzaW9uKDApCkBAIC01NCwxMSArNTQsMTEg
QEAgRm9udEdseXBoczo6Rm9udEdseXBocyhjb25zdCBGb250UGxhdGZvcgogICAgIG1fcmVhbGl6
ZWRGYWxsYmFja1Jhbmdlcy5hcHBlbmQoRm9udFJhbmdlcyhmb250Q2FjaGUoKS5mb250Rm9yUGxh
dGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkpKTsKIH0KIAotRm9udEdseXBoczo6fkZvbnRHbHlwaHMo
KQorRm9udENhc2NhZGVGb250czo6fkZvbnRDYXNjYWRlRm9udHMoKQogewogfQogCi12b2lkIEZv
bnRHbHlwaHM6OmRldGVybWluZVBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRp
b24pCit2b2lkIEZvbnRDYXNjYWRlRm9udHM6OmRldGVybWluZVBpdGNoKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxp
emVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKICAgICB1bnNpZ25lZCBudW1SYW5n
ZXMgPSBwcmltYXJ5UmFuZ2VzLnNpemUoKTsKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBGb250R2x5
cGhzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGbwogICAgICAgICBtX3BpdGNoID0gVmFyaWFibGVQ
aXRjaDsKIH0KIAotYm9vbCBGb250R2x5cGhzOjppc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0
Citib29sIEZvbnRDYXNjYWRlRm9udHM6OmlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgY29uc3QKIHsK
ICAgICBmb3IgKGF1dG8mIGZvbnRSYW5nZXMgOiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMpIHsK
ICAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNMb2FkaW5nKCkpCkBAIC05OSw3ICs5OSw3IEBAIHN0
YXRpYyBGb250UmFuZ2VzIHJlYWxpemVOZXh0RmFsbGJhY2soY28KICAgICByZXR1cm4gRm9udFJh
bmdlcyhmb250Q2FjaGUoKS5zaW1pbGFyRm9udChkZXNjcmlwdGlvbikpOwogfQogCi1jb25zdCBG
b250UmFuZ2VzJiBGb250R2x5cGhzOjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCB1bnNpZ25lZCBpbmRleCkKK2NvbnN0IEZvbnRSYW5n
ZXMmIEZvbnRDYXNjYWRlRm9udHM6OnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2lnbmVkIGluZGV4KQogewogICAgIGlmIChpbmRl
eCA8IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5zaXplKCkpCiAgICAgICAgIHJldHVybiBtX3Jl
YWxpemVkRmFsbGJhY2tSYW5nZXNbaW5kZXhdOwpAQCAtMjUyLDcgKzI1Miw3IEBAIHN0YXRpYyBH
bHlwaERhdGEgZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmEKICAgICByZXR1cm4gZGF0YTsKIH0KIAot
R2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIg
YywgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFu
dCkKK0dseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFj
ayhVQ2hhcjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJp
YW50IHZhcmlhbnQpCiB7CiAgICAgLy8gU3lzdGVtIGZhbGxiYWNrIGlzIGNoYXJhY3Rlci1kZXBl
bmRlbnQuCiAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0
KGRlc2NyaXB0aW9uLCAwKTsKQEAgLTI4NSw3ICsyODUsNyBAQCBHbHlwaERhdGEgRm9udEdseXBo
czo6Z2x5cGhEYXRhRm9yU3lzdGVtCiAgICAgcmV0dXJuIGZhbGxiYWNrR2x5cGhEYXRhOwogfQog
Ci1HbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMyIGMsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQsIHVu
c2lnbmVkIGZhbGxiYWNrSW5kZXgpCitHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhE
YXRhRm9yVmFyaWFudChVQ2hhcjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRp
b24sIEZvbnRWYXJpYW50IHZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpCiB7CiAgICAg
d2hpbGUgKHRydWUpIHsKICAgICAgICAgYXV0byYgZm9udFJhbmdlcyA9IHJlYWxpemVGYWxsYmFj
a1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCBmYWxsYmFja0luZGV4KyspOwpAQCAtMzA3LDcgKzMwNyw3
IEBAIEdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JWYXJpYW4KICAgICByZXR1cm4g
Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soYywgZGVzY3JpcHRpb24sIHZhcmlhbnQpOwogfQog
Ci1HbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChVQ2hhcjMy
IGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCitHbHlwaERhdGEgRm9udENh
c2NhZGVGb250czo6Z2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChVQ2hhcjMyIGMsIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAgY29uc3QgdW5zaWduZWQgcGFnZU51
bWJlciA9IGMgLyBHbHlwaFBhZ2U6OnNpemU7CiAKQEAgLTM2NSw3ICszNjUsNyBAQCBzdGF0aWMg
UmVmUHRyPEdseXBoUGFnZT4gZ2x5cGhQYWdlRnJvbUZvCiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
R2x5cGhQYWdlKj4oZm9udC0+Z2x5cGhQYWdlKHBhZ2VOdW1iZXIpKTsKIH0KIAotR2x5cGhEYXRh
IEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQpCitHbHlwaERhdGEg
Rm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVCh2YXJpYW50ICE9IEF1dG9WYXJp
YW50KTsKQEAgLTM5Miw3ICszOTIsNyBAQCBHbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRh
Rm9yQ2hhcmFjCiAgICAgcmV0dXJuIGdseXBoRGF0YTsKIH0KIAotdm9pZCBGb250R2x5cGhzOjpw
cnVuZVN5c3RlbUZhbGxiYWNrcygpCit2b2lkIEZvbnRDYXNjYWRlRm9udHM6OnBydW5lU3lzdGVt
RmFsbGJhY2tzKCkKIHsKICAgICBpZiAobV9zeXN0ZW1GYWxsYmFja0ZvbnRTZXQuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZUZvbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCShyZXZpc2lvbiAxODAyNjQpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuaDoxODAyNjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MTAsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVm
IEZvbnRHbHlwaHNfaAorI2RlZmluZSBGb250R2x5cGhzX2gKKworI2luY2x1ZGUgIkZvbnQuaCIK
KyNpbmNsdWRlICJGb250UmFuZ2VzLmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCisjaW5j
bHVkZSAiR2x5cGhQYWdlLmgiCisjaW5jbHVkZSAiV2lkdGhDYWNoZS5oIgorI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworI2lmIFBMQVRGT1JN
KElPUykKKyNpbmNsdWRlICJXZWJDb3JlVGhyZWFkLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnRSZWN0OworY2xhc3Mg
Rm9udERlc2NyaXB0aW9uOworY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKK2NsYXNzIEZvbnRTZWxl
Y3RvcjsKKworY2xhc3MgRm9udEdseXBocyA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRHbHlwaHM+
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250R2x5cGhzKTsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPEZvbnRHbHlwaHM+IGNyZWF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9u
dFNlbGVjdG9yKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEZvbnRHbHlwaHMoZm9udFNlbGVjdG9y
KSk7IH0KKyAgICBzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IGNyZWF0ZUZvclBsYXRmb3JtRm9udChj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpIHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRm9udEdseXBocyhwbGF0Zm9ybURhdGEpKTsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgfkZv
bnRHbHlwaHMoKTsKKworICAgIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQoKSBjb25zdCB7IHJldHVy
biBtX2lzRm9yUGxhdGZvcm1Gb250OyB9CisKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50KTsKKwor
ICAgIGJvb2wgaXNGaXhlZFBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIHZvaWQg
ZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJik7CisKKyAgICBib29sIGlzTG9h
ZGluZ0N1c3RvbUZvbnRzKCkgY29uc3Q7CisKKyAgICBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3Rv
cigpIHsgcmV0dXJuIG1fZm9udFNlbGVjdG9yLmdldCgpOyB9CisgICAgLy8gRklYTUU6IEl0IHNo
b3VsZCBiZSBwb3NzaWJsZSB0byBjb21iaW5lIGZvbnRTZWxlY3RvclZlcnNpb24gYW5kIGdlbmVy
YXRpb24uCisgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udFNlbGVjdG9yVmVyc2lvbjsgfQorICAgIHVuc2lnbmVkIGdlbmVyYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX2dlbmVyYXRpb247IH0KKworICAgIFdpZHRoQ2FjaGUmIHdpZHRoQ2FjaGUo
KSB7IHJldHVybiBtX3dpZHRoQ2FjaGU7IH0KKyAgICBjb25zdCBXaWR0aENhY2hlJiB3aWR0aENh
Y2hlKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aENhY2hlOyB9CisKKyAgICBjb25zdCBGb250JiBw
cmltYXJ5Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBj
b25zdCBGb250UmFuZ2VzJiByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250RGVzY3Jp
cHRpb24mLCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KTsKKworICAgIHZvaWQgcHJ1bmVTeXN0ZW1G
YWxsYmFja3MoKTsKKworcHJpdmF0ZToKKyAgICBGb250R2x5cGhzKFBhc3NSZWZQdHI8Rm9udFNl
bGVjdG9yPik7CisgICAgRm9udEdseXBocyhjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CisKKyAg
ICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiwgY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQpOworICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JO
b3JtYWxWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIEdseXBo
RGF0YSBnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IEZvbnRWYXJpYW50LCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KTsKKworICAgIFZlY3RvcjxGb250
UmFuZ2VzLCAxPiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXM7CisgICAgdW5zaWduZWQgbV9sYXN0
UmVhbGl6ZWRGYWxsYmFja0luZGV4IHsgMCB9OworCisgICAgUmVmUHRyPEdseXBoUGFnZT4gbV9j
YWNoZWRQYWdlWmVybzsKKyAgICBIYXNoTWFwPGludCwgUmVmUHRyPEdseXBoUGFnZT4+IG1fY2Fj
aGVkUGFnZXM7CisKKyAgICBIYXNoU2V0PFJlZlB0cjxGb250Pj4gbV9zeXN0ZW1GYWxsYmFja0Zv
bnRTZXQ7CisKKyAgICBjb25zdCBGb250KiBtX2NhY2hlZFByaW1hcnlGb250OworICAgIFJlZlB0
cjxGb250U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9yOworCisgICAgV2lkdGhDYWNoZSBtX3dpZHRo
Q2FjaGU7CisKKyAgICB1bnNpZ25lZCBtX2ZvbnRTZWxlY3RvclZlcnNpb247CisgICAgdW5zaWdu
ZWQgc2hvcnQgbV9nZW5lcmF0aW9uOworICAgIFBpdGNoIG1fcGl0Y2ggeyBVbmtub3duUGl0Y2gg
fTsKKyAgICBib29sIG1faXNGb3JQbGF0Zm9ybUZvbnQgeyBmYWxzZSB9OworfTsKKworaW5saW5l
IGJvb2wgRm9udEdseXBoczo6aXNGaXhlZFBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24pCit7CisgICAgaWYgKG1fcGl0Y2ggPT0gVW5rbm93blBpdGNoKQorICAgICAgICBk
ZXRlcm1pbmVQaXRjaChkZXNjcmlwdGlvbik7CisgICAgcmV0dXJuIG1fcGl0Y2ggPT0gRml4ZWRQ
aXRjaDsKK307CisKK2lubGluZSBjb25zdCBGb250JiBGb250R2x5cGhzOjpwcmltYXJ5Rm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250KSB7CisgICAgICAgIGF1dG8m
IHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7
CisgICAgICAgIG1fY2FjaGVkUHJpbWFyeUZvbnQgPSBwcmltYXJ5UmFuZ2VzLmZvbnRGb3JDaGFy
YWN0ZXIoJyAnKTsKKyAgICAgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250KQorICAgICAgICAg
ICAgbV9jYWNoZWRQcmltYXJ5Rm9udCA9ICZwcmltYXJ5UmFuZ2VzLmZvbnRGb3JGaXJzdFJhbmdl
KCk7CisgICAgfQorICAgIHJldHVybiAqbV9jYWNoZWRQcmltYXJ5Rm9udDsKK30KKworfQorCisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
Rm9udHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZUZvbnRzLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgsOCAr
MTgsOCBAQAogICoKICAqLwogCi0jaWZuZGVmIEZvbnRHbHlwaHNfaAotI2RlZmluZSBGb250R2x5
cGhzX2gKKyNpZm5kZWYgRm9udENhc2NhZGVGb250c19oCisjZGVmaW5lIEZvbnRDYXNjYWRlRm9u
dHNfaAogCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRSYW5nZXMuaCIKQEAgLTQx
LDEzICs0MSwxMyBAQCBjbGFzcyBGb250RGVzY3JpcHRpb247CiBjbGFzcyBGb250UGxhdGZvcm1E
YXRhOwogY2xhc3MgRm9udFNlbGVjdG9yOwogCi1jbGFzcyBGb250R2x5cGhzIDogcHVibGljIFJl
ZkNvdW50ZWQ8Rm9udEdseXBocz4gewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvbnRHbHlw
aHMpOworY2xhc3MgRm9udENhc2NhZGVGb250cyA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRDYXNj
YWRlRm9udHM+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250Q2FzY2FkZUZvbnRzKTsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IGNyZWF0ZShQYXNzUmVmUHRyPEZv
bnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEZvbnRHbHlw
aHMoZm9udFNlbGVjdG9yKSk7IH0KLSAgICBzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IGNyZWF0ZUZv
clBsYXRmb3JtRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRm9udEdseXBocyhwbGF0Zm9ybURhdGEpKTsgfQorICAgIHN0YXRp
YyBSZWY8Rm9udENhc2NhZGVGb250cz4gY3JlYXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBm
b250U2VsZWN0b3IpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRm9udENhc2NhZGVGb250cyhmb250
U2VsZWN0b3IpKTsgfQorICAgIHN0YXRpYyBSZWY8Rm9udENhc2NhZGVGb250cz4gY3JlYXRlRm9y
UGxhdGZvcm1Gb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkgeyByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGb250Q2FzY2FkZUZvbnRzKHBsYXRmb3JtRGF0YSkpOyB9CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB+Rm9udEdseXBocygpOworICAgIFdFQkNPUkVfRVhQT1JUIH5Gb250
Q2FzY2FkZUZvbnRzKCk7CiAKICAgICBib29sIGlzRm9yUGxhdGZvcm1Gb250KCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0ZvclBsYXRmb3JtRm9udDsgfQogCkBAIC03Miw4ICs3Miw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHBydW5lU3lzdGVtRmFsbGJhY2tzKCk7CiAKIHByaXZhdGU6Ci0gICAgRm9udEds
eXBocyhQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOwotICAgIEZvbnRHbHlwaHMoY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYpOworICAgIEZvbnRDYXNjYWRlRm9udHMoUGFzc1JlZlB0cjxGb250U2Vs
ZWN0b3I+KTsKKyAgICBGb250Q2FzY2FkZUZvbnRzKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsK
IAogICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyLCBjb25z
dCBGb250RGVzY3JpcHRpb24mLCBGb250VmFyaWFudCk7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0
YUZvck5vcm1hbFZhcmlhbnQoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJik7CkBAIC05
OCwxNCArOTgsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNGb3JQbGF0Zm9ybUZvbnQgeyBm
YWxzZSB9OwogfTsKIAotaW5saW5lIGJvb2wgRm9udEdseXBoczo6aXNGaXhlZFBpdGNoKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCitpbmxpbmUgYm9vbCBGb250Q2FzY2FkZUZv
bnRzOjppc0ZpeGVkUGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsK
ICAgICBpZiAobV9waXRjaCA9PSBVbmtub3duUGl0Y2gpCiAgICAgICAgIGRldGVybWluZVBpdGNo
KGRlc2NyaXB0aW9uKTsKICAgICByZXR1cm4gbV9waXRjaCA9PSBGaXhlZFBpdGNoOwogfTsKIAot
aW5saW5lIGNvbnN0IEZvbnQmIEZvbnRHbHlwaHM6OnByaW1hcnlGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24pCitpbmxpbmUgY29uc3QgRm9udCYgRm9udENhc2NhZGVGb250
czo6cHJpbWFyeUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghbV9jYWNoZWRQcmltYXJ5Rm9udCkg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBo
cy5jcHAJKHJldmlzaW9uIDE4MDI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRHbHlwaHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQwOCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250R2x5cGhzLmgiCi0KLSNpbmNsdWRl
ICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIkdseXBo
UGFnZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLQotRm9udEdseXBoczo6Rm9udEdseXBo
cyhQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQotICAgIDogbV9jYWNoZWRQ
cmltYXJ5Rm9udCgwKQotICAgICwgbV9mb250U2VsZWN0b3IoZm9udFNlbGVjdG9yKQotICAgICwg
bV9mb250U2VsZWN0b3JWZXJzaW9uKG1fZm9udFNlbGVjdG9yID8gbV9mb250U2VsZWN0b3ItPnZl
cnNpb24oKSA6IDApCi0gICAgLCBtX2dlbmVyYXRpb24oZm9udENhY2hlKCkuZ2VuZXJhdGlvbigp
KQotewotfQotCi1Gb250R2x5cGhzOjpGb250R2x5cGhzKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IHBsYXRmb3JtRGF0YSkKLSAgICA6IG1fY2FjaGVkUHJpbWFyeUZvbnQoMCkKLSAgICAsIG1fZm9u
dFNlbGVjdG9yKDApCi0gICAgLCBtX2ZvbnRTZWxlY3RvclZlcnNpb24oMCkKLSAgICAsIG1fZ2Vu
ZXJhdGlvbihmb250Q2FjaGUoKS5nZW5lcmF0aW9uKCkpCi0gICAgLCBtX2lzRm9yUGxhdGZvcm1G
b250KHRydWUpCi17Ci0gICAgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmFwcGVuZChGb250UmFu
Z2VzKGZvbnRDYWNoZSgpLmZvbnRGb3JQbGF0Zm9ybURhdGEocGxhdGZvcm1EYXRhKSkpOwotfQot
Ci1Gb250R2x5cGhzOjp+Rm9udEdseXBocygpCi17Ci19Ci0KLXZvaWQgRm9udEdseXBoczo6ZGV0
ZXJtaW5lUGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKLXsKLSAgICBh
dXRvJiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24s
IDApOwotICAgIHVuc2lnbmVkIG51bVJhbmdlcyA9IHByaW1hcnlSYW5nZXMuc2l6ZSgpOwotICAg
IGlmIChudW1SYW5nZXMgPT0gMSkKLSAgICAgICAgbV9waXRjaCA9IHByaW1hcnlSYW5nZXMucmFu
Z2VBdCgwKS5mb250KCkucGl0Y2goKTsKLSAgICBlbHNlCi0gICAgICAgIG1fcGl0Y2ggPSBWYXJp
YWJsZVBpdGNoOwotfQotCi1ib29sIEZvbnRHbHlwaHM6OmlzTG9hZGluZ0N1c3RvbUZvbnRzKCkg
Y29uc3QKLXsKLSAgICBmb3IgKGF1dG8mIGZvbnRSYW5nZXMgOiBtX3JlYWxpemVkRmFsbGJhY2tS
YW5nZXMpIHsKLSAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNMb2FkaW5nKCkpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgRm9u
dFJhbmdlcyByZWFsaXplTmV4dEZhbGxiYWNrKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIHVuc2lnbmVkJiBpbmRleCwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCi17Ci0g
ICAgQVNTRVJUKGluZGV4IDwgZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKSk7Ci0KLSAgICB3aGls
ZSAoaW5kZXggPCBkZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpKSB7Ci0gICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgZmFtaWx5ID0gZGVzY3JpcHRpb24uZmFtaWx5QXQoaW5kZXgrKyk7Ci0gICAg
ICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGlmIChmb250U2VsZWN0b3IpIHsKLSAgICAgICAgICAgIGF1dG8gcmFuZ2VzID0gZm9udFNlbGVj
dG9yLT5mb250UmFuZ2VzRm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBmYW1pbHkpOwotICAgICAgICAg
ICAgaWYgKCFyYW5nZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlczsK
LSAgICAgICAgfQotICAgICAgICBpZiAoYXV0byBmb250ID0gZm9udENhY2hlKCkuZm9udEZvckZh
bWlseShkZXNjcmlwdGlvbiwgZmFtaWx5KSkKLSAgICAgICAgICAgIHJldHVybiBGb250UmFuZ2Vz
KFdURjo6bW92ZShmb250KSk7Ci0gICAgfQotICAgIC8vIFdlIGRpZG4ndCBmaW5kIGEgZm9udC4g
VHJ5IHRvIGZpbmQgYSBzaW1pbGFyIGZvbnQgdXNpbmcgb3VyIG93biBzcGVjaWZpYyBrbm93bGVk
Z2UgYWJvdXQgb3VyIHBsYXRmb3JtLgotICAgIC8vIEZvciBleGFtcGxlIG9uIE9TIFgsIHdlIGtu
b3cgdG8gbWFwIGFueSBmYW1pbGllcyBjb250YWluaW5nIHRoZSB3b3JkcyBBcmFiaWMsIFBhc2h0
bywgb3IgVXJkdSB0byB0aGUKLSAgICAvLyBHZWV6YSBQcm8gZm9udC4KLSAgICByZXR1cm4gRm9u
dFJhbmdlcyhmb250Q2FjaGUoKS5zaW1pbGFyRm9udChkZXNjcmlwdGlvbikpOwotfQotCi1jb25z
dCBGb250UmFuZ2VzJiBGb250R2x5cGhzOjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCB1bnNpZ25lZCBpbmRleCkKLXsKLSAgICBpZiAo
aW5kZXggPCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4g
bV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzW2luZGV4XTsKLQotICAgIEFTU0VSVChpbmRleCA9PSBt
X3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgpKTsKLSAgICBBU1NFUlQoZm9udENhY2hlKCku
Z2VuZXJhdGlvbigpID09IG1fZ2VuZXJhdGlvbik7Ci0KLSAgICBtX3JlYWxpemVkRmFsbGJhY2tS
YW5nZXMuYXBwZW5kKEZvbnRSYW5nZXMoKSk7Ci0gICAgYXV0byYgZm9udFJhbmdlcyA9IG1fcmVh
bGl6ZWRGYWxsYmFja1Jhbmdlcy5sYXN0KCk7Ci0KLSAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAg
IGZvbnRSYW5nZXMgPSByZWFsaXplTmV4dEZhbGxiYWNrKGRlc2NyaXB0aW9uLCBtX2xhc3RSZWFs
aXplZEZhbGxiYWNrSW5kZXgsIG1fZm9udFNlbGVjdG9yLmdldCgpKTsKLSAgICAgICAgaWYgKGZv
bnRSYW5nZXMuaXNOdWxsKCkgJiYgbV9mb250U2VsZWN0b3IpCi0gICAgICAgICAgICBmb250UmFu
Z2VzID0gbV9mb250U2VsZWN0b3ItPmZvbnRSYW5nZXNGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHN0
YW5kYXJkRmFtaWx5KTsKLSAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkpCi0gICAgICAg
ICAgICBmb250UmFuZ2VzID0gRm9udFJhbmdlcyhmb250Q2FjaGUoKS5sYXN0UmVzb3J0RmFsbGJh
Y2tGb250KGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIHJldHVybiBmb250UmFuZ2VzOwotICAgIH0K
LQotICAgIGlmIChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPCBkZXNjcmlwdGlvbi5mYW1p
bHlDb3VudCgpKQotICAgICAgICBmb250UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxsYmFjayhkZXNj
cmlwdGlvbiwgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQo
KSk7Ci0KLSAgICBpZiAoZm9udFJhbmdlcy5pc051bGwoKSAmJiBtX2ZvbnRTZWxlY3Rvcikgewot
ICAgICAgICBBU1NFUlQobV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4ID49IGRlc2NyaXB0aW9u
LmZhbWlseUNvdW50KCkpOwotCi0gICAgICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvckZhbGxiYWNr
SW5kZXggPSBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggLSBkZXNjcmlwdGlvbi5mYW1pbHlD
b3VudCgpOwotICAgICAgICBpZiAoZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRleCA9PSBtX2ZvbnRT
ZWxlY3Rvci0+ZmFsbGJhY2tGb250Q291bnQoKSkKLSAgICAgICAgICAgIHJldHVybiBmb250UmFu
Z2VzOwotICAgICAgICArK21fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleDsKLSAgICAgICAgZm9u
dFJhbmdlcyA9IEZvbnRSYW5nZXMobV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udEF0KGRlc2Ny
aXB0aW9uLCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4KSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZvbnRSYW5nZXM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0luUmFuZ2UoVUNoYXIzMiBj
aGFyYWN0ZXIsIFVDaGFyMzIgbG93ZXJCb3VuZCwgVUNoYXIzMiB1cHBlckJvdW5kKQotewotICAg
IHJldHVybiBjaGFyYWN0ZXIgPj0gbG93ZXJCb3VuZCAmJiBjaGFyYWN0ZXIgPD0gdXBwZXJCb3Vu
ZDsKLX0KLQotc3RhdGljIGJvb2wgc2hvdWxkSWdub3JlUm90YXRpb24oVUNoYXIzMiBjaGFyYWN0
ZXIpCi17Ci0gICAgaWYgKGNoYXJhY3RlciA9PSAweDAwMEE3IHx8IGNoYXJhY3RlciA9PSAweDAw
MEE5IHx8IGNoYXJhY3RlciA9PSAweDAwMEFFKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IGlmIChjaGFyYWN0ZXIgPT0gMHgwMDBCNiB8fCBjaGFyYWN0ZXIgPT0gMHgwMDBCQyB8fCBjaGFy
YWN0ZXIgPT0gMHgwMDBCRCB8fCBjaGFyYWN0ZXIgPT0gMHgwMDBCRSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMDJFNSwgMHgwMDJFQikp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVy
LCAweDAxMTAwLCAweDAxMUZGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAxNDAxLCAweDAx
NjdGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAxODAwLCAweDAxOEZGKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoY2hhcmFjdGVyID09IDB4MDIwMTYgfHwgY2hhcmFjdGVy
ID09IDB4MDIwMjAgfHwgY2hhcmFjdGVyID09IDB4MDIwMjEgfHwgY2hhcmFjdGVyID09IDB4MjAz
MCB8fCBjaGFyYWN0ZXIgPT0gMHgwMjAzMSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBp
ZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjAzQiwgMHgwMjAzRCkgfHwgY2hhcmFjdGVyID09
IDB4MDIwNDIgfHwgY2hhcmFjdGVyID09IDB4MDIwNDQgfHwgY2hhcmFjdGVyID09IDB4MDIwNDcK
LSAgICAgICAgfHwgY2hhcmFjdGVyID09IDB4MDIwNDggfHwgY2hhcmFjdGVyID09IDB4MDIwNDkg
fHwgY2hhcmFjdGVyID09IDB4MjA1MSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
aXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjA2NSwgMHgwMjA2OSkgfHwgaXNJblJhbmdlKGNoYXJh
Y3RlciwgMHgwMjBERCwgMHgwMjBFMCkKLSAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3Rlciwg
MHgwMjBFMiwgMHgwMjBFNCkgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjEwMCwgMHgwMjEx
NykKLSAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjExOSwgMHgwMjEzMSkgfHwg
aXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjEzMywgMHgwMjEzRikpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIxNDUsIDB4MDIxNEEpIHx8
IGNoYXJhY3RlciA9PSAweDAyMTRDIHx8IGNoYXJhY3RlciA9PSAweDAyMTRECi0gICAgICAgIHx8
IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIxNEYsIDB4MDIxOEYpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMzAwLCAweDAyMzA3KSB8
fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMzBDLCAweDAyMzFGKQotICAgICAgICB8fCBpc0lu
UmFuZ2UoY2hhcmFjdGVyLCAweDAyMzIyLCAweDAyMzJCKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVy
LCAweDAyMzdELCAweDAyMzlBKQotICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAy
M0I0LCAweDAyM0I2KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyM0JBLCAweDAyM0NGKQot
ICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyM0QxLCAweDAyM0RCKSB8fCBpc0lu
UmFuZ2UoY2hhcmFjdGVyLCAweDAyM0UyLCAweDAyNEZGKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjVBMCwgMHgwMjYxOSkgfHwgaXNJ
blJhbmdlKGNoYXJhY3RlciwgMHgwMjYyMCwgMHgwMjc2NykKLSAgICAgICAgfHwgaXNJblJhbmdl
KGNoYXJhY3RlciwgMHgwMjc3NiwgMHgwMjc5MykgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgw
MkIxMiwgMHgwMkIyRikKLSAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMkI0RCwg
MHgwMkJGRikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMkU4MCwgMHgwMzAwNykpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGNoYXJhY3RlciA9PSAweDAzMDEyIHx8IGNoYXJh
Y3RlciA9PSAweDAzMDEzIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDMwMjAsIDB4MDMwMkYp
Ci0gICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDMwMzEsIDB4MDMwOUYpIHx8IGlz
SW5SYW5nZShjaGFyYWN0ZXIsIDB4MDMwQTEsIDB4MDMwRkIpCi0gICAgICAgIHx8IGlzSW5SYW5n
ZShjaGFyYWN0ZXIsIDB4MDMwRkQsIDB4MEE0Q0YpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBBODQwLCAweDBBODdGKSB8fCBpc0luUmFu
Z2UoY2hhcmFjdGVyLCAweDBBOTYwLCAweDBBOTdGKQotICAgICAgICB8fCBpc0luUmFuZ2UoY2hh
cmFjdGVyLCAweDBBQzAwLCAweDBEN0ZGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBFMDAw
LCAweDBGQUZGKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoaXNJblJhbmdlKGNo
YXJhY3RlciwgMHgwRkUxMCwgMHgwRkUxRikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkUz
MCwgMHgwRkU0OCkKLSAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkU1MCwgMHgw
RkU1NykgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkU1RiwgMHgwRkU2MikKLSAgICAgICAg
fHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkU2NywgMHgwRkU2RikpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZGMDEsIDB4MEZGMDcp
IHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZGMEEsIDB4MEZGMEMpCi0gICAgICAgIHx8IGlz
SW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZGMEUsIDB4MEZGMTkpIHx8IGNoYXJhY3RlciA9PSAweDBG
RjFCIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZGMUYsIDB4MEZGM0EpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjaGFyYWN0ZXIgPT0gMHgwRkYzQyB8fCBjaGFyYWN0ZXIg
PT0gMHgwRkYzRSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoaXNJblJhbmdlKGNo
YXJhY3RlciwgMHgwRkY0MCwgMHgwRkY1QSkgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkZF
MCwgMHgwRkZFMikKLSAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkZFNCwgMHgw
RkZFNykgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkZGMCwgMHgwRkZGOCkKLSAgICAgICAg
fHwgY2hhcmFjdGVyID09IDB4MEZGRkQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYg
KGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MTMwMDAsIDB4MTM0MkYpIHx8IGlzSW5SYW5nZShjaGFy
YWN0ZXIsIDB4MUIwMDAsIDB4MUIwRkYpCi0gICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIs
IDB4MUQwMDAsIDB4MUQxRkYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MUQzMDAsIDB4MUQz
N0YpCi0gICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MUYwMDAsIDB4MUY2NEYpIHx8
IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MUY2ODAsIDB4MUY3N0YpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAKLSAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgyMDAwMCwgMHgyRkZG
RCkgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgzMDAwMCwgMHgzRkZGRCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci1zdGF0aWMgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNKS0NoYXJhY3RlcldpdGhvdXRTeW50aGV0
aWNJdGFsaWMoVUNoYXIzMiBjaGFyYWN0ZXIsIEdseXBoRGF0YSYgZGF0YSkKLXsKLSAgICBHbHlw
aERhdGEgbm9uSXRhbGljRGF0YSA9IGRhdGEuZm9udC0+bm9uU3ludGhldGljSXRhbGljRm9udCgp
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKLSAgICBpZiAobm9uSXRhbGljRGF0
YS5mb250KQotICAgICAgICByZXR1cm4gbm9uSXRhbGljRGF0YTsKLSAgICByZXR1cm4gZGF0YTsK
LX0KLSNlbmRpZgotICAgIAotc3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb25DSktDaGFy
YWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihVQ2hhcjMyIGNoYXJhY3RlciwgTm9uQ0pLR2x5cGhP
cmllbnRhdGlvbiBvcmllbnRhdGlvbiwgY29uc3QgR2x5cGhEYXRhJiBkYXRhKQotewotICAgIGlm
IChvcmllbnRhdGlvbiA9PSBOb25DSktHbHlwaE9yaWVudGF0aW9uVXByaWdodCB8fCBzaG91bGRJ
Z25vcmVSb3RhdGlvbihjaGFyYWN0ZXIpKSB7Ci0gICAgICAgIEdseXBoRGF0YSB1cHJpZ2h0RGF0
YSA9IGRhdGEuZm9udC0+dXByaWdodE9yaWVudGF0aW9uRm9udCgpLT5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIoY2hhcmFjdGVyKTsKLSAgICAgICAgLy8gSWYgdGhlIGdseXBocyBhcmUgdGhlIHNhbWUs
IHRoZW4gd2Uga25vdyB3ZSBjYW4ganVzdCB1c2UgdGhlIGhvcml6b250YWwgZ2x5cGggcm90YXRl
ZCB2ZXJ0aWNhbGx5IHRvIGJlIHVwcmlnaHQuCi0gICAgICAgIGlmIChkYXRhLmdseXBoID09IHVw
cmlnaHREYXRhLmdseXBoKQotICAgICAgICAgICAgcmV0dXJuIGRhdGE7Ci0gICAgICAgIC8vIFRo
ZSBnbHlwaHMgYXJlIGRpc3RpbmN0LCBtZWFuaW5nIHRoYXQgdGhlIGZvbnQgaGFzIGEgdmVydGlj
YWwtcmlnaHQgZ2x5cGggYmFrZWQgaW50byBpdC4gV2UgY2FuJ3QgdXNlIHRoYXQKLSAgICAgICAg
Ly8gZ2x5cGgsIHNvIHdlIGZhbGwgYmFjayB0byB0aGUgdXByaWdodCBkYXRhIGFuZCB1c2UgdGhl
IGhvcml6b250YWwgZ2x5cGguCi0gICAgICAgIGlmICh1cHJpZ2h0RGF0YS5mb250KQotICAgICAg
ICAgICAgcmV0dXJuIHVwcmlnaHREYXRhOwotICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb24gPT0g
Tm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQpIHsKLSAgICAgICAgR2x5cGhEYXRh
IHZlcnRpY2FsUmlnaHREYXRhID0gZGF0YS5mb250LT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25G
b250KCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwotICAgICAgICAvLyBJZiB0
aGUgZ2x5cGhzIGFyZSBkaXN0aW5jdCwgd2Ugd2lsbCBtYWtlIHRoZSBhc3N1bXB0aW9uIHRoYXQg
dGhlIGZvbnQgaGFzIGEgdmVydGljYWwtcmlnaHQgZ2x5cGggYmFrZWQKLSAgICAgICAgLy8gaW50
byBpdC4KLSAgICAgICAgaWYgKGRhdGEuZ2x5cGggIT0gdmVydGljYWxSaWdodERhdGEuZ2x5cGgp
Ci0gICAgICAgICAgICByZXR1cm4gZGF0YTsKLSAgICAgICAgLy8gVGhlIGdseXBocyBhcmUgaWRl
bnRpY2FsLCBtZWFuaW5nIHRoYXQgd2Ugc2hvdWxkIGp1c3QgdXNlIHRoZSBob3Jpem9udGFsIGds
eXBoLgotICAgICAgICBpZiAodmVydGljYWxSaWdodERhdGEuZm9udCkKLSAgICAgICAgICAgIHJl
dHVybiB2ZXJ0aWNhbFJpZ2h0RGF0YTsKLSAgICB9Ci0gICAgcmV0dXJuIGRhdGE7Ci19Ci0KLUds
eXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyIGMs
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQp
Ci17Ci0gICAgLy8gU3lzdGVtIGZhbGxiYWNrIGlzIGNoYXJhY3Rlci1kZXBlbmRlbnQuCi0gICAg
YXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9u
LCAwKTsKLSAgICBhdXRvKiBvcmlnaW5hbEZvbnQgPSBwcmltYXJ5UmFuZ2VzLmZvbnRGb3JDaGFy
YWN0ZXIoYyk7Ci0gICAgaWYgKCFvcmlnaW5hbEZvbnQpCi0gICAgICAgIG9yaWdpbmFsRm9udCA9
ICZwcmltYXJ5UmFuZ2VzLmZvbnRGb3JGaXJzdFJhbmdlKCk7Ci0KLSAgICBSZWZQdHI8Rm9udD4g
c3lzdGVtRmFsbGJhY2tGb250ID0gb3JpZ2luYWxGb250LT5zeXN0ZW1GYWxsYmFja0ZvbnRGb3JD
aGFyYWN0ZXIoYywgZGVzY3JpcHRpb24sIG1faXNGb3JQbGF0Zm9ybUZvbnQpOwotICAgIGlmICgh
c3lzdGVtRmFsbGJhY2tGb250KQotICAgICAgICByZXR1cm4gR2x5cGhEYXRhKCk7Ci0KLSAgICBp
ZiAoc3lzdGVtRmFsbGJhY2tGb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZl
cnRpY2FsICYmICFzeXN0ZW1GYWxsYmFja0ZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkgJiYgRm9u
dENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCi0gICAgICAgIHZhcmlhbnQgPSBC
cm9rZW5JZGVvZ3JhcGhWYXJpYW50OwotCi0gICAgR2x5cGhEYXRhIGZhbGxiYWNrR2x5cGhEYXRh
OwotICAgIGlmICh2YXJpYW50ID09IE5vcm1hbFZhcmlhbnQpCi0gICAgICAgIGZhbGxiYWNrR2x5
cGhEYXRhID0gc3lzdGVtRmFsbGJhY2tGb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7Ci0g
ICAgZWxzZQotICAgICAgICBmYWxsYmFja0dseXBoRGF0YSA9IHN5c3RlbUZhbGxiYWNrRm9udC0+
dmFyaWFudEZvbnQoZGVzY3JpcHRpb24sIHZhcmlhbnQpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIo
Yyk7Ci0KLSAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50ICYmIGZhbGxiYWNrR2x5cGhE
YXRhLmZvbnQpIHsKLSAgICAgICAgaWYgKCFGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5
bWJvbChjKSAmJiBmYWxsYmFja0dseXBoRGF0YS5mb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRh
dGlvbigpID09IFZlcnRpY2FsICYmICFmYWxsYmFja0dseXBoRGF0YS5mb250LT5pc1RleHRPcmll
bnRhdGlvbkZhbGxiYWNrKCkpCi0gICAgICAgICAgICBmYWxsYmFja0dseXBoRGF0YSA9IGdseXBo
RGF0YUZvck5vbkNKS0NoYXJhY3RlcldpdGhHbHlwaE9yaWVudGF0aW9uKGMsIGRlc2NyaXB0aW9u
Lm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSwgZmFsbGJhY2tHbHlwaERhdGEpOwotICAgIH0KLQot
ICAgIC8vIEtlZXAgdGhlIHN5c3RlbSBmYWxsYmFjayBmb250cyB3ZSB1c2UgYWxpdmUuCi0gICAg
aWYgKGZhbGxiYWNrR2x5cGhEYXRhLmdseXBoKQotICAgICAgICBtX3N5c3RlbUZhbGxiYWNrRm9u
dFNldC5hZGQoc3lzdGVtRmFsbGJhY2tGb250LnJlbGVhc2UoKSk7Ci0KLSAgICByZXR1cm4gZmFs
bGJhY2tHbHlwaERhdGE7Ci19Ci0KLUdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JW
YXJpYW50KFVDaGFyMzIgYywgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9u
dFZhcmlhbnQgdmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCkKLXsKLSAgICB3aGlsZSAo
dHJ1ZSkgewotICAgICAgICBhdXRvJiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2Vz
QXQoZGVzY3JpcHRpb24sIGZhbGxiYWNrSW5kZXgrKyk7Ci0gICAgICAgIGlmIChmb250UmFuZ2Vz
LmlzTnVsbCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGF1dG8qIGZvbnQgPSBmb250
UmFuZ2VzLmZvbnRGb3JDaGFyYWN0ZXIoYyk7Ci0gICAgICAgIEdseXBoRGF0YSBkYXRhID0gZm9u
dCA/IGZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKSA6IEdseXBoRGF0YSgpOwotICAgICAg
ICBpZiAoZGF0YS5mb250KSB7Ci0gICAgICAgICAgICAvLyBUaGUgdmFyaWFudEZvbnQgZnVuY3Rp
b24gc2hvdWxkIG5vdCBub3JtYWxseSByZXR1cm4gMC4KLSAgICAgICAgICAgIC8vIEJ1dCBpZiBp
dCBkb2VzLCB3ZSB3aWxsIGp1c3QgcmVuZGVyIHRoZSBjYXBpdGFsIGxldHRlciBiaWcuCi0gICAg
ICAgICAgICBSZWZQdHI8Rm9udD4gdmFyaWFudEZvbnQgPSBkYXRhLmZvbnQtPnZhcmlhbnRGb250
KGRlc2NyaXB0aW9uLCB2YXJpYW50KTsKLSAgICAgICAgICAgIGlmICghdmFyaWFudEZvbnQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7Ci0KLSAgICAgICAgICAgIHJldHVybiB2YXJpYW50
Rm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIGdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKGMsIGRlc2NyaXB0aW9uLCB2YXJpYW50
KTsKLX0KLQotR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQo
VUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQotewotICAgIGNv
bnN0IHVuc2lnbmVkIHBhZ2VOdW1iZXIgPSBjIC8gR2x5cGhQYWdlOjpzaXplOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBmYWxsYmFja0luZGV4ID0gMDsgdHJ1ZTsgKytmYWxsYmFja0luZGV4KSB7Ci0g
ICAgICAgIGF1dG8mIGZvbnRSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlw
dGlvbiwgZmFsbGJhY2tJbmRleCk7Ci0gICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGF1dG8qIGZvbnQgPSBmb250UmFuZ2VzLmZvbnRG
b3JDaGFyYWN0ZXIoYyk7Ci0gICAgICAgIGF1dG8qIHBhZ2UgPSBmb250ID8gZm9udC0+Z2x5cGhQ
YWdlKHBhZ2VOdW1iZXIpIDogbnVsbHB0cjsKLSAgICAgICAgaWYgKCFwYWdlKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIEdseXBoRGF0YSBkYXRhID0gcGFnZS0+Z2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKGMpOwotICAgICAgICBpZiAoZGF0YS5mb250KSB7Ci0gICAgICAgICAgICBpZiAo
ZGF0YS5mb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFk
YXRhLmZvbnQtPmlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkgewotICAgICAgICAgICAgICAg
IGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmll
bnRhdGlvbihjLCBkZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCksIGRhdGEpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKCFkYXRhLmZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBicm9rZW4gaWRlb2dyYXBoIGZvbnQgZGF0
YS4gVGhlIGJyb2tlbiBpZGVvZ3JhcGggZm9udCB3aWxsIHVzZSB0aGUgaG9yaXpvbnRhbCB3aWR0
aCBvZiBnbHlwaHMKLSAgICAgICAgICAgICAgICAgICAgLy8gdG8gbWFrZSBzdXJlIHlvdSBnZXQg
YSBzcXVhcmUgKGV2ZW4gZm9yIGJyb2tlbiBnbHlwaHMgbGlrZSBzeW1ib2xzIHVzZWQgZm9yIHB1
bmN0dWF0aW9uKS4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdseXBoRGF0YUZvclZhcmlh
bnQoYywgZGVzY3JpcHRpb24sIEJyb2tlbklkZW9ncmFwaFZhcmlhbnQsIGZhbGxiYWNrSW5kZXgp
OwotICAgICAgICAgICAgICAgIH0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAgICAgICAgICAg
ICBpZiAoZGF0YS5mb250LT5wbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaERhdGFGb3JDSktDaGFyYWN0ZXJXaXRob3V0U3lu
dGhldGljSXRhbGljKGMsIGRhdGEpOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHJldHVybiBkYXRhOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGdseXBoRGF0
YUZvclN5c3RlbUZhbGxiYWNrKGMsIGRlc2NyaXB0aW9uLCBOb3JtYWxWYXJpYW50KTsKLX0KLQot
c3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGdseXBoUGFnZUZyb21Gb250UmFuZ2VzKHVuc2lnbmVk
IHBhZ2VOdW1iZXIsIGNvbnN0IEZvbnRSYW5nZXMmIGZvbnRSYW5nZXMpCi17Ci0gICAgY29uc3Qg
Rm9udCogZm9udCA9IG51bGxwdHI7Ci0gICAgVUNoYXIzMiBwYWdlUmFuZ2VGcm9tID0gcGFnZU51
bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKLSAgICBVQ2hhcjMyIHBhZ2VSYW5nZVRvID0gcGFnZVJh
bmdlRnJvbSArIEdseXBoUGFnZTo6c2l6ZSAtIDE7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGZvbnRSYW5nZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byYgcmFuZ2UgPSBmb250
UmFuZ2VzLnJhbmdlQXQoaSk7Ci0gICAgICAgIGlmIChyYW5nZS50bygpKSB7Ci0gICAgICAgICAg
ICBpZiAocmFuZ2UuZnJvbSgpIDw9IHBhZ2VSYW5nZUZyb20gJiYgcGFnZVJhbmdlVG8gPD0gcmFu
Z2UudG8oKSkKLSAgICAgICAgICAgICAgICBmb250ID0gJnJhbmdlLmZvbnQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghZm9udCkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24o
KSA9PSBWZXJ0aWNhbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gY29u
c3RfY2FzdDxHbHlwaFBhZ2UqPihmb250LT5nbHlwaFBhZ2UocGFnZU51bWJlcikpOwotfQotCi1H
bHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29u
c3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkKLXsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCh2YXJpYW50ICE9IEF1dG9W
YXJpYW50KTsKLQotICAgIGlmICh2YXJpYW50ICE9IE5vcm1hbFZhcmlhbnQpCi0gICAgICAgIHJl
dHVybiBnbHlwaERhdGFGb3JWYXJpYW50KGMsIGRlc2NyaXB0aW9uLCB2YXJpYW50LCAwKTsKLQot
ICAgIGNvbnN0IHVuc2lnbmVkIHBhZ2VOdW1iZXIgPSBjIC8gR2x5cGhQYWdlOjpzaXplOwotCi0g
ICAgUmVmUHRyPEdseXBoUGFnZT4mIGNhY2hlZFBhZ2UgPSBwYWdlTnVtYmVyID8gbV9jYWNoZWRQ
YWdlcy5hZGQocGFnZU51bWJlciwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlIDogbV9jYWNoZWRQ
YWdlWmVybzsKLSAgICBpZiAoIWNhY2hlZFBhZ2UpCi0gICAgICAgIGNhY2hlZFBhZ2UgPSBnbHlw
aFBhZ2VGcm9tRm9udFJhbmdlcyhwYWdlTnVtYmVyLCByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChk
ZXNjcmlwdGlvbiwgMCkpOwotCi0gICAgR2x5cGhEYXRhIGdseXBoRGF0YSA9IGNhY2hlZFBhZ2Ug
PyBjYWNoZWRQYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYykgOiBHbHlwaERhdGEoKTsKLSAg
ICBpZiAoIWdseXBoRGF0YS5nbHlwaCkgewotICAgICAgICBpZiAoIWNhY2hlZFBhZ2UpCi0gICAg
ICAgICAgICBjYWNoZWRQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JNaXhlZEZvbnRzKCk7Ci0g
ICAgICAgIGVsc2UgaWYgKGNhY2hlZFBhZ2UtPmlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICBj
YWNoZWRQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVDb3B5Rm9yTWl4ZWRGb250cygqY2FjaGVkUGFn
ZSk7Ci0KLSAgICAgICAgZ2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChjLCBk
ZXNjcmlwdGlvbik7Ci0gICAgICAgIGNhY2hlZFBhZ2UtPnNldEdseXBoRGF0YUZvckNoYXJhY3Rl
cihjLCBnbHlwaERhdGEuZ2x5cGgsIGdseXBoRGF0YS5mb250KTsKLSAgICB9Ci0gICAgcmV0dXJu
IGdseXBoRGF0YTsKLX0KLQotdm9pZCBGb250R2x5cGhzOjpwcnVuZVN5c3RlbUZhbGxiYWNrcygp
Ci17Ci0gICAgaWYgKG1fc3lzdGVtRmFsbGJhY2tGb250U2V0LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIC8vIE11dGFibGUgZ2x5cGggcGFnZXMgbWF5IHJlZmVyZW5jZSBmYWxsYmFj
ayBmb250cy4KLSAgICBpZiAobV9jYWNoZWRQYWdlWmVybyAmJiAhbV9jYWNoZWRQYWdlWmVyby0+
aXNJbW11dGFibGUoKSkKLSAgICAgICAgbV9jYWNoZWRQYWdlWmVybyA9IG51bGxwdHI7Ci0gICAg
bV9jYWNoZWRQYWdlcy5yZW1vdmVJZihbXShkZWNsdHlwZShtX2NhY2hlZFBhZ2VzKTo6S2V5VmFs
dWVQYWlyVHlwZSYga2V5QW5kVmFsdWUpIHsKLSAgICAgICAgcmV0dXJuICFrZXlBbmRWYWx1ZS52
YWx1ZS0+aXNJbW11dGFibGUoKTsKLSAgICB9KTsKLSAgICBtX3N5c3RlbUZhbGxiYWNrRm9udFNl
dC5jbGVhcigpOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250R2x5cGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udEdseXBocy5oCShyZXZpc2lvbiAxODAyNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTAsIDIwMTMtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIEZvbnRHbHlwaHNfaAotI2RlZmlu
ZSBGb250R2x5cGhzX2gKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250UmFuZ2Vz
LmgiCi0jaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdlLmgiCi0j
aW5jbHVkZSAiV2lkdGhDYWNoZS5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KLQotI2lmIFBMQVRGT1JNKElPUykKLSNpbmNsdWRlICJXZWJD
b3JlVGhyZWFkLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFw
aGljc0NvbnRleHQ7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgRm9udERlc2NyaXB0aW9uOwotY2xh
c3MgRm9udFBsYXRmb3JtRGF0YTsKLWNsYXNzIEZvbnRTZWxlY3RvcjsKLQotY2xhc3MgRm9udEds
eXBocyA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRHbHlwaHM+IHsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShGb250R2x5cGhzKTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZvbnRHbHlwaHM+
IGNyZWF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSB7IHJldHVybiBh
ZG9wdFJlZigqbmV3IEZvbnRHbHlwaHMoZm9udFNlbGVjdG9yKSk7IH0KLSAgICBzdGF0aWMgUmVm
PEZvbnRHbHlwaHM+IGNyZWF0ZUZvclBsYXRmb3JtRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRh
JiBwbGF0Zm9ybURhdGEpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRm9udEdseXBocyhwbGF0Zm9y
bURhdGEpKTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgfkZvbnRHbHlwaHMoKTsKLQotICAgIGJv
b2wgaXNGb3JQbGF0Zm9ybUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2lzRm9yUGxhdGZvcm1Gb250
OyB9Ci0KLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50KTsKLQotICAgIGJvb2wgaXNGaXhlZFBpdGNo
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwotICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goY29uc3Qg
Rm9udERlc2NyaXB0aW9uJik7Ci0KLSAgICBib29sIGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgY29u
c3Q7Ci0KLSAgICBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIHsgcmV0dXJuIG1fZm9udFNl
bGVjdG9yLmdldCgpOyB9Ci0gICAgLy8gRklYTUU6IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBj
b21iaW5lIGZvbnRTZWxlY3RvclZlcnNpb24gYW5kIGdlbmVyYXRpb24uCi0gICAgdW5zaWduZWQg
Zm9udFNlbGVjdG9yVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNlbGVjdG9yVmVyc2lv
bjsgfQotICAgIHVuc2lnbmVkIGdlbmVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2dlbmVyYXRp
b247IH0KLQotICAgIFdpZHRoQ2FjaGUmIHdpZHRoQ2FjaGUoKSB7IHJldHVybiBtX3dpZHRoQ2Fj
aGU7IH0KLSAgICBjb25zdCBXaWR0aENhY2hlJiB3aWR0aENhY2hlKCkgY29uc3QgeyByZXR1cm4g
bV93aWR0aENhY2hlOyB9Ci0KLSAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250UmFuZ2VzJiByZWFs
aXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCB1bnNpZ25lZCBmYWxs
YmFja0luZGV4KTsKLQotICAgIHZvaWQgcHJ1bmVTeXN0ZW1GYWxsYmFja3MoKTsKLQotcHJpdmF0
ZToKLSAgICBGb250R2x5cGhzKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7Ci0gICAgRm9udEds
eXBocyhjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci0KLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRh
Rm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udFZh
cmlhbnQpOwotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb3JtYWxWYXJpYW50KFVDaGFyMzIs
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JWYXJp
YW50KFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50LCB1bnNpZ25l
ZCBmYWxsYmFja0luZGV4KTsKLQotICAgIFZlY3RvcjxGb250UmFuZ2VzLCAxPiBtX3JlYWxpemVk
RmFsbGJhY2tSYW5nZXM7Ci0gICAgdW5zaWduZWQgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4
IHsgMCB9OwotCi0gICAgUmVmUHRyPEdseXBoUGFnZT4gbV9jYWNoZWRQYWdlWmVybzsKLSAgICBI
YXNoTWFwPGludCwgUmVmUHRyPEdseXBoUGFnZT4+IG1fY2FjaGVkUGFnZXM7Ci0KLSAgICBIYXNo
U2V0PFJlZlB0cjxGb250Pj4gbV9zeXN0ZW1GYWxsYmFja0ZvbnRTZXQ7Ci0KLSAgICBjb25zdCBG
b250KiBtX2NhY2hlZFByaW1hcnlGb250OwotICAgIFJlZlB0cjxGb250U2VsZWN0b3I+IG1fZm9u
dFNlbGVjdG9yOwotCi0gICAgV2lkdGhDYWNoZSBtX3dpZHRoQ2FjaGU7Ci0KLSAgICB1bnNpZ25l
ZCBtX2ZvbnRTZWxlY3RvclZlcnNpb247Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9nZW5lcmF0aW9u
OwotICAgIFBpdGNoIG1fcGl0Y2ggeyBVbmtub3duUGl0Y2ggfTsKLSAgICBib29sIG1faXNGb3JQ
bGF0Zm9ybUZvbnQgeyBmYWxzZSB9OwotfTsKLQotaW5saW5lIGJvb2wgRm9udEdseXBoczo6aXNG
aXhlZFBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCi17Ci0gICAgaWYg
KG1fcGl0Y2ggPT0gVW5rbm93blBpdGNoKQotICAgICAgICBkZXRlcm1pbmVQaXRjaChkZXNjcmlw
dGlvbik7Ci0gICAgcmV0dXJuIG1fcGl0Y2ggPT0gRml4ZWRQaXRjaDsKLX07Ci0KLWlubGluZSBj
b25zdCBGb250JiBGb250R2x5cGhzOjpwcmltYXJ5Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFt
X2NhY2hlZFByaW1hcnlGb250KSB7Ci0gICAgICAgIGF1dG8mIHByaW1hcnlSYW5nZXMgPSByZWFs
aXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7Ci0gICAgICAgIG1fY2FjaGVkUHJp
bWFyeUZvbnQgPSBwcmltYXJ5UmFuZ2VzLmZvbnRGb3JDaGFyYWN0ZXIoJyAnKTsKLSAgICAgICAg
aWYgKCFtX2NhY2hlZFByaW1hcnlGb250KQotICAgICAgICAgICAgbV9jYWNoZWRQcmltYXJ5Rm9u
dCA9ICZwcmltYXJ5UmFuZ2VzLmZvbnRGb3JGaXJzdFJhbmdlKCk7Ci0gICAgfQotICAgIHJldHVy
biAqbV9jYWNoZWRQcmltYXJ5Rm9udDsKLX0KLQotfQotCi0jZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246829</attachid>
            <date>2015-02-18 11:30:58 -0800</date>
            <delta_ts>2015-02-18 12:09:01 -0800</delta_ts>
            <desc>another</desc>
            <filename>rename-font-glyphs-4.patch</filename>
            <type>text/plain</type>
            <size>78307</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE1LTAyLTE4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgRm9udEdseXBocwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNzU0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSXRzIHB1cnBv
c2UgaXMgdG8gb3duIHRvIGNyZWF0ZSBhbmQgb3duIHRoZSByZWFsaXplZCBGb250IGluc3RhbmNl
cyBhbmQgdGhlIGFzc29jaWF0ZWQgY2FjaGVzLgorCisgICAgICAgIEZvbnRHbHlwaHMgLT4gRm9u
dENhc2NhZGVGb250cworCiAyMDE1LTAyLTE4ICBUaW1vdGh5IEhvcnRvbiAgPHRpbW90aHlfaG9y
dG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgbW9yZSByZWZlcmVuY2VzIHRvIFdlYkNv
cmUuZXhwLmluCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTgwMjY0KQorKysg
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwNzEsMTAg
KzIwNzEsMTAgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlRm9udHMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGZWF0dXJlU2V0dGluZ3MuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udEdlbmVyaWNGYW1pbGllcy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250R2x5cGhzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR2VvbWV0cnlVdGlsaXRpZXMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4MDI2NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTgyMzksOSArODIzOSw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xGb250LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXEZvbnRDYWNoZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FzY2FkZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FzY2FkZUZvbnRzLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnREZXNjcmlwdGlv
bi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xG
b250R2VuZXJpY0ZhbWlsaWVzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXEZvbnRHbHlwaHMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEZlYXR1cmVTZXR0aW5ncy5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250UGxhdGZvcm1EYXRh
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZv
bnRSYW5nZXMuY3BwIiAvPgpAQCAtMTk3NzYsOSArMTk3NzYsOSBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhY2hlLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FzY2FkZS5oIiAvPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGVGb250
cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9u
dERlc2NyaXB0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xGb250R2VuZXJpY0ZhbWlsaWVzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250R2x5cGhzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250RmVhdHVyZVNldHRpbmdzLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250TWV0cmljcy5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udFBs
YXRmb3JtRGF0YS5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTgwMjY0KQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00
NzI0LDggKzQ3MjQsOCBAQAogCQlCMkMzREE2NDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MzBE
MDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi87IH07CiAJCUIyQzNEQTY1MEQwMDZDRDYwMEVG
NkYyNiAvKiBGb250LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMkMzREE1NDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTY2MEQwMDZDRDYwMEVGNkYy
NiAvKiBGb250RGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyQzNEQTU1MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250RGVzY3JpcHRpb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCMkMz
REE2NzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1NjBEMDA2Q0Q2MDBFRjZGMjYgLyog
Rm9udEdseXBocy5jcHAgKi87IH07Ci0JCUIyQzNEQTY4MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
R2x5cGhzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkMzREE1NzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUIyQzNEQTY3MEQwMDZDRDYwMEVGNkYy
NiAvKiBGb250Q2FzY2FkZUZvbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyQzNEQTU2MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZUZv
bnRzLmNwcCAqLzsgfTsKKwkJQjJDM0RBNjgwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRl
Rm9udHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
QzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZUZvbnRzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNkIwRDAwNkNENjAw
RUY2RjI2IC8qIEZvbnRTZWxlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjJDM0RBNUEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRTZWxlY3Rvci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQzNE
QTZDMEQwMDZDRDYwMEVGNkYyNiAvKiBHbHlwaEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNUIwRDAwNkNENjAwRUY2RjI2IC8qIEds
eXBoQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQjJDOTZEOEQwQjNBRjJCNzAwNUU4MEVDIC8qIEpTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkM5NkQ4QzBC
M0FGMkI3MDA1RTgwRUMgLyogSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcCAqLzsgfTsKQEAgLTEyMTI1
LDggKzEyMTI1LDggQEAKIAkJQjJDM0RBNTMwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCMkMzREE1NDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMkMzREE1NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udERlc2NyaXB0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250RGVzY3JpcHRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8q
IEZvbnRHbHlwaHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZv
bnRHbHlwaHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkMzREE1NzBEMDA2
Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRm9udEdseXBocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkMzREE1
NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGVGb250cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENhc2NhZGVGb250cy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUIyQzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2Fk
ZUZvbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250Q2FzY2FkZUZv
bnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTVBMEQwMDZDRDYwMEVG
NkYyNiAvKiBGb250U2VsZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZvbnRTZWxlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzREE1QjBE
MDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdseXBoQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIy
Qzk2RDhDMEIzQUYyQjcwMDVFODBFQyAvKiBKU1NWR1BhdGhTZWdDdXN0b20uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHUGF0aFNlZ0N1c3RvbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDQ5NCw4ICsyMDQ5NCw2IEBACiAJCQkJQjI3
NTM1MzgwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmNwcCAqLywKIAkJCQlCMjc1MzUzOTBCMDUz
ODE0MDAyQ0U2NEYgLyogQ29sb3IuaCAqLywKIAkJCQk5MzgyREY1NzEwQThENUM5MDA5MjU2NTIg
LyogQ29sb3JTcGFjZS5oICovLAotCQkJCUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
Q2FzY2FkZS5jcHAgKi8sCi0JCQkJQjJDM0RBNTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNj
YWRlLmggKi8sCiAJCQkJMkQyRkMwNTQxNDYwQ0Q2RjAwMjYzNjMzIC8qIENyb3NzZmFkZUdlbmVy
YXRlZEltYWdlLmNwcCAqLywKIAkJCQkyRDJGQzA1NTE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3Nm
YWRlR2VuZXJhdGVkSW1hZ2UuaCAqLywKIAkJCQlBOENCNDEwMjBFODVCOEE1MDAzMkM0RjAgLyog
RGFzaEFycmF5LmggKi8sCkBAIC0yMDUyNCwxNCArMjA1MjIsMTYgQEAKIAkJCQlCQ0I5MkQ0RTEy
OTM1NTBCMDBDODM4N0YgLyogRm9udEJhc2VsaW5lLmggKi8sCiAJCQkJQjJDM0RBNTEwRDAwNkNE
NjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgKi8sCiAJCQkJQjJDM0RBNTIwRDAwNkNENjAwRUY2
RjI2IC8qIEZvbnRDYWNoZS5oICovLAorCQkJCUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBG
b250Q2FzY2FkZS5jcHAgKi8sCisJCQkJQjJDM0RBNTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRD
YXNjYWRlLmggKi8sCisJCQkJQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRl
Rm9udHMuY3BwICovLAorCQkJCUIyQzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2Fk
ZUZvbnRzLmggKi8sCiAJCQkJMzdBQ0NFNjIwREEyQUE5NjAwODlFNjAyIC8qIEZvbnREZXNjcmlw
dGlvbi5jcHAgKi8sCiAJCQkJQjJDM0RBNTUwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnREZXNjcmlw
dGlvbi5oICovLAogCQkJCTRBNkU5RkM1MTNDMTdENTcwMDQ2QTdGOCAvKiBGb250RmVhdHVyZVNl
dHRpbmdzLmNwcCAqLywKIAkJCQk0QTZFOUZDNjEzQzE3RDU3MDA0NkE3RjggLyogRm9udEZlYXR1
cmVTZXR0aW5ncy5oICovLAogCQkJCUU0NEVFM0E2MTc1NzZFNTUwMEVFRThDRiAvKiBGb250R2Vu
ZXJpY0ZhbWlsaWVzLmNwcCAqLywKIAkJCQlFNDRFRTNBNzE3NTc2RTU1MDBFRUU4Q0YgLyogRm9u
dEdlbmVyaWNGYW1pbGllcy5oICovLAotCQkJCUIyQzNEQTU2MEQwMDZDRDYwMEVGNkYyNiAvKiBG
b250R2x5cGhzLmNwcCAqLywKLQkJCQlCMkMzREE1NzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEds
eXBocy5oICovLAogCQkJCTA4NDU2ODA3MTJCOTBEQTYwMDk2MEE5RiAvKiBGb250TWV0cmljcy5o
ICovLAogCQkJCUY3QTAzNEMzMTI2QkY2QkUwMDdEQzE5RSAvKiBGb250T3JpZW50YXRpb24uaCAq
LywKIAkJCQk4NEI2MjY4NDEzMzEzOEY5MDA5NUE0ODkgLyogRm9udFBsYXRmb3JtRGF0YS5jcHAg
Ki8sCkBAIC0yNDQxNSw3ICsyNDQxNSw3IEBACiAJCQkJQjJBRkZDN0UwRDAwQTVDMTAwMzAwNzRE
IC8qIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTY2
MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250RGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTRBNkU5RkM4MTNDMTdENTcwMDQ2QTdGOCAvKiBGb250RmVhdHVyZVNldHRpbmdzLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlCMkMzREE2ODBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQjJDM0RBNjgwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRl
Rm9udHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQwOUVCREI2MTZCN0VFQTMwMENCQTNGQyAvKiBG
b250TG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODQ1NjgwODEyQjkwREE2MDA5NjBBOUYg
LyogRm9udE1ldHJpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUY3QTAzNEM0MTI2QkY2QkUwMDdE
QzE5RSAvKiBGb250T3JpZW50YXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjc4OTcsNyArMjc4
OTcsNyBAQAogCQkJCTM3QUNDRjY5MERBNDE0RTcwMDg5RTYwMiAvKiBGb250RGVzY3JpcHRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEE2RTlGQzcxM0MxN0Q1NzAwNDZBN0Y4IC8qIEZvbnRG
ZWF0dXJlU2V0dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ0RUUzQTgxNzU3N0VCRDAw
RUVFOENGIC8qIEZvbnRHZW5lcmljRmFtaWxpZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjJD
M0RBNjcwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQjJDM0RBNjcwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlRm9udHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkQ5NkM5OTcxOTgyRkJERjAwODZFMTU2IC8qIEZvbnRMb2FkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjJBRkZDODAwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYXNj
YWRlQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NEI2MjY4NTEzMzEzOEY5MDA5NUE0ODkg
LyogRm9udFBsYXRmb3JtRGF0YS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuY3BwCShyZXZpc2lvbiAxODAyNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Nl
dHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBzdGF0aWMgdm9pZCBz
ZXRJbWFnZUxvYWRpbmdTZXR0aW5ncyhQYWdlCiAKIHN0YXRpYyB2b2lkIGludmFsaWRhdGVBZnRl
ckdlbmVyaWNGYW1pbHlDaGFuZ2UoUGFnZSogcGFnZSkKIHsKLSAgICBpbnZhbGlkYXRlRm9udEds
eXBoc0NhY2hlKCk7CisgICAgaW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUoKTsKICAgICBpZiAo
cGFnZSkKICAgICAgICAgcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5j
cHAJKHJldmlzaW9uIDE4MDI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRl
ICJGb250Q2FjaGUuaCIKIAogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiRm9u
dEdseXBocy5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJGb250
U2VsZWN0b3IuaCIKICNpbmNsdWRlICJNZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCIKQEAgLTQyNiw3
ICs0MjUsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOCiAKIHZv
aWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IHB1cmdlQ291bnQpCiB7Ci0g
ICAgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOworICAgIHBy
dW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250Q2FzY2FkZUNhY2hlKCk7CiAgICAgcHJ1bmVT
eXN0ZW1GYWxsYmFja0ZvbnRzKCk7CiAKICNpZiBQTEFURk9STShJT1MpCkBAIC01MzUsNyArNTM0
LDcgQEAgdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGUoKQogICAgIH0KIAogICAgIGZvbnRQbGF0
Zm9ybURhdGFDYWNoZSgpLmNsZWFyKCk7Ci0gICAgaW52YWxpZGF0ZUZvbnRHbHlwaHNDYWNoZSgp
OworICAgIGludmFsaWRhdGVGb250Q2FzY2FkZUNhY2hlKCk7CiAKICAgICBnR2VuZXJhdGlvbisr
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuY3BwCShyZXZpc2lvbiAxODAyNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAg
dGVtcGxhdGUgPD4gdm9pZCBkZWxldGVPd25lZFB0cjxXZWJDb3JlOgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXN0YXRpYyBSZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRH
bHlwaHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsK
K3N0YXRpYyBSZWY8Rm9udENhc2NhZGVGb250cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CiAKIGNvbnN0
IHVpbnQ4X3QgRm9udENhc2NhZGU6OnNfcm91bmRpbmdIYWNrQ2hhcmFjdGVyVGFibGVbMjU2XSA9
IHsKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qXHQqLywgMSAvKlxuKi8sIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsCkBAIC0xMjUsOCArMTI1LDggQEAgRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZv
bnREZXNjcgogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBw
bGF0Zm9ybS1pbmRlcGVuZGVudC4KLUZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBmb250LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkK
LSAgICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250KSkK
K0ZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0
YSwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCisgICAgOiBtX2ZvbnRzKEZv
bnRDYXNjYWRlRm9udHM6OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250RGF0YSkpCiAgICAgLCBt
X2xldHRlclNwYWNpbmcoMCkKICAgICAsIG1fd29yZFNwYWNpbmcoMCkKICAgICAsIG1fdXNlQmFj
a3NsYXNoQXNZZW5TeW1ib2woZmFsc2UpCkBAIC0xMzQsMzMgKzEzNCwzMiBAQCBGb250Q2FzY2Fk
ZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udFBsYXRmCiB7CiAgICAgbV9mb250RGVzY3JpcHRpb24u
c2V0Rm9udFNtb290aGluZyhmb250U21vb3RoaW5nTW9kZSk7CiAjaWYgUExBVEZPUk0oSU9TKQot
ICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShmb250
LmZvbnQoKSkpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRH
ZXRTaXplKGZvbnQuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMo
Q1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udC5mb250KCkpICYga0NURm9udFRyYWl0SXRhbGlj
KTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdldFN5bWJvbGljVHJh
aXRzKGZvbnQuZm9udCgpKSAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBG
b250V2VpZ2h0Tm9ybWFsKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXpl
KENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7CisgICAgbV9mb250RGVzY3JpcHRpb24u
c2V0Q29tcHV0ZWRTaXplKENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7CisgICAgbV9m
b250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udERh
dGEuZm9udCgpKSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CisgICAgbV9mb250RGVzY3JpcHRpb24u
c2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkpICYga0NU
Rm9udFRyYWl0Qm9sZCkgPyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3JtYWwpOwogI2Vu
ZGlmCiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRm
b3JtLWluZGVwZW5kZW50LgogI2lmIFBMQVRGT1JNKElPUykKLUZvbnRDYXNjYWRlOjpGb250Q2Fz
Y2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250LCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rv
cj4gZm9udFNlbGVjdG9yKQotICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxh
dGZvcm1Gb250KGZvbnQpKQotICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCitGb250Q2FzY2FkZTo6
Rm9udENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEsIFBhc3NSZWZQdHI8
Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCisgICAgOiBtX2xldHRlclNwYWNpbmcoMCkKICAg
ICAsIG1fd29yZFNwYWNpbmcoMCkKICAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRl
VHlwZXNldHRpbmdGZWF0dXJlcygpKQogewotICAgIENURm9udFJlZiBwcmltYXJ5Rm9udCA9IGZv
bnQuZm9udCgpOworICAgIENURm9udFJlZiBwcmltYXJ5Rm9udCA9IGZvbnREYXRhLmZvbnQoKTsK
ICAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUocHJp
bWFyeUZvbnQpKTsKICAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1RGb250
R2V0U2l6ZShwcmltYXJ5Rm9udCkpOwogICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGlj
KENURm9udEdldFN5bWJvbGljVHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEl0YWxp
Yyk7CiAgICAgbV9mb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1Ry
YWl0cyhwcmltYXJ5Rm9udCkgJiBrQ1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDog
Rm9udFdlaWdodE5vcm1hbCk7Ci0gICAgbV9nbHlwaHMgPSByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9u
dEdseXBocyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKKyAgICBtX2Zv
bnRzID0gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKG1fZm9udERlc2NyaXB0aW9uLCBmb250U2Vs
ZWN0b3IuZ2V0KCkpOwogfQogI2VuZGlmCiAKIEZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25z
dCBGb250Q2FzY2FkZSYgb3RoZXIpCiAgICAgOiBtX2ZvbnREZXNjcmlwdGlvbihvdGhlci5tX2Zv
bnREZXNjcmlwdGlvbikKLSAgICAsIG1fZ2x5cGhzKG90aGVyLm1fZ2x5cGhzKQorICAgICwgbV9m
b250cyhvdGhlci5tX2ZvbnRzKQogICAgICwgbV9sZXR0ZXJTcGFjaW5nKG90aGVyLm1fbGV0dGVy
U3BhY2luZykKICAgICAsIG1fd29yZFNwYWNpbmcob3RoZXIubV93b3JkU3BhY2luZykKICAgICAs
IG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2wob3RoZXIubV91c2VCYWNrc2xhc2hBc1llblN5bWJv
bCkKQEAgLTE3MSw3ICsxNzAsNyBAQCBGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9u
dENhc2NhCiBGb250Q2FzY2FkZSYgRm9udENhc2NhZGU6Om9wZXJhdG9yPShjb25zdCBGb250Q2Fz
Y2FkZSYgb3RoZXIpCiB7CiAgICAgbV9mb250RGVzY3JpcHRpb24gPSBvdGhlci5tX2ZvbnREZXNj
cmlwdGlvbjsKLSAgICBtX2dseXBocyA9IG90aGVyLm1fZ2x5cGhzOworICAgIG1fZm9udHMgPSBv
dGhlci5tX2ZvbnRzOwogICAgIG1fbGV0dGVyU3BhY2luZyA9IG90aGVyLm1fbGV0dGVyU3BhY2lu
ZzsKICAgICBtX3dvcmRTcGFjaW5nID0gb3RoZXIubV93b3JkU3BhY2luZzsKICAgICBtX3VzZUJh
Y2tzbGFzaEFzWWVuU3ltYm9sID0gb3RoZXIubV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsKQEAg
LTE4NiwyMSArMTg1LDIxIEBAIGJvb2wgRm9udENhc2NhZGU6Om9wZXJhdG9yPT0oY29uc3QgRm9u
dEMKIAogICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbiAhPSBvdGhlci5tX2ZvbnREZXNjcmlwdGlv
biB8fCBtX2xldHRlclNwYWNpbmcgIT0gb3RoZXIubV9sZXR0ZXJTcGFjaW5nIHx8IG1fd29yZFNw
YWNpbmcgIT0gb3RoZXIubV93b3JkU3BhY2luZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChtX2dseXBocyA9PSBvdGhlci5tX2dseXBocykKKyAgICBpZiAobV9mb250cyA9PSBvdGhl
ci5tX2ZvbnRzKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIW1fZ2x5cGhzIHx8ICFv
dGhlci5tX2dseXBocykKKyAgICBpZiAoIW1fZm9udHMgfHwgIW90aGVyLm1fZm9udHMpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpICE9IG90
aGVyLm1fZ2x5cGhzLT5mb250U2VsZWN0b3IoKSkKKyAgICBpZiAobV9mb250cy0+Zm9udFNlbGVj
dG9yKCkgIT0gb3RoZXIubV9mb250cy0+Zm9udFNlbGVjdG9yKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAvLyBDYW4gdGhlc2UgY2FzZXMgYWN0dWFsbHkgc29tZWhvdyBvY2N1cj8gQWxs
IGZvbnRzIHNob3VsZCBnZXQgd2lwZWQgb3V0IGJ5IGZ1bGwgc3R5bGUgcmVjYWxjLgotICAgIGlm
IChtX2dseXBocy0+Zm9udFNlbGVjdG9yVmVyc2lvbigpICE9IG90aGVyLm1fZ2x5cGhzLT5mb250
U2VsZWN0b3JWZXJzaW9uKCkpCisgICAgaWYgKG1fZm9udHMtPmZvbnRTZWxlY3RvclZlcnNpb24o
KSAhPSBvdGhlci5tX2ZvbnRzLT5mb250U2VsZWN0b3JWZXJzaW9uKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAobV9nbHlwaHMtPmdlbmVyYXRpb24oKSAhPSBvdGhlci5tX2dseXBo
cy0+Z2VuZXJhdGlvbigpKQorICAgIGlmIChtX2ZvbnRzLT5nZW5lcmF0aW9uKCkgIT0gb3RoZXIu
bV9mb250cy0+Z2VuZXJhdGlvbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXN0cnVjdCBGb250R2x5cGhzQ2FjaGVLZXkgeworc3RydWN0IEZvbnRDYXNj
YWRlQ2FjaGVLZXkgewogICAgIC8vIFRoaXMgcGFydCBvZiB0aGUga2V5IGlzIHNoYXJlZCB3aXRo
IHRoZSBsb3dlciBsZXZlbCBGb250Q2FjaGUgKGNhY2hpbmcgRm9udERhdGEgb2JqZWN0cykuCiAg
ICAgRm9udERlc2NyaXB0aW9uRm9udERhdGFDYWNoZUtleSBmb250RGVzY3JpcHRpb25DYWNoZUtl
eTsKICAgICBWZWN0b3I8QXRvbWljU3RyaW5nLCAzPiBmYW1pbGllczsKQEAgLTIwOSwyMCArMjA4
LDIwIEBAIHN0cnVjdCBGb250R2x5cGhzQ2FjaGVLZXkgewogICAgIHVuc2lnbmVkIGZvbnRTZWxl
Y3RvckZsYWdzOwogfTsKIAotc3RydWN0IEZvbnRHbHlwaHNDYWNoZUVudHJ5IHsKK3N0cnVjdCBG
b250Q2FzY2FkZUNhY2hlRW50cnkgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIEZvbnRHbHlwaHNDYWNoZUVudHJ5KEZvbnRHbHlwaHNDYWNoZUtleSYmIGssIFJl
ZjxGb250R2x5cGhzPiYmIGcpCi0gICAgICAgIDoga2V5KFdURjo6bW92ZShrKSkKLSAgICAgICAg
LCBnbHlwaHMoV1RGOjptb3ZlKGcpKQorICAgIEZvbnRDYXNjYWRlQ2FjaGVFbnRyeShGb250Q2Fz
Y2FkZUNhY2hlS2V5JiYga2V5LCBSZWY8Rm9udENhc2NhZGVGb250cz4mJiBmb250cykKKyAgICAg
ICAgOiBrZXkoV1RGOjptb3ZlKGtleSkpCisgICAgICAgICwgZm9udHMoV1RGOjptb3ZlKGZvbnRz
KSkKICAgICB7IH0KLSAgICBGb250R2x5cGhzQ2FjaGVLZXkga2V5OwotICAgIFJlZjxGb250R2x5
cGhzPiBnbHlwaHM7CisgICAgRm9udENhc2NhZGVDYWNoZUtleSBrZXk7CisgICAgUmVmPEZvbnRD
YXNjYWRlRm9udHM+IGZvbnRzOwogfTsKIAotdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6
OnVuaXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+LCBBbHJlYWR5SGFzaGVkPiBGb250R2x5
cGhzQ2FjaGU7Cit0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxGb250
Q2FzY2FkZUNhY2hlRW50cnk+LCBBbHJlYWR5SGFzaGVkPiBGb250Q2FzY2FkZUNhY2hlOwogCi1z
dGF0aWMgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRHbHlwaHNDYWNoZUtleSYgYSwgY29uc3Qg
Rm9udEdseXBoc0NhY2hlS2V5JiBiKQorc3RhdGljIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250
Q2FzY2FkZUNhY2hlS2V5JiBhLCBjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5JiBiKQogewogICAg
IGlmIChhLmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5ICE9IGIuZm9udERlc2NyaXB0aW9uQ2FjaGVL
ZXkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIzNywyMSArMjM2LDIxIEBAIHN0YXRpYyBi
b29sIG9wZXJhdG9yPT0oY29uc3QgRm9udEdseXBoc0MKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
c3RhdGljIEZvbnRHbHlwaHNDYWNoZSYgZm9udEdseXBoc0NhY2hlKCkKK3N0YXRpYyBGb250Q2Fz
Y2FkZUNhY2hlJiBmb250Q2FzY2FkZUNhY2hlKCkKIHsKLSAgICBERVBSRUNBVEVEX0RFRklORV9T
VEFUSUNfTE9DQUwoRm9udEdseXBoc0NhY2hlLCBjYWNoZSwgKCkpOworICAgIERFUFJFQ0FURURf
REVGSU5FX1NUQVRJQ19MT0NBTChGb250Q2FzY2FkZUNhY2hlLCBjYWNoZSwgKCkpOwogICAgIHJl
dHVybiBjYWNoZTsKIH0KIAotdm9pZCBpbnZhbGlkYXRlRm9udEdseXBoc0NhY2hlKCkKK3ZvaWQg
aW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUoKQogewotICAgIGZvbnRHbHlwaHNDYWNoZSgpLmNs
ZWFyKCk7CisgICAgZm9udENhc2NhZGVDYWNoZSgpLmNsZWFyKCk7CiB9CiAKIHZvaWQgY2xlYXJX
aWR0aENhY2hlcygpCiB7Ci0gICAgZm9yIChhdXRvIGl0ID0gZm9udEdseXBoc0NhY2hlKCkuYmVn
aW4oKSwgZW5kID0gZm9udEdseXBoc0NhY2hlKCkuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgaXQtPnZhbHVlLT5nbHlwaHMuZ2V0KCkud2lkdGhDYWNoZSgpLmNsZWFyKCk7CisgICAg
Zm9yIChhdXRvJiB2YWx1ZSA6IGZvbnRDYXNjYWRlQ2FjaGUoKS52YWx1ZXMoKSkKKyAgICAgICAg
dmFsdWUtPmZvbnRzLmdldCgpLndpZHRoQ2FjaGUoKS5jbGVhcigpOwogfQogCiBzdGF0aWMgdW5z
aWduZWQgbWFrZUZvbnRTZWxlY3RvckZsYWdzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24pCkBAIC0yNTksMTcgKzI1OCwxOSBAQCBzdGF0aWMgdW5zaWduZWQgbWFrZUZvbnRTZWxl
Y3RvckZsYWdzKGNvCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZXNjcmlwdGlv
bi5zY3JpcHQoKSkgPDwgMSB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZXNjcmlwdGlvbi5zbWFs
bENhcHMoKSk7CiB9CiAKLXN0YXRpYyB2b2lkIG1ha2VGb250R2x5cGhzQ2FjaGVLZXkoRm9udEds
eXBoc0NhY2hlS2V5JiBrZXksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZv
bnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQorc3RhdGljIEZvbnRDYXNjYWRlQ2FjaGVLZXkgbWFr
ZUZvbnRDYXNjYWRlQ2FjaGVLZXkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwg
Rm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCiB7CisgICAgRm9udENhc2NhZGVDYWNoZUtleSBr
ZXk7CiAgICAga2V5LmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5ID0gRm9udERlc2NyaXB0aW9uRm9u
dERhdGFDYWNoZUtleShkZXNjcmlwdGlvbik7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7ICsraSkKICAgICAgICAga2V5LmZhbWlsaWVzLmFw
cGVuZChkZXNjcmlwdGlvbi5mYW1pbHlBdChpKSk7CiAgICAga2V5LmZvbnRTZWxlY3RvcklkID0g
Zm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT51bmlxdWVJZCgpIDogMDsKICAgICBrZXkuZm9u
dFNlbGVjdG9yVmVyc2lvbiA9IGZvbnRTZWxlY3RvciA/IGZvbnRTZWxlY3Rvci0+dmVyc2lvbigp
IDogMDsKICAgICBrZXkuZm9udFNlbGVjdG9yRmxhZ3MgPSBmb250U2VsZWN0b3IgJiYgZm9udFNl
bGVjdG9yLT5yZXNvbHZlc0ZhbWlseUZvcihkZXNjcmlwdGlvbikgPyBtYWtlRm9udFNlbGVjdG9y
RmxhZ3MoZGVzY3JpcHRpb24pIDogMDsKKyAgICByZXR1cm4ga2V5OwogfQogCi1zdGF0aWMgdW5z
aWduZWQgY29tcHV0ZUZvbnRHbHlwaHNDYWNoZUhhc2goY29uc3QgRm9udEdseXBoc0NhY2hlS2V5
JiBrZXkpCitzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUZvbnRDYXNjYWRlQ2FjaGVIYXNoKGNvbnN0
IEZvbnRDYXNjYWRlQ2FjaGVLZXkmIGtleSkKIHsKICAgICBWZWN0b3I8dW5zaWduZWQsIDc+IGhh
c2hDb2RlczsKICAgICBoYXNoQ29kZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg0ICsga2V5LmZh
bWlsaWVzLnNpemUoKSk7CkBAIC0yODQsNDggKzI4NSw0NyBAQCBzdGF0aWMgdW5zaWduZWQgY29t
cHV0ZUZvbnRHbHlwaHNDYWNoZUhhCiAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9y
eShoYXNoQ29kZXMuZGF0YSgpLCBoYXNoQ29kZXMuc2l6ZSgpICogc2l6ZW9mKHVuc2lnbmVkKSk7
CiB9CiAKLXZvaWQgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgp
Cit2b2lkIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250Q2FzY2FkZUNhY2hlKCkKIHsK
LSAgICBmb250R2x5cGhzQ2FjaGUoKS5yZW1vdmVJZihbXShGb250R2x5cGhzQ2FjaGU6OktleVZh
bHVlUGFpclR5cGUmIGVudHJ5KSB7Ci0gICAgICAgIHJldHVybiBlbnRyeS52YWx1ZS0+Z2x5cGhz
LmdldCgpLmhhc09uZVJlZigpOworICAgIGZvbnRDYXNjYWRlQ2FjaGUoKS5yZW1vdmVJZihbXShG
b250Q2FzY2FkZUNhY2hlOjpLZXlWYWx1ZVBhaXJUeXBlJiBlbnRyeSkgeworICAgICAgICByZXR1
cm4gZW50cnkudmFsdWUtPmZvbnRzLmdldCgpLmhhc09uZVJlZigpOwogICAgIH0pOwogfQogCiB2
b2lkIHBydW5lU3lzdGVtRmFsbGJhY2tGb250cygpCiB7Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6
IGZvbnRHbHlwaHNDYWNoZSgpLnZhbHVlcygpKQotICAgICAgICBlbnRyeS0+Z2x5cGhzLT5wcnVu
ZVN5c3RlbUZhbGxiYWNrcygpOworICAgIGZvciAoYXV0byYgZW50cnkgOiBmb250Q2FzY2FkZUNh
Y2hlKCkudmFsdWVzKCkpCisgICAgICAgIGVudHJ5LT5mb250cy0+cHJ1bmVTeXN0ZW1GYWxsYmFj
a3MoKTsKIH0KIAotc3RhdGljIFJlZjxGb250R2x5cGhzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9u
dEdseXBocyhjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgUGFzc1JlZlB0
cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKK3N0YXRpYyBSZWY8Rm9udENhc2NhZGVGb250
cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQogewotICAg
IEZvbnRHbHlwaHNDYWNoZUtleSBrZXk7Ci0gICAgbWFrZUZvbnRHbHlwaHNDYWNoZUtleShrZXks
IGZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKKyAgICBhdXRvIGtleSA9IG1h
a2VGb250Q2FzY2FkZUNhY2hlS2V5KGZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgp
KTsKIAotICAgIHVuc2lnbmVkIGhhc2ggPSBjb21wdXRlRm9udEdseXBoc0NhY2hlSGFzaChrZXkp
OwotICAgIEZvbnRHbHlwaHNDYWNoZTo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IGZvbnRHbHlwaHND
YWNoZSgpLmFkZChoYXNoLCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+KCkp
OworICAgIHVuc2lnbmVkIGhhc2ggPSBjb21wdXRlRm9udENhc2NhZGVDYWNoZUhhc2goa2V5KTsK
KyAgICBhdXRvIGFkZFJlc3VsdCA9IGZvbnRDYXNjYWRlQ2FjaGUoKS5hZGQoaGFzaCwgc3RkOjp1
bmlxdWVfcHRyPEZvbnRDYXNjYWRlQ2FjaGVFbnRyeT4oKSk7CiAgICAgaWYgKCFhZGRSZXN1bHQu
aXNOZXdFbnRyeSAmJiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5rZXkgPT0ga2V5KQotICAg
ICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+Z2x5cGhzLmdldCgpOworICAg
ICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+Zm9udHMuZ2V0KCk7CiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+JiBuZXdFbnRyeSA9IGFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgbmV3RW50cnkgPSBzdGQ6Om1ha2VfdW5pcXVlPEZv
bnRHbHlwaHNDYWNoZUVudHJ5PihXVEY6Om1vdmUoa2V5KSwgRm9udEdseXBoczo6Y3JlYXRlKGZv
bnRTZWxlY3RvcikpOwotICAgIFJlZjxGb250R2x5cGhzPiBnbHlwaHMgPSBuZXdFbnRyeS0+Z2x5
cGhzLmdldCgpOworICAgIGF1dG8mIG5ld0VudHJ5ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKKyAgICBuZXdFbnRyeSA9IHN0ZDo6bWFrZV91bmlxdWU8Rm9udENhc2NhZGVDYWNoZUVudHJ5
PihXVEY6Om1vdmUoa2V5KSwgRm9udENhc2NhZGVGb250czo6Y3JlYXRlKGZvbnRTZWxlY3Rvcikp
OworICAgIFJlZjxGb250Q2FzY2FkZUZvbnRzPiBnbHlwaHMgPSBuZXdFbnRyeS0+Zm9udHMuZ2V0
KCk7CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdW5yZWZlcmVuY2VkUHJ1bmVJbnRlcnZh
bCA9IDUwOwogICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bUVudHJpZXMgPSA0MDA7CiAgICAg
c3RhdGljIHVuc2lnbmVkIHBydW5lQ291bnRlcjsKLSAgICAvLyBSZWZlcmVuY2VkIEZvbnRHbHlw
aHMgd291bGQgZXhpc3QgYW55d2F5IHNvIHBydW5pbmcgdGhlbSBzYXZlcyBsaXR0bGUgbWVtb3J5
LgorICAgIC8vIFJlZmVyZW5jZWQgRm9udENhc2NhZGVGb250cyB3b3VsZCBleGlzdCBhbnl3YXkg
c28gcHJ1bmluZyB0aGVtIHNhdmVzIGxpdHRsZSBtZW1vcnkuCiAgICAgaWYgKCEoKytwcnVuZUNv
dW50ZXIgJSB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsKSkKLSAgICAgICAgcHJ1bmVVbnJlZmVy
ZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOworICAgICAgICBwcnVuZVVucmVmZXJl
bmNlZEVudHJpZXNGcm9tRm9udENhc2NhZGVDYWNoZSgpOwogICAgIC8vIFByZXZlbnQgcGF0aG9s
b2dpY2FsIGdyb3d0aC4KLSAgICBpZiAoZm9udEdseXBoc0NhY2hlKCkuc2l6ZSgpID4gbWF4aW11
bUVudHJpZXMpCi0gICAgICAgIGZvbnRHbHlwaHNDYWNoZSgpLnJlbW92ZShmb250R2x5cGhzQ2Fj
aGUoKS5iZWdpbigpKTsKKyAgICBpZiAoZm9udENhc2NhZGVDYWNoZSgpLnNpemUoKSA+IG1heGlt
dW1FbnRyaWVzKQorICAgICAgICBmb250Q2FzY2FkZUNhY2hlKCkucmVtb3ZlKGZvbnRDYXNjYWRl
Q2FjaGUoKS5iZWdpbigpKTsKICAgICByZXR1cm4gZ2x5cGhzOwogfQogCiB2b2lkIEZvbnRDYXNj
YWRlOjp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikgY29uc3QK
IHsKLSAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKG1fZm9udERl
c2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworICAgIG1fZm9udHMgPSByZXRyaWV2ZU9y
QWRkQ2FjaGVkRm9udHMobV9mb250RGVzY3JpcHRpb24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7CiAg
ICAgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCA9IHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZh
bWlseShmaXJzdEZhbWlseSgpKTsKICAgICBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgPSBjb21wdXRl
VHlwZXNldHRpbmdGZWF0dXJlcygpOwogfQpAQCAtMzg0LDcgKzM4NCw3IEBAIGZsb2F0IEZvbnRD
YXNjYWRlOjp3aWR0aChjb25zdCBUZXh0UnVuJiAKIAogICAgIGJvb2wgaGFzS2VybmluZ09yTGln
YXR1cmVzID0gdHlwZXNldHRpbmdGZWF0dXJlcygpICYgKEtlcm5pbmcgfCBMaWdhdHVyZXMpOwog
ICAgIGJvb2wgaGFzV29yZFNwYWNpbmdPckxldHRlclNwYWNpbmcgPSB3b3JkU3BhY2luZygpIHx8
IGxldHRlclNwYWNpbmcoKTsKLSAgICBmbG9hdCogY2FjaGVFbnRyeSA9IG1fZ2x5cGhzLT53aWR0
aENhY2hlKCkuYWRkKHJ1biwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigp
LCBoYXNLZXJuaW5nT3JMaWdhdHVyZXMsIGhhc1dvcmRTcGFjaW5nT3JMZXR0ZXJTcGFjaW5nLCBn
bHlwaE92ZXJmbG93KTsKKyAgICBmbG9hdCogY2FjaGVFbnRyeSA9IG1fZm9udHMtPndpZHRoQ2Fj
aGUoKS5hZGQocnVuLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCksIGhh
c0tlcm5pbmdPckxpZ2F0dXJlcywgaGFzV29yZFNwYWNpbmdPckxldHRlclNwYWNpbmcsIGdseXBo
T3ZlcmZsb3cpOwogICAgIGlmIChjYWNoZUVudHJ5ICYmICFzdGQ6OmlzbmFuKCpjYWNoZUVudHJ5
KSkKICAgICAgICAgcmV0dXJuICpjYWNoZUVudHJ5OwogCkBAIC00MzIsNyArNDMyLDcgQEAgR2x5
cGhEYXRhIEZvbnRDYXNjYWRlOjpnbHlwaERhdGFGb3JDaGFyYQogICAgIGlmIChtaXJyb3IpCiAg
ICAgICAgIGMgPSB1X2NoYXJNaXJyb3IoYyk7CiAKLSAgICByZXR1cm4gbV9nbHlwaHMtPmdseXBo
RGF0YUZvckNoYXJhY3RlcihjLCBtX2ZvbnREZXNjcmlwdGlvbiwgdmFyaWFudCk7CisgICAgcmV0
dXJuIG1fZm9udHMtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjLCBtX2ZvbnREZXNjcmlwdGlvbiwg
dmFyaWFudCk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0xMDk1LDcgKzEwOTUsNyBA
QCBib29sIEZvbnRDYXNjYWRlOjpjYW5SZWNlaXZlVGV4dEVtcGhhc2lzCiAKIGJvb2wgRm9udENh
c2NhZGU6OmlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9nbHlw
aHMgJiYgbV9nbHlwaHMtPmlzTG9hZGluZ0N1c3RvbUZvbnRzKCk7CisgICAgcmV0dXJuIG1fZm9u
dHMgJiYgbV9mb250cy0+aXNMb2FkaW5nQ3VzdG9tRm9udHMoKTsKIH0KICAgICAKIEdseXBoVG9Q
YXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNv
bnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50
IGluZGV4KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZS5oCShyZXZpc2lvbiAxODAyNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAK
ICNpbmNsdWRlICJEYXNoQXJyYXkuaCIKICNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9u
dENhc2NhZGVGb250cy5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUg
IkZvbnRHbHlwaHMuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiVGV4dERpcmVjdGlv
bi5oIgogI2luY2x1ZGUgIlR5cGVzZXR0aW5nRmVhdHVyZXMuaCIKQEAgLTE2OSw3ICsxNjksNyBA
QCBwdWJsaWM6CiAgICAgRm9udFdlaWdodCB3ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRE
ZXNjcmlwdGlvbi53ZWlnaHQoKTsgfQogICAgIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50
KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCk7IH0KIAot
ICAgIGJvb2wgaXNQbGF0Zm9ybUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2dseXBocy0+aXNGb3JQ
bGF0Zm9ybUZvbnQoKTsgfQorICAgIGJvb2wgaXNQbGF0Zm9ybUZvbnQoKSBjb25zdCB7IHJldHVy
biBtX2ZvbnRzLT5pc0ZvclBsYXRmb3JtRm9udCgpOyB9CiAKICAgICBjb25zdCBGb250TWV0cmlj
cyYgZm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9udCgpLmZvbnRNZXRyaWNz
KCk7IH0KICAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnQo
KS5zcGFjZVdpZHRoKCkgKyBtX2xldHRlclNwYWNpbmc7IH0KQEAgLTI4NSw3ICsyODUsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVTcGFjZXMoY29uc3QgVUNoYXIqLCB1
bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgYm9vbCB1c2VCYWNrc2xhc2hBc1llblN5bWJvbCgpIGNv
bnN0IHsgcmV0dXJuIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2w7IH0KLSAgICBGb250R2x5cGhz
KiBnbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2dseXBocy5nZXQoKTsgfQorICAgIEZvbnRDYXNj
YWRlRm9udHMqIGZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9mb250cy5nZXQoKTsgfQogCiBwcml2
YXRlOgogICAgIGJvb2wgaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdDsKQEAgLTMzNSwxNSAr
MzM1LDE1IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIFR5cGVzZXR0aW5nRmVhdHVyZXMgc19kZWZh
dWx0VHlwZXNldHRpbmdGZWF0dXJlczsKIAogICAgIEZvbnREZXNjcmlwdGlvbiBtX2ZvbnREZXNj
cmlwdGlvbjsKLSAgICBtdXRhYmxlIFJlZlB0cjxGb250R2x5cGhzPiBtX2dseXBoczsKKyAgICBt
dXRhYmxlIFJlZlB0cjxGb250Q2FzY2FkZUZvbnRzPiBtX2ZvbnRzOwogICAgIGZsb2F0IG1fbGV0
dGVyU3BhY2luZzsKICAgICBmbG9hdCBtX3dvcmRTcGFjaW5nOwogICAgIG11dGFibGUgYm9vbCBt
X3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sOwogICAgIG11dGFibGUgdW5zaWduZWQgbV90eXBlc2V0
dGluZ0ZlYXR1cmVzIDogMjsgLy8gKFR5cGVzZXR0aW5nRmVhdHVyZXMpIENhY2hlcyB2YWx1ZXMg
Y29tcHV0ZWQgZnJvbSBtX2ZvbnREZXNjcmlwdGlvbi4KIH07CiAKLXZvaWQgaW52YWxpZGF0ZUZv
bnRHbHlwaHNDYWNoZSgpOwotdm9pZCBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udEds
eXBoc0NhY2hlKCk7Cit2b2lkIGludmFsaWRhdGVGb250Q2FzY2FkZUNhY2hlKCk7Cit2b2lkIHBy
dW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250Q2FzY2FkZUNhY2hlKCk7CiB2b2lkIHBydW5l
U3lzdGVtRmFsbGJhY2tGb250cygpOwogdm9pZCBjbGVhcldpZHRoQ2FjaGVzKCk7CiAKQEAgLTM1
MywyNSArMzUzLDI1IEBAIGlubGluZSBGb250Q2FzY2FkZTo6fkZvbnRDYXNjYWRlKCkKIAogaW5s
aW5lIGNvbnN0IEZvbnQmIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udCgpIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKG1fZ2x5cGhzKTsKLSAgICByZXR1cm4gbV9nbHlwaHMtPnByaW1hcnlGb250KG1fZm9u
dERlc2NyaXB0aW9uKTsKKyAgICBBU1NFUlQobV9mb250cyk7CisgICAgcmV0dXJuIG1fZm9udHMt
PnByaW1hcnlGb250KG1fZm9udERlc2NyaXB0aW9uKTsKIH0KIAogaW5saW5lIGNvbnN0IEZvbnRS
YW5nZXMmIEZvbnRDYXNjYWRlOjpmYWxsYmFja1Jhbmdlc0F0KHVuc2lnbmVkIGluZGV4KSBjb25z
dAogewotICAgIEFTU0VSVChtX2dseXBocyk7Ci0gICAgcmV0dXJuIG1fZ2x5cGhzLT5yZWFsaXpl
RmFsbGJhY2tSYW5nZXNBdChtX2ZvbnREZXNjcmlwdGlvbiwgaW5kZXgpOworICAgIEFTU0VSVCht
X2ZvbnRzKTsKKyAgICByZXR1cm4gbV9mb250cy0+cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQobV9m
b250RGVzY3JpcHRpb24sIGluZGV4KTsKIH0KIAogaW5saW5lIGJvb2wgRm9udENhc2NhZGU6Omlz
Rml4ZWRQaXRjaCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1fZ2x5cGhzKTsKLSAgICByZXR1cm4g
bV9nbHlwaHMtPmlzRml4ZWRQaXRjaChtX2ZvbnREZXNjcmlwdGlvbik7CisgICAgQVNTRVJUKG1f
Zm9udHMpOworICAgIHJldHVybiBtX2ZvbnRzLT5pc0ZpeGVkUGl0Y2gobV9mb250RGVzY3JpcHRp
b24pOwogfQogCiBpbmxpbmUgRm9udFNlbGVjdG9yKiBGb250Q2FzY2FkZTo6Zm9udFNlbGVjdG9y
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9nbHlwaHMgPyBtX2dseXBocy0+Zm9udFNlbGVjdG9y
KCkgOiAwOworICAgIHJldHVybiBtX2ZvbnRzID8gbV9mb250cy0+Zm9udFNlbGVjdG9yKCkgOiAw
OwogfQogCiBpbmxpbmUgZmxvYXQgRm9udENhc2NhZGU6OnRhYldpZHRoKGNvbnN0IEZvbnQmIGZv
bnQsIHVuc2lnbmVkIHRhYlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5j
cHAJKHJldmlzaW9uIDE4MDI2NCkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udEdseXBocy5jcHA6MTgwMjY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MDgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTMtMjAxNSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKKwor
I2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVk
ZSAiR2x5cGhQYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworCitGb250R2x5cGhzOjpG
b250R2x5cGhzKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCisgICAgOiBt
X2NhY2hlZFByaW1hcnlGb250KDApCisgICAgLCBtX2ZvbnRTZWxlY3Rvcihmb250U2VsZWN0b3Ip
CisgICAgLCBtX2ZvbnRTZWxlY3RvclZlcnNpb24obV9mb250U2VsZWN0b3IgPyBtX2ZvbnRTZWxl
Y3Rvci0+dmVyc2lvbigpIDogMCkKKyAgICAsIG1fZ2VuZXJhdGlvbihmb250Q2FjaGUoKS5nZW5l
cmF0aW9uKCkpCit7Cit9CisKK0ZvbnRHbHlwaHM6OkZvbnRHbHlwaHMoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgcGxhdGZvcm1EYXRhKQorICAgIDogbV9jYWNoZWRQcmltYXJ5Rm9udCgwKQorICAg
ICwgbV9mb250U2VsZWN0b3IoMCkKKyAgICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbigwKQorICAg
ICwgbV9nZW5lcmF0aW9uKGZvbnRDYWNoZSgpLmdlbmVyYXRpb24oKSkKKyAgICAsIG1faXNGb3JQ
bGF0Zm9ybUZvbnQodHJ1ZSkKK3sKKyAgICBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuYXBwZW5k
KEZvbnRSYW5nZXMoZm9udENhY2hlKCkuZm9udEZvclBsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEp
KSk7Cit9CisKK0ZvbnRHbHlwaHM6On5Gb250R2x5cGhzKCkKK3sKK30KKwordm9pZCBGb250R2x5
cGhzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQor
eworICAgIGF1dG8mIHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNj
cmlwdGlvbiwgMCk7CisgICAgdW5zaWduZWQgbnVtUmFuZ2VzID0gcHJpbWFyeVJhbmdlcy5zaXpl
KCk7CisgICAgaWYgKG51bVJhbmdlcyA9PSAxKQorICAgICAgICBtX3BpdGNoID0gcHJpbWFyeVJh
bmdlcy5yYW5nZUF0KDApLmZvbnQoKS5waXRjaCgpOworICAgIGVsc2UKKyAgICAgICAgbV9waXRj
aCA9IFZhcmlhYmxlUGl0Y2g7Cit9CisKK2Jvb2wgRm9udEdseXBoczo6aXNMb2FkaW5nQ3VzdG9t
Rm9udHMoKSBjb25zdAoreworICAgIGZvciAoYXV0byYgZm9udFJhbmdlcyA6IG1fcmVhbGl6ZWRG
YWxsYmFja1JhbmdlcykgeworICAgICAgICBpZiAoZm9udFJhbmdlcy5pc0xvYWRpbmcoKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0
YXRpYyBGb250UmFuZ2VzIHJlYWxpemVOZXh0RmFsbGJhY2soY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbiwgdW5zaWduZWQmIGluZGV4LCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3Rv
cikKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBkZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpKTsKKwor
ICAgIHdoaWxlIChpbmRleCA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCkpIHsKKyAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkgPSBkZXNjcmlwdGlvbi5mYW1pbHlBdChpbmRleCsr
KTsKKyAgICAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKGZvbnRTZWxlY3RvcikgeworICAgICAgICAgICAgYXV0byByYW5nZXMgPSBm
b250U2VsZWN0b3ItPmZvbnRSYW5nZXNGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGZhbWlseSk7Cisg
ICAgICAgICAgICBpZiAoIXJhbmdlcy5pc051bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
cmFuZ2VzOworICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIGZvbnQgPSBmb250Q2FjaGUoKS5m
b250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBmYW1pbHkpKQorICAgICAgICAgICAgcmV0dXJuIEZv
bnRSYW5nZXMoV1RGOjptb3ZlKGZvbnQpKTsKKyAgICB9CisgICAgLy8gV2UgZGlkbid0IGZpbmQg
YSBmb250LiBUcnkgdG8gZmluZCBhIHNpbWlsYXIgZm9udCB1c2luZyBvdXIgb3duIHNwZWNpZmlj
IGtub3dsZWRnZSBhYm91dCBvdXIgcGxhdGZvcm0uCisgICAgLy8gRm9yIGV4YW1wbGUgb24gT1Mg
WCwgd2Uga25vdyB0byBtYXAgYW55IGZhbWlsaWVzIGNvbnRhaW5pbmcgdGhlIHdvcmRzIEFyYWJp
YywgUGFzaHRvLCBvciBVcmR1IHRvIHRoZQorICAgIC8vIEdlZXphIFBybyBmb250LgorICAgIHJl
dHVybiBGb250UmFuZ2VzKGZvbnRDYWNoZSgpLnNpbWlsYXJGb250KGRlc2NyaXB0aW9uKSk7Cit9
CisKK2NvbnN0IEZvbnRSYW5nZXMmIEZvbnRHbHlwaHM6OnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2lnbmVkIGluZGV4KQorewor
ICAgIGlmIChpbmRleCA8IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5zaXplKCkpCisgICAgICAg
IHJldHVybiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNbaW5kZXhdOworCisgICAgQVNTRVJUKGlu
ZGV4ID09IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5zaXplKCkpOworICAgIEFTU0VSVChmb250
Q2FjaGUoKS5nZW5lcmF0aW9uKCkgPT0gbV9nZW5lcmF0aW9uKTsKKworICAgIG1fcmVhbGl6ZWRG
YWxsYmFja1Jhbmdlcy5hcHBlbmQoRm9udFJhbmdlcygpKTsKKyAgICBhdXRvJiBmb250UmFuZ2Vz
ID0gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmxhc3QoKTsKKworICAgIGlmICghaW5kZXgpIHsK
KyAgICAgICAgZm9udFJhbmdlcyA9IHJlYWxpemVOZXh0RmFsbGJhY2soZGVzY3JpcHRpb24sIG1f
bGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCwgbV9mb250U2VsZWN0b3IuZ2V0KCkpOworICAgICAg
ICBpZiAoZm9udFJhbmdlcy5pc051bGwoKSAmJiBtX2ZvbnRTZWxlY3RvcikKKyAgICAgICAgICAg
IGZvbnRSYW5nZXMgPSBtX2ZvbnRTZWxlY3Rvci0+Zm9udFJhbmdlc0ZvckZhbWlseShkZXNjcmlw
dGlvbiwgc3RhbmRhcmRGYW1pbHkpOworICAgICAgICBpZiAoZm9udFJhbmdlcy5pc051bGwoKSkK
KyAgICAgICAgICAgIGZvbnRSYW5nZXMgPSBGb250UmFuZ2VzKGZvbnRDYWNoZSgpLmxhc3RSZXNv
cnRGYWxsYmFja0ZvbnQoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgcmV0dXJuIGZvbnRSYW5nZXM7
CisgICAgfQorCisgICAgaWYgKG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCA8IGRlc2NyaXB0
aW9uLmZhbWlseUNvdW50KCkpCisgICAgICAgIGZvbnRSYW5nZXMgPSByZWFsaXplTmV4dEZhbGxi
YWNrKGRlc2NyaXB0aW9uLCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXgsIG1fZm9udFNlbGVj
dG9yLmdldCgpKTsKKworICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpICYmIG1fZm9udFNlbGVj
dG9yKSB7CisgICAgICAgIEFTU0VSVChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPj0gZGVz
Y3JpcHRpb24uZmFtaWx5Q291bnQoKSk7CisKKyAgICAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9y
RmFsbGJhY2tJbmRleCA9IG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCAtIGRlc2NyaXB0aW9u
LmZhbWlseUNvdW50KCk7CisgICAgICAgIGlmIChmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID09
IG1fZm9udFNlbGVjdG9yLT5mYWxsYmFja0ZvbnRDb3VudCgpKQorICAgICAgICAgICAgcmV0dXJu
IGZvbnRSYW5nZXM7CisgICAgICAgICsrbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4OworICAg
ICAgICBmb250UmFuZ2VzID0gRm9udFJhbmdlcyhtX2ZvbnRTZWxlY3Rvci0+ZmFsbGJhY2tGb250
QXQoZGVzY3JpcHRpb24sIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXgpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZm9udFJhbmdlczsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzSW5SYW5nZShV
Q2hhcjMyIGNoYXJhY3RlciwgVUNoYXIzMiBsb3dlckJvdW5kLCBVQ2hhcjMyIHVwcGVyQm91bmQp
Cit7CisgICAgcmV0dXJuIGNoYXJhY3RlciA+PSBsb3dlckJvdW5kICYmIGNoYXJhY3RlciA8PSB1
cHBlckJvdW5kOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVSb3RhdGlvbihVQ2hhcjMy
IGNoYXJhY3RlcikKK3sKKyAgICBpZiAoY2hhcmFjdGVyID09IDB4MDAwQTcgfHwgY2hhcmFjdGVy
ID09IDB4MDAwQTkgfHwgY2hhcmFjdGVyID09IDB4MDAwQUUpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKGNoYXJhY3RlciA9PSAweDAwMEI2IHx8IGNoYXJhY3RlciA9PSAweDAwMEJD
IHx8IGNoYXJhY3RlciA9PSAweDAwMEJEIHx8IGNoYXJhY3RlciA9PSAweDAwMEJFKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAwMkU1LCAw
eDAwMkVCKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKGlzSW5SYW5nZShj
aGFyYWN0ZXIsIDB4MDExMDAsIDB4MDExRkYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDE0
MDEsIDB4MDE2N0YpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDE4MDAsIDB4MDE4RkYpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjaGFyYWN0ZXIgPT0gMHgwMjAxNiB8fCBj
aGFyYWN0ZXIgPT0gMHgwMjAyMCB8fCBjaGFyYWN0ZXIgPT0gMHgwMjAyMSB8fCBjaGFyYWN0ZXIg
PT0gMHgyMDMwIHx8IGNoYXJhY3RlciA9PSAweDAyMDMxKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMDNCLCAweDAyMDNEKSB8fCBjaGFy
YWN0ZXIgPT0gMHgwMjA0MiB8fCBjaGFyYWN0ZXIgPT0gMHgwMjA0NCB8fCBjaGFyYWN0ZXIgPT0g
MHgwMjA0NworICAgICAgICB8fCBjaGFyYWN0ZXIgPT0gMHgwMjA0OCB8fCBjaGFyYWN0ZXIgPT0g
MHgwMjA0OSB8fCBjaGFyYWN0ZXIgPT0gMHgyMDUxKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMDY1LCAweDAyMDY5KSB8fCBpc0luUmFu
Z2UoY2hhcmFjdGVyLCAweDAyMERELCAweDAyMEUwKQorICAgICAgICB8fCBpc0luUmFuZ2UoY2hh
cmFjdGVyLCAweDAyMEUyLCAweDAyMEU0KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMTAw
LCAweDAyMTE3KQorICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMTE5LCAweDAy
MTMxKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMTMzLCAweDAyMTNGKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjE0NSwgMHgw
MjE0QSkgfHwgY2hhcmFjdGVyID09IDB4MDIxNEMgfHwgY2hhcmFjdGVyID09IDB4MDIxNEQKKyAg
ICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjE0RiwgMHgwMjE4RikpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzMDAsIDB4
MDIzMDcpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzMEMsIDB4MDIzMUYpCisgICAgICAg
IHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzMjIsIDB4MDIzMkIpIHx8IGlzSW5SYW5nZShj
aGFyYWN0ZXIsIDB4MDIzN0QsIDB4MDIzOUEpCisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0
ZXIsIDB4MDIzQjQsIDB4MDIzQjYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzQkEsIDB4
MDIzQ0YpCisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzRDEsIDB4MDIzREIp
IHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzRTIsIDB4MDI0RkYpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyNUEwLCAweDAyNjE5
KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyNjIwLCAweDAyNzY3KQorICAgICAgICB8fCBp
c0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyNzc2LCAweDAyNzkzKSB8fCBpc0luUmFuZ2UoY2hhcmFj
dGVyLCAweDAyQjEyLCAweDAyQjJGKQorICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAw
eDAyQjRELCAweDAyQkZGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyRTgwLCAweDAzMDA3
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoY2hhcmFjdGVyID09IDB4MDMwMTIg
fHwgY2hhcmFjdGVyID09IDB4MDMwMTMgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMzAyMCwg
MHgwMzAyRikKKyAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMzAzMSwgMHgwMzA5
RikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMzBBMSwgMHgwMzBGQikKKyAgICAgICAgfHwg
aXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMzBGRCwgMHgwQTRDRikpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEE4NDAsIDB4MEE4N0YpIHx8
IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEE5NjAsIDB4MEE5N0YpCisgICAgICAgIHx8IGlzSW5S
YW5nZShjaGFyYWN0ZXIsIDB4MEFDMDAsIDB4MEQ3RkYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIs
IDB4MEUwMDAsIDB4MEZBRkYpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChpc0lu
UmFuZ2UoY2hhcmFjdGVyLCAweDBGRTEwLCAweDBGRTFGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVy
LCAweDBGRTMwLCAweDBGRTQ4KQorICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBG
RTUwLCAweDBGRTU3KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRTVGLCAweDBGRTYyKQor
ICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRTY3LCAweDBGRTZGKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkYwMSwg
MHgwRkYwNykgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkYwQSwgMHgwRkYwQykKKyAgICAg
ICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkYwRSwgMHgwRkYxOSkgfHwgY2hhcmFjdGVy
ID09IDB4MEZGMUIgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkYxRiwgMHgwRkYzQSkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGNoYXJhY3RlciA9PSAweDBGRjNDIHx8IGNo
YXJhY3RlciA9PSAweDBGRjNFKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChpc0lu
UmFuZ2UoY2hhcmFjdGVyLCAweDBGRjQwLCAweDBGRjVBKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVy
LCAweDBGRkUwLCAweDBGRkUyKQorICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBG
RkU0LCAweDBGRkU3KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRkYwLCAweDBGRkY4KQor
ICAgICAgICB8fCBjaGFyYWN0ZXIgPT0gMHgwRkZGRCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgxMzAwMCwgMHgxMzQyRikgfHwgaXNJblJh
bmdlKGNoYXJhY3RlciwgMHgxQjAwMCwgMHgxQjBGRikKKyAgICAgICAgfHwgaXNJblJhbmdlKGNo
YXJhY3RlciwgMHgxRDAwMCwgMHgxRDFGRikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgxRDMw
MCwgMHgxRDM3RikKKyAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgxRjAwMCwgMHgx
RjY0RikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgxRjY4MCwgMHgxRjc3RikpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIAorICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDIwMDAw
LCAweDJGRkZEKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDMwMDAwLCAweDNGRkZEKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBQTEFURk9S
TShDT0NPQSkKK3N0YXRpYyBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ0pLQ2hhcmFjdGVyV2l0aG91
dFN5bnRoZXRpY0l0YWxpYyhVQ2hhcjMyIGNoYXJhY3RlciwgR2x5cGhEYXRhJiBkYXRhKQorewor
ICAgIEdseXBoRGF0YSBub25JdGFsaWNEYXRhID0gZGF0YS5mb250LT5ub25TeW50aGV0aWNJdGFs
aWNGb250KCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAgIGlmIChub25J
dGFsaWNEYXRhLmZvbnQpCisgICAgICAgIHJldHVybiBub25JdGFsaWNEYXRhOworICAgIHJldHVy
biBkYXRhOworfQorI2VuZGlmCisgICAgCitzdGF0aWMgR2x5cGhEYXRhIGdseXBoRGF0YUZvck5v
bkNKS0NoYXJhY3RlcldpdGhHbHlwaE9yaWVudGF0aW9uKFVDaGFyMzIgY2hhcmFjdGVyLCBOb25D
SktHbHlwaE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBjb25zdCBHbHlwaERhdGEmIGRhdGEpCit7
CisgICAgaWYgKG9yaWVudGF0aW9uID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25VcHJpZ2h0IHx8
IHNob3VsZElnbm9yZVJvdGF0aW9uKGNoYXJhY3RlcikpIHsKKyAgICAgICAgR2x5cGhEYXRhIHVw
cmlnaHREYXRhID0gZGF0YS5mb250LT51cHJpZ2h0T3JpZW50YXRpb25Gb250KCktPmdseXBoRGF0
YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAgICAgICAvLyBJZiB0aGUgZ2x5cGhzIGFyZSB0
aGUgc2FtZSwgdGhlbiB3ZSBrbm93IHdlIGNhbiBqdXN0IHVzZSB0aGUgaG9yaXpvbnRhbCBnbHlw
aCByb3RhdGVkIHZlcnRpY2FsbHkgdG8gYmUgdXByaWdodC4KKyAgICAgICAgaWYgKGRhdGEuZ2x5
cGggPT0gdXByaWdodERhdGEuZ2x5cGgpCisgICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAg
ICAgLy8gVGhlIGdseXBocyBhcmUgZGlzdGluY3QsIG1lYW5pbmcgdGhhdCB0aGUgZm9udCBoYXMg
YSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZCBpbnRvIGl0LiBXZSBjYW4ndCB1c2UgdGhhdAor
ICAgICAgICAvLyBnbHlwaCwgc28gd2UgZmFsbCBiYWNrIHRvIHRoZSB1cHJpZ2h0IGRhdGEgYW5k
IHVzZSB0aGUgaG9yaXpvbnRhbCBnbHlwaC4KKyAgICAgICAgaWYgKHVwcmlnaHREYXRhLmZvbnQp
CisgICAgICAgICAgICByZXR1cm4gdXByaWdodERhdGE7CisgICAgfSBlbHNlIGlmIChvcmllbnRh
dGlvbiA9PSBOb25DSktHbHlwaE9yaWVudGF0aW9uVmVydGljYWxSaWdodCkgeworICAgICAgICBH
bHlwaERhdGEgdmVydGljYWxSaWdodERhdGEgPSBkYXRhLmZvbnQtPnZlcnRpY2FsUmlnaHRPcmll
bnRhdGlvbkZvbnQoKS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CisgICAgICAg
IC8vIElmIHRoZSBnbHlwaHMgYXJlIGRpc3RpbmN0LCB3ZSB3aWxsIG1ha2UgdGhlIGFzc3VtcHRp
b24gdGhhdCB0aGUgZm9udCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZAorICAgICAg
ICAvLyBpbnRvIGl0LgorICAgICAgICBpZiAoZGF0YS5nbHlwaCAhPSB2ZXJ0aWNhbFJpZ2h0RGF0
YS5nbHlwaCkKKyAgICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAgICAvLyBUaGUgZ2x5cGhz
IGFyZSBpZGVudGljYWwsIG1lYW5pbmcgdGhhdCB3ZSBzaG91bGQganVzdCB1c2UgdGhlIGhvcml6
b250YWwgZ2x5cGguCisgICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0RGF0YS5mb250KQorICAgICAg
ICAgICAgcmV0dXJuIHZlcnRpY2FsUmlnaHREYXRhOworICAgIH0KKyAgICByZXR1cm4gZGF0YTsK
K30KKworR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVD
aGFyMzIgYywgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQg
dmFyaWFudCkKK3sKKyAgICAvLyBTeXN0ZW0gZmFsbGJhY2sgaXMgY2hhcmFjdGVyLWRlcGVuZGVu
dC4KKyAgICBhdXRvJiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVz
Y3JpcHRpb24sIDApOworICAgIGF1dG8qIG9yaWdpbmFsRm9udCA9IHByaW1hcnlSYW5nZXMuZm9u
dEZvckNoYXJhY3RlcihjKTsKKyAgICBpZiAoIW9yaWdpbmFsRm9udCkKKyAgICAgICAgb3JpZ2lu
YWxGb250ID0gJnByaW1hcnlSYW5nZXMuZm9udEZvckZpcnN0UmFuZ2UoKTsKKworICAgIFJlZlB0
cjxGb250PiBzeXN0ZW1GYWxsYmFja0ZvbnQgPSBvcmlnaW5hbEZvbnQtPnN5c3RlbUZhbGxiYWNr
Rm9udEZvckNoYXJhY3RlcihjLCBkZXNjcmlwdGlvbiwgbV9pc0ZvclBsYXRmb3JtRm9udCk7Cisg
ICAgaWYgKCFzeXN0ZW1GYWxsYmFja0ZvbnQpCisgICAgICAgIHJldHVybiBHbHlwaERhdGEoKTsK
KworICAgIGlmIChzeXN0ZW1GYWxsYmFja0ZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9u
KCkgPT0gVmVydGljYWwgJiYgIXN5c3RlbUZhbGxiYWNrRm9udC0+aGFzVmVydGljYWxHbHlwaHMo
KSAmJiBGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjKSkKKyAgICAgICAgdmFy
aWFudCA9IEJyb2tlbklkZW9ncmFwaFZhcmlhbnQ7CisKKyAgICBHbHlwaERhdGEgZmFsbGJhY2tH
bHlwaERhdGE7CisgICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCkKKyAgICAgICAgZmFs
bGJhY2tHbHlwaERhdGEgPSBzeXN0ZW1GYWxsYmFja0ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3Rl
cihjKTsKKyAgICBlbHNlCisgICAgICAgIGZhbGxiYWNrR2x5cGhEYXRhID0gc3lzdGVtRmFsbGJh
Y2tGb250LT52YXJpYW50Rm9udChkZXNjcmlwdGlvbiwgdmFyaWFudCktPmdseXBoRGF0YUZvckNo
YXJhY3RlcihjKTsKKworICAgIGlmICh2YXJpYW50ID09IE5vcm1hbFZhcmlhbnQgJiYgZmFsbGJh
Y2tHbHlwaERhdGEuZm9udCkgeworICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9n
cmFwaE9yU3ltYm9sKGMpICYmIGZhbGxiYWNrR2x5cGhEYXRhLmZvbnQtPnBsYXRmb3JtRGF0YSgp
Lm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWZhbGxiYWNrR2x5cGhEYXRhLmZvbnQtPmlz
VGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkKKyAgICAgICAgICAgIGZhbGxiYWNrR2x5cGhEYXRh
ID0gZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oYywgZGVz
Y3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpLCBmYWxsYmFja0dseXBoRGF0YSk7Cisg
ICAgfQorCisgICAgLy8gS2VlcCB0aGUgc3lzdGVtIGZhbGxiYWNrIGZvbnRzIHdlIHVzZSBhbGl2
ZS4KKyAgICBpZiAoZmFsbGJhY2tHbHlwaERhdGEuZ2x5cGgpCisgICAgICAgIG1fc3lzdGVtRmFs
bGJhY2tGb250U2V0LmFkZChzeXN0ZW1GYWxsYmFja0ZvbnQucmVsZWFzZSgpKTsKKworICAgIHJl
dHVybiBmYWxsYmFja0dseXBoRGF0YTsKK30KKworR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBo
RGF0YUZvclZhcmlhbnQoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBGb250VmFyaWFudCB2YXJpYW50LCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KQoreworICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgIGF1dG8mIGZvbnRSYW5nZXMgPSByZWFsaXplRmFsbGJh
Y2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJhY2tJbmRleCsrKTsKKyAgICAgICAgaWYgKGZv
bnRSYW5nZXMuaXNOdWxsKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgYXV0byogZm9u
dCA9IGZvbnRSYW5nZXMuZm9udEZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgR2x5cGhEYXRhIGRh
dGEgPSBmb250ID8gZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDogR2x5cGhEYXRhKCk7
CisgICAgICAgIGlmIChkYXRhLmZvbnQpIHsKKyAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9u
dCBmdW5jdGlvbiBzaG91bGQgbm90IG5vcm1hbGx5IHJldHVybiAwLgorICAgICAgICAgICAgLy8g
QnV0IGlmIGl0IGRvZXMsIHdlIHdpbGwganVzdCByZW5kZXIgdGhlIGNhcGl0YWwgbGV0dGVyIGJp
Zy4KKyAgICAgICAgICAgIFJlZlB0cjxGb250PiB2YXJpYW50Rm9udCA9IGRhdGEuZm9udC0+dmFy
aWFudEZvbnQoZGVzY3JpcHRpb24sIHZhcmlhbnQpOworICAgICAgICAgICAgaWYgKCF2YXJpYW50
Rm9udCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKKworICAgICAgICAgICAgcmV0dXJu
IHZhcmlhbnRGb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gZ2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soYywgZGVzY3JpcHRpb24s
IHZhcmlhbnQpOworfQorCitHbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yTm9ybWFs
VmFyaWFudChVQ2hhcjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7
CisgICAgY29uc3QgdW5zaWduZWQgcGFnZU51bWJlciA9IGMgLyBHbHlwaFBhZ2U6OnNpemU7CisK
KyAgICBmb3IgKHVuc2lnbmVkIGZhbGxiYWNrSW5kZXggPSAwOyB0cnVlOyArK2ZhbGxiYWNrSW5k
ZXgpIHsKKyAgICAgICAgYXV0byYgZm9udFJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0
KGRlc2NyaXB0aW9uLCBmYWxsYmFja0luZGV4KTsKKyAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNO
dWxsKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgYXV0byogZm9udCA9IGZvbnRSYW5n
ZXMuZm9udEZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgYXV0byogcGFnZSA9IGZvbnQgPyBmb250
LT5nbHlwaFBhZ2UocGFnZU51bWJlcikgOiBudWxscHRyOworICAgICAgICBpZiAoIXBhZ2UpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBwYWdlLT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoYyk7CisgICAgICAgIGlmIChkYXRhLmZvbnQpIHsKKyAgICAgICAg
ICAgIGlmIChkYXRhLmZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGlj
YWwgJiYgIWRhdGEuZm9udC0+aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdseXBoRGF0YUZvck5vbkNKS0NoYXJhY3RlcldpdGhH
bHlwaE9yaWVudGF0aW9uKGMsIGRlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSwg
ZGF0YSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWRhdGEuZm9udC0+aGFzVmVydGljYWxHbHlw
aHMoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIGJyb2tlbiBpZGVvZ3JhcGgg
Zm9udCBkYXRhLiBUaGUgYnJva2VuIGlkZW9ncmFwaCBmb250IHdpbGwgdXNlIHRoZSBob3Jpem9u
dGFsIHdpZHRoIG9mIGdseXBocworICAgICAgICAgICAgICAgICAgICAvLyB0byBtYWtlIHN1cmUg
eW91IGdldCBhIHNxdWFyZSAoZXZlbiBmb3IgYnJva2VuIGdseXBocyBsaWtlIHN5bWJvbHMgdXNl
ZCBmb3IgcHVuY3R1YXRpb24pLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhEYXRh
Rm9yVmFyaWFudChjLCBkZXNjcmlwdGlvbiwgQnJva2VuSWRlb2dyYXBoVmFyaWFudCwgZmFsbGJh
Y2tJbmRleCk7CisgICAgICAgICAgICAgICAgfQorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAg
ICAgICAgICAgIGlmIChkYXRhLmZvbnQtPnBsYXRmb3JtRGF0YSgpLnN5bnRoZXRpY09ibGlxdWUo
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdseXBoRGF0YUZvckNKS0NoYXJhY3Rlcldp
dGhvdXRTeW50aGV0aWNJdGFsaWMoYywgZGF0YSk7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soYywgZGVzY3JpcHRpb24sIE5vcm1hbFZhcmlhbnQp
OworfQorCitzdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gZ2x5cGhQYWdlRnJvbUZvbnRSYW5nZXMo
dW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgRm9udFJhbmdlcyYgZm9udFJhbmdlcykKK3sKKyAg
ICBjb25zdCBGb250KiBmb250ID0gbnVsbHB0cjsKKyAgICBVQ2hhcjMyIHBhZ2VSYW5nZUZyb20g
PSBwYWdlTnVtYmVyICogR2x5cGhQYWdlOjpzaXplOworICAgIFVDaGFyMzIgcGFnZVJhbmdlVG8g
PSBwYWdlUmFuZ2VGcm9tICsgR2x5cGhQYWdlOjpzaXplIC0gMTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZm9udFJhbmdlcy5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRvJiByYW5n
ZSA9IGZvbnRSYW5nZXMucmFuZ2VBdChpKTsKKyAgICAgICAgaWYgKHJhbmdlLnRvKCkpIHsKKyAg
ICAgICAgICAgIGlmIChyYW5nZS5mcm9tKCkgPD0gcGFnZVJhbmdlRnJvbSAmJiBwYWdlUmFuZ2VU
byA8PSByYW5nZS50bygpKQorICAgICAgICAgICAgICAgIGZvbnQgPSAmcmFuZ2UuZm9udCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFmb250KQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmll
bnRhdGlvbigpID09IFZlcnRpY2FsKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJl
dHVybiBjb25zdF9jYXN0PEdseXBoUGFnZSo+KGZvbnQtPmdseXBoUGFnZShwYWdlTnVtYmVyKSk7
Cit9CisKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIz
MiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJp
YW50KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKHZhcmlhbnQg
IT0gQXV0b1ZhcmlhbnQpOworCisgICAgaWYgKHZhcmlhbnQgIT0gTm9ybWFsVmFyaWFudCkKKyAg
ICAgICAgcmV0dXJuIGdseXBoRGF0YUZvclZhcmlhbnQoYywgZGVzY3JpcHRpb24sIHZhcmlhbnQs
IDApOworCisgICAgY29uc3QgdW5zaWduZWQgcGFnZU51bWJlciA9IGMgLyBHbHlwaFBhZ2U6OnNp
emU7CisKKyAgICBSZWZQdHI8R2x5cGhQYWdlPiYgY2FjaGVkUGFnZSA9IHBhZ2VOdW1iZXIgPyBt
X2NhY2hlZFBhZ2VzLmFkZChwYWdlTnVtYmVyLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWUgOiBt
X2NhY2hlZFBhZ2VaZXJvOworICAgIGlmICghY2FjaGVkUGFnZSkKKyAgICAgICAgY2FjaGVkUGFn
ZSA9IGdseXBoUGFnZUZyb21Gb250UmFuZ2VzKHBhZ2VOdW1iZXIsIHJlYWxpemVGYWxsYmFja1Jh
bmdlc0F0KGRlc2NyaXB0aW9uLCAwKSk7CisKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhID0gY2Fj
aGVkUGFnZSA/IGNhY2hlZFBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKSA6IEdseXBoRGF0
YSgpOworICAgIGlmICghZ2x5cGhEYXRhLmdseXBoKSB7CisgICAgICAgIGlmICghY2FjaGVkUGFn
ZSkKKyAgICAgICAgICAgIGNhY2hlZFBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUZvck1peGVkRm9u
dHMoKTsKKyAgICAgICAgZWxzZSBpZiAoY2FjaGVkUGFnZS0+aXNJbW11dGFibGUoKSkKKyAgICAg
ICAgICAgIGNhY2hlZFBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUNvcHlGb3JNaXhlZEZvbnRzKCpj
YWNoZWRQYWdlKTsKKworICAgICAgICBnbHlwaERhdGEgPSBnbHlwaERhdGFGb3JOb3JtYWxWYXJp
YW50KGMsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgY2FjaGVkUGFnZS0+c2V0R2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKGMsIGdseXBoRGF0YS5nbHlwaCwgZ2x5cGhEYXRhLmZvbnQpOworICAgIH0KKyAg
ICByZXR1cm4gZ2x5cGhEYXRhOworfQorCit2b2lkIEZvbnRHbHlwaHM6OnBydW5lU3lzdGVtRmFs
bGJhY2tzKCkKK3sKKyAgICBpZiAobV9zeXN0ZW1GYWxsYmFja0ZvbnRTZXQuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisgICAgLy8gTXV0YWJsZSBnbHlwaCBwYWdlcyBtYXkgcmVmZXJlbmNl
IGZhbGxiYWNrIGZvbnRzLgorICAgIGlmIChtX2NhY2hlZFBhZ2VaZXJvICYmICFtX2NhY2hlZFBh
Z2VaZXJvLT5pc0ltbXV0YWJsZSgpKQorICAgICAgICBtX2NhY2hlZFBhZ2VaZXJvID0gbnVsbHB0
cjsKKyAgICBtX2NhY2hlZFBhZ2VzLnJlbW92ZUlmKFtdKGRlY2x0eXBlKG1fY2FjaGVkUGFnZXMp
OjpLZXlWYWx1ZVBhaXJUeXBlJiBrZXlBbmRWYWx1ZSkgeworICAgICAgICByZXR1cm4gIWtleUFu
ZFZhbHVlLnZhbHVlLT5pc0ltbXV0YWJsZSgpOworICAgIH0pOworICAgIG1fc3lzdGVtRmFsbGJh
Y2tGb250U2V0LmNsZWFyKCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCSh3b3JraW5nIGNvcHkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJGb250R2x5cGhzLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGVGb250
cy5oIgogCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
QEAgLTM2LDcgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogCi1Gb250R2x5cGhzOjpG
b250R2x5cGhzKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCitGb250Q2Fz
Y2FkZUZvbnRzOjpGb250Q2FzY2FkZUZvbnRzKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250
U2VsZWN0b3IpCiAgICAgOiBtX2NhY2hlZFByaW1hcnlGb250KDApCiAgICAgLCBtX2ZvbnRTZWxl
Y3Rvcihmb250U2VsZWN0b3IpCiAgICAgLCBtX2ZvbnRTZWxlY3RvclZlcnNpb24obV9mb250U2Vs
ZWN0b3IgPyBtX2ZvbnRTZWxlY3Rvci0+dmVyc2lvbigpIDogMCkKQEAgLTQ0LDcgKzQ0LDcgQEAg
Rm9udEdseXBoczo6Rm9udEdseXBocyhQYXNzUmVmUHRyPEZvbnRTZQogewogfQogCi1Gb250R2x5
cGhzOjpGb250R2x5cGhzKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKK0Zv
bnRDYXNjYWRlRm9udHM6OkZvbnRDYXNjYWRlRm9udHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
cGxhdGZvcm1EYXRhKQogICAgIDogbV9jYWNoZWRQcmltYXJ5Rm9udCgwKQogICAgICwgbV9mb250
U2VsZWN0b3IoMCkKICAgICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbigwKQpAQCAtNTQsMTEgKzU0
LDExIEBAIEZvbnRHbHlwaHM6OkZvbnRHbHlwaHMoY29uc3QgRm9udFBsYXRmb3IKICAgICBtX3Jl
YWxpemVkRmFsbGJhY2tSYW5nZXMuYXBwZW5kKEZvbnRSYW5nZXMoZm9udENhY2hlKCkuZm9udEZv
clBsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEpKSk7CiB9CiAKLUZvbnRHbHlwaHM6On5Gb250R2x5
cGhzKCkKK0ZvbnRDYXNjYWRlRm9udHM6On5Gb250Q2FzY2FkZUZvbnRzKCkKIHsKIH0KIAotdm9p
ZCBGb250R2x5cGhzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uKQordm9pZCBGb250Q2FzY2FkZUZvbnRzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewogICAgIGF1dG8mIHByaW1hcnlSYW5nZXMgPSBy
ZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7CiAgICAgdW5zaWduZWQgbnVt
UmFuZ2VzID0gcHJpbWFyeVJhbmdlcy5zaXplKCk7CkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgRm9u
dEdseXBoczo6ZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm8KICAgICAgICAgbV9waXRjaCA9IFZhcmlh
YmxlUGl0Y2g7CiB9CiAKLWJvb2wgRm9udEdseXBoczo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBj
b25zdAorYm9vbCBGb250Q2FzY2FkZUZvbnRzOjppc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0
CiB7CiAgICAgZm9yIChhdXRvJiBmb250UmFuZ2VzIDogbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2Vz
KSB7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTG9hZGluZygpKQpAQCAtOTksNyArOTksNyBA
QCBzdGF0aWMgRm9udFJhbmdlcyByZWFsaXplTmV4dEZhbGxiYWNrKGNvCiAgICAgcmV0dXJuIEZv
bnRSYW5nZXMoZm9udENhY2hlKCkuc2ltaWxhckZvbnQoZGVzY3JpcHRpb24pKTsKIH0KIAotY29u
c3QgRm9udFJhbmdlcyYgRm9udEdseXBoczo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCitjb25zdCBGb250
UmFuZ2VzJiBGb250Q2FzY2FkZUZvbnRzOjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCB1bnNpZ25lZCBpbmRleCkKIHsKICAgICBpZiAo
aW5kZXggPCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4g
bV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzW2luZGV4XTsKQEAgLTI1Miw3ICsyNTIsNyBAQCBzdGF0
aWMgR2x5cGhEYXRhIGdseXBoRGF0YUZvck5vbkNKS0NoYXJhCiAgICAgcmV0dXJuIGRhdGE7CiB9
CiAKLUdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hh
cjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZh
cmlhbnQpCitHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFs
bGJhY2soVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250
VmFyaWFudCB2YXJpYW50KQogewogICAgIC8vIFN5c3RlbSBmYWxsYmFjayBpcyBjaGFyYWN0ZXIt
ZGVwZW5kZW50LgogICAgIGF1dG8mIHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5n
ZXNBdChkZXNjcmlwdGlvbiwgMCk7CkBAIC0yODUsNyArMjg1LDcgQEAgR2x5cGhEYXRhIEZvbnRH
bHlwaHM6OmdseXBoRGF0YUZvclN5c3RlbQogICAgIHJldHVybiBmYWxsYmFja0dseXBoRGF0YTsK
IH0KIAotR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiBj
LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50
LCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KQorR2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6Omds
eXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50LCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KQogewog
ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGF1dG8mIGZvbnRSYW5nZXMgPSByZWFsaXplRmFs
bGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJhY2tJbmRleCsrKTsKQEAgLTMwNyw3ICsz
MDcsNyBAQCBHbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yVmFyaWFuCiAgICAgcmV0
dXJuIGdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKGMsIGRlc2NyaXB0aW9uLCB2YXJpYW50KTsK
IH0KIAotR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoVUNo
YXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQorR2x5cGhEYXRhIEZv
bnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoVUNoYXIzMiBjLCBjb25z
dCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewogICAgIGNvbnN0IHVuc2lnbmVkIHBh
Z2VOdW1iZXIgPSBjIC8gR2x5cGhQYWdlOjpzaXplOwogCkBAIC0zNjUsNyArMzY1LDcgQEAgc3Rh
dGljIFJlZlB0cjxHbHlwaFBhZ2U+IGdseXBoUGFnZUZyb21GbwogICAgIHJldHVybiBjb25zdF9j
YXN0PEdseXBoUGFnZSo+KGZvbnQtPmdseXBoUGFnZShwYWdlTnVtYmVyKSk7CiB9CiAKLUdseXBo
RGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KQorR2x5cGhE
YXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQpCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQodmFyaWFudCAhPSBBdXRv
VmFyaWFudCk7CkBAIC0zOTIsNyArMzkyLDcgQEAgR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBo
RGF0YUZvckNoYXJhYwogICAgIHJldHVybiBnbHlwaERhdGE7CiB9CiAKLXZvaWQgRm9udEdseXBo
czo6cHJ1bmVTeXN0ZW1GYWxsYmFja3MoKQordm9pZCBGb250Q2FzY2FkZUZvbnRzOjpwcnVuZVN5
c3RlbUZhbGxiYWNrcygpCiB7CiAgICAgaWYgKG1fc3lzdGVtRmFsbGJhY2tGb250U2V0LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGVGb250cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaAkocmV2aXNpb24gMTgwMjY0KQkoZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmg6MTgwMjY0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDEwLCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lm
bmRlZiBGb250R2x5cGhzX2gKKyNkZWZpbmUgRm9udEdseXBoc19oCisKKyNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiRm9udFJhbmdlcy5oIgorI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgor
I2luY2x1ZGUgIkdseXBoUGFnZS5oIgorI2luY2x1ZGUgIldpZHRoQ2FjaGUuaCIKKyNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKKyNpZiBQTEFU
Rk9STShJT1MpCisjaW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgorI2VuZGlmCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW50UmVjdDsKK2Ns
YXNzIEZvbnREZXNjcmlwdGlvbjsKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGE7CitjbGFzcyBGb250
U2VsZWN0b3I7CisKK2NsYXNzIEZvbnRHbHlwaHMgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250R2x5
cGhzPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9udEdseXBocyk7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxGb250R2x5cGhzPiBjcmVhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+
IGZvbnRTZWxlY3RvcikgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBGb250R2x5cGhzKGZvbnRTZWxl
Y3RvcikpOyB9CisgICAgc3RhdGljIFJlZjxGb250R2x5cGhzPiBjcmVhdGVGb3JQbGF0Zm9ybUZv
bnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKSB7IHJldHVybiBhZG9wdFJl
ZigqbmV3IEZvbnRHbHlwaHMocGxhdGZvcm1EYXRhKSk7IH0KKworICAgIFdFQkNPUkVfRVhQT1JU
IH5Gb250R2x5cGhzKCk7CisKKyAgICBib29sIGlzRm9yUGxhdGZvcm1Gb250KCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0ZvclBsYXRmb3JtRm9udDsgfQorCisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZv
ckNoYXJhY3RlcihVQ2hhcjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBGb250VmFyaWFudCk7
CisKKyAgICBib29sIGlzRml4ZWRQaXRjaChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKKyAgICB2
b2lkIGRldGVybWluZVBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworCisgICAgYm9vbCBp
c0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0OworCisgICAgRm9udFNlbGVjdG9yKiBmb250U2Vs
ZWN0b3IoKSB7IHJldHVybiBtX2ZvbnRTZWxlY3Rvci5nZXQoKTsgfQorICAgIC8vIEZJWE1FOiBJ
dCBzaG91bGQgYmUgcG9zc2libGUgdG8gY29tYmluZSBmb250U2VsZWN0b3JWZXJzaW9uIGFuZCBn
ZW5lcmF0aW9uLgorICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvclZlcnNpb24oKSBjb25zdCB7IHJl
dHVybiBtX2ZvbnRTZWxlY3RvclZlcnNpb247IH0KKyAgICB1bnNpZ25lZCBnZW5lcmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9nZW5lcmF0aW9uOyB9CisKKyAgICBXaWR0aENhY2hlJiB3aWR0aENh
Y2hlKCkgeyByZXR1cm4gbV93aWR0aENhY2hlOyB9CisgICAgY29uc3QgV2lkdGhDYWNoZSYgd2lk
dGhDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhDYWNoZTsgfQorCisgICAgY29uc3QgRm9u
dCYgcHJpbWFyeUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CisgICAgV0VCQ09SRV9FWFBP
UlQgY29uc3QgRm9udFJhbmdlcyYgcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udERl
c2NyaXB0aW9uJiwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCk7CisKKyAgICB2b2lkIHBydW5lU3lz
dGVtRmFsbGJhY2tzKCk7CisKK3ByaXZhdGU6CisgICAgRm9udEdseXBocyhQYXNzUmVmUHRyPEZv
bnRTZWxlY3Rvcj4pOworICAgIEZvbnRHbHlwaHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwor
CisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIsIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50KTsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRh
Rm9yTm9ybWFsVmFyaWFudChVQ2hhcjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mKTsKKyAgICBH
bHlwaERhdGEgZ2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMyLCBjb25zdCBGb250RGVzY3JpcHRp
b24mLCBGb250VmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCk7CisKKyAgICBWZWN0b3I8
Rm9udFJhbmdlcywgMT4gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzOworICAgIHVuc2lnbmVkIG1f
bGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCB7IDAgfTsKKworICAgIFJlZlB0cjxHbHlwaFBhZ2U+
IG1fY2FjaGVkUGFnZVplcm87CisgICAgSGFzaE1hcDxpbnQsIFJlZlB0cjxHbHlwaFBhZ2U+PiBt
X2NhY2hlZFBhZ2VzOworCisgICAgSGFzaFNldDxSZWZQdHI8Rm9udD4+IG1fc3lzdGVtRmFsbGJh
Y2tGb250U2V0OworCisgICAgY29uc3QgRm9udCogbV9jYWNoZWRQcmltYXJ5Rm9udDsKKyAgICBS
ZWZQdHI8Rm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKKworICAgIFdpZHRoQ2FjaGUgbV93
aWR0aENhY2hlOworCisgICAgdW5zaWduZWQgbV9mb250U2VsZWN0b3JWZXJzaW9uOworICAgIHVu
c2lnbmVkIHNob3J0IG1fZ2VuZXJhdGlvbjsKKyAgICBQaXRjaCBtX3BpdGNoIHsgVW5rbm93blBp
dGNoIH07CisgICAgYm9vbCBtX2lzRm9yUGxhdGZvcm1Gb250IHsgZmFsc2UgfTsKK307CisKK2lu
bGluZSBib29sIEZvbnRHbHlwaHM6OmlzRml4ZWRQaXRjaChjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uKQoreworICAgIGlmIChtX3BpdGNoID09IFVua25vd25QaXRjaCkKKyAgICAg
ICAgZGV0ZXJtaW5lUGl0Y2goZGVzY3JpcHRpb24pOworICAgIHJldHVybiBtX3BpdGNoID09IEZp
eGVkUGl0Y2g7Cit9OworCitpbmxpbmUgY29uc3QgRm9udCYgRm9udEdseXBoczo6cHJpbWFyeUZv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIGlmICghbV9jYWNoZWRQcmltYXJ5Rm9udCkgeworICAgICAgICBh
dXRvJiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24s
IDApOworICAgICAgICBtX2NhY2hlZFByaW1hcnlGb250ID0gcHJpbWFyeVJhbmdlcy5mb250Rm9y
Q2hhcmFjdGVyKCcgJyk7CisgICAgICAgIGlmICghbV9jYWNoZWRQcmltYXJ5Rm9udCkKKyAgICAg
ICAgICAgIG1fY2FjaGVkUHJpbWFyeUZvbnQgPSAmcHJpbWFyeVJhbmdlcy5mb250Rm9yRmlyc3RS
YW5nZSgpOworICAgIH0KKyAgICByZXR1cm4gKm1fY2FjaGVkUHJpbWFyeUZvbnQ7Cit9CisKK30K
KworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZUZvbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGVGb250cy5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4
LDggKzE4LDggQEAKICAqCiAgKi8KIAotI2lmbmRlZiBGb250R2x5cGhzX2gKLSNkZWZpbmUgRm9u
dEdseXBoc19oCisjaWZuZGVmIEZvbnRDYXNjYWRlRm9udHNfaAorI2RlZmluZSBGb250Q2FzY2Fk
ZUZvbnRzX2gKIAogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250UmFuZ2VzLmgiCkBA
IC00MSwxMyArNDEsMTMgQEAgY2xhc3MgRm9udERlc2NyaXB0aW9uOwogY2xhc3MgRm9udFBsYXRm
b3JtRGF0YTsKIGNsYXNzIEZvbnRTZWxlY3RvcjsKIAotY2xhc3MgRm9udEdseXBocyA6IHB1Ymxp
YyBSZWZDb3VudGVkPEZvbnRHbHlwaHM+IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250
R2x5cGhzKTsKK2NsYXNzIEZvbnRDYXNjYWRlRm9udHMgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250
Q2FzY2FkZUZvbnRzPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9udENhc2NhZGVGb250
cyk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGb250R2x5cGhzPiBjcmVhdGUoUGFzc1JlZlB0
cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBGb250
R2x5cGhzKGZvbnRTZWxlY3RvcikpOyB9Ci0gICAgc3RhdGljIFJlZjxGb250R2x5cGhzPiBjcmVh
dGVGb3JQbGF0Zm9ybUZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKSB7
IHJldHVybiBhZG9wdFJlZigqbmV3IEZvbnRHbHlwaHMocGxhdGZvcm1EYXRhKSk7IH0KKyAgICBz
dGF0aWMgUmVmPEZvbnRDYXNjYWRlRm9udHM+IGNyZWF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rv
cj4gZm9udFNlbGVjdG9yKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEZvbnRDYXNjYWRlRm9udHMo
Zm9udFNlbGVjdG9yKSk7IH0KKyAgICBzdGF0aWMgUmVmPEZvbnRDYXNjYWRlRm9udHM+IGNyZWF0
ZUZvclBsYXRmb3JtRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpIHsg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRm9udENhc2NhZGVGb250cyhwbGF0Zm9ybURhdGEpKTsgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgfkZvbnRHbHlwaHMoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB+
Rm9udENhc2NhZGVGb250cygpOwogCiAgICAgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNGb3JQbGF0Zm9ybUZvbnQ7IH0KIApAQCAtNzIsOCArNzIsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBwcnVuZVN5c3RlbUZhbGxiYWNrcygpOwogCiBwcml2YXRlOgotICAgIEZv
bnRHbHlwaHMoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKLSAgICBGb250R2x5cGhzKGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmKTsKKyAgICBGb250Q2FzY2FkZUZvbnRzKFBhc3NSZWZQdHI8Rm9u
dFNlbGVjdG9yPik7CisgICAgRm9udENhc2NhZGVGb250cyhjb25zdCBGb250UGxhdGZvcm1EYXRh
Jik7CiAKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiwg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQpOwogICAgIEdseXBoRGF0YSBnbHlw
aERhdGFGb3JOb3JtYWxWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwpA
QCAtOTgsMTQgKzk4LDE0IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzRm9yUGxhdGZvcm1Gb250
IHsgZmFsc2UgfTsKIH07CiAKLWlubGluZSBib29sIEZvbnRHbHlwaHM6OmlzRml4ZWRQaXRjaChj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoraW5saW5lIGJvb2wgRm9udENhc2Nh
ZGVGb250czo6aXNGaXhlZFBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24p
CiB7CiAgICAgaWYgKG1fcGl0Y2ggPT0gVW5rbm93blBpdGNoKQogICAgICAgICBkZXRlcm1pbmVQ
aXRjaChkZXNjcmlwdGlvbik7CiAgICAgcmV0dXJuIG1fcGl0Y2ggPT0gRml4ZWRQaXRjaDsKIH07
CiAKLWlubGluZSBjb25zdCBGb250JiBGb250R2x5cGhzOjpwcmltYXJ5Rm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoraW5saW5lIGNvbnN0IEZvbnQmIEZvbnRDYXNjYWRl
Rm9udHM6OnByaW1hcnlGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBpZiAoIW1fY2FjaGVkUHJpbWFyeUZv
bnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRH
bHlwaHMuY3BwCShyZXZpc2lvbiAxODAyNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250R2x5cGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0MDggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAxMy0yMDE1IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udEdseXBocy5oIgotCi0jaW5j
bHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJH
bHlwaFBhZ2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0KLUZvbnRHbHlwaHM6OkZvbnRH
bHlwaHMoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKLSAgICA6IG1fY2Fj
aGVkUHJpbWFyeUZvbnQoMCkKLSAgICAsIG1fZm9udFNlbGVjdG9yKGZvbnRTZWxlY3RvcikKLSAg
ICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbihtX2ZvbnRTZWxlY3RvciA/IG1fZm9udFNlbGVjdG9y
LT52ZXJzaW9uKCkgOiAwKQotICAgICwgbV9nZW5lcmF0aW9uKGZvbnRDYWNoZSgpLmdlbmVyYXRp
b24oKSkKLXsKLX0KLQotRm9udEdseXBoczo6Rm9udEdseXBocyhjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBwbGF0Zm9ybURhdGEpCi0gICAgOiBtX2NhY2hlZFByaW1hcnlGb250KDApCi0gICAgLCBt
X2ZvbnRTZWxlY3RvcigwKQotICAgICwgbV9mb250U2VsZWN0b3JWZXJzaW9uKDApCi0gICAgLCBt
X2dlbmVyYXRpb24oZm9udENhY2hlKCkuZ2VuZXJhdGlvbigpKQotICAgICwgbV9pc0ZvclBsYXRm
b3JtRm9udCh0cnVlKQotewotICAgIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5hcHBlbmQoRm9u
dFJhbmdlcyhmb250Q2FjaGUoKS5mb250Rm9yUGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkpKTsK
LX0KLQotRm9udEdseXBoczo6fkZvbnRHbHlwaHMoKQotewotfQotCi12b2lkIEZvbnRHbHlwaHM6
OmRldGVybWluZVBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCi17Ci0g
ICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0
aW9uLCAwKTsKLSAgICB1bnNpZ25lZCBudW1SYW5nZXMgPSBwcmltYXJ5UmFuZ2VzLnNpemUoKTsK
LSAgICBpZiAobnVtUmFuZ2VzID09IDEpCi0gICAgICAgIG1fcGl0Y2ggPSBwcmltYXJ5UmFuZ2Vz
LnJhbmdlQXQoMCkuZm9udCgpLnBpdGNoKCk7Ci0gICAgZWxzZQotICAgICAgICBtX3BpdGNoID0g
VmFyaWFibGVQaXRjaDsKLX0KLQotYm9vbCBGb250R2x5cGhzOjppc0xvYWRpbmdDdXN0b21Gb250
cygpIGNvbnN0Ci17Ci0gICAgZm9yIChhdXRvJiBmb250UmFuZ2VzIDogbV9yZWFsaXplZEZhbGxi
YWNrUmFuZ2VzKSB7Ci0gICAgICAgIGlmIChmb250UmFuZ2VzLmlzTG9hZGluZygpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGlj
IEZvbnRSYW5nZXMgcmVhbGl6ZU5leHRGYWxsYmFjayhjb25zdCBGb250RGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCB1bnNpZ25lZCYgaW5kZXgsIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQot
ewotICAgIEFTU0VSVChpbmRleCA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCkpOwotCi0gICAg
d2hpbGUgKGluZGV4IDwgZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKSkgewotICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGZhbWlseSA9IGRlc2NyaXB0aW9uLmZhbWlseUF0KGluZGV4KyspOwot
ICAgICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBpZiAoZm9udFNlbGVjdG9yKSB7Ci0gICAgICAgICAgICBhdXRvIHJhbmdlcyA9IGZvbnRT
ZWxlY3Rvci0+Zm9udFJhbmdlc0ZvckZhbWlseShkZXNjcmlwdGlvbiwgZmFtaWx5KTsKLSAgICAg
ICAgICAgIGlmICghcmFuZ2VzLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiByYW5n
ZXM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGF1dG8gZm9udCA9IGZvbnRDYWNoZSgpLmZvbnRG
b3JGYW1pbHkoZGVzY3JpcHRpb24sIGZhbWlseSkpCi0gICAgICAgICAgICByZXR1cm4gRm9udFJh
bmdlcyhXVEY6Om1vdmUoZm9udCkpOwotICAgIH0KLSAgICAvLyBXZSBkaWRuJ3QgZmluZCBhIGZv
bnQuIFRyeSB0byBmaW5kIGEgc2ltaWxhciBmb250IHVzaW5nIG91ciBvd24gc3BlY2lmaWMga25v
d2xlZGdlIGFib3V0IG91ciBwbGF0Zm9ybS4KLSAgICAvLyBGb3IgZXhhbXBsZSBvbiBPUyBYLCB3
ZSBrbm93IHRvIG1hcCBhbnkgZmFtaWxpZXMgY29udGFpbmluZyB0aGUgd29yZHMgQXJhYmljLCBQ
YXNodG8sIG9yIFVyZHUgdG8gdGhlCi0gICAgLy8gR2VlemEgUHJvIGZvbnQuCi0gICAgcmV0dXJu
IEZvbnRSYW5nZXMoZm9udENhY2hlKCkuc2ltaWxhckZvbnQoZGVzY3JpcHRpb24pKTsKLX0KLQot
Y29uc3QgRm9udFJhbmdlcyYgRm9udEdseXBoczo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCi17Ci0gICAg
aWYgKGluZGV4IDwgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLnNpemUoKSkKLSAgICAgICAgcmV0
dXJuIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlc1tpbmRleF07Ci0KLSAgICBBU1NFUlQoaW5kZXgg
PT0gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLnNpemUoKSk7Ci0gICAgQVNTRVJUKGZvbnRDYWNo
ZSgpLmdlbmVyYXRpb24oKSA9PSBtX2dlbmVyYXRpb24pOwotCi0gICAgbV9yZWFsaXplZEZhbGxi
YWNrUmFuZ2VzLmFwcGVuZChGb250UmFuZ2VzKCkpOwotICAgIGF1dG8mIGZvbnRSYW5nZXMgPSBt
X3JlYWxpemVkRmFsbGJhY2tSYW5nZXMubGFzdCgpOwotCi0gICAgaWYgKCFpbmRleCkgewotICAg
ICAgICBmb250UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxsYmFjayhkZXNjcmlwdGlvbiwgbV9sYXN0
UmVhbGl6ZWRGYWxsYmFja0luZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7Ci0gICAgICAgIGlm
IChmb250UmFuZ2VzLmlzTnVsbCgpICYmIG1fZm9udFNlbGVjdG9yKQotICAgICAgICAgICAgZm9u
dFJhbmdlcyA9IG1fZm9udFNlbGVjdG9yLT5mb250UmFuZ2VzRm9yRmFtaWx5KGRlc2NyaXB0aW9u
LCBzdGFuZGFyZEZhbWlseSk7Ci0gICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQotICAg
ICAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMoZm9udENhY2hlKCkubGFzdFJlc29ydEZh
bGxiYWNrRm9udChkZXNjcmlwdGlvbikpOwotICAgICAgICByZXR1cm4gZm9udFJhbmdlczsKLSAg
ICB9Ci0KLSAgICBpZiAobV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IDwgZGVzY3JpcHRpb24u
ZmFtaWx5Q291bnQoKSkKLSAgICAgICAgZm9udFJhbmdlcyA9IHJlYWxpemVOZXh0RmFsbGJhY2so
ZGVzY3JpcHRpb24sIG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCwgbV9mb250U2VsZWN0b3Iu
Z2V0KCkpOwotCi0gICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkgJiYgbV9mb250U2VsZWN0b3Ip
IHsKLSAgICAgICAgQVNTRVJUKG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCA+PSBkZXNjcmlw
dGlvbi5mYW1pbHlDb3VudCgpKTsKLQotICAgICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JGYWxs
YmFja0luZGV4ID0gbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IC0gZGVzY3JpcHRpb24uZmFt
aWx5Q291bnQoKTsKLSAgICAgICAgaWYgKGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXggPT0gbV9m
b250U2VsZWN0b3ItPmZhbGxiYWNrRm9udENvdW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZm9u
dFJhbmdlczsKLSAgICAgICAgKyttX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXg7Ci0gICAgICAg
IGZvbnRSYW5nZXMgPSBGb250UmFuZ2VzKG1fZm9udFNlbGVjdG9yLT5mYWxsYmFja0ZvbnRBdChk
ZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRleCkpOwotICAgIH0KLQotICAgIHJl
dHVybiBmb250UmFuZ2VzOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNJblJhbmdlKFVDaGFy
MzIgY2hhcmFjdGVyLCBVQ2hhcjMyIGxvd2VyQm91bmQsIFVDaGFyMzIgdXBwZXJCb3VuZCkKLXsK
LSAgICByZXR1cm4gY2hhcmFjdGVyID49IGxvd2VyQm91bmQgJiYgY2hhcmFjdGVyIDw9IHVwcGVy
Qm91bmQ7Ci19Ci0KLXN0YXRpYyBib29sIHNob3VsZElnbm9yZVJvdGF0aW9uKFVDaGFyMzIgY2hh
cmFjdGVyKQotewotICAgIGlmIChjaGFyYWN0ZXIgPT0gMHgwMDBBNyB8fCBjaGFyYWN0ZXIgPT0g
MHgwMDBBOSB8fCBjaGFyYWN0ZXIgPT0gMHgwMDBBRSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBpZiAoY2hhcmFjdGVyID09IDB4MDAwQjYgfHwgY2hhcmFjdGVyID09IDB4MDAwQkMgfHwg
Y2hhcmFjdGVyID09IDB4MDAwQkQgfHwgY2hhcmFjdGVyID09IDB4MDAwQkUpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDAyRTUsIDB4MDAy
RUIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBpZiAoaXNJblJhbmdlKGNoYXJh
Y3RlciwgMHgwMTEwMCwgMHgwMTFGRikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMTQwMSwg
MHgwMTY3RikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMTgwMCwgMHgwMThGRikpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGNoYXJhY3RlciA9PSAweDAyMDE2IHx8IGNoYXJh
Y3RlciA9PSAweDAyMDIwIHx8IGNoYXJhY3RlciA9PSAweDAyMDIxIHx8IGNoYXJhY3RlciA9PSAw
eDIwMzAgfHwgY2hhcmFjdGVyID09IDB4MDIwMzEpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIwM0IsIDB4MDIwM0QpIHx8IGNoYXJhY3Rl
ciA9PSAweDAyMDQyIHx8IGNoYXJhY3RlciA9PSAweDAyMDQ0IHx8IGNoYXJhY3RlciA9PSAweDAy
MDQ3Ci0gICAgICAgIHx8IGNoYXJhY3RlciA9PSAweDAyMDQ4IHx8IGNoYXJhY3RlciA9PSAweDAy
MDQ5IHx8IGNoYXJhY3RlciA9PSAweDIwNTEpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
aWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIwNjUsIDB4MDIwNjkpIHx8IGlzSW5SYW5nZShj
aGFyYWN0ZXIsIDB4MDIwREQsIDB4MDIwRTApCi0gICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0
ZXIsIDB4MDIwRTIsIDB4MDIwRTQpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIxMDAsIDB4
MDIxMTcpCi0gICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIxMTksIDB4MDIxMzEp
IHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIxMzMsIDB4MDIxM0YpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMTQ1LCAweDAyMTRB
KSB8fCBjaGFyYWN0ZXIgPT0gMHgwMjE0QyB8fCBjaGFyYWN0ZXIgPT0gMHgwMjE0RAotICAgICAg
ICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMTRGLCAweDAyMThGKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjMwMCwgMHgwMjMw
NykgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjMwQywgMHgwMjMxRikKLSAgICAgICAgfHwg
aXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjMyMiwgMHgwMjMyQikgfHwgaXNJblJhbmdlKGNoYXJh
Y3RlciwgMHgwMjM3RCwgMHgwMjM5QSkKLSAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3Rlciwg
MHgwMjNCNCwgMHgwMjNCNikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjNCQSwgMHgwMjND
RikKLSAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjNEMSwgMHgwMjNEQikgfHwg
aXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjNFMiwgMHgwMjRGRikpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDI1QTAsIDB4MDI2MTkpIHx8
IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDI2MjAsIDB4MDI3NjcpCi0gICAgICAgIHx8IGlzSW5S
YW5nZShjaGFyYWN0ZXIsIDB4MDI3NzYsIDB4MDI3OTMpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIs
IDB4MDJCMTIsIDB4MDJCMkYpCi0gICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDJC
NEQsIDB4MDJCRkYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDJFODAsIDB4MDMwMDcpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjaGFyYWN0ZXIgPT0gMHgwMzAxMiB8fCBj
aGFyYWN0ZXIgPT0gMHgwMzAxMyB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAzMDIwLCAweDAz
MDJGKQotICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAzMDMxLCAweDAzMDlGKSB8
fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAzMEExLCAweDAzMEZCKQotICAgICAgICB8fCBpc0lu
UmFuZ2UoY2hhcmFjdGVyLCAweDAzMEZELCAweDBBNENGKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwQTg0MCwgMHgwQTg3RikgfHwgaXNJ
blJhbmdlKGNoYXJhY3RlciwgMHgwQTk2MCwgMHgwQTk3RikKLSAgICAgICAgfHwgaXNJblJhbmdl
KGNoYXJhY3RlciwgMHgwQUMwMCwgMHgwRDdGRikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgw
RTAwMCwgMHgwRkFGRikpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGlzSW5SYW5n
ZShjaGFyYWN0ZXIsIDB4MEZFMTAsIDB4MEZFMUYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4
MEZFMzAsIDB4MEZFNDgpCi0gICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZFNTAs
IDB4MEZFNTcpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZFNUYsIDB4MEZFNjIpCi0gICAg
ICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZFNjcsIDB4MEZFNkYpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRjAxLCAweDBG
RjA3KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRjBBLCAweDBGRjBDKQotICAgICAgICB8
fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRjBFLCAweDBGRjE5KSB8fCBjaGFyYWN0ZXIgPT0g
MHgwRkYxQiB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRjFGLCAweDBGRjNBKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoY2hhcmFjdGVyID09IDB4MEZGM0MgfHwgY2hhcmFj
dGVyID09IDB4MEZGM0UpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGlzSW5SYW5n
ZShjaGFyYWN0ZXIsIDB4MEZGNDAsIDB4MEZGNUEpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4
MEZGRTAsIDB4MEZGRTIpCi0gICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZGRTQs
IDB4MEZGRTcpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZGRjAsIDB4MEZGRjgpCi0gICAg
ICAgIHx8IGNoYXJhY3RlciA9PSAweDBGRkZEKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDEzMDAwLCAweDEzNDJGKSB8fCBpc0luUmFuZ2Uo
Y2hhcmFjdGVyLCAweDFCMDAwLCAweDFCMEZGKQotICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFj
dGVyLCAweDFEMDAwLCAweDFEMUZGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDFEMzAwLCAw
eDFEMzdGKQotICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDFGMDAwLCAweDFGNjRG
KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDFGNjgwLCAweDFGNzdGKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgCi0gICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MjAwMDAsIDB4
MkZGRkQpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MzAwMDAsIDB4M0ZGRkQpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lmIFBMQVRGT1JNKENP
Q09BKQotc3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDSktDaGFyYWN0ZXJXaXRob3V0U3lu
dGhldGljSXRhbGljKFVDaGFyMzIgY2hhcmFjdGVyLCBHbHlwaERhdGEmIGRhdGEpCi17Ci0gICAg
R2x5cGhEYXRhIG5vbkl0YWxpY0RhdGEgPSBkYXRhLmZvbnQtPm5vblN5bnRoZXRpY0l0YWxpY0Zv
bnQoKS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Ci0gICAgaWYgKG5vbkl0YWxp
Y0RhdGEuZm9udCkKLSAgICAgICAgcmV0dXJuIG5vbkl0YWxpY0RhdGE7Ci0gICAgcmV0dXJuIGRh
dGE7Ci19Ci0jZW5kaWYKLSAgICAKLXN0YXRpYyBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yTm9uQ0pL
Q2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oVUNoYXIzMiBjaGFyYWN0ZXIsIE5vbkNKS0ds
eXBoT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGNvbnN0IEdseXBoRGF0YSYgZGF0YSkKLXsKLSAg
ICBpZiAob3JpZW50YXRpb24gPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblVwcmlnaHQgfHwgc2hv
dWxkSWdub3JlUm90YXRpb24oY2hhcmFjdGVyKSkgewotICAgICAgICBHbHlwaERhdGEgdXByaWdo
dERhdGEgPSBkYXRhLmZvbnQtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnQoKS0+Z2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKGNoYXJhY3Rlcik7Ci0gICAgICAgIC8vIElmIHRoZSBnbHlwaHMgYXJlIHRoZSBz
YW1lLCB0aGVuIHdlIGtub3cgd2UgY2FuIGp1c3QgdXNlIHRoZSBob3Jpem9udGFsIGdseXBoIHJv
dGF0ZWQgdmVydGljYWxseSB0byBiZSB1cHJpZ2h0LgotICAgICAgICBpZiAoZGF0YS5nbHlwaCA9
PSB1cHJpZ2h0RGF0YS5nbHlwaCkKLSAgICAgICAgICAgIHJldHVybiBkYXRhOwotICAgICAgICAv
LyBUaGUgZ2x5cGhzIGFyZSBkaXN0aW5jdCwgbWVhbmluZyB0aGF0IHRoZSBmb250IGhhcyBhIHZl
cnRpY2FsLXJpZ2h0IGdseXBoIGJha2VkIGludG8gaXQuIFdlIGNhbid0IHVzZSB0aGF0Ci0gICAg
ICAgIC8vIGdseXBoLCBzbyB3ZSBmYWxsIGJhY2sgdG8gdGhlIHVwcmlnaHQgZGF0YSBhbmQgdXNl
IHRoZSBob3Jpem9udGFsIGdseXBoLgotICAgICAgICBpZiAodXByaWdodERhdGEuZm9udCkKLSAg
ICAgICAgICAgIHJldHVybiB1cHJpZ2h0RGF0YTsKLSAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9u
ID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KSB7Ci0gICAgICAgIEdseXBo
RGF0YSB2ZXJ0aWNhbFJpZ2h0RGF0YSA9IGRhdGEuZm9udC0+dmVydGljYWxSaWdodE9yaWVudGF0
aW9uRm9udCgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKLSAgICAgICAgLy8g
SWYgdGhlIGdseXBocyBhcmUgZGlzdGluY3QsIHdlIHdpbGwgbWFrZSB0aGUgYXNzdW1wdGlvbiB0
aGF0IHRoZSBmb250IGhhcyBhIHZlcnRpY2FsLXJpZ2h0IGdseXBoIGJha2VkCi0gICAgICAgIC8v
IGludG8gaXQuCi0gICAgICAgIGlmIChkYXRhLmdseXBoICE9IHZlcnRpY2FsUmlnaHREYXRhLmds
eXBoKQotICAgICAgICAgICAgcmV0dXJuIGRhdGE7Ci0gICAgICAgIC8vIFRoZSBnbHlwaHMgYXJl
IGlkZW50aWNhbCwgbWVhbmluZyB0aGF0IHdlIHNob3VsZCBqdXN0IHVzZSB0aGUgaG9yaXpvbnRh
bCBnbHlwaC4KLSAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHREYXRhLmZvbnQpCi0gICAgICAgICAg
ICByZXR1cm4gdmVydGljYWxSaWdodERhdGE7Ci0gICAgfQotICAgIHJldHVybiBkYXRhOwotfQot
Ci1HbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIz
MiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJp
YW50KQotewotICAgIC8vIFN5c3RlbSBmYWxsYmFjayBpcyBjaGFyYWN0ZXItZGVwZW5kZW50Lgot
ICAgIGF1dG8mIHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlw
dGlvbiwgMCk7Ci0gICAgYXV0byogb3JpZ2luYWxGb250ID0gcHJpbWFyeVJhbmdlcy5mb250Rm9y
Q2hhcmFjdGVyKGMpOwotICAgIGlmICghb3JpZ2luYWxGb250KQotICAgICAgICBvcmlnaW5hbEZv
bnQgPSAmcHJpbWFyeVJhbmdlcy5mb250Rm9yRmlyc3RSYW5nZSgpOwotCi0gICAgUmVmUHRyPEZv
bnQ+IHN5c3RlbUZhbGxiYWNrRm9udCA9IG9yaWdpbmFsRm9udC0+c3lzdGVtRmFsbGJhY2tGb250
Rm9yQ2hhcmFjdGVyKGMsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250KTsKLSAgICBp
ZiAoIXN5c3RlbUZhbGxiYWNrRm9udCkKLSAgICAgICAgcmV0dXJuIEdseXBoRGF0YSgpOwotCi0g
ICAgaWYgKHN5c3RlbUZhbGxiYWNrRm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9
PSBWZXJ0aWNhbCAmJiAhc3lzdGVtRmFsbGJhY2tGb250LT5oYXNWZXJ0aWNhbEdseXBocygpICYm
IEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQotICAgICAgICB2YXJpYW50
ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsKLQotICAgIEdseXBoRGF0YSBmYWxsYmFja0dseXBo
RGF0YTsKLSAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50KQotICAgICAgICBmYWxsYmFj
a0dseXBoRGF0YSA9IHN5c3RlbUZhbGxiYWNrRm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMp
OwotICAgIGVsc2UKLSAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBzeXN0ZW1GYWxsYmFja0Zv
bnQtPnZhcmlhbnRGb250KGRlc2NyaXB0aW9uLCB2YXJpYW50KS0+Z2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKGMpOwotCi0gICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCAmJiBmYWxsYmFja0ds
eXBoRGF0YS5mb250KSB7Ci0gICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBo
T3JTeW1ib2woYykgJiYgZmFsbGJhY2tHbHlwaERhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3Jp
ZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhZmFsbGJhY2tHbHlwaERhdGEuZm9udC0+aXNUZXh0
T3JpZW50YXRpb25GYWxsYmFjaygpKQotICAgICAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBn
bHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihjLCBkZXNjcmlw
dGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCksIGZhbGxiYWNrR2x5cGhEYXRhKTsKLSAgICB9
Ci0KLSAgICAvLyBLZWVwIHRoZSBzeXN0ZW0gZmFsbGJhY2sgZm9udHMgd2UgdXNlIGFsaXZlLgot
ICAgIGlmIChmYWxsYmFja0dseXBoRGF0YS5nbHlwaCkKLSAgICAgICAgbV9zeXN0ZW1GYWxsYmFj
a0ZvbnRTZXQuYWRkKHN5c3RlbUZhbGxiYWNrRm9udC5yZWxlYXNlKCkpOwotCi0gICAgcmV0dXJu
IGZhbGxiYWNrR2x5cGhEYXRhOwotfQotCi1HbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRh
Rm9yVmFyaWFudChVQ2hhcjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24s
IEZvbnRWYXJpYW50IHZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpCi17Ci0gICAgd2hp
bGUgKHRydWUpIHsKLSAgICAgICAgYXV0byYgZm9udFJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jh
bmdlc0F0KGRlc2NyaXB0aW9uLCBmYWxsYmFja0luZGV4KyspOwotICAgICAgICBpZiAoZm9udFJh
bmdlcy5pc051bGwoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBhdXRvKiBmb250ID0g
Zm9udFJhbmdlcy5mb250Rm9yQ2hhcmFjdGVyKGMpOwotICAgICAgICBHbHlwaERhdGEgZGF0YSA9
IGZvbnQgPyBmb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYykgOiBHbHlwaERhdGEoKTsKLSAg
ICAgICAgaWYgKGRhdGEuZm9udCkgewotICAgICAgICAgICAgLy8gVGhlIHZhcmlhbnRGb250IGZ1
bmN0aW9uIHNob3VsZCBub3Qgbm9ybWFsbHkgcmV0dXJuIDAuCi0gICAgICAgICAgICAvLyBCdXQg
aWYgaXQgZG9lcywgd2Ugd2lsbCBqdXN0IHJlbmRlciB0aGUgY2FwaXRhbCBsZXR0ZXIgYmlnLgot
ICAgICAgICAgICAgUmVmUHRyPEZvbnQ+IHZhcmlhbnRGb250ID0gZGF0YS5mb250LT52YXJpYW50
Rm9udChkZXNjcmlwdGlvbiwgdmFyaWFudCk7Ci0gICAgICAgICAgICBpZiAoIXZhcmlhbnRGb250
KQotICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOwotCi0gICAgICAgICAgICByZXR1cm4gdmFy
aWFudEZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiBnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhjLCBkZXNjcmlwdGlvbiwgdmFy
aWFudCk7Ci19Ci0KLUdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JOb3JtYWxWYXJp
YW50KFVDaGFyMzIgYywgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKLXsKLSAg
ICBjb25zdCB1bnNpZ25lZCBwYWdlTnVtYmVyID0gYyAvIEdseXBoUGFnZTo6c2l6ZTsKLQotICAg
IGZvciAodW5zaWduZWQgZmFsbGJhY2tJbmRleCA9IDA7IHRydWU7ICsrZmFsbGJhY2tJbmRleCkg
ewotICAgICAgICBhdXRvJiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVz
Y3JpcHRpb24sIGZhbGxiYWNrSW5kZXgpOwotICAgICAgICBpZiAoZm9udFJhbmdlcy5pc051bGwo
KSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBhdXRvKiBmb250ID0gZm9udFJhbmdlcy5m
b250Rm9yQ2hhcmFjdGVyKGMpOwotICAgICAgICBhdXRvKiBwYWdlID0gZm9udCA/IGZvbnQtPmds
eXBoUGFnZShwYWdlTnVtYmVyKSA6IG51bGxwdHI7Ci0gICAgICAgIGlmICghcGFnZSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBHbHlwaERhdGEgZGF0YSA9IHBhZ2UtPmdseXBoRGF0
YUZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgaWYgKGRhdGEuZm9udCkgewotICAgICAgICAgICAg
aWYgKGRhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAm
JiAhZGF0YS5mb250LT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBo
T3JpZW50YXRpb24oYywgZGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpLCBkYXRh
KTsKLQotICAgICAgICAgICAgICAgIGlmICghZGF0YS5mb250LT5oYXNWZXJ0aWNhbEdseXBocygp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgYnJva2VuIGlkZW9ncmFwaCBmb250
IGRhdGEuIFRoZSBicm9rZW4gaWRlb2dyYXBoIGZvbnQgd2lsbCB1c2UgdGhlIGhvcml6b250YWwg
d2lkdGggb2YgZ2x5cGhzCi0gICAgICAgICAgICAgICAgICAgIC8vIHRvIG1ha2Ugc3VyZSB5b3Ug
Z2V0IGEgc3F1YXJlIChldmVuIGZvciBicm9rZW4gZ2x5cGhzIGxpa2Ugc3ltYm9scyB1c2VkIGZv
ciBwdW5jdHVhdGlvbikuCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaERhdGFGb3JW
YXJpYW50KGMsIGRlc2NyaXB0aW9uLCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50LCBmYWxsYmFja0lu
ZGV4KTsKLSAgICAgICAgICAgICAgICB9Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgICAg
ICAgICAgaWYgKGRhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkuc3ludGhldGljT2JsaXF1ZSgpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yQ0pLQ2hhcmFjdGVyV2l0aG91
dFN5bnRoZXRpY0l0YWxpYyhjLCBkYXRhKTsKLSNlbmRpZgotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICByZXR1cm4gZGF0YTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBnbHlw
aERhdGFGb3JTeXN0ZW1GYWxsYmFjayhjLCBkZXNjcmlwdGlvbiwgTm9ybWFsVmFyaWFudCk7Ci19
Ci0KLXN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2VGcm9tRm9udFJhbmdlcyh1bnNp
Z25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250UmFuZ2VzJiBmb250UmFuZ2VzKQotewotICAgIGNv
bnN0IEZvbnQqIGZvbnQgPSBudWxscHRyOwotICAgIFVDaGFyMzIgcGFnZVJhbmdlRnJvbSA9IHBh
Z2VOdW1iZXIgKiBHbHlwaFBhZ2U6OnNpemU7Ci0gICAgVUNoYXIzMiBwYWdlUmFuZ2VUbyA9IHBh
Z2VSYW5nZUZyb20gKyBHbHlwaFBhZ2U6OnNpemUgLSAxOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBmb250UmFuZ2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGF1dG8mIHJhbmdlID0g
Zm9udFJhbmdlcy5yYW5nZUF0KGkpOwotICAgICAgICBpZiAocmFuZ2UudG8oKSkgewotICAgICAg
ICAgICAgaWYgKHJhbmdlLmZyb20oKSA8PSBwYWdlUmFuZ2VGcm9tICYmIHBhZ2VSYW5nZVRvIDw9
IHJhbmdlLnRvKCkpCi0gICAgICAgICAgICAgICAgZm9udCA9ICZyYW5nZS5mb250KCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIWZvbnQpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0
aW9uKCkgPT0gVmVydGljYWwpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8R2x5cGhQYWdlKj4oZm9udC0+Z2x5cGhQYWdlKHBhZ2VOdW1iZXIpKTsKLX0K
LQotR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMs
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQodmFyaWFudCAhPSBB
dXRvVmFyaWFudCk7Ci0KLSAgICBpZiAodmFyaWFudCAhPSBOb3JtYWxWYXJpYW50KQotICAgICAg
ICByZXR1cm4gZ2x5cGhEYXRhRm9yVmFyaWFudChjLCBkZXNjcmlwdGlvbiwgdmFyaWFudCwgMCk7
Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBwYWdlTnVtYmVyID0gYyAvIEdseXBoUGFnZTo6c2l6ZTsK
LQotICAgIFJlZlB0cjxHbHlwaFBhZ2U+JiBjYWNoZWRQYWdlID0gcGFnZU51bWJlciA/IG1fY2Fj
aGVkUGFnZXMuYWRkKHBhZ2VOdW1iZXIsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZSA6IG1fY2Fj
aGVkUGFnZVplcm87Ci0gICAgaWYgKCFjYWNoZWRQYWdlKQotICAgICAgICBjYWNoZWRQYWdlID0g
Z2x5cGhQYWdlRnJvbUZvbnRSYW5nZXMocGFnZU51bWJlciwgcmVhbGl6ZUZhbGxiYWNrUmFuZ2Vz
QXQoZGVzY3JpcHRpb24sIDApKTsKLQotICAgIEdseXBoRGF0YSBnbHlwaERhdGEgPSBjYWNoZWRQ
YWdlID8gY2FjaGVkUGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDogR2x5cGhEYXRhKCk7
Ci0gICAgaWYgKCFnbHlwaERhdGEuZ2x5cGgpIHsKLSAgICAgICAgaWYgKCFjYWNoZWRQYWdlKQot
ICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250cygp
OwotICAgICAgICBlbHNlIGlmIChjYWNoZWRQYWdlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAg
ICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlQ29weUZvck1peGVkRm9udHMoKmNhY2hl
ZFBhZ2UpOwotCi0gICAgICAgIGdseXBoRGF0YSA9IGdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQo
YywgZGVzY3JpcHRpb24pOwotICAgICAgICBjYWNoZWRQYWdlLT5zZXRHbHlwaERhdGFGb3JDaGFy
YWN0ZXIoYywgZ2x5cGhEYXRhLmdseXBoLCBnbHlwaERhdGEuZm9udCk7Ci0gICAgfQotICAgIHJl
dHVybiBnbHlwaERhdGE7Ci19Ci0KLXZvaWQgRm9udEdseXBoczo6cHJ1bmVTeXN0ZW1GYWxsYmFj
a3MoKQotewotICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICAvLyBNdXRhYmxlIGdseXBoIHBhZ2VzIG1heSByZWZlcmVuY2UgZmFs
bGJhY2sgZm9udHMuCi0gICAgaWYgKG1fY2FjaGVkUGFnZVplcm8gJiYgIW1fY2FjaGVkUGFnZVpl
cm8tPmlzSW1tdXRhYmxlKCkpCi0gICAgICAgIG1fY2FjaGVkUGFnZVplcm8gPSBudWxscHRyOwot
ICAgIG1fY2FjaGVkUGFnZXMucmVtb3ZlSWYoW10oZGVjbHR5cGUobV9jYWNoZWRQYWdlcyk6Oktl
eVZhbHVlUGFpclR5cGUmIGtleUFuZFZhbHVlKSB7Ci0gICAgICAgIHJldHVybiAha2V5QW5kVmFs
dWUudmFsdWUtPmlzSW1tdXRhYmxlKCk7Ci0gICAgfSk7Ci0gICAgbV9zeXN0ZW1GYWxsYmFja0Zv
bnRTZXQuY2xlYXIoKTsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udEdseXBocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRHbHlwaHMuaAkocmV2aXNpb24gMTgwMjY0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEy
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDEwLCAyMDEzLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBGb250R2x5cGhzX2gKLSNk
ZWZpbmUgRm9udEdseXBoc19oCi0KLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udFJh
bmdlcy5oIgotI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkdseXBoUGFnZS5o
IgotI2luY2x1ZGUgIldpZHRoQ2FjaGUuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0KLSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSAi
V2ViQ29yZVRocmVhZC5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
R3JhcGhpY3NDb250ZXh0OwotY2xhc3MgSW50UmVjdDsKLWNsYXNzIEZvbnREZXNjcmlwdGlvbjsK
LWNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7Ci1jbGFzcyBGb250U2VsZWN0b3I7Ci0KLWNsYXNzIEZv
bnRHbHlwaHMgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250R2x5cGhzPiB7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRm9udEdseXBocyk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGb250R2x5
cGhzPiBjcmVhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikgeyByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGb250R2x5cGhzKGZvbnRTZWxlY3RvcikpOyB9Ci0gICAgc3RhdGlj
IFJlZjxGb250R2x5cGhzPiBjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYgcGxhdGZvcm1EYXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEZvbnRHbHlwaHMocGxh
dGZvcm1EYXRhKSk7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIH5Gb250R2x5cGhzKCk7Ci0KLSAg
ICBib29sIGlzRm9yUGxhdGZvcm1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9pc0ZvclBsYXRmb3Jt
Rm9udDsgfQotCi0gICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBj
b25zdCBGb250RGVzY3JpcHRpb24mLCBGb250VmFyaWFudCk7Ci0KLSAgICBib29sIGlzRml4ZWRQ
aXRjaChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKLSAgICB2b2lkIGRldGVybWluZVBpdGNoKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpOwotCi0gICAgYm9vbCBpc0xvYWRpbmdDdXN0b21Gb250cygp
IGNvbnN0OwotCi0gICAgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSB7IHJldHVybiBtX2Zv
bnRTZWxlY3Rvci5nZXQoKTsgfQotICAgIC8vIEZJWE1FOiBJdCBzaG91bGQgYmUgcG9zc2libGUg
dG8gY29tYmluZSBmb250U2VsZWN0b3JWZXJzaW9uIGFuZCBnZW5lcmF0aW9uLgotICAgIHVuc2ln
bmVkIGZvbnRTZWxlY3RvclZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX2ZvbnRTZWxlY3RvclZl
cnNpb247IH0KLSAgICB1bnNpZ25lZCBnZW5lcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9nZW5l
cmF0aW9uOyB9Ci0KLSAgICBXaWR0aENhY2hlJiB3aWR0aENhY2hlKCkgeyByZXR1cm4gbV93aWR0
aENhY2hlOyB9Ci0gICAgY29uc3QgV2lkdGhDYWNoZSYgd2lkdGhDYWNoZSgpIGNvbnN0IHsgcmV0
dXJuIG1fd2lkdGhDYWNoZTsgfQotCi0gICAgY29uc3QgRm9udCYgcHJpbWFyeUZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udFJhbmdlcyYg
cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgdW5zaWduZWQg
ZmFsbGJhY2tJbmRleCk7Ci0KLSAgICB2b2lkIHBydW5lU3lzdGVtRmFsbGJhY2tzKCk7Ci0KLXBy
aXZhdGU6Ci0gICAgRm9udEdseXBocyhQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOwotICAgIEZv
bnRHbHlwaHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotCi0gICAgR2x5cGhEYXRhIGdseXBo
RGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZv
bnRWYXJpYW50KTsKLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChVQ2hh
cjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mKTsKLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9y
VmFyaWFudChVQ2hhcjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBGb250VmFyaWFudCwgdW5z
aWduZWQgZmFsbGJhY2tJbmRleCk7Ci0KLSAgICBWZWN0b3I8Rm9udFJhbmdlcywgMT4gbV9yZWFs
aXplZEZhbGxiYWNrUmFuZ2VzOwotICAgIHVuc2lnbmVkIG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJ
bmRleCB7IDAgfTsKLQotICAgIFJlZlB0cjxHbHlwaFBhZ2U+IG1fY2FjaGVkUGFnZVplcm87Ci0g
ICAgSGFzaE1hcDxpbnQsIFJlZlB0cjxHbHlwaFBhZ2U+PiBtX2NhY2hlZFBhZ2VzOwotCi0gICAg
SGFzaFNldDxSZWZQdHI8Rm9udD4+IG1fc3lzdGVtRmFsbGJhY2tGb250U2V0OwotCi0gICAgY29u
c3QgRm9udCogbV9jYWNoZWRQcmltYXJ5Rm9udDsKLSAgICBSZWZQdHI8Rm9udFNlbGVjdG9yPiBt
X2ZvbnRTZWxlY3RvcjsKLQotICAgIFdpZHRoQ2FjaGUgbV93aWR0aENhY2hlOwotCi0gICAgdW5z
aWduZWQgbV9mb250U2VsZWN0b3JWZXJzaW9uOwotICAgIHVuc2lnbmVkIHNob3J0IG1fZ2VuZXJh
dGlvbjsKLSAgICBQaXRjaCBtX3BpdGNoIHsgVW5rbm93blBpdGNoIH07Ci0gICAgYm9vbCBtX2lz
Rm9yUGxhdGZvcm1Gb250IHsgZmFsc2UgfTsKLX07Ci0KLWlubGluZSBib29sIEZvbnRHbHlwaHM6
OmlzRml4ZWRQaXRjaChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQotewotICAg
IGlmIChtX3BpdGNoID09IFVua25vd25QaXRjaCkKLSAgICAgICAgZGV0ZXJtaW5lUGl0Y2goZGVz
Y3JpcHRpb24pOwotICAgIHJldHVybiBtX3BpdGNoID09IEZpeGVkUGl0Y2g7Ci19OwotCi1pbmxp
bmUgY29uc3QgRm9udCYgRm9udEdseXBoczo6cHJpbWFyeUZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlm
ICghbV9jYWNoZWRQcmltYXJ5Rm9udCkgewotICAgICAgICBhdXRvJiBwcmltYXJ5UmFuZ2VzID0g
cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApOwotICAgICAgICBtX2NhY2hl
ZFByaW1hcnlGb250ID0gcHJpbWFyeVJhbmdlcy5mb250Rm9yQ2hhcmFjdGVyKCcgJyk7Ci0gICAg
ICAgIGlmICghbV9jYWNoZWRQcmltYXJ5Rm9udCkKLSAgICAgICAgICAgIG1fY2FjaGVkUHJpbWFy
eUZvbnQgPSAmcHJpbWFyeVJhbmdlcy5mb250Rm9yRmlyc3RSYW5nZSgpOwotICAgIH0KLSAgICBy
ZXR1cm4gKm1fY2FjaGVkUHJpbWFyeUZvbnQ7Ci19Ci0KLX0KLQotI2VuZGlmCg==
</data>
<flag name="review"
          id="271775"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246836</attachid>
            <date>2015-02-18 12:09:01 -0800</date>
            <delta_ts>2015-02-18 12:38:41 -0800</delta_ts>
            <desc>patch</desc>
            <filename>rename-font-glyphs-5.patch</filename>
            <type>text/plain</type>
            <size>78797</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTAyLTE4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgRm9udEdseXBocyB0
byBGb250Q2FzY2FkZUZvbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDE3NTQKKworICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgor
CisgICAgICAgICJJdCBpcyBiZXR0ZXIgdGhhbiBJbXBsLiIKKworICAgICAgICBUaGUgcHVycG9z
ZSBvZiB0aGUgY2xhc3MgdG8gb3duIHRvIGNyZWF0ZSBhbmQgb3duIHRoZSByZWFsaXplZCBGb250
IGluc3RhbmNlcyBhbmQgdGhlIGFzc29jaWF0ZWQgY2FjaGVzCisgICAgICAgIGZvciBGb250Q2Fz
Y2FkZSBpbnN0YW5jZXMuCisKIDIwMTUtMDItMTggIFRpbW90aHkgSG9ydG9uICA8dGltb3RoeV9o
b3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBtb3JlIHJlZmVyZW5jZXMgdG8gV2Vi
Q29yZS5leHAuaW4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODAyNjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjA3MSwx
MCArMjA3MSwxMCBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGVGb250cy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZlYXR1cmVTZXR0aW5ncy5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmNwcAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRHbHlwaHMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFJhbmdlcy5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9HZW9tZXRyeVV0aWxpdGllcy5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkocmV2aXNpb24gMTgwMjY0KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtODIzOSw5ICs4MjM5LDkgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXEZvbnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3NcRm9udENhY2hlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnRDYXNjYWRlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnRDYXNjYWRlRm9udHMuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERlc2NyaXB0
aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XEZvbnRHZW5lcmljRmFtaWxpZXMuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcRm9udEdseXBocy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250RmVhdHVyZVNldHRpbmdzLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnRQbGF0Zm9ybURh
dGEuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
Rm9udFJhbmdlcy5jcHAiIC8+CkBAIC0xOTc3Niw5ICsxOTc3Niw5IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250LmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FjaGUuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnRDYXNjYWRlLmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FzY2FkZUZv
bnRzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xG
b250RGVzY3JpcHRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXEZvbnRHZW5lcmljRmFtaWxpZXMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnRHbHlwaHMuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnRGZWF0dXJlU2V0dGluZ3MuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnRNZXRyaWNz
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250
UGxhdGZvcm1EYXRhLmgiIC8+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODAyNjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTQ3MjQsOCArNDcyNCw4IEBACiAJCUIyQzNEQTY0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTUz
MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmNwcCAqLzsgfTsKIAkJQjJDM0RBNjUwRDAwNkNENjAw
RUY2RjI2IC8qIEZvbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyQzNEQTU0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNjYwRDAwNkNENjAwRUY2
RjI2IC8qIEZvbnREZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjJDM0RBNTUwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnREZXNjcmlwdGlv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUIy
QzNEQTY3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250R2x5cGhzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTU2MEQwMDZDRDYwMEVGNkYyNiAv
KiBGb250R2x5cGhzLmNwcCAqLzsgfTsKLQkJQjJDM0RBNjgwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRHbHlwaHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyQzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250R2x5cGhzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQjJDM0RBNjcwRDAwNkNENjAwRUY2
RjI2IC8qIEZvbnRDYXNjYWRlRm9udHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRl
Rm9udHMuY3BwICovOyB9OworCQlCMkMzREE2ODBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2Nh
ZGVGb250cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjJDM0RBNTcwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlRm9udHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2QjBEMDA2Q0Q2
MDBFRjZGMjYgLyogRm9udFNlbGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1QTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udFNlbGVjdG9y
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJD
M0RBNkMwRDAwNkNENjAwRUY2RjI2IC8qIEdseXBoQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1QjBEMDA2Q0Q2MDBFRjZGMjYgLyog
R2x5cGhCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlCMkM5NkQ4RDBCM0FGMkI3MDA1RTgwRUMgLyogSlNTVkdQYXRoU2VnQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzk2RDhD
MEIzQUYyQjcwMDVFODBFQyAvKiBKU1NWR1BhdGhTZWdDdXN0b20uY3BwICovOyB9OwpAQCAtMTIx
MjUsOCArMTIxMjUsOCBAQAogCQlCMkMzREE1MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTU0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyQzNEQTU1MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250RGVzY3JpcHRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnREZXNjcmlwdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkMzREE1NjBEMDA2Q0Q2MDBFRjZGMjYg
LyogRm9udEdseXBocy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Rm9udEdseXBocy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQzNEQTU3MEQw
MDZDRDYwMEVGNkYyNiAvKiBGb250R2x5cGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGb250R2x5cGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyQzNE
QTU2MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZUZvbnRzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q2FzY2FkZUZvbnRzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjJDM0RBNTcwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNj
YWRlRm9udHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYXNjYWRl
Rm9udHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBNUEwRDAwNkNENjAw
RUY2RjI2IC8qIEZvbnRTZWxlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRm9udFNlbGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTVC
MEQwMDZDRDYwMEVGNkYyNiAvKiBHbHlwaEJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gR2x5cGhCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjJDOTZEOEMwQjNBRjJCNzAwNUU4MEVDIC8qIEpTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNDk0LDggKzIwNDk0LDYgQEAKIAkJCQlC
Mjc1MzUzODBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuY3BwICovLAogCQkJCUIyNzUzNTM5MEIw
NTM4MTQwMDJDRTY0RiAvKiBDb2xvci5oICovLAogCQkJCTkzODJERjU3MTBBOEQ1QzkwMDkyNTY1
MiAvKiBDb2xvclNwYWNlLmggKi8sCi0JCQkJQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYXNjYWRlLmNwcCAqLywKLQkJCQlCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENh
c2NhZGUuaCAqLywKIAkJCQkyRDJGQzA1NDE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2Vu
ZXJhdGVkSW1hZ2UuY3BwICovLAogCQkJCTJEMkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9z
c2ZhZGVHZW5lcmF0ZWRJbWFnZS5oICovLAogCQkJCUE4Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAv
KiBEYXNoQXJyYXkuaCAqLywKQEAgLTIwNTI0LDE0ICsyMDUyMiwxNiBAQAogCQkJCUJDQjkyRDRF
MTI5MzU1MEIwMEM4Mzg3RiAvKiBGb250QmFzZWxpbmUuaCAqLywKIAkJCQlCMkMzREE1MTBEMDA2
Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmNwcCAqLywKIAkJCQlCMkMzREE1MjBEMDA2Q0Q2MDBF
RjZGMjYgLyogRm9udENhY2hlLmggKi8sCisJCQkJQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8q
IEZvbnRDYXNjYWRlLmNwcCAqLywKKwkJCQlCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9u
dENhc2NhZGUuaCAqLywKKwkJCQlCMkMzREE1NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2Nh
ZGVGb250cy5jcHAgKi8sCisJCQkJQjJDM0RBNTcwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNj
YWRlRm9udHMuaCAqLywKIAkJCQkzN0FDQ0U2MjBEQTJBQTk2MDA4OUU2MDIgLyogRm9udERlc2Ny
aXB0aW9uLmNwcCAqLywKIAkJCQlCMkMzREE1NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udERlc2Ny
aXB0aW9uLmggKi8sCiAJCQkJNEE2RTlGQzUxM0MxN0Q1NzAwNDZBN0Y4IC8qIEZvbnRGZWF0dXJl
U2V0dGluZ3MuY3BwICovLAogCQkJCTRBNkU5RkM2MTNDMTdENTcwMDQ2QTdGOCAvKiBGb250RmVh
dHVyZVNldHRpbmdzLmggKi8sCiAJCQkJRTQ0RUUzQTYxNzU3NkU1NTAwRUVFOENGIC8qIEZvbnRH
ZW5lcmljRmFtaWxpZXMuY3BwICovLAogCQkJCUU0NEVFM0E3MTc1NzZFNTUwMEVFRThDRiAvKiBG
b250R2VuZXJpY0ZhbWlsaWVzLmggKi8sCi0JCQkJQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8q
IEZvbnRHbHlwaHMuY3BwICovLAotCQkJCUIyQzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
R2x5cGhzLmggKi8sCiAJCQkJMDg0NTY4MDcxMkI5MERBNjAwOTYwQTlGIC8qIEZvbnRNZXRyaWNz
LmggKi8sCiAJCQkJRjdBMDM0QzMxMjZCRjZCRTAwN0RDMTlFIC8qIEZvbnRPcmllbnRhdGlvbi5o
ICovLAogCQkJCTg0QjYyNjg0MTMzMTM4RjkwMDk1QTQ4OSAvKiBGb250UGxhdGZvcm1EYXRhLmNw
cCAqLywKQEAgLTI0NDE1LDcgKzI0NDE1LDcgQEAKIAkJCQlCMkFGRkM3RTBEMDBBNUMxMDAzMDA3
NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RB
NjYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnREZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNEE2RTlGQzgxM0MxN0Q1NzAwNDZBN0Y4IC8qIEZvbnRGZWF0dXJlU2V0dGluZ3MuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUIyQzNEQTY4MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250R2x5cGhzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlCMkMzREE2ODBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2Nh
ZGVGb250cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDA5RUJEQjYxNkI3RUVBMzAwQ0JBM0ZDIC8q
IEZvbnRMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NDU2ODA4MTJCOTBEQTYwMDk2MEE5
RiAvKiBGb250TWV0cmljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjdBMDM0QzQxMjZCRjZCRTAw
N0RDMTlFIC8qIEZvbnRPcmllbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzg5Nyw3ICsy
Nzg5Nyw3IEBACiAJCQkJMzdBQ0NGNjkwREE0MTRFNzAwODlFNjAyIC8qIEZvbnREZXNjcmlwdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QTZFOUZDNzEzQzE3RDU3MDA0NkE3RjggLyogRm9u
dEZlYXR1cmVTZXR0aW5ncy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDRFRTNBODE3NTc3RUJE
MDBFRUU4Q0YgLyogRm9udEdlbmVyaWNGYW1pbGllcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlC
MkMzREE2NzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlCMkMzREE2NzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGVGb250cy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlGRDk2Qzk5NzE5ODJGQkRGMDA4NkUxNTYgLyogRm9udExvYWRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkFGRkM4MDBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENh
c2NhZGVDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg0QjYyNjg1MTMzMTM4RjkwMDk1QTQ4
OSAvKiBGb250UGxhdGZvcm1EYXRhLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9TZXR0aW5ncy5jcHAJKHJldmlzaW9uIDE4MDI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyB2b2lk
IHNldEltYWdlTG9hZGluZ1NldHRpbmdzKFBhZ2UKIAogc3RhdGljIHZvaWQgaW52YWxpZGF0ZUFm
dGVyR2VuZXJpY0ZhbWlseUNoYW5nZShQYWdlKiBwYWdlKQogewotICAgIGludmFsaWRhdGVGb250
R2x5cGhzQ2FjaGUoKTsKKyAgICBpbnZhbGlkYXRlRm9udENhc2NhZGVDYWNoZSgpOwogICAgIGlm
IChwYWdlKQogICAgICAgICBwYWdlLT5zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcAkocmV2aXNpb24gMTgwMjY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1
ZGUgIkZvbnRDYWNoZS5oIgogCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJG
b250R2x5cGhzLmgiCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIkZv
bnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIk1lbW9yeVByZXNzdXJlSGFuZGxlci5oIgpAQCAtNDI2
LDcgKzQyNSw3IEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk4KIAog
dm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbnQgcHVyZ2VDb3VudCkKIHsK
LSAgICBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udEdseXBoc0NhY2hlKCk7CisgICAg
cHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRDYXNjYWRlQ2FjaGUoKTsKICAgICBwcnVu
ZVN5c3RlbUZhbGxiYWNrRm9udHMoKTsKIAogI2lmIFBMQVRGT1JNKElPUykKQEAgLTUzNSw3ICs1
MzQsNyBAQCB2b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZSgpCiAgICAgfQogCiAgICAgZm9udFBs
YXRmb3JtRGF0YUNhY2hlKCkuY2xlYXIoKTsKLSAgICBpbnZhbGlkYXRlRm9udEdseXBoc0NhY2hl
KCk7CisgICAgaW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUoKTsKIAogICAgIGdHZW5lcmF0aW9u
Kys7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZS5jcHAJKHJldmlzaW9uIDE4MDI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBA
QCB0ZW1wbGF0ZSA8PiB2b2lkIGRlbGV0ZU93bmVkUHRyPFdlYkNvcmU6CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotc3RhdGljIFJlZjxGb250R2x5cGhzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9u
dEdseXBocyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4p
Oworc3RhdGljIFJlZjxGb250Q2FzY2FkZUZvbnRzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKIAogY29u
c3QgdWludDhfdCBGb250Q2FzY2FkZTo6c19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZd
ID0gewogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEgLypcdCovLCAxIC8qXG4qLywg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwKQEAgLTEyNSw4ICsxMjUsOCBAQCBGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3Qg
Rm9udERlc2NyCiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9y
IHBsYXRmb3JtLWluZGVwZW5kZW50LgotRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2Rl
KQotICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnQp
KQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnRE
YXRhLCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKKyAgICA6IG1fZm9udHMo
Rm9udENhc2NhZGVGb250czo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkKICAgICAs
IG1fbGV0dGVyU3BhY2luZygwKQogICAgICwgbV93b3JkU3BhY2luZygwKQogICAgICwgbV91c2VC
YWNrc2xhc2hBc1llblN5bWJvbChmYWxzZSkKQEAgLTEzNCwzMyArMTM0LDMyIEBAIEZvbnRDYXNj
YWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGYKIHsKICAgICBtX2ZvbnREZXNjcmlwdGlv
bi5zZXRGb250U21vb3RoaW5nKGZvbnRTbW9vdGhpbmdNb2RlKTsKICNpZiBQTEFURk9STShJT1Mp
Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShDVEZvbnRHZXRTaXplKGZv
bnQuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKENURm9u
dEdldFNpemUoZm9udC5mb250KCkpKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRJc0l0YWxp
YyhDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250LmZvbnQoKSkgJiBrQ1RGb250VHJhaXRJdGFs
aWMpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgoQ1RGb250R2V0U3ltYm9saWNU
cmFpdHMoZm9udC5mb250KCkpICYga0NURm9udFRyYWl0Qm9sZCkgPyBGb250V2VpZ2h0Qm9sZCA6
IEZvbnRXZWlnaHROb3JtYWwpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNp
emUoQ1RGb250R2V0U2l6ZShmb250RGF0YS5mb250KCkpKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlv
bi5zZXRDb21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShmb250RGF0YS5mb250KCkpKTsKKyAgICBt
X2ZvbnREZXNjcmlwdGlvbi5zZXRJc0l0YWxpYyhDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250
RGF0YS5mb250KCkpICYga0NURm9udFRyYWl0SXRhbGljKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlv
bi5zZXRXZWlnaHQoKENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBr
Q1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7CiAj
ZW5kaWYKIH0KIAogLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxh
dGZvcm0taW5kZXBlbmRlbnQuCiAjaWYgUExBVEZPUk0oSU9TKQotRm9udENhc2NhZGU6OkZvbnRD
YXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnQsIFBhc3NSZWZQdHI8Rm9udFNlbGVj
dG9yPiBmb250U2VsZWN0b3IpCi0gICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQ
bGF0Zm9ybUZvbnQoZm9udCkpCi0gICAgLCBtX2xldHRlclNwYWNpbmcoMCkKK0ZvbnRDYXNjYWRl
OjpGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSwgUGFzc1JlZlB0
cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKKyAgICA6IG1fbGV0dGVyU3BhY2luZygwKQog
ICAgICwgbV93b3JkU3BhY2luZygwKQogICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1
dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkpCiB7Ci0gICAgQ1RGb250UmVmIHByaW1hcnlGb250ID0g
Zm9udC5mb250KCk7CisgICAgQ1RGb250UmVmIHByaW1hcnlGb250ID0gZm9udERhdGEuZm9udCgp
OwogICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShw
cmltYXJ5Rm9udCkpOwogICAgIG1fZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZv
bnRHZXRTaXplKHByaW1hcnlGb250KSk7CiAgICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJdGFs
aWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMocHJpbWFyeUZvbnQpICYga0NURm9udFRyYWl0SXRh
bGljKTsKICAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdldFN5bWJvbGlj
VHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQg
OiBGb250V2VpZ2h0Tm9ybWFsKTsKLSAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRG
b250R2x5cGhzKG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworICAgIG1f
Zm9udHMgPSByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMobV9mb250RGVzY3JpcHRpb24sIGZvbnRT
ZWxlY3Rvci5nZXQoKSk7CiB9CiAjZW5kaWYKIAogRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNv
bnN0IEZvbnRDYXNjYWRlJiBvdGhlcikKICAgICA6IG1fZm9udERlc2NyaXB0aW9uKG90aGVyLm1f
Zm9udERlc2NyaXB0aW9uKQotICAgICwgbV9nbHlwaHMob3RoZXIubV9nbHlwaHMpCisgICAgLCBt
X2ZvbnRzKG90aGVyLm1fZm9udHMpCiAgICAgLCBtX2xldHRlclNwYWNpbmcob3RoZXIubV9sZXR0
ZXJTcGFjaW5nKQogICAgICwgbV93b3JkU3BhY2luZyhvdGhlci5tX3dvcmRTcGFjaW5nKQogICAg
ICwgbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbChvdGhlci5tX3VzZUJhY2tzbGFzaEFzWWVuU3lt
Ym9sKQpAQCAtMTcxLDcgKzE3MCw3IEBAIEZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBG
b250Q2FzY2EKIEZvbnRDYXNjYWRlJiBGb250Q2FzY2FkZTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRD
YXNjYWRlJiBvdGhlcikKIHsKICAgICBtX2ZvbnREZXNjcmlwdGlvbiA9IG90aGVyLm1fZm9udERl
c2NyaXB0aW9uOwotICAgIG1fZ2x5cGhzID0gb3RoZXIubV9nbHlwaHM7CisgICAgbV9mb250cyA9
IG90aGVyLm1fZm9udHM7CiAgICAgbV9sZXR0ZXJTcGFjaW5nID0gb3RoZXIubV9sZXR0ZXJTcGFj
aW5nOwogICAgIG1fd29yZFNwYWNpbmcgPSBvdGhlci5tX3dvcmRTcGFjaW5nOwogICAgIG1fdXNl
QmFja3NsYXNoQXNZZW5TeW1ib2wgPSBvdGhlci5tX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sOwpA
QCAtMTg2LDIxICsxODUsMjEgQEAgYm9vbCBGb250Q2FzY2FkZTo6b3BlcmF0b3I9PShjb25zdCBG
b250QwogCiAgICAgaWYgKG1fZm9udERlc2NyaXB0aW9uICE9IG90aGVyLm1fZm9udERlc2NyaXB0
aW9uIHx8IG1fbGV0dGVyU3BhY2luZyAhPSBvdGhlci5tX2xldHRlclNwYWNpbmcgfHwgbV93b3Jk
U3BhY2luZyAhPSBvdGhlci5tX3dvcmRTcGFjaW5nKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKG1fZ2x5cGhzID09IG90aGVyLm1fZ2x5cGhzKQorICAgIGlmIChtX2ZvbnRzID09IG90
aGVyLm1fZm9udHMpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICghbV9nbHlwaHMgfHwg
IW90aGVyLm1fZ2x5cGhzKQorICAgIGlmICghbV9mb250cyB8fCAhb3RoZXIubV9mb250cykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2dseXBocy0+Zm9udFNlbGVjdG9yKCkgIT0g
b3RoZXIubV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpKQorICAgIGlmIChtX2ZvbnRzLT5mb250U2Vs
ZWN0b3IoKSAhPSBvdGhlci5tX2ZvbnRzLT5mb250U2VsZWN0b3IoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIC8vIENhbiB0aGVzZSBjYXNlcyBhY3R1YWxseSBzb21laG93IG9jY3VyPyBB
bGwgZm9udHMgc2hvdWxkIGdldCB3aXBlZCBvdXQgYnkgZnVsbCBzdHlsZSByZWNhbGMuCi0gICAg
aWYgKG1fZ2x5cGhzLT5mb250U2VsZWN0b3JWZXJzaW9uKCkgIT0gb3RoZXIubV9nbHlwaHMtPmZv
bnRTZWxlY3RvclZlcnNpb24oKSkKKyAgICBpZiAobV9mb250cy0+Zm9udFNlbGVjdG9yVmVyc2lv
bigpICE9IG90aGVyLm1fZm9udHMtPmZvbnRTZWxlY3RvclZlcnNpb24oKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmIChtX2dseXBocy0+Z2VuZXJhdGlvbigpICE9IG90aGVyLm1fZ2x5
cGhzLT5nZW5lcmF0aW9uKCkpCisgICAgaWYgKG1fZm9udHMtPmdlbmVyYXRpb24oKSAhPSBvdGhl
ci5tX2ZvbnRzLT5nZW5lcmF0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotc3RydWN0IEZvbnRHbHlwaHNDYWNoZUtleSB7CitzdHJ1Y3QgRm9udENh
c2NhZGVDYWNoZUtleSB7CiAgICAgLy8gVGhpcyBwYXJ0IG9mIHRoZSBrZXkgaXMgc2hhcmVkIHdp
dGggdGhlIGxvd2VyIGxldmVsIEZvbnRDYWNoZSAoY2FjaGluZyBGb250RGF0YSBvYmplY3RzKS4K
ICAgICBGb250RGVzY3JpcHRpb25Gb250RGF0YUNhY2hlS2V5IGZvbnREZXNjcmlwdGlvbkNhY2hl
S2V5OwogICAgIFZlY3RvcjxBdG9taWNTdHJpbmcsIDM+IGZhbWlsaWVzOwpAQCAtMjA5LDIwICsy
MDgsMjAgQEAgc3RydWN0IEZvbnRHbHlwaHNDYWNoZUtleSB7CiAgICAgdW5zaWduZWQgZm9udFNl
bGVjdG9yRmxhZ3M7CiB9OwogCi1zdHJ1Y3QgRm9udEdseXBoc0NhY2hlRW50cnkgeworc3RydWN0
IEZvbnRDYXNjYWRlQ2FjaGVFbnRyeSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgRm9udEdseXBoc0NhY2hlRW50cnkoRm9udEdseXBoc0NhY2hlS2V5JiYgaywg
UmVmPEZvbnRHbHlwaHM+JiYgZykKLSAgICAgICAgOiBrZXkoV1RGOjptb3ZlKGspKQotICAgICAg
ICAsIGdseXBocyhXVEY6Om1vdmUoZykpCisgICAgRm9udENhc2NhZGVDYWNoZUVudHJ5KEZvbnRD
YXNjYWRlQ2FjaGVLZXkmJiBrZXksIFJlZjxGb250Q2FzY2FkZUZvbnRzPiYmIGZvbnRzKQorICAg
ICAgICA6IGtleShXVEY6Om1vdmUoa2V5KSkKKyAgICAgICAgLCBmb250cyhXVEY6Om1vdmUoZm9u
dHMpKQogICAgIHsgfQotICAgIEZvbnRHbHlwaHNDYWNoZUtleSBrZXk7Ci0gICAgUmVmPEZvbnRH
bHlwaHM+IGdseXBoczsKKyAgICBGb250Q2FzY2FkZUNhY2hlS2V5IGtleTsKKyAgICBSZWY8Rm9u
dENhc2NhZGVGb250cz4gZm9udHM7CiB9OwogCi10eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIHN0
ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4sIEFscmVhZHlIYXNoZWQ+IEZvbnRH
bHlwaHNDYWNoZTsKK3R5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRyPEZv
bnRDYXNjYWRlQ2FjaGVFbnRyeT4sIEFscmVhZHlIYXNoZWQ+IEZvbnRDYXNjYWRlQ2FjaGU7CiAK
LXN0YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udEdseXBoc0NhY2hlS2V5JiBhLCBjb25z
dCBGb250R2x5cGhzQ2FjaGVLZXkmIGIpCitzdGF0aWMgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZv
bnRDYXNjYWRlQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkmIGIpCiB7CiAg
ICAgaWYgKGEuZm9udERlc2NyaXB0aW9uQ2FjaGVLZXkgIT0gYi5mb250RGVzY3JpcHRpb25DYWNo
ZUtleSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjM3LDIxICsyMzYsMjEgQEAgc3RhdGlj
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250R2x5cGhzQwogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgRm9udEdseXBoc0NhY2hlJiBmb250R2x5cGhzQ2FjaGUoKQorc3RhdGljIEZvbnRD
YXNjYWRlQ2FjaGUmIGZvbnRDYXNjYWRlQ2FjaGUoKQogewotICAgIERFUFJFQ0FURURfREVGSU5F
X1NUQVRJQ19MT0NBTChGb250R2x5cGhzQ2FjaGUsIGNhY2hlLCAoKSk7CisgICAgREVQUkVDQVRF
RF9ERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnRDYXNjYWRlQ2FjaGUsIGNhY2hlLCAoKSk7CiAgICAg
cmV0dXJuIGNhY2hlOwogfQogCi12b2lkIGludmFsaWRhdGVGb250R2x5cGhzQ2FjaGUoKQordm9p
ZCBpbnZhbGlkYXRlRm9udENhc2NhZGVDYWNoZSgpCiB7Ci0gICAgZm9udEdseXBoc0NhY2hlKCku
Y2xlYXIoKTsKKyAgICBmb250Q2FzY2FkZUNhY2hlKCkuY2xlYXIoKTsKIH0KIAogdm9pZCBjbGVh
cldpZHRoQ2FjaGVzKCkKIHsKLSAgICBmb3IgKGF1dG8gaXQgPSBmb250R2x5cGhzQ2FjaGUoKS5i
ZWdpbigpLCBlbmQgPSBmb250R2x5cGhzQ2FjaGUoKS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICBpdC0+dmFsdWUtPmdseXBocy5nZXQoKS53aWR0aENhY2hlKCkuY2xlYXIoKTsKKyAg
ICBmb3IgKGF1dG8mIHZhbHVlIDogZm9udENhc2NhZGVDYWNoZSgpLnZhbHVlcygpKQorICAgICAg
ICB2YWx1ZS0+Zm9udHMuZ2V0KCkud2lkdGhDYWNoZSgpLmNsZWFyKCk7CiB9CiAKIHN0YXRpYyB1
bnNpZ25lZCBtYWtlRm9udFNlbGVjdG9yRmxhZ3MoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbikKQEAgLTI1OSwxNyArMjU4LDE5IEBAIHN0YXRpYyB1bnNpZ25lZCBtYWtlRm9udFNl
bGVjdG9yRmxhZ3MoY28KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0
aW9uLnNjcmlwdCgpKSA8PCAxIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnNt
YWxsQ2FwcygpKTsKIH0KIAotc3RhdGljIHZvaWQgbWFrZUZvbnRHbHlwaHNDYWNoZUtleShGb250
R2x5cGhzQ2FjaGVLZXkmIGtleSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwg
Rm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCitzdGF0aWMgRm9udENhc2NhZGVDYWNoZUtleSBt
YWtlRm9udENhc2NhZGVDYWNoZUtleShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
LCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKIHsKKyAgICBGb250Q2FzY2FkZUNhY2hlS2V5
IGtleTsKICAgICBrZXkuZm9udERlc2NyaXB0aW9uQ2FjaGVLZXkgPSBGb250RGVzY3JpcHRpb25G
b250RGF0YUNhY2hlS2V5KGRlc2NyaXB0aW9uKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsgKytpKQogICAgICAgICBrZXkuZmFtaWxpZXMu
YXBwZW5kKGRlc2NyaXB0aW9uLmZhbWlseUF0KGkpKTsKICAgICBrZXkuZm9udFNlbGVjdG9ySWQg
PSBmb250U2VsZWN0b3IgPyBmb250U2VsZWN0b3ItPnVuaXF1ZUlkKCkgOiAwOwogICAgIGtleS5m
b250U2VsZWN0b3JWZXJzaW9uID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT52ZXJzaW9u
KCkgOiAwOwogICAgIGtleS5mb250U2VsZWN0b3JGbGFncyA9IGZvbnRTZWxlY3RvciAmJiBmb250
U2VsZWN0b3ItPnJlc29sdmVzRmFtaWx5Rm9yKGRlc2NyaXB0aW9uKSA/IG1ha2VGb250U2VsZWN0
b3JGbGFncyhkZXNjcmlwdGlvbikgOiAwOworICAgIHJldHVybiBrZXk7CiB9CiAKLXN0YXRpYyB1
bnNpZ25lZCBjb21wdXRlRm9udEdseXBoc0NhY2hlSGFzaChjb25zdCBGb250R2x5cGhzQ2FjaGVL
ZXkmIGtleSkKK3N0YXRpYyB1bnNpZ25lZCBjb21wdXRlRm9udENhc2NhZGVDYWNoZUhhc2goY29u
c3QgRm9udENhc2NhZGVDYWNoZUtleSYga2V5KQogewogICAgIFZlY3Rvcjx1bnNpZ25lZCwgNz4g
aGFzaENvZGVzOwogICAgIGhhc2hDb2Rlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDQgKyBrZXku
ZmFtaWxpZXMuc2l6ZSgpKTsKQEAgLTI4NCw0OCArMjg1LDQ3IEBAIHN0YXRpYyB1bnNpZ25lZCBj
b21wdXRlRm9udEdseXBoc0NhY2hlSGEKICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVt
b3J5KGhhc2hDb2Rlcy5kYXRhKCksIGhhc2hDb2Rlcy5zaXplKCkgKiBzaXplb2YodW5zaWduZWQp
KTsKIH0KIAotdm9pZCBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udEdseXBoc0NhY2hl
KCkKK3ZvaWQgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRDYXNjYWRlQ2FjaGUoKQog
ewotICAgIGZvbnRHbHlwaHNDYWNoZSgpLnJlbW92ZUlmKFtdKEZvbnRHbHlwaHNDYWNoZTo6S2V5
VmFsdWVQYWlyVHlwZSYgZW50cnkpIHsKLSAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlLT5nbHlw
aHMuZ2V0KCkuaGFzT25lUmVmKCk7CisgICAgZm9udENhc2NhZGVDYWNoZSgpLnJlbW92ZUlmKFtd
KEZvbnRDYXNjYWRlQ2FjaGU6OktleVZhbHVlUGFpclR5cGUmIGVudHJ5KSB7CisgICAgICAgIHJl
dHVybiBlbnRyeS52YWx1ZS0+Zm9udHMuZ2V0KCkuaGFzT25lUmVmKCk7CiAgICAgfSk7CiB9CiAK
IHZvaWQgcHJ1bmVTeXN0ZW1GYWxsYmFja0ZvbnRzKCkKIHsKLSAgICBmb3IgKGF1dG8mIGVudHJ5
IDogZm9udEdseXBoc0NhY2hlKCkudmFsdWVzKCkpCi0gICAgICAgIGVudHJ5LT5nbHlwaHMtPnBy
dW5lU3lzdGVtRmFsbGJhY2tzKCk7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IGZvbnRDYXNjYWRl
Q2FjaGUoKS52YWx1ZXMoKSkKKyAgICAgICAgZW50cnktPmZvbnRzLT5wcnVuZVN5c3RlbUZhbGxi
YWNrcygpOwogfQogCi1zdGF0aWMgUmVmPEZvbnRHbHlwaHM+IHJldHJpZXZlT3JBZGRDYWNoZWRG
b250R2x5cGhzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBQYXNzUmVm
UHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQorc3RhdGljIFJlZjxGb250Q2FzY2FkZUZv
bnRzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCiB7Ci0g
ICAgRm9udEdseXBoc0NhY2hlS2V5IGtleTsKLSAgICBtYWtlRm9udEdseXBoc0NhY2hlS2V5KGtl
eSwgZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworICAgIGF1dG8ga2V5ID0g
bWFrZUZvbnRDYXNjYWRlQ2FjaGVLZXkoZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0
KCkpOwogCi0gICAgdW5zaWduZWQgaGFzaCA9IGNvbXB1dGVGb250R2x5cGhzQ2FjaGVIYXNoKGtl
eSk7Ci0gICAgRm9udEdseXBoc0NhY2hlOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gZm9udEdseXBo
c0NhY2hlKCkuYWRkKGhhc2gsIHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4o
KSk7CisgICAgdW5zaWduZWQgaGFzaCA9IGNvbXB1dGVGb250Q2FzY2FkZUNhY2hlSGFzaChrZXkp
OworICAgIGF1dG8gYWRkUmVzdWx0ID0gZm9udENhc2NhZGVDYWNoZSgpLmFkZChoYXNoLCBzdGQ6
OnVuaXF1ZV9wdHI8Rm9udENhc2NhZGVDYWNoZUVudHJ5PigpKTsKICAgICBpZiAoIWFkZFJlc3Vs
dC5pc05ld0VudHJ5ICYmIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmtleSA9PSBrZXkpCi0g
ICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5nbHlwaHMuZ2V0KCk7Cisg
ICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5mb250cy5nZXQoKTsKIAot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250R2x5cGhzQ2FjaGVFbnRyeT4mIG5ld0VudHJ5ID0gYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICBuZXdFbnRyeSA9IHN0ZDo6bWFrZV91bmlxdWU8
Rm9udEdseXBoc0NhY2hlRW50cnk+KFdURjo6bW92ZShrZXkpLCBGb250R2x5cGhzOjpjcmVhdGUo
Zm9udFNlbGVjdG9yKSk7Ci0gICAgUmVmPEZvbnRHbHlwaHM+IGdseXBocyA9IG5ld0VudHJ5LT5n
bHlwaHMuZ2V0KCk7CisgICAgYXV0byYgbmV3RW50cnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlOworICAgIG5ld0VudHJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxGb250Q2FzY2FkZUNhY2hlRW50
cnk+KFdURjo6bW92ZShrZXkpLCBGb250Q2FzY2FkZUZvbnRzOjpjcmVhdGUoZm9udFNlbGVjdG9y
KSk7CisgICAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IGdseXBocyA9IG5ld0VudHJ5LT5mb250cy5n
ZXQoKTsKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB1bnJlZmVyZW5jZWRQcnVuZUludGVy
dmFsID0gNTA7CiAgICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtRW50cmllcyA9IDQwMDsKICAg
ICBzdGF0aWMgdW5zaWduZWQgcHJ1bmVDb3VudGVyOwotICAgIC8vIFJlZmVyZW5jZWQgRm9udEds
eXBocyB3b3VsZCBleGlzdCBhbnl3YXkgc28gcHJ1bmluZyB0aGVtIHNhdmVzIGxpdHRsZSBtZW1v
cnkuCisgICAgLy8gUmVmZXJlbmNlZCBGb250Q2FzY2FkZUZvbnRzIHdvdWxkIGV4aXN0IGFueXdh
eSBzbyBwcnVuaW5nIHRoZW0gc2F2ZXMgbGl0dGxlIG1lbW9yeS4KICAgICBpZiAoISgrK3BydW5l
Q291bnRlciAlIHVucmVmZXJlbmNlZFBydW5lSW50ZXJ2YWwpKQotICAgICAgICBwcnVuZVVucmVm
ZXJlbmNlZEVudHJpZXNGcm9tRm9udEdseXBoc0NhY2hlKCk7CisgICAgICAgIHBydW5lVW5yZWZl
cmVuY2VkRW50cmllc0Zyb21Gb250Q2FzY2FkZUNhY2hlKCk7CiAgICAgLy8gUHJldmVudCBwYXRo
b2xvZ2ljYWwgZ3Jvd3RoLgotICAgIGlmIChmb250R2x5cGhzQ2FjaGUoKS5zaXplKCkgPiBtYXhp
bXVtRW50cmllcykKLSAgICAgICAgZm9udEdseXBoc0NhY2hlKCkucmVtb3ZlKGZvbnRHbHlwaHND
YWNoZSgpLmJlZ2luKCkpOworICAgIGlmIChmb250Q2FzY2FkZUNhY2hlKCkuc2l6ZSgpID4gbWF4
aW11bUVudHJpZXMpCisgICAgICAgIGZvbnRDYXNjYWRlQ2FjaGUoKS5yZW1vdmUoZm9udENhc2Nh
ZGVDYWNoZSgpLmJlZ2luKCkpOwogICAgIHJldHVybiBnbHlwaHM7CiB9CiAKIHZvaWQgRm9udENh
c2NhZGU6OnVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSBjb25z
dAogewotICAgIG1fZ2x5cGhzID0gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlwaHMobV9mb250
RGVzY3JpcHRpb24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7CisgICAgbV9mb250cyA9IHJldHJpZXZl
T3JBZGRDYWNoZWRGb250cyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsK
ICAgICBtX3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sID0gdXNlQmFja3NsYXNoQXNZZW5TaWduRm9y
RmFtaWx5KGZpcnN0RmFtaWx5KCkpOwogICAgIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA9IGNvbXB1
dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCk7CiB9CkBAIC0zODQsNyArMzg0LDcgQEAgZmxvYXQgRm9u
dENhc2NhZGU6OndpZHRoKGNvbnN0IFRleHRSdW4mIAogCiAgICAgYm9vbCBoYXNLZXJuaW5nT3JM
aWdhdHVyZXMgPSB0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiAoS2VybmluZyB8IExpZ2F0dXJlcyk7
CiAgICAgYm9vbCBoYXNXb3JkU3BhY2luZ09yTGV0dGVyU3BhY2luZyA9IHdvcmRTcGFjaW5nKCkg
fHwgbGV0dGVyU3BhY2luZygpOwotICAgIGZsb2F0KiBjYWNoZUVudHJ5ID0gbV9nbHlwaHMtPndp
ZHRoQ2FjaGUoKS5hZGQocnVuLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFO
KCksIGhhc0tlcm5pbmdPckxpZ2F0dXJlcywgaGFzV29yZFNwYWNpbmdPckxldHRlclNwYWNpbmcs
IGdseXBoT3ZlcmZsb3cpOworICAgIGZsb2F0KiBjYWNoZUVudHJ5ID0gbV9mb250cy0+d2lkdGhD
YWNoZSgpLmFkZChydW4sIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKSwg
aGFzS2VybmluZ09yTGlnYXR1cmVzLCBoYXNXb3JkU3BhY2luZ09yTGV0dGVyU3BhY2luZywgZ2x5
cGhPdmVyZmxvdyk7CiAgICAgaWYgKGNhY2hlRW50cnkgJiYgIXN0ZDo6aXNuYW4oKmNhY2hlRW50
cnkpKQogICAgICAgICByZXR1cm4gKmNhY2hlRW50cnk7CiAKQEAgLTQzMiw3ICs0MzIsNyBAQCBH
bHlwaERhdGEgRm9udENhc2NhZGU6OmdseXBoRGF0YUZvckNoYXJhCiAgICAgaWYgKG1pcnJvcikK
ICAgICAgICAgYyA9IHVfY2hhck1pcnJvcihjKTsKIAotICAgIHJldHVybiBtX2dseXBocy0+Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KTsKKyAgICBy
ZXR1cm4gbV9mb250cy0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIG1fZm9udERlc2NyaXB0aW9u
LCB2YXJpYW50KTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKQEAgLTEwOTUsNyArMTA5NSw3
IEBAIGJvb2wgRm9udENhc2NhZGU6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMKIAogYm9vbCBGb250
Q2FzY2FkZTo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdAogewotICAgIHJldHVybiBtX2ds
eXBocyAmJiBtX2dseXBocy0+aXNMb2FkaW5nQ3VzdG9tRm9udHMoKTsKKyAgICByZXR1cm4gbV9m
b250cyAmJiBtX2ZvbnRzLT5pc0xvYWRpbmdDdXN0b21Gb250cygpOwogfQogICAgIAogR2x5cGhU
b1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGUgY29tcHV0ZVVuZGVybGluZVR5cGUo
Y29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBp
bnQgaW5kZXgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmgJKHJldmlzaW9uIDE4MDI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAK
IAogI2luY2x1ZGUgIkRhc2hBcnJheS5oIgogI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJG
b250Q2FzY2FkZUZvbnRzLmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVk
ZSAiRm9udEdseXBocy5oIgogI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0
aW9uLmgiCiAjaW5jbHVkZSAiVHlwZXNldHRpbmdGZWF0dXJlcy5oIgpAQCAtMTY5LDcgKzE2OSw3
IEBAIHB1YmxpYzoKICAgICBGb250V2VpZ2h0IHdlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dERlc2NyaXB0aW9uLndlaWdodCgpOyB9CiAgICAgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlh
bnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKTsgfQog
Ci0gICAgYm9vbCBpc1BsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzLT5pc0Zv
clBsYXRmb3JtRm9udCgpOyB9CisgICAgYm9vbCBpc1BsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udHMtPmlzRm9yUGxhdGZvcm1Gb250KCk7IH0KIAogICAgIGNvbnN0IEZvbnRNZXRy
aWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlGb250KCkuZm9udE1ldHJp
Y3MoKTsgfQogICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9u
dCgpLnNwYWNlV2lkdGgoKSArIG1fbGV0dGVyU3BhY2luZzsgfQpAQCAtMjg1LDcgKzI4NSw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlcyhjb25zdCBVQ2hhcios
IHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICBib29sIHVzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkg
Y29uc3QgeyByZXR1cm4gbV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsgfQotICAgIEZvbnRHbHlw
aHMqIGdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzLmdldCgpOyB9CisgICAgRm9udENh
c2NhZGVGb250cyogZm9udHMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRzLmdldCgpOyB9CiAKIHBy
aXZhdGU6CiAgICAgYm9vbCBpc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0OwpAQCAtMzM1LDE1
ICszMzUsMTUgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgVHlwZXNldHRpbmdGZWF0dXJlcyBzX2Rl
ZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOwogCiAgICAgRm9udERlc2NyaXB0aW9uIG1fZm9udERl
c2NyaXB0aW9uOwotICAgIG11dGFibGUgUmVmUHRyPEZvbnRHbHlwaHM+IG1fZ2x5cGhzOworICAg
IG11dGFibGUgUmVmUHRyPEZvbnRDYXNjYWRlRm9udHM+IG1fZm9udHM7CiAgICAgZmxvYXQgbV9s
ZXR0ZXJTcGFjaW5nOwogICAgIGZsb2F0IG1fd29yZFNwYWNpbmc7CiAgICAgbXV0YWJsZSBib29s
IG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2w7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3R5cGVz
ZXR0aW5nRmVhdHVyZXMgOiAyOyAvLyAoVHlwZXNldHRpbmdGZWF0dXJlcykgQ2FjaGVzIHZhbHVl
cyBjb21wdXRlZCBmcm9tIG1fZm9udERlc2NyaXB0aW9uLgogfTsKIAotdm9pZCBpbnZhbGlkYXRl
Rm9udEdseXBoc0NhY2hlKCk7Ci12b2lkIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250
R2x5cGhzQ2FjaGUoKTsKK3ZvaWQgaW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUoKTsKK3ZvaWQg
cHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRDYXNjYWRlQ2FjaGUoKTsKIHZvaWQgcHJ1
bmVTeXN0ZW1GYWxsYmFja0ZvbnRzKCk7CiB2b2lkIGNsZWFyV2lkdGhDYWNoZXMoKTsKIApAQCAt
MzUzLDI1ICszNTMsMjUgQEAgaW5saW5lIEZvbnRDYXNjYWRlOjp+Rm9udENhc2NhZGUoKQogCiBp
bmxpbmUgY29uc3QgRm9udCYgRm9udENhc2NhZGU6OnByaW1hcnlGb250KCkgY29uc3QKIHsKLSAg
ICBBU1NFUlQobV9nbHlwaHMpOwotICAgIHJldHVybiBtX2dseXBocy0+cHJpbWFyeUZvbnQobV9m
b250RGVzY3JpcHRpb24pOworICAgIEFTU0VSVChtX2ZvbnRzKTsKKyAgICByZXR1cm4gbV9mb250
cy0+cHJpbWFyeUZvbnQobV9mb250RGVzY3JpcHRpb24pOwogfQogCiBpbmxpbmUgY29uc3QgRm9u
dFJhbmdlcyYgRm9udENhc2NhZGU6OmZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQgaW5kZXgpIGNv
bnN0CiB7Ci0gICAgQVNTRVJUKG1fZ2x5cGhzKTsKLSAgICByZXR1cm4gbV9nbHlwaHMtPnJlYWxp
emVGYWxsYmFja1Jhbmdlc0F0KG1fZm9udERlc2NyaXB0aW9uLCBpbmRleCk7CisgICAgQVNTRVJU
KG1fZm9udHMpOworICAgIHJldHVybiBtX2ZvbnRzLT5yZWFsaXplRmFsbGJhY2tSYW5nZXNBdCht
X2ZvbnREZXNjcmlwdGlvbiwgaW5kZXgpOwogfQogCiBpbmxpbmUgYm9vbCBGb250Q2FzY2FkZTo6
aXNGaXhlZFBpdGNoKCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9nbHlwaHMpOwotICAgIHJldHVy
biBtX2dseXBocy0+aXNGaXhlZFBpdGNoKG1fZm9udERlc2NyaXB0aW9uKTsKKyAgICBBU1NFUlQo
bV9mb250cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmlzRml4ZWRQaXRjaChtX2ZvbnREZXNjcmlw
dGlvbik7CiB9CiAKIGlubGluZSBGb250U2VsZWN0b3IqIEZvbnRDYXNjYWRlOjpmb250U2VsZWN0
b3IoKSBjb25zdAogewotICAgIHJldHVybiBtX2dseXBocyA/IG1fZ2x5cGhzLT5mb250U2VsZWN0
b3IoKSA6IDA7CisgICAgcmV0dXJuIG1fZm9udHMgPyBtX2ZvbnRzLT5mb250U2VsZWN0b3IoKSA6
IDA7CiB9CiAKIGlubGluZSBmbG9hdCBGb250Q2FzY2FkZTo6dGFiV2lkdGgoY29uc3QgRm9udCYg
Zm9udCwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRz
LmNwcAkocmV2aXNpb24gMTgwMjY0KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250R2x5cGhzLmNwcDoxODAyNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQw
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAxMy0yMDE1IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udEdseXBocy5oIgor
CisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNs
dWRlICJHbHlwaFBhZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisKK0ZvbnRHbHlwaHM6
OkZvbnRHbHlwaHMoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKKyAgICA6
IG1fY2FjaGVkUHJpbWFyeUZvbnQoMCkKKyAgICAsIG1fZm9udFNlbGVjdG9yKGZvbnRTZWxlY3Rv
cikKKyAgICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbihtX2ZvbnRTZWxlY3RvciA/IG1fZm9udFNl
bGVjdG9yLT52ZXJzaW9uKCkgOiAwKQorICAgICwgbV9nZW5lcmF0aW9uKGZvbnRDYWNoZSgpLmdl
bmVyYXRpb24oKSkKK3sKK30KKworRm9udEdseXBoczo6Rm9udEdseXBocyhjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCisgICAgOiBtX2NhY2hlZFByaW1hcnlGb250KDApCisg
ICAgLCBtX2ZvbnRTZWxlY3RvcigwKQorICAgICwgbV9mb250U2VsZWN0b3JWZXJzaW9uKDApCisg
ICAgLCBtX2dlbmVyYXRpb24oZm9udENhY2hlKCkuZ2VuZXJhdGlvbigpKQorICAgICwgbV9pc0Zv
clBsYXRmb3JtRm9udCh0cnVlKQoreworICAgIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5hcHBl
bmQoRm9udFJhbmdlcyhmb250Q2FjaGUoKS5mb250Rm9yUGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0
YSkpKTsKK30KKworRm9udEdseXBoczo6fkZvbnRHbHlwaHMoKQoreworfQorCit2b2lkIEZvbnRH
bHlwaHM6OmRldGVybWluZVBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24p
Cit7CisgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRl
c2NyaXB0aW9uLCAwKTsKKyAgICB1bnNpZ25lZCBudW1SYW5nZXMgPSBwcmltYXJ5UmFuZ2VzLnNp
emUoKTsKKyAgICBpZiAobnVtUmFuZ2VzID09IDEpCisgICAgICAgIG1fcGl0Y2ggPSBwcmltYXJ5
UmFuZ2VzLnJhbmdlQXQoMCkuZm9udCgpLnBpdGNoKCk7CisgICAgZWxzZQorICAgICAgICBtX3Bp
dGNoID0gVmFyaWFibGVQaXRjaDsKK30KKworYm9vbCBGb250R2x5cGhzOjppc0xvYWRpbmdDdXN0
b21Gb250cygpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiBmb250UmFuZ2VzIDogbV9yZWFsaXpl
ZEZhbGxiYWNrUmFuZ2VzKSB7CisgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTG9hZGluZygpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
c3RhdGljIEZvbnRSYW5nZXMgcmVhbGl6ZU5leHRGYWxsYmFjayhjb25zdCBGb250RGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uLCB1bnNpZ25lZCYgaW5kZXgsIEZvbnRTZWxlY3RvciogZm9udFNlbGVj
dG9yKQoreworICAgIEFTU0VSVChpbmRleCA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCkpOwor
CisgICAgd2hpbGUgKGluZGV4IDwgZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKSkgeworICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSA9IGRlc2NyaXB0aW9uLmZhbWlseUF0KGluZGV4
KyspOworICAgICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBpZiAoZm9udFNlbGVjdG9yKSB7CisgICAgICAgICAgICBhdXRvIHJhbmdlcyA9
IGZvbnRTZWxlY3Rvci0+Zm9udFJhbmdlc0ZvckZhbWlseShkZXNjcmlwdGlvbiwgZmFtaWx5KTsK
KyAgICAgICAgICAgIGlmICghcmFuZ2VzLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIHJldHVy
biByYW5nZXM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8gZm9udCA9IGZvbnRDYWNoZSgp
LmZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGZhbWlseSkpCisgICAgICAgICAgICByZXR1cm4g
Rm9udFJhbmdlcyhXVEY6Om1vdmUoZm9udCkpOworICAgIH0KKyAgICAvLyBXZSBkaWRuJ3QgZmlu
ZCBhIGZvbnQuIFRyeSB0byBmaW5kIGEgc2ltaWxhciBmb250IHVzaW5nIG91ciBvd24gc3BlY2lm
aWMga25vd2xlZGdlIGFib3V0IG91ciBwbGF0Zm9ybS4KKyAgICAvLyBGb3IgZXhhbXBsZSBvbiBP
UyBYLCB3ZSBrbm93IHRvIG1hcCBhbnkgZmFtaWxpZXMgY29udGFpbmluZyB0aGUgd29yZHMgQXJh
YmljLCBQYXNodG8sIG9yIFVyZHUgdG8gdGhlCisgICAgLy8gR2VlemEgUHJvIGZvbnQuCisgICAg
cmV0dXJuIEZvbnRSYW5nZXMoZm9udENhY2hlKCkuc2ltaWxhckZvbnQoZGVzY3JpcHRpb24pKTsK
K30KKworY29uc3QgRm9udFJhbmdlcyYgRm9udEdseXBoczo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2Vz
QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCit7
CisgICAgaWYgKGluZGV4IDwgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLnNpemUoKSkKKyAgICAg
ICAgcmV0dXJuIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlc1tpbmRleF07CisKKyAgICBBU1NFUlQo
aW5kZXggPT0gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLnNpemUoKSk7CisgICAgQVNTRVJUKGZv
bnRDYWNoZSgpLmdlbmVyYXRpb24oKSA9PSBtX2dlbmVyYXRpb24pOworCisgICAgbV9yZWFsaXpl
ZEZhbGxiYWNrUmFuZ2VzLmFwcGVuZChGb250UmFuZ2VzKCkpOworICAgIGF1dG8mIGZvbnRSYW5n
ZXMgPSBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMubGFzdCgpOworCisgICAgaWYgKCFpbmRleCkg
eworICAgICAgICBmb250UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxsYmFjayhkZXNjcmlwdGlvbiwg
bV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7CisgICAg
ICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpICYmIG1fZm9udFNlbGVjdG9yKQorICAgICAgICAg
ICAgZm9udFJhbmdlcyA9IG1fZm9udFNlbGVjdG9yLT5mb250UmFuZ2VzRm9yRmFtaWx5KGRlc2Ny
aXB0aW9uLCBzdGFuZGFyZEZhbWlseSk7CisgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgp
KQorICAgICAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMoZm9udENhY2hlKCkubGFzdFJl
c29ydEZhbGxiYWNrRm9udChkZXNjcmlwdGlvbikpOworICAgICAgICByZXR1cm4gZm9udFJhbmdl
czsKKyAgICB9CisKKyAgICBpZiAobV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IDwgZGVzY3Jp
cHRpb24uZmFtaWx5Q291bnQoKSkKKyAgICAgICAgZm9udFJhbmdlcyA9IHJlYWxpemVOZXh0RmFs
bGJhY2soZGVzY3JpcHRpb24sIG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCwgbV9mb250U2Vs
ZWN0b3IuZ2V0KCkpOworCisgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkgJiYgbV9mb250U2Vs
ZWN0b3IpIHsKKyAgICAgICAgQVNTRVJUKG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCA+PSBk
ZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpKTsKKworICAgICAgICB1bnNpZ25lZCBmb250U2VsZWN0
b3JGYWxsYmFja0luZGV4ID0gbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IC0gZGVzY3JpcHRp
b24uZmFtaWx5Q291bnQoKTsKKyAgICAgICAgaWYgKGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXgg
PT0gbV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udENvdW50KCkpCisgICAgICAgICAgICByZXR1
cm4gZm9udFJhbmdlczsKKyAgICAgICAgKyttX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXg7Cisg
ICAgICAgIGZvbnRSYW5nZXMgPSBGb250UmFuZ2VzKG1fZm9udFNlbGVjdG9yLT5mYWxsYmFja0Zv
bnRBdChkZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRleCkpOworICAgIH0KKwor
ICAgIHJldHVybiBmb250UmFuZ2VzOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNJblJhbmdl
KFVDaGFyMzIgY2hhcmFjdGVyLCBVQ2hhcjMyIGxvd2VyQm91bmQsIFVDaGFyMzIgdXBwZXJCb3Vu
ZCkKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVyID49IGxvd2VyQm91bmQgJiYgY2hhcmFjdGVyIDw9
IHVwcGVyQm91bmQ7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZElnbm9yZVJvdGF0aW9uKFVDaGFy
MzIgY2hhcmFjdGVyKQoreworICAgIGlmIChjaGFyYWN0ZXIgPT0gMHgwMDBBNyB8fCBjaGFyYWN0
ZXIgPT0gMHgwMDBBOSB8fCBjaGFyYWN0ZXIgPT0gMHgwMDBBRSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAoY2hhcmFjdGVyID09IDB4MDAwQjYgfHwgY2hhcmFjdGVyID09IDB4MDAw
QkMgfHwgY2hhcmFjdGVyID09IDB4MDAwQkQgfHwgY2hhcmFjdGVyID09IDB4MDAwQkUpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDAyRTUs
IDB4MDAyRUIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoaXNJblJhbmdl
KGNoYXJhY3RlciwgMHgwMTEwMCwgMHgwMTFGRikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgw
MTQwMSwgMHgwMTY3RikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMTgwMCwgMHgwMThGRikp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGNoYXJhY3RlciA9PSAweDAyMDE2IHx8
IGNoYXJhY3RlciA9PSAweDAyMDIwIHx8IGNoYXJhY3RlciA9PSAweDAyMDIxIHx8IGNoYXJhY3Rl
ciA9PSAweDIwMzAgfHwgY2hhcmFjdGVyID09IDB4MDIwMzEpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIwM0IsIDB4MDIwM0QpIHx8IGNo
YXJhY3RlciA9PSAweDAyMDQyIHx8IGNoYXJhY3RlciA9PSAweDAyMDQ0IHx8IGNoYXJhY3RlciA9
PSAweDAyMDQ3CisgICAgICAgIHx8IGNoYXJhY3RlciA9PSAweDAyMDQ4IHx8IGNoYXJhY3RlciA9
PSAweDAyMDQ5IHx8IGNoYXJhY3RlciA9PSAweDIwNTEpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIwNjUsIDB4MDIwNjkpIHx8IGlzSW5S
YW5nZShjaGFyYWN0ZXIsIDB4MDIwREQsIDB4MDIwRTApCisgICAgICAgIHx8IGlzSW5SYW5nZShj
aGFyYWN0ZXIsIDB4MDIwRTIsIDB4MDIwRTQpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIx
MDAsIDB4MDIxMTcpCisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIxMTksIDB4
MDIxMzEpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIxMzMsIDB4MDIxM0YpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMTQ1LCAw
eDAyMTRBKSB8fCBjaGFyYWN0ZXIgPT0gMHgwMjE0QyB8fCBjaGFyYWN0ZXIgPT0gMHgwMjE0RAor
ICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMTRGLCAweDAyMThGKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjMwMCwg
MHgwMjMwNykgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjMwQywgMHgwMjMxRikKKyAgICAg
ICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjMyMiwgMHgwMjMyQikgfHwgaXNJblJhbmdl
KGNoYXJhY3RlciwgMHgwMjM3RCwgMHgwMjM5QSkKKyAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJh
Y3RlciwgMHgwMjNCNCwgMHgwMjNCNikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjNCQSwg
MHgwMjNDRikKKyAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjNEMSwgMHgwMjNE
QikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjNFMiwgMHgwMjRGRikpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDI1QTAsIDB4MDI2
MTkpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDI2MjAsIDB4MDI3NjcpCisgICAgICAgIHx8
IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDI3NzYsIDB4MDI3OTMpIHx8IGlzSW5SYW5nZShjaGFy
YWN0ZXIsIDB4MDJCMTIsIDB4MDJCMkYpCisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIs
IDB4MDJCNEQsIDB4MDJCRkYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDJFODAsIDB4MDMw
MDcpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjaGFyYWN0ZXIgPT0gMHgwMzAx
MiB8fCBjaGFyYWN0ZXIgPT0gMHgwMzAxMyB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAzMDIw
LCAweDAzMDJGKQorICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAzMDMxLCAweDAz
MDlGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAzMEExLCAweDAzMEZCKQorICAgICAgICB8
fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAzMEZELCAweDBBNENGKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwQTg0MCwgMHgwQTg3Rikg
fHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwQTk2MCwgMHgwQTk3RikKKyAgICAgICAgfHwgaXNJ
blJhbmdlKGNoYXJhY3RlciwgMHgwQUMwMCwgMHgwRDdGRikgfHwgaXNJblJhbmdlKGNoYXJhY3Rl
ciwgMHgwRTAwMCwgMHgwRkFGRikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGlz
SW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZFMTAsIDB4MEZFMUYpIHx8IGlzSW5SYW5nZShjaGFyYWN0
ZXIsIDB4MEZFMzAsIDB4MEZFNDgpCisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4
MEZFNTAsIDB4MEZFNTcpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZFNUYsIDB4MEZFNjIp
CisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZFNjcsIDB4MEZFNkYpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRjAx
LCAweDBGRjA3KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRjBBLCAweDBGRjBDKQorICAg
ICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRjBFLCAweDBGRjE5KSB8fCBjaGFyYWN0
ZXIgPT0gMHgwRkYxQiB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRjFGLCAweDBGRjNBKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoY2hhcmFjdGVyID09IDB4MEZGM0MgfHwg
Y2hhcmFjdGVyID09IDB4MEZGM0UpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGlz
SW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZGNDAsIDB4MEZGNUEpIHx8IGlzSW5SYW5nZShjaGFyYWN0
ZXIsIDB4MEZGRTAsIDB4MEZGRTIpCisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4
MEZGRTQsIDB4MEZGRTcpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZGRjAsIDB4MEZGRjgp
CisgICAgICAgIHx8IGNoYXJhY3RlciA9PSAweDBGRkZEKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDEzMDAwLCAweDEzNDJGKSB8fCBpc0lu
UmFuZ2UoY2hhcmFjdGVyLCAweDFCMDAwLCAweDFCMEZGKQorICAgICAgICB8fCBpc0luUmFuZ2Uo
Y2hhcmFjdGVyLCAweDFEMDAwLCAweDFEMUZGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDFE
MzAwLCAweDFEMzdGKQorICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDFGMDAwLCAw
eDFGNjRGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDFGNjgwLCAweDFGNzdGKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MjAw
MDAsIDB4MkZGRkQpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MzAwMDAsIDB4M0ZGRkQpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmIFBMQVRG
T1JNKENPQ09BKQorc3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDSktDaGFyYWN0ZXJXaXRo
b3V0U3ludGhldGljSXRhbGljKFVDaGFyMzIgY2hhcmFjdGVyLCBHbHlwaERhdGEmIGRhdGEpCit7
CisgICAgR2x5cGhEYXRhIG5vbkl0YWxpY0RhdGEgPSBkYXRhLmZvbnQtPm5vblN5bnRoZXRpY0l0
YWxpY0ZvbnQoKS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CisgICAgaWYgKG5v
bkl0YWxpY0RhdGEuZm9udCkKKyAgICAgICAgcmV0dXJuIG5vbkl0YWxpY0RhdGE7CisgICAgcmV0
dXJuIGRhdGE7Cit9CisjZW5kaWYKKyAgICAKK3N0YXRpYyBHbHlwaERhdGEgZ2x5cGhEYXRhRm9y
Tm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oVUNoYXIzMiBjaGFyYWN0ZXIsIE5v
bkNKS0dseXBoT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGNvbnN0IEdseXBoRGF0YSYgZGF0YSkK
K3sKKyAgICBpZiAob3JpZW50YXRpb24gPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblVwcmlnaHQg
fHwgc2hvdWxkSWdub3JlUm90YXRpb24oY2hhcmFjdGVyKSkgeworICAgICAgICBHbHlwaERhdGEg
dXByaWdodERhdGEgPSBkYXRhLmZvbnQtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnQoKS0+Z2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CisgICAgICAgIC8vIElmIHRoZSBnbHlwaHMgYXJl
IHRoZSBzYW1lLCB0aGVuIHdlIGtub3cgd2UgY2FuIGp1c3QgdXNlIHRoZSBob3Jpem9udGFsIGds
eXBoIHJvdGF0ZWQgdmVydGljYWxseSB0byBiZSB1cHJpZ2h0LgorICAgICAgICBpZiAoZGF0YS5n
bHlwaCA9PSB1cHJpZ2h0RGF0YS5nbHlwaCkKKyAgICAgICAgICAgIHJldHVybiBkYXRhOworICAg
ICAgICAvLyBUaGUgZ2x5cGhzIGFyZSBkaXN0aW5jdCwgbWVhbmluZyB0aGF0IHRoZSBmb250IGhh
cyBhIHZlcnRpY2FsLXJpZ2h0IGdseXBoIGJha2VkIGludG8gaXQuIFdlIGNhbid0IHVzZSB0aGF0
CisgICAgICAgIC8vIGdseXBoLCBzbyB3ZSBmYWxsIGJhY2sgdG8gdGhlIHVwcmlnaHQgZGF0YSBh
bmQgdXNlIHRoZSBob3Jpem9udGFsIGdseXBoLgorICAgICAgICBpZiAodXByaWdodERhdGEuZm9u
dCkKKyAgICAgICAgICAgIHJldHVybiB1cHJpZ2h0RGF0YTsKKyAgICB9IGVsc2UgaWYgKG9yaWVu
dGF0aW9uID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KSB7CisgICAgICAg
IEdseXBoRGF0YSB2ZXJ0aWNhbFJpZ2h0RGF0YSA9IGRhdGEuZm9udC0+dmVydGljYWxSaWdodE9y
aWVudGF0aW9uRm9udCgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICAg
ICAgLy8gSWYgdGhlIGdseXBocyBhcmUgZGlzdGluY3QsIHdlIHdpbGwgbWFrZSB0aGUgYXNzdW1w
dGlvbiB0aGF0IHRoZSBmb250IGhhcyBhIHZlcnRpY2FsLXJpZ2h0IGdseXBoIGJha2VkCisgICAg
ICAgIC8vIGludG8gaXQuCisgICAgICAgIGlmIChkYXRhLmdseXBoICE9IHZlcnRpY2FsUmlnaHRE
YXRhLmdseXBoKQorICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgIC8vIFRoZSBnbHlw
aHMgYXJlIGlkZW50aWNhbCwgbWVhbmluZyB0aGF0IHdlIHNob3VsZCBqdXN0IHVzZSB0aGUgaG9y
aXpvbnRhbCBnbHlwaC4KKyAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHREYXRhLmZvbnQpCisgICAg
ICAgICAgICByZXR1cm4gdmVydGljYWxSaWdodERhdGE7CisgICAgfQorICAgIHJldHVybiBkYXRh
OworfQorCitHbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2so
VUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFu
dCB2YXJpYW50KQoreworICAgIC8vIFN5c3RlbSBmYWxsYmFjayBpcyBjaGFyYWN0ZXItZGVwZW5k
ZW50LgorICAgIGF1dG8mIHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChk
ZXNjcmlwdGlvbiwgMCk7CisgICAgYXV0byogb3JpZ2luYWxGb250ID0gcHJpbWFyeVJhbmdlcy5m
b250Rm9yQ2hhcmFjdGVyKGMpOworICAgIGlmICghb3JpZ2luYWxGb250KQorICAgICAgICBvcmln
aW5hbEZvbnQgPSAmcHJpbWFyeVJhbmdlcy5mb250Rm9yRmlyc3RSYW5nZSgpOworCisgICAgUmVm
UHRyPEZvbnQ+IHN5c3RlbUZhbGxiYWNrRm9udCA9IG9yaWdpbmFsRm9udC0+c3lzdGVtRmFsbGJh
Y2tGb250Rm9yQ2hhcmFjdGVyKGMsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250KTsK
KyAgICBpZiAoIXN5c3RlbUZhbGxiYWNrRm9udCkKKyAgICAgICAgcmV0dXJuIEdseXBoRGF0YSgp
OworCisgICAgaWYgKHN5c3RlbUZhbGxiYWNrRm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRp
b24oKSA9PSBWZXJ0aWNhbCAmJiAhc3lzdGVtRmFsbGJhY2tGb250LT5oYXNWZXJ0aWNhbEdseXBo
cygpICYmIEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQorICAgICAgICB2
YXJpYW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsKKworICAgIEdseXBoRGF0YSBmYWxsYmFj
a0dseXBoRGF0YTsKKyAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50KQorICAgICAgICBm
YWxsYmFja0dseXBoRGF0YSA9IHN5c3RlbUZhbGxiYWNrRm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKGMpOworICAgIGVsc2UKKyAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBzeXN0ZW1GYWxs
YmFja0ZvbnQtPnZhcmlhbnRGb250KGRlc2NyaXB0aW9uLCB2YXJpYW50KS0+Z2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKGMpOworCisgICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCAmJiBmYWxs
YmFja0dseXBoRGF0YS5mb250KSB7CisgICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRl
b2dyYXBoT3JTeW1ib2woYykgJiYgZmFsbGJhY2tHbHlwaERhdGEuZm9udC0+cGxhdGZvcm1EYXRh
KCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhZmFsbGJhY2tHbHlwaERhdGEuZm9udC0+
aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQorICAgICAgICAgICAgZmFsbGJhY2tHbHlwaERh
dGEgPSBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihjLCBk
ZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCksIGZhbGxiYWNrR2x5cGhEYXRhKTsK
KyAgICB9CisKKyAgICAvLyBLZWVwIHRoZSBzeXN0ZW0gZmFsbGJhY2sgZm9udHMgd2UgdXNlIGFs
aXZlLgorICAgIGlmIChmYWxsYmFja0dseXBoRGF0YS5nbHlwaCkKKyAgICAgICAgbV9zeXN0ZW1G
YWxsYmFja0ZvbnRTZXQuYWRkKHN5c3RlbUZhbGxiYWNrRm9udC5yZWxlYXNlKCkpOworCisgICAg
cmV0dXJuIGZhbGxiYWNrR2x5cGhEYXRhOworfQorCitHbHlwaERhdGEgRm9udEdseXBoczo6Z2x5
cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpCit7Cisg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgYXV0byYgZm9udFJhbmdlcyA9IHJlYWxpemVGYWxs
YmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCBmYWxsYmFja0luZGV4KyspOworICAgICAgICBpZiAo
Zm9udFJhbmdlcy5pc051bGwoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBhdXRvKiBm
b250ID0gZm9udFJhbmdlcy5mb250Rm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBHbHlwaERhdGEg
ZGF0YSA9IGZvbnQgPyBmb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYykgOiBHbHlwaERhdGEo
KTsKKyAgICAgICAgaWYgKGRhdGEuZm9udCkgeworICAgICAgICAgICAgLy8gVGhlIHZhcmlhbnRG
b250IGZ1bmN0aW9uIHNob3VsZCBub3Qgbm9ybWFsbHkgcmV0dXJuIDAuCisgICAgICAgICAgICAv
LyBCdXQgaWYgaXQgZG9lcywgd2Ugd2lsbCBqdXN0IHJlbmRlciB0aGUgY2FwaXRhbCBsZXR0ZXIg
YmlnLgorICAgICAgICAgICAgUmVmUHRyPEZvbnQ+IHZhcmlhbnRGb250ID0gZGF0YS5mb250LT52
YXJpYW50Rm9udChkZXNjcmlwdGlvbiwgdmFyaWFudCk7CisgICAgICAgICAgICBpZiAoIXZhcmlh
bnRGb250KQorICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOworCisgICAgICAgICAgICByZXR1
cm4gdmFyaWFudEZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhjLCBkZXNjcmlwdGlv
biwgdmFyaWFudCk7Cit9CisKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JOb3Jt
YWxWYXJpYW50KFVDaGFyMzIgYywgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikK
K3sKKyAgICBjb25zdCB1bnNpZ25lZCBwYWdlTnVtYmVyID0gYyAvIEdseXBoUGFnZTo6c2l6ZTsK
KworICAgIGZvciAodW5zaWduZWQgZmFsbGJhY2tJbmRleCA9IDA7IHRydWU7ICsrZmFsbGJhY2tJ
bmRleCkgeworICAgICAgICBhdXRvJiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2Vz
QXQoZGVzY3JpcHRpb24sIGZhbGxiYWNrSW5kZXgpOworICAgICAgICBpZiAoZm9udFJhbmdlcy5p
c051bGwoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBhdXRvKiBmb250ID0gZm9udFJh
bmdlcy5mb250Rm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBhdXRvKiBwYWdlID0gZm9udCA/IGZv
bnQtPmdseXBoUGFnZShwYWdlTnVtYmVyKSA6IG51bGxwdHI7CisgICAgICAgIGlmICghcGFnZSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBHbHlwaERhdGEgZGF0YSA9IHBhZ2UtPmds
eXBoRGF0YUZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgaWYgKGRhdGEuZm9udCkgeworICAgICAg
ICAgICAgaWYgKGRhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0
aWNhbCAmJiAhZGF0YS5mb250LT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0
aEdseXBoT3JpZW50YXRpb24oYywgZGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigp
LCBkYXRhKTsKKworICAgICAgICAgICAgICAgIGlmICghZGF0YS5mb250LT5oYXNWZXJ0aWNhbEds
eXBocygpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgYnJva2VuIGlkZW9ncmFw
aCBmb250IGRhdGEuIFRoZSBicm9rZW4gaWRlb2dyYXBoIGZvbnQgd2lsbCB1c2UgdGhlIGhvcml6
b250YWwgd2lkdGggb2YgZ2x5cGhzCisgICAgICAgICAgICAgICAgICAgIC8vIHRvIG1ha2Ugc3Vy
ZSB5b3UgZ2V0IGEgc3F1YXJlIChldmVuIGZvciBicm9rZW4gZ2x5cGhzIGxpa2Ugc3ltYm9scyB1
c2VkIGZvciBwdW5jdHVhdGlvbikuCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaERh
dGFGb3JWYXJpYW50KGMsIGRlc2NyaXB0aW9uLCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50LCBmYWxs
YmFja0luZGV4KTsKKyAgICAgICAgICAgICAgICB9CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAg
ICAgICAgICAgICAgaWYgKGRhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkuc3ludGhldGljT2JsaXF1
ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yQ0pLQ2hhcmFjdGVy
V2l0aG91dFN5bnRoZXRpY0l0YWxpYyhjLCBkYXRhKTsKKyNlbmRpZgorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhjLCBkZXNjcmlwdGlvbiwgTm9ybWFsVmFyaWFu
dCk7Cit9CisKK3N0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2VGcm9tRm9udFJhbmdl
cyh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250UmFuZ2VzJiBmb250UmFuZ2VzKQorewor
ICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBudWxscHRyOworICAgIFVDaGFyMzIgcGFnZVJhbmdlRnJv
bSA9IHBhZ2VOdW1iZXIgKiBHbHlwaFBhZ2U6OnNpemU7CisgICAgVUNoYXIzMiBwYWdlUmFuZ2VU
byA9IHBhZ2VSYW5nZUZyb20gKyBHbHlwaFBhZ2U6OnNpemUgLSAxOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBmb250UmFuZ2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIHJh
bmdlID0gZm9udFJhbmdlcy5yYW5nZUF0KGkpOworICAgICAgICBpZiAocmFuZ2UudG8oKSkgewor
ICAgICAgICAgICAgaWYgKHJhbmdlLmZyb20oKSA8PSBwYWdlUmFuZ2VGcm9tICYmIHBhZ2VSYW5n
ZVRvIDw9IHJhbmdlLnRvKCkpCisgICAgICAgICAgICAgICAgZm9udCA9ICZyYW5nZS5mb250KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWZvbnQpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9y
aWVudGF0aW9uKCkgPT0gVmVydGljYWwpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
cmV0dXJuIGNvbnN0X2Nhc3Q8R2x5cGhQYWdlKj4oZm9udC0+Z2x5cGhQYWdlKHBhZ2VOdW1iZXIp
KTsKK30KKworR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hh
cjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZh
cmlhbnQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQodmFyaWFu
dCAhPSBBdXRvVmFyaWFudCk7CisKKyAgICBpZiAodmFyaWFudCAhPSBOb3JtYWxWYXJpYW50KQor
ICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yVmFyaWFudChjLCBkZXNjcmlwdGlvbiwgdmFyaWFu
dCwgMCk7CisKKyAgICBjb25zdCB1bnNpZ25lZCBwYWdlTnVtYmVyID0gYyAvIEdseXBoUGFnZTo6
c2l6ZTsKKworICAgIFJlZlB0cjxHbHlwaFBhZ2U+JiBjYWNoZWRQYWdlID0gcGFnZU51bWJlciA/
IG1fY2FjaGVkUGFnZXMuYWRkKHBhZ2VOdW1iZXIsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZSA6
IG1fY2FjaGVkUGFnZVplcm87CisgICAgaWYgKCFjYWNoZWRQYWdlKQorICAgICAgICBjYWNoZWRQ
YWdlID0gZ2x5cGhQYWdlRnJvbUZvbnRSYW5nZXMocGFnZU51bWJlciwgcmVhbGl6ZUZhbGxiYWNr
UmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApKTsKKworICAgIEdseXBoRGF0YSBnbHlwaERhdGEgPSBj
YWNoZWRQYWdlID8gY2FjaGVkUGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDogR2x5cGhE
YXRhKCk7CisgICAgaWYgKCFnbHlwaERhdGEuZ2x5cGgpIHsKKyAgICAgICAgaWYgKCFjYWNoZWRQ
YWdlKQorICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRG
b250cygpOworICAgICAgICBlbHNlIGlmIChjYWNoZWRQYWdlLT5pc0ltbXV0YWJsZSgpKQorICAg
ICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlQ29weUZvck1peGVkRm9udHMo
KmNhY2hlZFBhZ2UpOworCisgICAgICAgIGdseXBoRGF0YSA9IGdseXBoRGF0YUZvck5vcm1hbFZh
cmlhbnQoYywgZGVzY3JpcHRpb24pOworICAgICAgICBjYWNoZWRQYWdlLT5zZXRHbHlwaERhdGFG
b3JDaGFyYWN0ZXIoYywgZ2x5cGhEYXRhLmdseXBoLCBnbHlwaERhdGEuZm9udCk7CisgICAgfQor
ICAgIHJldHVybiBnbHlwaERhdGE7Cit9CisKK3ZvaWQgRm9udEdseXBoczo6cHJ1bmVTeXN0ZW1G
YWxsYmFja3MoKQoreworICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKyAgICAvLyBNdXRhYmxlIGdseXBoIHBhZ2VzIG1heSByZWZlcmVu
Y2UgZmFsbGJhY2sgZm9udHMuCisgICAgaWYgKG1fY2FjaGVkUGFnZVplcm8gJiYgIW1fY2FjaGVk
UGFnZVplcm8tPmlzSW1tdXRhYmxlKCkpCisgICAgICAgIG1fY2FjaGVkUGFnZVplcm8gPSBudWxs
cHRyOworICAgIG1fY2FjaGVkUGFnZXMucmVtb3ZlSWYoW10oZGVjbHR5cGUobV9jYWNoZWRQYWdl
cyk6OktleVZhbHVlUGFpclR5cGUmIGtleUFuZFZhbHVlKSB7CisgICAgICAgIHJldHVybiAha2V5
QW5kVmFsdWUudmFsdWUtPmlzSW1tdXRhYmxlKCk7CisgICAgfSk7CisgICAgbV9zeXN0ZW1GYWxs
YmFja0ZvbnRTZXQuY2xlYXIoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAJKHdvcmtpbmcgY29w
eSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZUZv
bnRzLmgiCiAKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgpAQCAtMzYsNyArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAKLUZvbnRHbHlwaHM6
OkZvbnRHbHlwaHMoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKK0ZvbnRD
YXNjYWRlRm9udHM6OkZvbnRDYXNjYWRlRm9udHMoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZv
bnRTZWxlY3RvcikKICAgICA6IG1fY2FjaGVkUHJpbWFyeUZvbnQoMCkKICAgICAsIG1fZm9udFNl
bGVjdG9yKGZvbnRTZWxlY3RvcikKICAgICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbihtX2ZvbnRT
ZWxlY3RvciA/IG1fZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAwKQpAQCAtNDQsNyArNDQsNyBA
QCBGb250R2x5cGhzOjpGb250R2x5cGhzKFBhc3NSZWZQdHI8Rm9udFNlCiB7CiB9CiAKLUZvbnRH
bHlwaHM6OkZvbnRHbHlwaHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQor
Rm9udENhc2NhZGVGb250czo6Rm9udENhc2NhZGVGb250cyhjb25zdCBGb250UGxhdGZvcm1EYXRh
JiBwbGF0Zm9ybURhdGEpCiAgICAgOiBtX2NhY2hlZFByaW1hcnlGb250KDApCiAgICAgLCBtX2Zv
bnRTZWxlY3RvcigwKQogICAgICwgbV9mb250U2VsZWN0b3JWZXJzaW9uKDApCkBAIC01NCwxMSAr
NTQsMTEgQEAgRm9udEdseXBoczo6Rm9udEdseXBocyhjb25zdCBGb250UGxhdGZvcgogICAgIG1f
cmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5hcHBlbmQoRm9udFJhbmdlcyhmb250Q2FjaGUoKS5mb250
Rm9yUGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkpKTsKIH0KIAotRm9udEdseXBoczo6fkZvbnRH
bHlwaHMoKQorRm9udENhc2NhZGVGb250czo6fkZvbnRDYXNjYWRlRm9udHMoKQogewogfQogCi12
b2lkIEZvbnRHbHlwaHM6OmRldGVybWluZVBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24pCit2b2lkIEZvbnRDYXNjYWRlRm9udHM6OmRldGVybWluZVBpdGNoKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9
IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKICAgICB1bnNpZ25lZCBu
dW1SYW5nZXMgPSBwcmltYXJ5UmFuZ2VzLnNpemUoKTsKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBG
b250R2x5cGhzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGbwogICAgICAgICBtX3BpdGNoID0gVmFy
aWFibGVQaXRjaDsKIH0KIAotYm9vbCBGb250R2x5cGhzOjppc0xvYWRpbmdDdXN0b21Gb250cygp
IGNvbnN0Citib29sIEZvbnRDYXNjYWRlRm9udHM6OmlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgY29u
c3QKIHsKICAgICBmb3IgKGF1dG8mIGZvbnRSYW5nZXMgOiBtX3JlYWxpemVkRmFsbGJhY2tSYW5n
ZXMpIHsKICAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNMb2FkaW5nKCkpCkBAIC05OSw3ICs5OSw3
IEBAIHN0YXRpYyBGb250UmFuZ2VzIHJlYWxpemVOZXh0RmFsbGJhY2soY28KICAgICByZXR1cm4g
Rm9udFJhbmdlcyhmb250Q2FjaGUoKS5zaW1pbGFyRm9udChkZXNjcmlwdGlvbikpOwogfQogCi1j
b25zdCBGb250UmFuZ2VzJiBGb250R2x5cGhzOjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25z
dCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCB1bnNpZ25lZCBpbmRleCkKK2NvbnN0IEZv
bnRSYW5nZXMmIEZvbnRDYXNjYWRlRm9udHM6OnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2lnbmVkIGluZGV4KQogewogICAgIGlm
IChpbmRleCA8IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5zaXplKCkpCiAgICAgICAgIHJldHVy
biBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNbaW5kZXhdOwpAQCAtMjUyLDcgKzI1Miw3IEBAIHN0
YXRpYyBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmEKICAgICByZXR1cm4gZGF0YTsK
IH0KIAotR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVD
aGFyMzIgYywgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQg
dmFyaWFudCkKK0dseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JTeXN0ZW1G
YWxsYmFjayhVQ2hhcjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZv
bnRWYXJpYW50IHZhcmlhbnQpCiB7CiAgICAgLy8gU3lzdGVtIGZhbGxiYWNrIGlzIGNoYXJhY3Rl
ci1kZXBlbmRlbnQuCiAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jh
bmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKQEAgLTI4NSw3ICsyODUsNyBAQCBHbHlwaERhdGEgRm9u
dEdseXBoczo6Z2x5cGhEYXRhRm9yU3lzdGVtCiAgICAgcmV0dXJuIGZhbGxiYWNrR2x5cGhEYXRh
OwogfQogCi1HbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMy
IGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlh
bnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpCitHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6
Z2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpCiB7
CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgYXV0byYgZm9udFJhbmdlcyA9IHJlYWxpemVG
YWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCBmYWxsYmFja0luZGV4KyspOwpAQCAtMzA3LDcg
KzMwNyw3IEBAIEdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JWYXJpYW4KICAgICBy
ZXR1cm4gZ2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soYywgZGVzY3JpcHRpb24sIHZhcmlhbnQp
OwogfQogCi1HbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChV
Q2hhcjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCitHbHlwaERhdGEg
Rm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChVQ2hhcjMyIGMsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAgY29uc3QgdW5zaWduZWQg
cGFnZU51bWJlciA9IGMgLyBHbHlwaFBhZ2U6OnNpemU7CiAKQEAgLTM2NSw3ICszNjUsNyBAQCBz
dGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gZ2x5cGhQYWdlRnJvbUZvCiAgICAgcmV0dXJuIGNvbnN0
X2Nhc3Q8R2x5cGhQYWdlKj4oZm9udC0+Z2x5cGhQYWdlKHBhZ2VOdW1iZXIpKTsKIH0KIAotR2x5
cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQpCitHbHlw
aERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkK
IHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVCh2YXJpYW50ICE9IEF1
dG9WYXJpYW50KTsKQEAgLTM5Miw3ICszOTIsNyBAQCBHbHlwaERhdGEgRm9udEdseXBoczo6Z2x5
cGhEYXRhRm9yQ2hhcmFjCiAgICAgcmV0dXJuIGdseXBoRGF0YTsKIH0KIAotdm9pZCBGb250R2x5
cGhzOjpwcnVuZVN5c3RlbUZhbGxiYWNrcygpCit2b2lkIEZvbnRDYXNjYWRlRm9udHM6OnBydW5l
U3lzdGVtRmFsbGJhY2tzKCkKIHsKICAgICBpZiAobV9zeXN0ZW1GYWxsYmFja0ZvbnRTZXQuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCShyZXZpc2lvbiAxODAyNjQpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuaDoxODAyNjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMTAsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aWZuZGVmIEZvbnRHbHlwaHNfaAorI2RlZmluZSBGb250R2x5cGhzX2gKKworI2luY2x1ZGUgIkZv
bnQuaCIKKyNpbmNsdWRlICJGb250UmFuZ2VzLmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgi
CisjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCisjaW5jbHVkZSAiV2lkdGhDYWNoZS5oIgorI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworI2lmIFBM
QVRGT1JNKElPUykKKyNpbmNsdWRlICJXZWJDb3JlVGhyZWFkLmgiCisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnRSZWN0Owor
Y2xhc3MgRm9udERlc2NyaXB0aW9uOworY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKK2NsYXNzIEZv
bnRTZWxlY3RvcjsKKworY2xhc3MgRm9udEdseXBocyA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRH
bHlwaHM+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250R2x5cGhzKTsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IGNyZWF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rv
cj4gZm9udFNlbGVjdG9yKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEZvbnRHbHlwaHMoZm9udFNl
bGVjdG9yKSk7IH0KKyAgICBzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IGNyZWF0ZUZvclBsYXRmb3Jt
Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpIHsgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRm9udEdseXBocyhwbGF0Zm9ybURhdGEpKTsgfQorCisgICAgV0VCQ09SRV9FWFBP
UlQgfkZvbnRHbHlwaHMoKTsKKworICAgIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQoKSBjb25zdCB7
IHJldHVybiBtX2lzRm9yUGxhdGZvcm1Gb250OyB9CisKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50
KTsKKworICAgIGJvb2wgaXNGaXhlZFBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAg
IHZvaWQgZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJik7CisKKyAgICBib29s
IGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgY29uc3Q7CisKKyAgICBGb250U2VsZWN0b3IqIGZvbnRT
ZWxlY3RvcigpIHsgcmV0dXJuIG1fZm9udFNlbGVjdG9yLmdldCgpOyB9CisgICAgLy8gRklYTUU6
IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBjb21iaW5lIGZvbnRTZWxlY3RvclZlcnNpb24gYW5k
IGdlbmVyYXRpb24uCisgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lvbigpIGNvbnN0IHsg
cmV0dXJuIG1fZm9udFNlbGVjdG9yVmVyc2lvbjsgfQorICAgIHVuc2lnbmVkIGdlbmVyYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2dlbmVyYXRpb247IH0KKworICAgIFdpZHRoQ2FjaGUmIHdpZHRo
Q2FjaGUoKSB7IHJldHVybiBtX3dpZHRoQ2FjaGU7IH0KKyAgICBjb25zdCBXaWR0aENhY2hlJiB3
aWR0aENhY2hlKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aENhY2hlOyB9CisKKyAgICBjb25zdCBG
b250JiBwcmltYXJ5Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBjb25zdCBGb250UmFuZ2VzJiByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250
RGVzY3JpcHRpb24mLCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KTsKKworICAgIHZvaWQgcHJ1bmVT
eXN0ZW1GYWxsYmFja3MoKTsKKworcHJpdmF0ZToKKyAgICBGb250R2x5cGhzKFBhc3NSZWZQdHI8
Rm9udFNlbGVjdG9yPik7CisgICAgRm9udEdseXBocyhjb25zdCBGb250UGxhdGZvcm1EYXRhJik7
CisKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiwgY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQpOworICAgIEdseXBoRGF0YSBnbHlwaERh
dGFGb3JOb3JtYWxWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAg
IEdseXBoRGF0YSBnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIEZvbnRWYXJpYW50LCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KTsKKworICAgIFZlY3Rv
cjxGb250UmFuZ2VzLCAxPiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXM7CisgICAgdW5zaWduZWQg
bV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IHsgMCB9OworCisgICAgUmVmUHRyPEdseXBoUGFn
ZT4gbV9jYWNoZWRQYWdlWmVybzsKKyAgICBIYXNoTWFwPGludCwgUmVmUHRyPEdseXBoUGFnZT4+
IG1fY2FjaGVkUGFnZXM7CisKKyAgICBIYXNoU2V0PFJlZlB0cjxGb250Pj4gbV9zeXN0ZW1GYWxs
YmFja0ZvbnRTZXQ7CisKKyAgICBjb25zdCBGb250KiBtX2NhY2hlZFByaW1hcnlGb250OworICAg
IFJlZlB0cjxGb250U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9yOworCisgICAgV2lkdGhDYWNoZSBt
X3dpZHRoQ2FjaGU7CisKKyAgICB1bnNpZ25lZCBtX2ZvbnRTZWxlY3RvclZlcnNpb247CisgICAg
dW5zaWduZWQgc2hvcnQgbV9nZW5lcmF0aW9uOworICAgIFBpdGNoIG1fcGl0Y2ggeyBVbmtub3du
UGl0Y2ggfTsKKyAgICBib29sIG1faXNGb3JQbGF0Zm9ybUZvbnQgeyBmYWxzZSB9OworfTsKKwor
aW5saW5lIGJvb2wgRm9udEdseXBoczo6aXNGaXhlZFBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZGVzY3JpcHRpb24pCit7CisgICAgaWYgKG1fcGl0Y2ggPT0gVW5rbm93blBpdGNoKQorICAg
ICAgICBkZXRlcm1pbmVQaXRjaChkZXNjcmlwdGlvbik7CisgICAgcmV0dXJuIG1fcGl0Y2ggPT0g
Rml4ZWRQaXRjaDsKK307CisKK2lubGluZSBjb25zdCBGb250JiBGb250R2x5cGhzOjpwcmltYXJ5
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250KSB7CisgICAgICAg
IGF1dG8mIHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlv
biwgMCk7CisgICAgICAgIG1fY2FjaGVkUHJpbWFyeUZvbnQgPSBwcmltYXJ5UmFuZ2VzLmZvbnRG
b3JDaGFyYWN0ZXIoJyAnKTsKKyAgICAgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250KQorICAg
ICAgICAgICAgbV9jYWNoZWRQcmltYXJ5Rm9udCA9ICZwcmltYXJ5UmFuZ2VzLmZvbnRGb3JGaXJz
dFJhbmdlKCk7CisgICAgfQorICAgIHJldHVybiAqbV9jYWNoZWRQcmltYXJ5Rm9udDsKK30KKwor
fQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlRm9udHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZUZvbnRzLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTgsOCArMTgsOCBAQAogICoKICAqLwogCi0jaWZuZGVmIEZvbnRHbHlwaHNfaAotI2RlZmluZSBG
b250R2x5cGhzX2gKKyNpZm5kZWYgRm9udENhc2NhZGVGb250c19oCisjZGVmaW5lIEZvbnRDYXNj
YWRlRm9udHNfaAogCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRSYW5nZXMuaCIK
QEAgLTQxLDEzICs0MSwxMyBAQCBjbGFzcyBGb250RGVzY3JpcHRpb247CiBjbGFzcyBGb250UGxh
dGZvcm1EYXRhOwogY2xhc3MgRm9udFNlbGVjdG9yOwogCi1jbGFzcyBGb250R2x5cGhzIDogcHVi
bGljIFJlZkNvdW50ZWQ8Rm9udEdseXBocz4gewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZv
bnRHbHlwaHMpOworY2xhc3MgRm9udENhc2NhZGVGb250cyA6IHB1YmxpYyBSZWZDb3VudGVkPEZv
bnRDYXNjYWRlRm9udHM+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250Q2FzY2FkZUZv
bnRzKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IGNyZWF0ZShQYXNzUmVm
UHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEZv
bnRHbHlwaHMoZm9udFNlbGVjdG9yKSk7IH0KLSAgICBzdGF0aWMgUmVmPEZvbnRHbHlwaHM+IGNy
ZWF0ZUZvclBsYXRmb3JtRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEp
IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRm9udEdseXBocyhwbGF0Zm9ybURhdGEpKTsgfQorICAg
IHN0YXRpYyBSZWY8Rm9udENhc2NhZGVGb250cz4gY3JlYXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVj
dG9yPiBmb250U2VsZWN0b3IpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRm9udENhc2NhZGVGb250
cyhmb250U2VsZWN0b3IpKTsgfQorICAgIHN0YXRpYyBSZWY8Rm9udENhc2NhZGVGb250cz4gY3Jl
YXRlRm9yUGxhdGZvcm1Gb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkg
eyByZXR1cm4gYWRvcHRSZWYoKm5ldyBGb250Q2FzY2FkZUZvbnRzKHBsYXRmb3JtRGF0YSkpOyB9
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB+Rm9udEdseXBocygpOworICAgIFdFQkNPUkVfRVhQT1JU
IH5Gb250Q2FzY2FkZUZvbnRzKCk7CiAKICAgICBib29sIGlzRm9yUGxhdGZvcm1Gb250KCkgY29u
c3QgeyByZXR1cm4gbV9pc0ZvclBsYXRmb3JtRm9udDsgfQogCkBAIC03Miw4ICs3Miw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIHBydW5lU3lzdGVtRmFsbGJhY2tzKCk7CiAKIHByaXZhdGU6Ci0gICAg
Rm9udEdseXBocyhQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOwotICAgIEZvbnRHbHlwaHMoY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYpOworICAgIEZvbnRDYXNjYWRlRm9udHMoUGFzc1JlZlB0cjxG
b250U2VsZWN0b3I+KTsKKyAgICBGb250Q2FzY2FkZUZvbnRzKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmKTsKIAogICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMy
LCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBGb250VmFyaWFudCk7CiAgICAgR2x5cGhEYXRhIGds
eXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJik7
CkBAIC05OCwxNCArOTgsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNGb3JQbGF0Zm9ybUZv
bnQgeyBmYWxzZSB9OwogfTsKIAotaW5saW5lIGJvb2wgRm9udEdseXBoczo6aXNGaXhlZFBpdGNo
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCitpbmxpbmUgYm9vbCBGb250Q2Fz
Y2FkZUZvbnRzOjppc0ZpeGVkUGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
bikKIHsKICAgICBpZiAobV9waXRjaCA9PSBVbmtub3duUGl0Y2gpCiAgICAgICAgIGRldGVybWlu
ZVBpdGNoKGRlc2NyaXB0aW9uKTsKICAgICByZXR1cm4gbV9waXRjaCA9PSBGaXhlZFBpdGNoOwog
fTsKIAotaW5saW5lIGNvbnN0IEZvbnQmIEZvbnRHbHlwaHM6OnByaW1hcnlGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCitpbmxpbmUgY29uc3QgRm9udCYgRm9udENhc2Nh
ZGVGb250czo6cHJpbWFyeUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikK
IHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghbV9jYWNoZWRQcmltYXJ5
Rm9udCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBo
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dEdseXBocy5jcHAJKHJldmlzaW9uIDE4MDI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQwOCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250R2x5cGhzLmgiCi0KLSNp
bmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUg
IkdseXBoUGFnZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLQotRm9udEdseXBoczo6Rm9u
dEdseXBocyhQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQotICAgIDogbV9j
YWNoZWRQcmltYXJ5Rm9udCgwKQotICAgICwgbV9mb250U2VsZWN0b3IoZm9udFNlbGVjdG9yKQot
ICAgICwgbV9mb250U2VsZWN0b3JWZXJzaW9uKG1fZm9udFNlbGVjdG9yID8gbV9mb250U2VsZWN0
b3ItPnZlcnNpb24oKSA6IDApCi0gICAgLCBtX2dlbmVyYXRpb24oZm9udENhY2hlKCkuZ2VuZXJh
dGlvbigpKQotewotfQotCi1Gb250R2x5cGhzOjpGb250R2x5cGhzKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIHBsYXRmb3JtRGF0YSkKLSAgICA6IG1fY2FjaGVkUHJpbWFyeUZvbnQoMCkKLSAgICAs
IG1fZm9udFNlbGVjdG9yKDApCi0gICAgLCBtX2ZvbnRTZWxlY3RvclZlcnNpb24oMCkKLSAgICAs
IG1fZ2VuZXJhdGlvbihmb250Q2FjaGUoKS5nZW5lcmF0aW9uKCkpCi0gICAgLCBtX2lzRm9yUGxh
dGZvcm1Gb250KHRydWUpCi17Ci0gICAgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmFwcGVuZChG
b250UmFuZ2VzKGZvbnRDYWNoZSgpLmZvbnRGb3JQbGF0Zm9ybURhdGEocGxhdGZvcm1EYXRhKSkp
OwotfQotCi1Gb250R2x5cGhzOjp+Rm9udEdseXBocygpCi17Ci19Ci0KLXZvaWQgRm9udEdseXBo
czo6ZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKLXsK
LSAgICBhdXRvJiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3Jp
cHRpb24sIDApOwotICAgIHVuc2lnbmVkIG51bVJhbmdlcyA9IHByaW1hcnlSYW5nZXMuc2l6ZSgp
OwotICAgIGlmIChudW1SYW5nZXMgPT0gMSkKLSAgICAgICAgbV9waXRjaCA9IHByaW1hcnlSYW5n
ZXMucmFuZ2VBdCgwKS5mb250KCkucGl0Y2goKTsKLSAgICBlbHNlCi0gICAgICAgIG1fcGl0Y2gg
PSBWYXJpYWJsZVBpdGNoOwotfQotCi1ib29sIEZvbnRHbHlwaHM6OmlzTG9hZGluZ0N1c3RvbUZv
bnRzKCkgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8mIGZvbnRSYW5nZXMgOiBtX3JlYWxpemVkRmFs
bGJhY2tSYW5nZXMpIHsKLSAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNMb2FkaW5nKCkpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0
aWMgRm9udFJhbmdlcyByZWFsaXplTmV4dEZhbGxiYWNrKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24sIHVuc2lnbmVkJiBpbmRleCwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3Ip
Ci17Ci0gICAgQVNTRVJUKGluZGV4IDwgZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKSk7Ci0KLSAg
ICB3aGlsZSAoaW5kZXggPCBkZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpKSB7Ci0gICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5ID0gZGVzY3JpcHRpb24uZmFtaWx5QXQoaW5kZXgrKyk7
Ci0gICAgICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGlmIChmb250U2VsZWN0b3IpIHsKLSAgICAgICAgICAgIGF1dG8gcmFuZ2VzID0gZm9u
dFNlbGVjdG9yLT5mb250UmFuZ2VzRm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBmYW1pbHkpOwotICAg
ICAgICAgICAgaWYgKCFyYW5nZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJh
bmdlczsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXV0byBmb250ID0gZm9udENhY2hlKCkuZm9u
dEZvckZhbWlseShkZXNjcmlwdGlvbiwgZmFtaWx5KSkKLSAgICAgICAgICAgIHJldHVybiBGb250
UmFuZ2VzKFdURjo6bW92ZShmb250KSk7Ci0gICAgfQotICAgIC8vIFdlIGRpZG4ndCBmaW5kIGEg
Zm9udC4gVHJ5IHRvIGZpbmQgYSBzaW1pbGFyIGZvbnQgdXNpbmcgb3VyIG93biBzcGVjaWZpYyBr
bm93bGVkZ2UgYWJvdXQgb3VyIHBsYXRmb3JtLgotICAgIC8vIEZvciBleGFtcGxlIG9uIE9TIFgs
IHdlIGtub3cgdG8gbWFwIGFueSBmYW1pbGllcyBjb250YWluaW5nIHRoZSB3b3JkcyBBcmFiaWMs
IFBhc2h0bywgb3IgVXJkdSB0byB0aGUKLSAgICAvLyBHZWV6YSBQcm8gZm9udC4KLSAgICByZXR1
cm4gRm9udFJhbmdlcyhmb250Q2FjaGUoKS5zaW1pbGFyRm9udChkZXNjcmlwdGlvbikpOwotfQot
Ci1jb25zdCBGb250UmFuZ2VzJiBGb250R2x5cGhzOjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCB1bnNpZ25lZCBpbmRleCkKLXsKLSAg
ICBpZiAoaW5kZXggPCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgpKQotICAgICAgICBy
ZXR1cm4gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzW2luZGV4XTsKLQotICAgIEFTU0VSVChpbmRl
eCA9PSBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgpKTsKLSAgICBBU1NFUlQoZm9udENh
Y2hlKCkuZ2VuZXJhdGlvbigpID09IG1fZ2VuZXJhdGlvbik7Ci0KLSAgICBtX3JlYWxpemVkRmFs
bGJhY2tSYW5nZXMuYXBwZW5kKEZvbnRSYW5nZXMoKSk7Ci0gICAgYXV0byYgZm9udFJhbmdlcyA9
IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5sYXN0KCk7Ci0KLSAgICBpZiAoIWluZGV4KSB7Ci0g
ICAgICAgIGZvbnRSYW5nZXMgPSByZWFsaXplTmV4dEZhbGxiYWNrKGRlc2NyaXB0aW9uLCBtX2xh
c3RSZWFsaXplZEZhbGxiYWNrSW5kZXgsIG1fZm9udFNlbGVjdG9yLmdldCgpKTsKLSAgICAgICAg
aWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkgJiYgbV9mb250U2VsZWN0b3IpCi0gICAgICAgICAgICBm
b250UmFuZ2VzID0gbV9mb250U2VsZWN0b3ItPmZvbnRSYW5nZXNGb3JGYW1pbHkoZGVzY3JpcHRp
b24sIHN0YW5kYXJkRmFtaWx5KTsKLSAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkpCi0g
ICAgICAgICAgICBmb250UmFuZ2VzID0gRm9udFJhbmdlcyhmb250Q2FjaGUoKS5sYXN0UmVzb3J0
RmFsbGJhY2tGb250KGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIHJldHVybiBmb250UmFuZ2VzOwot
ICAgIH0KLQotICAgIGlmIChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPCBkZXNjcmlwdGlv
bi5mYW1pbHlDb3VudCgpKQotICAgICAgICBmb250UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxsYmFj
ayhkZXNjcmlwdGlvbiwgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4LCBtX2ZvbnRTZWxlY3Rv
ci5nZXQoKSk7Ci0KLSAgICBpZiAoZm9udFJhbmdlcy5pc051bGwoKSAmJiBtX2ZvbnRTZWxlY3Rv
cikgewotICAgICAgICBBU1NFUlQobV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4ID49IGRlc2Ny
aXB0aW9uLmZhbWlseUNvdW50KCkpOwotCi0gICAgICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvckZh
bGxiYWNrSW5kZXggPSBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggLSBkZXNjcmlwdGlvbi5m
YW1pbHlDb3VudCgpOwotICAgICAgICBpZiAoZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRleCA9PSBt
X2ZvbnRTZWxlY3Rvci0+ZmFsbGJhY2tGb250Q291bnQoKSkKLSAgICAgICAgICAgIHJldHVybiBm
b250UmFuZ2VzOwotICAgICAgICArK21fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleDsKLSAgICAg
ICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udEF0
KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4KSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGZvbnRSYW5nZXM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0luUmFuZ2UoVUNo
YXIzMiBjaGFyYWN0ZXIsIFVDaGFyMzIgbG93ZXJCb3VuZCwgVUNoYXIzMiB1cHBlckJvdW5kKQot
ewotICAgIHJldHVybiBjaGFyYWN0ZXIgPj0gbG93ZXJCb3VuZCAmJiBjaGFyYWN0ZXIgPD0gdXBw
ZXJCb3VuZDsKLX0KLQotc3RhdGljIGJvb2wgc2hvdWxkSWdub3JlUm90YXRpb24oVUNoYXIzMiBj
aGFyYWN0ZXIpCi17Ci0gICAgaWYgKGNoYXJhY3RlciA9PSAweDAwMEE3IHx8IGNoYXJhY3RlciA9
PSAweDAwMEE5IHx8IGNoYXJhY3RlciA9PSAweDAwMEFFKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGlmIChjaGFyYWN0ZXIgPT0gMHgwMDBCNiB8fCBjaGFyYWN0ZXIgPT0gMHgwMDBCQyB8
fCBjaGFyYWN0ZXIgPT0gMHgwMDBCRCB8fCBjaGFyYWN0ZXIgPT0gMHgwMDBCRSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMDJFNSwgMHgw
MDJFQikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGlmIChpc0luUmFuZ2UoY2hh
cmFjdGVyLCAweDAxMTAwLCAweDAxMUZGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAxNDAx
LCAweDAxNjdGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAxODAwLCAweDAxOEZGKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoY2hhcmFjdGVyID09IDB4MDIwMTYgfHwgY2hh
cmFjdGVyID09IDB4MDIwMjAgfHwgY2hhcmFjdGVyID09IDB4MDIwMjEgfHwgY2hhcmFjdGVyID09
IDB4MjAzMCB8fCBjaGFyYWN0ZXIgPT0gMHgwMjAzMSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjAzQiwgMHgwMjAzRCkgfHwgY2hhcmFj
dGVyID09IDB4MDIwNDIgfHwgY2hhcmFjdGVyID09IDB4MDIwNDQgfHwgY2hhcmFjdGVyID09IDB4
MDIwNDcKLSAgICAgICAgfHwgY2hhcmFjdGVyID09IDB4MDIwNDggfHwgY2hhcmFjdGVyID09IDB4
MDIwNDkgfHwgY2hhcmFjdGVyID09IDB4MjA1MSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjA2NSwgMHgwMjA2OSkgfHwgaXNJblJhbmdl
KGNoYXJhY3RlciwgMHgwMjBERCwgMHgwMjBFMCkKLSAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJh
Y3RlciwgMHgwMjBFMiwgMHgwMjBFNCkgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjEwMCwg
MHgwMjExNykKLSAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjExOSwgMHgwMjEz
MSkgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjEzMywgMHgwMjEzRikpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIxNDUsIDB4MDIx
NEEpIHx8IGNoYXJhY3RlciA9PSAweDAyMTRDIHx8IGNoYXJhY3RlciA9PSAweDAyMTRECi0gICAg
ICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIxNEYsIDB4MDIxOEYpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMzAwLCAweDAy
MzA3KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMzBDLCAweDAyMzFGKQotICAgICAgICB8
fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMzIyLCAweDAyMzJCKSB8fCBpc0luUmFuZ2UoY2hh
cmFjdGVyLCAweDAyMzdELCAweDAyMzlBKQotICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVy
LCAweDAyM0I0LCAweDAyM0I2KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyM0JBLCAweDAy
M0NGKQotICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyM0QxLCAweDAyM0RCKSB8
fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyM0UyLCAweDAyNEZGKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjVBMCwgMHgwMjYxOSkg
fHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjYyMCwgMHgwMjc2NykKLSAgICAgICAgfHwgaXNJ
blJhbmdlKGNoYXJhY3RlciwgMHgwMjc3NiwgMHgwMjc5MykgfHwgaXNJblJhbmdlKGNoYXJhY3Rl
ciwgMHgwMkIxMiwgMHgwMkIyRikKLSAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgw
MkI0RCwgMHgwMkJGRikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMkU4MCwgMHgwMzAwNykp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGNoYXJhY3RlciA9PSAweDAzMDEyIHx8
IGNoYXJhY3RlciA9PSAweDAzMDEzIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDMwMjAsIDB4
MDMwMkYpCi0gICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDMwMzEsIDB4MDMwOUYp
IHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDMwQTEsIDB4MDMwRkIpCi0gICAgICAgIHx8IGlz
SW5SYW5nZShjaGFyYWN0ZXIsIDB4MDMwRkQsIDB4MEE0Q0YpKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBBODQwLCAweDBBODdGKSB8fCBp
c0luUmFuZ2UoY2hhcmFjdGVyLCAweDBBOTYwLCAweDBBOTdGKQotICAgICAgICB8fCBpc0luUmFu
Z2UoY2hhcmFjdGVyLCAweDBBQzAwLCAweDBEN0ZGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAw
eDBFMDAwLCAweDBGQUZGKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoaXNJblJh
bmdlKGNoYXJhY3RlciwgMHgwRkUxMCwgMHgwRkUxRikgfHwgaXNJblJhbmdlKGNoYXJhY3Rlciwg
MHgwRkUzMCwgMHgwRkU0OCkKLSAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkU1
MCwgMHgwRkU1NykgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkU1RiwgMHgwRkU2MikKLSAg
ICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkU2NywgMHgwRkU2RikpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZGMDEsIDB4
MEZGMDcpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZGMEEsIDB4MEZGMEMpCi0gICAgICAg
IHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZGMEUsIDB4MEZGMTkpIHx8IGNoYXJhY3RlciA9
PSAweDBGRjFCIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZGMUYsIDB4MEZGM0EpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjaGFyYWN0ZXIgPT0gMHgwRkYzQyB8fCBjaGFy
YWN0ZXIgPT0gMHgwRkYzRSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoaXNJblJh
bmdlKGNoYXJhY3RlciwgMHgwRkY0MCwgMHgwRkY1QSkgfHwgaXNJblJhbmdlKGNoYXJhY3Rlciwg
MHgwRkZFMCwgMHgwRkZFMikKLSAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkZF
NCwgMHgwRkZFNykgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkZGMCwgMHgwRkZGOCkKLSAg
ICAgICAgfHwgY2hhcmFjdGVyID09IDB4MEZGRkQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MTMwMDAsIDB4MTM0MkYpIHx8IGlzSW5SYW5n
ZShjaGFyYWN0ZXIsIDB4MUIwMDAsIDB4MUIwRkYpCi0gICAgICAgIHx8IGlzSW5SYW5nZShjaGFy
YWN0ZXIsIDB4MUQwMDAsIDB4MUQxRkYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MUQzMDAs
IDB4MUQzN0YpCi0gICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MUYwMDAsIDB4MUY2
NEYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MUY2ODAsIDB4MUY3N0YpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgyMDAwMCwg
MHgyRkZGRCkgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgzMDAwMCwgMHgzRkZGRCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgUExBVEZPUk0o
Q09DT0EpCi1zdGF0aWMgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNKS0NoYXJhY3RlcldpdGhvdXRT
eW50aGV0aWNJdGFsaWMoVUNoYXIzMiBjaGFyYWN0ZXIsIEdseXBoRGF0YSYgZGF0YSkKLXsKLSAg
ICBHbHlwaERhdGEgbm9uSXRhbGljRGF0YSA9IGRhdGEuZm9udC0+bm9uU3ludGhldGljSXRhbGlj
Rm9udCgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKLSAgICBpZiAobm9uSXRh
bGljRGF0YS5mb250KQotICAgICAgICByZXR1cm4gbm9uSXRhbGljRGF0YTsKLSAgICByZXR1cm4g
ZGF0YTsKLX0KLSNlbmRpZgotICAgIAotc3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb25D
SktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihVQ2hhcjMyIGNoYXJhY3RlciwgTm9uQ0pL
R2x5cGhPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgY29uc3QgR2x5cGhEYXRhJiBkYXRhKQotewot
ICAgIGlmIChvcmllbnRhdGlvbiA9PSBOb25DSktHbHlwaE9yaWVudGF0aW9uVXByaWdodCB8fCBz
aG91bGRJZ25vcmVSb3RhdGlvbihjaGFyYWN0ZXIpKSB7Ci0gICAgICAgIEdseXBoRGF0YSB1cHJp
Z2h0RGF0YSA9IGRhdGEuZm9udC0+dXByaWdodE9yaWVudGF0aW9uRm9udCgpLT5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKLSAgICAgICAgLy8gSWYgdGhlIGdseXBocyBhcmUgdGhl
IHNhbWUsIHRoZW4gd2Uga25vdyB3ZSBjYW4ganVzdCB1c2UgdGhlIGhvcml6b250YWwgZ2x5cGgg
cm90YXRlZCB2ZXJ0aWNhbGx5IHRvIGJlIHVwcmlnaHQuCi0gICAgICAgIGlmIChkYXRhLmdseXBo
ID09IHVwcmlnaHREYXRhLmdseXBoKQotICAgICAgICAgICAgcmV0dXJuIGRhdGE7Ci0gICAgICAg
IC8vIFRoZSBnbHlwaHMgYXJlIGRpc3RpbmN0LCBtZWFuaW5nIHRoYXQgdGhlIGZvbnQgaGFzIGEg
dmVydGljYWwtcmlnaHQgZ2x5cGggYmFrZWQgaW50byBpdC4gV2UgY2FuJ3QgdXNlIHRoYXQKLSAg
ICAgICAgLy8gZ2x5cGgsIHNvIHdlIGZhbGwgYmFjayB0byB0aGUgdXByaWdodCBkYXRhIGFuZCB1
c2UgdGhlIGhvcml6b250YWwgZ2x5cGguCi0gICAgICAgIGlmICh1cHJpZ2h0RGF0YS5mb250KQot
ICAgICAgICAgICAgcmV0dXJuIHVwcmlnaHREYXRhOwotICAgIH0gZWxzZSBpZiAob3JpZW50YXRp
b24gPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQpIHsKLSAgICAgICAgR2x5
cGhEYXRhIHZlcnRpY2FsUmlnaHREYXRhID0gZGF0YS5mb250LT52ZXJ0aWNhbFJpZ2h0T3JpZW50
YXRpb25Gb250KCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwotICAgICAgICAv
LyBJZiB0aGUgZ2x5cGhzIGFyZSBkaXN0aW5jdCwgd2Ugd2lsbCBtYWtlIHRoZSBhc3N1bXB0aW9u
IHRoYXQgdGhlIGZvbnQgaGFzIGEgdmVydGljYWwtcmlnaHQgZ2x5cGggYmFrZWQKLSAgICAgICAg
Ly8gaW50byBpdC4KLSAgICAgICAgaWYgKGRhdGEuZ2x5cGggIT0gdmVydGljYWxSaWdodERhdGEu
Z2x5cGgpCi0gICAgICAgICAgICByZXR1cm4gZGF0YTsKLSAgICAgICAgLy8gVGhlIGdseXBocyBh
cmUgaWRlbnRpY2FsLCBtZWFuaW5nIHRoYXQgd2Ugc2hvdWxkIGp1c3QgdXNlIHRoZSBob3Jpem9u
dGFsIGdseXBoLgotICAgICAgICBpZiAodmVydGljYWxSaWdodERhdGEuZm9udCkKLSAgICAgICAg
ICAgIHJldHVybiB2ZXJ0aWNhbFJpZ2h0RGF0YTsKLSAgICB9Ci0gICAgcmV0dXJuIGRhdGE7Ci19
Ci0KLUdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hh
cjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZh
cmlhbnQpCi17Ci0gICAgLy8gU3lzdGVtIGZhbGxiYWNrIGlzIGNoYXJhY3Rlci1kZXBlbmRlbnQu
Ci0gICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2Ny
aXB0aW9uLCAwKTsKLSAgICBhdXRvKiBvcmlnaW5hbEZvbnQgPSBwcmltYXJ5UmFuZ2VzLmZvbnRG
b3JDaGFyYWN0ZXIoYyk7Ci0gICAgaWYgKCFvcmlnaW5hbEZvbnQpCi0gICAgICAgIG9yaWdpbmFs
Rm9udCA9ICZwcmltYXJ5UmFuZ2VzLmZvbnRGb3JGaXJzdFJhbmdlKCk7Ci0KLSAgICBSZWZQdHI8
Rm9udD4gc3lzdGVtRmFsbGJhY2tGb250ID0gb3JpZ2luYWxGb250LT5zeXN0ZW1GYWxsYmFja0Zv
bnRGb3JDaGFyYWN0ZXIoYywgZGVzY3JpcHRpb24sIG1faXNGb3JQbGF0Zm9ybUZvbnQpOwotICAg
IGlmICghc3lzdGVtRmFsbGJhY2tGb250KQotICAgICAgICByZXR1cm4gR2x5cGhEYXRhKCk7Ci0K
LSAgICBpZiAoc3lzdGVtRmFsbGJhY2tGb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsICYmICFzeXN0ZW1GYWxsYmFja0ZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkg
JiYgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCi0gICAgICAgIHZhcmlh
bnQgPSBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50OwotCi0gICAgR2x5cGhEYXRhIGZhbGxiYWNrR2x5
cGhEYXRhOwotICAgIGlmICh2YXJpYW50ID09IE5vcm1hbFZhcmlhbnQpCi0gICAgICAgIGZhbGxi
YWNrR2x5cGhEYXRhID0gc3lzdGVtRmFsbGJhY2tGb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIo
Yyk7Ci0gICAgZWxzZQotICAgICAgICBmYWxsYmFja0dseXBoRGF0YSA9IHN5c3RlbUZhbGxiYWNr
Rm9udC0+dmFyaWFudEZvbnQoZGVzY3JpcHRpb24sIHZhcmlhbnQpLT5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIoYyk7Ci0KLSAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50ICYmIGZhbGxiYWNr
R2x5cGhEYXRhLmZvbnQpIHsKLSAgICAgICAgaWYgKCFGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3Jh
cGhPclN5bWJvbChjKSAmJiBmYWxsYmFja0dseXBoRGF0YS5mb250LT5wbGF0Zm9ybURhdGEoKS5v
cmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFmYWxsYmFja0dseXBoRGF0YS5mb250LT5pc1Rl
eHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCi0gICAgICAgICAgICBmYWxsYmFja0dseXBoRGF0YSA9
IGdseXBoRGF0YUZvck5vbkNKS0NoYXJhY3RlcldpdGhHbHlwaE9yaWVudGF0aW9uKGMsIGRlc2Ny
aXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSwgZmFsbGJhY2tHbHlwaERhdGEpOwotICAg
IH0KLQotICAgIC8vIEtlZXAgdGhlIHN5c3RlbSBmYWxsYmFjayBmb250cyB3ZSB1c2UgYWxpdmUu
Ci0gICAgaWYgKGZhbGxiYWNrR2x5cGhEYXRhLmdseXBoKQotICAgICAgICBtX3N5c3RlbUZhbGxi
YWNrRm9udFNldC5hZGQoc3lzdGVtRmFsbGJhY2tGb250LnJlbGVhc2UoKSk7Ci0KLSAgICByZXR1
cm4gZmFsbGJhY2tHbHlwaERhdGE7Ci19Ci0KLUdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERh
dGFGb3JWYXJpYW50KFVDaGFyMzIgYywgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
biwgRm9udFZhcmlhbnQgdmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCkKLXsKLSAgICB3
aGlsZSAodHJ1ZSkgewotICAgICAgICBhdXRvJiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNr
UmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxiYWNrSW5kZXgrKyk7Ci0gICAgICAgIGlmIChmb250
UmFuZ2VzLmlzTnVsbCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGF1dG8qIGZvbnQg
PSBmb250UmFuZ2VzLmZvbnRGb3JDaGFyYWN0ZXIoYyk7Ci0gICAgICAgIEdseXBoRGF0YSBkYXRh
ID0gZm9udCA/IGZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKSA6IEdseXBoRGF0YSgpOwot
ICAgICAgICBpZiAoZGF0YS5mb250KSB7Ci0gICAgICAgICAgICAvLyBUaGUgdmFyaWFudEZvbnQg
ZnVuY3Rpb24gc2hvdWxkIG5vdCBub3JtYWxseSByZXR1cm4gMC4KLSAgICAgICAgICAgIC8vIEJ1
dCBpZiBpdCBkb2VzLCB3ZSB3aWxsIGp1c3QgcmVuZGVyIHRoZSBjYXBpdGFsIGxldHRlciBiaWcu
Ci0gICAgICAgICAgICBSZWZQdHI8Rm9udD4gdmFyaWFudEZvbnQgPSBkYXRhLmZvbnQtPnZhcmlh
bnRGb250KGRlc2NyaXB0aW9uLCB2YXJpYW50KTsKLSAgICAgICAgICAgIGlmICghdmFyaWFudEZv
bnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7Ci0KLSAgICAgICAgICAgIHJldHVybiB2
YXJpYW50Rm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKGMsIGRlc2NyaXB0aW9uLCB2
YXJpYW50KTsKLX0KLQotR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvck5vcm1hbFZh
cmlhbnQoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQotewot
ICAgIGNvbnN0IHVuc2lnbmVkIHBhZ2VOdW1iZXIgPSBjIC8gR2x5cGhQYWdlOjpzaXplOwotCi0g
ICAgZm9yICh1bnNpZ25lZCBmYWxsYmFja0luZGV4ID0gMDsgdHJ1ZTsgKytmYWxsYmFja0luZGV4
KSB7Ci0gICAgICAgIGF1dG8mIGZvbnRSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChk
ZXNjcmlwdGlvbiwgZmFsbGJhY2tJbmRleCk7Ci0gICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVs
bCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGF1dG8qIGZvbnQgPSBmb250UmFuZ2Vz
LmZvbnRGb3JDaGFyYWN0ZXIoYyk7Ci0gICAgICAgIGF1dG8qIHBhZ2UgPSBmb250ID8gZm9udC0+
Z2x5cGhQYWdlKHBhZ2VOdW1iZXIpIDogbnVsbHB0cjsKLSAgICAgICAgaWYgKCFwYWdlKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEdseXBoRGF0YSBkYXRhID0gcGFnZS0+Z2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKGMpOwotICAgICAgICBpZiAoZGF0YS5mb250KSB7Ci0gICAgICAgICAg
ICBpZiAoZGF0YS5mb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2Fs
ICYmICFkYXRhLmZvbnQtPmlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkgewotICAgICAgICAg
ICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5
cGhPcmllbnRhdGlvbihjLCBkZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCksIGRh
dGEpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFkYXRhLmZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhz
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBicm9rZW4gaWRlb2dyYXBoIGZv
bnQgZGF0YS4gVGhlIGJyb2tlbiBpZGVvZ3JhcGggZm9udCB3aWxsIHVzZSB0aGUgaG9yaXpvbnRh
bCB3aWR0aCBvZiBnbHlwaHMKLSAgICAgICAgICAgICAgICAgICAgLy8gdG8gbWFrZSBzdXJlIHlv
dSBnZXQgYSBzcXVhcmUgKGV2ZW4gZm9yIGJyb2tlbiBnbHlwaHMgbGlrZSBzeW1ib2xzIHVzZWQg
Zm9yIHB1bmN0dWF0aW9uKS4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdseXBoRGF0YUZv
clZhcmlhbnQoYywgZGVzY3JpcHRpb24sIEJyb2tlbklkZW9ncmFwaFZhcmlhbnQsIGZhbGxiYWNr
SW5kZXgpOwotICAgICAgICAgICAgICAgIH0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAgICAg
ICAgICAgICBpZiAoZGF0YS5mb250LT5wbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaERhdGFGb3JDSktDaGFyYWN0ZXJXaXRo
b3V0U3ludGhldGljSXRhbGljKGMsIGRhdGEpOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHJldHVybiBkYXRhOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGds
eXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKGMsIGRlc2NyaXB0aW9uLCBOb3JtYWxWYXJpYW50KTsK
LX0KLQotc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGdseXBoUGFnZUZyb21Gb250UmFuZ2VzKHVu
c2lnbmVkIHBhZ2VOdW1iZXIsIGNvbnN0IEZvbnRSYW5nZXMmIGZvbnRSYW5nZXMpCi17Ci0gICAg
Y29uc3QgRm9udCogZm9udCA9IG51bGxwdHI7Ci0gICAgVUNoYXIzMiBwYWdlUmFuZ2VGcm9tID0g
cGFnZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKLSAgICBVQ2hhcjMyIHBhZ2VSYW5nZVRvID0g
cGFnZVJhbmdlRnJvbSArIEdseXBoUGFnZTo6c2l6ZSAtIDE7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGZvbnRSYW5nZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byYgcmFuZ2Ug
PSBmb250UmFuZ2VzLnJhbmdlQXQoaSk7Ci0gICAgICAgIGlmIChyYW5nZS50bygpKSB7Ci0gICAg
ICAgICAgICBpZiAocmFuZ2UuZnJvbSgpIDw9IHBhZ2VSYW5nZUZyb20gJiYgcGFnZVJhbmdlVG8g
PD0gcmFuZ2UudG8oKSkKLSAgICAgICAgICAgICAgICBmb250ID0gJnJhbmdlLmZvbnQoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghZm9udCkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50
YXRpb24oKSA9PSBWZXJ0aWNhbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1
cm4gY29uc3RfY2FzdDxHbHlwaFBhZ2UqPihmb250LT5nbHlwaFBhZ2UocGFnZU51bWJlcikpOwot
fQotCi1HbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIg
YywgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFu
dCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCh2YXJpYW50ICE9
IEF1dG9WYXJpYW50KTsKLQotICAgIGlmICh2YXJpYW50ICE9IE5vcm1hbFZhcmlhbnQpCi0gICAg
ICAgIHJldHVybiBnbHlwaERhdGFGb3JWYXJpYW50KGMsIGRlc2NyaXB0aW9uLCB2YXJpYW50LCAw
KTsKLQotICAgIGNvbnN0IHVuc2lnbmVkIHBhZ2VOdW1iZXIgPSBjIC8gR2x5cGhQYWdlOjpzaXpl
OwotCi0gICAgUmVmUHRyPEdseXBoUGFnZT4mIGNhY2hlZFBhZ2UgPSBwYWdlTnVtYmVyID8gbV9j
YWNoZWRQYWdlcy5hZGQocGFnZU51bWJlciwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlIDogbV9j
YWNoZWRQYWdlWmVybzsKLSAgICBpZiAoIWNhY2hlZFBhZ2UpCi0gICAgICAgIGNhY2hlZFBhZ2Ug
PSBnbHlwaFBhZ2VGcm9tRm9udFJhbmdlcyhwYWdlTnVtYmVyLCByZWFsaXplRmFsbGJhY2tSYW5n
ZXNBdChkZXNjcmlwdGlvbiwgMCkpOwotCi0gICAgR2x5cGhEYXRhIGdseXBoRGF0YSA9IGNhY2hl
ZFBhZ2UgPyBjYWNoZWRQYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYykgOiBHbHlwaERhdGEo
KTsKLSAgICBpZiAoIWdseXBoRGF0YS5nbHlwaCkgewotICAgICAgICBpZiAoIWNhY2hlZFBhZ2Up
Ci0gICAgICAgICAgICBjYWNoZWRQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JNaXhlZEZvbnRz
KCk7Ci0gICAgICAgIGVsc2UgaWYgKGNhY2hlZFBhZ2UtPmlzSW1tdXRhYmxlKCkpCi0gICAgICAg
ICAgICBjYWNoZWRQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVDb3B5Rm9yTWl4ZWRGb250cygqY2Fj
aGVkUGFnZSk7Ci0KLSAgICAgICAgZ2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFu
dChjLCBkZXNjcmlwdGlvbik7Ci0gICAgICAgIGNhY2hlZFBhZ2UtPnNldEdseXBoRGF0YUZvckNo
YXJhY3RlcihjLCBnbHlwaERhdGEuZ2x5cGgsIGdseXBoRGF0YS5mb250KTsKLSAgICB9Ci0gICAg
cmV0dXJuIGdseXBoRGF0YTsKLX0KLQotdm9pZCBGb250R2x5cGhzOjpwcnVuZVN5c3RlbUZhbGxi
YWNrcygpCi17Ci0gICAgaWYgKG1fc3lzdGVtRmFsbGJhY2tGb250U2V0LmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIC8vIE11dGFibGUgZ2x5cGggcGFnZXMgbWF5IHJlZmVyZW5jZSBm
YWxsYmFjayBmb250cy4KLSAgICBpZiAobV9jYWNoZWRQYWdlWmVybyAmJiAhbV9jYWNoZWRQYWdl
WmVyby0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgbV9jYWNoZWRQYWdlWmVybyA9IG51bGxwdHI7
Ci0gICAgbV9jYWNoZWRQYWdlcy5yZW1vdmVJZihbXShkZWNsdHlwZShtX2NhY2hlZFBhZ2VzKTo6
S2V5VmFsdWVQYWlyVHlwZSYga2V5QW5kVmFsdWUpIHsKLSAgICAgICAgcmV0dXJuICFrZXlBbmRW
YWx1ZS52YWx1ZS0+aXNJbW11dGFibGUoKTsKLSAgICB9KTsKLSAgICBtX3N5c3RlbUZhbGxiYWNr
Rm9udFNldC5jbGVhcigpOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250R2x5cGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udEdseXBocy5oCShyZXZpc2lvbiAxODAyNjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTAsIDIwMTMtMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIEZvbnRHbHlwaHNfaAot
I2RlZmluZSBGb250R2x5cGhzX2gKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250
UmFuZ2VzLmgiCi0jaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdl
LmgiCi0jaW5jbHVkZSAiV2lkdGhDYWNoZS5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0j
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotI2lmIFBMQVRGT1JNKElPUykKLSNpbmNsdWRl
ICJXZWJDb3JlVGhyZWFkLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgRm9udERlc2NyaXB0aW9u
OwotY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKLWNsYXNzIEZvbnRTZWxlY3RvcjsKLQotY2xhc3Mg
Rm9udEdseXBocyA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRHbHlwaHM+IHsKLSAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShGb250R2x5cGhzKTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZvbnRH
bHlwaHM+IGNyZWF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSB7IHJl
dHVybiBhZG9wdFJlZigqbmV3IEZvbnRHbHlwaHMoZm9udFNlbGVjdG9yKSk7IH0KLSAgICBzdGF0
aWMgUmVmPEZvbnRHbHlwaHM+IGNyZWF0ZUZvclBsYXRmb3JtRm9udChjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBwbGF0Zm9ybURhdGEpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRm9udEdseXBocyhw
bGF0Zm9ybURhdGEpKTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgfkZvbnRHbHlwaHMoKTsKLQot
ICAgIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2lzRm9yUGxhdGZv
cm1Gb250OyB9Ci0KLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIs
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50KTsKLQotICAgIGJvb2wgaXNGaXhl
ZFBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwotICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2go
Y29uc3QgRm9udERlc2NyaXB0aW9uJik7Ci0KLSAgICBib29sIGlzTG9hZGluZ0N1c3RvbUZvbnRz
KCkgY29uc3Q7Ci0KLSAgICBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIHsgcmV0dXJuIG1f
Zm9udFNlbGVjdG9yLmdldCgpOyB9Ci0gICAgLy8gRklYTUU6IEl0IHNob3VsZCBiZSBwb3NzaWJs
ZSB0byBjb21iaW5lIGZvbnRTZWxlY3RvclZlcnNpb24gYW5kIGdlbmVyYXRpb24uCi0gICAgdW5z
aWduZWQgZm9udFNlbGVjdG9yVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNlbGVjdG9y
VmVyc2lvbjsgfQotICAgIHVuc2lnbmVkIGdlbmVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2dl
bmVyYXRpb247IH0KLQotICAgIFdpZHRoQ2FjaGUmIHdpZHRoQ2FjaGUoKSB7IHJldHVybiBtX3dp
ZHRoQ2FjaGU7IH0KLSAgICBjb25zdCBXaWR0aENhY2hlJiB3aWR0aENhY2hlKCkgY29uc3QgeyBy
ZXR1cm4gbV93aWR0aENhY2hlOyB9Ci0KLSAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250UmFuZ2Vz
JiByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCB1bnNpZ25l
ZCBmYWxsYmFja0luZGV4KTsKLQotICAgIHZvaWQgcHJ1bmVTeXN0ZW1GYWxsYmFja3MoKTsKLQot
cHJpdmF0ZToKLSAgICBGb250R2x5cGhzKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7Ci0gICAg
Rm9udEdseXBocyhjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci0KLSAgICBHbHlwaERhdGEgZ2x5
cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Rm9udFZhcmlhbnQpOwotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb3JtYWxWYXJpYW50KFVD
aGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwotICAgIEdseXBoRGF0YSBnbHlwaERhdGFG
b3JWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50LCB1
bnNpZ25lZCBmYWxsYmFja0luZGV4KTsKLQotICAgIFZlY3RvcjxGb250UmFuZ2VzLCAxPiBtX3Jl
YWxpemVkRmFsbGJhY2tSYW5nZXM7Ci0gICAgdW5zaWduZWQgbV9sYXN0UmVhbGl6ZWRGYWxsYmFj
a0luZGV4IHsgMCB9OwotCi0gICAgUmVmUHRyPEdseXBoUGFnZT4gbV9jYWNoZWRQYWdlWmVybzsK
LSAgICBIYXNoTWFwPGludCwgUmVmUHRyPEdseXBoUGFnZT4+IG1fY2FjaGVkUGFnZXM7Ci0KLSAg
ICBIYXNoU2V0PFJlZlB0cjxGb250Pj4gbV9zeXN0ZW1GYWxsYmFja0ZvbnRTZXQ7Ci0KLSAgICBj
b25zdCBGb250KiBtX2NhY2hlZFByaW1hcnlGb250OwotICAgIFJlZlB0cjxGb250U2VsZWN0b3I+
IG1fZm9udFNlbGVjdG9yOwotCi0gICAgV2lkdGhDYWNoZSBtX3dpZHRoQ2FjaGU7Ci0KLSAgICB1
bnNpZ25lZCBtX2ZvbnRTZWxlY3RvclZlcnNpb247Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9nZW5l
cmF0aW9uOwotICAgIFBpdGNoIG1fcGl0Y2ggeyBVbmtub3duUGl0Y2ggfTsKLSAgICBib29sIG1f
aXNGb3JQbGF0Zm9ybUZvbnQgeyBmYWxzZSB9OwotfTsKLQotaW5saW5lIGJvb2wgRm9udEdseXBo
czo6aXNGaXhlZFBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCi17Ci0g
ICAgaWYgKG1fcGl0Y2ggPT0gVW5rbm93blBpdGNoKQotICAgICAgICBkZXRlcm1pbmVQaXRjaChk
ZXNjcmlwdGlvbik7Ci0gICAgcmV0dXJuIG1fcGl0Y2ggPT0gRml4ZWRQaXRjaDsKLX07Ci0KLWlu
bGluZSBjb25zdCBGb250JiBGb250R2x5cGhzOjpwcmltYXJ5Rm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAg
aWYgKCFtX2NhY2hlZFByaW1hcnlGb250KSB7Ci0gICAgICAgIGF1dG8mIHByaW1hcnlSYW5nZXMg
PSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7Ci0gICAgICAgIG1fY2Fj
aGVkUHJpbWFyeUZvbnQgPSBwcmltYXJ5UmFuZ2VzLmZvbnRGb3JDaGFyYWN0ZXIoJyAnKTsKLSAg
ICAgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250KQotICAgICAgICAgICAgbV9jYWNoZWRQcmlt
YXJ5Rm9udCA9ICZwcmltYXJ5UmFuZ2VzLmZvbnRGb3JGaXJzdFJhbmdlKCk7Ci0gICAgfQotICAg
IHJldHVybiAqbV9jYWNoZWRQcmltYXJ5Rm9udDsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAJKHJl
dmlzaW9uIDE4MDI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIkZv
bnRDYXNjYWRlLmgiCiAKICNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udEdseXBocy5o
IgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSW50UmVjdC5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246841</attachid>
            <date>2015-02-18 12:38:41 -0800</date>
            <delta_ts>2015-02-18 14:23:35 -0800</delta_ts>
            <desc>another</desc>
            <filename>rename-font-glyphs-7.patch</filename>
            <type>text/plain</type>
            <size>79015</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDI4NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTAyLTE4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgRm9udEdseXBocyB0
byBGb250Q2FzY2FkZUZvbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDE3NTQKKworICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgor
CisgICAgICAgICJJdCBpcyBiZXR0ZXIgdGhhbiBJbXBsLiIKKworICAgICAgICBUaGUgcHVycG9z
ZSBvZiB0aGUgY2xhc3MgdG8gb3duIHRvIGNyZWF0ZSBhbmQgb3duIHRoZSByZWFsaXplZCBGb250
IGluc3RhbmNlcyBhbmQgdGhlIGFzc29jaWF0ZWQgY2FjaGVzCisgICAgICAgIGZvciBGb250Q2Fz
Y2FkZSBpbnN0YW5jZXMuCisKIDIwMTUtMDItMTggIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBh
cHBsZS5jb20+CiAKICAgICAgICAgU3RyZWFtbGluZSB1bmV4cG9ydGVkIGZ1bmN0aW9uIGJ1aWxk
IGZpeGVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTgwMjg0KQorKysgU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwNzEsMTAgKzIw
NzEsMTAgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
Rm9udHMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGZWF0dXJlU2V0dGluZ3MuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udEdlbmVyaWNGYW1pbGllcy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
b250R2x5cGhzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvR2VvbWV0cnlVdGlsaXRpZXMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4MDI4NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTgyMzksOSArODIzOSw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xGb250LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXEZvbnRDYWNoZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xGb250Q2FzY2FkZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FzY2FkZUZvbnRzLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnREZXNjcmlwdGlvbi5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250
R2VuZXJpY0ZhbWlsaWVzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXEZvbnRHbHlwaHMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udEZlYXR1cmVTZXR0aW5ncy5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250UGxhdGZvcm1EYXRhLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnRS
YW5nZXMuY3BwIiAvPgpAQCAtMTk3NzYsOSArMTk3NzYsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhY2hlLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FzY2FkZS5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGVGb250cy5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERl
c2NyaXB0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xGb250R2VuZXJpY0ZhbWlsaWVzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xGb250R2x5cGhzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250RmVhdHVyZVNldHRpbmdzLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250TWV0cmljcy5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udFBsYXRm
b3JtRGF0YS5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTgwMjg0KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NzIy
LDggKzQ3MjIsOCBAQAogCQlCMkMzREE2NDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MzBEMDA2
Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi87IH07CiAJCUIyQzNEQTY1MEQwMDZDRDYwMEVGNkYy
NiAvKiBGb250LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMkMzREE1NDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTY2MEQwMDZDRDYwMEVGNkYyNiAv
KiBGb250RGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQzNEQTU1MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250RGVzY3JpcHRpb24uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCMkMzREE2
NzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9u
dEdseXBocy5jcHAgKi87IH07Ci0JCUIyQzNEQTY4MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250R2x5
cGhzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMz
REE1NzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUIyQzNEQTY3MEQwMDZDRDYwMEVGNkYyNiAv
KiBGb250Q2FzY2FkZUZvbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyQzNEQTU2MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZUZvbnRz
LmNwcCAqLzsgfTsKKwkJQjJDM0RBNjgwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlRm9u
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNE
QTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZUZvbnRzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNkIwRDAwNkNENjAwRUY2
RjI2IC8qIEZvbnRTZWxlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjJDM0RBNUEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRTZWxlY3Rvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTZD
MEQwMDZDRDYwMEVGNkYyNiAvKiBHbHlwaEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNUIwRDAwNkNENjAwRUY2RjI2IC8qIEdseXBo
QnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQjJDOTZEOEQwQjNBRjJCNzAwNUU4MEVDIC8qIEpTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkM5NkQ4QzBCM0FG
MkI3MDA1RTgwRUMgLyogSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcCAqLzsgfTsKQEAgLTEyMTIxLDgg
KzEyMTIxLDggQEAKIAkJQjJDM0RBNTMwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCMkMzREE1NDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMkMzREE1NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udERlc2NyaXB0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250RGVzY3JpcHRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRHbHlwaHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRH
bHlwaHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkMzREE1NzBEMDA2Q0Q2
MDBFRjZGMjYgLyogRm9udEdseXBocy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRm9udEdseXBocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkMzREE1NjBE
MDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGVGb250cy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENhc2NhZGVGb250cy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUIyQzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZUZv
bnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250Q2FzY2FkZUZvbnRz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTVBMEQwMDZDRDYwMEVGNkYy
NiAvKiBGb250U2VsZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZv
bnRTZWxlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzREE1QjBEMDA2
Q0Q2MDBFRjZGMjYgLyogR2x5cGhCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEdseXBoQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzk2
RDhDMEIzQUYyQjcwMDVFODBFQyAvKiBKU1NWR1BhdGhTZWdDdXN0b20uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHUGF0aFNlZ0N1c3RvbS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDQ4OCw4ICsyMDQ4OCw2IEBACiAJCQkJQjI3NTM1
MzgwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmNwcCAqLywKIAkJCQlCMjc1MzUzOTBCMDUzODE0
MDAyQ0U2NEYgLyogQ29sb3IuaCAqLywKIAkJCQk5MzgyREY1NzEwQThENUM5MDA5MjU2NTIgLyog
Q29sb3JTcGFjZS5oICovLAotCQkJCUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2Fz
Y2FkZS5jcHAgKi8sCi0JCQkJQjJDM0RBNTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRl
LmggKi8sCiAJCQkJMkQyRkMwNTQxNDYwQ0Q2RjAwMjYzNjMzIC8qIENyb3NzZmFkZUdlbmVyYXRl
ZEltYWdlLmNwcCAqLywKIAkJCQkyRDJGQzA1NTE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRl
R2VuZXJhdGVkSW1hZ2UuaCAqLywKIAkJCQlBOENCNDEwMjBFODVCOEE1MDAzMkM0RjAgLyogRGFz
aEFycmF5LmggKi8sCkBAIC0yMDUxOCwxNCArMjA1MTYsMTYgQEAKIAkJCQlCQ0I5MkQ0RTEyOTM1
NTBCMDBDODM4N0YgLyogRm9udEJhc2VsaW5lLmggKi8sCiAJCQkJQjJDM0RBNTEwRDAwNkNENjAw
RUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgKi8sCiAJCQkJQjJDM0RBNTIwRDAwNkNENjAwRUY2RjI2
IC8qIEZvbnRDYWNoZS5oICovLAorCQkJCUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
Q2FzY2FkZS5jcHAgKi8sCisJCQkJQjJDM0RBNTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNj
YWRlLmggKi8sCisJCQkJQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlRm9u
dHMuY3BwICovLAorCQkJCUIyQzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZUZv
bnRzLmggKi8sCiAJCQkJMzdBQ0NFNjIwREEyQUE5NjAwODlFNjAyIC8qIEZvbnREZXNjcmlwdGlv
bi5jcHAgKi8sCiAJCQkJQjJDM0RBNTUwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnREZXNjcmlwdGlv
bi5oICovLAogCQkJCTRBNkU5RkM1MTNDMTdENTcwMDQ2QTdGOCAvKiBGb250RmVhdHVyZVNldHRp
bmdzLmNwcCAqLywKIAkJCQk0QTZFOUZDNjEzQzE3RDU3MDA0NkE3RjggLyogRm9udEZlYXR1cmVT
ZXR0aW5ncy5oICovLAogCQkJCUU0NEVFM0E2MTc1NzZFNTUwMEVFRThDRiAvKiBGb250R2VuZXJp
Y0ZhbWlsaWVzLmNwcCAqLywKIAkJCQlFNDRFRTNBNzE3NTc2RTU1MDBFRUU4Q0YgLyogRm9udEdl
bmVyaWNGYW1pbGllcy5oICovLAotCQkJCUIyQzNEQTU2MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
R2x5cGhzLmNwcCAqLywKLQkJCQlCMkMzREE1NzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBo
cy5oICovLAogCQkJCTA4NDU2ODA3MTJCOTBEQTYwMDk2MEE5RiAvKiBGb250TWV0cmljcy5oICov
LAogCQkJCUY3QTAzNEMzMTI2QkY2QkUwMDdEQzE5RSAvKiBGb250T3JpZW50YXRpb24uaCAqLywK
IAkJCQk4NEI2MjY4NDEzMzEzOEY5MDA5NUE0ODkgLyogRm9udFBsYXRmb3JtRGF0YS5jcHAgKi8s
CkBAIC0yNDQwOSw3ICsyNDQwOSw3IEBACiAJCQkJQjJBRkZDN0UwRDAwQTVDMTAwMzAwNzREIC8q
IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTY2MEQw
MDZDRDYwMEVGNkYyNiAvKiBGb250RGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTRB
NkU5RkM4MTNDMTdENTcwMDQ2QTdGOCAvKiBGb250RmVhdHVyZVNldHRpbmdzLmggaW4gSGVhZGVy
cyAqLywKLQkJCQlCMkMzREE2ODBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQjJDM0RBNjgwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlRm9u
dHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQwOUVCREI2MTZCN0VFQTMwMENCQTNGQyAvKiBGb250
TG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODQ1NjgwODEyQjkwREE2MDA5NjBBOUYgLyog
Rm9udE1ldHJpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUY3QTAzNEM0MTI2QkY2QkUwMDdEQzE5
RSAvKiBGb250T3JpZW50YXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjc4OTAsNyArMjc4OTAs
NyBAQAogCQkJCTM3QUNDRjY5MERBNDE0RTcwMDg5RTYwMiAvKiBGb250RGVzY3JpcHRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNEE2RTlGQzcxM0MxN0Q1NzAwNDZBN0Y4IC8qIEZvbnRGZWF0
dXJlU2V0dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ0RUUzQTgxNzU3N0VCRDAwRUVF
OENGIC8qIEZvbnRHZW5lcmljRmFtaWxpZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjJDM0RB
NjcwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QjJDM0RBNjcwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlRm9udHMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkQ5NkM5OTcxOTgyRkJERjAwODZFMTU2IC8qIEZvbnRMb2FkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjJBRkZDODAwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYXNjYWRl
Q29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NEI2MjY4NTEzMzEzOEY5MDA5NUE0ODkgLyog
Rm9udFBsYXRmb3JtRGF0YS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0
dGluZ3MuY3BwCShyZXZpc2lvbiAxODAyODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRp
bmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBzdGF0aWMgdm9pZCBzZXRJ
bWFnZUxvYWRpbmdTZXR0aW5ncyhQYWdlCiAKIHN0YXRpYyB2b2lkIGludmFsaWRhdGVBZnRlckdl
bmVyaWNGYW1pbHlDaGFuZ2UoUGFnZSogcGFnZSkKIHsKLSAgICBpbnZhbGlkYXRlRm9udEdseXBo
c0NhY2hlKCk7CisgICAgaW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUoKTsKICAgICBpZiAocGFn
ZSkKICAgICAgICAgcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAJ
KHJldmlzaW9uIDE4MDI4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJG
b250Q2FjaGUuaCIKIAogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiRm9udEds
eXBocy5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJGb250U2Vs
ZWN0b3IuaCIKICNpbmNsdWRlICJNZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCIKQEAgLTQyNiw3ICs0
MjUsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOCiAKIHZvaWQg
Rm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IHB1cmdlQ291bnQpCiB7Ci0gICAg
cHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOworICAgIHBydW5l
VW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250Q2FzY2FkZUNhY2hlKCk7CiAgICAgcHJ1bmVTeXN0
ZW1GYWxsYmFja0ZvbnRzKCk7CiAKICNpZiBQTEFURk9STShJT1MpCkBAIC01MzUsNyArNTM0LDcg
QEAgdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGUoKQogICAgIH0KIAogICAgIGZvbnRQbGF0Zm9y
bURhdGFDYWNoZSgpLmNsZWFyKCk7Ci0gICAgaW52YWxpZGF0ZUZvbnRHbHlwaHNDYWNoZSgpOwor
ICAgIGludmFsaWRhdGVGb250Q2FzY2FkZUNhY2hlKCk7CiAKICAgICBnR2VuZXJhdGlvbisrOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGUuY3BwCShyZXZpc2lvbiAxODAyODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgdGVt
cGxhdGUgPD4gdm9pZCBkZWxldGVPd25lZFB0cjxXZWJDb3JlOgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXN0YXRpYyBSZWY8Rm9udEdseXBocz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRHbHlw
aHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKK3N0
YXRpYyBSZWY8Rm9udENhc2NhZGVGb250cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CiAKIGNvbnN0IHVp
bnQ4X3QgRm9udENhc2NhZGU6OnNfcm91bmRpbmdIYWNrQ2hhcmFjdGVyVGFibGVbMjU2XSA9IHsK
ICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIC8qXHQqLywgMSAvKlxuKi8sIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
CkBAIC0xMjUsOCArMTI1LDggQEAgRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRE
ZXNjcgogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0
Zm9ybS1pbmRlcGVuZGVudC4KLUZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBmb250LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKLSAg
ICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250KSkKK0Zv
bnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSwg
Rm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCisgICAgOiBtX2ZvbnRzKEZvbnRD
YXNjYWRlRm9udHM6OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250RGF0YSkpCiAgICAgLCBtX2xl
dHRlclNwYWNpbmcoMCkKICAgICAsIG1fd29yZFNwYWNpbmcoMCkKICAgICAsIG1fdXNlQmFja3Ns
YXNoQXNZZW5TeW1ib2woZmFsc2UpCkBAIC0xMzQsMzMgKzEzNCwzMiBAQCBGb250Q2FzY2FkZTo6
Rm9udENhc2NhZGUoY29uc3QgRm9udFBsYXRmCiB7CiAgICAgbV9mb250RGVzY3JpcHRpb24uc2V0
Rm9udFNtb290aGluZyhmb250U21vb3RoaW5nTW9kZSk7CiAjaWYgUExBVEZPUk0oSU9TKQotICAg
IG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShmb250LmZv
bnQoKSkpOwotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRT
aXplKGZvbnQuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoQ1RG
b250R2V0U3ltYm9saWNUcmFpdHMoZm9udC5mb250KCkpICYga0NURm9udFRyYWl0SXRhbGljKTsK
LSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdldFN5bWJvbGljVHJhaXRz
KGZvbnQuZm9udCgpKSAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250
V2VpZ2h0Tm9ybWFsKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENU
Rm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0
Q29tcHV0ZWRTaXplKENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7CisgICAgbV9mb250
RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEu
Zm9udCgpKSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0
V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkpICYga0NURm9u
dFRyYWl0Qm9sZCkgPyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3JtYWwpOwogI2VuZGlm
CiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3Jt
LWluZGVwZW5kZW50LgogI2lmIFBMQVRGT1JNKElPUykKLUZvbnRDYXNjYWRlOjpGb250Q2FzY2Fk
ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250LCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4g
Zm9udFNlbGVjdG9yKQotICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZv
cm1Gb250KGZvbnQpKQotICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCitGb250Q2FzY2FkZTo6Rm9u
dENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEsIFBhc3NSZWZQdHI8Rm9u
dFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCisgICAgOiBtX2xldHRlclNwYWNpbmcoMCkKICAgICAs
IG1fd29yZFNwYWNpbmcoMCkKICAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlw
ZXNldHRpbmdGZWF0dXJlcygpKQogewotICAgIENURm9udFJlZiBwcmltYXJ5Rm9udCA9IGZvbnQu
Zm9udCgpOworICAgIENURm9udFJlZiBwcmltYXJ5Rm9udCA9IGZvbnREYXRhLmZvbnQoKTsKICAg
ICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUocHJpbWFy
eUZvbnQpKTsKICAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1RGb250R2V0
U2l6ZShwcmltYXJ5Rm9udCkpOwogICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENU
Rm9udEdldFN5bWJvbGljVHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7
CiAgICAgbV9mb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0
cyhwcmltYXJ5Rm9udCkgJiBrQ1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9u
dFdlaWdodE5vcm1hbCk7Ci0gICAgbV9nbHlwaHMgPSByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udEds
eXBocyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKKyAgICBtX2ZvbnRz
ID0gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0
b3IuZ2V0KCkpOwogfQogI2VuZGlmCiAKIEZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBG
b250Q2FzY2FkZSYgb3RoZXIpCiAgICAgOiBtX2ZvbnREZXNjcmlwdGlvbihvdGhlci5tX2ZvbnRE
ZXNjcmlwdGlvbikKLSAgICAsIG1fZ2x5cGhzKG90aGVyLm1fZ2x5cGhzKQorICAgICwgbV9mb250
cyhvdGhlci5tX2ZvbnRzKQogICAgICwgbV9sZXR0ZXJTcGFjaW5nKG90aGVyLm1fbGV0dGVyU3Bh
Y2luZykKICAgICAsIG1fd29yZFNwYWNpbmcob3RoZXIubV93b3JkU3BhY2luZykKICAgICAsIG1f
dXNlQmFja3NsYXNoQXNZZW5TeW1ib2wob3RoZXIubV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCkK
QEAgLTE3MSw3ICsxNzAsNyBAQCBGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udENh
c2NhCiBGb250Q2FzY2FkZSYgRm9udENhc2NhZGU6Om9wZXJhdG9yPShjb25zdCBGb250Q2FzY2Fk
ZSYgb3RoZXIpCiB7CiAgICAgbV9mb250RGVzY3JpcHRpb24gPSBvdGhlci5tX2ZvbnREZXNjcmlw
dGlvbjsKLSAgICBtX2dseXBocyA9IG90aGVyLm1fZ2x5cGhzOworICAgIG1fZm9udHMgPSBvdGhl
ci5tX2ZvbnRzOwogICAgIG1fbGV0dGVyU3BhY2luZyA9IG90aGVyLm1fbGV0dGVyU3BhY2luZzsK
ICAgICBtX3dvcmRTcGFjaW5nID0gb3RoZXIubV93b3JkU3BhY2luZzsKICAgICBtX3VzZUJhY2tz
bGFzaEFzWWVuU3ltYm9sID0gb3RoZXIubV91c2VCYWNrc2xhc2hBc1llblN5bWJvbDsKQEAgLTE4
NiwyMSArMTg1LDIxIEBAIGJvb2wgRm9udENhc2NhZGU6Om9wZXJhdG9yPT0oY29uc3QgRm9udEMK
IAogICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbiAhPSBvdGhlci5tX2ZvbnREZXNjcmlwdGlvbiB8
fCBtX2xldHRlclNwYWNpbmcgIT0gb3RoZXIubV9sZXR0ZXJTcGFjaW5nIHx8IG1fd29yZFNwYWNp
bmcgIT0gb3RoZXIubV93b3JkU3BhY2luZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChtX2dseXBocyA9PSBvdGhlci5tX2dseXBocykKKyAgICBpZiAobV9mb250cyA9PSBvdGhlci5t
X2ZvbnRzKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIW1fZ2x5cGhzIHx8ICFvdGhl
ci5tX2dseXBocykKKyAgICBpZiAoIW1fZm9udHMgfHwgIW90aGVyLm1fZm9udHMpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpICE9IG90aGVy
Lm1fZ2x5cGhzLT5mb250U2VsZWN0b3IoKSkKKyAgICBpZiAobV9mb250cy0+Zm9udFNlbGVjdG9y
KCkgIT0gb3RoZXIubV9mb250cy0+Zm9udFNlbGVjdG9yKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAvLyBDYW4gdGhlc2UgY2FzZXMgYWN0dWFsbHkgc29tZWhvdyBvY2N1cj8gQWxsIGZv
bnRzIHNob3VsZCBnZXQgd2lwZWQgb3V0IGJ5IGZ1bGwgc3R5bGUgcmVjYWxjLgotICAgIGlmICht
X2dseXBocy0+Zm9udFNlbGVjdG9yVmVyc2lvbigpICE9IG90aGVyLm1fZ2x5cGhzLT5mb250U2Vs
ZWN0b3JWZXJzaW9uKCkpCisgICAgaWYgKG1fZm9udHMtPmZvbnRTZWxlY3RvclZlcnNpb24oKSAh
PSBvdGhlci5tX2ZvbnRzLT5mb250U2VsZWN0b3JWZXJzaW9uKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAobV9nbHlwaHMtPmdlbmVyYXRpb24oKSAhPSBvdGhlci5tX2dseXBocy0+
Z2VuZXJhdGlvbigpKQorICAgIGlmIChtX2ZvbnRzLT5nZW5lcmF0aW9uKCkgIT0gb3RoZXIubV9m
b250cy0+Z2VuZXJhdGlvbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXN0cnVjdCBGb250R2x5cGhzQ2FjaGVLZXkgeworc3RydWN0IEZvbnRDYXNjYWRl
Q2FjaGVLZXkgewogICAgIC8vIFRoaXMgcGFydCBvZiB0aGUga2V5IGlzIHNoYXJlZCB3aXRoIHRo
ZSBsb3dlciBsZXZlbCBGb250Q2FjaGUgKGNhY2hpbmcgRm9udERhdGEgb2JqZWN0cykuCiAgICAg
Rm9udERlc2NyaXB0aW9uRm9udERhdGFDYWNoZUtleSBmb250RGVzY3JpcHRpb25DYWNoZUtleTsK
ICAgICBWZWN0b3I8QXRvbWljU3RyaW5nLCAzPiBmYW1pbGllczsKQEAgLTIwOSwyMCArMjA4LDIw
IEBAIHN0cnVjdCBGb250R2x5cGhzQ2FjaGVLZXkgewogICAgIHVuc2lnbmVkIGZvbnRTZWxlY3Rv
ckZsYWdzOwogfTsKIAotc3RydWN0IEZvbnRHbHlwaHNDYWNoZUVudHJ5IHsKK3N0cnVjdCBGb250
Q2FzY2FkZUNhY2hlRW50cnkgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIEZvbnRHbHlwaHNDYWNoZUVudHJ5KEZvbnRHbHlwaHNDYWNoZUtleSYmIGssIFJlZjxG
b250R2x5cGhzPiYmIGcpCi0gICAgICAgIDoga2V5KFdURjo6bW92ZShrKSkKLSAgICAgICAgLCBn
bHlwaHMoV1RGOjptb3ZlKGcpKQorICAgIEZvbnRDYXNjYWRlQ2FjaGVFbnRyeShGb250Q2FzY2Fk
ZUNhY2hlS2V5JiYga2V5LCBSZWY8Rm9udENhc2NhZGVGb250cz4mJiBmb250cykKKyAgICAgICAg
OiBrZXkoV1RGOjptb3ZlKGtleSkpCisgICAgICAgICwgZm9udHMoV1RGOjptb3ZlKGZvbnRzKSkK
ICAgICB7IH0KLSAgICBGb250R2x5cGhzQ2FjaGVLZXkga2V5OwotICAgIFJlZjxGb250R2x5cGhz
PiBnbHlwaHM7CisgICAgRm9udENhc2NhZGVDYWNoZUtleSBrZXk7CisgICAgUmVmPEZvbnRDYXNj
YWRlRm9udHM+IGZvbnRzOwogfTsKIAotdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnVu
aXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+LCBBbHJlYWR5SGFzaGVkPiBGb250R2x5cGhz
Q2FjaGU7Cit0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxGb250Q2Fz
Y2FkZUNhY2hlRW50cnk+LCBBbHJlYWR5SGFzaGVkPiBGb250Q2FzY2FkZUNhY2hlOwogCi1zdGF0
aWMgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRHbHlwaHNDYWNoZUtleSYgYSwgY29uc3QgRm9u
dEdseXBoc0NhY2hlS2V5JiBiKQorc3RhdGljIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250Q2Fz
Y2FkZUNhY2hlS2V5JiBhLCBjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5JiBiKQogewogICAgIGlm
IChhLmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5ICE9IGIuZm9udERlc2NyaXB0aW9uQ2FjaGVLZXkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIzNywyMSArMjM2LDIxIEBAIHN0YXRpYyBib29s
IG9wZXJhdG9yPT0oY29uc3QgRm9udEdseXBoc0MKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3Rh
dGljIEZvbnRHbHlwaHNDYWNoZSYgZm9udEdseXBoc0NhY2hlKCkKK3N0YXRpYyBGb250Q2FzY2Fk
ZUNhY2hlJiBmb250Q2FzY2FkZUNhY2hlKCkKIHsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFU
SUNfTE9DQUwoRm9udEdseXBoc0NhY2hlLCBjYWNoZSwgKCkpOworICAgIERFUFJFQ0FURURfREVG
SU5FX1NUQVRJQ19MT0NBTChGb250Q2FzY2FkZUNhY2hlLCBjYWNoZSwgKCkpOwogICAgIHJldHVy
biBjYWNoZTsKIH0KIAotdm9pZCBpbnZhbGlkYXRlRm9udEdseXBoc0NhY2hlKCkKK3ZvaWQgaW52
YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUoKQogewotICAgIGZvbnRHbHlwaHNDYWNoZSgpLmNsZWFy
KCk7CisgICAgZm9udENhc2NhZGVDYWNoZSgpLmNsZWFyKCk7CiB9CiAKIHZvaWQgY2xlYXJXaWR0
aENhY2hlcygpCiB7Ci0gICAgZm9yIChhdXRvIGl0ID0gZm9udEdseXBoc0NhY2hlKCkuYmVnaW4o
KSwgZW5kID0gZm9udEdseXBoc0NhY2hlKCkuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgaXQtPnZhbHVlLT5nbHlwaHMuZ2V0KCkud2lkdGhDYWNoZSgpLmNsZWFyKCk7CisgICAgZm9y
IChhdXRvJiB2YWx1ZSA6IGZvbnRDYXNjYWRlQ2FjaGUoKS52YWx1ZXMoKSkKKyAgICAgICAgdmFs
dWUtPmZvbnRzLmdldCgpLndpZHRoQ2FjaGUoKS5jbGVhcigpOwogfQogCiBzdGF0aWMgdW5zaWdu
ZWQgbWFrZUZvbnRTZWxlY3RvckZsYWdzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRp
b24pCkBAIC0yNTksMTcgKzI1OCwxOSBAQCBzdGF0aWMgdW5zaWduZWQgbWFrZUZvbnRTZWxlY3Rv
ckZsYWdzKGNvCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZXNjcmlwdGlvbi5z
Y3JpcHQoKSkgPDwgMSB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZXNjcmlwdGlvbi5zbWFsbENh
cHMoKSk7CiB9CiAKLXN0YXRpYyB2b2lkIG1ha2VGb250R2x5cGhzQ2FjaGVLZXkoRm9udEdseXBo
c0NhY2hlS2V5JiBrZXksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRT
ZWxlY3RvciogZm9udFNlbGVjdG9yKQorc3RhdGljIEZvbnRDYXNjYWRlQ2FjaGVLZXkgbWFrZUZv
bnRDYXNjYWRlQ2FjaGVLZXkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9u
dFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCiB7CisgICAgRm9udENhc2NhZGVDYWNoZUtleSBrZXk7
CiAgICAga2V5LmZvbnREZXNjcmlwdGlvbkNhY2hlS2V5ID0gRm9udERlc2NyaXB0aW9uRm9udERh
dGFDYWNoZUtleShkZXNjcmlwdGlvbik7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRl
c2NyaXB0aW9uLmZhbWlseUNvdW50KCk7ICsraSkKICAgICAgICAga2V5LmZhbWlsaWVzLmFwcGVu
ZChkZXNjcmlwdGlvbi5mYW1pbHlBdChpKSk7CiAgICAga2V5LmZvbnRTZWxlY3RvcklkID0gZm9u
dFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT51bmlxdWVJZCgpIDogMDsKICAgICBrZXkuZm9udFNl
bGVjdG9yVmVyc2lvbiA9IGZvbnRTZWxlY3RvciA/IGZvbnRTZWxlY3Rvci0+dmVyc2lvbigpIDog
MDsKICAgICBrZXkuZm9udFNlbGVjdG9yRmxhZ3MgPSBmb250U2VsZWN0b3IgJiYgZm9udFNlbGVj
dG9yLT5yZXNvbHZlc0ZhbWlseUZvcihkZXNjcmlwdGlvbikgPyBtYWtlRm9udFNlbGVjdG9yRmxh
Z3MoZGVzY3JpcHRpb24pIDogMDsKKyAgICByZXR1cm4ga2V5OwogfQogCi1zdGF0aWMgdW5zaWdu
ZWQgY29tcHV0ZUZvbnRHbHlwaHNDYWNoZUhhc2goY29uc3QgRm9udEdseXBoc0NhY2hlS2V5JiBr
ZXkpCitzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUZvbnRDYXNjYWRlQ2FjaGVIYXNoKGNvbnN0IEZv
bnRDYXNjYWRlQ2FjaGVLZXkmIGtleSkKIHsKICAgICBWZWN0b3I8dW5zaWduZWQsIDc+IGhhc2hD
b2RlczsKICAgICBoYXNoQ29kZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg0ICsga2V5LmZhbWls
aWVzLnNpemUoKSk7CkBAIC0yODQsNDggKzI4NSw0NyBAQCBzdGF0aWMgdW5zaWduZWQgY29tcHV0
ZUZvbnRHbHlwaHNDYWNoZUhhCiAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeSho
YXNoQ29kZXMuZGF0YSgpLCBoYXNoQ29kZXMuc2l6ZSgpICogc2l6ZW9mKHVuc2lnbmVkKSk7CiB9
CiAKLXZvaWQgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpCit2
b2lkIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250Q2FzY2FkZUNhY2hlKCkKIHsKLSAg
ICBmb250R2x5cGhzQ2FjaGUoKS5yZW1vdmVJZihbXShGb250R2x5cGhzQ2FjaGU6OktleVZhbHVl
UGFpclR5cGUmIGVudHJ5KSB7Ci0gICAgICAgIHJldHVybiBlbnRyeS52YWx1ZS0+Z2x5cGhzLmdl
dCgpLmhhc09uZVJlZigpOworICAgIGZvbnRDYXNjYWRlQ2FjaGUoKS5yZW1vdmVJZihbXShGb250
Q2FzY2FkZUNhY2hlOjpLZXlWYWx1ZVBhaXJUeXBlJiBlbnRyeSkgeworICAgICAgICByZXR1cm4g
ZW50cnkudmFsdWUtPmZvbnRzLmdldCgpLmhhc09uZVJlZigpOwogICAgIH0pOwogfQogCiB2b2lk
IHBydW5lU3lzdGVtRmFsbGJhY2tGb250cygpCiB7Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6IGZv
bnRHbHlwaHNDYWNoZSgpLnZhbHVlcygpKQotICAgICAgICBlbnRyeS0+Z2x5cGhzLT5wcnVuZVN5
c3RlbUZhbGxiYWNrcygpOworICAgIGZvciAoYXV0byYgZW50cnkgOiBmb250Q2FzY2FkZUNhY2hl
KCkudmFsdWVzKCkpCisgICAgICAgIGVudHJ5LT5mb250cy0+cHJ1bmVTeXN0ZW1GYWxsYmFja3Mo
KTsKIH0KIAotc3RhdGljIFJlZjxGb250R2x5cGhzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udEds
eXBocyhjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgUGFzc1JlZlB0cjxG
b250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKK3N0YXRpYyBSZWY8Rm9udENhc2NhZGVGb250cz4g
cmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQogewotICAgIEZv
bnRHbHlwaHNDYWNoZUtleSBrZXk7Ci0gICAgbWFrZUZvbnRHbHlwaHNDYWNoZUtleShrZXksIGZv
bnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKKyAgICBhdXRvIGtleSA9IG1ha2VG
b250Q2FzY2FkZUNhY2hlS2V5KGZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsK
IAotICAgIHVuc2lnbmVkIGhhc2ggPSBjb21wdXRlRm9udEdseXBoc0NhY2hlSGFzaChrZXkpOwot
ICAgIEZvbnRHbHlwaHNDYWNoZTo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IGZvbnRHbHlwaHNDYWNo
ZSgpLmFkZChoYXNoLCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+KCkpOwor
ICAgIHVuc2lnbmVkIGhhc2ggPSBjb21wdXRlRm9udENhc2NhZGVDYWNoZUhhc2goa2V5KTsKKyAg
ICBhdXRvIGFkZFJlc3VsdCA9IGZvbnRDYXNjYWRlQ2FjaGUoKS5hZGQoaGFzaCwgc3RkOjp1bmlx
dWVfcHRyPEZvbnRDYXNjYWRlQ2FjaGVFbnRyeT4oKSk7CiAgICAgaWYgKCFhZGRSZXN1bHQuaXNO
ZXdFbnRyeSAmJiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5rZXkgPT0ga2V5KQotICAgICAg
ICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+Z2x5cGhzLmdldCgpOworICAgICAg
ICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+Zm9udHMuZ2V0KCk7CiAKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8Rm9udEdseXBoc0NhY2hlRW50cnk+JiBuZXdFbnRyeSA9IGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgbmV3RW50cnkgPSBzdGQ6Om1ha2VfdW5pcXVlPEZvbnRH
bHlwaHNDYWNoZUVudHJ5PihXVEY6Om1vdmUoa2V5KSwgRm9udEdseXBoczo6Y3JlYXRlKGZvbnRT
ZWxlY3RvcikpOwotICAgIFJlZjxGb250R2x5cGhzPiBnbHlwaHMgPSBuZXdFbnRyeS0+Z2x5cGhz
LmdldCgpOworICAgIGF1dG8mIG5ld0VudHJ5ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsK
KyAgICBuZXdFbnRyeSA9IHN0ZDo6bWFrZV91bmlxdWU8Rm9udENhc2NhZGVDYWNoZUVudHJ5PihX
VEY6Om1vdmUoa2V5KSwgRm9udENhc2NhZGVGb250czo6Y3JlYXRlKGZvbnRTZWxlY3RvcikpOwor
ICAgIFJlZjxGb250Q2FzY2FkZUZvbnRzPiBnbHlwaHMgPSBuZXdFbnRyeS0+Zm9udHMuZ2V0KCk7
CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdW5yZWZlcmVuY2VkUHJ1bmVJbnRlcnZhbCA9
IDUwOwogICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bUVudHJpZXMgPSA0MDA7CiAgICAgc3Rh
dGljIHVuc2lnbmVkIHBydW5lQ291bnRlcjsKLSAgICAvLyBSZWZlcmVuY2VkIEZvbnRHbHlwaHMg
d291bGQgZXhpc3QgYW55d2F5IHNvIHBydW5pbmcgdGhlbSBzYXZlcyBsaXR0bGUgbWVtb3J5Lgor
ICAgIC8vIFJlZmVyZW5jZWQgRm9udENhc2NhZGVGb250cyB3b3VsZCBleGlzdCBhbnl3YXkgc28g
cHJ1bmluZyB0aGVtIHNhdmVzIGxpdHRsZSBtZW1vcnkuCiAgICAgaWYgKCEoKytwcnVuZUNvdW50
ZXIgJSB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsKSkKLSAgICAgICAgcHJ1bmVVbnJlZmVyZW5j
ZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOworICAgICAgICBwcnVuZVVucmVmZXJlbmNl
ZEVudHJpZXNGcm9tRm9udENhc2NhZGVDYWNoZSgpOwogICAgIC8vIFByZXZlbnQgcGF0aG9sb2dp
Y2FsIGdyb3d0aC4KLSAgICBpZiAoZm9udEdseXBoc0NhY2hlKCkuc2l6ZSgpID4gbWF4aW11bUVu
dHJpZXMpCi0gICAgICAgIGZvbnRHbHlwaHNDYWNoZSgpLnJlbW92ZShmb250R2x5cGhzQ2FjaGUo
KS5iZWdpbigpKTsKKyAgICBpZiAoZm9udENhc2NhZGVDYWNoZSgpLnNpemUoKSA+IG1heGltdW1F
bnRyaWVzKQorICAgICAgICBmb250Q2FzY2FkZUNhY2hlKCkucmVtb3ZlKGZvbnRDYXNjYWRlQ2Fj
aGUoKS5iZWdpbigpKTsKICAgICByZXR1cm4gZ2x5cGhzOwogfQogCiB2b2lkIEZvbnRDYXNjYWRl
Ojp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikgY29uc3QKIHsK
LSAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNoZWRGb250R2x5cGhzKG1fZm9udERlc2Ny
aXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOworICAgIG1fZm9udHMgPSByZXRyaWV2ZU9yQWRk
Q2FjaGVkRm9udHMobV9mb250RGVzY3JpcHRpb24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7CiAgICAg
bV91c2VCYWNrc2xhc2hBc1llblN5bWJvbCA9IHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWls
eShmaXJzdEZhbWlseSgpKTsKICAgICBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgPSBjb21wdXRlVHlw
ZXNldHRpbmdGZWF0dXJlcygpOwogfQpAQCAtMzg0LDcgKzM4NCw3IEBAIGZsb2F0IEZvbnRDYXNj
YWRlOjp3aWR0aChjb25zdCBUZXh0UnVuJiAKIAogICAgIGJvb2wgaGFzS2VybmluZ09yTGlnYXR1
cmVzID0gdHlwZXNldHRpbmdGZWF0dXJlcygpICYgKEtlcm5pbmcgfCBMaWdhdHVyZXMpOwogICAg
IGJvb2wgaGFzV29yZFNwYWNpbmdPckxldHRlclNwYWNpbmcgPSB3b3JkU3BhY2luZygpIHx8IGxl
dHRlclNwYWNpbmcoKTsKLSAgICBmbG9hdCogY2FjaGVFbnRyeSA9IG1fZ2x5cGhzLT53aWR0aENh
Y2hlKCkuYWRkKHJ1biwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpLCBo
YXNLZXJuaW5nT3JMaWdhdHVyZXMsIGhhc1dvcmRTcGFjaW5nT3JMZXR0ZXJTcGFjaW5nLCBnbHlw
aE92ZXJmbG93KTsKKyAgICBmbG9hdCogY2FjaGVFbnRyeSA9IG1fZm9udHMtPndpZHRoQ2FjaGUo
KS5hZGQocnVuLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCksIGhhc0tl
cm5pbmdPckxpZ2F0dXJlcywgaGFzV29yZFNwYWNpbmdPckxldHRlclNwYWNpbmcsIGdseXBoT3Zl
cmZsb3cpOwogICAgIGlmIChjYWNoZUVudHJ5ICYmICFzdGQ6OmlzbmFuKCpjYWNoZUVudHJ5KSkK
ICAgICAgICAgcmV0dXJuICpjYWNoZUVudHJ5OwogCkBAIC00MzIsNyArNDMyLDcgQEAgR2x5cGhE
YXRhIEZvbnRDYXNjYWRlOjpnbHlwaERhdGFGb3JDaGFyYQogICAgIGlmIChtaXJyb3IpCiAgICAg
ICAgIGMgPSB1X2NoYXJNaXJyb3IoYyk7CiAKLSAgICByZXR1cm4gbV9nbHlwaHMtPmdseXBoRGF0
YUZvckNoYXJhY3RlcihjLCBtX2ZvbnREZXNjcmlwdGlvbiwgdmFyaWFudCk7CisgICAgcmV0dXJu
IG1fZm9udHMtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjLCBtX2ZvbnREZXNjcmlwdGlvbiwgdmFy
aWFudCk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0xMDk1LDcgKzEwOTUsNyBAQCBi
b29sIEZvbnRDYXNjYWRlOjpjYW5SZWNlaXZlVGV4dEVtcGhhc2lzCiAKIGJvb2wgRm9udENhc2Nh
ZGU6OmlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9nbHlwaHMg
JiYgbV9nbHlwaHMtPmlzTG9hZGluZ0N1c3RvbUZvbnRzKCk7CisgICAgcmV0dXJuIG1fZm9udHMg
JiYgbV9mb250cy0+aXNMb2FkaW5nQ3VzdG9tRm9udHMoKTsKIH0KICAgICAKIEdseXBoVG9QYXRo
VHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0
IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGlu
ZGV4KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZS5oCShyZXZpc2lvbiAxODAyODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAKICNp
bmNsdWRlICJEYXNoQXJyYXkuaCIKICNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENh
c2NhZGVGb250cy5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkZv
bnRHbHlwaHMuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5o
IgogI2luY2x1ZGUgIlR5cGVzZXR0aW5nRmVhdHVyZXMuaCIKQEAgLTE2OSw3ICsxNjksNyBAQCBw
dWJsaWM6CiAgICAgRm9udFdlaWdodCB3ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNj
cmlwdGlvbi53ZWlnaHQoKTsgfQogICAgIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50KCkg
Y29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCk7IH0KIAotICAg
IGJvb2wgaXNQbGF0Zm9ybUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2dseXBocy0+aXNGb3JQbGF0
Zm9ybUZvbnQoKTsgfQorICAgIGJvb2wgaXNQbGF0Zm9ybUZvbnQoKSBjb25zdCB7IHJldHVybiBt
X2ZvbnRzLT5pc0ZvclBsYXRmb3JtRm9udCgpOyB9CiAKICAgICBjb25zdCBGb250TWV0cmljcyYg
Zm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9udCgpLmZvbnRNZXRyaWNzKCk7
IH0KICAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnQoKS5z
cGFjZVdpZHRoKCkgKyBtX2xldHRlclNwYWNpbmc7IH0KQEAgLTI4NSw3ICsyODUsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVTcGFjZXMoY29uc3QgVUNoYXIqLCB1bnNp
Z25lZCBsZW5ndGgpOwogCiAgICAgYm9vbCB1c2VCYWNrc2xhc2hBc1llblN5bWJvbCgpIGNvbnN0
IHsgcmV0dXJuIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2w7IH0KLSAgICBGb250R2x5cGhzKiBn
bHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2dseXBocy5nZXQoKTsgfQorICAgIEZvbnRDYXNjYWRl
Rm9udHMqIGZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9mb250cy5nZXQoKTsgfQogCiBwcml2YXRl
OgogICAgIGJvb2wgaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdDsKQEAgLTMzNSwxNSArMzM1
LDE1IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIFR5cGVzZXR0aW5nRmVhdHVyZXMgc19kZWZhdWx0
VHlwZXNldHRpbmdGZWF0dXJlczsKIAogICAgIEZvbnREZXNjcmlwdGlvbiBtX2ZvbnREZXNjcmlw
dGlvbjsKLSAgICBtdXRhYmxlIFJlZlB0cjxGb250R2x5cGhzPiBtX2dseXBoczsKKyAgICBtdXRh
YmxlIFJlZlB0cjxGb250Q2FzY2FkZUZvbnRzPiBtX2ZvbnRzOwogICAgIGZsb2F0IG1fbGV0dGVy
U3BhY2luZzsKICAgICBmbG9hdCBtX3dvcmRTcGFjaW5nOwogICAgIG11dGFibGUgYm9vbCBtX3Vz
ZUJhY2tzbGFzaEFzWWVuU3ltYm9sOwogICAgIG11dGFibGUgdW5zaWduZWQgbV90eXBlc2V0dGlu
Z0ZlYXR1cmVzIDogMjsgLy8gKFR5cGVzZXR0aW5nRmVhdHVyZXMpIENhY2hlcyB2YWx1ZXMgY29t
cHV0ZWQgZnJvbSBtX2ZvbnREZXNjcmlwdGlvbi4KIH07CiAKLXZvaWQgaW52YWxpZGF0ZUZvbnRH
bHlwaHNDYWNoZSgpOwotdm9pZCBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udEdseXBo
c0NhY2hlKCk7Cit2b2lkIGludmFsaWRhdGVGb250Q2FzY2FkZUNhY2hlKCk7Cit2b2lkIHBydW5l
VW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250Q2FzY2FkZUNhY2hlKCk7CiB2b2lkIHBydW5lU3lz
dGVtRmFsbGJhY2tGb250cygpOwogdm9pZCBjbGVhcldpZHRoQ2FjaGVzKCk7CiAKQEAgLTM1Mywy
NSArMzUzLDI1IEBAIGlubGluZSBGb250Q2FzY2FkZTo6fkZvbnRDYXNjYWRlKCkKIAogaW5saW5l
IGNvbnN0IEZvbnQmIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udCgpIGNvbnN0CiB7Ci0gICAgQVNT
RVJUKG1fZ2x5cGhzKTsKLSAgICByZXR1cm4gbV9nbHlwaHMtPnByaW1hcnlGb250KG1fZm9udERl
c2NyaXB0aW9uKTsKKyAgICBBU1NFUlQobV9mb250cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPnBy
aW1hcnlGb250KG1fZm9udERlc2NyaXB0aW9uKTsKIH0KIAogaW5saW5lIGNvbnN0IEZvbnRSYW5n
ZXMmIEZvbnRDYXNjYWRlOjpmYWxsYmFja1Jhbmdlc0F0KHVuc2lnbmVkIGluZGV4KSBjb25zdAog
ewotICAgIEFTU0VSVChtX2dseXBocyk7Ci0gICAgcmV0dXJuIG1fZ2x5cGhzLT5yZWFsaXplRmFs
bGJhY2tSYW5nZXNBdChtX2ZvbnREZXNjcmlwdGlvbiwgaW5kZXgpOworICAgIEFTU0VSVChtX2Zv
bnRzKTsKKyAgICByZXR1cm4gbV9mb250cy0+cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQobV9mb250
RGVzY3JpcHRpb24sIGluZGV4KTsKIH0KIAogaW5saW5lIGJvb2wgRm9udENhc2NhZGU6OmlzRml4
ZWRQaXRjaCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1fZ2x5cGhzKTsKLSAgICByZXR1cm4gbV9n
bHlwaHMtPmlzRml4ZWRQaXRjaChtX2ZvbnREZXNjcmlwdGlvbik7CisgICAgQVNTRVJUKG1fZm9u
dHMpOworICAgIHJldHVybiBtX2ZvbnRzLT5pc0ZpeGVkUGl0Y2gobV9mb250RGVzY3JpcHRpb24p
OwogfQogCiBpbmxpbmUgRm9udFNlbGVjdG9yKiBGb250Q2FzY2FkZTo6Zm9udFNlbGVjdG9yKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9nbHlwaHMgPyBtX2dseXBocy0+Zm9udFNlbGVjdG9yKCkg
OiAwOworICAgIHJldHVybiBtX2ZvbnRzID8gbV9mb250cy0+Zm9udFNlbGVjdG9yKCkgOiAwOwog
fQogCiBpbmxpbmUgZmxvYXQgRm9udENhc2NhZGU6OnRhYldpZHRoKGNvbnN0IEZvbnQmIGZvbnQs
IHVuc2lnbmVkIHRhYlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAJ
KHJldmlzaW9uIDE4MDI4NCkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udEdseXBocy5jcHA6MTgwMjg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGVGb250cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTMtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKKworI2lu
Y2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVkZSAi
R2x5cGhQYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworCitGb250R2x5cGhzOjpGb250
R2x5cGhzKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCisgICAgOiBtX2Nh
Y2hlZFByaW1hcnlGb250KG51bGxwdHIpCisgICAgLCBtX2ZvbnRTZWxlY3Rvcihmb250U2VsZWN0
b3IpCisgICAgLCBtX2ZvbnRTZWxlY3RvclZlcnNpb24obV9mb250U2VsZWN0b3IgPyBtX2ZvbnRT
ZWxlY3Rvci0+dmVyc2lvbigpIDogMCkKKyAgICAsIG1fZ2VuZXJhdGlvbihGb250Q2FjaGU6OnNp
bmdsZXRvbigpLmdlbmVyYXRpb24oKSkKK3sKK30KKworRm9udEdseXBoczo6Rm9udEdseXBocyhj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCisgICAgOiBtX2NhY2hlZFByaW1h
cnlGb250KG51bGxwdHIpCisgICAgLCBtX2ZvbnRTZWxlY3RvclZlcnNpb24oMCkKKyAgICAsIG1f
Z2VuZXJhdGlvbihGb250Q2FjaGU6OnNpbmdsZXRvbigpLmdlbmVyYXRpb24oKSkKKyAgICAsIG1f
aXNGb3JQbGF0Zm9ybUZvbnQodHJ1ZSkKK3sKKyAgICBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMu
YXBwZW5kKEZvbnRSYW5nZXMoRm9udENhY2hlOjpzaW5nbGV0b24oKS5mb250Rm9yUGxhdGZvcm1E
YXRhKHBsYXRmb3JtRGF0YSkpKTsKK30KKworRm9udEdseXBoczo6fkZvbnRHbHlwaHMoKQorewor
fQorCit2b2lkIEZvbnRHbHlwaHM6OmRldGVybWluZVBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZGVzY3JpcHRpb24pCit7CisgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxs
YmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKKyAgICB1bnNpZ25lZCBudW1SYW5nZXMgPSBw
cmltYXJ5UmFuZ2VzLnNpemUoKTsKKyAgICBpZiAobnVtUmFuZ2VzID09IDEpCisgICAgICAgIG1f
cGl0Y2ggPSBwcmltYXJ5UmFuZ2VzLnJhbmdlQXQoMCkuZm9udCgpLnBpdGNoKCk7CisgICAgZWxz
ZQorICAgICAgICBtX3BpdGNoID0gVmFyaWFibGVQaXRjaDsKK30KKworYm9vbCBGb250R2x5cGhz
Ojppc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiBmb250UmFu
Z2VzIDogbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzKSB7CisgICAgICAgIGlmIChmb250UmFuZ2Vz
LmlzTG9hZGluZygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKworc3RhdGljIEZvbnRSYW5nZXMgcmVhbGl6ZU5leHRGYWxsYmFjayhjb25z
dCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCB1bnNpZ25lZCYgaW5kZXgsIEZvbnRTZWxl
Y3RvciogZm9udFNlbGVjdG9yKQoreworICAgIEFTU0VSVChpbmRleCA8IGRlc2NyaXB0aW9uLmZh
bWlseUNvdW50KCkpOworCisgICAgYXV0byYgZm9udENhY2hlID0gRm9udENhY2hlOjpzaW5nbGV0
b24oKTsKKyAgICB3aGlsZSAoaW5kZXggPCBkZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpKSB7Cisg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5ID0gZGVzY3JpcHRpb24uZmFtaWx5QXQo
aW5kZXgrKyk7CisgICAgICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIGlmIChmb250U2VsZWN0b3IpIHsKKyAgICAgICAgICAgIGF1dG8gcmFu
Z2VzID0gZm9udFNlbGVjdG9yLT5mb250UmFuZ2VzRm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBmYW1p
bHkpOworICAgICAgICAgICAgaWYgKCFyYW5nZXMuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHJhbmdlczsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXV0byBmb250ID0gZm9udENh
Y2hlLmZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGZhbWlseSkpCisgICAgICAgICAgICByZXR1
cm4gRm9udFJhbmdlcyhXVEY6Om1vdmUoZm9udCkpOworICAgIH0KKyAgICAvLyBXZSBkaWRuJ3Qg
ZmluZCBhIGZvbnQuIFRyeSB0byBmaW5kIGEgc2ltaWxhciBmb250IHVzaW5nIG91ciBvd24gc3Bl
Y2lmaWMga25vd2xlZGdlIGFib3V0IG91ciBwbGF0Zm9ybS4KKyAgICAvLyBGb3IgZXhhbXBsZSBv
biBPUyBYLCB3ZSBrbm93IHRvIG1hcCBhbnkgZmFtaWxpZXMgY29udGFpbmluZyB0aGUgd29yZHMg
QXJhYmljLCBQYXNodG8sIG9yIFVyZHUgdG8gdGhlCisgICAgLy8gR2VlemEgUHJvIGZvbnQuCisg
ICAgcmV0dXJuIEZvbnRSYW5nZXMoZm9udENhY2hlLnNpbWlsYXJGb250KGRlc2NyaXB0aW9uKSk7
Cit9CisKK2NvbnN0IEZvbnRSYW5nZXMmIEZvbnRHbHlwaHM6OnJlYWxpemVGYWxsYmFja1Jhbmdl
c0F0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2lnbmVkIGluZGV4KQor
eworICAgIGlmIChpbmRleCA8IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5zaXplKCkpCisgICAg
ICAgIHJldHVybiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNbaW5kZXhdOworCisgICAgQVNTRVJU
KGluZGV4ID09IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5zaXplKCkpOworICAgIEFTU0VSVChG
b250Q2FjaGU6OnNpbmdsZXRvbigpLmdlbmVyYXRpb24oKSA9PSBtX2dlbmVyYXRpb24pOworCisg
ICAgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmFwcGVuZChGb250UmFuZ2VzKCkpOworICAgIGF1
dG8mIGZvbnRSYW5nZXMgPSBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMubGFzdCgpOworCisgICAg
aWYgKCFpbmRleCkgeworICAgICAgICBmb250UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxsYmFjayhk
ZXNjcmlwdGlvbiwgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4LCBtX2ZvbnRTZWxlY3Rvci5n
ZXQoKSk7CisgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpICYmIG1fZm9udFNlbGVjdG9y
KQorICAgICAgICAgICAgZm9udFJhbmdlcyA9IG1fZm9udFNlbGVjdG9yLT5mb250UmFuZ2VzRm9y
RmFtaWx5KGRlc2NyaXB0aW9uLCBzdGFuZGFyZEZhbWlseSk7CisgICAgICAgIGlmIChmb250UmFu
Z2VzLmlzTnVsbCgpKQorICAgICAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMoRm9udENh
Y2hlOjpzaW5nbGV0b24oKS5sYXN0UmVzb3J0RmFsbGJhY2tGb250KGRlc2NyaXB0aW9uKSk7Cisg
ICAgICAgIHJldHVybiBmb250UmFuZ2VzOworICAgIH0KKworICAgIGlmIChtX2xhc3RSZWFsaXpl
ZEZhbGxiYWNrSW5kZXggPCBkZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpKQorICAgICAgICBmb250
UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxsYmFjayhkZXNjcmlwdGlvbiwgbV9sYXN0UmVhbGl6ZWRG
YWxsYmFja0luZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7CisKKyAgICBpZiAoZm9udFJhbmdl
cy5pc051bGwoKSAmJiBtX2ZvbnRTZWxlY3RvcikgeworICAgICAgICBBU1NFUlQobV9sYXN0UmVh
bGl6ZWRGYWxsYmFja0luZGV4ID49IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCkpOworCisgICAg
ICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXggPSBtX2xhc3RSZWFsaXplZEZh
bGxiYWNrSW5kZXggLSBkZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpOworICAgICAgICBpZiAoZm9u
dFNlbGVjdG9yRmFsbGJhY2tJbmRleCA9PSBtX2ZvbnRTZWxlY3Rvci0+ZmFsbGJhY2tGb250Q291
bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmb250UmFuZ2VzOworICAgICAgICArK21fbGFzdFJl
YWxpemVkRmFsbGJhY2tJbmRleDsKKyAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9m
b250U2VsZWN0b3ItPmZhbGxiYWNrRm9udEF0KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxs
YmFja0luZGV4KSk7CisgICAgfQorCisgICAgcmV0dXJuIGZvbnRSYW5nZXM7Cit9CisKK3N0YXRp
YyBpbmxpbmUgYm9vbCBpc0luUmFuZ2UoVUNoYXIzMiBjaGFyYWN0ZXIsIFVDaGFyMzIgbG93ZXJC
b3VuZCwgVUNoYXIzMiB1cHBlckJvdW5kKQoreworICAgIHJldHVybiBjaGFyYWN0ZXIgPj0gbG93
ZXJCb3VuZCAmJiBjaGFyYWN0ZXIgPD0gdXBwZXJCb3VuZDsKK30KKworc3RhdGljIGJvb2wgc2hv
dWxkSWdub3JlUm90YXRpb24oVUNoYXIzMiBjaGFyYWN0ZXIpCit7CisgICAgaWYgKGNoYXJhY3Rl
ciA9PSAweDAwMEE3IHx8IGNoYXJhY3RlciA9PSAweDAwMEE5IHx8IGNoYXJhY3RlciA9PSAweDAw
MEFFKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjaGFyYWN0ZXIgPT0gMHgwMDBC
NiB8fCBjaGFyYWN0ZXIgPT0gMHgwMDBCQyB8fCBjaGFyYWN0ZXIgPT0gMHgwMDBCRCB8fCBjaGFy
YWN0ZXIgPT0gMHgwMDBCRSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXNJblJh
bmdlKGNoYXJhY3RlciwgMHgwMDJFNSwgMHgwMDJFQikpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIAorICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAxMTAwLCAweDAxMUZGKSB8fCBp
c0luUmFuZ2UoY2hhcmFjdGVyLCAweDAxNDAxLCAweDAxNjdGKSB8fCBpc0luUmFuZ2UoY2hhcmFj
dGVyLCAweDAxODAwLCAweDAxOEZGKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
Y2hhcmFjdGVyID09IDB4MDIwMTYgfHwgY2hhcmFjdGVyID09IDB4MDIwMjAgfHwgY2hhcmFjdGVy
ID09IDB4MDIwMjEgfHwgY2hhcmFjdGVyID09IDB4MjAzMCB8fCBjaGFyYWN0ZXIgPT0gMHgwMjAz
MSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3Rlciwg
MHgwMjAzQiwgMHgwMjAzRCkgfHwgY2hhcmFjdGVyID09IDB4MDIwNDIgfHwgY2hhcmFjdGVyID09
IDB4MDIwNDQgfHwgY2hhcmFjdGVyID09IDB4MDIwNDcKKyAgICAgICAgfHwgY2hhcmFjdGVyID09
IDB4MDIwNDggfHwgY2hhcmFjdGVyID09IDB4MDIwNDkgfHwgY2hhcmFjdGVyID09IDB4MjA1MSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgw
MjA2NSwgMHgwMjA2OSkgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjBERCwgMHgwMjBFMCkK
KyAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjBFMiwgMHgwMjBFNCkgfHwgaXNJ
blJhbmdlKGNoYXJhY3RlciwgMHgwMjEwMCwgMHgwMjExNykKKyAgICAgICAgfHwgaXNJblJhbmdl
KGNoYXJhY3RlciwgMHgwMjExOSwgMHgwMjEzMSkgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgw
MjEzMywgMHgwMjEzRikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGlzSW5SYW5n
ZShjaGFyYWN0ZXIsIDB4MDIxNDUsIDB4MDIxNEEpIHx8IGNoYXJhY3RlciA9PSAweDAyMTRDIHx8
IGNoYXJhY3RlciA9PSAweDAyMTRECisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4
MDIxNEYsIDB4MDIxOEYpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChpc0luUmFu
Z2UoY2hhcmFjdGVyLCAweDAyMzAwLCAweDAyMzA3KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAw
eDAyMzBDLCAweDAyMzFGKQorICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMzIy
LCAweDAyMzJCKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMzdELCAweDAyMzlBKQorICAg
ICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyM0I0LCAweDAyM0I2KSB8fCBpc0luUmFu
Z2UoY2hhcmFjdGVyLCAweDAyM0JBLCAweDAyM0NGKQorICAgICAgICB8fCBpc0luUmFuZ2UoY2hh
cmFjdGVyLCAweDAyM0QxLCAweDAyM0RCKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyM0Uy
LCAweDAyNEZGKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXNJblJhbmdlKGNo
YXJhY3RlciwgMHgwMjVBMCwgMHgwMjYxOSkgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjYy
MCwgMHgwMjc2NykKKyAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjc3NiwgMHgw
Mjc5MykgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMkIxMiwgMHgwMkIyRikKKyAgICAgICAg
fHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMkI0RCwgMHgwMkJGRikgfHwgaXNJblJhbmdlKGNo
YXJhY3RlciwgMHgwMkU4MCwgMHgwMzAwNykpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGNoYXJhY3RlciA9PSAweDAzMDEyIHx8IGNoYXJhY3RlciA9PSAweDAzMDEzIHx8IGlzSW5S
YW5nZShjaGFyYWN0ZXIsIDB4MDMwMjAsIDB4MDMwMkYpCisgICAgICAgIHx8IGlzSW5SYW5nZShj
aGFyYWN0ZXIsIDB4MDMwMzEsIDB4MDMwOUYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDMw
QTEsIDB4MDMwRkIpCisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDMwRkQsIDB4
MEE0Q0YpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChpc0luUmFuZ2UoY2hhcmFj
dGVyLCAweDBBODQwLCAweDBBODdGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBBOTYwLCAw
eDBBOTdGKQorICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBBQzAwLCAweDBEN0ZG
KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBFMDAwLCAweDBGQUZGKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkUxMCwgMHgwRkUx
RikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkUzMCwgMHgwRkU0OCkKKyAgICAgICAgfHwg
aXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkU1MCwgMHgwRkU1NykgfHwgaXNJblJhbmdlKGNoYXJh
Y3RlciwgMHgwRkU1RiwgMHgwRkU2MikKKyAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3Rlciwg
MHgwRkU2NywgMHgwRkU2RikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGlzSW5S
YW5nZShjaGFyYWN0ZXIsIDB4MEZGMDEsIDB4MEZGMDcpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIs
IDB4MEZGMEEsIDB4MEZGMEMpCisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEZG
MEUsIDB4MEZGMTkpIHx8IGNoYXJhY3RlciA9PSAweDBGRjFCIHx8IGlzSW5SYW5nZShjaGFyYWN0
ZXIsIDB4MEZGMUYsIDB4MEZGM0EpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChj
aGFyYWN0ZXIgPT0gMHgwRkYzQyB8fCBjaGFyYWN0ZXIgPT0gMHgwRkYzRSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkY0MCwgMHgwRkY1
QSkgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkZFMCwgMHgwRkZFMikKKyAgICAgICAgfHwg
aXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkZFNCwgMHgwRkZFNykgfHwgaXNJblJhbmdlKGNoYXJh
Y3RlciwgMHgwRkZGMCwgMHgwRkZGOCkKKyAgICAgICAgfHwgY2hhcmFjdGVyID09IDB4MEZGRkQp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4
MTMwMDAsIDB4MTM0MkYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MUIwMDAsIDB4MUIwRkYp
CisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MUQwMDAsIDB4MUQxRkYpIHx8IGlz
SW5SYW5nZShjaGFyYWN0ZXIsIDB4MUQzMDAsIDB4MUQzN0YpCisgICAgICAgIHx8IGlzSW5SYW5n
ZShjaGFyYWN0ZXIsIDB4MUYwMDAsIDB4MUY2NEYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4
MUY2ODAsIDB4MUY3N0YpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoaXNJ
blJhbmdlKGNoYXJhY3RlciwgMHgyMDAwMCwgMHgyRkZGRCkgfHwgaXNJblJhbmdlKGNoYXJhY3Rl
ciwgMHgzMDAwMCwgMHgzRkZGRCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJu
IGZhbHNlOworfQorCisjaWYgUExBVEZPUk0oQ09DT0EpCitzdGF0aWMgR2x5cGhEYXRhIGdseXBo
RGF0YUZvckNKS0NoYXJhY3RlcldpdGhvdXRTeW50aGV0aWNJdGFsaWMoVUNoYXIzMiBjaGFyYWN0
ZXIsIEdseXBoRGF0YSYgZGF0YSkKK3sKKyAgICBHbHlwaERhdGEgbm9uSXRhbGljRGF0YSA9IGRh
dGEuZm9udC0+bm9uU3ludGhldGljSXRhbGljRm9udCgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIo
Y2hhcmFjdGVyKTsKKyAgICBpZiAobm9uSXRhbGljRGF0YS5mb250KQorICAgICAgICByZXR1cm4g
bm9uSXRhbGljRGF0YTsKKyAgICByZXR1cm4gZGF0YTsKK30KKyNlbmRpZgorICAgIAorc3RhdGlj
IEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlv
bihVQ2hhcjMyIGNoYXJhY3RlciwgTm9uQ0pLR2x5cGhPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwg
Y29uc3QgR2x5cGhEYXRhJiBkYXRhKQoreworICAgIGlmIChvcmllbnRhdGlvbiA9PSBOb25DSktH
bHlwaE9yaWVudGF0aW9uVXByaWdodCB8fCBzaG91bGRJZ25vcmVSb3RhdGlvbihjaGFyYWN0ZXIp
KSB7CisgICAgICAgIEdseXBoRGF0YSB1cHJpZ2h0RGF0YSA9IGRhdGEuZm9udC0+dXByaWdodE9y
aWVudGF0aW9uRm9udCgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICAg
ICAgLy8gSWYgdGhlIGdseXBocyBhcmUgdGhlIHNhbWUsIHRoZW4gd2Uga25vdyB3ZSBjYW4ganVz
dCB1c2UgdGhlIGhvcml6b250YWwgZ2x5cGggcm90YXRlZCB2ZXJ0aWNhbGx5IHRvIGJlIHVwcmln
aHQuCisgICAgICAgIGlmIChkYXRhLmdseXBoID09IHVwcmlnaHREYXRhLmdseXBoKQorICAgICAg
ICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgIC8vIFRoZSBnbHlwaHMgYXJlIGRpc3RpbmN0LCBt
ZWFuaW5nIHRoYXQgdGhlIGZvbnQgaGFzIGEgdmVydGljYWwtcmlnaHQgZ2x5cGggYmFrZWQgaW50
byBpdC4gV2UgY2FuJ3QgdXNlIHRoYXQKKyAgICAgICAgLy8gZ2x5cGgsIHNvIHdlIGZhbGwgYmFj
ayB0byB0aGUgdXByaWdodCBkYXRhIGFuZCB1c2UgdGhlIGhvcml6b250YWwgZ2x5cGguCisgICAg
ICAgIGlmICh1cHJpZ2h0RGF0YS5mb250KQorICAgICAgICAgICAgcmV0dXJuIHVwcmlnaHREYXRh
OworICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb24gPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblZl
cnRpY2FsUmlnaHQpIHsKKyAgICAgICAgR2x5cGhEYXRhIHZlcnRpY2FsUmlnaHREYXRhID0gZGF0
YS5mb250LT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCktPmdseXBoRGF0YUZvckNoYXJh
Y3RlcihjaGFyYWN0ZXIpOworICAgICAgICAvLyBJZiB0aGUgZ2x5cGhzIGFyZSBkaXN0aW5jdCwg
d2Ugd2lsbCBtYWtlIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGZvbnQgaGFzIGEgdmVydGljYWwt
cmlnaHQgZ2x5cGggYmFrZWQKKyAgICAgICAgLy8gaW50byBpdC4KKyAgICAgICAgaWYgKGRhdGEu
Z2x5cGggIT0gdmVydGljYWxSaWdodERhdGEuZ2x5cGgpCisgICAgICAgICAgICByZXR1cm4gZGF0
YTsKKyAgICAgICAgLy8gVGhlIGdseXBocyBhcmUgaWRlbnRpY2FsLCBtZWFuaW5nIHRoYXQgd2Ug
c2hvdWxkIGp1c3QgdXNlIHRoZSBob3Jpem9udGFsIGdseXBoLgorICAgICAgICBpZiAodmVydGlj
YWxSaWdodERhdGEuZm9udCkKKyAgICAgICAgICAgIHJldHVybiB2ZXJ0aWNhbFJpZ2h0RGF0YTsK
KyAgICB9CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlw
aERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQpCit7CisgICAgLy8gU3lzdGVtIGZhbGxi
YWNrIGlzIGNoYXJhY3Rlci1kZXBlbmRlbnQuCisgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJl
YWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKKyAgICBhdXRvKiBvcmlnaW5h
bEZvbnQgPSBwcmltYXJ5UmFuZ2VzLmZvbnRGb3JDaGFyYWN0ZXIoYyk7CisgICAgaWYgKCFvcmln
aW5hbEZvbnQpCisgICAgICAgIG9yaWdpbmFsRm9udCA9ICZwcmltYXJ5UmFuZ2VzLmZvbnRGb3JG
aXJzdFJhbmdlKCk7CisKKyAgICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb250ID0gb3Jp
Z2luYWxGb250LT5zeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIoYywgZGVzY3JpcHRpb24s
IG1faXNGb3JQbGF0Zm9ybUZvbnQpOworICAgIGlmICghc3lzdGVtRmFsbGJhY2tGb250KQorICAg
ICAgICByZXR1cm4gR2x5cGhEYXRhKCk7CisKKyAgICBpZiAoc3lzdGVtRmFsbGJhY2tGb250LT5w
bGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFzeXN0ZW1GYWxsYmFj
a0ZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkgJiYgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBo
T3JTeW1ib2woYykpCisgICAgICAgIHZhcmlhbnQgPSBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50Owor
CisgICAgR2x5cGhEYXRhIGZhbGxiYWNrR2x5cGhEYXRhOworICAgIGlmICh2YXJpYW50ID09IE5v
cm1hbFZhcmlhbnQpCisgICAgICAgIGZhbGxiYWNrR2x5cGhEYXRhID0gc3lzdGVtRmFsbGJhY2tG
b250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CisgICAgZWxzZQorICAgICAgICBmYWxsYmFj
a0dseXBoRGF0YSA9IHN5c3RlbUZhbGxiYWNrRm9udC0+dmFyaWFudEZvbnQoZGVzY3JpcHRpb24s
IHZhcmlhbnQpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CisKKyAgICBpZiAodmFyaWFudCA9
PSBOb3JtYWxWYXJpYW50ICYmIGZhbGxiYWNrR2x5cGhEYXRhLmZvbnQpIHsKKyAgICAgICAgaWYg
KCFGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjKSAmJiBmYWxsYmFja0dseXBo
RGF0YS5mb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFm
YWxsYmFja0dseXBoRGF0YS5mb250LT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCisgICAg
ICAgICAgICBmYWxsYmFja0dseXBoRGF0YSA9IGdseXBoRGF0YUZvck5vbkNKS0NoYXJhY3Rlcldp
dGhHbHlwaE9yaWVudGF0aW9uKGMsIGRlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24o
KSwgZmFsbGJhY2tHbHlwaERhdGEpOworICAgIH0KKworICAgIC8vIEtlZXAgdGhlIHN5c3RlbSBm
YWxsYmFjayBmb250cyB3ZSB1c2UgYWxpdmUuCisgICAgaWYgKGZhbGxiYWNrR2x5cGhEYXRhLmds
eXBoKQorICAgICAgICBtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5hZGQoc3lzdGVtRmFsbGJhY2tG
b250LnJlbGVhc2UoKSk7CisKKyAgICByZXR1cm4gZmFsbGJhY2tHbHlwaERhdGE7Cit9CisKK0ds
eXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIgYywgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCwgdW5zaWdu
ZWQgZmFsbGJhY2tJbmRleCkKK3sKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBhdXRvJiBm
b250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxiYWNr
SW5kZXgrKyk7CisgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGF1dG8qIGZvbnQgPSBmb250UmFuZ2VzLmZvbnRGb3JDaGFyYWN0ZXIo
Yyk7CisgICAgICAgIEdseXBoRGF0YSBkYXRhID0gZm9udCA/IGZvbnQtPmdseXBoRGF0YUZvckNo
YXJhY3RlcihjKSA6IEdseXBoRGF0YSgpOworICAgICAgICBpZiAoZGF0YS5mb250KSB7CisgICAg
ICAgICAgICAvLyBUaGUgdmFyaWFudEZvbnQgZnVuY3Rpb24gc2hvdWxkIG5vdCBub3JtYWxseSBy
ZXR1cm4gMC4KKyAgICAgICAgICAgIC8vIEJ1dCBpZiBpdCBkb2VzLCB3ZSB3aWxsIGp1c3QgcmVu
ZGVyIHRoZSBjYXBpdGFsIGxldHRlciBiaWcuCisgICAgICAgICAgICBSZWZQdHI8Rm9udD4gdmFy
aWFudEZvbnQgPSBkYXRhLmZvbnQtPnZhcmlhbnRGb250KGRlc2NyaXB0aW9uLCB2YXJpYW50KTsK
KyAgICAgICAgICAgIGlmICghdmFyaWFudEZvbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRh
dGE7CisKKyAgICAgICAgICAgIHJldHVybiB2YXJpYW50Rm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKGMpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGdseXBoRGF0YUZvclN5c3Rl
bUZhbGxiYWNrKGMsIGRlc2NyaXB0aW9uLCB2YXJpYW50KTsKK30KKworR2x5cGhEYXRhIEZvbnRH
bHlwaHM6OmdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoVUNoYXIzMiBjLCBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIGNvbnN0IHVuc2lnbmVkIHBhZ2VOdW1iZXIg
PSBjIC8gR2x5cGhQYWdlOjpzaXplOworCisgICAgZm9yICh1bnNpZ25lZCBmYWxsYmFja0luZGV4
ID0gMDsgdHJ1ZTsgKytmYWxsYmFja0luZGV4KSB7CisgICAgICAgIGF1dG8mIGZvbnRSYW5nZXMg
PSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJhY2tJbmRleCk7Cisg
ICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGF1dG8qIGZvbnQgPSBmb250UmFuZ2VzLmZvbnRGb3JDaGFyYWN0ZXIoYyk7CisgICAgICAg
IGF1dG8qIHBhZ2UgPSBmb250ID8gZm9udC0+Z2x5cGhQYWdlKHBhZ2VOdW1iZXIpIDogbnVsbHB0
cjsKKyAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEds
eXBoRGF0YSBkYXRhID0gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBp
ZiAoZGF0YS5mb250KSB7CisgICAgICAgICAgICBpZiAoZGF0YS5mb250LT5wbGF0Zm9ybURhdGEo
KS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFkYXRhLmZvbnQtPmlzVGV4dE9yaWVudGF0
aW9uRmFsbGJhY2soKSkgeworICAgICAgICAgICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pL
SWRlb2dyYXBoT3JTeW1ib2woYykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaERh
dGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihjLCBkZXNjcmlwdGlvbi5u
b25DSktHbHlwaE9yaWVudGF0aW9uKCksIGRhdGEpOworCisgICAgICAgICAgICAgICAgaWYgKCFk
YXRhLmZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
VXNlIHRoZSBicm9rZW4gaWRlb2dyYXBoIGZvbnQgZGF0YS4gVGhlIGJyb2tlbiBpZGVvZ3JhcGgg
Zm9udCB3aWxsIHVzZSB0aGUgaG9yaXpvbnRhbCB3aWR0aCBvZiBnbHlwaHMKKyAgICAgICAgICAg
ICAgICAgICAgLy8gdG8gbWFrZSBzdXJlIHlvdSBnZXQgYSBzcXVhcmUgKGV2ZW4gZm9yIGJyb2tl
biBnbHlwaHMgbGlrZSBzeW1ib2xzIHVzZWQgZm9yIHB1bmN0dWF0aW9uKS4KKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdseXBoRGF0YUZvclZhcmlhbnQoYywgZGVzY3JpcHRpb24sIEJyb2tl
bklkZW9ncmFwaFZhcmlhbnQsIGZhbGxiYWNrSW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyNp
ZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgICAgICAgICBpZiAoZGF0YS5mb250LT5wbGF0Zm9y
bURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bHlwaERhdGFGb3JDSktDaGFyYWN0ZXJXaXRob3V0U3ludGhldGljSXRhbGljKGMsIGRhdGEpOwor
I2VuZGlmCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIGdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKGMsIGRl
c2NyaXB0aW9uLCBOb3JtYWxWYXJpYW50KTsKK30KKworc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+
IGdseXBoUGFnZUZyb21Gb250UmFuZ2VzKHVuc2lnbmVkIHBhZ2VOdW1iZXIsIGNvbnN0IEZvbnRS
YW5nZXMmIGZvbnRSYW5nZXMpCit7CisgICAgY29uc3QgRm9udCogZm9udCA9IG51bGxwdHI7Cisg
ICAgVUNoYXIzMiBwYWdlUmFuZ2VGcm9tID0gcGFnZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsK
KyAgICBVQ2hhcjMyIHBhZ2VSYW5nZVRvID0gcGFnZVJhbmdlRnJvbSArIEdseXBoUGFnZTo6c2l6
ZSAtIDE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvbnRSYW5nZXMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgYXV0byYgcmFuZ2UgPSBmb250UmFuZ2VzLnJhbmdlQXQoaSk7CisgICAg
ICAgIGlmIChyYW5nZS50bygpKSB7CisgICAgICAgICAgICBpZiAocmFuZ2UuZnJvbSgpIDw9IHBh
Z2VSYW5nZUZyb20gJiYgcGFnZVJhbmdlVG8gPD0gcmFuZ2UudG8oKSkKKyAgICAgICAgICAgICAg
ICBmb250ID0gJnJhbmdlLmZvbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorICAgIGlmICghZm9udCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAo
Zm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gY29uc3RfY2FzdDxHbHlwaFBhZ2UqPihmb250
LT5nbHlwaFBhZ2UocGFnZU51bWJlcikpOworfQorCitHbHlwaERhdGEgRm9udEdseXBoczo6Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIEFTU0VSVCh2YXJpYW50ICE9IEF1dG9WYXJpYW50KTsKKworICAgIGlmICh2YXJp
YW50ICE9IE5vcm1hbFZhcmlhbnQpCisgICAgICAgIHJldHVybiBnbHlwaERhdGFGb3JWYXJpYW50
KGMsIGRlc2NyaXB0aW9uLCB2YXJpYW50LCAwKTsKKworICAgIGNvbnN0IHVuc2lnbmVkIHBhZ2VO
dW1iZXIgPSBjIC8gR2x5cGhQYWdlOjpzaXplOworCisgICAgUmVmUHRyPEdseXBoUGFnZT4mIGNh
Y2hlZFBhZ2UgPSBwYWdlTnVtYmVyID8gbV9jYWNoZWRQYWdlcy5hZGQocGFnZU51bWJlciwgbnVs
bHB0cikuaXRlcmF0b3ItPnZhbHVlIDogbV9jYWNoZWRQYWdlWmVybzsKKyAgICBpZiAoIWNhY2hl
ZFBhZ2UpCisgICAgICAgIGNhY2hlZFBhZ2UgPSBnbHlwaFBhZ2VGcm9tRm9udFJhbmdlcyhwYWdl
TnVtYmVyLCByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCkpOworCisgICAg
R2x5cGhEYXRhIGdseXBoRGF0YSA9IGNhY2hlZFBhZ2UgPyBjYWNoZWRQYWdlLT5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoYykgOiBHbHlwaERhdGEoKTsKKyAgICBpZiAoIWdseXBoRGF0YS5nbHlwaCkg
eworICAgICAgICBpZiAoIWNhY2hlZFBhZ2UpCisgICAgICAgICAgICBjYWNoZWRQYWdlID0gR2x5
cGhQYWdlOjpjcmVhdGVGb3JNaXhlZEZvbnRzKCk7CisgICAgICAgIGVsc2UgaWYgKGNhY2hlZFBh
Z2UtPmlzSW1tdXRhYmxlKCkpCisgICAgICAgICAgICBjYWNoZWRQYWdlID0gR2x5cGhQYWdlOjpj
cmVhdGVDb3B5Rm9yTWl4ZWRGb250cygqY2FjaGVkUGFnZSk7CisKKyAgICAgICAgZ2x5cGhEYXRh
ID0gZ2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChjLCBkZXNjcmlwdGlvbik7CisgICAgICAgIGNh
Y2hlZFBhZ2UtPnNldEdseXBoRGF0YUZvckNoYXJhY3RlcihjLCBnbHlwaERhdGEuZ2x5cGgsIGds
eXBoRGF0YS5mb250KTsKKyAgICB9CisgICAgcmV0dXJuIGdseXBoRGF0YTsKK30KKwordm9pZCBG
b250R2x5cGhzOjpwcnVuZVN5c3RlbUZhbGxiYWNrcygpCit7CisgICAgaWYgKG1fc3lzdGVtRmFs
bGJhY2tGb250U2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIC8vIE11dGFibGUg
Z2x5cGggcGFnZXMgbWF5IHJlZmVyZW5jZSBmYWxsYmFjayBmb250cy4KKyAgICBpZiAobV9jYWNo
ZWRQYWdlWmVybyAmJiAhbV9jYWNoZWRQYWdlWmVyby0+aXNJbW11dGFibGUoKSkKKyAgICAgICAg
bV9jYWNoZWRQYWdlWmVybyA9IG51bGxwdHI7CisgICAgbV9jYWNoZWRQYWdlcy5yZW1vdmVJZihb
XShkZWNsdHlwZShtX2NhY2hlZFBhZ2VzKTo6S2V5VmFsdWVQYWlyVHlwZSYga2V5QW5kVmFsdWUp
IHsKKyAgICAgICAgcmV0dXJuICFrZXlBbmRWYWx1ZS52YWx1ZS0+aXNJbW11dGFibGUoKTsKKyAg
ICB9KTsKKyAgICBtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5jbGVhcigpOworfQorCit9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZUZvbnRzLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcg
QEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udEdseXBocy5oIgor
I2luY2x1ZGUgIkZvbnRDYXNjYWRlRm9udHMuaCIKIAogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgog
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCkBAIC0zNiw3ICszNiw3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIAotRm9udEdseXBoczo6Rm9udEdseXBocyhQYXNzUmVmUHRyPEZvbnRTZWxlY3Rv
cj4gZm9udFNlbGVjdG9yKQorRm9udENhc2NhZGVGb250czo6Rm9udENhc2NhZGVGb250cyhQYXNz
UmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQogICAgIDogbV9jYWNoZWRQcmltYXJ5
Rm9udChudWxscHRyKQogICAgICwgbV9mb250U2VsZWN0b3IoZm9udFNlbGVjdG9yKQogICAgICwg
bV9mb250U2VsZWN0b3JWZXJzaW9uKG1fZm9udFNlbGVjdG9yID8gbV9mb250U2VsZWN0b3ItPnZl
cnNpb24oKSA6IDApCkBAIC00NCw3ICs0NCw3IEBAIEZvbnRHbHlwaHM6OkZvbnRHbHlwaHMoUGFz
c1JlZlB0cjxGb250U2UKIHsKIH0KIAotRm9udEdseXBoczo6Rm9udEdseXBocyhjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCitGb250Q2FzY2FkZUZvbnRzOjpGb250Q2FzY2Fk
ZUZvbnRzKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKICAgICA6IG1fY2Fj
aGVkUHJpbWFyeUZvbnQobnVsbHB0cikKICAgICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbigwKQog
ICAgICwgbV9nZW5lcmF0aW9uKEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZ2VuZXJhdGlvbigpKQpA
QCAtNTMsMTEgKzUzLDExIEBAIEZvbnRHbHlwaHM6OkZvbnRHbHlwaHMoY29uc3QgRm9udFBsYXRm
b3IKICAgICBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuYXBwZW5kKEZvbnRSYW5nZXMoRm9udENh
Y2hlOjpzaW5nbGV0b24oKS5mb250Rm9yUGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkpKTsKIH0K
IAotRm9udEdseXBoczo6fkZvbnRHbHlwaHMoKQorRm9udENhc2NhZGVGb250czo6fkZvbnRDYXNj
YWRlRm9udHMoKQogewogfQogCi12b2lkIEZvbnRHbHlwaHM6OmRldGVybWluZVBpdGNoKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit2b2lkIEZvbnRDYXNjYWRlRm9udHM6OmRl
dGVybWluZVBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAg
YXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9u
LCAwKTsKICAgICB1bnNpZ25lZCBudW1SYW5nZXMgPSBwcmltYXJ5UmFuZ2VzLnNpemUoKTsKQEAg
LTY3LDcgKzY3LDcgQEAgdm9pZCBGb250R2x5cGhzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGbwog
ICAgICAgICBtX3BpdGNoID0gVmFyaWFibGVQaXRjaDsKIH0KIAotYm9vbCBGb250R2x5cGhzOjpp
c0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0Citib29sIEZvbnRDYXNjYWRlRm9udHM6OmlzTG9h
ZGluZ0N1c3RvbUZvbnRzKCkgY29uc3QKIHsKICAgICBmb3IgKGF1dG8mIGZvbnRSYW5nZXMgOiBt
X3JlYWxpemVkRmFsbGJhY2tSYW5nZXMpIHsKICAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNMb2Fk
aW5nKCkpCkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyBGb250UmFuZ2VzIHJlYWxpemVOZXh0RmFs
bGJhY2soY28KICAgICByZXR1cm4gRm9udFJhbmdlcyhmb250Q2FjaGUuc2ltaWxhckZvbnQoZGVz
Y3JpcHRpb24pKTsKIH0KIAotY29uc3QgRm9udFJhbmdlcyYgRm9udEdseXBoczo6cmVhbGl6ZUZh
bGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWdu
ZWQgaW5kZXgpCitjb25zdCBGb250UmFuZ2VzJiBGb250Q2FzY2FkZUZvbnRzOjpyZWFsaXplRmFs
bGJhY2tSYW5nZXNBdChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCB1bnNpZ25l
ZCBpbmRleCkKIHsKICAgICBpZiAoaW5kZXggPCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuc2l6
ZSgpKQogICAgICAgICByZXR1cm4gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzW2luZGV4XTsKQEAg
LTI1Miw3ICsyNTIsNyBAQCBzdGF0aWMgR2x5cGhEYXRhIGdseXBoRGF0YUZvck5vbkNKS0NoYXJh
CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLUdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFG
b3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQpCitHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6
Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KQogewogICAgIC8vIFN5c3RlbSBm
YWxsYmFjayBpcyBjaGFyYWN0ZXItZGVwZW5kZW50LgogICAgIGF1dG8mIHByaW1hcnlSYW5nZXMg
PSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7CkBAIC0yODUsNyArMjg1
LDcgQEAgR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvclN5c3RlbQogICAgIHJldHVy
biBmYWxsYmFja0dseXBoRGF0YTsKIH0KIAotR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0
YUZvclZhcmlhbnQoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
LCBGb250VmFyaWFudCB2YXJpYW50LCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KQorR2x5cGhEYXRh
IEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiBjLCBjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50LCB1bnNpZ25l
ZCBmYWxsYmFja0luZGV4KQogewogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGF1dG8mIGZv
bnRSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJhY2tJ
bmRleCsrKTsKQEAgLTMwNyw3ICszMDcsNyBAQCBHbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhE
YXRhRm9yVmFyaWFuCiAgICAgcmV0dXJuIGdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKGMsIGRl
c2NyaXB0aW9uLCB2YXJpYW50KTsKIH0KIAotR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0
YUZvck5vcm1hbFZhcmlhbnQoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uKQorR2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvck5vcm1hbFZh
cmlhbnQoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewog
ICAgIGNvbnN0IHVuc2lnbmVkIHBhZ2VOdW1iZXIgPSBjIC8gR2x5cGhQYWdlOjpzaXplOwogCkBA
IC0zNjUsNyArMzY1LDcgQEAgc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGdseXBoUGFnZUZyb21G
bwogICAgIHJldHVybiBjb25zdF9jYXN0PEdseXBoUGFnZSo+KGZvbnQtPmdseXBoUGFnZShwYWdl
TnVtYmVyKSk7CiB9CiAKLUdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWN0
ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFy
aWFudCB2YXJpYW50KQorR2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNo
YXJhY3RlcihVQ2hhcjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZv
bnRWYXJpYW50IHZhcmlhbnQpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBB
U1NFUlQodmFyaWFudCAhPSBBdXRvVmFyaWFudCk7CkBAIC0zOTIsNyArMzkyLDcgQEAgR2x5cGhE
YXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvckNoYXJhYwogICAgIHJldHVybiBnbHlwaERhdGE7
CiB9CiAKLXZvaWQgRm9udEdseXBoczo6cHJ1bmVTeXN0ZW1GYWxsYmFja3MoKQordm9pZCBGb250
Q2FzY2FkZUZvbnRzOjpwcnVuZVN5c3RlbUZhbGxiYWNrcygpCiB7CiAgICAgaWYgKG1fc3lzdGVt
RmFsbGJhY2tGb250U2V0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaAko
cmV2aXNpb24gMTgwMjg0KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250R2x5cGhzLmg6MTgwMjg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGVGb250cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDEwLCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBGb250R2x5cGhzX2gKKyNkZWZpbmUgRm9udEdseXBo
c19oCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udFJhbmdlcy5oIgorI2luY2x1
ZGUgIkZvbnRTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkdseXBoUGFnZS5oIgorI2luY2x1ZGUgIldp
ZHRoQ2FjaGUuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CisKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiV2ViQ29yZVRocmVhZC5o
IgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0
OworY2xhc3MgSW50UmVjdDsKK2NsYXNzIEZvbnREZXNjcmlwdGlvbjsKK2NsYXNzIEZvbnRQbGF0
Zm9ybURhdGE7CitjbGFzcyBGb250U2VsZWN0b3I7CisKK2NsYXNzIEZvbnRHbHlwaHMgOiBwdWJs
aWMgUmVmQ291bnRlZDxGb250R2x5cGhzPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9u
dEdseXBocyk7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxGb250R2x5cGhzPiBjcmVhdGUoUGFz
c1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikgeyByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGb250R2x5cGhzKGZvbnRTZWxlY3RvcikpOyB9CisgICAgc3RhdGljIFJlZjxGb250R2x5cGhz
PiBjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1E
YXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEZvbnRHbHlwaHMocGxhdGZvcm1EYXRhKSk7IH0K
KworICAgIFdFQkNPUkVfRVhQT1JUIH5Gb250R2x5cGhzKCk7CisKKyAgICBib29sIGlzRm9yUGxh
dGZvcm1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9pc0ZvclBsYXRmb3JtRm9udDsgfQorCisgICAg
R2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBGb250VmFyaWFudCk7CisKKyAgICBib29sIGlzRml4ZWRQaXRjaChjb25zdCBGb250
RGVzY3JpcHRpb24mKTsKKyAgICB2b2lkIGRldGVybWluZVBpdGNoKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYpOworCisgICAgYm9vbCBpc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0OworCisgICAg
Rm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSB7IHJldHVybiBtX2ZvbnRTZWxlY3Rvci5nZXQo
KTsgfQorICAgIC8vIEZJWE1FOiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gY29tYmluZSBmb250
U2VsZWN0b3JWZXJzaW9uIGFuZCBnZW5lcmF0aW9uLgorICAgIHVuc2lnbmVkIGZvbnRTZWxlY3Rv
clZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX2ZvbnRTZWxlY3RvclZlcnNpb247IH0KKyAgICB1
bnNpZ25lZCBnZW5lcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9nZW5lcmF0aW9uOyB9CisKKyAg
ICBXaWR0aENhY2hlJiB3aWR0aENhY2hlKCkgeyByZXR1cm4gbV93aWR0aENhY2hlOyB9CisgICAg
Y29uc3QgV2lkdGhDYWNoZSYgd2lkdGhDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhDYWNo
ZTsgfQorCisgICAgY29uc3QgRm9udCYgcHJpbWFyeUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udFJhbmdlcyYgcmVhbGl6ZUZhbGxiYWNr
UmFuZ2VzQXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCk7
CisKKyAgICB2b2lkIHBydW5lU3lzdGVtRmFsbGJhY2tzKCk7CisKK3ByaXZhdGU6CisgICAgRm9u
dEdseXBocyhQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOworICAgIEZvbnRHbHlwaHMoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYpOworCisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclN5c3RlbUZh
bGxiYWNrKFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50KTsKKyAg
ICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChVQ2hhcjMyLCBjb25zdCBGb250
RGVzY3JpcHRpb24mKTsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMy
LCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBGb250VmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJ
bmRleCk7CisKKyAgICBWZWN0b3I8Rm9udFJhbmdlcywgMT4gbV9yZWFsaXplZEZhbGxiYWNrUmFu
Z2VzOworICAgIHVuc2lnbmVkIG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCB7IDAgfTsKKwor
ICAgIFJlZlB0cjxHbHlwaFBhZ2U+IG1fY2FjaGVkUGFnZVplcm87CisgICAgSGFzaE1hcDxpbnQs
IFJlZlB0cjxHbHlwaFBhZ2U+PiBtX2NhY2hlZFBhZ2VzOworCisgICAgSGFzaFNldDxSZWZQdHI8
Rm9udD4+IG1fc3lzdGVtRmFsbGJhY2tGb250U2V0OworCisgICAgY29uc3QgRm9udCogbV9jYWNo
ZWRQcmltYXJ5Rm9udDsKKyAgICBSZWZQdHI8Rm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsK
KworICAgIFdpZHRoQ2FjaGUgbV93aWR0aENhY2hlOworCisgICAgdW5zaWduZWQgbV9mb250U2Vs
ZWN0b3JWZXJzaW9uOworICAgIHVuc2lnbmVkIHNob3J0IG1fZ2VuZXJhdGlvbjsKKyAgICBQaXRj
aCBtX3BpdGNoIHsgVW5rbm93blBpdGNoIH07CisgICAgYm9vbCBtX2lzRm9yUGxhdGZvcm1Gb250
IHsgZmFsc2UgfTsKK307CisKK2lubGluZSBib29sIEZvbnRHbHlwaHM6OmlzRml4ZWRQaXRjaChj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIGlmIChtX3BpdGNoID09
IFVua25vd25QaXRjaCkKKyAgICAgICAgZGV0ZXJtaW5lUGl0Y2goZGVzY3JpcHRpb24pOworICAg
IHJldHVybiBtX3BpdGNoID09IEZpeGVkUGl0Y2g7Cit9OworCitpbmxpbmUgY29uc3QgRm9udCYg
Rm9udEdseXBoczo6cHJpbWFyeUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
bikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9jYWNoZWRQcmlt
YXJ5Rm9udCkgeworICAgICAgICBhdXRvJiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNr
UmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApOworICAgICAgICBtX2NhY2hlZFByaW1hcnlGb250ID0g
cHJpbWFyeVJhbmdlcy5mb250Rm9yQ2hhcmFjdGVyKCcgJyk7CisgICAgICAgIGlmICghbV9jYWNo
ZWRQcmltYXJ5Rm9udCkKKyAgICAgICAgICAgIG1fY2FjaGVkUHJpbWFyeUZvbnQgPSAmcHJpbWFy
eVJhbmdlcy5mb250Rm9yRmlyc3RSYW5nZSgpOworICAgIH0KKyAgICByZXR1cm4gKm1fY2FjaGVk
UHJpbWFyeUZvbnQ7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCSh3b3JraW5nIGNvcHkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE4LDggKzE4LDggQEAKICAqCiAgKi8KIAotI2lmbmRlZiBGb250
R2x5cGhzX2gKLSNkZWZpbmUgRm9udEdseXBoc19oCisjaWZuZGVmIEZvbnRDYXNjYWRlRm9udHNf
aAorI2RlZmluZSBGb250Q2FzY2FkZUZvbnRzX2gKIAogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNs
dWRlICJGb250UmFuZ2VzLmgiCkBAIC00MSwxMyArNDEsMTMgQEAgY2xhc3MgRm9udERlc2NyaXB0
aW9uOwogY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIEZvbnRTZWxlY3RvcjsKIAotY2xh
c3MgRm9udEdseXBocyA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRHbHlwaHM+IHsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShGb250R2x5cGhzKTsKK2NsYXNzIEZvbnRDYXNjYWRlRm9udHMgOiBw
dWJsaWMgUmVmQ291bnRlZDxGb250Q2FzY2FkZUZvbnRzPiB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoRm9udENhc2NhZGVGb250cyk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGb250R2x5
cGhzPiBjcmVhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikgeyByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGb250R2x5cGhzKGZvbnRTZWxlY3RvcikpOyB9Ci0gICAgc3RhdGlj
IFJlZjxGb250R2x5cGhzPiBjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYgcGxhdGZvcm1EYXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEZvbnRHbHlwaHMocGxh
dGZvcm1EYXRhKSk7IH0KKyAgICBzdGF0aWMgUmVmPEZvbnRDYXNjYWRlRm9udHM+IGNyZWF0ZShQ
YXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSB7IHJldHVybiBhZG9wdFJlZigq
bmV3IEZvbnRDYXNjYWRlRm9udHMoZm9udFNlbGVjdG9yKSk7IH0KKyAgICBzdGF0aWMgUmVmPEZv
bnRDYXNjYWRlRm9udHM+IGNyZWF0ZUZvclBsYXRmb3JtRm9udChjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBwbGF0Zm9ybURhdGEpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRm9udENhc2NhZGVGb250
cyhwbGF0Zm9ybURhdGEpKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgfkZvbnRHbHlwaHMoKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB+Rm9udENhc2NhZGVGb250cygpOwogCiAgICAgYm9vbCBpc0Zv
clBsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGb3JQbGF0Zm9ybUZvbnQ7IH0KIApA
QCAtNzIsOCArNzIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcnVuZVN5c3RlbUZhbGxiYWNrcygp
OwogCiBwcml2YXRlOgotICAgIEZvbnRHbHlwaHMoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsK
LSAgICBGb250R2x5cGhzKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKyAgICBGb250Q2FzY2Fk
ZUZvbnRzKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CisgICAgRm9udENhc2NhZGVGb250cyhj
b25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yU3lz
dGVtRmFsbGJhY2soVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQp
OwogICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb3JtYWxWYXJpYW50KFVDaGFyMzIsIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYpOwpAQCAtOTgsMTQgKzk4LDE0IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2lzRm9yUGxhdGZvcm1Gb250IHsgZmFsc2UgfTsKIH07CiAKLWlubGluZSBib29sIEZvbnRH
bHlwaHM6OmlzRml4ZWRQaXRjaChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQor
aW5saW5lIGJvb2wgRm9udENhc2NhZGVGb250czo6aXNGaXhlZFBpdGNoKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAgaWYgKG1fcGl0Y2ggPT0gVW5rbm93blBpdGNo
KQogICAgICAgICBkZXRlcm1pbmVQaXRjaChkZXNjcmlwdGlvbik7CiAgICAgcmV0dXJuIG1fcGl0
Y2ggPT0gRml4ZWRQaXRjaDsKIH07CiAKLWlubGluZSBjb25zdCBGb250JiBGb250R2x5cGhzOjpw
cmltYXJ5Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoraW5saW5lIGNv
bnN0IEZvbnQmIEZvbnRDYXNjYWRlRm9udHM6OnByaW1hcnlGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBp
ZiAoIW1fY2FjaGVkUHJpbWFyeUZvbnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwCShyZXZpc2lvbiAxODAyODQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw0MDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAxMy0yMDE1
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
Rm9udEdseXBocy5oIgotCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udENh
c2NhZGUuaCIKLSNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci0KLUZvbnRHbHlwaHM6OkZvbnRHbHlwaHMoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRT
ZWxlY3RvcikKLSAgICA6IG1fY2FjaGVkUHJpbWFyeUZvbnQobnVsbHB0cikKLSAgICAsIG1fZm9u
dFNlbGVjdG9yKGZvbnRTZWxlY3RvcikKLSAgICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbihtX2Zv
bnRTZWxlY3RvciA/IG1fZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAwKQotICAgICwgbV9nZW5l
cmF0aW9uKEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZ2VuZXJhdGlvbigpKQotewotfQotCi1Gb250
R2x5cGhzOjpGb250R2x5cGhzKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkK
LSAgICA6IG1fY2FjaGVkUHJpbWFyeUZvbnQobnVsbHB0cikKLSAgICAsIG1fZm9udFNlbGVjdG9y
VmVyc2lvbigwKQotICAgICwgbV9nZW5lcmF0aW9uKEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZ2Vu
ZXJhdGlvbigpKQotICAgICwgbV9pc0ZvclBsYXRmb3JtRm9udCh0cnVlKQotewotICAgIG1fcmVh
bGl6ZWRGYWxsYmFja1Jhbmdlcy5hcHBlbmQoRm9udFJhbmdlcyhGb250Q2FjaGU6OnNpbmdsZXRv
bigpLmZvbnRGb3JQbGF0Zm9ybURhdGEocGxhdGZvcm1EYXRhKSkpOwotfQotCi1Gb250R2x5cGhz
Ojp+Rm9udEdseXBocygpCi17Ci19Ci0KLXZvaWQgRm9udEdseXBoczo6ZGV0ZXJtaW5lUGl0Y2go
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKLXsKLSAgICBhdXRvJiBwcmltYXJ5
UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApOwotICAgIHVu
c2lnbmVkIG51bVJhbmdlcyA9IHByaW1hcnlSYW5nZXMuc2l6ZSgpOwotICAgIGlmIChudW1SYW5n
ZXMgPT0gMSkKLSAgICAgICAgbV9waXRjaCA9IHByaW1hcnlSYW5nZXMucmFuZ2VBdCgwKS5mb250
KCkucGl0Y2goKTsKLSAgICBlbHNlCi0gICAgICAgIG1fcGl0Y2ggPSBWYXJpYWJsZVBpdGNoOwot
fQotCi1ib29sIEZvbnRHbHlwaHM6OmlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgY29uc3QKLXsKLSAg
ICBmb3IgKGF1dG8mIGZvbnRSYW5nZXMgOiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMpIHsKLSAg
ICAgICAgaWYgKGZvbnRSYW5nZXMuaXNMb2FkaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgRm9udFJhbmdlcyByZWFs
aXplTmV4dEZhbGxiYWNrKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2ln
bmVkJiBpbmRleCwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCi17Ci0gICAgQVNTRVJUKGlu
ZGV4IDwgZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKSk7Ci0KLSAgICBhdXRvJiBmb250Q2FjaGUg
PSBGb250Q2FjaGU6OnNpbmdsZXRvbigpOwotICAgIHdoaWxlIChpbmRleCA8IGRlc2NyaXB0aW9u
LmZhbWlseUNvdW50KCkpIHsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkgPSBk
ZXNjcmlwdGlvbi5mYW1pbHlBdChpbmRleCsrKTsKLSAgICAgICAgaWYgKGZhbWlseS5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGZvbnRTZWxlY3Rvcikgewot
ICAgICAgICAgICAgYXV0byByYW5nZXMgPSBmb250U2VsZWN0b3ItPmZvbnRSYW5nZXNGb3JGYW1p
bHkoZGVzY3JpcHRpb24sIGZhbWlseSk7Ci0gICAgICAgICAgICBpZiAoIXJhbmdlcy5pc051bGwo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2VzOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChhdXRvIGZvbnQgPSBmb250Q2FjaGUuZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgZmFtaWx5
KSkKLSAgICAgICAgICAgIHJldHVybiBGb250UmFuZ2VzKFdURjo6bW92ZShmb250KSk7Ci0gICAg
fQotICAgIC8vIFdlIGRpZG4ndCBmaW5kIGEgZm9udC4gVHJ5IHRvIGZpbmQgYSBzaW1pbGFyIGZv
bnQgdXNpbmcgb3VyIG93biBzcGVjaWZpYyBrbm93bGVkZ2UgYWJvdXQgb3VyIHBsYXRmb3JtLgot
ICAgIC8vIEZvciBleGFtcGxlIG9uIE9TIFgsIHdlIGtub3cgdG8gbWFwIGFueSBmYW1pbGllcyBj
b250YWluaW5nIHRoZSB3b3JkcyBBcmFiaWMsIFBhc2h0bywgb3IgVXJkdSB0byB0aGUKLSAgICAv
LyBHZWV6YSBQcm8gZm9udC4KLSAgICByZXR1cm4gRm9udFJhbmdlcyhmb250Q2FjaGUuc2ltaWxh
ckZvbnQoZGVzY3JpcHRpb24pKTsKLX0KLQotY29uc3QgRm9udFJhbmdlcyYgRm9udEdseXBoczo6
cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
biwgdW5zaWduZWQgaW5kZXgpCi17Ci0gICAgaWYgKGluZGV4IDwgbV9yZWFsaXplZEZhbGxiYWNr
UmFuZ2VzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlc1tp
bmRleF07Ci0KLSAgICBBU1NFUlQoaW5kZXggPT0gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLnNp
emUoKSk7Ci0gICAgQVNTRVJUKEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZ2VuZXJhdGlvbigpID09
IG1fZ2VuZXJhdGlvbik7Ci0KLSAgICBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuYXBwZW5kKEZv
bnRSYW5nZXMoKSk7Ci0gICAgYXV0byYgZm9udFJhbmdlcyA9IG1fcmVhbGl6ZWRGYWxsYmFja1Jh
bmdlcy5sYXN0KCk7Ci0KLSAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAgIGZvbnRSYW5nZXMgPSBy
ZWFsaXplTmV4dEZhbGxiYWNrKGRlc2NyaXB0aW9uLCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5k
ZXgsIG1fZm9udFNlbGVjdG9yLmdldCgpKTsKLSAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxs
KCkgJiYgbV9mb250U2VsZWN0b3IpCi0gICAgICAgICAgICBmb250UmFuZ2VzID0gbV9mb250U2Vs
ZWN0b3ItPmZvbnRSYW5nZXNGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHN0YW5kYXJkRmFtaWx5KTsK
LSAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICBmb250UmFuZ2Vz
ID0gRm9udFJhbmdlcyhGb250Q2FjaGU6OnNpbmdsZXRvbigpLmxhc3RSZXNvcnRGYWxsYmFja0Zv
bnQoZGVzY3JpcHRpb24pKTsKLSAgICAgICAgcmV0dXJuIGZvbnRSYW5nZXM7Ci0gICAgfQotCi0g
ICAgaWYgKG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCA8IGRlc2NyaXB0aW9uLmZhbWlseUNv
dW50KCkpCi0gICAgICAgIGZvbnRSYW5nZXMgPSByZWFsaXplTmV4dEZhbGxiYWNrKGRlc2NyaXB0
aW9uLCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXgsIG1fZm9udFNlbGVjdG9yLmdldCgpKTsK
LQotICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpICYmIG1fZm9udFNlbGVjdG9yKSB7Ci0gICAg
ICAgIEFTU0VSVChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPj0gZGVzY3JpcHRpb24uZmFt
aWx5Q291bnQoKSk7Ci0KLSAgICAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRl
eCA9IG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCAtIGRlc2NyaXB0aW9uLmZhbWlseUNvdW50
KCk7Ci0gICAgICAgIGlmIChmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID09IG1fZm9udFNlbGVj
dG9yLT5mYWxsYmFja0ZvbnRDb3VudCgpKQotICAgICAgICAgICAgcmV0dXJuIGZvbnRSYW5nZXM7
Ci0gICAgICAgICsrbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4OwotICAgICAgICBmb250UmFu
Z2VzID0gRm9udFJhbmdlcyhtX2ZvbnRTZWxlY3Rvci0+ZmFsbGJhY2tGb250QXQoZGVzY3JpcHRp
b24sIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZm9u
dFJhbmdlczsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzSW5SYW5nZShVQ2hhcjMyIGNoYXJh
Y3RlciwgVUNoYXIzMiBsb3dlckJvdW5kLCBVQ2hhcjMyIHVwcGVyQm91bmQpCi17Ci0gICAgcmV0
dXJuIGNoYXJhY3RlciA+PSBsb3dlckJvdW5kICYmIGNoYXJhY3RlciA8PSB1cHBlckJvdW5kOwot
fQotCi1zdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVSb3RhdGlvbihVQ2hhcjMyIGNoYXJhY3RlcikK
LXsKLSAgICBpZiAoY2hhcmFjdGVyID09IDB4MDAwQTcgfHwgY2hhcmFjdGVyID09IDB4MDAwQTkg
fHwgY2hhcmFjdGVyID09IDB4MDAwQUUpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYg
KGNoYXJhY3RlciA9PSAweDAwMEI2IHx8IGNoYXJhY3RlciA9PSAweDAwMEJDIHx8IGNoYXJhY3Rl
ciA9PSAweDAwMEJEIHx8IGNoYXJhY3RlciA9PSAweDAwMEJFKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAwMkU1LCAweDAwMkVCKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4
MDExMDAsIDB4MDExRkYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDE0MDEsIDB4MDE2N0Yp
IHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDE4MDAsIDB4MDE4RkYpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGlmIChjaGFyYWN0ZXIgPT0gMHgwMjAxNiB8fCBjaGFyYWN0ZXIgPT0g
MHgwMjAyMCB8fCBjaGFyYWN0ZXIgPT0gMHgwMjAyMSB8fCBjaGFyYWN0ZXIgPT0gMHgyMDMwIHx8
IGNoYXJhY3RlciA9PSAweDAyMDMxKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChp
c0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMDNCLCAweDAyMDNEKSB8fCBjaGFyYWN0ZXIgPT0gMHgw
MjA0MiB8fCBjaGFyYWN0ZXIgPT0gMHgwMjA0NCB8fCBjaGFyYWN0ZXIgPT0gMHgwMjA0NwotICAg
ICAgICB8fCBjaGFyYWN0ZXIgPT0gMHgwMjA0OCB8fCBjaGFyYWN0ZXIgPT0gMHgwMjA0OSB8fCBj
aGFyYWN0ZXIgPT0gMHgyMDUxKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChpc0lu
UmFuZ2UoY2hhcmFjdGVyLCAweDAyMDY1LCAweDAyMDY5KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVy
LCAweDAyMERELCAweDAyMEUwKQotICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAy
MEUyLCAweDAyMEU0KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMTAwLCAweDAyMTE3KQot
ICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMTE5LCAweDAyMTMxKSB8fCBpc0lu
UmFuZ2UoY2hhcmFjdGVyLCAweDAyMTMzLCAweDAyMTNGKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjE0NSwgMHgwMjE0QSkgfHwgY2hh
cmFjdGVyID09IDB4MDIxNEMgfHwgY2hhcmFjdGVyID09IDB4MDIxNEQKLSAgICAgICAgfHwgaXNJ
blJhbmdlKGNoYXJhY3RlciwgMHgwMjE0RiwgMHgwMjE4RikpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzMDAsIDB4MDIzMDcpIHx8IGlz
SW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzMEMsIDB4MDIzMUYpCi0gICAgICAgIHx8IGlzSW5SYW5n
ZShjaGFyYWN0ZXIsIDB4MDIzMjIsIDB4MDIzMkIpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4
MDIzN0QsIDB4MDIzOUEpCi0gICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzQjQs
IDB4MDIzQjYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzQkEsIDB4MDIzQ0YpCi0gICAg
ICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzRDEsIDB4MDIzREIpIHx8IGlzSW5SYW5n
ZShjaGFyYWN0ZXIsIDB4MDIzRTIsIDB4MDI0RkYpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyNUEwLCAweDAyNjE5KSB8fCBpc0luUmFu
Z2UoY2hhcmFjdGVyLCAweDAyNjIwLCAweDAyNzY3KQotICAgICAgICB8fCBpc0luUmFuZ2UoY2hh
cmFjdGVyLCAweDAyNzc2LCAweDAyNzkzKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyQjEy
LCAweDAyQjJGKQotICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyQjRELCAweDAy
QkZGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyRTgwLCAweDAzMDA3KSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoY2hhcmFjdGVyID09IDB4MDMwMTIgfHwgY2hhcmFjdGVy
ID09IDB4MDMwMTMgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMzAyMCwgMHgwMzAyRikKLSAg
ICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMzAzMSwgMHgwMzA5RikgfHwgaXNJblJh
bmdlKGNoYXJhY3RlciwgMHgwMzBBMSwgMHgwMzBGQikKLSAgICAgICAgfHwgaXNJblJhbmdlKGNo
YXJhY3RlciwgMHgwMzBGRCwgMHgwQTRDRikpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
aWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEE4NDAsIDB4MEE4N0YpIHx8IGlzSW5SYW5nZShj
aGFyYWN0ZXIsIDB4MEE5NjAsIDB4MEE5N0YpCi0gICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0
ZXIsIDB4MEFDMDAsIDB4MEQ3RkYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEUwMDAsIDB4
MEZBRkYpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChpc0luUmFuZ2UoY2hhcmFj
dGVyLCAweDBGRTEwLCAweDBGRTFGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRTMwLCAw
eDBGRTQ4KQotICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRTUwLCAweDBGRTU3
KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRTVGLCAweDBGRTYyKQotICAgICAgICB8fCBp
c0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRTY3LCAweDBGRTZGKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkYwMSwgMHgwRkYwNykgfHwg
aXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkYwQSwgMHgwRkYwQykKLSAgICAgICAgfHwgaXNJblJh
bmdlKGNoYXJhY3RlciwgMHgwRkYwRSwgMHgwRkYxOSkgfHwgY2hhcmFjdGVyID09IDB4MEZGMUIg
fHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkYxRiwgMHgwRkYzQSkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgaWYgKGNoYXJhY3RlciA9PSAweDBGRjNDIHx8IGNoYXJhY3RlciA9PSAw
eDBGRjNFKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChpc0luUmFuZ2UoY2hhcmFj
dGVyLCAweDBGRjQwLCAweDBGRjVBKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRkUwLCAw
eDBGRkUyKQotICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRkU0LCAweDBGRkU3
KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRkYwLCAweDBGRkY4KQotICAgICAgICB8fCBj
aGFyYWN0ZXIgPT0gMHgwRkZGRCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoaXNJ
blJhbmdlKGNoYXJhY3RlciwgMHgxMzAwMCwgMHgxMzQyRikgfHwgaXNJblJhbmdlKGNoYXJhY3Rl
ciwgMHgxQjAwMCwgMHgxQjBGRikKLSAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgx
RDAwMCwgMHgxRDFGRikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgxRDMwMCwgMHgxRDM3RikK
LSAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgxRjAwMCwgMHgxRjY0RikgfHwgaXNJ
blJhbmdlKGNoYXJhY3RlciwgMHgxRjY4MCwgMHgxRjc3RikpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIAotICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDIwMDAwLCAweDJGRkZEKSB8
fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDMwMDAwLCAweDNGRkZEKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLXN0
YXRpYyBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ0pLQ2hhcmFjdGVyV2l0aG91dFN5bnRoZXRpY0l0
YWxpYyhVQ2hhcjMyIGNoYXJhY3RlciwgR2x5cGhEYXRhJiBkYXRhKQotewotICAgIEdseXBoRGF0
YSBub25JdGFsaWNEYXRhID0gZGF0YS5mb250LT5ub25TeW50aGV0aWNJdGFsaWNGb250KCktPmds
eXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwotICAgIGlmIChub25JdGFsaWNEYXRhLmZv
bnQpCi0gICAgICAgIHJldHVybiBub25JdGFsaWNEYXRhOwotICAgIHJldHVybiBkYXRhOwotfQot
I2VuZGlmCi0gICAgCi1zdGF0aWMgR2x5cGhEYXRhIGdseXBoRGF0YUZvck5vbkNKS0NoYXJhY3Rl
cldpdGhHbHlwaE9yaWVudGF0aW9uKFVDaGFyMzIgY2hhcmFjdGVyLCBOb25DSktHbHlwaE9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uLCBjb25zdCBHbHlwaERhdGEmIGRhdGEpCi17Ci0gICAgaWYgKG9y
aWVudGF0aW9uID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25VcHJpZ2h0IHx8IHNob3VsZElnbm9y
ZVJvdGF0aW9uKGNoYXJhY3RlcikpIHsKLSAgICAgICAgR2x5cGhEYXRhIHVwcmlnaHREYXRhID0g
ZGF0YS5mb250LT51cHJpZ2h0T3JpZW50YXRpb25Gb250KCktPmdseXBoRGF0YUZvckNoYXJhY3Rl
cihjaGFyYWN0ZXIpOwotICAgICAgICAvLyBJZiB0aGUgZ2x5cGhzIGFyZSB0aGUgc2FtZSwgdGhl
biB3ZSBrbm93IHdlIGNhbiBqdXN0IHVzZSB0aGUgaG9yaXpvbnRhbCBnbHlwaCByb3RhdGVkIHZl
cnRpY2FsbHkgdG8gYmUgdXByaWdodC4KLSAgICAgICAgaWYgKGRhdGEuZ2x5cGggPT0gdXByaWdo
dERhdGEuZ2x5cGgpCi0gICAgICAgICAgICByZXR1cm4gZGF0YTsKLSAgICAgICAgLy8gVGhlIGds
eXBocyBhcmUgZGlzdGluY3QsIG1lYW5pbmcgdGhhdCB0aGUgZm9udCBoYXMgYSB2ZXJ0aWNhbC1y
aWdodCBnbHlwaCBiYWtlZCBpbnRvIGl0LiBXZSBjYW4ndCB1c2UgdGhhdAotICAgICAgICAvLyBn
bHlwaCwgc28gd2UgZmFsbCBiYWNrIHRvIHRoZSB1cHJpZ2h0IGRhdGEgYW5kIHVzZSB0aGUgaG9y
aXpvbnRhbCBnbHlwaC4KLSAgICAgICAgaWYgKHVwcmlnaHREYXRhLmZvbnQpCi0gICAgICAgICAg
ICByZXR1cm4gdXByaWdodERhdGE7Ci0gICAgfSBlbHNlIGlmIChvcmllbnRhdGlvbiA9PSBOb25D
SktHbHlwaE9yaWVudGF0aW9uVmVydGljYWxSaWdodCkgewotICAgICAgICBHbHlwaERhdGEgdmVy
dGljYWxSaWdodERhdGEgPSBkYXRhLmZvbnQtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQo
KS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Ci0gICAgICAgIC8vIElmIHRoZSBn
bHlwaHMgYXJlIGRpc3RpbmN0LCB3ZSB3aWxsIG1ha2UgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUg
Zm9udCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZAotICAgICAgICAvLyBpbnRvIGl0
LgotICAgICAgICBpZiAoZGF0YS5nbHlwaCAhPSB2ZXJ0aWNhbFJpZ2h0RGF0YS5nbHlwaCkKLSAg
ICAgICAgICAgIHJldHVybiBkYXRhOwotICAgICAgICAvLyBUaGUgZ2x5cGhzIGFyZSBpZGVudGlj
YWwsIG1lYW5pbmcgdGhhdCB3ZSBzaG91bGQganVzdCB1c2UgdGhlIGhvcml6b250YWwgZ2x5cGgu
Ci0gICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0RGF0YS5mb250KQotICAgICAgICAgICAgcmV0dXJu
IHZlcnRpY2FsUmlnaHREYXRhOwotICAgIH0KLSAgICByZXR1cm4gZGF0YTsKLX0KLQotR2x5cGhE
YXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIgYywgY29u
c3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkKLXsK
LSAgICAvLyBTeXN0ZW0gZmFsbGJhY2sgaXMgY2hhcmFjdGVyLWRlcGVuZGVudC4KLSAgICBhdXRv
JiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDAp
OwotICAgIGF1dG8qIG9yaWdpbmFsRm9udCA9IHByaW1hcnlSYW5nZXMuZm9udEZvckNoYXJhY3Rl
cihjKTsKLSAgICBpZiAoIW9yaWdpbmFsRm9udCkKLSAgICAgICAgb3JpZ2luYWxGb250ID0gJnBy
aW1hcnlSYW5nZXMuZm9udEZvckZpcnN0UmFuZ2UoKTsKLQotICAgIFJlZlB0cjxGb250PiBzeXN0
ZW1GYWxsYmFja0ZvbnQgPSBvcmlnaW5hbEZvbnQtPnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJh
Y3RlcihjLCBkZXNjcmlwdGlvbiwgbV9pc0ZvclBsYXRmb3JtRm9udCk7Ci0gICAgaWYgKCFzeXN0
ZW1GYWxsYmFja0ZvbnQpCi0gICAgICAgIHJldHVybiBHbHlwaERhdGEoKTsKLQotICAgIGlmIChz
eXN0ZW1GYWxsYmFja0ZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGlj
YWwgJiYgIXN5c3RlbUZhbGxiYWNrRm9udC0+aGFzVmVydGljYWxHbHlwaHMoKSAmJiBGb250Q2Fz
Y2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjKSkKLSAgICAgICAgdmFyaWFudCA9IEJyb2tl
bklkZW9ncmFwaFZhcmlhbnQ7Ci0KLSAgICBHbHlwaERhdGEgZmFsbGJhY2tHbHlwaERhdGE7Ci0g
ICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCkKLSAgICAgICAgZmFsbGJhY2tHbHlwaERh
dGEgPSBzeXN0ZW1GYWxsYmFja0ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKLSAgICBl
bHNlCi0gICAgICAgIGZhbGxiYWNrR2x5cGhEYXRhID0gc3lzdGVtRmFsbGJhY2tGb250LT52YXJp
YW50Rm9udChkZXNjcmlwdGlvbiwgdmFyaWFudCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsK
LQotICAgIGlmICh2YXJpYW50ID09IE5vcm1hbFZhcmlhbnQgJiYgZmFsbGJhY2tHbHlwaERhdGEu
Zm9udCkgewotICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9s
KGMpICYmIGZhbGxiYWNrR2x5cGhEYXRhLmZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9u
KCkgPT0gVmVydGljYWwgJiYgIWZhbGxiYWNrR2x5cGhEYXRhLmZvbnQtPmlzVGV4dE9yaWVudGF0
aW9uRmFsbGJhY2soKSkKLSAgICAgICAgICAgIGZhbGxiYWNrR2x5cGhEYXRhID0gZ2x5cGhEYXRh
Rm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oYywgZGVzY3JpcHRpb24ubm9u
Q0pLR2x5cGhPcmllbnRhdGlvbigpLCBmYWxsYmFja0dseXBoRGF0YSk7Ci0gICAgfQotCi0gICAg
Ly8gS2VlcCB0aGUgc3lzdGVtIGZhbGxiYWNrIGZvbnRzIHdlIHVzZSBhbGl2ZS4KLSAgICBpZiAo
ZmFsbGJhY2tHbHlwaERhdGEuZ2x5cGgpCi0gICAgICAgIG1fc3lzdGVtRmFsbGJhY2tGb250U2V0
LmFkZChzeXN0ZW1GYWxsYmFja0ZvbnQucmVsZWFzZSgpKTsKLQotICAgIHJldHVybiBmYWxsYmFj
a0dseXBoRGF0YTsKLX0KLQotR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvclZhcmlh
bnQoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFy
aWFudCB2YXJpYW50LCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KQotewotICAgIHdoaWxlICh0cnVl
KSB7Ci0gICAgICAgIGF1dG8mIGZvbnRSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChk
ZXNjcmlwdGlvbiwgZmFsbGJhY2tJbmRleCsrKTsKLSAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNO
dWxsKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgYXV0byogZm9udCA9IGZvbnRSYW5n
ZXMuZm9udEZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBmb250ID8g
Zm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDogR2x5cGhEYXRhKCk7Ci0gICAgICAgIGlm
IChkYXRhLmZvbnQpIHsKLSAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9udCBmdW5jdGlvbiBz
aG91bGQgbm90IG5vcm1hbGx5IHJldHVybiAwLgotICAgICAgICAgICAgLy8gQnV0IGlmIGl0IGRv
ZXMsIHdlIHdpbGwganVzdCByZW5kZXIgdGhlIGNhcGl0YWwgbGV0dGVyIGJpZy4KLSAgICAgICAg
ICAgIFJlZlB0cjxGb250PiB2YXJpYW50Rm9udCA9IGRhdGEuZm9udC0+dmFyaWFudEZvbnQoZGVz
Y3JpcHRpb24sIHZhcmlhbnQpOwotICAgICAgICAgICAgaWYgKCF2YXJpYW50Rm9udCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZGF0YTsKLQotICAgICAgICAgICAgcmV0dXJuIHZhcmlhbnRGb250
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gZ2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soYywgZGVzY3JpcHRpb24sIHZhcmlhbnQpOwot
fQotCi1HbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChVQ2hh
cjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCi17Ci0gICAgY29uc3Qg
dW5zaWduZWQgcGFnZU51bWJlciA9IGMgLyBHbHlwaFBhZ2U6OnNpemU7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGZhbGxiYWNrSW5kZXggPSAwOyB0cnVlOyArK2ZhbGxiYWNrSW5kZXgpIHsKLSAgICAg
ICAgYXV0byYgZm9udFJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9u
LCBmYWxsYmFja0luZGV4KTsKLSAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgYXV0byogZm9udCA9IGZvbnRSYW5nZXMuZm9udEZvckNo
YXJhY3RlcihjKTsKLSAgICAgICAgYXV0byogcGFnZSA9IGZvbnQgPyBmb250LT5nbHlwaFBhZ2Uo
cGFnZU51bWJlcikgOiBudWxscHRyOwotICAgICAgICBpZiAoIXBhZ2UpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBwYWdlLT5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIoYyk7Ci0gICAgICAgIGlmIChkYXRhLmZvbnQpIHsKLSAgICAgICAgICAgIGlmIChkYXRh
LmZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWRhdGEu
Zm9udC0+aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdseXBoRGF0YUZvck5vbkNKS0NoYXJhY3RlcldpdGhHbHlwaE9yaWVudGF0
aW9uKGMsIGRlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSwgZGF0YSk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoIWRhdGEuZm9udC0+aGFzVmVydGljYWxHbHlwaHMoKSkgewotICAg
ICAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIGJyb2tlbiBpZGVvZ3JhcGggZm9udCBkYXRhLiBU
aGUgYnJva2VuIGlkZW9ncmFwaCBmb250IHdpbGwgdXNlIHRoZSBob3Jpem9udGFsIHdpZHRoIG9m
IGdseXBocwotICAgICAgICAgICAgICAgICAgICAvLyB0byBtYWtlIHN1cmUgeW91IGdldCBhIHNx
dWFyZSAoZXZlbiBmb3IgYnJva2VuIGdseXBocyBsaWtlIHN5bWJvbHMgdXNlZCBmb3IgcHVuY3R1
YXRpb24pLgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yVmFyaWFudChj
LCBkZXNjcmlwdGlvbiwgQnJva2VuSWRlb2dyYXBoVmFyaWFudCwgZmFsbGJhY2tJbmRleCk7Ci0g
ICAgICAgICAgICAgICAgfQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICAgICAgICAgIGlm
IChkYXRhLmZvbnQtPnBsYXRmb3JtRGF0YSgpLnN5bnRoZXRpY09ibGlxdWUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdseXBoRGF0YUZvckNKS0NoYXJhY3RlcldpdGhvdXRTeW50aGV0
aWNJdGFsaWMoYywgZGF0YSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
cmV0dXJuIGRhdGE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZ2x5cGhEYXRhRm9y
U3lzdGVtRmFsbGJhY2soYywgZGVzY3JpcHRpb24sIE5vcm1hbFZhcmlhbnQpOwotfQotCi1zdGF0
aWMgUmVmUHRyPEdseXBoUGFnZT4gZ2x5cGhQYWdlRnJvbUZvbnRSYW5nZXModW5zaWduZWQgcGFn
ZU51bWJlciwgY29uc3QgRm9udFJhbmdlcyYgZm9udFJhbmdlcykKLXsKLSAgICBjb25zdCBGb250
KiBmb250ID0gbnVsbHB0cjsKLSAgICBVQ2hhcjMyIHBhZ2VSYW5nZUZyb20gPSBwYWdlTnVtYmVy
ICogR2x5cGhQYWdlOjpzaXplOwotICAgIFVDaGFyMzIgcGFnZVJhbmdlVG8gPSBwYWdlUmFuZ2VG
cm9tICsgR2x5cGhQYWdlOjpzaXplIC0gMTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Zm9udFJhbmdlcy5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRvJiByYW5nZSA9IGZvbnRSYW5n
ZXMucmFuZ2VBdChpKTsKLSAgICAgICAgaWYgKHJhbmdlLnRvKCkpIHsKLSAgICAgICAgICAgIGlm
IChyYW5nZS5mcm9tKCkgPD0gcGFnZVJhbmdlRnJvbSAmJiBwYWdlUmFuZ2VUbyA8PSByYW5nZS50
bygpKQotICAgICAgICAgICAgICAgIGZvbnQgPSAmcmFuZ2UuZm9udCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFmb250KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09
IFZlcnRpY2FsKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBjb25zdF9j
YXN0PEdseXBoUGFnZSo+KGZvbnQtPmdseXBoUGFnZShwYWdlTnVtYmVyKSk7Ci19Ci0KLUdseXBo
RGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KQotewotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKHZhcmlhbnQgIT0gQXV0b1Zhcmlh
bnQpOwotCi0gICAgaWYgKHZhcmlhbnQgIT0gTm9ybWFsVmFyaWFudCkKLSAgICAgICAgcmV0dXJu
IGdseXBoRGF0YUZvclZhcmlhbnQoYywgZGVzY3JpcHRpb24sIHZhcmlhbnQsIDApOwotCi0gICAg
Y29uc3QgdW5zaWduZWQgcGFnZU51bWJlciA9IGMgLyBHbHlwaFBhZ2U6OnNpemU7Ci0KLSAgICBS
ZWZQdHI8R2x5cGhQYWdlPiYgY2FjaGVkUGFnZSA9IHBhZ2VOdW1iZXIgPyBtX2NhY2hlZFBhZ2Vz
LmFkZChwYWdlTnVtYmVyLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWUgOiBtX2NhY2hlZFBhZ2Va
ZXJvOwotICAgIGlmICghY2FjaGVkUGFnZSkKLSAgICAgICAgY2FjaGVkUGFnZSA9IGdseXBoUGFn
ZUZyb21Gb250UmFuZ2VzKHBhZ2VOdW1iZXIsIHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2Ny
aXB0aW9uLCAwKSk7Ci0KLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRhID0gY2FjaGVkUGFnZSA/IGNh
Y2hlZFBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKSA6IEdseXBoRGF0YSgpOwotICAgIGlm
ICghZ2x5cGhEYXRhLmdseXBoKSB7Ci0gICAgICAgIGlmICghY2FjaGVkUGFnZSkKLSAgICAgICAg
ICAgIGNhY2hlZFBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUZvck1peGVkRm9udHMoKTsKLSAgICAg
ICAgZWxzZSBpZiAoY2FjaGVkUGFnZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgIGNhY2hl
ZFBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUNvcHlGb3JNaXhlZEZvbnRzKCpjYWNoZWRQYWdlKTsK
LQotICAgICAgICBnbHlwaERhdGEgPSBnbHlwaERhdGFGb3JOb3JtYWxWYXJpYW50KGMsIGRlc2Ny
aXB0aW9uKTsKLSAgICAgICAgY2FjaGVkUGFnZS0+c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMs
IGdseXBoRGF0YS5nbHlwaCwgZ2x5cGhEYXRhLmZvbnQpOwotICAgIH0KLSAgICByZXR1cm4gZ2x5
cGhEYXRhOwotfQotCi12b2lkIEZvbnRHbHlwaHM6OnBydW5lU3lzdGVtRmFsbGJhY2tzKCkKLXsK
LSAgICBpZiAobV9zeXN0ZW1GYWxsYmFja0ZvbnRTZXQuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0gICAgLy8gTXV0YWJsZSBnbHlwaCBwYWdlcyBtYXkgcmVmZXJlbmNlIGZhbGxiYWNrIGZv
bnRzLgotICAgIGlmIChtX2NhY2hlZFBhZ2VaZXJvICYmICFtX2NhY2hlZFBhZ2VaZXJvLT5pc0lt
bXV0YWJsZSgpKQotICAgICAgICBtX2NhY2hlZFBhZ2VaZXJvID0gbnVsbHB0cjsKLSAgICBtX2Nh
Y2hlZFBhZ2VzLnJlbW92ZUlmKFtdKGRlY2x0eXBlKG1fY2FjaGVkUGFnZXMpOjpLZXlWYWx1ZVBh
aXJUeXBlJiBrZXlBbmRWYWx1ZSkgewotICAgICAgICByZXR1cm4gIWtleUFuZFZhbHVlLnZhbHVl
LT5pc0ltbXV0YWJsZSgpOwotICAgIH0pOwotICAgIG1fc3lzdGVtRmFsbGJhY2tGb250U2V0LmNs
ZWFyKCk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRHbHlwaHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250R2x5cGhzLmgJKHJldmlzaW9uIDE4MDI4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAxMCwgMjAxMy0yMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgRm9udEdseXBoc19oCi0jZGVmaW5lIEZv
bnRHbHlwaHNfaAotCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRSYW5nZXMuaCIK
LSNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKLSNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKLSNpbmNs
dWRlICJXaWR0aENhY2hlLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgotCi0jaWYgUExBVEZPUk0oSU9TKQotI2luY2x1ZGUgIldlYkNvcmVU
aHJlYWQuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBGb250RGVzY3JpcHRpb247Ci1jbGFzcyBG
b250UGxhdGZvcm1EYXRhOwotY2xhc3MgRm9udFNlbGVjdG9yOwotCi1jbGFzcyBGb250R2x5cGhz
IDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udEdseXBocz4gewotICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEZvbnRHbHlwaHMpOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Rm9udEdseXBocz4gY3Jl
YXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpIHsgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRm9udEdseXBocyhmb250U2VsZWN0b3IpKTsgfQotICAgIHN0YXRpYyBSZWY8Rm9u
dEdseXBocz4gY3JlYXRlRm9yUGxhdGZvcm1Gb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBs
YXRmb3JtRGF0YSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBGb250R2x5cGhzKHBsYXRmb3JtRGF0
YSkpOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB+Rm9udEdseXBocygpOwotCi0gICAgYm9vbCBp
c0ZvclBsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGb3JQbGF0Zm9ybUZvbnQ7IH0K
LQotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQpOwotCi0gICAgYm9vbCBpc0ZpeGVkUGl0Y2goY29u
c3QgRm9udERlc2NyaXB0aW9uJik7Ci0gICAgdm9pZCBkZXRlcm1pbmVQaXRjaChjb25zdCBGb250
RGVzY3JpcHRpb24mKTsKLQotICAgIGJvb2wgaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdDsK
LQotICAgIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgeyByZXR1cm4gbV9mb250U2VsZWN0
b3IuZ2V0KCk7IH0KLSAgICAvLyBGSVhNRTogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGNvbWJp
bmUgZm9udFNlbGVjdG9yVmVyc2lvbiBhbmQgZ2VuZXJhdGlvbi4KLSAgICB1bnNpZ25lZCBmb250
U2VsZWN0b3JWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9mb250U2VsZWN0b3JWZXJzaW9uOyB9
Ci0gICAgdW5zaWduZWQgZ2VuZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZ2VuZXJhdGlvbjsg
fQotCi0gICAgV2lkdGhDYWNoZSYgd2lkdGhDYWNoZSgpIHsgcmV0dXJuIG1fd2lkdGhDYWNoZTsg
fQotICAgIGNvbnN0IFdpZHRoQ2FjaGUmIHdpZHRoQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3dp
ZHRoQ2FjaGU7IH0KLQotICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYpOwotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnRSYW5nZXMmIHJlYWxpemVG
YWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIHVuc2lnbmVkIGZhbGxiYWNr
SW5kZXgpOwotCi0gICAgdm9pZCBwcnVuZVN5c3RlbUZhbGxiYWNrcygpOwotCi1wcml2YXRlOgot
ICAgIEZvbnRHbHlwaHMoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKLSAgICBGb250R2x5cGhz
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLQotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JT
eXN0ZW1GYWxsYmFjayhVQ2hhcjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBGb250VmFyaWFu
dCk7Ci0gICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoVUNoYXIzMiwgY29u
c3QgRm9udERlc2NyaXB0aW9uJik7Ci0gICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclZhcmlhbnQo
VUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIHVuc2lnbmVkIGZh
bGxiYWNrSW5kZXgpOwotCi0gICAgVmVjdG9yPEZvbnRSYW5nZXMsIDE+IG1fcmVhbGl6ZWRGYWxs
YmFja1JhbmdlczsKLSAgICB1bnNpZ25lZCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggeyAw
IH07Ci0KLSAgICBSZWZQdHI8R2x5cGhQYWdlPiBtX2NhY2hlZFBhZ2VaZXJvOwotICAgIEhhc2hN
YXA8aW50LCBSZWZQdHI8R2x5cGhQYWdlPj4gbV9jYWNoZWRQYWdlczsKLQotICAgIEhhc2hTZXQ8
UmVmUHRyPEZvbnQ+PiBtX3N5c3RlbUZhbGxiYWNrRm9udFNldDsKLQotICAgIGNvbnN0IEZvbnQq
IG1fY2FjaGVkUHJpbWFyeUZvbnQ7Ci0gICAgUmVmUHRyPEZvbnRTZWxlY3Rvcj4gbV9mb250U2Vs
ZWN0b3I7Ci0KLSAgICBXaWR0aENhY2hlIG1fd2lkdGhDYWNoZTsKLQotICAgIHVuc2lnbmVkIG1f
Zm9udFNlbGVjdG9yVmVyc2lvbjsKLSAgICB1bnNpZ25lZCBzaG9ydCBtX2dlbmVyYXRpb247Ci0g
ICAgUGl0Y2ggbV9waXRjaCB7IFVua25vd25QaXRjaCB9OwotICAgIGJvb2wgbV9pc0ZvclBsYXRm
b3JtRm9udCB7IGZhbHNlIH07Ci19OwotCi1pbmxpbmUgYm9vbCBGb250R2x5cGhzOjppc0ZpeGVk
UGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKLXsKLSAgICBpZiAobV9w
aXRjaCA9PSBVbmtub3duUGl0Y2gpCi0gICAgICAgIGRldGVybWluZVBpdGNoKGRlc2NyaXB0aW9u
KTsKLSAgICByZXR1cm4gbV9waXRjaCA9PSBGaXhlZFBpdGNoOwotfTsKLQotaW5saW5lIGNvbnN0
IEZvbnQmIEZvbnRHbHlwaHM6OnByaW1hcnlGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24pCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fY2Fj
aGVkUHJpbWFyeUZvbnQpIHsKLSAgICAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVG
YWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKLSAgICAgICAgbV9jYWNoZWRQcmltYXJ5
Rm9udCA9IHByaW1hcnlSYW5nZXMuZm9udEZvckNoYXJhY3RlcignICcpOwotICAgICAgICBpZiAo
IW1fY2FjaGVkUHJpbWFyeUZvbnQpCi0gICAgICAgICAgICBtX2NhY2hlZFByaW1hcnlGb250ID0g
JnByaW1hcnlSYW5nZXMuZm9udEZvckZpcnN0UmFuZ2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuICpt
X2NhY2hlZFByaW1hcnlGb250OwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAkocmV2aXNpb24gMTgw
Mjg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiRm9udENhc2NhZGUu
aCIKIAogI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250R2x5cGhzLmgiCiAjaW5jbHVk
ZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>