<?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>27509</bug_id>
          
          <creation_ts>2009-07-21 12:05:46 -0700</creation_ts>
          <short_desc>Add WinCE specific font files to WebCore</short_desc>
          <delta_ts>2009-07-21 15:42:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>23154</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Yong Li">yong.li.webkit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>manyoso</cc>
    
    <cc>staikos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>133545</commentid>
    <comment_count>0</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-21 12:05:46 -0700</bug_when>
    <thetext>patch is being unloaded soon</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133549</commentid>
    <comment_count>1</comment_count>
      <attachid>33198</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-21 12:18:33 -0700</bug_when>
    <thetext>Created attachment 33198
font related files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133563</commentid>
    <comment_count>2</comment_count>
      <attachid>33198</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-07-21 12:56:35 -0700</bug_when>
    <thetext>Comment on attachment 33198
font related files

The file that has (C) Torch Mobile but an Apple BSD License should actually be LGPL license, unless it happens to have some code copied from another file which was Apple BSD licensed in which case it should also have Apple (C) listed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133589</commentid>
    <comment_count>3</comment_count>
      <attachid>33210</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-21 13:58:06 -0700</bug_when>
    <thetext>Created attachment 33210
coding style fixes by using cpplint and license text</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133627</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-07-21 15:42:56 -0700</bug_when>
    <thetext>Landed with r46196.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33198</attachid>
            <date>2009-07-21 12:18:33 -0700</date>
            <delta_ts>2009-07-21 13:58:33 -0700</delta_ts>
            <desc>font related files</desc>
            <filename>27509.patch</filename>
            <type>text/plain</type>
            <size>62669</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzE3OTg2YS4uZDg1NzU0ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAwOS0wNy0yMSAgWW9uZyBMaSAgPHlv
bmcubGlAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
NzUwOQorICAgICAgICBBZGQgZm9udC1yZWxhdGVkIGZpbGVzICBmb3IgdGhlIFdpbkNFIHBvcnQu
CisKKyAgICAgICAgV3JpdHRlbiBieSBZb25nIExpIDx5b25nLmxpQHRvcmNobW9iaWxlLmNvbT4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbmNlLmNwcDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbmNlLmNwcDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvR2x5cGhQYWdlVHJlZU5vZGVXaW5jZS5jcHA6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NpbXBsZUZvbnREYXRhV2luY2UuY3Bw
OiBBZGRlZC4KKyAKIDIwMDktMDctMjEgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJvbGwgb3V0IHI0NjE1MywgcjQ2MTU0LCBhbmQgcjQ2MTU1CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbmNlLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udENhY2hlV2luY2UuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YjNlNDYKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbmNlLmNwcApAQCAtMCww
ICsxLDM1MiBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNo
IE1vYmlsZSwgSW5jLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6Cisq
CisqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4gCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorCisjaW5jbHVkZSAiRm9udC5oIgor
I2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNs
dWRlICJVbmljb2RlUmFuZ2UuaCIKKyNpbmNsdWRlICJ3dGYvT3duUHRyLmgiCisKKyNpbmNsdWRl
IDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8bWxhbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUKK3sK
K2V4dGVybiBIREMgZ19zY3JlZW5EQzsKKworc3RhdGljIElNdWx0aUxhbmd1YWdlICptdWx0aUxh
bmd1YWdlID0gMDsKKworI2lmIGRlZmluZWQoSU1MQU5HX0ZPTlRfTElOSykgJiYgKElNTEFOR19G
T05UX0xJTksgPT0gMikKK3N0YXRpYyBJTUxhbmdGb250TGluazIqIGxhbmdGb250TGluayA9IDA7
CisjZWxzZQorc3RhdGljIElNTGFuZ0ZvbnRMaW5rKiBsYW5nRm9udExpbmsgPSAwOworI2VuZGlm
CisKK0lNdWx0aUxhbmd1YWdlKiBnZXRNdWx0aUxhbmd1YWdlSW50ZXJmYWNlKCkKK3sKKyAgICBp
ZiAoIW11bHRpTGFuZ3VhZ2UpCisgICAgICAgIENvQ3JlYXRlSW5zdGFuY2UoQ0xTSURfQ011bHRp
TGFuZ3VhZ2UsIDAsIENMU0NUWF9JTlBST0NfU0VSVkVSLCBJSURfSU11bHRpTGFuZ3VhZ2UsICh2
b2lkKiopJm11bHRpTGFuZ3VhZ2UpOworCisgICAgcmV0dXJuIG11bHRpTGFuZ3VhZ2U7Cit9CisK
KyNpZiBkZWZpbmVkKElNTEFOR19GT05UX0xJTkspICYmIChJTUxBTkdfRk9OVF9MSU5LID09IDIp
CitJTUxhbmdGb250TGluazIqIEZvbnRDYWNoZTo6Z2V0Rm9udExpbmtJbnRlcmZhY2UoKQorI2Vs
c2UKK0lNTGFuZ0ZvbnRMaW5rKiBGb250Q2FjaGU6OmdldEZvbnRMaW5rSW50ZXJmYWNlKCkKKyNl
bmRpZgoreworICAgIGlmICghbGFuZ0ZvbnRMaW5rKSB7CisgICAgICAgIGlmIChJTXVsdGlMYW5n
dWFnZSogbWxpID0gZ2V0TXVsdGlMYW5ndWFnZUludGVyZmFjZSgpKQorICAgICAgICAgICAgbWxp
LT5RdWVyeUludGVyZmFjZSgmbGFuZ0ZvbnRMaW5rKTsKKyAgICB9CisKKyAgICByZXR1cm4gbGFu
Z0ZvbnRMaW5rOworfQorCisjaWYgZGVmaW5lZChJTUxBTkdfRk9OVF9MSU5LKSAmJiAoSU1MQU5H
X0ZPTlRfTElOSyA9PSAyKQorc3RhdGljIGJvb2wgY3VycmVudEZvbnRDb250YWluc0NoYXJhY3Rl
cihJTUxhbmdGb250TGluazIqIGxhbmdGb250TGluaywgSERDIGhkYywgVUNoYXIgY2hhcmFjdGVy
KQoreworICAgIFVJTlQgdW5pY29kZVJhbmdlczsKKyAgICBpZiAoU19PSyAhPSBsYW5nRm9udExp
bmstPkdldEZvbnRVbmljb2RlUmFuZ2VzKGhkYywgJnVuaWNvZGVSYW5nZXMsIDApKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0aWMgVmVjdG9yPFVOSUNPREVSQU5HRSwgNjQ+IGds
eXBoc2V0QnVmZmVyOworICAgIGdseXBoc2V0QnVmZmVyLnJlc2l6ZSh1bmljb2RlUmFuZ2VzKTsK
KworICAgIGlmIChTX09LICE9IGxhbmdGb250TGluay0+R2V0Rm9udFVuaWNvZGVSYW5nZXMoaGRj
LCAmdW5pY29kZVJhbmdlcywgZ2x5cGhzZXRCdWZmZXIuZGF0YSgpKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8gRklYTUU6IENoYW5nZSB0aGlzIHRvIGEgYmluYXJ5IHNlYXJjaC4g
KFlvbmcgTGk6IFRoYXQncyBlYXN5LiBCdXQsIGlzIGl0IGd1YXJhbnRlZWQgdGhhdCB0aGUgcmFu
Z2VzIGFyZSBzb3J0ZWQ/KQorICAgIGZvciAoVmVjdG9yPFVOSUNPREVSQU5HRSwgNjQ+Ojpjb25z
dF9pdGVyYXRvciBpID0gZ2x5cGhzZXRCdWZmZXIuYmVnaW4oKTsgaSAhPSBnbHlwaHNldEJ1ZmZl
ci5lbmQoKTsgKytpKSB7CisgICAgICAgIGlmIChpLT53Y1RvID49IGNoYXJhY3RlcikKKyAgICAg
ICAgICAgIHJldHVybiBpLT53Y0Zyb20gPD0gY2hhcmFjdGVyOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKyNlbHNlCitzdGF0aWMgYm9vbCBjdXJyZW50Rm9udENvbnRhaW5zQ2hhcmFj
dGVyKElNTGFuZ0ZvbnRMaW5rKiBsYW5nRm9udExpbmssIEhEQyBoZGMsIEhGT05UIGhmb250LCBV
Q2hhciBjaGFyYWN0ZXIsIGNvbnN0IHdjaGFyX3QqIGZhY2VOYW1lKQoreworICAgIERXT1JEIGZv
bnRDb2RlUGFnZXMgPSAwLCBjaGFyQ29kZVBhZ2VzID0gMDsNCisgICAgSFJFU1VMVCByZXN1bHQg
PSBsYW5nRm9udExpbmstPkdldEZvbnRDb2RlUGFnZXMoaGRjLCBoZm9udCwgJmZvbnRDb2RlUGFn
ZXMpOw0KKyAgICBpZiAocmVzdWx0ICE9IFNfT0spDQorICAgICAgICByZXR1cm4gZmFsc2U7DQor
ICAgIHJlc3VsdCA9IGxhbmdGb250TGluay0+R2V0Q2hhckNvZGVQYWdlcyhjaGFyYWN0ZXIsICZj
aGFyQ29kZVBhZ2VzKTsNCisgICAgaWYgKHJlc3VsdCAhPSBTX09LKQ0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOw0KKw0KKyAgICBmb250Q29kZVBhZ2VzIHw9IEZvbnRQbGF0Zm9ybURhdGE6OmdldEtu
b3duRm9udENvZGVQYWdlcyhmYWNlTmFtZSk7CisgICAgaWYgKGZvbnRDb2RlUGFnZXMgJiBjaGFy
Q29kZVBhZ2VzKQ0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorCisgICAgcmV0dXJuIGZhbHNlOwor
fQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKElNTEFOR19GT05UX0xJTkspICYmIChJTUxBTkdfRk9O
VF9MSU5LID09IDIpCitzdGF0aWMgSEZPTlQgY3JlYXRlTUxhbmdGb250KElNTGFuZ0ZvbnRMaW5r
MiogbGFuZ0ZvbnRMaW5rLCBIREMgaGRjLCBEV09SRCBjb2RlUGFnZU1hc2ssIFVDaGFyIGNoYXJh
Y3RlciA9IDApCit7CisgICAgSEZPTlQgbWxhbmdGb250OworICAgIGlmIChTVUNDRUVERUQobGFu
Z0ZvbnRMaW5rLT5NYXBGb250KGhkYywgY29kZVBhZ2VNYXNrLCBjaGFyYWN0ZXIsICZtbGFuZ0Zv
bnQpKSkKKyAgICAgICAgcmV0dXJuIG1sYW5nRm9udDsKKworICAgIHJldHVybiAwOworfQorI2Vs
c2UKK3N0YXRpYyBIRk9OVCBjcmVhdGVNTGFuZ0ZvbnQoSU1MYW5nRm9udExpbmsqIGxhbmdGb250
TGluaywgSERDIGhkYywgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcmVmRm9udCwgRFdPUkQgY29k
ZVBhZ2VNYXNrKQoreworICAgIEhGT05UIG1sYW5nRm9udDsKKyAgICBMUkVTVUxUIHJlc3VsdCA9
IGxhbmdGb250TGluay0+TWFwRm9udChoZGMsIGNvZGVQYWdlTWFzaywgcmVmRm9udC5oZm9udCgp
LCAmbWxhbmdGb250KTsKKworICAgIHJldHVybiByZXN1bHQgPT0gU19PSyA/IG1sYW5nRm9udCA6
IDA7Cit9CisjZW5kaWYKKworc3RhdGljIGNvbnN0IFZlY3RvcjxEV09SRCwgND4mIGdldENKS0Nv
ZGVQYWdlTWFza3MoKQoreworICAgIC8vIFRoZSBkZWZhdWx0IG9yZGVyIGluIHdoaWNoIHdlIGxv
b2sgZm9yIGEgZm9udCBmb3IgYSBDSksgY2hhcmFjdGVyLiBJZiB0aGUgdXNlcidzIGRlZmF1bHQg
Y29kZSBwYWdlIGlzCisgICAgLy8gb25lIG9mIHRoZXNlLCB3ZSB3aWxsIHVzZSBpdCBmaXJzdC4K
KyAgICBzdGF0aWMgY29uc3QgVUlOVCBDSktDb2RlUGFnZXNbXSA9IHsgCisgICAgICAgIDkzMiwg
LyogSmFwYW5lc2UgKi8KKyAgICAgICAgOTM2LCAvKiBTaW1wbGlmaWVkIENoaW5lc2UgKi8KKyAg
ICAgICAgOTUwLCAvKiBUcmFkaXRpb25hbCBDaGluZXNlICovCisgICAgICAgIDk0OSAgLyogS29y
ZWFuICovCisgICAgfTsKKworICAgIHN0YXRpYyBWZWN0b3I8RFdPUkQsIDQ+IGNvZGVQYWdlTWFz
a3M7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CisgICAgaWYgKCFpbml0aWFsaXplZCkg
eworICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7CisjaWYgZGVmaW5lZChJTUxBTkdfRk9OVF9M
SU5LKSAmJiAoSU1MQU5HX0ZPTlRfTElOSyA9PSAyKQorICAgICAgICBJTUxhbmdGb250TGluazIq
IGxhbmdGb250TGluayA9IGZvbnRDYWNoZSgpLT5nZXRGb250TGlua0ludGVyZmFjZSgpOworI2Vs
c2UKKyAgICAgICAgSU1MYW5nRm9udExpbmsqIGxhbmdGb250TGluayA9IGZvbnRDYWNoZSgpLT5n
ZXRGb250TGlua0ludGVyZmFjZSgpOworI2VuZGlmCisgICAgICAgIGlmICghbGFuZ0ZvbnRMaW5r
KQorICAgICAgICAgICAgcmV0dXJuIGNvZGVQYWdlTWFza3M7CisKKyAgICAgICAgVUlOVCBkZWZh
dWx0Q29kZVBhZ2U7CisgICAgICAgIERXT1JEIGRlZmF1bHRDb2RlUGFnZU1hc2sgPSAwOworICAg
ICAgICBpZiAoR2V0TG9jYWxlSW5mbyhMT0NBTEVfVVNFUl9ERUZBVUxULCBMT0NBTEVfUkVUVVJO
X05VTUJFUiB8IExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSwgcmVpbnRlcnByZXRfY2FzdDxM
UFdTVFI+KCZkZWZhdWx0Q29kZVBhZ2UpLCBzaXplb2YoZGVmYXVsdENvZGVQYWdlKSkpCisgICAg
ICAgICAgICBsYW5nRm9udExpbmstPkNvZGVQYWdlVG9Db2RlUGFnZXMoZGVmYXVsdENvZGVQYWdl
LCAmZGVmYXVsdENvZGVQYWdlTWFzayk7CisKKyAgICAgICAgaWYgKGRlZmF1bHRDb2RlUGFnZSA9
PSBDSktDb2RlUGFnZXNbMF0gfHwgZGVmYXVsdENvZGVQYWdlID09IENKS0NvZGVQYWdlc1sxXSB8
fCBkZWZhdWx0Q29kZVBhZ2UgPT0gQ0pLQ29kZVBhZ2VzWzJdIHx8IGRlZmF1bHRDb2RlUGFnZSA9
PSBDSktDb2RlUGFnZXNbM10pCisgICAgICAgICAgICBjb2RlUGFnZU1hc2tzLmFwcGVuZChkZWZh
dWx0Q29kZVBhZ2VNYXNrKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDQ7ICsr
aSkgeworICAgICAgICAgICAgaWYgKGRlZmF1bHRDb2RlUGFnZSAhPSBDSktDb2RlUGFnZXNbaV0p
IHsKKyAgICAgICAgICAgICAgICBEV09SRCBjb2RlUGFnZU1hc2s7CisgICAgICAgICAgICAgICAg
bGFuZ0ZvbnRMaW5rLT5Db2RlUGFnZVRvQ29kZVBhZ2VzKENKS0NvZGVQYWdlc1tpXSwgJmNvZGVQ
YWdlTWFzayk7CisgICAgICAgICAgICAgICAgY29kZVBhZ2VNYXNrcy5hcHBlbmQoY29kZVBhZ2VN
YXNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY29kZVBh
Z2VNYXNrczsKK30KKworCitzdHJ1Y3QgVHJhaXRzSW5GYW1pbHlQcm9jRGF0YSB7CisgICAgVHJh
aXRzSW5GYW1pbHlQcm9jRGF0YShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCisgICAg
ICAgIDogbV9mYW1pbHlOYW1lKGZhbWlseU5hbWUpCisgICAgeworICAgIH0KKworICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgbV9mYW1pbHlOYW1lOworICAgIEhhc2hTZXQ8dW5zaWduZWQ+IG1fdHJh
aXRzTWFza3M7Cit9OworCitzdGF0aWMgaW50IENBTExCQUNLIHRyYWl0c0luRmFtaWx5RW51bVBy
b2MoQ09OU1QgTE9HRk9OVCogbG9nRm9udCwgQ09OU1QgVEVYVE1FVFJJQyogbWV0cmljcywgRFdP
UkQgZm9udFR5cGUsIExQQVJBTSBsUGFyYW0pCit7CisgICAgVHJhaXRzSW5GYW1pbHlQcm9jRGF0
YSogcHJvY0RhdGEgPSByZWludGVycHJldF9jYXN0PFRyYWl0c0luRmFtaWx5UHJvY0RhdGEqPihs
UGFyYW0pOworCisgICAgdW5zaWduZWQgdHJhaXRzTWFzayA9IDA7CisgICAgdHJhaXRzTWFzayB8
PSBsb2dGb250LT5sZkl0YWxpYyA/IEZvbnRTdHlsZUl0YWxpY01hc2sgOiBGb250U3R5bGVOb3Jt
YWxNYXNrOworICAgIHRyYWl0c01hc2sgfD0gRm9udFZhcmlhbnROb3JtYWxNYXNrOworICAgIExP
Tkcgd2VpZ2h0ID0gRm9udFBsYXRmb3JtRGF0YTo6YWRqdXN0ZWRHRElGb250V2VpZ2h0KGxvZ0Zv
bnQtPmxmV2VpZ2h0LCBwcm9jRGF0YS0+bV9mYW1pbHlOYW1lKTsKKyAgICB0cmFpdHNNYXNrIHw9
IHdlaWdodCA9PSBGV19USElOID8gRm9udFdlaWdodDEwME1hc2sgOgorICAgICAgICB3ZWlnaHQg
PT0gRldfRVhUUkFMSUdIVCA/IEZvbnRXZWlnaHQyMDBNYXNrIDoKKyAgICAgICAgd2VpZ2h0ID09
IEZXX0xJR0hUID8gRm9udFdlaWdodDMwME1hc2sgOgorICAgICAgICB3ZWlnaHQgPT0gRldfTk9S
TUFMID8gRm9udFdlaWdodDQwME1hc2sgOgorICAgICAgICB3ZWlnaHQgPT0gRldfTUVESVVNID8g
Rm9udFdlaWdodDUwME1hc2sgOgorICAgICAgICB3ZWlnaHQgPT0gRldfU0VNSUJPTEQgPyBGb250
V2VpZ2h0NjAwTWFzayA6CisgICAgICAgIHdlaWdodCA9PSBGV19CT0xEID8gRm9udFdlaWdodDcw
ME1hc2sgOgorICAgICAgICB3ZWlnaHQgPT0gRldfRVhUUkFCT0xEID8gRm9udFdlaWdodDgwME1h
c2sgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9udFdlaWdodDkwME1hc2s7
CisgICAgcHJvY0RhdGEtPm1fdHJhaXRzTWFza3MuYWRkKHRyYWl0c01hc2spOworICAgIHJldHVy
biAxOworfQorCit2b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKK3sKK30KKwordm9pZCBG
b250Q2FjaGU6OmNvbUluaXRpYWxpemUoKQoreworfQorCit2b2lkIEZvbnRDYWNoZTo6Y29tVW5p
bml0aWFsaXplKCkKK3sKKyAgICBpZiAobGFuZ0ZvbnRMaW5rKSB7CisgICAgICAgIGxhbmdGb250
TGluay0+UmVsZWFzZSgpOworICAgICAgICBsYW5nRm9udExpbmsgPSAwOworICAgIH0KKyAgICBp
ZiAobXVsdGlMYW5ndWFnZSkgeworICAgICAgICBtdWx0aUxhbmd1YWdlLT5SZWxlYXNlKCk7Cisg
ICAgICAgIG11bHRpTGFuZ3VhZ2UgPSAwOworICAgIH0KK30KKworY29uc3QgU2ltcGxlRm9udERh
dGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQoreworICAgIFN0cmluZyBmYW1p
bHlOYW1lOworICAgIFdDSEFSIG5hbWVbTEZfRkFDRVNJWkVdOworCisgICAgVUNoYXIgY2hhcmFj
dGVyID0gY2hhcmFjdGVyc1swXTsKKyAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvcmlnRm9u
dCA9IGZvbnQucHJpbWFyeUZvbnQoKS0+Zm9udERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKS0+
cGxhdGZvcm1EYXRhKCk7CisgICAgdW5zaWduZWQgdW5pY29kZVJhbmdlID0gZmluZENoYXJVbmlj
b2RlUmFuZ2UoY2hhcmFjdGVyKTsKKworI2lmIGRlZmluZWQoSU1MQU5HX0ZPTlRfTElOSykgJiYg
KElNTEFOR19GT05UX0xJTksgPT0gMikKKyAgICBpZiAoSU1MYW5nRm9udExpbmsyKiBsYW5nRm9u
dExpbmsgPSBnZXRGb250TGlua0ludGVyZmFjZSgpKSB7CisjZWxzZQorICAgIGlmIChJTUxhbmdG
b250TGluayogbGFuZ0ZvbnRMaW5rID0gZ2V0Rm9udExpbmtJbnRlcmZhY2UoKSkgeworI2VuZGlm
CisgICAgICAgIEhHRElPQkogb2xkRm9udCA9IEdldEN1cnJlbnRPYmplY3QoZ19zY3JlZW5EQywg
T0JKX0ZPTlQpOworICAgICAgICBIRk9OVCBoZm9udCA9IDA7CisgICAgICAgIERXT1JEIGNvZGVQ
YWdlcyA9IDA7DQorICAgICAgICBVSU5UIGNvZGVQYWdlID0gMDsNCisgICAgICAgIC8vIFRyeSBN
TGFuZyBmb250IGxpbmtpbmcgZmlyc3QuDQorICAgICAgICBsYW5nRm9udExpbmstPkdldENoYXJD
b2RlUGFnZXMoY2hhcmFjdGVyLCAmY29kZVBhZ2VzKTsKKyAgICAgICAgaWYgKGNvZGVQYWdlcyAm
JiB1bmljb2RlUmFuZ2UgPT0gY1JhbmdlU2V0Q0pLKSB7CisgICAgICAgICAgICAvLyBUaGUgQ0pL
IGNoYXJhY3RlciBtYXkgYmVsb25nIHRvIG11bHRpcGxlIGNvZGUgcGFnZXMuIFdlIHdhbnQgdG8K
KyAgICAgICAgICAgIC8vIGRvIGZvbnQgbGlua2luZyBhZ2FpbnN0IGEgc2luZ2xlIG9uZSBvZiB0
aGVtLCBwcmVmZXJyaW5nIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAvLyBjb2RlIHBhZ2UgZm9y
IHRoZSB1c2VyJ3MgbG9jYWxlLgorICAgICAgICAgICAgY29uc3QgVmVjdG9yPERXT1JELCA0PiYg
Q0pLQ29kZVBhZ2VNYXNrcyA9IGdldENKS0NvZGVQYWdlTWFza3MoKTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIG51bUNvZGVQYWdlcyA9IENKS0NvZGVQYWdlTWFza3Muc2l6ZSgpOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUNvZGVQYWdlczsgKytpKSB7CisjaWYgZGVm
aW5lZChJTUxBTkdfRk9OVF9MSU5LKSAmJiAoSU1MQU5HX0ZPTlRfTElOSyA9PSAyKQorICAgICAg
ICAgICAgICAgIGhmb250ID0gY3JlYXRlTUxhbmdGb250KGxhbmdGb250TGluaywgZ19zY3JlZW5E
QywgQ0pLQ29kZVBhZ2VNYXNrc1tpXSk7CisjZWxzZQorICAgICAgICAgICAgICAgIGhmb250ID0g
Y3JlYXRlTUxhbmdGb250KGxhbmdGb250TGluaywgZ19zY3JlZW5EQywgb3JpZ0ZvbnQsIENKS0Nv
ZGVQYWdlTWFza3NbaV0pOworI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKCFoZm9udCkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBTZWxlY3RPYmpl
Y3QoZ19zY3JlZW5EQywgaGZvbnQpOworICAgICAgICAgICAgICAgIEdldFRleHRGYWNlKGdfc2Ny
ZWVuREMsIExGX0ZBQ0VTSVpFLCBuYW1lKTsKKworICAgICAgICAgICAgICAgIGlmIChoZm9udCAm
JiAhKGNvZGVQYWdlcyAmIENKS0NvZGVQYWdlTWFza3NbaV0pKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFdlIGFza2VkIGFib3V0IGEgY29kZSBwYWdlIHRoYXQgaXMgbm90IG9uZSBvZiB0aGUg
Y29kZSBwYWdlcworICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5lZCBieSBNTGFuZywgc28g
dGhlIGZvbnQgbWlnaHQgbm90IGNvbnRhaW4gdGhlIGNoYXJhY3Rlci4KKyNpZiBkZWZpbmVkKElN
TEFOR19GT05UX0xJTkspICYmIChJTUxBTkdfRk9OVF9MSU5LID09IDIpCisgICAgICAgICAgICAg
ICAgICAgIGlmICghY3VycmVudEZvbnRDb250YWluc0NoYXJhY3RlcihsYW5nRm9udExpbmssIGdf
c2NyZWVuREMsIGNoYXJhY3RlcikpIHsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIGlmICgh
Y3VycmVudEZvbnRDb250YWluc0NoYXJhY3RlcihsYW5nRm9udExpbmssIGdfc2NyZWVuREMsIGhm
b250LCBjaGFyYWN0ZXIsIG5hbWUpKSB7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAg
IFNlbGVjdE9iamVjdChnX3NjcmVlbkRDLCBvbGRGb250KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxhbmdGb250TGluay0+UmVsZWFzZUZvbnQoaGZvbnQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaGZvbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisjaWYgZGVmaW5lZChJTUxBTkdf
Rk9OVF9MSU5LKSAmJiAoSU1MQU5HX0ZPTlRfTElOSyA9PSAyKQorICAgICAgICAgICAgaGZvbnQg
PSBjcmVhdGVNTGFuZ0ZvbnQobGFuZ0ZvbnRMaW5rLCBnX3NjcmVlbkRDLCBjb2RlUGFnZXMsIGNo
YXJhY3Rlcik7CisjZWxzZQorICAgICAgICAgICAgaGZvbnQgPSBjcmVhdGVNTGFuZ0ZvbnQobGFu
Z0ZvbnRMaW5rLCBnX3NjcmVlbkRDLCBvcmlnRm9udCwgY29kZVBhZ2VzKTsKKyNlbmRpZgorICAg
ICAgICAgICAgU2VsZWN0T2JqZWN0KGdfc2NyZWVuREMsIGhmb250KTsKKyAgICAgICAgICAgIEdl
dFRleHRGYWNlKGdfc2NyZWVuREMsIExGX0ZBQ0VTSVpFLCBuYW1lKTsKKyAgICAgICAgfQorICAg
ICAgICBTZWxlY3RPYmplY3QoZ19zY3JlZW5EQywgb2xkRm9udCk7CisKKyAgICAgICAgaWYgKGhm
b250KSB7CisgICAgICAgICAgICBmYW1pbHlOYW1lID0gbmFtZTsKKyAgICAgICAgICAgIGxhbmdG
b250TGluay0+UmVsZWFzZUZvbnQoaGZvbnQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IEZvbnRQbGF0Zm9ybURhdGE6Om1hcEtub3duRm9udChjb2RlUGFnZXMsIGZhbWlseU5hbWUpOwor
ICAgIH0KKworICAgIGlmIChmYW1pbHlOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgZmFtaWx5TmFt
ZSA9IEZvbnRQbGF0Zm9ybURhdGE6OmRlZmF1bHRGb250RmFtaWx5KCk7CisKKyAgICBpZiAoIWZh
bWlseU5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiB0ZW1wb3Jhcnkgd29ya2Fy
b3VuZCBmb3IgVGhhaSBmb250IHByb2JsZW0KKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbihmb250LmZvbnREZXNjcmlwdGlvbigpKTsKKyAgICAgICAgaWYgKHVuaWNvZGVS
YW5nZSA9PSBjUmFuZ2VUaGFpICYmIGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSA+IEZvbnRXZWln
aHROb3JtYWwpCisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRXZWln
aHROb3JtYWwpOworCisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEqIHJlc3VsdCA9IGdldENhY2hl
ZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKKyAgICAgICAg
aWYgKHJlc3VsdCAmJiByZXN1bHQtPmhhc2goKSAhPSBvcmlnRm9udC5oYXNoKCkpIHsKKyAgICAg
ICAgICAgIGlmIChTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShy
ZXN1bHQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmb250RGF0YTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiAwOworfQorCitGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6Omdl
dFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgcmV0dXJu
IDA7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxi
YWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjKQoreworICAgIC8vIEZJWE1F
OiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQg
Zm9udCBoZXJlLiAgRm9yIG5vdyB3ZSdsbCBwaWNrCisgICAgLy8gdGhlIGRlZmF1bHQgdGhhdCB0
aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCisgICAgcmV0dXJu
IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2MsIEZvbnRQbGF0Zm9ybURhdGE6OmRl
ZmF1bHRGb250RmFtaWx5KCkpOworfQorCitGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmNy
ZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQoreworICAgIEZvbnRQbGF0Zm9ybURhdGEq
IHJlc3VsdCA9IG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5KTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1p
bHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBWZWN0b3I8dW5zaWduZWQ+JiB0cmFp
dHNNYXNrcykKK3sKKyAgICBMT0dGT05UIGxvZ0ZvbnQ7CisgICAgbG9nRm9udC5sZkNoYXJTZXQg
PSBERUZBVUxUX0NIQVJTRVQ7CisgICAgdW5zaWduZWQgZmFtaWx5TGVuZ3RoID0gc3RkOjptaW4o
ZmFtaWx5TmFtZS5sZW5ndGgoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExGX0ZBQ0VTSVpFIC0g
MSkpOworICAgIG1lbWNweShsb2dGb250LmxmRmFjZU5hbWUsIGZhbWlseU5hbWUuY2hhcmFjdGVy
cygpLCBmYW1pbHlMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICBsb2dGb250LmxmRmFjZU5h
bWVbZmFtaWx5TGVuZ3RoXSA9IDA7CisgICAgbG9nRm9udC5sZlBpdGNoQW5kRmFtaWx5ID0gMDsK
KworICAgIFRyYWl0c0luRmFtaWx5UHJvY0RhdGEgcHJvY0RhdGEoZmFtaWx5TmFtZSk7CisgICAg
RW51bUZvbnRGYW1pbGllc0V4KGdfc2NyZWVuREMsICZsb2dGb250LCB0cmFpdHNJbkZhbWlseUVu
dW1Qcm9jLCByZWludGVycHJldF9jYXN0PExQQVJBTT4oJnByb2NEYXRhKSwgMCk7CisgICAgY29w
eVRvVmVjdG9yKHByb2NEYXRhLm1fdHJhaXRzTWFza3MsIHRyYWl0c01hc2tzKTsKK30KKworfQor
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43
YzY4NTNjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIkJhc2U2NC5oIgorI2luY2x1ZGUgIkNhY2hlZEZvbnQu
aCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisjaW5jbHVkZSA8d3RmL1JhbmRvbU51
bWJlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBDdXN0b21Gb250Q2FjaGUq
IGdfY3VzdG9tRm9udENhY2hlID0gMDsKKworYm9vbCByZW5hbWVGb250KFNoYXJlZEJ1ZmZlciog
Zm9udERhdGEsIGNvbnN0IFN0cmluZyYgZm9udE5hbWUpOworCitGb250Q3VzdG9tUGxhdGZvcm1E
YXRhOjp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpCit7CisgICAgaWYgKGdfY3VzdG9tRm9udENh
Y2hlICYmICFtX25hbWUuaXNFbXB0eSgpKQorICAgICAgICBnX2N1c3RvbUZvbnRDYWNoZS0+dW5y
ZWdpc3RlckZvbnQobV9uYW1lKTsKK30KKworRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxh
dGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRh
bGljLCBGb250UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQoreworICAgIEZvbnREZXNjcmlw
dGlvbiBmb250RGVzYzsKKyAgICBmb250RGVzYy5zZXRDb21wdXRlZFNpemUoc2l6ZSk7CisgICAg
Zm9udERlc2Muc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKKyAgICBmb250RGVzYy5zZXRJdGFsaWMo
aXRhbGljKTsKKyAgICBmb250RGVzYy5zZXRXZWlnaHQoYm9sZCA/IEZvbnRXZWlnaHRCb2xkIDog
Rm9udFdlaWdodE5vcm1hbCk7CisgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2Ms
IG1fbmFtZSwgZmFsc2UpOworfQorCisvLyBDcmVhdGVzIGEgdW5pcXVlIGFuZCB1bnByZWRpY3Rh
YmxlIGZvbnQgbmFtZSwgaW4gb3JkZXIgdG8gYXZvaWQgY29sbGlzaW9ucyBhbmQgdG8KKy8vIG5v
dCBhbGxvdyBhY2Nlc3MgZnJvbSBDU1MuCitzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1ZUZvbnRO
YW1lKCkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gZm9udFV1aWQoc2l6ZW9mKEdVSUQpKTsKKworICAg
IHVuc2lnbmVkIGludCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihmb250
VXVpZC5kYXRhKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKEdVSUQpIC8gc2l6
ZW9mKGludCkgOyArK2kpCisgICAgICAgICoocHRyICsgaSkgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBpbnQ+KFdURjo6cmFuZG9tTnVtYmVyKCkgKiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpICsgMS4wKSk7CisKKyAgICBWZWN0b3I8Y2hhcj4gZm9udE5hbWVWZWN0b3I7Cisg
ICAgYmFzZTY0RW5jb2RlKGZvbnRVdWlkLCBmb250TmFtZVZlY3Rvcik7CisgICAgQVNTRVJUKGZv
bnROYW1lVmVjdG9yLnNpemUoKSA8IExGX0ZBQ0VTSVpFKTsKKyAgICBTdHJpbmcgZm9udE5hbWUo
Zm9udE5hbWVWZWN0b3IuZGF0YSgpLCBmb250TmFtZVZlY3Rvci5zaXplKCkpOworICAgIHJldHVy
biBmb250TmFtZS5yZXBsYWNlKCcvJywgJ18nKTsKK30KKworRm9udEN1c3RvbVBsYXRmb3JtRGF0
YSogY3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YShDYWNoZWRGb250KiBjYWNoZWRGb250KQor
eworICAgIGlmIChnX2N1c3RvbUZvbnRDYWNoZSAmJiBjYWNoZWRGb250LT5DYWNoZWRSZXNvdXJj
ZTo6ZGF0YSgpKSB7CisgICAgICAgIFN0cmluZyBmb250TmFtZSA9IGNyZWF0ZVVuaXF1ZUZvbnRO
YW1lKCk7CisgICAgICAgIGlmIChyZW5hbWVGb250KGNhY2hlZEZvbnQtPkNhY2hlZFJlc291cmNl
OjpkYXRhKCksIGZvbnROYW1lKSAmJiBnX2N1c3RvbUZvbnRDYWNoZS0+cmVnaXN0ZXJGb250KGZv
bnROYW1lLCBjYWNoZWRGb250KSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgRm9udEN1c3RvbVBs
YXRmb3JtRGF0YShmb250TmFtZSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDdXN0b21QbGF0Zm9y
bURhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNTFhOTcKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YV9oCisjZGVmaW5lIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFfaAor
CisjaW5jbHVkZSAiRm9udFJlbmRlcmluZ01vZGUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGE7CitjbGFzcyBDYWNoZWRGb250OworCitjbGFzcyBD
dXN0b21Gb250Q2FjaGUKK3sKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgcmVnaXN0ZXJGb250
KGNvbnN0IFN0cmluZyYgZm9udE5hbWUsIENhY2hlZEZvbnQqKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHVucmVnaXN0ZXJGb250KGNvbnN0IFN0cmluZyYgZm9udE5hbWUpID0gMDsKK307CisKK3N0
cnVjdCBGb250Q3VzdG9tUGxhdGZvcm1EYXRhIDogTm9uY29weWFibGUgeworICAgIEZvbnRDdXN0
b21QbGF0Zm9ybURhdGEoY29uc3QgU3RyaW5nJiBuYW1lKQorICAgICAgICA6IG1fbmFtZShuYW1l
KQorICAgIHsKKyAgICB9CisKKyAgICB+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpOworCisgICAg
Rm9udFBsYXRmb3JtRGF0YSBmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQsIGJv
b2wgaXRhbGljLCBGb250UmVuZGVyaW5nTW9kZSA9IE5vcm1hbFJlbmRlcmluZ01vZGUpOworICAg
IFN0cmluZyBtX25hbWU7Cit9OworCitGb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250
Q3VzdG9tUGxhdGZvcm1EYXRhKENhY2hlZEZvbnQqKTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MmE4Y2YKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuY3Bw
CkBAIC0wLDAgKzEsNTM0IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogQ29weXJpZ2h0IChDKSAyMDA3LTIw
MDkgVG9yY2ggTW9iaWxlLCBJbmMuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJl
IG1ldDoKKyoKKyogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorCisjaW5j
bHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnREYXRh
LmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJVbmljb2RlUmFuZ2Uu
aCIKKyNpbmNsdWRlICJ3dGYvT3duUHRyLmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5j
bHVkZSA8bWxhbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUKK3sKKworZXh0ZXJuIEhEQyBnX3Nj
cmVlbkRDOworCitzdGF0aWMgd2NoYXJfdCBzb25nVGlTdHJbXSA9IHsgMHg1YjhiLCAweDRmNTMs
IDAgfTsKK3N0YXRpYyB3Y2hhcl90IGhlaVRpU3RyW10gPSB7IDB4OWVkMSwgMHg0ZjUzLCAwIH07
CisKK2NsYXNzIEZvbnRGYW1pbHlDb2RlUGFnZUluZm8geworcHVibGljOgorICAgIEZvbnRGYW1p
bHlDb2RlUGFnZUluZm8oKSAKKyAgICAgICAgOiBtX2NvZGVQYWdlKDApLCBtX2NvZGVQYWdlcygw
KQorICAgIHsKKyAgICB9CisgICAgRm9udEZhbWlseUNvZGVQYWdlSW5mbyhjb25zdCB3Y2hhcl90
KiBmYW1pbHksIFVJTlQgY29kZVBhZ2UpCisgICAgICAgIDogbV9mYW1pbHkoZmFtaWx5KSwgbV9j
b2RlUGFnZShjb2RlUGFnZSksIG1fY29kZVBhZ2VzKDApCisgICAgeworICAgIH0KKyAgICBEV09S
RCBjb2RlUGFnZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2NvZGVQYWdlcykgewor
I2lmIGRlZmluZWQoSU1MQU5HX0ZPTlRfTElOSykgJiYgKElNTEFOR19GT05UX0xJTksgPT0gMikK
KyAgICAgICAgICAgIGlmIChJTUxhbmdGb250TGluazIqIGxhbmdGb250TGluayA9IGZvbnRDYWNo
ZSgpLT5nZXRGb250TGlua0ludGVyZmFjZSgpKQorICAgICAgICAgICAgICAgIGxhbmdGb250TGlu
ay0+Q29kZVBhZ2VUb0NvZGVQYWdlcyhtX2NvZGVQYWdlLCAmbV9jb2RlUGFnZXMpOworI2Vsc2UK
KyAgICAgICAgICAgIGlmIChJTUxhbmdGb250TGluayogbGFuZ0ZvbnRMaW5rID0gZm9udENhY2hl
KCktPmdldEZvbnRMaW5rSW50ZXJmYWNlKCkpCisgICAgICAgICAgICAgICAgbGFuZ0ZvbnRMaW5r
LT5Db2RlUGFnZVRvQ29kZVBhZ2VzKG1fY29kZVBhZ2UsICZtX2NvZGVQYWdlcyk7CisjZW5kaWYK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9jb2RlUGFnZXM7CisgICAgfQorCisgICAgU3Ry
aW5nIG1fZmFtaWx5OworICAgIFVJTlQgbV9jb2RlUGFnZTsKK3ByaXZhdGU6CisgICAgbXV0YWJs
ZSBEV09SRCBtX2NvZGVQYWdlczsKK307CisKK2NsYXNzIEZvbnRGYW1pbHlDaGVja2VyIHsKK3B1
YmxpYzoKKyAgICBGb250RmFtaWx5Q2hlY2tlcihjb25zdCB3Y2hhcl90KiBmYW1pbHkpIDogbV9l
eGlzdHMoZmFsc2UpIHsKKyAgICAgICAgRW51bUZvbnRGYW1pbGllcyhnX3NjcmVlbkRDLCBmYW1p
bHksIGVudW1Gb250RmFtUHJvYywgKExQQVJBTSl0aGlzKTsKKyAgICB9CisgICAgYm9vbCBpc1N1
cHBvcnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhpc3RzOyB9Citwcml2YXRlOgorICAgIGJvb2wg
bV9leGlzdHM7CisgICAgc3RhdGljIGludCBDQUxMQkFDSyBlbnVtRm9udEZhbVByb2MoY29uc3Qg
TE9HRk9OVCBGQVIqIGxwZWxmLCBjb25zdCBURVhUTUVUUklDIEZBUiogbHBudG0sIERXT1JEIEZv
bnRUeXBlLCBMUEFSQU0gbFBhcmFtKTsKK307CisKK2NsYXNzIFZhbGlkRm9udEZhbWlseUZpbmRl
ciB7CitwdWJsaWM6CisgICAgVmFsaWRGb250RmFtaWx5RmluZGVyKCkKKyAgICB7CisgICAgICAg
IEVudW1Gb250RmFtaWxpZXMoZ19zY3JlZW5EQywgMCwgZW51bUZvbnRGYW1Qcm9jLCAoTFBBUkFN
KXRoaXMpOworICAgIH0KKyAgICBjb25zdCBTdHJpbmcmIGZhbWlseSgpIGNvbnN0IHsgcmV0dXJu
IG1fZmFtaWx5OyB9Citwcml2YXRlOgorICAgIFN0cmluZyBtX2ZhbWlseTsKKyAgICBzdGF0aWMg
aW50IENBTExCQUNLIGVudW1Gb250RmFtUHJvYyhjb25zdCBMT0dGT05UIEZBUiogbHBlbGYsIGNv
bnN0IFRFWFRNRVRSSUMgRkFSKiBscG50bSwgRFdPUkQgRm9udFR5cGUsIExQQVJBTSBsUGFyYW0p
OworfTsKKworY2xhc3MgRml4ZWRTaXplRm9udERhdGE6IHB1YmxpYyBSZWZDb3VudGVkPEZpeGVk
U2l6ZUZvbnREYXRhPiB7CitwdWJsaWM6CisgICAgTE9HRk9OVCBtX2ZvbnQ7CisgICAgT3duUHRy
PEhGT05UPiBtX2hmb250OworICAgIFRFWFRNRVRSSUMgbV9tZXRyaWNzOworICAgIERXT1JEIG1f
Y29kZVBhZ2VzOworICAgIHVuc2lnbmVkIG1fd2VpZ2h0OworICAgIGJvb2wgbV9pdGFsaWM7CisK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaXhlZFNpemVGb250RGF0YT4gY3JlYXRlKGNvbnN0IEF0
b21pY1N0cmluZyYgZmFtaWx5LCB1bnNpZ25lZCB3ZWlnaHQsIGJvb2wgaXRhbGljKTsKK3ByaXZh
dGU6CisgICAgRml4ZWRTaXplRm9udERhdGEoKQorICAgICAgICA6IG1fY29kZVBhZ2VzKDApCisg
ICAgICAgICwgbV93ZWlnaHQoMCkKKyAgICAgICAgLCBtX2l0YWxpYyhmYWxzZSkKKyAgICB7Cisg
ICAgICAgIG1lbXNldCgmbV9mb250LCAwLCBzaXplb2YobV9mb250KSk7CisgICAgICAgIG1lbXNl
dCgmbV9tZXRyaWNzLCAwLCBzaXplb2YobV9tZXRyaWNzKSk7CisgICAgfQorfTsKKworc3RydWN0
IEZpeGVkU2l6ZUZvbnREYXRhS2V5IHsKKyAgICBGaXhlZFNpemVGb250RGF0YUtleShjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseSA9IEF0b21pY1N0cmluZygpLCB1bnNpZ25lZCB3ZWlnaHQgPSAw
LCBib29sIGl0YWxpYyA9IGZhbHNlKQorICAgICAgICA6IG1fZmFtaWx5KGZhbWlseSkKKyAgICAg
ICAgLCBtX3dlaWdodCh3ZWlnaHQpCisgICAgICAgICwgbV9pdGFsaWMoaXRhbGljKQorICAgIHsK
KyAgICB9CisKKyAgICBGaXhlZFNpemVGb250RGF0YUtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpIDogbV93ZWlnaHQoLTIpIHsgfQorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVk
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3dlaWdodCA9PSAtMjsgfQorCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEZpeGVkU2l6ZUZvbnREYXRhS2V5JiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShtX2ZhbWlseSwgb3RoZXIubV9mYW1pbHkp
CisgICAgICAgICAgICAmJiBtX3dlaWdodCA9PSBvdGhlci5tX3dlaWdodAorICAgICAgICAgICAg
JiYgbV9pdGFsaWMgPT0gb3RoZXIubV9pdGFsaWM7CisgICAgfQorCisgICAgQXRvbWljU3RyaW5n
IG1fZmFtaWx5OworICAgIHVuc2lnbmVkIG1fd2VpZ2h0OworICAgIGJvb2wgbV9pdGFsaWM7Cit9
OworCitzdHJ1Y3QgRml4ZWRTaXplRm9udERhdGFLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBGaXhlZFNpemVGb250RGF0YUtleSYgZm9udCkKKyAgICB7CisgICAgICAg
IHVuc2lnbmVkIGhhc2hDb2Rlc1tdID0geworICAgICAgICAgICAgQ2FzZUZvbGRpbmdIYXNoOjpo
YXNoKGZvbnQubV9mYW1pbHkpLAorICAgICAgICAgICAgZm9udC5tX3dlaWdodCwKKyAgICAgICAg
ICAgIC8vIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmb250Lm1faXRhbGljKTsKKyAgICAgICAgfTsK
KyAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8
VUNoYXIqPihoYXNoQ29kZXMpLCBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hhcikpOwor
ICAgIH0KKyAgICAgICAgIAorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZpeGVkU2l6ZUZv
bnREYXRhS2V5JiBhLCBjb25zdCBGaXhlZFNpemVGb250RGF0YUtleSYgYikKKyAgICB7CisgICAg
ICAgIHJldHVybiBhID09IGI7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworc3RydWN0IEZpeGVkU2l6ZUZv
bnREYXRhS2V5VHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxGaXhlZFNpemVGb250RGF0
YUtleT4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdCBGaXhlZFNpemVGb250RGF0YUtleSYgZW1wdHlWYWx1ZSgpCisgICAg
eworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZpeGVkU2l6ZUZvbnREYXRhS2V5LCBrZXks
IChudWxsQXRvbSkpOworICAgICAgICByZXR1cm4ga2V5OworICAgIH0KKyAgICBzdGF0aWMgdm9p
ZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRml4ZWRTaXplRm9udERhdGFLZXkmIHNsb3QpCisgICAg
eworICAgICAgICBuZXcgKCZzbG90KSBGaXhlZFNpemVGb250RGF0YUtleShXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSk7CisgICAgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNv
bnN0IEZpeGVkU2l6ZUZvbnREYXRhS2V5JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworICAgIH0KK307CisKK2ludCBDQUxMQkFD
SyBGb250RmFtaWx5Q2hlY2tlcjo6ZW51bUZvbnRGYW1Qcm9jKGNvbnN0IExPR0ZPTlQgRkFSKiBs
cGVsZiwgY29uc3QgVEVYVE1FVFJJQyBGQVIqIGxwbnRtLCBEV09SRCBGb250VHlwZSwgTFBBUkFN
IGxQYXJhbSkKK3sKKyAgICAoKEZvbnRGYW1pbHlDaGVja2VyKilsUGFyYW0pLT5tX2V4aXN0cyA9
IHRydWU7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBDQUxMQkFDSyBWYWxpZEZvbnRGYW1pbHlG
aW5kZXI6OmVudW1Gb250RmFtUHJvYyhjb25zdCBMT0dGT05UIEZBUiogbHBlbGYsIGNvbnN0IFRF
WFRNRVRSSUMgRkFSKiBscG50bSwgRFdPUkQgRm9udFR5cGUsIExQQVJBTSBsUGFyYW0pCit7Cisg
ICAgaWYgKGxwZWxmLT5sZkNoYXJTZXQgIT0gU1lNQk9MX0NIQVJTRVQpIHsKKyAgICAgICAgKChW
YWxpZEZvbnRGYW1pbHlGaW5kZXIqKWxQYXJhbSktPm1fZmFtaWx5ID0gU3RyaW5nKGxwZWxmLT5s
ZkZhY2VOYW1lKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiAxOworfQor
Cit0eXBlZGVmIFZlY3RvcjxGb250RmFtaWx5Q29kZVBhZ2VJbmZvPiBLbm93bkZvbnRzOworc3Rh
dGljIEtub3duRm9udHMmIGtub3duRm9udHMoKQoreworICAgIHN0YXRpYyBLbm93bkZvbnRzIGZv
bnRzOworICAgIHN0YXRpYyBib29sIGZpcnN0VGltZSA9IHRydWU7CisgICAgaWYgKGZpcnN0VGlt
ZSkgeworICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTsKKyAgICAgICAgaWYgKEZvbnRQbGF0Zm9y
bURhdGE6OmlzU29uZ1RpU3VwcG9ydGVkKCkpCisgICAgICAgICAgICBmb250cy5hcHBlbmQoRm9u
dEZhbWlseUNvZGVQYWdlSW5mbyhzb25nVGlTdHIsIDkzNikpOworICAgIH0KKyAgICByZXR1cm4g
Zm9udHM7Cit9CisKK3N0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdEZvbnRGYW1pbHkoKQoreworICAg
IGlmIChGb250RmFtaWx5Q2hlY2tlcihMIlRhaG9tYSIpLmlzU3VwcG9ydGVkKCkpCisgICAgICAg
IHJldHVybiBTdHJpbmcoTCJUYWhvbWEiKTsKKworICAgIGJvb2wgZ29vZCA9IGZhbHNlOworICAg
IFN0cmluZyBmYW1pbHk7CisgICAgSEtFWSBrZXk7CisgICAgaWYgKFJlZ09wZW5LZXlFeChIS0VZ
X0xPQ0FMX01BQ0hJTkUsIEwiU1lTVEVNXFxHRElcXFN5c0ZudCIsIDAsIDAsICZrZXkpID09IEVS
Uk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgRFdPUkQgbWF4bGVuLCB0eXBlOworICAgICAgICBpZiAo
UmVnUXVlcnlWYWx1ZUV4KGtleSwgTCJObSIsIDAsICZ0eXBlLCAwLCAmbWF4bGVuKSA9PSBFUlJP
Ul9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKSB7CisgICAgICAgICAgICArK21heGxlbjsKKyAg
ICAgICAgICAgIGlmICh3Y2hhcl90KiBidWZmZXIgPSBuZXcgd2NoYXJfdFttYXhsZW5dKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKFJlZ1F1ZXJ5VmFsdWVFeChrZXksIEwiTm0iLCAwLCAmdHlwZSwg
KExQQllURSlidWZmZXIsICZtYXhsZW4pID09IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZmFtaWx5ID0gU3RyaW5nKGJ1ZmZlciwgbWF4bGVuKTsKKyAgICAgICAgICAgICAg
ICAgICAgZ29vZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRl
bGV0ZVtdIGJ1ZmZlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBSZWdDbG9z
ZUtleShrZXkpOworICAgIH0KKyAgICBpZiAoZ29vZCkKKyAgICAgICAgcmV0dXJuIGZhbWlseTsK
KworICAgIHJldHVybiBWYWxpZEZvbnRGYW1pbHlGaW5kZXIoKS5mYW1pbHkoKTsKK30KKwordHlw
ZWRlZiBIYXNoTWFwPEZpeGVkU2l6ZUZvbnREYXRhS2V5LCBSZWZQdHI8Rml4ZWRTaXplRm9udERh
dGE+LCBGaXhlZFNpemVGb250RGF0YUtleUhhc2gsIEZpeGVkU2l6ZUZvbnREYXRhS2V5VHJhaXRz
PiBGaXhlZFNpemVGb250Q2FjaGU7CitGaXhlZFNpemVGb250Q2FjaGUgZ19maXhlZFNpemVGb250
Q2FjaGU7CisKK1Bhc3NSZWZQdHI8Rml4ZWRTaXplRm9udERhdGE+IEZpeGVkU2l6ZUZvbnREYXRh
OjpjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIHVuc2lnbmVkIHdlaWdodCwgYm9v
bCBpdGFsaWMpCit7CisgICAgRml4ZWRTaXplRm9udERhdGEqIGZvbnREYXRhID0gbmV3IEZpeGVk
U2l6ZUZvbnREYXRhKCk7CisKKyAgICBmb250RGF0YS0+bV93ZWlnaHQgPSB3ZWlnaHQ7CisgICAg
Zm9udERhdGEtPm1faXRhbGljID0gaXRhbGljOworCisgICAgTE9HRk9OVCYgd2luRm9udCA9IGZv
bnREYXRhLT5tX2ZvbnQ7CisgICAgLy8gVGhlIHNpemUgaGVyZSBsb29rcyB1bnVzdWFsLiAgVGhl
IG5lZ2F0aXZlIG51bWJlciBpcyBpbnRlbnRpb25hbC4KKyAgICB3aW5Gb250LmxmSGVpZ2h0ID0g
LTcyOworICAgIHdpbkZvbnQubGZXaWR0aCA9IDA7CisgICAgd2luRm9udC5sZkVzY2FwZW1lbnQg
PSAwOworICAgIHdpbkZvbnQubGZPcmllbnRhdGlvbiA9IDA7CisgICAgd2luRm9udC5sZlVuZGVy
bGluZSA9IGZhbHNlOworICAgIHdpbkZvbnQubGZTdHJpa2VPdXQgPSBmYWxzZTsKKyAgICB3aW5G
b250LmxmQ2hhclNldCA9IERFRkFVTFRfQ0hBUlNFVDsKKyAgICB3aW5Gb250LmxmT3V0UHJlY2lz
aW9uID0gT1VUX0RFRkFVTFRfUFJFQ0lTOworICAgIHdpbkZvbnQubGZRdWFsaXR5ID0gQ0xFQVJU
WVBFX1FVQUxJVFk7IC8vREVGQVVMVF9RVUFMSVRZOworICAgIHdpbkZvbnQubGZDbGlwUHJlY2lz
aW9uID0gQ0xJUF9ERUZBVUxUX1BSRUNJUzsKKyAgICB3aW5Gb250LmxmUGl0Y2hBbmRGYW1pbHkg
PSBERUZBVUxUX1BJVENIIHwgRkZfRE9OVENBUkU7CisgICAgd2luRm9udC5sZkl0YWxpYyA9IGl0
YWxpYzsKKyAgICB3aW5Gb250LmxmV2VpZ2h0ID0gRm9udFBsYXRmb3JtRGF0YTo6YWRqdXN0ZWRH
RElGb250V2VpZ2h0KHdlaWdodCwgZmFtaWx5KTsKKworICAgIGludCBsZW4gPSBzdGQ6Om1pbihm
YW1pbHkubGVuZ3RoKCksICh1bnNpZ25lZCBpbnQpTEZfRkFDRVNJWkUgLSAxKTsKKyAgICB3bWVt
Y3B5KHdpbkZvbnQubGZGYWNlTmFtZSwgZmFtaWx5LmNoYXJhY3RlcnMoKSwgbGVuKTsKKyAgICB3
aW5Gb250LmxmRmFjZU5hbWVbbGVuXSA9IEwnXDAnOworCisgICAgZm9udERhdGEtPm1faGZvbnQu
c2V0KENyZWF0ZUZvbnRJbmRpcmVjdCgmd2luRm9udCkpOworCisgICAgSEdESU9CSiBvbGRGb250
ID0gU2VsZWN0T2JqZWN0KGdfc2NyZWVuREMsIGZvbnREYXRhLT5tX2hmb250LmdldCgpKTsKKwor
ICAgIEdldFRleHRNZXRyaWNzKGdfc2NyZWVuREMsICZmb250RGF0YS0+bV9tZXRyaWNzKTsKKwor
I2lmIGRlZmluZWQoSU1MQU5HX0ZPTlRfTElOSykgJiYgKElNTEFOR19GT05UX0xJTksgPT0gMikK
KyAgICBpZiAoSU1MYW5nRm9udExpbmsyKiBsYW5nRm9udExpbmsgPSBmb250Q2FjaGUoKS0+Z2V0
Rm9udExpbmtJbnRlcmZhY2UoKSkgeworI2Vsc2UKKyAgICBpZiAoSU1MYW5nRm9udExpbmsqIGxh
bmdGb250TGluayA9IGZvbnRDYWNoZSgpLT5nZXRGb250TGlua0ludGVyZmFjZSgpKSB7CisjZW5k
aWYKKyAgICAgICAgbGFuZ0ZvbnRMaW5rLT5HZXRGb250Q29kZVBhZ2VzKGdfc2NyZWVuREMsIGZv
bnREYXRhLT5tX2hmb250LmdldCgpLCAmZm9udERhdGEtPm1fY29kZVBhZ2VzKTsNCisgICAgICAg
IGZvbnREYXRhLT5tX2NvZGVQYWdlcyB8PSBGb250UGxhdGZvcm1EYXRhOjpnZXRLbm93bkZvbnRD
b2RlUGFnZXMod2luRm9udC5sZkZhY2VOYW1lKTsKKyAgICB9ICAgIAorCisgICAgU2VsZWN0T2Jq
ZWN0KGdfc2NyZWVuREMsIG9sZEZvbnQpOworCisgICAgcmV0dXJuIGFkb3B0UmVmKGZvbnREYXRh
KTsKK30KKworc3RhdGljIFBhc3NSZWZQdHI8Rml4ZWRTaXplRm9udERhdGE+IGNyZWF0ZUZpeGVk
U2l6ZUZvbnREYXRhKGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCB1bnNpZ25lZCB3ZWlnaHQs
IGJvb2wgaXRhbGljKQoreworICAgIEZpeGVkU2l6ZUZvbnREYXRhS2V5IGtleShmYW1pbHksIHdl
aWdodCwgaXRhbGljKTsKKyAgICBwYWlyPEZpeGVkU2l6ZUZvbnRDYWNoZTo6aXRlcmF0b3IsIGJv
b2w+IHJlc3VsdCA9IGdfZml4ZWRTaXplRm9udENhY2hlLmFkZChrZXksIFJlZlB0cjxGaXhlZFNp
emVGb250RGF0YT4oKSk7CisgICAgaWYgKHJlc3VsdC5zZWNvbmQpCisgICAgICAgIHJlc3VsdC5m
aXJzdC0+c2Vjb25kID0gRml4ZWRTaXplRm9udERhdGE6OmNyZWF0ZShmYW1pbHksIHdlaWdodCwg
aXRhbGljKTsKKworICAgIHJldHVybiByZXN1bHQuZmlyc3QtPnNlY29uZDsKK30KKworc3RhdGlj
IExPTkcgdG9HRElGb250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkKK3sKKyAgICBzdGF0
aWMgTE9ORyBnZGlGb250V2VpZ2h0c1tdID0geworICAgICAgICBGV19USElOLCAgICAgICAgLy8g
Rm9udFdlaWdodDEwMAorICAgICAgICBGV19FWFRSQUxJR0hULCAgLy8gRm9udFdlaWdodDIwMAor
ICAgICAgICBGV19MSUdIVCwgICAgICAgLy8gRm9udFdlaWdodDMwMAorICAgICAgICBGV19OT1JN
QUwsICAgICAgLy8gRm9udFdlaWdodDQwMAorICAgICAgICBGV19NRURJVU0sICAgICAgLy8gRm9u
dFdlaWdodDUwMAorICAgICAgICBGV19TRU1JQk9MRCwgICAgLy8gRm9udFdlaWdodDYwMAorICAg
ICAgICBGV19CT0xELCAgICAgICAgLy8gRm9udFdlaWdodDcwMAorICAgICAgICBGV19FWFRSQUJP
TEQsICAgLy8gRm9udFdlaWdodDgwMAorICAgICAgICBGV19IRUFWWSAgICAgICAgLy8gRm9udFdl
aWdodDkwMAorICAgIH07CisgICAgcmV0dXJuIGdkaUZvbnRXZWlnaHRzW2ZvbnRXZWlnaHRdOwor
fQorCitjbGFzcyBGb250UGxhdGZvcm1Qcml2YXRlRGF0YQoreworcHVibGljOgorICAgIGludCBt
X3JlZmVyZW5jZTsKKyAgICBSZWZQdHI8Rml4ZWRTaXplRm9udERhdGE+IG1fcm9vdEZvbnREYXRh
OworICAgIEF0b21pY1N0cmluZyBtX2ZhbWlseTsKKyAgICBGb250RGVzY3JpcHRpb24gbV9mb250
RGVzY3JpcHRpb247CisgICAgT3duUHRyPEhGT05UPiBtX2hmb250U2NhbGVkOworICAgIGludCBt
X3NpemU7CisgICAgbG9uZyBtX2ZvbnRTY2FsZWRXaWR0aDsKKyAgICBsb25nIG1fZm9udFNjYWxl
ZEhlaWdodDsKKyAgICBib29sIG1fZGlzYWJsZWQ7CisgICAgRm9udFBsYXRmb3JtUHJpdmF0ZURh
dGEoaW50IHNpemUsIHVuc2lnbmVkIHdlaWdodCkKKyAgICAgICAgOiBtX3JlZmVyZW5jZSgxKQor
ICAgICAgICAsIG1fZmFtaWx5KEZvbnRQbGF0Zm9ybURhdGE6OmRlZmF1bHRGb250RmFtaWx5KCkp
CisgICAgICAgICwgbV9zaXplKHNpemUpCisgICAgICAgICwgbV9mb250U2NhbGVkV2lkdGgoMCkK
KyAgICAgICAgLCBtX2ZvbnRTY2FsZWRIZWlnaHQoMCkKKyAgICAgICAgLCBtX2Rpc2FibGVkKGZh
bHNlKQorICAgIHsKKyAgICAgICAgbV9yb290Rm9udERhdGEgPSBjcmVhdGVGaXhlZFNpemVGb250
RGF0YShtX2ZhbWlseSwgd2VpZ2h0LCBmYWxzZSk7CisgICAgfQorICAgIEZvbnRQbGF0Zm9ybVBy
aXZhdGVEYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseSkKKyAgICAgICAgOiBtX3JlZmVyZW5jZSgxKQorICAgICAgICAs
IG1fc2l6ZShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkKKyAgICAgICAgLCBt
X2ZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pCisgICAgICAgICwgbV9mYW1pbHkoZmFt
aWx5KQorICAgICAgICAsIG1fZm9udFNjYWxlZFdpZHRoKDApCisgICAgICAgICwgbV9mb250U2Nh
bGVkSGVpZ2h0KDApCisgICAgICAgICwgbV9kaXNhYmxlZChmb250RGVzY3JpcHRpb24uc3BlY2lm
aWVkU2l6ZSgpID09IDApCisgICAgeworICAgICAgICBtX3Jvb3RGb250RGF0YSA9IEZpeGVkU2l6
ZUZvbnREYXRhOjpjcmVhdGUoZmFtaWx5LCB0b0dESUZvbnRXZWlnaHQoZm9udERlc2NyaXB0aW9u
LndlaWdodCgpKSwgZm9udERlc2NyaXB0aW9uLml0YWxpYygpKTsKKyAgICB9Cit9OworCitGb250
UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGRlc2lyZWRGYW1pbHksIGJvb2wgdXNl
RGVmYXVsdEZvbnRJZk5vdFByZXNlbnQpCit7CisgICAgU3RyaW5nIGZhbWlseShkZXNpcmVkRmFt
aWx5KTsKKyAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwgZGVmYXVsdEZvbnRGYW1p
bHkoKSkgJiYgIUZvbnRGYW1pbHlDaGVja2VyKGZhbWlseS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJt
aW5hdGlvbigpKS5pc1N1cHBvcnRlZCgpKSB7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShmYW1pbHksIFN0cmluZyhoZWlUaVN0cikpICYmIGlzU29uZ1RpU3VwcG9ydGVkKCkpCisgICAg
ICAgICAgICBmYW1pbHkgPSBTdHJpbmcoc29uZ1RpU3RyKTsKKyAgICAgICAgZWxzZSBpZiAodXNl
RGVmYXVsdEZvbnRJZk5vdFByZXNlbnQpCisgICAgICAgICAgICBmYW1pbHkgPSBkZWZhdWx0Rm9u
dEZhbWlseSgpOworICAgIH0KKworICAgIG1fcHJpdmF0ZSA9IG5ldyBGb250UGxhdGZvcm1Qcml2
YXRlRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6
OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpCit7
CisgICAgaWYgKCFzaXplKQorICAgICAgICBtX3ByaXZhdGUgPSAwOworICAgIGVsc2UKKyAgICAg
ICAgbV9wcml2YXRlID0gbmV3IEZvbnRQbGF0Zm9ybVByaXZhdGVEYXRhKChpbnQpKHNpemUgKyAw
LjUpLCBib2xkID8gRldfQk9MRCA6IEZXX05PUk1BTCk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6
On5Gb250UGxhdGZvcm1EYXRhKCkKK3sKKyAgICBpZiAoaXNWYWxpZCgpICYmICEtLW1fcHJpdmF0
ZS0+bV9yZWZlcmVuY2UpIHsKKyAgICAgICAgaWYgKG1fcHJpdmF0ZS0+bV9yb290Rm9udERhdGEt
PnJlZkNvdW50KCkgPT0gMikgeworICAgICAgICAgICAgRml4ZWRTaXplRm9udERhdGFLZXkga2V5
KG1fcHJpdmF0ZS0+bV9mYW1pbHksIG1fcHJpdmF0ZS0+bV9yb290Rm9udERhdGEtPm1fd2VpZ2h0
LCBtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5tX2l0YWxpYyk7CisgICAgICAgICAgICBnX2Zp
eGVkU2l6ZUZvbnRDYWNoZS5yZW1vdmUoa2V5KTsKKyAgICAgICAgfQorICAgICAgICBkZWxldGUg
bV9wcml2YXRlOworICAgIH0KK30KKworRm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0
YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG8pCit7CisgICAgaWYgKGlzVmFs
aWQoKSAmJiAhLS1tX3ByaXZhdGUtPm1fcmVmZXJlbmNlKQorICAgICAgICBkZWxldGUgbV9wcml2
YXRlOworCisgICAgaWYgKG1fcHJpdmF0ZSA9IG8ubV9wcml2YXRlKQorICAgICAgICArK21fcHJp
dmF0ZS0+bV9yZWZlcmVuY2U7CisKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0hGT05UIEZvbnRQ
bGF0Zm9ybURhdGE6Omhmb250KCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBpZiAobV9wcml2YXRlLT5tX2Rpc2FibGVkKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGlmICghbV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9oZm9udCkK
KyAgICAgICAgbV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9oZm9udC5zZXQoQ3JlYXRlRm9u
dEluZGlyZWN0KCZtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5tX2ZvbnQpKTsKKworICAgIHJl
dHVybiBtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5tX2hmb250LmdldCgpOworfQorCitIRk9O
VCBGb250UGxhdGZvcm1EYXRhOjpnZXRTY2FsZWRGb250SGFuZGxlKGludCBoZWlnaHQsIGludCB3
aWR0aCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSB8fCBtX3ByaXZhdGUtPm1fZGlzYWJs
ZWQpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFtX3ByaXZhdGUtPm1faGZvbnRTY2Fs
ZWQgfHwgbV9wcml2YXRlLT5tX2ZvbnRTY2FsZWRIZWlnaHQgIT0gaGVpZ2h0IHx8IG1fcHJpdmF0
ZS0+bV9mb250U2NhbGVkV2lkdGggIT0gd2lkdGgpIHsKKyAgICAgICAgbV9wcml2YXRlLT5tX2Zv
bnRTY2FsZWRIZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIG1fcHJpdmF0ZS0+bV9mb250U2NhbGVk
V2lkdGggPSB3aWR0aDsKKyAgICAgICAgTE9HRk9OVCBmb250ID0gbV9wcml2YXRlLT5tX3Jvb3RG
b250RGF0YS0+bV9mb250OworICAgICAgICBmb250LmxmSGVpZ2h0ID0gLWhlaWdodDsKKyAgICAg
ICAgZm9udC5sZldpZHRoID0gd2lkdGg7CisgICAgICAgIG1fcHJpdmF0ZS0+bV9oZm9udFNjYWxl
ZC5zZXQoQ3JlYXRlRm9udEluZGlyZWN0KCZmb250KSk7CisgICAgfQorCisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+bV9oZm9udFNjYWxlZC5nZXQoKTsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRh
OjpkaXNjYXJkRm9udEhhbmRsZSgpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5tX2hmb250
KSB7CisgICAgICAgIG1fcHJpdmF0ZS0+bV9yb290Rm9udERhdGEtPm1faGZvbnQuc2V0KDApOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9wcml2YXRlLT5tX2hmb250
U2NhbGVkKSB7CisgICAgICAgIG1fcHJpdmF0ZS0+bV9oZm9udFNjYWxlZC5zZXQoMCk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2NvbnN0IFRF
WFRNRVRSSUMmIEZvbnRQbGF0Zm9ybURhdGE6Om1ldHJpY3MoKSBjb25zdAoreworICAgIHJldHVy
biBtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5tX21ldHJpY3M7Cit9CisKK2Jvb2wgRm9udFBs
YXRmb3JtRGF0YTo6aXNTeXN0ZW1Gb250KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2ludCBGb250UGxhdGZvcm1EYXRhOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLT5tX3NpemU7Cit9CisKK2NvbnN0IEZvbnREZXNjcmlwdGlvbiYgRm9udFBsYXRmb3Jt
RGF0YTo6Zm9udERlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5t
X2ZvbnREZXNjcmlwdGlvbjsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBGb250UGxhdGZvcm1E
YXRhOjpmYW1pbHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fZmFtaWx5Owor
fQorCitjb25zdCBMT0dGT05UJiBGb250UGxhdGZvcm1EYXRhOjpsb2dGb250KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9mb250OworfQorCitpbnQg
Rm9udFBsYXRmb3JtRGF0YTo6YXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IChtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5tX21ldHJpY3MudG1BdmVDaGFyV2lkdGggKiBz
aXplKCkgKyAzNikgLyA3MjsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc0Rpc2FibGVk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWlzVmFsaWQoKSB8fCBtX3ByaXZhdGUtPm1fZGlzYWJs
ZWQ7Cit9CisKK0RXT1JEIEZvbnRQbGF0Zm9ybURhdGE6OmNvZGVQYWdlcygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yb290Rm9udERhdGEtPm1fY29kZVBhZ2VzOworfQorCiti
b29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzU29uZ1RpU3VwcG9ydGVkKCkKK3sKKyAgICBzdGF0aWMg
Ym9vbCBleGlzdHMgPSBGb250RmFtaWx5Q2hlY2tlcihzb25nVGlTdHIpLmlzU3VwcG9ydGVkKCk7
CisgICAgcmV0dXJuIGV4aXN0czsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjptYXBLbm93
bkZvbnQoRFdPUkQgY29kZVBhZ2VzLCBTdHJpbmcmIGZhbWlseSkKK3sKKyAgICBLbm93bkZvbnRz
JiBmb250cyA9IGtub3duRm9udHMoKTsKKyAgICBmb3IgKEtub3duRm9udHM6Oml0ZXJhdG9yIGkg
PSBmb250cy5iZWdpbigpOyBpICE9IGZvbnRzLmVuZCgpOyArK2kpIHsKKyAgICAgICAgaWYgKGkt
PmNvZGVQYWdlcygpICYgY29kZVBhZ2VzKSB7CisgICAgICAgICAgICBmYW1pbHkgPSBpLT5tX2Zh
bWlseTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKworRFdPUkQgRm9udFBsYXRmb3JtRGF0YTo6Z2V0S25vd25Gb250Q29k
ZVBhZ2VzKGNvbnN0IHdjaGFyX3QqIGZhbWlseSkKK3sKKyAgICBLbm93bkZvbnRzJiBmb250cyA9
IGtub3duRm9udHMoKTsKKyAgICBmb3IgKEtub3duRm9udHM6Oml0ZXJhdG9yIGkgPSBmb250cy5i
ZWdpbigpOyBpICE9IGZvbnRzLmVuZCgpOyArK2kpIHsKKyAgICAgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKGktPm1fZmFtaWx5LCBTdHJpbmcoZmFtaWx5KSkpCisgICAgICAgICAgICByZXR1cm4g
aS0+Y29kZVBhZ2VzKCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitjb25zdCBTdHJpbmcm
IEZvbnRQbGF0Zm9ybURhdGE6OmRlZmF1bHRGb250RmFtaWx5KCkKK3sKKyAgICBzdGF0aWMgU3Ry
aW5nIGZhbWlseShnZXREZWZhdWx0Rm9udEZhbWlseSgpKTsKKyAgICByZXR1cm4gZmFtaWx5Owor
fQorCitMT05HIEZvbnRQbGF0Zm9ybURhdGE6OmFkanVzdGVkR0RJRm9udFdlaWdodChMT05HIGdk
aUZvbnRXZWlnaHQsIGNvbnN0IFN0cmluZyYgZmFtaWx5KQoreworICAgIHN0YXRpYyBBdG9taWNT
dHJpbmcgbHVjaWRhU3RyKCJMdWNpZGEgR3JhbmRlIik7CisgICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKGZhbWlseSwgbHVjaWRhU3RyKSkgeworICAgICAgICBpZiAoZ2RpRm9udFdlaWdodCA9PSBG
V19OT1JNQUwpCisgICAgICAgICAgICByZXR1cm4gRldfTUVESVVNOworICAgICAgICBpZiAoZ2Rp
Rm9udFdlaWdodCA9PSBGV19CT0xEKQorICAgICAgICAgICAgcmV0dXJuIEZXX1NFTUlCT0xEOwor
ICAgIH0KKyAgICByZXR1cm4gZ2RpRm9udFdlaWdodDsKK30KKworfQorCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MDI3ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtMCwwICsx
LDg0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1w
bGVtZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGJ5IGFueW9uZSBvdGhlciB0
aGFuCisgKiBGb250TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5kIEZvbnQuY3BwLgorICoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAwOCBUb3JjaCBNb2JpbGUsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgRm9udFBsYXRmb3JtRGF0YVdpbmNl
X0gKKyNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YVdpbmNlX0gKKworI2luY2x1ZGUgIlN0cmluZ0lt
cGwuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlICJGb250RGVzY3Jp
cHRpb24uaCIKKwordHlwZWRlZiBzdHJ1Y3QgdGFnVEVYVE1FVFJJQ1cgVEVYVE1FVFJJQzsKK3R5
cGVkZWYgc3RydWN0IHRhZ0xPR0ZPTlRXIExPR0ZPTlQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworICAgIGNsYXNzIEZvbnRQbGF0Zm9ybVByaXZhdGVEYXRhOworCisgICAgY2xhc3MgRm9udFBs
YXRmb3JtRGF0YQorICAgIHsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0
YSgpOiBtX3ByaXZhdGUoMCkge30KKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXpl
LCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSk7CisKKyAgICAgICAgLy8gVXNlZCBmb3IgZGVsZXRl
ZCB2YWx1ZXMgaW4gdGhlIGZvbnQgY2FjaGUncyBoYXNoIHRhYmxlcy4KKyAgICAgICAgRm9udFBs
YXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpIDogbV9wcml2YXRlKChG
b250UGxhdGZvcm1Qcml2YXRlRGF0YSopMSkge30KKyAgICAgICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICh1bnNpZ25lZCltX3ByaXZhdGUgPT0gMTsgfQor
CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBib29sIHVzZURlZmF1bHRGb250
SWZOb3RQcmVzZW50ID0gdHJ1ZSk7CisKKyAgICAgICAgfkZvbnRQbGF0Zm9ybURhdGEoKTsKKwor
ICAgICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG8pIDogbV9w
cml2YXRlKDApIHsgb3BlcmF0b3I9KG8pOyB9CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9w
ZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvKTsKKworICAgICAgICBpbnQgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG1fcHJpdmF0ZSkg
JiB+MTsgfQorICAgICAgICBIRk9OVCBoZm9udCgpIGNvbnN0OworICAgICAgICBjb25zdCBURVhU
TUVUUklDJiBtZXRyaWNzKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNTeXN0ZW1Gb250KCkgY29u
c3Q7CisgICAgICAgIGludCBzaXplKCkgY29uc3Q7CisgICAgICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdCB7IHJldHVybiAodW5zaWduZWQpbV9wcml2YXRlOyB9CisgICAgICAgIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgY29uc3Q7CisgICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5KCkgY29uc3Q7CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QgeyAgICAgcmV0dXJuIG1fcHJpdmF0ZSA9PSBv
dGhlci5tX3ByaXZhdGU7IH0KKyAgICAgICAgSEZPTlQgZ2V0U2NhbGVkRm9udEhhbmRsZShpbnQg
aGVpZ2h0LCBpbnQgd2lkdGgpIGNvbnN0OworICAgICAgICBjb25zdCBMT0dGT05UJiBsb2dGb250
KCkgY29uc3Q7CisgICAgICAgIGludCBhdmVyYWdlQ2hhcldpZHRoKCkgY29uc3Q7CisgICAgICAg
IGJvb2wgaXNEaXNhYmxlZCgpIGNvbnN0OworICAgICAgICBib29sIGRpc2NhcmRGb250SGFuZGxl
KCk7CisgICAgICAgIERXT1JEIGNvZGVQYWdlcygpIGNvbnN0OworCisgICAgICAgIHN0YXRpYyBi
b29sIGlzU29uZ1RpU3VwcG9ydGVkKCk7CisgICAgICAgIHN0YXRpYyBib29sIG1hcEtub3duRm9u
dChEV09SRCBjb2RlUGFnZXMsIFN0cmluZyYgZmFtaWx5KTsKKyAgICAgICAgc3RhdGljIERXT1JE
IGdldEtub3duRm9udENvZGVQYWdlcyhjb25zdCB3Y2hhcl90KiBmYW1pbHkpOworICAgICAgICBz
dGF0aWMgY29uc3QgU3RyaW5nJiBkZWZhdWx0Rm9udEZhbWlseSgpOworICAgICAgICBzdGF0aWMg
TE9ORyBhZGp1c3RlZEdESUZvbnRXZWlnaHQoTE9ORyBnZGlGb250V2VpZ2h0LCBjb25zdCBTdHJp
bmcmIGZhbWlseSk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgRm9udFBsYXRmb3JtUHJpdmF0ZURh
dGEqIG1fcHJpdmF0ZTsKKyAgICB9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250V2luY2UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9Gb250V2luY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmNkYzc0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL0ZvbnRXaW5jZS5jcHAKQEAgLTAsMCArMSwzMzQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgorICogQ29weXJpZ2h0
IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250LmgiCisKKyNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250RGF0YS5oIgor
I2luY2x1ZGUgIkZvbnRGYWxsYmFja0xpc3QuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgi
CisjaW5jbHVkZSAiV2lkdGhJdGVyYXRvci5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUu
aD4KKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjo6VW5pY29k
ZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitIREMgZ19zY3JlZW5EQyA9IEdldERDKDApOwor
CitjbGFzcyBTY3JlZW5EY1JlbGVhc2VyCit7CitwdWJsaWM6CisgICAgflNjcmVlbkRjUmVsZWFz
ZXIoKQorICAgIHsKKyAgICAgICAgUmVsZWFzZURDKDAsIGdfc2NyZWVuREMpOworICAgIH0KK307
CisKK1NjcmVlbkRjUmVsZWFzZXIgcmVsZWFzZVNjcmVlbkRjOworCit2b2lkIEZvbnQ6OmRyYXdH
bHlwaHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCAKKyAgICAgICAg
ICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpIGNvbnN0Cit7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGV4dChmb250RGF0YSwg
Z2x5cGhCdWZmZXIsIGZyb20sIG51bUdseXBocywgcG9pbnQpOworfQorCitjbGFzcyBUZXh0UnVu
Q29tcG9uZW50IHsKK3B1YmxpYzoKKyAgICBUZXh0UnVuQ29tcG9uZW50KCkgOiBtX3RleHRSdW4o
MCwgMCkge30KKyAgICBUZXh0UnVuQ29tcG9uZW50KGNvbnN0IFVDaGFyICpzdGFydCwgaW50IGxl
bmd0aCwgY29uc3QgVGV4dFJ1biYgcGFyZW50VGV4dFJ1biwgY29uc3QgRm9udCAmZm9udCwgaW50
IG9mZnNldCk7CisgICAgVGV4dFJ1bkNvbXBvbmVudChpbnQgc3BhY2VzLCBjb25zdCBGb250ICZm
b250LCBpbnQgb2Zmc2V0KTsKKyAgICB+VGV4dFJ1bkNvbXBvbmVudCgpIHsgbV90ZXh0UnVuOyB9
CisKKyAgICBib29sIGlzU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlcyAhPSAwOyB9Cisg
ICAgaW50IHRleHRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlcyA/IG1fc3BhY2VzIDog
bV90ZXh0UnVuLmxlbmd0aCgpOyB9CisKKyAgICBUZXh0UnVuIG1fdGV4dFJ1bjsKKyAgICBmbG9h
dCBtX3dpZHRoOworICAgIGludCBtX29mZnNldDsKKyAgICBpbnQgbV9zcGFjZXM7Cit9OworCitU
ZXh0UnVuQ29tcG9uZW50OjpUZXh0UnVuQ29tcG9uZW50KGNvbnN0IFVDaGFyICpzdGFydCwgaW50
IGxlbmd0aCwgY29uc3QgVGV4dFJ1biYgcGFyZW50VGV4dFJ1biwgY29uc3QgRm9udCAmZm9udCwg
aW50IG8pCisgICAgOiBtX3RleHRSdW4oc3RhcnQsIGxlbmd0aCwgcGFyZW50VGV4dFJ1bi5hbGxv
d1RhYnMoKSwgMCwgMAorICAgICAgICAsIHBhcmVudFRleHRSdW4ucnRsKCkKKyAgICAgICAgLCBw
YXJlbnRUZXh0UnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKQorICAgICAgICAsIHBhcmVudFRleHRS
dW4uYXBwbHlSdW5Sb3VuZGluZygpCisgICAgICAgICwgcGFyZW50VGV4dFJ1bi5hcHBseVdvcmRS
b3VuZGluZygpKQorICAgICwgbV9vZmZzZXQobykKKyAgICAsIG1fc3BhY2VzKDApCit7CisgICAg
V2lkdGhJdGVyYXRvciBpdCgmZm9udCwgbV90ZXh0UnVuKTsKKyAgICBpdC5hZHZhbmNlKG1fdGV4
dFJ1bi5sZW5ndGgoKSwgMCk7CisgICAgbV93aWR0aCA9IGl0Lm1fcnVuV2lkdGhTb0ZhcjsKK30K
KworVGV4dFJ1bkNvbXBvbmVudDo6VGV4dFJ1bkNvbXBvbmVudChpbnQgcywgY29uc3QgRm9udCAm
Zm9udCwgaW50IG8pCisgICAgOiBtX3RleHRSdW4oMCwgMCkKKyAgICAsIG1fb2Zmc2V0KG8pCisg
ICAgLCBtX3NwYWNlcyhzKQoreworICAgIG1fd2lkdGggPSBzICogZm9udC5wcmltYXJ5Rm9udCgp
LT53aWR0aEZvckdseXBoKCcgJyk7Cit9CisKK3R5cGVkZWYgVmVjdG9yPFRleHRSdW5Db21wb25l
bnQsIDEyOD4gVGV4dFJ1bkNvbXBvbmVudHM7CisKK3N0YXRpYyBpbnQgZ2VuZXJhdGVDb21wb25l
bnRzKFRleHRSdW5Db21wb25lbnRzKiBjb21wb25lbnRzLCBjb25zdCBGb250ICZmb250LCBjb25z
dCBUZXh0UnVuICZydW4pCit7CisgICAgaW50IGxldHRlclNwYWNpbmcgPSBmb250LmxldHRlclNw
YWNpbmcoKTsKKyAgICBpbnQgd29yZFNwYWNpbmcgPSBmb250LndvcmRTcGFjaW5nKCk7CisgICAg
aW50IHBhZGRpbmcgPSBydW4ucGFkZGluZygpOworICAgIGludCBudW1TcGFjZXMgPSAwOworICAg
IGlmIChwYWRkaW5nKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcnVuLmxlbmd0aCgp
OyBpKyspCisgICAgICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKHJ1bltpXSkpCisgICAg
ICAgICAgICAgICAgKytudW1TcGFjZXM7CisgICAgfQorCisgICAgaW50IG9mZnNldCA9IDA7Cisg
ICAgaWYgKGxldHRlclNwYWNpbmcpIHsKKyAgICAgICAgLy8gbmVlZCB0byBkcmF3IGV2ZXJ5IGxl
dHRlciBvbiBpdCdzIG93bgorICAgICAgICBpbnQgc3RhcnQgPSAwOworICAgICAgICBpZiAoRm9u
dDo6dHJlYXRBc1NwYWNlKHJ1blswXSkpIHsKKyAgICAgICAgICAgIGludCBhZGQgPSAwOworICAg
ICAgICAgICAgaWYgKG51bVNwYWNlcykgeworICAgICAgICAgICAgICAgIGFkZCA9IHBhZGRpbmcv
bnVtU3BhY2VzOworICAgICAgICAgICAgICAgIHBhZGRpbmcgLT0gYWRkOworICAgICAgICAgICAg
ICAgIC0tbnVtU3BhY2VzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29tcG9uZW50cy0+
YXBwZW5kKFRleHRSdW5Db21wb25lbnQoMSwgZm9udCwgb2Zmc2V0KSk7CisgICAgICAgICAgICBv
ZmZzZXQgKz0gYWRkICsgbGV0dGVyU3BhY2luZyArIGNvbXBvbmVudHMtPmxhc3QoKS5tX3dpZHRo
OworICAgICAgICAgICAgc3RhcnQgPSAxOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkg
PSAxOyBpIDwgcnVuLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIHVpbnQgY2ggPSBydW5b
aV07CisgICAgICAgICAgICBpZiAoaXNIaWdoU3Vycm9nYXRlKGNoKSAmJiBpc0xvd1N1cnJvZ2F0
ZShydW5baS0xXSkpCisgICAgICAgICAgICAgICAgY2ggPSBzdXJyb2dhdGVUb1VjczQoY2gsIHJ1
bltpLTFdKTsKKyAgICAgICAgICAgIGlmIChpc0xvd1N1cnJvZ2F0ZShjaCkgfHwgY2F0ZWdvcnko
Y2gpID09IE1hcmtfTm9uU3BhY2luZykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIGlmIChGb250Ojp0cmVhdEFzU3BhY2UocnVuW2ldKSkgeworICAgICAgICAgICAgICAg
IGludCBhZGQgPSAwOworICAgICAgICAgICAgICAgIGlmIChpIC0gc3RhcnQgPiAwKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbXBvbmVudHMtPmFwcGVuZChUZXh0UnVuQ29tcG9uZW50KHJ1bi5j
aGFyYWN0ZXJzKCkgKyBzdGFydCwgaSAtIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4sIGZvbnQsIG9mZnNldCkpOworICAg
ICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gY29tcG9uZW50cy0+bGFzdCgpLm1fd2lkdGggKyBs
ZXR0ZXJTcGFjaW5nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobnVt
U3BhY2VzKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZCA9IHBhZGRpbmcvbnVtU3BhY2VzOwor
ICAgICAgICAgICAgICAgICAgICBwYWRkaW5nIC09IGFkZDsKKyAgICAgICAgICAgICAgICAgICAg
LS1udW1TcGFjZXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbXBvbmVu
dHMtPmFwcGVuZChUZXh0UnVuQ29tcG9uZW50KDEsIGZvbnQsIG9mZnNldCkpOworICAgICAgICAg
ICAgICAgIG9mZnNldCArPSB3b3JkU3BhY2luZyArIGFkZCArIGNvbXBvbmVudHMtPmxhc3QoKS5t
X3dpZHRoICsgbGV0dGVyU3BhY2luZzsKKyAgICAgICAgICAgICAgICBzdGFydCA9IGkgKyAxOwor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGkgLSBzdGFydCA+IDApIHsKKyAgICAgICAgICAgICAgICBjb21wb25lbnRzLT5hcHBlbmQoVGV4
dFJ1bkNvbXBvbmVudChydW4uY2hhcmFjdGVycygpICsgc3RhcnQsIGkgLSBzdGFydCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udCwgb2Zm
c2V0KSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGNvbXBvbmVudHMtPmxhc3QoKS5tX3dp
ZHRoICsgbGV0dGVyU3BhY2luZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXJ0ID0g
aTsKKyAgICAgICAgfQorICAgICAgICBpZiAocnVuLmxlbmd0aCgpIC0gc3RhcnQgPiAwKSB7Cisg
ICAgICAgICAgICBjb21wb25lbnRzLT5hcHBlbmQoVGV4dFJ1bkNvbXBvbmVudChydW4uY2hhcmFj
dGVycygpICsgc3RhcnQsIHJ1bi5sZW5ndGgoKSAtIHN0YXJ0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udCwgb2Zmc2V0KSk7CisgICAgICAgICAgICBv
ZmZzZXQgKz0gY29tcG9uZW50cy0+bGFzdCgpLm1fd2lkdGg7CisgICAgICAgIH0KKyAgICAgICAg
b2Zmc2V0ICs9IGxldHRlclNwYWNpbmc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IHN0YXJ0
ID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBydW4ubGVuZ3RoKCk7ICsraSkgewor
ICAgICAgICAgICAgaWYgKEZvbnQ6OnRyZWF0QXNTcGFjZShydW5baV0pKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGkgLSBzdGFydCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50
cy0+YXBwZW5kKFRleHRSdW5Db21wb25lbnQocnVuLmNoYXJhY3RlcnMoKSArIHN0YXJ0LCBpIC0g
c3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJ1biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9udCwgb2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCAr
PSBjb21wb25lbnRzLT5sYXN0KCkubV93aWR0aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaW50IGFkZCA9IDA7CisgICAgICAgICAgICAgICAgaWYgKG51bVNwYWNlcykgewor
ICAgICAgICAgICAgICAgICAgICBhZGQgPSBwYWRkaW5nL251bVNwYWNlczsKKyAgICAgICAgICAg
ICAgICAgICAgcGFkZGluZyAtPSBhZGQ7CisgICAgICAgICAgICAgICAgICAgIC0tbnVtU3BhY2Vz
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb21wb25lbnRzLT5hcHBlbmQo
VGV4dFJ1bkNvbXBvbmVudCgxLCBmb250LCBvZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBvZmZz
ZXQgKz0gYWRkICsgY29tcG9uZW50cy0+bGFzdCgpLm1fd2lkdGg7CisgICAgICAgICAgICAgICAg
aWYgKGkpCisgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSB3b3JkU3BhY2luZzsKKyAgICAg
ICAgICAgICAgICBzdGFydCA9IGkgKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGlmIChydW4ubGVuZ3RoKCkgLSBzdGFydCA+IDApIHsKKyAgICAgICAgICAgIGNvbXBvbmVu
dHMtPmFwcGVuZChUZXh0UnVuQ29tcG9uZW50KHJ1bi5jaGFyYWN0ZXJzKCkgKyBzdGFydCwgcnVu
Lmxlbmd0aCgpIC0gc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBydW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb250LCBvZmZzZXQpKTsKKyAgICAgICAgICAgIG9mZnNldCArPSBjb21wb25lbnRz
LT5sYXN0KCkubV93aWR0aDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gb2Zmc2V0Owor
fQorCit2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIGlmICh0byA8
IDApCisgICAgICAgIHRvID0gcnVuLmxlbmd0aCgpOworICAgIGlmIChmcm9tIDwgMCkKKyAgICAg
ICAgZnJvbSA9IDA7CisKKyAgICBUZXh0UnVuQ29tcG9uZW50cyBjb21wb25lbnRzOworICAgIGlu
dCB3ID0gZ2VuZXJhdGVDb21wb25lbnRzKCZjb21wb25lbnRzLCAqdGhpcywgcnVuKTsKKworICAg
IGludCBjdXJQb3MgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKGludCljb21wb25lbnRz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFRleHRSdW5Db21wb25lbnQmIGNvbXAgPSBj
b21wb25lbnRzLmF0KGkpOworICAgICAgICBpbnQgbGVuID0gY29tcC50ZXh0TGVuZ3RoKCk7Cisg
ICAgICAgIGludCBjdXJFbmQgPSBjdXJQb3MgKyBsZW47CisgICAgICAgIGlmIChjdXJQb3MgPCB0
byAmJiBmcm9tIDwgY3VyRW5kICYmICFjb21wLmlzU3BhY2UoKSkgeworICAgICAgICAgICAgRmxv
YXRQb2ludCBwdCA9IHBvaW50OworICAgICAgICAgICAgaWYgKHJ1bi5ydGwoKSkKKyAgICAgICAg
ICAgICAgICBwdC5zZXRYKHBvaW50LngoKSArIHcgLSBjb21wLm1fb2Zmc2V0IC0gY29tcC5tX3dp
ZHRoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwdC5zZXRYKHBvaW50Lngo
KSArIGNvbXAubV9vZmZzZXQpOworICAgICAgICAgICAgZHJhd1NpbXBsZVRleHQoY29udGV4dCwg
Y29tcC5tX3RleHRSdW4sIHB0LCBmcm9tIC0gY3VyUG9zLCBzdGQ6Om1pbih0bywgY3VyRW5kKSAt
IGN1clBvcyk7CisgICAgICAgIH0KKyAgICAgICAgY3VyUG9zICs9IGxlbjsKKyAgICAgICAgaWYg
KGZyb20gPCBjdXJQb3MpCisgICAgICAgICAgICBmcm9tID0gY3VyUG9zOworICAgIH0KK30KKwor
ZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKSBjb25zdAorewor
ICAgIFRleHRSdW5Db21wb25lbnRzIGNvbXBvbmVudHM7CisgICAgaW50IHcgPSBnZW5lcmF0ZUNv
bXBvbmVudHMoJmNvbXBvbmVudHMsICp0aGlzLCBydW4pOworICAgIHJldHVybiB3OworfQorCitp
bnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBy
dW4sIGludCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKK3sKKyAg
IFRleHRSdW5Db21wb25lbnRzIGNvbXBvbmVudHM7CisgICAgaW50IHcgPSBnZW5lcmF0ZUNvbXBv
bmVudHMoJmNvbXBvbmVudHMsICp0aGlzLCBydW4pOworCisgICAgaWYgKHBvc2l0aW9uID49IHcp
CisgICAgICAgIHJldHVybiBydW4ubGVuZ3RoKCk7CisKKyAgICBpbnQgb2Zmc2V0ID0gMDsKKyAg
ICBpZiAocnVuLnJ0bCgpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29tcG9u
ZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgVGV4dFJ1bkNvbXBvbmVudCYg
Y29tcCA9IGNvbXBvbmVudHMuYXQoaSk7CisgICAgICAgICAgICBpbnQgeGUgPSB3IC0gY29tcC5t
X29mZnNldDsKKyAgICAgICAgICAgIGludCB4cyA9IHhlIC0gY29tcC5tX3dpZHRoOworICAgICAg
ICAgICAgaWYgKHBvc2l0aW9uID49IHhzKQorICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQg
KyAoY29tcC5pc1NwYWNlKCkKKyAgICAgICAgICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxpbnQ+
KChwb3NpdGlvbiAtIHhlKSAqIGNvbXAubV9zcGFjZXMgLyBzdGQ6Om1heCgxLmYsIGNvbXAubV93
aWR0aCkgKyAwLjUpCisgICAgICAgICAgICAgICAgICAgIDogb2Zmc2V0Rm9yUG9zaXRpb25Gb3JT
aW1wbGVUZXh0KGNvbXAubV90ZXh0UnVuLCBwb3NpdGlvbiAtIHhzLCBpbmNsdWRlUGFydGlhbEds
eXBocykpOworCisgICAgICAgICAgICBvZmZzZXQgKz0gY29tcC50ZXh0TGVuZ3RoKCk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbXBv
bmVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFRleHRSdW5Db21wb25lbnQm
IGNvbXAgPSBjb21wb25lbnRzLmF0KGkpOworICAgICAgICAgICAgaW50IHhzID0gY29tcC5tX29m
ZnNldDsKKyAgICAgICAgICAgIGludCB4ZSA9IHhzICsgY29tcC5tX3dpZHRoOworICAgICAgICAg
ICAgaWYgKHBvc2l0aW9uIDw9IHhlKSB7CisgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uIC0g
eHMgPj0geGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQgKyBjb21wLnRleHRM
ZW5ndGgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0ICsgKGNvbXAuaXNTcGFjZSgp
CisgICAgICAgICAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8aW50PigocG9zaXRpb24gLSB4cykg
KiBjb21wLm1fc3BhY2VzIC8gc3RkOjptYXgoMS5mLCBjb21wLm1fd2lkdGgpICsgMC41KQorICAg
ICAgICAgICAgICAgICAgICA6IG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb21wLm1f
dGV4dFJ1biwgcG9zaXRpb24gLSB4cywgaW5jbHVkZVBhcnRpYWxHbHlwaHMpKTsKKyAgICAgICAg
ICAgIH0gCisgICAgICAgICAgICBvZmZzZXQgKz0gY29tcC50ZXh0TGVuZ3RoKCk7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHJ1bi5sZW5ndGgoKTsKK30KKworCitzdGF0aWMgZmxvYXQg
Y3Vyc29yVG9YKGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW5Db21wb25lbnRzJiBjb21w
b25lbnRzLCBpbnQgd2lkdGgsIGJvb2wgcnRsLCBpbnQgY3Vyc29yKQoreworICAgIGludCBzdGFy
dCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb21wb25lbnRzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGNvbnN0IFRleHRSdW5Db21wb25lbnQmIGNvbXAgPSBjb21wb25lbnRzLmF0
KGkpOworICAgICAgICBpZiAoc3RhcnQgKyBjb21wLnRleHRMZW5ndGgoKSA8PSBjdXJzb3IpIHsK
KyAgICAgICAgICAgIHN0YXJ0ICs9IGNvbXAudGV4dExlbmd0aCgpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgaW50IHhzID0gY29tcC5tX29mZnNldDsKKyAgICAg
ICAgaWYgKHJ0bCkKKyAgICAgICAgICAgIHhzID0gd2lkdGggLSB4cyAtIGNvbXAubV93aWR0aDsK
KworICAgICAgICBpbnQgcG9zID0gY3Vyc29yIC0gc3RhcnQ7CisgICAgICAgIGlmIChjb21wLmlz
U3BhY2UoKSkgeworICAgICAgICAgICAgaWYgKHJ0bCkKKyAgICAgICAgICAgICAgICBwb3MgPSBj
b21wLnRleHRMZW5ndGgoKSAtIHBvczsKKyAgICAgICAgICAgIHJldHVybiB4cyArIHBvcyAqIGNv
bXAubV93aWR0aCAvIGNvbXAubV9zcGFjZXM7CisgICAgICAgIH0KKyAgICAgICAgV2lkdGhJdGVy
YXRvciBpdChmb250LCBjb21wLm1fdGV4dFJ1bik7CisgICAgICAgIGl0LmFkdmFuY2UocG9zKTsK
KyAgICAgICAgcmV0dXJuIHhzICsgaXQubV9ydW5XaWR0aFNvRmFyOworICAgIH0KKyAgICByZXR1
cm4gd2lkdGg7Cit9CisKK0Zsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBJbnRQb2ludCYgcHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7
CisgICAgVGV4dFJ1bkNvbXBvbmVudHMgY29tcG9uZW50czsKKyAgICBpbnQgdyA9IGdlbmVyYXRl
Q29tcG9uZW50cygmY29tcG9uZW50cywgKnRoaXMsIHJ1bik7CisKKyAgICBpZiAoZnJvbSA9PSAw
ICYmIHRvID09IHJ1bi5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChwdC54KCks
IHB0LnkoKSwgdywgaCk7CisKKyAgICBmbG9hdCB4MSA9IGN1cnNvclRvWCh0aGlzLCBjb21wb25l
bnRzLCB3LCBydW4ucnRsKCksIGZyb20pOworICAgIGZsb2F0IHgyID0gY3Vyc29yVG9YKHRoaXMs
IGNvbXBvbmVudHMsIHcsIHJ1bi5ydGwoKSwgdG8pOworICAgIGlmICh4MiA8IHgxKQorICAgICAg
ICBzdGQ6OnN3YXAoeDEsIHgyKTsKKworICAgIHJldHVybiBGbG9hdFJlY3QocHQueCgpICsgeDEs
IHB0LnkoKSwgeDIgLSB4MSwgaCk7Cit9CisKK2Jvb2wgRm9udDo6Y2FuUmV0dXJuRmFsbGJhY2tG
b250c0ZvckNvbXBsZXhUZXh0KCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR2x5cGhQYWdlVHJlZU5vZGVX
aW5jZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dseXBoUGFnZVRyZWVO
b2RlV2luY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MTQ2YWUK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dseXBo
UGFnZVRyZWVOb2RlV2luY2UuY3BwCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaSB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdseXBoUGFnZVRy
ZWVOb2RlLmgiCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNp
bmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZQoreworRFdPUkQgZ2V0S25vd25Gb250Q29kZVBhZ2VzKGNvbnN0IHdjaGFy
X3QqIGZhbWlseSk7CisKK3R5cGVkZWYgdW5zaWduZWQgKCpmdW5jR2V0Q2hhckNvZGVQYWdlcyko
dW5zaWduZWQgc2hvcnQgYywgdW5zaWduZWQmIGxhc3RQb3MpOworZnVuY0dldENoYXJDb2RlUGFn
ZXMgZ2V0Q2hhckNvZGVQYWdlcyA9IDA7CisKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJM
ZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3sKKyAgICBpZiAobGVuZ3Ro
ICE9IGJ1ZmZlckxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGZvbnRE
YXRhLT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpKSB7CisgICAgICAgIERXT1JEIGZvbnRDb2RlUGFn
ZXMgPSBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuY29kZVBhZ2VzKCk7CisgICAgICAgIGlmIChm
b250Q29kZVBhZ2VzKSB7CisgICAgICAgICAgICBpZiAoZ2V0Q2hhckNvZGVQYWdlcykgeworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGxhc3RQb3MgPSAwOworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAg
ICAgICBEV09SRCBhY3R1YWxDb2RlUGFnZXMgPSBnZXRDaGFyQ29kZVBhZ2VzKGJ1ZmZlcltpXSwg
bGFzdFBvcyk7CisgICAgICAgICAgICAgICAgICAgIGlmICghYWN0dWFsQ29kZVBhZ2VzIHx8IChh
Y3R1YWxDb2RlUGFnZXMgJiBmb250Q29kZVBhZ2VzKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGJ1ZmZlcltpXSwgZm9udERhdGEpOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRHbHlw
aERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBidWZmZXJbaV0sIDApOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyNpZiBkZWZpbmVkKElNTEFOR19GT05U
X0xJTkspICYmIChJTUxBTkdfRk9OVF9MSU5LID09IDIpCisgICAgICAgICAgICB9IGVsc2UgaWYg
KElNTGFuZ0ZvbnRMaW5rMiogbGFuZ0ZvbnRMaW5rID0gZm9udENhY2hlKCktPmdldEZvbnRMaW5r
SW50ZXJmYWNlKCkpIHsKKyNlbHNlCisgICAgICAgICAgICB9IGVsc2UgaWYgKElNTGFuZ0ZvbnRM
aW5rKiBsYW5nRm9udExpbmsgPSBmb250Q2FjaGUoKS0+Z2V0Rm9udExpbmtJbnRlcmZhY2UoKSkg
eworI2VuZGlmICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIERX
T1JEIGFjdHVhbENvZGVQYWdlczsKKyAgICAgICAgICAgICAgICAgICAgbGFuZ0ZvbnRMaW5rLT5H
ZXRDaGFyQ29kZVBhZ2VzKGJ1ZmZlcltpXSwgJmFjdHVhbENvZGVQYWdlcyk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghYWN0dWFsQ29kZVBhZ2VzIHx8IChhY3R1YWxDb2RlUGFnZXMgJiBmb250
Q29kZVBhZ2VzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4
KG9mZnNldCArIGksIGJ1ZmZlcltpXSwgZm9udERhdGEpOworICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQg
KyBpLCBidWZmZXJbaV0sIDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgc2V0R2x5cGhEYXRhRm9y
SW5kZXgob2Zmc2V0ICsgaSwgYnVmZmVyW2ldLCBmb250RGF0YSk7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNl
L1NpbXBsZUZvbnREYXRhV2luY2UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9TaW1wbGVGb250RGF0YVdpbmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi41YzRkNjgyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9TaW1wbGVGb250RGF0YVdpbmNlLmNwcApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKworI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5o
IgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8bWxhbmcuaD4KKyNpbmNs
dWRlIDx0Y2hhci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2V4dGVybiBIREMgZ19zY3Jl
ZW5EQzsKKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3sgICAgCisgICAg
aWYgKCFtX3BsYXRmb3JtRGF0YS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNv
bnN0IFRFWFRNRVRSSUMmIHRtID0gbV9wbGF0Zm9ybURhdGEubWV0cmljcygpOworICAgIG1faXNT
eXN0ZW1Gb250ID0gbV9wbGF0Zm9ybURhdGEuaXNTeXN0ZW1Gb250KCk7CisgICAgCisgICAgbV9h
c2NlbnQgPSAodG0udG1Bc2NlbnQgKiBtX3BsYXRmb3JtRGF0YS5zaXplKCkgKyAzNikgLyA3MjsK
KyAgICBtX2Rlc2NlbnQgPSAodG0udG1EZXNjZW50ICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICsg
MzYpIC8gNzI7CisgICAgbV9saW5lR2FwID0gKHRtLnRtRXh0ZXJuYWxMZWFkaW5nICogbV9wbGF0
Zm9ybURhdGEuc2l6ZSgpICsgMzYpIC8gNzI7CisgICAgbV9saW5lU3BhY2luZyA9IG1fYXNjZW50
ICsgbV9kZXNjZW50ICsgbV9saW5lR2FwOworICAgIG1feEhlaWdodCA9IG1fYXNjZW50ICogMC41
NmY7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCit7CisgICAg
ZGVsZXRlIG1fc21hbGxDYXBzRm9udERhdGE7CisgICAgbV9zbWFsbENhcHNGb250RGF0YSA9IDA7
Cit9CisKK1NpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAgaWYg
KCFtX3NtYWxsQ2Fwc0ZvbnREYXRhKSB7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Yyhmb250RGVzY3JpcHRpb24pOworICAgICAgICBmb250RGVzYy5zZXRDb21wdXRlZFNpemUobHJv
dW5kZigwLjcwZiAqIGZvbnREZXNjLmNvbXB1dGVkU2l6ZSgpKSk7CisgICAgICAgIGZvbnREZXNj
LnNldFNwZWNpZmllZFNpemUobHJvdW5kZigwLjcwZiAqIGZvbnREZXNjLnNwZWNpZmllZFNpemUo
KSkpOworICAgICAgICBmb250RGVzYy5zZXRLZXl3b3JkU2l6ZShscm91bmRmKDAuNzBmICogZm9u
dERlc2Mua2V5d29yZFNpemUoKSkpOworICAgICAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQg
PSBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzYywgbV9wbGF0
Zm9ybURhdGEuZmFtaWx5KCkpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgbV9z
bWFsbENhcHNGb250RGF0YSA9IG5ldyBTaW1wbGVGb250RGF0YSgqcmVzdWx0KTsKKyAgICB9Cisg
ICAgcmV0dXJuIG1fc21hbGxDYXBzRm9udERhdGE7Cit9CisKK0RXT1JEIGdldEtub3duRm9udENv
ZGVQYWdlcyhjb25zdCB3Y2hhcl90KiBmYW1pbHkpOworCitib29sIFNpbXBsZUZvbnREYXRhOjpj
b250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNv
bnN0Cit7CisgICAgaWYgKG1fcGxhdGZvcm1EYXRhLmlzRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAvLyBGSVhNRTogTWljcm9zb2Z0IGRvY3VtZW50YXRpb24gc2VlbXMg
dG8gaW1wbHkgdGhhdCBjaGFyYWN0ZXJzIGNhbiBiZSBvdXRwdXQgdXNpbmcgYSBnaXZlbiBmb250
IGFuZCBEQworICAgIC8vIG1lcmVseSBieSB0ZXN0aW5nIGNvZGUgcGFnZSBpbnRlcnNlY3Rpb24u
ICBUaGlzIHNlZW1zIHN1c3BlY3QgdGhvdWdoLiAgQ2FuJ3QgYSBmb250IG9ubHkgcGFydGlhbGx5
CisgICAgLy8gY292ZXIgYSBnaXZlbiBjb2RlIHBhZ2U/CisKKyAgICAvLyBGSVhNRTogaW4gdGhl
IGNhc2UgdGhhdCB3ZSBmYWlsZWQgdG8gZ2V0IHRoZSBpbnRlcmZhY2UsIHN0aWxsIHVzZSB0aGUg
Zm9udC4KKyNpZiBkZWZpbmVkKElNTEFOR19GT05UX0xJTkspICYmIChJTUxBTkdfRk9OVF9MSU5L
ID09IDIpCisgICAgSU1MYW5nRm9udExpbmsyKiBsYW5nRm9udExpbmsgPSBmb250Q2FjaGUoKS0+
Z2V0Rm9udExpbmtJbnRlcmZhY2UoKTsKKyNlbHNlCisgICAgSU1MYW5nRm9udExpbmsqIGxhbmdG
b250TGluayA9IGZvbnRDYWNoZSgpLT5nZXRGb250TGlua0ludGVyZmFjZSgpOworI2VuZGlmCisg
ICAgaWYgKCFsYW5nRm9udExpbmspCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgRFdPUkQg
Zm9udENvZGVQYWdlcyA9IG1fcGxhdGZvcm1EYXRhLmNvZGVQYWdlcygpOworICAgIGlmICghZm9u
dENvZGVQYWdlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRFdPUkQgYWNwQ29kZVBh
Z2VzID0gMDsKKyAgICBsYW5nRm9udExpbmstPkNvZGVQYWdlVG9Db2RlUGFnZXMoQ1BfQUNQLCAm
YWNwQ29kZVBhZ2VzKTsKKworICAgIERXT1JEIGFjdHVhbENvZGVQYWdlczsKKyAgICBsb25nIG51
bUNoYXJhY3RlcnNQcm9jZXNzZWQ7CisgICAgd2hpbGUgKGxlbmd0aCkgeworICAgICAgICBsYW5n
Rm9udExpbmstPkdldFN0ckNvZGVQYWdlcyhjaGFyYWN0ZXJzLCBsZW5ndGgsIGFjcENvZGVQYWdl
cywgJmFjdHVhbENvZGVQYWdlcywgJm51bUNoYXJhY3RlcnNQcm9jZXNzZWQpOworICAgICAgICBp
ZiAoYWN0dWFsQ29kZVBhZ2VzICYmIChhY3R1YWxDb2RlUGFnZXMgJiBmb250Q29kZVBhZ2VzKSA9
PSAwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGxlbmd0aCAtPSBudW1D
aGFyYWN0ZXJzUHJvY2Vzc2VkOworICAgICAgICBjaGFyYWN0ZXJzICs9IG51bUNoYXJhY3RlcnNQ
cm9jZXNzZWQ7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2ltcGxlRm9u
dERhdGE6OmRldGVybWluZVBpdGNoKCkKK3sKKyAgICBpZiAoIW1fcGxhdGZvcm1EYXRhLmlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgVEVYVE1FVFJJQyYgdG0gPSBtX3Bs
YXRmb3JtRGF0YS5tZXRyaWNzKCk7CisKKyAgICAvLyBZZXMsIHRoaXMgbG9va3MgYmFja3dhcmRz
LCBidXQgdGhlIGZpeGVkIHBpdGNoIGJpdCBpcyBhY3R1YWxseSBzZXQgaWYgdGhlIGZvbnQKKyAg
ICAvLyBpcyAqbm90KiBmaXhlZCBwaXRjaC4gIFVuYmVsaWV2YWJsZSBidXQgdHJ1ZS4KKyAgICBt
X3RyZWF0QXNGaXhlZFBpdGNoID0gKCh0bS50bVBpdGNoQW5kRmFtaWx5ICYgVE1QRl9GSVhFRF9Q
SVRDSCkgPT0gMCk7Cit9CisKK2Zsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9y
R2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgaWYgKG1fcGxhdGZvcm1EYXRhLmlzRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBIR0RJT0JKIGhPbGRGb250ID0gU2Vs
ZWN0T2JqZWN0KGdfc2NyZWVuREMsIG1fcGxhdGZvcm1EYXRhLmhmb250KCkpOworCisgICAgU0la
RSBmb250U2l6ZTsKKyAgICB3Y2hhcl90IGMgPSBnbHlwaDsKKyAgICBHZXRUZXh0RXh0ZW50UG9p
bnQzMihnX3NjcmVlbkRDLCAmYywgMSwgJmZvbnRTaXplKTsKKyAgICAKKyAgICBTZWxlY3RPYmpl
Y3QoZ19zY3JlZW5EQywgaE9sZEZvbnQpOworCisgICAgcmV0dXJuIChmbG9hdClmb250U2l6ZS5j
eCAqIChmbG9hdCltX3BsYXRmb3JtRGF0YS5zaXplKCkgLyA3Mi5mOworfQorCisKK3ZvaWQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit7CisgICAgaWYgKCFtX3BsYXRm
b3JtRGF0YS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFRFWFRNRVRS
SUMmIHRtID0gbV9wbGF0Zm9ybURhdGEubWV0cmljcygpOworICAgIG1fYXZnQ2hhcldpZHRoID0g
KHRtLnRtQXZlQ2hhcldpZHRoICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICsgMzYpIC8gNzI7Cisg
ICAgbV9tYXhDaGFyV2lkdGggPSAodG0udG1NYXhDaGFyV2lkdGggKiBtX3BsYXRmb3JtRGF0YS5z
aXplKCkgKyAzNikgLyA3MjsKK30KKworfQo=
</data>
<flag name="review"
          id="17513"
          type_id="1"
          status="-"
          setter="staikos"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33210</attachid>
            <date>2009-07-21 13:58:06 -0700</date>
            <delta_ts>2009-07-21 14:13:48 -0700</delta_ts>
            <desc>coding style fixes by using cpplint and license text</desc>
            <filename>27509.patch</filename>
            <type>text/plain</type>
            <size>61374</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmQ4MWQ0NC4uN2RhMzBiMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAwOS0wNy0yMSAgWW9uZyBMaSAgPHlv
bmcubGlAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
NzUwOQorICAgICAgICBBZGQgZm9udC1yZWxhdGVkIGZpbGVzIGZvciB0aGUgV2luQ0UgcG9ydC4K
KworICAgICAgICBXcml0dGVuIGJ5IFlvbmcgTGkgPHlvbmcubGlAdG9yY2htb2JpbGUuY29tPiAK
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbmNlLmNwcDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbmNlLmNwcDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvR2x5cGhQYWdlVHJlZU5vZGVXaW5jZS5jcHA6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NpbXBsZUZvbnREYXRhV2luY2UuY3Bw
OiBBZGRlZC4KKwogMjAwOS0wNy0yMSAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udENhY2hlV2luY2UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9Gb250Q2FjaGVXaW5jZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZjY3ZjFiNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvRm9udENhY2hlV2luY2UuY3BwCkBAIC0wLDAgKzEsMzUyIEBACisv
KgorKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMu
CisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyoKKyogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuIAorKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uIAorKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LiAKKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRm9udENhY2hlLmgiCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9u
dERhdGEuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIlVuaWNvZGVS
YW5nZS5oIgorI2luY2x1ZGUgInd0Zi9Pd25QdHIuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4K
KyNpbmNsdWRlIDxtbGFuZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2V4dGVybiBIREMg
Z19zY3JlZW5EQzsKKworc3RhdGljIElNdWx0aUxhbmd1YWdlICptdWx0aUxhbmd1YWdlID0gMDsK
KworI2lmIGRlZmluZWQoSU1MQU5HX0ZPTlRfTElOSykgJiYgKElNTEFOR19GT05UX0xJTksgPT0g
MikKK3N0YXRpYyBJTUxhbmdGb250TGluazIqIGxhbmdGb250TGluayA9IDA7CisjZWxzZQorc3Rh
dGljIElNTGFuZ0ZvbnRMaW5rKiBsYW5nRm9udExpbmsgPSAwOworI2VuZGlmCisKK0lNdWx0aUxh
bmd1YWdlKiBnZXRNdWx0aUxhbmd1YWdlSW50ZXJmYWNlKCkKK3sKKyAgICBpZiAoIW11bHRpTGFu
Z3VhZ2UpCisgICAgICAgIENvQ3JlYXRlSW5zdGFuY2UoQ0xTSURfQ011bHRpTGFuZ3VhZ2UsIDAs
IENMU0NUWF9JTlBST0NfU0VSVkVSLCBJSURfSU11bHRpTGFuZ3VhZ2UsICh2b2lkKiopJm11bHRp
TGFuZ3VhZ2UpOworCisgICAgcmV0dXJuIG11bHRpTGFuZ3VhZ2U7Cit9CisKKyNpZiBkZWZpbmVk
KElNTEFOR19GT05UX0xJTkspICYmIChJTUxBTkdfRk9OVF9MSU5LID09IDIpCitJTUxhbmdGb250
TGluazIqIEZvbnRDYWNoZTo6Z2V0Rm9udExpbmtJbnRlcmZhY2UoKQorI2Vsc2UKK0lNTGFuZ0Zv
bnRMaW5rKiBGb250Q2FjaGU6OmdldEZvbnRMaW5rSW50ZXJmYWNlKCkKKyNlbmRpZgoreworICAg
IGlmICghbGFuZ0ZvbnRMaW5rKSB7CisgICAgICAgIGlmIChJTXVsdGlMYW5ndWFnZSogbWxpID0g
Z2V0TXVsdGlMYW5ndWFnZUludGVyZmFjZSgpKQorICAgICAgICAgICAgbWxpLT5RdWVyeUludGVy
ZmFjZSgmbGFuZ0ZvbnRMaW5rKTsKKyAgICB9CisKKyAgICByZXR1cm4gbGFuZ0ZvbnRMaW5rOwor
fQorCisjaWYgZGVmaW5lZChJTUxBTkdfRk9OVF9MSU5LKSAmJiAoSU1MQU5HX0ZPTlRfTElOSyA9
PSAyKQorc3RhdGljIGJvb2wgY3VycmVudEZvbnRDb250YWluc0NoYXJhY3RlcihJTUxhbmdGb250
TGluazIqIGxhbmdGb250TGluaywgSERDIGhkYywgVUNoYXIgY2hhcmFjdGVyKQoreworICAgIFVJ
TlQgdW5pY29kZVJhbmdlczsKKyAgICBpZiAoU19PSyAhPSBsYW5nRm9udExpbmstPkdldEZvbnRV
bmljb2RlUmFuZ2VzKGhkYywgJnVuaWNvZGVSYW5nZXMsIDApKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBzdGF0aWMgVmVjdG9yPFVOSUNPREVSQU5HRSwgNjQ+IGdseXBoc2V0QnVmZmVy
OworICAgIGdseXBoc2V0QnVmZmVyLnJlc2l6ZSh1bmljb2RlUmFuZ2VzKTsKKworICAgIGlmIChT
X09LICE9IGxhbmdGb250TGluay0+R2V0Rm9udFVuaWNvZGVSYW5nZXMoaGRjLCAmdW5pY29kZVJh
bmdlcywgZ2x5cGhzZXRCdWZmZXIuZGF0YSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gRklYTUU6IENoYW5nZSB0aGlzIHRvIGEgYmluYXJ5IHNlYXJjaC4gKFlvbmcgTGk6IFRo
YXQncyBlYXN5LiBCdXQsIGlzIGl0IGd1YXJhbnRlZWQgdGhhdCB0aGUgcmFuZ2VzIGFyZSBzb3J0
ZWQ/KQorICAgIGZvciAoVmVjdG9yPFVOSUNPREVSQU5HRSwgNjQ+Ojpjb25zdF9pdGVyYXRvciBp
ID0gZ2x5cGhzZXRCdWZmZXIuYmVnaW4oKTsgaSAhPSBnbHlwaHNldEJ1ZmZlci5lbmQoKTsgKytp
KSB7CisgICAgICAgIGlmIChpLT53Y1RvID49IGNoYXJhY3RlcikKKyAgICAgICAgICAgIHJldHVy
biBpLT53Y0Zyb20gPD0gY2hhcmFjdGVyOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
KyNlbHNlCitzdGF0aWMgYm9vbCBjdXJyZW50Rm9udENvbnRhaW5zQ2hhcmFjdGVyKElNTGFuZ0Zv
bnRMaW5rKiBsYW5nRm9udExpbmssIEhEQyBoZGMsIEhGT05UIGhmb250LCBVQ2hhciBjaGFyYWN0
ZXIsIGNvbnN0IHdjaGFyX3QqIGZhY2VOYW1lKQoreworICAgIERXT1JEIGZvbnRDb2RlUGFnZXMg
PSAwLCBjaGFyQ29kZVBhZ2VzID0gMDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGxhbmdGb250TGlu
ay0+R2V0Rm9udENvZGVQYWdlcyhoZGMsIGhmb250LCAmZm9udENvZGVQYWdlcyk7CisgICAgaWYg
KHJlc3VsdCAhPSBTX09LKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0ID0gbGFu
Z0ZvbnRMaW5rLT5HZXRDaGFyQ29kZVBhZ2VzKGNoYXJhY3RlciwgJmNoYXJDb2RlUGFnZXMpOwor
ICAgIGlmIChyZXN1bHQgIT0gU19PSykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9u
dENvZGVQYWdlcyB8PSBGb250UGxhdGZvcm1EYXRhOjpnZXRLbm93bkZvbnRDb2RlUGFnZXMoZmFj
ZU5hbWUpOworICAgIGlmIChmb250Q29kZVBhZ2VzICYgY2hhckNvZGVQYWdlcykKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKworI2lmIGRlZmlu
ZWQoSU1MQU5HX0ZPTlRfTElOSykgJiYgKElNTEFOR19GT05UX0xJTksgPT0gMikKK3N0YXRpYyBI
Rk9OVCBjcmVhdGVNTGFuZ0ZvbnQoSU1MYW5nRm9udExpbmsyKiBsYW5nRm9udExpbmssIEhEQyBo
ZGMsIERXT1JEIGNvZGVQYWdlTWFzaywgVUNoYXIgY2hhcmFjdGVyID0gMCkKK3sKKyAgICBIRk9O
VCBtbGFuZ0ZvbnQ7CisgICAgaWYgKFNVQ0NFRURFRChsYW5nRm9udExpbmstPk1hcEZvbnQoaGRj
LCBjb2RlUGFnZU1hc2ssIGNoYXJhY3RlciwgJm1sYW5nRm9udCkpKQorICAgICAgICByZXR1cm4g
bWxhbmdGb250OworCisgICAgcmV0dXJuIDA7Cit9CisjZWxzZQorc3RhdGljIEhGT05UIGNyZWF0
ZU1MYW5nRm9udChJTUxhbmdGb250TGluayogbGFuZ0ZvbnRMaW5rLCBIREMgaGRjLCBjb25zdCBG
b250UGxhdGZvcm1EYXRhJiByZWZGb250LCBEV09SRCBjb2RlUGFnZU1hc2spCit7CisgICAgSEZP
TlQgbWxhbmdGb250OworICAgIExSRVNVTFQgcmVzdWx0ID0gbGFuZ0ZvbnRMaW5rLT5NYXBGb250
KGhkYywgY29kZVBhZ2VNYXNrLCByZWZGb250Lmhmb250KCksICZtbGFuZ0ZvbnQpOworCisgICAg
cmV0dXJuIHJlc3VsdCA9PSBTX09LID8gbWxhbmdGb250IDogMDsKK30KKyNlbmRpZgorCitzdGF0
aWMgY29uc3QgVmVjdG9yPERXT1JELCA0PiYgZ2V0Q0pLQ29kZVBhZ2VNYXNrcygpCit7CisgICAg
Ly8gVGhlIGRlZmF1bHQgb3JkZXIgaW4gd2hpY2ggd2UgbG9vayBmb3IgYSBmb250IGZvciBhIENK
SyBjaGFyYWN0ZXIuIElmIHRoZSB1c2VyJ3MgZGVmYXVsdCBjb2RlIHBhZ2UgaXMKKyAgICAvLyBv
bmUgb2YgdGhlc2UsIHdlIHdpbGwgdXNlIGl0IGZpcnN0LgorICAgIHN0YXRpYyBjb25zdCBVSU5U
IENKS0NvZGVQYWdlc1tdID0geworICAgICAgICA5MzIsIC8qIEphcGFuZXNlICovCisgICAgICAg
IDkzNiwgLyogU2ltcGxpZmllZCBDaGluZXNlICovCisgICAgICAgIDk1MCwgLyogVHJhZGl0aW9u
YWwgQ2hpbmVzZSAqLworICAgICAgICA5NDkgIC8qIEtvcmVhbiAqLworICAgIH07CisKKyAgICBz
dGF0aWMgVmVjdG9yPERXT1JELCA0PiBjb2RlUGFnZU1hc2tzOworICAgIHN0YXRpYyBib29sIGlu
aXRpYWxpemVkOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgaW5pdGlhbGl6ZWQg
PSB0cnVlOworI2lmIGRlZmluZWQoSU1MQU5HX0ZPTlRfTElOSykgJiYgKElNTEFOR19GT05UX0xJ
TksgPT0gMikKKyAgICAgICAgSU1MYW5nRm9udExpbmsyKiBsYW5nRm9udExpbmsgPSBmb250Q2Fj
aGUoKS0+Z2V0Rm9udExpbmtJbnRlcmZhY2UoKTsKKyNlbHNlCisgICAgICAgIElNTGFuZ0ZvbnRM
aW5rKiBsYW5nRm9udExpbmsgPSBmb250Q2FjaGUoKS0+Z2V0Rm9udExpbmtJbnRlcmZhY2UoKTsK
KyNlbmRpZgorICAgICAgICBpZiAoIWxhbmdGb250TGluaykKKyAgICAgICAgICAgIHJldHVybiBj
b2RlUGFnZU1hc2tzOworCisgICAgICAgIFVJTlQgZGVmYXVsdENvZGVQYWdlOworICAgICAgICBE
V09SRCBkZWZhdWx0Q29kZVBhZ2VNYXNrID0gMDsKKyAgICAgICAgaWYgKEdldExvY2FsZUluZm8o
TE9DQUxFX1VTRVJfREVGQVVMVCwgTE9DQUxFX1JFVFVSTl9OVU1CRVIgfCBMT0NBTEVfSURFRkFV
TFRBTlNJQ09ERVBBR0UsIHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPigmZGVmYXVsdENvZGVQYWdl
KSwgc2l6ZW9mKGRlZmF1bHRDb2RlUGFnZSkpKQorICAgICAgICAgICAgbGFuZ0ZvbnRMaW5rLT5D
b2RlUGFnZVRvQ29kZVBhZ2VzKGRlZmF1bHRDb2RlUGFnZSwgJmRlZmF1bHRDb2RlUGFnZU1hc2sp
OworCisgICAgICAgIGlmIChkZWZhdWx0Q29kZVBhZ2UgPT0gQ0pLQ29kZVBhZ2VzWzBdIHx8IGRl
ZmF1bHRDb2RlUGFnZSA9PSBDSktDb2RlUGFnZXNbMV0gfHwgZGVmYXVsdENvZGVQYWdlID09IENK
S0NvZGVQYWdlc1syXSB8fCBkZWZhdWx0Q29kZVBhZ2UgPT0gQ0pLQ29kZVBhZ2VzWzNdKQorICAg
ICAgICAgICAgY29kZVBhZ2VNYXNrcy5hcHBlbmQoZGVmYXVsdENvZGVQYWdlTWFzayk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA0OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChk
ZWZhdWx0Q29kZVBhZ2UgIT0gQ0pLQ29kZVBhZ2VzW2ldKSB7CisgICAgICAgICAgICAgICAgRFdP
UkQgY29kZVBhZ2VNYXNrOworICAgICAgICAgICAgICAgIGxhbmdGb250TGluay0+Q29kZVBhZ2VU
b0NvZGVQYWdlcyhDSktDb2RlUGFnZXNbaV0sICZjb2RlUGFnZU1hc2spOworICAgICAgICAgICAg
ICAgIGNvZGVQYWdlTWFza3MuYXBwZW5kKGNvZGVQYWdlTWFzayk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNvZGVQYWdlTWFza3M7Cit9CisKKworc3RydWN0
IFRyYWl0c0luRmFtaWx5UHJvY0RhdGEgeworICAgIFRyYWl0c0luRmFtaWx5UHJvY0RhdGEoY29u
c3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQorICAgICAgICA6IG1fZmFtaWx5TmFtZShmYW1p
bHlOYW1lKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG1fZmFtaWx5
TmFtZTsKKyAgICBIYXNoU2V0PHVuc2lnbmVkPiBtX3RyYWl0c01hc2tzOworfTsKKworc3RhdGlj
IGludCBDQUxMQkFDSyB0cmFpdHNJbkZhbWlseUVudW1Qcm9jKENPTlNUIExPR0ZPTlQqIGxvZ0Zv
bnQsIENPTlNUIFRFWFRNRVRSSUMqIG1ldHJpY3MsIERXT1JEIGZvbnRUeXBlLCBMUEFSQU0gbFBh
cmFtKQoreworICAgIFRyYWl0c0luRmFtaWx5UHJvY0RhdGEqIHByb2NEYXRhID0gcmVpbnRlcnBy
ZXRfY2FzdDxUcmFpdHNJbkZhbWlseVByb2NEYXRhKj4obFBhcmFtKTsKKworICAgIHVuc2lnbmVk
IHRyYWl0c01hc2sgPSAwOworICAgIHRyYWl0c01hc2sgfD0gbG9nRm9udC0+bGZJdGFsaWMgPyBG
b250U3R5bGVJdGFsaWNNYXNrIDogRm9udFN0eWxlTm9ybWFsTWFzazsKKyAgICB0cmFpdHNNYXNr
IHw9IEZvbnRWYXJpYW50Tm9ybWFsTWFzazsKKyAgICBMT05HIHdlaWdodCA9IEZvbnRQbGF0Zm9y
bURhdGE6OmFkanVzdGVkR0RJRm9udFdlaWdodChsb2dGb250LT5sZldlaWdodCwgcHJvY0RhdGEt
Pm1fZmFtaWx5TmFtZSk7CisgICAgdHJhaXRzTWFzayB8PSB3ZWlnaHQgPT0gRldfVEhJTiA/IEZv
bnRXZWlnaHQxMDBNYXNrIDoKKyAgICAgICAgd2VpZ2h0ID09IEZXX0VYVFJBTElHSFQgPyBGb250
V2VpZ2h0MjAwTWFzayA6CisgICAgICAgIHdlaWdodCA9PSBGV19MSUdIVCA/IEZvbnRXZWlnaHQz
MDBNYXNrIDoKKyAgICAgICAgd2VpZ2h0ID09IEZXX05PUk1BTCA/IEZvbnRXZWlnaHQ0MDBNYXNr
IDoKKyAgICAgICAgd2VpZ2h0ID09IEZXX01FRElVTSA/IEZvbnRXZWlnaHQ1MDBNYXNrIDoKKyAg
ICAgICAgd2VpZ2h0ID09IEZXX1NFTUlCT0xEID8gRm9udFdlaWdodDYwME1hc2sgOgorICAgICAg
ICB3ZWlnaHQgPT0gRldfQk9MRCA/IEZvbnRXZWlnaHQ3MDBNYXNrIDoKKyAgICAgICAgd2VpZ2h0
ID09IEZXX0VYVFJBQk9MRCA/IEZvbnRXZWlnaHQ4MDBNYXNrIDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEZvbnRXZWlnaHQ5MDBNYXNrOworICAgIHByb2NEYXRhLT5tX3RyYWl0
c01hc2tzLmFkZCh0cmFpdHNNYXNrKTsKKyAgICByZXR1cm4gMTsKK30KKwordm9pZCBGb250Q2Fj
aGU6OnBsYXRmb3JtSW5pdCgpCit7Cit9CisKK3ZvaWQgRm9udENhY2hlOjpjb21Jbml0aWFsaXpl
KCkKK3sKK30KKwordm9pZCBGb250Q2FjaGU6OmNvbVVuaW5pdGlhbGl6ZSgpCit7CisgICAgaWYg
KGxhbmdGb250TGluaykgeworICAgICAgICBsYW5nRm9udExpbmstPlJlbGVhc2UoKTsKKyAgICAg
ICAgbGFuZ0ZvbnRMaW5rID0gMDsKKyAgICB9CisgICAgaWYgKG11bHRpTGFuZ3VhZ2UpIHsKKyAg
ICAgICAgbXVsdGlMYW5ndWFnZS0+UmVsZWFzZSgpOworICAgICAgICBtdWx0aUxhbmd1YWdlID0g
MDsKKyAgICB9Cit9CisKK2NvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnRE
YXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgaW50IGxlbmd0aCkKK3sKKyAgICBTdHJpbmcgZmFtaWx5TmFtZTsKKyAgICBXQ0hBUiBuYW1l
W0xGX0ZBQ0VTSVpFXTsKKworICAgIFVDaGFyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbMF07Cisg
ICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3JpZ0ZvbnQgPSBmb250LnByaW1hcnlGb250KCkt
PmZvbnREYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciktPnBsYXRmb3JtRGF0YSgpOworICAgIHVu
c2lnbmVkIHVuaWNvZGVSYW5nZSA9IGZpbmRDaGFyVW5pY29kZVJhbmdlKGNoYXJhY3Rlcik7CisK
KyNpZiBkZWZpbmVkKElNTEFOR19GT05UX0xJTkspICYmIChJTUxBTkdfRk9OVF9MSU5LID09IDIp
CisgICAgaWYgKElNTGFuZ0ZvbnRMaW5rMiogbGFuZ0ZvbnRMaW5rID0gZ2V0Rm9udExpbmtJbnRl
cmZhY2UoKSkgeworI2Vsc2UKKyAgICBpZiAoSU1MYW5nRm9udExpbmsqIGxhbmdGb250TGluayA9
IGdldEZvbnRMaW5rSW50ZXJmYWNlKCkpIHsKKyNlbmRpZgorICAgICAgICBIR0RJT0JKIG9sZEZv
bnQgPSBHZXRDdXJyZW50T2JqZWN0KGdfc2NyZWVuREMsIE9CSl9GT05UKTsKKyAgICAgICAgSEZP
TlQgaGZvbnQgPSAwOworICAgICAgICBEV09SRCBjb2RlUGFnZXMgPSAwOworICAgICAgICBVSU5U
IGNvZGVQYWdlID0gMDsKKyAgICAgICAgLy8gVHJ5IE1MYW5nIGZvbnQgbGlua2luZyBmaXJzdC4K
KyAgICAgICAgbGFuZ0ZvbnRMaW5rLT5HZXRDaGFyQ29kZVBhZ2VzKGNoYXJhY3RlciwgJmNvZGVQ
YWdlcyk7CisgICAgICAgIGlmIChjb2RlUGFnZXMgJiYgdW5pY29kZVJhbmdlID09IGNSYW5nZVNl
dENKSykgeworICAgICAgICAgICAgLy8gVGhlIENKSyBjaGFyYWN0ZXIgbWF5IGJlbG9uZyB0byBt
dWx0aXBsZSBjb2RlIHBhZ2VzLiBXZSB3YW50IHRvCisgICAgICAgICAgICAvLyBkbyBmb250IGxp
bmtpbmcgYWdhaW5zdCBhIHNpbmdsZSBvbmUgb2YgdGhlbSwgcHJlZmVycmluZyB0aGUgZGVmYXVs
dAorICAgICAgICAgICAgLy8gY29kZSBwYWdlIGZvciB0aGUgdXNlcidzIGxvY2FsZS4KKyAgICAg
ICAgICAgIGNvbnN0IFZlY3RvcjxEV09SRCwgND4mIENKS0NvZGVQYWdlTWFza3MgPSBnZXRDSktD
b2RlUGFnZU1hc2tzKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBudW1Db2RlUGFnZXMgPSBDSktD
b2RlUGFnZU1hc2tzLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1Db2RlUGFnZXM7ICsraSkgeworI2lmIGRlZmluZWQoSU1MQU5HX0ZPTlRfTElOSykgJiYg
KElNTEFOR19GT05UX0xJTksgPT0gMikKKyAgICAgICAgICAgICAgICBoZm9udCA9IGNyZWF0ZU1M
YW5nRm9udChsYW5nRm9udExpbmssIGdfc2NyZWVuREMsIENKS0NvZGVQYWdlTWFza3NbaV0pOwor
I2Vsc2UKKyAgICAgICAgICAgICAgICBoZm9udCA9IGNyZWF0ZU1MYW5nRm9udChsYW5nRm9udExp
bmssIGdfc2NyZWVuREMsIG9yaWdGb250LCBDSktDb2RlUGFnZU1hc2tzW2ldKTsKKyNlbmRpZgor
ICAgICAgICAgICAgICAgIGlmICghaGZvbnQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICAgICAgU2VsZWN0T2JqZWN0KGdfc2NyZWVuREMsIGhmb250KTsKKyAg
ICAgICAgICAgICAgICBHZXRUZXh0RmFjZShnX3NjcmVlbkRDLCBMRl9GQUNFU0laRSwgbmFtZSk7
CisKKyAgICAgICAgICAgICAgICBpZiAoaGZvbnQgJiYgIShjb2RlUGFnZXMgJiBDSktDb2RlUGFn
ZU1hc2tzW2ldKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSBhc2tlZCBhYm91dCBhIGNv
ZGUgcGFnZSB0aGF0IGlzIG5vdCBvbmUgb2YgdGhlIGNvZGUgcGFnZXMKKyAgICAgICAgICAgICAg
ICAgICAgLy8gcmV0dXJuZWQgYnkgTUxhbmcsIHNvIHRoZSBmb250IG1pZ2h0IG5vdCBjb250YWlu
IHRoZSBjaGFyYWN0ZXIuCisjaWYgZGVmaW5lZChJTUxBTkdfRk9OVF9MSU5LKSAmJiAoSU1MQU5H
X0ZPTlRfTElOSyA9PSAyKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRGb250Q29u
dGFpbnNDaGFyYWN0ZXIobGFuZ0ZvbnRMaW5rLCBnX3NjcmVlbkRDLCBjaGFyYWN0ZXIpKSB7Cisj
ZWxzZQorICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRGb250Q29udGFpbnNDaGFyYWN0
ZXIobGFuZ0ZvbnRMaW5rLCBnX3NjcmVlbkRDLCBoZm9udCwgY2hhcmFjdGVyLCBuYW1lKSkgewor
I2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3RPYmplY3QoZ19zY3JlZW5EQywg
b2xkRm9udCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsYW5nRm9udExpbmstPlJlbGVhc2VG
b250KGhmb250KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhmb250ID0gMDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworI2lmIGRlZmluZWQoSU1MQU5HX0ZPTlRfTElOSykgJiYgKElNTEFOR19GT05U
X0xJTksgPT0gMikKKyAgICAgICAgICAgIGhmb250ID0gY3JlYXRlTUxhbmdGb250KGxhbmdGb250
TGluaywgZ19zY3JlZW5EQywgY29kZVBhZ2VzLCBjaGFyYWN0ZXIpOworI2Vsc2UKKyAgICAgICAg
ICAgIGhmb250ID0gY3JlYXRlTUxhbmdGb250KGxhbmdGb250TGluaywgZ19zY3JlZW5EQywgb3Jp
Z0ZvbnQsIGNvZGVQYWdlcyk7CisjZW5kaWYKKyAgICAgICAgICAgIFNlbGVjdE9iamVjdChnX3Nj
cmVlbkRDLCBoZm9udCk7CisgICAgICAgICAgICBHZXRUZXh0RmFjZShnX3NjcmVlbkRDLCBMRl9G
QUNFU0laRSwgbmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgU2VsZWN0T2JqZWN0KGdfc2NyZWVu
REMsIG9sZEZvbnQpOworCisgICAgICAgIGlmIChoZm9udCkgeworICAgICAgICAgICAgZmFtaWx5
TmFtZSA9IG5hbWU7CisgICAgICAgICAgICBsYW5nRm9udExpbmstPlJlbGVhc2VGb250KGhmb250
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBGb250UGxhdGZvcm1EYXRhOjptYXBLbm93
bkZvbnQoY29kZVBhZ2VzLCBmYW1pbHlOYW1lKTsKKyAgICB9CisKKyAgICBpZiAoZmFtaWx5TmFt
ZS5pc0VtcHR5KCkpCisgICAgICAgIGZhbWlseU5hbWUgPSBGb250UGxhdGZvcm1EYXRhOjpkZWZh
dWx0Rm9udEZhbWlseSgpOworCisgICAgaWYgKCFmYW1pbHlOYW1lLmlzRW1wdHkoKSkgeworICAg
ICAgICAvLyBGSVhNRTogdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIFRoYWkgZm9udCBwcm9ibGVt
CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24oZm9udC5mb250RGVzY3Jp
cHRpb24oKSk7CisgICAgICAgIGlmICh1bmljb2RlUmFuZ2UgPT0gY1JhbmdlVGhhaSAmJiBmb250
RGVzY3JpcHRpb24ud2VpZ2h0KCkgPiBGb250V2VpZ2h0Tm9ybWFsKQorICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0Tm9ybWFsKTsKKworICAgICAgICBGb250
UGxhdGZvcm1EYXRhKiByZXN1bHQgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNj
cmlwdGlvbiwgZmFtaWx5TmFtZSk7CisgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LT5oYXNo
KCkgIT0gb3JpZ0ZvbnQuaGFzaCgpKSB7CisgICAgICAgICAgICBpZiAoU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEocmVzdWx0KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZm9udERhdGE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwor
Rm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250JiBmb250KQoreworICAgIHJldHVybiAwOworfQorCitGb250UGxhdGZvcm1EYXRh
KiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzYykKK3sKKyAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8g
c29tZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gIEZvciBub3cgd2UnbGwg
cGljaworICAgIC8vIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQg
Y2hhbmdpbmcgYW55IHByZWZzLgorICAgIHJldHVybiBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRh
KGZvbnREZXNjLCBGb250UGxhdGZvcm1EYXRhOjpkZWZhdWx0Rm9udEZhbWlseSgpKTsKK30KKwor
Rm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZh
bWlseSkKK3sKKyAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQgPSBuZXcgRm9udFBsYXRmb3Jt
RGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5TmFtZSwgVmVjdG9yPHVuc2lnbmVkPiYgdHJhaXRzTWFza3MpCit7CisgICAgTE9HRk9OVCBs
b2dGb250OworICAgIGxvZ0ZvbnQubGZDaGFyU2V0ID0gREVGQVVMVF9DSEFSU0VUOworICAgIHVu
c2lnbmVkIGZhbWlseUxlbmd0aCA9IHN0ZDo6bWluKGZhbWlseU5hbWUubGVuZ3RoKCksIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihMRl9GQUNFU0laRSAtIDEpKTsKKyAgICBtZW1jcHkobG9nRm9udC5s
ZkZhY2VOYW1lLCBmYW1pbHlOYW1lLmNoYXJhY3RlcnMoKSwgZmFtaWx5TGVuZ3RoICogc2l6ZW9m
KFVDaGFyKSk7CisgICAgbG9nRm9udC5sZkZhY2VOYW1lW2ZhbWlseUxlbmd0aF0gPSAwOworICAg
IGxvZ0ZvbnQubGZQaXRjaEFuZEZhbWlseSA9IDA7CisKKyAgICBUcmFpdHNJbkZhbWlseVByb2NE
YXRhIHByb2NEYXRhKGZhbWlseU5hbWUpOworICAgIEVudW1Gb250RmFtaWxpZXNFeChnX3NjcmVl
bkRDLCAmbG9nRm9udCwgdHJhaXRzSW5GYW1pbHlFbnVtUHJvYywgcmVpbnRlcnByZXRfY2FzdDxM
UEFSQU0+KCZwcm9jRGF0YSksIDApOworICAgIGNvcHlUb1ZlY3Rvcihwcm9jRGF0YS5tX3RyYWl0
c01hc2tzLCB0cmFpdHNNYXNrcyk7Cit9CisKK30KKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M2ODUzYwotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5j
cHAKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
VG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgiCisKKyNpbmNsdWRlICJC
YXNlNjQuaCIKKyNpbmNsdWRlICJDYWNoZWRGb250LmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3Jt
RGF0YS5oIgorI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgQ3VzdG9tRm9udENhY2hlKiBnX2N1c3RvbUZvbnRDYWNoZSA9IDA7CisK
K2Jvb2wgcmVuYW1lRm9udChTaGFyZWRCdWZmZXIqIGZvbnREYXRhLCBjb25zdCBTdHJpbmcmIGZv
bnROYW1lKTsKKworRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6fkZvbnRDdXN0b21QbGF0Zm9ybURh
dGEoKQoreworICAgIGlmIChnX2N1c3RvbUZvbnRDYWNoZSAmJiAhbV9uYW1lLmlzRW1wdHkoKSkK
KyAgICAgICAgZ19jdXN0b21Gb250Q2FjaGUtPnVucmVnaXN0ZXJGb250KG1fbmFtZSk7Cit9CisK
K0ZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0
YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgRm9udFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSkKK3sKKyAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2M7CisgICAgZm9udERl
c2Muc2V0Q29tcHV0ZWRTaXplKHNpemUpOworICAgIGZvbnREZXNjLnNldFNwZWNpZmllZFNpemUo
c2l6ZSk7CisgICAgZm9udERlc2Muc2V0SXRhbGljKGl0YWxpYyk7CisgICAgZm9udERlc2Muc2V0
V2VpZ2h0KGJvbGQgPyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3JtYWwpOworICAgIHJl
dHVybiBGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjLCBtX25hbWUsIGZhbHNlKTsKK30KKworLy8g
Q3JlYXRlcyBhIHVuaXF1ZSBhbmQgdW5wcmVkaWN0YWJsZSBmb250IG5hbWUsIGluIG9yZGVyIHRv
IGF2b2lkIGNvbGxpc2lvbnMgYW5kIHRvCisvLyBub3QgYWxsb3cgYWNjZXNzIGZyb20gQ1NTLgor
c3RhdGljIFN0cmluZyBjcmVhdGVVbmlxdWVGb250TmFtZSgpCit7CisgICAgVmVjdG9yPGNoYXI+
IGZvbnRVdWlkKHNpemVvZihHVUlEKSk7CisKKyAgICB1bnNpZ25lZCBpbnQqIHB0ciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oZm9udFV1aWQuZGF0YSgpKTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNpemVvZihHVUlEKSAvIHNpemVvZihpbnQpIDsgKytpKQorICAgICAgICAq
KHB0ciArIGkpID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihXVEY6OnJhbmRvbU51bWJlcigp
ICogKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSArIDEuMCkpOworCisgICAg
VmVjdG9yPGNoYXI+IGZvbnROYW1lVmVjdG9yOworICAgIGJhc2U2NEVuY29kZShmb250VXVpZCwg
Zm9udE5hbWVWZWN0b3IpOworICAgIEFTU0VSVChmb250TmFtZVZlY3Rvci5zaXplKCkgPCBMRl9G
QUNFU0laRSk7CisgICAgU3RyaW5nIGZvbnROYW1lKGZvbnROYW1lVmVjdG9yLmRhdGEoKSwgZm9u
dE5hbWVWZWN0b3Iuc2l6ZSgpKTsKKyAgICByZXR1cm4gZm9udE5hbWUucmVwbGFjZSgnLycsICdf
Jyk7Cit9CisKK0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEqIGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9y
bURhdGEoQ2FjaGVkRm9udCogY2FjaGVkRm9udCkKK3sKKyAgICBpZiAoZ19jdXN0b21Gb250Q2Fj
aGUgJiYgY2FjaGVkRm9udC0+Q2FjaGVkUmVzb3VyY2U6OmRhdGEoKSkgeworICAgICAgICBTdHJp
bmcgZm9udE5hbWUgPSBjcmVhdGVVbmlxdWVGb250TmFtZSgpOworICAgICAgICBpZiAocmVuYW1l
Rm9udChjYWNoZWRGb250LT5DYWNoZWRSZXNvdXJjZTo6ZGF0YSgpLCBmb250TmFtZSkgJiYgZ19j
dXN0b21Gb250Q2FjaGUtPnJlZ2lzdGVyRm9udChmb250TmFtZSwgY2FjaGVkRm9udCkpCisgICAg
ICAgICAgICByZXR1cm4gbmV3IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEoZm9udE5hbWUpOworICAg
IH0KKyAgICByZXR1cm4gMDsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5iMWY2NGEwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgKQEAgLTAsMCAr
MSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFfaAorI2Rl
ZmluZSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhX2gKKworI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdN
b2RlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgRm9udFBsYXRmb3Jt
RGF0YTsKKyAgICBjbGFzcyBDYWNoZWRGb250OworCisgICAgY2xhc3MgQ3VzdG9tRm9udENhY2hl
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgYm9vbCByZWdpc3RlckZvbnQoY29uc3Qg
U3RyaW5nJiBmb250TmFtZSwgQ2FjaGVkRm9udCopID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHVucmVnaXN0ZXJGb250KGNvbnN0IFN0cmluZyYgZm9udE5hbWUpID0gMDsKKyAgICB9OworCisg
ICAgc3RydWN0IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEgOiBOb25jb3B5YWJsZSB7CisgICAgICAg
IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEoY29uc3QgU3RyaW5nJiBuYW1lKQorICAgICAgICAgICAg
OiBtX25hbWUobmFtZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgfkZvbnRDdXN0
b21QbGF0Zm9ybURhdGEoKTsKKworICAgICAgICBGb250UGxhdGZvcm1EYXRhIGZvbnRQbGF0Zm9y
bURhdGEoaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIEZvbnRSZW5kZXJpbmdNb2Rl
ID0gTm9ybWFsUmVuZGVyaW5nTW9kZSk7CisgICAgICAgIFN0cmluZyBtX25hbWU7CisgICAgfTsK
KworICAgIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEqIGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURh
dGEoQ2FjaGVkRm9udCopOworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYWNhYWQyZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKQEAgLTAsMCArMSw1MjUg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlIEluYy4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1E
YXRhLmgiCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5j
bHVkZSAiRm9udERhdGEuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUg
IlVuaWNvZGVSYW5nZS5oIgorI2luY2x1ZGUgInd0Zi9Pd25QdHIuaCIKKworI2luY2x1ZGUgPHdp
bmRvd3MuaD4KKyNpbmNsdWRlIDxtbGFuZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2V4
dGVybiBIREMgZ19zY3JlZW5EQzsKKworc3RhdGljIHdjaGFyX3Qgc29uZ1RpU3RyW10gPSB7IDB4
NWI4YiwgMHg0ZjUzLCAwIH07CitzdGF0aWMgd2NoYXJfdCBoZWlUaVN0cltdID0geyAweDllZDEs
IDB4NGY1MywgMCB9OworCitjbGFzcyBGb250RmFtaWx5Q29kZVBhZ2VJbmZvIHsKK3B1YmxpYzoK
KyAgICBGb250RmFtaWx5Q29kZVBhZ2VJbmZvKCkKKyAgICAgICAgOiBtX2NvZGVQYWdlKDApLCBt
X2NvZGVQYWdlcygwKQorICAgIHsKKyAgICB9CisgICAgRm9udEZhbWlseUNvZGVQYWdlSW5mbyhj
b25zdCB3Y2hhcl90KiBmYW1pbHksIFVJTlQgY29kZVBhZ2UpCisgICAgICAgIDogbV9mYW1pbHko
ZmFtaWx5KSwgbV9jb2RlUGFnZShjb2RlUGFnZSksIG1fY29kZVBhZ2VzKDApCisgICAgeworICAg
IH0KKyAgICBEV09SRCBjb2RlUGFnZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2Nv
ZGVQYWdlcykgeworI2lmIGRlZmluZWQoSU1MQU5HX0ZPTlRfTElOSykgJiYgKElNTEFOR19GT05U
X0xJTksgPT0gMikKKyAgICAgICAgICAgIGlmIChJTUxhbmdGb250TGluazIqIGxhbmdGb250TGlu
ayA9IGZvbnRDYWNoZSgpLT5nZXRGb250TGlua0ludGVyZmFjZSgpKQorICAgICAgICAgICAgICAg
IGxhbmdGb250TGluay0+Q29kZVBhZ2VUb0NvZGVQYWdlcyhtX2NvZGVQYWdlLCAmbV9jb2RlUGFn
ZXMpOworI2Vsc2UKKyAgICAgICAgICAgIGlmIChJTUxhbmdGb250TGluayogbGFuZ0ZvbnRMaW5r
ID0gZm9udENhY2hlKCktPmdldEZvbnRMaW5rSW50ZXJmYWNlKCkpCisgICAgICAgICAgICAgICAg
bGFuZ0ZvbnRMaW5rLT5Db2RlUGFnZVRvQ29kZVBhZ2VzKG1fY29kZVBhZ2UsICZtX2NvZGVQYWdl
cyk7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9jb2RlUGFnZXM7CisgICAg
fQorCisgICAgU3RyaW5nIG1fZmFtaWx5OworICAgIFVJTlQgbV9jb2RlUGFnZTsKK3ByaXZhdGU6
CisgICAgbXV0YWJsZSBEV09SRCBtX2NvZGVQYWdlczsKK307CisKK2NsYXNzIEZvbnRGYW1pbHlD
aGVja2VyIHsKK3B1YmxpYzoKKyAgICBGb250RmFtaWx5Q2hlY2tlcihjb25zdCB3Y2hhcl90KiBm
YW1pbHkpCisgICAgICAgIDogbV9leGlzdHMoZmFsc2UpCisgICAgeworICAgICAgICBFbnVtRm9u
dEZhbWlsaWVzKGdfc2NyZWVuREMsIGZhbWlseSwgZW51bUZvbnRGYW1Qcm9jLCAoTFBBUkFNKXRo
aXMpOworICAgIH0KKyAgICBib29sIGlzU3VwcG9ydGVkKCkgY29uc3QgeyByZXR1cm4gbV9leGlz
dHM7IH0KK3ByaXZhdGU6CisgICAgYm9vbCBtX2V4aXN0czsKKyAgICBzdGF0aWMgaW50IENBTExC
QUNLIGVudW1Gb250RmFtUHJvYyhjb25zdCBMT0dGT05UIEZBUiogbHBlbGYsIGNvbnN0IFRFWFRN
RVRSSUMgRkFSKiBscG50bSwgRFdPUkQgRm9udFR5cGUsIExQQVJBTSBsUGFyYW0pOworfTsKKwor
Y2xhc3MgVmFsaWRGb250RmFtaWx5RmluZGVyIHsKK3B1YmxpYzoKKyAgICBWYWxpZEZvbnRGYW1p
bHlGaW5kZXIoKQorICAgIHsKKyAgICAgICAgRW51bUZvbnRGYW1pbGllcyhnX3NjcmVlbkRDLCAw
LCBlbnVtRm9udEZhbVByb2MsIChMUEFSQU0pdGhpcyk7CisgICAgfQorICAgIGNvbnN0IFN0cmlu
ZyYgZmFtaWx5KCkgY29uc3QgeyByZXR1cm4gbV9mYW1pbHk7IH0KK3ByaXZhdGU6CisgICAgU3Ry
aW5nIG1fZmFtaWx5OworICAgIHN0YXRpYyBpbnQgQ0FMTEJBQ0sgZW51bUZvbnRGYW1Qcm9jKGNv
bnN0IExPR0ZPTlQgRkFSKiBscGVsZiwgY29uc3QgVEVYVE1FVFJJQyBGQVIqIGxwbnRtLCBEV09S
RCBGb250VHlwZSwgTFBBUkFNIGxQYXJhbSk7Cit9OworCitjbGFzcyBGaXhlZFNpemVGb250RGF0
YTogcHVibGljIFJlZkNvdW50ZWQ8Rml4ZWRTaXplRm9udERhdGE+IHsKK3B1YmxpYzoKKyAgICBM
T0dGT05UIG1fZm9udDsKKyAgICBPd25QdHI8SEZPTlQ+IG1faGZvbnQ7CisgICAgVEVYVE1FVFJJ
QyBtX21ldHJpY3M7CisgICAgRFdPUkQgbV9jb2RlUGFnZXM7CisgICAgdW5zaWduZWQgbV93ZWln
aHQ7CisgICAgYm9vbCBtX2l0YWxpYzsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpeGVkU2l6
ZUZvbnREYXRhPiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIHVuc2lnbmVkIHdl
aWdodCwgYm9vbCBpdGFsaWMpOworcHJpdmF0ZToKKyAgICBGaXhlZFNpemVGb250RGF0YSgpCisg
ICAgICAgIDogbV9jb2RlUGFnZXMoMCkKKyAgICAgICAgLCBtX3dlaWdodCgwKQorICAgICAgICAs
IG1faXRhbGljKGZhbHNlKQorICAgIHsKKyAgICAgICAgbWVtc2V0KCZtX2ZvbnQsIDAsIHNpemVv
ZihtX2ZvbnQpKTsKKyAgICAgICAgbWVtc2V0KCZtX21ldHJpY3MsIDAsIHNpemVvZihtX21ldHJp
Y3MpKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgRml4ZWRTaXplRm9udERhdGFLZXkgeworICAgIEZp
eGVkU2l6ZUZvbnREYXRhS2V5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5ID0gQXRvbWljU3Ry
aW5nKCksIHVuc2lnbmVkIHdlaWdodCA9IDAsIGJvb2wgaXRhbGljID0gZmFsc2UpCisgICAgICAg
IDogbV9mYW1pbHkoZmFtaWx5KQorICAgICAgICAsIG1fd2VpZ2h0KHdlaWdodCkKKyAgICAgICAg
LCBtX2l0YWxpYyhpdGFsaWMpCisgICAgeworICAgIH0KKworICAgIEZpeGVkU2l6ZUZvbnREYXRh
S2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX3dlaWdodCgtMikgeyB9Cisg
ICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2VpZ2h0
ID09IC0yOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRml4ZWRTaXplRm9udERhdGFL
ZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNl
KG1fZmFtaWx5LCBvdGhlci5tX2ZhbWlseSkKKyAgICAgICAgICAgICYmIG1fd2VpZ2h0ID09IG90
aGVyLm1fd2VpZ2h0CisgICAgICAgICAgICAmJiBtX2l0YWxpYyA9PSBvdGhlci5tX2l0YWxpYzsK
KyAgICB9CisKKyAgICBBdG9taWNTdHJpbmcgbV9mYW1pbHk7CisgICAgdW5zaWduZWQgbV93ZWln
aHQ7CisgICAgYm9vbCBtX2l0YWxpYzsKK307CisKK3N0cnVjdCBGaXhlZFNpemVGb250RGF0YUtl
eUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZpeGVkU2l6ZUZvbnREYXRh
S2V5JiBmb250KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaGFzaENvZGVzW10gPSB7CisgICAg
ICAgICAgICBDYXNlRm9sZGluZ0hhc2g6Omhhc2goZm9udC5tX2ZhbWlseSksCisgICAgICAgICAg
ICBmb250Lm1fd2VpZ2h0LAorICAgICAgICAgICAgLy8gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZv
bnQubV9pdGFsaWMpOworICAgICAgICB9OworICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29t
cHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIHNpemVvZihoYXNo
Q29kZXMpIC8gc2l6ZW9mKFVDaGFyKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgRml4ZWRTaXplRm9udERhdGFLZXkmIGEsIGNvbnN0IEZpeGVkU2l6ZUZvbnREYXRhS2V5
JiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICB9CisKKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCitz
dHJ1Y3QgRml4ZWRTaXplRm9udERhdGFLZXlUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRz
PEZpeGVkU2l6ZUZvbnREYXRhS2V5PiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1
ZUlzWmVybyA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IEZpeGVkU2l6ZUZvbnREYXRhS2V5JiBl
bXB0eVZhbHVlKCkKKyAgICB7CisgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoRml4ZWRTaXpl
Rm9udERhdGFLZXksIGtleSwgKG51bGxBdG9tKSk7CisgICAgICAgIHJldHVybiBrZXk7CisgICAg
fQorICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShGaXhlZFNpemVGb250RGF0
YUtleSYgc2xvdCkKKyAgICB7CisgICAgICAgIG5ldyAoJnNsb3QpIEZpeGVkU2l6ZUZvbnREYXRh
S2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICB9CisgICAgc3RhdGljIGJvb2wg
aXNEZWxldGVkVmFsdWUoY29uc3QgRml4ZWRTaXplRm9udERhdGFLZXkmIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHZhbHVlLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CisgICAgfQor
fTsKKworaW50IENBTExCQUNLIEZvbnRGYW1pbHlDaGVja2VyOjplbnVtRm9udEZhbVByb2MoY29u
c3QgTE9HRk9OVCBGQVIqIGxwZWxmLCBjb25zdCBURVhUTUVUUklDIEZBUiogbHBudG0sIERXT1JE
IEZvbnRUeXBlLCBMUEFSQU0gbFBhcmFtKQoreworICAgICgoRm9udEZhbWlseUNoZWNrZXIqKWxQ
YXJhbSktPm1fZXhpc3RzID0gdHJ1ZTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IENBTExCQUNL
IFZhbGlkRm9udEZhbWlseUZpbmRlcjo6ZW51bUZvbnRGYW1Qcm9jKGNvbnN0IExPR0ZPTlQgRkFS
KiBscGVsZiwgY29uc3QgVEVYVE1FVFJJQyBGQVIqIGxwbnRtLCBEV09SRCBGb250VHlwZSwgTFBB
UkFNIGxQYXJhbSkKK3sKKyAgICBpZiAobHBlbGYtPmxmQ2hhclNldCAhPSBTWU1CT0xfQ0hBUlNF
VCkgeworICAgICAgICAoKFZhbGlkRm9udEZhbWlseUZpbmRlciopbFBhcmFtKS0+bV9mYW1pbHkg
PSBTdHJpbmcobHBlbGYtPmxmRmFjZU5hbWUpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cisg
ICAgcmV0dXJuIDE7Cit9CisKK3R5cGVkZWYgVmVjdG9yPEZvbnRGYW1pbHlDb2RlUGFnZUluZm8+
IEtub3duRm9udHM7CitzdGF0aWMgS25vd25Gb250cyYga25vd25Gb250cygpCit7CisgICAgc3Rh
dGljIEtub3duRm9udHMgZm9udHM7CisgICAgc3RhdGljIGJvb2wgZmlyc3RUaW1lID0gdHJ1ZTsK
KyAgICBpZiAoZmlyc3RUaW1lKSB7CisgICAgICAgIGZpcnN0VGltZSA9IGZhbHNlOworICAgICAg
ICBpZiAoRm9udFBsYXRmb3JtRGF0YTo6aXNTb25nVGlTdXBwb3J0ZWQoKSkKKyAgICAgICAgICAg
IGZvbnRzLmFwcGVuZChGb250RmFtaWx5Q29kZVBhZ2VJbmZvKHNvbmdUaVN0ciwgOTM2KSk7Cisg
ICAgfQorICAgIHJldHVybiBmb250czsKK30KKworc3RhdGljIFN0cmluZyBnZXREZWZhdWx0Rm9u
dEZhbWlseSgpCit7CisgICAgaWYgKEZvbnRGYW1pbHlDaGVja2VyKEwiVGFob21hIikuaXNTdXBw
b3J0ZWQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyhMIlRhaG9tYSIpOworCisgICAgYm9vbCBn
b29kID0gZmFsc2U7CisgICAgU3RyaW5nIGZhbWlseTsKKyAgICBIS0VZIGtleTsKKyAgICBpZiAo
UmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgTCJTWVNURU1cXEdESVxcU3lzRm50Iiwg
MCwgMCwgJmtleSkgPT0gRVJST1JfU1VDQ0VTUykgeworICAgICAgICBEV09SRCBtYXhsZW4sIHR5
cGU7CisgICAgICAgIGlmIChSZWdRdWVyeVZhbHVlRXgoa2V5LCBMIk5tIiwgMCwgJnR5cGUsIDAs
ICZtYXhsZW4pID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opIHsKKyAgICAgICAg
ICAgICsrbWF4bGVuOworICAgICAgICAgICAgaWYgKHdjaGFyX3QqIGJ1ZmZlciA9IG5ldyB3Y2hh
cl90W21heGxlbl0pIHsKKyAgICAgICAgICAgICAgICBpZiAoUmVnUXVlcnlWYWx1ZUV4KGtleSwg
TCJObSIsIDAsICZ0eXBlLCAoTFBCWVRFKWJ1ZmZlciwgJm1heGxlbikgPT0gRVJST1JfU1VDQ0VT
UykgeworICAgICAgICAgICAgICAgICAgICBmYW1pbHkgPSBTdHJpbmcoYnVmZmVyLCBtYXhsZW4p
OworICAgICAgICAgICAgICAgICAgICBnb29kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZGVsZXRlW10gYnVmZmVyOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIFJlZ0Nsb3NlS2V5KGtleSk7CisgICAgfQorICAgIGlmIChnb29kKQorICAgICAg
ICByZXR1cm4gZmFtaWx5OworCisgICAgcmV0dXJuIFZhbGlkRm9udEZhbWlseUZpbmRlcigpLmZh
bWlseSgpOworfQorCit0eXBlZGVmIEhhc2hNYXA8Rml4ZWRTaXplRm9udERhdGFLZXksIFJlZlB0
cjxGaXhlZFNpemVGb250RGF0YT4sIEZpeGVkU2l6ZUZvbnREYXRhS2V5SGFzaCwgRml4ZWRTaXpl
Rm9udERhdGFLZXlUcmFpdHM+IEZpeGVkU2l6ZUZvbnRDYWNoZTsKK0ZpeGVkU2l6ZUZvbnRDYWNo
ZSBnX2ZpeGVkU2l6ZUZvbnRDYWNoZTsKKworUGFzc1JlZlB0cjxGaXhlZFNpemVGb250RGF0YT4g
Rml4ZWRTaXplRm9udERhdGE6OmNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgdW5z
aWduZWQgd2VpZ2h0LCBib29sIGl0YWxpYykKK3sKKyAgICBGaXhlZFNpemVGb250RGF0YSogZm9u
dERhdGEgPSBuZXcgRml4ZWRTaXplRm9udERhdGEoKTsKKworICAgIGZvbnREYXRhLT5tX3dlaWdo
dCA9IHdlaWdodDsKKyAgICBmb250RGF0YS0+bV9pdGFsaWMgPSBpdGFsaWM7CisKKyAgICBMT0dG
T05UJiB3aW5Gb250ID0gZm9udERhdGEtPm1fZm9udDsKKyAgICAvLyBUaGUgc2l6ZSBoZXJlIGxv
b2tzIHVudXN1YWwuICBUaGUgbmVnYXRpdmUgbnVtYmVyIGlzIGludGVudGlvbmFsLgorICAgIHdp
bkZvbnQubGZIZWlnaHQgPSAtNzI7CisgICAgd2luRm9udC5sZldpZHRoID0gMDsKKyAgICB3aW5G
b250LmxmRXNjYXBlbWVudCA9IDA7CisgICAgd2luRm9udC5sZk9yaWVudGF0aW9uID0gMDsKKyAg
ICB3aW5Gb250LmxmVW5kZXJsaW5lID0gZmFsc2U7CisgICAgd2luRm9udC5sZlN0cmlrZU91dCA9
IGZhbHNlOworICAgIHdpbkZvbnQubGZDaGFyU2V0ID0gREVGQVVMVF9DSEFSU0VUOworICAgIHdp
bkZvbnQubGZPdXRQcmVjaXNpb24gPSBPVVRfREVGQVVMVF9QUkVDSVM7CisgICAgd2luRm9udC5s
ZlF1YWxpdHkgPSBDTEVBUlRZUEVfUVVBTElUWTsgLy9ERUZBVUxUX1FVQUxJVFk7CisgICAgd2lu
Rm9udC5sZkNsaXBQcmVjaXNpb24gPSBDTElQX0RFRkFVTFRfUFJFQ0lTOworICAgIHdpbkZvbnQu
bGZQaXRjaEFuZEZhbWlseSA9IERFRkFVTFRfUElUQ0ggfCBGRl9ET05UQ0FSRTsKKyAgICB3aW5G
b250LmxmSXRhbGljID0gaXRhbGljOworICAgIHdpbkZvbnQubGZXZWlnaHQgPSBGb250UGxhdGZv
cm1EYXRhOjphZGp1c3RlZEdESUZvbnRXZWlnaHQod2VpZ2h0LCBmYW1pbHkpOworCisgICAgaW50
IGxlbiA9IHN0ZDo6bWluKGZhbWlseS5sZW5ndGgoKSwgKHVuc2lnbmVkIGludClMRl9GQUNFU0la
RSAtIDEpOworICAgIHdtZW1jcHkod2luRm9udC5sZkZhY2VOYW1lLCBmYW1pbHkuY2hhcmFjdGVy
cygpLCBsZW4pOworICAgIHdpbkZvbnQubGZGYWNlTmFtZVtsZW5dID0gTCdcMCc7CisKKyAgICBm
b250RGF0YS0+bV9oZm9udC5zZXQoQ3JlYXRlRm9udEluZGlyZWN0KCZ3aW5Gb250KSk7CisKKyAg
ICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoZ19zY3JlZW5EQywgZm9udERhdGEtPm1f
aGZvbnQuZ2V0KCkpOworCisgICAgR2V0VGV4dE1ldHJpY3MoZ19zY3JlZW5EQywgJmZvbnREYXRh
LT5tX21ldHJpY3MpOworCisjaWYgZGVmaW5lZChJTUxBTkdfRk9OVF9MSU5LKSAmJiAoSU1MQU5H
X0ZPTlRfTElOSyA9PSAyKQorICAgIGlmIChJTUxhbmdGb250TGluazIqIGxhbmdGb250TGluayA9
IGZvbnRDYWNoZSgpLT5nZXRGb250TGlua0ludGVyZmFjZSgpKSB7CisjZWxzZQorICAgIGlmIChJ
TUxhbmdGb250TGluayogbGFuZ0ZvbnRMaW5rID0gZm9udENhY2hlKCktPmdldEZvbnRMaW5rSW50
ZXJmYWNlKCkpIHsKKyNlbmRpZgorICAgICAgICBsYW5nRm9udExpbmstPkdldEZvbnRDb2RlUGFn
ZXMoZ19zY3JlZW5EQywgZm9udERhdGEtPm1faGZvbnQuZ2V0KCksICZmb250RGF0YS0+bV9jb2Rl
UGFnZXMpOworICAgICAgICBmb250RGF0YS0+bV9jb2RlUGFnZXMgfD0gRm9udFBsYXRmb3JtRGF0
YTo6Z2V0S25vd25Gb250Q29kZVBhZ2VzKHdpbkZvbnQubGZGYWNlTmFtZSk7CisgICAgfQorCisg
ICAgU2VsZWN0T2JqZWN0KGdfc2NyZWVuREMsIG9sZEZvbnQpOworCisgICAgcmV0dXJuIGFkb3B0
UmVmKGZvbnREYXRhKTsKK30KKworc3RhdGljIFBhc3NSZWZQdHI8Rml4ZWRTaXplRm9udERhdGE+
IGNyZWF0ZUZpeGVkU2l6ZUZvbnREYXRhKGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCB1bnNp
Z25lZCB3ZWlnaHQsIGJvb2wgaXRhbGljKQoreworICAgIEZpeGVkU2l6ZUZvbnREYXRhS2V5IGtl
eShmYW1pbHksIHdlaWdodCwgaXRhbGljKTsKKyAgICBwYWlyPEZpeGVkU2l6ZUZvbnRDYWNoZTo6
aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IGdfZml4ZWRTaXplRm9udENhY2hlLmFkZChrZXksIFJl
ZlB0cjxGaXhlZFNpemVGb250RGF0YT4oKSk7CisgICAgaWYgKHJlc3VsdC5zZWNvbmQpCisgICAg
ICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kID0gRml4ZWRTaXplRm9udERhdGE6OmNyZWF0ZShmYW1p
bHksIHdlaWdodCwgaXRhbGljKTsKKworICAgIHJldHVybiByZXN1bHQuZmlyc3QtPnNlY29uZDsK
K30KKworc3RhdGljIExPTkcgdG9HRElGb250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkK
K3sKKyAgICBzdGF0aWMgTE9ORyBnZGlGb250V2VpZ2h0c1tdID0geworICAgICAgICBGV19USElO
LCAgICAgICAgLy8gRm9udFdlaWdodDEwMAorICAgICAgICBGV19FWFRSQUxJR0hULCAgLy8gRm9u
dFdlaWdodDIwMAorICAgICAgICBGV19MSUdIVCwgICAgICAgLy8gRm9udFdlaWdodDMwMAorICAg
ICAgICBGV19OT1JNQUwsICAgICAgLy8gRm9udFdlaWdodDQwMAorICAgICAgICBGV19NRURJVU0s
ICAgICAgLy8gRm9udFdlaWdodDUwMAorICAgICAgICBGV19TRU1JQk9MRCwgICAgLy8gRm9udFdl
aWdodDYwMAorICAgICAgICBGV19CT0xELCAgICAgICAgLy8gRm9udFdlaWdodDcwMAorICAgICAg
ICBGV19FWFRSQUJPTEQsICAgLy8gRm9udFdlaWdodDgwMAorICAgICAgICBGV19IRUFWWSAgICAg
ICAgLy8gRm9udFdlaWdodDkwMAorICAgIH07CisgICAgcmV0dXJuIGdkaUZvbnRXZWlnaHRzW2Zv
bnRXZWlnaHRdOworfQorCitjbGFzcyBGb250UGxhdGZvcm1Qcml2YXRlRGF0YSB7CitwdWJsaWM6
CisgICAgaW50IG1fcmVmZXJlbmNlOworICAgIFJlZlB0cjxGaXhlZFNpemVGb250RGF0YT4gbV9y
b290Rm9udERhdGE7CisgICAgQXRvbWljU3RyaW5nIG1fZmFtaWx5OworICAgIEZvbnREZXNjcmlw
dGlvbiBtX2ZvbnREZXNjcmlwdGlvbjsKKyAgICBPd25QdHI8SEZPTlQ+IG1faGZvbnRTY2FsZWQ7
CisgICAgaW50IG1fc2l6ZTsKKyAgICBsb25nIG1fZm9udFNjYWxlZFdpZHRoOworICAgIGxvbmcg
bV9mb250U2NhbGVkSGVpZ2h0OworICAgIGJvb2wgbV9kaXNhYmxlZDsKKyAgICBGb250UGxhdGZv
cm1Qcml2YXRlRGF0YShpbnQgc2l6ZSwgdW5zaWduZWQgd2VpZ2h0KQorICAgICAgICA6IG1fcmVm
ZXJlbmNlKDEpCisgICAgICAgICwgbV9mYW1pbHkoRm9udFBsYXRmb3JtRGF0YTo6ZGVmYXVsdEZv
bnRGYW1pbHkoKSkKKyAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAgICAgLCBtX2ZvbnRTY2Fs
ZWRXaWR0aCgwKQorICAgICAgICAsIG1fZm9udFNjYWxlZEhlaWdodCgwKQorICAgICAgICAsIG1f
ZGlzYWJsZWQoZmFsc2UpCisgICAgeworICAgICAgICBtX3Jvb3RGb250RGF0YSA9IGNyZWF0ZUZp
eGVkU2l6ZUZvbnREYXRhKG1fZmFtaWx5LCB3ZWlnaHQsIGZhbHNlKTsKKyAgICB9CisgICAgRm9u
dFBsYXRmb3JtUHJpdmF0ZURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQorICAgICAgICA6IG1fcmVmZXJlbmNlKDEp
CisgICAgICAgICwgbV9zaXplKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpKQor
ICAgICAgICAsIG1fZm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikKKyAgICAgICAgLCBt
X2ZhbWlseShmYW1pbHkpCisgICAgICAgICwgbV9mb250U2NhbGVkV2lkdGgoMCkKKyAgICAgICAg
LCBtX2ZvbnRTY2FsZWRIZWlnaHQoMCkKKyAgICAgICAgLCBtX2Rpc2FibGVkKCFmb250RGVzY3Jp
cHRpb24uc3BlY2lmaWVkU2l6ZSgpKQorICAgIHsKKyAgICAgICAgbV9yb290Rm9udERhdGEgPSBG
aXhlZFNpemVGb250RGF0YTo6Y3JlYXRlKGZhbWlseSwgdG9HRElGb250V2VpZ2h0KGZvbnREZXNj
cmlwdGlvbi53ZWlnaHQoKSksIGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSk7CisgICAgfQorfTsK
KworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBkZXNpcmVkRmFtaWx5LCBi
b29sIHVzZURlZmF1bHRGb250SWZOb3RQcmVzZW50KQoreworICAgIFN0cmluZyBmYW1pbHkoZGVz
aXJlZEZhbWlseSk7CisgICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIGRlZmF1bHRG
b250RmFtaWx5KCkpICYmICFGb250RmFtaWx5Q2hlY2tlcihmYW1pbHkuY2hhcmFjdGVyc1dpdGhO
dWxsVGVybWluYXRpb24oKSkuaXNTdXBwb3J0ZWQoKSkgeworICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UoZmFtaWx5LCBTdHJpbmcoaGVpVGlTdHIpKSAmJiBpc1NvbmdUaVN1cHBvcnRlZCgp
KQorICAgICAgICAgICAgZmFtaWx5ID0gU3RyaW5nKHNvbmdUaVN0cik7CisgICAgICAgIGVsc2Ug
aWYgKHVzZURlZmF1bHRGb250SWZOb3RQcmVzZW50KQorICAgICAgICAgICAgZmFtaWx5ID0gZGVm
YXVsdEZvbnRGYW1pbHkoKTsKKyAgICB9CisKKyAgICBtX3ByaXZhdGUgPSBuZXcgRm9udFBsYXRm
b3JtUHJpdmF0ZURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpOworfQorCitGb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxp
cXVlKQoreworICAgIGlmICghc2l6ZSkKKyAgICAgICAgbV9wcml2YXRlID0gMDsKKyAgICBlbHNl
CisgICAgICAgIG1fcHJpdmF0ZSA9IG5ldyBGb250UGxhdGZvcm1Qcml2YXRlRGF0YSgoaW50KShz
aXplICsgMC41KSwgYm9sZCA/IEZXX0JPTEQgOiBGV19OT1JNQUwpOworfQorCitGb250UGxhdGZv
cm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCit7CisgICAgaWYgKGlzVmFsaWQoKSAmJiAhLS1t
X3ByaXZhdGUtPm1fcmVmZXJlbmNlKSB7CisgICAgICAgIGlmIChtX3ByaXZhdGUtPm1fcm9vdEZv
bnREYXRhLT5yZWZDb3VudCgpID09IDIpIHsKKyAgICAgICAgICAgIEZpeGVkU2l6ZUZvbnREYXRh
S2V5IGtleShtX3ByaXZhdGUtPm1fZmFtaWx5LCBtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5t
X3dlaWdodCwgbV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9pdGFsaWMpOworICAgICAgICAg
ICAgZ19maXhlZFNpemVGb250Q2FjaGUucmVtb3ZlKGtleSk7CisgICAgICAgIH0KKyAgICAgICAg
ZGVsZXRlIG1fcHJpdmF0ZTsKKyAgICB9Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0
Zm9ybURhdGE6Om9wZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvKQoreworICAgIGlm
IChpc1ZhbGlkKCkgJiYgIS0tbV9wcml2YXRlLT5tX3JlZmVyZW5jZSkKKyAgICAgICAgZGVsZXRl
IG1fcHJpdmF0ZTsKKworICAgIGlmIChtX3ByaXZhdGUgPSBvLm1fcHJpdmF0ZSkKKyAgICAgICAg
KyttX3ByaXZhdGUtPm1fcmVmZXJlbmNlOworCisgICAgcmV0dXJuICp0aGlzOworfQorCitIRk9O
VCBGb250UGxhdGZvcm1EYXRhOjpoZm9udCgpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKG1fcHJpdmF0ZS0+bV9kaXNhYmxlZCkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIW1fcHJpdmF0ZS0+bV9yb290Rm9udERhdGEtPm1f
aGZvbnQpCisgICAgICAgIG1fcHJpdmF0ZS0+bV9yb290Rm9udERhdGEtPm1faGZvbnQuc2V0KENy
ZWF0ZUZvbnRJbmRpcmVjdCgmbV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9mb250KSk7CisK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9oZm9udC5nZXQoKTsKK30K
KworSEZPTlQgRm9udFBsYXRmb3JtRGF0YTo6Z2V0U2NhbGVkRm9udEhhbmRsZShpbnQgaGVpZ2h0
LCBpbnQgd2lkdGgpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkgfHwgbV9wcml2YXRlLT5t
X2Rpc2FibGVkKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghbV9wcml2YXRlLT5tX2hm
b250U2NhbGVkIHx8IG1fcHJpdmF0ZS0+bV9mb250U2NhbGVkSGVpZ2h0ICE9IGhlaWdodCB8fCBt
X3ByaXZhdGUtPm1fZm9udFNjYWxlZFdpZHRoICE9IHdpZHRoKSB7CisgICAgICAgIG1fcHJpdmF0
ZS0+bV9mb250U2NhbGVkSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBtX3ByaXZhdGUtPm1fZm9u
dFNjYWxlZFdpZHRoID0gd2lkdGg7CisgICAgICAgIExPR0ZPTlQgZm9udCA9IG1fcHJpdmF0ZS0+
bV9yb290Rm9udERhdGEtPm1fZm9udDsKKyAgICAgICAgZm9udC5sZkhlaWdodCA9IC1oZWlnaHQ7
CisgICAgICAgIGZvbnQubGZXaWR0aCA9IHdpZHRoOworICAgICAgICBtX3ByaXZhdGUtPm1faGZv
bnRTY2FsZWQuc2V0KENyZWF0ZUZvbnRJbmRpcmVjdCgmZm9udCkpOworICAgIH0KKworICAgIHJl
dHVybiBtX3ByaXZhdGUtPm1faGZvbnRTY2FsZWQuZ2V0KCk7Cit9CisKK2Jvb2wgRm9udFBsYXRm
b3JtRGF0YTo6ZGlzY2FyZEZvbnRIYW5kbGUoKQoreworICAgIGlmICghaXNWYWxpZCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+
bV9oZm9udCkgeworICAgICAgICBtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5tX2hmb250LnNl
dCgwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKG1fcHJpdmF0ZS0+
bV9oZm9udFNjYWxlZCkgeworICAgICAgICBtX3ByaXZhdGUtPm1faGZvbnRTY2FsZWQuc2V0KDAp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitj
b25zdCBURVhUTUVUUklDJiBGb250UGxhdGZvcm1EYXRhOjptZXRyaWNzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9tZXRyaWNzOworfQorCitib29s
IEZvbnRQbGF0Zm9ybURhdGE6OmlzU3lzdGVtRm9udCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitpbnQgRm9udFBsYXRmb3JtRGF0YTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+bV9zaXplOworfQorCitjb25zdCBGb250RGVzY3JpcHRpb24mIEZvbnRQ
bGF0Zm9ybURhdGE6OmZvbnREZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+bV9mb250RGVzY3JpcHRpb247Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgRm9udFBs
YXRmb3JtRGF0YTo6ZmFtaWx5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX2Zh
bWlseTsKK30KKworY29uc3QgTE9HRk9OVCYgRm9udFBsYXRmb3JtRGF0YTo6bG9nRm9udCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yb290Rm9udERhdGEtPm1fZm9udDsKK30K
KworaW50IEZvbnRQbGF0Zm9ybURhdGE6OmF2ZXJhZ2VDaGFyV2lkdGgoKSBjb25zdAoreworICAg
IHJldHVybiAobV9wcml2YXRlLT5tX3Jvb3RGb250RGF0YS0+bV9tZXRyaWNzLnRtQXZlQ2hhcldp
ZHRoICogc2l6ZSgpICsgMzYpIC8gNzI7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNE
aXNhYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFpc1ZhbGlkKCkgfHwgbV9wcml2YXRlLT5t
X2Rpc2FibGVkOworfQorCitEV09SRCBGb250UGxhdGZvcm1EYXRhOjpjb2RlUGFnZXMoKSBjb25z
dAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcm9vdEZvbnREYXRhLT5tX2NvZGVQYWdlczsK
K30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc1NvbmdUaVN1cHBvcnRlZCgpCit7CisgICAg
c3RhdGljIGJvb2wgZXhpc3RzID0gRm9udEZhbWlseUNoZWNrZXIoc29uZ1RpU3RyKS5pc1N1cHBv
cnRlZCgpOworICAgIHJldHVybiBleGlzdHM7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6
bWFwS25vd25Gb250KERXT1JEIGNvZGVQYWdlcywgU3RyaW5nJiBmYW1pbHkpCit7CisgICAgS25v
d25Gb250cyYgZm9udHMgPSBrbm93bkZvbnRzKCk7CisgICAgZm9yIChLbm93bkZvbnRzOjppdGVy
YXRvciBpID0gZm9udHMuYmVnaW4oKTsgaSAhPSBmb250cy5lbmQoKTsgKytpKSB7CisgICAgICAg
IGlmIChpLT5jb2RlUGFnZXMoKSAmIGNvZGVQYWdlcykgeworICAgICAgICAgICAgZmFtaWx5ID0g
aS0+bV9mYW1pbHk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0RXT1JEIEZvbnRQbGF0Zm9ybURhdGE6OmdldEtub3du
Rm9udENvZGVQYWdlcyhjb25zdCB3Y2hhcl90KiBmYW1pbHkpCit7CisgICAgS25vd25Gb250cyYg
Zm9udHMgPSBrbm93bkZvbnRzKCk7CisgICAgZm9yIChLbm93bkZvbnRzOjppdGVyYXRvciBpID0g
Zm9udHMuYmVnaW4oKTsgaSAhPSBmb250cy5lbmQoKTsgKytpKSB7CisgICAgICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShpLT5tX2ZhbWlseSwgU3RyaW5nKGZhbWlseSkpKQorICAgICAgICAgICAg
cmV0dXJuIGktPmNvZGVQYWdlcygpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworY29uc3Qg
U3RyaW5nJiBGb250UGxhdGZvcm1EYXRhOjpkZWZhdWx0Rm9udEZhbWlseSgpCit7CisgICAgc3Rh
dGljIFN0cmluZyBmYW1pbHkoZ2V0RGVmYXVsdEZvbnRGYW1pbHkoKSk7CisgICAgcmV0dXJuIGZh
bWlseTsKK30KKworTE9ORyBGb250UGxhdGZvcm1EYXRhOjphZGp1c3RlZEdESUZvbnRXZWlnaHQo
TE9ORyBnZGlGb250V2VpZ2h0LCBjb25zdCBTdHJpbmcmIGZhbWlseSkKK3sKKyAgICBzdGF0aWMg
QXRvbWljU3RyaW5nIGx1Y2lkYVN0cigiTHVjaWRhIEdyYW5kZSIpOworICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShmYW1pbHksIGx1Y2lkYVN0cikpIHsKKyAgICAgICAgaWYgKGdkaUZvbnRXZWln
aHQgPT0gRldfTk9STUFMKQorICAgICAgICAgICAgcmV0dXJuIEZXX01FRElVTTsKKyAgICAgICAg
aWYgKGdkaUZvbnRXZWlnaHQgPT0gRldfQk9MRCkKKyAgICAgICAgICAgIHJldHVybiBGV19TRU1J
Qk9MRDsKKyAgICB9CisgICAgcmV0dXJuIGdkaUZvbnRXZWlnaHQ7Cit9CisKK30KKwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRQbGF0Zm9ybURhdGEuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGUwN2RjCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250UGxhdGZvcm1EYXRhLmgKQEAg
LTAsMCArMSw4NCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBm
b250IGltcGxlbWVudGF0aW9uLiAgSXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBhbnlvbmUg
b3RoZXIgdGhhbgorICogRm9udE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4KKyAq
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDA3LTIwMDggVG9yY2ggTW9iaWxlLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEZvbnRQbGF0Zm9ybURh
dGFXaW5jZV9ICisjZGVmaW5lIEZvbnRQbGF0Zm9ybURhdGFXaW5jZV9ICisKKyNpbmNsdWRlICJG
b250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJTdHJpbmdJbXBsLmgiCisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisKK3R5cGVkZWYgc3RydWN0IHRhZ1RFWFRNRVRSSUNXIFRFWFRNRVRS
SUM7Cit0eXBlZGVmIHN0cnVjdCB0YWdMT0dGT05UVyBMT0dGT05UOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKyAgICBjbGFzcyBGb250UGxhdGZvcm1Qcml2YXRlRGF0YTsKKworICAgIGNsYXNz
IEZvbnRQbGF0Zm9ybURhdGEgeworCisgICAgcHVibGljOgorCisgICAgICAgIEZvbnRQbGF0Zm9y
bURhdGEoKTogbV9wcml2YXRlKDApIHt9CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQg
c2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpOworCisgICAgICAgIC8vIFVzZWQgZm9yIGRl
bGV0ZWQgdmFsdWVzIGluIHRoZSBmb250IGNhY2hlJ3MgaGFzaCB0YWJsZXMuCisgICAgICAgIEZv
bnRQbGF0Zm9ybURhdGEoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fcHJpdmF0
ZSgoRm9udFBsYXRmb3JtUHJpdmF0ZURhdGEqKTEpIHt9CisgICAgICAgIGJvb2wgaXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAodW5zaWduZWQpbV9wcml2YXRlID09IDE7
IH0KKworICAgICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgYm9vbCB1c2VEZWZhdWx0
Rm9udElmTm90UHJlc2VudCA9IHRydWUpOworCisgICAgICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7
CisKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvKSA6
IG1fcHJpdmF0ZSgwKSB7IG9wZXJhdG9yPShvKTsgfQorICAgICAgICBGb250UGxhdGZvcm1EYXRh
JiBvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgbyk7CisKKyAgICAgICAgaW50IGlz
VmFsaWQoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX3ByaXZh
dGUpICYgfjE7IH0KKyAgICAgICAgSEZPTlQgaGZvbnQoKSBjb25zdDsKKyAgICAgICAgY29uc3Qg
VEVYVE1FVFJJQyYgbWV0cmljcygpIGNvbnN0OworICAgICAgICBib29sIGlzU3lzdGVtRm9udCgp
IGNvbnN0OworICAgICAgICBpbnQgc2l6ZSgpIGNvbnN0OworICAgICAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3QgeyByZXR1cm4gKHVuc2lnbmVkKW1fcHJpdmF0ZTsgfQorICAgICAgICBjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0OworICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseSgpIGNvbnN0OworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0IHsgICAgIHJldHVybiBtX3ByaXZhdGUg
PT0gb3RoZXIubV9wcml2YXRlOyB9CisgICAgICAgIEhGT05UIGdldFNjYWxlZEZvbnRIYW5kbGUo
aW50IGhlaWdodCwgaW50IHdpZHRoKSBjb25zdDsKKyAgICAgICAgY29uc3QgTE9HRk9OVCYgbG9n
Rm9udCgpIGNvbnN0OworICAgICAgICBpbnQgYXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0OworICAg
ICAgICBib29sIGlzRGlzYWJsZWQoKSBjb25zdDsKKyAgICAgICAgYm9vbCBkaXNjYXJkRm9udEhh
bmRsZSgpOworICAgICAgICBEV09SRCBjb2RlUGFnZXMoKSBjb25zdDsKKworICAgICAgICBzdGF0
aWMgYm9vbCBpc1NvbmdUaVN1cHBvcnRlZCgpOworICAgICAgICBzdGF0aWMgYm9vbCBtYXBLbm93
bkZvbnQoRFdPUkQgY29kZVBhZ2VzLCBTdHJpbmcmIGZhbWlseSk7CisgICAgICAgIHN0YXRpYyBE
V09SRCBnZXRLbm93bkZvbnRDb2RlUGFnZXMoY29uc3Qgd2NoYXJfdCogZmFtaWx5KTsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZGVmYXVsdEZvbnRGYW1pbHkoKTsKKyAgICAgICAgc3Rh
dGljIExPTkcgYWRqdXN0ZWRHRElGb250V2VpZ2h0KExPTkcgZ2RpRm9udFdlaWdodCwgY29uc3Qg
U3RyaW5nJiBmYW1pbHkpOworICAgIHByaXZhdGU6CisgICAgICAgIEZvbnRQbGF0Zm9ybVByaXZh
dGVEYXRhKiBtX3ByaXZhdGU7CisgICAgfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbmNlLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5kMDAzMzZiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9Gb250V2luY2UuY3BwCkBAIC0wLDAgKzEsMzMzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udC5oIgorCisjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udERhdGEu
aCIKKyNpbmNsdWRlICJGb250RmFsbGJhY2tMaXN0LmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgorI2luY2x1ZGUgIldpZHRoSXRlcmF0b3IuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmlj
b2RlLmg+CisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY6OlVu
aWNvZGU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSERDIGdfc2NyZWVuREMgPSBHZXREQygw
KTsKKworY2xhc3MgU2NyZWVuRGNSZWxlYXNlciB7CitwdWJsaWM6CisgICAgflNjcmVlbkRjUmVs
ZWFzZXIoKQorICAgIHsKKyAgICAgICAgUmVsZWFzZURDKDAsIGdfc2NyZWVuREMpOworICAgIH0K
K307CisKK1NjcmVlbkRjUmVsZWFzZXIgcmVsZWFzZVNjcmVlbkRjOworCit2b2lkIEZvbnQ6OmRy
YXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAorICAgICAg
ICAgICAgICAgICAgICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCkgY29uc3QKK3sKKyAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUZXh0KGZvbnREYXRh
LCBnbHlwaEJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBwb2ludCk7Cit9CisKK2NsYXNzIFRleHRS
dW5Db21wb25lbnQgeworcHVibGljOgorICAgIFRleHRSdW5Db21wb25lbnQoKSA6IG1fdGV4dFJ1
bigwLCAwKSB7fQorICAgIFRleHRSdW5Db21wb25lbnQoY29uc3QgVUNoYXIgKnN0YXJ0LCBpbnQg
bGVuZ3RoLCBjb25zdCBUZXh0UnVuJiBwYXJlbnRUZXh0UnVuLCBjb25zdCBGb250ICZmb250LCBp
bnQgb2Zmc2V0KTsKKyAgICBUZXh0UnVuQ29tcG9uZW50KGludCBzcGFjZXMsIGNvbnN0IEZvbnQg
JmZvbnQsIGludCBvZmZzZXQpOworICAgIH5UZXh0UnVuQ29tcG9uZW50KCkgeyBtX3RleHRSdW47
IH0KKworICAgIGJvb2wgaXNTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2VzOyB9CisgICAg
aW50IHRleHRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlcyA/IG1fc3BhY2VzIDogbV90
ZXh0UnVuLmxlbmd0aCgpOyB9CisKKyAgICBUZXh0UnVuIG1fdGV4dFJ1bjsKKyAgICBmbG9hdCBt
X3dpZHRoOworICAgIGludCBtX29mZnNldDsKKyAgICBpbnQgbV9zcGFjZXM7Cit9OworCitUZXh0
UnVuQ29tcG9uZW50OjpUZXh0UnVuQ29tcG9uZW50KGNvbnN0IFVDaGFyICpzdGFydCwgaW50IGxl
bmd0aCwgY29uc3QgVGV4dFJ1biYgcGFyZW50VGV4dFJ1biwgY29uc3QgRm9udCAmZm9udCwgaW50
IG8pCisgICAgOiBtX3RleHRSdW4oc3RhcnQsIGxlbmd0aCwgcGFyZW50VGV4dFJ1bi5hbGxvd1Rh
YnMoKSwgMCwgMAorICAgICAgICAsIHBhcmVudFRleHRSdW4ucnRsKCkKKyAgICAgICAgLCBwYXJl
bnRUZXh0UnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKQorICAgICAgICAsIHBhcmVudFRleHRSdW4u
YXBwbHlSdW5Sb3VuZGluZygpCisgICAgICAgICwgcGFyZW50VGV4dFJ1bi5hcHBseVdvcmRSb3Vu
ZGluZygpKQorICAgICwgbV9vZmZzZXQobykKKyAgICAsIG1fc3BhY2VzKDApCit7CisgICAgV2lk
dGhJdGVyYXRvciBpdCgmZm9udCwgbV90ZXh0UnVuKTsKKyAgICBpdC5hZHZhbmNlKG1fdGV4dFJ1
bi5sZW5ndGgoKSwgMCk7CisgICAgbV93aWR0aCA9IGl0Lm1fcnVuV2lkdGhTb0ZhcjsKK30KKwor
VGV4dFJ1bkNvbXBvbmVudDo6VGV4dFJ1bkNvbXBvbmVudChpbnQgcywgY29uc3QgRm9udCAmZm9u
dCwgaW50IG8pCisgICAgOiBtX3RleHRSdW4oMCwgMCkKKyAgICAsIG1fb2Zmc2V0KG8pCisgICAg
LCBtX3NwYWNlcyhzKQoreworICAgIG1fd2lkdGggPSBzICogZm9udC5wcmltYXJ5Rm9udCgpLT53
aWR0aEZvckdseXBoKCcgJyk7Cit9CisKK3R5cGVkZWYgVmVjdG9yPFRleHRSdW5Db21wb25lbnQs
IDEyOD4gVGV4dFJ1bkNvbXBvbmVudHM7CisKK3N0YXRpYyBpbnQgZ2VuZXJhdGVDb21wb25lbnRz
KFRleHRSdW5Db21wb25lbnRzKiBjb21wb25lbnRzLCBjb25zdCBGb250ICZmb250LCBjb25zdCBU
ZXh0UnVuICZydW4pCit7CisgICAgaW50IGxldHRlclNwYWNpbmcgPSBmb250LmxldHRlclNwYWNp
bmcoKTsKKyAgICBpbnQgd29yZFNwYWNpbmcgPSBmb250LndvcmRTcGFjaW5nKCk7CisgICAgaW50
IHBhZGRpbmcgPSBydW4ucGFkZGluZygpOworICAgIGludCBudW1TcGFjZXMgPSAwOworICAgIGlm
IChwYWRkaW5nKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcnVuLmxlbmd0aCgpOyBp
KyspCisgICAgICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKHJ1bltpXSkpCisgICAgICAg
ICAgICAgICAgKytudW1TcGFjZXM7CisgICAgfQorCisgICAgaW50IG9mZnNldCA9IDA7CisgICAg
aWYgKGxldHRlclNwYWNpbmcpIHsKKyAgICAgICAgLy8gbmVlZCB0byBkcmF3IGV2ZXJ5IGxldHRl
ciBvbiBpdCdzIG93bgorICAgICAgICBpbnQgc3RhcnQgPSAwOworICAgICAgICBpZiAoRm9udDo6
dHJlYXRBc1NwYWNlKHJ1blswXSkpIHsKKyAgICAgICAgICAgIGludCBhZGQgPSAwOworICAgICAg
ICAgICAgaWYgKG51bVNwYWNlcykgeworICAgICAgICAgICAgICAgIGFkZCA9IHBhZGRpbmcvbnVt
U3BhY2VzOworICAgICAgICAgICAgICAgIHBhZGRpbmcgLT0gYWRkOworICAgICAgICAgICAgICAg
IC0tbnVtU3BhY2VzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29tcG9uZW50cy0+YXBw
ZW5kKFRleHRSdW5Db21wb25lbnQoMSwgZm9udCwgb2Zmc2V0KSk7CisgICAgICAgICAgICBvZmZz
ZXQgKz0gYWRkICsgbGV0dGVyU3BhY2luZyArIGNvbXBvbmVudHMtPmxhc3QoKS5tX3dpZHRoOwor
ICAgICAgICAgICAgc3RhcnQgPSAxOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkgPSAx
OyBpIDwgcnVuLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIHVpbnQgY2ggPSBydW5baV07
CisgICAgICAgICAgICBpZiAoaXNIaWdoU3Vycm9nYXRlKGNoKSAmJiBpc0xvd1N1cnJvZ2F0ZShy
dW5baS0xXSkpCisgICAgICAgICAgICAgICAgY2ggPSBzdXJyb2dhdGVUb1VjczQoY2gsIHJ1bltp
LTFdKTsKKyAgICAgICAgICAgIGlmIChpc0xvd1N1cnJvZ2F0ZShjaCkgfHwgY2F0ZWdvcnkoY2gp
ID09IE1hcmtfTm9uU3BhY2luZykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGlmIChGb250Ojp0cmVhdEFzU3BhY2UocnVuW2ldKSkgeworICAgICAgICAgICAgICAgIGlu
dCBhZGQgPSAwOworICAgICAgICAgICAgICAgIGlmIChpIC0gc3RhcnQgPiAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbXBvbmVudHMtPmFwcGVuZChUZXh0UnVuQ29tcG9uZW50KHJ1bi5jaGFy
YWN0ZXJzKCkgKyBzdGFydCwgaSAtIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4sIGZvbnQsIG9mZnNldCkpOworICAgICAg
ICAgICAgICAgICAgICBvZmZzZXQgKz0gY29tcG9uZW50cy0+bGFzdCgpLm1fd2lkdGggKyBsZXR0
ZXJTcGFjaW5nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobnVtU3Bh
Y2VzKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZCA9IHBhZGRpbmcvbnVtU3BhY2VzOworICAg
ICAgICAgICAgICAgICAgICBwYWRkaW5nIC09IGFkZDsKKyAgICAgICAgICAgICAgICAgICAgLS1u
dW1TcGFjZXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbXBvbmVudHMt
PmFwcGVuZChUZXh0UnVuQ29tcG9uZW50KDEsIGZvbnQsIG9mZnNldCkpOworICAgICAgICAgICAg
ICAgIG9mZnNldCArPSB3b3JkU3BhY2luZyArIGFkZCArIGNvbXBvbmVudHMtPmxhc3QoKS5tX3dp
ZHRoICsgbGV0dGVyU3BhY2luZzsKKyAgICAgICAgICAgICAgICBzdGFydCA9IGkgKyAxOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGkg
LSBzdGFydCA+IDApIHsKKyAgICAgICAgICAgICAgICBjb21wb25lbnRzLT5hcHBlbmQoVGV4dFJ1
bkNvbXBvbmVudChydW4uY2hhcmFjdGVycygpICsgc3RhcnQsIGkgLSBzdGFydCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udCwgb2Zmc2V0
KSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGNvbXBvbmVudHMtPmxhc3QoKS5tX3dpZHRo
ICsgbGV0dGVyU3BhY2luZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXJ0ID0gaTsK
KyAgICAgICAgfQorICAgICAgICBpZiAocnVuLmxlbmd0aCgpIC0gc3RhcnQgPiAwKSB7CisgICAg
ICAgICAgICBjb21wb25lbnRzLT5hcHBlbmQoVGV4dFJ1bkNvbXBvbmVudChydW4uY2hhcmFjdGVy
cygpICsgc3RhcnQsIHJ1bi5sZW5ndGgoKSAtIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9udCwgb2Zmc2V0KSk7CisgICAgICAgICAgICBvZmZz
ZXQgKz0gY29tcG9uZW50cy0+bGFzdCgpLm1fd2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgb2Zm
c2V0ICs9IGxldHRlclNwYWNpbmc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IHN0YXJ0ID0g
MDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBydW4ubGVuZ3RoKCk7ICsraSkgeworICAg
ICAgICAgICAgaWYgKEZvbnQ6OnRyZWF0QXNTcGFjZShydW5baV0pKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGkgLSBzdGFydCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy0+
YXBwZW5kKFRleHRSdW5Db21wb25lbnQocnVuLmNoYXJhY3RlcnMoKSArIHN0YXJ0LCBpIC0gc3Rh
cnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJ1biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9udCwgb2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBj
b21wb25lbnRzLT5sYXN0KCkubV93aWR0aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaW50IGFkZCA9IDA7CisgICAgICAgICAgICAgICAgaWYgKG51bVNwYWNlcykgeworICAg
ICAgICAgICAgICAgICAgICBhZGQgPSBwYWRkaW5nL251bVNwYWNlczsKKyAgICAgICAgICAgICAg
ICAgICAgcGFkZGluZyAtPSBhZGQ7CisgICAgICAgICAgICAgICAgICAgIC0tbnVtU3BhY2VzOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb21wb25lbnRzLT5hcHBlbmQoVGV4
dFJ1bkNvbXBvbmVudCgxLCBmb250LCBvZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBvZmZzZXQg
Kz0gYWRkICsgY29tcG9uZW50cy0+bGFzdCgpLm1fd2lkdGg7CisgICAgICAgICAgICAgICAgaWYg
KGkpCisgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSB3b3JkU3BhY2luZzsKKyAgICAgICAg
ICAgICAgICBzdGFydCA9IGkgKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGlmIChydW4ubGVuZ3RoKCkgLSBzdGFydCA+IDApIHsKKyAgICAgICAgICAgIGNvbXBvbmVudHMt
PmFwcGVuZChUZXh0UnVuQ29tcG9uZW50KHJ1bi5jaGFyYWN0ZXJzKCkgKyBzdGFydCwgcnVuLmxl
bmd0aCgpIC0gc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBydW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb250LCBvZmZzZXQpKTsKKyAgICAgICAgICAgIG9mZnNldCArPSBjb21wb25lbnRzLT5s
YXN0KCkubV93aWR0aDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gb2Zmc2V0OworfQor
Cit2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIGlmICh0byA8IDAp
CisgICAgICAgIHRvID0gcnVuLmxlbmd0aCgpOworICAgIGlmIChmcm9tIDwgMCkKKyAgICAgICAg
ZnJvbSA9IDA7CisKKyAgICBUZXh0UnVuQ29tcG9uZW50cyBjb21wb25lbnRzOworICAgIGludCB3
ID0gZ2VuZXJhdGVDb21wb25lbnRzKCZjb21wb25lbnRzLCAqdGhpcywgcnVuKTsKKworICAgIGlu
dCBjdXJQb3MgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKGludCljb21wb25lbnRzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFRleHRSdW5Db21wb25lbnQmIGNvbXAgPSBjb21w
b25lbnRzLmF0KGkpOworICAgICAgICBpbnQgbGVuID0gY29tcC50ZXh0TGVuZ3RoKCk7CisgICAg
ICAgIGludCBjdXJFbmQgPSBjdXJQb3MgKyBsZW47CisgICAgICAgIGlmIChjdXJQb3MgPCB0byAm
JiBmcm9tIDwgY3VyRW5kICYmICFjb21wLmlzU3BhY2UoKSkgeworICAgICAgICAgICAgRmxvYXRQ
b2ludCBwdCA9IHBvaW50OworICAgICAgICAgICAgaWYgKHJ1bi5ydGwoKSkKKyAgICAgICAgICAg
ICAgICBwdC5zZXRYKHBvaW50LngoKSArIHcgLSBjb21wLm1fb2Zmc2V0IC0gY29tcC5tX3dpZHRo
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwdC5zZXRYKHBvaW50LngoKSAr
IGNvbXAubV9vZmZzZXQpOworICAgICAgICAgICAgZHJhd1NpbXBsZVRleHQoY29udGV4dCwgY29t
cC5tX3RleHRSdW4sIHB0LCBmcm9tIC0gY3VyUG9zLCBzdGQ6Om1pbih0bywgY3VyRW5kKSAtIGN1
clBvcyk7CisgICAgICAgIH0KKyAgICAgICAgY3VyUG9zICs9IGxlbjsKKyAgICAgICAgaWYgKGZy
b20gPCBjdXJQb3MpCisgICAgICAgICAgICBmcm9tID0gY3VyUG9zOworICAgIH0KK30KKworZmxv
YXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKSBjb25zdAoreworICAg
IFRleHRSdW5Db21wb25lbnRzIGNvbXBvbmVudHM7CisgICAgaW50IHcgPSBnZW5lcmF0ZUNvbXBv
bmVudHMoJmNvbXBvbmVudHMsICp0aGlzLCBydW4pOworICAgIHJldHVybiB3OworfQorCitpbnQg
Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IGludCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKK3sKKyAgICBU
ZXh0UnVuQ29tcG9uZW50cyBjb21wb25lbnRzOworICAgIGludCB3ID0gZ2VuZXJhdGVDb21wb25l
bnRzKCZjb21wb25lbnRzLCAqdGhpcywgcnVuKTsKKworICAgIGlmIChwb3NpdGlvbiA+PSB3KQor
ICAgICAgICByZXR1cm4gcnVuLmxlbmd0aCgpOworCisgICAgaW50IG9mZnNldCA9IDA7CisgICAg
aWYgKHJ1bi5ydGwoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbXBvbmVu
dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFRleHRSdW5Db21wb25lbnQmIGNv
bXAgPSBjb21wb25lbnRzLmF0KGkpOworICAgICAgICAgICAgaW50IHhlID0gdyAtIGNvbXAubV9v
ZmZzZXQ7CisgICAgICAgICAgICBpbnQgeHMgPSB4ZSAtIGNvbXAubV93aWR0aDsKKyAgICAgICAg
ICAgIGlmIChwb3NpdGlvbiA+PSB4cykKKyAgICAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0ICsg
KGNvbXAuaXNTcGFjZSgpCisgICAgICAgICAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8aW50Pigo
cG9zaXRpb24gLSB4ZSkgKiBjb21wLm1fc3BhY2VzIC8gc3RkOjptYXgoMS5mLCBjb21wLm1fd2lk
dGgpICsgMC41KQorICAgICAgICAgICAgICAgICAgICA6IG9mZnNldEZvclBvc2l0aW9uRm9yU2lt
cGxlVGV4dChjb21wLm1fdGV4dFJ1biwgcG9zaXRpb24gLSB4cywgaW5jbHVkZVBhcnRpYWxHbHlw
aHMpKTsKKworICAgICAgICAgICAgb2Zmc2V0ICs9IGNvbXAudGV4dExlbmd0aCgpOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb21wb25l
bnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBUZXh0UnVuQ29tcG9uZW50JiBj
b21wID0gY29tcG9uZW50cy5hdChpKTsKKyAgICAgICAgICAgIGludCB4cyA9IGNvbXAubV9vZmZz
ZXQ7CisgICAgICAgICAgICBpbnQgeGUgPSB4cyArIGNvbXAubV93aWR0aDsKKyAgICAgICAgICAg
IGlmIChwb3NpdGlvbiA8PSB4ZSkgeworICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiAtIHhz
ID49IHhlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0ICsgY29tcC50ZXh0TGVu
Z3RoKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldCArIChjb21wLmlzU3BhY2UoKQor
ICAgICAgICAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PGludD4oKHBvc2l0aW9uIC0geHMpICog
Y29tcC5tX3NwYWNlcyAvIHN0ZDo6bWF4KDEuZiwgY29tcC5tX3dpZHRoKSArIDAuNSkKKyAgICAg
ICAgICAgICAgICAgICAgOiBvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29tcC5tX3Rl
eHRSdW4sIHBvc2l0aW9uIC0geHMsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBvZmZzZXQgKz0gY29tcC50ZXh0TGVuZ3RoKCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIHJ1bi5sZW5ndGgoKTsKK30KKworCitzdGF0aWMgZmxvYXQgY3Vy
c29yVG9YKGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW5Db21wb25lbnRzJiBjb21wb25l
bnRzLCBpbnQgd2lkdGgsIGJvb2wgcnRsLCBpbnQgY3Vyc29yKQoreworICAgIGludCBzdGFydCA9
IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb21wb25lbnRzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGNvbnN0IFRleHRSdW5Db21wb25lbnQmIGNvbXAgPSBjb21wb25lbnRzLmF0KGkp
OworICAgICAgICBpZiAoc3RhcnQgKyBjb21wLnRleHRMZW5ndGgoKSA8PSBjdXJzb3IpIHsKKyAg
ICAgICAgICAgIHN0YXJ0ICs9IGNvbXAudGV4dExlbmd0aCgpOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKyAgICAgICAgaW50IHhzID0gY29tcC5tX29mZnNldDsKKyAgICAgICAg
aWYgKHJ0bCkKKyAgICAgICAgICAgIHhzID0gd2lkdGggLSB4cyAtIGNvbXAubV93aWR0aDsKKwor
ICAgICAgICBpbnQgcG9zID0gY3Vyc29yIC0gc3RhcnQ7CisgICAgICAgIGlmIChjb21wLmlzU3Bh
Y2UoKSkgeworICAgICAgICAgICAgaWYgKHJ0bCkKKyAgICAgICAgICAgICAgICBwb3MgPSBjb21w
LnRleHRMZW5ndGgoKSAtIHBvczsKKyAgICAgICAgICAgIHJldHVybiB4cyArIHBvcyAqIGNvbXAu
bV93aWR0aCAvIGNvbXAubV9zcGFjZXM7CisgICAgICAgIH0KKyAgICAgICAgV2lkdGhJdGVyYXRv
ciBpdChmb250LCBjb21wLm1fdGV4dFJ1bik7CisgICAgICAgIGl0LmFkdmFuY2UocG9zKTsKKyAg
ICAgICAgcmV0dXJuIHhzICsgaXQubV9ydW5XaWR0aFNvRmFyOworICAgIH0KKyAgICByZXR1cm4g
d2lkdGg7Cit9CisKK0Zsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBJbnRQb2ludCYgcHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7Cisg
ICAgVGV4dFJ1bkNvbXBvbmVudHMgY29tcG9uZW50czsKKyAgICBpbnQgdyA9IGdlbmVyYXRlQ29t
cG9uZW50cygmY29tcG9uZW50cywgKnRoaXMsIHJ1bik7CisKKyAgICBpZiAoIWZyb20gJiYgdG8g
PT0gcnVuLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KHB0LngoKSwgcHQueSgp
LCB3LCBoKTsKKworICAgIGZsb2F0IHgxID0gY3Vyc29yVG9YKHRoaXMsIGNvbXBvbmVudHMsIHcs
IHJ1bi5ydGwoKSwgZnJvbSk7CisgICAgZmxvYXQgeDIgPSBjdXJzb3JUb1godGhpcywgY29tcG9u
ZW50cywgdywgcnVuLnJ0bCgpLCB0byk7CisgICAgaWYgKHgyIDwgeDEpCisgICAgICAgIHN0ZDo6
c3dhcCh4MSwgeDIpOworCisgICAgcmV0dXJuIEZsb2F0UmVjdChwdC54KCkgKyB4MSwgcHQueSgp
LCB4MiAtIHgxLCBoKTsKK30KKworYm9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9y
Q29tcGxleFRleHQoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HbHlwaFBhZ2VUcmVlTm9kZVdpbmNlLmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR2x5cGhQYWdlVHJlZU5vZGVXaW5j
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdjNGUxNQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR2x5cGhQYWdlVHJl
ZU5vZGVXaW5jZS5jcHAKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDctMjAwOSBUb3JjaCBNb2JpbGUgSW5jLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCisKKyNpbmNsdWRlICJGb250Lmgi
CisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNsdWRl
ICJTaW1wbGVGb250RGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RXT1JEIGdldEtu
b3duRm9udENvZGVQYWdlcyhjb25zdCB3Y2hhcl90KiBmYW1pbHkpOworCit0eXBlZGVmIHVuc2ln
bmVkICgqZnVuY0dldENoYXJDb2RlUGFnZXMpKHVuc2lnbmVkIHNob3J0IGMsIHVuc2lnbmVkJiBs
YXN0UG9zKTsKK2Z1bmNHZXRDaGFyQ29kZVBhZ2VzIGdldENoYXJDb2RlUGFnZXMgPSAwOworCiti
b29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNo
YXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udERhdGEpCit7CisgICAgaWYgKGxlbmd0aCAhPSBidWZmZXJMZW5ndGgpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKSkg
eworICAgICAgICBEV09SRCBmb250Q29kZVBhZ2VzID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgp
LmNvZGVQYWdlcygpOworICAgICAgICBpZiAoZm9udENvZGVQYWdlcykgeworICAgICAgICAgICAg
aWYgKGdldENoYXJDb2RlUGFnZXMpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsYXN0UG9z
ID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVmZmVyTGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgRFdPUkQgYWN0dWFsQ29kZVBhZ2VzID0g
Z2V0Q2hhckNvZGVQYWdlcyhidWZmZXJbaV0sIGxhc3RQb3MpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoIWFjdHVhbENvZGVQYWdlcyB8fCAoYWN0dWFsQ29kZVBhZ2VzICYgZm9udENvZGVQYWdl
cykpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQg
KyBpLCBidWZmZXJbaV0sIGZvbnREYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgYnVm
ZmVyW2ldLCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisjaWYgZGVmaW5lZChJTUxBTkdfRk9OVF9MSU5LKSAmJiAoSU1MQU5HX0ZPTlRfTElOSyA9
PSAyKQorICAgICAgICAgICAgfSBlbHNlIGlmIChJTUxhbmdGb250TGluazIqIGxhbmdGb250TGlu
ayA9IGZvbnRDYWNoZSgpLT5nZXRGb250TGlua0ludGVyZmFjZSgpKSB7CisjZWxzZQorICAgICAg
ICAgICAgfSBlbHNlIGlmIChJTUxhbmdGb250TGluayogbGFuZ0ZvbnRMaW5rID0gZm9udENhY2hl
KCktPmdldEZvbnRMaW5rSW50ZXJmYWNlKCkpIHsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICBEV09SRCBhY3R1YWxDb2RlUGFnZXM7CisgICAgICAgICAgICAgICAgICAgIGxhbmdG
b250TGluay0+R2V0Q2hhckNvZGVQYWdlcyhidWZmZXJbaV0sICZhY3R1YWxDb2RlUGFnZXMpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbENvZGVQYWdlcyB8fCAoYWN0dWFsQ29kZVBh
Z2VzICYgZm9udENvZGVQYWdlcykpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRHbHlwaERh
dGFGb3JJbmRleChvZmZzZXQgKyBpLCBidWZmZXJbaV0sIGZvbnREYXRhKTsKKyAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5k
ZXgob2Zmc2V0ICsgaSwgYnVmZmVyW2ldLCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgIHNldEds
eXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGJ1ZmZlcltpXSwgZm9udERhdGEpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30KKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9TaW1wbGVGb250RGF0YVdpbmNlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvU2ltcGxlRm9udERhdGFXaW5jZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMTE5NTI5NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9udERhdGFXaW5jZS5jcHAKQEAgLTAsMCArMSwxNjEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5j
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisK
KyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9u
dENhY2hlLmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KKyNpbmNsdWRlIDxtbGFuZy5oPgorI2luY2x1ZGUgPHRjaGFyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworZXh0ZXJuIEhEQyBnX3NjcmVlbkRDOworCit2b2lkIFNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQoreworICAgIGlmICghbV9wbGF0Zm9ybURhdGEuaXNW
YWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBURVhUTUVUUklDJiB0bSA9IG1f
cGxhdGZvcm1EYXRhLm1ldHJpY3MoKTsKKyAgICBtX2lzU3lzdGVtRm9udCA9IG1fcGxhdGZvcm1E
YXRhLmlzU3lzdGVtRm9udCgpOworCisgICAgbV9hc2NlbnQgPSAodG0udG1Bc2NlbnQgKiBtX3Bs
YXRmb3JtRGF0YS5zaXplKCkgKyAzNikgLyA3MjsKKyAgICBtX2Rlc2NlbnQgPSAodG0udG1EZXNj
ZW50ICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICsgMzYpIC8gNzI7CisgICAgbV9saW5lR2FwID0g
KHRtLnRtRXh0ZXJuYWxMZWFkaW5nICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICsgMzYpIC8gNzI7
CisgICAgbV9saW5lU3BhY2luZyA9IG1fYXNjZW50ICsgbV9kZXNjZW50ICsgbV9saW5lR2FwOwor
ICAgIG1feEhlaWdodCA9IG1fYXNjZW50ICogMC41NmY7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtRGVzdHJveSgpCit7CisgICAgZGVsZXRlIG1fc21hbGxDYXBzRm9udERhdGE7
CisgICAgbV9zbWFsbENhcHNGb250RGF0YSA9IDA7Cit9CisKK1NpbXBsZUZvbnREYXRhKiBTaW1w
bGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAgaWYgKCFtX3NtYWxsQ2Fwc0ZvbnREYXRhKSB7Cisg
ICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzYyhmb250RGVzY3JpcHRpb24pOworICAgICAg
ICBmb250RGVzYy5zZXRDb21wdXRlZFNpemUobHJvdW5kZigwLjcwZiAqIGZvbnREZXNjLmNvbXB1
dGVkU2l6ZSgpKSk7CisgICAgICAgIGZvbnREZXNjLnNldFNwZWNpZmllZFNpemUobHJvdW5kZigw
LjcwZiAqIGZvbnREZXNjLnNwZWNpZmllZFNpemUoKSkpOworICAgICAgICBmb250RGVzYy5zZXRL
ZXl3b3JkU2l6ZShscm91bmRmKDAuNzBmICogZm9udERlc2Mua2V5d29yZFNpemUoKSkpOworICAg
ICAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQgPSBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9u
dFBsYXRmb3JtRGF0YShmb250RGVzYywgbV9wbGF0Zm9ybURhdGEuZmFtaWx5KCkpOworICAgICAg
ICBpZiAocmVzdWx0KQorICAgICAgICAgICAgbV9zbWFsbENhcHNGb250RGF0YSA9IG5ldyBTaW1w
bGVGb250RGF0YSgqcmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIG1fc21hbGxDYXBzRm9udERh
dGE7Cit9CisKK0RXT1JEIGdldEtub3duRm9udENvZGVQYWdlcyhjb25zdCB3Y2hhcl90KiBmYW1p
bHkpOworCitib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Cit7CisgICAgaWYgKG1fcGxhdGZvcm1E
YXRhLmlzRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBGSVhNRTog
TWljcm9zb2Z0IGRvY3VtZW50YXRpb24gc2VlbXMgdG8gaW1wbHkgdGhhdCBjaGFyYWN0ZXJzIGNh
biBiZSBvdXRwdXQgdXNpbmcgYSBnaXZlbiBmb250IGFuZCBEQworICAgIC8vIG1lcmVseSBieSB0
ZXN0aW5nIGNvZGUgcGFnZSBpbnRlcnNlY3Rpb24uICBUaGlzIHNlZW1zIHN1c3BlY3QgdGhvdWdo
LiAgQ2FuJ3QgYSBmb250IG9ubHkgcGFydGlhbGx5CisgICAgLy8gY292ZXIgYSBnaXZlbiBjb2Rl
IHBhZ2U/CisKKyAgICAvLyBGSVhNRTogaW4gdGhlIGNhc2UgdGhhdCB3ZSBmYWlsZWQgdG8gZ2V0
IHRoZSBpbnRlcmZhY2UsIHN0aWxsIHVzZSB0aGUgZm9udC4KKyNpZiBkZWZpbmVkKElNTEFOR19G
T05UX0xJTkspICYmIChJTUxBTkdfRk9OVF9MSU5LID09IDIpCisgICAgSU1MYW5nRm9udExpbmsy
KiBsYW5nRm9udExpbmsgPSBmb250Q2FjaGUoKS0+Z2V0Rm9udExpbmtJbnRlcmZhY2UoKTsKKyNl
bHNlCisgICAgSU1MYW5nRm9udExpbmsqIGxhbmdGb250TGluayA9IGZvbnRDYWNoZSgpLT5nZXRG
b250TGlua0ludGVyZmFjZSgpOworI2VuZGlmCisgICAgaWYgKCFsYW5nRm9udExpbmspCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgRFdPUkQgZm9udENvZGVQYWdlcyA9IG1fcGxhdGZvcm1E
YXRhLmNvZGVQYWdlcygpOworICAgIGlmICghZm9udENvZGVQYWdlcykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgRFdPUkQgYWNwQ29kZVBhZ2VzID0gMDsKKyAgICBsYW5nRm9udExpbmst
PkNvZGVQYWdlVG9Db2RlUGFnZXMoQ1BfQUNQLCAmYWNwQ29kZVBhZ2VzKTsKKworICAgIERXT1JE
IGFjdHVhbENvZGVQYWdlczsKKyAgICBsb25nIG51bUNoYXJhY3RlcnNQcm9jZXNzZWQ7CisgICAg
d2hpbGUgKGxlbmd0aCkgeworICAgICAgICBsYW5nRm9udExpbmstPkdldFN0ckNvZGVQYWdlcyhj
aGFyYWN0ZXJzLCBsZW5ndGgsIGFjcENvZGVQYWdlcywgJmFjdHVhbENvZGVQYWdlcywgJm51bUNo
YXJhY3RlcnNQcm9jZXNzZWQpOworICAgICAgICBpZiAoYWN0dWFsQ29kZVBhZ2VzICYmICEoYWN0
dWFsQ29kZVBhZ2VzICYgZm9udENvZGVQYWdlcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgbGVuZ3RoIC09IG51bUNoYXJhY3RlcnNQcm9jZXNzZWQ7CisgICAgICAgIGNo
YXJhY3RlcnMgKz0gbnVtQ2hhcmFjdGVyc1Byb2Nlc3NlZDsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQoreworICAg
IGlmICghbV9wbGF0Zm9ybURhdGEuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBj
b25zdCBURVhUTUVUUklDJiB0bSA9IG1fcGxhdGZvcm1EYXRhLm1ldHJpY3MoKTsKKworICAgIC8v
IFllcywgdGhpcyBsb29rcyBiYWNrd2FyZHMsIGJ1dCB0aGUgZml4ZWQgcGl0Y2ggYml0IGlzIGFj
dHVhbGx5IHNldCBpZiB0aGUgZm9udAorICAgIC8vIGlzICpub3QqIGZpeGVkIHBpdGNoLiAgVW5i
ZWxpZXZhYmxlIGJ1dCB0cnVlLgorICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSAhKHRtLnRtUGl0
Y2hBbmRGYW1pbHkgJiBUTVBGX0ZJWEVEX1BJVENIKTsKK30KKworZmxvYXQgU2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBpZiAo
bV9wbGF0Zm9ybURhdGEuaXNEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhH
RElPQkogaE9sZEZvbnQgPSBTZWxlY3RPYmplY3QoZ19zY3JlZW5EQywgbV9wbGF0Zm9ybURhdGEu
aGZvbnQoKSk7CisKKyAgICBTSVpFIGZvbnRTaXplOworICAgIHdjaGFyX3QgYyA9IGdseXBoOwor
ICAgIEdldFRleHRFeHRlbnRQb2ludDMyKGdfc2NyZWVuREMsICZjLCAxLCAmZm9udFNpemUpOwor
CisgICAgU2VsZWN0T2JqZWN0KGdfc2NyZWVuREMsIGhPbGRGb250KTsKKworICAgIHJldHVybiAo
ZmxvYXQpZm9udFNpemUuY3ggKiAoZmxvYXQpbV9wbGF0Zm9ybURhdGEuc2l6ZSgpIC8gNzIuZjsK
K30KKworCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQorewor
ICAgIGlmICghbV9wbGF0Zm9ybURhdGEuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBjb25zdCBURVhUTUVUUklDJiB0bSA9IG1fcGxhdGZvcm1EYXRhLm1ldHJpY3MoKTsKKyAgICBt
X2F2Z0NoYXJXaWR0aCA9ICh0bS50bUF2ZUNoYXJXaWR0aCAqIG1fcGxhdGZvcm1EYXRhLnNpemUo
KSArIDM2KSAvIDcyOworICAgIG1fbWF4Q2hhcldpZHRoID0gKHRtLnRtTWF4Q2hhcldpZHRoICog
bV9wbGF0Zm9ybURhdGEuc2l6ZSgpICsgMzYpIC8gNzI7Cit9CisKK30K
</data>
<flag name="review"
          id="17525"
          type_id="1"
          status="+"
          setter="staikos"
    />
          </attachment>
      

    </bug>

</bugzilla>