<?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>91458</bug_id>
          
          <creation_ts>2012-07-16 17:49:53 -0700</creation_ts>
          <short_desc>[Chromium] Rename HarfBuzzFace to HarfBuzzNGFace</short_desc>
          <delta_ts>2012-07-17 18:12:28 -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>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="Kenichi Ishibashi">bashi</reporter>
          <assigned_to name="Kenichi Ishibashi">bashi</assigned_to>
          <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>670844</commentid>
    <comment_count>0</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-07-16 17:49:53 -0700</bug_when>
    <thetext>This is a follow-up of https://bugs.webkit.org/show_bug.cgi?id=90362#c15</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670887</commentid>
    <comment_count>1</comment_count>
      <attachid>152677</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-07-16 18:39:02 -0700</bug_when>
    <thetext>Created attachment 152677
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670900</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-16 19:10:52 -0700</bug_when>
    <thetext>Attachment 152677 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzNGFace.h:39:  hb_face_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzNGFace.h:41:  hb_font_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671342</commentid>
    <comment_count>3</comment_count>
      <attachid>152677</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-07-17 10:03:17 -0700</bug_when>
    <thetext>Comment on attachment 152677
Patch

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671690</commentid>
    <comment_count>4</comment_count>
      <attachid>152677</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-07-17 15:58:16 -0700</bug_when>
    <thetext>Comment on attachment 152677
Patch

Thank you for review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671745</commentid>
    <comment_count>5</comment_count>
      <attachid>152677</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-17 16:39:50 -0700</bug_when>
    <thetext>Comment on attachment 152677
Patch

Rejecting attachment 152677 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
t in LayoutTests/platform/mac/TestExpectations
Failed to merge in the changes.
Patch failed at 0001 [Mac] REGRESSION (r122651): fast/text/descent-clip-in-scaled-page.html fails

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.

Full output: http://queues.webkit.org/results/13275343</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671772</commentid>
    <comment_count>6</comment_count>
      <attachid>152677</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-07-17 17:14:24 -0700</bug_when>
    <thetext>Comment on attachment 152677
Patch

Try again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671838</commentid>
    <comment_count>7</comment_count>
      <attachid>152677</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-17 18:12:23 -0700</bug_when>
    <thetext>Comment on attachment 152677
Patch

Clearing flags on attachment: 152677

Committed r122911: &lt;http://trac.webkit.org/changeset/122911&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671839</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-17 18:12:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152677</attachid>
            <date>2012-07-16 18:39:02 -0700</date>
            <delta_ts>2012-07-17 18:12:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91458-20120717103901.patch</filename>
            <type>text/plain</type>
            <size>52348</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjFkNGY4ZTZjMDJhZDNh
