<?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>104569</bug_id>
          
          <creation_ts>2012-12-10 09:58:15 -0800</creation_ts>
          <short_desc>[GTK] Remove the Pango backend</short_desc>
          <delta_ts>2012-12-11 01:59:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>alp</cc>
    
    <cc>cgarcia</cc>
    
    <cc>dbates</cc>
    
    <cc>d-r</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>787434</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-12-10 09:58:15 -0800</bug_when>
    <thetext>Now that we can render complex text via the Harfbuzz-NG code, we have the option of removing the Pango backend. Right now it&apos;s not well supported and is missing many features.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787787</commentid>
    <comment_count>1</comment_count>
      <attachid>178653</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-12-10 15:43:27 -0800</bug_when>
    <thetext>Created attachment 178653
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787843</commentid>
    <comment_count>2</comment_count>
      <attachid>178653</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2012-12-10 16:35:15 -0800</bug_when>
    <thetext>Comment on attachment 178653
Patch

OK. As the EWS bots are reporting, this patch fails to apply. So, you will need to rebase it before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787847</commentid>
    <comment_count>3</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2012-12-10 16:50:54 -0800</bug_when>
    <thetext>Sounds good, Behdad always said this is the way to go.

Farewell Pango backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788145</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-12-11 01:06:40 -0800</bug_when>
    <thetext>Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788146</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-12-11 01:06:56 -0800</bug_when>
    <thetext>Committed r137263: &lt;http://trac.webkit.org/changeset/137263&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788206</commentid>
    <comment_count>6</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2012-12-11 01:59:16 -0800</bug_when>
    <thetext>Farewell from my side as well! Good patch, happy to see this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178653</attachid>
            <date>2012-12-10 15:43:27 -0800</date>
            <delta_ts>2012-12-10 16:35:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104569-20121211004047.patch</filename>
            <type>text/plain</type>
            <size>61927</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MTU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTA4NzdiNTQxZjcwYzMw
