<?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>125245</bug_id>
          
          <creation_ts>2013-12-04 13:04:19 -0800</creation_ts>
          <short_desc>[MSE] Refactor MediaSourceBase back into MediaSource</short_desc>
          <delta_ts>2013-12-06 16:07:24 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>philn</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>956538</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-12-04 13:04:19 -0800</bug_when>
    <thetext>[MSE] Refactor MediaSourceBase back into MediaSource</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956553</commentid>
    <comment_count>1</comment_count>
      <attachid>218436</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-12-04 13:20:13 -0800</bug_when>
    <thetext>Created attachment 218436
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956555</commentid>
    <comment_count>2</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-12-04 13:22:28 -0800</bug_when>
    <thetext>The style-bot is going to choke on this patch, but it&apos;s literally just moving functions to different files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956557</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-04 13:23:44 -0800</bug_when>
    <thetext>Attachment 218436 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/Modules/mediasource/DOMURLMediaSource.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/DOMURLMediaSource.h&apos;, u&apos;Source/WebCore/Modules/mediasource/MediaSource.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/MediaSource.h&apos;, u&apos;Source/WebCore/Modules/mediasource/MediaSourceBase.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/MediaSourceBase.h&apos;, u&apos;Source/WebCore/Modules/mediasource/MediaSourceRegistry.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/MediaSourceRegistry.h&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/Modules/mediasource/MediaSource.cpp:122:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/Modules/mediasource/MediaSource.cpp:125:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/Modules/mediasource/MediaSource.cpp:171:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/Modules/mediasource/MediaSource.cpp:182:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/Modules/mediasource/MediaSource.cpp:199:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 5 in 8 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>956572</commentid>
    <comment_count>4</comment_count>
      <attachid>218436</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-12-04 13:35:57 -0800</bug_when>
    <thetext>Comment on attachment 218436
Patch

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

&gt; Source/WebCore/Modules/mediasource/MediaSource.cpp:86
&gt; +    DEFINE_STATIC_LOCAL(const AtomicString, open, (&quot;open&quot;, AtomicString::ConstructFromLiteral));

I have seen more NeverDestroyed&lt;&gt; used more often than DEFINE_STATIC_LOCAL() recently. Do you know if there is a reason for using one or the other?

&gt; Source/WebCore/Modules/mediasource/MediaSource.cpp:639
&gt; +    for (unsigned long i = 0; i &lt; m_sourceBuffers-&gt;length(); ++i)

Nit: m_sourceBuffers won&apos;t change length during the loop so you can cache length() in a variable during initialization.

&gt; Source/WebCore/Modules/mediasource/MediaSource.cpp:649
&gt; +    for (size_t i = 0; i &lt; m_activeSourceBuffers-&gt;length(); ++i)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956588</commentid>
    <comment_count>5</comment_count>
      <attachid>218436</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-12-04 13:57:53 -0800</bug_when>
    <thetext>Comment on attachment 218436
Patch

Attachment 218436 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/43348042</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956628</commentid>
    <comment_count>6</comment_count>
      <attachid>218455</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-12-04 14:48:09 -0800</bug_when>
    <thetext>Created attachment 218455
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956638</commentid>
    <comment_count>7</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-12-04 14:55:57 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 218436 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=218436&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/mediasource/MediaSource.cpp:86
&gt; &gt; +    DEFINE_STATIC_LOCAL(const AtomicString, open, (&quot;open&quot;, AtomicString::ConstructFromLiteral));
&gt; 
&gt; I have seen more NeverDestroyed&lt;&gt; used more often than DEFINE_STATIC_LOCAL() recently. Do you know if there is a reason for using one or the other?

I don&apos;t.  But we can change these in a future patch.

&gt; &gt; Source/WebCore/Modules/mediasource/MediaSource.cpp:639
&gt; &gt; +    for (unsigned long i = 0; i &lt; m_sourceBuffers-&gt;length(); ++i)
&gt; 
&gt; Nit: m_sourceBuffers won&apos;t change length during the loop so you can cache length() in a variable during initialization.

Sure.

&gt; &gt; Source/WebCore/Modules/mediasource/MediaSource.cpp:649
&gt; &gt; +    for (size_t i = 0; i &lt; m_activeSourceBuffers-&gt;length(); ++i)
&gt; 
&gt; Ditto.

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956642</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-04 14:56:56 -0800</bug_when>
    <thetext>Attachment 218455 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/Modules/mediasource/DOMURLMediaSource.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/DOMURLMediaSource.h&apos;, u&apos;Source/WebCore/Modules/mediasource/MediaSource.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/MediaSource.h&apos;, u&apos;Source/WebCore/Modules/mediasource/MediaSourceBase.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/MediaSourceBase.h&apos;, u&apos;Source/WebCore/Modules/mediasource/MediaSourceRegistry.cpp&apos;, u&apos;Source/WebCore/Modules/mediasource/MediaSourceRegistry.h&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/Modules/mediasource/MediaSource.cpp:171:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/Modules/mediasource/MediaSource.cpp:182:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/Modules/mediasource/MediaSource.cpp:199:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 3 in 8 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>957423</commentid>
    <comment_count>9</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-12-06 16:07:24 -0800</bug_when>
    <thetext>Committed r160258: &lt;http://trac.webkit.org/changeset/160258&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218436</attachid>
            <date>2013-12-04 13:20:13 -0800</date>
            <delta_ts>2013-12-04 13:57:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125245-20131204132011.patch</filename>
            <type>text/plain</type>
            <size>55101</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwMDk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmNjZjEyOTZlODRlMGEy
