<?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>67577</bug_id>
          
          <creation_ts>2011-09-04 08:01:14 -0700</creation_ts>
          <short_desc>Enable use of Cairo backend on platforms other than GTK</short_desc>
          <delta_ts>2011-09-11 21:29:42 -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 wx</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Robin Dunn">robin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>kevino</cc>
    
    <cc>mrobinson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>461949</commentid>
    <comment_count>0</comment_count>
      <attachid>106286</attachid>
    <who name="Robin Dunn">robin</who>
    <bug_when>2011-09-04 08:01:14 -0700</bug_when>
    <thetext>Created attachment 106286
cairo backend patch

Enable wxWebKit to run using the wxGC Cairo backend on platforms other than GTK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461952</commentid>
    <comment_count>1</comment_count>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2011-09-04 09:48:36 -0700</bug_when>
    <thetext>Landed in r94501, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465435</commentid>
    <comment_count>2</comment_count>
      <attachid>106286</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-11 18:23:09 -0700</bug_when>
    <thetext>Comment on attachment 106286
cairo backend patch

View in context: https://bugs.webkit.org/attachment.cgi?id=106286&amp;action=review

&gt; Source/WebCore/platform/graphics/GlyphBuffer.h:54
&gt; +#if USE(CAIRO) || (PLATFORM(WX) &amp;&amp; defined(wxUSE_CAIRO) &amp;&amp; wxUSE_CAIRO)

For this file, I think it would be much better to just ensure that Wx has the proper WTF flag defined so that USE(CAIRO) works. If it doesn&apos;t, things might break in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465446</commentid>
    <comment_count>3</comment_count>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2011-09-11 19:21:04 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 106286 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=106286&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GlyphBuffer.h:54
&gt; &gt; +#if USE(CAIRO) || (PLATFORM(WX) &amp;&amp; defined(wxUSE_CAIRO) &amp;&amp; wxUSE_CAIRO)
&gt; 
&gt; For this file, I think it would be much better to just ensure that Wx has the proper WTF flag defined so that USE(CAIRO) works. If it doesn&apos;t, things might break in the future.

The flags are not indicating the same thing, though. That is, USE(CAIRO) != wxUSE_CAIRO

wxUSE_CAIRO indicates that wx&apos;s wxGraphicsContext API is using Cairo internally to draw. wxWebKit&apos;s drawing code is implemented in terms of wxGraphicsContext, not the WebKit Cairo rendering backend. (and wxGraphicsContext is not always using Cairo, either.) While wx is using Cairo internally, there are a couple spots where wx doesn&apos;t support what we need to do, and so in those cases we share some code with the native Cairo port, but it&apos;s a very small amount of what USE(CAIRO) actually defines and uses.

