<?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>105449</bug_id>
          
          <creation_ts>2012-12-19 10:55:47 -0800</creation_ts>
          <short_desc>IndexedDB: Cursor and IndexWriter cleanup for refactor</short_desc>
          <delta_ts>2012-12-20 13:21:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="Alec Flett">alecflett</reporter>
          <assigned_to name="Alec Flett">alecflett</assigned_to>
          <cc>dgrogan</cc>
    
    <cc>jsbell</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>794807</commentid>
    <comment_count>0</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-12-19 10:55:47 -0800</bug_when>
    <thetext>IndexedDB: Cursor and IndexKey cleanup for refactor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794809</commentid>
    <comment_count>1</comment_count>
      <attachid>180197</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-12-19 10:57:56 -0800</bug_when>
    <thetext>Created attachment 180197
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794810</commentid>
    <comment_count>2</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-12-19 10:58:38 -0800</bug_when>
    <thetext>jsbell - a pretty easy one for future refactor work...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794850</commentid>
    <comment_count>3</comment_count>
      <attachid>180203</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-12-19 12:08:31 -0800</bug_when>
    <thetext>Created attachment 180203
Patch

A few more tweaks... still ready for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794902</commentid>
    <comment_count>4</comment_count>
      <attachid>180203</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-12-19 13:46:15 -0800</bug_when>
    <thetext>Comment on attachment 180203
Patch

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

lgtm with nits

&gt; Source/WebCore/ChangeLog:8
&gt; +        This is a cleanup of some code to make the refactor that is coming in

Should mention that IndexWriter is exposed in the header file now since it&apos;s usage will move out of IDBObjectStoreBackendImpl soon.

&gt; Source/WebCore/ChangeLog:9
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=102741 cleaner. Some assertions

Just assertions about cursor type, right?

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:405
&gt;                  keys.append(primaryKey);

