<?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>150856</bug_id>
          
          <creation_ts>2015-11-03 14:21:59 -0800</creation_ts>
          <short_desc>[WK2] Add initial support for speculative resource revalidation to the WebKit disk cache</short_desc>
          <delta_ts>2015-11-20 14:29:48 -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>WebKit2</component>
          <version>Other</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>150898</dependson>
    
    <dependson>150951</dependson>
          <blocked>151402</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>barraclough</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1139080</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-03 14:21:59 -0800</bug_when>
    <thetext>Add initial support for speculative resource revalidation to the WebKit disk cache. The functionality will be disabled by default until it is more complete / mature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139081</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-03 14:22:17 -0800</bug_when>
    <thetext>rdar://problem/23092196</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140804</commentid>
    <comment_count>2</comment_count>
      <attachid>265188</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-10 09:40:19 -0800</bug_when>
    <thetext>Created attachment 265188
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140805</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-10 09:42:06 -0800</bug_when>
    <thetext>Attachment 265188 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:346:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:430:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.h:106:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.h:107:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140875</commentid>
    <comment_count>4</comment_count>
      <attachid>265209</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-10 11:47:52 -0800</bug_when>
    <thetext>Created attachment 265209
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140877</commentid>
    <comment_count>5</comment_count>
      <attachid>265210</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-10 11:50:43 -0800</bug_when>
    <thetext>Created attachment 265210
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140879</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-10 11:53:04 -0800</bug_when>
    <thetext>Attachment 265210 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:346:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:428:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.h:105:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.h:106:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140919</commentid>
    <comment_count>7</comment_count>
      <attachid>265210</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-11-10 13:29:24 -0800</bug_when>
    <thetext>Comment on attachment 265210
WIP Patch

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

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:136
&gt; +void SpeculativeLoad::cleanup()

Maybe call this something else than &quot;cleanup&quot; since it actually invokes the completion handler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141146</commentid>
    <comment_count>8</comment_count>
      <attachid>265301</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-11 10:23:16 -0800</bug_when>
    <thetext>Created attachment 265301
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141147</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-11 10:25:07 -0800</bug_when>
    <thetext>Attachment 265301 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:346:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:427:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.h:105:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.h:106:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141200</commentid>
    <comment_count>10</comment_count>
      <attachid>265301</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-11-11 13:19:20 -0800</bug_when>
    <thetext>Comment on attachment 265301
Patch

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

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.h:87
&gt; +using GlobalFrameID = std::pair&lt;uint64_t /*webPageID*/, uint64_t /*webFrameID*/&gt;;

It would be slightly nicer if this was a struct with named fields though I suppose that would make using it as hash key more complicated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141202</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-11 13:24:16 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Comment on attachment 265301 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=265301&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.h:87
&gt; &gt; +using GlobalFrameID = std::pair&lt;uint64_t /*webPageID*/, uint64_t /*webFrameID*/&gt;;
&gt; 
&gt; It would be slightly nicer if this was a struct with named fields though I
&gt; suppose that would make using it as hash key more complicated.

How strongly do you feel about this? :) As you said, I would need to provide HashTraits if I did this. Also, the code should really not need to access actual pair values. The only code that does currently is the Cache Statistics code which is not production code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141219</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-11-11 14:11:40 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Comment on attachment 265301 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=265301&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.h:87
&gt; &gt; &gt; +using GlobalFrameID = std::pair&lt;uint64_t /*webPageID*/, uint64_t /*webFrameID*/&gt;;
&gt; &gt; 
&gt; &gt; It would be slightly nicer if this was a struct with named fields though I
&gt; &gt; suppose that would make using it as hash key more complicated.
&gt; 
&gt; How strongly do you feel about this? :) As you said, I would need to provide
&gt; HashTraits if I did this. Also, the code should really not need to access
&gt; actual pair values. The only code that does currently is the Cache
&gt; Statistics code which is not production code.

Not strongly at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141220</commentid>
    <comment_count>13</comment_count>
      <attachid>265301</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-11 14:12:38 -0800</bug_when>
    <thetext>Comment on attachment 265301
Patch

go go go</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141238</commentid>
    <comment_count>14</comment_count>
      <attachid>265301</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-11 15:01:30 -0800</bug_when>
    <thetext>Comment on attachment 265301
Patch

Clearing flags on attachment: 265301

Committed r192328: &lt;http://trac.webkit.org/changeset/192328&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141239</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-11 15:01:36 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265188</attachid>
            <date>2015-11-10 09:40:19 -0800</date>
            <delta_ts>2015-11-10 11:47:52 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>150856_NetworkCache_speculative_revalidation.patch</filename>
            <type>text/plain</type>
            <size>40787</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJj
ZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuY3BwCmluZGV4IDYxZDI1NTguLmRkNGE3ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcApAQCAt
MTI4LDcgKzEyOCw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydCgpCiAgICAg
fQogCiAgICAgUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVyKHRoaXMpOwotICAg
IE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkucmV0cmlldmUob3JpZ2luYWxSZXF1ZXN0KCksIG1f
cGFyYW1ldGVycy53ZWJQYWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFtZUlELCBbbG9hZGVyXShz
dGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4gZW50cnkpIHsKKyAgICBOZXR3b3Jr
Q2FjaGU6OnNpbmdsZXRvbigpLnJldHJpZXZlKG9yaWdpbmFsUmVxdWVzdCgpLCB7IG1fcGFyYW1l
dGVycy53ZWJQYWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFtZUlEIH0sIG1fcGFyYW1ldGVycy5z
ZXNzaW9uSUQsIFtsb2FkZXJdKHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiBl
bnRyeSkgewogICAgICAgICBpZiAobG9hZGVyLT5oYXNPbmVSZWYoKSkgewogICAgICAgICAgICAg
Ly8gVGhlIGxvYWRlciBoYXMgYmVlbiBhYm9ydGVkIGFuZCBpcyBvbmx5IGhlbGQgYWxpdmUgYnkg
dGhpcyBsYW1iZGEuCiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNDEsNyArMjQxLDcgQEAgYXV0
byBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZWNlaXZlZFIKICAgICBpZiAobV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbikg
ewogICAgICAgICBib29sIHZhbGlkYXRpb25TdWNjZWVkZWQgPSBtX3Jlc3BvbnNlLmh0dHBTdGF0
dXNDb2RlKCkgPT0gMzA0OyAvLyAzMDQgTm90IE1vZGlmaWVkCiAgICAgICAgIGlmICh2YWxpZGF0
aW9uU3VjY2VlZGVkKSB7Ci0gICAgICAgICAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnVw
ZGF0ZShvcmlnaW5hbFJlcXVlc3QoKSwgbV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCwgKm1fY2FjaGVF
bnRyeUZvclZhbGlkYXRpb24sIG1fcmVzcG9uc2UpOworICAgICAgICAgICAgTmV0d29ya0NhY2hl
OjpzaW5nbGV0b24oKS51cGRhdGUob3JpZ2luYWxSZXF1ZXN0KCksIHsgbV9wYXJhbWV0ZXJzLndl
YlBhZ2VJRCwgbV9wYXJhbWV0ZXJzLndlYkZyYW1lSUQgfSwgKm1fY2FjaGVFbnRyeUZvclZhbGlk
YXRpb24sIG1fcmVzcG9uc2UpOwogICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3Qgd2FzIGNv
bmRpdGlvbmFsIHRoZW4gdGhpcyByZXZhbGlkYXRpb24gd2FzIG5vdCB0cmlnZ2VyZWQgYnkgdGhl
IG5ldHdvcmsgY2FjaGUgYW5kIHdlIHBhc3MgdGhlCiAgICAgICAgICAgICAvLyAzMDQgcmVzcG9u
c2UgdG8gV2ViQ29yZS4KICAgICAgICAgICAgIGlmIChvcmlnaW5hbFJlcXVlc3QoKS5pc0NvbmRp
dGlvbmFsKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGUuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlLmNwcAppbmRleCBhMTFiZTJlLi4zMmViOTc1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKQEAgLTM0
Myw3ICszNDMsNyBAQCBzdGF0aWMgU3RvcmVEZWNpc2lvbiBtYWtlU3RvcmVEZWNpc2lvbihjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUgogICAgIHJldHVybiBTdG9yZURl
Y2lzaW9uOjpZZXM7CiB9CiAKLXZvaWQgQ2FjaGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCB1aW50NjRfdCB3ZWJQYWdlSUQsIHVpbnQ2
NF90IHdlYkZyYW1lSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoc3RkOjp1bmlxdWVfcHRyPEVudHJ5
Pik+IGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QsIGNvbnN0IEdsb2JhbEZyYW1lSUQm
IGZyYW1lSUQsIFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9p
ZCAoc3RkOjp1bmlxdWVfcHRyPEVudHJ5Pik+IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFT
U0VSVChpc0VuYWJsZWQoKSk7CiAgICAgQVNTRVJUKG9yaWdpbmFsUmVxdWVzdC51cmwoKS5wcm90
b2NvbElzSW5IVFRQRmFtaWx5KCkpOwpAQCAtMzUxLDM1ICszNTEsNTAgQEAgdm9pZCBDYWNoZTo6
cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3Qs
IHVpbnQ2NF90IHcKICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSByZXRy
aWV2aW5nICVzIHByaW9yaXR5ICVkIiwgb3JpZ2luYWxSZXF1ZXN0LnVybCgpLnN0cmluZygpLmFz
Y2lpKCkuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG9yaWdpbmFsUmVxdWVzdC5wcmlvcml0eSgp
KSk7CiAKICAgICBpZiAobV9zdGF0aXN0aWNzKQotICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29y
ZFJldHJpZXZhbFJlcXVlc3Qod2ViUGFnZUlEKTsKKyAgICAgICAgbV9zdGF0aXN0aWNzLT5yZWNv
cmRSZXRyaWV2YWxSZXF1ZXN0KGZyYW1lSUQuZmlyc3QpOwogCiAgICAgS2V5IHN0b3JhZ2VLZXkg
PSBtYWtlQ2FjaGVLZXkob3JpZ2luYWxSZXF1ZXN0KTsKIAogI2lmIEVOQUJMRShORVRXT1JLX0NB
Q0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKLSAgICBpZiAobV9zcGVjdWxhdGl2ZUxvYWRl
cikKLSAgICAgICAgbV9zcGVjdWxhdGl2ZUxvYWRlci0+cmVnaXN0ZXJMb2FkKHdlYlBhZ2VJRCwg
d2ViRnJhbWVJRCwgb3JpZ2luYWxSZXF1ZXN0LCBzdG9yYWdlS2V5KTsKKyAgICBpZiAobV9zcGVj
dWxhdGl2ZUxvYWRlcikgeworICAgICAgICBtX3NwZWN1bGF0aXZlTG9hZGVyLT5yZWdpc3Rlckxv
YWQoZnJhbWVJRCwgb3JpZ2luYWxSZXF1ZXN0LCBzdG9yYWdlS2V5KTsKKyAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBvcmlnaW5hbFJlcXVlc3QsIGZyYW1lSUQsIHNlc3Np
b25JRCwgc3RvcmFnZUtleV0geworICAgICAgICAgICAgbV9zcGVjdWxhdGl2ZUxvYWRlci0+c3Rh
cnRTcGVjdWxhdGl2ZVJldmFsaWRhdGlvbihvcmlnaW5hbFJlcXVlc3QsIGZyYW1lSUQsIHNlc3Np
b25JRCwgc3RvcmFnZUtleSk7CisgICAgICAgIH0pOworICAgIH0KICNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHdlYkZyYW1lSUQpOworICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uSUQpOwogI2VuZGlm
CiAKICAgICBhdXRvIHJldHJpZXZlRGVjaXNpb24gPSBtYWtlUmV0cmlldmVEZWNpc2lvbihvcmln
aW5hbFJlcXVlc3QpOworCiAgICAgaWYgKHJldHJpZXZlRGVjaXNpb24gIT0gUmV0cmlldmVEZWNp
c2lvbjo6WWVzKSB7CiAgICAgICAgIGlmIChtX3N0YXRpc3RpY3MpCi0gICAgICAgICAgICBtX3N0
YXRpc3RpY3MtPnJlY29yZE5vdFVzaW5nQ2FjaGVGb3JSZXF1ZXN0KHdlYlBhZ2VJRCwgc3RvcmFn
ZUtleSwgb3JpZ2luYWxSZXF1ZXN0LCByZXRyaWV2ZURlY2lzaW9uKTsKKyAgICAgICAgICAgIG1f
c3RhdGlzdGljcy0+cmVjb3JkTm90VXNpbmdDYWNoZUZvclJlcXVlc3QoZnJhbWVJRC5maXJzdCwg
c3RvcmFnZUtleSwgb3JpZ2luYWxSZXF1ZXN0LCByZXRyaWV2ZURlY2lzaW9uKTsKIAogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAor
I2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKKyAgICBp
ZiAobV9zcGVjdWxhdGl2ZUxvYWRlciAmJiBtX3NwZWN1bGF0aXZlTG9hZGVyLT5yZXRyaWV2ZShz
dG9yYWdlS2V5LCBbb3JpZ2luYWxSZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlcl0oc3RkOjp1bmlx
dWVfcHRyPEVudHJ5PiBlbnRyeSkgeworICAgICAgICBpZiAoZW50cnkgJiYgdmVyaWZ5VmFyeWlu
Z1JlcXVlc3RIZWFkZXJzKGVudHJ5LT52YXJ5aW5nUmVxdWVzdEhlYWRlcnMoKSwgb3JpZ2luYWxS
ZXF1ZXN0KSkKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6bW92ZShlbnRyeSkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsK
KyAgICB9KSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKICAgICBhdXRvIHN0YXJ0VGltZSA9
IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwogICAgIGF1dG8gcHJpb3JpdHkgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4ob3JpZ2luYWxSZXF1ZXN0LnByaW9yaXR5KCkpOwogCi0gICAg
bV9zdG9yYWdlLT5yZXRyaWV2ZShzdG9yYWdlS2V5LCBwcmlvcml0eSwgW3RoaXMsIG9yaWdpbmFs
UmVxdWVzdCwgY29tcGxldGlvbkhhbmRsZXIsIHN0YXJ0VGltZSwgc3RvcmFnZUtleSwgd2ViUGFn
ZUlEXShzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZTo6UmVjb3JkPiByZWNvcmQpIHsKKyAgICBtX3N0
b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgb3JpZ2luYWxSZXF1
ZXN0LCBjb21wbGV0aW9uSGFuZGxlciwgc3RhcnRUaW1lLCBzdG9yYWdlS2V5LCBmcmFtZUlEXShz
dGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZTo6UmVjb3JkPiByZWNvcmQpIHsKICAgICAgICAgaWYgKCFy
ZWNvcmQpIHsKICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3Mp
IG5vdCBmb3VuZCBpbiBzdG9yYWdlIik7CiAKICAgICAgICAgICAgIGlmIChtX3N0YXRpc3RpY3Mp
Ci0gICAgICAgICAgICAgICAgbV9zdGF0aXN0aWNzLT5yZWNvcmRSZXRyaWV2YWxGYWlsdXJlKHdl
YlBhZ2VJRCwgc3RvcmFnZUtleSwgb3JpZ2luYWxSZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICBt
X3N0YXRpc3RpY3MtPnJlY29yZFJldHJpZXZhbEZhaWx1cmUoZnJhbWVJRC5maXJzdCwgc3RvcmFn
ZUtleSwgb3JpZ2luYWxSZXF1ZXN0KTsKIAogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
bnVsbHB0cik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00MDcsMTIgKzQyMiwxMiBA
QCB2b2lkIENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9y
aWdpbmFsUmVxdWVzdCwgdWludDY0X3QgdwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEY6
Om1vdmUoZW50cnkpKTsKIAogICAgICAgICBpZiAobV9zdGF0aXN0aWNzKQotICAgICAgICAgICAg
bV9zdGF0aXN0aWNzLT5yZWNvcmRSZXRyaWV2ZWRDYWNoZWRFbnRyeSh3ZWJQYWdlSUQsIHN0b3Jh
Z2VLZXksIG9yaWdpbmFsUmVxdWVzdCwgdXNlRGVjaXNpb24pOworICAgICAgICAgICAgbV9zdGF0
aXN0aWNzLT5yZWNvcmRSZXRyaWV2ZWRDYWNoZWRFbnRyeShmcmFtZUlELmZpcnN0LCBzdG9yYWdl
S2V5LCBvcmlnaW5hbFJlcXVlc3QsIHVzZURlY2lzaW9uKTsKICAgICAgICAgcmV0dXJuIHVzZURl
Y2lzaW9uICE9IFVzZURlY2lzaW9uOjpOb0R1ZVRvRGVjb2RlRmFpbHVyZTsKICAgICB9KTsKIH0K
IAotdm9pZCBDYWNoZTo6c3RvcmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmln
aW5hbFJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBS
ZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmIHJlc3BvbnNlRGF0YSwgc3RkOjpmdW5jdGlv
bjx2b2lkIChNYXBwZWRCb2R5Jik+IGNvbXBsZXRpb25IYW5kbGVyKQorc3RkOjp1bmlxdWVfcHRy
PEVudHJ5PiBDYWNoZTo6c3RvcmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmln
aW5hbFJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBS
ZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmIHJlc3BvbnNlRGF0YSwgc3RkOjpmdW5jdGlv
bjx2b2lkIChNYXBwZWRCb2R5Jik+IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChp
c0VuYWJsZWQoKSk7CiAgICAgQVNTRVJUKHJlc3BvbnNlRGF0YSk7CkBAIC00NDAsMTIgKzQ1NSwx
MiBAQCB2b2lkIENhY2hlOjpzdG9yZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9y
aWdpbmFsUmVxdWVzdCwgY29uc3QgV2ViQ29yZQogICAgICAgICBpZiAobV9zdGF0aXN0aWNzKQog
ICAgICAgICAgICAgbV9zdGF0aXN0aWNzLT5yZWNvcmROb3RDYWNoaW5nUmVzcG9uc2Uoa2V5LCBz
dG9yZURlY2lzaW9uKTsKIAotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAotICAgIEVudHJ5IGNhY2hlRW50cnkobWFrZUNhY2hlS2V5KG9yaWdpbmFsUmVx
dWVzdCksIHJlc3BvbnNlLCBXVEY6Om1vdmUocmVzcG9uc2VEYXRhKSwgY29sbGVjdFZhcnlpbmdS
ZXF1ZXN0SGVhZGVycyhvcmlnaW5hbFJlcXVlc3QsIHJlc3BvbnNlKSk7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEVudHJ5PiBjYWNoZUVudHJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxFbnRyeT4obWFrZUNh
Y2hlS2V5KG9yaWdpbmFsUmVxdWVzdCksIHJlc3BvbnNlLCBXVEY6Om1vdmUocmVzcG9uc2VEYXRh
KSwgY29sbGVjdFZhcnlpbmdSZXF1ZXN0SGVhZGVycyhvcmlnaW5hbFJlcXVlc3QsIHJlc3BvbnNl
KSk7CiAKLSAgICBhdXRvIHJlY29yZCA9IGNhY2hlRW50cnkuZW5jb2RlQXNTdG9yYWdlUmVjb3Jk
KCk7CisgICAgYXV0byByZWNvcmQgPSBjYWNoZUVudHJ5LT5lbmNvZGVBc1N0b3JhZ2VSZWNvcmQo
KTsKIAogICAgIG1fc3RvcmFnZS0+c3RvcmUocmVjb3JkLCBbY29tcGxldGlvbkhhbmRsZXJdKGNv
bnN0IERhdGEmIGJvZHlEYXRhKSB7CiAgICAgICAgIE1hcHBlZEJvZHkgbWFwcGVkQm9keTsKQEAg
LTQ1OSwyMyArNDc0LDI3IEBAIHZvaWQgQ2FjaGU6OnN0b3JlKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBjb25zdCBXZWJDb3JlCiAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKG1hcHBlZEJvZHkpOwogICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5l
dHdvcmtQcm9jZXNzKSBzdG9yZWQiKTsKICAgICB9KTsKKworICAgIHJldHVybiBjYWNoZUVudHJ5
OwogfQogCi12b2lkIENhY2hlOjp1cGRhdGUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiBvcmlnaW5hbFJlcXVlc3QsIHVpbnQ2NF90IHdlYlBhZ2VJRCwgY29uc3QgRW50cnkmIGV4aXN0
aW5nRW50cnksIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHZhbGlkYXRpbmdSZXNw
b25zZSkKK3N0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gQ2FjaGU6OnVwZGF0ZShjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgY29uc3QgR2xvYmFsRnJhbWVJRCYg
ZnJhbWVJRCwgY29uc3QgRW50cnkmIGV4aXN0aW5nRW50cnksIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmIHZhbGlkYXRpbmdSZXNwb25zZSkKIHsKICAgICBMT0coTmV0d29ya0NhY2hl
LCAiKE5ldHdvcmtQcm9jZXNzKSB1cGRhdGluZyAlcyIsIG9yaWdpbmFsUmVxdWVzdC51cmwoKS5z
dHJpbmcoKS5sYXRpbjEoKS5kYXRhKCkpOwogCiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSByZXNwb25zZSA9IGV4aXN0aW5nRW50cnkucmVzcG9uc2UoKTsKICAgICBXZWJDb3JlOjp1cGRh
dGVSZXNwb25zZUhlYWRlcnNBZnRlclJldmFsaWRhdGlvbihyZXNwb25zZSwgdmFsaWRhdGluZ1Jl
c3BvbnNlKTsKKyAgICByZXNwb25zZS5zZXRTb3VyY2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZTo6U291cmNlOjpEaXNrQ2FjaGUpOwogCi0gICAgRW50cnkgdXBkYXRlRW50cnkoZXhpc3RpbmdF
bnRyeS5rZXkoKSwgcmVzcG9uc2UsIGV4aXN0aW5nRW50cnkuYnVmZmVyKCksIGNvbGxlY3RWYXJ5
aW5nUmVxdWVzdEhlYWRlcnMob3JpZ2luYWxSZXF1ZXN0LCByZXNwb25zZSkpOwotCi0gICAgYXV0
byB1cGRhdGVSZWNvcmQgPSB1cGRhdGVFbnRyeS5lbmNvZGVBc1N0b3JhZ2VSZWNvcmQoKTsKKyAg
ICBhdXRvIHVwZGF0ZUVudHJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxFbnRyeT4oZXhpc3RpbmdFbnRy
eS5rZXkoKSwgcmVzcG9uc2UsIGV4aXN0aW5nRW50cnkuYnVmZmVyKCksIGNvbGxlY3RWYXJ5aW5n
UmVxdWVzdEhlYWRlcnMob3JpZ2luYWxSZXF1ZXN0LCByZXNwb25zZSkpOworICAgIGF1dG8gdXBk
YXRlUmVjb3JkID0gdXBkYXRlRW50cnktPmVuY29kZUFzU3RvcmFnZVJlY29yZCgpOwogCiAgICAg
bV9zdG9yYWdlLT5zdG9yZSh1cGRhdGVSZWNvcmQsIHsgfSk7CiAKICAgICBpZiAobV9zdGF0aXN0
aWNzKQotICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZFJldmFsaWRhdGlvblN1Y2Nlc3Mod2Vi
UGFnZUlELCBleGlzdGluZ0VudHJ5LmtleSgpLCBvcmlnaW5hbFJlcXVlc3QpOworICAgICAgICBt
X3N0YXRpc3RpY3MtPnJlY29yZFJldmFsaWRhdGlvblN1Y2Nlc3MoZnJhbWVJRC5maXJzdCwgZXhp
c3RpbmdFbnRyeS5rZXkoKSwgb3JpZ2luYWxSZXF1ZXN0KTsKKworICAgIHJldHVybiB1cGRhdGVF
bnRyeTsKIH0KIAogdm9pZCBDYWNoZTo6cmVtb3ZlKGNvbnN0IEtleSYga2V5KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmggYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAppbmRleCA3
ODM4OWUwLi41ZjU3YTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGUuaApAQCAtMzYsNiArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBTZXNzaW9uSUQ7CiBjbGFzcyBT
aGFyZWRCdWZmZXI7CiBjbGFzcyBVUkw7CiB9CkBAIC04NCw2ICs4NSw4IEBAIGVudW0gY2xhc3Mg
VXNlRGVjaXNpb24gewogICAgIE5vRHVlVG9EZWNvZGVGYWlsdXJlLAogfTsKIAordXNpbmcgR2xv
YmFsRnJhbWVJRCA9IHN0ZDo6cGFpcjx1aW50NjRfdCAvKndlYlBhZ2VJRCovLCB1aW50NjRfdCAv
KndlYkZyYW1lSUQqLz47CisKIGNsYXNzIENhY2hlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShDYWNoZSk7CiAgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8Q2FjaGU+OwpA
QCAtMTAwLDkgKzEwMyw5IEBAIHB1YmxpYzoKICAgICBib29sIGlzRW5hYmxlZCgpIGNvbnN0IHsg
cmV0dXJuICEhbV9zdG9yYWdlOyB9CiAKICAgICAvLyBDb21wbGV0aW9uIGhhbmRsZXIgbWF5IGdl
dCBjYWxsZWQgYmFjayBzeW5jaHJvbm91c2x5IG9uIGZhaWx1cmUuCi0gICAgdm9pZCByZXRyaWV2
ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCB1aW50NjRfdCB3ZWJQYWdlSUQsIHVp
bnQ2NF90IHdlYkZyYW1lSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoc3RkOjp1bmlxdWVfcHRyPEVu
dHJ5Pik+KTsKLSAgICB2b2lkIHN0b3JlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVk
QnVmZmVyPiYmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKE1hcHBlZEJvZHkmKT4pOwotICAgIHZvaWQg
dXBkYXRlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIHVpbnQ2NF90IHdlYlBhZ2VJ
RCwgY29uc3QgRW50cnkmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiB2YWxpZGF0
aW5nUmVzcG9uc2UpOworICAgIHZvaWQgcmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgR2xvYmFsRnJhbWVJRCYsIFdlYkNvcmU6OlNlc3Npb25JRCwgc3RkOjpm
dW5jdGlvbjx2b2lkIChzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+KT4pOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxFbnRyeT4gc3RvcmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+
JiYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoTWFwcGVkQm9keSYpPik7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEVudHJ5PiB1cGRhdGUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
R2xvYmFsRnJhbWVJRCYsIGNvbnN0IEVudHJ5JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYgdmFsaWRhdGluZ1Jlc3BvbnNlKTsKIAogICAgIHZvaWQgdHJhdmVyc2Uoc3RkOjpmdW5j
dGlvbjx2b2lkIChjb25zdCBFbnRyeSopPiYmKTsKICAgICB2b2lkIHJlbW92ZShjb25zdCBLZXkm
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUVudHJ5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUVudHJ5LmNwcAppbmRleCBlNzE3NzdiLi44YWJjODkzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50
cnkuY3BwCkBAIC00OSw2ICs0OSwxNiBAQCBFbnRyeTo6RW50cnkoY29uc3QgS2V5JiBrZXksIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBSZWZQdHI8VwogICAgIEFT
U0VSVChtX2tleS50eXBlKCkgPT0gInJlc291cmNlIik7CiB9CiAKK0VudHJ5OjpFbnRyeShjb25z
dCBFbnRyeSYgb3RoZXIpCisgICAgOiBtX2tleShvdGhlci5tX2tleSkKKyAgICAsIG1fdGltZVN0
YW1wKG90aGVyLm1fdGltZVN0YW1wKQorICAgICwgbV9yZXNwb25zZShvdGhlci5tX3Jlc3BvbnNl
KQorICAgICwgbV92YXJ5aW5nUmVxdWVzdEhlYWRlcnMob3RoZXIubV92YXJ5aW5nUmVxdWVzdEhl
YWRlcnMpCisgICAgLCBtX2J1ZmZlcihvdGhlci5tX2J1ZmZlcikKKyAgICAsIG1fc291cmNlU3Rv
cmFnZVJlY29yZChvdGhlci5tX3NvdXJjZVN0b3JhZ2VSZWNvcmQpCit7Cit9CisKIEVudHJ5OjpF
bnRyeShjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3JhZ2VFbnRyeSkKICAgICA6IG1fa2V5KHN0
b3JhZ2VFbnRyeS5rZXkpCiAgICAgLCBtX3RpbWVTdGFtcChzdG9yYWdlRW50cnkudGltZVN0YW1w
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRW50cnkuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUVudHJ5LmgKaW5kZXggOGRlMzkzZi4uYTJjOGExMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5oCkBA
IC00MywxMCArNDMsMTEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0Nh
Y2hlIHsKIAogY2xhc3MgRW50cnkgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEVudHJ5KTsg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgRW50cnkoY29uc3QgS2V5JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYsIGNvbnN0IFZlY3RvcjxzdGQ6
OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiYgdmFyeWluZ1JlcXVlc3RIZWFkZXJzKTsKICAgICBleHBs
aWNpdCBFbnRyeShjb25zdCBTdG9yYWdlOjpSZWNvcmQmKTsKKyAgICBFbnRyeShjb25zdCBFbnRy
eSYpOwogCiAgICAgU3RvcmFnZTo6UmVjb3JkIGVuY29kZUFzU3RvcmFnZVJlY29yZCgpIGNvbnN0
OwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IGRlY29kZVN0b3JhZ2VSZWNvcmQo
Y29uc3QgU3RvcmFnZTo6UmVjb3JkJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2Fk
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmQ4ZDM2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3BlY3VsYXRpdmVMb2FkLmNwcApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZF
X1JFVkFMSURBVElPTikKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuaCIK
KworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGUuaCIKKyNpbmNs
dWRlICJOZXR3b3JrTG9hZC5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1
ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdv
cmtDYWNoZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitTcGVjdWxhdGl2ZUxvYWQ6
OlNwZWN1bGF0aXZlTG9hZChjb25zdCBHbG9iYWxGcmFtZUlEJiBmcmFtZUlELCBTZXNzaW9uSUQg
c2Vzc2lvbklELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIHN0ZDo6dW5pcXVlX3B0
cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiBjYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbiwgUmV2YWxpZGF0
aW9uQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICA6IG1fZnJhbWVJ
RChmcmFtZUlEKQorICAgICwgbV9jb21wbGV0aW9uSGFuZGxlcihXVEY6Om1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKQorICAgICwgbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQorICAgICwgbV9vcmlnaW5h
bFJlcXVlc3QocmVxdWVzdCkKKyAgICAsIG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUoU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoKSkKKyAgICAsIG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24oV1RGOjptb3Zl
KGNhY2hlRW50cnlGb3JWYWxpZGF0aW9uKSkKK3sKKyAgICBBU1NFUlQobV9jYWNoZUVudHJ5Rm9y
VmFsaWRhdGlvbik7CisgICAgQVNTRVJUKG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24tPm5lZWRz
VmFsaWRhdGlvbigpKTsKKworICAgIE5ldHdvcmtMb2FkUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwor
ICAgIHBhcmFtZXRlcnMuc2Vzc2lvbklEID0gbV9zZXNzaW9uSUQ7CisgICAgcGFyYW1ldGVycy5h
bGxvd1N0b3JlZENyZWRlbnRpYWxzID0gQWxsb3dTdG9yZWRDcmVkZW50aWFsczsKKyAgICBwYXJh
bWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSA9IERvTm90U25pZmZDb250ZW50OworICAgIHBh
cmFtZXRlcnMucmVxdWVzdCA9IG1fb3JpZ2luYWxSZXF1ZXN0OworICAgIG1fbmV0d29ya0xvYWQg
PSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtMb2FkPigqdGhpcywgcGFyYW1ldGVycyk7Cit9CisK
K1NwZWN1bGF0aXZlTG9hZDo6flNwZWN1bGF0aXZlTG9hZCgpCit7CisgICAgQVNTRVJUKCFtX25l
dHdvcmtMb2FkKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUxvYWQ6OndpbGxTZW5kUmVkaXJlY3Rl
ZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQoreworICAgIHVwZGF0ZVJlZGlyZWN0Q2hhaW5TdGF0
dXMobV9yZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMsIHJlZGlyZWN0UmVzcG9uc2UpOworfQorCith
dXRvIFNwZWN1bGF0aXZlTG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlY2VpdmVkUmVzcG9uc2UpIC0+IFNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3Bv
bnNlCit7CisgICAgbV9yZXNwb25zZSA9IHJlY2VpdmVkUmVzcG9uc2U7CisKKyAgICBpZiAobV9y
ZXNwb25zZS5pc011bHRpcGFydCgpKQorICAgICAgICBtX2J1ZmZlcmVkRGF0YUZvckNhY2hlID0g
bnVsbHB0cjsKKworICAgIEFTU0VSVChtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uKTsKKworICAg
IGJvb2wgdmFsaWRhdGlvblN1Y2NlZWRlZCA9IG1fcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9
PSAzMDQ7IC8vIDMwNCBOb3QgTW9kaWZpZWQKKyAgICBpZiAodmFsaWRhdGlvblN1Y2NlZWRlZCkg
eworICAgICAgICBtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uID0gTmV0d29ya0NhY2hlOjpzaW5n
bGV0b24oKS51cGRhdGUobV9vcmlnaW5hbFJlcXVlc3QsIG1fZnJhbWVJRCwgKm1fY2FjaGVFbnRy
eUZvclZhbGlkYXRpb24sIG1fcmVzcG9uc2UpOworICAgICAgICBjbGVhbnVwKCk7CisgICAgICAg
IHJldHVybiBTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZTo6Tm87CisgICAgfQorCisg
ICAgbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbiA9IG51bGxwdHI7CisKKyAgICByZXR1cm4gU2hv
dWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2U6OlllczsKK30KKwordm9pZCBTcGVjdWxhdGl2
ZUxvYWQ6OmRpZFJlY2VpdmVCdWZmZXIoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIsIGlu
dCByZXBvcnRlZEVuY29kZWREYXRhTGVuZ3RoKQoreworICAgIEFTU0VSVCghbV9jYWNoZUVudHJ5
Rm9yVmFsaWRhdGlvbik7CisKKyAgICBpZiAobV9idWZmZXJlZERhdGFGb3JDYWNoZSkgeworICAg
ICAgICAvLyBQcmV2ZW50IG1lbW9yeSBncm93dGggaW4gY2FzZSBvZiBzdHJlYW1pbmcgZGF0YS4K
KyAgICAgICAgY29uc3Qgc2l6ZV90IG1heGltdW1DYWNoZUJ1ZmZlclNpemUgPSAxMCAqIDEwMjQg
KiAxMDI0OworICAgICAgICBpZiAobV9idWZmZXJlZERhdGFGb3JDYWNoZS0+c2l6ZSgpICsgYnVm
ZmVyLT5zaXplKCkgPD0gbWF4aW11bUNhY2hlQnVmZmVyU2l6ZSkKKyAgICAgICAgICAgIG1fYnVm
ZmVyZWREYXRhRm9yQ2FjaGUtPmFwcGVuZChidWZmZXIuZ2V0KCkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX2J1ZmZlcmVkRGF0YUZvckNhY2hlID0gbnVsbHB0cjsKKyAgICB9Cit9CisK
K3ZvaWQgU3BlY3VsYXRpdmVMb2FkOjpkaWRGaW5pc2hMb2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1l
KQoreworICAgIEFTU0VSVCghbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbik7CisKKyAgICBib29s
IGFsbG93U3RhbGUgPSBtX29yaWdpbmFsUmVxdWVzdC5jYWNoZVBvbGljeSgpID49IFJldHVybkNh
Y2hlRGF0YUVsc2VMb2FkOworICAgIGJvb2wgaGFzQ2FjaGVhYmxlUmVkaXJlY3QgPSBtX3Jlc3Bv
bnNlLmlzSFRUUCgpICYmIHJlZGlyZWN0Q2hhaW5BbGxvd3NSZXVzZShtX3JlZGlyZWN0Q2hhaW5D
YWNoZVN0YXR1cywgYWxsb3dTdGFsZSA/IFJldXNlRXhwaXJlZFJlZGlyZWN0aW9uIDogRG9Ob3RS
ZXVzZUV4cGlyZWRSZWRpcmVjdGlvbik7CisgICAgaWYgKGhhc0NhY2hlYWJsZVJlZGlyZWN0ICYm
IG1fcmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzLnN0YXR1cyA9PSBSZWRpcmVjdENoYWluQ2FjaGVT
dGF0dXM6OkNhY2hlZFJlZGlyZWN0aW9uKSB7CisgICAgICAgIC8vIE1heWJlIHdlIHNob3VsZCBj
YWNoZSB0aGUgYWN0dWFsIHJlZGlyZWN0cyBpbnN0ZWFkIG9mIHRoZSBlbmQgcmVzdWx0PworICAg
ICAgICBhdXRvIG5vdyA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOworICAgICAg
ICBhdXRvIHJlc3BvbnNlRW5kT2ZWYWxpZGl0eSA9IG5vdyArIGNvbXB1dGVGcmVzaG5lc3NMaWZl
dGltZUZvckhUVFBGYW1pbHkobV9yZXNwb25zZSwgbm93KSAtIGNvbXB1dGVDdXJyZW50QWdlKG1f
cmVzcG9uc2UsIG5vdyk7CisgICAgICAgIGhhc0NhY2hlYWJsZVJlZGlyZWN0ID0gcmVzcG9uc2VF
bmRPZlZhbGlkaXR5IDw9IG1fcmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzLmVuZE9mVmFsaWRpdHk7
CisgICAgfQorCisgICAgQVNTRVJUKCFzZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKTsKKyAgICBp
ZiAobV9idWZmZXJlZERhdGFGb3JDYWNoZSAmJiBoYXNDYWNoZWFibGVSZWRpcmVjdCkKKyAgICAg
ICAgbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbiA9IE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCku
c3RvcmUobV9vcmlnaW5hbFJlcXVlc3QsIG1fcmVzcG9uc2UsIFdURjo6bW92ZShtX2J1ZmZlcmVk
RGF0YUZvckNhY2hlKSwgW10oTmV0d29ya0NhY2hlOjpNYXBwZWRCb2R5JiBtYXBwZWRCb2R5KSB7
IH0pOworICAgIGVsc2UgaWYgKCFoYXNDYWNoZWFibGVSZWRpcmVjdCkgeworICAgICAgICAvLyBN
YWtlIHN1cmUgd2UgZG9uJ3Qga2VlcCBhIHN0YWxlIGVudHJ5IGluIHRoZSBjYWNoZS4KKyAgICAg
ICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUobV9vcmlnaW5hbFJlcXVlc3QpOwor
ICAgIH0KKworICAgIGNsZWFudXAoKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUxvYWQ6OmRpZEZh
aWxMb2FkaW5nKGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAgIG1fY2FjaGVFbnRyeUZvclZh
bGlkYXRpb24gPSBudWxscHRyOworCisgICAgY2xlYW51cCgpOworfQorCit2b2lkIFNwZWN1bGF0
aXZlTG9hZDo6Y2xlYW51cCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgbV9uZXR3b3JrTG9hZCA9IG51bGxwdHI7CisKKyAgICBtX2NvbXBsZXRpb25I
YW5kbGVyKFdURjo6bW92ZShtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIE5ldHdvcmtDYWNoZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVj
dWxhdGl2ZUxvYWQuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjlkOGEyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuaApAQCAtMCwwICsxLDg5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRfaAorI2Rl
ZmluZSBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRfaAorCisjaWYgRU5BQkxFKE5FVFdPUktf
Q0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKQorCisjaW5jbHVkZSAiTmV0d29ya0NhY2hl
LmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRW50cnkuaCIKKyNpbmNsdWRlICJOZXR3b3JrTG9h
ZENsaWVudC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9u
SUQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgTmV0d29ya0xvYWQ7CisKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewor
CitjbGFzcyBTcGVjdWxhdGl2ZUxvYWQgZmluYWwgOiBwdWJsaWMgTmV0d29ya0xvYWRDbGllbnQg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYgc3Rk
OjpmdW5jdGlvbjx2b2lkIChzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4pPiBS
ZXZhbGlkYXRpb25Db21wbGV0aW9uSGFuZGxlcjsKKyAgICBTcGVjdWxhdGl2ZUxvYWQoY29uc3Qg
R2xvYmFsRnJhbWVJRCYsIFdlYkNvcmU6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Jiwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+LCBSZXZhbGlk
YXRpb25Db21wbGV0aW9uSGFuZGxlciYmKTsKKworICAgIHZpcnR1YWwgflNwZWN1bGF0aXZlTG9h
ZCgpOworCitwcml2YXRlOgorICAgIC8vIE5ldHdvcmtMb2FkQ2xpZW50LgorICAgIHZpcnR1YWwg
dm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBs
b25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKGNvbnN0IFdlYkNv
cmU6OlByb3RlY3Rpb25TcGFjZSYpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1N5
bmNocm9ub3VzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgd2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNl
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNl
IGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVCdWZmZXIoUmVmUHRyPFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcj4mJiwgaW50IHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGgpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1lKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbExvYWRpbmcoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VFcnJvciYpIG92ZXJyaWRlOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZpcnR1
YWwgdm9pZCB3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpIG92
ZXJyaWRlIHsgfQorI2VuZGlmCisKKyAgICB2b2lkIGNsZWFudXAoKTsKKworICAgIEdsb2JhbEZy
YW1lSUQgbV9mcmFtZUlEOworICAgIFJldmFsaWRhdGlvbkNvbXBsZXRpb25IYW5kbGVyIG1fY29t
cGxldGlvbkhhbmRsZXI7CisgICAgV2ViQ29yZTo6U2Vzc2lvbklEIG1fc2Vzc2lvbklEOworICAg
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX29yaWdpbmFsUmVxdWVzdDsKKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxOZXR3b3JrTG9hZD4gbV9uZXR3b3JrTG9hZDsKKworICAgIFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRC
dWZmZXI+IG1fYnVmZmVyZWREYXRhRm9yQ2FjaGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdv
cmtDYWNoZTo6RW50cnk+IG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb247CisKKyAgICBXZWJDb3Jl
OjpSZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMgbV9yZWRpcmVjdENoYWluQ2FjaGVTdGF0dXM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9O
KQorCisjZW5kaWYgLy8gTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0
aXZlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVNwZWN1bGF0aXZlTG9hZGVyLmNwcAppbmRleCA0M2Y1Yzk1Li5mM2Y1MzdiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
cGVjdWxhdGl2ZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkZXIuY3BwCkBAIC0yOSw2ICsyOSw4IEBA
CiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkZXIuaCIKIAogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVFbnRyeS5oIgorI2luY2x1ZGUgIk5l
dHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN1YnJl
c291cmNlc0VudHJ5LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9IeXN0ZXJlc2lzQWN0aXZpdHkuaD4K
ICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTQwLDYgKzQyLDggQEAgbmFtZXNw
YWNlIE5ldHdvcmtDYWNoZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitzdGF0aWMg
Y29uc3QgYXV0byBwcmVsb2FkZWRFbnRyeUxpZmV0aW1lID0gMTBfczsKKwogc3RhdGljIGNvbnN0
IEF0b21pY1N0cmluZyYgc3VicmVzb3VyY2VzVHlwZSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKQEAgLTUyLDEyICs1Niw2NSBAQCBzdGF0aWMgaW5saW5lIEtleSBtYWtlU3Vi
cmVzb3VyY2VzS2V5KGNvbnN0IEtleSYgcmVzb3VyY2VLZXkpCiAgICAgcmV0dXJuIEtleShyZXNv
dXJjZUtleS5wYXJ0aXRpb24oKSwgc3VicmVzb3VyY2VzVHlwZSgpLCByZXNvdXJjZUtleS5yYW5n
ZSgpLCByZXNvdXJjZUtleS5pZGVudGlmaWVyKCkpOwogfQogCitzdGF0aWMgaW5saW5lIFJlc291
cmNlUmVxdWVzdCBjb25zdHJ1Y3RSZXZhbGlkYXRpb25SZXF1ZXN0KGNvbnN0IEVudHJ5JiBlbnRy
eSkKK3sKKyAgICBSZXNvdXJjZVJlcXVlc3QgcmV2YWxpZGF0aW9uUmVxdWVzdChlbnRyeS5rZXko
KS5pZGVudGlmaWVyKCkpOworCisgICAgU3RyaW5nIGVUYWcgPSBlbnRyeS5yZXNwb25zZSgpLmh0
dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6RVRhZyk7CisgICAgaWYgKCFlVGFnLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV2YWxpZGF0aW9uUmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoSFRU
UEhlYWRlck5hbWU6OklmTm9uZU1hdGNoLCBlVGFnKTsKKworICAgIFN0cmluZyBsYXN0TW9kaWZp
ZWQgPSBlbnRyeS5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6TGFz
dE1vZGlmaWVkKTsKKyAgICBpZiAoIWxhc3RNb2RpZmllZC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dmFsaWRhdGlvblJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpJZk1v
ZGlmaWVkU2luY2UsIGxhc3RNb2RpZmllZCk7CisKKyAgICByZXR1cm4gcmV2YWxpZGF0aW9uUmVx
dWVzdDsKK30KKworc3RhdGljIGJvb2wgcmVzcG9uc2VOZWVkc1JldmFsaWRhdGlvbihjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGlt
ZV9wb2ludCB0aW1lc3RhbXApCit7CisgICAgaWYgKHJlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRh
aW5zTm9DYWNoZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGF1dG8gYWdlID0gY29t
cHV0ZUN1cnJlbnRBZ2UocmVzcG9uc2UsIHRpbWVzdGFtcCk7CisgICAgYXV0byBsaWZldGltZSA9
IGNvbXB1dGVGcmVzaG5lc3NMaWZldGltZUZvckhUVFBGYW1pbHkocmVzcG9uc2UsIHRpbWVzdGFt
cCk7CisgICAgcmV0dXJuIGFnZSAtIGxpZmV0aW1lID4gMF9tczsKK30KKworY2xhc3MgU3BlY3Vs
YXRpdmVMb2FkZXI6OlByZWxvYWRlZEVudHJ5IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBQcmVsb2FkZWRFbnRyeShzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IGVu
dHJ5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJiBsaWZldGltZVJlYWNoZWRIYW5kbGVyKQorICAg
ICAgICA6IG1fZW50cnkoV1RGOjptb3ZlKGVudHJ5KSkKKyAgICAgICAgLCBtX2xpZmV0aW1lVGlt
ZXIoKnRoaXMsICZQcmVsb2FkZWRFbnRyeTo6bGlmZXRpbWVUaW1lckZpcmVkKQorICAgICAgICAs
IG1fbGlmZXRpbWVSZWFjaGVkSGFuZGxlcihXVEY6Om1vdmUobGlmZXRpbWVSZWFjaGVkSGFuZGxl
cikpCisgICAgeworICAgICAgICBtX2xpZmV0aW1lVGltZXIuc3RhcnRPbmVTaG90KHByZWxvYWRl
ZEVudHJ5TGlmZXRpbWUpOworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gdGFr
ZUNhY2hlRW50cnkoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZW50cnkpOworICAgICAgICBy
ZXR1cm4gV1RGOjptb3ZlKG1fZW50cnkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGxp
ZmV0aW1lVGltZXJGaXJlZCgpCisgICAgeworICAgICAgICBtX2xpZmV0aW1lUmVhY2hlZEhhbmRs
ZXIoKTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IG1fZW50cnk7CisgICAg
VGltZXIgbV9saWZldGltZVRpbWVyOworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBtX2xpZmV0
aW1lUmVhY2hlZEhhbmRsZXI7Cit9OworCiBjbGFzcyBTcGVjdWxhdGl2ZUxvYWRlcjo6UGVuZGlu
Z0ZyYW1lTG9hZCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAg
UGVuZGluZ0ZyYW1lTG9hZChjb25zdCBLZXkmIG1haW5SZXNvdXJjZUtleSwgc3RkOjpmdW5jdGlv
bjx2b2lkKCk+IGNvbXBsZXRpb25IYW5kbGVyKQorICAgIFBlbmRpbmdGcmFtZUxvYWQoY29uc3Qg
S2V5JiBtYWluUmVzb3VyY2VLZXksIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogICAgICAgICA6IG1fbWFpblJlc291cmNlS2V5KG1haW5SZXNvdXJjZUtleSkKLSAg
ICAgICAgLCBtX2NvbXBsZXRpb25IYW5kbGVyKGNvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICAs
IG1fY29tcGxldGlvbkhhbmRsZXIoV1RGOjptb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAg
ICAgLCBtX2xvYWRIeXN0ZXJlc2lzQWN0aXZpdHkoW3RoaXNdKEh5c3RlcmVzaXNTdGF0ZSBzdGF0
ZSkgeyBpZiAoc3RhdGUgPT0gSHlzdGVyZXNpc1N0YXRlOjpTdG9wcGVkKSBtX2NvbXBsZXRpb25I
YW5kbGVyKCk7IH0pCiAgICAgeyB9CiAKQEAgLTEwOSwyMyArMTY2LDQ1IEBAIFNwZWN1bGF0aXZl
TG9hZGVyOjp+U3BlY3VsYXRpdmVMb2FkZXIoKQogewogfQogCi12b2lkIFNwZWN1bGF0aXZlTG9h
ZGVyOjpyZWdpc3RlckxvYWQodWludDY0X3Qgd2ViUGFnZUlELCB1aW50NjRfdCB3ZWJGcmFtZUlE
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEtleSYgcmVzb3VyY2VLZXkp
Citib29sIFNwZWN1bGF0aXZlTG9hZGVyOjpyZXRyaWV2ZShjb25zdCBLZXkmIHN0b3JhZ2VLZXks
IGNvbnN0IFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXImIGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIC8vIENoZWNrIGFscmVhZHkgcHJlbG9hZGVkIGVudHJpZXMuCisgICAgaWYgKGF1dG8gcHJl
bG9hZGVkRW50cnkgPSBtX3ByZWxvYWRlZEVudHJpZXMudGFrZShzdG9yYWdlS2V5KSkgeworICAg
ICAgICBMT0coTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVQcmVsb2FkaW5nLCAiKE5ldHdvcmtQcm9j
ZXNzKSBSZXRyaWV2YWw6IFVzaW5nIHByZWxvYWRlZCBlbnRyeSB0byBzYXRpc2Z5IHJlcXVlc3Qg
Zm9yICclcyc6Iiwgc3RvcmFnZUtleS5pZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHByZWxvYWRlZEVudHJ5LT50YWtlQ2FjaGVFbnRyeSgpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gQ2hlY2sgcGVuZGluZyBzcGVj
dWxhdGl2ZSByZXZhbGlkYXRpb25zLgorICAgIGlmICghbV9wZW5kaW5nUmV2YWxpZGF0aW9ucy5j
b250YWlucyhzdG9yYWdlS2V5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTE9HKE5l
dHdvcmtDYWNoZVNwZWN1bGF0aXZlUHJlbG9hZGluZywgIihOZXR3b3JrUHJvY2VzcykgUmV0cmll
dmFsOiByZXZhbGlkYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcyBmb3IgJyVzJzoiLCBzdG9yYWdl
S2V5LmlkZW50aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGJy
ZWFrcyBpbmNyZW1lbnRhbCBsb2FkaW5nIHdoZW4gdGhlIHJldmFsaWRhdGlvbiBpcyBub3Qgc3Vj
Y2Vzc2Z1bC4KKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fcGVuZGluZ1JldHJpZXZlUmVxdWVzdHMu
YWRkKHN0b3JhZ2VLZXksIG51bGxwdHIpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkK
KyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHN0ZDo6bWFrZV91bmlxdWU8VmVj
dG9yPFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXI+PigpOworICAgIGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUtPmFwcGVuZChjb21wbGV0aW9uSGFuZGxlcik7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgU3BlY3VsYXRpdmVMb2FkZXI6OnJlZ2lzdGVyTG9hZChjb25zdCBHbG9iYWxGcmFt
ZUlEJiBmcmFtZUlELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEtleSYg
cmVzb3VyY2VLZXkpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIGlm
ICghcmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwgcmVxdWVzdC5odHRw
TWV0aG9kKCkgIT0gIkdFVCIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gZnJhbWVLZXkg
PSBzdGQ6Om1ha2VfcGFpcih3ZWJQYWdlSUQsIHdlYkZyYW1lSUQpOwogICAgIGF1dG8gaXNNYWlu
UmVzb3VyY2UgPSByZXF1ZXN0LnJlcXVlc3RlcigpID09IFJlc291cmNlUmVxdWVzdDo6UmVxdWVz
dGVyOjpNYWluOwogICAgIGlmIChpc01haW5SZXNvdXJjZSkgewogICAgICAgICAvLyBNYXJrIHBy
ZXZpb3VzIGxvYWQgaW4gdGhpcyBmcmFtZSBhcyBjb21wbGV0ZWQgaWYgbmVjZXNzYXJ5LgotICAg
ICAgICBpZiAoYXV0byogcGVuZGluZ0ZyYW1lTG9hZCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZ2V0
KGZyYW1lS2V5KSkKKyAgICAgICAgaWYgKGF1dG8qIHBlbmRpbmdGcmFtZUxvYWQgPSBtX3BlbmRp
bmdGcmFtZUxvYWRzLmdldChmcmFtZUlEKSkKICAgICAgICAgICAgIHBlbmRpbmdGcmFtZUxvYWQt
Pm1hcmtBc0NvbXBsZXRlZCgpOwogCiAgICAgICAgIC8vIFN0YXJ0IHRyYWNraW5nIGxvYWRzIGlu
IHRoaXMgZnJhbWUuCi0gICAgICAgIG1fcGVuZGluZ0ZyYW1lTG9hZHMuYWRkKGZyYW1lS2V5LCBz
dGQ6Om1ha2VfdW5pcXVlPFBlbmRpbmdGcmFtZUxvYWQ+KHJlc291cmNlS2V5LCBbdGhpcywgZnJh
bWVLZXldKCkgewotICAgICAgICAgICAgYXV0byBmcmFtZUxvYWQgPSBtX3BlbmRpbmdGcmFtZUxv
YWRzLnRha2UoZnJhbWVLZXkpOworICAgICAgICBtX3BlbmRpbmdGcmFtZUxvYWRzLmFkZChmcmFt
ZUlELCBzdGQ6Om1ha2VfdW5pcXVlPFBlbmRpbmdGcmFtZUxvYWQ+KHJlc291cmNlS2V5LCBbdGhp
cywgZnJhbWVJRF0oKSB7CisgICAgICAgICAgICBhdXRvIGZyYW1lTG9hZCA9IG1fcGVuZGluZ0Zy
YW1lTG9hZHMudGFrZShmcmFtZUlEKTsKICAgICAgICAgICAgIGF1dG8gb3B0aW9uYWxSZWNvcmQg
PSBmcmFtZUxvYWQtPmVuY29kZUFzU3VicmVzb3VyY2VzUmVjb3JkKCk7CiAgICAgICAgICAgICBp
ZiAoIW9wdGlvbmFsUmVjb3JkKQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTEzNCwxMCAr
MjEzLDEwNCBAQCB2b2lkIFNwZWN1bGF0aXZlTG9hZGVyOjpyZWdpc3RlckxvYWQodWludDY0X3Qg
d2ViUGFnZUlELCB1aW50NjRfdCB3ZWJGcmFtZUlELCBjbwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKGF1dG8qIHBlbmRpbmdGcmFtZUxvYWQgPSBtX3BlbmRpbmdGcmFtZUxvYWRz
LmdldChmcmFtZUtleSkpCisgICAgaWYgKGF1dG8qIHBlbmRpbmdGcmFtZUxvYWQgPSBtX3BlbmRp
bmdGcmFtZUxvYWRzLmdldChmcmFtZUlEKSkKICAgICAgICAgcGVuZGluZ0ZyYW1lTG9hZC0+cmVn
aXN0ZXJTdWJyZXNvdXJjZShyZXNvdXJjZUtleSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVMb2Fk
ZXI6OmFkZFByZWxvYWRlZEVudHJ5KHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gZW50cnkpCit7Cisg
ICAgQVNTRVJUKGVudHJ5KTsKKyAgICBBU1NFUlQoIWVudHJ5LT5uZWVkc1ZhbGlkYXRpb24oKSk7
CisgICAgYXV0byBrZXkgPSBlbnRyeS0+a2V5KCk7CisgICAgbV9wcmVsb2FkZWRFbnRyaWVzLmFk
ZChrZXksIHN0ZDo6bWFrZV91bmlxdWU8UHJlbG9hZGVkRW50cnk+KFdURjo6bW92ZShlbnRyeSks
IFt0aGlzLCBrZXldKCkgeworICAgICAgICBtX3ByZWxvYWRlZEVudHJpZXMucmVtb3ZlKGtleSk7
CisgICAgfSkpOworfQorCit2b2lkIFNwZWN1bGF0aXZlTG9hZGVyOjpyZXRyaWV2ZUVudHJ5RnJv
bVN0b3JhZ2UoY29uc3QgS2V5JiBrZXksIGNvbnN0IFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXIm
IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG1fc3RvcmFnZS5yZXRyaWV2ZShrZXksIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUhpZ2gpLCBbY29tcGxl
dGlvbkhhbmRsZXJdKHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlOjpSZWNvcmQ+IHJlY29yZCkgewor
ICAgICAgICBpZiAoIXJlY29yZCkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVs
bHB0cik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYXV0
byBlbnRyeSA9IEVudHJ5OjpkZWNvZGVTdG9yYWdlUmVjb3JkKCpyZWNvcmQpOworICAgICAgICBp
ZiAoIWVudHJ5KSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8mIHJlc3Bv
bnNlID0gZW50cnktPnJlc3BvbnNlKCk7CisgICAgICAgIGlmICghcmVzcG9uc2UuaGFzQ2FjaGVW
YWxpZGF0b3JGaWVsZHMoKSkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0
cik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChy
ZXNwb25zZU5lZWRzUmV2YWxpZGF0aW9uKHJlc3BvbnNlLCBlbnRyeS0+dGltZVN0YW1wKCkpKQor
ICAgICAgICAgICAgZW50cnktPnNldE5lZWRzVmFsaWRhdGlvbigpOworCisgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFdURjo6bW92ZShlbnRyeSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUxvYWRlcjo6cmV2YWxpZGF0ZUVudHJ5KHN0ZDo6
dW5pcXVlX3B0cjxFbnRyeT4gZW50cnksIGNvbnN0IEdsb2JhbEZyYW1lSUQmIGZyYW1lSUQsIFNl
c3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgQVNTRVJUKGVudHJ5KTsKKyAgICBBU1NFUlQoZW50
cnktPm5lZWRzVmFsaWRhdGlvbigpKTsKKworICAgIGF1dG8ga2V5ID0gZW50cnktPmtleSgpOwor
ICAgIExPRyhOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZVByZWxvYWRpbmcsICIoTmV0d29ya1Byb2Nl
c3MpIFNwZWN1bGF0aXZlbHkgcmV2YWxpZGF0aW5nICclcyc6Iiwga2V5LmlkZW50aWZpZXIoKS51
dGY4KCkuZGF0YSgpKTsKKyAgICBhdXRvIHJldmFsaWRhdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxT
cGVjdWxhdGl2ZUxvYWQ+KGZyYW1lSUQsIHNlc3Npb25JRCwgY29uc3RydWN0UmV2YWxpZGF0aW9u
UmVxdWVzdCgqZW50cnkpLCBXVEY6Om1vdmUoZW50cnkpLCBbdGhpcywga2V5XShzdGQ6OnVuaXF1
ZV9wdHI8RW50cnk+IHJldmFsaWRhdGVkRW50cnkpIHsKKyAgICAgICAgQVNTRVJUKCFlbnRyeSB8
fCAhZW50cnktPm5lZWRzVmFsaWRhdGlvbigpKTsKKyAgICAgICAgYXV0byBjb21wbGV0aW9uSGFu
ZGxlcnMgPSBtX3BlbmRpbmdSZXRyaWV2ZVJlcXVlc3RzLnRha2Uoa2V5KTsKKyAgICAgICAgTE9H
KE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlUHJlbG9hZGluZywgIihOZXR3b3JrUHJvY2VzcykgU3Bl
Y3VsYXRpdmUgcmV2YWxpZGF0aW9uIGNvbXBsZXRlZCBmb3IgJyVzJzoiLCBrZXkuaWRlbnRpZmll
cigpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBpZiAoY29tcGxldGlvbkhhbmRsZXJzKSB7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8mIGNvbXBsZXRpb25IYW5kbGVyIDogKmNvbXBsZXRpb25IYW5k
bGVycykKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXZhbGlkYXRlZEVudHJ5
ID8gc3RkOjptYWtlX3VuaXF1ZTxFbnRyeT4oKnJldmFsaWRhdGVkRW50cnkpIDogbnVsbHB0cik7
CisgICAgICAgIH0gZWxzZSBpZiAocmV2YWxpZGF0ZWRFbnRyeSkKKyAgICAgICAgICAgIGFkZFBy
ZWxvYWRlZEVudHJ5KFdURjo6bW92ZShyZXZhbGlkYXRlZEVudHJ5KSk7CisKKyAgICAgICAgbV9w
ZW5kaW5nUmV2YWxpZGF0aW9ucy5yZW1vdmUoa2V5KTsKKyAgICB9KTsKKyAgICBtX3BlbmRpbmdS
ZXZhbGlkYXRpb25zLmFkZChrZXksIFdURjo6bW92ZShyZXZhbGlkYXRvcikpOworfQorCit2b2lk
IFNwZWN1bGF0aXZlTG9hZGVyOjpwcmVsb2FkRW50cnkoY29uc3QgS2V5JiBrZXksIGNvbnN0IEds
b2JhbEZyYW1lSUQmIGZyYW1lSUQsIFNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgcmV0cmll
dmVFbnRyeUZyb21TdG9yYWdlKGtleSwgW3RoaXMsIGZyYW1lSUQsIHNlc3Npb25JRF0oc3RkOjp1
bmlxdWVfcHRyPEVudHJ5PiBlbnRyeSkgeworICAgICAgICBpZiAoIWVudHJ5KQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGlmIChlbnRyeS0+bmVlZHNWYWxpZGF0aW9uKCkpCisgICAg
ICAgICAgICByZXZhbGlkYXRlRW50cnkoV1RGOjptb3ZlKGVudHJ5KSwgZnJhbWVJRCwgc2Vzc2lv
bklEKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkUHJlbG9hZGVkRW50cnkoV1RGOjpt
b3ZlKGVudHJ5KSk7CisgICAgfSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVMb2FkZXI6OnN0YXJ0
U3BlY3VsYXRpdmVSZXZhbGlkYXRpb24oY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJl
cXVlc3QsIGNvbnN0IEdsb2JhbEZyYW1lSUQmIGZyYW1lSUQsIFNlc3Npb25JRCBzZXNzaW9uSUQs
IGNvbnN0IEtleSYgc3RvcmFnZUtleSkKK3sKKyAgICBpZiAob3JpZ2luYWxSZXF1ZXN0LnJlcXVl
c3RlcigpICE9IFJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyOjpNYWluKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIHN1YnJlc291cmNlc1N0b3JhZ2VLZXkgPSBtYWtlU3VicmVzb3VyY2Vz
S2V5KHN0b3JhZ2VLZXkpOworCisgICAgbV9zdG9yYWdlLnJldHJpZXZlKHN1YnJlc291cmNlc1N0
b3JhZ2VLZXksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihSZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVk
aXVtKSwgW3RoaXMsIGZyYW1lSUQsIHNlc3Npb25JRF0oc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2U6
OlJlY29yZD4gcmVjb3JkKSB7CisgICAgICAgIGlmICghcmVjb3JkKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8gc3VicmVzb3VyY2VzRW50cnkgPSBTdWJyZXNvdXJj
ZXNFbnRyeTo6ZGVjb2RlU3RvcmFnZVJlY29yZCgqcmVjb3JkKTsKKyAgICAgICAgaWYgKCFzdWJy
ZXNvdXJjZXNFbnRyeSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBmb3Ig
KGF1dG8mIHN1YnJlc291cmNlS2V5IDogc3VicmVzb3VyY2VzRW50cnktPnN1YnJlc291cmNlS2V5
cygpKQorICAgICAgICAgICAgcHJlbG9hZEVudHJ5KHN1YnJlc291cmNlS2V5LCBmcmFtZUlELCBz
ZXNzaW9uSUQpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOworfQorCiB9IC8vIG5h
bWVzcGFjZSBOZXR3b3JrQ2FjaGUKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxh
dGl2ZUxvYWRlci5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3BlY3VsYXRpdmVMb2FkZXIuaAppbmRleCAyYmRlMzM3Li4yNTJlNjc0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVj
dWxhdGl2ZUxvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZGVyLmgKQEAgLTI4LDI3ICsyOCw0OCBAQAogCiAj
aWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKQogCisjaW5j
bHVkZSAiTmV0d29ya0NhY2hlLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RvcmFnZS5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9T
ZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewog
CitjbGFzcyBFbnRyeTsKK2NsYXNzIFNwZWN1bGF0aXZlTG9hZDsKKwogY2xhc3MgU3BlY3VsYXRp
dmVMb2FkZXIgewogcHVibGljOgogICAgIGV4cGxpY2l0IFNwZWN1bGF0aXZlTG9hZGVyKFN0b3Jh
Z2UmKTsKICAgICB+U3BlY3VsYXRpdmVMb2FkZXIoKTsKIAotICAgIHZvaWQgcmVnaXN0ZXJMb2Fk
KHVpbnQ2NF90IHdlYlBhZ2VJRCwgdWludDY0X3Qgd2ViRnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgS2V5JiByZXNvdXJjZUtleSk7CisgICAgdm9pZCByZWdp
c3RlckxvYWQoY29uc3QgR2xvYmFsRnJhbWVJRCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IEtleSYgcmVzb3VyY2VLZXkpOworCisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4pPiBSZXRyaWV2ZUNvbXBsZXRpb25IYW5k
bGVyOworICAgIGJvb2wgcmV0cmlldmUoY29uc3QgS2V5JiBzdG9yYWdlS2V5LCBjb25zdCBSZXRy
aWV2ZUNvbXBsZXRpb25IYW5kbGVyJik7CisKKyAgICB2b2lkIHN0YXJ0U3BlY3VsYXRpdmVSZXZh
bGlkYXRpb24oY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgR2xvYmFsRnJh
bWVJRCYsIFdlYkNvcmU6OlNlc3Npb25JRCwgY29uc3QgS2V5JiBzdG9yYWdlS2V5KTsKIAogcHJp
dmF0ZToKKyAgICB2b2lkIGFkZFByZWxvYWRlZEVudHJ5KHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4p
OworICAgIHZvaWQgcHJlbG9hZEVudHJ5KGNvbnN0IEtleSYsIGNvbnN0IEdsb2JhbEZyYW1lSUQm
LCBXZWJDb3JlOjpTZXNzaW9uSUQpOworICAgIHZvaWQgcmV0cmlldmVFbnRyeUZyb21TdG9yYWdl
KGNvbnN0IEtleSYsIGNvbnN0IFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXImKTsKKyAgICB2b2lk
IHJldmFsaWRhdGVFbnRyeShzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+LCBjb25zdCBHbG9iYWxGcmFt
ZUlEJiwgV2ViQ29yZTo6U2Vzc2lvbklEKTsKKwogICAgIFN0b3JhZ2UmIG1fc3RvcmFnZTsKIAog
ICAgIGNsYXNzIFBlbmRpbmdGcmFtZUxvYWQ7Ci0gICAgdXNpbmcgR2xvYmFsRnJhbWVJRCA9IHN0
ZDo6cGFpcjx1aW50NjRfdCAvKndlYlBhZ2VJRCovLCB1aW50NjRfdCAvKndlYkZyYW1lSUQqLz47
CiAgICAgSGFzaE1hcDxHbG9iYWxGcmFtZUlELCBzdGQ6OnVuaXF1ZV9wdHI8UGVuZGluZ0ZyYW1l
TG9hZD4+IG1fcGVuZGluZ0ZyYW1lTG9hZHM7CisKKyAgICBIYXNoTWFwPEtleSwgc3RkOjp1bmlx
dWVfcHRyPFNwZWN1bGF0aXZlTG9hZD4+IG1fcGVuZGluZ1JldmFsaWRhdGlvbnM7CisgICAgSGFz
aE1hcDxLZXksIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8UmV0cmlldmVDb21wbGV0aW9uSGFuZGxl
cj4+PiBtX3BlbmRpbmdSZXRyaWV2ZVJlcXVlc3RzOworCisgICAgY2xhc3MgUHJlbG9hZGVkRW50
cnk7CisgICAgSGFzaE1hcDxLZXksIHN0ZDo6dW5pcXVlX3B0cjxQcmVsb2FkZWRFbnRyeT4+IG1f
cHJlbG9hZGVkRW50cmllczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29j
b2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2Nv
YS5tbQppbmRleCBmZDEwODNmLi4zOGM3MGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtMTEwLDcgKzExMCw3
IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKQogICAgIFtyZWdp
c3RyYXRpb25EaWN0aW9uYXJ5IHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVT
XSBmb3JLZXk6V2ViS2l0TmV0d29ya0NhY2hlRW5hYmxlZERlZmF1bHRzS2V5XTsKICAgICBbcmVn
aXN0cmF0aW9uRGljdGlvbmFyeSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5P
XSBmb3JLZXk6V2ViS2l0TmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5nRW5hYmxlZERlZmF1bHRz
S2V5XTsKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04p
Ci0gICAgW3JlZ2lzdHJhdGlvbkRpY3Rpb25hcnkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJX
aXRoQm9vbDpOT10gZm9yS2V5OldlYktpdE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlUmV2YWxpZGF0
aW9uRW5hYmxlZERlZmF1bHRzS2V5XTsKKyAgICBbcmVnaXN0cmF0aW9uRGljdGlvbmFyeSBzZXRP
YmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10gZm9yS2V5OldlYktpdE5ldHdvcmtD
YWNoZVNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uRW5hYmxlZERlZmF1bHRzS2V5XTsKICNlbmRpZgog
I2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCAyZjJlYzFjLi5jZjQ0ZDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTgwLDYgKzExODAsOCBAQAog
CQk4MzA0OEFFNjFBQ0E0NURDMDA4MkM4MzIgLyogUHJvY2Vzc1Rocm90dGxlckNsaWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODMwNDhBRTUxQUNB
NDVEQzAwODJDODMyIC8qIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQuaCAqLzsgfTsKIAkJODMxMDQy
OEIxQkQ2QjY2RjAwQTcxNUU0IC8qIE5ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzEwNDI4OTFCRDZC
NjZGMDBBNzE1RTQgLyogTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuaCAqLzsgfTsKIAkJ
ODMxMDQyOEMxQkQ2QjY2RjAwQTcxNUU0IC8qIE5ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzMTA0
MjhBMUJENkI2NkYwMEE3MTVFNCAvKiBOZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAg
Ki87IH07CisJCTgzMUVFQkJEMUJEODVDNDMwMEJCNjRDMyAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxh
dGl2ZUxvYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDgzMUVFQkJCMUJEODVDNDMwMEJCNjRDMyAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQu
aCAqLzsgfTsKKwkJODMxRUVCQkUxQkQ4NUM0MzAwQkI2NEMzIC8qIE5ldHdvcmtDYWNoZVNwZWN1
bGF0aXZlTG9hZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4MzFFRUJCQzFCRDg1QzQzMDBCQjY0QzMgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVM
b2FkLmNwcCAqLzsgfTsKIAkJODMyQUUyNTIxQkUyRThDRDAwRkFBRTEwIC8qIE5ldHdvcmtDYWNo
ZVNwZWN1bGF0aXZlTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4MzJBRTI1MDFCRTJFOENEMDBGQUFFMTAgLyogTmV0d29ya0NhY2hlU3BlY3Vs
YXRpdmVMb2FkZXIuaCAqLzsgfTsKIAkJODMyQUUyNTMxQkUyRThDRDAwRkFBRTEwIC8qIE5ldHdv
cmtDYWNoZVNwZWN1bGF0aXZlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDgzMkFFMjUxMUJFMkU4Q0QwMEZBQUUxMCAvKiBOZXR3b3JrQ2Fj
aGVTcGVjdWxhdGl2ZUxvYWRlci5jcHAgKi87IH07CiAJCTgzNEIyNTBGMUE4MzFBOEQwMENGQjE1
MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4MzRCMjUwRTFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0Nh
Y2hlRmlsZVN5c3RlbS5oICovOyB9OwpAQCAtMzQyMCw2ICszNDIyLDggQEAKIAkJODMwNDhBRTUx
QUNBNDVEQzAwODJDODMyIC8qIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvY2Vzc1Rocm90dGxlckNsaWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4MzEwNDI4OTFCRDZCNjZGMDBBNzE1RTQgLyogTmV0d29ya0Nh
Y2hlU3VicmVzb3VyY2VzRW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODMxMDQyOEExQkQ2QjY2RjAwQTcxNUU0IC8qIE5ldHdvcmtDYWNoZVN1YnJlc291cmNl
c0VudHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtD
YWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
ODMxRUVCQkIxQkQ4NUM0MzAwQkI2NEMzIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2
ZUxvYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODMxRUVCQkMxQkQ4NUM0MzAw
QkI2NEMzIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzJBRTI1MDFCRTJFOENEMDBGQUFFMTAgLyog
TmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODMyQUUyNTExQkUyRThDRDAwRkFBRTEwIC8qIE5ldHdvcmtDYWNoZVNw
ZWN1bGF0aXZlTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODM0QjI1MEUxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0
ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlRmlsZVN5
c3RlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzU4OSw2ICs3NTkzLDggQEAK
IAkJCQlFNDQzNkVDMTFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmggKi8sCiAJ
CQkJODMyQUUyNTExQkUyRThDRDAwRkFBRTEwIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9h
ZGVyLmNwcCAqLywKIAkJCQk4MzJBRTI1MDFCRTJFOENEMDBGQUFFMTAgLyogTmV0d29ya0NhY2hl
U3BlY3VsYXRpdmVMb2FkZXIuaCAqLywKKwkJCQk4MzFFRUJCQzFCRDg1QzQzMDBCQjY0QzMgLyog
TmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcCAqLywKKwkJCQk4MzFFRUJCQjFCRDg1QzQz
MDBCQjY0QzMgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmggKi8sCiAJCQkJODNCREND
QjgxQUM1RkRCNjAwM0Y2NDQxIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwICovLAogCQkJ
CTgzNEIyNTEwMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmggKi8s
CiAJCQkJRTQ0MzZFQzMxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuY3Bw
ICovLApAQCAtNzgyOCw2ICs3ODM0LDcgQEAKIAkJCQlDMENFNzJBRDEyNDdFNzhEMDBCQzBFQzQg
LyogSGFuZGxlTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDNzVBMUIxQjMzNjgyNzAw
NTY3NDVCIC8qIEhhbmdEZXRlY3Rpb25EaXNhYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdG
OTBERTMxMzc2NTYwRTAwNTFDRjY4IC8qIEhUVFBDb29raWVBY2NlcHRQb2xpY3kuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTgzMUVFQkJEMUJEODVDNDMwMEJCNjRDMyAvKiBOZXR3b3JrQ2FjaGVTcGVj
dWxhdGl2ZUxvYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNzUwOTVBMTg5NzI0OTcwMDQwOEZB
QyAvKiBJREJJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTgzNTNEQjE4ODVCRjhD
MDBEOUZFNDQgLyogSURCU2VyaWFsaXphdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFFMzUx
Q0IxODBGMkNDQzAwRTUzQkU5IC8qIElEQlV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCkBAIC05
ODgxLDYgKzk4ODgsNyBAQAogCQkJCTUxNUU3NzJGMTg0MDE1ODAwMDA3MjAzRiAvKiBVbmlxdWVJ
REJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTY1NEVGRDE4NEVGMzNGMDA3REM4
MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTE1RTc3MzMxODQwMkQ1MTAwMDcyMDNGIC8qIFVuaXF1ZUlEQkRhdGFiYXNlSWRl
bnRpZmllci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4MzFFRUJCRTFCRDg1QzQzMDBCQjY0QzMg
LyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFB
NjQyNDVGMTJERTI5QTEwMENBQUUyQyAvKiBVcGRhdGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTFBQzEzMzY3MTg1NjVCNTcwMEYzRUMwNSAvKiBVc2VyRGF0YS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNTczOUJCQzFCNDIwNDAzMDBEMjU4QzEgLyogVXNlck1lZGlhUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265209</attachid>
            <date>2015-11-10 11:47:52 -0800</date>
            <delta_ts>2015-11-10 11:50:43 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>0001-150856_NetworkCache_speculative_revalidation.patch</filename>
            <type>text/plain</type>
            <size>58700</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">RnJvbSBhNzI4M2UwNTA3NDY3ODkwMjMxNDVhNzdhOTYwNzg0ODFmN2VjMjdkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDaHJpcyBEdW1leiA8Y2R1bWV6QGFwcGxlLmNvbT4KRGF0ZTog
VHVlLCAyMCBPY3QgMjAxNSAxMToyODoxMCAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIDE1MDg1Nl9O
ZXR3b3JrQ2FjaGVfc3BlY3VsYXRpdmVfcmV2YWxpZGF0aW9uCgotLS0KIC4uLi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwICAgICAgIHwgICA0ICstCiAuLi4vV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwICB8ICA1OSArKy0tCiBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaCB8ICAxMiArLQog
Li4uL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcCAgICAgfCAgMTAg
KwogLi4uL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmggICAgICAgfCAg
IDMgKy0KIC4uLi9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwICAgICAgICAg
IHwgMTQ4ICsrKysrKysrKwogLi4uL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5o
ICAgICAgICAgICAgfCAgODcgKysrKysrCiAuLi4vY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRp
dmVMb2FkTWFuYWdlci5jcHAgICB8IDMzNSArKysrKysrKysrKysrKysrKysrKysKIC4uLi9jYWNo
ZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmggICAgIHwgIDgxICsrKysrCiAu
Li4vY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkZXIuY3BwICAgICAgICB8IDE0NSAt
LS0tLS0tLS0KIC4uLi9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRlci5oICAgICAg
ICAgIHwgIDYwIC0tLS0KIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9v
bENvY29hLm1tIHwgICAyICstCiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogICB8ICAyNCArLQogMTMgZmlsZXMgY2hhbmdlZCwgNzI3IGluc2VydGlvbnMo
KyksIDI0MyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3BlY3VsYXRpdmVMb2FkLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2Vy
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuaAogZGVsZXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1
bGF0aXZlTG9hZGVyLmNwcAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZGVyLmgKCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVy
LmNwcAppbmRleCA2MWQyNTU4Li5hOWRkMzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKQEAgLTEyOCw3ICsx
MjgsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnQoKQogICAgIH0KIAogICAg
IFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IGxvYWRlcih0aGlzKTsKLSAgICBOZXR3b3Jr
Q2FjaGU6OnNpbmdsZXRvbigpLnJldHJpZXZlKG9yaWdpbmFsUmVxdWVzdCgpLCBtX3BhcmFtZXRl
cnMud2ViUGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCwgW2xvYWRlcl0oc3RkOjp1bmlx
dWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+IGVudHJ5KSB7CisgICAgTmV0d29ya0NhY2hlOjpz
aW5nbGV0b24oKS5yZXRyaWV2ZShvcmlnaW5hbFJlcXVlc3QoKSwgeyBtX3BhcmFtZXRlcnMud2Vi
UGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCB9LCBbbG9hZGVyXShzdGQ6OnVuaXF1ZV9w
dHI8TmV0d29ya0NhY2hlOjpFbnRyeT4gZW50cnkpIHsKICAgICAgICAgaWYgKGxvYWRlci0+aGFz
T25lUmVmKCkpIHsKICAgICAgICAgICAgIC8vIFRoZSBsb2FkZXIgaGFzIGJlZW4gYWJvcnRlZCBh
bmQgaXMgb25seSBoZWxkIGFsaXZlIGJ5IHRoaXMgbGFtYmRhLgogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMjQxLDcgKzI0MSw3IEBAIGF1dG8gTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNl
aXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVjZWl2ZWRSCiAgICAgaWYgKG1f
Y2FjaGVFbnRyeUZvclZhbGlkYXRpb24pIHsKICAgICAgICAgYm9vbCB2YWxpZGF0aW9uU3VjY2Vl
ZGVkID0gbV9yZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID09IDMwNDsgLy8gMzA0IE5vdCBNb2Rp
ZmllZAogICAgICAgICBpZiAodmFsaWRhdGlvblN1Y2NlZWRlZCkgewotICAgICAgICAgICAgTmV0
d29ya0NhY2hlOjpzaW5nbGV0b24oKS51cGRhdGUob3JpZ2luYWxSZXF1ZXN0KCksIG1fcGFyYW1l
dGVycy53ZWJQYWdlSUQsICptX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uLCBtX3Jlc3BvbnNlKTsK
KyAgICAgICAgICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkudXBkYXRlKG9yaWdpbmFsUmVx
dWVzdCgpLCB7IG1fcGFyYW1ldGVycy53ZWJQYWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFtZUlE
IH0sICptX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uLCBtX3Jlc3BvbnNlKTsKICAgICAgICAgICAg
IC8vIElmIHRoZSByZXF1ZXN0IHdhcyBjb25kaXRpb25hbCB0aGVuIHRoaXMgcmV2YWxpZGF0aW9u
IHdhcyBub3QgdHJpZ2dlcmVkIGJ5IHRoZSBuZXR3b3JrIGNhY2hlIGFuZCB3ZSBwYXNzIHRoZQog
ICAgICAgICAgICAgLy8gMzA0IHJlc3BvbnNlIHRvIFdlYkNvcmUuCiAgICAgICAgICAgICBpZiAo
b3JpZ2luYWxSZXF1ZXN0KCkuaXNDb25kaXRpb25hbCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKaW5kZXggYTExYmUyZS4u
NzAyMGQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGUuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgRU5BQkxFKE5FVFdPUktf
Q0FDSEUpCiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlU3Bl
Y3VsYXRpdmVMb2FkZXIuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRN
YW5hZ2VyLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtDYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NhY2hlVmFsaWRhdGlv
bi5oPgpAQCAtNzgsNyArNzgsNyBAQCBib29sIENhY2hlOjppbml0aWFsaXplKGNvbnN0IFN0cmlu
ZyYgY2FjaGVQYXRoLCBjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogCiAjaWYgRU5BQkxF
KE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKQogICAgIGlmIChwYXJhbWV0
ZXJzLmVuYWJsZU5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uKQotICAgICAgICBt
X3NwZWN1bGF0aXZlTG9hZGVyID0gc3RkOjptYWtlX3VuaXF1ZTxTcGVjdWxhdGl2ZUxvYWRlcj4o
Km1fc3RvcmFnZSk7CisgICAgICAgIG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlciA9IHN0ZDo6bWFr
ZV91bmlxdWU8U3BlY3VsYXRpdmVMb2FkTWFuYWdlcj4oKm1fc3RvcmFnZSk7CiAjZW5kaWYKIAog
ICAgIGlmIChwYXJhbWV0ZXJzLmVuYWJsZUVmZmljYWN5TG9nZ2luZykKQEAgLTM0Myw3ICszNDMs
NyBAQCBzdGF0aWMgU3RvcmVEZWNpc2lvbiBtYWtlU3RvcmVEZWNpc2lvbihjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUgogICAgIHJldHVybiBTdG9yZURlY2lzaW9uOjpZ
ZXM7CiB9CiAKLXZvaWQgQ2FjaGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCB1aW50NjRfdCB3ZWJQYWdlSUQsIHVpbnQ2NF90IHdlYkZy
YW1lSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoc3RkOjp1bmlxdWVfcHRyPEVudHJ5Pik+IGNvbXBs
ZXRpb25IYW5kbGVyKQordm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QsIGNvbnN0IEdsb2JhbEZyYW1lSUQmIGZyYW1lSUQs
IHN0ZDo6ZnVuY3Rpb248dm9pZCAoc3RkOjp1bmlxdWVfcHRyPEVudHJ5Pik+IGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIEFTU0VSVChpc0VuYWJsZWQoKSk7CiAgICAgQVNTRVJUKG9yaWdpbmFs
UmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpOwpAQCAtMzUxLDM1ICszNTEs
NDggQEAgdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiBvcmlnaW5hbFJlcXVlc3QsIHVpbnQ2NF90IHcKICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5l
dHdvcmtQcm9jZXNzKSByZXRyaWV2aW5nICVzIHByaW9yaXR5ICVkIiwgb3JpZ2luYWxSZXF1ZXN0
LnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG9yaWdpbmFs
UmVxdWVzdC5wcmlvcml0eSgpKSk7CiAKICAgICBpZiAobV9zdGF0aXN0aWNzKQotICAgICAgICBt
X3N0YXRpc3RpY3MtPnJlY29yZFJldHJpZXZhbFJlcXVlc3Qod2ViUGFnZUlEKTsKKyAgICAgICAg
bV9zdGF0aXN0aWNzLT5yZWNvcmRSZXRyaWV2YWxSZXF1ZXN0KGZyYW1lSUQuZmlyc3QpOwogCiAg
ICAgS2V5IHN0b3JhZ2VLZXkgPSBtYWtlQ2FjaGVLZXkob3JpZ2luYWxSZXF1ZXN0KTsKIAogI2lm
IEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKLSAgICBpZiAo
bV9zcGVjdWxhdGl2ZUxvYWRlcikKLSAgICAgICAgbV9zcGVjdWxhdGl2ZUxvYWRlci0+cmVnaXN0
ZXJMb2FkKHdlYlBhZ2VJRCwgd2ViRnJhbWVJRCwgb3JpZ2luYWxSZXF1ZXN0LCBzdG9yYWdlS2V5
KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHdlYkZyYW1lSUQpOworICAgIGlmIChtX3NwZWN1
bGF0aXZlTG9hZE1hbmFnZXIpIHsKKyAgICAgICAgbV9zcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLT5y
ZWdpc3RlckxvYWQoZnJhbWVJRCwgb3JpZ2luYWxSZXF1ZXN0LCBzdG9yYWdlS2V5KTsKKyAgICAg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBvcmlnaW5hbFJlcXVlc3QsIGZyYW1l
SUQsIHN0b3JhZ2VLZXldIHsKKyAgICAgICAgICAgIG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlci0+
c3RhcnRTcGVjdWxhdGl2ZVJldmFsaWRhdGlvbihvcmlnaW5hbFJlcXVlc3QsIGZyYW1lSUQsIHN0
b3JhZ2VLZXkpOworICAgICAgICB9KTsKKyAgICB9CiAjZW5kaWYKIAogICAgIGF1dG8gcmV0cmll
dmVEZWNpc2lvbiA9IG1ha2VSZXRyaWV2ZURlY2lzaW9uKG9yaWdpbmFsUmVxdWVzdCk7CisKICAg
ICBpZiAocmV0cmlldmVEZWNpc2lvbiAhPSBSZXRyaWV2ZURlY2lzaW9uOjpZZXMpIHsKICAgICAg
ICAgaWYgKG1fc3RhdGlzdGljcykKLSAgICAgICAgICAgIG1fc3RhdGlzdGljcy0+cmVjb3JkTm90
VXNpbmdDYWNoZUZvclJlcXVlc3Qod2ViUGFnZUlELCBzdG9yYWdlS2V5LCBvcmlnaW5hbFJlcXVl
c3QsIHJldHJpZXZlRGVjaXNpb24pOworICAgICAgICAgICAgbV9zdGF0aXN0aWNzLT5yZWNvcmRO
b3RVc2luZ0NhY2hlRm9yUmVxdWVzdChmcmFtZUlELmZpcnN0LCBzdG9yYWdlS2V5LCBvcmlnaW5h
bFJlcXVlc3QsIHJldHJpZXZlRGVjaXNpb24pOwogCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KG51bGxwdHIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWYgRU5BQkxFKE5FVFdPUktf
Q0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKQorICAgIGlmIChtX3NwZWN1bGF0aXZlTG9h
ZE1hbmFnZXIgJiYgbV9zcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLT5yZXRyaWV2ZShzdG9yYWdlS2V5
LCBbb3JpZ2luYWxSZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlcl0oc3RkOjp1bmlxdWVfcHRyPEVu
dHJ5PiBlbnRyeSkgeworICAgICAgICBpZiAoZW50cnkgJiYgdmVyaWZ5VmFyeWluZ1JlcXVlc3RI
ZWFkZXJzKGVudHJ5LT52YXJ5aW5nUmVxdWVzdEhlYWRlcnMoKSwgb3JpZ2luYWxSZXF1ZXN0KSkK
KyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6bW92ZShlbnRyeSkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKKyAgICB9KSkK
KyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKICAgICBhdXRvIHN0YXJ0VGltZSA9IHN0ZDo6Y2hy
b25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwogICAgIGF1dG8gcHJpb3JpdHkgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ob3JpZ2luYWxSZXF1ZXN0LnByaW9yaXR5KCkpOwogCi0gICAgbV9zdG9yYWdl
LT5yZXRyaWV2ZShzdG9yYWdlS2V5LCBwcmlvcml0eSwgW3RoaXMsIG9yaWdpbmFsUmVxdWVzdCwg
Y29tcGxldGlvbkhhbmRsZXIsIHN0YXJ0VGltZSwgc3RvcmFnZUtleSwgd2ViUGFnZUlEXShzdGQ6
OnVuaXF1ZV9wdHI8U3RvcmFnZTo6UmVjb3JkPiByZWNvcmQpIHsKKyAgICBtX3N0b3JhZ2UtPnJl
dHJpZXZlKHN0b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgb3JpZ2luYWxSZXF1ZXN0LCBjb21w
bGV0aW9uSGFuZGxlciwgc3RhcnRUaW1lLCBzdG9yYWdlS2V5LCBmcmFtZUlEXShzdGQ6OnVuaXF1
ZV9wdHI8U3RvcmFnZTo6UmVjb3JkPiByZWNvcmQpIHsKICAgICAgICAgaWYgKCFyZWNvcmQpIHsK
ICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG5vdCBmb3Vu
ZCBpbiBzdG9yYWdlIik7CiAKICAgICAgICAgICAgIGlmIChtX3N0YXRpc3RpY3MpCi0gICAgICAg
ICAgICAgICAgbV9zdGF0aXN0aWNzLT5yZWNvcmRSZXRyaWV2YWxGYWlsdXJlKHdlYlBhZ2VJRCwg
c3RvcmFnZUtleSwgb3JpZ2luYWxSZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICBtX3N0YXRpc3Rp
Y3MtPnJlY29yZFJldHJpZXZhbEZhaWx1cmUoZnJhbWVJRC5maXJzdCwgc3RvcmFnZUtleSwgb3Jp
Z2luYWxSZXF1ZXN0KTsKIAogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00MDcsMTIgKzQyMCwxMiBAQCB2b2lkIENh
Y2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVx
dWVzdCwgdWludDY0X3QgdwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEY6Om1vdmUoZW50
cnkpKTsKIAogICAgICAgICBpZiAobV9zdGF0aXN0aWNzKQotICAgICAgICAgICAgbV9zdGF0aXN0
aWNzLT5yZWNvcmRSZXRyaWV2ZWRDYWNoZWRFbnRyeSh3ZWJQYWdlSUQsIHN0b3JhZ2VLZXksIG9y
aWdpbmFsUmVxdWVzdCwgdXNlRGVjaXNpb24pOworICAgICAgICAgICAgbV9zdGF0aXN0aWNzLT5y
ZWNvcmRSZXRyaWV2ZWRDYWNoZWRFbnRyeShmcmFtZUlELmZpcnN0LCBzdG9yYWdlS2V5LCBvcmln
aW5hbFJlcXVlc3QsIHVzZURlY2lzaW9uKTsKICAgICAgICAgcmV0dXJuIHVzZURlY2lzaW9uICE9
IFVzZURlY2lzaW9uOjpOb0R1ZVRvRGVjb2RlRmFpbHVyZTsKICAgICB9KTsKIH0KIAotdm9pZCBD
YWNoZTo6c3RvcmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVl
c3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBSZWZQdHI8V2Vi
Q29yZTo6U2hhcmVkQnVmZmVyPiYmIHJlc3BvbnNlRGF0YSwgc3RkOjpmdW5jdGlvbjx2b2lkIChN
YXBwZWRCb2R5Jik+IGNvbXBsZXRpb25IYW5kbGVyKQorc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBD
YWNoZTo6c3RvcmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVl
c3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBSZWZQdHI8V2Vi
Q29yZTo6U2hhcmVkQnVmZmVyPiYmIHJlc3BvbnNlRGF0YSwgc3RkOjpmdW5jdGlvbjx2b2lkIChN
YXBwZWRCb2R5Jik+IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChpc0VuYWJsZWQo
KSk7CiAgICAgQVNTRVJUKHJlc3BvbnNlRGF0YSk7CkBAIC00NDAsMTIgKzQ1MywxMiBAQCB2b2lk
IENhY2hlOjpzdG9yZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVx
dWVzdCwgY29uc3QgV2ViQ29yZQogICAgICAgICBpZiAobV9zdGF0aXN0aWNzKQogICAgICAgICAg
ICAgbV9zdGF0aXN0aWNzLT5yZWNvcmROb3RDYWNoaW5nUmVzcG9uc2Uoa2V5LCBzdG9yZURlY2lz
aW9uKTsKIAotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
IAotICAgIEVudHJ5IGNhY2hlRW50cnkobWFrZUNhY2hlS2V5KG9yaWdpbmFsUmVxdWVzdCksIHJl
c3BvbnNlLCBXVEY6Om1vdmUocmVzcG9uc2VEYXRhKSwgY29sbGVjdFZhcnlpbmdSZXF1ZXN0SGVh
ZGVycyhvcmlnaW5hbFJlcXVlc3QsIHJlc3BvbnNlKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEVu
dHJ5PiBjYWNoZUVudHJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxFbnRyeT4obWFrZUNhY2hlS2V5KG9y
aWdpbmFsUmVxdWVzdCksIHJlc3BvbnNlLCBXVEY6Om1vdmUocmVzcG9uc2VEYXRhKSwgY29sbGVj
dFZhcnlpbmdSZXF1ZXN0SGVhZGVycyhvcmlnaW5hbFJlcXVlc3QsIHJlc3BvbnNlKSk7CiAKLSAg
ICBhdXRvIHJlY29yZCA9IGNhY2hlRW50cnkuZW5jb2RlQXNTdG9yYWdlUmVjb3JkKCk7CisgICAg
YXV0byByZWNvcmQgPSBjYWNoZUVudHJ5LT5lbmNvZGVBc1N0b3JhZ2VSZWNvcmQoKTsKIAogICAg
IG1fc3RvcmFnZS0+c3RvcmUocmVjb3JkLCBbY29tcGxldGlvbkhhbmRsZXJdKGNvbnN0IERhdGEm
IGJvZHlEYXRhKSB7CiAgICAgICAgIE1hcHBlZEJvZHkgbWFwcGVkQm9keTsKQEAgLTQ1OSwyMyAr
NDcyLDI3IEBAIHZvaWQgQ2FjaGU6OnN0b3JlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYgb3JpZ2luYWxSZXF1ZXN0LCBjb25zdCBXZWJDb3JlCiAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKG1hcHBlZEJvZHkpOwogICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9j
ZXNzKSBzdG9yZWQiKTsKICAgICB9KTsKKworICAgIHJldHVybiBjYWNoZUVudHJ5OwogfQogCi12
b2lkIENhY2hlOjp1cGRhdGUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5h
bFJlcXVlc3QsIHVpbnQ2NF90IHdlYlBhZ2VJRCwgY29uc3QgRW50cnkmIGV4aXN0aW5nRW50cnks
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHZhbGlkYXRpbmdSZXNwb25zZSkKK3N0
ZDo6dW5pcXVlX3B0cjxFbnRyeT4gQ2FjaGU6OnVwZGF0ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgY29uc3QgR2xvYmFsRnJhbWVJRCYgZnJhbWVJRCwg
Y29uc3QgRW50cnkmIGV4aXN0aW5nRW50cnksIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmIHZhbGlkYXRpbmdSZXNwb25zZSkKIHsKICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdv
cmtQcm9jZXNzKSB1cGRhdGluZyAlcyIsIG9yaWdpbmFsUmVxdWVzdC51cmwoKS5zdHJpbmcoKS5s
YXRpbjEoKS5kYXRhKCkpOwogCiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25z
ZSA9IGV4aXN0aW5nRW50cnkucmVzcG9uc2UoKTsKICAgICBXZWJDb3JlOjp1cGRhdGVSZXNwb25z
ZUhlYWRlcnNBZnRlclJldmFsaWRhdGlvbihyZXNwb25zZSwgdmFsaWRhdGluZ1Jlc3BvbnNlKTsK
KyAgICByZXNwb25zZS5zZXRTb3VyY2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6U291cmNl
OjpEaXNrQ2FjaGUpOwogCi0gICAgRW50cnkgdXBkYXRlRW50cnkoZXhpc3RpbmdFbnRyeS5rZXko
KSwgcmVzcG9uc2UsIGV4aXN0aW5nRW50cnkuYnVmZmVyKCksIGNvbGxlY3RWYXJ5aW5nUmVxdWVz
dEhlYWRlcnMob3JpZ2luYWxSZXF1ZXN0LCByZXNwb25zZSkpOwotCi0gICAgYXV0byB1cGRhdGVS
ZWNvcmQgPSB1cGRhdGVFbnRyeS5lbmNvZGVBc1N0b3JhZ2VSZWNvcmQoKTsKKyAgICBhdXRvIHVw
ZGF0ZUVudHJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxFbnRyeT4oZXhpc3RpbmdFbnRyeS5rZXkoKSwg
cmVzcG9uc2UsIGV4aXN0aW5nRW50cnkuYnVmZmVyKCksIGNvbGxlY3RWYXJ5aW5nUmVxdWVzdEhl
YWRlcnMob3JpZ2luYWxSZXF1ZXN0LCByZXNwb25zZSkpOworICAgIGF1dG8gdXBkYXRlUmVjb3Jk
ID0gdXBkYXRlRW50cnktPmVuY29kZUFzU3RvcmFnZVJlY29yZCgpOwogCiAgICAgbV9zdG9yYWdl
LT5zdG9yZSh1cGRhdGVSZWNvcmQsIHsgfSk7CiAKICAgICBpZiAobV9zdGF0aXN0aWNzKQotICAg
ICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZFJldmFsaWRhdGlvblN1Y2Nlc3Mod2ViUGFnZUlELCBl
eGlzdGluZ0VudHJ5LmtleSgpLCBvcmlnaW5hbFJlcXVlc3QpOworICAgICAgICBtX3N0YXRpc3Rp
Y3MtPnJlY29yZFJldmFsaWRhdGlvblN1Y2Nlc3MoZnJhbWVJRC5maXJzdCwgZXhpc3RpbmdFbnRy
eS5rZXkoKSwgb3JpZ2luYWxSZXF1ZXN0KTsKKworICAgIHJldHVybiB1cGRhdGVFbnRyeTsKIH0K
IAogdm9pZCBDYWNoZTo6cmVtb3ZlKGNvbnN0IEtleSYga2V5KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAppbmRleCA3ODM4OWUwLi5h
OGFiYzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGUuaApAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIG5hbWVz
cGFjZSBOZXR3b3JrQ2FjaGUgewogCiBjbGFzcyBDYWNoZTsKLWNsYXNzIFNwZWN1bGF0aXZlTG9h
ZGVyOworY2xhc3MgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcjsKIGNsYXNzIFN0YXRpc3RpY3M7CiAK
IENhY2hlJiBzaW5nbGV0b24oKTsKQEAgLTg0LDYgKzg0LDggQEAgZW51bSBjbGFzcyBVc2VEZWNp
c2lvbiB7CiAgICAgTm9EdWVUb0RlY29kZUZhaWx1cmUsCiB9OwogCit1c2luZyBHbG9iYWxGcmFt
ZUlEID0gc3RkOjpwYWlyPHVpbnQ2NF90IC8qd2ViUGFnZUlEKi8sIHVpbnQ2NF90IC8qd2ViRnJh
bWVJRCovPjsKKwogY2xhc3MgQ2FjaGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENhY2hl
KTsKICAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ryb3llZDxDYWNoZT47CkBAIC0xMDAs
OSArMTAyLDkgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4g
ISFtX3N0b3JhZ2U7IH0KIAogICAgIC8vIENvbXBsZXRpb24gaGFuZGxlciBtYXkgZ2V0IGNhbGxl
ZCBiYWNrIHN5bmNocm9ub3VzbHkgb24gZmFpbHVyZS4KLSAgICB2b2lkIHJldHJpZXZlKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIHVpbnQ2NF90IHdlYlBhZ2VJRCwgdWludDY0X3Qg
d2ViRnJhbWVJRCwgc3RkOjpmdW5jdGlvbjx2b2lkIChzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+KT4p
OwotICAgIHZvaWQgc3RvcmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+
JiYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoTWFwcGVkQm9keSYpPik7Ci0gICAgdm9pZCB1cGRhdGUo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgdWludDY0X3Qgd2ViUGFnZUlELCBjb25z
dCBFbnRyeSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHZhbGlkYXRpbmdSZXNw
b25zZSk7CisgICAgdm9pZCByZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBHbG9iYWxGcmFtZUlEJiwgc3RkOjpmdW5jdGlvbjx2b2lkIChzdGQ6OnVuaXF1ZV9w
dHI8RW50cnk+KT4pOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gc3RvcmUoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYs
IFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoTWFw
cGVkQm9keSYpPik7CisgICAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiB1cGRhdGUoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgR2xvYmFsRnJhbWVJRCYsIGNvbnN0IEVudHJ5
JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgdmFsaWRhdGluZ1Jlc3BvbnNlKTsK
IAogICAgIHZvaWQgdHJhdmVyc2Uoc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBFbnRyeSopPiYm
KTsKICAgICB2b2lkIHJlbW92ZShjb25zdCBLZXkmKTsKQEAgLTEyNCw3ICsxMjYsNyBAQCBwcml2
YXRlOgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2U+IG1fc3RvcmFnZTsKICNpZiBFTkFC
TEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04pCi0gICAgc3RkOjp1bmlx
dWVfcHRyPFNwZWN1bGF0aXZlTG9hZGVyPiBtX3NwZWN1bGF0aXZlTG9hZGVyOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyPiBtX3NwZWN1bGF0aXZlTG9hZE1hbmFn
ZXI7CiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RhdGlzdGljcz4gbV9zdGF0aXN0aWNz
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUVudHJ5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUVudHJ5LmNwcAppbmRleCBlNzE3NzdiLi44YWJjODkzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RW50cnkuY3BwCkBAIC00OSw2ICs0OSwxNiBAQCBFbnRyeTo6RW50cnkoY29uc3QgS2V5JiBrZXks
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBSZWZQdHI8VwogICAg
IEFTU0VSVChtX2tleS50eXBlKCkgPT0gInJlc291cmNlIik7CiB9CiAKK0VudHJ5OjpFbnRyeShj
b25zdCBFbnRyeSYgb3RoZXIpCisgICAgOiBtX2tleShvdGhlci5tX2tleSkKKyAgICAsIG1fdGlt
ZVN0YW1wKG90aGVyLm1fdGltZVN0YW1wKQorICAgICwgbV9yZXNwb25zZShvdGhlci5tX3Jlc3Bv
bnNlKQorICAgICwgbV92YXJ5aW5nUmVxdWVzdEhlYWRlcnMob3RoZXIubV92YXJ5aW5nUmVxdWVz
dEhlYWRlcnMpCisgICAgLCBtX2J1ZmZlcihvdGhlci5tX2J1ZmZlcikKKyAgICAsIG1fc291cmNl
U3RvcmFnZVJlY29yZChvdGhlci5tX3NvdXJjZVN0b3JhZ2VSZWNvcmQpCit7Cit9CisKIEVudHJ5
OjpFbnRyeShjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3JhZ2VFbnRyeSkKICAgICA6IG1fa2V5
KHN0b3JhZ2VFbnRyeS5rZXkpCiAgICAgLCBtX3RpbWVTdGFtcChzdG9yYWdlRW50cnkudGltZVN0
YW1wKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRW50cnkuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUVudHJ5LmgKaW5kZXggOGRlMzkzZi4uYTJjOGExMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5o
CkBAIC00MywxMCArNDMsMTEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29y
a0NhY2hlIHsKIAogY2xhc3MgRW50cnkgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEVudHJ5
KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CiAgICAgRW50cnkoY29uc3QgS2V5JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZSYsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYsIGNvbnN0IFZlY3Rvcjxz
dGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiYgdmFyeWluZ1JlcXVlc3RIZWFkZXJzKTsKICAgICBl
eHBsaWNpdCBFbnRyeShjb25zdCBTdG9yYWdlOjpSZWNvcmQmKTsKKyAgICBFbnRyeShjb25zdCBF
bnRyeSYpOwogCiAgICAgU3RvcmFnZTo6UmVjb3JkIGVuY29kZUFzU3RvcmFnZVJlY29yZCgpIGNv
bnN0OwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IGRlY29kZVN0b3JhZ2VSZWNv
cmQoY29uc3QgU3RvcmFnZTo6UmVjb3JkJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVM
b2FkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWYxN2ZmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcApAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFU
SVZFX1JFVkFMSURBVElPTikKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQu
aCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGUuaCIKKyNp
bmNsdWRlICJOZXR3b3JrTG9hZC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklELmg+Cisj
aW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK1NwZWN1bGF0aXZlTG9hZDo6U3BlY3VsYXRpdmVMb2FkKGNvbnN0
IEdsb2JhbEZyYW1lSUQmIGZyYW1lSUQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
c3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+IGNhY2hlRW50cnlGb3JWYWxpZGF0
aW9uLCBSZXZhbGlkYXRpb25Db21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQor
ICAgIDogbV9mcmFtZUlEKGZyYW1lSUQpCisgICAgLCBtX2NvbXBsZXRpb25IYW5kbGVyKFdURjo6
bW92ZShjb21wbGV0aW9uSGFuZGxlcikpCisgICAgLCBtX29yaWdpbmFsUmVxdWVzdChyZXF1ZXN0
KQorICAgICwgbV9idWZmZXJlZERhdGFGb3JDYWNoZShTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpKQor
ICAgICwgbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbihXVEY6Om1vdmUoY2FjaGVFbnRyeUZvclZh
bGlkYXRpb24pKQoreworICAgIEFTU0VSVChtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uKTsKKyAg
ICBBU1NFUlQobV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbi0+bmVlZHNWYWxpZGF0aW9uKCkpOwor
CisgICAgTmV0d29ya0xvYWRQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy5z
ZXNzaW9uSUQgPSBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKTsKKyAgICBwYXJhbWV0ZXJz
LmFsbG93U3RvcmVkQ3JlZGVudGlhbHMgPSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzOworICAgIHBh
cmFtZXRlcnMuY29udGVudFNuaWZmaW5nUG9saWN5ID0gRG9Ob3RTbmlmZkNvbnRlbnQ7CisgICAg
cGFyYW1ldGVycy5yZXF1ZXN0ID0gbV9vcmlnaW5hbFJlcXVlc3Q7CisgICAgbV9uZXR3b3JrTG9h
ZCA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya0xvYWQ+KCp0aGlzLCBwYXJhbWV0ZXJzKTsKK30K
KworU3BlY3VsYXRpdmVMb2FkOjp+U3BlY3VsYXRpdmVMb2FkKCkKK3sKKyAgICBBU1NFUlQoIW1f
bmV0d29ya0xvYWQpOworfQorCit2b2lkIFNwZWN1bGF0aXZlTG9hZDo6d2lsbFNlbmRSZWRpcmVj
dGVkUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCit7CisgICAgdXBkYXRlUmVkaXJlY3RDaGFpblN0
YXR1cyhtX3JlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cywgcmVkaXJlY3RSZXNwb25zZSk7Cit9CisK
K2F1dG8gU3BlY3VsYXRpdmVMb2FkOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVjZWl2ZWRSZXNwb25zZSkgLT4gU2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVz
cG9uc2UKK3sKKyAgICBtX3Jlc3BvbnNlID0gcmVjZWl2ZWRSZXNwb25zZTsKKworICAgIGlmICht
X3Jlc3BvbnNlLmlzTXVsdGlwYXJ0KCkpCisgICAgICAgIG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUg
PSBudWxscHRyOworCisgICAgQVNTRVJUKG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24pOworCisg
ICAgYm9vbCB2YWxpZGF0aW9uU3VjY2VlZGVkID0gbV9yZXNwb25zZS5odHRwU3RhdHVzQ29kZSgp
ID09IDMwNDsgLy8gMzA0IE5vdCBNb2RpZmllZAorICAgIGlmICh2YWxpZGF0aW9uU3VjY2VlZGVk
KSB7CisgICAgICAgIG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24gPSBOZXR3b3JrQ2FjaGU6OnNp
bmdsZXRvbigpLnVwZGF0ZShtX29yaWdpbmFsUmVxdWVzdCwgbV9mcmFtZUlELCAqbV9jYWNoZUVu
dHJ5Rm9yVmFsaWRhdGlvbiwgbV9yZXNwb25zZSk7CisgICAgICAgIGNsZWFudXAoKTsKKyAgICAg
ICAgcmV0dXJuIFNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlOjpObzsKKyAgICB9CisK
KyAgICBtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uID0gbnVsbHB0cjsKKworICAgIHJldHVybiBT
aG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZTo6WWVzOworfQorCit2b2lkIFNwZWN1bGF0
aXZlTG9hZDo6ZGlkUmVjZWl2ZUJ1ZmZlcihSZWZQdHI8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlciwg
aW50IHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGgpCit7CisgICAgQVNTRVJUKCFtX2NhY2hlRW50
cnlGb3JWYWxpZGF0aW9uKTsKKworICAgIGlmIChtX2J1ZmZlcmVkRGF0YUZvckNhY2hlKSB7Cisg
ICAgICAgIC8vIFByZXZlbnQgbWVtb3J5IGdyb3d0aCBpbiBjYXNlIG9mIHN0cmVhbWluZyBkYXRh
LgorICAgICAgICBjb25zdCBzaXplX3QgbWF4aW11bUNhY2hlQnVmZmVyU2l6ZSA9IDEwICogMTAy
NCAqIDEwMjQ7CisgICAgICAgIGlmIChtX2J1ZmZlcmVkRGF0YUZvckNhY2hlLT5zaXplKCkgKyBi
dWZmZXItPnNpemUoKSA8PSBtYXhpbXVtQ2FjaGVCdWZmZXJTaXplKQorICAgICAgICAgICAgbV9i
dWZmZXJlZERhdGFGb3JDYWNoZS0+YXBwZW5kKGJ1ZmZlci5nZXQoKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUgPSBudWxscHRyOworICAgIH0KK30K
Kwordm9pZCBTcGVjdWxhdGl2ZUxvYWQ6OmRpZEZpbmlzaExvYWRpbmcoZG91YmxlIGZpbmlzaFRp
bWUpCit7CisgICAgQVNTRVJUKCFtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uKTsKKworICAgIGJv
b2wgYWxsb3dTdGFsZSA9IG1fb3JpZ2luYWxSZXF1ZXN0LmNhY2hlUG9saWN5KCkgPj0gUmV0dXJu
Q2FjaGVEYXRhRWxzZUxvYWQ7CisgICAgYm9vbCBoYXNDYWNoZWFibGVSZWRpcmVjdCA9IG1fcmVz
cG9uc2UuaXNIVFRQKCkgJiYgcmVkaXJlY3RDaGFpbkFsbG93c1JldXNlKG1fcmVkaXJlY3RDaGFp
bkNhY2hlU3RhdHVzLCBhbGxvd1N0YWxlID8gUmV1c2VFeHBpcmVkUmVkaXJlY3Rpb24gOiBEb05v
dFJldXNlRXhwaXJlZFJlZGlyZWN0aW9uKTsKKyAgICBpZiAoaGFzQ2FjaGVhYmxlUmVkaXJlY3Qg
JiYgbV9yZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMuc3RhdHVzID09IFJlZGlyZWN0Q2hhaW5DYWNo
ZVN0YXR1czo6Q2FjaGVkUmVkaXJlY3Rpb24pIHsKKyAgICAgICAgLy8gTWF5YmUgd2Ugc2hvdWxk
IGNhY2hlIHRoZSBhY3R1YWwgcmVkaXJlY3RzIGluc3RlYWQgb2YgdGhlIGVuZCByZXN1bHQ/Cisg
ICAgICAgIGF1dG8gbm93ID0gc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCk7CisgICAg
ICAgIGF1dG8gcmVzcG9uc2VFbmRPZlZhbGlkaXR5ID0gbm93ICsgY29tcHV0ZUZyZXNobmVzc0xp
ZmV0aW1lRm9ySFRUUEZhbWlseShtX3Jlc3BvbnNlLCBub3cpIC0gY29tcHV0ZUN1cnJlbnRBZ2Uo
bV9yZXNwb25zZSwgbm93KTsKKyAgICAgICAgaGFzQ2FjaGVhYmxlUmVkaXJlY3QgPSByZXNwb25z
ZUVuZE9mVmFsaWRpdHkgPD0gbV9yZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMuZW5kT2ZWYWxpZGl0
eTsKKyAgICB9CisKKyAgICBpZiAobV9idWZmZXJlZERhdGFGb3JDYWNoZSAmJiBoYXNDYWNoZWFi
bGVSZWRpcmVjdCkKKyAgICAgICAgbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbiA9IE5ldHdvcmtD
YWNoZTo6c2luZ2xldG9uKCkuc3RvcmUobV9vcmlnaW5hbFJlcXVlc3QsIG1fcmVzcG9uc2UsIFdU
Rjo6bW92ZShtX2J1ZmZlcmVkRGF0YUZvckNhY2hlKSwgW10oTmV0d29ya0NhY2hlOjpNYXBwZWRC
b2R5JiBtYXBwZWRCb2R5KSB7IH0pOworICAgIGVsc2UgaWYgKCFoYXNDYWNoZWFibGVSZWRpcmVj
dCkgeworICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3Qga2VlcCBhIHN0YWxlIGVudHJ5IGlu
IHRoZSBjYWNoZS4KKyAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUobV9v
cmlnaW5hbFJlcXVlc3QpOworICAgIH0KKworICAgIGNsZWFudXAoKTsKK30KKwordm9pZCBTcGVj
dWxhdGl2ZUxvYWQ6OmRpZEZhaWxMb2FkaW5nKGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAg
IG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24gPSBudWxscHRyOworCisgICAgY2xlYW51cCgpOwor
fQorCit2b2lkIFNwZWN1bGF0aXZlTG9hZDo6Y2xlYW51cCgpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9uZXR3b3JrTG9hZCA9IG51bGxwdHI7CisK
KyAgICBtX2NvbXBsZXRpb25IYW5kbGVyKFdURjo6bW92ZShtX2NhY2hlRW50cnlGb3JWYWxpZGF0
aW9uKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQorfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZB
TElEQVRJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMzVhNDkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2Fk
LmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTmV0d29ya0NhY2hlU3Bl
Y3VsYXRpdmVMb2FkX2gKKyNkZWZpbmUgTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkX2gKKwor
I2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKKworI2lu
Y2x1ZGUgIk5ldHdvcmtDYWNoZS5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVudHJ5LmgiCisj
aW5jbHVkZSAiTmV0d29ya0xvYWRDbGllbnQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
UmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBOZXR3b3JrTG9hZDsKKworbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CisKK2NsYXNzIFNwZWN1
bGF0aXZlTG9hZCBmaW5hbCA6IHB1YmxpYyBOZXR3b3JrTG9hZENsaWVudCB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZv
aWQgKHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5Pik+IFJldmFsaWRhdGlvbkNv
bXBsZXRpb25IYW5kbGVyOworICAgIFNwZWN1bGF0aXZlTG9hZChjb25zdCBHbG9iYWxGcmFtZUlE
JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwgc3RkOjp1bmlxdWVfcHRyPE5ldHdv
cmtDYWNoZTo6RW50cnk+LCBSZXZhbGlkYXRpb25Db21wbGV0aW9uSGFuZGxlciYmKTsKKworICAg
IHZpcnR1YWwgflNwZWN1bGF0aXZlTG9hZCgpOworCitwcml2YXRlOgorICAgIC8vIE5ldHdvcmtM
b2FkQ2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxv
bmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KSBvdmVy
cmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rp
b25TcGFjZUFzeW5jKGNvbnN0IFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZSYpIG92ZXJyaWRlIHsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc1N5bmNocm9ub3VzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVzdChj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFNob3VsZENv
bnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVCdWZmZXIoUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiwgaW50IHJlcG9ydGVkRW5j
b2RlZERhdGFMZW5ndGgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKGRvdWJsZSBmaW5pc2hUaW1lKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFp
bExvYWRpbmcoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpIG92ZXJyaWRlOworI2lmIFBM
QVRGT1JNKENPQ09BKQorICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKENG
Q2FjaGVkVVJMUmVzcG9uc2VSZWYpIG92ZXJyaWRlIHsgfQorI2VuZGlmCisKKyAgICB2b2lkIGNs
ZWFudXAoKTsKKworICAgIEdsb2JhbEZyYW1lSUQgbV9mcmFtZUlEOworICAgIFJldmFsaWRhdGlv
bkNvbXBsZXRpb25IYW5kbGVyIG1fY29tcGxldGlvbkhhbmRsZXI7CisgICAgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0IG1fb3JpZ2luYWxSZXF1ZXN0OworCisgICAgc3RkOjp1bmlxdWVfcHRyPE5l
dHdvcmtMb2FkPiBtX25ldHdvcmtMb2FkOworCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSBtX3Jlc3BvbnNlOworCisgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gbV9idWZm
ZXJlZERhdGFGb3JDYWNoZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRy
eT4gbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbjsKKworICAgIFdlYkNvcmU6OlJlZGlyZWN0Q2hh
aW5DYWNoZVN0YXR1cyBtX3JlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1czsKK307CisKK30gLy8gbmFt
ZXNwYWNlIE5ldHdvcmtDYWNoZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04pCisKKyNlbmRpZiAv
LyBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
cGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40YWE4OTllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5jcHAKQEAgLTAs
MCArMSwzMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04pCisjaW5jbHVkZSAiTmV0
d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5o
IgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVudHJ5LmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hl
U3BlY3VsYXRpdmVMb2FkLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50
cnkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0h5c3RlcmVzaXNBY3Rpdml0eS5oPgorI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCituYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK3N0YXRpYyBjb25zdCBhdXRvIHByZWxvYWRlZEVudHJ5TGlmZXRpbWUg
PSAxMF9zOworCitzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBzdWJyZXNvdXJjZXNUeXBlKCkK
K3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxjb25zdCBBdG9taWNTdHJpbmc+IHJlc291cmNlKCJzdWJyZXNvdXJjZXMiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICByZXR1cm4gcmVzb3VyY2U7Cit9CisK
K3N0YXRpYyBpbmxpbmUgS2V5IG1ha2VTdWJyZXNvdXJjZXNLZXkoY29uc3QgS2V5JiByZXNvdXJj
ZUtleSkKK3sKKyAgICByZXR1cm4gS2V5KHJlc291cmNlS2V5LnBhcnRpdGlvbigpLCBzdWJyZXNv
dXJjZXNUeXBlKCksIHJlc291cmNlS2V5LnJhbmdlKCksIHJlc291cmNlS2V5LmlkZW50aWZpZXIo
KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVzb3VyY2VSZXF1ZXN0IGNvbnN0cnVjdFJldmFsaWRh
dGlvblJlcXVlc3QoY29uc3QgRW50cnkmIGVudHJ5KQoreworICAgIFJlc291cmNlUmVxdWVzdCBy
ZXZhbGlkYXRpb25SZXF1ZXN0KGVudHJ5LmtleSgpLmlkZW50aWZpZXIoKSk7CisKKyAgICBTdHJp
bmcgZVRhZyA9IGVudHJ5LnJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1l
OjpFVGFnKTsKKyAgICBpZiAoIWVUYWcuaXNFbXB0eSgpKQorICAgICAgICByZXZhbGlkYXRpb25S
ZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6SWZOb25lTWF0Y2gsIGVU
YWcpOworCisgICAgU3RyaW5nIGxhc3RNb2RpZmllZCA9IGVudHJ5LnJlc3BvbnNlKCkuaHR0cEhl
YWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpMYXN0TW9kaWZpZWQpOworICAgIGlmICghbGFzdE1v
ZGlmaWVkLmlzRW1wdHkoKSkKKyAgICAgICAgcmV2YWxpZGF0aW9uUmVxdWVzdC5zZXRIVFRQSGVh
ZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OklmTW9kaWZpZWRTaW5jZSwgbGFzdE1vZGlmaWVkKTsK
KworICAgIHJldHVybiByZXZhbGlkYXRpb25SZXF1ZXN0OworfQorCitzdGF0aWMgYm9vbCByZXNw
b25zZU5lZWRzUmV2YWxpZGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBz
dGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IHRpbWVzdGFtcCkKK3sKKyAgICBp
ZiAocmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgYXV0byBhZ2UgPSBjb21wdXRlQ3VycmVudEFnZShyZXNwb25zZSwgdGlt
ZXN0YW1wKTsKKyAgICBhdXRvIGxpZmV0aW1lID0gY29tcHV0ZUZyZXNobmVzc0xpZmV0aW1lRm9y
SFRUUEZhbWlseShyZXNwb25zZSwgdGltZXN0YW1wKTsKKyAgICByZXR1cm4gYWdlIC0gbGlmZXRp
bWUgPiAwX21zOworfQorCitjbGFzcyBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOjpQcmVsb2FkZWRF
bnRyeSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUHJlbG9h
ZGVkRW50cnkoc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBlbnRyeSwgc3RkOjpmdW5jdGlvbjx2b2lk
KCk+JiYgbGlmZXRpbWVSZWFjaGVkSGFuZGxlcikKKyAgICAgICAgOiBtX2VudHJ5KFdURjo6bW92
ZShlbnRyeSkpCisgICAgICAgICwgbV9saWZldGltZVRpbWVyKCp0aGlzLCAmUHJlbG9hZGVkRW50
cnk6OmxpZmV0aW1lVGltZXJGaXJlZCkKKyAgICAgICAgLCBtX2xpZmV0aW1lUmVhY2hlZEhhbmRs
ZXIoV1RGOjptb3ZlKGxpZmV0aW1lUmVhY2hlZEhhbmRsZXIpKQorICAgIHsKKyAgICAgICAgbV9s
aWZldGltZVRpbWVyLnN0YXJ0T25lU2hvdChwcmVsb2FkZWRFbnRyeUxpZmV0aW1lKTsKKyAgICB9
CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IHRha2VDYWNoZUVudHJ5KCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX2VudHJ5KTsKKyAgICAgICAgcmV0dXJuIFdURjo6bW92ZShtX2VudHJ5
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBsaWZldGltZVRpbWVyRmlyZWQoKQorICAg
IHsKKyAgICAgICAgbV9saWZldGltZVJlYWNoZWRIYW5kbGVyKCk7CisgICAgfQorCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEVudHJ5PiBtX2VudHJ5OworICAgIFRpbWVyIG1fbGlmZXRpbWVUaW1lcjsK
KyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gbV9saWZldGltZVJlYWNoZWRIYW5kbGVyOworfTsK
KworY2xhc3MgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6UGVuZGluZ0ZyYW1lTG9hZCB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUGVuZGluZ0ZyYW1lTG9hZChj
b25zdCBLZXkmIG1haW5SZXNvdXJjZUtleSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCisgICAgICAgIDogbV9tYWluUmVzb3VyY2VLZXkobWFpblJlc291cmNlS2V5
KQorICAgICAgICAsIG1fY29tcGxldGlvbkhhbmRsZXIoV1RGOjptb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSkKKyAgICAgICAgLCBtX2xvYWRIeXN0ZXJlc2lzQWN0aXZpdHkoW3RoaXNdKEh5c3RlcmVz
aXNTdGF0ZSBzdGF0ZSkgeyBpZiAoc3RhdGUgPT0gSHlzdGVyZXNpc1N0YXRlOjpTdG9wcGVkKSBt
X2NvbXBsZXRpb25IYW5kbGVyKCk7IH0pCisgICAgeyB9CisKKyAgICB2b2lkIHJlZ2lzdGVyU3Vi
cmVzb3VyY2UoY29uc3QgS2V5JiBzdWJyZXNvdXJjZUtleSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CisgICAgICAgIG1fc3VicmVzb3VyY2VLZXlzLmFkZChzdWJy
ZXNvdXJjZUtleSk7CisgICAgICAgIG1fbG9hZEh5c3RlcmVzaXNBY3Rpdml0eS5pbXB1bHNlKCk7
CisgICAgfQorCisgICAgT3B0aW9uYWw8U3RvcmFnZTo6UmVjb3JkPiBlbmNvZGVBc1N1YnJlc291
cmNlc1JlY29yZCgpCisgICAgeworICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwor
ICAgICAgICBpZiAobV9zdWJyZXNvdXJjZUtleXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgICAgICBhdXRvIHN1YnJlc291cmNlc1N0b3JhZ2VLZXkgPSBtYWtlU3Vi
cmVzb3VyY2VzS2V5KG1fbWFpblJlc291cmNlS2V5KTsKKyAgICAgICAgVmVjdG9yPEtleT4gc3Vi
cmVzb3VyY2VLZXlzOworICAgICAgICBjb3B5VG9WZWN0b3IobV9zdWJyZXNvdXJjZUtleXMsIHN1
YnJlc291cmNlS2V5cyk7CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgICAgIExPRyhOZXR3b3Jr
Q2FjaGVTcGVjdWxhdGl2ZVByZWxvYWRpbmcsICIoTmV0d29ya1Byb2Nlc3MpIFNhdmluZyB0byBk
aXNrIGxpc3Qgb2Ygc3VicmVzb3VyY2VzIGZvciAnJXMnOiIsIG1fbWFpblJlc291cmNlS2V5Lmlk
ZW50aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBzdWJyZXNvdXJj
ZUtleSA6IHN1YnJlc291cmNlS2V5cykKKyAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTcGVj
dWxhdGl2ZVByZWxvYWRpbmcsICIoTmV0d29ya1Byb2Nlc3MpICogU3VicmVzb3VyY2U6ICclcycu
Iiwgc3VicmVzb3VyY2VLZXkuaWRlbnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisK
KyAgICAgICAgcmV0dXJuIFN1YnJlc291cmNlc0VudHJ5KHN1YnJlc291cmNlc1N0b3JhZ2VLZXks
IFdURjo6bW92ZShzdWJyZXNvdXJjZUtleXMpKS5lbmNvZGVBc1N0b3JhZ2VSZWNvcmQoKTsKKyAg
ICB9CisKKyAgICB2b2lkIG1hcmtBc0NvbXBsZXRlZCgpCisgICAgeworICAgICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOworICAgICAgICBtX2NvbXBsZXRpb25IYW5kbGVyKCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIEtleSBtX21haW5SZXNvdXJjZUtleTsKKyAgICBIYXNoU2V0PEtl
eT4gbV9zdWJyZXNvdXJjZUtleXM7CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IG1fY29tcGxl
dGlvbkhhbmRsZXI7CisgICAgSHlzdGVyZXNpc0FjdGl2aXR5IG1fbG9hZEh5c3RlcmVzaXNBY3Rp
dml0eTsKK307CisKK1NwZWN1bGF0aXZlTG9hZE1hbmFnZXI6OlNwZWN1bGF0aXZlTG9hZE1hbmFn
ZXIoU3RvcmFnZSYgc3RvcmFnZSkKKyAgICA6IG1fc3RvcmFnZShzdG9yYWdlKQoreworfQorCitT
cGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOjp+U3BlY3VsYXRpdmVMb2FkTWFuYWdlcigpCit7Cit9CisK
K2Jvb2wgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6cmV0cmlldmUoY29uc3QgS2V5JiBzdG9yYWdl
S2V5LCBjb25zdCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICAvLyBDaGVjayBhbHJlYWR5IHByZWxvYWRlZCBlbnRyaWVzLgorICAgIGlmIChhdXRv
IHByZWxvYWRlZEVudHJ5ID0gbV9wcmVsb2FkZWRFbnRyaWVzLnRha2Uoc3RvcmFnZUtleSkpIHsK
KyAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlUHJlbG9hZGluZywgIihOZXR3b3Jr
UHJvY2VzcykgUmV0cmlldmFsOiBVc2luZyBwcmVsb2FkZWQgZW50cnkgdG8gc2F0aXNmeSByZXF1
ZXN0IGZvciAnJXMnOiIsIHN0b3JhZ2VLZXkuaWRlbnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihwcmVsb2FkZWRFbnRyeS0+dGFrZUNhY2hlRW50cnko
KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIENoZWNrIHBlbmRpbmcg
c3BlY3VsYXRpdmUgcmV2YWxpZGF0aW9ucy4KKyAgICBpZiAoIW1fcGVuZGluZ1ByZWxvYWRzLmNv
bnRhaW5zKHN0b3JhZ2VLZXkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBMT0coTmV0
d29ya0NhY2hlU3BlY3VsYXRpdmVQcmVsb2FkaW5nLCAiKE5ldHdvcmtQcm9jZXNzKSBSZXRyaWV2
YWw6IHJldmFsaWRhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzIGZvciAnJXMnOiIsIHN0b3JhZ2VL
ZXkuaWRlbnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgLy8gRklYTUU6IFRoaXMgYnJl
YWtzIGluY3JlbWVudGFsIGxvYWRpbmcgd2hlbiB0aGUgcmV2YWxpZGF0aW9uIGlzIG5vdCBzdWNj
ZXNzZnVsLgorICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9wZW5kaW5nUmV0cmlldmVSZXF1ZXN0cy5h
ZGQoc3RvcmFnZUtleSwgbnVsbHB0cik7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQor
ICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gc3RkOjptYWtlX3VuaXF1ZTxWZWN0
b3I8UmV0cmlldmVDb21wbGV0aW9uSGFuZGxlcj4+KCk7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS0+YXBwZW5kKGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOjpyZWdpc3RlckxvYWQoY29uc3QgR2xvYmFs
RnJhbWVJRCYgZnJhbWVJRCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBL
ZXkmIHJlc291cmNlS2V5KQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICBpZiAoIXJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpIHx8IHJlcXVlc3Qu
aHR0cE1ldGhvZCgpICE9ICJHRVQiKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGlzTWFp
blJlc291cmNlID0gcmVxdWVzdC5yZXF1ZXN0ZXIoKSA9PSBSZXNvdXJjZVJlcXVlc3Q6OlJlcXVl
c3Rlcjo6TWFpbjsKKyAgICBpZiAoaXNNYWluUmVzb3VyY2UpIHsKKyAgICAgICAgLy8gTWFyayBw
cmV2aW91cyBsb2FkIGluIHRoaXMgZnJhbWUgYXMgY29tcGxldGVkIGlmIG5lY2Vzc2FyeS4KKyAg
ICAgICAgaWYgKGF1dG8qIHBlbmRpbmdGcmFtZUxvYWQgPSBtX3BlbmRpbmdGcmFtZUxvYWRzLmdl
dChmcmFtZUlEKSkKKyAgICAgICAgICAgIHBlbmRpbmdGcmFtZUxvYWQtPm1hcmtBc0NvbXBsZXRl
ZCgpOworCisgICAgICAgIC8vIFN0YXJ0IHRyYWNraW5nIGxvYWRzIGluIHRoaXMgZnJhbWUuCisg
ICAgICAgIG1fcGVuZGluZ0ZyYW1lTG9hZHMuYWRkKGZyYW1lSUQsIHN0ZDo6bWFrZV91bmlxdWU8
UGVuZGluZ0ZyYW1lTG9hZD4ocmVzb3VyY2VLZXksIFt0aGlzLCBmcmFtZUlEXSgpIHsKKyAgICAg
ICAgICAgIGF1dG8gZnJhbWVMb2FkID0gbV9wZW5kaW5nRnJhbWVMb2Fkcy50YWtlKGZyYW1lSUQp
OworICAgICAgICAgICAgYXV0byBvcHRpb25hbFJlY29yZCA9IGZyYW1lTG9hZC0+ZW5jb2RlQXNT
dWJyZXNvdXJjZXNSZWNvcmQoKTsKKyAgICAgICAgICAgIGlmICghb3B0aW9uYWxSZWNvcmQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbV9zdG9yYWdlLnN0b3JlKG9wdGlv
bmFsUmVjb3JkLnZhbHVlKCksIFtdKGNvbnN0IERhdGEmKSB7IH0pOworICAgICAgICB9KSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXV0byogcGVuZGluZ0ZyYW1lTG9hZCA9
IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZ2V0KGZyYW1lSUQpKQorICAgICAgICBwZW5kaW5nRnJhbWVM
b2FkLT5yZWdpc3RlclN1YnJlc291cmNlKHJlc291cmNlS2V5KTsKK30KKwordm9pZCBTcGVjdWxh
dGl2ZUxvYWRNYW5hZ2VyOjphZGRQcmVsb2FkZWRFbnRyeShzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+
IGVudHJ5KQoreworICAgIEFTU0VSVChlbnRyeSk7CisgICAgQVNTRVJUKCFlbnRyeS0+bmVlZHNW
YWxpZGF0aW9uKCkpOworICAgIGF1dG8ga2V5ID0gZW50cnktPmtleSgpOworICAgIG1fcHJlbG9h
ZGVkRW50cmllcy5hZGQoa2V5LCBzdGQ6Om1ha2VfdW5pcXVlPFByZWxvYWRlZEVudHJ5PihXVEY6
Om1vdmUoZW50cnkpLCBbdGhpcywga2V5XSgpIHsKKyAgICAgICAgbV9wcmVsb2FkZWRFbnRyaWVz
LnJlbW92ZShrZXkpOworICAgIH0pKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2Vy
OjpyZXRyaWV2ZUVudHJ5RnJvbVN0b3JhZ2UoY29uc3QgS2V5JiBrZXksIGNvbnN0IFJldHJpZXZl
Q29tcGxldGlvbkhhbmRsZXImIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG1fc3RvcmFnZS5y
ZXRyaWV2ZShrZXksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihSZXNvdXJjZUxvYWRQcmlvcml0eTo6
VmVyeUhpZ2gpLCBbY29tcGxldGlvbkhhbmRsZXJdKHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlOjpS
ZWNvcmQ+IHJlY29yZCkgeworICAgICAgICBpZiAoIXJlY29yZCkgeworICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIobnVsbHB0cik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgYXV0byBlbnRyeSA9IEVudHJ5OjpkZWNvZGVTdG9yYWdlUmVjb3JkKCpy
ZWNvcmQpOworICAgICAgICBpZiAoIWVudHJ5KSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGF1dG8mIHJlc3BvbnNlID0gZW50cnktPnJlc3BvbnNlKCk7CisgICAgICAgIGlmICgh
cmVzcG9uc2UuaGFzQ2FjaGVWYWxpZGF0b3JGaWVsZHMoKSkgeworICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIobnVsbHB0cik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChyZXNwb25zZU5lZWRzUmV2YWxpZGF0aW9uKHJlc3BvbnNlLCBlbnRy
eS0+dGltZVN0YW1wKCkpKQorICAgICAgICAgICAgZW50cnktPnNldE5lZWRzVmFsaWRhdGlvbigp
OworCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6bW92ZShlbnRyeSkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKK30KKworYm9vbCBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2Vy
OjpzYXRpc2Z5UGVuZGluZ1JlcXVlc3RzKGNvbnN0IEtleSYga2V5LCBFbnRyeSogZW50cnkpCit7
CisgICAgYXV0byBjb21wbGV0aW9uSGFuZGxlcnMgPSBtX3BlbmRpbmdSZXRyaWV2ZVJlcXVlc3Rz
LnRha2Uoa2V5KTsKKyAgICBpZiAoIWNvbXBsZXRpb25IYW5kbGVycykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgZm9yIChhdXRvJiBjb21wbGV0aW9uSGFuZGxlciA6ICpjb21wbGV0aW9u
SGFuZGxlcnMpCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGVudHJ5ID8gc3RkOjptYWtlX3Vu
aXF1ZTxFbnRyeT4oKmVudHJ5KSA6IG51bGxwdHIpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6cmV2YWxpZGF0ZUVudHJ5KHN0ZDo6dW5pcXVl
X3B0cjxFbnRyeT4gZW50cnksIGNvbnN0IEdsb2JhbEZyYW1lSUQmIGZyYW1lSUQpCit7CisgICAg
QVNTRVJUKGVudHJ5KTsKKyAgICBBU1NFUlQoZW50cnktPm5lZWRzVmFsaWRhdGlvbigpKTsKKwor
ICAgIGF1dG8ga2V5ID0gZW50cnktPmtleSgpOworICAgIExPRyhOZXR3b3JrQ2FjaGVTcGVjdWxh
dGl2ZVByZWxvYWRpbmcsICIoTmV0d29ya1Byb2Nlc3MpIFNwZWN1bGF0aXZlbHkgcmV2YWxpZGF0
aW5nICclcyc6Iiwga2V5LmlkZW50aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBhdXRvIHJl
dmFsaWRhdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxTcGVjdWxhdGl2ZUxvYWQ+KGZyYW1lSUQsIGNv
bnN0cnVjdFJldmFsaWRhdGlvblJlcXVlc3QoKmVudHJ5KSwgV1RGOjptb3ZlKGVudHJ5KSwgW3Ro
aXMsIGtleV0oc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiByZXZhbGlkYXRlZEVudHJ5KSB7CisgICAg
ICAgIEFTU0VSVCghZW50cnkgfHwgIWVudHJ5LT5uZWVkc1ZhbGlkYXRpb24oKSk7CisgICAgICAg
IGF1dG8gcHJvdGVjdFJldmFsaWRhdG9yID0gbV9wZW5kaW5nUHJlbG9hZHMudGFrZShrZXkpOwor
ICAgICAgICBMT0coTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVQcmVsb2FkaW5nLCAiKE5ldHdvcmtQ
cm9jZXNzKSBTcGVjdWxhdGl2ZSByZXZhbGlkYXRpb24gY29tcGxldGVkIGZvciAnJXMnOiIsIGtl
eS5pZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgaWYgKHNhdGlzZnlQZW5k
aW5nUmVxdWVzdHMoa2V5LCByZXZhbGlkYXRlZEVudHJ5LmdldCgpKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBpZiAocmV2YWxpZGF0ZWRFbnRyeSkKKyAgICAgICAgICAgIGFkZFBy
ZWxvYWRlZEVudHJ5KFdURjo6bW92ZShyZXZhbGlkYXRlZEVudHJ5KSk7CisgICAgfSk7CisgICAg
bV9wZW5kaW5nUHJlbG9hZHMuYWRkKGtleSwgV1RGOjptb3ZlKHJldmFsaWRhdG9yKSk7Cit9CisK
K3ZvaWQgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6cHJlbG9hZEVudHJ5KGNvbnN0IEtleSYga2V5
LCBjb25zdCBHbG9iYWxGcmFtZUlEJiBmcmFtZUlEKQoreworICAgIG1fcGVuZGluZ1ByZWxvYWRz
LmFkZChrZXksIG51bGxwdHIpOworICAgIHJldHJpZXZlRW50cnlGcm9tU3RvcmFnZShrZXksIFt0
aGlzLCBrZXksIGZyYW1lSURdKHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gZW50cnkpIHsKKyAgICAg
ICAgbV9wZW5kaW5nUHJlbG9hZHMucmVtb3ZlKGtleSk7CisKKyAgICAgICAgaWYgKHNhdGlzZnlQ
ZW5kaW5nUmVxdWVzdHMoa2V5LCBlbnRyeS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAo
ZW50cnktPm5lZWRzVmFsaWRhdGlvbigpKQorICAgICAgICAgICAgcmV2YWxpZGF0ZUVudHJ5KFdU
Rjo6bW92ZShlbnRyeSksIGZyYW1lSUQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRQ
cmVsb2FkZWRFbnRyeShXVEY6Om1vdmUoZW50cnkpKTsKKyAgICB9KTsKK30KKwordm9pZCBTcGVj
dWxhdGl2ZUxvYWRNYW5hZ2VyOjpzdGFydFNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBjb25zdCBHbG9iYWxGcmFtZUlEJiBmcmFt
ZUlELCBjb25zdCBLZXkmIHN0b3JhZ2VLZXkpCit7CisgICAgaWYgKG9yaWdpbmFsUmVxdWVzdC5y
ZXF1ZXN0ZXIoKSAhPSBSZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3Rlcjo6TWFpbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgYXV0byBzdWJyZXNvdXJjZXNTdG9yYWdlS2V5ID0gbWFrZVN1YnJlc291
cmNlc0tleShzdG9yYWdlS2V5KTsKKworICAgIG1fc3RvcmFnZS5yZXRyaWV2ZShzdWJyZXNvdXJj
ZXNTdG9yYWdlS2V5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVzb3VyY2VMb2FkUHJpb3JpdHk6
Ok1lZGl1bSksIFt0aGlzLCBmcmFtZUlEXShzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZTo6UmVjb3Jk
PiByZWNvcmQpIHsKKyAgICAgICAgaWYgKCFyZWNvcmQpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgYXV0byBzdWJyZXNvdXJjZXNFbnRyeSA9IFN1YnJlc291cmNlc0VudHJ5
OjpkZWNvZGVTdG9yYWdlUmVjb3JkKCpyZWNvcmQpOworICAgICAgICBpZiAoIXN1YnJlc291cmNl
c0VudHJ5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGZvciAoYXV0byYg
c3VicmVzb3VyY2VLZXkgOiBzdWJyZXNvdXJjZXNFbnRyeS0+c3VicmVzb3VyY2VLZXlzKCkpCisg
ICAgICAgICAgICBwcmVsb2FkRW50cnkoc3VicmVzb3VyY2VLZXksIGZyYW1lSUQpOworCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2Fj
aGUKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19D
QUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2Vy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVj
dWxhdGl2ZUxvYWRNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MzY0YzU4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuaApAQCAtMCwwICsxLDgx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5h
Z2VyX2gKKyNkZWZpbmUgTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlcl9oCisKKyNp
ZiBFTkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04pCisKKyNpbmNs
dWRlICJOZXR3b3JrQ2FjaGUuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdG9yYWdlLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK25h
bWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworCitjbGFzcyBFbnRyeTsKK2NsYXNzIFNwZWN1bGF0aXZl
TG9hZDsKKworY2xhc3MgU3BlY3VsYXRpdmVMb2FkTWFuYWdlciB7CitwdWJsaWM6CisgICAgZXhw
bGljaXQgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcihTdG9yYWdlJik7CisgICAgflNwZWN1bGF0aXZl
TG9hZE1hbmFnZXIoKTsKKworICAgIHZvaWQgcmVnaXN0ZXJMb2FkKGNvbnN0IEdsb2JhbEZyYW1l
SUQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBLZXkmIHJlc291cmNl
S2V5KTsKKworICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkIChzdGQ6OnVuaXF1ZV9wdHI8
RW50cnk+KT4gUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlcjsKKyAgICBib29sIHJldHJpZXZlKGNv
bnN0IEtleSYgc3RvcmFnZUtleSwgY29uc3QgUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciYpOwor
CisgICAgdm9pZCBzdGFydFNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IEdsb2JhbEZyYW1lSUQmLCBjb25zdCBLZXkmIHN0b3JhZ2VL
ZXkpOworCitwcml2YXRlOgorICAgIHZvaWQgYWRkUHJlbG9hZGVkRW50cnkoc3RkOjp1bmlxdWVf
cHRyPEVudHJ5Pik7CisgICAgdm9pZCBwcmVsb2FkRW50cnkoY29uc3QgS2V5JiwgY29uc3QgR2xv
YmFsRnJhbWVJRCYpOworICAgIHZvaWQgcmV0cmlldmVFbnRyeUZyb21TdG9yYWdlKGNvbnN0IEtl
eSYsIGNvbnN0IFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXImKTsKKyAgICB2b2lkIHJldmFsaWRh
dGVFbnRyeShzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+LCBjb25zdCBHbG9iYWxGcmFtZUlEJik7Cisg
ICAgYm9vbCBzYXRpc2Z5UGVuZGluZ1JlcXVlc3RzKGNvbnN0IEtleSYsIEVudHJ5Kik7CisKKyAg
ICBTdG9yYWdlJiBtX3N0b3JhZ2U7CisKKyAgICBjbGFzcyBQZW5kaW5nRnJhbWVMb2FkOworICAg
IEhhc2hNYXA8R2xvYmFsRnJhbWVJRCwgc3RkOjp1bmlxdWVfcHRyPFBlbmRpbmdGcmFtZUxvYWQ+
PiBtX3BlbmRpbmdGcmFtZUxvYWRzOworCisgICAgSGFzaE1hcDxLZXksIHN0ZDo6dW5pcXVlX3B0
cjxTcGVjdWxhdGl2ZUxvYWQ+PiBtX3BlbmRpbmdQcmVsb2FkczsKKyAgICBIYXNoTWFwPEtleSwg
c3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyPj4+IG1fcGVu
ZGluZ1JldHJpZXZlUmVxdWVzdHM7CisKKyAgICBjbGFzcyBQcmVsb2FkZWRFbnRyeTsKKyAgICBI
YXNoTWFwPEtleSwgc3RkOjp1bmlxdWVfcHRyPFByZWxvYWRlZEVudHJ5Pj4gbV9wcmVsb2FkZWRF
bnRyaWVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hlCisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVf
UkVWQUxJREFUSU9OKQorCisjZW5kaWYgLy8gTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFu
YWdlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRlci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzZjVjOTUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkZXIuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElE
QVRJT04pCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkZXIuaCIKLQotI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRy
eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSHlzdGVyZXNpc0FjdGl2aXR5Lmg+Ci0jaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLW5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewotCi11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKLQotc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3VicmVzb3VyY2VzVHlw
ZSgpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiByZXNvdXJjZSgic3VicmVzb3VyY2VzIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIHJlc291cmNlOwot
fQotCi1zdGF0aWMgaW5saW5lIEtleSBtYWtlU3VicmVzb3VyY2VzS2V5KGNvbnN0IEtleSYgcmVz
b3VyY2VLZXkpCi17Ci0gICAgcmV0dXJuIEtleShyZXNvdXJjZUtleS5wYXJ0aXRpb24oKSwgc3Vi
cmVzb3VyY2VzVHlwZSgpLCByZXNvdXJjZUtleS5yYW5nZSgpLCByZXNvdXJjZUtleS5pZGVudGlm
aWVyKCkpOwotfQotCi1jbGFzcyBTcGVjdWxhdGl2ZUxvYWRlcjo6UGVuZGluZ0ZyYW1lTG9hZCB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUGVuZGluZ0ZyYW1l
TG9hZChjb25zdCBLZXkmIG1haW5SZXNvdXJjZUtleSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNv
bXBsZXRpb25IYW5kbGVyKQotICAgICAgICA6IG1fbWFpblJlc291cmNlS2V5KG1haW5SZXNvdXJj
ZUtleSkKLSAgICAgICAgLCBtX2NvbXBsZXRpb25IYW5kbGVyKGNvbXBsZXRpb25IYW5kbGVyKQot
ICAgICAgICAsIG1fbG9hZEh5c3RlcmVzaXNBY3Rpdml0eShbdGhpc10oSHlzdGVyZXNpc1N0YXRl
IHN0YXRlKSB7IGlmIChzdGF0ZSA9PSBIeXN0ZXJlc2lzU3RhdGU6OlN0b3BwZWQpIG1fY29tcGxl
dGlvbkhhbmRsZXIoKTsgfSkKLSAgICB7IH0KLQotICAgIHZvaWQgcmVnaXN0ZXJTdWJyZXNvdXJj
ZShjb25zdCBLZXkmIHN1YnJlc291cmNlS2V5KQotICAgIHsKLSAgICAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKLSAgICAgICAgbV9zdWJyZXNvdXJjZUtleXMuYWRkKHN1YnJlc291cmNl
S2V5KTsKLSAgICAgICAgbV9sb2FkSHlzdGVyZXNpc0FjdGl2aXR5LmltcHVsc2UoKTsKLSAgICB9
Ci0KLSAgICBPcHRpb25hbDxTdG9yYWdlOjpSZWNvcmQ+IGVuY29kZUFzU3VicmVzb3VyY2VzUmVj
b3JkKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgICAg
IGlmIChtX3N1YnJlc291cmNlS2V5cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4geyB9
OwotCi0gICAgICAgIGF1dG8gc3VicmVzb3VyY2VzU3RvcmFnZUtleSA9IG1ha2VTdWJyZXNvdXJj
ZXNLZXkobV9tYWluUmVzb3VyY2VLZXkpOwotICAgICAgICBWZWN0b3I8S2V5PiBzdWJyZXNvdXJj
ZUtleXM7Ci0gICAgICAgIGNvcHlUb1ZlY3RvcihtX3N1YnJlc291cmNlS2V5cywgc3VicmVzb3Vy
Y2VLZXlzKTsKLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVNw
ZWN1bGF0aXZlUHJlbG9hZGluZywgIihOZXR3b3JrUHJvY2VzcykgU2F2aW5nIHRvIGRpc2sgbGlz
dCBvZiBzdWJyZXNvdXJjZXMgZm9yICclcyc6IiwgbV9tYWluUmVzb3VyY2VLZXkuaWRlbnRpZmll
cigpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBmb3IgKGF1dG8mIHN1YnJlc291cmNlS2V5IDog
c3VicmVzb3VyY2VLZXlzKQotICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZl
UHJlbG9hZGluZywgIihOZXR3b3JrUHJvY2VzcykgKiBTdWJyZXNvdXJjZTogJyVzJy4iLCBzdWJy
ZXNvdXJjZUtleS5pZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLQotICAgICAg
ICByZXR1cm4gU3VicmVzb3VyY2VzRW50cnkoc3VicmVzb3VyY2VzU3RvcmFnZUtleSwgV1RGOjpt
b3ZlKHN1YnJlc291cmNlS2V5cykpLmVuY29kZUFzU3RvcmFnZVJlY29yZCgpOwotICAgIH0KLQot
ICAgIHZvaWQgbWFya0FzQ29tcGxldGVkKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7Ci0gICAgICAgIG1fY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgS2V5IG1fbWFpblJlc291cmNlS2V5OwotICAgIEhhc2hTZXQ8S2V5PiBtX3N1
YnJlc291cmNlS2V5czsKLSAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gbV9jb21wbGV0aW9uSGFu
ZGxlcjsKLSAgICBIeXN0ZXJlc2lzQWN0aXZpdHkgbV9sb2FkSHlzdGVyZXNpc0FjdGl2aXR5Owot
fTsKLQotU3BlY3VsYXRpdmVMb2FkZXI6OlNwZWN1bGF0aXZlTG9hZGVyKFN0b3JhZ2UmIHN0b3Jh
Z2UpCi0gICAgOiBtX3N0b3JhZ2Uoc3RvcmFnZSkKLXsKLX0KLQotU3BlY3VsYXRpdmVMb2FkZXI6
On5TcGVjdWxhdGl2ZUxvYWRlcigpCi17Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVMb2FkZXI6OnJl
Z2lzdGVyTG9hZCh1aW50NjRfdCB3ZWJQYWdlSUQsIHVpbnQ2NF90IHdlYkZyYW1lSUQsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgS2V5JiByZXNvdXJjZUtleSkKLXsKLSAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKCFyZXF1ZXN0LnVybCgpLnBy
b3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCByZXF1ZXN0Lmh0dHBNZXRob2QoKSAhPSAiR0VUIikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBmcmFtZUtleSA9IHN0ZDo6bWFrZV9wYWlyKHdl
YlBhZ2VJRCwgd2ViRnJhbWVJRCk7Ci0gICAgYXV0byBpc01haW5SZXNvdXJjZSA9IHJlcXVlc3Qu
cmVxdWVzdGVyKCkgPT0gUmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXI6Ok1haW47Ci0gICAgaWYg
KGlzTWFpblJlc291cmNlKSB7Ci0gICAgICAgIC8vIE1hcmsgcHJldmlvdXMgbG9hZCBpbiB0aGlz
IGZyYW1lIGFzIGNvbXBsZXRlZCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChhdXRvKiBwZW5k
aW5nRnJhbWVMb2FkID0gbV9wZW5kaW5nRnJhbWVMb2Fkcy5nZXQoZnJhbWVLZXkpKQotICAgICAg
ICAgICAgcGVuZGluZ0ZyYW1lTG9hZC0+bWFya0FzQ29tcGxldGVkKCk7Ci0KLSAgICAgICAgLy8g
U3RhcnQgdHJhY2tpbmcgbG9hZHMgaW4gdGhpcyBmcmFtZS4KLSAgICAgICAgbV9wZW5kaW5nRnJh
bWVMb2Fkcy5hZGQoZnJhbWVLZXksIHN0ZDo6bWFrZV91bmlxdWU8UGVuZGluZ0ZyYW1lTG9hZD4o
cmVzb3VyY2VLZXksIFt0aGlzLCBmcmFtZUtleV0oKSB7Ci0gICAgICAgICAgICBhdXRvIGZyYW1l
TG9hZCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMudGFrZShmcmFtZUtleSk7Ci0gICAgICAgICAgICBh
dXRvIG9wdGlvbmFsUmVjb3JkID0gZnJhbWVMb2FkLT5lbmNvZGVBc1N1YnJlc291cmNlc1JlY29y
ZCgpOwotICAgICAgICAgICAgaWYgKCFvcHRpb25hbFJlY29yZCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBtX3N0b3JhZ2Uuc3RvcmUob3B0aW9uYWxSZWNvcmQudmFsdWUo
KSwgW10oY29uc3QgRGF0YSYpIHsgfSk7Ci0gICAgICAgIH0pKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChhdXRvKiBwZW5kaW5nRnJhbWVMb2FkID0gbV9wZW5kaW5nRnJhbWVM
b2Fkcy5nZXQoZnJhbWVLZXkpKQotICAgICAgICBwZW5kaW5nRnJhbWVMb2FkLT5yZWdpc3RlclN1
YnJlc291cmNlKHJlc291cmNlS2V5KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hl
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FD
SEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkZXIuaCBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZl
TG9hZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZGUzMzcuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Bl
Y3VsYXRpdmVMb2FkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZGVyX2gKLSNkZWZpbmUgTmV0
d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkZXJfaAotCi0jaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVf
U1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKQotCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RvcmFn
ZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLW5hbWVzcGFjZSBOZXR3b3JrQ2Fj
aGUgewotCi1jbGFzcyBTcGVjdWxhdGl2ZUxvYWRlciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQg
U3BlY3VsYXRpdmVMb2FkZXIoU3RvcmFnZSYpOwotICAgIH5TcGVjdWxhdGl2ZUxvYWRlcigpOwot
Ci0gICAgdm9pZCByZWdpc3RlckxvYWQodWludDY0X3Qgd2ViUGFnZUlELCB1aW50NjRfdCB3ZWJG
cmFtZUlELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBLZXkmIHJlc291
cmNlS2V5KTsKLQotcHJpdmF0ZToKLSAgICBTdG9yYWdlJiBtX3N0b3JhZ2U7Ci0KLSAgICBjbGFz
cyBQZW5kaW5nRnJhbWVMb2FkOwotICAgIHVzaW5nIEdsb2JhbEZyYW1lSUQgPSBzdGQ6OnBhaXI8
dWludDY0X3QgLyp3ZWJQYWdlSUQqLywgdWludDY0X3QgLyp3ZWJGcmFtZUlEKi8+OwotICAgIEhh
c2hNYXA8R2xvYmFsRnJhbWVJRCwgc3RkOjp1bmlxdWVfcHRyPFBlbmRpbmdGcmFtZUxvYWQ+PiBt
X3BlbmRpbmdGcmFtZUxvYWRzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hlCi0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FDSEVf
U1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKQotCi0jZW5kaWYgLy8gTmV0d29ya0NhY2hlU3BlY3Vs
YXRpdmVMb2FkZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29h
L1dlYlByb2Nlc3NQb29sQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2Ev
V2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQppbmRleCBmZDEwODNmLi4zOGM3MGU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5t
bQpAQCAtMTEwLDcgKzExMCw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZO
ZWVkZWQoKQogICAgIFtyZWdpc3RyYXRpb25EaWN0aW9uYXJ5IHNldE9iamVjdDpbTlNOdW1iZXIg
bnVtYmVyV2l0aEJvb2w6WUVTXSBmb3JLZXk6V2ViS2l0TmV0d29ya0NhY2hlRW5hYmxlZERlZmF1
bHRzS2V5XTsKICAgICBbcmVnaXN0cmF0aW9uRGljdGlvbmFyeSBzZXRPYmplY3Q6W05TTnVtYmVy
IG51bWJlcldpdGhCb29sOk5PXSBmb3JLZXk6V2ViS2l0TmV0d29ya0NhY2hlRWZmaWNhY3lMb2dn
aW5nRW5hYmxlZERlZmF1bHRzS2V5XTsKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxB
VElWRV9SRVZBTElEQVRJT04pCi0gICAgW3JlZ2lzdHJhdGlvbkRpY3Rpb25hcnkgc2V0T2JqZWN0
OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10gZm9yS2V5OldlYktpdE5ldHdvcmtDYWNoZVNw
ZWN1bGF0aXZlUmV2YWxpZGF0aW9uRW5hYmxlZERlZmF1bHRzS2V5XTsKKyAgICBbcmVnaXN0cmF0
aW9uRGljdGlvbmFyeSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10gZm9y
S2V5OldlYktpdE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uRW5hYmxlZERlZmF1
bHRzS2V5XTsKICNlbmRpZgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyZjJlYzFjLi5kZDU0YTZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
MTgwLDggKzExODAsMTAgQEAKIAkJODMwNDhBRTYxQUNBNDVEQzAwODJDODMyIC8qIFByb2Nlc3NU
aHJvdHRsZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDgzMDQ4QUU1MUFDQTQ1REMwMDgyQzgzMiAvKiBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50
LmggKi87IH07CiAJCTgzMTA0MjhCMUJENkI2NkYwMEE3MTVFNCAvKiBOZXR3b3JrQ2FjaGVTdWJy
ZXNvdXJjZXNFbnRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODMxMDQyODkxQkQ2QjY2RjAwQTcxNUU0IC8qIE5ldHdvcmtDYWNoZVN1YnJlc291cmNl
c0VudHJ5LmggKi87IH07CiAJCTgzMTA0MjhDMUJENkI2NkYwMEE3MTVFNCAvKiBOZXR3b3JrQ2Fj
aGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4MzEwNDI4QTFCRDZCNjZGMDBBNzE1RTQgLyogTmV0d29ya0NhY2hlU3Vi
cmVzb3VyY2VzRW50cnkuY3BwICovOyB9OwotCQk4MzJBRTI1MjFCRTJFOENEMDBGQUFFMTAgLyog
TmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzMkFFMjUwMUJFMkU4Q0QwMEZBQUUxMCAvKiBOZXR3b3Jr
Q2FjaGVTcGVjdWxhdGl2ZUxvYWRlci5oICovOyB9OwotCQk4MzJBRTI1MzFCRTJFOENEMDBGQUFF
MTAgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODMyQUUyNTExQkUyRThDRDAwRkFBRTEwIC8q
IE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZGVyLmNwcCAqLzsgfTsKKwkJODMxRUVCQkQxQkQ4
NUM0MzAwQkI2NEMzIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODMxRUVCQkIxQkQ4NUM0MzAwQkI2
NEMzIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5oICovOyB9OworCQk4MzFFRUJCRTFC
RDg1QzQzMDBCQjY0QzMgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzMUVFQkJDMUJEODVDNDMw
MEJCNjRDMyAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwICovOyB9OworCQk4MzJB
RTI1MjFCRTJFOENEMDBGQUFFMTAgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODMyQUUy
NTAxQkUyRThDRDAwRkFBRTEwIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIu
aCAqLzsgfTsKKwkJODMyQUUyNTMxQkUyRThDRDAwRkFBRTEwIC8qIE5ldHdvcmtDYWNoZVNwZWN1
bGF0aXZlTG9hZE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODMyQUUyNTExQkUyRThDRDAwRkFBRTEwIC8qIE5ldHdvcmtDYWNoZVNwZWN1
bGF0aXZlTG9hZE1hbmFnZXIuY3BwICovOyB9OwogCQk4MzRCMjUwRjFBODMxQThEMDBDRkIxNTAg
LyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODM0QjI1MEUxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNo
ZUZpbGVTeXN0ZW0uaCAqLzsgfTsKIAkJODM0QjI1MTIxQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdv
cmtDYWNoZVN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDgzNEIyNTEwMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0
aWNzLmggKi87IH07CiAJCTgzNjAzNDlGMUFDQjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRh
YmFzZVRyYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODM2MDM0OUQxQUNCMzRENjAwNjI2NTQ5IC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tl
ci5jcHAgKi87IH07CkBAIC0zNDIwLDggKzM0MjIsMTAgQEAKIAkJODMwNDhBRTUxQUNBNDVEQzAw
ODJDODMyIC8qIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUHJvY2Vzc1Rocm90dGxlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4MzEwNDI4OTFCRDZCNjZGMDBBNzE1RTQgLyogTmV0d29ya0NhY2hlU3VicmVz
b3VyY2VzRW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0Nh
Y2hlU3VicmVzb3VyY2VzRW50cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODMx
MDQyOEExQkQ2QjY2RjAwQTcxNUU0IC8qIE5ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZVN1YnJl
c291cmNlc0VudHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODMyQUUyNTAx
QkUyRThDRDAwRkFBRTEwIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTgzMkFFMjUxMUJFMkU4Q0QwMEZBQUUx
MCAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzMUVFQkJCMUJEODVDNDMwMEJCNjRDMyAvKiBO
ZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTgzMUVFQkJDMUJEODVDNDMwMEJCNjRDMyAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxh
dGl2ZUxvYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29y
a0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
ODMyQUUyNTAxQkUyRThDRDAwRkFBRTEwIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1h
bmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlU3Bl
Y3VsYXRpdmVMb2FkTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MzJB
RTI1MTFCRTJFOENEMDBGQUFFMTAgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVT
cGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODM0QjI1MEUxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzRCMjUxMDFBODQyQzg3MDBDRkIxNTAgLyog
TmV0d29ya0NhY2hlU3RhdGlzdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTgzNjAzNDlEMUFDQjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViU1FMaXRlRGF0YWJhc2VU
cmFja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc1ODcsOCArNzU5MSwx
MCBAQAogCQkJCUU0MkUwNjBEMUFBNzUwRTUwMEIxMTY5OSAvKiBOZXR3b3JrQ2FjaGVJT0NoYW5u
ZWxDb2NvYS5tbSAqLywKIAkJCQlFNDQzNkVDMDFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0Nh
Y2hlS2V5LmNwcCAqLywKIAkJCQlFNDQzNkVDMTFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0Nh
Y2hlS2V5LmggKi8sCi0JCQkJODMyQUUyNTExQkUyRThDRDAwRkFBRTEwIC8qIE5ldHdvcmtDYWNo
ZVNwZWN1bGF0aXZlTG9hZGVyLmNwcCAqLywKLQkJCQk4MzJBRTI1MDFCRTJFOENEMDBGQUFFMTAg
LyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkZXIuaCAqLywKKwkJCQk4MzJBRTI1MTFCRTJF
OENEMDBGQUFFMTAgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5jcHAgKi8s
CisJCQkJODMyQUUyNTAxQkUyRThDRDAwRkFBRTEwIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZl
TG9hZE1hbmFnZXIuaCAqLywKKwkJCQk4MzFFRUJCQzFCRDg1QzQzMDBCQjY0QzMgLyogTmV0d29y
a0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcCAqLywKKwkJCQk4MzFFRUJCQjFCRDg1QzQzMDBCQjY0
QzMgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmggKi8sCiAJCQkJODNCRENDQjgxQUM1
RkRCNjAwM0Y2NDQxIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwICovLAogCQkJCTgzNEIy
NTEwMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmggKi8sCiAJCQkJ
RTQ0MzZFQzMxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwICovLApA
QCAtNzczMiw3ICs3NzM4LDcgQEAKIAkJCQk3NUE4RDJFMTE4N0RFQzFBMDBDMzlDOUUgLyogQVBJ
U2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGREU2NjIxOTU0RTlCMTAwQzQ4RkZBIC8q
IEFQSVNlc3Npb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0RDY2NDgxOEEyRDkxQTAw
RDgyRTIxIC8qIEFQSVVJQ2xpZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk4MzJBRTI1MjFCRTJF
OENEMDBGQUFFMTAgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTgzMkFFMjUyMUJFMkU4Q0QwMEZBQUUxMCAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxh
dGl2ZUxvYWRNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0RCODZDMTEyMDBGQjk3MDA3
MjU0QkUgLyogQVBJVVJMLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0UyMzE1RDEyMkMzMENBMDBE
NUMzNUEgLyogQVBJVVJMUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5MEExRDIxMjJE
RDU1RTAwQ0M4QzUwIC8qIEFQSVVSTFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywKQEAgLTc4Mjgs
NiArNzgzNCw3IEBACiAJCQkJQzBDRTcyQUQxMjQ3RTc4RDAwQkMwRUM0IC8qIEhhbmRsZU1lc3Nh
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQzc1QTFCMUIzMzY4MjcwMDU2NzQ1QiAvKiBIYW5n
RGV0ZWN0aW9uRGlzYWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3RjkwREUzMTM3NjU2MEUw
MDUxQ0Y2OCAvKiBIVFRQQ29va2llQWNjZXB0UG9saWN5LmggaW4gSGVhZGVycyAqLywKKwkJCQk4
MzFFRUJCRDFCRDg1QzQzMDBCQjY0QzMgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTc1MDk1QTE4OTcyNDk3MDA0MDhGQUMgLyogSURCSWRlbnRp
Zmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4MzUzREIxODg1QkY4QzAwRDlGRTQ0IC8qIElE
QlNlcmlhbGl6YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRTM1MUNCMTgwRjJDQ0MwMEU1
M0JFOSAvKiBJREJVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLApAQCAtOTU0Niw3ICs5NTUzLDcg
QEAKIAkJCQk3Qzg5RDI5NzFBNjc1M0IyMDAzQTVGREUgLyogQVBJUGFnZUNvbmZpZ3VyYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEzQTczQ0YxQTQ4QzdGMTAwNzIzMUIzIC8qIEFQSVBh
Z2VHcm91cEhhbmRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUMxMzM2RTE4NTY1RDJCMDBG
M0VDMDUgLyogQVBJUGFnZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk4MzJBRTI1MzFC
RTJFOENEMDBGQUFFMTAgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJODMyQUUyNTMxQkUyRThDRDAwRkFBRTEwIC8qIE5ldHdvcmtDYWNoZVNw
ZWN1bGF0aXZlTG9hZE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NFNEQyMUYxQTQ5
MTRDQTAwQzdGMTUyIC8qIEFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRUQzQzFEQzFCNDQ3RUFDMDBFMEVCN0YgLyogQVBJU2VyaWFsaXplZFNjcmlw
dFZhbHVlQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTgyRDVCNDFCRTZCRDI1MDA4N0E3
Q0MgLyogQWNjZXNzaWJpbGl0eUlPUy5tbSBpbiBTb3VyY2VzICovLApAQCAtOTg4MSw2ICs5ODg4
LDcgQEAKIAkJCQk1MTVFNzcyRjE4NDAxNTgwMDAwNzIwM0YgLyogVW5pcXVlSURCRGF0YWJhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2NTRFRkQxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1
ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
NUU3NzMzMTg0MDJENTEwMDA3MjAzRiAvKiBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJODMxRUVCQkUxQkQ4NUM0MzAwQkI2NEMzIC8qIE5ldHdvcmtD
YWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTY0MjQ1RjEyREUy
OUExMDBDQUFFMkMgLyogVXBkYXRlSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUMxMzM2
NzE4NTY1QjU3MDBGM0VDMDUgLyogVXNlckRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTU3
MzlCQkMxQjQyMDQwMzAwRDI1OEMxIC8qIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
ci5jcHAgaW4gU291cmNlcyAqLywKLS0gCjIuMy44IChBcHBsZSBHaXQtNTgpCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265210</attachid>
            <date>2015-11-10 11:50:43 -0800</date>
            <delta_ts>2015-11-11 10:23:13 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>150856_NetworkCache_speculative_revalidation.patch</filename>
            <type>text/plain</type>
            <size>40825</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJj
ZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuY3BwCmluZGV4IDYxZDI1NTguLmE5ZGQzOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcApAQCAt
MTI4LDcgKzEyOCw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydCgpCiAgICAg
fQogCiAgICAgUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVyKHRoaXMpOwotICAg
IE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkucmV0cmlldmUob3JpZ2luYWxSZXF1ZXN0KCksIG1f
cGFyYW1ldGVycy53ZWJQYWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFtZUlELCBbbG9hZGVyXShz
dGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4gZW50cnkpIHsKKyAgICBOZXR3b3Jr
Q2FjaGU6OnNpbmdsZXRvbigpLnJldHJpZXZlKG9yaWdpbmFsUmVxdWVzdCgpLCB7IG1fcGFyYW1l
dGVycy53ZWJQYWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFtZUlEIH0sIFtsb2FkZXJdKHN0ZDo6
dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiBlbnRyeSkgewogICAgICAgICBpZiAobG9h
ZGVyLT5oYXNPbmVSZWYoKSkgewogICAgICAgICAgICAgLy8gVGhlIGxvYWRlciBoYXMgYmVlbiBh
Ym9ydGVkIGFuZCBpcyBvbmx5IGhlbGQgYWxpdmUgYnkgdGhpcyBsYW1iZGEuCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0yNDEsNyArMjQxLDcgQEAgYXV0byBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWNlaXZlZFIKICAg
ICBpZiAobV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbikgewogICAgICAgICBib29sIHZhbGlkYXRp
b25TdWNjZWVkZWQgPSBtX3Jlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMzA0OyAvLyAzMDQg
Tm90IE1vZGlmaWVkCiAgICAgICAgIGlmICh2YWxpZGF0aW9uU3VjY2VlZGVkKSB7Ci0gICAgICAg
ICAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnVwZGF0ZShvcmlnaW5hbFJlcXVlc3QoKSwg
bV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCwgKm1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24sIG1fcmVz
cG9uc2UpOworICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS51cGRhdGUob3Jp
Z2luYWxSZXF1ZXN0KCksIHsgbV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCwgbV9wYXJhbWV0ZXJzLndl
YkZyYW1lSUQgfSwgKm1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24sIG1fcmVzcG9uc2UpOwogICAg
ICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3Qgd2FzIGNvbmRpdGlvbmFsIHRoZW4gdGhpcyByZXZh
bGlkYXRpb24gd2FzIG5vdCB0cmlnZ2VyZWQgYnkgdGhlIG5ldHdvcmsgY2FjaGUgYW5kIHdlIHBh
c3MgdGhlCiAgICAgICAgICAgICAvLyAzMDQgcmVzcG9uc2UgdG8gV2ViQ29yZS4KICAgICAgICAg
ICAgIGlmIChvcmlnaW5hbFJlcXVlc3QoKS5pc0NvbmRpdGlvbmFsKCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAppbmRleCA4
ZWZmZDQxLi43MDIwZDlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKQEAgLTM0Myw3ICszNDMsNyBAQCBzdGF0aWMgU3Rv
cmVEZWNpc2lvbiBtYWtlU3RvcmVEZWNpc2lvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIG9yaWdpbmFsUgogICAgIHJldHVybiBTdG9yZURlY2lzaW9uOjpZZXM7CiB9CiAKLXZvaWQg
Q2FjaGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxS
ZXF1ZXN0LCB1aW50NjRfdCB3ZWJQYWdlSUQsIHVpbnQ2NF90IHdlYkZyYW1lSUQsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoc3RkOjp1bmlxdWVfcHRyPEVudHJ5Pik+IGNvbXBsZXRpb25IYW5kbGVyKQor
dm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmln
aW5hbFJlcXVlc3QsIGNvbnN0IEdsb2JhbEZyYW1lSUQmIGZyYW1lSUQsIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoc3RkOjp1bmlxdWVfcHRyPEVudHJ5Pik+IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IEFTU0VSVChpc0VuYWJsZWQoKSk7CiAgICAgQVNTRVJUKG9yaWdpbmFsUmVxdWVzdC51cmwoKS5w
cm90b2NvbElzSW5IVFRQRmFtaWx5KCkpOwpAQCAtMzUxLDM1ICszNTEsNDggQEAgdm9pZCBDYWNo
ZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVl
c3QsIHVpbnQ2NF90IHcKICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBy
ZXRyaWV2aW5nICVzIHByaW9yaXR5ICVkIiwgb3JpZ2luYWxSZXF1ZXN0LnVybCgpLnN0cmluZygp
LmFzY2lpKCkuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG9yaWdpbmFsUmVxdWVzdC5wcmlvcml0
eSgpKSk7CiAKICAgICBpZiAobV9zdGF0aXN0aWNzKQotICAgICAgICBtX3N0YXRpc3RpY3MtPnJl
Y29yZFJldHJpZXZhbFJlcXVlc3Qod2ViUGFnZUlEKTsKKyAgICAgICAgbV9zdGF0aXN0aWNzLT5y
ZWNvcmRSZXRyaWV2YWxSZXF1ZXN0KGZyYW1lSUQuZmlyc3QpOwogCiAgICAgS2V5IHN0b3JhZ2VL
ZXkgPSBtYWtlQ2FjaGVLZXkob3JpZ2luYWxSZXF1ZXN0KTsKIAogI2lmIEVOQUJMRShORVRXT1JL
X0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKLSAgICBpZiAobV9zcGVjdWxhdGl2ZUxv
YWRNYW5hZ2VyKQotICAgICAgICBtX3NwZWN1bGF0aXZlTG9hZE1hbmFnZXItPnJlZ2lzdGVyTG9h
ZCh3ZWJQYWdlSUQsIHdlYkZyYW1lSUQsIG9yaWdpbmFsUmVxdWVzdCwgc3RvcmFnZUtleSk7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTSh3ZWJGcmFtZUlEKTsKKyAgICBpZiAobV9zcGVjdWxhdGl2
ZUxvYWRNYW5hZ2VyKSB7CisgICAgICAgIG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlci0+cmVnaXN0
ZXJMb2FkKGZyYW1lSUQsIG9yaWdpbmFsUmVxdWVzdCwgc3RvcmFnZUtleSk7CisgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgb3JpZ2luYWxSZXF1ZXN0LCBmcmFtZUlELCBz
dG9yYWdlS2V5XSB7CisgICAgICAgICAgICBtX3NwZWN1bGF0aXZlTG9hZE1hbmFnZXItPnN0YXJ0
U3BlY3VsYXRpdmVSZXZhbGlkYXRpb24ob3JpZ2luYWxSZXF1ZXN0LCBmcmFtZUlELCBzdG9yYWdl
S2V5KTsKKyAgICAgICAgfSk7CisgICAgfQogI2VuZGlmCiAKICAgICBhdXRvIHJldHJpZXZlRGVj
aXNpb24gPSBtYWtlUmV0cmlldmVEZWNpc2lvbihvcmlnaW5hbFJlcXVlc3QpOworCiAgICAgaWYg
KHJldHJpZXZlRGVjaXNpb24gIT0gUmV0cmlldmVEZWNpc2lvbjo6WWVzKSB7CiAgICAgICAgIGlm
IChtX3N0YXRpc3RpY3MpCi0gICAgICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZE5vdFVzaW5n
Q2FjaGVGb3JSZXF1ZXN0KHdlYlBhZ2VJRCwgc3RvcmFnZUtleSwgb3JpZ2luYWxSZXF1ZXN0LCBy
ZXRyaWV2ZURlY2lzaW9uKTsKKyAgICAgICAgICAgIG1fc3RhdGlzdGljcy0+cmVjb3JkTm90VXNp
bmdDYWNoZUZvclJlcXVlc3QoZnJhbWVJRC5maXJzdCwgc3RvcmFnZUtleSwgb3JpZ2luYWxSZXF1
ZXN0LCByZXRyaWV2ZURlY2lzaW9uKTsKIAogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxs
cHRyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hF
X1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKKyAgICBpZiAobV9zcGVjdWxhdGl2ZUxvYWRNYW5h
Z2VyICYmIG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlci0+cmV0cmlldmUoc3RvcmFnZUtleSwgW29y
aWdpbmFsUmVxdWVzdCwgY29tcGxldGlvbkhhbmRsZXJdKHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4g
ZW50cnkpIHsKKyAgICAgICAgaWYgKGVudHJ5ICYmIHZlcmlmeVZhcnlpbmdSZXF1ZXN0SGVhZGVy
cyhlbnRyeS0+dmFyeWluZ1JlcXVlc3RIZWFkZXJzKCksIG9yaWdpbmFsUmVxdWVzdCkpCisgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEY6Om1vdmUoZW50cnkpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CisgICAgfSkpCisgICAg
ICAgIHJldHVybjsKKyNlbmRpZgorCiAgICAgYXV0byBzdGFydFRpbWUgPSBzdGQ6OmNocm9ubzo6
c3lzdGVtX2Nsb2NrOjpub3coKTsKICAgICBhdXRvIHByaW9yaXR5ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG9yaWdpbmFsUmVxdWVzdC5wcmlvcml0eSgpKTsKIAotICAgIG1fc3RvcmFnZS0+cmV0
cmlldmUoc3RvcmFnZUtleSwgcHJpb3JpdHksIFt0aGlzLCBvcmlnaW5hbFJlcXVlc3QsIGNvbXBs
ZXRpb25IYW5kbGVyLCBzdGFydFRpbWUsIHN0b3JhZ2VLZXksIHdlYlBhZ2VJRF0oc3RkOjp1bmlx
dWVfcHRyPFN0b3JhZ2U6OlJlY29yZD4gcmVjb3JkKSB7CisgICAgbV9zdG9yYWdlLT5yZXRyaWV2
ZShzdG9yYWdlS2V5LCBwcmlvcml0eSwgW3RoaXMsIG9yaWdpbmFsUmVxdWVzdCwgY29tcGxldGlv
bkhhbmRsZXIsIHN0YXJ0VGltZSwgc3RvcmFnZUtleSwgZnJhbWVJRF0oc3RkOjp1bmlxdWVfcHRy
PFN0b3JhZ2U6OlJlY29yZD4gcmVjb3JkKSB7CiAgICAgICAgIGlmICghcmVjb3JkKSB7CiAgICAg
ICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBub3QgZm91bmQgaW4g
c3RvcmFnZSIpOwogCiAgICAgICAgICAgICBpZiAobV9zdGF0aXN0aWNzKQotICAgICAgICAgICAg
ICAgIG1fc3RhdGlzdGljcy0+cmVjb3JkUmV0cmlldmFsRmFpbHVyZSh3ZWJQYWdlSUQsIHN0b3Jh
Z2VLZXksIG9yaWdpbmFsUmVxdWVzdCk7CisgICAgICAgICAgICAgICAgbV9zdGF0aXN0aWNzLT5y
ZWNvcmRSZXRyaWV2YWxGYWlsdXJlKGZyYW1lSUQuZmlyc3QsIHN0b3JhZ2VLZXksIG9yaWdpbmFs
UmVxdWVzdCk7CiAKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDA3LDEyICs0MjAsMTIgQEAgdm9pZCBDYWNoZTo6
cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3Qs
IHVpbnQ2NF90IHcKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjptb3ZlKGVudHJ5KSk7
CiAKICAgICAgICAgaWYgKG1fc3RhdGlzdGljcykKLSAgICAgICAgICAgIG1fc3RhdGlzdGljcy0+
cmVjb3JkUmV0cmlldmVkQ2FjaGVkRW50cnkod2ViUGFnZUlELCBzdG9yYWdlS2V5LCBvcmlnaW5h
bFJlcXVlc3QsIHVzZURlY2lzaW9uKTsKKyAgICAgICAgICAgIG1fc3RhdGlzdGljcy0+cmVjb3Jk
UmV0cmlldmVkQ2FjaGVkRW50cnkoZnJhbWVJRC5maXJzdCwgc3RvcmFnZUtleSwgb3JpZ2luYWxS
ZXF1ZXN0LCB1c2VEZWNpc2lvbik7CiAgICAgICAgIHJldHVybiB1c2VEZWNpc2lvbiAhPSBVc2VE
ZWNpc2lvbjo6Tm9EdWVUb0RlY29kZUZhaWx1cmU7CiAgICAgfSk7CiB9CiAKLXZvaWQgQ2FjaGU6
OnN0b3JlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUmVmUHRyPFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcj4mJiByZXNwb25zZURhdGEsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoTWFwcGVk
Qm9keSYpPiBjb21wbGV0aW9uSGFuZGxlcikKK3N0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gQ2FjaGU6
OnN0b3JlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUmVmUHRyPFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcj4mJiByZXNwb25zZURhdGEsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoTWFwcGVk
Qm9keSYpPiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoaXNFbmFibGVkKCkpOwog
ICAgIEFTU0VSVChyZXNwb25zZURhdGEpOwpAQCAtNDQwLDEyICs0NTMsMTIgQEAgdm9pZCBDYWNo
ZTo6c3RvcmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3Qs
IGNvbnN0IFdlYkNvcmUKICAgICAgICAgaWYgKG1fc3RhdGlzdGljcykKICAgICAgICAgICAgIG1f
c3RhdGlzdGljcy0+cmVjb3JkTm90Q2FjaGluZ1Jlc3BvbnNlKGtleSwgc3RvcmVEZWNpc2lvbik7
CiAKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAg
ICBFbnRyeSBjYWNoZUVudHJ5KG1ha2VDYWNoZUtleShvcmlnaW5hbFJlcXVlc3QpLCByZXNwb25z
ZSwgV1RGOjptb3ZlKHJlc3BvbnNlRGF0YSksIGNvbGxlY3RWYXJ5aW5nUmVxdWVzdEhlYWRlcnMo
b3JpZ2luYWxSZXF1ZXN0LCByZXNwb25zZSkpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4g
Y2FjaGVFbnRyeSA9IHN0ZDo6bWFrZV91bmlxdWU8RW50cnk+KG1ha2VDYWNoZUtleShvcmlnaW5h
bFJlcXVlc3QpLCByZXNwb25zZSwgV1RGOjptb3ZlKHJlc3BvbnNlRGF0YSksIGNvbGxlY3RWYXJ5
aW5nUmVxdWVzdEhlYWRlcnMob3JpZ2luYWxSZXF1ZXN0LCByZXNwb25zZSkpOwogCi0gICAgYXV0
byByZWNvcmQgPSBjYWNoZUVudHJ5LmVuY29kZUFzU3RvcmFnZVJlY29yZCgpOworICAgIGF1dG8g
cmVjb3JkID0gY2FjaGVFbnRyeS0+ZW5jb2RlQXNTdG9yYWdlUmVjb3JkKCk7CiAKICAgICBtX3N0
b3JhZ2UtPnN0b3JlKHJlY29yZCwgW2NvbXBsZXRpb25IYW5kbGVyXShjb25zdCBEYXRhJiBib2R5
RGF0YSkgewogICAgICAgICBNYXBwZWRCb2R5IG1hcHBlZEJvZHk7CkBAIC00NTksMjMgKzQ3Miwy
NyBAQCB2b2lkIENhY2hlOjpzdG9yZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9y
aWdpbmFsUmVxdWVzdCwgY29uc3QgV2ViQ29yZQogICAgICAgICBjb21wbGV0aW9uSGFuZGxlciht
YXBwZWRCb2R5KTsKICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykg
c3RvcmVkIik7CiAgICAgfSk7CisKKyAgICByZXR1cm4gY2FjaGVFbnRyeTsKIH0KIAotdm9pZCBD
YWNoZTo6dXBkYXRlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1
ZXN0LCB1aW50NjRfdCB3ZWJQYWdlSUQsIGNvbnN0IEVudHJ5JiBleGlzdGluZ0VudHJ5LCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiB2YWxpZGF0aW5nUmVzcG9uc2UpCitzdGQ6OnVu
aXF1ZV9wdHI8RW50cnk+IENhY2hlOjp1cGRhdGUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiBvcmlnaW5hbFJlcXVlc3QsIGNvbnN0IEdsb2JhbEZyYW1lSUQmIGZyYW1lSUQsIGNvbnN0
IEVudHJ5JiBleGlzdGluZ0VudHJ5LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiB2
YWxpZGF0aW5nUmVzcG9uc2UpCiB7CiAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJv
Y2VzcykgdXBkYXRpbmcgJXMiLCBvcmlnaW5hbFJlcXVlc3QudXJsKCkuc3RyaW5nKCkubGF0aW4x
KCkuZGF0YSgpKTsKIAogICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UgPSBl
eGlzdGluZ0VudHJ5LnJlc3BvbnNlKCk7CiAgICAgV2ViQ29yZTo6dXBkYXRlUmVzcG9uc2VIZWFk
ZXJzQWZ0ZXJSZXZhbGlkYXRpb24ocmVzcG9uc2UsIHZhbGlkYXRpbmdSZXNwb25zZSk7CisgICAg
cmVzcG9uc2Uuc2V0U291cmNlKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RGlz
a0NhY2hlKTsKIAotICAgIEVudHJ5IHVwZGF0ZUVudHJ5KGV4aXN0aW5nRW50cnkua2V5KCksIHJl
c3BvbnNlLCBleGlzdGluZ0VudHJ5LmJ1ZmZlcigpLCBjb2xsZWN0VmFyeWluZ1JlcXVlc3RIZWFk
ZXJzKG9yaWdpbmFsUmVxdWVzdCwgcmVzcG9uc2UpKTsKLQotICAgIGF1dG8gdXBkYXRlUmVjb3Jk
ID0gdXBkYXRlRW50cnkuZW5jb2RlQXNTdG9yYWdlUmVjb3JkKCk7CisgICAgYXV0byB1cGRhdGVF
bnRyeSA9IHN0ZDo6bWFrZV91bmlxdWU8RW50cnk+KGV4aXN0aW5nRW50cnkua2V5KCksIHJlc3Bv
bnNlLCBleGlzdGluZ0VudHJ5LmJ1ZmZlcigpLCBjb2xsZWN0VmFyeWluZ1JlcXVlc3RIZWFkZXJz
KG9yaWdpbmFsUmVxdWVzdCwgcmVzcG9uc2UpKTsKKyAgICBhdXRvIHVwZGF0ZVJlY29yZCA9IHVw
ZGF0ZUVudHJ5LT5lbmNvZGVBc1N0b3JhZ2VSZWNvcmQoKTsKIAogICAgIG1fc3RvcmFnZS0+c3Rv
cmUodXBkYXRlUmVjb3JkLCB7IH0pOwogCiAgICAgaWYgKG1fc3RhdGlzdGljcykKLSAgICAgICAg
bV9zdGF0aXN0aWNzLT5yZWNvcmRSZXZhbGlkYXRpb25TdWNjZXNzKHdlYlBhZ2VJRCwgZXhpc3Rp
bmdFbnRyeS5rZXkoKSwgb3JpZ2luYWxSZXF1ZXN0KTsKKyAgICAgICAgbV9zdGF0aXN0aWNzLT5y
ZWNvcmRSZXZhbGlkYXRpb25TdWNjZXNzKGZyYW1lSUQuZmlyc3QsIGV4aXN0aW5nRW50cnkua2V5
KCksIG9yaWdpbmFsUmVxdWVzdCk7CisKKyAgICByZXR1cm4gdXBkYXRlRW50cnk7CiB9CiAKIHZv
aWQgQ2FjaGU6OnJlbW92ZShjb25zdCBLZXkmIGtleSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKaW5kZXggZGUxZGE4ZS4uYThhYmMw
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlLmgKQEAgLTg0LDYgKzg0LDggQEAgZW51bSBjbGFzcyBVc2VEZWNpc2lvbiB7CiAgICAg
Tm9EdWVUb0RlY29kZUZhaWx1cmUsCiB9OwogCit1c2luZyBHbG9iYWxGcmFtZUlEID0gc3RkOjpw
YWlyPHVpbnQ2NF90IC8qd2ViUGFnZUlEKi8sIHVpbnQ2NF90IC8qd2ViRnJhbWVJRCovPjsKKwog
Y2xhc3MgQ2FjaGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENhY2hlKTsKICAgICBmcmll
bmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ryb3llZDxDYWNoZT47CkBAIC0xMDAsOSArMTAyLDkgQEAg
cHVibGljOgogICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gISFtX3N0b3JhZ2U7
IH0KIAogICAgIC8vIENvbXBsZXRpb24gaGFuZGxlciBtYXkgZ2V0IGNhbGxlZCBiYWNrIHN5bmNo
cm9ub3VzbHkgb24gZmFpbHVyZS4KLSAgICB2b2lkIHJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIHVpbnQ2NF90IHdlYlBhZ2VJRCwgdWludDY0X3Qgd2ViRnJhbWVJRCwg
c3RkOjpmdW5jdGlvbjx2b2lkIChzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+KT4pOwotICAgIHZvaWQg
c3RvcmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoTWFwcGVkQm9keSYpPik7Ci0gICAgdm9pZCB1cGRhdGUoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiwgdWludDY0X3Qgd2ViUGFnZUlELCBjb25zdCBFbnRyeSYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHZhbGlkYXRpbmdSZXNwb25zZSk7CisgICAg
dm9pZCByZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBHbG9i
YWxGcmFtZUlEJiwgc3RkOjpmdW5jdGlvbjx2b2lkIChzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+KT4p
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gc3RvcmUoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFJlZlB0cjxXZWJD
b3JlOjpTaGFyZWRCdWZmZXI+JiYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoTWFwcGVkQm9keSYpPik7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiB1cGRhdGUoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgR2xvYmFsRnJhbWVJRCYsIGNvbnN0IEVudHJ5JiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYgdmFsaWRhdGluZ1Jlc3BvbnNlKTsKIAogICAgIHZvaWQg
dHJhdmVyc2Uoc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBFbnRyeSopPiYmKTsKICAgICB2b2lk
IHJlbW92ZShjb25zdCBLZXkmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcAppbmRleCBlNzE3NzdiLi44YWJj
ODkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVFbnRyeS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCkBAIC00OSw2ICs0OSwxNiBAQCBFbnRyeTo6RW50cnko
Y29uc3QgS2V5JiBrZXksIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
LCBSZWZQdHI8VwogICAgIEFTU0VSVChtX2tleS50eXBlKCkgPT0gInJlc291cmNlIik7CiB9CiAK
K0VudHJ5OjpFbnRyeShjb25zdCBFbnRyeSYgb3RoZXIpCisgICAgOiBtX2tleShvdGhlci5tX2tl
eSkKKyAgICAsIG1fdGltZVN0YW1wKG90aGVyLm1fdGltZVN0YW1wKQorICAgICwgbV9yZXNwb25z
ZShvdGhlci5tX3Jlc3BvbnNlKQorICAgICwgbV92YXJ5aW5nUmVxdWVzdEhlYWRlcnMob3RoZXIu
bV92YXJ5aW5nUmVxdWVzdEhlYWRlcnMpCisgICAgLCBtX2J1ZmZlcihvdGhlci5tX2J1ZmZlcikK
KyAgICAsIG1fc291cmNlU3RvcmFnZVJlY29yZChvdGhlci5tX3NvdXJjZVN0b3JhZ2VSZWNvcmQp
Cit7Cit9CisKIEVudHJ5OjpFbnRyeShjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3JhZ2VFbnRy
eSkKICAgICA6IG1fa2V5KHN0b3JhZ2VFbnRyeS5rZXkpCiAgICAgLCBtX3RpbWVTdGFtcChzdG9y
YWdlRW50cnkudGltZVN0YW1wKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmgKaW5kZXggOGRlMzkzZi4uYTJjOGExMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRW50cnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVFbnRyeS5oCkBAIC00MywxMCArNDMsMTEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBu
YW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAogY2xhc3MgRW50cnkgewotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEVudHJ5KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRW50cnkoY29uc3QgS2V5JiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYs
IGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiYgdmFyeWluZ1JlcXVlc3RI
ZWFkZXJzKTsKICAgICBleHBsaWNpdCBFbnRyeShjb25zdCBTdG9yYWdlOjpSZWNvcmQmKTsKKyAg
ICBFbnRyeShjb25zdCBFbnRyeSYpOwogCiAgICAgU3RvcmFnZTo6UmVjb3JkIGVuY29kZUFzU3Rv
cmFnZVJlY29yZCgpIGNvbnN0OwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IGRl
Y29kZVN0b3JhZ2VSZWNvcmQoY29uc3QgU3RvcmFnZTo6UmVjb3JkJik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2
ZUxvYWQuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3BlY3VsYXRpdmVMb2FkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5iMWYxN2ZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcApAQCAtMCwwICsxLDE0OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShORVRXT1JL
X0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVT
cGVjdWxhdGl2ZUxvYWQuaCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOZXR3
b3JrQ2FjaGUuaCIKKyNpbmNsdWRlICJOZXR3b3JrTG9hZC5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
U2Vzc2lvbklELmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3Rm
L1J1bkxvb3AuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhY2hl
IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1NwZWN1bGF0aXZlTG9hZDo6U3BlY3Vs
YXRpdmVMb2FkKGNvbnN0IEdsb2JhbEZyYW1lSUQmIGZyYW1lSUQsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+IGNhY2hl
RW50cnlGb3JWYWxpZGF0aW9uLCBSZXZhbGlkYXRpb25Db21wbGV0aW9uSGFuZGxlciYmIGNvbXBs
ZXRpb25IYW5kbGVyKQorICAgIDogbV9mcmFtZUlEKGZyYW1lSUQpCisgICAgLCBtX2NvbXBsZXRp
b25IYW5kbGVyKFdURjo6bW92ZShjb21wbGV0aW9uSGFuZGxlcikpCisgICAgLCBtX29yaWdpbmFs
UmVxdWVzdChyZXF1ZXN0KQorICAgICwgbV9idWZmZXJlZERhdGFGb3JDYWNoZShTaGFyZWRCdWZm
ZXI6OmNyZWF0ZSgpKQorICAgICwgbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbihXVEY6Om1vdmUo
Y2FjaGVFbnRyeUZvclZhbGlkYXRpb24pKQoreworICAgIEFTU0VSVChtX2NhY2hlRW50cnlGb3JW
YWxpZGF0aW9uKTsKKyAgICBBU1NFUlQobV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbi0+bmVlZHNW
YWxpZGF0aW9uKCkpOworCisgICAgTmV0d29ya0xvYWRQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Cisg
ICAgcGFyYW1ldGVycy5zZXNzaW9uSUQgPSBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKTsK
KyAgICBwYXJhbWV0ZXJzLmFsbG93U3RvcmVkQ3JlZGVudGlhbHMgPSBBbGxvd1N0b3JlZENyZWRl
bnRpYWxzOworICAgIHBhcmFtZXRlcnMuY29udGVudFNuaWZmaW5nUG9saWN5ID0gRG9Ob3RTbmlm
ZkNvbnRlbnQ7CisgICAgcGFyYW1ldGVycy5yZXF1ZXN0ID0gbV9vcmlnaW5hbFJlcXVlc3Q7Cisg
ICAgbV9uZXR3b3JrTG9hZCA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya0xvYWQ+KCp0aGlzLCBw
YXJhbWV0ZXJzKTsKK30KKworU3BlY3VsYXRpdmVMb2FkOjp+U3BlY3VsYXRpdmVMb2FkKCkKK3sK
KyAgICBBU1NFUlQoIW1fbmV0d29ya0xvYWQpOworfQorCit2b2lkIFNwZWN1bGF0aXZlTG9hZDo6
d2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCit7CisgICAgdXBkYXRl
UmVkaXJlY3RDaGFpblN0YXR1cyhtX3JlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cywgcmVkaXJlY3RS
ZXNwb25zZSk7Cit9CisKK2F1dG8gU3BlY3VsYXRpdmVMb2FkOjpkaWRSZWNlaXZlUmVzcG9uc2Uo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVjZWl2ZWRSZXNwb25zZSkgLT4gU2hvdWxkQ29udGlu
dWVEaWRSZWNlaXZlUmVzcG9uc2UKK3sKKyAgICBtX3Jlc3BvbnNlID0gcmVjZWl2ZWRSZXNwb25z
ZTsKKworICAgIGlmIChtX3Jlc3BvbnNlLmlzTXVsdGlwYXJ0KCkpCisgICAgICAgIG1fYnVmZmVy
ZWREYXRhRm9yQ2FjaGUgPSBudWxscHRyOworCisgICAgQVNTRVJUKG1fY2FjaGVFbnRyeUZvclZh
bGlkYXRpb24pOworCisgICAgYm9vbCB2YWxpZGF0aW9uU3VjY2VlZGVkID0gbV9yZXNwb25zZS5o
dHRwU3RhdHVzQ29kZSgpID09IDMwNDsgLy8gMzA0IE5vdCBNb2RpZmllZAorICAgIGlmICh2YWxp
ZGF0aW9uU3VjY2VlZGVkKSB7CisgICAgICAgIG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24gPSBO
ZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnVwZGF0ZShtX29yaWdpbmFsUmVxdWVzdCwgbV9mcmFt
ZUlELCAqbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbiwgbV9yZXNwb25zZSk7CisgICAgICAgIGNs
ZWFudXAoKTsKKyAgICAgICAgcmV0dXJuIFNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNl
OjpObzsKKyAgICB9CisKKyAgICBtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uID0gbnVsbHB0cjsK
KworICAgIHJldHVybiBTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZTo6WWVzOworfQor
Cit2b2lkIFNwZWN1bGF0aXZlTG9hZDo6ZGlkUmVjZWl2ZUJ1ZmZlcihSZWZQdHI8U2hhcmVkQnVm
ZmVyPiYmIGJ1ZmZlciwgaW50IHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGgpCit7CisgICAgQVNT
RVJUKCFtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uKTsKKworICAgIGlmIChtX2J1ZmZlcmVkRGF0
YUZvckNhY2hlKSB7CisgICAgICAgIC8vIFByZXZlbnQgbWVtb3J5IGdyb3d0aCBpbiBjYXNlIG9m
IHN0cmVhbWluZyBkYXRhLgorICAgICAgICBjb25zdCBzaXplX3QgbWF4aW11bUNhY2hlQnVmZmVy
U2l6ZSA9IDEwICogMTAyNCAqIDEwMjQ7CisgICAgICAgIGlmIChtX2J1ZmZlcmVkRGF0YUZvckNh
Y2hlLT5zaXplKCkgKyBidWZmZXItPnNpemUoKSA8PSBtYXhpbXVtQ2FjaGVCdWZmZXJTaXplKQor
ICAgICAgICAgICAgbV9idWZmZXJlZERhdGFGb3JDYWNoZS0+YXBwZW5kKGJ1ZmZlci5nZXQoKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUgPSBudWxs
cHRyOworICAgIH0KK30KKwordm9pZCBTcGVjdWxhdGl2ZUxvYWQ6OmRpZEZpbmlzaExvYWRpbmco
ZG91YmxlIGZpbmlzaFRpbWUpCit7CisgICAgQVNTRVJUKCFtX2NhY2hlRW50cnlGb3JWYWxpZGF0
aW9uKTsKKworICAgIGJvb2wgYWxsb3dTdGFsZSA9IG1fb3JpZ2luYWxSZXF1ZXN0LmNhY2hlUG9s
aWN5KCkgPj0gUmV0dXJuQ2FjaGVEYXRhRWxzZUxvYWQ7CisgICAgYm9vbCBoYXNDYWNoZWFibGVS
ZWRpcmVjdCA9IG1fcmVzcG9uc2UuaXNIVFRQKCkgJiYgcmVkaXJlY3RDaGFpbkFsbG93c1JldXNl
KG1fcmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzLCBhbGxvd1N0YWxlID8gUmV1c2VFeHBpcmVkUmVk
aXJlY3Rpb24gOiBEb05vdFJldXNlRXhwaXJlZFJlZGlyZWN0aW9uKTsKKyAgICBpZiAoaGFzQ2Fj
aGVhYmxlUmVkaXJlY3QgJiYgbV9yZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMuc3RhdHVzID09IFJl
ZGlyZWN0Q2hhaW5DYWNoZVN0YXR1czo6Q2FjaGVkUmVkaXJlY3Rpb24pIHsKKyAgICAgICAgLy8g
TWF5YmUgd2Ugc2hvdWxkIGNhY2hlIHRoZSBhY3R1YWwgcmVkaXJlY3RzIGluc3RlYWQgb2YgdGhl
IGVuZCByZXN1bHQ/CisgICAgICAgIGF1dG8gbm93ID0gc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9j
azo6bm93KCk7CisgICAgICAgIGF1dG8gcmVzcG9uc2VFbmRPZlZhbGlkaXR5ID0gbm93ICsgY29t
cHV0ZUZyZXNobmVzc0xpZmV0aW1lRm9ySFRUUEZhbWlseShtX3Jlc3BvbnNlLCBub3cpIC0gY29t
cHV0ZUN1cnJlbnRBZ2UobV9yZXNwb25zZSwgbm93KTsKKyAgICAgICAgaGFzQ2FjaGVhYmxlUmVk
aXJlY3QgPSByZXNwb25zZUVuZE9mVmFsaWRpdHkgPD0gbV9yZWRpcmVjdENoYWluQ2FjaGVTdGF0
dXMuZW5kT2ZWYWxpZGl0eTsKKyAgICB9CisKKyAgICBpZiAobV9idWZmZXJlZERhdGFGb3JDYWNo
ZSAmJiBoYXNDYWNoZWFibGVSZWRpcmVjdCkKKyAgICAgICAgbV9jYWNoZUVudHJ5Rm9yVmFsaWRh
dGlvbiA9IE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuc3RvcmUobV9vcmlnaW5hbFJlcXVlc3Qs
IG1fcmVzcG9uc2UsIFdURjo6bW92ZShtX2J1ZmZlcmVkRGF0YUZvckNhY2hlKSwgW10oTmV0d29y
a0NhY2hlOjpNYXBwZWRCb2R5JiBtYXBwZWRCb2R5KSB7IH0pOworICAgIGVsc2UgaWYgKCFoYXND
YWNoZWFibGVSZWRpcmVjdCkgeworICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3Qga2VlcCBh
IHN0YWxlIGVudHJ5IGluIHRoZSBjYWNoZS4KKyAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0
b24oKS5yZW1vdmUobV9vcmlnaW5hbFJlcXVlc3QpOworICAgIH0KKworICAgIGNsZWFudXAoKTsK
K30KKwordm9pZCBTcGVjdWxhdGl2ZUxvYWQ6OmRpZEZhaWxMb2FkaW5nKGNvbnN0IFJlc291cmNl
RXJyb3ImKQoreworICAgIG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24gPSBudWxscHRyOworCisg
ICAgY2xlYW51cCgpOworfQorCit2b2lkIFNwZWN1bGF0aXZlTG9hZDo6Y2xlYW51cCgpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9uZXR3b3JrTG9h
ZCA9IG51bGxwdHI7CisKKyAgICBtX2NvbXBsZXRpb25IYW5kbGVyKFdURjo6bW92ZShtX2NhY2hl
RW50cnlGb3JWYWxpZGF0aW9uKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNIRV9T
UEVDVUxBVElWRV9SRVZBTElEQVRJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuaCBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMzVhNDkzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
U3BlY3VsYXRpdmVMb2FkLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
TmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkX2gKKyNkZWZpbmUgTmV0d29ya0NhY2hlU3BlY3Vs
YXRpdmVMb2FkX2gKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFM
SURBVElPTikKKworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZS5oIgorI2luY2x1ZGUgIk5ldHdvcmtD
YWNoZUVudHJ5LmgiCisjaW5jbHVkZSAiTmV0d29ya0xvYWRDbGllbnQuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNw
b25zZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBOZXR3b3JrTG9hZDsKKworbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7
CisKK2NsYXNzIFNwZWN1bGF0aXZlTG9hZCBmaW5hbCA6IHB1YmxpYyBOZXR3b3JrTG9hZENsaWVu
dCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5Pik+
IFJldmFsaWRhdGlvbkNvbXBsZXRpb25IYW5kbGVyOworICAgIFNwZWN1bGF0aXZlTG9hZChjb25z
dCBHbG9iYWxGcmFtZUlEJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwgc3RkOjp1
bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+LCBSZXZhbGlkYXRpb25Db21wbGV0aW9uSGFu
ZGxlciYmKTsKKworICAgIHZpcnR1YWwgflNwZWN1bGF0aXZlTG9hZCgpOworCitwcml2YXRlOgor
ICAgIC8vIE5ldHdvcmtMb2FkQ2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1
bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRl
c1RvQmVTZW50KSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2FuQXV0aGVudGljYXRl
QWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKGNvbnN0IFdlYkNvcmU6OlByb3RlY3Rpb25TcGFj
ZSYpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1N5bmNocm9ub3VzKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZWRp
cmVjdGVkUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIFNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIGRpZFJlY2VpdmVSZXNwb25z
ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVCdWZmZXIoUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiwg
aW50IHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRGaW5pc2hMb2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1lKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkRmFpbExvYWRpbmcoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpIG92
ZXJyaWRlOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FjaGVS
ZXNwb25zZUFzeW5jKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpIG92ZXJyaWRlIHsgfQorI2VuZGlm
CisKKyAgICB2b2lkIGNsZWFudXAoKTsKKworICAgIEdsb2JhbEZyYW1lSUQgbV9mcmFtZUlEOwor
ICAgIFJldmFsaWRhdGlvbkNvbXBsZXRpb25IYW5kbGVyIG1fY29tcGxldGlvbkhhbmRsZXI7Cisg
ICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fb3JpZ2luYWxSZXF1ZXN0OworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtMb2FkPiBtX25ldHdvcmtMb2FkOworCisgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOworCisgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcj4gbV9idWZmZXJlZERhdGFGb3JDYWNoZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0
d29ya0NhY2hlOjpFbnRyeT4gbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbjsKKworICAgIFdlYkNv
cmU6OlJlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cyBtX3JlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1czsK
K307CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJ
T04pCisKKyNlbmRpZiAvLyBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3Vs
YXRpdmVMb2FkTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmNwcAppbmRleCA3ZGI4OWY3Li43
YWQ5N2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2Vy
LmNwcApAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVNwZWN1bGF0aXZl
TG9hZE1hbmFnZXIuaCIKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOZXR3b3Jr
Q2FjaGVFbnRyeS5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5oIgog
I2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmgiCiAjaW5jbHVkZSA8V2Vi
Q29yZS9IeXN0ZXJlc2lzQWN0aXZpdHkuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KQEAgLTQwLDYgKzQyLDggQEAgbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCitzdGF0aWMgY29uc3QgYXV0byBwcmVsb2FkZWRFbnRyeUxpZmV0
aW1lID0gMTBfczsKKwogc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3VicmVzb3VyY2VzVHlw
ZSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTUyLDEyICs1Niw2NSBA
QCBzdGF0aWMgaW5saW5lIEtleSBtYWtlU3VicmVzb3VyY2VzS2V5KGNvbnN0IEtleSYgcmVzb3Vy
Y2VLZXkpCiAgICAgcmV0dXJuIEtleShyZXNvdXJjZUtleS5wYXJ0aXRpb24oKSwgc3VicmVzb3Vy
Y2VzVHlwZSgpLCByZXNvdXJjZUtleS5yYW5nZSgpLCByZXNvdXJjZUtleS5pZGVudGlmaWVyKCkp
OwogfQogCitzdGF0aWMgaW5saW5lIFJlc291cmNlUmVxdWVzdCBjb25zdHJ1Y3RSZXZhbGlkYXRp
b25SZXF1ZXN0KGNvbnN0IEVudHJ5JiBlbnRyeSkKK3sKKyAgICBSZXNvdXJjZVJlcXVlc3QgcmV2
YWxpZGF0aW9uUmVxdWVzdChlbnRyeS5rZXkoKS5pZGVudGlmaWVyKCkpOworCisgICAgU3RyaW5n
IGVUYWcgPSBlbnRyeS5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6
RVRhZyk7CisgICAgaWYgKCFlVGFnLmlzRW1wdHkoKSkKKyAgICAgICAgcmV2YWxpZGF0aW9uUmVx
dWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OklmTm9uZU1hdGNoLCBlVGFn
KTsKKworICAgIFN0cmluZyBsYXN0TW9kaWZpZWQgPSBlbnRyeS5yZXNwb25zZSgpLmh0dHBIZWFk
ZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6TGFzdE1vZGlmaWVkKTsKKyAgICBpZiAoIWxhc3RNb2Rp
ZmllZC5pc0VtcHR5KCkpCisgICAgICAgIHJldmFsaWRhdGlvblJlcXVlc3Quc2V0SFRUUEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpJZk1vZGlmaWVkU2luY2UsIGxhc3RNb2RpZmllZCk7CisK
KyAgICByZXR1cm4gcmV2YWxpZGF0aW9uUmVxdWVzdDsKK30KKworc3RhdGljIGJvb2wgcmVzcG9u
c2VOZWVkc1JldmFsaWRhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgc3Rk
OjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCB0aW1lc3RhbXApCit7CisgICAgaWYg
KHJlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSgpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGF1dG8gYWdlID0gY29tcHV0ZUN1cnJlbnRBZ2UocmVzcG9uc2UsIHRpbWVz
dGFtcCk7CisgICAgYXV0byBsaWZldGltZSA9IGNvbXB1dGVGcmVzaG5lc3NMaWZldGltZUZvckhU
VFBGYW1pbHkocmVzcG9uc2UsIHRpbWVzdGFtcCk7CisgICAgcmV0dXJuIGFnZSAtIGxpZmV0aW1l
ID4gMF9tczsKK30KKworY2xhc3MgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6UHJlbG9hZGVkRW50
cnkgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByZWxvYWRl
ZEVudHJ5KHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gZW50cnksIHN0ZDo6ZnVuY3Rpb248dm9pZCgp
PiYmIGxpZmV0aW1lUmVhY2hlZEhhbmRsZXIpCisgICAgICAgIDogbV9lbnRyeShXVEY6Om1vdmUo
ZW50cnkpKQorICAgICAgICAsIG1fbGlmZXRpbWVUaW1lcigqdGhpcywgJlByZWxvYWRlZEVudHJ5
OjpsaWZldGltZVRpbWVyRmlyZWQpCisgICAgICAgICwgbV9saWZldGltZVJlYWNoZWRIYW5kbGVy
KFdURjo6bW92ZShsaWZldGltZVJlYWNoZWRIYW5kbGVyKSkKKyAgICB7CisgICAgICAgIG1fbGlm
ZXRpbWVUaW1lci5zdGFydE9uZVNob3QocHJlbG9hZGVkRW50cnlMaWZldGltZSk7CisgICAgfQor
CisgICAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiB0YWtlQ2FjaGVFbnRyeSgpCisgICAgeworICAg
ICAgICBBU1NFUlQobV9lbnRyeSk7CisgICAgICAgIHJldHVybiBXVEY6Om1vdmUobV9lbnRyeSk7
CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgbGlmZXRpbWVUaW1lckZpcmVkKCkKKyAgICB7
CisgICAgICAgIG1fbGlmZXRpbWVSZWFjaGVkSGFuZGxlcigpOworICAgIH0KKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxFbnRyeT4gbV9lbnRyeTsKKyAgICBUaW1lciBtX2xpZmV0aW1lVGltZXI7Cisg
ICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IG1fbGlmZXRpbWVSZWFjaGVkSGFuZGxlcjsKK307CisK
IGNsYXNzIFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI6OlBlbmRpbmdGcmFtZUxvYWQgewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFBlbmRpbmdGcmFtZUxvYWQoY29u
c3QgS2V5JiBtYWluUmVzb3VyY2VLZXksIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9u
SGFuZGxlcikKKyAgICBQZW5kaW5nRnJhbWVMb2FkKGNvbnN0IEtleSYgbWFpblJlc291cmNlS2V5
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgOiBt
X21haW5SZXNvdXJjZUtleShtYWluUmVzb3VyY2VLZXkpCi0gICAgICAgICwgbV9jb21wbGV0aW9u
SGFuZGxlcihjb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgLCBtX2NvbXBsZXRpb25IYW5kbGVy
KFdURjo6bW92ZShjb21wbGV0aW9uSGFuZGxlcikpCiAgICAgICAgICwgbV9sb2FkSHlzdGVyZXNp
c0FjdGl2aXR5KFt0aGlzXShIeXN0ZXJlc2lzU3RhdGUgc3RhdGUpIHsgaWYgKHN0YXRlID09IEh5
c3RlcmVzaXNTdGF0ZTo6U3RvcHBlZCkgbV9jb21wbGV0aW9uSGFuZGxlcigpOyB9KQogICAgIHsg
fQogCkBAIC0xMDksMjMgKzE2Niw0NSBAQCBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOjp+U3BlY3Vs
YXRpdmVMb2FkTWFuYWdlcigpCiB7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6
cmVnaXN0ZXJMb2FkKHVpbnQ2NF90IHdlYlBhZ2VJRCwgdWludDY0X3Qgd2ViRnJhbWVJRCwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBLZXkmIHJlc291cmNlS2V5KQorYm9v
bCBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOjpyZXRyaWV2ZShjb25zdCBLZXkmIHN0b3JhZ2VLZXks
IGNvbnN0IFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXImIGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIC8vIENoZWNrIGFscmVhZHkgcHJlbG9hZGVkIGVudHJpZXMuCisgICAgaWYgKGF1dG8gcHJl
bG9hZGVkRW50cnkgPSBtX3ByZWxvYWRlZEVudHJpZXMudGFrZShzdG9yYWdlS2V5KSkgeworICAg
ICAgICBMT0coTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVQcmVsb2FkaW5nLCAiKE5ldHdvcmtQcm9j
ZXNzKSBSZXRyaWV2YWw6IFVzaW5nIHByZWxvYWRlZCBlbnRyeSB0byBzYXRpc2Z5IHJlcXVlc3Qg
Zm9yICclcyc6Iiwgc3RvcmFnZUtleS5pZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHByZWxvYWRlZEVudHJ5LT50YWtlQ2FjaGVFbnRyeSgpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gQ2hlY2sgcGVuZGluZyBzcGVj
dWxhdGl2ZSByZXZhbGlkYXRpb25zLgorICAgIGlmICghbV9wZW5kaW5nUHJlbG9hZHMuY29udGFp
bnMoc3RvcmFnZUtleSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIExPRyhOZXR3b3Jr
Q2FjaGVTcGVjdWxhdGl2ZVByZWxvYWRpbmcsICIoTmV0d29ya1Byb2Nlc3MpIFJldHJpZXZhbDog
cmV2YWxpZGF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MgZm9yICclcyc6Iiwgc3RvcmFnZUtleS5p
ZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBicmVha3Mg
aW5jcmVtZW50YWwgbG9hZGluZyB3aGVuIHRoZSByZXZhbGlkYXRpb24gaXMgbm90IHN1Y2Nlc3Nm
dWwuCisgICAgYXV0byBhZGRSZXN1bHQgPSBtX3BlbmRpbmdSZXRyaWV2ZVJlcXVlc3RzLmFkZChz
dG9yYWdlS2V5LCBudWxscHRyKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAg
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBzdGQ6Om1ha2VfdW5pcXVlPFZlY3RvcjxS
ZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyPj4oKTsKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLT5hcHBlbmQoY29tcGxldGlvbkhhbmRsZXIpOworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI6OnJlZ2lzdGVyTG9hZChjb25zdCBHbG9iYWxGcmFt
ZUlEJiBmcmFtZUlELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEtleSYg
cmVzb3VyY2VLZXkpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIGlm
ICghcmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwgcmVxdWVzdC5odHRw
TWV0aG9kKCkgIT0gIkdFVCIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gZnJhbWVLZXkg
PSBzdGQ6Om1ha2VfcGFpcih3ZWJQYWdlSUQsIHdlYkZyYW1lSUQpOwogICAgIGF1dG8gaXNNYWlu
UmVzb3VyY2UgPSByZXF1ZXN0LnJlcXVlc3RlcigpID09IFJlc291cmNlUmVxdWVzdDo6UmVxdWVz
dGVyOjpNYWluOwogICAgIGlmIChpc01haW5SZXNvdXJjZSkgewogICAgICAgICAvLyBNYXJrIHBy
ZXZpb3VzIGxvYWQgaW4gdGhpcyBmcmFtZSBhcyBjb21wbGV0ZWQgaWYgbmVjZXNzYXJ5LgotICAg
ICAgICBpZiAoYXV0byogcGVuZGluZ0ZyYW1lTG9hZCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZ2V0
KGZyYW1lS2V5KSkKKyAgICAgICAgaWYgKGF1dG8qIHBlbmRpbmdGcmFtZUxvYWQgPSBtX3BlbmRp
bmdGcmFtZUxvYWRzLmdldChmcmFtZUlEKSkKICAgICAgICAgICAgIHBlbmRpbmdGcmFtZUxvYWQt
Pm1hcmtBc0NvbXBsZXRlZCgpOwogCiAgICAgICAgIC8vIFN0YXJ0IHRyYWNraW5nIGxvYWRzIGlu
IHRoaXMgZnJhbWUuCi0gICAgICAgIG1fcGVuZGluZ0ZyYW1lTG9hZHMuYWRkKGZyYW1lS2V5LCBz
dGQ6Om1ha2VfdW5pcXVlPFBlbmRpbmdGcmFtZUxvYWQ+KHJlc291cmNlS2V5LCBbdGhpcywgZnJh
bWVLZXldKCkgewotICAgICAgICAgICAgYXV0byBmcmFtZUxvYWQgPSBtX3BlbmRpbmdGcmFtZUxv
YWRzLnRha2UoZnJhbWVLZXkpOworICAgICAgICBtX3BlbmRpbmdGcmFtZUxvYWRzLmFkZChmcmFt
ZUlELCBzdGQ6Om1ha2VfdW5pcXVlPFBlbmRpbmdGcmFtZUxvYWQ+KHJlc291cmNlS2V5LCBbdGhp
cywgZnJhbWVJRF0oKSB7CisgICAgICAgICAgICBhdXRvIGZyYW1lTG9hZCA9IG1fcGVuZGluZ0Zy
YW1lTG9hZHMudGFrZShmcmFtZUlEKTsKICAgICAgICAgICAgIGF1dG8gb3B0aW9uYWxSZWNvcmQg
PSBmcmFtZUxvYWQtPmVuY29kZUFzU3VicmVzb3VyY2VzUmVjb3JkKCk7CiAgICAgICAgICAgICBp
ZiAoIW9wdGlvbmFsUmVjb3JkKQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTEzNCwxMCAr
MjEzLDEyMSBAQCB2b2lkIFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI6OnJlZ2lzdGVyTG9hZCh1aW50
NjRfdCB3ZWJQYWdlSUQsIHVpbnQ2NF90IHdlYkZyYW1lSQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKGF1dG8qIHBlbmRpbmdGcmFtZUxvYWQgPSBtX3BlbmRpbmdGcmFtZUxvYWRz
LmdldChmcmFtZUtleSkpCisgICAgaWYgKGF1dG8qIHBlbmRpbmdGcmFtZUxvYWQgPSBtX3BlbmRp
bmdGcmFtZUxvYWRzLmdldChmcmFtZUlEKSkKICAgICAgICAgcGVuZGluZ0ZyYW1lTG9hZC0+cmVn
aXN0ZXJTdWJyZXNvdXJjZShyZXNvdXJjZUtleSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVMb2Fk
TWFuYWdlcjo6YWRkUHJlbG9hZGVkRW50cnkoc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBlbnRyeSkK
K3sKKyAgICBBU1NFUlQoZW50cnkpOworICAgIEFTU0VSVCghZW50cnktPm5lZWRzVmFsaWRhdGlv
bigpKTsKKyAgICBhdXRvIGtleSA9IGVudHJ5LT5rZXkoKTsKKyAgICBtX3ByZWxvYWRlZEVudHJp
ZXMuYWRkKGtleSwgc3RkOjptYWtlX3VuaXF1ZTxQcmVsb2FkZWRFbnRyeT4oV1RGOjptb3ZlKGVu
dHJ5KSwgW3RoaXMsIGtleV0oKSB7CisgICAgICAgIG1fcHJlbG9hZGVkRW50cmllcy5yZW1vdmUo
a2V5KTsKKyAgICB9KSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6cmV0cmll
dmVFbnRyeUZyb21TdG9yYWdlKGNvbnN0IEtleSYga2V5LCBjb25zdCBSZXRyaWV2ZUNvbXBsZXRp
b25IYW5kbGVyJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBtX3N0b3JhZ2UucmV0cmlldmUo
a2V5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlIaWdo
KSwgW2NvbXBsZXRpb25IYW5kbGVyXShzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZTo6UmVjb3JkPiBy
ZWNvcmQpIHsKKyAgICAgICAgaWYgKCFyZWNvcmQpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGF1dG8gZW50cnkgPSBFbnRyeTo6ZGVjb2RlU3RvcmFnZVJlY29yZCgqcmVjb3JkKTsK
KyAgICAgICAgaWYgKCFlbnRyeSkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVs
bHB0cik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBh
dXRvJiByZXNwb25zZSA9IGVudHJ5LT5yZXNwb25zZSgpOworICAgICAgICBpZiAoIXJlc3BvbnNl
Lmhhc0NhY2hlVmFsaWRhdG9yRmllbGRzKCkpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAocmVzcG9uc2VOZWVkc1JldmFsaWRhdGlvbihyZXNwb25zZSwgZW50cnktPnRpbWVT
dGFtcCgpKSkKKyAgICAgICAgICAgIGVudHJ5LT5zZXROZWVkc1ZhbGlkYXRpb24oKTsKKworICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEY6Om1vdmUoZW50cnkpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfSk7Cit9CisKK2Jvb2wgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6c2F0aXNm
eVBlbmRpbmdSZXF1ZXN0cyhjb25zdCBLZXkmIGtleSwgRW50cnkqIGVudHJ5KQoreworICAgIGF1
dG8gY29tcGxldGlvbkhhbmRsZXJzID0gbV9wZW5kaW5nUmV0cmlldmVSZXF1ZXN0cy50YWtlKGtl
eSk7CisgICAgaWYgKCFjb21wbGV0aW9uSGFuZGxlcnMpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGZvciAoYXV0byYgY29tcGxldGlvbkhhbmRsZXIgOiAqY29tcGxldGlvbkhhbmRsZXJz
KQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihlbnRyeSA/IHN0ZDo6bWFrZV91bmlxdWU8RW50
cnk+KCplbnRyeSkgOiBudWxscHRyKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNw
ZWN1bGF0aXZlTG9hZE1hbmFnZXI6OnJldmFsaWRhdGVFbnRyeShzdGQ6OnVuaXF1ZV9wdHI8RW50
cnk+IGVudHJ5LCBjb25zdCBHbG9iYWxGcmFtZUlEJiBmcmFtZUlEKQoreworICAgIEFTU0VSVChl
bnRyeSk7CisgICAgQVNTRVJUKGVudHJ5LT5uZWVkc1ZhbGlkYXRpb24oKSk7CisKKyAgICBhdXRv
IGtleSA9IGVudHJ5LT5rZXkoKTsKKyAgICBMT0coTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVQcmVs
b2FkaW5nLCAiKE5ldHdvcmtQcm9jZXNzKSBTcGVjdWxhdGl2ZWx5IHJldmFsaWRhdGluZyAnJXMn
OiIsIGtleS5pZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CisgICAgYXV0byByZXZhbGlkYXRv
ciA9IHN0ZDo6bWFrZV91bmlxdWU8U3BlY3VsYXRpdmVMb2FkPihmcmFtZUlELCBjb25zdHJ1Y3RS
ZXZhbGlkYXRpb25SZXF1ZXN0KCplbnRyeSksIFdURjo6bW92ZShlbnRyeSksIFt0aGlzLCBrZXld
KHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gcmV2YWxpZGF0ZWRFbnRyeSkgeworICAgICAgICBBU1NF
UlQoIXJldmFsaWRhdGVkRW50cnkgfHwgIXJldmFsaWRhdGVkRW50cnktPm5lZWRzVmFsaWRhdGlv
bigpKTsKKyAgICAgICAgYXV0byBwcm90ZWN0UmV2YWxpZGF0b3IgPSBtX3BlbmRpbmdQcmVsb2Fk
cy50YWtlKGtleSk7CisgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZVByZWxvYWRp
bmcsICIoTmV0d29ya1Byb2Nlc3MpIFNwZWN1bGF0aXZlIHJldmFsaWRhdGlvbiBjb21wbGV0ZWQg
Zm9yICclcyc6Iiwga2V5LmlkZW50aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBp
ZiAoc2F0aXNmeVBlbmRpbmdSZXF1ZXN0cyhrZXksIHJldmFsaWRhdGVkRW50cnkuZ2V0KCkpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChyZXZhbGlkYXRlZEVudHJ5KQorICAg
ICAgICAgICAgYWRkUHJlbG9hZGVkRW50cnkoV1RGOjptb3ZlKHJldmFsaWRhdGVkRW50cnkpKTsK
KyAgICB9KTsKKyAgICBtX3BlbmRpbmdQcmVsb2Fkcy5hZGQoa2V5LCBXVEY6Om1vdmUocmV2YWxp
ZGF0b3IpKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOjpwcmVsb2FkRW50cnko
Y29uc3QgS2V5JiBrZXksIGNvbnN0IEdsb2JhbEZyYW1lSUQmIGZyYW1lSUQpCit7CisgICAgbV9w
ZW5kaW5nUHJlbG9hZHMuYWRkKGtleSwgbnVsbHB0cik7CisgICAgcmV0cmlldmVFbnRyeUZyb21T
dG9yYWdlKGtleSwgW3RoaXMsIGtleSwgZnJhbWVJRF0oc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBl
bnRyeSkgeworICAgICAgICBtX3BlbmRpbmdQcmVsb2Fkcy5yZW1vdmUoa2V5KTsKKworICAgICAg
ICBpZiAoc2F0aXNmeVBlbmRpbmdSZXF1ZXN0cyhrZXksIGVudHJ5LmdldCgpKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBpZiAoIWVudHJ5KQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGlmIChlbnRyeS0+bmVlZHNWYWxpZGF0aW9uKCkpCisgICAgICAgICAgICByZXZh
bGlkYXRlRW50cnkoV1RGOjptb3ZlKGVudHJ5KSwgZnJhbWVJRCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGFkZFByZWxvYWRlZEVudHJ5KFdURjo6bW92ZShlbnRyeSkpOworICAgIH0pOwor
fQorCit2b2lkIFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI6OnN0YXJ0U3BlY3VsYXRpdmVSZXZhbGlk
YXRpb24oY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QsIGNvbnN0IEdsb2Jh
bEZyYW1lSUQmIGZyYW1lSUQsIGNvbnN0IEtleSYgc3RvcmFnZUtleSkKK3sKKyAgICBpZiAob3Jp
Z2luYWxSZXF1ZXN0LnJlcXVlc3RlcigpICE9IFJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyOjpN
YWluKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHN1YnJlc291cmNlc1N0b3JhZ2VLZXkg
PSBtYWtlU3VicmVzb3VyY2VzS2V5KHN0b3JhZ2VLZXkpOworCisgICAgbV9zdG9yYWdlLnJldHJp
ZXZlKHN1YnJlc291cmNlc1N0b3JhZ2VLZXksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihSZXNvdXJj
ZUxvYWRQcmlvcml0eTo6TWVkaXVtKSwgW3RoaXMsIGZyYW1lSURdKHN0ZDo6dW5pcXVlX3B0cjxT
dG9yYWdlOjpSZWNvcmQ+IHJlY29yZCkgeworICAgICAgICBpZiAoIXJlY29yZCkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBhdXRvIHN1YnJlc291cmNlc0VudHJ5ID0gU3Vi
cmVzb3VyY2VzRW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQoKnJlY29yZCk7CisgICAgICAgIGlm
ICghc3VicmVzb3VyY2VzRW50cnkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgZm9yIChhdXRvJiBzdWJyZXNvdXJjZUtleSA6IHN1YnJlc291cmNlc0VudHJ5LT5zdWJyZXNv
dXJjZUtleXMoKSkKKyAgICAgICAgICAgIHByZWxvYWRFbnRyeShzdWJyZXNvdXJjZUtleSwgZnJh
bWVJRCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIE5ldHdvcmtDYWNoZQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZl
TG9hZE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuaAppbmRleCAyYmM1OTlhLi4zNjRjNThjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5oCkBAIC0yOCwy
NyArMjgsNDggQEAKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFM
SURBVElPTikKIAorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZS5oIgogI2luY2x1ZGUgIk5ldHdvcmtD
YWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKK2NsYXNzIEVudHJ5Owor
Y2xhc3MgU3BlY3VsYXRpdmVMb2FkOworCiBjbGFzcyBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyIHsK
IHB1YmxpYzoKICAgICBleHBsaWNpdCBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyKFN0b3JhZ2UmKTsK
ICAgICB+U3BlY3VsYXRpdmVMb2FkTWFuYWdlcigpOwogCi0gICAgdm9pZCByZWdpc3RlckxvYWQo
dWludDY0X3Qgd2ViUGFnZUlELCB1aW50NjRfdCB3ZWJGcmFtZUlELCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBLZXkmIHJlc291cmNlS2V5KTsKKyAgICB2b2lkIHJlZ2lz
dGVyTG9hZChjb25zdCBHbG9iYWxGcmFtZUlEJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgS2V5JiByZXNvdXJjZUtleSk7CisKKyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoc3RkOjp1bmlxdWVfcHRyPEVudHJ5Pik+IFJldHJpZXZlQ29tcGxldGlvbkhhbmRs
ZXI7CisgICAgYm9vbCByZXRyaWV2ZShjb25zdCBLZXkmIHN0b3JhZ2VLZXksIGNvbnN0IFJldHJp
ZXZlQ29tcGxldGlvbkhhbmRsZXImKTsKKworICAgIHZvaWQgc3RhcnRTcGVjdWxhdGl2ZVJldmFs
aWRhdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBHbG9iYWxGcmFt
ZUlEJiwgY29uc3QgS2V5JiBzdG9yYWdlS2V5KTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIGFkZFBy
ZWxvYWRlZEVudHJ5KHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4pOworICAgIHZvaWQgcHJlbG9hZEVu
dHJ5KGNvbnN0IEtleSYsIGNvbnN0IEdsb2JhbEZyYW1lSUQmKTsKKyAgICB2b2lkIHJldHJpZXZl
RW50cnlGcm9tU3RvcmFnZShjb25zdCBLZXkmLCBjb25zdCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5k
bGVyJik7CisgICAgdm9pZCByZXZhbGlkYXRlRW50cnkoc3RkOjp1bmlxdWVfcHRyPEVudHJ5Piwg
Y29uc3QgR2xvYmFsRnJhbWVJRCYpOworICAgIGJvb2wgc2F0aXNmeVBlbmRpbmdSZXF1ZXN0cyhj
b25zdCBLZXkmLCBFbnRyeSopOworCiAgICAgU3RvcmFnZSYgbV9zdG9yYWdlOwogCiAgICAgY2xh
c3MgUGVuZGluZ0ZyYW1lTG9hZDsKLSAgICB1c2luZyBHbG9iYWxGcmFtZUlEID0gc3RkOjpwYWly
PHVpbnQ2NF90IC8qd2ViUGFnZUlEKi8sIHVpbnQ2NF90IC8qd2ViRnJhbWVJRCovPjsKICAgICBI
YXNoTWFwPEdsb2JhbEZyYW1lSUQsIHN0ZDo6dW5pcXVlX3B0cjxQZW5kaW5nRnJhbWVMb2FkPj4g
bV9wZW5kaW5nRnJhbWVMb2FkczsKKworICAgIEhhc2hNYXA8S2V5LCBzdGQ6OnVuaXF1ZV9wdHI8
U3BlY3VsYXRpdmVMb2FkPj4gbV9wZW5kaW5nUHJlbG9hZHM7CisgICAgSGFzaE1hcDxLZXksIHN0
ZDo6dW5pcXVlX3B0cjxWZWN0b3I8UmV0cmlldmVDb21wbGV0aW9uSGFuZGxlcj4+PiBtX3BlbmRp
bmdSZXRyaWV2ZVJlcXVlc3RzOworCisgICAgY2xhc3MgUHJlbG9hZGVkRW50cnk7CisgICAgSGFz
aE1hcDxLZXksIHN0ZDo6dW5pcXVlX3B0cjxQcmVsb2FkZWRFbnRyeT4+IG1fcHJlbG9hZGVkRW50
cmllczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQppbmRleCBm
ZDEwODNmLi4zOGM3MGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29j
b2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtMTEwLDcgKzExMCw3IEBAIHN0YXRpYyB2
b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKQogICAgIFtyZWdpc3RyYXRpb25EaWN0
aW9uYXJ5IHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSBmb3JLZXk6V2Vi
S2l0TmV0d29ya0NhY2hlRW5hYmxlZERlZmF1bHRzS2V5XTsKICAgICBbcmVnaXN0cmF0aW9uRGlj
dGlvbmFyeSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSBmb3JLZXk6V2Vi
S2l0TmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5nRW5hYmxlZERlZmF1bHRzS2V5XTsKICNpZiBF
TkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04pCi0gICAgW3JlZ2lz
dHJhdGlvbkRpY3Rpb25hcnkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10g
Zm9yS2V5OldlYktpdE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uRW5hYmxlZERl
ZmF1bHRzS2V5XTsKKyAgICBbcmVnaXN0cmF0aW9uRGljdGlvbmFyeSBzZXRPYmplY3Q6W05TTnVt
YmVyIG51bWJlcldpdGhCb29sOllFU10gZm9yS2V5OldlYktpdE5ldHdvcmtDYWNoZVNwZWN1bGF0
aXZlUmV2YWxpZGF0aW9uRW5hYmxlZERlZmF1bHRzS2V5XTsKICNlbmRpZgogI2VuZGlmCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA1YTlkN2FlLi5kZDU0YTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTgwLDYgKzExODAsOCBAQAogCQk4MzA0OEFFNjFB
Q0E0NURDMDA4MkM4MzIgLyogUHJvY2Vzc1Rocm90dGxlckNsaWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODMwNDhBRTUxQUNBNDVEQzAwODJDODMy
IC8qIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQuaCAqLzsgfTsKIAkJODMxMDQyOEIxQkQ2QjY2RjAw
QTcxNUU0IC8qIE5ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzEwNDI4OTFCRDZCNjZGMDBBNzE1RTQg
LyogTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuaCAqLzsgfTsKIAkJODMxMDQyOEMxQkQ2
QjY2RjAwQTcxNUU0IC8qIE5ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzMTA0MjhBMUJENkI2NkYw
MEE3MTVFNCAvKiBOZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAgKi87IH07CisJCTgz
MUVFQkJEMUJEODVDNDMwMEJCNjRDMyAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzMUVFQkJCMUJE
ODVDNDMwMEJCNjRDMyAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuaCAqLzsgfTsKKwkJ
ODMxRUVCQkUxQkQ4NUM0MzAwQkI2NEMzIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzFFRUJC
QzFCRDg1QzQzMDBCQjY0QzMgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcCAqLzsg
fTsKIAkJODMyQUUyNTIxQkUyRThDRDAwRkFBRTEwIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZl
TG9hZE1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDgzMkFFMjUwMUJFMkU4Q0QwMEZBQUUxMCAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxv
YWRNYW5hZ2VyLmggKi87IH07CiAJCTgzMkFFMjUzMUJFMkU4Q0QwMEZBQUUxMCAvKiBOZXR3b3Jr
Q2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzMkFFMjUxMUJFMkU4Q0QwMEZBQUUxMCAvKiBOZXR3b3Jr
Q2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJODM0QjI1MEYxQTgzMUE4
RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNEIyNTBFMUE4MzFBOEQwMENGQjE1MCAvKiBO
ZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmggKi87IH07CkBAIC0zNDIwLDYgKzM0MjIsOCBAQAogCQk4
MzA0OEFFNTFBQ0E0NURDMDA4MkM4MzIgLyogUHJvY2Vzc1Rocm90dGxlckNsaWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzMTA0Mjg5MUJENkI2NkYwMEE3MTVFNCAvKiBO
ZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBOZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4MzEwNDI4QTFCRDZCNjZGMDBBNzE1RTQgLyogTmV0d29ya0NhY2hlU3Vi
cmVzb3VyY2VzRW50cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk4MzFFRUJCQjFCRDg1QzQzMDBCQjY0QzMgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRp
dmVMb2FkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZVNw
ZWN1bGF0aXZlTG9hZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MzFFRUJCQzFC
RDg1QzQzMDBCQjY0QzMgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9h
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzMkFFMjUwMUJFMkU4Q0QwMEZB
QUUxMCAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODMyQUUyNTExQkUyRThDRDAwRkFBRTEw
IC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNEIyNTBFMUE4MzFBOEQwMENG
QjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTc1ODksNiArNzU5Myw4IEBACiAJCQkJRTQ0MzZFQzExQTBDRkRCMjAwRUFEMjA0
IC8qIE5ldHdvcmtDYWNoZUtleS5oICovLAogCQkJCTgzMkFFMjUxMUJFMkU4Q0QwMEZBQUUxMCAv
KiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmNwcCAqLywKIAkJCQk4MzJBRTI1
MDFCRTJFOENEMDBGQUFFMTAgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5o
ICovLAorCQkJCTgzMUVFQkJDMUJEODVDNDMwMEJCNjRDMyAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxh
dGl2ZUxvYWQuY3BwICovLAorCQkJCTgzMUVFQkJCMUJEODVDNDMwMEJCNjRDMyAvKiBOZXR3b3Jr
Q2FjaGVTcGVjdWxhdGl2ZUxvYWQuaCAqLywKIAkJCQk4M0JEQ0NCODFBQzVGREI2MDAzRjY0NDEg
LyogTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAgKi8sCiAJCQkJODM0QjI1MTAxQTg0MkM4NzAw
Q0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCAqLywKIAkJCQlFNDQzNkVDMzFBMENG
REIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAgKi8sCkBAIC03ODI4LDYgKzc4
MzQsNyBAQAogCQkJCUMwQ0U3MkFEMTI0N0U3OEQwMEJDMEVDNCAvKiBIYW5kbGVNZXNzYWdlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQUM3NUExQjFCMzM2ODI3MDA1Njc0NUIgLyogSGFuZ0RldGVj
dGlvbkRpc2FibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzN0Y5MERFMzEzNzY1NjBFMDA1MUNG
NjggLyogSFRUUENvb2tpZUFjY2VwdFBvbGljeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJODMxRUVC
QkQxQkQ4NUM0MzAwQkI2NEMzIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTE3NTA5NUExODk3MjQ5NzAwNDA4RkFDIC8qIElEQklkZW50aWZpZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxODM1M0RCMTg4NUJGOEMwMEQ5RkU0NCAvKiBJREJTZXJp
YWxpemF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUUzNTFDQjE4MEYyQ0NDMDBFNTNCRTkg
LyogSURCVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKQEAgLTk4ODEsNiArOTg4OCw3IEBACiAJ
CQkJNTE1RTc3MkYxODQwMTU4MDAwMDcyMDNGIC8qIFVuaXF1ZUlEQkRhdGFiYXNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTUxNjU0RUZEMTg0RUYzM0YwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRh
YmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTVFNzczMzE4
NDAyRDUxMDAwNzIwM0YgLyogVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTgzMUVFQkJFMUJEODVDNDMwMEJCNjRDMyAvKiBOZXR3b3JrQ2FjaGVTcGVj
dWxhdGl2ZUxvYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2NDI0NUYxMkRFMjlBMTAwQ0FB
RTJDIC8qIFVwZGF0ZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFDMTMzNjcxODU2NUI1
NzAwRjNFQzA1IC8qIFVzZXJEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE1NzM5QkJDMUI0
MjA0MDMwMEQyNThDMSAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265301</attachid>
            <date>2015-11-11 10:23:16 -0800</date>
            <delta_ts>2015-11-11 15:01:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150856-20151111102311.patch</filename>
            <type>text/plain</type>
            <size>44850</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyMjU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjFhMzk5MWQ4YTY4N2Iz
NjlmNDNiZTAyNTM4NjE3ZWM0ZGI3MDYzYS4uMmQ0NGRhM2ZlNWI0Y2ZhOTI2Y2MyYTEwYWZlMWJl
YWQwNjczNzBjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDE1LTExLTExICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0gQWRkIGluaXRpYWwg
c3VwcG9ydCBmb3Igc3BlY3VsYXRpdmUgcmVzb3VyY2UgcmV2YWxpZGF0aW9uIHRvIHRoZSBXZWJL
aXQgZGlzayBjYWNoZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUwODU2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yMzA5MjE5Nj4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgaW5pdGlhbCBzdXBw
b3J0IGZvciBzcGVjdWxhdGl2ZSByZXNvdXJjZSByZXZhbGlkYXRpb24gdG8gdGhlIFdlYktpdAor
ICAgICAgICBkaXNrIGNhY2hlLiBXaGVuIGEgbWFpbiByZXNvdXJjZSBpcyByZXF1ZXN0ZWQgYnkg
V2ViQ29yZSwgd2UgbG9vayB1cCBpdHMKKyAgICAgICAgbGlzdCBvZiBzdWJyZXNvdXJjZXMgaW4g
dGhlIGNhY2hlIGFuZCBzcGVjdWxhdGl2ZWx5IHdhcm0gdGhlbSB1cCBiZWZvcmUKKyAgICAgICAg
V2ViQ29yZSBhc2tzIGZvciB0aGVtLCBpbiBvcmRlciB0byBpbXByb3ZlIHBhZ2UgbG9hZCB0aW1l
LiBJbiB0aGlzCisgICAgICAgIGNvbnRleHQsIHdhcm1pbmcgaXQgdXAgbWVhbnM6CisgICAgICAg
IDEuIElmIHRoZSBjYWNoZWQgcmVzb3VyY2UgaXMgdXNhYmxlIChoYXMgbm90IGV4cGlyZWQpLCBr
ZWVwIGl0IGFyb3VuZAorICAgICAgICAgICBpbiBhIG1lbW9yeSBmb3IgYSBsaW1pdGVkIGFtb3Vu
dCBvZiB0aW1lICgxMCBzZWNvbmRzKS4KKyAgICAgICAgMi4gSWYgdGhlIHJlc291cmNlIGhhcyBl
eHBpcmVkLCBkbyBhIHNwZWN1bGF0aXZlIHJldmFsaWRhdGlvbiBvZiB0aGUKKyAgICAgICAgICAg
cmVzb3VyY2UgYW5kIHRoZW4ga2VlcCBpdCBpbiBtZW1vcnkgZm9yIGEgd2hpbGUgYXMgd2VsbCAo
MTAgc2Vjb25kcykuCisKKyAgICAgICAgVGhlIGZlYXR1cmUgaXMgY3VycmVudGx5IGJlaGluZCBh
IGNvbXBpbGUtdGltZSBmbGFnIHRoYXQgaXMgb25seSBlbmFibGVkCisgICAgICAgIG9uIENPQ09B
LiBBbHNvLCBpdCBpcyBjdXJyZW50bHkgZGlzYWJsZWQgYXQgcnVuLXRpbWUgdW50aWwgaXQgaXMg
bWF0dXJlCisgICAgICAgIGVub3VnaC4KKworICAgICAgICBJbml0aWFsIHJlc3VsdHMgc2hvdyB0
aGF0IHNwZWN1bGF0aXZlIHJldmFsaWRhdGlvbiBnaXZlcyBhIH41JQorICAgICAgICBwcm9ncmVz
c2lvbiBvbiB0aHJvdHRsZWQgd2FybSBQTFQgb24gaVBob25lIDVzLgorCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpD
YWNoZTo6cmV0cmlldmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjpz
dG9yZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OnVwZGF0ZSk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmg6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OkVudHJ5OjpFbnRyeSk6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpTcGVjdWxhdGl2ZUxvYWQ6OlNwZWN1bGF0aXZlTG9hZCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3BlY3VsYXRpdmVMb2FkOjp+U3BlY3VsYXRp
dmVMb2FkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTcGVjdWxhdGl2ZUxvYWQ6
OndpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OlNwZWN1bGF0aXZlTG9hZDo6ZGlkUmVjZWl2ZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6U3BlY3VsYXRpdmVMb2FkOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTcGVjdWxhdGl2ZUxvYWQ6OmRpZEZhaWxMb2FkaW5n
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTcGVjdWxhdGl2ZUxvYWQ6OmRpZENv
bXBsZXRlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVj
dWxhdGl2ZUxvYWQuaDogQWRkZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6Y29uc3RydWN0UmV2YWxpZGF0aW9uUmVxdWVzdCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6cmVzcG9uc2VOZWVkc1JldmFsaWRhdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6UHJlbG9hZGVkRW50
cnk6OlByZWxvYWRlZEVudHJ5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTcGVj
dWxhdGl2ZUxvYWRNYW5hZ2VyOjpQcmVsb2FkZWRFbnRyeTo6dGFrZUNhY2hlRW50cnkpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlNwZWN1bGF0aXZlTG9hZE1hbmFnZXI6OlByZWxv
YWRlZEVudHJ5OjpsaWZldGltZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OlNwZWN1bGF0aXZlTG9hZE1hbmFnZXI6OlBlbmRpbmdGcmFtZUxvYWQ6OlBlbmRpbmdG
cmFtZUxvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlNwZWN1bGF0aXZlTG9h
ZE1hbmFnZXI6OnJldHJpZXZlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTcGVj
dWxhdGl2ZUxvYWRNYW5hZ2VyOjpyZWdpc3RlckxvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OlNwZWN1bGF0aXZlTG9hZE1hbmFnZXI6OmFkZFByZWxvYWRlZEVudHJ5KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOjpyZXRy
aWV2ZUVudHJ5RnJvbVN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlNw
ZWN1bGF0aXZlTG9hZE1hbmFnZXI6OnNhdGlzZnlQZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlNwZWN1bGF0aXZlTG9hZE1hbmFnZXI6OnJldmFsaWRhdGVF
bnRyeSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3BlY3VsYXRpdmVMb2FkTWFu
YWdlcjo6cHJlbG9hZEVudHJ5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTcGVj
dWxhdGl2ZUxvYWRNYW5hZ2VyOjpzdGFydFNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOjpQZW5kaW5n
RnJhbWVMb2FkOjpyZWdpc3RlclN1YnJlc291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOjpQZW5kaW5nRnJhbWVMb2Fk
OjplbmNvZGVBc1N1YnJlc291cmNlc1JlY29yZCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5oOgorICAg
ICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxNS0xMS0xMCAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJdW05ldHdvcmtD
YWNoZV0gUmVuYW1lIFNwZWN1bGF0aXZlTG9hZGVyIHRvIFNwZWN1bGF0aXZlTG9hZE1hbmFnZXIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJj
ZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuY3BwCmluZGV4IDYxZDI1NThjZjNkMjEyZWJlYTdhZjU3MDhiMjg1MGVlZTlhNjIz
YmIuLmE5ZGQzOTcyM2VlMGU3ODFlMDE0MzkzNjA5NDNhZTNiNGViMGExMGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVy
LmNwcApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFy
dCgpCiAgICAgfQogCiAgICAgUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVyKHRo
aXMpOwotICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkucmV0cmlldmUob3JpZ2luYWxSZXF1
ZXN0KCksIG1fcGFyYW1ldGVycy53ZWJQYWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFtZUlELCBb
bG9hZGVyXShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4gZW50cnkpIHsKKyAg
ICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnJldHJpZXZlKG9yaWdpbmFsUmVxdWVzdCgpLCB7
IG1fcGFyYW1ldGVycy53ZWJQYWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFtZUlEIH0sIFtsb2Fk
ZXJdKHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiBlbnRyeSkgewogICAgICAg
ICBpZiAobG9hZGVyLT5oYXNPbmVSZWYoKSkgewogICAgICAgICAgICAgLy8gVGhlIGxvYWRlciBo
YXMgYmVlbiBhYm9ydGVkIGFuZCBpcyBvbmx5IGhlbGQgYWxpdmUgYnkgdGhpcyBsYW1iZGEuCiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0yNDEsNyArMjQxLDcgQEAgYXV0byBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWNl
aXZlZFIKICAgICBpZiAobV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbikgewogICAgICAgICBib29s
IHZhbGlkYXRpb25TdWNjZWVkZWQgPSBtX3Jlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMzA0
OyAvLyAzMDQgTm90IE1vZGlmaWVkCiAgICAgICAgIGlmICh2YWxpZGF0aW9uU3VjY2VlZGVkKSB7
Ci0gICAgICAgICAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnVwZGF0ZShvcmlnaW5hbFJl
cXVlc3QoKSwgbV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCwgKm1fY2FjaGVFbnRyeUZvclZhbGlkYXRp
b24sIG1fcmVzcG9uc2UpOworICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS51
cGRhdGUob3JpZ2luYWxSZXF1ZXN0KCksIHsgbV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCwgbV9wYXJh
bWV0ZXJzLndlYkZyYW1lSUQgfSwgKm1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24sIG1fcmVzcG9u
c2UpOwogICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3Qgd2FzIGNvbmRpdGlvbmFsIHRoZW4g
dGhpcyByZXZhbGlkYXRpb24gd2FzIG5vdCB0cmlnZ2VyZWQgYnkgdGhlIG5ldHdvcmsgY2FjaGUg
YW5kIHdlIHBhc3MgdGhlCiAgICAgICAgICAgICAvLyAzMDQgcmVzcG9uc2UgdG8gV2ViQ29yZS4K
ICAgICAgICAgICAgIGlmIChvcmlnaW5hbFJlcXVlc3QoKS5pc0NvbmRpdGlvbmFsKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUu
Y3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNw
cAppbmRleCA4ZWZmZDQxNTAyMmZlMzc4OTg2NDJhMzI0M2I2YWRmMWQyNGY0ODliLi41NTVjZDU1
MjczMGFiZTkzNzU5NmQ3NDQ4ODdkOTY2MmVjY2JiMjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKQEAgLTM0Myw3ICsz
NDMsNyBAQCBzdGF0aWMgU3RvcmVEZWNpc2lvbiBtYWtlU3RvcmVEZWNpc2lvbihjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUgogICAgIHJldHVybiBTdG9yZURlY2lzaW9u
OjpZZXM7CiB9CiAKLXZvaWQgQ2FjaGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCB1aW50NjRfdCB3ZWJQYWdlSUQsIHVpbnQ2NF90IHdl
YkZyYW1lSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoc3RkOjp1bmlxdWVfcHRyPEVudHJ5Pik+IGNv
bXBsZXRpb25IYW5kbGVyKQordm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QsIGNvbnN0IEdsb2JhbEZyYW1lSUQmIGZyYW1l
SUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoc3RkOjp1bmlxdWVfcHRyPEVudHJ5Pik+IGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIEFTU0VSVChpc0VuYWJsZWQoKSk7CiAgICAgQVNTRVJUKG9yaWdp
bmFsUmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpOwpAQCAtMzUxLDM1ICsz
NTEsNDcgQEAgdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiBvcmlnaW5hbFJlcXVlc3QsIHVpbnQ2NF90IHcKICAgICBMT0coTmV0d29ya0NhY2hlLCAi
KE5ldHdvcmtQcm9jZXNzKSByZXRyaWV2aW5nICVzIHByaW9yaXR5ICVkIiwgb3JpZ2luYWxSZXF1
ZXN0LnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG9yaWdp
bmFsUmVxdWVzdC5wcmlvcml0eSgpKSk7CiAKICAgICBpZiAobV9zdGF0aXN0aWNzKQotICAgICAg
ICBtX3N0YXRpc3RpY3MtPnJlY29yZFJldHJpZXZhbFJlcXVlc3Qod2ViUGFnZUlEKTsKKyAgICAg
ICAgbV9zdGF0aXN0aWNzLT5yZWNvcmRSZXRyaWV2YWxSZXF1ZXN0KGZyYW1lSUQuZmlyc3QpOwog
CiAgICAgS2V5IHN0b3JhZ2VLZXkgPSBtYWtlQ2FjaGVLZXkob3JpZ2luYWxSZXF1ZXN0KTsKIAog
I2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKLSAgICBp
ZiAobV9zcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyKQotICAgICAgICBtX3NwZWN1bGF0aXZlTG9hZE1h
bmFnZXItPnJlZ2lzdGVyTG9hZCh3ZWJQYWdlSUQsIHdlYkZyYW1lSUQsIG9yaWdpbmFsUmVxdWVz
dCwgc3RvcmFnZUtleSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh3ZWJGcmFtZUlEKTsKKyAg
ICBpZiAobV9zcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyKSB7CisgICAgICAgIG1fc3BlY3VsYXRpdmVM
b2FkTWFuYWdlci0+cmVnaXN0ZXJMb2FkKGZyYW1lSUQsIG9yaWdpbmFsUmVxdWVzdCwgc3RvcmFn
ZUtleSk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgb3JpZ2luYWxS
ZXF1ZXN0LCBmcmFtZUlELCBzdG9yYWdlS2V5XSB7CisgICAgICAgICAgICBtX3NwZWN1bGF0aXZl
TG9hZE1hbmFnZXItPnN0YXJ0U3BlY3VsYXRpdmVSZXZhbGlkYXRpb24ob3JpZ2luYWxSZXF1ZXN0
LCBmcmFtZUlELCBzdG9yYWdlS2V5KTsKKyAgICAgICAgfSk7CisgICAgfQogI2VuZGlmCiAKICAg
ICBhdXRvIHJldHJpZXZlRGVjaXNpb24gPSBtYWtlUmV0cmlldmVEZWNpc2lvbihvcmlnaW5hbFJl
cXVlc3QpOwogICAgIGlmIChyZXRyaWV2ZURlY2lzaW9uICE9IFJldHJpZXZlRGVjaXNpb246Olll
cykgewogICAgICAgICBpZiAobV9zdGF0aXN0aWNzKQotICAgICAgICAgICAgbV9zdGF0aXN0aWNz
LT5yZWNvcmROb3RVc2luZ0NhY2hlRm9yUmVxdWVzdCh3ZWJQYWdlSUQsIHN0b3JhZ2VLZXksIG9y
aWdpbmFsUmVxdWVzdCwgcmV0cmlldmVEZWNpc2lvbik7CisgICAgICAgICAgICBtX3N0YXRpc3Rp
Y3MtPnJlY29yZE5vdFVzaW5nQ2FjaGVGb3JSZXF1ZXN0KGZyYW1lSUQuZmlyc3QsIHN0b3JhZ2VL
ZXksIG9yaWdpbmFsUmVxdWVzdCwgcmV0cmlldmVEZWNpc2lvbik7CiAKICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyNpZiBFTkFC
TEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04pCisgICAgaWYgKG1fc3Bl
Y3VsYXRpdmVMb2FkTWFuYWdlciAmJiBtX3NwZWN1bGF0aXZlTG9hZE1hbmFnZXItPnJldHJpZXZl
KHN0b3JhZ2VLZXksIFtvcmlnaW5hbFJlcXVlc3QsIGNvbXBsZXRpb25IYW5kbGVyXShzdGQ6OnVu
aXF1ZV9wdHI8RW50cnk+IGVudHJ5KSB7CisgICAgICAgIGlmIChlbnRyeSAmJiB2ZXJpZnlWYXJ5
aW5nUmVxdWVzdEhlYWRlcnMoZW50cnktPnZhcnlpbmdSZXF1ZXN0SGVhZGVycygpLCBvcmlnaW5h
bFJlcXVlc3QpKQorICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjptb3ZlKGVudHJ5
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIp
OworICAgIH0pKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKwogICAgIGF1dG8gc3RhcnRUaW1l
ID0gc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCk7CiAgICAgYXV0byBwcmlvcml0eSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcmlnaW5hbFJlcXVlc3QucHJpb3JpdHkoKSk7CiAKLSAg
ICBtX3N0b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgb3JpZ2lu
YWxSZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciwgc3RhcnRUaW1lLCBzdG9yYWdlS2V5LCB3ZWJQ
YWdlSURdKHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlOjpSZWNvcmQ+IHJlY29yZCkgeworICAgIG1f
c3RvcmFnZS0+cmV0cmlldmUoc3RvcmFnZUtleSwgcHJpb3JpdHksIFt0aGlzLCBvcmlnaW5hbFJl
cXVlc3QsIGNvbXBsZXRpb25IYW5kbGVyLCBzdGFydFRpbWUsIHN0b3JhZ2VLZXksIGZyYW1lSURd
KHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlOjpSZWNvcmQ+IHJlY29yZCkgewogICAgICAgICBpZiAo
IXJlY29yZCkgewogICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vz
cykgbm90IGZvdW5kIGluIHN0b3JhZ2UiKTsKIAogICAgICAgICAgICAgaWYgKG1fc3RhdGlzdGlj
cykKLSAgICAgICAgICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZFJldHJpZXZhbEZhaWx1cmUo
d2ViUGFnZUlELCBzdG9yYWdlS2V5LCBvcmlnaW5hbFJlcXVlc3QpOworICAgICAgICAgICAgICAg
IG1fc3RhdGlzdGljcy0+cmVjb3JkUmV0cmlldmFsRmFpbHVyZShmcmFtZUlELmZpcnN0LCBzdG9y
YWdlS2V5LCBvcmlnaW5hbFJlcXVlc3QpOwogCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQwNywxMiArNDE5LDEy
IEBAIHZvaWQgQ2FjaGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYg
b3JpZ2luYWxSZXF1ZXN0LCB1aW50NjRfdCB3CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdU
Rjo6bW92ZShlbnRyeSkpOwogCiAgICAgICAgIGlmIChtX3N0YXRpc3RpY3MpCi0gICAgICAgICAg
ICBtX3N0YXRpc3RpY3MtPnJlY29yZFJldHJpZXZlZENhY2hlZEVudHJ5KHdlYlBhZ2VJRCwgc3Rv
cmFnZUtleSwgb3JpZ2luYWxSZXF1ZXN0LCB1c2VEZWNpc2lvbik7CisgICAgICAgICAgICBtX3N0
YXRpc3RpY3MtPnJlY29yZFJldHJpZXZlZENhY2hlZEVudHJ5KGZyYW1lSUQuZmlyc3QsIHN0b3Jh
Z2VLZXksIG9yaWdpbmFsUmVxdWVzdCwgdXNlRGVjaXNpb24pOwogICAgICAgICByZXR1cm4gdXNl
RGVjaXNpb24gIT0gVXNlRGVjaXNpb246Ok5vRHVlVG9EZWNvZGVGYWlsdXJlOwogICAgIH0pOwog
fQogCi12b2lkIENhY2hlOjpzdG9yZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9y
aWdpbmFsUmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Us
IFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYgcmVzcG9uc2VEYXRhLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKE1hcHBlZEJvZHkmKT4gY29tcGxldGlvbkhhbmRsZXIpCitzdGQ6OnVuaXF1ZV9w
dHI8RW50cnk+IENhY2hlOjpzdG9yZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9y
aWdpbmFsUmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Us
IFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYgcmVzcG9uc2VEYXRhLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKE1hcHBlZEJvZHkmKT4gY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJU
KGlzRW5hYmxlZCgpKTsKICAgICBBU1NFUlQocmVzcG9uc2VEYXRhKTsKQEAgLTQ0MCwxMiArNDUy
LDEyIEBAIHZvaWQgQ2FjaGU6OnN0b3JlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYg
b3JpZ2luYWxSZXF1ZXN0LCBjb25zdCBXZWJDb3JlCiAgICAgICAgIGlmIChtX3N0YXRpc3RpY3Mp
CiAgICAgICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZE5vdENhY2hpbmdSZXNwb25zZShrZXks
IHN0b3JlRGVjaXNpb24pOwogCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCi0gICAgRW50cnkgY2FjaGVFbnRyeShtYWtlQ2FjaGVLZXkob3JpZ2luYWxS
ZXF1ZXN0KSwgcmVzcG9uc2UsIFdURjo6bW92ZShyZXNwb25zZURhdGEpLCBjb2xsZWN0VmFyeWlu
Z1JlcXVlc3RIZWFkZXJzKG9yaWdpbmFsUmVxdWVzdCwgcmVzcG9uc2UpKTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8RW50cnk+IGNhY2hlRW50cnkgPSBzdGQ6Om1ha2VfdW5pcXVlPEVudHJ5PihtYWtl
Q2FjaGVLZXkob3JpZ2luYWxSZXF1ZXN0KSwgcmVzcG9uc2UsIFdURjo6bW92ZShyZXNwb25zZURh
dGEpLCBjb2xsZWN0VmFyeWluZ1JlcXVlc3RIZWFkZXJzKG9yaWdpbmFsUmVxdWVzdCwgcmVzcG9u
c2UpKTsKIAotICAgIGF1dG8gcmVjb3JkID0gY2FjaGVFbnRyeS5lbmNvZGVBc1N0b3JhZ2VSZWNv
cmQoKTsKKyAgICBhdXRvIHJlY29yZCA9IGNhY2hlRW50cnktPmVuY29kZUFzU3RvcmFnZVJlY29y
ZCgpOwogCiAgICAgbV9zdG9yYWdlLT5zdG9yZShyZWNvcmQsIFtjb21wbGV0aW9uSGFuZGxlcl0o
Y29uc3QgRGF0YSYgYm9keURhdGEpIHsKICAgICAgICAgTWFwcGVkQm9keSBtYXBwZWRCb2R5OwpA
QCAtNDU5LDIzICs0NzEsMjcgQEAgdm9pZCBDYWNoZTo6c3RvcmUoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QsIGNvbnN0IFdlYkNvcmUKICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIobWFwcGVkQm9keSk7CiAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIo
TmV0d29ya1Byb2Nlc3MpIHN0b3JlZCIpOwogICAgIH0pOworCisgICAgcmV0dXJuIGNhY2hlRW50
cnk7CiB9CiAKLXZvaWQgQ2FjaGU6OnVwZGF0ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIG9yaWdpbmFsUmVxdWVzdCwgdWludDY0X3Qgd2ViUGFnZUlELCBjb25zdCBFbnRyeSYgZXhp
c3RpbmdFbnRyeSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgdmFsaWRhdGluZ1Jl
c3BvbnNlKQorc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBDYWNoZTo6dXBkYXRlKGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBjb25zdCBHbG9iYWxGcmFtZUlE
JiBmcmFtZUlELCBjb25zdCBFbnRyeSYgZXhpc3RpbmdFbnRyeSwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYgdmFsaWRhdGluZ1Jlc3BvbnNlKQogewogICAgIExPRyhOZXR3b3JrQ2Fj
aGUsICIoTmV0d29ya1Byb2Nlc3MpIHVwZGF0aW5nICVzIiwgb3JpZ2luYWxSZXF1ZXN0LnVybCgp
LnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CiAKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlIHJlc3BvbnNlID0gZXhpc3RpbmdFbnRyeS5yZXNwb25zZSgpOwogICAgIFdlYkNvcmU6OnVw
ZGF0ZVJlc3BvbnNlSGVhZGVyc0FmdGVyUmV2YWxpZGF0aW9uKHJlc3BvbnNlLCB2YWxpZGF0aW5n
UmVzcG9uc2UpOworICAgIHJlc3BvbnNlLnNldFNvdXJjZShXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlOjpTb3VyY2U6OkRpc2tDYWNoZSk7CiAKLSAgICBFbnRyeSB1cGRhdGVFbnRyeShleGlzdGlu
Z0VudHJ5LmtleSgpLCByZXNwb25zZSwgZXhpc3RpbmdFbnRyeS5idWZmZXIoKSwgY29sbGVjdFZh
cnlpbmdSZXF1ZXN0SGVhZGVycyhvcmlnaW5hbFJlcXVlc3QsIHJlc3BvbnNlKSk7Ci0KLSAgICBh
dXRvIHVwZGF0ZVJlY29yZCA9IHVwZGF0ZUVudHJ5LmVuY29kZUFzU3RvcmFnZVJlY29yZCgpOwor
ICAgIGF1dG8gdXBkYXRlRW50cnkgPSBzdGQ6Om1ha2VfdW5pcXVlPEVudHJ5PihleGlzdGluZ0Vu
dHJ5LmtleSgpLCByZXNwb25zZSwgZXhpc3RpbmdFbnRyeS5idWZmZXIoKSwgY29sbGVjdFZhcnlp
bmdSZXF1ZXN0SGVhZGVycyhvcmlnaW5hbFJlcXVlc3QsIHJlc3BvbnNlKSk7CisgICAgYXV0byB1
cGRhdGVSZWNvcmQgPSB1cGRhdGVFbnRyeS0+ZW5jb2RlQXNTdG9yYWdlUmVjb3JkKCk7CiAKICAg
ICBtX3N0b3JhZ2UtPnN0b3JlKHVwZGF0ZVJlY29yZCwgeyB9KTsKIAogICAgIGlmIChtX3N0YXRp
c3RpY3MpCi0gICAgICAgIG1fc3RhdGlzdGljcy0+cmVjb3JkUmV2YWxpZGF0aW9uU3VjY2Vzcyh3
ZWJQYWdlSUQsIGV4aXN0aW5nRW50cnkua2V5KCksIG9yaWdpbmFsUmVxdWVzdCk7CisgICAgICAg
IG1fc3RhdGlzdGljcy0+cmVjb3JkUmV2YWxpZGF0aW9uU3VjY2VzcyhmcmFtZUlELmZpcnN0LCBl
eGlzdGluZ0VudHJ5LmtleSgpLCBvcmlnaW5hbFJlcXVlc3QpOworCisgICAgcmV0dXJuIHVwZGF0
ZUVudHJ5OwogfQogCiB2b2lkIENhY2hlOjpyZW1vdmUoY29uc3QgS2V5JiBrZXkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaCBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCmluZGV4
IGRlMWRhOGU2OTUxZWIyMDFkOWE0OTY2Y2VjMWVlNGQwYjZlMDE5MjIuLmE4YWJjMDY3NjczOWU3
NDkzMWQ5NjFkZjI0NDRhYTVkYWVmYmY3ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCkBAIC04NCw2ICs4NCw4IEBAIGVudW0g
Y2xhc3MgVXNlRGVjaXNpb24gewogICAgIE5vRHVlVG9EZWNvZGVGYWlsdXJlLAogfTsKIAordXNp
bmcgR2xvYmFsRnJhbWVJRCA9IHN0ZDo6cGFpcjx1aW50NjRfdCAvKndlYlBhZ2VJRCovLCB1aW50
NjRfdCAvKndlYkZyYW1lSUQqLz47CisKIGNsYXNzIENhY2hlIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDYWNoZSk7CiAgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8Q2Fj
aGU+OwpAQCAtMTAwLDkgKzEwMiw5IEBAIHB1YmxpYzoKICAgICBib29sIGlzRW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuICEhbV9zdG9yYWdlOyB9CiAKICAgICAvLyBDb21wbGV0aW9uIGhhbmRsZXIg
bWF5IGdldCBjYWxsZWQgYmFjayBzeW5jaHJvbm91c2x5IG9uIGZhaWx1cmUuCi0gICAgdm9pZCBy
ZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCB1aW50NjRfdCB3ZWJQYWdl
SUQsIHVpbnQ2NF90IHdlYkZyYW1lSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoc3RkOjp1bmlxdWVf
cHRyPEVudHJ5Pik+KTsKLSAgICB2b2lkIHN0b3JlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBSZWZQdHI8V2ViQ29yZTo6
U2hhcmVkQnVmZmVyPiYmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKE1hcHBlZEJvZHkmKT4pOwotICAg
IHZvaWQgdXBkYXRlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIHVpbnQ2NF90IHdl
YlBhZ2VJRCwgY29uc3QgRW50cnkmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiB2
YWxpZGF0aW5nUmVzcG9uc2UpOworICAgIHZvaWQgcmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgR2xvYmFsRnJhbWVJRCYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAo
c3RkOjp1bmlxdWVfcHRyPEVudHJ5Pik+KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IHN0
b3JlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmLCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKE1hcHBlZEJvZHkmKT4pOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gdXBk
YXRlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEdsb2JhbEZyYW1lSUQm
LCBjb25zdCBFbnRyeSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHZhbGlkYXRp
bmdSZXNwb25zZSk7CiAKICAgICB2b2lkIHRyYXZlcnNlKHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29u
c3QgRW50cnkqKT4mJik7CiAgICAgdm9pZCByZW1vdmUoY29uc3QgS2V5Jik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRy
eS5jcHAKaW5kZXggZTcxNzc3YjNkYzYwYmM3ZGYwN2U1MDYwNzU4NTJmNWQzOGU0YjM1OS4uOGFi
Yzg5MzlkYzIxMjlhZDIwMGUyZDU1NzQzMmNlMGI1ZWE0NzUwMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNw
cApAQCAtNDksNiArNDksMTYgQEAgRW50cnk6OkVudHJ5KGNvbnN0IEtleSYga2V5LCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUmVmUHRyPFcKICAgICBBU1NFUlQo
bV9rZXkudHlwZSgpID09ICJyZXNvdXJjZSIpOwogfQogCitFbnRyeTo6RW50cnkoY29uc3QgRW50
cnkmIG90aGVyKQorICAgIDogbV9rZXkob3RoZXIubV9rZXkpCisgICAgLCBtX3RpbWVTdGFtcChv
dGhlci5tX3RpbWVTdGFtcCkKKyAgICAsIG1fcmVzcG9uc2Uob3RoZXIubV9yZXNwb25zZSkKKyAg
ICAsIG1fdmFyeWluZ1JlcXVlc3RIZWFkZXJzKG90aGVyLm1fdmFyeWluZ1JlcXVlc3RIZWFkZXJz
KQorICAgICwgbV9idWZmZXIob3RoZXIubV9idWZmZXIpCisgICAgLCBtX3NvdXJjZVN0b3JhZ2VS
ZWNvcmQob3RoZXIubV9zb3VyY2VTdG9yYWdlUmVjb3JkKQoreworfQorCiBFbnRyeTo6RW50cnko
Y29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlRW50cnkpCiAgICAgOiBtX2tleShzdG9yYWdl
RW50cnkua2V5KQogICAgICwgbV90aW1lU3RhbXAoc3RvcmFnZUVudHJ5LnRpbWVTdGFtcCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZUVudHJ5LmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVFbnRyeS5oCmluZGV4IDhkZTM5M2ZhODg5MzAxNzgzOGUxZmMyYTQxOTI0YTM5NDI3YzRhZGMu
LmEyYzhhMTFhYzk5YWRiMmZmOTEyMDdiY2Y1YTg5YzUxOWVlZTRkYTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmgKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnku
aApAQCAtNDMsMTAgKzQzLDExIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogbmFtZXNwYWNlIE5ldHdv
cmtDYWNoZSB7CiAKIGNsYXNzIEVudHJ5IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFbnRy
eSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIEVudHJ5KGNvbnN0IEtleSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UmLCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmLCBjb25zdCBWZWN0b3I8
c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4mIHZhcnlpbmdSZXF1ZXN0SGVhZGVycyk7CiAgICAg
ZXhwbGljaXQgRW50cnkoY29uc3QgU3RvcmFnZTo6UmVjb3JkJik7CisgICAgRW50cnkoY29uc3Qg
RW50cnkmKTsKIAogICAgIFN0b3JhZ2U6OlJlY29yZCBlbmNvZGVBc1N0b3JhZ2VSZWNvcmQoKSBj
b25zdDsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBkZWNvZGVTdG9yYWdlUmVj
b3JkKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZl
TG9hZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDRmZmViNDQ2YzY3M2MwOTAwNTE5YzljNDM2OGViMzYzZDgw
NTlkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAKQEAgLTAsMCArMSwxNDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNI
RV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04pCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3BlY3Vs
YXRpdmVMb2FkLmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya0Nh
Y2hlLmgiCisjaW5jbHVkZSAiTmV0d29ya0xvYWQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Np
b25JRC5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9SdW5M
b29wLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitTcGVjdWxhdGl2ZUxvYWQ6OlNwZWN1bGF0aXZl
TG9hZChjb25zdCBHbG9iYWxGcmFtZUlEJiBmcmFtZUlELCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiBjYWNoZUVudHJ5
Rm9yVmFsaWRhdGlvbiwgUmV2YWxpZGF0aW9uQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9u
SGFuZGxlcikKKyAgICA6IG1fZnJhbWVJRChmcmFtZUlEKQorICAgICwgbV9jb21wbGV0aW9uSGFu
ZGxlcihXVEY6Om1vdmUoY29tcGxldGlvbkhhbmRsZXIpKQorICAgICwgbV9vcmlnaW5hbFJlcXVl
c3QocmVxdWVzdCkKKyAgICAsIG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUoU2hhcmVkQnVmZmVyOjpj
cmVhdGUoKSkKKyAgICAsIG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24oV1RGOjptb3ZlKGNhY2hl
RW50cnlGb3JWYWxpZGF0aW9uKSkKK3sKKyAgICBBU1NFUlQobV9jYWNoZUVudHJ5Rm9yVmFsaWRh
dGlvbik7CisgICAgQVNTRVJUKG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24tPm5lZWRzVmFsaWRh
dGlvbigpKTsKKworICAgIE5ldHdvcmtMb2FkUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIHBh
cmFtZXRlcnMuc2Vzc2lvbklEID0gU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCk7CisgICAg
cGFyYW1ldGVycy5hbGxvd1N0b3JlZENyZWRlbnRpYWxzID0gQWxsb3dTdG9yZWRDcmVkZW50aWFs
czsKKyAgICBwYXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSA9IERvTm90U25pZmZDb250
ZW50OworICAgIHBhcmFtZXRlcnMucmVxdWVzdCA9IG1fb3JpZ2luYWxSZXF1ZXN0OworICAgIG1f
bmV0d29ya0xvYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtMb2FkPigqdGhpcywgcGFyYW1l
dGVycyk7Cit9CisKK1NwZWN1bGF0aXZlTG9hZDo6flNwZWN1bGF0aXZlTG9hZCgpCit7CisgICAg
QVNTRVJUKCFtX25ldHdvcmtMb2FkKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUxvYWQ6OndpbGxT
ZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQoreworICAgIHVwZGF0ZVJlZGly
ZWN0Q2hhaW5TdGF0dXMobV9yZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMsIHJlZGlyZWN0UmVzcG9u
c2UpOworfQorCithdXRvIFNwZWN1bGF0aXZlTG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlY2VpdmVkUmVzcG9uc2UpIC0+IFNob3VsZENvbnRpbnVlRGlk
UmVjZWl2ZVJlc3BvbnNlCit7CisgICAgbV9yZXNwb25zZSA9IHJlY2VpdmVkUmVzcG9uc2U7CisK
KyAgICBpZiAobV9yZXNwb25zZS5pc011bHRpcGFydCgpKQorICAgICAgICBtX2J1ZmZlcmVkRGF0
YUZvckNhY2hlID0gbnVsbHB0cjsKKworICAgIEFTU0VSVChtX2NhY2hlRW50cnlGb3JWYWxpZGF0
aW9uKTsKKworICAgIGJvb2wgdmFsaWRhdGlvblN1Y2NlZWRlZCA9IG1fcmVzcG9uc2UuaHR0cFN0
YXR1c0NvZGUoKSA9PSAzMDQ7IC8vIDMwNCBOb3QgTW9kaWZpZWQKKyAgICBpZiAodmFsaWRhdGlv
blN1Y2NlZWRlZCkgeworICAgICAgICBtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uID0gTmV0d29y
a0NhY2hlOjpzaW5nbGV0b24oKS51cGRhdGUobV9vcmlnaW5hbFJlcXVlc3QsIG1fZnJhbWVJRCwg
Km1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24sIG1fcmVzcG9uc2UpOworICAgICAgICBkaWRDb21w
bGV0ZSgpOworICAgICAgICByZXR1cm4gU2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2U6
Ok5vOworICAgIH0KKworICAgIG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24gPSBudWxscHRyOwor
CisgICAgcmV0dXJuIFNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlOjpZZXM7Cit9CisK
K3ZvaWQgU3BlY3VsYXRpdmVMb2FkOjpkaWRSZWNlaXZlQnVmZmVyKFJlZlB0cjxTaGFyZWRCdWZm
ZXI+JiYgYnVmZmVyLCBpbnQgcmVwb3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCkKK3sKKyAgICBBU1NF
UlQoIW1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24pOworCisgICAgaWYgKG1fYnVmZmVyZWREYXRh
Rm9yQ2FjaGUpIHsKKyAgICAgICAgLy8gUHJldmVudCBtZW1vcnkgZ3Jvd3RoIGluIGNhc2Ugb2Yg
c3RyZWFtaW5nIGRhdGEuCisgICAgICAgIGNvbnN0IHNpemVfdCBtYXhpbXVtQ2FjaGVCdWZmZXJT
aXplID0gMTAgKiAxMDI0ICogMTAyNDsKKyAgICAgICAgaWYgKG1fYnVmZmVyZWREYXRhRm9yQ2Fj
aGUtPnNpemUoKSArIGJ1ZmZlci0+c2l6ZSgpIDw9IG1heGltdW1DYWNoZUJ1ZmZlclNpemUpCisg
ICAgICAgICAgICBtX2J1ZmZlcmVkRGF0YUZvckNhY2hlLT5hcHBlbmQoYnVmZmVyLmdldCgpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9idWZmZXJlZERhdGFGb3JDYWNoZSA9IG51bGxw
dHI7CisgICAgfQorfQorCit2b2lkIFNwZWN1bGF0aXZlTG9hZDo6ZGlkRmluaXNoTG9hZGluZyhk
b3VibGUgZmluaXNoVGltZSkKK3sKKyAgICBBU1NFUlQoIW1fY2FjaGVFbnRyeUZvclZhbGlkYXRp
b24pOworCisgICAgYm9vbCBhbGxvd1N0YWxlID0gbV9vcmlnaW5hbFJlcXVlc3QuY2FjaGVQb2xp
Y3koKSA+PSBSZXR1cm5DYWNoZURhdGFFbHNlTG9hZDsKKyAgICBib29sIGhhc0NhY2hlYWJsZVJl
ZGlyZWN0ID0gbV9yZXNwb25zZS5pc0hUVFAoKSAmJiByZWRpcmVjdENoYWluQWxsb3dzUmV1c2Uo
bV9yZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMsIGFsbG93U3RhbGUgPyBSZXVzZUV4cGlyZWRSZWRp
cmVjdGlvbiA6IERvTm90UmV1c2VFeHBpcmVkUmVkaXJlY3Rpb24pOworICAgIGlmIChoYXNDYWNo
ZWFibGVSZWRpcmVjdCAmJiBtX3JlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cy5zdGF0dXMgPT0gUmVk
aXJlY3RDaGFpbkNhY2hlU3RhdHVzOjpDYWNoZWRSZWRpcmVjdGlvbikgeworICAgICAgICAvLyBN
YXliZSB3ZSBzaG91bGQgY2FjaGUgdGhlIGFjdHVhbCByZWRpcmVjdHMgaW5zdGVhZCBvZiB0aGUg
ZW5kIHJlc3VsdD8KKyAgICAgICAgYXV0byBub3cgPSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2Nr
Ojpub3coKTsKKyAgICAgICAgYXV0byByZXNwb25zZUVuZE9mVmFsaWRpdHkgPSBub3cgKyBjb21w
dXRlRnJlc2huZXNzTGlmZXRpbWVGb3JIVFRQRmFtaWx5KG1fcmVzcG9uc2UsIG5vdykgLSBjb21w
dXRlQ3VycmVudEFnZShtX3Jlc3BvbnNlLCBub3cpOworICAgICAgICBoYXNDYWNoZWFibGVSZWRp
cmVjdCA9IHJlc3BvbnNlRW5kT2ZWYWxpZGl0eSA8PSBtX3JlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1
cy5lbmRPZlZhbGlkaXR5OworICAgIH0KKworICAgIGlmIChtX2J1ZmZlcmVkRGF0YUZvckNhY2hl
ICYmIGhhc0NhY2hlYWJsZVJlZGlyZWN0KQorICAgICAgICBtX2NhY2hlRW50cnlGb3JWYWxpZGF0
aW9uID0gTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yZShtX29yaWdpbmFsUmVxdWVzdCwg
bV9yZXNwb25zZSwgV1RGOjptb3ZlKG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUpLCBbXShOZXR3b3Jr
Q2FjaGU6Ok1hcHBlZEJvZHkmIG1hcHBlZEJvZHkpIHsgfSk7CisgICAgZWxzZSBpZiAoIWhhc0Nh
Y2hlYWJsZVJlZGlyZWN0KSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBrZWVwIGEg
c3RhbGUgZW50cnkgaW4gdGhlIGNhY2hlLgorICAgICAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRv
bigpLnJlbW92ZShtX29yaWdpbmFsUmVxdWVzdCk7CisgICAgfQorCisgICAgZGlkQ29tcGxldGUo
KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUxvYWQ6OmRpZEZhaWxMb2FkaW5nKGNvbnN0IFJlc291
cmNlRXJyb3ImKQoreworICAgIG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24gPSBudWxscHRyOwor
CisgICAgZGlkQ29tcGxldGUoKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUxvYWQ6OmRpZENvbXBs
ZXRlKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBt
X25ldHdvcmtMb2FkID0gbnVsbHB0cjsKKworICAgIG1fY29tcGxldGlvbkhhbmRsZXIoV1RGOjpt
b3ZlKG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24pKTsKK30KKworfSAvLyBuYW1lc3BhY2UgTmV0
d29ya0NhY2hlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRX
T1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5o
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3Vs
YXRpdmVMb2FkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjNiZWI1ZDY3MzBiMjBjN2NiZDUxNWVjZWIxMjk1ZWI2
ODlkMTgxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5oCkBAIC0wLDAgKzEsODcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZF9oCisjZGVmaW5l
IE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZF9oCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNI
RV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04pCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGUuaCIK
KyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVFbnRyeS5oIgorI2luY2x1ZGUgIk5ldHdvcmtMb2FkQ2xp
ZW50LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZl
ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29ya0xvYWQ7CisKK25hbWVz
cGFjZSBOZXR3b3JrQ2FjaGUgeworCitjbGFzcyBTcGVjdWxhdGl2ZUxvYWQgZmluYWwgOiBwdWJs
aWMgTmV0d29ya0xvYWRDbGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkIChzdGQ6OnVuaXF1ZV9wdHI8TmV0
d29ya0NhY2hlOjpFbnRyeT4pPiBSZXZhbGlkYXRpb25Db21wbGV0aW9uSGFuZGxlcjsKKyAgICBT
cGVjdWxhdGl2ZUxvYWQoY29uc3QgR2xvYmFsRnJhbWVJRCYsIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiwgUmV2YWxp
ZGF0aW9uQ29tcGxldGlvbkhhbmRsZXImJik7CisKKyAgICB2aXJ0dWFsIH5TcGVjdWxhdGl2ZUxv
YWQoKTsKKworcHJpdmF0ZToKKyAgICAvLyBOZXR3b3JrTG9hZENsaWVudC4KKyAgICB2aXJ0dWFs
IHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQg
bG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2
b2lkIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3luYyhjb25zdCBXZWJD
b3JlOjpQcm90ZWN0aW9uU3BhY2UmKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNT
eW5jaHJvbm91cygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCB2b2lkIHdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25z
ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25z
ZSBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQnVmZmVyKFJlZlB0cjxXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI+JiYsIGludCByZXBvcnRlZEVuY29kZWREYXRhTGVuZ3RoKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhkb3VibGUgZmluaXNoVGltZSkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxMb2FkaW5nKGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICB2aXJ0
dWFsIHZvaWQgd2lsbENhY2hlUmVzcG9uc2VBc3luYyhDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKSBv
dmVycmlkZSB7IH0KKyNlbmRpZgorCisgICAgdm9pZCBkaWRDb21wbGV0ZSgpOworCisgICAgR2xv
YmFsRnJhbWVJRCBtX2ZyYW1lSUQ7CisgICAgUmV2YWxpZGF0aW9uQ29tcGxldGlvbkhhbmRsZXIg
bV9jb21wbGV0aW9uSGFuZGxlcjsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9vcmln
aW5hbFJlcXVlc3Q7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0xvYWQ+IG1fbmV0d29y
a0xvYWQ7CisKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CisKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBtX2J1ZmZlcmVkRGF0YUZvckNhY2hlOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiBtX2NhY2hlRW50cnlGb3JW
YWxpZGF0aW9uOworCisgICAgV2ViQ29yZTo6UmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzIG1fcmVk
aXJlY3RDaGFpbkNhY2hlU3RhdHVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hl
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBQ0hF
X1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKKworI2VuZGlmIC8vIE5ldHdvcmtDYWNoZVNwZWN1
bGF0aXZlTG9hZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFn
ZXIuY3BwCmluZGV4IDdkYjg5ZjdmOWVhMTk2Njg4NGI5YmNhNjEzMTg2NzY5ZmViYmYxNzkuLjA4
MjI3YTQ0OTk4YmUzMWY4N2U0NDA4ZDdjNGVhZGQ2ODVmNjU2ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9h
ZE1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuY3BwCkBAIC0yOSw2ICsyOSw4IEBACiAj
aW5jbHVkZSAiTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5oIgogCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVudHJ5LmgiCisjaW5jbHVkZSAi
TmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3Vi
cmVzb3VyY2VzRW50cnkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0h5c3RlcmVzaXNBY3Rpdml0eS5o
PgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtNDAsNiArNDIsOCBAQCBuYW1l
c3BhY2UgTmV0d29ya0NhY2hlIHsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK3N0YXRp
YyBjb25zdCBhdXRvIHByZWxvYWRlZEVudHJ5TGlmZXRpbWUgPSAxMF9zOworCiBzdGF0aWMgY29u
c3QgQXRvbWljU3RyaW5nJiBzdWJyZXNvdXJjZXNUeXBlKCkKIHsKICAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwpAQCAtNTIsMTIgKzU2LDY1IEBAIHN0YXRpYyBpbmxpbmUgS2V5IG1ha2VT
dWJyZXNvdXJjZXNLZXkoY29uc3QgS2V5JiByZXNvdXJjZUtleSkKICAgICByZXR1cm4gS2V5KHJl
c291cmNlS2V5LnBhcnRpdGlvbigpLCBzdWJyZXNvdXJjZXNUeXBlKCksIHJlc291cmNlS2V5LnJh
bmdlKCksIHJlc291cmNlS2V5LmlkZW50aWZpZXIoKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgUmVz
b3VyY2VSZXF1ZXN0IGNvbnN0cnVjdFJldmFsaWRhdGlvblJlcXVlc3QoY29uc3QgRW50cnkmIGVu
dHJ5KQoreworICAgIFJlc291cmNlUmVxdWVzdCByZXZhbGlkYXRpb25SZXF1ZXN0KGVudHJ5Lmtl
eSgpLmlkZW50aWZpZXIoKSk7CisKKyAgICBTdHJpbmcgZVRhZyA9IGVudHJ5LnJlc3BvbnNlKCku
aHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpFVGFnKTsKKyAgICBpZiAoIWVUYWcuaXNF
bXB0eSgpKQorICAgICAgICByZXZhbGlkYXRpb25SZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChI
VFRQSGVhZGVyTmFtZTo6SWZOb25lTWF0Y2gsIGVUYWcpOworCisgICAgU3RyaW5nIGxhc3RNb2Rp
ZmllZCA9IGVudHJ5LnJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpM
YXN0TW9kaWZpZWQpOworICAgIGlmICghbGFzdE1vZGlmaWVkLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV2YWxpZGF0aW9uUmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6Oklm
TW9kaWZpZWRTaW5jZSwgbGFzdE1vZGlmaWVkKTsKKworICAgIHJldHVybiByZXZhbGlkYXRpb25S
ZXF1ZXN0OworfQorCitzdGF0aWMgYm9vbCByZXNwb25zZU5lZWRzUmV2YWxpZGF0aW9uKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0
aW1lX3BvaW50IHRpbWVzdGFtcCkKK3sKKyAgICBpZiAocmVzcG9uc2UuY2FjaGVDb250cm9sQ29u
dGFpbnNOb0NhY2hlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgYXV0byBhZ2UgPSBj
b21wdXRlQ3VycmVudEFnZShyZXNwb25zZSwgdGltZXN0YW1wKTsKKyAgICBhdXRvIGxpZmV0aW1l
ID0gY29tcHV0ZUZyZXNobmVzc0xpZmV0aW1lRm9ySFRUUEZhbWlseShyZXNwb25zZSwgdGltZXN0
YW1wKTsKKyAgICByZXR1cm4gYWdlIC0gbGlmZXRpbWUgPiAwX21zOworfQorCitjbGFzcyBTcGVj
dWxhdGl2ZUxvYWRNYW5hZ2VyOjpQcmVsb2FkZWRFbnRyeSB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgUHJlbG9hZGVkRW50cnkoc3RkOjp1bmlxdWVfcHRyPEVu
dHJ5PiBlbnRyeSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiYgbGlmZXRpbWVSZWFjaGVkSGFuZGxl
cikKKyAgICAgICAgOiBtX2VudHJ5KFdURjo6bW92ZShlbnRyeSkpCisgICAgICAgICwgbV9saWZl
dGltZVRpbWVyKCp0aGlzLCAmUHJlbG9hZGVkRW50cnk6OmxpZmV0aW1lVGltZXJGaXJlZCkKKyAg
ICAgICAgLCBtX2xpZmV0aW1lUmVhY2hlZEhhbmRsZXIoV1RGOjptb3ZlKGxpZmV0aW1lUmVhY2hl
ZEhhbmRsZXIpKQorICAgIHsKKyAgICAgICAgbV9saWZldGltZVRpbWVyLnN0YXJ0T25lU2hvdChw
cmVsb2FkZWRFbnRyeUxpZmV0aW1lKTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RW50
cnk+IHRha2VDYWNoZUVudHJ5KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2VudHJ5KTsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bW92ZShtX2VudHJ5KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
dm9pZCBsaWZldGltZVRpbWVyRmlyZWQoKQorICAgIHsKKyAgICAgICAgbV9saWZldGltZVJlYWNo
ZWRIYW5kbGVyKCk7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBtX2VudHJ5
OworICAgIFRpbWVyIG1fbGlmZXRpbWVUaW1lcjsKKyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4g
bV9saWZldGltZVJlYWNoZWRIYW5kbGVyOworfTsKKwogY2xhc3MgU3BlY3VsYXRpdmVMb2FkTWFu
YWdlcjo6UGVuZGluZ0ZyYW1lTG9hZCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgUGVuZGluZ0ZyYW1lTG9hZChjb25zdCBLZXkmIG1haW5SZXNvdXJjZUtleSwg
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25IYW5kbGVyKQorICAgIFBlbmRpbmdGcmFt
ZUxvYWQoY29uc3QgS2V5JiBtYWluUmVzb3VyY2VLZXksIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICA6IG1fbWFpblJlc291cmNlS2V5KG1haW5SZXNv
dXJjZUtleSkKLSAgICAgICAgLCBtX2NvbXBsZXRpb25IYW5kbGVyKGNvbXBsZXRpb25IYW5kbGVy
KQorICAgICAgICAsIG1fY29tcGxldGlvbkhhbmRsZXIoV1RGOjptb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSkKICAgICAgICAgLCBtX2xvYWRIeXN0ZXJlc2lzQWN0aXZpdHkoW3RoaXNdKEh5c3RlcmVz
aXNTdGF0ZSBzdGF0ZSkgeyBpZiAoc3RhdGUgPT0gSHlzdGVyZXNpc1N0YXRlOjpTdG9wcGVkKSBt
X2NvbXBsZXRpb25IYW5kbGVyKCk7IH0pCiAgICAgeyB9CiAKQEAgLTEwOSwyMyArMTY2LDQ1IEBA
IFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI6On5TcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyKCkKIHsKIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOjpyZWdpc3RlckxvYWQodWludDY0X3Qgd2Vi
UGFnZUlELCB1aW50NjRfdCB3ZWJGcmFtZUlELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIGNvbnN0IEtleSYgcmVzb3VyY2VLZXkpCitib29sIFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI6
OnJldHJpZXZlKGNvbnN0IEtleSYgc3RvcmFnZUtleSwgY29uc3QgUmV0cmlldmVDb21wbGV0aW9u
SGFuZGxlciYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgLy8gQ2hlY2sgYWxyZWFkeSBwcmVs
b2FkZWQgZW50cmllcy4KKyAgICBpZiAoYXV0byBwcmVsb2FkZWRFbnRyeSA9IG1fcHJlbG9hZGVk
RW50cmllcy50YWtlKHN0b3JhZ2VLZXkpKSB7CisgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTcGVj
dWxhdGl2ZVByZWxvYWRpbmcsICIoTmV0d29ya1Byb2Nlc3MpIFJldHJpZXZhbDogVXNpbmcgcHJl
bG9hZGVkIGVudHJ5IHRvIHNhdGlzZnkgcmVxdWVzdCBmb3IgJyVzJzoiLCBzdG9yYWdlS2V5Lmlk
ZW50aWZpZXIoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocHJl
bG9hZGVkRW50cnktPnRha2VDYWNoZUVudHJ5KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICAvLyBDaGVjayBwZW5kaW5nIHNwZWN1bGF0aXZlIHJldmFsaWRhdGlvbnMuCisg
ICAgaWYgKCFtX3BlbmRpbmdQcmVsb2Fkcy5jb250YWlucyhzdG9yYWdlS2V5KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgTE9HKE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlUHJlbG9hZGlu
ZywgIihOZXR3b3JrUHJvY2VzcykgUmV0cmlldmFsOiByZXZhbGlkYXRpb24gYWxyZWFkeSBpbiBw
cm9ncmVzcyBmb3IgJyVzJzoiLCBzdG9yYWdlS2V5LmlkZW50aWZpZXIoKS51dGY4KCkuZGF0YSgp
KTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGJyZWFrcyBpbmNyZW1lbnRhbCBsb2FkaW5nIHdoZW4g
dGhlIHJldmFsaWRhdGlvbiBpcyBub3Qgc3VjY2Vzc2Z1bC4KKyAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fcGVuZGluZ1JldHJpZXZlUmVxdWVzdHMuYWRkKHN0b3JhZ2VLZXksIG51bGxwdHIpOworICAg
IGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXI+
PigpOworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmFwcGVuZChjb21wbGV0aW9uSGFu
ZGxlcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVMb2FkTWFuYWdl
cjo6cmVnaXN0ZXJMb2FkKGNvbnN0IEdsb2JhbEZyYW1lSUQmIGZyYW1lSUQsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgS2V5JiByZXNvdXJjZUtleSkKIHsKICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgaWYgKCFyZXF1ZXN0LnVybCgpLnByb3RvY29s
SXNJbkhUVFBGYW1pbHkoKSB8fCByZXF1ZXN0Lmh0dHBNZXRob2QoKSAhPSAiR0VUIikKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byBmcmFtZUtleSA9IHN0ZDo6bWFrZV9wYWlyKHdlYlBhZ2VJ
RCwgd2ViRnJhbWVJRCk7CiAgICAgYXV0byBpc01haW5SZXNvdXJjZSA9IHJlcXVlc3QucmVxdWVz
dGVyKCkgPT0gUmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXI6Ok1haW47CiAgICAgaWYgKGlzTWFp
blJlc291cmNlKSB7CiAgICAgICAgIC8vIE1hcmsgcHJldmlvdXMgbG9hZCBpbiB0aGlzIGZyYW1l
IGFzIGNvbXBsZXRlZCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChhdXRvKiBwZW5kaW5nRnJh
bWVMb2FkID0gbV9wZW5kaW5nRnJhbWVMb2Fkcy5nZXQoZnJhbWVLZXkpKQorICAgICAgICBpZiAo
YXV0byogcGVuZGluZ0ZyYW1lTG9hZCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZ2V0KGZyYW1lSUQp
KQogICAgICAgICAgICAgcGVuZGluZ0ZyYW1lTG9hZC0+bWFya0FzQ29tcGxldGVkKCk7CiAKICAg
ICAgICAgLy8gU3RhcnQgdHJhY2tpbmcgbG9hZHMgaW4gdGhpcyBmcmFtZS4KLSAgICAgICAgbV9w
ZW5kaW5nRnJhbWVMb2Fkcy5hZGQoZnJhbWVLZXksIHN0ZDo6bWFrZV91bmlxdWU8UGVuZGluZ0Zy
YW1lTG9hZD4ocmVzb3VyY2VLZXksIFt0aGlzLCBmcmFtZUtleV0oKSB7Ci0gICAgICAgICAgICBh
dXRvIGZyYW1lTG9hZCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMudGFrZShmcmFtZUtleSk7CisgICAg
ICAgIG1fcGVuZGluZ0ZyYW1lTG9hZHMuYWRkKGZyYW1lSUQsIHN0ZDo6bWFrZV91bmlxdWU8UGVu
ZGluZ0ZyYW1lTG9hZD4ocmVzb3VyY2VLZXksIFt0aGlzLCBmcmFtZUlEXSgpIHsKKyAgICAgICAg
ICAgIGF1dG8gZnJhbWVMb2FkID0gbV9wZW5kaW5nRnJhbWVMb2Fkcy50YWtlKGZyYW1lSUQpOwog
ICAgICAgICAgICAgYXV0byBvcHRpb25hbFJlY29yZCA9IGZyYW1lTG9hZC0+ZW5jb2RlQXNTdWJy
ZXNvdXJjZXNSZWNvcmQoKTsKICAgICAgICAgICAgIGlmICghb3B0aW9uYWxSZWNvcmQpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTM0LDEwICsyMTMsMTIxIEBAIHZvaWQgU3BlY3VsYXRp
dmVMb2FkTWFuYWdlcjo6cmVnaXN0ZXJMb2FkKHVpbnQ2NF90IHdlYlBhZ2VJRCwgdWludDY0X3Qg
d2ViRnJhbWVJCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoYXV0byogcGVuZGlu
Z0ZyYW1lTG9hZCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZ2V0KGZyYW1lS2V5KSkKKyAgICBpZiAo
YXV0byogcGVuZGluZ0ZyYW1lTG9hZCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZ2V0KGZyYW1lSUQp
KQogICAgICAgICBwZW5kaW5nRnJhbWVMb2FkLT5yZWdpc3RlclN1YnJlc291cmNlKHJlc291cmNl
S2V5KTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOjphZGRQcmVsb2FkZWRFbnRy
eShzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IGVudHJ5KQoreworICAgIEFTU0VSVChlbnRyeSk7Cisg
ICAgQVNTRVJUKCFlbnRyeS0+bmVlZHNWYWxpZGF0aW9uKCkpOworICAgIGF1dG8ga2V5ID0gZW50
cnktPmtleSgpOworICAgIG1fcHJlbG9hZGVkRW50cmllcy5hZGQoa2V5LCBzdGQ6Om1ha2VfdW5p
cXVlPFByZWxvYWRlZEVudHJ5PihXVEY6Om1vdmUoZW50cnkpLCBbdGhpcywga2V5XSgpIHsKKyAg
ICAgICAgbV9wcmVsb2FkZWRFbnRyaWVzLnJlbW92ZShrZXkpOworICAgIH0pKTsKK30KKwordm9p
ZCBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOjpyZXRyaWV2ZUVudHJ5RnJvbVN0b3JhZ2UoY29uc3Qg
S2V5JiBrZXksIGNvbnN0IFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXImIGNvbXBsZXRpb25IYW5k
bGVyKQoreworICAgIG1fc3RvcmFnZS5yZXRyaWV2ZShrZXksIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihSZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVkaXVtKSwgW2NvbXBsZXRpb25IYW5kbGVyXShzdGQ6
OnVuaXF1ZV9wdHI8U3RvcmFnZTo6UmVjb3JkPiByZWNvcmQpIHsKKyAgICAgICAgaWYgKCFyZWNv
cmQpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGF1dG8gZW50cnkgPSBFbnRyeTo6
ZGVjb2RlU3RvcmFnZVJlY29yZCgqcmVjb3JkKTsKKyAgICAgICAgaWYgKCFlbnRyeSkgeworICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBhdXRvJiByZXNwb25zZSA9IGVudHJ5LT5yZXNw
b25zZSgpOworICAgICAgICBpZiAoIXJlc3BvbnNlLmhhc0NhY2hlVmFsaWRhdG9yRmllbGRzKCkp
IHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzcG9uc2VOZWVkc1JldmFs
aWRhdGlvbihyZXNwb25zZSwgZW50cnktPnRpbWVTdGFtcCgpKSkKKyAgICAgICAgICAgIGVudHJ5
LT5zZXROZWVkc1ZhbGlkYXRpb24oKTsKKworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEY6
Om1vdmUoZW50cnkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7Cit9CisKK2Jvb2wg
U3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6c2F0aXNmeVBlbmRpbmdSZXF1ZXN0cyhjb25zdCBLZXkm
IGtleSwgRW50cnkqIGVudHJ5KQoreworICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXJzID0gbV9w
ZW5kaW5nUmV0cmlldmVSZXF1ZXN0cy50YWtlKGtleSk7CisgICAgaWYgKCFjb21wbGV0aW9uSGFu
ZGxlcnMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoYXV0byYgY29tcGxldGlv
bkhhbmRsZXIgOiAqY29tcGxldGlvbkhhbmRsZXJzKQorICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihlbnRyeSA/IHN0ZDo6bWFrZV91bmlxdWU8RW50cnk+KCplbnRyeSkgOiBudWxscHRyKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI6OnJldmFs
aWRhdGVFbnRyeShzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IGVudHJ5LCBjb25zdCBHbG9iYWxGcmFt
ZUlEJiBmcmFtZUlEKQoreworICAgIEFTU0VSVChlbnRyeSk7CisgICAgQVNTRVJUKGVudHJ5LT5u
ZWVkc1ZhbGlkYXRpb24oKSk7CisKKyAgICBhdXRvIGtleSA9IGVudHJ5LT5rZXkoKTsKKyAgICBM
T0coTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVQcmVsb2FkaW5nLCAiKE5ldHdvcmtQcm9jZXNzKSBT
cGVjdWxhdGl2ZWx5IHJldmFsaWRhdGluZyAnJXMnOiIsIGtleS5pZGVudGlmaWVyKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgYXV0byByZXZhbGlkYXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8U3BlY3Vs
YXRpdmVMb2FkPihmcmFtZUlELCBjb25zdHJ1Y3RSZXZhbGlkYXRpb25SZXF1ZXN0KCplbnRyeSks
IFdURjo6bW92ZShlbnRyeSksIFt0aGlzLCBrZXldKHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gcmV2
YWxpZGF0ZWRFbnRyeSkgeworICAgICAgICBBU1NFUlQoIXJldmFsaWRhdGVkRW50cnkgfHwgIXJl
dmFsaWRhdGVkRW50cnktPm5lZWRzVmFsaWRhdGlvbigpKTsKKyAgICAgICAgYXV0byBwcm90ZWN0
UmV2YWxpZGF0b3IgPSBtX3BlbmRpbmdQcmVsb2Fkcy50YWtlKGtleSk7CisgICAgICAgIExPRyhO
ZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZVByZWxvYWRpbmcsICIoTmV0d29ya1Byb2Nlc3MpIFNwZWN1
bGF0aXZlIHJldmFsaWRhdGlvbiBjb21wbGV0ZWQgZm9yICclcyc6Iiwga2V5LmlkZW50aWZpZXIo
KS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBpZiAoc2F0aXNmeVBlbmRpbmdSZXF1ZXN0cyhr
ZXksIHJldmFsaWRhdGVkRW50cnkuZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGlmIChyZXZhbGlkYXRlZEVudHJ5KQorICAgICAgICAgICAgYWRkUHJlbG9hZGVkRW50cnko
V1RGOjptb3ZlKHJldmFsaWRhdGVkRW50cnkpKTsKKyAgICB9KTsKKyAgICBtX3BlbmRpbmdQcmVs
b2Fkcy5hZGQoa2V5LCBXVEY6Om1vdmUocmV2YWxpZGF0b3IpKTsKK30KKwordm9pZCBTcGVjdWxh
dGl2ZUxvYWRNYW5hZ2VyOjpwcmVsb2FkRW50cnkoY29uc3QgS2V5JiBrZXksIGNvbnN0IEdsb2Jh
bEZyYW1lSUQmIGZyYW1lSUQpCit7CisgICAgbV9wZW5kaW5nUHJlbG9hZHMuYWRkKGtleSwgbnVs
bHB0cik7CisgICAgcmV0cmlldmVFbnRyeUZyb21TdG9yYWdlKGtleSwgW3RoaXMsIGtleSwgZnJh
bWVJRF0oc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBlbnRyeSkgeworICAgICAgICBtX3BlbmRpbmdQ
cmVsb2Fkcy5yZW1vdmUoa2V5KTsKKworICAgICAgICBpZiAoc2F0aXNmeVBlbmRpbmdSZXF1ZXN0
cyhrZXksIGVudHJ5LmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAo
IWVudHJ5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChlbnRyeS0+bmVlZHNW
YWxpZGF0aW9uKCkpCisgICAgICAgICAgICByZXZhbGlkYXRlRW50cnkoV1RGOjptb3ZlKGVudHJ5
KSwgZnJhbWVJRCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZFByZWxvYWRlZEVudHJ5
KFdURjo6bW92ZShlbnRyeSkpOworICAgIH0pOworfQorCit2b2lkIFNwZWN1bGF0aXZlTG9hZE1h
bmFnZXI6OnN0YXJ0U3BlY3VsYXRpdmVSZXZhbGlkYXRpb24oY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiBvcmlnaW5hbFJlcXVlc3QsIGNvbnN0IEdsb2JhbEZyYW1lSUQmIGZyYW1lSUQsIGNvbnN0IEtl
eSYgc3RvcmFnZUtleSkKK3sKKyAgICBpZiAob3JpZ2luYWxSZXF1ZXN0LnJlcXVlc3RlcigpICE9
IFJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyOjpNYWluKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvIHN1YnJlc291cmNlc1N0b3JhZ2VLZXkgPSBtYWtlU3VicmVzb3VyY2VzS2V5KHN0b3Jh
Z2VLZXkpOworCisgICAgbV9zdG9yYWdlLnJldHJpZXZlKHN1YnJlc291cmNlc1N0b3JhZ2VLZXks
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihSZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVkaXVtKSwgW3Ro
aXMsIGZyYW1lSURdKHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlOjpSZWNvcmQ+IHJlY29yZCkgewor
ICAgICAgICBpZiAoIXJlY29yZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBhdXRvIHN1YnJlc291cmNlc0VudHJ5ID0gU3VicmVzb3VyY2VzRW50cnk6OmRlY29kZVN0b3Jh
Z2VSZWNvcmQoKnJlY29yZCk7CisgICAgICAgIGlmICghc3VicmVzb3VyY2VzRW50cnkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZm9yIChhdXRvJiBzdWJyZXNvdXJjZUtl
eSA6IHN1YnJlc291cmNlc0VudHJ5LT5zdWJyZXNvdXJjZUtleXMoKSkKKyAgICAgICAgICAgIHBy
ZWxvYWRFbnRyeShzdWJyZXNvdXJjZUtleSwgZnJhbWVJRCk7CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFn
ZXIuaAppbmRleCAyYmM1OTlhNDMyYWRjYmExNWVjMGZjZjg4Mjk5NDM0NWE4M2IzOWQ0Li4zNjRj
NThjYjdmMGJlNjZhM2JkODVmYTA5MTZhN2RkYjNiYzc5MmI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRN
YW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5oCkBAIC0yOCwyNyArMjgsNDggQEAKIAogI2lm
IEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKIAorI2luY2x1
ZGUgIk5ldHdvcmtDYWNoZS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0b3JhZ2UuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogbmFt
ZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKK2NsYXNzIEVudHJ5OworY2xhc3MgU3BlY3VsYXRpdmVM
b2FkOworCiBjbGFzcyBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyIHsKIHB1YmxpYzoKICAgICBleHBs
aWNpdCBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyKFN0b3JhZ2UmKTsKICAgICB+U3BlY3VsYXRpdmVM
b2FkTWFuYWdlcigpOwogCi0gICAgdm9pZCByZWdpc3RlckxvYWQodWludDY0X3Qgd2ViUGFnZUlE
LCB1aW50NjRfdCB3ZWJGcmFtZUlELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBj
b25zdCBLZXkmIHJlc291cmNlS2V5KTsKKyAgICB2b2lkIHJlZ2lzdGVyTG9hZChjb25zdCBHbG9i
YWxGcmFtZUlEJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgS2V5JiBy
ZXNvdXJjZUtleSk7CisKKyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZCAoc3RkOjp1bmlx
dWVfcHRyPEVudHJ5Pik+IFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXI7CisgICAgYm9vbCByZXRy
aWV2ZShjb25zdCBLZXkmIHN0b3JhZ2VLZXksIGNvbnN0IFJldHJpZXZlQ29tcGxldGlvbkhhbmRs
ZXImKTsKKworICAgIHZvaWQgc3RhcnRTcGVjdWxhdGl2ZVJldmFsaWRhdGlvbihjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBHbG9iYWxGcmFtZUlEJiwgY29uc3QgS2V5JiBz
dG9yYWdlS2V5KTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIGFkZFByZWxvYWRlZEVudHJ5KHN0ZDo6
dW5pcXVlX3B0cjxFbnRyeT4pOworICAgIHZvaWQgcHJlbG9hZEVudHJ5KGNvbnN0IEtleSYsIGNv
bnN0IEdsb2JhbEZyYW1lSUQmKTsKKyAgICB2b2lkIHJldHJpZXZlRW50cnlGcm9tU3RvcmFnZShj
b25zdCBLZXkmLCBjb25zdCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJik7CisgICAgdm9pZCBy
ZXZhbGlkYXRlRW50cnkoc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiwgY29uc3QgR2xvYmFsRnJhbWVJ
RCYpOworICAgIGJvb2wgc2F0aXNmeVBlbmRpbmdSZXF1ZXN0cyhjb25zdCBLZXkmLCBFbnRyeSop
OworCiAgICAgU3RvcmFnZSYgbV9zdG9yYWdlOwogCiAgICAgY2xhc3MgUGVuZGluZ0ZyYW1lTG9h
ZDsKLSAgICB1c2luZyBHbG9iYWxGcmFtZUlEID0gc3RkOjpwYWlyPHVpbnQ2NF90IC8qd2ViUGFn
ZUlEKi8sIHVpbnQ2NF90IC8qd2ViRnJhbWVJRCovPjsKICAgICBIYXNoTWFwPEdsb2JhbEZyYW1l
SUQsIHN0ZDo6dW5pcXVlX3B0cjxQZW5kaW5nRnJhbWVMb2FkPj4gbV9wZW5kaW5nRnJhbWVMb2Fk
czsKKworICAgIEhhc2hNYXA8S2V5LCBzdGQ6OnVuaXF1ZV9wdHI8U3BlY3VsYXRpdmVMb2FkPj4g
bV9wZW5kaW5nUHJlbG9hZHM7CisgICAgSGFzaE1hcDxLZXksIHN0ZDo6dW5pcXVlX3B0cjxWZWN0
b3I8UmV0cmlldmVDb21wbGV0aW9uSGFuZGxlcj4+PiBtX3BlbmRpbmdSZXRyaWV2ZVJlcXVlc3Rz
OworCisgICAgY2xhc3MgUHJlbG9hZGVkRW50cnk7CisgICAgSGFzaE1hcDxLZXksIHN0ZDo6dW5p
cXVlX3B0cjxQcmVsb2FkZWRFbnRyeT4+IG1fcHJlbG9hZGVkRW50cmllczsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIE5ldHdvcmtDYWNoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDVhOWQ3YWVkODgzZTRiZjlmZmIxYjYwZmEwZGZk
NTBkMTJiNTIyMzAuLmRkNTRhNmNkMDQwMDYyNDNkNDE5ZTA3NDUzZjVlZDdhMTUzMzI3MjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTExODAsNiArMTE4MCw4IEBACiAJCTgzMDQ4QUU2MUFDQTQ1REMwMDgyQzgzMiAvKiBQcm9j
ZXNzVGhyb3R0bGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4MzA0OEFFNTFBQ0E0NURDMDA4MkM4MzIgLyogUHJvY2Vzc1Rocm90dGxlckNs
aWVudC5oICovOyB9OwogCQk4MzEwNDI4QjFCRDZCNjZGMDBBNzE1RTQgLyogTmV0d29ya0NhY2hl
U3VicmVzb3VyY2VzRW50cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDgzMTA0Mjg5MUJENkI2NkYwMEE3MTVFNCAvKiBOZXR3b3JrQ2FjaGVTdWJyZXNv
dXJjZXNFbnRyeS5oICovOyB9OwogCQk4MzEwNDI4QzFCRDZCNjZGMDBBNzE1RTQgLyogTmV0d29y
a0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODMxMDQyOEExQkQ2QjY2RjAwQTcxNUU0IC8qIE5ldHdvcmtDYWNo
ZVN1YnJlc291cmNlc0VudHJ5LmNwcCAqLzsgfTsKKwkJODMxRUVCQkQxQkQ4NUM0MzAwQkI2NEMz
IC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODMxRUVCQkIxQkQ4NUM0MzAwQkI2NEMzIC8qIE5ldHdv
cmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5oICovOyB9OworCQk4MzFFRUJCRTFCRDg1QzQzMDBCQjY0
QzMgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzMUVFQkJDMUJEODVDNDMwMEJCNjRDMyAvKiBO
ZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwICovOyB9OwogCQk4MzJBRTI1MjFCRTJFOENE
MDBGQUFFMTAgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODMyQUUyNTAxQkUyRThDRDAw
RkFBRTEwIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuaCAqLzsgfTsKIAkJ
ODMyQUUyNTMxQkUyRThDRDAwRkFBRTEwIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1h
bmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODMyQUUyNTExQkUyRThDRDAwRkFBRTEwIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1h
bmFnZXIuY3BwICovOyB9OwogCQk4MzRCMjUwRjFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0Nh
Y2hlRmlsZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODM0QjI1MEUxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0u
aCAqLzsgfTsKQEAgLTM0MjAsNiArMzQyMiw4IEBACiAJCTgzMDQ4QUU1MUFDQTQ1REMwMDgyQzgz
MiAvKiBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFByb2Nlc3NUaHJvdHRsZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODMxMDQyODkxQkQ2QjY2RjAwQTcxNUU0IC8qIE5ldHdvcmtDYWNoZVN1YnJlc291cmNl
c0VudHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZVN1
YnJlc291cmNlc0VudHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzMTA0MjhB
MUJENkI2NkYwMEE3MTVFNCAvKiBOZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdWJyZXNvdXJj
ZXNFbnRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzMUVFQkJCMUJEODVD
NDMwMEJCNjRDMyAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzMUVFQkJDMUJEODVDNDMwMEJCNjRDMyAvKiBOZXR3
b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODMyQUUyNTAxQkUyRThDRDAwRkFBRTEwIC8qIE5ldHdvcmtDYWNoZVNw
ZWN1bGF0aXZlTG9hZE1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4MzJBRTI1MTFCRTJFOENEMDBGQUFFMTAgLyogTmV0d29ya0NhY2hlU3BlY3Vs
YXRpdmVMb2FkTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODM0QjI1MEUxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZp
bGVTeXN0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hl
RmlsZVN5c3RlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzU4OSw2ICs3NTkz
LDggQEAKIAkJCQlFNDQzNkVDMTFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5Lmgg
Ki8sCiAJCQkJODMyQUUyNTExQkUyRThDRDAwRkFBRTEwIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0
aXZlTG9hZE1hbmFnZXIuY3BwICovLAogCQkJCTgzMkFFMjUwMUJFMkU4Q0QwMEZBQUUxMCAvKiBO
ZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmggKi8sCisJCQkJODMxRUVCQkMxQkQ4
NUM0MzAwQkI2NEMzIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAgKi8sCisJCQkJ
ODMxRUVCQkIxQkQ4NUM0MzAwQkI2NEMzIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5o
ICovLAogCQkJCTgzQkRDQ0I4MUFDNUZEQjYwMDNGNjQ0MSAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0
aWNzLmNwcCAqLywKIAkJCQk4MzRCMjUxMDFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hl
U3RhdGlzdGljcy5oICovLAogCQkJCUU0NDM2RUMzMUEwQ0ZEQjIwMEVBRDIwNCAvKiBOZXR3b3Jr
Q2FjaGVTdG9yYWdlLmNwcCAqLywKQEAgLTc4MjgsNiArNzgzNCw3IEBACiAJCQkJQzBDRTcyQUQx
MjQ3RTc4RDAwQkMwRUM0IC8qIEhhbmRsZU1lc3NhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
Qzc1QTFCMUIzMzY4MjcwMDU2NzQ1QiAvKiBIYW5nRGV0ZWN0aW9uRGlzYWJsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTM3RjkwREUzMTM3NjU2MEUwMDUxQ0Y2OCAvKiBIVFRQQ29va2llQWNjZXB0
UG9saWN5LmggaW4gSGVhZGVycyAqLywKKwkJCQk4MzFFRUJCRDFCRDg1QzQzMDBCQjY0QzMgLyog
TmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTc1MDk1
QTE4OTcyNDk3MDA0MDhGQUMgLyogSURCSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTE4MzUzREIxODg1QkY4QzAwRDlGRTQ0IC8qIElEQlNlcmlhbGl6YXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxRTM1MUNCMTgwRjJDQ0MwMEU1M0JFOSAvKiBJREJVdGlsaXRpZXMuaCBpbiBI
ZWFkZXJzICovLApAQCAtOTg4MSw2ICs5ODg4LDcgQEAKIAkJCQk1MTVFNzcyRjE4NDAxNTgwMDAw
NzIwM0YgLyogVW5pcXVlSURCRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2NTRF
RkQxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNUU3NzMzMTg0MDJENTEwMDA3MjAzRiAvKiBVbmlx
dWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODMxRUVCQkUx
QkQ4NUM0MzAwQkI2NEMzIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQTY0MjQ1RjEyREUyOUExMDBDQUFFMkMgLyogVXBkYXRlSW5mby5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQUMxMzM2NzE4NTY1QjU3MDBGM0VDMDUgLyogVXNlckRhdGEu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTU3MzlCQkMxQjQyMDQwMzAwRDI1OEMxIC8qIFVzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywK
</data>

          </attachment>
      

    </bug>

</bugzilla>