<?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>190348</bug_id>
          
          <creation_ts>2018-10-08 06:43:39 -0700</creation_ts>
          <short_desc>Move FontCascadeDescription to a file of its own</short_desc>
          <delta_ts>2018-10-08 09:10:35 -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>Text</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1467030</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-10-08 06:43:39 -0700</bug_when>
    <thetext>From FontDescription</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467031</commentid>
    <comment_count>1</comment_count>
      <attachid>351773</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-10-08 06:51:31 -0700</bug_when>
    <thetext>Created attachment 351773
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467032</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-10-08 06:53:57 -0700</bug_when>
    <thetext>Attachment 351773 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/FontCascadeDescription.h:140:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/FontCascadeDescription.h:141:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/FontCascadeDescription.h:143:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/FontCascadeDescription.h:146:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/FontCascadeDescription.h:147:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/FontCascadeDescription.h:148:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/FontCascadeDescription.h:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 7 in 10 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>1467036</commentid>
    <comment_count>3</comment_count>
      <attachid>351775</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-10-08 07:30:40 -0700</bug_when>
    <thetext>Created attachment 351775
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467037</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-10-08 07:32:18 -0700</bug_when>
    <thetext>Attachment 351775 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/FontCascadeDescription.h:145:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/FontCascadeDescription.h:147:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 2 in 10 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>1467038</commentid>
    <comment_count>5</comment_count>
      <attachid>351776</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-10-08 07:34:38 -0700</bug_when>
    <thetext>Created attachment 351776
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467039</commentid>
    <comment_count>6</comment_count>
      <attachid>351776</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-10-08 07:53:07 -0700</bug_when>
    <thetext>Comment on attachment 351776
patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467051</commentid>
    <comment_count>7</comment_count>
      <attachid>351776</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-08 09:09:36 -0700</bug_when>
    <thetext>Comment on attachment 351776
patch

Clearing flags on attachment: 351776

Committed r236914: &lt;https://trac.webkit.org/changeset/236914&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467052</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-08 09:09:38 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467053</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-10-08 09:10:35 -0700</bug_when>
    <thetext>&lt;rdar://problem/45089920&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351773</attachid>
            <date>2018-10-08 06:51:31 -0700</date>
            <delta_ts>2018-10-08 07:30:40 -0700</delta_ts>
            <desc>patch</desc>
            <filename>fontcascadedescription-file.patch</filename>
            <type>text/plain</type>
            <size>77536</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNjkxMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MiBAQAorMjAxOC0xMC0wOCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBGb250Q2FzY2FkZURl
c2NyaXB0aW9uIHRvIGEgZmlsZSBvZiBpdHMgb3duCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTAzNDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250RGVzY3JpcHRpb24uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9u
OjpGb250RGVzY3JpcHRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bV9zaG91bGRB
bGxvd1VzZXJJbnN0YWxsZWRGb250cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
RGVzY3JpcHRpb246OnNldExvY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
RGVzY3JpcHRpb246OmludmFsaWRhdGVDYWNoZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmguCisgICAgICAgIChX
ZWJDb3JlOjpGb250RGVzY3JpcHRpb246Om9wZXJhdG9yIT0gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpjb21wdXRlZFNpemUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpjb21wdXRlZFBpeGVsU2l6
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246Oml0
YWxpYyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246
OnN0cmV0Y2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0
aW9uOjp3ZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2Ny
aXB0aW9uOjpmb250U2VsZWN0aW9uUmVxdWVzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnJlbmRlcmluZ01vZGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjp0ZXh0UmVuZGVyaW5nTW9kZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNjcmlwdCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OmxvY2Fs
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246Om9y
aWVudGF0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlw
dGlvbjo6bm9uQ0pLR2x5cGhPcmllbnRhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb250RGVzY3JpcHRpb246OndpZHRoVmFyaWFudCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OmZlYXR1cmVTZXR0aW5ncyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnZhcmlhdGlvblNl
dHRpbmdzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlv
bjo6Zm9udFN5bnRoZXNpcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
RGVzY3JpcHRpb246OnZhcmlhbnRDb21tb25MaWdhdHVyZXMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjp2YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0
dXJlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246
OnZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6dmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6dmFyaWFudFBv
c2l0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlv
bjo6dmFyaWFudENhcHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uOjp2YXJpYW50TnVtZXJpY0ZpZ3VyZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnZhcmlhbnROdW1lcmljU3BhY2luZyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnZhcmlhbnROdW1l
cmljRnJhY3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2Ny
aXB0aW9uOjp2YXJpYW50TnVtZXJpY09yZGluYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjp2YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6dmFyaWFudEFs
dGVybmF0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0
aW9uOjp2YXJpYW50RWFzdEFzaWFuVmFyaWFudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnZhcmlhbnRFYXN0QXNpYW5XaWR0aCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnZhcmlhbnRFYXN0QXNp
YW5SdWJ5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlv
bjo6dmFyaWFudFNldHRpbmdzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnREZXNjcmlwdGlvbjo6b3B0aWNhbFNpemluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb250RGVzY3JpcHRpb246OmZvbnRTdHlsZUF4aXMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzaG91bGRBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRp
b246OnNldENvbXB1dGVkU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OnNldEl0YWxpYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OnNldFN0cmV0Y2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uOjpzZXRJc0l0YWxpYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
RGVzY3JpcHRpb246OnNldFdlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
RGVzY3JpcHRpb246OnNldFJlbmRlcmluZ01vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRUZXh0UmVuZGVyaW5nTW9kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldE9yaWVudGF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0Tm9uQ0pLR2x5cGhPcmllbnRh
dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFdp
ZHRoVmFyaWFudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246
OnNldEZlYXR1cmVTZXR0aW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OnNldFZhcmlhdGlvblNldHRpbmdzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0Rm9udFN5bnRoZXNpcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFZhcmlhbnRDb21tb25MaWdhdHVyZXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50RGlz
Y3JldGlvbmFyeUxpZ2F0dXJlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OnNldFZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0VmFyaWFudENvbnRleHR1YWxBbHRlcm5h
dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0VmFy
aWFudFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlv
bjo6c2V0VmFyaWFudENhcHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2Ny
aXB0aW9uOjpzZXRWYXJpYW50TnVtZXJpY0ZpZ3VyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGb250RGVzY3JpcHRpb246OnNldFZhcmlhbnROdW1lcmljU3BhY2luZyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFZhcmlhbnROdW1lcmljRnJh
Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRW
YXJpYW50TnVtZXJpY09yZGluYWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uOjpzZXRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0VmFyaWFudEFsdGVybmF0ZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50RWFzdEFz
aWFuVmFyaWFudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246
OnNldFZhcmlhbnRFYXN0QXNpYW5XaWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
b250RGVzY3JpcHRpb246OnNldFZhcmlhbnRFYXN0QXNpYW5SdWJ5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0T3B0aWNhbFNpemluZyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldEZvbnRTdHlsZUF4aXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRTaG91bGRBbGxv
d1VzZXJJbnN0YWxsZWRGb250cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246Om9wZXJhdG9yPT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OmludmFsaWRhdGVDYWNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjplZmZlY3RpdmVGYW1pbHlDb3VudCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9u
OjplZmZlY3RpdmVGYW1pbHlBdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZURlc2NyaXB0aW9uOjpsaWdodGVyV2VpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmJvbGRlcldlaWdodCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbGllc0VxdWFs
Rm9yVGV4dEF1dG9TaXppbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lSGFzaCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmb2xkZWRG
YW1pbHlOYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVz
Y3JpcHRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246Om9w
ZXJhdG9yIT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVE
ZXNjcmlwdGlvbjo6ZmFtaWx5Q291bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Zmlyc3RGYW1pbHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5QXQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFt
aWxpZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6c3BlY2lmaWVkU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppc0Fic29sdXRlU2l6ZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpsaWdodGVyV2VpZ2h0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRp
b246OmJvbGRlcldlaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjp1c2VGaXhlZERlZmF1bHRTaXplIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246Omtlcm5pbmcgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6a2V5
d29yZFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVE
ZXNjcmlwdGlvbjo6a2V5d29yZFNpemVBc0lkZW50aWZpZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Zm9udFNtb290aGluZyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpp
c1NwZWNpZmllZEZvbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6c2V0T25lRmFtaWx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OnNldEZhbWlsaWVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OnNldFNwZWNpZmllZFNpemUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6c2V0SXNB
YnNvbHV0ZVNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6c2V0S2VybmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpzZXRLZXl3b3JkU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpzZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OnNl
dEZvbnRTbW9vdGhpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVE
ZXNjcmlwdGlvbjo6c2V0SXNTcGVjaWZpZWRGb250KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmVxdWFsRm9yVGV4dEF1dG9TaXppbmcgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5p
dGlhbEl0YWxpYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2Ny
aXB0aW9uOjppbml0aWFsRm9udFN0eWxlQXhpcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsV2VpZ2h0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxTdHJldGNoKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxT
bWFsbENhcHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlw
dGlvbjo6aW5pdGlhbEtlcm5pbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbEZvbnRTbW9vdGhpbmcpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbFRleHRSZW5kZXJpbmdN
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246
OmluaXRpYWxGb250U3ludGhlc2lzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxWYXJpYW50UG9zaXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbFZhcmlhbnRDYXBz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246Omlu
aXRpYWxWYXJpYW50QWx0ZXJuYXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsT3B0aWNhbFNpemluZyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsTG9jYWxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246Om9wZXJhdG9y
PT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9S
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuaDoKKwogMjAxOC0xMC0wOCAgWWFjaW5lIEJhbmRvdSAgPHlhY2luZS5i
YW5kb3VfZXh0QHNvZnRhdGhvbWUuY29tPgogCiAgICAgICAgIFtFTUVdW0dTdHJlYW1lcl0gQWRk
IHN1cHBvcnQgZm9yIFdlYk0gZW5jcnlwdGVkIGNhcHMgImFwcGxpY2F0aW9uL3gtd2VibS1lbmMi
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjM2OTExKQorKysgU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE2MTAsNiArMTYxMCw3IEBAIHBsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dERlc2NyaXB0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbWlseVNwZWNpZmljYXRp
b25OdWxsLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjM2OTExKQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00ODExLDYg
KzQ4MTEsNyBAQAogCQlFNERFQUExODE3QTkzREMzMDAwRTA0MzAgLyogU3R5bGVUcmVlUmVzb2x2
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0REVB
QTE2MTdBOTNEQzMwMDBFMDQzMCAvKiBTdHlsZVRyZWVSZXNvbHZlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0RTI0MzgzMURBQjk1M0UwMEMy
NkU0QiAvKiBtZXRlckVsZW1lbnRTaGFkb3cuY3NzIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEUyNDM4MjFEQUI5NTNFMDBDMjZFNEIgLyogbWV0ZXJF
bGVtZW50U2hhZG93LmNzcyAqLzsgfTsKIAkJRTRFMzlBRkIxMzMwRUZBODAwM0FCMjc0IC8qIExl
Z2FjeVRpbGVMYXllclBvb2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0RTM5QUZBMTMzMEVGQTgwMDNBQjI3NCAvKiBMZWdhY3lUaWxlTGF5ZXJQb29s
LmggKi87IH07CisJCUU0RThCNEY1MjE2Qjk1NjUwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NEU4QjRGMjIxNkI4QjYwMDBCODgzNEQgLyogRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0RTlCMTE5MTgx
MDkxNkYwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RTlCMTE4MTgxMDkxNkYwMDNBQ0NE
RiAvKiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCAqLzsgfTsKIAkJRTRFOUIxMUQxODE0NTY5
QzAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RTlCMTFDMTgxNDU2OUMwMDNBQ0NERiAv
KiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggKi87IH07CiAJCUU0RjlFRUYzMTU2REEwMDcw
MEQyM0U3RSAvKiBTdHlsZVNoZWV0Q29udGVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RjlFRUYxMTU2RDg0QzQwMEQyM0U3RSAvKiBTdHlsZVNo
ZWV0Q29udGVudHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMTQ1NDcsNiArMTQ1NDgsOCBAQAogCQlFNEUyNDM4MjFEQUI5NTNFMDBDMjZFNEIg
LyogbWV0ZXJFbGVtZW50U2hhZG93LmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuY3NzOyBwYXRoID0gbWV0
ZXJFbGVtZW50U2hhZG93LmNzczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRFMzlB
RkExMzMwRUZBODAwM0FCMjc0IC8qIExlZ2FjeVRpbGVMYXllclBvb2wuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5VGlsZUxheWVyUG9vbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNEUzOUFGQzEzMzBFRkM1MDAzQUIyNzQgLyogTGVnYWN5VGlsZUxh
eWVyUG9vbC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExlZ2Fj
eVRpbGVMYXllclBvb2wubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0RThCNEYw
MjE2QjhCNUYwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEU4QjRGMjIxNkI4QjYwMDBCODgzNEQgLyog
Rm9udENhc2NhZGVEZXNjcmlwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGb250Q2FzY2FkZURlc2NyaXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0RTlCMTE4MTgxMDkxNkYwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTGluZUxheW91dFJlc29sdmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RTlCMTFBMTgxNDU2OTIwMDNBQ0NE
RiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFNEU5QjExQzE4MTQ1NjlDMDAzQUNDREYgLyogU2ltcGxlTGlu
ZUxheW91dEZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1w
bGVMaW5lTGF5b3V0RnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
Mzc0NSw2ICsyMzc0OCw4IEBACiAJCQkJQjJDM0RBNTIwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRD
YWNoZS5oICovLAogCQkJCUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZS5j
cHAgKi8sCiAJCQkJQjJDM0RBNTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlLmggKi8s
CisJCQkJRTRFOEI0RjAyMTZCOEI1RjAwQjg4MzREIC8qIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24u
Y3BwICovLAorCQkJCUU0RThCNEYyMjE2QjhCNjAwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uLmggKi8sCiAJCQkJQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRl
Rm9udHMuY3BwICovLAogCQkJCUIyQzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2Fk
ZUZvbnRzLmggKi8sCiAJCQkJMzdBQ0NFNjIwREEyQUE5NjAwODlFNjAyIC8qIEZvbnREZXNjcmlw
dGlvbi5jcHAgKi8sCkBAIC0yNzM5NSw2ICsyNzQwMCw3IEBACiAJCQkJQTE1RDc1MTYxRTY4RjdD
ODAwQTM1RkJDIC8qIEJsb2JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVERUYxRjQx
MjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUQzMUNE
RDE5MTk2MDIwMDAxMDA1QTMgLyogQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmggaW4gSGVhZGVycyAq
LywKKwkJCQlFNEU4QjRGNTIxNkI5NTY1MDBCODgzNEQgLyogRm9udENhc2NhZGVEZXNjcmlwdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEQzQjAwQUYyMTVENkE2OTAwNzZCOTgzIC8qIEJsb2JF
dmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M3N0MzRDcxREVGODUwQTAwQTUwQkZBIC8qIEJs
b2JMaW5lRW5kaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFDOTRBRjkxOTEzMDNGMDAwRDVB
ODkzIC8qIEJsb2JQYXJ0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAkocmV2aXNpb24gMjM2OTExKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsOCArMjYsOCBAQAogCiAjaW5jbHVkZSAiRGFzaEFycmF5LmgiCiAjaW5jbHVk
ZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaCIKICNpbmNsdWRl
ICJGb250Q2FzY2FkZUZvbnRzLmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5j
bHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZURlc2NyaXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcAkocmV2aXNpb24gMjM2OTExKQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uY3Bw
OjIzNjkxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
RGVzY3JpcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA3IE5pY2hvbGFzIFNoYW5rcyA8Y29udGFjdEBuaWNrc2hhbmtzLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisKKyNpbmNs
dWRlICJMb2NhbGVUb1NjcmlwdE1hcHBpbmcuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFNhbWVTaXplQXNGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uIHsKKyAgICBWZWN0b3I8dm9pZCo+IHZlY3RvcjsKKyNpZiBFTkFCTEUo
VkFSSUFUSU9OX0ZPTlRTKQorICAgIFZlY3Rvcjx2b2lkKj4gdmVjdG9yMjsKKyNlbHNlCisgICAg
Y2hhciBjOworI2VuZGlmCisgICAgQXRvbWljU3RyaW5nIHN0cmluZzsKKyAgICBpbnQxNl90IGZv
bnRTZWxlY3Rpb25SZXF1ZXN0WzNdOworICAgIGZsb2F0IHNpemU7CisgICAgdW5zaWduZWQgYml0
ZmllbGRzMTsKKyAgICB1bnNpZ25lZCBiaXRmaWVsZHMyIDogMjI7CisgICAgdm9pZCogYXJyYXk7
CisgICAgZmxvYXQgc2l6ZTI7CisgICAgdW5zaWduZWQgYml0ZmllbGRzMyA6IDEwOworfTsKKwor
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24pID09IHNpemVvZihT
YW1lU2l6ZUFzRm9udENhc2NhZGVEZXNjcmlwdGlvbiksIEZvbnRDYXNjYWRlRGVzY3JpcHRpb25f
c2hvdWxkX3N0YXlfc21hbGwpOworCitGb250RGVzY3JpcHRpb246OkZvbnREZXNjcmlwdGlvbigp
CisgICAgOiBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0IHsgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
aW5pdGlhbFdlaWdodCgpLCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsU3RyZXRjaCgp
LCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsSXRhbGljKCkgfQorICAgICwgbV9vcmll
bnRhdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFs
KSkKKyAgICAsIG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbjo6TWl4ZWQpKQorICAgICwgbV93aWR0aFZhcmlhbnQoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRXaWR0aFZhcmlhbnQ6OlJlZ3VsYXJXaWR0aCkpCisgICAg
LCBtX3JlbmRlcmluZ01vZGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRSZW5kZXJpbmdNb2Rl
OjpOb3JtYWwpKQorICAgICwgbV90ZXh0UmVuZGVyaW5nKHN0YXRpY19jYXN0PHVuc2lnbmVkPihU
ZXh0UmVuZGVyaW5nTW9kZTo6QXV0b1RleHRSZW5kZXJpbmcpKQorICAgICwgbV9zY3JpcHQoVVND
UklQVF9DT01NT04pCisgICAgLCBtX2ZvbnRTeW50aGVzaXMoRm9udFN5bnRoZXNpc1dlaWdodCB8
IEZvbnRTeW50aGVzaXNTdHlsZSB8IEZvbnRTeW50aGVzaXNTbWFsbENhcHMpCisgICAgLCBtX3Zh
cmlhbnRDb21tb25MaWdhdHVyZXMoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50TGln
YXR1cmVzOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcyhz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCkpCisgICAg
LCBtX3ZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250
VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKSkKKyAgICAsIG1fdmFyaWFudENvbnRleHR1YWxBbHRl
cm5hdGVzKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFs
KSkKKyAgICAsIG1fdmFyaWFudFBvc2l0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFy
aWFudFBvc2l0aW9uOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50Q2FwcyhzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oRm9udFZhcmlhbnRDYXBzOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50TnVtZXJp
Y0ZpZ3VyZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpO
b3JtYWwpKQorICAgICwgbV92YXJpYW50TnVtZXJpY1NwYWNpbmcoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6Ok5vcm1hbCkpCisgICAgLCBtX3ZhcmlhbnRO
dW1lcmljRnJhY3Rpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50TnVtZXJpY0Zy
YWN0aW9uOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50TnVtZXJpY09yZGluYWwoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6Ok5vcm1hbCkpCisgICAgLCBt
X3ZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJp
YW50TnVtZXJpY1NsYXNoZWRaZXJvOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50QWx0ZXJuYXRl
cyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWwpKQor
ICAgICwgbV92YXJpYW50RWFzdEFzaWFuVmFyaWFudChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9u
dFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50RWFzdEFz
aWFuV2lkdGgoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6
Ok5vcm1hbCkpCisgICAgLCBtX3ZhcmlhbnRFYXN0QXNpYW5SdWJ5KHN0YXRpY19jYXN0PHVuc2ln
bmVkPihGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbCkpCisgICAgLCBtX29wdGljYWxT
aXppbmcoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRPcHRpY2FsU2l6aW5nOjpFbmFibGVkKSkK
KyAgICAsIG1fZm9udFN0eWxlQXhpcyhGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsRm9u
dFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6Oml0YWwpCisgICAgLCBtX3Nob3VsZEFsbG93
VXNlckluc3RhbGxlZEZvbnRzKHN0YXRpY19jYXN0PHVuc2lnbmVkPihBbGxvd1VzZXJJbnN0YWxs
ZWRGb250czo6Tm8pKQoreworfQorCit2b2lkIEZvbnREZXNjcmlwdGlvbjo6c2V0TG9jYWxlKGNv
bnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQoreworICAgIG1fbG9jYWxlID0gbG9jYWxlOworICAg
IG1fc2NyaXB0ID0gbG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihtX2xvY2FsZSk7
Cit9CisKK0ZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkZvbnRDYXNjYWRlRGVzY3JpcHRpb24oKQor
ICAgIDogbV9pc0Fic29sdXRlU2l6ZShmYWxzZSkKKyAgICAsIG1fa2VybmluZyhzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oS2VybmluZzo6QXV0bykpCisgICAgLCBtX2tleXdvcmRTaXplKDApCisgICAg
LCBtX2ZvbnRTbW9vdGhpbmcoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRTbW9vdGhpbmdNb2Rl
OjpBdXRvU21vb3RoaW5nKSkKKyAgICAsIG1faXNTcGVjaWZpZWRGb250KGZhbHNlKQoreworfQor
CisjaWYgIVVTRV9QTEFURk9STV9TWVNURU1fRkFMTEJBQ0tfTElTVAordm9pZCBGb250RGVzY3Jp
cHRpb246OmludmFsaWRhdGVDYWNoZXMoKQoreworfQorCit1bnNpZ25lZCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uOjplZmZlY3RpdmVGYW1pbHlDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZh
bWlseUNvdW50KCk7Cit9CisKK0ZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb246OmVmZmVjdGl2ZUZhbWlseUF0KHVuc2lnbmVkIGkpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGZhbWlseUF0KGkpOworfQorI2VuZGlmCisKK0ZvbnRTZWxlY3Rpb25WYWx1ZSBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpsaWdodGVyV2VpZ2h0KEZvbnRTZWxlY3Rpb25WYWx1ZSB3ZWlnaHQp
Cit7CisgICAgaWYgKHdlaWdodCA8IEZvbnRTZWxlY3Rpb25WYWx1ZSgxMDApKQorICAgICAgICBy
ZXR1cm4gd2VpZ2h0OworICAgIGlmICh3ZWlnaHQgPCBGb250U2VsZWN0aW9uVmFsdWUoNTUwKSkK
KyAgICAgICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25WYWx1ZSgxMDApOworICAgIGlmICh3ZWlnaHQg
PCBGb250U2VsZWN0aW9uVmFsdWUoNzUwKSkKKyAgICAgICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25W
YWx1ZSg0MDApOworICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFsdWUoNzAwKTsKK30KKworRm9u
dFNlbGVjdGlvblZhbHVlIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmJvbGRlcldlaWdodChGb250
U2VsZWN0aW9uVmFsdWUgd2VpZ2h0KQoreworICAgIGlmICh3ZWlnaHQgPCBGb250U2VsZWN0aW9u
VmFsdWUoMzUwKSkKKyAgICAgICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25WYWx1ZSg0MDApOworICAg
IGlmICh3ZWlnaHQgPCBGb250U2VsZWN0aW9uVmFsdWUoNTUwKSkKKyAgICAgICAgcmV0dXJuIEZv
bnRTZWxlY3Rpb25WYWx1ZSg3MDApOworICAgIGlmICh3ZWlnaHQgPCBGb250U2VsZWN0aW9uVmFs
dWUoOTAwKSkKKyAgICAgICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25WYWx1ZSg5MDApOworICAgIHJl
dHVybiB3ZWlnaHQ7Cit9CisKKyNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQorCitib29sIEZv
bnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlsaWVzRXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25z
dCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKK3sKKyAgICB1bnNpZ25lZCB0
aGlzRmFtaWx5Q291bnQgPSBmYW1pbHlDb3VudCgpOworICAgIHVuc2lnbmVkIG90aGVyRmFtaWx5
Q291bnQgPSBvdGhlci5mYW1pbHlDb3VudCgpOworCisgICAgaWYgKHRoaXNGYW1pbHlDb3VudCAh
PSBvdGhlckZhbWlseUNvdW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdGhpc0ZhbWlseUNvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKCFl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKGZhbWlseUF0KGkpLCBvdGhlci5mYW1pbHlBdChpKSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQorCitib29sIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkx
LCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseTIpCit7CisgICAgLy8gRklYTUU6IDxyZGFyOi8v
cHJvYmxlbS8zMzU5NDI1Mz4gQ29yZVRleHQgbWF0Y2hlcyBkb3QtcHJlZml4ZWQgZm9udCBuYW1l
cyBjYXNlIHNlbnNpdGl2ZWx5LiBXZSBzaG91bGQKKyAgICAvLyBhbHdheXMgdGFrZSB0aGUgY2Fz
ZSBpbnNlbnNpdGl2ZSBwYXRjaCBvbmNlIHRoaXMgcmFkYXIgaXMgZml4ZWQuCisgICAgaWYgKGZh
bWlseTEuc3RhcnRzV2l0aCgnLicpKQorICAgICAgICByZXR1cm4gU3RyaW5nSGFzaDo6ZXF1YWwo
ZmFtaWx5MS5zdHJpbmcoKSwgZmFtaWx5Mi5zdHJpbmcoKSk7CisgICAgcmV0dXJuIEFTQ0lJQ2Fz
ZUluc2Vuc2l0aXZlSGFzaDo6ZXF1YWwoZmFtaWx5MSwgZmFtaWx5Mik7Cit9CisKK3Vuc2lnbmVk
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVIYXNoKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5KQoreworICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzM1OTQyNTM+IENv
cmVUZXh0IG1hdGNoZXMgZG90LXByZWZpeGVkIGZvbnQgbmFtZXMgY2FzZSBzZW5zaXRpdmVseS4g
V2Ugc2hvdWxkCisgICAgLy8gYWx3YXlzIHRha2UgdGhlIGNhc2UgaW5zZW5zaXRpdmUgcGF0Y2gg
b25jZSB0aGlzIHJhZGFyIGlzIGZpeGVkLgorICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0aCgnLicp
KQorICAgICAgICByZXR1cm4gU3RyaW5nSGFzaDo6aGFzaChmYW1pbHkuc3RyaW5nKCkpOworICAg
IHJldHVybiBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6Omhhc2goZmFtaWx5KTsKK30KKworU3Ry
aW5nIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZvbGRlZEZhbWlseU5hbWUoY29uc3QgQXRvbWlj
U3RyaW5nJiBmYW1pbHkpCit7CisgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zMzU5NDI1
Mz4gQ29yZVRleHQgbWF0Y2hlcyBkb3QtcHJlZml4ZWQgZm9udCBuYW1lcyBjYXNlIHNlbnNpdGl2
ZWx5LiBXZSBzaG91bGQKKyAgICAvLyBhbHdheXMgdGFrZSB0aGUgY2FzZSBpbnNlbnNpdGl2ZSBw
YXRjaCBvbmNlIHRoaXMgcmFkYXIgaXMgZml4ZWQuCisgICAgaWYgKGZhbWlseS5zdGFydHNXaXRo
KCcuJykpCisgICAgICAgIHJldHVybiBmYW1pbHkuc3RyaW5nKCk7CisgICAgcmV0dXJuIGZhbWls
eS5zdHJpbmcoKS5mb2xkQ2FzZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZURlc2NyaXB0aW9uLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0w
LDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZURlc2NyaXB0aW9uLmNwcAkocmV2aXNpb24gMjM2OTExKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDkgKzI4LDggQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGVEZXNjcmlwdGlvbi5o
IgogCi0jaW5jbHVkZSAiTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01NCw0MiArNTMsNiBA
QCBzdHJ1Y3QgU2FtZVNpemVBc0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24gCiAKIENPTVBJTEVfQVNT
RVJUKHNpemVvZihGb250Q2FzY2FkZURlc2NyaXB0aW9uKSA9PSBzaXplb2YoU2FtZVNpemVBc0Zv
bnRDYXNjYWRlRGVzY3JpcHRpb24pLCBGb250Q2FzY2FkZURlc2NyaXB0aW9uX3Nob3VsZF9zdGF5
X3NtYWxsKTsKIAotRm9udERlc2NyaXB0aW9uOjpGb250RGVzY3JpcHRpb24oKQotICAgIDogbV9m
b250U2VsZWN0aW9uUmVxdWVzdCB7IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxXZWln
aHQoKSwgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbFN0cmV0Y2goKSwgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6aW5pdGlhbEl0YWxpYygpIH0KLSAgICAsIG1fb3JpZW50YXRpb24oc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCkpCi0gICAgLCBt
X25vbkNKS0dseXBoT3JpZW50YXRpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE5vbkNKS0dseXBo
T3JpZW50YXRpb246Ok1peGVkKSkKLSAgICAsIG1fd2lkdGhWYXJpYW50KHN0YXRpY19jYXN0PHVu
c2lnbmVkPihGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGgpKQotICAgICwgbV9yZW5kZXJp
bmdNb2RlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250UmVuZGVyaW5nTW9kZTo6Tm9ybWFsKSkK
LSAgICAsIG1fdGV4dFJlbmRlcmluZyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oVGV4dFJlbmRlcmlu
Z01vZGU6OkF1dG9UZXh0UmVuZGVyaW5nKSkKLSAgICAsIG1fc2NyaXB0KFVTQ1JJUFRfQ09NTU9O
KQotICAgICwgbV9mb250U3ludGhlc2lzKEZvbnRTeW50aGVzaXNXZWlnaHQgfCBGb250U3ludGhl
c2lzU3R5bGUgfCBGb250U3ludGhlc2lzU21hbGxDYXBzKQotICAgICwgbV92YXJpYW50Q29tbW9u
TGlnYXR1cmVzKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudExpZ2F0dXJlczo6Tm9y
bWFsKSkKLSAgICAsIG1fdmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpKQotICAgICwgbV92YXJpYW50
SGlzdG9yaWNhbExpZ2F0dXJlcyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnRMaWdh
dHVyZXM6Ok5vcm1hbCkpCi0gICAgLCBtX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyhzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCkpCi0gICAgLCBt
X3ZhcmlhbnRQb3NpdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnRQb3NpdGlv
bjo6Tm9ybWFsKSkKLSAgICAsIG1fdmFyaWFudENhcHMoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZv
bnRWYXJpYW50Q2Fwczo6Tm9ybWFsKSkKLSAgICAsIG1fdmFyaWFudE51bWVyaWNGaWd1cmUoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsKSkKLSAg
ICAsIG1fdmFyaWFudE51bWVyaWNTcGFjaW5nKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFy
aWFudE51bWVyaWNTcGFjaW5nOjpOb3JtYWwpKQotICAgICwgbV92YXJpYW50TnVtZXJpY0ZyYWN0
aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9y
bWFsKSkKLSAgICAsIG1fdmFyaWFudE51bWVyaWNPcmRpbmFsKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWwpKQotICAgICwgbV92YXJpYW50TnVt
ZXJpY1NsYXNoZWRaZXJvKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudE51bWVyaWNT
bGFzaGVkWmVybzo6Tm9ybWFsKSkKLSAgICAsIG1fdmFyaWFudEFsdGVybmF0ZXMoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsKSkKLSAgICAsIG1fdmFy
aWFudEVhc3RBc2lhblZhcmlhbnQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudDo6Tm9ybWFsKSkKLSAgICAsIG1fdmFyaWFudEVhc3RBc2lhbldpZHRoKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpOb3JtYWwpKQot
ICAgICwgbV92YXJpYW50RWFzdEFzaWFuUnVieShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZh
cmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWwpKQotICAgICwgbV9vcHRpY2FsU2l6aW5nKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihGb250T3B0aWNhbFNpemluZzo6RW5hYmxlZCkpCi0gICAgLCBtX2Zv
bnRTdHlsZUF4aXMoRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbEZvbnRTdHlsZUF4aXMo
KSA9PSBGb250U3R5bGVBeGlzOjppdGFsKQotICAgICwgbV9zaG91bGRBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5v
KSkKLXsKLX0KLQotdm9pZCBGb250RGVzY3JpcHRpb246OnNldExvY2FsZShjb25zdCBBdG9taWNT
dHJpbmcmIGxvY2FsZSkKLXsKLSAgICBtX2xvY2FsZSA9IGxvY2FsZTsKLSAgICBtX3NjcmlwdCA9
IGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24obV9sb2NhbGUpOwotfQotCiBGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uKCkKICAgICA6IG1faXNB
YnNvbHV0ZVNpemUoZmFsc2UpCiAgICAgLCBtX2tlcm5pbmcoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEtlcm5pbmc6OkF1dG8pKQpAQCAtMTAwLDEwICs2Myw2IEBAIEZvbnRDYXNjYWRlRGVzY3JpcHRp
b246OkZvbnRDYXNjYWRlRGVzY3IKIH0KIAogI2lmICFVU0VfUExBVEZPUk1fU1lTVEVNX0ZBTExC
QUNLX0xJU1QKLXZvaWQgRm9udERlc2NyaXB0aW9uOjppbnZhbGlkYXRlQ2FjaGVzKCkKLXsKLX0K
LQogdW5zaWduZWQgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZWZmZWN0aXZlRmFtaWx5Q291bnQo
KSBjb25zdAogewogICAgIHJldHVybiBmYW1pbHlDb3VudCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRp
b24uaAkocmV2aXNpb24gMjM2OTExKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250RGVzY3JpcHRpb24uaDoyMzY5MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9A
a2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2Rl
Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgTmljaG9sYXMgU2hhbmtzIDx3ZWJraXRAbmlja3NoYW5rcy5jb20+CisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElvdGhlci5tXyAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNtXworICoKKyAqLworCisj
aWZuZGVmIEZvbnREZXNjcmlwdGlvbl9oCisjZGVmaW5lIEZvbnREZXNjcmlwdGlvbl9oCisKKyNp
bmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdGlvbkFsZ29y
aXRobS5oIgorI2luY2x1ZGUgIkZvbnRUYWdnZWRTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlRleHRG
bGFncy5oIgorI2luY2x1ZGUgIldlYktpdEZvbnRGYW1pbHlOYW1lcy5oIgorI2luY2x1ZGUgPHVu
aWNvZGUvdXNjcmlwdC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWRBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisKKyNpZiBQ
TEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJGb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0
LmgiCisjZWxzZQorI2luY2x1ZGUgIkZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uTnVsbC5oIgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFBMQVRGT1JNKENPQ09BKQordHlwZWRl
ZiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0IEZvbnRGYW1pbHlQbGF0Zm9ybVNwZWNp
ZmljYXRpb247CisjZWxzZQordHlwZWRlZiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbk51bGwgRm9u
dEZhbWlseVBsYXRmb3JtU3BlY2lmaWNhdGlvbjsKKyNlbmRpZgorCisjZGVmaW5lIFVTRV9QTEFU
Rk9STV9TWVNURU1fRkFMTEJBQ0tfTElTVCAoKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1Nf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAwKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTMwMCkpCisKK3R5cGVkZWYgVmFyaWFu
dDxBdG9taWNTdHJpbmcsIEZvbnRGYW1pbHlQbGF0Zm9ybVNwZWNpZmljYXRpb24+IEZvbnRGYW1p
bHlTcGVjaWZpY2F0aW9uOworCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0Rm9udEZhbWlseU5hbWVz
OworCitjbGFzcyBGb250RGVzY3JpcHRpb24geworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JU
IEZvbnREZXNjcmlwdGlvbigpOworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250RGVzY3JpcHRp
b24mIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgZmxv
YXQgY29tcHV0ZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb21wdXRlZFNpemU7IH0KKyAgICB1
bnNpZ25lZCBjb21wdXRlZFBpeGVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHVuc2lnbmVkKG1fY29t
cHV0ZWRTaXplICsgMC41Zik7IH0KKyAgICBzdGQ6Om9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1
ZT4gaXRhbGljKCkgY29uc3QgeyByZXR1cm4gbV9mb250U2VsZWN0aW9uUmVxdWVzdC5zbG9wZTsg
fQorICAgIEZvbnRTZWxlY3Rpb25WYWx1ZSBzdHJldGNoKCkgY29uc3QgeyByZXR1cm4gbV9mb250
U2VsZWN0aW9uUmVxdWVzdC53aWR0aDsgfQorICAgIEZvbnRTZWxlY3Rpb25WYWx1ZSB3ZWlnaHQo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0LndlaWdodDsgfQorICAgIEZv
bnRTZWxlY3Rpb25SZXF1ZXN0IGZvbnRTZWxlY3Rpb25SZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4g
bV9mb250U2VsZWN0aW9uUmVxdWVzdDsgfQorICAgIEZvbnRSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250UmVuZGVyaW5nTW9kZT4obV9y
ZW5kZXJpbmdNb2RlKTsgfQorICAgIFRleHRSZW5kZXJpbmdNb2RlIHRleHRSZW5kZXJpbmdNb2Rl
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dFJlbmRlcmluZ01vZGU+KG1fdGV4dFJl
bmRlcmluZyk7IH0KKyAgICBVU2NyaXB0Q29kZSBzY3JpcHQoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxVU2NyaXB0Q29kZT4obV9zY3JpcHQpOyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsZTsgfQorCisgICAgRm9udE9yaWVudGF0
aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udE9yaWVudGF0
aW9uPihtX29yaWVudGF0aW9uKTsgfQorICAgIE5vbkNKS0dseXBoT3JpZW50YXRpb24gbm9uQ0pL
R2x5cGhPcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PE5vbkNKS0dseXBo
T3JpZW50YXRpb24+KG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbik7IH0KKyAgICBGb250V2lkdGhW
YXJpYW50IHdpZHRoVmFyaWFudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRXaWR0
aFZhcmlhbnQ+KG1fd2lkdGhWYXJpYW50KTsgfQorICAgIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGlu
Z3MmIGZlYXR1cmVTZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZVNldHRpbmdzOyB9
CisgICAgY29uc3QgRm9udFZhcmlhdGlvblNldHRpbmdzJiB2YXJpYXRpb25TZXR0aW5ncygpIGNv
bnN0IHsgcmV0dXJuIG1fdmFyaWF0aW9uU2V0dGluZ3M7IH0KKyAgICBGb250U3ludGhlc2lzIGZv
bnRTeW50aGVzaXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250U3ludGhlc2lzPiht
X2ZvbnRTeW50aGVzaXMpOyB9CisgICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgdmFyaWFudENvbW1v
bkxpZ2F0dXJlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRWYXJpYW50TGlnYXR1
cmVzPihtX3ZhcmlhbnRDb21tb25MaWdhdHVyZXMpOyB9CisgICAgRm9udFZhcmlhbnRMaWdhdHVy
ZXMgdmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxGb250VmFyaWFudExpZ2F0dXJlcz4obV92YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJl
cyk7IH0KKyAgICBGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJl
cygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRWYXJpYW50TGlnYXR1cmVzPihtX3Zh
cmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKTsgfQorICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIHZh
cmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZv
bnRWYXJpYW50TGlnYXR1cmVzPihtX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyk7IH0KKyAg
ICBGb250VmFyaWFudFBvc2l0aW9uIHZhcmlhbnRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEZvbnRWYXJpYW50UG9zaXRpb24+KG1fdmFyaWFudFBvc2l0aW9uKTsgfQorICAg
IEZvbnRWYXJpYW50Q2FwcyB2YXJpYW50Q2FwcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PEZvbnRWYXJpYW50Q2Fwcz4obV92YXJpYW50Q2Fwcyk7IH0KKyAgICBGb250VmFyaWFudE51bWVy
aWNGaWd1cmUgdmFyaWFudE51bWVyaWNGaWd1cmUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxGb250VmFyaWFudE51bWVyaWNGaWd1cmU+KG1fdmFyaWFudE51bWVyaWNGaWd1cmUpOyB9Cisg
ICAgRm9udFZhcmlhbnROdW1lcmljU3BhY2luZyB2YXJpYW50TnVtZXJpY1NwYWNpbmcoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudE51bWVyaWNTcGFjaW5nPihtX3Zhcmlh
bnROdW1lcmljU3BhY2luZyk7IH0KKyAgICBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbiB2YXJp
YW50TnVtZXJpY0ZyYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlh
bnROdW1lcmljRnJhY3Rpb24+KG1fdmFyaWFudE51bWVyaWNGcmFjdGlvbik7IH0KKyAgICBGb250
VmFyaWFudE51bWVyaWNPcmRpbmFsIHZhcmlhbnROdW1lcmljT3JkaW5hbCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw+KG1fdmFyaWFudE51bWVy
aWNPcmRpbmFsKTsgfQorICAgIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHZhcmlhbnRO
dW1lcmljU2xhc2hlZFplcm8oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFu
dE51bWVyaWNTbGFzaGVkWmVybz4obV92YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKTsgfQorICAg
IEZvbnRWYXJpYW50QWx0ZXJuYXRlcyB2YXJpYW50QWx0ZXJuYXRlcygpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PEZvbnRWYXJpYW50QWx0ZXJuYXRlcz4obV92YXJpYW50QWx0ZXJuYXRlcyk7
IH0KKyAgICBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQgdmFyaWFudEVhc3RBc2lhblZhcmlh
bnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQ+KG1fdmFyaWFudEVhc3RBc2lhblZhcmlhbnQpOyB9CisgICAgRm9udFZhcmlhbnRFYXN0QXNp
YW5XaWR0aCB2YXJpYW50RWFzdEFzaWFuV2lkdGgoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxGb250VmFyaWFudEVhc3RBc2lhbldpZHRoPihtX3ZhcmlhbnRFYXN0QXNpYW5XaWR0aCk7IH0K
KyAgICBGb250VmFyaWFudEVhc3RBc2lhblJ1YnkgdmFyaWFudEVhc3RBc2lhblJ1YnkoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk+KG1fdmFyaWFu
dEVhc3RBc2lhblJ1YnkpOyB9CisgICAgRm9udFZhcmlhbnRTZXR0aW5ncyB2YXJpYW50U2V0dGlu
Z3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHsgdmFyaWFudENvbW1vbkxpZ2F0dXJl
cygpLAorICAgICAgICAgICAgdmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoKSwKKyAgICAg
ICAgICAgIHZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKCksCisgICAgICAgICAgICB2YXJpYW50
Q29udGV4dHVhbEFsdGVybmF0ZXMoKSwKKyAgICAgICAgICAgIHZhcmlhbnRQb3NpdGlvbigpLAor
ICAgICAgICAgICAgdmFyaWFudENhcHMoKSwKKyAgICAgICAgICAgIHZhcmlhbnROdW1lcmljRmln
dXJlKCksCisgICAgICAgICAgICB2YXJpYW50TnVtZXJpY1NwYWNpbmcoKSwKKyAgICAgICAgICAg
IHZhcmlhbnROdW1lcmljRnJhY3Rpb24oKSwKKyAgICAgICAgICAgIHZhcmlhbnROdW1lcmljT3Jk
aW5hbCgpLAorICAgICAgICAgICAgdmFyaWFudE51bWVyaWNTbGFzaGVkWmVybygpLAorICAgICAg
ICAgICAgdmFyaWFudEFsdGVybmF0ZXMoKSwKKyAgICAgICAgICAgIHZhcmlhbnRFYXN0QXNpYW5W
YXJpYW50KCksCisgICAgICAgICAgICB2YXJpYW50RWFzdEFzaWFuV2lkdGgoKSwKKyAgICAgICAg
ICAgIHZhcmlhbnRFYXN0QXNpYW5SdWJ5KCkgfTsKKyAgICB9CisgICAgRm9udE9wdGljYWxTaXpp
bmcgb3B0aWNhbFNpemluZygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRPcHRpY2Fs
U2l6aW5nPihtX29wdGljYWxTaXppbmcpOyB9CisgICAgRm9udFN0eWxlQXhpcyBmb250U3R5bGVB
eGlzKCkgY29uc3QgeyByZXR1cm4gbV9mb250U3R5bGVBeGlzID8gRm9udFN0eWxlQXhpczo6aXRh
bCA6IEZvbnRTdHlsZUF4aXM6OnNsbnQ7IH0KKyAgICBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBz
aG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PEFsbG93VXNlckluc3RhbGxlZEZvbnRzPihtX3Nob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRz
KTsgfQorCisgICAgdm9pZCBzZXRDb21wdXRlZFNpemUoZmxvYXQgcykgeyBtX2NvbXB1dGVkU2l6
ZSA9IGNsYW1wVG9GbG9hdChzKTsgfQorICAgIHZvaWQgc2V0SXRhbGljKHN0ZDo6b3B0aW9uYWw8
Rm9udFNlbGVjdGlvblZhbHVlPiBpdGFsaWMpIHsgbV9mb250U2VsZWN0aW9uUmVxdWVzdC5zbG9w
ZSA9IGl0YWxpYzsgfQorICAgIHZvaWQgc2V0U3RyZXRjaChGb250U2VsZWN0aW9uVmFsdWUgc3Ry
ZXRjaCkgeyBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0LndpZHRoID0gc3RyZXRjaDsgfQorICAgIHZv
aWQgc2V0SXNJdGFsaWMoYm9vbCBpc0l0YWxpYykgeyBzZXRJdGFsaWMoaXNJdGFsaWMgPyBzdGQ6
Om9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4geyBpdGFsaWNWYWx1ZSgpIH0gOiBzdGQ6Om9w
dGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4geyB9KTsgfQorICAgIHZvaWQgc2V0V2VpZ2h0KEZv
bnRTZWxlY3Rpb25WYWx1ZSB3ZWlnaHQpIHsgbV9mb250U2VsZWN0aW9uUmVxdWVzdC53ZWlnaHQg
PSB3ZWlnaHQ7IH0KKyAgICB2b2lkIHNldFJlbmRlcmluZ01vZGUoRm9udFJlbmRlcmluZ01vZGUg
bW9kZSkgeyBtX3JlbmRlcmluZ01vZGUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obW9kZSk7IH0K
KyAgICB2b2lkIHNldFRleHRSZW5kZXJpbmdNb2RlKFRleHRSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
ZykgeyBtX3RleHRSZW5kZXJpbmcgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVuZGVyaW5nKTsg
fQorICAgIHZvaWQgc2V0T3JpZW50YXRpb24oRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7
IG1fb3JpZW50YXRpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3JpZW50YXRpb24pOyB9Cisg
ICAgdm9pZCBzZXROb25DSktHbHlwaE9yaWVudGF0aW9uKE5vbkNKS0dseXBoT3JpZW50YXRpb24g
b3JpZW50YXRpb24pIHsgbV9ub25DSktHbHlwaE9yaWVudGF0aW9uID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG9yaWVudGF0aW9uKTsgfQorICAgIHZvaWQgc2V0V2lkdGhWYXJpYW50KEZvbnRXaWR0
aFZhcmlhbnQgd2lkdGhWYXJpYW50KSB7IG1fd2lkdGhWYXJpYW50ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHdpZHRoVmFyaWFudCk7IH0gLy8gTWFrZSBzdXJlIG5ldyBjYWxsZXJzIG9mIHRoaXMg
c3luYyB3aXRoIEZvbnRQbGF0Zm9ybURhdGE6OmlzRm9yVGV4dENvbWJpbmUoKSEKKyAgICB2b2lk
IHNldExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICB2b2lkIHNldEZlYXR1cmVTZXR0
aW5ncyhGb250RmVhdHVyZVNldHRpbmdzJiYgc2V0dGluZ3MpIHsgbV9mZWF0dXJlU2V0dGluZ3Mg
PSBXVEZNb3ZlKHNldHRpbmdzKTsgfQorI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisgICAg
dm9pZCBzZXRWYXJpYXRpb25TZXR0aW5ncyhGb250VmFyaWF0aW9uU2V0dGluZ3MmJiBzZXR0aW5n
cykgeyBtX3ZhcmlhdGlvblNldHRpbmdzID0gV1RGTW92ZShzZXR0aW5ncyk7IH0KKyNlbmRpZgor
ICAgIHZvaWQgc2V0Rm9udFN5bnRoZXNpcyhGb250U3ludGhlc2lzIGZvbnRTeW50aGVzaXMpIHsg
bV9mb250U3ludGhlc2lzID0gZm9udFN5bnRoZXNpczsgfQorICAgIHZvaWQgc2V0VmFyaWFudENv
bW1vbkxpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50KSB7IG1fdmFyaWFudENv
bW1vbkxpZ2F0dXJlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQorICAgIHZv
aWQgc2V0VmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoRm9udFZhcmlhbnRMaWdhdHVyZXMg
dmFyaWFudCkgeyBtX3ZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50SGlzdG9yaWNhbExpZ2F0
dXJlcyhGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50KSB7IG1fdmFyaWFudEhpc3RvcmljYWxM
aWdhdHVyZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7IH0KKyAgICB2b2lkIHNl
dFZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyhGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50
KSB7IG1fdmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50UG9zaXRpb24oRm9udFZhcmlhbnRQb3Np
dGlvbiB2YXJpYW50KSB7IG1fdmFyaWFudFBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHMgdmFy
aWFudCkgeyBtX3ZhcmlhbnRDYXBzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9
CisgICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY0ZpZ3VyZShGb250VmFyaWFudE51bWVyaWNGaWd1
cmUgdmFyaWFudCkgeyBtX3ZhcmlhbnROdW1lcmljRmlndXJlID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY1NwYWNpbmcoRm9udFZh
cmlhbnROdW1lcmljU3BhY2luZyB2YXJpYW50KSB7IG1fdmFyaWFudE51bWVyaWNTcGFjaW5nID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50TnVt
ZXJpY0ZyYWN0aW9uKEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uIHZhcmlhbnQpIHsgbV92YXJp
YW50TnVtZXJpY0ZyYWN0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Cisg
ICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY09yZGluYWwoRm9udFZhcmlhbnROdW1lcmljT3JkaW5h
bCB2YXJpYW50KSB7IG1fdmFyaWFudE51bWVyaWNPcmRpbmFsID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKEZv
bnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHZhcmlhbnQpIHsgbV92YXJpYW50TnVtZXJpY1Ns
YXNoZWRaZXJvID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBz
ZXRWYXJpYW50QWx0ZXJuYXRlcyhGb250VmFyaWFudEFsdGVybmF0ZXMgdmFyaWFudCkgeyBtX3Zh
cmlhbnRBbHRlcm5hdGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAg
dm9pZCBzZXRWYXJpYW50RWFzdEFzaWFuVmFyaWFudChGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQgdmFyaWFudCkgeyBtX3ZhcmlhbnRFYXN0QXNpYW5WYXJpYW50ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50RWFzdEFzaWFuV2lkdGgoRm9u
dFZhcmlhbnRFYXN0QXNpYW5XaWR0aCB2YXJpYW50KSB7IG1fdmFyaWFudEVhc3RBc2lhbldpZHRo
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50
RWFzdEFzaWFuUnVieShGb250VmFyaWFudEVhc3RBc2lhblJ1YnkgdmFyaWFudCkgeyBtX3Zhcmlh
bnRFYXN0QXNpYW5SdWJ5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAg
dm9pZCBzZXRPcHRpY2FsU2l6aW5nKEZvbnRPcHRpY2FsU2l6aW5nIHNpemluZykgeyBtX29wdGlj
YWxTaXppbmcgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6aW5nKTsgfQorICAgIHZvaWQgc2V0
Rm9udFN0eWxlQXhpcyhGb250U3R5bGVBeGlzIGF4aXMpIHsgbV9mb250U3R5bGVBeGlzID0gYXhp
cyA9PSBGb250U3R5bGVBeGlzOjppdGFsOyB9CisgICAgdm9pZCBzZXRTaG91bGRBbGxvd1VzZXJJ
bnN0YWxsZWRGb250cyhBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBzaG91bGRBbGxvd1VzZXJJbnN0
YWxsZWRGb250cykgeyBtX3Nob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsgfQorCisgICAgc3Rh
dGljIHZvaWQgaW52YWxpZGF0ZUNhY2hlcygpOworCitwcml2YXRlOgorICAgIC8vIEZJWE1FOiBJ
bnZlc3RpZ2F0ZSBtb3ZpbmcgdGhlc2UgaW50byB0aGVpciBvd24gb2JqZWN0IG9uIHRoZSBoZWFw
ICh0byBzYXZlIG1lbW9yeSkuCisgICAgRm9udEZlYXR1cmVTZXR0aW5ncyBtX2ZlYXR1cmVTZXR0
aW5nczsKKyAgICBGb250VmFyaWF0aW9uU2V0dGluZ3MgbV92YXJpYXRpb25TZXR0aW5nczsKKyAg
ICBBdG9taWNTdHJpbmcgbV9sb2NhbGU7CisKKyAgICBGb250U2VsZWN0aW9uUmVxdWVzdCBtX2Zv
bnRTZWxlY3Rpb25SZXF1ZXN0OworICAgIGZsb2F0IG1fY29tcHV0ZWRTaXplIHsgMCB9OyAvLyBD
b21wdXRlZCBzaXplIGFkanVzdGVkIGZvciB0aGUgbWluaW11bSBmb250IHNpemUgYW5kIHRoZSB6
b29tIGZhY3Rvci4KKyAgICB1bnNpZ25lZCBtX29yaWVudGF0aW9uIDogMTsgLy8gRm9udE9yaWVu
dGF0aW9uIC0gV2hldGhlciB0aGUgZm9udCBpcyByZW5kZXJpbmcgb24gYSBob3Jpem9udGFsIGxp
bmUgb3IgYSB2ZXJ0aWNhbCBsaW5lLgorICAgIHVuc2lnbmVkIG1fbm9uQ0pLR2x5cGhPcmllbnRh
dGlvbiA6IDE7IC8vIE5vbkNKS0dseXBoT3JpZW50YXRpb24gLSBPbmx5IHVzZWQgYnkgdmVydGlj
YWwgdGV4dC4gRGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCBvcmllbnRhdGlvbiBmb3Igbm9uLWlkZW9n
cmFwaCBnbHlwaHMuCisgICAgdW5zaWduZWQgbV93aWR0aFZhcmlhbnQgOiAyOyAvLyBGb250V2lk
dGhWYXJpYW50CisgICAgdW5zaWduZWQgbV9yZW5kZXJpbmdNb2RlIDogMTsgLy8gVXNlZCB0byBz
d2l0Y2ggYmV0d2VlbiBDRyBhbmQgR0RJIHRleHQgb24gV2luZG93cy4KKyAgICB1bnNpZ25lZCBt
X3RleHRSZW5kZXJpbmcgOiAyOyAvLyBUZXh0UmVuZGVyaW5nTW9kZQorICAgIHVuc2lnbmVkIG1f
c2NyaXB0IDogNzsgLy8gVXNlZCB0byBoZWxwIGNob29zZSBhbiBhcHByb3ByaWF0ZSBmb250IGZv
ciBnZW5lcmljIGZvbnQgZmFtaWxpZXMuCisgICAgdW5zaWduZWQgbV9mb250U3ludGhlc2lzIDog
MzsgLy8gRm9udFN5bnRoZXNpcyB0eXBlCisgICAgdW5zaWduZWQgbV92YXJpYW50Q29tbW9uTGln
YXR1cmVzIDogMjsgLy8gRm9udFZhcmlhbnRMaWdhdHVyZXMKKyAgICB1bnNpZ25lZCBtX3Zhcmlh
bnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzIDogMjsgLy8gRm9udFZhcmlhbnRMaWdhdHVyZXMKKyAg
ICB1bnNpZ25lZCBtX3ZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzIDogMjsgLy8gRm9udFZhcmlh
bnRMaWdhdHVyZXMKKyAgICB1bnNpZ25lZCBtX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyA6
IDI7IC8vIEZvbnRWYXJpYW50TGlnYXR1cmVzCisgICAgdW5zaWduZWQgbV92YXJpYW50UG9zaXRp
b24gOiAyOyAvLyBGb250VmFyaWFudFBvc2l0aW9uCisgICAgdW5zaWduZWQgbV92YXJpYW50Q2Fw
cyA6IDM7IC8vIEZvbnRWYXJpYW50Q2FwcworICAgIHVuc2lnbmVkIG1fdmFyaWFudE51bWVyaWNG
aWd1cmUgOiAyOyAvLyBGb250VmFyaWFudE51bWVyaWNGaWd1cmUKKyAgICB1bnNpZ25lZCBtX3Zh
cmlhbnROdW1lcmljU3BhY2luZyA6IDI7IC8vIEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmcKKyAg
ICB1bnNpZ25lZCBtX3ZhcmlhbnROdW1lcmljRnJhY3Rpb24gOiAyOyAvLyBGb250VmFyaWFudE51
bWVyaWNGcmFjdGlvbgorICAgIHVuc2lnbmVkIG1fdmFyaWFudE51bWVyaWNPcmRpbmFsIDogMTsg
Ly8gRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbAorICAgIHVuc2lnbmVkIG1fdmFyaWFudE51bWVy
aWNTbGFzaGVkWmVybyA6IDE7IC8vIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvCisgICAg
dW5zaWduZWQgbV92YXJpYW50QWx0ZXJuYXRlcyA6IDE7IC8vIEZvbnRWYXJpYW50QWx0ZXJuYXRl
cworICAgIHVuc2lnbmVkIG1fdmFyaWFudEVhc3RBc2lhblZhcmlhbnQgOiAzOyAvLyBGb250VmFy
aWFudEVhc3RBc2lhblZhcmlhbnQKKyAgICB1bnNpZ25lZCBtX3ZhcmlhbnRFYXN0QXNpYW5XaWR0
aCA6IDI7IC8vIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGgKKyAgICB1bnNpZ25lZCBtX3Zhcmlh
bnRFYXN0QXNpYW5SdWJ5IDogMTsgLy8gRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5CisgICAgdW5z
aWduZWQgbV9vcHRpY2FsU2l6aW5nIDogMTsgLy8gRm9udE9wdGljYWxTaXppbmcKKyAgICB1bnNp
Z25lZCBtX2ZvbnRTdHlsZUF4aXMgOiAxOyAvLyBXaGV0aGVyICJmb250LXN0eWxlOiBpdGFsaWMi
IG9yICJmb250LXN0eWxlOiBvYmxpcXVlIDIwZGVnIiB3YXMgc3BlY2lmaWVkCisgICAgdW5zaWdu
ZWQgbV9zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyA6IDE7IC8vIEFsbG93VXNlckluc3Rh
bGxlZEZvbnRzOiBJZiB0aGlzIGRlc2NyaXB0aW9uIGlzIGFsbG93ZWQgdG8gbWF0Y2ggYSB1c2Vy
LWluc3RhbGxlZCBmb250Cit9OworCitpbmxpbmUgYm9vbCBGb250RGVzY3JpcHRpb246Om9wZXJh
dG9yPT0oY29uc3QgRm9udERlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9jb21wdXRlZFNpemUgPT0gb3RoZXIubV9jb21wdXRlZFNpemUKKyAgICAgICAgJiYgbV9mb250
U2VsZWN0aW9uUmVxdWVzdCA9PSBvdGhlci5tX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0CisgICAgICAg
ICYmIG1fcmVuZGVyaW5nTW9kZSA9PSBvdGhlci5tX3JlbmRlcmluZ01vZGUKKyAgICAgICAgJiYg
bV90ZXh0UmVuZGVyaW5nID09IG90aGVyLm1fdGV4dFJlbmRlcmluZworICAgICAgICAmJiBtX29y
aWVudGF0aW9uID09IG90aGVyLm1fb3JpZW50YXRpb24KKyAgICAgICAgJiYgbV9ub25DSktHbHlw
aE9yaWVudGF0aW9uID09IG90aGVyLm1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbgorICAgICAgICAm
JiBtX3dpZHRoVmFyaWFudCA9PSBvdGhlci5tX3dpZHRoVmFyaWFudAorICAgICAgICAmJiBtX2xv
Y2FsZSA9PSBvdGhlci5tX2xvY2FsZQorICAgICAgICAmJiBtX2ZlYXR1cmVTZXR0aW5ncyA9PSBv
dGhlci5tX2ZlYXR1cmVTZXR0aW5ncworI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisgICAg
ICAgICYmIG1fdmFyaWF0aW9uU2V0dGluZ3MgPT0gb3RoZXIubV92YXJpYXRpb25TZXR0aW5ncwor
I2VuZGlmCisgICAgICAgICYmIG1fZm9udFN5bnRoZXNpcyA9PSBvdGhlci5tX2ZvbnRTeW50aGVz
aXMKKyAgICAgICAgJiYgbV92YXJpYW50Q29tbW9uTGlnYXR1cmVzID09IG90aGVyLm1fdmFyaWFu
dENvbW1vbkxpZ2F0dXJlcworICAgICAgICAmJiBtX3ZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1
cmVzID09IG90aGVyLm1fdmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMKKyAgICAgICAgJiYg
bV92YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyA9PSBvdGhlci5tX3ZhcmlhbnRIaXN0b3JpY2Fs
TGlnYXR1cmVzCisgICAgICAgICYmIG1fdmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzID09IG90
aGVyLm1fdmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzCisgICAgICAgICYmIG1fdmFyaWFudFBv
c2l0aW9uID09IG90aGVyLm1fdmFyaWFudFBvc2l0aW9uCisgICAgICAgICYmIG1fdmFyaWFudENh
cHMgPT0gb3RoZXIubV92YXJpYW50Q2FwcworICAgICAgICAmJiBtX3ZhcmlhbnROdW1lcmljRmln
dXJlID09IG90aGVyLm1fdmFyaWFudE51bWVyaWNGaWd1cmUKKyAgICAgICAgJiYgbV92YXJpYW50
TnVtZXJpY1NwYWNpbmcgPT0gb3RoZXIubV92YXJpYW50TnVtZXJpY1NwYWNpbmcKKyAgICAgICAg
JiYgbV92YXJpYW50TnVtZXJpY0ZyYWN0aW9uID09IG90aGVyLm1fdmFyaWFudE51bWVyaWNGcmFj
dGlvbgorICAgICAgICAmJiBtX3ZhcmlhbnROdW1lcmljT3JkaW5hbCA9PSBvdGhlci5tX3Zhcmlh
bnROdW1lcmljT3JkaW5hbAorICAgICAgICAmJiBtX3ZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8g
PT0gb3RoZXIubV92YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvCisgICAgICAgICYmIG1fdmFyaWFu
dEFsdGVybmF0ZXMgPT0gb3RoZXIubV92YXJpYW50QWx0ZXJuYXRlcworICAgICAgICAmJiBtX3Zh
cmlhbnRFYXN0QXNpYW5WYXJpYW50ID09IG90aGVyLm1fdmFyaWFudEVhc3RBc2lhblZhcmlhbnQK
KyAgICAgICAgJiYgbV92YXJpYW50RWFzdEFzaWFuV2lkdGggPT0gb3RoZXIubV92YXJpYW50RWFz
dEFzaWFuV2lkdGgKKyAgICAgICAgJiYgbV92YXJpYW50RWFzdEFzaWFuUnVieSA9PSBvdGhlci5t
X3ZhcmlhbnRFYXN0QXNpYW5SdWJ5CisgICAgICAgICYmIG1fb3B0aWNhbFNpemluZyA9PSBvdGhl
ci5tX29wdGljYWxTaXppbmcKKyAgICAgICAgJiYgbV9mb250U3R5bGVBeGlzID09IG90aGVyLm1f
Zm9udFN0eWxlQXhpcworICAgICAgICAmJiBtX3Nob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRz
ID09IG90aGVyLm1fc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHM7Cit9CisKKy8vIEZJWE1F
OiBNb3ZlIHRvIGEgZmlsZSBvZiBpdHMgb3duLgorY2xhc3MgRm9udENhc2NhZGVEZXNjcmlwdGlv
biA6IHB1YmxpYyBGb250RGVzY3JpcHRpb24geworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JU
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24oKTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsgfQorCisgICAgdW5zaWduZWQgZmFtaWx5Q291bnQoKSBjb25zdCB7IHJldHVybiBt
X2ZhbWlsaWVzLnNpemUoKTsgfQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmlyc3RGYW1pbHko
KSBjb25zdCB7IHJldHVybiBmYW1pbHlBdCgwKTsgfQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5QXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9mYW1pbGllc1tpXTsgfQorICAg
IGNvbnN0IFJlZkNvdW50ZWRBcnJheTxBdG9taWNTdHJpbmc+JiBmYW1pbGllcygpIGNvbnN0IHsg
cmV0dXJuIG1fZmFtaWxpZXM7IH0KKworICAgIHN0YXRpYyBib29sIGZhbWlseU5hbWVzQXJlRXF1
YWwoY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgc3RhdGlj
IHVuc2lnbmVkIGZhbWlseU5hbWVIYXNoKGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHN0YXRp
YyBTdHJpbmcgZm9sZGVkRmFtaWx5TmFtZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKworICAgIHVu
c2lnbmVkIGVmZmVjdGl2ZUZhbWlseUNvdW50KCkgY29uc3Q7CisgICAgRm9udEZhbWlseVNwZWNp
ZmljYXRpb24gZWZmZWN0aXZlRmFtaWx5QXQodW5zaWduZWQpIGNvbnN0OworCisgICAgZmxvYXQg
c3BlY2lmaWVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWVkU2l6ZTsgfQorICAgIGJv
b2wgaXNBYnNvbHV0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2lzQWJzb2x1dGVTaXplOyB9Cisg
ICAgRm9udFNlbGVjdGlvblZhbHVlIGxpZ2h0ZXJXZWlnaHQoKSBjb25zdCB7IHJldHVybiBsaWdo
dGVyV2VpZ2h0KHdlaWdodCgpKTsgfQorICAgIEZvbnRTZWxlY3Rpb25WYWx1ZSBib2xkZXJXZWln
aHQoKSBjb25zdCB7IHJldHVybiBib2xkZXJXZWlnaHQod2VpZ2h0KCkpOyB9CisgICAgc3RhdGlj
IEZvbnRTZWxlY3Rpb25WYWx1ZSBsaWdodGVyV2VpZ2h0KEZvbnRTZWxlY3Rpb25WYWx1ZSk7Cisg
ICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBib2xkZXJXZWlnaHQoRm9udFNlbGVjdGlvblZh
bHVlKTsKKworICAgIC8vIG9ubHkgdXNlIGZpeGVkIGRlZmF1bHQgc2l6ZSB3aGVuIHRoZXJlIGlz
IG9ubHkgb25lIGZvbnQgZmFtaWx5LCBhbmQgdGhhdCBmYW1pbHkgaXMgIm1vbm9zcGFjZSIKKyAg
ICBib29sIHVzZUZpeGVkRGVmYXVsdFNpemUoKSBjb25zdCB7IHJldHVybiBmYW1pbHlDb3VudCgp
ID09IDEgJiYgZmlyc3RGYW1pbHkoKSA9PSBtb25vc3BhY2VGYW1pbHk7IH0KKworICAgIEtlcm5p
bmcga2VybmluZygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEtlcm5pbmc+KG1fa2Vybmlu
Zyk7IH0KKyAgICB1bnNpZ25lZCBrZXl3b3JkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5d29y
ZFNpemU7IH0KKyAgICBDU1NWYWx1ZUlEIGtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkgY29uc3QK
KyAgICB7CisgICAgICAgIENTU1ZhbHVlSUQgaWRlbnRpZmllciA9IG1fa2V5d29yZFNpemUgPyBz
dGF0aWNfY2FzdDxDU1NWYWx1ZUlEPihDU1NWYWx1ZVh4U21hbGwgKyBtX2tleXdvcmRTaXplIC0g
MSkgOiBDU1NWYWx1ZUludmFsaWQ7CisgICAgICAgIEFTU0VSVChpZGVudGlmaWVyID09IENTU1Zh
bHVlSW52YWxpZCB8fCAoaWRlbnRpZmllciA+PSBDU1NWYWx1ZVh4U21hbGwgJiYgaWRlbnRpZmll
ciA8PSBDU1NWYWx1ZVdlYmtpdFh4eExhcmdlKSk7CisgICAgICAgIHJldHVybiBpZGVudGlmaWVy
OworICAgIH0KKyAgICBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFNtb290aGluZ01vZGU+KG1fZm9udFNtb290aGluZyk7IH0K
KyAgICBib29sIGlzU3BlY2lmaWVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTcGVjaWZpZWRG
b250OyB9CisKKyAgICB2b2lkIHNldE9uZUZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWls
eSkgeyBBU1NFUlQobV9mYW1pbGllcy5zaXplKCkgPT0gMSk7IG1fZmFtaWxpZXNbMF0gPSBmYW1p
bHk7IH0KKyAgICB2b2lkIHNldEZhbWlsaWVzKGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBm
YW1pbGllcykgeyBtX2ZhbWlsaWVzID0gUmVmQ291bnRlZEFycmF5PEF0b21pY1N0cmluZz4oZmFt
aWxpZXMpOyB9CisgICAgdm9pZCBzZXRGYW1pbGllcyhjb25zdCBSZWZDb3VudGVkQXJyYXk8QXRv
bWljU3RyaW5nPiYgZmFtaWxpZXMpIHsgbV9mYW1pbGllcyA9IGZhbWlsaWVzOyB9CisgICAgdm9p
ZCBzZXRTcGVjaWZpZWRTaXplKGZsb2F0IHMpIHsgbV9zcGVjaWZpZWRTaXplID0gY2xhbXBUb0Zs
b2F0KHMpOyB9CisgICAgdm9pZCBzZXRJc0Fic29sdXRlU2l6ZShib29sIHMpIHsgbV9pc0Fic29s
dXRlU2l6ZSA9IHM7IH0KKyAgICB2b2lkIHNldEtlcm5pbmcoS2VybmluZyBrZXJuaW5nKSB7IG1f
a2VybmluZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihrZXJuaW5nKTsgfQorICAgIHZvaWQgc2V0
S2V5d29yZFNpemUodW5zaWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzaXplIDw9
IDgpOworICAgICAgICBtX2tleXdvcmRTaXplID0gc2l6ZTsKKyAgICAgICAgQVNTRVJUKG1fa2V5
d29yZFNpemUgPT0gc2l6ZSk7IC8vIE1ha2Ugc3VyZSBpdCBmaXRzIGluIHRoZSBiaXRmaWVsZC4K
KyAgICB9CisgICAgdm9pZCBzZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVyKENTU1ZhbHVlSUQg
aWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIEFTU0VSVCghaWRlbnRpZmllciB8fCAoaWRlbnRp
ZmllciA+PSBDU1NWYWx1ZVh4U21hbGwgJiYgaWRlbnRpZmllciA8PSBDU1NWYWx1ZVdlYmtpdFh4
eExhcmdlKSk7CisgICAgICAgIHN0YXRpY19hc3NlcnQoQ1NTVmFsdWVXZWJraXRYeHhMYXJnZSAt
IENTU1ZhbHVlWHhTbWFsbCArIDEgPT0gOCwgIk1heGltdW0ga2V5d29yZCBzaXplIHNob3VsZCBi
ZSA4LiIpOworICAgICAgICBzZXRLZXl3b3JkU2l6ZShpZGVudGlmaWVyID8gaWRlbnRpZmllciAt
IENTU1ZhbHVlWHhTbWFsbCArIDEgOiAwKTsKKyAgICB9CisgICAgdm9pZCBzZXRGb250U21vb3Ro
aW5nKEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZykgeyBtX2ZvbnRTbW9vdGhpbmcgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc21vb3RoaW5nKTsgfQorICAgIHZvaWQgc2V0SXNTcGVjaWZpZWRG
b250KGJvb2wgaXNTcGVjaWZpZWRGb250KSB7IG1faXNTcGVjaWZpZWRGb250ID0gaXNTcGVjaWZp
ZWRGb250OyB9CisKKyNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQorICAgIGJvb2wgZmFtaWxp
ZXNFcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIG90
aGVyKSBjb25zdDsKKworICAgIGJvb2wgZXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBm
YW1pbGllc0VxdWFsRm9yVGV4dEF1dG9TaXppbmcob3RoZXIpCisgICAgICAgICAgICAmJiBtX3Nw
ZWNpZmllZFNpemUgPT0gb3RoZXIubV9zcGVjaWZpZWRTaXplCisgICAgICAgICAgICAmJiB2YXJp
YW50U2V0dGluZ3MoKSA9PSBvdGhlci52YXJpYW50U2V0dGluZ3MoKQorICAgICAgICAgICAgJiYg
bV9pc0Fic29sdXRlU2l6ZSA9PSBvdGhlci5tX2lzQWJzb2x1dGVTaXplOworICAgIH0KKyNlbmRp
ZgorCisgICAgLy8gSW5pdGlhbCB2YWx1ZXMgZm9yIGZvbnQgcHJvcGVydGllcy4KKyAgICBzdGF0
aWMgc3RkOjpvcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IGluaXRpYWxJdGFsaWMoKSB7IHJl
dHVybiBzdGQ6Om51bGxvcHQ7IH0KKyAgICBzdGF0aWMgRm9udFN0eWxlQXhpcyBpbml0aWFsRm9u
dFN0eWxlQXhpcygpIHsgcmV0dXJuIEZvbnRTdHlsZUF4aXM6OnNsbnQ7IH0KKyAgICBzdGF0aWMg
Rm9udFNlbGVjdGlvblZhbHVlIGluaXRpYWxXZWlnaHQoKSB7IHJldHVybiBub3JtYWxXZWlnaHRW
YWx1ZSgpOyB9CisgICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBpbml0aWFsU3RyZXRjaCgp
IHsgcmV0dXJuIG5vcm1hbFN0cmV0Y2hWYWx1ZSgpOyB9CisgICAgc3RhdGljIEZvbnRTbWFsbENh
cHMgaW5pdGlhbFNtYWxsQ2FwcygpIHsgcmV0dXJuIEZvbnRTbWFsbENhcHM6Ok9mZjsgfQorICAg
IHN0YXRpYyBLZXJuaW5nIGluaXRpYWxLZXJuaW5nKCkgeyByZXR1cm4gS2VybmluZzo6QXV0bzsg
fQorICAgIHN0YXRpYyBGb250U21vb3RoaW5nTW9kZSBpbml0aWFsRm9udFNtb290aGluZygpIHsg
cmV0dXJuIEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nOyB9CisgICAgc3RhdGljIFRl
eHRSZW5kZXJpbmdNb2RlIGluaXRpYWxUZXh0UmVuZGVyaW5nTW9kZSgpIHsgcmV0dXJuIFRleHRS
ZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJlbmRlcmluZzsgfQorICAgIHN0YXRpYyBGb250U3ludGhl
c2lzIGluaXRpYWxGb250U3ludGhlc2lzKCkgeyByZXR1cm4gRm9udFN5bnRoZXNpc1dlaWdodCB8
IEZvbnRTeW50aGVzaXNTdHlsZSB8IEZvbnRTeW50aGVzaXNTbWFsbENhcHM7IH0KKyAgICBzdGF0
aWMgRm9udFZhcmlhbnRQb3NpdGlvbiBpbml0aWFsVmFyaWFudFBvc2l0aW9uKCkgeyByZXR1cm4g
Rm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsOyB9CisgICAgc3RhdGljIEZvbnRWYXJpYW50Q2Fw
cyBpbml0aWFsVmFyaWFudENhcHMoKSB7IHJldHVybiBGb250VmFyaWFudENhcHM6Ok5vcm1hbDsg
fQorICAgIHN0YXRpYyBGb250VmFyaWFudEFsdGVybmF0ZXMgaW5pdGlhbFZhcmlhbnRBbHRlcm5h
dGVzKCkgeyByZXR1cm4gRm9udFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWw7IH0KKyAgICBzdGF0
aWMgRm9udE9wdGljYWxTaXppbmcgaW5pdGlhbE9wdGljYWxTaXppbmcoKSB7IHJldHVybiBGb250
T3B0aWNhbFNpemluZzo6RW5hYmxlZDsgfQorICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcm
IGluaXRpYWxMb2NhbGUoKSB7IHJldHVybiBudWxsQXRvbSgpOyB9CisKK3ByaXZhdGU6CisgICAg
UmVmQ291bnRlZEFycmF5PEF0b21pY1N0cmluZz4gbV9mYW1pbGllcyB7IDEgfTsKKworICAgIGZs
b2F0IG1fc3BlY2lmaWVkU2l6ZSB7IDAgfTsgICAvLyBTcGVjaWZpZWQgQ1NTIHZhbHVlLiBJbmRl
cGVuZGVudCBvZiByZW5kZXJpbmcgaXNzdWVzIHN1Y2ggYXMgaW50ZWdlcgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyByb3VuZGluZywgbWluaW11bSBmb250IHNpemVzLCBhbmQgem9v
bWluZy4KKyAgICB1bnNpZ25lZCBtX2lzQWJzb2x1dGVTaXplIDogMTsgLy8gV2hldGhlciBvciBu
b3QgQ1NTIHNwZWNpZmllZCBhbiBleHBsaWNpdCBzaXplCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gKGxvZ2ljYWwgc2l6ZXMgbGlrZSAibWVkaXVtIiBkb24ndCBjb3VudCku
CisgICAgdW5zaWduZWQgbV9rZXJuaW5nIDogMjsgLy8gS2VybmluZworCisgICAgdW5zaWduZWQg
bV9rZXl3b3JkU2l6ZSA6IDQ7IC8vIFdlIGNhY2hlIHdoZXRoZXIgb3Igbm90IGEgZm9udCBpcyBj
dXJyZW50bHkgcmVwcmVzZW50ZWQgYnkgYSBDU1Mga2V5d29yZCAoZS5nLiwgbWVkaXVtKS4gIElm
IHNvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiB3ZSBjYW4gYWNjdXJhdGVs
eSB0cmFuc2xhdGUgYWNyb3NzIGRpZmZlcmVudCBnZW5lcmljIGZhbWlsaWVzIHRvIGFkanVzdCBm
b3IgZGlmZmVyZW50IHByZWZlcmVuY2Ugc2V0dGluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIChlLmcuLCAxM3B4IG1vbm9zcGFjZSB2cy4gMTZweCBldmVyeXRoaW5nIGVsc2UpLiAg
U2l6ZXMgYXJlIDEtOCAobGlrZSB0aGUgSFRNTCBzaXplIHZhbHVlcyBmb3IgPGZvbnQ+KS4KKwor
ICAgIHVuc2lnbmVkIG1fZm9udFNtb290aGluZyA6IDI7IC8vIEZvbnRTbW9vdGhpbmdNb2RlCisg
ICAgdW5zaWduZWQgbV9pc1NwZWNpZmllZEZvbnQgOiAxOyAvLyBUcnVlIGlmIGEgd2ViIHBhZ2Ug
c3BlY2lmaWVzIGEgbm9uLWdlbmVyaWMgZm9udCBmYW1pbHkgYXMgdGhlIGZpcnN0IGZvbnQgZmFt
aWx5LgorfTsKKworaW5saW5lIGJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6b3BlcmF0b3I9
PShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1
cm4gRm9udERlc2NyaXB0aW9uOjpvcGVyYXRvcj09KG90aGVyKQorICAgICAgICAmJiBtX2ZhbWls
aWVzID09IG90aGVyLm1fZmFtaWxpZXMKKyAgICAgICAgJiYgbV9zcGVjaWZpZWRTaXplID09IG90
aGVyLm1fc3BlY2lmaWVkU2l6ZQorICAgICAgICAmJiBtX2lzQWJzb2x1dGVTaXplID09IG90aGVy
Lm1faXNBYnNvbHV0ZVNpemUKKyAgICAgICAgJiYgbV9rZXJuaW5nID09IG90aGVyLm1fa2Vybmlu
ZworICAgICAgICAmJiBtX2tleXdvcmRTaXplID09IG90aGVyLm1fa2V5d29yZFNpemUKKyAgICAg
ICAgJiYgbV9mb250U21vb3RoaW5nID09IG90aGVyLm1fZm9udFNtb290aGluZworICAgICAgICAm
JiBtX2lzU3BlY2lmaWVkRm9udCA9PSBvdGhlci5tX2lzU3BlY2lmaWVkRm9udDsKK30KKworfQor
CisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9s
LXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3Bl
cnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURl
c2NyaXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDE2ICsyMiwxMCBAQAogICoKICAqLwogCi0jaWZuZGVmIEZvbnREZXNj
cmlwdGlvbl9oCi0jZGVmaW5lIEZvbnREZXNjcmlwdGlvbl9oCisjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJGb250U2VsZWN0aW9uQWxnb3Jp
dGhtLmgiCi0jaW5jbHVkZSAiRm9udFRhZ2dlZFNldHRpbmdzLmgiCi0jaW5jbHVkZSAiVGV4dEZs
YWdzLmgiCi0jaW5jbHVkZSAiV2ViS2l0Rm9udEZhbWlseU5hbWVzLmgiCi0jaW5jbHVkZSA8dW5p
Y29kZS91c2NyaXB0Lmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlICJG
b250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZEFycmF5Lmg+CiAjaW5j
bHVkZSA8d3RmL1ZhcmlhbnQuaD4KIApAQCAtNDksMTgxICs0Myw4IEBAIHR5cGVkZWYgRm9udEZh
bWlseVNwZWNpZmljYXRpb25Db3JlVGV4dCAKIHR5cGVkZWYgRm9udEZhbWlseVNwZWNpZmljYXRp
b25OdWxsIEZvbnRGYW1pbHlQbGF0Zm9ybVNwZWNpZmljYXRpb247CiAjZW5kaWYKIAotI2RlZmlu
ZSBVU0VfUExBVEZPUk1fU1lTVEVNX0ZBTExCQUNLX0xJU1QgKChQTEFURk9STShJT1MpICYmIF9f
SVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDAwMCkgfHwgKFBMQVRGT1JNKE1B
QykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEzMDApKQotCiB0eXBl
ZGVmIFZhcmlhbnQ8QXRvbWljU3RyaW5nLCBGb250RmFtaWx5UGxhdGZvcm1TcGVjaWZpY2F0aW9u
PiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbjsKIAotdXNpbmcgbmFtZXNwYWNlIFdlYktpdEZvbnRG
YW1pbHlOYW1lczsKLQotY2xhc3MgRm9udERlc2NyaXB0aW9uIHsKLXB1YmxpYzoKLSAgICBXRUJD
T1JFX0VYUE9SVCBGb250RGVzY3JpcHRpb24oKTsKLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0K
LQotICAgIGZsb2F0IGNvbXB1dGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcHV0ZWRTaXpl
OyB9Ci0gICAgdW5zaWduZWQgY29tcHV0ZWRQaXhlbFNpemUoKSBjb25zdCB7IHJldHVybiB1bnNp
Z25lZChtX2NvbXB1dGVkU2l6ZSArIDAuNWYpOyB9Ci0gICAgc3RkOjpvcHRpb25hbDxGb250U2Vs
ZWN0aW9uVmFsdWU+IGl0YWxpYygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNlbGVjdGlvblJlcXVl
c3Quc2xvcGU7IH0KLSAgICBGb250U2VsZWN0aW9uVmFsdWUgc3RyZXRjaCgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udFNlbGVjdGlvblJlcXVlc3Qud2lkdGg7IH0KLSAgICBGb250U2VsZWN0aW9uVmFs
dWUgd2VpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mb250U2VsZWN0aW9uUmVxdWVzdC53ZWlnaHQ7
IH0KLSAgICBGb250U2VsZWN0aW9uUmVxdWVzdCBmb250U2VsZWN0aW9uUmVxdWVzdCgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udFNlbGVjdGlvblJlcXVlc3Q7IH0KLSAgICBGb250UmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFJlbmRlcmlu
Z01vZGU+KG1fcmVuZGVyaW5nTW9kZSk7IH0KLSAgICBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVu
ZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFRleHRSZW5kZXJpbmdNb2Rl
PihtX3RleHRSZW5kZXJpbmcpOyB9Ci0gICAgVVNjcmlwdENvZGUgc2NyaXB0KCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VVNjcmlwdENvZGU+KG1fc2NyaXB0KTsgfQotICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxlKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbGU7IH0KLQotICAgIEZv
bnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZv
bnRPcmllbnRhdGlvbj4obV9vcmllbnRhdGlvbik7IH0KLSAgICBOb25DSktHbHlwaE9yaWVudGF0
aW9uIG5vbkNKS0dseXBoT3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxO
b25DSktHbHlwaE9yaWVudGF0aW9uPihtX25vbkNKS0dseXBoT3JpZW50YXRpb24pOyB9Ci0gICAg
Rm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxGb250V2lkdGhWYXJpYW50PihtX3dpZHRoVmFyaWFudCk7IH0KLSAgICBjb25zdCBGb250RmVh
dHVyZVNldHRpbmdzJiBmZWF0dXJlU2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVT
ZXR0aW5nczsgfQotICAgIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgdmFyaWF0aW9uU2V0
dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhdGlvblNldHRpbmdzOyB9Ci0gICAgRm9udFN5
bnRoZXNpcyBmb250U3ludGhlc2lzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFN5
bnRoZXNpcz4obV9mb250U3ludGhlc2lzKTsgfQotICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIHZh
cmlhbnRDb21tb25MaWdhdHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFy
aWFudExpZ2F0dXJlcz4obV92YXJpYW50Q29tbW9uTGlnYXR1cmVzKTsgfQotICAgIEZvbnRWYXJp
YW50TGlnYXR1cmVzIHZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnRMaWdhdHVyZXM+KG1fdmFyaWFudERpc2NyZXRpb25h
cnlMaWdhdHVyZXMpOyB9Ci0gICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgdmFyaWFudEhpc3Rvcmlj
YWxMaWdhdHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudExpZ2F0
dXJlcz4obV92YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyk7IH0KLSAgICBGb250VmFyaWFudExp
Z2F0dXJlcyB2YXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXMoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxGb250VmFyaWFudExpZ2F0dXJlcz4obV92YXJpYW50Q29udGV4dHVhbEFsdGVybmF0
ZXMpOyB9Ci0gICAgRm9udFZhcmlhbnRQb3NpdGlvbiB2YXJpYW50UG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudFBvc2l0aW9uPihtX3ZhcmlhbnRQb3NpdGlv
bik7IH0KLSAgICBGb250VmFyaWFudENhcHMgdmFyaWFudENhcHMoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxGb250VmFyaWFudENhcHM+KG1fdmFyaWFudENhcHMpOyB9Ci0gICAgRm9udFZh
cmlhbnROdW1lcmljRmlndXJlIHZhcmlhbnROdW1lcmljRmlndXJlKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnROdW1lcmljRmlndXJlPihtX3ZhcmlhbnROdW1lcmljRmln
dXJlKTsgfQotICAgIEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmcgdmFyaWFudE51bWVyaWNTcGFj
aW5nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnROdW1lcmljU3BhY2lu
Zz4obV92YXJpYW50TnVtZXJpY1NwYWNpbmcpOyB9Ci0gICAgRm9udFZhcmlhbnROdW1lcmljRnJh
Y3Rpb24gdmFyaWFudE51bWVyaWNGcmFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uPihtX3ZhcmlhbnROdW1lcmljRnJhY3Rpb24pOyB9
Ci0gICAgRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbCB2YXJpYW50TnVtZXJpY09yZGluYWwoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudE51bWVyaWNPcmRpbmFsPihtX3Zh
cmlhbnROdW1lcmljT3JkaW5hbCk7IH0KLSAgICBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVy
byB2YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8+KG1fdmFyaWFudE51bWVyaWNTbGFzaGVkWmVy
byk7IH0KLSAgICBGb250VmFyaWFudEFsdGVybmF0ZXMgdmFyaWFudEFsdGVybmF0ZXMoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudEFsdGVybmF0ZXM+KG1fdmFyaWFudEFs
dGVybmF0ZXMpOyB9Ci0gICAgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IHZhcmlhbnRFYXN0
QXNpYW5WYXJpYW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnRFYXN0
QXNpYW5WYXJpYW50PihtX3ZhcmlhbnRFYXN0QXNpYW5WYXJpYW50KTsgfQotICAgIEZvbnRWYXJp
YW50RWFzdEFzaWFuV2lkdGggdmFyaWFudEVhc3RBc2lhbldpZHRoKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aD4obV92YXJpYW50RWFzdEFzaWFu
V2lkdGgpOyB9Ci0gICAgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5IHZhcmlhbnRFYXN0QXNpYW5S
dWJ5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5
PihtX3ZhcmlhbnRFYXN0QXNpYW5SdWJ5KTsgfQotICAgIEZvbnRWYXJpYW50U2V0dGluZ3MgdmFy
aWFudFNldHRpbmdzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB7IHZhcmlhbnRDb21t
b25MaWdhdHVyZXMoKSwKLSAgICAgICAgICAgIHZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVz
KCksCi0gICAgICAgICAgICB2YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcygpLAotICAgICAgICAg
ICAgdmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzKCksCi0gICAgICAgICAgICB2YXJpYW50UG9z
aXRpb24oKSwKLSAgICAgICAgICAgIHZhcmlhbnRDYXBzKCksCi0gICAgICAgICAgICB2YXJpYW50
TnVtZXJpY0ZpZ3VyZSgpLAotICAgICAgICAgICAgdmFyaWFudE51bWVyaWNTcGFjaW5nKCksCi0g
ICAgICAgICAgICB2YXJpYW50TnVtZXJpY0ZyYWN0aW9uKCksCi0gICAgICAgICAgICB2YXJpYW50
TnVtZXJpY09yZGluYWwoKSwKLSAgICAgICAgICAgIHZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8o
KSwKLSAgICAgICAgICAgIHZhcmlhbnRBbHRlcm5hdGVzKCksCi0gICAgICAgICAgICB2YXJpYW50
RWFzdEFzaWFuVmFyaWFudCgpLAotICAgICAgICAgICAgdmFyaWFudEVhc3RBc2lhbldpZHRoKCks
Ci0gICAgICAgICAgICB2YXJpYW50RWFzdEFzaWFuUnVieSgpIH07Ci0gICAgfQotICAgIEZvbnRP
cHRpY2FsU2l6aW5nIG9wdGljYWxTaXppbmcoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxG
b250T3B0aWNhbFNpemluZz4obV9vcHRpY2FsU2l6aW5nKTsgfQotICAgIEZvbnRTdHlsZUF4aXMg
Zm9udFN0eWxlQXhpcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFN0eWxlQXhpcyA/IEZvbnRTdHls
ZUF4aXM6Oml0YWwgOiBGb250U3R5bGVBeGlzOjpzbG50OyB9Ci0gICAgQWxsb3dVc2VySW5zdGFs
bGVkRm9udHMgc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxBbGxvd1VzZXJJbnN0YWxsZWRGb250cz4obV9zaG91bGRBbGxvd1VzZXJJbnN0
YWxsZWRGb250cyk7IH0KLQotICAgIHZvaWQgc2V0Q29tcHV0ZWRTaXplKGZsb2F0IHMpIHsgbV9j
b21wdXRlZFNpemUgPSBjbGFtcFRvRmxvYXQocyk7IH0KLSAgICB2b2lkIHNldEl0YWxpYyhzdGQ6
Om9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gaXRhbGljKSB7IG1fZm9udFNlbGVjdGlvblJl
cXVlc3Quc2xvcGUgPSBpdGFsaWM7IH0KLSAgICB2b2lkIHNldFN0cmV0Y2goRm9udFNlbGVjdGlv
blZhbHVlIHN0cmV0Y2gpIHsgbV9mb250U2VsZWN0aW9uUmVxdWVzdC53aWR0aCA9IHN0cmV0Y2g7
IH0KLSAgICB2b2lkIHNldElzSXRhbGljKGJvb2wgaXNJdGFsaWMpIHsgc2V0SXRhbGljKGlzSXRh
bGljID8gc3RkOjpvcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IHsgaXRhbGljVmFsdWUoKSB9
IDogc3RkOjpvcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IHsgfSk7IH0KLSAgICB2b2lkIHNl
dFdlaWdodChGb250U2VsZWN0aW9uVmFsdWUgd2VpZ2h0KSB7IG1fZm9udFNlbGVjdGlvblJlcXVl
c3Qud2VpZ2h0ID0gd2VpZ2h0OyB9Ci0gICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKEZvbnRSZW5k
ZXJpbmdNb2RlIG1vZGUpIHsgbV9yZW5kZXJpbmdNb2RlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG1vZGUpOyB9Ci0gICAgdm9pZCBzZXRUZXh0UmVuZGVyaW5nTW9kZShUZXh0UmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmcpIHsgbV90ZXh0UmVuZGVyaW5nID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJl
bmRlcmluZyk7IH0KLSAgICB2b2lkIHNldE9yaWVudGF0aW9uKEZvbnRPcmllbnRhdGlvbiBvcmll
bnRhdGlvbikgeyBtX29yaWVudGF0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9yaWVudGF0
aW9uKTsgfQotICAgIHZvaWQgc2V0Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbihOb25DSktHbHlwaE9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbiA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihvcmllbnRhdGlvbik7IH0KLSAgICB2b2lkIHNldFdpZHRoVmFyaWFu
dChGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCkgeyBtX3dpZHRoVmFyaWFudCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih3aWR0aFZhcmlhbnQpOyB9IC8vIE1ha2Ugc3VyZSBuZXcgY2FsbGVy
cyBvZiB0aGlzIHN5bmMgd2l0aCBGb250UGxhdGZvcm1EYXRhOjppc0ZvclRleHRDb21iaW5lKCkh
Ci0gICAgdm9pZCBzZXRMb2NhbGUoY29uc3QgQXRvbWljU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRG
ZWF0dXJlU2V0dGluZ3MoRm9udEZlYXR1cmVTZXR0aW5ncyYmIHNldHRpbmdzKSB7IG1fZmVhdHVy
ZVNldHRpbmdzID0gV1RGTW92ZShzZXR0aW5ncyk7IH0KLSNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZP
TlRTKQotICAgIHZvaWQgc2V0VmFyaWF0aW9uU2V0dGluZ3MoRm9udFZhcmlhdGlvblNldHRpbmdz
JiYgc2V0dGluZ3MpIHsgbV92YXJpYXRpb25TZXR0aW5ncyA9IFdURk1vdmUoc2V0dGluZ3MpOyB9
Ci0jZW5kaWYKLSAgICB2b2lkIHNldEZvbnRTeW50aGVzaXMoRm9udFN5bnRoZXNpcyBmb250U3lu
dGhlc2lzKSB7IG1fZm9udFN5bnRoZXNpcyA9IGZvbnRTeW50aGVzaXM7IH0KLSAgICB2b2lkIHNl
dFZhcmlhbnRDb21tb25MaWdhdHVyZXMoRm9udFZhcmlhbnRMaWdhdHVyZXMgdmFyaWFudCkgeyBt
X3ZhcmlhbnRDb21tb25MaWdhdHVyZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7
IH0KLSAgICB2b2lkIHNldFZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKEZvbnRWYXJpYW50
TGlnYXR1cmVzIHZhcmlhbnQpIHsgbV92YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcyA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudEhpc3Rv
cmljYWxMaWdhdHVyZXMoRm9udFZhcmlhbnRMaWdhdHVyZXMgdmFyaWFudCkgeyBtX3ZhcmlhbnRI
aXN0b3JpY2FsTGlnYXR1cmVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Ci0g
ICAgdm9pZCBzZXRWYXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXMoRm9udFZhcmlhbnRMaWdhdHVy
ZXMgdmFyaWFudCkgeyBtX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudFBvc2l0aW9uKEZvbnRW
YXJpYW50UG9zaXRpb24gdmFyaWFudCkgeyBtX3ZhcmlhbnRQb3NpdGlvbiA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudENhcHMoRm9udFZhcmlh
bnRDYXBzIHZhcmlhbnQpIHsgbV92YXJpYW50Q2FwcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2
YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudE51bWVyaWNGaWd1cmUoRm9udFZhcmlhbnRO
dW1lcmljRmlndXJlIHZhcmlhbnQpIHsgbV92YXJpYW50TnVtZXJpY0ZpZ3VyZSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudE51bWVyaWNTcGFj
aW5nKEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmcgdmFyaWFudCkgeyBtX3ZhcmlhbnROdW1lcmlj
U3BhY2luZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0
VmFyaWFudE51bWVyaWNGcmFjdGlvbihGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbiB2YXJpYW50
KSB7IG1fdmFyaWFudE51bWVyaWNGcmFjdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJp
YW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudE51bWVyaWNPcmRpbmFsKEZvbnRWYXJpYW50TnVt
ZXJpY09yZGluYWwgdmFyaWFudCkgeyBtX3ZhcmlhbnROdW1lcmljT3JkaW5hbCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudE51bWVyaWNTbGFz
aGVkWmVybyhGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyB2YXJpYW50KSB7IG1fdmFyaWFu
dE51bWVyaWNTbGFzaGVkWmVybyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQot
ICAgIHZvaWQgc2V0VmFyaWFudEFsdGVybmF0ZXMoRm9udFZhcmlhbnRBbHRlcm5hdGVzIHZhcmlh
bnQpIHsgbV92YXJpYW50QWx0ZXJuYXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50
KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudEVhc3RBc2lhblZhcmlhbnQoRm9udFZhcmlhbnRFYXN0
QXNpYW5WYXJpYW50IHZhcmlhbnQpIHsgbV92YXJpYW50RWFzdEFzaWFuVmFyaWFudCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudEVhc3RBc2lh
bldpZHRoKEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGggdmFyaWFudCkgeyBtX3ZhcmlhbnRFYXN0
QXNpYW5XaWR0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQg
c2V0VmFyaWFudEVhc3RBc2lhblJ1YnkoRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5IHZhcmlhbnQp
IHsgbV92YXJpYW50RWFzdEFzaWFuUnVieSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50
KTsgfQotICAgIHZvaWQgc2V0T3B0aWNhbFNpemluZyhGb250T3B0aWNhbFNpemluZyBzaXppbmcp
IHsgbV9vcHRpY2FsU2l6aW5nID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpemluZyk7IH0KLSAg
ICB2b2lkIHNldEZvbnRTdHlsZUF4aXMoRm9udFN0eWxlQXhpcyBheGlzKSB7IG1fZm9udFN0eWxl
QXhpcyA9IGF4aXMgPT0gRm9udFN0eWxlQXhpczo6aXRhbDsgfQotICAgIHZvaWQgc2V0U2hvdWxk
QWxsb3dVc2VySW5zdGFsbGVkRm9udHMoQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgc2hvdWxkQWxs
b3dVc2VySW5zdGFsbGVkRm9udHMpIHsgbV9zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7IH0K
LQotICAgIHN0YXRpYyB2b2lkIGludmFsaWRhdGVDYWNoZXMoKTsKLQotcHJpdmF0ZToKLSAgICAv
LyBGSVhNRTogSW52ZXN0aWdhdGUgbW92aW5nIHRoZXNlIGludG8gdGhlaXIgb3duIG9iamVjdCBv
biB0aGUgaGVhcCAodG8gc2F2ZSBtZW1vcnkpLgotICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MgbV9m
ZWF0dXJlU2V0dGluZ3M7Ci0gICAgRm9udFZhcmlhdGlvblNldHRpbmdzIG1fdmFyaWF0aW9uU2V0
dGluZ3M7Ci0gICAgQXRvbWljU3RyaW5nIG1fbG9jYWxlOwotCi0gICAgRm9udFNlbGVjdGlvblJl
cXVlc3QgbV9mb250U2VsZWN0aW9uUmVxdWVzdDsKLSAgICBmbG9hdCBtX2NvbXB1dGVkU2l6ZSB7
IDAgfTsgLy8gQ29tcHV0ZWQgc2l6ZSBhZGp1c3RlZCBmb3IgdGhlIG1pbmltdW0gZm9udCBzaXpl
IGFuZCB0aGUgem9vbSBmYWN0b3IuCi0gICAgdW5zaWduZWQgbV9vcmllbnRhdGlvbiA6IDE7IC8v
IEZvbnRPcmllbnRhdGlvbiAtIFdoZXRoZXIgdGhlIGZvbnQgaXMgcmVuZGVyaW5nIG9uIGEgaG9y
aXpvbnRhbCBsaW5lIG9yIGEgdmVydGljYWwgbGluZS4KLSAgICB1bnNpZ25lZCBtX25vbkNKS0ds
eXBoT3JpZW50YXRpb24gOiAxOyAvLyBOb25DSktHbHlwaE9yaWVudGF0aW9uIC0gT25seSB1c2Vk
IGJ5IHZlcnRpY2FsIHRleHQuIERldGVybWluZXMgdGhlIGRlZmF1bHQgb3JpZW50YXRpb24gZm9y
IG5vbi1pZGVvZ3JhcGggZ2x5cGhzLgotICAgIHVuc2lnbmVkIG1fd2lkdGhWYXJpYW50IDogMjsg
Ly8gRm9udFdpZHRoVmFyaWFudAotICAgIHVuc2lnbmVkIG1fcmVuZGVyaW5nTW9kZSA6IDE7IC8v
IFVzZWQgdG8gc3dpdGNoIGJldHdlZW4gQ0cgYW5kIEdESSB0ZXh0IG9uIFdpbmRvd3MuCi0gICAg
dW5zaWduZWQgbV90ZXh0UmVuZGVyaW5nIDogMjsgLy8gVGV4dFJlbmRlcmluZ01vZGUKLSAgICB1
bnNpZ25lZCBtX3NjcmlwdCA6IDc7IC8vIFVzZWQgdG8gaGVscCBjaG9vc2UgYW4gYXBwcm9wcmlh
dGUgZm9udCBmb3IgZ2VuZXJpYyBmb250IGZhbWlsaWVzLgotICAgIHVuc2lnbmVkIG1fZm9udFN5
bnRoZXNpcyA6IDM7IC8vIEZvbnRTeW50aGVzaXMgdHlwZQotICAgIHVuc2lnbmVkIG1fdmFyaWFu
dENvbW1vbkxpZ2F0dXJlcyA6IDI7IC8vIEZvbnRWYXJpYW50TGlnYXR1cmVzCi0gICAgdW5zaWdu
ZWQgbV92YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcyA6IDI7IC8vIEZvbnRWYXJpYW50TGln
YXR1cmVzCi0gICAgdW5zaWduZWQgbV92YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyA6IDI7IC8v
IEZvbnRWYXJpYW50TGlnYXR1cmVzCi0gICAgdW5zaWduZWQgbV92YXJpYW50Q29udGV4dHVhbEFs
dGVybmF0ZXMgOiAyOyAvLyBGb250VmFyaWFudExpZ2F0dXJlcwotICAgIHVuc2lnbmVkIG1fdmFy
aWFudFBvc2l0aW9uIDogMjsgLy8gRm9udFZhcmlhbnRQb3NpdGlvbgotICAgIHVuc2lnbmVkIG1f
dmFyaWFudENhcHMgOiAzOyAvLyBGb250VmFyaWFudENhcHMKLSAgICB1bnNpZ25lZCBtX3Zhcmlh
bnROdW1lcmljRmlndXJlIDogMjsgLy8gRm9udFZhcmlhbnROdW1lcmljRmlndXJlCi0gICAgdW5z
aWduZWQgbV92YXJpYW50TnVtZXJpY1NwYWNpbmcgOiAyOyAvLyBGb250VmFyaWFudE51bWVyaWNT
cGFjaW5nCi0gICAgdW5zaWduZWQgbV92YXJpYW50TnVtZXJpY0ZyYWN0aW9uIDogMjsgLy8gRm9u
dFZhcmlhbnROdW1lcmljRnJhY3Rpb24KLSAgICB1bnNpZ25lZCBtX3ZhcmlhbnROdW1lcmljT3Jk
aW5hbCA6IDE7IC8vIEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWwKLSAgICB1bnNpZ25lZCBtX3Zh
cmlhbnROdW1lcmljU2xhc2hlZFplcm8gOiAxOyAvLyBGb250VmFyaWFudE51bWVyaWNTbGFzaGVk
WmVybwotICAgIHVuc2lnbmVkIG1fdmFyaWFudEFsdGVybmF0ZXMgOiAxOyAvLyBGb250VmFyaWFu
dEFsdGVybmF0ZXMKLSAgICB1bnNpZ25lZCBtX3ZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IDogMzsg
Ly8gRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50Ci0gICAgdW5zaWduZWQgbV92YXJpYW50RWFz
dEFzaWFuV2lkdGggOiAyOyAvLyBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoCi0gICAgdW5zaWdu
ZWQgbV92YXJpYW50RWFzdEFzaWFuUnVieSA6IDE7IC8vIEZvbnRWYXJpYW50RWFzdEFzaWFuUnVi
eQotICAgIHVuc2lnbmVkIG1fb3B0aWNhbFNpemluZyA6IDE7IC8vIEZvbnRPcHRpY2FsU2l6aW5n
Ci0gICAgdW5zaWduZWQgbV9mb250U3R5bGVBeGlzIDogMTsgLy8gV2hldGhlciAiZm9udC1zdHls
ZTogaXRhbGljIiBvciAiZm9udC1zdHlsZTogb2JsaXF1ZSAyMGRlZyIgd2FzIHNwZWNpZmllZAot
ICAgIHVuc2lnbmVkIG1fc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgOiAxOyAvLyBBbGxv
d1VzZXJJbnN0YWxsZWRGb250czogSWYgdGhpcyBkZXNjcmlwdGlvbiBpcyBhbGxvd2VkIHRvIG1h
dGNoIGEgdXNlci1pbnN0YWxsZWQgZm9udAotfTsKLQotaW5saW5lIGJvb2wgRm9udERlc2NyaXB0
aW9uOjpvcGVyYXRvcj09KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fY29tcHV0ZWRTaXplID09IG90aGVyLm1fY29tcHV0ZWRTaXplCi0gICAgICAg
ICYmIG1fZm9udFNlbGVjdGlvblJlcXVlc3QgPT0gb3RoZXIubV9mb250U2VsZWN0aW9uUmVxdWVz
dAotICAgICAgICAmJiBtX3JlbmRlcmluZ01vZGUgPT0gb3RoZXIubV9yZW5kZXJpbmdNb2RlCi0g
ICAgICAgICYmIG1fdGV4dFJlbmRlcmluZyA9PSBvdGhlci5tX3RleHRSZW5kZXJpbmcKLSAgICAg
ICAgJiYgbV9vcmllbnRhdGlvbiA9PSBvdGhlci5tX29yaWVudGF0aW9uCi0gICAgICAgICYmIG1f
bm9uQ0pLR2x5cGhPcmllbnRhdGlvbiA9PSBvdGhlci5tX25vbkNKS0dseXBoT3JpZW50YXRpb24K
LSAgICAgICAgJiYgbV93aWR0aFZhcmlhbnQgPT0gb3RoZXIubV93aWR0aFZhcmlhbnQKLSAgICAg
ICAgJiYgbV9sb2NhbGUgPT0gb3RoZXIubV9sb2NhbGUKLSAgICAgICAgJiYgbV9mZWF0dXJlU2V0
dGluZ3MgPT0gb3RoZXIubV9mZWF0dXJlU2V0dGluZ3MKLSNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZP
TlRTKQotICAgICAgICAmJiBtX3ZhcmlhdGlvblNldHRpbmdzID09IG90aGVyLm1fdmFyaWF0aW9u
U2V0dGluZ3MKLSNlbmRpZgotICAgICAgICAmJiBtX2ZvbnRTeW50aGVzaXMgPT0gb3RoZXIubV9m
b250U3ludGhlc2lzCi0gICAgICAgICYmIG1fdmFyaWFudENvbW1vbkxpZ2F0dXJlcyA9PSBvdGhl
ci5tX3ZhcmlhbnRDb21tb25MaWdhdHVyZXMKLSAgICAgICAgJiYgbV92YXJpYW50RGlzY3JldGlv
bmFyeUxpZ2F0dXJlcyA9PSBvdGhlci5tX3ZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzCi0g
ICAgICAgICYmIG1fdmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXMgPT0gb3RoZXIubV92YXJpYW50
SGlzdG9yaWNhbExpZ2F0dXJlcwotICAgICAgICAmJiBtX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJu
YXRlcyA9PSBvdGhlci5tX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcwotICAgICAgICAmJiBt
X3ZhcmlhbnRQb3NpdGlvbiA9PSBvdGhlci5tX3ZhcmlhbnRQb3NpdGlvbgotICAgICAgICAmJiBt
X3ZhcmlhbnRDYXBzID09IG90aGVyLm1fdmFyaWFudENhcHMKLSAgICAgICAgJiYgbV92YXJpYW50
TnVtZXJpY0ZpZ3VyZSA9PSBvdGhlci5tX3ZhcmlhbnROdW1lcmljRmlndXJlCi0gICAgICAgICYm
IG1fdmFyaWFudE51bWVyaWNTcGFjaW5nID09IG90aGVyLm1fdmFyaWFudE51bWVyaWNTcGFjaW5n
Ci0gICAgICAgICYmIG1fdmFyaWFudE51bWVyaWNGcmFjdGlvbiA9PSBvdGhlci5tX3ZhcmlhbnRO
dW1lcmljRnJhY3Rpb24KLSAgICAgICAgJiYgbV92YXJpYW50TnVtZXJpY09yZGluYWwgPT0gb3Ro
ZXIubV92YXJpYW50TnVtZXJpY09yZGluYWwKLSAgICAgICAgJiYgbV92YXJpYW50TnVtZXJpY1Ns
YXNoZWRaZXJvID09IG90aGVyLm1fdmFyaWFudE51bWVyaWNTbGFzaGVkWmVybwotICAgICAgICAm
JiBtX3ZhcmlhbnRBbHRlcm5hdGVzID09IG90aGVyLm1fdmFyaWFudEFsdGVybmF0ZXMKLSAgICAg
ICAgJiYgbV92YXJpYW50RWFzdEFzaWFuVmFyaWFudCA9PSBvdGhlci5tX3ZhcmlhbnRFYXN0QXNp
YW5WYXJpYW50Ci0gICAgICAgICYmIG1fdmFyaWFudEVhc3RBc2lhbldpZHRoID09IG90aGVyLm1f
dmFyaWFudEVhc3RBc2lhbldpZHRoCi0gICAgICAgICYmIG1fdmFyaWFudEVhc3RBc2lhblJ1Ynkg
PT0gb3RoZXIubV92YXJpYW50RWFzdEFzaWFuUnVieQotICAgICAgICAmJiBtX29wdGljYWxTaXpp
bmcgPT0gb3RoZXIubV9vcHRpY2FsU2l6aW5nCi0gICAgICAgICYmIG1fZm9udFN0eWxlQXhpcyA9
PSBvdGhlci5tX2ZvbnRTdHlsZUF4aXMKLSAgICAgICAgJiYgbV9zaG91bGRBbGxvd1VzZXJJbnN0
YWxsZWRGb250cyA9PSBvdGhlci5tX3Nob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzOwotfQot
Ci0vLyBGSVhNRTogTW92ZSB0byBhIGZpbGUgb2YgaXRzIG93bi4KIGNsYXNzIEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24gOiBwdWJsaWMgRm9udERlc2NyaXB0aW9uIHsKIHB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCBGb250Q2FzY2FkZURlc2NyaXB0aW9uKCk7CkBAIC0zNDMsNSArMTY0LDMgQEAg
aW5saW5lIGJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6b3BlcgogfQogCiB9Ci0KLSNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
RGVzY3JpcHRpb24uY3BwCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwz
MCArMzAsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKIAorI2luY2x1ZGUgIkZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJM
b2NhbGVUb1NjcmlwdE1hcHBpbmcuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IFNhbWVTaXplQXNGb250Q2FzY2FkZURl
c2NyaXB0aW9uIHsKLSAgICBWZWN0b3I8dm9pZCo+IHZlY3RvcjsKLSNpZiBFTkFCTEUoVkFSSUFU
SU9OX0ZPTlRTKQotICAgIFZlY3Rvcjx2b2lkKj4gdmVjdG9yMjsKLSNlbHNlCi0gICAgY2hhciBj
OwotI2VuZGlmCi0gICAgQXRvbWljU3RyaW5nIHN0cmluZzsKLSAgICBpbnQxNl90IGZvbnRTZWxl
Y3Rpb25SZXF1ZXN0WzNdOwotICAgIGZsb2F0IHNpemU7Ci0gICAgdW5zaWduZWQgYml0ZmllbGRz
MTsKLSAgICB1bnNpZ25lZCBiaXRmaWVsZHMyIDogMjI7Ci0gICAgdm9pZCogYXJyYXk7Ci0gICAg
ZmxvYXQgc2l6ZTI7Ci0gICAgdW5zaWduZWQgYml0ZmllbGRzMyA6IDEwOwotfTsKLQotQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24pID09IHNpemVvZihTYW1lU2l6
ZUFzRm9udENhc2NhZGVEZXNjcmlwdGlvbiksIEZvbnRDYXNjYWRlRGVzY3JpcHRpb25fc2hvdWxk
X3N0YXlfc21hbGwpOwotCiBGb250RGVzY3JpcHRpb246OkZvbnREZXNjcmlwdGlvbigpCiAgICAg
OiBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0IHsgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlh
bFdlaWdodCgpLCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsU3RyZXRjaCgpLCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsSXRhbGljKCkgfQogICAgICwgbV9vcmllbnRhdGlv
bihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsKSkKQEAg
LTkwLDk4ICs3MSwxMCBAQCB2b2lkIEZvbnREZXNjcmlwdGlvbjo6c2V0TG9jYWxlKGNvbnN0IEF0
CiAgICAgbV9zY3JpcHQgPSBsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKG1fbG9j
YWxlKTsKIH0KIAotRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Rm9udENhc2NhZGVEZXNjcmlwdGlv
bigpCi0gICAgOiBtX2lzQWJzb2x1dGVTaXplKGZhbHNlKQotICAgICwgbV9rZXJuaW5nKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihLZXJuaW5nOjpBdXRvKSkKLSAgICAsIG1fa2V5d29yZFNpemUoMCkK
LSAgICAsIG1fZm9udFNtb290aGluZyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFNtb290aGlu
Z01vZGU6OkF1dG9TbW9vdGhpbmcpKQotICAgICwgbV9pc1NwZWNpZmllZEZvbnQoZmFsc2UpCi17
Ci19Ci0KICNpZiAhVVNFX1BMQVRGT1JNX1NZU1RFTV9GQUxMQkFDS19MSVNUCiB2b2lkIEZvbnRE
ZXNjcmlwdGlvbjo6aW52YWxpZGF0ZUNhY2hlcygpCiB7CiB9Ci0KLXVuc2lnbmVkIEZvbnRDYXNj
YWRlRGVzY3JpcHRpb246OmVmZmVjdGl2ZUZhbWlseUNvdW50KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZmFtaWx5Q291bnQoKTsKLX0KLQotRm9udEZhbWlseVNwZWNpZmljYXRpb24gRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6ZWZmZWN0aXZlRmFtaWx5QXQodW5zaWduZWQgaSkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZmFtaWx5QXQoaSk7Ci19CiAjZW5kaWYKIAotRm9udFNlbGVjdGlvblZhbHVlIEZv
bnRDYXNjYWRlRGVzY3JpcHRpb246OmxpZ2h0ZXJXZWlnaHQoRm9udFNlbGVjdGlvblZhbHVlIHdl
aWdodCkKLXsKLSAgICBpZiAod2VpZ2h0IDwgRm9udFNlbGVjdGlvblZhbHVlKDEwMCkpCi0gICAg
ICAgIHJldHVybiB3ZWlnaHQ7Ci0gICAgaWYgKHdlaWdodCA8IEZvbnRTZWxlY3Rpb25WYWx1ZSg1
NTApKQotICAgICAgICByZXR1cm4gRm9udFNlbGVjdGlvblZhbHVlKDEwMCk7Ci0gICAgaWYgKHdl
aWdodCA8IEZvbnRTZWxlY3Rpb25WYWx1ZSg3NTApKQotICAgICAgICByZXR1cm4gRm9udFNlbGVj
dGlvblZhbHVlKDQwMCk7Ci0gICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25WYWx1ZSg3MDApOwotfQot
Ci1Gb250U2VsZWN0aW9uVmFsdWUgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Ym9sZGVyV2VpZ2h0
KEZvbnRTZWxlY3Rpb25WYWx1ZSB3ZWlnaHQpCi17Ci0gICAgaWYgKHdlaWdodCA8IEZvbnRTZWxl
Y3Rpb25WYWx1ZSgzNTApKQotICAgICAgICByZXR1cm4gRm9udFNlbGVjdGlvblZhbHVlKDQwMCk7
Ci0gICAgaWYgKHdlaWdodCA8IEZvbnRTZWxlY3Rpb25WYWx1ZSg1NTApKQotICAgICAgICByZXR1
cm4gRm9udFNlbGVjdGlvblZhbHVlKDcwMCk7Ci0gICAgaWYgKHdlaWdodCA8IEZvbnRTZWxlY3Rp
b25WYWx1ZSg5MDApKQotICAgICAgICByZXR1cm4gRm9udFNlbGVjdGlvblZhbHVlKDkwMCk7Ci0g
ICAgcmV0dXJuIHdlaWdodDsKLX0KLQotI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCi0KLWJv
b2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWxpZXNFcXVhbEZvclRleHRBdXRvU2l6aW5n
KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdAotewotICAgIHVuc2ln
bmVkIHRoaXNGYW1pbHlDb3VudCA9IGZhbWlseUNvdW50KCk7Ci0gICAgdW5zaWduZWQgb3RoZXJG
YW1pbHlDb3VudCA9IG90aGVyLmZhbWlseUNvdW50KCk7Ci0KLSAgICBpZiAodGhpc0ZhbWlseUNv
dW50ICE9IG90aGVyRmFtaWx5Q291bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzRmFtaWx5Q291bnQ7ICsraSkgewotICAgICAgICBp
ZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5QXQoaSksIG90aGVyLmZhbWlseUF0KGkp
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotI2VuZGlmIC8vIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCi0KLWJvb2wgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBBdG9taWNTdHJpbmcmIGZh
bWlseTEsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5MikKLXsKLSAgICAvLyBGSVhNRTogPHJk
YXI6Ly9wcm9ibGVtLzMzNTk0MjUzPiBDb3JlVGV4dCBtYXRjaGVzIGRvdC1wcmVmaXhlZCBmb250
IG5hbWVzIGNhc2Ugc2Vuc2l0aXZlbHkuIFdlIHNob3VsZAotICAgIC8vIGFsd2F5cyB0YWtlIHRo
ZSBjYXNlIGluc2Vuc2l0aXZlIHBhdGNoIG9uY2UgdGhpcyByYWRhciBpcyBmaXhlZC4KLSAgICBp
ZiAoZmFtaWx5MS5zdGFydHNXaXRoKCcuJykpCi0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoOjpl
cXVhbChmYW1pbHkxLnN0cmluZygpLCBmYW1pbHkyLnN0cmluZygpKTsKLSAgICByZXR1cm4gQVND
SUlDYXNlSW5zZW5zaXRpdmVIYXNoOjplcXVhbChmYW1pbHkxLCBmYW1pbHkyKTsKLX0KLQotdW5z
aWduZWQgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZUhhc2goY29uc3QgQXRvbWlj
U3RyaW5nJiBmYW1pbHkpCi17Ci0gICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zMzU5NDI1
Mz4gQ29yZVRleHQgbWF0Y2hlcyBkb3QtcHJlZml4ZWQgZm9udCBuYW1lcyBjYXNlIHNlbnNpdGl2
ZWx5LiBXZSBzaG91bGQKLSAgICAvLyBhbHdheXMgdGFrZSB0aGUgY2FzZSBpbnNlbnNpdGl2ZSBw
YXRjaCBvbmNlIHRoaXMgcmFkYXIgaXMgZml4ZWQuCi0gICAgaWYgKGZhbWlseS5zdGFydHNXaXRo
KCcuJykpCi0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoOjpoYXNoKGZhbWlseS5zdHJpbmcoKSk7
Ci0gICAgcmV0dXJuIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaDo6aGFzaChmYW1pbHkpOwotfQot
Ci1TdHJpbmcgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Zm9sZGVkRmFtaWx5TmFtZShjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseSkKLXsKLSAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzMz
NTk0MjUzPiBDb3JlVGV4dCBtYXRjaGVzIGRvdC1wcmVmaXhlZCBmb250IG5hbWVzIGNhc2Ugc2Vu
c2l0aXZlbHkuIFdlIHNob3VsZAotICAgIC8vIGFsd2F5cyB0YWtlIHRoZSBjYXNlIGluc2Vuc2l0
aXZlIHBhdGNoIG9uY2UgdGhpcyByYWRhciBpcyBmaXhlZC4KLSAgICBpZiAoZmFtaWx5LnN0YXJ0
c1dpdGgoJy4nKSkKLSAgICAgICAgcmV0dXJuIGZhbWlseS5zdHJpbmcoKTsKLSAgICByZXR1cm4g
ZmFtaWx5LnN0cmluZygpLmZvbGRDYXNlKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNj
cmlwdGlvbi5oCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250RGVzY3JpcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjIsMzYgKzIyLDE4
IEBACiAgKgogICovCiAKLSNpZm5kZWYgRm9udERlc2NyaXB0aW9uX2gKLSNkZWZpbmUgRm9udERl
c2NyaXB0aW9uX2gKKyNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5o
IgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaCIKICNpbmNsdWRlICJGb250VGFn
Z2VkU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKICNpbmNsdWRlICJXZWJLaXRG
b250RmFtaWx5TmFtZXMuaCIKICNpbmNsdWRlIDx1bmljb2RlL3VzY3JpcHQuaD4KICNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkQXJyYXkuaD4KLSNp
bmNsdWRlIDx3dGYvVmFyaWFudC5oPgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAi
Rm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5oIgotI2Vsc2UKLSNpbmNsdWRlICJGb250
RmFtaWx5U3BlY2lmaWNhdGlvbk51bGwuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLXR5cGVkZWYgRm9udEZhbWlseVNwZWNpZmljYXRpb25D
b3JlVGV4dCBGb250RmFtaWx5UGxhdGZvcm1TcGVjaWZpY2F0aW9uOwotI2Vsc2UKLXR5cGVkZWYg
Rm9udEZhbWlseVNwZWNpZmljYXRpb25OdWxsIEZvbnRGYW1pbHlQbGF0Zm9ybVNwZWNpZmljYXRp
b247Ci0jZW5kaWYKIAogI2RlZmluZSBVU0VfUExBVEZPUk1fU1lTVEVNX0ZBTExCQUNLX0xJU1Qg
KChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEx
MDAwMCkgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMDEzMDApKQogCi10eXBlZGVmIFZhcmlhbnQ8QXRvbWljU3RyaW5nLCBGb250RmFtaWx5
UGxhdGZvcm1TcGVjaWZpY2F0aW9uPiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbjsKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdEZvbnRGYW1pbHlOYW1lczsKIApA
QCAtMjIzLDEyNSArMjA1LDQgQEAgaW5saW5lIGJvb2wgRm9udERlc2NyaXB0aW9uOjpvcGVyYXRv
cj09KAogICAgICAgICAmJiBtX3Nob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzID09IG90aGVy
Lm1fc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHM7CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRv
IGEgZmlsZSBvZiBpdHMgb3duLgotY2xhc3MgRm9udENhc2NhZGVEZXNjcmlwdGlvbiA6IHB1Ymxp
YyBGb250RGVzY3JpcHRpb24gewotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24oKTsKLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsg
fQotCi0gICAgdW5zaWduZWQgZmFtaWx5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlsaWVz
LnNpemUoKTsgfQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmlyc3RGYW1pbHkoKSBjb25zdCB7
IHJldHVybiBmYW1pbHlBdCgwKTsgfQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5QXQo
dW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9mYW1pbGllc1tpXTsgfQotICAgIGNvbnN0IFJl
ZkNvdW50ZWRBcnJheTxBdG9taWNTdHJpbmc+JiBmYW1pbGllcygpIGNvbnN0IHsgcmV0dXJuIG1f
ZmFtaWxpZXM7IH0KLQotICAgIHN0YXRpYyBib29sIGZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3Qg
QXRvbWljU3RyaW5nJiwgY29uc3QgQXRvbWljU3RyaW5nJik7Ci0gICAgc3RhdGljIHVuc2lnbmVk
IGZhbWlseU5hbWVIYXNoKGNvbnN0IEF0b21pY1N0cmluZyYpOwotICAgIHN0YXRpYyBTdHJpbmcg
Zm9sZGVkRmFtaWx5TmFtZShjb25zdCBBdG9taWNTdHJpbmcmKTsKLQotICAgIHVuc2lnbmVkIGVm
ZmVjdGl2ZUZhbWlseUNvdW50KCkgY29uc3Q7Ci0gICAgRm9udEZhbWlseVNwZWNpZmljYXRpb24g
ZWZmZWN0aXZlRmFtaWx5QXQodW5zaWduZWQpIGNvbnN0OwotCi0gICAgZmxvYXQgc3BlY2lmaWVk
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWVkU2l6ZTsgfQotICAgIGJvb2wgaXNBYnNv
bHV0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2lzQWJzb2x1dGVTaXplOyB9Ci0gICAgRm9udFNl
bGVjdGlvblZhbHVlIGxpZ2h0ZXJXZWlnaHQoKSBjb25zdCB7IHJldHVybiBsaWdodGVyV2VpZ2h0
KHdlaWdodCgpKTsgfQotICAgIEZvbnRTZWxlY3Rpb25WYWx1ZSBib2xkZXJXZWlnaHQoKSBjb25z
dCB7IHJldHVybiBib2xkZXJXZWlnaHQod2VpZ2h0KCkpOyB9Ci0gICAgc3RhdGljIEZvbnRTZWxl
Y3Rpb25WYWx1ZSBsaWdodGVyV2VpZ2h0KEZvbnRTZWxlY3Rpb25WYWx1ZSk7Ci0gICAgc3RhdGlj
IEZvbnRTZWxlY3Rpb25WYWx1ZSBib2xkZXJXZWlnaHQoRm9udFNlbGVjdGlvblZhbHVlKTsKLQot
ICAgIC8vIG9ubHkgdXNlIGZpeGVkIGRlZmF1bHQgc2l6ZSB3aGVuIHRoZXJlIGlzIG9ubHkgb25l
IGZvbnQgZmFtaWx5LCBhbmQgdGhhdCBmYW1pbHkgaXMgIm1vbm9zcGFjZSIKLSAgICBib29sIHVz
ZUZpeGVkRGVmYXVsdFNpemUoKSBjb25zdCB7IHJldHVybiBmYW1pbHlDb3VudCgpID09IDEgJiYg
Zmlyc3RGYW1pbHkoKSA9PSBtb25vc3BhY2VGYW1pbHk7IH0KLQotICAgIEtlcm5pbmcga2Vybmlu
ZygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEtlcm5pbmc+KG1fa2VybmluZyk7IH0KLSAg
ICB1bnNpZ25lZCBrZXl3b3JkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5d29yZFNpemU7IH0K
LSAgICBDU1NWYWx1ZUlEIGtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIENTU1ZhbHVlSUQgaWRlbnRpZmllciA9IG1fa2V5d29yZFNpemUgPyBzdGF0aWNfY2Fz
dDxDU1NWYWx1ZUlEPihDU1NWYWx1ZVh4U21hbGwgKyBtX2tleXdvcmRTaXplIC0gMSkgOiBDU1NW
YWx1ZUludmFsaWQ7Ci0gICAgICAgIEFTU0VSVChpZGVudGlmaWVyID09IENTU1ZhbHVlSW52YWxp
ZCB8fCAoaWRlbnRpZmllciA+PSBDU1NWYWx1ZVh4U21hbGwgJiYgaWRlbnRpZmllciA8PSBDU1NW
YWx1ZVdlYmtpdFh4eExhcmdlKSk7Ci0gICAgICAgIHJldHVybiBpZGVudGlmaWVyOwotICAgIH0K
LSAgICBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8Rm9udFNtb290aGluZ01vZGU+KG1fZm9udFNtb290aGluZyk7IH0KLSAgICBib29s
IGlzU3BlY2lmaWVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTcGVjaWZpZWRGb250OyB9Ci0K
LSAgICB2b2lkIHNldE9uZUZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkgeyBBU1NF
UlQobV9mYW1pbGllcy5zaXplKCkgPT0gMSk7IG1fZmFtaWxpZXNbMF0gPSBmYW1pbHk7IH0KLSAg
ICB2b2lkIHNldEZhbWlsaWVzKGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBmYW1pbGllcykg
eyBtX2ZhbWlsaWVzID0gUmVmQ291bnRlZEFycmF5PEF0b21pY1N0cmluZz4oZmFtaWxpZXMpOyB9
Ci0gICAgdm9pZCBzZXRGYW1pbGllcyhjb25zdCBSZWZDb3VudGVkQXJyYXk8QXRvbWljU3RyaW5n
PiYgZmFtaWxpZXMpIHsgbV9mYW1pbGllcyA9IGZhbWlsaWVzOyB9Ci0gICAgdm9pZCBzZXRTcGVj
aWZpZWRTaXplKGZsb2F0IHMpIHsgbV9zcGVjaWZpZWRTaXplID0gY2xhbXBUb0Zsb2F0KHMpOyB9
Ci0gICAgdm9pZCBzZXRJc0Fic29sdXRlU2l6ZShib29sIHMpIHsgbV9pc0Fic29sdXRlU2l6ZSA9
IHM7IH0KLSAgICB2b2lkIHNldEtlcm5pbmcoS2VybmluZyBrZXJuaW5nKSB7IG1fa2VybmluZyA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihrZXJuaW5nKTsgfQotICAgIHZvaWQgc2V0S2V5d29yZFNp
emUodW5zaWduZWQgc2l6ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzaXplIDw9IDgpOwotICAg
ICAgICBtX2tleXdvcmRTaXplID0gc2l6ZTsKLSAgICAgICAgQVNTRVJUKG1fa2V5d29yZFNpemUg
PT0gc2l6ZSk7IC8vIE1ha2Ugc3VyZSBpdCBmaXRzIGluIHRoZSBiaXRmaWVsZC4KLSAgICB9Ci0g
ICAgdm9pZCBzZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVyKENTU1ZhbHVlSUQgaWRlbnRpZmll
cikKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghaWRlbnRpZmllciB8fCAoaWRlbnRpZmllciA+PSBD
U1NWYWx1ZVh4U21hbGwgJiYgaWRlbnRpZmllciA8PSBDU1NWYWx1ZVdlYmtpdFh4eExhcmdlKSk7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoQ1NTVmFsdWVXZWJraXRYeHhMYXJnZSAtIENTU1ZhbHVl
WHhTbWFsbCArIDEgPT0gOCwgIk1heGltdW0ga2V5d29yZCBzaXplIHNob3VsZCBiZSA4LiIpOwot
ICAgICAgICBzZXRLZXl3b3JkU2l6ZShpZGVudGlmaWVyID8gaWRlbnRpZmllciAtIENTU1ZhbHVl
WHhTbWFsbCArIDEgOiAwKTsKLSAgICB9Ci0gICAgdm9pZCBzZXRGb250U21vb3RoaW5nKEZvbnRT
bW9vdGhpbmdNb2RlIHNtb290aGluZykgeyBtX2ZvbnRTbW9vdGhpbmcgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc21vb3RoaW5nKTsgfQotICAgIHZvaWQgc2V0SXNTcGVjaWZpZWRGb250KGJvb2wg
aXNTcGVjaWZpZWRGb250KSB7IG1faXNTcGVjaWZpZWRGb250ID0gaXNTcGVjaWZpZWRGb250OyB9
Ci0KLSNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQotICAgIGJvb2wgZmFtaWxpZXNFcXVhbEZv
clRleHRBdXRvU2l6aW5nKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIG90aGVyKSBjb25z
dDsKLQotICAgIGJvb2wgZXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYW1pbGllc0Vx
dWFsRm9yVGV4dEF1dG9TaXppbmcob3RoZXIpCi0gICAgICAgICAgICAmJiBtX3NwZWNpZmllZFNp
emUgPT0gb3RoZXIubV9zcGVjaWZpZWRTaXplCi0gICAgICAgICAgICAmJiB2YXJpYW50U2V0dGlu
Z3MoKSA9PSBvdGhlci52YXJpYW50U2V0dGluZ3MoKQotICAgICAgICAgICAgJiYgbV9pc0Fic29s
dXRlU2l6ZSA9PSBvdGhlci5tX2lzQWJzb2x1dGVTaXplOwotICAgIH0KLSNlbmRpZgotCi0gICAg
Ly8gSW5pdGlhbCB2YWx1ZXMgZm9yIGZvbnQgcHJvcGVydGllcy4KLSAgICBzdGF0aWMgc3RkOjpv
cHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IGluaXRpYWxJdGFsaWMoKSB7IHJldHVybiBzdGQ6
Om51bGxvcHQ7IH0KLSAgICBzdGF0aWMgRm9udFN0eWxlQXhpcyBpbml0aWFsRm9udFN0eWxlQXhp
cygpIHsgcmV0dXJuIEZvbnRTdHlsZUF4aXM6OnNsbnQ7IH0KLSAgICBzdGF0aWMgRm9udFNlbGVj
dGlvblZhbHVlIGluaXRpYWxXZWlnaHQoKSB7IHJldHVybiBub3JtYWxXZWlnaHRWYWx1ZSgpOyB9
Ci0gICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBpbml0aWFsU3RyZXRjaCgpIHsgcmV0dXJu
IG5vcm1hbFN0cmV0Y2hWYWx1ZSgpOyB9Ci0gICAgc3RhdGljIEZvbnRTbWFsbENhcHMgaW5pdGlh
bFNtYWxsQ2FwcygpIHsgcmV0dXJuIEZvbnRTbWFsbENhcHM6Ok9mZjsgfQotICAgIHN0YXRpYyBL
ZXJuaW5nIGluaXRpYWxLZXJuaW5nKCkgeyByZXR1cm4gS2VybmluZzo6QXV0bzsgfQotICAgIHN0
YXRpYyBGb250U21vb3RoaW5nTW9kZSBpbml0aWFsRm9udFNtb290aGluZygpIHsgcmV0dXJuIEZv
bnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nOyB9Ci0gICAgc3RhdGljIFRleHRSZW5kZXJp
bmdNb2RlIGluaXRpYWxUZXh0UmVuZGVyaW5nTW9kZSgpIHsgcmV0dXJuIFRleHRSZW5kZXJpbmdN
b2RlOjpBdXRvVGV4dFJlbmRlcmluZzsgfQotICAgIHN0YXRpYyBGb250U3ludGhlc2lzIGluaXRp
YWxGb250U3ludGhlc2lzKCkgeyByZXR1cm4gRm9udFN5bnRoZXNpc1dlaWdodCB8IEZvbnRTeW50
aGVzaXNTdHlsZSB8IEZvbnRTeW50aGVzaXNTbWFsbENhcHM7IH0KLSAgICBzdGF0aWMgRm9udFZh
cmlhbnRQb3NpdGlvbiBpbml0aWFsVmFyaWFudFBvc2l0aW9uKCkgeyByZXR1cm4gRm9udFZhcmlh
bnRQb3NpdGlvbjo6Tm9ybWFsOyB9Ci0gICAgc3RhdGljIEZvbnRWYXJpYW50Q2FwcyBpbml0aWFs
VmFyaWFudENhcHMoKSB7IHJldHVybiBGb250VmFyaWFudENhcHM6Ok5vcm1hbDsgfQotICAgIHN0
YXRpYyBGb250VmFyaWFudEFsdGVybmF0ZXMgaW5pdGlhbFZhcmlhbnRBbHRlcm5hdGVzKCkgeyBy
ZXR1cm4gRm9udFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWw7IH0KLSAgICBzdGF0aWMgRm9udE9w
dGljYWxTaXppbmcgaW5pdGlhbE9wdGljYWxTaXppbmcoKSB7IHJldHVybiBGb250T3B0aWNhbFNp
emluZzo6RW5hYmxlZDsgfQotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGluaXRpYWxM
b2NhbGUoKSB7IHJldHVybiBudWxsQXRvbSgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmQ291bnRl
ZEFycmF5PEF0b21pY1N0cmluZz4gbV9mYW1pbGllcyB7IDEgfTsKLQotICAgIGZsb2F0IG1fc3Bl
Y2lmaWVkU2l6ZSB7IDAgfTsgICAvLyBTcGVjaWZpZWQgQ1NTIHZhbHVlLiBJbmRlcGVuZGVudCBv
ZiByZW5kZXJpbmcgaXNzdWVzIHN1Y2ggYXMgaW50ZWdlcgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyByb3VuZGluZywgbWluaW11bSBmb250IHNpemVzLCBhbmQgem9vbWluZy4KLSAg
ICB1bnNpZ25lZCBtX2lzQWJzb2x1dGVTaXplIDogMTsgLy8gV2hldGhlciBvciBub3QgQ1NTIHNw
ZWNpZmllZCBhbiBleHBsaWNpdCBzaXplCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gKGxvZ2ljYWwgc2l6ZXMgbGlrZSAibWVkaXVtIiBkb24ndCBjb3VudCkuCi0gICAgdW5z
aWduZWQgbV9rZXJuaW5nIDogMjsgLy8gS2VybmluZwotCi0gICAgdW5zaWduZWQgbV9rZXl3b3Jk
U2l6ZSA6IDQ7IC8vIFdlIGNhY2hlIHdoZXRoZXIgb3Igbm90IGEgZm9udCBpcyBjdXJyZW50bHkg
cmVwcmVzZW50ZWQgYnkgYSBDU1Mga2V5d29yZCAoZS5nLiwgbWVkaXVtKS4gIElmIHNvLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiB3ZSBjYW4gYWNjdXJhdGVseSB0cmFuc2xh
dGUgYWNyb3NzIGRpZmZlcmVudCBnZW5lcmljIGZhbWlsaWVzIHRvIGFkanVzdCBmb3IgZGlmZmVy
ZW50IHByZWZlcmVuY2Ugc2V0dGluZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChl
LmcuLCAxM3B4IG1vbm9zcGFjZSB2cy4gMTZweCBldmVyeXRoaW5nIGVsc2UpLiAgU2l6ZXMgYXJl
IDEtOCAobGlrZSB0aGUgSFRNTCBzaXplIHZhbHVlcyBmb3IgPGZvbnQ+KS4KLQotICAgIHVuc2ln
bmVkIG1fZm9udFNtb290aGluZyA6IDI7IC8vIEZvbnRTbW9vdGhpbmdNb2RlCi0gICAgdW5zaWdu
ZWQgbV9pc1NwZWNpZmllZEZvbnQgOiAxOyAvLyBUcnVlIGlmIGEgd2ViIHBhZ2Ugc3BlY2lmaWVz
IGEgbm9uLWdlbmVyaWMgZm9udCBmYW1pbHkgYXMgdGhlIGZpcnN0IGZvbnQgZmFtaWx5LgotfTsK
LQotaW5saW5lIGJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6b3BlcmF0b3I9PShjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gRm9udERl
c2NyaXB0aW9uOjpvcGVyYXRvcj09KG90aGVyKQotICAgICAgICAmJiBtX2ZhbWlsaWVzID09IG90
aGVyLm1fZmFtaWxpZXMKLSAgICAgICAgJiYgbV9zcGVjaWZpZWRTaXplID09IG90aGVyLm1fc3Bl
Y2lmaWVkU2l6ZQotICAgICAgICAmJiBtX2lzQWJzb2x1dGVTaXplID09IG90aGVyLm1faXNBYnNv
bHV0ZVNpemUKLSAgICAgICAgJiYgbV9rZXJuaW5nID09IG90aGVyLm1fa2VybmluZwotICAgICAg
ICAmJiBtX2tleXdvcmRTaXplID09IG90aGVyLm1fa2V5d29yZFNpemUKLSAgICAgICAgJiYgbV9m
b250U21vb3RoaW5nID09IG90aGVyLm1fZm9udFNtb290aGluZwotICAgICAgICAmJiBtX2lzU3Bl
Y2lmaWVkRm9udCA9PSBvdGhlci5tX2lzU3BlY2lmaWVkRm9udDsKLX0KLQogfQotCi0jZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAJKHJl
dmlzaW9uIDIzNjkxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NiArNDIsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbVBy
aXZhdGUuaCIKICNpbmNsdWRlICJTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oIgorI2lu
Y2x1ZGUgIldpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgiCiAjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDIzNjkxMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiQ291bnRlckRpcmVjdGl2ZXMuaCIKICNpbmNs
dWRlICJEYXRhUmVmLmgiCiAjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUg
IkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaCIK
ICNpbmNsdWRlICJHYXBMZW5ndGguaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAjaW5j
bHVkZSAiTGVuZ3RoLmgiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351775</attachid>
            <date>2018-10-08 07:30:40 -0700</date>
            <delta_ts>2018-10-08 07:34:38 -0700</delta_ts>
            <desc>patch</desc>
            <filename>fontcascadedescription-file-2.patch</filename>
            <type>text/plain</type>
            <size>79491</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNjkxMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MiBAQAorMjAxOC0xMC0wOCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBGb250Q2FzY2FkZURl
c2NyaXB0aW9uIHRvIGEgZmlsZSBvZiBpdHMgb3duCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTAzNDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250RGVzY3JpcHRpb24uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9u
OjpGb250RGVzY3JpcHRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bV9zaG91bGRB
bGxvd1VzZXJJbnN0YWxsZWRGb250cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
RGVzY3JpcHRpb246OnNldExvY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
RGVzY3JpcHRpb246OmludmFsaWRhdGVDYWNoZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmguCisgICAgICAgIChX
ZWJDb3JlOjpGb250RGVzY3JpcHRpb246Om9wZXJhdG9yIT0gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpjb21wdXRlZFNpemUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpjb21wdXRlZFBpeGVsU2l6
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246Oml0
YWxpYyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246
OnN0cmV0Y2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0
aW9uOjp3ZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2Ny
aXB0aW9uOjpmb250U2VsZWN0aW9uUmVxdWVzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnJlbmRlcmluZ01vZGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjp0ZXh0UmVuZGVyaW5nTW9kZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNjcmlwdCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OmxvY2Fs
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246Om9y
aWVudGF0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlw
dGlvbjo6bm9uQ0pLR2x5cGhPcmllbnRhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb250RGVzY3JpcHRpb246OndpZHRoVmFyaWFudCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OmZlYXR1cmVTZXR0aW5ncyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnZhcmlhdGlvblNl
dHRpbmdzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlv
bjo6Zm9udFN5bnRoZXNpcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
RGVzY3JpcHRpb246OnZhcmlhbnRDb21tb25MaWdhdHVyZXMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjp2YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0
dXJlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246
OnZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6dmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6dmFyaWFudFBv
c2l0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlv
bjo6dmFyaWFudENhcHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uOjp2YXJpYW50TnVtZXJpY0ZpZ3VyZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnZhcmlhbnROdW1lcmljU3BhY2luZyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnZhcmlhbnROdW1l
cmljRnJhY3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2Ny
aXB0aW9uOjp2YXJpYW50TnVtZXJpY09yZGluYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjp2YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6dmFyaWFudEFs
dGVybmF0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0
aW9uOjp2YXJpYW50RWFzdEFzaWFuVmFyaWFudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnZhcmlhbnRFYXN0QXNpYW5XaWR0aCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnZhcmlhbnRFYXN0QXNp
YW5SdWJ5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlv
bjo6dmFyaWFudFNldHRpbmdzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnREZXNjcmlwdGlvbjo6b3B0aWNhbFNpemluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb250RGVzY3JpcHRpb246OmZvbnRTdHlsZUF4aXMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzaG91bGRBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRp
b246OnNldENvbXB1dGVkU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OnNldEl0YWxpYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OnNldFN0cmV0Y2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uOjpzZXRJc0l0YWxpYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
RGVzY3JpcHRpb246OnNldFdlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
RGVzY3JpcHRpb246OnNldFJlbmRlcmluZ01vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRUZXh0UmVuZGVyaW5nTW9kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldE9yaWVudGF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0Tm9uQ0pLR2x5cGhPcmllbnRh
dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFdp
ZHRoVmFyaWFudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246
OnNldEZlYXR1cmVTZXR0aW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OnNldFZhcmlhdGlvblNldHRpbmdzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0Rm9udFN5bnRoZXNpcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFZhcmlhbnRDb21tb25MaWdhdHVyZXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50RGlz
Y3JldGlvbmFyeUxpZ2F0dXJlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OnNldFZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0VmFyaWFudENvbnRleHR1YWxBbHRlcm5h
dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0VmFy
aWFudFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlv
bjo6c2V0VmFyaWFudENhcHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2Ny
aXB0aW9uOjpzZXRWYXJpYW50TnVtZXJpY0ZpZ3VyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGb250RGVzY3JpcHRpb246OnNldFZhcmlhbnROdW1lcmljU3BhY2luZyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFZhcmlhbnROdW1lcmljRnJh
Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRW
YXJpYW50TnVtZXJpY09yZGluYWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uOjpzZXRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0VmFyaWFudEFsdGVybmF0ZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50RWFzdEFz
aWFuVmFyaWFudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246
OnNldFZhcmlhbnRFYXN0QXNpYW5XaWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
b250RGVzY3JpcHRpb246OnNldFZhcmlhbnRFYXN0QXNpYW5SdWJ5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0T3B0aWNhbFNpemluZyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldEZvbnRTdHlsZUF4aXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRTaG91bGRBbGxv
d1VzZXJJbnN0YWxsZWRGb250cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246Om9wZXJhdG9yPT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OmludmFsaWRhdGVDYWNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjplZmZlY3RpdmVGYW1pbHlDb3VudCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9u
OjplZmZlY3RpdmVGYW1pbHlBdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZURlc2NyaXB0aW9uOjpsaWdodGVyV2VpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmJvbGRlcldlaWdodCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbGllc0VxdWFs
Rm9yVGV4dEF1dG9TaXppbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lSGFzaCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmb2xkZWRG
YW1pbHlOYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVz
Y3JpcHRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246Om9w
ZXJhdG9yIT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVE
ZXNjcmlwdGlvbjo6ZmFtaWx5Q291bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Zmlyc3RGYW1pbHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5QXQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFt
aWxpZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6c3BlY2lmaWVkU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppc0Fic29sdXRlU2l6ZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpsaWdodGVyV2VpZ2h0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRp
b246OmJvbGRlcldlaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjp1c2VGaXhlZERlZmF1bHRTaXplIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246Omtlcm5pbmcgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6a2V5
d29yZFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVE
ZXNjcmlwdGlvbjo6a2V5d29yZFNpemVBc0lkZW50aWZpZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Zm9udFNtb290aGluZyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpp
c1NwZWNpZmllZEZvbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6c2V0T25lRmFtaWx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OnNldEZhbWlsaWVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OnNldFNwZWNpZmllZFNpemUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6c2V0SXNB
YnNvbHV0ZVNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6c2V0S2VybmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpzZXRLZXl3b3JkU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpzZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OnNl
dEZvbnRTbW9vdGhpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVE
ZXNjcmlwdGlvbjo6c2V0SXNTcGVjaWZpZWRGb250KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmVxdWFsRm9yVGV4dEF1dG9TaXppbmcgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5p
dGlhbEl0YWxpYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2Ny
aXB0aW9uOjppbml0aWFsRm9udFN0eWxlQXhpcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsV2VpZ2h0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxTdHJldGNoKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxT
bWFsbENhcHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlw
dGlvbjo6aW5pdGlhbEtlcm5pbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbEZvbnRTbW9vdGhpbmcpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbFRleHRSZW5kZXJpbmdN
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246
OmluaXRpYWxGb250U3ludGhlc2lzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxWYXJpYW50UG9zaXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbFZhcmlhbnRDYXBz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246Omlu
aXRpYWxWYXJpYW50QWx0ZXJuYXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsT3B0aWNhbFNpemluZyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsTG9jYWxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246Om9wZXJhdG9y
PT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9S
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuaDoKKwogMjAxOC0xMC0wOCAgWWFjaW5lIEJhbmRvdSAgPHlhY2luZS5i
YW5kb3VfZXh0QHNvZnRhdGhvbWUuY29tPgogCiAgICAgICAgIFtFTUVdW0dTdHJlYW1lcl0gQWRk
IHN1cHBvcnQgZm9yIFdlYk0gZW5jcnlwdGVkIGNhcHMgImFwcGxpY2F0aW9uL3gtd2VibS1lbmMi
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjM2OTExKQorKysgU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE2MTAsNiArMTYxMCw3IEBAIHBsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dERlc2NyaXB0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbWlseVNwZWNpZmljYXRp
b25OdWxsLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjM2OTExKQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00ODExLDYg
KzQ4MTEsNyBAQAogCQlFNERFQUExODE3QTkzREMzMDAwRTA0MzAgLyogU3R5bGVUcmVlUmVzb2x2
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0REVB
QTE2MTdBOTNEQzMwMDBFMDQzMCAvKiBTdHlsZVRyZWVSZXNvbHZlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0RTI0MzgzMURBQjk1M0UwMEMy
NkU0QiAvKiBtZXRlckVsZW1lbnRTaGFkb3cuY3NzIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEUyNDM4MjFEQUI5NTNFMDBDMjZFNEIgLyogbWV0ZXJF
bGVtZW50U2hhZG93LmNzcyAqLzsgfTsKIAkJRTRFMzlBRkIxMzMwRUZBODAwM0FCMjc0IC8qIExl
Z2FjeVRpbGVMYXllclBvb2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0RTM5QUZBMTMzMEVGQTgwMDNBQjI3NCAvKiBMZWdhY3lUaWxlTGF5ZXJQb29s
LmggKi87IH07CisJCUU0RThCNEY1MjE2Qjk1NjUwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NEU4QjRGMjIxNkI4QjYwMDBCODgzNEQgLyogRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0RTlCMTE5MTgx
MDkxNkYwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RTlCMTE4MTgxMDkxNkYwMDNBQ0NE
RiAvKiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCAqLzsgfTsKIAkJRTRFOUIxMUQxODE0NTY5
QzAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RTlCMTFDMTgxNDU2OUMwMDNBQ0NERiAv
KiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggKi87IH07CiAJCUU0RjlFRUYzMTU2REEwMDcw
MEQyM0U3RSAvKiBTdHlsZVNoZWV0Q29udGVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RjlFRUYxMTU2RDg0QzQwMEQyM0U3RSAvKiBTdHlsZVNo
ZWV0Q29udGVudHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMTQ1NDcsNiArMTQ1NDgsOCBAQAogCQlFNEUyNDM4MjFEQUI5NTNFMDBDMjZFNEIg
LyogbWV0ZXJFbGVtZW50U2hhZG93LmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuY3NzOyBwYXRoID0gbWV0
ZXJFbGVtZW50U2hhZG93LmNzczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRFMzlB
RkExMzMwRUZBODAwM0FCMjc0IC8qIExlZ2FjeVRpbGVMYXllclBvb2wuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5VGlsZUxheWVyUG9vbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNEUzOUFGQzEzMzBFRkM1MDAzQUIyNzQgLyogTGVnYWN5VGlsZUxh
eWVyUG9vbC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExlZ2Fj
eVRpbGVMYXllclBvb2wubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0RThCNEYw
MjE2QjhCNUYwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEU4QjRGMjIxNkI4QjYwMDBCODgzNEQgLyog
Rm9udENhc2NhZGVEZXNjcmlwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGb250Q2FzY2FkZURlc2NyaXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0RTlCMTE4MTgxMDkxNkYwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTGluZUxheW91dFJlc29sdmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RTlCMTFBMTgxNDU2OTIwMDNBQ0NE
RiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFNEU5QjExQzE4MTQ1NjlDMDAzQUNDREYgLyogU2ltcGxlTGlu
ZUxheW91dEZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1w
bGVMaW5lTGF5b3V0RnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
Mzc0NSw2ICsyMzc0OCw4IEBACiAJCQkJQjJDM0RBNTIwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRD
YWNoZS5oICovLAogCQkJCUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZS5j
cHAgKi8sCiAJCQkJQjJDM0RBNTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlLmggKi8s
CisJCQkJRTRFOEI0RjAyMTZCOEI1RjAwQjg4MzREIC8qIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24u
Y3BwICovLAorCQkJCUU0RThCNEYyMjE2QjhCNjAwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uLmggKi8sCiAJCQkJQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRl
Rm9udHMuY3BwICovLAogCQkJCUIyQzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2Fk
ZUZvbnRzLmggKi8sCiAJCQkJMzdBQ0NFNjIwREEyQUE5NjAwODlFNjAyIC8qIEZvbnREZXNjcmlw
dGlvbi5jcHAgKi8sCkBAIC0yNzM5NSw2ICsyNzQwMCw3IEBACiAJCQkJQTE1RDc1MTYxRTY4RjdD
ODAwQTM1RkJDIC8qIEJsb2JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVERUYxRjQx
MjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUQzMUNE
RDE5MTk2MDIwMDAxMDA1QTMgLyogQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmggaW4gSGVhZGVycyAq
LywKKwkJCQlFNEU4QjRGNTIxNkI5NTY1MDBCODgzNEQgLyogRm9udENhc2NhZGVEZXNjcmlwdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEQzQjAwQUYyMTVENkE2OTAwNzZCOTgzIC8qIEJsb2JF
dmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M3N0MzRDcxREVGODUwQTAwQTUwQkZBIC8qIEJs
b2JMaW5lRW5kaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFDOTRBRjkxOTEzMDNGMDAwRDVB
ODkzIC8qIEJsb2JQYXJ0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAkocmV2aXNpb24gMjM2OTExKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsOCArMjYsOCBAQAogCiAjaW5jbHVkZSAiRGFzaEFycmF5LmgiCiAjaW5jbHVk
ZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaCIKICNpbmNsdWRl
ICJGb250Q2FzY2FkZUZvbnRzLmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5j
bHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZURlc2NyaXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcAkocmV2aXNpb24gMjM2OTExKQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uY3Bw
OjIzNjkxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
RGVzY3JpcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA3IE5pY2hvbGFzIFNoYW5rcyA8Y29udGFjdEBuaWNrc2hhbmtzLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisKKyNpbmNs
dWRlICJMb2NhbGVUb1NjcmlwdE1hcHBpbmcuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFNhbWVTaXplQXNGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uIHsKKyAgICBWZWN0b3I8dm9pZCo+IHZlY3RvcjsKKyNpZiBFTkFCTEUo
VkFSSUFUSU9OX0ZPTlRTKQorICAgIFZlY3Rvcjx2b2lkKj4gdmVjdG9yMjsKKyNlbHNlCisgICAg
Y2hhciBjOworI2VuZGlmCisgICAgQXRvbWljU3RyaW5nIHN0cmluZzsKKyAgICBpbnQxNl90IGZv
bnRTZWxlY3Rpb25SZXF1ZXN0WzNdOworICAgIGZsb2F0IHNpemU7CisgICAgdW5zaWduZWQgYml0
ZmllbGRzMTsKKyAgICB1bnNpZ25lZCBiaXRmaWVsZHMyIDogMjI7CisgICAgdm9pZCogYXJyYXk7
CisgICAgZmxvYXQgc2l6ZTI7CisgICAgdW5zaWduZWQgYml0ZmllbGRzMyA6IDEwOworfTsKKwor
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24pID09IHNpemVvZihT
YW1lU2l6ZUFzRm9udENhc2NhZGVEZXNjcmlwdGlvbiksIEZvbnRDYXNjYWRlRGVzY3JpcHRpb25f
c2hvdWxkX3N0YXlfc21hbGwpOworCitGb250RGVzY3JpcHRpb246OkZvbnREZXNjcmlwdGlvbigp
CisgICAgOiBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0IHsgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
aW5pdGlhbFdlaWdodCgpLCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsU3RyZXRjaCgp
LCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsSXRhbGljKCkgfQorICAgICwgbV9vcmll
bnRhdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFs
KSkKKyAgICAsIG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbjo6TWl4ZWQpKQorICAgICwgbV93aWR0aFZhcmlhbnQoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRXaWR0aFZhcmlhbnQ6OlJlZ3VsYXJXaWR0aCkpCisgICAg
LCBtX3JlbmRlcmluZ01vZGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRSZW5kZXJpbmdNb2Rl
OjpOb3JtYWwpKQorICAgICwgbV90ZXh0UmVuZGVyaW5nKHN0YXRpY19jYXN0PHVuc2lnbmVkPihU
ZXh0UmVuZGVyaW5nTW9kZTo6QXV0b1RleHRSZW5kZXJpbmcpKQorICAgICwgbV9zY3JpcHQoVVND
UklQVF9DT01NT04pCisgICAgLCBtX2ZvbnRTeW50aGVzaXMoRm9udFN5bnRoZXNpc1dlaWdodCB8
IEZvbnRTeW50aGVzaXNTdHlsZSB8IEZvbnRTeW50aGVzaXNTbWFsbENhcHMpCisgICAgLCBtX3Zh
cmlhbnRDb21tb25MaWdhdHVyZXMoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50TGln
YXR1cmVzOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcyhz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCkpCisgICAg
LCBtX3ZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250
VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKSkKKyAgICAsIG1fdmFyaWFudENvbnRleHR1YWxBbHRl
cm5hdGVzKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFs
KSkKKyAgICAsIG1fdmFyaWFudFBvc2l0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFy
aWFudFBvc2l0aW9uOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50Q2FwcyhzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oRm9udFZhcmlhbnRDYXBzOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50TnVtZXJp
Y0ZpZ3VyZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpO
b3JtYWwpKQorICAgICwgbV92YXJpYW50TnVtZXJpY1NwYWNpbmcoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6Ok5vcm1hbCkpCisgICAgLCBtX3ZhcmlhbnRO
dW1lcmljRnJhY3Rpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50TnVtZXJpY0Zy
YWN0aW9uOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50TnVtZXJpY09yZGluYWwoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6Ok5vcm1hbCkpCisgICAgLCBt
X3ZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJp
YW50TnVtZXJpY1NsYXNoZWRaZXJvOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50QWx0ZXJuYXRl
cyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWwpKQor
ICAgICwgbV92YXJpYW50RWFzdEFzaWFuVmFyaWFudChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9u
dFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50RWFzdEFz
aWFuV2lkdGgoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6
Ok5vcm1hbCkpCisgICAgLCBtX3ZhcmlhbnRFYXN0QXNpYW5SdWJ5KHN0YXRpY19jYXN0PHVuc2ln
bmVkPihGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbCkpCisgICAgLCBtX29wdGljYWxT
aXppbmcoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRPcHRpY2FsU2l6aW5nOjpFbmFibGVkKSkK
KyAgICAsIG1fZm9udFN0eWxlQXhpcyhGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsRm9u
dFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6Oml0YWwpCisgICAgLCBtX3Nob3VsZEFsbG93
VXNlckluc3RhbGxlZEZvbnRzKHN0YXRpY19jYXN0PHVuc2lnbmVkPihBbGxvd1VzZXJJbnN0YWxs
ZWRGb250czo6Tm8pKQoreworfQorCit2b2lkIEZvbnREZXNjcmlwdGlvbjo6c2V0TG9jYWxlKGNv
bnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQoreworICAgIG1fbG9jYWxlID0gbG9jYWxlOworICAg
IG1fc2NyaXB0ID0gbG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihtX2xvY2FsZSk7
Cit9CisKK0ZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkZvbnRDYXNjYWRlRGVzY3JpcHRpb24oKQor
ICAgIDogbV9pc0Fic29sdXRlU2l6ZShmYWxzZSkKKyAgICAsIG1fa2VybmluZyhzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oS2VybmluZzo6QXV0bykpCisgICAgLCBtX2tleXdvcmRTaXplKDApCisgICAg
LCBtX2ZvbnRTbW9vdGhpbmcoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRTbW9vdGhpbmdNb2Rl
OjpBdXRvU21vb3RoaW5nKSkKKyAgICAsIG1faXNTcGVjaWZpZWRGb250KGZhbHNlKQoreworfQor
CisjaWYgIVVTRV9QTEFURk9STV9TWVNURU1fRkFMTEJBQ0tfTElTVAordm9pZCBGb250RGVzY3Jp
cHRpb246OmludmFsaWRhdGVDYWNoZXMoKQoreworfQorCit1bnNpZ25lZCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uOjplZmZlY3RpdmVGYW1pbHlDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZh
bWlseUNvdW50KCk7Cit9CisKK0ZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb246OmVmZmVjdGl2ZUZhbWlseUF0KHVuc2lnbmVkIGkpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGZhbWlseUF0KGkpOworfQorI2VuZGlmCisKK0ZvbnRTZWxlY3Rpb25WYWx1ZSBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpsaWdodGVyV2VpZ2h0KEZvbnRTZWxlY3Rpb25WYWx1ZSB3ZWlnaHQp
Cit7CisgICAgaWYgKHdlaWdodCA8IEZvbnRTZWxlY3Rpb25WYWx1ZSgxMDApKQorICAgICAgICBy
ZXR1cm4gd2VpZ2h0OworICAgIGlmICh3ZWlnaHQgPCBGb250U2VsZWN0aW9uVmFsdWUoNTUwKSkK
KyAgICAgICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25WYWx1ZSgxMDApOworICAgIGlmICh3ZWlnaHQg
PCBGb250U2VsZWN0aW9uVmFsdWUoNzUwKSkKKyAgICAgICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25W
YWx1ZSg0MDApOworICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFsdWUoNzAwKTsKK30KKworRm9u
dFNlbGVjdGlvblZhbHVlIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmJvbGRlcldlaWdodChGb250
U2VsZWN0aW9uVmFsdWUgd2VpZ2h0KQoreworICAgIGlmICh3ZWlnaHQgPCBGb250U2VsZWN0aW9u
VmFsdWUoMzUwKSkKKyAgICAgICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25WYWx1ZSg0MDApOworICAg
IGlmICh3ZWlnaHQgPCBGb250U2VsZWN0aW9uVmFsdWUoNTUwKSkKKyAgICAgICAgcmV0dXJuIEZv
bnRTZWxlY3Rpb25WYWx1ZSg3MDApOworICAgIGlmICh3ZWlnaHQgPCBGb250U2VsZWN0aW9uVmFs
dWUoOTAwKSkKKyAgICAgICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25WYWx1ZSg5MDApOworICAgIHJl
dHVybiB3ZWlnaHQ7Cit9CisKKyNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQorCitib29sIEZv
bnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlsaWVzRXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25z
dCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKK3sKKyAgICB1bnNpZ25lZCB0
aGlzRmFtaWx5Q291bnQgPSBmYW1pbHlDb3VudCgpOworICAgIHVuc2lnbmVkIG90aGVyRmFtaWx5
Q291bnQgPSBvdGhlci5mYW1pbHlDb3VudCgpOworCisgICAgaWYgKHRoaXNGYW1pbHlDb3VudCAh
PSBvdGhlckZhbWlseUNvdW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdGhpc0ZhbWlseUNvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKCFl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKGZhbWlseUF0KGkpLCBvdGhlci5mYW1pbHlBdChpKSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQorCitib29sIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkx
LCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseTIpCit7CisgICAgLy8gRklYTUU6IDxyZGFyOi8v
cHJvYmxlbS8zMzU5NDI1Mz4gQ29yZVRleHQgbWF0Y2hlcyBkb3QtcHJlZml4ZWQgZm9udCBuYW1l
cyBjYXNlIHNlbnNpdGl2ZWx5LiBXZSBzaG91bGQKKyAgICAvLyBhbHdheXMgdGFrZSB0aGUgY2Fz
ZSBpbnNlbnNpdGl2ZSBwYXRjaCBvbmNlIHRoaXMgcmFkYXIgaXMgZml4ZWQuCisgICAgaWYgKGZh
bWlseTEuc3RhcnRzV2l0aCgnLicpKQorICAgICAgICByZXR1cm4gU3RyaW5nSGFzaDo6ZXF1YWwo
ZmFtaWx5MS5zdHJpbmcoKSwgZmFtaWx5Mi5zdHJpbmcoKSk7CisgICAgcmV0dXJuIEFTQ0lJQ2Fz
ZUluc2Vuc2l0aXZlSGFzaDo6ZXF1YWwoZmFtaWx5MSwgZmFtaWx5Mik7Cit9CisKK3Vuc2lnbmVk
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVIYXNoKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5KQoreworICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzM1OTQyNTM+IENv
cmVUZXh0IG1hdGNoZXMgZG90LXByZWZpeGVkIGZvbnQgbmFtZXMgY2FzZSBzZW5zaXRpdmVseS4g
V2Ugc2hvdWxkCisgICAgLy8gYWx3YXlzIHRha2UgdGhlIGNhc2UgaW5zZW5zaXRpdmUgcGF0Y2gg
b25jZSB0aGlzIHJhZGFyIGlzIGZpeGVkLgorICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0aCgnLicp
KQorICAgICAgICByZXR1cm4gU3RyaW5nSGFzaDo6aGFzaChmYW1pbHkuc3RyaW5nKCkpOworICAg
IHJldHVybiBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6Omhhc2goZmFtaWx5KTsKK30KKworU3Ry
aW5nIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZvbGRlZEZhbWlseU5hbWUoY29uc3QgQXRvbWlj
U3RyaW5nJiBmYW1pbHkpCit7CisgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zMzU5NDI1
Mz4gQ29yZVRleHQgbWF0Y2hlcyBkb3QtcHJlZml4ZWQgZm9udCBuYW1lcyBjYXNlIHNlbnNpdGl2
ZWx5LiBXZSBzaG91bGQKKyAgICAvLyBhbHdheXMgdGFrZSB0aGUgY2FzZSBpbnNlbnNpdGl2ZSBw
YXRjaCBvbmNlIHRoaXMgcmFkYXIgaXMgZml4ZWQuCisgICAgaWYgKGZhbWlseS5zdGFydHNXaXRo
KCcuJykpCisgICAgICAgIHJldHVybiBmYW1pbHkuc3RyaW5nKCk7CisgICAgcmV0dXJuIGZhbWls
eS5zdHJpbmcoKS5mb2xkQ2FzZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZURlc2NyaXB0aW9uLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0w
LDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZURlc2NyaXB0aW9uLmNwcAkocmV2aXNpb24gMjM2OTExKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDkgKzI4LDggQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGVEZXNjcmlwdGlvbi5o
IgogCi0jaW5jbHVkZSAiTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01NCw0MiArNTMsNiBA
QCBzdHJ1Y3QgU2FtZVNpemVBc0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24gCiAKIENPTVBJTEVfQVNT
RVJUKHNpemVvZihGb250Q2FzY2FkZURlc2NyaXB0aW9uKSA9PSBzaXplb2YoU2FtZVNpemVBc0Zv
bnRDYXNjYWRlRGVzY3JpcHRpb24pLCBGb250Q2FzY2FkZURlc2NyaXB0aW9uX3Nob3VsZF9zdGF5
X3NtYWxsKTsKIAotRm9udERlc2NyaXB0aW9uOjpGb250RGVzY3JpcHRpb24oKQotICAgIDogbV9m
b250U2VsZWN0aW9uUmVxdWVzdCB7IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxXZWln
aHQoKSwgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbFN0cmV0Y2goKSwgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6aW5pdGlhbEl0YWxpYygpIH0KLSAgICAsIG1fb3JpZW50YXRpb24oc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCkpCi0gICAgLCBt
X25vbkNKS0dseXBoT3JpZW50YXRpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE5vbkNKS0dseXBo
T3JpZW50YXRpb246Ok1peGVkKSkKLSAgICAsIG1fd2lkdGhWYXJpYW50KHN0YXRpY19jYXN0PHVu
c2lnbmVkPihGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGgpKQotICAgICwgbV9yZW5kZXJp
bmdNb2RlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250UmVuZGVyaW5nTW9kZTo6Tm9ybWFsKSkK
LSAgICAsIG1fdGV4dFJlbmRlcmluZyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oVGV4dFJlbmRlcmlu
Z01vZGU6OkF1dG9UZXh0UmVuZGVyaW5nKSkKLSAgICAsIG1fc2NyaXB0KFVTQ1JJUFRfQ09NTU9O
KQotICAgICwgbV9mb250U3ludGhlc2lzKEZvbnRTeW50aGVzaXNXZWlnaHQgfCBGb250U3ludGhl
c2lzU3R5bGUgfCBGb250U3ludGhlc2lzU21hbGxDYXBzKQotICAgICwgbV92YXJpYW50Q29tbW9u
TGlnYXR1cmVzKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudExpZ2F0dXJlczo6Tm9y
bWFsKSkKLSAgICAsIG1fdmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpKQotICAgICwgbV92YXJpYW50
SGlzdG9yaWNhbExpZ2F0dXJlcyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnRMaWdh
dHVyZXM6Ok5vcm1hbCkpCi0gICAgLCBtX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyhzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCkpCi0gICAgLCBt
X3ZhcmlhbnRQb3NpdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnRQb3NpdGlv
bjo6Tm9ybWFsKSkKLSAgICAsIG1fdmFyaWFudENhcHMoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZv
bnRWYXJpYW50Q2Fwczo6Tm9ybWFsKSkKLSAgICAsIG1fdmFyaWFudE51bWVyaWNGaWd1cmUoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsKSkKLSAg
ICAsIG1fdmFyaWFudE51bWVyaWNTcGFjaW5nKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFy
aWFudE51bWVyaWNTcGFjaW5nOjpOb3JtYWwpKQotICAgICwgbV92YXJpYW50TnVtZXJpY0ZyYWN0
aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9y
bWFsKSkKLSAgICAsIG1fdmFyaWFudE51bWVyaWNPcmRpbmFsKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWwpKQotICAgICwgbV92YXJpYW50TnVt
ZXJpY1NsYXNoZWRaZXJvKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudE51bWVyaWNT
bGFzaGVkWmVybzo6Tm9ybWFsKSkKLSAgICAsIG1fdmFyaWFudEFsdGVybmF0ZXMoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsKSkKLSAgICAsIG1fdmFy
aWFudEVhc3RBc2lhblZhcmlhbnQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudDo6Tm9ybWFsKSkKLSAgICAsIG1fdmFyaWFudEVhc3RBc2lhbldpZHRoKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpOb3JtYWwpKQot
ICAgICwgbV92YXJpYW50RWFzdEFzaWFuUnVieShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZh
cmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWwpKQotICAgICwgbV9vcHRpY2FsU2l6aW5nKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihGb250T3B0aWNhbFNpemluZzo6RW5hYmxlZCkpCi0gICAgLCBtX2Zv
bnRTdHlsZUF4aXMoRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbEZvbnRTdHlsZUF4aXMo
KSA9PSBGb250U3R5bGVBeGlzOjppdGFsKQotICAgICwgbV9zaG91bGRBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5v
KSkKLXsKLX0KLQotdm9pZCBGb250RGVzY3JpcHRpb246OnNldExvY2FsZShjb25zdCBBdG9taWNT
dHJpbmcmIGxvY2FsZSkKLXsKLSAgICBtX2xvY2FsZSA9IGxvY2FsZTsKLSAgICBtX3NjcmlwdCA9
IGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24obV9sb2NhbGUpOwotfQotCiBGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uKCkKICAgICA6IG1faXNB
YnNvbHV0ZVNpemUoZmFsc2UpCiAgICAgLCBtX2tlcm5pbmcoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEtlcm5pbmc6OkF1dG8pKQpAQCAtMTAwLDEwICs2Myw2IEBAIEZvbnRDYXNjYWRlRGVzY3JpcHRp
b246OkZvbnRDYXNjYWRlRGVzY3IKIH0KIAogI2lmICFVU0VfUExBVEZPUk1fU1lTVEVNX0ZBTExC
QUNLX0xJU1QKLXZvaWQgRm9udERlc2NyaXB0aW9uOjppbnZhbGlkYXRlQ2FjaGVzKCkKLXsKLX0K
LQogdW5zaWduZWQgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZWZmZWN0aXZlRmFtaWx5Q291bnQo
KSBjb25zdAogewogICAgIHJldHVybiBmYW1pbHlDb3VudCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRp
b24uaAkocmV2aXNpb24gMjM2OTExKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250RGVzY3JpcHRpb24uaDoyMzY5MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9A
a2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2Rl
Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgTmljaG9sYXMgU2hhbmtzIDx3ZWJraXRAbmlja3NoYW5rcy5jb20+CisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElvdGhlci5tXyAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNtXworICoKKyAqLworCisj
aWZuZGVmIEZvbnREZXNjcmlwdGlvbl9oCisjZGVmaW5lIEZvbnREZXNjcmlwdGlvbl9oCisKKyNp
bmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdGlvbkFsZ29y
aXRobS5oIgorI2luY2x1ZGUgIkZvbnRUYWdnZWRTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlRleHRG
bGFncy5oIgorI2luY2x1ZGUgIldlYktpdEZvbnRGYW1pbHlOYW1lcy5oIgorI2luY2x1ZGUgPHVu
aWNvZGUvdXNjcmlwdC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWRBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisKKyNpZiBQ
TEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJGb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0
LmgiCisjZWxzZQorI2luY2x1ZGUgIkZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uTnVsbC5oIgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFBMQVRGT1JNKENPQ09BKQordHlwZWRl
ZiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0IEZvbnRGYW1pbHlQbGF0Zm9ybVNwZWNp
ZmljYXRpb247CisjZWxzZQordHlwZWRlZiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbk51bGwgRm9u
dEZhbWlseVBsYXRmb3JtU3BlY2lmaWNhdGlvbjsKKyNlbmRpZgorCisjZGVmaW5lIFVTRV9QTEFU
Rk9STV9TWVNURU1fRkFMTEJBQ0tfTElTVCAoKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1Nf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAwKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTMwMCkpCisKK3R5cGVkZWYgVmFyaWFu
dDxBdG9taWNTdHJpbmcsIEZvbnRGYW1pbHlQbGF0Zm9ybVNwZWNpZmljYXRpb24+IEZvbnRGYW1p
bHlTcGVjaWZpY2F0aW9uOworCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0Rm9udEZhbWlseU5hbWVz
OworCitjbGFzcyBGb250RGVzY3JpcHRpb24geworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JU
IEZvbnREZXNjcmlwdGlvbigpOworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250RGVzY3JpcHRp
b24mIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgZmxv
YXQgY29tcHV0ZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb21wdXRlZFNpemU7IH0KKyAgICB1
bnNpZ25lZCBjb21wdXRlZFBpeGVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHVuc2lnbmVkKG1fY29t
cHV0ZWRTaXplICsgMC41Zik7IH0KKyAgICBzdGQ6Om9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1
ZT4gaXRhbGljKCkgY29uc3QgeyByZXR1cm4gbV9mb250U2VsZWN0aW9uUmVxdWVzdC5zbG9wZTsg
fQorICAgIEZvbnRTZWxlY3Rpb25WYWx1ZSBzdHJldGNoKCkgY29uc3QgeyByZXR1cm4gbV9mb250
U2VsZWN0aW9uUmVxdWVzdC53aWR0aDsgfQorICAgIEZvbnRTZWxlY3Rpb25WYWx1ZSB3ZWlnaHQo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0LndlaWdodDsgfQorICAgIEZv
bnRTZWxlY3Rpb25SZXF1ZXN0IGZvbnRTZWxlY3Rpb25SZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4g
bV9mb250U2VsZWN0aW9uUmVxdWVzdDsgfQorICAgIEZvbnRSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250UmVuZGVyaW5nTW9kZT4obV9y
ZW5kZXJpbmdNb2RlKTsgfQorICAgIFRleHRSZW5kZXJpbmdNb2RlIHRleHRSZW5kZXJpbmdNb2Rl
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dFJlbmRlcmluZ01vZGU+KG1fdGV4dFJl
bmRlcmluZyk7IH0KKyAgICBVU2NyaXB0Q29kZSBzY3JpcHQoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxVU2NyaXB0Q29kZT4obV9zY3JpcHQpOyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsZTsgfQorCisgICAgRm9udE9yaWVudGF0
aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udE9yaWVudGF0
aW9uPihtX29yaWVudGF0aW9uKTsgfQorICAgIE5vbkNKS0dseXBoT3JpZW50YXRpb24gbm9uQ0pL
R2x5cGhPcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PE5vbkNKS0dseXBo
T3JpZW50YXRpb24+KG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbik7IH0KKyAgICBGb250V2lkdGhW
YXJpYW50IHdpZHRoVmFyaWFudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRXaWR0
aFZhcmlhbnQ+KG1fd2lkdGhWYXJpYW50KTsgfQorICAgIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGlu
Z3MmIGZlYXR1cmVTZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZVNldHRpbmdzOyB9
CisgICAgY29uc3QgRm9udFZhcmlhdGlvblNldHRpbmdzJiB2YXJpYXRpb25TZXR0aW5ncygpIGNv
bnN0IHsgcmV0dXJuIG1fdmFyaWF0aW9uU2V0dGluZ3M7IH0KKyAgICBGb250U3ludGhlc2lzIGZv
bnRTeW50aGVzaXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250U3ludGhlc2lzPiht
X2ZvbnRTeW50aGVzaXMpOyB9CisgICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgdmFyaWFudENvbW1v
bkxpZ2F0dXJlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRWYXJpYW50TGlnYXR1
cmVzPihtX3ZhcmlhbnRDb21tb25MaWdhdHVyZXMpOyB9CisgICAgRm9udFZhcmlhbnRMaWdhdHVy
ZXMgdmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxGb250VmFyaWFudExpZ2F0dXJlcz4obV92YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJl
cyk7IH0KKyAgICBGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJl
cygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRWYXJpYW50TGlnYXR1cmVzPihtX3Zh
cmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKTsgfQorICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIHZh
cmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZv
bnRWYXJpYW50TGlnYXR1cmVzPihtX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyk7IH0KKyAg
ICBGb250VmFyaWFudFBvc2l0aW9uIHZhcmlhbnRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEZvbnRWYXJpYW50UG9zaXRpb24+KG1fdmFyaWFudFBvc2l0aW9uKTsgfQorICAg
IEZvbnRWYXJpYW50Q2FwcyB2YXJpYW50Q2FwcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PEZvbnRWYXJpYW50Q2Fwcz4obV92YXJpYW50Q2Fwcyk7IH0KKyAgICBGb250VmFyaWFudE51bWVy
aWNGaWd1cmUgdmFyaWFudE51bWVyaWNGaWd1cmUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxGb250VmFyaWFudE51bWVyaWNGaWd1cmU+KG1fdmFyaWFudE51bWVyaWNGaWd1cmUpOyB9Cisg
ICAgRm9udFZhcmlhbnROdW1lcmljU3BhY2luZyB2YXJpYW50TnVtZXJpY1NwYWNpbmcoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudE51bWVyaWNTcGFjaW5nPihtX3Zhcmlh
bnROdW1lcmljU3BhY2luZyk7IH0KKyAgICBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbiB2YXJp
YW50TnVtZXJpY0ZyYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlh
bnROdW1lcmljRnJhY3Rpb24+KG1fdmFyaWFudE51bWVyaWNGcmFjdGlvbik7IH0KKyAgICBGb250
VmFyaWFudE51bWVyaWNPcmRpbmFsIHZhcmlhbnROdW1lcmljT3JkaW5hbCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw+KG1fdmFyaWFudE51bWVy
aWNPcmRpbmFsKTsgfQorICAgIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHZhcmlhbnRO
dW1lcmljU2xhc2hlZFplcm8oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFu
dE51bWVyaWNTbGFzaGVkWmVybz4obV92YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKTsgfQorICAg
IEZvbnRWYXJpYW50QWx0ZXJuYXRlcyB2YXJpYW50QWx0ZXJuYXRlcygpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PEZvbnRWYXJpYW50QWx0ZXJuYXRlcz4obV92YXJpYW50QWx0ZXJuYXRlcyk7
IH0KKyAgICBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQgdmFyaWFudEVhc3RBc2lhblZhcmlh
bnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQ+KG1fdmFyaWFudEVhc3RBc2lhblZhcmlhbnQpOyB9CisgICAgRm9udFZhcmlhbnRFYXN0QXNp
YW5XaWR0aCB2YXJpYW50RWFzdEFzaWFuV2lkdGgoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxGb250VmFyaWFudEVhc3RBc2lhbldpZHRoPihtX3ZhcmlhbnRFYXN0QXNpYW5XaWR0aCk7IH0K
KyAgICBGb250VmFyaWFudEVhc3RBc2lhblJ1YnkgdmFyaWFudEVhc3RBc2lhblJ1YnkoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk+KG1fdmFyaWFu
dEVhc3RBc2lhblJ1YnkpOyB9CisgICAgRm9udFZhcmlhbnRTZXR0aW5ncyB2YXJpYW50U2V0dGlu
Z3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHsgdmFyaWFudENvbW1vbkxpZ2F0dXJl
cygpLAorICAgICAgICAgICAgdmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoKSwKKyAgICAg
ICAgICAgIHZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKCksCisgICAgICAgICAgICB2YXJpYW50
Q29udGV4dHVhbEFsdGVybmF0ZXMoKSwKKyAgICAgICAgICAgIHZhcmlhbnRQb3NpdGlvbigpLAor
ICAgICAgICAgICAgdmFyaWFudENhcHMoKSwKKyAgICAgICAgICAgIHZhcmlhbnROdW1lcmljRmln
dXJlKCksCisgICAgICAgICAgICB2YXJpYW50TnVtZXJpY1NwYWNpbmcoKSwKKyAgICAgICAgICAg
IHZhcmlhbnROdW1lcmljRnJhY3Rpb24oKSwKKyAgICAgICAgICAgIHZhcmlhbnROdW1lcmljT3Jk
aW5hbCgpLAorICAgICAgICAgICAgdmFyaWFudE51bWVyaWNTbGFzaGVkWmVybygpLAorICAgICAg
ICAgICAgdmFyaWFudEFsdGVybmF0ZXMoKSwKKyAgICAgICAgICAgIHZhcmlhbnRFYXN0QXNpYW5W
YXJpYW50KCksCisgICAgICAgICAgICB2YXJpYW50RWFzdEFzaWFuV2lkdGgoKSwKKyAgICAgICAg
ICAgIHZhcmlhbnRFYXN0QXNpYW5SdWJ5KCkgfTsKKyAgICB9CisgICAgRm9udE9wdGljYWxTaXpp
bmcgb3B0aWNhbFNpemluZygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRPcHRpY2Fs
U2l6aW5nPihtX29wdGljYWxTaXppbmcpOyB9CisgICAgRm9udFN0eWxlQXhpcyBmb250U3R5bGVB
eGlzKCkgY29uc3QgeyByZXR1cm4gbV9mb250U3R5bGVBeGlzID8gRm9udFN0eWxlQXhpczo6aXRh
bCA6IEZvbnRTdHlsZUF4aXM6OnNsbnQ7IH0KKyAgICBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBz
aG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PEFsbG93VXNlckluc3RhbGxlZEZvbnRzPihtX3Nob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRz
KTsgfQorCisgICAgdm9pZCBzZXRDb21wdXRlZFNpemUoZmxvYXQgcykgeyBtX2NvbXB1dGVkU2l6
ZSA9IGNsYW1wVG9GbG9hdChzKTsgfQorICAgIHZvaWQgc2V0SXRhbGljKHN0ZDo6b3B0aW9uYWw8
Rm9udFNlbGVjdGlvblZhbHVlPiBpdGFsaWMpIHsgbV9mb250U2VsZWN0aW9uUmVxdWVzdC5zbG9w
ZSA9IGl0YWxpYzsgfQorICAgIHZvaWQgc2V0U3RyZXRjaChGb250U2VsZWN0aW9uVmFsdWUgc3Ry
ZXRjaCkgeyBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0LndpZHRoID0gc3RyZXRjaDsgfQorICAgIHZv
aWQgc2V0SXNJdGFsaWMoYm9vbCBpc0l0YWxpYykgeyBzZXRJdGFsaWMoaXNJdGFsaWMgPyBzdGQ6
Om9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4geyBpdGFsaWNWYWx1ZSgpIH0gOiBzdGQ6Om9w
dGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4geyB9KTsgfQorICAgIHZvaWQgc2V0V2VpZ2h0KEZv
bnRTZWxlY3Rpb25WYWx1ZSB3ZWlnaHQpIHsgbV9mb250U2VsZWN0aW9uUmVxdWVzdC53ZWlnaHQg
PSB3ZWlnaHQ7IH0KKyAgICB2b2lkIHNldFJlbmRlcmluZ01vZGUoRm9udFJlbmRlcmluZ01vZGUg
bW9kZSkgeyBtX3JlbmRlcmluZ01vZGUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obW9kZSk7IH0K
KyAgICB2b2lkIHNldFRleHRSZW5kZXJpbmdNb2RlKFRleHRSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
ZykgeyBtX3RleHRSZW5kZXJpbmcgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVuZGVyaW5nKTsg
fQorICAgIHZvaWQgc2V0T3JpZW50YXRpb24oRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7
IG1fb3JpZW50YXRpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3JpZW50YXRpb24pOyB9Cisg
ICAgdm9pZCBzZXROb25DSktHbHlwaE9yaWVudGF0aW9uKE5vbkNKS0dseXBoT3JpZW50YXRpb24g
b3JpZW50YXRpb24pIHsgbV9ub25DSktHbHlwaE9yaWVudGF0aW9uID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG9yaWVudGF0aW9uKTsgfQorICAgIHZvaWQgc2V0V2lkdGhWYXJpYW50KEZvbnRXaWR0
aFZhcmlhbnQgd2lkdGhWYXJpYW50KSB7IG1fd2lkdGhWYXJpYW50ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHdpZHRoVmFyaWFudCk7IH0gLy8gTWFrZSBzdXJlIG5ldyBjYWxsZXJzIG9mIHRoaXMg
c3luYyB3aXRoIEZvbnRQbGF0Zm9ybURhdGE6OmlzRm9yVGV4dENvbWJpbmUoKSEKKyAgICB2b2lk
IHNldExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICB2b2lkIHNldEZlYXR1cmVTZXR0
aW5ncyhGb250RmVhdHVyZVNldHRpbmdzJiYgc2V0dGluZ3MpIHsgbV9mZWF0dXJlU2V0dGluZ3Mg
PSBXVEZNb3ZlKHNldHRpbmdzKTsgfQorI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisgICAg
dm9pZCBzZXRWYXJpYXRpb25TZXR0aW5ncyhGb250VmFyaWF0aW9uU2V0dGluZ3MmJiBzZXR0aW5n
cykgeyBtX3ZhcmlhdGlvblNldHRpbmdzID0gV1RGTW92ZShzZXR0aW5ncyk7IH0KKyNlbmRpZgor
ICAgIHZvaWQgc2V0Rm9udFN5bnRoZXNpcyhGb250U3ludGhlc2lzIGZvbnRTeW50aGVzaXMpIHsg
bV9mb250U3ludGhlc2lzID0gZm9udFN5bnRoZXNpczsgfQorICAgIHZvaWQgc2V0VmFyaWFudENv
bW1vbkxpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50KSB7IG1fdmFyaWFudENv
bW1vbkxpZ2F0dXJlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQorICAgIHZv
aWQgc2V0VmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoRm9udFZhcmlhbnRMaWdhdHVyZXMg
dmFyaWFudCkgeyBtX3ZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50SGlzdG9yaWNhbExpZ2F0
dXJlcyhGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50KSB7IG1fdmFyaWFudEhpc3RvcmljYWxM
aWdhdHVyZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7IH0KKyAgICB2b2lkIHNl
dFZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyhGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50
KSB7IG1fdmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50UG9zaXRpb24oRm9udFZhcmlhbnRQb3Np
dGlvbiB2YXJpYW50KSB7IG1fdmFyaWFudFBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHMgdmFy
aWFudCkgeyBtX3ZhcmlhbnRDYXBzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9
CisgICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY0ZpZ3VyZShGb250VmFyaWFudE51bWVyaWNGaWd1
cmUgdmFyaWFudCkgeyBtX3ZhcmlhbnROdW1lcmljRmlndXJlID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY1NwYWNpbmcoRm9udFZh
cmlhbnROdW1lcmljU3BhY2luZyB2YXJpYW50KSB7IG1fdmFyaWFudE51bWVyaWNTcGFjaW5nID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50TnVt
ZXJpY0ZyYWN0aW9uKEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uIHZhcmlhbnQpIHsgbV92YXJp
YW50TnVtZXJpY0ZyYWN0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Cisg
ICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY09yZGluYWwoRm9udFZhcmlhbnROdW1lcmljT3JkaW5h
bCB2YXJpYW50KSB7IG1fdmFyaWFudE51bWVyaWNPcmRpbmFsID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKEZv
bnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHZhcmlhbnQpIHsgbV92YXJpYW50TnVtZXJpY1Ns
YXNoZWRaZXJvID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBz
ZXRWYXJpYW50QWx0ZXJuYXRlcyhGb250VmFyaWFudEFsdGVybmF0ZXMgdmFyaWFudCkgeyBtX3Zh
cmlhbnRBbHRlcm5hdGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAg
dm9pZCBzZXRWYXJpYW50RWFzdEFzaWFuVmFyaWFudChGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQgdmFyaWFudCkgeyBtX3ZhcmlhbnRFYXN0QXNpYW5WYXJpYW50ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50RWFzdEFzaWFuV2lkdGgoRm9u
dFZhcmlhbnRFYXN0QXNpYW5XaWR0aCB2YXJpYW50KSB7IG1fdmFyaWFudEVhc3RBc2lhbldpZHRo
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50
RWFzdEFzaWFuUnVieShGb250VmFyaWFudEVhc3RBc2lhblJ1YnkgdmFyaWFudCkgeyBtX3Zhcmlh
bnRFYXN0QXNpYW5SdWJ5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAg
dm9pZCBzZXRPcHRpY2FsU2l6aW5nKEZvbnRPcHRpY2FsU2l6aW5nIHNpemluZykgeyBtX29wdGlj
YWxTaXppbmcgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6aW5nKTsgfQorICAgIHZvaWQgc2V0
Rm9udFN0eWxlQXhpcyhGb250U3R5bGVBeGlzIGF4aXMpIHsgbV9mb250U3R5bGVBeGlzID0gYXhp
cyA9PSBGb250U3R5bGVBeGlzOjppdGFsOyB9CisgICAgdm9pZCBzZXRTaG91bGRBbGxvd1VzZXJJ
bnN0YWxsZWRGb250cyhBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBzaG91bGRBbGxvd1VzZXJJbnN0
YWxsZWRGb250cykgeyBtX3Nob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsgfQorCisgICAgc3Rh
dGljIHZvaWQgaW52YWxpZGF0ZUNhY2hlcygpOworCitwcml2YXRlOgorICAgIC8vIEZJWE1FOiBJ
bnZlc3RpZ2F0ZSBtb3ZpbmcgdGhlc2UgaW50byB0aGVpciBvd24gb2JqZWN0IG9uIHRoZSBoZWFw
ICh0byBzYXZlIG1lbW9yeSkuCisgICAgRm9udEZlYXR1cmVTZXR0aW5ncyBtX2ZlYXR1cmVTZXR0
aW5nczsKKyAgICBGb250VmFyaWF0aW9uU2V0dGluZ3MgbV92YXJpYXRpb25TZXR0aW5nczsKKyAg
ICBBdG9taWNTdHJpbmcgbV9sb2NhbGU7CisKKyAgICBGb250U2VsZWN0aW9uUmVxdWVzdCBtX2Zv
bnRTZWxlY3Rpb25SZXF1ZXN0OworICAgIGZsb2F0IG1fY29tcHV0ZWRTaXplIHsgMCB9OyAvLyBD
b21wdXRlZCBzaXplIGFkanVzdGVkIGZvciB0aGUgbWluaW11bSBmb250IHNpemUgYW5kIHRoZSB6
b29tIGZhY3Rvci4KKyAgICB1bnNpZ25lZCBtX29yaWVudGF0aW9uIDogMTsgLy8gRm9udE9yaWVu
dGF0aW9uIC0gV2hldGhlciB0aGUgZm9udCBpcyByZW5kZXJpbmcgb24gYSBob3Jpem9udGFsIGxp
bmUgb3IgYSB2ZXJ0aWNhbCBsaW5lLgorICAgIHVuc2lnbmVkIG1fbm9uQ0pLR2x5cGhPcmllbnRh
dGlvbiA6IDE7IC8vIE5vbkNKS0dseXBoT3JpZW50YXRpb24gLSBPbmx5IHVzZWQgYnkgdmVydGlj
YWwgdGV4dC4gRGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCBvcmllbnRhdGlvbiBmb3Igbm9uLWlkZW9n
cmFwaCBnbHlwaHMuCisgICAgdW5zaWduZWQgbV93aWR0aFZhcmlhbnQgOiAyOyAvLyBGb250V2lk
dGhWYXJpYW50CisgICAgdW5zaWduZWQgbV9yZW5kZXJpbmdNb2RlIDogMTsgLy8gVXNlZCB0byBz
d2l0Y2ggYmV0d2VlbiBDRyBhbmQgR0RJIHRleHQgb24gV2luZG93cy4KKyAgICB1bnNpZ25lZCBt
X3RleHRSZW5kZXJpbmcgOiAyOyAvLyBUZXh0UmVuZGVyaW5nTW9kZQorICAgIHVuc2lnbmVkIG1f
c2NyaXB0IDogNzsgLy8gVXNlZCB0byBoZWxwIGNob29zZSBhbiBhcHByb3ByaWF0ZSBmb250IGZv
ciBnZW5lcmljIGZvbnQgZmFtaWxpZXMuCisgICAgdW5zaWduZWQgbV9mb250U3ludGhlc2lzIDog
MzsgLy8gRm9udFN5bnRoZXNpcyB0eXBlCisgICAgdW5zaWduZWQgbV92YXJpYW50Q29tbW9uTGln
YXR1cmVzIDogMjsgLy8gRm9udFZhcmlhbnRMaWdhdHVyZXMKKyAgICB1bnNpZ25lZCBtX3Zhcmlh
bnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzIDogMjsgLy8gRm9udFZhcmlhbnRMaWdhdHVyZXMKKyAg
ICB1bnNpZ25lZCBtX3ZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzIDogMjsgLy8gRm9udFZhcmlh
bnRMaWdhdHVyZXMKKyAgICB1bnNpZ25lZCBtX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyA6
IDI7IC8vIEZvbnRWYXJpYW50TGlnYXR1cmVzCisgICAgdW5zaWduZWQgbV92YXJpYW50UG9zaXRp
b24gOiAyOyAvLyBGb250VmFyaWFudFBvc2l0aW9uCisgICAgdW5zaWduZWQgbV92YXJpYW50Q2Fw
cyA6IDM7IC8vIEZvbnRWYXJpYW50Q2FwcworICAgIHVuc2lnbmVkIG1fdmFyaWFudE51bWVyaWNG
aWd1cmUgOiAyOyAvLyBGb250VmFyaWFudE51bWVyaWNGaWd1cmUKKyAgICB1bnNpZ25lZCBtX3Zh
cmlhbnROdW1lcmljU3BhY2luZyA6IDI7IC8vIEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmcKKyAg
ICB1bnNpZ25lZCBtX3ZhcmlhbnROdW1lcmljRnJhY3Rpb24gOiAyOyAvLyBGb250VmFyaWFudE51
bWVyaWNGcmFjdGlvbgorICAgIHVuc2lnbmVkIG1fdmFyaWFudE51bWVyaWNPcmRpbmFsIDogMTsg
Ly8gRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbAorICAgIHVuc2lnbmVkIG1fdmFyaWFudE51bWVy
aWNTbGFzaGVkWmVybyA6IDE7IC8vIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvCisgICAg
dW5zaWduZWQgbV92YXJpYW50QWx0ZXJuYXRlcyA6IDE7IC8vIEZvbnRWYXJpYW50QWx0ZXJuYXRl
cworICAgIHVuc2lnbmVkIG1fdmFyaWFudEVhc3RBc2lhblZhcmlhbnQgOiAzOyAvLyBGb250VmFy
aWFudEVhc3RBc2lhblZhcmlhbnQKKyAgICB1bnNpZ25lZCBtX3ZhcmlhbnRFYXN0QXNpYW5XaWR0
aCA6IDI7IC8vIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGgKKyAgICB1bnNpZ25lZCBtX3Zhcmlh
bnRFYXN0QXNpYW5SdWJ5IDogMTsgLy8gRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5CisgICAgdW5z
aWduZWQgbV9vcHRpY2FsU2l6aW5nIDogMTsgLy8gRm9udE9wdGljYWxTaXppbmcKKyAgICB1bnNp
Z25lZCBtX2ZvbnRTdHlsZUF4aXMgOiAxOyAvLyBXaGV0aGVyICJmb250LXN0eWxlOiBpdGFsaWMi
IG9yICJmb250LXN0eWxlOiBvYmxpcXVlIDIwZGVnIiB3YXMgc3BlY2lmaWVkCisgICAgdW5zaWdu
ZWQgbV9zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyA6IDE7IC8vIEFsbG93VXNlckluc3Rh
bGxlZEZvbnRzOiBJZiB0aGlzIGRlc2NyaXB0aW9uIGlzIGFsbG93ZWQgdG8gbWF0Y2ggYSB1c2Vy
LWluc3RhbGxlZCBmb250Cit9OworCitpbmxpbmUgYm9vbCBGb250RGVzY3JpcHRpb246Om9wZXJh
dG9yPT0oY29uc3QgRm9udERlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9jb21wdXRlZFNpemUgPT0gb3RoZXIubV9jb21wdXRlZFNpemUKKyAgICAgICAgJiYgbV9mb250
U2VsZWN0aW9uUmVxdWVzdCA9PSBvdGhlci5tX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0CisgICAgICAg
ICYmIG1fcmVuZGVyaW5nTW9kZSA9PSBvdGhlci5tX3JlbmRlcmluZ01vZGUKKyAgICAgICAgJiYg
bV90ZXh0UmVuZGVyaW5nID09IG90aGVyLm1fdGV4dFJlbmRlcmluZworICAgICAgICAmJiBtX29y
aWVudGF0aW9uID09IG90aGVyLm1fb3JpZW50YXRpb24KKyAgICAgICAgJiYgbV9ub25DSktHbHlw
aE9yaWVudGF0aW9uID09IG90aGVyLm1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbgorICAgICAgICAm
JiBtX3dpZHRoVmFyaWFudCA9PSBvdGhlci5tX3dpZHRoVmFyaWFudAorICAgICAgICAmJiBtX2xv
Y2FsZSA9PSBvdGhlci5tX2xvY2FsZQorICAgICAgICAmJiBtX2ZlYXR1cmVTZXR0aW5ncyA9PSBv
dGhlci5tX2ZlYXR1cmVTZXR0aW5ncworI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisgICAg
ICAgICYmIG1fdmFyaWF0aW9uU2V0dGluZ3MgPT0gb3RoZXIubV92YXJpYXRpb25TZXR0aW5ncwor
I2VuZGlmCisgICAgICAgICYmIG1fZm9udFN5bnRoZXNpcyA9PSBvdGhlci5tX2ZvbnRTeW50aGVz
aXMKKyAgICAgICAgJiYgbV92YXJpYW50Q29tbW9uTGlnYXR1cmVzID09IG90aGVyLm1fdmFyaWFu
dENvbW1vbkxpZ2F0dXJlcworICAgICAgICAmJiBtX3ZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1
cmVzID09IG90aGVyLm1fdmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMKKyAgICAgICAgJiYg
bV92YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyA9PSBvdGhlci5tX3ZhcmlhbnRIaXN0b3JpY2Fs
TGlnYXR1cmVzCisgICAgICAgICYmIG1fdmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzID09IG90
aGVyLm1fdmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzCisgICAgICAgICYmIG1fdmFyaWFudFBv
c2l0aW9uID09IG90aGVyLm1fdmFyaWFudFBvc2l0aW9uCisgICAgICAgICYmIG1fdmFyaWFudENh
cHMgPT0gb3RoZXIubV92YXJpYW50Q2FwcworICAgICAgICAmJiBtX3ZhcmlhbnROdW1lcmljRmln
dXJlID09IG90aGVyLm1fdmFyaWFudE51bWVyaWNGaWd1cmUKKyAgICAgICAgJiYgbV92YXJpYW50
TnVtZXJpY1NwYWNpbmcgPT0gb3RoZXIubV92YXJpYW50TnVtZXJpY1NwYWNpbmcKKyAgICAgICAg
JiYgbV92YXJpYW50TnVtZXJpY0ZyYWN0aW9uID09IG90aGVyLm1fdmFyaWFudE51bWVyaWNGcmFj
dGlvbgorICAgICAgICAmJiBtX3ZhcmlhbnROdW1lcmljT3JkaW5hbCA9PSBvdGhlci5tX3Zhcmlh
bnROdW1lcmljT3JkaW5hbAorICAgICAgICAmJiBtX3ZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8g
PT0gb3RoZXIubV92YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvCisgICAgICAgICYmIG1fdmFyaWFu
dEFsdGVybmF0ZXMgPT0gb3RoZXIubV92YXJpYW50QWx0ZXJuYXRlcworICAgICAgICAmJiBtX3Zh
cmlhbnRFYXN0QXNpYW5WYXJpYW50ID09IG90aGVyLm1fdmFyaWFudEVhc3RBc2lhblZhcmlhbnQK
KyAgICAgICAgJiYgbV92YXJpYW50RWFzdEFzaWFuV2lkdGggPT0gb3RoZXIubV92YXJpYW50RWFz
dEFzaWFuV2lkdGgKKyAgICAgICAgJiYgbV92YXJpYW50RWFzdEFzaWFuUnVieSA9PSBvdGhlci5t
X3ZhcmlhbnRFYXN0QXNpYW5SdWJ5CisgICAgICAgICYmIG1fb3B0aWNhbFNpemluZyA9PSBvdGhl
ci5tX29wdGljYWxTaXppbmcKKyAgICAgICAgJiYgbV9mb250U3R5bGVBeGlzID09IG90aGVyLm1f
Zm9udFN0eWxlQXhpcworICAgICAgICAmJiBtX3Nob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRz
ID09IG90aGVyLm1fc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHM7Cit9CisKKy8vIEZJWE1F
OiBNb3ZlIHRvIGEgZmlsZSBvZiBpdHMgb3duLgorY2xhc3MgRm9udENhc2NhZGVEZXNjcmlwdGlv
biA6IHB1YmxpYyBGb250RGVzY3JpcHRpb24geworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JU
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24oKTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsgfQorCisgICAgdW5zaWduZWQgZmFtaWx5Q291bnQoKSBjb25zdCB7IHJldHVybiBt
X2ZhbWlsaWVzLnNpemUoKTsgfQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmlyc3RGYW1pbHko
KSBjb25zdCB7IHJldHVybiBmYW1pbHlBdCgwKTsgfQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5QXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9mYW1pbGllc1tpXTsgfQorICAg
IGNvbnN0IFJlZkNvdW50ZWRBcnJheTxBdG9taWNTdHJpbmc+JiBmYW1pbGllcygpIGNvbnN0IHsg
cmV0dXJuIG1fZmFtaWxpZXM7IH0KKworICAgIHN0YXRpYyBib29sIGZhbWlseU5hbWVzQXJlRXF1
YWwoY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgc3RhdGlj
IHVuc2lnbmVkIGZhbWlseU5hbWVIYXNoKGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHN0YXRp
YyBTdHJpbmcgZm9sZGVkRmFtaWx5TmFtZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKworICAgIHVu
c2lnbmVkIGVmZmVjdGl2ZUZhbWlseUNvdW50KCkgY29uc3Q7CisgICAgRm9udEZhbWlseVNwZWNp
ZmljYXRpb24gZWZmZWN0aXZlRmFtaWx5QXQodW5zaWduZWQpIGNvbnN0OworCisgICAgZmxvYXQg
c3BlY2lmaWVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWVkU2l6ZTsgfQorICAgIGJv
b2wgaXNBYnNvbHV0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2lzQWJzb2x1dGVTaXplOyB9Cisg
ICAgRm9udFNlbGVjdGlvblZhbHVlIGxpZ2h0ZXJXZWlnaHQoKSBjb25zdCB7IHJldHVybiBsaWdo
dGVyV2VpZ2h0KHdlaWdodCgpKTsgfQorICAgIEZvbnRTZWxlY3Rpb25WYWx1ZSBib2xkZXJXZWln
aHQoKSBjb25zdCB7IHJldHVybiBib2xkZXJXZWlnaHQod2VpZ2h0KCkpOyB9CisgICAgc3RhdGlj
IEZvbnRTZWxlY3Rpb25WYWx1ZSBsaWdodGVyV2VpZ2h0KEZvbnRTZWxlY3Rpb25WYWx1ZSk7Cisg
ICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBib2xkZXJXZWlnaHQoRm9udFNlbGVjdGlvblZh
bHVlKTsKKworICAgIC8vIG9ubHkgdXNlIGZpeGVkIGRlZmF1bHQgc2l6ZSB3aGVuIHRoZXJlIGlz
IG9ubHkgb25lIGZvbnQgZmFtaWx5LCBhbmQgdGhhdCBmYW1pbHkgaXMgIm1vbm9zcGFjZSIKKyAg
ICBib29sIHVzZUZpeGVkRGVmYXVsdFNpemUoKSBjb25zdCB7IHJldHVybiBmYW1pbHlDb3VudCgp
ID09IDEgJiYgZmlyc3RGYW1pbHkoKSA9PSBtb25vc3BhY2VGYW1pbHk7IH0KKworICAgIEtlcm5p
bmcga2VybmluZygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEtlcm5pbmc+KG1fa2Vybmlu
Zyk7IH0KKyAgICB1bnNpZ25lZCBrZXl3b3JkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5d29y
ZFNpemU7IH0KKyAgICBDU1NWYWx1ZUlEIGtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkgY29uc3QK
KyAgICB7CisgICAgICAgIENTU1ZhbHVlSUQgaWRlbnRpZmllciA9IG1fa2V5d29yZFNpemUgPyBz
dGF0aWNfY2FzdDxDU1NWYWx1ZUlEPihDU1NWYWx1ZVh4U21hbGwgKyBtX2tleXdvcmRTaXplIC0g
MSkgOiBDU1NWYWx1ZUludmFsaWQ7CisgICAgICAgIEFTU0VSVChpZGVudGlmaWVyID09IENTU1Zh
bHVlSW52YWxpZCB8fCAoaWRlbnRpZmllciA+PSBDU1NWYWx1ZVh4U21hbGwgJiYgaWRlbnRpZmll
ciA8PSBDU1NWYWx1ZVdlYmtpdFh4eExhcmdlKSk7CisgICAgICAgIHJldHVybiBpZGVudGlmaWVy
OworICAgIH0KKyAgICBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFNtb290aGluZ01vZGU+KG1fZm9udFNtb290aGluZyk7IH0K
KyAgICBib29sIGlzU3BlY2lmaWVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTcGVjaWZpZWRG
b250OyB9CisKKyAgICB2b2lkIHNldE9uZUZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWls
eSkgeyBBU1NFUlQobV9mYW1pbGllcy5zaXplKCkgPT0gMSk7IG1fZmFtaWxpZXNbMF0gPSBmYW1p
bHk7IH0KKyAgICB2b2lkIHNldEZhbWlsaWVzKGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBm
YW1pbGllcykgeyBtX2ZhbWlsaWVzID0gUmVmQ291bnRlZEFycmF5PEF0b21pY1N0cmluZz4oZmFt
aWxpZXMpOyB9CisgICAgdm9pZCBzZXRGYW1pbGllcyhjb25zdCBSZWZDb3VudGVkQXJyYXk8QXRv
bWljU3RyaW5nPiYgZmFtaWxpZXMpIHsgbV9mYW1pbGllcyA9IGZhbWlsaWVzOyB9CisgICAgdm9p
ZCBzZXRTcGVjaWZpZWRTaXplKGZsb2F0IHMpIHsgbV9zcGVjaWZpZWRTaXplID0gY2xhbXBUb0Zs
b2F0KHMpOyB9CisgICAgdm9pZCBzZXRJc0Fic29sdXRlU2l6ZShib29sIHMpIHsgbV9pc0Fic29s
dXRlU2l6ZSA9IHM7IH0KKyAgICB2b2lkIHNldEtlcm5pbmcoS2VybmluZyBrZXJuaW5nKSB7IG1f
a2VybmluZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihrZXJuaW5nKTsgfQorICAgIHZvaWQgc2V0
S2V5d29yZFNpemUodW5zaWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzaXplIDw9
IDgpOworICAgICAgICBtX2tleXdvcmRTaXplID0gc2l6ZTsKKyAgICAgICAgQVNTRVJUKG1fa2V5
d29yZFNpemUgPT0gc2l6ZSk7IC8vIE1ha2Ugc3VyZSBpdCBmaXRzIGluIHRoZSBiaXRmaWVsZC4K
KyAgICB9CisgICAgdm9pZCBzZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVyKENTU1ZhbHVlSUQg
aWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIEFTU0VSVCghaWRlbnRpZmllciB8fCAoaWRlbnRp
ZmllciA+PSBDU1NWYWx1ZVh4U21hbGwgJiYgaWRlbnRpZmllciA8PSBDU1NWYWx1ZVdlYmtpdFh4
eExhcmdlKSk7CisgICAgICAgIHN0YXRpY19hc3NlcnQoQ1NTVmFsdWVXZWJraXRYeHhMYXJnZSAt
IENTU1ZhbHVlWHhTbWFsbCArIDEgPT0gOCwgIk1heGltdW0ga2V5d29yZCBzaXplIHNob3VsZCBi
ZSA4LiIpOworICAgICAgICBzZXRLZXl3b3JkU2l6ZShpZGVudGlmaWVyID8gaWRlbnRpZmllciAt
IENTU1ZhbHVlWHhTbWFsbCArIDEgOiAwKTsKKyAgICB9CisgICAgdm9pZCBzZXRGb250U21vb3Ro
aW5nKEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZykgeyBtX2ZvbnRTbW9vdGhpbmcgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc21vb3RoaW5nKTsgfQorICAgIHZvaWQgc2V0SXNTcGVjaWZpZWRG
b250KGJvb2wgaXNTcGVjaWZpZWRGb250KSB7IG1faXNTcGVjaWZpZWRGb250ID0gaXNTcGVjaWZp
ZWRGb250OyB9CisKKyNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQorICAgIGJvb2wgZmFtaWxp
ZXNFcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIG90
aGVyKSBjb25zdDsKKworICAgIGJvb2wgZXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBm
YW1pbGllc0VxdWFsRm9yVGV4dEF1dG9TaXppbmcob3RoZXIpCisgICAgICAgICAgICAmJiBtX3Nw
ZWNpZmllZFNpemUgPT0gb3RoZXIubV9zcGVjaWZpZWRTaXplCisgICAgICAgICAgICAmJiB2YXJp
YW50U2V0dGluZ3MoKSA9PSBvdGhlci52YXJpYW50U2V0dGluZ3MoKQorICAgICAgICAgICAgJiYg
bV9pc0Fic29sdXRlU2l6ZSA9PSBvdGhlci5tX2lzQWJzb2x1dGVTaXplOworICAgIH0KKyNlbmRp
ZgorCisgICAgLy8gSW5pdGlhbCB2YWx1ZXMgZm9yIGZvbnQgcHJvcGVydGllcy4KKyAgICBzdGF0
aWMgc3RkOjpvcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IGluaXRpYWxJdGFsaWMoKSB7IHJl
dHVybiBzdGQ6Om51bGxvcHQ7IH0KKyAgICBzdGF0aWMgRm9udFN0eWxlQXhpcyBpbml0aWFsRm9u
dFN0eWxlQXhpcygpIHsgcmV0dXJuIEZvbnRTdHlsZUF4aXM6OnNsbnQ7IH0KKyAgICBzdGF0aWMg
Rm9udFNlbGVjdGlvblZhbHVlIGluaXRpYWxXZWlnaHQoKSB7IHJldHVybiBub3JtYWxXZWlnaHRW
YWx1ZSgpOyB9CisgICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBpbml0aWFsU3RyZXRjaCgp
IHsgcmV0dXJuIG5vcm1hbFN0cmV0Y2hWYWx1ZSgpOyB9CisgICAgc3RhdGljIEZvbnRTbWFsbENh
cHMgaW5pdGlhbFNtYWxsQ2FwcygpIHsgcmV0dXJuIEZvbnRTbWFsbENhcHM6Ok9mZjsgfQorICAg
IHN0YXRpYyBLZXJuaW5nIGluaXRpYWxLZXJuaW5nKCkgeyByZXR1cm4gS2VybmluZzo6QXV0bzsg
fQorICAgIHN0YXRpYyBGb250U21vb3RoaW5nTW9kZSBpbml0aWFsRm9udFNtb290aGluZygpIHsg
cmV0dXJuIEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nOyB9CisgICAgc3RhdGljIFRl
eHRSZW5kZXJpbmdNb2RlIGluaXRpYWxUZXh0UmVuZGVyaW5nTW9kZSgpIHsgcmV0dXJuIFRleHRS
ZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJlbmRlcmluZzsgfQorICAgIHN0YXRpYyBGb250U3ludGhl
c2lzIGluaXRpYWxGb250U3ludGhlc2lzKCkgeyByZXR1cm4gRm9udFN5bnRoZXNpc1dlaWdodCB8
IEZvbnRTeW50aGVzaXNTdHlsZSB8IEZvbnRTeW50aGVzaXNTbWFsbENhcHM7IH0KKyAgICBzdGF0
aWMgRm9udFZhcmlhbnRQb3NpdGlvbiBpbml0aWFsVmFyaWFudFBvc2l0aW9uKCkgeyByZXR1cm4g
Rm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsOyB9CisgICAgc3RhdGljIEZvbnRWYXJpYW50Q2Fw
cyBpbml0aWFsVmFyaWFudENhcHMoKSB7IHJldHVybiBGb250VmFyaWFudENhcHM6Ok5vcm1hbDsg
fQorICAgIHN0YXRpYyBGb250VmFyaWFudEFsdGVybmF0ZXMgaW5pdGlhbFZhcmlhbnRBbHRlcm5h
dGVzKCkgeyByZXR1cm4gRm9udFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWw7IH0KKyAgICBzdGF0
aWMgRm9udE9wdGljYWxTaXppbmcgaW5pdGlhbE9wdGljYWxTaXppbmcoKSB7IHJldHVybiBGb250
T3B0aWNhbFNpemluZzo6RW5hYmxlZDsgfQorICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcm
IGluaXRpYWxMb2NhbGUoKSB7IHJldHVybiBudWxsQXRvbSgpOyB9CisKK3ByaXZhdGU6CisgICAg
UmVmQ291bnRlZEFycmF5PEF0b21pY1N0cmluZz4gbV9mYW1pbGllcyB7IDEgfTsKKworICAgIGZs
b2F0IG1fc3BlY2lmaWVkU2l6ZSB7IDAgfTsgICAvLyBTcGVjaWZpZWQgQ1NTIHZhbHVlLiBJbmRl
cGVuZGVudCBvZiByZW5kZXJpbmcgaXNzdWVzIHN1Y2ggYXMgaW50ZWdlcgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyByb3VuZGluZywgbWluaW11bSBmb250IHNpemVzLCBhbmQgem9v
bWluZy4KKyAgICB1bnNpZ25lZCBtX2lzQWJzb2x1dGVTaXplIDogMTsgLy8gV2hldGhlciBvciBu
b3QgQ1NTIHNwZWNpZmllZCBhbiBleHBsaWNpdCBzaXplCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gKGxvZ2ljYWwgc2l6ZXMgbGlrZSAibWVkaXVtIiBkb24ndCBjb3VudCku
CisgICAgdW5zaWduZWQgbV9rZXJuaW5nIDogMjsgLy8gS2VybmluZworCisgICAgdW5zaWduZWQg
bV9rZXl3b3JkU2l6ZSA6IDQ7IC8vIFdlIGNhY2hlIHdoZXRoZXIgb3Igbm90IGEgZm9udCBpcyBj
dXJyZW50bHkgcmVwcmVzZW50ZWQgYnkgYSBDU1Mga2V5d29yZCAoZS5nLiwgbWVkaXVtKS4gIElm
IHNvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiB3ZSBjYW4gYWNjdXJhdGVs
eSB0cmFuc2xhdGUgYWNyb3NzIGRpZmZlcmVudCBnZW5lcmljIGZhbWlsaWVzIHRvIGFkanVzdCBm
b3IgZGlmZmVyZW50IHByZWZlcmVuY2Ugc2V0dGluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIChlLmcuLCAxM3B4IG1vbm9zcGFjZSB2cy4gMTZweCBldmVyeXRoaW5nIGVsc2UpLiAg
U2l6ZXMgYXJlIDEtOCAobGlrZSB0aGUgSFRNTCBzaXplIHZhbHVlcyBmb3IgPGZvbnQ+KS4KKwor
ICAgIHVuc2lnbmVkIG1fZm9udFNtb290aGluZyA6IDI7IC8vIEZvbnRTbW9vdGhpbmdNb2RlCisg
ICAgdW5zaWduZWQgbV9pc1NwZWNpZmllZEZvbnQgOiAxOyAvLyBUcnVlIGlmIGEgd2ViIHBhZ2Ug
c3BlY2lmaWVzIGEgbm9uLWdlbmVyaWMgZm9udCBmYW1pbHkgYXMgdGhlIGZpcnN0IGZvbnQgZmFt
aWx5LgorfTsKKworaW5saW5lIGJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6b3BlcmF0b3I9
PShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1
cm4gRm9udERlc2NyaXB0aW9uOjpvcGVyYXRvcj09KG90aGVyKQorICAgICAgICAmJiBtX2ZhbWls
aWVzID09IG90aGVyLm1fZmFtaWxpZXMKKyAgICAgICAgJiYgbV9zcGVjaWZpZWRTaXplID09IG90
aGVyLm1fc3BlY2lmaWVkU2l6ZQorICAgICAgICAmJiBtX2lzQWJzb2x1dGVTaXplID09IG90aGVy
Lm1faXNBYnNvbHV0ZVNpemUKKyAgICAgICAgJiYgbV9rZXJuaW5nID09IG90aGVyLm1fa2Vybmlu
ZworICAgICAgICAmJiBtX2tleXdvcmRTaXplID09IG90aGVyLm1fa2V5d29yZFNpemUKKyAgICAg
ICAgJiYgbV9mb250U21vb3RoaW5nID09IG90aGVyLm1fZm9udFNtb290aGluZworICAgICAgICAm
JiBtX2lzU3BlY2lmaWVkRm9udCA9PSBvdGhlci5tX2lzU3BlY2lmaWVkRm9udDsKK30KKworfQor
CisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9s
LXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3Bl
cnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURl
c2NyaXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDE2ICsyMiwxMCBAQAogICoKICAqLwogCi0jaWZuZGVmIEZvbnREZXNj
cmlwdGlvbl9oCi0jZGVmaW5lIEZvbnREZXNjcmlwdGlvbl9oCisjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJGb250U2VsZWN0aW9uQWxnb3Jp
dGhtLmgiCi0jaW5jbHVkZSAiRm9udFRhZ2dlZFNldHRpbmdzLmgiCi0jaW5jbHVkZSAiVGV4dEZs
YWdzLmgiCi0jaW5jbHVkZSAiV2ViS2l0Rm9udEZhbWlseU5hbWVzLmgiCi0jaW5jbHVkZSA8dW5p
Y29kZS91c2NyaXB0Lmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlICJG
b250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZEFycmF5Lmg+CiAjaW5j
bHVkZSA8d3RmL1ZhcmlhbnQuaD4KIApAQCAtNDksMTgxICs0Myw4IEBAIHR5cGVkZWYgRm9udEZh
bWlseVNwZWNpZmljYXRpb25Db3JlVGV4dCAKIHR5cGVkZWYgRm9udEZhbWlseVNwZWNpZmljYXRp
b25OdWxsIEZvbnRGYW1pbHlQbGF0Zm9ybVNwZWNpZmljYXRpb247CiAjZW5kaWYKIAotI2RlZmlu
ZSBVU0VfUExBVEZPUk1fU1lTVEVNX0ZBTExCQUNLX0xJU1QgKChQTEFURk9STShJT1MpICYmIF9f
SVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDAwMCkgfHwgKFBMQVRGT1JNKE1B
QykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEzMDApKQotCiB0eXBl
ZGVmIFZhcmlhbnQ8QXRvbWljU3RyaW5nLCBGb250RmFtaWx5UGxhdGZvcm1TcGVjaWZpY2F0aW9u
PiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbjsKIAotdXNpbmcgbmFtZXNwYWNlIFdlYktpdEZvbnRG
YW1pbHlOYW1lczsKLQotY2xhc3MgRm9udERlc2NyaXB0aW9uIHsKLXB1YmxpYzoKLSAgICBXRUJD
T1JFX0VYUE9SVCBGb250RGVzY3JpcHRpb24oKTsKLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0K
LQotICAgIGZsb2F0IGNvbXB1dGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcHV0ZWRTaXpl
OyB9Ci0gICAgdW5zaWduZWQgY29tcHV0ZWRQaXhlbFNpemUoKSBjb25zdCB7IHJldHVybiB1bnNp
Z25lZChtX2NvbXB1dGVkU2l6ZSArIDAuNWYpOyB9Ci0gICAgc3RkOjpvcHRpb25hbDxGb250U2Vs
ZWN0aW9uVmFsdWU+IGl0YWxpYygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNlbGVjdGlvblJlcXVl
c3Quc2xvcGU7IH0KLSAgICBGb250U2VsZWN0aW9uVmFsdWUgc3RyZXRjaCgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udFNlbGVjdGlvblJlcXVlc3Qud2lkdGg7IH0KLSAgICBGb250U2VsZWN0aW9uVmFs
dWUgd2VpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mb250U2VsZWN0aW9uUmVxdWVzdC53ZWlnaHQ7
IH0KLSAgICBGb250U2VsZWN0aW9uUmVxdWVzdCBmb250U2VsZWN0aW9uUmVxdWVzdCgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udFNlbGVjdGlvblJlcXVlc3Q7IH0KLSAgICBGb250UmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFJlbmRlcmlu
Z01vZGU+KG1fcmVuZGVyaW5nTW9kZSk7IH0KLSAgICBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVu
ZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFRleHRSZW5kZXJpbmdNb2Rl
PihtX3RleHRSZW5kZXJpbmcpOyB9Ci0gICAgVVNjcmlwdENvZGUgc2NyaXB0KCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VVNjcmlwdENvZGU+KG1fc2NyaXB0KTsgfQotICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxlKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbGU7IH0KLQotICAgIEZv
bnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZv
bnRPcmllbnRhdGlvbj4obV9vcmllbnRhdGlvbik7IH0KLSAgICBOb25DSktHbHlwaE9yaWVudGF0
aW9uIG5vbkNKS0dseXBoT3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxO
b25DSktHbHlwaE9yaWVudGF0aW9uPihtX25vbkNKS0dseXBoT3JpZW50YXRpb24pOyB9Ci0gICAg
Rm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxGb250V2lkdGhWYXJpYW50PihtX3dpZHRoVmFyaWFudCk7IH0KLSAgICBjb25zdCBGb250RmVh
dHVyZVNldHRpbmdzJiBmZWF0dXJlU2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVT
ZXR0aW5nczsgfQotICAgIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgdmFyaWF0aW9uU2V0
dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhdGlvblNldHRpbmdzOyB9Ci0gICAgRm9udFN5
bnRoZXNpcyBmb250U3ludGhlc2lzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFN5
bnRoZXNpcz4obV9mb250U3ludGhlc2lzKTsgfQotICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIHZh
cmlhbnRDb21tb25MaWdhdHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFy
aWFudExpZ2F0dXJlcz4obV92YXJpYW50Q29tbW9uTGlnYXR1cmVzKTsgfQotICAgIEZvbnRWYXJp
YW50TGlnYXR1cmVzIHZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnRMaWdhdHVyZXM+KG1fdmFyaWFudERpc2NyZXRpb25h
cnlMaWdhdHVyZXMpOyB9Ci0gICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgdmFyaWFudEhpc3Rvcmlj
YWxMaWdhdHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudExpZ2F0
dXJlcz4obV92YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyk7IH0KLSAgICBGb250VmFyaWFudExp
Z2F0dXJlcyB2YXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXMoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxGb250VmFyaWFudExpZ2F0dXJlcz4obV92YXJpYW50Q29udGV4dHVhbEFsdGVybmF0
ZXMpOyB9Ci0gICAgRm9udFZhcmlhbnRQb3NpdGlvbiB2YXJpYW50UG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudFBvc2l0aW9uPihtX3ZhcmlhbnRQb3NpdGlv
bik7IH0KLSAgICBGb250VmFyaWFudENhcHMgdmFyaWFudENhcHMoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxGb250VmFyaWFudENhcHM+KG1fdmFyaWFudENhcHMpOyB9Ci0gICAgRm9udFZh
cmlhbnROdW1lcmljRmlndXJlIHZhcmlhbnROdW1lcmljRmlndXJlKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnROdW1lcmljRmlndXJlPihtX3ZhcmlhbnROdW1lcmljRmln
dXJlKTsgfQotICAgIEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmcgdmFyaWFudE51bWVyaWNTcGFj
aW5nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnROdW1lcmljU3BhY2lu
Zz4obV92YXJpYW50TnVtZXJpY1NwYWNpbmcpOyB9Ci0gICAgRm9udFZhcmlhbnROdW1lcmljRnJh
Y3Rpb24gdmFyaWFudE51bWVyaWNGcmFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uPihtX3ZhcmlhbnROdW1lcmljRnJhY3Rpb24pOyB9
Ci0gICAgRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbCB2YXJpYW50TnVtZXJpY09yZGluYWwoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudE51bWVyaWNPcmRpbmFsPihtX3Zh
cmlhbnROdW1lcmljT3JkaW5hbCk7IH0KLSAgICBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVy
byB2YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8+KG1fdmFyaWFudE51bWVyaWNTbGFzaGVkWmVy
byk7IH0KLSAgICBGb250VmFyaWFudEFsdGVybmF0ZXMgdmFyaWFudEFsdGVybmF0ZXMoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudEFsdGVybmF0ZXM+KG1fdmFyaWFudEFs
dGVybmF0ZXMpOyB9Ci0gICAgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IHZhcmlhbnRFYXN0
QXNpYW5WYXJpYW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnRFYXN0
QXNpYW5WYXJpYW50PihtX3ZhcmlhbnRFYXN0QXNpYW5WYXJpYW50KTsgfQotICAgIEZvbnRWYXJp
YW50RWFzdEFzaWFuV2lkdGggdmFyaWFudEVhc3RBc2lhbldpZHRoKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aD4obV92YXJpYW50RWFzdEFzaWFu
V2lkdGgpOyB9Ci0gICAgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5IHZhcmlhbnRFYXN0QXNpYW5S
dWJ5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5
PihtX3ZhcmlhbnRFYXN0QXNpYW5SdWJ5KTsgfQotICAgIEZvbnRWYXJpYW50U2V0dGluZ3MgdmFy
aWFudFNldHRpbmdzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB7IHZhcmlhbnRDb21t
b25MaWdhdHVyZXMoKSwKLSAgICAgICAgICAgIHZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVz
KCksCi0gICAgICAgICAgICB2YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcygpLAotICAgICAgICAg
ICAgdmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzKCksCi0gICAgICAgICAgICB2YXJpYW50UG9z
aXRpb24oKSwKLSAgICAgICAgICAgIHZhcmlhbnRDYXBzKCksCi0gICAgICAgICAgICB2YXJpYW50
TnVtZXJpY0ZpZ3VyZSgpLAotICAgICAgICAgICAgdmFyaWFudE51bWVyaWNTcGFjaW5nKCksCi0g
ICAgICAgICAgICB2YXJpYW50TnVtZXJpY0ZyYWN0aW9uKCksCi0gICAgICAgICAgICB2YXJpYW50
TnVtZXJpY09yZGluYWwoKSwKLSAgICAgICAgICAgIHZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8o
KSwKLSAgICAgICAgICAgIHZhcmlhbnRBbHRlcm5hdGVzKCksCi0gICAgICAgICAgICB2YXJpYW50
RWFzdEFzaWFuVmFyaWFudCgpLAotICAgICAgICAgICAgdmFyaWFudEVhc3RBc2lhbldpZHRoKCks
Ci0gICAgICAgICAgICB2YXJpYW50RWFzdEFzaWFuUnVieSgpIH07Ci0gICAgfQotICAgIEZvbnRP
cHRpY2FsU2l6aW5nIG9wdGljYWxTaXppbmcoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxG
b250T3B0aWNhbFNpemluZz4obV9vcHRpY2FsU2l6aW5nKTsgfQotICAgIEZvbnRTdHlsZUF4aXMg
Zm9udFN0eWxlQXhpcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFN0eWxlQXhpcyA/IEZvbnRTdHls
ZUF4aXM6Oml0YWwgOiBGb250U3R5bGVBeGlzOjpzbG50OyB9Ci0gICAgQWxsb3dVc2VySW5zdGFs
bGVkRm9udHMgc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxBbGxvd1VzZXJJbnN0YWxsZWRGb250cz4obV9zaG91bGRBbGxvd1VzZXJJbnN0
YWxsZWRGb250cyk7IH0KLQotICAgIHZvaWQgc2V0Q29tcHV0ZWRTaXplKGZsb2F0IHMpIHsgbV9j
b21wdXRlZFNpemUgPSBjbGFtcFRvRmxvYXQocyk7IH0KLSAgICB2b2lkIHNldEl0YWxpYyhzdGQ6
Om9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gaXRhbGljKSB7IG1fZm9udFNlbGVjdGlvblJl
cXVlc3Quc2xvcGUgPSBpdGFsaWM7IH0KLSAgICB2b2lkIHNldFN0cmV0Y2goRm9udFNlbGVjdGlv
blZhbHVlIHN0cmV0Y2gpIHsgbV9mb250U2VsZWN0aW9uUmVxdWVzdC53aWR0aCA9IHN0cmV0Y2g7
IH0KLSAgICB2b2lkIHNldElzSXRhbGljKGJvb2wgaXNJdGFsaWMpIHsgc2V0SXRhbGljKGlzSXRh
bGljID8gc3RkOjpvcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IHsgaXRhbGljVmFsdWUoKSB9
IDogc3RkOjpvcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IHsgfSk7IH0KLSAgICB2b2lkIHNl
dFdlaWdodChGb250U2VsZWN0aW9uVmFsdWUgd2VpZ2h0KSB7IG1fZm9udFNlbGVjdGlvblJlcXVl
c3Qud2VpZ2h0ID0gd2VpZ2h0OyB9Ci0gICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKEZvbnRSZW5k
ZXJpbmdNb2RlIG1vZGUpIHsgbV9yZW5kZXJpbmdNb2RlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG1vZGUpOyB9Ci0gICAgdm9pZCBzZXRUZXh0UmVuZGVyaW5nTW9kZShUZXh0UmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmcpIHsgbV90ZXh0UmVuZGVyaW5nID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJl
bmRlcmluZyk7IH0KLSAgICB2b2lkIHNldE9yaWVudGF0aW9uKEZvbnRPcmllbnRhdGlvbiBvcmll
bnRhdGlvbikgeyBtX29yaWVudGF0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9yaWVudGF0
aW9uKTsgfQotICAgIHZvaWQgc2V0Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbihOb25DSktHbHlwaE9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbiA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihvcmllbnRhdGlvbik7IH0KLSAgICB2b2lkIHNldFdpZHRoVmFyaWFu
dChGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCkgeyBtX3dpZHRoVmFyaWFudCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih3aWR0aFZhcmlhbnQpOyB9IC8vIE1ha2Ugc3VyZSBuZXcgY2FsbGVy
cyBvZiB0aGlzIHN5bmMgd2l0aCBGb250UGxhdGZvcm1EYXRhOjppc0ZvclRleHRDb21iaW5lKCkh
Ci0gICAgdm9pZCBzZXRMb2NhbGUoY29uc3QgQXRvbWljU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRG
ZWF0dXJlU2V0dGluZ3MoRm9udEZlYXR1cmVTZXR0aW5ncyYmIHNldHRpbmdzKSB7IG1fZmVhdHVy
ZVNldHRpbmdzID0gV1RGTW92ZShzZXR0aW5ncyk7IH0KLSNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZP
TlRTKQotICAgIHZvaWQgc2V0VmFyaWF0aW9uU2V0dGluZ3MoRm9udFZhcmlhdGlvblNldHRpbmdz
JiYgc2V0dGluZ3MpIHsgbV92YXJpYXRpb25TZXR0aW5ncyA9IFdURk1vdmUoc2V0dGluZ3MpOyB9
Ci0jZW5kaWYKLSAgICB2b2lkIHNldEZvbnRTeW50aGVzaXMoRm9udFN5bnRoZXNpcyBmb250U3lu
dGhlc2lzKSB7IG1fZm9udFN5bnRoZXNpcyA9IGZvbnRTeW50aGVzaXM7IH0KLSAgICB2b2lkIHNl
dFZhcmlhbnRDb21tb25MaWdhdHVyZXMoRm9udFZhcmlhbnRMaWdhdHVyZXMgdmFyaWFudCkgeyBt
X3ZhcmlhbnRDb21tb25MaWdhdHVyZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7
IH0KLSAgICB2b2lkIHNldFZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKEZvbnRWYXJpYW50
TGlnYXR1cmVzIHZhcmlhbnQpIHsgbV92YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcyA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudEhpc3Rv
cmljYWxMaWdhdHVyZXMoRm9udFZhcmlhbnRMaWdhdHVyZXMgdmFyaWFudCkgeyBtX3ZhcmlhbnRI
aXN0b3JpY2FsTGlnYXR1cmVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Ci0g
ICAgdm9pZCBzZXRWYXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXMoRm9udFZhcmlhbnRMaWdhdHVy
ZXMgdmFyaWFudCkgeyBtX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudFBvc2l0aW9uKEZvbnRW
YXJpYW50UG9zaXRpb24gdmFyaWFudCkgeyBtX3ZhcmlhbnRQb3NpdGlvbiA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudENhcHMoRm9udFZhcmlh
bnRDYXBzIHZhcmlhbnQpIHsgbV92YXJpYW50Q2FwcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2
YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudE51bWVyaWNGaWd1cmUoRm9udFZhcmlhbnRO
dW1lcmljRmlndXJlIHZhcmlhbnQpIHsgbV92YXJpYW50TnVtZXJpY0ZpZ3VyZSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudE51bWVyaWNTcGFj
aW5nKEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmcgdmFyaWFudCkgeyBtX3ZhcmlhbnROdW1lcmlj
U3BhY2luZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0
VmFyaWFudE51bWVyaWNGcmFjdGlvbihGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbiB2YXJpYW50
KSB7IG1fdmFyaWFudE51bWVyaWNGcmFjdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJp
YW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudE51bWVyaWNPcmRpbmFsKEZvbnRWYXJpYW50TnVt
ZXJpY09yZGluYWwgdmFyaWFudCkgeyBtX3ZhcmlhbnROdW1lcmljT3JkaW5hbCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudE51bWVyaWNTbGFz
aGVkWmVybyhGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyB2YXJpYW50KSB7IG1fdmFyaWFu
dE51bWVyaWNTbGFzaGVkWmVybyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQot
ICAgIHZvaWQgc2V0VmFyaWFudEFsdGVybmF0ZXMoRm9udFZhcmlhbnRBbHRlcm5hdGVzIHZhcmlh
bnQpIHsgbV92YXJpYW50QWx0ZXJuYXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50
KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudEVhc3RBc2lhblZhcmlhbnQoRm9udFZhcmlhbnRFYXN0
QXNpYW5WYXJpYW50IHZhcmlhbnQpIHsgbV92YXJpYW50RWFzdEFzaWFuVmFyaWFudCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudEVhc3RBc2lh
bldpZHRoKEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGggdmFyaWFudCkgeyBtX3ZhcmlhbnRFYXN0
QXNpYW5XaWR0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQg
c2V0VmFyaWFudEVhc3RBc2lhblJ1YnkoRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5IHZhcmlhbnQp
IHsgbV92YXJpYW50RWFzdEFzaWFuUnVieSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50
KTsgfQotICAgIHZvaWQgc2V0T3B0aWNhbFNpemluZyhGb250T3B0aWNhbFNpemluZyBzaXppbmcp
IHsgbV9vcHRpY2FsU2l6aW5nID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpemluZyk7IH0KLSAg
ICB2b2lkIHNldEZvbnRTdHlsZUF4aXMoRm9udFN0eWxlQXhpcyBheGlzKSB7IG1fZm9udFN0eWxl
QXhpcyA9IGF4aXMgPT0gRm9udFN0eWxlQXhpczo6aXRhbDsgfQotICAgIHZvaWQgc2V0U2hvdWxk
QWxsb3dVc2VySW5zdGFsbGVkRm9udHMoQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgc2hvdWxkQWxs
b3dVc2VySW5zdGFsbGVkRm9udHMpIHsgbV9zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7IH0K
LQotICAgIHN0YXRpYyB2b2lkIGludmFsaWRhdGVDYWNoZXMoKTsKLQotcHJpdmF0ZToKLSAgICAv
LyBGSVhNRTogSW52ZXN0aWdhdGUgbW92aW5nIHRoZXNlIGludG8gdGhlaXIgb3duIG9iamVjdCBv
biB0aGUgaGVhcCAodG8gc2F2ZSBtZW1vcnkpLgotICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MgbV9m
ZWF0dXJlU2V0dGluZ3M7Ci0gICAgRm9udFZhcmlhdGlvblNldHRpbmdzIG1fdmFyaWF0aW9uU2V0
dGluZ3M7Ci0gICAgQXRvbWljU3RyaW5nIG1fbG9jYWxlOwotCi0gICAgRm9udFNlbGVjdGlvblJl
cXVlc3QgbV9mb250U2VsZWN0aW9uUmVxdWVzdDsKLSAgICBmbG9hdCBtX2NvbXB1dGVkU2l6ZSB7
IDAgfTsgLy8gQ29tcHV0ZWQgc2l6ZSBhZGp1c3RlZCBmb3IgdGhlIG1pbmltdW0gZm9udCBzaXpl
IGFuZCB0aGUgem9vbSBmYWN0b3IuCi0gICAgdW5zaWduZWQgbV9vcmllbnRhdGlvbiA6IDE7IC8v
IEZvbnRPcmllbnRhdGlvbiAtIFdoZXRoZXIgdGhlIGZvbnQgaXMgcmVuZGVyaW5nIG9uIGEgaG9y
aXpvbnRhbCBsaW5lIG9yIGEgdmVydGljYWwgbGluZS4KLSAgICB1bnNpZ25lZCBtX25vbkNKS0ds
eXBoT3JpZW50YXRpb24gOiAxOyAvLyBOb25DSktHbHlwaE9yaWVudGF0aW9uIC0gT25seSB1c2Vk
IGJ5IHZlcnRpY2FsIHRleHQuIERldGVybWluZXMgdGhlIGRlZmF1bHQgb3JpZW50YXRpb24gZm9y
IG5vbi1pZGVvZ3JhcGggZ2x5cGhzLgotICAgIHVuc2lnbmVkIG1fd2lkdGhWYXJpYW50IDogMjsg
Ly8gRm9udFdpZHRoVmFyaWFudAotICAgIHVuc2lnbmVkIG1fcmVuZGVyaW5nTW9kZSA6IDE7IC8v
IFVzZWQgdG8gc3dpdGNoIGJldHdlZW4gQ0cgYW5kIEdESSB0ZXh0IG9uIFdpbmRvd3MuCi0gICAg
dW5zaWduZWQgbV90ZXh0UmVuZGVyaW5nIDogMjsgLy8gVGV4dFJlbmRlcmluZ01vZGUKLSAgICB1
bnNpZ25lZCBtX3NjcmlwdCA6IDc7IC8vIFVzZWQgdG8gaGVscCBjaG9vc2UgYW4gYXBwcm9wcmlh
dGUgZm9udCBmb3IgZ2VuZXJpYyBmb250IGZhbWlsaWVzLgotICAgIHVuc2lnbmVkIG1fZm9udFN5
bnRoZXNpcyA6IDM7IC8vIEZvbnRTeW50aGVzaXMgdHlwZQotICAgIHVuc2lnbmVkIG1fdmFyaWFu
dENvbW1vbkxpZ2F0dXJlcyA6IDI7IC8vIEZvbnRWYXJpYW50TGlnYXR1cmVzCi0gICAgdW5zaWdu
ZWQgbV92YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcyA6IDI7IC8vIEZvbnRWYXJpYW50TGln
YXR1cmVzCi0gICAgdW5zaWduZWQgbV92YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyA6IDI7IC8v
IEZvbnRWYXJpYW50TGlnYXR1cmVzCi0gICAgdW5zaWduZWQgbV92YXJpYW50Q29udGV4dHVhbEFs
dGVybmF0ZXMgOiAyOyAvLyBGb250VmFyaWFudExpZ2F0dXJlcwotICAgIHVuc2lnbmVkIG1fdmFy
aWFudFBvc2l0aW9uIDogMjsgLy8gRm9udFZhcmlhbnRQb3NpdGlvbgotICAgIHVuc2lnbmVkIG1f
dmFyaWFudENhcHMgOiAzOyAvLyBGb250VmFyaWFudENhcHMKLSAgICB1bnNpZ25lZCBtX3Zhcmlh
bnROdW1lcmljRmlndXJlIDogMjsgLy8gRm9udFZhcmlhbnROdW1lcmljRmlndXJlCi0gICAgdW5z
aWduZWQgbV92YXJpYW50TnVtZXJpY1NwYWNpbmcgOiAyOyAvLyBGb250VmFyaWFudE51bWVyaWNT
cGFjaW5nCi0gICAgdW5zaWduZWQgbV92YXJpYW50TnVtZXJpY0ZyYWN0aW9uIDogMjsgLy8gRm9u
dFZhcmlhbnROdW1lcmljRnJhY3Rpb24KLSAgICB1bnNpZ25lZCBtX3ZhcmlhbnROdW1lcmljT3Jk
aW5hbCA6IDE7IC8vIEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWwKLSAgICB1bnNpZ25lZCBtX3Zh
cmlhbnROdW1lcmljU2xhc2hlZFplcm8gOiAxOyAvLyBGb250VmFyaWFudE51bWVyaWNTbGFzaGVk
WmVybwotICAgIHVuc2lnbmVkIG1fdmFyaWFudEFsdGVybmF0ZXMgOiAxOyAvLyBGb250VmFyaWFu
dEFsdGVybmF0ZXMKLSAgICB1bnNpZ25lZCBtX3ZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IDogMzsg
Ly8gRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50Ci0gICAgdW5zaWduZWQgbV92YXJpYW50RWFz
dEFzaWFuV2lkdGggOiAyOyAvLyBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoCi0gICAgdW5zaWdu
ZWQgbV92YXJpYW50RWFzdEFzaWFuUnVieSA6IDE7IC8vIEZvbnRWYXJpYW50RWFzdEFzaWFuUnVi
eQotICAgIHVuc2lnbmVkIG1fb3B0aWNhbFNpemluZyA6IDE7IC8vIEZvbnRPcHRpY2FsU2l6aW5n
Ci0gICAgdW5zaWduZWQgbV9mb250U3R5bGVBeGlzIDogMTsgLy8gV2hldGhlciAiZm9udC1zdHls
ZTogaXRhbGljIiBvciAiZm9udC1zdHlsZTogb2JsaXF1ZSAyMGRlZyIgd2FzIHNwZWNpZmllZAot
ICAgIHVuc2lnbmVkIG1fc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgOiAxOyAvLyBBbGxv
d1VzZXJJbnN0YWxsZWRGb250czogSWYgdGhpcyBkZXNjcmlwdGlvbiBpcyBhbGxvd2VkIHRvIG1h
dGNoIGEgdXNlci1pbnN0YWxsZWQgZm9udAotfTsKLQotaW5saW5lIGJvb2wgRm9udERlc2NyaXB0
aW9uOjpvcGVyYXRvcj09KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fY29tcHV0ZWRTaXplID09IG90aGVyLm1fY29tcHV0ZWRTaXplCi0gICAgICAg
ICYmIG1fZm9udFNlbGVjdGlvblJlcXVlc3QgPT0gb3RoZXIubV9mb250U2VsZWN0aW9uUmVxdWVz
dAotICAgICAgICAmJiBtX3JlbmRlcmluZ01vZGUgPT0gb3RoZXIubV9yZW5kZXJpbmdNb2RlCi0g
ICAgICAgICYmIG1fdGV4dFJlbmRlcmluZyA9PSBvdGhlci5tX3RleHRSZW5kZXJpbmcKLSAgICAg
ICAgJiYgbV9vcmllbnRhdGlvbiA9PSBvdGhlci5tX29yaWVudGF0aW9uCi0gICAgICAgICYmIG1f
bm9uQ0pLR2x5cGhPcmllbnRhdGlvbiA9PSBvdGhlci5tX25vbkNKS0dseXBoT3JpZW50YXRpb24K
LSAgICAgICAgJiYgbV93aWR0aFZhcmlhbnQgPT0gb3RoZXIubV93aWR0aFZhcmlhbnQKLSAgICAg
ICAgJiYgbV9sb2NhbGUgPT0gb3RoZXIubV9sb2NhbGUKLSAgICAgICAgJiYgbV9mZWF0dXJlU2V0
dGluZ3MgPT0gb3RoZXIubV9mZWF0dXJlU2V0dGluZ3MKLSNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZP
TlRTKQotICAgICAgICAmJiBtX3ZhcmlhdGlvblNldHRpbmdzID09IG90aGVyLm1fdmFyaWF0aW9u
U2V0dGluZ3MKLSNlbmRpZgotICAgICAgICAmJiBtX2ZvbnRTeW50aGVzaXMgPT0gb3RoZXIubV9m
b250U3ludGhlc2lzCi0gICAgICAgICYmIG1fdmFyaWFudENvbW1vbkxpZ2F0dXJlcyA9PSBvdGhl
ci5tX3ZhcmlhbnRDb21tb25MaWdhdHVyZXMKLSAgICAgICAgJiYgbV92YXJpYW50RGlzY3JldGlv
bmFyeUxpZ2F0dXJlcyA9PSBvdGhlci5tX3ZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzCi0g
ICAgICAgICYmIG1fdmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXMgPT0gb3RoZXIubV92YXJpYW50
SGlzdG9yaWNhbExpZ2F0dXJlcwotICAgICAgICAmJiBtX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJu
YXRlcyA9PSBvdGhlci5tX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcwotICAgICAgICAmJiBt
X3ZhcmlhbnRQb3NpdGlvbiA9PSBvdGhlci5tX3ZhcmlhbnRQb3NpdGlvbgotICAgICAgICAmJiBt
X3ZhcmlhbnRDYXBzID09IG90aGVyLm1fdmFyaWFudENhcHMKLSAgICAgICAgJiYgbV92YXJpYW50
TnVtZXJpY0ZpZ3VyZSA9PSBvdGhlci5tX3ZhcmlhbnROdW1lcmljRmlndXJlCi0gICAgICAgICYm
IG1fdmFyaWFudE51bWVyaWNTcGFjaW5nID09IG90aGVyLm1fdmFyaWFudE51bWVyaWNTcGFjaW5n
Ci0gICAgICAgICYmIG1fdmFyaWFudE51bWVyaWNGcmFjdGlvbiA9PSBvdGhlci5tX3ZhcmlhbnRO
dW1lcmljRnJhY3Rpb24KLSAgICAgICAgJiYgbV92YXJpYW50TnVtZXJpY09yZGluYWwgPT0gb3Ro
ZXIubV92YXJpYW50TnVtZXJpY09yZGluYWwKLSAgICAgICAgJiYgbV92YXJpYW50TnVtZXJpY1Ns
YXNoZWRaZXJvID09IG90aGVyLm1fdmFyaWFudE51bWVyaWNTbGFzaGVkWmVybwotICAgICAgICAm
JiBtX3ZhcmlhbnRBbHRlcm5hdGVzID09IG90aGVyLm1fdmFyaWFudEFsdGVybmF0ZXMKLSAgICAg
ICAgJiYgbV92YXJpYW50RWFzdEFzaWFuVmFyaWFudCA9PSBvdGhlci5tX3ZhcmlhbnRFYXN0QXNp
YW5WYXJpYW50Ci0gICAgICAgICYmIG1fdmFyaWFudEVhc3RBc2lhbldpZHRoID09IG90aGVyLm1f
dmFyaWFudEVhc3RBc2lhbldpZHRoCi0gICAgICAgICYmIG1fdmFyaWFudEVhc3RBc2lhblJ1Ynkg
PT0gb3RoZXIubV92YXJpYW50RWFzdEFzaWFuUnVieQotICAgICAgICAmJiBtX29wdGljYWxTaXpp
bmcgPT0gb3RoZXIubV9vcHRpY2FsU2l6aW5nCi0gICAgICAgICYmIG1fZm9udFN0eWxlQXhpcyA9
PSBvdGhlci5tX2ZvbnRTdHlsZUF4aXMKLSAgICAgICAgJiYgbV9zaG91bGRBbGxvd1VzZXJJbnN0
YWxsZWRGb250cyA9PSBvdGhlci5tX3Nob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzOwotfQot
Ci0vLyBGSVhNRTogTW92ZSB0byBhIGZpbGUgb2YgaXRzIG93bi4KIGNsYXNzIEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24gOiBwdWJsaWMgRm9udERlc2NyaXB0aW9uIHsKIHB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCBGb250Q2FzY2FkZURlc2NyaXB0aW9uKCk7CkBAIC0zMTYsMTggKzEzNywxOCBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFJlZkNvdW50ZWRBcnJheTxBdG9taWNTdHJpbmc+IG1f
ZmFtaWxpZXMgeyAxIH07CiAKLSAgICBmbG9hdCBtX3NwZWNpZmllZFNpemUgeyAwIH07ICAgLy8g
U3BlY2lmaWVkIENTUyB2YWx1ZS4gSW5kZXBlbmRlbnQgb2YgcmVuZGVyaW5nIGlzc3VlcyBzdWNo
IGFzIGludGVnZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcm91bmRpbmcsIG1p
bmltdW0gZm9udCBzaXplcywgYW5kIHpvb21pbmcuCi0gICAgdW5zaWduZWQgbV9pc0Fic29sdXRl
U2l6ZSA6IDE7IC8vIFdoZXRoZXIgb3Igbm90IENTUyBzcGVjaWZpZWQgYW4gZXhwbGljaXQgc2l6
ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChsb2dpY2FsIHNpemVzIGxp
a2UgIm1lZGl1bSIgZG9uJ3QgY291bnQpLgorICAgIC8vIFNwZWNpZmllZCBDU1MgdmFsdWUuIElu
ZGVwZW5kZW50IG9mIHJlbmRlcmluZyBpc3N1ZXMgc3VjaCBhcyBpbnRlZ2VyIHJvdW5kaW5nLCBt
aW5pbXVtIGZvbnQgc2l6ZXMsIGFuZCB6b29taW5nLgorICAgIGZsb2F0IG1fc3BlY2lmaWVkU2l6
ZSB7IDAgfTsKKyAgICAvLyBXaGV0aGVyIG9yIG5vdCBDU1Mgc3BlY2lmaWVkIGFuIGV4cGxpY2l0
IHNpemUgKGxvZ2ljYWwgc2l6ZXMgbGlrZSAibWVkaXVtIiBkb24ndCBjb3VudCkuCisgICAgdW5z
aWduZWQgbV9pc0Fic29sdXRlU2l6ZSA6IDE7CiAgICAgdW5zaWduZWQgbV9rZXJuaW5nIDogMjsg
Ly8gS2VybmluZwotCi0gICAgdW5zaWduZWQgbV9rZXl3b3JkU2l6ZSA6IDQ7IC8vIFdlIGNhY2hl
IHdoZXRoZXIgb3Igbm90IGEgZm9udCBpcyBjdXJyZW50bHkgcmVwcmVzZW50ZWQgYnkgYSBDU1Mg
a2V5d29yZCAoZS5nLiwgbWVkaXVtKS4gIElmIHNvLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdGhlbiB3ZSBjYW4gYWNjdXJhdGVseSB0cmFuc2xhdGUgYWNyb3NzIGRpZmZlcmVudCBn
ZW5lcmljIGZhbWlsaWVzIHRvIGFkanVzdCBmb3IgZGlmZmVyZW50IHByZWZlcmVuY2Ugc2V0dGlu
Z3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChlLmcuLCAxM3B4IG1vbm9zcGFjZSB2
cy4gMTZweCBldmVyeXRoaW5nIGVsc2UpLiAgU2l6ZXMgYXJlIDEtOCAobGlrZSB0aGUgSFRNTCBz
aXplIHZhbHVlcyBmb3IgPGZvbnQ+KS4KLQorICAgIC8vIFdlIGNhY2hlIHdoZXRoZXIgb3Igbm90
IGEgZm9udCBpcyBjdXJyZW50bHkgcmVwcmVzZW50ZWQgYnkgYSBDU1Mga2V5d29yZCAoZS5nLiwg
bWVkaXVtKS4gIElmIHNvLAorICAgIC8vIHRoZW4gd2UgY2FuIGFjY3VyYXRlbHkgdHJhbnNsYXRl
IGFjcm9zcyBkaWZmZXJlbnQgZ2VuZXJpYyBmYW1pbGllcyB0byBhZGp1c3QgZm9yIGRpZmZlcmVu
dCBwcmVmZXJlbmNlIHNldHRpbmdzCisgICAgLy8gKGUuZy4sIDEzcHggbW9ub3NwYWNlIHZzLiAx
NnB4IGV2ZXJ5dGhpbmcgZWxzZSkuICBTaXplcyBhcmUgMS04IChsaWtlIHRoZSBIVE1MIHNpemUg
dmFsdWVzIGZvciA8Zm9udD4pLgorICAgIHVuc2lnbmVkIG1fa2V5d29yZFNpemUgOiA0OwogICAg
IHVuc2lnbmVkIG1fZm9udFNtb290aGluZyA6IDI7IC8vIEZvbnRTbW9vdGhpbmdNb2RlCi0gICAg
dW5zaWduZWQgbV9pc1NwZWNpZmllZEZvbnQgOiAxOyAvLyBUcnVlIGlmIGEgd2ViIHBhZ2Ugc3Bl
Y2lmaWVzIGEgbm9uLWdlbmVyaWMgZm9udCBmYW1pbHkgYXMgdGhlIGZpcnN0IGZvbnQgZmFtaWx5
LgorICAgIC8vIFRydWUgaWYgYSB3ZWIgcGFnZSBzcGVjaWZpZXMgYSBub24tZ2VuZXJpYyBmb250
IGZhbWlseSBhcyB0aGUgZmlyc3QgZm9udCBmYW1pbHkuCisgICAgdW5zaWduZWQgbV9pc1NwZWNp
ZmllZEZvbnQgOiAxOwogfTsKIAogaW5saW5lIGJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
b3BlcmF0b3I9PShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKQEAg
LTM0Myw1ICsxNjQsMyBAQCBpbmxpbmUgYm9vbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpvcGVy
CiB9CiAKIH0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250RGVzY3JpcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5jcHAJKHJldmlzaW9uIDIzNjkxMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDMwICszMCwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogCisjaW5jbHVkZSAiRm9udENhc2NhZGVEZXNjcmlwdGlv
bi5oIgogI2luY2x1ZGUgIkxvY2FsZVRvU2NyaXB0TWFwcGluZy5oIgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgU2FtZVNp
emVBc0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24gewotICAgIFZlY3Rvcjx2b2lkKj4gdmVjdG9yOwot
I2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi0gICAgVmVjdG9yPHZvaWQqPiB2ZWN0b3IyOwot
I2Vsc2UKLSAgICBjaGFyIGM7Ci0jZW5kaWYKLSAgICBBdG9taWNTdHJpbmcgc3RyaW5nOwotICAg
IGludDE2X3QgZm9udFNlbGVjdGlvblJlcXVlc3RbM107Ci0gICAgZmxvYXQgc2l6ZTsKLSAgICB1
bnNpZ25lZCBiaXRmaWVsZHMxOwotICAgIHVuc2lnbmVkIGJpdGZpZWxkczIgOiAyMjsKLSAgICB2
b2lkKiBhcnJheTsKLSAgICBmbG9hdCBzaXplMjsKLSAgICB1bnNpZ25lZCBiaXRmaWVsZHMzIDog
MTA7Ci19OwotCi1DT01QSUxFX0FTU0VSVChzaXplb2YoRm9udENhc2NhZGVEZXNjcmlwdGlvbikg
PT0gc2l6ZW9mKFNhbWVTaXplQXNGb250Q2FzY2FkZURlc2NyaXB0aW9uKSwgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbl9zaG91bGRfc3RheV9zbWFsbCk7Ci0KIEZvbnREZXNjcmlwdGlvbjo6Rm9udERl
c2NyaXB0aW9uKCkKICAgICA6IG1fZm9udFNlbGVjdGlvblJlcXVlc3QgeyBGb250Q2FzY2FkZURl
c2NyaXB0aW9uOjppbml0aWFsV2VpZ2h0KCksIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRp
YWxTdHJldGNoKCksIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxJdGFsaWMoKSB9CiAg
ICAgLCBtX29yaWVudGF0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250T3JpZW50YXRpb246
Okhvcml6b250YWwpKQpAQCAtOTAsOTggKzcxLDEwIEBAIHZvaWQgRm9udERlc2NyaXB0aW9uOjpz
ZXRMb2NhbGUoY29uc3QgQXQKICAgICBtX3NjcmlwdCA9IGxvY2FsZVRvU2NyaXB0Q29kZUZvckZv
bnRTZWxlY3Rpb24obV9sb2NhbGUpOwogfQogCi1Gb250Q2FzY2FkZURlc2NyaXB0aW9uOjpGb250
Q2FzY2FkZURlc2NyaXB0aW9uKCkKLSAgICA6IG1faXNBYnNvbHV0ZVNpemUoZmFsc2UpCi0gICAg
LCBtX2tlcm5pbmcoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEtlcm5pbmc6OkF1dG8pKQotICAgICwg
bV9rZXl3b3JkU2l6ZSgwKQotICAgICwgbV9mb250U21vb3RoaW5nKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZykpCi0gICAgLCBtX2lzU3BlY2lm
aWVkRm9udChmYWxzZSkKLXsKLX0KLQogI2lmICFVU0VfUExBVEZPUk1fU1lTVEVNX0ZBTExCQUNL
X0xJU1QKIHZvaWQgRm9udERlc2NyaXB0aW9uOjppbnZhbGlkYXRlQ2FjaGVzKCkKIHsKIH0KLQot
dW5zaWduZWQgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZWZmZWN0aXZlRmFtaWx5Q291bnQoKSBj
b25zdAotewotICAgIHJldHVybiBmYW1pbHlDb3VudCgpOwotfQotCi1Gb250RmFtaWx5U3BlY2lm
aWNhdGlvbiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjplZmZlY3RpdmVGYW1pbHlBdCh1bnNpZ25l
ZCBpKSBjb25zdAotewotICAgIHJldHVybiBmYW1pbHlBdChpKTsKLX0KICNlbmRpZgogCi1Gb250
U2VsZWN0aW9uVmFsdWUgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6bGlnaHRlcldlaWdodChGb250
U2VsZWN0aW9uVmFsdWUgd2VpZ2h0KQotewotICAgIGlmICh3ZWlnaHQgPCBGb250U2VsZWN0aW9u
VmFsdWUoMTAwKSkKLSAgICAgICAgcmV0dXJuIHdlaWdodDsKLSAgICBpZiAod2VpZ2h0IDwgRm9u
dFNlbGVjdGlvblZhbHVlKDU1MCkpCi0gICAgICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFsdWUo
MTAwKTsKLSAgICBpZiAod2VpZ2h0IDwgRm9udFNlbGVjdGlvblZhbHVlKDc1MCkpCi0gICAgICAg
IHJldHVybiBGb250U2VsZWN0aW9uVmFsdWUoNDAwKTsKLSAgICByZXR1cm4gRm9udFNlbGVjdGlv
blZhbHVlKDcwMCk7Ci19Ci0KLUZvbnRTZWxlY3Rpb25WYWx1ZSBGb250Q2FzY2FkZURlc2NyaXB0
aW9uOjpib2xkZXJXZWlnaHQoRm9udFNlbGVjdGlvblZhbHVlIHdlaWdodCkKLXsKLSAgICBpZiAo
d2VpZ2h0IDwgRm9udFNlbGVjdGlvblZhbHVlKDM1MCkpCi0gICAgICAgIHJldHVybiBGb250U2Vs
ZWN0aW9uVmFsdWUoNDAwKTsKLSAgICBpZiAod2VpZ2h0IDwgRm9udFNlbGVjdGlvblZhbHVlKDU1
MCkpCi0gICAgICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFsdWUoNzAwKTsKLSAgICBpZiAod2Vp
Z2h0IDwgRm9udFNlbGVjdGlvblZhbHVlKDkwMCkpCi0gICAgICAgIHJldHVybiBGb250U2VsZWN0
aW9uVmFsdWUoOTAwKTsKLSAgICByZXR1cm4gd2VpZ2h0OwotfQotCi0jaWYgRU5BQkxFKFRFWFRf
QVVUT1NJWklORykKLQotYm9vbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbGllc0VxdWFs
Rm9yVGV4dEF1dG9TaXppbmcoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgb3RoZXIpIGNv
bnN0Ci17Ci0gICAgdW5zaWduZWQgdGhpc0ZhbWlseUNvdW50ID0gZmFtaWx5Q291bnQoKTsKLSAg
ICB1bnNpZ25lZCBvdGhlckZhbWlseUNvdW50ID0gb3RoZXIuZmFtaWx5Q291bnQoKTsKLQotICAg
IGlmICh0aGlzRmFtaWx5Q291bnQgIT0gb3RoZXJGYW1pbHlDb3VudCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNGYW1pbHlDb3VudDsg
KytpKSB7Ci0gICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlBdChpKSwg
b3RoZXIuZmFtaWx5QXQoaSkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFRFWFRfQVVUT1NJWklORykK
LQotYm9vbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVxdWFsKGNvbnN0
IEF0b21pY1N0cmluZyYgZmFtaWx5MSwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkyKQotewot
ICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzM1OTQyNTM+IENvcmVUZXh0IG1hdGNoZXMg
ZG90LXByZWZpeGVkIGZvbnQgbmFtZXMgY2FzZSBzZW5zaXRpdmVseS4gV2Ugc2hvdWxkCi0gICAg
Ly8gYWx3YXlzIHRha2UgdGhlIGNhc2UgaW5zZW5zaXRpdmUgcGF0Y2ggb25jZSB0aGlzIHJhZGFy
IGlzIGZpeGVkLgotICAgIGlmIChmYW1pbHkxLnN0YXJ0c1dpdGgoJy4nKSkKLSAgICAgICAgcmV0
dXJuIFN0cmluZ0hhc2g6OmVxdWFsKGZhbWlseTEuc3RyaW5nKCksIGZhbWlseTIuc3RyaW5nKCkp
OwotICAgIHJldHVybiBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6OmVxdWFsKGZhbWlseTEsIGZh
bWlseTIpOwotfQotCi11bnNpZ25lZCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1l
SGFzaChjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKLXsKLSAgICAvLyBGSVhNRTogPHJkYXI6
Ly9wcm9ibGVtLzMzNTk0MjUzPiBDb3JlVGV4dCBtYXRjaGVzIGRvdC1wcmVmaXhlZCBmb250IG5h
bWVzIGNhc2Ugc2Vuc2l0aXZlbHkuIFdlIHNob3VsZAotICAgIC8vIGFsd2F5cyB0YWtlIHRoZSBj
YXNlIGluc2Vuc2l0aXZlIHBhdGNoIG9uY2UgdGhpcyByYWRhciBpcyBmaXhlZC4KLSAgICBpZiAo
ZmFtaWx5LnN0YXJ0c1dpdGgoJy4nKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2g6Omhhc2go
ZmFtaWx5LnN0cmluZygpKTsKLSAgICByZXR1cm4gQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoOjpo
YXNoKGZhbWlseSk7Ci19Ci0KLVN0cmluZyBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmb2xkZWRG
YW1pbHlOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQotewotICAgIC8vIEZJWE1FOiA8
cmRhcjovL3Byb2JsZW0vMzM1OTQyNTM+IENvcmVUZXh0IG1hdGNoZXMgZG90LXByZWZpeGVkIGZv
bnQgbmFtZXMgY2FzZSBzZW5zaXRpdmVseS4gV2Ugc2hvdWxkCi0gICAgLy8gYWx3YXlzIHRha2Ug
dGhlIGNhc2UgaW5zZW5zaXRpdmUgcGF0Y2ggb25jZSB0aGlzIHJhZGFyIGlzIGZpeGVkLgotICAg
IGlmIChmYW1pbHkuc3RhcnRzV2l0aCgnLicpKQotICAgICAgICByZXR1cm4gZmFtaWx5LnN0cmlu
ZygpOwotICAgIHJldHVybiBmYW1pbHkuc3RyaW5nKCkuZm9sZENhc2UoKTsKLX0KLQogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udERlc2NyaXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmgJKHJldmlzaW9uIDIzNjkxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiwzNiArMjIsMTggQEAKICAqCiAgKi8KIAotI2lmbmRlZiBGb250RGVzY3JpcHRpb25f
aAotI2RlZmluZSBGb250RGVzY3JpcHRpb25faAorI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJD
U1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdGlvbkFsZ29yaXRobS5oIgog
I2luY2x1ZGUgIkZvbnRUYWdnZWRTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgog
I2luY2x1ZGUgIldlYktpdEZvbnRGYW1pbHlOYW1lcy5oIgogI2luY2x1ZGUgPHVuaWNvZGUvdXNj
cmlwdC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+Ci0KLSNpZiBQTEFURk9STShD
T0NPQSkKLSNpbmNsdWRlICJGb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmgiCi0jZWxz
ZQotI2luY2x1ZGUgIkZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uTnVsbC5oIgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotdHlwZWRlZiBGb250RmFt
aWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0IEZvbnRGYW1pbHlQbGF0Zm9ybVNwZWNpZmljYXRpb247
Ci0jZWxzZQotdHlwZWRlZiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbk51bGwgRm9udEZhbWlseVBs
YXRmb3JtU3BlY2lmaWNhdGlvbjsKLSNlbmRpZgogCiAjZGVmaW5lIFVTRV9QTEFURk9STV9TWVNU
RU1fRkFMTEJBQ0tfTElTVCAoKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTEwMDAwKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTMwMCkpCiAKLXR5cGVkZWYgVmFyaWFudDxBdG9taWNT
dHJpbmcsIEZvbnRGYW1pbHlQbGF0Zm9ybVNwZWNpZmljYXRpb24+IEZvbnRGYW1pbHlTcGVjaWZp
Y2F0aW9uOworbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0Rm9u
dEZhbWlseU5hbWVzOwogCkBAIC0yMjMsMTI1ICsyMDUsNCBAQCBpbmxpbmUgYm9vbCBGb250RGVz
Y3JpcHRpb246Om9wZXJhdG9yPT0oCiAgICAgICAgICYmIG1fc2hvdWxkQWxsb3dVc2VySW5zdGFs
bGVkRm9udHMgPT0gb3RoZXIubV9zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250czsKIH0KIAot
Ly8gRklYTUU6IE1vdmUgdG8gYSBmaWxlIG9mIGl0cyBvd24uCi1jbGFzcyBGb250Q2FzY2FkZURl
c2NyaXB0aW9uIDogcHVibGljIEZvbnREZXNjcmlwdGlvbiB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgRm9udENhc2NhZGVEZXNjcmlwdGlvbigpOwotCi0gICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOyB9Ci0KLSAgICB1bnNpZ25lZCBmYW1pbHlDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZmFtaWxpZXMuc2l6ZSgpOyB9Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBmaXJz
dEZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIGZhbWlseUF0KDApOyB9Ci0gICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBmYW1pbHlBdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2ZhbWlsaWVzW2ld
OyB9Ci0gICAgY29uc3QgUmVmQ291bnRlZEFycmF5PEF0b21pY1N0cmluZz4mIGZhbWlsaWVzKCkg
Y29uc3QgeyByZXR1cm4gbV9mYW1pbGllczsgfQotCi0gICAgc3RhdGljIGJvb2wgZmFtaWx5TmFt
ZXNBcmVFcXVhbChjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKLSAg
ICBzdGF0aWMgdW5zaWduZWQgZmFtaWx5TmFtZUhhc2goY29uc3QgQXRvbWljU3RyaW5nJik7Ci0g
ICAgc3RhdGljIFN0cmluZyBmb2xkZWRGYW1pbHlOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYpOwot
Ci0gICAgdW5zaWduZWQgZWZmZWN0aXZlRmFtaWx5Q291bnQoKSBjb25zdDsKLSAgICBGb250RmFt
aWx5U3BlY2lmaWNhdGlvbiBlZmZlY3RpdmVGYW1pbHlBdCh1bnNpZ25lZCkgY29uc3Q7Ci0KLSAg
ICBmbG9hdCBzcGVjaWZpZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpZWRTaXplOyB9
Ci0gICAgYm9vbCBpc0Fic29sdXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNBYnNvbHV0ZVNp
emU7IH0KLSAgICBGb250U2VsZWN0aW9uVmFsdWUgbGlnaHRlcldlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIGxpZ2h0ZXJXZWlnaHQod2VpZ2h0KCkpOyB9Ci0gICAgRm9udFNlbGVjdGlvblZhbHVlIGJv
bGRlcldlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGJvbGRlcldlaWdodCh3ZWlnaHQoKSk7IH0KLSAg
ICBzdGF0aWMgRm9udFNlbGVjdGlvblZhbHVlIGxpZ2h0ZXJXZWlnaHQoRm9udFNlbGVjdGlvblZh
bHVlKTsKLSAgICBzdGF0aWMgRm9udFNlbGVjdGlvblZhbHVlIGJvbGRlcldlaWdodChGb250U2Vs
ZWN0aW9uVmFsdWUpOwotCi0gICAgLy8gb25seSB1c2UgZml4ZWQgZGVmYXVsdCBzaXplIHdoZW4g
dGhlcmUgaXMgb25seSBvbmUgZm9udCBmYW1pbHksIGFuZCB0aGF0IGZhbWlseSBpcyAibW9ub3Nw
YWNlIgotICAgIGJvb2wgdXNlRml4ZWREZWZhdWx0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbWls
eUNvdW50KCkgPT0gMSAmJiBmaXJzdEZhbWlseSgpID09IG1vbm9zcGFjZUZhbWlseTsgfQotCi0g
ICAgS2VybmluZyBrZXJuaW5nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8S2VybmluZz4o
bV9rZXJuaW5nKTsgfQotICAgIHVuc2lnbmVkIGtleXdvcmRTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9rZXl3b3JkU2l6ZTsgfQotICAgIENTU1ZhbHVlSUQga2V5d29yZFNpemVBc0lkZW50aWZpZXIo
KSBjb25zdAotICAgIHsKLSAgICAgICAgQ1NTVmFsdWVJRCBpZGVudGlmaWVyID0gbV9rZXl3b3Jk
U2l6ZSA/IHN0YXRpY19jYXN0PENTU1ZhbHVlSUQ+KENTU1ZhbHVlWHhTbWFsbCArIG1fa2V5d29y
ZFNpemUgLSAxKSA6IENTU1ZhbHVlSW52YWxpZDsKLSAgICAgICAgQVNTRVJUKGlkZW50aWZpZXIg
PT0gQ1NTVmFsdWVJbnZhbGlkIHx8IChpZGVudGlmaWVyID49IENTU1ZhbHVlWHhTbWFsbCAmJiBp
ZGVudGlmaWVyIDw9IENTU1ZhbHVlV2Via2l0WHh4TGFyZ2UpKTsKLSAgICAgICAgcmV0dXJuIGlk
ZW50aWZpZXI7Ci0gICAgfQotICAgIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250U21vb3RoaW5nTW9kZT4obV9mb250U21vb3Ro
aW5nKTsgfQotICAgIGJvb2wgaXNTcGVjaWZpZWRGb250KCkgY29uc3QgeyByZXR1cm4gbV9pc1Nw
ZWNpZmllZEZvbnQ7IH0KLQotICAgIHZvaWQgc2V0T25lRmFtaWx5KGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5KSB7IEFTU0VSVChtX2ZhbWlsaWVzLnNpemUoKSA9PSAxKTsgbV9mYW1pbGllc1sw
XSA9IGZhbWlseTsgfQotICAgIHZvaWQgc2V0RmFtaWxpZXMoY29uc3QgVmVjdG9yPEF0b21pY1N0
cmluZz4mIGZhbWlsaWVzKSB7IG1fZmFtaWxpZXMgPSBSZWZDb3VudGVkQXJyYXk8QXRvbWljU3Ry
aW5nPihmYW1pbGllcyk7IH0KLSAgICB2b2lkIHNldEZhbWlsaWVzKGNvbnN0IFJlZkNvdW50ZWRB
cnJheTxBdG9taWNTdHJpbmc+JiBmYW1pbGllcykgeyBtX2ZhbWlsaWVzID0gZmFtaWxpZXM7IH0K
LSAgICB2b2lkIHNldFNwZWNpZmllZFNpemUoZmxvYXQgcykgeyBtX3NwZWNpZmllZFNpemUgPSBj
bGFtcFRvRmxvYXQocyk7IH0KLSAgICB2b2lkIHNldElzQWJzb2x1dGVTaXplKGJvb2wgcykgeyBt
X2lzQWJzb2x1dGVTaXplID0gczsgfQotICAgIHZvaWQgc2V0S2VybmluZyhLZXJuaW5nIGtlcm5p
bmcpIHsgbV9rZXJuaW5nID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtlcm5pbmcpOyB9Ci0gICAg
dm9pZCBzZXRLZXl3b3JkU2l6ZSh1bnNpZ25lZCBzaXplKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KHNpemUgPD0gOCk7Ci0gICAgICAgIG1fa2V5d29yZFNpemUgPSBzaXplOwotICAgICAgICBBU1NF
UlQobV9rZXl3b3JkU2l6ZSA9PSBzaXplKTsgLy8gTWFrZSBzdXJlIGl0IGZpdHMgaW4gdGhlIGJp
dGZpZWxkLgotICAgIH0KLSAgICB2b2lkIHNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoQ1NT
VmFsdWVJRCBpZGVudGlmaWVyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFpZGVudGlmaWVyIHx8
IChpZGVudGlmaWVyID49IENTU1ZhbHVlWHhTbWFsbCAmJiBpZGVudGlmaWVyIDw9IENTU1ZhbHVl
V2Via2l0WHh4TGFyZ2UpKTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChDU1NWYWx1ZVdlYmtpdFh4
eExhcmdlIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSA9PSA4LCAiTWF4aW11bSBrZXl3b3JkIHNpemUg
c2hvdWxkIGJlIDguIik7Ci0gICAgICAgIHNldEtleXdvcmRTaXplKGlkZW50aWZpZXIgPyBpZGVu
dGlmaWVyIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSA6IDApOwotICAgIH0KLSAgICB2b2lkIHNldEZv
bnRTbW9vdGhpbmcoRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nKSB7IG1fZm9udFNtb290aGlu
ZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzbW9vdGhpbmcpOyB9Ci0gICAgdm9pZCBzZXRJc1Nw
ZWNpZmllZEZvbnQoYm9vbCBpc1NwZWNpZmllZEZvbnQpIHsgbV9pc1NwZWNpZmllZEZvbnQgPSBp
c1NwZWNpZmllZEZvbnQ7IH0KLQotI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCi0gICAgYm9v
bCBmYW1pbGllc0VxdWFsRm9yVGV4dEF1dG9TaXppbmcoY29uc3QgRm9udENhc2NhZGVEZXNjcmlw
dGlvbiYgb3RoZXIpIGNvbnN0OwotCi0gICAgYm9vbCBlcXVhbEZvclRleHRBdXRvU2l6aW5nKGNv
bnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbWlsaWVzRXF1YWxGb3JUZXh0QXV0b1NpemluZyhvdGhlcikKLSAgICAgICAgICAg
ICYmIG1fc3BlY2lmaWVkU2l6ZSA9PSBvdGhlci5tX3NwZWNpZmllZFNpemUKLSAgICAgICAgICAg
ICYmIHZhcmlhbnRTZXR0aW5ncygpID09IG90aGVyLnZhcmlhbnRTZXR0aW5ncygpCi0gICAgICAg
ICAgICAmJiBtX2lzQWJzb2x1dGVTaXplID09IG90aGVyLm1faXNBYnNvbHV0ZVNpemU7Ci0gICAg
fQotI2VuZGlmCi0KLSAgICAvLyBJbml0aWFsIHZhbHVlcyBmb3IgZm9udCBwcm9wZXJ0aWVzLgot
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gaW5pdGlhbEl0YWxp
YygpIHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQotICAgIHN0YXRpYyBGb250U3R5bGVBeGlzIGlu
aXRpYWxGb250U3R5bGVBeGlzKCkgeyByZXR1cm4gRm9udFN0eWxlQXhpczo6c2xudDsgfQotICAg
IHN0YXRpYyBGb250U2VsZWN0aW9uVmFsdWUgaW5pdGlhbFdlaWdodCgpIHsgcmV0dXJuIG5vcm1h
bFdlaWdodFZhbHVlKCk7IH0KLSAgICBzdGF0aWMgRm9udFNlbGVjdGlvblZhbHVlIGluaXRpYWxT
dHJldGNoKCkgeyByZXR1cm4gbm9ybWFsU3RyZXRjaFZhbHVlKCk7IH0KLSAgICBzdGF0aWMgRm9u
dFNtYWxsQ2FwcyBpbml0aWFsU21hbGxDYXBzKCkgeyByZXR1cm4gRm9udFNtYWxsQ2Fwczo6T2Zm
OyB9Ci0gICAgc3RhdGljIEtlcm5pbmcgaW5pdGlhbEtlcm5pbmcoKSB7IHJldHVybiBLZXJuaW5n
OjpBdXRvOyB9Ci0gICAgc3RhdGljIEZvbnRTbW9vdGhpbmdNb2RlIGluaXRpYWxGb250U21vb3Ro
aW5nKCkgeyByZXR1cm4gRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc7IH0KLSAgICBz
dGF0aWMgVGV4dFJlbmRlcmluZ01vZGUgaW5pdGlhbFRleHRSZW5kZXJpbmdNb2RlKCkgeyByZXR1
cm4gVGV4dFJlbmRlcmluZ01vZGU6OkF1dG9UZXh0UmVuZGVyaW5nOyB9Ci0gICAgc3RhdGljIEZv
bnRTeW50aGVzaXMgaW5pdGlhbEZvbnRTeW50aGVzaXMoKSB7IHJldHVybiBGb250U3ludGhlc2lz
V2VpZ2h0IHwgRm9udFN5bnRoZXNpc1N0eWxlIHwgRm9udFN5bnRoZXNpc1NtYWxsQ2FwczsgfQot
ICAgIHN0YXRpYyBGb250VmFyaWFudFBvc2l0aW9uIGluaXRpYWxWYXJpYW50UG9zaXRpb24oKSB7
IHJldHVybiBGb250VmFyaWFudFBvc2l0aW9uOjpOb3JtYWw7IH0KLSAgICBzdGF0aWMgRm9udFZh
cmlhbnRDYXBzIGluaXRpYWxWYXJpYW50Q2FwcygpIHsgcmV0dXJuIEZvbnRWYXJpYW50Q2Fwczo6
Tm9ybWFsOyB9Ci0gICAgc3RhdGljIEZvbnRWYXJpYW50QWx0ZXJuYXRlcyBpbml0aWFsVmFyaWFu
dEFsdGVybmF0ZXMoKSB7IHJldHVybiBGb250VmFyaWFudEFsdGVybmF0ZXM6Ok5vcm1hbDsgfQot
ICAgIHN0YXRpYyBGb250T3B0aWNhbFNpemluZyBpbml0aWFsT3B0aWNhbFNpemluZygpIHsgcmV0
dXJuIEZvbnRPcHRpY2FsU2l6aW5nOjpFbmFibGVkOyB9Ci0gICAgc3RhdGljIGNvbnN0IEF0b21p
Y1N0cmluZyYgaW5pdGlhbExvY2FsZSgpIHsgcmV0dXJuIG51bGxBdG9tKCk7IH0KLQotcHJpdmF0
ZToKLSAgICBSZWZDb3VudGVkQXJyYXk8QXRvbWljU3RyaW5nPiBtX2ZhbWlsaWVzIHsgMSB9Owot
Ci0gICAgZmxvYXQgbV9zcGVjaWZpZWRTaXplIHsgMCB9OyAgIC8vIFNwZWNpZmllZCBDU1MgdmFs
dWUuIEluZGVwZW5kZW50IG9mIHJlbmRlcmluZyBpc3N1ZXMgc3VjaCBhcyBpbnRlZ2VyCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJvdW5kaW5nLCBtaW5pbXVtIGZvbnQgc2l6ZXMs
IGFuZCB6b29taW5nLgotICAgIHVuc2lnbmVkIG1faXNBYnNvbHV0ZVNpemUgOiAxOyAvLyBXaGV0
aGVyIG9yIG5vdCBDU1Mgc3BlY2lmaWVkIGFuIGV4cGxpY2l0IHNpemUKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAobG9naWNhbCBzaXplcyBsaWtlICJtZWRpdW0iIGRvbid0
IGNvdW50KS4KLSAgICB1bnNpZ25lZCBtX2tlcm5pbmcgOiAyOyAvLyBLZXJuaW5nCi0KLSAgICB1
bnNpZ25lZCBtX2tleXdvcmRTaXplIDogNDsgLy8gV2UgY2FjaGUgd2hldGhlciBvciBub3QgYSBm
b250IGlzIGN1cnJlbnRseSByZXByZXNlbnRlZCBieSBhIENTUyBrZXl3b3JkIChlLmcuLCBtZWRp
dW0pLiAgSWYgc28sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIHdlIGNhbiBh
Y2N1cmF0ZWx5IHRyYW5zbGF0ZSBhY3Jvc3MgZGlmZmVyZW50IGdlbmVyaWMgZmFtaWxpZXMgdG8g
YWRqdXN0IGZvciBkaWZmZXJlbnQgcHJlZmVyZW5jZSBzZXR0aW5ncwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gKGUuZy4sIDEzcHggbW9ub3NwYWNlIHZzLiAxNnB4IGV2ZXJ5dGhpbmcg
ZWxzZSkuICBTaXplcyBhcmUgMS04IChsaWtlIHRoZSBIVE1MIHNpemUgdmFsdWVzIGZvciA8Zm9u
dD4pLgotCi0gICAgdW5zaWduZWQgbV9mb250U21vb3RoaW5nIDogMjsgLy8gRm9udFNtb290aGlu
Z01vZGUKLSAgICB1bnNpZ25lZCBtX2lzU3BlY2lmaWVkRm9udCA6IDE7IC8vIFRydWUgaWYgYSB3
ZWIgcGFnZSBzcGVjaWZpZXMgYSBub24tZ2VuZXJpYyBmb250IGZhbWlseSBhcyB0aGUgZmlyc3Qg
Zm9udCBmYW1pbHkuCi19OwotCi1pbmxpbmUgYm9vbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpv
cGVyYXRvcj09KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdAotewot
ICAgIHJldHVybiBGb250RGVzY3JpcHRpb246Om9wZXJhdG9yPT0ob3RoZXIpCi0gICAgICAgICYm
IG1fZmFtaWxpZXMgPT0gb3RoZXIubV9mYW1pbGllcwotICAgICAgICAmJiBtX3NwZWNpZmllZFNp
emUgPT0gb3RoZXIubV9zcGVjaWZpZWRTaXplCi0gICAgICAgICYmIG1faXNBYnNvbHV0ZVNpemUg
PT0gb3RoZXIubV9pc0Fic29sdXRlU2l6ZQotICAgICAgICAmJiBtX2tlcm5pbmcgPT0gb3RoZXIu
bV9rZXJuaW5nCi0gICAgICAgICYmIG1fa2V5d29yZFNpemUgPT0gb3RoZXIubV9rZXl3b3JkU2l6
ZQotICAgICAgICAmJiBtX2ZvbnRTbW9vdGhpbmcgPT0gb3RoZXIubV9mb250U21vb3RoaW5nCi0g
ICAgICAgICYmIG1faXNTcGVjaWZpZWRGb250ID09IG90aGVyLm1faXNTcGVjaWZpZWRGb250Owot
fQotCiB9Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyTWFjLmNwcAkocmV2aXNpb24gMjM2OTExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgIk1lZGlhU3RyZWFtUHJpdmF0ZS5oIgogI2luY2x1ZGUgIlNjcmVlbkRpc3BsYXlDYXB0dXJl
U291cmNlTWFjLmgiCisjaW5jbHVkZSAiV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaCIK
ICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNp
b24gMjM2OTExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJDb3VudGVyRGly
ZWN0aXZlcy5oIgogI2luY2x1ZGUgIkRhdGFSZWYuaCIKICNpbmNsdWRlICJGaWx0ZXJPcGVyYXRp
b25zLmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkdhcExlbmd0aC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzVHlwZXMuaCIKICNpbmNsdWRlICJMZW5ndGguaCIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351776</attachid>
            <date>2018-10-08 07:34:38 -0700</date>
            <delta_ts>2018-10-08 09:09:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>fontcascadedescription-file-3.patch</filename>
            <type>text/plain</type>
            <size>80019</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNjkxMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MiBAQAorMjAxOC0xMC0wOCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBGb250Q2FzY2FkZURl
c2NyaXB0aW9uIHRvIGEgZmlsZSBvZiBpdHMgb3duCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTAzNDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250RGVzY3JpcHRpb24uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9u
OjpGb250RGVzY3JpcHRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bV9zaG91bGRB
bGxvd1VzZXJJbnN0YWxsZWRGb250cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
RGVzY3JpcHRpb246OnNldExvY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
RGVzY3JpcHRpb246OmludmFsaWRhdGVDYWNoZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmguCisgICAgICAgIChX
ZWJDb3JlOjpGb250RGVzY3JpcHRpb246Om9wZXJhdG9yIT0gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpjb21wdXRlZFNpemUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpjb21wdXRlZFBpeGVsU2l6
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246Oml0
YWxpYyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246
OnN0cmV0Y2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0
aW9uOjp3ZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2Ny
aXB0aW9uOjpmb250U2VsZWN0aW9uUmVxdWVzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnJlbmRlcmluZ01vZGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjp0ZXh0UmVuZGVyaW5nTW9kZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNjcmlwdCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OmxvY2Fs
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246Om9y
aWVudGF0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlw
dGlvbjo6bm9uQ0pLR2x5cGhPcmllbnRhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb250RGVzY3JpcHRpb246OndpZHRoVmFyaWFudCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OmZlYXR1cmVTZXR0aW5ncyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnZhcmlhdGlvblNl
dHRpbmdzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlv
bjo6Zm9udFN5bnRoZXNpcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
RGVzY3JpcHRpb246OnZhcmlhbnRDb21tb25MaWdhdHVyZXMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjp2YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0
dXJlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246
OnZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6dmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6dmFyaWFudFBv
c2l0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlv
bjo6dmFyaWFudENhcHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uOjp2YXJpYW50TnVtZXJpY0ZpZ3VyZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnZhcmlhbnROdW1lcmljU3BhY2luZyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnZhcmlhbnROdW1l
cmljRnJhY3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2Ny
aXB0aW9uOjp2YXJpYW50TnVtZXJpY09yZGluYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjp2YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6dmFyaWFudEFs
dGVybmF0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0
aW9uOjp2YXJpYW50RWFzdEFzaWFuVmFyaWFudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnZhcmlhbnRFYXN0QXNpYW5XaWR0aCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnZhcmlhbnRFYXN0QXNp
YW5SdWJ5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlv
bjo6dmFyaWFudFNldHRpbmdzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnREZXNjcmlwdGlvbjo6b3B0aWNhbFNpemluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb250RGVzY3JpcHRpb246OmZvbnRTdHlsZUF4aXMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzaG91bGRBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRp
b246OnNldENvbXB1dGVkU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OnNldEl0YWxpYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OnNldFN0cmV0Y2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uOjpzZXRJc0l0YWxpYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
RGVzY3JpcHRpb246OnNldFdlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
RGVzY3JpcHRpb246OnNldFJlbmRlcmluZ01vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRUZXh0UmVuZGVyaW5nTW9kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldE9yaWVudGF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0Tm9uQ0pLR2x5cGhPcmllbnRh
dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFdp
ZHRoVmFyaWFudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246
OnNldEZlYXR1cmVTZXR0aW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OnNldFZhcmlhdGlvblNldHRpbmdzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0Rm9udFN5bnRoZXNpcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFZhcmlhbnRDb21tb25MaWdhdHVyZXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50RGlz
Y3JldGlvbmFyeUxpZ2F0dXJlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OnNldFZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0VmFyaWFudENvbnRleHR1YWxBbHRlcm5h
dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0VmFy
aWFudFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlv
bjo6c2V0VmFyaWFudENhcHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2Ny
aXB0aW9uOjpzZXRWYXJpYW50TnVtZXJpY0ZpZ3VyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGb250RGVzY3JpcHRpb246OnNldFZhcmlhbnROdW1lcmljU3BhY2luZyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFZhcmlhbnROdW1lcmljRnJh
Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRW
YXJpYW50TnVtZXJpY09yZGluYWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uOjpzZXRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0VmFyaWFudEFsdGVybmF0ZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50RWFzdEFz
aWFuVmFyaWFudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246
OnNldFZhcmlhbnRFYXN0QXNpYW5XaWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
b250RGVzY3JpcHRpb246OnNldFZhcmlhbnRFYXN0QXNpYW5SdWJ5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0T3B0aWNhbFNpemluZyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldEZvbnRTdHlsZUF4aXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRTaG91bGRBbGxv
d1VzZXJJbnN0YWxsZWRGb250cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246Om9wZXJhdG9yPT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OmludmFsaWRhdGVDYWNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjplZmZlY3RpdmVGYW1pbHlDb3VudCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9u
OjplZmZlY3RpdmVGYW1pbHlBdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZURlc2NyaXB0aW9uOjpsaWdodGVyV2VpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmJvbGRlcldlaWdodCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbGllc0VxdWFs
Rm9yVGV4dEF1dG9TaXppbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lSGFzaCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmb2xkZWRG
YW1pbHlOYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVz
Y3JpcHRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246Om9w
ZXJhdG9yIT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVE
ZXNjcmlwdGlvbjo6ZmFtaWx5Q291bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Zmlyc3RGYW1pbHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5QXQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFt
aWxpZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6c3BlY2lmaWVkU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppc0Fic29sdXRlU2l6ZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpsaWdodGVyV2VpZ2h0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRp
b246OmJvbGRlcldlaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjp1c2VGaXhlZERlZmF1bHRTaXplIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246Omtlcm5pbmcgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6a2V5
d29yZFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVE
ZXNjcmlwdGlvbjo6a2V5d29yZFNpemVBc0lkZW50aWZpZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Zm9udFNtb290aGluZyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpp
c1NwZWNpZmllZEZvbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6c2V0T25lRmFtaWx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OnNldEZhbWlsaWVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OnNldFNwZWNpZmllZFNpemUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6c2V0SXNB
YnNvbHV0ZVNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6c2V0S2VybmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpzZXRLZXl3b3JkU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpzZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OnNl
dEZvbnRTbW9vdGhpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVE
ZXNjcmlwdGlvbjo6c2V0SXNTcGVjaWZpZWRGb250KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmVxdWFsRm9yVGV4dEF1dG9TaXppbmcgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5p
dGlhbEl0YWxpYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2Ny
aXB0aW9uOjppbml0aWFsRm9udFN0eWxlQXhpcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsV2VpZ2h0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxTdHJldGNoKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxT
bWFsbENhcHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlw
dGlvbjo6aW5pdGlhbEtlcm5pbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbEZvbnRTbW9vdGhpbmcpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbFRleHRSZW5kZXJpbmdN
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246
OmluaXRpYWxGb250U3ludGhlc2lzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxWYXJpYW50UG9zaXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbFZhcmlhbnRDYXBz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246Omlu
aXRpYWxWYXJpYW50QWx0ZXJuYXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsT3B0aWNhbFNpemluZyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsTG9jYWxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246Om9wZXJhdG9y
PT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9S
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuaDoKKwogMjAxOC0xMC0wOCAgWWFjaW5lIEJhbmRvdSAgPHlhY2luZS5i
YW5kb3VfZXh0QHNvZnRhdGhvbWUuY29tPgogCiAgICAgICAgIFtFTUVdW0dTdHJlYW1lcl0gQWRk
IHN1cHBvcnQgZm9yIFdlYk0gZW5jcnlwdGVkIGNhcHMgImFwcGxpY2F0aW9uL3gtd2VibS1lbmMi
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjM2OTExKQorKysgU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE2MTAsNiArMTYxMCw3IEBAIHBsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dERlc2NyaXB0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbWlseVNwZWNpZmljYXRp
b25OdWxsLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjM2OTExKQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00ODExLDYg
KzQ4MTEsNyBAQAogCQlFNERFQUExODE3QTkzREMzMDAwRTA0MzAgLyogU3R5bGVUcmVlUmVzb2x2
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0REVB
QTE2MTdBOTNEQzMwMDBFMDQzMCAvKiBTdHlsZVRyZWVSZXNvbHZlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0RTI0MzgzMURBQjk1M0UwMEMy
NkU0QiAvKiBtZXRlckVsZW1lbnRTaGFkb3cuY3NzIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEUyNDM4MjFEQUI5NTNFMDBDMjZFNEIgLyogbWV0ZXJF
bGVtZW50U2hhZG93LmNzcyAqLzsgfTsKIAkJRTRFMzlBRkIxMzMwRUZBODAwM0FCMjc0IC8qIExl
Z2FjeVRpbGVMYXllclBvb2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0RTM5QUZBMTMzMEVGQTgwMDNBQjI3NCAvKiBMZWdhY3lUaWxlTGF5ZXJQb29s
LmggKi87IH07CisJCUU0RThCNEY1MjE2Qjk1NjUwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NEU4QjRGMjIxNkI4QjYwMDBCODgzNEQgLyogRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0RTlCMTE5MTgx
MDkxNkYwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RTlCMTE4MTgxMDkxNkYwMDNBQ0NE
RiAvKiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCAqLzsgfTsKIAkJRTRFOUIxMUQxODE0NTY5
QzAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RTlCMTFDMTgxNDU2OUMwMDNBQ0NERiAv
KiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggKi87IH07CiAJCUU0RjlFRUYzMTU2REEwMDcw
MEQyM0U3RSAvKiBTdHlsZVNoZWV0Q29udGVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RjlFRUYxMTU2RDg0QzQwMEQyM0U3RSAvKiBTdHlsZVNo
ZWV0Q29udGVudHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMTQ1NDcsNiArMTQ1NDgsOCBAQAogCQlFNEUyNDM4MjFEQUI5NTNFMDBDMjZFNEIg
LyogbWV0ZXJFbGVtZW50U2hhZG93LmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuY3NzOyBwYXRoID0gbWV0
ZXJFbGVtZW50U2hhZG93LmNzczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRFMzlB
RkExMzMwRUZBODAwM0FCMjc0IC8qIExlZ2FjeVRpbGVMYXllclBvb2wuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5VGlsZUxheWVyUG9vbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNEUzOUFGQzEzMzBFRkM1MDAzQUIyNzQgLyogTGVnYWN5VGlsZUxh
eWVyUG9vbC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExlZ2Fj
eVRpbGVMYXllclBvb2wubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0RThCNEYw
MjE2QjhCNUYwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEU4QjRGMjIxNkI4QjYwMDBCODgzNEQgLyog
Rm9udENhc2NhZGVEZXNjcmlwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGb250Q2FzY2FkZURlc2NyaXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0RTlCMTE4MTgxMDkxNkYwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTGluZUxheW91dFJlc29sdmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RTlCMTFBMTgxNDU2OTIwMDNBQ0NE
RiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFNEU5QjExQzE4MTQ1NjlDMDAzQUNDREYgLyogU2ltcGxlTGlu
ZUxheW91dEZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1w
bGVMaW5lTGF5b3V0RnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
Mzc0NSw2ICsyMzc0OCw4IEBACiAJCQkJQjJDM0RBNTIwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRD
YWNoZS5oICovLAogCQkJCUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZS5j
cHAgKi8sCiAJCQkJQjJDM0RBNTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlLmggKi8s
CisJCQkJRTRFOEI0RjAyMTZCOEI1RjAwQjg4MzREIC8qIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24u
Y3BwICovLAorCQkJCUU0RThCNEYyMjE2QjhCNjAwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uLmggKi8sCiAJCQkJQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRl
Rm9udHMuY3BwICovLAogCQkJCUIyQzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2Fk
ZUZvbnRzLmggKi8sCiAJCQkJMzdBQ0NFNjIwREEyQUE5NjAwODlFNjAyIC8qIEZvbnREZXNjcmlw
dGlvbi5jcHAgKi8sCkBAIC0yNzM5NSw2ICsyNzQwMCw3IEBACiAJCQkJQTE1RDc1MTYxRTY4RjdD
ODAwQTM1RkJDIC8qIEJsb2JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVERUYxRjQx
MjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUQzMUNE
RDE5MTk2MDIwMDAxMDA1QTMgLyogQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmggaW4gSGVhZGVycyAq
LywKKwkJCQlFNEU4QjRGNTIxNkI5NTY1MDBCODgzNEQgLyogRm9udENhc2NhZGVEZXNjcmlwdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEQzQjAwQUYyMTVENkE2OTAwNzZCOTgzIC8qIEJsb2JF
dmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M3N0MzRDcxREVGODUwQTAwQTUwQkZBIC8qIEJs
b2JMaW5lRW5kaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFDOTRBRjkxOTEzMDNGMDAwRDVB
ODkzIC8qIEJsb2JQYXJ0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAkocmV2aXNpb24gMjM2OTExKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsOCArMjYsOCBAQAogCiAjaW5jbHVkZSAiRGFzaEFycmF5LmgiCiAjaW5jbHVk
ZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaCIKICNpbmNsdWRl
ICJGb250Q2FzY2FkZUZvbnRzLmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5j
bHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZURlc2NyaXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcAkocmV2aXNpb24gMjM2OTExKQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uY3Bw
OjIzNjkxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
RGVzY3JpcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA3IE5pY2hvbGFzIFNoYW5rcyA8Y29udGFjdEBuaWNrc2hhbmtzLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisKKyNpbmNs
dWRlICJMb2NhbGVUb1NjcmlwdE1hcHBpbmcuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFNhbWVTaXplQXNGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uIHsKKyAgICBWZWN0b3I8dm9pZCo+IHZlY3RvcjsKKyNpZiBFTkFCTEUo
VkFSSUFUSU9OX0ZPTlRTKQorICAgIFZlY3Rvcjx2b2lkKj4gdmVjdG9yMjsKKyNlbHNlCisgICAg
Y2hhciBjOworI2VuZGlmCisgICAgQXRvbWljU3RyaW5nIHN0cmluZzsKKyAgICBpbnQxNl90IGZv
bnRTZWxlY3Rpb25SZXF1ZXN0WzNdOworICAgIGZsb2F0IHNpemU7CisgICAgdW5zaWduZWQgYml0
ZmllbGRzMTsKKyAgICB1bnNpZ25lZCBiaXRmaWVsZHMyIDogMjI7CisgICAgdm9pZCogYXJyYXk7
CisgICAgZmxvYXQgc2l6ZTI7CisgICAgdW5zaWduZWQgYml0ZmllbGRzMyA6IDEwOworfTsKKwor
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24pID09IHNpemVvZihT
YW1lU2l6ZUFzRm9udENhc2NhZGVEZXNjcmlwdGlvbiksIEZvbnRDYXNjYWRlRGVzY3JpcHRpb25f
c2hvdWxkX3N0YXlfc21hbGwpOworCitGb250RGVzY3JpcHRpb246OkZvbnREZXNjcmlwdGlvbigp
CisgICAgOiBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0IHsgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
aW5pdGlhbFdlaWdodCgpLCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsU3RyZXRjaCgp
LCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsSXRhbGljKCkgfQorICAgICwgbV9vcmll
bnRhdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFs
KSkKKyAgICAsIG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbjo6TWl4ZWQpKQorICAgICwgbV93aWR0aFZhcmlhbnQoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRXaWR0aFZhcmlhbnQ6OlJlZ3VsYXJXaWR0aCkpCisgICAg
LCBtX3JlbmRlcmluZ01vZGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRSZW5kZXJpbmdNb2Rl
OjpOb3JtYWwpKQorICAgICwgbV90ZXh0UmVuZGVyaW5nKHN0YXRpY19jYXN0PHVuc2lnbmVkPihU
ZXh0UmVuZGVyaW5nTW9kZTo6QXV0b1RleHRSZW5kZXJpbmcpKQorICAgICwgbV9zY3JpcHQoVVND
UklQVF9DT01NT04pCisgICAgLCBtX2ZvbnRTeW50aGVzaXMoRm9udFN5bnRoZXNpc1dlaWdodCB8
IEZvbnRTeW50aGVzaXNTdHlsZSB8IEZvbnRTeW50aGVzaXNTbWFsbENhcHMpCisgICAgLCBtX3Zh
cmlhbnRDb21tb25MaWdhdHVyZXMoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50TGln
YXR1cmVzOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcyhz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCkpCisgICAg
LCBtX3ZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250
VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKSkKKyAgICAsIG1fdmFyaWFudENvbnRleHR1YWxBbHRl
cm5hdGVzKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFs
KSkKKyAgICAsIG1fdmFyaWFudFBvc2l0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFy
aWFudFBvc2l0aW9uOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50Q2FwcyhzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oRm9udFZhcmlhbnRDYXBzOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50TnVtZXJp
Y0ZpZ3VyZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpO
b3JtYWwpKQorICAgICwgbV92YXJpYW50TnVtZXJpY1NwYWNpbmcoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6Ok5vcm1hbCkpCisgICAgLCBtX3ZhcmlhbnRO
dW1lcmljRnJhY3Rpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50TnVtZXJpY0Zy
YWN0aW9uOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50TnVtZXJpY09yZGluYWwoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6Ok5vcm1hbCkpCisgICAgLCBt
X3ZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJp
YW50TnVtZXJpY1NsYXNoZWRaZXJvOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50QWx0ZXJuYXRl
cyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWwpKQor
ICAgICwgbV92YXJpYW50RWFzdEFzaWFuVmFyaWFudChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9u
dFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50RWFzdEFz
aWFuV2lkdGgoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6
Ok5vcm1hbCkpCisgICAgLCBtX3ZhcmlhbnRFYXN0QXNpYW5SdWJ5KHN0YXRpY19jYXN0PHVuc2ln
bmVkPihGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbCkpCisgICAgLCBtX29wdGljYWxT
aXppbmcoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRPcHRpY2FsU2l6aW5nOjpFbmFibGVkKSkK
KyAgICAsIG1fZm9udFN0eWxlQXhpcyhGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsRm9u
dFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6Oml0YWwpCisgICAgLCBtX3Nob3VsZEFsbG93
VXNlckluc3RhbGxlZEZvbnRzKHN0YXRpY19jYXN0PHVuc2lnbmVkPihBbGxvd1VzZXJJbnN0YWxs
ZWRGb250czo6Tm8pKQoreworfQorCit2b2lkIEZvbnREZXNjcmlwdGlvbjo6c2V0TG9jYWxlKGNv
bnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQoreworICAgIG1fbG9jYWxlID0gbG9jYWxlOworICAg
IG1fc2NyaXB0ID0gbG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihtX2xvY2FsZSk7
Cit9CisKK0ZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkZvbnRDYXNjYWRlRGVzY3JpcHRpb24oKQor
ICAgIDogbV9pc0Fic29sdXRlU2l6ZShmYWxzZSkKKyAgICAsIG1fa2VybmluZyhzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oS2VybmluZzo6QXV0bykpCisgICAgLCBtX2tleXdvcmRTaXplKDApCisgICAg
LCBtX2ZvbnRTbW9vdGhpbmcoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRTbW9vdGhpbmdNb2Rl
OjpBdXRvU21vb3RoaW5nKSkKKyAgICAsIG1faXNTcGVjaWZpZWRGb250KGZhbHNlKQoreworfQor
CisjaWYgIVVTRV9QTEFURk9STV9TWVNURU1fRkFMTEJBQ0tfTElTVAordm9pZCBGb250RGVzY3Jp
cHRpb246OmludmFsaWRhdGVDYWNoZXMoKQoreworfQorCit1bnNpZ25lZCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uOjplZmZlY3RpdmVGYW1pbHlDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZh
bWlseUNvdW50KCk7Cit9CisKK0ZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb246OmVmZmVjdGl2ZUZhbWlseUF0KHVuc2lnbmVkIGkpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGZhbWlseUF0KGkpOworfQorI2VuZGlmCisKK0ZvbnRTZWxlY3Rpb25WYWx1ZSBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpsaWdodGVyV2VpZ2h0KEZvbnRTZWxlY3Rpb25WYWx1ZSB3ZWlnaHQp
Cit7CisgICAgaWYgKHdlaWdodCA8IEZvbnRTZWxlY3Rpb25WYWx1ZSgxMDApKQorICAgICAgICBy
ZXR1cm4gd2VpZ2h0OworICAgIGlmICh3ZWlnaHQgPCBGb250U2VsZWN0aW9uVmFsdWUoNTUwKSkK
KyAgICAgICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25WYWx1ZSgxMDApOworICAgIGlmICh3ZWlnaHQg
PCBGb250U2VsZWN0aW9uVmFsdWUoNzUwKSkKKyAgICAgICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25W
YWx1ZSg0MDApOworICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFsdWUoNzAwKTsKK30KKworRm9u
dFNlbGVjdGlvblZhbHVlIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmJvbGRlcldlaWdodChGb250
U2VsZWN0aW9uVmFsdWUgd2VpZ2h0KQoreworICAgIGlmICh3ZWlnaHQgPCBGb250U2VsZWN0aW9u
VmFsdWUoMzUwKSkKKyAgICAgICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25WYWx1ZSg0MDApOworICAg
IGlmICh3ZWlnaHQgPCBGb250U2VsZWN0aW9uVmFsdWUoNTUwKSkKKyAgICAgICAgcmV0dXJuIEZv
bnRTZWxlY3Rpb25WYWx1ZSg3MDApOworICAgIGlmICh3ZWlnaHQgPCBGb250U2VsZWN0aW9uVmFs
dWUoOTAwKSkKKyAgICAgICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25WYWx1ZSg5MDApOworICAgIHJl
dHVybiB3ZWlnaHQ7Cit9CisKKyNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQorCitib29sIEZv
bnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlsaWVzRXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25z
dCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKK3sKKyAgICB1bnNpZ25lZCB0
aGlzRmFtaWx5Q291bnQgPSBmYW1pbHlDb3VudCgpOworICAgIHVuc2lnbmVkIG90aGVyRmFtaWx5
Q291bnQgPSBvdGhlci5mYW1pbHlDb3VudCgpOworCisgICAgaWYgKHRoaXNGYW1pbHlDb3VudCAh
PSBvdGhlckZhbWlseUNvdW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdGhpc0ZhbWlseUNvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKCFl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKGZhbWlseUF0KGkpLCBvdGhlci5mYW1pbHlBdChpKSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQorCitib29sIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkx
LCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseTIpCit7CisgICAgLy8gRklYTUU6IDxyZGFyOi8v
cHJvYmxlbS8zMzU5NDI1Mz4gQ29yZVRleHQgbWF0Y2hlcyBkb3QtcHJlZml4ZWQgZm9udCBuYW1l
cyBjYXNlIHNlbnNpdGl2ZWx5LiBXZSBzaG91bGQKKyAgICAvLyBhbHdheXMgdGFrZSB0aGUgY2Fz
ZSBpbnNlbnNpdGl2ZSBwYXRjaCBvbmNlIHRoaXMgcmFkYXIgaXMgZml4ZWQuCisgICAgaWYgKGZh
bWlseTEuc3RhcnRzV2l0aCgnLicpKQorICAgICAgICByZXR1cm4gU3RyaW5nSGFzaDo6ZXF1YWwo
ZmFtaWx5MS5zdHJpbmcoKSwgZmFtaWx5Mi5zdHJpbmcoKSk7CisgICAgcmV0dXJuIEFTQ0lJQ2Fz
ZUluc2Vuc2l0aXZlSGFzaDo6ZXF1YWwoZmFtaWx5MSwgZmFtaWx5Mik7Cit9CisKK3Vuc2lnbmVk
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVIYXNoKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5KQoreworICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzM1OTQyNTM+IENv
cmVUZXh0IG1hdGNoZXMgZG90LXByZWZpeGVkIGZvbnQgbmFtZXMgY2FzZSBzZW5zaXRpdmVseS4g
V2Ugc2hvdWxkCisgICAgLy8gYWx3YXlzIHRha2UgdGhlIGNhc2UgaW5zZW5zaXRpdmUgcGF0Y2gg
b25jZSB0aGlzIHJhZGFyIGlzIGZpeGVkLgorICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0aCgnLicp
KQorICAgICAgICByZXR1cm4gU3RyaW5nSGFzaDo6aGFzaChmYW1pbHkuc3RyaW5nKCkpOworICAg
IHJldHVybiBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6Omhhc2goZmFtaWx5KTsKK30KKworU3Ry
aW5nIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZvbGRlZEZhbWlseU5hbWUoY29uc3QgQXRvbWlj
U3RyaW5nJiBmYW1pbHkpCit7CisgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zMzU5NDI1
Mz4gQ29yZVRleHQgbWF0Y2hlcyBkb3QtcHJlZml4ZWQgZm9udCBuYW1lcyBjYXNlIHNlbnNpdGl2
ZWx5LiBXZSBzaG91bGQKKyAgICAvLyBhbHdheXMgdGFrZSB0aGUgY2FzZSBpbnNlbnNpdGl2ZSBw
YXRjaCBvbmNlIHRoaXMgcmFkYXIgaXMgZml4ZWQuCisgICAgaWYgKGZhbWlseS5zdGFydHNXaXRo
KCcuJykpCisgICAgICAgIHJldHVybiBmYW1pbHkuc3RyaW5nKCk7CisgICAgcmV0dXJuIGZhbWls
eS5zdHJpbmcoKS5mb2xkQ2FzZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZURlc2NyaXB0aW9uLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0w
LDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZURlc2NyaXB0aW9uLmNwcAkocmV2aXNpb24gMjM2OTExKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDkgKzI4LDggQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGVEZXNjcmlwdGlvbi5o
IgogCi0jaW5jbHVkZSAiTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01NCw0MiArNTMsNiBA
QCBzdHJ1Y3QgU2FtZVNpemVBc0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24gCiAKIENPTVBJTEVfQVNT
RVJUKHNpemVvZihGb250Q2FzY2FkZURlc2NyaXB0aW9uKSA9PSBzaXplb2YoU2FtZVNpemVBc0Zv
bnRDYXNjYWRlRGVzY3JpcHRpb24pLCBGb250Q2FzY2FkZURlc2NyaXB0aW9uX3Nob3VsZF9zdGF5
X3NtYWxsKTsKIAotRm9udERlc2NyaXB0aW9uOjpGb250RGVzY3JpcHRpb24oKQotICAgIDogbV9m
b250U2VsZWN0aW9uUmVxdWVzdCB7IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxXZWln
aHQoKSwgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbFN0cmV0Y2goKSwgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6aW5pdGlhbEl0YWxpYygpIH0KLSAgICAsIG1fb3JpZW50YXRpb24oc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCkpCi0gICAgLCBt
X25vbkNKS0dseXBoT3JpZW50YXRpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE5vbkNKS0dseXBo
T3JpZW50YXRpb246Ok1peGVkKSkKLSAgICAsIG1fd2lkdGhWYXJpYW50KHN0YXRpY19jYXN0PHVu
c2lnbmVkPihGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGgpKQotICAgICwgbV9yZW5kZXJp
bmdNb2RlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250UmVuZGVyaW5nTW9kZTo6Tm9ybWFsKSkK
LSAgICAsIG1fdGV4dFJlbmRlcmluZyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oVGV4dFJlbmRlcmlu
Z01vZGU6OkF1dG9UZXh0UmVuZGVyaW5nKSkKLSAgICAsIG1fc2NyaXB0KFVTQ1JJUFRfQ09NTU9O
KQotICAgICwgbV9mb250U3ludGhlc2lzKEZvbnRTeW50aGVzaXNXZWlnaHQgfCBGb250U3ludGhl
c2lzU3R5bGUgfCBGb250U3ludGhlc2lzU21hbGxDYXBzKQotICAgICwgbV92YXJpYW50Q29tbW9u
TGlnYXR1cmVzKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudExpZ2F0dXJlczo6Tm9y
bWFsKSkKLSAgICAsIG1fdmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpKQotICAgICwgbV92YXJpYW50
SGlzdG9yaWNhbExpZ2F0dXJlcyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnRMaWdh
dHVyZXM6Ok5vcm1hbCkpCi0gICAgLCBtX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyhzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCkpCi0gICAgLCBt
X3ZhcmlhbnRQb3NpdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnRQb3NpdGlv
bjo6Tm9ybWFsKSkKLSAgICAsIG1fdmFyaWFudENhcHMoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZv
bnRWYXJpYW50Q2Fwczo6Tm9ybWFsKSkKLSAgICAsIG1fdmFyaWFudE51bWVyaWNGaWd1cmUoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsKSkKLSAg
ICAsIG1fdmFyaWFudE51bWVyaWNTcGFjaW5nKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFy
aWFudE51bWVyaWNTcGFjaW5nOjpOb3JtYWwpKQotICAgICwgbV92YXJpYW50TnVtZXJpY0ZyYWN0
aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9y
bWFsKSkKLSAgICAsIG1fdmFyaWFudE51bWVyaWNPcmRpbmFsKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWwpKQotICAgICwgbV92YXJpYW50TnVt
ZXJpY1NsYXNoZWRaZXJvKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudE51bWVyaWNT
bGFzaGVkWmVybzo6Tm9ybWFsKSkKLSAgICAsIG1fdmFyaWFudEFsdGVybmF0ZXMoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsKSkKLSAgICAsIG1fdmFy
aWFudEVhc3RBc2lhblZhcmlhbnQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudDo6Tm9ybWFsKSkKLSAgICAsIG1fdmFyaWFudEVhc3RBc2lhbldpZHRoKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpOb3JtYWwpKQot
ICAgICwgbV92YXJpYW50RWFzdEFzaWFuUnVieShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZh
cmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWwpKQotICAgICwgbV9vcHRpY2FsU2l6aW5nKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihGb250T3B0aWNhbFNpemluZzo6RW5hYmxlZCkpCi0gICAgLCBtX2Zv
bnRTdHlsZUF4aXMoRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbEZvbnRTdHlsZUF4aXMo
KSA9PSBGb250U3R5bGVBeGlzOjppdGFsKQotICAgICwgbV9zaG91bGRBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5v
KSkKLXsKLX0KLQotdm9pZCBGb250RGVzY3JpcHRpb246OnNldExvY2FsZShjb25zdCBBdG9taWNT
dHJpbmcmIGxvY2FsZSkKLXsKLSAgICBtX2xvY2FsZSA9IGxvY2FsZTsKLSAgICBtX3NjcmlwdCA9
IGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24obV9sb2NhbGUpOwotfQotCiBGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uKCkKICAgICA6IG1faXNB
YnNvbHV0ZVNpemUoZmFsc2UpCiAgICAgLCBtX2tlcm5pbmcoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEtlcm5pbmc6OkF1dG8pKQpAQCAtMTAwLDEwICs2Myw2IEBAIEZvbnRDYXNjYWRlRGVzY3JpcHRp
b246OkZvbnRDYXNjYWRlRGVzY3IKIH0KIAogI2lmICFVU0VfUExBVEZPUk1fU1lTVEVNX0ZBTExC
QUNLX0xJU1QKLXZvaWQgRm9udERlc2NyaXB0aW9uOjppbnZhbGlkYXRlQ2FjaGVzKCkKLXsKLX0K
LQogdW5zaWduZWQgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZWZmZWN0aXZlRmFtaWx5Q291bnQo
KSBjb25zdAogewogICAgIHJldHVybiBmYW1pbHlDb3VudCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRp
b24uaAkocmV2aXNpb24gMjM2OTExKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250RGVzY3JpcHRpb24uaDoyMzY5MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9A
a2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2Rl
Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgTmljaG9sYXMgU2hhbmtzIDx3ZWJraXRAbmlja3NoYW5rcy5jb20+CisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElvdGhlci5tXyAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNtXworICoKKyAqLworCisj
aWZuZGVmIEZvbnREZXNjcmlwdGlvbl9oCisjZGVmaW5lIEZvbnREZXNjcmlwdGlvbl9oCisKKyNp
bmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdGlvbkFsZ29y
aXRobS5oIgorI2luY2x1ZGUgIkZvbnRUYWdnZWRTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlRleHRG
bGFncy5oIgorI2luY2x1ZGUgIldlYktpdEZvbnRGYW1pbHlOYW1lcy5oIgorI2luY2x1ZGUgPHVu
aWNvZGUvdXNjcmlwdC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWRBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisKKyNpZiBQ
TEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJGb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0
LmgiCisjZWxzZQorI2luY2x1ZGUgIkZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uTnVsbC5oIgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFBMQVRGT1JNKENPQ09BKQordHlwZWRl
ZiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0IEZvbnRGYW1pbHlQbGF0Zm9ybVNwZWNp
ZmljYXRpb247CisjZWxzZQordHlwZWRlZiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbk51bGwgRm9u
dEZhbWlseVBsYXRmb3JtU3BlY2lmaWNhdGlvbjsKKyNlbmRpZgorCisjZGVmaW5lIFVTRV9QTEFU
Rk9STV9TWVNURU1fRkFMTEJBQ0tfTElTVCAoKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1Nf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAwKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTMwMCkpCisKK3R5cGVkZWYgVmFyaWFu
dDxBdG9taWNTdHJpbmcsIEZvbnRGYW1pbHlQbGF0Zm9ybVNwZWNpZmljYXRpb24+IEZvbnRGYW1p
bHlTcGVjaWZpY2F0aW9uOworCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0Rm9udEZhbWlseU5hbWVz
OworCitjbGFzcyBGb250RGVzY3JpcHRpb24geworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JU
IEZvbnREZXNjcmlwdGlvbigpOworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250RGVzY3JpcHRp
b24mIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgZmxv
YXQgY29tcHV0ZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb21wdXRlZFNpemU7IH0KKyAgICB1
bnNpZ25lZCBjb21wdXRlZFBpeGVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHVuc2lnbmVkKG1fY29t
cHV0ZWRTaXplICsgMC41Zik7IH0KKyAgICBzdGQ6Om9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1
ZT4gaXRhbGljKCkgY29uc3QgeyByZXR1cm4gbV9mb250U2VsZWN0aW9uUmVxdWVzdC5zbG9wZTsg
fQorICAgIEZvbnRTZWxlY3Rpb25WYWx1ZSBzdHJldGNoKCkgY29uc3QgeyByZXR1cm4gbV9mb250
U2VsZWN0aW9uUmVxdWVzdC53aWR0aDsgfQorICAgIEZvbnRTZWxlY3Rpb25WYWx1ZSB3ZWlnaHQo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0LndlaWdodDsgfQorICAgIEZv
bnRTZWxlY3Rpb25SZXF1ZXN0IGZvbnRTZWxlY3Rpb25SZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4g
bV9mb250U2VsZWN0aW9uUmVxdWVzdDsgfQorICAgIEZvbnRSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250UmVuZGVyaW5nTW9kZT4obV9y
ZW5kZXJpbmdNb2RlKTsgfQorICAgIFRleHRSZW5kZXJpbmdNb2RlIHRleHRSZW5kZXJpbmdNb2Rl
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dFJlbmRlcmluZ01vZGU+KG1fdGV4dFJl
bmRlcmluZyk7IH0KKyAgICBVU2NyaXB0Q29kZSBzY3JpcHQoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxVU2NyaXB0Q29kZT4obV9zY3JpcHQpOyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsZTsgfQorCisgICAgRm9udE9yaWVudGF0
aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udE9yaWVudGF0
aW9uPihtX29yaWVudGF0aW9uKTsgfQorICAgIE5vbkNKS0dseXBoT3JpZW50YXRpb24gbm9uQ0pL
R2x5cGhPcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PE5vbkNKS0dseXBo
T3JpZW50YXRpb24+KG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbik7IH0KKyAgICBGb250V2lkdGhW
YXJpYW50IHdpZHRoVmFyaWFudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRXaWR0
aFZhcmlhbnQ+KG1fd2lkdGhWYXJpYW50KTsgfQorICAgIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGlu
Z3MmIGZlYXR1cmVTZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZVNldHRpbmdzOyB9
CisgICAgY29uc3QgRm9udFZhcmlhdGlvblNldHRpbmdzJiB2YXJpYXRpb25TZXR0aW5ncygpIGNv
bnN0IHsgcmV0dXJuIG1fdmFyaWF0aW9uU2V0dGluZ3M7IH0KKyAgICBGb250U3ludGhlc2lzIGZv
bnRTeW50aGVzaXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250U3ludGhlc2lzPiht
X2ZvbnRTeW50aGVzaXMpOyB9CisgICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgdmFyaWFudENvbW1v
bkxpZ2F0dXJlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRWYXJpYW50TGlnYXR1
cmVzPihtX3ZhcmlhbnRDb21tb25MaWdhdHVyZXMpOyB9CisgICAgRm9udFZhcmlhbnRMaWdhdHVy
ZXMgdmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxGb250VmFyaWFudExpZ2F0dXJlcz4obV92YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJl
cyk7IH0KKyAgICBGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJl
cygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRWYXJpYW50TGlnYXR1cmVzPihtX3Zh
cmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKTsgfQorICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIHZh
cmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZv
bnRWYXJpYW50TGlnYXR1cmVzPihtX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyk7IH0KKyAg
ICBGb250VmFyaWFudFBvc2l0aW9uIHZhcmlhbnRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEZvbnRWYXJpYW50UG9zaXRpb24+KG1fdmFyaWFudFBvc2l0aW9uKTsgfQorICAg
IEZvbnRWYXJpYW50Q2FwcyB2YXJpYW50Q2FwcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PEZvbnRWYXJpYW50Q2Fwcz4obV92YXJpYW50Q2Fwcyk7IH0KKyAgICBGb250VmFyaWFudE51bWVy
aWNGaWd1cmUgdmFyaWFudE51bWVyaWNGaWd1cmUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxGb250VmFyaWFudE51bWVyaWNGaWd1cmU+KG1fdmFyaWFudE51bWVyaWNGaWd1cmUpOyB9Cisg
ICAgRm9udFZhcmlhbnROdW1lcmljU3BhY2luZyB2YXJpYW50TnVtZXJpY1NwYWNpbmcoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudE51bWVyaWNTcGFjaW5nPihtX3Zhcmlh
bnROdW1lcmljU3BhY2luZyk7IH0KKyAgICBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbiB2YXJp
YW50TnVtZXJpY0ZyYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlh
bnROdW1lcmljRnJhY3Rpb24+KG1fdmFyaWFudE51bWVyaWNGcmFjdGlvbik7IH0KKyAgICBGb250
VmFyaWFudE51bWVyaWNPcmRpbmFsIHZhcmlhbnROdW1lcmljT3JkaW5hbCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw+KG1fdmFyaWFudE51bWVy
aWNPcmRpbmFsKTsgfQorICAgIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHZhcmlhbnRO
dW1lcmljU2xhc2hlZFplcm8oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFu
dE51bWVyaWNTbGFzaGVkWmVybz4obV92YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKTsgfQorICAg
IEZvbnRWYXJpYW50QWx0ZXJuYXRlcyB2YXJpYW50QWx0ZXJuYXRlcygpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PEZvbnRWYXJpYW50QWx0ZXJuYXRlcz4obV92YXJpYW50QWx0ZXJuYXRlcyk7
IH0KKyAgICBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQgdmFyaWFudEVhc3RBc2lhblZhcmlh
bnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQ+KG1fdmFyaWFudEVhc3RBc2lhblZhcmlhbnQpOyB9CisgICAgRm9udFZhcmlhbnRFYXN0QXNp
YW5XaWR0aCB2YXJpYW50RWFzdEFzaWFuV2lkdGgoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxGb250VmFyaWFudEVhc3RBc2lhbldpZHRoPihtX3ZhcmlhbnRFYXN0QXNpYW5XaWR0aCk7IH0K
KyAgICBGb250VmFyaWFudEVhc3RBc2lhblJ1YnkgdmFyaWFudEVhc3RBc2lhblJ1YnkoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk+KG1fdmFyaWFu
dEVhc3RBc2lhblJ1YnkpOyB9CisgICAgRm9udFZhcmlhbnRTZXR0aW5ncyB2YXJpYW50U2V0dGlu
Z3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHsgdmFyaWFudENvbW1vbkxpZ2F0dXJl
cygpLAorICAgICAgICAgICAgdmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoKSwKKyAgICAg
ICAgICAgIHZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKCksCisgICAgICAgICAgICB2YXJpYW50
Q29udGV4dHVhbEFsdGVybmF0ZXMoKSwKKyAgICAgICAgICAgIHZhcmlhbnRQb3NpdGlvbigpLAor
ICAgICAgICAgICAgdmFyaWFudENhcHMoKSwKKyAgICAgICAgICAgIHZhcmlhbnROdW1lcmljRmln
dXJlKCksCisgICAgICAgICAgICB2YXJpYW50TnVtZXJpY1NwYWNpbmcoKSwKKyAgICAgICAgICAg
IHZhcmlhbnROdW1lcmljRnJhY3Rpb24oKSwKKyAgICAgICAgICAgIHZhcmlhbnROdW1lcmljT3Jk
aW5hbCgpLAorICAgICAgICAgICAgdmFyaWFudE51bWVyaWNTbGFzaGVkWmVybygpLAorICAgICAg
ICAgICAgdmFyaWFudEFsdGVybmF0ZXMoKSwKKyAgICAgICAgICAgIHZhcmlhbnRFYXN0QXNpYW5W
YXJpYW50KCksCisgICAgICAgICAgICB2YXJpYW50RWFzdEFzaWFuV2lkdGgoKSwKKyAgICAgICAg
ICAgIHZhcmlhbnRFYXN0QXNpYW5SdWJ5KCkgfTsKKyAgICB9CisgICAgRm9udE9wdGljYWxTaXpp
bmcgb3B0aWNhbFNpemluZygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRPcHRpY2Fs
U2l6aW5nPihtX29wdGljYWxTaXppbmcpOyB9CisgICAgRm9udFN0eWxlQXhpcyBmb250U3R5bGVB
eGlzKCkgY29uc3QgeyByZXR1cm4gbV9mb250U3R5bGVBeGlzID8gRm9udFN0eWxlQXhpczo6aXRh
bCA6IEZvbnRTdHlsZUF4aXM6OnNsbnQ7IH0KKyAgICBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBz
aG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PEFsbG93VXNlckluc3RhbGxlZEZvbnRzPihtX3Nob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRz
KTsgfQorCisgICAgdm9pZCBzZXRDb21wdXRlZFNpemUoZmxvYXQgcykgeyBtX2NvbXB1dGVkU2l6
ZSA9IGNsYW1wVG9GbG9hdChzKTsgfQorICAgIHZvaWQgc2V0SXRhbGljKHN0ZDo6b3B0aW9uYWw8
Rm9udFNlbGVjdGlvblZhbHVlPiBpdGFsaWMpIHsgbV9mb250U2VsZWN0aW9uUmVxdWVzdC5zbG9w
ZSA9IGl0YWxpYzsgfQorICAgIHZvaWQgc2V0U3RyZXRjaChGb250U2VsZWN0aW9uVmFsdWUgc3Ry
ZXRjaCkgeyBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0LndpZHRoID0gc3RyZXRjaDsgfQorICAgIHZv
aWQgc2V0SXNJdGFsaWMoYm9vbCBpc0l0YWxpYykgeyBzZXRJdGFsaWMoaXNJdGFsaWMgPyBzdGQ6
Om9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4geyBpdGFsaWNWYWx1ZSgpIH0gOiBzdGQ6Om9w
dGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4geyB9KTsgfQorICAgIHZvaWQgc2V0V2VpZ2h0KEZv
bnRTZWxlY3Rpb25WYWx1ZSB3ZWlnaHQpIHsgbV9mb250U2VsZWN0aW9uUmVxdWVzdC53ZWlnaHQg
PSB3ZWlnaHQ7IH0KKyAgICB2b2lkIHNldFJlbmRlcmluZ01vZGUoRm9udFJlbmRlcmluZ01vZGUg
bW9kZSkgeyBtX3JlbmRlcmluZ01vZGUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obW9kZSk7IH0K
KyAgICB2b2lkIHNldFRleHRSZW5kZXJpbmdNb2RlKFRleHRSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
ZykgeyBtX3RleHRSZW5kZXJpbmcgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVuZGVyaW5nKTsg
fQorICAgIHZvaWQgc2V0T3JpZW50YXRpb24oRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7
IG1fb3JpZW50YXRpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3JpZW50YXRpb24pOyB9Cisg
ICAgdm9pZCBzZXROb25DSktHbHlwaE9yaWVudGF0aW9uKE5vbkNKS0dseXBoT3JpZW50YXRpb24g
b3JpZW50YXRpb24pIHsgbV9ub25DSktHbHlwaE9yaWVudGF0aW9uID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG9yaWVudGF0aW9uKTsgfQorICAgIHZvaWQgc2V0V2lkdGhWYXJpYW50KEZvbnRXaWR0
aFZhcmlhbnQgd2lkdGhWYXJpYW50KSB7IG1fd2lkdGhWYXJpYW50ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHdpZHRoVmFyaWFudCk7IH0gLy8gTWFrZSBzdXJlIG5ldyBjYWxsZXJzIG9mIHRoaXMg
c3luYyB3aXRoIEZvbnRQbGF0Zm9ybURhdGE6OmlzRm9yVGV4dENvbWJpbmUoKSEKKyAgICB2b2lk
IHNldExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICB2b2lkIHNldEZlYXR1cmVTZXR0
aW5ncyhGb250RmVhdHVyZVNldHRpbmdzJiYgc2V0dGluZ3MpIHsgbV9mZWF0dXJlU2V0dGluZ3Mg
PSBXVEZNb3ZlKHNldHRpbmdzKTsgfQorI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisgICAg
dm9pZCBzZXRWYXJpYXRpb25TZXR0aW5ncyhGb250VmFyaWF0aW9uU2V0dGluZ3MmJiBzZXR0aW5n
cykgeyBtX3ZhcmlhdGlvblNldHRpbmdzID0gV1RGTW92ZShzZXR0aW5ncyk7IH0KKyNlbmRpZgor
ICAgIHZvaWQgc2V0Rm9udFN5bnRoZXNpcyhGb250U3ludGhlc2lzIGZvbnRTeW50aGVzaXMpIHsg
bV9mb250U3ludGhlc2lzID0gZm9udFN5bnRoZXNpczsgfQorICAgIHZvaWQgc2V0VmFyaWFudENv
bW1vbkxpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50KSB7IG1fdmFyaWFudENv
bW1vbkxpZ2F0dXJlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQorICAgIHZv
aWQgc2V0VmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoRm9udFZhcmlhbnRMaWdhdHVyZXMg
dmFyaWFudCkgeyBtX3ZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50SGlzdG9yaWNhbExpZ2F0
dXJlcyhGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50KSB7IG1fdmFyaWFudEhpc3RvcmljYWxM
aWdhdHVyZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7IH0KKyAgICB2b2lkIHNl
dFZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyhGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50
KSB7IG1fdmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50UG9zaXRpb24oRm9udFZhcmlhbnRQb3Np
dGlvbiB2YXJpYW50KSB7IG1fdmFyaWFudFBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHMgdmFy
aWFudCkgeyBtX3ZhcmlhbnRDYXBzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9
CisgICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY0ZpZ3VyZShGb250VmFyaWFudE51bWVyaWNGaWd1
cmUgdmFyaWFudCkgeyBtX3ZhcmlhbnROdW1lcmljRmlndXJlID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY1NwYWNpbmcoRm9udFZh
cmlhbnROdW1lcmljU3BhY2luZyB2YXJpYW50KSB7IG1fdmFyaWFudE51bWVyaWNTcGFjaW5nID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50TnVt
ZXJpY0ZyYWN0aW9uKEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uIHZhcmlhbnQpIHsgbV92YXJp
YW50TnVtZXJpY0ZyYWN0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Cisg
ICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY09yZGluYWwoRm9udFZhcmlhbnROdW1lcmljT3JkaW5h
bCB2YXJpYW50KSB7IG1fdmFyaWFudE51bWVyaWNPcmRpbmFsID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKEZv
bnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHZhcmlhbnQpIHsgbV92YXJpYW50TnVtZXJpY1Ns
YXNoZWRaZXJvID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBz
ZXRWYXJpYW50QWx0ZXJuYXRlcyhGb250VmFyaWFudEFsdGVybmF0ZXMgdmFyaWFudCkgeyBtX3Zh
cmlhbnRBbHRlcm5hdGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAg
dm9pZCBzZXRWYXJpYW50RWFzdEFzaWFuVmFyaWFudChGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQgdmFyaWFudCkgeyBtX3ZhcmlhbnRFYXN0QXNpYW5WYXJpYW50ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50RWFzdEFzaWFuV2lkdGgoRm9u
dFZhcmlhbnRFYXN0QXNpYW5XaWR0aCB2YXJpYW50KSB7IG1fdmFyaWFudEVhc3RBc2lhbldpZHRo
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50
RWFzdEFzaWFuUnVieShGb250VmFyaWFudEVhc3RBc2lhblJ1YnkgdmFyaWFudCkgeyBtX3Zhcmlh
bnRFYXN0QXNpYW5SdWJ5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAg
dm9pZCBzZXRPcHRpY2FsU2l6aW5nKEZvbnRPcHRpY2FsU2l6aW5nIHNpemluZykgeyBtX29wdGlj
YWxTaXppbmcgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6aW5nKTsgfQorICAgIHZvaWQgc2V0
Rm9udFN0eWxlQXhpcyhGb250U3R5bGVBeGlzIGF4aXMpIHsgbV9mb250U3R5bGVBeGlzID0gYXhp
cyA9PSBGb250U3R5bGVBeGlzOjppdGFsOyB9CisgICAgdm9pZCBzZXRTaG91bGRBbGxvd1VzZXJJ
bnN0YWxsZWRGb250cyhBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBzaG91bGRBbGxvd1VzZXJJbnN0
YWxsZWRGb250cykgeyBtX3Nob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsgfQorCisgICAgc3Rh
dGljIHZvaWQgaW52YWxpZGF0ZUNhY2hlcygpOworCitwcml2YXRlOgorICAgIC8vIEZJWE1FOiBJ
bnZlc3RpZ2F0ZSBtb3ZpbmcgdGhlc2UgaW50byB0aGVpciBvd24gb2JqZWN0IG9uIHRoZSBoZWFw
ICh0byBzYXZlIG1lbW9yeSkuCisgICAgRm9udEZlYXR1cmVTZXR0aW5ncyBtX2ZlYXR1cmVTZXR0
aW5nczsKKyAgICBGb250VmFyaWF0aW9uU2V0dGluZ3MgbV92YXJpYXRpb25TZXR0aW5nczsKKyAg
ICBBdG9taWNTdHJpbmcgbV9sb2NhbGU7CisKKyAgICBGb250U2VsZWN0aW9uUmVxdWVzdCBtX2Zv
bnRTZWxlY3Rpb25SZXF1ZXN0OworICAgIGZsb2F0IG1fY29tcHV0ZWRTaXplIHsgMCB9OyAvLyBD
b21wdXRlZCBzaXplIGFkanVzdGVkIGZvciB0aGUgbWluaW11bSBmb250IHNpemUgYW5kIHRoZSB6
b29tIGZhY3Rvci4KKyAgICB1bnNpZ25lZCBtX29yaWVudGF0aW9uIDogMTsgLy8gRm9udE9yaWVu
dGF0aW9uIC0gV2hldGhlciB0aGUgZm9udCBpcyByZW5kZXJpbmcgb24gYSBob3Jpem9udGFsIGxp
bmUgb3IgYSB2ZXJ0aWNhbCBsaW5lLgorICAgIHVuc2lnbmVkIG1fbm9uQ0pLR2x5cGhPcmllbnRh
dGlvbiA6IDE7IC8vIE5vbkNKS0dseXBoT3JpZW50YXRpb24gLSBPbmx5IHVzZWQgYnkgdmVydGlj
YWwgdGV4dC4gRGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCBvcmllbnRhdGlvbiBmb3Igbm9uLWlkZW9n
cmFwaCBnbHlwaHMuCisgICAgdW5zaWduZWQgbV93aWR0aFZhcmlhbnQgOiAyOyAvLyBGb250V2lk
dGhWYXJpYW50CisgICAgdW5zaWduZWQgbV9yZW5kZXJpbmdNb2RlIDogMTsgLy8gVXNlZCB0byBz
d2l0Y2ggYmV0d2VlbiBDRyBhbmQgR0RJIHRleHQgb24gV2luZG93cy4KKyAgICB1bnNpZ25lZCBt
X3RleHRSZW5kZXJpbmcgOiAyOyAvLyBUZXh0UmVuZGVyaW5nTW9kZQorICAgIHVuc2lnbmVkIG1f
c2NyaXB0IDogNzsgLy8gVXNlZCB0byBoZWxwIGNob29zZSBhbiBhcHByb3ByaWF0ZSBmb250IGZv
ciBnZW5lcmljIGZvbnQgZmFtaWxpZXMuCisgICAgdW5zaWduZWQgbV9mb250U3ludGhlc2lzIDog
MzsgLy8gRm9udFN5bnRoZXNpcyB0eXBlCisgICAgdW5zaWduZWQgbV92YXJpYW50Q29tbW9uTGln
YXR1cmVzIDogMjsgLy8gRm9udFZhcmlhbnRMaWdhdHVyZXMKKyAgICB1bnNpZ25lZCBtX3Zhcmlh
bnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzIDogMjsgLy8gRm9udFZhcmlhbnRMaWdhdHVyZXMKKyAg
ICB1bnNpZ25lZCBtX3ZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzIDogMjsgLy8gRm9udFZhcmlh
bnRMaWdhdHVyZXMKKyAgICB1bnNpZ25lZCBtX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyA6
IDI7IC8vIEZvbnRWYXJpYW50TGlnYXR1cmVzCisgICAgdW5zaWduZWQgbV92YXJpYW50UG9zaXRp
b24gOiAyOyAvLyBGb250VmFyaWFudFBvc2l0aW9uCisgICAgdW5zaWduZWQgbV92YXJpYW50Q2Fw
cyA6IDM7IC8vIEZvbnRWYXJpYW50Q2FwcworICAgIHVuc2lnbmVkIG1fdmFyaWFudE51bWVyaWNG
aWd1cmUgOiAyOyAvLyBGb250VmFyaWFudE51bWVyaWNGaWd1cmUKKyAgICB1bnNpZ25lZCBtX3Zh
cmlhbnROdW1lcmljU3BhY2luZyA6IDI7IC8vIEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmcKKyAg
ICB1bnNpZ25lZCBtX3ZhcmlhbnROdW1lcmljRnJhY3Rpb24gOiAyOyAvLyBGb250VmFyaWFudE51
bWVyaWNGcmFjdGlvbgorICAgIHVuc2lnbmVkIG1fdmFyaWFudE51bWVyaWNPcmRpbmFsIDogMTsg
Ly8gRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbAorICAgIHVuc2lnbmVkIG1fdmFyaWFudE51bWVy
aWNTbGFzaGVkWmVybyA6IDE7IC8vIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvCisgICAg
dW5zaWduZWQgbV92YXJpYW50QWx0ZXJuYXRlcyA6IDE7IC8vIEZvbnRWYXJpYW50QWx0ZXJuYXRl
cworICAgIHVuc2lnbmVkIG1fdmFyaWFudEVhc3RBc2lhblZhcmlhbnQgOiAzOyAvLyBGb250VmFy
aWFudEVhc3RBc2lhblZhcmlhbnQKKyAgICB1bnNpZ25lZCBtX3ZhcmlhbnRFYXN0QXNpYW5XaWR0
aCA6IDI7IC8vIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGgKKyAgICB1bnNpZ25lZCBtX3Zhcmlh
bnRFYXN0QXNpYW5SdWJ5IDogMTsgLy8gRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5CisgICAgdW5z
aWduZWQgbV9vcHRpY2FsU2l6aW5nIDogMTsgLy8gRm9udE9wdGljYWxTaXppbmcKKyAgICB1bnNp
Z25lZCBtX2ZvbnRTdHlsZUF4aXMgOiAxOyAvLyBXaGV0aGVyICJmb250LXN0eWxlOiBpdGFsaWMi
IG9yICJmb250LXN0eWxlOiBvYmxpcXVlIDIwZGVnIiB3YXMgc3BlY2lmaWVkCisgICAgdW5zaWdu
ZWQgbV9zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyA6IDE7IC8vIEFsbG93VXNlckluc3Rh
bGxlZEZvbnRzOiBJZiB0aGlzIGRlc2NyaXB0aW9uIGlzIGFsbG93ZWQgdG8gbWF0Y2ggYSB1c2Vy
LWluc3RhbGxlZCBmb250Cit9OworCitpbmxpbmUgYm9vbCBGb250RGVzY3JpcHRpb246Om9wZXJh
dG9yPT0oY29uc3QgRm9udERlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9jb21wdXRlZFNpemUgPT0gb3RoZXIubV9jb21wdXRlZFNpemUKKyAgICAgICAgJiYgbV9mb250
U2VsZWN0aW9uUmVxdWVzdCA9PSBvdGhlci5tX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0CisgICAgICAg
ICYmIG1fcmVuZGVyaW5nTW9kZSA9PSBvdGhlci5tX3JlbmRlcmluZ01vZGUKKyAgICAgICAgJiYg
bV90ZXh0UmVuZGVyaW5nID09IG90aGVyLm1fdGV4dFJlbmRlcmluZworICAgICAgICAmJiBtX29y
aWVudGF0aW9uID09IG90aGVyLm1fb3JpZW50YXRpb24KKyAgICAgICAgJiYgbV9ub25DSktHbHlw
aE9yaWVudGF0aW9uID09IG90aGVyLm1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbgorICAgICAgICAm
JiBtX3dpZHRoVmFyaWFudCA9PSBvdGhlci5tX3dpZHRoVmFyaWFudAorICAgICAgICAmJiBtX2xv
Y2FsZSA9PSBvdGhlci5tX2xvY2FsZQorICAgICAgICAmJiBtX2ZlYXR1cmVTZXR0aW5ncyA9PSBv
dGhlci5tX2ZlYXR1cmVTZXR0aW5ncworI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisgICAg
ICAgICYmIG1fdmFyaWF0aW9uU2V0dGluZ3MgPT0gb3RoZXIubV92YXJpYXRpb25TZXR0aW5ncwor
I2VuZGlmCisgICAgICAgICYmIG1fZm9udFN5bnRoZXNpcyA9PSBvdGhlci5tX2ZvbnRTeW50aGVz
aXMKKyAgICAgICAgJiYgbV92YXJpYW50Q29tbW9uTGlnYXR1cmVzID09IG90aGVyLm1fdmFyaWFu
dENvbW1vbkxpZ2F0dXJlcworICAgICAgICAmJiBtX3ZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1
cmVzID09IG90aGVyLm1fdmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMKKyAgICAgICAgJiYg
bV92YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyA9PSBvdGhlci5tX3ZhcmlhbnRIaXN0b3JpY2Fs
TGlnYXR1cmVzCisgICAgICAgICYmIG1fdmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzID09IG90
aGVyLm1fdmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzCisgICAgICAgICYmIG1fdmFyaWFudFBv
c2l0aW9uID09IG90aGVyLm1fdmFyaWFudFBvc2l0aW9uCisgICAgICAgICYmIG1fdmFyaWFudENh
cHMgPT0gb3RoZXIubV92YXJpYW50Q2FwcworICAgICAgICAmJiBtX3ZhcmlhbnROdW1lcmljRmln
dXJlID09IG90aGVyLm1fdmFyaWFudE51bWVyaWNGaWd1cmUKKyAgICAgICAgJiYgbV92YXJpYW50
TnVtZXJpY1NwYWNpbmcgPT0gb3RoZXIubV92YXJpYW50TnVtZXJpY1NwYWNpbmcKKyAgICAgICAg
JiYgbV92YXJpYW50TnVtZXJpY0ZyYWN0aW9uID09IG90aGVyLm1fdmFyaWFudE51bWVyaWNGcmFj
dGlvbgorICAgICAgICAmJiBtX3ZhcmlhbnROdW1lcmljT3JkaW5hbCA9PSBvdGhlci5tX3Zhcmlh
bnROdW1lcmljT3JkaW5hbAorICAgICAgICAmJiBtX3ZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8g
PT0gb3RoZXIubV92YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvCisgICAgICAgICYmIG1fdmFyaWFu
dEFsdGVybmF0ZXMgPT0gb3RoZXIubV92YXJpYW50QWx0ZXJuYXRlcworICAgICAgICAmJiBtX3Zh
cmlhbnRFYXN0QXNpYW5WYXJpYW50ID09IG90aGVyLm1fdmFyaWFudEVhc3RBc2lhblZhcmlhbnQK
KyAgICAgICAgJiYgbV92YXJpYW50RWFzdEFzaWFuV2lkdGggPT0gb3RoZXIubV92YXJpYW50RWFz
dEFzaWFuV2lkdGgKKyAgICAgICAgJiYgbV92YXJpYW50RWFzdEFzaWFuUnVieSA9PSBvdGhlci5t
X3ZhcmlhbnRFYXN0QXNpYW5SdWJ5CisgICAgICAgICYmIG1fb3B0aWNhbFNpemluZyA9PSBvdGhl
ci5tX29wdGljYWxTaXppbmcKKyAgICAgICAgJiYgbV9mb250U3R5bGVBeGlzID09IG90aGVyLm1f
Zm9udFN0eWxlQXhpcworICAgICAgICAmJiBtX3Nob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRz
ID09IG90aGVyLm1fc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHM7Cit9CisKKy8vIEZJWE1F
OiBNb3ZlIHRvIGEgZmlsZSBvZiBpdHMgb3duLgorY2xhc3MgRm9udENhc2NhZGVEZXNjcmlwdGlv
biA6IHB1YmxpYyBGb250RGVzY3JpcHRpb24geworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JU
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24oKTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsgfQorCisgICAgdW5zaWduZWQgZmFtaWx5Q291bnQoKSBjb25zdCB7IHJldHVybiBt
X2ZhbWlsaWVzLnNpemUoKTsgfQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmlyc3RGYW1pbHko
KSBjb25zdCB7IHJldHVybiBmYW1pbHlBdCgwKTsgfQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5QXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9mYW1pbGllc1tpXTsgfQorICAg
IGNvbnN0IFJlZkNvdW50ZWRBcnJheTxBdG9taWNTdHJpbmc+JiBmYW1pbGllcygpIGNvbnN0IHsg
cmV0dXJuIG1fZmFtaWxpZXM7IH0KKworICAgIHN0YXRpYyBib29sIGZhbWlseU5hbWVzQXJlRXF1
YWwoY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgc3RhdGlj
IHVuc2lnbmVkIGZhbWlseU5hbWVIYXNoKGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHN0YXRp
YyBTdHJpbmcgZm9sZGVkRmFtaWx5TmFtZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKworICAgIHVu
c2lnbmVkIGVmZmVjdGl2ZUZhbWlseUNvdW50KCkgY29uc3Q7CisgICAgRm9udEZhbWlseVNwZWNp
ZmljYXRpb24gZWZmZWN0aXZlRmFtaWx5QXQodW5zaWduZWQpIGNvbnN0OworCisgICAgZmxvYXQg
c3BlY2lmaWVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWVkU2l6ZTsgfQorICAgIGJv
b2wgaXNBYnNvbHV0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2lzQWJzb2x1dGVTaXplOyB9Cisg
ICAgRm9udFNlbGVjdGlvblZhbHVlIGxpZ2h0ZXJXZWlnaHQoKSBjb25zdCB7IHJldHVybiBsaWdo
dGVyV2VpZ2h0KHdlaWdodCgpKTsgfQorICAgIEZvbnRTZWxlY3Rpb25WYWx1ZSBib2xkZXJXZWln
aHQoKSBjb25zdCB7IHJldHVybiBib2xkZXJXZWlnaHQod2VpZ2h0KCkpOyB9CisgICAgc3RhdGlj
IEZvbnRTZWxlY3Rpb25WYWx1ZSBsaWdodGVyV2VpZ2h0KEZvbnRTZWxlY3Rpb25WYWx1ZSk7Cisg
ICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBib2xkZXJXZWlnaHQoRm9udFNlbGVjdGlvblZh
bHVlKTsKKworICAgIC8vIG9ubHkgdXNlIGZpeGVkIGRlZmF1bHQgc2l6ZSB3aGVuIHRoZXJlIGlz
IG9ubHkgb25lIGZvbnQgZmFtaWx5LCBhbmQgdGhhdCBmYW1pbHkgaXMgIm1vbm9zcGFjZSIKKyAg
ICBib29sIHVzZUZpeGVkRGVmYXVsdFNpemUoKSBjb25zdCB7IHJldHVybiBmYW1pbHlDb3VudCgp
ID09IDEgJiYgZmlyc3RGYW1pbHkoKSA9PSBtb25vc3BhY2VGYW1pbHk7IH0KKworICAgIEtlcm5p
bmcga2VybmluZygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEtlcm5pbmc+KG1fa2Vybmlu
Zyk7IH0KKyAgICB1bnNpZ25lZCBrZXl3b3JkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5d29y
ZFNpemU7IH0KKyAgICBDU1NWYWx1ZUlEIGtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkgY29uc3QK
KyAgICB7CisgICAgICAgIENTU1ZhbHVlSUQgaWRlbnRpZmllciA9IG1fa2V5d29yZFNpemUgPyBz
dGF0aWNfY2FzdDxDU1NWYWx1ZUlEPihDU1NWYWx1ZVh4U21hbGwgKyBtX2tleXdvcmRTaXplIC0g
MSkgOiBDU1NWYWx1ZUludmFsaWQ7CisgICAgICAgIEFTU0VSVChpZGVudGlmaWVyID09IENTU1Zh
bHVlSW52YWxpZCB8fCAoaWRlbnRpZmllciA+PSBDU1NWYWx1ZVh4U21hbGwgJiYgaWRlbnRpZmll
ciA8PSBDU1NWYWx1ZVdlYmtpdFh4eExhcmdlKSk7CisgICAgICAgIHJldHVybiBpZGVudGlmaWVy
OworICAgIH0KKyAgICBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFNtb290aGluZ01vZGU+KG1fZm9udFNtb290aGluZyk7IH0K
KyAgICBib29sIGlzU3BlY2lmaWVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTcGVjaWZpZWRG
b250OyB9CisKKyAgICB2b2lkIHNldE9uZUZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWls
eSkgeyBBU1NFUlQobV9mYW1pbGllcy5zaXplKCkgPT0gMSk7IG1fZmFtaWxpZXNbMF0gPSBmYW1p
bHk7IH0KKyAgICB2b2lkIHNldEZhbWlsaWVzKGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBm
YW1pbGllcykgeyBtX2ZhbWlsaWVzID0gUmVmQ291bnRlZEFycmF5PEF0b21pY1N0cmluZz4oZmFt
aWxpZXMpOyB9CisgICAgdm9pZCBzZXRGYW1pbGllcyhjb25zdCBSZWZDb3VudGVkQXJyYXk8QXRv
bWljU3RyaW5nPiYgZmFtaWxpZXMpIHsgbV9mYW1pbGllcyA9IGZhbWlsaWVzOyB9CisgICAgdm9p
ZCBzZXRTcGVjaWZpZWRTaXplKGZsb2F0IHMpIHsgbV9zcGVjaWZpZWRTaXplID0gY2xhbXBUb0Zs
b2F0KHMpOyB9CisgICAgdm9pZCBzZXRJc0Fic29sdXRlU2l6ZShib29sIHMpIHsgbV9pc0Fic29s
dXRlU2l6ZSA9IHM7IH0KKyAgICB2b2lkIHNldEtlcm5pbmcoS2VybmluZyBrZXJuaW5nKSB7IG1f
a2VybmluZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihrZXJuaW5nKTsgfQorICAgIHZvaWQgc2V0
S2V5d29yZFNpemUodW5zaWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzaXplIDw9
IDgpOworICAgICAgICBtX2tleXdvcmRTaXplID0gc2l6ZTsKKyAgICAgICAgQVNTRVJUKG1fa2V5
d29yZFNpemUgPT0gc2l6ZSk7IC8vIE1ha2Ugc3VyZSBpdCBmaXRzIGluIHRoZSBiaXRmaWVsZC4K
KyAgICB9CisgICAgdm9pZCBzZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVyKENTU1ZhbHVlSUQg
aWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIEFTU0VSVCghaWRlbnRpZmllciB8fCAoaWRlbnRp
ZmllciA+PSBDU1NWYWx1ZVh4U21hbGwgJiYgaWRlbnRpZmllciA8PSBDU1NWYWx1ZVdlYmtpdFh4
eExhcmdlKSk7CisgICAgICAgIHN0YXRpY19hc3NlcnQoQ1NTVmFsdWVXZWJraXRYeHhMYXJnZSAt
IENTU1ZhbHVlWHhTbWFsbCArIDEgPT0gOCwgIk1heGltdW0ga2V5d29yZCBzaXplIHNob3VsZCBi
ZSA4LiIpOworICAgICAgICBzZXRLZXl3b3JkU2l6ZShpZGVudGlmaWVyID8gaWRlbnRpZmllciAt
IENTU1ZhbHVlWHhTbWFsbCArIDEgOiAwKTsKKyAgICB9CisgICAgdm9pZCBzZXRGb250U21vb3Ro
aW5nKEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZykgeyBtX2ZvbnRTbW9vdGhpbmcgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc21vb3RoaW5nKTsgfQorICAgIHZvaWQgc2V0SXNTcGVjaWZpZWRG
b250KGJvb2wgaXNTcGVjaWZpZWRGb250KSB7IG1faXNTcGVjaWZpZWRGb250ID0gaXNTcGVjaWZp
ZWRGb250OyB9CisKKyNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQorICAgIGJvb2wgZmFtaWxp
ZXNFcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIG90
aGVyKSBjb25zdDsKKworICAgIGJvb2wgZXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBm
YW1pbGllc0VxdWFsRm9yVGV4dEF1dG9TaXppbmcob3RoZXIpCisgICAgICAgICAgICAmJiBtX3Nw
ZWNpZmllZFNpemUgPT0gb3RoZXIubV9zcGVjaWZpZWRTaXplCisgICAgICAgICAgICAmJiB2YXJp
YW50U2V0dGluZ3MoKSA9PSBvdGhlci52YXJpYW50U2V0dGluZ3MoKQorICAgICAgICAgICAgJiYg
bV9pc0Fic29sdXRlU2l6ZSA9PSBvdGhlci5tX2lzQWJzb2x1dGVTaXplOworICAgIH0KKyNlbmRp
ZgorCisgICAgLy8gSW5pdGlhbCB2YWx1ZXMgZm9yIGZvbnQgcHJvcGVydGllcy4KKyAgICBzdGF0
aWMgc3RkOjpvcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IGluaXRpYWxJdGFsaWMoKSB7IHJl
dHVybiBzdGQ6Om51bGxvcHQ7IH0KKyAgICBzdGF0aWMgRm9udFN0eWxlQXhpcyBpbml0aWFsRm9u
dFN0eWxlQXhpcygpIHsgcmV0dXJuIEZvbnRTdHlsZUF4aXM6OnNsbnQ7IH0KKyAgICBzdGF0aWMg
Rm9udFNlbGVjdGlvblZhbHVlIGluaXRpYWxXZWlnaHQoKSB7IHJldHVybiBub3JtYWxXZWlnaHRW
YWx1ZSgpOyB9CisgICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBpbml0aWFsU3RyZXRjaCgp
IHsgcmV0dXJuIG5vcm1hbFN0cmV0Y2hWYWx1ZSgpOyB9CisgICAgc3RhdGljIEZvbnRTbWFsbENh
cHMgaW5pdGlhbFNtYWxsQ2FwcygpIHsgcmV0dXJuIEZvbnRTbWFsbENhcHM6Ok9mZjsgfQorICAg
IHN0YXRpYyBLZXJuaW5nIGluaXRpYWxLZXJuaW5nKCkgeyByZXR1cm4gS2VybmluZzo6QXV0bzsg
fQorICAgIHN0YXRpYyBGb250U21vb3RoaW5nTW9kZSBpbml0aWFsRm9udFNtb290aGluZygpIHsg
cmV0dXJuIEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nOyB9CisgICAgc3RhdGljIFRl
eHRSZW5kZXJpbmdNb2RlIGluaXRpYWxUZXh0UmVuZGVyaW5nTW9kZSgpIHsgcmV0dXJuIFRleHRS
ZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJlbmRlcmluZzsgfQorICAgIHN0YXRpYyBGb250U3ludGhl
c2lzIGluaXRpYWxGb250U3ludGhlc2lzKCkgeyByZXR1cm4gRm9udFN5bnRoZXNpc1dlaWdodCB8
IEZvbnRTeW50aGVzaXNTdHlsZSB8IEZvbnRTeW50aGVzaXNTbWFsbENhcHM7IH0KKyAgICBzdGF0
aWMgRm9udFZhcmlhbnRQb3NpdGlvbiBpbml0aWFsVmFyaWFudFBvc2l0aW9uKCkgeyByZXR1cm4g
Rm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsOyB9CisgICAgc3RhdGljIEZvbnRWYXJpYW50Q2Fw
cyBpbml0aWFsVmFyaWFudENhcHMoKSB7IHJldHVybiBGb250VmFyaWFudENhcHM6Ok5vcm1hbDsg
fQorICAgIHN0YXRpYyBGb250VmFyaWFudEFsdGVybmF0ZXMgaW5pdGlhbFZhcmlhbnRBbHRlcm5h
dGVzKCkgeyByZXR1cm4gRm9udFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWw7IH0KKyAgICBzdGF0
aWMgRm9udE9wdGljYWxTaXppbmcgaW5pdGlhbE9wdGljYWxTaXppbmcoKSB7IHJldHVybiBGb250
T3B0aWNhbFNpemluZzo6RW5hYmxlZDsgfQorICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcm
IGluaXRpYWxMb2NhbGUoKSB7IHJldHVybiBudWxsQXRvbSgpOyB9CisKK3ByaXZhdGU6CisgICAg
UmVmQ291bnRlZEFycmF5PEF0b21pY1N0cmluZz4gbV9mYW1pbGllcyB7IDEgfTsKKworICAgIGZs
b2F0IG1fc3BlY2lmaWVkU2l6ZSB7IDAgfTsgICAvLyBTcGVjaWZpZWQgQ1NTIHZhbHVlLiBJbmRl
cGVuZGVudCBvZiByZW5kZXJpbmcgaXNzdWVzIHN1Y2ggYXMgaW50ZWdlcgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyByb3VuZGluZywgbWluaW11bSBmb250IHNpemVzLCBhbmQgem9v
bWluZy4KKyAgICB1bnNpZ25lZCBtX2lzQWJzb2x1dGVTaXplIDogMTsgLy8gV2hldGhlciBvciBu
b3QgQ1NTIHNwZWNpZmllZCBhbiBleHBsaWNpdCBzaXplCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gKGxvZ2ljYWwgc2l6ZXMgbGlrZSAibWVkaXVtIiBkb24ndCBjb3VudCku
CisgICAgdW5zaWduZWQgbV9rZXJuaW5nIDogMjsgLy8gS2VybmluZworCisgICAgdW5zaWduZWQg
bV9rZXl3b3JkU2l6ZSA6IDQ7IC8vIFdlIGNhY2hlIHdoZXRoZXIgb3Igbm90IGEgZm9udCBpcyBj
dXJyZW50bHkgcmVwcmVzZW50ZWQgYnkgYSBDU1Mga2V5d29yZCAoZS5nLiwgbWVkaXVtKS4gIElm
IHNvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiB3ZSBjYW4gYWNjdXJhdGVs
eSB0cmFuc2xhdGUgYWNyb3NzIGRpZmZlcmVudCBnZW5lcmljIGZhbWlsaWVzIHRvIGFkanVzdCBm
b3IgZGlmZmVyZW50IHByZWZlcmVuY2Ugc2V0dGluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIChlLmcuLCAxM3B4IG1vbm9zcGFjZSB2cy4gMTZweCBldmVyeXRoaW5nIGVsc2UpLiAg
U2l6ZXMgYXJlIDEtOCAobGlrZSB0aGUgSFRNTCBzaXplIHZhbHVlcyBmb3IgPGZvbnQ+KS4KKwor
ICAgIHVuc2lnbmVkIG1fZm9udFNtb290aGluZyA6IDI7IC8vIEZvbnRTbW9vdGhpbmdNb2RlCisg
ICAgdW5zaWduZWQgbV9pc1NwZWNpZmllZEZvbnQgOiAxOyAvLyBUcnVlIGlmIGEgd2ViIHBhZ2Ug
c3BlY2lmaWVzIGEgbm9uLWdlbmVyaWMgZm9udCBmYW1pbHkgYXMgdGhlIGZpcnN0IGZvbnQgZmFt
aWx5LgorfTsKKworaW5saW5lIGJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6b3BlcmF0b3I9
PShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1
cm4gRm9udERlc2NyaXB0aW9uOjpvcGVyYXRvcj09KG90aGVyKQorICAgICAgICAmJiBtX2ZhbWls
aWVzID09IG90aGVyLm1fZmFtaWxpZXMKKyAgICAgICAgJiYgbV9zcGVjaWZpZWRTaXplID09IG90
aGVyLm1fc3BlY2lmaWVkU2l6ZQorICAgICAgICAmJiBtX2lzQWJzb2x1dGVTaXplID09IG90aGVy
Lm1faXNBYnNvbHV0ZVNpemUKKyAgICAgICAgJiYgbV9rZXJuaW5nID09IG90aGVyLm1fa2Vybmlu
ZworICAgICAgICAmJiBtX2tleXdvcmRTaXplID09IG90aGVyLm1fa2V5d29yZFNpemUKKyAgICAg
ICAgJiYgbV9mb250U21vb3RoaW5nID09IG90aGVyLm1fZm9udFNtb290aGluZworICAgICAgICAm
JiBtX2lzU3BlY2lmaWVkRm9udCA9PSBvdGhlci5tX2lzU3BlY2lmaWVkRm9udDsKK30KKworfQor
CisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9s
LXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3Bl
cnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURl
c2NyaXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDE2ICsyMiwxMCBAQAogICoKICAqLwogCi0jaWZuZGVmIEZvbnREZXNj
cmlwdGlvbl9oCi0jZGVmaW5lIEZvbnREZXNjcmlwdGlvbl9oCisjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJGb250U2VsZWN0aW9uQWxnb3Jp
dGhtLmgiCi0jaW5jbHVkZSAiRm9udFRhZ2dlZFNldHRpbmdzLmgiCi0jaW5jbHVkZSAiVGV4dEZs
YWdzLmgiCi0jaW5jbHVkZSAiV2ViS2l0Rm9udEZhbWlseU5hbWVzLmgiCi0jaW5jbHVkZSA8dW5p
Y29kZS91c2NyaXB0Lmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlICJG
b250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZEFycmF5Lmg+CiAjaW5j
bHVkZSA8d3RmL1ZhcmlhbnQuaD4KIApAQCAtNDksMTgxICs0Myw4IEBAIHR5cGVkZWYgRm9udEZh
bWlseVNwZWNpZmljYXRpb25Db3JlVGV4dCAKIHR5cGVkZWYgRm9udEZhbWlseVNwZWNpZmljYXRp
b25OdWxsIEZvbnRGYW1pbHlQbGF0Zm9ybVNwZWNpZmljYXRpb247CiAjZW5kaWYKIAotI2RlZmlu
ZSBVU0VfUExBVEZPUk1fU1lTVEVNX0ZBTExCQUNLX0xJU1QgKChQTEFURk9STShJT1MpICYmIF9f
SVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDAwMCkgfHwgKFBMQVRGT1JNKE1B
QykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEzMDApKQotCiB0eXBl
ZGVmIFZhcmlhbnQ8QXRvbWljU3RyaW5nLCBGb250RmFtaWx5UGxhdGZvcm1TcGVjaWZpY2F0aW9u
PiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbjsKIAotdXNpbmcgbmFtZXNwYWNlIFdlYktpdEZvbnRG
YW1pbHlOYW1lczsKLQotY2xhc3MgRm9udERlc2NyaXB0aW9uIHsKLXB1YmxpYzoKLSAgICBXRUJD
T1JFX0VYUE9SVCBGb250RGVzY3JpcHRpb24oKTsKLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0K
LQotICAgIGZsb2F0IGNvbXB1dGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcHV0ZWRTaXpl
OyB9Ci0gICAgdW5zaWduZWQgY29tcHV0ZWRQaXhlbFNpemUoKSBjb25zdCB7IHJldHVybiB1bnNp
Z25lZChtX2NvbXB1dGVkU2l6ZSArIDAuNWYpOyB9Ci0gICAgc3RkOjpvcHRpb25hbDxGb250U2Vs
ZWN0aW9uVmFsdWU+IGl0YWxpYygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNlbGVjdGlvblJlcXVl
c3Quc2xvcGU7IH0KLSAgICBGb250U2VsZWN0aW9uVmFsdWUgc3RyZXRjaCgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udFNlbGVjdGlvblJlcXVlc3Qud2lkdGg7IH0KLSAgICBGb250U2VsZWN0aW9uVmFs
dWUgd2VpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mb250U2VsZWN0aW9uUmVxdWVzdC53ZWlnaHQ7
IH0KLSAgICBGb250U2VsZWN0aW9uUmVxdWVzdCBmb250U2VsZWN0aW9uUmVxdWVzdCgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udFNlbGVjdGlvblJlcXVlc3Q7IH0KLSAgICBGb250UmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFJlbmRlcmlu
Z01vZGU+KG1fcmVuZGVyaW5nTW9kZSk7IH0KLSAgICBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVu
ZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFRleHRSZW5kZXJpbmdNb2Rl
PihtX3RleHRSZW5kZXJpbmcpOyB9Ci0gICAgVVNjcmlwdENvZGUgc2NyaXB0KCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VVNjcmlwdENvZGU+KG1fc2NyaXB0KTsgfQotICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxlKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbGU7IH0KLQotICAgIEZv
bnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZv
bnRPcmllbnRhdGlvbj4obV9vcmllbnRhdGlvbik7IH0KLSAgICBOb25DSktHbHlwaE9yaWVudGF0
aW9uIG5vbkNKS0dseXBoT3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxO
b25DSktHbHlwaE9yaWVudGF0aW9uPihtX25vbkNKS0dseXBoT3JpZW50YXRpb24pOyB9Ci0gICAg
Rm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxGb250V2lkdGhWYXJpYW50PihtX3dpZHRoVmFyaWFudCk7IH0KLSAgICBjb25zdCBGb250RmVh
dHVyZVNldHRpbmdzJiBmZWF0dXJlU2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVT
ZXR0aW5nczsgfQotICAgIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgdmFyaWF0aW9uU2V0
dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhdGlvblNldHRpbmdzOyB9Ci0gICAgRm9udFN5
bnRoZXNpcyBmb250U3ludGhlc2lzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFN5
bnRoZXNpcz4obV9mb250U3ludGhlc2lzKTsgfQotICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIHZh
cmlhbnRDb21tb25MaWdhdHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFy
aWFudExpZ2F0dXJlcz4obV92YXJpYW50Q29tbW9uTGlnYXR1cmVzKTsgfQotICAgIEZvbnRWYXJp
YW50TGlnYXR1cmVzIHZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnRMaWdhdHVyZXM+KG1fdmFyaWFudERpc2NyZXRpb25h
cnlMaWdhdHVyZXMpOyB9Ci0gICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgdmFyaWFudEhpc3Rvcmlj
YWxMaWdhdHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudExpZ2F0
dXJlcz4obV92YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyk7IH0KLSAgICBGb250VmFyaWFudExp
Z2F0dXJlcyB2YXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXMoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxGb250VmFyaWFudExpZ2F0dXJlcz4obV92YXJpYW50Q29udGV4dHVhbEFsdGVybmF0
ZXMpOyB9Ci0gICAgRm9udFZhcmlhbnRQb3NpdGlvbiB2YXJpYW50UG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudFBvc2l0aW9uPihtX3ZhcmlhbnRQb3NpdGlv
bik7IH0KLSAgICBGb250VmFyaWFudENhcHMgdmFyaWFudENhcHMoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxGb250VmFyaWFudENhcHM+KG1fdmFyaWFudENhcHMpOyB9Ci0gICAgRm9udFZh
cmlhbnROdW1lcmljRmlndXJlIHZhcmlhbnROdW1lcmljRmlndXJlKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnROdW1lcmljRmlndXJlPihtX3ZhcmlhbnROdW1lcmljRmln
dXJlKTsgfQotICAgIEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmcgdmFyaWFudE51bWVyaWNTcGFj
aW5nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnROdW1lcmljU3BhY2lu
Zz4obV92YXJpYW50TnVtZXJpY1NwYWNpbmcpOyB9Ci0gICAgRm9udFZhcmlhbnROdW1lcmljRnJh
Y3Rpb24gdmFyaWFudE51bWVyaWNGcmFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uPihtX3ZhcmlhbnROdW1lcmljRnJhY3Rpb24pOyB9
Ci0gICAgRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbCB2YXJpYW50TnVtZXJpY09yZGluYWwoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudE51bWVyaWNPcmRpbmFsPihtX3Zh
cmlhbnROdW1lcmljT3JkaW5hbCk7IH0KLSAgICBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVy
byB2YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8+KG1fdmFyaWFudE51bWVyaWNTbGFzaGVkWmVy
byk7IH0KLSAgICBGb250VmFyaWFudEFsdGVybmF0ZXMgdmFyaWFudEFsdGVybmF0ZXMoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudEFsdGVybmF0ZXM+KG1fdmFyaWFudEFs
dGVybmF0ZXMpOyB9Ci0gICAgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IHZhcmlhbnRFYXN0
QXNpYW5WYXJpYW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnRFYXN0
QXNpYW5WYXJpYW50PihtX3ZhcmlhbnRFYXN0QXNpYW5WYXJpYW50KTsgfQotICAgIEZvbnRWYXJp
YW50RWFzdEFzaWFuV2lkdGggdmFyaWFudEVhc3RBc2lhbldpZHRoKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aD4obV92YXJpYW50RWFzdEFzaWFu
V2lkdGgpOyB9Ci0gICAgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5IHZhcmlhbnRFYXN0QXNpYW5S
dWJ5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5
PihtX3ZhcmlhbnRFYXN0QXNpYW5SdWJ5KTsgfQotICAgIEZvbnRWYXJpYW50U2V0dGluZ3MgdmFy
aWFudFNldHRpbmdzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB7IHZhcmlhbnRDb21t
b25MaWdhdHVyZXMoKSwKLSAgICAgICAgICAgIHZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVz
KCksCi0gICAgICAgICAgICB2YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcygpLAotICAgICAgICAg
ICAgdmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzKCksCi0gICAgICAgICAgICB2YXJpYW50UG9z
aXRpb24oKSwKLSAgICAgICAgICAgIHZhcmlhbnRDYXBzKCksCi0gICAgICAgICAgICB2YXJpYW50
TnVtZXJpY0ZpZ3VyZSgpLAotICAgICAgICAgICAgdmFyaWFudE51bWVyaWNTcGFjaW5nKCksCi0g
ICAgICAgICAgICB2YXJpYW50TnVtZXJpY0ZyYWN0aW9uKCksCi0gICAgICAgICAgICB2YXJpYW50
TnVtZXJpY09yZGluYWwoKSwKLSAgICAgICAgICAgIHZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8o
KSwKLSAgICAgICAgICAgIHZhcmlhbnRBbHRlcm5hdGVzKCksCi0gICAgICAgICAgICB2YXJpYW50
RWFzdEFzaWFuVmFyaWFudCgpLAotICAgICAgICAgICAgdmFyaWFudEVhc3RBc2lhbldpZHRoKCks
Ci0gICAgICAgICAgICB2YXJpYW50RWFzdEFzaWFuUnVieSgpIH07Ci0gICAgfQotICAgIEZvbnRP
cHRpY2FsU2l6aW5nIG9wdGljYWxTaXppbmcoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxG
b250T3B0aWNhbFNpemluZz4obV9vcHRpY2FsU2l6aW5nKTsgfQotICAgIEZvbnRTdHlsZUF4aXMg
Zm9udFN0eWxlQXhpcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFN0eWxlQXhpcyA/IEZvbnRTdHls
ZUF4aXM6Oml0YWwgOiBGb250U3R5bGVBeGlzOjpzbG50OyB9Ci0gICAgQWxsb3dVc2VySW5zdGFs
bGVkRm9udHMgc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxBbGxvd1VzZXJJbnN0YWxsZWRGb250cz4obV9zaG91bGRBbGxvd1VzZXJJbnN0
YWxsZWRGb250cyk7IH0KLQotICAgIHZvaWQgc2V0Q29tcHV0ZWRTaXplKGZsb2F0IHMpIHsgbV9j
b21wdXRlZFNpemUgPSBjbGFtcFRvRmxvYXQocyk7IH0KLSAgICB2b2lkIHNldEl0YWxpYyhzdGQ6
Om9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gaXRhbGljKSB7IG1fZm9udFNlbGVjdGlvblJl
cXVlc3Quc2xvcGUgPSBpdGFsaWM7IH0KLSAgICB2b2lkIHNldFN0cmV0Y2goRm9udFNlbGVjdGlv
blZhbHVlIHN0cmV0Y2gpIHsgbV9mb250U2VsZWN0aW9uUmVxdWVzdC53aWR0aCA9IHN0cmV0Y2g7
IH0KLSAgICB2b2lkIHNldElzSXRhbGljKGJvb2wgaXNJdGFsaWMpIHsgc2V0SXRhbGljKGlzSXRh
bGljID8gc3RkOjpvcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IHsgaXRhbGljVmFsdWUoKSB9
IDogc3RkOjpvcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IHsgfSk7IH0KLSAgICB2b2lkIHNl
dFdlaWdodChGb250U2VsZWN0aW9uVmFsdWUgd2VpZ2h0KSB7IG1fZm9udFNlbGVjdGlvblJlcXVl
c3Qud2VpZ2h0ID0gd2VpZ2h0OyB9Ci0gICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKEZvbnRSZW5k
ZXJpbmdNb2RlIG1vZGUpIHsgbV9yZW5kZXJpbmdNb2RlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG1vZGUpOyB9Ci0gICAgdm9pZCBzZXRUZXh0UmVuZGVyaW5nTW9kZShUZXh0UmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmcpIHsgbV90ZXh0UmVuZGVyaW5nID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJl
bmRlcmluZyk7IH0KLSAgICB2b2lkIHNldE9yaWVudGF0aW9uKEZvbnRPcmllbnRhdGlvbiBvcmll
bnRhdGlvbikgeyBtX29yaWVudGF0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9yaWVudGF0
aW9uKTsgfQotICAgIHZvaWQgc2V0Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbihOb25DSktHbHlwaE9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbiA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihvcmllbnRhdGlvbik7IH0KLSAgICB2b2lkIHNldFdpZHRoVmFyaWFu
dChGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCkgeyBtX3dpZHRoVmFyaWFudCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih3aWR0aFZhcmlhbnQpOyB9IC8vIE1ha2Ugc3VyZSBuZXcgY2FsbGVy
cyBvZiB0aGlzIHN5bmMgd2l0aCBGb250UGxhdGZvcm1EYXRhOjppc0ZvclRleHRDb21iaW5lKCkh
Ci0gICAgdm9pZCBzZXRMb2NhbGUoY29uc3QgQXRvbWljU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRG
ZWF0dXJlU2V0dGluZ3MoRm9udEZlYXR1cmVTZXR0aW5ncyYmIHNldHRpbmdzKSB7IG1fZmVhdHVy
ZVNldHRpbmdzID0gV1RGTW92ZShzZXR0aW5ncyk7IH0KLSNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZP
TlRTKQotICAgIHZvaWQgc2V0VmFyaWF0aW9uU2V0dGluZ3MoRm9udFZhcmlhdGlvblNldHRpbmdz
JiYgc2V0dGluZ3MpIHsgbV92YXJpYXRpb25TZXR0aW5ncyA9IFdURk1vdmUoc2V0dGluZ3MpOyB9
Ci0jZW5kaWYKLSAgICB2b2lkIHNldEZvbnRTeW50aGVzaXMoRm9udFN5bnRoZXNpcyBmb250U3lu
dGhlc2lzKSB7IG1fZm9udFN5bnRoZXNpcyA9IGZvbnRTeW50aGVzaXM7IH0KLSAgICB2b2lkIHNl
dFZhcmlhbnRDb21tb25MaWdhdHVyZXMoRm9udFZhcmlhbnRMaWdhdHVyZXMgdmFyaWFudCkgeyBt
X3ZhcmlhbnRDb21tb25MaWdhdHVyZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7
IH0KLSAgICB2b2lkIHNldFZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKEZvbnRWYXJpYW50
TGlnYXR1cmVzIHZhcmlhbnQpIHsgbV92YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcyA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudEhpc3Rv
cmljYWxMaWdhdHVyZXMoRm9udFZhcmlhbnRMaWdhdHVyZXMgdmFyaWFudCkgeyBtX3ZhcmlhbnRI
aXN0b3JpY2FsTGlnYXR1cmVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Ci0g
ICAgdm9pZCBzZXRWYXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXMoRm9udFZhcmlhbnRMaWdhdHVy
ZXMgdmFyaWFudCkgeyBtX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudFBvc2l0aW9uKEZvbnRW
YXJpYW50UG9zaXRpb24gdmFyaWFudCkgeyBtX3ZhcmlhbnRQb3NpdGlvbiA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudENhcHMoRm9udFZhcmlh
bnRDYXBzIHZhcmlhbnQpIHsgbV92YXJpYW50Q2FwcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2
YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudE51bWVyaWNGaWd1cmUoRm9udFZhcmlhbnRO
dW1lcmljRmlndXJlIHZhcmlhbnQpIHsgbV92YXJpYW50TnVtZXJpY0ZpZ3VyZSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudE51bWVyaWNTcGFj
aW5nKEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmcgdmFyaWFudCkgeyBtX3ZhcmlhbnROdW1lcmlj
U3BhY2luZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0
VmFyaWFudE51bWVyaWNGcmFjdGlvbihGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbiB2YXJpYW50
KSB7IG1fdmFyaWFudE51bWVyaWNGcmFjdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJp
YW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudE51bWVyaWNPcmRpbmFsKEZvbnRWYXJpYW50TnVt
ZXJpY09yZGluYWwgdmFyaWFudCkgeyBtX3ZhcmlhbnROdW1lcmljT3JkaW5hbCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudE51bWVyaWNTbGFz
aGVkWmVybyhGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyB2YXJpYW50KSB7IG1fdmFyaWFu
dE51bWVyaWNTbGFzaGVkWmVybyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQot
ICAgIHZvaWQgc2V0VmFyaWFudEFsdGVybmF0ZXMoRm9udFZhcmlhbnRBbHRlcm5hdGVzIHZhcmlh
bnQpIHsgbV92YXJpYW50QWx0ZXJuYXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50
KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudEVhc3RBc2lhblZhcmlhbnQoRm9udFZhcmlhbnRFYXN0
QXNpYW5WYXJpYW50IHZhcmlhbnQpIHsgbV92YXJpYW50RWFzdEFzaWFuVmFyaWFudCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudEVhc3RBc2lh
bldpZHRoKEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGggdmFyaWFudCkgeyBtX3ZhcmlhbnRFYXN0
QXNpYW5XaWR0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQg
c2V0VmFyaWFudEVhc3RBc2lhblJ1YnkoRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5IHZhcmlhbnQp
IHsgbV92YXJpYW50RWFzdEFzaWFuUnVieSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50
KTsgfQotICAgIHZvaWQgc2V0T3B0aWNhbFNpemluZyhGb250T3B0aWNhbFNpemluZyBzaXppbmcp
IHsgbV9vcHRpY2FsU2l6aW5nID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpemluZyk7IH0KLSAg
ICB2b2lkIHNldEZvbnRTdHlsZUF4aXMoRm9udFN0eWxlQXhpcyBheGlzKSB7IG1fZm9udFN0eWxl
QXhpcyA9IGF4aXMgPT0gRm9udFN0eWxlQXhpczo6aXRhbDsgfQotICAgIHZvaWQgc2V0U2hvdWxk
QWxsb3dVc2VySW5zdGFsbGVkRm9udHMoQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgc2hvdWxkQWxs
b3dVc2VySW5zdGFsbGVkRm9udHMpIHsgbV9zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7IH0K
LQotICAgIHN0YXRpYyB2b2lkIGludmFsaWRhdGVDYWNoZXMoKTsKLQotcHJpdmF0ZToKLSAgICAv
LyBGSVhNRTogSW52ZXN0aWdhdGUgbW92aW5nIHRoZXNlIGludG8gdGhlaXIgb3duIG9iamVjdCBv
biB0aGUgaGVhcCAodG8gc2F2ZSBtZW1vcnkpLgotICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MgbV9m
ZWF0dXJlU2V0dGluZ3M7Ci0gICAgRm9udFZhcmlhdGlvblNldHRpbmdzIG1fdmFyaWF0aW9uU2V0
dGluZ3M7Ci0gICAgQXRvbWljU3RyaW5nIG1fbG9jYWxlOwotCi0gICAgRm9udFNlbGVjdGlvblJl
cXVlc3QgbV9mb250U2VsZWN0aW9uUmVxdWVzdDsKLSAgICBmbG9hdCBtX2NvbXB1dGVkU2l6ZSB7
IDAgfTsgLy8gQ29tcHV0ZWQgc2l6ZSBhZGp1c3RlZCBmb3IgdGhlIG1pbmltdW0gZm9udCBzaXpl
IGFuZCB0aGUgem9vbSBmYWN0b3IuCi0gICAgdW5zaWduZWQgbV9vcmllbnRhdGlvbiA6IDE7IC8v
IEZvbnRPcmllbnRhdGlvbiAtIFdoZXRoZXIgdGhlIGZvbnQgaXMgcmVuZGVyaW5nIG9uIGEgaG9y
aXpvbnRhbCBsaW5lIG9yIGEgdmVydGljYWwgbGluZS4KLSAgICB1bnNpZ25lZCBtX25vbkNKS0ds
eXBoT3JpZW50YXRpb24gOiAxOyAvLyBOb25DSktHbHlwaE9yaWVudGF0aW9uIC0gT25seSB1c2Vk
IGJ5IHZlcnRpY2FsIHRleHQuIERldGVybWluZXMgdGhlIGRlZmF1bHQgb3JpZW50YXRpb24gZm9y
IG5vbi1pZGVvZ3JhcGggZ2x5cGhzLgotICAgIHVuc2lnbmVkIG1fd2lkdGhWYXJpYW50IDogMjsg
Ly8gRm9udFdpZHRoVmFyaWFudAotICAgIHVuc2lnbmVkIG1fcmVuZGVyaW5nTW9kZSA6IDE7IC8v
IFVzZWQgdG8gc3dpdGNoIGJldHdlZW4gQ0cgYW5kIEdESSB0ZXh0IG9uIFdpbmRvd3MuCi0gICAg
dW5zaWduZWQgbV90ZXh0UmVuZGVyaW5nIDogMjsgLy8gVGV4dFJlbmRlcmluZ01vZGUKLSAgICB1
bnNpZ25lZCBtX3NjcmlwdCA6IDc7IC8vIFVzZWQgdG8gaGVscCBjaG9vc2UgYW4gYXBwcm9wcmlh
dGUgZm9udCBmb3IgZ2VuZXJpYyBmb250IGZhbWlsaWVzLgotICAgIHVuc2lnbmVkIG1fZm9udFN5
bnRoZXNpcyA6IDM7IC8vIEZvbnRTeW50aGVzaXMgdHlwZQotICAgIHVuc2lnbmVkIG1fdmFyaWFu
dENvbW1vbkxpZ2F0dXJlcyA6IDI7IC8vIEZvbnRWYXJpYW50TGlnYXR1cmVzCi0gICAgdW5zaWdu
ZWQgbV92YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcyA6IDI7IC8vIEZvbnRWYXJpYW50TGln
YXR1cmVzCi0gICAgdW5zaWduZWQgbV92YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyA6IDI7IC8v
IEZvbnRWYXJpYW50TGlnYXR1cmVzCi0gICAgdW5zaWduZWQgbV92YXJpYW50Q29udGV4dHVhbEFs
dGVybmF0ZXMgOiAyOyAvLyBGb250VmFyaWFudExpZ2F0dXJlcwotICAgIHVuc2lnbmVkIG1fdmFy
aWFudFBvc2l0aW9uIDogMjsgLy8gRm9udFZhcmlhbnRQb3NpdGlvbgotICAgIHVuc2lnbmVkIG1f
dmFyaWFudENhcHMgOiAzOyAvLyBGb250VmFyaWFudENhcHMKLSAgICB1bnNpZ25lZCBtX3Zhcmlh
bnROdW1lcmljRmlndXJlIDogMjsgLy8gRm9udFZhcmlhbnROdW1lcmljRmlndXJlCi0gICAgdW5z
aWduZWQgbV92YXJpYW50TnVtZXJpY1NwYWNpbmcgOiAyOyAvLyBGb250VmFyaWFudE51bWVyaWNT
cGFjaW5nCi0gICAgdW5zaWduZWQgbV92YXJpYW50TnVtZXJpY0ZyYWN0aW9uIDogMjsgLy8gRm9u
dFZhcmlhbnROdW1lcmljRnJhY3Rpb24KLSAgICB1bnNpZ25lZCBtX3ZhcmlhbnROdW1lcmljT3Jk
aW5hbCA6IDE7IC8vIEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWwKLSAgICB1bnNpZ25lZCBtX3Zh
cmlhbnROdW1lcmljU2xhc2hlZFplcm8gOiAxOyAvLyBGb250VmFyaWFudE51bWVyaWNTbGFzaGVk
WmVybwotICAgIHVuc2lnbmVkIG1fdmFyaWFudEFsdGVybmF0ZXMgOiAxOyAvLyBGb250VmFyaWFu
dEFsdGVybmF0ZXMKLSAgICB1bnNpZ25lZCBtX3ZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IDogMzsg
Ly8gRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50Ci0gICAgdW5zaWduZWQgbV92YXJpYW50RWFz
dEFzaWFuV2lkdGggOiAyOyAvLyBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoCi0gICAgdW5zaWdu
ZWQgbV92YXJpYW50RWFzdEFzaWFuUnVieSA6IDE7IC8vIEZvbnRWYXJpYW50RWFzdEFzaWFuUnVi
eQotICAgIHVuc2lnbmVkIG1fb3B0aWNhbFNpemluZyA6IDE7IC8vIEZvbnRPcHRpY2FsU2l6aW5n
Ci0gICAgdW5zaWduZWQgbV9mb250U3R5bGVBeGlzIDogMTsgLy8gV2hldGhlciAiZm9udC1zdHls
ZTogaXRhbGljIiBvciAiZm9udC1zdHlsZTogb2JsaXF1ZSAyMGRlZyIgd2FzIHNwZWNpZmllZAot
ICAgIHVuc2lnbmVkIG1fc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgOiAxOyAvLyBBbGxv
d1VzZXJJbnN0YWxsZWRGb250czogSWYgdGhpcyBkZXNjcmlwdGlvbiBpcyBhbGxvd2VkIHRvIG1h
dGNoIGEgdXNlci1pbnN0YWxsZWQgZm9udAotfTsKLQotaW5saW5lIGJvb2wgRm9udERlc2NyaXB0
aW9uOjpvcGVyYXRvcj09KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fY29tcHV0ZWRTaXplID09IG90aGVyLm1fY29tcHV0ZWRTaXplCi0gICAgICAg
ICYmIG1fZm9udFNlbGVjdGlvblJlcXVlc3QgPT0gb3RoZXIubV9mb250U2VsZWN0aW9uUmVxdWVz
dAotICAgICAgICAmJiBtX3JlbmRlcmluZ01vZGUgPT0gb3RoZXIubV9yZW5kZXJpbmdNb2RlCi0g
ICAgICAgICYmIG1fdGV4dFJlbmRlcmluZyA9PSBvdGhlci5tX3RleHRSZW5kZXJpbmcKLSAgICAg
ICAgJiYgbV9vcmllbnRhdGlvbiA9PSBvdGhlci5tX29yaWVudGF0aW9uCi0gICAgICAgICYmIG1f
bm9uQ0pLR2x5cGhPcmllbnRhdGlvbiA9PSBvdGhlci5tX25vbkNKS0dseXBoT3JpZW50YXRpb24K
LSAgICAgICAgJiYgbV93aWR0aFZhcmlhbnQgPT0gb3RoZXIubV93aWR0aFZhcmlhbnQKLSAgICAg
ICAgJiYgbV9sb2NhbGUgPT0gb3RoZXIubV9sb2NhbGUKLSAgICAgICAgJiYgbV9mZWF0dXJlU2V0
dGluZ3MgPT0gb3RoZXIubV9mZWF0dXJlU2V0dGluZ3MKLSNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZP
TlRTKQotICAgICAgICAmJiBtX3ZhcmlhdGlvblNldHRpbmdzID09IG90aGVyLm1fdmFyaWF0aW9u
U2V0dGluZ3MKLSNlbmRpZgotICAgICAgICAmJiBtX2ZvbnRTeW50aGVzaXMgPT0gb3RoZXIubV9m
b250U3ludGhlc2lzCi0gICAgICAgICYmIG1fdmFyaWFudENvbW1vbkxpZ2F0dXJlcyA9PSBvdGhl
ci5tX3ZhcmlhbnRDb21tb25MaWdhdHVyZXMKLSAgICAgICAgJiYgbV92YXJpYW50RGlzY3JldGlv
bmFyeUxpZ2F0dXJlcyA9PSBvdGhlci5tX3ZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzCi0g
ICAgICAgICYmIG1fdmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXMgPT0gb3RoZXIubV92YXJpYW50
SGlzdG9yaWNhbExpZ2F0dXJlcwotICAgICAgICAmJiBtX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJu
YXRlcyA9PSBvdGhlci5tX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcwotICAgICAgICAmJiBt
X3ZhcmlhbnRQb3NpdGlvbiA9PSBvdGhlci5tX3ZhcmlhbnRQb3NpdGlvbgotICAgICAgICAmJiBt
X3ZhcmlhbnRDYXBzID09IG90aGVyLm1fdmFyaWFudENhcHMKLSAgICAgICAgJiYgbV92YXJpYW50
TnVtZXJpY0ZpZ3VyZSA9PSBvdGhlci5tX3ZhcmlhbnROdW1lcmljRmlndXJlCi0gICAgICAgICYm
IG1fdmFyaWFudE51bWVyaWNTcGFjaW5nID09IG90aGVyLm1fdmFyaWFudE51bWVyaWNTcGFjaW5n
Ci0gICAgICAgICYmIG1fdmFyaWFudE51bWVyaWNGcmFjdGlvbiA9PSBvdGhlci5tX3ZhcmlhbnRO
dW1lcmljRnJhY3Rpb24KLSAgICAgICAgJiYgbV92YXJpYW50TnVtZXJpY09yZGluYWwgPT0gb3Ro
ZXIubV92YXJpYW50TnVtZXJpY09yZGluYWwKLSAgICAgICAgJiYgbV92YXJpYW50TnVtZXJpY1Ns
YXNoZWRaZXJvID09IG90aGVyLm1fdmFyaWFudE51bWVyaWNTbGFzaGVkWmVybwotICAgICAgICAm
JiBtX3ZhcmlhbnRBbHRlcm5hdGVzID09IG90aGVyLm1fdmFyaWFudEFsdGVybmF0ZXMKLSAgICAg
ICAgJiYgbV92YXJpYW50RWFzdEFzaWFuVmFyaWFudCA9PSBvdGhlci5tX3ZhcmlhbnRFYXN0QXNp
YW5WYXJpYW50Ci0gICAgICAgICYmIG1fdmFyaWFudEVhc3RBc2lhbldpZHRoID09IG90aGVyLm1f
dmFyaWFudEVhc3RBc2lhbldpZHRoCi0gICAgICAgICYmIG1fdmFyaWFudEVhc3RBc2lhblJ1Ynkg
PT0gb3RoZXIubV92YXJpYW50RWFzdEFzaWFuUnVieQotICAgICAgICAmJiBtX29wdGljYWxTaXpp
bmcgPT0gb3RoZXIubV9vcHRpY2FsU2l6aW5nCi0gICAgICAgICYmIG1fZm9udFN0eWxlQXhpcyA9
PSBvdGhlci5tX2ZvbnRTdHlsZUF4aXMKLSAgICAgICAgJiYgbV9zaG91bGRBbGxvd1VzZXJJbnN0
YWxsZWRGb250cyA9PSBvdGhlci5tX3Nob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzOwotfQot
Ci0vLyBGSVhNRTogTW92ZSB0byBhIGZpbGUgb2YgaXRzIG93bi4KIGNsYXNzIEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24gOiBwdWJsaWMgRm9udERlc2NyaXB0aW9uIHsKIHB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCBGb250Q2FzY2FkZURlc2NyaXB0aW9uKCk7CkBAIC0zMTYsMTggKzEzNywxOCBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFJlZkNvdW50ZWRBcnJheTxBdG9taWNTdHJpbmc+IG1f
ZmFtaWxpZXMgeyAxIH07CiAKLSAgICBmbG9hdCBtX3NwZWNpZmllZFNpemUgeyAwIH07ICAgLy8g
U3BlY2lmaWVkIENTUyB2YWx1ZS4gSW5kZXBlbmRlbnQgb2YgcmVuZGVyaW5nIGlzc3VlcyBzdWNo
IGFzIGludGVnZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcm91bmRpbmcsIG1p
bmltdW0gZm9udCBzaXplcywgYW5kIHpvb21pbmcuCi0gICAgdW5zaWduZWQgbV9pc0Fic29sdXRl
U2l6ZSA6IDE7IC8vIFdoZXRoZXIgb3Igbm90IENTUyBzcGVjaWZpZWQgYW4gZXhwbGljaXQgc2l6
ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChsb2dpY2FsIHNpemVzIGxp
a2UgIm1lZGl1bSIgZG9uJ3QgY291bnQpLgorICAgIC8vIFNwZWNpZmllZCBDU1MgdmFsdWUuIElu
ZGVwZW5kZW50IG9mIHJlbmRlcmluZyBpc3N1ZXMgc3VjaCBhcyBpbnRlZ2VyIHJvdW5kaW5nLCBt
aW5pbXVtIGZvbnQgc2l6ZXMsIGFuZCB6b29taW5nLgorICAgIGZsb2F0IG1fc3BlY2lmaWVkU2l6
ZSB7IDAgfTsKKyAgICAvLyBXaGV0aGVyIG9yIG5vdCBDU1Mgc3BlY2lmaWVkIGFuIGV4cGxpY2l0
IHNpemUgKGxvZ2ljYWwgc2l6ZXMgbGlrZSAibWVkaXVtIiBkb24ndCBjb3VudCkuCisgICAgdW5z
aWduZWQgbV9pc0Fic29sdXRlU2l6ZSA6IDE7CiAgICAgdW5zaWduZWQgbV9rZXJuaW5nIDogMjsg
Ly8gS2VybmluZwotCi0gICAgdW5zaWduZWQgbV9rZXl3b3JkU2l6ZSA6IDQ7IC8vIFdlIGNhY2hl
IHdoZXRoZXIgb3Igbm90IGEgZm9udCBpcyBjdXJyZW50bHkgcmVwcmVzZW50ZWQgYnkgYSBDU1Mg
a2V5d29yZCAoZS5nLiwgbWVkaXVtKS4gIElmIHNvLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdGhlbiB3ZSBjYW4gYWNjdXJhdGVseSB0cmFuc2xhdGUgYWNyb3NzIGRpZmZlcmVudCBn
ZW5lcmljIGZhbWlsaWVzIHRvIGFkanVzdCBmb3IgZGlmZmVyZW50IHByZWZlcmVuY2Ugc2V0dGlu
Z3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChlLmcuLCAxM3B4IG1vbm9zcGFjZSB2
cy4gMTZweCBldmVyeXRoaW5nIGVsc2UpLiAgU2l6ZXMgYXJlIDEtOCAobGlrZSB0aGUgSFRNTCBz
aXplIHZhbHVlcyBmb3IgPGZvbnQ+KS4KLQorICAgIC8vIFdlIGNhY2hlIHdoZXRoZXIgb3Igbm90
IGEgZm9udCBpcyBjdXJyZW50bHkgcmVwcmVzZW50ZWQgYnkgYSBDU1Mga2V5d29yZCAoZS5nLiwg
bWVkaXVtKS4gSWYgc28sCisgICAgLy8gdGhlbiB3ZSBjYW4gYWNjdXJhdGVseSB0cmFuc2xhdGUg
YWNyb3NzIGRpZmZlcmVudCBnZW5lcmljIGZhbWlsaWVzIHRvIGFkanVzdCBmb3IgZGlmZmVyZW50
IHByZWZlcmVuY2Ugc2V0dGluZ3MKKyAgICAvLyAoZS5nLiwgMTNweCBtb25vc3BhY2UgdnMuIDE2
cHggZXZlcnl0aGluZyBlbHNlKS4gU2l6ZXMgYXJlIDEtOCAobGlrZSB0aGUgSFRNTCBzaXplIHZh
bHVlcyBmb3IgPGZvbnQ+KS4KKyAgICB1bnNpZ25lZCBtX2tleXdvcmRTaXplIDogNDsKICAgICB1
bnNpZ25lZCBtX2ZvbnRTbW9vdGhpbmcgOiAyOyAvLyBGb250U21vb3RoaW5nTW9kZQotICAgIHVu
c2lnbmVkIG1faXNTcGVjaWZpZWRGb250IDogMTsgLy8gVHJ1ZSBpZiBhIHdlYiBwYWdlIHNwZWNp
ZmllcyBhIG5vbi1nZW5lcmljIGZvbnQgZmFtaWx5IGFzIHRoZSBmaXJzdCBmb250IGZhbWlseS4K
KyAgICAvLyBUcnVlIGlmIGEgd2ViIHBhZ2Ugc3BlY2lmaWVzIGEgbm9uLWdlbmVyaWMgZm9udCBm
YW1pbHkgYXMgdGhlIGZpcnN0IGZvbnQgZmFtaWx5LgorICAgIHVuc2lnbmVkIG1faXNTcGVjaWZp
ZWRGb250IDogMTsKIH07CiAKIGlubGluZSBib29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Om9w
ZXJhdG9yPT0oY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0CkBAIC0z
NDMsNSArMTY0LDMgQEAgaW5saW5lIGJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6b3Blcgog
fQogCiB9Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udERlc2NyaXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uY3BwCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwzMCArMzAsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJGb250RGVzY3JpcHRpb24uaCIKIAorI2luY2x1ZGUgIkZvbnRDYXNjYWRlRGVzY3JpcHRpb24u
aCIKICNpbmNsdWRlICJMb2NhbGVUb1NjcmlwdE1hcHBpbmcuaCIKLSNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IFNhbWVTaXpl
QXNGb250Q2FzY2FkZURlc2NyaXB0aW9uIHsKLSAgICBWZWN0b3I8dm9pZCo+IHZlY3RvcjsKLSNp
ZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotICAgIFZlY3Rvcjx2b2lkKj4gdmVjdG9yMjsKLSNl
bHNlCi0gICAgY2hhciBjOwotI2VuZGlmCi0gICAgQXRvbWljU3RyaW5nIHN0cmluZzsKLSAgICBp
bnQxNl90IGZvbnRTZWxlY3Rpb25SZXF1ZXN0WzNdOwotICAgIGZsb2F0IHNpemU7Ci0gICAgdW5z
aWduZWQgYml0ZmllbGRzMTsKLSAgICB1bnNpZ25lZCBiaXRmaWVsZHMyIDogMjI7Ci0gICAgdm9p
ZCogYXJyYXk7Ci0gICAgZmxvYXQgc2l6ZTI7Ci0gICAgdW5zaWduZWQgYml0ZmllbGRzMyA6IDEw
OwotfTsKLQotQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24pID09
IHNpemVvZihTYW1lU2l6ZUFzRm9udENhc2NhZGVEZXNjcmlwdGlvbiksIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb25fc2hvdWxkX3N0YXlfc21hbGwpOwotCiBGb250RGVzY3JpcHRpb246OkZvbnREZXNj
cmlwdGlvbigpCiAgICAgOiBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0IHsgRm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6aW5pdGlhbFdlaWdodCgpLCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFs
U3RyZXRjaCgpLCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsSXRhbGljKCkgfQogICAg
ICwgbV9vcmllbnRhdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udE9yaWVudGF0aW9uOjpI
b3Jpem9udGFsKSkKQEAgLTkwLDk4ICs3MSwxMCBAQCB2b2lkIEZvbnREZXNjcmlwdGlvbjo6c2V0
TG9jYWxlKGNvbnN0IEF0CiAgICAgbV9zY3JpcHQgPSBsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250
U2VsZWN0aW9uKG1fbG9jYWxlKTsKIH0KIAotRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Rm9udENh
c2NhZGVEZXNjcmlwdGlvbigpCi0gICAgOiBtX2lzQWJzb2x1dGVTaXplKGZhbHNlKQotICAgICwg
bV9rZXJuaW5nKHN0YXRpY19jYXN0PHVuc2lnbmVkPihLZXJuaW5nOjpBdXRvKSkKLSAgICAsIG1f
a2V5d29yZFNpemUoMCkKLSAgICAsIG1fZm9udFNtb290aGluZyhzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmcpKQotICAgICwgbV9pc1NwZWNpZmll
ZEZvbnQoZmFsc2UpCi17Ci19Ci0KICNpZiAhVVNFX1BMQVRGT1JNX1NZU1RFTV9GQUxMQkFDS19M
SVNUCiB2b2lkIEZvbnREZXNjcmlwdGlvbjo6aW52YWxpZGF0ZUNhY2hlcygpCiB7CiB9Ci0KLXVu
c2lnbmVkIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmVmZmVjdGl2ZUZhbWlseUNvdW50KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZmFtaWx5Q291bnQoKTsKLX0KLQotRm9udEZhbWlseVNwZWNpZmlj
YXRpb24gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZWZmZWN0aXZlRmFtaWx5QXQodW5zaWduZWQg
aSkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFtaWx5QXQoaSk7Ci19CiAjZW5kaWYKIAotRm9udFNl
bGVjdGlvblZhbHVlIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmxpZ2h0ZXJXZWlnaHQoRm9udFNl
bGVjdGlvblZhbHVlIHdlaWdodCkKLXsKLSAgICBpZiAod2VpZ2h0IDwgRm9udFNlbGVjdGlvblZh
bHVlKDEwMCkpCi0gICAgICAgIHJldHVybiB3ZWlnaHQ7Ci0gICAgaWYgKHdlaWdodCA8IEZvbnRT
ZWxlY3Rpb25WYWx1ZSg1NTApKQotICAgICAgICByZXR1cm4gRm9udFNlbGVjdGlvblZhbHVlKDEw
MCk7Ci0gICAgaWYgKHdlaWdodCA8IEZvbnRTZWxlY3Rpb25WYWx1ZSg3NTApKQotICAgICAgICBy
ZXR1cm4gRm9udFNlbGVjdGlvblZhbHVlKDQwMCk7Ci0gICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25W
YWx1ZSg3MDApOwotfQotCi1Gb250U2VsZWN0aW9uVmFsdWUgRm9udENhc2NhZGVEZXNjcmlwdGlv
bjo6Ym9sZGVyV2VpZ2h0KEZvbnRTZWxlY3Rpb25WYWx1ZSB3ZWlnaHQpCi17Ci0gICAgaWYgKHdl
aWdodCA8IEZvbnRTZWxlY3Rpb25WYWx1ZSgzNTApKQotICAgICAgICByZXR1cm4gRm9udFNlbGVj
dGlvblZhbHVlKDQwMCk7Ci0gICAgaWYgKHdlaWdodCA8IEZvbnRTZWxlY3Rpb25WYWx1ZSg1NTAp
KQotICAgICAgICByZXR1cm4gRm9udFNlbGVjdGlvblZhbHVlKDcwMCk7Ci0gICAgaWYgKHdlaWdo
dCA8IEZvbnRTZWxlY3Rpb25WYWx1ZSg5MDApKQotICAgICAgICByZXR1cm4gRm9udFNlbGVjdGlv
blZhbHVlKDkwMCk7Ci0gICAgcmV0dXJuIHdlaWdodDsKLX0KLQotI2lmIEVOQUJMRShURVhUX0FV
VE9TSVpJTkcpCi0KLWJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWxpZXNFcXVhbEZv
clRleHRBdXRvU2l6aW5nKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIG90aGVyKSBjb25z
dAotewotICAgIHVuc2lnbmVkIHRoaXNGYW1pbHlDb3VudCA9IGZhbWlseUNvdW50KCk7Ci0gICAg
dW5zaWduZWQgb3RoZXJGYW1pbHlDb3VudCA9IG90aGVyLmZhbWlseUNvdW50KCk7Ci0KLSAgICBp
ZiAodGhpc0ZhbWlseUNvdW50ICE9IG90aGVyRmFtaWx5Q291bnQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzRmFtaWx5Q291bnQ7ICsr
aSkgewotICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5QXQoaSksIG90
aGVyLmZhbWlseUF0KGkpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCi0K
LWJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseTEsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5MikKLXsKLSAg
ICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzMzNTk0MjUzPiBDb3JlVGV4dCBtYXRjaGVzIGRv
dC1wcmVmaXhlZCBmb250IG5hbWVzIGNhc2Ugc2Vuc2l0aXZlbHkuIFdlIHNob3VsZAotICAgIC8v
IGFsd2F5cyB0YWtlIHRoZSBjYXNlIGluc2Vuc2l0aXZlIHBhdGNoIG9uY2UgdGhpcyByYWRhciBp
cyBmaXhlZC4KLSAgICBpZiAoZmFtaWx5MS5zdGFydHNXaXRoKCcuJykpCi0gICAgICAgIHJldHVy
biBTdHJpbmdIYXNoOjplcXVhbChmYW1pbHkxLnN0cmluZygpLCBmYW1pbHkyLnN0cmluZygpKTsK
LSAgICByZXR1cm4gQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoOjplcXVhbChmYW1pbHkxLCBmYW1p
bHkyKTsKLX0KLQotdW5zaWduZWQgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZUhh
c2goY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCi17Ci0gICAgLy8gRklYTUU6IDxyZGFyOi8v
cHJvYmxlbS8zMzU5NDI1Mz4gQ29yZVRleHQgbWF0Y2hlcyBkb3QtcHJlZml4ZWQgZm9udCBuYW1l
cyBjYXNlIHNlbnNpdGl2ZWx5LiBXZSBzaG91bGQKLSAgICAvLyBhbHdheXMgdGFrZSB0aGUgY2Fz
ZSBpbnNlbnNpdGl2ZSBwYXRjaCBvbmNlIHRoaXMgcmFkYXIgaXMgZml4ZWQuCi0gICAgaWYgKGZh
bWlseS5zdGFydHNXaXRoKCcuJykpCi0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoOjpoYXNoKGZh
bWlseS5zdHJpbmcoKSk7Ci0gICAgcmV0dXJuIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaDo6aGFz
aChmYW1pbHkpOwotfQotCi1TdHJpbmcgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Zm9sZGVkRmFt
aWx5TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKLXsKLSAgICAvLyBGSVhNRTogPHJk
YXI6Ly9wcm9ibGVtLzMzNTk0MjUzPiBDb3JlVGV4dCBtYXRjaGVzIGRvdC1wcmVmaXhlZCBmb250
IG5hbWVzIGNhc2Ugc2Vuc2l0aXZlbHkuIFdlIHNob3VsZAotICAgIC8vIGFsd2F5cyB0YWtlIHRo
ZSBjYXNlIGluc2Vuc2l0aXZlIHBhdGNoIG9uY2UgdGhpcyByYWRhciBpcyBmaXhlZC4KLSAgICBp
ZiAoZmFtaWx5LnN0YXJ0c1dpdGgoJy4nKSkKLSAgICAgICAgcmV0dXJuIGZhbWlseS5zdHJpbmco
KTsKLSAgICByZXR1cm4gZmFtaWx5LnN0cmluZygpLmZvbGRDYXNlKCk7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnREZXNjcmlwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMjIsMzYgKzIyLDE4IEBACiAgKgogICovCiAKLSNpZm5kZWYgRm9udERlc2NyaXB0aW9uX2gK
LSNkZWZpbmUgRm9udERlc2NyaXB0aW9uX2gKKyNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ1NT
VmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaCIKICNp
bmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKICNp
bmNsdWRlICJXZWJLaXRGb250RmFtaWx5TmFtZXMuaCIKICNpbmNsdWRlIDx1bmljb2RlL3VzY3Jp
cHQuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgotCi0jaWYgUExBVEZPUk0oQ09D
T0EpCi0jaW5jbHVkZSAiRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5oIgotI2Vsc2UK
LSNpbmNsdWRlICJGb250RmFtaWx5U3BlY2lmaWNhdGlvbk51bGwuaCIKLSNlbmRpZgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLXR5cGVkZWYgRm9udEZhbWls
eVNwZWNpZmljYXRpb25Db3JlVGV4dCBGb250RmFtaWx5UGxhdGZvcm1TcGVjaWZpY2F0aW9uOwot
I2Vsc2UKLXR5cGVkZWYgRm9udEZhbWlseVNwZWNpZmljYXRpb25OdWxsIEZvbnRGYW1pbHlQbGF0
Zm9ybVNwZWNpZmljYXRpb247Ci0jZW5kaWYKIAogI2RlZmluZSBVU0VfUExBVEZPUk1fU1lTVEVN
X0ZBTExCQUNLX0xJU1QgKChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDExMDAwMCkgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMDEzMDApKQogCi10eXBlZGVmIFZhcmlhbnQ8QXRvbWljU3Ry
aW5nLCBGb250RmFtaWx5UGxhdGZvcm1TcGVjaWZpY2F0aW9uPiBGb250RmFtaWx5U3BlY2lmaWNh
dGlvbjsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdEZvbnRG
YW1pbHlOYW1lczsKIApAQCAtMjIzLDEyNSArMjA1LDQgQEAgaW5saW5lIGJvb2wgRm9udERlc2Ny
aXB0aW9uOjpvcGVyYXRvcj09KAogICAgICAgICAmJiBtX3Nob3VsZEFsbG93VXNlckluc3RhbGxl
ZEZvbnRzID09IG90aGVyLm1fc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHM7CiB9CiAKLS8v
IEZJWE1FOiBNb3ZlIHRvIGEgZmlsZSBvZiBpdHMgb3duLgotY2xhc3MgRm9udENhc2NhZGVEZXNj
cmlwdGlvbiA6IHB1YmxpYyBGb250RGVzY3JpcHRpb24gewotcHVibGljOgotICAgIFdFQkNPUkVf
RVhQT1JUIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24oKTsKLQotICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsgfQotCi0gICAgdW5zaWduZWQgZmFtaWx5Q291bnQoKSBjb25zdCB7IHJl
dHVybiBtX2ZhbWlsaWVzLnNpemUoKTsgfQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmlyc3RG
YW1pbHkoKSBjb25zdCB7IHJldHVybiBmYW1pbHlBdCgwKTsgfQotICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5QXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9mYW1pbGllc1tpXTsg
fQotICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxBdG9taWNTdHJpbmc+JiBmYW1pbGllcygpIGNv
bnN0IHsgcmV0dXJuIG1fZmFtaWxpZXM7IH0KLQotICAgIHN0YXRpYyBib29sIGZhbWlseU5hbWVz
QXJlRXF1YWwoY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgQXRvbWljU3RyaW5nJik7Ci0gICAg
c3RhdGljIHVuc2lnbmVkIGZhbWlseU5hbWVIYXNoKGNvbnN0IEF0b21pY1N0cmluZyYpOwotICAg
IHN0YXRpYyBTdHJpbmcgZm9sZGVkRmFtaWx5TmFtZShjb25zdCBBdG9taWNTdHJpbmcmKTsKLQot
ICAgIHVuc2lnbmVkIGVmZmVjdGl2ZUZhbWlseUNvdW50KCkgY29uc3Q7Ci0gICAgRm9udEZhbWls
eVNwZWNpZmljYXRpb24gZWZmZWN0aXZlRmFtaWx5QXQodW5zaWduZWQpIGNvbnN0OwotCi0gICAg
ZmxvYXQgc3BlY2lmaWVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWVkU2l6ZTsgfQot
ICAgIGJvb2wgaXNBYnNvbHV0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2lzQWJzb2x1dGVTaXpl
OyB9Ci0gICAgRm9udFNlbGVjdGlvblZhbHVlIGxpZ2h0ZXJXZWlnaHQoKSBjb25zdCB7IHJldHVy
biBsaWdodGVyV2VpZ2h0KHdlaWdodCgpKTsgfQotICAgIEZvbnRTZWxlY3Rpb25WYWx1ZSBib2xk
ZXJXZWlnaHQoKSBjb25zdCB7IHJldHVybiBib2xkZXJXZWlnaHQod2VpZ2h0KCkpOyB9Ci0gICAg
c3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBsaWdodGVyV2VpZ2h0KEZvbnRTZWxlY3Rpb25WYWx1
ZSk7Ci0gICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBib2xkZXJXZWlnaHQoRm9udFNlbGVj
dGlvblZhbHVlKTsKLQotICAgIC8vIG9ubHkgdXNlIGZpeGVkIGRlZmF1bHQgc2l6ZSB3aGVuIHRo
ZXJlIGlzIG9ubHkgb25lIGZvbnQgZmFtaWx5LCBhbmQgdGhhdCBmYW1pbHkgaXMgIm1vbm9zcGFj
ZSIKLSAgICBib29sIHVzZUZpeGVkRGVmYXVsdFNpemUoKSBjb25zdCB7IHJldHVybiBmYW1pbHlD
b3VudCgpID09IDEgJiYgZmlyc3RGYW1pbHkoKSA9PSBtb25vc3BhY2VGYW1pbHk7IH0KLQotICAg
IEtlcm5pbmcga2VybmluZygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEtlcm5pbmc+KG1f
a2VybmluZyk7IH0KLSAgICB1bnNpZ25lZCBrZXl3b3JkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
a2V5d29yZFNpemU7IH0KLSAgICBDU1NWYWx1ZUlEIGtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIENTU1ZhbHVlSUQgaWRlbnRpZmllciA9IG1fa2V5d29yZFNp
emUgPyBzdGF0aWNfY2FzdDxDU1NWYWx1ZUlEPihDU1NWYWx1ZVh4U21hbGwgKyBtX2tleXdvcmRT
aXplIC0gMSkgOiBDU1NWYWx1ZUludmFsaWQ7Ci0gICAgICAgIEFTU0VSVChpZGVudGlmaWVyID09
IENTU1ZhbHVlSW52YWxpZCB8fCAoaWRlbnRpZmllciA+PSBDU1NWYWx1ZVh4U21hbGwgJiYgaWRl
bnRpZmllciA8PSBDU1NWYWx1ZVdlYmtpdFh4eExhcmdlKSk7Ci0gICAgICAgIHJldHVybiBpZGVu
dGlmaWVyOwotICAgIH0KLSAgICBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFNtb290aGluZ01vZGU+KG1fZm9udFNtb290aGlu
Zyk7IH0KLSAgICBib29sIGlzU3BlY2lmaWVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTcGVj
aWZpZWRGb250OyB9Ci0KLSAgICB2b2lkIHNldE9uZUZhbWlseShjb25zdCBBdG9taWNTdHJpbmcm
IGZhbWlseSkgeyBBU1NFUlQobV9mYW1pbGllcy5zaXplKCkgPT0gMSk7IG1fZmFtaWxpZXNbMF0g
PSBmYW1pbHk7IH0KLSAgICB2b2lkIHNldEZhbWlsaWVzKGNvbnN0IFZlY3RvcjxBdG9taWNTdHJp
bmc+JiBmYW1pbGllcykgeyBtX2ZhbWlsaWVzID0gUmVmQ291bnRlZEFycmF5PEF0b21pY1N0cmlu
Zz4oZmFtaWxpZXMpOyB9Ci0gICAgdm9pZCBzZXRGYW1pbGllcyhjb25zdCBSZWZDb3VudGVkQXJy
YXk8QXRvbWljU3RyaW5nPiYgZmFtaWxpZXMpIHsgbV9mYW1pbGllcyA9IGZhbWlsaWVzOyB9Ci0g
ICAgdm9pZCBzZXRTcGVjaWZpZWRTaXplKGZsb2F0IHMpIHsgbV9zcGVjaWZpZWRTaXplID0gY2xh
bXBUb0Zsb2F0KHMpOyB9Ci0gICAgdm9pZCBzZXRJc0Fic29sdXRlU2l6ZShib29sIHMpIHsgbV9p
c0Fic29sdXRlU2l6ZSA9IHM7IH0KLSAgICB2b2lkIHNldEtlcm5pbmcoS2VybmluZyBrZXJuaW5n
KSB7IG1fa2VybmluZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihrZXJuaW5nKTsgfQotICAgIHZv
aWQgc2V0S2V5d29yZFNpemUodW5zaWduZWQgc2l6ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChz
aXplIDw9IDgpOwotICAgICAgICBtX2tleXdvcmRTaXplID0gc2l6ZTsKLSAgICAgICAgQVNTRVJU
KG1fa2V5d29yZFNpemUgPT0gc2l6ZSk7IC8vIE1ha2Ugc3VyZSBpdCBmaXRzIGluIHRoZSBiaXRm
aWVsZC4KLSAgICB9Ci0gICAgdm9pZCBzZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVyKENTU1Zh
bHVlSUQgaWRlbnRpZmllcikKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghaWRlbnRpZmllciB8fCAo
aWRlbnRpZmllciA+PSBDU1NWYWx1ZVh4U21hbGwgJiYgaWRlbnRpZmllciA8PSBDU1NWYWx1ZVdl
YmtpdFh4eExhcmdlKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoQ1NTVmFsdWVXZWJraXRYeHhM
YXJnZSAtIENTU1ZhbHVlWHhTbWFsbCArIDEgPT0gOCwgIk1heGltdW0ga2V5d29yZCBzaXplIHNo
b3VsZCBiZSA4LiIpOwotICAgICAgICBzZXRLZXl3b3JkU2l6ZShpZGVudGlmaWVyID8gaWRlbnRp
ZmllciAtIENTU1ZhbHVlWHhTbWFsbCArIDEgOiAwKTsKLSAgICB9Ci0gICAgdm9pZCBzZXRGb250
U21vb3RoaW5nKEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZykgeyBtX2ZvbnRTbW9vdGhpbmcg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc21vb3RoaW5nKTsgfQotICAgIHZvaWQgc2V0SXNTcGVj
aWZpZWRGb250KGJvb2wgaXNTcGVjaWZpZWRGb250KSB7IG1faXNTcGVjaWZpZWRGb250ID0gaXNT
cGVjaWZpZWRGb250OyB9Ci0KLSNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQotICAgIGJvb2wg
ZmFtaWxpZXNFcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24mIG90aGVyKSBjb25zdDsKLQotICAgIGJvb2wgZXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25z
dCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBmYW1pbGllc0VxdWFsRm9yVGV4dEF1dG9TaXppbmcob3RoZXIpCi0gICAgICAgICAgICAm
JiBtX3NwZWNpZmllZFNpemUgPT0gb3RoZXIubV9zcGVjaWZpZWRTaXplCi0gICAgICAgICAgICAm
JiB2YXJpYW50U2V0dGluZ3MoKSA9PSBvdGhlci52YXJpYW50U2V0dGluZ3MoKQotICAgICAgICAg
ICAgJiYgbV9pc0Fic29sdXRlU2l6ZSA9PSBvdGhlci5tX2lzQWJzb2x1dGVTaXplOwotICAgIH0K
LSNlbmRpZgotCi0gICAgLy8gSW5pdGlhbCB2YWx1ZXMgZm9yIGZvbnQgcHJvcGVydGllcy4KLSAg
ICBzdGF0aWMgc3RkOjpvcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IGluaXRpYWxJdGFsaWMo
KSB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KLSAgICBzdGF0aWMgRm9udFN0eWxlQXhpcyBpbml0
aWFsRm9udFN0eWxlQXhpcygpIHsgcmV0dXJuIEZvbnRTdHlsZUF4aXM6OnNsbnQ7IH0KLSAgICBz
dGF0aWMgRm9udFNlbGVjdGlvblZhbHVlIGluaXRpYWxXZWlnaHQoKSB7IHJldHVybiBub3JtYWxX
ZWlnaHRWYWx1ZSgpOyB9Ci0gICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBpbml0aWFsU3Ry
ZXRjaCgpIHsgcmV0dXJuIG5vcm1hbFN0cmV0Y2hWYWx1ZSgpOyB9Ci0gICAgc3RhdGljIEZvbnRT
bWFsbENhcHMgaW5pdGlhbFNtYWxsQ2FwcygpIHsgcmV0dXJuIEZvbnRTbWFsbENhcHM6Ok9mZjsg
fQotICAgIHN0YXRpYyBLZXJuaW5nIGluaXRpYWxLZXJuaW5nKCkgeyByZXR1cm4gS2VybmluZzo6
QXV0bzsgfQotICAgIHN0YXRpYyBGb250U21vb3RoaW5nTW9kZSBpbml0aWFsRm9udFNtb290aGlu
ZygpIHsgcmV0dXJuIEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nOyB9Ci0gICAgc3Rh
dGljIFRleHRSZW5kZXJpbmdNb2RlIGluaXRpYWxUZXh0UmVuZGVyaW5nTW9kZSgpIHsgcmV0dXJu
IFRleHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJlbmRlcmluZzsgfQotICAgIHN0YXRpYyBGb250
U3ludGhlc2lzIGluaXRpYWxGb250U3ludGhlc2lzKCkgeyByZXR1cm4gRm9udFN5bnRoZXNpc1dl
aWdodCB8IEZvbnRTeW50aGVzaXNTdHlsZSB8IEZvbnRTeW50aGVzaXNTbWFsbENhcHM7IH0KLSAg
ICBzdGF0aWMgRm9udFZhcmlhbnRQb3NpdGlvbiBpbml0aWFsVmFyaWFudFBvc2l0aW9uKCkgeyBy
ZXR1cm4gRm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsOyB9Ci0gICAgc3RhdGljIEZvbnRWYXJp
YW50Q2FwcyBpbml0aWFsVmFyaWFudENhcHMoKSB7IHJldHVybiBGb250VmFyaWFudENhcHM6Ok5v
cm1hbDsgfQotICAgIHN0YXRpYyBGb250VmFyaWFudEFsdGVybmF0ZXMgaW5pdGlhbFZhcmlhbnRB
bHRlcm5hdGVzKCkgeyByZXR1cm4gRm9udFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWw7IH0KLSAg
ICBzdGF0aWMgRm9udE9wdGljYWxTaXppbmcgaW5pdGlhbE9wdGljYWxTaXppbmcoKSB7IHJldHVy
biBGb250T3B0aWNhbFNpemluZzo6RW5hYmxlZDsgfQotICAgIHN0YXRpYyBjb25zdCBBdG9taWNT
dHJpbmcmIGluaXRpYWxMb2NhbGUoKSB7IHJldHVybiBudWxsQXRvbSgpOyB9Ci0KLXByaXZhdGU6
Ci0gICAgUmVmQ291bnRlZEFycmF5PEF0b21pY1N0cmluZz4gbV9mYW1pbGllcyB7IDEgfTsKLQot
ICAgIGZsb2F0IG1fc3BlY2lmaWVkU2l6ZSB7IDAgfTsgICAvLyBTcGVjaWZpZWQgQ1NTIHZhbHVl
LiBJbmRlcGVuZGVudCBvZiByZW5kZXJpbmcgaXNzdWVzIHN1Y2ggYXMgaW50ZWdlcgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyByb3VuZGluZywgbWluaW11bSBmb250IHNpemVzLCBh
bmQgem9vbWluZy4KLSAgICB1bnNpZ25lZCBtX2lzQWJzb2x1dGVTaXplIDogMTsgLy8gV2hldGhl
ciBvciBub3QgQ1NTIHNwZWNpZmllZCBhbiBleHBsaWNpdCBzaXplCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gKGxvZ2ljYWwgc2l6ZXMgbGlrZSAibWVkaXVtIiBkb24ndCBj
b3VudCkuCi0gICAgdW5zaWduZWQgbV9rZXJuaW5nIDogMjsgLy8gS2VybmluZwotCi0gICAgdW5z
aWduZWQgbV9rZXl3b3JkU2l6ZSA6IDQ7IC8vIFdlIGNhY2hlIHdoZXRoZXIgb3Igbm90IGEgZm9u
dCBpcyBjdXJyZW50bHkgcmVwcmVzZW50ZWQgYnkgYSBDU1Mga2V5d29yZCAoZS5nLiwgbWVkaXVt
KS4gIElmIHNvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiB3ZSBjYW4gYWNj
dXJhdGVseSB0cmFuc2xhdGUgYWNyb3NzIGRpZmZlcmVudCBnZW5lcmljIGZhbWlsaWVzIHRvIGFk
anVzdCBmb3IgZGlmZmVyZW50IHByZWZlcmVuY2Ugc2V0dGluZ3MKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIChlLmcuLCAxM3B4IG1vbm9zcGFjZSB2cy4gMTZweCBldmVyeXRoaW5nIGVs
c2UpLiAgU2l6ZXMgYXJlIDEtOCAobGlrZSB0aGUgSFRNTCBzaXplIHZhbHVlcyBmb3IgPGZvbnQ+
KS4KLQotICAgIHVuc2lnbmVkIG1fZm9udFNtb290aGluZyA6IDI7IC8vIEZvbnRTbW9vdGhpbmdN
b2RlCi0gICAgdW5zaWduZWQgbV9pc1NwZWNpZmllZEZvbnQgOiAxOyAvLyBUcnVlIGlmIGEgd2Vi
IHBhZ2Ugc3BlY2lmaWVzIGEgbm9uLWdlbmVyaWMgZm9udCBmYW1pbHkgYXMgdGhlIGZpcnN0IGZv
bnQgZmFtaWx5LgotfTsKLQotaW5saW5lIGJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6b3Bl
cmF0b3I9PShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKLXsKLSAg
ICByZXR1cm4gRm9udERlc2NyaXB0aW9uOjpvcGVyYXRvcj09KG90aGVyKQotICAgICAgICAmJiBt
X2ZhbWlsaWVzID09IG90aGVyLm1fZmFtaWxpZXMKLSAgICAgICAgJiYgbV9zcGVjaWZpZWRTaXpl
ID09IG90aGVyLm1fc3BlY2lmaWVkU2l6ZQotICAgICAgICAmJiBtX2lzQWJzb2x1dGVTaXplID09
IG90aGVyLm1faXNBYnNvbHV0ZVNpemUKLSAgICAgICAgJiYgbV9rZXJuaW5nID09IG90aGVyLm1f
a2VybmluZwotICAgICAgICAmJiBtX2tleXdvcmRTaXplID09IG90aGVyLm1fa2V5d29yZFNpemUK
LSAgICAgICAgJiYgbV9mb250U21vb3RoaW5nID09IG90aGVyLm1fZm9udFNtb290aGluZwotICAg
ICAgICAmJiBtX2lzU3BlY2lmaWVkRm9udCA9PSBvdGhlci5tX2lzU3BlY2lmaWVkRm9udDsKLX0K
LQogfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlck1hYy5jcHAJKHJldmlzaW9uIDIzNjkxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKICNpbmNsdWRlICJTY3JlZW5EaXNwbGF5Q2FwdHVyZVNv
dXJjZU1hYy5oIgorI2luY2x1ZGUgIldpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgiCiAj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9u
IDIzNjkxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiQ291bnRlckRpcmVj
dGl2ZXMuaCIKICNpbmNsdWRlICJEYXRhUmVmLmgiCiAjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9u
cy5oIgotI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRl
RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJHYXBMZW5ndGguaCIKICNpbmNsdWRlICJHcmFwaGlj
c1R5cGVzLmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvRm9udENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMjM2OTExKQorKysg
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0ZvbnRDYWNoZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0ZvbnRDYWNoZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRm9udENhc2NhZGVEZXNj
cmlwdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRm9udFBsYXRmb3JtRGF0YS5oPgogI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>