<?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>98465</bug_id>
          
          <creation_ts>2012-10-04 16:46:52 -0700</creation_ts>
          <short_desc>IndexedDB: Add histogram statistics for backing store errors</short_desc>
          <delta_ts>2012-10-25 21:06:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joshua Bell">jsbell</reporter>
          <assigned_to name="Joshua Bell">jsbell</assigned_to>
          <cc>abarth</cc>
    
    <cc>alecflett</cc>
    
    <cc>dgrogan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>735124</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-10-04 16:46:52 -0700</bug_when>
    <thetext>IndexedDB: Add histogram statistics for backing store errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735125</commentid>
    <comment_count>1</comment_count>
      <attachid>167205</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-10-04 16:49:33 -0700</bug_when>
    <thetext>Created attachment 167205
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735127</commentid>
    <comment_count>2</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-10-04 16:51:06 -0700</bug_when>
    <thetext>We may want to sprinkle InternalError() over other failure sites.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735738</commentid>
    <comment_count>3</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-10-05 10:26:06 -0700</bug_when>
    <thetext>Other possible TODOs (before or after landing):

* Give InternalError() a message param which is logged/asserted/appended to histogram name
* Distinguish I/O errors (get/put failed, etc) from data consistency errors (decode failed)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736745</commentid>
    <comment_count>4</comment_count>
      <attachid>167551</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-10-08 09:54:08 -0700</bug_when>
    <thetext>Created attachment 167551
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736751</commentid>
    <comment_count>5</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-10-08 09:59:09 -0700</bug_when>
    <thetext>Sprinkled in a few more InternalError() macro calls.

I experimented with instrumenting the duration of open() and deleteDatabase() calls in the backing store, which led to me track down http://code.google.com/p/leveldb/issues/detail?id=125 .. because it wasn&apos;t showing up as a slowdown with either open or deleteDatabase in the backing store.  So I did not include those in the patch, but adding them is easy:

double startTime = monotonicallyIncreasingTime();
...
double durationMS = (monotonicallyIncreasingTime() - startTime) * 1000.0;
HistogramSupport::histogramCustomCounts(&quot;WebCore.IndexedDB.BackingStore.OpenDuration&quot;, static_cast&lt;int&gt;(durationMS), 0, 2000, 20);

The question is just when to measure. The backing store time may not be as interesting as measuring the time from the script call to &quot;success&quot;. Or should that be &quot;upgradeneeded&quot;? Front end or back end? And is that enqueue or dispatch? And what if &quot;blocked&quot; fires?

Needs further discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736976</commentid>
    <comment_count>6</comment_count>
      <attachid>167551</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-10-08 13:29:31 -0700</bug_when>
    <thetext>Comment on attachment 167551
Patch

LGTM as is if we don&apos;t get any suggestions.  Do you know how to look at this data?  I don&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742440</commentid>
    <comment_count>7</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-10-15 14:21:23 -0700</bug_when>
    <thetext>abarth@ - could you take a look at this and see if this follows our general strategy for histograms in WebCore, and also the style of the &quot;InternalError&quot; macro?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743329</commentid>
    <comment_count>8</comment_count>
      <attachid>167551</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-16 11:14:13 -0700</bug_when>
    <thetext>Comment on attachment 167551
Patch

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

&gt; Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp:64
&gt; +#define InternalError() \
&gt; +    do { \
&gt; +        ASSERT_NOT_REACHED(); \
&gt; +        LOG_ERROR(&quot;Internal IndexedDB Error&quot;); \
&gt; +        HistogramSupport::histogramEnumeration(&quot;WebCore.IndexedDB.BackingStore.InternalError&quot;, LevelDBBackingStoreInternalError, LevelDBBackingStoreInternalErrorMax); \
&gt; +    } while (0)

Why a macro and not an inline function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743330</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-16 11:14:59 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; abarth@ - could you take a look at this and see if this follows our general strategy for histograms in WebCore, and also the style of the &quot;InternalError&quot; macro?