Indentation here looks wrong now, but this might be the diff.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:409
&gt; +        bool backingStoreSuccess = indexWriter-&gt;verifyIndexKeys(*backingStore,

Don&apos;t need to wrap here.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.h:104
&gt; +        bool verifyIndexKeys(IDBBackingStore&amp;, IDBBackingStore::Transaction*, int64_t databaseId, int64_t objectStoreId, int64_t indexId, bool&amp; canAddKeys, const IDBKey* primaryKey = 0, String* errorMessage = 0) WARN_UNUSED_RETURN;

Can this method be const?

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.h:109
&gt; +

Can delete this blank line.

&gt; Source/WebCore/Modules/indexeddb/IDBRequest.cpp:-188
&gt; -    ASSERT(m_cursorType == IDBCursorBackendInterface::InvalidCursorType);

I believe this could be replaced by ASSERT(!m_pendingCursor); - the creator of this IDBRequest should be calling this to &quot;stamp&quot; the request with the cursor details shortly after creation, therefore there should neither be a result cursor (which the m_readyState assertion handles) nor a pending cursor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794903</commentid>
    <comment_count>5</comment_count>
      <attachid>180203</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-12-19 13:47:04 -0800</bug_when>
    <thetext>Comment on attachment 180203
Patch

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

&gt; Source/WebCore/Modules/indexeddb/IDBRequest.cpp:-291
&gt; -    ASSERT(m_cursorType != IDBCursorBackendInterface::InvalidCursorType);

Ditto for this ASSERT. (Ugh, my review comments keep getting dropped.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794972</commentid>
    <comment_count>6</comment_count>
      <attachid>180203</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-12-19 14:54:32 -0800</bug_when>
    <thetext>Comment on attachment 180203
Patch

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

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.h:104
&gt;&gt; +        bool verifyIndexKeys(IDBBackingStore&amp;, IDBBackingStore::Transaction*, int64_t databaseId, int64_t objectStoreId, int64_t indexId, bool&amp; canAddKeys, const IDBKey* primaryKey = 0, String* errorMessage = 0) WARN_UNUSED_RETURN;
&gt; 
&gt; Can this method be const?

unfortunately no - because it triggers the code that may cleanup stale index entries in the backing store.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794973</commentid>
    <comment_count>7</comment_count>
      <attachid>180230</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-12-19 14:54:47 -0800</bug_when>
    <thetext>Created attachment 180230
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794975</commentid>
    <comment_count>8</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-12-19 14:55:05 -0800</bug_when>
    <thetext>tony@ - r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795017</commentid>
    <comment_count>9</comment_count>
      <attachid>180241</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-12-19 16:14:01 -0800</bug_when>
    <thetext>Created attachment 180241
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795058</commentid>
    <comment_count>10</comment_count>
      <attachid>180241</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-12-19 17:17:33 -0800</bug_when>
    <thetext>Comment on attachment 180241
Patch

Can we use an enum with 2 values instead of a bool for keyOnly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795105</commentid>
    <comment_count>11</comment_count>
      <attachid>180241</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-19 19:21:01 -0800</bug_when>
    <thetext>Comment on attachment 180241
Patch

Attachment 180241 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15405839

New failing tests:
fast/frames/sandboxed-iframe-attribute-parsing.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795634</commentid>
    <comment_count>12</comment_count>
      <attachid>180383</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-12-20 12:00:47 -0800</bug_when>
    <thetext>Created attachment 180383
Patch

now with enums</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795635</commentid>
    <comment_count>13</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-12-20 12:01:13 -0800</bug_when>
    <thetext>tony@- comments addressed. r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795670</commentid>
    <comment_count>14</comment_count>
      <attachid>180383</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-12-20 12:31:58 -0800</bug_when>
    <thetext>Comment on attachment 180383
Patch

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795725</commentid>
    <comment_count>15</comment_count>
      <attachid>180383</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-20 13:21:31 -0800</bug_when>
    <thetext>Comment on attachment 180383
Patch

Clearing flags on attachment: 180383

Committed r138290: &lt;http://trac.webkit.org/changeset/138290&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795726</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-20 13:21:34 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180197</attachid>
            <date>2012-12-19 10:57:56 -0800</date>
            <delta_ts>2012-12-19 12:08:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105449-20121219105512.patch</filename>
            <type>text/plain</type>
            <size>22943</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjg3ZjA0MTIzMTBkZmY2
NmYwOGI2NjMwYjRiZmQ3Mjc4YTYyYTljYy4uMDM4YTc3Zjc2MjliMjg5MDdmNmY4ZTAzZDYwYjU5
ZGQwZGVhYTUxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTEyLTE5ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IEN1
cnNvciBhbmQgSW5kZXhLZXkgY2xlYW51cCBmb3IgcmVmYWN0b3IKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTQ0OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBjbGVhbnVwIG9mIHNvbWUg
Y29kZSB0byBtYWtlIHRoZSByZWZhY3RvciB0aGF0IGlzIGNvbWluZyBpbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyNzQxIGNsZWFuZXIuIFNvbWUg
YXNzZXJ0aW9ucworICAgICAgICBoYXZlIGJlZW4gcmVtb3ZlZCBiZWNhdXNlIHRoZSBjb2RlIHdp
bGwgYmUgdXNlZCBpbiBtb3JlIGdlbmVyaWMKKyAgICAgICAgY2lyY3Vtc3RhbmNlcyBpbiBhIGZ1
dHVyZSBwYXRjaC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhpcyBkb2VzIG5vdCBjaGFu
Z2UgdGhlIGxvZ2ljIG9mIGV4ZWN1dGluZyBjb2RlLgorCisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vy
c29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6
cGVyZm9ybSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZElt
cGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OnZhbHVlKToKKyAgICAgICAg
KElEQkN1cnNvckJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZElt
cGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkluZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbjo6T3BlbkluZGV4
Q3Vyc29yT3BlcmF0aW9uKToKKyAgICAgICAgKElEQkluZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRl
eEN1cnNvck9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBs
OjpPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6OnZlcmlmeUluZGV4S2V5
cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRleFdy
aXRlcjo6d3JpdGVJbmRleEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6OmFkZGluZ0tleUFsbG93ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6bWFrZUluZGV4V3JpdGVycyk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOgorICAg
ICAgICAoSW5kZXhXcml0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6SW5kZXhXcml0ZXI6OkluZGV4V3JpdGVyKToKKyAgICAgICAgKElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6SURCUmVxdWVzdCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRDdXJzb3JEZXRhaWxzKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlJlcXVlc3Q6OnNldFJlc3VsdEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpvblN1Y2Nlc3MpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVl
c3QuaDoKKyAgICAgICAgKElEQlJlcXVlc3QpOgorCiAyMDEyLTEyLTE5ICBUb21teSBXaWRlbmZs
eWNodCAgPHRvbW15d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0pTQ10gQWRkIHN1cHBvcnQg
Zm9yIG92ZXJsb2FkZWQgY29uc3RydWN0b3JzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKaW5kZXggMmM0NmIx
ZDVlZTljZjJlOGQ0ODYxNzk3ZTA4YzA1MzVkYmMyMmNlOC4uMzA3NDMzZmQyYmZkZDExNWU3ZWVj
MGM0MWEzZTAwMWRlODZmZjA5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcApAQCAtMTAxLDEwICsxMDEs
MTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKIH07
CiAKLUlEQkN1cnNvckJhY2tlbmRJbXBsOjpJREJDdXJzb3JCYWNrZW5kSW1wbChQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIEN1cnNvclR5cGUgY3Vyc29yVHlwZSwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24sIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwqIG9iamVjdFN0b3JlKQorSURCQ3Vyc29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tlbmRJ
bXBsKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgYm9vbCBrZXlP
bmx5LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbCogb2JqZWN0U3RvcmUpCiAgICAgOiBtX2N1cnNvcihjdXJzb3IpCiAgICAgLCBtX3Rh
c2tUeXBlKHRhc2tUeXBlKQotICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCisgICAgLCBt
X2tleU9ubHkoa2V5T25seSkKICAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiAgICAg
LCBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQogICAgICwgbV9jbG9zZWQoZmFsc2UpCkBAIC0y
MDgsMTQgKzIwOCwxNCBAQCB2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JQcmVmZXRj
aEl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdAogICAgICAgICBmb3VuZEtl
eXMuYXBwZW5kKG1fY3Vyc29yLT5tX2N1cnNvci0+a2V5KCkpOwogICAgICAgICBmb3VuZFByaW1h
cnlLZXlzLmFwcGVuZChtX2N1cnNvci0+bV9jdXJzb3ItPnByaW1hcnlLZXkoKSk7CiAKLSAgICAg
ICAgaWYgKG1fY3Vyc29yLT5tX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZTo6SW5kZXhLZXlDdXJzb3IpCisgICAgICAgIGlmICghbV9jdXJzb3ItPm1fa2V5T25seSkKICAg
ICAgICAgICAgIGZvdW5kVmFsdWVzLmFwcGVuZChTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZUZyb21XaXJlQnl0ZXMobV9jdXJzb3ItPm1fY3Vyc29yLT52YWx1ZSgpKSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGZvdW5kVmFsdWVzLmFwcGVuZChTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmNyZWF0ZSgpKTsKIAogICAgICAgICBzaXplRXN0aW1hdGUgKz0gbV9jdXJzb3ItPm1fY3Vyc29y
LT5rZXkoKS0+c2l6ZUVzdGltYXRlKCk7CiAgICAgICAgIHNpemVFc3RpbWF0ZSArPSBtX2N1cnNv
ci0+bV9jdXJzb3ItPnByaW1hcnlLZXkoKS0+c2l6ZUVzdGltYXRlKCk7Ci0gICAgICAgIGlmICht
X2N1cnNvci0+bV9jdXJzb3JUeXBlICE9IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4
S2V5Q3Vyc29yKQorICAgICAgICBpZiAoIW1fY3Vyc29yLT5tX2tleU9ubHkpCiAgICAgICAgICAg
ICBzaXplRXN0aW1hdGUgKz0gbV9jdXJzb3ItPm1fY3Vyc29yLT52YWx1ZSgpLnNpemUoKTsKIAog
ICAgICAgICBpZiAoc2l6ZUVzdGltYXRlID4gbWF4U2l6ZUVzdGltYXRlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgK
aW5kZXggODdhYzE3OGY0ZTZiNjBmNjMyZWJmN2QzM2NmYmRjOGUxNzcwOTdjNC4uNDkzYjZkZTQ3
MDRkM2Y4Y2Q4YjhkZjJmNDhkNzg2NDk1ZGE5OTU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCkBAIC00Nywx
MyArNDcsMTMgQEAgY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKIAogY2xhc3MgSURC
Q3Vyc29yQmFja2VuZEltcGwgOiBwdWJsaWMgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGNyZWF0
ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIEN1cnNvclR5cGUg
Y3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24sIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwqIG9iamVjdFN0b3JlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PElEQkN1cnNvckJhY2tlbmRJbXBsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6
OkN1cnNvcj4gY3Vyc29yLCBib29sIGtleU9ubHksIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
IHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFja2VuZEltcGwoY3Vy
c29yLCBjdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRh
c2ssIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IElEQkN1cnNvckJhY2tlbmRJbXBsKGN1cnNvciwga2V5T25seSwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlOjpOb3JtYWxUYXNrLCB0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUpKTsK
ICAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGNyZWF0
ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIEN1cnNvclR5cGUg
Y3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNr
VHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24sIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwqIG9iamVjdFN0b3JlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkN1
cnNvckJhY2tlbmRJbXBsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4gY3Vyc29yLCBib29sIGtleU9ubHksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6
VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9u
LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFja2VuZEltcGwoY3Vyc29yLCBjdXJzb3JU
eXBlLCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFja2VuZEltcGwoY3Vyc29yLCBrZXlPbmx5LCB0YXNr
VHlwZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlKSk7CiAgICAgfQogICAgIHZpcnR1YWwgfklE
QkN1cnNvckJhY2tlbmRJbXBsKCk7CiAKQEAgLTY3LDExICs2NywxMSBAQCBwdWJsaWM6CiAKICAg
ICBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3ItPmtleSgp
OyB9CiAgICAgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBt
X2N1cnNvci0+cHJpbWFyeUtleSgpOyB9Ci0gICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gKG1fY3Vyc29yVHlwZSA9PSBJbmRleEtleUN1
cnNvcikgPyAwIDogU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZUJ5dGVzKG1f
Y3Vyc29yLT52YWx1ZSgpKTsgfQorICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5T25seSA/IDAgOiBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXMobV9jdXJzb3ItPnZhbHVlKCkpOyB9CiAgICAgdm9p
ZCBjbG9zZSgpOwogCiBwcml2YXRlOgotICAgIElEQkN1cnNvckJhY2tlbmRJbXBsKFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+LCBDdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiwgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbCopOworICAgIElEQkN1cnNvckJhY2tlbmRJbXBsKFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+LCBib29sIGtleU9ubHksIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKik7CiAKICAgICBjbGFzcyBDdXJzb3JJdGVyYXRp
b25PcGVyYXRpb247CiAgICAgY2xhc3MgQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbjsKQEAgLTgwLDcg
KzgwLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IG1f
Y3Vyc29yOwogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gbV9zYXZlZEN1cnNv
cjsKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIG1fdGFza1R5
cGU7Ci0gICAgQ3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7CisgICAgYm9vbCBtX2tleU9ubHk7CiAg
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IG1fdHJhbnNhY3Rpb247CiAgICAg
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZElt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5k
SW1wbC5jcHAKaW5kZXggNzRhYjU5MDZhYzhjNWU4NDFhY2JmNmYwZGEyMTc5ODk1OGE5OTM2MC4u
NDU4MjZmOTJjYmVmYWUxZjAzY2E4Nzk0YTZmM2E5NGNjZDdlODdlOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5j
cHAKQEAgLTQ0LDE3ICs0NCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQklu
ZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIElEQkN1cnNvckJhY2tlbmRJbnRl
cmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcykKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0
aW9uLCBib29sIGtleU9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9wZW5JbmRleEN1cnNvck9wZXJhdGlv
bihpbmRleCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgY2FsbGJhY2tzKSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uKGluZGV4
LCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBrZXlPbmx5LCBjYWxsYmFja3MpKTsKICAgICB9CiAgICAg
dmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwogcHJpdmF0
ZToKLSAgICBPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVk
IHNob3J0IGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBj
dXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIE9wZW5J
bmRleEN1cnNvck9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0
aW9uLCBib29sIGtleU9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAg
ICAgICAgIDogbV9pbmRleChpbmRleCkKICAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQog
ICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKLSAgICAgICAgLCBtX2N1cnNvclR5cGUo
Y3Vyc29yVHlwZSkKKyAgICAgICAgLCBtX2tleU9ubHkoa2V5T25seSkKICAgICAgICAgLCBtX2Nh
bGxiYWNrcyhjYWxsYmFja3MpCiAgICAgewogICAgIH0KQEAgLTYyLDcgKzYyLDcgQEAgcHJpdmF0
ZToKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsKICAgICBSZWZQdHI8
SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CiAgICAgdW5zaWduZWQgc2hvcnQgbV9kaXJlY3Rpb247
Ci0gICAgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7
CisgICAgYm9vbCBtX2tleU9ubHk7CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFj
a3M7CiB9OwogCkBAIC0xNDUsMjUgKzE0NSwxNyBAQCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6
Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbgog
CiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3I7
CiAKLSAgICBzd2l0Y2ggKG1fY3Vyc29yVHlwZSkgewotICAgIGNhc2UgSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3I6CisgICAgaWYgKG1fa2V5T25seSkKICAgICAgICAg
YmFja2luZ1N0b3JlQ3Vyc29yID0gbV9pbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtl
eUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9pbmRleC0+
ZGF0YWJhc2VJZCgpLCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgbV9pbmRl
eC0+aWQoKSwgbV9rZXlSYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEN1cnNvcjoKKyAgICBlbHNl
CiAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1faW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5v
cGVuSW5kZXhDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1f
aW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCks
IG1faW5kZXgtPmlkKCksIG1fa2V5UmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6T2JqZWN0U3RvcmVDdXJz
b3I6Ci0gICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlw
ZToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
IAogICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7CiAgICAgICAgIG1fY2FsbGJhY2tzLT5v
blN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2VyaWFsaXplZFNjcmlwdFZhbHVlKj4oMCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJz
b3IgPSBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKGJhY2tpbmdTdG9yZUN1cnNvci5nZXQo
KSwgbV9jdXJzb3JUeXBlLCB0cmFuc2FjdGlvbiwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tl
bmQpOworICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yID0gSURCQ3Vyc29y
QmFja2VuZEltcGw6OmNyZWF0ZShiYWNraW5nU3RvcmVDdXJzb3IuZ2V0KCksIG1fa2V5T25seSwg
dHJhbnNhY3Rpb24sIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kKTsKICAgICBtX2NhbGxi
YWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vyc29yLT5rZXkoKSwgY3Vyc29yLT5wcmltYXJ5S2V5
KCksIGN1cnNvci0+dmFsdWUoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5k
ZXggMThkMjZjZjZlNGE0Y2E5YWRiYTZmYzMxMWQ4NDI5ZDIyNDY2NzE4MC4uZWQ2NjcxNzRlMDM3
NzlmMjkxYmU3ZmQ5OWJhZmE2YTkwMzk2NzY5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHAKQEAgLTM0Myw3NSArMzQzLDUwIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzCiAgICAgICAg
IGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OkFib3J0RXJyb3IpKTsKIH0KIAotbmFtZXNwYWNlIHsKLWNsYXNzIEluZGV4V3Jp
dGVyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBJbmRleFdyaXRlcihjb25zdCBJREJJbmRleE1l
dGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgICAgICA6IG1faW5kZXhNZXRhZGF0YShpbmRleE1l
dGFkYXRhKQotICAgIHsgfQotCi0gICAgSW5kZXhXcml0ZXIoY29uc3QgSURCSW5kZXhNZXRhZGF0
YSYgaW5kZXhNZXRhZGF0YSwKLSAgICAgICAgICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cyYgaW5kZXhLZXlzKQotICAgICAgICA6IG1faW5kZXhN
ZXRhZGF0YShpbmRleE1ldGFkYXRhKQotICAgICAgICAsIG1faW5kZXhLZXlzKGluZGV4S2V5cykK
LSAgICB7IH0KLQotICAgIGJvb2wgdmVyaWZ5SW5kZXhLZXlzKElEQkJhY2tpbmdTdG9yZSYgYmFj
a2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwKLSAg
ICAgICAgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgYm9vbCYgY2FuQWRkS2V5cywKLSAgICAgICAgY29uc3QgSURCS2V5KiBwcmltYXJ5
S2V5ID0gMCwgU3RyaW5nKiBlcnJvck1lc3NhZ2UgPSAwKSBXQVJOX1VOVVNFRF9SRVRVUk4KLSAg
ICB7Ci0gICAgICAgIGNhbkFkZEtleXMgPSBmYWxzZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgYm9vbCBvayA9
IGFkZGluZ0tleUFsbG93ZWQoYmFja2luZ1N0b3JlLCB0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKG1faW5kZXhLZXlzKVtpXS5nZXQoKSwgcHJpbWFyeUtl
eSwgY2FuQWRkS2V5cyk7Ci0gICAgICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghY2FuQWRkS2V5cykgewotICAgICAgICAgICAg
ICAgIGlmIChlcnJvck1lc3NhZ2UpCi0gICAgICAgICAgICAgICAgICAgICplcnJvck1lc3NhZ2Ug
PSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxlIHRvIGFkZCBrZXkgdG8gaW5kZXggJyVzJzogYXQgbGVh
c3Qgb25lIGtleSBkb2VzIG5vdCBzYXRpc2Z5IHRoZSB1bmlxdWVuZXNzIHJlcXVpcmVtZW50cy4i
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bmRleE1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICB9Citib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Oklu
ZGV4V3JpdGVyOjp2ZXJpZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUs
IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBib29sJiBjYW5B
ZGRLZXlzLCBjb25zdCBJREJLZXkqIHByaW1hcnlLZXksIFN0cmluZyogZXJyb3JNZXNzYWdlKQor
eworICAgIGNhbkFkZEtleXMgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
aW5kZXhLZXlzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGJvb2wgb2sgPSBhZGRpbmdLZXlBbGxv
d2VkKGJhY2tpbmdTdG9yZSwgdHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQsIChtX2luZGV4S2V5cylbaV0uZ2V0KCksIHByaW1hcnlLZXksIGNhbkFkZEtleXMp
OworICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAoIWNhbkFkZEtleXMpIHsKKyAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UpCisgICAgICAg
ICAgICAgICAgKmVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJVbmFibGUgdG8gYWRkIGtl
eSB0byBpbmRleCAnJXMnOiBhdCBsZWFzdCBvbmUga2V5IGRvZXMgbm90IHNhdGlzZnkgdGhlIHVu
aXF1ZW5lc3MgcmVxdWlyZW1lbnRzLiIsIG1faW5kZXhNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgY2FuQWRk
S2V5cyA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICBjYW5BZGRLZXlz
ID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIHZvaWQgd3JpdGVJbmRleEtleXMo
Y29uc3QgSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyJiByZWNvcmRJZGVudGlmaWVy
LCBJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKSBjb25zdAotICAgIHsKLSAgICAgICAgaW50NjRfdCBpbmRleElkID0gbV9pbmRleE1ldGFk
YXRhLmlkOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5kZXhLZXlzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBiYWNraW5nU3RvcmUucHV0SW5kZXhEYXRhRm9yUmVjb3Jk
KHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqKG1faW5k
ZXhLZXlzKVtpXS5nZXQoKSwgcmVjb3JkSWRlbnRpZmllcik7Ci0gICAgICAgIH0KK3ZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6OndyaXRlSW5kZXhLZXlzKGNvbnN0
IElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciYgcmVjb3JkSWRlbnRpZmllciwgSURC
QmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkg
Y29uc3QKK3sKKyAgICBpbnQ2NF90IGluZGV4SWQgPSBtX2luZGV4TWV0YWRhdGEuaWQ7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgeworICAgICAg
ICBiYWNraW5nU3RvcmUucHV0SW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLCBkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqKG1faW5kZXhLZXlzKVtpXS5nZXQoKSwgcmVj
b3JkSWRlbnRpZmllcik7CiAgICAgfQorfQogCi1wcml2YXRlOgotCi0gICAgYm9vbCBhZGRpbmdL
ZXlBbGxvd2VkKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwKLSAgICAgICAgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwKLSAgICAgICAgY29uc3QgSURC
S2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBib29sJiBhbGxvd2VkKSBj
b25zdCBXQVJOX1VOVVNFRF9SRVRVUk4KLSAgICB7Ci0gICAgICAgIGFsbG93ZWQgPSBmYWxzZTsK
LSAgICAgICAgaWYgKCFtX2luZGV4TWV0YWRhdGEudW5pcXVlKSB7Ci0gICAgICAgICAgICBhbGxv
d2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgUmVmUHRyPElEQktleT4gZm91bmRQcmltYXJ5S2V5OwotICAgICAgICBib29sIGZvdW5kID0g
ZmFsc2U7Ci0gICAgICAgIGJvb2wgb2sgPSBiYWNraW5nU3RvcmUua2V5RXhpc3RzSW5JbmRleCh0
cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKmluZGV4S2V5
LCBmb3VuZFByaW1hcnlLZXksIGZvdW5kKTsKLSAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFmb3VuZCB8fCAocHJpbWFyeUtleSAmJiBmb3Vu
ZFByaW1hcnlLZXktPmlzRXF1YWwocHJpbWFyeUtleSkpKQotICAgICAgICAgICAgYWxsb3dlZCA9
IHRydWU7Citib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVyOjphZGRp
bmdLZXlBbGxvd2VkKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5KiBpbmRleEtleSwg
Y29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBib29sJiBhbGxvd2VkKSBjb25zdAoreworICAgIGFs
bG93ZWQgPSBmYWxzZTsKKyAgICBpZiAoIW1faW5kZXhNZXRhZGF0YS51bmlxdWUpIHsKKyAgICAg
ICAgYWxsb3dlZCA9IHRydWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGNv
bnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwotICAgIElEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzIG1faW5kZXhLZXlzOwotfTsKKyAgICBSZWZQdHI8
SURCS2V5PiBmb3VuZFByaW1hcnlLZXk7CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgIGJv
b2wgb2sgPSBiYWNraW5nU3RvcmUua2V5RXhpc3RzSW5JbmRleCh0cmFuc2FjdGlvbiwgZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKmluZGV4S2V5LCBmb3VuZFByaW1hcnlLZXks
IGZvdW5kKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFm
b3VuZCB8fCAocHJpbWFyeUtleSAmJiBmb3VuZFByaW1hcnlLZXktPmlzRXF1YWwocHJpbWFyeUtl
eSkpKQorICAgICAgICBhbGxvd2VkID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotV0FS
Tl9VTlVTRURfUkVUVVJOIHN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbCogb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29s
IGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3Qg
VmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhL
ZXlzLCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyog
ZXJyb3JNZXNzYWdlLCBib29sJiBjb21wbGV0ZWQpCitib29sIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6Om1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUs
IFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29u
c3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBWZWN0b3I8T3duUHRyPElu
ZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJyb3JNZXNzYWdlLCBib29sJiBj
b21wbGV0ZWQpCiB7CiAgICAgQVNTRVJUKGluZGV4SWRzLnNpemUoKSA9PSBpbmRleEtleXMuc2l6
ZSgpKTsKICAgICBjb21wbGV0ZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAppbmRl
eCBjMmRlNDc0OGZjZGFhN2MxNzRmN2U2MDMzYTE2NzFlOTQ3YmIyOWNhLi5mOWQ1MWY0MGU2MmE3
YWEzMjg2MDZiOWVmZjBhYTkwNjAxZjhiYmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCkBA
IC05MCw2ICs5MCwzMSBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+
IGJhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UtPmJhY2tpbmdTdG9yZSgp
OyB9CiAgICAgaW50NjRfdCBkYXRhYmFzZUlkKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS0+
aWQoKTsgfQogCisgICAgY2xhc3MgSW5kZXhXcml0ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAg
ZXhwbGljaXQgSW5kZXhXcml0ZXIoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0
YSkKKyAgICAgICAgICAgIDogbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCisgICAgICAg
IHsgfQorCisgICAgICAgIEluZGV4V3JpdGVyKGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4
TWV0YWRhdGEsIGNvbnN0IElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlz
JiBpbmRleEtleXMpCisgICAgICAgICAgICA6IG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRh
KQorICAgICAgICAgICAgLCBtX2luZGV4S2V5cyhpbmRleEtleXMpCisgICAgICAgIHsgfQorCisg
ICAgICAgIGJvb2wgdmVyaWZ5SW5kZXhLZXlzKElEQkJhY2tpbmdTdG9yZSYsIElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBib29sJiBjYW5BZGRLZXlzLCBjb25zdCBJREJLZXkqIHBy
aW1hcnlLZXkgPSAwLCBTdHJpbmcqIGVycm9yTWVzc2FnZSA9IDApIFdBUk5fVU5VU0VEX1JFVFVS
TjsKKworICAgICAgICB2b2lkIHdyaXRlSW5kZXhLZXlzKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6
UmVjb3JkSWRlbnRpZmllciYsIElEQkJhY2tpbmdTdG9yZSYsIElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgY29u
c3Q7CisKKyAgICBwcml2YXRlOgorCisgICAgICAgIGJvb2wgYWRkaW5nS2V5QWxsb3dlZChJREJC
YWNraW5nU3RvcmUmLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBib29sJiBhbGxvd2VkKSBj
b25zdCBXQVJOX1VOVVNFRF9SRVRVUk47CisKKyAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0
YSBtX2luZGV4TWV0YWRhdGE7CisgICAgICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZTo6SW5kZXhLZXlzIG1faW5kZXhLZXlzOworICAgIH07CisKKyAgICBzdGF0aWMgYm9vbCBtYWtl
SW5kZXhXcml0ZXJzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwqLCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgYm9v
bCBrZXlXYXNHZW5lcmF0ZWQsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0
IFZlY3RvcjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4mLCBWZWN0
b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJyb3JNZXNz
YWdlLCBib29sJiBjb21wbGV0ZWQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKwogcHJpdmF0ZToKICAg
ICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEltcGwq
LCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKaW5kZXggMGExMjEwMWQ4ZWExZTAzMjIz
ODQ4N2IzOTE3MDc3NTJkOGRkZDRmYi4uNjc0YjJkNGEzOGU5MmRmZDJjNDZkZTM3M2E2YzkyYjBi
NDI5MTBiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
UmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVx
dWVzdC5jcHAKQEAgLTcwLDcgKzcwLDcgQEAgSURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmMKICAgICAs
IG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1fdGFza1R5cGUodGFza1R5cGUpCiAgICAgLCBtX2hh
c1BlbmRpbmdBY3Rpdml0eSh0cnVlKQotICAgICwgbV9jdXJzb3JUeXBlKElEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2U6OkludmFsaWRDdXJzb3JUeXBlKQorICAgICwgbV9jdXJzb3JLZXlPbmx5KGZh
bHNlKQogICAgICwgbV9jdXJzb3JEaXJlY3Rpb24oSURCQ3Vyc29yOjpORVhUKQogICAgICwgbV9j
dXJzb3JGaW5pc2hlZChmYWxzZSkKICAgICAsIG1fcGVuZGluZ0N1cnNvcigwKQpAQCAtMTgyLDEx
ICsxODIsMTAgQEAgdm9pZCBJREJSZXF1ZXN0OjphYm9ydCgpCiAgICAgbV9yZXF1ZXN0QWJvcnRl
ZCA9IHRydWU7CiB9CiAKLXZvaWQgSURCUmVxdWVzdDo6c2V0Q3Vyc29yRGV0YWlscyhJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkN1cnNvcjo6RGly
ZWN0aW9uIGRpcmVjdGlvbikKK3ZvaWQgSURCUmVxdWVzdDo6c2V0Q3Vyc29yRGV0YWlscyhib29s
IGtleU9ubHksIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBBU1NFUlQo
bV9yZWFkeVN0YXRlID09IFBFTkRJTkcpOwotICAgIEFTU0VSVChtX2N1cnNvclR5cGUgPT0gSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW52YWxpZEN1cnNvclR5cGUpOwotICAgIG1fY3Vyc29y
VHlwZSA9IGN1cnNvclR5cGU7CisgICAgbV9jdXJzb3JLZXlPbmx5ID0ga2V5T25seTsKICAgICBt
X2N1cnNvckRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKIH0KIApAQCAtMjI1LDcgKzIyNCw3IEBAIHZv
aWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0Q3Vyc29yKFBhc3NSZWZQdHI8SURCQ3Vyc29yPiBjdXJz
b3IsIFBhc3NSZWZQdHI8SURCS2V5CiAgICAgbV9jdXJzb3JQcmltYXJ5S2V5ID0gcHJpbWFyeUtl
eTsKICAgICBtX2N1cnNvclZhbHVlID0gdmFsdWU7CiAKLSAgICBpZiAobV9jdXJzb3JUeXBlID09
IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yKSB7CisgICAgaWYgKG1f
Y3Vyc29yS2V5T25seSkgewogICAgICAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKGN1cnNv
cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yODgsOSArMjg3LDggQEAgdm9pZCBJREJS
ZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBi
YWNrZW5kLCBQYXNzUmUKIAogICAgIERPTVJlcXVlc3RTdGF0ZTo6U2NvcGUgc2NvcGUobV9yZXF1
ZXN0U3RhdGUpOwogICAgIFNjcmlwdFZhbHVlIHZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZShy
ZXF1ZXN0U3RhdGUoKSwgc2VyaWFsaXplZFZhbHVlKTsKLSAgICBBU1NFUlQobV9jdXJzb3JUeXBl
ICE9IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkludmFsaWRDdXJzb3JUeXBlKTsKICAgICBS
ZWZQdHI8SURCQ3Vyc29yPiBjdXJzb3I7Ci0gICAgaWYgKG1fY3Vyc29yVHlwZSA9PSBJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcikKKyAgICBpZiAobV9jdXJzb3JLZXlP
bmx5KQogICAgICAgICBjdXJzb3IgPSBJREJDdXJzb3I6OmNyZWF0ZShiYWNrZW5kLCBtX2N1cnNv
ckRpcmVjdGlvbiwgdGhpcywgbV9zb3VyY2UuZ2V0KCksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwog
ICAgIGVsc2UKICAgICAgICAgY3Vyc29yID0gSURCQ3Vyc29yV2l0aFZhbHVlOjpjcmVhdGUoYmFj
a2VuZCwgbV9jdXJzb3JEaXJlY3Rpb24sIHRoaXMsIG1fc291cmNlLmdldCgpLCBtX3RyYW5zYWN0
aW9uLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVl
c3QuaAppbmRleCBiMjExODIwYmMzOGY5Mjc3NWFjNzc0NTUzYjE2ZTczZDA2MThmM2Y0Li43NTQy
ZGY2NGU0ZTk1MjA1OWNmNTcyOTliMDBkMThmNmQyYjUzODg2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCkBAIC04MSw3ICs4MSw3IEBAIHB1Ymxp
YzoKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKIAogICAgIHZv
aWQgbWFya0Vhcmx5RGVhdGgoKTsKLSAgICB2b2lkIHNldEN1cnNvckRldGFpbHMoSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOworICAg
IHZvaWQgc2V0Q3Vyc29yRGV0YWlscyhib29sIGtleU9ubHksIElEQkN1cnNvcjo6RGlyZWN0aW9u
KTsKICAgICB2b2lkIHNldFBlbmRpbmdDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+KTsKICAg
ICB2b2lkIGZpbmlzaEN1cnNvcigpOwogICAgIHZvaWQgYWJvcnQoKTsKQEAgLTE1MCw3ICsxNTAs
NyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+ID4gbV9lbnF1ZXVlZEV2ZW50
czsKIAogICAgIC8vIE9ubHkgdXNlZCBpZiB0aGUgcmVzdWx0IHR5cGUgd2lsbCBiZSBhIGN1cnNv
ci4KLSAgICBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlw
ZTsKKyAgICBib29sIG1fY3Vyc29yS2V5T25seTsKICAgICBJREJDdXJzb3I6OkRpcmVjdGlvbiBt
X2N1cnNvckRpcmVjdGlvbjsKICAgICBib29sIG1fY3Vyc29yRmluaXNoZWQ7CiAgICAgUmVmUHRy
PElEQkN1cnNvcj4gbV9wZW5kaW5nQ3Vyc29yOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180203</attachid>
            <date>2012-12-19 12:08:31 -0800</date>
            <delta_ts>2012-12-19 14:54:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105449-20121219120547.patch</filename>
            <type>text/plain</type>
            <size>27577</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjg3ZjA0MTIzMTBkZmY2
NmYwOGI2NjMwYjRiZmQ3Mjc4YTYyYTljYy4uMDM4YTc3Zjc2MjliMjg5MDdmNmY4ZTAzZDYwYjU5
ZGQwZGVhYTUxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTEyLTE5ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IEN1
cnNvciBhbmQgSW5kZXhLZXkgY2xlYW51cCBmb3IgcmVmYWN0b3IKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTQ0OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBjbGVhbnVwIG9mIHNvbWUg
Y29kZSB0byBtYWtlIHRoZSByZWZhY3RvciB0aGF0IGlzIGNvbWluZyBpbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyNzQxIGNsZWFuZXIuIFNvbWUg
YXNzZXJ0aW9ucworICAgICAgICBoYXZlIGJlZW4gcmVtb3ZlZCBiZWNhdXNlIHRoZSBjb2RlIHdp
bGwgYmUgdXNlZCBpbiBtb3JlIGdlbmVyaWMKKyAgICAgICAgY2lyY3Vtc3RhbmNlcyBpbiBhIGZ1
dHVyZSBwYXRjaC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhpcyBkb2VzIG5vdCBjaGFu
Z2UgdGhlIGxvZ2ljIG9mIGV4ZWN1dGluZyBjb2RlLgorCisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vy
c29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6
cGVyZm9ybSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZElt
cGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OnZhbHVlKToKKyAgICAgICAg
KElEQkN1cnNvckJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZElt
cGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkluZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbjo6T3BlbkluZGV4
Q3Vyc29yT3BlcmF0aW9uKToKKyAgICAgICAgKElEQkluZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRl
eEN1cnNvck9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBs
OjpPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6OnZlcmlmeUluZGV4S2V5
cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRleFdy
aXRlcjo6d3JpdGVJbmRleEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6OmFkZGluZ0tleUFsbG93ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6bWFrZUluZGV4V3JpdGVycyk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOgorICAg
ICAgICAoSW5kZXhXcml0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6SW5kZXhXcml0ZXI6OkluZGV4V3JpdGVyKToKKyAgICAgICAgKElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6SURCUmVxdWVzdCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRDdXJzb3JEZXRhaWxzKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlJlcXVlc3Q6OnNldFJlc3VsdEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpvblN1Y2Nlc3MpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVl
c3QuaDoKKyAgICAgICAgKElEQlJlcXVlc3QpOgorCiAyMDEyLTEyLTE5ICBUb21teSBXaWRlbmZs
eWNodCAgPHRvbW15d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0pTQ10gQWRkIHN1cHBvcnQg
Zm9yIG92ZXJsb2FkZWQgY29uc3RydWN0b3JzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKaW5kZXggMmM0NmIx
ZDVlZTljZjJlOGQ0ODYxNzk3ZTA4YzA1MzVkYmMyMmNlOC4uMzA3NDMzZmQyYmZkZDExNWU3ZWVj
MGM0MWEzZTAwMWRlODZmZjA5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcApAQCAtMTAxLDEwICsxMDEs
MTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKIH07
CiAKLUlEQkN1cnNvckJhY2tlbmRJbXBsOjpJREJDdXJzb3JCYWNrZW5kSW1wbChQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIEN1cnNvclR5cGUgY3Vyc29yVHlwZSwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24sIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwqIG9iamVjdFN0b3JlKQorSURCQ3Vyc29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tlbmRJ
bXBsKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgYm9vbCBrZXlP
bmx5LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbCogb2JqZWN0U3RvcmUpCiAgICAgOiBtX2N1cnNvcihjdXJzb3IpCiAgICAgLCBtX3Rh
c2tUeXBlKHRhc2tUeXBlKQotICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCisgICAgLCBt
X2tleU9ubHkoa2V5T25seSkKICAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiAgICAg
LCBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQogICAgICwgbV9jbG9zZWQoZmFsc2UpCkBAIC0y
MDgsMTQgKzIwOCwxNCBAQCB2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JQcmVmZXRj
aEl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdAogICAgICAgICBmb3VuZEtl
eXMuYXBwZW5kKG1fY3Vyc29yLT5tX2N1cnNvci0+a2V5KCkpOwogICAgICAgICBmb3VuZFByaW1h
cnlLZXlzLmFwcGVuZChtX2N1cnNvci0+bV9jdXJzb3ItPnByaW1hcnlLZXkoKSk7CiAKLSAgICAg
ICAgaWYgKG1fY3Vyc29yLT5tX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZTo6SW5kZXhLZXlDdXJzb3IpCisgICAgICAgIGlmICghbV9jdXJzb3ItPm1fa2V5T25seSkKICAg
ICAgICAgICAgIGZvdW5kVmFsdWVzLmFwcGVuZChTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZUZyb21XaXJlQnl0ZXMobV9jdXJzb3ItPm1fY3Vyc29yLT52YWx1ZSgpKSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGZvdW5kVmFsdWVzLmFwcGVuZChTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmNyZWF0ZSgpKTsKIAogICAgICAgICBzaXplRXN0aW1hdGUgKz0gbV9jdXJzb3ItPm1fY3Vyc29y
LT5rZXkoKS0+c2l6ZUVzdGltYXRlKCk7CiAgICAgICAgIHNpemVFc3RpbWF0ZSArPSBtX2N1cnNv
ci0+bV9jdXJzb3ItPnByaW1hcnlLZXkoKS0+c2l6ZUVzdGltYXRlKCk7Ci0gICAgICAgIGlmICht
X2N1cnNvci0+bV9jdXJzb3JUeXBlICE9IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4
S2V5Q3Vyc29yKQorICAgICAgICBpZiAoIW1fY3Vyc29yLT5tX2tleU9ubHkpCiAgICAgICAgICAg
ICBzaXplRXN0aW1hdGUgKz0gbV9jdXJzb3ItPm1fY3Vyc29yLT52YWx1ZSgpLnNpemUoKTsKIAog
ICAgICAgICBpZiAoc2l6ZUVzdGltYXRlID4gbWF4U2l6ZUVzdGltYXRlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgK
aW5kZXggODdhYzE3OGY0ZTZiNjBmNjMyZWJmN2QzM2NmYmRjOGUxNzcwOTdjNC4uNDkzYjZkZTQ3
MDRkM2Y4Y2Q4YjhkZjJmNDhkNzg2NDk1ZGE5OTU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCkBAIC00Nywx
MyArNDcsMTMgQEAgY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKIAogY2xhc3MgSURC
Q3Vyc29yQmFja2VuZEltcGwgOiBwdWJsaWMgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGNyZWF0
ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIEN1cnNvclR5cGUg
Y3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24sIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwqIG9iamVjdFN0b3JlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PElEQkN1cnNvckJhY2tlbmRJbXBsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6
OkN1cnNvcj4gY3Vyc29yLCBib29sIGtleU9ubHksIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
IHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFja2VuZEltcGwoY3Vy
c29yLCBjdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRh
c2ssIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IElEQkN1cnNvckJhY2tlbmRJbXBsKGN1cnNvciwga2V5T25seSwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlOjpOb3JtYWxUYXNrLCB0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUpKTsK
ICAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGNyZWF0
ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIEN1cnNvclR5cGUg
Y3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNr
VHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24sIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwqIG9iamVjdFN0b3JlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkN1
cnNvckJhY2tlbmRJbXBsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4gY3Vyc29yLCBib29sIGtleU9ubHksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6
VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9u
LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFja2VuZEltcGwoY3Vyc29yLCBjdXJzb3JU
eXBlLCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFja2VuZEltcGwoY3Vyc29yLCBrZXlPbmx5LCB0YXNr
VHlwZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlKSk7CiAgICAgfQogICAgIHZpcnR1YWwgfklE
QkN1cnNvckJhY2tlbmRJbXBsKCk7CiAKQEAgLTY3LDExICs2NywxMSBAQCBwdWJsaWM6CiAKICAg
ICBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3ItPmtleSgp
OyB9CiAgICAgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBt
X2N1cnNvci0+cHJpbWFyeUtleSgpOyB9Ci0gICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gKG1fY3Vyc29yVHlwZSA9PSBJbmRleEtleUN1
cnNvcikgPyAwIDogU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZUJ5dGVzKG1f
Y3Vyc29yLT52YWx1ZSgpKTsgfQorICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5T25seSA/IDAgOiBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXMobV9jdXJzb3ItPnZhbHVlKCkpOyB9CiAgICAgdm9p
ZCBjbG9zZSgpOwogCiBwcml2YXRlOgotICAgIElEQkN1cnNvckJhY2tlbmRJbXBsKFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+LCBDdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiwgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbCopOworICAgIElEQkN1cnNvckJhY2tlbmRJbXBsKFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+LCBib29sIGtleU9ubHksIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKik7CiAKICAgICBjbGFzcyBDdXJzb3JJdGVyYXRp
b25PcGVyYXRpb247CiAgICAgY2xhc3MgQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbjsKQEAgLTgwLDcg
KzgwLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IG1f
Y3Vyc29yOwogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gbV9zYXZlZEN1cnNv
cjsKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIG1fdGFza1R5
cGU7Ci0gICAgQ3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7CisgICAgYm9vbCBtX2tleU9ubHk7CiAg
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IG1fdHJhbnNhY3Rpb247CiAgICAg
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZElt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5k
SW1wbC5jcHAKaW5kZXggNzRhYjU5MDZhYzhjNWU4NDFhY2JmNmYwZGEyMTc5ODk1OGE5OTM2MC4u
NDU4MjZmOTJjYmVmYWUxZjAzY2E4Nzk0YTZmM2E5NGNjZDdlODdlOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5j
cHAKQEAgLTQ0LDE3ICs0NCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQklu
ZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIElEQkN1cnNvckJhY2tlbmRJbnRl
cmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcykKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0
aW9uLCBib29sIGtleU9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9wZW5JbmRleEN1cnNvck9wZXJhdGlv
bihpbmRleCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgY2FsbGJhY2tzKSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uKGluZGV4
LCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBrZXlPbmx5LCBjYWxsYmFja3MpKTsKICAgICB9CiAgICAg
dmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwogcHJpdmF0
ZToKLSAgICBPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVk
IHNob3J0IGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBj
dXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIE9wZW5J
bmRleEN1cnNvck9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0
aW9uLCBib29sIGtleU9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAg
ICAgICAgIDogbV9pbmRleChpbmRleCkKICAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQog
ICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKLSAgICAgICAgLCBtX2N1cnNvclR5cGUo
Y3Vyc29yVHlwZSkKKyAgICAgICAgLCBtX2tleU9ubHkoa2V5T25seSkKICAgICAgICAgLCBtX2Nh
bGxiYWNrcyhjYWxsYmFja3MpCiAgICAgewogICAgIH0KQEAgLTYyLDcgKzYyLDcgQEAgcHJpdmF0
ZToKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsKICAgICBSZWZQdHI8
SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CiAgICAgdW5zaWduZWQgc2hvcnQgbV9kaXJlY3Rpb247
Ci0gICAgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7
CisgICAgYm9vbCBtX2tleU9ubHk7CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFj
a3M7CiB9OwogCkBAIC0xNDUsMjUgKzE0NSwxNyBAQCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6
Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbgog
CiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3I7
CiAKLSAgICBzd2l0Y2ggKG1fY3Vyc29yVHlwZSkgewotICAgIGNhc2UgSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3I6CisgICAgaWYgKG1fa2V5T25seSkKICAgICAgICAg
YmFja2luZ1N0b3JlQ3Vyc29yID0gbV9pbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtl
eUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9pbmRleC0+
ZGF0YWJhc2VJZCgpLCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgbV9pbmRl
eC0+aWQoKSwgbV9rZXlSYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEN1cnNvcjoKKyAgICBlbHNl
CiAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1faW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5v
cGVuSW5kZXhDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1f
aW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCks
IG1faW5kZXgtPmlkKCksIG1fa2V5UmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6T2JqZWN0U3RvcmVDdXJz
b3I6Ci0gICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlw
ZToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
IAogICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7CiAgICAgICAgIG1fY2FsbGJhY2tzLT5v
blN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2VyaWFsaXplZFNjcmlwdFZhbHVlKj4oMCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJz
b3IgPSBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKGJhY2tpbmdTdG9yZUN1cnNvci5nZXQo
KSwgbV9jdXJzb3JUeXBlLCB0cmFuc2FjdGlvbiwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tl
bmQpOworICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yID0gSURCQ3Vyc29y
QmFja2VuZEltcGw6OmNyZWF0ZShiYWNraW5nU3RvcmVDdXJzb3IuZ2V0KCksIG1fa2V5T25seSwg
dHJhbnNhY3Rpb24sIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kKTsKICAgICBtX2NhbGxi
YWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vyc29yLT5rZXkoKSwgY3Vyc29yLT5wcmltYXJ5S2V5
KCksIGN1cnNvci0+dmFsdWUoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5k
ZXggMThkMjZjZjZlNGE0Y2E5YWRiYTZmYzMxMWQ4NDI5ZDIyNDY2NzE4MC4uNzBhMGViODI4YmYx
MzFhZjgwYjU5ZmRkMGU3MjRlOTBiNmU3NTg0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHAKQEAgLTM0Myw3NSArMzQzLDUwIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzCiAgICAgICAg
IGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OkFib3J0RXJyb3IpKTsKIH0KIAotbmFtZXNwYWNlIHsKLWNsYXNzIEluZGV4V3Jp
dGVyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBJbmRleFdyaXRlcihjb25zdCBJREJJbmRleE1l
dGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgICAgICA6IG1faW5kZXhNZXRhZGF0YShpbmRleE1l
dGFkYXRhKQotICAgIHsgfQotCi0gICAgSW5kZXhXcml0ZXIoY29uc3QgSURCSW5kZXhNZXRhZGF0
YSYgaW5kZXhNZXRhZGF0YSwKLSAgICAgICAgICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cyYgaW5kZXhLZXlzKQotICAgICAgICA6IG1faW5kZXhN
ZXRhZGF0YShpbmRleE1ldGFkYXRhKQotICAgICAgICAsIG1faW5kZXhLZXlzKGluZGV4S2V5cykK
LSAgICB7IH0KLQotICAgIGJvb2wgdmVyaWZ5SW5kZXhLZXlzKElEQkJhY2tpbmdTdG9yZSYgYmFj
a2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwKLSAg
ICAgICAgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgYm9vbCYgY2FuQWRkS2V5cywKLSAgICAgICAgY29uc3QgSURCS2V5KiBwcmltYXJ5
S2V5ID0gMCwgU3RyaW5nKiBlcnJvck1lc3NhZ2UgPSAwKSBXQVJOX1VOVVNFRF9SRVRVUk4KLSAg
ICB7Ci0gICAgICAgIGNhbkFkZEtleXMgPSBmYWxzZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgYm9vbCBvayA9
IGFkZGluZ0tleUFsbG93ZWQoYmFja2luZ1N0b3JlLCB0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKG1faW5kZXhLZXlzKVtpXS5nZXQoKSwgcHJpbWFyeUtl
eSwgY2FuQWRkS2V5cyk7Ci0gICAgICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghY2FuQWRkS2V5cykgewotICAgICAgICAgICAg
ICAgIGlmIChlcnJvck1lc3NhZ2UpCi0gICAgICAgICAgICAgICAgICAgICplcnJvck1lc3NhZ2Ug
PSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxlIHRvIGFkZCBrZXkgdG8gaW5kZXggJyVzJzogYXQgbGVh
c3Qgb25lIGtleSBkb2VzIG5vdCBzYXRpc2Z5IHRoZSB1bmlxdWVuZXNzIHJlcXVpcmVtZW50cy4i
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bmRleE1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICB9Citib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Oklu
ZGV4V3JpdGVyOjp2ZXJpZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUs
IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBib29sJiBjYW5B
ZGRLZXlzLCBjb25zdCBJREJLZXkqIHByaW1hcnlLZXksIFN0cmluZyogZXJyb3JNZXNzYWdlKQor
eworICAgIGNhbkFkZEtleXMgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
aW5kZXhLZXlzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGJvb2wgb2sgPSBhZGRpbmdLZXlBbGxv
d2VkKGJhY2tpbmdTdG9yZSwgdHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQsIChtX2luZGV4S2V5cylbaV0uZ2V0KCksIHByaW1hcnlLZXksIGNhbkFkZEtleXMp
OworICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAoIWNhbkFkZEtleXMpIHsKKyAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UpCisgICAgICAg
ICAgICAgICAgKmVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJVbmFibGUgdG8gYWRkIGtl
eSB0byBpbmRleCAnJXMnOiBhdCBsZWFzdCBvbmUga2V5IGRvZXMgbm90IHNhdGlzZnkgdGhlIHVu
aXF1ZW5lc3MgcmVxdWlyZW1lbnRzLiIsIG1faW5kZXhNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgY2FuQWRk
S2V5cyA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICBjYW5BZGRLZXlz
ID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIHZvaWQgd3JpdGVJbmRleEtleXMo
Y29uc3QgSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyJiByZWNvcmRJZGVudGlmaWVy
LCBJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKSBjb25zdAotICAgIHsKLSAgICAgICAgaW50NjRfdCBpbmRleElkID0gbV9pbmRleE1ldGFk
YXRhLmlkOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5kZXhLZXlzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBiYWNraW5nU3RvcmUucHV0SW5kZXhEYXRhRm9yUmVjb3Jk
KHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqKG1faW5k
ZXhLZXlzKVtpXS5nZXQoKSwgcmVjb3JkSWRlbnRpZmllcik7Ci0gICAgICAgIH0KK3ZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6OndyaXRlSW5kZXhLZXlzKGNvbnN0
IElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciYgcmVjb3JkSWRlbnRpZmllciwgSURC
QmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkg
Y29uc3QKK3sKKyAgICBpbnQ2NF90IGluZGV4SWQgPSBtX2luZGV4TWV0YWRhdGEuaWQ7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgeworICAgICAg
ICBiYWNraW5nU3RvcmUucHV0SW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLCBkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqKG1faW5kZXhLZXlzKVtpXS5nZXQoKSwgcmVj
b3JkSWRlbnRpZmllcik7CiAgICAgfQorfQogCi1wcml2YXRlOgotCi0gICAgYm9vbCBhZGRpbmdL
ZXlBbGxvd2VkKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwKLSAgICAgICAgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwKLSAgICAgICAgY29uc3QgSURC
S2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBib29sJiBhbGxvd2VkKSBj
b25zdCBXQVJOX1VOVVNFRF9SRVRVUk4KLSAgICB7Ci0gICAgICAgIGFsbG93ZWQgPSBmYWxzZTsK
LSAgICAgICAgaWYgKCFtX2luZGV4TWV0YWRhdGEudW5pcXVlKSB7Ci0gICAgICAgICAgICBhbGxv
d2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgUmVmUHRyPElEQktleT4gZm91bmRQcmltYXJ5S2V5OwotICAgICAgICBib29sIGZvdW5kID0g
ZmFsc2U7Ci0gICAgICAgIGJvb2wgb2sgPSBiYWNraW5nU3RvcmUua2V5RXhpc3RzSW5JbmRleCh0
cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKmluZGV4S2V5
LCBmb3VuZFByaW1hcnlLZXksIGZvdW5kKTsKLSAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFmb3VuZCB8fCAocHJpbWFyeUtleSAmJiBmb3Vu
ZFByaW1hcnlLZXktPmlzRXF1YWwocHJpbWFyeUtleSkpKQotICAgICAgICAgICAgYWxsb3dlZCA9
IHRydWU7Citib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVyOjphZGRp
bmdLZXlBbGxvd2VkKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5KiBpbmRleEtleSwg
Y29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBib29sJiBhbGxvd2VkKSBjb25zdAoreworICAgIGFs
bG93ZWQgPSBmYWxzZTsKKyAgICBpZiAoIW1faW5kZXhNZXRhZGF0YS51bmlxdWUpIHsKKyAgICAg
ICAgYWxsb3dlZCA9IHRydWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGNv
bnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwotICAgIElEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzIG1faW5kZXhLZXlzOwotfTsKKyAgICBSZWZQdHI8
SURCS2V5PiBmb3VuZFByaW1hcnlLZXk7CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgIGJv
b2wgb2sgPSBiYWNraW5nU3RvcmUua2V5RXhpc3RzSW5JbmRleCh0cmFuc2FjdGlvbiwgZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKmluZGV4S2V5LCBmb3VuZFByaW1hcnlLZXks
IGZvdW5kKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFm
b3VuZCB8fCAocHJpbWFyeUtleSAmJiBmb3VuZFByaW1hcnlLZXktPmlzRXF1YWwocHJpbWFyeUtl
eSkpKQorICAgICAgICBhbGxvd2VkID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotV0FS
Tl9VTlVTRURfUkVUVVJOIHN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbCogb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29s
IGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3Qg
VmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhL
ZXlzLCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyog
ZXJyb3JNZXNzYWdlLCBib29sJiBjb21wbGV0ZWQpCitib29sIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6Om1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3Qg
ZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3Qg
VmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBWZWN0b3I8T3duUHRyPEluZGV4
V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJyb3JNZXNzYWdlLCBib29sJiBjb21w
bGV0ZWQpCiB7CiAgICAgQVNTRVJUKGluZGV4SWRzLnNpemUoKSA9PSBpbmRleEtleXMuc2l6ZSgp
KTsKICAgICBjb21wbGV0ZWQgPSBmYWxzZTsKQEAgLTQyMCwyMyArMzk1LDIwIEBAIFdBUk5fVU5V
U0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBtYWtlSW5kZXhXcml0ZXJzKFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleElkcy5zaXpl
KCk7ICsraSkKICAgICAgICAgaW5kZXhLZXlNYXAuYWRkKGluZGV4SWRzW2ldLCBpbmRleEtleXNb
aV0pOwogCi0gICAgZm9yIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRleE1hcDo6aXRl
cmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+aXRlckluZGV4ZXNCZWdpbigpOyBpdCAhPSBvYmplY3RT
dG9yZS0+aXRlckluZGV4ZXNFbmQoKTsgKytpdCkgeworICAgIGZvciAoSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUuaW5kZXhl
cy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS5pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAKLSAg
ICAgICAgY29uc3QgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT52YWx1
ZTsKKyAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXggPSBpdC0+dmFsdWU7CiAK
ICAgICAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMga2V5cyA9
IGluZGV4S2V5TWFwLmdldChpdC0+a2V5KTsKICAgICAgICAgLy8gSWYgdGhlIG9iamVjdFN0b3Jl
IGlzIHVzaW5nIGF1dG9JbmNyZW1lbnQsIHRoZW4gYW55IGluZGV4ZXMgd2l0aCBhbiBpZGVudGlj
YWwga2V5UGF0aCBuZWVkIHRvIGFsc28gdXNlIHRoZSBwcmltYXJ5IChnZW5lcmF0ZWQpIGtleSBh
cyBhIGtleS4KLSAgICAgICAgaWYgKGtleVdhc0dlbmVyYXRlZCkgewotICAgICAgICAgICAgY29u
c3QgSURCS2V5UGF0aCYgaW5kZXhLZXlQYXRoID0gaW5kZXgtPmtleVBhdGgoKTsKLSAgICAgICAg
ICAgIGlmIChpbmRleEtleVBhdGggPT0gb2JqZWN0U3RvcmUtPmtleVBhdGgoKSkKKyAgICAgICAg
aWYgKGtleVdhc0dlbmVyYXRlZCAmJiAoaW5kZXgua2V5UGF0aCA9PSBvYmplY3RTdG9yZS5rZXlQ
YXRoKSkKICAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZChwcmltYXJ5S2V5KTsKLSAgICAgICAg
fQogCi0gICAgICAgIE93blB0cjxJbmRleFdyaXRlcj4gaW5kZXhXcml0ZXIoYWRvcHRQdHIobmV3
IEluZGV4V3JpdGVyKGluZGV4LT5tZXRhZGF0YSgpLCBrZXlzKSkpOworICAgICAgICBPd25QdHI8
SW5kZXhXcml0ZXI+IGluZGV4V3JpdGVyKGFkb3B0UHRyKG5ldyBJbmRleFdyaXRlcihpbmRleCwg
a2V5cykpKTsKICAgICAgICAgYm9vbCBjYW5BZGRLZXlzID0gZmFsc2U7Ci0gICAgICAgIGJvb2wg
YmFja2luZ1N0b3JlU3VjY2VzcyA9IGluZGV4V3JpdGVyLT52ZXJpZnlJbmRleEtleXMoKm9iamVj
dFN0b3JlLT5iYWNraW5nU3RvcmUoKSwKLSAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLAotICAgICAgICAg
ICAgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5pZCgpLCBjYW5BZGRLZXlzLCBwcmltYXJ5S2V5
LmdldCgpLCBlcnJvck1lc3NhZ2UpOworICAgICAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3Mg
PSBpbmRleFdyaXRlci0+dmVyaWZ5SW5kZXhLZXlzKCpiYWNraW5nU3RvcmUsCisgICAgICAgICAg
ICB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwKKyAg
ICAgICAgICAgIG9iamVjdFN0b3JlLmlkLCBpbmRleC5pZCwgY2FuQWRkS2V5cywgcHJpbWFyeUtl
eS5nZXQoKSwgZXJyb3JNZXNzYWdlKTsKICAgICAgICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNz
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIWNhbkFkZEtleXMpCkBA
IC00NzUsNyArNDQ3LDggQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRl
eEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGMKICAgICBWZWN0b3I8T3du
UHRyPEluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdl
OwogICAgIGJvb2wgb2JleXNDb25zdHJhaW50cyA9IGZhbHNlOwotICAgIGJvb2wgYmFja2luZ1N0
b3JlU3VjY2VzcyA9IG1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIHRoaXMsIHByaW1hcnlL
ZXksIGZhbHNlLCBpbmRleElkcywgaW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNz
YWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBzdG9y
ZSA9IGJhY2tpbmdTdG9yZSgpOworICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IG1ha2VJ
bmRleFdyaXRlcnModHJhbnNhY3Rpb24sIHN0b3JlLmdldCgpLCBkYXRhYmFzZUlkKCksIG1ldGFk
YXRhKCksIHByaW1hcnlLZXksIGZhbHNlLCBpbmRleElkcywgaW5kZXhLZXlzLCAmaW5kZXhXcml0
ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKICAgICBpZiAoIWJhY2tpbmdT
dG9yZVN1Y2Nlc3MpIHsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwg
ZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5cy4iKSk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTUzMSwxMCArNTA0LDEyIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0
CiAKICAgICBBU1NFUlQobV9rZXkgJiYgbV9rZXktPmlzVmFsaWQoKSk7CiAKKyAgICBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBtX29iamVjdFN0b3JlLT5tZXRh
ZGF0YSgpOwogICAgIElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciByZWNvcmRJZGVu
dGlmaWVyOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG1fb2Jq
ZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpOwogICAgIGlmIChtX3B1dE1vZGUgPT0gQWRkT25seSkg
ewogICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgb2sgPSBtX29iamVj
dFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlv
bi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgp
LCBtX29iamVjdFN0b3JlLT5pZCgpLCAqbV9rZXksICZyZWNvcmRJZGVudGlmaWVyLCBmb3VuZCk7
CisgICAgICAgIGJvb2wgb2sgPSBiYWNraW5nU3RvcmUtPmtleUV4aXN0c0luT2JqZWN0U3RvcmUo
dHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRh
dGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgKm1fa2V5LCAmcmVjb3JkSWRlbnRpZmll
ciwgZm91bmQpOwogICAgICAgICBpZiAoIW9rKSB7CiAgICAgICAgICAgICBtX2NhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVu
a25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNoZWNraW5nIGtleSBleGlzdGVuY2UuIikpOwog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTQ4LDcgKzUyMyw3IEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRy
YW5zYWN0CiAgICAgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CiAg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKICAgICBib29sIG9iZXlzQ29uc3RyYWludHMgPSBmYWxz
ZTsKLSAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtYWtlSW5kZXhXcml0ZXJzKHRyYW5z
YWN0aW9uLCBtX29iamVjdFN0b3JlLmdldCgpLCBtX2tleSwga2V5V2FzR2VuZXJhdGVkLCAqbV9w
b3BJbmRleElkcywgKm1fcG9wSW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdl
LCBvYmV5c0NvbnN0cmFpbnRzKTsKKyAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtYWtl
SW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fb2JqZWN0U3Rv
cmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwgbV9rZXksIGtleVdhc0dlbmVy
YXRlZCwgKm1fcG9wSW5kZXhJZHMsICptX3BvcEluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVy
cm9yTWVzc2FnZSwgb2JleXNDb25zdHJhaW50cyk7CiAgICAgaWYgKCFiYWNraW5nU3RvcmVTdWNj
ZXNzKSB7CiAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6
IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5cy4iKSk7CiAgICAgICAgIHJl
dHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAppbmRleCBjMmRlNDc0OGZjZGFhN2MxNzRmN2U2
MDMzYTE2NzFlOTQ3YmIyOWNhLi40MzIyNjQxYWI5ZDM2Y2IxZDkwNTcxNTliYjM1NzUyY2Y3ODM1
ZGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCkBAIC05MCw2ICs5MCwzMSBAQCBwdWJsaWM6
CiAgICAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YWJhc2UtPmJhY2tpbmdTdG9yZSgpOyB9CiAgICAgaW50NjRfdCBkYXRhYmFz
ZUlkKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS0+aWQoKTsgfQogCisgICAgY2xhc3MgSW5k
ZXhXcml0ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgSW5kZXhXcml0ZXIoY29u
c3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKKyAgICAgICAgICAgIDogbV9pbmRl
eE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCisgICAgICAgIHsgfQorCisgICAgICAgIEluZGV4V3Jp
dGVyKGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEsIGNvbnN0IElEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzJiBpbmRleEtleXMpCisgICAgICAgICAg
ICA6IG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQorICAgICAgICAgICAgLCBtX2luZGV4
S2V5cyhpbmRleEtleXMpCisgICAgICAgIHsgfQorCisgICAgICAgIGJvb2wgdmVyaWZ5SW5kZXhL
ZXlzKElEQkJhY2tpbmdTdG9yZSYsIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBi
b29sJiBjYW5BZGRLZXlzLCBjb25zdCBJREJLZXkqIHByaW1hcnlLZXkgPSAwLCBTdHJpbmcqIGVy
cm9yTWVzc2FnZSA9IDApIFdBUk5fVU5VU0VEX1JFVFVSTjsKKworICAgICAgICB2b2lkIHdyaXRl
SW5kZXhLZXlzKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciYsIElEQkJh
Y2tpbmdTdG9yZSYsIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorCisg
ICAgICAgIGJvb2wgYWRkaW5nS2V5QWxsb3dlZChJREJCYWNraW5nU3RvcmUmLCBJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5KiBpbmRleEtleSwgY29uc3QgSURC
S2V5KiBwcmltYXJ5S2V5LCBib29sJiBhbGxvd2VkKSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk47
CisKKyAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7CisgICAg
ICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzIG1faW5kZXhLZXlz
OworICAgIH07CisKKyAgICBzdGF0aWMgYm9vbCBtYWtlSW5kZXhXcml0ZXJzKFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIElEQkJhY2tpbmdTdG9yZSosIGludDY0X3QgZGF0
YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIFBhc3NSZWZQdHI8SURCS2V5
PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+
JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6
SW5kZXhLZXlzPiYsIFZlY3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+ID4qIGluZGV4V3JpdGVycywg
U3RyaW5nKiBlcnJvck1lc3NhZ2UsIGJvb2wmIGNvbXBsZXRlZCkgV0FSTl9VTlVTRURfUkVUVVJO
OworCiBwcml2YXRlOgogICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbCosIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAppbmRleCAw
YTEyMTAxZDhlYTFlMDMyMjM4NDg3YjM5MTcwNzc1MmQ4ZGRkNGZiLi42NzRiMmQ0YTM4ZTkyZGZk
MmM0NmRlMzczYTZjOTJiMGI0MjkxMGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcApAQCAtNzAsNyArNzAsNyBAQCBJREJSZXF1ZXN0OjpJ
REJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURC
QW55PiBzb3VyYwogICAgICwgbV9zb3VyY2Uoc291cmNlKQogICAgICwgbV90YXNrVHlwZSh0YXNr
VHlwZSkKICAgICAsIG1faGFzUGVuZGluZ0FjdGl2aXR5KHRydWUpCi0gICAgLCBtX2N1cnNvclR5
cGUoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW52YWxpZEN1cnNvclR5cGUpCisgICAgLCBt
X2N1cnNvcktleU9ubHkoZmFsc2UpCiAgICAgLCBtX2N1cnNvckRpcmVjdGlvbihJREJDdXJzb3I6
Ok5FWFQpCiAgICAgLCBtX2N1cnNvckZpbmlzaGVkKGZhbHNlKQogICAgICwgbV9wZW5kaW5nQ3Vy
c29yKDApCkBAIC0xODIsMTEgKzE4MiwxMCBAQCB2b2lkIElEQlJlcXVlc3Q6OmFib3J0KCkKICAg
ICBtX3JlcXVlc3RBYm9ydGVkID0gdHJ1ZTsKIH0KIAotdm9pZCBJREJSZXF1ZXN0OjpzZXRDdXJz
b3JEZXRhaWxzKElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlw
ZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQordm9pZCBJREJSZXF1ZXN0OjpzZXRD
dXJzb3JEZXRhaWxzKGJvb2wga2V5T25seSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9u
KQogewogICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyk7Ci0gICAgQVNTRVJUKG1f
Y3Vyc29yVHlwZSA9PSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlw
ZSk7Ci0gICAgbV9jdXJzb3JUeXBlID0gY3Vyc29yVHlwZTsKKyAgICBtX2N1cnNvcktleU9ubHkg
PSBrZXlPbmx5OwogICAgIG1fY3Vyc29yRGlyZWN0aW9uID0gZGlyZWN0aW9uOwogfQogCkBAIC0y
MjUsNyArMjI0LDcgQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHRDdXJzb3IoUGFzc1JlZlB0
cjxJREJDdXJzb3I+IGN1cnNvciwgUGFzc1JlZlB0cjxJREJLZXkKICAgICBtX2N1cnNvclByaW1h
cnlLZXkgPSBwcmltYXJ5S2V5OwogICAgIG1fY3Vyc29yVmFsdWUgPSB2YWx1ZTsKIAotICAgIGlm
IChtX2N1cnNvclR5cGUgPT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJz
b3IpIHsKKyAgICBpZiAobV9jdXJzb3JLZXlPbmx5KSB7CiAgICAgICAgIG1fcmVzdWx0ID0gSURC
QW55OjpjcmVhdGUoY3Vyc29yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI4OCw5ICsy
ODcsOCBAQCB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIFBhc3NSZQogCiAgICAgRE9NUmVxdWVzdFN0YXRlOjpT
Y29wZSBzY29wZShtX3JlcXVlc3RTdGF0ZSk7CiAgICAgU2NyaXB0VmFsdWUgdmFsdWUgPSBkZXNl
cmlhbGl6ZUlEQlZhbHVlKHJlcXVlc3RTdGF0ZSgpLCBzZXJpYWxpemVkVmFsdWUpOwotICAgIEFT
U0VSVChtX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW52YWxpZEN1
cnNvclR5cGUpOwogICAgIFJlZlB0cjxJREJDdXJzb3I+IGN1cnNvcjsKLSAgICBpZiAobV9jdXJz
b3JUeXBlID09IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yKQorICAg
IGlmIChtX2N1cnNvcktleU9ubHkpCiAgICAgICAgIGN1cnNvciA9IElEQkN1cnNvcjo6Y3JlYXRl
KGJhY2tlbmQsIG1fY3Vyc29yRGlyZWN0aW9uLCB0aGlzLCBtX3NvdXJjZS5nZXQoKSwgbV90cmFu
c2FjdGlvbi5nZXQoKSk7CiAgICAgZWxzZQogICAgICAgICBjdXJzb3IgPSBJREJDdXJzb3JXaXRo
VmFsdWU6OmNyZWF0ZShiYWNrZW5kLCBtX2N1cnNvckRpcmVjdGlvbiwgdGhpcywgbV9zb3VyY2Uu
Z2V0KCksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCUmVxdWVzdC5oCmluZGV4IGIyMTE4MjBiYzM4ZjkyNzc1YWM3NzQ1NTNiMTZl
NzNkMDYxOGYzZjQuLjc1NDJkZjY0ZTRlOTUyMDU5Y2Y1NzI5OWIwMGQxOGY2ZDJiNTM4ODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgKQEAgLTgx
LDcgKzgxLDcgQEAgcHVibGljOgogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIo
ZXJyb3IpOwogCiAgICAgdm9pZCBtYXJrRWFybHlEZWF0aCgpOwotICAgIHZvaWQgc2V0Q3Vyc29y
RGV0YWlscyhJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlLCBJREJDdXJzb3I6
OkRpcmVjdGlvbik7CisgICAgdm9pZCBzZXRDdXJzb3JEZXRhaWxzKGJvb2wga2V5T25seSwgSURC
Q3Vyc29yOjpEaXJlY3Rpb24pOwogICAgIHZvaWQgc2V0UGVuZGluZ0N1cnNvcihQYXNzUmVmUHRy
PElEQkN1cnNvcj4pOwogICAgIHZvaWQgZmluaXNoQ3Vyc29yKCk7CiAgICAgdm9pZCBhYm9ydCgp
OwpAQCAtMTUwLDcgKzE1MCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZlB0cjxFdmVudD4g
PiBtX2VucXVldWVkRXZlbnRzOwogCiAgICAgLy8gT25seSB1c2VkIGlmIHRoZSByZXN1bHQgdHlw
ZSB3aWxsIGJlIGEgY3Vyc29yLgotICAgIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNv
clR5cGUgbV9jdXJzb3JUeXBlOworICAgIGJvb2wgbV9jdXJzb3JLZXlPbmx5OwogICAgIElEQkN1
cnNvcjo6RGlyZWN0aW9uIG1fY3Vyc29yRGlyZWN0aW9uOwogICAgIGJvb2wgbV9jdXJzb3JGaW5p
c2hlZDsKICAgICBSZWZQdHI8SURCQ3Vyc29yPiBtX3BlbmRpbmdDdXJzb3I7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180230</attachid>
            <date>2012-12-19 14:54:47 -0800</date>
            <delta_ts>2012-12-19 16:13:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105449-20121219145204.patch</filename>
            <type>text/plain</type>
            <size>27835</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjg3ZjA0MTIzMTBkZmY2
NmYwOGI2NjMwYjRiZmQ3Mjc4YTYyYTljYy4uMWIxOWU0MDlkMjk5YmYyNTlhNGUwZTkzMjUyNmQ2
YzFkNjA1ZTYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTEyLTE5ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IEN1
cnNvciBhbmQgSW5kZXhXcml0ZXIgY2xlYW51cCBmb3IgcmVmYWN0b3IKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTQ0OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBjbGVhbnVwIG9mIHNv
bWUgY29kZSB0byBtYWtlIHRoZSByZWZhY3RvciB0aGF0IGlzIGNvbWluZworICAgICAgICBpbiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyNzQxIGNsZWFuZXIuIFNv
bWUKKyAgICAgICAgQ3Vyc29yVHlwZSBhc3NlcnRpb25zIGhhdmUgYmVlbiByZW1vdmVkIGJlY2F1
c2UgdGhlIGNvZGUgd2lsbCBiZQorICAgICAgICB1c2VkIGluIG1vcmUgZ2VuZXJpYyBjaXJjdW1z
dGFuY2VzIGluIGEgZnV0dXJlIHBhdGNoLgorCisgICAgICAgIFRoZSBwcmV2aW91c2x5LXByaXZh
dGUgSW5kZXhXcml0ZXIgaGFzIGJlZW4gcHVsbGVkIGludG8KKyAgICAgICAgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbCBhbmQgbWFkZSB0byBqdXN0IHVzZSBJREIqTWV0YWRhdGEKKyAgICAgICAg
c28gaXQgY2FuIGJlIHJldXNlZCBsYXRlci4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhp
cyBkb2VzIG5vdCBjaGFuZ2UgdGhlIGxvZ2ljIG9mIGV4ZWN1dGluZyBjb2RlLgorCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tlbmRJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JQcmVmZXRjaEl0ZXJh
dGlvbk9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJ
bXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OnZh
bHVlKToKKyAgICAgICAgKElEQkN1cnNvckJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QkluZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJh
dGlvbjo6T3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uKToKKyAgICAgICAgKElEQkluZGV4QmFja2Vu
ZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleEJhY2tlbmRJbXBsOjpPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OnBlcmZvcm0pOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6
OnZlcmlmeUluZGV4S2V5cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpJbmRleFdyaXRlcjo6d3JpdGVJbmRleEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6OmFkZGluZ0tleUFsbG93ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6bWFrZUluZGV4
V3JpdGVycyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5oOgorICAgICAgICAoSW5kZXhXcml0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6OkluZGV4V3JpdGVyKToKKyAgICAg
ICAgKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6SURCUmVx
dWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRDdXJzb3JEZXRhaWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldFJlc3VsdEN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQlJlcXVlc3QuaDoKKyAgICAgICAgKElEQlJlcXVlc3QpOgorCiAyMDEyLTEyLTE5
ICBUb21teSBXaWRlbmZseWNodCAgPHRvbW15d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0pT
Q10gQWRkIHN1cHBvcnQgZm9yIG92ZXJsb2FkZWQgY29uc3RydWN0b3JzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5j
cHAKaW5kZXggMmM0NmIxZDVlZTljZjJlOGQ0ODYxNzk3ZTA4YzA1MzVkYmMyMmNlOC4uMzA3NDMz
ZmQyYmZkZDExNWU3ZWVjMGM0MWEzZTAwMWRlODZmZjA5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcApA
QCAtMTAxLDEwICsxMDEsMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBt
X2NhbGxiYWNrczsKIH07CiAKLUlEQkN1cnNvckJhY2tlbmRJbXBsOjpJREJDdXJzb3JCYWNrZW5k
SW1wbChQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIEN1cnNvclR5
cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0
YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24sIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwqIG9iamVjdFN0b3JlKQorSURCQ3Vyc29yQmFja2VuZEltcGw6OklE
QkN1cnNvckJhY2tlbmRJbXBsKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1
cnNvciwgYm9vbCBrZXlPbmx5LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tU
eXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiwgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUpCiAgICAgOiBtX2N1cnNvcihjdXJz
b3IpCiAgICAgLCBtX3Rhc2tUeXBlKHRhc2tUeXBlKQotICAgICwgbV9jdXJzb3JUeXBlKGN1cnNv
clR5cGUpCisgICAgLCBtX2tleU9ubHkoa2V5T25seSkKICAgICAsIG1fdHJhbnNhY3Rpb24odHJh
bnNhY3Rpb24pCiAgICAgLCBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQogICAgICwgbV9jbG9z
ZWQoZmFsc2UpCkBAIC0yMDgsMTQgKzIwOCwxNCBAQCB2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBs
OjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdAog
ICAgICAgICBmb3VuZEtleXMuYXBwZW5kKG1fY3Vyc29yLT5tX2N1cnNvci0+a2V5KCkpOwogICAg
ICAgICBmb3VuZFByaW1hcnlLZXlzLmFwcGVuZChtX2N1cnNvci0+bV9jdXJzb3ItPnByaW1hcnlL
ZXkoKSk7CiAKLSAgICAgICAgaWYgKG1fY3Vyc29yLT5tX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpCisgICAgICAgIGlmICghbV9jdXJzb3It
Pm1fa2V5T25seSkKICAgICAgICAgICAgIGZvdW5kVmFsdWVzLmFwcGVuZChTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXMobV9jdXJzb3ItPm1fY3Vyc29yLT52YWx1ZSgp
KSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZvdW5kVmFsdWVzLmFwcGVuZChTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgpKTsKIAogICAgICAgICBzaXplRXN0aW1hdGUgKz0gbV9j
dXJzb3ItPm1fY3Vyc29yLT5rZXkoKS0+c2l6ZUVzdGltYXRlKCk7CiAgICAgICAgIHNpemVFc3Rp
bWF0ZSArPSBtX2N1cnNvci0+bV9jdXJzb3ItPnByaW1hcnlLZXkoKS0+c2l6ZUVzdGltYXRlKCk7
Ci0gICAgICAgIGlmIChtX2N1cnNvci0+bV9jdXJzb3JUeXBlICE9IElEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yKQorICAgICAgICBpZiAoIW1fY3Vyc29yLT5tX2tleU9u
bHkpCiAgICAgICAgICAgICBzaXplRXN0aW1hdGUgKz0gbV9jdXJzb3ItPm1fY3Vyc29yLT52YWx1
ZSgpLnNpemUoKTsKIAogICAgICAgICBpZiAoc2l6ZUVzdGltYXRlID4gbWF4U2l6ZUVzdGltYXRl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
QmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ckJhY2tlbmRJbXBsLmgKaW5kZXggODdhYzE3OGY0ZTZiNjBmNjMyZWJmN2QzM2NmYmRjOGUxNzcw
OTdjNC4uNDkzYjZkZTQ3MDRkM2Y4Y2Q4YjhkZjJmNDhkNzg2NDk1ZGE5OTU0MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5k
SW1wbC5oCkBAIC00NywxMyArNDcsMTMgQEAgY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDsKIAogY2xhc3MgSURCQ3Vyc29yQmFja2VuZEltcGwgOiBwdWJsaWMgSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZEltcGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJz
b3IsIEN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJh
bnNhY3Rpb24sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqIG9iamVjdFN0b3JlKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjcmVhdGUoUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY3Vyc29yLCBib29sIGtleU9ubHksIElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBv
YmplY3RTdG9yZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29y
QmFja2VuZEltcGwoY3Vyc29yLCBjdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U6Ok5vcm1hbFRhc2ssIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZSkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvckJhY2tlbmRJbXBsKGN1cnNvciwga2V5T25seSwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpOb3JtYWxUYXNrLCB0cmFuc2FjdGlvbiwg
b2JqZWN0U3RvcmUpKTsKICAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZEltcGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJz
b3IsIEN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
OjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rp
b24sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqIG9iamVjdFN0b3JlKQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gY3Vyc29yLCBib29sIGtleU9ubHksIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwqIHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFja2VuZEltcGwo
Y3Vyc29yLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFja2VuZEltcGwoY3Vyc29y
LCBrZXlPbmx5LCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlKSk7CiAgICAgfQog
ICAgIHZpcnR1YWwgfklEQkN1cnNvckJhY2tlbmRJbXBsKCk7CiAKQEAgLTY3LDExICs2NywxMSBA
QCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3QgeyByZXR1cm4g
bV9jdXJzb3ItPmtleSgpOyB9CiAgICAgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBj
b25zdCB7IHJldHVybiBtX2N1cnNvci0+cHJpbWFyeUtleSgpOyB9Ci0gICAgUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gKG1fY3Vyc29yVHlw
ZSA9PSBJbmRleEtleUN1cnNvcikgPyAwIDogU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVG
cm9tV2lyZUJ5dGVzKG1fY3Vyc29yLT52YWx1ZSgpKTsgfQorICAgIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5T25seSA/IDAgOiBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXMobV9jdXJzb3ItPnZhbHVl
KCkpOyB9CiAgICAgdm9pZCBjbG9zZSgpOwogCiBwcml2YXRlOgotICAgIElEQkN1cnNvckJhY2tl
bmRJbXBsKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+LCBDdXJzb3JUeXBlLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsKiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCopOworICAgIElEQkN1cnNvckJh
Y2tlbmRJbXBsKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+LCBib29sIGtleU9u
bHksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKik7CiAKICAgICBjbGFz
cyBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb247CiAgICAgY2xhc3MgQ3Vyc29yQWR2YW5jZU9wZXJh
dGlvbjsKQEAgLTgwLDcgKzgwLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCQmFja2luZ1N0
b3JlOjpDdXJzb3I+IG1fY3Vyc29yOwogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4gbV9zYXZlZEN1cnNvcjsKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRh
c2tUeXBlIG1fdGFza1R5cGU7Ci0gICAgQ3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7CisgICAgYm9v
bCBtX2tleU9ubHk7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IG1fdHJh
bnNhY3Rpb247CiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0
U3RvcmU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkluZGV4QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKaW5kZXggNzRhYjU5MDZhYzhjNWU4NDFhY2JmNmYwZGEy
MTc5ODk1OGE5OTM2MC4uNDU4MjZmOTJjYmVmYWUxZjAzY2E4Nzk0YTZmM2E5NGNjZDdlODdlOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNr
ZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5k
ZXhCYWNrZW5kSW1wbC5jcHAKQEAgLTQ0LDE3ICs0NCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIElEQkluZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbiA6
IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
bj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWdu
ZWQgc2hvcnQgZGlyZWN0aW9uLCBib29sIGtleU9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9wZW5JbmRl
eEN1cnNvck9wZXJhdGlvbihpbmRleCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yVHlwZSwg
Y2FsbGJhY2tzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT3BlbkluZGV4Q3Vyc29y
T3BlcmF0aW9uKGluZGV4LCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBrZXlPbmx5LCBjYWxsYmFja3Mp
KTsKICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCopOwogcHJpdmF0ZToKLSAgICBPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb24oUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQorICAgIE9wZW5JbmRleEN1cnNvck9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWdu
ZWQgc2hvcnQgZGlyZWN0aW9uLCBib29sIGtleU9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCiAgICAgICAgIDogbV9pbmRleChpbmRleCkKICAgICAgICAgLCBtX2tleVJh
bmdlKGtleVJhbmdlKQogICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKLSAgICAgICAg
LCBtX2N1cnNvclR5cGUoY3Vyc29yVHlwZSkKKyAgICAgICAgLCBtX2tleU9ubHkoa2V5T25seSkK
ICAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCiAgICAgewogICAgIH0KQEAgLTYyLDcg
KzYyLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRl
eDsKICAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CiAgICAgdW5zaWduZWQgc2hv
cnQgbV9kaXJlY3Rpb247Ci0gICAgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlw
ZSBtX2N1cnNvclR5cGU7CisgICAgYm9vbCBtX2tleU9ubHk7CiAgICAgUmVmUHRyPElEQkNhbGxi
YWNrcz4gbV9jYWxsYmFja3M7CiB9OwogCkBAIC0xNDUsMjUgKzE0NSwxNyBAQCB2b2lkIElEQklu
ZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFu
c2FjdGlvbkJhY2tlbgogCiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNr
aW5nU3RvcmVDdXJzb3I7CiAKLSAgICBzd2l0Y2ggKG1fY3Vyc29yVHlwZSkgewotICAgIGNhc2Ug
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3I6CisgICAgaWYgKG1fa2V5
T25seSkKICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9pbmRleC0+YmFja2luZ1N0b3Jl
KCktPm9wZW5JbmRleEtleUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgbV9pbmRleC0+ZGF0YWJhc2VJZCgpLCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2Vu
ZC0+aWQoKSwgbV9pbmRleC0+aWQoKSwgbV9rZXlSYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEN1
cnNvcjoKKyAgICBlbHNlCiAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1faW5kZXgtPmJh
Y2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKCksIG1faW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9pbmRleC0+bV9vYmplY3RTdG9y
ZUJhY2tlbmQtPmlkKCksIG1faW5kZXgtPmlkKCksIG1fa2V5UmFuZ2UuZ2V0KCksIGRpcmVjdGlv
bik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6
T2JqZWN0U3RvcmVDdXJzb3I6Ci0gICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJ
bnZhbGlkQ3Vyc29yVHlwZToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KIAogICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7CiAgICAgICAg
IG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2VyaWFsaXplZFNjcmlwdFZhbHVl
Kj4oMCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPElEQkN1cnNvckJh
Y2tlbmRJbXBsPiBjdXJzb3IgPSBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKGJhY2tpbmdT
dG9yZUN1cnNvci5nZXQoKSwgbV9jdXJzb3JUeXBlLCB0cmFuc2FjdGlvbiwgbV9pbmRleC0+bV9v
YmplY3RTdG9yZUJhY2tlbmQpOworICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vy
c29yID0gSURCQ3Vyc29yQmFja2VuZEltcGw6OmNyZWF0ZShiYWNraW5nU3RvcmVDdXJzb3IuZ2V0
KCksIG1fa2V5T25seSwgdHJhbnNhY3Rpb24sIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5k
KTsKICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vyc29yLT5rZXkoKSwgY3Vy
c29yLT5wcmltYXJ5S2V5KCksIGN1cnNvci0+dmFsdWUoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5jcHAKaW5kZXggMThkMjZjZjZlNGE0Y2E5YWRiYTZmYzMxMWQ4NDI5ZDIyNDY2NzE4
MC4uZmQ4NDVkMTQ4YWE3OTM0MjlmNjY0ZmU2OGU1MzU5ZWViNmMxODgzNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5jcHAKQEAgLTM0Myw3NSArMzQzLDUwIEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1
ZSwgUGFzCiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKIH0KIAotbmFtZXNwYWNlIHsK
LWNsYXNzIEluZGV4V3JpdGVyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBJbmRleFdyaXRlcihj
b25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgICAgICA6IG1faW5kZXhN
ZXRhZGF0YShpbmRleE1ldGFkYXRhKQotICAgIHsgfQotCi0gICAgSW5kZXhXcml0ZXIoY29uc3Qg
SURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSwKLSAgICAgICAgICAgICAgICBjb25zdCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cyYgaW5kZXhLZXlzKQotICAg
ICAgICA6IG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQotICAgICAgICAsIG1faW5kZXhL
ZXlzKGluZGV4S2V5cykKLSAgICB7IH0KLQotICAgIGJvb2wgdmVyaWZ5SW5kZXhLZXlzKElEQkJh
Y2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwKLSAgICAgICAgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgYm9vbCYgY2FuQWRkS2V5cywKLSAgICAgICAgY29uc3Qg
SURCS2V5KiBwcmltYXJ5S2V5ID0gMCwgU3RyaW5nKiBlcnJvck1lc3NhZ2UgPSAwKSBXQVJOX1VO
VVNFRF9SRVRVUk4KLSAgICB7Ci0gICAgICAgIGNhbkFkZEtleXMgPSBmYWxzZTsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgYm9vbCBvayA9IGFkZGluZ0tleUFsbG93ZWQoYmFja2luZ1N0b3JlLCB0cmFuc2FjdGlv
biwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKG1faW5kZXhLZXlzKVtpXS5n
ZXQoKSwgcHJpbWFyeUtleSwgY2FuQWRkS2V5cyk7Ci0gICAgICAgICAgICBpZiAoIW9rKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghY2FuQWRkS2V5cykg
ewotICAgICAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UpCi0gICAgICAgICAgICAgICAgICAg
ICplcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxlIHRvIGFkZCBrZXkgdG8gaW5k
ZXggJyVzJzogYXQgbGVhc3Qgb25lIGtleSBkb2VzIG5vdCBzYXRpc2Z5IHRoZSB1bmlxdWVuZXNz
IHJlcXVpcmVtZW50cy4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbmRleE1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Citib29sIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OkluZGV4V3JpdGVyOjp2ZXJpZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3Jl
JiBiYWNraW5nU3RvcmUsIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBib29sJiBjYW5BZGRLZXlzLCBjb25zdCBJREJLZXkqIHByaW1hcnlLZXksIFN0cmluZyog
ZXJyb3JNZXNzYWdlKQoreworICAgIGNhbkFkZEtleXMgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1faW5kZXhLZXlzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGJvb2wgb2sg
PSBhZGRpbmdLZXlBbGxvd2VkKGJhY2tpbmdTdG9yZSwgdHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIChtX2luZGV4S2V5cylbaV0uZ2V0KCksIHByaW1hcnlL
ZXksIGNhbkFkZEtleXMpOworICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAoIWNhbkFkZEtleXMpIHsKKyAgICAgICAgICAgIGlmIChlcnJvck1l
c3NhZ2UpCisgICAgICAgICAgICAgICAgKmVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJV
bmFibGUgdG8gYWRkIGtleSB0byBpbmRleCAnJXMnOiBhdCBsZWFzdCBvbmUga2V5IGRvZXMgbm90
IHNhdGlzZnkgdGhlIHVuaXF1ZW5lc3MgcmVxdWlyZW1lbnRzLiIsIG1faW5kZXhNZXRhZGF0YS5u
YW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
LSAgICAgICAgY2FuQWRkS2V5cyA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
KyAgICBjYW5BZGRLZXlzID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIHZvaWQg
d3JpdGVJbmRleEtleXMoY29uc3QgSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyJiBy
ZWNvcmRJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkKSBjb25zdAotICAgIHsKLSAgICAgICAgaW50NjRfdCBpbmRleElk
ID0gbV9pbmRleE1ldGFkYXRhLmlkOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
aW5kZXhLZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBiYWNraW5nU3RvcmUucHV0SW5k
ZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBp
bmRleElkLCAqKG1faW5kZXhLZXlzKVtpXS5nZXQoKSwgcmVjb3JkSWRlbnRpZmllcik7Ci0gICAg
ICAgIH0KK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6OndyaXRl
SW5kZXhLZXlzKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciYgcmVjb3Jk
SWRlbnRpZmllciwgSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkgY29uc3QKK3sKKyAgICBpbnQ2NF90IGluZGV4SWQgPSBtX2luZGV4TWV0
YWRhdGEuaWQ7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7
ICsraSkgeworICAgICAgICBiYWNraW5nU3RvcmUucHV0SW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5z
YWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqKG1faW5kZXhLZXlz
KVtpXS5nZXQoKSwgcmVjb3JkSWRlbnRpZmllcik7CiAgICAgfQorfQogCi1wcml2YXRlOgotCi0g
ICAgYm9vbCBhZGRpbmdLZXlBbGxvd2VkKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwKLSAgICAgICAgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwKLSAg
ICAgICAgY29uc3QgSURCS2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBi
b29sJiBhbGxvd2VkKSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk4KLSAgICB7Ci0gICAgICAgIGFs
bG93ZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFtX2luZGV4TWV0YWRhdGEudW5pcXVlKSB7Ci0g
ICAgICAgICAgICBhbGxvd2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgUmVmUHRyPElEQktleT4gZm91bmRQcmltYXJ5S2V5OwotICAgICAg
ICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgb2sgPSBiYWNraW5nU3RvcmUua2V5
RXhpc3RzSW5JbmRleCh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5k
ZXhJZCwgKmluZGV4S2V5LCBmb3VuZFByaW1hcnlLZXksIGZvdW5kKTsKLSAgICAgICAgaWYgKCFv
aykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFmb3VuZCB8fCAocHJp
bWFyeUtleSAmJiBmb3VuZFByaW1hcnlLZXktPmlzRXF1YWwocHJpbWFyeUtleSkpKQotICAgICAg
ICAgICAgYWxsb3dlZCA9IHRydWU7Citib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Oklu
ZGV4V3JpdGVyOjphZGRpbmdLZXlBbGxvd2VkKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3Jl
LCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBib29sJiBhbGxvd2VkKSBj
b25zdAoreworICAgIGFsbG93ZWQgPSBmYWxzZTsKKyAgICBpZiAoIW1faW5kZXhNZXRhZGF0YS51
bmlxdWUpIHsKKyAgICAgICAgYWxsb3dlZCA9IHRydWU7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwotICAg
IElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzIG1faW5kZXhLZXlzOwot
fTsKKyAgICBSZWZQdHI8SURCS2V5PiBmb3VuZFByaW1hcnlLZXk7CisgICAgYm9vbCBmb3VuZCA9
IGZhbHNlOworICAgIGJvb2wgb2sgPSBiYWNraW5nU3RvcmUua2V5RXhpc3RzSW5JbmRleCh0cmFu
c2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKmluZGV4S2V5LCBm
b3VuZFByaW1hcnlLZXksIGZvdW5kKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKCFmb3VuZCB8fCAocHJpbWFyeUtleSAmJiBmb3VuZFByaW1hcnlLZXktPmlz
RXF1YWwocHJpbWFyeUtleSkpKQorICAgICAgICBhbGxvd2VkID0gdHJ1ZTsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotV0FSTl9VTlVTRURfUkVUVVJOIHN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRl
cnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBw
cmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBp
bmRleElkcywgY29uc3QgVmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5k
ZXhLZXlzPiYgaW5kZXhLZXlzLCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdy
aXRlcnMsIFN0cmluZyogZXJyb3JNZXNzYWdlLCBib29sJiBjb21wbGV0ZWQpCitib29sIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6Om1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlKiBiYWNraW5n
U3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYg
b2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dl
bmVyYXRlZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBWZWN0
b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJyb3JNZXNz
YWdlLCBib29sJiBjb21wbGV0ZWQpCiB7CiAgICAgQVNTRVJUKGluZGV4SWRzLnNpemUoKSA9PSBp
bmRleEtleXMuc2l6ZSgpKTsKICAgICBjb21wbGV0ZWQgPSBmYWxzZTsKQEAgLTQyMCwyMyArMzk1
LDE4IEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBtYWtlSW5kZXhXcml0ZXJzKFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBpbmRleElkcy5zaXplKCk7ICsraSkKICAgICAgICAgaW5kZXhLZXlNYXAuYWRkKGluZGV4SWRz
W2ldLCBpbmRleEtleXNbaV0pOwogCi0gICAgZm9yIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+aXRlckluZGV4ZXNCZWdpbigp
OyBpdCAhPSBvYmplY3RTdG9yZS0+aXRlckluZGV4ZXNFbmQoKTsgKytpdCkgeworICAgIGZvciAo
SURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gb2Jq
ZWN0U3RvcmUuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS5pbmRleGVzLmVuZCgp
OyArK2l0KSB7CiAKLSAgICAgICAgY29uc3QgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBp
bmRleCA9IGl0LT52YWx1ZTsKKyAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXgg
PSBpdC0+dmFsdWU7CiAKICAgICAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJ
bmRleEtleXMga2V5cyA9IGluZGV4S2V5TWFwLmdldChpdC0+a2V5KTsKICAgICAgICAgLy8gSWYg
dGhlIG9iamVjdFN0b3JlIGlzIHVzaW5nIGF1dG9JbmNyZW1lbnQsIHRoZW4gYW55IGluZGV4ZXMg
d2l0aCBhbiBpZGVudGljYWwga2V5UGF0aCBuZWVkIHRvIGFsc28gdXNlIHRoZSBwcmltYXJ5IChn
ZW5lcmF0ZWQpIGtleSBhcyBhIGtleS4KLSAgICAgICAgaWYgKGtleVdhc0dlbmVyYXRlZCkgewot
ICAgICAgICAgICAgY29uc3QgSURCS2V5UGF0aCYgaW5kZXhLZXlQYXRoID0gaW5kZXgtPmtleVBh
dGgoKTsKLSAgICAgICAgICAgIGlmIChpbmRleEtleVBhdGggPT0gb2JqZWN0U3RvcmUtPmtleVBh
dGgoKSkKLSAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZChwcmltYXJ5S2V5KTsKLSAgICAgICAg
fQorICAgICAgICBpZiAoa2V5V2FzR2VuZXJhdGVkICYmIChpbmRleC5rZXlQYXRoID09IG9iamVj
dFN0b3JlLmtleVBhdGgpKQorICAgICAgICAgICAga2V5cy5hcHBlbmQocHJpbWFyeUtleSk7CiAK
LSAgICAgICAgT3duUHRyPEluZGV4V3JpdGVyPiBpbmRleFdyaXRlcihhZG9wdFB0cihuZXcgSW5k
ZXhXcml0ZXIoaW5kZXgtPm1ldGFkYXRhKCksIGtleXMpKSk7CisgICAgICAgIE93blB0cjxJbmRl
eFdyaXRlcj4gaW5kZXhXcml0ZXIoYWRvcHRQdHIobmV3IEluZGV4V3JpdGVyKGluZGV4LCBrZXlz
KSkpOwogICAgICAgICBib29sIGNhbkFkZEtleXMgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBiYWNr
aW5nU3RvcmVTdWNjZXNzID0gaW5kZXhXcml0ZXItPnZlcmlmeUluZGV4S2V5cygqb2JqZWN0U3Rv
cmUtPmJhY2tpbmdTdG9yZSgpLAotICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksCi0gICAgICAgICAgICBv
YmplY3RTdG9yZS0+aWQoKSwgaW5kZXgtPmlkKCksIGNhbkFkZEtleXMsIHByaW1hcnlLZXkuZ2V0
KCksIGVycm9yTWVzc2FnZSk7CisgICAgICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IGlu
ZGV4V3JpdGVyLT52ZXJpZnlJbmRleEtleXMoKmJhY2tpbmdTdG9yZSwgdHJhbnNhY3Rpb24tPmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlLmlkLCBpbmRl
eC5pZCwgY2FuQWRkS2V5cywgcHJpbWFyeUtleS5nZXQoKSwgZXJyb3JNZXNzYWdlKTsKICAgICAg
ICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBpZiAoIWNhbkFkZEtleXMpCkBAIC00NzUsNyArNDQ1LDggQEAgdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFBy
aW1hcnlLZXksIGMKICAgICBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVy
czsKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwogICAgIGJvb2wgb2JleXNDb25zdHJhaW50cyA9
IGZhbHNlOwotICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IG1ha2VJbmRleFdyaXRlcnMo
dHJhbnNhY3Rpb24sIHRoaXMsIHByaW1hcnlLZXksIGZhbHNlLCBpbmRleElkcywgaW5kZXhLZXlz
LCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKKyAgICBS
ZWZQdHI8SURCQmFja2luZ1N0b3JlPiBzdG9yZSA9IGJhY2tpbmdTdG9yZSgpOworICAgIGJvb2wg
YmFja2luZ1N0b3JlU3VjY2VzcyA9IG1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIHN0b3Jl
LmdldCgpLCBkYXRhYmFzZUlkKCksIG1ldGFkYXRhKCksIHByaW1hcnlLZXksIGZhbHNlLCBpbmRl
eElkcywgaW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0
cmFpbnRzKTsKICAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKICAgICAgICAgdHJhbnNh
Y3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBk
YXRpbmcgaW5kZXgga2V5cy4iKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTUzMSwxMCArNTAyLDEy
IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdlT3Bl
cmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0CiAKICAgICBBU1NFUlQobV9rZXkgJiYgbV9rZXkt
PmlzVmFsaWQoKSk7CiAKKyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlTWV0
YWRhdGEgPSBtX29iamVjdFN0b3JlLT5tZXRhZGF0YSgpOwogICAgIElEQkJhY2tpbmdTdG9yZTo6
UmVjb3JkSWRlbnRpZmllciByZWNvcmRJZGVudGlmaWVyOworICAgIFJlZlB0cjxJREJCYWNraW5n
U3RvcmU+IGJhY2tpbmdTdG9yZSA9IG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpOwogICAg
IGlmIChtX3B1dE1vZGUgPT0gQWRkT25seSkgewogICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7
Ci0gICAgICAgIGJvb2wgb2sgPSBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+a2V5RXhp
c3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
bV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCAqbV9rZXks
ICZyZWNvcmRJZGVudGlmaWVyLCBmb3VuZCk7CisgICAgICAgIGJvb2wgb2sgPSBiYWNraW5nU3Rv
cmUtPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQo
KSwgKm1fa2V5LCAmcmVjb3JkSWRlbnRpZmllciwgZm91bmQpOwogICAgICAgICBpZiAoIW9rKSB7
CiAgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNo
ZWNraW5nIGtleSBleGlzdGVuY2UuIikpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTQ4LDcg
KzUyMSw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9y
YWdlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0CiAgICAgVmVjdG9yPE93blB0cjxJbmRl
eFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKICAgICBi
b29sIG9iZXlzQ29uc3RyYWludHMgPSBmYWxzZTsKLSAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nl
c3MgPSBtYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9uLCBtX29iamVjdFN0b3JlLmdldCgpLCBt
X2tleSwga2V5V2FzR2VuZXJhdGVkLCAqbV9wb3BJbmRleElkcywgKm1fcG9wSW5kZXhLZXlzLCAm
aW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKKyAgICBib29s
IGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9uLCBiYWNr
aW5nU3RvcmUuZ2V0KCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmVN
ZXRhZGF0YSwgbV9rZXksIGtleVdhc0dlbmVyYXRlZCwgKm1fcG9wSW5kZXhJZHMsICptX3BvcElu
ZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSwgb2JleXNDb25zdHJhaW50cyk7
CiAgICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7CiAgICAgICAgIG1fY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcg
aW5kZXgga2V5cy4iKSk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApp
bmRleCBjMmRlNDc0OGZjZGFhN2MxNzRmN2U2MDMzYTE2NzFlOTQ3YmIyOWNhLi41YTMyZmNlOTkw
MzRiOGE1ZDNlMzg5Yzg0NzNjN2Y4OTRkMzA1NzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5o
CkBAIC05MCw2ICs5MCwzMCBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UtPmJhY2tpbmdTdG9y
ZSgpOyB9CiAgICAgaW50NjRfdCBkYXRhYmFzZUlkKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFz
ZS0+aWQoKTsgfQogCisgICAgY2xhc3MgSW5kZXhXcml0ZXIgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgZXhwbGljaXQgSW5kZXhXcml0ZXIoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRh
ZGF0YSkKKyAgICAgICAgICAgIDogbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCisgICAg
ICAgIHsgfQorCisgICAgICAgIEluZGV4V3JpdGVyKGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGlu
ZGV4TWV0YWRhdGEsIGNvbnN0IElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhL
ZXlzJiBpbmRleEtleXMpCisgICAgICAgICAgICA6IG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFk
YXRhKQorICAgICAgICAgICAgLCBtX2luZGV4S2V5cyhpbmRleEtleXMpCisgICAgICAgIHsgfQor
CisgICAgICAgIGJvb2wgdmVyaWZ5SW5kZXhLZXlzKElEQkJhY2tpbmdTdG9yZSYsIElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBib29sJiBjYW5BZGRLZXlzLCBjb25zdCBJREJLZXkq
IHByaW1hcnlLZXkgPSAwLCBTdHJpbmcqIGVycm9yTWVzc2FnZSA9IDApIFdBUk5fVU5VU0VEX1JF
VFVSTjsKKworICAgICAgICB2b2lkIHdyaXRlSW5kZXhLZXlzKGNvbnN0IElEQkJhY2tpbmdTdG9y
ZTo6UmVjb3JkSWRlbnRpZmllciYsIElEQkJhY2tpbmdTdG9yZSYsIElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkg
Y29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBib29sIGFkZGluZ0tleUFsbG93ZWQoSURC
QmFja2luZ1N0b3JlJiwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleSogaW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFyeUtleSwgYm9vbCYgYWxsb3dlZCkg
Y29uc3QgV0FSTl9VTlVTRURfUkVUVVJOOworCisgICAgICAgIGNvbnN0IElEQkluZGV4TWV0YWRh
dGEgbV9pbmRleE1ldGFkYXRhOworICAgICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U6OkluZGV4S2V5cyBtX2luZGV4S2V5czsKKyAgICB9OworCisgICAgc3RhdGljIGJvb2wgbWFr
ZUluZGV4V3JpdGVycyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBJREJC
YWNraW5nU3RvcmUqLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0
YWRhdGEmLCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgYm9vbCBrZXlXYXNHZW5lcmF0
ZWQsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4mLCBWZWN0b3I8T3duUHRyPEluZGV4
V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJyb3JNZXNzYWdlLCBib29sJiBjb21w
bGV0ZWQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKwogcHJpdmF0ZToKICAgICBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsKGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEltcGwqLCBjb25zdCBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCUmVxdWVzdC5jcHAKaW5kZXggMGExMjEwMWQ4ZWExZTAzMjIzODQ4N2IzOTE3MDc3NTJk
OGRkZDRmYi4uYjAyYWVjN2ZiNDU2OTg1YTM2OTg3Y2JmMzQzMzRhZDk5MzFkZmY3OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKQEAgLTcw
LDcgKzcwLDcgQEAgSURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmMKICAgICAsIG1fc291cmNlKHNvdXJj
ZSkKICAgICAsIG1fdGFza1R5cGUodGFza1R5cGUpCiAgICAgLCBtX2hhc1BlbmRpbmdBY3Rpdml0
eSh0cnVlKQotICAgICwgbV9jdXJzb3JUeXBlKElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6Oklu
dmFsaWRDdXJzb3JUeXBlKQorICAgICwgbV9jdXJzb3JLZXlPbmx5KGZhbHNlKQogICAgICwgbV9j
dXJzb3JEaXJlY3Rpb24oSURCQ3Vyc29yOjpORVhUKQogICAgICwgbV9jdXJzb3JGaW5pc2hlZChm
YWxzZSkKICAgICAsIG1fcGVuZGluZ0N1cnNvcigwKQpAQCAtMTgyLDExICsxODIsMTEgQEAgdm9p
ZCBJREJSZXF1ZXN0OjphYm9ydCgpCiAgICAgbV9yZXF1ZXN0QWJvcnRlZCA9IHRydWU7CiB9CiAK
LXZvaWQgSURCUmVxdWVzdDo6c2V0Q3Vyc29yRGV0YWlscyhJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlv
bikKK3ZvaWQgSURCUmVxdWVzdDo6c2V0Q3Vyc29yRGV0YWlscyhib29sIGtleU9ubHksIElEQkN1
cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09
IFBFTkRJTkcpOwotICAgIEFTU0VSVChtX2N1cnNvclR5cGUgPT0gSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZTo6SW52YWxpZEN1cnNvclR5cGUpOwotICAgIG1fY3Vyc29yVHlwZSA9IGN1cnNvclR5
cGU7CisgICAgQVNTRVJUKCFtX3BlbmRpbmdDdXJzb3IpOworICAgIG1fY3Vyc29yS2V5T25seSA9
IGtleU9ubHk7CiAgICAgbV9jdXJzb3JEaXJlY3Rpb24gPSBkaXJlY3Rpb247CiB9CiAKQEAgLTIy
NSw3ICsyMjUsNyBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdEN1cnNvcihQYXNzUmVmUHRy
PElEQkN1cnNvcj4gY3Vyc29yLCBQYXNzUmVmUHRyPElEQktleQogICAgIG1fY3Vyc29yUHJpbWFy
eUtleSA9IHByaW1hcnlLZXk7CiAgICAgbV9jdXJzb3JWYWx1ZSA9IHZhbHVlOwogCi0gICAgaWYg
KG1fY3Vyc29yVHlwZSA9PSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNv
cikgeworICAgIGlmIChtX2N1cnNvcktleU9ubHkpIHsKICAgICAgICAgbV9yZXN1bHQgPSBJREJB
bnk6OmNyZWF0ZShjdXJzb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjg4LDkgKzI4
OCw5IEBAIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZT4gYmFja2VuZCwgUGFzc1JlCiAKICAgICBET01SZXF1ZXN0U3RhdGU6OlNj
b3BlIHNjb3BlKG1fcmVxdWVzdFN0YXRlKTsKICAgICBTY3JpcHRWYWx1ZSB2YWx1ZSA9IGRlc2Vy
aWFsaXplSURCVmFsdWUocmVxdWVzdFN0YXRlKCksIHNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgQVNT
RVJUKG1fY3Vyc29yVHlwZSAhPSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vy
c29yVHlwZSk7CisgICAgQVNTRVJUKCFtX3BlbmRpbmdDdXJzb3IpOwogICAgIFJlZlB0cjxJREJD
dXJzb3I+IGN1cnNvcjsKLSAgICBpZiAobV9jdXJzb3JUeXBlID09IElEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yKQorICAgIGlmIChtX2N1cnNvcktleU9ubHkpCiAgICAg
ICAgIGN1cnNvciA9IElEQkN1cnNvcjo6Y3JlYXRlKGJhY2tlbmQsIG1fY3Vyc29yRGlyZWN0aW9u
LCB0aGlzLCBtX3NvdXJjZS5nZXQoKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgZWxzZQog
ICAgICAgICBjdXJzb3IgPSBJREJDdXJzb3JXaXRoVmFsdWU6OmNyZWF0ZShiYWNrZW5kLCBtX2N1
cnNvckRpcmVjdGlvbiwgdGhpcywgbV9zb3VyY2UuZ2V0KCksIG1fdHJhbnNhY3Rpb24uZ2V0KCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVz
dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCmluZGV4
IGIyMTE4MjBiYzM4ZjkyNzc1YWM3NzQ1NTNiMTZlNzNkMDYxOGYzZjQuLjc1NDJkZjY0ZTRlOTUy
MDU5Y2Y1NzI5OWIwMGQxOGY2ZDJiNTM4ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgKQEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgogICAgIERF
RklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZXJyb3IpOwogCiAgICAgdm9pZCBtYXJrRWFy
bHlEZWF0aCgpOwotICAgIHZvaWQgc2V0Q3Vyc29yRGV0YWlscyhJREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlOjpDdXJzb3JUeXBlLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CisgICAgdm9pZCBzZXRD
dXJzb3JEZXRhaWxzKGJvb2wga2V5T25seSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOwogICAgIHZv
aWQgc2V0UGVuZGluZ0N1cnNvcihQYXNzUmVmUHRyPElEQkN1cnNvcj4pOwogICAgIHZvaWQgZmlu
aXNoQ3Vyc29yKCk7CiAgICAgdm9pZCBhYm9ydCgpOwpAQCAtMTUwLDcgKzE1MCw3IEBAIHByaXZh
dGU6CiAgICAgVmVjdG9yPFJlZlB0cjxFdmVudD4gPiBtX2VucXVldWVkRXZlbnRzOwogCiAgICAg
Ly8gT25seSB1c2VkIGlmIHRoZSByZXN1bHQgdHlwZSB3aWxsIGJlIGEgY3Vyc29yLgotICAgIElE
QkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOworICAgIGJv
b2wgbV9jdXJzb3JLZXlPbmx5OwogICAgIElEQkN1cnNvcjo6RGlyZWN0aW9uIG1fY3Vyc29yRGly
ZWN0aW9uOwogICAgIGJvb2wgbV9jdXJzb3JGaW5pc2hlZDsKICAgICBSZWZQdHI8SURCQ3Vyc29y
PiBtX3BlbmRpbmdDdXJzb3I7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180241</attachid>
            <date>2012-12-19 16:14:01 -0800</date>
            <delta_ts>2012-12-20 12:00:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105449-20121219161118.patch</filename>
            <type>text/plain</type>
            <size>29974</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjg3ZjA0MTIzMTBkZmY2
NmYwOGI2NjMwYjRiZmQ3Mjc4YTYyYTljYy4uMWIxOWU0MDlkMjk5YmYyNTlhNGUwZTkzMjUyNmQ2
YzFkNjA1ZTYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTEyLTE5ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IEN1
cnNvciBhbmQgSW5kZXhXcml0ZXIgY2xlYW51cCBmb3IgcmVmYWN0b3IKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTQ0OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBjbGVhbnVwIG9mIHNv
bWUgY29kZSB0byBtYWtlIHRoZSByZWZhY3RvciB0aGF0IGlzIGNvbWluZworICAgICAgICBpbiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyNzQxIGNsZWFuZXIuIFNv
bWUKKyAgICAgICAgQ3Vyc29yVHlwZSBhc3NlcnRpb25zIGhhdmUgYmVlbiByZW1vdmVkIGJlY2F1
c2UgdGhlIGNvZGUgd2lsbCBiZQorICAgICAgICB1c2VkIGluIG1vcmUgZ2VuZXJpYyBjaXJjdW1z
dGFuY2VzIGluIGEgZnV0dXJlIHBhdGNoLgorCisgICAgICAgIFRoZSBwcmV2aW91c2x5LXByaXZh
dGUgSW5kZXhXcml0ZXIgaGFzIGJlZW4gcHVsbGVkIGludG8KKyAgICAgICAgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbCBhbmQgbWFkZSB0byBqdXN0IHVzZSBJREIqTWV0YWRhdGEKKyAgICAgICAg
c28gaXQgY2FuIGJlIHJldXNlZCBsYXRlci4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhp
cyBkb2VzIG5vdCBjaGFuZ2UgdGhlIGxvZ2ljIG9mIGV4ZWN1dGluZyBjb2RlLgorCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tlbmRJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JQcmVmZXRjaEl0ZXJh
dGlvbk9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJ
bXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OnZh
bHVlKToKKyAgICAgICAgKElEQkN1cnNvckJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QkluZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJh
dGlvbjo6T3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uKToKKyAgICAgICAgKElEQkluZGV4QmFja2Vu
ZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleEJhY2tlbmRJbXBsOjpPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OnBlcmZvcm0pOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6
OnZlcmlmeUluZGV4S2V5cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpJbmRleFdyaXRlcjo6d3JpdGVJbmRleEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6OmFkZGluZ0tleUFsbG93ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6bWFrZUluZGV4
V3JpdGVycyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5oOgorICAgICAgICAoSW5kZXhXcml0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6OkluZGV4V3JpdGVyKToKKyAgICAg
ICAgKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6SURCUmVx
dWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRDdXJzb3JEZXRhaWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldFJlc3VsdEN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQlJlcXVlc3QuaDoKKyAgICAgICAgKElEQlJlcXVlc3QpOgorCiAyMDEyLTEyLTE5
ICBUb21teSBXaWRlbmZseWNodCAgPHRvbW15d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0pT
Q10gQWRkIHN1cHBvcnQgZm9yIG92ZXJsb2FkZWQgY29uc3RydWN0b3JzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5j
cHAKaW5kZXggMmM0NmIxZDVlZTljZjJlOGQ0ODYxNzk3ZTA4YzA1MzVkYmMyMmNlOC4uMzA3NDMz
ZmQyYmZkZDExNWU3ZWVjMGM0MWEzZTAwMWRlODZmZjA5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcApA
QCAtMTAxLDEwICsxMDEsMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBt
X2NhbGxiYWNrczsKIH07CiAKLUlEQkN1cnNvckJhY2tlbmRJbXBsOjpJREJDdXJzb3JCYWNrZW5k
SW1wbChQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIEN1cnNvclR5
cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0
YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24sIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwqIG9iamVjdFN0b3JlKQorSURCQ3Vyc29yQmFja2VuZEltcGw6OklE
QkN1cnNvckJhY2tlbmRJbXBsKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1
cnNvciwgYm9vbCBrZXlPbmx5LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tU
eXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiwgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUpCiAgICAgOiBtX2N1cnNvcihjdXJz
b3IpCiAgICAgLCBtX3Rhc2tUeXBlKHRhc2tUeXBlKQotICAgICwgbV9jdXJzb3JUeXBlKGN1cnNv
clR5cGUpCisgICAgLCBtX2tleU9ubHkoa2V5T25seSkKICAgICAsIG1fdHJhbnNhY3Rpb24odHJh
bnNhY3Rpb24pCiAgICAgLCBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQogICAgICwgbV9jbG9z
ZWQoZmFsc2UpCkBAIC0yMDgsMTQgKzIwOCwxNCBAQCB2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBs
OjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdAog
ICAgICAgICBmb3VuZEtleXMuYXBwZW5kKG1fY3Vyc29yLT5tX2N1cnNvci0+a2V5KCkpOwogICAg
ICAgICBmb3VuZFByaW1hcnlLZXlzLmFwcGVuZChtX2N1cnNvci0+bV9jdXJzb3ItPnByaW1hcnlL
ZXkoKSk7CiAKLSAgICAgICAgaWYgKG1fY3Vyc29yLT5tX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpCisgICAgICAgIGlmICghbV9jdXJzb3It
Pm1fa2V5T25seSkKICAgICAgICAgICAgIGZvdW5kVmFsdWVzLmFwcGVuZChTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXMobV9jdXJzb3ItPm1fY3Vyc29yLT52YWx1ZSgp
KSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZvdW5kVmFsdWVzLmFwcGVuZChTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgpKTsKIAogICAgICAgICBzaXplRXN0aW1hdGUgKz0gbV9j
dXJzb3ItPm1fY3Vyc29yLT5rZXkoKS0+c2l6ZUVzdGltYXRlKCk7CiAgICAgICAgIHNpemVFc3Rp
bWF0ZSArPSBtX2N1cnNvci0+bV9jdXJzb3ItPnByaW1hcnlLZXkoKS0+c2l6ZUVzdGltYXRlKCk7
Ci0gICAgICAgIGlmIChtX2N1cnNvci0+bV9jdXJzb3JUeXBlICE9IElEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yKQorICAgICAgICBpZiAoIW1fY3Vyc29yLT5tX2tleU9u
bHkpCiAgICAgICAgICAgICBzaXplRXN0aW1hdGUgKz0gbV9jdXJzb3ItPm1fY3Vyc29yLT52YWx1
ZSgpLnNpemUoKTsKIAogICAgICAgICBpZiAoc2l6ZUVzdGltYXRlID4gbWF4U2l6ZUVzdGltYXRl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
QmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ckJhY2tlbmRJbXBsLmgKaW5kZXggODdhYzE3OGY0ZTZiNjBmNjMyZWJmN2QzM2NmYmRjOGUxNzcw
OTdjNC4uNDkzYjZkZTQ3MDRkM2Y4Y2Q4YjhkZjJmNDhkNzg2NDk1ZGE5OTU0MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5k
SW1wbC5oCkBAIC00NywxMyArNDcsMTMgQEAgY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDsKIAogY2xhc3MgSURCQ3Vyc29yQmFja2VuZEltcGwgOiBwdWJsaWMgSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZEltcGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJz
b3IsIEN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJh
bnNhY3Rpb24sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqIG9iamVjdFN0b3JlKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjcmVhdGUoUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY3Vyc29yLCBib29sIGtleU9ubHksIElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBv
YmplY3RTdG9yZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29y
QmFja2VuZEltcGwoY3Vyc29yLCBjdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U6Ok5vcm1hbFRhc2ssIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZSkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvckJhY2tlbmRJbXBsKGN1cnNvciwga2V5T25seSwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpOb3JtYWxUYXNrLCB0cmFuc2FjdGlvbiwg
b2JqZWN0U3RvcmUpKTsKICAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZEltcGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJz
b3IsIEN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
OjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rp
b24sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqIG9iamVjdFN0b3JlKQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gY3Vyc29yLCBib29sIGtleU9ubHksIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwqIHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFja2VuZEltcGwo
Y3Vyc29yLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFja2VuZEltcGwoY3Vyc29y
LCBrZXlPbmx5LCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlKSk7CiAgICAgfQog
ICAgIHZpcnR1YWwgfklEQkN1cnNvckJhY2tlbmRJbXBsKCk7CiAKQEAgLTY3LDExICs2NywxMSBA
QCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3QgeyByZXR1cm4g
bV9jdXJzb3ItPmtleSgpOyB9CiAgICAgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBj
b25zdCB7IHJldHVybiBtX2N1cnNvci0+cHJpbWFyeUtleSgpOyB9Ci0gICAgUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gKG1fY3Vyc29yVHlw
ZSA9PSBJbmRleEtleUN1cnNvcikgPyAwIDogU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVG
cm9tV2lyZUJ5dGVzKG1fY3Vyc29yLT52YWx1ZSgpKTsgfQorICAgIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5T25seSA/IDAgOiBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXMobV9jdXJzb3ItPnZhbHVl
KCkpOyB9CiAgICAgdm9pZCBjbG9zZSgpOwogCiBwcml2YXRlOgotICAgIElEQkN1cnNvckJhY2tl
bmRJbXBsKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+LCBDdXJzb3JUeXBlLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsKiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCopOworICAgIElEQkN1cnNvckJh
Y2tlbmRJbXBsKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+LCBib29sIGtleU9u
bHksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKik7CiAKICAgICBjbGFz
cyBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb247CiAgICAgY2xhc3MgQ3Vyc29yQWR2YW5jZU9wZXJh
dGlvbjsKQEAgLTgwLDcgKzgwLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCQmFja2luZ1N0
b3JlOjpDdXJzb3I+IG1fY3Vyc29yOwogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4gbV9zYXZlZEN1cnNvcjsKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRh
c2tUeXBlIG1fdGFza1R5cGU7Ci0gICAgQ3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7CisgICAgYm9v
bCBtX2tleU9ubHk7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IG1fdHJh
bnNhY3Rpb247CiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0
U3RvcmU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkluZGV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNw
cAppbmRleCAyMjc3NDllYmYyZmZhYWMwMDdkMTIwNmViNzZmODM4OTk0MTQ1MGUyLi5hYzg3YzUy
YWFjNTA3YzU4M2M0MzNlZjY0MTdiM2VjMGI3NWMzYTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwCkBAIC03NSw3ICs3NSw3IEBAIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVmUHRyPElEQlJlcXVl
c3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUo
dGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIHJlcXVlc3QtPnNldEN1cnNvckRldGFp
bHMoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhDdXJzb3IsIGRpcmVjdGlvbik7Cisg
ICAgcmVxdWVzdC0+c2V0Q3Vyc29yRGV0YWlscyhmYWxzZSwgZGlyZWN0aW9uKTsKICAgICBtX2Jh
Y2tlbmQtPm9wZW5DdXJzb3Ioa2V5UmFuZ2UsIGRpcmVjdGlvbiwgcmVxdWVzdCwgbV90cmFuc2Fj
dGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgQVNTRVJUKCFlYyk7CiAgICAgcmV0dXJuIHJlcXVl
c3Q7CkBAIC0xMzIsNyArMTMyLDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6
b3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6
Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgp
KTsKLSAgICByZXF1ZXN0LT5zZXRDdXJzb3JEZXRhaWxzKElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U6OkluZGV4S2V5Q3Vyc29yLCBkaXJlY3Rpb24pOworICAgIHJlcXVlc3QtPnNldEN1cnNvckRl
dGFpbHModHJ1ZSwgZGlyZWN0aW9uKTsKICAgICBtX2JhY2tlbmQtPm9wZW5LZXlDdXJzb3Ioa2V5
UmFuZ2UsIGRpcmVjdGlvbiwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7
CiAgICAgQVNTRVJUKCFlYyk7CiAgICAgcmV0dXJuIHJlcXVlc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCmlu
ZGV4IDc0YWI1OTA2YWM4YzVlODQxYWNiZjZmMGRhMjE3OTg5NThhOTkzNjAuLjQ1ODI2ZjkyY2Jl
ZmFlMWYwM2NhODc5NGE2ZjNhOTRjY2Q3ZTg3ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCkBAIC00NCwx
NyArNDQsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJREJJbmRleEJhY2tlbmRJ
bXBsOjpPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwg
dW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJz
b3JUeXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisg
ICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9u
PiBjcmVhdGUoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgYm9vbCBr
ZXlPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb24oaW5kZXgsIGtl
eVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIGNhbGxiYWNrcykpOworICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IE9wZW5JbmRleEN1cnNvck9wZXJhdGlvbihpbmRleCwga2V5UmFuZ2Us
IGRpcmVjdGlvbiwga2V5T25seSwgY2FsbGJhY2tzKSk7CiAgICAgfQogICAgIHZpcnR1YWwgdm9p
ZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKIHByaXZhdGU6Ci0gICAgT3Bl
bkluZGV4Q3Vyc29yT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5k
ZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJl
Y3Rpb24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICBPcGVuSW5kZXhDdXJzb3JP
cGVyYXRpb24oUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgYm9vbCBr
ZXlPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgICAgICA6IG1f
aW5kZXgoaW5kZXgpCiAgICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKICAgICAgICAgLCBt
X2RpcmVjdGlvbihkaXJlY3Rpb24pCi0gICAgICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUp
CisgICAgICAgICwgbV9rZXlPbmx5KGtleU9ubHkpCiAgICAgICAgICwgbV9jYWxsYmFja3MoY2Fs
bGJhY2tzKQogICAgIHsKICAgICB9CkBAIC02Miw3ICs2Miw3IEBAIHByaXZhdGU6CiAgICAgUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+IG1faW5kZXg7CiAgICAgUmVmUHRyPElEQktleVJhbmdl
PiBtX2tleVJhbmdlOwogICAgIHVuc2lnbmVkIHNob3J0IG1fZGlyZWN0aW9uOwotICAgIElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOworICAgIGJvb2wg
bV9rZXlPbmx5OwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwogfTsKIApA
QCAtMTQ1LDI1ICsxNDUsMTcgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpPcGVuSW5kZXhD
dXJzb3JPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW4KIAogICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yOwogCi0gICAgc3dp
dGNoIChtX2N1cnNvclR5cGUpIHsKLSAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6
OkluZGV4S2V5Q3Vyc29yOgorICAgIGlmIChtX2tleU9ubHkpCiAgICAgICAgIGJhY2tpbmdTdG9y
ZUN1cnNvciA9IG1faW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhLZXlDdXJzb3IodHJh
bnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1faW5kZXgtPmRhdGFiYXNlSWQo
KSwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIG1faW5kZXgtPmlkKCksIG1f
a2V5UmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhDdXJzb3I6CisgICAgZWxzZQogICAgICAgICBi
YWNraW5nU3RvcmVDdXJzb3IgPSBtX2luZGV4LT5iYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4Q3Vy
c29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2luZGV4LT5kYXRh
YmFzZUlkKCksIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBtX2luZGV4LT5p
ZCgpLCBtX2tleVJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6Ok9iamVjdFN0b3JlQ3Vyc29yOgotICAgIGNh
c2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW52YWxpZEN1cnNvclR5cGU6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9CiAKICAgICBpZiAo
IWJhY2tpbmdTdG9yZUN1cnNvcikgewogICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0
YXRpY19jYXN0PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSo+KDApKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yID0gSURCQ3Vy
c29yQmFja2VuZEltcGw6OmNyZWF0ZShiYWNraW5nU3RvcmVDdXJzb3IuZ2V0KCksIG1fY3Vyc29y
VHlwZSwgdHJhbnNhY3Rpb24sIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kKTsKKyAgICBS
ZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciA9IElEQkN1cnNvckJhY2tlbmRJbXBs
OjpjcmVhdGUoYmFja2luZ1N0b3JlQ3Vyc29yLmdldCgpLCBtX2tleU9ubHksIHRyYW5zYWN0aW9u
LCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZCk7CiAgICAgbV9jYWxsYmFja3MtPm9uU3Vj
Y2VzcyhjdXJzb3IsIGN1cnNvci0+a2V5KCksIGN1cnNvci0+cHJpbWFyeUtleSgpLCBjdXJzb3It
PnZhbHVlKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggMDczZTM5N2I4ZDU1MmE0ZTJjNGNjZTc1NThiNTI3
MDRlNjIzMzFkZS4uZjU3ZmRkNDA4NjFkZDVhN2RkYmQ5MGIyZjdkMTcwYjNiNWJkYjdhYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcApAQCAtNTAzLDcgKzUwMyw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4CiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0
OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0
KCkpOwotICAgIHJlcXVlc3QtPnNldEN1cnNvckRldGFpbHMoSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZTo6T2JqZWN0U3RvcmVDdXJzb3IsIGRpcmVjdGlvbik7CisgICAgcmVxdWVzdC0+c2V0Q3Vy
c29yRGV0YWlscyhmYWxzZSwgZGlyZWN0aW9uKTsKICAgICBtX2JhY2tlbmQtPm9wZW5DdXJzb3Io
cmFuZ2UsIGRpcmVjdGlvbiwgcmVxdWVzdCwgdGFza1R5cGUsIG1fdHJhbnNhY3Rpb24tPmJhY2tl
bmQoKSwgZWMpOwogICAgIEFTU0VSVCghZWMpOwogICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2Uo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggMThkMjZjZjZlNGE0Y2E5YWRiYTZm
YzMxMWQ4NDI5ZDIyNDY2NzE4MC4uYWJiZDg5ZDFlYmJlZGJmMDBjYjU3ZDEyMWMwZDc2NDIxNmE3
ZWJiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAgLTM0Myw3NSArMzQzLDUwIEBA
IHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzCiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsK
IH0KIAotbmFtZXNwYWNlIHsKLWNsYXNzIEluZGV4V3JpdGVyIHsKLXB1YmxpYzoKLSAgICBleHBs
aWNpdCBJbmRleFdyaXRlcihjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQot
ICAgICAgICA6IG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQotICAgIHsgfQotCi0gICAg
SW5kZXhXcml0ZXIoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSwKLSAgICAg
ICAgICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5
cyYgaW5kZXhLZXlzKQotICAgICAgICA6IG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQot
ICAgICAgICAsIG1faW5kZXhLZXlzKGluZGV4S2V5cykKLSAgICB7IH0KLQotICAgIGJvb2wgdmVy
aWZ5SW5kZXhLZXlzKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwKLSAgICAgICAgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgYm9vbCYgY2FuQWRkS2V5
cywKLSAgICAgICAgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5ID0gMCwgU3RyaW5nKiBlcnJvck1l
c3NhZ2UgPSAwKSBXQVJOX1VOVVNFRF9SRVRVUk4KLSAgICB7Ci0gICAgICAgIGNhbkFkZEtleXMg
PSBmYWxzZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgYm9vbCBvayA9IGFkZGluZ0tleUFsbG93ZWQoYmFja2lu
Z1N0b3JlLCB0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
KG1faW5kZXhLZXlzKVtpXS5nZXQoKSwgcHJpbWFyeUtleSwgY2FuQWRkS2V5cyk7Ci0gICAgICAg
ICAgICBpZiAoIW9rKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IGlmICghY2FuQWRkS2V5cykgewotICAgICAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UpCi0g
ICAgICAgICAgICAgICAgICAgICplcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxl
IHRvIGFkZCBrZXkgdG8gaW5kZXggJyVzJzogYXQgbGVhc3Qgb25lIGtleSBkb2VzIG5vdCBzYXRp
c2Z5IHRoZSB1bmlxdWVuZXNzIHJlcXVpcmVtZW50cy4iLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleE1ldGFkYXRhLm5hbWUudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Citi
b29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVyOjp2ZXJpZnlJbmRleEtl
eXMoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBib29sJiBjYW5BZGRLZXlzLCBjb25zdCBJREJLZXkqIHBy
aW1hcnlLZXksIFN0cmluZyogZXJyb3JNZXNzYWdlKSBjb25zdAoreworICAgIGNhbkFkZEtleXMg
PSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5kZXhLZXlzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGJvb2wgb2sgPSBhZGRpbmdLZXlBbGxvd2VkKGJhY2tpbmdTdG9yZSwg
dHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIChtX2luZGV4
S2V5cylbaV0uZ2V0KCksIHByaW1hcnlLZXksIGNhbkFkZEtleXMpOworICAgICAgICBpZiAoIW9r
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWNhbkFkZEtleXMpIHsK
KyAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UpCisgICAgICAgICAgICAgICAgKmVycm9yTWVz
c2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJVbmFibGUgdG8gYWRkIGtleSB0byBpbmRleCAnJXMnOiBh
dCBsZWFzdCBvbmUga2V5IGRvZXMgbm90IHNhdGlzZnkgdGhlIHVuaXF1ZW5lc3MgcmVxdWlyZW1l
bnRzLiIsIG1faW5kZXhNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgY2FuQWRkS2V5cyA9IHRydWU7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICBjYW5BZGRLZXlzID0gdHJ1ZTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KIAotICAgIHZvaWQgd3JpdGVJbmRleEtleXMoY29uc3QgSURCQmFja2luZ1N0
b3JlOjpSZWNvcmRJZGVudGlmaWVyJiByZWNvcmRJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUm
IGJhY2tpbmdTdG9yZSwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBjb25zdAotICAgIHsK
LSAgICAgICAgaW50NjRfdCBpbmRleElkID0gbV9pbmRleE1ldGFkYXRhLmlkOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5kZXhLZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBiYWNraW5nU3RvcmUucHV0SW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLCBkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqKG1faW5kZXhLZXlzKVtpXS5nZXQoKSwg
cmVjb3JkSWRlbnRpZmllcik7Ci0gICAgICAgIH0KK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6SW5kZXhXcml0ZXI6OndyaXRlSW5kZXhLZXlzKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6
UmVjb3JkSWRlbnRpZmllciYgcmVjb3JkSWRlbnRpZmllciwgSURCQmFja2luZ1N0b3JlJiBiYWNr
aW5nU3RvcmUsIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgY29uc3QKK3sKKyAgICBpbnQ2
NF90IGluZGV4SWQgPSBtX2luZGV4TWV0YWRhdGEuaWQ7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgeworICAgICAgICBiYWNraW5nU3RvcmUucHV0
SW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkLCAqKG1faW5kZXhLZXlzKVtpXS5nZXQoKSwgcmVjb3JkSWRlbnRpZmllcik7CiAg
ICAgfQorfQogCi1wcml2YXRlOgotCi0gICAgYm9vbCBhZGRpbmdLZXlBbGxvd2VkKElEQkJhY2tp
bmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwKLSAgICAgICAgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwKLSAgICAgICAgY29uc3QgSURCS2V5KiBpbmRleEtleSwgY29u
c3QgSURCS2V5KiBwcmltYXJ5S2V5LCBib29sJiBhbGxvd2VkKSBjb25zdCBXQVJOX1VOVVNFRF9S
RVRVUk4KLSAgICB7Ci0gICAgICAgIGFsbG93ZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFtX2lu
ZGV4TWV0YWRhdGEudW5pcXVlKSB7Ci0gICAgICAgICAgICBhbGxvd2VkID0gdHJ1ZTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmUHRyPElEQktleT4g
Zm91bmRQcmltYXJ5S2V5OwotICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgIGJv
b2wgb2sgPSBiYWNraW5nU3RvcmUua2V5RXhpc3RzSW5JbmRleCh0cmFuc2FjdGlvbiwgZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKmluZGV4S2V5LCBmb3VuZFByaW1hcnlLZXks
IGZvdW5kKTsKLSAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKCFmb3VuZCB8fCAocHJpbWFyeUtleSAmJiBmb3VuZFByaW1hcnlLZXktPmlzRXF1
YWwocHJpbWFyeUtleSkpKQotICAgICAgICAgICAgYWxsb3dlZCA9IHRydWU7Citib29sIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVyOjphZGRpbmdLZXlBbGxvd2VkKElEQkJh
Y2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5KiBwcmlt
YXJ5S2V5LCBib29sJiBhbGxvd2VkKSBjb25zdAoreworICAgIGFsbG93ZWQgPSBmYWxzZTsKKyAg
ICBpZiAoIW1faW5kZXhNZXRhZGF0YS51bmlxdWUpIHsKKyAgICAgICAgYWxsb3dlZCA9IHRydWU7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGNvbnN0IElEQkluZGV4TWV0YWRh
dGEgbV9pbmRleE1ldGFkYXRhOwotICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6
SW5kZXhLZXlzIG1faW5kZXhLZXlzOwotfTsKKyAgICBSZWZQdHI8SURCS2V5PiBmb3VuZFByaW1h
cnlLZXk7CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgIGJvb2wgb2sgPSBiYWNraW5nU3Rv
cmUua2V5RXhpc3RzSW5JbmRleCh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCwgKmluZGV4S2V5LCBmb3VuZFByaW1hcnlLZXksIGZvdW5kKTsKKyAgICBpZiAo
IW9rKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFmb3VuZCB8fCAocHJpbWFyeUtl
eSAmJiBmb3VuZFByaW1hcnlLZXktPmlzRXF1YWwocHJpbWFyeUtleSkpKQorICAgICAgICBhbGxv
d2VkID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotV0FSTl9VTlVTRURfUkVUVVJOIHN0
YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3Rv
cmUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwg
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBWZWN0b3I8T3duUHRy
PEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJyb3JNZXNzYWdlLCBib29s
JiBjb21wbGV0ZWQpCitib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om1ha2VJbmRleFdy
aXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwg
SURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBw
cmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBp
bmRleElkcywgY29uc3QgVmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5k
ZXhLZXlzPiYgaW5kZXhLZXlzLCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdy
aXRlcnMsIFN0cmluZyogZXJyb3JNZXNzYWdlLCBib29sJiBjb21wbGV0ZWQpCiB7CiAgICAgQVNT
RVJUKGluZGV4SWRzLnNpemUoKSA9PSBpbmRleEtleXMuc2l6ZSgpKTsKICAgICBjb21wbGV0ZWQg
PSBmYWxzZTsKQEAgLTQyMCwyMyArMzk1LDE4IEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMg
Ym9vbCBtYWtlSW5kZXhXcml0ZXJzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleElkcy5zaXplKCk7ICsraSkKICAgICAgICAg
aW5kZXhLZXlNYXAuYWRkKGluZGV4SWRzW2ldLCBpbmRleEtleXNbaV0pOwogCi0gICAgZm9yIChJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RT
dG9yZS0+aXRlckluZGV4ZXNCZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+aXRlckluZGV4ZXNF
bmQoKTsgKytpdCkgeworICAgIGZvciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBv
YmplY3RTdG9yZS5pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAKLSAgICAgICAgY29uc3QgUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT52YWx1ZTsKKyAgICAgICAgY29uc3Qg
SURCSW5kZXhNZXRhZGF0YSYgaW5kZXggPSBpdC0+dmFsdWU7CiAKICAgICAgICAgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMga2V5cyA9IGluZGV4S2V5TWFwLmdldChp
dC0+a2V5KTsKICAgICAgICAgLy8gSWYgdGhlIG9iamVjdFN0b3JlIGlzIHVzaW5nIGF1dG9JbmNy
ZW1lbnQsIHRoZW4gYW55IGluZGV4ZXMgd2l0aCBhbiBpZGVudGljYWwga2V5UGF0aCBuZWVkIHRv
IGFsc28gdXNlIHRoZSBwcmltYXJ5IChnZW5lcmF0ZWQpIGtleSBhcyBhIGtleS4KLSAgICAgICAg
aWYgKGtleVdhc0dlbmVyYXRlZCkgewotICAgICAgICAgICAgY29uc3QgSURCS2V5UGF0aCYgaW5k
ZXhLZXlQYXRoID0gaW5kZXgtPmtleVBhdGgoKTsKLSAgICAgICAgICAgIGlmIChpbmRleEtleVBh
dGggPT0gb2JqZWN0U3RvcmUtPmtleVBhdGgoKSkKLSAgICAgICAgICAgICAgICBrZXlzLmFwcGVu
ZChwcmltYXJ5S2V5KTsKLSAgICAgICAgfQorICAgICAgICBpZiAoa2V5V2FzR2VuZXJhdGVkICYm
IChpbmRleC5rZXlQYXRoID09IG9iamVjdFN0b3JlLmtleVBhdGgpKQorICAgICAgICAgICAga2V5
cy5hcHBlbmQocHJpbWFyeUtleSk7CiAKLSAgICAgICAgT3duUHRyPEluZGV4V3JpdGVyPiBpbmRl
eFdyaXRlcihhZG9wdFB0cihuZXcgSW5kZXhXcml0ZXIoaW5kZXgtPm1ldGFkYXRhKCksIGtleXMp
KSk7CisgICAgICAgIE93blB0cjxJbmRleFdyaXRlcj4gaW5kZXhXcml0ZXIoYWRvcHRQdHIobmV3
IEluZGV4V3JpdGVyKGluZGV4LCBrZXlzKSkpOwogICAgICAgICBib29sIGNhbkFkZEtleXMgPSBm
YWxzZTsKLSAgICAgICAgYm9vbCBiYWNraW5nU3RvcmVTdWNjZXNzID0gaW5kZXhXcml0ZXItPnZl
cmlmeUluZGV4S2V5cygqb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLAotICAgICAgICAgICAg
dHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5kYXRh
YmFzZUlkKCksCi0gICAgICAgICAgICBvYmplY3RTdG9yZS0+aWQoKSwgaW5kZXgtPmlkKCksIGNh
bkFkZEtleXMsIHByaW1hcnlLZXkuZ2V0KCksIGVycm9yTWVzc2FnZSk7CisgICAgICAgIGJvb2wg
YmFja2luZ1N0b3JlU3VjY2VzcyA9IGluZGV4V3JpdGVyLT52ZXJpZnlJbmRleEtleXMoKmJhY2tp
bmdTdG9yZSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlLmlkLCBpbmRleC5pZCwgY2FuQWRkS2V5cywgcHJpbWFyeUtleS5nZXQo
KSwgZXJyb3JNZXNzYWdlKTsKICAgICAgICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIWNhbkFkZEtleXMpCkBAIC00NzUs
NyArNDQ1LDggQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMo
UGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGMKICAgICBWZWN0b3I8T3duUHRyPElu
ZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwogICAg
IGJvb2wgb2JleXNDb25zdHJhaW50cyA9IGZhbHNlOwotICAgIGJvb2wgYmFja2luZ1N0b3JlU3Vj
Y2VzcyA9IG1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIHRoaXMsIHByaW1hcnlLZXksIGZh
bHNlLCBpbmRleElkcywgaW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBv
YmV5c0NvbnN0cmFpbnRzKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBzdG9yZSA9IGJh
Y2tpbmdTdG9yZSgpOworICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IG1ha2VJbmRleFdy
aXRlcnModHJhbnNhY3Rpb24sIHN0b3JlLmdldCgpLCBkYXRhYmFzZUlkKCksIG1ldGFkYXRhKCks
IHByaW1hcnlLZXksIGZhbHNlLCBpbmRleElkcywgaW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAm
ZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKICAgICBpZiAoIWJhY2tpbmdTdG9yZVN1
Y2Nlc3MpIHsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6
IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5cy4iKSk7CiAgICAgICAgIHJl
dHVybjsKQEAgLTUzMSwxMCArNTAyLDEyIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0CiAKICAg
ICBBU1NFUlQobV9rZXkgJiYgbV9rZXktPmlzVmFsaWQoKSk7CiAKKyAgICBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBtX29iamVjdFN0b3JlLT5tZXRhZGF0YSgp
OwogICAgIElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciByZWNvcmRJZGVudGlmaWVy
OworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG1fb2JqZWN0U3Rv
cmUtPmJhY2tpbmdTdG9yZSgpOwogICAgIGlmIChtX3B1dE1vZGUgPT0gQWRkT25seSkgewogICAg
ICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgb2sgPSBtX29iamVjdFN0b3Jl
LT5iYWNraW5nU3RvcmUoKS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29i
amVjdFN0b3JlLT5pZCgpLCAqbV9rZXksICZyZWNvcmRJZGVudGlmaWVyLCBmb3VuZCk7CisgICAg
ICAgIGJvb2wgb2sgPSBiYWNraW5nU3RvcmUtPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNh
Y3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNl
SWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgKm1fa2V5LCAmcmVjb3JkSWRlbnRpZmllciwgZm91
bmQpOwogICAgICAgICBpZiAoIW9rKSB7CiAgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25F
cnJvciwgIkludGVybmFsIGVycm9yIGNoZWNraW5nIGtleSBleGlzdGVuY2UuIikpOwogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtNTQ4LDcgKzUyMSw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0
CiAgICAgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CiAgICAgU3Ry
aW5nIGVycm9yTWVzc2FnZTsKICAgICBib29sIG9iZXlzQ29uc3RyYWludHMgPSBmYWxzZTsKLSAg
ICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9u
LCBtX29iamVjdFN0b3JlLmdldCgpLCBtX2tleSwga2V5V2FzR2VuZXJhdGVkLCAqbV9wb3BJbmRl
eElkcywgKm1fcG9wSW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5
c0NvbnN0cmFpbnRzKTsKKyAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtYWtlSW5kZXhX
cml0ZXJzKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fb2JqZWN0U3RvcmUtPmRh
dGFiYXNlSWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwgbV9rZXksIGtleVdhc0dlbmVyYXRlZCwg
Km1fcG9wSW5kZXhJZHMsICptX3BvcEluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVz
c2FnZSwgb2JleXNDb25zdHJhaW50cyk7CiAgICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7
CiAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tp
bmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5cy4iKSk7CiAgICAgICAgIHJldHVybjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaAppbmRleCBjMmRlNDc0OGZjZGFhN2MxNzRmN2U2MDMzYTE2
NzFlOTQ3YmIyOWNhLi5kY2Y3MDE5ZTFiYmJkZWM3MDgwNjkxMDRmNGI5MGJlZTdkMGVhZWY3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCkBAIC05MCw2ICs5MCwzMCBAQCBwdWJsaWM6CiAgICAg
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YWJhc2UtPmJhY2tpbmdTdG9yZSgpOyB9CiAgICAgaW50NjRfdCBkYXRhYmFzZUlkKCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS0+aWQoKTsgfQogCisgICAgY2xhc3MgSW5kZXhXcml0
ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgSW5kZXhXcml0ZXIoY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKKyAgICAgICAgICAgIDogbV9pbmRleE1ldGFk
YXRhKGluZGV4TWV0YWRhdGEpCisgICAgICAgIHsgfQorCisgICAgICAgIEluZGV4V3JpdGVyKGNv
bnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEsIGNvbnN0IElEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzJiBpbmRleEtleXMpCisgICAgICAgICAgICA6IG1f
aW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQorICAgICAgICAgICAgLCBtX2luZGV4S2V5cyhp
bmRleEtleXMpCisgICAgICAgIHsgfQorCisgICAgICAgIGJvb2wgdmVyaWZ5SW5kZXhLZXlzKElE
QkJhY2tpbmdTdG9yZSYsIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBib29sJiBj
YW5BZGRLZXlzLCBjb25zdCBJREJLZXkqIHByaW1hcnlLZXkgPSAwLCBTdHJpbmcqIGVycm9yTWVz
c2FnZSA9IDApIGNvbnN0IFdBUk5fVU5VU0VEX1JFVFVSTjsKKworICAgICAgICB2b2lkIHdyaXRl
SW5kZXhLZXlzKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciYsIElEQkJh
Y2tpbmdTdG9yZSYsIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBib29sIGFkZGluZ0tleUFsbG93ZWQoSURCQmFja2luZ1N0b3JlJiwgSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSogaW5kZXhLZXksIGNvbnN0IElEQktl
eSogcHJpbWFyeUtleSwgYm9vbCYgYWxsb3dlZCkgY29uc3QgV0FSTl9VTlVTRURfUkVUVVJOOwor
CisgICAgICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOworICAgICAg
ICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cyBtX2luZGV4S2V5czsK
KyAgICB9OworCisgICAgc3RhdGljIGJvb2wgbWFrZUluZGV4V3JpdGVycyhQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBJREJCYWNraW5nU3RvcmUqLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBQYXNzUmVmUHRyPElEQktleT4g
cHJpbWFyeUtleSwgYm9vbCBrZXlXYXNHZW5lcmF0ZWQsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYg
aW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6Oklu
ZGV4S2V5cz4mLCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0
cmluZyogZXJyb3JNZXNzYWdlLCBib29sJiBjb21wbGV0ZWQpIFdBUk5fVU5VU0VEX1JFVFVSTjsK
KwogcHJpdmF0ZToKICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGNvbnN0IElEQkRhdGFi
YXNlQmFja2VuZEltcGwqLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKaW5kZXggMGEx
MjEwMWQ4ZWExZTAzMjIzODQ4N2IzOTE3MDc3NTJkOGRkZDRmYi4uYjAyYWVjN2ZiNDU2OTg1YTM2
OTg3Y2JmMzQzMzRhZDk5MzFkZmY3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCUmVxdWVzdC5jcHAKQEAgLTcwLDcgKzcwLDcgQEAgSURCUmVxdWVzdDo6SURC
UmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkFu
eT4gc291cmMKICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1fdGFza1R5cGUodGFza1R5
cGUpCiAgICAgLCBtX2hhc1BlbmRpbmdBY3Rpdml0eSh0cnVlKQotICAgICwgbV9jdXJzb3JUeXBl
KElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkludmFsaWRDdXJzb3JUeXBlKQorICAgICwgbV9j
dXJzb3JLZXlPbmx5KGZhbHNlKQogICAgICwgbV9jdXJzb3JEaXJlY3Rpb24oSURCQ3Vyc29yOjpO
RVhUKQogICAgICwgbV9jdXJzb3JGaW5pc2hlZChmYWxzZSkKICAgICAsIG1fcGVuZGluZ0N1cnNv
cigwKQpAQCAtMTgyLDExICsxODIsMTEgQEAgdm9pZCBJREJSZXF1ZXN0OjphYm9ydCgpCiAgICAg
bV9yZXF1ZXN0QWJvcnRlZCA9IHRydWU7CiB9CiAKLXZvaWQgSURCUmVxdWVzdDo6c2V0Q3Vyc29y
RGV0YWlscyhJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUs
IElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKK3ZvaWQgSURCUmVxdWVzdDo6c2V0Q3Vy
c29yRGV0YWlscyhib29sIGtleU9ubHksIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikK
IHsKICAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcpOwotICAgIEFTU0VSVChtX2N1
cnNvclR5cGUgPT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW52YWxpZEN1cnNvclR5cGUp
OwotICAgIG1fY3Vyc29yVHlwZSA9IGN1cnNvclR5cGU7CisgICAgQVNTRVJUKCFtX3BlbmRpbmdD
dXJzb3IpOworICAgIG1fY3Vyc29yS2V5T25seSA9IGtleU9ubHk7CiAgICAgbV9jdXJzb3JEaXJl
Y3Rpb24gPSBkaXJlY3Rpb247CiB9CiAKQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIElEQlJlcXVl
c3Q6OnNldFJlc3VsdEN1cnNvcihQYXNzUmVmUHRyPElEQkN1cnNvcj4gY3Vyc29yLCBQYXNzUmVm
UHRyPElEQktleQogICAgIG1fY3Vyc29yUHJpbWFyeUtleSA9IHByaW1hcnlLZXk7CiAgICAgbV9j
dXJzb3JWYWx1ZSA9IHZhbHVlOwogCi0gICAgaWYgKG1fY3Vyc29yVHlwZSA9PSBJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcikgeworICAgIGlmIChtX2N1cnNvcktleU9u
bHkpIHsKICAgICAgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShjdXJzb3IpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMjg4LDkgKzI4OCw5IEBAIHZvaWQgSURCUmVxdWVzdDo6b25T
dWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgUGFz
c1JlCiAKICAgICBET01SZXF1ZXN0U3RhdGU6OlNjb3BlIHNjb3BlKG1fcmVxdWVzdFN0YXRlKTsK
ICAgICBTY3JpcHRWYWx1ZSB2YWx1ZSA9IGRlc2VyaWFsaXplSURCVmFsdWUocmVxdWVzdFN0YXRl
KCksIHNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAhPSBJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZSk7CisgICAgQVNTRVJUKCFtX3Bl
bmRpbmdDdXJzb3IpOwogICAgIFJlZlB0cjxJREJDdXJzb3I+IGN1cnNvcjsKLSAgICBpZiAobV9j
dXJzb3JUeXBlID09IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yKQor
ICAgIGlmIChtX2N1cnNvcktleU9ubHkpCiAgICAgICAgIGN1cnNvciA9IElEQkN1cnNvcjo6Y3Jl
YXRlKGJhY2tlbmQsIG1fY3Vyc29yRGlyZWN0aW9uLCB0aGlzLCBtX3NvdXJjZS5nZXQoKSwgbV90
cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgZWxzZQogICAgICAgICBjdXJzb3IgPSBJREJDdXJzb3JX
aXRoVmFsdWU6OmNyZWF0ZShiYWNrZW5kLCBtX2N1cnNvckRpcmVjdGlvbiwgdGhpcywgbV9zb3Vy
Y2UuZ2V0KCksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCmluZGV4IGIyMTE4MjBiYzM4ZjkyNzc1YWM3NzQ1NTNi
MTZlNzNkMDYxOGYzZjQuLjc1NDJkZjY0ZTRlOTUyMDU5Y2Y1NzI5OWIwMGQxOGY2ZDJiNTM4ODYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgKQEAg
LTgxLDcgKzgxLDcgQEAgcHVibGljOgogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVO
RVIoZXJyb3IpOwogCiAgICAgdm9pZCBtYXJrRWFybHlEZWF0aCgpOwotICAgIHZvaWQgc2V0Q3Vy
c29yRGV0YWlscyhJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlLCBJREJDdXJz
b3I6OkRpcmVjdGlvbik7CisgICAgdm9pZCBzZXRDdXJzb3JEZXRhaWxzKGJvb2wga2V5T25seSwg
SURCQ3Vyc29yOjpEaXJlY3Rpb24pOwogICAgIHZvaWQgc2V0UGVuZGluZ0N1cnNvcihQYXNzUmVm
UHRyPElEQkN1cnNvcj4pOwogICAgIHZvaWQgZmluaXNoQ3Vyc29yKCk7CiAgICAgdm9pZCBhYm9y
dCgpOwpAQCAtMTUwLDcgKzE1MCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZlB0cjxFdmVu
dD4gPiBtX2VucXVldWVkRXZlbnRzOwogCiAgICAgLy8gT25seSB1c2VkIGlmIHRoZSByZXN1bHQg
dHlwZSB3aWxsIGJlIGEgY3Vyc29yLgotICAgIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1
cnNvclR5cGUgbV9jdXJzb3JUeXBlOworICAgIGJvb2wgbV9jdXJzb3JLZXlPbmx5OwogICAgIElE
QkN1cnNvcjo6RGlyZWN0aW9uIG1fY3Vyc29yRGlyZWN0aW9uOwogICAgIGJvb2wgbV9jdXJzb3JG
aW5pc2hlZDsKICAgICBSZWZQdHI8SURCQ3Vyc29yPiBtX3BlbmRpbmdDdXJzb3I7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180383</attachid>
            <date>2012-12-20 12:00:47 -0800</date>
            <delta_ts>2012-12-20 13:21:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105449-20121220115803.patch</filename>
            <type>text/plain</type>
            <size>27060</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MjQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGI2YmMyODM3N2VlZTMx
N2RhYzUyNjVjMDM4Y2NhNzgyNjk0NzU1YS4uOWE5Y2U3ZDdhZjFlNDUzMWM4NDZkM2Y5YjY2YzA1
MTVmZWUwYjFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTEyLTE5ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IEN1
cnNvciBhbmQgSW5kZXhXcml0ZXIgY2xlYW51cCBmb3IgcmVmYWN0b3IKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTQ0OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBjbGVhbnVwIG9mIHNv
bWUgY29kZSB0byBtYWtlIHRoZSByZWZhY3RvciB0aGF0IGlzIGNvbWluZworICAgICAgICBpbiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyNzQxIGNsZWFuZXIuIFNv
bWUKKyAgICAgICAgQ3Vyc29yVHlwZSBhc3NlcnRpb25zIGhhdmUgYmVlbiByZW1vdmVkIGJlY2F1
c2UgdGhlIGNvZGUgd2lsbCBiZQorICAgICAgICB1c2VkIGluIG1vcmUgZ2VuZXJpYyBjaXJjdW1z
dGFuY2VzIGluIGEgZnV0dXJlIHBhdGNoLgorCisgICAgICAgIFRoZSBwcmV2aW91c2x5LXByaXZh
dGUgSW5kZXhXcml0ZXIgaGFzIGJlZW4gcHVsbGVkIGludG8KKyAgICAgICAgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbCBhbmQgbWFkZSB0byBqdXN0IHVzZSBJREIqTWV0YWRhdGEKKyAgICAgICAg
c28gaXQgY2FuIGJlIHJldXNlZCBsYXRlci4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhp
cyBkb2VzIG5vdCBjaGFuZ2UgdGhlIGxvZ2ljIG9mIGV4ZWN1dGluZyBjb2RlLgorCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tlbmRJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JQcmVmZXRjaEl0ZXJh
dGlvbk9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJ
bXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OnZh
bHVlKToKKyAgICAgICAgKElEQkN1cnNvckJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QkluZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJh
dGlvbjo6T3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uKToKKyAgICAgICAgKElEQkluZGV4QmFja2Vu
ZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleEJhY2tlbmRJbXBsOjpPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OnBlcmZvcm0pOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6
OnZlcmlmeUluZGV4S2V5cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpJbmRleFdyaXRlcjo6d3JpdGVJbmRleEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6OmFkZGluZ0tleUFsbG93ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6bWFrZUluZGV4
V3JpdGVycyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5oOgorICAgICAgICAoSW5kZXhXcml0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6OkluZGV4V3JpdGVyKToKKyAgICAg
ICAgKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6SURCUmVx
dWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRDdXJzb3JEZXRhaWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldFJlc3VsdEN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQlJlcXVlc3QuaDoKKyAgICAgICAgKElEQlJlcXVlc3QpOgorCiAyMDEyLTEyLTIw
ICBBbmRyZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLmNvbT4KIAogICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBmaXggfF9yZXBhaW50QWxsfCBiZWhhdmlvdXIgb2YgYSBEZWZhdWx0VGV4
dEVkaXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCmluZGV4IDJjNDZiMWQ1ZWU5Y2YyZThkNDg2MTc5N2Uw
OGMwNTM1ZGJjMjJjZTguLjVlYjZkYzI3Njc5NzZiZTQ3ODcxNmM3MGI3NTVhOTdkNTM5ZTY5MGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJh
Y2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3JCYWNrZW5kSW1wbC5jcHAKQEAgLTIwOCwxNSArMjA4LDE5IEBAIHZvaWQgSURCQ3Vyc29y
QmFja2VuZEltcGw6OkN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uOjpwZXJmb3JtKElE
QlRyYW5zYWN0CiAgICAgICAgIGZvdW5kS2V5cy5hcHBlbmQobV9jdXJzb3ItPm1fY3Vyc29yLT5r
ZXkoKSk7CiAgICAgICAgIGZvdW5kUHJpbWFyeUtleXMuYXBwZW5kKG1fY3Vyc29yLT5tX2N1cnNv
ci0+cHJpbWFyeUtleSgpKTsKIAotICAgICAgICBpZiAobV9jdXJzb3ItPm1fY3Vyc29yVHlwZSAh
PSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcikKLSAgICAgICAgICAg
IGZvdW5kVmFsdWVzLmFwcGVuZChTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJl
Qnl0ZXMobV9jdXJzb3ItPm1fY3Vyc29yLT52YWx1ZSgpKSk7Ci0gICAgICAgIGVsc2UKKyAgICAg
ICAgc3dpdGNoIChtX2N1cnNvci0+bV9jdXJzb3JUeXBlKSB7CisgICAgICAgIGNhc2UgS2V5T25s
eToKICAgICAgICAgICAgIGZvdW5kVmFsdWVzLmFwcGVuZChTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmNyZWF0ZSgpKTsKLQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5QW5kVmFs
dWU6CisgICAgICAgICAgICBzaXplRXN0aW1hdGUgKz0gbV9jdXJzb3ItPm1fY3Vyc29yLT52YWx1
ZSgpLnNpemUoKTsKKyAgICAgICAgICAgIGZvdW5kVmFsdWVzLmFwcGVuZChTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXMobV9jdXJzb3ItPm1fY3Vyc29yLT52YWx1ZSgp
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CiAgICAgICAgIHNpemVFc3RpbWF0ZSArPSBt
X2N1cnNvci0+bV9jdXJzb3ItPmtleSgpLT5zaXplRXN0aW1hdGUoKTsKICAgICAgICAgc2l6ZUVz
dGltYXRlICs9IG1fY3Vyc29yLT5tX2N1cnNvci0+cHJpbWFyeUtleSgpLT5zaXplRXN0aW1hdGUo
KTsKLSAgICAgICAgaWYgKG1fY3Vyc29yLT5tX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpCi0gICAgICAgICAgICBzaXplRXN0aW1hdGUgKz0g
bV9jdXJzb3ItPm1fY3Vyc29yLT52YWx1ZSgpLnNpemUoKTsKIAogICAgICAgICBpZiAoc2l6ZUVz
dGltYXRlID4gbWF4U2l6ZUVzdGltYXRlKQogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwu
aAppbmRleCA4N2FjMTc4ZjRlNmI2MGY2MzJlYmY3ZDMzY2ZiZGM4ZTE3NzA5N2M0Li5iMGM3OWYy
MTRmY2FjNjcyMmVjNTQ0MjNlOWQ5OWI4ZmZiNTFkNjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKQEAgLTY3
LDcgKzY3LDcgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpIGNvbnN0
IHsgcmV0dXJuIG1fY3Vyc29yLT5rZXkoKTsgfQogICAgIFBhc3NSZWZQdHI8SURCS2V5PiBwcmlt
YXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3ItPnByaW1hcnlLZXkoKTsgfQotICAgIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuICht
X2N1cnNvclR5cGUgPT0gSW5kZXhLZXlDdXJzb3IpID8gMCA6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlRnJvbVdpcmVCeXRlcyhtX2N1cnNvci0+dmFsdWUoKSk7IH0KKyAgICBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUoKSBjb25zdCB7IHJldHVybiAobV9jdXJz
b3JUeXBlID09IEtleU9ubHkpID8gMCA6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJv
bVdpcmVCeXRlcyhtX2N1cnNvci0+dmFsdWUoKSk7IH0KICAgICB2b2lkIGNsb3NlKCk7CiAKIHBy
aXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggM2RjNTRmM2YyMWZmOTZhY2RmZDc2
OTNkYzMxNDg0YWViY2M5OWFmMC4uZGZiMTk5YTVmNTVmMzkxNmFlNzJiMGU4N2NmYzIyZjZjZGMw
ZmYwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yQmFja2VuZEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaApAQCAtNDYsMTAgKzQ2LDggQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgfklEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UoKSB7fQogCiAgICAgZW51
bSBDdXJzb3JUeXBlIHsKLSAgICAgICAgSW52YWxpZEN1cnNvclR5cGUgPSAwLAotICAgICAgICBJ
bmRleEN1cnNvciwKLSAgICAgICAgSW5kZXhLZXlDdXJzb3IsCi0gICAgICAgIE9iamVjdFN0b3Jl
Q3Vyc29yCisgICAgICAgIEtleUFuZFZhbHVlID0gMCwKKyAgICAgICAgS2V5T25seQogICAgIH07
CiAKICAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAKaW5kZXggMjI3NzQ5ZWJmMmZmYWFjMDA3
ZDEyMDZlYjc2ZjgzODk5NDE0NTBlMi4uNzYyNjQ4OGVhMGZkM2U3MGQ3NDY0NDQyZjJlYzg1ZDdh
NGY1OWIwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
SW5kZXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4
LmNwcApAQCAtNzUsNyArNzUsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4Ojpv
cGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhcwogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6
Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgp
KTsKLSAgICByZXF1ZXN0LT5zZXRDdXJzb3JEZXRhaWxzKElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U6OkluZGV4Q3Vyc29yLCBkaXJlY3Rpb24pOworICAgIHJlcXVlc3QtPnNldEN1cnNvckRldGFp
bHMoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5QW5kVmFsdWUsIGRpcmVjdGlvbik7CiAg
ICAgbV9iYWNrZW5kLT5vcGVuQ3Vyc29yKGtleVJhbmdlLCBkaXJlY3Rpb24sIHJlcXVlc3QsIG1f
dHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIEFTU0VSVCghZWMpOwogICAgIHJldHVy
biByZXF1ZXN0OwpAQCAtMTMyLDcgKzEzMiw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
SW5kZXg6Om9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKICAg
ICAgICAgcmV0dXJuIDA7CiAKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJl
cXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlv
bi5nZXQoKSk7Ci0gICAgcmVxdWVzdC0+c2V0Q3Vyc29yRGV0YWlscyhJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlOjpJbmRleEtleUN1cnNvciwgZGlyZWN0aW9uKTsKKyAgICByZXF1ZXN0LT5zZXRD
dXJzb3JEZXRhaWxzKElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleU9ubHksIGRpcmVjdGlv
bik7CiAgICAgbV9iYWNrZW5kLT5vcGVuS2V5Q3Vyc29yKGtleVJhbmdlLCBkaXJlY3Rpb24sIHJl
cXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIEFTU0VSVCghZWMpOwog
ICAgIHJldHVybiByZXF1ZXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAppbmRleCA3NGFiNTkwNmFjOGM1ZTg0
MWFjYmY2ZjBkYTIxNzk4OTU4YTk5MzYwLi4yNDY2ODQ5MDYxZWY4NjExNTZkOGI0MDAxMzdhNGM4
ODhlYTllNzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJJbmRleEJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApAQCAtMTQ2LDE2ICsxNDYsMTQgQEAgdm9pZCBJ
REJJbmRleEJhY2tlbmRJbXBsOjpPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OnBlcmZvcm0oSURC
VHJhbnNhY3Rpb25CYWNrZW4KICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJh
Y2tpbmdTdG9yZUN1cnNvcjsKIAogICAgIHN3aXRjaCAobV9jdXJzb3JUeXBlKSB7Ci0gICAgY2Fz
ZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcjoKKyAgICBjYXNlIElE
QkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleU9ubHk6CiAgICAgICAgIGJhY2tpbmdTdG9yZUN1
cnNvciA9IG1faW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhLZXlDdXJzb3IodHJhbnNh
Y3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1faW5kZXgtPmRhdGFiYXNlSWQoKSwg
bV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIG1faW5kZXgtPmlkKCksIG1fa2V5
UmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURCQ3Vy
c29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhDdXJzb3I6CisgICAgY2FzZSBJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlOjpLZXlBbmRWYWx1ZToKICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0g
bV9pbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEN1cnNvcih0cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9pbmRleC0+ZGF0YWJhc2VJZCgpLCBtX2luZGV4LT5t
X29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgbV9pbmRleC0+aWQoKSwgbV9rZXlSYW5nZS5nZXQo
KSwgZGlyZWN0aW9uKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlOjpPYmplY3RTdG9yZUN1cnNvcjoKLSAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2U6OkludmFsaWRDdXJzb3JUeXBlOgorICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBpZiAoIWJhY2tp
bmdTdG9yZUN1cnNvcikgewpAQCAtMTcyLDcgKzE3MCw3IEBAIHZvaWQgSURCSW5kZXhCYWNrZW5k
SW1wbDo6b3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWdu
ZWQKICAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3IiKTsKICAg
ICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CiAgICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgaWYgKCF0cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKE9wZW5JbmRleEN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGtl
eVJhbmdlLCBkaXJlY3Rpb24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4Q3Vyc29y
LCBjYWxsYmFja3MpKSkKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT3Blbklu
ZGV4Q3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUodGhpcywga2V5UmFuZ2UsIGRpcmVjdGlvbiwgSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5QW5kVmFsdWUsIGNhbGxiYWNrcykpKQogICAgICAg
ICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7CiB9CiAKQEAgLTE4MSw3ICsxNzksNyBAQCB2b2lkIElE
QkluZGV4QmFja2VuZEltcGw6Om9wZW5LZXlDdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
a2V5UmFuZ2UsIHVuc2lnbgogICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6b3Bl
bktleUN1cnNvciIpOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENh
bGxiYWNrczsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rp
b24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAg
ICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9u
OjpjcmVhdGUodGhpcywga2V5UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZTo6SW5kZXhLZXlDdXJzb3IsIGNhbGxiYWNrcykpKQorICAgIGlmICghdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzayhPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlS
YW5nZSwgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlPbmx5LCBjYWxs
YmFja3MpKSkKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXgg
MDczZTM5N2I4ZDU1MmE0ZTJjNGNjZTc1NThiNTI3MDRlNjIzMzFkZS4uZjFkMTc2YzRlMzg4N2Fl
Y2NiZjVkZTAzYjEwNGRlZDAxNzNhZWYwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtNTAzLDcgKzUwMyw3IEBAIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVmUHRyPElE
QlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55Ojpj
cmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIHJlcXVlc3QtPnNldEN1cnNv
ckRldGFpbHMoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6T2JqZWN0U3RvcmVDdXJzb3IsIGRp
cmVjdGlvbik7CisgICAgcmVxdWVzdC0+c2V0Q3Vyc29yRGV0YWlscyhJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlOjpLZXlBbmRWYWx1ZSwgZGlyZWN0aW9uKTsKICAgICBtX2JhY2tlbmQtPm9wZW5D
dXJzb3IocmFuZ2UsIGRpcmVjdGlvbiwgcmVxdWVzdCwgdGFza1R5cGUsIG1fdHJhbnNhY3Rpb24t
PmJhY2tlbmQoKSwgZWMpOwogICAgIEFTU0VSVCghZWMpOwogICAgIHJldHVybiByZXF1ZXN0LnJl
bGVhc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggMThkMjZjZjZlNGE0Y2E5
YWRiYTZmYzMxMWQ4NDI5ZDIyNDY2NzE4MC4uYTJlZGY0YWViYjYyYjQ4MjYzMTUxZTYyYzcwMjY5
NzM2NDEyZTEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAgLTM0Myw3NSArMzQz
LDUwIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzCiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJy
b3IpKTsKIH0KIAotbmFtZXNwYWNlIHsKLWNsYXNzIEluZGV4V3JpdGVyIHsKLXB1YmxpYzoKLSAg
ICBleHBsaWNpdCBJbmRleFdyaXRlcihjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFk
YXRhKQotICAgICAgICA6IG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQotICAgIHsgfQot
Ci0gICAgSW5kZXhXcml0ZXIoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSwK
LSAgICAgICAgICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6Oklu
ZGV4S2V5cyYgaW5kZXhLZXlzKQotICAgICAgICA6IG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFk
YXRhKQotICAgICAgICAsIG1faW5kZXhLZXlzKGluZGV4S2V5cykKLSAgICB7IH0KLQotICAgIGJv
b2wgdmVyaWZ5SW5kZXhLZXlzKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwKLSAgICAgICAgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgYm9vbCYgY2Fu
QWRkS2V5cywKLSAgICAgICAgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5ID0gMCwgU3RyaW5nKiBl
cnJvck1lc3NhZ2UgPSAwKSBXQVJOX1VOVVNFRF9SRVRVUk4KLSAgICB7Ci0gICAgICAgIGNhbkFk
ZEtleXMgPSBmYWxzZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5
cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgYm9vbCBvayA9IGFkZGluZ0tleUFsbG93ZWQo
YmFja2luZ1N0b3JlLCB0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5k
ZXhJZCwgKG1faW5kZXhLZXlzKVtpXS5nZXQoKSwgcHJpbWFyeUtleSwgY2FuQWRkS2V5cyk7Ci0g
ICAgICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGlmICghY2FuQWRkS2V5cykgewotICAgICAgICAgICAgICAgIGlmIChlcnJvck1lc3Nh
Z2UpCi0gICAgICAgICAgICAgICAgICAgICplcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgi
VW5hYmxlIHRvIGFkZCBrZXkgdG8gaW5kZXggJyVzJzogYXQgbGVhc3Qgb25lIGtleSBkb2VzIG5v
dCBzYXRpc2Z5IHRoZSB1bmlxdWVuZXNzIHJlcXVpcmVtZW50cy4iLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleE1ldGFkYXRhLm5hbWUu
dXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICB9Citib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVyOjp2ZXJpZnlJ
bmRleEtleXMoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBib29sJiBjYW5BZGRLZXlzLCBjb25zdCBJREJL
ZXkqIHByaW1hcnlLZXksIFN0cmluZyogZXJyb3JNZXNzYWdlKSBjb25zdAoreworICAgIGNhbkFk
ZEtleXMgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5kZXhLZXlzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGJvb2wgb2sgPSBhZGRpbmdLZXlBbGxvd2VkKGJhY2tpbmdT
dG9yZSwgdHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICht
X2luZGV4S2V5cylbaV0uZ2V0KCksIHByaW1hcnlLZXksIGNhbkFkZEtleXMpOworICAgICAgICBp
ZiAoIW9rKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWNhbkFkZEtl
eXMpIHsKKyAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UpCisgICAgICAgICAgICAgICAgKmVy
cm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJVbmFibGUgdG8gYWRkIGtleSB0byBpbmRleCAn
JXMnOiBhdCBsZWFzdCBvbmUga2V5IGRvZXMgbm90IHNhdGlzZnkgdGhlIHVuaXF1ZW5lc3MgcmVx
dWlyZW1lbnRzLiIsIG1faW5kZXhNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgY2FuQWRkS2V5cyA9IHRydWU7
Ci0gICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICBjYW5BZGRLZXlzID0gdHJ1ZTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIHZvaWQgd3JpdGVJbmRleEtleXMoY29uc3QgSURCQmFj
a2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyJiByZWNvcmRJZGVudGlmaWVyLCBJREJCYWNraW5n
U3RvcmUmIGJhY2tpbmdTdG9yZSwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBjb25zdAot
ICAgIHsKLSAgICAgICAgaW50NjRfdCBpbmRleElkID0gbV9pbmRleE1ldGFkYXRhLmlkOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5kZXhLZXlzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgICAgICBiYWNraW5nU3RvcmUucHV0SW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9u
LCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqKG1faW5kZXhLZXlzKVtpXS5n
ZXQoKSwgcmVjb3JkSWRlbnRpZmllcik7Ci0gICAgICAgIH0KK3ZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6OndyaXRlSW5kZXhLZXlzKGNvbnN0IElEQkJhY2tpbmdT
dG9yZTo6UmVjb3JkSWRlbnRpZmllciYgcmVjb3JkSWRlbnRpZmllciwgSURCQmFja2luZ1N0b3Jl
JiBiYWNraW5nU3RvcmUsIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgY29uc3QKK3sKKyAg
ICBpbnQ2NF90IGluZGV4SWQgPSBtX2luZGV4TWV0YWRhdGEuaWQ7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgeworICAgICAgICBiYWNraW5nU3Rv
cmUucHV0SW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkLCAqKG1faW5kZXhLZXlzKVtpXS5nZXQoKSwgcmVjb3JkSWRlbnRpZmll
cik7CiAgICAgfQorfQogCi1wcml2YXRlOgotCi0gICAgYm9vbCBhZGRpbmdLZXlBbGxvd2VkKElE
QkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbiwKLSAgICAgICAgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwKLSAgICAgICAgY29uc3QgSURCS2V5KiBpbmRleEtl
eSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBib29sJiBhbGxvd2VkKSBjb25zdCBXQVJOX1VO
VVNFRF9SRVRVUk4KLSAgICB7Ci0gICAgICAgIGFsbG93ZWQgPSBmYWxzZTsKLSAgICAgICAgaWYg
KCFtX2luZGV4TWV0YWRhdGEudW5pcXVlKSB7Ci0gICAgICAgICAgICBhbGxvd2VkID0gdHJ1ZTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmUHRyPElE
QktleT4gZm91bmRQcmltYXJ5S2V5OwotICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAg
ICAgIGJvb2wgb2sgPSBiYWNraW5nU3RvcmUua2V5RXhpc3RzSW5JbmRleCh0cmFuc2FjdGlvbiwg
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKmluZGV4S2V5LCBmb3VuZFByaW1h
cnlLZXksIGZvdW5kKTsKLSAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKCFmb3VuZCB8fCAocHJpbWFyeUtleSAmJiBmb3VuZFByaW1hcnlLZXkt
PmlzRXF1YWwocHJpbWFyeUtleSkpKQotICAgICAgICAgICAgYWxsb3dlZCA9IHRydWU7Citib29s
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVyOjphZGRpbmdLZXlBbGxvd2Vk
KElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5
KiBwcmltYXJ5S2V5LCBib29sJiBhbGxvd2VkKSBjb25zdAoreworICAgIGFsbG93ZWQgPSBmYWxz
ZTsKKyAgICBpZiAoIW1faW5kZXhNZXRhZGF0YS51bmlxdWUpIHsKKyAgICAgICAgYWxsb3dlZCA9
IHRydWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGNvbnN0IElEQkluZGV4
TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwotICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZTo6SW5kZXhLZXlzIG1faW5kZXhLZXlzOwotfTsKKyAgICBSZWZQdHI8SURCS2V5PiBmb3Vu
ZFByaW1hcnlLZXk7CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgIGJvb2wgb2sgPSBiYWNr
aW5nU3RvcmUua2V5RXhpc3RzSW5JbmRleCh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgaW5kZXhJZCwgKmluZGV4S2V5LCBmb3VuZFByaW1hcnlLZXksIGZvdW5kKTsKKyAg
ICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFmb3VuZCB8fCAocHJp
bWFyeUtleSAmJiBmb3VuZFByaW1hcnlLZXktPmlzRXF1YWwocHJpbWFyeUtleSkpKQorICAgICAg
ICBhbGxvd2VkID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotV0FSTl9VTlVTRURfUkVU
VVJOIHN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2Jq
ZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVy
YXRlZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBWZWN0b3I8
T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJyb3JNZXNzYWdl
LCBib29sJiBjb21wbGV0ZWQpCitib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om1ha2VJ
bmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2Fj
dGlvbiwgSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwg
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURC
S2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPGludDY0
X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBp
bmRleFdyaXRlcnMsIFN0cmluZyogZXJyb3JNZXNzYWdlLCBib29sJiBjb21wbGV0ZWQpCiB7CiAg
ICAgQVNTRVJUKGluZGV4SWRzLnNpemUoKSA9PSBpbmRleEtleXMuc2l6ZSgpKTsKICAgICBjb21w
bGV0ZWQgPSBmYWxzZTsKQEAgLTQyMCwyMyArMzk1LDE4IEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBz
dGF0aWMgYm9vbCBtYWtlSW5kZXhXcml0ZXJzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleElkcy5zaXplKCk7ICsraSkKICAg
ICAgICAgaW5kZXhLZXlNYXAuYWRkKGluZGV4SWRzW2ldLCBpbmRleEtleXNbaV0pOwogCi0gICAg
Zm9yIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBv
YmplY3RTdG9yZS0+aXRlckluZGV4ZXNCZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+aXRlcklu
ZGV4ZXNFbmQoKTsgKytpdCkgeworICAgIGZvciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5k
ZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUuaW5kZXhlcy5iZWdpbigpOyBp
dCAhPSBvYmplY3RTdG9yZS5pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAKLSAgICAgICAgY29uc3Qg
UmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT52YWx1ZTsKKyAgICAgICAg
Y29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXggPSBpdC0+dmFsdWU7CiAKICAgICAgICAgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMga2V5cyA9IGluZGV4S2V5TWFw
LmdldChpdC0+a2V5KTsKICAgICAgICAgLy8gSWYgdGhlIG9iamVjdFN0b3JlIGlzIHVzaW5nIGF1
dG9JbmNyZW1lbnQsIHRoZW4gYW55IGluZGV4ZXMgd2l0aCBhbiBpZGVudGljYWwga2V5UGF0aCBu
ZWVkIHRvIGFsc28gdXNlIHRoZSBwcmltYXJ5IChnZW5lcmF0ZWQpIGtleSBhcyBhIGtleS4KLSAg
ICAgICAgaWYgKGtleVdhc0dlbmVyYXRlZCkgewotICAgICAgICAgICAgY29uc3QgSURCS2V5UGF0
aCYgaW5kZXhLZXlQYXRoID0gaW5kZXgtPmtleVBhdGgoKTsKLSAgICAgICAgICAgIGlmIChpbmRl
eEtleVBhdGggPT0gb2JqZWN0U3RvcmUtPmtleVBhdGgoKSkKLSAgICAgICAgICAgICAgICBrZXlz
LmFwcGVuZChwcmltYXJ5S2V5KTsKLSAgICAgICAgfQorICAgICAgICBpZiAoa2V5V2FzR2VuZXJh
dGVkICYmIChpbmRleC5rZXlQYXRoID09IG9iamVjdFN0b3JlLmtleVBhdGgpKQorICAgICAgICAg
ICAga2V5cy5hcHBlbmQocHJpbWFyeUtleSk7CiAKLSAgICAgICAgT3duUHRyPEluZGV4V3JpdGVy
PiBpbmRleFdyaXRlcihhZG9wdFB0cihuZXcgSW5kZXhXcml0ZXIoaW5kZXgtPm1ldGFkYXRhKCks
IGtleXMpKSk7CisgICAgICAgIE93blB0cjxJbmRleFdyaXRlcj4gaW5kZXhXcml0ZXIoYWRvcHRQ
dHIobmV3IEluZGV4V3JpdGVyKGluZGV4LCBrZXlzKSkpOwogICAgICAgICBib29sIGNhbkFkZEtl
eXMgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBiYWNraW5nU3RvcmVTdWNjZXNzID0gaW5kZXhXcml0
ZXItPnZlcmlmeUluZGV4S2V5cygqb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLAotICAgICAg
ICAgICAgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0b3Jl
LT5kYXRhYmFzZUlkKCksCi0gICAgICAgICAgICBvYmplY3RTdG9yZS0+aWQoKSwgaW5kZXgtPmlk
KCksIGNhbkFkZEtleXMsIHByaW1hcnlLZXkuZ2V0KCksIGVycm9yTWVzc2FnZSk7CisgICAgICAg
IGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IGluZGV4V3JpdGVyLT52ZXJpZnlJbmRleEtleXMo
KmJhY2tpbmdTdG9yZSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlLmlkLCBpbmRleC5pZCwgY2FuQWRkS2V5cywgcHJpbWFyeUtl
eS5nZXQoKSwgZXJyb3JNZXNzYWdlKTsKICAgICAgICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNz
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIWNhbkFkZEtleXMpCkBA
IC00NzUsNyArNDQ1LDggQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRl
eEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGMKICAgICBWZWN0b3I8T3du
UHRyPEluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdl
OwogICAgIGJvb2wgb2JleXNDb25zdHJhaW50cyA9IGZhbHNlOwotICAgIGJvb2wgYmFja2luZ1N0
b3JlU3VjY2VzcyA9IG1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIHRoaXMsIHByaW1hcnlL
ZXksIGZhbHNlLCBpbmRleElkcywgaW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNz
YWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBzdG9y
ZSA9IGJhY2tpbmdTdG9yZSgpOworICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IG1ha2VJ
bmRleFdyaXRlcnModHJhbnNhY3Rpb24sIHN0b3JlLmdldCgpLCBkYXRhYmFzZUlkKCksIG1ldGFk
YXRhKCksIHByaW1hcnlLZXksIGZhbHNlLCBpbmRleElkcywgaW5kZXhLZXlzLCAmaW5kZXhXcml0
ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKICAgICBpZiAoIWJhY2tpbmdT
dG9yZVN1Y2Nlc3MpIHsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwg
ZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5cy4iKSk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTUzMSwxMCArNTAyLDEyIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0
CiAKICAgICBBU1NFUlQobV9rZXkgJiYgbV9rZXktPmlzVmFsaWQoKSk7CiAKKyAgICBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBtX29iamVjdFN0b3JlLT5tZXRh
ZGF0YSgpOwogICAgIElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciByZWNvcmRJZGVu
dGlmaWVyOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG1fb2Jq
ZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpOwogICAgIGlmIChtX3B1dE1vZGUgPT0gQWRkT25seSkg
ewogICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgb2sgPSBtX29iamVj
dFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlv
bi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgp
LCBtX29iamVjdFN0b3JlLT5pZCgpLCAqbV9rZXksICZyZWNvcmRJZGVudGlmaWVyLCBmb3VuZCk7
CisgICAgICAgIGJvb2wgb2sgPSBiYWNraW5nU3RvcmUtPmtleUV4aXN0c0luT2JqZWN0U3RvcmUo
dHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRh
dGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgKm1fa2V5LCAmcmVjb3JkSWRlbnRpZmll
ciwgZm91bmQpOwogICAgICAgICBpZiAoIW9rKSB7CiAgICAgICAgICAgICBtX2NhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVu
a25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNoZWNraW5nIGtleSBleGlzdGVuY2UuIikpOwog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTQ4LDcgKzUyMSw3IEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRy
YW5zYWN0CiAgICAgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CiAg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKICAgICBib29sIG9iZXlzQ29uc3RyYWludHMgPSBmYWxz
ZTsKLSAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtYWtlSW5kZXhXcml0ZXJzKHRyYW5z
YWN0aW9uLCBtX29iamVjdFN0b3JlLmdldCgpLCBtX2tleSwga2V5V2FzR2VuZXJhdGVkLCAqbV9w
b3BJbmRleElkcywgKm1fcG9wSW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdl
LCBvYmV5c0NvbnN0cmFpbnRzKTsKKyAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtYWtl
SW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fb2JqZWN0U3Rv
cmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwgbV9rZXksIGtleVdhc0dlbmVy
YXRlZCwgKm1fcG9wSW5kZXhJZHMsICptX3BvcEluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVy
cm9yTWVzc2FnZSwgb2JleXNDb25zdHJhaW50cyk7CiAgICAgaWYgKCFiYWNraW5nU3RvcmVTdWNj
ZXNzKSB7CiAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6
IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5cy4iKSk7CiAgICAgICAgIHJl
dHVybjsKQEAgLTcxMyw3ICs2ODYsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
Ok9wZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFucwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJz
b3IgPSBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKGJhY2tpbmdTdG9yZUN1cnNvci5yZWxl
YXNlKCksIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6Ok9iamVjdFN0b3JlQ3Vyc29yLCBtX3Rh
c2tUeXBlLCB0cmFuc2FjdGlvbiwgbV9vYmplY3RTdG9yZS5nZXQoKSk7CisgICAgUmVmUHRyPElE
QkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IgPSBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRl
KGJhY2tpbmdTdG9yZUN1cnNvci5yZWxlYXNlKCksIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6
OktleUFuZFZhbHVlLCBtX3Rhc2tUeXBlLCB0cmFuc2FjdGlvbiwgbV9vYmplY3RTdG9yZS5nZXQo
KSk7CiAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhjdXJzb3IsIGN1cnNvci0+a2V5KCksIGN1
cnNvci0+cHJpbWFyeUtleSgpLCBjdXJzb3ItPnZhbHVlKCkpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsLmgKaW5kZXggYzJkZTQ3NDhmY2RhYTdjMTc0ZjdlNjAzM2ExNjcxZTk0N2JiMjljYS4u
ZGNmNzAxOWUxYmJiZGVjNzA4MDY5MTA0ZjRiOTBiZWU3ZDBlYWVmNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuaApAQCAtOTAsNiArOTAsMzAgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlLT5i
YWNraW5nU3RvcmUoKTsgfQogICAgIGludDY0X3QgZGF0YWJhc2VJZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YWJhc2UtPmlkKCk7IH0KIAorICAgIGNsYXNzIEluZGV4V3JpdGVyIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIGV4cGxpY2l0IEluZGV4V3JpdGVyKGNvbnN0IElEQkluZGV4TWV0YWRhdGEm
IGluZGV4TWV0YWRhdGEpCisgICAgICAgICAgICA6IG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFk
YXRhKQorICAgICAgICB7IH0KKworICAgICAgICBJbmRleFdyaXRlcihjb25zdCBJREJJbmRleE1l
dGFkYXRhJiBpbmRleE1ldGFkYXRhLCBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U6OkluZGV4S2V5cyYgaW5kZXhLZXlzKQorICAgICAgICAgICAgOiBtX2luZGV4TWV0YWRhdGEo
aW5kZXhNZXRhZGF0YSkKKyAgICAgICAgICAgICwgbV9pbmRleEtleXMoaW5kZXhLZXlzKQorICAg
ICAgICB7IH0KKworICAgICAgICBib29sIHZlcmlmeUluZGV4S2V5cyhJREJCYWNraW5nU3RvcmUm
LCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgYm9vbCYgY2FuQWRkS2V5cywgY29u
c3QgSURCS2V5KiBwcmltYXJ5S2V5ID0gMCwgU3RyaW5nKiBlcnJvck1lc3NhZ2UgPSAwKSBjb25z
dCBXQVJOX1VOVVNFRF9SRVRVUk47CisKKyAgICAgICAgdm9pZCB3cml0ZUluZGV4S2V5cyhjb25z
dCBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXImLCBJREJCYWNraW5nU3RvcmUmLCBJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgYm9vbCBhZGRp
bmdLZXlBbGxvd2VkKElEQkJhY2tpbmdTdG9yZSYsIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBJREJLZXkqIGluZGV4S2V5LCBjb25zdCBJREJLZXkqIHByaW1hcnlLZXks
IGJvb2wmIGFsbG93ZWQpIGNvbnN0IFdBUk5fVU5VU0VEX1JFVFVSTjsKKworICAgICAgICBjb25z
dCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKKyAgICAgICAgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMgbV9pbmRleEtleXM7CisgICAgfTsKKworICAg
IHN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiwgSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhJiwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIGJv
b2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25z
dCBWZWN0b3I8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+JiwgVmVj
dG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiogaW5kZXhXcml0ZXJzLCBTdHJpbmcqIGVycm9yTWVz
c2FnZSwgYm9vbCYgY29tcGxldGVkKSBXQVJOX1VOVVNFRF9SRVRVUk47CisKIHByaXZhdGU6CiAg
ICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
KiwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCmluZGV4IDBhMTIxMDFkOGVhMWUwMzIy
Mzg0ODdiMzkxNzA3NzUyZDhkZGQ0ZmIuLjFjYzQ0Y2Y4MTk2N2FhN2RmMTk1NGVkNDRkNzg2OGY4
NWJmY2Q1YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJl
cXVlc3QuY3BwCkBAIC03MCw3ICs3MCw3IEBAIElEQlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjCiAgICAg
LCBtX3NvdXJjZShzb3VyY2UpCiAgICAgLCBtX3Rhc2tUeXBlKHRhc2tUeXBlKQogICAgICwgbV9o
YXNQZW5kaW5nQWN0aXZpdHkodHJ1ZSkKLSAgICAsIG1fY3Vyc29yVHlwZShJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZSkKKyAgICAsIG1fY3Vyc29yVHlwZShJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlBbmRWYWx1ZSkKICAgICAsIG1fY3Vyc29yRGlyZWN0
aW9uKElEQkN1cnNvcjo6TkVYVCkKICAgICAsIG1fY3Vyc29yRmluaXNoZWQoZmFsc2UpCiAgICAg
LCBtX3BlbmRpbmdDdXJzb3IoMCkKQEAgLTE4NSw3ICsxODUsNyBAQCB2b2lkIElEQlJlcXVlc3Q6
OmFib3J0KCkKIHZvaWQgSURCUmVxdWVzdDo6c2V0Q3Vyc29yRGV0YWlscyhJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkN1cnNvcjo6RGlyZWN0aW9u
IGRpcmVjdGlvbikKIHsKICAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcpOwotICAg
IEFTU0VSVChtX2N1cnNvclR5cGUgPT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW52YWxp
ZEN1cnNvclR5cGUpOworICAgIEFTU0VSVCghbV9wZW5kaW5nQ3Vyc29yKTsKICAgICBtX2N1cnNv
clR5cGUgPSBjdXJzb3JUeXBlOwogICAgIG1fY3Vyc29yRGlyZWN0aW9uID0gZGlyZWN0aW9uOwog
fQpAQCAtMjI1LDcgKzIyNSw3IEBAIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0Q3Vyc29yKFBh
c3NSZWZQdHI8SURCQ3Vyc29yPiBjdXJzb3IsIFBhc3NSZWZQdHI8SURCS2V5CiAgICAgbV9jdXJz
b3JQcmltYXJ5S2V5ID0gcHJpbWFyeUtleTsKICAgICBtX2N1cnNvclZhbHVlID0gdmFsdWU7CiAK
LSAgICBpZiAobV9jdXJzb3JUeXBlID09IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4
S2V5Q3Vyc29yKSB7CisgICAgaWYgKG1fY3Vyc29yVHlwZSA9PSBJREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlOjpLZXlPbmx5KSB7CiAgICAgICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoY3Vy
c29yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI4OCwxMiArMjg4LDE4IEBAIHZvaWQg
SURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZT4gYmFja2VuZCwgUGFzc1JlCiAKICAgICBET01SZXF1ZXN0U3RhdGU6OlNjb3BlIHNjb3BlKG1f
cmVxdWVzdFN0YXRlKTsKICAgICBTY3JpcHRWYWx1ZSB2YWx1ZSA9IGRlc2VyaWFsaXplSURCVmFs
dWUocmVxdWVzdFN0YXRlKCksIHNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgQVNTRVJUKG1fY3Vyc29y
VHlwZSAhPSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZSk7Cisg
ICAgQVNTRVJUKCFtX3BlbmRpbmdDdXJzb3IpOwogICAgIFJlZlB0cjxJREJDdXJzb3I+IGN1cnNv
cjsKLSAgICBpZiAobV9jdXJzb3JUeXBlID09IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6Oklu
ZGV4S2V5Q3Vyc29yKQorICAgIHN3aXRjaCAobV9jdXJzb3JUeXBlKSB7CisgICAgY2FzZSBJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlPbmx5OgogICAgICAgICBjdXJzb3IgPSBJREJDdXJz
b3I6OmNyZWF0ZShiYWNrZW5kLCBtX2N1cnNvckRpcmVjdGlvbiwgdGhpcywgbV9zb3VyY2UuZ2V0
KCksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIGVsc2UKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlBbmRWYWx1ZToKICAgICAgICAgY3Vy
c29yID0gSURCQ3Vyc29yV2l0aFZhbHVlOjpjcmVhdGUoYmFja2VuZCwgbV9jdXJzb3JEaXJlY3Rp
b24sIHRoaXMsIG1fc291cmNlLmdldCgpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQogICAgIHNldFJlc3VsdEN1cnNvcihjdXJzb3IsIGtleSwgcHJpbWFyeUtleSwgdmFsdWUpOwog
CiAgICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>