Making USE(CAIRO) work would be a significant project for the wx port and will actually break a lot of things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465480</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-11 21:29:42 -0700</bug_when>
    <thetext>(In reply to comment #3)

&gt; wxUSE_CAIRO indicates that wx&apos;s wxGraphicsContext API is using Cairo internally to draw. wxWebKit&apos;s drawing code is implemented in terms of wxGraphicsContext, not the WebKit Cairo rendering backend. (and wxGraphicsContext is not always using Cairo, either.) While wx is using Cairo internally, there are a couple spots where wx doesn&apos;t support what we need to do, and so in those cases we share some code with the native Cairo port, but it&apos;s a very small amount of what USE(CAIRO) actually defines and uses.

Thanks for the clarification! You might consider collapsing this logic into a flag that&apos;s more explanatory like WX_USES_CAIRO.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106286</attachid>
            <date>2011-09-04 08:01:14 -0700</date>
            <delta_ts>2011-09-11 18:23:09 -0700</delta_ts>
            <desc>cairo backend patch</desc>
            <filename>wxwk_cairo.patch</filename>
            <type>text/plain</type>
            <size>61288</size>
            <attacher name="Robin Dunn">robin</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDk0NDk5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEgQEAKKzIwMTEtMDkt
MDMgIFJvYmluIER1bm4gIDxyb2JpbkBhbGxkdW5uLmNvbT4KKworICAgICAgICBbd3hdIEVuYWJs
ZSB3eFdlYktpdCB0byBydW4gdXNpbmcgdGhlIHd4R0MgQ2Fpcm8gYmFja2VuZCBvbiBwbGF0Zm9y
bXMgb3RoZXIgdGhhbiBHVEsuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiB3c2NyaXB0OgorCiAyMDExLTA4LTMwICBBYXJvbiBDb2x3ZWxsICA8YWNv
bHdlbGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBNZWRpYVNvdXJjZSBBUEkgdG8gSFRN
TE1lZGlhRWxlbWVudApJbmRleDogd3NjcmlwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3c2NyaXB0CShyZXZp
c2lvbiA5NDQ5OSkKKysrIHdzY3JpcHQJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw2ICsxNzAsMTAg
QEAKICAgICAgICAgICAgICAgICAgICAnU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2lu
UGFja2FnZVdpbi5jcHAnLAogICAgICAgICAgICAgICAgICAgICdTb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcCcsCiAgICAgICAgICAgICBdCisgICAgICAgICAgICBp
ZiBPcHRpb25zLm9wdGlvbnMuY2Fpcm86CisgICAgICAgICAgICAgICAgd2ViY29yZV9kaXJzLmFw
cGVuZCgnU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL2NhaXJvJykKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgd2ViY29yZV9kaXJzLmFwcGVuZCgnU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL2dkaXBsdXMnKQogICAgICAgICBlbGlmIHN5cy5wbGF0
Zm9ybS5zdGFydHN3aXRoKCdkYXJ3aW4nKToKICAgICAgICAgICAgIHdlYmNvcmVfZGlycy5hcHBl
bmQoJ1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjJykKICAgICAgICAgICAgIHdlYmNvcmVfZGly
cy5hcHBlbmQoJ1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9tYWMvY2FyYm9uJykK
QEAgLTE5Nyw2ICsyMDEsNyBAQAogICAgICAgICAgICAgICAgICAgICdTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblBhY2thZ2VOb25lLmNwcCcKICAgICAgICAgICAgIF0KICAgICAgICAgICAg
IHdlYmNvcmVfZGlycy5hcHBlbmQoJ1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9n
dGsnKQorICAgICAgICAgICAgd2ViY29yZV9kaXJzLmFwcGVuZCgnU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd3gvd3hjb2RlL2NhaXJvJykKICAgICAgICAgCiAKICAgICBpbXBvcnQgVGFza0dlbgpA
QCAtMzUwLDcgKzM1NSwxMiBAQAogICAgICAgICAKICAgICAgICAgICAgIGZvciBkZXAgaW4gd2lu
ZG93c19kZXBzOgogICAgICAgICAgICAgICAgIGJsZC5pbnN0YWxsX2ZpbGVzKHdlYmNvcmUuaW5z
dGFsbF9wYXRoLCBbb3MucGF0aC5qb2luKG1zdmNsaWJzX2RpciwgZGVwKV0pCi0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgIkNBSVJPX1JPT1QiIGluIG9zLmVudmlyb24gYW5kIE9wdGlv
bnMub3B0aW9ucy5jYWlybzoKKyAgICAgICAgICAgICAgICBjYWlyb19iaW5fZGlyID0gb3MucGF0
aC5qb2luKG9zLmVudmlyb25bIkNBSVJPX1JPT1QiXSwgImJpbiIpIAorICAgICAgICAgICAgICAg
IGZvciBkZXAgaW4gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihjYWlyb19iaW5fZGlyLCAiKi5kbGwi
KSk6CisgICAgICAgICAgICAgICAgICAgIGJsZC5pbnN0YWxsX2ZpbGVzKHdlYmNvcmUuaW5zdGFs
bF9wYXRoLCBbb3MucGF0aC5qb2luKGNhaXJvX2Jpbl9kaXIsIGRlcCldKQorICAgICAgICAgICAg
ICAgICAgICAKICAgICB3ZWJjb3JlLmZpbmRfc291cmNlc19pbl9kaXJzKGZ1bGxfZGlycywgZXhj
bHVkZXMgPSBleGNsdWRlcywgZXh0cz1bJy5jJywgJy5jcHAnXSkKIAogICAgIGJsZC5hZGRfZ3Jv
dXAoKQpJbmRleDogVG9vbHMvd2FmL2J1aWxkL3NldHRpbmdzLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL3dhZi9idWlsZC9zZXR0aW5ncy5weQkocmV2aXNpb24gOTQ0OTkpCisrKyBUb29scy93YWYv
YnVpbGQvc2V0dGluZ3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIGltcG9y
dCByZQogaW1wb3J0IHN5cwogCitpbXBvcnQgTG9ncwogaW1wb3J0IE9wdGlvbnMKIAogZnJvbSBi
dWlsZF91dGlscyBpbXBvcnQgKgpAQCAtMjI1LDYgKzIyNiw3IEBACiAgICAgb3B0LmFkZF9vcHRp
b24oJy0tbXN2Yy12ZXJzaW9uJywgYWN0aW9uPSdzdG9yZScsIGRlZmF1bHQ9JycsIGhlbHA9Ik1T
VkMgdmVyc2lvbiB0byB1c2UgdG8gYnVpbGQuIFVzZSA4IGZvciAyMDA1LCA5IGZvciAyMDA4IikK
ICAgICBvcHQuYWRkX29wdGlvbignLS1tYWNfdW5pdmVyc2FsX2JpbmFyeScsIGFjdGlvbj0nc3Rv
cmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9J0J1aWxkIE1hYyBhcyB1bml2ZXJzYWwgKGkz
ODYsIHg4Nl82NCwgcHBjKSBiaW5hcnkuJykKICAgICBvcHQuYWRkX29wdGlvbignLS1tYWNfYXJj
aHMnLCBhY3Rpb249J3N0b3JlJywgZGVmYXVsdD0nJywgaGVscD0nQ29tbWEgc2VwYXJhdGVkIGxp
c3Qgb2YgYXJjaGl0ZWN0dXJlcyAoaTM4NiwgeDg2XzY0LCBwcGMpIHRvIGJ1aWxkIG9uIE1hYy4n
KQorICAgIG9wdC5hZGRfb3B0aW9uKCctLWNhaXJvJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVm
YXVsdD1zeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnbGludXgnKSwgaGVscD0nVXNlIGNhaXJvIGZv
ciBkcmF3aW5nIChleHBlcmltZW50YWwgZm9yIFdpbi9NYWMnKQogCiBkZWYgY29tbW9uX2NvbmZp
Z3VyZShjb25mKToKICAgICAiIiIKQEAgLTI2Miw2ICsyNjQsMTEgQEAKIAogICAgIGxpYnByZWZp
eCA9ICcnCiAKKyAgICBpZiBPcHRpb25zLm9wdGlvbnMuY2Fpcm8gYW5kIGJ1aWxkX3BvcnQgPT0g
J3d4JzoKKyAgICAgICAgaWYgYnVpbGRpbmdfb25fd2luMzIgYW5kIG5vdCAiQ0FJUk9fUk9PVCIg
aW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgIExvZy5lcnJvcigiVG8gYnVpbGQgd2l0aCBDYWly
byBvbiBXaW5kb3dzLCB5b3UgbXVzdCBzZXQgdGhlIENBSVJPX1JPT1QgZW52aXJvbm1lbnQgdmFy
aWFibGUuIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKICAgICBpZiBidWlsZGluZ19vbl93
aW4zMjoKICAgICAgICAgbGlicHJlZml4ID0gJ2xpYicKIApAQCAtMzE0LDYgKzMyMSwxMCBAQAog
ICAgICAgICAgICAgY29uZi5lbnZbJ0NQUFBBVEhfV1gnXSA9IHd4aW5jbHVkZXMKICAgICAgICAg
ICAgIGNvbmYuZW52WydMSUJfV1gnXSA9IHd4bGlicwogICAgICAgICAgICAgY29uZi5lbnZbJ0xJ
QlBBVEhfV1gnXSA9IHd4bGlicGF0aHMKKyAgICAgICAgICAgIGlmIE9wdGlvbnMub3B0aW9ucy5j
YWlybyBhbmQgJ0NBSVJPX1JPT1QnIGluIG9zLmVudmlyb246CisgICAgICAgICAgICAgICAgY29u
Zi5lbnYuYXBwZW5kX3ZhbHVlKCdDUFBQQVRIX1dYJywgW29zLnBhdGguam9pbihvcy5lbnZpcm9u
WydDQUlST19ST09UJ10sICdpbmNsdWRlJywgJ2NhaXJvJyldKQorICAgICAgICAgICAgICAgIGNv
bmYuZW52LmFwcGVuZF92YWx1ZSgnTElCUEFUSF9XWCcsIFtvcy5wYXRoLmpvaW4ob3MuZW52aXJv
blsnQ0FJUk9fUk9PVCddLCAnbGliJyldKQorICAgICAgICAgICAgICAgIGNvbmYuZW52LmFwcGVu
ZF92YWx1ZSgnTElCX1dYJywgWydjYWlybyddKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAg
Y29uZi5jaGVja19jZmcocGF0aD1nZXRfcGF0aF90b193eGNvbmZpZygpLCBhcmdzPSctLWN4eGZs
YWdzIC0tbGlicycsIHBhY2thZ2U9JycsIHVzZWxpYl9zdG9yZT0nV1gnLCBtYW5kYXRvcnk9VHJ1
ZSkKIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxv
ZwkocmV2aXNpb24gOTQ0OTkpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMSBAQAorMjAxMS0wOS0wMyAgUm9iaW4gRHVubiAgPHJvYmluQGFsbGR1bm4uY29t
PgorCisgICAgICAgIFt3eF0gRW5hYmxlIHd4V2ViS2l0IHRvIHJ1biB1c2luZyB0aGUgd3hHQyBD
YWlybyBiYWNrZW5kIG9uIHBsYXRmb3JtcyBvdGhlciB0aGFuIEdUSy4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdhZi9idWlsZC9zZXR0aW5ncy5w
eToKKwogMjAxMS0wOS0wMyAgS2V2aW4gT2xsaXZpZXIgIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNv
bT4KIAogICAgICAgICBbd3hdIFVucmV2aWV3ZWQgYnVpbGQgZml4LiBBZGQgd3RmL2R0b2EgZGly
ZWN0b3J5IHRvIGJ1aWxkLgpJbmRleDogU291cmNlL1dlYktpdC93eC9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC93eC9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NDk5KQorKysg
U291cmNlL1dlYktpdC93eC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBA
QAorMjAxMS0wOS0wMyAgUm9iaW4gRHVubiAgPHJvYmluQGFsbGR1bm4uY29tPgorCisgICAgICAg
IFt3eF0gRW5hYmxlIHd4V2ViS2l0IHRvIHJ1biB1c2luZyB0aGUgd3hHQyBDYWlybyBiYWNrZW5k
IG9uIHBsYXRmb3JtcyBvdGhlciB0aGFuIEdUSy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkZyYW1lLmNwcDoKKyAgICAgICAgKHd4V2ViRnJh
bWVQcmludG91dDo6SW5pdGlhbGl6ZVdpdGhQYWdlU2l6ZSk6CisgICAgICAgICh3eFdlYkZyYW1l
UHJpbnRvdXQ6Ok9uQmVnaW5QcmludGluZyk6CisgICAgICAgICh3eFdlYkZyYW1lUHJpbnRvdXQ6
Ok9uUHJpbnRQYWdlKToKKyAgICAgICAgKHd4V2ViRnJhbWU6OlByaW50KToKKyAgICAgICAgKiBX
ZWJWaWV3LmNwcDoKKyAgICAgICAgKHd4V2ViVmlldzo6T25QYWludCk6CisKIDIwMTEtMDgtMzAg
IEthdXN0dWJoIEF0cmF3YWxrYXIgIDxrYXVzdHViaEBtb3Rvcm9sYS5jb20+CiAKICAgICAgICAg
VGhlIHVudXNlZCBTY3JvbGxWaWV3KiBhcmd1bWVudCBjYW4gYW5kIHNob3VsZCBiZSByZW1vdmVk
IGZyb20KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd3gvV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC93eC9XZWJWaWV3LmNwcAkocmV2aXNpb24gOTQ0OTkpCisrKyBTb3VyY2Uv
V2ViS2l0L3d4L1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODUsOCArNjg1LDE2IEBA
CiAKICAgICBpZiAoSXNTaG93bigpICYmIGZyYW1lLT5kb2N1bWVudCgpKSB7CiAjaWYgVVNFKFdY
R0MpCisjaWYgd3hDSEVDS19WRVJTSU9OKDIsIDksIDIpICYmIGRlZmluZWQod3hVU0VfQ0FJUk8p
ICYmIHd4VVNFX0NBSVJPCisgICAgICAgIHd4R3JhcGhpY3NSZW5kZXJlciogcmVuZGVyZXIgPSB3
eEdyYXBoaWNzUmVuZGVyZXI6OkdldENhaXJvUmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKCFyZW5k
ZXJlcikKKyAgICAgICAgICAgIHJlbmRlcmVyID0gd3hHcmFwaGljc1JlbmRlcmVyOjpHZXREZWZh
dWx0UmVuZGVyZXIoKTsKKyAgICAgICAgd3hHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSByZW5k
ZXJlci0+Q3JlYXRlQ29udGV4dChkYyk7CisgICAgICAgIHd4R0NEQyBnY2RjKGNvbnRleHQpOwor
I2Vsc2UKICAgICAgICAgd3hHQ0RDIGdjZGMoZGMpOwogI2VuZGlmCisjZW5kaWYKIAogICAgICAg
ICBpZiAoZGMuSXNPaygpKSB7CiAgICAgICAgICAgICB3eFJlY3QgcGFpbnRSZWN0ID0gR2V0VXBk
YXRlUmVnaW9uKCkuR2V0Qm94KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3d4L1dlYkZyYW1lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3d4L1dlYkZyYW1lLmNwcAkocmV2aXNpb24g
OTQ0OTkpCisrKyBTb3VyY2UvV2ViS2l0L3d4L1dlYkZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA2LDIxICsxMDYsMjIgQEAKICAgICB2b2lkIFNldEZpcnN0UGFnZShpbnQgcGFnZSkgeyBt
X2Zyb21QYWdlID0gcGFnZTsgfQogICAgIHZvaWQgU2V0TGFzdFBhZ2UoaW50IHBhZ2UpIHsgbV90
b1BhZ2UgPSBwYWdlOyB9CiAKLSAgICB2b2lkIEluaXRpYWxpemVXaXRoUGFnZVNpemUod3hSZWN0
IHBhZ2VSZWN0KQorICAgIHZvaWQgSW5pdGlhbGl6ZVdpdGhQYWdlU2l6ZSh3eFJlY3QgcGFnZVJl
Y3QsIGJvb2wgaXNNTSA9IHRydWUpCiAgICAgewotICAgICAgICBkb3VibGUgbW1Ub1BpeGVsc1gg
PSAoZG91YmxlKXd4R2V0RGlzcGxheVNpemUoKS5HZXRXaWR0aCgpIC8KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGRvdWJsZSl3eEdldERpc3BsYXlTaXplTU0oKS5HZXRXaWR0aCgp
OwotICAgICAgICBkb3VibGUgbW1Ub1BpeGVsc1kgPSAoZG91YmxlKXd4R2V0RGlzcGxheVNpemUo
KS5HZXRIZWlnaHQoKSAvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUp
d3hHZXREaXNwbGF5U2l6ZU1NKCkuR2V0SGVpZ2h0KCk7Ci0gICAgICAgIC8vIGNvbnZlcnQgbW0g
dG8gcGl4ZWxzCi0gICAgICAgIHBhZ2VSZWN0LnggPSBwYWdlUmVjdC54ICogbW1Ub1BpeGVsc1g7
Ci0gICAgICAgIHBhZ2VSZWN0LnkgPSBwYWdlUmVjdC55ICogbW1Ub1BpeGVsc1k7Ci0gICAgICAg
IHBhZ2VSZWN0LndpZHRoID0gcGFnZVJlY3Qud2lkdGggKiBtbVRvUGl4ZWxzWDsKLSAgICAgICAg
cGFnZVJlY3QuaGVpZ2h0ID0gcGFnZVJlY3QuaGVpZ2h0ICogbW1Ub1BpeGVsc1k7Ci0gICAgICAg
IAorICAgICAgICBpZiAoaXNNTSkgeworICAgICAgICAgICAgZG91YmxlIG1tVG9QaXhlbHNYID0g
KGRvdWJsZSl3eEdldERpc3BsYXlTaXplKCkuR2V0V2lkdGgoKSAvCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoZG91YmxlKXd4R2V0RGlzcGxheVNpemVNTSgpLkdldFdpZHRo
KCk7CisgICAgICAgICAgICBkb3VibGUgbW1Ub1BpeGVsc1kgPSAoZG91YmxlKXd4R2V0RGlzcGxh
eVNpemUoKS5HZXRIZWlnaHQoKSAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoZG91YmxlKXd4R2V0RGlzcGxheVNpemVNTSgpLkdldEhlaWdodCgpOworICAgICAgICAgICAg
Ly8gY29udmVydCBtbSB0byBwaXhlbHMKKyAgICAgICAgICAgIHBhZ2VSZWN0LnggPSBwYWdlUmVj
dC54ICogbW1Ub1BpeGVsc1g7CisgICAgICAgICAgICBwYWdlUmVjdC55ID0gcGFnZVJlY3QueSAq
IG1tVG9QaXhlbHNZOworICAgICAgICAgICAgcGFnZVJlY3Qud2lkdGggPSBwYWdlUmVjdC53aWR0
aCAqIG1tVG9QaXhlbHNYOworICAgICAgICAgICAgcGFnZVJlY3QuaGVpZ2h0ID0gcGFnZVJlY3Qu
aGVpZ2h0ICogbW1Ub1BpeGVsc1k7CisgICAgICAgIH0KICAgICAgICAgbV9wYWdlV2lkdGggPSBw
YWdlUmVjdC53aWR0aDsKICAgICAgICAgbV9wcmludENvbnRleHQuYmVnaW4obV9wYWdlV2lkdGgp
OwotICAgICAgICAKKwogICAgICAgICBmbG9hdCBwYWdlSGVpZ2h0ID0gcGFnZVJlY3QuaGVpZ2h0
OwogICAgICAgICBtX3ByaW50Q29udGV4dC5jb21wdXRlUGFnZVJlY3RzKFdlYkNvcmU6OkZsb2F0
UmVjdChwYWdlUmVjdCksIC8qIGhlYWRlckhlaWdodCAqLyAwLCAvKiBmb290ZXJIZWlnaHQgKi8g
MCwgLyogdXNlclNjYWxlRmFjdG9yICovIDEuMCwgcGFnZUhlaWdodCk7CiAgICAgfQpAQCAtMTI5
LDExICsxMzAsMTIgQEAKICAgICB7CiAgICAgICAgIHd4UHJpbnRlckRDKiBwZGMgPSBkeW5hbWlj
X2Nhc3Q8d3hQcmludGVyREMqPihHZXREQygpKTsKICAgICAgICAgcGRjLT5TZXRNYXBNb2RlKHd4
TU1fUE9JTlRTKTsKLSAgICAgICAgaW50IHBhZ2VXaWR0aCA9IDA7Ci0gICAgICAgIGludCBwYWdl
SGVpZ2h0ID0gMDsKLSAgICAgICAgR2V0UGFnZVNpemVNTSgmcGFnZVdpZHRoLCAmcGFnZUhlaWdo
dCk7Ci0gICAgICAgIAotICAgICAgICBJbml0aWFsaXplV2l0aFBhZ2VTaXplKHd4UmVjdCgwLCAw
LCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpKTsKKyAgICAgICAgaW50IHBpeGVsc1cgPSAwOworICAg
ICAgICBpbnQgcGl4ZWxzSCA9IDA7CisgICAgICAgIHBkYy0+R2V0U2l6ZSgmcGl4ZWxzVywgJnBp
eGVsc0gpOworICAgICAgICBwaXhlbHNXID0gcGRjLT5EZXZpY2VUb0xvZ2ljYWxYUmVsKHBpeGVs
c1cpOworICAgICAgICBwaXhlbHNIID0gcGRjLT5EZXZpY2VUb0xvZ2ljYWxZUmVsKHBpeGVsc0gp
OworICAgICAgICBJbml0aWFsaXplV2l0aFBhZ2VTaXplKHd4UmVjdCgwLCAwLCBwaXhlbHNXLCBw
aXhlbHNIIC0gNDApLCBmYWxzZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgR2V0UGFnZUluZm8o
aW50ICptaW5QYWdlLCBpbnQgKm1heFBhZ2UsIGludCAqcGFnZUZyb20sIGludCAqcGFnZVRvKQpA
QCAtMTU2LDggKzE1OCwxNSBAQAogICAgIGJvb2wgT25QcmludFBhZ2UoaW50IHBhZ2VOdW0pCiAg
ICAgewogICAgICAgICB3eFByaW50ZXJEQyogcGRjID0gZHluYW1pY19jYXN0PHd4UHJpbnRlckRD
Kj4oR2V0REMoKSk7Ci0gICAgICAgIAotICAgICAgICB3eEdDREMgZ2NkYygqcGRjKTsKKyNpZiB3
eENIRUNLX1ZFUlNJT04oMiwgOSwgMikgJiYgZGVmaW5lZCh3eFVTRV9DQUlSTykgJiYgd3hVU0Vf
Q0FJUk8KKyAgICAgICAgd3hHcmFwaGljc1JlbmRlcmVyKiByZW5kZXJlciA9IHd4R3JhcGhpY3NS
ZW5kZXJlcjo6R2V0Q2Fpcm9SZW5kZXJlcigpOworICAgICAgICBpZiAoIXJlbmRlcmVyKQorICAg
ICAgICAgICAgcmVuZGVyZXIgPSB3eEdyYXBoaWNzUmVuZGVyZXI6OkdldERlZmF1bHRSZW5kZXJl
cigpOworICAgICAgICB3eEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHJlbmRlcmVyLT5DcmVh
dGVDb250ZXh0KCpwZGMpOworICAgICAgICB3eEdDREMgZ2NkYyhjb250ZXh0KTsKKyNlbHNlCisg
ICAgICAgIHd4R0NEQyBnY2RjKHBkYyk7CisjZW5kaWYKICAgICAgICAgaWYgKCFnY2RjLklzT2so
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNTkyLDggKzYwMSwxNCBAQAogICAg
IHd4UHJpbnREaWFsb2dEYXRhIHByaW50ZGF0YTsKICAgICBwcmludGRhdGEuR2V0UHJpbnREYXRh
KCkuU2V0UHJpbnRNb2RlKHd4UFJJTlRfTU9ERV9QUklOVEVSKTsKICAgICBwcmludGRhdGEuR2V0
UHJpbnREYXRhKCkuU2V0Tm9Db3BpZXMoMSk7CisjaWYgd3hDSEVDS19WRVJTSU9OKDIsIDksIDIp
CiAgICAgcHJpbnRkYXRhLkdldFByaW50RGF0YSgpLkNvbnZlcnRGcm9tTmF0aXZlKCk7Ci0gICAg
CisjZWxzZQorICAgIC8vIGR1ZSB0byB3eCBidWdzLCB3ZSBjYW5ub3QgZ2V0IHRoZSBhY3R1YWwg
bmF0aXZlIGRlZmF1bHQgcGFwZXIgdHlwZSBiZWZvcmUgc2hvd2luZyB0aGUgZGlhbG9nIHVudGls
IDIuOS4yLCAKKyAgICAvLyBzbyBwaWNrIGEgY29tbW9uIGRlZmF1bHQgaW5zdGVhZC4KKyAgICBw
cmludGRhdGEuR2V0UHJpbnREYXRhKCkuU2V0UGFwZXJJZCh3eFBBUEVSX0xFVFRFUik7CisjZW5k
aWYKKwogICAgIHd4UGFnZVNldHVwRGlhbG9nRGF0YSBwYWdlU2V0dXAocHJpbnRkYXRhLkdldFBy
aW50RGF0YSgpKTsKIAogICAgIHd4UmVjdCBwYXBlclNpemUgPSBwYWdlU2V0dXAuR2V0UGFwZXJT
aXplKCk7CkBAIC02MTMsOSArNjI4LDkgQEAKICAgICBpZiAoc2hvd0RpYWxvZykgewogICAgICAg
ICB3eFByaW50RGlhbG9nIGRpYWxvZygwLCAmcHJpbnRkYXRhKTsKICAgICAgICAgaWYgKGRpYWxv
Zy5TaG93TW9kYWwoKSA9PSB3eElEX09LKSB7Ci0gICAgICAgICAgICB3eFByaW50RGlhbG9nRGF0
YSB1cGRhdGVkUHJpbnRkYXRhID0gZGlhbG9nLkdldFByaW50RGlhbG9nRGF0YSgpOyAgICAgICAg
ICAgIAotICAgICAgICAgICAgcHJpbnRvdXQtPlNldEZpcnN0UGFnZSh1cGRhdGVkUHJpbnRkYXRh
LkdldEZyb21QYWdlKCkpOwotICAgICAgICAgICAgcHJpbnRvdXQtPlNldExhc3RQYWdlKHVwZGF0
ZWRQcmludGRhdGEuR2V0VG9QYWdlKCkpOworICAgICAgICAgICAgcHJpbnRkYXRhID0gZGlhbG9n
LkdldFByaW50RGlhbG9nRGF0YSgpOyAgICAgICAgICAgIAorICAgICAgICAgICAgcHJpbnRvdXQt
PlNldEZpcnN0UGFnZShwcmludGRhdGEuR2V0RnJvbVBhZ2UoKSk7CisgICAgICAgICAgICBwcmlu
dG91dC0+U2V0TGFzdFBhZ2UocHJpbnRkYXRhLkdldFRvUGFnZSgpKTsKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ0
OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSw1NyBAQAorMjAxMS0wOS0wMyAgUm9iaW4gRHVubiAgPHJvYmluQGFsbGR1bm4uY29tPgorCisg
ICAgICAgIFt3eF0gRW5hYmxlIHd4V2ViS2l0IHRvIHJ1biB1c2luZyB0aGUgd3hHQyBDYWlybyBi
YWNrZW5kIG9uIHBsYXRmb3JtcyBvdGhlciB0aGFuIEdUSy4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVm
ZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6Z2x5cGhBdCk6CisgICAgICAg
IChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6YWRkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlw
UGF0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvUGF0aFd4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBhdGg6OlBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Y2xlYXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L1RyYW5zZm9ybWF0aW9uTWF0cml4V3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yIHd4
R3JhcGhpY3NNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpvcGVy
YXRvciB3eEdyYXBoaWNzTWF0cml4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy93eC9JbWFnZURlY29kZXJXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjph
c05ld05hdGl2ZUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNw
cDoKKyAgICAgICAgKENvbnRleHRNZW51OjpDb250ZXh0TWVudSk6CisgICAgICAgICogcGxhdGZv
cm0vd3gvTG9jYWxEQy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsREM6OkxvY2Fs
REMpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxEQzo6Y29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpMb2NhbERDOjp+TG9jYWxEQyk6CisgICAgICAgICogcGxhdGZvcm0vd3gvUmVuZGVyVGhl
bWVXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVd4OjpwYWludEJ1dHRvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVd4OjpwYWludFRleHRGaWVsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVd4OjpwYWludE1lbnVMaXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lV3g6OnBhaW50TWVudUxpc3RCdXR0b24pOgorICAgICAgICAqIHBs
YXRmb3JtL3d4L1Njcm9sbGJhclRoZW1lV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyVGhlbWVXeDo6cGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3d4L3d4Y29kZS9jYWlybzog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vd3gvd3hjb2RlL2NhaXJvL25vbi1rZXJuZWQtZHJh
d2luZy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6cGFuZ29Gb250TWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZVBhbmdvRm9udEZvckZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlU2NhbGVkRm9udEZvckZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFuZ29fZm9udF9n
ZXRfZ2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1RleHRXaXRoU3BhY2luZyk6CisgICAg
ICAgICogcGxhdGZvcm0vd3gvd3hjb2RlL2dkaXBsdXM6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL3d4L3d4Y29kZS9nZGlwbHVzL25vbi1rZXJuZWQtZHJhd2luZy5jcHA6IEFkZGVkLgorICAg
ICAgICAoZG1pbik6CisgICAgICAgIChkbWF4KToKKyAgICAgICAgKERlZ1RvUmFkKToKKyAgICAg
ICAgKFJhZFRvRGVnKToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdUZXh0V2l0aFNwYWNpbmcpOgor
ICAgICAgICAqIHBsYXRmb3JtL3d4L3d4Y29kZS9ndGsvbm9uLWtlcm5lZC1kcmF3aW5nLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC93eGNvZGUvd2luL25vbi1rZXJuZWQtZHJh
d2luZy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vd3gvd3hjb2RlL3dpbi9zY3Jv
bGxiYXJfcmVuZGVyLmNwcDoKKyAgICAgICAgKEdyYXBoaWNzSERDOjpHcmFwaGljc0hEQyk6Cisg
ICAgICAgIChHcmFwaGljc0hEQzo6fkdyYXBoaWNzSERDKToKKyAgICAgICAgKHd4UmVuZGVyZXJf
RHJhd1Njcm9sbGJhcik6CisKIDIwMTEtMDktMDMgIExhc3psbyBHb21ib3MgIDxsYXN6bG8uMS5n
b21ib3NAbm9raWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHI4NjI2OCk6IEZpeCBmb3Ig
cXRfbmV0d29ya0FjY2Vzc0FsbG93ZWQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2x5cGhCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCShyZXZpc2lvbiA5NDQ5OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9u
U2VydmljZXMuaD4KICNlbmRpZgogCi0jaWYgVVNFKENBSVJPKSB8fCAoUExBVEZPUk0oV1gpICYm
IGRlZmluZWQoX19XWEdUS19fKSkKKyNpZiBVU0UoQ0FJUk8pIHx8IChQTEFURk9STShXWCkgJiYg
ZGVmaW5lZCh3eFVTRV9DQUlSTykgJiYgd3hVU0VfQ0FJUk8pCiAjaW5jbHVkZSA8Y2Fpcm8uaD4K
ICNlbmRpZgogCkBAIC01MSw3ICs1MSw3IEBACiAKIGNsYXNzIFNpbXBsZUZvbnREYXRhOwogCi0j
aWYgVVNFKENBSVJPKQorI2lmIFVTRShDQUlSTykgfHwgKFBMQVRGT1JNKFdYKSAmJiBkZWZpbmVk
KHd4VVNFX0NBSVJPKSAmJiB3eFVTRV9DQUlSTykKIC8vIEZJWE1FOiBXaHkgZG9lcyBDYWlybyB1
c2Ugc3VjaCBhIGh1Z2Ugc3RydWN0IGluc3RlYWQgb2YganVzdCBhbiBvZmZzZXQgaW50byBhbiBh
cnJheT8KIHR5cGVkZWYgY2Fpcm9fZ2x5cGhfdCBHbHlwaEJ1ZmZlckdseXBoOwogI2VsaWYgT1Mo
V0lOQ0UpCkBAIC0xMTcsNyArMTE3LDcgQEAKIAogICAgIEdseXBoIGdseXBoQXQoaW50IGluZGV4
KSBjb25zdAogICAgIHsKLSNpZiBVU0UoQ0FJUk8pCisjaWYgVVNFKENBSVJPKSB8fCAoUExBVEZP
Uk0oV1gpICYmIGRlZmluZWQod3hVU0VfQ0FJUk8pICYmIHd4VVNFX0NBSVJPKQogICAgICAgICBy
ZXR1cm4gbV9nbHlwaHNbaW5kZXhdLmluZGV4OwogI2Vsc2UKICAgICAgICAgcmV0dXJuIG1fZ2x5
cGhzW2luZGV4XTsKQEAgLTE0OSw3ICsxNDksNyBAQAogICAgIHsKICAgICAgICAgbV9mb250RGF0
YS5hcHBlbmQoZm9udCk7CiAKLSNpZiBVU0UoQ0FJUk8pCisjaWYgVVNFKENBSVJPKSB8fCAoUExB
VEZPUk0oV1gpICYmIGRlZmluZWQod3hVU0VfQ0FJUk8pICYmIHd4VVNFX0NBSVJPKQogICAgICAg
ICBjYWlyb19nbHlwaF90IGNhaXJvR2x5cGg7CiAgICAgICAgIGNhaXJvR2x5cGguaW5kZXggPSBn
bHlwaDsKICAgICAgICAgbV9nbHlwaHMuYXBwZW5kKGNhaXJvR2x5cGgpOwpAQCAtMTgwLDcgKzE4
MCw3IEBACiAgICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
b250LCBHbHlwaEJ1ZmZlckFkdmFuY2UgYWR2YW5jZSkKICAgICB7CiAgICAgICAgIG1fZm9udERh
dGEuYXBwZW5kKGZvbnQpOwotI2lmIFVTRShDQUlSTykKKyNpZiBVU0UoQ0FJUk8pIHx8IChQTEFU
Rk9STShXWCkgJiYgZGVmaW5lZCh3eFVTRV9DQUlSTykgJiYgd3hVU0VfQ0FJUk8pCiAgICAgICAg
IGNhaXJvX2dseXBoX3QgY2Fpcm9HbHlwaDsKICAgICAgICAgY2Fpcm9HbHlwaC5pbmRleCA9IGds
eXBoOwogICAgICAgICBtX2dseXBocy5hcHBlbmQoY2Fpcm9HbHlwaCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFd4LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9UcmFuc2Zv
cm1hdGlvbk1hdHJpeFd4LmNwcAkocmV2aXNpb24gOTQ0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93eC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFd4LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDAsNyArNDAsMTIgQEAKICNpZiBVU0UoV1hHQykKIFRyYW5zZm9ybWF0aW9uTWF0
cml4OjpvcGVyYXRvciB3eEdyYXBoaWNzTWF0cml4KCkgY29uc3QKIHsKLSAgICB3eEdyYXBoaWNz
UmVuZGVyZXIqIHJlbmRlcmVyID0gd3hHcmFwaGljc1JlbmRlcmVyOjpHZXREZWZhdWx0UmVuZGVy
ZXIoKTsKKyAgICB3eEdyYXBoaWNzUmVuZGVyZXIqIHJlbmRlcmVyID0gMDsKKyNpZiB3eFVTRV9D
QUlSTworICAgIHJlbmRlcmVyID0gd3hHcmFwaGljc1JlbmRlcmVyOjpHZXRDYWlyb1JlbmRlcmVy
KCk7CisjZWxzZQorICAgIHJlbmRlcmVyID0gd3hHcmFwaGljc1JlbmRlcmVyOjpHZXREZWZhdWx0
UmVuZGVyZXIoKTsKKyNlbmRpZgogICAgIEFTU0VSVChyZW5kZXJlcik7CiAgICAgCiAgICAgd3hH
cmFwaGljc01hdHJpeCBtYXRyaXggPSByZW5kZXJlci0+Q3JlYXRlTWF0cml4KGEoKSwgYigpLCBj
KCksIGQoKSwgZSgpLCBmKCkpOwpAQCAtNDksNyArNTQsMTIgQEAKIAogQWZmaW5lVHJhbnNmb3Jt
OjpvcGVyYXRvciB3eEdyYXBoaWNzTWF0cml4KCkgY29uc3QKIHsKLSAgICB3eEdyYXBoaWNzUmVu
ZGVyZXIqIHJlbmRlcmVyID0gd3hHcmFwaGljc1JlbmRlcmVyOjpHZXREZWZhdWx0UmVuZGVyZXIo
KTsKKyAgICB3eEdyYXBoaWNzUmVuZGVyZXIqIHJlbmRlcmVyID0gMDsKKyNpZiB3eFVTRV9DQUlS
TworICAgIHJlbmRlcmVyID0gd3hHcmFwaGljc1JlbmRlcmVyOjpHZXRDYWlyb1JlbmRlcmVyKCk7
CisjZWxzZQorICAgIHJlbmRlcmVyID0gd3hHcmFwaGljc1JlbmRlcmVyOjpHZXREZWZhdWx0UmVu
ZGVyZXIoKTsKKyNlbmRpZgogICAgIEFTU0VSVChyZW5kZXJlcik7CiAgICAgCiAgICAgd3hHcmFw
aGljc01hdHJpeCBtYXRyaXggPSByZW5kZXJlci0+Q3JlYXRlTWF0cml4KGEoKSwgYigpLCBjKCks
IGQoKSwgZSgpLCBmKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d3gvUGF0aFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93eC9QYXRoV3guY3BwCShyZXZpc2lvbiA5NDQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3d4L1BhdGhXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3
LDEyIEBACiAgICAgLy8gcmVuZGVyZXIgYW4gYXBwIGlzIHVzaW5nIHJpZ2h0IG5vdyB3aXRoIHd4
IEFQSSwgc28gd2Ugd2lsbCBqdXN0IGhhbmRsZQogICAgIC8vIHRoZSBjb21tb24gY2FzZS4KICNp
ZiBVU0UoV1hHQykKLSAgICB3eEdyYXBoaWNzUmVuZGVyZXIqIHJlbmRlcmVyID0gd3hHcmFwaGlj
c1JlbmRlcmVyOjpHZXREZWZhdWx0UmVuZGVyZXIoKTsgCisgICAgd3hHcmFwaGljc1JlbmRlcmVy
KiByZW5kZXJlciA9IDA7CisjaWYgd3hVU0VfQ0FJUk8KKyAgICByZW5kZXJlciA9IHd4R3JhcGhp
Y3NSZW5kZXJlcjo6R2V0Q2Fpcm9SZW5kZXJlcigpOworI2Vsc2UKKyAgICByZW5kZXJlciA9IHd4
R3JhcGhpY3NSZW5kZXJlcjo6R2V0RGVmYXVsdFJlbmRlcmVyKCk7CisjZW5kaWYKICAgICBpZiAo
cmVuZGVyZXIpIHsKICAgICAgICAgd3hHcmFwaGljc1BhdGggcGF0aCA9IHJlbmRlcmVyLT5DcmVh
dGVQYXRoKCk7CiAgICAgICAgIG1fcGF0aCA9IG5ldyB3eEdyYXBoaWNzUGF0aChwYXRoKTsKQEAg
LTEyOCw4ICsxMzMsMTIgQEAKICAgICBpZiAobV9wYXRoKQogICAgICAgICBkZWxldGUgbV9wYXRo
OwogCi0jaWYgVVNFKFdYR0MpICAgCi0gICAgd3hHcmFwaGljc1JlbmRlcmVyKiByZW5kZXJlciA9
IHd4R3JhcGhpY3NSZW5kZXJlcjo6R2V0RGVmYXVsdFJlbmRlcmVyKCk7IAorI2lmIFVTRShXWEdD
KQorI2lmIHd4VVNFX0NBSVJPCisgICAgd3hHcmFwaGljc1JlbmRlcmVyKiByZW5kZXJlciA9IHd4
R3JhcGhpY3NSZW5kZXJlcjo6R2V0Q2Fpcm9SZW5kZXJlcigpOworI2Vsc2UKKyAgICB3eEdyYXBo
aWNzUmVuZGVyZXIqIHJlbmRlcmVyID0gd3hHcmFwaGljc1JlbmRlcmVyOjpHZXREZWZhdWx0UmVu
ZGVyZXIoKTsKKyNlbmRpZgogICAgIGlmIChyZW5kZXJlcikgewogICAgICAgICB3eEdyYXBoaWNz
UGF0aCBwYXRoID0gcmVuZGVyZXItPkNyZWF0ZVBhdGgoKTsKICAgICAgICAgbV9wYXRoID0gbmV3
IHd4R3JhcGhpY3NQYXRoKHBhdGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAkocmV2aXNpb24g
OTQ0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0Nv
bnRleHRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDEwIEBACiAjaW5jbHVkZSA8
d3gvZGNncmFwaC5oPgogI2luY2x1ZGUgPHd4L2dyYXBoaWNzLmg+CiAKKyNpZiB3eFVTRV9DQUlS
TworI2luY2x1ZGUgPGNhaXJvLmg+CisjZW5kaWYKKwogI2lmIF9fV1hNQUNfXwogI2luY2x1ZGUg
PENhcmJvbi9DYXJib24uaD4KICNlbGlmIF9fV1hNU1dfXwpAQCAtMzU0LDcgKzM1OCwxOCBAQAog
I2lmIFVTRShXWEdDKQogICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IG1fZGF0YS0+Y29udGV4
dC0+R2V0R3JhcGhpY3NDb250ZXh0KCk7CiAKLSNpZmRlZiBfX1dYTUFDX18KKyNpZiB3eFVTRV9D
QUlSTworICAgIGRvdWJsZSB4MSwgeTEsIHgyLCB5MjsKKyAgICBjYWlyb190KiBjciA9IChjYWly
b190KilnYy0+R2V0TmF0aXZlQ29udGV4dCgpOworICAgIGNhaXJvX2NsaXBfZXh0ZW50cyhjciwg
JngxLCAmeTEsICZ4MiwgJnkyKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHgxLCB5MSwgeDIg
LSB4MSwgeTIgLSB5MSk7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByZWN0LngoKSwgcmVjdC55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgY2Fpcm9fZmlsbF9ydWxlX3Qg
c2F2ZWRGaWxsUnVsZSA9IGNhaXJvX2dldF9maWxsX3J1bGUoY3IpOworICAgIGNhaXJvX3NldF9m
aWxsX3J1bGUoY3IsIENBSVJPX0ZJTExfUlVMRV9FVkVOX09ERCk7CisgICAgY2Fpcm9fY2xpcChj
cik7CisgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgc2F2ZWRGaWxsUnVsZSk7CisKKyNlbGlm
IF9fV1hNQUNfXwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gKENHQ29udGV4dFJlZilnYy0+
R2V0TmF0aXZlQ29udGV4dCgpOwogCiAgICAgQ0dSZWN0IHJlY3RzWzJdID0geyBDR0NvbnRleHRH
ZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCksIENHUmVjdE1ha2UocmVjdC54KCksIHJlY3QueSgp
LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpIH07CkBAIC0zNjIsOSArMzc3LDggQEAKICAg
ICBDR0NvbnRleHRBZGRSZWN0cyhjb250ZXh0LCByZWN0cywgMik7CiAgICAgQ0dDb250ZXh0RU9D
bGlwKGNvbnRleHQpOwogICAgIHJldHVybjsKLSNlbmRpZgogCi0jaWZkZWYgX19XWE1TV19fCisj
ZWxpZiBfX1dYTVNXX18KICAgICBHZGlwbHVzOjpHcmFwaGljcyogZyA9IChHZGlwbHVzOjpHcmFw
aGljcyopZ2MtPkdldE5hdGl2ZUNvbnRleHQoKTsKICAgICBHZGlwbHVzOjpSZWdpb24gZXhjbHVk
ZVJlZ2lvbihHZGlwbHVzOjpSZWN0KHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKSk7CiAgICAgZy0+RXhjbHVkZUNsaXAoJmV4Y2x1ZGVSZWdpb24pOwpAQCAt
Mzg2LDcgKzQwMCwxNiBAQAogICAgIAogICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IG1fZGF0
YS0+Y29udGV4dC0+R2V0R3JhcGhpY3NDb250ZXh0KCk7CiAKLSNpZiBfX1dYTUFDX18KKyNpZiB3
eFVTRV9DQUlSTworICAgIGNhaXJvX3QqIGNyID0gKGNhaXJvX3QqKWdjLT5HZXROYXRpdmVDb250
ZXh0KCk7CisgICAgY2Fpcm9fcGF0aF90KiBuYXRpdmVQYXRoID0gKGNhaXJvX3BhdGhfdCopcGF0
aC5wbGF0Zm9ybVBhdGgoKS0+R2V0TmF0aXZlUGF0aCgpOworCisgICAgY2Fpcm9fbmV3X3BhdGgo
Y3IpOworICAgIGNhaXJvX2FwcGVuZF9wYXRoKGNyLCBuYXRpdmVQYXRoKTsKKworICAgIGNhaXJv
X3NldF9maWxsX3J1bGUoY3IsIGNsaXBSdWxlID09IFJVTEVfRVZFTk9ERCA/IENBSVJPX0ZJTExf
UlVMRV9FVkVOX09ERCA6IENBSVJPX0ZJTExfUlVMRV9XSU5ESU5HKTsKKyAgICBjYWlyb19jbGlw
KGNyKTsKKyNlbGlmIF9fV1hNQUNfXwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gKENHQ29u
dGV4dFJlZilnYy0+R2V0TmF0aXZlQ29udGV4dCgpOyAgIAogICAgIENHUGF0aFJlZiBuYXRpdmVQ
YXRoID0gKENHUGF0aFJlZilwYXRoLnBsYXRmb3JtUGF0aCgpLT5HZXROYXRpdmVQYXRoKCk7IAog
ICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvTG9jYWxEQy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0xvY2FsREMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0xvY2FsREMuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBLZXZpbiBPbGxpdmllciA8
a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisK
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCisjaW5jbHVkZSA8d3gvZGVmcy5oPgorCisj
aW5jbHVkZSA8d3gvZGMuaD4KKyNpbmNsdWRlIDx3eC9kY21lbW9yeS5oPgorI2luY2x1ZGUgPHd4
L3Jhd2JtcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3d4Qml0bWFwKiB0cmFuc3BhcmVu
dEJpdG1hcChpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCitjbGFzcyBMb2NhbERDIHsKKworcHVi
bGljOgorICAgIExvY2FsREMod3hEQyogaG9zdCwgY29uc3QgSW50UmVjdCYgcikKKyAgICB7Cisj
aWZuZGVmIF9fV1hNQUNfXworICAgICAgICBtX2hvc3QgPSBob3N0OworICAgICAgICBpbnQgd2lk
dGggPSByLndpZHRoKCk7CisgICAgICAgIGludCBoZWlnaHQgPSByLmhlaWdodCgpOworICAgICAg
ICBtX2JpdG1hcCA9IG5ldyB3eEJpdG1hcCh3aWR0aCwgaGVpZ2h0LCAzMik7CisgICAgICAgIHd4
QWxwaGFQaXhlbERhdGEgcGl4RGF0YSgqbV9iaXRtYXAsIHd4UG9pbnQoMCwwKSwgd3hTaXplKHdp
ZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgQVNTRVJUKHBpeERhdGEpOworICAgICAgICBpZiAocGl4
RGF0YSkgeworICAgICAgICAgICAgd3hBbHBoYVBpeGVsRGF0YTo6SXRlcmF0b3IgcChwaXhEYXRh
KTsKKyAgICAgICAgICAgIGZvciAoaW50IHk9MDsgeTxoZWlnaHQ7IHkrKykgeworICAgICAgICAg
ICAgICAgIHd4QWxwaGFQaXhlbERhdGE6Okl0ZXJhdG9yIHJvd1N0YXJ0ID0gcDsKKyAgICAgICAg
ICAgICAgICBmb3IgKGludCB4PTA7IHg8d2lkdGg7IHgrKykgeworICAgICAgICAgICAgICAgICAg
ICBwLkFscGhhKCkgPSAwOworICAgICAgICAgICAgICAgICAgICArK3A7IAorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBwID0gcm93U3RhcnQ7CisgICAgICAgICAgICAgICAgcC5P
ZmZzZXRZKHBpeERhdGEsIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
bV9jb250ZXh0ID0gbmV3IHd4TWVtb3J5REMoKm1fYml0bWFwKTsKKyAgICAgICAgbV9jb250ZXh0
LT5TZXREZXZpY2VPcmlnaW4oLXIueCgpLCAtci55KCkpOworICAgICAgICBtX3JlY3QgPSByOwor
I2Vsc2UKKyAgICAgICAgbV9jb250ZXh0ID0gaG9zdDsKKyNlbmRpZgorICAgIH0KKworICAgIHd4
REMqIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KKworICAgIH5Mb2NhbERDKCkKKyAg
ICB7CisjaWZuZGVmIF9fV1hNQUNfXworICAgICAgICBkZWxldGUgbV9jb250ZXh0OworICAgICAg
ICBtX2hvc3QtPkRyYXdCaXRtYXAoKm1fYml0bWFwLCBtX3JlY3QueCgpLCBtX3JlY3QueSgpKTsK
KyAgICAgICAgZGVsZXRlIG1fYml0bWFwOworI2VuZGlmCisgICAgfQorCitwcml2YXRlOgorICAg
IHd4REMqIG1faG9zdDsKKyAgICB3eERDKiBtX2NvbnRleHQ7CisgICAgd3hCaXRtYXAqIG1fYml0
bWFwOworICAgIEludFJlY3QgbV9yZWN0OworICAgICAgICAgICAgCit9OworCit9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvZ3RrL25vbi1rZXJuZWQtZHJhd2luZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL2d0ay9u
b24ta2VybmVkLWRyYXdpbmcuY3BwCShyZXZpc2lvbiA5NDQ5OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3d4L3d4Y29kZS9ndGsvbm9uLWtlcm5lZC1kcmF3aW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwyNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBX
YXR0ZXJzLCBLZXZpbiBPbGxpdmllci4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLQotI2luY2x1ZGUg
PHd4L2RjLmg+Ci0jaW5jbHVkZSA8d3gvZGNncmFwaC5oPgotI2luY2x1ZGUgPHd4L2RlZnMuaD4K
LSNpbmNsdWRlIDx3eC9kY2NsaWVudC5oPgotI2luY2x1ZGUgPHd4L2dkaWNtbi5oPgotI2luY2x1
ZGUgPHZlY3Rvcj4KLQotI2lmIFVTRShXWEdDKQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVk
ZSA8YXNzZXJ0Lmg+Ci0KLSNpbmNsdWRlIDxwYW5nby9wYW5nby5oPgotI2luY2x1ZGUgPHBhbmdv
L3BhbmdvY2Fpcm8uaD4KLQotLy8gVXNlIGNhaXJvLWZ0IGlmIGEgcmVjZW50IGVub3VnaCBQYW5n
byB2ZXJzaW9uIGlzbid0IGF2YWlsYWJsZQotI2lmICFQQU5HT19WRVJTSU9OX0NIRUNLKDEsMTgs
MCkKLSNpbmNsdWRlIDxjYWlyby1mdC5oPgotI2luY2x1ZGUgPHBhbmdvL3BhbmdvZmMtZm9udG1h
cC5oPgotI2VuZGlmCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLSNpZiBVU0UoV1hHQykKLXN0YXRpYyBQYW5nb0ZvbnRNYXAqIGdfZm9u
dE1hcDsKLQotUGFuZ29Gb250TWFwKiBwYW5nb0ZvbnRNYXAoKQotewotICAgIGlmICghZ19mb250
TWFwKQotICAgICAgICBnX2ZvbnRNYXAgPSBwYW5nb19jYWlyb19mb250X21hcF9nZXRfZGVmYXVs
dCgpOwotCi0gICAgcmV0dXJuIGdfZm9udE1hcDsKLX0KLQotUGFuZ29Gb250KiBjcmVhdGVQYW5n
b0ZvbnRGb3JGb250KGNvbnN0IHd4Rm9udCogd3hmb250KQotewotICAgIEFTU0VSVCh3eGZvbnQg
JiYgd3hmb250LT5PaygpKTsKLQotICAgIGNvbnN0IGNoYXIqIGZhY2UgPSB3eGZvbnQtPkdldEZh
Y2VOYW1lKCkubWJfc3RyKHd4Q29udlVURjgpOwotICAgIGNoYXIgY29uc3QqIGZhbWlsaWVzW10g
PSB7Ci0gICAgICAgIGZhY2UsCi0gICAgICAgIDAKLSAgICB9OwotCi0gICAgc3dpdGNoICh3eGZv
bnQtPkdldEZhbWlseSgpKSB7Ci0gICAgY2FzZSB3eEZPTlRGQU1JTFlfUk9NQU46Ci0gICAgICAg
IGZhbWlsaWVzWzFdID0gInNlcmlmIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSB3eEZPTlRG
QU1JTFlfU1dJU1M6Ci0gICAgICAgIGZhbWlsaWVzWzFdID0gInNhbnMiOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIHd4Rk9OVEZBTUlMWV9NT0RFUk46Ci0gICAgICAgIGZhbWlsaWVzWzFdID0g
Im1vbm9zcGFjZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZhbWls
aWVzWzFdID0gInNhbnMiOwotICAgIH0KLSAgICAKLSAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiog
ZGVzY3JpcHRpb24gPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX25ldygpOwotICAgIHBhbmdvX2Zv
bnRfZGVzY3JpcHRpb25fc2V0X2Fic29sdXRlX3NpemUoZGVzY3JpcHRpb24sIHd4Zm9udC0+R2V0
UG9pbnRTaXplKCkgKiBQQU5HT19TQ0FMRSk7Ci0gCi0gICAgUGFuZ29Gb250KiBwYW5nb0ZvbnQg
PSAwOwotICAgIFBhbmdvQ29udGV4dCogcGFuZ29Db250ZXh0ID0gMDsKLQotICAgIHN3aXRjaCAo
d3hmb250LT5HZXRXZWlnaHQoKSkgewotICAgIGNhc2Ugd3hGT05UV0VJR0hUX0xJR0hUOgotICAg
ICAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX3NldF93ZWlnaHQoZGVzY3JpcHRpb24sIFBBTkdP
X1dFSUdIVF9MSUdIVCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugd3hGT05UV0VJR0hUX05P
Uk1BTDoKLSAgICAgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfd2VpZ2h0KGRlc2NyaXB0
aW9uLCBQQU5HT19XRUlHSFRfTk9STUFMKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSB3eEZP
TlRXRUlHSFRfQk9MRDoKLSAgICAgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfd2VpZ2h0
KGRlc2NyaXB0aW9uLCBQQU5HT19XRUlHSFRfQk9MRCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIHN3aXRjaCAod3hmb250LT5HZXRTdHlsZSgpKSB7Ci0gICAgY2FzZSB3eEZPTlRTVFlM
RV9OT1JNQUw6Ci0gICAgICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fc2V0X3N0eWxlKGRlc2Ny
aXB0aW9uLCBQQU5HT19TVFlMRV9OT1JNQUwpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIHd4
Rk9OVFNUWUxFX0lUQUxJQzoKLSAgICAgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfc3R5
bGUoZGVzY3JpcHRpb24sIFBBTkdPX1NUWUxFX0lUQUxJQyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2Ugd3hGT05UU1RZTEVfU0xBTlQ6Ci0gICAgICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25f
c2V0X3N0eWxlKGRlc2NyaXB0aW9uLCBQQU5HT19TVFlMRV9PQkxJUVVFKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgUGFuZ29Gb250TWFwKiBmb250TWFwID0gcGFuZ29Gb250TWFwKCk7
Ci0KLSAgICBwYW5nb0NvbnRleHQgPSBwYW5nb19jYWlyb19mb250X21hcF9jcmVhdGVfY29udGV4
dChQQU5HT19DQUlST19GT05UX01BUChmb250TWFwKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgIXBhbmdvRm9udCAmJiBpIDwgR19OX0VMRU1FTlRTKGZhbWlsaWVzKTsgaSsrKSB7Ci0gICAg
ICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fc2V0X2ZhbWlseShkZXNjcmlwdGlvbiwgZmFtaWxp
ZXNbaV0pOwotICAgICAgICBwYW5nb19jb250ZXh0X3NldF9mb250X2Rlc2NyaXB0aW9uKHBhbmdv
Q29udGV4dCwgZGVzY3JpcHRpb24pOwotICAgICAgICBwYW5nb0ZvbnQgPSBwYW5nb19mb250X21h
cF9sb2FkX2ZvbnQoZm9udE1hcCwgcGFuZ29Db250ZXh0LCBkZXNjcmlwdGlvbik7Ci0gICAgfQot
ICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZShkZXNjcmlwdGlvbik7Ci0KLSAgICByZXR1
cm4gcGFuZ29Gb250OwotfQotCi1jYWlyb19zY2FsZWRfZm9udF90KiBjcmVhdGVTY2FsZWRGb250
Rm9yRm9udChjb25zdCB3eEZvbnQqIHd4Zm9udCkKLXsKLSAgICBBU1NFUlQod3hmb250ICYmIHd4
Zm9udC0+T2soKSk7Ci0KLSAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gTlVM
TDsKLSAgICBQYW5nb0ZvbnQqIHBhbmdvRm9udCA9IGNyZWF0ZVBhbmdvRm9udEZvckZvbnQod3hm
b250KTsKLSAgICAKLSNpZiBQQU5HT19WRVJTSU9OX0NIRUNLKDEsMTgsMCkKLSAgICBpZiAocGFu
Z29Gb250KQotICAgICAgICBzY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfcmVmZXJlbmNl
KHBhbmdvX2NhaXJvX2ZvbnRfZ2V0X3NjYWxlZF9mb250KFBBTkdPX0NBSVJPX0ZPTlQocGFuZ29G
b250KSkpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gc2NhbGVkRm9udDsKLX0KLQotUGFuZ29HbHlw
aCBwYW5nb19mb250X2dldF9nbHlwaChQYW5nb0ZvbnQqIGZvbnQsIFBhbmdvQ29udGV4dCogY29u
dGV4dCwgZ3VuaWNoYXIgd2MpCi17Ci0gICAgUGFuZ29HbHlwaCByZXN1bHQgPSAwOwotICAgIGdj
aGFyIGJ1ZmZlcls3XTsKLQotICAgIGdpbnQgIGxlbmd0aCA9IGdfdW5pY2hhcl90b191dGY4KHdj
LCBidWZmZXIpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGxlbmd0aCwgMCk7Ci0KLSAgICBH
TGlzdCogaXRlbXMgPSBwYW5nb19pdGVtaXplKGNvbnRleHQsIGJ1ZmZlciwgMCwgbGVuZ3RoLCBO
VUxMLCBOVUxMKTsKLQotICAgIGlmIChnX2xpc3RfbGVuZ3RoKGl0ZW1zKSA9PSAxKSB7Ci0gICAg
ICAgIFBhbmdvSXRlbSogaXRlbSA9IHN0YXRpY19jYXN0PFBhbmdvSXRlbSo+KGl0ZW1zLT5kYXRh
KTsKLSAgICAgICAgUGFuZ29Gb250KiB0bXBGb250ID0gaXRlbS0+YW5hbHlzaXMuZm9udDsKLSAg
ICAgICAgaXRlbS0+YW5hbHlzaXMuZm9udCA9IGZvbnQ7Ci0KLSAgICAgICAgUGFuZ29HbHlwaFN0
cmluZyogZ2x5cGhzID0gcGFuZ29fZ2x5cGhfc3RyaW5nX25ldygpOwotICAgICAgICBwYW5nb19z
aGFwZShidWZmZXIsIGxlbmd0aCwgJml0ZW0tPmFuYWx5c2lzLCBnbHlwaHMpOwotCi0gICAgICAg
IGl0ZW0tPmFuYWx5c2lzLmZvbnQgPSB0bXBGb250OwotCi0gICAgICAgIGlmIChnbHlwaHMtPm51
bV9nbHlwaHMgPT0gMSkKLSAgICAgICAgICAgIHJlc3VsdCA9IGdseXBocy0+Z2x5cGhzWzBdLmds
eXBoOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnX3dhcm5pbmcoImRpZG4ndCBnZXQgMSBn
bHlwaCBidXQgJWQiLCBnbHlwaHMtPm51bV9nbHlwaHMpOwotCi0gICAgICAgIHBhbmdvX2dseXBo
X3N0cmluZ19mcmVlKGdseXBocyk7Ci0gICAgfQotCi0gICAgZ19saXN0X2ZvcmVhY2goaXRlbXMs
IChHRnVuYylwYW5nb19pdGVtX2ZyZWUsIE5VTEwpOwotICAgIGdfbGlzdF9mcmVlKGl0ZW1zKTsK
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0jZW5kaWYgLy8gVVNFKFdYR0MpCi0KLQotdm9pZCBk
cmF3VGV4dFdpdGhTcGFjaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3Qgd3hDb2xvdXImIGNvbG9yLCBjb25zdCBHbHlw
aEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkKLXsKLSNpZiBVU0UoV1hHQykKLSAgICB3eEdDREMqIGRjID0gc3RhdGlj
X2Nhc3Q8d3hHQ0RDKj4oZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAg
d3hHcmFwaGljc0NvbnRleHQqIGdjID0gZGMtPkdldEdyYXBoaWNzQ29udGV4dCgpOwotICAgIGdj
LT5QdXNoU3RhdGUoKTsKLSAgICBjYWlyb190KiBjciA9IChjYWlyb190KilnYy0+R2V0TmF0aXZl
Q29udGV4dCgpOwotCi0gICAgd3hGb250KiB3eGZvbnQgPSBmb250LT5nZXRXeEZvbnQoKTsKLSAg
ICBQYW5nb0ZvbnQqIHBhbmdvRm9udCA9IGNyZWF0ZVBhbmdvRm9udEZvckZvbnQod3hmb250KTsK
LSAgICBQYW5nb0ZvbnRNYXAqIGZvbnRNYXAgPSBwYW5nb0ZvbnRNYXAoKTsKLSAgICBQYW5nb0Nv
bnRleHQqIHBhbmdvQ29udGV4dCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFwX2NyZWF0ZV9jb250ZXh0
KFBBTkdPX0NBSVJPX0ZPTlRfTUFQKGZvbnRNYXApKTsKLSAgICBjYWlyb19zY2FsZWRfZm9udF90
KiBzY2FsZWRfZm9udCA9IGNyZWF0ZVNjYWxlZEZvbnRGb3JGb250KHd4Zm9udCk7IAotICAgIEFT
U0VSVChzY2FsZWRfZm9udCk7Ci0KLSAgICBjYWlyb19nbHlwaF90KiBnbHlwaHMgPSBOVUxMOwot
ICAgIGdseXBocyA9IHN0YXRpY19jYXN0PGNhaXJvX2dseXBoX3QqPihtYWxsb2Moc2l6ZW9mKGNh
aXJvX2dseXBoX3QpICogbnVtR2x5cGhzKSk7Ci0KLSAgICBmbG9hdCBvZmZzZXQgPSBwb2ludC54
KCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUdseXBoczsgaSsrKSB7Ci0gICAgICAg
IGdseXBoc1tpXS5pbmRleCA9IHBhbmdvX2ZvbnRfZ2V0X2dseXBoKHBhbmdvRm9udCwgcGFuZ29D
b250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaEF0KGZyb20gKyBpKSk7Ci0gICAgICAgIGdseXBoc1tp
XS54ID0gb2Zmc2V0OwotICAgICAgICBnbHlwaHNbaV0ueSA9IHBvaW50LnkoKTsKLSAgICAgICAg
b2Zmc2V0ICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChmcm9tICsgaSk7Ci0gICAgfQotCi0gICAg
Y2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNyLCBjb2xvci5SZWQoKS8yNTUuMCwgY29sb3IuR3JlZW4o
KS8yNTUuMCwgY29sb3IuQmx1ZSgpLzI1NS4wLCBjb2xvci5BbHBoYSgpLzI1NS4wKTsKLSAgICBj
YWlyb19zZXRfc2NhbGVkX2ZvbnQoY3IsIHNjYWxlZF9mb250KTsKLSAgICAKLSAgICBjYWlyb19z
aG93X2dseXBocyhjciwgZ2x5cGhzLCBudW1HbHlwaHMpOwotCi0gICAgY2Fpcm9fc2NhbGVkX2Zv
bnRfZGVzdHJveShzY2FsZWRfZm9udCk7Ci0gICAgZ2MtPlBvcFN0YXRlKCk7Ci0jZWxzZQotICAg
IHd4REMqIGRjID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIHd4
Rm9udCogd3hmb250ID0gZm9udC0+Z2V0V3hGb250KCk7Ci0gICAgaWYgKHd4Zm9udCAmJiB3eGZv
bnQtPklzT2soKSkKLSAgICAgICAgZGMtPlNldEZvbnQoKnd4Zm9udCk7Ci0gICAgZGMtPlNldFRl
eHRGb3JlZ3JvdW5kKGNvbG9yKTsKLQotICAgIC8vIGNvbnZlcnQgZ2x5cGhzIHRvIHd4U3RyaW5n
Ci0gICAgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzID0gY29uc3RfY2FzdDxHbHlwaEJ1ZmZlckds
eXBoKj4oZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pKTsKLSAgICBpbnQgb2Zmc2V0ID0gcG9pbnQu
eCgpOwotICAgIHd4U3RyaW5nIHRleHQgPSB3eEVtcHR5U3RyaW5nOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgewotICAgICAgICB0ZXh0ID0gdGV4dC5BcHBl
bmQoKHd4Q2hhcilnbHlwaHNbaV0pOwotICAgICAgICBvZmZzZXQgKz0gZ2x5cGhCdWZmZXIuYWR2
YW5jZUF0KGZyb20gKyBpKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gdGhlIHkgcG9pbnQgaXMgYWN0
dWFsbHkgdGhlIGJvdHRvbSBwb2ludCBvZiB0aGUgdGV4dCwgdHVybiBpdCBpbnRvIHRoZSB0b3AK
LSAgICBmbG9hdCBoZWlnaHQgPSBmb250LT5hc2NlbnQoKSAtIGZvbnQtPmRlc2NlbnQoKTsKLSAg
ICB3eENvb3JkIHlwb2ludCA9ICh3eENvb3JkKSAocG9pbnQueSgpIC0gaGVpZ2h0KTsKLSAgICAg
Ci0gICAgZGMtPkRyYXdUZXh0KHRleHQsICh3eENvb3JkKXBvaW50LngoKSwgeXBvaW50KTsKLSNl
bmRpZgotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvZ2Rp
cGx1cy9ub24ta2VybmVkLWRyYXdpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3d4L3d4Y29kZS9nZGlwbHVzL25vbi1rZXJuZWQtZHJhd2luZy5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvZ2RpcGx1cy9ub24t
a2VybmVkLWRyYXdpbmcuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBXYXR0ZXJzLCBLZXZpbiBPbGxpdmllci4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaW5jbHVk
ZSA8d3gvZGVmcy5oPgorCisjaWYgMSAvLyAhd3hVU0VfQ0FJUk8KKworI2luY2x1ZGUgPHd4L2Rj
Y2xpZW50Lmg+CisjaW5jbHVkZSA8d3gvZGNncmFwaC5oPgorI2luY2x1ZGUgPHd4L2dkaWNtbi5o
PgorI2luY2x1ZGUgPHZlY3Rvcj4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gY29uc3RhbnRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Nv
bnN0IGRvdWJsZSBSQUQyREVHID0gMTgwLjAgLyBNX1BJOworCisvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBMb2NhbCBmdW5jdGlvbnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3RhdGlj
IGlubGluZSBkb3VibGUgZG1pbihkb3VibGUgYSwgZG91YmxlIGIpIHsgcmV0dXJuIGEgPCBiID8g
YSA6IGI7IH0KK3N0YXRpYyBpbmxpbmUgZG91YmxlIGRtYXgoZG91YmxlIGEsIGRvdWJsZSBiKSB7
IHJldHVybiBhID4gYiA/IGEgOiBiOyB9CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIERlZ1RvUmFk
KGRvdWJsZSBkZWcpIHsgcmV0dXJuIChkZWcgKiBNX1BJKSAvIDE4MC4wOyB9CitzdGF0aWMgaW5s
aW5lIGRvdWJsZSBSYWRUb0RlZyhkb3VibGUgZGVnKSB7IHJldHVybiAoZGVnICogMTgwLjApIC8g
TV9QSTsgfQorCisjaW5jbHVkZSAid3gvbXN3L3ByaXZhdGUuaCIKKworLy8gVE9ETyByZW1vdmUg
dGhpcyBkZXBlbmRlbmN5IChnZGlwbHVzIG5lZWRzIHRoZSBtYWNyb3MpCisKKyNpZm5kZWYgbWF4
CisjZGVmaW5lIG1heChhLGIpICAgICAgICAgICAgKCgoYSkgPiAoYikpID8gKGEpIDogKGIpKQor
I2VuZGlmCisKKyNpZm5kZWYgbWluCisjZGVmaW5lIG1pbihhLGIpICAgICAgICAgICAgKCgoYSkg
PCAoYikpID8gKGEpIDogKGIpKQorI2VuZGlmCisKKyNpbmNsdWRlICJnZGlwbHVzLmgiCisgCisj
aWYgd3hVU0VfQ0FJUk8KKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPGNhaXJvLXdpbjMy
Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIGRyYXdUZXh0V2l0aFNw
YWNpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250LCBjb25zdCB3eENvbG91ciYgY29sb3IsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlw
aEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KQoreworCisKKyNpZiBVU0UoV1hHQykKKyAgICB3eEdDREMqIGRjID0gc3RhdGljX2Nhc3Q8d3hH
Q0RDKj4oZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CisjZWxzZQorICAgIHd4
REMqIGRjID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyNlbmRpZgorCisg
ICAgLy8gZ2V0IHRoZSBuYXRpdmUgSERDIGhhbmRsZSB0byBkcmF3IHVzaW5nIG5hdGl2ZSBBUElz
CisgICAgSERDIGhkYyA9IDA7CisgICAgZmxvYXQgeSA9IHBvaW50LnkoKSAtIGZvbnQtPmZvbnRN
ZXRyaWNzKCkuYXNjZW50KCk7CisgICAgZmxvYXQgeCA9IHBvaW50LngoKTsKKworCisjaWYgVVNF
KFdYR0MpCisKKyAgICB3eEdyYXBoaWNzQ29udGV4dCogZ2MgPSBkYy0+R2V0R3JhcGhpY3NDb250
ZXh0KCk7CisjaWYgd3hVU0VfQ0FJUk8KKyAgICBjYWlyb190KiBjb250ZXh0ID0gKGNhaXJvX3Qq
KWdjLT5HZXROYXRpdmVDb250ZXh0KCk7CisgICAgaWYgKGNvbnRleHQpIHsKKyAgICAgICAgY2Fp
cm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0KTsKKyAgICAg
ICAgaGRjID0gY2Fpcm9fd2luMzJfc3VyZmFjZV9nZXRfZGMoc3VyZmFjZSk7CisgICAgfQorI2Vs
c2UKKyAgICAvLyB3aGVuIGdvaW5nIGZyb20gR2RpUGx1cyAtPiBHZGksIGFueSBHZGlQbHVzIHRy
YW5zZm9ybWF0aW9ucyBhcmUgbG9zdAorICAgIC8vIHNvIHdlIG5lZWQgdG8gYWx0ZXIgdGhlIGNv
b3JkaW5hdGVzIHRvIHJlZmxlY3QgdGhlaXIgdHJhbnNmb3JtZWQgcG9pbnQuCisgICAgZG91Ymxl
IHh0cmFucyA9IDA7CisgICAgZG91YmxlIHl0cmFucyA9IDA7CisgICAgCisgICAgZ2MtPkdldFRy
YW5zZm9ybSgpLlRyYW5zZm9ybVBvaW50KCZ4dHJhbnMsICZ5dHJhbnMpOworICAgIEdkaXBsdXM6
OkdyYXBoaWNzKiBnOworICAgIGlmIChnYykgeworICAgICAgICBnID0gKEdkaXBsdXM6OkdyYXBo
aWNzKilnYy0+R2V0TmF0aXZlQ29udGV4dCgpOworICAgICAgICBoZGMgPSBnLT5HZXRIREMoKTsK
KyAgICB9CisgICAgeCArPSAoaW50KXh0cmFuczsKKyAgICB5ICs9IChpbnQpeXRyYW5zOworI2Vu
ZGlmIC8vIHd4VVNFX0NBSVJPCisjZWxzZQorICAgIGhkYyA9IHN0YXRpY19jYXN0PEhEQz4oZGMt
PkdldEhEQygpKTsKKyNlbmRpZgorCisgICAgLy8gaWYgdGhlIGNvbnRleHQgaGFzIGJlZW4gc2Nh
bGVkLCB3ZSBtdXN0IG1hbnVhbGx5IHJlLWFwcGx5IHRoYXQgc2NhbGUKKyAgICAvLyB0byB0aGUg
SERDLgorICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGdyYXBoaWNzQ29udGV4dC0+Y3VycmVudFNjYWxl
KCk7CisgICAgaWYgKHNjYWxlICE9IEZsb2F0U2l6ZSgxLjAsIDEuMCkpIHsKKyAgICAgICAgU2V0
R3JhcGhpY3NNb2RlKGhkYywgR01fQURWQU5DRUQpOworICAgICAgICBYRk9STSB4Rm9ybTsKKyAg
ICAgICAgeEZvcm0uZU0xMSA9IHNjYWxlLndpZHRoKCk7CisgICAgICAgIHhGb3JtLmVNMTIgPSAw
LjA7CisgICAgICAgIHhGb3JtLmVNMjEgPSAwLjA7CisgICAgICAgIHhGb3JtLmVNMjIgPSBzY2Fs
ZS5oZWlnaHQoKTsKKyAgICAgICAgeEZvcm0uZUR4ID0gMC4wOworICAgICAgICB4Rm9ybS5lRHkg
PSAwLjA7CisgICAgICAgIFNldFdvcmxkVHJhbnNmb3JtKGhkYywgJnhGb3JtKTsKKyAgICB9Cisg
ICAgLy8gRXh0VGV4dE91dCB3YW50cyB0aGUgb2Zmc2V0cyBhcyBhbiBhcnJheSBvZiBpbnRzLCBz
byBleHRyYWN0IHRoZW0KKyAgICAvLyBmcm9tIHRoZSBnbHlwaCBidWZmZXIKKyAgICBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiAgIGdseXBocyAgID0gZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pOwor
ICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMgPSBnbHlwaEJ1ZmZlci5hZHZh
bmNlcyhmcm9tKTsKKworICAgIGludCogc3BhY2luZyA9IG5ldyBpbnRbbnVtR2x5cGhzIC0gZnJv
bV07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKQorICAgICAg
ICBzcGFjaW5nW2ldID0gYWR2YW5jZXNbaV0ud2lkdGgoKTsKKworICAgIHd4Rm9udCogd3hmb250
ID0gZm9udC0+Z2V0V3hGb250KCk7CisgICAgaWYgKHd4Zm9udCAmJiB3eGZvbnQtPklzT2soKSkK
KyAgICAgICAgOjpTZWxlY3RPYmplY3QoaGRjLCBHZXRIZm9udE9mKCp3eGZvbnQpKTsKKworICAg
IGlmIChjb2xvci5PaygpKQorICAgICAgICA6OlNldFRleHRDb2xvcihoZGMsIGNvbG9yLkdldFBp
eGVsKCkpOworCisgICAgLy8gZG8gbm90IGRyYXcgYmFja2dyb3VuZCBiZWhpbmQgY2hhcmFjdGVy
cworICAgIDo6U2V0QmtNb2RlKGhkYywgVFJBTlNQQVJFTlQpOworCisgICAgLy8gZHJhdyB0ZXh0
IHdpdGggb3B0aW9uYWwgY2hhcmFjdGVyIHdpZHRocyBhcnJheQorICAgIHd4U3RyaW5nIHN0cmlu
ZyA9IHd4U3RyaW5nKCh3eENoYXIqKSgmZ2x5cGhzW2Zyb21dKSwgbnVtR2x5cGhzKTsKKyAgICA6
OkV4dFRleHRPdXQoaGRjLCB4LCB5LCAgRVRPX0dMWVBIX0lOREVYLCAwLCByZWludGVycHJldF9j
YXN0PGNvbnN0IFdDSEFSKj4oZ2x5cGhzKSwgbnVtR2x5cGhzLCBzcGFjaW5nKTsKKworICAgIDo6
U2V0QmtNb2RlKGhkYywgVFJBTlNQQVJFTlQpOworCisgICAgI2lmIFVTRShXWEdDKSAmJiAhd3hV
U0VfQ0FJUk8KKyAgICAgICAgZy0+UmVsZWFzZUhEQyhoZGMpOworICAgICNlbmRpZgorCisgICAg
ZGVsZXRlIFtdIHNwYWNpbmc7Cit9CisKK30KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd3gvd3hjb2RlL3dpbi9zY3JvbGxiYXJfcmVuZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvd2luL3Njcm9sbGJhcl9yZW5kZXIu
Y3BwCShyZXZpc2lvbiA5NDQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29k
ZS93aW4vc2Nyb2xsYmFyX3JlbmRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcg
QEAKIHB1YmxpYzoKICAgICBHcmFwaGljc0hEQyh3eERDKiBkYykKICAgICB7Ci0jaWYgd3hVU0Vf
R1JBUEhJQ1NfQ09OVEVYVAorI2lmIHd4VVNFX0dSQVBISUNTX0NPTlRFWFQgJiYgKCFkZWZpbmVk
KHd4VVNFX0NBSVJPKSB8fCAhd3hVU0VfQ0FJUk8pCiAgICAgICAgIG1fZ3JhcGhpY3MgPSBOVUxM
OwogICAgICAgICB3eEdDREMqIGdjZGMgPSB3eER5bmFtaWNDYXN0KGRjLCB3eEdDREMpOwogICAg
ICAgICBpZiAoZ2NkYykgewpAQCAtOTEsNyArOTEsNyBAQAogCiAgICAgfkdyYXBoaWNzSERDKCkK
ICAgICB7Ci0jaWYgd3hVU0VfR1JBUEhJQ1NfQ09OVEVYVAorI2lmIHd4VVNFX0dSQVBISUNTX0NP
TlRFWFQgICYmICghZGVmaW5lZCh3eFVTRV9DQUlSTykgfHwgIXd4VVNFX0NBSVJPKQogICAgICAg
ICBpZiAobV9ncmFwaGljcykKICAgICAgICAgICAgIG1fZ3JhcGhpY3MtPlJlbGVhc2VIREMobV9o
ZGMpOwogI2VuZGlmCkBAIC0xMDEsNyArMTAxLDcgQEAKIAogcHJpdmF0ZToKICAgICBIREMgICAg
ICAgICBtX2hkYzsKLSNpZiB3eFVTRV9HUkFQSElDU19DT05URVhUCisjaWYgd3hVU0VfR1JBUEhJ
Q1NfQ09OVEVYVCAgJiYgKCFkZWZpbmVkKHd4VVNFX0NBSVJPKSB8fCAhd3hVU0VfQ0FJUk8pCiAg
ICAgR3JhcGhpY3MqICAgbV9ncmFwaGljczsKICNlbmRpZgogfTsKQEAgLTEzNSw3ICsxMzUsNyBA
QAogICAgIGludCB4cFN0YXRlID0gVFNfTk9STUFMOwogICAgIHd4UmVjdCB0cmFuc1JlY3QgPSBy
ZWN0OwogCi0jaWYgVVNFKFdYR0MpCisjaWYgVVNFKFdYR0MpICYmICFkZWZpbmVkKHd4VVNFX0NB
SVJPKSB8fCAhd3hVU0VfQ0FJUk8KICAgICAvLyB3aGVuIGdvaW5nIGZyb20gR2RpUGx1cyAtPiBH
ZGksIGFueSBHZGlQbHVzIHRyYW5zZm9ybWF0aW9ucyBhcmUgbG9zdAogICAgIC8vIHNvIHdlIG5l
ZWQgdG8gYWx0ZXIgdGhlIGNvb3JkaW5hdGVzIHRvIHJlZmxlY3QgdGhlaXIgdHJhbnNmb3JtZWQg
cG9pbnQuCiAgICAgZG91YmxlIHh0cmFucyA9IDA7CkBAIC0xNDcsNiArMTQ3LDggQEAKIAogICAg
IHRyYW5zUmVjdC54ICs9IChpbnQpeHRyYW5zOwogICAgIHRyYW5zUmVjdC55ICs9IChpbnQpeXRy
YW5zOworI2Vsc2UKKwogI2VuZGlmCiAKICAgICBSRUNUIHI7CkBAIC0yMDgsNiArMjEwLDggQEAK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgcGFydCA9IFNQX0dSSVBQRVJWRVJUOwogICAgICAg
ICAKKworCiAgICAgICAgIGVuZ2luZS0+RHJhd1RoZW1lQmFja2dyb3VuZChoVGhlbWUsIEdyYXBo
aWNzSERDKCZkYyksIHBhcnQsIHhwU3RhdGUsICZidXR0b25SZWN0LCAwKTsKICAgICB9CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvd2luL25vbi1rZXJuZWQtZHJh
d2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2Rl
L3dpbi9ub24ta2VybmVkLWRyYXdpbmcuY3BwCShyZXZpc2lvbiA5NDQ5OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS93aW4vbm9uLWtlcm5lZC1kcmF3aW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBL
ZXZpbiBXYXR0ZXJzLCBLZXZpbiBPbGxpdmllci4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0j
aW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotCi0jaW5jbHVkZSA8d3gvZGVmcy5oPgotI2luY2x1
ZGUgPHd4L2RjY2xpZW50Lmg+Ci0jaW5jbHVkZSA8d3gvZGNncmFwaC5oPgotI2luY2x1ZGUgPHd4
L2dkaWNtbi5oPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQot
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3RhbnRzCi0vLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLWNvbnN0IGRvdWJsZSBSQUQyREVHID0gMTgwLjAgLyBNX1BJOwotCi0vLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0vLyBMb2NhbCBmdW5jdGlvbnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotc3RhdGljIGlubGluZSBkb3VibGUgZG1pbihkb3VibGUgYSwgZG91YmxlIGIpIHsgcmV0dXJu
IGEgPCBiID8gYSA6IGI7IH0KLXN0YXRpYyBpbmxpbmUgZG91YmxlIGRtYXgoZG91YmxlIGEsIGRv
dWJsZSBiKSB7IHJldHVybiBhID4gYiA/IGEgOiBiOyB9Ci0KLXN0YXRpYyBpbmxpbmUgZG91Ymxl
IERlZ1RvUmFkKGRvdWJsZSBkZWcpIHsgcmV0dXJuIChkZWcgKiBNX1BJKSAvIDE4MC4wOyB9Ci1z
dGF0aWMgaW5saW5lIGRvdWJsZSBSYWRUb0RlZyhkb3VibGUgZGVnKSB7IHJldHVybiAoZGVnICog
MTgwLjApIC8gTV9QSTsgfQotCi0jaW5jbHVkZSAid3gvbXN3L3ByaXZhdGUuaCIKLQotLy8gVE9E
TyByZW1vdmUgdGhpcyBkZXBlbmRlbmN5IChnZGlwbHVzIG5lZWRzIHRoZSBtYWNyb3MpCi0KLSNp
Zm5kZWYgbWF4Ci0jZGVmaW5lIG1heChhLGIpICAgICAgICAgICAgKCgoYSkgPiAoYikpID8gKGEp
IDogKGIpKQotI2VuZGlmCi0KLSNpZm5kZWYgbWluCi0jZGVmaW5lIG1pbihhLGIpICAgICAgICAg
ICAgKCgoYSkgPCAoYikpID8gKGEpIDogKGIpKQotI2VuZGlmCi0KLSNpbmNsdWRlICJnZGlwbHVz
LmgiCi0gCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBkcmF3VGV4dFdpdGhTcGFjaW5n
KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udCwgY29uc3Qgd3hDb2xvdXImIGNvbG9yLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZm
ZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKLXsK
LSNpZiBVU0UoV1hHQykKLSAgICB3eEdDREMqIGRjID0gc3RhdGljX2Nhc3Q8d3hHQ0RDKj4oZ3Jh
cGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0jZWxzZQotICAgIHd4REMqIGRjID0g
Z3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSNlbmRpZgotCi0gICAgLy8gZ2V0
IHRoZSBuYXRpdmUgSERDIGhhbmRsZSB0byBkcmF3IHVzaW5nIG5hdGl2ZSBBUElzCi0gICAgSERD
IGhkYyA9IDA7Ci0gICAgZmxvYXQgeSA9IHBvaW50LnkoKSAtIGZvbnQtPmZvbnRNZXRyaWNzKCku
YXNjZW50KCk7Ci0gICAgZmxvYXQgeCA9IHBvaW50LngoKTsKLQotCi0jaWYgVVNFKFdYR0MpCi0g
ICAgLy8gd2hlbiBnb2luZyBmcm9tIEdkaVBsdXMgLT4gR2RpLCBhbnkgR2RpUGx1cyB0cmFuc2Zv
cm1hdGlvbnMgYXJlIGxvc3QKLSAgICAvLyBzbyB3ZSBuZWVkIHRvIGFsdGVyIHRoZSBjb29yZGlu
YXRlcyB0byByZWZsZWN0IHRoZWlyIHRyYW5zZm9ybWVkIHBvaW50LgotICAgIGRvdWJsZSB4dHJh
bnMgPSAwOwotICAgIGRvdWJsZSB5dHJhbnMgPSAwOwotICAgIAotICAgIHd4R3JhcGhpY3NDb250
ZXh0KiBnYyA9IGRjLT5HZXRHcmFwaGljc0NvbnRleHQoKTsKLSAgICBnYy0+R2V0VHJhbnNmb3Jt
KCkuVHJhbnNmb3JtUG9pbnQoJnh0cmFucywgJnl0cmFucyk7Ci0gICAgR2RpcGx1czo6R3JhcGhp
Y3MqIGc7Ci0gICAgaWYgKGdjKSB7Ci0gICAgICAgIGcgPSAoR2RpcGx1czo6R3JhcGhpY3MqKWdj
LT5HZXROYXRpdmVDb250ZXh0KCk7Ci0gICAgICAgIGhkYyA9IGctPkdldEhEQygpOwotICAgIH0K
LSAgICB4ICs9IChpbnQpeHRyYW5zOwotICAgIHkgKz0gKGludCl5dHJhbnM7Ci0jZWxzZQotICAg
IGhkYyA9IHN0YXRpY19jYXN0PEhEQz4oZGMtPkdldEhEQygpKTsKLSNlbmRpZgotCi0gICAgLy8g
aWYgdGhlIGNvbnRleHQgaGFzIGJlZW4gc2NhbGVkLCB3ZSBtdXN0IG1hbnVhbGx5IHJlLWFwcGx5
IHRoYXQgc2NhbGUKLSAgICAvLyB0byB0aGUgSERDLgotICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGdy
YXBoaWNzQ29udGV4dC0+Y3VycmVudFNjYWxlKCk7Ci0gICAgaWYgKHNjYWxlICE9IEZsb2F0U2l6
ZSgxLjAsIDEuMCkpIHsKLSAgICAgICAgU2V0R3JhcGhpY3NNb2RlKGhkYywgR01fQURWQU5DRUQp
OwotICAgICAgICBYRk9STSB4Rm9ybTsKLSAgICAgICAgeEZvcm0uZU0xMSA9IHNjYWxlLndpZHRo
KCk7Ci0gICAgICAgIHhGb3JtLmVNMTIgPSAwLjA7Ci0gICAgICAgIHhGb3JtLmVNMjEgPSAwLjA7
Ci0gICAgICAgIHhGb3JtLmVNMjIgPSBzY2FsZS5oZWlnaHQoKTsKLSAgICAgICAgeEZvcm0uZUR4
ID0gMC4wOwotICAgICAgICB4Rm9ybS5lRHkgPSAwLjA7Ci0gICAgICAgIFNldFdvcmxkVHJhbnNm
b3JtKGhkYywgJnhGb3JtKTsKLSAgICB9Ci0gICAgLy8gRXh0VGV4dE91dCB3YW50cyB0aGUgb2Zm
c2V0cyBhcyBhbiBhcnJheSBvZiBpbnRzLCBzbyBleHRyYWN0IHRoZW0KLSAgICAvLyBmcm9tIHRo
ZSBnbHlwaCBidWZmZXIKLSAgICBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiAgIGdseXBocyAgID0g
Z2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pOwotICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSog
YWR2YW5jZXMgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKTsKLQotICAgIGludCogc3BhY2lu
ZyA9IG5ldyBpbnRbbnVtR2x5cGhzIC0gZnJvbV07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bUdseXBoczsgKytpKQotICAgICAgICBzcGFjaW5nW2ldID0gYWR2YW5jZXNbaV0ud2lk
dGgoKTsKLQotICAgIHd4Rm9udCogd3hmb250ID0gZm9udC0+Z2V0V3hGb250KCk7Ci0gICAgaWYg
KHd4Zm9udCAmJiB3eGZvbnQtPklzT2soKSkKLSAgICAgICAgOjpTZWxlY3RPYmplY3QoaGRjLCBH
ZXRIZm9udE9mKCp3eGZvbnQpKTsKLQotICAgIGlmIChjb2xvci5PaygpKQotICAgICAgICA6OlNl
dFRleHRDb2xvcihoZGMsIGNvbG9yLkdldFBpeGVsKCkpOwotCi0gICAgLy8gZG8gbm90IGRyYXcg
YmFja2dyb3VuZCBiZWhpbmQgY2hhcmFjdGVycwotICAgIDo6U2V0QmtNb2RlKGhkYywgVFJBTlNQ
QVJFTlQpOwotCi0gICAgLy8gZHJhdyB0ZXh0IHdpdGggb3B0aW9uYWwgY2hhcmFjdGVyIHdpZHRo
cyBhcnJheQotICAgIHd4U3RyaW5nIHN0cmluZyA9IHd4U3RyaW5nKCh3eENoYXIqKSgmZ2x5cGhz
W2Zyb21dKSwgbnVtR2x5cGhzKTsKLSAgICA6OkV4dFRleHRPdXQoaGRjLCB4LCB5LCAgRVRPX0dM
WVBIX0lOREVYLCAwLCByZWludGVycHJldF9jYXN0PGNvbnN0IFdDSEFSKj4oZ2x5cGhzKSwgbnVt
R2x5cGhzLCBzcGFjaW5nKTsKLQotICAgIDo6U2V0QmtNb2RlKGhkYywgVFJBTlNQQVJFTlQpOwot
Ci0gICAgI2lmIFVTRShXWEdDKQotICAgICAgICBnLT5SZWxlYXNlSERDKGhkYyk7Ci0gICAgI2Vu
ZGlmCi0KLSAgICBkZWxldGUgW10gc3BhY2luZzsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd3gvd3hjb2RlL2NhaXJvL25vbi1rZXJuZWQtZHJhd2luZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL2NhaXJvL25vbi1rZXJu
ZWQtZHJhd2luZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
eC93eGNvZGUvY2Fpcm8vbm9uLWtlcm5lZC1kcmF3aW5nLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgS2V2aW4gV2F0dGVycywgS2V2
aW4gT2xsaXZpZXIuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisKKyNpbmNsdWRlIDx3eC9kYy5oPgor
I2luY2x1ZGUgPHd4L2RjZ3JhcGguaD4KKyNpbmNsdWRlIDx3eC9kZWZzLmg+CisjaW5jbHVkZSA8
d3gvZGNjbGllbnQuaD4KKyNpbmNsdWRlIDx3eC9nZGljbW4uaD4KKyNpbmNsdWRlIDx2ZWN0b3I+
CisKKyNpZiBVU0UoV1hHQykKKyNpbmNsdWRlIDxjYWlyby5oPgorI2lmIF9fV1hNU1dfXworI2lu
Y2x1ZGUgPGNhaXJvLXdpbjMyLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2lm
IHd4VVNFX1BBTkdPCisjaW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4KKyNpbmNsdWRlIDxwYW5nby9w
YW5nb2NhaXJvLmg+CisKKy8vIFVzZSBjYWlyby1mdCBpZiBhIHJlY2VudCBlbm91Z2ggUGFuZ28g
dmVyc2lvbiBpc24ndCBhdmFpbGFibGUKKyNpZiAhUEFOR09fVkVSU0lPTl9DSEVDSygxLDE4LDAp
CisjaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KKyNpbmNsdWRlIDxwYW5nby9wYW5nb2ZjLWZvbnRtYXAu
aD4KKyNlbmRpZgorI2VuZGlmCisKKyNlbmRpZiAvLyBVU0UoV1hHQykKKworI2lmIF9fV1hHVEtf
XworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
KyNpZiB3eFVTRV9QQU5HTworc3RhdGljIFBhbmdvRm9udE1hcCogZ19mb250TWFwOworCitQYW5n
b0ZvbnRNYXAqIHBhbmdvRm9udE1hcCgpCit7CisgICAgaWYgKCFnX2ZvbnRNYXApCisgICAgICAg
IGdfZm9udE1hcCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFwX2dldF9kZWZhdWx0KCk7CisKKyAgICBy
ZXR1cm4gZ19mb250TWFwOworfQorCitQYW5nb0ZvbnQqIGNyZWF0ZVBhbmdvRm9udEZvckZvbnQo
Y29uc3Qgd3hGb250KiB3eGZvbnQpCit7CisgICAgQVNTRVJUKHd4Zm9udCAmJiB3eGZvbnQtPk9r
KCkpOworCisgICAgY29uc3QgY2hhciogZmFjZSA9IHd4Zm9udC0+R2V0RmFjZU5hbWUoKS5tYl9z
dHIod3hDb252VVRGOCk7CisgICAgY2hhciBjb25zdCogZmFtaWxpZXNbXSA9IHsKKyAgICAgICAg
ZmFjZSwKKyAgICAgICAgMAorICAgIH07CisKKyAgICBzd2l0Y2ggKHd4Zm9udC0+R2V0RmFtaWx5
KCkpIHsKKyAgICBjYXNlIHd4Rk9OVEZBTUlMWV9ST01BTjoKKyAgICAgICAgZmFtaWxpZXNbMV0g
PSAic2VyaWYiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHd4Rk9OVEZBTUlMWV9TV0lTUzoK
KyAgICAgICAgZmFtaWxpZXNbMV0gPSAic2FucyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
d3hGT05URkFNSUxZX01PREVSTjoKKyAgICAgICAgZmFtaWxpZXNbMV0gPSAibW9ub3NwYWNlIjsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZmFtaWxpZXNbMV0gPSAic2Fu
cyI7CisgICAgfQorICAgIAorICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiBkZXNjcmlwdGlvbiA9
IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fbmV3KCk7CisgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlv
bl9zZXRfYWJzb2x1dGVfc2l6ZShkZXNjcmlwdGlvbiwgd3hmb250LT5HZXRQb2ludFNpemUoKSAq
IFBBTkdPX1NDQUxFKTsKKyAKKyAgICBQYW5nb0ZvbnQqIHBhbmdvRm9udCA9IDA7CisgICAgUGFu
Z29Db250ZXh0KiBwYW5nb0NvbnRleHQgPSAwOworCisgICAgc3dpdGNoICh3eGZvbnQtPkdldFdl
aWdodCgpKSB7CisgICAgY2FzZSB3eEZPTlRXRUlHSFRfTElHSFQ6CisgICAgICAgIHBhbmdvX2Zv
bnRfZGVzY3JpcHRpb25fc2V0X3dlaWdodChkZXNjcmlwdGlvbiwgUEFOR09fV0VJR0hUX0xJR0hU
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSB3eEZPTlRXRUlHSFRfTk9STUFMOgorICAgICAg
ICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX3NldF93ZWlnaHQoZGVzY3JpcHRpb24sIFBBTkdPX1dF
SUdIVF9OT1JNQUwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHd4Rk9OVFdFSUdIVF9CT0xE
OgorICAgICAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX3NldF93ZWlnaHQoZGVzY3JpcHRpb24s
IFBBTkdPX1dFSUdIVF9CT0xEKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNo
ICh3eGZvbnQtPkdldFN0eWxlKCkpIHsKKyAgICBjYXNlIHd4Rk9OVFNUWUxFX05PUk1BTDoKKyAg
ICAgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfc3R5bGUoZGVzY3JpcHRpb24sIFBBTkdP
X1NUWUxFX05PUk1BTCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugd3hGT05UU1RZTEVfSVRB
TElDOgorICAgICAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX3NldF9zdHlsZShkZXNjcmlwdGlv
biwgUEFOR09fU1RZTEVfSVRBTElDKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSB3eEZPTlRT
VFlMRV9TTEFOVDoKKyAgICAgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfc3R5bGUoZGVz
Y3JpcHRpb24sIFBBTkdPX1NUWUxFX09CTElRVUUpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBQYW5nb0ZvbnRNYXAqIGZvbnRNYXAgPSBwYW5nb0ZvbnRNYXAoKTsKKworICAgIHBhbmdv
Q29udGV4dCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFwX2NyZWF0ZV9jb250ZXh0KFBBTkdPX0NBSVJP
X0ZPTlRfTUFQKGZvbnRNYXApKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhcGFuZ29Gb250
ICYmIGkgPCBHX05fRUxFTUVOVFMoZmFtaWxpZXMpOyBpKyspIHsKKyAgICAgICAgcGFuZ29fZm9u
dF9kZXNjcmlwdGlvbl9zZXRfZmFtaWx5KGRlc2NyaXB0aW9uLCBmYW1pbGllc1tpXSk7CisgICAg
ICAgIHBhbmdvX2NvbnRleHRfc2V0X2ZvbnRfZGVzY3JpcHRpb24ocGFuZ29Db250ZXh0LCBkZXNj
cmlwdGlvbik7CisgICAgICAgIHBhbmdvRm9udCA9IHBhbmdvX2ZvbnRfbWFwX2xvYWRfZm9udChm
b250TWFwLCBwYW5nb0NvbnRleHQsIGRlc2NyaXB0aW9uKTsKKyAgICB9CisgICAgcGFuZ29fZm9u
dF9kZXNjcmlwdGlvbl9mcmVlKGRlc2NyaXB0aW9uKTsKKworICAgIHJldHVybiBwYW5nb0ZvbnQ7
Cit9CisKK2NhaXJvX3NjYWxlZF9mb250X3QqIGNyZWF0ZVNjYWxlZEZvbnRGb3JGb250KGNvbnN0
IHd4Rm9udCogd3hmb250KQoreworICAgIEFTU0VSVCh3eGZvbnQgJiYgd3hmb250LT5PaygpKTsK
KworICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBOVUxMOworICAgIFBhbmdv
Rm9udCogcGFuZ29Gb250ID0gY3JlYXRlUGFuZ29Gb250Rm9yRm9udCh3eGZvbnQpOworICAgIAor
I2lmIFBBTkdPX1ZFUlNJT05fQ0hFQ0soMSwxOCwwKQorICAgIGlmIChwYW5nb0ZvbnQpCisgICAg
ICAgIHNjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9yZWZlcmVuY2UocGFuZ29fY2Fpcm9f
Zm9udF9nZXRfc2NhbGVkX2ZvbnQoUEFOR09fQ0FJUk9fRk9OVChwYW5nb0ZvbnQpKSk7CisjZW5k
aWYKKworICAgIHJldHVybiBzY2FsZWRGb250OworfQorCitQYW5nb0dseXBoIHBhbmdvX2ZvbnRf
Z2V0X2dseXBoKFBhbmdvRm9udCogZm9udCwgUGFuZ29Db250ZXh0KiBjb250ZXh0LCBndW5pY2hh
ciB3YykKK3sKKyAgICBQYW5nb0dseXBoIHJlc3VsdCA9IDA7CisgICAgZ2NoYXIgYnVmZmVyWzdd
OworCisgICAgZ2ludCAgbGVuZ3RoID0gZ191bmljaGFyX3RvX3V0Zjgod2MsIGJ1ZmZlcik7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobGVuZ3RoLCAwKTsKKworICAgIEdMaXN0KiBpdGVtcyA9
IHBhbmdvX2l0ZW1pemUoY29udGV4dCwgYnVmZmVyLCAwLCBsZW5ndGgsIE5VTEwsIE5VTEwpOwor
CisgICAgaWYgKGdfbGlzdF9sZW5ndGgoaXRlbXMpID09IDEpIHsKKyAgICAgICAgUGFuZ29JdGVt
KiBpdGVtID0gc3RhdGljX2Nhc3Q8UGFuZ29JdGVtKj4oaXRlbXMtPmRhdGEpOworICAgICAgICBQ
YW5nb0ZvbnQqIHRtcEZvbnQgPSBpdGVtLT5hbmFseXNpcy5mb250OworICAgICAgICBpdGVtLT5h
bmFseXNpcy5mb250ID0gZm9udDsKKworICAgICAgICBQYW5nb0dseXBoU3RyaW5nKiBnbHlwaHMg
PSBwYW5nb19nbHlwaF9zdHJpbmdfbmV3KCk7CisgICAgICAgIHBhbmdvX3NoYXBlKGJ1ZmZlciwg
bGVuZ3RoLCAmaXRlbS0+YW5hbHlzaXMsIGdseXBocyk7CisKKyAgICAgICAgaXRlbS0+YW5hbHlz
aXMuZm9udCA9IHRtcEZvbnQ7CisKKyAgICAgICAgaWYgKGdseXBocy0+bnVtX2dseXBocyA9PSAx
KQorICAgICAgICAgICAgcmVzdWx0ID0gZ2x5cGhzLT5nbHlwaHNbMF0uZ2x5cGg7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGdfd2FybmluZygiZGlkbid0IGdldCAxIGdseXBoIGJ1dCAlZCIs
IGdseXBocy0+bnVtX2dseXBocyk7CisKKyAgICAgICAgcGFuZ29fZ2x5cGhfc3RyaW5nX2ZyZWUo
Z2x5cGhzKTsKKyAgICB9CisKKyAgICBnX2xpc3RfZm9yZWFjaChpdGVtcywgKEdGdW5jKXBhbmdv
X2l0ZW1fZnJlZSwgTlVMTCk7CisgICAgZ19saXN0X2ZyZWUoaXRlbXMpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKyNlbmRpZiAvLyB3eFVTRV9QQU5HTworCisKK3ZvaWQgZHJhd1RleHRXaXRo
U3BhY2luZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGZvbnQsIGNvbnN0IHd4Q29sb3VyJiBjb2xvciwgY29uc3QgR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpCit7CisjaWYgVVNFKFdYR0MpCisgICAgd3hHQ0RDKiBkYyA9IHN0YXRpY19jYXN0PHd4R0NE
Qyo+KGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIHd4R3JhcGhpY3ND
b250ZXh0KiBnYyA9IGRjLT5HZXRHcmFwaGljc0NvbnRleHQoKTsKKyAgICBnYy0+UHVzaFN0YXRl
KCk7CisgICAgY2Fpcm9fdCogY3IgPSAoY2Fpcm9fdCopZ2MtPkdldE5hdGl2ZUNvbnRleHQoKTsK
KworICAgIHd4Rm9udCogd3hmb250ID0gZm9udC0+Z2V0V3hGb250KCk7CisgICAgY2Fpcm9fc2Nh
bGVkX2ZvbnRfdCogc2NhbGVkX2ZvbnQgPSAwOworI2lmIHd4VVNFX1BBTkdPCisgICAgUGFuZ29G
b250KiBwYW5nb0ZvbnQgPSBjcmVhdGVQYW5nb0ZvbnRGb3JGb250KHd4Zm9udCk7CisgICAgUGFu
Z29Gb250TWFwKiBmb250TWFwID0gcGFuZ29Gb250TWFwKCk7CisgICAgUGFuZ29Db250ZXh0KiBw
YW5nb0NvbnRleHQgPSBwYW5nb19jYWlyb19mb250X21hcF9jcmVhdGVfY29udGV4dChQQU5HT19D
QUlST19GT05UX01BUChmb250TWFwKSk7CisgICAgc2NhbGVkX2ZvbnQgPSBjcmVhdGVTY2FsZWRG
b250Rm9yRm9udCh3eGZvbnQpOyAKKyNlbGlmIF9fV1hNU1dfXworICAgIGNhaXJvX21hdHJpeF90
IHNpemVNYXRyaXgsIGN0bTsKKyAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsK
KyAgICBpbnQgc2l6ZSA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpLnNpemUoKTsKKyAgICBjYWlyb19t
YXRyaXhfaW5pdF9zY2FsZSgmc2l6ZU1hdHJpeCwgc2l6ZSwgc2l6ZSk7CisKKyAgICBjYWlyb19m
b250X29wdGlvbnNfdCogZm9udE9wdGlvbnMgPSBjYWlyb19mb250X29wdGlvbnNfY3JlYXRlKCk7
CisgICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9hbnRpYWxpYXMoZm9udE9wdGlvbnMsIENBSVJP
X0FOVElBTElBU19TVUJQSVhFTCk7CisgICAgCisgICAgY2Fpcm9fZm9udF9mYWNlX3QqIHdpbl9m
YWNlID0gY2Fpcm9fd2luMzJfZm9udF9mYWNlX2NyZWF0ZV9mb3JfaGZvbnQoKEhGT05UKXd4Zm9u
dC0+R2V0SEZPTlQoKSk7CisgICAgc2NhbGVkX2ZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9jcmVh
dGUod2luX2ZhY2UsICZzaXplTWF0cml4LCAmY3RtLCBmb250T3B0aW9ucyk7IAorI2VuZGlmCisg
ICAgQVNTRVJUKHNjYWxlZF9mb250KTsKKworICAgIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocyA9
IGNvbnN0X2Nhc3Q8R2x5cGhCdWZmZXJHbHlwaCo+KGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSk7
CisgICAgZmxvYXQgb2Zmc2V0ID0gcG9pbnQueCgpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1HbHlwaHM7IGkrKykgeworI2lmIHd4VVNFX1BBTkdPCisgICAgICAgIGdseXBoc1tpXS5p
bmRleCA9IHBhbmdvX2ZvbnRfZ2V0X2dseXBoKHBhbmdvRm9udCwgcGFuZ29Db250ZXh0LCBnbHlw
aEJ1ZmZlci5nbHlwaEF0KGZyb20gKyBpKSk7CisjZW5kaWYKKyAgICAgICAgZ2x5cGhzW2ldLngg
PSBvZmZzZXQ7CisgICAgICAgIGdseXBoc1tpXS55ID0gcG9pbnQueSgpOworICAgICAgICBvZmZz
ZXQgKz0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KGZyb20gKyBpKTsKKyAgICB9CisKKyAgICBjYWly
b19zZXRfc291cmNlX3JnYmEoY3IsIGNvbG9yLlJlZCgpLzI1NS4wLCBjb2xvci5HcmVlbigpLzI1
NS4wLCBjb2xvci5CbHVlKCkvMjU1LjAsIGNvbG9yLkFscGhhKCkvMjU1LjApOworICAgIGNhaXJv
X3NldF9zY2FsZWRfZm9udChjciwgc2NhbGVkX2ZvbnQpOworICAgIAorICAgIGNhaXJvX3Nob3df
Z2x5cGhzKGNyLCBnbHlwaHMsIG51bUdseXBocyk7CisKKyAgICBjYWlyb19zY2FsZWRfZm9udF9k
ZXN0cm95KHNjYWxlZF9mb250KTsKKyAgICBnYy0+UG9wU3RhdGUoKTsKKyNlbHNlCisgICAgd3hE
QyogZGMgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgd3hGb250
KiB3eGZvbnQgPSBmb250LT5nZXRXeEZvbnQoKTsKKyAgICBpZiAod3hmb250ICYmIHd4Zm9udC0+
SXNPaygpKQorICAgICAgICBkYy0+U2V0Rm9udCgqd3hmb250KTsKKyAgICBkYy0+U2V0VGV4dEZv
cmVncm91bmQoY29sb3IpOworCisgICAgLy8gY29udmVydCBnbHlwaHMgdG8gd3hTdHJpbmcKKyAg
ICBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMgPSBjb25zdF9jYXN0PEdseXBoQnVmZmVyR2x5cGgq
PihnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSkpOworICAgIGludCBvZmZzZXQgPSBwb2ludC54KCk7
CisgICAgd3hTdHJpbmcgdGV4dCA9IHd4RW1wdHlTdHJpbmc7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bUdseXBoczsgaSsrKSB7CisgICAgICAgIHRleHQgPSB0ZXh0LkFwcGVuZCgo
d3hDaGFyKWdseXBoc1tpXSk7CisgICAgICAgIG9mZnNldCArPSBnbHlwaEJ1ZmZlci5hZHZhbmNl
QXQoZnJvbSArIGkpOworICAgIH0KKyAgICAKKyAgICAvLyB0aGUgeSBwb2ludCBpcyBhY3R1YWxs
eSB0aGUgYm90dG9tIHBvaW50IG9mIHRoZSB0ZXh0LCB0dXJuIGl0IGludG8gdGhlIHRvcAorICAg
IGZsb2F0IGhlaWdodCA9IGZvbnQtPmFzY2VudCgpIC0gZm9udC0+ZGVzY2VudCgpOworICAgIHd4
Q29vcmQgeXBvaW50ID0gKHd4Q29vcmQpIChwb2ludC55KCkgLSBoZWlnaHQpOworICAgICAKKyAg
ICBkYy0+RHJhd1RleHQodGV4dCwgKHd4Q29vcmQpcG9pbnQueCgpLCB5cG9pbnQpOworI2VuZGlm
Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51
V3guY3BwCShyZXZpc2lvbiA5NDQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0Nv
bnRleHRNZW51V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBACiAKIENvbnRl
eHRNZW51OjpDb250ZXh0TWVudSgpCiB7Ci0gICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gbmV3
IHd4TWVudSgwKTsKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBuZXcgd3hNZW51KChsb25n
KTApOwogfQogCiBDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3d4L1JlbmRlclRoZW1lV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3d4L1JlbmRlclRoZW1lV3guY3BwCShyZXZpc2lvbiA5NDQ5OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1JlbmRlclRoZW1lV3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgIkxv
Y2FsREMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhaW50SW5m
by5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTQ1LDI5ICs0Niw2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotSW50UmVjdCBnZXRBZGp1c3RlZFJlY3Qod3hEQyogZGMsIGNvbnN0
IEludFJlY3QmIHIpCi17Ci0gICAgSW50UmVjdCByZWN0ID0gcjsKLS8vIE9uIE1hYywgd3hHcmFw
aGljc0NvbnRleHQgYW5kIHd4REMgc2hhcmUgdGhlIHNhbWUgbmF0aXZlIGltcGxlbWVudGF0aW9u
LAotLy8gYW5kIHNvIHRyYW5zZm9ybWF0aW9ucyBhcmUgYXZhaWxhYmxlLgotLy8gT24gV2luIGFu
ZCBMaW51eCwgaG93ZXZlciwgdGhpcyBpcyBub3QgdHJ1ZSBhbmQgdHJhbnNmb3JtcyBhcmUgbG9z
dCwKLS8vIHNvIHdlIG5lZWQgdG8gcmVzdG9yZSB0aGVtIGhlcmUuCi0jaWYgIXd4Q0hFQ0tfVkVS
U0lPTigyLCA5LCAyKSAmJiBVU0UoV1hHQykgJiYgIWRlZmluZWQoX19XWE1BQ19fKQotICAgIExP
R19FUlJPUigiUmVjdCBpcyAoJWQsICVkKVxuIiwgcmVjdC54KCksIHJlY3QueSgpKTsKLSAgICBk
b3VibGUgeHRyYW5zID0gMDsKLSAgICBkb3VibGUgeXRyYW5zID0gMDsKLSAgICAKLSAgICB3eEdD
REMqIGdjZGMgPSBzdGF0aWNfY2FzdDx3eEdDREMqPihkYyk7Ci0gICAgd3hHcmFwaGljc0NvbnRl
eHQqIGdjID0gZ2NkYy0+R2V0R3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgZ2MtPkdldFRyYW5zZm9y
bSgpLlRyYW5zZm9ybVBvaW50KCZ4dHJhbnMsICZ5dHJhbnMpOwotICAgIHJlY3Quc2V0WChyLngo
KSArIChpbnQpeHRyYW5zKTsKLSAgICByZWN0LnNldFkoci55KCkgKyAoaW50KXl0cmFucyk7Ci0g
ICAgTE9HX0VSUk9SKCJUcmFuc2Zvcm0gaXMgKCVmLCAlZiksICglZCwgJWQpXG4iLCB4dHJhbnMs
IHl0cmFucywgcmVjdC54KCksIHJlY3QueSgpKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHJlY3Q7
Ci19Ci0KIGNsYXNzIFJlbmRlclRoZW1lV3ggOiBwdWJsaWMgUmVuZGVyVGhlbWUgewogcHJpdmF0
ZToKICAgICBSZW5kZXJUaGVtZVd4KCkgOiBSZW5kZXJUaGVtZSgpIHsgfQpAQCAtMjg4LDkgKzI2
NiwxMSBAQAogewogICAgIHd4V2luZG93KiB3aW5kb3cgPSBuYXRpdmVXaW5kb3dGb3JSZW5kZXJP
YmplY3Qobyk7CiAgICAgd3hEQyogZGMgPSBzdGF0aWNfY2FzdDx3eERDKj4oaS5jb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKSk7CisgICAgTG9jYWxEQyBsb2NhbERDKGRjLCByKTsKKwogICAgIGlu
dCBmbGFncyA9IDA7CiAgICAgCi0gICAgSW50UmVjdCByZWN0ID0gZ2V0QWRqdXN0ZWRSZWN0KGRj
LCByKTsKKyAgICBJbnRSZWN0IHJlY3QgPSByOwogCiAgICAgaWYgKCFpc0VuYWJsZWQobykpCiAg
ICAgICAgIGZsYWdzIHw9IHd4Q09OVFJPTF9ESVNBQkxFRDsKQEAgLTMwMywyMiArMjgzLDIyIEBA
CiAgICAgICAgIGZsYWdzIHw9IHd4Q09OVFJPTF9QUkVTU0VEOwogICAgIAogICAgIGlmIChwYXJ0
ID09IFB1c2hCdXR0b25QYXJ0IHx8IHBhcnQgPT0gQnV0dG9uUGFydCkKLSAgICAgICAgd3hSZW5k
ZXJlck5hdGl2ZTo6R2V0KCkuRHJhd1B1c2hCdXR0b24od2luZG93LCAqZGMsIHJlY3QsIGZsYWdz
KTsKKyAgICAgICAgd3hSZW5kZXJlck5hdGl2ZTo6R2V0KCkuRHJhd1B1c2hCdXR0b24od2luZG93
LCAqbG9jYWxEQy5jb250ZXh0KCksIHJlY3QsIGZsYWdzKTsKICAgICBlbHNlIGlmKHBhcnQgPT0g
UmFkaW9QYXJ0KSB7CiAgICAgICAgIGlmIChpc0NoZWNrZWQobykpCiAgICAgICAgICAgICBmbGFn
cyB8PSB3eENPTlRST0xfQ0hFQ0tFRDsKICNpZiB3eENIRUNLX1ZFUlNJT04oMiw5LDEpCi0gICAg
ICAgIHd4UmVuZGVyZXJOYXRpdmU6OkdldCgpLkRyYXdSYWRpb0JpdG1hcCh3aW5kb3csICpkYywg
cmVjdCwgZmxhZ3MpOworICAgICAgICB3eFJlbmRlcmVyTmF0aXZlOjpHZXQoKS5EcmF3UmFkaW9C
aXRtYXAod2luZG93LCAqbG9jYWxEQy5jb250ZXh0KCksIHJlY3QsIGZsYWdzKTsKICNlbGlmIHd4
Q0hFQ0tfVkVSU0lPTigyLDksMCkKLSAgICAgICAgd3hSZW5kZXJlck5hdGl2ZTo6R2V0KCkuRHJh
d1JhZGlvQnV0dG9uKHdpbmRvdywgKmRjLCByZWN0LCBmbGFncyk7CisgICAgICAgIHd4UmVuZGVy
ZXJOYXRpdmU6OkdldCgpLkRyYXdSYWRpb0J1dHRvbih3aW5kb3csICpsb2NhbERDLmNvbnRleHQo
KSwgcmVjdCwgZmxhZ3MpOwogI2Vsc2UKLSAgICAgICAgd3hSZW5kZXJlcl9EcmF3UmFkaW9CdXR0
b24od2luZG93LCAqZGMsIHJlY3QsIGZsYWdzKTsKKyAgICAgICAgd3hSZW5kZXJlcl9EcmF3UmFk
aW9CdXR0b24od2luZG93LCAqbG9jYWxEQy5jb250ZXh0KCksIHJlY3QsIGZsYWdzKTsKICNlbmRp
ZgogICAgIH0KICAgICBlbHNlIGlmKHBhcnQgPT0gQ2hlY2tib3hQYXJ0KSB7CiAgICAgICAgIGlm
IChpc0NoZWNrZWQobykpCiAgICAgICAgICAgICBmbGFncyB8PSB3eENPTlRST0xfQ0hFQ0tFRDsK
LSAgICAgICAgd3hSZW5kZXJlck5hdGl2ZTo6R2V0KCkuRHJhd0NoZWNrQm94KHdpbmRvdywgKmRj
LCByZWN0LCBmbGFncyk7CisgICAgICAgIHd4UmVuZGVyZXJOYXRpdmU6OkdldCgpLkRyYXdDaGVj
a0JveCh3aW5kb3csICpsb2NhbERDLmNvbnRleHQoKSwgcmVjdCwgZmxhZ3MpOwogICAgIH0KICAg
ICByZXR1cm4gZmFsc2U7CiB9CkBAIC0zMzIsMTggKzMxMiwxOSBAQAogewogICAgIHd4V2luZG93
KiB3aW5kb3cgPSBuYXRpdmVXaW5kb3dGb3JSZW5kZXJPYmplY3Qobyk7CiAgICAgd3hEQyogZGMg
PSBzdGF0aWNfY2FzdDx3eERDKj4oaS5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAg
TG9jYWxEQyBsb2NhbERDKGRjLCByKTsKICAgICBpbnQgZmxhZ3MgPSAwOwogICAgIAotICAgIElu
dFJlY3QgcmVjdCA9IGdldEFkanVzdGVkUmVjdChkYywgcik7CisgICAgSW50UmVjdCByZWN0ID0g
cjsKIAogICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCk7CiAg
ICAgaWYgKHN1cHBvcnRzRm9jdXMocGFydCkgJiYgaXNGb2N1c2VkKG8pKQogICAgICAgICBmbGFn
cyB8PSB3eENPTlRST0xfRk9DVVNFRDsKIAogI2lmIHd4Q0hFQ0tfVkVSU0lPTigyLDksMCkKLSAg
ICB3eFJlbmRlcmVyTmF0aXZlOjpHZXQoKS5EcmF3VGV4dEN0cmwod2luZG93LCAqZGMsIHJlY3Qs
IGZsYWdzKTsKKyAgICB3eFJlbmRlcmVyTmF0aXZlOjpHZXQoKS5EcmF3VGV4dEN0cmwod2luZG93
LCAqbG9jYWxEQy5jb250ZXh0KCksIHJlY3QsIGZsYWdzKTsKICNlbHNlCi0gICAgd3hSZW5kZXJl
cl9EcmF3VGV4dEN0cmwod2luZG93LCAqZGMsIHIsIDApOworICAgIHd4UmVuZGVyZXJfRHJhd1Rl
eHRDdHJsKHdpbmRvdywgKmxvY2FsREMuY29udGV4dCgpLCByLCAwKTsKICNlbmRpZgogCiAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzY5LDkgKzM1MCwxMCBAQAogewogICAgIHd4V2luZG93KiB3aW5k
b3cgPSBuYXRpdmVXaW5kb3dGb3JSZW5kZXJPYmplY3Qobyk7CiAgICAgd3hEQyogZGMgPSBzdGF0
aWNfY2FzdDx3eERDKj4oaS5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gCi0gICAgSW50
UmVjdCByZWN0ID0gZ2V0QWRqdXN0ZWRSZWN0KGRjLCByKTsKIAorICAgIExvY2FsREMgbG9jYWxE
QyhkYywgcik7CisgICAgSW50UmVjdCByZWN0ID0gcjsKKwogICAgIGludCBmbGFncyA9IDA7ICAg
ICAgCiAgICAgaWYgKCFpc0VuYWJsZWQobykpCiAgICAgICAgIGZsYWdzIHw9IHd4Q09OVFJPTF9E
SVNBQkxFRDsKQEAgLTM4Myw5ICszNjUsOSBAQAogICAgICAgICBmbGFncyB8PSB3eENPTlRST0xf
UFJFU1NFRDsKIAogI2lmIHd4Q0hFQ0tfVkVSU0lPTigyLDksMCkKLSAgICB3eFJlbmRlcmVyTmF0
aXZlOjpHZXQoKS5EcmF3Q2hvaWNlKHdpbmRvdywgKmRjLCByZWN0LCBmbGFncyk7CisgICAgd3hS
ZW5kZXJlck5hdGl2ZTo6R2V0KCkuRHJhd0Nob2ljZSh3aW5kb3csICpsb2NhbERDLmNvbnRleHQo
KSwgcmVjdCwgZmxhZ3MpOwogI2Vsc2UKLSAgICB3eFJlbmRlcmVyX0RyYXdDaG9pY2Uod2luZG93
LCAqZGMsIHJlY3QsIGZsYWdzKTsKKyAgICB3eFJlbmRlcmVyX0RyYXdDaG9pY2Uod2luZG93LCAq
bG9jYWxEQy5jb250ZXh0KCksIHJlY3QsIGZsYWdzKTsKICNlbmRpZgogCiAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNDAwLDkgKzM4Miw5IEBACiB7CiAgICAgd3hXaW5kb3cqIHdpbmRvdyA9IG5hdGl2
ZVdpbmRvd0ZvclJlbmRlck9iamVjdChvKTsKICAgICB3eERDKiBkYyA9IHN0YXRpY19jYXN0PHd4
REMqPihpLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBMb2NhbERDIGxvY2FsREMo
ZGMsIHIpOworICAgIEludFJlY3QgcmVjdCA9IHI7CiAKLSAgICBJbnRSZWN0IHJlY3QgPSBnZXRB
ZGp1c3RlZFJlY3QoZGMsIHIpOwotCiAgICAgaW50IGZsYWdzID0gMDsgICAgICAKICAgICBpZiAo
IWlzRW5hYmxlZChvKSkKICAgICAgICAgZmxhZ3MgfD0gd3hDT05UUk9MX0RJU0FCTEVEOwpAQCAt
NDEzLDcgKzM5NSw3IEBACiAgICAgaWYgKGlzUHJlc3NlZChvKSkKICAgICAgICAgZmxhZ3MgfD0g
d3hDT05UUk9MX1BSRVNTRUQ7CiAKLSAgICB3eFJlbmRlcmVyTmF0aXZlOjpHZXQoKS5EcmF3Q29t
Ym9Cb3hEcm9wQnV0dG9uKHdpbmRvdywgKmRjLCByZWN0LCBmbGFncyk7CisgICAgd3hSZW5kZXJl
ck5hdGl2ZTo6R2V0KCkuRHJhd0NvbWJvQm94RHJvcEJ1dHRvbih3aW5kb3csICpsb2NhbERDLmNv
bnRleHQoKSwgcmVjdCwgZmxhZ3MpOwogICAgICAgICAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvU2Nyb2xsYmFyVGhlbWVXeC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvU2Nyb2xsYmFyVGhlbWVX
eC5jcHAJKHJldmlzaW9uIDk0NDk5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvU2Ny
b2xsYmFyVGhlbWVXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDE0IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVXeC5oIgogCisvLyBzZWUg
aHR0cDovL3RyYWMud3h3aWRnZXRzLm9yZy90aWNrZXQvMTE0ODIKKy8vIHdlIG5lZWQgdG8gaW5j
bHVkZSB0aGlzIGJlZm9yZSBMb2NhbERDIGFzIGl0IGluY2x1ZGVzIHd4IGhlYWRlcnMKKyNpZmRl
ZiBfX1dYTVNXX18KKyMgICBpbmNsdWRlICJ3eC9tc3cvd2ludW5kZWYuaCIKKyNlbmRpZgorCiAj
aW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgIkxvY2FsREMuaCIKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogI2luY2x1
ZGUgIlNjcm9sbGFibGVBcmVhLmgiCkBAIC0xOTMsMTggKzIwMCwxNyBAQAogICAgIAogICAgIHd4
REMqIGRjID0gc3RhdGljX2Nhc3Q8d3hEQyo+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICAKLSAgICBjb250ZXh0LT5zYXZlKCk7CiAgICAgU2Nyb2xsVmlldyogcm9vdCA9IHNjcm9s
bGJhci0+cm9vdCgpOwogICAgIEFTU0VSVChyb290KTsKICAgICBpZiAoIXJvb3QpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKLSAgICB3eFdpbmRvdyogd2VidmlldyA9IHJvb3QtPmhvc3RX
aW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7IAorICAgIHd4V2luZG93KiB3ZWJ2aWV3ID0g
cm9vdC0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICBMb2NhbERDIGxv
Y2FsREMoZGMsIHNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOwogICAgIAotICAgIHd4UmVuZGVyZXJf
RHJhd1Njcm9sbGJhcih3ZWJ2aWV3LCAqZGMsIHNjcm9sbGJhci0+ZnJhbWVSZWN0KCksIG9yaWVu
dGF0aW9uLCBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSwgc3RhdGljX2Nhc3Q8d3hTY3JvbGxiYXJQ
YXJ0PihzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkpLCAgICAKKyAgICB3eFJlbmRlcmVyX0RyYXdT
Y3JvbGxiYXIod2VidmlldywgKmxvY2FsREMuY29udGV4dCgpLCBzY3JvbGxiYXItPmZyYW1lUmVj
dCgpLCBvcmllbnRhdGlvbiwgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCksIHN0YXRpY19jYXN0PHd4
U2Nyb2xsYmFyUGFydD4oc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpKSwgICAgCiAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDx3eFNjcm9sbGJhclBhcnQ+KHNjcm9sbGJhci0+aG92ZXJl
ZFBhcnQoKSksIHNjcm9sbGJhci0+bWF4aW11bSgpLCBzY3JvbGxiYXItPnBhZ2VTdGVwKCksIGZs
YWdzKTsKIAotICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd3gvSW1hZ2VEZWNv
ZGVyV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3d4L0ltYWdlRGVjb2Rlcld4LmNwcAkocmV2aXNpb24gOTQ0OTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93eC9JbWFnZURlY29kZXJXeC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDE0IEBACiAgICAgQVNTRVJUKGJtcC0+SXNPaygpKTsK
IAogI2lmIFVTRShXWEdDKQotICAgIHd4R3JhcGhpY3NCaXRtYXAqIGJpdG1hcCA9IG5ldyB3eEdy
YXBoaWNzQml0bWFwKHd4R3JhcGhpY3NSZW5kZXJlcjo6R2V0RGVmYXVsdFJlbmRlcmVyKCktPkNy
ZWF0ZUJpdG1hcCgqYm1wKSk7CisgICAgd3hHcmFwaGljc1JlbmRlcmVyKiByZW5kZXJlciA9IDA7
CisjaWYgd3hVU0VfQ0FJUk8KKyAgICByZW5kZXJlciA9IHd4R3JhcGhpY3NSZW5kZXJlcjo6R2V0
Q2Fpcm9SZW5kZXJlcigpOworI2Vsc2UKKyAgICByZW5kZXJlciA9IHd4R3JhcGhpY3NSZW5kZXJl
cjo6R2V0RGVmYXVsdFJlbmRlcmVyKCk7CisjZW5kaWYKKyAgICBBU1NFUlQocmVuZGVyZXIpOwor
ICAgIHd4R3JhcGhpY3NCaXRtYXAqIGJpdG1hcCA9IG5ldyB3eEdyYXBoaWNzQml0bWFwKHJlbmRl
cmVyLT5DcmVhdGVCaXRtYXAoKmJtcCkpOwogICAgIGRlbGV0ZSBibXA7CiAgICAgcmV0dXJuIGJp
dG1hcDsKICNlbHNlCg==
</data>
<flag name="review"
          id="102677"
          type_id="1"
          status="+"
          setter="kevino"
    />
          </attachment>
      

    </bug>

</bugzilla>