OTg3ZTU1NGZlNzk2NmZiOTllZTU5Y2FkNy4uNmI2NzExZjMwOTIyZjA5MWYyMjZiNjg2YjNmMTE0
ZmYzODZkNzkyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEyLTA3LTE2ICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IFJlbmFtZSBIYXJmQnV6ekZhY2UgdG8gSGFyZkJ1enpOR0ZhY2UKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxNDU4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJlIEhhcmZidXp6RmFjZSBjbGFz
cyAoZm9yIG9sZC1oYXJmYnV6eikgYW5kIEhhcmZCdXp6RmFjZSAoZm9yIGhhcmZidXp6LW5nKSBj
bGFzcy4gVGhlIGRpZmZlcmVuY2UgaXMgdG9vIHN1YnRsZS4gTWFrZSB0aGVtIG1vcmUgZGlzdGlu
Y3QuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBObyBjaGFuZ2VzIGluIGJlaGF2aW9yLgorCisg
ICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6IFJlbmFtZSBIYXJmQnV6ekZhY2UgdG8g
SGFyZkJ1enpOR0ZhY2UuCisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0by4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmg6IERpdHRvLgorICAgICAgICAo
Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dFBsYXRmb3JtRGF0YUNvY29hLm1tOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0
Zm9ybURhdGE6OmhhcmZidXp6RmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXJmYnV6ekZhY2UpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5oOiBEaXR0by4KKyAg
ICAgICAgKEZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L25nL0hhcmZCdXp6TkdGYWNlQ29yZVRleHQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlQ29yZVRl
eHQuY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpmbG9hdFRvSGFy
ZkJ1enpQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpnZXRHbHlwaCk6CisgICAgICAgIChX
ZWJDb3JlOjpnZXRHbHlwaEhvcml6b250YWxBZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6Omdl
dEdseXBoSG9yaXpvbnRhbE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpnZXRHbHlwaEV4dGVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6aGFyZmJ1enpDb3JlVGV4dEdldEZvbnRGdW5jcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpyZWxlYXNlVGFibGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Omhh
cmZidXp6Q29yZVRleHRHZXRUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6ek5HRmFj
ZTo6Y3JlYXRlRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6ek5HRmFjZTo6Y3JlYXRl
Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6Y3JlYXRlR2x5cGhCdWZm
ZXJBZHZhbmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJm
QnV6ek5HRmFjZVNraWEuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlU2tpYS5jcHAuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNraWFTY2FsYXJUb0hhcmZidXp6UG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U2tpYUdldEdseXBoV2lkdGhBbmRFeHRlbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OmhhcmZidXp6R2V0R2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6aGFyZmJ1enpH
ZXRHbHlwaEhvcml6b250YWxBZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmhhcmZidXp6R2V0
R2x5cGhIb3Jpem9udGFsT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OmhhcmZidXp6R2V0R2x5
cGhFeHRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmhhcmZidXp6U2tpYUdldEZvbnRGdW5jcyk6
CisgICAgICAgIChXZWJDb3JlOjpoYXJmYnV6elNraWFHZXRUYWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpkZXN0cm95UGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpOR0ZhY2U6OmNy
ZWF0ZUZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpOR0ZhY2U6OmNyZWF0ZUZvbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OmNyZWF0ZUdseXBoQnVmZmVyQWR2
YW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpO
R0ZhY2UuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6aGFyZmJ1enpGYWNlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1
enpOR0ZhY2U6OkhhcmZCdXp6TkdGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6TkdG
YWNlOjp+SGFyZkJ1enpOR0ZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L25nL0hhcmZCdXp6TkdGYWNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2UuaC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoSGFyZkJ1enpOR0ZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1
enpOR0ZhY2U6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
bmcvSGFyZkJ1enpTaGFwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6
OnNoYXBlSGFyZkJ1enpSdW5zKToKKwogMjAxMi0wNy0xNiAgSWx5YSBUaWtob25vdnNreSAgPGxv
aXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogbW92aW5nIGZvcndh
cmQgdG8gdGhlIGJldHRlciBtZW1vcnkgaW5zdHJ1bWVudGF0aW9uIEFQSQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCBjMjc0ZTJmMDNlYmJlMmMzYjgzODg4ZTk5OWRm
Zjg0MWY5MmE5Y2QwLi5iMzUyZTQ1MWZkOTI0M2NlZTM5MjYyYTE5NDkyMWUzNzA3ZjQ1MDU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtMTU4MCw4ICsxNTgwLDgg
QEAKICAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9D
b21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6elxcLmNwcCQnXSwKICAgICAgICAgICAgIFsnZXhj
bHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWFcXC5jcHAkJ10s
CiAKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9u
Zy9IYXJmQnV6ekZhY2VcXC4oY3BwfGgpJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFjZVNraWFcXC5jcHAkJ10sCisg
ICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpOR0ZhY2VcXC4oY3BwfGgpJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlU2tpYVxcLmNwcCQnXSwKICAg
ICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJm
QnV6elNoYXBlclxcLihjcHB8aCkkJ10sCiAgICAgICAgICAgXSwKICAgICAgICAgfV0sCkBAIC0x
NzA3LDggKzE3MDcsOCBAQAogCiAgICAgICAgICAgICAjIE1hYyB1c2VzIEhhcmZidXp6LW5nLgog
ICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZC
dXp6U2hhcGVyQmFzZVxcLihjcHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlQ29yZVRleHRcXC5jcHAkJ10s
Ci0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcv
SGFyZkJ1enpGYWNlXFwuKGNwcHxoKSQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZUNvcmVUZXh0XFwuY3BwJCdd
LAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25n
L0hhcmZCdXp6TkdGYWNlXFwuKGNwcHxoKSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdw
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlclxcLihjcHB8aCkkJ10s
ICAgICAgICAgICAgCiAgICAgICAgICAgXSwKICAgICAgICAgfSx7ICMgT1MhPSJtYWMiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKaW5kZXggZjNmNzdlYTQzYWRhYzViMTlmMDliM2UwY2FkNDNiYWU1YTQ3OTE1NC4u
ZWNhZmYzM2NhNTAwMGJhYjc1NjVjOWQ1N2FkMzFmYzQ1OGFiYTU1MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMzc3NSwxMCArMzc3NSwxMCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0hhcmZCdXp6U2tpYS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2UuaCcsCi0gICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlQ29yZVRleHQuY3BwJywK
LSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2VT
a2lhLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpGYWNlLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
bmcvSGFyZkJ1enpGYWNlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L25nL0hhcmZCdXp6TkdGYWNlQ29yZVRleHQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZVNraWEuY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNl
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6
U2hhcGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcv
SGFyZkJ1enpTaGFwZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Nv
bG9yTWFjLm1tJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRQbGF0Zm9ybURhdGEuaAppbmRleCA2M2E5MWE0MjQxYTA0Mzg4YjZkOTRlZGRjZGY5OGUyM2E0
YTY5MzE2Li44YjBkYmVkOWIyN2MyYmM2YjQwNzhjMjE4OTQ4NzVlMjFkZmE4OWNkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5o
CkBAIC03Miw3ICs3Miw3IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ1RGb250KiBDVEZvbnRS
ZWY7CiAKICNpZiBQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKQogI2luY2x1ZGUgIkNy
b3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLmgiICAKLSNpbmNsdWRlICJIYXJmQnV6ekZhY2UuaCIKKyNp
bmNsdWRlICJIYXJmQnV6ek5HRmFjZS5oIgogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkBA
IC0yNTcsNyArMjU3LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBQTEFURk9STShDSFJPTUlV
TSkgJiYgT1MoREFSV0lOKQotICAgIEhhcmZCdXp6RmFjZSogaGFyZmJ1enpGYWNlKCk7CisgICAg
SGFyZkJ1enpOR0ZhY2UqIGhhcmZidXp6RmFjZSgpOwogI2VuZGlmCiAKICAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QKQEAgLTM2Myw3ICszNjMsNyBAQCBwcml2YXRlOgogCiAjaWYgUExBVEZPUk0o
Q0hST01JVU0pICYmIE9TKERBUldJTikKICAgICBSZWZQdHI8TWVtb3J5QWN0aXZhdGVkRm9udD4g
bV9pbk1lbW9yeUZvbnQ7Ci0gICAgUmVmUHRyPEhhcmZCdXp6RmFjZT4gbV9oYXJmYnV6ekZhY2U7
CisgICAgUmVmUHRyPEhhcmZCdXp6TkdGYWNlPiBtX2hhcmZidXp6RmFjZTsKICNlbmRpZgogCiAg
ICAgYm9vbCBtX2lzQ29sb3JCaXRtYXBGb250OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1t
CmluZGV4IGZiZmU2Mzc5ZmI2NDg3NDNlNjg2ZTc5NGJhODgxMWNjNDE2MDk5ZWYuLjRiYjA5NTFk
YWU3NzlkNzY3ZjBhMDMxZGMzZjU4NWI0MzEwNGUyZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRh
Q29jb2EubW0KQEAgLTMxNSw3ICszMTUsNyBAQCBzdGF0aWMgYm9vbCBpc0FBVEZvbnQoQ1RGb250
UmVmIGN0Rm9udCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUhhcmZCdXp6RmFjZSogRm9udFBs
YXRmb3JtRGF0YTo6aGFyZmJ1enpGYWNlKCkKK0hhcmZCdXp6TkdGYWNlKiBGb250UGxhdGZvcm1E
YXRhOjpoYXJmYnV6ekZhY2UoKQogewogICAgIENURm9udFJlZiBmb250ID0gY3RGb250KCk7CiAg
ICAgLy8gSGFyZkJ1enogY2FuJ3QgaGFuZGxlIEFBVCBmb250CkBAIC0zMjQsNyArMzI0LDcgQEAg
SGFyZkJ1enpGYWNlKiBGb250UGxhdGZvcm1EYXRhOjpoYXJmYnV6ekZhY2UoKQogCiAgICAgaWYg
KCFtX2hhcmZidXp6RmFjZSkgewogICAgICAgICB1aW50NjRfdCB1bmlxdWVJRCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90Pihmb250KTsKLSAgICAgICAgbV9oYXJmYnV6ekZhY2UgPSBIYXJm
QnV6ekZhY2U6OmNyZWF0ZShjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPih0aGlzKSwgdW5p
cXVlSUQpOworICAgICAgICBtX2hhcmZidXp6RmFjZSA9IEhhcmZCdXp6TkdGYWNlOjpjcmVhdGUo
Y29uc3RfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4odGhpcyksIHVuaXF1ZUlEKTsKICAgICB9CiAg
ICAgcmV0dXJuIG1faGFyZmJ1enpGYWNlLmdldCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0
Zm9ybURhdGFIYXJmQnV6ei5jcHAKaW5kZXggNDhiMTYyNDc0NmQ4Y2U5MGM1NzE5YTRjMjc5YWVj
MGFjZjY2MmMzOC4uZTZmZjMyMmI0NjA1OWFjZGQ4OWUzZTBkOTE5MTYwYmE3ODQwNGZlMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBs
YXRmb3JtRGF0YUhhcmZCdXp6LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enouY3BwCkBAIC0yNDAsMTAgKzI0
MCwxMCBAQCBib29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpIGNvbnN0CiB9CiAK
ICNpZiBVU0UoSEFSRkJVWlpfTkcpCi1IYXJmQnV6ekZhY2UqIEZvbnRQbGF0Zm9ybURhdGE6Omhh
cmZidXp6RmFjZSgpIGNvbnN0CitIYXJmQnV6ek5HRmFjZSogRm9udFBsYXRmb3JtRGF0YTo6aGFy
ZmJ1enpGYWNlKCkgY29uc3QKIHsKICAgICBpZiAoIW1faGFyZmJ1enpGYWNlKQotICAgICAgICBt
X2hhcmZidXp6RmFjZSA9IEhhcmZCdXp6RmFjZTo6Y3JlYXRlKGNvbnN0X2Nhc3Q8Rm9udFBsYXRm
b3JtRGF0YSo+KHRoaXMpLCB1bmlxdWVJRCgpKTsKKyAgICAgICAgbV9oYXJmYnV6ekZhY2UgPSBI
YXJmQnV6ek5HRmFjZTo6Y3JlYXRlKGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KHRoaXMp
LCB1bmlxdWVJRCgpKTsKIAogICAgIHJldHVybiBtX2hhcmZidXp6RmFjZS5nZXQoKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQ
bGF0Zm9ybURhdGFIYXJmQnV6ei5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmgKaW5kZXggNmY0ZWNhMzMxOTMxZGVh
MjgxNTFjYzI4MTRjZDVjMjhkYTM0YTEwYi4uNWM2ZmFhNjRhYTRmYjI0Mzc5ODgzM2I3MjZmOTZk
N2FiZjIyZDlkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmgKQEAg
LTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJGb250T3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJG
b250UmVuZGVyU3R5bGUuaCIKICNpZiBVU0UoSEFSRkJVWlpfTkcpCi0jaW5jbHVkZSAiSGFyZkJ1
enpGYWNlLmgiCisjaW5jbHVkZSAiSGFyZkJ1enpOR0ZhY2UuaCIKICNlbHNlCiAjaW5jbHVkZSAi
SGFyZkJ1enpTa2lhLmgiCiAjZW5kaWYKQEAgLTEzMyw4ICsxMzMsNyBAQCBwdWJsaWM6CiAjZW5k
aWYKIAogI2lmIFVTRShIQVJGQlVaWl9ORykKLSAgICAvLyBGSVhNRTogUmVuYW1lIHRoaXMgbGlr
ZSAiaGFyZmJ1enpOR0ZhY2UoKSIgYmVjYXVzZSBkaWZmZXJlbmNlIGlzIHRvbyBzdWJ0bGUuCi0g
ICAgSGFyZkJ1enpGYWNlKiBoYXJmYnV6ekZhY2UoKSBjb25zdDsKKyAgICBIYXJmQnV6ek5HRmFj
ZSogaGFyZmJ1enpGYWNlKCkgY29uc3Q7CiAjZWxzZQogICAgIEhhcmZidXp6RmFjZSogaGFyZmJ1
enpGYWNlKCkgY29uc3Q7CiAjZW5kaWYKQEAgLTE2Niw3ICsxNjUsNyBAQCBwcml2YXRlOgogICAg
IFRleHRPcmllbnRhdGlvbiBtX3RleHRPcmllbnRhdGlvbjsKICAgICBGb250UmVuZGVyU3R5bGUg
bV9zdHlsZTsKICNpZiBVU0UoSEFSRkJVWlpfTkcpCi0gICAgbXV0YWJsZSBSZWZQdHI8SGFyZkJ1
enpGYWNlPiBtX2hhcmZidXp6RmFjZTsKKyAgICBtdXRhYmxlIFJlZlB0cjxIYXJmQnV6ek5HRmFj
ZT4gbV9oYXJmYnV6ekZhY2U7CiAjZWxzZQogICAgIG11dGFibGUgUmVmUHRyPEhhcmZidXp6RmFj
ZT4gbV9oYXJmYnV6ekZhY2U7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFjZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2UuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWRkYmFiYjIyYmRhOTY3N2E1NTg3MTBhNTE3OTJm
YjViYWExNDFlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFj
ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChj
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkhhcmZCdXp6RmFjZS5oIgotCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5o
IgotI2luY2x1ZGUgImhiLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi0vLyBUaG91Z2ggd2UgaGF2ZSBGb250Q2FjaGUgY2xhc3MsIHdoaWNoIHBy
b3ZpZGVzIHRoZSBjYWNoZSBtZWNoYW5pc20gZm9yCi0vLyBXZWJLaXQncyBmb250IG9iamVjdHMs
IHdlIGFsc28gbmVlZCBhZGRpdGlvbmFsIGNhY2hpbmcgbGF5ZXIgZm9yIEhhcmZCdXp6Ci0vLyB0
byByZWR1Y2UgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBiZWNhdXNlIGhiX2ZhY2VfdCBzaG91bGQg
YmUgYXNzb2NpYXRlZCB3aXRoCi0vLyB1bmRlcmxpbmcgZm9udCBkYXRhIChlLmcuIENURm9udFJl
ZiwgRlRGYWNlKS4KLXR5cGVkZWYgcGFpcjxoYl9mYWNlX3QqLCB1bnNpZ25lZD4gRmFjZUNhY2hl
RW50cnk7Ci10eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIEZhY2VDYWNoZUVudHJ5LCBXVEY6Oklu
dEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2
NF90PiA+IEhhcmZCdXp6RmFjZUNhY2hlOwotCi1zdGF0aWMgSGFyZkJ1enpGYWNlQ2FjaGUqIGhh
cmZidXp6RmFjZUNhY2hlKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhcmZCdXp6RmFj
ZUNhY2hlLCBzX2hhcmZidXp6RmFjZUNhY2hlLCAoKSk7Ci0gICAgcmV0dXJuICZzX2hhcmZidXp6
RmFjZUNhY2hlOwotfQotCi1IYXJmQnV6ekZhY2U6OkhhcmZCdXp6RmFjZShGb250UGxhdGZvcm1E
YXRhKiBwbGF0Zm9ybURhdGEsIHVpbnQ2NF90IHVuaXF1ZUlEKQotICAgIDogbV9wbGF0Zm9ybURh
dGEocGxhdGZvcm1EYXRhKQotICAgICwgbV91bmlxdWVJRCh1bmlxdWVJRCkKLXsKLSAgICBIYXJm
QnV6ekZhY2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+Zmlu
ZChtX3VuaXF1ZUlEKTsKLSAgICBpZiAocmVzdWx0ID09IGhhcmZidXp6RmFjZUNhY2hlKCktPmVu
ZCgpKSB7Ci0gICAgICAgIG1fZmFjZSA9IGNyZWF0ZUZhY2UoKTsKLSAgICAgICAgQVNTRVJUKG1f
ZmFjZSk7Ci0gICAgICAgIGhhcmZidXp6RmFjZUNhY2hlKCktPnNldChtX3VuaXF1ZUlELCBGYWNl
Q2FjaGVFbnRyeShtX2ZhY2UsIDEpKTsKLSAgICB9IGVsc2UgewotICAgICAgICArKyhyZXN1bHQu
Z2V0KCktPnNlY29uZC5zZWNvbmQpOwotICAgICAgICBtX2ZhY2UgPSByZXN1bHQuZ2V0KCktPnNl
Y29uZC5maXJzdDsKLSAgICB9Ci19Ci0KLUhhcmZCdXp6RmFjZTo6fkhhcmZCdXp6RmFjZSgpCi17
Ci0gICAgSGFyZkJ1enpGYWNlQ2FjaGU6Oml0ZXJhdG9yIHJlc3VsdCA9IGhhcmZidXp6RmFjZUNh
Y2hlKCktPmZpbmQobV91bmlxdWVJRCk7Ci0gICAgQVNTRVJUKHJlc3VsdCAhPSBoYXJmYnV6ekZh
Y2VDYWNoZSgpLT5lbmQoKSk7Ci0gICAgQVNTRVJUKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29u
ZCA+IDApOwotICAgIC0tKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCk7Ci0gICAgaWYgKCEo
cmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKSkgewotICAgICAgICBoYl9mYWNlX2Rlc3Ryb3ko
cmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3QpOwotICAgICAgICBoYXJmYnV6ekZhY2VDYWNoZSgp
LT5yZW1vdmUobV91bmlxdWVJRCk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9u
Zy9IYXJmQnV6ekZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L25nL0hhcmZCdXp6RmFjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmMy
NmIxYjFmMjBjM2ZmYTc5Yjg4ZmI2OGQ5OWNhZDc5MmY0ODRiLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgSGFyZkJ1enpGYWNlX2gKLSNkZWZpbmUgSGFyZkJ1enpGYWNlX2gKLQotI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLXN0cnVjdCBfaGJfZmFjZV90OwotdHlwZWRlZiBfaGJf
ZmFjZV90IGhiX2ZhY2VfdDsKLXN0cnVjdCBfaGJfZm9udF90OwotdHlwZWRlZiBfaGJfZm9udF90
IGhiX2ZvbnRfdDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGb250UGxhdGZvcm1E
YXRhOwotCi1jbGFzcyBIYXJmQnV6ekZhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxIYXJmQnV6ekZh
Y2U+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxIYXJmQnV6ekZhY2U+IGNyZWF0
ZShGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEsIHVpbnQ2NF90IHVuaXF1ZUlEKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIYXJmQnV6ekZhY2UocGxhdGZvcm1EYXRh
LCB1bmlxdWVJRCkpOwotICAgIH0KLSAgICB+SGFyZkJ1enpGYWNlKCk7Ci0KLSAgICBoYl9mb250
X3QqIGNyZWF0ZUZvbnQoKTsKLQotcHJpdmF0ZToKLSAgICBIYXJmQnV6ekZhY2UoRm9udFBsYXRm
b3JtRGF0YSosIHVpbnQ2NF90KTsKLQotICAgIGhiX2ZhY2VfdCogY3JlYXRlRmFjZSgpOwotCi0g
ICAgRm9udFBsYXRmb3JtRGF0YSogbV9wbGF0Zm9ybURhdGE7Ci0gICAgdWludDY0X3QgbV91bmlx
dWVJRDsKLSAgICBoYl9mYWNlX3QqIG1fZmFjZTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEhhcmZC
dXp6RmFjZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9uZy9IYXJmQnV6ekZhY2VDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2VDb3JlVGV4dC5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NjU4OWRiOTQ3YjczYzRjN2ZlOTFiYjIyYzFkYjQx
ODE4YmVjM2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNl
Q29yZVRleHQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSGFyZkJ1enpGYWNlLmgiCi0KLSNpbmNsdWRlICJGb250UGxhdGZv
cm1EYXRhLmgiCi0jaW5jbHVkZSAiSGFyZkJ1enpTaGFwZXIuaCIKLSNpbmNsdWRlICJTaW1wbGVG
b250RGF0YS5oIgotCi0jaW5jbHVkZSAiaGIuaCIKLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZp
Y2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0
aWMgaGJfcG9zaXRpb25fdCBmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihDR0Zsb2F0IHZhbHVlKQot
ewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxoYl9wb3NpdGlvbl90Pih2YWx1ZSAqICgxIDw8IDE2
KSk7Ci19Ci0KLXN0YXRpYyBoYl9ib29sX3QgZ2V0R2x5cGgoaGJfZm9udF90KiBoYkZvbnQsIHZv
aWQqIGZvbnREYXRhLCBoYl9jb2RlcG9pbnRfdCB1bmljb2RlLCBoYl9jb2RlcG9pbnRfdCB2YXJp
YXRpb25TZWxlY3RvciwgaGJfY29kZXBvaW50X3QqIGdseXBoLCB2b2lkKiB1c2VyRGF0YSkKLXsK
LSAgICBDVEZvbnRSZWYgY3RGb250ID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRh
Kj4oZm9udERhdGEpLT5jdEZvbnQoKTsKLSAgICBVbmlDaGFyIGNoYXJhY3RlcnNbNF07Ci0gICAg
Q0dHbHlwaCBjZ0dseXBoc1s0XTsKLSAgICBzaXplX3QgbGVuZ3RoID0gMDsKLSAgICBVMTZfQVBQ
RU5EX1VOU0FGRShjaGFyYWN0ZXJzLCBsZW5ndGgsIHVuaWNvZGUpOwotICAgIGlmICghQ1RGb250
R2V0R2x5cGhzRm9yQ2hhcmFjdGVycyhjdEZvbnQsIGNoYXJhY3RlcnMsIGNnR2x5cGhzLCBsZW5n
dGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKmdseXBoID0gY2dHbHlwaHNbMF07Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBoYl9wb3NpdGlvbl90IGdldEdseXBoSG9yaXpv
bnRhbEFkdmFuY2UoaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9p
bnRfdCBnbHlwaCwgdm9pZCogdXNlckRhdGEpCi17Ci0gICAgQ1RGb250UmVmIGN0Rm9udCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KGZvbnREYXRhKS0+Y3RGb250KCk7Ci0g
ICAgQ0dHbHlwaCBjZ0dseXBoID0gZ2x5cGg7Ci0gICAgQ0dGbG9hdCBhZHZhbmNlID0gQ1RGb250
R2V0QWR2YW5jZXNGb3JHbHlwaHMoY3RGb250LCBrQ1RGb250SG9yaXpvbnRhbE9yaWVudGF0aW9u
LCAmY2dHbHlwaCwgMCwgMSk7Ci0gICAgcmV0dXJuIGZsb2F0VG9IYXJmQnV6elBvc2l0aW9uKGFk
dmFuY2UpOwotfQotCi1zdGF0aWMgaGJfYm9vbF90IGdldEdseXBoSG9yaXpvbnRhbE9yaWdpbiho
Yl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCBo
Yl9wb3NpdGlvbl90KiB4LCBoYl9wb3NpdGlvbl90KiB5LCB2b2lkKiB1c2VyRGF0YSkKLXsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGhiX2Jvb2xfdCBnZXRHbHlwaEV4dGVudHMoaGJf
Zm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9pbnRfdCBnbHlwaCwgaGJf
Z2x5cGhfZXh0ZW50c190KiBleHRlbnRzLCB2b2lkKiB1c2VyRGF0YSkKLXsKLSAgICBDVEZvbnRS
ZWYgY3RGb250ID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oZm9udERhdGEp
LT5jdEZvbnQoKTsKLSAgICBDR1JlY3QgY2dSZWN0OwotICAgIENHR2x5cGggY2dHbHlwaCA9IGds
eXBoOwotICAgIGlmIChDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKGN0Rm9udCwga0NU
Rm9udERlZmF1bHRPcmllbnRhdGlvbiwgJmNnR2x5cGgsICZjZ1JlY3QsIDEpID09IENHUmVjdE51
bGwpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBleHRlbnRzLT54X2JlYXJpbmcgPSBmbG9h
dFRvSGFyZkJ1enpQb3NpdGlvbihjZ1JlY3Qub3JpZ2luLngpOwotICAgIGV4dGVudHMtPnlfYmVh
cmluZyA9IC1mbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihjZ1JlY3Qub3JpZ2luLnkpOwotICAgIGV4
dGVudHMtPndpZHRoID0gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oY2dSZWN0LnNpemUud2lkdGgp
OwotICAgIGV4dGVudHMtPmhlaWdodCA9IGZsb2F0VG9IYXJmQnV6elBvc2l0aW9uKGNnUmVjdC5z
aXplLmhlaWdodCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBoYl9mb250X2Z1bmNz
X3QqIGhhcmZidXp6Q29yZVRleHRHZXRGb250RnVuY3MoKQotewotICAgIHN0YXRpYyBoYl9mb250
X2Z1bmNzX3QqIGhhcmZidXp6Q29yZVRleHRGb250RnVuY3MgPSAwOwotCi0gICAgaWYgKCFoYXJm
YnV6ekNvcmVUZXh0Rm9udEZ1bmNzKSB7Ci0gICAgICAgIGhhcmZidXp6Q29yZVRleHRGb250RnVu
Y3MgPSBoYl9mb250X2Z1bmNzX2NyZWF0ZSgpOwotICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9n
bHlwaF9mdW5jKGhhcmZidXp6Q29yZVRleHRGb250RnVuY3MsIGdldEdseXBoLCAwLCAwKTsKLSAg
ICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfaF9hZHZhbmNlX2Z1bmMoaGFyZmJ1enpDb3Jl
VGV4dEZvbnRGdW5jcywgZ2V0R2x5cGhIb3Jpem9udGFsQWR2YW5jZSwgMCwgMCk7Ci0gICAgICAg
IGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2hfb3JpZ2luX2Z1bmMoaGFyZmJ1enpDb3JlVGV4dEZv
bnRGdW5jcywgZ2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luLCAwLCAwKTsKLSAgICAgICAgaGJfZm9u
dF9mdW5jc19zZXRfZ2x5cGhfZXh0ZW50c19mdW5jKGhhcmZidXp6Q29yZVRleHRGb250RnVuY3Ms
IGdldEdseXBoRXh0ZW50cywgMCwgMCk7Ci0gICAgICAgIGhiX2ZvbnRfZnVuY3NfbWFrZV9pbW11
dGFibGUoaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcyk7Ci0gICAgfQotICAgIHJldHVybiBoYXJm
YnV6ekNvcmVUZXh0Rm9udEZ1bmNzOwotfQotCi1zdGF0aWMgdm9pZCByZWxlYXNlVGFibGVEYXRh
KHZvaWQqIHVzZXJEYXRhKQotewotICAgIENGRGF0YVJlZiBjZkRhdGEgPSByZWludGVycHJldF9j
YXN0PENGRGF0YVJlZj4odXNlckRhdGEpOwotICAgIENGUmVsZWFzZShjZkRhdGEpOwotfQotCi1z
dGF0aWMgaGJfYmxvYl90KiBoYXJmYnV6ekNvcmVUZXh0R2V0VGFibGUoaGJfZmFjZV90KiBmYWNl
LCBoYl90YWdfdCB0YWcsIHZvaWQqIHVzZXJEYXRhKQotewotICAgIEZvbnRQbGF0Zm9ybURhdGEq
IHBsYXRmb3JtRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KHVzZXJE
YXRhKTsKLSAgICAvLyBJdCBzZWVtcyB0aGF0IENURm9udENvcHlUYWJsZSBvZiBNYWNPU1gxMC41
IHNkayBkb2Vzbid0IHdvcmsgZm9yCi0gICAgLy8gT3BlblR5cGUgbGF5b3V0IHRhYmxlcyhHREVG
LCBHU1VCLCBHUE9TKS4gVXNlIENHRm9udENvcHlUYWJsZUZvclRhZyBpbnN0ZWFkLgotICAgIENH
Rm9udFJlZiBjZ0ZvbnQgPSBwbGF0Zm9ybURhdGEtPmNnRm9udCgpOwotICAgIENGRGF0YVJlZiBj
ZkRhdGEgPSBDR0ZvbnRDb3B5VGFibGVGb3JUYWcoY2dGb250LCB0YWcpOwotICAgIGlmICghY2ZE
YXRhKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNvbnN0IGNoYXIqIGRhdGEgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPihDRkRhdGFHZXRCeXRlUHRyKGNmRGF0YSkpOwotICAgIGNv
bnN0IHNpemVfdCBsZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgoY2ZEYXRhKTsKLSAgICBpZiAoIWRh
dGEgfHwgIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGhiX2Jsb2JfY3Jl
YXRlKGRhdGEsIGxlbmd0aCwgSEJfTUVNT1JZX01PREVfUkVBRE9OTFksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGNvbnN0X2Nhc3Q8X19DRkRhdGEqPihjZkRhdGEpKSwgcmVsZWFzZVRhYmxlRGF0
YSk7Ci19Ci0KLWhiX2ZhY2VfdCogSGFyZkJ1enpGYWNlOjpjcmVhdGVGYWNlKCkKLXsKLSAgICBo
Yl9mYWNlX3QqIGZhY2UgPSBoYl9mYWNlX2NyZWF0ZV9mb3JfdGFibGVzKGhhcmZidXp6Q29yZVRl
eHRHZXRUYWJsZSwgbV9wbGF0Zm9ybURhdGEsIDApOwotICAgIEFTU0VSVChmYWNlKTsKLSAgICBy
ZXR1cm4gZmFjZTsKLX0KLQotaGJfZm9udF90KiBIYXJmQnV6ekZhY2U6OmNyZWF0ZUZvbnQoKQot
ewotICAgIGhiX2ZvbnRfdCogZm9udCA9IGhiX2ZvbnRfY3JlYXRlKG1fZmFjZSk7Ci0gICAgaGJf
Zm9udF9zZXRfZnVuY3MoZm9udCwgaGFyZmJ1enpDb3JlVGV4dEdldEZvbnRGdW5jcygpLCBtX3Bs
YXRmb3JtRGF0YSwgMCk7Ci0gICAgY29uc3QgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLT5t
X3NpemU7Ci0gICAgaGJfZm9udF9zZXRfcHBlbShmb250LCBzaXplLCBzaXplKTsKLSAgICBjb25z
dCBpbnQgc2NhbGUgPSAoMSA8PCAxNikgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemUpOwotICAgIGhi
X2ZvbnRfc2V0X3NjYWxlKGZvbnQsIHNjYWxlLCBzY2FsZSk7Ci0gICAgaGJfZm9udF9tYWtlX2lt
bXV0YWJsZShmb250KTsKLSAgICByZXR1cm4gZm9udDsKLX0KLQotR2x5cGhCdWZmZXJBZHZhbmNl
IEhhcmZCdXp6U2hhcGVyOjpjcmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2UoZmxvYXQgd2lkdGgsIGZs
b2F0IGhlaWdodCkKLXsKLSAgICByZXR1cm4gQ0dTaXplTWFrZSh3aWR0aCwgaGVpZ2h0KTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlU2tpYS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2VTa2lhLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI5YmRiOTFkODExZGNlZGU2ZWY5MGU2
M2IzY2NjYzBjNjRiNmY4Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJm
QnV6ekZhY2VTa2lhLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4NyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkhhcmZCdXp6RmFjZS5oIgotCi0jaW5jbHVkZSAiRm9udFBs
YXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiSGFyZkJ1
enpTaGFwZXIuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgIlNrRm9u
dEhvc3QuaCIKLSNpbmNsdWRlICJTa1BhaW50LmgiCi0jaW5jbHVkZSAiU2tQYXRoLmgiCi0jaW5j
bHVkZSAiU2tQb2ludC5oIgotI2luY2x1ZGUgIlNrUmVjdC5oIgotI2luY2x1ZGUgIlNrVXRpbHMu
aCIKLQotI2luY2x1ZGUgImhiLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gT3VyIGlt
cGxlbWVudGF0aW9uIG9mIHRoZSBjYWxsYmFja3Mgd2hpY2ggSGFyZmJ1enogcmVxdWlyZXMgYnkg
dXNpbmcgU2tpYQotLy8gY2FsbHMuIFNlZSB0aGUgSGFyZmJ1enogc291cmNlIGZvciByZWZlcmVu
Y2VzIGFib3V0IHdoYXQgdGhlc2UgY2FsbGJhY2tzIGRvLgotCi1zdGF0aWMgaGJfcG9zaXRpb25f
dCBTa2lhU2NhbGFyVG9IYXJmYnV6elBvc2l0aW9uKFNrU2NhbGFyIHZhbHVlKQotewotICAgIHJl
dHVybiBTa1NjYWxhclRvRml4ZWQodmFsdWUpOwotfQotCi1zdGF0aWMgdm9pZCBTa2lhR2V0R2x5
cGhXaWR0aEFuZEV4dGVudHMoU2tQYWludCogcGFpbnQsIGhiX2NvZGVwb2ludF90IGNvZGVwb2lu
dCwgaGJfcG9zaXRpb25fdCogd2lkdGgsIGhiX2dseXBoX2V4dGVudHNfdCogZXh0ZW50cykKLXsK
LSAgICBpZiAoY29kZXBvaW50ID4gMHhGRkZGKQotICAgICAgICByZXR1cm47Ci0gICAgcGFpbnQt
PnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOwotCi0gICAg
U2tTY2FsYXIgc2tXaWR0aDsKLSAgICBTa1JlY3Qgc2tCb3VuZHM7Ci0gICAgdWludDE2X3QgZ2x5
cGggPSBjb2RlcG9pbnQ7Ci0KLSAgICBwYWludC0+Z2V0VGV4dFdpZHRocygmZ2x5cGgsIHNpemVv
ZihnbHlwaCksICZza1dpZHRoLCAmc2tCb3VuZHMpOwotICAgIGlmICh3aWR0aCkKLSAgICAgICAg
KndpZHRoID0gU2tpYVNjYWxhclRvSGFyZmJ1enpQb3NpdGlvbihza1dpZHRoKTsKLSAgICBpZiAo
ZXh0ZW50cykgewotICAgICAgICBleHRlbnRzLT54X2JlYXJpbmcgPSBTa2lhU2NhbGFyVG9IYXJm
YnV6elBvc2l0aW9uKHNrQm91bmRzLmZMZWZ0KTsKLSAgICAgICAgLy8gVGhlIGV4dGVudHMgYXJl
IHVudXNlZCBpbiBoYXJmYnV6eiBub3cgc28gd2UncmUgdW5zdXJlIHdoZXRoZXIgYSBuZWdhdGlv
biBpcyBuZWVkZWQgaGVyZS4gUmV2aXNpdCB3aGVuIHdlJ3JlIHN1cmUuCi0gICAgICAgIGV4dGVu
dHMtPnlfYmVhcmluZyA9IFNraWFTY2FsYXJUb0hhcmZidXp6UG9zaXRpb24oc2tCb3VuZHMuZlRv
cCk7Ci0gICAgICAgIGV4dGVudHMtPndpZHRoID0gU2tpYVNjYWxhclRvSGFyZmJ1enpQb3NpdGlv
bihza0JvdW5kcy53aWR0aCgpKTsKLSAgICAgICAgZXh0ZW50cy0+aGVpZ2h0ID0gU2tpYVNjYWxh
clRvSGFyZmJ1enpQb3NpdGlvbihza0JvdW5kcy5oZWlnaHQoKSk7Ci0gICAgfQotfQotCi1zdGF0
aWMgaGJfYm9vbF90IGhhcmZidXp6R2V0R2x5cGgoaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZv
bnREYXRhLCBoYl9jb2RlcG9pbnRfdCB1bmljb2RlLCBoYl9jb2RlcG9pbnRfdCB2YXJpYXRpb25T
ZWxlY3RvciwgaGJfY29kZXBvaW50X3QqIGdseXBoLCB2b2lkKiB1c2VyRGF0YSkKLXsKLSAgICBT
a1BhaW50KiBwYWludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tQYWludCo+KGZvbnREYXRhKTsKLQot
ICAgIHBhaW50LT5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjE2X1RleHRFbmNvZGluZyk7
Ci0gICAgdWludDE2X3QgdGV4dFs0XTsKLSAgICBzaXplX3QgbGVuZ3RoID0gU2tVVEYxNl9Gcm9t
VW5pY2hhcih1bmljb2RlLCB0ZXh0KTsKLSAgICB1aW50MTZfdCBnbHlwaDE2OwotICAgIHBhaW50
LT50ZXh0VG9HbHlwaHModGV4dCwgbGVuZ3RoLCAmZ2x5cGgxNik7Ci0gICAgKmdseXBoID0gZ2x5
cGgxNjsKLSAgICByZXR1cm4gISEqZ2x5cGg7Ci19Ci0KLXN0YXRpYyBoYl9wb3NpdGlvbl90IGhh
cmZidXp6R2V0R2x5cGhIb3Jpem9udGFsQWR2YW5jZShoYl9mb250X3QqIGhiRm9udCwgdm9pZCog
Zm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCB2b2lkKiB1c2VyRGF0YSkKLXsKLSAgICBT
a1BhaW50KiBwYWludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tQYWludCo+KGZvbnREYXRhKTsKLSAg
ICBoYl9wb3NpdGlvbl90IGFkdmFuY2UgPSAwOwotCi0gICAgU2tpYUdldEdseXBoV2lkdGhBbmRF
eHRlbnRzKHBhaW50LCBnbHlwaCwgJmFkdmFuY2UsIDApOwotICAgIHJldHVybiBhZHZhbmNlOwot
fQotCi1zdGF0aWMgaGJfYm9vbF90IGhhcmZidXp6R2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luKGhi
X2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgZ2x5cGgsIGhi
X3Bvc2l0aW9uX3QqIHgsIGhiX3Bvc2l0aW9uX3QqIHksIHZvaWQqIHVzZXJEYXRhKQotewotICAg
IC8vIEp1c3QgcmV0dXJuIHRydWUsIGZvbGxvd2luZyB0aGUgd2F5IHRoYXQgSGFyZmJ1enotRnJl
ZVR5cGUKLSAgICAvLyBpbXBsZW1lbnRhdGlvbiBkb2VzLgotICAgIHJldHVybiB0cnVlOwotfQot
Ci1zdGF0aWMgaGJfYm9vbF90IGhhcmZidXp6R2V0R2x5cGhFeHRlbnRzKGhiX2ZvbnRfdCogaGJG
b250LCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgZ2x5cGgsIGhiX2dseXBoX2V4dGVu
dHNfdCogZXh0ZW50cywgdm9pZCogdXNlckRhdGEpCi17Ci0gICAgU2tQYWludCogcGFpbnQgPSBy
ZWludGVycHJldF9jYXN0PFNrUGFpbnQqPihmb250RGF0YSk7Ci0KLSAgICBTa2lhR2V0R2x5cGhX
aWR0aEFuZEV4dGVudHMocGFpbnQsIGdseXBoLCAwLCBleHRlbnRzKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotc3RhdGljIGhiX2ZvbnRfZnVuY3NfdCogaGFyZmJ1enpTa2lhR2V0Rm9udEZ1bmNz
KCkKLXsKLSAgICBzdGF0aWMgaGJfZm9udF9mdW5jc190KiBoYXJmYnV6elNraWFGb250RnVuY3Mg
PSAwOwotCi0gICAgLy8gV2UgZG9uJ3Qgc2V0IGNhbGxiYWNrIGZ1bmN0aW9ucyB3aGljaCB3ZSBj
YW4ndCBzdXBwb3J0LgotICAgIC8vIEhhcmZidXp6IHdpbGwgdXNlIHRoZSBmYWxsYmFjayBpbXBs
ZW1lbnRhdGlvbiBpZiB0aGV5IGFyZW4ndCBzZXQuCi0gICAgaWYgKCFoYXJmYnV6elNraWFGb250
RnVuY3MpIHsKLSAgICAgICAgaGFyZmJ1enpTa2lhRm9udEZ1bmNzID0gaGJfZm9udF9mdW5jc19j
cmVhdGUoKTsKLSAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfZnVuYyhoYXJmYnV6elNr
aWFGb250RnVuY3MsIGhhcmZidXp6R2V0R2x5cGgsIDAsIDApOwotICAgICAgICBoYl9mb250X2Z1
bmNzX3NldF9nbHlwaF9oX2FkdmFuY2VfZnVuYyhoYXJmYnV6elNraWFGb250RnVuY3MsIGhhcmZi
dXp6R2V0R2x5cGhIb3Jpem9udGFsQWR2YW5jZSwgMCwgMCk7Ci0gICAgICAgIGhiX2ZvbnRfZnVu
Y3Nfc2V0X2dseXBoX2hfb3JpZ2luX2Z1bmMoaGFyZmJ1enpTa2lhRm9udEZ1bmNzLCBoYXJmYnV6
ekdldEdseXBoSG9yaXpvbnRhbE9yaWdpbiwgMCwgMCk7Ci0gICAgICAgIGhiX2ZvbnRfZnVuY3Nf
c2V0X2dseXBoX2V4dGVudHNfZnVuYyhoYXJmYnV6elNraWFGb250RnVuY3MsIGhhcmZidXp6R2V0
R2x5cGhFeHRlbnRzLCAwLCAwKTsKLSAgICAgICAgaGJfZm9udF9mdW5jc19tYWtlX2ltbXV0YWJs
ZShoYXJmYnV6elNraWFGb250RnVuY3MpOwotICAgIH0KLSAgICByZXR1cm4gaGFyZmJ1enpTa2lh
Rm9udEZ1bmNzOwotfQotCi1zdGF0aWMgaGJfYmxvYl90KiBoYXJmYnV6elNraWFHZXRUYWJsZSho
Yl9mYWNlX3QqIGZhY2UsIGhiX3RhZ190IHRhZywgdm9pZCogdXNlckRhdGEpCi17Ci0gICAgRm9u
dFBsYXRmb3JtRGF0YSogZm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+
KHVzZXJEYXRhKTsKLQotICAgIGNvbnN0IHNpemVfdCB0YWJsZVNpemUgPSBTa0ZvbnRIb3N0OjpH
ZXRUYWJsZVNpemUoZm9udC0+dW5pcXVlSUQoKSwgdGFnKTsKLSAgICBpZiAoIXRhYmxlU2l6ZSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjaGFyKiBidWZmZXIgPSByZWludGVycHJldF9jYXN0
PGNoYXIqPihmYXN0TWFsbG9jKHRhYmxlU2l6ZSkpOwotICAgIGlmICghYnVmZmVyKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBzaXplX3QgYWN0dWFsU2l6ZSA9IFNrRm9udEhvc3Q6OkdldFRhYmxl
RGF0YShmb250LT51bmlxdWVJRCgpLCB0YWcsIDAsIHRhYmxlU2l6ZSwgYnVmZmVyKTsKLSAgICBp
ZiAodGFibGVTaXplICE9IGFjdHVhbFNpemUpIHsKLSAgICAgICAgZmFzdEZyZWUoYnVmZmVyKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIGhiX2Jsb2JfY3JlYXRlKGNv
bnN0X2Nhc3Q8Y2hhcio+KGJ1ZmZlciksIHRhYmxlU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgSEJfTUVNT1JZX01PREVfV1JJVEFCTEUsIGJ1ZmZlciwgZmFzdEZyZWUpOwotfQotCi1z
dGF0aWMgdm9pZCBkZXN0cm95UGFpbnQodm9pZCogdXNlckRhdGEpCi17Ci0gICAgU2tQYWludCog
cGFpbnQgPSByZWludGVycHJldF9jYXN0PFNrUGFpbnQqPih1c2VyRGF0YSk7Ci0gICAgZGVsZXRl
IHBhaW50OwotfQotCi1oYl9mYWNlX3QqIEhhcmZCdXp6RmFjZTo6Y3JlYXRlRmFjZSgpCi17Ci0g
ICAgaGJfZmFjZV90KiBmYWNlID0gaGJfZmFjZV9jcmVhdGVfZm9yX3RhYmxlcyhoYXJmYnV6elNr
aWFHZXRUYWJsZSwgbV9wbGF0Zm9ybURhdGEsIDApOwotICAgIEFTU0VSVChmYWNlKTsKLSAgICBy
ZXR1cm4gZmFjZTsKLX0KLQotaGJfZm9udF90KiBIYXJmQnV6ekZhY2U6OmNyZWF0ZUZvbnQoKQot
ewotICAgIGhiX2ZvbnRfdCogZm9udCA9IGhiX2ZvbnRfY3JlYXRlKG1fZmFjZSk7Ci0gICAgU2tQ
YWludCogcGFpbnQgPSBuZXcgU2tQYWludDsKLSAgICBtX3BsYXRmb3JtRGF0YS0+c2V0dXBQYWlu
dChwYWludCk7Ci0gICAgaGJfZm9udF9zZXRfZnVuY3MoZm9udCwgaGFyZmJ1enpTa2lhR2V0Rm9u
dEZ1bmNzKCksIHBhaW50LCBkZXN0cm95UGFpbnQpOwotICAgIGZsb2F0IHNpemUgPSBtX3BsYXRm
b3JtRGF0YS0+c2l6ZSgpOwotICAgIGlmIChmbG9vcmYoc2l6ZSkgPT0gc2l6ZSkKLSAgICAgICAg
aGJfZm9udF9zZXRfcHBlbShmb250LCBzaXplLCBzaXplKTsKLSAgICBpbnQgc2NhbGUgPSBTa2lh
U2NhbGFyVG9IYXJmYnV6elBvc2l0aW9uKHNpemUpOwotICAgIGhiX2ZvbnRfc2V0X3NjYWxlKGZv
bnQsIHNjYWxlLCBzY2FsZSk7Ci0gICAgaGJfZm9udF9tYWtlX2ltbXV0YWJsZShmb250KTsKLSAg
ICByZXR1cm4gZm9udDsKLX0KLQotR2x5cGhCdWZmZXJBZHZhbmNlIEhhcmZCdXp6U2hhcGVyOjpj
cmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2UoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKLXsKLSAg
ICByZXR1cm4gR2x5cGhCdWZmZXJBZHZhbmNlKHdpZHRoLCBoZWlnaHQpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2RkMDQ4YjNiNDNmZjU5Mzg4ZWFmNGU3MjEwZWUyY2NiZDU1NDIyMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6
TkdGYWNlLmNwcApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkhhcmZCdXp6TkdGYWNlLmgiCisKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisjaW5j
bHVkZSAiaGIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKy8vIFRob3VnaCB3ZSBoYXZlIEZvbnRDYWNoZSBjbGFzcywgd2hpY2ggcHJvdmlkZXMg
dGhlIGNhY2hlIG1lY2hhbmlzbSBmb3IKKy8vIFdlYktpdCdzIGZvbnQgb2JqZWN0cywgd2UgYWxz
byBuZWVkIGFkZGl0aW9uYWwgY2FjaGluZyBsYXllciBmb3IgSGFyZkJ1enoKKy8vIHRvIHJlZHVj
ZSB0aGUgbWVtb3J5IGNvbnN1bXB0aW9uIGJlY2F1c2UgaGJfZmFjZV90IHNob3VsZCBiZSBhc3Nv
Y2lhdGVkIHdpdGgKKy8vIHVuZGVybGluZyBmb250IGRhdGEgKGUuZy4gQ1RGb250UmVmLCBGVEZh
Y2UpLgordHlwZWRlZiBwYWlyPGhiX2ZhY2VfdCosIHVuc2lnbmVkPiBGYWNlQ2FjaGVFbnRyeTsK
K3R5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgRmFjZUNhY2hlRW50cnksIFdURjo6SW50SGFzaDx1
aW50NjRfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+ID4g
SGFyZkJ1enpOR0ZhY2VDYWNoZTsKKworc3RhdGljIEhhcmZCdXp6TkdGYWNlQ2FjaGUqIGhhcmZi
dXp6RmFjZUNhY2hlKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhcmZCdXp6TkdGYWNl
Q2FjaGUsIHNfaGFyZmJ1enpGYWNlQ2FjaGUsICgpKTsKKyAgICByZXR1cm4gJnNfaGFyZmJ1enpG
YWNlQ2FjaGU7Cit9CisKK0hhcmZCdXp6TkdGYWNlOjpIYXJmQnV6ek5HRmFjZShGb250UGxhdGZv
cm1EYXRhKiBwbGF0Zm9ybURhdGEsIHVpbnQ2NF90IHVuaXF1ZUlEKQorICAgIDogbV9wbGF0Zm9y
bURhdGEocGxhdGZvcm1EYXRhKQorICAgICwgbV91bmlxdWVJRCh1bmlxdWVJRCkKK3sKKyAgICBI
YXJmQnV6ek5HRmFjZUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBoYXJmYnV6ekZhY2VDYWNoZSgp
LT5maW5kKG1fdW5pcXVlSUQpOworICAgIGlmIChyZXN1bHQgPT0gaGFyZmJ1enpGYWNlQ2FjaGUo
KS0+ZW5kKCkpIHsKKyAgICAgICAgbV9mYWNlID0gY3JlYXRlRmFjZSgpOworICAgICAgICBBU1NF
UlQobV9mYWNlKTsKKyAgICAgICAgaGFyZmJ1enpGYWNlQ2FjaGUoKS0+c2V0KG1fdW5pcXVlSUQs
IEZhY2VDYWNoZUVudHJ5KG1fZmFjZSwgMSkpOworICAgIH0gZWxzZSB7CisgICAgICAgICsrKHJl
c3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCk7CisgICAgICAgIG1fZmFjZSA9IHJlc3VsdC5nZXQo
KS0+c2Vjb25kLmZpcnN0OworICAgIH0KK30KKworSGFyZkJ1enpOR0ZhY2U6On5IYXJmQnV6ek5H
RmFjZSgpCit7CisgICAgSGFyZkJ1enpOR0ZhY2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gaGFy
ZmJ1enpGYWNlQ2FjaGUoKS0+ZmluZChtX3VuaXF1ZUlEKTsKKyAgICBBU1NFUlQocmVzdWx0ICE9
IGhhcmZidXp6RmFjZUNhY2hlKCktPmVuZCgpKTsKKyAgICBBU1NFUlQocmVzdWx0LmdldCgpLT5z
ZWNvbmQuc2Vjb25kID4gMCk7CisgICAgLS0ocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKTsK
KyAgICBpZiAoIShyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpKSB7CisgICAgICAgIGhiX2Zh
Y2VfZGVzdHJveShyZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdCk7CisgICAgICAgIGhhcmZidXp6
RmFjZUNhY2hlKCktPnJlbW92ZShtX3VuaXF1ZUlEKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzYzYzNWFm
MDk3MmI3YWQ2ZDJiNzUwNjJkOTFjMWM3MDdhMjJjMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5o
CkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEhhcmZCdXp6TkdGYWNlX2gKKyNkZWZpbmUgSGFyZkJ1
enpOR0ZhY2VfaAorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworc3RydWN0IF9oYl9mYWNl
X3Q7Cit0eXBlZGVmIF9oYl9mYWNlX3QgaGJfZmFjZV90Oworc3RydWN0IF9oYl9mb250X3Q7Cit0
eXBlZGVmIF9oYl9mb250X3QgaGJfZm9udF90OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEZvbnRQbGF0Zm9ybURhdGE7CisKK2NsYXNzIEhhcmZCdXp6TkdGYWNlIDogcHVibGljIFJl
ZkNvdW50ZWQ8SGFyZkJ1enpOR0ZhY2U+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxIYXJmQnV6ek5HRmFjZT4gY3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSwg
dWludDY0X3QgdW5pcXVlSUQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhh
cmZCdXp6TkdGYWNlKHBsYXRmb3JtRGF0YSwgdW5pcXVlSUQpKTsKKyAgICB9CisgICAgfkhhcmZC
dXp6TkdGYWNlKCk7CisKKyAgICBoYl9mb250X3QqIGNyZWF0ZUZvbnQoKTsKKworcHJpdmF0ZToK
KyAgICBIYXJmQnV6ek5HRmFjZShGb250UGxhdGZvcm1EYXRhKiwgdWludDY0X3QpOworCisgICAg
aGJfZmFjZV90KiBjcmVhdGVGYWNlKCk7CisKKyAgICBGb250UGxhdGZvcm1EYXRhKiBtX3BsYXRm
b3JtRGF0YTsKKyAgICB1aW50NjRfdCBtX3VuaXF1ZUlEOworICAgIGhiX2ZhY2VfdCogbV9mYWNl
OworfTsKKworfQorCisjZW5kaWYgLy8gSGFyZkJ1enpOR0ZhY2VfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VD
b3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9u
Zy9IYXJmQnV6ek5HRmFjZUNvcmVUZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmJhYmE3M2Y5MDdkZjM5
ODY1NzUxN2U5OGMzOGVlMmYxODkxYjk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VDb3JlVGV4dC5j
cHAKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGFyZkJ1
enpOR0ZhY2UuaCIKKworI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKyNpbmNsdWRlICJI
YXJmQnV6elNoYXBlci5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisKKyNpbmNsdWRl
ICJoYi5oIgorI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNl
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBoYl9wb3NpdGlvbl90IGZsb2F0
VG9IYXJmQnV6elBvc2l0aW9uKENHRmxvYXQgdmFsdWUpCit7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGhiX3Bvc2l0aW9uX3Q+KHZhbHVlICogKDEgPDwgMTYpKTsKK30KKworc3RhdGljIGhiX2Jv
b2xfdCBnZXRHbHlwaChoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVw
b2ludF90IHVuaWNvZGUsIGhiX2NvZGVwb2ludF90IHZhcmlhdGlvblNlbGVjdG9yLCBoYl9jb2Rl
cG9pbnRfdCogZ2x5cGgsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIENURm9udFJlZiBjdEZvbnQg
PSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihmb250RGF0YSktPmN0Rm9udCgp
OworICAgIFVuaUNoYXIgY2hhcmFjdGVyc1s0XTsKKyAgICBDR0dseXBoIGNnR2x5cGhzWzRdOwor
ICAgIHNpemVfdCBsZW5ndGggPSAwOworICAgIFUxNl9BUFBFTkRfVU5TQUZFKGNoYXJhY3RlcnMs
IGxlbmd0aCwgdW5pY29kZSk7CisgICAgaWYgKCFDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJz
KGN0Rm9udCwgY2hhcmFjdGVycywgY2dHbHlwaHMsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAqZ2x5cGggPSBjZ0dseXBoc1swXTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
c3RhdGljIGhiX3Bvc2l0aW9uX3QgZ2V0R2x5cGhIb3Jpem9udGFsQWR2YW5jZShoYl9mb250X3Qq
IGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCB2b2lkKiB1c2Vy
RGF0YSkKK3sKKyAgICBDVEZvbnRSZWYgY3RGb250ID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxh
dGZvcm1EYXRhKj4oZm9udERhdGEpLT5jdEZvbnQoKTsKKyAgICBDR0dseXBoIGNnR2x5cGggPSBn
bHlwaDsKKyAgICBDR0Zsb2F0IGFkdmFuY2UgPSBDVEZvbnRHZXRBZHZhbmNlc0ZvckdseXBocyhj
dEZvbnQsIGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24sICZjZ0dseXBoLCAwLCAxKTsKKyAg
ICByZXR1cm4gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oYWR2YW5jZSk7Cit9CisKK3N0YXRpYyBo
Yl9ib29sX3QgZ2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luKGhiX2ZvbnRfdCogaGJGb250LCB2b2lk
KiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgZ2x5cGgsIGhiX3Bvc2l0aW9uX3QqIHgsIGhiX3Bv
c2l0aW9uX3QqIHksIHZvaWQqIHVzZXJEYXRhKQoreworICAgIHJldHVybiB0cnVlOworfQorCitz
dGF0aWMgaGJfYm9vbF90IGdldEdseXBoRXh0ZW50cyhoYl9mb250X3QqIGhiRm9udCwgdm9pZCog
Zm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4dGVu
dHMsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIENURm9udFJlZiBjdEZvbnQgPSByZWludGVycHJl
dF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihmb250RGF0YSktPmN0Rm9udCgpOworICAgIENHUmVj
dCBjZ1JlY3Q7CisgICAgQ0dHbHlwaCBjZ0dseXBoID0gZ2x5cGg7CisgICAgaWYgKENURm9udEdl
dEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMoY3RGb250LCBrQ1RGb250RGVmYXVsdE9yaWVudGF0aW9u
LCAmY2dHbHlwaCwgJmNnUmVjdCwgMSkgPT0gQ0dSZWN0TnVsbCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGV4dGVudHMtPnhfYmVhcmluZyA9IGZsb2F0VG9IYXJmQnV6elBvc2l0aW9uKGNn
UmVjdC5vcmlnaW4ueCk7CisgICAgZXh0ZW50cy0+eV9iZWFyaW5nID0gLWZsb2F0VG9IYXJmQnV6
elBvc2l0aW9uKGNnUmVjdC5vcmlnaW4ueSk7CisgICAgZXh0ZW50cy0+d2lkdGggPSBmbG9hdFRv
SGFyZkJ1enpQb3NpdGlvbihjZ1JlY3Quc2l6ZS53aWR0aCk7CisgICAgZXh0ZW50cy0+aGVpZ2h0
ID0gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oY2dSZWN0LnNpemUuaGVpZ2h0KTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworc3RhdGljIGhiX2ZvbnRfZnVuY3NfdCogaGFyZmJ1enpDb3JlVGV4dEdl
dEZvbnRGdW5jcygpCit7CisgICAgc3RhdGljIGhiX2ZvbnRfZnVuY3NfdCogaGFyZmJ1enpDb3Jl
VGV4dEZvbnRGdW5jcyA9IDA7CisKKyAgICBpZiAoIWhhcmZidXp6Q29yZVRleHRGb250RnVuY3Mp
IHsKKyAgICAgICAgaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcyA9IGhiX2ZvbnRfZnVuY3NfY3Jl
YXRlKCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2Z1bmMoaGFyZmJ1enpDb3Jl
VGV4dEZvbnRGdW5jcywgZ2V0R2x5cGgsIDAsIDApOworICAgICAgICBoYl9mb250X2Z1bmNzX3Nl
dF9nbHlwaF9oX2FkdmFuY2VfZnVuYyhoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzLCBnZXRHbHlw
aEhvcml6b250YWxBZHZhbmNlLCAwLCAwKTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5
cGhfaF9vcmlnaW5fZnVuYyhoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzLCBnZXRHbHlwaEhvcml6
b250YWxPcmlnaW4sIDAsIDApOworICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9leHRl
bnRzX2Z1bmMoaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcywgZ2V0R2x5cGhFeHRlbnRzLCAwLCAw
KTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19tYWtlX2ltbXV0YWJsZShoYXJmYnV6ekNvcmVUZXh0
Rm9udEZ1bmNzKTsKKyAgICB9CisgICAgcmV0dXJuIGhhcmZidXp6Q29yZVRleHRGb250RnVuY3M7
Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VUYWJsZURhdGEodm9pZCogdXNlckRhdGEpCit7Cisg
ICAgQ0ZEYXRhUmVmIGNmRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEYXRhUmVmPih1c2VyRGF0
YSk7CisgICAgQ0ZSZWxlYXNlKGNmRGF0YSk7Cit9CisKK3N0YXRpYyBoYl9ibG9iX3QqIGhhcmZi
dXp6Q29yZVRleHRHZXRUYWJsZShoYl9mYWNlX3QqIGZhY2UsIGhiX3RhZ190IHRhZywgdm9pZCog
dXNlckRhdGEpCit7CisgICAgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhID0gcmVpbnRl
cnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4odXNlckRhdGEpOworICAgIC8vIEl0IHNlZW1z
IHRoYXQgQ1RGb250Q29weVRhYmxlIG9mIE1hY09TWDEwLjUgc2RrIGRvZXNuJ3Qgd29yayBmb3IK
KyAgICAvLyBPcGVuVHlwZSBsYXlvdXQgdGFibGVzKEdERUYsIEdTVUIsIEdQT1MpLiBVc2UgQ0dG
b250Q29weVRhYmxlRm9yVGFnIGluc3RlYWQuCisgICAgQ0dGb250UmVmIGNnRm9udCA9IHBsYXRm
b3JtRGF0YS0+Y2dGb250KCk7CisgICAgQ0ZEYXRhUmVmIGNmRGF0YSA9IENHRm9udENvcHlUYWJs
ZUZvclRhZyhjZ0ZvbnQsIHRhZyk7CisgICAgaWYgKCFjZkRhdGEpCisgICAgICAgIHJldHVybiAw
OworCisgICAgY29uc3QgY2hhciogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSk7CisgICAgY29uc3Qgc2l6ZV90IGxlbmd0aCA9IENG
RGF0YUdldExlbmd0aChjZkRhdGEpOworICAgIGlmICghZGF0YSB8fCAhbGVuZ3RoKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gaGJfYmxvYl9jcmVhdGUoZGF0YSwgbGVuZ3RoLCBIQl9N
RU1PUllfTU9ERV9SRUFET05MWSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY29uc3RfY2FzdDxf
X0NGRGF0YSo+KGNmRGF0YSkpLCByZWxlYXNlVGFibGVEYXRhKTsKK30KKworaGJfZmFjZV90KiBI
YXJmQnV6ek5HRmFjZTo6Y3JlYXRlRmFjZSgpCit7CisgICAgaGJfZmFjZV90KiBmYWNlID0gaGJf
ZmFjZV9jcmVhdGVfZm9yX3RhYmxlcyhoYXJmYnV6ekNvcmVUZXh0R2V0VGFibGUsIG1fcGxhdGZv
cm1EYXRhLCAwKTsKKyAgICBBU1NFUlQoZmFjZSk7CisgICAgcmV0dXJuIGZhY2U7Cit9CisKK2hi
X2ZvbnRfdCogSGFyZkJ1enpOR0ZhY2U6OmNyZWF0ZUZvbnQoKQoreworICAgIGhiX2ZvbnRfdCog
Zm9udCA9IGhiX2ZvbnRfY3JlYXRlKG1fZmFjZSk7CisgICAgaGJfZm9udF9zZXRfZnVuY3MoZm9u
dCwgaGFyZmJ1enpDb3JlVGV4dEdldEZvbnRGdW5jcygpLCBtX3BsYXRmb3JtRGF0YSwgMCk7Cisg
ICAgY29uc3QgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLT5tX3NpemU7CisgICAgaGJfZm9u
dF9zZXRfcHBlbShmb250LCBzaXplLCBzaXplKTsKKyAgICBjb25zdCBpbnQgc2NhbGUgPSAoMSA8
PCAxNikgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemUpOworICAgIGhiX2ZvbnRfc2V0X3NjYWxlKGZv
bnQsIHNjYWxlLCBzY2FsZSk7CisgICAgaGJfZm9udF9tYWtlX2ltbXV0YWJsZShmb250KTsKKyAg
ICByZXR1cm4gZm9udDsKK30KKworR2x5cGhCdWZmZXJBZHZhbmNlIEhhcmZCdXp6U2hhcGVyOjpj
cmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2UoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKK3sKKyAg
ICByZXR1cm4gQ0dTaXplTWFrZSh3aWR0aCwgaGVpZ2h0KTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlU2tpYS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjliYTdkMzYyMjYyMmNjZWY2MDllYWE1NjM5MTdkMGE0YjJiOTE3ZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6
TkdGYWNlU2tpYS5jcHAKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSGFyZkJ1enpOR0ZhY2UuaCIKKworI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIK
KyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgiCisj
aW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJTa0ZvbnRIb3N0LmgiCisjaW5j
bHVkZSAiU2tQYWludC5oIgorI2luY2x1ZGUgIlNrUGF0aC5oIgorI2luY2x1ZGUgIlNrUG9pbnQu
aCIKKyNpbmNsdWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJTa1V0aWxzLmgiCisKKyNpbmNsdWRl
ICJoYi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIE91ciBpbXBsZW1lbnRhdGlvbiBv
ZiB0aGUgY2FsbGJhY2tzIHdoaWNoIEhhcmZidXp6IHJlcXVpcmVzIGJ5IHVzaW5nIFNraWEKKy8v
IGNhbGxzLiBTZWUgdGhlIEhhcmZidXp6IHNvdXJjZSBmb3IgcmVmZXJlbmNlcyBhYm91dCB3aGF0
IHRoZXNlIGNhbGxiYWNrcyBkby4KKworc3RhdGljIGhiX3Bvc2l0aW9uX3QgU2tpYVNjYWxhclRv
SGFyZmJ1enpQb3NpdGlvbihTa1NjYWxhciB2YWx1ZSkKK3sKKyAgICByZXR1cm4gU2tTY2FsYXJU
b0ZpeGVkKHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgU2tpYUdldEdseXBoV2lkdGhBbmRFeHRl
bnRzKFNrUGFpbnQqIHBhaW50LCBoYl9jb2RlcG9pbnRfdCBjb2RlcG9pbnQsIGhiX3Bvc2l0aW9u
X3QqIHdpZHRoLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4dGVudHMpCit7CisgICAgaWYgKGNvZGVw
b2ludCA+IDB4RkZGRikKKyAgICAgICAgcmV0dXJuOworICAgIHBhaW50LT5zZXRUZXh0RW5jb2Rp
bmcoU2tQYWludDo6a0dseXBoSURfVGV4dEVuY29kaW5nKTsKKworICAgIFNrU2NhbGFyIHNrV2lk
dGg7CisgICAgU2tSZWN0IHNrQm91bmRzOworICAgIHVpbnQxNl90IGdseXBoID0gY29kZXBvaW50
OworCisgICAgcGFpbnQtPmdldFRleHRXaWR0aHMoJmdseXBoLCBzaXplb2YoZ2x5cGgpLCAmc2tX
aWR0aCwgJnNrQm91bmRzKTsKKyAgICBpZiAod2lkdGgpCisgICAgICAgICp3aWR0aCA9IFNraWFT
Y2FsYXJUb0hhcmZidXp6UG9zaXRpb24oc2tXaWR0aCk7CisgICAgaWYgKGV4dGVudHMpIHsKKyAg
ICAgICAgZXh0ZW50cy0+eF9iZWFyaW5nID0gU2tpYVNjYWxhclRvSGFyZmJ1enpQb3NpdGlvbihz
a0JvdW5kcy5mTGVmdCk7CisgICAgICAgIC8vIFRoZSBleHRlbnRzIGFyZSB1bnVzZWQgaW4gaGFy
ZmJ1enogbm93IHNvIHdlJ3JlIHVuc3VyZSB3aGV0aGVyIGEgbmVnYXRpb24gaXMgbmVlZGVkIGhl
cmUuIFJldmlzaXQgd2hlbiB3ZSdyZSBzdXJlLgorICAgICAgICBleHRlbnRzLT55X2JlYXJpbmcg
PSBTa2lhU2NhbGFyVG9IYXJmYnV6elBvc2l0aW9uKHNrQm91bmRzLmZUb3ApOworICAgICAgICBl
eHRlbnRzLT53aWR0aCA9IFNraWFTY2FsYXJUb0hhcmZidXp6UG9zaXRpb24oc2tCb3VuZHMud2lk
dGgoKSk7CisgICAgICAgIGV4dGVudHMtPmhlaWdodCA9IFNraWFTY2FsYXJUb0hhcmZidXp6UG9z
aXRpb24oc2tCb3VuZHMuaGVpZ2h0KCkpOworICAgIH0KK30KKworc3RhdGljIGhiX2Jvb2xfdCBo
YXJmYnV6ekdldEdseXBoKGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJfY29k
ZXBvaW50X3QgdW5pY29kZSwgaGJfY29kZXBvaW50X3QgdmFyaWF0aW9uU2VsZWN0b3IsIGhiX2Nv
ZGVwb2ludF90KiBnbHlwaCwgdm9pZCogdXNlckRhdGEpCit7CisgICAgU2tQYWludCogcGFpbnQg
PSByZWludGVycHJldF9jYXN0PFNrUGFpbnQqPihmb250RGF0YSk7CisKKyAgICBwYWludC0+c2V0
VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtVVEYxNl9UZXh0RW5jb2RpbmcpOworICAgIHVpbnQxNl90
IHRleHRbNF07CisgICAgc2l6ZV90IGxlbmd0aCA9IFNrVVRGMTZfRnJvbVVuaWNoYXIodW5pY29k
ZSwgdGV4dCk7CisgICAgdWludDE2X3QgZ2x5cGgxNjsKKyAgICBwYWludC0+dGV4dFRvR2x5cGhz
KHRleHQsIGxlbmd0aCwgJmdseXBoMTYpOworICAgICpnbHlwaCA9IGdseXBoMTY7CisgICAgcmV0
dXJuICEhKmdseXBoOworfQorCitzdGF0aWMgaGJfcG9zaXRpb25fdCBoYXJmYnV6ekdldEdseXBo
SG9yaXpvbnRhbEFkdmFuY2UoaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBoYl9j
b2RlcG9pbnRfdCBnbHlwaCwgdm9pZCogdXNlckRhdGEpCit7CisgICAgU2tQYWludCogcGFpbnQg
PSByZWludGVycHJldF9jYXN0PFNrUGFpbnQqPihmb250RGF0YSk7CisgICAgaGJfcG9zaXRpb25f
dCBhZHZhbmNlID0gMDsKKworICAgIFNraWFHZXRHbHlwaFdpZHRoQW5kRXh0ZW50cyhwYWludCwg
Z2x5cGgsICZhZHZhbmNlLCAwKTsKKyAgICByZXR1cm4gYWR2YW5jZTsKK30KKworc3RhdGljIGhi
X2Jvb2xfdCBoYXJmYnV6ekdldEdseXBoSG9yaXpvbnRhbE9yaWdpbihoYl9mb250X3QqIGhiRm9u
dCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCBoYl9wb3NpdGlvbl90KiB4
LCBoYl9wb3NpdGlvbl90KiB5LCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICAvLyBKdXN0IHJldHVy
biB0cnVlLCBmb2xsb3dpbmcgdGhlIHdheSB0aGF0IEhhcmZidXp6LUZyZWVUeXBlCisgICAgLy8g
aW1wbGVtZW50YXRpb24gZG9lcy4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGhiX2Jv
b2xfdCBoYXJmYnV6ekdldEdseXBoRXh0ZW50cyhoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9u
dERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4dGVudHMs
IHZvaWQqIHVzZXJEYXRhKQoreworICAgIFNrUGFpbnQqIHBhaW50ID0gcmVpbnRlcnByZXRfY2Fz
dDxTa1BhaW50Kj4oZm9udERhdGEpOworCisgICAgU2tpYUdldEdseXBoV2lkdGhBbmRFeHRlbnRz
KHBhaW50LCBnbHlwaCwgMCwgZXh0ZW50cyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp
YyBoYl9mb250X2Z1bmNzX3QqIGhhcmZidXp6U2tpYUdldEZvbnRGdW5jcygpCit7CisgICAgc3Rh
dGljIGhiX2ZvbnRfZnVuY3NfdCogaGFyZmJ1enpTa2lhRm9udEZ1bmNzID0gMDsKKworICAgIC8v
IFdlIGRvbid0IHNldCBjYWxsYmFjayBmdW5jdGlvbnMgd2hpY2ggd2UgY2FuJ3Qgc3VwcG9ydC4K
KyAgICAvLyBIYXJmYnV6eiB3aWxsIHVzZSB0aGUgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gaWYg
dGhleSBhcmVuJ3Qgc2V0LgorICAgIGlmICghaGFyZmJ1enpTa2lhRm9udEZ1bmNzKSB7CisgICAg
ICAgIGhhcmZidXp6U2tpYUZvbnRGdW5jcyA9IGhiX2ZvbnRfZnVuY3NfY3JlYXRlKCk7CisgICAg
ICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2Z1bmMoaGFyZmJ1enpTa2lhRm9udEZ1bmNzLCBo
YXJmYnV6ekdldEdseXBoLCAwLCAwKTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhf
aF9hZHZhbmNlX2Z1bmMoaGFyZmJ1enpTa2lhRm9udEZ1bmNzLCBoYXJmYnV6ekdldEdseXBoSG9y
aXpvbnRhbEFkdmFuY2UsIDAsIDApOworICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9o
X29yaWdpbl9mdW5jKGhhcmZidXp6U2tpYUZvbnRGdW5jcywgaGFyZmJ1enpHZXRHbHlwaEhvcml6
b250YWxPcmlnaW4sIDAsIDApOworICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9leHRl
bnRzX2Z1bmMoaGFyZmJ1enpTa2lhRm9udEZ1bmNzLCBoYXJmYnV6ekdldEdseXBoRXh0ZW50cywg
MCwgMCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3NfbWFrZV9pbW11dGFibGUoaGFyZmJ1enpTa2lh
Rm9udEZ1bmNzKTsKKyAgICB9CisgICAgcmV0dXJuIGhhcmZidXp6U2tpYUZvbnRGdW5jczsKK30K
Kworc3RhdGljIGhiX2Jsb2JfdCogaGFyZmJ1enpTa2lhR2V0VGFibGUoaGJfZmFjZV90KiBmYWNl
LCBoYl90YWdfdCB0YWcsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGEq
IGZvbnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPih1c2VyRGF0YSk7CisK
KyAgICBjb25zdCBzaXplX3QgdGFibGVTaXplID0gU2tGb250SG9zdDo6R2V0VGFibGVTaXplKGZv
bnQtPnVuaXF1ZUlEKCksIHRhZyk7CisgICAgaWYgKCF0YWJsZVNpemUpCisgICAgICAgIHJldHVy
biAwOworCisgICAgY2hhciogYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZmFzdE1h
bGxvYyh0YWJsZVNpemUpKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgc2l6ZV90IGFjdHVhbFNpemUgPSBTa0ZvbnRIb3N0OjpHZXRUYWJsZURhdGEoZm9udC0+dW5p
cXVlSUQoKSwgdGFnLCAwLCB0YWJsZVNpemUsIGJ1ZmZlcik7CisgICAgaWYgKHRhYmxlU2l6ZSAh
PSBhY3R1YWxTaXplKSB7CisgICAgICAgIGZhc3RGcmVlKGJ1ZmZlcik7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIHJldHVybiBoYl9ibG9iX2NyZWF0ZShjb25zdF9jYXN0PGNoYXIq
PihidWZmZXIpLCB0YWJsZVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhCX01FTU9S
WV9NT0RFX1dSSVRBQkxFLCBidWZmZXIsIGZhc3RGcmVlKTsKK30KKworc3RhdGljIHZvaWQgZGVz
dHJveVBhaW50KHZvaWQqIHVzZXJEYXRhKQoreworICAgIFNrUGFpbnQqIHBhaW50ID0gcmVpbnRl
cnByZXRfY2FzdDxTa1BhaW50Kj4odXNlckRhdGEpOworICAgIGRlbGV0ZSBwYWludDsKK30KKwor
aGJfZmFjZV90KiBIYXJmQnV6ek5HRmFjZTo6Y3JlYXRlRmFjZSgpCit7CisgICAgaGJfZmFjZV90
KiBmYWNlID0gaGJfZmFjZV9jcmVhdGVfZm9yX3RhYmxlcyhoYXJmYnV6elNraWFHZXRUYWJsZSwg
bV9wbGF0Zm9ybURhdGEsIDApOworICAgIEFTU0VSVChmYWNlKTsKKyAgICByZXR1cm4gZmFjZTsK
K30KKworaGJfZm9udF90KiBIYXJmQnV6ek5HRmFjZTo6Y3JlYXRlRm9udCgpCit7CisgICAgaGJf
Zm9udF90KiBmb250ID0gaGJfZm9udF9jcmVhdGUobV9mYWNlKTsKKyAgICBTa1BhaW50KiBwYWlu
dCA9IG5ldyBTa1BhaW50OworICAgIG1fcGxhdGZvcm1EYXRhLT5zZXR1cFBhaW50KHBhaW50KTsK
KyAgICBoYl9mb250X3NldF9mdW5jcyhmb250LCBoYXJmYnV6elNraWFHZXRGb250RnVuY3MoKSwg
cGFpbnQsIGRlc3Ryb3lQYWludCk7CisgICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLT5z
aXplKCk7CisgICAgaWYgKGZsb29yZihzaXplKSA9PSBzaXplKQorICAgICAgICBoYl9mb250X3Nl
dF9wcGVtKGZvbnQsIHNpemUsIHNpemUpOworICAgIGludCBzY2FsZSA9IFNraWFTY2FsYXJUb0hh
cmZidXp6UG9zaXRpb24oc2l6ZSk7CisgICAgaGJfZm9udF9zZXRfc2NhbGUoZm9udCwgc2NhbGUs
IHNjYWxlKTsKKyAgICBoYl9mb250X21ha2VfaW1tdXRhYmxlKGZvbnQpOworICAgIHJldHVybiBm
b250OworfQorCitHbHlwaEJ1ZmZlckFkdmFuY2UgSGFyZkJ1enpTaGFwZXI6OmNyZWF0ZUdseXBo
QnVmZmVyQWR2YW5jZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAgIHJldHVybiBH
bHlwaEJ1ZmZlckFkdmFuY2Uod2lkdGgsIGhlaWdodCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcAppbmRleCA2OGQxOTZkZjFlNjYxN2M2
OTQ2MTgwZTlmNDZiMWY2MTE0MjQ5MjY3Li5lYWYzMDk5ZmQyOGYzNzhjYmVhZTRiNGY2ZTEyNGQ4
ODc0NzUxNDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuY3BwCkBAIC0zMiw3ICszMiw3
IEBACiAjaW5jbHVkZSAiSGFyZkJ1enpTaGFwZXIuaCIKIAogI2luY2x1ZGUgIkZvbnQuaCIKLSNp
bmNsdWRlICJIYXJmQnV6ekZhY2UuaCIKKyNpbmNsdWRlICJIYXJmQnV6ek5HRmFjZS5oIgogI2lu
Y2x1ZGUgIlN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHRS
dW4uaCIKICNpbmNsdWRlICJoYi1pY3UuaCIKQEAgLTI3Miw3ICsyNzIsNyBAQCBib29sIEhhcmZC
dXp6U2hhcGVyOjpzaGFwZUhhcmZCdXp6UnVucyhHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCiAg
ICAgICAgICAgICBoYl9idWZmZXJfYWRkX3V0ZjE2KGhhcmZidXp6QnVmZmVyLmdldCgpLCBtX25v
cm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBjdXJyZW50UnVuLT5zdGFydEluZGV4KCksIGN1cnJlbnRS
dW4tPm51bUNoYXJhY3RlcnMoKSwgMCwgY3VycmVudFJ1bi0+bnVtQ2hhcmFjdGVycygpKTsKIAog
ICAgICAgICBGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEgPSBjb25zdF9jYXN0PEZvbnRQ
bGF0Zm9ybURhdGEqPigmY3VycmVudEZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKSk7Ci0gICAgICAg
IEhhcmZCdXp6RmFjZSogZmFjZSA9IHBsYXRmb3JtRGF0YS0+aGFyZmJ1enpGYWNlKCk7CisgICAg
ICAgIEhhcmZCdXp6TkdGYWNlKiBmYWNlID0gcGxhdGZvcm1EYXRhLT5oYXJmYnV6ekZhY2UoKTsK
ICAgICAgICAgaWYgKCFmYWNlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBI
YXJmQnV6elNjb3BlZFB0cjxoYl9mb250X3Q+IGhhcmZidXp6Rm9udChmYWNlLT5jcmVhdGVGb250
KCksIGhiX2ZvbnRfZGVzdHJveSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>