That all seems fine.  As I mentioned above, I&apos;m not sure why you&apos;ve used a macro here rather than an inline function.  Perhaps LOG_ERROR works better that way?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743383</commentid>
    <comment_count>10</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-10-16 11:52:22 -0700</bug_when>
    <thetext>(In reply to comment #9)
 As I mentioned above, I&apos;m not sure why you&apos;ve used a macro here rather than an inline function.  Perhaps LOG_ERROR works better that way?

Exactly - the ASSERT_NOT_REACHED() and LOG_ERROR() are both more useful when they have the original source line.

One thing that I can do which will IMHO make the code more readable is to move the HistogramSupport::histogramEnumeration(...) call itself into an inline function referenced by the macro, so the macro has less &quot;payload&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751177</commentid>
    <comment_count>11</comment_count>
      <attachid>170725</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-10-25 13:45:58 -0700</bug_when>
    <thetext>Created attachment 170725
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751183</commentid>
    <comment_count>12</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-10-25 13:56:10 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Created an attachment (id=170725) [details]
&gt; Patch

Waiting on an internal review of the histograms metadata file. 

abarth@ - r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751271</commentid>
    <comment_count>13</comment_count>
      <attachid>170725</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-25 15:23:31 -0700</bug_when>
    <thetext>Comment on attachment 170725
Patch

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

&gt; Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp:484
&gt; -    return transaction-&gt;commit();
&gt; +    if (!transaction-&gt;commit()) {
&gt; +    }
&gt; +    return true;

This looks a bit strange.  Is there a typo here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751306</commentid>
    <comment_count>14</comment_count>
      <attachid>170755</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-10-25 15:55:01 -0700</bug_when>
    <thetext>Created attachment 170755
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751348</commentid>
    <comment_count>15</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-10-25 16:45:57 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; This looks a bit strange.  Is there a typo here?

Yes, half-aborted change. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751506</commentid>
    <comment_count>16</comment_count>
      <attachid>170755</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-25 21:06:03 -0700</bug_when>
    <thetext>Comment on attachment 170755
Patch

Clearing flags on attachment: 170755

Committed r132568: &lt;http://trac.webkit.org/changeset/132568&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751507</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-25 21:06:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167205</attachid>
            <date>2012-10-04 16:49:33 -0700</date>
            <delta_ts>2012-10-08 09:54:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98465-20121004164843.patch</filename>
            <type>text/plain</type>
            <size>21274</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwMzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmUxMmRhMWRjZTg3ODZh
M2FmNDM1NjIwZmZlZDRmZTI1N2Y4MjY4OC4uZjlmNmZlMWI5YTExYzgwZmE0OTY5ZmNkM2UzMDdh
ZGJiNmMyZWExOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTEwLTA0ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBBZGQg
aGlzdG9ncmFtIHN0YXRpc3RpY3MgZm9yIGJhY2tpbmcgc3RvcmUgZXJyb3JzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODQ2NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERlZmluZSBhIG1hY3JvIGZvciBj
b25zaXN0ZW50IGFzc2VydGluZyAoZHVyaW5nIGRldmVsb3BtZW50KSwgbG9nZ2luZywgYW5kIHJl
Y29yZGluZworICAgICAgICBpbnRlcm5hbCBiYWNraW5nIHN0b3JlIGVycm9ycyB2aWEgaGlzdG9n
cmFtcy4gRGVmaW5lIHNwZWNpZmljIGhpc3RvZ3JhbSB2YWx1ZXMgdG8KKyAgICAgICAgdHJhY2sg
aXNzdWVzIHdpdGggb3BlbmluZyBiYWNraW5nIHN0b3JlcyB0byBnYXRoZXIgc3RhdHMgb24gY29y
cnVwdGlvbi4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSBqdXN0IHRoZSBzdGF0cywgbWEnYW0s
IGp1c3QgdGhlIHN0YXRzLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldFVwTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJ
REJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5n
U3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0
YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9iamVjdFN0b3JlUmVjb3Jk
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRl
S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleCk6CisKIDIwMTItMTAtMDQg
IFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogU2NyaXB0cyBwYW5lbCBzaG91bGQgbm90IGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRv
IHNuaXBwZXQgZXZhbHVhdGlvbiB3aGVuIHByZXZpb3VzbHkgZXZhbHVhdGVkIHNuaXBwZXQgaXMg
ZWRpdGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAppbmRleCA1MGVkZmQ0NmNjMGMyYzk5MzRkYzVk
NWM4OWQyZWM1YWQ3ZWRiZGJhLi44YTAwMTdlZjNhZWMyN2Y0YzEwYjQ0ZDkyZjNhMzE5ODFmODQ2
MzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZl
bERCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcApAQCAtMzIsNiArMzIsNyBAQAogCiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAi
SGlzdG9ncmFtU3VwcG9ydC5oIgogI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIgog
I2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIklEQktleVBhdGguaCIKQEAgLTUwLDYgKzUx
LDE1IEBAIHVzaW5nIG5hbWVzcGFjZSBJREJMZXZlbERCQ29kaW5nOwogCiBjb25zdCBpbnQ2NF90
IEtleUdlbmVyYXRvckluaXRpYWxOdW1iZXIgPSAxOyAvLyBGcm9tIHRoZSBJbmRleGVkREIgc3Bl
Y2lmaWNhdGlvbi4KIAorLy8gVXNlIHRvIHNpZ25hbCBjb25kaXRpb25zIHRoYXQgdXN1YWxseSBp
bmRpY2F0ZSBkZXZlbG9wZXIgZXJyb3IsIGJ1dCBjb3VsZCBiZSBjYXVzZWQgYnkgZGF0YSBjb3Jy
dXB0aW9uLgorI2RlZmluZSBJbnRlcm5hbEVycm9yKCkgXAorICAgIGRvIHsgXAorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsgXAorICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4
ZWQgRGF0YWJhc2UgRXJyb3IiKTsgXAorICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dy
YW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLkludGVybmFsRXJy
b3IiLCAxLCAyKTsgXAorICAgIH0gd2hpbGUgKDApCisKKwogdGVtcGxhdGUgPHR5cGVuYW1lIERC
T3JUcmFuc2FjdGlvbj4KIHN0YXRpYyBib29sIGdldEJvb2woREJPclRyYW5zYWN0aW9uKiBkYiwg
Y29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIGJvb2wmIGZvdW5kQm9vbCkKIHsKQEAgLTE1NCw4ICsx
NjQsMTAgQEAgc3RhdGljIGJvb2wgc2V0VXBNZXRhZGF0YShMZXZlbERCRGF0YWJhc2UqIGRiLCBj
b25zdCBTdHJpbmcmIG9yaWdpbikKICAgICBpbnQ2NF90IHNjaGVtYVZlcnNpb24gPSAwOwogICAg
IGlmICghZ2V0SW50KGRiLCBtZXRhRGF0YUtleSwgc2NoZW1hVmVyc2lvbikpIHsKICAgICAgICAg
c2NoZW1hVmVyc2lvbiA9IGxhdGVzdFNjaGVtYVZlcnNpb247Ci0gICAgICAgIGlmICghcHV0SW50
KGRiLCBtZXRhRGF0YUtleSwgbGF0ZXN0U2NoZW1hVmVyc2lvbikpCisgICAgICAgIGlmICghcHV0
SW50KGRiLCBtZXRhRGF0YUtleSwgbGF0ZXN0U2NoZW1hVmVyc2lvbikpIHsKKyAgICAgICAgICAg
IEludGVybmFsRXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQog
ICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghc2NoZW1hVmVyc2lvbikgewogICAgICAgICAgICAg
c2NoZW1hVmVyc2lvbiA9IGxhdGVzdFNjaGVtYVZlcnNpb247CkBAIC0xNjksNyArMTgxLDcgQEAg
c3RhdGljIGJvb2wgc2V0VXBNZXRhZGF0YShMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBTdHJp
bmcmIG9yaWdpbikKICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gdmFsdWU7CiAgICAgICAg
ICAgICAgICAgYm9vbCBvayA9IHRyYW5zYWN0aW9uLT5nZXQoaXQtPmtleSgpLCB2YWx1ZSk7CiAg
ICAgICAgICAgICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGludCBkYXRhYmFzZUlkID0gZGVjb2RlSW50KHZhbHVlLmJlZ2luKCksIHZhbHVlLmVu
ZCgpKTsKQEAgLTE3NywxMyArMTg5LDEzIEBAIHN0YXRpYyBib29sIHNldFVwTWV0YWRhdGEoTGV2
ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgU3RyaW5nJiBvcmlnaW4pCiAgICAgICAgICAgICAgICAg
dHJhbnNhY3Rpb24tPnB1dChpbnRWZXJzaW9uS2V5LCBlbmNvZGVWYXJJbnQoSURCRGF0YWJhc2VN
ZXRhZGF0YTo6RGVmYXVsdEludFZlcnNpb24pKTsKICAgICAgICAgICAgICAgICBvayA9IHRyYW5z
YWN0aW9uLT5nZXQoaXQtPmtleSgpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFvaykg
ewotICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYm9vbCBv
ayA9IHRyYW5zYWN0aW9uLT5jb21taXQoKTsKICAgICAgICAgICAgIGlmICghb2spIHsKLSAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBJbnRlcm5h
bEVycm9yKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC0yMTEsNiArMjIzLDE3IEBAIElEQkxldmVsREJCYWNraW5nU3RvcmU6On5J
REJMZXZlbERCQmFja2luZ1N0b3JlKCkKICAgICBtX2NvbXBhcmF0b3IuY2xlYXIoKTsKIH0KIAor
ZW51bSBMZXZlbERCQmFja2luZ1N0b3JlT3BlblJlc3VsdCB7CisgICAgTGV2ZWxEQkJhY2tpbmdT
dG9yZU9wZW5NZW1vcnksCisgICAgTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5GYWlsZWREaXJlY3Rv
cnksCisgICAgTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5TdWNjZXNzLAorICAgIExldmVsREJCYWNr
aW5nU3RvcmVPcGVuRmFpbGVkLAorICAgIExldmVsREJCYWNraW5nU3RvcmVPcGVuQ2xlYW51cEZh
aWxlZCwKKyAgICBMZXZlbERCQmFja2luZ1N0b3JlT3BlbkNsZWFudXBSZW9wZW5GYWlsZWQsCisg
ICAgTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5DbGVhbnVwUmVvcGVuU3VjY2VzcywKKyAgICBMZXZl
bERCQmFja2luZ1N0b3JlT3Blbk1heCwKK307CisKIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9y
aWdpbiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZUFyZywgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRp
ZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5KQogewogICAgIElEQl9UUkFDRSgi
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbiIpOwpAQCAtMjE5LDExICsyNDIsMTMgQEAgUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4oU2Vj
dXJpdHlPcmlnaW4qIHNlY3VyaXQKICAgICBPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+IGNvbXBh
cmF0b3IgPSBhZG9wdFB0cihuZXcgQ29tcGFyYXRvcigpKTsKICAgICBPd25QdHI8TGV2ZWxEQkRh
dGFiYXNlPiBkYjsKIAotICAgIGlmIChwYXRoQmFzZS5pc0VtcHR5KCkpCisgICAgaWYgKHBhdGhC
YXNlLmlzRW1wdHkoKSkgeworICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVt
ZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLm9wZW4iLCBMZXZlbERCQmFj
a2luZ1N0b3JlT3Blbk1lbW9yeSwgTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwogICAgICAg
ICBkYiA9IExldmVsREJEYXRhYmFzZTo6b3BlbkluTWVtb3J5KGNvbXBhcmF0b3IuZ2V0KCkpOwot
ICAgIGVsc2UgeworICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghbWFrZUFsbERpcmVjdG9yaWVz
KHBhdGhCYXNlKSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY3JlYXRlIElu
ZGV4ZWREQiBkYXRhYmFzZSBwYXRoICVzIiwgcGF0aEJhc2UudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5J
bmRleGVkREIuQmFja2luZ1N0b3JlLm9wZW4iLCBMZXZlbERCQmFja2luZ1N0b3JlT3BlbkZhaWxl
ZERpcmVjdG9yeSwgTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwogICAgICAgICAgICAgcmV0
dXJuIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPigpOwogICAgICAgICB9CiAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgZXZlbnR1YWxseSB1c2UgdGhlIHNhbWUgTGV2ZWxEQiBkYXRhYmFz
ZSBmb3IgYWxsIG9yaWdpbnMuCkBAIC0yMzEsMTEgKzI1NiwxNSBAQCBQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbihTZWN1cml0eU9yaWdpbiog
c2VjdXJpdAogCiAgICAgICAgIGRiID0gTGV2ZWxEQkRhdGFiYXNlOjpvcGVuKHBhdGgsIGNvbXBh
cmF0b3IuZ2V0KCkpOwogCi0gICAgICAgIGlmICghZGIpIHsKKyAgICAgICAgaWYgKGRiKQorICAg
ICAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUu
SW5kZXhlZERCLkJhY2tpbmdTdG9yZS5vcGVuIiwgTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5TdWNj
ZXNzLCBMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7CisgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIgYmFja2luZyBzdG9yZSBvcGVuIGZhaWxlZCwgYXR0
ZW1wdGluZyBjbGVhbnVwIik7CisgICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dy
YW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLm9wZW4iLCBMZXZl
bERCQmFja2luZ1N0b3JlT3BlbkZhaWxlZCwgTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwog
ICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gTGV2ZWxEQkRhdGFiYXNlOjpkZXN0cm95KHBhdGgp
OwogICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9S
KCJJbmRleGVkREIgYmFja2luZyBzdG9yZSBjbGVhbnVwIGZhaWxlZCIpOworICAgICAgICAgICAg
ICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4
ZWREQi5CYWNraW5nU3RvcmUub3BlbiIsIExldmVsREJCYWNraW5nU3RvcmVPcGVuQ2xlYW51cEZh
aWxlZCwgTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwogICAgICAgICAgICAgICAgIHJldHVy
biBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4oKTsKICAgICAgICAgICAgIH0KIApAQCAtMjQz
LDggKzI3MiwxMCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6b3BlbihTZWN1cml0eU9yaWdpbiogc2VjdXJpdAogICAgICAgICAgICAgZGIgPSBM
ZXZlbERCRGF0YWJhc2U6Om9wZW4ocGF0aCwgY29tcGFyYXRvci5nZXQoKSk7CiAgICAgICAgICAg
ICBpZiAoIWRiKSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIgYmFja2lu
ZyBzdG9yZSByZW9wZW4gYWZ0ZXIgcmVjb3ZlcnkgZmFpbGVkIik7CisgICAgICAgICAgICAgICAg
SGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERC
LkJhY2tpbmdTdG9yZS5vcGVuIiwgTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5DbGVhbnVwUmVvcGVu
RmFpbGVkLCBMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPigpOwogICAgICAgICAgICAgfQorICAgICAg
ICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5k
ZXhlZERCLkJhY2tpbmdTdG9yZS5vcGVuIiwgTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5DbGVhbnVw
UmVvcGVuU3VjY2VzcywgTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC0yOTEsMTIgKzMyMiwxNiBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIG9rID0gZ2V0U3RyaW5nKG1fZGIuZ2V0KCksIERhdGFi
YXNlTWV0YURhdGFLZXk6OmVuY29kZShmb3VuZElkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2Vy
VmVyc2lvbiksIGZvdW5kU3RyaW5nVmVyc2lvbik7Ci0gICAgaWYgKCFvaykKKyAgICBpZiAoIW9r
KSB7CisgICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KIAogICAgIG9rID0gZ2V0VmFySW50KG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6
OmVuY29kZShmb3VuZElkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VySW50VmVyc2lvbiksIGZv
dW5kSW50VmVyc2lvbik7Ci0gICAgaWYgKCFvaykKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIElu
dGVybmFsRXJyb3IoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICBpZiAoZm91
bmRJbnRWZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1bHRJbnRWZXJzaW9uKQog
ICAgICAgICBmb3VuZEludFZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNp
b247CiAKQEAgLTMyNSwxNCArMzYwLDIwIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFz
ZU5hbWVLZXk6OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUpOwotICAgIGlmICghcHV0SW50KG1f
ZGIuZ2V0KCksIGtleSwgcm93SWQpKQorICAgIGlmICghcHV0SW50KG1fZGIuZ2V0KCksIGtleSwg
cm93SWQpKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmICghcHV0U3RyaW5nKG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVu
Y29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24pLCB2ZXJzaW9uKSkK
KyAgICB9CisgICAgaWYgKCFwdXRTdHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtl
eTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VyVmVyc2lvbiksIHZlcnNp
b24pKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KICAgICBpZiAoaW50VmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZl
cnNpb24pCiAgICAgICAgIGludFZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0
SW50VmVyc2lvbjsKLSAgICBpZiAoIXB1dFZhckludChtX2RiLmdldCgpLCBEYXRhYmFzZU1ldGFE
YXRhS2V5OjplbmNvZGUocm93SWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJJbnRWZXJzaW9u
KSwgaW50VmVyc2lvbikpCisgICAgaWYgKCFwdXRWYXJJbnQobV9kYi5nZXQoKSwgRGF0YWJhc2VN
ZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VySW50VmVy
c2lvbiksIGludFZlcnNpb24pKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzQxLDE2ICsz
ODIsMTkgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZUlu
dFZlcnNpb24oSURCQmFja2luZ1N0b3JlOjpUcmFuc2EKICAgICBpZiAoaW50VmVyc2lvbiA9PSBJ
REJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pCiAgICAgICAgIGludFZlcnNpb24gPSBJ
REJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0SW50VmVyc2lvbjsKICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKGludFZlcnNpb24gPj0gMCwgImludFZlcnNpb24gd2FzICVsbGQiLCBzdGF0aWNfY2Fz
dDxsb25nIGxvbmc+KGludFZlcnNpb24pKTsKLSAgICBpZiAoIXB1dFZhckludChUcmFuc2FjdGlv
bjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbiksIERhdGFiYXNlTWV0YURhdGFL
ZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlckludFZlcnNpb24pLCBp
bnRWZXJzaW9uKSkKKyAgICBpZiAoIXB1dFZhckludChUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5z
YWN0aW9uRnJvbSh0cmFuc2FjdGlvbiksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJ
ZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlckludFZlcnNpb24pLCBpbnRWZXJzaW9uKSkgewor
ICAgICAgICBJbnRlcm5hbEVycm9yKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLQorICAgIH0K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRh
dGVJREJEYXRhYmFzZU1ldGFEYXRhKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCiB7Ci0gICAgaWYg
KCFwdXRTdHJpbmcoVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rp
b24pLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUocm93SWQsIERhdGFiYXNlTWV0YURhdGFL
ZXk6OlVzZXJWZXJzaW9uKSwgdmVyc2lvbikpCisgICAgaWYgKCFwdXRTdHJpbmcoVHJhbnNhY3Rp
b246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pLCBEYXRhYmFzZU1ldGFEYXRh
S2V5OjplbmNvZGUocm93SWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJWZXJzaW9uKSwgdmVy
c2lvbikpIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zNTksOCArNDAzLDEwIEBAIHN0YXRp
YyBib29sIGRlbGV0ZVJhbmdlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0
IFZlY3RvcjxjaGFyPiYgYmVnCiB7CiAgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSB0
cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBmb3IgKGl0LT5zZWVrKGJlZ2luKTsg
aXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIGVuZCkgPCAwOyBpdC0+bmV4
dCgpKSB7Ci0gICAgICAgIGlmICghdHJhbnNhY3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpKQorICAg
ICAgICBpZiAoIXRyYW5zYWN0aW9uLT5yZW1vdmUoaXQtPmtleSgpKSkgeworICAgICAgICAgICAg
SW50ZXJuYWxFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAg
ICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC00MjYsNyArNDcyLDcgQEAgdm9pZCBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBWZWN0
b3I8aW50NjRfdD4KICAgICAgICAgcCA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmRlY29kZShw
LCBsaW1pdCwgJm1ldGFEYXRhS2V5KTsKICAgICAgICAgQVNTRVJUKHApOwogICAgICAgICBpZiAo
bWV0YURhdGFLZXkubWV0YURhdGFUeXBlKCkgIT0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TmFt
ZSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIp
OworICAgICAgICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICAgICAgLy8gUG9zc2libGUg
c3RhbGUgbWV0YWRhdGEsIGJ1dCBkb24ndCBmYWlsIHRoZSBsb2FkLgogICAgICAgICAgICAgaXQt
Pm5leHQoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDM5LDMzICs0ODUsMzMgQEAgdm9p
ZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFz
ZUlkLCBWZWN0b3I8aW50NjRfdD4KIAogICAgICAgICBpdC0+bmV4dCgpOwogICAgICAgICBpZiAo
IWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVj
dFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OktleVBhdGgpKSB7Ci0gICAgICAgICAg
ICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgICAgICBJ
bnRlcm5hbEVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
SURCS2V5UGF0aCBrZXlQYXRoID0gZGVjb2RlSURCS2V5UGF0aChpdC0+dmFsdWUoKS5iZWdpbigp
LCBpdC0+dmFsdWUoKS5lbmQoKSk7CiAKICAgICAgICAgaXQtPm5leHQoKTsKICAgICAgICAgaWYg
KCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBvYmpl
Y3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpBdXRvSW5jcmVtZW50KSkgewotICAg
ICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAg
ICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIGJvb2wgYXV0b0luY3JlbWVudCA9IGRlY29kZUJvb2woaXQtPnZhbHVlKCkuYmVnaW4o
KSwgaXQtPnZhbHVlKCkuZW5kKCkpOwogCiAgICAgICAgIGl0LT5uZXh0KCk7IC8vIElzIGV2aWNh
dGJsZS4KICAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0Lmdl
dCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpFdmlj
dGFibGUpKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJy
b3IuIik7CisgICAgICAgICAgICBJbnRlcm5hbEVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAogICAgICAgICBpdC0+bmV4dCgpOyAvLyBMYXN0IHZlcnNpb24uCiAgICAg
ICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3RvcEtl
eSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TGFzdFZlcnNpb24pKSB7
Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Cisg
ICAgICAgICAgICBJbnRlcm5hbEVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAogICAgICAgICBpdC0+bmV4dCgpOyAvLyBNYXhpbXVtIGluZGV4IGlkIGFsbG9jYXRlZC4K
ICAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBz
dG9wS2V5LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpNYXhJbmRleElk
KSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIp
OworICAgICAgICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKQEAgLTQ3Nyw3ICs1MjMsNyBAQCB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PgogICAg
ICAgICAgICAgLy8gKDIpIExhdGVyLCBudWxsIHZzLiBzdHJpbmcgdnMuIGFycmF5IHdhcyBzdG9y
ZWQgaW4gdGhlIGtleVBhdGggaXRzZWxmLgogICAgICAgICAgICAgLy8gU28gdGhpcyBjaGVjayBp
cyBvbmx5IHJlbGV2YW50IGZvciBzdHJpbmctdHlwZSBrZXlQYXRocy4KICAgICAgICAgICAgIGlm
ICghaGFzS2V5UGF0aCAmJiAoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6U3RyaW5nVHlw
ZSAmJiAha2V5UGF0aC5zdHJpbmcoKS5pc0VtcHR5KCkpKSB7Ci0gICAgICAgICAgICAgICAgTE9H
X0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICAgICAgICAgIElu
dGVybmFsRXJyb3IoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoIWhhc0tleVBhdGgpCkBAIC01MzcsNTUgKzU4Myw1NSBAQCBib29sIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qIHRyYQogCiAgICAgYm9vbCBvayA9IHB1dFN0cmluZyhsZXZlbERCVHJhbnNh
Y3Rpb24sIG5hbWVLZXksIG5hbWUpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9S
KCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICBJbnRlcm5hbEVycm9yKCk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBvayA9IHB1dElEQktleVBhdGgo
bGV2ZWxEQlRyYW5zYWN0aW9uLCBrZXlQYXRoS2V5LCBrZXlQYXRoKTsKICAgICBpZiAoIW9rKSB7
Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAg
ICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAg
b2sgPSBwdXRJbnQobGV2ZWxEQlRyYW5zYWN0aW9uLCBhdXRvSW5jcmVtZW50S2V5LCBhdXRvSW5j
cmVtZW50KTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5k
ZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCiAgICAgb2sgPSBwdXRJbnQobGV2ZWxEQlRyYW5zYWN0aW9uLCBl
dmljdGFibGVLZXksIGZhbHNlKTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIExPR19FUlJPUigi
SW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcigpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgb2sgPSBwdXRJbnQobGV2ZWxEQlRy
YW5zYWN0aW9uLCBsYXN0VmVyc2lvbktleSwgMSk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBM
T0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIEludGVybmFs
RXJyb3IoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIG9rID0gcHV0SW50
KGxldmVsREJUcmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwgTWluaW11bUluZGV4SWQpOwogICAg
IGlmICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9y
LiIpOworICAgICAgICBJbnRlcm5hbEVycm9yKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKICAgICBvayA9IHB1dEJvb2wobGV2ZWxEQlRyYW5zYWN0aW9uLCBoYXNLZXlQYXRoS2V5
LCAha2V5UGF0aC5pc051bGwoKSk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1Io
IkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIEludGVybmFsRXJyb3IoKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIG9rID0gcHV0SW50KGxldmVsREJU
cmFuc2FjdGlvbiwga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSwgS2V5R2VuZXJhdG9ySW5p
dGlhbE51bWJlcik7CiAgICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFs
IEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIG9rID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlv
biwgbmFtZXNLZXksIG9iamVjdFN0b3JlSWQpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICBJbnRlcm5hbEVy
cm9yKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTY4NywxMiArNzMzLDE2
IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNvcmQoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbioKICAgICB2LmFwcGVuZChlbmNvZGVWYXJJbnQodmVy
c2lvbikpOwogICAgIHYuYXBwZW5kKGVuY29kZVN0cmluZyh2YWx1ZSkpOwogCi0gICAgaWYgKCFs
ZXZlbERCVHJhbnNhY3Rpb24tPnB1dChvYmplY3RTdG9yZWRhdGFLZXksIHYpKQorICAgIGlmICgh
bGV2ZWxEQlRyYW5zYWN0aW9uLT5wdXQob2JqZWN0U3RvcmVkYXRhS2V5LCB2KSkgeworICAgICAg
ICBJbnRlcm5hbEVycm9yKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gZXhpc3RzRW50cnlLZXkgPSBFeGlzdHNFbnRyeUtleTo6ZW5jb2Rl
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7Ci0gICAgaWYgKCFsZXZlbERCVHJhbnNh
Y3Rpb24tPnB1dChleGlzdHNFbnRyeUtleSwgZW5jb2RlSW50KHZlcnNpb24pKSkKKyAgICBpZiAo
IWxldmVsREJUcmFuc2FjdGlvbi0+cHV0KGV4aXN0c0VudHJ5S2V5LCBlbmNvZGVJbnQodmVyc2lv
bikpKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KIAogICAgIExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRp
ZmllciA9IHN0YXRpY19jYXN0PExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRp
Zmllcik7CiAgICAgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnNldFByaW1hcnlLZXkoZW5jb2Rl
SURCS2V5KGtleSkpOwpAQCAtNzg0LDcgKzgzNCw3IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9y
CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXkgPSBP
YmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
T2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik7CiAgICAg
Ym9vbCBvayA9IHB1dEludChsZXZlbERCVHJhbnNhY3Rpb24sIGtleUdlbmVyYXRvckN1cnJlbnRO
dW1iZXJLZXksIG5ld051bWJlcik7CiAgICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1Io
IkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIEludGVybmFsRXJyb3IoKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTgyOCw4
ICs4NzgsMTAgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmb3JFYWNoT2JqZWN0U3Rv
cmVSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGkKIAogICAgICAgICBpbnQ2NF90IHZl
cnNpb247CiAgICAgICAgIGNvbnN0IGNoYXIqIHEgPSBkZWNvZGVWYXJJbnQoaXQtPnZhbHVlKCku
YmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCksIHZlcnNpb24pOwotICAgICAgICBpZiAoIXEpCisg
ICAgICAgIGlmICghcSkgeworICAgICAgICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAKICAgICAgICAgUmVmUHRyPExldmVsREJSZWNv
cmRJZGVudGlmaWVyPiByaSA9IExldmVsREJSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoZW5jb2Rl
SURCS2V5KCpwcmltYXJ5S2V5KSwgdmVyc2lvbik7CiAgICAgICAgIFN0cmluZyBpZGJWYWx1ZSA9
IGRlY29kZVN0cmluZyhxLCBpdC0+dmFsdWUoKS5lbmQoKSk7CkBAIC04NzksNyArOTMxLDcgQEAg
dm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUkKICAgICAgICAgcCA9IEluZGV4TWV0YURhdGFLZXk6OmRl
Y29kZShwLCBsaW1pdCwgJm1ldGFEYXRhS2V5KTsKICAgICAgICAgQVNTRVJUKHApOwogICAgICAg
ICBpZiAobWV0YURhdGFLZXkubWV0YURhdGFUeXBlKCkgIT0gSW5kZXhNZXRhRGF0YUtleTo6TmFt
ZSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIp
OworICAgICAgICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICAgICAgLy8gUG9zc2libGUg
c3RhbGUgbWV0YWRhdGEgZHVlIHRvIGh0dHA6Ly93ZWJraXQub3JnL2IvODU1NTcgYnV0IGRvbid0
IGZhaWwgdGhlIGxvYWQuCiAgICAgICAgICAgICBpdC0+bmV4dCgpOwogICAgICAgICAgICAgY29u
dGludWU7CkBAIC04OTEsMTQgKzk0MywxNCBAQCB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSQogCiAg
ICAgICAgIGl0LT5uZXh0KCk7IC8vIHVuaXF1ZSBmbGFnCiAgICAgICAgIGlmICghY2hlY2tJbmRl
eEFuZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBzdG9wS2V5LCBpbmRleElkLCBJbmRleE1ldGFEYXRh
S2V5OjpVbmlxdWUpKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQg
REIgZXJyb3IuIik7CisgICAgICAgICAgICBJbnRlcm5hbEVycm9yKCk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgYm9vbCBpbmRleFVuaXF1ZSA9IGRlY29kZUJvb2wo
aXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOwogCiAgICAgICAgIGl0LT5u
ZXh0KCk7IC8vIGtleVBhdGgKICAgICAgICAgaWYgKCFjaGVja0luZGV4QW5kTWV0YURhdGFLZXko
aXQuZ2V0KCksIHN0b3BLZXksIGluZGV4SWQsIEluZGV4TWV0YURhdGFLZXk6OktleVBhdGgpKSB7
Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Cisg
ICAgICAgICAgICBJbnRlcm5hbEVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgSURCS2V5UGF0aCBrZXlQYXRoID0gZGVjb2RlSURCS2V5UGF0aChpdC0+dmFs
dWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7CkBAIC05NDksMjUgKzEwMDEsMjUgQEAg
Ym9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGkKIAogICAgIGJvb2wgb2sgPSBwdXRTdHJpbmcobGV2ZWxE
QlRyYW5zYWN0aW9uLCBuYW1lS2V5LCBuYW1lKTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIExP
R19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgSW50ZXJuYWxF
cnJvcigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgb2sgPSBwdXRCb29s
KGxldmVsREJUcmFuc2FjdGlvbiwgdW5pcXVlS2V5LCBpc1VuaXF1ZSk7CiAgICAgaWYgKCFvaykg
ewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAg
ICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAg
IG9rID0gcHV0SURCS2V5UGF0aChsZXZlbERCVHJhbnNhY3Rpb24sIGtleVBhdGhLZXksIGtleVBh
dGgpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVk
IERCIGVycm9yLiIpOworICAgICAgICBJbnRlcm5hbEVycm9yKCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKICAgICBvayA9IHB1dEJvb2wobGV2ZWxEQlRyYW5zYWN0aW9uLCBtdWx0
aUVudHJ5S2V5LCBpc011bHRpRW50cnkpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICBJbnRlcm5hbEVycm9y
KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTk4Myw3ICsxMDM1LDcgQEAg
dm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGkKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhNZXRh
RGF0YUVuZCA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleElkKTsKIAogICAgIGlmICghZGVsZXRlUmFuZ2UobGV2ZWxEQlRyYW5z
YWN0aW9uLCBpbmRleE1ldGFEYXRhU3RhcnQsIGluZGV4TWV0YURhdGFFbmQpKSB7Ci0gICAgICAg
IExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgSW50ZXJu
YWxFcnJvcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC05OTEsNyArMTA0Myw3IEBA
IHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiogdHJhbnNhY3RpCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4RGF0
YUVuZCA9IEluZGV4RGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQpOwogCiAgICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24s
IGluZGV4RGF0YVN0YXJ0LCBpbmRleERhdGFFbmQpKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50
ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogfQpAQCAtMTA3Niw4ICsxMTI4LDEwIEBAIGJvb2wgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6ZmluZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiogdHJhbnNhCiAKICAgICAgICAgaW50NjRfdCB2ZXJzaW9uOwogICAgICAgICBjb25zdCBj
aGFyKiBwID0gZGVjb2RlVmFySW50KGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVu
ZCgpLCB2ZXJzaW9uKTsKLSAgICAgICAgaWYgKCFwKQorICAgICAgICBpZiAoIXApIHsKKyAgICAg
ICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQogICAgICAgICBmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmFwcGVuZChwLCBpdC0+dmFsdWUo
KS5lbmQoKSAtIHApOwogCiAgICAgICAgIGlmICghdmVyc2lvbkV4aXN0cyhsZXZlbERCVHJhbnNh
Y3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHZlcnNpb24sIGZvdW5kRW5jb2RlZFBy
aW1hcnlLZXkpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167551</attachid>
            <date>2012-10-08 09:54:08 -0700</date>
            <delta_ts>2012-10-25 13:45:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98465-20121008095311.patch</filename>
            <type>text/plain</type>
            <size>27123</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTViMTJjNzU5MGFmMzMz
MGNhM2EwNDM1NmM0YTU4ZTY0ZTlmNmI5Mi4uYmYwNjZmNTQxOTQ1MjM0OTY0NzYwNzMzM2JiNTEx
NWZhMTNiZDhhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTEwLTA0ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBBZGQg
aGlzdG9ncmFtIHN0YXRpc3RpY3MgZm9yIGJhY2tpbmcgc3RvcmUgZXJyb3JzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODQ2NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERlZmluZSBhIG1hY3JvIGZvciBj
b25zaXN0ZW50IGFzc2VydGluZyAoZHVyaW5nIGRldmVsb3BtZW50KSwgbG9nZ2luZywgYW5kIHJl
Y29yZGluZworICAgICAgICBpbnRlcm5hbCBiYWNraW5nIHN0b3JlIGVycm9ycyB2aWEgaGlzdG9n
cmFtcy4gRGVmaW5lIHNwZWNpZmljIGhpc3RvZ3JhbSB2YWx1ZXMgdG8KKyAgICAgICAgdHJhY2sg
aXNzdWVzIHdpdGggb3BlbmluZyBiYWNraW5nIHN0b3JlcyB0byBnYXRoZXIgc3RhdHMgb24gY29y
cnVwdGlvbi4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSBqdXN0IHRoZSBzdGF0cywgbWEnYW0s
IGp1c3QgdGhlIHN0YXRzLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldFVwTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJ
REJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5n
U3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0
YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9iamVjdFN0b3JlUmVjb3Jk
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRl
S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleCk6CisKIDIwMTItMTAtMDQg
IE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KIAogICAgICAgICBDcmFzaCBpbiBF
dmVudEhhbmRsZXI6Om1vdXNlTW92ZWQoKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggOGMz
MDViY2EzNzc4YWQ4OTc3ZDFiNzZlZWM3YmRiMWViNDE5YjdkYS4uNzZiNDJhMGE1ZTQyZTE1ZDhl
NDcyZDJkZGQzMmU0YTQ4YjYyOTg0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTMyLDYg
KzMyLDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSAiRmlsZVN5
c3RlbS5oIgorI2luY2x1ZGUgIkhpc3RvZ3JhbVN1cHBvcnQuaCIKICNpbmNsdWRlICJJREJGYWN0
b3J5QmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlICJJREJLZXlQ
YXRoLmgiCkBAIC01MCw2ICs1MSwxOCBAQCB1c2luZyBuYW1lc3BhY2UgSURCTGV2ZWxEQkNvZGlu
ZzsKIAogY29uc3QgaW50NjRfdCBLZXlHZW5lcmF0b3JJbml0aWFsTnVtYmVyID0gMTsgLy8gRnJv
bSB0aGUgSW5kZXhlZERCIHNwZWNpZmljYXRpb24uCiAKKy8vIFVzZSB0byBzaWduYWwgY29uZGl0
aW9ucyB0aGF0IHVzdWFsbHkgaW5kaWNhdGUgZGV2ZWxvcGVyIGVycm9yLCBidXQgY291bGQgYmUg
Y2F1c2VkIGJ5IGRhdGEgY29ycnVwdGlvbi4KK2VudW0gTGV2ZWxEQkJhY2tpbmdTdG9yZUludGVy
bmFsRXJyb3JUeXBlIHsKKyAgICBMZXZlbERCQmFja2luZ1N0b3JlSW50ZXJuYWxFcnJvciwKKyAg
ICBMZXZlbERCQmFja2luZ1N0b3JlSW50ZXJuYWxFcnJvck1heCwKK307CisjZGVmaW5lIEludGVy
bmFsRXJyb3IoKSBcCisgICAgZG8geyBcCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBc
CisgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZERCIEVycm9yIik7IFwKKyAgICAg
ICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhl
ZERCLkJhY2tpbmdTdG9yZS5JbnRlcm5hbEVycm9yIiwgTGV2ZWxEQkJhY2tpbmdTdG9yZUludGVy
bmFsRXJyb3IsIExldmVsREJCYWNraW5nU3RvcmVJbnRlcm5hbEVycm9yTWF4KTsgXAorICAgIH0g
d2hpbGUgKDApCisKIHRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+CiBzdGF0aWMg
Ym9vbCBnZXRCb29sKERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5
LCBib29sJiBmb3VuZEJvb2wpCiB7CkBAIC0xNTQsOCArMTY3LDEwIEBAIHN0YXRpYyBib29sIHNl
dFVwTWV0YWRhdGEoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgU3RyaW5nJiBvcmlnaW4pCiAg
ICAgaW50NjRfdCBzY2hlbWFWZXJzaW9uID0gMDsKICAgICBpZiAoIWdldEludChkYiwgbWV0YURh
dGFLZXksIHNjaGVtYVZlcnNpb24pKSB7CiAgICAgICAgIHNjaGVtYVZlcnNpb24gPSBsYXRlc3RT
Y2hlbWFWZXJzaW9uOwotICAgICAgICBpZiAoIXB1dEludChkYiwgbWV0YURhdGFLZXksIGxhdGVz
dFNjaGVtYVZlcnNpb24pKQorICAgICAgICBpZiAoIXB1dEludChkYiwgbWV0YURhdGFLZXksIGxh
dGVzdFNjaGVtYVZlcnNpb24pKSB7CisgICAgICAgICAgICBJbnRlcm5hbEVycm9yKCk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBp
ZiAoIXNjaGVtYVZlcnNpb24pIHsKICAgICAgICAgICAgIHNjaGVtYVZlcnNpb24gPSBsYXRlc3RT
Y2hlbWFWZXJzaW9uOwpAQCAtMTY5LDcgKzE4NCw3IEBAIHN0YXRpYyBib29sIHNldFVwTWV0YWRh
dGEoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgU3RyaW5nJiBvcmlnaW4pCiAgICAgICAgICAg
ICAgICAgVmVjdG9yPGNoYXI+IHZhbHVlOwogICAgICAgICAgICAgICAgIGJvb2wgb2sgPSB0cmFu
c2FjdGlvbi0+Z2V0KGl0LT5rZXkoKSwgdmFsdWUpOwogICAgICAgICAgICAgICAgIGlmICghb2sp
IHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpbnQgZGF0YWJhc2VJZCA9
IGRlY29kZUludCh2YWx1ZS5iZWdpbigpLCB2YWx1ZS5lbmQoKSk7CkBAIC0xNzcsMTMgKzE5Miwx
MyBAQCBzdGF0aWMgYm9vbCBzZXRVcE1ldGFkYXRhKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0
IFN0cmluZyYgb3JpZ2luKQogICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5wdXQoaW50VmVy
c2lvbktleSwgZW5jb2RlVmFySW50KElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1bHRJbnRWZXJz
aW9uKSk7CiAgICAgICAgICAgICAgICAgb2sgPSB0cmFuc2FjdGlvbi0+Z2V0KGl0LT5rZXkoKSwg
dmFsdWUpOwogICAgICAgICAgICAgICAgIGlmICghb2spIHsKLSAgICAgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIEludGVybmFsRXJyb3Io
KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJvb2wgb2sgPSB0cmFuc2FjdGlvbi0+Y29tbWl0
KCk7CiAgICAgICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjI5LDYgKzI0
NCwxNiBAQCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjp+SURCTGV2ZWxEQkJhY2tpbmdTdG9yZSgp
CiAgICAgbV9jb21wYXJhdG9yLmNsZWFyKCk7CiB9CiAKK2VudW0gTGV2ZWxEQkJhY2tpbmdTdG9y
ZU9wZW5SZXN1bHQgeworICAgIExldmVsREJCYWNraW5nU3RvcmVPcGVuTWVtb3J5LAorICAgIExl
dmVsREJCYWNraW5nU3RvcmVPcGVuU3VjY2VzcywKKyAgICBMZXZlbERCQmFja2luZ1N0b3JlT3Bl
bkZhaWxlZERpcmVjdG9yeSwKKyAgICBMZXZlbERCQmFja2luZ1N0b3JlT3BlbkNsZWFudXBEZXN0
cm95RmFpbGVkLAorICAgIExldmVsREJCYWNraW5nU3RvcmVPcGVuQ2xlYW51cFJlb3BlbkZhaWxl
ZCwKKyAgICBMZXZlbERCQmFja2luZ1N0b3JlT3BlbkNsZWFudXBSZW9wZW5TdWNjZXNzLAorICAg
IExldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4LAorfTsKKwogUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4oU2VjdXJpdHlPcmlnaW4qIHNlY3Vy
aXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlQXJnLCBjb25zdCBTdHJpbmcmIGZpbGVJ
ZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnkpCiB7CiAgICAgSURCX1RS
QUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuIik7CkBAIC0yMzcsMTEgKzI2MiwxMyBA
QCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Bl
bihTZWN1cml0eU9yaWdpbiogc2VjdXJpdAogICAgIE93blB0cjxMZXZlbERCQ29tcGFyYXRvcj4g
Y29tcGFyYXRvciA9IGFkb3B0UHRyKG5ldyBDb21wYXJhdG9yKCkpOwogICAgIE93blB0cjxMZXZl
bERCRGF0YWJhc2U+IGRiOwogCi0gICAgaWYgKHBhdGhCYXNlLmlzRW1wdHkoKSkKKyAgICBpZiAo
cGF0aEJhc2UuaXNFbXB0eSgpKSB7CisgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3Jh
bUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIs
IExldmVsREJCYWNraW5nU3RvcmVPcGVuTWVtb3J5LCBMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1h
eCk7CiAgICAgICAgIGRiID0gTGV2ZWxEQkRhdGFiYXNlOjpvcGVuSW5NZW1vcnkoY29tcGFyYXRv
ci5nZXQoKSk7Ci0gICAgZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFtYWtlQWxs
RGlyZWN0b3JpZXMocGF0aEJhc2UpKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0
byBjcmVhdGUgSW5kZXhlZERCIGRhdGFiYXNlIHBhdGggJXMiLCBwYXRoQmFzZS51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9u
KCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIExldmVsREJCYWNr
aW5nU3RvcmVPcGVuRmFpbGVkRGlyZWN0b3J5LCBMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7
CiAgICAgICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7CiAgICAg
ICAgIH0KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBldmVudHVhbGx5IHVzZSB0aGUgc2Ft
ZSBMZXZlbERCIGRhdGFiYXNlIGZvciBhbGwgb3JpZ2lucy4KQEAgLTI0OSwxMSArMjc2LDE0IEBA
IFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVu
KFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0CiAKICAgICAgICAgZGIgPSBMZXZlbERCRGF0YWJhc2U6
Om9wZW4ocGF0aCwgY29tcGFyYXRvci5nZXQoKSk7CiAKLSAgICAgICAgaWYgKCFkYikgeworICAg
ICAgICBpZiAoZGIpCisgICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVt
ZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBMZXZl
bERCQmFja2luZ1N0b3JlT3BlblN1Y2Nlc3MsIExldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsK
KyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBiYWNraW5n
IHN0b3JlIG9wZW4gZmFpbGVkLCBhdHRlbXB0aW5nIGNsZWFudXAiKTsKICAgICAgICAgICAgIGJv
b2wgc3VjY2VzcyA9IExldmVsREJEYXRhYmFzZTo6ZGVzdHJveShwYXRoKTsKICAgICAgICAgICAg
IGlmICghc3VjY2VzcykgewogICAgICAgICAgICAgICAgIExPR19FUlJPUigiSW5kZXhlZERCIGJh
Y2tpbmcgc3RvcmUgY2xlYW51cCBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICBIaXN0b2dyYW1T
dXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0
b3JlLk9wZW5TdGF0dXMiLCBMZXZlbERCQmFja2luZ1N0b3JlT3BlbkNsZWFudXBEZXN0cm95RmFp
bGVkLCBMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPigpOwogICAgICAgICAgICAgfQogCkBAIC0yNjEs
OCArMjkxLDEwIEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpvcGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0CiAgICAgICAgICAgICBkYiA9IExl
dmVsREJEYXRhYmFzZTo6b3BlbihwYXRoLCBjb21wYXJhdG9yLmdldCgpKTsKICAgICAgICAgICAg
IGlmICghZGIpIHsKICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBiYWNraW5n
IHN0b3JlIHJlb3BlbiBhZnRlciByZWNvdmVyeSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICBI
aXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIu
QmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBMZXZlbERCQmFja2luZ1N0b3JlT3BlbkNsZWFudXBS
ZW9wZW5GYWlsZWQsIExldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7CiAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29y
ZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBMZXZlbERCQmFja2luZ1N0b3Jl
T3BlbkNsZWFudXBSZW9wZW5TdWNjZXNzLCBMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTMwOSwxMiArMzQxLDE2IEBAIGJvb2wgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0
cmluZyYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgb2sgPSBnZXRTdHJpbmcobV9kYi5n
ZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGZvdW5kSWQsIERhdGFiYXNlTWV0YURh
dGFLZXk6OlVzZXJWZXJzaW9uKSwgZm91bmRTdHJpbmdWZXJzaW9uKTsKLSAgICBpZiAoIW9rKQor
ICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQogCiAgICAgb2sgPSBnZXRWYXJJbnQobV9kYi5nZXQoKSwgRGF0YWJhc2VN
ZXRhRGF0YUtleTo6ZW5jb2RlKGZvdW5kSWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJJbnRW
ZXJzaW9uKSwgZm91bmRJbnRWZXJzaW9uKTsKLSAgICBpZiAoIW9rKQorICAgIGlmICghb2spIHsK
KyAgICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQog
ICAgIGlmIChmb3VuZEludFZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVmYXVsdElu
dFZlcnNpb24pCiAgICAgICAgIGZvdW5kSW50VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0YWRhdGE6
Ok5vSW50VmVyc2lvbjsKIApAQCAtMzQ1LDE0ICszODEsMjAgQEAgYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtl
eSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlKG1faWRlbnRpZmllciwgbmFtZSk7Ci0gICAgaWYg
KCFwdXRJbnQobV9kYi5nZXQoKSwga2V5LCByb3dJZCkpCisgICAgaWYgKCFwdXRJbnQobV9kYi5n
ZXQoKSwga2V5LCByb3dJZCkpIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFwdXRTdHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRh
RGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VyVmVyc2lvbiks
IHZlcnNpb24pKQorICAgIH0KKyAgICBpZiAoIXB1dFN0cmluZyhtX2RiLmdldCgpLCBEYXRhYmFz
ZU1ldGFEYXRhS2V5OjplbmNvZGUocm93SWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJWZXJz
aW9uKSwgdmVyc2lvbikpIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQogICAgIGlmIChpbnRWZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRh
dGE6Ok5vSW50VmVyc2lvbikKICAgICAgICAgaW50VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0YWRh
dGE6OkRlZmF1bHRJbnRWZXJzaW9uOwotICAgIGlmICghcHV0VmFySW50KG1fZGIuZ2V0KCksIERh
dGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNl
ckludFZlcnNpb24pLCBpbnRWZXJzaW9uKSkKKyAgICBpZiAoIXB1dFZhckludChtX2RiLmdldCgp
LCBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUocm93SWQsIERhdGFiYXNlTWV0YURhdGFLZXk6
OlVzZXJJbnRWZXJzaW9uKSwgaW50VmVyc2lvbikpIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcigp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC0zNjEsMTYgKzQwMywxOSBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlE
QkRhdGFiYXNlSW50VmVyc2lvbihJREJCYWNraW5nU3RvcmU6OlRyYW5zYQogICAgIGlmIChpbnRW
ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbikKICAgICAgICAgaW50
VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1bHRJbnRWZXJzaW9uOwogICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UoaW50VmVyc2lvbiA+PSAwLCAiaW50VmVyc2lvbiB3YXMgJWxsZCIs
IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oaW50VmVyc2lvbikpOwotICAgIGlmICghcHV0VmFySW50
KFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKSwgRGF0YWJh
c2VNZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VySW50
VmVyc2lvbiksIGludFZlcnNpb24pKQorICAgIGlmICghcHV0VmFySW50KFRyYW5zYWN0aW9uOjps
ZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6
ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VySW50VmVyc2lvbiksIGludFZl
cnNpb24pKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCisgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIElEQkxldmVsREJCYWNraW5n
U3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikK
IHsKLSAgICBpZiAoIXB1dFN0cmluZyhUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJv
bSh0cmFuc2FjdGlvbiksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJh
c2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24pLCB2ZXJzaW9uKSkKKyAgICBpZiAoIXB1dFN0cmlu
ZyhUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbiksIERhdGFi
YXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZl
cnNpb24pLCB2ZXJzaW9uKSkgeworICAgICAgICBJbnRlcm5hbEVycm9yKCk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM3OSw4ICs0MjQs
MTAgQEAgc3RhdGljIGJvb2wgZGVsZXRlUmFuZ2UoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBiZWcKIHsKICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJh
dG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwogICAgIGZvciAoaXQtPnNl
ZWsoYmVnaW4pOyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgZW5kKSA8
IDA7IGl0LT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKCF0cmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5r
ZXkoKSkpCisgICAgICAgIGlmICghdHJhbnNhY3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpKSB7Cisg
ICAgICAgICAgICBJbnRlcm5hbEVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ0OCw3ICs0OTUsNyBAQCB2
b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFi
YXNlSWQsIFZlY3RvcjxpbnQ2NF90PgogICAgICAgICBwID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eTo6ZGVjb2RlKHAsIGxpbWl0LCAmbWV0YURhdGFLZXkpOwogICAgICAgICBBU1NFUlQocCk7CiAg
ICAgICAgIGlmIChtZXRhRGF0YUtleS5tZXRhRGF0YVR5cGUoKSAhPSBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjpOYW1lKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQg
REIgZXJyb3IuIik7CisgICAgICAgICAgICBJbnRlcm5hbEVycm9yKCk7CiAgICAgICAgICAgICAv
LyBQb3NzaWJsZSBzdGFsZSBtZXRhZGF0YSwgYnV0IGRvbid0IGZhaWwgdGhlIGxvYWQuCiAgICAg
ICAgICAgICBpdC0+bmV4dCgpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC00NjEsMzMgKzUw
OCwzMyBAQCB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2
NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PgogCiAgICAgICAgIGl0LT5uZXh0KCk7CiAg
ICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3Rv
cEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6S2V5UGF0aCkpIHsK
LSAgICAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAg
ICAgICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICBJREJLZXlQYXRoIGtleVBhdGggPSBkZWNvZGVJREJLZXlQYXRoKGl0LT52YWx1
ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKIAogICAgICAgICBpdC0+bmV4dCgpOwog
ICAgICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0
b3BLZXksIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OkF1dG9JbmNyZW1l
bnQpKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3Iu
Iik7CisgICAgICAgICAgICBJbnRlcm5hbEVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgYm9vbCBhdXRvSW5jcmVtZW50ID0gZGVjb2RlQm9vbChpdC0+dmFs
dWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7CiAKICAgICAgICAgaXQtPm5leHQoKTsg
Ly8gSXMgZXZpY2F0YmxlLgogICAgICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0
YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURh
dGFLZXk6OkV2aWN0YWJsZSkpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5k
ZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGl0LT5uZXh0KCk7IC8vIExhc3QgdmVy
c2lvbi4KICAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0Lmdl
dCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpMYXN0
VmVyc2lvbikpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBl
cnJvci4iKTsKKyAgICAgICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCiAgICAgICAgIGl0LT5uZXh0KCk7IC8vIE1heGltdW0gaW5kZXggaWQg
YWxsb2NhdGVkLgogICAgICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUo
aXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6
Ok1heEluZGV4SWQpKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQg
REIgZXJyb3IuIik7CisgICAgICAgICAgICBJbnRlcm5hbEVycm9yKCk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaW50NjRfdCBtYXhJbmRleElkID0gZGVjb2RlSW50
KGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKQEAgLTUwMCw3ICs1NDcs
NyBAQCB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90
IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PgogICAgICAgICAgICAgLy8gKDIpIExhdGVyLCBu
dWxsIHZzLiBzdHJpbmcgdnMuIGFycmF5IHdhcyBzdG9yZWQgaW4gdGhlIGtleVBhdGggaXRzZWxm
LgogICAgICAgICAgICAgLy8gU28gdGhpcyBjaGVjayBpcyBvbmx5IHJlbGV2YW50IGZvciBzdHJp
bmctdHlwZSBrZXlQYXRocy4KICAgICAgICAgICAgIGlmICghaGFzS2V5UGF0aCAmJiAoa2V5UGF0
aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6U3RyaW5nVHlwZSAmJiAha2V5UGF0aC5zdHJpbmcoKS5p
c0VtcHR5KCkpKSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVk
IERCIGVycm9yLiIpOworICAgICAgICAgICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIWhhc0tleVBh
dGgpCkBAIC01NjAsNTUgKzYwNyw1NSBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNy
ZWF0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYQogCiAgICAg
Ym9vbCBvayA9IHB1dFN0cmluZyhsZXZlbERCVHJhbnNhY3Rpb24sIG5hbWVLZXksIG5hbWUpOwog
ICAgIGlmICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVy
cm9yLiIpOworICAgICAgICBJbnRlcm5hbEVycm9yKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKICAgICBvayA9IHB1dElEQktleVBhdGgobGV2ZWxEQlRyYW5zYWN0aW9uLCBrZXlQ
YXRoS2V5LCBrZXlQYXRoKTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50
ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgb2sgPSBwdXRJbnQobGV2ZWxEQlRyYW5z
YWN0aW9uLCBhdXRvSW5jcmVtZW50S2V5LCBhdXRvSW5jcmVtZW50KTsKICAgICBpZiAoIW9rKSB7
Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAg
ICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAg
b2sgPSBwdXRJbnQobGV2ZWxEQlRyYW5zYWN0aW9uLCBldmljdGFibGVLZXksIGZhbHNlKTsKICAg
ICBpZiAoIW9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJv
ci4iKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCiAgICAgb2sgPSBwdXRJbnQobGV2ZWxEQlRyYW5zYWN0aW9uLCBsYXN0VmVyc2lvbktl
eSwgMSk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4
ZWQgREIgZXJyb3IuIik7CisgICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAogICAgIG9rID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwgbWF4
SW5kZXhJZEtleSwgTWluaW11bUluZGV4SWQpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICBJbnRlcm5hbEVy
cm9yKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBvayA9IHB1dEJvb2wo
bGV2ZWxEQlRyYW5zYWN0aW9uLCBoYXNLZXlQYXRoS2V5LCAha2V5UGF0aC5pc051bGwoKSk7CiAg
ICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJy
b3IuIik7CisgICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAogICAgIG9rID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwga2V5R2VuZXJhdG9y
Q3VycmVudE51bWJlcktleSwgS2V5R2VuZXJhdG9ySW5pdGlhbE51bWJlcik7CiAgICAgaWYgKCFv
aykgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7Cisg
ICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAog
ICAgIG9rID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwgbmFtZXNLZXksIG9iamVjdFN0b3Jl
SWQpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVk
IERCIGVycm9yLiIpOworICAgICAgICBJbnRlcm5hbEVycm9yKCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKQEAgLTYyNiwxNSArNjczLDIxIEBAIHZvaWQgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiog
dHJhCiAgICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZTsKICAgICBnZXRTdHJpbmcobGV2ZWxEQlRy
YW5zYWN0aW9uLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TmFtZSksIG9iamVjdFN0b3JlTmFt
ZSk7CiAKLSAgICBpZiAoIWRlbGV0ZVJhbmdlKGxldmVsREJUcmFuc2FjdGlvbiwgT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBPYmpl
Y3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCkpKQorICAgIGlmICghZGVsZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCksIE9iamVj
dFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
KSkpIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICByZXR1cm47IC8vIEZJWE1F
OiBSZXBvcnQgZXJyb3IuCisgICAgfQogCiAgICAgbGV2ZWxEQlRyYW5zYWN0aW9uLT5yZW1vdmUo
T2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlTmFtZSkp
OwogCi0gICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIEluZGV4RnJlZUxp
c3RLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwgSW5kZXhGcmVlTGlz
dEtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkKKyAgICBpZiAo
IWRlbGV0ZVJhbmdlKGxldmVsREJUcmFuc2FjdGlvbiwgSW5kZXhGcmVlTGlzdEtleTo6ZW5jb2Rl
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGVN
YXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpKSB7CisgICAgICAgIEludGVybmFsRXJy
b3IoKTsKICAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgotICAgIGlmICgh
ZGVsZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCwgMCksIEluZGV4TWV0YURhdGFLZXk6OmVuY29k
ZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkpCisgICAgfQorICAgIGlmICghZGVs
ZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCwgMCksIEluZGV4TWV0YURhdGFLZXk6OmVuY29kZU1h
eEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkpIHsKKyAgICAgICAgSW50ZXJuYWxFcnJv
cigpOwogICAgICAgICByZXR1cm47IC8vIEZJWE1FOiBSZXBvcnQgZXJyb3IuCisgICAgfQogCiAg
ICAgY2xlYXJPYmplY3RTdG9yZSh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCk7CiB9CkBAIC02NTIsOCArNzA1LDEwIEBAIFN0cmluZyBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpnZXRPYmplY3RTdG9yZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uCiAKICAg
ICBpbnQ2NF90IHZlcnNpb247CiAgICAgY29uc3QgY2hhciogcCA9IGRlY29kZVZhckludChkYXRh
LmJlZ2luKCksIGRhdGEuZW5kKCksIHZlcnNpb24pOwotICAgIGlmICghcCkKKyAgICBpZiAoIXAp
IHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Cisg
ICAgfQogICAgICh2b2lkKSB2ZXJzaW9uOwogCiAgICAgcmV0dXJuIGRlY29kZVN0cmluZyhwLCBk
YXRhLmVuZCgpKTsKQEAgLTcxMSwxMiArNzY2LDE2IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbioK
ICAgICB2LmFwcGVuZChlbmNvZGVWYXJJbnQodmVyc2lvbikpOwogICAgIHYuYXBwZW5kKGVuY29k
ZVN0cmluZyh2YWx1ZSkpOwogCi0gICAgaWYgKCFsZXZlbERCVHJhbnNhY3Rpb24tPnB1dChvYmpl
Y3RTdG9yZWRhdGFLZXksIHYpKQorICAgIGlmICghbGV2ZWxEQlRyYW5zYWN0aW9uLT5wdXQob2Jq
ZWN0U3RvcmVkYXRhS2V5LCB2KSkgeworICAgICAgICBJbnRlcm5hbEVycm9yKCk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gZXhpc3RzRW50
cnlLZXkgPSBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGtleSk7Ci0gICAgaWYgKCFsZXZlbERCVHJhbnNhY3Rpb24tPnB1dChleGlzdHNFbnRyeUtleSwg
ZW5jb2RlSW50KHZlcnNpb24pKSkKKyAgICBpZiAoIWxldmVsREJUcmFuc2FjdGlvbi0+cHV0KGV4
aXN0c0VudHJ5S2V5LCBlbmNvZGVJbnQodmVyc2lvbikpKSB7CisgICAgICAgIEludGVybmFsRXJy
b3IoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIExldmVsREJSZWNvcmRJ
ZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PExldmVsREJS
ZWNvcmRJZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRpZmllcik7CiAgICAgbGV2ZWxEQlJlY29yZElk
ZW50aWZpZXItPnNldFByaW1hcnlLZXkoZW5jb2RlSURCS2V5KGtleSkpOwpAQCAtODA4LDcgKzg2
Nyw3IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0
b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtl
eUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6S2V5
R2VuZXJhdG9yQ3VycmVudE51bWJlcik7CiAgICAgYm9vbCBvayA9IHB1dEludChsZXZlbERCVHJh
bnNhY3Rpb24sIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXksIG5ld051bWJlcik7CiAgICAg
aWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3Iu
Iik7CisgICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg1Miw4ICs5MTEsMTAgQEAgYm9vbCBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGkKIAogICAgICAgICBpbnQ2NF90IHZlcnNpb247CiAgICAgICAgIGNvbnN0IGNoYXIq
IHEgPSBkZWNvZGVWYXJJbnQoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCks
IHZlcnNpb24pOwotICAgICAgICBpZiAoIXEpCisgICAgICAgIGlmICghcSkgeworICAgICAgICAg
ICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CiAKICAgICAgICAgUmVmUHRyPExldmVsREJSZWNvcmRJZGVudGlmaWVyPiByaSA9IExldmVsREJS
ZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoZW5jb2RlSURCS2V5KCpwcmltYXJ5S2V5KSwgdmVyc2lv
bik7CiAgICAgICAgIFN0cmluZyBpZGJWYWx1ZSA9IGRlY29kZVN0cmluZyhxLCBpdC0+dmFsdWUo
KS5lbmQoKSk7CkBAIC05MDMsNyArOTY0LDcgQEAgdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUkKICAg
ICAgICAgcCA9IEluZGV4TWV0YURhdGFLZXk6OmRlY29kZShwLCBsaW1pdCwgJm1ldGFEYXRhS2V5
KTsKICAgICAgICAgQVNTRVJUKHApOwogICAgICAgICBpZiAobWV0YURhdGFLZXkubWV0YURhdGFU
eXBlKCkgIT0gSW5kZXhNZXRhRGF0YUtleTo6TmFtZSkgewotICAgICAgICAgICAgTE9HX0VSUk9S
KCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICAgICAgSW50ZXJuYWxFcnJv
cigpOwogICAgICAgICAgICAgLy8gUG9zc2libGUgc3RhbGUgbWV0YWRhdGEgZHVlIHRvIGh0dHA6
Ly93ZWJraXQub3JnL2IvODU1NTcgYnV0IGRvbid0IGZhaWwgdGhlIGxvYWQuCiAgICAgICAgICAg
ICBpdC0+bmV4dCgpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC05MTUsMTQgKzk3NiwxNCBA
QCB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSQogCiAgICAgICAgIGl0LT5uZXh0KCk7IC8vIHVuaXF1
ZSBmbGFnCiAgICAgICAgIGlmICghY2hlY2tJbmRleEFuZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBz
dG9wS2V5LCBpbmRleElkLCBJbmRleE1ldGFEYXRhS2V5OjpVbmlxdWUpKSB7Ci0gICAgICAgICAg
ICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgICAgICBJ
bnRlcm5hbEVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
Ym9vbCBpbmRleFVuaXF1ZSA9IGRlY29kZUJvb2woaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZh
bHVlKCkuZW5kKCkpOwogCiAgICAgICAgIGl0LT5uZXh0KCk7IC8vIGtleVBhdGgKICAgICAgICAg
aWYgKCFjaGVja0luZGV4QW5kTWV0YURhdGFLZXkoaXQuZ2V0KCksIHN0b3BLZXksIGluZGV4SWQs
IEluZGV4TWV0YURhdGFLZXk6OktleVBhdGgpKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIklu
dGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgICAgICBJbnRlcm5hbEVycm9yKCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgSURCS2V5UGF0aCBrZXlQ
YXRoID0gZGVjb2RlSURCS2V5UGF0aChpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5l
bmQoKSk7CkBAIC05OTAsMjUgKzEwNTEsMjUgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpjcmVhdGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGkKIAog
ICAgIGJvb2wgb2sgPSBwdXRTdHJpbmcobGV2ZWxEQlRyYW5zYWN0aW9uLCBuYW1lS2V5LCBuYW1l
KTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBE
QiBlcnJvci4iKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCiAgICAgb2sgPSBwdXRCb29sKGxldmVsREJUcmFuc2FjdGlvbiwgdW5pcXVl
S2V5LCBpc1VuaXF1ZSk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1IoIkludGVy
bmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIG9rID0gcHV0SURCS2V5UGF0aChsZXZlbERC
VHJhbnNhY3Rpb24sIGtleVBhdGhLZXksIGtleVBhdGgpOwogICAgIGlmICghb2spIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICBJbnRl
cm5hbEVycm9yKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBvayA9IHB1
dEJvb2wobGV2ZWxEQlRyYW5zYWN0aW9uLCBtdWx0aUVudHJ5S2V5LCBpc011bHRpRW50cnkpOwog
ICAgIGlmICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVy
cm9yLiIpOworICAgICAgICBJbnRlcm5hbEVycm9yKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKQEAgLTEwMjcsNyArMTA4OCw3IEBAIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6ZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3RpCiAg
ICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4TWV0YURhdGFFbmQgPSBJbmRleE1ldGFEYXRhS2V5
OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7CiAKICAg
ICBpZiAoIWRlbGV0ZVJhbmdlKGxldmVsREJUcmFuc2FjdGlvbiwgaW5kZXhNZXRhRGF0YVN0YXJ0
LCBpbmRleE1ldGFEYXRhRW5kKSkgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4
ZWQgREIgZXJyb3IuIik7CisgICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtMTAzNSw3ICsxMDk2LDcgQEAgdm9pZCBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpkZWxldGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGkK
ICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhEYXRhRW5kID0gSW5kZXhEYXRhS2V5OjplbmNv
ZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7CiAKICAgICBpZiAo
IWRlbGV0ZVJhbmdlKGxldmVsREJUcmFuc2FjdGlvbiwgaW5kZXhEYXRhU3RhcnQsIGluZGV4RGF0
YUVuZCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIp
OworICAgICAgICBJbnRlcm5hbEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CkBA
IC0xMTIwLDggKzExODEsMTAgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5
SW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2EKIAogICAgICAgICBp
bnQ2NF90IHZlcnNpb247CiAgICAgICAgIGNvbnN0IGNoYXIqIHAgPSBkZWNvZGVWYXJJbnQoaXQt
PnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCksIHZlcnNpb24pOwotICAgICAgICBp
ZiAoIXApCisgICAgICAgIGlmICghcCkgeworICAgICAgICAgICAgSW50ZXJuYWxFcnJvcigpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgICAgIGZvdW5kRW5jb2Rl
ZFByaW1hcnlLZXkuYXBwZW5kKHAsIGl0LT52YWx1ZSgpLmVuZCgpIC0gcCk7CiAKICAgICAgICAg
aWYgKCF2ZXJzaW9uRXhpc3RzKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgdmVyc2lvbiwgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkpIHsKQEAgLTE0MDAsMTYg
KzE0NjMsMjAgQEAgYm9vbCBPYmplY3RTdG9yZUtleUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93
KCkKICAgICBPYmplY3RTdG9yZURhdGFLZXkgb2JqZWN0U3RvcmVEYXRhS2V5OwogICAgIGtleVBv
c2l0aW9uID0gT2JqZWN0U3RvcmVEYXRhS2V5OjpkZWNvZGUoa2V5UG9zaXRpb24sIGtleUxpbWl0
LCAmb2JqZWN0U3RvcmVEYXRhS2V5KTsKICAgICBBU1NFUlQoa2V5UG9zaXRpb24pOwotICAgIGlm
ICgha2V5UG9zaXRpb24pCisgICAgaWYgKCFrZXlQb3NpdGlvbikgeworICAgICAgICBJbnRlcm5h
bEVycm9yKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBtX2N1cnJlbnRL
ZXkgPSBvYmplY3RTdG9yZURhdGFLZXkudXNlcktleSgpOwogCiAgICAgaW50NjRfdCB2ZXJzaW9u
OwogICAgIGNvbnN0IGNoYXIqIHZhbHVlUG9zaXRpb24gPSBkZWNvZGVWYXJJbnQobV9pdGVyYXRv
ci0+dmFsdWUoKS5iZWdpbigpLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpLCB2ZXJzaW9uKTsK
ICAgICBBU1NFUlQodmFsdWVQb3NpdGlvbik7Ci0gICAgaWYgKCF2YWx1ZVBvc2l0aW9uKQorICAg
IGlmICghdmFsdWVQb3NpdGlvbikgeworICAgICAgICBJbnRlcm5hbEVycm9yKCk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICAvLyBGSVhNRTogVGhpcyByZS1lbmNvZGVzIHdo
YXQgd2FzIGp1c3QgZGVjb2RlZDsgdHJ5IGFuZCBvcHRpbWl6ZS4KICAgICBtX2lkZW50aWZpZXIg
PSBMZXZlbERCUmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKGVuY29kZUlEQktleSgqbV9jdXJyZW50
S2V5KSwgdmVyc2lvbik7CkBAIC0xNDYxLDE2ICsxNTI4LDIwIEBAIGJvb2wgT2JqZWN0U3RvcmVD
dXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgT2JqZWN0U3RvcmVEYXRhS2V5IG9iamVj
dFN0b3JlRGF0YUtleTsKICAgICBrZXlQb3NpdGlvbiA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZGVj
b2RlKGtleVBvc2l0aW9uLCBrZXlMaW1pdCwgJm9iamVjdFN0b3JlRGF0YUtleSk7CiAgICAgQVNT
RVJUKGtleVBvc2l0aW9uKTsKLSAgICBpZiAoIWtleVBvc2l0aW9uKQorICAgIGlmICgha2V5UG9z
aXRpb24pIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQogCiAgICAgbV9jdXJyZW50S2V5ID0gb2JqZWN0U3RvcmVEYXRhS2V5LnVzZXJLZXko
KTsKIAogICAgIGludDY0X3QgdmVyc2lvbjsKICAgICBjb25zdCBjaGFyKiB2YWx1ZVBvc2l0aW9u
ID0gZGVjb2RlVmFySW50KG1faXRlcmF0b3ItPnZhbHVlKCkuYmVnaW4oKSwgbV9pdGVyYXRvci0+
dmFsdWUoKS5lbmQoKSwgdmVyc2lvbik7CiAgICAgQVNTRVJUKHZhbHVlUG9zaXRpb24pOwotICAg
IGlmICghdmFsdWVQb3NpdGlvbikKKyAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsKKyAgICAgICAg
SW50ZXJuYWxFcnJvcigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgLy8g
RklYTUU6IFRoaXMgcmUtZW5jb2RlcyB3aGF0IHdhcyBqdXN0IGRlY29kZWQ7IHRyeSBhbmQgb3B0
aW1pemUuCiAgICAgbV9pZGVudGlmaWVyID0gTGV2ZWxEQlJlY29yZElkZW50aWZpZXI6OmNyZWF0
ZShlbmNvZGVJREJLZXkoKm1fY3VycmVudEtleSksIHZlcnNpb24pOwpAQCAtMTUyNiwxMyArMTU5
NywxNyBAQCBib29sIEluZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgIGlu
dDY0X3QgaW5kZXhEYXRhVmVyc2lvbjsKICAgICBjb25zdCBjaGFyKiB2YWx1ZVBvc2l0aW9uID0g
ZGVjb2RlVmFySW50KG1faXRlcmF0b3ItPnZhbHVlKCkuYmVnaW4oKSwgbV9pdGVyYXRvci0+dmFs
dWUoKS5lbmQoKSwgaW5kZXhEYXRhVmVyc2lvbik7CiAgICAgQVNTRVJUKHZhbHVlUG9zaXRpb24p
OwotICAgIGlmICghdmFsdWVQb3NpdGlvbikKKyAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsKKyAg
ICAgICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAg
ICAgdmFsdWVQb3NpdGlvbiA9IGRlY29kZUlEQktleSh2YWx1ZVBvc2l0aW9uLCBtX2l0ZXJhdG9y
LT52YWx1ZSgpLmVuZCgpLCBtX3ByaW1hcnlLZXkpOwogICAgIEFTU0VSVCh2YWx1ZVBvc2l0aW9u
KTsKLSAgICBpZiAoIXZhbHVlUG9zaXRpb24pCisgICAgaWYgKCF2YWx1ZVBvc2l0aW9uKSB7Cisg
ICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAog
ICAgIFZlY3RvcjxjaGFyPiBwcmltYXJ5TGV2ZWxEQktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6
ZW5jb2RlKGluZGV4RGF0YUtleS5kYXRhYmFzZUlkKCksIGluZGV4RGF0YUtleS5vYmplY3RTdG9y
ZUlkKCksICptX3ByaW1hcnlLZXkpOwogCkBAIC0xNTQ1LDggKzE2MjAsMTAgQEAgYm9vbCBJbmRl
eEtleUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKICAgICBpbnQ2NF90IG9iamVjdFN0b3Jl
RGF0YVZlcnNpb247CiAgICAgY29uc3QgY2hhciogdCA9IGRlY29kZVZhckludChyZXN1bHQuYmVn
aW4oKSwgcmVzdWx0LmVuZCgpLCBvYmplY3RTdG9yZURhdGFWZXJzaW9uKTsKICAgICBBU1NFUlQo
dCk7Ci0gICAgaWYgKCF0KQorICAgIGlmICghdCkgeworICAgICAgICBJbnRlcm5hbEVycm9yKCk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBpZiAob2JqZWN0U3RvcmVEYXRh
VmVyc2lvbiAhPSBpbmRleERhdGFWZXJzaW9uKSB7CiAgICAgICAgIG1fdHJhbnNhY3Rpb24tPnJl
bW92ZShtX2l0ZXJhdG9yLT5rZXkoKSk7CkBAIC0xNjA5LDEyICsxNjg2LDE2IEBAIGJvb2wgSW5k
ZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgaW50NjRfdCBpbmRleERhdGFWZXJz
aW9uOwogICAgIHZhbHVlUG9zaXRpb24gPSBkZWNvZGVWYXJJbnQodmFsdWVQb3NpdGlvbiwgdmFs
dWVMaW1pdCwgaW5kZXhEYXRhVmVyc2lvbik7CiAgICAgQVNTRVJUKHZhbHVlUG9zaXRpb24pOwot
ICAgIGlmICghdmFsdWVQb3NpdGlvbikKKyAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsKKyAgICAg
ICAgSW50ZXJuYWxFcnJvcigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIHZh
bHVlUG9zaXRpb24gPSBkZWNvZGVJREJLZXkodmFsdWVQb3NpdGlvbiwgdmFsdWVMaW1pdCwgbV9w
cmltYXJ5S2V5KTsKICAgICBBU1NFUlQodmFsdWVQb3NpdGlvbik7Ci0gICAgaWYgKCF2YWx1ZVBv
c2l0aW9uKQorICAgIGlmICghdmFsdWVQb3NpdGlvbikgeworICAgICAgICBJbnRlcm5hbEVycm9y
KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBtX3ByaW1hcnlMZXZlbERC
S2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoaW5kZXhEYXRhS2V5LmRhdGFiYXNlSWQo
KSwgaW5kZXhEYXRhS2V5Lm9iamVjdFN0b3JlSWQoKSwgKm1fcHJpbWFyeUtleSk7CiAKQEAgLTE2
MjcsOCArMTcwOCwxMCBAQCBib29sIEluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQog
ICAgIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhVmVyc2lvbjsKICAgICBjb25zdCBjaGFyKiB0ID0g
ZGVjb2RlVmFySW50KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIG9iamVjdFN0b3JlRGF0
YVZlcnNpb24pOwogICAgIEFTU0VSVCh0KTsKLSAgICBpZiAoIXQpCisgICAgaWYgKCF0KSB7Cisg
ICAgICAgIEludGVybmFsRXJyb3IoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAog
ICAgIGlmIChvYmplY3RTdG9yZURhdGFWZXJzaW9uICE9IGluZGV4RGF0YVZlcnNpb24pIHsKICAg
ICAgICAgbV90cmFuc2FjdGlvbi0+cmVtb3ZlKG1faXRlcmF0b3ItPmtleSgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170725</attachid>
            <date>2012-10-25 13:45:58 -0700</date>
            <delta_ts>2012-10-25 15:54:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98465-20121025134431.patch</filename>
            <type>text/plain</type>
            <size>31919</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyNDg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzdlOTI2ODc5YzNhYjVh
ZTdlZjUyYzE2NTZkNTBlOWVkZjgwMzcyMC4uM2ZhYjc1YWU4NTM2M2VkNmFiMDg2YjM3YzI4M2M0
YWE4OGRjNjYwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTEwLTI1ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBBZGQg
aGlzdG9ncmFtIHN0YXRpc3RpY3MgZm9yIGJhY2tpbmcgc3RvcmUgZXJyb3JzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODQ2NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERlZmluZSBhIG1hY3JvIGZvciBj
b25zaXN0ZW50IGFzc2VydGluZyAoZHVyaW5nIGRldmVsb3BtZW50KSwgbG9nZ2luZywgYW5kIHJl
Y29yZGluZworICAgICAgICBpbnRlcm5hbCBiYWNraW5nIHN0b3JlIGVycm9ycyB2aWEgaGlzdG9n
cmFtcy4gRGVmaW5lIHNwZWNpZmljIGhpc3RvZ3JhbSB2YWx1ZXMgdG8KKyAgICAgICAgdHJhY2sg
aXNzdWVzIHdpdGggb3BlbmluZyBiYWNraW5nIHN0b3JlcyB0byBnYXRoZXIgc3RhdHMgb24gY29y
cnVwdGlvbi4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSBqdXN0IHRoZSBzdGF0cywgbWEnYW0s
IGp1c3QgdGhlIHN0YXRzLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldFVwTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJ
REJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5n
U3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0
YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9iamVjdFN0b3JlUmVjb3Jk
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRl
S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleCk6CisKIDIwMTItMTAtMjUg
IFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTWVtb3J5
IGluc3RydW1lbnRhdGlvbjogYWRkIHJlcG9ydE1lbW9yeVVzYWdlIHRvIEltYWdlT2JzZXJ2ZXIg
aW50ZXJmYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDM2M2M4NjA4MDFhMmY1NzM0ZGM1
YzkyNzU3NjMzZWRkODE4ODYyY2IuLjYwN2RlZjc3ZjE1NjZjM2MzNmNkZmE0ZTMzMjhmYzA2YzVl
NWE4NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxl
dmVsREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRl
ICJIaXN0b2dyYW1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgi
CiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgpAQCAtNTEsNiAr
NTIsMjYgQEAgdXNpbmcgbmFtZXNwYWNlIElEQkxldmVsREJDb2Rpbmc7CiAKIGNvbnN0IGludDY0
X3QgS2V5R2VuZXJhdG9ySW5pdGlhbE51bWJlciA9IDE7IC8vIEZyb20gdGhlIEluZGV4ZWREQiBz
cGVjaWZpY2F0aW9uLgogCitlbnVtIElEQkxldmVsREJCYWNraW5nU3RvcmVJbnRlcm5hbEVycm9y
VHlwZSB7CisgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvciwKKyAgICBJREJMZXZl
bERCQmFja2luZ1N0b3JlV3JpdGVFcnJvciwKKyAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlQ29u
c2lzdGVuY3lFcnJvciwKKyAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlSW50ZXJuYWxFcnJvck1h
eCwKK307CitzdGF0aWMgaW5saW5lIHZvaWQgcmVjb3JkSW50ZXJuYWxFcnJvcihJREJMZXZlbERC
QmFja2luZ1N0b3JlSW50ZXJuYWxFcnJvclR5cGUgdHlwZSkKK3sKKyAgICBIaXN0b2dyYW1TdXBw
b3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3Jl
LkludGVybmFsRXJyb3IiLCB0eXBlLCBJREJMZXZlbERCQmFja2luZ1N0b3JlSW50ZXJuYWxFcnJv
ck1heCk7Cit9CisKKy8vIFVzZSB0byBzaWduYWwgY29uZGl0aW9ucyB0aGF0IHVzdWFsbHkgaW5k
aWNhdGUgZGV2ZWxvcGVyIGVycm9yLCBidXQgY291bGQgYmUgY2F1c2VkIGJ5IGRhdGEgY29ycnVw
dGlvbi4KKy8vIEEgbWFjcm8gaXMgdXNlZCBpbnN0ZWFkIG9mIGFuIGlubGluZSBmdW5jdGlvbiBz
byB0aGF0IHRoZSBhc3NlcnQgYW5kIGxvZyByZXBvcnQgdGhlIGxpbmUgbnVtYmVyLgorI2RlZmlu
ZSBJbnRlcm5hbEVycm9yKHR5cGUpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IFwKKyAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkREIgRXJyb3I6
ICVzIiwgI3R5cGUpOyBcCisgICAgICAgIHJlY29yZEludGVybmFsRXJyb3IodHlwZSk7IFwKKyAg
ICB9IHdoaWxlICgwKQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgogc3Rh
dGljIGJvb2wgZ2V0Qm9vbChEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4m
IGtleSwgYm9vbCYgZm91bmRCb29sKQogewpAQCAtMTY0LDggKzE4NSwxMCBAQCBzdGF0aWMgYm9v
bCBzZXRVcE1ldGFkYXRhKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFN0cmluZyYgb3JpZ2lu
KQogICAgIGludDY0X3Qgc2NoZW1hVmVyc2lvbiA9IDA7CiAgICAgaWYgKCFnZXRJbnQoZGIsIG1l
dGFEYXRhS2V5LCBzY2hlbWFWZXJzaW9uKSkgewogICAgICAgICBzY2hlbWFWZXJzaW9uID0gbGF0
ZXN0U2NoZW1hVmVyc2lvbjsKLSAgICAgICAgaWYgKCFwdXRJbnQoZGIsIG1ldGFEYXRhS2V5LCBs
YXRlc3RTY2hlbWFWZXJzaW9uKSkKKyAgICAgICAgaWYgKCFwdXRJbnQoZGIsIG1ldGFEYXRhS2V5
LCBsYXRlc3RTY2hlbWFWZXJzaW9uKSkgeworICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJM
ZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoc2NoZW1hVmVyc2lvbiA8
PSBsYXRlc3RTY2hlbWFWZXJzaW9uKTsKICAgICAgICAgaWYgKCFzY2hlbWFWZXJzaW9uKSB7CkBA
IC0xODAsNyArMjAzLDcgQEAgc3RhdGljIGJvb2wgc2V0VXBNZXRhZGF0YShMZXZlbERCRGF0YWJh
c2UqIGRiLCBjb25zdCBTdHJpbmcmIG9yaWdpbikKICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hh
cj4gdmFsdWU7CiAgICAgICAgICAgICAgICAgYm9vbCBvayA9IHRyYW5zYWN0aW9uLT5nZXQoaXQt
PmtleSgpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgSW50ZXJu
YWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBp
bnQgZGF0YWJhc2VJZCA9IGRlY29kZUludCh2YWx1ZS5iZWdpbigpLCB2YWx1ZS5lbmQoKSk7CkBA
IC0xODgsMTMgKzIxMSwxMyBAQCBzdGF0aWMgYm9vbCBzZXRVcE1ldGFkYXRhKExldmVsREJEYXRh
YmFzZSogZGIsIGNvbnN0IFN0cmluZyYgb3JpZ2luKQogICAgICAgICAgICAgICAgIHRyYW5zYWN0
aW9uLT5wdXQoaW50VmVyc2lvbktleSwgZW5jb2RlVmFySW50KElEQkRhdGFiYXNlTWV0YWRhdGE6
OkRlZmF1bHRJbnRWZXJzaW9uKSk7CiAgICAgICAgICAgICAgICAgb2sgPSB0cmFuc2FjdGlvbi0+
Z2V0KGl0LT5rZXkoKSwgdmFsdWUpOwogICAgICAgICAgICAgICAgIGlmICghb2spIHsKLSAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAg
IEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBib29sIG9rID0gdHJhbnNhY3Rpb24tPmNvbW1pdCgpOwogICAgICAg
ICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRl
RXJyb3IpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQpAQCAtMjQwLDYgKzI2MywxNyBAQCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjp+SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZSgpCiAgICAgbV9jb21wYXJhdG9yLmNsZWFyKCk7CiB9CiAKK2Vu
dW0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5SZXN1bHQgeworICAgIElEQkxldmVsREJCYWNr
aW5nU3RvcmVPcGVuTWVtb3J5LAorICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuU3VjY2Vz
cywKKyAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkZhaWxlZERpcmVjdG9yeSwKKyAgICBJ
REJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkZhaWxlZFVua25vd25TY2hlbWEsCisgICAgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZU9wZW5DbGVhbnVwRGVzdHJveUZhaWxlZCwKKyAgICBJREJMZXZlbERC
QmFja2luZ1N0b3JlT3BlbkNsZWFudXBSZW9wZW5GYWlsZWQsCisgICAgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZU9wZW5DbGVhbnVwUmVvcGVuU3VjY2VzcywKKyAgICBJREJMZXZlbERCQmFja2luZ1N0
b3JlT3Blbk1heCwKK307CisKIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpvcGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBwYXRoQmFzZUFyZywgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURCRmFj
dG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5KQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6b3BlbiIpOwpAQCAtMjQ4LDI2ICsyODIsMzMgQEAgUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4oU2VjdXJpdHlPcmlnaW4q
IHNlY3VyaXQKICAgICBPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+IGNvbXBhcmF0b3IgPSBhZG9w
dFB0cihuZXcgQ29tcGFyYXRvcigpKTsKICAgICBPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBkYjsK
IAotICAgIGlmIChwYXRoQmFzZS5pc0VtcHR5KCkpCisgICAgaWYgKHBhdGhCYXNlLmlzRW1wdHko
KSkgeworICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2Vi
Q29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlT3Blbk1lbW9yeSwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwogICAgICAg
ICBkYiA9IExldmVsREJEYXRhYmFzZTo6b3BlbkluTWVtb3J5KGNvbXBhcmF0b3IuZ2V0KCkpOwot
ICAgIGVsc2UgeworICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghbWFrZUFsbERpcmVjdG9yaWVz
KHBhdGhCYXNlKSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY3JlYXRlIElu
ZGV4ZWREQiBkYXRhYmFzZSBwYXRoICVzIiwgcGF0aEJhc2UudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5J
bmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3Jl
T3BlbkZhaWxlZERpcmVjdG9yeSwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwogICAg
ICAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPigpOwogICAgICAgICB9
Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXZlbnR1YWxseSB1c2UgdGhlIHNhbWUgTGV2
ZWxEQiBkYXRhYmFzZSBmb3IgYWxsIG9yaWdpbnMuCisKICAgICAgICAgU3RyaW5nIHBhdGggPSBw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGF0aEJhc2UsIHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFz
ZUlkZW50aWZpZXIoKSArICIuaW5kZXhlZGRiLmxldmVsZGIiKTsKIAogICAgICAgICBkYiA9IExl
dmVsREJEYXRhYmFzZTo6b3BlbihwYXRoLCBjb21wYXJhdG9yLmdldCgpKTsKICAgICAgICAgYm9v
bCBrbm93blNjaGVtYSA9IGlzU2NoZW1hS25vd24oZGIuZ2V0KCkpOwotICAgICAgICBpZiAoIWtu
b3duU2NoZW1hKQorICAgICAgICBpZiAoIWtub3duU2NoZW1hKSB7CiAgICAgICAgICAgICBMT0df
RVJST1IoIkluZGV4ZWREQiBiYWNraW5nIHN0b3JlIGhhZCB1bmtub3duIHNjaGVtYSwgdHJlYXRp
bmcgaXQgYXMgZmFpbHVyZSB0byBvcGVuIik7CisgICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0
OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9w
ZW5TdGF0dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkZhaWxlZFVua25vd25TY2hlbWEs
IElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKKyAgICAgICAgfQogCi0gICAgICAgIGlm
ICghZGIgfHwgIWtub3duU2NoZW1hKSB7CisgICAgICAgIGlmIChkYiAmJiBrbm93blNjaGVtYSkK
KyAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJD
b3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNraW5n
U3RvcmVPcGVuU3VjY2VzcywgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOworICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgIExPR19FUlJPUigiSW5kZXhlZERCIGJhY2tpbmcgc3RvcmUg
b3BlbiBmYWlsZWQsIGF0dGVtcHRpbmcgY2xlYW51cCIpOwogICAgICAgICAgICAgYm9vbCBzdWNj
ZXNzID0gTGV2ZWxEQkRhdGFiYXNlOjpkZXN0cm95KHBhdGgpOwogICAgICAgICAgICAgaWYgKCFz
dWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIgYmFja2luZyBz
dG9yZSBjbGVhbnVwIGZhaWxlZCIpOworICAgICAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6
Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3Bl
blN0YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuQ2xlYW51cERlc3Ryb3lGYWlsZWQs
IElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKICAgICAgICAgICAgICAgICByZXR1cm4g
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7CiAgICAgICAgICAgICB9CiAKQEAgLTI3NSw4
ICszMTYsMTAgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkxldmVsREJCYWNraW5n
U3RvcmU6Om9wZW4oU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXQKICAgICAgICAgICAgIGRiID0gTGV2
ZWxEQkRhdGFiYXNlOjpvcGVuKHBhdGgsIGNvbXBhcmF0b3IuZ2V0KCkpOwogICAgICAgICAgICAg
aWYgKCFkYikgewogICAgICAgICAgICAgICAgIExPR19FUlJPUigiSW5kZXhlZERCIGJhY2tpbmcg
c3RvcmUgcmVvcGVuIGFmdGVyIHJlY292ZXJ5IGZhaWxlZCIpOworICAgICAgICAgICAgICAgIEhp
c3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5C
YWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuQ2xlYW51
cFJlb3BlbkZhaWxlZCwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwogICAgICAgICAg
ICAgICAgIHJldHVybiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4oKTsKICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJX
ZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNr
aW5nU3RvcmVPcGVuQ2xlYW51cFJlb3BlblN1Y2Nlc3MsIElEQkxldmVsREJCYWNraW5nU3RvcmVP
cGVuTWF4KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzI1LDEyICszNjgsMTYgQEAgYm9vbCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSURCRGF0YWIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgb2sgPSBnZXRT
dHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKG1ldGFkYXRhLT5p
ZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24pLCBtZXRhZGF0YS0+dmVyc2lvbik7
Ci0gICAgaWYgKCFvaykKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAKICAgICBvayA9IGdldFZhckludChtX2RiLmdldCgpLCBEYXRhYmFzZU1ldGFEYXRhS2V5
OjplbmNvZGUobWV0YWRhdGEtPmlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VySW50VmVyc2lv
biksIG1ldGFkYXRhLT5pbnRWZXJzaW9uKTsKLSAgICBpZiAoIW9rKQorICAgIGlmICghb2spIHsK
KyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICBpZiAobWV0YWRhdGEtPmludFZlcnNp
b24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVmYXVsdEludFZlcnNpb24pCiAgICAgICAgIG1l
dGFkYXRhLT5pbnRWZXJzaW9uID0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOwog
CkBAIC0zNjEsMTQgKzQwOCwyMCBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0
ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5ID0gRGF0YWJhc2VOYW1l
S2V5OjplbmNvZGUobV9pZGVudGlmaWVyLCBuYW1lKTsKLSAgICBpZiAoIXB1dEludChtX2RiLmdl
dCgpLCBrZXksIHJvd0lkKSkKKyAgICBpZiAoIXB1dEludChtX2RiLmdldCgpLCBrZXksIHJvd0lk
KSkgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVy
cm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghcHV0U3RyaW5nKG1fZGIuZ2V0
KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtl
eTo6VXNlclZlcnNpb24pLCB2ZXJzaW9uKSkKKyAgICB9CisgICAgaWYgKCFwdXRTdHJpbmcobV9k
Yi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFE
YXRhS2V5OjpVc2VyVmVyc2lvbiksIHZlcnNpb24pKSB7CisgICAgICAgIEludGVybmFsRXJyb3Io
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQogICAgIGlmIChpbnRWZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50
VmVyc2lvbikKICAgICAgICAgaW50VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1
bHRJbnRWZXJzaW9uOwotICAgIGlmICghcHV0VmFySW50KG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0
YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlckludFZlcnNp
b24pLCBpbnRWZXJzaW9uKSkKKyAgICBpZiAoIXB1dFZhckludChtX2RiLmdldCgpLCBEYXRhYmFz
ZU1ldGFEYXRhS2V5OjplbmNvZGUocm93SWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJJbnRW
ZXJzaW9uKSwgaW50VmVyc2lvbikpIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERC
QmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM3NywxNiArNDMwLDE5IEBAIGJvb2wgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhCiAgICAgaWYgKGludFZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9J
bnRWZXJzaW9uKQogICAgICAgICBpbnRWZXJzaW9uID0gSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVm
YXVsdEludFZlcnNpb247CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpbnRWZXJzaW9uID49IDAs
ICJpbnRWZXJzaW9uIHdhcyAlbGxkIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihpbnRWZXJzaW9u
KSk7Ci0gICAgaWYgKCFwdXRWYXJJbnQoVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZy
b20odHJhbnNhY3Rpb24pLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUocm93SWQsIERhdGFi
YXNlTWV0YURhdGFLZXk6OlVzZXJJbnRWZXJzaW9uKSwgaW50VmVyc2lvbikpCisgICAgaWYgKCFw
dXRWYXJJbnQoVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24p
LCBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUocm93SWQsIERhdGFiYXNlTWV0YURhdGFLZXk6
OlVzZXJJbnRWZXJzaW9uKSwgaW50VmVyc2lvbikpIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJ
REJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
LQorICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjp1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCiB7
Ci0gICAgaWYgKCFwdXRTdHJpbmcoVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20o
dHJhbnNhY3Rpb24pLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUocm93SWQsIERhdGFiYXNl
TWV0YURhdGFLZXk6OlVzZXJWZXJzaW9uKSwgdmVyc2lvbikpCisgICAgaWYgKCFwdXRTdHJpbmco
VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pLCBEYXRhYmFz
ZU1ldGFEYXRhS2V5OjplbmNvZGUocm93SWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJWZXJz
aW9uKSwgdmVyc2lvbikpIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2lu
Z1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTM5NSw4ICs0NTEsMTAgQEAgc3RhdGljIGJvb2wgZGVsZXRlUmFu
Z2UoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBi
ZWcKIHsKICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5jcmVh
dGVJdGVyYXRvcigpOwogICAgIGZvciAoaXQtPnNlZWsoYmVnaW4pOyBpdC0+aXNWYWxpZCgpICYm
IGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgZW5kKSA8IDA7IGl0LT5uZXh0KCkpIHsKLSAgICAgICAg
aWYgKCF0cmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSkpCisgICAgICAgIGlmICghdHJhbnNh
Y3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpKSB7CisgICAgICAgICAgICBJbnRlcm5hbEVycm9yKElE
QkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpAQCAtNDIxLDcgKzQ3OSw5
IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3Ry
aW5nJiBuYW1lKQogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFzZU5hbWVLZXk6
OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUpOwogICAgIHRyYW5zYWN0aW9uLT5yZW1vdmUoa2V5
KTsKIAotICAgIHJldHVybiB0cmFuc2FjdGlvbi0+Y29tbWl0KCk7CisgICAgaWYgKCF0cmFuc2Fj
dGlvbi0+Y29tbWl0KCkpIHsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBi
b29sIGNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoY29uc3QgTGV2ZWxEQkl0ZXJhdG9y
KiBpdCwgY29uc3QgVmVjdG9yPGNoYXI+JiBzdG9wS2V5LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgbWV0YURhdGFUeXBlKQpAQCAtNDU2LDcgKzUxNiw3IEBAIFZlY3RvcjxJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMo
aW50NjRfdCBkCiAgICAgICAgIHAgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpkZWNvZGUocCwg
bGltaXQsICZtZXRhRGF0YUtleSk7CiAgICAgICAgIEFTU0VSVChwKTsKICAgICAgICAgaWYgKG1l
dGFEYXRhS2V5Lm1ldGFEYXRhVHlwZSgpICE9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Ok5hbWUp
IHsKLSAgICAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsK
KyAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJv
cik7CiAgICAgICAgICAgICAvLyBQb3NzaWJsZSBzdGFsZSBtZXRhZGF0YSwgYnV0IGRvbid0IGZh
aWwgdGhlIGxvYWQuCiAgICAgICAgICAgICBpdC0+bmV4dCgpOwogICAgICAgICAgICAgY29udGlu
dWU7CkBAIC00NjksMzMgKzUyOSwzMyBAQCBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4g
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZAogCiAgICAg
ICAgIGl0LT5uZXh0KCk7CiAgICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRh
VHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0
YUtleTo6S2V5UGF0aCkpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhl
ZCBEQiBlcnJvci4iKTsKKyAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZVJlYWRFcnJvcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBJREJLZXlQYXRoIGtleVBhdGggPSBkZWNvZGVJREJLZXlQYXRoKGl0LT52YWx1ZSgpLmJlZ2lu
KCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKIAogICAgICAgICBpdC0+bmV4dCgpOwogICAgICAgICBp
ZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9i
amVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OkF1dG9JbmNyZW1lbnQpKSB7Ci0g
ICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAg
ICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYm9vbCBhdXRvSW5jcmVtZW50
ID0gZGVjb2RlQm9vbChpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7CiAK
ICAgICAgICAgaXQtPm5leHQoKTsgLy8gSXMgZXZpY2F0YmxlLgogICAgICAgICBpZiAoIWNoZWNr
T2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3Jl
SWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OkV2aWN0YWJsZSkpIHsKLSAgICAgICAgICAgIExP
R19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgICAgIEludGVy
bmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGl0LT5uZXh0KCk7IC8vIExhc3QgdmVyc2lvbi4K
ICAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBz
dG9wS2V5LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpMYXN0VmVyc2lv
bikpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4i
KTsKKyAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRF
cnJvcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGl0LT5uZXh0
KCk7IC8vIE1heGltdW0gaW5kZXggaWQgYWxsb2NhdGVkLgogICAgICAgICBpZiAoIWNoZWNrT2Jq
ZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQs
IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Ok1heEluZGV4SWQpKSB7Ci0gICAgICAgICAgICBMT0df
RVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgICAgICBJbnRlcm5h
bEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgaW50NjRfdCBtYXhJbmRleElkID0gZGVjb2RlSW50KGl0
LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKQEAgLTUwOCw3ICs1NjgsNyBA
QCBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZAogICAgICAgICAgICAgLy8gKDIpIExhdGVyLCBudWxs
IHZzLiBzdHJpbmcgdnMuIGFycmF5IHdhcyBzdG9yZWQgaW4gdGhlIGtleVBhdGggaXRzZWxmLgog
ICAgICAgICAgICAgLy8gU28gdGhpcyBjaGVjayBpcyBvbmx5IHJlbGV2YW50IGZvciBzdHJpbmct
dHlwZSBrZXlQYXRocy4KICAgICAgICAgICAgIGlmICghaGFzS2V5UGF0aCAmJiAoa2V5UGF0aC50
eXBlKCkgPT0gSURCS2V5UGF0aDo6U3RyaW5nVHlwZSAmJiAha2V5UGF0aC5zdHJpbmcoKS5pc0Vt
cHR5KCkpKSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERC
IGVycm9yLiIpOworICAgICAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZVJlYWRFcnJvcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAoIWhhc0tleVBhdGgpCkBAIC01MzYsMTAgKzU5NiwxNCBAQCBzdGF0
aWMgYm9vbCBzZXRNYXhPYmplY3RTdG9yZUlkKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGludDY0X3QgZGF0YWJhcwogICAgIGludDY0X3QgbWF4T2JqZWN0U3RvcmVJZCA9IGdldE1h
eE9iamVjdFN0b3JlSWQodHJhbnNhY3Rpb24sIG1heE9iamVjdFN0b3JlSWRLZXkpOwogCiAgICAg
aWYgKG9iamVjdFN0b3JlSWQgPD0gbWF4T2JqZWN0U3RvcmVJZCkgewotICAgICAgICBMT0dfRVJS
T1IoIlBvc3NpYmxlIGNvcnJ1cHRpb246IG5ldyBvYmplY3Qgc3RvcmUgaWQgaXMgdG9vIHNtYWxs
LiIpOworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVDb25zaXN0
ZW5jeUVycm9yKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXB1dElu
dCh0cmFuc2FjdGlvbiwgbWF4T2JqZWN0U3RvcmVJZEtleSwgb2JqZWN0U3RvcmVJZCkpIHsKKyAg
ICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgcmV0dXJuIHB1dEludCh0cmFuc2FjdGlv
biwgbWF4T2JqZWN0U3RvcmVJZEtleSwgb2JqZWN0U3RvcmVJZCk7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktl
eVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKQEAgLTU2MSw1NSArNjI1LDU1IEBA
IGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhCiAKICAgICBib29sIG9rID0gcHV0U3RyaW5nKGxldmVs
REJUcmFuc2FjdGlvbiwgbmFtZUtleSwgbmFtZSk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBM
T0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIEludGVybmFs
RXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCiAgICAgb2sgPSBwdXRJREJLZXlQYXRoKGxldmVsREJUcmFuc2FjdGlv
biwga2V5UGF0aEtleSwga2V5UGF0aCk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJS
T1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIEludGVybmFsRXJyb3Io
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCiAgICAgb2sgPSBwdXRJbnQobGV2ZWxEQlRyYW5zYWN0aW9uLCBhdXRvSW5jcmVt
ZW50S2V5LCBhdXRvSW5jcmVtZW50KTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIExPR19FUlJP
UigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJ
REJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKICAgICBvayA9IHB1dEludChsZXZlbERCVHJhbnNhY3Rpb24sIGV2aWN0YWJsZUtl
eSwgZmFsc2UpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJ
bmRleGVkIERCIGVycm9yLiIpOworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNr
aW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAg
IG9rID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwgbGFzdFZlcnNpb25LZXksIDEpOwogICAg
IGlmICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9y
LiIpOworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVy
cm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIG9rID0gcHV0SW50KGxl
dmVsREJUcmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwgTWluaW11bUluZGV4SWQpOwogICAgIGlm
ICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIp
OworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9y
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIG9rID0gcHV0Qm9vbChsZXZl
bERCVHJhbnNhY3Rpb24sIGhhc0tleVBhdGhLZXksICFrZXlQYXRoLmlzTnVsbCgpKTsKICAgICBp
ZiAoIW9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4i
KTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJv
cik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBvayA9IHB1dEludChsZXZl
bERCVHJhbnNhY3Rpb24sIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXksIEtleUdlbmVyYXRv
ckluaXRpYWxOdW1iZXIpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRl
cm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVs
REJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAogICAgIG9rID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwgbmFtZXNLZXksIG9iamVjdFN0
b3JlSWQpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRl
eGVkIERCIGVycm9yLiIpOworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5n
U3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNjI0
LDE1ICs2ODgsMjEgQEAgdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RT
dG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmEKICAgICBTdHJpbmcgb2JqZWN0
U3RvcmVOYW1lOwogICAgIGdldFN0cmluZyhsZXZlbERCVHJhbnNhY3Rpb24sIE9iamVjdFN0b3Jl
TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5OjpOYW1lKSwgb2JqZWN0U3RvcmVOYW1lKTsKIAotICAgIGlmICghZGVsZXRl
UmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCksIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVu
Y29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkpCisgICAgaWYgKCFkZWxldGVS
YW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5j
b2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkgeworICAgICAgICBJbnRlcm5h
bEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJu
OyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgorICAgIH0KIAogICAgIGxldmVsREJUcmFuc2FjdGlv
bi0+cmVtb3ZlKE9iamVjdFN0b3JlTmFtZXNLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZU5hbWUpKTsKIAotICAgIGlmICghZGVsZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBJ
bmRleEZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCksIElu
ZGV4RnJlZUxpc3RLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkp
CisgICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIEluZGV4RnJlZUxpc3RL
ZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwgSW5kZXhGcmVlTGlzdEtl
eTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkgeworICAgICAgICBJ
bnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAg
cmV0dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgotICAgIGlmICghZGVsZXRlUmFuZ2UobGV2
ZWxEQlRyYW5zYWN0aW9uLCBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgMCwgMCksIEluZGV4TWV0YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkKSkpCisgICAgfQorICAgIGlmICghZGVsZXRlUmFuZ2UobGV2ZWxE
QlRyYW5zYWN0aW9uLCBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgMCwgMCksIEluZGV4TWV0YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkKSkpIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFj
a2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybjsgLy8gRklYTUU6IFJlcG9ydCBl
cnJvci4KKyAgICB9CiAKICAgICBjbGVhck9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLCBkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkKTsKIH0KQEAgLTY1MCw4ICs3MjAsMTAgQEAgU3RyaW5nIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24KIAogICAgIGludDY0X3QgdmVyc2lvbjsKICAgICBjb25zdCBjaGFyKiBwID0g
ZGVjb2RlVmFySW50KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSwgdmVyc2lvbik7Ci0gICAgaWYg
KCFwKQorICAgIGlmICghcCkgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNr
aW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQogICAg
ICh2b2lkKSB2ZXJzaW9uOwogCiAgICAgcmV0dXJuIGRlY29kZVN0cmluZyhwLCBkYXRhLmVuZCgp
KTsKQEAgLTcwOSwxMiArNzgxLDE2IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0
T2JqZWN0U3RvcmVSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbioKICAgICB2LmFw
cGVuZChlbmNvZGVWYXJJbnQodmVyc2lvbikpOwogICAgIHYuYXBwZW5kKGVuY29kZVN0cmluZyh2
YWx1ZSkpOwogCi0gICAgaWYgKCFsZXZlbERCVHJhbnNhY3Rpb24tPnB1dChvYmplY3RTdG9yZWRh
dGFLZXksIHYpKQorICAgIGlmICghbGV2ZWxEQlRyYW5zYWN0aW9uLT5wdXQob2JqZWN0U3RvcmVk
YXRhS2V5LCB2KSkgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3Rv
cmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBleGlzdHNFbnRyeUtleSA9IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKLSAgICBpZiAoIWxldmVsREJUcmFuc2FjdGlv
bi0+cHV0KGV4aXN0c0VudHJ5S2V5LCBlbmNvZGVJbnQodmVyc2lvbikpKQorICAgIGlmICghbGV2
ZWxEQlRyYW5zYWN0aW9uLT5wdXQoZXhpc3RzRW50cnlLZXksIGVuY29kZUludCh2ZXJzaW9uKSkp
IHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJv
cik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBMZXZlbERCUmVjb3JkSWRl
bnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxMZXZlbERCUmVj
b3JkSWRlbnRpZmllcio+KHJlY29yZElkZW50aWZpZXIpOwogICAgIGxldmVsREJSZWNvcmRJZGVu
dGlmaWVyLT5zZXRQcmltYXJ5S2V5KGVuY29kZUlEQktleShrZXkpKTsKQEAgLTgwNiw3ICs4ODIs
NyBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2VuZXJhdG9y
Q3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcgogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlH
ZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2Rl
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OktleUdl
bmVyYXRvckN1cnJlbnROdW1iZXIpOwogICAgIGJvb2wgb2sgPSBwdXRJbnQobGV2ZWxEQlRyYW5z
YWN0aW9uLCBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5LCBuZXdOdW1iZXIpOwogICAgIGlm
ICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIp
OworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9y
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg1
MCw4ICs5MjYsMTAgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmb3JFYWNoT2JqZWN0
U3RvcmVSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGkKIAogICAgICAgICBpbnQ2NF90
IHZlcnNpb247CiAgICAgICAgIGNvbnN0IGNoYXIqIHEgPSBkZWNvZGVWYXJJbnQoaXQtPnZhbHVl
KCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCksIHZlcnNpb24pOwotICAgICAgICBpZiAoIXEp
CisgICAgICAgIGlmICghcSkgeworICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERC
QmFja2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQogCiAgICAgICAgIFJlZlB0cjxMZXZlbERCUmVjb3JkSWRlbnRpZmllcj4gcmkgPSBMZXZl
bERCUmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKGVuY29kZUlEQktleSgqcHJpbWFyeUtleSksIHZl
cnNpb24pOwogICAgICAgICBTdHJpbmcgaWRiVmFsdWUgPSBkZWNvZGVTdHJpbmcocSwgaXQtPnZh
bHVlKCkuZW5kKCkpOwpAQCAtODk4LDcgKzk3Niw3IEBAIFZlY3RvcjxJREJJbmRleE1ldGFkYXRh
PiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwK
ICAgICAgICAgcCA9IEluZGV4TWV0YURhdGFLZXk6OmRlY29kZShwLCBsaW1pdCwgJm1ldGFEYXRh
S2V5KTsKICAgICAgICAgQVNTRVJUKHApOwogICAgICAgICBpZiAobWV0YURhdGFLZXkubWV0YURh
dGFUeXBlKCkgIT0gSW5kZXhNZXRhRGF0YUtleTo6TmFtZSkgewotICAgICAgICAgICAgTE9HX0VS
Uk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICAgICAgSW50ZXJuYWxF
cnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgICAgIC8vIFBv
c3NpYmxlIHN0YWxlIG1ldGFkYXRhIGR1ZSB0byBodHRwOi8vd2Via2l0Lm9yZy9iLzg1NTU3IGJ1
dCBkb24ndCBmYWlsIHRoZSBsb2FkLgogICAgICAgICAgICAgaXQtPm5leHQoKTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwpAQCAtOTEwLDE0ICs5ODgsMTQgQEAgVmVjdG9yPElEQkluZGV4TWV0YWRh
dGE+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlk
LAogCiAgICAgICAgIGl0LT5uZXh0KCk7IC8vIHVuaXF1ZSBmbGFnCiAgICAgICAgIGlmICghY2hl
Y2tJbmRleEFuZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBzdG9wS2V5LCBpbmRleElkLCBJbmRleE1l
dGFEYXRhS2V5OjpVbmlxdWUpKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIElu
ZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJC
YWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgYm9vbCBpbmRleFVuaXF1ZSA9IGRlY29kZUJvb2woaXQtPnZhbHVlKCkuYmVnaW4oKSwg
aXQtPnZhbHVlKCkuZW5kKCkpOwogCiAgICAgICAgIGl0LT5uZXh0KCk7IC8vIGtleVBhdGgKICAg
ICAgICAgaWYgKCFjaGVja0luZGV4QW5kTWV0YURhdGFLZXkoaXQuZ2V0KCksIHN0b3BLZXksIGlu
ZGV4SWQsIEluZGV4TWV0YURhdGFLZXk6OktleVBhdGgpKSB7Ci0gICAgICAgICAgICBMT0dfRVJS
T1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgICAgICBJbnRlcm5hbEVy
cm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgSURCS2V5UGF0aCBrZXlQYXRoID0gZGVjb2RlSURCS2V5UGF0
aChpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7CkBAIC05NDIsMTEgKzEw
MjAsMTUgQEAgc3RhdGljIGJvb2wgc2V0TWF4SW5kZXhJZChMZXZlbERCVHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGkKICAgICAgICAgbWF4SW5kZXhJZCA9IE1p
bmltdW1JbmRleElkOwogCiAgICAgaWYgKGluZGV4SWQgPD0gbWF4SW5kZXhJZCkgewotICAgICAg
ICBMT0dfRVJST1IoIlBvc3NpYmxlIGNvcnJ1cHRpb246IG5ldyBpbmRleCBpZCBpcyB0b28gc21h
bGwuIik7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUNvbnNp
c3RlbmN5RXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJu
IHB1dEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwgaW5kZXhJZCk7CisgICAgaWYgKCFw
dXRJbnQodHJhbnNhY3Rpb24sIG1heEluZGV4SWRLZXksIGluZGV4SWQpKSB7CisgICAgICAgIElu
dGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIElEQkxldmVs
REJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtl
eVBhdGgsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5KQpAQCAtOTYzLDI1ICsxMDQ1
LDI1IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3RpCiAKICAgICBib29sIG9rID0gcHV0U3RyaW5n
KGxldmVsREJUcmFuc2FjdGlvbiwgbmFtZUtleSwgbmFtZSk7CiAgICAgaWYgKCFvaykgewotICAg
ICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIElu
dGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgb2sgPSBwdXRCb29sKGxldmVsREJUcmFuc2FjdGlv
biwgdW5pcXVlS2V5LCBpc1VuaXF1ZSk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJS
T1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIEludGVybmFsRXJyb3Io
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCiAgICAgb2sgPSBwdXRJREJLZXlQYXRoKGxldmVsREJUcmFuc2FjdGlvbiwga2V5
UGF0aEtleSwga2V5UGF0aCk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1IoIklu
dGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCiAgICAgb2sgPSBwdXRCb29sKGxldmVsREJUcmFuc2FjdGlvbiwgbXVsdGlFbnRyeUtleSwg
aXNNdWx0aUVudHJ5KTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJu
YWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERC
QmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
QEAgLTk5Nyw3ICsxMDc5LDcgQEAgdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJ
bmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGkKICAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gaW5kZXhNZXRhRGF0YUVuZCA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZU1h
eEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKIAogICAgIGlmICghZGVs
ZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBpbmRleE1ldGFEYXRhU3RhcnQsIGluZGV4TWV0
YURhdGFFbmQpKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJv
ci4iKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVF
cnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMDUsNyArMTA4Nyw3IEBAIHZv
aWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiogdHJhbnNhY3RpCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4RGF0YUVu
ZCA9IEluZGV4RGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQpOwogCiAgICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIGlu
ZGV4RGF0YVN0YXJ0LCBpbmRleERhdGFFbmQpKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJu
YWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERC
QmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CkBAIC0x
MDkwLDggKzExNzIsMTAgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5J
bmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2EKIAogICAgICAgICBpbnQ2
NF90IHZlcnNpb247CiAgICAgICAgIGNvbnN0IGNoYXIqIHAgPSBkZWNvZGVWYXJJbnQoaXQtPnZh
bHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCksIHZlcnNpb24pOwotICAgICAgICBpZiAo
IXApCisgICAgICAgIGlmICghcCkgeworICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZl
bERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQogICAgICAgICBmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmFwcGVuZChwLCBpdC0+dmFs
dWUoKS5lbmQoKSAtIHApOwogCiAgICAgICAgIGlmICghdmVyc2lvbkV4aXN0cyhsZXZlbERCVHJh
bnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHZlcnNpb24sIGZvdW5kRW5jb2Rl
ZFByaW1hcnlLZXkpKSB7CkBAIC0xMzY5LDE3ICsxNDUzLDE5IEBAIGJvb2wgT2JqZWN0U3RvcmVL
ZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAKICAgICBPYmplY3RTdG9yZURhdGFLZXkg
b2JqZWN0U3RvcmVEYXRhS2V5OwogICAgIGtleVBvc2l0aW9uID0gT2JqZWN0U3RvcmVEYXRhS2V5
OjpkZWNvZGUoa2V5UG9zaXRpb24sIGtleUxpbWl0LCAmb2JqZWN0U3RvcmVEYXRhS2V5KTsKLSAg
ICBBU1NFUlQoa2V5UG9zaXRpb24pOwotICAgIGlmICgha2V5UG9zaXRpb24pCisgICAgaWYgKCFr
ZXlQb3NpdGlvbikgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3Rv
cmVSZWFkRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgbV9jdXJy
ZW50S2V5ID0gb2JqZWN0U3RvcmVEYXRhS2V5LnVzZXJLZXkoKTsKIAogICAgIGludDY0X3QgdmVy
c2lvbjsKICAgICBjb25zdCBjaGFyKiB2YWx1ZVBvc2l0aW9uID0gZGVjb2RlVmFySW50KG1faXRl
cmF0b3ItPnZhbHVlKCkuYmVnaW4oKSwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgdmVyc2lv
bik7Ci0gICAgQVNTRVJUKHZhbHVlUG9zaXRpb24pOwotICAgIGlmICghdmFsdWVQb3NpdGlvbikK
KyAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZl
bERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
IAogICAgIC8vIEZJWE1FOiBUaGlzIHJlLWVuY29kZXMgd2hhdCB3YXMganVzdCBkZWNvZGVkOyB0
cnkgYW5kIG9wdGltaXplLgogICAgIG1faWRlbnRpZmllciA9IExldmVsREJSZWNvcmRJZGVudGlm
aWVyOjpjcmVhdGUoZW5jb2RlSURCS2V5KCptX2N1cnJlbnRLZXkpLCB2ZXJzaW9uKTsKQEAgLTE0
MzAsMTcgKzE1MTYsMTkgQEAgYm9vbCBPYmplY3RTdG9yZUN1cnNvckltcGw6OmxvYWRDdXJyZW50
Um93KCkKIAogICAgIE9iamVjdFN0b3JlRGF0YUtleSBvYmplY3RTdG9yZURhdGFLZXk7CiAgICAg
a2V5UG9zaXRpb24gPSBPYmplY3RTdG9yZURhdGFLZXk6OmRlY29kZShrZXlQb3NpdGlvbiwga2V5
TGltaXQsICZvYmplY3RTdG9yZURhdGFLZXkpOwotICAgIEFTU0VSVChrZXlQb3NpdGlvbik7Ci0g
ICAgaWYgKCFrZXlQb3NpdGlvbikKKyAgICBpZiAoIWtleVBvc2l0aW9uKSB7CisgICAgICAgIElu
dGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBtX2N1cnJlbnRLZXkgPSBvYmplY3RTdG9yZURhdGFL
ZXkudXNlcktleSgpOwogCiAgICAgaW50NjRfdCB2ZXJzaW9uOwogICAgIGNvbnN0IGNoYXIqIHZh
bHVlUG9zaXRpb24gPSBkZWNvZGVWYXJJbnQobV9pdGVyYXRvci0+dmFsdWUoKS5iZWdpbigpLCBt
X2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpLCB2ZXJzaW9uKTsKLSAgICBBU1NFUlQodmFsdWVQb3Np
dGlvbik7Ci0gICAgaWYgKCF2YWx1ZVBvc2l0aW9uKQorICAgIGlmICghdmFsdWVQb3NpdGlvbikg
eworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3Ip
OwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgLy8gRklYTUU6IFRoaXMgcmUt
ZW5jb2RlcyB3aGF0IHdhcyBqdXN0IGRlY29kZWQ7IHRyeSBhbmQgb3B0aW1pemUuCiAgICAgbV9p
ZGVudGlmaWVyID0gTGV2ZWxEQlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZShlbmNvZGVJREJLZXko
Km1fY3VycmVudEtleSksIHZlcnNpb24pOwpAQCAtMTQ5NSwxNCArMTU4MywxNiBAQCBib29sIElu
ZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogCiAgICAgaW50NjRfdCBpbmRleERh
dGFWZXJzaW9uOwogICAgIGNvbnN0IGNoYXIqIHZhbHVlUG9zaXRpb24gPSBkZWNvZGVWYXJJbnQo
bV9pdGVyYXRvci0+dmFsdWUoKS5iZWdpbigpLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpLCBp
bmRleERhdGFWZXJzaW9uKTsKLSAgICBBU1NFUlQodmFsdWVQb3NpdGlvbik7Ci0gICAgaWYgKCF2
YWx1ZVBvc2l0aW9uKQorICAgIGlmICghdmFsdWVQb3NpdGlvbikgeworICAgICAgICBJbnRlcm5h
bEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQogCiAgICAgdmFsdWVQb3NpdGlvbiA9IGRlY29kZUlEQktleSh2YWx1ZVBv
c2l0aW9uLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpLCBtX3ByaW1hcnlLZXkpOwotICAgIEFT
U0VSVCh2YWx1ZVBvc2l0aW9uKTsKLSAgICBpZiAoIXZhbHVlUG9zaXRpb24pCisgICAgaWYgKCF2
YWx1ZVBvc2l0aW9uKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZVJlYWRFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBWZWN0
b3I8Y2hhcj4gcHJpbWFyeUxldmVsREJLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShp
bmRleERhdGFLZXkuZGF0YWJhc2VJZCgpLCBpbmRleERhdGFLZXkub2JqZWN0U3RvcmVJZCgpLCAq
bV9wcmltYXJ5S2V5KTsKIApAQCAtMTUxNCw5ICsxNjA0LDEwIEBAIGJvb2wgSW5kZXhLZXlDdXJz
b3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAKICAgICBpbnQ2NF90IG9iamVjdFN0b3JlRGF0YVZl
cnNpb247CiAgICAgY29uc3QgY2hhciogdCA9IGRlY29kZVZhckludChyZXN1bHQuYmVnaW4oKSwg
cmVzdWx0LmVuZCgpLCBvYmplY3RTdG9yZURhdGFWZXJzaW9uKTsKLSAgICBBU1NFUlQodCk7Ci0g
ICAgaWYgKCF0KQorICAgIGlmICghdCkgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVs
REJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQog
CiAgICAgaWYgKG9iamVjdFN0b3JlRGF0YVZlcnNpb24gIT0gaW5kZXhEYXRhVmVyc2lvbikgewog
ICAgICAgICBtX3RyYW5zYWN0aW9uLT5yZW1vdmUobV9pdGVyYXRvci0+a2V5KCkpOwpAQCAtMTU3
OCwxMyArMTY2OSwxNSBAQCBib29sIEluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQog
CiAgICAgaW50NjRfdCBpbmRleERhdGFWZXJzaW9uOwogICAgIHZhbHVlUG9zaXRpb24gPSBkZWNv
ZGVWYXJJbnQodmFsdWVQb3NpdGlvbiwgdmFsdWVMaW1pdCwgaW5kZXhEYXRhVmVyc2lvbik7Ci0g
ICAgQVNTRVJUKHZhbHVlUG9zaXRpb24pOwotICAgIGlmICghdmFsdWVQb3NpdGlvbikKKyAgICBp
ZiAoIXZhbHVlUG9zaXRpb24pIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFj
a2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICB2
YWx1ZVBvc2l0aW9uID0gZGVjb2RlSURCS2V5KHZhbHVlUG9zaXRpb24sIHZhbHVlTGltaXQsIG1f
cHJpbWFyeUtleSk7Ci0gICAgQVNTRVJUKHZhbHVlUG9zaXRpb24pOwotICAgIGlmICghdmFsdWVQ
b3NpdGlvbikKKyAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsKKyAgICAgICAgSW50ZXJuYWxFcnJv
cihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KIAogICAgIG1fcHJpbWFyeUxldmVsREJLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6
OmVuY29kZShpbmRleERhdGFLZXkuZGF0YWJhc2VJZCgpLCBpbmRleERhdGFLZXkub2JqZWN0U3Rv
cmVJZCgpLCAqbV9wcmltYXJ5S2V5KTsKIApAQCAtMTU5Niw5ICsxNjg5LDEwIEBAIGJvb2wgSW5k
ZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAKICAgICBpbnQ2NF90IG9iamVjdFN0b3Jl
RGF0YVZlcnNpb247CiAgICAgY29uc3QgY2hhciogdCA9IGRlY29kZVZhckludChyZXN1bHQuYmVn
aW4oKSwgcmVzdWx0LmVuZCgpLCBvYmplY3RTdG9yZURhdGFWZXJzaW9uKTsKLSAgICBBU1NFUlQo
dCk7Ci0gICAgaWYgKCF0KQorICAgIGlmICghdCkgeworICAgICAgICBJbnRlcm5hbEVycm9yKElE
QkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQogCiAgICAgaWYgKG9iamVjdFN0b3JlRGF0YVZlcnNpb24gIT0gaW5kZXhEYXRhVmVyc2lv
bikgewogICAgICAgICBtX3RyYW5zYWN0aW9uLT5yZW1vdmUobV9pdGVyYXRvci0+a2V5KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170755</attachid>
            <date>2012-10-25 15:55:01 -0700</date>
            <delta_ts>2012-10-25 21:06:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98465-20121025155334.patch</filename>
            <type>text/plain</type>
            <size>31477</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyNDg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzdlOTI2ODc5YzNhYjVh
ZTdlZjUyYzE2NTZkNTBlOWVkZjgwMzcyMC4uMzk3OWY0YWZkZDA3YmQzM2ExZWVmZjQyNjY3ZTFm
ODAxMzdhZWY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTEwLTI1ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBBZGQg
aGlzdG9ncmFtIHN0YXRpc3RpY3MgZm9yIGJhY2tpbmcgc3RvcmUgZXJyb3JzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODQ2NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAgRGVmaW5lIGEgbWFjcm8gZm9yIGNvbnNp
c3RlbnQgYXNzZXJ0aW5nIChkdXJpbmcgZGV2ZWxvcG1lbnQpLCBsb2dnaW5nLCBhbmQgcmVjb3Jk
aW5nCisgICAgICAgIGludGVybmFsIGJhY2tpbmcgc3RvcmUgZXJyb3JzIHZpYSBoaXN0b2dyYW1z
LiBEZWZpbmUgc3BlY2lmaWMgaGlzdG9ncmFtIHZhbHVlcyB0bworICAgICAgICB0cmFjayBpc3N1
ZXMgd2l0aCBvcGVuaW5nIGJhY2tpbmcgc3RvcmVzIHRvIGdhdGhlciBzdGF0cyBvbiBjb3JydXB0
aW9uLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtIGp1c3QgdGhlIHN0YXRzLCBtYSdhbSwganVz
dCB0aGUgc3RhdHMuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
VXBNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpv
cGVuKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldElEQkRh
dGFiYXNlTWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZl
bERCQmFja2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNvcmQpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlH
ZW5lcmF0b3JDdXJyZW50TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmZvckVhY2hPYmplY3RTdG9yZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkxldmVsREJCYWNraW5nU3RvcmU6OmZpbmRLZXlJbkluZGV4KToKKwogMjAxMi0xMC0yNSAgWXVy
eSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNZW1vcnkgaW5z
dHJ1bWVudGF0aW9uOiBhZGQgcmVwb3J0TWVtb3J5VXNhZ2UgdG8gSW1hZ2VPYnNlcnZlciBpbnRl
cmZhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxl
dmVsREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggMzYzYzg2MDgwMWEyZjU3MzRkYzVjOTI3
NTc2MzNlZGQ4MTg4NjJjYi4uMzVmNWZmYjE5MmUwZjcyNzAzYjJiNjUzNGMyM2QzODM3YjI0MGYx
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIkhp
c3RvZ3JhbVN1cHBvcnQuaCIKICNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEltcGwuaCIKICNp
bmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlICJJREJLZXlQYXRoLmgiCkBAIC01MSw2ICs1Miwy
NiBAQCB1c2luZyBuYW1lc3BhY2UgSURCTGV2ZWxEQkNvZGluZzsKIAogY29uc3QgaW50NjRfdCBL
ZXlHZW5lcmF0b3JJbml0aWFsTnVtYmVyID0gMTsgLy8gRnJvbSB0aGUgSW5kZXhlZERCIHNwZWNp
ZmljYXRpb24uCiAKK2VudW0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JUeXBl
IHsKKyAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yLAorICAgIElEQkxldmVsREJC
YWNraW5nU3RvcmVXcml0ZUVycm9yLAorICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVDb25zaXN0
ZW5jeUVycm9yLAorICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVJbnRlcm5hbEVycm9yTWF4LAor
fTsKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWNvcmRJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNr
aW5nU3RvcmVJbnRlcm5hbEVycm9yVHlwZSB0eXBlKQoreworICAgIEhpc3RvZ3JhbVN1cHBvcnQ6
Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuSW50
ZXJuYWxFcnJvciIsIHR5cGUsIElEQkxldmVsREJCYWNraW5nU3RvcmVJbnRlcm5hbEVycm9yTWF4
KTsKK30KKworLy8gVXNlIHRvIHNpZ25hbCBjb25kaXRpb25zIHRoYXQgdXN1YWxseSBpbmRpY2F0
ZSBkZXZlbG9wZXIgZXJyb3IsIGJ1dCBjb3VsZCBiZSBjYXVzZWQgYnkgZGF0YSBjb3JydXB0aW9u
LgorLy8gQSBtYWNybyBpcyB1c2VkIGluc3RlYWQgb2YgYW4gaW5saW5lIGZ1bmN0aW9uIHNvIHRo
YXQgdGhlIGFzc2VydCBhbmQgbG9nIHJlcG9ydCB0aGUgbGluZSBudW1iZXIuCisjZGVmaW5lIElu
dGVybmFsRXJyb3IodHlwZSkgXAorICAgIGRvIHsgXAorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgXAorICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWREQiBFcnJvcjogJXMi
LCAjdHlwZSk7IFwKKyAgICAgICAgcmVjb3JkSW50ZXJuYWxFcnJvcih0eXBlKTsgXAorICAgIH0g
d2hpbGUgKDApCisKIHRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+CiBzdGF0aWMg
Ym9vbCBnZXRCb29sKERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5
LCBib29sJiBmb3VuZEJvb2wpCiB7CkBAIC0xNjQsOCArMTg1LDEwIEBAIHN0YXRpYyBib29sIHNl
dFVwTWV0YWRhdGEoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgU3RyaW5nJiBvcmlnaW4pCiAg
ICAgaW50NjRfdCBzY2hlbWFWZXJzaW9uID0gMDsKICAgICBpZiAoIWdldEludChkYiwgbWV0YURh
dGFLZXksIHNjaGVtYVZlcnNpb24pKSB7CiAgICAgICAgIHNjaGVtYVZlcnNpb24gPSBsYXRlc3RT
Y2hlbWFWZXJzaW9uOwotICAgICAgICBpZiAoIXB1dEludChkYiwgbWV0YURhdGFLZXksIGxhdGVz
dFNjaGVtYVZlcnNpb24pKQorICAgICAgICBpZiAoIXB1dEludChkYiwgbWV0YURhdGFLZXksIGxh
dGVzdFNjaGVtYVZlcnNpb24pKSB7CisgICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVs
REJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChzY2hlbWFWZXJzaW9uIDw9IGxh
dGVzdFNjaGVtYVZlcnNpb24pOwogICAgICAgICBpZiAoIXNjaGVtYVZlcnNpb24pIHsKQEAgLTE4
MCw3ICsyMDMsNyBAQCBzdGF0aWMgYm9vbCBzZXRVcE1ldGFkYXRhKExldmVsREJEYXRhYmFzZSog
ZGIsIGNvbnN0IFN0cmluZyYgb3JpZ2luKQogICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiB2
YWx1ZTsKICAgICAgICAgICAgICAgICBib29sIG9rID0gdHJhbnNhY3Rpb24tPmdldChpdC0+a2V5
KCksIHZhbHVlKTsKICAgICAgICAgICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbEVy
cm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGludCBk
YXRhYmFzZUlkID0gZGVjb2RlSW50KHZhbHVlLmJlZ2luKCksIHZhbHVlLmVuZCgpKTsKQEAgLTE4
OCwxMyArMjExLDEzIEBAIHN0YXRpYyBib29sIHNldFVwTWV0YWRhdGEoTGV2ZWxEQkRhdGFiYXNl
KiBkYiwgY29uc3QgU3RyaW5nJiBvcmlnaW4pCiAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24t
PnB1dChpbnRWZXJzaW9uS2V5LCBlbmNvZGVWYXJJbnQoSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVm
YXVsdEludFZlcnNpb24pKTsKICAgICAgICAgICAgICAgICBvayA9IHRyYW5zYWN0aW9uLT5nZXQo
aXQtPmtleSgpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFvaykgewotICAgICAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgSW50
ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGJvb2wgb2sgPSB0cmFuc2FjdGlvbi0+Y29tbWl0KCk7CiAgICAgICAgICAg
ICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJv
cik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC0yNDAsNiArMjYzLDE3IEBAIElEQkxldmVsREJCYWNraW5nU3RvcmU6On5JREJMZXZl
bERCQmFja2luZ1N0b3JlKCkKICAgICBtX2NvbXBhcmF0b3IuY2xlYXIoKTsKIH0KIAorZW51bSBJ
REJMZXZlbERCQmFja2luZ1N0b3JlT3BlblJlc3VsdCB7CisgICAgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZU9wZW5NZW1vcnksCisgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5TdWNjZXNzLAor
ICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuRmFpbGVkRGlyZWN0b3J5LAorICAgIElEQkxl
dmVsREJCYWNraW5nU3RvcmVPcGVuRmFpbGVkVW5rbm93blNjaGVtYSwKKyAgICBJREJMZXZlbERC
QmFja2luZ1N0b3JlT3BlbkNsZWFudXBEZXN0cm95RmFpbGVkLAorICAgIElEQkxldmVsREJCYWNr
aW5nU3RvcmVPcGVuQ2xlYW51cFJlb3BlbkZhaWxlZCwKKyAgICBJREJMZXZlbERCQmFja2luZ1N0
b3JlT3BlbkNsZWFudXBSZW9wZW5TdWNjZXNzLAorICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVP
cGVuTWF4LAorfTsKKwogUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkxldmVsREJCYWNr
aW5nU3RvcmU6Om9wZW4oU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJp
bmcmIHBhdGhCYXNlQXJnLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJGYWN0b3J5
QmFja2VuZEltcGwqIGZhY3RvcnkpCiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpvcGVuIik7CkBAIC0yNDgsMjYgKzI4MiwzMyBAQCBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbihTZWN1cml0eU9yaWdpbiogc2Vj
dXJpdAogICAgIE93blB0cjxMZXZlbERCQ29tcGFyYXRvcj4gY29tcGFyYXRvciA9IGFkb3B0UHRy
KG5ldyBDb21wYXJhdG9yKCkpOwogICAgIE93blB0cjxMZXZlbERCRGF0YWJhc2U+IGRiOwogCi0g
ICAgaWYgKHBhdGhCYXNlLmlzRW1wdHkoKSkKKyAgICBpZiAocGF0aEJhc2UuaXNFbXB0eSgpKSB7
CisgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3Jl
LkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3Rv
cmVPcGVuTWVtb3J5LCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7CiAgICAgICAgIGRi
ID0gTGV2ZWxEQkRhdGFiYXNlOjpvcGVuSW5NZW1vcnkoY29tcGFyYXRvci5nZXQoKSk7Ci0gICAg
ZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFtYWtlQWxsRGlyZWN0b3JpZXMocGF0
aEJhc2UpKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBjcmVhdGUgSW5kZXhl
ZERCIGRhdGFiYXNlIHBhdGggJXMiLCBwYXRoQmFzZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4
ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVu
RmFpbGVkRGlyZWN0b3J5LCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7CiAgICAgICAg
ICAgICByZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7CiAgICAgICAgIH0KLSAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBldmVudHVhbGx5IHVzZSB0aGUgc2FtZSBMZXZlbERC
IGRhdGFiYXNlIGZvciBhbGwgb3JpZ2lucy4KKwogICAgICAgICBTdHJpbmcgcGF0aCA9IHBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChwYXRoQmFzZSwgc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRl
bnRpZmllcigpICsgIi5pbmRleGVkZGIubGV2ZWxkYiIpOwogCiAgICAgICAgIGRiID0gTGV2ZWxE
QkRhdGFiYXNlOjpvcGVuKHBhdGgsIGNvbXBhcmF0b3IuZ2V0KCkpOwogICAgICAgICBib29sIGtu
b3duU2NoZW1hID0gaXNTY2hlbWFLbm93bihkYi5nZXQoKSk7Ci0gICAgICAgIGlmICgha25vd25T
Y2hlbWEpCisgICAgICAgIGlmICgha25vd25TY2hlbWEpIHsKICAgICAgICAgICAgIExPR19FUlJP
UigiSW5kZXhlZERCIGJhY2tpbmcgc3RvcmUgaGFkIHVua25vd24gc2NoZW1hLCB0cmVhdGluZyBp
dCBhcyBmYWlsdXJlIHRvIG9wZW4iKTsKKyAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhp
c3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0
YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuRmFpbGVkVW5rbm93blNjaGVtYSwgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOworICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFk
YiB8fCAha25vd25TY2hlbWEpIHsKKyAgICAgICAgaWYgKGRiICYmIGtub3duU2NoZW1hKQorICAg
ICAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUu
SW5kZXhlZERCLkJhY2tpbmdTdG9yZS5PcGVuU3RhdHVzIiwgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZU9wZW5TdWNjZXNzLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7CisgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIgYmFja2luZyBzdG9yZSBvcGVu
IGZhaWxlZCwgYXR0ZW1wdGluZyBjbGVhbnVwIik7CiAgICAgICAgICAgICBib29sIHN1Y2Nlc3Mg
PSBMZXZlbERCRGF0YWJhc2U6OmRlc3Ryb3kocGF0aCk7CiAgICAgICAgICAgICBpZiAoIXN1Y2Nl
c3MpIHsKICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBiYWNraW5nIHN0b3Jl
IGNsZWFudXAgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlz
dG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5PcGVuU3Rh
dHVzIiwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5DbGVhbnVwRGVzdHJveUZhaWxlZCwgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwogICAgICAgICAgICAgICAgIHJldHVybiBQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4oKTsKICAgICAgICAgICAgIH0KIApAQCAtMjc1LDggKzMx
NiwxMCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6b3BlbihTZWN1cml0eU9yaWdpbiogc2VjdXJpdAogICAgICAgICAgICAgZGIgPSBMZXZlbERC
RGF0YWJhc2U6Om9wZW4ocGF0aCwgY29tcGFyYXRvci5nZXQoKSk7CiAgICAgICAgICAgICBpZiAo
IWRiKSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIgYmFja2luZyBzdG9y
ZSByZW9wZW4gYWZ0ZXIgcmVjb3ZlcnkgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgSGlzdG9n
cmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tp
bmdTdG9yZS5PcGVuU3RhdHVzIiwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5DbGVhbnVwUmVv
cGVuRmFpbGVkLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPigpOwogICAgICAgICAgICAgfQor
ICAgICAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNv
cmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5PcGVuU3RhdHVzIiwgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZU9wZW5DbGVhbnVwUmVvcGVuU3VjY2VzcywgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5N
YXgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMjUsMTIgKzM2OCwxNiBAQCBib29sIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBu
YW1lLCBJREJEYXRhYgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBvayA9IGdldFN0cmlu
ZyhtX2RiLmdldCgpLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUobWV0YWRhdGEtPmlkLCBE
YXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VyVmVyc2lvbiksIG1ldGFkYXRhLT52ZXJzaW9uKTsKLSAg
ICBpZiAoIW9rKQorICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZl
bERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
IAogICAgIG9rID0gZ2V0VmFySW50KG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVu
Y29kZShtZXRhZGF0YS0+aWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJJbnRWZXJzaW9uKSwg
bWV0YWRhdGEtPmludFZlcnNpb24pOwotICAgIGlmICghb2spCisgICAgaWYgKCFvaykgeworICAg
ICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIGlmIChtZXRhZGF0YS0+aW50VmVyc2lvbiA9
PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0SW50VmVyc2lvbikKICAgICAgICAgbWV0YWRh
dGEtPmludFZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb247CiAKQEAg
LTM2MSwxNCArNDA4LDIwIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSURC
RGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0CiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFzZU5hbWVLZXk6
OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUpOwotICAgIGlmICghcHV0SW50KG1fZGIuZ2V0KCks
IGtleSwgcm93SWQpKQorICAgIGlmICghcHV0SW50KG1fZGIuZ2V0KCksIGtleSwgcm93SWQpKSB7
CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3Ip
OwogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFwdXRTdHJpbmcobV9kYi5nZXQoKSwg
RGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpV
c2VyVmVyc2lvbiksIHZlcnNpb24pKQorICAgIH0KKyAgICBpZiAoIXB1dFN0cmluZyhtX2RiLmdl
dCgpLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUocm93SWQsIERhdGFiYXNlTWV0YURhdGFL
ZXk6OlVzZXJWZXJzaW9uKSwgdmVyc2lvbikpIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJM
ZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAgICAgaWYgKGludFZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJz
aW9uKQogICAgICAgICBpbnRWZXJzaW9uID0gSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVmYXVsdElu
dFZlcnNpb247Ci0gICAgaWYgKCFwdXRWYXJJbnQobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0
YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VySW50VmVyc2lvbiks
IGludFZlcnNpb24pKQorICAgIGlmICghcHV0VmFySW50KG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0
YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlckludFZlcnNp
b24pLCBpbnRWZXJzaW9uKSkgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNr
aW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzc3LDE2ICs0MzAsMTkgQEAgYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oSURCQmFja2luZ1N0b3JlOjpU
cmFuc2EKICAgICBpZiAoaW50VmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZl
cnNpb24pCiAgICAgICAgIGludFZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0
SW50VmVyc2lvbjsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGludFZlcnNpb24gPj0gMCwgImlu
dFZlcnNpb24gd2FzICVsbGQiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGludFZlcnNpb24pKTsK
LSAgICBpZiAoIXB1dFZhckludChUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0
cmFuc2FjdGlvbiksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VN
ZXRhRGF0YUtleTo6VXNlckludFZlcnNpb24pLCBpbnRWZXJzaW9uKSkKKyAgICBpZiAoIXB1dFZh
ckludChUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbiksIERh
dGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNl
ckludFZlcnNpb24pLCBpbnRWZXJzaW9uKSkgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxl
dmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisg
ICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKIHsKLSAg
ICBpZiAoIXB1dFN0cmluZyhUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFu
c2FjdGlvbiksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRh
RGF0YUtleTo6VXNlclZlcnNpb24pLCB2ZXJzaW9uKSkKKyAgICBpZiAoIXB1dFN0cmluZyhUcmFu
c2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbiksIERhdGFiYXNlTWV0
YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24p
LCB2ZXJzaW9uKSkgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3Rv
cmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIHJldHVy
biB0cnVlOwogfQpAQCAtMzk1LDggKzQ1MSwxMCBAQCBzdGF0aWMgYm9vbCBkZWxldGVSYW5nZShM
ZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJlZwog
ewogICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gdHJhbnNhY3Rpb24tPmNyZWF0ZUl0
ZXJhdG9yKCk7CiAgICAgZm9yIChpdC0+c2VlayhiZWdpbik7IGl0LT5pc1ZhbGlkKCkgJiYgY29t
cGFyZUtleXMoaXQtPmtleSgpLCBlbmQpIDwgMDsgaXQtPm5leHQoKSkgewotICAgICAgICBpZiAo
IXRyYW5zYWN0aW9uLT5yZW1vdmUoaXQtPmtleSgpKSkKKyAgICAgICAgaWYgKCF0cmFuc2FjdGlv
bi0+cmVtb3ZlKGl0LT5rZXkoKSkpIHsKKyAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC00NTYsNyArNTE0LDcgQEAg
VmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Omdl
dE9iamVjdFN0b3JlcyhpbnQ2NF90IGQKICAgICAgICAgcCA9IE9iamVjdFN0b3JlTWV0YURhdGFL
ZXk6OmRlY29kZShwLCBsaW1pdCwgJm1ldGFEYXRhS2V5KTsKICAgICAgICAgQVNTRVJUKHApOwog
ICAgICAgICBpZiAobWV0YURhdGFLZXkubWV0YURhdGFUeXBlKCkgIT0gT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6TmFtZSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVk
IERCIGVycm9yLiIpOworICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2lu
Z1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgICAgIC8vIFBvc3NpYmxlIHN0YWxlIG1ldGFkYXRh
LCBidXQgZG9uJ3QgZmFpbCB0aGUgbG9hZC4KICAgICAgICAgICAgIGl0LT5uZXh0KCk7CiAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTQ2OSwzMyArNTI3LDMzIEBAIFZlY3RvcjxJREJPYmplY3RT
dG9yZU1ldGFkYXRhPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMoaW50
NjRfdCBkCiAKICAgICAgICAgaXQtPm5leHQoKTsKICAgICAgICAgaWYgKCFjaGVja09iamVjdFN0
b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCBPYmpl
Y3RTdG9yZU1ldGFEYXRhS2V5OjpLZXlQYXRoKSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJJ
bnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJ
REJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIElEQktleVBhdGgga2V5UGF0aCA9IGRlY29kZUlEQktleVBhdGgoaXQt
PnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOwogCiAgICAgICAgIGl0LT5uZXh0
KCk7CiAgICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQo
KSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6QXV0b0lu
Y3JlbWVudCkpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBl
cnJvci4iKTsKKyAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZVJlYWRFcnJvcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBib29s
IGF1dG9JbmNyZW1lbnQgPSBkZWNvZGVCb29sKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1
ZSgpLmVuZCgpKTsKIAogICAgICAgICBpdC0+bmV4dCgpOyAvLyBJcyBldmljYXRibGUuCiAgICAg
ICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3RvcEtl
eSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6RXZpY3RhYmxlKSkgewot
ICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAg
ICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgaXQtPm5leHQoKTsgLy8g
TGFzdCB2ZXJzaW9uLgogICAgICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5
cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFL
ZXk6Okxhc3RWZXJzaW9uKSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRl
eGVkIERCIGVycm9yLiIpOworICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFj
a2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAg
ICAgICAgaXQtPm5leHQoKTsgLy8gTWF4aW11bSBpbmRleCBpZCBhbGxvY2F0ZWQuCiAgICAgICAg
IGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwg
b2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TWF4SW5kZXhJZCkpIHsKLSAg
ICAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAg
ICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpbnQ2NF90IG1heEluZGV4SWQg
PSBkZWNvZGVJbnQoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOwpAQCAt
NTA4LDcgKzU2Niw3IEBAIFZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkCiAgICAgICAgICAgICAvLyAo
MikgTGF0ZXIsIG51bGwgdnMuIHN0cmluZyB2cy4gYXJyYXkgd2FzIHN0b3JlZCBpbiB0aGUga2V5
UGF0aCBpdHNlbGYuCiAgICAgICAgICAgICAvLyBTbyB0aGlzIGNoZWNrIGlzIG9ubHkgcmVsZXZh
bnQgZm9yIHN0cmluZy10eXBlIGtleVBhdGhzLgogICAgICAgICAgICAgaWYgKCFoYXNLZXlQYXRo
ICYmIChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpTdHJpbmdUeXBlICYmICFrZXlQYXRo
LnN0cmluZygpLmlzRW1wdHkoKSkpIHsKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkludGVy
bmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJ
REJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghaGFzS2V5UGF0aCkKQEAgLTUzNiwxMCAr
NTk0LDE0IEBAIHN0YXRpYyBib29sIHNldE1heE9iamVjdFN0b3JlSWQoTGV2ZWxEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzCiAgICAgaW50NjRfdCBtYXhPYmplY3RT
dG9yZUlkID0gZ2V0TWF4T2JqZWN0U3RvcmVJZCh0cmFuc2FjdGlvbiwgbWF4T2JqZWN0U3RvcmVJ
ZEtleSk7CiAKICAgICBpZiAob2JqZWN0U3RvcmVJZCA8PSBtYXhPYmplY3RTdG9yZUlkKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiUG9zc2libGUgY29ycnVwdGlvbjogbmV3IG9iamVjdCBzdG9yZSBp
ZCBpcyB0b28gc21hbGwuIik7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZUNvbnNpc3RlbmN5RXJyb3IpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIGlmICghcHV0SW50KHRyYW5zYWN0aW9uLCBtYXhPYmplY3RTdG9yZUlkS2V5LCBvYmplY3RT
dG9yZUlkKSkgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVX
cml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICByZXR1cm4gcHV0
SW50KHRyYW5zYWN0aW9uLCBtYXhPYmplY3RTdG9yZUlkS2V5LCBvYmplY3RTdG9yZUlkKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVP
YmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQpAQCAtNTYx
LDU1ICs2MjMsNTUgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RT
dG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmEKIAogICAgIGJvb2wgb2sgPSBw
dXRTdHJpbmcobGV2ZWxEQlRyYW5zYWN0aW9uLCBuYW1lS2V5LCBuYW1lKTsKICAgICBpZiAoIW9r
KSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAg
ICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBvayA9IHB1dElEQktleVBhdGgobGV2
ZWxEQlRyYW5zYWN0aW9uLCBrZXlQYXRoS2V5LCBrZXlQYXRoKTsKICAgICBpZiAoIW9rKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAg
SW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBvayA9IHB1dEludChsZXZlbERCVHJhbnNhY3Rp
b24sIGF1dG9JbmNyZW1lbnRLZXksIGF1dG9JbmNyZW1lbnQpOwogICAgIGlmICghb2spIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICBJ
bnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIG9rID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlv
biwgZXZpY3RhYmxlS2V5LCBmYWxzZSk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJS
T1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIEludGVybmFsRXJyb3Io
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCiAgICAgb2sgPSBwdXRJbnQobGV2ZWxEQlRyYW5zYWN0aW9uLCBsYXN0VmVyc2lv
bktleSwgMSk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIElu
ZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAg
b2sgPSBwdXRJbnQobGV2ZWxEQlRyYW5zYWN0aW9uLCBtYXhJbmRleElkS2V5LCBNaW5pbXVtSW5k
ZXhJZCk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4
ZWQgREIgZXJyb3IuIik7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgb2sg
PSBwdXRCb29sKGxldmVsREJUcmFuc2FjdGlvbiwgaGFzS2V5UGF0aEtleSwgIWtleVBhdGguaXNO
dWxsKCkpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRl
eGVkIERCIGVycm9yLiIpOworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5n
U3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIG9r
ID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktl
eSwgS2V5R2VuZXJhdG9ySW5pdGlhbE51bWJlcik7CiAgICAgaWYgKCFvaykgewotICAgICAgICBM
T0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIEludGVybmFs
RXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCiAgICAgb2sgPSBwdXRJbnQobGV2ZWxEQlRyYW5zYWN0aW9uLCBuYW1l
c0tleSwgb2JqZWN0U3RvcmVJZCk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1Io
IkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAgIEludGVybmFsRXJyb3IoSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCkBAIC02MjQsMTUgKzY4NiwyMSBAQCB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmRlbGV0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYQogICAg
IFN0cmluZyBvYmplY3RTdG9yZU5hbWU7CiAgICAgZ2V0U3RyaW5nKGxldmVsREJUcmFuc2FjdGlv
biwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Ok5hbWUpLCBvYmplY3RTdG9yZU5hbWUpOwogCi0g
ICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIE9iamVjdFN0b3JlTWV0YURh
dGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwgT2JqZWN0U3RvcmVN
ZXRhRGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkKKyAg
ICBpZiAoIWRlbGV0ZVJhbmdlKGxldmVsREJUcmFuc2FjdGlvbiwgT2JqZWN0U3RvcmVNZXRhRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBPYmplY3RTdG9yZU1l
dGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpKSB7Cisg
ICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwog
ICAgICAgICByZXR1cm47IC8vIEZJWE1FOiBSZXBvcnQgZXJyb3IuCisgICAgfQogCiAgICAgbGV2
ZWxEQlRyYW5zYWN0aW9uLT5yZW1vdmUoT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlTmFtZSkpOwogCi0gICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERC
VHJhbnNhY3Rpb24sIEluZGV4RnJlZUxpc3RLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCAwKSwgSW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQpKSkKKyAgICBpZiAoIWRlbGV0ZVJhbmdlKGxldmVsREJUcmFuc2FjdGlvbiwg
SW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBJ
bmRleEZyZWVMaXN0S2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkp
KSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJy
b3IpOwogICAgICAgICByZXR1cm47IC8vIEZJWE1FOiBSZXBvcnQgZXJyb3IuCi0gICAgaWYgKCFk
ZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwLCAwKSwgSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2Rl
TWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkKKyAgICB9CisgICAgaWYgKCFkZWxl
dGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwLCAwKSwgSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlTWF4
S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkgeworICAgICAgICBJbnRlcm5hbEVycm9y
KElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuOyAvLyBG
SVhNRTogUmVwb3J0IGVycm9yLgorICAgIH0KIAogICAgIGNsZWFyT2JqZWN0U3RvcmUodHJhbnNh
Y3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOwogfQpAQCAtNjUwLDggKzcxOCwxMCBA
QCBTdHJpbmcgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVSZWNvcmQoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbgogCiAgICAgaW50NjRfdCB2ZXJzaW9uOwogICAgIGNv
bnN0IGNoYXIqIHAgPSBkZWNvZGVWYXJJbnQoZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpLCB2ZXJz
aW9uKTsKLSAgICBpZiAoIXApCisgICAgaWYgKCFwKSB7CisgICAgICAgIEludGVybmFsRXJyb3Io
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICB9CiAgICAgKHZvaWQpIHZlcnNpb247CiAKICAgICByZXR1cm4gZGVjb2RlU3RyaW5n
KHAsIGRhdGEuZW5kKCkpOwpAQCAtNzA5LDEyICs3NzksMTYgQEAgYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpwdXRPYmplY3RTdG9yZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKgogICAgIHYuYXBwZW5kKGVuY29kZVZhckludCh2ZXJzaW9uKSk7CiAgICAgdi5hcHBlbmQo
ZW5jb2RlU3RyaW5nKHZhbHVlKSk7CiAKLSAgICBpZiAoIWxldmVsREJUcmFuc2FjdGlvbi0+cHV0
KG9iamVjdFN0b3JlZGF0YUtleSwgdikpCisgICAgaWYgKCFsZXZlbERCVHJhbnNhY3Rpb24tPnB1
dChvYmplY3RTdG9yZWRhdGFLZXksIHYpKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGV4aXN0c0VudHJ5S2V5ID0gRXhpc3RzRW50cnlL
ZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwotICAgIGlmICghbGV2
ZWxEQlRyYW5zYWN0aW9uLT5wdXQoZXhpc3RzRW50cnlLZXksIGVuY29kZUludCh2ZXJzaW9uKSkp
CisgICAgaWYgKCFsZXZlbERCVHJhbnNhY3Rpb24tPnB1dChleGlzdHNFbnRyeUtleSwgZW5jb2Rl
SW50KHZlcnNpb24pKSkgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5n
U3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIExl
dmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmllciA9IHN0YXRpY19j
YXN0PExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRpZmllcik7CiAgICAgbGV2
ZWxEQlJlY29yZElkZW50aWZpZXItPnNldFByaW1hcnlLZXkoZW5jb2RlSURCS2V5KGtleSkpOwpA
QCAtODA2LDcgKzg4MCw3IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRh
dGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yCiAgICAgY29uc3QgVmVj
dG9yPGNoYXI+IGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXkgPSBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik7CiAgICAgYm9vbCBvayA9IHB1dElu
dChsZXZlbERCVHJhbnNhY3Rpb24sIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXksIG5ld051
bWJlcik7CiAgICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4
ZWQgREIgZXJyb3IuIik7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVy
biB0cnVlOwpAQCAtODUwLDggKzkyNCwxMCBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmZvckVhY2hPYmplY3RTdG9yZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aQogCiAg
ICAgICAgIGludDY0X3QgdmVyc2lvbjsKICAgICAgICAgY29uc3QgY2hhciogcSA9IGRlY29kZVZh
ckludChpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSwgdmVyc2lvbik7Ci0g
ICAgICAgIGlmICghcSkKKyAgICAgICAgaWYgKCFxKSB7CisgICAgICAgICAgICBJbnRlcm5hbEVy
cm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CiAKICAgICAgICAgUmVmUHRyPExldmVsREJSZWNvcmRJZGVudGlm
aWVyPiByaSA9IExldmVsREJSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoZW5jb2RlSURCS2V5KCpw
cmltYXJ5S2V5KSwgdmVyc2lvbik7CiAgICAgICAgIFN0cmluZyBpZGJWYWx1ZSA9IGRlY29kZVN0
cmluZyhxLCBpdC0+dmFsdWUoKS5lbmQoKSk7CkBAIC04OTgsNyArOTc0LDcgQEAgVmVjdG9yPElE
QkluZGV4TWV0YWRhdGE+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMoaW50NjRf
dCBkYXRhYmFzZUlkLAogICAgICAgICBwID0gSW5kZXhNZXRhRGF0YUtleTo6ZGVjb2RlKHAsIGxp
bWl0LCAmbWV0YURhdGFLZXkpOwogICAgICAgICBBU1NFUlQocCk7CiAgICAgICAgIGlmIChtZXRh
RGF0YUtleS5tZXRhRGF0YVR5cGUoKSAhPSBJbmRleE1ldGFEYXRhS2V5OjpOYW1lKSB7Ci0gICAg
ICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CisgICAgICAg
ICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAg
ICAgICAgICAgLy8gUG9zc2libGUgc3RhbGUgbWV0YWRhdGEgZHVlIHRvIGh0dHA6Ly93ZWJraXQu
b3JnL2IvODU1NTcgYnV0IGRvbid0IGZhaWwgdGhlIGxvYWQuCiAgICAgICAgICAgICBpdC0+bmV4
dCgpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC05MTAsMTQgKzk4NiwxNCBAQCBWZWN0b3I8
SURCSW5kZXhNZXRhZGF0YT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyhpbnQ2
NF90IGRhdGFiYXNlSWQsCiAKICAgICAgICAgaXQtPm5leHQoKTsgLy8gdW5pcXVlIGZsYWcKICAg
ICAgICAgaWYgKCFjaGVja0luZGV4QW5kTWV0YURhdGFLZXkoaXQuZ2V0KCksIHN0b3BLZXksIGlu
ZGV4SWQsIEluZGV4TWV0YURhdGFLZXk6OlVuaXF1ZSkpIHsKLSAgICAgICAgICAgIExPR19FUlJP
UigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgICAgIEludGVybmFsRXJy
b3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBib29sIGluZGV4VW5pcXVlID0gZGVjb2RlQm9vbChpdC0+dmFs
dWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7CiAKICAgICAgICAgaXQtPm5leHQoKTsg
Ly8ga2V5UGF0aAogICAgICAgICBpZiAoIWNoZWNrSW5kZXhBbmRNZXRhRGF0YUtleShpdC5nZXQo
KSwgc3RvcEtleSwgaW5kZXhJZCwgSW5kZXhNZXRhRGF0YUtleTo6S2V5UGF0aCkpIHsKLSAgICAg
ICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAg
ICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBJREJLZXlQYXRoIGtleVBhdGggPSBk
ZWNvZGVJREJLZXlQYXRoKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsK
QEAgLTk0MiwxMSArMTAxOCwxNSBAQCBzdGF0aWMgYm9vbCBzZXRNYXhJbmRleElkKExldmVsREJU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaQogICAgICAgICBt
YXhJbmRleElkID0gTWluaW11bUluZGV4SWQ7CiAKICAgICBpZiAoaW5kZXhJZCA8PSBtYXhJbmRl
eElkKSB7Ci0gICAgICAgIExPR19FUlJPUigiUG9zc2libGUgY29ycnVwdGlvbjogbmV3IGluZGV4
IGlkIGlzIHRvbyBzbWFsbC4iKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFj
a2luZ1N0b3JlQ29uc2lzdGVuY3lFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICByZXR1cm4gcHV0SW50KHRyYW5zYWN0aW9uLCBtYXhJbmRleElkS2V5LCBpbmRleElk
KTsKKyAgICBpZiAoIXB1dEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwgaW5kZXhJZCkp
IHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJv
cik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAK
IGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
SURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnkpCkBA
IC05NjMsMjUgKzEwNDMsMjUgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJ
bmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGkKIAogICAgIGJvb2wg
b2sgPSBwdXRTdHJpbmcobGV2ZWxEQlRyYW5zYWN0aW9uLCBuYW1lS2V5LCBuYW1lKTsKICAgICBp
ZiAoIW9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4i
KTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJv
cik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBvayA9IHB1dEJvb2wobGV2
ZWxEQlRyYW5zYWN0aW9uLCB1bmlxdWVLZXksIGlzVW5pcXVlKTsKICAgICBpZiAoIW9rKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAg
SW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBvayA9IHB1dElEQktleVBhdGgobGV2ZWxEQlRy
YW5zYWN0aW9uLCBrZXlQYXRoS2V5LCBrZXlQYXRoKTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAg
IExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKKyAgICAgICAgSW50ZXJu
YWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKICAgICBvayA9IHB1dEJvb2wobGV2ZWxEQlRyYW5zYWN0aW9uLCBt
dWx0aUVudHJ5S2V5LCBpc011bHRpRW50cnkpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICBJbnRlcm5hbEVy
cm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIApAQCAtOTk3LDcgKzEwNzcsNyBAQCB2b2lkIElEQkxldmVsREJCYWNraW5n
U3RvcmU6OmRlbGV0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0
aQogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBpbmRleE1ldGFEYXRhRW5kID0gSW5kZXhNZXRhRGF0
YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOwog
CiAgICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIGluZGV4TWV0YURhdGFT
dGFydCwgaW5kZXhNZXRhRGF0YUVuZCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJ
bmRleGVkIERCIGVycm9yLiIpOworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNr
aW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTAwNSw3
ICsxMDg1LDcgQEAgdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGkKICAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gaW5kZXhEYXRhRW5kID0gSW5kZXhEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7CiAKICAgICBpZiAoIWRlbGV0ZVJhbmdlKGxldmVsREJU
cmFuc2FjdGlvbiwgaW5kZXhEYXRhU3RhcnQsIGluZGV4RGF0YUVuZCkpIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOworICAgICAgICBJbnRlcm5hbEVy
cm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIH0KQEAgLTEwOTAsOCArMTE3MCwxMCBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmZpbmRLZXlJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYQog
CiAgICAgICAgIGludDY0X3QgdmVyc2lvbjsKICAgICAgICAgY29uc3QgY2hhciogcCA9IGRlY29k
ZVZhckludChpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSwgdmVyc2lvbik7
Ci0gICAgICAgIGlmICghcCkKKyAgICAgICAgaWYgKCFwKSB7CisgICAgICAgICAgICBJbnRlcm5h
bEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgICAgIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuYXBw
ZW5kKHAsIGl0LT52YWx1ZSgpLmVuZCgpIC0gcCk7CiAKICAgICAgICAgaWYgKCF2ZXJzaW9uRXhp
c3RzKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgdmVyc2lv
biwgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkpIHsKQEAgLTEzNjksMTcgKzE0NTEsMTkgQEAgYm9v
bCBPYmplY3RTdG9yZUtleUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKIAogICAgIE9iamVj
dFN0b3JlRGF0YUtleSBvYmplY3RTdG9yZURhdGFLZXk7CiAgICAga2V5UG9zaXRpb24gPSBPYmpl
Y3RTdG9yZURhdGFLZXk6OmRlY29kZShrZXlQb3NpdGlvbiwga2V5TGltaXQsICZvYmplY3RTdG9y
ZURhdGFLZXkpOwotICAgIEFTU0VSVChrZXlQb3NpdGlvbik7Ci0gICAgaWYgKCFrZXlQb3NpdGlv
bikKKyAgICBpZiAoIWtleVBvc2l0aW9uKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CiAKICAgICBtX2N1cnJlbnRLZXkgPSBvYmplY3RTdG9yZURhdGFLZXkudXNlcktleSgpOwogCiAg
ICAgaW50NjRfdCB2ZXJzaW9uOwogICAgIGNvbnN0IGNoYXIqIHZhbHVlUG9zaXRpb24gPSBkZWNv
ZGVWYXJJbnQobV9pdGVyYXRvci0+dmFsdWUoKS5iZWdpbigpLCBtX2l0ZXJhdG9yLT52YWx1ZSgp
LmVuZCgpLCB2ZXJzaW9uKTsKLSAgICBBU1NFUlQodmFsdWVQb3NpdGlvbik7Ci0gICAgaWYgKCF2
YWx1ZVBvc2l0aW9uKQorICAgIGlmICghdmFsdWVQb3NpdGlvbikgeworICAgICAgICBJbnRlcm5h
bEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQogCiAgICAgLy8gRklYTUU6IFRoaXMgcmUtZW5jb2RlcyB3aGF0IHdhcyBq
dXN0IGRlY29kZWQ7IHRyeSBhbmQgb3B0aW1pemUuCiAgICAgbV9pZGVudGlmaWVyID0gTGV2ZWxE
QlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZShlbmNvZGVJREJLZXkoKm1fY3VycmVudEtleSksIHZl
cnNpb24pOwpAQCAtMTQzMCwxNyArMTUxNCwxOSBAQCBib29sIE9iamVjdFN0b3JlQ3Vyc29ySW1w
bDo6bG9hZEN1cnJlbnRSb3coKQogCiAgICAgT2JqZWN0U3RvcmVEYXRhS2V5IG9iamVjdFN0b3Jl
RGF0YUtleTsKICAgICBrZXlQb3NpdGlvbiA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZGVjb2RlKGtl
eVBvc2l0aW9uLCBrZXlMaW1pdCwgJm9iamVjdFN0b3JlRGF0YUtleSk7Ci0gICAgQVNTRVJUKGtl
eVBvc2l0aW9uKTsKLSAgICBpZiAoIWtleVBvc2l0aW9uKQorICAgIGlmICgha2V5UG9zaXRpb24p
IHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9y
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIG1fY3VycmVudEtleSA9IG9i
amVjdFN0b3JlRGF0YUtleS51c2VyS2V5KCk7CiAKICAgICBpbnQ2NF90IHZlcnNpb247CiAgICAg
Y29uc3QgY2hhciogdmFsdWVQb3NpdGlvbiA9IGRlY29kZVZhckludChtX2l0ZXJhdG9yLT52YWx1
ZSgpLmJlZ2luKCksIG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCksIHZlcnNpb24pOwotICAgIEFT
U0VSVCh2YWx1ZVBvc2l0aW9uKTsKLSAgICBpZiAoIXZhbHVlUG9zaXRpb24pCisgICAgaWYgKCF2
YWx1ZVBvc2l0aW9uKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZVJlYWRFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICAvLyBG
SVhNRTogVGhpcyByZS1lbmNvZGVzIHdoYXQgd2FzIGp1c3QgZGVjb2RlZDsgdHJ5IGFuZCBvcHRp
bWl6ZS4KICAgICBtX2lkZW50aWZpZXIgPSBMZXZlbERCUmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRl
KGVuY29kZUlEQktleSgqbV9jdXJyZW50S2V5KSwgdmVyc2lvbik7CkBAIC0xNDk1LDE0ICsxNTgx
LDE2IEBAIGJvb2wgSW5kZXhLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAKICAgICBp
bnQ2NF90IGluZGV4RGF0YVZlcnNpb247CiAgICAgY29uc3QgY2hhciogdmFsdWVQb3NpdGlvbiA9
IGRlY29kZVZhckludChtX2l0ZXJhdG9yLT52YWx1ZSgpLmJlZ2luKCksIG1faXRlcmF0b3ItPnZh
bHVlKCkuZW5kKCksIGluZGV4RGF0YVZlcnNpb24pOwotICAgIEFTU0VSVCh2YWx1ZVBvc2l0aW9u
KTsKLSAgICBpZiAoIXZhbHVlUG9zaXRpb24pCisgICAgaWYgKCF2YWx1ZVBvc2l0aW9uKSB7Cisg
ICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICB2YWx1ZVBvc2l0aW9uID0gZGVjb2Rl
SURCS2V5KHZhbHVlUG9zaXRpb24sIG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCksIG1fcHJpbWFy
eUtleSk7Ci0gICAgQVNTRVJUKHZhbHVlUG9zaXRpb24pOwotICAgIGlmICghdmFsdWVQb3NpdGlv
bikKKyAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJM
ZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KIAogICAgIFZlY3RvcjxjaGFyPiBwcmltYXJ5TGV2ZWxEQktleSA9IE9iamVjdFN0b3JlRGF0
YUtleTo6ZW5jb2RlKGluZGV4RGF0YUtleS5kYXRhYmFzZUlkKCksIGluZGV4RGF0YUtleS5vYmpl
Y3RTdG9yZUlkKCksICptX3ByaW1hcnlLZXkpOwogCkBAIC0xNTE0LDkgKzE2MDIsMTAgQEAgYm9v
bCBJbmRleEtleUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKIAogICAgIGludDY0X3Qgb2Jq
ZWN0U3RvcmVEYXRhVmVyc2lvbjsKICAgICBjb25zdCBjaGFyKiB0ID0gZGVjb2RlVmFySW50KHJl
c3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIG9iamVjdFN0b3JlRGF0YVZlcnNpb24pOwotICAg
IEFTU0VSVCh0KTsKLSAgICBpZiAoIXQpCisgICAgaWYgKCF0KSB7CisgICAgICAgIEludGVybmFs
RXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CiAKICAgICBpZiAob2JqZWN0U3RvcmVEYXRhVmVyc2lvbiAhPSBpbmRleERh
dGFWZXJzaW9uKSB7CiAgICAgICAgIG1fdHJhbnNhY3Rpb24tPnJlbW92ZShtX2l0ZXJhdG9yLT5r
ZXkoKSk7CkBAIC0xNTc4LDEzICsxNjY3LDE1IEBAIGJvb2wgSW5kZXhDdXJzb3JJbXBsOjpsb2Fk
Q3VycmVudFJvdygpCiAKICAgICBpbnQ2NF90IGluZGV4RGF0YVZlcnNpb247CiAgICAgdmFsdWVQ
b3NpdGlvbiA9IGRlY29kZVZhckludCh2YWx1ZVBvc2l0aW9uLCB2YWx1ZUxpbWl0LCBpbmRleERh
dGFWZXJzaW9uKTsKLSAgICBBU1NFUlQodmFsdWVQb3NpdGlvbik7Ci0gICAgaWYgKCF2YWx1ZVBv
c2l0aW9uKQorICAgIGlmICghdmFsdWVQb3NpdGlvbikgeworICAgICAgICBJbnRlcm5hbEVycm9y
KElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQogICAgIHZhbHVlUG9zaXRpb24gPSBkZWNvZGVJREJLZXkodmFsdWVQb3NpdGlvbiwg
dmFsdWVMaW1pdCwgbV9wcmltYXJ5S2V5KTsKLSAgICBBU1NFUlQodmFsdWVQb3NpdGlvbik7Ci0g
ICAgaWYgKCF2YWx1ZVBvc2l0aW9uKQorICAgIGlmICghdmFsdWVQb3NpdGlvbikgeworICAgICAg
ICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgbV9wcmltYXJ5TGV2ZWxEQktleSA9IE9iamVj
dFN0b3JlRGF0YUtleTo6ZW5jb2RlKGluZGV4RGF0YUtleS5kYXRhYmFzZUlkKCksIGluZGV4RGF0
YUtleS5vYmplY3RTdG9yZUlkKCksICptX3ByaW1hcnlLZXkpOwogCkBAIC0xNTk2LDkgKzE2ODcs
MTAgQEAgYm9vbCBJbmRleEN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKIAogICAgIGludDY0
X3Qgb2JqZWN0U3RvcmVEYXRhVmVyc2lvbjsKICAgICBjb25zdCBjaGFyKiB0ID0gZGVjb2RlVmFy
SW50KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIG9iamVjdFN0b3JlRGF0YVZlcnNpb24p
OwotICAgIEFTU0VSVCh0KTsKLSAgICBpZiAoIXQpCisgICAgaWYgKCF0KSB7CisgICAgICAgIElu
dGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBpZiAob2JqZWN0U3RvcmVEYXRhVmVyc2lvbiAhPSBp
bmRleERhdGFWZXJzaW9uKSB7CiAgICAgICAgIG1fdHJhbnNhY3Rpb24tPnJlbW92ZShtX2l0ZXJh
dG9yLT5rZXkoKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>