<?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>23257</bug_id>
          
          <creation_ts>2009-01-12 12:10:00 -0800</creation_ts>
          <short_desc>Add the first pieces of platform/graphics/chromium</short_desc>
          <delta_ts>2009-01-14 14:35:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>105352</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-12 12:10:00 -0800</bug_when>
    <thetext>Add the first pieces of platform/graphics/chromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105357</commentid>
    <comment_count>1</comment_count>
      <attachid>26643</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-12 12:14:13 -0800</bug_when>
    <thetext>Created attachment 26643
Add the first pieces of platform/graphics/chromium

 WebCore/ChangeLog                                  |   48 ++
 .../platform/graphics/chromium/ColorChromium.cpp   |   62 ++
 .../graphics/chromium/FontCacheChromiumWin.cpp     |  624 ++++++++++++++++++++
 .../platform/graphics/chromium/FontCacheLinux.cpp  |  179 ++++++
 .../platform/graphics/chromium/FontChromiumWin.cpp |  328 ++++++++++
 5 files changed, 1241 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105798</commentid>
    <comment_count>2</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-01-14 14:35:33 -0800</bug_when>
    <thetext>Committed in http://trac.webkit.org/changeset/39830</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26643</attachid>
            <date>2009-01-12 12:14:13 -0800</date>
            <delta_ts>2009-01-12 12:14:13 -0800</delta_ts>
            <desc>Add the first pieces of platform/graphics/chromium</desc>
            <filename>Add-the-first-pieces-of-platform-graphics-chromium.patch</filename>
            <type>text/plain</type>
            <size>52598</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">Y2Q5ZWNiN2YyNDQ2YzY1ZWE1Mjk5NDQ5Zjg4ZjYxNTQ1MzhhMzEwOQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkOTljYWQxLi4wY2ZjMTEx
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDUxIEBACisyMDA5LTAxLTEyICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAg
ICAgQWRkIHRoZSBmaXJzdCBwaWVjZXMgb2YgcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjU3CisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db2xvckNocm9taXVtLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpmb2N1c1JpbmdDb2xvcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNv
cmU6OmlzU3RyaW5nQVNDSUkpOgorICAgICAgICAoV2ViQ29yZTo6TG9va3VwQWx0TmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250Q29kZXBhZ2U6Oik6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q29kZXBhZ2U6OmlmKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZvbnRJbmRpcmVjdEFuZEdl
dFdpbk5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udENvbnRhaW5zQ2hhcmFjdGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udCk6CisgICAg
ICAgIChXZWJDb3JlOjp0b0dESUZvbnRXZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpnZXRHZW5lcmljRm9udEZvclNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxsTG9n
Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmZvbnRFeGlzdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6VHJhaXRzSW5GYW1pbHlQcm9jRGF0YTo6VHJhaXRzSW5GYW1pbHlQcm9jRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjp0cmFpdHNJbkZhbWlseUVudW1Qcm9jKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjphbHRlcm5hdGVGYW1pbHlOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpj
cmVhdGVGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0
R2VuZXJpY0ZvbnRGb3JTY3JpcHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6d2luZG93
c0NhbkhhbmRsZVRleHREcmF3aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnNraWFEcmF3VGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpQYWludFNraWFUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c2VsZWN0aW9uUmVjdEZv
ckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dCk6CisK
IDIwMDktMDEtMTIgIEFkYW0gVHJlYXQgIDxhZGFtLnRyZWF0QHRvcmNobW9iaWxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBHZW9yZ2UgU3RhaWtvcy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29sb3JDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbG9yQ2hyb21pdW0uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2Y2ExN2QKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbG9yQ2hyb21pdW0uY3BwCkBAIC0wLDAgKzEs
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbG9yLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ29sb3IgZm9jdXNSaW5nQ29sb3IoKQoreworLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGJlIHNwbGl0IHVwIHRvIENvbG9yQ2hyb21pdW1XaW4gYW5kIENv
bG9yQ2hyb21pdW1NYWMuCisjaWYgUExBVEZPUk0oREFSV0lOKQorICAgIC8vIFRvIGF2b2lkIHRo
ZSBNYWMgQ2hyb21pdW0gYnVpbGQgaGF2aW5nIHRvIHJlYmFzbGluZSA1MDArIGxheW91dCB0ZXN0
cyBhbmQKKyAgICAvLyBjb250aW51ZSB0byBkbyB0aGlzIHcvIG5ldyB0ZXN0cyB0aGF0IGdldCBs
YW5kZWQgaW4gV2ViS2l0LCB3ZSB3YW50IHRvCisgICAgLy8gcnVuIHRoZSBsYXlvdXQgdGVzdHMg
dy8gdGhlIHNhbWUgY29sb3IgdGhhdCBzdG9jayBXZWJLaXQgdXNlcy4KKyAgICAvLyAKKyAgICAv
LyBUT0RPOiBGb3Igbm93IHdlJ3ZlIGhhcmQgY29kZWQgdGhlIGNvbG9yIHRoYXQgV2ViS2l0IHVz
ZXMgZm9yIGxheW91dAorICAgIC8vIHRlc3RzLiAgV2UgbmVlZCB0byByZXZpc2l0IHRoaXMgYW5k
IGRvIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nOgorICAgIC8vICBBLiBGdWxseSBob25vciB0aGUg
Y29sb3IgZnJvbSB0aGUgVUksIHdoaWNoIG1lYW5zIGNvbGxlY3RpbmcgdGhlIGNvbG9yCisgICAg
Ly8gICAgIChhbmQgY2hhbmdlIG5vdGlmaWNhdGlvbnMpIGluIHRoZSBicm93c2VyIHByb2Nlc3Ms
IGFuZCBtZXNzYWdpbmcgdGhlCisgICAgLy8gICAgIGNvbG9yIHRvIHRoZSByZW5kZXIgcHJvY2Vz
cy4KKyAgICAvLyAgQi4gQWRkaW5nIGEgImxheW91dCB0ZXN0cyIgZmxhZywgdG8gY29udHJvbCB0
aGUgb3JhZ2UgdnMuIGJsdWUgY29sb3JzCisgICAgLy8gICAgIGRlcGVuZGluZyBpZiB3ZSdyZSBy
dW5uaW5nIGxheW91dCB0ZXN0cy4KKyAgICAvLyBUbyBzZWUgdGhlIFdlYktpdCBpbXBsZW1lbnRh
dGlvbiBvZiB1c2luZyB0aGUgVUkgY29sb3IgYW5kL29yIGEgZmxhZyBmb3IKKyAgICAvLyBsYXlv
dXQgdGVzdHMgc2VlIFdlYktpdC9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1h
Yy5tbS4KKyAgICAvLyAoUmVhbGl0eSBpcyB3ZSBqdXN0IG5lZWQgYW4gYXBpIHRvIG92ZXJyaWRl
IHRoZSBmb2N1cyBjb2xvciBhbmQgYm90aAorICAgIC8vIG9mIHRoZSBhYm92ZSBhcmUgY292ZXJl
ZCBmb3Igd2hhdCB0aGlzIGZpbGUgbmVlZHMgdG8gcHJvdmlkZSwgdGhlCisgICAgLy8gdHdvIG9w
dGlvbnMgd291bGQgYmUgZGV0YWlscyB0aGF0IGhhcHBlbiBpbiBvdGhlciBwbGFjZXMuKQorCisg
ICAgLy8gRnJvbSBXZWJLaXQ6CisgICAgLy8gc3RhdGljIFJHQkEzMiBvbGRBcXVhRm9jdXNSaW5n
Q29sb3JSR0JBID0gMHhGRjdEQUREOTsKKyAgICBzdGF0aWMgQ29sb3Igb2xkQXF1YUZvY3VzUmlu
Z0NvbG9yKDB4N0QsIDB4QUQsIDB4RDksIDB4RkYpOworICAgIHJldHVybiBvbGRBcXVhRm9jdXNS
aW5nQ29sb3I7CisjZWxzZQorICAgIHN0YXRpYyBDb2xvciBmb2N1c1JpbmdDb2xvcigyMjksIDE1
MSwgMCwgMjU1KTsKKyAgICByZXR1cm4gZm9jdXNSaW5nQ29sb3I7CisjZW5kaWYKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5mN2U1MTY1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAKQEAgLTAs
MCArMSw2MjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
b250Q2FjaGUuaCIKKworI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiRm9u
dC5oIgorI2luY2x1ZGUgIkZvbnRVdGlsc0Nocm9taXVtV2luLmgiCisjaW5jbHVkZSAiSGFzaE1h
cC5oIgorI2luY2x1ZGUgIkhhc2hTZXQuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgor
I2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlIDx1bmljb2RlL3VuaXNldC5oPgorCisj
aW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPG9iamlkbC5oPgorI2luY2x1ZGUgPG1sYW5n
Lmg+CisKK3VzaW5nIHN0ZDo6bWluOworCituYW1lc3BhY2UgV2ViQ29yZQoreworCit2b2lkIEZv
bnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICAvLyBOb3QgbmVlZGVkIG9uIFdpbmRvd3Mu
Cit9CisKKy8vIEZJWE1FOiBjb25zaWRlciBhZGRpbmcgdG8gV2ViS2l0IFN0cmluZyBjbGFzcwor
c3RhdGljIGJvb2wgY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKGNvbnN0IFN0cmluZyYgcykKK3sKKyAg
ICByZXR1cm4gY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHMuY2hhcmFjdGVycygpLCBzLmxlbmd0aCgp
KTsKK30KKworLy8gV2hlbiBhc2tlZCBmb3IgYSBDSksgZm9udCB3aXRoIGEgbmF0aXZlIG5hbWUg
dW5kZXIgYSBub24tQ0pLIGxvY2FsZSBvcgorLy8gYXNrZWQgZm9yIGEgQ0pLIGZvbnQgd2l0aCBh
IFJvbWFuaXplZCBuYW1lIHVuZGVyIGEgQ0pLIGxvY2FsZSwKKy8vIHxHZXRUZXh0RmFjZXwgKGFm
dGVyIHxDcmVhdGVGb250KnwpIHJldHVybnMgYSAnYm9ndXMnIHZhbHVlIChlLmcuIEFyaWFsKS4K
Ky8vIFRoaXMgaXMgbm90IGNvbnNpc3RlbnQgd2l0aCB3aGF0IE1TRE4gc2F5cyAhIQorLy8gVGhl
cmVmb3JlLCBiZWZvcmUgd2UgY2FsbCB8Q3JlYXRlRm9udCp8LCB3ZSBoYXZlIHRvIG1hcCBhIFJv
bWFuaXplZCBuYW1lIHRvIAorLy8gdGhlIGNvcnJlc3BvbmRpbmcgbmF0aXZlIG5hbWUgdW5kZXIg
YSBDSksgbG9jYWxlIGFuZCB2aWNlIHZlcnNhIAorLy8gdW5kZXIgYSBub24tQ0pLIGxvY2FsZS4K
Ky8vIFNlZSB0aGUgY29ycmVzcG9uZGluZyBnZWNrbyBidWdzIGF0IAorLy8gaHR0cHM6Ly9idWd6
aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzczOTUyCisvLyBodHRwczovL2J1Z3pp
bGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzE0MjYKK3N0YXRpYyBib29sIExvb2t1
cEFsdE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGFsdE5hbWUpCit7CisgICAgc3Ry
dWN0IEZvbnRDb2RlcGFnZSB7CisgICAgICAgIFdDSEFSKiBuYW1lOworICAgICAgICBpbnQgY29k
ZVBhZ2U7CisgICAgfTsKKworICAgIHN0cnVjdCBOYW1lUGFpciB7CisgICAgICAgIFdDSEFSKiBu
YW1lOworICAgICAgICBGb250Q29kZXBhZ2UgYWx0TmFtZUNvZGVwYWdlOworICAgIH07CisKKyAg
ICBjb25zdCBpbnQgamFwYW5lc2VDb2RlcGFnZSA9IDkzMjsKKyAgICBjb25zdCBpbnQgc2ltcGxp
ZmllZENoaW5lc2VDb2RlcGFnZSA9IDkzNjsKKyAgICBjb25zdCBpbnQga29yZWFuQ29kZXBhZ2Ug
PSA5NDk7CisgICAgY29uc3QgaW50IHRyYWRpdGlvbmFsQ2hpbmVzZUNvZGVwYWdlID0gOTUwOwor
CisgICAgLy8gRklYTUUoanVuZ3NoaWspIDogVGhpcyBsaXN0IHByb2JhYmx5IGNvdmVycyA5OSUg
b2YgY2FzZXMuCisgICAgLy8gVG8gY292ZXIgdGhlIHJlbWFpbmluZyAxJSBhbmQgY3V0IGRvd24g
dGhlIGZpbGUgc2l6ZSwKKyAgICAvLyBjb25zaWRlciBhY2Nlc3NpbmcgJ05BTUUnIHRhYmxlIG9m
IGEgdHJ1ZXR5cGUgZm9udAorICAgIC8vIHVzaW5nIHxHZXRGb250RGF0YXwgYW5kIGNhY2hpbmcg
dGhlIG1hcHBpbmcuCisgICAgLy8gSW4gdGhlIHRhYmxlIGJlbG93LCB0aGUgQVNDSUkga2V5cyBh
cmUgYWxsIGxvd2VyLWNhc2VkIGZvcgorICAgIC8vIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2hpbmcu
CisgICAgc3RhdGljIGNvbnN0IE5hbWVQYWlyIG5hbWVQYWlyc1tdID0geworICAgICAgICAvLyDv
vK3vvLMg77yw44K044K344OD44KvLCBNUyBQR290aGljCisgICAgICAgIHtMIlx4RkYyRFx4RkYz
MyBceEZGMzBceDMwQjRceDMwQjdceDMwQzNceDMwQUYiLCB7TCJNUyBQR290aGljIiwgamFwYW5l
c2VDb2RlcGFnZX19LAorICAgICAgICB7TCJtcyBwZ290aGljIiwge0wiXHhGRjJEXHhGRjMzIFx4
RkYzMFx4MzBCNFx4MzBCN1x4MzBDM1x4MzBBRiIsIGphcGFuZXNlQ29kZXBhZ2V9fSwKKyAgICAg
ICAgLy8g77yt77yzIO+8sOaYjuacnSwgTVMgUE1pbmNobworICAgICAgICB7TCJceEZGMkRceEZG
MzMgXHhGRjMwXHg2NjBFXHg2NzFEIiwge0wiTVMgUE1pbmNobyIsIGphcGFuZXNlQ29kZXBhZ2V9
fSwKKyAgICAgICAge0wibXMgcG1pbmNobyIsIHtMIlx4RkYyRFx4RkYzMyBceEZGMzBceDY2MEVc
eDY3MUQiLCBqYXBhbmVzZUNvZGVwYWdlfX0sCisgICAgICAgIC8vIO+8re+8s+OCtOOCt+ODg+OC
rywgTVMgR290aGljCisgICAgICAgIHtMIlx4RkYyRFx4RkYzMyBceDMwQjRceDMwQjdceDMwQzNc
eDMwQUYiLCB7TCJNUyBHb3RoaWMiLCBqYXBhbmVzZUNvZGVwYWdlfX0sCisgICAgICAgIHtMIm1z
IGdvdGhpYyIsIHtMIlx4RkYyRFx4RkYzMyBceDMwQjRceDMwQjdceDMwQzNceDMwQUYiLCBqYXBh
bmVzZUNvZGVwYWdlfX0sCisgICAgICAgIC8vIO+8re+8syDmmI7mnJ0sIE1TIE1pbmNobworICAg
ICAgICB7TCJceEZGMkRceEZGMzMgXHg2NjBFXHg2NzFEIiwge0wiTVMgTWluY2hvIiwgamFwYW5l
c2VDb2RlcGFnZX19LAorICAgICAgICB7TCJtcyBtaW5jaG8iLCB7TCJceEZGMkRceEZGMzMgXHg2
NjBFXHg2NzFEIiwgamFwYW5lc2VDb2RlcGFnZX19LAorICAgICAgICAvLyDjg6HjgqTjg6rjgqos
IE1laXJ5bworICAgICAgICB7TCJceDMwRTFceDMwQTRceDMwRUFceDMwQUEiLCB7TCJNZWlyeW8i
LCBqYXBhbmVzZUNvZGVwYWdlfX0sCisgICAgICAgIHtMIm1laXJ5byIsIHtMIlx4MzBFMVx4MzBB
NFx4MzBFQVx4MzBBQSIsIGphcGFuZXNlQ29kZXBhZ2V9fSwKKyAgICAgICAgLy8g67CU7YOVLCBC
YXRhbmcKKyAgICAgICAge0wiXHhCQzE0XHhEMEQ1Iiwge0wiQmF0YW5nIiwga29yZWFuQ29kZXBh
Z2V9fSwKKyAgICAgICAge0wiYmF0YW5nIiwge0wiXHhCQzE0XHhEMEQ1Iiwga29yZWFuQ29kZXBh
Z2V9fSwKKyAgICAgICAgLy8g67CU7YOV7LK0LCBCYXRhbmdjaGUKKyAgICAgICAge0wiXHhCQzE0
XHhEMEQ1XHhDQ0I0Iiwge0wiQmF0YW5nY2hlIiwga29yZWFuQ29kZXBhZ2V9fSwKKyAgICAgICAg
e0wiYmF0YW5nY2hlIiwge0wiXHhCQzE0XHhEMEQ1XHhDQ0I0Iiwga29yZWFuQ29kZXBhZ2V9fSwK
KyAgICAgICAgLy8g6rW066a8LCBHdWxpbQorICAgICAgICB7TCJceEFENzRceEI5QkMiLCB7TCJH
dWxpbSIsIGtvcmVhbkNvZGVwYWdlfX0sCisgICAgICAgIHtMImd1bGltIiwge0wiXHhBRDc0XHhC
OUJDIiwga29yZWFuQ29kZXBhZ2V9fSwKKyAgICAgICAgLy8g6rW066a87LK0LCBHdWxpbWNoZQor
ICAgICAgICB7TCJceEFENzRceEI5QkNceENDQjQiLCB7TCJHdWxpbWNoZSIsIGtvcmVhbkNvZGVw
YWdlfX0sCisgICAgICAgIHtMImd1bGltY2hlIiwge0wiXHhBRDc0XHhCOUJDXHhDQ0I0Iiwga29y
ZWFuQ29kZXBhZ2V9fSwKKyAgICAgICAgLy8g64+L7JuALCBEb3R1bQorICAgICAgICB7TCJceEIz
Q0JceEM2QzAiLCB7TCJEb3R1bSIsIGtvcmVhbkNvZGVwYWdlfX0sCisgICAgICAgIHtMImRvdHVt
Iiwge0wiXHhCM0NCXHhDNkMwIiwga29yZWFuQ29kZXBhZ2V9fSwKKyAgICAgICAgLy8g64+L7JuA
7LK0LCBEb3R1bWNoZQorICAgICAgICB7TCJceEIzQ0JceEM2QzBceENDQjQiLCB7TCJEb3R1bWNo
ZSIsIGtvcmVhbkNvZGVwYWdlfX0sCisgICAgICAgIHtMImRvdHVtY2hlIiwge0wiXHhCM0NCXHhD
NkMwXHhDQ0I0Iiwga29yZWFuQ29kZXBhZ2V9fSwKKyAgICAgICAgLy8g6raB7IScLCBHdW5nc3Vo
CisgICAgICAgIHtMIlx4QUQ4MVx4QzExQyIsIHtMIkd1bmdzdWgiLCBrb3JlYW5Db2RlcGFnZX19
LAorICAgICAgICB7TCJndW5nc3VoIiwge0wiXHhBRDgxXHhDMTFDIiwga29yZWFuQ29kZXBhZ2V9
fSwKKyAgICAgICAgLy8g6raB7ISc7LK0LCBHdW5nc3VoY2hlCisgICAgICAgIHtMIlx4QUQ4MVx4
QzExQ1x4Q0NCNCIsIHtMIkd1bmdzdWhjaGUiLCBrb3JlYW5Db2RlcGFnZX19LAorICAgICAgICB7
TCJndW5nc3VoY2hlIiwge0wiXHhBRDgxXHhDMTFDXHhDQ0I0Iiwga29yZWFuQ29kZXBhZ2V9fSwK
KyAgICAgICAgLy8g66eR7J2AIOqzoOuUlSwgTWFsZ3VuIEdvdGhpYworICAgICAgICB7TCJceEI5
RDFceEM3NDAgXHhBQ0UwXHhCNTE1Iiwge0wiTWFsZ3VuIEdvdGhpYyIsIGtvcmVhbkNvZGVwYWdl
fX0sCisgICAgICAgIHtMIm1hbGd1biBnb3RoaWMiLCB7TCJceEI5RDFceEM3NDAgXHhBQ0UwXHhC
NTE1Iiwga29yZWFuQ29kZXBhZ2V9fSwKKyAgICAgICAgLy8g5a6L5L2TLCBTaW1TdW4KKyAgICAg
ICAge0wiXHg1QjhCXHg0RjUzIiwge0wiU2ltU3VuIiwgc2ltcGxpZmllZENoaW5lc2VDb2RlcGFn
ZX19LAorICAgICAgICB7TCJzaW1zdW4iLCB7TCJceDVCOEJceDRGNTMiLCBzaW1wbGlmaWVkQ2hp
bmVzZUNvZGVwYWdlfX0sCisgICAgICAgIC8vIOm7keS9kywgU2ltSGVpCisgICAgICAgIHtMIlx4
OUVEMVx4NEY1MyIsIHtMIlNpbUhlaSIsIHNpbXBsaWZpZWRDaGluZXNlQ29kZXBhZ2V9fSwKKyAg
ICAgICAge0wic2ltaGVpIiwge0wiXHg5RUQxXHg0RjUzIiwgc2ltcGxpZmllZENoaW5lc2VDb2Rl
cGFnZX19LAorICAgICAgICAvLyDmlrDlrovkvZMsIE5TaW1TdW4KKyAgICAgICAge0wiXHg2NUIw
XHg1QjhCXHg0RjUzIiwge0wiTlNpbVN1biIsIHNpbXBsaWZpZWRDaGluZXNlQ29kZXBhZ2V9fSwK
KyAgICAgICAge0wibnNpbXN1biIsIHtMIlx4NjVCMFx4NUI4Qlx4NEY1MyIsIHNpbXBsaWZpZWRD
aGluZXNlQ29kZXBhZ2V9fSwKKyAgICAgICAgLy8g5b6u6L2v6ZuF6buRLCBNaWNyb3NvZnQgWWFo
ZWkKKyAgICAgICAge0wiXHg1RkFFXHg4RjZGXHg5NkM1XHg5RUQxIiwge0wiTWljcm9zb2Z0IFlh
aGVpIiwgc2ltcGxpZmllZENoaW5lc2VDb2RlcGFnZX19LAorICAgICAgICB7TCJtaWNyb3NvZnQg
eWFoZWkiLCB7TCJceDVGQUVceDhGNkZceDk2QzVceDlFRDEiLCBzaW1wbGlmaWVkQ2hpbmVzZUNv
ZGVwYWdlfX0sCisgICAgICAgIC8vIOS7v+WuiywgRmFuZ1NvbmcKKyAgICAgICAge0wiXHg0RUZG
XHg1QjhCIiwgIHtMIkZhbmdTb25nIiwgc2ltcGxpZmllZENoaW5lc2VDb2RlcGFnZX19LAorICAg
ICAgICB7TCJmYW5nc29uZyIsIHtMIlx4NEVGRlx4NUI4QiIsIHNpbXBsaWZpZWRDaGluZXNlQ29k
ZXBhZ2V9fSwKKyAgICAgICAgLy8g5qW35L2TLCBLYWlUaQorICAgICAgICB7TCJceDY5NzdceDRG
NTMiLCB7TCJLYWlUaSIsIHNpbXBsaWZpZWRDaGluZXNlQ29kZXBhZ2V9fSwKKyAgICAgICAge0wi
a2FpdGkiLCB7TCJceDY5NzdceDRGNTMiLCBzaW1wbGlmaWVkQ2hpbmVzZUNvZGVwYWdlfX0sCisg
ICAgICAgIC8vIOS7v+Wui19HQjIzMTIsIEZhbmdTb25nX0dCMjMxMgorICAgICAgICB7TCJceDRF
RkZceDVCOEJfR0IyMzEyIiwgIHtMIkZhbmdTb25nX0dCMjMxMiIsIHNpbXBsaWZpZWRDaGluZXNl
Q29kZXBhZ2V9fSwKKyAgICAgICAge0wiZmFuZ3NvbmdfZ2IyMzEyIiwge0wiXHg0RUZGXHg1QjhC
X2diMjMxMiIsIHNpbXBsaWZpZWRDaGluZXNlQ29kZXBhZ2V9fSwKKyAgICAgICAgLy8g5qW35L2T
X0dCMjMxMiwgS2FpVGlfR0IyMzEyCisgICAgICAgIHtMIlx4Njk3N1x4NEY1MyIsIHtMIkthaVRp
X0dCMjMxMiIsIHNpbXBsaWZpZWRDaGluZXNlQ29kZXBhZ2V9fSwKKyAgICAgICAge0wia2FpdGlf
Z2IyMzEyIiwge0wiXHg2OTc3XHg0RjUzX2diMjMxMiIsIHNpbXBsaWZpZWRDaGluZXNlQ29kZXBh
Z2V9fSwKKyAgICAgICAgLy8g5paw57Sw5piO6auULCBQTWluZ0xpdQorICAgICAgICB7TCJceDY1
QjBceDdEMzBceDY2MEVceDlBRDQiLCB7TCJQTWluZ0xpdSIsIHRyYWRpdGlvbmFsQ2hpbmVzZUNv
ZGVwYWdlfX0sCisgICAgICAgIHtMInBtaW5nbGl1Iiwge0wiXHg2NUIwXHg3RDMwXHg2NjBFXHg5
QUQ0IiwgdHJhZGl0aW9uYWxDaGluZXNlQ29kZXBhZ2V9fSwKKyAgICAgICAgLy8g57Sw5piO6auU
LCBNaW5nTGl1CisgICAgICAgIHtMIlx4N0QzMFx4NjYwRVx4OUFENCIsIHtMIk1pbmdMaXUiLCB0
cmFkaXRpb25hbENoaW5lc2VDb2RlcGFnZX19LAorICAgICAgICB7TCJtaW5nbGl1Iiwge0wiXHg3
RDMwXHg2NjBFXHg5QUQ0IiwgdHJhZGl0aW9uYWxDaGluZXNlQ29kZXBhZ2V9fSwKKyAgICAgICAg
Ly8g5b6u6Luf5q2j6buR6auULCBNaWNyb3NvZnQgSmhlbmdIZWkKKyAgICAgICAge0wiXHg1RkFF
XHg4RURGXHg2QjYzXHg5RUQxXHg5QUQ0Iiwge0wiTWljcm9zb2Z0IEpoZW5nSGVpIiwgdHJhZGl0
aW9uYWxDaGluZXNlQ29kZXBhZ2V9fSwKKyAgICAgICAge0wibWljcm9zb2Z0IGpoZW5nSGVpIiwg
e0wiXHg1RkFFXHg4RURGXHg2QjYzXHg5RUQxXHg5QUQ0IiwgdHJhZGl0aW9uYWxDaGluZXNlQ29k
ZXBhZ2V9fSwKKyAgICAgICAgLy8g5qiZ5qW36auULCBERkthaS1TQgorICAgICAgICB7TCJceDZB
MTlceDY5NzdceDlBRDQiLCB7TCJERkthaS1TQiIsIHRyYWRpdGlvbmFsQ2hpbmVzZUNvZGVwYWdl
fX0sCisgICAgICAgIHtMImRma2FpLXNiIiwge0wiXHg2QTE5XHg2OTc3XHg5QUQ0IiwgdHJhZGl0
aW9uYWxDaGluZXNlQ29kZXBhZ2V9fSwKKyAgICAgICAgLy8gV2VuUXVhbllpIFplbiBIZWkKKyAg
ICAgICAge0wiXHg2NTg3XHg2Y2M5XHg5YTViXHg2YjYzXHg5ZWQxIiwge0wiV2VuUXVhbllpIFpl
biBIZWkiLCB0cmFkaXRpb25hbENoaW5lc2VDb2RlcGFnZX19LAorICAgICAgICB7TCJ3ZW5xdWFu
eWkgemVuIGhlaSIsIHtMIlx4NjU4N1x4NmNjOVx4OWE1Ylx4NmI2M1x4OWVkMSIsIHRyYWRpdGlv
bmFsQ2hpbmVzZUNvZGVwYWdlfX0sCisgICAgICAgIC8vIFdlblF1YW5ZaSBaZW4gSGVpCisgICAg
ICAgIHtMIlx4NjU4N1x4NmNjOVx4OWE3Zlx4NmI2M1x4OWVkMSIsIHtMIldlblF1YW5ZaSBaZW4g
SGVpIiwgc2ltcGxpZmllZENoaW5lc2VDb2RlcGFnZX19LAorICAgICAgICB7TCJ3ZW5xdWFueWkg
emVuIGhlaSIsIHtMIlx4NjU4N1x4NmNjOVx4OWE3Zlx4NmI2M1x4OWVkMSIsIHNpbXBsaWZpZWRD
aGluZXNlQ29kZXBhZ2V9fSwKKyAgICAgICAgLy8gQVIgUEwgU2hhbkhlaVN1biBVbmksCisgICAg
ICAgIHtMIlx4NjU4N1x4OWYwZVx4MDA1MFx4MDA0Y1x4N2QzMFx4NGUwYVx4NmQ3N1x4NWI4Ylx4
MDA1NVx4MDA2ZVx4MDA2OSIsCisgICAgICAgICB7TCJBUiBQTCBTaGFuSGVpU3VuIFVuaSIsIHRy
YWRpdGlvbmFsQ2hpbmVzZUNvZGVwYWdlfX0sCisgICAgICAgIHtMImFyIHBsIHNoYW5oZWlzdW4g
dW5pIiwKKyAgICAgICAgIHtMIlx4NjU4N1x4OWYwZVx4MDA1MFx4MDA0Y1x4N2QzMFx4NGUwYVx4
NmQ3N1x4NWI4Ylx4MDA1NVx4MDA2ZVx4MDA2OSIsIHRyYWRpdGlvbmFsQ2hpbmVzZUNvZGVwYWdl
fX0sCisgICAgICAgIC8vIEFSIFBMIFNoYW5IZWlTdW4gVW5pLAorICAgICAgICB7TCJceDY1ODdc
eDlmMGVceDAwNTBceDAwNGNceDdlYzZceDRlMGFceDZkNzdceDViOGJceDAwNTVceDAwNmVceDAw
NjkiLAorICAgICAgICAge0wiQVIgUEwgU2hhbkhlaVN1biBVbmkiLCBzaW1wbGlmaWVkQ2hpbmVz
ZUNvZGVwYWdlfX0sCisgICAgICAgIHtMImFyIHBsIHNoYW5oZWlzdW4gdW5pIiwKKyAgICAgICAg
IHtMIlx4NjU4N1x4OWYwZVx4MDA1MFx4MDA0Y1x4N2VjNlx4NGUwYVx4NmQ3N1x4NWI4Ylx4MDA1
NVx4MDA2ZVx4MDA2OSIsIHNpbXBsaWZpZWRDaGluZXNlQ29kZXBhZ2V9fSwKKyAgICAgICAgLy8g
QVIgUEwgWmVuS2FpIFVuaQorICAgICAgICAvLyBUcmFkaXRpb25hbCBDaGluZXNlIGFuZCBTaW1w
bGlmaWVkIENoaW5lc2UgbmFtZXMgYXJlCisgICAgICAgIC8vIGlkZW50aWNhbC4KKyAgICAgICAg
e0wiXHg2NTg3XHgwMDUwXHgwMDRDXHg0RTJEXHg2OTc3XHgwMDU1XHgwMDZFXHgwMDY5Iiwge0wi
QVIgUEwgWmVuS2FpIFVuaSIsIHRyYWRpdGlvbmFsQ2hpbmVzZUNvZGVwYWdlfX0sCisgICAgICAg
IHtMImFyIHBsIHplbmthaSB1bmkiLCB7TCJceDY1ODdceDAwNTBceDAwNENceDRFMkRceDY5Nzdc
eDAwNTVceDAwNkVceDAwNjkiLCB0cmFkaXRpb25hbENoaW5lc2VDb2RlcGFnZX19LAorICAgICAg
ICB7TCJceDY1ODdceDAwNTBceDAwNENceDRFMkRceDY5NzdceDAwNTVceDAwNkVceDAwNjkiLCB7
TCJBUiBQTCBaZW5LYWkgVW5pIiwgc2ltcGxpZmllZENoaW5lc2VDb2RlcGFnZX19LAorICAgICAg
ICB7TCJhciBwbCB6ZW5rYWkgdW5pIiwge0wiXHg2NTg3XHgwMDUwXHgwMDRDXHg0RTJEXHg2OTc3
XHgwMDU1XHgwMDZFXHgwMDY5Iiwgc2ltcGxpZmllZENoaW5lc2VDb2RlcGFnZX19LAorICAgIH07
CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBjb25zdCBGb250Q29kZXBhZ2UqPiBOYW1l
TWFwOworICAgIHN0YXRpYyBOYW1lTWFwKiBmb250TmFtZU1hcCA9IDA7CisKKyAgICBpZiAoIWZv
bnROYW1lTWFwKSB7CisgICAgICAgIHNpemVfdCBudW1FbGVtZW50cyA9IHNpemVvZihuYW1lUGFp
cnMpIC8gc2l6ZW9mKE5hbWVQYWlyKTsKKyAgICAgICAgZm9udE5hbWVNYXAgPSBuZXcgTmFtZU1h
cDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgKytpKQorICAg
ICAgICAgICAgZm9udE5hbWVNYXAtPnNldChTdHJpbmcobmFtZVBhaXJzW2ldLm5hbWUpLCAmKG5h
bWVQYWlyc1tpXS5hbHROYW1lQ29kZXBhZ2UpKTsKKyAgICB9CisKKyAgICBib29sIGlzQXNjaWkg
PSBmYWxzZTsgCisgICAgU3RyaW5nIG47CisgICAgLy8gdXNlIHxsb3dlcnwgb25seSBmb3IgQVND
SUkgbmFtZXMgCisgICAgLy8gRm9yIG5vbi1BU0NJSSBuYW1lcywgd2UgZG9uJ3Qgd2FudCB0byBp
bnZva2UgYW4gZXhwZW5zaXZlIAorICAgIC8vIGFuZCB1bm5lY2Vzc2FyeSB8bG93ZXJ8LiAKKyAg
ICBpZiAoY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKG5hbWUpKSB7CisgICAgICAgIGlzQXNjaWkgPSB0
cnVlOworICAgICAgICBuID0gbmFtZS5sb3dlcigpOworICAgIH0gZWxzZQorICAgICAgICBuID0g
bmFtZTsKKworICAgIE5hbWVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBmb250TmFtZU1hcC0+ZmluZChu
KTsKKyAgICBpZiAoaXRlciA9PSBmb250TmFtZU1hcC0+ZW5kKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHN0YXRpYyBpbnQgc3lzdGVtQ3AgPSA6OkdldEFDUCgpOworICAgIGludCBm
b250Q3AgPSBpdGVyLT5zZWNvbmQtPmNvZGVQYWdlOworCisgICAgaWYgKChpc0FzY2lpICYmIHN5
c3RlbUNwID09IGZvbnRDcCkgfHwgKCFpc0FzY2lpICYmIHN5c3RlbUNwICE9IGZvbnRDcCkpIHsK
KyAgICAgICAgYWx0TmFtZSA9IFN0cmluZyhpdGVyLT5zZWNvbmQtPm5hbWUpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBIRk9O
VCBjcmVhdGVGb250SW5kaXJlY3RBbmRHZXRXaW5OYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5LCBM
T0dGT05UKiB3aW5mb250LCBTdHJpbmcqIHdpbk5hbWUpCit7CisgICAgaW50IGxlbiA9IG1pbihz
dGF0aWNfY2FzdDxpbnQ+KGZhbWlseS5sZW5ndGgoKSksIExGX0ZBQ0VTSVpFIC0gMSk7CisgICAg
bWVtY3B5KHdpbmZvbnQtPmxmRmFjZU5hbWUsIGZhbWlseS5jaGFyYWN0ZXJzKCksIGxlbiAqIHNp
emVvZihXT1JEKSk7CisgICAgd2luZm9udC0+bGZGYWNlTmFtZVtsZW5dID0gJ1wwJzsKKworICAg
IEhGT05UIGhmb250ID0gQ3JlYXRlRm9udEluZGlyZWN0KHdpbmZvbnQpOworICAgIGlmICghaGZv
bnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgSERDIGRjID0gR2V0REMoMCk7CisgICAgSEdE
SU9CSiBvbGRGb250ID0gc3RhdGljX2Nhc3Q8SEZPTlQ+KFNlbGVjdE9iamVjdChkYywgaGZvbnQp
KTsKKyAgICBXQ0hBUiBuYW1lW0xGX0ZBQ0VTSVpFXTsKKyAgICB1bnNpZ25lZCByZXN1bHRMZW5n
dGggPSBHZXRUZXh0RmFjZShkYywgTEZfRkFDRVNJWkUsIG5hbWUpOworICAgIGlmIChyZXN1bHRM
ZW5ndGggPiAwKQorICAgICAgICByZXN1bHRMZW5ndGgtLTsgLy8gaWdub3JlIHRoZSBudWxsIHRl
cm1pbmF0b3IKKworICAgIFNlbGVjdE9iamVjdChkYywgb2xkRm9udCk7CisgICAgUmVsZWFzZURD
KDAsIGRjKTsKKyAgICAqd2luTmFtZSA9IFN0cmluZyhuYW1lLCByZXN1bHRMZW5ndGgpOworICAg
IHJldHVybiBoZm9udDsKK30KKworLy8gVGhpcyBtYXBzIGZvbnQgZmFtaWx5IG5hbWVzIHRvIHRo
ZWlyIHJlcGVydG9pcmVzIG9mIHN1cHBvcnRlZCBVbmljb2RlCisvLyBjaGFyYWN0ZXJzLiBCZWNh
dXNlIGl0J3MgZmFtaWx5IG5hbWVzIHJhdGhlciB0aGFuIGZvbnQgZmFjZXMgd2UgdXNlCisvLyBh
cyBrZXlzLCB0aGVyZSBtaWdodCBiZSBlZGdlIGNhc2VzIHdoZXJlIG9uZSBmYWNlIG9mIGEgZm9u
dCBmYW1pbHkKKy8vIGhhcyBhIGRpZmZlcmVudCByZXBlcnRvaXJlIGZyb20gYW5vdGhlciBmYWNl
IG9mIHRoZSBzYW1lIGZhbWlseS4gCit0eXBlZGVmIEhhc2hNYXA8Y29uc3Qgd2NoYXJfdCosIFVu
aWNvZGVTZXQqPiBGb250Q21hcENhY2hlOworCitzdGF0aWMgYm9vbCBmb250Q29udGFpbnNDaGFy
YWN0ZXIoY29uc3QgRm9udFBsYXRmb3JtRGF0YSogZm9udERhdGEsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCogZmFtaWx5LCBVQ2hhcjMyIGNoYXJhY3Rl
cikKK3sKKyAgICAvLyBGSVhNRTogRm9yIG5vbi1CTVAgY2hhcmFjdGVycywgR2V0Rm9udFVuaWNv
ZGVSYW5nZXMgaXMgb2YKKyAgICAvLyBubyB1c2UuIFdlIGhhdmUgdG8gcmVhZCBkaXJlY3RseSBm
cm9tIHRoZSBjbWFwIHRhYmxlIG9mIGEgZm9udC4KKyAgICAvLyBSZXR1cm4gdHJ1ZSBmb3Igbm93
LgorICAgIGlmIChjaGFyYWN0ZXIgPiAweEZGRkYpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgLy8gVGhpcyBjYWNoZSBpcyBqdXN0IGxlYWtlZCBvbiBzaHV0ZG93bi4KKyAgICBzdGF0aWMg
Rm9udENtYXBDYWNoZSogZm9udENtYXBDYWNoZSA9IDA7CisgICAgaWYgKCFmb250Q21hcENhY2hl
KQorICAgICAgICBmb250Q21hcENhY2hlID0gbmV3IEZvbnRDbWFwQ2FjaGU7CisKKyAgICBIYXNo
TWFwPGNvbnN0IHdjaGFyX3QqLCBVbmljb2RlU2V0Kj46Oml0ZXJhdG9yIGl0ID0gZm9udENtYXBD
YWNoZS0+ZmluZChmYW1pbHkpOworICAgIGlmIChpdCAhPSBmb250Q21hcENhY2hlLT5lbmQoKSkg
CisgICAgICAgIHJldHVybiBpdC0+c2Vjb25kLT5jb250YWlucyhjaGFyYWN0ZXIpOworICAgIAor
ICAgIEhGT05UIGhmb250ID0gZm9udERhdGEtPmhmb250KCk7IAorICAgIEhEQyBoZGMgPSBHZXRE
QygwKTsKKyAgICBIR0RJT0JKIG9sZEZvbnQgPSBzdGF0aWNfY2FzdDxIRk9OVD4oU2VsZWN0T2Jq
ZWN0KGhkYywgaGZvbnQpKTsKKyAgICBpbnQgY291bnQgPSBHZXRGb250VW5pY29kZVJhbmdlcyho
ZGMsIDApOworICAgIGlmIChjb3VudCA9PSAwICYmIENocm9taXVtQnJpZGdlOjplbnN1cmVGb250
TG9hZGVkKGhmb250KSkKKyAgICAgICAgY291bnQgPSBHZXRGb250VW5pY29kZVJhbmdlcyhoZGMs
IDApOworICAgIGlmIChjb3VudCA9PSAwKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKKyAgICAgICAgUmVsZWFzZURD
KDAsIGhkYyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHN0YXRpYyBWZWN0
b3I8Y2hhciwgNTEyPiBnbHlwaHNldEJ1ZmZlcjsKKyAgICBnbHlwaHNldEJ1ZmZlci5yZXNpemUo
R2V0Rm9udFVuaWNvZGVSYW5nZXMoaGRjLCAwKSk7CisgICAgR0xZUEhTRVQqIGdseXBoc2V0ID0g
cmVpbnRlcnByZXRfY2FzdDxHTFlQSFNFVCo+KGdseXBoc2V0QnVmZmVyLmRhdGEoKSk7CisgICAg
Ly8gSW4gYWRkaXRpb24sIHJlZmVyaW5nIHRvIHRoZSBPUy8yIHRhYmxlIGFuZCBjb252ZXJ0aW5n
IHRoZSBjb2RlcGFnZSBsaXN0CisgICAgLy8gdG8gdGhlIGNvdmVyYWdlIG1hcCBtaWdodCBiZSBm
YXN0ZXIuIAorICAgIGNvdW50ID0gR2V0Rm9udFVuaWNvZGVSYW5nZXMoaGRjLCBnbHlwaHNldCk7
CisgICAgQVNTRVJUKGNvdW50ID4gMCk7CisgICAgU2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7
CisgICAgUmVsZWFzZURDKDAsIGhkYyk7CisKKyAgICAvLyBGSVhNRTogY29uc2lkZXIgZG9pbmcg
ZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgdHdvOgorICAgIC8vIDEpIHBvcnQgYmFjayBJQ1UgNC4w
J3MgZmFzdGVyIGxvb2stdXAgY29kZSBmb3IgVW5pY29kZVNldAorICAgIC8vIDIpIHBvcnQgTW96
aWxsYSdzIENvbXByZXNzZWRDaGFyTWFwIG9yIGdmeFNwYXJzZUJpdHNldAorICAgIHVuc2lnbmVk
IGkgPSAwOworICAgIFVuaWNvZGVTZXQqIGNtYXAgPSBuZXcgVW5pY29kZVNldDsKKyAgICB3aGls
ZSAoaSA8IGdseXBoc2V0LT5jUmFuZ2VzKSB7CisgICAgICAgIFdDSEFSIHN0YXJ0ID0gZ2x5cGhz
ZXQtPnJhbmdlc1tpXS53Y0xvdzsgCisgICAgICAgIGNtYXAtPmFkZChzdGFydCwgc3RhcnQgKyBn
bHlwaHNldC0+cmFuZ2VzW2ldLmNHbHlwaHMgLSAxKTsKKyAgICAgICAgaSsrOworICAgIH0KKyAg
ICBjbWFwLT5mcmVlemUoKTsKKyAgICAvLyBXZSBkb24ndCBsb3dlcmNhc2UgfGZhbWlseXwgYmVj
YXVzZSBhbGwgb2YgdGhlbSBhcmUgdW5kZXIgb3VyIGNvbnRyb2wKKyAgICAvLyBhbmQgdGhleSdy
ZSBhbHJlYWR5IGxvd2VyY2FzZWQuIAorICAgIGZvbnRDbWFwQ2FjaGUtPnNldChmYW1pbHksIGNt
YXApOyAKKyAgICByZXR1cm4gY21hcC0+Y29udGFpbnMoY2hhcmFjdGVyKTsKK30KKworLy8gR2l2
ZW4gdGhlIGRlc2lyZWQgYmFzZSBmb250LCB0aGlzIHdpbGwgY3JlYXRlIGEgU2ltcGxlRm9udERh
dGEgZm9yIGEgc3BlY2lmaWMKKy8vIGZvbnQgdGhhdCBjYW4gYmUgdXNlZCB0byByZW5kZXIgdGhl
IGdpdmVuIHJhbmdlIG9mIGNoYXJhY3RlcnMuCitjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENh
Y2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCit7CisgICAgLy8gRklYTUU6IENvbnNpZGVyIHBh
c3NpbmcgZm9udERlc2NyaXB0aW9uLmRvbWluYW50U2NyaXB0KCkKKyAgICAvLyB0byBHZXRGYWxs
YmFja0ZhbWlseSBoZXJlLgorICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBm
b250LmZvbnREZXNjcmlwdGlvbigpOworICAgIFVDaGFyMzIgYzsKKyAgICBVU2NyaXB0Q29kZSBz
Y3JpcHQ7CisgICAgY29uc3Qgd2NoYXJfdCogZmFtaWx5ID0gZ2V0RmFsbGJhY2tGYW1pbHkoY2hh
cmFjdGVycywgbGVuZ3RoLAorICAgICAgICBmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgp
LCAmYywgJnNjcmlwdCk7CisgICAgRm9udFBsYXRmb3JtRGF0YSogZGF0YSA9IDA7CisgICAgaWYg
KGZhbWlseSkKKyAgICAgICAgZGF0YSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udC5m
b250RGVzY3JpcHRpb24oKSwgIEF0b21pY1N0cmluZyhmYW1pbHksIHdjc2xlbihmYW1pbHkpKSwg
ZmFsc2UpOyAKKworICAgIC8vIExhc3QgcmVzb3J0IGZvbnQgbGlzdCA6IFBhblVuaWNvZGUuIENK
SyBmb250cyBoYXZlIGEgcHJldHR5CisgICAgLy8gbGFyZ2UgcmVwZXJ0b2lyZS4gRXZlbnR1YWxs
eSwgd2UgbmVlZCB0byBzY2FuIGFsbCB0aGUgZm9udHMKKyAgICAvLyBvbiB0aGUgc3lzdGVtIHRv
IGhhdmUgYSBGaXJlZm94LWxpa2UgY292ZXJhZ2UuCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgYWxs
IG9mIHRoZW0gYXJlIGxvd2VyY2FzZWQuCisgICAgY29uc3Qgc3RhdGljIHdjaGFyX3QqIGNvbnN0
IGNqa0ZvbnRzW10gPSB7CisgICAgICAgIEwiYXJpYWwgdW5pY29kZSBtcyIsCisgICAgICAgIEwi
bXMgcGdvdGhpYyIsCisgICAgICAgIEwic2ltc3VuIiwKKyAgICAgICAgTCJndWxpbSIsCisgICAg
ICAgIEwicG1pbmdsaXUiLAorICAgICAgICBMIndlbnF1YW55aSB6ZW4gaGVpIiwgLy8gcGFydGlh
bCBDSksgRXh0LiBBIGNvdmVyYWdlIGJ1dCBtb3JlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB3aWRlbHkga25vd24gdG8gQ2hpbmVzZSB1c2Vycy4KKyAgICAgICAgTCJhciBwbCBz
aGFuaGVpc3VuIHVuaSIsCisgICAgICAgIEwiYXIgcGwgemVua2FpIHVuaSIsCisgICAgICAgIEwi
aGFuIG5vbSBhIiwgIC8vIENvbXBsZXRlIENKSyBFeHQuIEEgY292ZXJhZ2UKKyAgICAgICAgTCJj
b2RlMjAwMCIsICAgLy8gQ29tcGxldGUgQ0pLIEV4dC4gQSBjb3ZlcmFnZQorICAgICAgICAvLyBD
SksgRXh0LiBCIGZvbnRzIGFyZSBub3QgbGlzdGVkIGhlcmUgYmVjYXVzZSBpdCdzIG9mIG5vIHVz
ZQorICAgICAgICAvLyB3aXRoIG91ciBjdXJyZW50IG5vbi1CTVAgY2hhcmFjdGVyIGhhbmRsaW5n
IGJlY2F1c2Ugd2UgdXNlCisgICAgICAgIC8vIFVuaXNjcmliZSBmb3IgaXQgYW5kIHRoYXQgY29k
ZSBwYXRoIGRvZXMgbm90IGdvIHRocm91Z2ggaGVyZS4KKyAgICB9OworCisgICAgY29uc3Qgc3Rh
dGljIHdjaGFyX3QqIGNvbnN0IGNvbW1vbkZvbnRzW10gPSB7CisgICAgICAgIEwidGFob21hIiwK
KyAgICAgICAgTCJhcmlhbCB1bmljb2RlIG1zIiwKKyAgICAgICAgTCJsdWNpZGEgc2FucyB1bmlj
b2RlIiwKKyAgICAgICAgTCJtaWNyb3NvZnQgc2FucyBzZXJpZiIsCisgICAgICAgIEwicGFsYXRp
bm8gbGlub3R5cGUiLAorICAgICAgICAvLyBGb3VyIGZvbnRzIGJlbG93IChhbmQgY29kZTIwMDAg
YXQgdGhlIGVuZCkgYXJlIG5vdCBmcm9tIE1TLCBidXQKKyAgICAgICAgLy8gb25jZSBpbnN0YWxs
ZWQsIGNvdmVyIGEgdmVyeSB3aWRlIHJhbmdlIG9mIGNoYXJhY3RlcnMuCisgICAgICAgIEwiZnJl
ZXNlcmlmIiwKKyAgICAgICAgTCJmcmVlc2FucyIsCisgICAgICAgIEwiZ2VudGl1bSIsCisgICAg
ICAgIEwiZ2VudGl1bWFsdCIsCisgICAgICAgIEwibXMgcGdvdGhpYyIsCisgICAgICAgIEwic2lt
c3VuIiwKKyAgICAgICAgTCJndWxpbSIsCisgICAgICAgIEwicG1pbmdsaXUiLAorICAgICAgICBM
ImNvZGUyMDAwIiwKKyAgICB9OworCisgICAgY29uc3Qgd2NoYXJfdCogY29uc3QqIHBhblVuaUZv
bnRzID0gMDsKKyAgICBpbnQgbnVtRm9udHMgPSAwOworICAgIGlmIChzY3JpcHQgPT0gVVNDUklQ
VF9IQU4pIHsKKyAgICAgICAgcGFuVW5pRm9udHMgPSBjamtGb250czsKKyAgICAgICAgbnVtRm9u
dHMgPSBBUlJBWVNJWkUoY2prRm9udHMpOworICAgIH0gZWxzZSB7CisgICAgICAgIHBhblVuaUZv
bnRzID0gY29tbW9uRm9udHM7CisgICAgICAgIG51bUZvbnRzID0gQVJSQVlTSVpFKGNvbW1vbkZv
bnRzKTsKKyAgICB9CisgICAgLy8gRm9udCByZXR1cm5lZCBmcm9tIEdldEZhbGxiYWNrRmFtaWx5
IG1heSBub3QgY292ZXIgfGNoYXJhY3RlcnN8CisgICAgLy8gYmVjYXVzZSBpdCdzIGJhc2VkIG9u
IHNjcmlwdCB0byBmb250IG1hcHBpbmcuIFRoaXMgcHJvYmxlbSBpcworICAgIC8vIGNyaXRpY2Fs
IGVub3VnaCBmb3Igbm9uLUxhdGluIHNjcmlwdHMgKGVzcGVjaWFsbHkgSGFuKSB0bworICAgIC8v
IHdhcnJhbnQgYW4gYWRkaXRpb25hbCAocmVhbCBjb3ZlcmFnZSkgY2hlY2sgd2l0aCBmb250Q290
YWluc0NoYXJhY3Rlci4KKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyAoIWRhdGEgfHwgIWZv
bnRDb250YWluc0NoYXJhY3RlcihkYXRhLCBmYW1pbHksIGMpKSAmJiBpIDwgbnVtRm9udHM7ICsr
aSkgeworICAgICAgICBmYW1pbHkgPSBwYW5VbmlGb250c1tpXTsgCisgICAgICAgIGRhdGEgPSBn
ZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnQuZm9udERlc2NyaXB0aW9uKCksIEF0b21pY1N0
cmluZyhmYW1pbHksIHdjc2xlbihmYW1pbHkpKSk7CisgICAgfQorICAgIGlmIChpIDwgbnVtRm9u
dHMpIC8vIHdlIGZvdW5kIHRoZSBmb250IHRoYXQgY292ZXJzIHRoaXMgY2hhcmFjdGVyICEKKyAg
ICAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoZGF0YSk7CisKKyAgICByZXR1cm4gMDsKKwor
fQorCitjb25zdCBBdG9taWNTdHJpbmcmIEZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZShj
b25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCit7CisgICAgLy8gTm90ZSB0aGF0IG1hcHBp
bmcgdG8gQ291cmllciBpcyByZW1vdmVkIGJlY2F1c2UgCisgICAgLy8gYmVjYXVzZSBpdCdzIGEg
Yml0bWFwIGZvbnQgb24gV2luZG93cy4KKyAgICAvLyBBbGlhcyBDb3VyaWVyIC0+IENvdXJpZXIg
TmV3CisgICAgc3RhdGljIEF0b21pY1N0cmluZyBjb3VyaWVyKCJDb3VyaWVyIiksIGNvdXJpZXJO
ZXcoIkNvdXJpZXIgTmV3Iik7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWUs
IGNvdXJpZXIpKQorICAgICAgICByZXR1cm4gY291cmllck5ldzsKKworICAgIC8vIEFsaWFzIFRp
bWVzIDwtPiBUaW1lcyBOZXcgUm9tYW4uCisgICAgc3RhdGljIEF0b21pY1N0cmluZyB0aW1lcygi
VGltZXMiKSwgdGltZXNOZXdSb21hbigiVGltZXMgTmV3IFJvbWFuIik7CisgICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKGZhbWlseU5hbWUsIHRpbWVzKSkKKyAgICAgICAgcmV0dXJuIHRpbWVzTmV3
Um9tYW47CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWUsIHRpbWVzTmV3Um9t
YW4pKQorICAgICAgICByZXR1cm4gdGltZXM7CisgICAgCisgICAgLy8gQWxpYXMgSGVsdmV0aWNh
IDwtPiBBcmlhbAorICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgYXJpYWwoIkFyaWFsIiksIGhlbHZl
dGljYSgiSGVsdmV0aWNhIik7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWUs
IGhlbHZldGljYSkpCisgICAgICAgIHJldHVybiBhcmlhbDsKKyAgICBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UoZmFtaWx5TmFtZSwgYXJpYWwpKQorICAgICAgICByZXR1cm4gaGVsdmV0aWNhOworCisg
ICAgLy8gV2UgYmxvY2sgYml0bWFwIGZvbnRzIGFsdG9nZXRoZXIgc28gdGhhdCB3ZSBoYXZlIHRv
IAorICAgIC8vIGFsaWFzIE1TIFNhbnMgU2VyaWYgKGJpdG1hcCBmb250KSAtPiBNaWNyb3NvZnQg
U2FucyBTZXJpZiAodHJ1ZXR5cGUgZm9udCkKKyAgICBzdGF0aWMgQXRvbWljU3RyaW5nIG1zU2Fu
cygiTVMgU2FucyBTZXJpZiIpOworICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgbWljcm9zb2Z0U2Fu
cygiTWljcm9zb2Z0IFNhbnMgU2VyaWYiKTsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmFt
aWx5TmFtZSwgbXNTYW5zKSkKKyAgICAgICAgcmV0dXJuIG1pY3Jvc29mdFNhbnM7CisKKyAgICAv
LyBBbGlhcyBNUyBTZXJpZiAoYml0bWFwKSAtPiBUaW1lcyBOZXcgUm9tYW4gKHRydWV0eXBlIGZv
bnQpLiBUaGVyZSdzIG5vIAorICAgIC8vICdNaWNyb3NvZnQgU2FucyBTZXJpZi1lcXVpdmFsZW50
JyBmb3IgU2VyaWYuIAorICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgbXNTZXJpZigiTVMgU2VyaWYi
KTsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5TmFtZSwgbXNTZXJpZikpCisgICAg
ICAgIHJldHVybiB0aW1lc05ld1JvbWFuOworCisgICAgLy8gRklYTUU6IHNob3VsZCB3ZSBtYXAg
J3N5c3RlbScgdG8gc29tZXRoaW5nICgnVGFob21hJykgPyAKKyAgICByZXR1cm4gZW1wdHlBdG9t
OworfQorCitGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK0ZvbnRQbGF0
Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIEZvbnREZXNjcmlwdGlvbjo6R2VuZXJp
Y0ZhbWlseVR5cGUgZ2VuZXJpYyA9IGRlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKTsKKyAgICAv
LyBGSVhNRTogTWFwcGluZyB3ZWJraXQgZ2VuZXJpYyB0byBHZW5lcmljRmFtaWx5VHlwZSBuZWVk
cyB0bworICAgIC8vIGJlIG1vcmUgaW50ZWxsaWdlbnQuIAorICAgIC8vIFRoaXMgc3BvdCByYXJl
bHkgZ2V0cyByZWFjaGVkLiBHZXRGb250RGF0YUZvckNoYXJhY3RlcnMoKSBnZXRzIGhpdCBhIGxv
dAorICAgIC8vIG1vcmUgb2Z0ZW4gKHNlZSBGSVhNRSBjb21tZW50IHRoZXJlKS4gCisgICAgY29u
c3Qgd2NoYXJfdCogZmFtaWx5ID0gZ2V0Rm9udEZhbWlseUZvclNjcmlwdChkZXNjcmlwdGlvbi5k
b21pbmFudFNjcmlwdCgpLCBnZW5lcmljKTsKKworICAgIGlmIChmYW1pbHkpCisgICAgICAgIHJl
dHVybiBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uLCBBdG9taWNTdHJpbmco
ZmFtaWx5LCB3Y3NsZW4oZmFtaWx5KSkpOworCisgICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4g
YmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuCisgICAg
Ly8gRm9yIG5vdyB3ZSdsbCBwaWNrIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0
IHdpdGhvdXQgY2hhbmdpbmcKKyAgICAvLyBhbnkgcHJlZnMuCisgICAgc3RhdGljIEF0b21pY1N0
cmluZyB0aW1lc1N0cigiVGltZXMgTmV3IFJvbWFuIik7CisgICAgc3RhdGljIEF0b21pY1N0cmlu
ZyBjb3VyaWVyU3RyKCJDb3VyaWVyIE5ldyIpOworICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgYXJp
YWxTdHIoIkFyaWFsIik7CisKKyAgICBBdG9taWNTdHJpbmcmIGZvbnRTdHIgPSB0aW1lc1N0cjsK
KyAgICBpZiAoZ2VuZXJpYyA9PSBGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseSkKKyAg
ICAgICAgZm9udFN0ciA9IGFyaWFsU3RyOworICAgIGVsc2UgaWYgKGdlbmVyaWMgPT0gRm9udERl
c2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpCisgICAgICAgIGZvbnRTdHIgPSBjb3VyaWVyU3Ry
OworCisgICAgcmV0dXJuIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24sIGZv
bnRTdHIpOworfQorCitzdGF0aWMgTE9ORyB0b0dESUZvbnRXZWlnaHQoRm9udFdlaWdodCBmb250
V2VpZ2h0KQoreworICAgIHN0YXRpYyBMT05HIGdkaUZvbnRXZWlnaHRzW10gPSB7CisgICAgICAg
IEZXX1RISU4sICAgICAgICAvLyBGb250V2VpZ2h0MTAwCisgICAgICAgIEZXX0VYVFJBTElHSFQs
ICAvLyBGb250V2VpZ2h0MjAwCisgICAgICAgIEZXX0xJR0hULCAgICAgICAvLyBGb250V2VpZ2h0
MzAwCisgICAgICAgIEZXX05PUk1BTCwgICAgICAvLyBGb250V2VpZ2h0NDAwCisgICAgICAgIEZX
X01FRElVTSwgICAgICAvLyBGb250V2VpZ2h0NTAwCisgICAgICAgIEZXX1NFTUlCT0xELCAgICAv
LyBGb250V2VpZ2h0NjAwCisgICAgICAgIEZXX0JPTEQsICAgICAgICAvLyBGb250V2VpZ2h0NzAw
CisgICAgICAgIEZXX0VYVFJBQk9MRCwgICAvLyBGb250V2VpZ2h0ODAwCisgICAgICAgIEZXX0hF
QVZZICAgICAgICAvLyBGb250V2VpZ2h0OTAwCisgICAgfTsKKyAgICByZXR1cm4gZ2RpRm9udFdl
aWdodHNbZm9udFdlaWdodF07Cit9CisKKy8vIEZJWE1FOiBUaGlzIG1heSBub3QgYmUgdGhlIGJl
c3QgcGxhY2UgdG8gcHV0IHRoaXMgZnVuY3Rpb24KK0F0b21pY1N0cmluZyBGb250Q2FjaGU6Omdl
dEdlbmVyaWNGb250Rm9yU2NyaXB0KFVTY3JpcHRDb2RlIHNjcmlwdCwgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAgICBjb25zdCB3Y2hhcl90KiBzY3JpcHRGb250ID0g
Z2V0Rm9udEZhbWlseUZvclNjcmlwdCggc2NyaXB0LCBkZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5
KCkpOworICAgIHJldHVybiBzY3JpcHRGb250ID8gQXRvbWljU3RyaW5nKHNjcmlwdEZvbnQsIHdj
c2xlbihzY3JpcHRGb250KSkgOiBlbXB0eUF0b207Cit9CisKK3N0YXRpYyB2b2lkIEZpbGxMb2dG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBMT0dGT05UKiB3aW5m
b250KQoreworICAgIC8vIFRoZSBzaXplIGhlcmUgbG9va3MgdW51c3VhbC4gIFRoZSBuZWdhdGl2
ZSBudW1iZXIgaXMgaW50ZW50aW9uYWwuCisgICAgLy8gVW5saWtlIFdlYktpdCB0cnVuaywgd2Ug
ZG9uJ3QgbXVsdGlwbHkgdGhlIHNpemUgYnkgMzIuICBUaGF0IHNlZW1zIHRvIGJlCisgICAgLy8g
c29tZSBraW5kIG9mIGFydGlmYWN0IG9mIHRoZWlyIENHIGJhY2tlbmQsIG9yIHNvbWV0aGluZy4K
KyAgICB3aW5mb250LT5sZkhlaWdodCA9IC1mb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNp
emUoKTsKKyAgICB3aW5mb250LT5sZldpZHRoID0gMDsKKyAgICB3aW5mb250LT5sZkVzY2FwZW1l
bnQgPSAwOworICAgIHdpbmZvbnQtPmxmT3JpZW50YXRpb24gPSAwOworICAgIHdpbmZvbnQtPmxm
VW5kZXJsaW5lID0gZmFsc2U7CisgICAgd2luZm9udC0+bGZTdHJpa2VPdXQgPSBmYWxzZTsKKyAg
ICB3aW5mb250LT5sZkNoYXJTZXQgPSBERUZBVUxUX0NIQVJTRVQ7CisgICAgd2luZm9udC0+bGZP
dXRQcmVjaXNpb24gPSBPVVRfVFRfT05MWV9QUkVDSVM7CisgICAgd2luZm9udC0+bGZRdWFsaXR5
ID0gQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkgPyBOT05BTlRJQUxJQVNFRF9RVUFM
SVRZIDogREVGQVVMVF9RVUFMSVRZOyAvLyBIb25vciB1c2VyJ3MgZGVza3RvcCBzZXR0aW5ncy4K
KyAgICB3aW5mb250LT5sZlBpdGNoQW5kRmFtaWx5ID0gREVGQVVMVF9QSVRDSCB8IEZGX0RPTlRD
QVJFOworICAgIHdpbmZvbnQtPmxmSXRhbGljID0gZm9udERlc2NyaXB0aW9uLml0YWxpYygpOwor
ICAgIHdpbmZvbnQtPmxmV2VpZ2h0ID0gdG9HRElGb250V2VpZ2h0KGZvbnREZXNjcmlwdGlvbi53
ZWlnaHQoKSk7Cit9CisKK2Jvb2wgRm9udENhY2hlOjpmb250RXhpc3RzKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKK3sK
KyAgICBMT0dGT05UIHdpbmZvbnQgPSB7MH07CisgICAgRmlsbExvZ0ZvbnQoZm9udERlc2NyaXB0
aW9uLCAmd2luZm9udCk7CisgICAgU3RyaW5nIHdpbk5hbWU7CisgICAgSEZPTlQgaGZvbnQgPSBj
cmVhdGVGb250SW5kaXJlY3RBbmRHZXRXaW5OYW1lKGZhbWlseSwgJndpbmZvbnQsICZ3aW5OYW1l
KTsKKyAgICBpZiAoIWhmb250KQorICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRGVsZXRlT2Jq
ZWN0KGhmb250KTsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCB3aW5OYW1lKSkK
KyAgICAgIHJldHVybiB0cnVlOworICAgIC8vIEZvciBDSksgZm9udHMgd2l0aCBib3RoIEVuZ2xp
c2ggYW5kIG5hdGl2ZSBuYW1lcywgCisgICAgLy8gR2V0VGV4dEZhY2UgcmV0dXJucyBhIG5hdGl2
ZSBuYW1lIHVuZGVyIHRoZSBmb250J3MgImxvY2FsZSIKKyAgICAvLyBhbmQgYW4gRW5nbGlzaCBu
YW1lIHVuZGVyIG90aGVyIGxvY2FsZXMgcmVnYXJkbGVzcyBvZiAKKyAgICAvLyBsZkZhY2VOYW1l
IGZpZWxkIG9mIExPR0ZPTlQuIEFzIGEgcmVzdWx0LCB3ZSBuZWVkIHRvIGNoZWNrCisgICAgLy8g
aWYgYSBmb250IGhhcyBhbiBhbHRlcm5hdGUgbmFtZS4gSWYgdGhlcmUgaXMsIHdlIG5lZWQgdG8K
KyAgICAvLyBjb21wYXJlIGl0IHdpdGggd2hhdCdzIHJlcXVlc3RlZCBpbiB0aGUgZmlyc3QgcGxh
Y2UuCisgICAgU3RyaW5nIGFsdE5hbWU7CisgICAgcmV0dXJuIExvb2t1cEFsdE5hbWUoZmFtaWx5
LCBhbHROYW1lKSAmJiBlcXVhbElnbm9yaW5nQ2FzZShhbHROYW1lLCB3aW5OYW1lKTsKK30KKwor
c3RydWN0IFRyYWl0c0luRmFtaWx5UHJvY0RhdGEgeworICAgIFRyYWl0c0luRmFtaWx5UHJvY0Rh
dGEoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQorICAgICAgICA6IG1fZmFtaWx5TmFt
ZShmYW1pbHlOYW1lKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG1f
ZmFtaWx5TmFtZTsKKyAgICBIYXNoU2V0PHVuc2lnbmVkPiBtX3RyYWl0c01hc2tzOworfTsKKwor
c3RhdGljIGludCBDQUxMQkFDSyB0cmFpdHNJbkZhbWlseUVudW1Qcm9jKENPTlNUIExPR0ZPTlQq
IGxvZ0ZvbnQsIENPTlNUIFRFWFRNRVRSSUMqIG1ldHJpY3MsIERXT1JEIGZvbnRUeXBlLCBMUEFS
QU0gbFBhcmFtKQoreworICAgIFRyYWl0c0luRmFtaWx5UHJvY0RhdGEqIHByb2NEYXRhID0gcmVp
bnRlcnByZXRfY2FzdDxUcmFpdHNJbkZhbWlseVByb2NEYXRhKj4obFBhcmFtKTsKKworICAgIHVu
c2lnbmVkIHRyYWl0c01hc2sgPSAwOworICAgIHRyYWl0c01hc2sgfD0gbG9nRm9udC0+bGZJdGFs
aWMgPyBGb250U3R5bGVJdGFsaWNNYXNrIDogRm9udFN0eWxlTm9ybWFsTWFzazsKKyAgICB0cmFp
dHNNYXNrIHw9IEZvbnRWYXJpYW50Tm9ybWFsTWFzazsKKyAgICBMT05HIHdlaWdodCA9IGxvZ0Zv
bnQtPmxmV2VpZ2h0OworICAgIHRyYWl0c01hc2sgfD0gd2VpZ2h0ID09IEZXX1RISU4gPyBGb250
V2VpZ2h0MTAwTWFzayA6CisgICAgICAgIHdlaWdodCA9PSBGV19FWFRSQUxJR0hUID8gRm9udFdl
aWdodDIwME1hc2sgOgorICAgICAgICB3ZWlnaHQgPT0gRldfTElHSFQgPyBGb250V2VpZ2h0MzAw
TWFzayA6CisgICAgICAgIHdlaWdodCA9PSBGV19OT1JNQUwgPyBGb250V2VpZ2h0NDAwTWFzayA6
CisgICAgICAgIHdlaWdodCA9PSBGV19NRURJVU0gPyBGb250V2VpZ2h0NTAwTWFzayA6CisgICAg
ICAgIHdlaWdodCA9PSBGV19TRU1JQk9MRCA/IEZvbnRXZWlnaHQ2MDBNYXNrIDoKKyAgICAgICAg
d2VpZ2h0ID09IEZXX0JPTEQgPyBGb250V2VpZ2h0NzAwTWFzayA6CisgICAgICAgIHdlaWdodCA9
PSBGV19FWFRSQUJPTEQgPyBGb250V2VpZ2h0ODAwTWFzayA6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBGb250V2VpZ2h0OTAwTWFzazsKKyAgICBwcm9jRGF0YS0+bV90cmFpdHNN
YXNrcy5hZGQodHJhaXRzTWFzayk7CisgICAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgRm9udENhY2hl
OjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rv
cjx1bnNpZ25lZD4mIHRyYWl0c01hc2tzKQoreworICAgIEhEQyBoZGMgPSBHZXREQygwKTsKKwor
ICAgIExPR0ZPTlQgbG9nRm9udDsKKyAgICBsb2dGb250LmxmQ2hhclNldCA9IERFRkFVTFRfQ0hB
UlNFVDsKKyAgICB1bnNpZ25lZCBmYW1pbHlMZW5ndGggPSBtaW4oZmFtaWx5TmFtZS5sZW5ndGgo
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExGX0ZBQ0VTSVpFIC0gMSkpOworICAgIG1lbWNweShs
b2dGb250LmxmRmFjZU5hbWUsIGZhbWlseU5hbWUuY2hhcmFjdGVycygpLCBmYW1pbHlMZW5ndGgg
KiBzaXplb2YoVUNoYXIpKTsKKyAgICBsb2dGb250LmxmRmFjZU5hbWVbZmFtaWx5TGVuZ3RoXSA9
IDA7CisgICAgbG9nRm9udC5sZlBpdGNoQW5kRmFtaWx5ID0gMDsKKworICAgIFRyYWl0c0luRmFt
aWx5UHJvY0RhdGEgcHJvY0RhdGEoZmFtaWx5TmFtZSk7CisgICAgRW51bUZvbnRGYW1pbGllc0V4
KGhkYywgJmxvZ0ZvbnQsIHRyYWl0c0luRmFtaWx5RW51bVByb2MsIHJlaW50ZXJwcmV0X2Nhc3Q8
TFBBUkFNPigmcHJvY0RhdGEpLCAwKTsKKyAgICBjb3B5VG9WZWN0b3IocHJvY0RhdGEubV90cmFp
dHNNYXNrcywgdHJhaXRzTWFza3MpOworCisgICAgUmVsZWFzZURDKDAsIGhkYyk7Cit9CisKK0Zv
bnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1p
bHkpCit7CisgICAgTE9HRk9OVCB3aW5mb250ID0gezB9OworICAgIEZpbGxMb2dGb250KGZvbnRE
ZXNjcmlwdGlvbiwgJndpbmZvbnQpOworCisgICAgLy8gV2luZG93cyB3aWxsIGFsd2F5cyBnaXZl
IHVzIGEgdmFsaWQgcG9pbnRlciBoZXJlLCBldmVuIGlmIHRoZSBmYWNlIG5hbWUgCisgICAgLy8g
aXMgbm9uLWV4aXN0ZW50LiAgV2UgaGF2ZSB0byBkb3VibGUtY2hlY2sgYW5kIHNlZSBpZiB0aGUg
ZmFtaWx5IG5hbWUgd2FzIAorICAgIC8vIHJlYWxseSB1c2VkLgorICAgIFN0cmluZyB3aW5OYW1l
OworICAgIEhGT05UIGhmb250ID0gY3JlYXRlRm9udEluZGlyZWN0QW5kR2V0V2luTmFtZShmYW1p
bHksICZ3aW5mb250LCAmd2luTmFtZSk7CisgICAgaWYgKCFoZm9udCkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byB1c2UgcHJlZGVmaW5lZCBmb250cyAi
Z3VhcmFudGVlZCIgdG8gZXhpc3QKKyAgICAvLyB3aGVuIHdlJ3JlIHJ1bm5pbmcgaW4gbGF5b3V0
LXRlc3QgbW9kZT8KKyAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwgd2luTmFtZSkp
IHsKKyAgICAgICAgLy8gRm9yIENKSyBmb250cyB3aXRoIGJvdGggRW5nbGlzaCBhbmQgbmF0aXZl
IG5hbWVzLCAKKyAgICAgICAgLy8gR2V0VGV4dEZhY2UgcmV0dXJucyBhIG5hdGl2ZSBuYW1lIHVu
ZGVyIHRoZSBmb250J3MgImxvY2FsZSIKKyAgICAgICAgLy8gYW5kIGFuIEVuZ2xpc2ggbmFtZSB1
bmRlciBvdGhlciBsb2NhbGVzIHJlZ2FyZGxlc3Mgb2YgCisgICAgICAgIC8vIGxmRmFjZU5hbWUg
ZmllbGQgb2YgTE9HRk9OVC4gQXMgYSByZXN1bHQsIHdlIG5lZWQgdG8gY2hlY2sKKyAgICAgICAg
Ly8gaWYgYSBmb250IGhhcyBhbiBhbHRlcm5hdGUgbmFtZS4gSWYgdGhlcmUgaXMsIHdlIG5lZWQg
dG8KKyAgICAgICAgLy8gY29tcGFyZSBpdCB3aXRoIHdoYXQncyByZXF1ZXN0ZWQgaW4gdGhlIGZp
cnN0IHBsYWNlLgorICAgICAgICBTdHJpbmcgYWx0TmFtZTsKKyAgICAgICAgaWYgKCFMb29rdXBB
bHROYW1lKGZhbWlseSwgYWx0TmFtZSkgfHwgCisgICAgICAgICAgICAhZXF1YWxJZ25vcmluZ0Nh
c2UoYWx0TmFtZSwgd2luTmFtZSkpIHsKKyAgICAgICAgICAgIERlbGV0ZU9iamVjdChoZm9udCk7
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBu
ZXcgRm9udFBsYXRmb3JtRGF0YShoZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkpOworfQorCit9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlTGludXguY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxODdjNTUKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4
LmNwcApAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKworI2luY2x1ZGUgPGZvbnRjb25maWcvZm9u
dGNvbmZpZy5oPgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiQ1N0cmlu
Zy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNp
bmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKworI2lu
Y2x1ZGUgIlNrUGFpbnQuaCIKKyNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCisjaW5jbHVkZSAiU2tV
dGlscy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRm9udENhY2hlOjpwbGF0Zm9y
bUluaXQoKQoreworfQorCitjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250
RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogY2hhcmFj
dGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgbGVuZ3RoKQoreworICAgIEZjQ2hhclNldCogY3NldCA9IEZjQ2hhclNldENy
ZWF0ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgIEZj
Q2hhclNldEFkZENoYXIoY3NldCwgY2hhcmFjdGVyc1tpXSk7CisKKyAgICBGY1BhdHRlcm4qIHBh
dHRlcm4gPSBGY1BhdHRlcm5DcmVhdGUoKTsKKworICAgIEZjVmFsdWUgZmN2YWx1ZTsKKyAgICBm
Y3ZhbHVlLnR5cGUgPSBGY1R5cGVDaGFyU2V0OworICAgIGZjdmFsdWUudS5jID0gY3NldDsKKyAg
ICBGY1BhdHRlcm5BZGQocGF0dGVybiwgRkNfQ0hBUlNFVCwgZmN2YWx1ZSwgMCk7CisKKyAgICBG
Y0NvbmZpZ1N1YnN0aXR1dGUoMCwgcGF0dGVybiwgRmNNYXRjaFBhdHRlcm4pOworICAgIEZjRGVm
YXVsdFN1YnN0aXR1dGUocGF0dGVybik7CisKKyAgICBGY1Jlc3VsdCByZXN1bHQ7CisgICAgRmNQ
YXR0ZXJuKiBtYXRjaCA9IEZjRm9udE1hdGNoKDAsIHBhdHRlcm4sICZyZXN1bHQpOworICAgIEZj
UGF0dGVybkRlc3Ryb3kocGF0dGVybik7CisKKyAgICBTaW1wbGVGb250RGF0YSogcmV0ID0gMDsK
KworICAgIGlmIChtYXRjaCkgeworICAgICAgICBGY0NoYXI4KiBmYW1pbHk7CisgICAgICAgIGlm
IChGY1BhdHRlcm5HZXRTdHJpbmcobWF0Y2gsIEZDX0ZBTUlMWSwgMCwgJmZhbWlseSkgPT0gRmNS
ZXN1bHRNYXRjaCkgeworICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogZnBkID0KKyAgICAg
ICAgICAgICAgICBjcmVhdGVGb250UGxhdGZvcm1EYXRhKGZvbnQuZm9udERlc2NyaXB0aW9uKCks
IEF0b21pY1N0cmluZygoY2hhciopIGZhbWlseSkpOworICAgICAgICAgICAgcmV0ID0gbmV3IFNp
bXBsZUZvbnREYXRhKCpmcGQpOworICAgICAgICB9CisgICAgICAgIEZjUGF0dGVybkRlc3Ryb3ko
bWF0Y2gpOworICAgIH0KKworICAgIEZjQ2hhclNldERlc3Ryb3koY3NldCk7CisKKyAgICByZXR1
cm4gcmV0OworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIEZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFt
aWx5TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKworICAgIC8vIFRoaXMgaXMganVzdCB0byBzdG9wIEdDQyBlbWl0dGluZyBhIHdh
cm5pbmcgYWJvdXQgcmV0dXJuaW5nIGEgcmVmZXJlbmNlCisgICAgLy8gdG8gYSB0ZW1wb3Jhcnkg
dmFyaWFibGUKKyAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGE7CisgICAgcmV0dXJuIGE7Cit9CisK
K0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udCYgZm9udCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworRm9udFBsYXRmb3JtRGF0
YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24pCit7CisgICAgc3RhdGljIEF0b21pY1N0cmluZyBhcmlhbFN0cigi
QXJpYWwiKTsKKyAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlv
biwgYXJpYWxTdHIpOworfQorCit2b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29u
c3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4mIHRyYWl0c01hc2tzKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRm
b3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGZhbWlseSkKK3sKKyAgICBjb25zdCBjaGFyKiBuYW1lID0gMDsKKyAgICBDU3RyaW5n
IHM7CisKKyAgICBpZiAoZmFtaWx5Lmxlbmd0aCgpID09IDApIHsKKyAgICAgICAgc3RhdGljIGNv
bnN0IHN0cnVjdCB7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb246OkdlbmVyaWNGYW1pbHlU
eXBlIG1UeXBlOworICAgICAgICAgICAgY29uc3QgY2hhciogbU5hbWU7CisgICAgICAgIH0gZm9u
dERlc2NyaXB0aW9uc1tdID0geworICAgICAgICAgICAgeyBGb250RGVzY3JpcHRpb246OlNlcmlm
RmFtaWx5LCAic2VyaWYiIH0sCisgICAgICAgICAgICB7IEZvbnREZXNjcmlwdGlvbjo6U2Fuc1Nl
cmlmRmFtaWx5LCAic2Fucy1zZXJpZiIgfSwKKyAgICAgICAgICAgIHsgRm9udERlc2NyaXB0aW9u
OjpNb25vc3BhY2VGYW1pbHksICJtb25vc3BhY2UiIH0sCisgICAgICAgICAgICB7IEZvbnREZXNj
cmlwdGlvbjo6Q3Vyc2l2ZUZhbWlseSwgImN1cnNpdmUiIH0sCisgICAgICAgICAgICB7IEZvbnRE
ZXNjcmlwdGlvbjo6RmFudGFzeUZhbWlseSwgImZhbnRhc3kiIH0KKyAgICAgICAgfTsKKworICAg
ICAgICBGb250RGVzY3JpcHRpb246OkdlbmVyaWNGYW1pbHlUeXBlIHR5cGUgPSBmb250RGVzY3Jp
cHRpb24uZ2VuZXJpY0ZhbWlseSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
U0tfQVJSQVlfQ09VTlQoZm9udERlc2NyaXB0aW9ucyk7IGkrKykgeworICAgICAgICAgICAgaWYg
KHR5cGUgPT0gZm9udERlc2NyaXB0aW9uc1tpXS5tVHlwZSkgeworICAgICAgICAgICAgICAgIG5h
bWUgPSBmb250RGVzY3JpcHRpb25zW2ldLm1OYW1lOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIGlmIHdlIGZhbGwgb3V0IG9mIHRo
ZSBsb29wLCBpdCdzIG9rIGZvciBuYW1lIHRvIHN0aWxsIGJlIDAKKyAgICB9CisgICAgZWxzZSB7
ICAgIC8vIGNvbnZlcnQgdGhlIG5hbWUgdG8gdXRmOAorICAgICAgICBzID0gZmFtaWx5LnN0cmlu
ZygpLnV0ZjgoKTsKKyAgICAgICAgbmFtZSA9IHMuZGF0YSgpOworICAgIH0KKworICAgIGludCBz
dHlsZSA9IFNrVHlwZWZhY2U6OmtOb3JtYWw7CisgICAgaWYgKGZvbnREZXNjcmlwdGlvbi53ZWln
aHQoKSA+PSBGb250V2VpZ2h0Qm9sZCkKKyAgICAgICAgc3R5bGUgfD0gU2tUeXBlZmFjZTo6a0Jv
bGQ7CisgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSkKKyAgICAgICAgc3R5bGUgfD0g
U2tUeXBlZmFjZTo6a0l0YWxpYzsKKworICAgIFNrVHlwZWZhY2UqIHRmID0gU2tUeXBlZmFjZTo6
Q3JlYXRlKG5hbWUsIHN0YXRpY19jYXN0PFNrVHlwZWZhY2U6OlN0eWxlPihzdHlsZSkpOworICAg
IGlmICghdGYpCisgICAgICAgIHJldHVybiAwOworCisgICAgRm9udFBsYXRmb3JtRGF0YSogcmVz
dWx0ID0KKyAgICAgICAgbmV3IEZvbnRQbGF0Zm9ybURhdGEodGYsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHN0eWxlICYgU2tUeXBlZmFjZTo6a0JvbGQpICYmICF0Zi0+aXNC
b2xkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHlsZSAmIFNrVHlwZWZhY2U6
OmtJdGFsaWMpICYmICF0Zi0+aXNJdGFsaWMoKSk7CisgICAgdGYtPnVucmVmKCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworQXRvbWljU3RyaW5nIEZvbnRDYWNoZTo6Z2V0R2VuZXJpY0ZvbnRG
b3JTY3JpcHQoVVNjcmlwdENvZGUgc2NyaXB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBBdG9taWNTdHJpbmcoKTsKK30KKwor
fSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4xY2JlNjU1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCkBAIC0wLDAgKzEsMzI4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuCisg
KiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKwor
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiQ2hyb21pdW1Ccmlk
Z2UuaCIKKyNpbmNsdWRlICJGb250RmFsbGJhY2tMaXN0LmgiCisjaW5jbHVkZSAiR2x5cGhCdWZm
ZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisjaW5jbHVkZSAiU2ltcGxl
Rm9udERhdGEuaCIKKyNpbmNsdWRlICJTa2lhRm9udFdpbi5oIgorI2luY2x1ZGUgIlNraWFVdGls
cy5oIgorI2luY2x1ZGUgIlVuaXNjcmliZUhlbHBlclRleHRSdW4uaCIKKworI2luY2x1ZGUgInNr
aWEvZXh0L3BsYXRmb3JtX2NhbnZhc193aW4uaCIKKyNpbmNsdWRlICJza2lhL2V4dC9za2lhX3V0
aWxzX3dpbi5oIiAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIGRlcGVuZGVuY3kuCisKKyNpbmNsdWRl
IDx3aW5kb3dzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgd2luZG93
c0NhbkhhbmRsZVRleHREcmF3aW5nKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICAv
LyBDaGVjayBmb3Igbm9uLXRyYW5zbGF0aW9uIHRyYW5zZm9ybXMuIFNvbWV0aW1lcyB6b29tcyB3
aWxsIGxvb2sgYmV0dGVyIGluCisgICAgLy8gU2tpYSwgYW5kIHNvbWV0aW1lcyBiZXR0ZXIgaW4g
V2luZG93cy4gVGhlIG1haW4gcHJvYmxlbSBpcyB0aGF0IHpvb21pbmcKKyAgICAvLyBpbiB1c2lu
ZyBTa2lhIHdpbGwgc2hvdyB5b3UgdGhlIGhpbnRlZCBvdXRsaW5lcyBmb3IgdGhlIHNtYWxsZXIg
c2l6ZSwKKyAgICAvLyB3aGljaCBsb29rIHdlaXJkLiBBbGwgZWxzZSBiZWluZyBlcXVhbCwgaXQn
cyBiZXR0ZXIgdG8gdXNlIFdpbmRvd3MnIHRleHQKKyAgICAvLyBkcmF3aW5nLCBzbyB3ZSBkb24n
dCBjaGVjayBmb3Igem9vbXMuCisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJp
eCA9IGNvbnRleHQtPmdldENUTSgpOworICAgIGlmIChtYXRyaXguYigpICE9IDAgfHwgIC8vIFkg
c2tldworICAgICAgICBtYXRyaXguYygpICE9IDApICAgIC8vIFggc2tldworICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBDaGVjayBmb3Igc3Ryb2tlIGVmZmVjdHMuCisgICAgaWYgKGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRUZXh0RHJhd2luZ01vZGUoKSAhPSBjVGV4dEZp
bGwpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENoZWNrIGZvciBzaGFkb3cgZWZm
ZWN0cy4KKyAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmdldERyYXdMb29wZXIo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFNr
aWEgZXF1aXZhbGVudHMgdG8gV2luZG93cyB0ZXh0IGRyYXdpbmcgZnVuY3Rpb25zLiBUaGV5Cisv
LyB3aWxsIGdldCB0aGUgb3V0bGluZXMgZnJvbSBXaW5kb3dzIGFuZCBkcmF3IHRoZW4gdXNpbmcg
U2tpYSB1c2luZyB0aGUgZ2l2ZW4KKy8vIHBhcmFtZXRlcnMgaW4gdGhlIHBhaW50IGFyZ3VtZW50
cy4gVGhpcyBhbGxvd3MgbW9yZSBjb21wbGV4IGVmZmVjdHMgYW5kCisvLyB0cmFuc2Zvcm1zIHRv
IGJlIGRyYXduIHRoYW4gV2luZG93cyBhbGxvd3MuCisvLworLy8gVGhlc2UgZnVuY3Rpb25zIHdp
bGwgYmUgc2lnbmlmaWNhbnRseSBzbG93ZXIgdGhhbiBXaW5kb3dzIEdESSwgYW5kIHRoZSB0ZXh0
CisvLyB3aWxsIGxvb2sgZGlmZmVyZW50IChubyBDbGVhclR5cGUpLCBzbyB1c2Ugb25seSB3aGVu
IG5lY2Vzc2FyeS4KKy8vCisvLyBXaGVuIHlvdSBjYWxsIGEgU2tpYSogdGV4dCBkcmF3aW5nIGZ1
bmN0aW9uLCB2YXJpb3VzIGdseXBoIG91dGxpbmVzIHdpbGwgYmUKKy8vIGNhY2hlZC4gQXMgYSBy
ZXN1bHQsIHlvdSBzaG91bGQgY2FsbCBTa2lhV2luT3V0bGluZUNhY2hlOjpyZW1vdmVQYXRoc0Zv
ckZvbnQgCisvLyB3aGVuIHRoZSBmb250IGlzIGRlc3Ryb3llZCBzbyB0aGF0IHRoZSBjYWNoZSBk
b2VzIG5vdCBvdXRsaXZlIHRoZSBmb250IChzaW5jZQorLy8gdGhlIEhGT05UcyBhcmUgcmVjeWNs
ZWQpLgorCisvLyBBbmFsb2cgb2YgdGhlIFdpbmRvd3MgR0RJIGZ1bmN0aW9uIERyYXdUZXh0LCBl
eGNlcHQgdXNpbmcgdGhlIGdpdmVuIFNrUGFpbnQKKy8vIGF0dHJpYnV0ZXMgZm9yIHRoZSB0ZXh0
LiBTZWUgYWJvdmUgZm9yIG1vcmUuCisvLworLy8gUmV0dXJucyB0cnVlIG9mIHRoZSB0ZXh0IHdh
cyBkcmF3biBzdWNjZXNzZnVsbHkuIEZhbHNlIGluZGljYXRlcyBhbiBlcnJvcgorLy8gZnJvbSBX
aW5kb3dzLgorc3RhdGljIGJvb2wgc2tpYURyYXdUZXh0KEhGT05UIGhmb250LAorICAgICAgICAg
ICAgICAgICAgU2tDYW52YXMqIGNhbnZhcywKKyAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUG9p
bnQmIHBvaW50LAorICAgICAgICAgICAgICAgICAgU2tQYWludCogcGFpbnQsCisgICAgICAgICAg
ICAgICAgICBjb25zdCBXT1JEKiBnbHlwaHMsCisgICAgICAgICAgICAgICAgICBjb25zdCBpbnQq
IGFkdmFuY2VzLAorICAgICAgICAgICAgICAgICAgaW50IG51bUdseXBocykKK3sKKyAgICBIREMg
ZGMgPSBHZXREQygwKTsKKyAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoZGMsIGhm
b250KTsKKworICAgIGNhbnZhcy0+c2F2ZSgpOworICAgIGNhbnZhcy0+dHJhbnNsYXRlKHBvaW50
LmZYLCBwb2ludC5mWSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUdseXBoczsgaSsr
KSB7CisgICAgICAgIGNvbnN0IFNrUGF0aCogcGF0aCA9IFNraWFXaW5PdXRsaW5lQ2FjaGU6Omxv
b2t1cE9yQ3JlYXRlUGF0aEZvckdseXBoKGRjLCBoZm9udCwgZ2x5cGhzW2ldKTsKKyAgICAgICAg
aWYgKCFwYXRoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYW52YXMtPmRy
YXdQYXRoKCpwYXRoLCAqcGFpbnQpOworICAgICAgICBjYW52YXMtPnRyYW5zbGF0ZShhZHZhbmNl
c1tpXSwgMCk7CisgICAgfQorCisgICAgY2FudmFzLT5yZXN0b3JlKCk7CisKKyAgICBTZWxlY3RP
YmplY3QoZGMsIG9sZEZvbnQpOworICAgIFJlbGVhc2VEQygwLCBkYyk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3N0YXRpYyBib29sIHBhaW50U2tpYVRleHQoUGxhdGZvcm1Db250ZXh0U2tpYSog
cGxhdGZvcm1Db250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBIRk9OVCBoZm9udCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bUdseXBocywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV09SRCogZ2x5cGhzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBpbnQqIGFkdmFuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
a1BvaW50JiBvcmlnaW4pCit7CisgICAgaW50IHRleHRNb2RlID0gcGxhdGZvcm1Db250ZXh0LT5n
ZXRUZXh0RHJhd2luZ01vZGUoKTsKKworICAgIC8vIEZpbGxpbmcgKGlmIG5lY2Vzc2FyeSkuIFRo
aXMgaXMgdGhlIGNvbW1vbiBjYXNlLgorICAgIFNrUGFpbnQgcGFpbnQ7CisgICAgcGxhdGZvcm1D
b250ZXh0LT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOworICAgIHBhaW50LnNldEZsYWdz
KFNrUGFpbnQ6OmtBbnRpQWxpYXNfRmxhZyk7CisgICAgYm9vbCBkaWRGaWxsID0gZmFsc2U7Cisg
ICAgaWYgKCh0ZXh0TW9kZSAmIGNUZXh0RmlsbCkgJiYgU2tDb2xvckdldEEocGFpbnQuZ2V0Q29s
b3IoKSkpIHsKKyAgICAgICAgaWYgKCFza2lhRHJhd1RleHQoaGZvbnQsIHBsYXRmb3JtQ29udGV4
dC0+Y2FudmFzKCksIG9yaWdpbiwgJnBhaW50LCAmZ2x5cGhzWzBdLCAmYWR2YW5jZXNbMF0sIG51
bUdseXBocykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRpZEZpbGwgPSB0
cnVlOworICAgIH0KKworICAgIC8vIFN0cm9raW5nIG9uIHRvcCAoaWYgbmVjZXNzYXJ5KS4KKyAg
ICBpZiAoKHRleHRNb2RlICYgV2ViQ29yZTo6Y1RleHRTdHJva2UpCisgICAgICAgICYmIHBsYXRm
b3JtQ29udGV4dC0+Z2V0U3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZQorICAgICAgICAmJiBwbGF0
Zm9ybUNvbnRleHQtPmdldFN0cm9rZVRoaWNrbmVzcygpID4gMCkgeworCisgICAgICAgIHBhaW50
LnJlc2V0KCk7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+c2V0dXBQYWludEZvclN0cm9raW5n
KCZwYWludCwgMCwgMCk7CisgICAgICAgIHBhaW50LnNldEZsYWdzKFNrUGFpbnQ6OmtBbnRpQWxp
YXNfRmxhZyk7CisgICAgICAgIGlmIChkaWRGaWxsKSB7CisgICAgICAgICAgICAvLyBJZiB0aGVy
ZSBpcyBhIHNoYWRvdyBhbmQgd2UgZmlsbGVkIGFib3ZlLCB0aGVyZSB3aWxsIGFscmVhZHkgYmUK
KyAgICAgICAgICAgIC8vIGEgc2hhZG93LiBXZSBkb24ndCB3YW50IHRvIGRyYXcgaXQgYWdhaW4g
b3IgaXQgd2lsbCBiZSB0b28gZGFyaworICAgICAgICAgICAgLy8gYW5kIGl0IHdpbGwgZ28gb24g
dG9wIG9mIHRoZSBmaWxsLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE5vdGUgdGhh
dCB0aGlzIGlzbid0IHN0cmljdGx5IGNvcnJlY3QsIHNpbmNlIHRoZSBzdHJva2UgY291bGQgYmUK
KyAgICAgICAgICAgIC8vIHZlcnkgdGhpY2sgYW5kIHRoZSBzaGFkb3cgd291bGRuJ3QgYWNjb3Vu
dCBmb3IgdGhpcy4gVGhlICJyaWdodCIKKyAgICAgICAgICAgIC8vIHRoaW5nIHdvdWxkIGJlIHRv
IGRyYXcgdG8gYSBuZXcgbGF5ZXIgYW5kIHRoZW4gZHJhdyB0aGF0IGxheWVyCisgICAgICAgICAg
ICAvLyB3aXRoIGEgc2hhZG93LiBCdXQgdGhpcyBpcyBhIGxvdCBvZiBleHRyYSB3b3JrIGZvciBz
b21ldGhpbmcKKyAgICAgICAgICAgIC8vIHRoYXQgaXNuJ3Qgbm9ybWFsbHkgYW4gaXNzdWUuCisg
ICAgICAgICAgICBwYWludC5zZXRMb29wZXIoMCktPnNhZmVVbnJlZigpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCFza2lhRHJhd1RleHQoaGZvbnQsIHBsYXRmb3JtQ29udGV4dC0+Y2FudmFz
KCksIG9yaWdpbiwgJnBhaW50LCAmZ2x5cGhzWzBdLCAmYWR2YW5jZXNbMF0sIG51bUdseXBocykp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQs
CisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCisgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAorICAgICAg
ICAgICAgICAgICAgICAgIGludCBmcm9tLAorICAgICAgICAgICAgICAgICAgICAgIGludCBudW1H
bHlwaHMsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNv
bnN0Cit7CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBncmFwaGljc0Nv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgLy8gTWF4IGJ1ZmZlciBsZW5ndGggcGFz
c2VkIHRvIHRoZSB1bmRlcmx5aW5nIHdpbmRvd3MgQVBJLgorICAgIGNvbnN0IGludCBrTWF4QnVm
ZmVyTGVuZ3RoID0gMTAyNDsKKyAgICAvLyBEZWZhdWx0IHNpemUgZm9yIHRoZSBidWZmZXIuIEl0
IHNob3VsZCBiZSBlbm91Z2ggZm9yIG1vc3Qgb2YgY2FzZXMuCisgICAgY29uc3QgaW50IGtEZWZh
dWx0QnVmZmVyTGVuZ3RoID0gMjU2OworCisgICAgU2tDb2xvciBjb2xvciA9IGNvbnRleHQtPmZp
bGxDb2xvcigpOworICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBTa0NvbG9yR2V0QShjb2xvcik7
CisgICAgLy8gU2tpcCAxMDAlIHRyYW5zcGFyZW50IHRleHQ7IG5vIG5lZWQgdG8gZHJhdyBhbnl0
aGluZy4KKyAgICBpZiAoIWFscGhhICYmIGNvbnRleHQtPmdldFN0cm9rZVN0eWxlKCkgPT0gTm9T
dHJva2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFNldCB1cCBvdXIgZ3JhcGhpY3MgY29u
dGV4dC4KKyAgICBIREMgaGRjID0gY29udGV4dC0+Y2FudmFzKCktPmJlZ2luUGxhdGZvcm1QYWlu
dCgpOworICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVjdChoZGMsIGZvbnQtPnBsYXRm
b3JtRGF0YSgpLmhmb250KCkpOworCisgICAgLy8gVE9ETyhtYXJ1ZWwpOiBodHRwOi8vYi83MDA0
NjQgU2V0VGV4dENvbG9yIGRvZXNuJ3Qgc3VwcG9ydCB0cmFuc3BhcmVuY3kuCisgICAgLy8gRW5m
b3JjZSBub24tdHJhbnNwYXJlbnQgY29sb3IuCisgICAgY29sb3IgPSBTa0NvbG9yU2V0UkdCKFNr
Q29sb3JHZXRSKGNvbG9yKSwgU2tDb2xvckdldEcoY29sb3IpLCBTa0NvbG9yR2V0Qihjb2xvcikp
OworICAgIFNldFRleHRDb2xvcihoZGMsIHNraWE6OlNrQ29sb3JUb0NPTE9SUkVGKGNvbG9yKSk7
CisgICAgU2V0QmtNb2RlKGhkYywgVFJBTlNQQVJFTlQpOworCisgICAgLy8gV2luZG93cyBuZWVk
cyB0aGUgY2hhcmFjdGVycyBhbmQgdGhlIGFkdmFuY2VzIGluIG5pY2UgY29udGlndW91cworICAg
IC8vIGJ1ZmZlcnMsIHdoaWNoIHdlIGJ1aWxkIGhlcmUuCisgICAgVmVjdG9yPFdPUkQsIGtEZWZh
dWx0QnVmZmVyTGVuZ3RoPiBnbHlwaHM7CisgICAgVmVjdG9yPGludCwga0RlZmF1bHRCdWZmZXJM
ZW5ndGg+IGFkdmFuY2VzOworCisgICAgLy8gQ29tcHV0ZSB0aGUgY29vcmRpbmF0ZS4gVGhlICdv
cmlnaW4nIHJlcHJlc2VudHMgdGhlIGJhc2VsaW5lLCBzbyB3ZSBuZWVkCisgICAgLy8gdG8gbW92
ZSBpdCB1cCB0byB0aGUgdG9wIG9mIHRoZSBib3VuZGluZyBzcXVhcmUuCisgICAgaW50IHggPSBz
dGF0aWNfY2FzdDxpbnQ+KHBvaW50LngoKSk7CisgICAgaW50IGxpbmVUb3AgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBvaW50LnkoKSkgLSBmb250LT5hc2NlbnQoKTsKKworICAgIGJvb2wgY2FuVXNlR0RJ
ID0gd2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nKGdyYXBoaWNzQ29udGV4dCk7CisKKyAgICAv
LyBXZSBkcmF3IHRoZSBnbHlwaHMgaW4gY2h1bmtzIHRvIGF2b2lkIGhhdmluZyB0byBkbyBhIGhl
YXAgYWxsb2NhdGlvbiBmb3IKKyAgICAvLyB0aGUgYXJyYXlzIG9mIGNoYXJhY3RlcnMgYW5kIGFk
dmFuY2VzLiBTaW5jZSBFeHRUZXh0T3V0IGlzIHRoZQorICAgIC8vIGxvd2VzdC1sZXZlbCB0ZXh0
IG91dHB1dCBmdW5jdGlvbiBvbiBXaW5kb3dzLCB0aGVyZSBzaG91bGQgYmUgbGl0dGxlCisgICAg
Ly8gcGVuYWx0eSBmb3Igc3BsaXR0aW5nIHVwIHRoZSB0ZXh0LiBPbiB0aGUgb3RoZXIgaGFuZCwg
dGhlIGJ1ZmZlciBjYW5ub3QKKyAgICAvLyBiZSBiaWdnZXIgdGhhbiA0MDk0IG9yIHRoZSBmdW5j
dGlvbiB3aWxsIGZhaWwuCisgICAgaW50IGdseXBoSW5kZXggPSAwOworICAgIHdoaWxlIChnbHlw
aEluZGV4IDwgbnVtR2x5cGhzKSB7CisgICAgICAgIC8vIGhvdyBtYW55IGNoYXJzIHdpbGwgYmUg
aW4gdGhpcyBjaHVuaz8KKyAgICAgICAgaW50IGN1ckxlbiA9IHN0ZDo6bWluKGtNYXhCdWZmZXJM
ZW5ndGgsIG51bUdseXBocyAtIGdseXBoSW5kZXgpOworCisgICAgICAgIGdseXBocy5yZXNpemUo
Y3VyTGVuKTsKKyAgICAgICAgYWR2YW5jZXMucmVzaXplKGN1ckxlbik7CisKKyAgICAgICAgaW50
IGN1cldpZHRoID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjdXJMZW47ICsraSwg
KytnbHlwaEluZGV4KSB7CisgICAgICAgICAgICBnbHlwaHNbaV0gPSBnbHlwaEJ1ZmZlci5nbHlw
aEF0KGZyb20gKyBnbHlwaEluZGV4KTsKKyAgICAgICAgICAgIGFkdmFuY2VzW2ldID0gc3RhdGlj
X2Nhc3Q8aW50PihnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoZnJvbSArIGdseXBoSW5kZXgpKTsKKyAg
ICAgICAgICAgIGN1cldpZHRoICs9IGFkdmFuY2VzW2ldOworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIGZvciAoaW50IGV4ZWN1dGlvbnMgPSAwOyBl
eGVjdXRpb25zIDwgMjsgKytleGVjdXRpb25zKSB7CisgICAgICAgICAgICBpZiAoY2FuVXNlR0RJ
KQorICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAhIUV4dFRleHRPdXQoaGRjLCB4LCBsaW5lVG9w
LCBFVE9fR0xZUEhfSU5ERVgsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KCZn
bHlwaHNbMF0pLCBjdXJMZW4sICZhZHZhbmNlc1swXSk7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAvLyBTa2lhJ3MgdGV4dCBkcmFpbmcgb3JpZ2luIGlzIHRoZSBiYXNlbGlu
ZSwgbGlrZSBXZWJLaXQsIG5vdAorICAgICAgICAgICAgICAgIC8vIHRoZSB0b3AsIGxpa2UgV2lu
ZG93cy4KKyAgICAgICAgICAgICAgICBTa1BvaW50IG9yaWdpbiA9IHsgeCwgcG9pbnQueSgpIH07
CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHBhaW50U2tpYVRleHQoY29udGV4dCwgZm9udC0+
cGxhdGZvcm1EYXRhKCkuaGZvbnQoKSwgbnVtR2x5cGhzLCByZWludGVycHJldF9jYXN0PGNvbnN0
IFdPUkQqPigmZ2x5cGhzWzBdKSwgJmFkdmFuY2VzWzBdLCBvcmlnaW4pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgZXhlY3V0aW9ucyA9PSAwKSB7CisgICAg
ICAgICAgICAgICAgLy8gQXNrIHRoZSBicm93c2VyIHRvIGxvYWQgdGhlIGZvbnQgZm9yIHVzIGFu
ZCByZXRyeS4KKyAgICAgICAgICAgICAgICBDaHJvbWl1bUJyaWRnZTo6ZW5zdXJlRm9udExvYWRl
ZChmb250LT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpKTsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgQVNTRVJUKHN1Y2Nlc3MpOworCisgICAgICAgIHggKz0gY3VyV2lkdGg7CisgICAgfQorCisg
ICAgU2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7CisgICAgY29udGV4dC0+Y2FudmFzKCktPmVu
ZFBsYXRmb3JtUGFpbnQoKTsKK30KKworRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiBwb2ludCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG8pIGNvbnN0Cit7CisgICAgVW5pc2NyaWJlSGVs
cGVyVGV4dFJ1biBzdGF0ZShydW4sICp0aGlzKTsKKyAgICBmbG9hdCBsZWZ0ID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHBvaW50LngoKSArIHN0YXRlLkNoYXJhY3RlclRvWChmcm9tKSk7CisgICAgZmxv
YXQgcmlnaHQgPSBzdGF0aWNfY2FzdDxmbG9hdD4ocG9pbnQueCgpICsgc3RhdGUuQ2hhcmFjdGVy
VG9YKHRvKSk7CisKKyAgICAvLyBJZiB0aGUgdGV4dCBpcyBSVEwsIGxlZnQgd2lsbCBhY3R1YWxs
eSBiZSBhZnRlciByaWdodC4KKyAgICBpZiAobGVmdCA8IHJpZ2h0KQorICAgICAgcmV0dXJuIEZs
b2F0UmVjdChsZWZ0LCBzdGF0aWNfY2FzdDxmbG9hdD4ocG9pbnQueSgpKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgcmlnaHQgLSBsZWZ0LCBzdGF0aWNfY2FzdDxmbG9hdD4oaCkpOworCisgICAg
cmV0dXJuIEZsb2F0UmVjdChyaWdodCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBvaW50LnkoKSksCisg
ICAgICAgICAgICAgICAgICAgICBsZWZ0IC0gcmlnaHQsIHN0YXRpY19jYXN0PGZsb2F0PihoKSk7
Cit9CisKK3ZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGV4dFJ1biYgcnVu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCB0bykgY29uc3QKK3sKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgVW5pc2NyaWJl
SGVscGVyVGV4dFJ1biBzdGF0ZShydW4sICp0aGlzKTsKKworICAgIFNrQ29sb3IgY29sb3IgPSBj
b250ZXh0LT5maWxsQ29sb3IoKTsKKyAgICB1bnNpZ25lZCBjaGFyIGFscGhhID0gU2tDb2xvckdl
dEEoY29sb3IpOworICAgIC8vIFNraXAgMTAwJSB0cmFuc3BhcmVudCB0ZXh0OyBubyBuZWVkIHRv
IGRyYXcgYW55dGhpbmcuCisgICAgaWYgKCFhbHBoYSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
SERDIGhkYyA9IGNvbnRleHQtPmNhbnZhcygpLT5iZWdpblBsYXRmb3JtUGFpbnQoKTsKKworICAg
IC8vIFRPRE8obWFydWVsKTogaHR0cDovL2IvNzAwNDY0IFNldFRleHRDb2xvciBkb2Vzbid0IHN1
cHBvcnQgdHJhbnNwYXJlbmN5LgorICAgIC8vIEVuZm9yY2Ugbm9uLXRyYW5zcGFyZW50IGNvbG9y
LgorICAgIGNvbG9yID0gU2tDb2xvclNldFJHQihTa0NvbG9yR2V0Uihjb2xvciksIFNrQ29sb3JH
ZXRHKGNvbG9yKSwgU2tDb2xvckdldEIoY29sb3IpKTsKKyAgICBTZXRUZXh0Q29sb3IoaGRjLCBz
a2lhOjpTa0NvbG9yVG9DT0xPUlJFRihjb2xvcikpOworICAgIFNldEJrTW9kZShoZGMsIFRSQU5T
UEFSRU5UKTsKKworICAgIC8vIFVuaXNjcmliZSBjb3VudHMgdGhlIGNvb3JkaW5hdGVzIGZyb20g
dGhlIHVwcGVyIGxlZnQsIHdoaWxlIFdlYktpdCB1c2VzCisgICAgLy8gdGhlIGJhc2VsaW5lLCBz
byB3ZSBoYXZlIHRvIHN1YnRyYWN0IG9mZiB0aGUgYXNjZW50LgorICAgIHN0YXRlLkRyYXcoaGRj
LCBzdGF0aWNfY2FzdDxpbnQ+KHBvaW50LngoKSksIHN0YXRpY19jYXN0PGludD4ocG9pbnQueSgp
IC0gYXNjZW50KCkpLCBmcm9tLCB0byk7CisgICAgY29udGV4dC0+Y2FudmFzKCktPmVuZFBsYXRm
b3JtUGFpbnQoKTsKK30KKworZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1bikgY29uc3QKK3sKKyAgICBVbmlzY3JpYmVIZWxwZXJUZXh0UnVuIHN0
YXRlKHJ1biwgKnRoaXMpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGUuV2lk
dGgoKSk7Cit9CisKK2ludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgaW50IHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoreworICAgIC8vIE1h
YyBjb2RlIGlnbm9yZXMgaW5jbHVkZVBhcnRpYWxHbHlwaHMsIGFuZCB0aGV5IGRvbid0IGtub3cg
d2hhdCBpdCdzCisgICAgLy8gc3VwcG9zZWQgdG8gZG8sIHNvIHdlIGp1c3QgaWdub3JlIGl0IGFz
IHdlbGwuCisgICAgVW5pc2NyaWJlSGVscGVyVGV4dFJ1biBzdGF0ZShydW4sICp0aGlzKTsKKyAg
ICBpbnQgY2hhcl9pbmRleCA9IHN0YXRlLlhUb0NoYXJhY3Rlcih4KTsKKworICAgIC8vIFhUb0No
YXJhY3RlciB3aWxsIHJldHVybiAtMSBpZiB0aGUgcG9zaXRpb24gaXMgYmVmb3JlIHRoZSBmaXJz
dAorICAgIC8vIGNoYXJhY3RlciAod2UgZ2V0IGNhbGxlZCBsaWtlIHRoaXMgc29tZXRpbWVzKS4K
KyAgICBpZiAoY2hhcl9pbmRleCA8IDApCisgICAgICBjaGFyX2luZGV4ID0gMDsKKyAgICByZXR1
cm4gY2hhcl9pbmRleDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>