<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.kde.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.6"
          urlbase="https://bugs.kde.org/"
          
          maintainer="sysadmin@kde.org"
>

    <bug>
          <bug_id>299714</bug_id>
          
          <creation_ts>2012-05-10 00:59:48 +0000</creation_ts>
          <short_desc>KSharedDataCache/KIcon triggers a bus error</short_desc>
          <delta_ts>2014-12-30 00:38:34 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>10</classification_id>
          <classification>Unmaintained</classification>
          <product>kdelibs</product>
          <component>kshareddatacache</component>
          <version>unspecified</version>
          <rep_platform>Compiled Sources</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          <see_also>https://bugs.kde.org/show_bug.cgi?id=309824</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>NOR</priority>
          <bug_severity>major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Aleix Pol">aleixpol</reporter>
          <assigned_to name="kdelibs bugs">kdelibs-bugs-null</assigned_to>
          <cc>aleixpol</cc>
    
    <cc>mpyne</cc>
          
          <cf_commitlink></cf_commitlink>
          <cf_versionfixedin></cf_versionfixedin>
          <cf_sentryurl></cf_sentryurl>
          <votes>0</votes>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1253614</commentid>
    <comment_count>0</comment_count>
    <who name="Aleix Pol">aleixpol</who>
    <bug_when>2012-05-10 00:59:48 +0000</bug_when>
    <thetext>In one of the unit tests in KDevelop I a &quot;Bus Error&quot; (SIGBUS). If I run it on valgrind, I get the following backtrace. Looks like a bug in KSharedDataCache...

==1917== Warning: set address range perms: large range [0x39446000, 0x86877000) (defined)
==1917== 
==1917== Process terminating with default action of signal 7 (SIGBUS)
==1917==  Non-existent physical address at address 0x39446048
==1917==    at 0x9D7594B: KSharedDataCache::Private::lock() const (kshareddatacache.cpp:1131)
==1917==    by 0x9D75B0F: KSharedDataCache::Private::CacheLocker::cautiousLock() (kshareddatacache.cpp:1154)
==1917==    by 0x9D75E8B: KSharedDataCache::Private::CacheLocker::CacheLocker(KSharedDataCache::Private const*) (kshareddatacache.cpp:1229)
==1917==    by 0x9D72BA8: KSharedDataCache::find(QString const&amp;, QByteArray*) const (kshareddatacache.cpp:1508)
==1917==    by 0x86A6534: KIconLoaderPrivate::findCachedPixmapWithPath(QString const&amp;, QPixmap&amp;, QString&amp;) (kiconloader.cpp:860)
==1917==    by 0x86A7CF2: KIconLoader::loadIcon(QString const&amp;, KIconLoader::Group, int, int, QStringList const&amp;, QString*, bool) const (kiconloader.cpp:1222)
==1917==    by 0x86A270C: KIconEngine::pixmap(QSize const&amp;, QIcon::Mode, QIcon::State) (kiconengine.cpp:104)
==1917==    by 0x8E6BEC4: QIcon::pixmap(QSize const&amp;, QIcon::Mode, QIcon::State) const (in /usr/lib/libQtGui.so.4.8.1)
==1917==    by 0x60AE372: Sublime::AreaTabButton::AreaTabButton(QString, QIcon, unsigned int, QWidget*, bool, QWidget*) (mainwindow_p.cpp:831)
==1917==    by 0x60A7044: Sublime::AreaTabBar::addCustomTab(QString, QIcon, bool, QString, QWidget*) (mainwindow_p.h:97)
==1917==    by 0x60A429F: Sublime::MainWindow::setupAreaSelector() (mainwindow.cpp:104)
==1917==    by 0x63498A8: KDevelop::MainWindow::loadSettings() (mainwindow.cpp:208)

Reproducible: Always

Steps to Reproduce:
1. compile kdevelop
2. run &lt;builddir&gt;/languages/cpp/tests/buddiestest
3. boom</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253883</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Pyne">mpyne</who>
    <bug_when>2012-05-11 00:23:05 +0000</bug_when>
    <thetext>The testsuite passes here without issue. :-/

KSharedDataCache does probably need better error-checking though, no excuse for a corrupted cache to induce SIGBUS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253888</commentid>
    <comment_count>2</comment_count>
    <who name="Aleix Pol">aleixpol</who>
    <bug_when>2012-05-11 00:40:15 +0000</bug_when>
    <thetext>Yes, I&apos;ve discussed with Milian (also from kdevelop) and he can&apos;t reproduce it either.

Do you have any idea of how can I figure out what&apos;s going on?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253891</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Pyne">mpyne</who>
    <bug_when>2012-05-11 00:47:41 +0000</bug_when>
    <thetext>Specifically what&apos;s going on, probably not. It&apos;s undoubtedly a corrupted cache file somehow so a quick fix would be to delete the icon cache (normally /var/tmp/kdecache-$USER/icon-cache.kcache).

There&apos;s a debug area for KSharedDataCache and KIconLoader which you can enable as well, might tell you which icon ended up corrupted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253893</commentid>
    <comment_count>4</comment_count>
    <who name="Aleix Pol">aleixpol</who>
    <bug_when>2012-05-11 01:05:03 +0000</bug_when>
    <thetext>I don&apos;t have this directory for this user (the kde-devel user), the other one does, though. Could that be a problem?

I added those debug areas and they&apos;re not adding any output :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253894</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Pyne">mpyne</who>
    <bug_when>2012-05-11 01:13:23 +0000</bug_when>
    <thetext>Well, it&apos;s possible that the missing directory is the issue, but then KSharedDataCache should fail much earlier in the process... the exact setting for the directory is returned by &quot;kde4-config --path cache&quot;, which should return /something/ even for your kde-devel user, I would hope!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253902</commentid>
    <comment_count>6</comment_count>
    <who name="Aleix Pol">aleixpol</who>
    <bug_when>2012-05-11 01:58:54 +0000</bug_when>
    <thetext>kde-devel@thinktatil:~/build-kdevelop/languages/cpp$ kde4-config --path cache
/home/kde-devel/.kde4/cache-thinktatil/

So I removed the icon cache, I keep having this problem, the SIGBUS... :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1256038</commentid>
    <comment_count>7</comment_count>
      <attachid>71175</attachid>
    <who name="Michael Pyne">mpyne</who>
    <bug_when>2012-05-18 04:11:16 +0000</bug_when>
    <thetext>Created attachment 71175
More error-handling for KSharedDataCache

Aleix, if you&apos;re still experiencing the crash then please test this patch. It adds more error checking against invalid data page access, valid cache page sizes, etc. I&apos;ve tried replacing some caches with random data here without leading to crashes so hopefully it makes it a bit more resilient for you at least.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1488213</commentid>
    <comment_count>8</comment_count>
    <who name="Aleix Pol">aleixpol</who>
    <bug_when>2014-12-30 00:38:34 +0000</bug_when>
    <thetext>Haven&apos;t had it for a while, and not really using that codebase anymore. Closing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71175</attachid>
            <date>2012-05-18 04:11:16 +0000</date>
            <delta_ts>2012-05-18 04:11:16 +0000</delta_ts>
            <desc>More error-handling for KSharedDataCache</desc>
            <filename>kshareddatacache-less-crashy.patch</filename>
            <type>text/plain</type>
            <size>37334</size>
            <attacher name="Michael Pyne">mpyne</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2tkZWNvcmUvQ01ha2VMaXN0cy50eHQgYi9rZGVjb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDU1ZmU0YzAuLjlkNzYyMDYgMTAwNjQ0Ci0tLSBhL2tkZWNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIva2RlY29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMzk0LDYgKzM5NCw4IEBAIGVu