ZGI4NTc0MTAzMGEwNjI5Zjc1MzZjMDY0Ni4uZDY5Yzg3ZjU0ZmYwNWNiYjAyMDcyNDE5MGYzNmMx
OTQ1NzVkNGM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEzLTEyLTA0ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFtNU0VdIFJlZmFjdG9yIE1l
ZGlhU291cmNlQmFzZSBiYWNrIGludG8gTWVkaWFTb3VyY2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTI0NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vdyB0aGF0IHRoZSBsZWdhY3kgV2ViS2l0TWVk
aWFTb3VyY2UgaGFzIGJlZW4gcmVtb3ZlZCwgdGhlcmUgaXMgbm8gcmVhc29uIHRvIGhhdmUKKyAg
ICAgICAgYSBzZXBhcmF0ZSBNZWRpYVNvdXJjZSBhbmQgTWVkaWFTb3VyY2VCYXNlLiBSZS1pbnRl
Z3JhdGUgdGhlIHR3by4KKworICAgICAgICBDb3B5IGFsbCB0aGUgbWV0aG9kcyBmcm9tIE1lZGlh
U291cmNlIGludG8gTWVkaWFTb3VyY2VCYXNlLCBhbmQgcmVuYW1lIHRoZSBjbGFzcyBNZWRpYVNv
dXJjZToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcDogQ29w
aWVkIGZyb20gTWVkaWFTb3VyY2VCYXNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291
cmNlOjpjcmVhdGUpOiBDb3BpZWQgZnJvbSBNZWRpYVNvdXJjZS5jcHAuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVNvdXJjZTo6YWRkU291cmNlQnVmZmVyKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVNvdXJjZTo6cmVtb3ZlU291cmNlQnVmZmVyKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVNvdXJjZTo6aXNUeXBlU3VwcG9ydGVkKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVNvdXJjZTo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlOjpzb3VyY2VCdWZmZXJEaWRDaGFuZ2VBY2l0dmVTdGF0
ZSk6IERpdHRvLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaDog
Q29waWVkIGZyb20gTWVkaWFTb3VyY2VCYXNlLmguCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNv
dXJjZTo6c291cmNlQnVmZmVycyk6IENvcGllZCBmcm9tIE1lZGlhU291cmNlLmguCisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVNvdXJjZTo6YWN0aXZlU291cmNlQnVmZmVycyk6IENvcGllZCBmcm9t
IE1lZGlhU291cmNlLmguCisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJj
ZUJhc2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFT
b3VyY2VCYXNlLmg6IFJlbW92ZWQuCisKKyAgICAgICAgQ2hhbmdlIGFsbCByZWZlcmVuY2VzIHRv
IE1lZGlhU291cmNlQmFzZSBpbnRvIE1lZGlhU291cmNlOgorICAgICAgICAqIE1vZHVsZXMvbWVk
aWFzb3VyY2UvRE9NVVJMTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NVVJM
TWVkaWFTb3VyY2U6OmNyZWF0ZU9iamVjdFVSTCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNv
dXJjZS9ET01VUkxNZWRpYVNvdXJjZS5oOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2Uv
TWVkaWFTb3VyY2VSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVJl
Z2lzdHJ5OjpyZWdpc3RlclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVJlZ2lz
dHJ5Ojp1bnJlZ2lzdGVyVVJMKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL01lZGlh
U291cmNlUmVnaXN0cnkuaDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisKIDIwMTMtMTEtMTUgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAK
ICAgICAgICAgW01TRV1bTWFjXSBBZGQgYSBuZXcgTVNFLWNvbXBhdGlibGUgTWVkaWFQbGF5ZXJQ
cml2YXRlIGltcGxlbWVudGF0aW9uLCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvRE9NVVJM
TWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9ET01V
UkxNZWRpYVNvdXJjZS5jcHAKaW5kZXggNzZkOGZiZTA1Y2Q2ZWU3MjAxODJmYTZiYTk5YmM1NDc2
YjIxM2NmZi4uMjA1MTI3NDg0MmY5MmZhODhkMDEwODRiOWZiZmY2MThmODA3ZWQ5NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9ET01VUkxNZWRpYVNvdXJj
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9ET01VUkxNZWRp
YVNvdXJjZS5jcHAKQEAgLTM0LDEyICszNCwxMiBAQAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0Up
CiAKICNpbmNsdWRlICJET01VUkwuaCIKLSNpbmNsdWRlICJNZWRpYVNvdXJjZUJhc2UuaCIKKyNp
bmNsdWRlICJNZWRpYVNvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotU3RyaW5nIERPTVVSTE1lZGlhU291cmNlOjpjcmVhdGVPYmpl
Y3RVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgTWVk
aWFTb3VyY2VCYXNlKiBzb3VyY2UpCitTdHJpbmcgRE9NVVJMTWVkaWFTb3VyY2U6OmNyZWF0ZU9i
amVjdFVSTChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBN
ZWRpYVNvdXJjZSogc291cmNlKQogewogICAgIC8vIFNpbmNlIFdlYldvcmtlcnMgY2Fubm90IG9i
dGFpbiBNZWRpYVNvdXJjZSBvYmplY3RzLCB3ZSBzaG91bGQgYmUgb24gdGhlIG1haW4gdGhyZWFk
LgogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc291cmNlL0RPTVVSTE1lZGlhU291cmNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc291cmNlL0RPTVVSTE1lZGlhU291cmNlLmgKaW5kZXggN2FhM2RkYzk2
N2Q3NmVhYjBjN2QxMjE4YmJmZTdmZTNmN2YxZDNmNy4uMWVjY2Q0Yjc1NDlmOGEyZmJlOTY5Yjhj
MjE0NzEyNjIxMmY5NDZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXNvdXJjZS9ET01VUkxNZWRpYVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzb3VyY2UvRE9NVVJMTWVkaWFTb3VyY2UuaApAQCAtMzcsMTIgKzM3LDEyIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTWVkaWFTb3VyY2VCYXNlOworY2xhc3MgTWVkaWFT
b3VyY2U7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBjbGFzcyBET01VUkxNZWRp
YVNvdXJjZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFN0cmluZyBjcmVhdGVPYmplY3RVUkwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIE1lZGlhU291cmNlQmFzZSopOworICAgIHN0YXRpYyBTdHJp
bmcgY3JlYXRlT2JqZWN0VVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNZWRpYVNvdXJjZSop
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcAppbmRleCBjNTdlMzY4NzRiZGIyOGI5
MjRkYjY0NzRlODZhZWNhZWM4ZmM4MGU5Li5hYWRkMDRmOGQ3YzAxMTVkMmRkM2RkYWNlMzY2YzA4
ZWMyNGE0MDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L01lZGlhU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L01lZGlhU291cmNlLmNwcApAQCAtMzYsNiArMzYsOCBAQAogI2luY2x1ZGUgIkF1ZGlvVHJhY2su
aCIKICNpbmNsdWRlICJBdWRpb1RyYWNrTGlzdC5oIgogI2luY2x1ZGUgIkNvbnRlbnRUeXBlLmgi
CisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAiR2VuZXJpY0V2ZW50UXVl
dWUuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCkBAIC01MSw2ICs1Myw3IEBACiAj
aW5jbHVkZSAiVmlkZW9UcmFja0xpc3QuaCIKICNpbmNsdWRlIDxydW50aW1lL1VpbnQ4QXJyYXku
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjIsNyArNjUsMTAgQEAgUGFz
c1JlZlB0cjxNZWRpYVNvdXJjZT4gTWVkaWFTb3VyY2U6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0KQogfQogCiBNZWRpYVNvdXJjZTo6TWVkaWFTb3VyY2UoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCkKLSAgICA6IE1lZGlhU291cmNlQmFzZShjb250ZXh0KQor
ICAgIDogQWN0aXZlRE9NT2JqZWN0KCZjb250ZXh0KQorICAgICwgbV9tZWRpYUVsZW1lbnQoMCkK
KyAgICAsIG1fcmVhZHlTdGF0ZShjbG9zZWRLZXl3b3JkKCkpCisgICAgLCBtX2FzeW5jRXZlbnRR
dWV1ZSgqdGhpcykKIHsKICAgICBMT0coTWVkaWEsICJNZWRpYVNvdXJjZTo6TWVkaWFTb3VyY2Ug
JXAiLCB0aGlzKTsKICAgICBtX3NvdXJjZUJ1ZmZlcnMgPSBTb3VyY2VCdWZmZXJMaXN0OjpjcmVh
dGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKQEAgLTc1LDYgKzgxLDI1OSBAQCBNZWRpYVNv
dXJjZTo6fk1lZGlhU291cmNlKCkKICAgICBBU1NFUlQoaXNDbG9zZWQoKSk7CiB9CiAKK2NvbnN0
IEF0b21pY1N0cmluZyYgTWVkaWFTb3VyY2U6Om9wZW5LZXl3b3JkKCkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgb3BlbiwgKCJvcGVuIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworICAgIHJldHVybiBvcGVuOworfQorCitjb25z
dCBBdG9taWNTdHJpbmcmIE1lZGlhU291cmNlOjpjbG9zZWRLZXl3b3JkKCkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgY2xvc2VkLCAoImNsb3NlZCIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICByZXR1cm4gY2xvc2VkOwor
fQorCitjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhU291cmNlOjplbmRlZEtleXdvcmQoKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBlbmRlZCwgKCJlbmRl
ZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICByZXR1cm4gZW5k
ZWQ7Cit9CisKK3ZvaWQgTWVkaWFTb3VyY2U6OnNldFByaXZhdGVBbmRPcGVuKFBhc3NSZWY8TWVk
aWFTb3VyY2VQcml2YXRlPiBtZWRpYVNvdXJjZVByaXZhdGUpCit7CisgICAgQVNTRVJUKCFtX3By
aXZhdGUpOworICAgIEFTU0VSVChtX21lZGlhRWxlbWVudCk7CisgICAgbV9wcml2YXRlID0gc3Rk
Ojptb3ZlKG1lZGlhU291cmNlUHJpdmF0ZSk7CisgICAgc2V0UmVhZHlTdGF0ZShvcGVuS2V5d29y
ZCgpKTsKK30KKwordm9pZCBNZWRpYVNvdXJjZTo6YWRkZWRUb1JlZ2lzdHJ5KCkKK3sKKyAgICBz
ZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7Cit9CisKK3ZvaWQgTWVkaWFTb3VyY2U6OnJlbW92ZWRG
cm9tUmVnaXN0cnkoKQoreworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworfQorCitk
b3VibGUgTWVkaWFTb3VyY2U6OmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNDbG9z
ZWQoKSA/IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKSA6IG1fcHJpdmF0
ZS0+ZHVyYXRpb24oKTsKK30KKworUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVNvdXJjZTo6
YnVmZmVyZWQoKSBjb25zdAoreworICAgIC8vIEltcGxlbWVudHMgTWVkaWFTb3VyY2UgYWxnb3Jp
dGhtIGZvciBIVE1MTWVkaWFFbGVtZW50LmJ1ZmZlcmVkLgorICAgIC8vIGh0dHBzOi8vZHZjcy53
My5vcmcvaGcvaHRtbC1tZWRpYS9yYXctZmlsZS9kZWZhdWx0L21lZGlhLXNvdXJjZS9tZWRpYS1z
b3VyY2UuaHRtbCNodG1sbWVkaWFlbGVtZW50LWV4dGVuc2lvbnMKKyAgICBWZWN0b3I8UmVmUHRy
PFRpbWVSYW5nZXM+PiByYW5nZXMgPSBhY3RpdmVSYW5nZXMoKTsKKworICAgIC8vIDEuIElmIGFj
dGl2ZVNvdXJjZUJ1ZmZlcnMubGVuZ3RoIGVxdWFscyAwIHRoZW4gcmV0dXJuIGFuIGVtcHR5IFRp
bWVSYW5nZXMgb2JqZWN0IGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICBpZiAocmFuZ2VzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFRpbWVSYW5nZXM6OmNyZWF0ZSgpOworCisgICAgLy8g
Mi4gTGV0IGFjdGl2ZSByYW5nZXMgYmUgdGhlIHJhbmdlcyByZXR1cm5lZCBieSBidWZmZXJlZCBm
b3IgZWFjaCBTb3VyY2VCdWZmZXIgb2JqZWN0IGluIGFjdGl2ZVNvdXJjZUJ1ZmZlcnMuCisgICAg
Ly8gMy4gTGV0IGhpZ2hlc3QgZW5kIHRpbWUgYmUgdGhlIGxhcmdlc3QgcmFuZ2UgZW5kIHRpbWUg
aW4gdGhlIGFjdGl2ZSByYW5nZXMuCisgICAgZG91YmxlIGhpZ2hlc3RFbmRUaW1lID0gLTE7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByYW5nZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gcmFuZ2VzW2ldLT5sZW5ndGgoKTsKKyAgICAgICAgaWYgKGxlbmd0
aCkKKyAgICAgICAgICAgIGhpZ2hlc3RFbmRUaW1lID0gc3RkOjptYXgoaGlnaGVzdEVuZFRpbWUs
IHJhbmdlc1tpXS0+ZW5kKGxlbmd0aCAtIDEsIEFTU0VSVF9OT19FWENFUFRJT04pKTsKKyAgICB9
CisKKyAgICAvLyBSZXR1cm4gYW4gZW1wdHkgcmFuZ2UgaWYgYWxsIHJhbmdlcyBhcmUgZW1wdHku
CisgICAgaWYgKGhpZ2hlc3RFbmRUaW1lIDwgMCkKKyAgICAgICAgcmV0dXJuIFRpbWVSYW5nZXM6
OmNyZWF0ZSgpOworCisgICAgLy8gNC4gTGV0IGludGVyc2VjdGlvbiByYW5nZXMgZXF1YWwgYSBU
aW1lUmFuZ2Ugb2JqZWN0IGNvbnRhaW5pbmcgYSBzaW5nbGUgcmFuZ2UgZnJvbSAwIHRvIGhpZ2hl
c3QgZW5kIHRpbWUuCisgICAgUmVmUHRyPFRpbWVSYW5nZXM+IGludGVyc2VjdGlvblJhbmdlcyA9
IFRpbWVSYW5nZXM6OmNyZWF0ZSgwLCBoaWdoZXN0RW5kVGltZSk7CisKKyAgICAvLyA1LiBGb3Ig
ZWFjaCBTb3VyY2VCdWZmZXIgb2JqZWN0IGluIGFjdGl2ZVNvdXJjZUJ1ZmZlcnMgcnVuIHRoZSBm
b2xsb3dpbmcgc3RlcHM6CisgICAgYm9vbCBlbmRlZCA9IHJlYWR5U3RhdGUoKSA9PSBlbmRlZEtl
eXdvcmQoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJhbmdlcy5zaXplKCk7ICsraSkg
eworICAgICAgICAvLyA1LjEgTGV0IHNvdXJjZSByYW5nZXMgZXF1YWwgdGhlIHJhbmdlcyByZXR1
cm5lZCBieSB0aGUgYnVmZmVyZWQgYXR0cmlidXRlIG9uIHRoZSBjdXJyZW50IFNvdXJjZUJ1ZmZl
ci4KKyAgICAgICAgVGltZVJhbmdlcyogc291cmNlUmFuZ2VzID0gcmFuZ2VzW2ldLmdldCgpOwor
CisgICAgICAgIC8vIDUuMiBJZiByZWFkeVN0YXRlIGlzICJlbmRlZCIsIHRoZW4gc2V0IHRoZSBl
bmQgdGltZSBvbiB0aGUgbGFzdCByYW5nZSBpbiBzb3VyY2UgcmFuZ2VzIHRvIGhpZ2hlc3QgZW5k
IHRpbWUuCisgICAgICAgIGlmIChlbmRlZCAmJiBzb3VyY2VSYW5nZXMtPmxlbmd0aCgpKQorICAg
ICAgICAgICAgc291cmNlUmFuZ2VzLT5hZGQoc291cmNlUmFuZ2VzLT5zdGFydChzb3VyY2VSYW5n
ZXMtPmxlbmd0aCgpIC0gMSwgQVNTRVJUX05PX0VYQ0VQVElPTiksIGhpZ2hlc3RFbmRUaW1lKTsK
KworICAgICAgICAvLyA1LjMgTGV0IG5ldyBpbnRlcnNlY3Rpb24gcmFuZ2VzIGVxdWFsIHRoZSB0
aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGludGVyc2VjdGlvbiByYW5nZXMgYW5kIHRoZSBz
b3VyY2UgcmFuZ2VzLgorICAgICAgICAvLyA1LjQgUmVwbGFjZSB0aGUgcmFuZ2VzIGluIGludGVy
c2VjdGlvbiByYW5nZXMgd2l0aCB0aGUgbmV3IGludGVyc2VjdGlvbiByYW5nZXMuCisgICAgICAg
IGludGVyc2VjdGlvblJhbmdlcy0+aW50ZXJzZWN0V2l0aChzb3VyY2VSYW5nZXMpOworICAgIH0K
KworICAgIHJldHVybiBpbnRlcnNlY3Rpb25SYW5nZXMucmVsZWFzZSgpOworfQorCitjbGFzcyBT
b3VyY2VCdWZmZXJCdWZmZXJlZERvZXNOb3RDb250YWluVGltZSB7CitwdWJsaWM6CisgICAgU291
cmNlQnVmZmVyQnVmZmVyZWREb2VzTm90Q29udGFpblRpbWUoZG91YmxlIHRpbWUpIDogbV90aW1l
KHRpbWUpIHsgfQorICAgIGJvb2wgb3BlcmF0b3IoKShSZWZQdHI8U291cmNlQnVmZmVyPiBzb3Vy
Y2VCdWZmZXIpCisgICAgeworICAgICAgICByZXR1cm4gIXNvdXJjZUJ1ZmZlci0+YnVmZmVyZWQo
KS0+Y29udGFpbihtX3RpbWUpOworICAgIH0KKworICAgIGRvdWJsZSBtX3RpbWU7Cit9OworCitj
bGFzcyBTb3VyY2VCdWZmZXJCdWZmZXJlZEhhc0Vub3VnaCB7CitwdWJsaWM6CisgICAgU291cmNl
QnVmZmVyQnVmZmVyZWRIYXNFbm91Z2goZG91YmxlIHRpbWUsIGRvdWJsZSBkdXJhdGlvbikgOiBt
X3RpbWUodGltZSksIG1fZHVyYXRpb24oZHVyYXRpb24pIHsgfQorICAgIGJvb2wgb3BlcmF0b3Io
KShSZWZQdHI8U291cmNlQnVmZmVyPiBzb3VyY2VCdWZmZXIpCisgICAgeworICAgICAgICBzaXpl
X3QgcmFuZ2VQb3MgPSBzb3VyY2VCdWZmZXItPmJ1ZmZlcmVkKCktPmZpbmQobV90aW1lKTsKKyAg
ICAgICAgaWYgKHJhbmdlUG9zID09IG5vdEZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIGRvdWJsZSBlbmRUaW1lID0gc291cmNlQnVmZmVyLT5idWZmZXJlZCgpLT5l
bmQocmFuZ2VQb3MsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICByZXR1cm4gbV9kdXJhdGlv
biAtIGVuZFRpbWUgPCAxOworICAgIH0KKworICAgIGRvdWJsZSBtX3RpbWU7CisgICAgZG91Ymxl
IG1fZHVyYXRpb247Cit9OworCitjbGFzcyBTb3VyY2VCdWZmZXJCdWZmZXJlZEhhc0Z1dHVyZSB7
CitwdWJsaWM6CisgICAgU291cmNlQnVmZmVyQnVmZmVyZWRIYXNGdXR1cmUoZG91YmxlIHRpbWUp
IDogbV90aW1lKHRpbWUpIHsgfQorICAgIGJvb2wgb3BlcmF0b3IoKShSZWZQdHI8U291cmNlQnVm
ZmVyPiBzb3VyY2VCdWZmZXIpCisgICAgeworICAgICAgICBzaXplX3QgcmFuZ2VQb3MgPSBzb3Vy
Y2VCdWZmZXItPmJ1ZmZlcmVkKCktPmZpbmQobV90aW1lKTsKKyAgICAgICAgaWYgKHJhbmdlUG9z
ID09IG5vdEZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGRvdWJs
ZSBlbmRUaW1lID0gc291cmNlQnVmZmVyLT5idWZmZXJlZCgpLT5lbmQocmFuZ2VQb3MsIElHTk9S
RV9FWENFUFRJT04pOworICAgICAgICByZXR1cm4gZW5kVGltZSAtIG1fdGltZSA+IDE7CisgICAg
fQorCisgICAgZG91YmxlIG1fdGltZTsKK307CisKK3ZvaWQgTWVkaWFTb3VyY2U6Om1vbml0b3JT
b3VyY2VCdWZmZXJzKCkKK3sKKyAgICBkb3VibGUgY3VycmVudFRpbWUgPSBtZWRpYUVsZW1lbnQo
KS0+Y3VycmVudFRpbWUoKTsKKworICAgIC8vIDIuNC40IFNvdXJjZUJ1ZmZlciBNb25pdG9yaW5n
CisgICAgLy8gaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlL2RlZmF1
bHQvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS5odG1sI2J1ZmZlci1tb25pdG9yaW5nCisgICAg
Ly8g4oazIElmIGJ1ZmZlcmVkIGZvciBhbGwgb2JqZWN0cyBpbiBhY3RpdmVTb3VyY2VCdWZmZXJz
IGRvIG5vdCBjb250YWluIFRpbWVSYW5nZXMgZm9yIHRoZSBjdXJyZW50CisgICAgLy8gcGxheWJh
Y2sgcG9zaXRpb246CisgICAgYXV0byBiZWdpbiA9IG1fYWN0aXZlU291cmNlQnVmZmVycy0+YmVn
aW4oKTsKKyAgICBhdXRvIGVuZCA9IG1fYWN0aXZlU291cmNlQnVmZmVycy0+ZW5kKCk7CisgICAg
aWYgKHN0ZDo6YWxsX29mKGJlZ2luLCBlbmQsIFNvdXJjZUJ1ZmZlckJ1ZmZlcmVkRG9lc05vdENv
bnRhaW5UaW1lKGN1cnJlbnRUaW1lKSkpIHsKKyAgICAgICAgLy8gMS4gU2V0IHRoZSBIVE1MTWVk
aWFFbGVtZW50LnJlYWR5U3RhdGUgYXR0cmlidXRlIHRvIEhBVkVfTUVUQURBVEEuCisgICAgICAg
IC8vIDIuIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRyYW5zaXRpb24gdG8gSEFWRV9NRVRBREFUQSwg
dGhlbiBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudAorICAgICAgICAvLyBuYW1l
ZCBsb2FkZWRtZXRhZGF0YSBhdCB0aGUgbWVkaWEgZWxlbWVudC4KKyAgICAgICAgbV9wcml2YXRl
LT5zZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEpOworCisgICAgICAgIC8v
IDMuIEFib3J0IHRoZXNlIHN0ZXBzLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
4oazIElmIGJ1ZmZlcmVkIGZvciBhbGwgb2JqZWN0cyBpbiBhY3RpdmVTb3VyY2VCdWZmZXJzIGNv
bnRhaW4gVGltZVJhbmdlcyB0aGF0IGluY2x1ZGUgdGhlIGN1cnJlbnQKKyAgICAvLyBwbGF5YmFj
ayBwb3NpdGlvbiBhbmQgZW5vdWdoIGRhdGEgdG8gZW5zdXJlIHVuaW50ZXJydXB0ZWQgcGxheWJh
Y2s6CisgICAgaWYgKHN0ZDo6YWxsX29mKGJlZ2luLCBlbmQsIFNvdXJjZUJ1ZmZlckJ1ZmZlcmVk
SGFzRW5vdWdoKGN1cnJlbnRUaW1lLCBtZWRpYUVsZW1lbnQoKS0+ZHVyYXRpb24oKSkpKSB7Cisg
ICAgICAgIC8vIDEuIFNldCB0aGUgSFRNTE1lZGlhRWxlbWVudC5yZWFkeVN0YXRlIGF0dHJpYnV0
ZSB0byBIQVZFX0VOT1VHSF9EQVRBLgorICAgICAgICAvLyAyLiBRdWV1ZSBhIHRhc2sgdG8gZmly
ZSBhIHNpbXBsZSBldmVudCBuYW1lZCBjYW5wbGF5dGhyb3VnaCBhdCB0aGUgbWVkaWEgZWxlbWVu
dC4KKyAgICAgICAgLy8gMy4gUGxheWJhY2sgbWF5IHJlc3VtZSBhdCB0aGlzIHBvaW50IGlmIGl0
IHdhcyBwcmV2aW91c2x5IHN1c3BlbmRlZCBieSBhIHRyYW5zaXRpb24gdG8gSEFWRV9DVVJSRU5U
X0RBVEEuCisgICAgICAgIG1fcHJpdmF0ZS0+c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2
ZUVub3VnaERhdGEpOworCisgICAgICAgIC8vIDQuIEFib3J0IHRoZXNlIHN0ZXBzLgorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8g4oazIElmIGJ1ZmZlcmVkIGZvciBhdCBsZWFzdCBv
bmUgb2JqZWN0IGluIGFjdGl2ZVNvdXJjZUJ1ZmZlcnMgY29udGFpbnMgYSBUaW1lUmFuZ2UgdGhh
dCBpbmNsdWRlcworICAgIC8vIHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uIGJ1dCBub3Qg
ZW5vdWdoIGRhdGEgdG8gZW5zdXJlIHVuaW50ZXJydXB0ZWQgcGxheWJhY2s6CisgICAgaWYgKHN0
ZDo6YW55X29mKGJlZ2luLCBlbmQsIFNvdXJjZUJ1ZmZlckJ1ZmZlcmVkSGFzRnV0dXJlKGN1cnJl
bnRUaW1lKSkpIHsKKyAgICAgICAgLy8gMS4gU2V0IHRoZSBIVE1MTWVkaWFFbGVtZW50LnJlYWR5
U3RhdGUgYXR0cmlidXRlIHRvIEhBVkVfRlVUVVJFX0RBVEEuCisgICAgICAgIC8vIDIuIElmIHRo
ZSBwcmV2aW91cyB2YWx1ZSBvZiBIVE1MTWVkaWFFbGVtZW50LnJlYWR5U3RhdGUgd2FzIGxlc3Mg
dGhhbiBIQVZFX0ZVVFVSRV9EQVRBLCB0aGVuIHF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2ltcGxl
IGV2ZW50IG5hbWVkIGNhbnBsYXkgYXQgdGhlIG1lZGlhIGVsZW1lbnQuCisgICAgICAgIC8vIDMu
IFBsYXliYWNrIG1heSByZXN1bWUgYXQgdGhpcyBwb2ludCBpZiBpdCB3YXMgcHJldmlvdXNseSBz
dXNwZW5kZWQgYnkgYSB0cmFuc2l0aW9uIHRvIEhBVkVfQ1VSUkVOVF9EQVRBLgorICAgICAgICBt
X3ByaXZhdGUtPnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVGdXR1cmVEYXRhKTsKKwor
ICAgICAgICAvLyA0LiBBYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIOKGsyBJZiBidWZmZXJlZCBmb3IgYXQgbGVhc3Qgb25lIG9iamVjdCBpbiBhY3Rp
dmVTb3VyY2VCdWZmZXJzIGNvbnRhaW5zIGEgVGltZVJhbmdlIHRoYXQgZW5kcworICAgIC8vIGF0
IHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uIGFuZCBkb2VzIG5vdCBoYXZlIGEgcmFuZ2Ug
Y292ZXJpbmcgdGhlIHRpbWUgaW1tZWRpYXRlbHkKKyAgICAvLyBhZnRlciB0aGUgY3VycmVudCBw
b3NpdGlvbjoKKyAgICAvLyBOT1RFOiBMb2dpY2FsbHksICEoYWxsIG9iamVjdHMgZG8gbm90IGNv
bnRhaW4gY3VycmVudFRpbWUpID09IChzb21lIG9iamVjdHMgY29udGFpbiBjdXJyZW50IHRpbWUp
CisKKyAgICAvLyAxLiBTZXQgdGhlIEhUTUxNZWRpYUVsZW1lbnQucmVhZHlTdGF0ZSBhdHRyaWJ1
dGUgdG8gSEFWRV9DVVJSRU5UX0RBVEEuCisgICAgLy8gMi4gSWYgdGhpcyBpcyB0aGUgZmlyc3Qg
dHJhbnNpdGlvbiB0byBIQVZFX0NVUlJFTlRfREFUQSwgdGhlbiBxdWV1ZSBhIHRhc2sgdG8gZmly
ZSBhIHNpbXBsZQorICAgIC8vIGV2ZW50IG5hbWVkIGxvYWRlZGRhdGEgYXQgdGhlIG1lZGlhIGVs
ZW1lbnQuCisgICAgLy8gMy4gUGxheWJhY2sgaXMgc3VzcGVuZGVkIGF0IHRoaXMgcG9pbnQgc2lu
Y2UgdGhlIG1lZGlhIGVsZW1lbnQgZG9lc24ndCBoYXZlIGVub3VnaCBkYXRhIHRvCisgICAgLy8g
YWR2YW5jZSB0aGUgbWVkaWEgdGltZWxpbmUuCisgICAgbV9wcml2YXRlLT5zZXRSZWFkeVN0YXRl
KE1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGEpOworICAgIAorICAgIC8vIDQuIEFib3J0IHRo
ZXNlIHN0ZXBzLgorfQorCit2b2lkIE1lZGlhU291cmNlOjpzZXREdXJhdGlvbihkb3VibGUgZHVy
YXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChkdXJhdGlvbiA8IDAuMCB8fCBz
dGQ6OmlzbmFuKGR1cmF0aW9uKSkgeworICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWlzT3BlbigpKSB7CisgICAgICAgIGVj
ID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wcml2
YXRlLT5zZXREdXJhdGlvbihkdXJhdGlvbik7Cit9CisKKwordm9pZCBNZWRpYVNvdXJjZTo6c2V0
UmVhZHlTdGF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHN0YXRlKQoreworICAgIEFTU0VSVChzdGF0
ZSA9PSBvcGVuS2V5d29yZCgpIHx8IHN0YXRlID09IGNsb3NlZEtleXdvcmQoKSB8fCBzdGF0ZSA9
PSBlbmRlZEtleXdvcmQoKSk7CisKKyAgICBBdG9taWNTdHJpbmcgb2xkU3RhdGUgPSByZWFkeVN0
YXRlKCk7CisgICAgTE9HKE1lZGlhLCAiTWVkaWFTb3VyY2U6OnNldFJlYWR5U3RhdGUoKSAlcCA6
ICVzIC0+ICVzIiwgdGhpcywgb2xkU3RhdGUuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIHN0YXRl
LnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKworICAgIGlmIChzdGF0ZSA9PSBjbG9zZWRLZXl3
b3JkKCkpIHsKKyAgICAgICAgbV9wcml2YXRlLmNsZWFyKCk7CisgICAgICAgIG1fbWVkaWFFbGVt
ZW50ID0gMDsKKyAgICB9CisKKyAgICBpZiAob2xkU3RhdGUgPT0gc3RhdGUpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fcmVhZHlTdGF0ZSA9IHN0YXRlOworCisgICAgb25SZWFkeVN0YXRlQ2hh
bmdlKG9sZFN0YXRlLCBzdGF0ZSk7Cit9CisKK3ZvaWQgTWVkaWFTb3VyY2U6OmVuZE9mU3RyZWFt
KGNvbnN0IEF0b21pY1N0cmluZyYgZXJyb3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBuZXR3b3JrLCAoIm5ldHdvcmsi
LCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGRlY29kZSwgKCJkZWNvZGUiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CisKKyAgICAvLyAzLjEgaHR0cDovL2R2Y3MudzMu
b3JnL2hnL2h0bWwtbWVkaWEvcmF3LWZpbGUvdGlwL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2Uu
aHRtbCNkb20tZW5kb2ZzdHJlYW0KKyAgICAvLyAxLiBJZiB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1
dGUgaXMgbm90IGluIHRoZSAib3BlbiIgc3RhdGUgdGhlbiB0aHJvdyBhbgorICAgIC8vIElOVkFM
SURfU1RBVEVfRVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgaWYgKCFp
c09wZW4oKSkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgTWVkaWFTb3VyY2VQcml2YXRlOjpFbmRPZlN0cmVhbVN0YXR1cyBl
b3NTdGF0dXMgPSBNZWRpYVNvdXJjZVByaXZhdGU6OkVvc05vRXJyb3I7CisKKyAgICBpZiAoZXJy
b3IuaXNOdWxsKCkgfHwgZXJyb3IuaXNFbXB0eSgpKQorICAgICAgICBlb3NTdGF0dXMgPSBNZWRp
YVNvdXJjZVByaXZhdGU6OkVvc05vRXJyb3I7CisgICAgZWxzZSBpZiAoZXJyb3IgPT0gbmV0d29y
aykKKyAgICAgICAgZW9zU3RhdHVzID0gTWVkaWFTb3VyY2VQcml2YXRlOjpFb3NOZXR3b3JrRXJy
b3I7CisgICAgZWxzZSBpZiAoZXJyb3IgPT0gZGVjb2RlKQorICAgICAgICBlb3NTdGF0dXMgPSBN
ZWRpYVNvdXJjZVByaXZhdGU6OkVvc0RlY29kZUVycm9yOworICAgIGVsc2UgeworICAgICAgICBl
YyA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IDIuIENoYW5nZSB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgdmFsdWUgdG8gImVuZGVkIi4KKyAg
ICBzZXRSZWFkeVN0YXRlKGVuZGVkS2V5d29yZCgpKTsKKyAgICBtX3ByaXZhdGUtPm1hcmtFbmRP
ZlN0cmVhbShlb3NTdGF0dXMpOworfQorCiBTb3VyY2VCdWZmZXIqIE1lZGlhU291cmNlOjphZGRT
b3VyY2VCdWZmZXIoY29uc3QgU3RyaW5nJiB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBMT0coTWVkaWEsICJNZWRpYVNvdXJjZTo6YWRkU291cmNlQnVmZmVyKCVzKSAlcCIsIHR5cGUu
YXNjaWkoKS5kYXRhKCksIHRoaXMpOwpAQCAtMjU2LDU4ICs1MTUsMjUgQEAgdm9pZCBNZWRpYVNv
dXJjZTo6cmVtb3ZlU291cmNlQnVmZmVyKFNvdXJjZUJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25D
b2RlJiBlYykKICAgICAgICAgICAgIC8vIGNhbmNlbGFibGUsIGFuZCB0aGF0IHVzZXMgdGhlIFRy
YWNrRXZlbnQgaW50ZXJmYWNlLCBhdCB0aGUgU291cmNlQnVmZmVyIHRleHRUcmFja3MgbGlzdC4K
ICAgICAgICAgICAgIHRleHRUcmFja3MtPnJlbW92ZSh0cmFjayk7CiAgICAgICAgIH0KLQorICAg
ICAgICAKICAgICAgICAgLy8gOS40IElmIHRoZSByZW1vdmVkIGVuYWJsZWQgdGV4dCB0cmFjayBm
bGFnIGVxdWFscyB0cnVlLCB0aGVuIHF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2ltcGxlIGV2ZW50
CiAgICAgICAgIC8vIG5hbWVkIGNoYW5nZSBhdCB0aGUgSFRNTE1lZGlhRWxlbWVudCB0ZXh0VHJh
Y2tzIGxpc3QuCiAgICAgICAgIGlmIChyZW1vdmVkRW5hYmxlZFRleHRUcmFjaykKICAgICAgICAg
ICAgIG1lZGlhRWxlbWVudCgpLT50ZXh0VHJhY2tzKCktPnNjaGVkdWxlQ2hhbmdlRXZlbnQoKTsK
ICAgICB9Ci0KLQorICAgIAorICAgIAogICAgIC8vIDEwLiBJZiBzb3VyY2VCdWZmZXIgaXMgaW4g
YWN0aXZlU291cmNlQnVmZmVycywgdGhlbiByZW1vdmUgc291cmNlQnVmZmVyIGZyb20gYWN0aXZl
U291cmNlQnVmZmVycyAuLi4KICAgICBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMtPnJlbW92ZShidWZm
ZXIpOwotCisgICAgCiAgICAgLy8gMTEuIFJlbW92ZSBzb3VyY2VCdWZmZXIgZnJvbSBzb3VyY2VC
dWZmZXJzIGFuZCBmaXJlIGEgcmVtb3Zlc291cmNlYnVmZmVyIGV2ZW50CiAgICAgLy8gb24gdGhh
dCBvYmplY3QuCiAgICAgbV9zb3VyY2VCdWZmZXJzLT5yZW1vdmUoYnVmZmVyKTsKLQorICAgIAog
ICAgIC8vIDEyLiBEZXN0cm95IGFsbCByZXNvdXJjZXMgZm9yIHNvdXJjZUJ1ZmZlci4KICAgICBi
dWZmZXItPnJlbW92ZWRGcm9tTWVkaWFTb3VyY2UoKTsKIH0KIAotdm9pZCBNZWRpYVNvdXJjZTo6
b25SZWFkeVN0YXRlQ2hhbmdlKGNvbnN0IEF0b21pY1N0cmluZyYgb2xkU3RhdGUsIGNvbnN0IEF0
b21pY1N0cmluZyYgbmV3U3RhdGUpCi17Ci0gICAgaWYgKGlzT3BlbigpKSB7Ci0gICAgICAgIHNj
aGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLnNvdXJjZW9wZW5FdmVudCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAob2xkU3RhdGUgPT0gb3BlbktleXdvcmQoKSAmJiBuZXdTdGF0
ZSA9PSBlbmRlZEtleXdvcmQoKSkgewotICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMo
KS5zb3VyY2VlbmRlZEV2ZW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VS
VChpc0Nsb3NlZCgpKTsKLQotICAgIG1fYWN0aXZlU291cmNlQnVmZmVycy0+Y2xlYXIoKTsKLQot
ICAgIC8vIENsZWFyIFNvdXJjZUJ1ZmZlciByZWZlcmVuY2VzIHRvIHRoaXMgb2JqZWN0LgotICAg
IGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IG1fc291cmNlQnVmZmVycy0+bGVuZ3RoKCk7
ICsraSkKLSAgICAgICAgbV9zb3VyY2VCdWZmZXJzLT5pdGVtKGkpLT5yZW1vdmVkRnJvbU1lZGlh
U291cmNlKCk7Ci0gICAgbV9zb3VyY2VCdWZmZXJzLT5jbGVhcigpOwotCi0gICAgc2NoZWR1bGVF
dmVudChldmVudE5hbWVzKCkuc291cmNlY2xvc2VFdmVudCk7Ci19Ci0KLVZlY3RvcjxSZWZQdHI8
VGltZVJhbmdlcz4+IE1lZGlhU291cmNlOjphY3RpdmVSYW5nZXMoKSBjb25zdAotewotICAgIFZl
Y3RvcjxSZWZQdHI8VGltZVJhbmdlcz4+IGFjdGl2ZVJhbmdlcyhtX2FjdGl2ZVNvdXJjZUJ1ZmZl
cnMtPmxlbmd0aCgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlU291cmNl
QnVmZmVycy0+bGVuZ3RoKCk7ICsraSkKLSAgICAgICAgYWN0aXZlUmFuZ2VzW2ldID0gbV9hY3Rp
dmVTb3VyY2VCdWZmZXJzLT5pdGVtKGkpLT5idWZmZXJlZChBU1NFUlRfTk9fRVhDRVBUSU9OKTsK
LQotICAgIHJldHVybiBhY3RpdmVSYW5nZXM7Ci19Ci0KIGJvb2wgTWVkaWFTb3VyY2U6OmlzVHlw
ZVN1cHBvcnRlZChjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgTE9HKE1lZGlhLCAiTWVkaWFT
b3VyY2U6OmlzVHlwZVN1cHBvcnRlZCglcykiLCB0eXBlLmFzY2lpKCkuZGF0YSgpKTsKQEAgLTMz
Niw5ICs1NjIsMTkgQEAgYm9vbCBNZWRpYVNvdXJjZTo6aXNUeXBlU3VwcG9ydGVkKGNvbnN0IFN0
cmluZyYgdHlwZSkKICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlwZShwYXJhbWV0
ZXJzLCAwKSAhPSBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CiB9CiAKLUV2ZW50VGFyZ2V0
SW50ZXJmYWNlIE1lZGlhU291cmNlOjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0Citib29s
IE1lZGlhU291cmNlOjppc09wZW4oKSBjb25zdAogewotICAgIHJldHVybiBNZWRpYVNvdXJjZUV2
ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKKyAgICByZXR1cm4gcmVhZHlTdGF0ZSgpID09IG9wZW5L
ZXl3b3JkKCk7Cit9CisKK2Jvb2wgTWVkaWFTb3VyY2U6OmlzQ2xvc2VkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gcmVhZHlTdGF0ZSgpID09IGNsb3NlZEtleXdvcmQoKTsKK30KKwordm9pZCBNZWRp
YVNvdXJjZTo6Y2xvc2UoKQoreworICAgIHNldFJlYWR5U3RhdGUoY2xvc2VkS2V5d29yZCgpKTsK
IH0KIAogdm9pZCBNZWRpYVNvdXJjZTo6c291cmNlQnVmZmVyRGlkQ2hhbmdlQWNpdHZlU3RhdGUo
U291cmNlQnVmZmVyKiBzb3VyY2VCdWZmZXIsIGJvb2wgYWN0aXZlKQpAQCAtMzQ5LDEwOSArNTg1
LDEyMiBAQCB2b2lkIE1lZGlhU291cmNlOjpzb3VyY2VCdWZmZXJEaWRDaGFuZ2VBY2l0dmVTdGF0
ZShTb3VyY2VCdWZmZXIqIHNvdXJjZUJ1ZmZlciwgYgogICAgICAgICBtX2FjdGl2ZVNvdXJjZUJ1
ZmZlcnMtPnJlbW92ZShzb3VyY2VCdWZmZXIpOwogfQogCi1jbGFzcyBTb3VyY2VCdWZmZXJCdWZm
ZXJlZERvZXNOb3RDb250YWluVGltZSB7Ci1wdWJsaWM6Ci0gICAgU291cmNlQnVmZmVyQnVmZmVy
ZWREb2VzTm90Q29udGFpblRpbWUoZG91YmxlIHRpbWUpIDogbV90aW1lKHRpbWUpIHsgfQotICAg
IGJvb2wgb3BlcmF0b3IoKShSZWZQdHI8U291cmNlQnVmZmVyPiBzb3VyY2VCdWZmZXIpCi0gICAg
ewotICAgICAgICByZXR1cm4gIXNvdXJjZUJ1ZmZlci0+YnVmZmVyZWQoKS0+Y29udGFpbihtX3Rp
bWUpOwotICAgIH0KLQotICAgIGRvdWJsZSBtX3RpbWU7Ci19OwotCi1jbGFzcyBTb3VyY2VCdWZm
ZXJCdWZmZXJlZEhhc0Vub3VnaCB7Ci1wdWJsaWM6Ci0gICAgU291cmNlQnVmZmVyQnVmZmVyZWRI
YXNFbm91Z2goZG91YmxlIHRpbWUsIGRvdWJsZSBkdXJhdGlvbikgOiBtX3RpbWUodGltZSksIG1f
ZHVyYXRpb24oZHVyYXRpb24pIHsgfQotICAgIGJvb2wgb3BlcmF0b3IoKShSZWZQdHI8U291cmNl
QnVmZmVyPiBzb3VyY2VCdWZmZXIpCi0gICAgewotICAgICAgICBzaXplX3QgcmFuZ2VQb3MgPSBz
b3VyY2VCdWZmZXItPmJ1ZmZlcmVkKCktPmZpbmQobV90aW1lKTsKLSAgICAgICAgaWYgKHJhbmdl
UG9zID09IG5vdEZvdW5kKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGRv
dWJsZSBlbmRUaW1lID0gc291cmNlQnVmZmVyLT5idWZmZXJlZCgpLT5lbmQocmFuZ2VQb3MsIElH
Tk9SRV9FWENFUFRJT04pOwotICAgICAgICByZXR1cm4gbV9kdXJhdGlvbiAtIGVuZFRpbWUgPCAx
OwotICAgIH0KK2Jvb2wgTWVkaWFTb3VyY2U6OmF0dGFjaFRvRWxlbWVudChIVE1MTWVkaWFFbGVt
ZW50KiBlbGVtZW50KQoreworICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgZG91YmxlIG1fdGltZTsKLSAgICBkb3VibGUgbV9kdXJhdGlvbjsKLX07
CisgICAgQVNTRVJUKGlzQ2xvc2VkKCkpOwogCi1jbGFzcyBTb3VyY2VCdWZmZXJCdWZmZXJlZEhh
c0Z1dHVyZSB7Ci1wdWJsaWM6Ci0gICAgU291cmNlQnVmZmVyQnVmZmVyZWRIYXNGdXR1cmUoZG91
YmxlIHRpbWUpIDogbV90aW1lKHRpbWUpIHsgfQotICAgIGJvb2wgb3BlcmF0b3IoKShSZWZQdHI8
U291cmNlQnVmZmVyPiBzb3VyY2VCdWZmZXIpCi0gICAgewotICAgICAgICBzaXplX3QgcmFuZ2VQ
b3MgPSBzb3VyY2VCdWZmZXItPmJ1ZmZlcmVkKCktPmZpbmQobV90aW1lKTsKLSAgICAgICAgaWYg
KHJhbmdlUG9zID09IG5vdEZvdW5kKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1f
bWVkaWFFbGVtZW50ID0gZWxlbWVudDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgICAgICBk
b3VibGUgZW5kVGltZSA9IHNvdXJjZUJ1ZmZlci0+YnVmZmVyZWQoKS0+ZW5kKHJhbmdlUG9zLCBJ
R05PUkVfRVhDRVBUSU9OKTsKLSAgICAgICAgcmV0dXJuIGVuZFRpbWUgLSBtX3RpbWUgPiAxOwot
ICAgIH0KK3ZvaWQgTWVkaWFTb3VyY2U6Om9wZW5JZkluRW5kZWRTdGF0ZSgpCit7CisgICAgaWYg
KG1fcmVhZHlTdGF0ZSAhPSBlbmRlZEtleXdvcmQoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAg
ZG91YmxlIG1fdGltZTsKLX07CisgICAgc2V0UmVhZHlTdGF0ZShvcGVuS2V5d29yZCgpKTsKKyAg
ICBtX3ByaXZhdGUtPnVubWFya0VuZE9mU3RyZWFtKCk7Cit9CiAKLXZvaWQgTWVkaWFTb3VyY2U6
Om1vbml0b3JTb3VyY2VCdWZmZXJzKCkKK2Jvb2wgTWVkaWFTb3VyY2U6Omhhc1BlbmRpbmdBY3Rp
dml0eSgpIGNvbnN0CiB7Ci0gICAgZG91YmxlIGN1cnJlbnRUaW1lID0gbWVkaWFFbGVtZW50KCkt
PmN1cnJlbnRUaW1lKCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZSB8fCBtX2FzeW5jRXZlbnRRdWV1
ZS5oYXNQZW5kaW5nRXZlbnRzKCkKKyAgICAgICAgfHwgQWN0aXZlRE9NT2JqZWN0OjpoYXNQZW5k
aW5nQWN0aXZpdHkoKTsKK30KIAotICAgIC8vIDIuNC40IFNvdXJjZUJ1ZmZlciBNb25pdG9yaW5n
Ci0gICAgLy8gaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlL2RlZmF1
bHQvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS5odG1sI2J1ZmZlci1tb25pdG9yaW5nCi0gICAg
Ly8g4oazIElmIGJ1ZmZlcmVkIGZvciBhbGwgb2JqZWN0cyBpbiBhY3RpdmVTb3VyY2VCdWZmZXJz
IGRvIG5vdCBjb250YWluIFRpbWVSYW5nZXMgZm9yIHRoZSBjdXJyZW50Ci0gICAgLy8gcGxheWJh
Y2sgcG9zaXRpb246Ci0gICAgYXV0byBiZWdpbiA9IG1fYWN0aXZlU291cmNlQnVmZmVycy0+YmVn
aW4oKTsKLSAgICBhdXRvIGVuZCA9IG1fYWN0aXZlU291cmNlQnVmZmVycy0+ZW5kKCk7Ci0gICAg
aWYgKHN0ZDo6YWxsX29mKGJlZ2luLCBlbmQsIFNvdXJjZUJ1ZmZlckJ1ZmZlcmVkRG9lc05vdENv
bnRhaW5UaW1lKGN1cnJlbnRUaW1lKSkpIHsKLSAgICAgICAgLy8gMS4gU2V0IHRoZSBIVE1MTWVk
aWFFbGVtZW50LnJlYWR5U3RhdGUgYXR0cmlidXRlIHRvIEhBVkVfTUVUQURBVEEuCi0gICAgICAg
IC8vIDIuIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRyYW5zaXRpb24gdG8gSEFWRV9NRVRBREFUQSwg
dGhlbiBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudAotICAgICAgICAvLyBuYW1l
ZCBsb2FkZWRtZXRhZGF0YSBhdCB0aGUgbWVkaWEgZWxlbWVudC4KLSAgICAgICAgbV9wcml2YXRl
LT5zZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEpOwordm9pZCBNZWRpYVNv
dXJjZTo6c3RvcCgpCit7CisgICAgbV9hc3luY0V2ZW50UXVldWUuY2xvc2UoKTsKKyAgICBpZiAo
IWlzQ2xvc2VkKCkpCisgICAgICAgIHNldFJlYWR5U3RhdGUoY2xvc2VkS2V5d29yZCgpKTsKKyAg
ICBtX3ByaXZhdGUuY2xlYXIoKTsKK30KIAotICAgICAgICAvLyAzLiBBYm9ydCB0aGVzZSBzdGVw
cy4KK3ZvaWQgTWVkaWFTb3VyY2U6Om9uUmVhZHlTdGF0ZUNoYW5nZShjb25zdCBBdG9taWNTdHJp
bmcmIG9sZFN0YXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1N0YXRlKQoreworICAgIGlmIChp
c09wZW4oKSkgeworICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5zb3VyY2VvcGVu
RXZlbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8g4oazIElmIGJ1ZmZlcmVk
IGZvciBhbGwgb2JqZWN0cyBpbiBhY3RpdmVTb3VyY2VCdWZmZXJzIGNvbnRhaW4gVGltZVJhbmdl
cyB0aGF0IGluY2x1ZGUgdGhlIGN1cnJlbnQKLSAgICAvLyBwbGF5YmFjayBwb3NpdGlvbiBhbmQg
ZW5vdWdoIGRhdGEgdG8gZW5zdXJlIHVuaW50ZXJydXB0ZWQgcGxheWJhY2s6Ci0gICAgaWYgKHN0
ZDo6YWxsX29mKGJlZ2luLCBlbmQsIFNvdXJjZUJ1ZmZlckJ1ZmZlcmVkSGFzRW5vdWdoKGN1cnJl
bnRUaW1lLCBtZWRpYUVsZW1lbnQoKS0+ZHVyYXRpb24oKSkpKSB7Ci0gICAgICAgIC8vIDEuIFNl
dCB0aGUgSFRNTE1lZGlhRWxlbWVudC5yZWFkeVN0YXRlIGF0dHJpYnV0ZSB0byBIQVZFX0VOT1VH
SF9EQVRBLgotICAgICAgICAvLyAyLiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVu
dCBuYW1lZCBjYW5wbGF5dGhyb3VnaCBhdCB0aGUgbWVkaWEgZWxlbWVudC4KLSAgICAgICAgLy8g
My4gUGxheWJhY2sgbWF5IHJlc3VtZSBhdCB0aGlzIHBvaW50IGlmIGl0IHdhcyBwcmV2aW91c2x5
IHN1c3BlbmRlZCBieSBhIHRyYW5zaXRpb24gdG8gSEFWRV9DVVJSRU5UX0RBVEEuCi0gICAgICAg
IG1fcHJpdmF0ZS0+c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGEpOwot
Ci0gICAgICAgIC8vIDQuIEFib3J0IHRoZXNlIHN0ZXBzLgorICAgIGlmIChvbGRTdGF0ZSA9PSBv
cGVuS2V5d29yZCgpICYmIG5ld1N0YXRlID09IGVuZGVkS2V5d29yZCgpKSB7CisgICAgICAgIHNj
aGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLnNvdXJjZWVuZGVkRXZlbnQpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgLy8g4oazIElmIGJ1ZmZlcmVkIGZvciBhdCBsZWFzdCBvbmUgb2Jq
ZWN0IGluIGFjdGl2ZVNvdXJjZUJ1ZmZlcnMgY29udGFpbnMgYSBUaW1lUmFuZ2UgdGhhdCBpbmNs
dWRlcwotICAgIC8vIHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uIGJ1dCBub3QgZW5vdWdo
IGRhdGEgdG8gZW5zdXJlIHVuaW50ZXJydXB0ZWQgcGxheWJhY2s6Ci0gICAgaWYgKHN0ZDo6YW55
X29mKGJlZ2luLCBlbmQsIFNvdXJjZUJ1ZmZlckJ1ZmZlcmVkSGFzRnV0dXJlKGN1cnJlbnRUaW1l
KSkpIHsKLSAgICAgICAgLy8gMS4gU2V0IHRoZSBIVE1MTWVkaWFFbGVtZW50LnJlYWR5U3RhdGUg
YXR0cmlidXRlIHRvIEhBVkVfRlVUVVJFX0RBVEEuCi0gICAgICAgIC8vIDIuIElmIHRoZSBwcmV2
aW91cyB2YWx1ZSBvZiBIVE1MTWVkaWFFbGVtZW50LnJlYWR5U3RhdGUgd2FzIGxlc3MgdGhhbiBI
QVZFX0ZVVFVSRV9EQVRBLCB0aGVuIHF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2ltcGxlIGV2ZW50
IG5hbWVkIGNhbnBsYXkgYXQgdGhlIG1lZGlhIGVsZW1lbnQuCi0gICAgICAgIC8vIDMuIFBsYXli
YWNrIG1heSByZXN1bWUgYXQgdGhpcyBwb2ludCBpZiBpdCB3YXMgcHJldmlvdXNseSBzdXNwZW5k
ZWQgYnkgYSB0cmFuc2l0aW9uIHRvIEhBVkVfQ1VSUkVOVF9EQVRBLgotICAgICAgICBtX3ByaXZh
dGUtPnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVGdXR1cmVEYXRhKTsKKyAgICBBU1NF
UlQoaXNDbG9zZWQoKSk7CiAKLSAgICAgICAgLy8gNC4gQWJvcnQgdGhlc2Ugc3RlcHMuCi0gICAg
ICAgIHJldHVybjsKKyAgICBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMtPmNsZWFyKCk7CisKKyAgICAv
LyBDbGVhciBTb3VyY2VCdWZmZXIgcmVmZXJlbmNlcyB0byB0aGlzIG9iamVjdC4KKyAgICBmb3Ig
KHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBtX3NvdXJjZUJ1ZmZlcnMtPmxlbmd0aCgpOyArK2kp
CisgICAgICAgIG1fc291cmNlQnVmZmVycy0+aXRlbShpKS0+cmVtb3ZlZEZyb21NZWRpYVNvdXJj
ZSgpOworICAgIG1fc291cmNlQnVmZmVycy0+Y2xlYXIoKTsKKyAgICAKKyAgICBzY2hlZHVsZUV2
ZW50KGV2ZW50TmFtZXMoKS5zb3VyY2VjbG9zZUV2ZW50KTsKK30KKworVmVjdG9yPFJlZlB0cjxU
aW1lUmFuZ2VzPj4gTWVkaWFTb3VyY2U6OmFjdGl2ZVJhbmdlcygpIGNvbnN0Cit7CisgICAgVmVj
dG9yPFJlZlB0cjxUaW1lUmFuZ2VzPj4gYWN0aXZlUmFuZ2VzKG1fYWN0aXZlU291cmNlQnVmZmVy
cy0+bGVuZ3RoKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVTb3VyY2VC
dWZmZXJzLT5sZW5ndGgoKTsgKytpKQorICAgICAgICBhY3RpdmVSYW5nZXNbaV0gPSBtX2FjdGl2
ZVNvdXJjZUJ1ZmZlcnMtPml0ZW0oaSktPmJ1ZmZlcmVkKEFTU0VSVF9OT19FWENFUFRJT04pOwor
CisgICAgcmV0dXJuIGFjdGl2ZVJhbmdlczsKK30KKworUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZh
dGU+IE1lZGlhU291cmNlOjpjcmVhdGVTb3VyY2VCdWZmZXJQcml2YXRlKGNvbnN0IENvbnRlbnRU
eXBlJiB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBSZWZQdHI8U291cmNlQnVmZmVy
UHJpdmF0ZT4gc291cmNlQnVmZmVyUHJpdmF0ZTsKKyAgICBzd2l0Y2ggKG1fcHJpdmF0ZS0+YWRk
U291cmNlQnVmZmVyKHR5cGUsIHNvdXJjZUJ1ZmZlclByaXZhdGUpKSB7CisgICAgY2FzZSBNZWRp
YVNvdXJjZVByaXZhdGU6Ok9rOiB7CisgICAgICAgIHJldHVybiBzb3VyY2VCdWZmZXJQcml2YXRl
OworICAgIH0KKyAgICBjYXNlIE1lZGlhU291cmNlUHJpdmF0ZTo6Tm90U3VwcG9ydGVkOgorICAg
ICAgICAvLyAyLjIgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlL2Rl
ZmF1bHQvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS5odG1sI3dpZGwtTWVkaWFTb3VyY2UtYWRk
U291cmNlQnVmZmVyLVNvdXJjZUJ1ZmZlci1ET01TdHJpbmctdHlwZQorICAgICAgICAvLyBTdGVw
IDI6IElmIHR5cGUgY29udGFpbnMgYSBNSU1FIHR5cGUgLi4uIHRoYXQgaXMgbm90IHN1cHBvcnRl
ZCB3aXRoIHRoZSB0eXBlcworICAgICAgICAvLyBzcGVjaWZpZWQgZm9yIHRoZSBvdGhlciBTb3Vy
Y2VCdWZmZXIgb2JqZWN0cyBpbiBzb3VyY2VCdWZmZXJzLCB0aGVuIHRocm93CisgICAgICAgIC8v
IGEgTk9UX1NVUFBPUlRFRF9FUlIgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAg
ICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgY2FzZSBNZWRpYVNvdXJjZVByaXZhdGU6OlJlYWNoZWRJZExpbWl0OgorICAgICAgICAvLyAy
LjIgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlL2RlZmF1bHQvbWVk
aWEtc291cmNlL21lZGlhLXNvdXJjZS5odG1sI3dpZGwtTWVkaWFTb3VyY2UtYWRkU291cmNlQnVm
ZmVyLVNvdXJjZUJ1ZmZlci1ET01TdHJpbmctdHlwZQorICAgICAgICAvLyBTdGVwIDM6IElmIHRo
ZSB1c2VyIGFnZW50IGNhbid0IGhhbmRsZSBhbnkgbW9yZSBTb3VyY2VCdWZmZXIgb2JqZWN0cyB0
aGVuIHRocm93CisgICAgICAgIC8vIGEgUVVPVEFfRVhDRUVERURfRVJSIGV4Y2VwdGlvbiBhbmQg
YWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgICAgIGVjID0gUVVPVEFfRVhDRUVERURfRVJSOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICAvLyDihrMgSWYgYnVmZmVyZWQgZm9y
IGF0IGxlYXN0IG9uZSBvYmplY3QgaW4gYWN0aXZlU291cmNlQnVmZmVycyBjb250YWlucyBhIFRp
bWVSYW5nZSB0aGF0IGVuZHMKLSAgICAvLyBhdCB0aGUgY3VycmVudCBwbGF5YmFjayBwb3NpdGlv
biBhbmQgZG9lcyBub3QgaGF2ZSBhIHJhbmdlIGNvdmVyaW5nIHRoZSB0aW1lIGltbWVkaWF0ZWx5
Ci0gICAgLy8gYWZ0ZXIgdGhlIGN1cnJlbnQgcG9zaXRpb246Ci0gICAgLy8gTk9URTogTG9naWNh
bGx5LCAhKGFsbCBvYmplY3RzIGRvIG5vdCBjb250YWluIGN1cnJlbnRUaW1lKSA9PSAoc29tZSBv
YmplY3RzIGNvbnRhaW4gY3VycmVudCB0aW1lKQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBudWxscHRyOworfQogCi0gICAgLy8gMS4gU2V0IHRoZSBIVE1MTWVkaWFFbGVt
ZW50LnJlYWR5U3RhdGUgYXR0cmlidXRlIHRvIEhBVkVfQ1VSUkVOVF9EQVRBLgotICAgIC8vIDIu
IElmIHRoaXMgaXMgdGhlIGZpcnN0IHRyYW5zaXRpb24gdG8gSEFWRV9DVVJSRU5UX0RBVEEsIHRo
ZW4gcXVldWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUKLSAgICAvLyBldmVudCBuYW1lZCBsb2Fk
ZWRkYXRhIGF0IHRoZSBtZWRpYSBlbGVtZW50LgotICAgIC8vIDMuIFBsYXliYWNrIGlzIHN1c3Bl
bmRlZCBhdCB0aGlzIHBvaW50IHNpbmNlIHRoZSBtZWRpYSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBl
bm91Z2ggZGF0YSB0bwotICAgIC8vIGFkdmFuY2UgdGhlIG1lZGlhIHRpbWVsaW5lLgotICAgIG1f
cHJpdmF0ZS0+c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhKTsKK3Zv
aWQgTWVkaWFTb3VyY2U6OnNjaGVkdWxlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5h
bWUpCit7CisgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
LCBmYWxzZSwgZmFsc2UpOworICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7CiAKLSAgICAvLyA0
LiBBYm9ydCB0aGVzZSBzdGVwcy4KKyAgICBtX2FzeW5jRXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQo
ZXZlbnQucmVsZWFzZSgpKTsKK30KKworU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogTWVkaWFTb3Vy
Y2U6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBBY3RpdmVE
T01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKIH0KIAotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorRXZlbnRUYXJnZXRJbnRlcmZhY2UgTWVkaWFTb3VyY2U6OmV2ZW50VGFyZ2V0SW50
ZXJmYWNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTWVkaWFTb3VyY2VFdmVudFRhcmdldEludGVy
ZmFjZVR5cGU7Cit9CisKK1VSTFJlZ2lzdHJ5JiBNZWRpYVNvdXJjZTo6cmVnaXN0cnkoKSBjb25z
dAoreworICAgIHJldHVybiBNZWRpYVNvdXJjZVJlZ2lzdHJ5OjpyZWdpc3RyeSgpOworfQorCit9
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJj
ZS9NZWRpYVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRp
YVNvdXJjZS5oCmluZGV4IGUwZDIwYzdjYmFmZmRiMzA3YzI0NjNkNzdiMTZmNzljYWUyODA4YzUu
LmYxM2EzOTlmOTk3YWRkMDdhMzJjZTM1ZDg4ZmZmNGQ1ODU1ZDBkNzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmgKQEAgLTMzLDE5ICsz
Myw1NiBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIAotI2luY2x1ZGUgIk1lZGlhU291
cmNlQmFzZS5oIgorI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkV2ZW50
VGFyZ2V0LmgiCisjaW5jbHVkZSAiR2VuZXJpY0V2ZW50UXVldWUuaCIKKyNpbmNsdWRlICJIVE1M
TWVkaWFTb3VyY2UuaCIKKyNpbmNsdWRlICJNZWRpYVNvdXJjZVByaXZhdGUuaCIKICNpbmNsdWRl
ICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNsdWRlICJTb3VyY2VCdWZmZXIuaCIKICNpbmNsdWRl
ICJTb3VyY2VCdWZmZXJMaXN0LmgiCisjaW5jbHVkZSAiVVJMUmVnaXN0cnkuaCIKKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIE1lZGlhU291
cmNlIDogcHVibGljIE1lZGlhU291cmNlQmFzZSwgcHVibGljIFNjcmlwdFdyYXBwYWJsZSB7Citj
bGFzcyBHZW5lcmljRXZlbnRRdWV1ZTsKKworY2xhc3MgTWVkaWFTb3VyY2UgOiBwdWJsaWMgUmVm
Q291bnRlZDxNZWRpYVNvdXJjZT4sIHB1YmxpYyBIVE1MTWVkaWFTb3VyY2UsIHB1YmxpYyBBY3Rp
dmVET01PYmplY3QsIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRhLCBwdWJsaWMgU2Ny
aXB0V3JhcHBhYmxlIHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBv
cGVuS2V5d29yZCgpOworICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGNsb3NlZEtleXdv
cmQoKTsKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBlbmRlZEtleXdvcmQoKTsKKwog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU291cmNlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYpOwogICAgIHZpcnR1YWwgfk1lZGlhU291cmNlKCk7CiAKKyAgICB2b2lkIGFkZGVk
VG9SZWdpc3RyeSgpOworICAgIHZvaWQgcmVtb3ZlZEZyb21SZWdpc3RyeSgpOworICAgIHZvaWQg
b3BlbklmSW5FbmRlZFN0YXRlKCk7CisgICAgYm9vbCBpc09wZW4oKSBjb25zdDsKKyAgICB2b2lk
IHNvdXJjZUJ1ZmZlckRpZENoYW5nZUFjaXR2ZVN0YXRlKFNvdXJjZUJ1ZmZlciosIGJvb2wpOwor
CisgICAgLy8gSFRNTE1lZGlhU291cmNlCisgICAgdmlydHVhbCBib29sIGF0dGFjaFRvRWxlbWVu
dChIVE1MTWVkaWFFbGVtZW50KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFByaXZh
dGVBbmRPcGVuKFBhc3NSZWY8TWVkaWFTb3VyY2VQcml2YXRlPikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGNsb3NlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGlzQ2xvc2VkKCkg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVmSFRNTE1lZGlhU291cmNlKCkgT1ZFUlJJ
REUgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZkhUTUxNZWRpYVNvdXJjZSgpIE9W
RVJSSURFIHsgZGVyZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBtb25pdG9yU291cmNlQnVmZmVy
cygpIE9WRVJSSURFOworCisgICAgdm9pZCBzZXREdXJhdGlvbihkb3VibGUsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHJlYWR5U3RhdGUoKSBjb25zdCB7IHJldHVy
biBtX3JlYWR5U3RhdGU7IH0KKyAgICB2b2lkIHNldFJlYWR5U3RhdGUoY29uc3QgQXRvbWljU3Ry
aW5nJik7CisgICAgdm9pZCBlbmRPZlN0cmVhbShjb25zdCBBdG9taWNTdHJpbmcmIGVycm9yLCBF
eGNlcHRpb25Db2RlJik7CisKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX21lZGlhRWxlbWVudDsgfQorCiAgICAgLy8gTWVkaWFTb3VyY2UuaWRs
IG1ldGhvZHMKICAgICBTb3VyY2VCdWZmZXJMaXN0KiBzb3VyY2VCdWZmZXJzKCkgeyByZXR1cm4g
bV9zb3VyY2VCdWZmZXJzLmdldCgpOyB9CiAgICAgU291cmNlQnVmZmVyTGlzdCogYWN0aXZlU291
cmNlQnVmZmVycygpIHsgcmV0dXJuIG1fYWN0aXZlU291cmNlQnVmZmVycy5nZXQoKTsgfQpAQCAt
NTMsMjggKzkwLDQxIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZVNvdXJjZUJ1ZmZlcihTb3Vy
Y2VCdWZmZXIqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgc3RhdGljIGJvb2wgaXNUeXBlU3VwcG9y
dGVkKGNvbnN0IFN0cmluZyYgdHlwZSk7CiAKKyAgICAvLyBBY3RpdmVET01PYmplY3QgaW50ZXJm
YWNlCisgICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgT1ZFUlJJREU7CisKICAgICAvLyBFdmVudFRhcmdl
dCBpbnRlcmZhY2UKKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVmRXZlbnRUYXJnZXQoKSBPVkVSUklERSBGSU5BTCB7IHJlZigpOyB9CisgICAgdmlydHVhbCB2
b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBPVkVSUklERSBGSU5BTCB7IGRlcmVmKCk7IH0KICAgICB2
aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Qg
T1ZFUlJJREU7CiAKLSAgICB1c2luZyBSZWZDb3VudGVkPE1lZGlhU291cmNlQmFzZT46OnJlZjsK
LSAgICB1c2luZyBSZWZDb3VudGVkPE1lZGlhU291cmNlQmFzZT46OmRlcmVmOwotCi0gICAgdm9p
ZCBzb3VyY2VCdWZmZXJEaWRDaGFuZ2VBY2l0dmVTdGF0ZShTb3VyY2VCdWZmZXIqLCBib29sKTsK
KyAgICAvLyBVUkxSZWdpc3RyYWJsZSBpbnRlcmZhY2UKKyAgICB2aXJ0dWFsIFVSTFJlZ2lzdHJ5
JiByZWdpc3RyeSgpIGNvbnN0IE9WRVJSSURFOwogCi0gICAgdmlydHVhbCB2b2lkIG1vbml0b3JT
b3VyY2VCdWZmZXJzKCkgT1ZFUlJJREU7CisgICAgdXNpbmcgUmVmQ291bnRlZDxNZWRpYVNvdXJj
ZT46OnJlZjsKKyAgICB1c2luZyBSZWZDb3VudGVkPE1lZGlhU291cmNlPjo6ZGVyZWY7CiAKLXBy
aXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgTWVkaWFTb3VyY2UoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYpOwogCi0gICAgLy8gTWVkaWFTb3VyY2VCYXNlIGludGVyZmFjZQotICAgIHZp
cnR1YWwgdm9pZCBvblJlYWR5U3RhdGVDaGFuZ2UoY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3Qg
QXRvbWljU3RyaW5nJikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBWZWN0b3I8UmVmUHRyPFRpbWVS
YW5nZXM+PiBhY3RpdmVSYW5nZXMoKSBjb25zdCBPVkVSUklERTsKKyAgICB2b2lkIG9uUmVhZHlT
dGF0ZUNoYW5nZShjb25zdCBBdG9taWNTdHJpbmcmIG9sZFN0YXRlLCBjb25zdCBBdG9taWNTdHJp
bmcmIG5ld1N0YXRlKTsKKyAgICBWZWN0b3I8UmVmUHRyPFRpbWVSYW5nZXM+PiBhY3RpdmVSYW5n
ZXMoKSBjb25zdDsKKworICAgIFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiBjcmVhdGVTb3Vy
Y2VCdWZmZXJQcml2YXRlKGNvbnN0IENvbnRlbnRUeXBlJiwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZvaWQgc2NoZWR1bGVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSk7CisgICAg
R2VuZXJpY0V2ZW50UXVldWUmIGFzeW5jRXZlbnRRdWV1ZSgpIHsgcmV0dXJuIG1fYXN5bmNFdmVu
dFF1ZXVlOyB9CiAKKyAgICBSZWZQdHI8TWVkaWFTb3VyY2VQcml2YXRlPiBtX3ByaXZhdGU7CiAg
ICAgUmVmUHRyPFNvdXJjZUJ1ZmZlckxpc3Q+IG1fc291cmNlQnVmZmVyczsKICAgICBSZWZQdHI8
U291cmNlQnVmZmVyTGlzdD4gbV9hY3RpdmVTb3VyY2VCdWZmZXJzOworICAgIEhUTUxNZWRpYUVs
ZW1lbnQqIG1fbWVkaWFFbGVtZW50OworICAgIEF0b21pY1N0cmluZyBtX3JlYWR5U3RhdGU7Cisg
ICAgR2VuZXJpY0V2ZW50UXVldWUgbV9hc3luY0V2ZW50UXVldWU7CiB9OwogCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCit9CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlQmFzZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGYxZTQ2ZWZhNTQwZmQwODZkMGQ2YjczOGI0ZGE4MjQ5MThjZTc2OGYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZUJhc2UuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMzA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTWVkaWFTb3Vy
Y2VCYXNlLmgiCi0KLSNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQotCi0jaW5jbHVkZSAiRXZlbnQu
aCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBs
YWNlaG9sZGVyLmgiCi0jaW5jbHVkZSAiR2VuZXJpY0V2ZW50UXVldWUuaCIKLSNpbmNsdWRlICJM
b2dnaW5nLmgiCi0jaW5jbHVkZSAiTWVkaWFTb3VyY2VSZWdpc3RyeS5oIgotI2luY2x1ZGUgIlNv
dXJjZUJ1ZmZlclByaXZhdGUuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotTWVk
aWFTb3VyY2VCYXNlOjpNZWRpYVNvdXJjZUJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCkKLSAgICA6IEFjdGl2ZURPTU9iamVjdCgmY29udGV4dCkKLSAgICAsIG1fbWVkaWFFbGVt
ZW50KDApCi0gICAgLCBtX3JlYWR5U3RhdGUoY2xvc2VkS2V5d29yZCgpKQotICAgICwgbV9hc3lu
Y0V2ZW50UXVldWUoKnRoaXMpCi17Ci19Ci0KLU1lZGlhU291cmNlQmFzZTo6fk1lZGlhU291cmNl
QmFzZSgpCi17Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFTb3VyY2VCYXNlOjpvcGVu
S2V5d29yZCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcs
IG9wZW4sICgib3BlbiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAg
ICByZXR1cm4gb3BlbjsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVNvdXJjZUJhc2U6
OmNsb3NlZEtleXdvcmQoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWlj
U3RyaW5nLCBjbG9zZWQsICgiY2xvc2VkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCkpOwotICAgIHJldHVybiBjbG9zZWQ7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgTWVk
aWFTb3VyY2VCYXNlOjplbmRlZEtleXdvcmQoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgQXRvbWljU3RyaW5nLCBlbmRlZCwgKCJlbmRlZCIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpKTsKLSAgICByZXR1cm4gZW5kZWQ7Ci19Ci0KLXZvaWQgTWVkaWFTb3Vy
Y2VCYXNlOjpzZXRQcml2YXRlQW5kT3BlbihQYXNzUmVmPE1lZGlhU291cmNlUHJpdmF0ZT4gbWVk
aWFTb3VyY2VQcml2YXRlKQotewotICAgIEFTU0VSVCghbV9wcml2YXRlKTsKLSAgICBBU1NFUlQo
bV9tZWRpYUVsZW1lbnQpOwotICAgIG1fcHJpdmF0ZSA9IHN0ZDo6bW92ZShtZWRpYVNvdXJjZVBy
aXZhdGUpOwotICAgIHNldFJlYWR5U3RhdGUob3BlbktleXdvcmQoKSk7Ci19Ci0KLXZvaWQgTWVk
aWFTb3VyY2VCYXNlOjphZGRlZFRvUmVnaXN0cnkoKQotewotICAgIHNldFBlbmRpbmdBY3Rpdml0
eSh0aGlzKTsKLX0KLQotdm9pZCBNZWRpYVNvdXJjZUJhc2U6OnJlbW92ZWRGcm9tUmVnaXN0cnko
KQotewotICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwotfQotCi1kb3VibGUgTWVkaWFT
b3VyY2VCYXNlOjpkdXJhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzQ2xvc2VkKCkgPyBz
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCkgOiBtX3ByaXZhdGUtPmR1cmF0
aW9uKCk7Ci19Ci0KLVBhc3NSZWZQdHI8VGltZVJhbmdlcz4gTWVkaWFTb3VyY2VCYXNlOjpidWZm
ZXJlZCgpIGNvbnN0Ci17Ci0gICAgLy8gSW1wbGVtZW50cyBNZWRpYVNvdXJjZSBhbGdvcml0aG0g
Zm9yIEhUTUxNZWRpYUVsZW1lbnQuYnVmZmVyZWQuCi0gICAgLy8gaHR0cHM6Ly9kdmNzLnczLm9y
Zy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlL2RlZmF1bHQvbWVkaWEtc291cmNlL21lZGlhLXNvdXJj
ZS5odG1sI2h0bWxtZWRpYWVsZW1lbnQtZXh0ZW5zaW9ucwotICAgIFZlY3RvcjxSZWZQdHI8VGlt
ZVJhbmdlcz4+IHJhbmdlcyA9IGFjdGl2ZVJhbmdlcygpOwotCi0gICAgLy8gMS4gSWYgYWN0aXZl
U291cmNlQnVmZmVycy5sZW5ndGggZXF1YWxzIDAgdGhlbiByZXR1cm4gYW4gZW1wdHkgVGltZVJh
bmdlcyBvYmplY3QgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgotICAgIGlmIChyYW5nZXMuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gVGltZVJhbmdlczo6Y3JlYXRlKCk7Ci0KLSAgICAvLyAyLiBM
ZXQgYWN0aXZlIHJhbmdlcyBiZSB0aGUgcmFuZ2VzIHJldHVybmVkIGJ5IGJ1ZmZlcmVkIGZvciBl
YWNoIFNvdXJjZUJ1ZmZlciBvYmplY3QgaW4gYWN0aXZlU291cmNlQnVmZmVycy4KLSAgICAvLyAz
LiBMZXQgaGlnaGVzdCBlbmQgdGltZSBiZSB0aGUgbGFyZ2VzdCByYW5nZSBlbmQgdGltZSBpbiB0
aGUgYWN0aXZlIHJhbmdlcy4KLSAgICBkb3VibGUgaGlnaGVzdEVuZFRpbWUgPSAtMTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHJhbmdlcy5zaXplKCk7ICsraSkgewotICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSByYW5nZXNbaV0tPmxlbmd0aCgpOwotICAgICAgICBpZiAobGVuZ3RoKQot
ICAgICAgICAgICAgaGlnaGVzdEVuZFRpbWUgPSBzdGQ6Om1heChoaWdoZXN0RW5kVGltZSwgcmFu
Z2VzW2ldLT5lbmQobGVuZ3RoIC0gMSwgQVNTRVJUX05PX0VYQ0VQVElPTikpOwotICAgIH0KLQot
ICAgIC8vIFJldHVybiBhbiBlbXB0eSByYW5nZSBpZiBhbGwgcmFuZ2VzIGFyZSBlbXB0eS4KLSAg
ICBpZiAoaGlnaGVzdEVuZFRpbWUgPCAwKQotICAgICAgICByZXR1cm4gVGltZVJhbmdlczo6Y3Jl
YXRlKCk7Ci0KLSAgICAvLyA0LiBMZXQgaW50ZXJzZWN0aW9uIHJhbmdlcyBlcXVhbCBhIFRpbWVS
YW5nZSBvYmplY3QgY29udGFpbmluZyBhIHNpbmdsZSByYW5nZSBmcm9tIDAgdG8gaGlnaGVzdCBl
bmQgdGltZS4KLSAgICBSZWZQdHI8VGltZVJhbmdlcz4gaW50ZXJzZWN0aW9uUmFuZ2VzID0gVGlt
ZVJhbmdlczo6Y3JlYXRlKDAsIGhpZ2hlc3RFbmRUaW1lKTsKLQotICAgIC8vIDUuIEZvciBlYWNo
IFNvdXJjZUJ1ZmZlciBvYmplY3QgaW4gYWN0aXZlU291cmNlQnVmZmVycyBydW4gdGhlIGZvbGxv
d2luZyBzdGVwczoKLSAgICBib29sIGVuZGVkID0gcmVhZHlTdGF0ZSgpID09IGVuZGVkS2V5d29y
ZCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmFuZ2VzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIC8vIDUuMSBMZXQgc291cmNlIHJhbmdlcyBlcXVhbCB0aGUgcmFuZ2VzIHJldHVybmVk
IGJ5IHRoZSBidWZmZXJlZCBhdHRyaWJ1dGUgb24gdGhlIGN1cnJlbnQgU291cmNlQnVmZmVyLgot
ICAgICAgICBUaW1lUmFuZ2VzKiBzb3VyY2VSYW5nZXMgPSByYW5nZXNbaV0uZ2V0KCk7Ci0KLSAg
ICAgICAgLy8gNS4yIElmIHJlYWR5U3RhdGUgaXMgImVuZGVkIiwgdGhlbiBzZXQgdGhlIGVuZCB0
aW1lIG9uIHRoZSBsYXN0IHJhbmdlIGluIHNvdXJjZSByYW5nZXMgdG8gaGlnaGVzdCBlbmQgdGlt
ZS4KLSAgICAgICAgaWYgKGVuZGVkICYmIHNvdXJjZVJhbmdlcy0+bGVuZ3RoKCkpCi0gICAgICAg
ICAgICBzb3VyY2VSYW5nZXMtPmFkZChzb3VyY2VSYW5nZXMtPnN0YXJ0KHNvdXJjZVJhbmdlcy0+
bGVuZ3RoKCkgLSAxLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSwgaGlnaGVzdEVuZFRpbWUpOwotCi0g
ICAgICAgIC8vIDUuMyBMZXQgbmV3IGludGVyc2VjdGlvbiByYW5nZXMgZXF1YWwgdGhlIHRoZSBp
bnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgaW50ZXJzZWN0aW9uIHJhbmdlcyBhbmQgdGhlIHNvdXJj
ZSByYW5nZXMuCi0gICAgICAgIC8vIDUuNCBSZXBsYWNlIHRoZSByYW5nZXMgaW4gaW50ZXJzZWN0
aW9uIHJhbmdlcyB3aXRoIHRoZSBuZXcgaW50ZXJzZWN0aW9uIHJhbmdlcy4KLSAgICAgICAgaW50
ZXJzZWN0aW9uUmFuZ2VzLT5pbnRlcnNlY3RXaXRoKHNvdXJjZVJhbmdlcyk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGludGVyc2VjdGlvblJhbmdlcy5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgTWVkaWFT
b3VyY2VCYXNlOjpzZXREdXJhdGlvbihkb3VibGUgZHVyYXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIGlmIChkdXJhdGlvbiA8IDAuMCB8fCBzdGQ6OmlzbmFuKGR1cmF0aW9uKSkgewot
ICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoIWlzT3BlbigpKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9wcml2YXRlLT5zZXREdXJhdGlvbihkdXJhdGlv
bik7Ci19Ci0KLQotdm9pZCBNZWRpYVNvdXJjZUJhc2U6OnNldFJlYWR5U3RhdGUoY29uc3QgQXRv
bWljU3RyaW5nJiBzdGF0ZSkKLXsKLSAgICBBU1NFUlQoc3RhdGUgPT0gb3BlbktleXdvcmQoKSB8
fCBzdGF0ZSA9PSBjbG9zZWRLZXl3b3JkKCkgfHwgc3RhdGUgPT0gZW5kZWRLZXl3b3JkKCkpOwot
Ci0gICAgQXRvbWljU3RyaW5nIG9sZFN0YXRlID0gcmVhZHlTdGF0ZSgpOwotICAgIExPRyhNZWRp
YSwgIk1lZGlhU291cmNlQmFzZTo6c2V0UmVhZHlTdGF0ZSgpICVwIDogJXMgLT4gJXMiLCB0aGlz
LCBvbGRTdGF0ZS5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgc3RhdGUuc3RyaW5nKCkuYXNjaWko
KS5kYXRhKCkpOwotCi0gICAgaWYgKHN0YXRlID09IGNsb3NlZEtleXdvcmQoKSkgewotICAgICAg
ICBtX3ByaXZhdGUuY2xlYXIoKTsKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQgPSAwOwotICAgIH0K
LQotICAgIGlmIChvbGRTdGF0ZSA9PSBzdGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9y
ZWFkeVN0YXRlID0gc3RhdGU7Ci0KLSAgICBvblJlYWR5U3RhdGVDaGFuZ2Uob2xkU3RhdGUsIHN0
YXRlKTsKLX0KLQotdm9pZCBNZWRpYVNvdXJjZUJhc2U6OmVuZE9mU3RyZWFtKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXJyb3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBuZXR3b3JrLCAoIm5ldHdvcmsiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBBdG9taWNTdHJpbmcsIGRlY29kZSwgKCJkZWNvZGUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSk7Ci0KLSAgICAvLyAzLjEgaHR0cDovL2R2Y3MudzMub3JnL2hnL2h0bWwt
bWVkaWEvcmF3LWZpbGUvdGlwL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UuaHRtbCNkb20tZW5k
b2ZzdHJlYW0KLSAgICAvLyAxLiBJZiB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgaXMgbm90IGlu
IHRoZSAib3BlbiIgc3RhdGUgdGhlbiB0aHJvdyBhbgotICAgIC8vIElOVkFMSURfU1RBVEVfRVJS
IGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCi0gICAgaWYgKCFpc09wZW4oKSkgewot
ICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgTWVkaWFTb3VyY2VQcml2YXRlOjpFbmRPZlN0cmVhbVN0YXR1cyBlb3NTdGF0dXMgPSBN
ZWRpYVNvdXJjZVByaXZhdGU6OkVvc05vRXJyb3I7Ci0KLSAgICBpZiAoZXJyb3IuaXNOdWxsKCkg
fHwgZXJyb3IuaXNFbXB0eSgpKQotICAgICAgICBlb3NTdGF0dXMgPSBNZWRpYVNvdXJjZVByaXZh
dGU6OkVvc05vRXJyb3I7Ci0gICAgZWxzZSBpZiAoZXJyb3IgPT0gbmV0d29yaykKLSAgICAgICAg
ZW9zU3RhdHVzID0gTWVkaWFTb3VyY2VQcml2YXRlOjpFb3NOZXR3b3JrRXJyb3I7Ci0gICAgZWxz
ZSBpZiAoZXJyb3IgPT0gZGVjb2RlKQotICAgICAgICBlb3NTdGF0dXMgPSBNZWRpYVNvdXJjZVBy
aXZhdGU6OkVvc0RlY29kZUVycm9yOwotICAgIGVsc2UgewotICAgICAgICBlYyA9IElOVkFMSURf
QUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIDIuIENoYW5nZSB0
aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgdmFsdWUgdG8gImVuZGVkIi4KLSAgICBzZXRSZWFkeVN0
YXRlKGVuZGVkS2V5d29yZCgpKTsKLSAgICBtX3ByaXZhdGUtPm1hcmtFbmRPZlN0cmVhbShlb3NT
dGF0dXMpOwotfQotCi1ib29sIE1lZGlhU291cmNlQmFzZTo6aXNPcGVuKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gcmVhZHlTdGF0ZSgpID09IG9wZW5LZXl3b3JkKCk7Ci19Ci0KLWJvb2wgTWVkaWFT
b3VyY2VCYXNlOjppc0Nsb3NlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlYWR5U3RhdGUoKSA9
PSBjbG9zZWRLZXl3b3JkKCk7Ci19Ci0KLXZvaWQgTWVkaWFTb3VyY2VCYXNlOjpjbG9zZSgpCi17
Ci0gICAgc2V0UmVhZHlTdGF0ZShjbG9zZWRLZXl3b3JkKCkpOwotfQotCi1ib29sIE1lZGlhU291
cmNlQmFzZTo6YXR0YWNoVG9FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQpCi17Ci0g
ICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NF
UlQoaXNDbG9zZWQoKSk7Ci0KLSAgICBtX21lZGlhRWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWVkaWFTb3VyY2VCYXNlOjpvcGVuSWZJbkVuZGVkU3RhdGUo
KQotewotICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gZW5kZWRLZXl3b3JkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHNldFJlYWR5U3RhdGUob3BlbktleXdvcmQoKSk7Ci0gICAgbV9wcml2YXRl
LT51bm1hcmtFbmRPZlN0cmVhbSgpOwotfQotCi1ib29sIE1lZGlhU291cmNlQmFzZTo6aGFzUGVu
ZGluZ0FjdGl2aXR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlIHx8IG1fYXN5bmNF
dmVudFF1ZXVlLmhhc1BlbmRpbmdFdmVudHMoKQotICAgICAgICB8fCBBY3RpdmVET01PYmplY3Q6
Omhhc1BlbmRpbmdBY3Rpdml0eSgpOwotfQotCi12b2lkIE1lZGlhU291cmNlQmFzZTo6c3RvcCgp
Ci17Ci0gICAgbV9hc3luY0V2ZW50UXVldWUuY2xvc2UoKTsKLSAgICBpZiAoIWlzQ2xvc2VkKCkp
Ci0gICAgICAgIHNldFJlYWR5U3RhdGUoY2xvc2VkS2V5d29yZCgpKTsKLSAgICBtX3ByaXZhdGUu
Y2xlYXIoKTsKLX0KLQotUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+IE1lZGlhU291cmNlQmFz
ZTo6Y3JlYXRlU291cmNlQnVmZmVyUHJpdmF0ZShjb25zdCBDb250ZW50VHlwZSYgdHlwZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+IHNvdXJj
ZUJ1ZmZlclByaXZhdGU7Ci0gICAgc3dpdGNoIChtX3ByaXZhdGUtPmFkZFNvdXJjZUJ1ZmZlcih0
eXBlLCBzb3VyY2VCdWZmZXJQcml2YXRlKSkgewotICAgIGNhc2UgTWVkaWFTb3VyY2VQcml2YXRl
OjpPazogewotICAgICAgICByZXR1cm4gc291cmNlQnVmZmVyUHJpdmF0ZTsKLSAgICB9Ci0gICAg
Y2FzZSBNZWRpYVNvdXJjZVByaXZhdGU6Ok5vdFN1cHBvcnRlZDoKLSAgICAgICAgLy8gMi4yIGh0
dHBzOi8vZHZjcy53My5vcmcvaGcvaHRtbC1tZWRpYS9yYXctZmlsZS9kZWZhdWx0L21lZGlhLXNv
dXJjZS9tZWRpYS1zb3VyY2UuaHRtbCN3aWRsLU1lZGlhU291cmNlLWFkZFNvdXJjZUJ1ZmZlci1T
b3VyY2VCdWZmZXItRE9NU3RyaW5nLXR5cGUKLSAgICAgICAgLy8gU3RlcCAyOiBJZiB0eXBlIGNv
bnRhaW5zIGEgTUlNRSB0eXBlIC4uLiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCB0aGUgdHlw
ZXMKLSAgICAgICAgLy8gc3BlY2lmaWVkIGZvciB0aGUgb3RoZXIgU291cmNlQnVmZmVyIG9iamVj
dHMgaW4gc291cmNlQnVmZmVycywgdGhlbiB0aHJvdwotICAgICAgICAvLyBhIE5PVF9TVVBQT1JU
RURfRVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCi0gICAgICAgIGVjID0gTk9U
X1NVUFBPUlRFRF9FUlI7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNhc2UgTWVkaWFT
b3VyY2VQcml2YXRlOjpSZWFjaGVkSWRMaW1pdDoKLSAgICAgICAgLy8gMi4yIGh0dHBzOi8vZHZj
cy53My5vcmcvaGcvaHRtbC1tZWRpYS9yYXctZmlsZS9kZWZhdWx0L21lZGlhLXNvdXJjZS9tZWRp
YS1zb3VyY2UuaHRtbCN3aWRsLU1lZGlhU291cmNlLWFkZFNvdXJjZUJ1ZmZlci1Tb3VyY2VCdWZm
ZXItRE9NU3RyaW5nLXR5cGUKLSAgICAgICAgLy8gU3RlcCAzOiBJZiB0aGUgdXNlciBhZ2VudCBj
YW4ndCBoYW5kbGUgYW55IG1vcmUgU291cmNlQnVmZmVyIG9iamVjdHMgdGhlbiB0aHJvdwotICAg
ICAgICAvLyBhIFFVT1RBX0VYQ0VFREVEX0VSUiBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0
ZXBzLgotICAgICAgICBlYyA9IFFVT1RBX0VYQ0VFREVEX0VSUjsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0KLXZvaWQgTWVkaWFTb3VyY2VCYXNlOjpzY2hlZHVsZUV2ZW50KGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnROYW1lKQotewotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZSwgZmFsc2UsIGZhbHNlKTsKLSAgICBldmVudC0+c2V0VGFyZ2V0
KHRoaXMpOwotCi0gICAgbV9hc3luY0V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50KGV2ZW50LnJlbGVh
c2UoKSk7Ci19Ci0KLVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIE1lZGlhU291cmNlQmFzZTo6c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEFjdGl2ZURPTU9iamVj
dDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotfQotCi1VUkxSZWdpc3RyeSYgTWVkaWFTb3Vy
Y2VCYXNlOjpyZWdpc3RyeSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIE1lZGlhU291cmNlUmVnaXN0
cnk6OnJlZ2lzdHJ5KCk7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlQmFzZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZUJhc2UuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDk4ZmM0OTNiNTdiN2Q4ZTI1MjNkNTk5OWQ4ZmE4MGRmY2I1NDI3Mi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlQmFzZS5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE1lZGlhU291cmNlQmFzZV9oCi0jZGVmaW5lIE1lZGlh
U291cmNlQmFzZV9oCi0KLSNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQotCi0jaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKLSNpbmNsdWRlICJHZW5l
cmljRXZlbnRRdWV1ZS5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYVNvdXJjZS5oIgotI2luY2x1ZGUg
Ik1lZGlhU291cmNlUHJpdmF0ZS5oIgotI2luY2x1ZGUgIlVSTFJlZ2lzdHJ5LmgiCi0jaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHZW5lcmlj
RXZlbnRRdWV1ZTsKLQotY2xhc3MgTWVkaWFTb3VyY2VCYXNlIDogcHVibGljIFJlZkNvdW50ZWQ8
TWVkaWFTb3VyY2VCYXNlPiwgcHVibGljIEhUTUxNZWRpYVNvdXJjZSwgcHVibGljIEFjdGl2ZURP
TU9iamVjdCwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEgewotcHVibGljOgotICAg
IHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIG9wZW5LZXl3b3JkKCk7Ci0gICAgc3RhdGljIGNv
bnN0IEF0b21pY1N0cmluZyYgY2xvc2VkS2V5d29yZCgpOwotICAgIHN0YXRpYyBjb25zdCBBdG9t
aWNTdHJpbmcmIGVuZGVkS2V5d29yZCgpOwotCi0gICAgdmlydHVhbCB+TWVkaWFTb3VyY2VCYXNl
KCk7Ci0KLSAgICB2b2lkIGFkZGVkVG9SZWdpc3RyeSgpOwotICAgIHZvaWQgcmVtb3ZlZEZyb21S
ZWdpc3RyeSgpOwotICAgIHZvaWQgb3BlbklmSW5FbmRlZFN0YXRlKCk7Ci0gICAgYm9vbCBpc09w
ZW4oKSBjb25zdDsKLQotICAgIC8vIEhUTUxNZWRpYVNvdXJjZQotICAgIHZpcnR1YWwgYm9vbCBh
dHRhY2hUb0VsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopIE9WRVJSSURFOwotICAgIHZpcnR1YWwg
dm9pZCBzZXRQcml2YXRlQW5kT3BlbihQYXNzUmVmPE1lZGlhU291cmNlUHJpdmF0ZT4pIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9v
bCBpc0Nsb3NlZCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9u
KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IGJ1
ZmZlcmVkKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHJlZkhUTUxNZWRpYVNv
dXJjZSgpIE9WRVJSSURFIHsgcmVmKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVyZWZIVE1MTWVk
aWFTb3VyY2UoKSBPVkVSUklERSB7IGRlcmVmKCk7IH0KLQotICAgIHZvaWQgc2V0RHVyYXRpb24o
ZG91YmxlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiByZWFkeVN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkeVN0YXRlOyB9Ci0gICAgdm9pZCBzZXRSZWFkeVN0
YXRlKGNvbnN0IEF0b21pY1N0cmluZyYpOwotICAgIHZvaWQgZW5kT2ZTdHJlYW0oY29uc3QgQXRv
bWljU3RyaW5nJiBlcnJvciwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgSFRNTE1lZGlhRWxlbWVu
dCogbWVkaWFFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYUVsZW1lbnQ7IH0KLQotICAg
IC8vIEFjdGl2ZURPTU9iamVjdCBpbnRlcmZhY2UKLSAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGlu
Z0FjdGl2aXR5KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3AoKSBPVkVS
UklERTsKLQotICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQotICAgIHZpcnR1YWwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IE9WRVJSSURF
IEZJTkFMOwotICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIE9WRVJSSURFIEZJTkFM
IHsgcmVmKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIE9WRVJSSURF
IEZJTkFMIHsgZGVyZWYoKTsgfQotCi0gICAgLy8gVVJMUmVnaXN0cmFibGUgaW50ZXJmYWNlCi0g
ICAgdmlydHVhbCBVUkxSZWdpc3RyeSYgcmVnaXN0cnkoKSBjb25zdCBPVkVSUklERTsKLQotICAg
IHVzaW5nIFJlZkNvdW50ZWQ8TWVkaWFTb3VyY2VCYXNlPjo6cmVmOwotICAgIHVzaW5nIFJlZkNv
dW50ZWQ8TWVkaWFTb3VyY2VCYXNlPjo6ZGVyZWY7Ci0KLXByb3RlY3RlZDoKLSAgICBleHBsaWNp
dCBNZWRpYVNvdXJjZUJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOwotCi0gICAgdmlydHVh
bCB2b2lkIG9uUmVhZHlTdGF0ZUNoYW5nZShjb25zdCBBdG9taWNTdHJpbmcmIG9sZFN0YXRlLCBj
b25zdCBBdG9taWNTdHJpbmcmIG5ld1N0YXRlKSA9IDA7Ci0gICAgdmlydHVhbCBWZWN0b3I8UmVm
UHRyPFRpbWVSYW5nZXM+PiBhY3RpdmVSYW5nZXMoKSBjb25zdCA9IDA7Ci0KLSAgICBSZWZQdHI8
U291cmNlQnVmZmVyUHJpdmF0ZT4gY3JlYXRlU291cmNlQnVmZmVyUHJpdmF0ZShjb25zdCBDb250
ZW50VHlwZSYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNjaGVkdWxlRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudE5hbWUpOwotICAgIEdlbmVyaWNFdmVudFF1ZXVlJiBhc3luY0V2
ZW50UXVldWUoKSB7IHJldHVybiBtX2FzeW5jRXZlbnRRdWV1ZTsgfQotCi0gICAgUmVmUHRyPE1l
ZGlhU291cmNlUHJpdmF0ZT4gbV9wcml2YXRlOwotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1fbWVk
aWFFbGVtZW50OwotICAgIEF0b21pY1N0cmluZyBtX3JlYWR5U3RhdGU7Ci0gICAgR2VuZXJpY0V2
ZW50UXVldWUgbV9hc3luY0V2ZW50UXVldWU7Ci19OwotCi19Ci0KLSNlbmRpZgotCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3Vy
Y2VSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlh
U291cmNlUmVnaXN0cnkuY3BwCmluZGV4IDQyNTE3NzMzZjFhNThhNTE4ODJjNzllYjRkNTMyZTIz
ODNmNzRjZWMuLmE2NTMwODg2MDA5OTAxOWVmOTJiYWE0NWNiNzZiZDRiMzVhMjViYmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2VSZWdp
c3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNv
dXJjZVJlZ2lzdHJ5LmNwcApAQCAtMzMsOCArMzMsOCBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NP
VVJDRSkKIAorI2luY2x1ZGUgIk1lZGlhU291cmNlLmgiCiAjaW5jbHVkZSAiVVJMLmgiCi0jaW5j
bHVkZSAiTWVkaWFTb3VyY2VCYXNlLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTEsNyArNTEsNyBAQCB2b2lkIE1lZGlhU291cmNlUmVn
aXN0cnk6OnJlZ2lzdGVyVVJMKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgVVJMJiB1cmwsIFVSTFJl
Z2lzdAogICAgIEFTU0VSVCgmcmVnaXN0cmFibGUtPnJlZ2lzdHJ5KCkgPT0gdGhpcyk7CiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIE1lZGlhU291cmNlQmFzZSogc291cmNlID0g
c3RhdGljX2Nhc3Q8TWVkaWFTb3VyY2VCYXNlKj4ocmVnaXN0cmFibGUpOworICAgIE1lZGlhU291
cmNlKiBzb3VyY2UgPSBzdGF0aWNfY2FzdDxNZWRpYVNvdXJjZSo+KHJlZ2lzdHJhYmxlKTsKICAg
ICBzb3VyY2UtPmFkZGVkVG9SZWdpc3RyeSgpOwogICAgIG1fbWVkaWFTb3VyY2VzLnNldCh1cmwu
c3RyaW5nKCksIHNvdXJjZSk7CiB9CkBAIC01OSwxMSArNTksMTEgQEAgdm9pZCBNZWRpYVNvdXJj
ZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTChTZWN1cml0eU9yaWdpbiosIGNvbnN0IFVSTCYgdXJsLCBV
UkxSZWdpc3QKIHZvaWQgTWVkaWFTb3VyY2VSZWdpc3RyeTo6dW5yZWdpc3RlclVSTChjb25zdCBV
UkwmIHVybCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEhhc2hNYXA8U3Ry
aW5nLCBSZWZQdHI8TWVkaWFTb3VyY2VCYXNlPj46Oml0ZXJhdG9yIGl0ZXIgPSBtX21lZGlhU291
cmNlcy5maW5kKHVybC5zdHJpbmcoKSk7CisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRp
YVNvdXJjZT4+OjppdGVyYXRvciBpdGVyID0gbV9tZWRpYVNvdXJjZXMuZmluZCh1cmwuc3RyaW5n
KCkpOwogICAgIGlmIChpdGVyID09IG1fbWVkaWFTb3VyY2VzLmVuZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBSZWZQdHI8TWVkaWFTb3VyY2VCYXNlPiBzb3VyY2UgPSBpdGVyLT52YWx1ZTsK
KyAgICBSZWZQdHI8TWVkaWFTb3VyY2U+IHNvdXJjZSA9IGl0ZXItPnZhbHVlOwogICAgIG1fbWVk
aWFTb3VyY2VzLnJlbW92ZShpdGVyKTsKICAgICBzb3VyY2UtPnJlbW92ZWRGcm9tUmVnaXN0cnko
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVk
aWFTb3VyY2VSZWdpc3RyeS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9N
ZWRpYVNvdXJjZVJlZ2lzdHJ5LmgKaW5kZXggOTcyNzkwMjBkMTI5MWYwMGIzMTJjZTU0MDcwMGIz
NzQ4NzAwMTMwNC4uOWNlMzVkZTI3N2E5NjczMTEyM2NkYjkwYmM0ZWUyYzAzMWU1YTZlNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZVJl
Z2lzdHJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNv
dXJjZVJlZ2lzdHJ5LmgKQEAgLTQxLDcgKzQxLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgVVJMOwotY2xhc3MgTWVkaWFTb3VyY2VCYXNlOworY2xhc3MgTWVkaWFTb3VyY2U7CiAK
IGNsYXNzIE1lZGlhU291cmNlUmVnaXN0cnkgRklOQUwgOiBwdWJsaWMgVVJMUmVnaXN0cnkgewog
cHVibGljOgpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgTWVkaWFT
b3VyY2VSZWdpc3RyeSgpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8TWVkaWFTb3VyY2VC
YXNlPj4gbV9tZWRpYVNvdXJjZXM7CisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYVNv
dXJjZT4+IG1fbWVkaWFTb3VyY2VzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDNlYmNlNTRmOThjNTllNmI5MTIyZjI0MDdhYWE3ZjA0MjY2ZWRlZTYuLjQyZmVkNDU1ZTgzNmVl
ODk0NjRmOTcyZThiZDExNzk0ODFjN2FlNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUzMzAsOCArNTMzMCw2IEBACiAJCUNE
MzM2RjY3MTdGQTBBQzYwMERERENEMCAvKiBWaWRlb1RyYWNrUHJpdmF0ZUFWRk9iakMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QzMzZGNjUxN0ZB
MEFDNjAwREREQ0QwIC8qIFZpZGVvVHJhY2tQcml2YXRlQVZGT2JqQy5jcHAgKi87IH07CiAJCUNE
MzM2RjY4MTdGQTBBQzYwMERERENEMCAvKiBWaWRlb1RyYWNrUHJpdmF0ZUFWRk9iakMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEMzM2RjY2MTdGQTBB
QzYwMERERENEMCAvKiBWaWRlb1RyYWNrUHJpdmF0ZUFWRk9iakMuaCAqLzsgfTsKIAkJQ0QzN0Iz
OTgxNUMxQjk3MTAwNkRDODk4IC8qIERpYWdub3N0aWNMb2dnaW5nS2V5cy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDM3QjM3NDE1QzFBN0UxMDA2
REM4OTggLyogRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcCAqLzsgfTsKLQkJQ0QzQTQ5NTIxN0E5
QzhDNjAwMjc0RTQyIC8qIE1lZGlhU291cmNlQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QzQTQ5NTExN0E5QzhCNjAwMjc0RTQyIC8qIE1lZGlh
U291cmNlQmFzZS5oICovOyB9OwotCQlDRDNBNDk1NDE3QTlDQzkwMDAyNzRFNDIgLyogTWVkaWFT
b3VyY2VCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEM0E0OTUwMTdBOUM4QjYwMDI3NEU0MiAvKiBNZWRpYVNvdXJjZUJhc2UuY3BwICovOyB9
OwogCQlDRDNBNDk1RTE3QTlEMDFCMDAyNzRFNDIgLyogTWVkaWFTb3VyY2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QzQTQ5NTUxN0E5RDAxQjAw
Mjc0RTQyIC8qIE1lZGlhU291cmNlLmNwcCAqLzsgfTsKIAkJQ0QzQTQ5NUYxN0E5RDAxQjAwMjc0
RTQyIC8qIE1lZGlhU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRDNBNDk1NjE3QTlEMDFCMDAyNzRFNDIgLyogTWVkaWFTb3VyY2UuaCAqLzsg
fTsKIAkJQ0QzQTQ5NjExN0E5RDAxQjAwMjc0RTQyIC8qIFNvdXJjZUJ1ZmZlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDNBNDk1ODE3QTlEMDFC
MDAyNzRFNDIgLyogU291cmNlQnVmZmVyLmNwcCAqLzsgfTsKQEAgLTc3NDAsOCArNzczOCw4IEBA
CiAJCTMxNDZGRTY1MTg0NDIwODcwMDFBOTM3QyAvKiBPRVNUZXh0dXJlRmxvYXRMaW5lYXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT0VTVGV4dHVyZUZsb2F0TGlu
ZWFyLmNwcDsgcGF0aCA9IGNhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzMTQ2RkU2NjE4NDQyMDg3MDAxQTkzN0MgLyogT0VTVGV4
dHVyZUZsb2F0TGluZWFyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE9FU1Rl
eHR1cmVGbG9hdExpbmVhci5oOyBwYXRoID0gY2FudmFzL09FU1RleHR1cmVGbG9hdExpbmVhci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTQ2RkU2NzE4NDQyMDg3MDAxQTkzN0Mg
LyogT0VTVGV4dHVyZUZsb2F0TGluZWFyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBPRVNU
ZXh0dXJlRmxvYXRMaW5lYXIuaWRsOyBwYXRoID0gY2FudmFzL09FU1RleHR1cmVGbG9hdExpbmVh
ci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxNDZGRTcwMTg0NDIzNjcwMDFB
OTM3QyAvKiBKU09FU1RleHR1cmVGbG9hdExpbmVhci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBKU09FU1RleHR1cmVGbG9hdExpbmVhci5jcHA7IHBhdGggPSBKU09F
U1RleHR1cmVGbG9hdExpbmVhci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMx
NDZGRTcxMTg0NDIzNjcwMDFBOTM3QyAvKiBKU09FU1RleHR1cmVGbG9hdExpbmVhci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU09FU1RleHR1cmVGbG9hdExpbmVhci5oOyBw
YXRoID0gSlNPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzE0NkZFNzAxODQ0MjM2NzAwMUE5MzdDIC8qIEpTT0VTVGV4dHVyZUZsb2F0TGluZWFy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTT0VTVGV4dHVyZUZs
b2F0TGluZWFyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE0NkZFNzExODQ0
MjM2NzAwMUE5MzdDIC8qIEpTT0VTVGV4dHVyZUZsb2F0TGluZWFyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTT0VTVGV4dHVyZUZsb2F0TGluZWFyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTMxNjAyM0VGMTUzMkM0MEMwMEQ1MEZGNCAvKiBEaWN0aW9uYXJ5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpY3Rpb25hcnkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE2MTFFNTQwRTFDNEQ0QTAwRjZBNTc5IC8qIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNjExRTU4
MEUxQzRERTAwMEY2QTU3OSAvKiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI0MTcsOCArMTI0MTUsNiBAQAog
CQlDRDMzNkY2NjE3RkEwQUM2MDBERERDRDAgLyogVmlkZW9UcmFja1ByaXZhdGVBVkZPYmpDLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFZpZGVvVHJhY2tQcml2YXRlQVZGT2Jq
Qy5oOyBwYXRoID0gb2JqYy9WaWRlb1RyYWNrUHJpdmF0ZUFWRk9iakMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQ0QzN0IzNzQxNUMxQTdFMTAwNkRDODk4IC8qIERpYWdub3N0aWNM
b2dnaW5nS2V5cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWFn
bm9zdGljTG9nZ2luZ0tleXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDM3
QjM3NTE1QzFBN0UxMDA2REM4OTggLyogRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNMb2dnaW5nS2V5cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlDRDNBNDk1MDE3QTlDOEI2MDAyNzRFNDIgLyogTWVkaWFT
b3VyY2VCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhU291cmNlQmFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEM0E0OTUxMTdBOUM4QjYwMDI3NEU0MiAvKiBN
ZWRpYVNvdXJjZUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFTb3VyY2VCYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEM0E0OTU1MTdBOUQwMUIwMDI3NEU0MiAvKiBNZWRp
YVNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVNv
dXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEM0E0OTU2MTdBOUQwMUIw
MDI3NEU0MiAvKiBNZWRpYVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNZWRpYVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDNBNDk1NzE3
QTlEMDFCMDAyNzRFNDIgLyogTWVkaWFTb3VyY2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IE1lZGlhU291cmNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NTczLDgg
KzE4NTY5LDYgQEAKIAkJCQlDRDNBNDk1NTE3QTlEMDFCMDAyNzRFNDIgLyogTWVkaWFTb3VyY2Uu
Y3BwICovLAogCQkJCUNEM0E0OTU2MTdBOUQwMUIwMDI3NEU0MiAvKiBNZWRpYVNvdXJjZS5oICov
LAogCQkJCUNEM0E0OTU3MTdBOUQwMUIwMDI3NEU0MiAvKiBNZWRpYVNvdXJjZS5pZGwgKi8sCi0J
CQkJQ0QzQTQ5NTAxN0E5QzhCNjAwMjc0RTQyIC8qIE1lZGlhU291cmNlQmFzZS5jcHAgKi8sCi0J
CQkJQ0QzQTQ5NTExN0E5QzhCNjAwMjc0RTQyIC8qIE1lZGlhU291cmNlQmFzZS5oICovLAogCQkJ
CUIxQTk0MkUxMTVCNUNFMjIwMEQ1MjVEMSAvKiBNZWRpYVNvdXJjZVJlZ2lzdHJ5LmNwcCAqLywK
IAkJCQlCMUE5NDJFMjE1QjVDRTIyMDBENTI1RDEgLyogTWVkaWFTb3VyY2VSZWdpc3RyeS5oICov
LAogCQkJCUNEM0E0OTU4MTdBOUQwMUIwMDI3NEU0MiAvKiBTb3VyY2VCdWZmZXIuY3BwICovLApA
QCAtMjM5NjcsNyArMjM5NjEsNiBAQAogCQkJCUJDMkNCRjRFMTQwRjFBQkQwMDM4NzlCRSAvKiBK
U1dlYkdMQ29udGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTNGQUQzOTE0NzMzRjQw
MTFFNDIzMDcgLyogSlNXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk2RTNGQUQzOTE0NzMzRjQwMjJFNDIzMDcgLyogSlNXZWJHTERlYnVnU2hhZGVycy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQ0QzQTQ5NTIxN0E5QzhDNjAwMjc0RTQyIC8qIE1lZGlhU291cmNlQmFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkUzRkFEMzkxNDczM0Y0MDAwRTQyMzA3IC8qIEpTV2Vi
R0xEZXB0aFRleHR1cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOTk4MTA0MkQyRDMwMDA5
RDQ0NyAvKiBKU1dlYkdMRnJhbWVidWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjFENUMx
MTJENTMzNTYwMDgzMkJFQyAvKiBKU1dlYkdMTG9zZUNvbnRleHQuaCBpbiBIZWFkZXJzICovLApA
QCAtMjYzNzAsNyArMjYzNjMsNiBAQAogCQkJCTUxNjAzMDZDMENDNDM2MjMwMEM4QUMyNSAvKiBG
aWxlU3lzdGVtQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDc3OUJGMEQxODQ1MzE2ODAwMEI2
QUU3IC8qIEhUTUxNZWRpYUVsZW1lbnRNZWRpYVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkyNkMxN0EzRjE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5tbSBpbiBTb3VyY2Vz
ICovLAotCQkJCUNEM0E0OTU0MTdBOUNDOTAwMDI3NEU0MiAvKiBNZWRpYVNvdXJjZUJhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0QjNGNzYwQzcyMjA1NTAwMDUzMERGIC8qIEZpbGVTeXN0
ZW1NYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk2RUQ4QzM3OTE4M0JGRjhDMDA5RTUzQkQgLyog
Qm94U2hhcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2MDMwMEIwQ0M0MjUxMjAwQzhBQzI1
IC8qIEZpbGVTeXN0ZW1QT1NJWC5jcHAgaW4gU291cmNlcyAqLywK
</data>
<flag name="review"
          id="241855"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
    <flag name="commit-queue"
          id="241867"
          type_id="3"
          status="-"
          setter="gtk-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218455</attachid>
            <date>2013-12-04 14:48:09 -0800</date>
            <delta_ts>2013-12-04 14:48:09 -0800</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>bug-125245-20131204144808.patch</filename>
            <type>text/plain</type>
            <size>56019</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwMDk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmNjZjEyOTZlODRlMGEy
ZGI4NTc0MTAzMGEwNjI5Zjc1MzZjMDY0Ni4uNjUwOTY2ZjA1ODJmNWRjOGVkZDVmN2VlYmQyZjI4
NWM1NWRmZDMxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEzLTEyLTA0ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFtNU0VdIFJlZmFjdG9yIE1l
ZGlhU291cmNlQmFzZSBiYWNrIGludG8gTWVkaWFTb3VyY2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTI0NQorCisgICAgICAgIFJldmlld2VkIGJ5
IEVyaWMgQ2FybHNvbi4KKworICAgICAgICBOb3cgdGhhdCB0aGUgbGVnYWN5IFdlYktpdE1lZGlh
U291cmNlIGhhcyBiZWVuIHJlbW92ZWQsIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBoYXZlCisgICAg
ICAgIGEgc2VwYXJhdGUgTWVkaWFTb3VyY2UgYW5kIE1lZGlhU291cmNlQmFzZS4gUmUtaW50ZWdy
YXRlIHRoZSB0d28uCisKKyAgICAgICAgQ29weSBhbGwgdGhlIG1ldGhvZHMgZnJvbSBNZWRpYVNv
dXJjZSBpbnRvIE1lZGlhU291cmNlQmFzZSwgYW5kIHJlbmFtZSB0aGUgY2xhc3MgTWVkaWFTb3Vy
Y2U6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHA6IENvcGll
ZCBmcm9tIE1lZGlhU291cmNlQmFzZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJj
ZTo6Y3JlYXRlKTogQ29waWVkIGZyb20gTWVkaWFTb3VyY2UuY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTb3VyY2U6OmFkZFNvdXJjZUJ1ZmZlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTb3VyY2U6OnJlbW92ZVNvdXJjZUJ1ZmZlcik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTb3VyY2U6OmlzVHlwZVN1cHBvcnRlZCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTb3VyY2U6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVNvdXJjZTo6c291cmNlQnVmZmVyRGlkQ2hhbmdlQWNpdHZlU3RhdGUp
OiBEaXR0by4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmg6IENv
cGllZCBmcm9tIE1lZGlhU291cmNlQmFzZS5oLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3Vy
Y2U6OnNvdXJjZUJ1ZmZlcnMpOiBDb3BpZWQgZnJvbSBNZWRpYVNvdXJjZS5oLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTb3VyY2U6OmFjdGl2ZVNvdXJjZUJ1ZmZlcnMpOiBDb3BpZWQgZnJvbSBN
ZWRpYVNvdXJjZS5oLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2VC
YXNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291
cmNlQmFzZS5oOiBSZW1vdmVkLgorCisgICAgICAgIENoYW5nZSBhbGwgcmVmZXJlbmNlcyB0byBN
ZWRpYVNvdXJjZUJhc2UgaW50byBNZWRpYVNvdXJjZToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlh
c291cmNlL0RPTVVSTE1lZGlhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVVSTE1l
ZGlhU291cmNlOjpjcmVhdGVPYmplY3RVUkwpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3Vy
Y2UvRE9NVVJMTWVkaWFTb3VyY2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL01l
ZGlhU291cmNlUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VSZWdp
c3RyeTo6cmVnaXN0ZXJVUkwpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VSZWdpc3Ry
eTo6dW5yZWdpc3RlclVSTCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNv
dXJjZVJlZ2lzdHJ5Lmg6CisKKyAgICAgICAgUmVtb3ZlIE1lZGlhU291cmNlQmFzZS5jcHAvaCBm
cm9tIHRoZSBwcm9qZWN0IGZpbGU6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisKIDIwMTMtMTEtMTUg
IEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW01TRV1bTWFjXSBB
ZGQgYSBuZXcgTVNFLWNvbXBhdGlibGUgTWVkaWFQbGF5ZXJQcml2YXRlIGltcGxlbWVudGF0aW9u
LCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCmluZGV4IDMwMWNlYmVkZDMyOTcxZGE4ZDY1NDZlMzExOTc2ZTUwM2M1NGExYjcu
LjRmNTFjZjc5ZGUyYmMyOWU2ODI5YzVlZGI5Zjg1MjYxYzZiOGNlYzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQpAQCAtMTg3NCw4ICsxODc0LDYgQEAgd2ViY29yZV9tb2R1bGVzX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckdsb2Jh
bFNjb3BlSW5kZXhlZERhdGFiYXNlLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
b3VyY2UvTWVkaWFTb3VyY2UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291
cmNlL01lZGlhU291cmNlLmggXAotCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
TWVkaWFTb3VyY2VCYXNlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJj
ZS9NZWRpYVNvdXJjZUJhc2UuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJj
ZS9NZWRpYVNvdXJjZVJlZ2lzdHJ5LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXNvdXJjZS9NZWRpYVNvdXJjZVJlZ2lzdHJ5LmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc291cmNlL0RPTVVSTE1lZGlhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvRE9NVVJMTWVkaWFTb3VyY2UuY3BwCmluZGV4IDc2ZDhm
YmUwNWNkNmVlNzIwMTgyZmE2YmE5OWJjNTQ3NmIyMTNjZmYuLjIwNTEyNzQ4NDJmOTJmYTg4ZDAx
MDg0YjlmYmZmNjE4ZjgwN2VkOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzb3VyY2UvRE9NVVJMTWVkaWFTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvRE9NVVJMTWVkaWFTb3VyY2UuY3BwCkBAIC0zNCwxMiArMzQsMTIg
QEAKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogCiAjaW5jbHVkZSAiRE9NVVJMLmgiCi0jaW5j
bHVkZSAiTWVkaWFTb3VyY2VCYXNlLmgiCisjaW5jbHVkZSAiTWVkaWFTb3VyY2UuaCIKICNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVN0cmluZyBE
T01VUkxNZWRpYVNvdXJjZTo6Y3JlYXRlT2JqZWN0VVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIE1lZGlhU291cmNlQmFzZSogc291cmNlKQorU3RyaW5n
IERPTVVSTE1lZGlhU291cmNlOjpjcmVhdGVPYmplY3RVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgTWVkaWFTb3VyY2UqIHNvdXJjZSkKIHsKICAgICAv
LyBTaW5jZSBXZWJXb3JrZXJzIGNhbm5vdCBvYnRhaW4gTWVkaWFTb3VyY2Ugb2JqZWN0cywgd2Ug
c2hvdWxkIGJlIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9ET01VUkxN
ZWRpYVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9ET01VUkxN
ZWRpYVNvdXJjZS5oCmluZGV4IDdhYTNkZGM5NjdkNzZlYWIwYzdkMTIxOGJiZmU3ZmUzZjdmMWQz
ZjcuLjFlY2NkNGI3NTQ5ZjhhMmZiZTk2OWI4YzIxNDcxMjYyMTJmOTQ2YTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvRE9NVVJMTWVkaWFTb3VyY2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL0RPTVVSTE1lZGlhU291cmNl
LmgKQEAgLTM3LDEyICszNywxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIE1l
ZGlhU291cmNlQmFzZTsKK2NsYXNzIE1lZGlhU291cmNlOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDsKIAogY2xhc3MgRE9NVVJMTWVkaWFTb3VyY2UgewogcHVibGljOgotICAgIHN0YXRp
YyBTdHJpbmcgY3JlYXRlT2JqZWN0VVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNZWRpYVNv
dXJjZUJhc2UqKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNyZWF0ZU9iamVjdFVSTChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgTWVkaWFTb3VyY2UqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFT
b3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJj
ZS5jcHAKaW5kZXggYzU3ZTM2ODc0YmRiMjhiOTI0ZGI2NDc0ZTg2YWVjYWVjOGZjODBlOS4uY2Ix
NTUyMTVhMDk3NTdkZmNkOTdiYjNjMjlhYWMzMTRjOGJkY2QwYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKQEAgLTM2LDYgKzM2
LDggQEAKICNpbmNsdWRlICJBdWRpb1RyYWNrLmgiCiAjaW5jbHVkZSAiQXVkaW9UcmFja0xpc3Qu
aCIKICNpbmNsdWRlICJDb250ZW50VHlwZS5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5o
IgogI2luY2x1ZGUgIkdlbmVyaWNFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxl
bWVudC5oIgpAQCAtNTEsNiArNTMsNyBAQAogI2luY2x1ZGUgIlZpZGVvVHJhY2tMaXN0LmgiCiAj
aW5jbHVkZSA8cnVudGltZS9VaW50OEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTYyLDcgKzY1LDEwIEBAIFBhc3NSZWZQdHI8TWVkaWFTb3VyY2U+IE1lZGlhU291
cmNlOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKIH0KIAogTWVkaWFT
b3VyY2U6Ok1lZGlhU291cmNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCi0gICAg
OiBNZWRpYVNvdXJjZUJhc2UoY29udGV4dCkKKyAgICA6IEFjdGl2ZURPTU9iamVjdCgmY29udGV4
dCkKKyAgICAsIG1fbWVkaWFFbGVtZW50KDApCisgICAgLCBtX3JlYWR5U3RhdGUoY2xvc2VkS2V5
d29yZCgpKQorICAgICwgbV9hc3luY0V2ZW50UXVldWUoKnRoaXMpCiB7CiAgICAgTE9HKE1lZGlh
LCAiTWVkaWFTb3VyY2U6Ok1lZGlhU291cmNlICVwIiwgdGhpcyk7CiAgICAgbV9zb3VyY2VCdWZm
ZXJzID0gU291cmNlQnVmZmVyTGlzdDo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7
CkBAIC03NSw2ICs4MSwyNTkgQEAgTWVkaWFTb3VyY2U6On5NZWRpYVNvdXJjZSgpCiAgICAgQVNT
RVJUKGlzQ2xvc2VkKCkpOwogfQogCitjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhU291cmNlOjpv
cGVuS2V5d29yZCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJp
bmcsIG9wZW4sICgib3BlbiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsK
KyAgICByZXR1cm4gb3BlbjsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVNvdXJjZTo6
Y2xvc2VkS2V5d29yZCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNT
dHJpbmcsIGNsb3NlZCwgKCJjbG9zZWQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSk7CisgICAgcmV0dXJuIGNsb3NlZDsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBNZWRp
YVNvdXJjZTo6ZW5kZWRLZXl3b3JkKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0
IEF0b21pY1N0cmluZywgZW5kZWQsICgiZW5kZWQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSk7CisgICAgcmV0dXJuIGVuZGVkOworfQorCit2b2lkIE1lZGlhU291cmNlOjpz
ZXRQcml2YXRlQW5kT3BlbihQYXNzUmVmPE1lZGlhU291cmNlUHJpdmF0ZT4gbWVkaWFTb3VyY2VQ
cml2YXRlKQoreworICAgIEFTU0VSVCghbV9wcml2YXRlKTsKKyAgICBBU1NFUlQobV9tZWRpYUVs
ZW1lbnQpOworICAgIG1fcHJpdmF0ZSA9IHN0ZDo6bW92ZShtZWRpYVNvdXJjZVByaXZhdGUpOwor
ICAgIHNldFJlYWR5U3RhdGUob3BlbktleXdvcmQoKSk7Cit9CisKK3ZvaWQgTWVkaWFTb3VyY2U6
OmFkZGVkVG9SZWdpc3RyeSgpCit7CisgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworfQor
Cit2b2lkIE1lZGlhU291cmNlOjpyZW1vdmVkRnJvbVJlZ2lzdHJ5KCkKK3sKKyAgICB1bnNldFBl
bmRpbmdBY3Rpdml0eSh0aGlzKTsKK30KKworZG91YmxlIE1lZGlhU291cmNlOjpkdXJhdGlvbigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGlzQ2xvc2VkKCkgPyBzdGQ6Om51bWVyaWNfbGltaXRzPGZs
b2F0Pjo6cXVpZXRfTmFOKCkgOiBtX3ByaXZhdGUtPmR1cmF0aW9uKCk7Cit9CisKK1Bhc3NSZWZQ
dHI8VGltZVJhbmdlcz4gTWVkaWFTb3VyY2U6OmJ1ZmZlcmVkKCkgY29uc3QKK3sKKyAgICAvLyBJ
bXBsZW1lbnRzIE1lZGlhU291cmNlIGFsZ29yaXRobSBmb3IgSFRNTE1lZGlhRWxlbWVudC5idWZm
ZXJlZC4KKyAgICAvLyBodHRwczovL2R2Y3MudzMub3JnL2hnL2h0bWwtbWVkaWEvcmF3LWZpbGUv
ZGVmYXVsdC9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLmh0bWwjaHRtbG1lZGlhZWxlbWVudC1l
eHRlbnNpb25zCisgICAgVmVjdG9yPFJlZlB0cjxUaW1lUmFuZ2VzPj4gcmFuZ2VzID0gYWN0aXZl
UmFuZ2VzKCk7CisKKyAgICAvLyAxLiBJZiBhY3RpdmVTb3VyY2VCdWZmZXJzLmxlbmd0aCBlcXVh
bHMgMCB0aGVuIHJldHVybiBhbiBlbXB0eSBUaW1lUmFuZ2VzIG9iamVjdCBhbmQgYWJvcnQgdGhl
c2Ugc3RlcHMuCisgICAgaWYgKHJhbmdlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBUaW1l
UmFuZ2VzOjpjcmVhdGUoKTsKKworICAgIC8vIDIuIExldCBhY3RpdmUgcmFuZ2VzIGJlIHRoZSBy
YW5nZXMgcmV0dXJuZWQgYnkgYnVmZmVyZWQgZm9yIGVhY2ggU291cmNlQnVmZmVyIG9iamVjdCBp
biBhY3RpdmVTb3VyY2VCdWZmZXJzLgorICAgIC8vIDMuIExldCBoaWdoZXN0IGVuZCB0aW1lIGJl
IHRoZSBsYXJnZXN0IHJhbmdlIGVuZCB0aW1lIGluIHRoZSBhY3RpdmUgcmFuZ2VzLgorICAgIGRv
dWJsZSBoaWdoZXN0RW5kVGltZSA9IC0xOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmFu
Z2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHJhbmdlc1tpXS0+
bGVuZ3RoKCk7CisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgICAgICBoaWdoZXN0RW5kVGlt
ZSA9IHN0ZDo6bWF4KGhpZ2hlc3RFbmRUaW1lLCByYW5nZXNbaV0tPmVuZChsZW5ndGggLSAxLCBB
U1NFUlRfTk9fRVhDRVBUSU9OKSk7CisgICAgfQorCisgICAgLy8gUmV0dXJuIGFuIGVtcHR5IHJh
bmdlIGlmIGFsbCByYW5nZXMgYXJlIGVtcHR5LgorICAgIGlmIChoaWdoZXN0RW5kVGltZSA8IDAp
CisgICAgICAgIHJldHVybiBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKKworICAgIC8vIDQuIExldCBp
bnRlcnNlY3Rpb24gcmFuZ2VzIGVxdWFsIGEgVGltZVJhbmdlIG9iamVjdCBjb250YWluaW5nIGEg
c2luZ2xlIHJhbmdlIGZyb20gMCB0byBoaWdoZXN0IGVuZCB0aW1lLgorICAgIFJlZlB0cjxUaW1l
UmFuZ2VzPiBpbnRlcnNlY3Rpb25SYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoMCwgaGlnaGVz
dEVuZFRpbWUpOworCisgICAgLy8gNS4gRm9yIGVhY2ggU291cmNlQnVmZmVyIG9iamVjdCBpbiBh
Y3RpdmVTb3VyY2VCdWZmZXJzIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgorICAgIGJvb2wgZW5k
ZWQgPSByZWFkeVN0YXRlKCkgPT0gZW5kZWRLZXl3b3JkKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCByYW5nZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gNS4xIExldCBzb3VyY2Ug
cmFuZ2VzIGVxdWFsIHRoZSByYW5nZXMgcmV0dXJuZWQgYnkgdGhlIGJ1ZmZlcmVkIGF0dHJpYnV0
ZSBvbiB0aGUgY3VycmVudCBTb3VyY2VCdWZmZXIuCisgICAgICAgIFRpbWVSYW5nZXMqIHNvdXJj
ZVJhbmdlcyA9IHJhbmdlc1tpXS5nZXQoKTsKKworICAgICAgICAvLyA1LjIgSWYgcmVhZHlTdGF0
ZSBpcyAiZW5kZWQiLCB0aGVuIHNldCB0aGUgZW5kIHRpbWUgb24gdGhlIGxhc3QgcmFuZ2UgaW4g
c291cmNlIHJhbmdlcyB0byBoaWdoZXN0IGVuZCB0aW1lLgorICAgICAgICBpZiAoZW5kZWQgJiYg
c291cmNlUmFuZ2VzLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHNvdXJjZVJhbmdlcy0+YWRkKHNv
dXJjZVJhbmdlcy0+c3RhcnQoc291cmNlUmFuZ2VzLT5sZW5ndGgoKSAtIDEsIEFTU0VSVF9OT19F
WENFUFRJT04pLCBoaWdoZXN0RW5kVGltZSk7CisKKyAgICAgICAgLy8gNS4zIExldCBuZXcgaW50
ZXJzZWN0aW9uIHJhbmdlcyBlcXVhbCB0aGUgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSBp
bnRlcnNlY3Rpb24gcmFuZ2VzIGFuZCB0aGUgc291cmNlIHJhbmdlcy4KKyAgICAgICAgLy8gNS40
IFJlcGxhY2UgdGhlIHJhbmdlcyBpbiBpbnRlcnNlY3Rpb24gcmFuZ2VzIHdpdGggdGhlIG5ldyBp
bnRlcnNlY3Rpb24gcmFuZ2VzLgorICAgICAgICBpbnRlcnNlY3Rpb25SYW5nZXMtPmludGVyc2Vj
dFdpdGgoc291cmNlUmFuZ2VzKTsKKyAgICB9CisKKyAgICByZXR1cm4gaW50ZXJzZWN0aW9uUmFu
Z2VzLnJlbGVhc2UoKTsKK30KKworY2xhc3MgU291cmNlQnVmZmVyQnVmZmVyZWREb2VzTm90Q29u
dGFpblRpbWUgeworcHVibGljOgorICAgIFNvdXJjZUJ1ZmZlckJ1ZmZlcmVkRG9lc05vdENvbnRh
aW5UaW1lKGRvdWJsZSB0aW1lKSA6IG1fdGltZSh0aW1lKSB7IH0KKyAgICBib29sIG9wZXJhdG9y
KCkoUmVmUHRyPFNvdXJjZUJ1ZmZlcj4gc291cmNlQnVmZmVyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuICFzb3VyY2VCdWZmZXItPmJ1ZmZlcmVkKCktPmNvbnRhaW4obV90aW1lKTsKKyAgICB9CisK
KyAgICBkb3VibGUgbV90aW1lOworfTsKKworY2xhc3MgU291cmNlQnVmZmVyQnVmZmVyZWRIYXNF
bm91Z2ggeworcHVibGljOgorICAgIFNvdXJjZUJ1ZmZlckJ1ZmZlcmVkSGFzRW5vdWdoKGRvdWJs
ZSB0aW1lLCBkb3VibGUgZHVyYXRpb24pIDogbV90aW1lKHRpbWUpLCBtX2R1cmF0aW9uKGR1cmF0
aW9uKSB7IH0KKyAgICBib29sIG9wZXJhdG9yKCkoUmVmUHRyPFNvdXJjZUJ1ZmZlcj4gc291cmNl
QnVmZmVyKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHJhbmdlUG9zID0gc291cmNlQnVmZmVyLT5i
dWZmZXJlZCgpLT5maW5kKG1fdGltZSk7CisgICAgICAgIGlmIChyYW5nZVBvcyA9PSBub3RGb3Vu
ZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBkb3VibGUgZW5kVGltZSA9
IHNvdXJjZUJ1ZmZlci0+YnVmZmVyZWQoKS0+ZW5kKHJhbmdlUG9zLCBJR05PUkVfRVhDRVBUSU9O
KTsKKyAgICAgICAgcmV0dXJuIG1fZHVyYXRpb24gLSBlbmRUaW1lIDwgMTsKKyAgICB9CisKKyAg
ICBkb3VibGUgbV90aW1lOworICAgIGRvdWJsZSBtX2R1cmF0aW9uOworfTsKKworY2xhc3MgU291
cmNlQnVmZmVyQnVmZmVyZWRIYXNGdXR1cmUgeworcHVibGljOgorICAgIFNvdXJjZUJ1ZmZlckJ1
ZmZlcmVkSGFzRnV0dXJlKGRvdWJsZSB0aW1lKSA6IG1fdGltZSh0aW1lKSB7IH0KKyAgICBib29s
IG9wZXJhdG9yKCkoUmVmUHRyPFNvdXJjZUJ1ZmZlcj4gc291cmNlQnVmZmVyKQorICAgIHsKKyAg
ICAgICAgc2l6ZV90IHJhbmdlUG9zID0gc291cmNlQnVmZmVyLT5idWZmZXJlZCgpLT5maW5kKG1f
dGltZSk7CisgICAgICAgIGlmIChyYW5nZVBvcyA9PSBub3RGb3VuZCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBkb3VibGUgZW5kVGltZSA9IHNvdXJjZUJ1ZmZlci0+YnVm
ZmVyZWQoKS0+ZW5kKHJhbmdlUG9zLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgcmV0dXJu
IGVuZFRpbWUgLSBtX3RpbWUgPiAxOworICAgIH0KKworICAgIGRvdWJsZSBtX3RpbWU7Cit9Owor
Cit2b2lkIE1lZGlhU291cmNlOjptb25pdG9yU291cmNlQnVmZmVycygpCit7CisgICAgZG91Ymxl
IGN1cnJlbnRUaW1lID0gbWVkaWFFbGVtZW50KCktPmN1cnJlbnRUaW1lKCk7CisKKyAgICAvLyAy
LjQuNCBTb3VyY2VCdWZmZXIgTW9uaXRvcmluZworICAgIC8vIGh0dHBzOi8vZHZjcy53My5vcmcv
aGcvaHRtbC1tZWRpYS9yYXctZmlsZS9kZWZhdWx0L21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2Uu
aHRtbCNidWZmZXItbW9uaXRvcmluZworICAgIC8vIOKGsyBJZiBidWZmZXJlZCBmb3IgYWxsIG9i
amVjdHMgaW4gYWN0aXZlU291cmNlQnVmZmVycyBkbyBub3QgY29udGFpbiBUaW1lUmFuZ2VzIGZv
ciB0aGUgY3VycmVudAorICAgIC8vIHBsYXliYWNrIHBvc2l0aW9uOgorICAgIGF1dG8gYmVnaW4g
PSBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMtPmJlZ2luKCk7CisgICAgYXV0byBlbmQgPSBtX2FjdGl2
ZVNvdXJjZUJ1ZmZlcnMtPmVuZCgpOworICAgIGlmIChzdGQ6OmFsbF9vZihiZWdpbiwgZW5kLCBT
b3VyY2VCdWZmZXJCdWZmZXJlZERvZXNOb3RDb250YWluVGltZShjdXJyZW50VGltZSkpKSB7Cisg
ICAgICAgIC8vIDEuIFNldCB0aGUgSFRNTE1lZGlhRWxlbWVudC5yZWFkeVN0YXRlIGF0dHJpYnV0
ZSB0byBIQVZFX01FVEFEQVRBLgorICAgICAgICAvLyAyLiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0
cmFuc2l0aW9uIHRvIEhBVkVfTUVUQURBVEEsIHRoZW4gcXVldWUgYSB0YXNrIHRvIGZpcmUgYSBz
aW1wbGUgZXZlbnQKKyAgICAgICAgLy8gbmFtZWQgbG9hZGVkbWV0YWRhdGEgYXQgdGhlIG1lZGlh
IGVsZW1lbnQuCisgICAgICAgIG1fcHJpdmF0ZS0+c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6
SGF2ZU1ldGFkYXRhKTsKKworICAgICAgICAvLyAzLiBBYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIOKGsyBJZiBidWZmZXJlZCBmb3IgYWxsIG9iamVj
dHMgaW4gYWN0aXZlU291cmNlQnVmZmVycyBjb250YWluIFRpbWVSYW5nZXMgdGhhdCBpbmNsdWRl
IHRoZSBjdXJyZW50CisgICAgLy8gcGxheWJhY2sgcG9zaXRpb24gYW5kIGVub3VnaCBkYXRhIHRv
IGVuc3VyZSB1bmludGVycnVwdGVkIHBsYXliYWNrOgorICAgIGlmIChzdGQ6OmFsbF9vZihiZWdp
biwgZW5kLCBTb3VyY2VCdWZmZXJCdWZmZXJlZEhhc0Vub3VnaChjdXJyZW50VGltZSwgbWVkaWFF
bGVtZW50KCktPmR1cmF0aW9uKCkpKSkgeworICAgICAgICAvLyAxLiBTZXQgdGhlIEhUTUxNZWRp
YUVsZW1lbnQucmVhZHlTdGF0ZSBhdHRyaWJ1dGUgdG8gSEFWRV9FTk9VR0hfREFUQS4KKyAgICAg
ICAgLy8gMi4gUXVldWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgY2FucGxh
eXRocm91Z2ggYXQgdGhlIG1lZGlhIGVsZW1lbnQuCisgICAgICAgIC8vIDMuIFBsYXliYWNrIG1h
eSByZXN1bWUgYXQgdGhpcyBwb2ludCBpZiBpdCB3YXMgcHJldmlvdXNseSBzdXNwZW5kZWQgYnkg
YSB0cmFuc2l0aW9uIHRvIEhBVkVfQ1VSUkVOVF9EQVRBLgorICAgICAgICBtX3ByaXZhdGUtPnNl
dFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhKTsKKworICAgICAgICAvLyA0
LiBBYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIOKG
syBJZiBidWZmZXJlZCBmb3IgYXQgbGVhc3Qgb25lIG9iamVjdCBpbiBhY3RpdmVTb3VyY2VCdWZm
ZXJzIGNvbnRhaW5zIGEgVGltZVJhbmdlIHRoYXQgaW5jbHVkZXMKKyAgICAvLyB0aGUgY3VycmVu
dCBwbGF5YmFjayBwb3NpdGlvbiBidXQgbm90IGVub3VnaCBkYXRhIHRvIGVuc3VyZSB1bmludGVy
cnVwdGVkIHBsYXliYWNrOgorICAgIGlmIChzdGQ6OmFueV9vZihiZWdpbiwgZW5kLCBTb3VyY2VC
dWZmZXJCdWZmZXJlZEhhc0Z1dHVyZShjdXJyZW50VGltZSkpKSB7CisgICAgICAgIC8vIDEuIFNl
dCB0aGUgSFRNTE1lZGlhRWxlbWVudC5yZWFkeVN0YXRlIGF0dHJpYnV0ZSB0byBIQVZFX0ZVVFVS
RV9EQVRBLgorICAgICAgICAvLyAyLiBJZiB0aGUgcHJldmlvdXMgdmFsdWUgb2YgSFRNTE1lZGlh
RWxlbWVudC5yZWFkeVN0YXRlIHdhcyBsZXNzIHRoYW4gSEFWRV9GVVRVUkVfREFUQSwgdGhlbiBx
dWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudCBuYW1lZCBjYW5wbGF5IGF0IHRoZSBt
ZWRpYSBlbGVtZW50LgorICAgICAgICAvLyAzLiBQbGF5YmFjayBtYXkgcmVzdW1lIGF0IHRoaXMg
cG9pbnQgaWYgaXQgd2FzIHByZXZpb3VzbHkgc3VzcGVuZGVkIGJ5IGEgdHJhbnNpdGlvbiB0byBI
QVZFX0NVUlJFTlRfREFUQS4KKyAgICAgICAgbV9wcml2YXRlLT5zZXRSZWFkeVN0YXRlKE1lZGlh
UGxheWVyOjpIYXZlRnV0dXJlRGF0YSk7CisKKyAgICAgICAgLy8gNC4gQWJvcnQgdGhlc2Ugc3Rl
cHMuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyDihrMgSWYgYnVmZmVyZWQgZm9y
IGF0IGxlYXN0IG9uZSBvYmplY3QgaW4gYWN0aXZlU291cmNlQnVmZmVycyBjb250YWlucyBhIFRp
bWVSYW5nZSB0aGF0IGVuZHMKKyAgICAvLyBhdCB0aGUgY3VycmVudCBwbGF5YmFjayBwb3NpdGlv
biBhbmQgZG9lcyBub3QgaGF2ZSBhIHJhbmdlIGNvdmVyaW5nIHRoZSB0aW1lIGltbWVkaWF0ZWx5
CisgICAgLy8gYWZ0ZXIgdGhlIGN1cnJlbnQgcG9zaXRpb246CisgICAgLy8gTk9URTogTG9naWNh
bGx5LCAhKGFsbCBvYmplY3RzIGRvIG5vdCBjb250YWluIGN1cnJlbnRUaW1lKSA9PSAoc29tZSBv
YmplY3RzIGNvbnRhaW4gY3VycmVudCB0aW1lKQorCisgICAgLy8gMS4gU2V0IHRoZSBIVE1MTWVk
aWFFbGVtZW50LnJlYWR5U3RhdGUgYXR0cmlidXRlIHRvIEhBVkVfQ1VSUkVOVF9EQVRBLgorICAg
IC8vIDIuIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRyYW5zaXRpb24gdG8gSEFWRV9DVVJSRU5UX0RB
VEEsIHRoZW4gcXVldWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUKKyAgICAvLyBldmVudCBuYW1l
ZCBsb2FkZWRkYXRhIGF0IHRoZSBtZWRpYSBlbGVtZW50LgorICAgIC8vIDMuIFBsYXliYWNrIGlz
IHN1c3BlbmRlZCBhdCB0aGlzIHBvaW50IHNpbmNlIHRoZSBtZWRpYSBlbGVtZW50IGRvZXNuJ3Qg
aGF2ZSBlbm91Z2ggZGF0YSB0bworICAgIC8vIGFkdmFuY2UgdGhlIG1lZGlhIHRpbWVsaW5lLgor
ICAgIG1fcHJpdmF0ZS0+c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRh
KTsKKyAgICAKKyAgICAvLyA0LiBBYm9ydCB0aGVzZSBzdGVwcy4KK30KKwordm9pZCBNZWRpYVNv
dXJjZTo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBpZiAoZHVyYXRpb24gPCAwLjAgfHwgc3RkOjppc25hbihkdXJhdGlvbikpIHsKKyAgICAg
ICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKCFpc09wZW4oKSkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1fcHJpdmF0ZS0+c2V0RHVyYXRpb24oZHVyYXRpb24pOwor
fQorCisKK3ZvaWQgTWVkaWFTb3VyY2U6OnNldFJlYWR5U3RhdGUoY29uc3QgQXRvbWljU3RyaW5n
JiBzdGF0ZSkKK3sKKyAgICBBU1NFUlQoc3RhdGUgPT0gb3BlbktleXdvcmQoKSB8fCBzdGF0ZSA9
PSBjbG9zZWRLZXl3b3JkKCkgfHwgc3RhdGUgPT0gZW5kZWRLZXl3b3JkKCkpOworCisgICAgQXRv
bWljU3RyaW5nIG9sZFN0YXRlID0gcmVhZHlTdGF0ZSgpOworICAgIExPRyhNZWRpYSwgIk1lZGlh
U291cmNlOjpzZXRSZWFkeVN0YXRlKCkgJXAgOiAlcyAtPiAlcyIsIHRoaXMsIG9sZFN0YXRlLnN0
cmluZygpLmFzY2lpKCkuZGF0YSgpLCBzdGF0ZS5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisK
KyAgICBpZiAoc3RhdGUgPT0gY2xvc2VkS2V5d29yZCgpKSB7CisgICAgICAgIG1fcHJpdmF0ZS5j
bGVhcigpOworICAgICAgICBtX21lZGlhRWxlbWVudCA9IDA7CisgICAgfQorCisgICAgaWYgKG9s
ZFN0YXRlID09IHN0YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3JlYWR5U3RhdGUgPSBz
dGF0ZTsKKworICAgIG9uUmVhZHlTdGF0ZUNoYW5nZShvbGRTdGF0ZSwgc3RhdGUpOworfQorCit2
b2lkIE1lZGlhU291cmNlOjplbmRPZlN0cmVhbShjb25zdCBBdG9taWNTdHJpbmcmIGVycm9yLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21p
Y1N0cmluZywgbmV0d29yaywgKCJuZXR3b3JrIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBk
ZWNvZGUsICgiZGVjb2RlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwor
CisgICAgLy8gMy4xIGh0dHA6Ly9kdmNzLnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlL3Rp
cC9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLmh0bWwjZG9tLWVuZG9mc3RyZWFtCisgICAgLy8g
MS4gSWYgdGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIGlzIG5vdCBpbiB0aGUgIm9wZW4iIHN0YXRl
IHRoZW4gdGhyb3cgYW4KKyAgICAvLyBJTlZBTElEX1NUQVRFX0VSUiBleGNlcHRpb24gYW5kIGFi
b3J0IHRoZXNlIHN0ZXBzLgorICAgIGlmICghaXNPcGVuKCkpIHsKKyAgICAgICAgZWMgPSBJTlZB
TElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1lZGlhU291cmNl
UHJpdmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMgZW9zU3RhdHVzID0gTWVkaWFTb3VyY2VQcml2YXRl
OjpFb3NOb0Vycm9yOworCisgICAgaWYgKGVycm9yLmlzTnVsbCgpIHx8IGVycm9yLmlzRW1wdHko
KSkKKyAgICAgICAgZW9zU3RhdHVzID0gTWVkaWFTb3VyY2VQcml2YXRlOjpFb3NOb0Vycm9yOwor
ICAgIGVsc2UgaWYgKGVycm9yID09IG5ldHdvcmspCisgICAgICAgIGVvc1N0YXR1cyA9IE1lZGlh
U291cmNlUHJpdmF0ZTo6RW9zTmV0d29ya0Vycm9yOworICAgIGVsc2UgaWYgKGVycm9yID09IGRl
Y29kZSkKKyAgICAgICAgZW9zU3RhdHVzID0gTWVkaWFTb3VyY2VQcml2YXRlOjpFb3NEZWNvZGVF
cnJvcjsKKyAgICBlbHNlIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyAyLiBDaGFuZ2UgdGhlIHJlYWR5U3RhdGUgYXR0
cmlidXRlIHZhbHVlIHRvICJlbmRlZCIuCisgICAgc2V0UmVhZHlTdGF0ZShlbmRlZEtleXdvcmQo
KSk7CisgICAgbV9wcml2YXRlLT5tYXJrRW5kT2ZTdHJlYW0oZW9zU3RhdHVzKTsKK30KKwogU291
cmNlQnVmZmVyKiBNZWRpYVNvdXJjZTo6YWRkU291cmNlQnVmZmVyKGNvbnN0IFN0cmluZyYgdHlw
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgTE9HKE1lZGlhLCAiTWVkaWFTb3VyY2U6OmFk
ZFNvdXJjZUJ1ZmZlciglcykgJXAiLCB0eXBlLmFzY2lpKCkuZGF0YSgpLCB0aGlzKTsKQEAgLTI1
Niw1OCArNTE1LDI1IEBAIHZvaWQgTWVkaWFTb3VyY2U6OnJlbW92ZVNvdXJjZUJ1ZmZlcihTb3Vy
Y2VCdWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgICAgICAvLyBjYW5j
ZWxhYmxlLCBhbmQgdGhhdCB1c2VzIHRoZSBUcmFja0V2ZW50IGludGVyZmFjZSwgYXQgdGhlIFNv
dXJjZUJ1ZmZlciB0ZXh0VHJhY2tzIGxpc3QuCiAgICAgICAgICAgICB0ZXh0VHJhY2tzLT5yZW1v
dmUodHJhY2spOwogICAgICAgICB9Ci0KKyAgICAgICAgCiAgICAgICAgIC8vIDkuNCBJZiB0aGUg
cmVtb3ZlZCBlbmFibGVkIHRleHQgdHJhY2sgZmxhZyBlcXVhbHMgdHJ1ZSwgdGhlbiBxdWV1ZSBh
IHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudAogICAgICAgICAvLyBuYW1lZCBjaGFuZ2UgYXQg
dGhlIEhUTUxNZWRpYUVsZW1lbnQgdGV4dFRyYWNrcyBsaXN0LgogICAgICAgICBpZiAocmVtb3Zl
ZEVuYWJsZWRUZXh0VHJhY2spCiAgICAgICAgICAgICBtZWRpYUVsZW1lbnQoKS0+dGV4dFRyYWNr
cygpLT5zY2hlZHVsZUNoYW5nZUV2ZW50KCk7CiAgICAgfQotCi0KKyAgICAKKyAgICAKICAgICAv
LyAxMC4gSWYgc291cmNlQnVmZmVyIGlzIGluIGFjdGl2ZVNvdXJjZUJ1ZmZlcnMsIHRoZW4gcmVt
b3ZlIHNvdXJjZUJ1ZmZlciBmcm9tIGFjdGl2ZVNvdXJjZUJ1ZmZlcnMgLi4uCiAgICAgbV9hY3Rp
dmVTb3VyY2VCdWZmZXJzLT5yZW1vdmUoYnVmZmVyKTsKLQorICAgIAogICAgIC8vIDExLiBSZW1v
dmUgc291cmNlQnVmZmVyIGZyb20gc291cmNlQnVmZmVycyBhbmQgZmlyZSBhIHJlbW92ZXNvdXJj
ZWJ1ZmZlciBldmVudAogICAgIC8vIG9uIHRoYXQgb2JqZWN0LgogICAgIG1fc291cmNlQnVmZmVy
cy0+cmVtb3ZlKGJ1ZmZlcik7Ci0KKyAgICAKICAgICAvLyAxMi4gRGVzdHJveSBhbGwgcmVzb3Vy
Y2VzIGZvciBzb3VyY2VCdWZmZXIuCiAgICAgYnVmZmVyLT5yZW1vdmVkRnJvbU1lZGlhU291cmNl
KCk7CiB9CiAKLXZvaWQgTWVkaWFTb3VyY2U6Om9uUmVhZHlTdGF0ZUNoYW5nZShjb25zdCBBdG9t
aWNTdHJpbmcmIG9sZFN0YXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1N0YXRlKQotewotICAg
IGlmIChpc09wZW4oKSkgewotICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5zb3Vy
Y2VvcGVuRXZlbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG9sZFN0YXRl
ID09IG9wZW5LZXl3b3JkKCkgJiYgbmV3U3RhdGUgPT0gZW5kZWRLZXl3b3JkKCkpIHsKLSAgICAg
ICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkuc291cmNlZW5kZWRFdmVudCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaXNDbG9zZWQoKSk7Ci0KLSAgICBtX2FjdGl2
ZVNvdXJjZUJ1ZmZlcnMtPmNsZWFyKCk7Ci0KLSAgICAvLyBDbGVhciBTb3VyY2VCdWZmZXIgcmVm
ZXJlbmNlcyB0byB0aGlzIG9iamVjdC4KLSAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkg
PCBtX3NvdXJjZUJ1ZmZlcnMtPmxlbmd0aCgpOyArK2kpCi0gICAgICAgIG1fc291cmNlQnVmZmVy
cy0+aXRlbShpKS0+cmVtb3ZlZEZyb21NZWRpYVNvdXJjZSgpOwotICAgIG1fc291cmNlQnVmZmVy
cy0+Y2xlYXIoKTsKLQotICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLnNvdXJjZWNsb3Nl
RXZlbnQpOwotfQotCi1WZWN0b3I8UmVmUHRyPFRpbWVSYW5nZXM+PiBNZWRpYVNvdXJjZTo6YWN0
aXZlUmFuZ2VzKCkgY29uc3QKLXsKLSAgICBWZWN0b3I8UmVmUHRyPFRpbWVSYW5nZXM+PiBhY3Rp
dmVSYW5nZXMobV9hY3RpdmVTb3VyY2VCdWZmZXJzLT5sZW5ndGgoKSk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMtPmxlbmd0aCgpOyArK2kpCi0gICAg
ICAgIGFjdGl2ZVJhbmdlc1tpXSA9IG1fYWN0aXZlU291cmNlQnVmZmVycy0+aXRlbShpKS0+YnVm
ZmVyZWQoQVNTRVJUX05PX0VYQ0VQVElPTik7Ci0KLSAgICByZXR1cm4gYWN0aXZlUmFuZ2VzOwot
fQotCiBib29sIE1lZGlhU291cmNlOjppc1R5cGVTdXBwb3J0ZWQoY29uc3QgU3RyaW5nJiB0eXBl
KQogewogICAgIExPRyhNZWRpYSwgIk1lZGlhU291cmNlOjppc1R5cGVTdXBwb3J0ZWQoJXMpIiwg
dHlwZS5hc2NpaSgpLmRhdGEoKSk7CkBAIC0zMzYsOSArNTYyLDE5IEBAIGJvb2wgTWVkaWFTb3Vy
Y2U6OmlzVHlwZVN1cHBvcnRlZChjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgcmV0dXJuIE1lZGlh
UGxheWVyOjpzdXBwb3J0c1R5cGUocGFyYW1ldGVycywgMCkgIT0gTWVkaWFQbGF5ZXI6OklzTm90
U3VwcG9ydGVkOwogfQogCi1FdmVudFRhcmdldEludGVyZmFjZSBNZWRpYVNvdXJjZTo6ZXZlbnRU
YXJnZXRJbnRlcmZhY2UoKSBjb25zdAorYm9vbCBNZWRpYVNvdXJjZTo6aXNPcGVuKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gTWVkaWFTb3VyY2VFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CisgICAg
cmV0dXJuIHJlYWR5U3RhdGUoKSA9PSBvcGVuS2V5d29yZCgpOworfQorCitib29sIE1lZGlhU291
cmNlOjppc0Nsb3NlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlYWR5U3RhdGUoKSA9PSBjbG9z
ZWRLZXl3b3JkKCk7Cit9CisKK3ZvaWQgTWVkaWFTb3VyY2U6OmNsb3NlKCkKK3sKKyAgICBzZXRS
ZWFkeVN0YXRlKGNsb3NlZEtleXdvcmQoKSk7CiB9CiAKIHZvaWQgTWVkaWFTb3VyY2U6OnNvdXJj
ZUJ1ZmZlckRpZENoYW5nZUFjaXR2ZVN0YXRlKFNvdXJjZUJ1ZmZlciogc291cmNlQnVmZmVyLCBi
b29sIGFjdGl2ZSkKQEAgLTM0OSwxMDkgKzU4NSwxMjIgQEAgdm9pZCBNZWRpYVNvdXJjZTo6c291
cmNlQnVmZmVyRGlkQ2hhbmdlQWNpdHZlU3RhdGUoU291cmNlQnVmZmVyKiBzb3VyY2VCdWZmZXIs
IGIKICAgICAgICAgbV9hY3RpdmVTb3VyY2VCdWZmZXJzLT5yZW1vdmUoc291cmNlQnVmZmVyKTsK
IH0KIAotY2xhc3MgU291cmNlQnVmZmVyQnVmZmVyZWREb2VzTm90Q29udGFpblRpbWUgewotcHVi
bGljOgotICAgIFNvdXJjZUJ1ZmZlckJ1ZmZlcmVkRG9lc05vdENvbnRhaW5UaW1lKGRvdWJsZSB0
aW1lKSA6IG1fdGltZSh0aW1lKSB7IH0KLSAgICBib29sIG9wZXJhdG9yKCkoUmVmUHRyPFNvdXJj
ZUJ1ZmZlcj4gc291cmNlQnVmZmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuICFzb3VyY2VCdWZm
ZXItPmJ1ZmZlcmVkKCktPmNvbnRhaW4obV90aW1lKTsKLSAgICB9Ci0KLSAgICBkb3VibGUgbV90
aW1lOwotfTsKLQotY2xhc3MgU291cmNlQnVmZmVyQnVmZmVyZWRIYXNFbm91Z2ggewotcHVibGlj
OgotICAgIFNvdXJjZUJ1ZmZlckJ1ZmZlcmVkSGFzRW5vdWdoKGRvdWJsZSB0aW1lLCBkb3VibGUg
ZHVyYXRpb24pIDogbV90aW1lKHRpbWUpLCBtX2R1cmF0aW9uKGR1cmF0aW9uKSB7IH0KLSAgICBi
b29sIG9wZXJhdG9yKCkoUmVmUHRyPFNvdXJjZUJ1ZmZlcj4gc291cmNlQnVmZmVyKQotICAgIHsK
LSAgICAgICAgc2l6ZV90IHJhbmdlUG9zID0gc291cmNlQnVmZmVyLT5idWZmZXJlZCgpLT5maW5k
KG1fdGltZSk7Ci0gICAgICAgIGlmIChyYW5nZVBvcyA9PSBub3RGb3VuZCkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICBkb3VibGUgZW5kVGltZSA9IHNvdXJjZUJ1ZmZlci0+
YnVmZmVyZWQoKS0+ZW5kKHJhbmdlUG9zLCBJR05PUkVfRVhDRVBUSU9OKTsKLSAgICAgICAgcmV0
dXJuIG1fZHVyYXRpb24gLSBlbmRUaW1lIDwgMTsKLSAgICB9Citib29sIE1lZGlhU291cmNlOjph
dHRhY2hUb0VsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBpZiAobV9t
ZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGRvdWJsZSBtX3RpbWU7
Ci0gICAgZG91YmxlIG1fZHVyYXRpb247Ci19OworICAgIEFTU0VSVChpc0Nsb3NlZCgpKTsKIAot
Y2xhc3MgU291cmNlQnVmZmVyQnVmZmVyZWRIYXNGdXR1cmUgewotcHVibGljOgotICAgIFNvdXJj
ZUJ1ZmZlckJ1ZmZlcmVkSGFzRnV0dXJlKGRvdWJsZSB0aW1lKSA6IG1fdGltZSh0aW1lKSB7IH0K
LSAgICBib29sIG9wZXJhdG9yKCkoUmVmUHRyPFNvdXJjZUJ1ZmZlcj4gc291cmNlQnVmZmVyKQot
ICAgIHsKLSAgICAgICAgc2l6ZV90IHJhbmdlUG9zID0gc291cmNlQnVmZmVyLT5idWZmZXJlZCgp
LT5maW5kKG1fdGltZSk7Ci0gICAgICAgIGlmIChyYW5nZVBvcyA9PSBub3RGb3VuZCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX21lZGlhRWxlbWVudCA9IGVsZW1lbnQ7CisgICAg
cmV0dXJuIHRydWU7Cit9CiAKLSAgICAgICAgZG91YmxlIGVuZFRpbWUgPSBzb3VyY2VCdWZmZXIt
PmJ1ZmZlcmVkKCktPmVuZChyYW5nZVBvcywgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgICAgIHJl
dHVybiBlbmRUaW1lIC0gbV90aW1lID4gMTsKLSAgICB9Cit2b2lkIE1lZGlhU291cmNlOjpvcGVu
SWZJbkVuZGVkU3RhdGUoKQoreworICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gZW5kZWRLZXl3b3Jk
KCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGRvdWJsZSBtX3RpbWU7Ci19OworICAgIHNldFJl
YWR5U3RhdGUob3BlbktleXdvcmQoKSk7CisgICAgbV9wcml2YXRlLT51bm1hcmtFbmRPZlN0cmVh
bSgpOworfQogCi12b2lkIE1lZGlhU291cmNlOjptb25pdG9yU291cmNlQnVmZmVycygpCitib29s
IE1lZGlhU291cmNlOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogewotICAgIGRvdWJsZSBj
dXJyZW50VGltZSA9IG1lZGlhRWxlbWVudCgpLT5jdXJyZW50VGltZSgpOworICAgIHJldHVybiBt
X3ByaXZhdGUgfHwgbV9hc3luY0V2ZW50UXVldWUuaGFzUGVuZGluZ0V2ZW50cygpCisgICAgICAg
IHx8IEFjdGl2ZURPTU9iamVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7Cit9CiAKLSAgICAvLyAy
LjQuNCBTb3VyY2VCdWZmZXIgTW9uaXRvcmluZwotICAgIC8vIGh0dHBzOi8vZHZjcy53My5vcmcv
aGcvaHRtbC1tZWRpYS9yYXctZmlsZS9kZWZhdWx0L21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2Uu
aHRtbCNidWZmZXItbW9uaXRvcmluZwotICAgIC8vIOKGsyBJZiBidWZmZXJlZCBmb3IgYWxsIG9i
amVjdHMgaW4gYWN0aXZlU291cmNlQnVmZmVycyBkbyBub3QgY29udGFpbiBUaW1lUmFuZ2VzIGZv
ciB0aGUgY3VycmVudAotICAgIC8vIHBsYXliYWNrIHBvc2l0aW9uOgotICAgIGF1dG8gYmVnaW4g
PSBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMtPmJlZ2luKCk7Ci0gICAgYXV0byBlbmQgPSBtX2FjdGl2
ZVNvdXJjZUJ1ZmZlcnMtPmVuZCgpOwotICAgIGlmIChzdGQ6OmFsbF9vZihiZWdpbiwgZW5kLCBT
b3VyY2VCdWZmZXJCdWZmZXJlZERvZXNOb3RDb250YWluVGltZShjdXJyZW50VGltZSkpKSB7Ci0g
ICAgICAgIC8vIDEuIFNldCB0aGUgSFRNTE1lZGlhRWxlbWVudC5yZWFkeVN0YXRlIGF0dHJpYnV0
ZSB0byBIQVZFX01FVEFEQVRBLgotICAgICAgICAvLyAyLiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0
cmFuc2l0aW9uIHRvIEhBVkVfTUVUQURBVEEsIHRoZW4gcXVldWUgYSB0YXNrIHRvIGZpcmUgYSBz
aW1wbGUgZXZlbnQKLSAgICAgICAgLy8gbmFtZWQgbG9hZGVkbWV0YWRhdGEgYXQgdGhlIG1lZGlh
IGVsZW1lbnQuCi0gICAgICAgIG1fcHJpdmF0ZS0+c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6
SGF2ZU1ldGFkYXRhKTsKK3ZvaWQgTWVkaWFTb3VyY2U6OnN0b3AoKQoreworICAgIG1fYXN5bmNF
dmVudFF1ZXVlLmNsb3NlKCk7CisgICAgaWYgKCFpc0Nsb3NlZCgpKQorICAgICAgICBzZXRSZWFk
eVN0YXRlKGNsb3NlZEtleXdvcmQoKSk7CisgICAgbV9wcml2YXRlLmNsZWFyKCk7Cit9CiAKLSAg
ICAgICAgLy8gMy4gQWJvcnQgdGhlc2Ugc3RlcHMuCit2b2lkIE1lZGlhU291cmNlOjpvblJlYWR5
U3RhdGVDaGFuZ2UoY29uc3QgQXRvbWljU3RyaW5nJiBvbGRTdGF0ZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBuZXdTdGF0ZSkKK3sKKyAgICBpZiAoaXNPcGVuKCkpIHsKKyAgICAgICAgc2NoZWR1bGVF
dmVudChldmVudE5hbWVzKCkuc291cmNlb3BlbkV2ZW50KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIC8vIOKGsyBJZiBidWZmZXJlZCBmb3IgYWxsIG9iamVjdHMgaW4gYWN0aXZlU291
cmNlQnVmZmVycyBjb250YWluIFRpbWVSYW5nZXMgdGhhdCBpbmNsdWRlIHRoZSBjdXJyZW50Ci0g
ICAgLy8gcGxheWJhY2sgcG9zaXRpb24gYW5kIGVub3VnaCBkYXRhIHRvIGVuc3VyZSB1bmludGVy
cnVwdGVkIHBsYXliYWNrOgotICAgIGlmIChzdGQ6OmFsbF9vZihiZWdpbiwgZW5kLCBTb3VyY2VC
dWZmZXJCdWZmZXJlZEhhc0Vub3VnaChjdXJyZW50VGltZSwgbWVkaWFFbGVtZW50KCktPmR1cmF0
aW9uKCkpKSkgewotICAgICAgICAvLyAxLiBTZXQgdGhlIEhUTUxNZWRpYUVsZW1lbnQucmVhZHlT
dGF0ZSBhdHRyaWJ1dGUgdG8gSEFWRV9FTk9VR0hfREFUQS4KLSAgICAgICAgLy8gMi4gUXVldWUg
YSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgY2FucGxheXRocm91Z2ggYXQgdGhl
IG1lZGlhIGVsZW1lbnQuCi0gICAgICAgIC8vIDMuIFBsYXliYWNrIG1heSByZXN1bWUgYXQgdGhp
cyBwb2ludCBpZiBpdCB3YXMgcHJldmlvdXNseSBzdXNwZW5kZWQgYnkgYSB0cmFuc2l0aW9uIHRv
IEhBVkVfQ1VSUkVOVF9EQVRBLgotICAgICAgICBtX3ByaXZhdGUtPnNldFJlYWR5U3RhdGUoTWVk
aWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhKTsKLQotICAgICAgICAvLyA0LiBBYm9ydCB0aGVzZSBz
dGVwcy4KKyAgICBpZiAob2xkU3RhdGUgPT0gb3BlbktleXdvcmQoKSAmJiBuZXdTdGF0ZSA9PSBl
bmRlZEtleXdvcmQoKSkgeworICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5zb3Vy
Y2VlbmRlZEV2ZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIOKGsyBJZiBi
dWZmZXJlZCBmb3IgYXQgbGVhc3Qgb25lIG9iamVjdCBpbiBhY3RpdmVTb3VyY2VCdWZmZXJzIGNv
bnRhaW5zIGEgVGltZVJhbmdlIHRoYXQgaW5jbHVkZXMKLSAgICAvLyB0aGUgY3VycmVudCBwbGF5
YmFjayBwb3NpdGlvbiBidXQgbm90IGVub3VnaCBkYXRhIHRvIGVuc3VyZSB1bmludGVycnVwdGVk
IHBsYXliYWNrOgotICAgIGlmIChzdGQ6OmFueV9vZihiZWdpbiwgZW5kLCBTb3VyY2VCdWZmZXJC
dWZmZXJlZEhhc0Z1dHVyZShjdXJyZW50VGltZSkpKSB7Ci0gICAgICAgIC8vIDEuIFNldCB0aGUg
SFRNTE1lZGlhRWxlbWVudC5yZWFkeVN0YXRlIGF0dHJpYnV0ZSB0byBIQVZFX0ZVVFVSRV9EQVRB
LgotICAgICAgICAvLyAyLiBJZiB0aGUgcHJldmlvdXMgdmFsdWUgb2YgSFRNTE1lZGlhRWxlbWVu
dC5yZWFkeVN0YXRlIHdhcyBsZXNzIHRoYW4gSEFWRV9GVVRVUkVfREFUQSwgdGhlbiBxdWV1ZSBh
IHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudCBuYW1lZCBjYW5wbGF5IGF0IHRoZSBtZWRpYSBl
bGVtZW50LgotICAgICAgICAvLyAzLiBQbGF5YmFjayBtYXkgcmVzdW1lIGF0IHRoaXMgcG9pbnQg
aWYgaXQgd2FzIHByZXZpb3VzbHkgc3VzcGVuZGVkIGJ5IGEgdHJhbnNpdGlvbiB0byBIQVZFX0NV
UlJFTlRfREFUQS4KLSAgICAgICAgbV9wcml2YXRlLT5zZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVy
OjpIYXZlRnV0dXJlRGF0YSk7CisgICAgQVNTRVJUKGlzQ2xvc2VkKCkpOwogCi0gICAgICAgIC8v
IDQuIEFib3J0IHRoZXNlIHN0ZXBzLgotICAgICAgICByZXR1cm47CisgICAgbV9hY3RpdmVTb3Vy
Y2VCdWZmZXJzLT5jbGVhcigpOworCisgICAgLy8gQ2xlYXIgU291cmNlQnVmZmVyIHJlZmVyZW5j
ZXMgdG8gdGhpcyBvYmplY3QuCisgICAgZm9yICh1bnNpZ25lZCBsb25nIGkgPSAwLCBsZW5ndGgg
PSAgbV9zb3VyY2VCdWZmZXJzLT5sZW5ndGgoKTsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICBt
X3NvdXJjZUJ1ZmZlcnMtPml0ZW0oaSktPnJlbW92ZWRGcm9tTWVkaWFTb3VyY2UoKTsKKyAgICBt
X3NvdXJjZUJ1ZmZlcnMtPmNsZWFyKCk7CisgICAgCisgICAgc2NoZWR1bGVFdmVudChldmVudE5h
bWVzKCkuc291cmNlY2xvc2VFdmVudCk7Cit9CisKK1ZlY3RvcjxSZWZQdHI8VGltZVJhbmdlcz4+
IE1lZGlhU291cmNlOjphY3RpdmVSYW5nZXMoKSBjb25zdAoreworICAgIFZlY3RvcjxSZWZQdHI8
VGltZVJhbmdlcz4+IGFjdGl2ZVJhbmdlcyhtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMtPmxlbmd0aCgp
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMCwgbGVuZ3RoID0gbV9hY3RpdmVTb3VyY2VCdWZmZXJz
LT5sZW5ndGgoKTsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICBhY3RpdmVSYW5nZXNbaV0gPSBt
X2FjdGl2ZVNvdXJjZUJ1ZmZlcnMtPml0ZW0oaSktPmJ1ZmZlcmVkKEFTU0VSVF9OT19FWENFUFRJ
T04pOworCisgICAgcmV0dXJuIGFjdGl2ZVJhbmdlczsKK30KKworUmVmUHRyPFNvdXJjZUJ1ZmZl
clByaXZhdGU+IE1lZGlhU291cmNlOjpjcmVhdGVTb3VyY2VCdWZmZXJQcml2YXRlKGNvbnN0IENv
bnRlbnRUeXBlJiB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBSZWZQdHI8U291cmNl
QnVmZmVyUHJpdmF0ZT4gc291cmNlQnVmZmVyUHJpdmF0ZTsKKyAgICBzd2l0Y2ggKG1fcHJpdmF0
ZS0+YWRkU291cmNlQnVmZmVyKHR5cGUsIHNvdXJjZUJ1ZmZlclByaXZhdGUpKSB7CisgICAgY2Fz
ZSBNZWRpYVNvdXJjZVByaXZhdGU6Ok9rOiB7CisgICAgICAgIHJldHVybiBzb3VyY2VCdWZmZXJQ
cml2YXRlOworICAgIH0KKyAgICBjYXNlIE1lZGlhU291cmNlUHJpdmF0ZTo6Tm90U3VwcG9ydGVk
OgorICAgICAgICAvLyAyLjIgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1m
aWxlL2RlZmF1bHQvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS5odG1sI3dpZGwtTWVkaWFTb3Vy
Y2UtYWRkU291cmNlQnVmZmVyLVNvdXJjZUJ1ZmZlci1ET01TdHJpbmctdHlwZQorICAgICAgICAv
LyBTdGVwIDI6IElmIHR5cGUgY29udGFpbnMgYSBNSU1FIHR5cGUgLi4uIHRoYXQgaXMgbm90IHN1
cHBvcnRlZCB3aXRoIHRoZSB0eXBlcworICAgICAgICAvLyBzcGVjaWZpZWQgZm9yIHRoZSBvdGhl
ciBTb3VyY2VCdWZmZXIgb2JqZWN0cyBpbiBzb3VyY2VCdWZmZXJzLCB0aGVuIHRocm93CisgICAg
ICAgIC8vIGEgTk9UX1NVUFBPUlRFRF9FUlIgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVw
cy4KKyAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgY2FzZSBNZWRpYVNvdXJjZVByaXZhdGU6OlJlYWNoZWRJZExpbWl0OgorICAgICAg
ICAvLyAyLjIgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlL2RlZmF1
bHQvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS5odG1sI3dpZGwtTWVkaWFTb3VyY2UtYWRkU291
cmNlQnVmZmVyLVNvdXJjZUJ1ZmZlci1ET01TdHJpbmctdHlwZQorICAgICAgICAvLyBTdGVwIDM6
IElmIHRoZSB1c2VyIGFnZW50IGNhbid0IGhhbmRsZSBhbnkgbW9yZSBTb3VyY2VCdWZmZXIgb2Jq
ZWN0cyB0aGVuIHRocm93CisgICAgICAgIC8vIGEgUVVPVEFfRVhDRUVERURfRVJSIGV4Y2VwdGlv
biBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgICAgIGVjID0gUVVPVEFfRVhDRUVERURfRVJS
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICAvLyDihrMgSWYgYnVmZmVy
ZWQgZm9yIGF0IGxlYXN0IG9uZSBvYmplY3QgaW4gYWN0aXZlU291cmNlQnVmZmVycyBjb250YWlu
cyBhIFRpbWVSYW5nZSB0aGF0IGVuZHMKLSAgICAvLyBhdCB0aGUgY3VycmVudCBwbGF5YmFjayBw
b3NpdGlvbiBhbmQgZG9lcyBub3QgaGF2ZSBhIHJhbmdlIGNvdmVyaW5nIHRoZSB0aW1lIGltbWVk
aWF0ZWx5Ci0gICAgLy8gYWZ0ZXIgdGhlIGN1cnJlbnQgcG9zaXRpb246Ci0gICAgLy8gTk9URTog
TG9naWNhbGx5LCAhKGFsbCBvYmplY3RzIGRvIG5vdCBjb250YWluIGN1cnJlbnRUaW1lKSA9PSAo
c29tZSBvYmplY3RzIGNvbnRhaW4gY3VycmVudCB0aW1lKQorICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBudWxscHRyOworfQogCi0gICAgLy8gMS4gU2V0IHRoZSBIVE1MTWVk
aWFFbGVtZW50LnJlYWR5U3RhdGUgYXR0cmlidXRlIHRvIEhBVkVfQ1VSUkVOVF9EQVRBLgotICAg
IC8vIDIuIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRyYW5zaXRpb24gdG8gSEFWRV9DVVJSRU5UX0RB
VEEsIHRoZW4gcXVldWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUKLSAgICAvLyBldmVudCBuYW1l
ZCBsb2FkZWRkYXRhIGF0IHRoZSBtZWRpYSBlbGVtZW50LgotICAgIC8vIDMuIFBsYXliYWNrIGlz
IHN1c3BlbmRlZCBhdCB0aGlzIHBvaW50IHNpbmNlIHRoZSBtZWRpYSBlbGVtZW50IGRvZXNuJ3Qg
aGF2ZSBlbm91Z2ggZGF0YSB0bwotICAgIC8vIGFkdmFuY2UgdGhlIG1lZGlhIHRpbWVsaW5lLgot
ICAgIG1fcHJpdmF0ZS0+c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRh
KTsKK3ZvaWQgTWVkaWFTb3VyY2U6OnNjaGVkdWxlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudE5hbWUpCit7CisgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lLCBmYWxzZSwgZmFsc2UpOworICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7CiAKLSAg
ICAvLyA0LiBBYm9ydCB0aGVzZSBzdGVwcy4KKyAgICBtX2FzeW5jRXZlbnRRdWV1ZS5lbnF1ZXVl
RXZlbnQoZXZlbnQucmVsZWFzZSgpKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogTWVkaWFTb3VyY2U6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSBjb25zdAoreworICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKK30KKworRXZlbnRUYXJnZXRJbnRlcmZhY2UgTWVkaWFTb3VyY2U6OmV2ZW50VGFy
Z2V0SW50ZXJmYWNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTWVkaWFTb3VyY2VFdmVudFRhcmdl
dEludGVyZmFjZVR5cGU7Cit9CisKK1VSTFJlZ2lzdHJ5JiBNZWRpYVNvdXJjZTo6cmVnaXN0cnko
KSBjb25zdAoreworICAgIHJldHVybiBNZWRpYVNvdXJjZVJlZ2lzdHJ5OjpyZWdpc3RyeSgpOwor
fQorCit9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXNvdXJjZS9NZWRpYVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJj
ZS9NZWRpYVNvdXJjZS5oCmluZGV4IGUwZDIwYzdjYmFmZmRiMzA3YzI0NjNkNzdiMTZmNzljYWUy
ODA4YzUuLmYxM2EzOTlmOTk3YWRkMDdhMzJjZTM1ZDg4ZmZmNGQ1ODU1ZDBkNzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmgKQEAgLTMz
LDE5ICszMyw1NiBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIAotI2luY2x1ZGUgIk1l
ZGlhU291cmNlQmFzZS5oIgorI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUg
IkV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiR2VuZXJpY0V2ZW50UXVldWUuaCIKKyNpbmNsdWRl
ICJIVE1MTWVkaWFTb3VyY2UuaCIKKyNpbmNsdWRlICJNZWRpYVNvdXJjZVByaXZhdGUuaCIKICNp
bmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNsdWRlICJTb3VyY2VCdWZmZXIuaCIKICNp
bmNsdWRlICJTb3VyY2VCdWZmZXJMaXN0LmgiCisjaW5jbHVkZSAiVVJMUmVnaXN0cnkuaCIKKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIE1l
ZGlhU291cmNlIDogcHVibGljIE1lZGlhU291cmNlQmFzZSwgcHVibGljIFNjcmlwdFdyYXBwYWJs
ZSB7CitjbGFzcyBHZW5lcmljRXZlbnRRdWV1ZTsKKworY2xhc3MgTWVkaWFTb3VyY2UgOiBwdWJs
aWMgUmVmQ291bnRlZDxNZWRpYVNvdXJjZT4sIHB1YmxpYyBIVE1MTWVkaWFTb3VyY2UsIHB1Ymxp
YyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRhLCBwdWJs
aWMgU2NyaXB0V3JhcHBhYmxlIHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3Ry
aW5nJiBvcGVuS2V5d29yZCgpOworICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGNsb3Nl
ZEtleXdvcmQoKTsKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBlbmRlZEtleXdvcmQo
KTsKKwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU291cmNlPiBjcmVhdGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYpOwogICAgIHZpcnR1YWwgfk1lZGlhU291cmNlKCk7CiAKKyAgICB2b2lk
IGFkZGVkVG9SZWdpc3RyeSgpOworICAgIHZvaWQgcmVtb3ZlZEZyb21SZWdpc3RyeSgpOworICAg
IHZvaWQgb3BlbklmSW5FbmRlZFN0YXRlKCk7CisgICAgYm9vbCBpc09wZW4oKSBjb25zdDsKKyAg
ICB2b2lkIHNvdXJjZUJ1ZmZlckRpZENoYW5nZUFjaXR2ZVN0YXRlKFNvdXJjZUJ1ZmZlciosIGJv
b2wpOworCisgICAgLy8gSFRNTE1lZGlhU291cmNlCisgICAgdmlydHVhbCBib29sIGF0dGFjaFRv
RWxlbWVudChIVE1MTWVkaWFFbGVtZW50KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNl
dFByaXZhdGVBbmRPcGVuKFBhc3NSZWY8TWVkaWFTb3VyY2VQcml2YXRlPikgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGlzQ2xv
c2VkKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQo
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVmSFRNTE1lZGlhU291cmNlKCkg
T1ZFUlJJREUgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZkhUTUxNZWRpYVNvdXJj
ZSgpIE9WRVJSSURFIHsgZGVyZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBtb25pdG9yU291cmNl
QnVmZmVycygpIE9WRVJSSURFOworCisgICAgdm9pZCBzZXREdXJhdGlvbihkb3VibGUsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHJlYWR5U3RhdGUoKSBjb25zdCB7
IHJldHVybiBtX3JlYWR5U3RhdGU7IH0KKyAgICB2b2lkIHNldFJlYWR5U3RhdGUoY29uc3QgQXRv
bWljU3RyaW5nJik7CisgICAgdm9pZCBlbmRPZlN0cmVhbShjb25zdCBBdG9taWNTdHJpbmcmIGVy
cm9yLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiBtX21lZGlhRWxlbWVudDsgfQorCiAgICAgLy8gTWVkaWFTb3Vy
Y2UuaWRsIG1ldGhvZHMKICAgICBTb3VyY2VCdWZmZXJMaXN0KiBzb3VyY2VCdWZmZXJzKCkgeyBy
ZXR1cm4gbV9zb3VyY2VCdWZmZXJzLmdldCgpOyB9CiAgICAgU291cmNlQnVmZmVyTGlzdCogYWN0
aXZlU291cmNlQnVmZmVycygpIHsgcmV0dXJuIG1fYWN0aXZlU291cmNlQnVmZmVycy5nZXQoKTsg
fQpAQCAtNTMsMjggKzkwLDQxIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZVNvdXJjZUJ1ZmZl
cihTb3VyY2VCdWZmZXIqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgc3RhdGljIGJvb2wgaXNUeXBl
U3VwcG9ydGVkKGNvbnN0IFN0cmluZyYgdHlwZSk7CiAKKyAgICAvLyBBY3RpdmVET01PYmplY3Qg
aW50ZXJmYWNlCisgICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgT1ZFUlJJREU7CisKICAgICAvLyBFdmVu
dFRhcmdldCBpbnRlcmZhY2UKKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBPVkVSUklERSBGSU5BTCB7IHJlZigpOyB9CisgICAgdmly
dHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBPVkVSUklERSBGSU5BTCB7IGRlcmVmKCk7IH0K
ICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkg
Y29uc3QgT1ZFUlJJREU7CiAKLSAgICB1c2luZyBSZWZDb3VudGVkPE1lZGlhU291cmNlQmFzZT46
OnJlZjsKLSAgICB1c2luZyBSZWZDb3VudGVkPE1lZGlhU291cmNlQmFzZT46OmRlcmVmOwotCi0g
ICAgdm9pZCBzb3VyY2VCdWZmZXJEaWRDaGFuZ2VBY2l0dmVTdGF0ZShTb3VyY2VCdWZmZXIqLCBi
b29sKTsKKyAgICAvLyBVUkxSZWdpc3RyYWJsZSBpbnRlcmZhY2UKKyAgICB2aXJ0dWFsIFVSTFJl
Z2lzdHJ5JiByZWdpc3RyeSgpIGNvbnN0IE9WRVJSSURFOwogCi0gICAgdmlydHVhbCB2b2lkIG1v
bml0b3JTb3VyY2VCdWZmZXJzKCkgT1ZFUlJJREU7CisgICAgdXNpbmcgUmVmQ291bnRlZDxNZWRp
YVNvdXJjZT46OnJlZjsKKyAgICB1c2luZyBSZWZDb3VudGVkPE1lZGlhU291cmNlPjo6ZGVyZWY7
CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgTWVkaWFTb3VyY2UoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYpOwogCi0gICAgLy8gTWVkaWFTb3VyY2VCYXNlIGludGVyZmFjZQot
ICAgIHZpcnR1YWwgdm9pZCBvblJlYWR5U3RhdGVDaGFuZ2UoY29uc3QgQXRvbWljU3RyaW5nJiwg
Y29uc3QgQXRvbWljU3RyaW5nJikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBWZWN0b3I8UmVmUHRy
PFRpbWVSYW5nZXM+PiBhY3RpdmVSYW5nZXMoKSBjb25zdCBPVkVSUklERTsKKyAgICB2b2lkIG9u
UmVhZHlTdGF0ZUNoYW5nZShjb25zdCBBdG9taWNTdHJpbmcmIG9sZFN0YXRlLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG5ld1N0YXRlKTsKKyAgICBWZWN0b3I8UmVmUHRyPFRpbWVSYW5nZXM+PiBhY3Rp
dmVSYW5nZXMoKSBjb25zdDsKKworICAgIFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiBjcmVh
dGVTb3VyY2VCdWZmZXJQcml2YXRlKGNvbnN0IENvbnRlbnRUeXBlJiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgc2NoZWR1bGVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSk7
CisgICAgR2VuZXJpY0V2ZW50UXVldWUmIGFzeW5jRXZlbnRRdWV1ZSgpIHsgcmV0dXJuIG1fYXN5
bmNFdmVudFF1ZXVlOyB9CiAKKyAgICBSZWZQdHI8TWVkaWFTb3VyY2VQcml2YXRlPiBtX3ByaXZh
dGU7CiAgICAgUmVmUHRyPFNvdXJjZUJ1ZmZlckxpc3Q+IG1fc291cmNlQnVmZmVyczsKICAgICBS
ZWZQdHI8U291cmNlQnVmZmVyTGlzdD4gbV9hY3RpdmVTb3VyY2VCdWZmZXJzOworICAgIEhUTUxN
ZWRpYUVsZW1lbnQqIG1fbWVkaWFFbGVtZW50OworICAgIEF0b21pY1N0cmluZyBtX3JlYWR5U3Rh
dGU7CisgICAgR2VuZXJpY0V2ZW50UXVldWUgbV9hc3luY0V2ZW50UXVldWU7CiB9OwogCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCit9CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlQmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlQmFzZS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGYxZTQ2ZWZhNTQwZmQwODZkMGQ2YjczOGI0ZGE4MjQ5MThjZTc2
OGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZUJhc2UuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMzA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTWVk
aWFTb3VyY2VCYXNlLmgiCi0KLSNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQotCi0jaW5jbHVkZSAi
RXZlbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZVBsYWNlaG9sZGVyLmgiCi0jaW5jbHVkZSAiR2VuZXJpY0V2ZW50UXVldWUuaCIKLSNpbmNs
dWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTWVkaWFTb3VyY2VSZWdpc3RyeS5oIgotI2luY2x1
ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGUuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotTWVkaWFTb3VyY2VCYXNlOjpNZWRpYVNvdXJjZUJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCkKLSAgICA6IEFjdGl2ZURPTU9iamVjdCgmY29udGV4dCkKLSAgICAsIG1fbWVk
aWFFbGVtZW50KDApCi0gICAgLCBtX3JlYWR5U3RhdGUoY2xvc2VkS2V5d29yZCgpKQotICAgICwg
bV9hc3luY0V2ZW50UXVldWUoKnRoaXMpCi17Ci19Ci0KLU1lZGlhU291cmNlQmFzZTo6fk1lZGlh
U291cmNlQmFzZSgpCi17Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFTb3VyY2VCYXNl
OjpvcGVuS2V5d29yZCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNT
dHJpbmcsIG9wZW4sICgib3BlbiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
KTsKLSAgICByZXR1cm4gb3BlbjsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVNvdXJj
ZUJhc2U6OmNsb3NlZEtleXdvcmQoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3Qg
QXRvbWljU3RyaW5nLCBjbG9zZWQsICgiY2xvc2VkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCkpOwotICAgIHJldHVybiBjbG9zZWQ7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmlu
ZyYgTWVkaWFTb3VyY2VCYXNlOjplbmRlZEtleXdvcmQoKQotewotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBlbmRlZCwgKCJlbmRlZCIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICByZXR1cm4gZW5kZWQ7Ci19Ci0KLXZvaWQgTWVk
aWFTb3VyY2VCYXNlOjpzZXRQcml2YXRlQW5kT3BlbihQYXNzUmVmPE1lZGlhU291cmNlUHJpdmF0
ZT4gbWVkaWFTb3VyY2VQcml2YXRlKQotewotICAgIEFTU0VSVCghbV9wcml2YXRlKTsKLSAgICBB
U1NFUlQobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fcHJpdmF0ZSA9IHN0ZDo6bW92ZShtZWRpYVNv
dXJjZVByaXZhdGUpOwotICAgIHNldFJlYWR5U3RhdGUob3BlbktleXdvcmQoKSk7Ci19Ci0KLXZv
aWQgTWVkaWFTb3VyY2VCYXNlOjphZGRlZFRvUmVnaXN0cnkoKQotewotICAgIHNldFBlbmRpbmdB
Y3Rpdml0eSh0aGlzKTsKLX0KLQotdm9pZCBNZWRpYVNvdXJjZUJhc2U6OnJlbW92ZWRGcm9tUmVn
aXN0cnkoKQotewotICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwotfQotCi1kb3VibGUg
TWVkaWFTb3VyY2VCYXNlOjpkdXJhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzQ2xvc2Vk
KCkgPyBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCkgOiBtX3ByaXZhdGUt
PmR1cmF0aW9uKCk7Ci19Ci0KLVBhc3NSZWZQdHI8VGltZVJhbmdlcz4gTWVkaWFTb3VyY2VCYXNl
OjpidWZmZXJlZCgpIGNvbnN0Ci17Ci0gICAgLy8gSW1wbGVtZW50cyBNZWRpYVNvdXJjZSBhbGdv
cml0aG0gZm9yIEhUTUxNZWRpYUVsZW1lbnQuYnVmZmVyZWQuCi0gICAgLy8gaHR0cHM6Ly9kdmNz
LnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlL2RlZmF1bHQvbWVkaWEtc291cmNlL21lZGlh
LXNvdXJjZS5odG1sI2h0bWxtZWRpYWVsZW1lbnQtZXh0ZW5zaW9ucwotICAgIFZlY3RvcjxSZWZQ
dHI8VGltZVJhbmdlcz4+IHJhbmdlcyA9IGFjdGl2ZVJhbmdlcygpOwotCi0gICAgLy8gMS4gSWYg
YWN0aXZlU291cmNlQnVmZmVycy5sZW5ndGggZXF1YWxzIDAgdGhlbiByZXR1cm4gYW4gZW1wdHkg
VGltZVJhbmdlcyBvYmplY3QgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgotICAgIGlmIChyYW5nZXMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gVGltZVJhbmdlczo6Y3JlYXRlKCk7Ci0KLSAgICAv
LyAyLiBMZXQgYWN0aXZlIHJhbmdlcyBiZSB0aGUgcmFuZ2VzIHJldHVybmVkIGJ5IGJ1ZmZlcmVk
IGZvciBlYWNoIFNvdXJjZUJ1ZmZlciBvYmplY3QgaW4gYWN0aXZlU291cmNlQnVmZmVycy4KLSAg
ICAvLyAzLiBMZXQgaGlnaGVzdCBlbmQgdGltZSBiZSB0aGUgbGFyZ2VzdCByYW5nZSBlbmQgdGlt
ZSBpbiB0aGUgYWN0aXZlIHJhbmdlcy4KLSAgICBkb3VibGUgaGlnaGVzdEVuZFRpbWUgPSAtMTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJhbmdlcy5zaXplKCk7ICsraSkgewotICAgICAg
ICB1bnNpZ25lZCBsZW5ndGggPSByYW5nZXNbaV0tPmxlbmd0aCgpOwotICAgICAgICBpZiAobGVu
Z3RoKQotICAgICAgICAgICAgaGlnaGVzdEVuZFRpbWUgPSBzdGQ6Om1heChoaWdoZXN0RW5kVGlt
ZSwgcmFuZ2VzW2ldLT5lbmQobGVuZ3RoIC0gMSwgQVNTRVJUX05PX0VYQ0VQVElPTikpOwotICAg
IH0KLQotICAgIC8vIFJldHVybiBhbiBlbXB0eSByYW5nZSBpZiBhbGwgcmFuZ2VzIGFyZSBlbXB0
eS4KLSAgICBpZiAoaGlnaGVzdEVuZFRpbWUgPCAwKQotICAgICAgICByZXR1cm4gVGltZVJhbmdl
czo6Y3JlYXRlKCk7Ci0KLSAgICAvLyA0LiBMZXQgaW50ZXJzZWN0aW9uIHJhbmdlcyBlcXVhbCBh
IFRpbWVSYW5nZSBvYmplY3QgY29udGFpbmluZyBhIHNpbmdsZSByYW5nZSBmcm9tIDAgdG8gaGln
aGVzdCBlbmQgdGltZS4KLSAgICBSZWZQdHI8VGltZVJhbmdlcz4gaW50ZXJzZWN0aW9uUmFuZ2Vz
ID0gVGltZVJhbmdlczo6Y3JlYXRlKDAsIGhpZ2hlc3RFbmRUaW1lKTsKLQotICAgIC8vIDUuIEZv
ciBlYWNoIFNvdXJjZUJ1ZmZlciBvYmplY3QgaW4gYWN0aXZlU291cmNlQnVmZmVycyBydW4gdGhl
IGZvbGxvd2luZyBzdGVwczoKLSAgICBib29sIGVuZGVkID0gcmVhZHlTdGF0ZSgpID09IGVuZGVk
S2V5d29yZCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmFuZ2VzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIC8vIDUuMSBMZXQgc291cmNlIHJhbmdlcyBlcXVhbCB0aGUgcmFuZ2VzIHJl
dHVybmVkIGJ5IHRoZSBidWZmZXJlZCBhdHRyaWJ1dGUgb24gdGhlIGN1cnJlbnQgU291cmNlQnVm
ZmVyLgotICAgICAgICBUaW1lUmFuZ2VzKiBzb3VyY2VSYW5nZXMgPSByYW5nZXNbaV0uZ2V0KCk7
Ci0KLSAgICAgICAgLy8gNS4yIElmIHJlYWR5U3RhdGUgaXMgImVuZGVkIiwgdGhlbiBzZXQgdGhl
IGVuZCB0aW1lIG9uIHRoZSBsYXN0IHJhbmdlIGluIHNvdXJjZSByYW5nZXMgdG8gaGlnaGVzdCBl
bmQgdGltZS4KLSAgICAgICAgaWYgKGVuZGVkICYmIHNvdXJjZVJhbmdlcy0+bGVuZ3RoKCkpCi0g
ICAgICAgICAgICBzb3VyY2VSYW5nZXMtPmFkZChzb3VyY2VSYW5nZXMtPnN0YXJ0KHNvdXJjZVJh
bmdlcy0+bGVuZ3RoKCkgLSAxLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSwgaGlnaGVzdEVuZFRpbWUp
OwotCi0gICAgICAgIC8vIDUuMyBMZXQgbmV3IGludGVyc2VjdGlvbiByYW5nZXMgZXF1YWwgdGhl
IHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgaW50ZXJzZWN0aW9uIHJhbmdlcyBhbmQgdGhl
IHNvdXJjZSByYW5nZXMuCi0gICAgICAgIC8vIDUuNCBSZXBsYWNlIHRoZSByYW5nZXMgaW4gaW50
ZXJzZWN0aW9uIHJhbmdlcyB3aXRoIHRoZSBuZXcgaW50ZXJzZWN0aW9uIHJhbmdlcy4KLSAgICAg
ICAgaW50ZXJzZWN0aW9uUmFuZ2VzLT5pbnRlcnNlY3RXaXRoKHNvdXJjZVJhbmdlcyk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGludGVyc2VjdGlvblJhbmdlcy5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQg
TWVkaWFTb3VyY2VCYXNlOjpzZXREdXJhdGlvbihkb3VibGUgZHVyYXRpb24sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIGlmIChkdXJhdGlvbiA8IDAuMCB8fCBzdGQ6OmlzbmFuKGR1cmF0aW9u
KSkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAoIWlzT3BlbigpKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9F
UlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9wcml2YXRlLT5zZXREdXJhdGlvbihk
dXJhdGlvbik7Ci19Ci0KLQotdm9pZCBNZWRpYVNvdXJjZUJhc2U6OnNldFJlYWR5U3RhdGUoY29u
c3QgQXRvbWljU3RyaW5nJiBzdGF0ZSkKLXsKLSAgICBBU1NFUlQoc3RhdGUgPT0gb3BlbktleXdv
cmQoKSB8fCBzdGF0ZSA9PSBjbG9zZWRLZXl3b3JkKCkgfHwgc3RhdGUgPT0gZW5kZWRLZXl3b3Jk
KCkpOwotCi0gICAgQXRvbWljU3RyaW5nIG9sZFN0YXRlID0gcmVhZHlTdGF0ZSgpOwotICAgIExP
RyhNZWRpYSwgIk1lZGlhU291cmNlQmFzZTo6c2V0UmVhZHlTdGF0ZSgpICVwIDogJXMgLT4gJXMi
LCB0aGlzLCBvbGRTdGF0ZS5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgc3RhdGUuc3RyaW5nKCku
YXNjaWkoKS5kYXRhKCkpOwotCi0gICAgaWYgKHN0YXRlID09IGNsb3NlZEtleXdvcmQoKSkgewot
ICAgICAgICBtX3ByaXZhdGUuY2xlYXIoKTsKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQgPSAwOwot
ICAgIH0KLQotICAgIGlmIChvbGRTdGF0ZSA9PSBzdGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9yZWFkeVN0YXRlID0gc3RhdGU7Ci0KLSAgICBvblJlYWR5U3RhdGVDaGFuZ2Uob2xkU3Rh
dGUsIHN0YXRlKTsKLX0KLQotdm9pZCBNZWRpYVNvdXJjZUJhc2U6OmVuZE9mU3RyZWFtKGNvbnN0
IEF0b21pY1N0cmluZyYgZXJyb3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBuZXR3b3JrLCAoIm5ldHdvcmsiLCBBdG9t
aWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBBdG9taWNTdHJpbmcsIGRlY29kZSwgKCJkZWNvZGUiLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0KLSAgICAvLyAzLjEgaHR0cDovL2R2Y3MudzMub3JnL2hn
L2h0bWwtbWVkaWEvcmF3LWZpbGUvdGlwL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UuaHRtbCNk
b20tZW5kb2ZzdHJlYW0KLSAgICAvLyAxLiBJZiB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgaXMg
bm90IGluIHRoZSAib3BlbiIgc3RhdGUgdGhlbiB0aHJvdyBhbgotICAgIC8vIElOVkFMSURfU1RB
VEVfRVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCi0gICAgaWYgKCFpc09wZW4o
KSkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgTWVkaWFTb3VyY2VQcml2YXRlOjpFbmRPZlN0cmVhbVN0YXR1cyBlb3NTdGF0
dXMgPSBNZWRpYVNvdXJjZVByaXZhdGU6OkVvc05vRXJyb3I7Ci0KLSAgICBpZiAoZXJyb3IuaXNO
dWxsKCkgfHwgZXJyb3IuaXNFbXB0eSgpKQotICAgICAgICBlb3NTdGF0dXMgPSBNZWRpYVNvdXJj
ZVByaXZhdGU6OkVvc05vRXJyb3I7Ci0gICAgZWxzZSBpZiAoZXJyb3IgPT0gbmV0d29yaykKLSAg
ICAgICAgZW9zU3RhdHVzID0gTWVkaWFTb3VyY2VQcml2YXRlOjpFb3NOZXR3b3JrRXJyb3I7Ci0g
ICAgZWxzZSBpZiAoZXJyb3IgPT0gZGVjb2RlKQotICAgICAgICBlb3NTdGF0dXMgPSBNZWRpYVNv
dXJjZVByaXZhdGU6OkVvc0RlY29kZUVycm9yOwotICAgIGVsc2UgewotICAgICAgICBlYyA9IElO
VkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIDIuIENo
YW5nZSB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgdmFsdWUgdG8gImVuZGVkIi4KLSAgICBzZXRS
ZWFkeVN0YXRlKGVuZGVkS2V5d29yZCgpKTsKLSAgICBtX3ByaXZhdGUtPm1hcmtFbmRPZlN0cmVh
bShlb3NTdGF0dXMpOwotfQotCi1ib29sIE1lZGlhU291cmNlQmFzZTo6aXNPcGVuKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gcmVhZHlTdGF0ZSgpID09IG9wZW5LZXl3b3JkKCk7Ci19Ci0KLWJvb2wg
TWVkaWFTb3VyY2VCYXNlOjppc0Nsb3NlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlYWR5U3Rh
dGUoKSA9PSBjbG9zZWRLZXl3b3JkKCk7Ci19Ci0KLXZvaWQgTWVkaWFTb3VyY2VCYXNlOjpjbG9z
ZSgpCi17Ci0gICAgc2V0UmVhZHlTdGF0ZShjbG9zZWRLZXl3b3JkKCkpOwotfQotCi1ib29sIE1l
ZGlhU291cmNlQmFzZTo6YXR0YWNoVG9FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQp
Ci17Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBBU1NFUlQoaXNDbG9zZWQoKSk7Ci0KLSAgICBtX21lZGlhRWxlbWVudCA9IGVsZW1lbnQ7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWVkaWFTb3VyY2VCYXNlOjpvcGVuSWZJbkVuZGVk
U3RhdGUoKQotewotICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gZW5kZWRLZXl3b3JkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHNldFJlYWR5U3RhdGUob3BlbktleXdvcmQoKSk7Ci0gICAgbV9w
cml2YXRlLT51bm1hcmtFbmRPZlN0cmVhbSgpOwotfQotCi1ib29sIE1lZGlhU291cmNlQmFzZTo6
aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlIHx8IG1f
YXN5bmNFdmVudFF1ZXVlLmhhc1BlbmRpbmdFdmVudHMoKQotICAgICAgICB8fCBBY3RpdmVET01P
YmplY3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgpOwotfQotCi12b2lkIE1lZGlhU291cmNlQmFzZTo6
c3RvcCgpCi17Ci0gICAgbV9hc3luY0V2ZW50UXVldWUuY2xvc2UoKTsKLSAgICBpZiAoIWlzQ2xv
c2VkKCkpCi0gICAgICAgIHNldFJlYWR5U3RhdGUoY2xvc2VkS2V5d29yZCgpKTsKLSAgICBtX3By
aXZhdGUuY2xlYXIoKTsKLX0KLQotUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+IE1lZGlhU291
cmNlQmFzZTo6Y3JlYXRlU291cmNlQnVmZmVyUHJpdmF0ZShjb25zdCBDb250ZW50VHlwZSYgdHlw
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+
IHNvdXJjZUJ1ZmZlclByaXZhdGU7Ci0gICAgc3dpdGNoIChtX3ByaXZhdGUtPmFkZFNvdXJjZUJ1
ZmZlcih0eXBlLCBzb3VyY2VCdWZmZXJQcml2YXRlKSkgewotICAgIGNhc2UgTWVkaWFTb3VyY2VQ
cml2YXRlOjpPazogewotICAgICAgICByZXR1cm4gc291cmNlQnVmZmVyUHJpdmF0ZTsKLSAgICB9
Ci0gICAgY2FzZSBNZWRpYVNvdXJjZVByaXZhdGU6Ok5vdFN1cHBvcnRlZDoKLSAgICAgICAgLy8g
Mi4yIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvaHRtbC1tZWRpYS9yYXctZmlsZS9kZWZhdWx0L21l
ZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UuaHRtbCN3aWRsLU1lZGlhU291cmNlLWFkZFNvdXJjZUJ1
ZmZlci1Tb3VyY2VCdWZmZXItRE9NU3RyaW5nLXR5cGUKLSAgICAgICAgLy8gU3RlcCAyOiBJZiB0
eXBlIGNvbnRhaW5zIGEgTUlNRSB0eXBlIC4uLiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCB0
aGUgdHlwZXMKLSAgICAgICAgLy8gc3BlY2lmaWVkIGZvciB0aGUgb3RoZXIgU291cmNlQnVmZmVy
IG9iamVjdHMgaW4gc291cmNlQnVmZmVycywgdGhlbiB0aHJvdwotICAgICAgICAvLyBhIE5PVF9T
VVBQT1JURURfRVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCi0gICAgICAgIGVj
ID0gTk9UX1NVUFBPUlRFRF9FUlI7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNhc2Ug
TWVkaWFTb3VyY2VQcml2YXRlOjpSZWFjaGVkSWRMaW1pdDoKLSAgICAgICAgLy8gMi4yIGh0dHBz
Oi8vZHZjcy53My5vcmcvaGcvaHRtbC1tZWRpYS9yYXctZmlsZS9kZWZhdWx0L21lZGlhLXNvdXJj
ZS9tZWRpYS1zb3VyY2UuaHRtbCN3aWRsLU1lZGlhU291cmNlLWFkZFNvdXJjZUJ1ZmZlci1Tb3Vy
Y2VCdWZmZXItRE9NU3RyaW5nLXR5cGUKLSAgICAgICAgLy8gU3RlcCAzOiBJZiB0aGUgdXNlciBh
Z2VudCBjYW4ndCBoYW5kbGUgYW55IG1vcmUgU291cmNlQnVmZmVyIG9iamVjdHMgdGhlbiB0aHJv
dwotICAgICAgICAvLyBhIFFVT1RBX0VYQ0VFREVEX0VSUiBleGNlcHRpb24gYW5kIGFib3J0IHRo
ZXNlIHN0ZXBzLgotICAgICAgICBlYyA9IFFVT1RBX0VYQ0VFREVEX0VSUjsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgTWVkaWFTb3VyY2VCYXNlOjpzY2hlZHVsZUV2ZW50KGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lKQotewotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQg
PSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZSwgZmFsc2UsIGZhbHNlKTsKLSAgICBldmVudC0+c2V0
VGFyZ2V0KHRoaXMpOwotCi0gICAgbV9hc3luY0V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50KGV2ZW50
LnJlbGVhc2UoKSk7Ci19Ci0KLVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIE1lZGlhU291cmNlQmFz
ZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEFjdGl2ZURP
TU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotfQotCi1VUkxSZWdpc3RyeSYgTWVk
aWFTb3VyY2VCYXNlOjpyZWdpc3RyeSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIE1lZGlhU291cmNl
UmVnaXN0cnk6OnJlZ2lzdHJ5KCk7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlQmFzZS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZUJhc2UuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDk4ZmM0OTNiNTdiN2Q4ZTI1MjNkNTk5OWQ4ZmE4MGRmY2I1
NDI3Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlQmFzZS5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE1lZGlhU291cmNlQmFzZV9oCi0jZGVmaW5l
IE1lZGlhU291cmNlQmFzZV9oCi0KLSNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQotCi0jaW5jbHVk
ZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKLSNpbmNsdWRl
ICJHZW5lcmljRXZlbnRRdWV1ZS5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYVNvdXJjZS5oIgotI2lu
Y2x1ZGUgIk1lZGlhU291cmNlUHJpdmF0ZS5oIgotI2luY2x1ZGUgIlVSTFJlZ2lzdHJ5LmgiCi0j
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBH
ZW5lcmljRXZlbnRRdWV1ZTsKLQotY2xhc3MgTWVkaWFTb3VyY2VCYXNlIDogcHVibGljIFJlZkNv
dW50ZWQ8TWVkaWFTb3VyY2VCYXNlPiwgcHVibGljIEhUTUxNZWRpYVNvdXJjZSwgcHVibGljIEFj
dGl2ZURPTU9iamVjdCwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEgewotcHVibGlj
OgotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIG9wZW5LZXl3b3JkKCk7Ci0gICAgc3Rh
dGljIGNvbnN0IEF0b21pY1N0cmluZyYgY2xvc2VkS2V5d29yZCgpOwotICAgIHN0YXRpYyBjb25z
dCBBdG9taWNTdHJpbmcmIGVuZGVkS2V5d29yZCgpOwotCi0gICAgdmlydHVhbCB+TWVkaWFTb3Vy
Y2VCYXNlKCk7Ci0KLSAgICB2b2lkIGFkZGVkVG9SZWdpc3RyeSgpOwotICAgIHZvaWQgcmVtb3Zl
ZEZyb21SZWdpc3RyeSgpOwotICAgIHZvaWQgb3BlbklmSW5FbmRlZFN0YXRlKCk7Ci0gICAgYm9v
bCBpc09wZW4oKSBjb25zdDsKLQotICAgIC8vIEhUTUxNZWRpYVNvdXJjZQotICAgIHZpcnR1YWwg
Ym9vbCBhdHRhY2hUb0VsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopIE9WRVJSSURFOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRQcml2YXRlQW5kT3BlbihQYXNzUmVmPE1lZGlhU291cmNlUHJpdmF0ZT4p
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgYm9vbCBpc0Nsb3NlZCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgZG91YmxlIGR1
cmF0aW9uKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRpbWVSYW5n
ZXM+IGJ1ZmZlcmVkKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHJlZkhUTUxN
ZWRpYVNvdXJjZSgpIE9WRVJSSURFIHsgcmVmKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVyZWZI
VE1MTWVkaWFTb3VyY2UoKSBPVkVSUklERSB7IGRlcmVmKCk7IH0KLQotICAgIHZvaWQgc2V0RHVy
YXRpb24oZG91YmxlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBy
ZWFkeVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkeVN0YXRlOyB9Ci0gICAgdm9pZCBzZXRS
ZWFkeVN0YXRlKGNvbnN0IEF0b21pY1N0cmluZyYpOwotICAgIHZvaWQgZW5kT2ZTdHJlYW0oY29u
c3QgQXRvbWljU3RyaW5nJiBlcnJvciwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgSFRNTE1lZGlh
RWxlbWVudCogbWVkaWFFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYUVsZW1lbnQ7IH0K
LQotICAgIC8vIEFjdGl2ZURPTU9iamVjdCBpbnRlcmZhY2UKLSAgICB2aXJ0dWFsIGJvb2wgaGFz
UGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3Ao
KSBPVkVSUklERTsKLQotICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQotICAgIHZpcnR1YWwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IE9W
RVJSSURFIEZJTkFMOwotICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIE9WRVJSSURF
IEZJTkFMIHsgcmVmKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIE9W
RVJSSURFIEZJTkFMIHsgZGVyZWYoKTsgfQotCi0gICAgLy8gVVJMUmVnaXN0cmFibGUgaW50ZXJm
YWNlCi0gICAgdmlydHVhbCBVUkxSZWdpc3RyeSYgcmVnaXN0cnkoKSBjb25zdCBPVkVSUklERTsK
LQotICAgIHVzaW5nIFJlZkNvdW50ZWQ8TWVkaWFTb3VyY2VCYXNlPjo6cmVmOwotICAgIHVzaW5n
IFJlZkNvdW50ZWQ8TWVkaWFTb3VyY2VCYXNlPjo6ZGVyZWY7Ci0KLXByb3RlY3RlZDoKLSAgICBl
eHBsaWNpdCBNZWRpYVNvdXJjZUJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOwotCi0gICAg
dmlydHVhbCB2b2lkIG9uUmVhZHlTdGF0ZUNoYW5nZShjb25zdCBBdG9taWNTdHJpbmcmIG9sZFN0
YXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1N0YXRlKSA9IDA7Ci0gICAgdmlydHVhbCBWZWN0
b3I8UmVmUHRyPFRpbWVSYW5nZXM+PiBhY3RpdmVSYW5nZXMoKSBjb25zdCA9IDA7Ci0KLSAgICBS
ZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZT4gY3JlYXRlU291cmNlQnVmZmVyUHJpdmF0ZShjb25z
dCBDb250ZW50VHlwZSYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNjaGVkdWxlRXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUpOwotICAgIEdlbmVyaWNFdmVudFF1ZXVlJiBh
c3luY0V2ZW50UXVldWUoKSB7IHJldHVybiBtX2FzeW5jRXZlbnRRdWV1ZTsgfQotCi0gICAgUmVm
UHRyPE1lZGlhU291cmNlUHJpdmF0ZT4gbV9wcml2YXRlOwotICAgIEhUTUxNZWRpYUVsZW1lbnQq
IG1fbWVkaWFFbGVtZW50OwotICAgIEF0b21pY1N0cmluZyBtX3JlYWR5U3RhdGU7Ci0gICAgR2Vu
ZXJpY0V2ZW50UXVldWUgbV9hc3luY0V2ZW50UXVldWU7Ci19OwotCi19Ci0KLSNlbmRpZgotCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVk
aWFTb3VyY2VSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L01lZGlhU291cmNlUmVnaXN0cnkuY3BwCmluZGV4IDQyNTE3NzMzZjFhNThhNTE4ODJjNzllYjRk
NTMyZTIzODNmNzRjZWMuLmE2NTMwODg2MDA5OTAxOWVmOTJiYWE0NWNiNzZiZDRiMzVhMjViYmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3Vy
Y2VSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9N
ZWRpYVNvdXJjZVJlZ2lzdHJ5LmNwcApAQCAtMzMsOCArMzMsOCBAQAogCiAjaWYgRU5BQkxFKE1F
RElBX1NPVVJDRSkKIAorI2luY2x1ZGUgIk1lZGlhU291cmNlLmgiCiAjaW5jbHVkZSAiVVJMLmgi
Ci0jaW5jbHVkZSAiTWVkaWFTb3VyY2VCYXNlLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTEsNyArNTEsNyBAQCB2b2lkIE1lZGlhU291
cmNlUmVnaXN0cnk6OnJlZ2lzdGVyVVJMKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgVVJMJiB1cmws
IFVSTFJlZ2lzdAogICAgIEFTU0VSVCgmcmVnaXN0cmFibGUtPnJlZ2lzdHJ5KCkgPT0gdGhpcyk7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIE1lZGlhU291cmNlQmFzZSogc291
cmNlID0gc3RhdGljX2Nhc3Q8TWVkaWFTb3VyY2VCYXNlKj4ocmVnaXN0cmFibGUpOworICAgIE1l
ZGlhU291cmNlKiBzb3VyY2UgPSBzdGF0aWNfY2FzdDxNZWRpYVNvdXJjZSo+KHJlZ2lzdHJhYmxl
KTsKICAgICBzb3VyY2UtPmFkZGVkVG9SZWdpc3RyeSgpOwogICAgIG1fbWVkaWFTb3VyY2VzLnNl
dCh1cmwuc3RyaW5nKCksIHNvdXJjZSk7CiB9CkBAIC01OSwxMSArNTksMTEgQEAgdm9pZCBNZWRp
YVNvdXJjZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTChTZWN1cml0eU9yaWdpbiosIGNvbnN0IFVSTCYg
dXJsLCBVUkxSZWdpc3QKIHZvaWQgTWVkaWFTb3VyY2VSZWdpc3RyeTo6dW5yZWdpc3RlclVSTChj
b25zdCBVUkwmIHVybCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEhhc2hN
YXA8U3RyaW5nLCBSZWZQdHI8TWVkaWFTb3VyY2VCYXNlPj46Oml0ZXJhdG9yIGl0ZXIgPSBtX21l
ZGlhU291cmNlcy5maW5kKHVybC5zdHJpbmcoKSk7CisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0
cjxNZWRpYVNvdXJjZT4+OjppdGVyYXRvciBpdGVyID0gbV9tZWRpYVNvdXJjZXMuZmluZCh1cmwu
c3RyaW5nKCkpOwogICAgIGlmIChpdGVyID09IG1fbWVkaWFTb3VyY2VzLmVuZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBSZWZQdHI8TWVkaWFTb3VyY2VCYXNlPiBzb3VyY2UgPSBpdGVyLT52
YWx1ZTsKKyAgICBSZWZQdHI8TWVkaWFTb3VyY2U+IHNvdXJjZSA9IGl0ZXItPnZhbHVlOwogICAg
IG1fbWVkaWFTb3VyY2VzLnJlbW92ZShpdGVyKTsKICAgICBzb3VyY2UtPnJlbW92ZWRGcm9tUmVn
aXN0cnkoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3Vy
Y2UvTWVkaWFTb3VyY2VSZWdpc3RyeS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNv
dXJjZS9NZWRpYVNvdXJjZVJlZ2lzdHJ5LmgKaW5kZXggOTcyNzkwMjBkMTI5MWYwMGIzMTJjZTU0
MDcwMGIzNzQ4NzAwMTMwNC4uOWNlMzVkZTI3N2E5NjczMTEyM2NkYjkwYmM0ZWUyYzAzMWU1YTZl
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNv
dXJjZVJlZ2lzdHJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9N
ZWRpYVNvdXJjZVJlZ2lzdHJ5LmgKQEAgLTQxLDcgKzQxLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgVVJMOwotY2xhc3MgTWVkaWFTb3VyY2VCYXNlOworY2xhc3MgTWVkaWFTb3Vy
Y2U7CiAKIGNsYXNzIE1lZGlhU291cmNlUmVnaXN0cnkgRklOQUwgOiBwdWJsaWMgVVJMUmVnaXN0
cnkgewogcHVibGljOgpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAg
TWVkaWFTb3VyY2VSZWdpc3RyeSgpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8TWVkaWFT
b3VyY2VCYXNlPj4gbV9tZWRpYVNvdXJjZXM7CisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxN
ZWRpYVNvdXJjZT4+IG1fbWVkaWFTb3VyY2VzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDNlYmNlNTRmOThjNTllNmI5MTIyZjI0MDdhYWE3ZjA0MjY2ZWRlZTYuLjQyZmVkNDU1
ZTgzNmVlODk0NjRmOTcyZThiZDExNzk0ODFjN2FlNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUzMzAsOCArNTMzMCw2IEBA
CiAJCUNEMzM2RjY3MTdGQTBBQzYwMERERENEMCAvKiBWaWRlb1RyYWNrUHJpdmF0ZUFWRk9iakMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QzMzZG
NjUxN0ZBMEFDNjAwREREQ0QwIC8qIFZpZGVvVHJhY2tQcml2YXRlQVZGT2JqQy5jcHAgKi87IH07
CiAJCUNEMzM2RjY4MTdGQTBBQzYwMERERENEMCAvKiBWaWRlb1RyYWNrUHJpdmF0ZUFWRk9iakMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEMzM2RjY2
MTdGQTBBQzYwMERERENEMCAvKiBWaWRlb1RyYWNrUHJpdmF0ZUFWRk9iakMuaCAqLzsgfTsKIAkJ
Q0QzN0IzOTgxNUMxQjk3MTAwNkRDODk4IC8qIERpYWdub3N0aWNMb2dnaW5nS2V5cy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDM3QjM3NDE1QzFB
N0UxMDA2REM4OTggLyogRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcCAqLzsgfTsKLQkJQ0QzQTQ5
NTIxN0E5QzhDNjAwMjc0RTQyIC8qIE1lZGlhU291cmNlQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QzQTQ5NTExN0E5QzhCNjAwMjc0RTQyIC8q
IE1lZGlhU291cmNlQmFzZS5oICovOyB9OwotCQlDRDNBNDk1NDE3QTlDQzkwMDAyNzRFNDIgLyog
TWVkaWFTb3VyY2VCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEM0E0OTUwMTdBOUM4QjYwMDI3NEU0MiAvKiBNZWRpYVNvdXJjZUJhc2UuY3Bw
ICovOyB9OwogCQlDRDNBNDk1RTE3QTlEMDFCMDAyNzRFNDIgLyogTWVkaWFTb3VyY2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QzQTQ5NTUxN0E5
RDAxQjAwMjc0RTQyIC8qIE1lZGlhU291cmNlLmNwcCAqLzsgfTsKIAkJQ0QzQTQ5NUYxN0E5RDAx
QjAwMjc0RTQyIC8qIE1lZGlhU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDRDNBNDk1NjE3QTlEMDFCMDAyNzRFNDIgLyogTWVkaWFTb3VyY2Uu
aCAqLzsgfTsKIAkJQ0QzQTQ5NjExN0E5RDAxQjAwMjc0RTQyIC8qIFNvdXJjZUJ1ZmZlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDNBNDk1ODE3
QTlEMDFCMDAyNzRFNDIgLyogU291cmNlQnVmZmVyLmNwcCAqLzsgfTsKQEAgLTc3NDAsOCArNzcz
OCw4IEBACiAJCTMxNDZGRTY1MTg0NDIwODcwMDFBOTM3QyAvKiBPRVNUZXh0dXJlRmxvYXRMaW5l
YXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT0VTVGV4dHVyZUZs
b2F0TGluZWFyLmNwcDsgcGF0aCA9IGNhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTQ2RkU2NjE4NDQyMDg3MDAxQTkzN0MgLyog
T0VTVGV4dHVyZUZsb2F0TGluZWFyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IE9FU1RleHR1cmVGbG9hdExpbmVhci5oOyBwYXRoID0gY2FudmFzL09FU1RleHR1cmVGbG9hdExp
bmVhci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTQ2RkU2NzE4NDQyMDg3MDAx
QTkzN0MgLyogT0VTVGV4dHVyZUZsb2F0TGluZWFyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUg
PSBPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaWRsOyBwYXRoID0gY2FudmFzL09FU1RleHR1cmVGbG9h
dExpbmVhci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxNDZGRTcwMTg0NDIz
NjcwMDFBOTM3QyAvKiBKU09FU1RleHR1cmVGbG9hdExpbmVhci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU09FU1RleHR1cmVGbG9hdExpbmVhci5jcHA7IHBhdGgg
PSBKU09FU1RleHR1cmVGbG9hdExpbmVhci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTMxNDZGRTcxMTg0NDIzNjcwMDFBOTM3QyAvKiBKU09FU1RleHR1cmVGbG9hdExpbmVhci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU09FU1RleHR1cmVGbG9hdExpbmVh
ci5oOyBwYXRoID0gSlNPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMzE0NkZFNzAxODQ0MjM2NzAwMUE5MzdDIC8qIEpTT0VTVGV4dHVyZUZsb2F0
TGluZWFyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTT0VTVGV4
dHVyZUZsb2F0TGluZWFyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE0NkZF
NzExODQ0MjM2NzAwMUE5MzdDIC8qIEpTT0VTVGV4dHVyZUZsb2F0TGluZWFyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTT0VTVGV4dHVyZUZsb2F0TGluZWFyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNjAyM0VGMTUzMkM0MEMwMEQ1MEZGNCAvKiBEaWN0
aW9uYXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpY3Rpb25hcnkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE2MTFFNTQwRTFDNEQ0QTAwRjZBNTc5IC8q
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMx
NjExRTU4MEUxQzRERTAwMEY2QTU3OSAvKiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI0MTcsOCArMTI0MTUs
NiBAQAogCQlDRDMzNkY2NjE3RkEwQUM2MDBERERDRDAgLyogVmlkZW9UcmFja1ByaXZhdGVBVkZP
YmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFZpZGVvVHJhY2tQcml2YXRl
QVZGT2JqQy5oOyBwYXRoID0gb2JqYy9WaWRlb1RyYWNrUHJpdmF0ZUFWRk9iakMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0QzN0IzNzQxNUMxQTdFMTAwNkRDODk4IC8qIERpYWdu
b3N0aWNMb2dnaW5nS2V5cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEaWFnbm9zdGljTG9nZ2luZ0tleXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDRDM3QjM3NTE1QzFBN0UxMDA2REM4OTggLyogRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNMb2dnaW5nS2V5cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDRDNBNDk1MDE3QTlDOEI2MDAyNzRFNDIgLyog
TWVkaWFTb3VyY2VCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhU291cmNlQmFzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEM0E0OTUxMTdBOUM4QjYwMDI3NEU0
MiAvKiBNZWRpYVNvdXJjZUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFTb3VyY2VCYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEM0E0OTU1MTdBOUQwMUIwMDI3NEU0MiAv
KiBNZWRpYVNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBN
ZWRpYVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEM0E0OTU2MTdB
OUQwMUIwMDI3NEU0MiAvKiBNZWRpYVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNZWRpYVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDNB
NDk1NzE3QTlEMDFCMDAyNzRFNDIgLyogTWVkaWFTb3VyY2UuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IE1lZGlhU291cmNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4
NTczLDggKzE4NTY5LDYgQEAKIAkJCQlDRDNBNDk1NTE3QTlEMDFCMDAyNzRFNDIgLyogTWVkaWFT
b3VyY2UuY3BwICovLAogCQkJCUNEM0E0OTU2MTdBOUQwMUIwMDI3NEU0MiAvKiBNZWRpYVNvdXJj
ZS5oICovLAogCQkJCUNEM0E0OTU3MTdBOUQwMUIwMDI3NEU0MiAvKiBNZWRpYVNvdXJjZS5pZGwg
Ki8sCi0JCQkJQ0QzQTQ5NTAxN0E5QzhCNjAwMjc0RTQyIC8qIE1lZGlhU291cmNlQmFzZS5jcHAg
Ki8sCi0JCQkJQ0QzQTQ5NTExN0E5QzhCNjAwMjc0RTQyIC8qIE1lZGlhU291cmNlQmFzZS5oICov
LAogCQkJCUIxQTk0MkUxMTVCNUNFMjIwMEQ1MjVEMSAvKiBNZWRpYVNvdXJjZVJlZ2lzdHJ5LmNw
cCAqLywKIAkJCQlCMUE5NDJFMjE1QjVDRTIyMDBENTI1RDEgLyogTWVkaWFTb3VyY2VSZWdpc3Ry
eS5oICovLAogCQkJCUNEM0E0OTU4MTdBOUQwMUIwMDI3NEU0MiAvKiBTb3VyY2VCdWZmZXIuY3Bw
ICovLApAQCAtMjM5NjcsNyArMjM5NjEsNiBAQAogCQkJCUJDMkNCRjRFMTQwRjFBQkQwMDM4NzlC
RSAvKiBKU1dlYkdMQ29udGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTNGQUQzOTE0
NzMzRjQwMTFFNDIzMDcgLyogSlNXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmggaW4gSGVhZGVycyAq
LywKIAkJCQk2RTNGQUQzOTE0NzMzRjQwMjJFNDIzMDcgLyogSlNXZWJHTERlYnVnU2hhZGVycy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQ0QzQTQ5NTIxN0E5QzhDNjAwMjc0RTQyIC8qIE1lZGlhU291
cmNlQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkUzRkFEMzkxNDczM0Y0MDAwRTQyMzA3IC8q
IEpTV2ViR0xEZXB0aFRleHR1cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOTk4MTA0MkQy
RDMwMDA5RDQ0NyAvKiBKU1dlYkdMRnJhbWVidWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
RjFENUMxMTJENTMzNTYwMDgzMkJFQyAvKiBKU1dlYkdMTG9zZUNvbnRleHQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjYzNzAsNyArMjYzNjMsNiBAQAogCQkJCTUxNjAzMDZDMENDNDM2MjMwMEM4QUMy
NSAvKiBGaWxlU3lzdGVtQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDc3OUJGMEQxODQ1MzE2
ODAwMEI2QUU3IC8qIEhUTUxNZWRpYUVsZW1lbnRNZWRpYVN0cmVhbS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkyNkMxN0EzRjE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5tbSBpbiBT
b3VyY2VzICovLAotCQkJCUNEM0E0OTU0MTdBOUNDOTAwMDI3NEU0MiAvKiBNZWRpYVNvdXJjZUJh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0QjNGNzYwQzcyMjA1NTAwMDUzMERGIC8qIEZp
bGVTeXN0ZW1NYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk2RUQ4QzM3OTE4M0JGRjhDMDA5RTUz
QkQgLyogQm94U2hhcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2MDMwMEIwQ0M0MjUxMjAw
QzhBQzI1IC8qIEZpbGVTeXN0ZW1QT1NJWC5jcHAgaW4gU291cmNlcyAqLywK
</data>

          </attachment>
      

    </bug>

</bugzilla>