NzUyNzU4Y2U1ZWY3OTg5ODA2ZTA1OGQ3My4uMzE1MDk0MDFlZTAwZDVkNTkwOWJjNDQ2MzVhYmNi
NzNmMzQwZjNmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTEyLTEwICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBSZW1v
dmUgdGhlIFBhbmdvIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwNDU2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJlbW92ZSB0aGUgUGFuZ28gYmFja2VuZCBlbnRpcmVseS4gVGhlIEVGTCBi
dWlsZCBoYXMgbm8gc3VwcG9ydCBmb3IgaXQgYW5kIGl0J3MKKyAgICAgICAgbm90IHJlYWxseSBt
YWludGFpbmVkIGVub3VnaCBmb3IgdGhlIEdUSysgcG9ydCwgbm93IHRoYXQgSGFyZmJ1enpORyBz
aGFwZXMgY29tcGxleAorICAgICAgICB0ZXh0IHdoZW4gRnJlZXR5cGUgaXMgdGhlIGFjdGl2ZSB0
ZXh0IHJlbmRlcmluZyBiYWNrZW5kLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBkb2Vz
IG5vdCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogUmVtb3Zl
IFBhbmdvIGJhY2tlbmQgb3B0aW9ucyBhbmQgbW92ZSBGcmVldHlwZSBvcHRpb25zIHRvIHRoZSBj
b21tb24gbGlzdC4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBEaXR0by4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udENhY2hlUGFuZ28uY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBhbmdv
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGxh
dGZvcm1EYXRhLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28v
Rm9udFBsYXRmb3JtRGF0YVBhbmdvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9wYW5nby9HbHlwaFBhZ2VUcmVlTm9kZVBhbmdvLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9QYW5nb1V0aWxpdGllcy5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vUGFuZ29VdGlsaXRpZXMuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0YVBh
bmdvLmNwcDogUmVtb3ZlZC4KKwogMjAxMi0xMi0xMCAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFu
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiByZW1vdmUgdGhlIE92ZXJy
aWRlcyAvIFNldHRpbmdzIGNvbnRleHQgbWVudSBmcm9tIGdlYXIgaWNvbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQppbmRleCAwMjUzODlkNzhmZjdkYWIwM2FhOTAzNzdkZmYyNDE3Yjk5MTM5M2IxLi5kNTcy
OGI0NjBlNTViOTFkNTNmMmEzZmZmYTM3YWQ1NzVjMGNlZjYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQpAQCAtNSw2ICs1LDggQEAgV0VCQ09SRV9DU1NfUFJPUEVSVFlfTkFNRVMgOj0gJChXZWJDb3Jl
KS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgogV0VCQ09SRV9DU1NfVkFMVUVfS0VZV09SRFMgOj0g
JChXZWJDb3JlKS9jc3MvQ1NTVmFsdWVLZXl3b3Jkcy5pbgogCiB3ZWJjb3JlX2NwcGZsYWdzICs9
IFwKKwktRFdURl9VU0VfRlJFRVRZUEU9MSBcCisJLURXVEZfVVNFX0hBUkZCVVpaX05HPTEgXAog
CS1JJChzcmNkaXIpL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYyBcCiAJLUkkKHNyY2Rpcikv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HIFwKQEAgLTU4LDcgKzYwLDEwIEBAIHdlYmNv
cmVfY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NwdS9hcm0vZmlsdGVycy8gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvdGV4bWFwIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1IFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6eiBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbCBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMgXApAQCAtMTA2LDYgKzExMSw4IEBA
IHdlYmNvcmVfY3BwZmxhZ3MgKz0gXAogCiB3ZWJjb3JlZ3RrX2NwcGZsYWdzICs9IFwKIAktRFdF
QktJVEdUS19BUElfVkVSU0lPTl9TVFJJTkc9XCJAV0VCS0lUR1RLX0FQSV9WRVJTSU9OQFwiIFwK
KwktRFdURl9VU0VfRlJFRVRZUEU9MSBcCisJLURXVEZfVVNFX0hBUkZCVVpaX05HPTEgXAogCS1E
V1RGX1VTRV9TT1VQPTEgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZ3RrIFwKQEAgLTEx
NCw3ICsxMjEsMTAgQEAgd2ViY29yZWd0a19jcHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyIFwKIAktSSQoc3JjZGlyKS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW9jbHVlIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlybyBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dseCBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enogXAorCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9lZ2wgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lciBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrIFwKQEAgLTEyMywyNyArMTMzLDYgQEAgd2ViY29yZWd0a19j
cHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9l
bmNoYW50CiAKICMgLS0tCi0jIEZyZWVUeXBlIGZvbnQgYmFja2VuZAotIyAtLS0KLWlmIFVTRV9G
UkVFVFlQRQotd2ViY29yZWd0a19jcHBmbGFncyArPSBcCi0JLURXVEZfVVNFX0ZSRUVUWVBFPTEg
XAotCS1EV1RGX1VTRV9IQVJGQlVaWl9ORz0xIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZSBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enogXAotCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nCi1lbmRpZiAjIEVORCBVU0VfRlJFRVRZ
UEUKLQotIyAtLS0KLSMgUGFuZ28gZm9udCBiYWNrZW5kCi0jIC0tLQotaWYgVVNFX1BBTkdPCi13
ZWJjb3JlZ3RrX2NwcGZsYWdzICs9IFwKLQktRFdURl9VU0VfUEFOR089MSBcCi0JLUkkKHNyY2Rp
cikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28KLWVuZGlmICMgRU5EIFVT
RV9QQU5HTwotCi0jIC0tLQogIyBXaW5kb3dzIHBsdWdpbiBzdXBwb3J0CiAjIC0tLQogaWYgVEFS
R0VUX1dJTjMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBjNmIwZjJjODlmOTM3
YjcxOGQ0NTcyYjc4NTJmMmQxMTEyNjNhYjYxLi4zNGYyNTE0YzM1MzA2YTcyMzlhYjgxZTcwNTVl
NjAyNjIxY2Q3ZDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQxNjksNiAr
NDE2OSwxNSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvV2lu
ZG93Rm9jdXNBbGxvd2VkSW5kaWNhdG9yLmggXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvV29ya2Vy
TmF2aWdhdG9yLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9Xb3JrZXJOYXZpZ2F0b3IuaCBc
CisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJl
ZVR5cGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNwcCBcCisJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFG
cmVlVHlwZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Zv
bnRDYWlyb0hhcmZidXp6TkcuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2UuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAgXAorCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlQ2Fpcm8u
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJm
QnV6elNoYXBlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuaCBcCiAJU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ucHJ1bnRpbWUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9ucHR5cGVzLmggXApAQCAtNTk4MCw2ICs1OTg5LDcgQEAgd2ViY29yZWd0a19zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJH
ZW9jbHVlQ2xpZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaCBcCisJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZy
ZWVUeXBlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0dTdHJlYW1lckdXb3JsZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HU3RyZWFtZXJHV29ybGQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwIFwKQEAgLTYxNjAsNDAg
KzYxNzAsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9yR3RrLmNwcAogZW5kaWYKIAotIyAtLS0KLSMgRnJl
ZVR5cGUgZm9udCBiYWNrZW5kCi0jIC0tLQotaWYgVVNFX0ZSRUVUWVBFCi13ZWJjb3JlX3NvdXJj
ZXMgKz0gXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWly
b0hhcmZidXp6TkcuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVl
dHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZyZWV0eXBlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0dseXBoUGFnZVRyZWVOb2Rl
RnJlZVR5cGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXJCYXNlLmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFj
ZUNhaXJvLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
bmcvSGFyZkJ1enpTaGFwZXIuY3BwCi13ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlw
ZS5jcHAKLQotZW5kaWYgIyBFTkQgVVNFX0ZSRUVUWVBFCi0KLSMgLS0tCi0jIFBhbmdvIGZvbnQg
YmFja2VuZAotIyAtLS0KLWlmIFVTRV9QQU5HTwotd2ViY29yZV9zb3VyY2VzICs9IFwKLQlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250Q2FjaGVQYW5nby5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDdXN0b21QbGF0Zm9y
bURhdGFQYW5nby5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Bhbmdv
L0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3BhbmdvL0ZvbnRQbGF0Zm9ybURhdGEuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcGFuZ28vR2x5cGhQYWdlVHJlZU5vZGVQYW5nby5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCi13
ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3BhbmdvL0ZvbnRQYW5nby5jcHAKLWVuZGlmICMgRU5EIFVTRV9QQU5HTwotCiBpZiBVU0VfR1NU
UkVBTUVSCiB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcCBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKaW5kZXggZjUw
NTdkNmExZmNiN2VlZDY2ZWRjZWQzNTYxMDQxMzk2ZjAwZDRlNC4uODIyNDQ5MjMwYTQwNmY2Yzdi
NTFiNGExMDIxZmRmMjAzNmU5NmI2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtMzEsMTAgKzMxLDggQEAKICNpbmNs
dWRlICJ3aW5jZS9Gb250UGxhdGZvcm1EYXRhLmgiCiAjZWxpZiBQTEFURk9STShXWCkKICNpbmNs
dWRlICJ3eC9Gb250UGxhdGZvcm1EYXRhLmgiCi0jZWxpZiAoUExBVEZPUk0oRUZMKSB8fCBQTEFU
Rk9STShHVEspKSAmJiBVU0UoRlJFRVRZUEUpCisjZWxpZiBQTEFURk9STShFRkwpIHx8IFBMQVRG
T1JNKEdUSykKICNpbmNsdWRlICJmcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhLmgiCi0jZWxpZiAo
UExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShHVEspKSAmJiBVU0UoUEFOR08pCi0jaW5jbHVkZSAi
cGFuZ28vRm9udFBsYXRmb3JtRGF0YS5oIgogI2Vsc2UKIAogI2lmbmRlZiBGb250UGxhdGZvcm1E
YXRhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Bhbmdv
L0ZvbnRDYWNoZVBhbmdvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Bh
bmdvL0ZvbnRDYWNoZVBhbmdvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZk
NjNjNTBmOTE3YjcxNWMzZDRkMmY1Mjg3NzVjZGMzNTNhYjUyYy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9wYW5nby9Gb250Q2FjaGVQYW5nby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0KLSNpbmNs
dWRlICJGb250LmgiCi0jaW5jbHVkZSAiT3duUHRyQ2Fpcm8uaCIKLSNpbmNsdWRlICJTaW1wbGVG
b250RGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgRm9udENhY2hlOjpw
bGF0Zm9ybUluaXQoKQotewotICAgIGlmICghRm9udFBsYXRmb3JtRGF0YTo6aW5pdCgpKQotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQ
bGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotUGFz
c1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4g
c2hvdWxkUmV0YWluKQotewotICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBz
b21laG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLgotICAgIC8vIEZvciBub3cg
d2UnbGwgcGljayB0aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNo
YW5naW5nIGFueSBwcmVmcy4KLSAgICBzdGF0aWMgQXRvbWljU3RyaW5nIHRpbWVzU3RyKCJUaW1l
cyBOZXcgUm9tYW4iKTsKLSAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoZm9udERlc2NyaXB0
aW9uLCB0aW1lc1N0ciwgZmFsc2UsIHNob3VsZFJldGFpbik7Ci19Ci0KLXZvaWQgRm9udENhY2hl
OjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rv
cjx1bnNpZ25lZD4mIHRyYWl0c01hc2tzKQotewotfQotCi1Gb250UGxhdGZvcm1EYXRhKiBGb250
Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQotewotICAgIHJldHVybiBu
ZXcgRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseSk7Ci19Ci0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGFQYW5nby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9wYW5nby9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmOWQzNmQzZjI1MjEyMGZmMjM2YTk2MjVhZjhiY2E0Yzg0MGUxMmVhLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgotCi0jaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLUZvbnRDdXN0b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkK
LXsKLX0KLQotRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxh
dGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250T3JpZW50YXRp
b24sIEZvbnRXaWR0aFZhcmlhbnQsIEZvbnRSZW5kZXJpbmdNb2RlKQotewotICAgIHJldHVybiBG
b250UGxhdGZvcm1EYXRhKG1fZm9udEZhY2UsIHNpemUsIGJvbGQsIGl0YWxpYyk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHJlbGVhc2VEYXRhKHZvaWQqIGRhdGEpCi17Ci0gICAgc3RhdGljX2Nhc3Q8U2hh
cmVkQnVmZmVyKj4oZGF0YSktPmRlcmVmKCk7Ci19Ci0KLUZvbnRDdXN0b21QbGF0Zm9ybURhdGEq
IGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoU2hhcmVkQnVmZmVyKiBidWZmZXIpCi17Ci0g
ICAgLy8gRklYTUU6IHdlIG5lZWQgc3VwcG9ydCBpbiBwYW5nbyB0byByZWFkIGZvbnRzIGZyb20g
bWVtb3J5IHRvIGltcGxlbWVudCB0aGlzLnkKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBGb250
Q3VzdG9tUGxhdGZvcm1EYXRhOjpzdXBwb3J0c0Zvcm1hdChjb25zdCBTdHJpbmcmIC8qIGZvcm1h
dCAqLykKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQYW5nby5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGFuZ28uY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiOTFiZmM5ODBkODVhYzczMDg1YWE4MzIzZTY3YThmYjY5MDFhNDdk
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQYW5nby5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw0NjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBN
aWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcg
SGlyb3l1a2kgSWtlem9lCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgS291aGVpIFN1dG91Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBYYW4gTG9wZXogPHhhbkBnbm9tZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggTnVhbnRpIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gZW1iZWRkZWQg
c3lzdGVtcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRm9udC5oIgotCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRl
eHRDYWlyby5oIgotI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250
RGF0YS5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1
ZGUgPHBhbmdvL3BhbmdvLmg+Ci0jaW5jbHVkZSA8cGFuZ28vcGFuZ29jYWlyby5oPgotCi0jaWYg
UExBVEZPUk0oR1RLKQotI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNlbHNlCi0jaW5jbHVkZSAiUGFu
Z29VdGlsaXRpZXMuaCIKLSNlbmRpZgotCi0jaWYgVVNFKEZSRUVUWVBFKQotI2luY2x1ZGUgPHBh
bmdvL3BhbmdvZmMtZm9udG1hcC5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
I2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi10eXBlZGVmIEdka1JlZ2lvbiogUGFuZ29SZWdpb25U
eXBlOwotCi12b2lkIGRlc3Ryb3lQYW5nb1JlZ2lvbihQYW5nb1JlZ2lvblR5cGUgcmVnaW9uKQot
ewotICAgIGdka19yZWdpb25fZGVzdHJveShyZWdpb24pOwotfQotCi1JbnRSZWN0IGdldFBhbmdv
UmVnaW9uRXh0ZW50cyhQYW5nb1JlZ2lvblR5cGUgcmVnaW9uKQotewotICAgIEdka1JlY3Rhbmds
ZSByZWN0YW5nbGU7Ci0gICAgZ2RrX3JlZ2lvbl9nZXRfY2xpcGJveChyZWdpb24sICZyZWN0YW5n
bGUpOwotICAgIHJldHVybiBJbnRSZWN0KHJlY3RhbmdsZS54LCByZWN0YW5nbGUueSwgcmVjdGFu
Z2xlLndpZHRoLCByZWN0YW5nbGUuaGVpZ2h0KTsKLX0KLSNlbHNlCi10eXBlZGVmIGNhaXJvX3Jl
Z2lvbl90KiBQYW5nb1JlZ2lvblR5cGU7Ci0KLXZvaWQgZGVzdHJveVBhbmdvUmVnaW9uKFBhbmdv
UmVnaW9uVHlwZSByZWdpb24pCi17Ci0gICAgY2Fpcm9fcmVnaW9uX2Rlc3Ryb3kocmVnaW9uKTsK
LX0KLQotSW50UmVjdCBnZXRQYW5nb1JlZ2lvbkV4dGVudHMoUGFuZ29SZWdpb25UeXBlIHJlZ2lv
bikKLXsKLSAgICBjYWlyb19yZWN0YW5nbGVfaW50X3QgcmVjdGFuZ2xlOwotICAgIGNhaXJvX3Jl
Z2lvbl9nZXRfZXh0ZW50cyhyZWdpb24sICZyZWN0YW5nbGUpOwotICAgIHJldHVybiBJbnRSZWN0
KHJlY3RhbmdsZS54LCByZWN0YW5nbGUueSwgcmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUuaGVp
Z2h0KTsKLX0KLSNlbmRpZgotCi0jZGVmaW5lIElTX0hJR0hfU1VSUk9HQVRFKHUpICAoKFVDaGFy
KSh1KSA+PSAoVUNoYXIpMHhkODAwICYmIChVQ2hhcikodSkgPD0gKFVDaGFyKTB4ZGJmZikKLSNk
ZWZpbmUgSVNfTE9XX1NVUlJPR0FURSh1KSAgKChVQ2hhcikodSkgPj0gKFVDaGFyKTB4ZGMwMCAm
JiAoVUNoYXIpKHUpIDw9IChVQ2hhcikweGRmZmYpCi0KLXN0YXRpYyBnY2hhciogdXRmMTZUb1V0
ZjgoY29uc3QgVUNoYXIqIGFUZXh0LCBnaW50IGFMZW5ndGgsIGdpbnQgJmxlbmd0aCkKLXsKLSAg
ICBnYm9vbGVhbiBuZWVkQ29weSA9IEZBTFNFOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBh
TGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKCFhVGV4dFtpXSB8fCBJU19MT1dfU1VSUk9HQVRF
KGFUZXh0W2ldKSkgewotICAgICAgICAgICAgbmVlZENvcHkgPSBUUlVFOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0gCi0KLSAgICAgICAgaWYgKElTX0hJR0hfU1VSUk9HQVRFKGFUZXh0
W2ldKSkgewotICAgICAgICAgICAgaWYgKGkgPCBhTGVuZ3RoIC0gMSAmJiBJU19MT1dfU1VSUk9H
QVRFKGFUZXh0W2krMV0pKQotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgIG5lZWRDb3B5ID0gVFJVRTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEdPd25QdHI8VUNoYXI+
IGNvcGllZFN0cmluZzsKLSAgICBpZiAobmVlZENvcHkpIHsKLSAgICAgICAgLyogUGFuZ28gZG9l
c24ndCBjb3JyZWN0bHkgaGFuZGxlIG51bHMuICBXZSBjb252ZXJ0IHRoZW0gdG8gMHhmZi4gKi8K
LSAgICAgICAgLyogQWxzbyAidmFsaWRhdGUiIFVURi0xNiB0ZXh0IHRvIG1ha2Ugc3VyZSBjb252
ZXJzaW9uIGRvZXNuJ3QgZmFpbC4gKi8KLQotICAgICAgICBjb3BpZWRTdHJpbmcuc2V0KHN0YXRp
Y19jYXN0PFVDaGFyKj4oZ19tZW1kdXAoYVRleHQsIGFMZW5ndGggKiBzaXplb2YoYVRleHRbMF0p
KSkpOwotICAgICAgICBVQ2hhciogcCA9IGNvcGllZFN0cmluZy5nZXQoKTsKLQotICAgICAgICAv
KiBkb24ndCBuZWVkIHRvIHJlc2V0IGkgKi8KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBh
TGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmICghcFtpXSB8fCBJU19MT1dfU1VSUk9HQVRF
KHBbaV0pKQotICAgICAgICAgICAgICAgIHBbaV0gPSAweEZGRkQ7Ci0gICAgICAgICAgICBlbHNl
IGlmIChJU19ISUdIX1NVUlJPR0FURShwW2ldKSkgewotICAgICAgICAgICAgICAgIGlmIChpIDwg
YUxlbmd0aCAtIDEgJiYgSVNfTE9XX1NVUlJPR0FURShhVGV4dFtpKzFdKSkKLSAgICAgICAgICAg
ICAgICAgICAgaSsrOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
cFtpXSA9IDB4RkZGRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGFUZXh0
ID0gcDsKLSAgICB9Ci0KLSAgICBnY2hhciogdXRmOFRleHQ7Ci0gICAgZ2xvbmcgaXRlbXNXcml0
dGVuOwotICAgIHV0ZjhUZXh0ID0gZ191dGYxNl90b191dGY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgZ3VuaWNoYXIyKj4oYVRleHQpLCBhTGVuZ3RoLCAwLCAmaXRlbXNXcml0dGVuLCAwKTsKLSAg
ICBsZW5ndGggPSBpdGVtc1dyaXR0ZW47Ci0KLSAgICByZXR1cm4gdXRmOFRleHQ7Ci19Ci0KLXN0
YXRpYyBnY2hhciogY29udmVydFVuaUNoYXJUb1VURjgoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IGdpbnQgbGVuZ3RoLCBpbnQgZnJvbSwgaW50IHRvKQotewotICAgIGdpbnQgbmV3TGVuZ3RoID0g
MDsKLSAgICBHT3duUHRyPGdjaGFyPiB1dGY4VGV4dCh1dGYxNlRvVXRmOChjaGFyYWN0ZXJzLCBs
ZW5ndGgsIG5ld0xlbmd0aCkpOwotICAgIGlmICghdXRmOFRleHQpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgZ2NoYXIqIHBvcyA9IHV0ZjhUZXh0LmdldCgpOwotICAgIGlmIChmcm9tID4gMCkg
ewotICAgICAgICAvLyBkaXNjYXJkIHRoZSBmaXJzdCAnZnJvbScgY2hhcmFjdGVycwotICAgICAg
ICAvLyBGSVhNRTogd2Ugc2hvdWxkIGRvIHRoaXMgYmVmb3JlIHRoZSBjb252ZXJzaW9uIHByb2Jh
Ymx5Ci0gICAgICAgIHBvcyA9IGdfdXRmOF9vZmZzZXRfdG9fcG9pbnRlcih1dGY4VGV4dC5nZXQo
KSwgZnJvbSk7Ci0gICAgfQotCi0gICAgZ2ludCBsZW4gPSBzdHJsZW4ocG9zKTsKLSAgICBHU3Ry
aW5nKiByZXQgPSBnX3N0cmluZ19uZXdfbGVuKE5VTEwsIGxlbik7Ci0KLSAgICAvLyByZXBsYWNl
IGxpbmUgYnJlYWsgYnkgc3BhY2UKLSAgICB3aGlsZSAobGVuID4gMCkgewotICAgICAgICBnaW50
IGluZGV4LCBzdGFydDsKLSAgICAgICAgcGFuZ29fZmluZF9wYXJhZ3JhcGhfYm91bmRhcnkocG9z
LCBsZW4sICZpbmRleCwgJnN0YXJ0KTsKLSAgICAgICAgZ19zdHJpbmdfYXBwZW5kX2xlbihyZXQs
IHBvcywgaW5kZXgpOwotICAgICAgICBpZiAoaW5kZXggPT0gc3RhcnQpCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZ19zdHJpbmdfYXBwZW5kX2MocmV0LCAnICcpOwotICAgICAgICBwb3Mg
Kz0gc3RhcnQ7Ci0gICAgICAgIGxlbiAtPSBzdGFydDsKLSAgICB9Ci0gICAgcmV0dXJuIGdfc3Ry
aW5nX2ZyZWUocmV0LCBGQUxTRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldFBhbmdvQXR0cmlidXRl
cyhjb25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIFBhbmdvTGF5b3V0KiBsYXlv
dXQpCi17Ci0jaWYgVVNFKEZSRUVUWVBFKQotICAgIGlmIChmb250LT5wcmltYXJ5Rm9udCgpLT5w
bGF0Zm9ybURhdGEoKS5tX3BhdHRlcm4pIHsKLSAgICAgICAgUGFuZ29Gb250RGVzY3JpcHRpb24q
IGRlc2MgPSBwYW5nb19mY19mb250X2Rlc2NyaXB0aW9uX2Zyb21fcGF0dGVybihmb250LT5wcmlt
YXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5tX3BhdHRlcm4uZ2V0KCksIEZBTFNFKTsKLSAgICAg
ICAgcGFuZ29fbGF5b3V0X3NldF9mb250X2Rlc2NyaXB0aW9uKGxheW91dCwgZGVzYyk7Ci0gICAg
ICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZShkZXNjKTsKLSAgICB9Ci0jZWxpZiBVU0Uo
UEFOR08pCi0gICAgaWYgKGZvbnQtPnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLm1fZm9u
dCkgewotICAgICAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiogZGVzYyA9IHBhbmdvX2ZvbnRfZGVz
Y3JpYmUoZm9udC0+cHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkubV9mb250KTsKLSAgICAg
ICAgcGFuZ29fbGF5b3V0X3NldF9mb250X2Rlc2NyaXB0aW9uKGxheW91dCwgZGVzYyk7Ci0gICAg
ICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZShkZXNjKTsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIHBhbmdvX2xheW91dF9zZXRfYXV0b19kaXIobGF5b3V0LCBGQUxTRSk7Ci0KLSAgICBQYW5n
b0NvbnRleHQqIHBhbmdvQ29udGV4dCA9IHBhbmdvX2xheW91dF9nZXRfY29udGV4dChsYXlvdXQp
OwotICAgIFBhbmdvRGlyZWN0aW9uIGRpcmVjdGlvbiA9IHJ1bi5ydGwoKSA/IFBBTkdPX0RJUkVD
VElPTl9SVEwgOiBQQU5HT19ESVJFQ1RJT05fTFRSOwotICAgIHBhbmdvX2NvbnRleHRfc2V0X2Jh
c2VfZGlyKHBhbmdvQ29udGV4dCwgZGlyZWN0aW9uKTsKLSAgICBQYW5nb0F0dHJMaXN0KiBsaXN0
ID0gcGFuZ29fYXR0cl9saXN0X25ldygpOwotICAgIFBhbmdvQXR0cmlidXRlKiBhdHRyOwotCi0g
ICAgYXR0ciA9IHBhbmdvX2F0dHJfc2l6ZV9uZXdfYWJzb2x1dGUoZm9udC0+cGl4ZWxTaXplKCkg
KiBQQU5HT19TQ0FMRSk7Ci0gICAgYXR0ci0+ZW5kX2luZGV4ID0gR19NQVhVSU5UOwotICAgIHBh
bmdvX2F0dHJfbGlzdF9pbnNlcnRfYmVmb3JlKGxpc3QsIGF0dHIpOwotCi0gICAgaWYgKCFydW4u
c3BhY2luZ0Rpc2FibGVkKCkpIHsKLSAgICAgICAgYXR0ciA9IHBhbmdvX2F0dHJfbGV0dGVyX3Nw
YWNpbmdfbmV3KGZvbnQtPmxldHRlclNwYWNpbmcoKSAqIFBBTkdPX1NDQUxFKTsKLSAgICAgICAg
YXR0ci0+ZW5kX2luZGV4ID0gR19NQVhVSU5UOwotICAgICAgICBwYW5nb19hdHRyX2xpc3RfaW5z
ZXJ0X2JlZm9yZShsaXN0LCBhdHRyKTsKLSAgICB9Ci0KLSAgICAvLyBQYW5nbyBkb2VzIG5vdCB5
ZXQgc3VwcG9ydCBzeW50aGVzaXNpbmcgc21hbGwgY2FwcwotICAgIC8vIFNlZSBodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYxMAotCi0gICAgcGFuZ29fbGF5b3V0X3Nl
dF9hdHRyaWJ1dGVzKGxheW91dCwgbGlzdCk7Ci0gICAgcGFuZ29fYXR0cl9saXN0X3VucmVmKGxp
c3QpOwotfQotCi1ib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4
dCgpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEZvbnQ6OmNhbkV4cGFuZEFyb3Vu
ZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0
YXRpYyB2b2lkIGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRl
eHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBQYW5nb0xheW91dExpbmUqIGxheW91dExpbmUs
IFBhbmdvUmVnaW9uVHlwZSByZW5kZXJSZWdpb24pCi17Ci0gICAgU2hhZG93Qmx1ciYgc2hhZG93
ID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+c2hhZG93Qmx1cigpOwotCi0g
ICAgaWYgKCEoZ3JhcGhpY3NDb250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlRmls
bCkgfHwgc2hhZG93LnR5cGUoKSA9PSBTaGFkb3dCbHVyOjpOb1NoYWRvdykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgRmxvYXRQb2ludCB0b3RhbE9mZnNldChwb2ludCArIGdyYXBoaWNzQ29udGV4
dC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQpOwotCi0gICAgLy8gT3B0aW1pemUgbm9uLWJsdXJyeSBz
aGFkb3dzLCBieSBqdXN0IGRyYXdpbmcgdGV4dCB3aXRob3V0IHRoZSBTaGFkb3dCbHVyLgotICAg
IGlmICghc2hhZG93Lm11c3RVc2VTaGFkb3dCbHVyKGdyYXBoaWNzQ29udGV4dCkpIHsKLSAgICAg
ICAgY2Fpcm9fdCogY29udGV4dCA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PmNyKCk7Ci0gICAgICAgIGNhaXJvX3NhdmUoY29udGV4dCk7Ci0gICAgICAgIGNhaXJvX3RyYW5z
bGF0ZShjb250ZXh0LCB0b3RhbE9mZnNldC54KCksIHRvdGFsT2Zmc2V0LnkoKSk7Ci0KLSAgICAg
ICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjb250ZXh0LCBncmFwaGljc0NvbnRleHQtPnN0YXRl
KCkuc2hhZG93Q29sb3IpOwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgZ2RrX2NhaXJvX3Jl
Z2lvbihjb250ZXh0LCByZW5kZXJSZWdpb24pOwotI2Vsc2UKLSAgICAgICAgYXBwZW5kUmVnaW9u
VG9DYWlyb0NvbnRleHQoY29udGV4dCwgcmVuZGVyUmVnaW9uKTsKLSNlbmRpZgotICAgICAgICBj
YWlyb19jbGlwKGNvbnRleHQpOwotICAgICAgICBwYW5nb19jYWlyb19zaG93X2xheW91dF9saW5l
KGNvbnRleHQsIGxheW91dExpbmUpOwotCi0gICAgICAgIGNhaXJvX3Jlc3RvcmUoY29udGV4dCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgZXh0ZW50cyhnZXRQYW5n
b1JlZ2lvbkV4dGVudHMocmVuZGVyUmVnaW9uKSk7Ci0gICAgZXh0ZW50cy5zZXRMb2NhdGlvbihG
bG9hdFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgpIC0gZXh0ZW50cy5oZWlnaHQoKSkpOwotICAg
IGlmIChHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3cuYmVnaW5TaGFkb3dM
YXllcihncmFwaGljc0NvbnRleHQsIGV4dGVudHMpKSB7Ci0gICAgICAgIGNhaXJvX3QqIGNhaXJv
U2hhZG93Q29udGV4dCA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwot
ICAgICAgICBjYWlyb190cmFuc2xhdGUoY2Fpcm9TaGFkb3dDb250ZXh0LCBwb2ludC54KCksIHBv
aW50LnkoKSk7Ci0gICAgICAgIHBhbmdvX2NhaXJvX3Nob3dfbGF5b3V0X2xpbmUoY2Fpcm9TaGFk
b3dDb250ZXh0LCBsYXlvdXRMaW5lKTsKLQotICAgICAgICAvLyBXZSBuZWVkIHRoZSBjbGlwcGlu
ZyByZWdpb24gdG8gYmUgYWN0aXZlIHdoZW4gd2UgYmxpdCB0aGUgYmx1cnJlZCBzaGFkb3cgYmFj
aywKLSAgICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB3YW50IGFueSBiaXRzIGFuZCBwaWVjZXMg
b2YgY2hhcmFjdGVycyBvdXQgb2YgcmFuZ2UgdG8gYmUKLSAgICAgICAgLy8gZHJhd24uIFNpbmNl
IFNoYWRvd0JsdXIgZXhwZWN0cyBhIGNvbnNpc3RlbnQgdHJhbnNmb3JtLCB3ZSBoYXZlIHRvIHVu
ZG8gdGhlCi0gICAgICAgIC8vIHRyYW5zbGF0aW9uIGJlZm9yZSBjYWxsaW5nIGVuZFNoYWRvd0xh
eWVyIGFzIHdlbGwuCi0gICAgICAgIGNhaXJvX3QqIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwotICAgICAgICBjYWlyb19zYXZlKGNvbnRleHQpOwot
ICAgICAgICBjYWlyb190cmFuc2xhdGUoY29udGV4dCwgdG90YWxPZmZzZXQueCgpLCB0b3RhbE9m
ZnNldC55KCkpOwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgZ2RrX2NhaXJvX3JlZ2lvbihj
b250ZXh0LCByZW5kZXJSZWdpb24pOwotI2Vsc2UKLSAgICAgICAgYXBwZW5kUmVnaW9uVG9DYWly
b0NvbnRleHQoY29udGV4dCwgcmVuZGVyUmVnaW9uKTsKLSNlbmRpZgotICAgICAgICBjYWlyb19j
bGlwKGNvbnRleHQpOwotICAgICAgICBjYWlyb190cmFuc2xhdGUoY29udGV4dCwgLXRvdGFsT2Zm
c2V0LngoKSwgLXRvdGFsT2Zmc2V0LnkoKSk7Ci0KLSAgICAgICAgc2hhZG93LmVuZFNoYWRvd0xh
eWVyKGdyYXBoaWNzQ29udGV4dCk7Ci0gICAgICAgIGNhaXJvX3Jlc3RvcmUoY29udGV4dCk7Ci0g
ICAgfQotfQotCi12b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0Ci17Ci0jaWYgVVNFKEZSRUVUWVBFKQotICAgIGlmICghcHJpbWFy
eUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkubV9wYXR0ZXJuKSB7Ci0gICAgICAgIGRyYXdTaW1wbGVU
ZXh0KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSNlbmRpZgotCi0gICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+Y3IoKTsKLSAgICBQYW5nb0xheW91dCogbGF5b3V0ID0gcGFuZ29fY2Fpcm9fY3JlYXRlX2xh
eW91dChjcik7Ci0gICAgc2V0UGFuZ29BdHRyaWJ1dGVzKHRoaXMsIHJ1biwgbGF5b3V0KTsKLQot
ICAgIGdjaGFyKiB1dGY4ID0gY29udmVydFVuaUNoYXJUb1VURjgocnVuLmNoYXJhY3RlcnMxNigp
LCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7Ci0gICAgcGFuZ29fbGF5b3V0X3NldF90
ZXh0KGxheW91dCwgdXRmOCwgLTEpOwotCi0gICAgLy8gT3VyIGxheW91dHMgYXJlIHNpbmdsZSBs
aW5lCi0gICAgUGFuZ29MYXlvdXRMaW5lKiBsYXlvdXRMaW5lID0gcGFuZ29fbGF5b3V0X2dldF9s
aW5lX3JlYWRvbmx5KGxheW91dCwgMCk7Ci0KLSAgICAvLyBHZXQgdGhlIHJlZ2lvbiB3aGVyZSB0
aGlzIHRleHQgd2lsbCBiZSBsYWlkIG91dC4gV2Ugd2lsbCB1c2UgaXQgdG8gY2xpcAotICAgIC8v
IHRoZSBDYWlybyBjb250ZXh0LCBmb3Igd2hlbiB3ZSBhcmUgb25seSBwYWludGluZyBwYXJ0IG9m
IHRoZSB0ZXh0IHJ1biBhbmQKLSAgICAvLyB0byBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIHNo
YWRvdyBidWZmZXIuCi0gICAgUGFuZ29SZWdpb25UeXBlIHBhcnRpYWxSZWdpb24gPSAwOwotICAg
IGNoYXIqIHN0YXJ0ID0gZ191dGY4X29mZnNldF90b19wb2ludGVyKHV0ZjgsIGZyb20pOwotICAg
IGNoYXIqIGVuZCA9IGdfdXRmOF9vZmZzZXRfdG9fcG9pbnRlcihzdGFydCwgdG8gLSBmcm9tKTsK
LSAgICBpbnQgcmFuZ2VzW10gPSB7c3RhcnQgLSB1dGY4LCBlbmQgLSB1dGY4fTsKLSNpZiBQTEFU
Rk9STShHVEspCi0gICAgcGFydGlhbFJlZ2lvbiA9IGdka19wYW5nb19sYXlvdXRfbGluZV9nZXRf
Y2xpcF9yZWdpb24obGF5b3V0TGluZSwgMCwgMCwgcmFuZ2VzLCAxKTsKLSNlbHNlCi0gICAgcGFy
dGlhbFJlZ2lvbiA9IGdldENsaXBSZWdpb25Gcm9tUGFuZ29MYXlvdXRMaW5lKGxheW91dExpbmUs
IHJhbmdlcyk7Ci0jZW5kaWYKLQotICAgIGRyYXdHbHlwaHNTaGFkb3coY29udGV4dCwgcG9pbnQs
IGxheW91dExpbmUsIHBhcnRpYWxSZWdpb24pOwotCi0gICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAg
Y2Fpcm9fdHJhbnNsYXRlKGNyLCBwb2ludC54KCksIHBvaW50LnkoKSk7Ci0KLSAgICBmbG9hdCBy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKLSAgICBjb250ZXh0LT5maWxsQ29sb3IoKS5nZXRSR0JB
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3Is
IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSNpZiBQTEFURk9STShHVEspCi0gICAgICAgIGdk
a19jYWlyb19yZWdpb24oY3IsIHBhcnRpYWxSZWdpb24pOwotI2Vsc2UKLSAgICAgICAgYXBwZW5k
UmVnaW9uVG9DYWlyb0NvbnRleHQoY3IsIHBhcnRpYWxSZWdpb24pOwotI2VuZGlmCi0gICAgY2Fp
cm9fY2xpcChjcik7Ci0KLSAgICBwYW5nb19jYWlyb19zaG93X2xheW91dF9saW5lKGNyLCBsYXlv
dXRMaW5lKTsKLQotICAgIGlmIChjb250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2Rl
U3Ryb2tlKSB7Ci0gICAgICAgIENvbG9yIHN0cm9rZUNvbG9yID0gY29udGV4dC0+c3Ryb2tlQ29s
b3IoKTsKLSAgICAgICAgc3Ryb2tlQ29sb3IuZ2V0UkdCQShyZWQsIGdyZWVuLCBibHVlLCBhbHBo
YSk7Ci0gICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGEpOwotICAgICAgICBwYW5nb19jYWlyb19sYXlvdXRfbGluZV9wYXRoKGNyLCBsYXlvdXRM
aW5lKTsKLSAgICAgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY3IsIGNvbnRleHQtPnN0cm9rZVRo
aWNrbmVzcygpKTsKLSAgICAgICAgY2Fpcm9fc3Ryb2tlKGNyKTsKLSAgICB9Ci0KLSAgICAvLyBQ
YW5nbyBzb21ldGltZXMgbGVhdmVzIGJlaGluZCBwYXRocyB3ZSBkb24ndCB3YW50Ci0gICAgY2Fp
cm9fbmV3X3BhdGgoY3IpOwotCi0gICAgZGVzdHJveVBhbmdvUmVnaW9uKHBhcnRpYWxSZWdpb24p
OwotICAgIGdfZnJlZSh1dGY4KTsKLSAgICBnX29iamVjdF91bnJlZihsYXlvdXQpOwotCi0gICAg
Y2Fpcm9fcmVzdG9yZShjcik7Ci19Ci0KLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4m
IC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBv
aW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0vLyBXZSBzaG91bGQgY3JlYXRlIHRoZSBsYXlv
dXQgd2l0aCBvdXIgYWN0dWFsIGNvbnRleHQgYnV0IHdlIGNhbid0IGFjY2VzcyBpdCBmcm9tIGhl
cmUuCi1zdGF0aWMgUGFuZ29MYXlvdXQqIGdldERlZmF1bHRQYW5nb0xheW91dChjb25zdCBUZXh0
UnVuJiBydW4pCi17Ci0gICAgc3RhdGljIFBhbmdvRm9udE1hcCogbWFwID0gcGFuZ29fY2Fpcm9f
Zm9udF9tYXBfZ2V0X2RlZmF1bHQoKTsKLSNpZiBQQU5HT19WRVJTSU9OX0NIRUNLKDEsIDIxLCA1
KQotICAgIHN0YXRpYyBQYW5nb0NvbnRleHQqIHBhbmdvQ29udGV4dCA9IHBhbmdvX2ZvbnRfbWFw
X2NyZWF0ZV9jb250ZXh0KG1hcCk7Ci0jZWxzZQotICAgIC8vIERlcHJlY2F0ZWQgaW4gUGFuZ28g
MS4yMS4KLSAgICBzdGF0aWMgUGFuZ29Db250ZXh0KiBwYW5nb0NvbnRleHQgPSBwYW5nb19jYWly
b19mb250X21hcF9jcmVhdGVfY29udGV4dChQQU5HT19DQUlST19GT05UX01BUChtYXApKTsKLSNl
bmRpZgotICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBwYW5nb19sYXlvdXRfbmV3KHBhbmdvQ29u
dGV4dCk7Ci0KLSAgICByZXR1cm4gbGF5b3V0OwotfQotCi1mbG9hdCBGb250OjpmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIG92ZXJmbG93KSBjb25zdAot
ewotI2lmIFVTRShGUkVFVFlQRSkKLSAgICBpZiAoIXByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0
YSgpLm1fcGF0dGVybikKLSAgICAgICAgcmV0dXJuIGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KHJ1
biwgZmFsbGJhY2tGb250cywgb3ZlcmZsb3cpOwotI2VuZGlmCi0KLSAgICBpZiAoIXJ1bi5sZW5n
dGgoKSkKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0KLSAgICBQYW5nb0xheW91dCogbGF5b3V0ID0g
Z2V0RGVmYXVsdFBhbmdvTGF5b3V0KHJ1bik7Ci0gICAgc2V0UGFuZ29BdHRyaWJ1dGVzKHRoaXMs
IHJ1biwgbGF5b3V0KTsKLQotICAgIGdjaGFyKiB1dGY4ID0gY29udmVydFVuaUNoYXJUb1VURjgo
cnVuLmNoYXJhY3RlcnMxNigpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7Ci0gICAg
cGFuZ29fbGF5b3V0X3NldF90ZXh0KGxheW91dCwgdXRmOCwgLTEpOwotCi0gICAgaW50IHdpZHRo
OwotICAgIHBhbmdvX2xheW91dF9nZXRfcGl4ZWxfc2l6ZShsYXlvdXQsICZ3aWR0aCwgMCk7Ci0K
LSAgICBnX2ZyZWUodXRmOCk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGF5b3V0KTsKLQotICAgIHJl
dHVybiB3aWR0aDsKLX0KLQotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4RmxvYXQsIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0Ci17Ci0jaWYgVVNFKEZSRUVUWVBFKQotICAgIGlmICghcHJpbWFyeUZvbnQo
KS0+cGxhdGZvcm1EYXRhKCkubV9wYXR0ZXJuKQotICAgICAgICByZXR1cm4gb2Zmc2V0Rm9yUG9z
aXRpb25Gb3JTaW1wbGVUZXh0KHJ1biwgeEZsb2F0LCBpbmNsdWRlUGFydGlhbEdseXBocyk7Ci0j
ZW5kaWYKLSAgICAvLyBGSVhNRTogVGhpcyB0cnVuY2F0aW9uIGlzIG5vdCBhIHByb2JsZW0gZm9y
IEhUTUwsIGJ1dCBvbmx5IGFmZmVjdHMgU1ZHLCB3aGljaCBwYXNzZXMgZmxvYXRpbmctcG9pbnQg
bnVtYmVycwotICAgIC8vIHRvIEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKCkuIEJ1ZyBodHRwOi8v
d2Via2l0Lm9yZy9iLzQwNjczIHRyYWNrcyBmaXhpbmcgdGhpcyBwcm9ibGVtLgotICAgIGludCB4
ID0gc3RhdGljX2Nhc3Q8aW50Pih4RmxvYXQpOwotCi0gICAgUGFuZ29MYXlvdXQqIGxheW91dCA9
IGdldERlZmF1bHRQYW5nb0xheW91dChydW4pOwotICAgIHNldFBhbmdvQXR0cmlidXRlcyh0aGlz
LCBydW4sIGxheW91dCk7Ci0KLSAgICBnY2hhciogdXRmOCA9IGNvbnZlcnRVbmlDaGFyVG9VVEY4
KHJ1bi5jaGFyYWN0ZXJzMTYoKSwgcnVuLmxlbmd0aCgpLCAwLCBydW4ubGVuZ3RoKCkpOwotICAg
IHBhbmdvX2xheW91dF9zZXRfdGV4dChsYXlvdXQsIHV0ZjgsIC0xKTsKLQotICAgIGludCBpbmRl
eCwgdHJhaWxpbmc7Ci0gICAgcGFuZ29fbGF5b3V0X3h5X3RvX2luZGV4KGxheW91dCwgeCAqIFBB
TkdPX1NDQUxFLCAxLCAmaW5kZXgsICZ0cmFpbGluZyk7Ci0gICAgZ2xvbmcgb2Zmc2V0ID0gZ191
dGY4X3BvaW50ZXJfdG9fb2Zmc2V0KHV0ZjgsIHV0ZjggKyBpbmRleCk7Ci0gICAgaWYgKGluY2x1
ZGVQYXJ0aWFsR2x5cGhzKQotICAgICAgICBvZmZzZXQgKz0gdHJhaWxpbmc7Ci0KLSAgICBnX2Zy
ZWUodXRmOCk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGF5b3V0KTsKLQotICAgIHJldHVybiBvZmZz
ZXQ7Ci19Ci0KLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGgsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0Ci17Ci0jaWYgVVNFKEZSRUVUWVBFKQotICAgIGlmICghcHJpbWFyeUZv
bnQoKS0+cGxhdGZvcm1EYXRhKCkubV9wYXR0ZXJuKQotICAgICAgICByZXR1cm4gc2VsZWN0aW9u
UmVjdEZvclNpbXBsZVRleHQocnVuLCBwb2ludCwgaCwgZnJvbSwgdG8pOwotI2VuZGlmCi0KLSAg
ICBQYW5nb0xheW91dCogbGF5b3V0ID0gZ2V0RGVmYXVsdFBhbmdvTGF5b3V0KHJ1bik7Ci0gICAg
c2V0UGFuZ29BdHRyaWJ1dGVzKHRoaXMsIHJ1biwgbGF5b3V0KTsKLQotICAgIGdjaGFyKiB1dGY4
ID0gY29udmVydFVuaUNoYXJUb1VURjgocnVuLmNoYXJhY3RlcnMxNigpLCBydW4ubGVuZ3RoKCks
IDAsIHJ1bi5sZW5ndGgoKSk7Ci0gICAgcGFuZ29fbGF5b3V0X3NldF90ZXh0KGxheW91dCwgdXRm
OCwgLTEpOwotCi0gICAgY2hhciogc3RhcnQgPSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIodXRm
OCwgZnJvbSk7Ci0gICAgY2hhciogZW5kID0gZ191dGY4X29mZnNldF90b19wb2ludGVyKHN0YXJ0
LCB0byAtIGZyb20pOwotCi0gICAgaWYgKHJ1bi5sdHIoKSkgewotICAgICAgICBmcm9tID0gc3Rh
cnQgLSB1dGY4OwotICAgICAgICB0byA9IGVuZCAtIHV0Zjg7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgZnJvbSA9IGVuZCAtIHV0Zjg7Ci0gICAgICAgIHRvID0gc3RhcnQgLSB1dGY4OwotICAgIH0K
LQotICAgIFBhbmdvTGF5b3V0TGluZSogbGF5b3V0TGluZSA9IHBhbmdvX2xheW91dF9nZXRfbGlu
ZV9yZWFkb25seShsYXlvdXQsIDApOwotICAgIGludCB4UG9zOwotCi0gICAgeFBvcyA9IDA7Ci0g
ICAgaWYgKGZyb20gPCBsYXlvdXRMaW5lLT5sZW5ndGgpCi0gICAgICAgIHBhbmdvX2xheW91dF9s
aW5lX2luZGV4X3RvX3gobGF5b3V0TGluZSwgZnJvbSwgRkFMU0UsICZ4UG9zKTsKLSAgICBmbG9h
dCBiZWZvcmVXaWR0aCA9IFBBTkdPX1BJWEVMU19GTE9PUih4UG9zKTsKLQotICAgIHhQb3MgPSAw
OwotICAgIGlmIChydW4ubHRyKCkgfHwgdG8gPCBsYXlvdXRMaW5lLT5sZW5ndGgpCi0gICAgICAg
IHBhbmdvX2xheW91dF9saW5lX2luZGV4X3RvX3gobGF5b3V0TGluZSwgdG8sIEZBTFNFLCAmeFBv
cyk7Ci0gICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IFBBTkdPX1BJWEVMUyh4UG9zKTsKLQotICAgIGdf
ZnJlZSh1dGY4KTsKLSAgICBnX29iamVjdF91bnJlZihsYXlvdXQpOwotCi0gICAgcmV0dXJuIEZs
b2F0UmVjdChwb2ludC54KCkgKyBiZWZvcmVXaWR0aCwgcG9pbnQueSgpLCBhZnRlcldpZHRoIC0g
YmVmb3JlV2lkdGgsIGgpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGxhdGZvcm1EYXRhLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGJkOTI1MWI3MzJlMzE3OWY2NjY0YzlkYTBhZTRlMzNjMGU2NDkzNGYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBsYXRmb3JtRGF0YS5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20KLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVy
IFVTQSwgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgRm9udFBsYXRm
b3JtRGF0YVBhbmdvX2gKLSNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YVBhbmdvX2gKLQotI2luY2x1
ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkZvbnRPcmllbnRhdGlvbi5oIgotI2lu
Y2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDxwYW5n
by9wYW5nb2NhaXJvLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBGb250UGxhdGZvcm1EYXRhIHsKLXB1YmxpYzoKLSAgICBGb250UGxh
dGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICAgICAgOiBtX2Nv
bnRleHQoMCkKLSAgICAgICAgLCBtX2ZvbnQoaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpKQot
ICAgICAgICAsIG1fc2l6ZSgwKQotICAgICAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKLSAg
ICAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2UpCi0gICAgICAgICwgbV9zY2FsZWRGb250
KDApCi0gICAgICAgIHsgfQotCi0gICAgRm9udFBsYXRmb3JtRGF0YSgpCi0gICAgICAgIDogbV9j
b250ZXh0KDApCi0gICAgICAgICwgbV9mb250KDApCi0gICAgICAgICwgbV9zaXplKDApCi0gICAg
ICAgICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQotICAgICAgICAsIG1fc3ludGhldGljT2JsaXF1
ZShmYWxzZSkKLSAgICAgICAgLCBtX3NjYWxlZEZvbnQoMCkKLSAgICAgICAgeyB9Ci0KLSAgICBG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5KTsKLSAgICBGb250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250
RmFjZSwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7Ci0gICAgRm9udFBsYXRm
b3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKTsKLSAgICBGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLSAgICB+Rm9udFBsYXRmb3JtRGF0
YSgpOwotCi0gICAgc3RhdGljIGJvb2wgaW5pdCgpOwotICAgIGJvb2wgaXNGaXhlZFBpdGNoKCk7
Ci0gICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIHZvaWQgc2V0
U2l6ZShmbG9hdCBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KLSAgICBib29sIHN5bnRoZXRpY0Jv
bGQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY0JvbGQ7IH0KLSAgICBib29sIHN5bnRoZXRp
Y09ibGlxdWUoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY09ibGlxdWU7IH0KLQotICAgIEZv
bnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIEhvcml6b250YWw7IH0g
Ly8gRklYTUU6IEltcGxlbWVudC4KLSAgICB2b2lkIHNldE9yaWVudGF0aW9uKEZvbnRPcmllbnRh
dGlvbikgeyB9IC8vIEZJWE1FOiBJbXBsZW1lbnQuCi0KLSAgICBjYWlyb19zY2FsZWRfZm9udF90
KiBzY2FsZWRGb250KCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZWRGb250OyB9Ci0KLSAgICB1bnNp
Z25lZCBoYXNoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNbMV0g
PSB7IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3NjYWxlZEZvbnQpIH07Ci0gICAgICAg
IHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hD
b2Rlcyk7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmKSBjb25zdDsKLSAgICBGb250UGxhdGZvcm1EYXRhJiBvcGVyYXRvcj0oY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYpOwotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZm9udCA9PSBoYXNoVGFibGVEZWxldGVkRm9udFZhbHVl
KCk7Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNv
bnN0OwotI2VuZGlmCi0KLSAgICBzdGF0aWMgUGFuZ29Gb250TWFwKiBtX2ZvbnRNYXA7Ci0gICAg
c3RhdGljIEdIYXNoVGFibGUqIG1faGFzaFRhYmxlOwotICAgIFBhbmdvQ29udGV4dCogbV9jb250
ZXh0OwotICAgIFBhbmdvRm9udCogbV9mb250OwotICAgIGZsb2F0IG1fc2l6ZTsKLSAgICBib29s
IG1fc3ludGhldGljQm9sZDsKLSAgICBib29sIG1fc3ludGhldGljT2JsaXF1ZTsKLSAgICBjYWly
b19zY2FsZWRfZm9udF90KiBtX3NjYWxlZEZvbnQ7Ci1wcml2YXRlOgotICAgIHN0YXRpYyBQYW5n
b0ZvbnQgKmhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9j
YXN0PFBhbmdvRm9udCo+KC0xKTsgfQotfTsKLQotfQotCi0jZW5kaWYgLy8gRm9udFBsYXRmb3Jt
RGF0YVBhbmdvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3BhbmdvL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9wYW5nby9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2MWNkMDQyZmY5OTI1MzQ2NWQ0OThiODUwZjQ2ODQ3MzBlMjA1YTgy
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwyNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1t
ZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBbHAg
VG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5z
IFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBD
ZW50ZXIgVVNBLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4KLSAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udFBsYXRm
b3JtRGF0YS5oIgotCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSA8YXNz
ZXJ0Lmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxwYW5nby9wYW5n
by5oPgotI2luY2x1ZGUgPHBhbmdvL3BhbmdvY2Fpcm8uaD4KLQotLy8gVXNlIGNhaXJvLWZ0IGkg
YSByZWNlbnQgZW5vdWdoIFBhbmdvIHZlcnNpb24gaXNuJ3QgYXZhaWxhYmxlCi0jaWYgIVBBTkdP
X1ZFUlNJT05fQ0hFQ0soMSwxOCwwKQotI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+Ci0jaW5jbHVkZSA8
cGFuZ28vcGFuZ29mYy1mb250bWFwLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1QYW5nb0ZvbnRNYXAqIEZvbnRQbGF0Zm9ybURhdGE6Om1fZm9udE1hcCA9IDA7Ci1HSGFzaFRh
YmxlKiBGb250UGxhdGZvcm1EYXRhOjptX2hhc2hUYWJsZSA9IDA7Ci0KLUZvbnRQbGF0Zm9ybURh
dGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKLSAgICA6IG1fY29udGV4dCgwKQot
ICAgICwgbV9mb250KDApCi0gICAgLCBtX3NpemUoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6
ZSgpKQotICAgICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQotICAgICwgbV9zeW50aGV0aWNPYmxp
cXVlKGZhbHNlKQotICAgICwgbV9zY2FsZWRGb250KDApCi17Ci0gICAgRm9udFBsYXRmb3JtRGF0
YTo6aW5pdCgpOwotCi0gICAgQ1N0cmluZyBzdG9yZWRfZmFtaWx5ID0gZmFtaWx5TmFtZS5zdHJp
bmcoKS51dGY4KCk7Ci0gICAgY2hhciBjb25zdCogZmFtaWxpZXNbXSA9IHsKLSAgICAgIHN0b3Jl
ZF9mYW1pbHkuZGF0YSgpLAotICAgICAgTlVMTAotICAgIH07Ci0KLSAgICBzd2l0Y2ggKGZvbnRE
ZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkpIHsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6
U2VyaWZGYW1pbHk6Ci0gICAgICAgIGZhbWlsaWVzWzFdID0gInNlcmlmIjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseToKLSAgICAgICAg
ZmFtaWxpZXNbMV0gPSAic2FucyI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udERlc2Ny
aXB0aW9uOjpNb25vc3BhY2VGYW1pbHk6Ci0gICAgICAgIGZhbWlsaWVzWzFdID0gIm1vbm9zcGFj
ZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseToK
LSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHk6Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgZmFtaWxpZXNbMV0gPSAic2FucyI7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiBkZXNjcmlwdGlvbiA9IHBhbmdvX2ZvbnRfZGVzY3Jp
cHRpb25fbmV3KCk7Ci0gICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfYWJzb2x1dGVfc2l6
ZShkZXNjcmlwdGlvbiwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpICogUEFOR09fU0NB
TEUpOwotCi0gICAgLy8gRklYTUU6IE1hcCBhbGwgRm9udFdlaWdodCB2YWx1ZXMgdG8gUGFuZ28g
Zm9udCB3ZWlnaHRzLgotICAgIGlmIChmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkgPj0gRm9udFdl
aWdodDYwMCkKLSAgICAgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfd2VpZ2h0KGRlc2Ny
aXB0aW9uLCBQQU5HT19XRUlHSFRfQk9MRCk7Ci0gICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pdGFs
aWMoKSkKLSAgICAgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfc3R5bGUoZGVzY3JpcHRp
b24sIFBBTkdPX1NUWUxFX0lUQUxJQyk7Ci0KLSNpZiBQQU5HT19WRVJTSU9OX0NIRUNLKDEsMjEs
NSkgICAvLyBkZXByZWNhdGVkIGluIDEuMjEKLSAgICBtX2NvbnRleHQgPSBwYW5nb19mb250X21h
cF9jcmVhdGVfY29udGV4dChtX2ZvbnRNYXApOwotI2Vsc2UKLSAgICBtX2NvbnRleHQgPSBwYW5n
b19jYWlyb19mb250X21hcF9jcmVhdGVfY29udGV4dChQQU5HT19DQUlST19GT05UX01BUChtX2Zv
bnRNYXApKTsKLSNlbmRpZgotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyAhbV9mb250ICYm
IGkgPCBHX05fRUxFTUVOVFMoZmFtaWxpZXMpOyBpKyspIHsKLSAgICAgICAgcGFuZ29fZm9udF9k
ZXNjcmlwdGlvbl9zZXRfZmFtaWx5KGRlc2NyaXB0aW9uLCBmYW1pbGllc1tpXSk7Ci0gICAgICAg
IHBhbmdvX2NvbnRleHRfc2V0X2ZvbnRfZGVzY3JpcHRpb24obV9jb250ZXh0LCBkZXNjcmlwdGlv
bik7Ci0gICAgICAgIG1fZm9udCA9IHBhbmdvX2ZvbnRfbWFwX2xvYWRfZm9udChtX2ZvbnRNYXAs
IG1fY29udGV4dCwgZGVzY3JpcHRpb24pOwotICAgIH0KLQotI2lmIFBBTkdPX1ZFUlNJT05fQ0hF
Q0soMSwxOCwwKQotICAgIGlmIChtX2ZvbnQpCi0gICAgICAgIG1fc2NhbGVkRm9udCA9IGNhaXJv
X3NjYWxlZF9mb250X3JlZmVyZW5jZShwYW5nb19jYWlyb19mb250X2dldF9zY2FsZWRfZm9udChQ
QU5HT19DQUlST19GT05UKG1fZm9udCkpKTsKLSNlbHNlCi0gICAgLy8gVGhpcyBjb21wYXRpYmls
aXR5IGNvZGUgZm9yIG9sZGVyIHZlcnNpb25zIG9mIFBhbmdvIGlzIG5vdCB3ZWxsLXRlc3RlZC4K
LSAgICBpZiAobV9mb250KSB7Ci0gICAgICAgIFBhbmdvRmNGb250KiBmY2ZvbnQgPSBQQU5HT19G
Q19GT05UKG1fZm9udCk7Ci0gICAgICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmYWNlID0gY2Fpcm9f
ZnRfZm9udF9mYWNlX2NyZWF0ZV9mb3JfcGF0dGVybihmY2ZvbnQtPmZvbnRfcGF0dGVybik7Ci0g
ICAgICAgIGRvdWJsZSBzaXplOwotICAgICAgICBpZiAoRmNQYXR0ZXJuR2V0RG91YmxlKGZjZm9u
dC0+Zm9udF9wYXR0ZXJuLCBGQ19QSVhFTF9TSVpFLCAwLCAmc2l6ZSkgIT0gRmNSZXN1bHRNYXRj
aCkKLSAgICAgICAgICAgIHNpemUgPSAxMi4wOwotICAgICAgICBjYWlyb19tYXRyaXhfdCBmb250
TWF0cml4OwotICAgICAgICBjYWlyb19tYXRyaXhfaW5pdF9zY2FsZSgmZm9udE1hdHJpeCwgc2l6
ZSwgc2l6ZSk7Ci0gICAgICAgIGNhaXJvX2ZvbnRfb3B0aW9uc190KiBmb250T3B0aW9uczsKLSAg
ICAgICAgaWYgKHBhbmdvX2NhaXJvX2NvbnRleHRfZ2V0X2ZvbnRfb3B0aW9ucyhtX2NvbnRleHQp
KQotICAgICAgICAgICAgZm9udE9wdGlvbnMgPSBjYWlyb19mb250X29wdGlvbnNfY29weShwYW5n
b19jYWlyb19jb250ZXh0X2dldF9mb250X29wdGlvbnMobV9jb250ZXh0KSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGZvbnRPcHRpb25zID0gY2Fpcm9fZm9udF9vcHRpb25zX2NyZWF0ZSgp
OwotICAgICAgICBjYWlyb19tYXRyaXhfdCBjdG07Ci0gICAgICAgIGNhaXJvX21hdHJpeF9pbml0
X2lkZW50aXR5KCZjdG0pOwotICAgICAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9u
dF9jcmVhdGUoZmFjZSwgJmZvbnRNYXRyaXgsICZjdG0sIGZvbnRPcHRpb25zKTsKLSAgICAgICAg
Y2Fpcm9fZm9udF9vcHRpb25zX2Rlc3Ryb3koZm9udE9wdGlvbnMpOwotICAgICAgICBjYWlyb19m
b250X2ZhY2VfZGVzdHJveShmYWNlKTsKLSAgICB9Ci0jZW5kaWYKLSAgICBwYW5nb19mb250X2Rl
c2NyaXB0aW9uX2ZyZWUoZGVzY3JpcHRpb24pOwotfQotCi1Gb250UGxhdGZvcm1EYXRhOjpGb250
UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCi0gICAgOiBt
X2NvbnRleHQoMCkKLSAgICAsIG1fZm9udCgwKQotICAgICwgbV9zaXplKHNpemUpCi0gICAgLCBt
X3N5bnRoZXRpY0JvbGQoYm9sZCkKLSAgICAsIG1fc3ludGhldGljT2JsaXF1ZShpdGFsaWMpCi0g
ICAgLCBtX3NjYWxlZEZvbnQoMCkKLXsKLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRm
b3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UsIGZsb2F0IHNpemUsIGJvb2wgYm9s
ZCwgYm9vbCBpdGFsaWMpCi0gICAgOiBtX2NvbnRleHQoMCkKLSAgICAsIG1fZm9udCgwKQotICAg
ICwgbV9zaXplKHNpemUpCi0gICAgLCBtX3N5bnRoZXRpY0JvbGQoYm9sZCkKLSAgICAsIG1fc3lu
dGhldGljT2JsaXF1ZShpdGFsaWMpCi0gICAgLCBtX3NjYWxlZEZvbnQoMCkKLXsKLSAgICBjYWly
b19tYXRyaXhfdCBmb250TWF0cml4OwotICAgIGNhaXJvX21hdHJpeF9pbml0X3NjYWxlKCZmb250
TWF0cml4LCBzaXplLCBzaXplKTsKLSAgICBjYWlyb19tYXRyaXhfdCBjdG07Ci0gICAgY2Fpcm9f
bWF0cml4X2luaXRfaWRlbnRpdHkoJmN0bSk7Ci0gICAgY2Fpcm9fZm9udF9vcHRpb25zX3QqIG9w
dGlvbnMgPSBjYWlyb19mb250X29wdGlvbnNfY3JlYXRlKCk7Ci0KLSAgICAvLyBXZSBmb3JjZSBh
bnRpYWxpYXNpbmcgYW5kIGRpc2FibGUgaGludGluZyB0byBwcm92aWRlIGNvbnNpc3RlbnQKLSAg
ICAvLyB0eXBvZ3JhcGhpYyBxdWFsaXRpZXMgZm9yIGN1c3RvbSBmb250cyBvbiBhbGwgcGxhdGZv
cm1zLgotICAgIGNhaXJvX2ZvbnRfb3B0aW9uc19zZXRfaGludF9zdHlsZShvcHRpb25zLCBDQUlS
T19ISU5UX1NUWUxFX05PTkUpOwotICAgIGNhaXJvX2ZvbnRfb3B0aW9uc19zZXRfYW50aWFsaWFz
KG9wdGlvbnMsIENBSVJPX0FOVElBTElBU19HUkFZKTsKLQotICAgIG1fc2NhbGVkRm9udCA9IGNh
aXJvX3NjYWxlZF9mb250X2NyZWF0ZShmb250RmFjZSwgJmZvbnRNYXRyaXgsICZjdG0sIG9wdGlv
bnMpOwotICAgIGNhaXJvX2ZvbnRfb3B0aW9uc19kZXN0cm95KG9wdGlvbnMpOwotfQotCi1ib29s
IEZvbnRQbGF0Zm9ybURhdGE6OmluaXQoKQotewotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVk
ID0gZmFsc2U7Ci0gICAgaWYgKGluaXRpYWxpemVkKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBpbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICBpZiAoIW1fZm9udE1hcCkKLSAgICAgICAgbV9m
b250TWFwID0gcGFuZ29fY2Fpcm9fZm9udF9tYXBfZ2V0X2RlZmF1bHQoKTsKLSAgICBpZiAoIW1f
aGFzaFRhYmxlKSB7Ci0gICAgICAgIFBhbmdvRm9udEZhbWlseSoqIGZhbWlsaWVzID0gMDsKLSAg
ICAgICAgaW50IG5fZmFtaWxpZXMgPSAwOwotCi0gICAgICAgIG1faGFzaFRhYmxlID0gZ19oYXNo
X3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLCBnX2ZyZWUsIGdfb2JqZWN0
X3VucmVmKTsKLQotICAgICAgICBwYW5nb19mb250X21hcF9saXN0X2ZhbWlsaWVzKG1fZm9udE1h
cCwgJmZhbWlsaWVzLCAmbl9mYW1pbGllcyk7Ci0KLSAgICAgICAgZm9yIChpbnQgZmFtaWx5ID0g
MDsgZmFtaWx5IDwgbl9mYW1pbGllczsgZmFtaWx5KyspCi0gICAgICAgICAgICAgICAgZ19oYXNo
X3RhYmxlX2luc2VydChtX2hhc2hUYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdfc3RyZHVwKHBhbmdvX2ZvbnRfZmFtaWx5X2dldF9uYW1lKGZhbWlsaWVzW2ZhbWls
eV0pKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfb2JqZWN0X3JlZihm
YW1pbGllc1tmYW1pbHldKSk7Ci0KLSAgICAgICAgZ19mcmVlKGZhbWlsaWVzKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURh
dGEoKQotewotICAgIGlmIChtX2ZvbnQgJiYgbV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8UGFu
Z29Gb250Kj4oLTEpKSB7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKG1fZm9udCk7Ci0gICAgICAg
IG1fZm9udCA9IDA7Ci0gICAgfQotCi0gICAgaWYgKG1fY29udGV4dCkgewotICAgICAgICBnX29i
amVjdF91bnJlZihtX2NvbnRleHQpOwotICAgICAgICBtX2NvbnRleHQgPSAwOwotICAgIH0KLQot
ICAgIGlmIChtX3NjYWxlZEZvbnQpIHsKLSAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJv
eShtX3NjYWxlZEZvbnQpOwotICAgICAgICBtX3NjYWxlZEZvbnQgPSAwOwotICAgIH0KLX0KLQot
Ym9vbCBGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKQotewotICAgIFBhbmdvRm9udERl
c2NyaXB0aW9uKiBkZXNjcmlwdGlvbiA9IHBhbmdvX2ZvbnRfZGVzY3JpYmVfd2l0aF9hYnNvbHV0
ZV9zaXplKG1fZm9udCk7Ci0gICAgUGFuZ29Gb250RmFtaWx5KiBmYW1pbHkgPSByZWludGVycHJl
dF9jYXN0PFBhbmdvRm9udEZhbWlseSo+KGdfaGFzaF90YWJsZV9sb29rdXAobV9oYXNoVGFibGUs
IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZ2V0X2ZhbWlseShkZXNjcmlwdGlvbikpKTsKLSAgICBw
YW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUoZGVzY3JpcHRpb24pOwotICAgIHJldHVybiBwYW5n
b19mb250X2ZhbWlseV9pc19tb25vc3BhY2UoZmFtaWx5KTsKLX0KLQotRm9udFBsYXRmb3JtRGF0
YSYgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90
aGVyKQotewotICAgIC8vIENoZWNrIGZvciBzZWxmLWFzc2lnbm1lbnQuCi0gICAgaWYgKHRoaXMg
PT0gJm90aGVyKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICBtX3NpemUgPSBvdGhlci5t
X3NpemU7Ci0gICAgbV9zeW50aGV0aWNCb2xkID0gb3RoZXIubV9zeW50aGV0aWNCb2xkOwotICAg
IG1fc3ludGhldGljT2JsaXF1ZSA9IG90aGVyLm1fc3ludGhldGljT2JsaXF1ZTsKLQotICAgIGlm
IChvdGhlci5tX3NjYWxlZEZvbnQpCi0gICAgICAgIGNhaXJvX3NjYWxlZF9mb250X3JlZmVyZW5j
ZShvdGhlci5tX3NjYWxlZEZvbnQpOwotICAgIGlmIChtX3NjYWxlZEZvbnQpCi0gICAgICAgIGNh
aXJvX3NjYWxlZF9mb250X2Rlc3Ryb3kobV9zY2FsZWRGb250KTsKLSAgICBtX3NjYWxlZEZvbnQg
PSBvdGhlci5tX3NjYWxlZEZvbnQ7Ci0KLSAgICBpZiAob3RoZXIubV9mb250KQotICAgICAgICBn
X29iamVjdF9yZWYob3RoZXIubV9mb250KTsKLSAgICBpZiAobV9mb250KQotICAgICAgICBnX29i
amVjdF91bnJlZihtX2ZvbnQpOwotICAgIG1fZm9udCA9IG90aGVyLm1fZm9udDsKLQotICAgIGlm
IChvdGhlci5tX2NvbnRleHQpCi0gICAgICAgIGdfb2JqZWN0X3JlZihvdGhlci5tX2NvbnRleHQp
OwotICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgIGdfb2JqZWN0X3VucmVmKG1fY29udGV4dCk7
Ci0gICAgbV9jb250ZXh0ID0gb3RoZXIubV9jb250ZXh0OwotCi0gICAgcmV0dXJuICp0aGlzOwot
fQotCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIG90aGVyKQotICAgIDogbV9jb250ZXh0KDApCi0gICAgLCBtX2ZvbnQoMCkKLSAgICAs
IG1fc2NhbGVkRm9udCgwKQotewotICAgICp0aGlzID0gb3RoZXI7Ci19Ci0KLWJvb2wgRm9udFBs
YXRmb3JtRGF0YTo6b3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29u
c3QKLXsKLSAgICBpZiAobV9mb250ID09IG90aGVyLm1fZm9udCkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgaWYgKG1fZm9udCA9PSAwIHx8IG1fZm9udCA9PSByZWludGVycHJldF9jYXN0PFBh
bmdvRm9udCo+KC0xKQotICAgICAgICB8fCBvdGhlci5tX2ZvbnQgPT0gMCB8fCBvdGhlci5tX2Zv
bnQgPT0gcmVpbnRlcnByZXRfY2FzdDxQYW5nb0ZvbnQqPigtMSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiogdGhpc0Rlc2MgPSBwYW5nb19mb250X2Rl
c2NyaWJlKG1fZm9udCk7Ci0gICAgUGFuZ29Gb250RGVzY3JpcHRpb24qIG90aGVyRGVzYyA9IHBh
bmdvX2ZvbnRfZGVzY3JpYmUob3RoZXIubV9mb250KTsKLSAgICBib29sIHJlc3VsdCA9IHBhbmdv
X2ZvbnRfZGVzY3JpcHRpb25fZXF1YWwodGhpc0Rlc2MsIG90aGVyRGVzYyk7Ci0gICAgcGFuZ29f
Zm9udF9kZXNjcmlwdGlvbl9mcmVlKG90aGVyRGVzYyk7Ci0gICAgcGFuZ29fZm9udF9kZXNjcmlw
dGlvbl9mcmVlKHRoaXNEZXNjKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0jaWZuZGVmIE5E
RUJVRwotU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0jZW5kaWYKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vR2x5cGhQYWdlVHJlZU5vZGVQYW5nby5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9HbHlwaFBhZ2VUcmVlTm9k
ZVBhbmdvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQwYmFhNjEzYTJkM2U3
YmFjNGY4ZDgwMDM3MTEzY2FjZmJiNmU3My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9H
bHlwaFBhZ2VUcmVlTm9kZVBhbmdvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBn
bWFpbC5jb20KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xs
YWJvcmEuY28udWs+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50
ZXIgVVNBLCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVO
b2RlLmgiCi0KLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgPHBhbmdvL3Bh
bmdvLWZvbnQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgUGFuZ29HbHlwaCBw
YW5nb19mb250X2dldF9nbHlwaChQYW5nb0ZvbnQqIGZvbnQsIFBhbmdvQ29udGV4dCogY29udGV4
dCwgZ3VuaWNoYXIgd2MpCi17Ci0gICAgUGFuZ29HbHlwaCByZXN1bHQgPSAwOwotICAgIGdjaGFy
IGJ1ZmZlcls3XTsKLQotICAgIGdpbnQgIGxlbmd0aCA9IGdfdW5pY2hhcl90b191dGY4KHdjLCBi
dWZmZXIpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGxlbmd0aCwgMCk7Ci0KLSAgICBHTGlz
dCogaXRlbXMgPSBwYW5nb19pdGVtaXplKGNvbnRleHQsIGJ1ZmZlciwgMCwgbGVuZ3RoLCBOVUxM
LCBOVUxMKTsKLQotICAgIGlmIChnX2xpc3RfbGVuZ3RoKGl0ZW1zKSA9PSAxKSB7Ci0gICAgICAg
IFBhbmdvSXRlbSogaXRlbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29JdGVtKj4oaXRlbXMtPmRh
dGEpOwotICAgICAgICBQYW5nb0ZvbnQqIHRtcEZvbnQgPSBpdGVtLT5hbmFseXNpcy5mb250Owot
ICAgICAgICBpdGVtLT5hbmFseXNpcy5mb250ID0gZm9udDsKLQotICAgICAgICBQYW5nb0dseXBo
U3RyaW5nKiBnbHlwaHMgPSBwYW5nb19nbHlwaF9zdHJpbmdfbmV3KCk7Ci0gICAgICAgIHBhbmdv
X3NoYXBlKGJ1ZmZlciwgbGVuZ3RoLCAmaXRlbS0+YW5hbHlzaXMsIGdseXBocyk7Ci0KLSAgICAg
ICAgaXRlbS0+YW5hbHlzaXMuZm9udCA9IHRtcEZvbnQ7Ci0KLSAgICAgICAgaWYgKGdseXBocy0+
bnVtX2dseXBocyA9PSAxKQotICAgICAgICAgICAgcmVzdWx0ID0gZ2x5cGhzLT5nbHlwaHNbMF0u
Z2x5cGg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdfd2FybmluZygiZGlkbid0IGdldCAx
IGdseXBoIGJ1dCAlZCIsIGdseXBocy0+bnVtX2dseXBocyk7Ci0KLSAgICAgICAgcGFuZ29fZ2x5
cGhfc3RyaW5nX2ZyZWUoZ2x5cGhzKTsKLSAgICB9Ci0KLSAgICBnX2xpc3RfZm9yZWFjaChpdGVt
cywgKEdGdW5jKXBhbmdvX2l0ZW1fZnJlZSwgTlVMTCk7Ci0gICAgZ19saXN0X2ZyZWUoaXRlbXMp
OwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZl
ckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQotewotICAgIC8vIFRoZSBi
dWZmZXJMZW5ndGggd2lsbCBiZSBncmVhdGVyIHRoYW4gdGhlIGdseXBoIHBhZ2Ugc2l6ZSBpZiB0
aGUgYnVmZmVyIGhhcyBVbmljb2RlIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycy4KLSAgICAvLyBX
ZSB3b24ndCBzdXBwb3J0IHRoaXMgZm9yIG5vdy4KLSAgICBpZiAoYnVmZmVyTGVuZ3RoID4gR2x5
cGhQYWdlOjpzaXplKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWZvbnREYXRh
LT5wbGF0Zm9ybURhdGEoKS5tX2ZvbnQgfHwgZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm1fZm9u
dCA9PSByZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+KC0xKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIEdseXBoIGdseXBoID0gcGFuZ29fZm9u
dF9nZXRfZ2x5cGgoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm1fZm9udCwgZm9udERhdGEtPnBs
YXRmb3JtRGF0YSgpLm1fY29udGV4dCwgYnVmZmVyW2ldKTsKLSAgICAgICAgaWYgKCFnbHlwaCkK
LSAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIDAsIDApOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGks
IGdseXBoLCBmb250RGF0YSk7Ci0gICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBoYXZlR2x5cGhzOwotfQotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9QYW5nb1V0aWxpdGllcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9QYW5nb1V0aWxpdGll
cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZGMxMWI0NThkYTU1ZjFlMzkw
NGMwOTg3MTUzZDU2Zjk0Zjk2MmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vUGFuZ29V
dGlsaXRpZXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIFRoaXMg
Y29kZSB3YXMgbW9zdGx5IGNvcGllZCBmcm9tIGdkay1wYW5nby4KLSAqIHNvdXJjZTogaHR0cDov
L2dpdC5nbm9tZS5vcmcvYnJvd3NlL2d0aysvdHJlZS9nZGsvZ2RrcGFuZ28uYwotICoKLSAqIENv
cHlyaWdodCAoQykgMjAwMCBSZWQgSGF0LCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUHJv
RlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQot
ICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0
ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiUGFuZ29VdGlsaXRpZXMuaCIKLQotI2luY2x1ZGUgPGNhaXJv
Lmg+Ci0jaW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1z
dGF0aWMgY2Fpcm9fcmVnaW9uX3QqIGdldExpbmVDbGlwUmVnaW9uRnJvbUxheW91dEl0ZXIoUGFu
Z29MYXlvdXRJdGVyKiBpdGVyLCBjb25zdCBpbnQqIGluZGV4UmFuZ2UpCi17Ci0gICAgUGFuZ29S
ZWN0YW5nbGUgbG9naWNhbFJlY3Q7Ci0gICAgUGFuZ29MYXlvdXRMaW5lKiBsaW5lID0gcGFuZ29f
bGF5b3V0X2l0ZXJfZ2V0X2xpbmVfcmVhZG9ubHkoaXRlcik7Ci0gICAgY2Fpcm9fcmVnaW9uX3Qq
IGNsaXBSZWdpb24gPSBjYWlyb19yZWdpb25fY3JlYXRlKCk7Ci0gICAgcGFuZ29fbGF5b3V0X2l0
ZXJfZ2V0X2xpbmVfZXh0ZW50cyhpdGVyLCAwLCAmbG9naWNhbFJlY3QpOwotICAgIGludCBiYXNl
bGluZSA9IHBhbmdvX2xheW91dF9pdGVyX2dldF9iYXNlbGluZShpdGVyKTsKLQotICAgIGludCog
cGl4ZWxSYW5nZXMgPSAwOwotICAgIGludCBwaXhlbFJhbmdlQ291bnQgPSAwOwotCi0gICAgaWYg
KGluZGV4UmFuZ2VbMV0gPj0gbGluZS0+c3RhcnRfaW5kZXgKLSAgICAgICAgJiYgaW5kZXhSYW5n
ZVswXSA8IGxpbmUtPnN0YXJ0X2luZGV4ICsgbGluZS0+bGVuZ3RoKQotICAgICAgICBwYW5nb19s
YXlvdXRfbGluZV9nZXRfeF9yYW5nZXMobGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4UmFuZ2VbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRleFJhbmdlWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJnBpeGVsUmFuZ2VzLCAmcGl4ZWxSYW5nZUNvdW50KTsKLQotICAgIGZvciAoaW50
IGogPSAwOyBqIDwgcGl4ZWxSYW5nZUNvdW50OyArK2opIHsKLSAgICAgICAgaW50IG9mZnNldFgg
PSBQQU5HT19QSVhFTFMocGl4ZWxSYW5nZXNbMiAqIGpdIC0gbG9naWNhbFJlY3QueCk7Ci0gICAg
ICAgIGludCBvZmZzZXRZID0gUEFOR09fUElYRUxTKGJhc2VsaW5lIC0gbG9naWNhbFJlY3QueSk7
Ci0KLSAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlX2ludF90IHJlY3Q7Ci0gICAgICAgIHJlY3QueCA9
IG9mZnNldFg7Ci0gICAgICAgIHJlY3QueSA9IC1vZmZzZXRZOwotICAgICAgICByZWN0LndpZHRo
ID0gUEFOR09fUElYRUxTKHBpeGVsUmFuZ2VzWzIgKiBqICsgMV0gLSBsb2dpY2FsUmVjdC54KSAt
IG9mZnNldFg7Ci0gICAgICAgIHJlY3QuaGVpZ2h0ID0gUEFOR09fUElYRUxTKGJhc2VsaW5lIC0g
bG9naWNhbFJlY3QueSArIGxvZ2ljYWxSZWN0LmhlaWdodCkgLSBvZmZzZXRZOwotCi0gICAgICAg
IGNhaXJvX3JlZ2lvbl91bmlvbl9yZWN0YW5nbGUoY2xpcFJlZ2lvbiwgJnJlY3QpOwotICAgIH0K
LQotICAgIGZyZWUocGl4ZWxSYW5nZXMpOwotCi0gICAgcmV0dXJuIGNsaXBSZWdpb247Ci19Ci0K
LWNhaXJvX3JlZ2lvbl90KiBnZXRDbGlwUmVnaW9uRnJvbVBhbmdvTGF5b3V0TGluZShQYW5nb0xh
eW91dExpbmUqIGxpbmUsIGNvbnN0IGludCogaW5kZXhSYW5nZSkKLXsKLSAgICBpZiAoIWluZGV4
UmFuZ2UpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUGFuZ29MYXlvdXRJdGVyKiBpdGVyID0g
cGFuZ29fbGF5b3V0X2dldF9pdGVyKGxpbmUtPmxheW91dCk7Ci0gICAgd2hpbGUgKHBhbmdvX2xh
eW91dF9pdGVyX2dldF9saW5lX3JlYWRvbmx5KGl0ZXIpICE9IGxpbmUpCi0gICAgICAgIHBhbmdv
X2xheW91dF9pdGVyX25leHRfbGluZShpdGVyKTsKLQotICAgIGNhaXJvX3JlZ2lvbl90KiBjbGlw
UmVnaW9uID0gZ2V0TGluZUNsaXBSZWdpb25Gcm9tTGF5b3V0SXRlcihpdGVyLCBpbmRleFJhbmdl
KTsKLQotICAgIHBhbmdvX2xheW91dF9pdGVyX2ZyZWUoaXRlcik7Ci0KLSAgICByZXR1cm4gY2xp
cFJlZ2lvbjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vUGFuZ29VdGlsaXRpZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1BhbmdvVXRpbGl0aWVzLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MDA2NzYyOWJhOWRlYTI1N2E1ZjVmMzZkM2FmNjU4
ODNjNzM0Y2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vUGFuZ29VdGlsaXRpZXMuaAor
KysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAg
UmVkIEhhdCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lPTiBlbWJlZGRlZCBz
eXN0ZW1zCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9u
LCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBQYW5nb1V0aWxpdGllc19oCi0j
ZGVmaW5lIFBhbmdvVXRpbGl0aWVzX2gKLQotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLQot
dHlwZWRlZiBzdHJ1Y3QgX1BhbmdvTGF5b3V0TGluZSBQYW5nb0xheW91dExpbmU7Ci10eXBlZGVm
IHN0cnVjdCBfY2Fpcm9fcmVnaW9uIGNhaXJvX3JlZ2lvbl90OwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNhaXJvX3JlZ2lvbl90KiBnZXRDbGlwUmVnaW9uRnJvbVBhbmdvTGF5b3V0TGluZShQ
YW5nb0xheW91dExpbmUqLCBjb25zdCBpbnQqIGluZGV4UmFuZ2UpOwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBQYW5nb1V0aWxpdGllc19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0YVBhbmdvLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1NpbXBsZUZvbnREYXRh
UGFuZ28uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODhjYmJiN2E2NDYzZDZj
NDlmMzQ1OGE1ZDNlZWZiZDc2N2UwMTc0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1Np
bXBsZUZvbnREYXRhUGFuZ28uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVs
QGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFscCBUb2tlciA8YWxwQGF0
b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIElu
Yy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlNpbXBsZUZvbnREYXRhLmgiCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJG
b250LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9u
LmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKLXsKLSAgICBjYWlyb19mb250X2V4dGVudHNfdCBm
b250X2V4dGVudHM7Ci0gICAgY2Fpcm9fdGV4dF9leHRlbnRzX3QgdGV4dF9leHRlbnRzOwotICAg
IGNhaXJvX3NjYWxlZF9mb250X2V4dGVudHMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LCAm
Zm9udF9leHRlbnRzKTsKLQotICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50KGZvbnRfZXh0ZW50
cy5hc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChmb250X2V4dGVudHMuZGVz
Y2VudCk7Ci0KLSAgICAvLyBUaGVyZSBzZWVtcyB0byBiZSBzb21lIHJvdW5kaW5nIGVycm9yIGlu
IGNhaXJvIChvciBpbiBob3cgd2UKLSAgICAvLyB1c2UgY2Fpcm8pIHdpdGggc29tZSBmb250cywg
bGlrZSBEZWphVnUgU2FucyBNb25vLCB3aGljaCBtYWtlcwotICAgIC8vIGNhaXJvIHJlcG9ydCBh
IGhlaWdodCBzbWFsbGVyIHRoYW4gYXNjZW50ICsgZGVzY2VudCwgd2hpY2ggaXMKLSAgICAvLyB3
cm9uZyBhbmQgY29uZnVzZXMgV2ViQ29yZSdzIGxheW91dCBzeXN0ZW0uIFdvcmthcm91bmQgdGhp
cwotICAgIC8vIHdoaWxlIHdlIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uLgotICAgIGZsb2F0
IGxpbmVTcGFjaW5nID0gZm9udF9leHRlbnRzLmhlaWdodDsKLSAgICBpZiAobGluZVNwYWNpbmcg
PCBmb250X2V4dGVudHMuYXNjZW50ICsgZm9udF9leHRlbnRzLmRlc2NlbnQpCi0gICAgICAgIGxp
bmVTcGFjaW5nID0gZm9udF9leHRlbnRzLmFzY2VudCArIGZvbnRfZXh0ZW50cy5kZXNjZW50Owot
ICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcobHJvdW5kZihsaW5lU3BhY2luZykpOwot
ICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChsaW5lU3BhY2luZyAtIGZvbnRfZXh0ZW50cy5h
c2NlbnQgLSBmb250X2V4dGVudHMuZGVzY2VudCk7Ci0KLSAgICBjYWlyb19zY2FsZWRfZm9udF90
ZXh0X2V4dGVudHMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LCAieCIsICZ0ZXh0X2V4dGVu
dHMpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodCh0ZXh0X2V4dGVudHMuaGVpZ2h0KTsK
LQotICAgIGNhaXJvX3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyhtX3BsYXRmb3JtRGF0YS5tX3Nj
YWxlZEZvbnQsICIgIiwgJnRleHRfZXh0ZW50cyk7Ci0gICAgbV9zcGFjZVdpZHRoID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHRleHRfZXh0ZW50cy54X2FkdmFuY2UpOwotICAgIAotICAgIG1fc3ludGhl
dGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAw
LmY7Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCi17
Ci0gICAgbV9hdmdDaGFyV2lkdGggPSAwLmY7Ci0gICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7Ci0g
ICAgaW5pdENoYXJXaWR0aHMoKTsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1E
ZXN0cm95KCkKLXsKLX0KLQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERh
dGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKLXsKLSAgICBGb250RGVzY3JpcHRpb24g
ZGVzYyA9IEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgIGRlc2Muc2V0U3Bl
Y2lmaWVkU2l6ZShzY2FsZUZhY3RvciAqIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSk7
Ci0gICAgRm9udFBsYXRmb3JtRGF0YSBwbGF0Zm9ybURhdGEoZGVzYywgZGVzYy5mYW1pbHkoKS5m
YW1pbHkoKSk7Ci0gICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUocGxhdGZvcm1EYXRh
KTsKLX0KLQotYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAotewotICAgIGJvb2wgcmVzdWx0ID0g
dHJ1ZTsKLQotICAgIFBhbmdvQ292ZXJhZ2UqIGNvdmVyYWdlID0gcGFuZ29fZm9udF9nZXRfY292
ZXJhZ2UobV9wbGF0Zm9ybURhdGEubV9mb250LCBwYW5nb19sYW5ndWFnZV9nZXRfZGVmYXVsdCgp
KTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYg
KFBBTkdPX0NPVkVSQUdFX05PTkUgPT0gcGFuZ29fY292ZXJhZ2VfZ2V0KGNvdmVyYWdlLCBjaGFy
YWN0ZXJzW2ldKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHBhbmdvX2NvdmVyYWdlX3VucmVmKGNvdmVy
YWdlKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OmRl
dGVybWluZVBpdGNoKCkKLXsKLSAgICBpZiAoaXNDdXN0b21Gb250KCkpIHsKLSAgICAgICAgbV90
cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
bV90cmVhdEFzRml4ZWRQaXRjaCA9IG1fcGxhdGZvcm1EYXRhLmlzRml4ZWRQaXRjaCgpOwotfQot
Ci1GbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotfQotCi1mbG9hdCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIEFT
U0VSVChtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQpOwotCi0gICAgY2Fpcm9fZ2x5cGhfdCBj
Z2x5cGggPSB7IGdseXBoLCAwLCAwIH07Ci0gICAgY2Fpcm9fdGV4dF9leHRlbnRzX3QgZXh0ZW50
czsKLSAgICBjYWlyb19zY2FsZWRfZm9udF9nbHlwaF9leHRlbnRzKG1fcGxhdGZvcm1EYXRhLm1f
c2NhbGVkRm9udCwgJmNnbHlwaCwgMSwgJmV4dGVudHMpOwotCi0gICAgZmxvYXQgd2lkdGggPSAo
ZmxvYXQpbV9zcGFjZVdpZHRoOwotICAgIGlmIChjYWlyb19zY2FsZWRfZm9udF9zdGF0dXMobV9w
bGF0Zm9ybURhdGEubV9zY2FsZWRGb250KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUyAmJiBleHRl
bnRzLnhfYWR2YW5jZSAhPSAwKQotICAgICAgICB3aWR0aCA9IChmbG9hdClleHRlbnRzLnhfYWR2
YW5jZTsKLQotICAgIHJldHVybiB3aWR0aDsgICAgCi19Ci0KLX0KZGlmZiAtLWdpdCBhL0NoYW5n
ZUxvZyBiL0NoYW5nZUxvZwppbmRleCBlZmMwOWU3ZjFmN2FhNmI3ZGMwOWM1NzdlYmE2MjI4NDVi
MTRlYmFmLi5mMzQ4OWUzOGVlNGVkMGVmYjEyNTcxNzk2MmRkMDJiYTg0NDE4YjU5IDEwMDY0NAot
LS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMTIt
MTAgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtH
VEtdIFJlbW92ZSB0aGUgUGFuZ28gYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0NTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWx3YXlzIGxvb2sgZm9yIEZyZWV0eXBlIGFuZCBIYXJmYnV6
ei4gV2Ugc3RpbGwgZGVwZW5kIG9uIFBhbmdvIGZvciBhIGZldworICAgICAgICB0aGluZ3MsIHNv
IHdlIGNhbm5vdCB5ZXQgZWxpbWluYXRlIG91ciBkZXBlbmRlbmN5IG9uIFBhbmdvLgorCisgICAg
ICAgICogY29uZmlndXJlLmFjOiBBbHdheXMgbG9vayBmb3IgRnJlZVR5cGUvSGFyZmJ1enouCisK
IDIwMTItMTItMDkgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGd1c3Rhdm8ubm9yb25oYUBjb2xs
YWJvcmEuY29tPgogCiAgICAgICAgIFtTb3VwXSB1dGlsaXplIG11bHRpcGFydC94LW1peGVkLXJl
cGxhY2Ugc3VwcG9ydCByZWNlbnRseSBhZGRlZCB0byBsaWJzb3VwCmRpZmYgLS1naXQgYS9jb25m
aWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggN2QwMjI1YTUyNzE2Nzk1Nzc4YWMzNGI4NTQ4
ZGZlYjUxYTFkMDFhOS4uOWY1N2U1NDlkOWIyZDBhZjhmZDRhNjY4MGY1MGY5NGEzZmQ0ZWZmMiAx
MDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtOTI1LDE5ICs5
MjUsNiBAQCBBQ19TVUJTVChbR19JUl9TQ0FOTkVSXSkKIEFDX1NVQlNUKFtHX0lSX0NPTVBJTEVS
XSkKIEFDX1NVQlNUKFtHX0lSX0dFTkVSQVRFXSkKIAotIyBkZXRlcm1pbmUgdGhlIGZvbnQgYmFj
a2VuZAotQUNfTVNHX0NIRUNLSU5HKFt0aGUgZm9udCBiYWNrZW5kIHRvIHVzZV0pCi1BQ19BUkdf
V0lUSChmb250X2JhY2tlbmQsCi0gICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWZv
bnQtYmFja2VuZD1APDpAZnJlZXR5cGUvcGFuZ29AOj5AXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFtTZWxlY3QgZm9udCBiYWNrZW5kIFtkZWZhdWx0PWZyZWV0eXBlXV0pLAotICAgICAg
ICAgICAgW10sW3dpdGhfZm9udF9iYWNrZW5kPSJmcmVldHlwZSJdKQotCi1jYXNlICIkd2l0aF9m
b250X2JhY2tlbmQiIGluCi0gICAgIGZyZWV0eXBlfHBhbmdvKSA7OwotICAgICAqKSBBQ19NU0df
RVJST1IoW0ludmFsaWQgZm9udCBiYWNrZW5kOiBtdXN0IGJlIGZyZWV0eXBlIG9yIHBhbmdvLl0p
IDs7Ci1lc2FjCi1BQ19NU0dfUkVTVUxUKFskd2l0aF9mb250X2JhY2tlbmRdKQotCiBpZiB0ZXN0
ICIkaG9zdF9jcHUiID0gInNoNCI7IHRoZW4KICAgIENYWEZMQUdTPSIkQ1hYRkxBR1MgLW1pZWVl
IC13IgogICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1taWVlZSAtdyIKQEAgLTk3NSwyMiArOTYyLDIwIEBA
IEFDX1NVQlNUKFtMSUJTRUNSRVRfQ0ZMQUdTXSkKIEFDX1NVQlNUKFtMSUJTRUNSRVRfTElCU10p
CiAKICMgY2hlY2sgaWYgRnJlZVR5cGUvRm9udENvbmZpZyBhcmUgYXZhaWxhYmxlCi1pZiB0ZXN0
ICIkd2l0aF9mb250X2JhY2tlbmQiID0gImZyZWV0eXBlIjsgdGhlbgotICAgaWYgdGVzdCAiJHdp
dGhfdGFyZ2V0IiA9ICJkaXJlY3RmYiI7IHRoZW4KLSAgIFBLR19DSEVDS19NT0RVTEVTKFtGUkVF
VFlQRV0sCi0gICAgICAgICAgICAgICAgICAgICBbZm9udGNvbmZpZyA+PSAkRk9OVENPTkZJR19S
RVFVSVJFRF9WRVJTSU9OCi0gICAgICAgICAgICAgICAgICAgICBmcmVldHlwZTIgPj0gJEZSRUVU
WVBFMl9SRVFVSVJFRF9WRVJTSU9OCi0gICAgICAgICAgICAgICAgICAgICBoYXJmYnV6el0pCi0g
ICBlbHNlCi0gICBQS0dfQ0hFQ0tfTU9EVUxFUyhbRlJFRVRZUEVdLAotICAgICAgICAgICAgICAg
ICAgICAgW2NhaXJvLWZ0Ci0gICAgICAgICAgICAgICAgICAgICBmb250Y29uZmlnID49ICRGT05U
Q09ORklHX1JFUVVJUkVEX1ZFUlNJT04KLSAgICAgICAgICAgICAgICAgICAgIGZyZWV0eXBlMiA+
PSAkRlJFRVRZUEUyX1JFUVVJUkVEX1ZFUlNJT04KLSAgICAgICAgICAgICAgICAgICAgIGhhcmZi
dXp6XSkKLSAgIGZpCi0gICBBQ19TVUJTVChbRlJFRVRZUEVfQ0ZMQUdTXSkKLSAgIEFDX1NVQlNU
KFtGUkVFVFlQRV9MSUJTXSkKK2lmIHRlc3QgIiR3aXRoX3RhcmdldCIgPSAiZGlyZWN0ZmIiOyB0
aGVuCitQS0dfQ0hFQ0tfTU9EVUxFUyhbRlJFRVRZUEVdLAorICAgICAgICAgICAgICAgICAgW2Zv
bnRjb25maWcgPj0gJEZPTlRDT05GSUdfUkVRVUlSRURfVkVSU0lPTgorICAgICAgICAgICAgICAg
ICAgZnJlZXR5cGUyID49ICRGUkVFVFlQRTJfUkVRVUlSRURfVkVSU0lPTgorICAgICAgICAgICAg
ICAgICAgaGFyZmJ1enpdKQorZWxzZQorUEtHX0NIRUNLX01PRFVMRVMoW0ZSRUVUWVBFXSwKKyAg
ICAgICAgICAgICAgICAgIFtjYWlyby1mdAorICAgICAgICAgICAgICAgICAgZm9udGNvbmZpZyA+
PSAkRk9OVENPTkZJR19SRVFVSVJFRF9WRVJTSU9OCisgICAgICAgICAgICAgICAgICBmcmVldHlw
ZTIgPj0gJEZSRUVUWVBFMl9SRVFVSVJFRF9WRVJTSU9OCisgICAgICAgICAgICAgICAgICBoYXJm
YnV6el0pCiBmaQorQUNfU1VCU1QoW0ZSRUVUWVBFX0NGTEFHU10pCitBQ19TVUJTVChbRlJFRVRZ
UEVfTElCU10pCiAKICMgY2hlY2sgaWYgU1FMaXRlMyBpcyBhdmFpbGFibGUuIEVycm9yIG91dCBv
bmx5IGlmIG9uZSBvZiB0aGUKICMgZmVhdHVyZXMgaGFyZC1kZXBlbmRpbmcgb24gaXQgaXMgZW5h
YmxlZCB3aGlsZSBTUUxpdGUzIGlzCkBAIC0xMTc3LDEwICsxMTYyLDYgQEAgQU1fQ09ORElUSU9O
QUwoW1RBUkdFVF9ESVJFQ1RGQl0sIFt0ZXN0ICIkd2l0aF90YXJnZXQiID0gImRpcmVjdGZiIl0p
CiBBTV9DT05ESVRJT05BTChbVVNFX0lDVV9VTklDT0RFXSwgW3Rlc3QgIiR3aXRoX3VuaWNvZGVf
YmFja2VuZCIgPSAiaWN1Il0pCiBBTV9DT05ESVRJT05BTChbVVNFX0dMSUJfVU5JQ09ERV0sIFt0
ZXN0ICIkd2l0aF91bmljb2RlX2JhY2tlbmQiID0gImdsaWIiXSkKIAotIyBGb250IGJhY2tlbmQg
Y29uZGl0aW9uYWxzCi1BTV9DT05ESVRJT05BTChbVVNFX0ZSRUVUWVBFXSwgW3Rlc3QgIiR3aXRo
X2ZvbnRfYmFja2VuZCIgPSAiZnJlZXR5cGUiXSkKLUFNX0NPTkRJVElPTkFMKFtVU0VfUEFOR09d
LCBbdGVzdCAiJHdpdGhfZm9udF9iYWNrZW5kIiA9ICJwYW5nbyJdKQotCiAjIEdTdHJlYW1lciBm
ZWF0dXJlIGNvbmRpdGlvbmFsCiBBTV9DT05ESVRJT05BTChbVVNFX0dTVFJFQU1FUl0sIFt0ZXN0
ICIkaGF2ZV9nc3RyZWFtZXIiID0gInllcyJdKQogQU1fQ09ORElUSU9OQUwoW1VTRV9XRUJBVURJ
T19HU1RSRUFNRVJdLCBbdGVzdCAiJGVuYWJsZV93ZWJfYXVkaW8iID0gInllcyJdKQpAQCAtMTI4
MCw3ICsxMjYxLDYgQEAgQnVpbGQgY29uZmlndXJhdGlvbjoKICBFbmFibGUgR0NDIGJ1aWxkIG9w
dGltaXphdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfb3B0aW1pemF0
aW9ucwogIENvZGUgY292ZXJhZ2Ugc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogJGVuYWJsZV9jb3ZlcmFnZQogIFVuaWNvZGUgYmFja2VuZCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHdpdGhfdW5pY29kZV9iYWNrZW5kCi0gRm9u
dCBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAk
d2l0aF9mb250X2JhY2tlbmQKICBPcHRpbWl6ZWQgbWVtb3J5IGFsbG9jYXRvciAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfZmFzdF9tYWxsb2MKICBBY2NlbGVyYXRlZCBy
ZW5kZXJpbmcgYmFja2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRhY2NlbGVyYXRp
b25fYmFja2VuZF9kZXNjcmlwdGlvbgogCg==
</data>
<flag name="review"
          id="195251"
          type_id="1"
          status="+"
          setter="dbates"
    />
          </attachment>
      

    </bug>

</bugzilla>