<?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>15907</bug_id>
          
          <creation_ts>2007-11-08 14:51:26 -0800</creation_ts>
          <short_desc>Implement USE(QT4_UNICODE) for UTF8 -&gt; UTF16 conversion</short_desc>
          <delta_ts>2010-03-23 02:17:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Text</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Justin Haygood">jhaygood</reporter>
          <assigned_to name="George Staikos">staikos</assigned_to>
          <cc>ap</cc>
    
    <cc>hausmann</cc>
    
    <cc>zecke</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>60683</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Haygood">jhaygood</who>
    <bug_when>2007-11-08 14:51:26 -0800</bug_when>
    <thetext>UTF8-&gt;UTF16 conversion in c_utility.cpp doesn&apos;t have a Qt4 Unicode implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60684</commentid>
    <comment_count>1</comment_count>
      <attachid>17128</attachid>
    <who name="Justin Haygood">jhaygood</who>
    <bug_when>2007-11-08 14:52:07 -0800</bug_when>
    <thetext>Created attachment 17128
implements qt4 unicode in c_utility.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60685</commentid>
    <comment_count>2</comment_count>
      <attachid>17129</attachid>
    <who name="Justin Haygood">jhaygood</who>
    <bug_when>2007-11-08 14:53:20 -0800</bug_when>
    <thetext>Created attachment 17129
implements qt4 unicode in c_utility.cpp

Ooops.. I need to add my copyright at the top :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60686</commentid>
    <comment_count>3</comment_count>
      <attachid>17129</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-11-08 14:58:51 -0800</bug_when>
    <thetext>Comment on attachment 17129
implements qt4 unicode in c_utility.cpp

The patch needs a ChangeLog entry, and the coding style should follow the style guidelines.  I know that the ICU code above does not, but it&apos;d be great if new code would.  In particular, the use of C-style casts, and the one-line for statement with strange whitespace usage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60725</commentid>
    <comment_count>4</comment_count>
      <attachid>17138</attachid>
    <who name="Justin Haygood">jhaygood</who>
    <bug_when>2007-11-08 19:47:09 -0800</bug_when>
    <thetext>Created attachment 17138
implements Qt 4 Unicode path in c_utility.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60738</commentid>
    <comment_count>5</comment_count>
      <attachid>17138</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-08 23:17:14 -0800</bug_when>
    <thetext>Comment on attachment 17138
implements Qt 4 Unicode path in c_utility.cpp

+    *UTF16Length = wcslen(utf16);

This won&apos;t work correctly if there are null characters in the string, and won&apos;t even compile on platforms with a different definition of wchar_t (such as Mac OS X).

I think it would be best to take code from &lt;http://www.unicode.org/Public/PROGRAMS/CVTUTF/ConvertUTF.c&gt;, possibly throwing away the ICU-based implementation.

Also, see the Latin-1 fallback code path in ICU branch - I think we&apos;d like to have it on all platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60793</commentid>
    <comment_count>6</comment_count>
      <attachid>17161</attachid>
    <who name="Justin Haygood">jhaygood</who>
    <bug_when>2007-11-09 13:33:45 -0800</bug_when>
    <thetext>Created attachment 17161
Changes implementation of convertutf8toutf16 to use unicode.org conversion function

Alright, changes implementation to use unicode.org sources. ap was iffy on adding the files in their entirety, but I don&apos;t see a problem with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60869</commentid>
    <comment_count>7</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-11-10 17:26:52 -0800</bug_when>
    <thetext>Tossing my two cents. I care a lot for the binary size. So this adds 30k of code for something already available in the toolkit so please make it optional to use the built-in codec...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60874</commentid>
    <comment_count>8</comment_count>
      <attachid>17161</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2007-11-10 17:42:20 -0800</bug_when>
    <thetext>Comment on attachment 17161
Changes implementation of convertutf8toutf16 to use unicode.org conversion function

Agreed, this is adding a lot of code we just don&apos;t need in Qt afaik.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60888</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-11 02:21:25 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; So this adds 30k of code for something already available in the toolkit so please make it optional
&gt; to use the built-in codec...

Hmm, where do these 30K come from? We only use a single tiny function (I assume you do have dead code stripping enabled). I don&apos;t think such a trivial operation warrants having platform-specific branches.

I was actually considering making a custom UTF-8 decoder for WebCore, too - just as with Latin-1, it&apos;s bad for performance to initialize the whole codec registry just for those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60913</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-11 11:15:40 -0800</bug_when>
    <thetext>Darin suggests that it would be best to have UTF-8 decoding in one place, such as wtf/unicode. UString::UTF8String() can go there, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60982</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-12 05:15:53 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Darin suggests that it would be best to have UTF-8 decoding in one place, such
&gt; as wtf/unicode. UString::UTF8String() can go there, too.

Doing that in bug 15953. Keeping this bug open for port authors to consider adding platform-specific branches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202972</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-03-23 02:17:40 -0700</bug_when>
    <thetext>Closing this bug since r30794 consolidates this into WebCore::String::fromUTF8, which uses the TextEncoding/TextEncoder infrastructure.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17128</attachid>
            <date>2007-11-08 14:52:07 -0800</date>
            <delta_ts>2007-11-08 14:53:20 -0800</delta_ts>
            <desc>implements qt4 unicode in c_utility.cpp</desc>
            <filename>cutility-qt4unicode.patch</filename>
            <type>text/plain</type>
            <size>976</size>
            <attacher name="Justin Haygood">jhaygood</attacher>
            
              <data encoding="base64">SW5kZXg6IGNfdXRpbGl0eS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBjX3V0aWxpdHkuY3BwCShyZXZp
c2lvbiAyNzYxNCkNCisrKyBjX3V0aWxpdHkuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtNDEsNiAr
NDEsMTMgQEANCiAjaWYgVVNFKElDVV9VTklDT0RFKQogI2luY2x1ZGUgPHVuaWNvZGUvdWNudi5o
PgogI2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1
ZGUgPHFkZWJ1Zz4KKyNpbmNsdWRlIDxRVGV4dENvZGVjPgorI2VuZGlmCisKICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgS0pTIHsgbmFtZXNwYWNlIEJpbmRpbmdzIHsK
QEAgLTg5LDYgKzk2LDE3IEBADQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgKlVU
RjE2TGVuZ3RoOyBpKyspCiAgICAgICAgICAgICAoKlVURjE2Q2hhcnMpW2ldID0gVVRGOENoYXJz
W2ldICYgMHhGRjsKICAgICB9CisjZWxpZiBVU0UoUVQ0X1VOSUNPREUpCisKKyAgICBRVGV4dENv
ZGVjKiBjb2RlYyA9ICBRVGV4dENvZGVjOjpjb2RlY0Zvck5hbWUoIlVURi04Iik7CisgICAgUVN0
cmluZyBlbmNvZGVkU3RyaW5nID0gY29kZWMtPnRvVW5pY29kZShVVEY4Q2hhcnMpOworICAgIGNv
bnN0IHVzaG9ydCogdXRmMTYgPSBlbmNvZGVkU3RyaW5nLnV0ZjE2KCk7CisKKyAgICAqVVRGMTZM
ZW5ndGggPSB3Y3NsZW4odXRmMTYpOworICAgICpVVEYxNkNoYXJzID0gKE5QVVRGMTYgKiltYWxs
b2Moc2l6ZW9mKE5QVVRGMTYpICogKCpVVEYxNkxlbmd0aCkpOworICAgIAorICAgIGZvciggdW5z
aWduZWQgaSA9IDA7IGkgPCAqVVRGMTZMZW5ndGg7IGkrKykgKCpVVEYxNkNoYXJzKVtpXSA9IHV0
ZjE2W2ldOyAgICAKKwogI2Vsc2UKICAgICBBU1NFUlQoISJJbXBsZW1lbnQgbWUhIik7ICAgIAog
I2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17129</attachid>
            <date>2007-11-08 14:53:20 -0800</date>
            <delta_ts>2007-11-08 19:47:09 -0800</delta_ts>
            <desc>implements qt4 unicode in c_utility.cpp</desc>
            <filename>cutility-qt4unicode.patch</filename>
            <type>text/plain</type>
            <size>1334</size>
            <attacher name="Justin Haygood">jhaygood</attacher>
            
              <data encoding="base64">SW5kZXg6IGNfdXRpbGl0eS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBjX3V0aWxpdHkuY3BwCShyZXZp
c2lvbiAyNzYxNCkNCisrKyBjX3V0aWxpdHkuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMSw2ICsx
LDcgQEANCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQ
cm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4g
SGF5Z29vZCAoamhheWdvb2RAcmVha3RpeC5jb20pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQxLDYgKzQyLDEzIEBADQogI2lmIFVTRShJQ1VfVU5JQ09ERSkKICNpbmNsdWRl
IDx1bmljb2RlL3VjbnYuaD4KICNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8
Y3N0cmluZz4KKyNpbmNsdWRlIDxxZGVidWc+CisjaW5jbHVkZSA8UVRleHRDb2RlYz4KKyNlbmRp
ZgorCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEtKUyB7IG5hbWVz
cGFjZSBCaW5kaW5ncyB7CkBAIC04OSw2ICs5NywxNyBAQA0KICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8ICpVVEYxNkxlbmd0aDsgaSsrKQogICAgICAgICAgICAgKCpVVEYxNkNoYXJz
KVtpXSA9IFVURjhDaGFyc1tpXSAmIDB4RkY7CiAgICAgfQorI2VsaWYgVVNFKFFUNF9VTklDT0RF
KQorCisgICAgUVRleHRDb2RlYyogY29kZWMgPSAgUVRleHRDb2RlYzo6Y29kZWNGb3JOYW1lKCJV
VEYtOCIpOworICAgIFFTdHJpbmcgZW5jb2RlZFN0cmluZyA9IGNvZGVjLT50b1VuaWNvZGUoVVRG
OENoYXJzKTsKKyAgICBjb25zdCB1c2hvcnQqIHV0ZjE2ID0gZW5jb2RlZFN0cmluZy51dGYxNigp
OworCisgICAgKlVURjE2TGVuZ3RoID0gd2NzbGVuKHV0ZjE2KTsKKyAgICAqVVRGMTZDaGFycyA9
IChOUFVURjE2ICopbWFsbG9jKHNpemVvZihOUFVURjE2KSAqICgqVVRGMTZMZW5ndGgpKTsKKyAg
ICAKKyAgICBmb3IoIHVuc2lnbmVkIGkgPSAwOyBpIDwgKlVURjE2TGVuZ3RoOyBpKyspICgqVVRG
MTZDaGFycylbaV0gPSB1dGYxNltpXTsgICAgCisKICNlbHNlCiAgICAgQVNTRVJUKCEiSW1wbGVt
ZW50IG1lISIpOyAgICAKICNlbmRpZgo=
</data>
<flag name="review"
          id="7285"
          type_id="1"
          status="-"
          setter="mrowe"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17138</attachid>
            <date>2007-11-08 19:47:09 -0800</date>
            <delta_ts>2007-11-09 13:33:45 -0800</delta_ts>
            <desc>implements Qt 4 Unicode path in c_utility.cpp</desc>
            <filename>qt4unicode-convertutf8toutf16.patch</filename>
            <type>text/plain</type>
            <size>2124</size>
            <attacher name="Justin Haygood">jhaygood</attacher>
            
              <data encoding="base64">SW5kZXg6IGJpbmRpbmdzL2MvY191dGlsaXR5LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGJpbmRpbmdz
