<?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>5332</bug_id>
          
          <creation_ts>2005-10-10 19:37:46 -0700</creation_ts>
          <short_desc>Make HashMap/HashSet support non-POD types</short_desc>
          <delta_ts>2005-12-22 18:33:13 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>21761</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-10-10 19:37:46 -0700</bug_when>
    <thetext>It would be really useful if HashMap and HashSet supported non-POD types, so that they could use 
SharedPtrs for instance as key and value types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21762</commentid>
    <comment_count>1</comment_count>
      <attachid>4303</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-10-10 19:39:47 -0700</bug_when>
    <thetext>Created attachment 4303
blind stab at it

JavaScriptCore and WebCore compile and work, but I did not performance test,
nor did I check that it works as advertised for any non-POD types, SharedPtr or
otherwise. For types besides SharedPtr you have to make your own HashTraits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21790</commentid>
    <comment_count>2</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-10-11 01:06:55 -0700</bug_when>
    <thetext>Darin points out I should use swap. But I would need to figure out the right way to do swap generically 
while letting classes specialize it to avoid redundant ref/deref.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26326</commentid>
    <comment_count>3</comment_count>
      <attachid>5211</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-12-21 15:25:57 -0800</bug_when>
    <thetext>Created attachment 5211
a real fix, that I actually tested and know works

Here&apos;s a real fix. I tested it and was careful to avoid gratuitous copying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26330</commentid>
    <comment_count>4</comment_count>
      <attachid>5211</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-21 20:24:03 -0800</bug_when>
    <thetext>Comment on attachment 5211
a real fix, that I actually tested and know works

I see some tabs in the ChangeLog.

There&apos;s a sentence fragment in the ChangeLog.

That space you removed from array_object.cpp is one I included intentionally.
When I have to add a space at the end of a template declaration, I like to add
a corresponding space at the start so it looks symmetrical. We could
standardize our handling of this -- I&apos;d be happy to switch to your usage.

This line:

+	 ValueType tmp(key,mapped);

is missing a space after a comma.

In HashMap.h you sometimes say std::pair and other times just pair. You should
consistently use just pair.

It&apos;s a bit annoying that you asked someone on our team to fix the &quot;is integer&quot;
thing, and then I &quot;coerced&quot; Geoff into doing it this afternoon, and then you
removed the code that uses it!

I would have left out the swap member function for RefPtr, made the inline swap
function a friend, and had it use std::swap to swap the two m_ptr fields
instead of hand-writing a swap.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26363</commentid>
    <comment_count>5</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-12-22 02:37:23 -0800</bug_when>
    <thetext>I will fix the minor issues before landing but I think I may keep the swap() member function because it 
seems to be common practice to do it that way. I have locally merged my change with Geoff&apos;s isInteger fix 
which is great IMO.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4303</attachid>
            <date>2005-10-10 19:39:47 -0700</date>
            <delta_ts>2005-12-21 15:25:57 -0800</delta_ts>
            <desc>blind stab at it</desc>
            <filename>hash-non-pod.patch.txt</filename>
            <type>text/plain</type>
            <size>7407</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IGt4bWxjb3JlL0hhc2hUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L0phdmFTY3JpcHRDb3JlL2t4bWxjb3JlL0hhc2hUYWJsZS5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMgpkaWZmIC11IC1wIC1yMS4yIGt4bWxjb3JlL0hhc2hUYWJsZS5jcHAKLS0tIGt4
bWxjb3JlL0hhc2hUYWJsZS5jcHAJMyBPY3QgMjAwNSAyMToxMTo1OCAtMDAwMAkxLjIKKysrIGt4
bWxjb3JlL0hhc2hUYWJsZS5jcHAJMTEgT2N0IDIwMDUgMDI6MzQ6MzMgLTAwMDAKQEAgLTIwLDcg
KzIwLDcgQEAKICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJoYXNodGFibGUu
aCIKKyNpbmNsdWRlICJIYXNoVGFibGUuaCIKIAogbmFtZXNwYWNlIEtYTUxDb3JlIHsKIApJbmRl
eDoga3htbGNvcmUvSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0ph
dmFTY3JpcHRDb3JlL2t4bWxjb3JlL0hhc2hUYWJsZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtdSAtcCAtcjEuMSBreG1sY29yZS9IYXNoVGFibGUuaAotLS0ga3htbGNvcmUvSGFz
aFRhYmxlLmgJMjggU2VwIDIwMDUgMjI6MDE6MTcgLTAwMDAJMS4xCisrKyBreG1sY29yZS9IYXNo
VGFibGUuaAkxMSBPY3QgMjAwNSAwMjozNDozMyAtMDAwMApAQCAtMjQsNiArMjQsNyBAQAogI2Rl
ZmluZSBLWE1MQ09SRV9IQVNIX1RBQkxFX0gKIAogI2luY2x1ZGUgIkZhc3RNYWxsb2MuaCIKKyNp
bmNsdWRlICJIYXNoVHJhaXRzLmgiCiAjaW5jbHVkZSA8dXRpbGl0eT4KIAogbmFtZXNwYWNlIEtY
TUxDb3JlIHsKQEAgLTE3OSw3ICsxODAsNyBAQCBuYW1lc3BhY2UgS1hNTENvcmUgewogICAgICAg
ICB0eXBlZGVmIFZhbHVlIFZhbHVlVHlwZTsKICAgICAgICAgCiAgICAgICAgIEhhc2hUYWJsZSgp
IDogbV90YWJsZSgwKSwgbV90YWJsZVNpemUoMCksIG1fdGFibGVTaXplTWFzaygwKSwgbV9rZXlD
b3VudCgwKSwgbV9kZWxldGVkQ291bnQoMCkge30KLSAgICAgICAgfkhhc2hUYWJsZSgpIHsgZmFz
dEZyZWUobV90YWJsZSk7IH0KKyAgICAgICAgfkhhc2hUYWJsZSgpIHsgZGVhbGxvY2F0ZVRhYmxl
KG1fdGFibGUsIG1fdGFibGVTaXplKTsgfQogICAgICAgICAKICAgICAgICAgSGFzaFRhYmxlKGNv
bnN0IEhhc2hUYWJsZSYgb3RoZXIpOwogICAgICAgICB2b2lkIHN3YXAoY29uc3QgSGFzaFRhYmxl
JiBvdGhlcik7CkBAIC0yMjEsNiArMjIyLDcgQEAgbmFtZXNwYWNlIEtYTUxDb3JlIHsKICAgICAg
ICAgc3RhdGljIEtleVR5cGUgZXh0cmFjdEtleShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSB7IHJl
dHVybiBFeHRyYWN0S2V5KHZhbHVlKTsgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIFZhbHVl
VHlwZSAqYWxsb2NhdGVUYWJsZShpbnQgc2l6ZSk7CisgICAgICAgIHN0YXRpYyB2b2lkIGRlYWxs
b2NhdGVUYWJsZShWYWx1ZVR5cGUgKiwgaW50IHNpemUpOwogICAgICAgICAKICAgICAgICAgdHlw
ZWRlZiBzdGQ6OnBhaXI8VmFsdWVUeXBlICosIGJvb2w+IExvb2t1cFR5cGU7CiAgICAgICAgIHR5
cGVkZWYgc3RkOjpwYWlyPExvb2t1cFR5cGUsIHVuc2lnbmVkPiBGdWxsTG9va3VwVHlwZTsKQEAg
LTI0MCw3ICsyNDIsNyBAQCBuYW1lc3BhY2UgS1hNTENvcmUgewogICAgICAgICB2b2lkIHJlaGFz
aChpbnQgbmV3VGFibGVTaXplKTsKICAgICAgICAgdm9pZCByZWluc2VydChjb25zdCBWYWx1ZVR5
cGUmKTsKICAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGNsZWFyQnVja2V0KFZhbHVlVHlw
ZSYga2V5KSB7IGtleSA9IFRyYWl0czo6ZW1wdHlWYWx1ZSgpO30KKyAgICAgICAgc3RhdGljIHZv
aWQgY2xlYXJCdWNrZXQoVmFsdWVUeXBlJiBrZXkpIHsgbmV3ICgma2V5KSBWYWx1ZVR5cGUoVHJh
aXRzOjplbXB0eVZhbHVlKCkpO30KICAgICAgICAgc3RhdGljIHZvaWQgZGVsZXRlQnVja2V0KFZh
bHVlVHlwZSYga2V5KSB7IGtleSA9IFRyYWl0czo6ZGVsZXRlZFZhbHVlKCk7fQogICAgICAgICAK
ICAgICAgICAgRnVsbExvb2t1cFR5cGUgbWFrZUxvb2t1cFJlc3VsdChWYWx1ZVR5cGUgKnBvc2l0
aW9uLCBib29sIGZvdW5kLCB1bnNpZ25lZCBoYXNoKQpAQCAtNDM5LDcgKzQ0MSwyMSBAQCBuYW1l
c3BhY2UgS1hNTENvcmUgewogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQog
ICAgIH0KLSAgICAKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IEtleSBFeHRyYWN0S2V5KGNvbnN0IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0
eXBlbmFtZSBUcmFpdHM+CisgICAgaW5saW5lIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmRlYWxsb2NhdGVUYWJsZShWYWx1ZVR5
cGUgKnRhYmxlLCBpbnQgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmICghVHJhaXRzOjppc1BPRCkg
eworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodGFibGVbaV0gPT0gVHJhaXRzOjpkZWxldGVkVmFsdWUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgZGVzdHJ1Y3REZWxldGVkSWZOZWVkZWQ8VHJhaXRzPih0YWJsZVtpXSk7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAoJnRhYmxlW2ldKS0+VmFs
dWVUeXBlOjp+VmFsdWVUeXBlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZmFzdEZyZWUodGFibGUpOworICAgIH0KKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIEtleSBFeHRyYWN0S2V5KGNvbnN0IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+CiAgICAgaW5saW5lIHZvaWQgSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmV4cGFuZCgpCiAg
ICAgeyAKQEAgLTQ3OSw3ICs0OTUsNyBAQCBuYW1lc3BhY2UgS1hNTENvcmUgewogICAgICAgICAK
ICAgICAgICAgbV9kZWxldGVkQ291bnQgPSAwOwogICAgICAgICAKLSAgICAgICAgZmFzdEZyZWUo
b2xkVGFibGUpOworICAgICAgICBkZWFsbG9jYXRlVGFibGUob2xkVGFibGUsIG9sZFRhYmxlU2l6
ZSk7CiAgICAgICAgIAogICAgICAgICBjaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKICAgICB9CkBA
IC00ODcsNyArNTAzLDcgQEAgbmFtZXNwYWNlIEtYTUxDb3JlIHsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBLZXkgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAmKSwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgogICAgIGlubGluZSB2b2lk
IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+
OjpjbGVhcigpCiAgICAgewotICAgICAgICBmYXN0RnJlZShtX3RhYmxlKTsKKyAgICAgICAgZGVh
bGxvY2F0ZVRhYmxlKG1fdGFibGUsIG1fdGFibGVTaXplKTsKICAgICAgICAgbV90YWJsZSA9IDA7
CiAgICAgICAgIG1fdGFibGVTaXplID0gMDsKICAgICAgICAgbV90YWJsZVNpemVNYXNrID0gMDsK
SW5kZXg6IGt4bWxjb3JlL0hhc2hUcmFpdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvSmF2YVNjcmlwdENvcmUva3htbGNvcmUvSGFzaFRyYWl0cy5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEuMSBreG1sY29yZS9IYXNoVHJhaXRzLmgKLS0tIGt4bWxj
b3JlL0hhc2hUcmFpdHMuaAkyOCBTZXAgMjAwNSAyMjowMToxNyAtMDAwMAkxLjEKKysrIGt4bWxj
b3JlL0hhc2hUcmFpdHMuaAkxMSBPY3QgMjAwNSAwMjozNDozMyAtMDAwMApAQCAtMjUsNiArMjUs
NyBAQAogCiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDxiaXRzL2NwcF90eXBlX3RyYWl0
cy5oPgorI2luY2x1ZGUgIlNoYXJlZFB0ci5oIgogCiBuYW1lc3BhY2UgS1hNTENvcmUgewogCkBA
IC00MSwxNiArNDIsNDcgQEAgbmFtZXNwYWNlIEtYTUxDb3JlIHsKICAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHN0ZDo6X19pc19pbnRlZ2VyPFQ+OjpfTV90eXBl
OwogI2VuZGlmCiAgICAgICAgIAorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1BPRCA9IGZh
bHNlOworICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzcGVjaWFsRGVzdHJ1Y3REZWxldGVkID0g
ZmFsc2U7CisgICAgICAgIAogICAgICAgICBzdGF0aWMgdHJhaXRUeXBlIGVtcHR5VmFsdWUoKSB7
CiAgICAgICAgICAgICByZXR1cm4gdHJhaXRUeXBlKCk7CiAgICAgICAgIH0KICAgICB9OworICAg
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0cywgYm9vbCBuZWVkZWQ+CisgICAgc3RydWN0
IERlbGV0ZWREZXN0cnVjdG9yOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzPgorICAg
IHN0cnVjdCBEZWxldGVkRGVzdHJ1Y3RvcjxUcmFpdHMsIHRydWU+IHsKKyAgICAgICAgc3RhdGlj
IHZvaWQgZGVzdHJ1Y3QodHlwZW5hbWUgVHJhaXRzOjp0cmFpdFR5cGUmIHQpIAorICAgICAgICB7
CisgICAgICAgICAgICBUcmFpdHM6OmRlc3RydWN0RGVsZXRlZCh0KTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFpdHM+CisgICAgc3RydWN0IERlbGV0ZWRE
ZXN0cnVjdG9yPFRyYWl0cywgZmFsc2U+IHsKKyAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJ1Y3Qo
dHlwZW5hbWUgVHJhaXRzOjp0cmFpdFR5cGUmIHQpIAorICAgICAgICB7CisgICAgICAgICAgICB0
eXBlZGVmIHR5cGVuYW1lIFRyYWl0czo6dHJhaXRUeXBlIFRyYWl0VHlwZTsKKyAgICAgICAgICAg
ICgmdCktPlRyYWl0VHlwZTo6flRyYWl0VHlwZSgpOworICAgICAgICB9CisgICAgfTsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0cz4KKyAgICBpbmxpbmUgdm9pZCBkZXN0cnVjdERlbGV0
ZWRJZk5lZWRlZCh0eXBlbmFtZSBUcmFpdHM6OnRyYWl0VHlwZSYgdCkKKyAgICB7CisgICAgICAg
IERlbGV0ZWREZXN0cnVjdG9yPFRyYWl0cywgVHJhaXRzOjpzcGVjaWFsRGVzdHJ1Y3REZWxldGVk
Pjo6ZGVzdHJ1Y3QodCk7CisgICAgfQogCiAgICAgLy8gbWF5IG5vdCBiZSBhcHByb3ByaWF0ZSBm
b3IgYWxsIHVzZXMgc2luY2UgaXQgd291bGQgZGlzYWxsb3cgMCBhbmQgLTEgYXMga2V5cwogICAg
IHRlbXBsYXRlPD4KICAgICBzdHJ1Y3QgSGFzaFRyYWl0czxpbnQ+IHsKICAgICAgICAgdHlwZWRl
ZiBpbnQgdHJhaXRUeXBlOwogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNa
ZXJvID0gdHJ1ZTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNQT0QgPSB0cnVlOworICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBzcGVjaWFsRGVzdHJ1Y3REZWxldGVkID0gZmFsc2U7CiAg
ICAgICAgIAogICAgICAgICBzdGF0aWMgdHJhaXRUeXBlIGVtcHR5VmFsdWUoKSB7CiAgICAgICAg
ICAgICByZXR1cm4gMDsKQEAgLTY0LDYgKzk2LDggQEAgbmFtZXNwYWNlIEtYTUxDb3JlIHsKICAg
ICBzdHJ1Y3QgSGFzaFRyYWl0czxQICo+IHsKICAgICAgICAgdHlwZWRlZiBQICp0cmFpdFR5cGU7
CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOworICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1BPRCA9IHRydWU7CisgICAgICAgIHN0YXRpYyBjb25z
dCBib29sIHNwZWNpYWxEZXN0cnVjdERlbGV0ZWQgPSBmYWxzZTsKICAgICAgICAgCiAgICAgICAg
IHN0YXRpYyB0cmFpdFR5cGUgZW1wdHlWYWx1ZSgpIHsKICAgICAgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PFAgKj4oMCk7CkBAIC03Myw2ICsxMDcsMjEgQEAgbmFtZXNwYWNlIEtYTUxD
b3JlIHsKICAgICAgICAgfQogICAgIH07CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQPgorICAg
IHN0cnVjdCBIYXNoVHJhaXRzPFNoYXJlZFB0cjxQPiA+IHsKKyAgICAgICAgdHlwZWRlZiBTaGFy
ZWRQdHI8UD4gdHJhaXRUeXBlOworICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVl
SXNaZXJvID0gdHJ1ZTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNQT0QgPSBmYWxzZTsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc3BlY2lhbERlc3RydWN0RGVsZXRlZCA9IHRydWU7
CisgICAgICAgIAorICAgICAgICBzdGF0aWMgdHJhaXRUeXBlIGVtcHR5VmFsdWUoKSB7CisgICAg
ICAgICAgICByZXR1cm4gU2hhcmVkUHRyPFA+KCk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGlj
IHRyYWl0VHlwZSBkZWxldGVkVmFsdWUoKSB7CisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxTaGFyZWRQdHI8UD4gPigtMSk7CisgICAgICAgIH0KKyAgICB9OworCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRmlyc3RUcmFpdHMsIHR5cGVuYW1lIFNlY29uZFRyYWl0cz4KICAgICBz
dHJ1Y3QgUGFpckhhc2hUcmFpdHMgewogICAgIHByaXZhdGU6CkBAIC04Miw2ICsxMzEsMTMgQEAg
bmFtZXNwYWNlIEtYTUxDb3JlIHsKICAgICAgICAgdHlwZWRlZiBwYWlyPEZpcnN0VHlwZSwgU2Vj
b25kVHlwZT4gdHJhaXRUeXBlOwogICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
ZW1wdHlWYWx1ZUlzWmVybyA9IEZpcnN0VHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvICYmIFNlY29u
ZFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybzsKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNQ
T0QgPSBGaXJzdFRyYWl0czo6aXNQT0QgJiYgU2Vjb25kVHJhaXRzOjppc1BPRDsKKyAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgc3BlY2lhbERlc3RydWN0RGVsZXRlZCA9IEZpcnN0VHJhaXRzOjpz
cGVjaWFsRGVzdHJ1Y3REZWxldGVkIHx8IFNlY29uZFRyYWl0czo6c3BlY2lhbERlc3RydWN0RGVs
ZXRlZDsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIGRlc3RydWN0RGVsZXRlZCh0cmFp
dFR5cGUgJnQpIHsKKyAgICAgICAgICAgIGRlc3RydWN0RGVsZXRlZElmTmVlZGVkPEZpcnN0VHJh
aXRzPih0LmZpcnN0KTsKKyAgICAgICAgICAgIGRlc3RydWN0RGVsZXRlZElmTmVlZGVkPFNlY29u
ZFRyYWl0cz4odC5zZWNvbmQpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMg
dHJhaXRUeXBlIGVtcHR5VmFsdWUoKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJhaXRUeXBlKEZp
cnN0VHJhaXRzOjplbXB0eVZhbHVlKCksIFNlY29uZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5211</attachid>
            <date>2005-12-21 15:25:57 -0800</date>
            <delta_ts>2005-12-21 20:24:03 -0800</delta_ts>
            <desc>a real fix, that I actually tested and know works</desc>
            <filename>HashTable-non-POD.patch.txt</filename>
            <type>text/plain</type>
            <size>61759</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkx
NwpkaWZmIC1wIC11IC1yMS45MTcgSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCi0tLSBKYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cJMjAgRGVjIDIwMDUgMjA6NDg6NTUgLTAwMDAJMS45MTcKKysrIEph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkyMSBEZWMgMjAwNSAyMzoyNDowNyAtMDAwMApAQCAtMSwz
ICsxLDkxIEBACisyMDA1LTEyLTIxICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwktIE1ha2UgSGFzaE1h
cC9IYXNoU2V0IHN1cHBvcnQgbm9uLVBPRCB0eXBlcworCWh0dHA6Ly9idWd6aWxsYS5vcGVuZGFy
d2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzMgorCisJVGhlIGNoYW5nZXMgZm9yIHN1cHBvcnQg
YXJlIHJlbGF0aXZlbHkgc2ltcGxlLCBidXQgSSBhbHNvIG1hZGUgZXh0ZW5zaXZlIGNoYW5nZXMg
dG8KKwlhdm9pZCBjb3B5aW5nLCBzbyB0aGF0IHRoZXJlIGlzbid0IHJlZmNvdW50IHRocmFzaCB3
aGVuIHdlCisKKyAgICAgICAgKiBreG1sY29yZS9IYXNoVGFibGUuaDoKKyAgICAgICAgKEtYTUxD
b3JlOjpzd2FwKTogc3BlY2lhbGl6ZSBzd2FwIGZvciBwYWlycywgdG8gc3dhcCBlbGVtZW50cyBp
bmRpdmlkdWFsbHksCisJc28gdGhhdCBleGNlc3MgY29waWVzIGNhbiBiZSBhdm9pZGVkLgorICAg
ICAgICAoS1hNTENvcmU6Ok1vdmVyOjptb3ZlKTogVGVtcGxhdGUgZnVuY3Rpb24gdG8gZWl0aGVy
IGNvcHkgb3Igc3dhcCwgdXNlZAorCXdoZW4gdHJhbnNmZXJyaW5nIGVsZW1lbnRzIGZyb20gb2xk
IHRhYmxlIHRvIG5ldy4KKyAgICAgICAgKEtYTUxDb3JlOjpJZGVudGl0eUhhc2hUcmFuc2xhdG9y
OjpoYXNoKTogVGhlIG9sZCAiY29udmVydGluZyBsb29rdXAiIHRlbXBsYXRlcworCXRoYXQgdG9v
ayB0d28gb3IgdGhyZWUgZnVuY3Rpb24gcGFyYW1ldGVycyBub3cgdGFrZSBhIGNsYXNzIHBhcmFt
ZXRlciwgdGhpcyBpcworCXRoZSBjbGFzcyB1c2VkIHRvIGRvIGEgbm9ybWFsIGxvb2t1cC4KKyAg
ICAgICAgKEtYTUxDb3JlOjpJZGVudGl0eUhhc2hUcmFuc2xhdG9yOjplcXVhbCk6IERpdHRvLgor
ICAgICAgICAoS1hNTENvcmU6OklkZW50aXR5SGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6IERp
dHRvLiBUcmFuc2xhdGUgbm93IHRha2VzIGEgcmVmZXJlbmNlCisJdG8gd3JpdGUgaW50byBpbnN0
ZWFkIG9mIHJldHVybmluZyBhIHZhbHVlIHRvIGF2b2lkIHJlZHVuZGFudCBjb3BpZXMuCisgICAg
ICAgIChLWE1MQ29yZTo6SGFzaFRhYmxlOjp+SGFzaFRhYmxlKTogVXNlIGRlYWxsb2NhdGVUYWJs
ZSBpbnN0ZWFkIG9mIGZyZWVpbmcgZGlyZWN0bHkuCisgICAgICAgIChLWE1MQ29yZTo6SGFzaFRh
YmxlOjppbnNlcnQpOiBCYXNlZCBvbiBIYXNoVHJhbnNsYXRvciBub3cgaW5zdGVhZCBvZiBzZXBh
cmF0ZQorCWZ1bmN0aW9ucy4gQWRkZWQgYSBGSVhNRSBhYm91dCBhIHJlbWFpbmluZyByYXJlIGV4
Y2VzcyBjb3B5LgorICAgICAgICAoS1hNTENvcmU6Okhhc2hUYWJsZTo6aXNFbXB0eUJ1Y2tldCk6
IFVzZSBLZXlUcmFpdHMgZGlyZWN0bHkgaW5zdGVhZCBvZiB1bndyYXBwaW5nCisJdGhlIGtleSBm
cm9tIFRyYWl0cywgdG8gYXZvaWQgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgcGFpciwgd2hpY2gg
Y29waWVzLgorICAgICAgICAoS1hNTENvcmU6Okhhc2hUYWJsZTo6aXNEZWxldGVkQnVja2V0KTog
ZGl0dG8KKyAgICAgICAgKEtYTUxDb3JlOjpIYXNoVGFibGU6Omxvb2t1cCk6IFVzZSBIYXNoVHJh
bnNsYXRvciBub3cgaW5zdGVhZCBvZiBzZXBhcmF0ZSBmdW5jdGlvbnMuCisgICAgICAgIChLWE1M
Q29yZTo6SGFzaFRhYmxlOjppbml0aWFsaXplQnVja2V0KTogUmVuYW1lZCBmcm9tIGVtcHR5QnVj
a2V0LiBVc2UgcGxhY2VtZW50IG5ldyB0bworCXdvcmsgcmlnaHQgZm9yIG5vbi1QT0QgdHlwZXMu
CisgICAgICAgIChLWE1MQ29yZTo6SGFzaFRhYmxlOjpkZWxldGVCdWNrZXQpOiBVc2UgYXNzaWdu
RGVsZXRlZCB0byBhdm9pZCBleGNlc3MgY29waWVzLgorICAgICAgICAoS1hNTENvcmU6Okhhc2hU
YWJsZTo6cmVpbnNlcnQpOiB1c2UgTW92ZXIgdGVtcGxhdGUgdG8gY29weSBvciBzd2FwIGFzIGFw
cHJvcHJpYXRlCisgICAgICAgIChLWE1MQ29yZTo6SGFzaFRhYmxlOjphbGxvY2F0ZVRhYmxlKTog
SW5pdGlhbGl6ZSBldmVyeSBidWNrZXQgaWYgY2FsbG9jIHdvbid0IGRvLgorICAgICAgICAoS1hN
TENvcmU6Okhhc2hUYWJsZTo6ZGVhbGxvY2F0ZVRhYmxlKTogRGVzdHJ1Y3QgZXZlcnkgYnVja2V0
IGlmIG5lZWRlZC4KKyAgICAgICAgKEtYTUxDb3JlOjpIYXNoVGFibGU6OnJlaGFzaCk6IEF2b2lk
IGNvcHkgYmVmb3JlIHJlaW5zZXJ0aW5nLCBzbyB0aGF0IHN3YXAgY2FuIGRvIGl0cyBtYWdpYy4K
KyAgICAgICAgKEtYTUxDb3JlOjpIYXNoVGFibGU6OmNsZWFyKTogdXNlIGRlYWxsb2NhdGVUYWJs
ZSBpbnN0ZWFkIG9mIGZyZWVpbmcgZGlyZWN0bHkuCisgICAgICAgIChLWE1MQ29yZTo6SGFzaFRh
YmxlOjpIYXNoVGFibGUpOiBiZSBtb3JlIGR1bWIgd2hlbiBjb3B5aW5nIHRvIGVuc3VyZSB0aGF0
IG5vbi1QT0QgdHlwZXMKKwl3b3JrIHJpZ2h0CisgICAgICAgICoga3htbGNvcmUvSGFzaEZ1bmN0
aW9ucy5oOgorICAgICAgICAoS1hNTENvcmU6OlBvaW50ZXJIYXNoKTogU3BlY2lhbGl6ZSBQb2lu
dGVySGFzaCBmb3IgUmVmUHRyCisgICAgICAgICoga3htbGNvcmUvSGFzaE1hcC5oOgorICAgICAg
ICAoS1hNTENvcmU6OmV4dHJhY3RGaXJzdCk6IFJldHVybiBhIHJlZmVyZW5jZSBub3QgYSBmdWxs
IG9iamVjdCB0byBhdm9pZAorCWNvcGllcy4KKyAgICAgICAgKEtYTUxDb3JlOjpIYXNoTWFwVHJh
bnNsYXRvcjo6aGFzaCk6IFVzZSBhIHNwZWNpYWwgdHJhbnNsYXRvciBmb3IgaW5zZXJ0aW9uCisJ
dG8gZGVmZXIgbWFraW5nIHRoZSBwYWlyIGFzIGxvbmcgYXMgcG9zc2libGUsIHRodXMgYXZvaWRp
bmcgbmVlZGxlc3MgY29waWVzLgorICAgICAgICAoS1hNTENvcmU6Okhhc2hNYXBUcmFuc2xhdG9y
OjplcXVhbCk6IGRpdHRvCisgICAgICAgIChLWE1MQ29yZTo6SGFzaE1hcFRyYW5zbGF0b3I6OnRy
YW5zbGF0ZSk6IGRpdHRvCisgICAgICAgIChLWE1MQ29yZTo6OjppbmxpbmVBZGQpOiBTaGFyZWQg
Ynkgc2V0IGFuZCBhZGQgdG8gaW5zZXJ0IHVzaW5nIEhhc2hNYXBUcmFuc2xhdG9yCisgICAgICAg
IChLWE1MQ29yZTo6OjpzZXQpOiBVc2UgaW5saW5lQWRkCisgICAgICAgIChLWE1MQ29yZTo6Ojph
ZGQpOiBVc2UgaW5saW5lQWRkCisgICAgICAgICoga3htbGNvcmUvSGFzaE1hcFB0clNwZWMuaDoK
KyAgICAgICAgKEtYTUxDb3JlOjopOiBQYXNzIEtleVRyYWl0cyBhbG9uZworICAgICAgICAqIGt4
bWxjb3JlL0hhc2hTZXQuaDoKKyAgICAgICAgKEtYTUxDb3JlOjppZGVudGl0eUV4dHJhY3QpOiBS
ZXR1cm4gYSByZWZlcmVuY2Ugbm90IGEgZnVsbCBvYmplY3QgdG8gYXZvaWQgY29waWVzLgorICAg
ICAgICAoS1hNTENvcmU6Okhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlcjo6aGFzaCk6IFJlZG8gYWRh
cHRlciBzdHVmZiB0byB3b3JrIHdpdGgKKwl0aGUgbmV3IEhhc2hUcmFuc2xhdG9yIGFwcHJvYWNo
LgorICAgICAgICAoS1hNTENvcmU6Okhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlcjo6ZXF1YWwpOiBk
aXR0bworICAgICAgICAoS1hNTENvcmU6Okhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlcjo6dHJhbnNs
YXRlKTogZGl0dG8KKyAgICAgICAgKEtYTUxDb3JlOjo6Omluc2VydCk6IGRpdHRvCisgICAgICAg
ICoga3htbGNvcmUvSGFzaFRyYWl0cy5oOgorICAgICAgICAoS1hNTENvcmU6OkdlbmVyaWNIYXNo
VHJhaXRzKTogVG8gYmUgdXNlZCBhcyBhIGJhc2UgY2xhc3MgZm9yIGN1c3RvbWl6ZWQgdHJhaXRz
LAorCXNlbnNpYmxlIGRlZmF1bHRzCisgICAgICAgIChLWE1MQ29yZTo6KTogVXNlIGl0IGEgYnVu
Y2gKKyAgICAgICAgKEtYTUxDb3JlOjphc3NpZ25EZWxldGVkKTogdGVtcGxhdGUgZnVuY3Rpb24g
dG8gYWxsb3cgcGFpcnMgdG8gYmUgYXNzaWduZWQgdGhlCisJZGVsZXRlZCB2YWx1ZSB3L28gZXhj
ZXNzIGNvcGllcy4KKyAgICAgICAgKEtYTUxDb3JlOjpQYWlySGFzaFRyYWl0czo6ZW1wdHlWYWx1
ZSk6IFVwZGF0ZWQKKyAgICAgICAgKEtYTUxDb3JlOjpQYWlySGFzaFRyYWl0czo6ZGVsZXRlZFZh
bHVlKTogVXBkYXRlZAorICAgICAgICAoS1hNTENvcmU6OlBhaXJIYXNoVHJhaXRzOjphc3NpZ25E
ZWxldGVkVmFsdWUpOiBwYXJ0IG9mIGFzc2lnbkRlbGV0ZWQgaGFjaworICAgICAgICAoS1hNTENv
cmU6OkRlbGV0ZWRWYWx1ZUFzc2lnbmVyOjphc3NpZ25EZWxldGVkVmFsdWUpOiBVc2UgdGVtcGxh
dGUgbWFnaWMKKwl0byBlaXRoZXIgdXNlIHVzZSBkZWxldGVkVmFsdWUgb3IgYXNzaWduRGVsZXRl
ZFZhbHVlIGZvciB0aGUgY2FzZXMgd2hlcmUgd2UgY2FyZS4KKyAgICAgICAgKiBreG1sY29yZS9S
ZWZQdHIuaDoKKyAgICAgICAgKEtYTUxDb3JlOjpSZWZQdHI6OnN3YXApOiBBZGRlZCBzd2FwIG1l
dGhvZC4KKyAgICAgICAgKEtYTUxDb3JlOjpzd2FwKTogQWRkZWQgc3dhcCBmcmVlIGZ1bmN0aW9u
LgorICAgICAgICAqIGtqcy9pZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKEtKUzo6Q1N0cmluZ1Ry
YW5zbGF0b3I6Omhhc2gpOiBVc2UgbmV3IEhhc2hUcmFuc2xhdG9yIGNsYXNzIGFwcHJvYWNoIHRv
CisJYWx0ZXJuYXRlIHR5cGUgYmFzZWQgaW5zZXJ0aW9uLgorICAgICAgICAoS0pTOjpDU3RyaW5n
VHJhbnNsYXRvcjo6ZXF1YWwpOiBkaXR0bworICAgICAgICAoS0pTOjpDU3RyaW5nVHJhbnNsYXRv
cjo6dHJhbnNsYXRlKTogZGl0dG8KKyAgICAgICAgKEtKUzo6SWRlbnRpZmllcjo6YWRkKTogZGl0
dG8KKyAgICAgICAgKEtKUzo6VUNoYXJCdWZmZXJUcmFuc2xhdG9yOjpoYXNoKTogZGl0dG8KKyAg
ICAgICAgKEtKUzo6VUNoYXJCdWZmZXJUcmFuc2xhdG9yOjplcXVhbCk6IGRpdHRvCisgICAgICAg
IChLSlM6OlVDaGFyQnVmZmVyVHJhbnNsYXRvcjo6dHJhbnNsYXRlKTogZGl0dG8KKworCS0gaXJy
ZWxldmFudCBjaGFuZ2U6CisJCisgICAgICAgICoga2pzL2FycmF5X29iamVjdC5jcHA6CisgICAg
ICAgIChBcnJheVByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24pOiBSZW1vdmVkIGEgc3RyYXkgc3Bh
Y2UuCisKIDIwMDUtMTItMjAgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbi4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9hcnJh
eV9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29y
ZS9ranMvYXJyYXlfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41OQpkaWZmIC1w
IC11IC1yMS41OSBKYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfb2JqZWN0LmNwcAotLS0gSmF2YVNj
cmlwdENvcmUva2pzL2FycmF5X29iamVjdC5jcHAJMTkgRGVjIDIwMDUgMDA6Mjc6MjggLTAwMDAJ
MS41OQorKysgSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X29iamVjdC5jcHAJMjEgRGVjIDIwMDUg
MjM6MjQ6MDggLTAwMDAKQEAgLTQ0OCw3ICs0NDgsNyBAQCBKU1ZhbHVlICpBcnJheVByb3RvRnVu
Yzo6Y2FsbEFzRnVuY3Rpb24oCiAKICAgICAvLyBmYWxsIHRocm91Z2gKICAgY2FzZSBKb2luOiB7
Ci0gICAgc3RhdGljIEhhc2hTZXQ8IEpTT2JqZWN0KiwgUG9pbnRlckhhc2g8SlNPYmplY3QqPiA+
IHZpc2l0ZWRFbGVtczsKKyAgICBzdGF0aWMgSGFzaFNldDxKU09iamVjdCosIFBvaW50ZXJIYXNo
PEpTT2JqZWN0Kj4gPiB2aXNpdGVkRWxlbXM7CiAgICAgaWYgKHZpc2l0ZWRFbGVtcy5jb250YWlu
cyh0aGlzT2JqKSkKICAgICAgIHJldHVybiBqc1N0cmluZygiIik7CiAgICAgVVN0cmluZyBzZXBh
cmF0b3IgPSAiLCI7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvaWRlbnRpZmllci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9pZGVudGlmaWVy
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNQpkaWZmIC1wIC11IC1yMS4yNSBKYXZhU2Ny
aXB0Q29yZS9ranMvaWRlbnRpZmllci5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9pZGVudGlm
aWVyLmNwcAkyMCBEZWMgMjAwNSAyMDoxMjo0NyAtMDAwMAkxLjI1CisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvaWRlbnRpZmllci5jcHAJMjEgRGVjIDIwMDUgMjM6MjQ6MDggLTAwMDAKQEAgLTk4LDMw
ICs5OCwzMyBAQCBib29sIElkZW50aWZpZXI6OmVxdWFsKGNvbnN0IFVTdHJpbmc6OlJlCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSB1bnNpZ25lZCBoYXNoKGNvbnN0IGNoYXIqIGNvbnN0
JiBjKQorc3RydWN0IENTdHJpbmdUcmFuc2xhdG9yCiB7Ci0gICAgcmV0dXJuIFVTdHJpbmc6OlJl
cDo6Y29tcHV0ZUhhc2goYyk7Ci19CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgY2hh
ciAqYykKKyAgICB7CisgICAgICAgIHJldHVybiBVU3RyaW5nOjpSZXA6OmNvbXB1dGVIYXNoKGMp
OworICAgIH0KIAotaW5saW5lIGJvb2wgZXF1YWwoVVN0cmluZzo6UmVwKiBjb25zdCYgciwgY29u
c3QgY2hhciogY29uc3QmIHMpCi17Ci0gICAgcmV0dXJuIElkZW50aWZpZXI6OmVxdWFsKHIsIHMp
OwotfQorICAgIHN0YXRpYyBib29sIGVxdWFsKFVTdHJpbmc6OlJlcCAqciwgY29uc3QgY2hhciAq
cykKKyAgICB7CisgICAgICAgIHJldHVybiBJZGVudGlmaWVyOjplcXVhbChyLCBzKTsKKyAgICB9
CiAKLWlubGluZSBVU3RyaW5nOjpSZXAgKmNvbnZlcnQoY29uc3QgY2hhciogY29uc3QmIGMsIHVu
c2lnbmVkIGhhc2gpCi17Ci0gICAgaW50IGxlbmd0aCA9IHN0cmxlbihjKTsKLSAgICBVQ2hhciAq
ZCA9IHN0YXRpY19jYXN0PFVDaGFyICo+KGZhc3RNYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIGxlbmd0
aCkpOwotICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGxlbmd0aDsgaSsrKQotICAgICAgICBkW2ld
ID0gY1tpXTsKLSAgICAKLSAgICBVU3RyaW5nOjpSZXAgKnIgPSBVU3RyaW5nOjpSZXA6OmNyZWF0
ZShkLCBsZW5ndGgpLnJlbGVhc2UoKTsKLSAgICByLT5pc0lkZW50aWZpZXIgPSAxOwotICAgIHIt
PnJjID0gMDsKLSAgICByLT5faGFzaCA9IGhhc2g7CisgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRl
KFVTdHJpbmc6OlJlcComIGxvY2F0aW9uLCBjb25zdCBjaGFyICpjLCB1bnNpZ25lZCBoYXNoKQor
ICAgIHsKKyAgICAgICAgaW50IGxlbmd0aCA9IHN0cmxlbihjKTsKKyAgICAgICAgVUNoYXIgKmQg
PSBzdGF0aWNfY2FzdDxVQ2hhciAqPihmYXN0TWFsbG9jKHNpemVvZihVQ2hhcikgKiBsZW5ndGgp
KTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gbGVuZ3RoOyBpKyspCisgICAgICAgICAg
ICBkW2ldID0gY1tpXTsKKyAgICAgICAgCisgICAgICAgIFVTdHJpbmc6OlJlcCAqciA9IFVTdHJp
bmc6OlJlcDo6Y3JlYXRlKGQsIGxlbmd0aCkucmVsZWFzZSgpOworICAgICAgICByLT5pc0lkZW50
aWZpZXIgPSAxOworICAgICAgICByLT5yYyA9IDA7CisgICAgICAgIHItPl9oYXNoID0gaGFzaDsK
IAotICAgIHJldHVybiByOyAKLX0KKyAgICAgICAgbG9jYXRpb24gPSByOworICAgIH0KK307CiAK
IFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBJZGVudGlmaWVyOjphZGQoY29uc3QgY2hhciAqYykK
IHsKQEAgLTEzMSw3ICsxMzQsNyBAQCBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gSWRlbnRpZmll
cjo6YWRkCiAgICAgaWYgKGxlbmd0aCA9PSAwKQogICAgICAgICByZXR1cm4gcGFzcygmVVN0cmlu
Zzo6UmVwOjplbXB0eSk7CiAgICAgCi0gICAgcmV0dXJuIHBhc3MoKmlkZW50aWZpZXJUYWJsZSgp
Lmluc2VydDxjb25zdCBjaGFyICosIGhhc2gsIEtKUzo6ZXF1YWwsIGNvbnZlcnQ+KGMpLmZpcnN0
KTsKKyAgICByZXR1cm4gcGFzcygqaWRlbnRpZmllclRhYmxlKCkuaW5zZXJ0PGNvbnN0IGNoYXIg
KiwgQ1N0cmluZ1RyYW5zbGF0b3I+KGMpLmZpcnN0KTsKIH0KIAogc3RydWN0IFVDaGFyQnVmZmVy
IHsKQEAgLTEzOSwyOSArMTQyLDMyIEBAIHN0cnVjdCBVQ2hhckJ1ZmZlciB7CiAgICAgdWludCBs
ZW5ndGg7CiB9OwogCi1pbmxpbmUgdW5zaWduZWQgaGFzaChjb25zdCBVQ2hhckJ1ZmZlciYgYnVm
KQorc3RydWN0IFVDaGFyQnVmZmVyVHJhbnNsYXRvcgogewotICAgIHJldHVybiBVU3RyaW5nOjpS
ZXA6OmNvbXB1dGVIYXNoKGJ1Zi5zLCBidWYubGVuZ3RoKTsKLX0KLQotaW5saW5lIGJvb2wgZXF1
YWwoVVN0cmluZzo6UmVwKiBjb25zdCYgc3RyLCBjb25zdCBVQ2hhckJ1ZmZlciYgYnVmKQotewot
ICAgIHJldHVybiBJZGVudGlmaWVyOjplcXVhbChzdHIsIGJ1Zi5zLCBidWYubGVuZ3RoKTsKLX0K
KyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBVQ2hhckJ1ZmZlciYgYnVmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIFVTdHJpbmc6OlJlcDo6Y29tcHV0ZUhhc2goYnVmLnMsIGJ1Zi5sZW5n
dGgpOworICAgIH0KIAotaW5saW5lIFVTdHJpbmc6OlJlcCAqY29udmVydChjb25zdCBVQ2hhckJ1
ZmZlciYgYnVmLCB1bnNpZ25lZCBoYXNoKQotewotICAgIFVDaGFyICpkID0gc3RhdGljX2Nhc3Q8
VUNoYXIgKj4oZmFzdE1hbGxvYyhzaXplb2YoVUNoYXIpICogYnVmLmxlbmd0aCkpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgIT0gYnVmLmxlbmd0aDsgaSsrKQotICAgICAgICBkW2ldID0g
YnVmLnNbaV07Ci0KLSAgICBVU3RyaW5nOjpSZXAgKnIgPSBVU3RyaW5nOjpSZXA6OmNyZWF0ZShk
LCBidWYubGVuZ3RoKS5yZWxlYXNlKCk7Ci0gICAgci0+aXNJZGVudGlmaWVyID0gMTsKLSAgICBy
LT5yYyA9IDA7Ci0gICAgci0+X2hhc2ggPSBoYXNoOworICAgIHN0YXRpYyBib29sIGVxdWFsKFVT
dHJpbmc6OlJlcCAqc3RyLCBjb25zdCBVQ2hhckJ1ZmZlciYgYnVmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIElkZW50aWZpZXI6OmVxdWFsKHN0ciwgYnVmLnMsIGJ1Zi5sZW5ndGgpOworICAgIH0K
IAotICAgIHJldHVybiByOyAKLX0KKyAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVVN0cmluZzo6
UmVwIComIGxvY2F0aW9uLCBjb25zdCBVQ2hhckJ1ZmZlciYgYnVmLCB1bnNpZ25lZCBoYXNoKQor
ICAgIHsKKyAgICAgICAgVUNoYXIgKmQgPSBzdGF0aWNfY2FzdDxVQ2hhciAqPihmYXN0TWFsbG9j
KHNpemVvZihVQ2hhcikgKiBidWYubGVuZ3RoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgIT0gYnVmLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgZFtpXSA9IGJ1Zi5zW2ldOwor
ICAgICAgICAKKyAgICAgICAgVVN0cmluZzo6UmVwICpyID0gVVN0cmluZzo6UmVwOjpjcmVhdGUo
ZCwgYnVmLmxlbmd0aCkucmVsZWFzZSgpOworICAgICAgICByLT5pc0lkZW50aWZpZXIgPSAxOwor
ICAgICAgICByLT5yYyA9IDA7CisgICAgICAgIHItPl9oYXNoID0gaGFzaDsKKyAgICAgICAgCisg
ICAgICAgIGxvY2F0aW9uID0gcjsgCisgICAgfQorfTsKIAogUGFzc1JlZlB0cjxVU3RyaW5nOjpS
ZXA+IElkZW50aWZpZXI6OmFkZChjb25zdCBVQ2hhciAqcywgaW50IGxlbmd0aCkKIHsKQEAgLTE2
OSw3ICsxNzUsNyBAQCBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gSWRlbnRpZmllcjo6YWRkCiAg
ICAgICAgIHJldHVybiBwYXNzKCZVU3RyaW5nOjpSZXA6OmVtcHR5KTsKICAgICAKICAgICBVQ2hh
ckJ1ZmZlciBidWYgPSB7cywgbGVuZ3RofTsgCi0gICAgcmV0dXJuIHBhc3MoKmlkZW50aWZpZXJU
YWJsZSgpLmluc2VydDxVQ2hhckJ1ZmZlciwgaGFzaCwgS0pTOjplcXVhbCwgY29udmVydD4oYnVm
KS5maXJzdCk7CisgICAgcmV0dXJuIHBhc3MoKmlkZW50aWZpZXJUYWJsZSgpLmluc2VydDxVQ2hh
ckJ1ZmZlciwgVUNoYXJCdWZmZXJUcmFuc2xhdG9yPihidWYpLmZpcnN0KTsKIH0KIAogUGFzc1Jl
ZlB0cjxVU3RyaW5nOjpSZXA+IElkZW50aWZpZXI6OmFkZChVU3RyaW5nOjpSZXAgKnIpCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9IYXNoRnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2t4bWxjb3JlL0hhc2hGdW5jdGlvbnMuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIgSmF2YVNjcmlwdENvcmUv
a3htbGNvcmUvSGFzaEZ1bmN0aW9ucy5oCi0tLSBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9IYXNo
RnVuY3Rpb25zLmgJMTMgRGVjIDIwMDUgMTE6MDY6MDUgLTAwMDAJMS4yCisrKyBKYXZhU2NyaXB0
Q29yZS9reG1sY29yZS9IYXNoRnVuY3Rpb25zLmgJMjEgRGVjIDIwMDUgMjM6MjQ6MDggLTAwMDAK
QEAgLTI1LDYgKzI1LDggQEAKIAogI2luY2x1ZGUgPHN0ZGludC5oPgogCisjaW5jbHVkZSAiUmVm
UHRyLmgiCisKIG5hbWVzcGFjZSBLWE1MQ29yZSB7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjbGFzcyBEZWZhdWx0SGFzaDsKQEAgLTcyLDYgKzc0LDExIEBAIG5hbWVzcGFjZSBLWE1MQ29y
ZSB7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKFQga2V5KSB7IHJldHVybiBwb2ludGVy
SGFzaDxzaXplb2Yodm9pZCAqKT4oKHZvaWQgKilrZXkpOyB9CiAgICAgICAgIHN0YXRpYyBib29s
IGVxdWFsKFQgYSwgVCBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICB9OworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgUD4gc3RydWN0IFBvaW50ZXJIYXNoPFJlZlB0cjxQPiA+IHsKKyAgICAgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRyPFA+JiBrZXkpIHsgcmV0dXJuICBwb2lu
dGVySGFzaDxzaXplb2Yodm9pZCAqKT4oKHZvaWQgKilrZXkuZ2V0KCkpOyB9CisgICAgICAgIHN0
YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQPiYgYSwgY29uc3QgUmVmUHRyPFA+JiBiKSB7
IHJldHVybiBhID09IGI7IH0KKyAgICB9OwogICAgIAogfSAvLyBuYW1lc3BhY2UgS1hNTENvcmUK
IApJbmRleDogSmF2YVNjcmlwdENvcmUva3htbGNvcmUvSGFzaE1hcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9reG1sY29yZS9IYXNoTWFwLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIEphdmFTY3JpcHRDb3JlL2t4bWxj
b3JlL0hhc2hNYXAuaAotLS0gSmF2YVNjcmlwdENvcmUva3htbGNvcmUvSGFzaE1hcC5oCTEzIERl
YyAyMDA1IDExOjA2OjA1IC0wMDAwCTEuMgorKysgSmF2YVNjcmlwdENvcmUva3htbGNvcmUvSGFz
aE1hcC5oCTIxIERlYyAyMDA1IDIzOjI0OjA4IC0wMDAwCkBAIC0zMCwxMSArMzAsMzUgQEAKIG5h
bWVzcGFjZSBLWE1MQ29yZSB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFBhaXJUeXBlPiAKLWlubGlu
ZSB0eXBlbmFtZSBQYWlyVHlwZTo6Zmlyc3RfdHlwZSBleHRyYWN0Rmlyc3QoY29uc3QgUGFpclR5
cGUmIHZhbHVlKQoraW5saW5lIHR5cGVuYW1lIFBhaXJUeXBlOjpmaXJzdF90eXBlIGNvbnN0JiBl
eHRyYWN0Rmlyc3QoY29uc3QgUGFpclR5cGUmIHZhbHVlKQogewogICAgIHJldHVybiB2YWx1ZS5m
aXJzdDsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnM+CitjbGFzcyBIYXNoTWFwVHJhbnNsYXRvciAKK3sKKyAgICB0eXBl
ZGVmIHN0ZDo6cGFpcjxLZXksIE1hcHBlZD4gVmFsdWVUeXBlOworICAgICAgICAKK3B1YmxpYzoK
KyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBLZXkmIGtleSkKKyAgICB7CisgICAgICAg
IHJldHVybiBIYXNoRnVuY3Rpb25zOjpoYXNoKGtleSk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IEtleSYgYSwgY29uc3QgS2V5JiBiKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEhhc2hGdW5jdGlvbnM6OmVxdWFsKGEsIGIpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgdm9pZCB0cmFuc2xhdGUoVmFsdWVUeXBlJiBsb2NhdGlvbiwgY29uc3QgS2V5JiBrZXksIGNv
bnN0IE1hcHBlZCYgbWFwcGVkLCB1bnNpZ25lZCkKKyAgICB7CisgICAgICAgIFZhbHVlVHlwZSB0
bXAoa2V5LG1hcHBlZCk7CisgICAgICAgIHN3YXAodG1wLCBsb2NhdGlvbik7CisgICAgfQorfTsK
KworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucyA9IERlZmF1bHRIYXNoPEtleT4sIHR5cGVuYW1lIEtleVRyYWl0cyA9IEhhc2hU
cmFpdHM8S2V5PiwgdHlwZW5hbWUgTWFwcGVkVHJhaXRzID0gSGFzaFRyYWl0czxNYXBwZWQ+ID4K
IGNsYXNzIEhhc2hNYXAgewogIHB1YmxpYzoKQEAgLTQzLDcgKzY3LDggQEAgY2xhc3MgSGFzaE1h
cCB7CiAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8S2V5LCBNYXBwZWQ+IFZhbHVlVHlwZTsKICAgICB0
eXBlZGVmIFBhaXJIYXNoVHJhaXRzPEtleVRyYWl0cywgTWFwcGVkVHJhaXRzPiBWYWx1ZVRyYWl0
czsKICBwcml2YXRlOgotICAgIHR5cGVkZWYgSGFzaFRhYmxlPEtleVR5cGUsIFZhbHVlVHlwZSwg
ZXh0cmFjdEZpcnN0PFZhbHVlVHlwZT4sIEhhc2hGdW5jdGlvbnMsIFZhbHVlVHJhaXRzPiBJbXBs
VHlwZTsKKyAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXlUeXBlLCBWYWx1ZVR5cGUsIGV4dHJhY3RG
aXJzdDxWYWx1ZVR5cGU+LCBIYXNoRnVuY3Rpb25zLCBWYWx1ZVRyYWl0cywgS2V5VHJhaXRzPiBJ
bXBsVHlwZTsKKyAgICB0eXBlZGVmIEhhc2hNYXBUcmFuc2xhdG9yPEtleSwgTWFwcGVkLCBIYXNo
RnVuY3Rpb25zPiBUcmFuc2xhdG9yVHlwZTsgCiAgcHVibGljOgogICAgIHR5cGVkZWYgdHlwZW5h
bWUgSW1wbFR5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogICAgIHR5cGVkZWYgdHlwZW5hbWUgSW1w
bFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwpAQCAtODAsNiArMTA1LDggQEAg
Y2xhc3MgSGFzaE1hcCB7CiAgICAgdm9pZCBjbGVhcigpOwogCiAgcHJpdmF0ZToKKyAgICBzdGQ6
OnBhaXI8aXRlcmF0b3IsIGJvb2w+IGlubGluZUFkZChjb25zdCBLZXlUeXBlICZrZXksIGNvbnN0
IE1hcHBlZFR5cGUgJm1hcHBlZCk7CisKICAgICBJbXBsVHlwZSBtX2ltcGw7CiB9OwogCkBAIC0x
NDQsMTAgKzE3MSwxNiBAQCBib29sIEhhc2hNYXA8S2V5LCBNYXBwZWQsIEhhc2hGdW5jdGlvbnMs
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4K
K3N0ZDo6cGFpcjx0eXBlbmFtZSBIYXNoTWFwPEtleSwgTWFwcGVkLCBIYXNoRnVuY3Rpb25zLCBL
ZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz46Oml0ZXJhdG9yLCBib29sPiBIYXNoTWFwPEtleSwgTWFw
cGVkLCBIYXNoRnVuY3Rpb25zLCBLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz46OmlubGluZUFkZChj
b25zdCBLZXlUeXBlICZrZXksIGNvbnN0IE1hcHBlZFR5cGUgJm1hcHBlZCkgCit7CisgICAgcmV0
dXJuIG1faW1wbC50ZW1wbGF0ZSBpbnNlcnQ8S2V5VHlwZSwgTWFwcGVkVHlwZSwgVHJhbnNsYXRv
clR5cGU+KGtleSwgbWFwcGVkKTsgCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgTWFwcGVkLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5
cGVuYW1lIE1hcHBlZFRyYWl0cz4KIHN0ZDo6cGFpcjx0eXBlbmFtZSBIYXNoTWFwPEtleSwgTWFw
cGVkLCBIYXNoRnVuY3Rpb25zLCBLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz46Oml0ZXJhdG9yLCBi
b29sPiBIYXNoTWFwPEtleSwgTWFwcGVkLCBIYXNoRnVuY3Rpb25zLCBLZXlUcmFpdHMsIE1hcHBl
ZFRyYWl0cz46OnNldChjb25zdCBLZXlUeXBlICZrZXksIGNvbnN0IE1hcHBlZFR5cGUgJm1hcHBl
ZCkgCiB7Ci0gICAgcGFpcjxpdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9pbXBsLmluc2VydChW
YWx1ZVR5cGUoa2V5LCBtYXBwZWQpKTsKLSAgICAvLyB0aGUgaW5zZXJ0IGNhbGwgYWJvdmUgd29u
J3QgY2hhbmdlIGFueXRoaW5nIGlmIHRoZSBrZXkgaXMKKyAgICBwYWlyPGl0ZXJhdG9yLCBib29s
PiByZXN1bHQgPSBpbmxpbmVBZGQoa2V5LCBtYXBwZWQpOworICAgIC8vIHRoZSBhZGQgY2FsbCBh
Ym92ZSB3b24ndCBjaGFuZ2UgYW55dGhpbmcgaWYgdGhlIGtleSBpcwogICAgIC8vIGFscmVhZHkg
dGhlcmU7IGluIHRoYXQgY2FzZSwgbWFrZSBzdXJlIHRvIHNldCB0aGUgdmFsdWUuCiAgICAgaWYg
KCFyZXN1bHQuc2Vjb25kKQogICAgICAgICByZXN1bHQuZmlyc3QtPnNlY29uZCA9IG1hcHBlZDsg
ICAgCkBAIC0xNTcsNyArMTkwLDcgQEAgc3RkOjpwYWlyPHR5cGVuYW1lIEhhc2hNYXA8S2V5LCBN
YXBwZWQsIAogdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgTWFwcGVkVHJhaXRz
Pgogc3RkOjpwYWlyPHR5cGVuYW1lIEhhc2hNYXA8S2V5LCBNYXBwZWQsIEhhc2hGdW5jdGlvbnMs
IEtleVRyYWl0cywgTWFwcGVkVHJhaXRzPjo6aXRlcmF0b3IsIGJvb2w+IEhhc2hNYXA8S2V5LCBN
YXBwZWQsIEhhc2hGdW5jdGlvbnMsIEtleVRyYWl0cywgTWFwcGVkVHJhaXRzPjo6YWRkKGNvbnN0
IEtleVR5cGUgJmtleSwgY29uc3QgTWFwcGVkVHlwZSAmbWFwcGVkKQogewotICAgIHJldHVybiBt
X2ltcGwuaW5zZXJ0KFZhbHVlVHlwZShrZXksIG1hcHBlZCkpOworICAgIHJldHVybiBpbmxpbmVB
ZGQoa2V5LCBtYXBwZWQpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1h
cHBlZCwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFt
ZSBNYXBwZWRUcmFpdHM+CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9IYXNoTWFwUHRy
U3BlYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9reG1s
Y29yZS9IYXNoTWFwUHRyU3BlYy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAt
dSAtcjEuMiBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9IYXNoTWFwUHRyU3BlYy5oCi0tLSBKYXZh
U2NyaXB0Q29yZS9reG1sY29yZS9IYXNoTWFwUHRyU3BlYy5oCTEzIERlYyAyMDA1IDExOjA2OjA1
IC0wMDAwCTEuMgorKysgSmF2YVNjcmlwdENvcmUva3htbGNvcmUvSGFzaE1hcFB0clNwZWMuaAky
MSBEZWMgMjAwNSAyMzoyNDowOCAtMDAwMApAQCAtMTgwLDggKzE4MCw4IEBAIG5hbWVzcGFjZSBL
WE1MQ29yZSB7CiAgICAgICAgIHR5cGVkZWYgUSAqTWFwcGVkVHlwZTsKICAgICAgICAgdHlwZWRl
ZiBzdGQ6OnBhaXI8S2V5VHlwZSwgTWFwcGVkVHlwZT4gVmFsdWVUeXBlOwogICAgICAgICB0eXBl
ZGVmIHR5cGVuYW1lIHN0ZDo6cGFpcjx2b2lkICosIHZvaWQgKj4gSW1wbFZhbHVlVHlwZTsKLSAg
ICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjx2b2lkICosIEltcGxWYWx1ZVR5cGUsIGV4
dHJhY3RGaXJzdDxJbXBsVmFsdWVUeXBlPiwgRGVmYXVsdEhhc2g8dm9pZCAqPiwgUGFpckhhc2hU
cmFpdHM8SGFzaFRyYWl0czx2b2lkICo+LCBIYXNoVHJhaXRzPHZvaWQgKj4gPiA+IEltcGxJdGVy
YXRvcjsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPHZvaWQgKiwgSW1w
bFZhbHVlVHlwZSwgZXh0cmFjdEZpcnN0PEltcGxWYWx1ZVR5cGU+LCBEZWZhdWx0SGFzaDx2b2lk
ICo+LCBQYWlySGFzaFRyYWl0czxIYXNoVHJhaXRzPHZvaWQgKj4sIEhhc2hUcmFpdHM8dm9pZCAq
PiA+ID4gSW1wbENvbnN0SXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0
b3I8dm9pZCAqLCBJbXBsVmFsdWVUeXBlLCBleHRyYWN0Rmlyc3Q8SW1wbFZhbHVlVHlwZT4sIERl
ZmF1bHRIYXNoPHZvaWQgKj4sIFBhaXJIYXNoVHJhaXRzPEhhc2hUcmFpdHM8dm9pZCAqPiwgSGFz
aFRyYWl0czx2b2lkICo+ID4sIEhhc2hUcmFpdHM8dm9pZCAqPiA+IEltcGxJdGVyYXRvcjsKKyAg
ICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPHZvaWQgKiwgSW1wbFZhbHVlVHlw
ZSwgZXh0cmFjdEZpcnN0PEltcGxWYWx1ZVR5cGU+LCBEZWZhdWx0SGFzaDx2b2lkICo+LCBQYWly
SGFzaFRyYWl0czxIYXNoVHJhaXRzPHZvaWQgKj4sIEhhc2hUcmFpdHM8dm9pZCAqPiA+LCBIYXNo
VHJhaXRzPHZvaWQgKj4gPiBJbXBsQ29uc3RJdGVyYXRvcjsKICAgICAgICAgCiAgICAgICAgIHR5
cGVkZWYgUG9pbnRlckhhc2hJdGVyYXRvckFkYXB0ZXI8UCwgUSAqPiBpdGVyYXRvcjsKICAgICAg
ICAgdHlwZWRlZiBQb2ludGVySGFzaENvbnN0SXRlcmF0b3JBZGFwdGVyPFAsIFEgKj4gY29uc3Rf
aXRlcmF0b3I7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9IYXNoU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2t4bWxjb3JlL0hhc2hTZXQu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXAgLXUgLXIxLjQgSmF2YVNjcmlwdENv
cmUva3htbGNvcmUvSGFzaFNldC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9IYXNoU2V0
LmgJNCBOb3YgMjAwNSAxNzozMDoyNyAtMDAwMAkxLjQKKysrIEphdmFTY3JpcHRDb3JlL2t4bWxj
b3JlL0hhc2hTZXQuaAkyMSBEZWMgMjAwNSAyMzoyNDowOSAtMDAwMApAQCAtMzAsMjEgKzMwLDM1
IEBACiBuYW1lc3BhY2UgS1hNTENvcmUgewogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0g
ICAgaW5saW5lIFQgaWRlbnRpdHlFeHRyYWN0KGNvbnN0IFQmIHQpIAorICAgIGlubGluZSBjb25z
dCBUJiBpZGVudGl0eUV4dHJhY3QoY29uc3QgVCYgdCkgCiAgICAgeyAKICAgICAgICAgcmV0dXJu
IHQ7IAogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBULCBW
YWx1ZSBDb252ZXJ0VChjb25zdCBUJiwgdW5zaWduZWQpPiAKLSAgICBpbmxpbmUgVmFsdWUgY29u
dmVydEFkYXB0ZXIoY29uc3QgVCYgdCwgY29uc3QgVCYsIHVuc2lnbmVkIGgpCi0gICAgeyAKLSAg
ICAgICAgcmV0dXJuIENvbnZlcnRUKHQsIGgpOyAKLSAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFNldFRyYW5zbGF0b3I+CisgICAg
c3RydWN0IEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlciAKKyAgICB7CisgICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKGNvbnN0IFQmIGtleSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IEhhc2hTZXRUcmFuc2xhdG9yOjpoYXNoKGtleSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFZhbHVlJiBhLCBjb25zdCBUJiBiKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gSGFzaFNldFRyYW5zbGF0b3I6OmVxdWFsKGEsIGIpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVmFsdWUm
IGxvY2F0aW9uLCBjb25zdCBUJiBrZXksIGNvbnN0IFQmLCB1bnNpZ25lZCBoYXNoQ29kZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgSGFzaFNldFRyYW5zbGF0b3I6OnRyYW5zbGF0ZShsb2NhdGlv
biwga2V5LCBoYXNoQ29kZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zID0gRGVmYXVsdEhhc2g8VmFs
dWU+LCB0eXBlbmFtZSBUcmFpdHMgPSBIYXNoVHJhaXRzPFZhbHVlPiA+CiAgICAgY2xhc3MgSGFz
aFNldCB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8VmFsdWUsIFZh
bHVlLCBpZGVudGl0eUV4dHJhY3Q8VmFsdWU+LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+IEltcGxU
eXBlOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxWYWx1ZSwgVmFsdWUsIGlkZW50aXR5RXh0
cmFjdDxWYWx1ZT4sIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVHJhaXRzPiBJbXBsVHlwZTsKICAg
ICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwogICAgICAgICB0eXBl
ZGVmIHR5cGVuYW1lIEltcGxUeXBlOjppdGVyYXRvciBpdGVyYXRvcjsKQEAgLTY5LDggKzgzLDEx
IEBAIG5hbWVzcGFjZSBLWE1MQ29yZSB7CiAgICAgICAgIAogICAgICAgICAvLyBhIHNwZWNpYWwg
dmVyc2lvbiBvZiBpbnNlcnQoKSB0aGF0IGZpbmRzIHRoZSBvYmplY3QgYnkgaGFzaGluZyBhbmQg
Y29tcGFyaW5nCiAgICAgICAgIC8vIHdpdGggc29tZSBvdGhlciB0eXBlLCB0byBhdm9pZCB0aGUg
Y29zdCBvZiB0eXBlIGNvbnZlcnNpb24gaWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5Ci0gICAgICAg
IC8vIGluIHRoZSB0YWJsZQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBI
YXNoVChjb25zdCBUJiksIGJvb2wgRXF1YWxUKGNvbnN0IFZhbHVlVHlwZSYsIGNvbnN0IFQmKSwg
VmFsdWVUeXBlIENvbnZlcnRUKGNvbnN0IFQmLCB1bnNpZ25lZCk+IAorICAgICAgICAvLyBpbiB0
aGUgdGFibGUuIEhhc2hUcmFuc2xhdG9yIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9k
czoKKyAgICAgICAgLy8gICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUJik7CisgICAgICAg
IC8vICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVmFsdWVUeXBlJiwgY29uc3QgVCYpOworICAg
ICAgICAvLyAgIHN0YXRpYyB0cmFuc2xhdGUoVmFsdWVUeXBlJiwgY29uc3QgVCYsIHVuc2lnbmVk
IGhhc2hDb2RlKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRy
YW5zbGF0b3I+IAogICAgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+IGluc2VydChjb25z
dCBUJiB2YWx1ZSk7CiAgICAgICAgIAogICAgICAgICB2b2lkIHJlbW92ZShjb25zdCBWYWx1ZVR5
cGUmIHZhbHVlKTsKQEAgLTE0OCwxMCArMTY1LDEwIEBAIG5hbWVzcGFjZSBLWE1MQ29yZSB7CiAg
ICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgSGFzaFQoY29uc3QgVCYpLCBib29sIEVxdWFsVChjb25zdCBWYWx1ZSYsIGNvbnN0IFQmKSwg
VmFsdWUgQ29udmVydFQoY29uc3QgVCYsIHVuc2lnbmVkKT4gCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgSGFzaFNldFRyYW5zbGF0b3I+IAogICAgIHN0ZDo6cGFpcjx0eXBlbmFt
ZSBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjppdGVyYXRvciwgYm9vbD4g
SGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6aW5zZXJ0KGNvbnN0IFQmIHZh
bHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW1wbC5pbnNlcnQ8VCwgVCwgSGFzaFQsIEVx
dWFsVCwgY29udmVydEFkYXB0ZXI8VmFsdWUsIFQsIENvbnZlcnRUPiA+KHZhbHVlLCB2YWx1ZSk7
IAorICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGluc2VydDxULCBULCBIYXNoU2V0VHJh
bnNsYXRvckFkYXB0ZXI8VmFsdWVUeXBlLCBULCBIYXNoU2V0VHJhbnNsYXRvcj4gPih2YWx1ZSwg
dmFsdWUpOyAKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2t4bWxjb3JlL0hhc2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZh
U2NyaXB0Q29yZS9reG1sY29yZS9IYXNoVGFibGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEgSmF2YVNjcmlwdENvcmUva3htbGNvcmUvSGFzaFRhYmxlLmgKLS0t
IEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL0hhc2hUYWJsZS5oCTI4IFNlcCAyMDA1IDIyOjAxOjE3
IC0wMDAwCTEuMQorKysgSmF2YVNjcmlwdENvcmUva3htbGNvcmUvSGFzaFRhYmxlLmgJMjEgRGVj
IDIwMDUgMjM6MjQ6MDkgLTAwMDAKQEAgLTI0LDcgKzI0LDkgQEAKICNkZWZpbmUgS1hNTENPUkVf
SEFTSF9UQUJMRV9ICiAKICNpbmNsdWRlICJGYXN0TWFsbG9jLmgiCisjaW5jbHVkZSAiSGFzaFRy
YWl0cy5oIgogI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgogCiBuYW1l
c3BhY2UgS1hNTENvcmUgewogCkBAIC01MiwxOSArNTQsMTkgQEAgbmFtZXNwYWNlIEtYTUxDb3Jl
IHsKICNkZWZpbmUgY2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpICgodm9pZCkwKQog
I2VuZGlmCiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
S2V5IEV4dHJhY3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCBjb25zdCBLZXkmIEV4dHJhY3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIGNsYXNzIEhh
c2hUYWJsZTsKICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCBLZXkgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3Mg
SGFzaFRhYmxlSXRlcmF0b3IgewogICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz4gSGFzaFRh
YmxlVHlwZTsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBF
eHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0eXBl
ZGVmIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz4gSGFzaFRhYmxlVHlwZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJ
dGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz4gaXRlcmF0b3I7CiAgICAgICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwogICAg
ICAgICB0eXBlZGVmIFZhbHVlVHlwZSYgUmVmZXJlbmNlVHlwZTsKICAgICAgICAgdHlwZWRlZiBW
YWx1ZVR5cGUgKlBvaW50ZXJUeXBlOwogICAgICAgICAKLSAgICAgICAgZnJpZW5kIGNsYXNzIEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Owor
ICAgICAgICBmcmllbmQgY2xhc3MgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKICAgICAgICAgCiAgICAgICAgIHZvaWQg
c2tpcEVtcHR5QnVja2V0cygpIAogICAgICAgICB7CkBAIC0xMTEsMTcgKzExMywxNyBAQCBuYW1l
c3BhY2UgS1hNTENvcmUgewogICAgICAgICBQb2ludGVyVHlwZSBtX2VuZFBvc2l0aW9uOwogICAg
IH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBLZXkgRXh0
cmFjdEtleShjb25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIGNvbnN0
IEtleSYgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxl
Q29uc3RJdGVyYXRvciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8
S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPiBIYXNoVGFibGVU
eXBlOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJh
Y3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz4gaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYg
SGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4g
SGFzaFRhYmxlVHlwZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZh
bHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0
b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBF
eHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0
b3I7CiAgICAgICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwogICAgICAgICB0eXBlZGVmIGNv
bnN0IFZhbHVlVHlwZSYgUmVmZXJlbmNlVHlwZTsKICAgICAgICAgdHlwZWRlZiBjb25zdCBWYWx1
ZVR5cGUgKlBvaW50ZXJUeXBlOwogICAgICAgICAKLSAgICAgICAgZnJpZW5kIGNsYXNzIEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OworICAg
ICAgICBmcmllbmQgY2xhc3MgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKICAgICAgICAgCiAgICAgICAgIEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3IoUG9pbnRlclR5cGUgcG9zaXRpb24sIFBvaW50ZXJUeXBlIGVuZFBvc2l0
aW9uKSAKICAgICAgICAgICAgIDogbV9wb3NpdGlvbihwb3NpdGlvbiksIG1fZW5kUG9zaXRpb24o
ZW5kUG9zaXRpb24pIApAQCAtMTcwLDE2ICsxNzIsNjYgQEAgbmFtZXNwYWNlIEtYTUxDb3JlIHsK
ICAgICAgICAgUG9pbnRlclR5cGUgbV9lbmRQb3NpdGlvbjsKICAgICB9OwogICAgIAotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIEtleSBFeHRyYWN0S2V5KGNvbnN0
IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+CisgICAg
dXNpbmcgc3RkOjpzd2FwOworCisgICAgLy8gc3dhcCBwYWlycyBieSBjb21wb25lbnQsIGluIGNh
c2Ugb2YgcGFpciBtZW1iZXJzIHRoYXQgc3BlY2lhbGl6ZSBzd2FwCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4KKyAgICBpbmxpbmUgdm9pZCBzd2FwKHN0ZDo6cGFpcjxULCBV
PiYgYSwgc3RkOjpwYWlyPFQsIFU+JiBiKQorICAgIHsKKyAgICAgICAgc3dhcChhLmZpcnN0LCBi
LmZpcnN0KTsKKyAgICAgICAgc3dhcChhLnNlY29uZCwgYi5zZWNvbmQpOworICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdXNlU3dhcD4KKyAgICBjbGFzcyBNb3ZlcjsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IE1vdmVyPFQsIHRydWU+IHsKKyAg
ICAgICAgc3RhdGljIHZvaWQgbW92ZShUJiBmcm9tLCBUJiB0bykKKyAgICAgICAgeworICAgICAg
ICAgICAgc3dhcChmcm9tLCB0byk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgTW92ZXI8VCwgZmFsc2U+IHsKKyAgICAgICAgc3RhdGlj
IHZvaWQgbW92ZShUJiBmcm9tLCBUJiB0bykKKyAgICAgICAgeworICAgICAgICAgICAgdG8gPSBm
cm9tOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnM+CisgICAgY2xhc3MgSWRlbnRpdHlI
YXNoVHJhbnNsYXRvciB7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgS2V5JiBrZXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBIYXNoRnVuY3Rpb25zOjpoYXNoKGtleSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMg
Ym9vbCBlcXVhbChjb25zdCBLZXkmIGEsIGNvbnN0IEtleSYgYikKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIEhhc2hGdW5jdGlvbnM6OmVxdWFsKGEsIGIpOworICAgICAgICB9CisKKyAg
ICAgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFZhbHVlJiBsb2NhdGlvbiwgY29uc3QgS2V5JiBr
ZXksIGNvbnN0IFZhbHVlJiB2YWx1ZSwgdW5zaWduZWQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGxvY2F0aW9uID0gdmFsdWU7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgY29uc3QgS2V5JiBFeHRyYWN0S2V5KGNvbnN0IFZh
bHVlICYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGUgewogICAgIHB1YmxpYzoKLSAgICAgICAg
dHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHM+IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0
SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPiBj
b25zdF9pdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZh
bHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0
b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBF
eHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0
b3I7CiAgICAgICAgIHR5cGVkZWYgS2V5IEtleVR5cGU7CiAgICAgICAgIHR5cGVkZWYgVmFsdWUg
VmFsdWVUeXBlOworICAgICAgICB0eXBlZGVmIElkZW50aXR5SGFzaFRyYW5zbGF0b3I8S2V5LCBW
YWx1ZSwgSGFzaEZ1bmN0aW9ucz4gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTsKICAgICAgICAgCiAg
ICAgICAgIEhhc2hUYWJsZSgpIDogbV90YWJsZSgwKSwgbV90YWJsZVNpemUoMCksIG1fdGFibGVT
aXplTWFzaygwKSwgbV9rZXlDb3VudCgwKSwgbV9kZWxldGVkQ291bnQoMCkge30KLSAgICAgICAg
fkhhc2hUYWJsZSgpIHsgZmFzdEZyZWUobV90YWJsZSk7IH0KKyAgICAgICAgfkhhc2hUYWJsZSgp
IHsgZGVhbGxvY2F0ZVRhYmxlKG1fdGFibGUsIG1fdGFibGVTaXplKTsgfQogICAgICAgICAKICAg
ICAgICAgSGFzaFRhYmxlKGNvbnN0IEhhc2hUYWJsZSYgb3RoZXIpOwogICAgICAgICB2b2lkIHN3
YXAoY29uc3QgSGFzaFRhYmxlJiBvdGhlcik7CkBAIC0xOTMsMTIgKzI0NSwxMiBAQCBuYW1lc3Bh
Y2UgS1hNTENvcmUgewogICAgICAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5Q291
bnQ7IH0KICAgICAgICAgaW50IGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV90YWJsZVNpemU7
IH0KICAgICAgICAgCi0gICAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4gaW5zZXJ0KGNv
bnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGluc2VydDxLZXlUeXBlLCBWYWx1ZVR5cGUs
IGhhc2gsIGVxdWFsLCBpZGVudGl0eUNvbnZlcnQ+KGV4dHJhY3RLZXkodmFsdWUpLCB2YWx1ZSk7
IH0KKyAgICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPiBpbnNlcnQoY29uc3QgVmFsdWVU
eXBlJiB2YWx1ZSkgeyByZXR1cm4gaW5zZXJ0PEtleVR5cGUsIFZhbHVlVHlwZSwgSWRlbnRpdHlU
cmFuc2xhdG9yVHlwZT4oRXh0cmFjdEtleSh2YWx1ZSksIHZhbHVlKTsgfQogICAgICAgICAKICAg
ICAgICAgLy8gYSBzcGVjaWFsIHZlcnNpb24gb2YgaW5zZXJ0KCkgdGhhdCBmaW5kcyB0aGUgb2Jq
ZWN0IGJ5IGhhc2hpbmcgYW5kIGNvbXBhcmluZwogICAgICAgICAvLyB3aXRoIHNvbWUgb3RoZXIg
dHlwZSwgdG8gYXZvaWQgdGhlIGNvc3Qgb2YgdHlwZSBjb252ZXJzaW9uIGlmIHRoZSBvYmplY3Qg
aXMgYWxyZWFkeQogICAgICAgICAvLyBpbiB0aGUgdGFibGUKLSAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgRXh0cmEsIHVuc2lnbmVkIEhhc2hUKGNvbnN0IFQmKSwgYm9vbCBF
cXVhbFQoY29uc3QgS2V5JiwgY29uc3QgVCYpLCBWYWx1ZVR5cGUgQ29udmVydFQoY29uc3QgVCYs
IGNvbnN0IEV4dHJhICYsIHVuc2lnbmVkKT4gCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEV4dHJhLCB0eXBlbmFtZSBIYXNoVHJhbnNsYXRvcj4gCiAgICAgICAgIHN0ZDo6
cGFpcjxpdGVyYXRvciwgYm9vbD4gaW5zZXJ0KGNvbnN0IFQmIGtleSwgY29uc3QgRXh0cmEmIGV4
dHJhKTsKICAgICAgICAgCiAgICAgICAgIGl0ZXJhdG9yIGZpbmQoY29uc3QgS2V5VHlwZSYga2V5
KTsKQEAgLTIwOSwyNCArMjYxLDE5IEBAIG5hbWVzcGFjZSBLWE1MQ29yZSB7CiAgICAgICAgIHZv
aWQgcmVtb3ZlKGl0ZXJhdG9yIGl0KTsKICAgICAgICAgdm9pZCBjbGVhcigpOwogICAgICAgICAK
LSAgICAgICAgc3RhdGljIGJvb2wgaXNFbXB0eUJ1Y2tldChjb25zdCBWYWx1ZVR5cGUmIHZhbHVl
KSB7IHJldHVybiBleHRyYWN0S2V5KHZhbHVlKSA9PSBleHRyYWN0S2V5KFRyYWl0czo6ZW1wdHlW
YWx1ZSgpKTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRCdWNrZXQoY29uc3QgVmFs
dWVUeXBlJiB2YWx1ZSkgeyByZXR1cm4gZXh0cmFjdEtleSh2YWx1ZSkgPT0gZXh0cmFjdEtleShU
cmFpdHM6OmRlbGV0ZWRWYWx1ZSgpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0VtcHR5QnVj
a2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIEV4dHJhY3RLZXkodmFsdWUpID09
IEtleVRyYWl0czo6ZW1wdHlWYWx1ZSgpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzRGVsZXRl
ZEJ1Y2tldChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBFeHRyYWN0S2V5KHZhbHVl
KSA9PSBLZXlUcmFpdHM6OmRlbGV0ZWRWYWx1ZSgpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlz
RW1wdHlPckRlbGV0ZWRCdWNrZXQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgeyByZXR1cm4gaXNF
bXB0eUJ1Y2tldCh2YWx1ZSkgfHwgaXNEZWxldGVkQnVja2V0KHZhbHVlKTsgfQogICAgICAgICAK
ICAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBLZXlUeXBl
JiBrZXkpIHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6Omhhc2goa2V5KTsgfQotICAgICAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBLZXlUeXBlJiBhLCBjb25zdCBLZXlUeXBlJiBiKSB7IHJldHVy
biBIYXNoRnVuY3Rpb25zOjplcXVhbChhLCBiKTsgfSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgIC8vIEZJWE1FOiBhc3N1bWVzIGtleSA9PSB2YWx1ZTsgc3BlY2lhbCBsb29rdXAgbmVlZHMg
YWRqdXN0aW5nCi0gICAgICAgIHN0YXRpYyBWYWx1ZVR5cGUgaWRlbnRpdHlDb252ZXJ0KGNvbnN0
IEtleVR5cGUmIGtleSwgY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSwgdW5zaWduZWQpIHsgcmV0dXJu
IHZhbHVlOyB9Ci0gICAgICAgIHN0YXRpYyBLZXlUeXBlIGV4dHJhY3RLZXkoY29uc3QgVmFsdWVU
eXBlJiB2YWx1ZSkgeyByZXR1cm4gRXh0cmFjdEtleSh2YWx1ZSk7IH0KLSAgICAgICAgCiAgICAg
ICAgIHN0YXRpYyBWYWx1ZVR5cGUgKmFsbG9jYXRlVGFibGUoaW50IHNpemUpOwotICAgICAgICAK
KyAgICAgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZVRhYmxlKFZhbHVlVHlwZSAqdGFibGUsIGlu
dCBzaXplKTsKKwogICAgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxWYWx1ZVR5cGUgKiwgYm9vbD4g
TG9va3VwVHlwZTsKICAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8TG9va3VwVHlwZSwgdW5zaWdu
ZWQ+IEZ1bGxMb29rdXBUeXBlOwogICAgICAgICAKLSAgICAgICAgTG9va3VwVHlwZSBsb29rdXAo
Y29uc3QgS2V5JiBrZXkpIHsgcmV0dXJuIGxvb2t1cDxLZXksIGhhc2gsIGVxdWFsPihrZXkpLmZp
cnN0OyB9Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIEhhc2hUKGNvbnN0
IFQmKSwgYm9vbCBFcXVhbFQoY29uc3QgS2V5JiwgY29uc3QgVCYpPgorICAgICAgICBMb29rdXBU
eXBlIGxvb2t1cChjb25zdCBLZXkmIGtleSkgeyByZXR1cm4gbG9va3VwPEtleSwgSWRlbnRpdHlU
cmFuc2xhdG9yVHlwZT4oa2V5KS5maXJzdDsgfQorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBIYXNoVHJhbnNsYXRvcj4KICAgICAgICAgRnVsbExvb2t1cFR5cGUgbG9va3Vw
KGNvbnN0IFQmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgcmVtb3ZlKFZhbHVlVHlwZSAqKTsK
QEAgLTIzOCwxMCArMjg1LDEwIEBAIG5hbWVzcGFjZSBLWE1MQ29yZSB7CiAgICAgICAgIHZvaWQg
c2hyaW5rKCkgeyByZWhhc2gobV90YWJsZVNpemUgLyAyKTsgfQogICAgICAgICAKICAgICAgICAg
dm9pZCByZWhhc2goaW50IG5ld1RhYmxlU2l6ZSk7Ci0gICAgICAgIHZvaWQgcmVpbnNlcnQoY29u
c3QgVmFsdWVUeXBlJik7CisgICAgICAgIHZvaWQgcmVpbnNlcnQoVmFsdWVUeXBlJik7CiAgICAg
ICAgIAotICAgICAgICBzdGF0aWMgdm9pZCBjbGVhckJ1Y2tldChWYWx1ZVR5cGUmIGtleSkgeyBr
ZXkgPSBUcmFpdHM6OmVtcHR5VmFsdWUoKTt9Ci0gICAgICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUJ1
Y2tldChWYWx1ZVR5cGUmIGtleSkgeyBrZXkgPSBUcmFpdHM6OmRlbGV0ZWRWYWx1ZSgpO30KKyAg
ICAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUJ1Y2tldChWYWx1ZVR5cGUmIGJ1Y2tldCkgeyBu
ZXcgKCZidWNrZXQpIFZhbHVlVHlwZShUcmFpdHM6OmVtcHR5VmFsdWUoKSk7IH0KKyAgICAgICAg
c3RhdGljIHZvaWQgZGVsZXRlQnVja2V0KFZhbHVlVHlwZSYgYnVja2V0KSB7IGFzc2lnbkRlbGV0
ZWQ8VmFsdWVUeXBlLCBUcmFpdHM+KGJ1Y2tldCk7IH0KICAgICAgICAgCiAgICAgICAgIEZ1bGxM
b29rdXBUeXBlIG1ha2VMb29rdXBSZXN1bHQoVmFsdWVUeXBlICpwb3NpdGlvbiwgYm9vbCBmb3Vu
ZCwgdW5zaWduZWQgaGFzaCkKICAgICAgICAgewpAQCAtMjY3LDEzICszMTQsMTMgQEAgbmFtZXNw
YWNlIEtYTUxDb3JlIHsKICAgICAgICAgaW50IG1fZGVsZXRlZENvdW50OwogICAgIH07CiAgICAg
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgS2V5IEV4dHJhY3RL
ZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cz4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBIYXNoVChjb25zdCBUJiksIGJv
b2wgRXF1YWxUKGNvbnN0IEtleSYsIGNvbnN0IFQmKT4KLSAgICBpbmxpbmUgdHlwZW5hbWUgSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OkZ1
bGxMb29rdXBUeXBlIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHM+Ojpsb29rdXAoY29uc3QgVCYga2V5KQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAm
KSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+
CisgICAgaW5saW5lIHR5cGVuYW1lIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OkZ1bGxMb29rdXBUeXBlIEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz46Omxvb2t1cChjb25zdCBUJiBrZXkpCiAgICAgewogICAgICAgICBhc3NlcnQobV90YWJsZSk7
CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBoID0gSGFzaFQoa2V5KTsKKyAgICAgICAgdW5z
aWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7CiAgICAgICAgIGludCBzaXplTWFz
ayA9IG1fdGFibGVTaXplTWFzazsKICAgICAgICAgaW50IGkgPSBoICYgc2l6ZU1hc2s7CiAgICAg
ICAgIGludCBrID0gMDsKQEAgLTI4OSw3ICszMzYsNyBAQCBuYW1lc3BhY2UgS1hNTENvcmUgewog
ICAgICAgICB3aGlsZSAoIWlzRW1wdHlCdWNrZXQoKihlbnRyeSA9IHRhYmxlICsgaSkpKSB7CiAg
ICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCiAgICAgICAgICAgICAgICAg
ZGVsZXRlZEVudHJ5ID0gZW50cnk7Ci0gICAgICAgICAgICBlbHNlIGlmIChFcXVhbFQoZXh0cmFj
dEtleSgqZW50cnkpLCBrZXkpKQorICAgICAgICAgICAgZWxzZSBpZiAoSGFzaFRyYW5zbGF0b3I6
OmVxdWFsKEV4dHJhY3RLZXkoKmVudHJ5KSwga2V5KSkKICAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZUxvb2t1cFJlc3VsdChlbnRyeSwgdHJ1ZSwgaCk7CiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RB
VFMKICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKQEAgLTMwNCwxNiArMzUxLDE2IEBAIG5hbWVz
cGFjZSBLWE1MQ29yZSB7CiAgICAgfQogICAgIAogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIEtleSBFeHRyYWN0S2V5KGNvbnN0IFZhbHVlICYpLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRXh0cmEsIHVuc2lnbmVkIEhhc2hUKGNvbnN0IFQmKSwgYm9vbCBFcXVh
bFQoY29uc3QgS2V5JiwgY29uc3QgVCYpLCBWYWx1ZSBDb252ZXJ0VChjb25zdCBUJiwgY29uc3Qg
RXh0cmEgJiwgdW5zaWduZWQpPiAKLSAgICBpbmxpbmUgc3RkOjpwYWlyPHR5cGVuYW1lIEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjppdGVy
YXRvciwgYm9vbD4gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cz46Omluc2VydChjb25zdCBUJiBrZXksIGNvbnN0IEV4dHJhICZleHRyYSkKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBLZXkmIEV4dHJh
Y3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIEV4dHJhLCB0eXBlbmFtZSBIYXNoVHJhbnNsYXRvcj4gCisgICAgaW5saW5lIHN0ZDo6cGFp
cjx0eXBlbmFtZSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+OjppdGVyYXRvciwgYm9vbD4gSGFzaFRhYmxlPEtleSwgVmFs
dWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6aW5zZXJ0
KGNvbnN0IFQmIGtleSwgY29uc3QgRXh0cmEgJmV4dHJhKQogICAgIHsKICAgICAgICAgaWYgKCFt
X3RhYmxlKQogICAgICAgICAgICAgZXhwYW5kKCk7CiAgICAgICAgIAogICAgICAgICBjaGVja1Rh
YmxlQ29uc2lzdGVuY3koKTsKICAgICAgICAgCi0gICAgICAgIEZ1bGxMb29rdXBUeXBlIGxvb2t1
cFJlc3VsdCA9IGxvb2t1cDxULCBIYXNoVCwgRXF1YWxUPihrZXkpOworICAgICAgICBGdWxsTG9v
a3VwVHlwZSBsb29rdXBSZXN1bHQgPSBsb29rdXA8VCwgSGFzaFRyYW5zbGF0b3I+KGtleSk7CiAg
ICAgICAgIAogICAgICAgICBWYWx1ZVR5cGUgKmVudHJ5ID0gbG9va3VwUmVzdWx0LmZpcnN0LmZp
cnN0OwogICAgICAgICBib29sIGZvdW5kID0gbG9va3VwUmVzdWx0LmZpcnN0LnNlY29uZDsKQEAg
LTMyNiwxMSArMzczLDE0IEBAIG5hbWVzcGFjZSBLWE1MQ29yZSB7CiAgICAgICAgIGlmIChpc0Rl
bGV0ZWRCdWNrZXQoKmVudHJ5KSkKICAgICAgICAgICAgIC0tbV9kZWxldGVkQ291bnQ7CiAgICAg
ICAgIAotICAgICAgICAqZW50cnkgPSBDb252ZXJ0VChrZXksIGV4dHJhLCBoKTsKKyAgICAgICAg
SGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIGtleSwgZXh0cmEsIGgpOwogICAgICAg
ICArK21fa2V5Q291bnQ7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRXhwYW5kKCkpIHsK
LSAgICAgICAgICAgIEtleVR5cGUgZW50ZXJlZEtleSA9IGV4dHJhY3RLZXkoKmVudHJ5KTsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiB0aGlzIG1ha2VzIGFuIGV4dHJhIGNvcHkgb24gZXhwYW5kLiBQ
cm9iYWJseSBub3QgdGhhdCBiYWQgc2luY2UKKyAgICAgICAgICAgIC8vIGV4cGFuZCBpcyByYXJl
LCBidXQgd291bGQgYmUgYmV0dGVyIHRvIGhhdmUgYSB2ZXJzaW9uIG9mIGV4cGFuZCB0aGF0IGNh
bgorICAgICAgICAgICAgLy8gZm9sbG93IGEgcGl2b3QgZW50cnkgYW5kIHJldHVybiB0aGUgbmV3
IHBvc2l0aW9uCisgICAgICAgICAgICBLZXlUeXBlIGVudGVyZWRLZXkgPSBFeHRyYWN0S2V5KCpl
bnRyeSk7CiAgICAgICAgICAgICBleHBhbmQoKTsKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihmaW5kKGVudGVyZWRLZXkpLCB0cnVlKTsKICAgICAgICAgfQpAQCAtMzQwLDIxICsz
OTAsMjEgQEAgbmFtZXNwYWNlIEtYTUxDb3JlIHsKICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKG1ha2VJdGVyYXRvcihlbnRyeSksIHRydWUpOwogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBLZXkgRXh0cmFjdEtleShjb25zdCBWYWx1
ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgotICAgIGlubGlu
ZSB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHM+OjpyZWluc2VydChjb25zdCBWYWx1ZVR5cGUmIGVudHJ5KQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShjb25zdCBW
YWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+CisgICAgaW5saW5lIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVpbnNlcnQoVmFsdWVU
eXBlJiBlbnRyeSkKICAgICB7CiAgICAgICAgIGFzc2VydChtX3RhYmxlKTsKLSAgICAgICAgYXNz
ZXJ0KCFsb29rdXAoZXh0cmFjdEtleShlbnRyeSkpLnNlY29uZCk7Ci0gICAgICAgIGFzc2VydCgh
aXNEZWxldGVkQnVja2V0KCoobG9va3VwKGV4dHJhY3RLZXkoZW50cnkpKS5maXJzdCkpKTsKKyAg
ICAgICAgYXNzZXJ0KCFsb29rdXAoRXh0cmFjdEtleShlbnRyeSkpLnNlY29uZCk7CisgICAgICAg
IGFzc2VydCghaXNEZWxldGVkQnVja2V0KCoobG9va3VwKEV4dHJhY3RLZXkoZW50cnkpKS5maXJz
dCkpKTsKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICArK0hhc2hUYWJsZVN0YXRz
OjpudW1SZWluc2VydHM7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgICoobG9va3VwKGV4dHJh
Y3RLZXkoZW50cnkpKS5maXJzdCkgPSBlbnRyeTsKKyAgICAgICAgTW92ZXI8VmFsdWVUeXBlLCBU
cmFpdHM6Om5lZWRzRGVzdHJ1Y3Rpb24+Ojptb3ZlKGVudHJ5LCAqKGxvb2t1cChFeHRyYWN0S2V5
KGVudHJ5KSkuZmlyc3QpKTsKICAgICB9CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgS2V5IEV4dHJhY3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KLSAgICBpbmxpbmUgdHlwZW5hbWUgSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46Oml0
ZXJhdG9yIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHM+OjpmaW5kKGNvbnN0IEtleSYga2V5KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwg
dHlwZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAmKSwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
CisgICAgaW5saW5lIHR5cGVuYW1lIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46Oml0ZXJhdG9yIEhhc2hUYWJsZTxLZXks
IFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmZp
bmQoY29uc3QgS2V5JiBrZXkpCiAgICAgewogICAgICAgICBpZiAoIW1fdGFibGUpCiAgICAgICAg
ICAgICByZXR1cm4gZW5kKCk7CkBAIC0zNjUsOCArNDE1LDggQEAgbmFtZXNwYWNlIEtYTUxDb3Jl
IHsKICAgICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcihyZXN1bHQuZmlyc3QpOwogICAgIH0KICAg
ICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBLZXkgRXh0cmFj
dEtleShjb25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzPgotICAgIGlubGluZSB0eXBlbmFtZSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtl
eSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6Y29uc3RfaXRlcmF0b3IgSGFzaFRhYmxlPEtleSwg
VmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmZpbmQoY29uc3QgS2V5
JiBrZXkpIGNvbnN0CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
Y29uc3QgS2V5JiBFeHRyYWN0S2V5KGNvbnN0IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICBpbmxpbmUgdHlw
ZW5hbWUgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPjo6Y29uc3RfaXRlcmF0b3IgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6ZmluZChjb25zdCBL
ZXkmIGtleSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghbV90YWJsZSkKICAgICAgICAgICAg
IHJldHVybiBlbmQoKTsKQEAgLTM3Nyw4ICs0MjcsOCBAQCBuYW1lc3BhY2UgS1hNTENvcmUgewog
ICAgICAgICByZXR1cm4gbWFrZUNvbnN0SXRlcmF0b3IocmVzdWx0LmZpcnN0KTsKICAgICB9CiAg
ICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgS2V5IEV4dHJh
Y3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cz4KLSAgICBpbmxpbmUgYm9vbCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6Y29udGFpbnMoY29uc3QgS2V5VHlwZSYga2V5KSBjb25z
dCAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBLZXkm
IEV4dHJhY3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIGlubGluZSBib29sIEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz46OmNvbnRhaW5zKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgCiAgICAgewogICAgICAgICBp
ZiAoIW1fdGFibGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zODYsOCArNDM2LDgg
QEAgbmFtZXNwYWNlIEtYTUxDb3JlIHsKICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SGFzaFRh
YmxlICo+KHRoaXMpLT5sb29rdXAoa2V5KS5zZWNvbmQ7CiAgICAgfQogICAgIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIEtleSBFeHRyYWN0S2V5KGNvbnN0IFZh
bHVlICYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Ci0gICAgaW5s
aW5lIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cz46OnJlbW92ZShWYWx1ZVR5cGUgKnBvcykKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBLZXkmIEV4dHJhY3RLZXkoY29uc3QgVmFsdWUgJiks
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgorICAgIGlubGluZSB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZShWYWx1ZVR5cGUgKnBvcykK
ICAgICB7CiAgICAgICAgIGNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogICAgICAgICAKQEAgLTQw
NSw4ICs0NTUsOCBAQCBuYW1lc3BhY2UgS1hNTENvcmUgewogICAgICAgICBjaGVja1RhYmxlQ29u
c2lzdGVuY3koKTsKICAgICB9CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBl
bmFtZSBWYWx1ZSwgS2V5IEV4dHJhY3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KLSAgICBpbmxpbmUgdm9pZCBIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6cmVtb3ZlKGNvbnN0
IEtleVR5cGUmIGtleSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCBjb25zdCBLZXkmIEV4dHJhY3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIGlubGluZSB2
b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz46OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCiAgICAgeyAKICAgICAg
ICAgaWYgKCFtX3RhYmxlKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDE0LDggKzQ2NCw4IEBA
IG5hbWVzcGFjZSBLWE1MQ29yZSB7CiAgICAgICAgIHJlbW92ZShmaW5kKGtleSkpOyAKICAgICB9
CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgS2V5IEV4
dHJhY3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cz4KLSAgICBpbmxpbmUgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtl
eSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShj
b25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgaW5saW5lIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlKGl0
ZXJhdG9yIGl0KQogICAgIHsgCiAgICAgICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTQyNCw4ICs0NzQsOCBAQCBuYW1lc3BhY2UgS1hNTENvcmUgewogICAgIH0K
ICAgICAKICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBL
ZXkgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzPgotICAgIGlubGluZSBWYWx1ZSAqSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmFsbG9jYXRlVGFibGUoaW50IHNpemUp
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgY29uc3QgS2V5JiBF
eHRyYWN0S2V5KGNvbnN0IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICBpbmxpbmUgVmFsdWUgKkhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz46OmFsbG9jYXRlVGFibGUoaW50IHNpemUpCiAgICAgewogICAgICAgICAvLyB3b3VsZCB1c2Ug
YSB0ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rpb24gd2l0aCBleHBsaWNpdCBzcGVjaWFsaXphdGlvbnMg
aGVyZSwgYnV0CiAgICAgICAgIC8vIGdjYyBkb2Vzbid0IGFwcGVhciB0byBzdXBwb3J0IHRoYXQK
QEAgLTQzNCwxNCArNDg0LDI2IEBAIG5hbWVzcGFjZSBLWE1MQ29yZSB7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgVmFsdWVUeXBlICpyZXN1bHQgPSByZWludGVycHJldF9jYXN0PFZhbHVl
VHlwZSAqPihmYXN0TWFsbG9jKHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSkpOyAKICAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgY2xl
YXJCdWNrZXQocmVzdWx0W2ldKTsKKyAgICAgICAgICAgICAgICBpbml0aWFsaXplQnVja2V0KHJl
c3VsdFtpXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICAgICB9CiAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgY29uc3QgS2V5JiBFeHRyYWN0S2V5KGNvbnN0IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICBpbmxpbmUg
dm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+OjpkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBlICp0YWJsZSwgaW50IHNp
emUpCisgICAgeworICAgICAgICBpZiAoVHJhaXRzOjpuZWVkc0Rlc3RydWN0aW9uKSB7CisgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgICAg
ICgmdGFibGVbaV0pLT5+VmFsdWVUeXBlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBmYXN0RnJlZSh0YWJsZSk7CisgICAgfQogICAgIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIEtleSBFeHRyYWN0S2V5KGNvbnN0IFZhbHVlICYpLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Ci0gICAgaW5saW5lIHZvaWQg
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46
OmV4cGFuZCgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgY29u
c3QgS2V5JiBFeHRyYWN0S2V5KGNvbnN0IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICBpbmxpbmUgdm9pZCBI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+OjpleHBhbmQoKQogICAgIHsgCiAgICAgICAgIGludCBuZXdTaXplOwogICAgICAg
ICBpZiAobV90YWJsZVNpemUgPT0gMCkKQEAgLTQ1NCw4ICs1MTYsOCBAQCBuYW1lc3BhY2UgS1hN
TENvcmUgewogICAgICAgICByZWhhc2gobmV3U2l6ZSk7IAogICAgIH0KICAgICAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBLZXkgRXh0cmFjdEtleShjb25zdCBW
YWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgotICAgIHZv
aWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cz46OnJlaGFzaChpbnQgbmV3VGFibGVTaXplKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwg
dHlwZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAmKSwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
CisgICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZWhhc2goaW50IG5ld1RhYmxlU2l6ZSkKICAgICB7CiAg
ICAgICAgIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKICAgICAgICAgCkBAIC00
NzIsNDQgKzUzNCw0NSBAQCBuYW1lc3BhY2UgS1hNTENvcmUgewogICAgICAgICBtX3RhYmxlID0g
YWxsb2NhdGVUYWJsZShuZXdUYWJsZVNpemUpOwogICAgICAgICAKICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgIT0gb2xkVGFibGVTaXplOyArK2kpIHsKLSAgICAgICAgICAgIFZhbHVlVHlwZSBl
bnRyeSA9IG9sZFRhYmxlW2ldOwotICAgICAgICAgICAgaWYgKCFpc0VtcHR5T3JEZWxldGVkQnVj
a2V0KGVudHJ5KSkKLSAgICAgICAgICAgICAgICByZWluc2VydChlbnRyeSk7CisgICAgICAgICAg
ICBpZiAoIWlzRW1wdHlPckRlbGV0ZWRCdWNrZXQob2xkVGFibGVbaV0pKQorICAgICAgICAgICAg
ICAgIHJlaW5zZXJ0KG9sZFRhYmxlW2ldKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
bV9kZWxldGVkQ291bnQgPSAwOwogICAgICAgICAKLSAgICAgICAgZmFzdEZyZWUob2xkVGFibGUp
OworICAgICAgICBkZWFsbG9jYXRlVGFibGUob2xkVGFibGUsIG9sZFRhYmxlU2l6ZSk7CiAgICAg
ICAgIAogICAgICAgICBjaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKICAgICB9CiAgICAgCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgS2V5IEV4dHJhY3RLZXkoY29u
c3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KLSAg
ICBpbmxpbmUgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzPjo6Y2xlYXIoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAg
aW5saW5lIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Y2xlYXIoKQogICAgIHsKLSAgICAgICAgZmFzdEZyZWUo
bV90YWJsZSk7CisgICAgICAgIGRlYWxsb2NhdGVUYWJsZShtX3RhYmxlLCBtX3RhYmxlU2l6ZSk7
CiAgICAgICAgIG1fdGFibGUgPSAwOwogICAgICAgICBtX3RhYmxlU2l6ZSA9IDA7CiAgICAgICAg
IG1fdGFibGVTaXplTWFzayA9IDA7CiAgICAgICAgIG1fa2V5Q291bnQgPSAwOwogICAgIH0KICAg
ICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBLZXkgRXh0cmFj
dEtleShjb25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzPgotICAgIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHM+OjpIYXNoVGFibGUoY29uc3QgSGFzaFRhYmxlJiBvdGhlcikKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBLZXkmIEV4dHJhY3RLZXkoY29u
c3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgorICAgIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46Okhhc2hUYWJsZShjb25zdCBIYXNoVGFi
bGUmIG90aGVyKQogICAgICAgICA6IG1fdGFibGUoMCkKLSAgICAgICAgICAsIG1fdGFibGVTaXpl
KG90aGVyLm1fdGFibGVTaXplKQotICAgICAgICAgICwgbV90YWJsZVNpemVNYXNrKG90aGVyLm1f
dGFibGVTaXplTWFzaykKLSAgICAgICAgICAsIG1fa2V5Q291bnQob3RoZXIubV9rZXlDb3VudCkK
LSAgICAgICAgICAsIG1fZGVsZXRlZENvdW50KG90aGVyLm1fZGVsZXRlZENvdW50KQorICAgICAg
ICAsIG1fdGFibGVTaXplKDApCisgICAgICAgICwgbV90YWJsZVNpemVNYXNrKDApCisgICAgICAg
ICwgbV9rZXlDb3VudCgwKQorICAgICAgICAsIG1fZGVsZXRlZENvdW50KDApCiAgICAgewotICAg
ICAgICBpZiAobV90YWJsZVNpemUgIT0gMCkgewotICAgICAgICAgICAgbV90YWJsZSA9IGZhc3RN
YWxsb2MobV90YWJsZVNpemUpOwotICAgICAgICAgICAgbWVtY3B5KG90aGVyLm1fdGFibGUsIG1f
dGFibGUsIG1fdGFibGVTaXplICogc2l6ZW9mKFZhbHVlVHlwZSkpOworICAgICAgICAvLyBkb2Vz
bid0IG1hdHRlciBpZiBjb3B5aW5nIGEgaGFzaHRhYmxlIGlzIGVmZmljaWVudCBzbyBqdXN0Cisg
ICAgICAgIC8vIGRvIGl0IHRoZSBkdW1iIHdheSwgYnkgY29weWluZyBlYWNoIGVsZW1lbnQuCisg
ICAgICAgIGl0ZXJhdG9yIGVuZCA9IG90aGVyLmVuZCgpOworICAgICAgICBmb3IgKGl0ZXJhdG9y
IGl0ID0gb3RoZXIuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBpbnNl
cnQoKml0KTsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCBLZXkgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAmKSwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgotICAgIHZvaWQgSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnN3YXAoY29uc3Qg
SGFzaFRhYmxlJiBvdGhlcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZh
bHVlLCBjb25zdCBLZXkmIEV4dHJhY3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQg
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPjo6c3dhcChjb25zdCBIYXNoVGFibGUmIG90aGVyKQogICAgIHsKICAgICAgICAg
VmFsdWVUeXBlICp0bXBfdGFibGUgPSBtX3RhYmxlOwogICAgICAgICBtX3RhYmxlID0gb3RoZXIu
bV90YWJsZTsKQEAgLTUzMiw4ICs1OTUsOCBAQCBuYW1lc3BhY2UgS1hNTENvcmUgewogICAgICAg
ICBvdGhlci5tX2RlbGV0ZWRDb3VudCA9IHRtcF9kZWxldGVkQ291bnQ7CiAgICAgfQogICAgIAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIEtleSBFeHRyYWN0S2V5
KGNvbnN0IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+
Ci0gICAgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cz4mIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHM+OjpvcGVyYXRvcj0oY29uc3QgSGFzaFRhYmxlJiBvdGhlcikKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBLZXkmIEV4dHJhY3RLZXkoY29uc3Qg
VmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzPgorICAgIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4mIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46Om9wZXJhdG9yPShjb25z
dCBIYXNoVGFibGUmIG90aGVyKQogICAgIHsKICAgICAgICAgSGFzaFRhYmxlIHRtcChvdGhlcik7
CiAgICAgICAgIHN3YXAodG1wKTsKQEAgLTU0MiwxNiArNjA1LDE2IEBAIG5hbWVzcGFjZSBLWE1M
Q29yZSB7CiAgICAgCiAjaWYgQ0hFQ0tfSEFTSFRBQkxFX0NPTlNJU1RFTkNZCiAgICAgCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgS2V5IEV4dHJhY3RLZXkoY29u
c3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KLSAg
ICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHM+OjpjaGVja1RhYmxlQ29uc2lzdGVuY3koKSBjb25zdAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShjb25zdCBWYWx1
ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHM+CisgICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpjaGVja1RhYmxlQ29uc2lzdGVuY3koKSBj
b25zdAogICAgIHsKICAgICAgICAgY2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpOwog
ICAgICAgICBhc3NlcnQoIXNob3VsZEV4cGFuZCgpKTsKICAgICAgICAgYXNzZXJ0KCFzaG91bGRT
aHJpbmsoKSk7CiAgICAgfQogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIEtleSBFeHRyYWN0S2V5KGNvbnN0IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Ci0gICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5
RXhjZXB0U2l6ZSgpIGNvbnN0CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgY29uc3QgS2V5JiBFeHRyYWN0S2V5KGNvbnN0IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB2b2lk
IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cz46OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSBjb25zdAogICAg
IHsKICAgICAgICAgaWYgKCFtX3RhYmxlKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTY4LDcg
KzYzMSw3IEBAIG5hbWVzcGFjZSBLWE1MQ29yZSB7CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9y
IGl0ID0gZmluZChleHRyYWN0S2V5KCplbnRyeSkpOworICAgICAgICAgICAgY29uc3RfaXRlcmF0
b3IgaXQgPSBmaW5kKEV4dHJhY3RLZXkoKmVudHJ5KSk7CiAgICAgICAgICAgICBhc3NlcnQoZW50
cnkgPT0gaXQubV9wb3NpdGlvbik7CiAgICAgICAgICAgICArK2NvdW50OwogICAgICAgICB9Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9IYXNoVHJhaXRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2t4bWxjb3JlL0hhc2hUcmFpdHMuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIgSmF2YVNjcmlwdENvcmUva3ht
bGNvcmUvSGFzaFRyYWl0cy5oCi0tLSBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9IYXNoVHJhaXRz
LmgJMTYgRGVjIDIwMDUgMjA6MzM6MjEgLTAwMDAJMS4yCisrKyBKYXZhU2NyaXB0Q29yZS9reG1s
Y29yZS9IYXNoVHJhaXRzLmgJMjEgRGVjIDIwMDUgMjM6MjQ6MTAgLTAwMDAKQEAgLTIzLDgwICsy
MywxMTYgQEAKICNpZm5kZWYgS1hNTENPUkVfSEFTSF9UUkFJVFNfSAogI2RlZmluZSBLWE1MQ09S
RV9IQVNIX1RSQUlUU19ICiAKLSNpbmNsdWRlIDx1dGlsaXR5PgotI2lmbmRlZiBXSU4zMgotI2lu
Y2x1ZGUgPGJpdHMvY3BwX3R5cGVfdHJhaXRzLmg+Ci0jZW5kaWYKKyNpbmNsdWRlICJSZWZQdHIu
aCIKIAogbmFtZXNwYWNlIEtYTUxDb3JlIHsKIAogICAgIHVzaW5nIHN0ZDo6cGFpcjsKICAKLSAg
ICAvLyBGSVhNRTogc3RvcCB1c2luZyB0aGlzIGV2aWwgaGFjaywgdXNlIHNvbWV0aGluZyBzdXBw
b3J0ZWQgb3IgZWxzZSBzcGVjaWFsaXplCi0gICAgLy8gZm9yIGFsbCBudW1lcml0IGN5cGVzIGJ5
IGhhbmQKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBIYXNoVHJhaXRzIHsK
LSAgICAgICAgdHlwZWRlZiBUIHRyYWl0VHlwZTsKLSNpZmRlZiBfX0dMSUJDWFhfXyAvLyBnY2Mg
My40IGFuZCBncmVhdGVyOgotICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNa
ZXJvID0gc3RkOjpfX2lzX2ludGVnZXI8VD46Ol9fdmFsdWU7Ci0jZWxzZQotICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gc3RkOjpfX2lzX2ludGVnZXI8VD46Ol9N
X3R5cGU7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyB0cmFpdFR5cGUgZW1wdHlW
YWx1ZSgpIHsKLSAgICAgICAgICAgIHJldHVybiB0cmFpdFR5cGUoKTsKLSAgICAgICAgfQorICAg
IHN0cnVjdCBHZW5lcmljSGFzaFRyYWl0cyB7CisgICAgICAgIHR5cGVkZWYgVCBUcmFpdFR5cGU7
CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgICAg
IHN0YXRpYyBUcmFpdFR5cGUgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIFRyYWl0VHlwZSgpOyB9Cisg
ICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IEhhc2hUcmFpdHMg
OiBHZW5lcmljSGFzaFRyYWl0czxUPiB7CiAgICAgfTsKIAogICAgIC8vIG1heSBub3QgYmUgYXBw
cm9wcmlhdGUgZm9yIGFsbCB1c2VzIHNpbmNlIGl0IHdvdWxkIGRpc2FsbG93IDAgYW5kIC0xIGFz
IGtleXMKICAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IEhhc2hUcmFpdHM8aW50PiB7Ci0gICAg
ICAgIHR5cGVkZWYgaW50IHRyYWl0VHlwZTsKKyAgICBzdHJ1Y3QgSGFzaFRyYWl0czxpbnQ+IDog
R2VuZXJpY0hhc2hUcmFpdHM8aW50PiB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5
VmFsdWVJc1plcm8gPSB0cnVlOwotICAgICAgICAKLSAgICAgICAgc3RhdGljIHRyYWl0VHlwZSBl
bXB0eVZhbHVlKCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAg
c3RhdGljIHRyYWl0VHlwZSBkZWxldGVkVmFsdWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gLTE7
Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9
IGZhbHNlOworICAgICAgICBzdGF0aWMgVHJhaXRUeXBlIGVtcHR5VmFsdWUoKSB7IHJldHVybiAw
OyB9CisgICAgICAgIHN0YXRpYyBUcmFpdFR5cGUgZGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gLTE7
IH0KICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUD4KLSAgICBzdHJ1Y3QgSGFzaFRy
YWl0czxQICo+IHsKLSAgICAgICAgdHlwZWRlZiBQICp0cmFpdFR5cGU7CisgICAgc3RydWN0IEhh
c2hUcmFpdHM8UCAqPiA6IEdlbmVyaWNIYXNoVHJhaXRzPFAgKj4geworICAgICAgICB0eXBlZGVm
IFAgKlRyYWl0VHlwZTsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVy
byA9IHRydWU7Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgdHJhaXRUeXBlIGVtcHR5VmFsdWUo
KSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQICo+KDApOwotICAgICAg
ICB9Ci0gICAgICAgIHN0YXRpYyB0cmFpdFR5cGUgZGVsZXRlZFZhbHVlKCkgewotICAgICAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UCAqPigtMSk7Ci0gICAgICAgIH0KKyAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IGZhbHNlOworICAgICAgICBzdGF0
aWMgVHJhaXRUeXBlIGVtcHR5VmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFAgKj4o
MCk7IH0KKyAgICAgICAgc3RhdGljIFRyYWl0VHlwZSBkZWxldGVkVmFsdWUoKSB7IHJldHVybiBy
ZWludGVycHJldF9jYXN0PFAgKj4oLTEpOyB9CiAgICAgfTsKIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFA+CisgICAgc3RydWN0IEhhc2hUcmFpdHM8UmVmUHRyPFA+ID4gOiBHZW5lcmljSGFzaFRy
YWl0czxSZWZQdHI8UD4gPiB7CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJ
c1plcm8gPSB0cnVlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBUcmFpdHM+CisgICAgY2xhc3MgRGVsZXRlZFZhbHVlQXNzaWduZXI7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+CisgICAgaW5saW5lIHZvaWQgYXNzaWduRGVs
ZXRlZChUJiBsb2NhdGlvbikKKyAgICB7CisgICAgICAgIERlbGV0ZWRWYWx1ZUFzc2lnbmVyPFQs
IFRyYWl0cz46OmFzc2lnbkRlbGV0ZWRWYWx1ZShsb2NhdGlvbik7CisgICAgfQorCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRmlyc3RUcmFpdHMsIHR5cGVuYW1lIFNlY29uZFRyYWl0cz4KLSAgICBz
dHJ1Y3QgUGFpckhhc2hUcmFpdHMgeworICAgIHN0cnVjdCBQYWlySGFzaFRyYWl0cyA6IEdlbmVy
aWNIYXNoVHJhaXRzPHBhaXI8dHlwZW5hbWUgRmlyc3RUcmFpdHM6OlRyYWl0VHlwZSwgdHlwZW5h
bWUgU2Vjb25kVHJhaXRzOjpUcmFpdFR5cGU+ID4gewogICAgIHByaXZhdGU6Ci0gICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgRmlyc3RUcmFpdHM6OnRyYWl0VHlwZSBGaXJzdFR5cGU7Ci0gICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgU2Vjb25kVHJhaXRzOjp0cmFpdFR5cGUgU2Vjb25kVHlwZTsKKyAg
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBGaXJzdFRyYWl0czo6VHJhaXRUeXBlIEZpcnN0VHlwZTsK
KyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBTZWNvbmRUcmFpdHM6OlRyYWl0VHlwZSBTZWNvbmRU
eXBlOwogICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBwYWlyPEZpcnN0VHlwZSwgU2Vjb25k
VHlwZT4gdHJhaXRUeXBlOwotICAgICAgICAKKyAgICAgICAgdHlwZWRlZiBwYWlyPEZpcnN0VHlw
ZSwgU2Vjb25kVHlwZT4gVHJhaXRUeXBlOworCiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVt
cHR5VmFsdWVJc1plcm8gPSBGaXJzdFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybyAmJiBTZWNvbmRU
cmFpdHM6OmVtcHR5VmFsdWVJc1plcm87CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRz
RGVzdHJ1Y3Rpb24gPSBGaXJzdFRyYWl0czo6bmVlZHNEZXN0cnVjdGlvbiB8fCBTZWNvbmRUcmFp
dHM6Om5lZWRzRGVzdHJ1Y3Rpb247CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgdHJhaXRUeXBl
IGVtcHR5VmFsdWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJhaXRUeXBlKEZpcnN0VHJhaXRz
OjplbXB0eVZhbHVlKCksIFNlY29uZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKKyAgICAgICAgc3Rh
dGljIFRyYWl0VHlwZSBlbXB0eVZhbHVlKCkgCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBUcmFpdFR5cGUoRmlyc3RUcmFpdHM6OmVtcHR5VmFsdWUoKSwgU2Vjb25kVHJhaXRzOjplbXB0
eVZhbHVlKCkpOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyB0cmFpdFR5cGUgZGVsZXRlZFZh
bHVlKCkgewotICAgICAgICAgICAgcmV0dXJuIHRyYWl0VHlwZShGaXJzdFRyYWl0czo6ZGVsZXRl
ZFZhbHVlKCksIFNlY29uZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKKworICAgICAgICBzdGF0aWMg
VHJhaXRUeXBlIGRlbGV0ZWRWYWx1ZSgpIAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
VHJhaXRUeXBlKEZpcnN0VHJhaXRzOjpkZWxldGVkVmFsdWUoKSwgU2Vjb25kVHJhaXRzOjplbXB0
eVZhbHVlKCkpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgYXNzaWduRGVsZXRl
ZFZhbHVlKFRyYWl0VHlwZSYgbG9jYXRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2ln
bkRlbGV0ZWQ8Rmlyc3RUeXBlLCBGaXJzdFRyYWl0cz4obG9jYXRpb24uZmlyc3QpOworICAgICAg
ICAgICAgbG9jYXRpb24uc2Vjb25kID0gU2Vjb25kVHJhaXRzOjplbXB0eVZhbHVlKCk7CiAgICAg
ICAgIH0KICAgICB9OwotICAgIAorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlyc3QsIHR5cGVu
YW1lIFNlY29uZD4KICAgICBzdHJ1Y3QgSGFzaFRyYWl0czxwYWlyPEZpcnN0LCBTZWNvbmQ+ID4g
OiBwdWJsaWMgUGFpckhhc2hUcmFpdHM8SGFzaFRyYWl0czxGaXJzdD4sIEhhc2hUcmFpdHM8U2Vj
b25kPiA+IHsKICAgICB9OwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJh
aXRzPgorICAgIHN0cnVjdCBEZWxldGVkVmFsdWVBc3NpZ25lcgorICAgIHsKKyAgICAgICAgc3Rh
dGljIHZvaWQgYXNzaWduRGVsZXRlZFZhbHVlKFQmIGxvY2F0aW9uKSAKKyAgICAgICAgeyAKKyAg
ICAgICAgICAgIGxvY2F0aW9uID0gVHJhaXRzOjpkZWxldGVkVmFsdWUoKTsgCisgICAgICAgIH0K
KyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlyc3RUcmFpdHMsIHR5cGVuYW1lIFNl
Y29uZFRyYWl0cz4KKyAgICBzdHJ1Y3QgRGVsZXRlZFZhbHVlQXNzaWduZXI8cGFpcjx0eXBlbmFt
ZSBGaXJzdFRyYWl0czo6VHJhaXRUeXBlLCB0eXBlbmFtZSBTZWNvbmRUcmFpdHM6OlRyYWl0VHlw
ZT4sIFBhaXJIYXNoVHJhaXRzPEZpcnN0VHJhaXRzLCBTZWNvbmRUcmFpdHM+ID4KKyAgICB7Cisg
ICAgICAgIHN0YXRpYyB2b2lkIGFzc2lnbkRlbGV0ZWRWYWx1ZShwYWlyPHR5cGVuYW1lIEZpcnN0
VHJhaXRzOjpUcmFpdFR5cGUsIHR5cGVuYW1lIFNlY29uZFRyYWl0czo6VHJhaXRUeXBlPiYgbG9j
YXRpb24pIAorICAgICAgICB7IAorICAgICAgICAgICAgUGFpckhhc2hUcmFpdHM8Rmlyc3RUcmFp
dHMsIFNlY29uZFRyYWl0cz46OmFzc2lnbkRlbGV0ZWRWYWx1ZShsb2NhdGlvbik7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlyc3QsIHR5cGVuYW1lIFNlY29u
ZD4KKyAgICBzdHJ1Y3QgRGVsZXRlZFZhbHVlQXNzaWduZXI8cGFpcjxGaXJzdCwgU2Vjb25kPiwg
SGFzaFRyYWl0czxwYWlyPEZpcnN0LCBTZWNvbmQ+ID4gPgorICAgIHsKKyAgICAgICAgc3RhdGlj
IHZvaWQgYXNzaWduRGVsZXRlZFZhbHVlKHBhaXI8Rmlyc3QsIFNlY29uZD4mIGxvY2F0aW9uKSAK
KyAgICAgICAgeyAKKyAgICAgICAgICAgIEhhc2hUcmFpdHM8cGFpcjxGaXJzdCwgU2Vjb25kPiA+
Ojphc3NpZ25EZWxldGVkVmFsdWUobG9jYXRpb24pOworICAgICAgICB9CisgICAgfTsKKworCiB9
IC8vIG5hbWVzcGFjZSBLWE1MQ29yZQogCiB1c2luZyBLWE1MQ29yZTo6SGFzaFRyYWl0czsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL1JlZlB0ci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9reG1sY29yZS9SZWZQdHIuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS43CmRpZmYgLXAgLXUgLXIxLjcgSmF2YVNjcmlwdENvcmUva3htbGNvcmUvUmVm
UHRyLmgKLS0tIEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL1JlZlB0ci5oCTIwIERlYyAyMDA1IDIw
OjEyOjQ4IC0wMDAwCTEuNworKysgSmF2YVNjcmlwdENvcmUva3htbGNvcmUvUmVmUHRyLmgJMjEg
RGVjIDIwMDUgMjM6MjQ6MTAgLTAwMDAKQEAgLTU1LDYgKzU1LDggQEAgbmFtZXNwYWNlIEtYTUxD
b3JlIHsKICAgICAgICAgUmVmUHRyJiBvcGVyYXRvcj0oUGFzc1JlZlB0cjxUPiYpOwogICAgICAg
ICBSZWZQdHImIG9wZXJhdG9yPShQYXNzUmVmUHRyX1JlZjxUPik7CiAKKyAgICAgICAgdm9pZCBz
d2FwKFJlZlB0ciYpOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgVCAqbV9wdHI7CiAgICAgfTsK
QEAgLTk2LDYgKzk4LDE4IEBAIG5hbWVzcGFjZSBLWE1MQ29yZSB7CiAgICAgICAgIHJldHVybiAq
dGhpczsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQgUmVmUHRy
PFQ+Ojpzd2FwKFJlZlB0cjxUPiYgbykKKyAgICB7CisgICAgICAgIFQgKnB0ciA9IG1fcHRyOwor
ICAgICAgICBtX3B0ciA9IG8ubV9wdHI7CisgICAgICAgIG8ubV9wdHIgPSBwdHI7CisgICAgfQor
CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSB2b2lkIHN3YXAoUmVmUHRyPFQ+JiBhLCBS
ZWZQdHI8VD4mIGIpCisgICAgeworICAgICAgICBhLnN3YXAoYik7CisgICAgfQorCiAgICAgdGVt
cGxhdGUgPGNsYXNzIFQ+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVmUHRyPFQ+JiBh
LCBjb25zdCBSZWZQdHI8VD4mIGIpIAogICAgIHsgCiAgICAgICAgIHJldHVybiBhLmdldCgpID09
IGIuZ2V0KCk7IApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUvQ2hhbmdlTG9nLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE4CmRp
ZmYgLXAgLXUgLXIxLjE4IFdlYkNvcmUvQ2hhbmdlTG9nCi0tLSBXZWJDb3JlL0NoYW5nZUxvZwky
MSBEZWMgMjAwNSAxNjo1MTowMCAtMDAwMAkxLjE4CisrKyBXZWJDb3JlL0NoYW5nZUxvZwkyMSBE
ZWMgMjAwNSAyMzoyNTowMCAtMDAwMApAQCAtMSwzICsxLDI0IEBACisyMDA1LTEyLTIxICBNYWNp
ZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgLSB1cGRhdGUgZm9yIG5ldyBIYXNoVHJhbnNsYXRvciBz
dHVmZgorCisgICAgICAgICoga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwOgorICAgICAg
ICAoRE9NOjpDU3RyaW5nVHJhbnNsYXRvcjo6aGFzaCk6CisgICAgICAgIChET006OkNTdHJpbmdU
cmFuc2xhdG9yOjplcXVhbCk6CisgICAgICAgIChET006OkNTdHJpbmdUcmFuc2xhdG9yOjp0cmFu
c2xhdGUpOgorICAgICAgICAoRE9NOjpBdG9taWNTdHJpbmc6OmVxdWFsKToKKyAgICAgICAgKERP
TTo6QXRvbWljU3RyaW5nOjphZGQpOgorICAgICAgICAoRE9NOjpRQ2hhckJ1ZmZlclRyYW5zbGF0
b3I6Omhhc2gpOgorICAgICAgICAoRE9NOjpRQ2hhckJ1ZmZlclRyYW5zbGF0b3I6OmVxdWFsKToK
KyAgICAgICAgKERPTTo6UUNoYXJCdWZmZXJUcmFuc2xhdG9yOjp0cmFuc2xhdGUpOgorICAgICAg
ICAqIGtodG1sL3htbC9kb21fcW5hbWUuY3BwOgorICAgICAgICAoRE9NOjpRTmFtZUNvbXBvbmVu
dHNUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAgICAgKERPTTo6UU5hbWVDb21wb25lbnRzVHJhbnNs
YXRvcjo6ZXF1YWwpOgorICAgICAgICAoRE9NOjpRTmFtZUNvbXBvbmVudHNUcmFuc2xhdG9yOjp0
cmFuc2xhdGUpOgorICAgICAgICAoRE9NOjpRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lKToK
KwogMjAwNS0xMi0yMCAgQWRlbGUgUGV0ZXJzb24gIDxhZGVsZUBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4uCkluZGV4OiBXZWJDb3JlL2todG1sL3htbC9kb21fYXRvbWlj
c3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94
bWwvZG9tX2F0b21pY3N0cmluZy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAt
cCAtdSAtcjEuMTQgV2ViQ29yZS9raHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHAKLS0tIFdl
YkNvcmUva2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwCTMgT2N0IDIwMDUgMjE6MTI6NTEg
LTAwMDAJMS4xNAorKysgV2ViQ29yZS9raHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHAJMjEg
RGVjIDIwMDUgMjM6MjU6MDQgLTAwMDAKQEAgLTM3LDIwICszNywzMiBAQCBuYW1lc3BhY2UgRE9N
IHsKICAgIAogc3RhdGljIEhhc2hTZXQ8RE9NU3RyaW5nSW1wbCAqPiBzdHJpbmdUYWJsZTsKIAot
aW5saW5lIHVuc2lnbmVkIGhhc2goY29uc3QgY2hhciogY29uc3QmIGMpCitzdHJ1Y3QgQ1N0cmlu
Z1RyYW5zbGF0b3IgCiB7Ci0gICAgcmV0dXJuIERPTVN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKGMp
OwotfQorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IGNoYXIqIGMpCisgICAgeworICAg
ICAgICByZXR1cm4gRE9NU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goYyk7CisgICAgfQogCi1pbmxp
bmUgYm9vbCBlcXVhbChET01TdHJpbmdJbXBsKiBjb25zdCYgciwgY29uc3QgY2hhciogY29uc3Qm
IHMpCi17Ci0gICAgaW50IGxlbmd0aCA9IHItPmw7Ci0gICAgY29uc3QgUUNoYXIgKmQgPSByLT5z
OwotICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKQotICAgICAgICBpZiAoZFtp
XSAhPSBzW2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBzW2xlbmd0
aF0gPT0gMDsKLX0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChET01TdHJpbmdJbXBsICpyLCBjb25z
dCBjaGFyICpzKQorICAgIHsKKyAgICAgICAgaW50IGxlbmd0aCA9IHItPmw7CisgICAgICAgIGNv
bnN0IFFDaGFyICpkID0gci0+czsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gbGVuZ3Ro
OyArK2kpCisgICAgICAgICAgICBpZiAoZFtpXSAhPSBzW2ldKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHNbbGVuZ3RoXSA9PSAwOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShET01TdHJpbmdJbXBsIComIGxvY2F0aW9uLCBjb25zdCBj
aGFyKiBjb25zdCYgYywgdW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAgIERPTVN0cmluZ0lt
cGwgKnIgPSBuZXcgRE9NU3RyaW5nSW1wbChjKTsKKyAgICAgICAgci0+X2hhc2ggPSBoYXNoOwor
ICAgICAgICByLT5faW5UYWJsZSA9IHRydWU7CisgICAgICAgIAorICAgICAgICBsb2NhdGlvbiA9
IHI7IAorICAgIH0KK307CiAKIGJvb2wgQXRvbWljU3RyaW5nOjplcXVhbChjb25zdCBBdG9taWNT
dHJpbmcgJmEsIGNvbnN0IGNoYXIgKmIpCiB7IApAQCAtNTksMTYgKzcxLDcgQEAgYm9vbCBBdG9t
aWNTdHJpbmc6OmVxdWFsKGNvbnN0IEF0b21pY1N0cgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICBpZiAoKCFpbXBsIHx8ICFpbXBsLT5zKSB8fCAhYikKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiBET006OmVxdWFsKGltcGwsIGIpOyAKLX0KLQotaW5saW5lIERPTVN0cmluZ0lt
cGwgKmNvbnZlcnQoY29uc3QgY2hhciogY29uc3QmIGMsIHVuc2lnbmVkIGhhc2gpCi17Ci0gICAg
RE9NU3RyaW5nSW1wbCAqciA9IG5ldyBET01TdHJpbmdJbXBsKGMpOwotICAgIHItPl9oYXNoID0g
aGFzaDsKLSAgICByLT5faW5UYWJsZSA9IHRydWU7Ci0KLSAgICByZXR1cm4gcjsgCisgICAgcmV0
dXJuIENTdHJpbmdUcmFuc2xhdG9yOjplcXVhbChpbXBsLCBiKTsgCiB9CiAKIERPTVN0cmluZ0lt
cGwgKkF0b21pY1N0cmluZzo6YWRkKGNvbnN0IGNoYXIgKmMpCkBAIC03OSw1MSArODIsNTMgQEAg
RE9NU3RyaW5nSW1wbCAqQXRvbWljU3RyaW5nOjphZGQoY29uc3QgYwogICAgIGlmIChsZW5ndGgg
PT0gMCkKICAgICAgICAgcmV0dXJuIERPTVN0cmluZ0ltcGw6OmVtcHR5KCk7CiAgICAgCi0gICAg
cmV0dXJuICpzdHJpbmdUYWJsZS5pbnNlcnQ8Y29uc3QgY2hhciAqLCBoYXNoLCBET006OmVxdWFs
LCBjb252ZXJ0PihjKS5maXJzdDsKKyAgICByZXR1cm4gKnN0cmluZ1RhYmxlLmluc2VydDxjb25z
dCBjaGFyICosIENTdHJpbmdUcmFuc2xhdG9yPihjKS5maXJzdDsKIH0KIAotCiBzdHJ1Y3QgUUNo
YXJCdWZmZXIgewogICAgIGNvbnN0IFFDaGFyICpzOwogICAgIHVpbnQgbGVuZ3RoOwogfTsKIAot
aW5saW5lIHVuc2lnbmVkIGhhc2goY29uc3QgUUNoYXJCdWZmZXImIGJ1ZikKK3N0cnVjdCBRQ2hh
ckJ1ZmZlclRyYW5zbGF0b3IKIHsKLSAgICByZXR1cm4gRE9NU3RyaW5nSW1wbDo6Y29tcHV0ZUhh
c2goYnVmLnMsIGJ1Zi5sZW5ndGgpOwotfQotCi1pbmxpbmUgYm9vbCBlcXVhbChET01TdHJpbmdJ
bXBsKiBjb25zdCYgc3RyLCBjb25zdCBRQ2hhckJ1ZmZlciAmYnVmKQotewotICAgIHVpbnQgc3Ry
TGVuZ3RoID0gc3RyLT5sOwotICAgIHVpbnQgYnVmTGVuZ3RoID0gYnVmLmxlbmd0aDsKLSAgICBp
ZiAoc3RyTGVuZ3RoICE9IGJ1Zkxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFFDaGFyQnVmZmVyJiBidWYpCisgICAgeworICAgICAg
ICByZXR1cm4gRE9NU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goYnVmLnMsIGJ1Zi5sZW5ndGgpOwor
ICAgIH0KIAotICAgIGNvbnN0IHVpbnQzMl90ICpzdHJDaGFycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDMyX3QgKj4oc3RyLT5zKTsKLSAgICBjb25zdCB1aW50MzJfdCAqYnVmQ2hhcnMg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90ICo+KGJ1Zi5zKTsKLSAgICAKLSAgICB1
aW50IGhhbGZMZW5ndGggPSBzdHJMZW5ndGggPj4gMTsKLSAgICBmb3IgKHVpbnQgaSA9IDA7IGkg
IT0gaGFsZkxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmICgqc3RyQ2hhcnMrKyAhPSAqYnVmQ2hh
cnMrKykKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChET01TdHJpbmdJbXBsKiBjb25zdCYgc3RyLCBj
b25zdCBRQ2hhckJ1ZmZlciAmYnVmKQorICAgIHsKKyAgICAgICAgdWludCBzdHJMZW5ndGggPSBz
dHItPmw7CisgICAgICAgIHVpbnQgYnVmTGVuZ3RoID0gYnVmLmxlbmd0aDsKKyAgICAgICAgaWYg
KHN0ckxlbmd0aCAhPSBidWZMZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICBjb25zdCB1aW50MzJfdCAqc3RyQ2hhcnMgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQzMl90ICo+KHN0ci0+cyk7CisgICAgICAgIGNvbnN0IHVpbnQzMl90ICpidWZD
aGFycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QgKj4oYnVmLnMpOworICAgICAg
ICAKKyAgICAgICAgdWludCBoYWxmTGVuZ3RoID0gc3RyTGVuZ3RoID4+IDE7CisgICAgICAgIGZv
ciAodWludCBpID0gMDsgaSAhPSBoYWxmTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgq
c3RyQ2hhcnMrKyAhPSAqYnVmQ2hhcnMrKykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdHJMZW5ndGggJiAxICYmIAorICAg
ICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QgKj4oc3RyQ2hhcnMpICE9
ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90ICo+KGJ1ZkNoYXJzKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIGlmIChzdHJMZW5ndGggJiAxICYmIAotICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50MTZfdCAqPihzdHJDaGFycykgIT0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDE2X3QgKj4oYnVmQ2hhcnMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotaW5saW5lIERPTVN0cmluZ0ltcGwgKmNvbnZlcnQoY29uc3QgUUNoYXJCdWZm
ZXImIGJ1ZiwgdW5zaWduZWQgaGFzaCkKLXsKLSAgICBET01TdHJpbmdJbXBsICpyID0gbmV3IERP
TVN0cmluZ0ltcGwoYnVmLnMsIGJ1Zi5sZW5ndGgpOwotICAgIHItPl9oYXNoID0gaGFzaDsKLSAg
ICByLT5faW5UYWJsZSA9IHRydWU7Ci0gICAgCi0gICAgcmV0dXJuIHI7IAotfQorICAgIHN0YXRp
YyB2b2lkIHRyYW5zbGF0ZShET01TdHJpbmdJbXBsKiYgbG9jYXRpb24sIGNvbnN0IFFDaGFyQnVm
ZmVyJiBidWYsIHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICBET01TdHJpbmdJbXBsICpy
ID0gbmV3IERPTVN0cmluZ0ltcGwoYnVmLnMsIGJ1Zi5sZW5ndGgpOworICAgICAgICByLT5faGFz
aCA9IGhhc2g7CisgICAgICAgIHItPl9pblRhYmxlID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAg
IGxvY2F0aW9uID0gcjsgCisgICAgfQorfTsKIAogRE9NU3RyaW5nSW1wbCAqQXRvbWljU3RyaW5n
OjphZGQoY29uc3QgUUNoYXIgKnMsIGludCBsZW5ndGgpCiB7CkBAIC0xMzQsNyArMTM5LDcgQEAg
RE9NU3RyaW5nSW1wbCAqQXRvbWljU3RyaW5nOjphZGQoY29uc3QgUQogICAgICAgICByZXR1cm4g
RE9NU3RyaW5nSW1wbDo6ZW1wdHkoKTsKICAgICAKICAgICBRQ2hhckJ1ZmZlciBidWYgPSB7cywg
bGVuZ3RofTsgCi0gICAgcmV0dXJuICpzdHJpbmdUYWJsZS5pbnNlcnQ8UUNoYXJCdWZmZXIsIGhh
c2gsIERPTTo6ZXF1YWwsIGNvbnZlcnQ+KGJ1ZikuZmlyc3Q7CisgICAgcmV0dXJuICpzdHJpbmdU
YWJsZS5pbnNlcnQ8UUNoYXJCdWZmZXIsIFFDaGFyQnVmZmVyVHJhbnNsYXRvcj4oYnVmKS5maXJz
dDsKIH0KIAogRE9NU3RyaW5nSW1wbCAqQXRvbWljU3RyaW5nOjphZGQoRE9NU3RyaW5nSW1wbCAq
cikKSW5kZXg6IFdlYkNvcmUva2h0bWwveG1sL2RvbV9xbmFtZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9xbmFtZS5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNwpkaWZmIC1wIC11IC1yMS43IFdlYkNvcmUva2h0bWwveG1sL2RvbV9x
bmFtZS5jcHAKLS0tIFdlYkNvcmUva2h0bWwveG1sL2RvbV9xbmFtZS5jcHAJMyBPY3QgMjAwNSAy
MToxMjo1MyAtMDAwMAkxLjcKKysrIFdlYkNvcmUva2h0bWwveG1sL2RvbV9xbmFtZS5jcHAJMjEg
RGVjIDIwMDUgMjM6MjU6NTcgLTAwMDAKQEAgLTkyLDE4ICs5MiwyNCBAQCB0eXBlZGVmIEhhc2hT
ZXQ8UXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkCiAKIHN0YXRpYyBRTmFtZVNldCAqZ05hbWVDYWNo
ZTsKIAotaW5saW5lIGJvb2wgZXF1YWxDb21wb25lbnRzKFF1YWxpZmllZE5hbWU6OlF1YWxpZmll
ZE5hbWVJbXBsKiBjb25zdCYgbmFtZSwgY29uc3QgUXVhbGlmaWVkTmFtZUNvbXBvbmVudHMgJmNv
bXBvbmVudHMpCi17Ci0gICAgcmV0dXJuIGNvbXBvbmVudHMubV9sb2NhbE5hbWUgPT0gbmFtZS0+
bV9sb2NhbE5hbWUuaW1wbCgpICYmCi0gICAgICAgICAgIGNvbXBvbmVudHMubV9uYW1lc3BhY2Ug
PT0gbmFtZS0+bV9uYW1lc3BhY2UuaW1wbCgpICYmCi0gICAgICAgICAgIGNvbXBvbmVudHMubV9w
cmVmaXggPT0gbmFtZS0+bV9wcmVmaXguaW1wbCgpOwotfQotCi1pbmxpbmUgUXVhbGlmaWVkTmFt
ZTo6UXVhbGlmaWVkTmFtZUltcGwgKmNvbnZlcnRDb21wb25lbnRzKGNvbnN0IFF1YWxpZmllZE5h
bWVDb21wb25lbnRzJiBjb21wb25lbnRzLCB1bnNpZ25lZCBoYXNoKQotewotICAgIHJldHVybiBu
ZXcgUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGwoY29tcG9uZW50cy5tX3ByZWZpeCwg
Y29tcG9uZW50cy5tX2xvY2FsTmFtZSwgY29tcG9uZW50cy5tX25hbWVzcGFjZSk7Ci19Ci0KK3N0
cnVjdCBRTmFtZUNvbXBvbmVudHNUcmFuc2xhdG9yIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBRdWFsaWZpZWROYW1lQ29tcG9uZW50cyYgY29tcG9uZW50cykgCisgICAgeyAKKyAg
ICAgICAgcmV0dXJuIGhhc2hDb21wb25lbnRzKGNvbXBvbmVudHMpOyAKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIGJvb2wgZXF1YWwoUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGwgKm5h
bWUsIGNvbnN0IFF1YWxpZmllZE5hbWVDb21wb25lbnRzJiBjb21wb25lbnRzKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGNvbXBvbmVudHMubV9sb2NhbE5hbWUgPT0gbmFtZS0+bV9sb2NhbE5hbWUu
aW1wbCgpICYmCisgICAgICAgICAgICBjb21wb25lbnRzLm1fbmFtZXNwYWNlID09IG5hbWUtPm1f
bmFtZXNwYWNlLmltcGwoKSAmJgorICAgICAgICAgICAgY29tcG9uZW50cy5tX3ByZWZpeCA9PSBu
YW1lLT5tX3ByZWZpeC5pbXBsKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHRyYW5z
bGF0ZShRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbComIGxvY2F0aW9uLCBjb25zdCBR
dWFsaWZpZWROYW1lQ29tcG9uZW50cyYgY29tcG9uZW50cywgdW5zaWduZWQgaGFzaCkKKyAgICB7
CisgICAgICAgIGxvY2F0aW9uID0gbmV3IFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBs
KGNvbXBvbmVudHMubV9wcmVmaXgsIGNvbXBvbmVudHMubV9sb2NhbE5hbWUsIGNvbXBvbmVudHMu
bV9uYW1lc3BhY2UpOworICAgIH0KK307CiAKIFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWUo
Y29uc3QgQXRvbWljU3RyaW5nJiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIGwsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbikKICAgICA6IG1faW1wbCgwKQpAQCAtMTExLDcgKzExNyw3IEBAIFF1YWxpZmll
ZE5hbWU6OlF1YWxpZmllZE5hbWUoY29uc3QgQXRvbWkKICAgICBpZiAoIWdOYW1lQ2FjaGUpCiAg
ICAgICAgIGdOYW1lQ2FjaGUgPSBuZXcgUU5hbWVTZXQ7CiAgICAgUXVhbGlmaWVkTmFtZUNvbXBv
bmVudHMgY29tcG9uZW50cyA9IHsgcC5pbXBsKCksIGwuaW1wbCgpLCBuLmltcGwoKSB9OwotICAg
IG1faW1wbCA9ICpnTmFtZUNhY2hlLT5pbnNlcnQ8UXVhbGlmaWVkTmFtZUNvbXBvbmVudHMsIGhh
c2hDb21wb25lbnRzLCBlcXVhbENvbXBvbmVudHMsIGNvbnZlcnRDb21wb25lbnRzPihjb21wb25l
bnRzKS5maXJzdDsgICAgCisgICAgbV9pbXBsID0gKmdOYW1lQ2FjaGUtPmluc2VydDxRdWFsaWZp
ZWROYW1lQ29tcG9uZW50cywgUU5hbWVDb21wb25lbnRzVHJhbnNsYXRvcj4oY29tcG9uZW50cyku
Zmlyc3Q7ICAgIAogICAgIHJlZigpOwogfQogCg==
</data>
<flag name="review"
          id="1058"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>