<?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>161817</bug_id>
          
          <creation_ts>2016-09-09 14:47:30 -0700</creation_ts>
          <short_desc>[Win][Direct2D] Create a Direct2D Backend</short_desc>
          <delta_ts>2019-09-19 21:11:55 -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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=163157</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>161818</dependson>
    
    <dependson>162090</dependson>
    
    <dependson>162712</dependson>
    
    <dependson>162761</dependson>
    
    <dependson>162917</dependson>
    
    <dependson>162923</dependson>
    
    <dependson>162924</dependson>
    
    <dependson>162925</dependson>
    
    <dependson>162953</dependson>
    
    <dependson>162977</dependson>
    
    <dependson>163235</dependson>
    
    <dependson>163241</dependson>
    
    <dependson>163769</dependson>
    
    <dependson>163898</dependson>
    
    <dependson>164005</dependson>
    
    <dependson>199199</dependson>
    
    <dependson>200093</dependson>
    
    <dependson>200270</dependson>
    
    <dependson>200539</dependson>
    
    <dependson>200771</dependson>
    
    <dependson>201996</dependson>
    
    <dependson>202021</dependson>
          <blocked>199206</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pvollan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1228352</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-09 14:47:30 -0700</bug_when>
    <thetext>Now that we require Windows 7 as the baseline Windows OS, we can safely take advantage of Direct2D for various operations. Let&apos;s starting using these optimized graphics and imaging libraries on the Windows platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234677</commentid>
    <comment_count>1</comment_count>
      <attachid>290167</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-28 20:05:27 -0700</bug_when>
    <thetext>Created attachment 290167
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234678</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-28 20:07:27 -0700</bug_when>
    <thetext>Attachment 290167 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/win/FontDirect2D.cpp:34:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290167</attachid>
            <date>2016-09-28 20:05:27 -0700</date>
            <delta_ts>2016-09-28 20:15:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161817-20160928200226.patch</filename>
            <type>text/plain</type>
            <size>39630</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE2LTA5LTI4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBB
ZGQgRDJEIEZvbnQgaGFuZGxpbmcgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYxODE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBsYW5kcyBhIHNldCBvZiBuZXcgZmlsZXMgdGhh
dCBpbXBsZW1lbnQgCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHVudGlsIGNvbXBsZXRlIGJhY2tl
bmQgbGFuZHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKTogQWRkIGNhc2UgZm9yIERpcmVjdDJELgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhKTogRml4IHdoaXRlc3BhY2UuCisgICAgICAgIChXZWJDb3JlOjpGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKTogQWRkIERpcmVjdDJEIGNhc2UuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnREaXJlY3QyRC5jcHA6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhRGlyZWN0MkQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJl
ZU5vZGVEaXJlY3QyRC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9TaW1wbGVGb250RGF0YURpcmVjdDJELmNwcDogQWRkZWQuCisKIDIwMTYtMDktMjggIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBMb2cgY29uc29sZSBtZXNzYWdl
cyB3aGVuIHRoZSBhbmNob3IgZG93bmxvYWQgYXR0cmlidXRlIGlzIGlnbm9yZWQKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDIwNjUyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNTcsNiArNTcsMTEgQEAKICNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIKICNlbmRpZgog
CisjaWYgVVNFKERJUkVDVDJEKQoraW50ZXJmYWNlIElEV3JpdGVGYWN0b3J5OworaW50ZXJmYWNl
IElEV3JpdGVHZGlJbnRlcm9wOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgR2x5cGhQYWdlOwpAQCAtMTQzLDcgKzE0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9hZGp1
c3RlZFNwYWNlV2lkdGggPSBzcGFjZVdpZHRoOwogICAgIH0KIAotI2lmIFVTRShDRykgfHwgVVNF
KENBSVJPKQorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKSB8fCBVU0UoQ0FJUk8pCiAgICAg
ZmxvYXQgc3ludGhldGljQm9sZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9s
ZE9mZnNldDsgfQogI2VuZGlmCiAKQEAgLTE5OCw2ICsyMDMsMTEgQEAgcHVibGljOgogICAgIHN0
YXRpYyBmbG9hdCBhc2NlbnRDb25zaWRlcmluZ01hY0FzY2VudEhhY2soY29uc3QgV0NIQVIqLCBm
bG9hdCBhc2NlbnQsIGZsb2F0IGRlc2NlbnQpOwogI2VuZGlmCiAKKyNpZiBVU0UoRElSRUNUMkQp
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEV3JpdGVGYWN0b3J5KiBzeXN0ZW1EV3JpdGVG
YWN0b3J5KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEV3JpdGVHZGlJbnRlcm9wKiBz
eXN0ZW1EV3JpdGVHZGlJbnRlcm9wKCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBGb250KGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzQ3VzdG9tRm9udCA9IGZhbHNlLCBib29sIGlz
TG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2sgPSBmYWxzZSk7
CiAKQEAgLTI2Nyw3ICsyNzcsNyBAQCBwcml2YXRlOgogCiAgICAgbXV0YWJsZSBzdGQ6OnVuaXF1
ZV9wdHI8RGVyaXZlZEZvbnRzPiBtX2Rlcml2ZWRGb250RGF0YTsKIAotI2lmIFVTRShDRykgfHwg
VVNFKENBSVJPKQorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKSB8fCBVU0UoQ0FJUk8pCiAg
ICAgZmxvYXQgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OwogI2VuZGlmCiAKQEAgLTMzOCw3ICszNDgs
NyBAQCBBTFdBWVNfSU5MSU5FIGZsb2F0IEZvbnQ6OndpZHRoRm9yR2x5cGgoCiAKICNpZiBFTkFC
TEUoT1BFTlRZUEVfVkVSVElDQUwpCiAgICAgaWYgKG1fdmVydGljYWxEYXRhKSB7Ci0jaWYgVVNF
KENHKSB8fCBVU0UoQ0FJUk8pCisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpIHx8IFVTRShD
QUlSTykKICAgICAgICAgd2lkdGggPSBtX3ZlcnRpY2FsRGF0YS0+YWR2YW5jZUhlaWdodCh0aGlz
LCBnbHlwaCkgKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7CiAjZWxzZQogICAgICAgICB3aWR0aCA9
IG1fdmVydGljYWxEYXRhLT5hZHZhbmNlSGVpZ2h0KHRoaXMsIGdseXBoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgJ
KHJldmlzaW9uIDIwNjUyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRQbGF0Zm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1
ZGUgIlRleHRGbGFncy5oIgogCiAjaWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgIkNPTVB0ci5o
IgogI2luY2x1ZGUgIlNoYXJlZEdESU9iamVjdC5oIgogI2VuZGlmCiAKQEAgLTY1LDYgKzY2LDgg
QEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DVEZvbnQqIENURm9udFJlZgogI2lmIFBMQVRGT1JN
KFdJTikKICNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgogdHlwZWRlZiBzdHJ1Y3QgSEZP
TlRfXyogSEZPTlQ7CitpbnRlcmZhY2UgSURXcml0ZUZvbnQ7CitpbnRlcmZhY2UgSURXcml0ZUZv
bnRGYWNlOwogI2VuZGlmCiAKIApAQCAtMTAzLDYgKzEwNiw4IEBAIHB1YmxpYzoKIAogI2lmIFVT
RShDRykKICAgICBGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4sIENHRm9udFJlZiwg
ZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIGJv
b2wgdXNlR0RJKTsKKyNlbGlmIFVTRShESVJFQ1QyRCkKKyAgICBGb250UGxhdGZvcm1EYXRhKEdE
SU9iamVjdDxIRk9OVD4sIElEV3JpdGVGb250KiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNC
b2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJKTsKICNlbGlmIFVTRShDQUlS
TykKICAgICBGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4sIGNhaXJvX2ZvbnRfZmFj
ZV90KiwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7CiAjZW5kaWYKQEAgLTEz
Nyw2ICsxNDIsMTEgQEAgcHVibGljOgogICAgIENHRm9udFJlZiBjZ0ZvbnQoKSBjb25zdCB7IHJl
dHVybiBtX2NnRm9udC5nZXQoKTsgfQogI2VuZGlmCiAKKyNpZiBVU0UoRElSRUNUMkQpCisgICAg
SURXcml0ZUZvbnQqIGR3Rm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZHdGb250LmdldCgpOyB9Cisg
ICAgSURXcml0ZUZvbnRGYWNlKiBkd0ZvbnRGYWNlKCkgY29uc3QgeyByZXR1cm4gbV9kd0ZvbnRG
YWNlLmdldCgpOyB9CisjZW5kaWYKKwogICAgIGJvb2wgaXNGaXhlZFBpdGNoKCkgY29uc3Q7CiAg
ICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgIGJvb2wgc3ludGhl
dGljQm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9sZDsgfQpAQCAtMjQxLDYgKzI1
MSwxMCBAQCBwcml2YXRlOgogI2lmIFVTRShDRykgJiYgKFBMQVRGT1JNKFdJTikgfHwgKFBMQVRG
T1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMTIwMCkgfHwg
KFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDAw
MDApKQogICAgIFJldGFpblB0cjxDR0ZvbnRSZWY+IG1fY2dGb250OwogI2VuZGlmCisjaWYgVVNF
KERJUkVDVDJEKQorICAgIENPTVB0cjxJRFdyaXRlRm9udD4gbV9kd0ZvbnQ7CisgICAgQ09NUHRy
PElEV3JpdGVGb250RmFjZT4gbV9kd0ZvbnRGYWNlOworI2VuZGlmCiAjaWYgVVNFKENBSVJPKQog
ICAgIFJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90PiBtX3NjYWxlZEZvbnQ7CiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q2FjaGVXaW4uY3BwCShyZXZpc2lvbiAyMDY1MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiAr
NDcsMTAgQEAKICNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50
ZXJmYWNlLmg+CiAjZW5kaWYKIAorI2lmIFVTRShESVJFQ1QyRCkKKyNpbmNsdWRlIDxkd3JpdGUu
aD4KKyNlbmRpZgorCiB1c2luZyBzdGQ6Om1pbjsKIAogbmFtZXNwYWNlIFdlYkNvcmUKQEAgLTU0
OSw2ICs1NTMsNyBAQCBzdGF0aWMgaW50IENBTExCQUNLIHRyYWl0c0luRmFtaWx5RW51bVByCiAg
ICAgcHJvY0RhdGEtPm1fdHJhaXRzTWFza3MuYWRkKHRyYWl0c01hc2spOwogICAgIHJldHVybiAx
OwogfQorCiBWZWN0b3I8Rm9udFRyYWl0c01hc2s+IEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1p
bHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQogewogICAgIEhXbmREQyBoZGMoMCk7
CkBAIC01OTksNiArNjA0LDggQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZv
bnRDYQogCiAjaWYgVVNFKENHKQogICAgIGJvb2wgZm9udENyZWF0aW9uRmFpbGVkID0gIXJlc3Vs
dC0+Y2dGb250KCk7CisjZWxpZiBVU0UoRElSRUNUMkQpCisgICAgYm9vbCBmb250Q3JlYXRpb25G
YWlsZWQgPSAhcmVzdWx0LT5kd0ZvbnQoKTsKICNlbGlmIFVTRShDQUlSTykKICAgICBib29sIGZv
bnRDcmVhdGlvbkZhaWxlZCA9ICFyZXN1bHQtPnNjYWxlZEZvbnQoKTsKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkocmV2aXNpb24gMjA2NTI5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMiArMjUsMjAgQEAKICNpbmNsdWRlICJGb250UGxhdGZv
cm1EYXRhLmgiCiAjaW5jbHVkZSAiT3BlblR5cGVVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2Vy
dmljZXMuaD4KLSNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50
ZXJmYWNlLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgogI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+CiAKKyNpZiBVU0UoQ0cp
CisjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Cisj
aW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgor
I2VuZGlmCisKKyNpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUg
PGR3cml0ZS5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKQEAgLTM4LDcgKzQ2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIEZvbnRDdXN0
b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkKIHsKICAgICBpZiAobV9m
b250UmVmZXJlbmNlKQotICAgICAgICAgICAgUmVtb3ZlRm9udE1lbVJlc291cmNlRXgobV9mb250
UmVmZXJlbmNlKTsKKyAgICAgICAgUmVtb3ZlRm9udE1lbVJlc291cmNlRXgobV9mb250UmVmZXJl
bmNlKTsKIH0KIAogRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBib29s
IGJvbGQsIGJvb2wgaXRhbGljKQpAQCAtNjgsOCArNzYsMTUgQEAgRm9udFBsYXRmb3JtRGF0YSBG
b250Q3VzdG9tUGxhdGZvcm1EYXRhOgogCiAgICAgYXV0byBoZm9udCA9IGFkb3B0R0RJT2JqZWN0
KDo6Q3JlYXRlRm9udEluZGlyZWN0KCZsb2dGb250KSk7CiAKKyNpZiBVU0UoQ0cpCiAgICAgUmV0
YWluUHRyPENHRm9udFJlZj4gY2dGb250ID0gYWRvcHRDRihDR0ZvbnRDcmVhdGVXaXRoUGxhdGZv
cm1Gb250KCZsb2dGb250KSk7CiAgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoV1RGTW92ZSho
Zm9udCksIGNnRm9udC5nZXQoKSwgc2l6ZSwgYm9sZCwgaXRhbGljLCByZW5kZXJpbmdNb2RlID09
IEZvbnRSZW5kZXJpbmdNb2RlOjpBbHRlcm5hdGUpOworI2Vsc2UKKyAgICBDT01QdHI8SURXcml0
ZUZvbnQ+IGR3Rm9udDsKKyAgICBIUkVTVUxUIGhyID0gRm9udDo6c3lzdGVtRFdyaXRlR2RpSW50
ZXJvcCgpLT5DcmVhdGVGb250RnJvbUxPR0ZPTlQoJmxvZ0ZvbnQsICZkd0ZvbnQpOworICAgIFJF
TEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRh
KFdURk1vdmUoaGZvbnQpLCBkd0ZvbnQuZ2V0KCksIHNpemUsIGJvbGQsIGl0YWxpYywgcmVuZGVy
aW5nTW9kZSA9PSBGb250UmVuZGVyaW5nTW9kZTo6QWx0ZXJuYXRlKTsKKyNlbmRpZgogfQogCiAv
LyBDcmVhdGVzIGEgdW5pcXVlIGFuZCB1bnByZWRpY3RhYmxlIGZvbnQgbmFtZSwgaW4gb3JkZXIg
dG8gYXZvaWQgY29sbGlzaW9ucyBhbmQgdG8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250RGlyZWN0MkQuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250RGlyZWN0MkQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKKworI2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgorI2luY2x1ZGUgIkNPTVB0ci5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lv
bi5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZURpcmVjdDJELmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlVuaXNj
cmliZUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJXZWJDb3JlVGV4dFJlbmRlcmVyLmgiCisjaW5j
bHVkZSA8ZDJkMS5oPgorI2luY2x1ZGUgPGR3cml0ZS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgaW50IHN5bnRoZXRpY09ibGlx
dWVBbmdsZSA9IDE0OworCit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsCisgICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkK
K3sKKyAgICBhdXRvIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7
CisgICAgYm9vbCBzaG91bGRVc2VGb250U21vb3RoaW5nID0gV2ViQ29yZVNob3VsZFVzZUZvbnRT
bW9vdGhpbmcoKTsKKworICAgIHN3aXRjaCAoc21vb3RoaW5nTW9kZSkgeworICAgIGNhc2UgQW50
aWFsaWFzZWQ6IHsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh0
cnVlKTsKKyAgICAgICAgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IGZhbHNlOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBTdWJwaXhlbEFudGlhbGlhc2VkOiB7CisgICAgICAgIGdy
YXBoaWNzQ29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7CisgICAgICAgIHNob3VsZFVz
ZUZvbnRTbW9vdGhpbmcgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBO
b1Ntb290aGluZzogeworICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFz
KGZhbHNlKTsKKyAgICAgICAgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IGZhbHNlOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBdXRvU21vb3RoaW5nOiB7CisgICAgICAgIC8vIEZv
ciB0aGUgQXV0b1Ntb290aCBjYXNlLCBkb24ndCBkbyBhbnl0aGluZyEgS2VlcCB0aGUgZGVmYXVs
dCBzZXR0aW5ncy4KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7CisKKyAgICBncmFwaGljc0Nv
bnRleHQuc2F2ZSgpOworCisgICAgRDJEMV9NQVRSSVhfM1gyX0YgbWF0cml4OworICAgIGNvbnRl
eHQtPkdldFRyYW5zZm9ybSgmbWF0cml4KTsKKworICAgIGlmIChwbGF0Zm9ybURhdGEuc3ludGhl
dGljT2JsaXF1ZSgpKSB7CisgICAgICAgIHN0YXRpYyBmbG9hdCBza2V3ID0gLXRhbmYoc3ludGhl
dGljT2JsaXF1ZUFuZ2xlICogcGlGbG9hdCAvIDE4MC4wZik7CisgICAgICAgIGF1dG8gc2tld01h
dHJpeCA9IEQyRDE6Ok1hdHJpeDN4MkY6OlNrZXcoc2tldywgMCk7CisgICAgICAgIGNvbnRleHQt
PlNldFRyYW5zZm9ybShtYXRyaXggKiBza2V3TWF0cml4KTsKKyAgICB9CisKKyAgICAvLyBVbmlz
Y3JpYmUgZ2l2ZXMgdXMgb2Zmc2V0cyB0byBoZWxwIHJlZmluZSB0aGUgcG9zaXRpb25pbmcgb2Yg
Y29tYmluaW5nIGdseXBocy4KKyAgICBGbG9hdFNpemUgdHJhbnNsYXRpb24gPSBnbHlwaEJ1ZmZl
ci5vZmZzZXRBdChmcm9tKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKHBsYXRmb3JtRGF0YS5kd0Zv
bnQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQocGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKSk7CisK
KyAgICBWZWN0b3I8RkxPQVQ+IGhvcml6b250YWxBZHZhbmNlcyhudW1HbHlwaHMpOworICAgIFZl
Y3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiBvZmZzZXRBZHZhbmNlcyhudW1HbHlwaHMpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAgICBhdXRv
IGFkdmFuY2UgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhpICsgZnJvbSk7CisgICAgICAgIGlmICgh
YWR2YW5jZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGhvcml6b250YWxBZHZh
bmNlc1tpXSA9IGFkdmFuY2UtPndpZHRoKCk7CisgICAgICAgIG9mZnNldEFkdmFuY2VzW2ldLmFk
dmFuY2VPZmZzZXQgPSBhZHZhbmNlLT53aWR0aCgpOworICAgICAgICBvZmZzZXRBZHZhbmNlc1tp
XS5hc2NlbmRlck9mZnNldCA9IGFkdmFuY2UtPmhlaWdodCgpOworICAgIH0KKworICAgIERXUklU
RV9HTFlQSF9SVU4gZ2x5cGhSdW47CisgICAgZ2x5cGhSdW4uZm9udEZhY2UgPSBwbGF0Zm9ybURh
dGEuZHdGb250RmFjZSgpOworICAgIGdseXBoUnVuLmZvbnRFbVNpemUgPSBwbGF0Zm9ybURhdGEu
c2l6ZSgpOworICAgIGdseXBoUnVuLmdseXBoQ291bnQgPSBudW1HbHlwaHM7CisgICAgZ2x5cGhS
dW4uZ2x5cGhJbmRpY2VzID0gZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pOworICAgIGdseXBoUnVu
LmdseXBoQWR2YW5jZXMgPSBob3Jpem9udGFsQWR2YW5jZXMuZGF0YSgpOworICAgIGdseXBoUnVu
LmdseXBoT2Zmc2V0cyA9IG51bGxwdHI7CisgICAgZ2x5cGhSdW4uaXNTaWRld2F5cyA9IHBsYXRm
b3JtRGF0YS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsOworICAgIGdseXBoUnVuLmJpZGlMZXZl
bCA9IDA7CisKKyAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OworICAgIGZsb2F0IHNoYWRvd0Js
dXI7CisgICAgQ29sb3Igc2hhZG93Q29sb3I7CisgICAgZ3JhcGhpY3NDb250ZXh0LmdldFNoYWRv
dyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKworICAgIGJvb2wgaGFz
U2ltcGxlU2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHRN
b2RlRmlsbCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlkKCkgJiYgIXNoYWRvd0JsdXIgJiYgKCFncmFw
aGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBncmFwaGljc0NvbnRleHQu
Z2V0Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7CisgICAgaWYgKGhh
c1NpbXBsZVNoYWRvdykgeworICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2
ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJw
aXhlbCBhbnRpYWxpYXNpbmcuCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclNoYWRvdygp
OworICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRleHQuZmlsbENvbG9yKCk7
CisgICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvcihzaGFkb3dDb2xvci5yZWQoKSwgc2hhZG93
Q29sb3IuZ3JlZW4oKSwgc2hhZG93Q29sb3IuYmx1ZSgpLCBzaGFkb3dDb2xvci5hbHBoYSgpICog
ZmlsbENvbG9yLmFscGhhKCkgLyAyNTUpOworICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBv
aW50LngoKSArIHRyYW5zbGF0aW9uLndpZHRoKCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKKyAg
ICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZl
bid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2
ZS4KKyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyB0cmFuc2xhdGlvbi5o
ZWlnaHQoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7CisKKyAgICAgICAgQ09NUHRyPElEMkQxU29s
aWRDb2xvckJydXNoPiBzaGFkb3dCcnVzaDsKKyAgICAgICAgaWYgKCFTVUNDRUVERUQoY29udGV4
dC0+Q3JlYXRlU29saWRDb2xvckJydXNoKGdyYXBoaWNzQ29udGV4dC5jb2xvcldpdGhHbG9iYWxB
bHBoYShzaGFkb3dGaWxsQ29sb3IpLCAmc2hhZG93QnJ1c2gpKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihzaGFkb3dU
ZXh0WCwgc2hhZG93VGV4dFkpLCAmZ2x5cGhSdW4sIHNoYWRvd0JydXNoLmdldCgpKTsKKyAgICAg
ICAgaWYgKGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpKQorICAgICAgICAgICAgY29udGV4dC0+
RHJhd0dseXBoUnVuKEQyRDE6OlBvaW50MkYoc2hhZG93VGV4dFggKyBmb250LnN5bnRoZXRpY0Jv
bGRPZmZzZXQoKSwgc2hhZG93VGV4dFkpLCAmZ2x5cGhSdW4sIHNoYWRvd0JydXNoLmdldCgpKTsK
KyAgICB9CisKKyAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihwb2ludC54
KCkgKyB0cmFuc2xhdGlvbi53aWR0aCgpLCBwb2ludC55KCkgKyB0cmFuc2xhdGlvbi5oZWlnaHQo
KSksICZnbHlwaFJ1biwgZ3JhcGhpY3NDb250ZXh0LnNvbGlkRmlsbEJydXNoKCkpOworICAgIGlm
IChmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSkKKyAgICAgICAgY29udGV4dC0+RHJhd0dseXBo
UnVuKEQyRDE6OlBvaW50MkYocG9pbnQueCgpICsgdHJhbnNsYXRpb24ud2lkdGgoKSArIGZvbnQu
c3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkgKyB0cmFuc2xhdGlvbi5oZWlnaHQoKSks
ICZnbHlwaFJ1biwgZ3JhcGhpY3NDb250ZXh0LnNvbGlkRmlsbEJydXNoKCkpOworCisgICAgaWYg
KGhhc1NpbXBsZVNoYWRvdykKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhzaGFk
b3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKworICAgIGdyYXBoaWNzQ29udGV4
dC5yZXN0b3JlKCk7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YURpcmVjdDJELmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0
YURpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisKKyNp
ZiBVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJTaGFyZWRHRElPYmplY3QuaCIKKyNpbmNsdWRlIDxkMmQxLmg+CisjaW5jbHVkZSA8ZHdyaXRl
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOjptaW47
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9y
bURhdGFJbml0KEhGT05UIGZvbnQsIGZsb2F0IHNpemUsIEhEQyBoZGMsIFdDSEFSKiBmYWNlTmFt
ZSkKK3sKKyAgICBMT0dGT05UIGxvZ2ZvbnQ7CisgICAgR2V0T2JqZWN0KGZvbnQsIHNpemVvZihs
b2dmb250KSwgJmxvZ2ZvbnQpOworCisgICAgSFJFU1VMVCBociA9IEZvbnQ6OnN5c3RlbURXcml0
ZUdkaUludGVyb3AoKS0+Q3JlYXRlRm9udEZyb21MT0dGT05UKCZsb2dmb250LCAmbV9kd0ZvbnQp
OworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaHIgPSBt
X2R3Rm9udC0+Q3JlYXRlRm9udEZhY2UoJm1fZHdGb250RmFjZSk7CisgICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdXNlR0RJKQorICAgICAgICBt
X2lzU3lzdGVtRm9udCA9ICF3Y3NjbXAoZmFjZU5hbWUsIEwiTHVjaWRhIEdyYW5kZSIpOworfQor
CitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4gaGZv
bnQsIElEV3JpdGVGb250KiBmb250LCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1
ZSwgYm9vbCB1c2VHREkpCisgICAgOiBtX3N5bnRoZXRpY0JvbGQoYm9sZCkKKyAgICAsIG1fc3lu
dGhldGljT2JsaXF1ZShvYmxpcXVlKQorICAgICwgbV9vcmllbnRhdGlvbihIb3Jpem9udGFsKQor
ICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX3dpZHRoVmFyaWFudChSZWd1bGFyV2lkdGgpCisg
ICAgLCBtX2ZvbnQoU2hhcmVkR0RJT2JqZWN0PEhGT05UPjo6Y3JlYXRlKFdURk1vdmUoaGZvbnQp
KSkKKyAgICAsIG1fZHdGb250KGZvbnQpCisgICAgLCBtX2lzQ29sb3JCaXRtYXBGb250KGZhbHNl
KQorICAgICwgbV91c2VHREkodXNlR0RJKQoreworICAgIEhSRVNVTFQgaHIgPSBtX2R3Rm9udC0+
Q3JlYXRlRm9udEZhY2UoJm1fZHdGb250RmFjZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VF
REVEKGhyKSk7Cit9CisKK3N0YXRpYyBib29sIGZvbnRzQXJlRXF1YWwoSURXcml0ZUZvbnQqIGEs
IElEV3JpdGVGb250KiBiKQoreworICAgIGlmICghYSAmJiAhYikKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAoYSA9PSBiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgo
IWEgJiYgYikgfHwgKGEgJiYgIWIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
YS0+R2V0V2VpZ2h0KCkgIT0gYi0+R2V0V2VpZ2h0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChhLT5HZXRTdHlsZSgpICE9IGItPkdldFN0eWxlKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChhLT5HZXRTdHJldGNoKCkgIT0gYi0+R2V0U3RyZXRjaCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBEV1JJVEVfRk9OVF9NRVRSSUNTIGFNZXRyaWNz
LCBiTWV0cmljczsKKyAgICBhLT5HZXRNZXRyaWNzKCZhTWV0cmljcyk7CisgICAgYi0+R2V0TWV0
cmljcygmYk1ldHJpY3MpOworCisgICAgaWYgKChhTWV0cmljcy5kZXNpZ25Vbml0c1BlckVtICE9
IGJNZXRyaWNzLmRlc2lnblVuaXRzUGVyRW0pCisgICAgICAgIHx8IChhTWV0cmljcy5hc2NlbnQg
IT0gYk1ldHJpY3MuYXNjZW50KQorICAgICAgICB8fCAoYU1ldHJpY3MuZGVzY2VudCAhPSBiTWV0
cmljcy5hc2NlbnQpCisgICAgICAgIHx8IChhTWV0cmljcy5saW5lR2FwICE9IGJNZXRyaWNzLmxp
bmVHYXApCisgICAgICAgIHx8IChhTWV0cmljcy5jYXBIZWlnaHQgIT0gYk1ldHJpY3MuY2FwSGVp
Z2h0KQorICAgICAgICB8fCAoYU1ldHJpY3MueEhlaWdodCAhPSBiTWV0cmljcy54SGVpZ2h0KQor
ICAgICAgICB8fCAoYU1ldHJpY3MudW5kZXJsaW5lUG9zaXRpb24gIT0gYk1ldHJpY3MudW5kZXJs
aW5lUG9zaXRpb24pCisgICAgICAgIHx8IChhTWV0cmljcy51bmRlcmxpbmVUaGlja25lc3MgIT0g
Yk1ldHJpY3MudW5kZXJsaW5lVGhpY2tuZXNzKQorICAgICAgICB8fCAoYU1ldHJpY3Muc3RyaWtl
dGhyb3VnaFBvc2l0aW9uICE9IGJNZXRyaWNzLnN0cmlrZXRocm91Z2hQb3NpdGlvbikKKyAgICAg
ICAgfHwgKGFNZXRyaWNzLnN0cmlrZXRocm91Z2hUaGlja25lc3MgIT0gYk1ldHJpY3Muc3RyaWtl
dGhyb3VnaFRoaWNrbmVzcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbChjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250ID09IG90
aGVyLm1fZm9udAorICAgICAgICAmJiBtX3VzZUdESSA9PSBvdGhlci5tX3VzZUdESQorICAgICAg
ICAmJiBmb250c0FyZUVxdWFsKG1fZHdGb250LmdldCgpLCBvdGhlci5tX2R3Rm9udC5nZXQoKSk7
Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR2x5cGhQYWdlVHJlZU5vZGVEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlRGlyZWN0MkQu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKKworI2lmIFVTRShE
SVJFQ1QyRCkKKworI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJUZXh0QW5hbHlzaXNIZWxw
ZXIuaCIKKyNpbmNsdWRlIDxkd3JpdGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29s
IEdseXBoUGFnZTo6ZmlsbChVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpCit7
CisgICAgaWYgKGJ1ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgY29uc3QgRm9udCYgZm9udCA9IHRoaXMtPmZvbnQoKTsKKyAgICBib29s
IGhhdmVHbHlwaHMgPSBmYWxzZTsKKworICAgIENPTVB0cjxJRFdyaXRlVGV4dEFuYWx5emVyPiBh
bmFseXplcjsKKyAgICBIUkVTVUxUIGhyID0gRm9udDo6c3lzdGVtRFdyaXRlRmFjdG9yeSgpLT5D
cmVhdGVUZXh0QW5hbHl6ZXIoJmFuYWx5emVyKTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVE
RUQoaHIpKTsKKworICAgIGF1dG8mIGZvbnRQbGF0Zm9ybURhdGEgPSBmb250LnBsYXRmb3JtRGF0
YSgpOworCisgICAgVUNoYXIgbG9jYWxlTmFtZVsyNTZdID0geyB9OworICAgIGludCBsb2NhbGVM
ZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUocmVpbnRlcnByZXRfY2FzdDxMUFdTVFI+
KCZsb2NhbGVOYW1lKSwgMjU1KTsKKyAgICBSRUxFQVNFX0FTU0VSVChsb2NhbGVMZW5ndGggPD0g
MjU1KTsKKyAgICBsb2NhbGVOYW1lW2xvY2FsZUxlbmd0aF0gPSAwOworCisgICAgVGV4dEFuYWx5
emVySGVscGVyIGhlbHBlcihsb2NhbGVOYW1lLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCk7CisKKyAg
ICBociA9IGFuYWx5emVyLT5BbmFseXplU2NyaXB0KCZoZWxwZXIsIDAsIGJ1ZmZlckxlbmd0aCwg
JmhlbHBlcik7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICB1bnNp
Z25lZCByZXR1cm5lZENvdW50ID0gMDsKKyAgICBHbHlwaCBsb2NhbEdseXBoQnVmZmVyW0dseXBo
UGFnZTo6c2l6ZV07CisgICAgR2x5cGggY2x1c3Rlck1hcFtHbHlwaFBhZ2U6OnNpemVdOworICAg
IFZlY3RvcjxEV1JJVEVfU0hBUElOR19URVhUX1BST1BFUlRJRVM+IHRleHRQcm9wZXJ0aWVzKEds
eXBoUGFnZTo6c2l6ZSk7CisgICAgVmVjdG9yPERXUklURV9TSEFQSU5HX0dMWVBIX1BST1BFUlRJ
RVM+IGdseXBoUHJvcGVydGllcyhHbHlwaFBhZ2U6OnNpemUpOworCisgICAgaHIgPSBhbmFseXpl
ci0+R2V0R2x5cGhzKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250UGxhdGZvcm1EYXRhLmR3Rm9u
dEZhY2UoKSwgZm9udFBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsLCBmYWxz
ZSwKKyAgICAgICAgJmhlbHBlci5tX2FuYWx5c2lzLCBudWxscHRyLCBudWxscHRyLCBudWxscHRy
LCBudWxscHRyLCAwLCBHbHlwaFBhZ2U6OnNpemUsIGNsdXN0ZXJNYXAsIHRleHRQcm9wZXJ0aWVz
LmRhdGEoKSwKKyAgICAgICAgbG9jYWxHbHlwaEJ1ZmZlciwgZ2x5cGhQcm9wZXJ0aWVzLmRhdGEo
KSwgJnJldHVybmVkQ291bnQpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7Cisg
ICAgICAgIEdseXBoIGdseXBoID0gbG9jYWxHbHlwaEJ1ZmZlcltpXTsKKyAgICAgICAgaWYgKCFn
bHlwaCkKKyAgICAgICAgICAgIHNldEdseXBoRm9ySW5kZXgoaSwgMCk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCBnbHlwaCk7CisgICAgICAgICAgICBo
YXZlR2x5cGhzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBoYXZlR2x5
cGhzOworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVjdDJELmNw
cAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
U2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250LmgiCisKKyNpZiBVU0UoRElSRUNUMkQp
CisKKyNpbmNsdWRlICJDb3JlVGV4dFNQSVdpbi5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2lu
Y2x1ZGUgIkdseXBoUGFnZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkhXbmREQy5oIgorI2luY2x1ZGUgPGNvbXV0aWwuaD4KKyNpbmNsdWRlIDxkd3JpdGUuaD4K
KyNpbmNsdWRlIDxtbGFuZy5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNsdWRl
IDx1bmljb2RlL3Vub3JtLmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3Bh
Y2Ugc3RkOworCitJRFdyaXRlRmFjdG9yeSogRm9udDo6c3lzdGVtRFdyaXRlRmFjdG9yeSgpCit7
CisgICAgc3RhdGljIElEV3JpdGVGYWN0b3J5KiBkaXJlY3RXcml0ZUZhY3RvcnkgPSBudWxscHRy
OworICAgIGlmICghZGlyZWN0V3JpdGVGYWN0b3J5KSB7CisgICAgICAgIEhSRVNVTFQgaHIgPSBE
V3JpdGVDcmVhdGVGYWN0b3J5KERXUklURV9GQUNUT1JZX1RZUEVfU0hBUkVELCBfX3V1aWRvZihk
aXJlY3RXcml0ZUZhY3RvcnkpLCByZWludGVycHJldF9jYXN0PElVbmtub3duKio+KCZkaXJlY3RX
cml0ZUZhY3RvcnkpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGRpcmVjdFdyaXRlRmFjdG9yeTsKK30KKworSURXcml0ZUdkaUlu
dGVyb3AqIEZvbnQ6OnN5c3RlbURXcml0ZUdkaUludGVyb3AoKQoreworICAgIHN0YXRpYyBJRFdy
aXRlR2RpSW50ZXJvcCogZGlyZWN0V3JpdGVHZGlJbnRlcm9wID0gbnVsbHB0cjsKKyAgICBpZiAo
IWRpcmVjdFdyaXRlR2RpSW50ZXJvcCkgeworICAgICAgICBIUkVTVUxUIGhyID0gc3lzdGVtRFdy
aXRlRmFjdG9yeSgpLT5HZXRHZGlJbnRlcm9wKCZkaXJlY3RXcml0ZUdkaUludGVyb3ApOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZGlyZWN0V3JpdGVHZGlJbnRlcm9wOworfQorCitzdGF0aWMgVmVjdG9yPFdDSEFSPiBnZXRGYWNl
TmFtZShJRFdyaXRlRm9udCogZm9udCkKK3sKKyAgICBpZiAoIWZvbnQpCisgICAgICAgIHJldHVy
biBWZWN0b3I8V0NIQVI+KCk7CisKKyAgICBDT01QdHI8SURXcml0ZUxvY2FsaXplZFN0cmluZ3M+
IGxvY2FsaXplZEZhY2VOYW1lczsKKyAgICBIUkVTVUxUIGhyID0gZm9udC0+R2V0RmFjZU5hbWVz
KCZsb2NhbGl6ZWRGYWNlTmFtZXMpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OworCisgICAgVUlOVDMyIGxvY2FsZUluZGV4ID0gMDsKKyAgICBCT09MIGV4aXN0cyA9IGZhbHNl
OworCisgICAgd2NoYXJfdCBsb2NhbGVOYW1lW0xPQ0FMRV9OQU1FX01BWF9MRU5HVEhdOworICAg
IGludCBsb2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUobG9jYWxlTmFtZSwg
TE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7CisgICAgaWYgKGxvY2FsZUxlbmd0aCkKKyAgICAgICAg
aHIgPSBsb2NhbGl6ZWRGYWNlTmFtZXMtPkZpbmRMb2NhbGVOYW1lKGxvY2FsZU5hbWUsICZsb2Nh
bGVJbmRleCwgJmV4aXN0cyk7CisKKyAgICBpZiAoIWV4aXN0cyB8fCAhU1VDQ0VFREVEKGhyKSkK
KyAgICAgICAgaHIgPSBsb2NhbGl6ZWRGYWNlTmFtZXMtPkZpbmRMb2NhbGVOYW1lKEwiZW4tdXMi
LCAmbG9jYWxlSW5kZXgsICZleGlzdHMpOworCisgICAgaWYgKCFleGlzdHMgfHwgIVNVQ0NFRURF
RChocikpCisgICAgICAgIGxvY2FsZUluZGV4ID0gMDsKKworICAgIFVJTlQzMiBmYWNlTmFtZUxl
bmd0aCA9IDA7CisgICAgaHIgPSBsb2NhbGl6ZWRGYWNlTmFtZXMtPkdldFN0cmluZ0xlbmd0aChs
b2NhbGVJbmRleCwgJmZhY2VOYW1lTGVuZ3RoKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisg
ICAgICAgIHJldHVybiBWZWN0b3I8V0NIQVI+KCk7CisKKyAgICBWZWN0b3I8V0NIQVI+IGZhY2VO
YW1lKGZhY2VOYW1lTGVuZ3RoICsgMSk7CisgICAgaHIgPSBsb2NhbGl6ZWRGYWNlTmFtZXMtPkdl
dFN0cmluZyhsb2NhbGVJbmRleCwgZmFjZU5hbWUuZGF0YSgpLCBmYWNlTmFtZS5zaXplKCkpOwor
CisgICAgcmV0dXJuIGZhY2VOYW1lOworfQorCit2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCit7
CisgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9s
ZCgpID8gMS4wZiA6IDAuZjsKKyAgICBtX3NjcmlwdENhY2hlID0gMDsKKyAgICBtX3NjcmlwdEZv
bnRQcm9wZXJ0aWVzID0gMDsKKworICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKKyAg
ICAgICAgcmV0dXJuIGluaXRHRElGb250KCk7CisKKyAgICBmbG9hdCBwb2ludFNpemUgPSBtX3Bs
YXRmb3JtRGF0YS5zaXplKCk7CisKKyAgICBhdXRvIGZvbnQgPSBtX3BsYXRmb3JtRGF0YS5kd0Zv
bnQoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChmb250KTsKKworICAgIGF1dG8gZm9udEZhY2UgPSBt
X3BsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoZm9udEZhY2Up
OworCisgICAgRFdSSVRFX0ZPTlRfTUVUUklDUyBmb250TWV0cmljczsKKyAgICBmb250LT5HZXRN
ZXRyaWNzKCZmb250TWV0cmljcyk7CisKKyAgICBpbnQgaUFzY2VudCA9IGZvbnRNZXRyaWNzLmFz
Y2VudDsKKyAgICBpbnQgaURlc2NlbnQgPSBmb250TWV0cmljcy5kZXNjZW50OworICAgIGludCBp
TGluZUdhcCA9IGZvbnRNZXRyaWNzLmxpbmVHYXA7CisgICAgaW50IGlDYXBIZWlnaHQgPSBmb250
TWV0cmljcy5jYXBIZWlnaHQ7CisKKyAgICB1bnNpZ25lZCB1bml0c1BlckVtID0gZm9udE1ldHJp
Y3MuZGVzaWduVW5pdHNQZXJFbTsKKyAgICBmbG9hdCBmQXNjZW50ID0gc2NhbGVFbVRvVW5pdHMo
aUFzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgZmxvYXQgZkRlc2NlbnQgPSBz
Y2FsZUVtVG9Vbml0cyhpRGVzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgZmxv
YXQgZkNhcEhlaWdodCA9IHNjYWxlRW1Ub1VuaXRzKGlDYXBIZWlnaHQsIHVuaXRzUGVyRW0pICog
cG9pbnRTaXplOworICAgIGZsb2F0IGZMaW5lR2FwID0gc2NhbGVFbVRvVW5pdHMoaUxpbmVHYXAs
IHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworCisgICAgaWYgKCFpc0N1c3RvbUZvbnQoKSkgewor
ICAgICAgICBWZWN0b3I8V0NIQVI+IGZhY2VOYW1lID0gZ2V0RmFjZU5hbWUoZm9udCk7CisgICAg
ICAgIGZBc2NlbnQgPSBhc2NlbnRDb25zaWRlcmluZ01hY0FzY2VudEhhY2soZmFjZU5hbWUuZGF0
YSgpLCBmQXNjZW50LCBmRGVzY2VudCk7CisgICAgfQorCisgICAgbV9mb250TWV0cmljcy5zZXRB
c2NlbnQoZkFzY2VudCk7CisgICAgbV9mb250TWV0cmljcy5zZXREZXNjZW50KGZEZXNjZW50KTsK
KyAgICBtX2ZvbnRNZXRyaWNzLnNldENhcEhlaWdodChmQ2FwSGVpZ2h0KTsKKyAgICBtX2ZvbnRN
ZXRyaWNzLnNldExpbmVHYXAoZkxpbmVHYXApOworICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNw
YWNpbmcobHJvdW5kZihmQXNjZW50KSArIGxyb3VuZGYoZkRlc2NlbnQpICsgbHJvdW5kZihmTGlu
ZUdhcCkpOworCisgICAgR2x5cGggeEdseXBoID0gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCd4Jyku
Z2x5cGg7CisKKyAgICBpZiAoeEdseXBoKSB7CisgICAgICAgIC8vIE1lYXN1cmUgdGhlIGFjdHVh
bCBjaGFyYWN0ZXIgIngiLCBzaW5jZSBpdCdzIHBvc3NpYmxlIGZvciBpdCB0byBleHRlbmQgYmVs
b3cgdGhlIGJhc2VsaW5lLCBhbmQgd2UgbmVlZCB0aGUKKyAgICAgICAgLy8gcmVwb3J0ZWQgeC1o
ZWlnaHQgdG8gb25seSBpbmNsdWRlIHRoZSBwb3J0aW9uIG9mIHRoZSBnbHlwaCB0aGF0IGlzIGFi
b3ZlIHRoZSBiYXNlbGluZS4KKyAgICAgICAgVmVjdG9yPERXUklURV9HTFlQSF9NRVRSSUNTPiBn
bHlwaE1ldHJpY3MoMSk7CisgICAgICAgIEhSRVNVTFQgaHIgPSBmb250RmFjZS0+R2V0RGVzaWdu
R2x5cGhNZXRyaWNzKCZ4R2x5cGgsIDEsIGdseXBoTWV0cmljcy5kYXRhKCksIG1fcGxhdGZvcm1E
YXRhLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChT
VUNDRUVERUQoaHIpKTsKKyAgICAgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHNjYWxlRW1U
b1VuaXRzKGdseXBoTWV0cmljcy5maXJzdCgpLnZlcnRpY2FsT3JpZ2luWSwgdW5pdHNQZXJFbSkg
KiBwb2ludFNpemUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGludCBpWEhlaWdodCA9IGZvbnRN
ZXRyaWNzLnhIZWlnaHQ7CisgICAgICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodChzY2FsZUVt
VG9Vbml0cyhpWEhlaWdodCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUpOworICAgIH0KKworICAg
IG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKK30KKworRmxvYXRSZWN0
IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAg
aWYgKCFwbGF0Zm9ybURhdGEoKS5zaXplKCkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsK
KworICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKKyAgICAgICAgcmV0dXJuIGJvdW5k
c0ZvckdESUdseXBoKGdseXBoKTsKKworICAgIGF1dG8gZm9udCA9IG1fcGxhdGZvcm1EYXRhLmR3
Rm9udCgpOworICAgIFJFTEVBU0VfQVNTRVJUKGZvbnQpOworCisgICAgYXV0byBmb250RmFjZSA9
IG1fcGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChmb250KTsK
KworICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKKyAgICBib29s
IHZlcnRpY2FsID0gbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbDsKKwor
ICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfTUVUUklDUz4gZ2x5cGhNZXRyaWNzKDEpOworICAgIEhS
RVNVTFQgaHIgPSBmb250RmFjZS0+R2V0RGVzaWduR2x5cGhNZXRyaWNzKCZnbHlwaCwgMSwgZ2x5
cGhNZXRyaWNzLmRhdGEoKSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNh
bCk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBjb25zdCBhdXRv
JiBtZXRyaWNzID0gZ2x5cGhNZXRyaWNzLmZpcnN0KCk7CisKKyAgICB1bnNpZ25lZCB1bml0c1Bl
ckVtID0gbV9mb250TWV0cmljcy51bml0c1BlckVtKCk7CisKKyAgICBGbG9hdFBvaW50IG9yaWdp
bihzY2FsZUVtVG9Vbml0cyhtZXRyaWNzLmxlZnRTaWRlQmVhcmluZywgdW5pdHNQZXJFbSkgKiBw
b2ludFNpemUsIHNjYWxlRW1Ub1VuaXRzKG1ldHJpY3MudmVydGljYWxPcmlnaW5ZLCB1bml0c1Bl
ckVtKSAqIHBvaW50U2l6ZSk7CisgICAgRmxvYXRTaXplIHNpemUoc2NhbGVFbVRvVW5pdHMobWV0
cmljcy5hZHZhbmNlV2lkdGggLSBtZXRyaWNzLmxlZnRTaWRlQmVhcmluZyAtIG1ldHJpY3Mucmln
aHRTaWRlQmVhcmluZywgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUsCisgICAgICAgIHNjYWxlRW1U
b1VuaXRzKG1ldHJpY3MuYWR2YW5jZUhlaWdodCAtIG1ldHJpY3MudG9wU2lkZUJlYXJpbmcgLSBt
ZXRyaWNzLmJvdHRvbVNpZGVCZWFyaW5nLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisKKyAg
ICBGbG9hdFJlY3QgYm91bmRpbmdCb3gob3JpZ2luLCBzaXplKTsKKyAgICBpZiAobV9zeW50aGV0
aWNCb2xkT2Zmc2V0KQorICAgICAgICBib3VuZGluZ0JveC5zZXRXaWR0aChib3VuZGluZ0JveC53
aWR0aCgpICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0KTsKKworICAgIHJldHVybiBib3VuZGluZ0Jv
eDsKK30KKworZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBj
b25zdAoreworICAgIGlmICghcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKKyAgICAgICAgcmV0dXJuIHdp
ZHRoRm9yR0RJR2x5cGgoZ2x5cGgpOworCisgICAgQVNTRVJUKGdseXBoKTsKKworICAgIGF1dG8g
Zm9udCA9IG1fcGxhdGZvcm1EYXRhLmR3Rm9udCgpOworICAgIFJFTEVBU0VfQVNTRVJUKGZvbnQp
OworCisgICAgYXV0byBmb250RmFjZSA9IG1fcGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChmb250RmFjZSk7CisKKyAgICBib29sIGlzVmVydGljYWwgPSBtX3Bs
YXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsOworCisgICAgVmVjdG9yPERXUklU
RV9HTFlQSF9NRVRSSUNTPiBnbHlwaE1ldHJpY3MoMSk7CisgICAgSFJFU1VMVCBociA9IGZvbnRG
YWNlLT5HZXREZXNpZ25HbHlwaE1ldHJpY3MoJmdseXBoLCAxLCBnbHlwaE1ldHJpY3MuZGF0YSgp
LCBpc1ZlcnRpY2FsKTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAg
IGNvbnN0IGF1dG8mIG1ldHJpY3MgPSBnbHlwaE1ldHJpY3MuZmlyc3QoKTsKKyAgICBpbnQgd2lk
dGhJbkVtID0gbWV0cmljcy5hZHZhbmNlV2lkdGg7CisKKyAgICBmbG9hdCBwb2ludFNpemUgPSBt
X3BsYXRmb3JtRGF0YS5zaXplKCk7CisgICAgdW5zaWduZWQgdW5pdHNQZXJFbSA9IG1fZm9udE1l
dHJpY3MudW5pdHNQZXJFbSgpOworICAgIGZsb2F0IHdpZHRoID0gc2NhbGVFbVRvVW5pdHMod2lk
dGhJbkVtLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKworICAgIHJldHVybiB3aWR0aCArIG1f
c3ludGhldGljQm9sZE9mZnNldDsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJI
ZWxwZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0QW5hbHl6ZXJIZWxwZXIuaCIKKwor
I2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgPGR3cml0ZS5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0hSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpRdWVyeUludGVyZmFjZShfSW5f
IFJFRklJRCByaWlkLCBfQ09NX091dHB0cl8gdm9pZCoqIHBwdk9iamVjdCkKK3sKKyAgICBpZiAo
IXBwdk9iamVjdCkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAqcHB2T2JqZWN0ID0g
bnVsbHB0cjsKKyAgICBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlkb2YoSURXcml0ZVRleHRB
bmFseXNpc1NpbmspKSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElEV3JpdGVU
ZXh0QW5hbHlzaXNTaW5rKj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwg
X191dWlkb2YoSURXcml0ZVRleHRBbmFseXNpc1NvdXJjZSkpKQorICAgICAgICAqcHB2T2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SURXcml0ZVRleHRBbmFseXNpc1NpbmsqPih0aGlzKTsKKyAgICBlbHNl
CisgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICBBZGRSZWYoKTsKKyAgICByZXR1cm4gU19P
SzsKK30KKworVUxPTkcgVGV4dEFuYWx5emVySGVscGVyOjpBZGRSZWYoKQoreworICAgIHJldHVy
biArK21fcmVmQ291bnQ7Cit9CisKK1VMT05HIFRleHRBbmFseXplckhlbHBlcjo6UmVsZWFzZSgp
Cit7CisgICAgVUxPTkcgbmV3UmVmID0gLS1tX3JlZkNvdW50OworICAgIGlmICghbmV3UmVmKQor
ICAgICAgICBkZWxldGUodGhpcyk7CisKKyAgICByZXR1cm4gbmV3UmVmOworfQorCitIUkVTVUxU
IFRleHRBbmFseXplckhlbHBlcjo6R2V0VGV4dEF0UG9zaXRpb24oVUlOVDMyIHRleHRQb3NpdGlv
biwgY29uc3QgV0NIQVIqKiB0ZXh0U3RyaW5nLCBVSU5UMzIqIHRleHRMZW5ndGgpCit7CisgICAg
aWYgKCF0ZXh0U3RyaW5nIHx8ICF0ZXh0TGVuZ3RoKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVS
OworCisgICAgaWYgKHRleHRQb3NpdGlvbiA+PSBtX2J1ZmZlckxlbmd0aCkgeworICAgICAgICAq
dGV4dFN0cmluZyA9IG51bGxwdHI7CisgICAgICAgICp0ZXh0TGVuZ3RoID0gMDsKKyAgICAgICAg
cmV0dXJuIFNfT0s7CisgICAgfQorCisgICAgKnRleHRTdHJpbmcgPSAmbV9idWZmZXJbdGV4dFBv
c2l0aW9uXTsKKyAgICAqdGV4dExlbmd0aCA9IG1fYnVmZmVyTGVuZ3RoIC0gdGV4dFBvc2l0aW9u
OworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpH
ZXRUZXh0QmVmb3JlUG9zaXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgY29uc3QgV0NIQVIqKiB0
ZXh0U3RyaW5nLCBVSU5UMzIqIHRleHRMZW5ndGgpCit7CisgICAgaWYgKCF0ZXh0U3RyaW5nIHx8
ICF0ZXh0TGVuZ3RoKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgaWYgKCF0ZXh0
UG9zaXRpb24gfHwgdGV4dFBvc2l0aW9uID4gbV9idWZmZXJMZW5ndGgpIHsKKyAgICAgICAgKnRl
eHRTdHJpbmcgPSBudWxscHRyOworICAgICAgICAqdGV4dExlbmd0aCA9IDA7CisgICAgICAgIHJl
dHVybiBTX09LOworICAgIH0KKworICAgICp0ZXh0U3RyaW5nID0gJm1fYnVmZmVyWzBdOworICAg
ICp0ZXh0TGVuZ3RoID0gdGV4dFBvc2l0aW9uOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hS
RVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpHZXRMb2NhbGVOYW1lKFVJTlQzMiB0ZXh0UG9zaXRp
b24sIFVJTlQzMiogdGV4dExlbmd0aCwgY29uc3QgV0NIQVIqKiBsb2NhbGVOYW1lKQoreworICAg
ICpsb2NhbGVOYW1lID0gbV9sb2NhbGVOYW1lOworICAgICp0ZXh0TGVuZ3RoID0gbV9idWZmZXJM
ZW5ndGggLSB0ZXh0UG9zaXRpb247CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBU
ZXh0QW5hbHl6ZXJIZWxwZXI6OkdldE51bWJlclN1YnN0aXR1dGlvbihVSU5UMzIgdGV4dFBvc2l0
aW9uLCBVSU5UMzIqIHRleHRMZW5ndGgsIElEV3JpdGVOdW1iZXJTdWJzdGl0dXRpb24qKiBudW1i
ZXJTdWJzdGl0dXRpb24pCit7CisgICAgKnRleHRMZW5ndGggPSBtX2J1ZmZlckxlbmd0aCAtIHRl
eHRQb3NpdGlvbjsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBUZXh0QW5hbHl6ZXJI
ZWxwZXI6OlNldExpbmVCcmVha3BvaW50cyhVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4
dExlbmd0aCwgY29uc3QgRFdSSVRFX0xJTkVfQlJFQUtQT0lOVCopCit7CisgICAgcmV0dXJuIFNf
T0s7Cit9CisKK0hSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpTZXRTY3JpcHRBbmFseXNpcyhV
SU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgY29uc3QgRFdSSVRFX1NDUklQ
VF9BTkFMWVNJUyogYW5hbHlzaXMpCit7CisgICAgbV9hbmFseXNpcyA9ICphbmFseXNpczsKKwor
ICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6U2V0Qmlk
aUxldmVsKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBVSU5UOCBleHBs
aWNpdExldmVsLCBVSU5UOCByZXNvbHZlZExldmVsKQoreworICAgIHJldHVybiBTX09LOworfQor
CitIUkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6U2V0TnVtYmVyU3Vic3RpdHV0aW9uKFVJTlQz
MiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBJRFdyaXRlTnVtYmVyU3Vic3RpdHV0
aW9uKikKK3sKKyAgICByZXR1cm4gU19PSzsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5
emVySGVscGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1RleHRBbmFseXplckhlbHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFRleHRBbmFseXpl
ckhlbHBlciA6IHB1YmxpYyBJRFdyaXRlVGV4dEFuYWx5c2lzU2luaywgSURXcml0ZVRleHRBbmFs
eXNpc1NvdXJjZSB7CisgICAgQW5hbHl6ZXJIZWxwZXIoVUNoYXIqIGxvY2FsZU5hbWUsIFVDaGFy
KiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkKKyAgICAgICAgOiBtX2xvY2FsZU5hbWUo
bG9jYWxlTmFtZSkKKyAgICAgICAgLCBtX2J1ZmZlcihidWZmZXIpCisgICAgICAgICwgbV9idWZm
ZXJMZW5ndGgoYnVmZmVyTGVuZ3RoKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBJVW5rbm93bgor
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShfSW5f
IFJFRklJRCwgX0NPTV9PdXRwdHJfIHZvaWQqKik7CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRI
T0RDQUxMVFlQRSBBZGRSZWYoKTsKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBF
IFJlbGVhc2UoKTsKKworICAgIC8vIElEV3JpdGVUZXh0QW5hbHlzaXNTb3VyY2UgCisgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldFRleHRBdFBvc2l0aW9uKFVJTlQzMiB0
ZXh0UG9zaXRpb24sIGNvbnN0IFdDSEFSKiogdGV4dFN0cmluZywgVUlOVDMyKiB0ZXh0TGVuZ3Ro
KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0VGV4dEJlZm9yZVBv
c2l0aW9uKFVJTlQzMiB0ZXh0UG9zaXRpb24sIGNvbnN0IFdDSEFSKiogdGV4dFN0cmluZywgVUlO
VDMyKiB0ZXh0TGVuZ3RoKTsKKyAgICB2aXJ0dWFsIERXUklURV9SRUFESU5HX0RJUkVDVElPTiBT
VERNRVRIT0RDQUxMVFlQRSBHZXRQYXJhZ3JhcGhSZWFkaW5nRGlyZWN0aW9uKCkgeyByZXR1cm4g
RFdSSVRFX1JFQURJTkdfRElSRUNUSU9OX0xFRlRfVE9fUklHSFQ7IH0KKyAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0TG9jYWxlTmFtZShVSU5UMzIgdGV4dFBvc2l0aW9u
LCBVSU5UMzIqIHRleHRMZW5ndGgsIGNvbnN0IFdDSEFSKiogbG9jYWxlTmFtZSk7CisgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldE51bWJlclN1YnN0aXR1dGlvbihVSU5U
MzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIqIHRleHRMZW5ndGgsIElEV3JpdGVOdW1iZXJTdWJzdGl0
dXRpb24qKik7CisKKyAgICAvLyBJRFdyaXRlVGV4dEFuYWx5c2lzU2luaworICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXRMaW5lQnJlYWtwb2ludHMoVUlOVDMyIHRleHRQ
b3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIGNvbnN0IERXUklURV9MSU5FX0JSRUFLUE9JTlQq
KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0U2NyaXB0QW5hbHlz
aXMoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIGNvbnN0IERXUklURV9T
Q1JJUFRfQU5BTFlTSVMqKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
U2V0QmlkaUxldmVsKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBVSU5U
OCBleHBsaWNpdExldmVsLCBVSU5UOCByZXNvbHZlZExldmVsKTsKKyAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0TnVtYmVyU3Vic3RpdHV0aW9uKFVJTlQzMiB0ZXh0UG9z
aXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBJRFdyaXRlTnVtYmVyU3Vic3RpdHV0aW9uKik7CisK
KyAgICBVQ2hhciogbV9sb2NhbGVOYW1lIHsgbnVsbHB0ciB9OworICAgIFVDaGFyKiBtX2J1ZmZl
ciB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX2J1ZmZlckxlbmd0aCB7IDAgfTsKKyAgICBE
V1JJVEVfU0NSSVBUX0FOQUxZU0lTIG1fYW5hbHlzaXM7CisgICAgVUxPTkcgbV9yZWZDb3VudCB7
IDAgfTsKK307CisKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>