L2MvY191dGlsaXR5LmNwcAkocmV2aXNpb24gMjc2MjkpDQorKysgYmluZGluZ3MvYy9jX3V0aWxp
dHkuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtNDEsNiArNDEsMTAgQEANCiAjaWYgVVNFKElDVV9V
TklDT0RFKQogI2luY2x1ZGUgPHVuaWNvZGUvdWNudi5oPgogI2VuZGlmCisjaWYgVVNFKFFUNF9V
TklDT0RFKQorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8UVRleHRDb2RlYz4KKyNlbmRp
ZgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBLSlMgeyBuYW1lc3Bh
Y2UgQmluZGluZ3MgewpAQCAtNTQsMTMgKzU4LDE0IEBADQogLy8gUmVxdWlyZXMgZnJlZSgpIG9m
IHJldHVybmVkIFVURjE2Q2hhcnMuCiB2b2lkIGNvbnZlcnRVVEY4VG9VVEYxNihjb25zdCBOUFVU
RjggKlVURjhDaGFycywgaW50IFVURjhMZW5ndGgsIE5QVVRGMTYgKipVVEYxNkNoYXJzLCB1bnNp
Z25lZCBpbnQgKlVURjE2TGVuZ3RoKQogewotI2lmIFVTRShJQ1VfVU5JQ09ERSkKKwogICAgIEFT
U0VSVChVVEY4Q2hhcnMgfHwgVVRGOExlbmd0aCA9PSAwKTsKICAgICBBU1NFUlQoVVRGMTZDaGFy
cyk7CiAgICAgCiAgICAgaWYgKFVURjhMZW5ndGggPT0gLTEpCiAgICAgICAgIFVURjhMZW5ndGgg
PSBzdGF0aWNfY2FzdDxpbnQ+KHN0cmxlbihVVEY4Q2hhcnMpKTsKLSAgICAgICAgCisgICAgCisj
aWYgVVNFKElDVV9VTklDT0RFKQogICAgIC8vIFVURjE2TGVuZ3RoIG1heGltdW0gbGVuZ3RoIGlz
IHRoZSBsZW5ndGggb2YgdGhlIFVURjggc3RyaW5nLCBwbHVzIG9uZSB0byBpbmNsdWRlIHRlcm1p
bmF0b3IKICAgICAvLyBXaXRob3V0IHRoZSBwbHVzIG9uZSwgaXQgd2lsbCBjb252ZXJ0IG9rLCBi
dXQgYSB3YXJuaW5nIGlzIGdlbmVyYXRlZCBmcm9tIHRoZSBjb252ZXJ0ZXIgYXMKICAgICAvLyB0
aGVyZSBpcyBub3QgZW5vdWdoIHJvb20gZm9yIGEgdGVybWluYXRpbmcgY2hhcmFjdGVyLgpAQCAt
ODksNiArOTQsMTYgQEANCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAqVVRGMTZM
ZW5ndGg7IGkrKykKICAgICAgICAgICAgICgqVVRGMTZDaGFycylbaV0gPSBVVEY4Q2hhcnNbaV0g
JiAweEZGOwogICAgIH0KKyNlbGlmIFVTRShRVDRfVU5JQ09ERSkKKyAgICBRVGV4dENvZGVjKiBj
b2RlYyA9IFFUZXh0Q29kZWM6OmNvZGVjRm9yTmFtZSgiVVRGLTgiKTsKKyAgICBRU3RyaW5nIGVu
Y29kZWRTdHJpbmcgPSBjb2RlYy0+dG9Vbmljb2RlKFVURjhDaGFycyk7CisgICAgY29uc3QgdXNo
b3J0KiB1dGYxNiA9IGVuY29kZWRTdHJpbmcudXRmMTYoKTsKKyAgICAKKyAgICAqVVRGMTZMZW5n
dGggPSB3Y3NsZW4odXRmMTYpOworICAgICpVVEYxNkNoYXJzID0gc3RhdGljX2Nhc3Q8TlBVVEYx
Nio+KG1hbGxvYyhzaXplb2YoTlBVVEYxNikgKiAoKlVURjE2TGVuZ3RoKSkpOworICAgIAorICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAqVVRGMTZMZW5ndGg7IGkrKykKKyAgICAgICAgKCpV
VEYxNkNoYXJzKVtpXSA9IHV0ZjE2W2ldOwkgICAgCiAjZWxzZQogICAgIEFTU0VSVCghIkltcGxl
bWVudCBtZSEiKTsgICAgCiAjZW5kaWYKSW5kZXg6IENoYW5nZUxvZw0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IENoYW5nZUxvZwkocmV2aXNpb24gMjc2MjkpDQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDExIEBADQorMjAwNy0xMS0wOCAgSnVzdGluIEhheWdvb2QgIDxqaGF5Z29v
ZEByZWFrdGl4LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAg
ICAgICAgCisgICAgICAgIEltcGxlbWVudHMgdGhlIFVTRShRVDRfVU5JQ09ERSkgY29kZXBhdGgg
aW4gY29udmVydFVURjhUb1VURjE2CisKKyAgICAgICAgKiBiaW5kaW5nc1xjXGNfdXRpbGl0eS5j
cHAKKwogMjAwNy0xMS0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgLSBmaXggYnVpbGQK
</data>
<flag name="review"
          id="7294"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17161</attachid>
            <date>2007-11-09 13:33:45 -0800</date>
            <delta_ts>2007-11-10 17:42:20 -0800</delta_ts>
            <desc>Changes implementation of convertutf8toutf16 to use unicode.org conversion function</desc>
            <filename>utfconvert.diff</filename>
            <type>text/plain</type>
            <size>30843</size>
            <attacher name="Justin Haygood">jhaygood</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI3NjUy
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMDctMTEt
MDkgIEp1c3RpbiBIYXlnb29kICA8amhheWdvb2RAcmVha3RpeC5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBVc2UgQ29udmVydFVU
Ri5jIChmcm9tIHVuaWNvZGUub3JnKSB0byBkbyB0aGUgVVRGOCAtPiBVVEYxNiBjb252ZXJzaW9u
CisgICAgICAgIFRoaXMgd2F5IFFUNF9VTklDT0RFIGFuZCBJQ1VfVU5JQ09ERSBkbyBub3QgbmVl
ZCBkaWZmZXJlbnQgY29kZXBhdGhzCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5wcmk6Cisg
ICAgICAgICogYmluZGluZ3MvYy9jX3V0aWxpdHkuY3BwOgorICAgICAgICAoS0pTOjpCaW5kaW5n
czo6Y29udmVydFVURjhUb1VURjE2KToKKyAgICAgICAgKiB3dGYvdW5pY29kZS9Db252ZXJ0VVRG
LmM6IEFkZGVkLgorICAgICAgICAoQ29udmVydFVURjMydG9VVEYxNik6CisgICAgICAgIChDb252
ZXJ0VVRGMTZ0b1VURjMyKToKKyAgICAgICAgKENvbnZlcnRVVEYxNnRvVVRGOCk6CisgICAgICAg
IChpc0xlZ2FsVVRGOCk6CisgICAgICAgIChpc0xlZ2FsVVRGOFNlcXVlbmNlKToKKyAgICAgICAg
KENvbnZlcnRVVEY4dG9VVEYxNik6CisgICAgICAgIChDb252ZXJ0VVRGMzJ0b1VURjgpOgorICAg
ICAgICAoQ29udmVydFVURjh0b1VURjMyKToKKyAgICAgICAgKiB3dGYvdW5pY29kZS9Db252ZXJ0
VVRGLmg6IEFkZGVkLgorCiAyMDA3LTExLTA5ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNv
bT4KIAogICAgICAgICBXaW5kb3dzIGJ1aWxkIGZpeApJbmRleDogSmF2YVNjcmlwdENvcmUucHJp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlLnByaQkocmV2aXNpb24gMjc2NTIpCisrKyBK
YXZhU2NyaXB0Q29yZS5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAgU09VUkNF
UyArPSBcCiAgICAgd3RmL0hhc2hUYWJsZS5jcHAgXAogICAgIHd0Zi9GYXN0TWFsbG9jLmNwcCBc
CiAgICAgd3RmL0Zhc3RNYWxsb2NQQ1JFLmNwcCBcCisgICAgd3RmL3VuaWNvZGUvQ29udmVydFVU
Ri5jIFwKICAgICBiaW5kaW5ncy9OUF9qc29iamVjdC5jcHAgXAogICAgIGJpbmRpbmdzL25wcnVu
dGltZS5jcHAgXAogICAgIGJpbmRpbmdzL3J1bnRpbWVfYXJyYXkuY3BwIFwKSW5kZXg6IGJpbmRp
bmdzL2MvY191dGlsaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9jL2NfdXRpbGl0eS5j
cHAJKHJldmlzaW9uIDI3NjUyKQorKysgYmluZGluZ3MvYy9jX3V0aWxpdHkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw5ICszOSw3IEBACiAjaW5jbHVkZSAicnVudGlt
ZV9vYmplY3QuaCIKICNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bS5oIgotI2lmIFVTRShJQ1VfVU5JQ09ERSkKLSNpbmNsdWRlIDx1bmljb2RlL3VjbnYuaD4KLSNl
bmRpZgorI2luY2x1ZGUgInVuaWNvZGUvQ29udmVydFVURi5oIgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAKIG5hbWVzcGFjZSBLSlMgeyBuYW1lc3BhY2UgQmluZGluZ3MgewpAQCAtNTQs
MzMgKzUzLDM1IEBAIHZvaWQgY29udmVydE5QU3RyaW5nVG9VVEYxNihjb25zdCBOUFN0cmkKIC8v
IFJlcXVpcmVzIGZyZWUoKSBvZiByZXR1cm5lZCBVVEYxNkNoYXJzLgogdm9pZCBjb252ZXJ0VVRG
OFRvVVRGMTYoY29uc3QgTlBVVEY4ICpVVEY4Q2hhcnMsIGludCBVVEY4TGVuZ3RoLCBOUFVURjE2
ICoqVVRGMTZDaGFycywgdW5zaWduZWQgaW50ICpVVEYxNkxlbmd0aCkKIHsKLSNpZiBVU0UoSUNV
X1VOSUNPREUpCiAgICAgQVNTRVJUKFVURjhDaGFycyB8fCBVVEY4TGVuZ3RoID09IDApOwogICAg
IEFTU0VSVChVVEYxNkNoYXJzKTsKICAgICAKICAgICBpZiAoVVRGOExlbmd0aCA9PSAtMSkKICAg
ICAgICAgVVRGOExlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oc3RybGVuKFVURjhDaGFycykpOwot
ICAgICAgICAKKwogICAgIC8vIFVURjE2TGVuZ3RoIG1heGltdW0gbGVuZ3RoIGlzIHRoZSBsZW5n
dGggb2YgdGhlIFVURjggc3RyaW5nLCBwbHVzIG9uZSB0byBpbmNsdWRlIHRlcm1pbmF0b3IKICAg
ICAvLyBXaXRob3V0IHRoZSBwbHVzIG9uZSwgaXQgd2lsbCBjb252ZXJ0IG9rLCBidXQgYSB3YXJu
aW5nIGlzIGdlbmVyYXRlZCBmcm9tIHRoZSBjb252ZXJ0ZXIgYXMKICAgICAvLyB0aGVyZSBpcyBu
b3QgZW5vdWdoIHJvb20gZm9yIGEgdGVybWluYXRpbmcgY2hhcmFjdGVyLgotICAgICpVVEYxNkxl
bmd0aCA9IFVURjhMZW5ndGggKyAxOyAKLSAgICAgICAgCi0gICAgKlVURjE2Q2hhcnMgPSAwOwot
ICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICAgIFVDb252ZXJ0ZXIqIGNv
bnYgPSB1Y252X29wZW4oInV0ZjgiLCAmc3RhdHVzKTsKLSAgICBpZiAoVV9TVUNDRVNTKHN0YXR1
cykpIHsgCi0gICAgICAgICpVVEYxNkNoYXJzID0gKE5QVVRGMTYgKiltYWxsb2Moc2l6ZW9mKE5Q
VVRGMTYpICogKCpVVEYxNkxlbmd0aCkpOwotICAgICAgICB1Y252X3NldFRvVUNhbGxCYWNrKGNv
bnYsIFVDTlZfVE9fVV9DQUxMQkFDS19TVE9QLCAwLCAwLCAwLCAmc3RhdHVzKTsKLSAgICAgICAg
KlVURjE2TGVuZ3RoID0gdWNudl90b1VDaGFycyhjb252LCAoOjpVQ2hhciopKlVURjE2Q2hhcnMs
ICpVVEYxNkxlbmd0aCwgVVRGOENoYXJzLCBVVEY4TGVuZ3RoLCAmc3RhdHVzKTsgCi0gICAgICAg
IHVjbnZfY2xvc2UoY29udik7Ci0gICAgfSAKKyAgICAqVVRGMTZMZW5ndGggPSBVVEY4TGVuZ3Ro
OyAKKyAgICAqVVRGMTZDaGFycyA9IHN0YXRpY19jYXN0PE5QVVRGMTYqPihtYWxsb2Moc2l6ZW9m
KE5QVVRGMTYpICogKCpVVEYxNkxlbmd0aCkpKTsKKyAgICAKKyAgICBjb25zdCBVVEY4KiBzb3Vy
Y2VzdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVVRGOCo+KFVURjhDaGFycyk7CisgICAg
Y29uc3QgVVRGOCogc291cmNlZW5kID0gc291cmNlc3RhcnQgKyBVVEY4TGVuZ3RoOworCisgICAg
VVRGMTYqIHRhcmdldHN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDxVVEYxNio+KCpVVEYxNkNoYXJz
KTsKKyAgICBVVEYxNiogdGFyZ2V0ZW5kID0gdGFyZ2V0c3RhcnQgKyBVVEY4TGVuZ3RoOworICAg
IAorICAgIENvbnZlcnNpb25SZXN1bHQgcmVzdWx0ID0gQ29udmVydFVURjh0b1VURjE2KCZzb3Vy
Y2VzdGFydCwgc291cmNlZW5kLCAmdGFyZ2V0c3RhcnQsIHRhcmdldGVuZCwgc3RyaWN0Q29udmVy
c2lvbik7CisgICAgCisgICAgKlVURjE2TGVuZ3RoID0gdGFyZ2V0c3RhcnQgLSAqVVRGMTZDaGFy
czsKICAgICAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGNvbnZlcnNpb24gd2FzIHN1Y2Nl
c3NmdWwKICAgICAvLyBTb21lIHBsdWdpbnMgcmV0dXJuIGludmFsaWQgVVRGLTggaW4gTlBWYXJp
YW50VHlwZV9TdHJpbmcsIHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTE2Mz4KICAgICAvLyBUaGVyZSBpcyBubyAiYmFkIGRhdGEiIGZvciBsYXRpbjEuIEl0IGlz
IHVubGlrZWx5IHRoYXQgdGhlIHBsdWdpbiB3YXMgcmVhbGx5IHNlbmRpbmcgdGV4dCBpbiB0aGlz
IGVuY29kaW5nLAogICAgIC8vIGJ1dCBpdCBzaG91bGQgaGF2ZSB1c2VkIFVURi04LCBhbmQgbm93
IHdlIGFyZSBzaW1wbHkgYXZvaWRpbmcgYSBjcmFzaC4KLSAgICBpZiAoIVVfU1VDQ0VTUyhzdGF0
dXMpKSB7CisgICAgCisgICAgaWYgKHJlc3VsdCAhPSBjb252ZXJzaW9uT0spIHsKKyAgICAKICAg
ICAgICAgKlVURjE2TGVuZ3RoID0gVVRGOExlbmd0aDsKICAgICAgICAgCiAgICAgICAgIGlmICgh
KlVURjE2Q2hhcnMpICAgLy8gSWYgdGhlIG1lbW9yeSB3YXNuJ3QgYWxsb2NhdGVkLCBhbGxvY2F0
ZSBpdC4KQEAgLTg5LDkgKzkwLDYgQEAgdm9pZCBjb252ZXJ0VVRGOFRvVVRGMTYoY29uc3QgTlBV
VEY4ICpVVAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgKlVURjE2TGVuZ3RoOyBp
KyspCiAgICAgICAgICAgICAoKlVURjE2Q2hhcnMpW2ldID0gVVRGOENoYXJzW2ldICYgMHhGRjsK
ICAgICB9Ci0jZWxzZQotICAgIEFTU0VSVCghIkltcGxlbWVudCBtZSEiKTsgICAgCi0jZW5kaWYK
IH0KIAogLy8gVmFyaWFudCB2YWx1ZSBtdXN0IGJlIHJlbGVhc2VkIHdpdGggTlBSZWxlYXNlVmFy
aWFudFZhbHVlKCkKSW5kZXg6IHd0Zi91bmljb2RlL0NvbnZlcnRVVEYuYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSB3dGYvdW5pY29kZS9Db252ZXJ0VVRGLmMJKHJldmlzaW9uIDApCisrKyB3dGYvdW5pY29kZS9D
b252ZXJ0VVRGLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTM5IEBACisvKgorICogQ29weXJp
Z2h0IDIwMDEtMjAwNCBVbmljb2RlLCBJbmMuCisgKiAKKyAqIERpc2NsYWltZXIKKyAqIAorICog
VGhpcyBzb3VyY2UgY29kZSBpcyBwcm92aWRlZCBhcyBpcyBieSBVbmljb2RlLCBJbmMuIE5vIGNs
YWltcyBhcmUKKyAqIG1hZGUgYXMgdG8gZml0bmVzcyBmb3IgYW55IHBhcnRpY3VsYXIgcHVycG9z
ZS4gTm8gd2FycmFudGllcyBvZiBhbnkKKyAqIGtpbmQgYXJlIGV4cHJlc3NlZCBvciBpbXBsaWVk
LiBUaGUgcmVjaXBpZW50IGFncmVlcyB0byBkZXRlcm1pbmUKKyAqIGFwcGxpY2FiaWxpdHkgb2Yg
aW5mb3JtYXRpb24gcHJvdmlkZWQuIElmIHRoaXMgZmlsZSBoYXMgYmVlbgorICogcHVyY2hhc2Vk
IG9uIG1hZ25ldGljIG9yIG9wdGljYWwgbWVkaWEgZnJvbSBVbmljb2RlLCBJbmMuLCB0aGUKKyAq
IHNvbGUgcmVtZWR5IGZvciBhbnkgY2xhaW0gd2lsbCBiZSBleGNoYW5nZSBvZiBkZWZlY3RpdmUg
bWVkaWEKKyAqIHdpdGhpbiA5MCBkYXlzIG9mIHJlY2VpcHQuCisgKiAKKyAqIExpbWl0YXRpb25z
IG9uIFJpZ2h0cyB0byBSZWRpc3RyaWJ1dGUgVGhpcyBDb2RlCisgKiAKKyAqIFVuaWNvZGUsIElu
Yy4gaGVyZWJ5IGdyYW50cyB0aGUgcmlnaHQgdG8gZnJlZWx5IHVzZSB0aGUgaW5mb3JtYXRpb24K
KyAqIHN1cHBsaWVkIGluIHRoaXMgZmlsZSBpbiB0aGUgY3JlYXRpb24gb2YgcHJvZHVjdHMgc3Vw
cG9ydGluZyB0aGUKKyAqIFVuaWNvZGUgU3RhbmRhcmQsIGFuZCB0byBtYWtlIGNvcGllcyBvZiB0
aGlzIGZpbGUgaW4gYW55IGZvcm0KKyAqIGZvciBpbnRlcm5hbCBvciBleHRlcm5hbCBkaXN0cmli
dXRpb24gYXMgbG9uZyBhcyB0aGlzIG5vdGljZQorICogcmVtYWlucyBhdHRhY2hlZC4KKyAqLwor
CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworICAgIENvbnZlcnNpb25zIGJldHdlZW4gVVRGMzIsIFVURi0x
NiwgYW5kIFVURi04LiBTb3VyY2UgY29kZSBmaWxlLgorICAgIEF1dGhvcjogTWFyayBFLiBEYXZp
cywgMTk5NC4KKyAgICBSZXYgSGlzdG9yeTogUmljayBNY0dvd2FuLCBmaXhlcyAmIHVwZGF0ZXMg
TWF5IDIwMDEuCisgICAgU2VwdCAyMDAxOiBmaXhlZCBjb25zdCAmIGVycm9yIGNvbmRpdGlvbnMg
cGVyCisJbW9kcyBzdWdnZXN0ZWQgYnkgUy4gUGFyZW50ICYgQS4gTGlsbGljaC4KKyAgICBKdW5l
IDIwMDI6IFRpbSBEb2RkIGFkZGVkIGRldGVjdGlvbiBhbmQgaGFuZGxpbmcgb2YgaW5jb21wbGV0
ZQorCXNvdXJjZSBzZXF1ZW5jZXMsIGVuaGFuY2VkIGVycm9yIGRldGVjdGlvbiwgYWRkZWQgY2Fz
dHMKKwl0byBlbGltaW5hdGUgY29tcGlsZXIgd2FybmluZ3MuCisgICAgSnVseSAyMDAzOiBzbGln
aHQgbW9kcyB0byBiYWNrIG91dCBhZ2dyZXNzaXZlIEZGRkUgZGV0ZWN0aW9uLgorICAgIEphbiAy
MDA0OiB1cGRhdGVkIHN3aXRjaGVzIGluIGZyb20tVVRGOCBjb252ZXJzaW9ucy4KKyAgICBPY3Qg
MjAwNDogdXBkYXRlZCB0byB1c2UgVU5JX01BWF9MRUdBTF9VVEYzMiBpbiBVVEYtMzIgY29udmVy
c2lvbnMuCisKKyAgICBTZWUgdGhlIGhlYWRlciBmaWxlICJDb252ZXJ0VVRGLmgiIGZvciBjb21w
bGV0ZSBkb2N1bWVudGF0aW9uLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisjaW5jbHVkZSAi
Q29udmVydFVURi5oIgorI2lmZGVmIENWVFVURl9ERUJVRworI2luY2x1ZGUgPHN0ZGlvLmg+Cisj
ZW5kaWYKKworc3RhdGljIGNvbnN0IGludCBoYWxmU2hpZnQgID0gMTA7IC8qIHVzZWQgZm9yIHNo
aWZ0aW5nIGJ5IDEwIGJpdHMgKi8KKworc3RhdGljIGNvbnN0IFVURjMyIGhhbGZCYXNlID0gMHgw
MDEwMDAwVUw7CitzdGF0aWMgY29uc3QgVVRGMzIgaGFsZk1hc2sgPSAweDNGRlVMOworCisjZGVm
aW5lIFVOSV9TVVJfSElHSF9TVEFSVCAgKFVURjMyKTB4RDgwMAorI2RlZmluZSBVTklfU1VSX0hJ
R0hfRU5EICAgIChVVEYzMikweERCRkYKKyNkZWZpbmUgVU5JX1NVUl9MT1dfU1RBUlQgICAoVVRG
MzIpMHhEQzAwCisjZGVmaW5lIFVOSV9TVVJfTE9XX0VORCAgICAgKFVURjMyKTB4REZGRgorI2Rl
ZmluZSBmYWxzZQkgICAwCisjZGVmaW5lIHRydWUJICAgIDEKKworLyogLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICov
CisKK0NvbnZlcnNpb25SZXN1bHQgQ29udmVydFVURjMydG9VVEYxNiAoCisJY29uc3QgVVRGMzIq
KiBzb3VyY2VTdGFydCwgY29uc3QgVVRGMzIqIHNvdXJjZUVuZCwgCisJVVRGMTYqKiB0YXJnZXRT
dGFydCwgVVRGMTYqIHRhcmdldEVuZCwgQ29udmVyc2lvbkZsYWdzIGZsYWdzKSB7CisgICAgQ29u
dmVyc2lvblJlc3VsdCByZXN1bHQgPSBjb252ZXJzaW9uT0s7CisgICAgY29uc3QgVVRGMzIqIHNv
dXJjZSA9ICpzb3VyY2VTdGFydDsKKyAgICBVVEYxNiogdGFyZ2V0ID0gKnRhcmdldFN0YXJ0Owor
ICAgIHdoaWxlIChzb3VyY2UgPCBzb3VyY2VFbmQpIHsKKwlVVEYzMiBjaDsKKwlpZiAodGFyZ2V0
ID49IHRhcmdldEVuZCkgeworCSAgICByZXN1bHQgPSB0YXJnZXRFeGhhdXN0ZWQ7IGJyZWFrOwor
CX0KKwljaCA9ICpzb3VyY2UrKzsKKwlpZiAoY2ggPD0gVU5JX01BWF9CTVApIHsgLyogVGFyZ2V0
IGlzIGEgY2hhcmFjdGVyIDw9IDB4RkZGRiAqLworCSAgICAvKiBVVEYtMTYgc3Vycm9nYXRlIHZh
bHVlcyBhcmUgaWxsZWdhbCBpbiBVVEYtMzI7IDB4ZmZmZiBvciAweGZmZmUgYXJlIGJvdGggcmVz
ZXJ2ZWQgdmFsdWVzICovCisJICAgIGlmIChjaCA+PSBVTklfU1VSX0hJR0hfU1RBUlQgJiYgY2gg
PD0gVU5JX1NVUl9MT1dfRU5EKSB7CisJCWlmIChmbGFncyA9PSBzdHJpY3RDb252ZXJzaW9uKSB7
CisJCSAgICAtLXNvdXJjZTsgLyogcmV0dXJuIHRvIHRoZSBpbGxlZ2FsIHZhbHVlIGl0c2VsZiAq
LworCQkgICAgcmVzdWx0ID0gc291cmNlSWxsZWdhbDsKKwkJICAgIGJyZWFrOworCQl9IGVsc2Ug
eworCQkgICAgKnRhcmdldCsrID0gVU5JX1JFUExBQ0VNRU5UX0NIQVI7CisJCX0KKwkgICAgfSBl
bHNlIHsKKwkJKnRhcmdldCsrID0gKFVURjE2KWNoOyAvKiBub3JtYWwgY2FzZSAqLworCSAgICB9
CisJfSBlbHNlIGlmIChjaCA+IFVOSV9NQVhfTEVHQUxfVVRGMzIpIHsKKwkgICAgaWYgKGZsYWdz
ID09IHN0cmljdENvbnZlcnNpb24pIHsKKwkJcmVzdWx0ID0gc291cmNlSWxsZWdhbDsKKwkgICAg
fSBlbHNlIHsKKwkJKnRhcmdldCsrID0gVU5JX1JFUExBQ0VNRU5UX0NIQVI7CisJICAgIH0KKwl9
IGVsc2UgeworCSAgICAvKiB0YXJnZXQgaXMgYSBjaGFyYWN0ZXIgaW4gcmFuZ2UgMHhGRkZGIC0g
MHgxMEZGRkYuICovCisJICAgIGlmICh0YXJnZXQgKyAxID49IHRhcmdldEVuZCkgeworCQktLXNv
dXJjZTsgLyogQmFjayB1cCBzb3VyY2UgcG9pbnRlciEgKi8KKwkJcmVzdWx0ID0gdGFyZ2V0RXho
YXVzdGVkOyBicmVhazsKKwkgICAgfQorCSAgICBjaCAtPSBoYWxmQmFzZTsKKwkgICAgKnRhcmdl
dCsrID0gKFVURjE2KSgoY2ggPj4gaGFsZlNoaWZ0KSArIFVOSV9TVVJfSElHSF9TVEFSVCk7CisJ
ICAgICp0YXJnZXQrKyA9IChVVEYxNikoKGNoICYgaGFsZk1hc2spICsgVU5JX1NVUl9MT1dfU1RB
UlQpOworCX0KKyAgICB9CisgICAgKnNvdXJjZVN0YXJ0ID0gc291cmNlOworICAgICp0YXJnZXRT
dGFydCA9IHRhcmdldDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKiAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Ki8KKworQ29udmVyc2lvblJlc3VsdCBDb252ZXJ0VVRGMTZ0b1VURjMyICgKKwljb25zdCBVVEYx
NioqIHNvdXJjZVN0YXJ0LCBjb25zdCBVVEYxNiogc291cmNlRW5kLCAKKwlVVEYzMioqIHRhcmdl
dFN0YXJ0LCBVVEYzMiogdGFyZ2V0RW5kLCBDb252ZXJzaW9uRmxhZ3MgZmxhZ3MpIHsKKyAgICBD
b252ZXJzaW9uUmVzdWx0IHJlc3VsdCA9IGNvbnZlcnNpb25PSzsKKyAgICBjb25zdCBVVEYxNiog
c291cmNlID0gKnNvdXJjZVN0YXJ0OworICAgIFVURjMyKiB0YXJnZXQgPSAqdGFyZ2V0U3RhcnQ7
CisgICAgVVRGMzIgY2gsIGNoMjsKKyAgICB3aGlsZSAoc291cmNlIDwgc291cmNlRW5kKSB7CisJ
Y29uc3QgVVRGMTYqIG9sZFNvdXJjZSA9IHNvdXJjZTsgLyogIEluIGNhc2Ugd2UgaGF2ZSB0byBi
YWNrIHVwIGJlY2F1c2Ugb2YgdGFyZ2V0IG92ZXJmbG93LiAqLworCWNoID0gKnNvdXJjZSsrOwor
CS8qIElmIHdlIGhhdmUgYSBzdXJyb2dhdGUgcGFpciwgY29udmVydCB0byBVVEYzMiBmaXJzdC4g
Ki8KKwlpZiAoY2ggPj0gVU5JX1NVUl9ISUdIX1NUQVJUICYmIGNoIDw9IFVOSV9TVVJfSElHSF9F
TkQpIHsKKwkgICAgLyogSWYgdGhlIDE2IGJpdHMgZm9sbG93aW5nIHRoZSBoaWdoIHN1cnJvZ2F0
ZSBhcmUgaW4gdGhlIHNvdXJjZSBidWZmZXIuLi4gKi8KKwkgICAgaWYgKHNvdXJjZSA8IHNvdXJj
ZUVuZCkgeworCQljaDIgPSAqc291cmNlOworCQkvKiBJZiBpdCdzIGEgbG93IHN1cnJvZ2F0ZSwg
Y29udmVydCB0byBVVEYzMi4gKi8KKwkJaWYgKGNoMiA+PSBVTklfU1VSX0xPV19TVEFSVCAmJiBj
aDIgPD0gVU5JX1NVUl9MT1dfRU5EKSB7CisJCSAgICBjaCA9ICgoY2ggLSBVTklfU1VSX0hJR0hf
U1RBUlQpIDw8IGhhbGZTaGlmdCkKKwkJCSsgKGNoMiAtIFVOSV9TVVJfTE9XX1NUQVJUKSArIGhh
bGZCYXNlOworCQkgICAgKytzb3VyY2U7CisJCX0gZWxzZSBpZiAoZmxhZ3MgPT0gc3RyaWN0Q29u
dmVyc2lvbikgeyAvKiBpdCdzIGFuIHVucGFpcmVkIGhpZ2ggc3Vycm9nYXRlICovCisJCSAgICAt
LXNvdXJjZTsgLyogcmV0dXJuIHRvIHRoZSBpbGxlZ2FsIHZhbHVlIGl0c2VsZiAqLworCQkgICAg
cmVzdWx0ID0gc291cmNlSWxsZWdhbDsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0gZWxzZSB7
IC8qIFdlIGRvbid0IGhhdmUgdGhlIDE2IGJpdHMgZm9sbG93aW5nIHRoZSBoaWdoIHN1cnJvZ2F0
ZS4gKi8KKwkJLS1zb3VyY2U7IC8qIHJldHVybiB0byB0aGUgaGlnaCBzdXJyb2dhdGUgKi8KKwkJ
cmVzdWx0ID0gc291cmNlRXhoYXVzdGVkOworCQlicmVhazsKKwkgICAgfQorCX0gZWxzZSBpZiAo
ZmxhZ3MgPT0gc3RyaWN0Q29udmVyc2lvbikgeworCSAgICAvKiBVVEYtMTYgc3Vycm9nYXRlIHZh
bHVlcyBhcmUgaWxsZWdhbCBpbiBVVEYtMzIgKi8KKwkgICAgaWYgKGNoID49IFVOSV9TVVJfTE9X
X1NUQVJUICYmIGNoIDw9IFVOSV9TVVJfTE9XX0VORCkgeworCQktLXNvdXJjZTsgLyogcmV0dXJu
IHRvIHRoZSBpbGxlZ2FsIHZhbHVlIGl0c2VsZiAqLworCQlyZXN1bHQgPSBzb3VyY2VJbGxlZ2Fs
OworCQlicmVhazsKKwkgICAgfQorCX0KKwlpZiAodGFyZ2V0ID49IHRhcmdldEVuZCkgeworCSAg
ICBzb3VyY2UgPSBvbGRTb3VyY2U7IC8qIEJhY2sgdXAgc291cmNlIHBvaW50ZXIhICovCisJICAg
IHJlc3VsdCA9IHRhcmdldEV4aGF1c3RlZDsgYnJlYWs7CisJfQorCSp0YXJnZXQrKyA9IGNoOwor
ICAgIH0KKyAgICAqc291cmNlU3RhcnQgPSBzb3VyY2U7CisgICAgKnRhcmdldFN0YXJ0ID0gdGFy
Z2V0OworI2lmZGVmIENWVFVURl9ERUJVRworaWYgKHJlc3VsdCA9PSBzb3VyY2VJbGxlZ2FsKSB7
CisgICAgZnByaW50ZihzdGRlcnIsICJDb252ZXJ0VVRGMTZ0b1VURjMyIGlsbGVnYWwgc2VxIDB4
JTA0eCwlMDR4XG4iLCBjaCwgY2gyKTsKKyAgICBmZmx1c2goc3RkZXJyKTsKK30KKyNlbmRpZgor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogSW5k
ZXggaW50byB0aGUgdGFibGUgYmVsb3cgd2l0aCB0aGUgZmlyc3QgYnl0ZSBvZiBhIFVURi04IHNl
cXVlbmNlIHRvCisgKiBnZXQgdGhlIG51bWJlciBvZiB0cmFpbGluZyBieXRlcyB0aGF0IGFyZSBz
dXBwb3NlZCB0byBmb2xsb3cgaXQuCisgKiBOb3RlIHRoYXQgKmxlZ2FsKiBVVEYtOCB2YWx1ZXMg
Y2FuJ3QgaGF2ZSA0IG9yIDUtYnl0ZXMuIFRoZSB0YWJsZSBpcworICogbGVmdCBhcy1pcyBmb3Ig
YW55b25lIHdobyBtYXkgd2FudCB0byBkbyBzdWNoIGNvbnZlcnNpb24sIHdoaWNoIHdhcworICog
YWxsb3dlZCBpbiBlYXJsaWVyIGFsZ29yaXRobXMuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyIHRy
YWlsaW5nQnl0ZXNGb3JVVEY4WzI1Nl0gPSB7CisgICAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs
MCwwLDAsMCwgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAs
MCwwLDAsMCwwLDAsMCwwLDAsMCwwLCAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAor
ICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsIDAsMCwwLDAsMCwwLDAsMCwwLDAs
MCwwLDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwgMCwwLDAs
MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww
LDAsMCwwLCAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCww
LDAsMCwwLDAsMCwwLDAsMCwwLDAsIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCisg
ICAgMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwgMSwxLDEsMSwxLDEsMSwxLDEsMSwx
LDEsMSwxLDEsMSwKKyAgICAyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLCAzLDMsMywz
LDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1Cit9OworCisvKgorICogTWFnaWMgdmFsdWVzIHN1YnRy
YWN0ZWQgZnJvbSBhIGJ1ZmZlciB2YWx1ZSBkdXJpbmcgVVRGOCBjb252ZXJzaW9uLgorICogVGhp
cyB0YWJsZSBjb250YWlucyBhcyBtYW55IHZhbHVlcyBhcyB0aGVyZSBtaWdodCBiZSB0cmFpbGlu
ZyBieXRlcworICogaW4gYSBVVEYtOCBzZXF1ZW5jZS4KKyAqLworc3RhdGljIGNvbnN0IFVURjMy
IG9mZnNldHNGcm9tVVRGOFs2XSA9IHsgMHgwMDAwMDAwMFVMLCAweDAwMDAzMDgwVUwsIDB4MDAw
RTIwODBVTCwgCisJCSAgICAgMHgwM0M4MjA4MFVMLCAweEZBMDgyMDgwVUwsIDB4ODIwODIwODBV
TCB9OworCisvKgorICogT25jZSB0aGUgYml0cyBhcmUgc3BsaXQgb3V0IGludG8gYnl0ZXMgb2Yg
VVRGLTgsIHRoaXMgaXMgYSBtYXNrIE9SLWVkCisgKiBpbnRvIHRoZSBmaXJzdCBieXRlLCBkZXBl
bmRpbmcgb24gaG93IG1hbnkgYnl0ZXMgZm9sbG93LiAgVGhlcmUgYXJlCisgKiBhcyBtYW55IGVu
dHJpZXMgaW4gdGhpcyB0YWJsZSBhcyB0aGVyZSBhcmUgVVRGLTggc2VxdWVuY2UgdHlwZXMuCisg
KiAoSS5lLiwgb25lIGJ5dGUgc2VxdWVuY2UsIHR3byBieXRlLi4uIGV0Yy4pLiBSZW1lbWJlciB0
aGF0IHNlcXVlbmNzCisgKiBmb3IgKmxlZ2FsKiBVVEYtOCB3aWxsIGJlIDQgb3IgZmV3ZXIgYnl0
ZXMgdG90YWwuCisgKi8KK3N0YXRpYyBjb25zdCBVVEY4IGZpcnN0Qnl0ZU1hcmtbN10gPSB7IDB4
MDAsIDB4MDAsIDB4QzAsIDB4RTAsIDB4RjAsIDB4RjgsIDB4RkMgfTsKKworLyogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tICovCisKKy8qIFRoZSBpbnRlcmZhY2UgY29udmVydHMgYSB3aG9sZSBidWZmZXIgdG8gYXZv
aWQgZnVuY3Rpb24tY2FsbCBvdmVyaGVhZC4KKyAqIENvbnN0YW50cyBoYXZlIGJlZW4gZ2F0aGVy
ZWQuIExvb3BzICYgY29uZGl0aW9uYWxzIGhhdmUgYmVlbiByZW1vdmVkIGFzCisgKiBtdWNoIGFz
IHBvc3NpYmxlIGZvciBlZmZpY2llbmN5LCBpbiBmYXZvciBvZiBkcm9wLXRocm91Z2ggc3dpdGNo
ZXMuCisgKiAoU2VlICJOb3RlIEEiIGF0IHRoZSBib3R0b20gb2YgdGhlIGZpbGUgZm9yIGVxdWl2
YWxlbnQgY29kZS4pCisgKiBJZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIGl0LCB0aGUgImlzTGVn
YWxVVEY4IiBjYWxsIGNhbiBiZSB0dXJuZWQKKyAqIGludG8gYW4gaW5saW5lIGZ1bmN0aW9uLgor
ICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDb252ZXJzaW9uUmVzdWx0IENvbnZlcnRVVEYx
NnRvVVRGOCAoCisJY29uc3QgVVRGMTYqKiBzb3VyY2VTdGFydCwgY29uc3QgVVRGMTYqIHNvdXJj
ZUVuZCwgCisJVVRGOCoqIHRhcmdldFN0YXJ0LCBVVEY4KiB0YXJnZXRFbmQsIENvbnZlcnNpb25G
bGFncyBmbGFncykgeworICAgIENvbnZlcnNpb25SZXN1bHQgcmVzdWx0ID0gY29udmVyc2lvbk9L
OworICAgIGNvbnN0IFVURjE2KiBzb3VyY2UgPSAqc291cmNlU3RhcnQ7CisgICAgVVRGOCogdGFy
Z2V0ID0gKnRhcmdldFN0YXJ0OworICAgIHdoaWxlIChzb3VyY2UgPCBzb3VyY2VFbmQpIHsKKwlV
VEYzMiBjaDsKKwl1bnNpZ25lZCBzaG9ydCBieXRlc1RvV3JpdGUgPSAwOworCWNvbnN0IFVURjMy
IGJ5dGVNYXNrID0gMHhCRjsKKwljb25zdCBVVEYzMiBieXRlTWFyayA9IDB4ODA7IAorCWNvbnN0
IFVURjE2KiBvbGRTb3VyY2UgPSBzb3VyY2U7IC8qIEluIGNhc2Ugd2UgaGF2ZSB0byBiYWNrIHVw
IGJlY2F1c2Ugb2YgdGFyZ2V0IG92ZXJmbG93LiAqLworCWNoID0gKnNvdXJjZSsrOworCS8qIElm
IHdlIGhhdmUgYSBzdXJyb2dhdGUgcGFpciwgY29udmVydCB0byBVVEYzMiBmaXJzdC4gKi8KKwlp
ZiAoY2ggPj0gVU5JX1NVUl9ISUdIX1NUQVJUICYmIGNoIDw9IFVOSV9TVVJfSElHSF9FTkQpIHsK
KwkgICAgLyogSWYgdGhlIDE2IGJpdHMgZm9sbG93aW5nIHRoZSBoaWdoIHN1cnJvZ2F0ZSBhcmUg
aW4gdGhlIHNvdXJjZSBidWZmZXIuLi4gKi8KKwkgICAgaWYgKHNvdXJjZSA8IHNvdXJjZUVuZCkg
eworCQlVVEYzMiBjaDIgPSAqc291cmNlOworCQkvKiBJZiBpdCdzIGEgbG93IHN1cnJvZ2F0ZSwg
Y29udmVydCB0byBVVEYzMi4gKi8KKwkJaWYgKGNoMiA+PSBVTklfU1VSX0xPV19TVEFSVCAmJiBj
aDIgPD0gVU5JX1NVUl9MT1dfRU5EKSB7CisJCSAgICBjaCA9ICgoY2ggLSBVTklfU1VSX0hJR0hf
U1RBUlQpIDw8IGhhbGZTaGlmdCkKKwkJCSsgKGNoMiAtIFVOSV9TVVJfTE9XX1NUQVJUKSArIGhh
bGZCYXNlOworCQkgICAgKytzb3VyY2U7CisJCX0gZWxzZSBpZiAoZmxhZ3MgPT0gc3RyaWN0Q29u
dmVyc2lvbikgeyAvKiBpdCdzIGFuIHVucGFpcmVkIGhpZ2ggc3Vycm9nYXRlICovCisJCSAgICAt
LXNvdXJjZTsgLyogcmV0dXJuIHRvIHRoZSBpbGxlZ2FsIHZhbHVlIGl0c2VsZiAqLworCQkgICAg
cmVzdWx0ID0gc291cmNlSWxsZWdhbDsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0gZWxzZSB7
IC8qIFdlIGRvbid0IGhhdmUgdGhlIDE2IGJpdHMgZm9sbG93aW5nIHRoZSBoaWdoIHN1cnJvZ2F0
ZS4gKi8KKwkJLS1zb3VyY2U7IC8qIHJldHVybiB0byB0aGUgaGlnaCBzdXJyb2dhdGUgKi8KKwkJ
cmVzdWx0ID0gc291cmNlRXhoYXVzdGVkOworCQlicmVhazsKKwkgICAgfQorCX0gZWxzZSBpZiAo
ZmxhZ3MgPT0gc3RyaWN0Q29udmVyc2lvbikgeworCSAgICAvKiBVVEYtMTYgc3Vycm9nYXRlIHZh
bHVlcyBhcmUgaWxsZWdhbCBpbiBVVEYtMzIgKi8KKwkgICAgaWYgKGNoID49IFVOSV9TVVJfTE9X
X1NUQVJUICYmIGNoIDw9IFVOSV9TVVJfTE9XX0VORCkgeworCQktLXNvdXJjZTsgLyogcmV0dXJu
IHRvIHRoZSBpbGxlZ2FsIHZhbHVlIGl0c2VsZiAqLworCQlyZXN1bHQgPSBzb3VyY2VJbGxlZ2Fs
OworCQlicmVhazsKKwkgICAgfQorCX0KKwkvKiBGaWd1cmUgb3V0IGhvdyBtYW55IGJ5dGVzIHRo
ZSByZXN1bHQgd2lsbCByZXF1aXJlICovCisJaWYgKGNoIDwgKFVURjMyKTB4ODApIHsJICAgICBi
eXRlc1RvV3JpdGUgPSAxOworCX0gZWxzZSBpZiAoY2ggPCAoVVRGMzIpMHg4MDApIHsgICAgIGJ5
dGVzVG9Xcml0ZSA9IDI7CisJfSBlbHNlIGlmIChjaCA8IChVVEYzMikweDEwMDAwKSB7ICAgYnl0
ZXNUb1dyaXRlID0gMzsKKwl9IGVsc2UgaWYgKGNoIDwgKFVURjMyKTB4MTEwMDAwKSB7ICBieXRl
c1RvV3JpdGUgPSA0OworCX0gZWxzZSB7CQkJICAgIGJ5dGVzVG9Xcml0ZSA9IDM7CisJCQkJCSAg
ICBjaCA9IFVOSV9SRVBMQUNFTUVOVF9DSEFSOworCX0KKworCXRhcmdldCArPSBieXRlc1RvV3Jp
dGU7CisJaWYgKHRhcmdldCA+IHRhcmdldEVuZCkgeworCSAgICBzb3VyY2UgPSBvbGRTb3VyY2U7
IC8qIEJhY2sgdXAgc291cmNlIHBvaW50ZXIhICovCisJICAgIHRhcmdldCAtPSBieXRlc1RvV3Jp
dGU7IHJlc3VsdCA9IHRhcmdldEV4aGF1c3RlZDsgYnJlYWs7CisJfQorCXN3aXRjaCAoYnl0ZXNU
b1dyaXRlKSB7IC8qIG5vdGU6IGV2ZXJ5dGhpbmcgZmFsbHMgdGhyb3VnaC4gKi8KKwkgICAgY2Fz
ZSA0OiAqLS10YXJnZXQgPSAoVVRGOCkoKGNoIHwgYnl0ZU1hcmspICYgYnl0ZU1hc2spOyBjaCA+
Pj0gNjsKKwkgICAgY2FzZSAzOiAqLS10YXJnZXQgPSAoVVRGOCkoKGNoIHwgYnl0ZU1hcmspICYg
Ynl0ZU1hc2spOyBjaCA+Pj0gNjsKKwkgICAgY2FzZSAyOiAqLS10YXJnZXQgPSAoVVRGOCkoKGNo
IHwgYnl0ZU1hcmspICYgYnl0ZU1hc2spOyBjaCA+Pj0gNjsKKwkgICAgY2FzZSAxOiAqLS10YXJn
ZXQgPSAgKFVURjgpKGNoIHwgZmlyc3RCeXRlTWFya1tieXRlc1RvV3JpdGVdKTsKKwl9CisJdGFy
Z2V0ICs9IGJ5dGVzVG9Xcml0ZTsKKyAgICB9CisgICAgKnNvdXJjZVN0YXJ0ID0gc291cmNlOwor
ICAgICp0YXJnZXRTdGFydCA9IHRhcmdldDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIFV0aWxpdHkgcm91dGluZSB0byB0ZWxsIHdoZXRoZXIg
YSBzZXF1ZW5jZSBvZiBieXRlcyBpcyBsZWdhbCBVVEYtOC4KKyAqIFRoaXMgbXVzdCBiZSBjYWxs
ZWQgd2l0aCB0aGUgbGVuZ3RoIHByZS1kZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBieXRlLgorICog
SWYgbm90IGNhbGxpbmcgdGhpcyBmcm9tIENvbnZlcnRVVEY4dG8qLCB0aGVuIHRoZSBsZW5ndGgg
Y2FuIGJlIHNldCBieToKKyAqICBsZW5ndGggPSB0cmFpbGluZ0J5dGVzRm9yVVRGOFsqc291cmNl
XSsxOworICogYW5kIHRoZSBzZXF1ZW5jZSBpcyBpbGxlZ2FsIHJpZ2h0IGF3YXkgaWYgdGhlcmUg
YXJlbid0IHRoYXQgbWFueSBieXRlcworICogYXZhaWxhYmxlLgorICogSWYgcHJlc2VudGVkIHdp
dGggYSBsZW5ndGggPiA0LCB0aGlzIHJldHVybnMgZmFsc2UuICBUaGUgVW5pY29kZQorICogZGVm
aW5pdGlvbiBvZiBVVEYtOCBnb2VzIHVwIHRvIDQtYnl0ZSBzZXF1ZW5jZXMuCisgKi8KKworc3Rh
dGljIEJvb2xlYW4gaXNMZWdhbFVURjgoY29uc3QgVVRGOCAqc291cmNlLCBpbnQgbGVuZ3RoKSB7
CisgICAgVVRGOCBhOworICAgIGNvbnN0IFVURjggKnNyY3B0ciA9IHNvdXJjZStsZW5ndGg7Cisg
ICAgc3dpdGNoIChsZW5ndGgpIHsKKyAgICBkZWZhdWx0OiByZXR1cm4gZmFsc2U7CisJLyogRXZl
cnl0aGluZyBlbHNlIGZhbGxzIHRocm91Z2ggd2hlbiAidHJ1ZSIuLi4gKi8KKyAgICBjYXNlIDQ6
IGlmICgoYSA9ICgqLS1zcmNwdHIpKSA8IDB4ODAgfHwgYSA+IDB4QkYpIHJldHVybiBmYWxzZTsK
KyAgICBjYXNlIDM6IGlmICgoYSA9ICgqLS1zcmNwdHIpKSA8IDB4ODAgfHwgYSA+IDB4QkYpIHJl
dHVybiBmYWxzZTsKKyAgICBjYXNlIDI6IGlmICgoYSA9ICgqLS1zcmNwdHIpKSA+IDB4QkYpIHJl
dHVybiBmYWxzZTsKKworCXN3aXRjaCAoKnNvdXJjZSkgeworCSAgICAvKiBubyBmYWxsLXRocm91
Z2ggaW4gdGhpcyBpbm5lciBzd2l0Y2ggKi8KKwkgICAgY2FzZSAweEUwOiBpZiAoYSA8IDB4QTAp
IHJldHVybiBmYWxzZTsgYnJlYWs7CisJICAgIGNhc2UgMHhFRDogaWYgKGEgPiAweDlGKSByZXR1
cm4gZmFsc2U7IGJyZWFrOworCSAgICBjYXNlIDB4RjA6IGlmIChhIDwgMHg5MCkgcmV0dXJuIGZh
bHNlOyBicmVhazsKKwkgICAgY2FzZSAweEY0OiBpZiAoYSA+IDB4OEYpIHJldHVybiBmYWxzZTsg
YnJlYWs7CisJICAgIGRlZmF1bHQ6ICAgaWYgKGEgPCAweDgwKSByZXR1cm4gZmFsc2U7CisJfQor
CisgICAgY2FzZSAxOiBpZiAoKnNvdXJjZSA+PSAweDgwICYmICpzb3VyY2UgPCAweEMyKSByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIGlmICgqc291cmNlID4gMHhGNCkgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiB0cnVlOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIEV4cG9y
dGVkIGZ1bmN0aW9uIHRvIHJldHVybiB3aGV0aGVyIGEgVVRGLTggc2VxdWVuY2UgaXMgbGVnYWwg
b3Igbm90LgorICogVGhpcyBpcyBub3QgdXNlZCBoZXJlOyBpdCdzIGp1c3QgZXhwb3J0ZWQuCisg
Ki8KK0Jvb2xlYW4gaXNMZWdhbFVURjhTZXF1ZW5jZShjb25zdCBVVEY4ICpzb3VyY2UsIGNvbnN0
IFVURjggKnNvdXJjZUVuZCkgeworICAgIGludCBsZW5ndGggPSB0cmFpbGluZ0J5dGVzRm9yVVRG
OFsqc291cmNlXSsxOworICAgIGlmIChzb3VyY2UrbGVuZ3RoID4gc291cmNlRW5kKSB7CisJcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gaXNMZWdhbFVURjgoc291cmNlLCBsZW5ndGgp
OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ29udmVyc2lvblJlc3VsdCBDb252ZXJ0VVRG
OHRvVVRGMTYgKAorCWNvbnN0IFVURjgqKiBzb3VyY2VTdGFydCwgY29uc3QgVVRGOCogc291cmNl
RW5kLCAKKwlVVEYxNioqIHRhcmdldFN0YXJ0LCBVVEYxNiogdGFyZ2V0RW5kLCBDb252ZXJzaW9u
RmxhZ3MgZmxhZ3MpIHsKKyAgICBDb252ZXJzaW9uUmVzdWx0IHJlc3VsdCA9IGNvbnZlcnNpb25P
SzsKKyAgICBjb25zdCBVVEY4KiBzb3VyY2UgPSAqc291cmNlU3RhcnQ7CisgICAgVVRGMTYqIHRh
cmdldCA9ICp0YXJnZXRTdGFydDsKKyAgICB3aGlsZSAoc291cmNlIDwgc291cmNlRW5kKSB7CisJ
VVRGMzIgY2ggPSAwOworCXVuc2lnbmVkIHNob3J0IGV4dHJhQnl0ZXNUb1JlYWQgPSB0cmFpbGlu
Z0J5dGVzRm9yVVRGOFsqc291cmNlXTsKKwlpZiAoc291cmNlICsgZXh0cmFCeXRlc1RvUmVhZCA+
PSBzb3VyY2VFbmQpIHsKKwkgICAgcmVzdWx0ID0gc291cmNlRXhoYXVzdGVkOyBicmVhazsKKwl9
CisJLyogRG8gdGhpcyBjaGVjayB3aGV0aGVyIGxlbmllbnQgb3Igc3RyaWN0ICovCisJaWYgKCEg
aXNMZWdhbFVURjgoc291cmNlLCBleHRyYUJ5dGVzVG9SZWFkKzEpKSB7CisJICAgIHJlc3VsdCA9
IHNvdXJjZUlsbGVnYWw7CisJICAgIGJyZWFrOworCX0KKwkvKgorCSAqIFRoZSBjYXNlcyBhbGwg
ZmFsbCB0aHJvdWdoLiBTZWUgIk5vdGUgQSIgYmVsb3cuCisJICovCisJc3dpdGNoIChleHRyYUJ5
dGVzVG9SZWFkKSB7CisJICAgIGNhc2UgNTogY2ggKz0gKnNvdXJjZSsrOyBjaCA8PD0gNjsgLyog
cmVtZW1iZXIsIGlsbGVnYWwgVVRGLTggKi8KKwkgICAgY2FzZSA0OiBjaCArPSAqc291cmNlKys7
IGNoIDw8PSA2OyAvKiByZW1lbWJlciwgaWxsZWdhbCBVVEYtOCAqLworCSAgICBjYXNlIDM6IGNo
ICs9ICpzb3VyY2UrKzsgY2ggPDw9IDY7CisJICAgIGNhc2UgMjogY2ggKz0gKnNvdXJjZSsrOyBj
aCA8PD0gNjsKKwkgICAgY2FzZSAxOiBjaCArPSAqc291cmNlKys7IGNoIDw8PSA2OworCSAgICBj
YXNlIDA6IGNoICs9ICpzb3VyY2UrKzsKKwl9CisJY2ggLT0gb2Zmc2V0c0Zyb21VVEY4W2V4dHJh
Qnl0ZXNUb1JlYWRdOworCisJaWYgKHRhcmdldCA+PSB0YXJnZXRFbmQpIHsKKwkgICAgc291cmNl
IC09IChleHRyYUJ5dGVzVG9SZWFkKzEpOyAvKiBCYWNrIHVwIHNvdXJjZSBwb2ludGVyISAqLwor
CSAgICByZXN1bHQgPSB0YXJnZXRFeGhhdXN0ZWQ7IGJyZWFrOworCX0KKwlpZiAoY2ggPD0gVU5J
X01BWF9CTVApIHsgLyogVGFyZ2V0IGlzIGEgY2hhcmFjdGVyIDw9IDB4RkZGRiAqLworCSAgICAv
KiBVVEYtMTYgc3Vycm9nYXRlIHZhbHVlcyBhcmUgaWxsZWdhbCBpbiBVVEYtMzIgKi8KKwkgICAg
aWYgKGNoID49IFVOSV9TVVJfSElHSF9TVEFSVCAmJiBjaCA8PSBVTklfU1VSX0xPV19FTkQpIHsK
KwkJaWYgKGZsYWdzID09IHN0cmljdENvbnZlcnNpb24pIHsKKwkJICAgIHNvdXJjZSAtPSAoZXh0
cmFCeXRlc1RvUmVhZCsxKTsgLyogcmV0dXJuIHRvIHRoZSBpbGxlZ2FsIHZhbHVlIGl0c2VsZiAq
LworCQkgICAgcmVzdWx0ID0gc291cmNlSWxsZWdhbDsKKwkJICAgIGJyZWFrOworCQl9IGVsc2Ug
eworCQkgICAgKnRhcmdldCsrID0gVU5JX1JFUExBQ0VNRU5UX0NIQVI7CisJCX0KKwkgICAgfSBl
bHNlIHsKKwkJKnRhcmdldCsrID0gKFVURjE2KWNoOyAvKiBub3JtYWwgY2FzZSAqLworCSAgICB9
CisJfSBlbHNlIGlmIChjaCA+IFVOSV9NQVhfVVRGMTYpIHsKKwkgICAgaWYgKGZsYWdzID09IHN0
cmljdENvbnZlcnNpb24pIHsKKwkJcmVzdWx0ID0gc291cmNlSWxsZWdhbDsKKwkJc291cmNlIC09
IChleHRyYUJ5dGVzVG9SZWFkKzEpOyAvKiByZXR1cm4gdG8gdGhlIHN0YXJ0ICovCisJCWJyZWFr
OyAvKiBCYWlsIG91dDsgc2hvdWxkbid0IGNvbnRpbnVlICovCisJICAgIH0gZWxzZSB7CisJCSp0
YXJnZXQrKyA9IFVOSV9SRVBMQUNFTUVOVF9DSEFSOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAg
LyogdGFyZ2V0IGlzIGEgY2hhcmFjdGVyIGluIHJhbmdlIDB4RkZGRiAtIDB4MTBGRkZGLiAqLwor
CSAgICBpZiAodGFyZ2V0ICsgMSA+PSB0YXJnZXRFbmQpIHsKKwkJc291cmNlIC09IChleHRyYUJ5
dGVzVG9SZWFkKzEpOyAvKiBCYWNrIHVwIHNvdXJjZSBwb2ludGVyISAqLworCQlyZXN1bHQgPSB0
YXJnZXRFeGhhdXN0ZWQ7IGJyZWFrOworCSAgICB9CisJICAgIGNoIC09IGhhbGZCYXNlOworCSAg
ICAqdGFyZ2V0KysgPSAoVVRGMTYpKChjaCA+PiBoYWxmU2hpZnQpICsgVU5JX1NVUl9ISUdIX1NU
QVJUKTsKKwkgICAgKnRhcmdldCsrID0gKFVURjE2KSgoY2ggJiBoYWxmTWFzaykgKyBVTklfU1VS
X0xPV19TVEFSVCk7CisJfQorICAgIH0KKyAgICAqc291cmNlU3RhcnQgPSBzb3VyY2U7CisgICAg
KnRhcmdldFN0YXJ0ID0gdGFyZ2V0OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSAqLworCitDb252ZXJzaW9uUmVzdWx0IENvbnZlcnRVVEYzMnRvVVRGOCAoCisJY29u
c3QgVVRGMzIqKiBzb3VyY2VTdGFydCwgY29uc3QgVVRGMzIqIHNvdXJjZUVuZCwgCisJVVRGOCoq
IHRhcmdldFN0YXJ0LCBVVEY4KiB0YXJnZXRFbmQsIENvbnZlcnNpb25GbGFncyBmbGFncykgewor
ICAgIENvbnZlcnNpb25SZXN1bHQgcmVzdWx0ID0gY29udmVyc2lvbk9LOworICAgIGNvbnN0IFVU
RjMyKiBzb3VyY2UgPSAqc291cmNlU3RhcnQ7CisgICAgVVRGOCogdGFyZ2V0ID0gKnRhcmdldFN0
YXJ0OworICAgIHdoaWxlIChzb3VyY2UgPCBzb3VyY2VFbmQpIHsKKwlVVEYzMiBjaDsKKwl1bnNp
Z25lZCBzaG9ydCBieXRlc1RvV3JpdGUgPSAwOworCWNvbnN0IFVURjMyIGJ5dGVNYXNrID0gMHhC
RjsKKwljb25zdCBVVEYzMiBieXRlTWFyayA9IDB4ODA7IAorCWNoID0gKnNvdXJjZSsrOworCWlm
IChmbGFncyA9PSBzdHJpY3RDb252ZXJzaW9uICkgeworCSAgICAvKiBVVEYtMTYgc3Vycm9nYXRl
IHZhbHVlcyBhcmUgaWxsZWdhbCBpbiBVVEYtMzIgKi8KKwkgICAgaWYgKGNoID49IFVOSV9TVVJf
SElHSF9TVEFSVCAmJiBjaCA8PSBVTklfU1VSX0xPV19FTkQpIHsKKwkJLS1zb3VyY2U7IC8qIHJl
dHVybiB0byB0aGUgaWxsZWdhbCB2YWx1ZSBpdHNlbGYgKi8KKwkJcmVzdWx0ID0gc291cmNlSWxs
ZWdhbDsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJLyoKKwkgKiBGaWd1cmUgb3V0IGhvdyBtYW55
IGJ5dGVzIHRoZSByZXN1bHQgd2lsbCByZXF1aXJlLiBUdXJuIGFueQorCSAqIGlsbGVnYWxseSBs
YXJnZSBVVEYzMiB0aGluZ3MgKD4gUGxhbmUgMTcpIGludG8gcmVwbGFjZW1lbnQgY2hhcnMuCisJ
ICovCisJaWYgKGNoIDwgKFVURjMyKTB4ODApIHsJICAgICBieXRlc1RvV3JpdGUgPSAxOworCX0g
ZWxzZSBpZiAoY2ggPCAoVVRGMzIpMHg4MDApIHsgICAgIGJ5dGVzVG9Xcml0ZSA9IDI7CisJfSBl
bHNlIGlmIChjaCA8IChVVEYzMikweDEwMDAwKSB7ICAgYnl0ZXNUb1dyaXRlID0gMzsKKwl9IGVs
c2UgaWYgKGNoIDw9IFVOSV9NQVhfTEVHQUxfVVRGMzIpIHsgIGJ5dGVzVG9Xcml0ZSA9IDQ7CisJ
fSBlbHNlIHsJCQkgICAgYnl0ZXNUb1dyaXRlID0gMzsKKwkJCQkJICAgIGNoID0gVU5JX1JFUExB
Q0VNRU5UX0NIQVI7CisJCQkJCSAgICByZXN1bHQgPSBzb3VyY2VJbGxlZ2FsOworCX0KKwkKKwl0
YXJnZXQgKz0gYnl0ZXNUb1dyaXRlOworCWlmICh0YXJnZXQgPiB0YXJnZXRFbmQpIHsKKwkgICAg
LS1zb3VyY2U7IC8qIEJhY2sgdXAgc291cmNlIHBvaW50ZXIhICovCisJICAgIHRhcmdldCAtPSBi
eXRlc1RvV3JpdGU7IHJlc3VsdCA9IHRhcmdldEV4aGF1c3RlZDsgYnJlYWs7CisJfQorCXN3aXRj
aCAoYnl0ZXNUb1dyaXRlKSB7IC8qIG5vdGU6IGV2ZXJ5dGhpbmcgZmFsbHMgdGhyb3VnaC4gKi8K
KwkgICAgY2FzZSA0OiAqLS10YXJnZXQgPSAoVVRGOCkoKGNoIHwgYnl0ZU1hcmspICYgYnl0ZU1h
c2spOyBjaCA+Pj0gNjsKKwkgICAgY2FzZSAzOiAqLS10YXJnZXQgPSAoVVRGOCkoKGNoIHwgYnl0
ZU1hcmspICYgYnl0ZU1hc2spOyBjaCA+Pj0gNjsKKwkgICAgY2FzZSAyOiAqLS10YXJnZXQgPSAo
VVRGOCkoKGNoIHwgYnl0ZU1hcmspICYgYnl0ZU1hc2spOyBjaCA+Pj0gNjsKKwkgICAgY2FzZSAx
OiAqLS10YXJnZXQgPSAoVVRGOCkgKGNoIHwgZmlyc3RCeXRlTWFya1tieXRlc1RvV3JpdGVdKTsK
Kwl9CisJdGFyZ2V0ICs9IGJ5dGVzVG9Xcml0ZTsKKyAgICB9CisgICAgKnNvdXJjZVN0YXJ0ID0g
c291cmNlOworICAgICp0YXJnZXRTdGFydCA9IHRhcmdldDsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ29udmVyc2lvblJlc3VsdCBDb252ZXJ0VVRGOHRv
VVRGMzIgKAorCWNvbnN0IFVURjgqKiBzb3VyY2VTdGFydCwgY29uc3QgVVRGOCogc291cmNlRW5k
LCAKKwlVVEYzMioqIHRhcmdldFN0YXJ0LCBVVEYzMiogdGFyZ2V0RW5kLCBDb252ZXJzaW9uRmxh
Z3MgZmxhZ3MpIHsKKyAgICBDb252ZXJzaW9uUmVzdWx0IHJlc3VsdCA9IGNvbnZlcnNpb25PSzsK
KyAgICBjb25zdCBVVEY4KiBzb3VyY2UgPSAqc291cmNlU3RhcnQ7CisgICAgVVRGMzIqIHRhcmdl
dCA9ICp0YXJnZXRTdGFydDsKKyAgICB3aGlsZSAoc291cmNlIDwgc291cmNlRW5kKSB7CisJVVRG
MzIgY2ggPSAwOworCXVuc2lnbmVkIHNob3J0IGV4dHJhQnl0ZXNUb1JlYWQgPSB0cmFpbGluZ0J5
dGVzRm9yVVRGOFsqc291cmNlXTsKKwlpZiAoc291cmNlICsgZXh0cmFCeXRlc1RvUmVhZCA+PSBz
b3VyY2VFbmQpIHsKKwkgICAgcmVzdWx0ID0gc291cmNlRXhoYXVzdGVkOyBicmVhazsKKwl9CisJ
LyogRG8gdGhpcyBjaGVjayB3aGV0aGVyIGxlbmllbnQgb3Igc3RyaWN0ICovCisJaWYgKCEgaXNM
ZWdhbFVURjgoc291cmNlLCBleHRyYUJ5dGVzVG9SZWFkKzEpKSB7CisJICAgIHJlc3VsdCA9IHNv
dXJjZUlsbGVnYWw7CisJICAgIGJyZWFrOworCX0KKwkvKgorCSAqIFRoZSBjYXNlcyBhbGwgZmFs
bCB0aHJvdWdoLiBTZWUgIk5vdGUgQSIgYmVsb3cuCisJICovCisJc3dpdGNoIChleHRyYUJ5dGVz
VG9SZWFkKSB7CisJICAgIGNhc2UgNTogY2ggKz0gKnNvdXJjZSsrOyBjaCA8PD0gNjsKKwkgICAg
Y2FzZSA0OiBjaCArPSAqc291cmNlKys7IGNoIDw8PSA2OworCSAgICBjYXNlIDM6IGNoICs9ICpz
b3VyY2UrKzsgY2ggPDw9IDY7CisJICAgIGNhc2UgMjogY2ggKz0gKnNvdXJjZSsrOyBjaCA8PD0g
NjsKKwkgICAgY2FzZSAxOiBjaCArPSAqc291cmNlKys7IGNoIDw8PSA2OworCSAgICBjYXNlIDA6
IGNoICs9ICpzb3VyY2UrKzsKKwl9CisJY2ggLT0gb2Zmc2V0c0Zyb21VVEY4W2V4dHJhQnl0ZXNU
b1JlYWRdOworCisJaWYgKHRhcmdldCA+PSB0YXJnZXRFbmQpIHsKKwkgICAgc291cmNlIC09IChl
eHRyYUJ5dGVzVG9SZWFkKzEpOyAvKiBCYWNrIHVwIHRoZSBzb3VyY2UgcG9pbnRlciEgKi8KKwkg
ICAgcmVzdWx0ID0gdGFyZ2V0RXhoYXVzdGVkOyBicmVhazsKKwl9CisJaWYgKGNoIDw9IFVOSV9N
QVhfTEVHQUxfVVRGMzIpIHsKKwkgICAgLyoKKwkgICAgICogVVRGLTE2IHN1cnJvZ2F0ZSB2YWx1
ZXMgYXJlIGlsbGVnYWwgaW4gVVRGLTMyLCBhbmQgYW55dGhpbmcKKwkgICAgICogb3ZlciBQbGFu
ZSAxNyAoPiAweDEwRkZGRikgaXMgaWxsZWdhbC4KKwkgICAgICovCisJICAgIGlmIChjaCA+PSBV
TklfU1VSX0hJR0hfU1RBUlQgJiYgY2ggPD0gVU5JX1NVUl9MT1dfRU5EKSB7CisJCWlmIChmbGFn
cyA9PSBzdHJpY3RDb252ZXJzaW9uKSB7CisJCSAgICBzb3VyY2UgLT0gKGV4dHJhQnl0ZXNUb1Jl
YWQrMSk7IC8qIHJldHVybiB0byB0aGUgaWxsZWdhbCB2YWx1ZSBpdHNlbGYgKi8KKwkJICAgIHJl
c3VsdCA9IHNvdXJjZUlsbGVnYWw7CisJCSAgICBicmVhazsKKwkJfSBlbHNlIHsKKwkJICAgICp0
YXJnZXQrKyA9IFVOSV9SRVBMQUNFTUVOVF9DSEFSOworCQl9CisJICAgIH0gZWxzZSB7CisJCSp0
YXJnZXQrKyA9IGNoOworCSAgICB9CisJfSBlbHNlIHsgLyogaS5lLiwgY2ggPiBVTklfTUFYX0xF
R0FMX1VURjMyICovCisJICAgIHJlc3VsdCA9IHNvdXJjZUlsbGVnYWw7CisJICAgICp0YXJnZXQr
KyA9IFVOSV9SRVBMQUNFTUVOVF9DSEFSOworCX0KKyAgICB9CisgICAgKnNvdXJjZVN0YXJ0ID0g
c291cmNlOworICAgICp0YXJnZXRTdGFydCA9IHRhcmdldDsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE5vdGUgQS4KKyAgICBUaGUgZmFsbC10aHJvdWdo
IHN3aXRjaGVzIGluIFVURi04IHJlYWRpbmcgY29kZSBzYXZlIGEKKyAgICB0ZW1wIHZhcmlhYmxl
LCBzb21lIGRlY3JlbWVudHMgJiBjb25kaXRpb25hbHMuICBUaGUgc3dpdGNoZXMKKyAgICBhcmUg
ZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIGxvb3A6CisJeworCSAgICBpbnQgdG1wQnl0ZXNU
b1JlYWQgPSBleHRyYUJ5dGVzVG9SZWFkKzE7CisJICAgIGRvIHsKKwkJY2ggKz0gKnNvdXJjZSsr
OworCQktLXRtcEJ5dGVzVG9SZWFkOworCQlpZiAodG1wQnl0ZXNUb1JlYWQpIGNoIDw8PSA2Owor
CSAgICB9IHdoaWxlICh0bXBCeXRlc1RvUmVhZCA+IDApOworCX0KKyAgICBJbiBVVEYtOCB3cml0
aW5nIGNvZGUsIHRoZSBzd2l0Y2hlcyBvbiAiYnl0ZXNUb1dyaXRlIiBhcmUKKyAgICBzaW1pbGFy
bHkgdW5yb2xsZWQgbG9vcHMuCisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpJbmRleDogd3RmL3VuaWNv
ZGUvQ29udmVydFVURi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHd0Zi91bmljb2RlL0NvbnZlcnRVVEYuaAko
cmV2aXNpb24gMCkKKysrIHd0Zi91bmljb2RlL0NvbnZlcnRVVEYuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA0IFVuaWNvZGUsIEluYy4K
KyAqIAorICogRGlzY2xhaW1lcgorICogCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIHByb3ZpZGVk
IGFzIGlzIGJ5IFVuaWNvZGUsIEluYy4gTm8gY2xhaW1zIGFyZQorICogbWFkZSBhcyB0byBmaXRu
ZXNzIGZvciBhbnkgcGFydGljdWxhciBwdXJwb3NlLiBObyB3YXJyYW50aWVzIG9mIGFueQorICog
a2luZCBhcmUgZXhwcmVzc2VkIG9yIGltcGxpZWQuIFRoZSByZWNpcGllbnQgYWdyZWVzIHRvIGRl
dGVybWluZQorICogYXBwbGljYWJpbGl0eSBvZiBpbmZvcm1hdGlvbiBwcm92aWRlZC4gSWYgdGhp
cyBmaWxlIGhhcyBiZWVuCisgKiBwdXJjaGFzZWQgb24gbWFnbmV0aWMgb3Igb3B0aWNhbCBtZWRp
YSBmcm9tIFVuaWNvZGUsIEluYy4sIHRoZQorICogc29sZSByZW1lZHkgZm9yIGFueSBjbGFpbSB3
aWxsIGJlIGV4Y2hhbmdlIG9mIGRlZmVjdGl2ZSBtZWRpYQorICogd2l0aGluIDkwIGRheXMgb2Yg
cmVjZWlwdC4KKyAqIAorICogTGltaXRhdGlvbnMgb24gUmlnaHRzIHRvIFJlZGlzdHJpYnV0ZSBU
aGlzIENvZGUKKyAqIAorICogVW5pY29kZSwgSW5jLiBoZXJlYnkgZ3JhbnRzIHRoZSByaWdodCB0
byBmcmVlbHkgdXNlIHRoZSBpbmZvcm1hdGlvbgorICogc3VwcGxpZWQgaW4gdGhpcyBmaWxlIGlu
IHRoZSBjcmVhdGlvbiBvZiBwcm9kdWN0cyBzdXBwb3J0aW5nIHRoZQorICogVW5pY29kZSBTdGFu
ZGFyZCwgYW5kIHRvIG1ha2UgY29waWVzIG9mIHRoaXMgZmlsZSBpbiBhbnkgZm9ybQorICogZm9y
IGludGVybmFsIG9yIGV4dGVybmFsIGRpc3RyaWJ1dGlvbiBhcyBsb25nIGFzIHRoaXMgbm90aWNl
CisgKiByZW1haW5zIGF0dGFjaGVkLgorICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgQ29u
dmVyc2lvbnMgYmV0d2VlbiBVVEYzMiwgVVRGLTE2LCBhbmQgVVRGLTguICBIZWFkZXIgZmlsZS4K
KworICAgIFNldmVyYWwgZnVudGlvbnMgYXJlIGluY2x1ZGVkIGhlcmUsIGZvcm1pbmcgYSBjb21w
bGV0ZSBzZXQgb2YKKyAgICBjb252ZXJzaW9ucyBiZXR3ZWVuIHRoZSB0aHJlZSBmb3JtYXRzLiAg
VVRGLTcgaXMgbm90IGluY2x1ZGVkCisgICAgaGVyZSwgYnV0IGlzIGhhbmRsZWQgaW4gYSBzZXBh
cmF0ZSBzb3VyY2UgZmlsZS4KKworICAgIEVhY2ggb2YgdGhlc2Ugcm91dGluZXMgdGFrZXMgcG9p
bnRlcnMgdG8gaW5wdXQgYnVmZmVycyBhbmQgb3V0cHV0CisgICAgYnVmZmVycy4gIFRoZSBpbnB1
dCBidWZmZXJzIGFyZSBjb25zdC4KKworICAgIEVhY2ggcm91dGluZSBjb252ZXJ0cyB0aGUgdGV4
dCBiZXR3ZWVuICpzb3VyY2VTdGFydCBhbmQgc291cmNlRW5kLAorICAgIHB1dHRpbmcgdGhlIHJl
c3VsdCBpbnRvIHRoZSBidWZmZXIgYmV0d2VlbiAqdGFyZ2V0U3RhcnQgYW5kCisgICAgdGFyZ2V0
RW5kLiBOb3RlOiB0aGUgZW5kIHBvaW50ZXJzIGFyZSAqYWZ0ZXIqIHRoZSBsYXN0IGl0ZW06IGUu
Zy4gCisgICAgKihzb3VyY2VFbmQgLSAxKSBpcyB0aGUgbGFzdCBpdGVtLgorCisgICAgVGhlIHJl
dHVybiByZXN1bHQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbnZlcnNpb24gd2FzIHN1Y2Nlc3Nm
dWwsCisgICAgYW5kIGlmIG5vdCwgd2hldGhlciB0aGUgcHJvYmxlbSB3YXMgaW4gdGhlIHNvdXJj
ZSBvciB0YXJnZXQgYnVmZmVycy4KKyAgICAoT25seSB0aGUgZmlyc3QgZW5jb3VudGVyZWQgcHJv
YmxlbSBpcyBpbmRpY2F0ZWQuKQorCisgICAgQWZ0ZXIgdGhlIGNvbnZlcnNpb24sICpzb3VyY2VT
dGFydCBhbmQgKnRhcmdldFN0YXJ0IGFyZSBib3RoCisgICAgdXBkYXRlZCB0byBwb2ludCB0byB0
aGUgZW5kIG9mIGxhc3QgdGV4dCBzdWNjZXNzZnVsbHkgY29udmVydGVkIGluCisgICAgdGhlIHJl
c3BlY3RpdmUgYnVmZmVycy4KKworICAgIElucHV0IHBhcmFtZXRlcnM6CisJc291cmNlU3RhcnQg
LSBwb2ludGVyIHRvIGEgcG9pbnRlciB0byB0aGUgc291cmNlIGJ1ZmZlci4KKwkJVGhlIGNvbnRl
bnRzIG9mIHRoaXMgYXJlIG1vZGlmaWVkIG9uIHJldHVybiBzbyB0aGF0CisJCWl0IHBvaW50cyBh
dCB0aGUgbmV4dCB0aGluZyB0byBiZSBjb252ZXJ0ZWQuCisJdGFyZ2V0U3RhcnQgLSBzaW1pbGFy
bHksIHBvaW50ZXIgdG8gcG9pbnRlciB0byB0aGUgdGFyZ2V0IGJ1ZmZlci4KKwlzb3VyY2VFbmQs
IHRhcmdldEVuZCAtIHJlc3BlY3RpdmVseSBwb2ludGVycyB0byB0aGUgZW5kcyBvZiB0aGUKKwkJ
dHdvIGJ1ZmZlcnMsIGZvciBvdmVyZmxvdyBjaGVja2luZyBvbmx5LgorCisgICAgVGhlc2UgY29u
dmVyc2lvbiBmdW5jdGlvbnMgdGFrZSBhIENvbnZlcnNpb25GbGFncyBhcmd1bWVudC4gV2hlbiB0
aGlzCisgICAgZmxhZyBpcyBzZXQgdG8gc3RyaWN0LCBib3RoIGlycmVndWxhciBzZXF1ZW5jZXMg
YW5kIGlzb2xhdGVkIHN1cnJvZ2F0ZXMKKyAgICB3aWxsIGNhdXNlIGFuIGVycm9yLiAgV2hlbiB0
aGUgZmxhZyBpcyBzZXQgdG8gbGVuaWVudCwgYm90aCBpcnJlZ3VsYXIKKyAgICBzZXF1ZW5jZXMg
YW5kIGlzb2xhdGVkIHN1cnJvZ2F0ZXMgYXJlIGNvbnZlcnRlZC4KKworICAgIFdoZXRoZXIgdGhl
IGZsYWcgaXMgc3RyaWN0IG9yIGxlbmllbnQsIGFsbCBpbGxlZ2FsIHNlcXVlbmNlcyB3aWxsIGNh
dXNlCisgICAgYW4gZXJyb3IgcmV0dXJuLiBUaGlzIGluY2x1ZGVzIHNlcXVlbmNlcyBzdWNoIGFz
OiA8RjQgOTAgODAgODA+LCA8QzAgODA+LAorICAgIG9yIDxBMD4gaW4gVVRGLTgsIGFuZCB2YWx1
ZXMgYWJvdmUgMHgxMEZGRkYgaW4gVVRGLTMyLiBDb25mb3JtYW50IGNvZGUKKyAgICBtdXN0IGNo
ZWNrIGZvciBpbGxlZ2FsIHNlcXVlbmNlcy4KKworICAgIFdoZW4gdGhlIGZsYWcgaXMgc2V0IHRv
IGxlbmllbnQsIGNoYXJhY3RlcnMgb3ZlciAweDEwRkZGRiBhcmUgY29udmVydGVkCisgICAgdG8g
dGhlIHJlcGxhY2VtZW50IGNoYXJhY3Rlcjsgb3RoZXJ3aXNlICh3aGVuIHRoZSBmbGFnIGlzIHNl
dCB0byBzdHJpY3QpCisgICAgdGhleSBjb25zdGl0dXRlIGFuIGVycm9yLgorCisgICAgT3V0cHV0
IHBhcmFtZXRlcnM6CisJVGhlIHZhbHVlICJzb3VyY2VJbGxlZ2FsIiBpcyByZXR1cm5lZCBmcm9t
IHNvbWUgcm91dGluZXMgaWYgdGhlIGlucHV0CisJc2VxdWVuY2UgaXMgbWFsZm9ybWVkLiAgV2hl
biAic291cmNlSWxsZWdhbCIgaXMgcmV0dXJuZWQsIHRoZSBzb3VyY2UKKwl2YWx1ZSB3aWxsIHBv
aW50IHRvIHRoZSBpbGxlZ2FsIHZhbHVlIHRoYXQgY2F1c2VkIHRoZSBwcm9ibGVtLiBFLmcuLAor
CWluIFVURi04IHdoZW4gYSBzZXF1ZW5jZSBpcyBtYWxmb3JtZWQsIGl0IHBvaW50cyB0byB0aGUg
c3RhcnQgb2YgdGhlCisJbWFsZm9ybWVkIHNlcXVlbmNlLiAgCisKKyAgICBBdXRob3I6IE1hcmsg
RS4gRGF2aXMsIDE5OTQuCisgICAgUmV2IEhpc3Rvcnk6IFJpY2sgTWNHb3dhbiwgZml4ZXMgJiB1
cGRhdGVzIE1heSAyMDAxLgorCQkgRml4ZXMgJiB1cGRhdGVzLCBTZXB0IDIwMDEuCisKKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBUaGUgZm9sbG93aW5nIDQgZGVm
aW5pdGlvbnMgYXJlIGNvbXBpbGVyLXNwZWNpZmljLgorICAgIFRoZSBDIHN0YW5kYXJkIGRvZXMg
bm90IGd1YXJhbnRlZSB0aGF0IHdjaGFyX3QgaGFzIGF0IGxlYXN0CisgICAgMTYgYml0cywgc28g
d2NoYXJfdCBpcyBubyBsZXNzIHBvcnRhYmxlIHRoYW4gdW5zaWduZWQgc2hvcnQhCisgICAgQWxs
IHNob3VsZCBiZSB1bnNpZ25lZCB2YWx1ZXMgdG8gYXZvaWQgc2lnbiBleHRlbnNpb24gZHVyaW5n
CisgICAgYml0IG1hc2sgJiBzaGlmdCBvcGVyYXRpb25zLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisK
K3R5cGVkZWYgdW5zaWduZWQgbG9uZwlVVEYzMjsJLyogYXQgbGVhc3QgMzIgYml0cyAqLwordHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydAlVVEYxNjsJLyogYXQgbGVhc3QgMTYgYml0cyAqLwordHlwZWRl
ZiB1bnNpZ25lZCBjaGFyCVVURjg7CS8qIHR5cGljYWxseSA4IGJpdHMgKi8KK3R5cGVkZWYgdW5z
aWduZWQgY2hhcglCb29sZWFuOyAvKiAwIG9yIDEgKi8KKworLyogU29tZSBmdW5kYW1lbnRhbCBj
b25zdGFudHMgKi8KKyNkZWZpbmUgVU5JX1JFUExBQ0VNRU5UX0NIQVIgKFVURjMyKTB4MDAwMEZG
RkQKKyNkZWZpbmUgVU5JX01BWF9CTVAgKFVURjMyKTB4MDAwMEZGRkYKKyNkZWZpbmUgVU5JX01B
WF9VVEYxNiAoVVRGMzIpMHgwMDEwRkZGRgorI2RlZmluZSBVTklfTUFYX1VURjMyIChVVEYzMikw
eDdGRkZGRkZGCisjZGVmaW5lIFVOSV9NQVhfTEVHQUxfVVRGMzIgKFVURjMyKTB4MDAxMEZGRkYK
KwordHlwZWRlZiBlbnVtIHsKKwljb252ZXJzaW9uT0ssIAkJLyogY29udmVyc2lvbiBzdWNjZXNz
ZnVsICovCisJc291cmNlRXhoYXVzdGVkLAkvKiBwYXJ0aWFsIGNoYXJhY3RlciBpbiBzb3VyY2Us
IGJ1dCBoaXQgZW5kICovCisJdGFyZ2V0RXhoYXVzdGVkLAkvKiBpbnN1ZmYuIHJvb20gaW4gdGFy
Z2V0IGZvciBjb252ZXJzaW9uICovCisJc291cmNlSWxsZWdhbAkJLyogc291cmNlIHNlcXVlbmNl
IGlzIGlsbGVnYWwvbWFsZm9ybWVkICovCit9IENvbnZlcnNpb25SZXN1bHQ7CisKK3R5cGVkZWYg
ZW51bSB7CisJc3RyaWN0Q29udmVyc2lvbiA9IDAsCisJbGVuaWVudENvbnZlcnNpb24KK30gQ29u
dmVyc2lvbkZsYWdzOworCisvKiBUaGlzIGlzIGZvciBDKysgYW5kIGRvZXMgbm8gaGFybSBpbiBD
ICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK0NvbnZlcnNp
b25SZXN1bHQgQ29udmVydFVURjh0b1VURjE2ICgKKwkJY29uc3QgVVRGOCoqIHNvdXJjZVN0YXJ0
LCBjb25zdCBVVEY4KiBzb3VyY2VFbmQsIAorCQlVVEYxNioqIHRhcmdldFN0YXJ0LCBVVEYxNiog
dGFyZ2V0RW5kLCBDb252ZXJzaW9uRmxhZ3MgZmxhZ3MpOworCitDb252ZXJzaW9uUmVzdWx0IENv
bnZlcnRVVEYxNnRvVVRGOCAoCisJCWNvbnN0IFVURjE2Kiogc291cmNlU3RhcnQsIGNvbnN0IFVU
RjE2KiBzb3VyY2VFbmQsIAorCQlVVEY4KiogdGFyZ2V0U3RhcnQsIFVURjgqIHRhcmdldEVuZCwg
Q29udmVyc2lvbkZsYWdzIGZsYWdzKTsKKwkJCitDb252ZXJzaW9uUmVzdWx0IENvbnZlcnRVVEY4
dG9VVEYzMiAoCisJCWNvbnN0IFVURjgqKiBzb3VyY2VTdGFydCwgY29uc3QgVVRGOCogc291cmNl
RW5kLCAKKwkJVVRGMzIqKiB0YXJnZXRTdGFydCwgVVRGMzIqIHRhcmdldEVuZCwgQ29udmVyc2lv
bkZsYWdzIGZsYWdzKTsKKworQ29udmVyc2lvblJlc3VsdCBDb252ZXJ0VVRGMzJ0b1VURjggKAor
CQljb25zdCBVVEYzMioqIHNvdXJjZVN0YXJ0LCBjb25zdCBVVEYzMiogc291cmNlRW5kLCAKKwkJ
VVRGOCoqIHRhcmdldFN0YXJ0LCBVVEY4KiB0YXJnZXRFbmQsIENvbnZlcnNpb25GbGFncyBmbGFn
cyk7CisJCQorQ29udmVyc2lvblJlc3VsdCBDb252ZXJ0VVRGMTZ0b1VURjMyICgKKwkJY29uc3Qg
VVRGMTYqKiBzb3VyY2VTdGFydCwgY29uc3QgVVRGMTYqIHNvdXJjZUVuZCwgCisJCVVURjMyKiog
dGFyZ2V0U3RhcnQsIFVURjMyKiB0YXJnZXRFbmQsIENvbnZlcnNpb25GbGFncyBmbGFncyk7CisK
K0NvbnZlcnNpb25SZXN1bHQgQ29udmVydFVURjMydG9VVEYxNiAoCisJCWNvbnN0IFVURjMyKiog
c291cmNlU3RhcnQsIGNvbnN0IFVURjMyKiBzb3VyY2VFbmQsIAorCQlVVEYxNioqIHRhcmdldFN0
YXJ0LCBVVEYxNiogdGFyZ2V0RW5kLCBDb252ZXJzaW9uRmxhZ3MgZmxhZ3MpOworCitCb29sZWFu
IGlzTGVnYWxVVEY4U2VxdWVuY2UoY29uc3QgVVRGOCAqc291cmNlLCBjb25zdCBVVEY4ICpzb3Vy
Y2VFbmQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisvKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gKi8K
</data>
<flag name="review"
          id="7303"
          type_id="1"
          status="-"
          setter="staikos"
    />
          </attachment>
      

    </bug>

</bugzilla>