ZGlmIChOT1QgUV9XU19YMTEgQU5EIE5PVCBRX1dTX1FXUykKIAoga2RlNF9hZGRfbGlicmFyeShr
ZGVjb3JlICR7TElCUkFSWV9UWVBFfSAke2tkZWNvcmVfTElCX1NSQ1N9KQogCitzZXRfc291cmNl
X2ZpbGVzX3Byb3BlcnRpZXModXRpbC9rc2hhcmVkZGF0YWNhY2hlLmNwcAorICAgIFBST1BFUlRJ
RVMgQ09NUElMRV9GTEFHUyAke0tERTRfRU5BQkxFX0VYQ0VQVElPTlN9KQogdGFyZ2V0X2xpbmtf
bGlicmFyaWVzKGtkZWNvcmUgJHtRVF9RVENPUkVfTElCUkFSWX0gJHtRVF9RVE5FVFdPUktfTElC
UkFSWX0gJHtRVF9RVERCVVNfTElCUkFSWX0gJHtRVF9RVFhNTF9MSUJSQVJZfSAke1pMSUJfTElC
UkFSWX0gJHtrZGVjb3JlX09QVElPTkFMX0xJQlN9KQogCiBpZihXSU5DRSkKZGlmZiAtLWdpdCBh
L2tkZWNvcmUvdXRpbC9rc2hhcmVkZGF0YWNhY2hlLmNwcCBiL2tkZWNvcmUvdXRpbC9rc2hhcmVk
ZGF0YWNhY2hlLmNwcAppbmRleCAxMjVhZmNiLi4zYzhkMjgyIDEwMDY0NAotLS0gYS9rZGVjb3Jl
L3V0aWwva3NoYXJlZGRhdGFjYWNoZS5jcHAKKysrIGIva2RlY29yZS91dGlsL2tzaGFyZWRkYXRh
Y2FjaGUuY3BwCkBAIC00NCw3ICs0NCw3IEBACiAKIC8vLyBUaGUgbWF4aW11bSBudW1iZXIgb2Yg
cHJvYmVzIHRvIG1ha2Ugd2hpbGUgc2VhcmNoaW5nIGZvciBhIGJ1Y2tldCBpbgogLy8vIHRoZSBw
cmVzZW5jZSBvZiBjb2xsaXNpb25zIGluIHRoZSBjYWNoZSBpbmRleCB0YWJsZS4KLXN0YXRpYyBj
b25zdCBpbnQgTUFYX1BST0JFX0NPVU5UID0gNjsKK3N0YXRpYyBjb25zdCB1aW50IE1BWF9QUk9C
RV9DT1VOVCA9IDY7CiAKIGludCBrc2RjQXJlYSgpCiB7CkBAIC01Miw2ICs1MiwyMyBAQCBpbnQg
a3NkY0FyZWEoKQogICAgIHJldHVybiBzX2tzZGNBcmVhOwogfQogCisvKioKKyAqIEEgdmVyeSBz
aW1wbGUgY2xhc3Mgd2hvc2Ugb25seSBwdXJwb3NlIGlzIHRvIGJlIHRocm93biBhcyBhbiBleGNl
cHRpb24gZnJvbQorICogdW5kZXJseWluZyBjb2RlIHRvIGluZGljYXRlIHRoYXQgdGhlIHNoYXJl
ZCBjYWNoZSBpcyBhcHBhcmVudGx5IGNvcnJ1cHQuCisgKiBUaGlzIG11c3QgYmUgY2F1Z2h0IGJ5
IHRvcC1sZXZlbCBsaWJyYXJ5IGNvZGUgYW5kIHVzZWQgdG8gdW5saW5rIHRoZSBjYWNoZQorICog
aW4gdGhpcyBjaXJjdW1zdGFuY2UuCisgKgorICogQGludGVybmFsCisgKi8KK2NsYXNzIEtTREND
b3JydXB0ZWQKK3sKKyAgICBwdWJsaWM6CisgICAgS1NEQ0NvcnJ1cHRlZCgpCisgICAgeworICAg
ICAgICBrRXJyb3Ioa3NkY0FyZWEoKSkgPDwgIkVycm9yIGRldGVjdGVkIGluIGNhY2hlLCByZS1n
ZW5lcmF0aW5nIjsKKyAgICB9OworfTsKKwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gTXVy
bXVySGFzaEFsaWduZWQsIGJ5IEF1c3RpbiBBcHBsZWJ5CiAvLyAoUmVsZWFzZWQgdG8gdGhlIHB1
YmxpYyBkb21haW4sIG9yIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSB3aGVyZQpAQCAt
MjQ1LDYgKzI2MiwyMSBAQCBUIGludENlaWwoVCBhLCBUIGIpCiAgICAgcmV0dXJuIChhICsgYiAt
IDEpIC8gYjsKIH0KIAorLyoqCisgKiBAcmV0dXJuIG51bWJlciBvZiBzZXQgYml0cyBpbiBAcCB2
YWx1ZSAoc2VlIGFsc28gIkhhbW1pbmcgd2VpZ2h0IikKKyAqLworc3RhdGljIHVuc2lnbmVkIGNv
dW50U2V0Qml0cyh1bnNpZ25lZCB2YWx1ZSkKK3sKKyAgICAvLyBLJlIgLyBXZWduZXIncyBhbGdv
cml0aG0gdXNlZC4gR0NDIHN1cHBvcnRzIF9fYnVpbHRpbl9wb3Bjb3VudCBidXQgd2UKKyAgICAv
LyBleHBlY3QgdGhlcmUgdG8gYWx3YXlzIGJlIG9ubHkgMSBiaXQgc2V0IHNvIHRoaXMgc2hvdWxk
IGJlIHBlcmhhcHMgYSBiaXQKKyAgICAvLyBmYXN0ZXIgOTkuOSUgb2YgdGhlIHRpbWUuCisgICAg
dW5zaWduZWQgY291bnQgPSAwOworICAgIGZvciAoY291bnQgPSAwOyB2YWx1ZSAhPSAwOyBjb3Vu
dCsrKSB7CisgICAgICAgIHZhbHVlICY9ICh2YWx1ZSAtIDEpOyAvLyBDbGVhcnMgbGVhc3Qtc2ln
bmlmaWNhbnQgc2V0IGJpdC4KKyAgICB9CisgICAgcmV0dXJuIGNvdW50OworfQorCiB0eXBlZGVm
IHFpbnQzMiBwYWdlSUQ7CiAKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTM2MSw2ICszOTMsNyBA
QCBzdHJ1Y3QgU2hhcmVkTWVtb3J5CiAgICAgICAgIH0KIAogICAgICAgICAvLyBCb3VuZCBwYWdl
IHNpemUgYmV0d2VlbiA1MTIgYnl0ZXMgYW5kIDI1NiBLaUIuCisgICAgICAgIC8vIElmIHRoaXMg
aXMgYWRqdXN0ZWQsIGFsc28gYWx0ZXIgdmFsaWRTaXplTWFzayBpbiBjYWNoZVBhZ2VTaXplCiAg
ICAgICAgIGxvZzJPZlNpemUgPSBxQm91bmQoOSwgbG9nMk9mU2l6ZSwgMTgpOwogCiAgICAgICAg
IHJldHVybiAoMSA8PCBsb2cyT2ZTaXplKTsKQEAgLTM2OSw3ICs0MDIsMTYgQEAgc3RydWN0IFNo
YXJlZE1lbW9yeQogICAgIC8vIFJldHVybnMgcGFnZVNpemUgaW4gdW5zaWduZWQgZm9ybWF0Lgog
ICAgIHVuc2lnbmVkIGNhY2hlUGFnZVNpemUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihwYWdlU2l6ZSk7CisgICAgICAgIHVuc2lnbmVkIF9wYWdl
U2l6ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihwYWdlU2l6ZSk7CisgICAgICAgIC8vIGJpdHMg
OS0xOCBtYXkgYmUgc2V0LgorICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsaWRTaXpl
TWFzayA9IDB4MkYyMDB1OworCisgICAgICAgIC8vIENoZWNrIGZvciBwYWdlIHNpemVzIHRoYXQg
YXJlIG5vdCBhIHBvd2VyLW9mLTIsIG9yIGFyZSB0b28gbG93L2hpZ2guCisgICAgICAgIGlmIChL
REVfSVNVTkxJS0VMWShjb3VudFNldEJpdHMoX3BhZ2VTaXplKSAhPSAxIHx8IChfcGFnZVNpemUg
JiB+dmFsaWRTaXplTWFzaykpKSB7CisgICAgICAgICAgICB0aHJvdyBLU0RDQ29ycnVwdGVkKCk7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gX3BhZ2VTaXplOwogICAgIH0KIAogICAgIC8q
KgpAQCAtMzk4LDcgKzQ0MCw3IEBAIHN0cnVjdCBTaGFyZWRNZW1vcnkKICAgICAgICAgfQogCiAg
ICAgICAgIHNobUxvY2sudHlwZSA9IGZpbmRCZXN0U2hhcmVkTG9jaygpOwotICAgICAgICBpZiAo
c3RhdGljX2Nhc3Q8aW50PihzaG1Mb2NrLnR5cGUpID09IDApIHsKKyAgICAgICAgaWYgKHNobUxv
Y2sudHlwZSA9PSBMT0NLVFlQRV9JTlZBTElEKSB7CiAgICAgICAgICAgICBrRXJyb3Ioa3NkY0Fy
ZWEoKSkgPDwgIlVuYWJsZSB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIGxvY2sgdG8gZ3VhcmQgdGhl
IHNoYXJlZCBjYWNoZS4gIgogICAgICAgICAgICAgICAgICAgICAgICAgPDwgIlRoaXMgKnNob3Vs
ZCogYmUgZXNzZW50aWFsbHkgaW1wb3NzaWJsZS4gOigiOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNDgzLDcgKzUyNSw3IEBAIHN0cnVjdCBTaGFyZWRNZW1vcnkKIAogICAgIGNvbnN0
IHZvaWQgKnBhZ2UocGFnZUlEIGF0KSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKHN0YXRpY19j
YXN0PGludD4oYXQpID49IHN0YXRpY19jYXN0PGludD4ocGFnZVRhYmxlU2l6ZSgpKSkgeworICAg
ICAgICBpZiAoc3RhdGljX2Nhc3Q8dWludD4oYXQpID49IHBhZ2VUYWJsZVNpemUoKSkgewogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KIApAQCAtNTQwLDYgKzU4MiwxMCBAQCBzdHJ1
Y3QgU2hhcmVkTWVtb3J5CiAgICAgICovCiAgICAgcGFnZUlEIGZpbmRFbXB0eVBhZ2VzKHVpbnQg
cGFnZXNOZWVkZWQpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoS0RFX0lTVU5MSUtFTFkocGFn
ZXNOZWVkZWQgPiBwYWdlVGFibGVTaXplKCkpKSB7CisgICAgICAgICAgICByZXR1cm4gcGFnZVRh
YmxlU2l6ZSgpOworICAgICAgICB9CisKICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIHRoZSBwYWdl
IHRhYmxlLCBmaW5kIHRoZSBmaXJzdCBlbXB0eSBwYWdlLCBhbmQganVzdAogICAgICAgICAvLyBt
YWtlcyBzdXJlIHRoYXQgdGhlcmUgYXJlIGVub3VnaCBmcmVlIHBhZ2VzLgogICAgICAgICBjb25z
dCBQYWdlVGFibGVFbnRyeSAqdGFibGUgPSBwYWdlVGFibGUoKTsKQEAgLTYyNyw2ICs2NzMsMTAg
QEAgc3RydWN0IFNoYXJlZE1lbW9yeQogICAgICAgICBwYWdlSUQgaWRMaW1pdCA9IHN0YXRpY19j
YXN0PHBhZ2VJRD4ocGFnZVRhYmxlU2l6ZSgpKTsKICAgICAgICAgUGFnZVRhYmxlRW50cnkgKnBh
Z2VzID0gcGFnZVRhYmxlKCk7CiAKKyAgICAgICAgaWYgKEtERV9JU1VOTElLRUxZKCFwYWdlcyB8
fCBpZExpbWl0IDw9IDApKSB7CisgICAgICAgICAgICB0aHJvdyBLU0RDQ29ycnVwdGVkKCk7Cisg
ICAgICAgIH0KKwogICAgICAgICAvLyBTa2lwIHVzZWQgcGFnZXMKICAgICAgICAgd2hpbGUgKGN1
cnJlbnRQYWdlIDwgaWRMaW1pdCAmJiBwYWdlc1tjdXJyZW50UGFnZV0uaW5kZXggPj0gMCkgewog
ICAgICAgICAgICAgKytjdXJyZW50UGFnZTsKQEAgLTY0OCw4ICs2OTgsMTIgQEAgc3RydWN0IFNo
YXJlZE1lbW9yeQogCiAgICAgICAgICAgICAvLyBGb3VuZCBhbiBlbnRyeSwgbW92ZSBpdC4KICAg
ICAgICAgICAgIHFpbnQzMiBhZmZlY3RlZEluZGV4ID0gcGFnZXNbY3VycmVudFBhZ2VdLmluZGV4
OwotICAgICAgICAgICAgUV9BU1NFUlQoYWZmZWN0ZWRJbmRleCA+PSAwKTsKLSAgICAgICAgICAg
IFFfQVNTRVJUKGluZGV4VGFibGUoKVthZmZlY3RlZEluZGV4XS5maXJzdFBhZ2UgPT0gY3VycmVu
dFBhZ2UpOworICAgICAgICAgICAgaWYgKEtERV9JU1VOTElLRUxZKGFmZmVjdGVkSW5kZXggPCAw
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICBhZmZlY3RlZEluZGV4ID49IGlkTGltaXQgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VGFibGUoKVthZmZlY3RlZEluZGV4XS5maXJz
dFBhZ2UgIT0gY3VycmVudFBhZ2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRo
cm93IEtTRENDb3JydXB0ZWQoKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaW5kZXhU
YWJsZSgpW2FmZmVjdGVkSW5kZXhdLmZpcnN0UGFnZSA9IGZyZWVTcG90OwogCkBAIC02OTMsNyAr
NzQ3LDcgQEAgc3RydWN0IFNoYXJlZE1lbW9yeQogICAgIHsKICAgICAgICAgdWludCBrZXlIYXNo
ID0gZ2VuZXJhdGVIYXNoKGtleSk7CiAgICAgICAgIHVpbnQgcG9zaXRpb24gPSBrZXlIYXNoICUg
aW5kZXhUYWJsZVNpemUoKTsKLSAgICAgICAgaW50IHByb2JlTnVtYmVyID0gMTsgLy8gU2VlIGlu
c2VydCgpIGZvciBkZXNjcmlwdGlvbgorICAgICAgICB1aW50IHByb2JlTnVtYmVyID0gMTsgLy8g
U2VlIGluc2VydCgpIGZvciBkZXNjcmlwdGlvbgogCiAgICAgICAgIC8vIEltYWdpbmUgMyBlbnRy
aWVzIEEsIEIsIEMgaW4gdGhpcyBsb2dpY2FsIHByb2JpbmcgY2hhaW4uIElmIEIgaXMKICAgICAg
ICAgLy8gbGF0ZXIgcmVtb3ZlZCB0aGVuIHdlIGNhbid0IGZpbmQgQyBlaXRoZXIuIFNvLCB3ZSBt
dXN0IGtlZXAKQEAgLTcxMiw5ICs3NjYsMTMgQEAgc3RydWN0IFNoYXJlZE1lbW9yeQogICAgICAg
ICAgICAgaWYgKGZpcnN0UGFnZSA8IDAgfHwgc3RhdGljX2Nhc3Q8dWludD4oZmlyc3RQYWdlKSA+
PSBwYWdlVGFibGVTaXplKCkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAg
ICAgICB9CisKICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnJlc3VsdFBhZ2UgPSBwYWdlKGZpcnN0
UGFnZSk7Ci0gICAgICAgICAgICBjb25zdCBjaGFyICp1dGY4RmlsZU5hbWUgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIgKj4ocmVzdWx0UGFnZSk7CisgICAgICAgICAgICBpZiAoS0RFX0lT
VU5MSUtFTFkoIXJlc3VsdFBhZ2UpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgS1NEQ0NvcnJ1
cHRlZCgpOworICAgICAgICAgICAgfQogCisgICAgICAgICAgICBjb25zdCBjaGFyICp1dGY4Rmls
ZU5hbWUgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIgKj4ocmVzdWx0UGFnZSk7CiAgICAg
ICAgICAgICBpZiAocXN0cm5jbXAodXRmOEZpbGVOYW1lLCBrZXkuY29uc3REYXRhKCksIGNhY2hl
UGFnZVNpemUoKSkgPT0gMCkgewogICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAg
ICAgICAgICAgIH0KQEAgLTc0MiwxMyArODAwLDEzIEBAIHN0cnVjdCBTaGFyZWRNZW1vcnkKICAg
ICB7CiAgICAgICAgIGlmIChudW1iZXJOZWVkZWQgPT0gMCkgewogICAgICAgICAgICAga0Vycm9y
KGtzZGNBcmVhKCkpIDw8ICJJbnRlcm5hbCBlcnJvcjogQXNrZWQgdG8gcmVtb3ZlIGV4YWN0bHkg
MCBwYWdlcyBmb3Igc29tZSByZWFzb24uIjsKLSAgICAgICAgICAgIHJldHVybiBwYWdlVGFibGVT
aXplKCk7CisgICAgICAgICAgICB0aHJvdyBLU0RDQ29ycnVwdGVkKCk7CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAobnVtYmVyTmVlZGVkID4gcGFnZVRhYmxlU2l6ZSgpKSB7CiAgICAgICAgICAg
ICBrRXJyb3Ioa3NkY0FyZWEoKSkgPDwgIkludGVybmFsIGVycm9yOiBSZXF1ZXN0ZWQgbW9yZSBz
cGFjZSB0aGFuIGV4aXN0cyBpbiB0aGUgY2FjaGUuIjsKICAgICAgICAgICAgIGtFcnJvcihrc2Rj
QXJlYSgpKSA8PCBudW1iZXJOZWVkZWQgPDwgInJlcXVlc3RlZCwgIiA8PCBwYWdlVGFibGVTaXpl
KCkgPDwgImlzIHRoZSB0b3RhbCBwb3NzaWJsZS4iOwotICAgICAgICAgICAgcmV0dXJuIHBhZ2VU
YWJsZVNpemUoKTsKKyAgICAgICAgICAgIHRocm93IEtTRENDb3JydXB0ZWQoKTsKICAgICAgICAg
fQogCiAgICAgICAgIC8vIElmIHRoZSBjYWNoZSBmcmVlIHNwYWNlIGlzIGxhcmdlIGVub3VnaCB3
ZSB3aWxsIGRlZnJhZ21lbnQgZmlyc3QKQEAgLTc4MSw3ICs4MzksNyBAQCBzdHJ1Y3QgU2hhcmVk
TWVtb3J5CiAgICAgICAgIGlmICghdGFibGVQdHIpIHsKICAgICAgICAgICAgIGtFcnJvcihrc2Rj
QXJlYSgpKSA8PCAiVW5hYmxlIHRvIGFsbG9jYXRlIHRlbXBvcmFyeSBtZW1vcnkgZm9yIHNvcnRp
bmcgdGhlIGNhY2hlISI7CiAgICAgICAgICAgICBjbGVhckludGVybmFsVGFibGVzKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gcGFnZVRhYmxlU2l6ZSgpOworICAgICAgICAgICAgdGhyb3cgS1NEQ0Nv
cnJ1cHRlZCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gV2UgdXNlIHRhYmxlUHRyIHRvIGVu
c3VyZSB0aGUgZGF0YSBpcyBkZXN0cm95ZWQsIGJ1dCBkbyB0aGUgYWNjZXNzCkBAIC04MzMsMTMg
Kzg5MSwxMSBAQCBzdHJ1Y3QgU2hhcmVkTWVtb3J5CiAgICAgICAgIHdoaWxlIChpIDwgaW5kZXhU
YWJsZVNpemUoKSAmJiBudW1iZXJOZWVkZWQgPiBjYWNoZUF2YWlsKSB7CiAgICAgICAgICAgICBp
bnQgY3VySW5kZXggPSB0YWJsZVtpKytdLmZpcnN0UGFnZTsgLy8gUmVhbGx5IGFuIGluZGV4LCBu
b3QgYSBwYWdlCiAKLSAgICAgICAgICAgIC8vIFJlbW92ZWQgZXZlcnl0aGluZywgc3RpbGwgbm8g
bHVjay4gQXQgKnRoaXMqIHBvaW50LAotICAgICAgICAgICAgLy8gcGFnZXNSZW1vdmVkIDwgbnVt
YmVyTmVlZGVkIG9yIGluIG90aGVyIHdvcmRzIHdlIGNhbid0IGZ1bGZpbGwKLSAgICAgICAgICAg
IC8vIHRoZSByZXF1ZXN0IGV2ZW4gaWYgd2UgZGVmcmFnbWVudC4gVGhpcyBpcyByZWFsbHkgYSBs
b2dpYyBlcnJvci4KLSAgICAgICAgICAgIGlmIChjdXJJbmRleCA8IDApIHsKLSAgICAgICAgICAg
ICAgICBrRXJyb3Ioa3NkY0FyZWEoKSkgPDwgIlVuYWJsZSB0byByZW1vdmUgZW5vdWdoIHVzZWQg
cGFnZXMgdG8gYWxsb2NhdGUiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBudW1i
ZXJOZWVkZWQgPDwgInBhZ2VzLiBJbiB0aGVvcnkgdGhlIGNhY2hlIGlzIGVtcHR5LCB3ZWlyZC4i
OwotICAgICAgICAgICAgICAgIHJldHVybiBwYWdlVGFibGVTaXplKCk7CisgICAgICAgICAgICAv
LyBSZW1vdmVkIGV2ZXJ5dGhpbmcsIHN0aWxsIG5vIGx1Y2sgKG9yIGN1ckluZGV4IGlzIHNldCBi
dXQgdG9vIGhpZ2gpLgorICAgICAgICAgICAgaWYgKGN1ckluZGV4IDwgMCB8fCBzdGF0aWNfY2Fz
dDx1aW50PihjdXJJbmRleCkgPj0gaW5kZXhUYWJsZVNpemUoKSkgeworICAgICAgICAgICAgICAg
IGtFcnJvcihrc2RjQXJlYSgpKSA8PCAiVHJ5aW5nIHRvIHJlbW92ZSBpbmRleCIgPDwgY3VySW5k
ZXgKKyAgICAgICAgICAgICAgICAgICAgPDwgIm91dC1vZi1ib3VuZHMgZm9yIGluZGV4IHRhYmxl
IG9mIHNpemUiIDw8IGluZGV4VGFibGVTaXplKCk7CisgICAgICAgICAgICAgICAgdGhyb3cgS1NE
Q0NvcnJ1cHRlZCgpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBrRGVidWcoa3NkY0Fy
ZWEoKSkgPDwgIlJlbW92aW5nIGVudHJ5IG9mIiA8PCBpbmRleFRhYmxlKClbY3VySW5kZXhdLnRv
dGFsSXRlbVNpemUKQEAgLTg1Myw3ICs5MDksNyBAQCBzdHJ1Y3QgU2hhcmVkTWVtb3J5CiAKICAg
ICAgICAgcGFnZUlEIHJlc3VsdCA9IHBhZ2VUYWJsZVNpemUoKTsKICAgICAgICAgd2hpbGUgKGkg
PCBpbmRleFRhYmxlU2l6ZSgpICYmCi0gICAgICAgICAgICAgIChyZXN1bHQgPSBmaW5kRW1wdHlQ
YWdlcyhudW1iZXJOZWVkZWQpKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KHBhZ2VUYWJsZVNpemUoKSkp
CisgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50PihyZXN1bHQgPSBmaW5kRW1wdHlQYWdl
cyhudW1iZXJOZWVkZWQpKSkgPj0gcGFnZVRhYmxlU2l6ZSgpKQogICAgICAgICB7CiAgICAgICAg
ICAgICBpbnQgY3VySW5kZXggPSB0YWJsZVtpKytdLmZpcnN0UGFnZTsKIApAQCAtODYzLDYgKzkx
OSwxMCBAQCBzdHJ1Y3QgU2hhcmVkTWVtb3J5CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmRF
bXB0eVBhZ2VzKG51bWJlck5lZWRlZCk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlm
IChLREVfSVNVTkxJS0VMWShzdGF0aWNfY2FzdDx1aW50PihjdXJJbmRleCkgPj0gaW5kZXhUYWJs
ZVNpemUoKSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBLU0RDQ29ycnVwdGVkKCk7CisgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIHJlbW92ZUVudHJ5KGN1ckluZGV4KTsKICAgICAgICAg
fQogCkBAIC05MjgsNyArOTg4LDcgQEAgY2xhc3MgS1NoYXJlZERhdGFDYWNoZTo6UHJpdmF0ZQog
ICAgICAgICAsIG1fbWFwU2l6ZSgwKQogICAgICAgICAsIG1fZGVmYXVsdENhY2hlU2l6ZShkZWZh
dWx0Q2FjaGVTaXplKQogICAgICAgICAsIG1fZXhwZWN0ZWRJdGVtU2l6ZShleHBlY3RlZEl0ZW1T
aXplKQotICAgICAgICAsIG1fZXhwZWN0ZWRUeXBlKHN0YXRpY19jYXN0PFNoYXJlZExvY2tJZD4o
MCkpCisgICAgICAgICwgbV9leHBlY3RlZFR5cGUoTE9DS1RZUEVfSU5WQUxJRCkKICAgICB7CiAg
ICAgICAgIG1hcFNoYXJlZE1lbW9yeSgpOwogICAgIH0KQEAgLTEwNzYsNyArMTEzNiw3IEBAIGNs
YXNzIEtTaGFyZWREYXRhQ2FjaGU6OlByaXZhdGUKICAgICAgICAgLy8gICAgICAgICAyIG1lYW5z
ICJyZWFkeSIKICAgICAgICAgdWludCB1c2VjU2xlZXBUaW1lID0gODsgLy8gU3RhcnQgYnkgc2xl
ZXBpbmcgZm9yIDggbWljcm9zZWNvbmRzCiAgICAgICAgIHdoaWxlIChzaG0tPnJlYWR5ICE9IDIp
IHsKLSAgICAgICAgICAgIGlmICh1c2VjU2xlZXBUaW1lID49ICgxIDw8IDIxKSkgeworICAgICAg
ICAgICAgaWYgKEtERV9JU1VOTElLRUxZKHVzZWNTbGVlcFRpbWUgPj0gKDEgPDwgMjEpKSkgewog
ICAgICAgICAgICAgICAgIC8vIERpZG4ndCBhY3F1aXJlIHdpdGhpbiB+OCBzZWNvbmRzPyAgQXNz
dW1lIGFuIGlzc3VlIGV4aXN0cwogICAgICAgICAgICAgICAgIGtFcnJvcihrc2RjQXJlYSgpKSA8
PCAiVW5hYmxlIHRvIGFjcXVpcmUgc2hhcmVkIGxvY2ssIGlzIHRoZSBjYWNoZSBjb3JydXB0PyI7
CiAKQEAgLTExMzIsNyArMTE5Miw4IEBAIGNsYXNzIEtTaGFyZWREYXRhQ2FjaGU6OlByaXZhdGUK
ICAgICAgICAgICAgIHJldHVybiBtX2xvY2stPmxvY2soKTsKICAgICAgICAgfQogCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gTm8gc2htIG9yIHdyb25nIHR5cGUgLS0+IGNvcnJ1
cHQhCisgICAgICAgIHRocm93IEtTRENDb3JydXB0ZWQoKTsKICAgICB9CiAKICAgICB2b2lkIHVu
bG9jaygpIGNvbnN0CkBAIC0xMTc0LDc3ICsxMjM1LDc1IEBAIGNsYXNzIEtTaGFyZWREYXRhQ2Fj
aGU6OlByaXZhdGUKICAgICAgICAgcHVibGljOgogICAgICAgICBDYWNoZUxvY2tlcihjb25zdCBQ
cml2YXRlICpfZCkgOiBkKGNvbnN0X2Nhc3Q8UHJpdmF0ZSAqPihfZCkpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChkLT5zaG0pIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNhdXRpb3VzTG9j
aygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoS0RFX0lTVU5MSUtFTFkoIWQgfHwgIWQtPnNobSB8fCAhY2F1dGlvdXNM
b2NrKCkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgdWludCB0ZXN0U2l6ZSA9IFNoYXJlZE1lbW9yeTo6dG90YWxTaXplKGQtPnNo
bS0+Y2FjaGVTaXplLCBkLT5zaG0tPmNhY2hlUGFnZVNpemUoKSk7CisgICAgICAgICAgICB1aW50
IHRlc3RTaXplID0gU2hhcmVkTWVtb3J5Ojp0b3RhbFNpemUoZC0+c2htLT5jYWNoZVNpemUsIGQt
PnNobS0+Y2FjaGVQYWdlU2l6ZSgpKTsKIAotICAgICAgICAgICAgICAgIC8vIEEgd2hpbGUgbG9v
cD8gSW5kZWVkLCB0aGluayB3aGF0IGhhcHBlbnMgaWYgdGhpcyBoYXBwZW5zCi0gICAgICAgICAg
ICAgICAgLy8gdHdpY2UgLS0gaGFyZCB0byBkZWJ1ZyByYWNlIGNvbmRpdGlvbnMuCi0gICAgICAg
ICAgICAgICAgd2hpbGUgKHRlc3RTaXplID4gZC0+bV9tYXBTaXplKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGtEZWJ1Zyhrc2RjQXJlYSgpKSA8PCAiU29tZW9uZSBlbmxhcmdlZCB0aGUgY2FjaGUg
b24gdXMsIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiYXR0ZW1wdGluZyB0
byBtYXRjaCBuZXcgY29uZmlndXJhdGlvbi4iOworICAgICAgICAgICAgLy8gQSB3aGlsZSBsb29w
PyBJbmRlZWQsIHRoaW5rIHdoYXQgaGFwcGVucyBpZiB0aGlzIGhhcHBlbnMKKyAgICAgICAgICAg
IC8vIHR3aWNlIC0tIGhhcmQgdG8gZGVidWcgcmFjZSBjb25kaXRpb25zLgorICAgICAgICAgICAg
d2hpbGUgKHRlc3RTaXplID4gZC0+bV9tYXBTaXplKSB7CisgICAgICAgICAgICAgICAga0RlYnVn
KGtzZGNBcmVhKCkpIDw8ICJTb21lb25lIGVubGFyZ2VkIHRoZSBjYWNoZSBvbiB1cywiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPDwgImF0dGVtcHRpbmcgdG8gbWF0Y2ggbmV3IGNvbmZp
Z3VyYXRpb24uIjsKIAotICAgICAgICAgICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgdHdv
IHRocmVhZHMgYWNjZXNzaW5nIHRoaXMgc2FtZSBLU0RDCi0gICAgICAgICAgICAgICAgICAgIC8v
IGZyb20gdHJ5aW5nIHRvIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyByZW1hcHBpbmcgYXQgdGhlCi0g
ICAgICAgICAgICAgICAgICAgIC8vIHNhbWUgdGltZS4KLSAgICAgICAgICAgICAgICAgICAgUU11
dGV4TG9ja2VyIGRfbG9ja2VyKCZkLT5tX3RocmVhZExvY2spOwotICAgICAgICAgICAgICAgICAg
ICBpZiAodGVzdFNpemUgPT0gZC0+bV9tYXBTaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsgLy8gQmFpbCBpZiB0aGUgb3RoZXIgdGhyZWFkIGFscmVhZHkgc29sdmVkLgotICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IHR3
byB0aHJlYWRzIGFjY2Vzc2luZyB0aGlzIHNhbWUgS1NEQworICAgICAgICAgICAgICAgIC8vIGZy
b20gdHJ5aW5nIHRvIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyByZW1hcHBpbmcgYXQgdGhlCisgICAg
ICAgICAgICAgICAgLy8gc2FtZSB0aW1lLgorICAgICAgICAgICAgICAgIFFNdXRleExvY2tlciBk
X2xvY2tlcigmZC0+bV90aHJlYWRMb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAodGVzdFNpemUg
PT0gZC0+bV9tYXBTaXplKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBCYWlsIGlm
IHRoZSBvdGhlciB0aHJlYWQgYWxyZWFkeSBzb2x2ZWQuCisgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgICAgIC8vIExpbnV4IHN1cHBvcnRzIG1yZW1hcCwgYnV0IGl0J3Mgbm90
IHBvcnRhYmxlLiBTbywKLSAgICAgICAgICAgICAgICAgICAgLy8gZHJvcCB0aGUgbWFwIGFuZCAo
dHJ5IHRvKSByZS1lc3RhYmxpc2guCi0gICAgICAgICAgICAgICAgICAgIGQtPnVubG9jaygpOwor
ICAgICAgICAgICAgICAgIC8vIExpbnV4IHN1cHBvcnRzIG1yZW1hcCwgYnV0IGl0J3Mgbm90IHBv
cnRhYmxlLiBTbywKKyAgICAgICAgICAgICAgICAvLyBkcm9wIHRoZSBtYXAgYW5kICh0cnkgdG8p
IHJlLWVzdGFibGlzaC4KKyAgICAgICAgICAgICAgICBkLT51bmxvY2soKTsKIAogI2lmZGVmIEtT
RENfTVNZTkNfU1VQUE9SVEVECi0gICAgICAgICAgICAgICAgICAgIDo6bXN5bmMoZC0+c2htLCBk
LT5tX21hcFNpemUsIE1TX0lOVkFMSURBVEUgfCBNU19BU1lOQyk7CisgICAgICAgICAgICAgICAg
Ojptc3luYyhkLT5zaG0sIGQtPm1fbWFwU2l6ZSwgTVNfSU5WQUxJREFURSB8IE1TX0FTWU5DKTsK
ICNlbmRpZgotICAgICAgICAgICAgICAgICAgICA6Om11bm1hcChkLT5zaG0sIGQtPm1fbWFwU2l6
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGQtPm1fbWFwU2l6ZSA9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgIGQtPnNobSA9IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgUUZpbGUgZihkLT5tX2Nh
Y2hlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZi5vcGVuKFFGaWxlOjpSZWFkV3Jp
dGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBrRXJyb3Ioa3NkY0FyZWEoKSkgPDwgIlVu
YWJsZSB0byByZS1vcGVuIGNhY2hlLCB1bmZvcnR1bmF0ZWx5IgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPDwgInRoZSBjb25uZWN0aW9uIGhhZCB0byBiZSBkcm9wcGVkIGZv
ciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJjcmFzaCBzYWZldHkg
LS0gdGhpbmdzIHdpbGwgYmUgbXVjaCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDw8ICJzbG93ZXIgbm93LiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB2b2lkICpuZXdNYXAg
PSA6Om1tYXAoMCwgdGVzdFNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVBfU0hBUkVELCBmLmhhbmRsZSgpLCAw
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5ld01hcCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBrRXJyb3Ioa3NkY0FyZWEoKSkgPDwgIlVub3BlbiB0byByZS1t
YXAgdGhlIGNhY2hlIGludG8gbWVtb3J5IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPDwgInRoaW5ncyB3aWxsIGJlIG11Y2ggc2xvd2VyIG5vdyI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICBkLT5zaG0gPSByZWludGVycHJldF9jYXN0PFNoYXJlZE1lbW9yeSAqPihuZXdNYXAp
OwotICAgICAgICAgICAgICAgICAgICBkLT5tX21hcFNpemUgPSB0ZXN0U2l6ZTsKLQotICAgICAg
ICAgICAgICAgICAgICBpZiAoIWNhdXRpb3VzTG9jaygpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICB0ZXN0U2l6ZSA9IFNoYXJlZE1lbW9yeTo6dG90YWxTaXplKGQtPnNobS0+Y2FjaGVTaXplLCBk
LT5zaG0tPmNhY2hlUGFnZVNpemUoKSk7CisgICAgICAgICAgICAgICAgOjptdW5tYXAoZC0+c2ht
LCBkLT5tX21hcFNpemUpOworICAgICAgICAgICAgICAgIGQtPm1fbWFwU2l6ZSA9IDA7CisgICAg
ICAgICAgICAgICAgZC0+c2htID0gMDsKKworICAgICAgICAgICAgICAgIFFGaWxlIGYoZC0+bV9j
YWNoZU5hbWUpOworICAgICAgICAgICAgICAgIGlmICghZi5vcGVuKFFGaWxlOjpSZWFkV3JpdGUp
KSB7CisgICAgICAgICAgICAgICAgICAgIGtFcnJvcihrc2RjQXJlYSgpKSA8PCAiVW5hYmxlIHRv
IHJlLW9wZW4gY2FjaGUsIHVuZm9ydHVuYXRlbHkiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDw8ICJ0aGUgY29ubmVjdGlvbiBoYWQgdG8gYmUgZHJvcHBlZCBmb3IiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJjcmFzaCBzYWZldHkgLS0gdGhpbmdzIHdpbGwg
YmUgbXVjaCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgInNsb3dlciBub3cu
IjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIHZvaWQgKm5ld01hcCA9IDo6bW1hcCgwLCB0ZXN0U2l6ZSwgUFJPVF9SRUFE
IHwgUFJPVF9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQ
X1NIQVJFRCwgZi5oYW5kbGUoKSwgMCk7CisgICAgICAgICAgICAgICAgaWYgKG5ld01hcCA9PSBN
QVBfRkFJTEVEKSB7CisgICAgICAgICAgICAgICAgICAgIGtFcnJvcihrc2RjQXJlYSgpKSA8PCAi
VW5vcGVuIHRvIHJlLW1hcCB0aGUgY2FjaGUgaW50byBtZW1vcnkiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDw8ICJ0aGluZ3Mgd2lsbCBiZSBtdWNoIHNsb3dlciBub3ciOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgZC0+c2htID0gcmVpbnRlcnByZXRfY2FzdDxTaGFyZWRNZW1vcnkgKj4obmV3TWFwKTsK
KyAgICAgICAgICAgICAgICBkLT5tX21hcFNpemUgPSB0ZXN0U2l6ZTsKKworICAgICAgICAgICAg
ICAgIGlmICghY2F1dGlvdXNMb2NrKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRlc3RTaXplID0gU2hhcmVkTWVt
b3J5Ojp0b3RhbFNpemUoZC0+c2htLT5jYWNoZVNpemUsIGQtPnNobS0+Y2FjaGVQYWdlU2l6ZSgp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIH5DYWNoZUxvY2tlcigpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChkLT5zaG0pIHsKKyAgICAgICAgICAgIGlmIChkICYm
IGQtPnNobSkgewogICAgICAgICAgICAgICAgIGQtPnVubG9jaygpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAKICAgICAgICAgYm9vbCBmYWlsZWQoKSBjb25zdAogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZC0+c2htID09IDA7CisgICAgICAgICAgICByZXR1cm4gIWQgfHwgZC0+
c2htID09IDA7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0xMjYxLDM2ICsxMzIwLDI1IEBAIGNs
YXNzIEtTaGFyZWREYXRhQ2FjaGU6OlByaXZhdGUKIC8vIE11c3QgYmUgY2FsbGVkIHdoaWxlIHRo
ZSBsb2NrIGlzIGFscmVhZHkgaGVsZCEKIHZvaWQgU2hhcmVkTWVtb3J5OjpyZW1vdmVFbnRyeSh1
aW50IGluZGV4KQogewotICAgIFFfQVNTRVJUKGluZGV4IDwgaW5kZXhUYWJsZVNpemUoKSk7Ci0g
ICAgUV9BU1NFUlQoY2FjaGVBdmFpbCA8PSBwYWdlVGFibGVTaXplKCkpOworICAgIGlmIChpbmRl
eCA+PSBpbmRleFRhYmxlU2l6ZSgpIHx8IGNhY2hlQXZhaWwgPiBwYWdlVGFibGVTaXplKCkpIHsK
KyAgICAgICAgdGhyb3cgS1NEQ0NvcnJ1cHRlZCgpOworICAgIH0KIAogICAgIFBhZ2VUYWJsZUVu
dHJ5ICpwYWdlVGFibGVFbnRyaWVzID0gcGFnZVRhYmxlKCk7CiAgICAgSW5kZXhUYWJsZUVudHJ5
ICplbnRyaWVzSW5kZXggPSBpbmRleFRhYmxlKCk7CiAKLSAgICBpZiAoZW50cmllc0luZGV4W2lu
ZGV4XS5maXJzdFBhZ2UgPCAwKSB7Ci0gICAgICAgIGtEZWJ1Zyhrc2RjQXJlYSgpKSA8PCAiVHJ5
aW5nIHRvIHJlbW92ZSBhbiBlbnRyeSB3aGljaCBpcyBhbHJlYWR5IGludmFsaWQuIFRoaXMgIgot
ICAgICAgICAgICAgICAgICAgICA8PCAiY2FjaGUgaXMgbGlrZWx5IGNvcnJ1cHQuIjsKLQotICAg
ICAgICBjbGVhckludGVybmFsVGFibGVzKCk7IC8vIFRoZSBudWNsZWFyIG9wdGlvbi4uLgotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgLy8gVXBkYXRlIHBhZ2UgdGFibGUgZmlyc3QKICAg
ICBwYWdlSUQgZmlyc3RQYWdlID0gZW50cmllc0luZGV4W2luZGV4XS5maXJzdFBhZ2U7CiAgICAg
aWYgKGZpcnN0UGFnZSA8IDAgfHwgc3RhdGljX2Nhc3Q8cXVpbnQzMj4oZmlyc3RQYWdlKSA+PSBw
YWdlVGFibGVTaXplKCkpIHsKLSAgICAgICAga0Vycm9yKGtzZGNBcmVhKCkpIDw8ICJSZW1vdmlu
ZyIgPDwgaW5kZXggPDwgIndoaWNoIGlzIGFscmVhZHkgbWFya2VkIGFzIGVtcHR5ISI7Ci0KLSAg
ICAgICAgY2xlYXJJbnRlcm5hbFRhYmxlcygpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGtE
ZWJ1Zyhrc2RjQXJlYSgpKSA8PCAiVHJ5aW5nIHRvIHJlbW92ZSBhbiBlbnRyeSB3aGljaCBpcyBh
bHJlYWR5IGludmFsaWQuIFRoaXMgIgorICAgICAgICAgICAgICAgICAgICA8PCAiY2FjaGUgaXMg
bGlrZWx5IGNvcnJ1cHQuIjsKKyAgICAgICAgdGhyb3cgS1NEQ0NvcnJ1cHRlZCgpOwogICAgIH0K
IAogICAgIGlmIChpbmRleCAhPSBzdGF0aWNfY2FzdDx1aW50PihwYWdlVGFibGVFbnRyaWVzW2Zp
cnN0UGFnZV0uaW5kZXgpKSB7Ci0gICAgICAgIGtFcnJvcihrc2RjQXJlYSgpKSA8PCAiUmVtb3Zp
bmciIDw8IGluZGV4IDw8ICJ3aWxsIG5vdCB3b3JrIGFzIGl0IGlzIGFzc2lnbmVkIgotICAgICAg
ICAgICAgICAgICAgICA8PCAidG8gcGFnZSIgPDwgZmlyc3RQYWdlIDw8ICJ3aGljaCBpcyBpdHNl
bGYgYXNzaWduZWQgdG8iCi0gICAgICAgICAgICAgICAgICAgIDw8ICJlbnRyeSIgPDwgcGFnZVRh
YmxlRW50cmllc1tmaXJzdFBhZ2VdLmluZGV4IDw8ICJpbnN0ZWFkISI7Ci0KLSAgICAgICAgY2xl
YXJJbnRlcm5hbFRhYmxlcygpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGtFcnJvcihrc2Rj
QXJlYSgpKSA8PCAiUmVtb3ZpbmcgZW50cnkiIDw8IGluZGV4IDw8ICJidXQgdGhlIG1hdGNoaW5n
IGRhdGEiCisgICAgICAgICAgICAgICAgICAgIDw8ICJkb2Vzbid0IGxpbmsgYmFjayAtLSBjYWNo
ZSBpcyBjb3JydXB0LCBjbGVhcmluZy4iOworICAgICAgICB0aHJvdyBLU0RDQ29ycnVwdGVkKCk7
CiAgICAgfQogCiAgICAgdWludCBlbnRyaWVzVG9SZW1vdmUgPSBpbnRDZWlsKGVudHJpZXNJbmRl
eFtpbmRleF0udG90YWxJdGVtU2l6ZSwgY2FjaGVQYWdlU2l6ZSgpKTsKQEAgLTEzMDYsNiArMTM1
NCw3IEBAIHZvaWQgU2hhcmVkTWVtb3J5OjpyZW1vdmVFbnRyeSh1aW50IGluZGV4KQogICAgICAg
ICBrRXJyb3Ioa3NkY0FyZWEoKSkgPDwgIldlIHNvbWVob3cgZGlkIG5vdCByZW1vdmUiIDw8IGVu
dHJpZXNUb1JlbW92ZQogICAgICAgICAgICAgICAgICAgICA8PCAid2hlbiByZW1vdmluZyBlbnRy
eSIgPDwgaW5kZXggPDwgIiwgaW5zdGVhZCB3ZSByZW1vdmVkIgogICAgICAgICAgICAgICAgICAg
ICA8PCAoY2FjaGVBdmFpbCAtIHNhdmVkQ2FjaGVTaXplKTsKKyAgICAgICAgdGhyb3cgS1NEQ0Nv
cnJ1cHRlZCgpOwogICAgIH0KIAogICAgIC8vIEZvciBkZWJ1Z2dpbmcKQEAgLTEzMzAsOCArMTM3
OSwyNSBAQCB2b2lkIFNoYXJlZE1lbW9yeTo6cmVtb3ZlRW50cnkodWludCBpbmRleCkKIEtTaGFy
ZWREYXRhQ2FjaGU6OktTaGFyZWREYXRhQ2FjaGUoY29uc3QgUVN0cmluZyAmY2FjaGVOYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBkZWZhdWx0Q2FjaGVT
aXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBleHBlY3Rl
ZEl0ZW1TaXplKQotICA6IGQobmV3IFByaXZhdGUoY2FjaGVOYW1lLCBkZWZhdWx0Q2FjaGVTaXpl
LCBleHBlY3RlZEl0ZW1TaXplKSkKKyAgOiBkKDApCiB7CisgICAgdHJ5IHsKKyAgICAgICAgZCA9
IG5ldyBQcml2YXRlKGNhY2hlTmFtZSwgZGVmYXVsdENhY2hlU2l6ZSwgZXhwZWN0ZWRJdGVtU2l6
ZSk7CisgICAgfQorICAgIGNhdGNoKEtTRENDb3JydXB0ZWQpIHsKKyAgICAgICAgS1NoYXJlZERh
dGFDYWNoZTo6ZGVsZXRlQ2FjaGUoY2FjaGVOYW1lKTsKKworICAgICAgICAvLyBUcnkgb25seSBv
bmNlIG1vcmUKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGQgPSBuZXcgUHJpdmF0ZShjYWNo
ZU5hbWUsIGRlZmF1bHRDYWNoZVNpemUsIGV4cGVjdGVkSXRlbVNpemUpOworICAgICAgICB9Cisg
ICAgICAgIGNhdGNoKEtTRENDb3JydXB0ZWQpIHsKKyAgICAgICAgICAgIGtFcnJvcihrc2RjQXJl
YSgpKQorICAgICAgICAgICAgICAgIDw8ICJFdmVuIGEgYnJhbmQtbmV3IGNhY2hlIHN0YXJ0cyBv
ZmYgY29ycnVwdGVkLCBzb21ldGhpbmcgaXMiCisgICAgICAgICAgICAgICAgPDwgInNlcmlvdXNs
eSB3cm9uZy4gOi0oIjsKKyAgICAgICAgICAgIGQgPSAwOyAvLyBKdXN0IGluIGNhc2UKKyAgICAg
ICAgfQorICAgIH0KIH0KIAogS1NoYXJlZERhdGFDYWNoZTo6fktTaGFyZWREYXRhQ2FjaGUoKQpA
QCAtMTMzOSw2ICsxNDA1LDEwIEBAIEtTaGFyZWREYXRhQ2FjaGU6On5LU2hhcmVkRGF0YUNhY2hl
KCkKICAgICAvLyBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gb3RoZXIgYWN0aW9ucyByZXF1aXJlZCB0
byBzZXBhcmF0ZSBmcm9tIHRoZQogICAgIC8vIHNoYXJlZCBtZW1vcnkgc2VnbWVudCwgc2ltcGx5
IHVubWFwcGluZyBpcyBlbm91Z2guIFRoaXMgbWFrZXMgdGhpbmdzCiAgICAgLy8gKm11Y2gqIGVh
c2llciBzbyBJJ2QgcmVjb21tZW5kIG1haW50YWluaW5nIHRoaXMgaWRlYWwuCisgICAgaWYgKCFk
KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoZC0+c2htKSB7CiAjaWZkZWYg
S1NEQ19NU1lOQ19TVVBQT1JURUQKICAgICAgICAgOjptc3luYyhkLT5zaG0sIGQtPm1fbWFwU2l6
ZSwgTVNfSU5WQUxJREFURSB8IE1TX0FTWU5DKTsKQEAgLTEzNTQsMTg0ICsxNDI0LDE5MSBAQCBL
U2hhcmVkRGF0YUNhY2hlOjp+S1NoYXJlZERhdGFDYWNoZSgpCiAKIGJvb2wgS1NoYXJlZERhdGFD
YWNoZTo6aW5zZXJ0KGNvbnN0IFFTdHJpbmcgJmtleSwgY29uc3QgUUJ5dGVBcnJheSAmZGF0YSkK
IHsKLSAgICBQcml2YXRlOjpDYWNoZUxvY2tlciBsb2NrKGQpOwotICAgIGlmIChsb2NrLmZhaWxl
ZCgpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgdHJ5IHsKKyAgICAgICAg
UHJpdmF0ZTo6Q2FjaGVMb2NrZXIgbG9jayhkKTsKKyAgICAgICAgaWYgKGxvY2suZmFpbGVkKCkp
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogCi0gICAgUUJ5dGVBcnJh
eSBlbmNvZGVkS2V5ID0ga2V5LnRvVXRmOCgpOwotICAgIHVpbnQga2V5SGFzaCA9IGdlbmVyYXRl
SGFzaChlbmNvZGVkS2V5KTsKLSAgICB1aW50IHBvc2l0aW9uID0ga2V5SGFzaCAlIGQtPnNobS0+
aW5kZXhUYWJsZVNpemUoKTsKKyAgICAgICAgUUJ5dGVBcnJheSBlbmNvZGVkS2V5ID0ga2V5LnRv
VXRmOCgpOworICAgICAgICB1aW50IGtleUhhc2ggPSBnZW5lcmF0ZUhhc2goZW5jb2RlZEtleSk7
CisgICAgICAgIHVpbnQgcG9zaXRpb24gPSBrZXlIYXNoICUgZC0+c2htLT5pbmRleFRhYmxlU2l6
ZSgpOwogCi0gICAgLy8gU2VlIGlmIHdlJ3JlIG92ZXJ3cml0aW5nIGFuIGV4aXN0aW5nIGVudHJ5
LgotICAgIEluZGV4VGFibGVFbnRyeSAqaW5kaWNlcyA9IGQtPnNobS0+aW5kZXhUYWJsZSgpOwor
ICAgICAgICAvLyBTZWUgaWYgd2UncmUgb3ZlcndyaXRpbmcgYW4gZXhpc3RpbmcgZW50cnkuCisg
ICAgICAgIEluZGV4VGFibGVFbnRyeSAqaW5kaWNlcyA9IGQtPnNobS0+aW5kZXhUYWJsZSgpOwog
Ci0gICAgLy8gSW4gb3JkZXIgdG8gYXZvaWQgdGhlIGlzc3VlIG9mIGEgdmVyeSBsb25nLWxpdmVk
IGNhY2hlIGhhdmluZyBpdGVtcwotICAgIC8vIHdpdGggYSB1c2UgY291bnQgb2YgMSBuZWFyLXBl
cm1hbmVudGx5LCB3ZSBhdHRlbXB0IHRvIGFydGlmaWNhbGx5Ci0gICAgLy8gcmVkdWNlIHRoZSB1
c2UgY291bnQgb2YgbG9uZy1saXZlZCBpdGVtcyB3aGVuIHRoZXJlIGlzIGhpZ2ggbG9hZCBvbgot
ICAgIC8vIHRoZSBjYWNoZS4gV2UgZG8gdGhpcyByYW5kb21seSwgd2l0aCBhIHdlaWdodGluZyB0
aGF0IG1ha2VzIHRoZSBldmVudAotICAgIC8vIGltcG9zc2libGUgaWYgbG9hZCA8IDAuNSwgYW5k
IGd1YXJhbnRlZWQgaWYgbG9hZCA+PSAwLjk2LgotICAgIHN0YXRpYyBkb3VibGUgc3RhcnRDdWxs
UG9pbnQgPSAwLjVsOwotICAgIHN0YXRpYyBkb3VibGUgbXVzdEN1bGxQb2ludCA9IDAuOTZsOwor
ICAgICAgICAvLyBJbiBvcmRlciB0byBhdm9pZCB0aGUgaXNzdWUgb2YgYSB2ZXJ5IGxvbmctbGl2
ZWQgY2FjaGUgaGF2aW5nIGl0ZW1zCisgICAgICAgIC8vIHdpdGggYSB1c2UgY291bnQgb2YgMSBu
ZWFyLXBlcm1hbmVudGx5LCB3ZSBhdHRlbXB0IHRvIGFydGlmaWNhbGx5CisgICAgICAgIC8vIHJl
ZHVjZSB0aGUgdXNlIGNvdW50IG9mIGxvbmctbGl2ZWQgaXRlbXMgd2hlbiB0aGVyZSBpcyBoaWdo
IGxvYWQgb24KKyAgICAgICAgLy8gdGhlIGNhY2hlLiBXZSBkbyB0aGlzIHJhbmRvbWx5LCB3aXRo
IGEgd2VpZ2h0aW5nIHRoYXQgbWFrZXMgdGhlIGV2ZW50CisgICAgICAgIC8vIGltcG9zc2libGUg
aWYgbG9hZCA8IDAuNSwgYW5kIGd1YXJhbnRlZWQgaWYgbG9hZCA+PSAwLjk2LgorICAgICAgICBz
dGF0aWMgY29uc3QgZG91YmxlIHN0YXJ0Q3VsbFBvaW50ID0gMC41bDsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGRvdWJsZSBtdXN0Q3VsbFBvaW50ID0gMC45Nmw7CiAKLSAgICAvLyBjYWNoZUF2YWls
IGlzIGluIHBhZ2VzLCBjYWNoZVNpemUgaXMgaW4gYnl0ZXMuCi0gICAgZG91YmxlIGxvYWRGYWN0
b3IgPSAxLjAgLSAoMS4wbCAqIGQtPnNobS0+Y2FjaGVBdmFpbCAqIGQtPnNobS0+Y2FjaGVQYWdl
U2l6ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIGQtPnNobS0+Y2FjaGVTaXpl
KTsKLSAgICBib29sIGN1bGxDb2xsaXNpb25zID0gZmFsc2U7CisgICAgICAgIC8vIGNhY2hlQXZh
aWwgaXMgaW4gcGFnZXMsIGNhY2hlU2l6ZSBpcyBpbiBieXRlcy4KKyAgICAgICAgZG91YmxlIGxv
YWRGYWN0b3IgPSAxLjAgLSAoMS4wbCAqIGQtPnNobS0+Y2FjaGVBdmFpbCAqIGQtPnNobS0+Y2Fj
aGVQYWdlU2l6ZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBkLT5zaG0t
PmNhY2hlU2l6ZSk7CisgICAgICAgIGJvb2wgY3VsbENvbGxpc2lvbnMgPSBmYWxzZTsKIAotICAg
IGlmIChLREVfSVNVTkxJS0VMWShsb2FkRmFjdG9yID49IG11c3RDdWxsUG9pbnQpKSB7Ci0gICAg
ICAgIGN1bGxDb2xsaXNpb25zID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobG9hZEZhY3Rv
ciA+IHN0YXJ0Q3VsbFBvaW50KSB7Ci0gICAgICAgIGNvbnN0IGludCB0cmlwV2lyZVZhbHVlID0g
UkFORF9NQVggKiAobG9hZEZhY3RvciAtIHN0YXJ0Q3VsbFBvaW50KSAvIChtdXN0Q3VsbFBvaW50
IC0gc3RhcnRDdWxsUG9pbnQpOwotICAgICAgICBpZiAoS1JhbmRvbTo6cmFuZG9tKCkgPj0gdHJp
cFdpcmVWYWx1ZSkgeworICAgICAgICBpZiAoS0RFX0lTVU5MSUtFTFkobG9hZEZhY3RvciA+PSBt
dXN0Q3VsbFBvaW50KSkgewogICAgICAgICAgICAgY3VsbENvbGxpc2lvbnMgPSB0cnVlOwogICAg
ICAgICB9Ci0gICAgfQorICAgICAgICBlbHNlIGlmIChsb2FkRmFjdG9yID4gc3RhcnRDdWxsUG9p
bnQpIHsKKyAgICAgICAgICAgIGNvbnN0IGludCB0cmlwV2lyZVZhbHVlID0gUkFORF9NQVggKiAo
bG9hZEZhY3RvciAtIHN0YXJ0Q3VsbFBvaW50KSAvIChtdXN0Q3VsbFBvaW50IC0gc3RhcnRDdWxs
UG9pbnQpOworICAgICAgICAgICAgaWYgKEtSYW5kb206OnJhbmRvbSgpID49IHRyaXBXaXJlVmFs
dWUpIHsKKyAgICAgICAgICAgICAgICBjdWxsQ29sbGlzaW9ucyA9IHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KIAotICAgIC8vIEluIGNhc2Ugb2YgY29sbGlzaW9ucyBpbiB0aGUgaW5k
ZXggdGFibGUgKGkuZS4gaWRlbnRpY2FsIHBvc2l0aW9ucyksIHVzZQotICAgIC8vIHF1YWRyYXRp
YyBjaGFpbmluZyB0byBhdHRlbXB0IHRvIGZpbmQgYW4gZW1wdHkgc2xvdC4gVGhlIGVxdWF0aW9u
IHdlIHVzZQotICAgIC8vIGlzOgotICAgIC8vIHBvc2l0aW9uID0gKGhhc2ggKyAoaSArIGkqaSkg
LyAyKSAlIHNpemUsIHdoZXJlIGkgaXMgdGhlIHByb2JlIG51bWJlci4KLSAgICBpbnQgcHJvYmVO
dW1iZXIgPSAxOwotICAgIHdoaWxlIChpbmRpY2VzW3Bvc2l0aW9uXS51c2VDb3VudCA+IDAgJiYg
cHJvYmVOdW1iZXIgPCBNQVhfUFJPQkVfQ09VTlQpIHsKLSAgICAgICAgLy8gSWYgd2UgYWN0dWFs
bHkgc3R1bWJsZWQgdXBvbiBhbiBvbGQgdmVyc2lvbiBvZiB0aGUga2V5IHdlIGFyZQotICAgICAg
ICAvLyBvdmVyd3JpdGluZywgdGhlbiB1c2UgdGhhdCBwb3NpdGlvbiwgZG8gbm90IHNraXAgb3Zl
ciBpdC4KKyAgICAgICAgLy8gSW4gY2FzZSBvZiBjb2xsaXNpb25zIGluIHRoZSBpbmRleCB0YWJs
ZSAoaS5lLiBpZGVudGljYWwgcG9zaXRpb25zKSwgdXNlCisgICAgICAgIC8vIHF1YWRyYXRpYyBj
aGFpbmluZyB0byBhdHRlbXB0IHRvIGZpbmQgYW4gZW1wdHkgc2xvdC4gVGhlIGVxdWF0aW9uIHdl
IHVzZQorICAgICAgICAvLyBpczoKKyAgICAgICAgLy8gcG9zaXRpb24gPSAoaGFzaCArIChpICsg
aSppKSAvIDIpICUgc2l6ZSwgd2hlcmUgaSBpcyB0aGUgcHJvYmUgbnVtYmVyLgorICAgICAgICB1
aW50IHByb2JlTnVtYmVyID0gMTsKKyAgICAgICAgd2hpbGUgKGluZGljZXNbcG9zaXRpb25dLnVz
ZUNvdW50ID4gMCAmJiBwcm9iZU51bWJlciA8IE1BWF9QUk9CRV9DT1VOVCkgeworICAgICAgICAg
ICAgLy8gSWYgd2UgYWN0dWFsbHkgc3R1bWJsZWQgdXBvbiBhbiBvbGQgdmVyc2lvbiBvZiB0aGUg
a2V5IHdlIGFyZQorICAgICAgICAgICAgLy8gb3ZlcndyaXRpbmcsIHRoZW4gdXNlIHRoYXQgcG9z
aXRpb24sIGRvIG5vdCBza2lwIG92ZXIgaXQuCiAKLSAgICAgICAgaWYgKEtERV9JU1VOTElLRUxZ
KGluZGljZXNbcG9zaXRpb25dLmZpbGVOYW1lSGFzaCA9PSBrZXlIYXNoKSkgewotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmIChLREVfSVNVTkxJS0VMWShpbmRp
Y2VzW3Bvc2l0aW9uXS5maWxlTmFtZUhhc2ggPT0ga2V5SGFzaCkpIHsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAvLyBJZiB3ZSBhcmUgImN1bGxpbmci
IG9sZCBlbnRyaWVzLCBzZWUgaWYgdGhpcyBvbmUgaXMgb2xkIGFuZCBpZiBzbwotICAgICAgICAv
LyByZWR1Y2UgaXRzIHVzZSBjb3VudC4gSWYgaXQgcmVkdWNlcyB0byB6ZXJvIHRoZW4gZWxpbWlu
YXRlIGl0IGFuZAotICAgICAgICAvLyB1c2UgaXRzIG9sZCBzcG90LgorICAgICAgICAgICAgLy8g
SWYgd2UgYXJlICJjdWxsaW5nIiBvbGQgZW50cmllcywgc2VlIGlmIHRoaXMgb25lIGlzIG9sZCBh
bmQgaWYgc28KKyAgICAgICAgICAgIC8vIHJlZHVjZSBpdHMgdXNlIGNvdW50LiBJZiBpdCByZWR1
Y2VzIHRvIHplcm8gdGhlbiBlbGltaW5hdGUgaXQgYW5kCisgICAgICAgICAgICAvLyB1c2UgaXRz
IG9sZCBzcG90LgogCi0gICAgICAgIGlmIChjdWxsQ29sbGlzaW9ucyAmJiAoOjp0aW1lKDApIC0g
aW5kaWNlc1twb3NpdGlvbl0ubGFzdFVzZWRUaW1lKSA+IDYwKSB7Ci0gICAgICAgICAgICBpbmRp
Y2VzW3Bvc2l0aW9uXS51c2VDb3VudCA+Pj0gMTsKLSAgICAgICAgICAgIGlmIChpbmRpY2VzW3Bv
c2l0aW9uXS51c2VDb3VudCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAga0RlYnVnKGtzZGNBcmVh
KCkpIDw8ICJPdmVyd3JpdGluZyBleGlzdGluZyBvbGQgY2FjaGVkIGVudHJ5IGR1ZSB0byBjb2xs
aXNpb24uIjsKLSAgICAgICAgICAgICAgICBkLT5zaG0tPnJlbW92ZUVudHJ5KHBvc2l0aW9uKTsg
Ly8gUmVtb3ZlIGl0IGZpcnN0CisgICAgICAgICAgICBpZiAoY3VsbENvbGxpc2lvbnMgJiYgKDo6
dGltZSgwKSAtIGluZGljZXNbcG9zaXRpb25dLmxhc3RVc2VkVGltZSkgPiA2MCkgeworICAgICAg
ICAgICAgICAgIGluZGljZXNbcG9zaXRpb25dLnVzZUNvdW50ID4+PSAxOworICAgICAgICAgICAg
ICAgIGlmIChpbmRpY2VzW3Bvc2l0aW9uXS51c2VDb3VudCA9PSAwKSB7CisgICAgICAgICAgICAg
ICAgICAgIGtEZWJ1Zyhrc2RjQXJlYSgpKSA8PCAiT3ZlcndyaXRpbmcgZXhpc3Rpbmcgb2xkIGNh
Y2hlZCBlbnRyeSBkdWUgdG8gY29sbGlzaW9uLiI7CisgICAgICAgICAgICAgICAgICAgIGQtPnNo
bS0+cmVtb3ZlRW50cnkocG9zaXRpb24pOyAvLyBSZW1vdmUgaXQgZmlyc3QKIAotICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KIAotICAgICAgICBwb3NpdGlvbiA9IChrZXlI
YXNoICsgKHByb2JlTnVtYmVyICsgcHJvYmVOdW1iZXIgKiBwcm9iZU51bWJlcikgLyAyKQotICAg
ICAgICAgICAgICAgICAgICUgZC0+c2htLT5pbmRleFRhYmxlU2l6ZSgpOwotICAgICAgICBwcm9i
ZU51bWJlcisrOwotICAgIH0KKyAgICAgICAgICAgIHBvc2l0aW9uID0gKGtleUhhc2ggKyAocHJv
YmVOdW1iZXIgKyBwcm9iZU51bWJlciAqIHByb2JlTnVtYmVyKSAvIDIpCisgICAgICAgICAgICAg
ICAgICAgICAgICUgZC0+c2htLT5pbmRleFRhYmxlU2l6ZSgpOworICAgICAgICAgICAgcHJvYmVO
dW1iZXIrKzsKKyAgICAgICAgfQogCi0gICAgaWYgKGluZGljZXNbcG9zaXRpb25dLnVzZUNvdW50
ID4gMCAmJiBpbmRpY2VzW3Bvc2l0aW9uXS5maXJzdFBhZ2UgPj0gMCkgewotICAgICAgICBrRGVi
dWcoa3NkY0FyZWEoKSkgPDwgIk92ZXJ3cml0aW5nIGV4aXN0aW5nIGNhY2hlZCBlbnRyeSBkdWUg
dG8gY29sbGlzaW9uLiI7Ci0gICAgICAgIGQtPnNobS0+cmVtb3ZlRW50cnkocG9zaXRpb24pOyAv
LyBSZW1vdmUgaXQgZmlyc3QKLSAgICB9CisgICAgICAgIGlmIChpbmRpY2VzW3Bvc2l0aW9uXS51
c2VDb3VudCA+IDAgJiYgaW5kaWNlc1twb3NpdGlvbl0uZmlyc3RQYWdlID49IDApIHsKKyAgICAg
ICAgICAgIGtEZWJ1Zyhrc2RjQXJlYSgpKSA8PCAiT3ZlcndyaXRpbmcgZXhpc3RpbmcgY2FjaGVk
IGVudHJ5IGR1ZSB0byBjb2xsaXNpb24uIjsKKyAgICAgICAgICAgIGQtPnNobS0+cmVtb3ZlRW50
cnkocG9zaXRpb24pOyAvLyBSZW1vdmUgaXQgZmlyc3QKKyAgICAgICAgfQogCi0gICAgLy8gRGF0
YSB3aWxsIGJlIHN0b3JlZCBhcyBmaWxlTmFtZWZvb1wwUE5HaW1hZ2VkYXRhLi4uLi4KLSAgICAv
LyBTbyB0b3RhbCBzaXplIHJlcXVpcmVkIGlzIHRoZSBsZW5ndGggb2YgdGhlIGVuY29kZWQgZmls
ZSBuYW1lICsgMQotICAgIC8vIGZvciB0aGUgdHJhaWxpbmcgbnVsbCwgYW5kIHRoZW4gdGhlIGxl
bmd0aCBvZiB0aGUgaW1hZ2UgZGF0YS4KLSAgICB1aW50IGZpbGVOYW1lTGVuZ3RoID0gMSArIGVu
Y29kZWRLZXkubGVuZ3RoKCk7Ci0gICAgdWludCByZXF1aXJlZFNpemUgPSBmaWxlTmFtZUxlbmd0
aCArIGRhdGEuc2l6ZSgpOwotICAgIHVpbnQgcGFnZXNOZWVkZWQgPSBpbnRDZWlsKHJlcXVpcmVk
U2l6ZSwgZC0+c2htLT5jYWNoZVBhZ2VTaXplKCkpOwotICAgIHVpbnQgZmlyc3RQYWdlID0gKHVp
bnQpIC0xOworICAgICAgICAvLyBEYXRhIHdpbGwgYmUgc3RvcmVkIGFzIGZpbGVOYW1lZm9vXDBQ
TkdpbWFnZWRhdGEuLi4uLgorICAgICAgICAvLyBTbyB0b3RhbCBzaXplIHJlcXVpcmVkIGlzIHRo
ZSBsZW5ndGggb2YgdGhlIGVuY29kZWQgZmlsZSBuYW1lICsgMQorICAgICAgICAvLyBmb3IgdGhl
IHRyYWlsaW5nIG51bGwsIGFuZCB0aGVuIHRoZSBsZW5ndGggb2YgdGhlIGltYWdlIGRhdGEuCisg
ICAgICAgIHVpbnQgZmlsZU5hbWVMZW5ndGggPSAxICsgZW5jb2RlZEtleS5sZW5ndGgoKTsKKyAg
ICAgICAgdWludCByZXF1aXJlZFNpemUgPSBmaWxlTmFtZUxlbmd0aCArIGRhdGEuc2l6ZSgpOwor
ICAgICAgICB1aW50IHBhZ2VzTmVlZGVkID0gaW50Q2VpbChyZXF1aXJlZFNpemUsIGQtPnNobS0+
Y2FjaGVQYWdlU2l6ZSgpKTsKKyAgICAgICAgdWludCBmaXJzdFBhZ2UgPSAodWludCkgLTE7CiAK
LSAgICBpZiAocGFnZXNOZWVkZWQgPj0gZC0+c2htLT5wYWdlVGFibGVTaXplKCkpIHsKLSAgICAg
ICAga1dhcm5pbmcoa3NkY0FyZWEoKSkgPDwga2V5IDw8ICJpcyB0b28gbGFyZ2UgdG8gYmUgY2Fj
aGVkLiI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgICAgIGlmIChwYWdlc05l
ZWRlZCA+PSBkLT5zaG0tPnBhZ2VUYWJsZVNpemUoKSkgeworICAgICAgICAgICAga1dhcm5pbmco
a3NkY0FyZWEoKSkgPDwga2V5IDw8ICJpcyB0b28gbGFyZ2UgdG8gYmUgY2FjaGVkLiI7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAotICAgIC8vIElmIHRoZSBjYWNoZSBo
YXMgbm8gcm9vbSwgb3IgdGhlIGZyYWdtZW50YXRpb24gaXMgdG9vIGdyZWF0IHRvIGZpbmQKLSAg
ICAvLyB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGZyZWUgcGFnZXMsIHRha2Ug
YWN0aW9uLgotICAgIGlmIChwYWdlc05lZWRlZCA+IGQtPnNobS0+Y2FjaGVBdmFpbCB8fAotICAg
ICAgIChmaXJzdFBhZ2UgPSBkLT5zaG0tPmZpbmRFbXB0eVBhZ2VzKHBhZ2VzTmVlZGVkKSkgPj0g
ZC0+c2htLT5wYWdlVGFibGVTaXplKCkpCi0gICAgewotICAgICAgICAvLyBJZiB3ZSBoYXZlIGVu
b3VnaCBmcmVlIHNwYWNlIGp1c3QgZGVmcmFnbWVudAotICAgICAgICB1aW50IGZyZWVQYWdlc0Rl
c2lyZWQgPSAzICogcU1heCgxdSwgcGFnZXNOZWVkZWQgLyAyKTsKLQotICAgICAgICBpZiAoZC0+
c2htLT5jYWNoZUF2YWlsID4gZnJlZVBhZ2VzRGVzaXJlZCkgewotICAgICAgICAgICAgLy8gVE9E
TzogSG93IHRoZSBoZWxsIGxvbmcgZG9lcyB0aGlzIGFjdHVhbGx5IHRha2Ugb24gcmVhbAotICAg
ICAgICAgICAgLy8gY2FjaGVzPwotICAgICAgICAgICAgZC0+c2htLT5kZWZyYWdtZW50KCk7Ci0g
ICAgICAgICAgICBmaXJzdFBhZ2UgPSBkLT5zaG0tPmZpbmRFbXB0eVBhZ2VzKHBhZ2VzTmVlZGVk
KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGFscmVh
ZHkgaGF2ZSBmcmVlIHBhZ2VzIHdlIGRvbid0IHdhbnQgdG8gcmVtb3ZlIGEgdG9uCi0gICAgICAg
ICAgICAvLyBleHRyYS4gSG93ZXZlciB3ZSBjYW4ndCByZWx5IG9uIHRoZSByZXR1cm4gdmFsdWUg
b2YKLSAgICAgICAgICAgIC8vIHJlbW92ZVVzZWRQYWdlcyBnaXZpbmcgdXMgYSBnb29kIGxvY2F0
aW9uIHNpbmNlIHdlJ3JlIG5vdAotICAgICAgICAgICAgLy8gcGFzc2luZyBpbiB0aGUgYWN0dWFs
IG51bWJlciBvZiBwYWdlcyB0aGF0IHdlIG5lZWQuCi0gICAgICAgICAgICBkLT5zaG0tPnJlbW92
ZVVzZWRQYWdlcyhxTWluKDIgKiBmcmVlUGFnZXNEZXNpcmVkLCBkLT5zaG0tPnBhZ2VUYWJsZVNp
emUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gZC0+c2htLT5jYWNo
ZUF2YWlsKTsKLSAgICAgICAgICAgIGZpcnN0UGFnZSA9IGQtPnNobS0+ZmluZEVtcHR5UGFnZXMo
cGFnZXNOZWVkZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZpcnN0UGFnZSA+PSBkLT5z
aG0tPnBhZ2VUYWJsZVNpemUoKSB8fAotICAgICAgICAgICBkLT5zaG0tPmNhY2hlQXZhaWwgPCBw
YWdlc05lZWRlZCkKKyAgICAgICAgLy8gSWYgdGhlIGNhY2hlIGhhcyBubyByb29tLCBvciB0aGUg
ZnJhZ21lbnRhdGlvbiBpcyB0b28gZ3JlYXQgdG8gZmluZAorICAgICAgICAvLyB0aGUgcmVxdWly
ZWQgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGZyZWUgcGFnZXMsIHRha2UgYWN0aW9uLgorICAgICAg
ICBpZiAocGFnZXNOZWVkZWQgPiBkLT5zaG0tPmNhY2hlQXZhaWwgfHwKKyAgICAgICAgICAgKGZp
cnN0UGFnZSA9IGQtPnNobS0+ZmluZEVtcHR5UGFnZXMocGFnZXNOZWVkZWQpKSA+PSBkLT5zaG0t
PnBhZ2VUYWJsZVNpemUoKSkKICAgICAgICAgewotICAgICAgICAgICAga0Vycm9yKGtzZGNBcmVh
KCkpIDw8ICJVbmFibGUgdG8gZnJlZSB1cCBtZW1vcnkgZm9yIiA8PCBrZXk7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGVub3VnaCBmcmVlIHNw
YWNlIGp1c3QgZGVmcmFnbWVudAorICAgICAgICAgICAgdWludCBmcmVlUGFnZXNEZXNpcmVkID0g
MyAqIHFNYXgoMXUsIHBhZ2VzTmVlZGVkIC8gMik7CisKKyAgICAgICAgICAgIGlmIChkLT5zaG0t
PmNhY2hlQXZhaWwgPiBmcmVlUGFnZXNEZXNpcmVkKSB7CisgICAgICAgICAgICAgICAgLy8gVE9E
TzogSG93IHRoZSBoZWxsIGxvbmcgZG9lcyB0aGlzIGFjdHVhbGx5IHRha2Ugb24gcmVhbAorICAg
ICAgICAgICAgICAgIC8vIGNhY2hlcz8KKyAgICAgICAgICAgICAgICBkLT5zaG0tPmRlZnJhZ21l
bnQoKTsKKyAgICAgICAgICAgICAgICBmaXJzdFBhZ2UgPSBkLT5zaG0tPmZpbmRFbXB0eVBhZ2Vz
KHBhZ2VzTmVlZGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBmcmVlIHBhZ2VzIHdlIGRvbid0IHdhbnQg
dG8gcmVtb3ZlIGEgdG9uCisgICAgICAgICAgICAgICAgLy8gZXh0cmEuIEhvd2V2ZXIgd2UgY2Fu
J3QgcmVseSBvbiB0aGUgcmV0dXJuIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgLy8gcmVtb3Zl
VXNlZFBhZ2VzIGdpdmluZyB1cyBhIGdvb2QgbG9jYXRpb24gc2luY2Ugd2UncmUgbm90CisgICAg
ICAgICAgICAgICAgLy8gcGFzc2luZyBpbiB0aGUgYWN0dWFsIG51bWJlciBvZiBwYWdlcyB0aGF0
IHdlIG5lZWQuCisgICAgICAgICAgICAgICAgZC0+c2htLT5yZW1vdmVVc2VkUGFnZXMocU1pbigy
ICogZnJlZVBhZ2VzRGVzaXJlZCwgZC0+c2htLT5wYWdlVGFibGVTaXplKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBkLT5zaG0tPmNhY2hlQXZhaWwpOworICAg
ICAgICAgICAgICAgIGZpcnN0UGFnZSA9IGQtPnNobS0+ZmluZEVtcHR5UGFnZXMocGFnZXNOZWVk
ZWQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZmlyc3RQYWdlID49IGQtPnNo
bS0+cGFnZVRhYmxlU2l6ZSgpIHx8CisgICAgICAgICAgICAgICBkLT5zaG0tPmNhY2hlQXZhaWwg
PCBwYWdlc05lZWRlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBrRXJyb3Ioa3Nk
Y0FyZWEoKSkgPDwgIlVuYWJsZSB0byBmcmVlIHVwIG1lbW9yeSBmb3IiIDw8IGtleTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9
CiAKLSAgICAvLyBVcGRhdGUgcGFnZSB0YWJsZQotICAgIFBhZ2VUYWJsZUVudHJ5ICp0YWJsZSA9
IGQtPnNobS0+cGFnZVRhYmxlKCk7Ci0gICAgZm9yICh1aW50IGkgPSAwOyBpIDwgcGFnZXNOZWVk
ZWQ7ICsraSkgewotICAgICAgICB0YWJsZVtmaXJzdFBhZ2UgKyBpXS5pbmRleCA9IHBvc2l0aW9u
OwotICAgIH0KKyAgICAgICAgLy8gVXBkYXRlIHBhZ2UgdGFibGUKKyAgICAgICAgUGFnZVRhYmxl
RW50cnkgKnRhYmxlID0gZC0+c2htLT5wYWdlVGFibGUoKTsKKyAgICAgICAgZm9yICh1aW50IGkg
PSAwOyBpIDwgcGFnZXNOZWVkZWQ7ICsraSkgeworICAgICAgICAgICAgdGFibGVbZmlyc3RQYWdl
ICsgaV0uaW5kZXggPSBwb3NpdGlvbjsKKyAgICAgICAgfQogCi0gICAgLy8gVXBkYXRlIGluZGV4
Ci0gICAgaW5kaWNlc1twb3NpdGlvbl0uZmlsZU5hbWVIYXNoID0ga2V5SGFzaDsKLSAgICBpbmRp
Y2VzW3Bvc2l0aW9uXS50b3RhbEl0ZW1TaXplID0gcmVxdWlyZWRTaXplOwotICAgIGluZGljZXNb
cG9zaXRpb25dLnVzZUNvdW50ID0gMTsKLSAgICBpbmRpY2VzW3Bvc2l0aW9uXS5hZGRUaW1lID0g
Ojp0aW1lKDApOwotICAgIGluZGljZXNbcG9zaXRpb25dLmxhc3RVc2VkVGltZSA9IGluZGljZXNb
cG9zaXRpb25dLmFkZFRpbWU7Ci0gICAgaW5kaWNlc1twb3NpdGlvbl0uZmlyc3RQYWdlID0gZmly
c3RQYWdlOworICAgICAgICAvLyBVcGRhdGUgaW5kZXgKKyAgICAgICAgaW5kaWNlc1twb3NpdGlv
bl0uZmlsZU5hbWVIYXNoID0ga2V5SGFzaDsKKyAgICAgICAgaW5kaWNlc1twb3NpdGlvbl0udG90
YWxJdGVtU2l6ZSA9IHJlcXVpcmVkU2l6ZTsKKyAgICAgICAgaW5kaWNlc1twb3NpdGlvbl0udXNl
Q291bnQgPSAxOworICAgICAgICBpbmRpY2VzW3Bvc2l0aW9uXS5hZGRUaW1lID0gOjp0aW1lKDAp
OworICAgICAgICBpbmRpY2VzW3Bvc2l0aW9uXS5sYXN0VXNlZFRpbWUgPSBpbmRpY2VzW3Bvc2l0
aW9uXS5hZGRUaW1lOworICAgICAgICBpbmRpY2VzW3Bvc2l0aW9uXS5maXJzdFBhZ2UgPSBmaXJz
dFBhZ2U7CiAKLSAgICAvLyBVcGRhdGUgY2FjaGUKLSAgICBkLT5zaG0tPmNhY2hlQXZhaWwgLT0g
cGFnZXNOZWVkZWQ7CisgICAgICAgIC8vIFVwZGF0ZSBjYWNoZQorICAgICAgICBkLT5zaG0tPmNh
Y2hlQXZhaWwgLT0gcGFnZXNOZWVkZWQ7CiAKLSAgICAvLyBBY3R1YWxseSBtb3ZlIHRoZSBkYXRh
IGluIHBsYWNlCi0gICAgdm9pZCAqZGF0YVBhZ2UgPSBkLT5zaG0tPnBhZ2UoZmlyc3RQYWdlKTsK
KyAgICAgICAgLy8gQWN0dWFsbHkgbW92ZSB0aGUgZGF0YSBpbiBwbGFjZQorICAgICAgICB2b2lk
ICpkYXRhUGFnZSA9IGQtPnNobS0+cGFnZShmaXJzdFBhZ2UpOwogCi0gICAgLy8gQ2FzdCBmb3Ig
Ynl0ZS1zaXplZCBwb2ludGVyIGFyaXRobWV0aWMKLSAgICB1Y2hhciAqc3RhcnRPZlBhZ2VEYXRh
ID0gcmVpbnRlcnByZXRfY2FzdDx1Y2hhciAqPihkYXRhUGFnZSk7Ci0gICAgOjptZW1jcHkoc3Rh
cnRPZlBhZ2VEYXRhLCBlbmNvZGVkS2V5LmNvbnN0RGF0YSgpLCBmaWxlTmFtZUxlbmd0aCk7Ci0g
ICAgOjptZW1jcHkoc3RhcnRPZlBhZ2VEYXRhICsgZmlsZU5hbWVMZW5ndGgsIGRhdGEuY29uc3RE
YXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgLy8gQ2FzdCBmb3IgYnl0ZS1zaXplZCBwb2lu
dGVyIGFyaXRobWV0aWMKKyAgICAgICAgdWNoYXIgKnN0YXJ0T2ZQYWdlRGF0YSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWNoYXIgKj4oZGF0YVBhZ2UpOworICAgICAgICA6Om1lbWNweShzdGFydE9mUGFn
ZURhdGEsIGVuY29kZWRLZXkuY29uc3REYXRhKCksIGZpbGVOYW1lTGVuZ3RoKTsKKyAgICAgICAg
OjptZW1jcHkoc3RhcnRPZlBhZ2VEYXRhICsgZmlsZU5hbWVMZW5ndGgsIGRhdGEuY29uc3REYXRh
KCksIGRhdGEuc2l6ZSgpKTsKIAotICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgY2F0Y2goS1NEQ0NvcnJ1cHRlZCkgeworICAgICAgICBkLT5yZWNvdmVy
Q29ycnVwdGVkQ2FjaGUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH0KIAogYm9v
bCBLU2hhcmVkRGF0YUNhY2hlOjpmaW5kKGNvbnN0IFFTdHJpbmcgJmtleSwgUUJ5dGVBcnJheSAq
ZGVzdGluYXRpb24pIGNvbnN0CiB7Ci0gICAgaWYgKCFkLT5zaG0pIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KKyAgICB0cnkgeworICAgICAgICBQcml2YXRlOjpDYWNoZUxvY2tlciBs
b2NrKGQpOworICAgICAgICBpZiAobG9jay5mYWlsZWQoKSkgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CiAKLSAgICBQcml2YXRlOjpDYWNoZUxvY2tlciBsb2NrKGQpOwot
ICAgIGlmIChsb2NrLmZhaWxlZCgpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Cisg
ICAgICAgIC8vIFNlYXJjaCBpbiB0aGUgaW5kZXggZm9yIG91ciBkYXRhLCBoYXNoZWQgYnkga2V5
OworICAgICAgICBRQnl0ZUFycmF5IGVuY29kZWRLZXkgPSBrZXkudG9VdGY4KCk7CisgICAgICAg
IHFpbnQzMiBlbnRyeSA9IGQtPnNobS0+ZmluZE5hbWVkRW50cnkoZW5jb2RlZEtleSk7CiAKLSAg
ICAvLyBTZWFyY2ggaW4gdGhlIGluZGV4IGZvciBvdXIgZGF0YSwgaGFzaGVkIGJ5IGtleTsKLSAg
ICBRQnl0ZUFycmF5IGVuY29kZWRLZXkgPSBrZXkudG9VdGY4KCk7Ci0gICAgcWludDMyIGVudHJ5
ID0gZC0+c2htLT5maW5kTmFtZWRFbnRyeShlbmNvZGVkS2V5KTsKKyAgICAgICAgaWYgKGVudHJ5
ID49IDApIHsKKyAgICAgICAgICAgIGNvbnN0IEluZGV4VGFibGVFbnRyeSAqaGVhZGVyID0gJmQt
PnNobS0+aW5kZXhUYWJsZSgpW2VudHJ5XTsKKyAgICAgICAgICAgIGNvbnN0IHZvaWQgKnJlc3Vs
dFBhZ2UgPSBkLT5zaG0tPnBhZ2UoaGVhZGVyLT5maXJzdFBhZ2UpOwogCi0gICAgaWYgKGVudHJ5
ID49IDApIHsKLSAgICAgICAgY29uc3QgSW5kZXhUYWJsZUVudHJ5ICpoZWFkZXIgPSAmZC0+c2ht
LT5pbmRleFRhYmxlKClbZW50cnldOwotICAgICAgICBjb25zdCB2b2lkICpyZXN1bHRQYWdlID0g
ZC0+c2htLT5wYWdlKGhlYWRlci0+Zmlyc3RQYWdlKTsKKyAgICAgICAgICAgIGhlYWRlci0+dXNl
Q291bnQrKzsKKyAgICAgICAgICAgIGhlYWRlci0+bGFzdFVzZWRUaW1lID0gOjp0aW1lKDApOwog
Ci0gICAgICAgIGhlYWRlci0+dXNlQ291bnQrKzsKLSAgICAgICAgaGVhZGVyLT5sYXN0VXNlZFRp
bWUgPSA6OnRpbWUoMCk7CisgICAgICAgICAgICAvLyBPdXIgaXRlbSBpcyB0aGUga2V5IGZvbGxv
d2VkIGltbWVkaWF0ZWx5IGJ5IHRoZSBkYXRhLCBzbyBza2lwCisgICAgICAgICAgICAvLyBwYXN0
IHRoZSBrZXkuCisgICAgICAgICAgICBjb25zdCBjaGFyICpjYWNoZURhdGEgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIgKj4ocmVzdWx0UGFnZSk7CisgICAgICAgICAgICBjYWNoZURhdGEg
Kz0gZW5jb2RlZEtleS5zaXplKCk7CisgICAgICAgICAgICBjYWNoZURhdGErKzsgLy8gU2tpcCB0
cmFpbGluZyBudWxsIC0tIG5vdyB3ZSdyZSBwb2ludGluZyB0byBzdGFydCBvZiBkYXRhCiAKLSAg
ICAgICAgLy8gT3VyIGl0ZW0gaXMgdGhlIGtleSBmb2xsb3dlZCBpbW1lZGlhdGVseSBieSB0aGUg
ZGF0YSwgc28gc2tpcAotICAgICAgICAvLyBwYXN0IHRoZSBrZXkuCi0gICAgICAgIGNvbnN0IGNo
YXIgKmNhY2hlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAqPihyZXN1bHRQYWdl
KTsKLSAgICAgICAgY2FjaGVEYXRhICs9IGVuY29kZWRLZXkuc2l6ZSgpOwotICAgICAgICBjYWNo
ZURhdGErKzsgLy8gU2tpcCB0cmFpbGluZyBudWxsIC0tIG5vdyB3ZSdyZSBwb2ludGluZyB0byBz
dGFydCBvZiBkYXRhCisgICAgICAgICAgICBpZiAoZGVzdGluYXRpb24pIHsKKyAgICAgICAgICAg
ICAgICAqZGVzdGluYXRpb24gPSBRQnl0ZUFycmF5KGNhY2hlRGF0YSwgaGVhZGVyLT50b3RhbEl0
ZW1TaXplIC0gZW5jb2RlZEtleS5zaXplKCkgLSAxKTsKKyAgICAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoZGVzdGluYXRpb24pIHsKLSAgICAgICAgICAgICpkZXN0aW5hdGlvbiA9IFFCeXRlQXJy
YXkoY2FjaGVEYXRhLCBoZWFkZXItPnRvdGFsSXRlbVNpemUgLSBlbmNvZGVkS2V5LnNpemUoKSAt
IDEpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgY2F0Y2goS1NEQ0NvcnJ1cHRlZCkgeworICAgICAgICBkLT5y
ZWNvdmVyQ29ycnVwdGVkQ2FjaGUoKTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
NTM5LDIxICsxNjE2LDMyIEBAIGJvb2wgS1NoYXJlZERhdGFDYWNoZTo6ZmluZChjb25zdCBRU3Ry
aW5nICZrZXksIFFCeXRlQXJyYXkgKmRlc3RpbmF0aW9uKSBjb25zdAogCiB2b2lkIEtTaGFyZWRE
YXRhQ2FjaGU6OmNsZWFyKCkKIHsKLSAgICBQcml2YXRlOjpDYWNoZUxvY2tlciBsb2NrKGQpOwor
ICAgIHRyeSB7CisgICAgICAgIFByaXZhdGU6OkNhY2hlTG9ja2VyIGxvY2soZCk7CiAKLSAgICBp
ZighbG9jay5mYWlsZWQoKSkgewotICAgICAgICBkLT5zaG0tPmNsZWFyKCk7CisgICAgICAgIGlm
KCFsb2NrLmZhaWxlZCgpKSB7CisgICAgICAgICAgICBkLT5zaG0tPmNsZWFyKCk7CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goS1NEQ0NvcnJ1cHRlZCkgeworICAgICAgICBkLT5yZWNvdmVy
Q29ycnVwdGVkQ2FjaGUoKTsKICAgICB9CiB9CiAKIGJvb2wgS1NoYXJlZERhdGFDYWNoZTo6Y29u
dGFpbnMoY29uc3QgUVN0cmluZyAma2V5KSBjb25zdAogewotICAgIFByaXZhdGU6OkNhY2hlTG9j
a2VyIGxvY2soZCk7Ci0gICAgaWYgKGxvY2suZmFpbGVkKCkpIHsKKyAgICB0cnkgeworICAgICAg
ICBQcml2YXRlOjpDYWNoZUxvY2tlciBsb2NrKGQpOworICAgICAgICBpZiAobG9jay5mYWlsZWQo
KSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGQtPnNobS0+ZmluZE5hbWVkRW50cnkoa2V5LnRvVXRmOCgpKSA+PSAwOworICAgIH0KKyAg
ICBjYXRjaChLU0RDQ29ycnVwdGVkKSB7CisgICAgICAgIGQtPnJlY292ZXJDb3JydXB0ZWRDYWNo
ZSgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotCi0gICAgcmV0dXJuIGQtPnNobS0+
ZmluZE5hbWVkRW50cnkoa2V5LnRvVXRmOCgpKSA+PSAwOwogfQogCiB2b2lkIEtTaGFyZWREYXRh
Q2FjaGU6OmRlbGV0ZUNhY2hlKGNvbnN0IFFTdHJpbmcgJmNhY2hlTmFtZSkKQEAgLTE1NjksMjcg
KzE2NTcsMzkgQEAgdm9pZCBLU2hhcmVkRGF0YUNhY2hlOjpkZWxldGVDYWNoZShjb25zdCBRU3Ry
aW5nICZjYWNoZU5hbWUpCiAKIHVuc2lnbmVkIEtTaGFyZWREYXRhQ2FjaGU6OnRvdGFsU2l6ZSgp
IGNvbnN0CiB7Ci0gICAgUHJpdmF0ZTo6Q2FjaGVMb2NrZXIgbG9jayhkKTsKLSAgICBpZiAobG9j
ay5mYWlsZWQoKSkgeworICAgIHRyeSB7CisgICAgICAgIFByaXZhdGU6OkNhY2hlTG9ja2VyIGxv
Y2soZCk7CisgICAgICAgIGlmIChsb2NrLmZhaWxlZCgpKSB7CisgICAgICAgICAgICByZXR1cm4g
MHU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZC0+c2htLT5jYWNoZVNpemU7CisgICAg
fQorICAgIGNhdGNoKEtTRENDb3JydXB0ZWQpIHsKKyAgICAgICAgZC0+cmVjb3ZlckNvcnJ1cHRl
ZENhY2hlKCk7CiAgICAgICAgIHJldHVybiAwdTsKICAgICB9Ci0KLSAgICByZXR1cm4gZC0+c2ht
LT5jYWNoZVNpemU7CiB9CiAKIHVuc2lnbmVkIEtTaGFyZWREYXRhQ2FjaGU6OmZyZWVTaXplKCkg
Y29uc3QKIHsKLSAgICBQcml2YXRlOjpDYWNoZUxvY2tlciBsb2NrKGQpOwotICAgIGlmIChsb2Nr
LmZhaWxlZCgpKSB7CisgICAgdHJ5IHsKKyAgICAgICAgUHJpdmF0ZTo6Q2FjaGVMb2NrZXIgbG9j
ayhkKTsKKyAgICAgICAgaWYgKGxvY2suZmFpbGVkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiAw
dTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkLT5zaG0tPmNhY2hlQXZhaWwgKiBkLT5z
aG0tPmNhY2hlUGFnZVNpemUoKTsKKyAgICB9CisgICAgY2F0Y2goS1NEQ0NvcnJ1cHRlZCkgewor
ICAgICAgICBkLT5yZWNvdmVyQ29ycnVwdGVkQ2FjaGUoKTsKICAgICAgICAgcmV0dXJuIDB1Owog
ICAgIH0KLQotICAgIHJldHVybiBkLT5zaG0tPmNhY2hlQXZhaWwgKiBkLT5zaG0tPmNhY2hlUGFn
ZVNpemUoKTsKIH0KIAogS1NoYXJlZERhdGFDYWNoZTo6RXZpY3Rpb25Qb2xpY3kgS1NoYXJlZERh
dGFDYWNoZTo6ZXZpY3Rpb25Qb2xpY3koKSBjb25zdAogewotICAgIGlmIChkLT5zaG0pIHsKKyAg
ICBpZiAoZCAmJiBkLT5zaG0pIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEV2aWN0aW9u
UG9saWN5PihkLT5zaG0tPmV2aWN0aW9uUG9saWN5LmZldGNoQW5kQWRkQWNxdWlyZSgwKSk7CiAg
ICAgfQogCkBAIC0xNTk4LDE0ICsxNjk4LDE0IEBAIEtTaGFyZWREYXRhQ2FjaGU6OkV2aWN0aW9u
UG9saWN5IEtTaGFyZWREYXRhQ2FjaGU6OmV2aWN0aW9uUG9saWN5KCkgY29uc3QKIAogdm9pZCBL
U2hhcmVkRGF0YUNhY2hlOjpzZXRFdmljdGlvblBvbGljeShFdmljdGlvblBvbGljeSBuZXdQb2xp
Y3kpCiB7Ci0gICAgaWYgKGQtPnNobSkgeworICAgIGlmIChkICYmIGQtPnNobSkgewogICAgICAg
ICBkLT5zaG0tPmV2aWN0aW9uUG9saWN5LmZldGNoQW5kU3RvcmVSZWxlYXNlKHN0YXRpY19jYXN0
PGludD4obmV3UG9saWN5KSk7CiAgICAgfQogfQogCiB1bnNpZ25lZCBLU2hhcmVkRGF0YUNhY2hl
Ojp0aW1lc3RhbXAoKSBjb25zdAogewotICAgIGlmIChkLT5zaG0pIHsKKyAgICBpZiAoZCAmJiBk
LT5zaG0pIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihkLT5zaG0tPmNh
Y2hlVGltZXN0YW1wLmZldGNoQW5kQWRkQWNxdWlyZSgwKSk7CiAgICAgfQogCkBAIC0xNjE0LDcg
KzE3MTQsNyBAQCB1bnNpZ25lZCBLU2hhcmVkRGF0YUNhY2hlOjp0aW1lc3RhbXAoKSBjb25zdAog
CiB2b2lkIEtTaGFyZWREYXRhQ2FjaGU6OnNldFRpbWVzdGFtcCh1bnNpZ25lZCBuZXdUaW1lc3Rh
bXApCiB7Ci0gICAgaWYgKGQtPnNobSkgeworICAgIGlmIChkICYmIGQtPnNobSkgewogICAgICAg
ICBkLT5zaG0tPmNhY2hlVGltZXN0YW1wLmZldGNoQW5kU3RvcmVSZWxlYXNlKHN0YXRpY19jYXN0
PGludD4obmV3VGltZXN0YW1wKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEva2RlY29yZS91dGls
L2tzaGFyZWRkYXRhY2FjaGVfcC5oIGIva2RlY29yZS91dGlsL2tzaGFyZWRkYXRhY2FjaGVfcC5o
CmluZGV4IGNmZjM0YWEuLjA0YThkNWUgMTAwNjQ0Ci0tLSBhL2tkZWNvcmUvdXRpbC9rc2hhcmVk
ZGF0YWNhY2hlX3AuaAorKysgYi9rZGVjb3JlL3V0aWwva3NoYXJlZGRhdGFjYWNoZV9wLmgKQEAg
LTI2MSw2ICsyNjEsNyBAQCBwdWJsaWM6CiAvLyBjYWNoZSBhbmQgdXNlZCBieSBtdWx0aXBsZSBw
cm9jZXNzZXMsIHRoZXJlZm9yZSB5b3Ugc2hvdWxkIGNvbnNpZGVyIHRoaXMKIC8vIGEgdmVyc2lv
bmVkIGZpZWxkLCBkbyBub3QgcmUtYXJyYW5nZS4KIGVudW0gU2hhcmVkTG9ja0lkIHsKKyAgICBM
T0NLVFlQRV9JTlZBTElEICAgPSAwLAogICAgIExPQ0tUWVBFX01VVEVYICAgICA9IDEsICAvLyBw
dGhyZWFkX211dGV4CiAgICAgTE9DS1RZUEVfU0VNQVBIT1JFID0gMiAgIC8vIHNlbV90CiB9Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>